/** * vue v3.4.27 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT */ /*! #__NO_SIDE_EFFECTS__ */ // @__NO_SIDE_EFFECTS__ function makeMap(str, expectsLowerCase) { const set = new Set(str.split(',')) return val => set.has(val) } const EMPTY_OBJ = Object.freeze({}) const EMPTY_ARR = Object.freeze([]) function NOOP() { } const NO = () => false function isOn(key) { return key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 // uppercase letter && (key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97) } const isModelListener = key => key.startsWith('onUpdate:') const extend = Object.assign function remove(arr, el) { const i = arr.indexOf(el) if (i > -1) arr.splice(i, 1) } const hasOwnProperty$1 = Object.prototype.hasOwnProperty const hasOwn = (val, key) => hasOwnProperty$1.call(val, key) const isArray = Array.isArray const isMap = val => toTypeString(val) === '[object Map]' const isSet = val => toTypeString(val) === '[object Set]' const isDate = val => toTypeString(val) === '[object Date]' const isRegExp = val => toTypeString(val) === '[object RegExp]' const isFunction = val => typeof val === 'function' const isString = val => typeof val === 'string' const isSymbol = val => typeof val === 'symbol' const isObject = val => val !== null && typeof val === 'object' function isPromise(val) { return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch) } const objectToString = Object.prototype.toString const toTypeString = value => objectToString.call(value) function toRawType(value) { return toTypeString(value).slice(8, -1) } const isPlainObject = val => toTypeString(val) === '[object Object]' const isIntegerKey = key => isString(key) && key !== 'NaN' && key[0] !== '-' && `${Number.parseInt(key, 10)}` === key const isReservedProp = /* @__PURE__ */ makeMap( // the leading comma is intentional so empty string "" is also included ',key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted', ) const isBuiltInDirective = /* @__PURE__ */ makeMap( 'bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo', ) function cacheStringFunction(fn) { const cache = /* @__PURE__ */ Object.create(null) return (str) => { const hit = cache[str] return hit || (cache[str] = fn(str)) } } const camelizeRE = /-(\w)/g const camelize = cacheStringFunction((str) => { return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '') }) const hyphenateRE = /\B([A-Z])/g const hyphenate = cacheStringFunction( str => str.replace(hyphenateRE, '-$1').toLowerCase(), ) const capitalize = cacheStringFunction((str) => { return str.charAt(0).toUpperCase() + str.slice(1) }) const toHandlerKey = cacheStringFunction((str) => { const s = str ? `on${capitalize(str)}` : `` return s }) const hasChanged = (value, oldValue) => !Object.is(value, oldValue) function invokeArrayFns(fns, arg) { for (let i = 0; i < fns.length; i++) fns[i](arg) } function def(obj, key, value, writable = false) { Object.defineProperty(obj, key, { configurable: true, enumerable: false, writable, value, }) } function looseToNumber(val) { const n = Number.parseFloat(val) return isNaN(n) ? val : n } function toNumber(val) { const n = isString(val) ? Number(val) : Number.NaN return isNaN(n) ? val : n } let _globalThis function getGlobalThis() { return _globalThis || (_globalThis = typeof globalThis !== 'undefined' ? globalThis : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {}) } const 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' const isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED) function normalizeStyle(value) { if (isArray(value)) { const res = {} for (let i = 0; i < value.length; i++) { const item = value[i] const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item) if (normalized) { for (const key in normalized) res[key] = normalized[key] } } return res } else if (isString(value) || isObject(value)) { return value } } const listDelimiterRE = /;(?![^(]*\))/g const propertyDelimiterRE = /:([^]+)/ const styleCommentRE = /\/\*[^]*?\*\//g function parseStringStyle(cssText) { const ret = {} cssText.replace(styleCommentRE, '').split(listDelimiterRE).forEach((item) => { if (item) { const tmp = item.split(propertyDelimiterRE) tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()) } }) return ret } function stringifyStyle(styles) { let ret = '' if (!styles || isString(styles)) return ret for (const key in styles) { const value = styles[key] if (isString(value) || typeof value === 'number') { const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key) ret += `${normalizedKey}:${value};` } } return ret } function normalizeClass(value) { let res = '' if (isString(value)) { res = value } else if (isArray(value)) { for (let i = 0; i < value.length; i++) { const normalized = normalizeClass(value[i]) if (normalized) res += `${normalized} ` } } else if (isObject(value)) { for (const name in value) { if (value[name]) res += `${name} ` } } return res.trim() } function normalizeProps(props) { if (!props) return null const { class: klass, style } = props if (klass && !isString(klass)) props.class = normalizeClass(klass) if (style) props.style = normalizeStyle(style) return props } const 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' const 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' const 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' const isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS) const isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS) const isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS) const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly` const isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs) const isBooleanAttr = /* @__PURE__ */ makeMap( `${specialBooleanAttrs},async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`, ) function includeBooleanAttr(value) { return !!value || value === '' } const isKnownHtmlAttr = /* @__PURE__ */ makeMap( `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`, ) const isKnownSvgAttr = /* @__PURE__ */ makeMap( `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`, ) function isRenderableAttrValue(value) { if (value == null) return false const type = typeof value return type === 'string' || type === 'number' || type === 'boolean' } function looseCompareArrays(a, b) { if (a.length !== b.length) return false let equal = true for (let i = 0; equal && i < a.length; i++) equal = looseEqual(a[i], b[i]) return equal } function looseEqual(a, b) { if (a === b) return true let aValidType = isDate(a) let bValidType = isDate(b) if (aValidType || bValidType) return aValidType && bValidType ? a.getTime() === b.getTime() : false aValidType = isSymbol(a) bValidType = isSymbol(b) if (aValidType || bValidType) return a === b aValidType = isArray(a) bValidType = isArray(b) if (aValidType || bValidType) return aValidType && bValidType ? looseCompareArrays(a, b) : false aValidType = isObject(a) bValidType = isObject(b) if (aValidType || bValidType) { if (!aValidType || !bValidType) return false const aKeysCount = Object.keys(a).length const bKeysCount = Object.keys(b).length if (aKeysCount !== bKeysCount) return false for (const key in a) { const aHasKey = a.hasOwnProperty(key) const bHasKey = b.hasOwnProperty(key) if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) return false } } return String(a) === String(b) } function looseIndexOf(arr, val) { return arr.findIndex(item => looseEqual(item, val)) } function toDisplayString(val) { return isString(val) ? val : val == null ? '' : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val) } function replacer(_key, val) { if (val && val.__v_isRef) { return replacer(_key, val.value) } else if (isMap(val)) { return { [`Map(${val.size})`]: [...val.entries()].reduce( (entries, [key, val2], i) => { entries[`${stringifySymbol(key, i)} =>`] = val2 return entries }, {}, ), } } else if (isSet(val)) { return { [`Set(${val.size})`]: [...val.values()].map(v => stringifySymbol(v)), } } else if (isSymbol(val)) { return stringifySymbol(val) } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) { return String(val) } return val } function stringifySymbol(v, i = '') { let _a return ( // Symbol.description in es2019+ so we need to cast here to pass // the lib: es2016 check isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v ) } function warn$2(msg, ...args) { console.warn(`[Vue warn] ${msg}`, ...args) } let activeEffectScope class EffectScope { constructor(detached = false) { this.detached = detached /** * @internal */ this._active = true /** * @internal */ this.effects = [] /** * @internal */ this.cleanups = [] this.parent = activeEffectScope if (!detached && activeEffectScope) { this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push( this, ) - 1 } } get active() { return this._active } run(fn) { if (this._active) { const currentEffectScope = activeEffectScope try { activeEffectScope = this return fn() } finally { activeEffectScope = currentEffectScope } } else { warn$2(`cannot run an inactive effect scope.`) } } /** * This should only be called on non-detached scopes * @internal */ on() { activeEffectScope = this } /** * This should only be called on non-detached scopes * @internal */ off() { activeEffectScope = this.parent } stop(fromParent) { if (this._active) { let i, l for (i = 0, l = this.effects.length; i < l; i++) this.effects[i].stop() for (i = 0, l = this.cleanups.length; i < l; i++) this.cleanups[i]() if (this.scopes) { for (i = 0, l = this.scopes.length; i < l; i++) this.scopes[i].stop(true) } if (!this.detached && this.parent && !fromParent) { const last = this.parent.scopes.pop() if (last && last !== this) { this.parent.scopes[this.index] = last last.index = this.index } } this.parent = void 0 this._active = false } } } function effectScope(detached) { return new EffectScope(detached) } function recordEffectScope(effect, scope = activeEffectScope) { if (scope && scope.active) scope.effects.push(effect) } function getCurrentScope() { return activeEffectScope } function onScopeDispose(fn) { if (activeEffectScope) { activeEffectScope.cleanups.push(fn) } else { warn$2( `onScopeDispose() is called when there is no active effect scope to be associated with.`, ) } } let activeEffect class ReactiveEffect { constructor(fn, trigger, scheduler, scope) { this.fn = fn this.trigger = trigger this.scheduler = scheduler this.active = true this.deps = [] /** * @internal */ this._dirtyLevel = 4 /** * @internal */ this._trackId = 0 /** * @internal */ this._runnings = 0 /** * @internal */ this._shouldSchedule = false /** * @internal */ this._depsLength = 0 recordEffectScope(this, scope) } get dirty() { if (this._dirtyLevel === 2 || this._dirtyLevel === 3) { this._dirtyLevel = 1 pauseTracking() for (let i = 0; i < this._depsLength; i++) { const dep = this.deps[i] if (dep.computed) { triggerComputed(dep.computed) if (this._dirtyLevel >= 4) break } } if (this._dirtyLevel === 1) this._dirtyLevel = 0 resetTracking() } return this._dirtyLevel >= 4 } set dirty(v) { this._dirtyLevel = v ? 4 : 0 } run() { this._dirtyLevel = 0 if (!this.active) return this.fn() const lastShouldTrack = shouldTrack const lastEffect = activeEffect try { shouldTrack = true activeEffect = this this._runnings++ preCleanupEffect(this) return this.fn() } finally { postCleanupEffect(this) this._runnings-- activeEffect = lastEffect shouldTrack = lastShouldTrack } } stop() { if (this.active) { preCleanupEffect(this) postCleanupEffect(this) this.onStop && this.onStop() this.active = false } } } function triggerComputed(computed) { return computed.value } function preCleanupEffect(effect2) { effect2._trackId++ effect2._depsLength = 0 } function postCleanupEffect(effect2) { if (effect2.deps.length > effect2._depsLength) { for (let i = effect2._depsLength; i < effect2.deps.length; i++) cleanupDepEffect(effect2.deps[i], effect2) effect2.deps.length = effect2._depsLength } } function cleanupDepEffect(dep, effect2) { const trackId = dep.get(effect2) if (trackId !== void 0 && effect2._trackId !== trackId) { dep.delete(effect2) if (dep.size === 0) dep.cleanup() } } function effect(fn, options) { if (fn.effect instanceof ReactiveEffect) fn = fn.effect.fn const _effect = new ReactiveEffect(fn, NOOP, () => { if (_effect.dirty) _effect.run() }) if (options) { extend(_effect, options) if (options.scope) recordEffectScope(_effect, options.scope) } if (!options || !options.lazy) _effect.run() const runner = _effect.run.bind(_effect) runner.effect = _effect return runner } function stop(runner) { runner.effect.stop() } let shouldTrack = true let pauseScheduleStack = 0 const trackStack = [] function pauseTracking() { trackStack.push(shouldTrack) shouldTrack = false } function resetTracking() { const last = trackStack.pop() shouldTrack = last === void 0 ? true : last } function pauseScheduling() { pauseScheduleStack++ } function resetScheduling() { pauseScheduleStack-- while (!pauseScheduleStack && queueEffectSchedulers.length) queueEffectSchedulers.shift()() } function trackEffect(effect2, dep, debuggerEventExtraInfo) { let _a if (dep.get(effect2) !== effect2._trackId) { dep.set(effect2, effect2._trackId) const oldDep = effect2.deps[effect2._depsLength] if (oldDep !== dep) { if (oldDep) cleanupDepEffect(oldDep, effect2) effect2.deps[effect2._depsLength++] = dep } else { effect2._depsLength++ } { (_a = effect2.onTrack) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo)) } } } const queueEffectSchedulers = [] function triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) { let _a pauseScheduling() for (const effect2 of dep.keys()) { let tracking if (effect2._dirtyLevel < dirtyLevel && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) { effect2._shouldSchedule || (effect2._shouldSchedule = effect2._dirtyLevel === 0) effect2._dirtyLevel = dirtyLevel } if (effect2._shouldSchedule && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) { { (_a = effect2.onTrigger) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo)) } effect2.trigger() if ((!effect2._runnings || effect2.allowRecurse) && effect2._dirtyLevel !== 2) { effect2._shouldSchedule = false if (effect2.scheduler) queueEffectSchedulers.push(effect2.scheduler) } } } resetScheduling() } function createDep(cleanup, computed) { const dep = /* @__PURE__ */ new Map() dep.cleanup = cleanup dep.computed = computed return dep } const targetMap = /* @__PURE__ */ new WeakMap() const ITERATE_KEY = Symbol('iterate') const MAP_KEY_ITERATE_KEY = Symbol('Map key iterate') function track(target, type, key) { if (shouldTrack && activeEffect) { let depsMap = targetMap.get(target) if (!depsMap) targetMap.set(target, depsMap = /* @__PURE__ */ new Map()) let dep = depsMap.get(key) if (!dep) depsMap.set(key, dep = createDep(() => depsMap.delete(key))) trackEffect( activeEffect, dep, { target, type, key, }, ) } } function trigger(target, type, key, newValue, oldValue, oldTarget) { const depsMap = targetMap.get(target) if (!depsMap) return let deps = [] if (type === 'clear') { deps = [...depsMap.values()] } else if (key === 'length' && isArray(target)) { const newLength = Number(newValue) depsMap.forEach((dep, key2) => { if (key2 === 'length' || !isSymbol(key2) && key2 >= newLength) deps.push(dep) }) } else { if (key !== void 0) deps.push(depsMap.get(key)) switch (type) { case 'add': if (!isArray(target)) { deps.push(depsMap.get(ITERATE_KEY)) if (isMap(target)) deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)) } else if (isIntegerKey(key)) { deps.push(depsMap.get('length')) } break case 'delete': if (!isArray(target)) { deps.push(depsMap.get(ITERATE_KEY)) if (isMap(target)) deps.push(depsMap.get(MAP_KEY_ITERATE_KEY)) } break case 'set': if (isMap(target)) deps.push(depsMap.get(ITERATE_KEY)) break } } pauseScheduling() for (const dep of deps) { if (dep) { triggerEffects( dep, 4, { target, type, key, newValue, oldValue, oldTarget, }, ) } } resetScheduling() } function getDepFromReactive(object, key) { const depsMap = targetMap.get(object) return depsMap && depsMap.get(key) } const isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`) const builtInSymbols = new Set( /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter(key => key !== 'arguments' && key !== 'caller').map(key => Symbol[key]).filter(isSymbol), ) const arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations() function createArrayInstrumentations() { const instrumentations = {}; ['includes', 'indexOf', 'lastIndexOf'].forEach((key) => { instrumentations[key] = function (...args) { const arr = toRaw(this) for (let i = 0, l = this.length; i < l; i++) track(arr, 'get', `${i}`) const res = arr[key](...args) if (res === -1 || res === false) return arr[key](...args.map(toRaw)) else return res } }); ['push', 'pop', 'shift', 'unshift', 'splice'].forEach((key) => { instrumentations[key] = function (...args) { pauseTracking() pauseScheduling() const res = toRaw(this)[key].apply(this, args) resetScheduling() resetTracking() return res } }) return instrumentations } function hasOwnProperty(key) { if (!isSymbol(key)) key = String(key) const obj = toRaw(this) track(obj, 'has', key) return obj.hasOwnProperty(key) } class BaseReactiveHandler { constructor(_isReadonly = false, _isShallow = false) { this._isReadonly = _isReadonly this._isShallow = _isShallow } get(target, key, receiver) { const isReadonly2 = this._isReadonly; const isShallow2 = this._isShallow if (key === '__v_isReactive') { return !isReadonly2 } else if (key === '__v_isReadonly') { return isReadonly2 } else if (key === '__v_isShallow') { return isShallow2 } else if (key === '__v_raw') { if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) // receiver is not the reactive proxy, but has the same prototype // this means the reciever is a user proxy of the reactive proxy || Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) return target return } const targetIsArray = isArray(target) if (!isReadonly2) { if (targetIsArray && hasOwn(arrayInstrumentations, key)) return Reflect.get(arrayInstrumentations, key, receiver) if (key === 'hasOwnProperty') return hasOwnProperty } const res = Reflect.get(target, key, receiver) if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) return res if (!isReadonly2) track(target, 'get', key) if (isShallow2) return res if (isRef(res)) return targetIsArray && isIntegerKey(key) ? res : res.value if (isObject(res)) return isReadonly2 ? readonly(res) : reactive(res) return res } } class MutableReactiveHandler extends BaseReactiveHandler { constructor(isShallow2 = false) { super(false, isShallow2) } set(target, key, value, receiver) { let oldValue = target[key] if (!this._isShallow) { const isOldValueReadonly = isReadonly(oldValue) if (!isShallow(value) && !isReadonly(value)) { oldValue = toRaw(oldValue) value = toRaw(value) } if (!isArray(target) && isRef(oldValue) && !isRef(value)) { if (isOldValueReadonly) { return false } else { oldValue.value = value return true } } } const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key) const result = Reflect.set(target, key, value, receiver) if (target === toRaw(receiver)) { if (!hadKey) trigger(target, 'add', key, value) else if (hasChanged(value, oldValue)) trigger(target, 'set', key, value, oldValue) } return result } deleteProperty(target, key) { const hadKey = hasOwn(target, key) const oldValue = target[key] const result = Reflect.deleteProperty(target, key) if (result && hadKey) trigger(target, 'delete', key, void 0, oldValue) return result } has(target, key) { const result = Reflect.has(target, key) if (!isSymbol(key) || !builtInSymbols.has(key)) track(target, 'has', key) return result } ownKeys(target) { track( target, 'iterate', isArray(target) ? 'length' : ITERATE_KEY, ) return Reflect.ownKeys(target) } } class ReadonlyReactiveHandler extends BaseReactiveHandler { constructor(isShallow2 = false) { super(true, isShallow2) } set(target, key) { { warn$2( `Set operation on key "${String(key)}" failed: target is readonly.`, target, ) } return true } deleteProperty(target, key) { { warn$2( `Delete operation on key "${String(key)}" failed: target is readonly.`, target, ) } return true } } const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler() const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler() const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler( true, ) const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true) const toShallow = value => value const getProto = v => Reflect.getPrototypeOf(v) function get(target, key, isReadonly = false, isShallow = false) { target = target.__v_raw const rawTarget = toRaw(target) const rawKey = toRaw(key) if (!isReadonly) { if (hasChanged(key, rawKey)) track(rawTarget, 'get', key) track(rawTarget, 'get', rawKey) } const { has: has2 } = getProto(rawTarget) const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive if (has2.call(rawTarget, key)) return wrap(target.get(key)) else if (has2.call(rawTarget, rawKey)) return wrap(target.get(rawKey)) else if (target !== rawTarget) target.get(key) } function has(key, isReadonly = false) { const target = this.__v_raw const rawTarget = toRaw(target) const rawKey = toRaw(key) if (!isReadonly) { if (hasChanged(key, rawKey)) track(rawTarget, 'has', key) track(rawTarget, 'has', rawKey) } return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey) } function size(target, isReadonly = false) { target = target.__v_raw !isReadonly && track(toRaw(target), 'iterate', ITERATE_KEY) return Reflect.get(target, 'size', target) } function add(value) { value = toRaw(value) const target = toRaw(this) const proto = getProto(target) const hadKey = proto.has.call(target, value) if (!hadKey) { target.add(value) trigger(target, 'add', value, value) } return this } function set(key, value) { value = toRaw(value) const target = toRaw(this) const { has: has2, get: get2 } = getProto(target) let hadKey = has2.call(target, key) if (!hadKey) { key = toRaw(key) hadKey = has2.call(target, key) } else { checkIdentityKeys(target, has2, key) } const oldValue = get2.call(target, key) target.set(key, value) if (!hadKey) trigger(target, 'add', key, value) else if (hasChanged(value, oldValue)) trigger(target, 'set', key, value, oldValue) return this } function deleteEntry(key) { const target = toRaw(this) const { has: has2, get: get2 } = getProto(target) let hadKey = has2.call(target, key) if (!hadKey) { key = toRaw(key) hadKey = has2.call(target, key) } else { checkIdentityKeys(target, has2, key) } const oldValue = get2 ? get2.call(target, key) : void 0 const result = target.delete(key) if (hadKey) trigger(target, 'delete', key, void 0, oldValue) return result } function clear() { const target = toRaw(this) const hadItems = target.size !== 0 const oldTarget = isMap(target) ? new Map(target) : new Set(target) const result = target.clear() if (hadItems) trigger(target, 'clear', void 0, void 0, oldTarget) return result } function createForEach(isReadonly, isShallow) { return function forEach(callback, thisArg) { const observed = this const target = observed.__v_raw const rawTarget = toRaw(target) const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive !isReadonly && track(rawTarget, 'iterate', ITERATE_KEY) return target.forEach((value, key) => { return callback.call(thisArg, wrap(value), wrap(key), observed) }) } } function createIterableMethod(method, isReadonly, isShallow) { return function (...args) { const target = this.__v_raw const rawTarget = toRaw(target) const targetIsMap = isMap(rawTarget) const isPair = method === 'entries' || method === Symbol.iterator && targetIsMap const isKeyOnly = method === 'keys' && targetIsMap const innerIterator = target[method](...args) const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive !isReadonly && track( rawTarget, 'iterate', isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY, ) return { // iterator protocol next() { const { value, done } = innerIterator.next() return done ? { value, done } : { value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), done, } }, // iterable protocol [Symbol.iterator]() { return this }, } } } function createReadonlyMethod(type) { return function (...args) { { const key = args[0] ? `on key "${args[0]}" ` : `` warn$2( `${capitalize(type)} operation ${key}failed: target is readonly.`, toRaw(this), ) } return type === 'delete' ? false : type === 'clear' ? void 0 : this } } function createInstrumentations() { const mutableInstrumentations2 = { get(key) { return get(this, key) }, get size() { return size(this) }, has, add, set, delete: deleteEntry, clear, forEach: createForEach(false, false), } const shallowInstrumentations2 = { get(key) { return get(this, key, false, true) }, get size() { return size(this) }, has, add, set, delete: deleteEntry, clear, forEach: createForEach(false, true), } const readonlyInstrumentations2 = { get(key) { return get(this, key, true) }, get size() { return size(this, true) }, has(key) { return has.call(this, key, true) }, add: createReadonlyMethod('add'), set: createReadonlyMethod('set'), delete: createReadonlyMethod('delete'), clear: createReadonlyMethod('clear'), forEach: createForEach(true, false), } const shallowReadonlyInstrumentations2 = { get(key) { return get(this, key, true, true) }, get size() { return size(this, true) }, has(key) { return has.call(this, key, true) }, add: createReadonlyMethod('add'), set: createReadonlyMethod('set'), delete: createReadonlyMethod('delete'), clear: createReadonlyMethod('clear'), forEach: createForEach(true, true), } const iteratorMethods = [ 'keys', 'values', 'entries', Symbol.iterator, ] iteratorMethods.forEach((method) => { mutableInstrumentations2[method] = createIterableMethod(method, false, false) readonlyInstrumentations2[method] = createIterableMethod(method, true, false) shallowInstrumentations2[method] = createIterableMethod(method, false, true) shallowReadonlyInstrumentations2[method] = createIterableMethod( method, true, true, ) }) return [ mutableInstrumentations2, readonlyInstrumentations2, shallowInstrumentations2, shallowReadonlyInstrumentations2, ] } const [ mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations, ] = /* @__PURE__ */ createInstrumentations() function createInstrumentationGetter(isReadonly, shallow) { const instrumentations = shallow ? isReadonly ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly ? readonlyInstrumentations : mutableInstrumentations return (target, key, receiver) => { if (key === '__v_isReactive') return !isReadonly else if (key === '__v_isReadonly') return isReadonly else if (key === '__v_raw') return target return Reflect.get( hasOwn(instrumentations, key) && key in target ? instrumentations : target, key, receiver, ) } } const mutableCollectionHandlers = { get: /* @__PURE__ */ createInstrumentationGetter(false, false), } const shallowCollectionHandlers = { get: /* @__PURE__ */ createInstrumentationGetter(false, true), } const readonlyCollectionHandlers = { get: /* @__PURE__ */ createInstrumentationGetter(true, false), } const shallowReadonlyCollectionHandlers = { get: /* @__PURE__ */ createInstrumentationGetter(true, true), } function checkIdentityKeys(target, has2, key) { const rawKey = toRaw(key) if (rawKey !== key && has2.call(target, rawKey)) { const type = toRawType(target) warn$2( `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.`, ) } } const reactiveMap = /* @__PURE__ */ new WeakMap() const shallowReactiveMap = /* @__PURE__ */ new WeakMap() const readonlyMap = /* @__PURE__ */ new WeakMap() const shallowReadonlyMap = /* @__PURE__ */ new WeakMap() function targetTypeMap(rawType) { switch (rawType) { case 'Object': case 'Array': return 1 /* COMMON */ case 'Map': case 'Set': case 'WeakMap': case 'WeakSet': return 2 /* COLLECTION */ default: return 0 /* INVALID */ } } function getTargetType(value) { return value.__v_skip || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value)) } function reactive(target) { if (isReadonly(target)) return target return createReactiveObject( target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap, ) } function shallowReactive(target) { return createReactiveObject( target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap, ) } function readonly(target) { return createReactiveObject( target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap, ) } function shallowReadonly(target) { return createReactiveObject( target, true, shallowReadonlyHandlers, shallowReadonlyCollectionHandlers, shallowReadonlyMap, ) } function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { if (!isObject(target)) { { warn$2(`value cannot be made reactive: ${String(target)}`) } return target } if (target.__v_raw && !(isReadonly2 && target.__v_isReactive)) return target const existingProxy = proxyMap.get(target) if (existingProxy) return existingProxy const targetType = getTargetType(target) if (targetType === 0 /* INVALID */) return target const proxy = new Proxy( target, targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers, ) proxyMap.set(target, proxy) return proxy } function isReactive(value) { if (isReadonly(value)) return isReactive(value.__v_raw) return !!(value && value.__v_isReactive) } function isReadonly(value) { return !!(value && value.__v_isReadonly) } function isShallow(value) { return !!(value && value.__v_isShallow) } function isProxy(value) { return value ? !!value.__v_raw : false } function toRaw(observed) { const raw = observed && observed.__v_raw return raw ? toRaw(raw) : observed } function markRaw(value) { if (Object.isExtensible(value)) def(value, '__v_skip', true) return value } const toReactive = value => isObject(value) ? reactive(value) : value const toReadonly = value => isObject(value) ? readonly(value) : value const 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` class ComputedRefImpl { constructor(getter, _setter, isReadonly, isSSR) { this.getter = getter this._setter = _setter this.dep = void 0 this.__v_isRef = true this.__v_isReadonly = false this.effect = new ReactiveEffect( () => getter(this._value), () => triggerRefValue( this, this.effect._dirtyLevel === 2 ? 2 : 3, ), ) this.effect.computed = this this.effect.active = this._cacheable = !isSSR this.__v_isReadonly = isReadonly } get value() { const self = toRaw(this) if ((!self._cacheable || self.effect.dirty) && hasChanged(self._value, self._value = self.effect.run())) triggerRefValue(self, 4) trackRefValue(self) if (self.effect._dirtyLevel >= 2) { if (this._warnRecursive) { warn$2(COMPUTED_SIDE_EFFECT_WARN, ` getter: `, this.getter) } triggerRefValue(self, 2) } return self._value } set value(newValue) { this._setter(newValue) } // #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x get _dirty() { return this.effect.dirty } set _dirty(v) { this.effect.dirty = v } // #endregion } function computed$1(getterOrOptions, debugOptions, isSSR = false) { let getter let setter const onlyGetter = isFunction(getterOrOptions) if (onlyGetter) { getter = getterOrOptions setter = () => { warn$2('Write operation failed: computed value is readonly') } } else { getter = getterOrOptions.get setter = getterOrOptions.set } const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR) if (debugOptions && !isSSR) { cRef.effect.onTrack = debugOptions.onTrack cRef.effect.onTrigger = debugOptions.onTrigger } return cRef } function trackRefValue(ref2) { let _a if (shouldTrack && activeEffect) { ref2 = toRaw(ref2) trackEffect( activeEffect, (_a = ref2.dep) != null ? _a : ref2.dep = createDep( () => ref2.dep = void 0, ref2 instanceof ComputedRefImpl ? ref2 : void 0, ), { target: ref2, type: 'get', key: 'value', }, ) } } function triggerRefValue(ref2, dirtyLevel = 4, newVal) { ref2 = toRaw(ref2) const dep = ref2.dep if (dep) { triggerEffects( dep, dirtyLevel, { target: ref2, type: 'set', key: 'value', newValue: newVal, }, ) } } function isRef(r) { return !!(r && r.__v_isRef === true) } function ref(value) { return createRef(value, false) } function shallowRef(value) { return createRef(value, true) } function createRef(rawValue, shallow) { if (isRef(rawValue)) return rawValue return new RefImpl(rawValue, shallow) } class RefImpl { constructor(value, __v_isShallow) { this.__v_isShallow = __v_isShallow this.dep = void 0 this.__v_isRef = true this._rawValue = __v_isShallow ? value : toRaw(value) this._value = __v_isShallow ? value : toReactive(value) } get value() { trackRefValue(this) return this._value } set value(newVal) { const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal) newVal = useDirectValue ? newVal : toRaw(newVal) if (hasChanged(newVal, this._rawValue)) { this._rawValue = newVal this._value = useDirectValue ? newVal : toReactive(newVal) triggerRefValue(this, 4, newVal) } } } function triggerRef(ref2) { triggerRefValue(ref2, 4, ref2.value) } function unref(ref2) { return isRef(ref2) ? ref2.value : ref2 } function toValue(source) { return isFunction(source) ? source() : unref(source) } const shallowUnwrapHandlers = { get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)), set: (target, key, value, receiver) => { const oldValue = target[key] if (isRef(oldValue) && !isRef(value)) { oldValue.value = value return true } else { return Reflect.set(target, key, value, receiver) } }, } function proxyRefs(objectWithRefs) { return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers) } class CustomRefImpl { constructor(factory) { this.dep = void 0 this.__v_isRef = true const { get, set } = factory( () => trackRefValue(this), () => triggerRefValue(this), ) this._get = get this._set = set } get value() { return this._get() } set value(newVal) { this._set(newVal) } } function customRef(factory) { return new CustomRefImpl(factory) } function toRefs(object) { if (!isProxy(object)) warn$2(`toRefs() expects a reactive object but received a plain one.`) const ret = isArray(object) ? Array.from({ length: object.length }) : {} for (const key in object) ret[key] = propertyToRef(object, key) return ret } class ObjectRefImpl { constructor(_object, _key, _defaultValue) { this._object = _object this._key = _key this._defaultValue = _defaultValue this.__v_isRef = true } get value() { const val = this._object[this._key] return val === void 0 ? this._defaultValue : val } set value(newVal) { this._object[this._key] = newVal } get dep() { return getDepFromReactive(toRaw(this._object), this._key) } } class GetterRefImpl { constructor(_getter) { this._getter = _getter this.__v_isRef = true this.__v_isReadonly = true } get value() { return this._getter() } } function toRef(source, key, defaultValue) { if (isRef(source)) return source else if (isFunction(source)) return new GetterRefImpl(source) else if (isObject(source) && arguments.length > 1) return propertyToRef(source, key, defaultValue) else return ref(source) } function propertyToRef(source, key, defaultValue) { const val = source[key] return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue) } const TrackOpTypes = { GET: 'get', HAS: 'has', ITERATE: 'iterate', } const TriggerOpTypes = { SET: 'set', ADD: 'add', DELETE: 'delete', CLEAR: 'clear', } const stack = [] function pushWarningContext(vnode) { stack.push(vnode) } function popWarningContext() { stack.pop() } function warn$1(msg, ...args) { pauseTracking() const instance = stack.length ? stack[stack.length - 1].component : null const appWarnHandler = instance && instance.appContext.config.warnHandler const trace = getComponentTrace() if (appWarnHandler) { callWithErrorHandling( appWarnHandler, instance, 11, [ msg + args.map((a) => { let _a, _b return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a) }).join(''), instance && instance.proxy, trace.map( ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`, ).join('\n'), trace, ], ) } else { const warnArgs = [`[Vue warn]: ${msg}`, ...args] if (trace.length // avoid spamming console during tests && true) { warnArgs.push(` `, ...formatTrace(trace)) } console.warn(...warnArgs) } resetTracking() } function getComponentTrace() { let currentVNode = stack[stack.length - 1] if (!currentVNode) return [] const normalizedStack = [] while (currentVNode) { const last = normalizedStack[0] if (last && last.vnode === currentVNode) { last.recurseCount++ } else { normalizedStack.push({ vnode: currentVNode, recurseCount: 0, }) } const parentInstance = currentVNode.component && currentVNode.component.parent currentVNode = parentInstance && parentInstance.vnode } return normalizedStack } function formatTrace(trace) { const logs = [] trace.forEach((entry, i) => { logs.push(...i === 0 ? [] : [` `], ...formatTraceEntry(entry)) }) return logs } function formatTraceEntry({ vnode, recurseCount }) { const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : `` const isRoot = vnode.component ? vnode.component.parent == null : false const open = ` at <${formatComponentName( vnode.component, vnode.type, isRoot, )}` const close = `>${postfix}` return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close] } function formatProps(props) { const res = [] const keys = Object.keys(props) keys.slice(0, 3).forEach((key) => { res.push(...formatProp(key, props[key])) }) if (keys.length > 3) res.push(` ...`) return res } function formatProp(key, value, raw) { if (isString(value)) { value = JSON.stringify(value) return raw ? value : [`${key}=${value}`] } else if (typeof value === 'number' || typeof value === 'boolean' || value == null) { return raw ? value : [`${key}=${value}`] } else if (isRef(value)) { value = formatProp(key, toRaw(value.value), true) return raw ? value : [`${key}=Ref<`, value, `>`] } else if (isFunction(value)) { return [`${key}=fn${value.name ? `<${value.name}>` : ``}`] } else { value = toRaw(value) return raw ? value : [`${key}=`, value] } } function assertNumber(val, type) { if (val === void 0) { } else if (typeof val !== 'number') { warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`) } else if (isNaN(val)) { warn$1(`${type} is NaN - the duration expression might be incorrect.`) } } const ErrorCodes = { SETUP_FUNCTION: 0, 0: 'SETUP_FUNCTION', RENDER_FUNCTION: 1, 1: 'RENDER_FUNCTION', WATCH_GETTER: 2, 2: 'WATCH_GETTER', WATCH_CALLBACK: 3, 3: 'WATCH_CALLBACK', WATCH_CLEANUP: 4, 4: 'WATCH_CLEANUP', NATIVE_EVENT_HANDLER: 5, 5: 'NATIVE_EVENT_HANDLER', COMPONENT_EVENT_HANDLER: 6, 6: 'COMPONENT_EVENT_HANDLER', VNODE_HOOK: 7, 7: 'VNODE_HOOK', DIRECTIVE_HOOK: 8, 8: 'DIRECTIVE_HOOK', TRANSITION_HOOK: 9, 9: 'TRANSITION_HOOK', APP_ERROR_HANDLER: 10, 10: 'APP_ERROR_HANDLER', APP_WARN_HANDLER: 11, 11: 'APP_WARN_HANDLER', FUNCTION_REF: 12, 12: 'FUNCTION_REF', ASYNC_COMPONENT_LOADER: 13, 13: 'ASYNC_COMPONENT_LOADER', SCHEDULER: 14, 14: 'SCHEDULER', } const ErrorTypeStrings$1 = { sp: 'serverPrefetch hook', bc: 'beforeCreate hook', c: 'created hook', bm: 'beforeMount hook', m: 'mounted hook', bu: 'beforeUpdate hook', u: 'updated', bum: 'beforeUnmount hook', um: 'unmounted hook', a: 'activated hook', da: 'deactivated hook', ec: 'errorCaptured hook', rtc: 'renderTracked hook', rtg: 'renderTriggered hook', 0: 'setup function', 1: 'render function', 2: 'watcher getter', 3: 'watcher callback', 4: 'watcher cleanup function', 5: 'native event handler', 6: 'component event handler', 7: 'vnode hook', 8: 'directive hook', 9: 'transition hook', 10: 'app errorHandler', 11: 'app warnHandler', 12: 'ref function', 13: 'async component loader', 14: 'scheduler flush. This is likely a Vue internals bug. Please open an issue at https://github.com/vuejs/core .', } function callWithErrorHandling(fn, instance, type, args) { try { return args ? fn(...args) : fn() } catch (err) { handleError(err, instance, type) } } function callWithAsyncErrorHandling(fn, instance, type, args) { if (isFunction(fn)) { const res = callWithErrorHandling(fn, instance, type, args) if (res && isPromise(res)) { res.catch((err) => { handleError(err, instance, type) }) } return res } if (isArray(fn)) { const values = [] for (let i = 0; i < fn.length; i++) values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)) return values } else { warn$1( `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}`, ) } } function handleError(err, instance, type, throwInDev = true) { const contextVNode = instance ? instance.vnode : null if (instance) { let cur = instance.parent const exposedInstance = instance.proxy const errorInfo = ErrorTypeStrings$1[type] while (cur) { const errorCapturedHooks = cur.ec if (errorCapturedHooks) { for (let i = 0; i < errorCapturedHooks.length; i++) { if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) return } } cur = cur.parent } const appErrorHandler = instance.appContext.config.errorHandler if (appErrorHandler) { pauseTracking() callWithErrorHandling( appErrorHandler, null, 10, [err, exposedInstance, errorInfo], ) resetTracking() return } } logError(err, type, contextVNode, throwInDev) } function logError(err, type, contextVNode, throwInDev = true) { { const info = ErrorTypeStrings$1[type] if (contextVNode) pushWarningContext(contextVNode) warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`) if (contextVNode) popWarningContext() if (throwInDev) throw err else console.error(err) } } let isFlushing = false let isFlushPending = false const queue = [] let flushIndex = 0 const pendingPostFlushCbs = [] let activePostFlushCbs = null let postFlushIndex = 0 const resolvedPromise = /* @__PURE__ */ Promise.resolve() let currentFlushPromise = null const RECURSION_LIMIT = 100 function nextTick(fn) { const p = currentFlushPromise || resolvedPromise return fn ? p.then(this ? fn.bind(this) : fn) : p } function findInsertionIndex(id) { let start = flushIndex + 1 let end = queue.length while (start < end) { const middle = start + end >>> 1 const middleJob = queue[middle] const middleJobId = getId(middleJob) if (middleJobId < id || middleJobId === id && middleJob.pre) start = middle + 1 else end = middle } return start } function queueJob(job) { if (!queue.length || !queue.includes( job, isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex, )) { if (job.id == null) queue.push(job) else queue.splice(findInsertionIndex(job.id), 0, job) queueFlush() } } function queueFlush() { if (!isFlushing && !isFlushPending) { isFlushPending = true currentFlushPromise = resolvedPromise.then(flushJobs) } } function invalidateJob(job) { const i = queue.indexOf(job) if (i > flushIndex) queue.splice(i, 1) } function queuePostFlushCb(cb) { if (!isArray(cb)) { if (!activePostFlushCbs || !activePostFlushCbs.includes( cb, cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex, )) pendingPostFlushCbs.push(cb) } else { pendingPostFlushCbs.push(...cb) } queueFlush() } function flushPreFlushCbs(instance, seen, i = isFlushing ? flushIndex + 1 : 0) { { seen = seen || /* @__PURE__ */ new Map() } for (; i < queue.length; i++) { const cb = queue[i] if (cb && cb.pre) { if (instance && cb.id !== instance.uid) continue if (checkRecursiveUpdates(seen, cb)) continue queue.splice(i, 1) i-- cb() } } } function flushPostFlushCbs(seen) { if (pendingPostFlushCbs.length) { const deduped = [...new Set(pendingPostFlushCbs)].sort( (a, b) => getId(a) - getId(b), ) pendingPostFlushCbs.length = 0 if (activePostFlushCbs) { activePostFlushCbs.push(...deduped) return } activePostFlushCbs = deduped { seen = seen || /* @__PURE__ */ new Map() } for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { if (checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) continue activePostFlushCbs[postFlushIndex]() } activePostFlushCbs = null postFlushIndex = 0 } } const getId = job => job.id == null ? Number.POSITIVE_INFINITY : job.id function comparator(a, b) { const diff = getId(a) - getId(b) if (diff === 0) { if (a.pre && !b.pre) return -1 if (b.pre && !a.pre) return 1 } return diff } function flushJobs(seen) { isFlushPending = false isFlushing = true { seen = seen || /* @__PURE__ */ new Map() } queue.sort(comparator) const check = job => checkRecursiveUpdates(seen, job) try { for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { const job = queue[flushIndex] if (job && job.active !== false) { if (check(job)) continue callWithErrorHandling(job, null, 14) } } } finally { flushIndex = 0 queue.length = 0 flushPostFlushCbs(seen) isFlushing = false currentFlushPromise = null if (queue.length || pendingPostFlushCbs.length) flushJobs(seen) } } function checkRecursiveUpdates(seen, fn) { if (!seen.has(fn)) { seen.set(fn, 1) } else { const count = seen.get(fn) if (count > RECURSION_LIMIT) { const instance = fn.ownerInstance const componentName = instance && getComponentName(instance.type) handleError( `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.`, null, 10, ) return true } else { seen.set(fn, count + 1) } } } let isHmrUpdating = false const hmrDirtyComponents = /* @__PURE__ */ new Set() { getGlobalThis().__VUE_HMR_RUNTIME__ = { createRecord: tryWrap(createRecord), rerender: tryWrap(rerender), reload: tryWrap(reload), } } const map = /* @__PURE__ */ new Map() function registerHMR(instance) { const id = instance.type.__hmrId let record = map.get(id) if (!record) { createRecord(id, instance.type) record = map.get(id) } record.instances.add(instance) } function unregisterHMR(instance) { map.get(instance.type.__hmrId).instances.delete(instance) } function createRecord(id, initialDef) { if (map.has(id)) return false map.set(id, { initialDef: normalizeClassComponent(initialDef), instances: /* @__PURE__ */ new Set(), }) return true } function normalizeClassComponent(component) { return isClassComponent(component) ? component.__vccOpts : component } function rerender(id, newRender) { const record = map.get(id) if (!record) return record.initialDef.render = newRender; [...record.instances].forEach((instance) => { if (newRender) { instance.render = newRender normalizeClassComponent(instance.type).render = newRender } instance.renderCache = [] isHmrUpdating = true instance.effect.dirty = true instance.update() isHmrUpdating = false }) } function reload(id, newComp) { const record = map.get(id) if (!record) return newComp = normalizeClassComponent(newComp) updateComponentDef(record.initialDef, newComp) const instances = [...record.instances] for (const instance of instances) { const oldComp = normalizeClassComponent(instance.type) if (!hmrDirtyComponents.has(oldComp)) { if (oldComp !== record.initialDef) updateComponentDef(oldComp, newComp) hmrDirtyComponents.add(oldComp) } instance.appContext.propsCache.delete(instance.type) instance.appContext.emitsCache.delete(instance.type) instance.appContext.optionsCache.delete(instance.type) if (instance.ceReload) { hmrDirtyComponents.add(oldComp) instance.ceReload(newComp.styles) hmrDirtyComponents.delete(oldComp) } else if (instance.parent) { instance.parent.effect.dirty = true queueJob(instance.parent.update) } else if (instance.appContext.reload) { instance.appContext.reload() } else if (typeof window !== 'undefined') { window.location.reload() } else { console.warn( '[HMR] Root or manually mounted instance modified. Full reload required.', ) } } queuePostFlushCb(() => { for (const instance of instances) { hmrDirtyComponents.delete( normalizeClassComponent(instance.type), ) } }) } function updateComponentDef(oldComp, newComp) { extend(oldComp, newComp) for (const key in oldComp) { if (key !== '__file' && !(key in newComp)) delete oldComp[key] } } function tryWrap(fn) { return (id, arg) => { try { return fn(id, arg) } catch (e) { console.error(e) console.warn( `[HMR] Something went wrong during Vue component hot-reload. Full reload required.`, ) } } } let devtools$1 let buffer = [] let devtoolsNotInstalled = false function emit$1(event, ...args) { if (devtools$1) devtools$1.emit(event, ...args) else if (!devtoolsNotInstalled) buffer.push({ event, args }) } function setDevtoolsHook$1(hook, target) { let _a, _b devtools$1 = hook if (devtools$1) { devtools$1.enabled = true buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args)) buffer = [] } else if ( // handle late devtools injection - only do this if we are in an actual // browser environment to avoid the timer handle stalling test runner exit // (#4815) typeof window !== 'undefined' // some envs mock window but not fully && window.HTMLElement // also exclude jsdom && !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes('jsdom')) ) { const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [] replay.push((newHook) => { setDevtoolsHook$1(newHook, target) }) setTimeout(() => { if (!devtools$1) { target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null devtoolsNotInstalled = true buffer = [] } }, 3e3) } else { devtoolsNotInstalled = true buffer = [] } } function devtoolsInitApp(app, version) { emit$1('app:init' /* APP_INIT */, app, version, { Fragment, Text, Comment, Static, }) } function devtoolsUnmountApp(app) { emit$1('app:unmount' /* APP_UNMOUNT */, app) } const devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook( 'component:added', /* COMPONENT_ADDED */ ) const devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook('component:updated' /* COMPONENT_UPDATED */) const _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook( 'component:removed', /* COMPONENT_REMOVED */ ) function devtoolsComponentRemoved(component) { if (devtools$1 && typeof devtools$1.cleanupBuffer === 'function' // remove the component if it wasn't buffered && !devtools$1.cleanupBuffer(component)) _devtoolsComponentRemoved(component) } /*! #__NO_SIDE_EFFECTS__ */ // @__NO_SIDE_EFFECTS__ function createDevtoolsComponentHook(hook) { return (component) => { emit$1( hook, component.appContext.app, component.uid, component.parent ? component.parent.uid : void 0, component, ) } } const devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook( 'perf:start', /* PERFORMANCE_START */ ) const devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook( 'perf:end', /* PERFORMANCE_END */ ) function createDevtoolsPerformanceHook(hook) { return (component, type, time) => { emit$1(hook, component.appContext.app, component.uid, component, type, time) } } function devtoolsComponentEmit(component, event, params) { emit$1( 'component:emit' /* COMPONENT_EMIT */, component.appContext.app, component, event, params, ) } function emit(instance, event, ...rawArgs) { if (instance.isUnmounted) return const props = instance.vnode.props || EMPTY_OBJ { const { emitsOptions, propsOptions: [propsOptions], } = instance if (emitsOptions) { if (!(event in emitsOptions) && true) { if (!propsOptions || !(toHandlerKey(event) in propsOptions)) { warn$1( `Component emitted event "${event}" but it is neither declared in the emits option nor as an "${toHandlerKey(event)}" prop.`, ) } } else { const validator = emitsOptions[event] if (isFunction(validator)) { const isValid = validator(...rawArgs) if (!isValid) { warn$1( `Invalid event arguments: event validation failed for event "${event}".`, ) } } } } } let args = rawArgs const isModelListener = event.startsWith('update:') const modelArg = isModelListener && event.slice(7) if (modelArg && modelArg in props) { const modifiersKey = `${modelArg === 'modelValue' ? 'model' : modelArg}Modifiers` const { number, trim } = props[modifiersKey] || EMPTY_OBJ if (trim) args = rawArgs.map(a => isString(a) ? a.trim() : a) if (number) args = rawArgs.map(looseToNumber) } { devtoolsComponentEmit(instance, event, args) } { const lowerCaseEvent = event.toLowerCase() if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) { warn$1( `Event "${lowerCaseEvent}" is emitted in component ${formatComponentName( instance, instance.type, )} but the handler is registered for "${event}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${hyphenate( event, )}" instead of "${event}".`, ) } } let handlerName let handler = props[handlerName = toHandlerKey(event)] // also try camelCase event handler (#2249) || props[handlerName = toHandlerKey(camelize(event))] if (!handler && isModelListener) handler = props[handlerName = toHandlerKey(hyphenate(event))] if (handler) { callWithAsyncErrorHandling( handler, instance, 6, args, ) } const onceHandler = props[`${handlerName}Once`] if (onceHandler) { if (!instance.emitted) instance.emitted = {} else if (instance.emitted[handlerName]) return instance.emitted[handlerName] = true callWithAsyncErrorHandling( onceHandler, instance, 6, args, ) } } function normalizeEmitsOptions(comp, appContext, asMixin = false) { const cache = appContext.emitsCache const cached = cache.get(comp) if (cached !== void 0) return cached const raw = comp.emits const normalized = {} let hasExtends = false if (!isFunction(comp)) { const extendEmits = (raw2) => { const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true) if (normalizedFromExtend) { hasExtends = true extend(normalized, normalizedFromExtend) } } if (!asMixin && appContext.mixins.length) appContext.mixins.forEach(extendEmits) if (comp.extends) extendEmits(comp.extends) if (comp.mixins) comp.mixins.forEach(extendEmits) } if (!raw && !hasExtends) { if (isObject(comp)) cache.set(comp, null) return null } if (isArray(raw)) raw.forEach(key => normalized[key] = null) else extend(normalized, raw) if (isObject(comp)) cache.set(comp, normalized) return normalized } function isEmitListener(options, key) { if (!options || !isOn(key)) return false key = key.slice(2).replace(/Once$/, '') return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key) } let currentRenderingInstance = null let currentScopeId = null function setCurrentRenderingInstance(instance) { const prev = currentRenderingInstance currentRenderingInstance = instance currentScopeId = instance && instance.type.__scopeId || null return prev } function pushScopeId(id) { currentScopeId = id } function popScopeId() { currentScopeId = null } const withScopeId = _id => withCtx function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { if (!ctx) return fn if (fn._n) return fn const renderFnWithContext = (...args) => { if (renderFnWithContext._d) setBlockTracking(-1) const prevInstance = setCurrentRenderingInstance(ctx) let res try { res = fn(...args) } finally { setCurrentRenderingInstance(prevInstance) if (renderFnWithContext._d) setBlockTracking(1) } { devtoolsComponentUpdated(ctx) } return res } renderFnWithContext._n = true renderFnWithContext._c = true renderFnWithContext._d = true return renderFnWithContext } let accessedAttrs = false function markAttrsAccessed() { accessedAttrs = true } function renderComponentRoot(instance) { const { type: Component, vnode, proxy, withProxy, propsOptions: [propsOptions], slots, attrs, emit, render, renderCache, props, data, setupState, ctx, inheritAttrs, } = instance const prev = setCurrentRenderingInstance(instance) let result let fallthroughAttrs { accessedAttrs = false } try { if (vnode.shapeFlag & 4) { const proxyToUse = withProxy || proxy const thisProxy = setupState.__isScriptSetup ? new Proxy(proxyToUse, { get(target, key, receiver) { warn$1( `Property '${String( key, )}' was accessed via 'this'. Avoid using 'this' in templates.`, ) return Reflect.get(target, key, receiver) }, }) : proxyToUse result = normalizeVNode( render.call( thisProxy, proxyToUse, renderCache, true ? shallowReadonly(props) : props, setupState, data, ctx, ), ) fallthroughAttrs = attrs } else { const render2 = Component if (attrs === props) markAttrsAccessed() result = normalizeVNode( render2.length > 1 ? render2( true ? shallowReadonly(props) : props, true ? { get attrs() { markAttrsAccessed() return shallowReadonly(attrs) }, slots, emit, } : { attrs, slots, emit }, ) : render2( true ? shallowReadonly(props) : props, null, ), ) fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs) } } catch (err) { blockStack.length = 0 handleError(err, instance, 1) result = createVNode(Comment) } let root = result let setRoot = void 0 if (result.patchFlag > 0 && result.patchFlag & 2048) [root, setRoot] = getChildRoot(result) if (fallthroughAttrs && inheritAttrs !== false) { const keys = Object.keys(fallthroughAttrs) const { shapeFlag } = root if (keys.length) { if (shapeFlag & (1 | 6)) { if (propsOptions && keys.some(isModelListener)) { fallthroughAttrs = filterModelListeners( fallthroughAttrs, propsOptions, ) } root = cloneVNode(root, fallthroughAttrs, false, true) } else if (!accessedAttrs && root.type !== Comment) { const allAttrs = Object.keys(attrs) const eventAttrs = [] const extraAttrs = [] for (let i = 0, l = allAttrs.length; i < l; i++) { const key = allAttrs[i] if (isOn(key)) { if (!isModelListener(key)) eventAttrs.push(key[2].toLowerCase() + key.slice(3)) } else { extraAttrs.push(key) } } if (extraAttrs.length) { warn$1( `Extraneous non-props attributes (${extraAttrs.join(', ')}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.`, ) } if (eventAttrs.length) { warn$1( `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.`, ) } } } } if (vnode.dirs) { if (!isElementRoot(root)) { warn$1( `Runtime directive used on component with non-element root node. The directives will not function as intended.`, ) } root = cloneVNode(root, null, false, true) root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs } if (vnode.transition) { if (!isElementRoot(root)) { warn$1( `Component inside renders non-element root node that cannot be animated.`, ) } root.transition = vnode.transition } if (setRoot) setRoot(root) else result = root setCurrentRenderingInstance(prev) return result } function getChildRoot(vnode) { const rawChildren = vnode.children const dynamicChildren = vnode.dynamicChildren const childRoot = filterSingleRoot(rawChildren, false) if (!childRoot) return [vnode, void 0] else if (childRoot.patchFlag > 0 && childRoot.patchFlag & 2048) return getChildRoot(childRoot) const index = rawChildren.indexOf(childRoot) const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1 const setRoot = (updatedRoot) => { rawChildren[index] = updatedRoot if (dynamicChildren) { if (dynamicIndex > -1) dynamicChildren[dynamicIndex] = updatedRoot else if (updatedRoot.patchFlag > 0) vnode.dynamicChildren = [...dynamicChildren, updatedRoot] } } return [normalizeVNode(childRoot), setRoot] } function filterSingleRoot(children, recurse = true) { let singleRoot for (let i = 0; i < children.length; i++) { const child = children[i] if (isVNode(child)) { if (child.type !== Comment || child.children === 'v-if') { if (singleRoot) { return } else { singleRoot = child if (recurse && singleRoot.patchFlag > 0 && singleRoot.patchFlag & 2048) return filterSingleRoot(singleRoot.children) } } } else { return } } return singleRoot } function getFunctionalFallthrough(attrs) { let res for (const key in attrs) { if (key === 'class' || key === 'style' || isOn(key)) (res || (res = {}))[key] = attrs[key] } return res } function filterModelListeners(attrs, props) { const res = {} for (const key in attrs) { if (!isModelListener(key) || !(key.slice(9) in props)) res[key] = attrs[key] } return res } function isElementRoot(vnode) { return vnode.shapeFlag & (6 | 1) || vnode.type === Comment } function shouldUpdateComponent(prevVNode, nextVNode, optimized) { const { props: prevProps, children: prevChildren, component } = prevVNode const { props: nextProps, children: nextChildren, patchFlag } = nextVNode const emits = component.emitsOptions if ((prevChildren || nextChildren) && isHmrUpdating) return true if (nextVNode.dirs || nextVNode.transition) return true if (optimized && patchFlag >= 0) { if (patchFlag & 1024) return true if (patchFlag & 16) { if (!prevProps) return !!nextProps return hasPropsChanged(prevProps, nextProps, emits) } else if (patchFlag & 8) { const dynamicProps = nextVNode.dynamicProps for (let i = 0; i < dynamicProps.length; i++) { const key = dynamicProps[i] if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) return true } } } else { if (prevChildren || nextChildren) { if (!nextChildren || !nextChildren.$stable) return true } if (prevProps === nextProps) return false if (!prevProps) return !!nextProps if (!nextProps) return true return hasPropsChanged(prevProps, nextProps, emits) } return false } function hasPropsChanged(prevProps, nextProps, emitsOptions) { const nextKeys = Object.keys(nextProps) if (nextKeys.length !== Object.keys(prevProps).length) return true for (let i = 0; i < nextKeys.length; i++) { const key = nextKeys[i] if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) return true } return false } function updateHOCHostEl({ vnode, parent }, el) { while (parent) { const root = parent.subTree if (root.suspense && root.suspense.activeBranch === vnode) root.el = vnode.el if (root === vnode) { (vnode = parent.vnode).el = el parent = parent.parent } else { break } } } const COMPONENTS = 'components' const DIRECTIVES = 'directives' function resolveComponent(name, maybeSelfReference) { return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name } const NULL_DYNAMIC_COMPONENT = Symbol.for('v-ndc') function resolveDynamicComponent(component) { if (isString(component)) return resolveAsset(COMPONENTS, component, false) || component else return component || NULL_DYNAMIC_COMPONENT } function resolveDirective(name) { return resolveAsset(DIRECTIVES, name) } function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) { const instance = currentRenderingInstance || currentInstance if (instance) { const Component = instance.type if (type === COMPONENTS) { const selfName = getComponentName( Component, false, ) if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) return Component } const res = ( // local registration // check instance[type] first which is resolved for options API resolve(instance[type] || Component[type], name) // global registration || resolve(instance.appContext[type], name) ) if (!res && maybeSelfReference) return Component if (warnMissing && !res) { const extra = type === COMPONENTS ? ` If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : `` warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`) } return res } else { warn$1( `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`, ) } } function resolve(registry, name) { return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]) } const isSuspense = type => type.__isSuspense let suspenseId = 0 const SuspenseImpl = { name: 'Suspense', // In order to make Suspense tree-shakable, we need to avoid importing it // directly in the renderer. The renderer checks for the __isSuspense flag // on a vnode's type and calls the `process` method, passing in renderer // internals. __isSuspense: true, process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) { if (n1 == null) { mountSuspense( n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals, ) } else { if (parentSuspense && parentSuspense.deps > 0 && !n1.suspense.isInFallback) { n2.suspense = n1.suspense n2.suspense.vnode = n2 n2.el = n1.el return } patchSuspense( n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, rendererInternals, ) } }, hydrate: hydrateSuspense, create: createSuspenseBoundary, normalize: normalizeSuspenseChildren, } const Suspense = SuspenseImpl function triggerEvent(vnode, name) { const eventListener = vnode.props && vnode.props[name] if (isFunction(eventListener)) eventListener() } function mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) { const { p: patch, o: { createElement }, } = rendererInternals const hiddenContainer = createElement('div') const suspense = vnode.suspense = createSuspenseBoundary( vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, namespace, slotScopeIds, optimized, rendererInternals, ) patch( null, suspense.pendingBranch = vnode.ssContent, hiddenContainer, null, parentComponent, suspense, namespace, slotScopeIds, ) if (suspense.deps > 0) { triggerEvent(vnode, 'onPending') triggerEvent(vnode, 'onFallback') patch( null, vnode.ssFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context namespace, slotScopeIds, ) setActiveBranch(suspense, vnode.ssFallback) } else { suspense.resolve(false, true) } } function patchSuspense(n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) { const suspense = n2.suspense = n1.suspense suspense.vnode = n2 n2.el = n1.el const newBranch = n2.ssContent const newFallback = n2.ssFallback const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense if (pendingBranch) { suspense.pendingBranch = newBranch if (isSameVNodeType(newBranch, pendingBranch)) { patch( pendingBranch, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, namespace, slotScopeIds, optimized, ) if (suspense.deps <= 0) { suspense.resolve() } else if (isInFallback) { if (!isHydrating) { patch( activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context namespace, slotScopeIds, optimized, ) setActiveBranch(suspense, newFallback) } } } else { suspense.pendingId = suspenseId++ if (isHydrating) { suspense.isHydrating = false suspense.activeBranch = pendingBranch } else { unmount(pendingBranch, parentComponent, suspense) } suspense.deps = 0 suspense.effects.length = 0 suspense.hiddenContainer = createElement('div') if (isInFallback) { patch( null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, namespace, slotScopeIds, optimized, ) if (suspense.deps <= 0) { suspense.resolve() } else { patch( activeBranch, newFallback, container, anchor, parentComponent, null, // fallback tree will not have suspense context namespace, slotScopeIds, optimized, ) setActiveBranch(suspense, newFallback) } } else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) { patch( activeBranch, newBranch, container, anchor, parentComponent, suspense, namespace, slotScopeIds, optimized, ) suspense.resolve(true) } else { patch( null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, namespace, slotScopeIds, optimized, ) if (suspense.deps <= 0) suspense.resolve() } } } else { if (activeBranch && isSameVNodeType(newBranch, activeBranch)) { patch( activeBranch, newBranch, container, anchor, parentComponent, suspense, namespace, slotScopeIds, optimized, ) setActiveBranch(suspense, newBranch) } else { triggerEvent(n2, 'onPending') suspense.pendingBranch = newBranch if (newBranch.shapeFlag & 512) suspense.pendingId = newBranch.component.suspenseId else suspense.pendingId = suspenseId++ patch( null, newBranch, suspense.hiddenContainer, null, parentComponent, suspense, namespace, slotScopeIds, optimized, ) if (suspense.deps <= 0) { suspense.resolve() } else { const { timeout, pendingId } = suspense if (timeout > 0) { setTimeout(() => { if (suspense.pendingId === pendingId) suspense.fallback(newFallback) }, timeout) } else if (timeout === 0) { suspense.fallback(newFallback) } } } } } let hasWarned = false function createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, namespace, slotScopeIds, optimized, rendererInternals, isHydrating = false) { if (!hasWarned) { hasWarned = true console[console.info ? 'info' : 'log']( ` is an experimental feature and its API will likely change.`, ) } const { p: patch, m: move, um: unmount, n: next, o: { parentNode, remove }, } = rendererInternals let parentSuspenseId const isSuspensible = isVNodeSuspensible(vnode) if (isSuspensible) { if (parentSuspense && parentSuspense.pendingBranch) { parentSuspenseId = parentSuspense.pendingId parentSuspense.deps++ } } const timeout = vnode.props ? toNumber(vnode.props.timeout) : void 0 { assertNumber(timeout, `Suspense timeout`) } const initialAnchor = anchor const suspense = { vnode, parent: parentSuspense, parentComponent, namespace, container, hiddenContainer, deps: 0, pendingId: suspenseId++, timeout: typeof timeout === 'number' ? timeout : -1, activeBranch: null, pendingBranch: null, isInFallback: !isHydrating, isHydrating, isUnmounted: false, effects: [], resolve(resume = false, sync = false) { { if (!resume && !suspense.pendingBranch) { throw new Error( `suspense.resolve() is called without a pending branch.`, ) } if (suspense.isUnmounted) { throw new Error( `suspense.resolve() is called on an already unmounted suspense boundary.`, ) } } const { vnode: vnode2, activeBranch, pendingBranch, pendingId, effects, parentComponent: parentComponent2, container: container2, } = suspense let delayEnter = false if (suspense.isHydrating) { suspense.isHydrating = false } else if (!resume) { delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === 'out-in' if (delayEnter) { activeBranch.transition.afterLeave = () => { if (pendingId === suspense.pendingId) { move( pendingBranch, container2, anchor === initialAnchor ? next(activeBranch) : anchor, 0, ) queuePostFlushCb(effects) } } } if (activeBranch) { if (parentNode(activeBranch.el) !== suspense.hiddenContainer) anchor = next(activeBranch) unmount(activeBranch, parentComponent2, suspense, true) } if (!delayEnter) move(pendingBranch, container2, anchor, 0) } setActiveBranch(suspense, pendingBranch) suspense.pendingBranch = null suspense.isInFallback = false let parent = suspense.parent let hasUnresolvedAncestor = false while (parent) { if (parent.pendingBranch) { parent.effects.push(...effects) hasUnresolvedAncestor = true break } parent = parent.parent } if (!hasUnresolvedAncestor && !delayEnter) queuePostFlushCb(effects) suspense.effects = [] if (isSuspensible) { if (parentSuspense && parentSuspense.pendingBranch && parentSuspenseId === parentSuspense.pendingId) { parentSuspense.deps-- if (parentSuspense.deps === 0 && !sync) parentSuspense.resolve() } } triggerEvent(vnode2, 'onResolve') }, fallback(fallbackVNode) { if (!suspense.pendingBranch) return const { vnode: vnode2, activeBranch, parentComponent: parentComponent2, container: container2, namespace: namespace2 } = suspense triggerEvent(vnode2, 'onFallback') const anchor2 = next(activeBranch) const mountFallback = () => { if (!suspense.isInFallback) return patch( null, fallbackVNode, container2, anchor2, parentComponent2, null, // fallback tree will not have suspense context namespace2, slotScopeIds, optimized, ) setActiveBranch(suspense, fallbackVNode) } const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === 'out-in' if (delayEnter) activeBranch.transition.afterLeave = mountFallback suspense.isInFallback = true unmount( activeBranch, parentComponent2, null, // no suspense so unmount hooks fire now true, // shouldRemove ) if (!delayEnter) mountFallback() }, move(container2, anchor2, type) { suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type) suspense.container = container2 }, next() { return suspense.activeBranch && next(suspense.activeBranch) }, registerDep(instance, setupRenderEffect) { const isInPendingSuspense = !!suspense.pendingBranch if (isInPendingSuspense) suspense.deps++ const hydratedEl = instance.vnode.el instance.asyncDep.catch((err) => { handleError(err, instance, 0) }).then((asyncSetupResult) => { if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) return instance.asyncResolved = true const { vnode: vnode2 } = instance { pushWarningContext(vnode2) } handleSetupResult(instance, asyncSetupResult, false) if (hydratedEl) vnode2.el = hydratedEl const placeholder = !hydratedEl && instance.subTree.el setupRenderEffect( instance, vnode2, // component may have been moved before resolve. // if this is not a hydration, instance.subTree will be the comment // placeholder. parentNode(hydratedEl || instance.subTree.el), // anchor will not be used if this is hydration, so only need to // consider the comment placeholder case. hydratedEl ? null : next(instance.subTree), suspense, namespace, optimized, ) if (placeholder) remove(placeholder) updateHOCHostEl(instance, vnode2.el) { popWarningContext() } if (isInPendingSuspense && --suspense.deps === 0) suspense.resolve() }) }, unmount(parentSuspense2, doRemove) { suspense.isUnmounted = true if (suspense.activeBranch) { unmount( suspense.activeBranch, parentComponent, parentSuspense2, doRemove, ) } if (suspense.pendingBranch) { unmount( suspense.pendingBranch, parentComponent, parentSuspense2, doRemove, ) } }, } return suspense } function hydrateSuspense(node, vnode, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals, hydrateNode) { const suspense = vnode.suspense = createSuspenseBoundary( vnode, parentSuspense, parentComponent, node.parentNode, document.createElement('div'), null, namespace, slotScopeIds, optimized, rendererInternals, true, ) const result = hydrateNode( node, suspense.pendingBranch = vnode.ssContent, parentComponent, suspense, slotScopeIds, optimized, ) if (suspense.deps === 0) suspense.resolve(false, true) return result } function normalizeSuspenseChildren(vnode) { const { shapeFlag, children } = vnode const isSlotChildren = shapeFlag & 32 vnode.ssContent = normalizeSuspenseSlot( isSlotChildren ? children.default : children, ) vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment) } function normalizeSuspenseSlot(s) { let block if (isFunction(s)) { const trackBlock = isBlockTreeEnabled && s._c if (trackBlock) { s._d = false openBlock() } s = s() if (trackBlock) { s._d = true block = currentBlock closeBlock() } } if (isArray(s)) { const singleChild = filterSingleRoot(s) if (!singleChild && s.filter(child => child !== NULL_DYNAMIC_COMPONENT).length > 0) warn$1(` slots expect a single root node.`) s = singleChild } s = normalizeVNode(s) if (block && !s.dynamicChildren) s.dynamicChildren = block.filter(c => c !== s) return s } function queueEffectWithSuspense(fn, suspense) { if (suspense && suspense.pendingBranch) { if (isArray(fn)) suspense.effects.push(...fn) else suspense.effects.push(fn) } else { queuePostFlushCb(fn) } } function setActiveBranch(suspense, branch) { suspense.activeBranch = branch const { vnode, parentComponent } = suspense let el = branch.el while (!el && branch.component) { branch = branch.component.subTree el = branch.el } vnode.el = el if (parentComponent && parentComponent.subTree === vnode) { parentComponent.vnode.el = el updateHOCHostEl(parentComponent, el) } } function isVNodeSuspensible(vnode) { const suspensible = vnode.props && vnode.props.suspensible return suspensible != null && suspensible !== false } const ssrContextKey = Symbol.for('v-scx') function useSSRContext() { { const ctx = inject(ssrContextKey) if (!ctx) { warn$1( `Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.`, ) } return ctx } } function watchEffect(effect, options) { return doWatch(effect, null, options) } function watchPostEffect(effect, options) { return doWatch( effect, null, extend({}, options, { flush: 'post' }), ) } function watchSyncEffect(effect, options) { return doWatch( effect, null, extend({}, options, { flush: 'sync' }), ) } const INITIAL_WATCHER_VALUE = {} function watch(source, cb, options) { if (!isFunction(cb)) { warn$1( `\`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.`, ) } return doWatch(source, cb, options) } function doWatch(source, cb, { immediate, deep, flush, once, onTrack, onTrigger, } = EMPTY_OBJ) { if (cb && once) { const _cb = cb cb = (...args) => { _cb(...args) unwatch() } } if (deep !== void 0 && typeof deep === 'number') { warn$1( `watch() "deep" option with number value will be used as watch depth in future versions. Please use a boolean instead to avoid potential breakage.`, ) } if (!cb) { if (immediate !== void 0) { warn$1( `watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.`, ) } if (deep !== void 0) { warn$1( `watch() "deep" option is only respected when using the watch(source, callback, options?) signature.`, ) } if (once !== void 0) { warn$1( `watch() "once" option is only respected when using the watch(source, callback, options?) signature.`, ) } } const warnInvalidSource = (s) => { warn$1( `Invalid watch source: `, s, `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`, ) } const instance = currentInstance const reactiveGetter = source2 => deep === true ? source2 : ( // for deep: false, only traverse root-level properties traverse(source2, deep === false ? 1 : void 0) ) let getter let forceTrigger = false let isMultiSource = false if (isRef(source)) { getter = () => source.value forceTrigger = isShallow(source) } else if (isReactive(source)) { getter = () => reactiveGetter(source) forceTrigger = true } else if (isArray(source)) { isMultiSource = true forceTrigger = source.some(s => isReactive(s) || isShallow(s)) getter = () => source.map((s) => { if (isRef(s)) return s.value else if (isReactive(s)) return reactiveGetter(s) else if (isFunction(s)) return callWithErrorHandling(s, instance, 2) else warnInvalidSource(s) }) } else if (isFunction(source)) { if (cb) { getter = () => callWithErrorHandling(source, instance, 2) } else { getter = () => { if (cleanup) cleanup() return callWithAsyncErrorHandling( source, instance, 3, [onCleanup], ) } } } else { getter = NOOP warnInvalidSource(source) } if (cb && deep) { const baseGetter = getter getter = () => traverse(baseGetter()) } let cleanup let onCleanup = (fn) => { cleanup = effect.onStop = () => { callWithErrorHandling(fn, instance, 4) cleanup = effect.onStop = void 0 } } let oldValue = isMultiSource ? Array.from({ length: source.length }).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE const job = () => { if (!effect.active || !effect.dirty) return if (cb) { const newValue = effect.run() if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue)) || false) { if (cleanup) cleanup() callWithAsyncErrorHandling(cb, instance, 3, [ newValue, // pass undefined as the old value when it's changed for the first time oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue, onCleanup, ]) oldValue = newValue } } else { effect.run() } } job.allowRecurse = !!cb let scheduler if (flush === 'sync') { scheduler = job } else if (flush === 'post') { scheduler = () => queuePostRenderEffect(job, instance && instance.suspense) } else { job.pre = true if (instance) job.id = instance.uid scheduler = () => queueJob(job) } const effect = new ReactiveEffect(getter, NOOP, scheduler) const scope = getCurrentScope() const unwatch = () => { effect.stop() if (scope) remove(scope.effects, effect) } { effect.onTrack = onTrack effect.onTrigger = onTrigger } if (cb) { if (immediate) job() else oldValue = effect.run() } else if (flush === 'post') { queuePostRenderEffect( effect.run.bind(effect), instance && instance.suspense, ) } else { effect.run() } return unwatch } function instanceWatch(source, value, options) { const publicThis = this.proxy const getter = isString(source) ? source.includes('.') ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis) let cb if (isFunction(value)) { cb = value } else { cb = value.handler options = value } const reset = setCurrentInstance(this) const res = doWatch(getter, cb.bind(publicThis), options) reset() return res } function createPathGetter(ctx, path) { const segments = path.split('.') return () => { let cur = ctx for (let i = 0; i < segments.length && cur; i++) cur = cur[segments[i]] return cur } } function traverse(value, depth = Number.POSITIVE_INFINITY, seen) { if (depth <= 0 || !isObject(value) || value.__v_skip) return value seen = seen || /* @__PURE__ */ new Set() if (seen.has(value)) return value seen.add(value) depth-- if (isRef(value)) { traverse(value.value, depth, seen) } else if (isArray(value)) { for (let i = 0; i < value.length; i++) traverse(value[i], depth, seen) } else if (isSet(value) || isMap(value)) { value.forEach((v) => { traverse(v, depth, seen) }) } else if (isPlainObject(value)) { for (const key in value) traverse(value[key], depth, seen) } return value } function validateDirectiveName(name) { if (isBuiltInDirective(name)) warn$1(`Do not use built-in directive ids as custom directive id: ${name}`) } function withDirectives(vnode, directives) { if (currentRenderingInstance === null) { warn$1(`withDirectives can only be used inside render functions.`) return vnode } const instance = getExposeProxy(currentRenderingInstance) || currentRenderingInstance.proxy const bindings = vnode.dirs || (vnode.dirs = []) for (let i = 0; i < directives.length; i++) { let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i] if (dir) { if (isFunction(dir)) { dir = { mounted: dir, updated: dir, } } if (dir.deep) traverse(value) bindings.push({ dir, instance, value, oldValue: void 0, arg, modifiers, }) } } return vnode } function invokeDirectiveHook(vnode, prevVNode, instance, name) { const bindings = vnode.dirs const oldBindings = prevVNode && prevVNode.dirs for (let i = 0; i < bindings.length; i++) { const binding = bindings[i] if (oldBindings) binding.oldValue = oldBindings[i].value const hook = binding.dir[name] if (hook) { pauseTracking() callWithAsyncErrorHandling(hook, instance, 8, [ vnode.el, binding, vnode, prevVNode, ]) resetTracking() } } } const leaveCbKey = Symbol('_leaveCb') const enterCbKey$1 = Symbol('_enterCb') function useTransitionState() { const state = { isMounted: false, isLeaving: false, isUnmounting: false, leavingVNodes: /* @__PURE__ */ new Map(), } onMounted(() => { state.isMounted = true }) onBeforeUnmount(() => { state.isUnmounting = true }) return state } const TransitionHookValidator = [Function, Array] const BaseTransitionPropsValidators = { mode: String, appear: Boolean, persisted: Boolean, // enter onBeforeEnter: TransitionHookValidator, onEnter: TransitionHookValidator, onAfterEnter: TransitionHookValidator, onEnterCancelled: TransitionHookValidator, // leave onBeforeLeave: TransitionHookValidator, onLeave: TransitionHookValidator, onAfterLeave: TransitionHookValidator, onLeaveCancelled: TransitionHookValidator, // appear onBeforeAppear: TransitionHookValidator, onAppear: TransitionHookValidator, onAfterAppear: TransitionHookValidator, onAppearCancelled: TransitionHookValidator, } const BaseTransitionImpl = { name: `BaseTransition`, props: BaseTransitionPropsValidators, setup(props, { slots }) { const instance = getCurrentInstance() const state = useTransitionState() return () => { const children = slots.default && getTransitionRawChildren(slots.default(), true) if (!children || !children.length) return let child = children[0] if (children.length > 1) { let hasFound = false for (const c of children) { if (c.type !== Comment) { if (hasFound) { warn$1( ' can only be used on a single element or component. Use for lists.', ) break } child = c hasFound = true } } } const rawProps = toRaw(props) const { mode } = rawProps if (mode && mode !== 'in-out' && mode !== 'out-in' && mode !== 'default') warn$1(`invalid mode: ${mode}`) if (state.isLeaving) return emptyPlaceholder(child) const innerChild = getKeepAliveChild(child) if (!innerChild) return emptyPlaceholder(child) const enterHooks = resolveTransitionHooks( innerChild, rawProps, state, instance, ) setTransitionHooks(innerChild, enterHooks) const oldChild = instance.subTree const oldInnerChild = oldChild && getKeepAliveChild(oldChild) if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(innerChild, oldInnerChild)) { const leavingHooks = resolveTransitionHooks( oldInnerChild, rawProps, state, instance, ) setTransitionHooks(oldInnerChild, leavingHooks) if (mode === 'out-in' && innerChild.type !== Comment) { state.isLeaving = true leavingHooks.afterLeave = () => { state.isLeaving = false if (instance.update.active !== false) { instance.effect.dirty = true instance.update() } } return emptyPlaceholder(child) } else if (mode === 'in-out' && innerChild.type !== Comment) { leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { const leavingVNodesCache = getLeavingNodesForType( state, oldInnerChild, ) leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild el[leaveCbKey] = () => { earlyRemove() el[leaveCbKey] = void 0 delete enterHooks.delayedLeave } enterHooks.delayedLeave = delayedLeave } } } return child } }, } const BaseTransition = BaseTransitionImpl function getLeavingNodesForType(state, vnode) { const { leavingVNodes } = state let leavingVNodesCache = leavingVNodes.get(vnode.type) if (!leavingVNodesCache) { leavingVNodesCache = /* @__PURE__ */ Object.create(null) leavingVNodes.set(vnode.type, leavingVNodesCache) } return leavingVNodesCache } function resolveTransitionHooks(vnode, props, state, instance) { const { appear, mode, persisted = false, onBeforeEnter, onEnter, onAfterEnter, onEnterCancelled, onBeforeLeave, onLeave, onAfterLeave, onLeaveCancelled, onBeforeAppear, onAppear, onAfterAppear, onAppearCancelled, } = props const key = String(vnode.key) const leavingVNodesCache = getLeavingNodesForType(state, vnode) const callHook = (hook, args) => { hook && callWithAsyncErrorHandling( hook, instance, 9, args, ) } const callAsyncHook = (hook, args) => { const done = args[1] callHook(hook, args) if (isArray(hook)) { if (hook.every(hook2 => hook2.length <= 1)) done() } else if (hook.length <= 1) { done() } } const hooks = { mode, persisted, beforeEnter(el) { let hook = onBeforeEnter if (!state.isMounted) { if (appear) hook = onBeforeAppear || onBeforeEnter else return } if (el[leaveCbKey]) { el[leaveCbKey]( true, /* cancelled */ ) } const leavingVNode = leavingVNodesCache[key] if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) leavingVNode.el[leaveCbKey]() callHook(hook, [el]) }, enter(el) { let hook = onEnter let afterHook = onAfterEnter let cancelHook = onEnterCancelled if (!state.isMounted) { if (appear) { hook = onAppear || onEnter afterHook = onAfterAppear || onAfterEnter cancelHook = onAppearCancelled || onEnterCancelled } else { return } } let called = false const done = el[enterCbKey$1] = (cancelled) => { if (called) return called = true if (cancelled) callHook(cancelHook, [el]) else callHook(afterHook, [el]) if (hooks.delayedLeave) hooks.delayedLeave() el[enterCbKey$1] = void 0 } if (hook) callAsyncHook(hook, [el, done]) else done() }, leave(el, remove) { const key2 = String(vnode.key) if (el[enterCbKey$1]) { el[enterCbKey$1]( true, /* cancelled */ ) } if (state.isUnmounting) return remove() callHook(onBeforeLeave, [el]) let called = false const done = el[leaveCbKey] = (cancelled) => { if (called) return called = true remove() if (cancelled) callHook(onLeaveCancelled, [el]) else callHook(onAfterLeave, [el]) el[leaveCbKey] = void 0 if (leavingVNodesCache[key2] === vnode) delete leavingVNodesCache[key2] } leavingVNodesCache[key2] = vnode if (onLeave) callAsyncHook(onLeave, [el, done]) else done() }, clone(vnode2) { return resolveTransitionHooks(vnode2, props, state, instance) }, } return hooks } function emptyPlaceholder(vnode) { if (isKeepAlive(vnode)) { vnode = cloneVNode(vnode) vnode.children = null return vnode } } function getKeepAliveChild(vnode) { if (!isKeepAlive(vnode)) return vnode if (vnode.component) return vnode.component.subTree const { shapeFlag, children } = vnode if (children) { if (shapeFlag & 16) return children[0] if (shapeFlag & 32 && isFunction(children.default)) return children.default() } } function setTransitionHooks(vnode, hooks) { if (vnode.shapeFlag & 6 && vnode.component) { setTransitionHooks(vnode.component.subTree, hooks) } else if (vnode.shapeFlag & 128) { vnode.ssContent.transition = hooks.clone(vnode.ssContent) vnode.ssFallback.transition = hooks.clone(vnode.ssFallback) } else { vnode.transition = hooks } } function getTransitionRawChildren(children, keepComment = false, parentKey) { let ret = [] let keyedFragmentCount = 0 for (let i = 0; i < children.length; i++) { const child = children[i] const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i) if (child.type === Fragment) { if (child.patchFlag & 128) keyedFragmentCount++ ret = ret.concat( getTransitionRawChildren(child.children, keepComment, key), ) } else if (keepComment || child.type !== Comment) { ret.push(key != null ? cloneVNode(child, { key }) : child) } } if (keyedFragmentCount > 1) { for (let i = 0; i < ret.length; i++) ret[i].patchFlag = -2 } return ret } /*! #__NO_SIDE_EFFECTS__ */ // @__NO_SIDE_EFFECTS__ function defineComponent(options, extraOptions) { return isFunction(options) ? ( // #8326: extend call and options.name access are considered side-effects // by Rollup, so we have to wrap it in a pure-annotated IIFE. /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))() ) : options } const isAsyncWrapper = i => !!i.type.__asyncLoader /*! #__NO_SIDE_EFFECTS__ */ // @__NO_SIDE_EFFECTS__ function defineAsyncComponent(source) { if (isFunction(source)) source = { loader: source } const { loader, loadingComponent, errorComponent, delay = 200, timeout, // undefined = never times out suspensible = true, onError: userOnError, } = source let pendingRequest = null let resolvedComp let retries = 0 const retry = () => { retries++ pendingRequest = null return load() } const load = () => { let thisRequest return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => { err = err instanceof Error ? err : new Error(String(err)) if (userOnError) { return new Promise((resolve, reject) => { const userRetry = () => resolve(retry()) const userFail = () => reject(err) userOnError(err, userRetry, userFail, retries + 1) }) } else { throw err } }).then((comp) => { if (thisRequest !== pendingRequest && pendingRequest) return pendingRequest if (!comp) { warn$1( `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`, ) } if (comp && (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) comp = comp.default if (comp && !isObject(comp) && !isFunction(comp)) throw new Error(`Invalid async component load result: ${comp}`) resolvedComp = comp return comp })) } return defineComponent({ name: 'AsyncComponentWrapper', __asyncLoader: load, get __asyncResolved() { return resolvedComp }, setup() { const instance = currentInstance if (resolvedComp) return () => createInnerComp(resolvedComp, instance) const onError = (err) => { pendingRequest = null handleError( err, instance, 13, !errorComponent, ) } if (suspensible && instance.suspense || false) { return load().then((comp) => { return () => createInnerComp(comp, instance) }).catch((err) => { onError(err) return () => errorComponent ? createVNode(errorComponent, { error: err, }) : null }) } const loaded = ref(false) const error = ref() const delayed = ref(!!delay) if (delay) { setTimeout(() => { delayed.value = false }, delay) } if (timeout != null) { setTimeout(() => { if (!loaded.value && !error.value) { const err = new Error( `Async component timed out after ${timeout}ms.`, ) onError(err) error.value = err } }, timeout) } load().then(() => { loaded.value = true if (instance.parent && isKeepAlive(instance.parent.vnode)) { instance.parent.effect.dirty = true queueJob(instance.parent.update) } }).catch((err) => { onError(err) error.value = err }) return () => { if (loaded.value && resolvedComp) { return createInnerComp(resolvedComp, instance) } else if (error.value && errorComponent) { return createVNode(errorComponent, { error: error.value, }) } else if (loadingComponent && !delayed.value) { return createVNode(loadingComponent) } } }, }) } function createInnerComp(comp, parent) { const { ref: ref2, props, children, ce } = parent.vnode const vnode = createVNode(comp, props, children) vnode.ref = ref2 vnode.ce = ce delete parent.vnode.ce return vnode } const isKeepAlive = vnode => vnode.type.__isKeepAlive const KeepAliveImpl = { name: `KeepAlive`, // Marker for special handling inside the renderer. We are not using a === // check directly on KeepAlive in the renderer, because importing it directly // would prevent it from being tree-shaken. __isKeepAlive: true, props: { include: [String, RegExp, Array], exclude: [String, RegExp, Array], max: [String, Number], }, setup(props, { slots }) { const instance = getCurrentInstance() const sharedContext = instance.ctx const cache = /* @__PURE__ */ new Map() const keys = /* @__PURE__ */ new Set() let current = null { instance.__v_cache = cache } const parentSuspense = instance.suspense const { renderer: { p: patch, m: move, um: _unmount, o: { createElement }, }, } = sharedContext const storageContainer = createElement('div') sharedContext.activate = (vnode, container, anchor, namespace, optimized) => { const instance2 = vnode.component move(vnode, container, anchor, 0, parentSuspense) patch( instance2.vnode, vnode, container, anchor, instance2, parentSuspense, namespace, vnode.slotScopeIds, optimized, ) queuePostRenderEffect(() => { instance2.isDeactivated = false if (instance2.a) invokeArrayFns(instance2.a) const vnodeHook = vnode.props && vnode.props.onVnodeMounted if (vnodeHook) invokeVNodeHook(vnodeHook, instance2.parent, vnode) }, parentSuspense) { devtoolsComponentAdded(instance2) } } sharedContext.deactivate = (vnode) => { const instance2 = vnode.component move(vnode, storageContainer, null, 1, parentSuspense) queuePostRenderEffect(() => { if (instance2.da) invokeArrayFns(instance2.da) const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted if (vnodeHook) invokeVNodeHook(vnodeHook, instance2.parent, vnode) instance2.isDeactivated = true }, parentSuspense) { devtoolsComponentAdded(instance2) } } function unmount(vnode) { resetShapeFlag(vnode) _unmount(vnode, instance, parentSuspense, true) } function pruneCache(filter) { cache.forEach((vnode, key) => { const name = getComponentName(vnode.type) if (name && (!filter || !filter(name))) pruneCacheEntry(key) }) } function pruneCacheEntry(key) { const cached = cache.get(key) if (!current || !isSameVNodeType(cached, current)) unmount(cached) else if (current) resetShapeFlag(current) cache.delete(key) keys.delete(key) } watch( () => [props.include, props.exclude], ([include, exclude]) => { include && pruneCache(name => matches(include, name)) exclude && pruneCache(name => !matches(exclude, name)) }, // prune post-render after `current` has been updated { flush: 'post', deep: true }, ) let pendingCacheKey = null const cacheSubtree = () => { if (pendingCacheKey != null) cache.set(pendingCacheKey, getInnerChild(instance.subTree)) } onMounted(cacheSubtree) onUpdated(cacheSubtree) onBeforeUnmount(() => { cache.forEach((cached) => { const { subTree, suspense } = instance const vnode = getInnerChild(subTree) if (cached.type === vnode.type && cached.key === vnode.key) { resetShapeFlag(vnode) const da = vnode.component.da da && queuePostRenderEffect(da, suspense) return } unmount(cached) }) }) return () => { pendingCacheKey = null if (!slots.default) return null const children = slots.default() const rawVNode = children[0] if (children.length > 1) { { warn$1(`KeepAlive should contain exactly one component child.`) } current = null return children } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) { current = null return rawVNode } let vnode = getInnerChild(rawVNode) const comp = vnode.type const name = getComponentName( isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp, ) const { include, exclude, max } = props if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) { current = vnode return rawVNode } const key = vnode.key == null ? comp : vnode.key const cachedVNode = cache.get(key) if (vnode.el) { vnode = cloneVNode(vnode) if (rawVNode.shapeFlag & 128) rawVNode.ssContent = vnode } pendingCacheKey = key if (cachedVNode) { vnode.el = cachedVNode.el vnode.component = cachedVNode.component if (vnode.transition) setTransitionHooks(vnode, vnode.transition) vnode.shapeFlag |= 512 keys.delete(key) keys.add(key) } else { keys.add(key) if (max && keys.size > Number.parseInt(max, 10)) pruneCacheEntry(keys.values().next().value) } vnode.shapeFlag |= 256 current = vnode return isSuspense(rawVNode.type) ? rawVNode : vnode } }, } const KeepAlive = KeepAliveImpl function matches(pattern, name) { if (isArray(pattern)) return pattern.some(p => matches(p, name)) else if (isString(pattern)) return pattern.split(',').includes(name) else if (isRegExp(pattern)) return pattern.test(name) return false } function onActivated(hook, target) { registerKeepAliveHook(hook, 'a', target) } function onDeactivated(hook, target) { registerKeepAliveHook(hook, 'da', target) } function registerKeepAliveHook(hook, type, target = currentInstance) { const wrappedHook = hook.__wdc || (hook.__wdc = () => { let current = target while (current) { if (current.isDeactivated) return current = current.parent } return hook() }) injectHook(type, wrappedHook, target) if (target) { let current = target.parent while (current && current.parent) { if (isKeepAlive(current.parent.vnode)) injectToKeepAliveRoot(wrappedHook, type, target, current) current = current.parent } } } function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) { const injected = injectHook( type, hook, keepAliveRoot, true, /* prepend */ ) onUnmounted(() => { remove(keepAliveRoot[type], injected) }, target) } function resetShapeFlag(vnode) { vnode.shapeFlag &= ~256 vnode.shapeFlag &= ~512 } function getInnerChild(vnode) { return vnode.shapeFlag & 128 ? vnode.ssContent : vnode } function injectHook(type, hook, target = currentInstance, prepend = false) { if (target) { const hooks = target[type] || (target[type] = []) const wrappedHook = hook.__weh || (hook.__weh = (...args) => { if (target.isUnmounted) return pauseTracking() const reset = setCurrentInstance(target) const res = callWithAsyncErrorHandling(hook, target, type, args) reset() resetTracking() return res }) if (prepend) hooks.unshift(wrappedHook) else hooks.push(wrappedHook) return wrappedHook } else { const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, '')) warn$1( `${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.`), ) } } function createHook(lifecycle) { return (hook, target = currentInstance) => ( // post-create lifecycle registrations are noops during SSR (except for serverPrefetch) (!isInSSRComponentSetup || lifecycle === 'sp') && injectHook(lifecycle, (...args) => hook(...args), target) ) } const onBeforeMount = createHook('bm') const onMounted = createHook('m') const onBeforeUpdate = createHook('bu') const onUpdated = createHook('u') const onBeforeUnmount = createHook('bum') const onUnmounted = createHook('um') const onServerPrefetch = createHook('sp') const onRenderTriggered = createHook( 'rtg', ) const onRenderTracked = createHook( 'rtc', ) function onErrorCaptured(hook, target = currentInstance) { injectHook('ec', hook, target) } function renderList(source, renderItem, cache, index) { let ret const cached = cache && cache[index] if (isArray(source) || isString(source)) { ret = Array.from({ length: source.length }) for (let i = 0, l = source.length; i < l; i++) ret[i] = renderItem(source[i], i, void 0, cached && cached[i]) } else if (typeof source === 'number') { if (!Number.isInteger(source)) warn$1(`The v-for range expect an integer value but got ${source}.`) ret = new Array(source) for (let i = 0; i < source; i++) ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]) } else if (isObject(source)) { if (source[Symbol.iterator]) { ret = Array.from( source, (item, i) => renderItem(item, i, void 0, cached && cached[i]), ) } else { const keys = Object.keys(source) ret = Array.from({ length: keys.length }) for (let i = 0, l = keys.length; i < l; i++) { const key = keys[i] ret[i] = renderItem(source[key], key, i, cached && cached[i]) } } } else { ret = [] } if (cache) cache[index] = ret return ret } function createSlots(slots, dynamicSlots) { for (let i = 0; i < dynamicSlots.length; i++) { const slot = dynamicSlots[i] if (isArray(slot)) { for (let j = 0; j < slot.length; j++) slots[slot[j].name] = slot[j].fn } else if (slot) { slots[slot.name] = slot.key ? (...args) => { const res = slot.fn(...args) if (res) res.key = slot.key return res } : slot.fn } } return slots } function renderSlot(slots, name, props = {}, fallback, noSlotted) { if (currentRenderingInstance.isCE || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.isCE) { if (name !== 'default') props.name = name return createVNode('slot', props, fallback && fallback()) } let slot = slots[name] if (slot && slot.length > 1) { warn$1( `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.`, ) slot = () => [] } if (slot && slot._c) slot._d = false openBlock() const validSlotContent = slot && ensureValidVNode(slot(props)) const rendered = createBlock( Fragment, { key: props.key // slot content array of a dynamic conditional slot may have a branch // key attached in the `createSlots` helper, respect that || validSlotContent && validSlotContent.key || `_${name}`, }, validSlotContent || (fallback ? fallback() : []), validSlotContent && slots._ === 1 ? 64 : -2, ) if (!noSlotted && rendered.scopeId) rendered.slotScopeIds = [`${rendered.scopeId}-s`] if (slot && slot._c) slot._d = true return rendered } function ensureValidVNode(vnodes) { return vnodes.some((child) => { if (!isVNode(child)) return true if (child.type === Comment) return false if (child.type === Fragment && !ensureValidVNode(child.children)) return false return true }) ? vnodes : null } function toHandlers(obj, preserveCaseIfNecessary) { const ret = {} if (!isObject(obj)) { warn$1(`v-on with no argument expects an object value.`) return ret } for (const key in obj) ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key] return ret } function getPublicInstance(i) { if (!i) return null if (isStatefulComponent(i)) return getExposeProxy(i) || i.proxy return getPublicInstance(i.parent) } const publicPropertiesMap = ( // Move PURE marker to new line to workaround compiler discarding it // due to type annotation /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), { $: i => i, $el: i => i.vnode.el, $data: i => i.data, $props: i => shallowReadonly(i.props), $attrs: i => shallowReadonly(i.attrs), $slots: i => shallowReadonly(i.slots), $refs: i => shallowReadonly(i.refs), $parent: i => getPublicInstance(i.parent), $root: i => getPublicInstance(i.root), $emit: i => i.emit, $options: i => resolveMergedOptions(i), $forceUpdate: i => i.f || (i.f = () => { i.effect.dirty = true queueJob(i.update) }), $nextTick: i => i.n || (i.n = nextTick.bind(i.proxy)), $watch: i => instanceWatch.bind(i), }) ) const isReservedPrefix = key => key === '_' || key === '$' const hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key) const PublicInstanceProxyHandlers = { get({ _: instance }, key) { if (key === '__v_skip') return true const { ctx, setupState, data, props, accessCache, type, appContext } = instance if (key === '__isVue') return true let normalizedProps if (key[0] !== '$') { const n = accessCache[key] if (n !== void 0) { switch (n) { case 1 /* SETUP */: return setupState[key] case 2 /* DATA */: return data[key] case 4 /* CONTEXT */: return ctx[key] case 3 /* PROPS */: return props[key] } } else if (hasSetupBinding(setupState, key)) { accessCache[key] = 1 /* SETUP */ return setupState[key] } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { accessCache[key] = 2 /* DATA */ return data[key] } else if ( // only cache other properties when instance has declared (thus stable) // props (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key) ) { accessCache[key] = 3 /* PROPS */ return props[key] } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { accessCache[key] = 4 /* CONTEXT */ return ctx[key] } else if (shouldCacheAccess) { accessCache[key] = 0 /* OTHER */ } } const publicGetter = publicPropertiesMap[key] let cssModule, globalProperties if (publicGetter) { if (key === '$attrs') { track(instance.attrs, 'get', '') markAttrsAccessed() } else if (key === '$slots') { track(instance, 'get', key) } return publicGetter(instance) } else if ( // css module (injected by vue-loader) (cssModule = type.__cssModules) && (cssModule = cssModule[key]) ) { return cssModule } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { accessCache[key] = 4 /* CONTEXT */ return ctx[key] } else if ( // global properties globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key) ) { { return globalProperties[key] } } else if (currentRenderingInstance && (!isString(key) // #1091 avoid internal isRef/isVNode checks on component instance leading // to infinite warning loop || key.indexOf('__v') !== 0)) { if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) { warn$1( `Property ${JSON.stringify( key, )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`, ) } else if (instance === currentRenderingInstance) { warn$1( `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`, ) } } }, set({ _: instance }, key, value) { const { data, setupState, ctx } = instance if (hasSetupBinding(setupState, key)) { setupState[key] = value return true } else if (setupState.__isScriptSetup && hasOwn(setupState, key)) { warn$1(`Cannot mutate