@brftech/filex 0.1.56 → 0.1.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/dist/{ArchiveViewer-CMaBM4yZ.js → ArchiveViewer-BotnnnoW.js} +13 -13
- package/dist/ArchiveViewer-BotnnnoW.js.map +1 -0
- package/dist/{CsvViewer-D5_c7bkP.js → CsvViewer-CrwZZqmq.js} +3 -3
- package/dist/CsvViewer-CrwZZqmq.js.map +1 -0
- package/dist/{DrawioViewer-CBOqWzaj.js → DrawioViewer-uEJbt6hj.js} +3 -3
- package/dist/DrawioViewer-uEJbt6hj.js.map +1 -0
- package/dist/{EpubViewer-Cs6yZIP2.js → EpubViewer-mCV3ZEXb.js} +3 -3
- package/dist/EpubViewer-mCV3ZEXb.js.map +1 -0
- package/dist/{IpynbViewer-wJhbhUla.js → IpynbViewer-B3g-lJfV.js} +3 -3
- package/dist/IpynbViewer-B3g-lJfV.js.map +1 -0
- package/dist/{MermaidViewer-k_XVXoc5.js → MermaidViewer-B0Q0ghbV.js} +3 -3
- package/dist/MermaidViewer-B0Q0ghbV.js.map +1 -0
- package/dist/{PsdViewer-Bo4imBCF.js → PsdViewer-lk6xrjRB.js} +8 -8
- package/dist/PsdViewer-lk6xrjRB.js.map +1 -0
- package/dist/{TiffViewer-D73-Gyt-.js → TiffViewer-PXjYKqzo.js} +3 -3
- package/dist/TiffViewer-PXjYKqzo.js.map +1 -0
- package/dist/{Viewer3D-Ba-RPIRz.js → Viewer3D-DtT-hBa3.js} +4 -4
- package/dist/Viewer3D-DtT-hBa3.js.map +1 -0
- package/dist/filex.js +1 -1
- package/dist/filex.umd.cjs +13 -13
- package/dist/filex.umd.cjs.map +1 -1
- package/dist/{index-idz8Cz5t.js → index-BNs90VaG.js} +378 -378
- package/dist/index-BNs90VaG.js.map +1 -0
- package/dist/style.css +1 -1
- package/dist/useViewerFetch-czqbd2Lj.js.map +1 -1
- package/package.json +2 -2
- package/dist/ArchiveViewer-CMaBM4yZ.js.map +0 -1
- package/dist/CsvViewer-D5_c7bkP.js.map +0 -1
- package/dist/DrawioViewer-CBOqWzaj.js.map +0 -1
- package/dist/EpubViewer-Cs6yZIP2.js.map +0 -1
- package/dist/IpynbViewer-wJhbhUla.js.map +0 -1
- package/dist/MermaidViewer-k_XVXoc5.js.map +0 -1
- package/dist/PsdViewer-Bo4imBCF.js.map +0 -1
- package/dist/TiffViewer-D73-Gyt-.js.map +0 -1
- package/dist/Viewer3D-Ba-RPIRz.js.map +0 -1
- package/dist/index-idz8Cz5t.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BNs90VaG.js","sources":["../../../node_modules/.pnpm/@vue+shared@3.5.34/node_modules/@vue/shared/dist/shared.esm-bundler.js","../../../node_modules/.pnpm/@vue+reactivity@3.5.34/node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js","../../../node_modules/.pnpm/@vue+runtime-core@3.5.34/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js","../../../node_modules/.pnpm/@vue+runtime-dom@3.5.34/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js","../../core/src/types/FileNode.ts","../../core/src/composables/useFileApi.ts","../../core/src/composables/useUploadChunked.ts","../../core/src/composables/useSelection.ts","../../core/src/composables/useKeyboardShortcuts.ts","../../core/src/locales/tr.ts","../../core/src/locales/en.ts","../../core/src/locales/index.ts","../../core/src/composables/useLocale.ts","../../core/src/composables/usePendingOps.ts","../../core/src/composables/useMonacoLoader.ts","../../core/src/components/Toolbar.vue","../../core/src/components/TagPicker.vue","../../core/src/components/RecentlyOpened.vue","../../core/src/components/Breadcrumb.vue","../../core/src/components/StarButton.vue","../../core/src/components/ListView.vue","../../core/src/components/GridView.vue","../../core/src/components/ContextMenu.vue","../../core/src/components/UploadProgress.vue","../../core/src/components/PendingOpsTray.vue","../../core/src/modals/Modal.vue","../../core/src/modals/NewFolderModal.vue","../../core/src/modals/RenameModal.vue","../../core/src/modals/DeleteConfirmModal.vue","../../core/src/modals/ShareModal.vue","../../core/src/modals/PreviewModal.vue","../../core/src/modals/ConvertModal.vue","../../core/src/modals/PermissionsModal.vue","../../core/src/FileExplorer.vue","../src/index.ts"],"sourcesContent":["/**\n* @vue/shared v3.5.34\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n const map = /* @__PURE__ */ Object.create(null);\n for (const key of str.split(\",\")) map[key] = 1;\n return (val) => val in map;\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n // the leading comma is intentional so empty string \"\" is also included\n \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return ((str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n });\n};\nconst camelizeRE = /-\\w/g;\nconst camelize = cacheStringFunction(\n (str) => {\n return str.replace(camelizeRE, (c) => c.slice(1).toUpperCase());\n }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n (str) => {\n const s = str ? `on${capitalize(str)}` : ``;\n return s;\n }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](...arg);\n }\n};\nconst def = (obj, key, value, writable = false) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n writable,\n value\n });\n};\nconst looseToNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n const n = isString(val) ? Number(val) : NaN;\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n return source + JSON.stringify(\n options,\n (_, val) => typeof val === \"function\" ? val.toString() : val\n );\n}\n\nconst PatchFlags = {\n \"TEXT\": 1,\n \"1\": \"TEXT\",\n \"CLASS\": 2,\n \"2\": \"CLASS\",\n \"STYLE\": 4,\n \"4\": \"STYLE\",\n \"PROPS\": 8,\n \"8\": \"PROPS\",\n \"FULL_PROPS\": 16,\n \"16\": \"FULL_PROPS\",\n \"NEED_HYDRATION\": 32,\n \"32\": \"NEED_HYDRATION\",\n \"STABLE_FRAGMENT\": 64,\n \"64\": \"STABLE_FRAGMENT\",\n \"KEYED_FRAGMENT\": 128,\n \"128\": \"KEYED_FRAGMENT\",\n \"UNKEYED_FRAGMENT\": 256,\n \"256\": \"UNKEYED_FRAGMENT\",\n \"NEED_PATCH\": 512,\n \"512\": \"NEED_PATCH\",\n \"DYNAMIC_SLOTS\": 1024,\n \"1024\": \"DYNAMIC_SLOTS\",\n \"DEV_ROOT_FRAGMENT\": 2048,\n \"2048\": \"DEV_ROOT_FRAGMENT\",\n \"CACHED\": -1,\n \"-1\": \"CACHED\",\n \"BAIL\": -2,\n \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `NEED_HYDRATION`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `CACHED`,\n [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n \"ELEMENT\": 1,\n \"1\": \"ELEMENT\",\n \"FUNCTIONAL_COMPONENT\": 2,\n \"2\": \"FUNCTIONAL_COMPONENT\",\n \"STATEFUL_COMPONENT\": 4,\n \"4\": \"STATEFUL_COMPONENT\",\n \"TEXT_CHILDREN\": 8,\n \"8\": \"TEXT_CHILDREN\",\n \"ARRAY_CHILDREN\": 16,\n \"16\": \"ARRAY_CHILDREN\",\n \"SLOTS_CHILDREN\": 32,\n \"32\": \"SLOTS_CHILDREN\",\n \"TELEPORT\": 64,\n \"64\": \"TELEPORT\",\n \"SUSPENSE\": 128,\n \"128\": \"SUSPENSE\",\n \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n \"COMPONENT_KEPT_ALIVE\": 512,\n \"512\": \"COMPONENT_KEPT_ALIVE\",\n \"COMPONENT\": 6,\n \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n \"STABLE\": 1,\n \"1\": \"STABLE\",\n \"DYNAMIC\": 2,\n \"2\": \"DYNAMIC\",\n \"FORWARDED\": 3,\n \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n start = Math.max(0, Math.min(start, source.length));\n end = Math.max(0, Math.min(end, source.length));\n if (start > end) return \"\";\n let lines = source.split(/(\\r?\\n)/);\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length) continue;\n const line = j + 1;\n res.push(\n `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`\n );\n const lineLength = lines[j].length;\n const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n if (j === i) {\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n );\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isString(value) || isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n if (!styles) return \"\";\n if (isString(styles)) return styles;\n let ret = \"\";\n for (const key in styles) {\n const value = styles[key];\n if (isString(value) || typeof value === \"number\") {\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props) return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n if (value == null) {\n return false;\n }\n const type = typeof value;\n return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \""\";\n break;\n case 38:\n escaped = \"&\";\n break;\n case 39:\n escaped = \"'\";\n break;\n case 60:\n escaped = \"<\";\n break;\n case 62:\n escaped = \">\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n return src.replace(commentStripRE, \"\");\n}\nconst cssVarNameEscapeSymbolsRE = /[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n return key.replace(\n cssVarNameEscapeSymbolsRE,\n (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n );\n}\n\nfunction looseCompareArrays(a, b) {\n if (a.length !== b.length) return false;\n let equal = true;\n for (let i = 0; equal && i < a.length; i++) {\n equal = looseEqual(a[i], b[i]);\n }\n return equal;\n}\nfunction looseEqual(a, b) {\n if (a === b) return true;\n let aValidType = isDate(a);\n let bValidType = isDate(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n }\n aValidType = isSymbol(a);\n bValidType = isSymbol(b);\n if (aValidType || bValidType) {\n return a === b;\n }\n aValidType = isArray(a);\n bValidType = isArray(b);\n if (aValidType || bValidType) {\n return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n }\n aValidType = isObject(a);\n bValidType = isObject(b);\n if (aValidType || bValidType) {\n if (!aValidType || !bValidType) {\n return false;\n }\n const aKeysCount = Object.keys(a).length;\n const bKeysCount = Object.keys(b).length;\n if (aKeysCount !== bKeysCount) {\n return false;\n }\n for (const key in a) {\n const aHasKey = a.hasOwnProperty(key);\n const bHasKey = b.hasOwnProperty(key);\n if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n return false;\n }\n }\n }\n return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n if (isRef(val)) {\n return replacer(_key, val.value);\n } else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce(\n (entries, [key, val2], i) => {\n entries[stringifySymbol(key, i) + \" =>\"] = val2;\n return entries;\n },\n {}\n )\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n };\n } else if (isSymbol(val)) {\n return stringifySymbol(val);\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n var _a;\n return (\n // Symbol.description in es2019+ so we need to cast here to pass\n // the lib: es2016 check\n isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n );\n};\n\nfunction normalizeCssVarValue(value) {\n if (value == null) {\n return \"initial\";\n }\n if (typeof value === \"string\") {\n return value === \"\" ? \" \" : value;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n console.warn(\n \"[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:\",\n value\n );\n }\n }\n return String(value);\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, PatchFlags, ShapeFlags, SlotFlags, camelize, capitalize, cssVarNameEscapeSymbolsRE, def, escapeHtml, escapeHtmlComment, extend, genCacheKey, genPropsAccessExp, generateCodeFrame, getEscapedCssVarName, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyAllowed, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownMathMLAttr, isKnownSvgAttr, isMap, isMathMLTag, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isRenderableAttrValue, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeCssVarValue, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n","/**\n* @vue/reactivity v3.5.34\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { extend, hasChanged, isArray, isIntegerKey, isSymbol, isMap, hasOwn, isObject, makeMap, capitalize, toRawType, def, isFunction, EMPTY_OBJ, isSet, isPlainObject, remove, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n // TODO isolatedDeclarations \"__v_skip\"\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this._active = true;\n /**\n * @internal track `on` calls, allow `on` call multiple times\n */\n this._on = 0;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this._isPaused = false;\n this._warnOnRun = true;\n this.__v_skip = true;\n if (!detached && activeEffectScope) {\n if (activeEffectScope.active) {\n this.parent = activeEffectScope;\n this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n this\n ) - 1;\n } else {\n this._active = false;\n this._warnOnRun = false;\n }\n }\n }\n get active() {\n return this._active;\n }\n pause() {\n if (this._active) {\n this._isPaused = true;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].pause();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].pause();\n }\n }\n }\n /**\n * Resumes the effect scope, including all child scopes and effects.\n */\n resume() {\n if (this._active) {\n if (this._isPaused) {\n this._isPaused = false;\n let i, l;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].resume();\n }\n }\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].resume();\n }\n }\n }\n }\n run(fn) {\n if (this._active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n } finally {\n activeEffectScope = currentEffectScope;\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && this._warnOnRun) {\n warn(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n if (++this._on === 1) {\n this.prevScope = activeEffectScope;\n activeEffectScope = this;\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n if (this._on > 0 && --this._on === 0) {\n if (activeEffectScope === this) {\n activeEffectScope = this.prevScope;\n } else {\n let current = activeEffectScope;\n while (current) {\n if (current.prevScope === this) {\n current.prevScope = this.prevScope;\n break;\n }\n current = current.prevScope;\n }\n }\n this.prevScope = void 0;\n }\n }\n stop(fromParent) {\n if (this._active) {\n this._active = false;\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n this.effects.length = 0;\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n this.cleanups.length = 0;\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n this.scopes.length = 0;\n }\n if (!this.detached && this.parent && !fromParent) {\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = void 0;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn, failSilently = false) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onScopeDispose() is called when there is no active effect scope to be associated with.`\n );\n }\n}\n\nlet activeSub;\nconst EffectFlags = {\n \"ACTIVE\": 1,\n \"1\": \"ACTIVE\",\n \"RUNNING\": 2,\n \"2\": \"RUNNING\",\n \"TRACKING\": 4,\n \"4\": \"TRACKING\",\n \"NOTIFIED\": 8,\n \"8\": \"NOTIFIED\",\n \"DIRTY\": 16,\n \"16\": \"DIRTY\",\n \"ALLOW_RECURSE\": 32,\n \"32\": \"ALLOW_RECURSE\",\n \"PAUSED\": 64,\n \"64\": \"PAUSED\",\n \"EVALUATED\": 128,\n \"128\": \"EVALUATED\"\n};\nconst pausedQueueEffects = /* @__PURE__ */ new WeakSet();\nclass ReactiveEffect {\n constructor(fn) {\n this.fn = fn;\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 1 | 4;\n /**\n * @internal\n */\n this.next = void 0;\n /**\n * @internal\n */\n this.cleanup = void 0;\n this.scheduler = void 0;\n if (activeEffectScope) {\n if (activeEffectScope.active) {\n activeEffectScope.effects.push(this);\n } else {\n this.flags &= -2;\n }\n }\n }\n pause() {\n this.flags |= 64;\n }\n resume() {\n if (this.flags & 64) {\n this.flags &= -65;\n if (pausedQueueEffects.has(this)) {\n pausedQueueEffects.delete(this);\n this.trigger();\n }\n }\n }\n /**\n * @internal\n */\n notify() {\n if (this.flags & 2 && !(this.flags & 32)) {\n return;\n }\n if (!(this.flags & 8)) {\n batch(this);\n }\n }\n run() {\n if (!(this.flags & 1)) {\n return this.fn();\n }\n this.flags |= 2;\n cleanupEffect(this);\n prepareDeps(this);\n const prevEffect = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = this;\n shouldTrack = true;\n try {\n return this.fn();\n } finally {\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub !== this) {\n warn(\n \"Active effect was not restored correctly - this is likely a Vue internal bug.\"\n );\n }\n cleanupDeps(this);\n activeSub = prevEffect;\n shouldTrack = prevShouldTrack;\n this.flags &= -3;\n }\n }\n stop() {\n if (this.flags & 1) {\n for (let link = this.deps; link; link = link.nextDep) {\n removeSub(link);\n }\n this.deps = this.depsTail = void 0;\n cleanupEffect(this);\n this.onStop && this.onStop();\n this.flags &= -2;\n }\n }\n trigger() {\n if (this.flags & 64) {\n pausedQueueEffects.add(this);\n } else if (this.scheduler) {\n this.scheduler();\n } else {\n this.runIfDirty();\n }\n }\n /**\n * @internal\n */\n runIfDirty() {\n if (isDirty(this)) {\n this.run();\n }\n }\n get dirty() {\n return isDirty(this);\n }\n}\nlet batchDepth = 0;\nlet batchedSub;\nlet batchedComputed;\nfunction batch(sub, isComputed = false) {\n sub.flags |= 8;\n if (isComputed) {\n sub.next = batchedComputed;\n batchedComputed = sub;\n return;\n }\n sub.next = batchedSub;\n batchedSub = sub;\n}\nfunction startBatch() {\n batchDepth++;\n}\nfunction endBatch() {\n if (--batchDepth > 0) {\n return;\n }\n if (batchedComputed) {\n let e = batchedComputed;\n batchedComputed = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n e = next;\n }\n }\n let error;\n while (batchedSub) {\n let e = batchedSub;\n batchedSub = void 0;\n while (e) {\n const next = e.next;\n e.next = void 0;\n e.flags &= -9;\n if (e.flags & 1) {\n try {\n ;\n e.trigger();\n } catch (err) {\n if (!error) error = err;\n }\n }\n e = next;\n }\n }\n if (error) throw error;\n}\nfunction prepareDeps(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n link.version = -1;\n link.prevActiveLink = link.dep.activeLink;\n link.dep.activeLink = link;\n }\n}\nfunction cleanupDeps(sub) {\n let head;\n let tail = sub.depsTail;\n let link = tail;\n while (link) {\n const prev = link.prevDep;\n if (link.version === -1) {\n if (link === tail) tail = prev;\n removeSub(link);\n removeDep(link);\n } else {\n head = link;\n }\n link.dep.activeLink = link.prevActiveLink;\n link.prevActiveLink = void 0;\n link = prev;\n }\n sub.deps = head;\n sub.depsTail = tail;\n}\nfunction isDirty(sub) {\n for (let link = sub.deps; link; link = link.nextDep) {\n if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {\n return true;\n }\n }\n if (sub._dirty) {\n return true;\n }\n return false;\n}\nfunction refreshComputed(computed) {\n if (computed.flags & 4 && !(computed.flags & 16)) {\n return;\n }\n computed.flags &= -17;\n if (computed.globalVersion === globalVersion) {\n return;\n }\n computed.globalVersion = globalVersion;\n if (!computed.isSSR && computed.flags & 128 && (!computed.deps && !computed._dirty || !isDirty(computed))) {\n return;\n }\n computed.flags |= 2;\n const dep = computed.dep;\n const prevSub = activeSub;\n const prevShouldTrack = shouldTrack;\n activeSub = computed;\n shouldTrack = true;\n try {\n prepareDeps(computed);\n const value = computed.fn(computed._value);\n if (dep.version === 0 || hasChanged(value, computed._value)) {\n computed.flags |= 128;\n computed._value = value;\n dep.version++;\n }\n } catch (err) {\n dep.version++;\n throw err;\n } finally {\n activeSub = prevSub;\n shouldTrack = prevShouldTrack;\n cleanupDeps(computed);\n computed.flags &= -3;\n }\n}\nfunction removeSub(link, soft = false) {\n const { dep, prevSub, nextSub } = link;\n if (prevSub) {\n prevSub.nextSub = nextSub;\n link.prevSub = void 0;\n }\n if (nextSub) {\n nextSub.prevSub = prevSub;\n link.nextSub = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && dep.subsHead === link) {\n dep.subsHead = nextSub;\n }\n if (dep.subs === link) {\n dep.subs = prevSub;\n if (!prevSub && dep.computed) {\n dep.computed.flags &= -5;\n for (let l = dep.computed.deps; l; l = l.nextDep) {\n removeSub(l, true);\n }\n }\n }\n if (!soft && !--dep.sc && dep.map) {\n dep.map.delete(dep.key);\n }\n}\nfunction removeDep(link) {\n const { prevDep, nextDep } = link;\n if (prevDep) {\n prevDep.nextDep = nextDep;\n link.prevDep = void 0;\n }\n if (nextDep) {\n nextDep.prevDep = prevDep;\n link.nextDep = void 0;\n }\n}\nfunction effect(fn, options) {\n if (fn.effect instanceof ReactiveEffect) {\n fn = fn.effect.fn;\n }\n const e = new ReactiveEffect(fn);\n if (options) {\n extend(e, options);\n }\n try {\n e.run();\n } catch (err) {\n e.stop();\n throw err;\n }\n const runner = e.run.bind(e);\n runner.effect = e;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n}\nfunction onEffectCleanup(fn, failSilently = false) {\n if (activeSub instanceof ReactiveEffect) {\n activeSub.cleanup = fn;\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onEffectCleanup() was called when there was no active effect to associate with.`\n );\n }\n}\nfunction cleanupEffect(e) {\n const { cleanup } = e;\n e.cleanup = void 0;\n if (cleanup) {\n const prevSub = activeSub;\n activeSub = void 0;\n try {\n cleanup();\n } finally {\n activeSub = prevSub;\n }\n }\n}\n\nlet globalVersion = 0;\nclass Link {\n constructor(sub, dep) {\n this.sub = sub;\n this.dep = dep;\n this.version = dep.version;\n this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;\n }\n}\nclass Dep {\n // TODO isolatedDeclarations \"__v_skip\"\n constructor(computed) {\n this.computed = computed;\n this.version = 0;\n /**\n * Link between this dep and the current active effect\n */\n this.activeLink = void 0;\n /**\n * Doubly linked list representing the subscribing effects (tail)\n */\n this.subs = void 0;\n /**\n * For object property deps cleanup\n */\n this.map = void 0;\n this.key = void 0;\n /**\n * Subscriber counter\n */\n this.sc = 0;\n /**\n * @internal\n */\n this.__v_skip = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.subsHead = void 0;\n }\n }\n track(debugInfo) {\n if (!activeSub || !shouldTrack || activeSub === this.computed) {\n return;\n }\n let link = this.activeLink;\n if (link === void 0 || link.sub !== activeSub) {\n link = this.activeLink = new Link(activeSub, this);\n if (!activeSub.deps) {\n activeSub.deps = activeSub.depsTail = link;\n } else {\n link.prevDep = activeSub.depsTail;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n }\n addSub(link);\n } else if (link.version === -1) {\n link.version = this.version;\n if (link.nextDep) {\n const next = link.nextDep;\n next.prevDep = link.prevDep;\n if (link.prevDep) {\n link.prevDep.nextDep = next;\n }\n link.prevDep = activeSub.depsTail;\n link.nextDep = void 0;\n activeSub.depsTail.nextDep = link;\n activeSub.depsTail = link;\n if (activeSub.deps === link) {\n activeSub.deps = next;\n }\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && activeSub.onTrack) {\n activeSub.onTrack(\n extend(\n {\n effect: activeSub\n },\n debugInfo\n )\n );\n }\n return link;\n }\n trigger(debugInfo) {\n this.version++;\n globalVersion++;\n this.notify(debugInfo);\n }\n notify(debugInfo) {\n startBatch();\n try {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (let head = this.subsHead; head; head = head.nextSub) {\n if (head.sub.onTrigger && !(head.sub.flags & 8)) {\n head.sub.onTrigger(\n extend(\n {\n effect: head.sub\n },\n debugInfo\n )\n );\n }\n }\n }\n for (let link = this.subs; link; link = link.prevSub) {\n if (link.sub.notify()) {\n ;\n link.sub.dep.notify();\n }\n }\n } finally {\n endBatch();\n }\n }\n}\nfunction addSub(link) {\n link.dep.sc++;\n if (link.sub.flags & 4) {\n const computed = link.dep.computed;\n if (computed && !link.dep.subs) {\n computed.flags |= 4 | 16;\n for (let l = computed.deps; l; l = l.nextDep) {\n addSub(l);\n }\n }\n const currentTail = link.dep.subs;\n if (currentTail !== link) {\n link.prevSub = currentTail;\n if (currentTail) currentTail.nextSub = link;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && link.dep.subsHead === void 0) {\n link.dep.subsHead = link;\n }\n link.dep.subs = link;\n }\n}\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Object iterate\" : \"\"\n);\nconst MAP_KEY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Map keys iterate\" : \"\"\n);\nconst ARRAY_ITERATE_KEY = /* @__PURE__ */ Symbol(\n !!(process.env.NODE_ENV !== \"production\") ? \"Array iterate\" : \"\"\n);\nfunction track(target, type, key) {\n if (shouldTrack && activeSub) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = new Dep());\n dep.map = depsMap;\n dep.key = key;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.track({\n target,\n type,\n key\n });\n } else {\n dep.track();\n }\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n globalVersion++;\n return;\n }\n const run = (dep) => {\n if (dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n dep.trigger({\n target,\n type,\n key,\n newValue,\n oldValue,\n oldTarget\n });\n } else {\n dep.trigger();\n }\n }\n };\n startBatch();\n if (type === \"clear\") {\n depsMap.forEach(run);\n } else {\n const targetIsArray = isArray(target);\n const isArrayIndex = targetIsArray && isIntegerKey(key);\n if (targetIsArray && key === \"length\") {\n const newLength = Number(newValue);\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) {\n run(dep);\n }\n });\n } else {\n if (key !== void 0 || depsMap.has(void 0)) {\n run(depsMap.get(key));\n }\n if (isArrayIndex) {\n run(depsMap.get(ARRAY_ITERATE_KEY));\n }\n switch (type) {\n case \"add\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (isArrayIndex) {\n run(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!targetIsArray) {\n run(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n run(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (isMap(target)) {\n run(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n }\n endBatch();\n}\nfunction getDepFromReactive(object, key) {\n const depMap = targetMap.get(object);\n return depMap && depMap.get(key);\n}\n\nfunction reactiveReadArray(array) {\n const raw = toRaw(array);\n if (raw === array) return raw;\n track(raw, \"iterate\", ARRAY_ITERATE_KEY);\n return isShallow(array) ? raw : raw.map(toReactive);\n}\nfunction shallowReadArray(arr) {\n track(arr = toRaw(arr), \"iterate\", ARRAY_ITERATE_KEY);\n return arr;\n}\nfunction toWrapped(target, item) {\n if (isReadonly(target)) {\n return isReactive(target) ? toReadonly(toReactive(item)) : toReadonly(item);\n }\n return toReactive(item);\n}\nconst arrayInstrumentations = {\n __proto__: null,\n [Symbol.iterator]() {\n return iterator(this, Symbol.iterator, (item) => toWrapped(this, item));\n },\n concat(...args) {\n return reactiveReadArray(this).concat(\n ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x)\n );\n },\n entries() {\n return iterator(this, \"entries\", (value) => {\n value[1] = toWrapped(this, value[1]);\n return value;\n });\n },\n every(fn, thisArg) {\n return apply(this, \"every\", fn, thisArg, void 0, arguments);\n },\n filter(fn, thisArg) {\n return apply(\n this,\n \"filter\",\n fn,\n thisArg,\n (v) => v.map((item) => toWrapped(this, item)),\n arguments\n );\n },\n find(fn, thisArg) {\n return apply(\n this,\n \"find\",\n fn,\n thisArg,\n (item) => toWrapped(this, item),\n arguments\n );\n },\n findIndex(fn, thisArg) {\n return apply(this, \"findIndex\", fn, thisArg, void 0, arguments);\n },\n findLast(fn, thisArg) {\n return apply(\n this,\n \"findLast\",\n fn,\n thisArg,\n (item) => toWrapped(this, item),\n arguments\n );\n },\n findLastIndex(fn, thisArg) {\n return apply(this, \"findLastIndex\", fn, thisArg, void 0, arguments);\n },\n // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement\n forEach(fn, thisArg) {\n return apply(this, \"forEach\", fn, thisArg, void 0, arguments);\n },\n includes(...args) {\n return searchProxy(this, \"includes\", args);\n },\n indexOf(...args) {\n return searchProxy(this, \"indexOf\", args);\n },\n join(separator) {\n return reactiveReadArray(this).join(separator);\n },\n // keys() iterator only reads `length`, no optimization required\n lastIndexOf(...args) {\n return searchProxy(this, \"lastIndexOf\", args);\n },\n map(fn, thisArg) {\n return apply(this, \"map\", fn, thisArg, void 0, arguments);\n },\n pop() {\n return noTracking(this, \"pop\");\n },\n push(...args) {\n return noTracking(this, \"push\", args);\n },\n reduce(fn, ...args) {\n return reduce(this, \"reduce\", fn, args);\n },\n reduceRight(fn, ...args) {\n return reduce(this, \"reduceRight\", fn, args);\n },\n shift() {\n return noTracking(this, \"shift\");\n },\n // slice could use ARRAY_ITERATE but also seems to beg for range tracking\n some(fn, thisArg) {\n return apply(this, \"some\", fn, thisArg, void 0, arguments);\n },\n splice(...args) {\n return noTracking(this, \"splice\", args);\n },\n toReversed() {\n return reactiveReadArray(this).toReversed();\n },\n toSorted(comparer) {\n return reactiveReadArray(this).toSorted(comparer);\n },\n toSpliced(...args) {\n return reactiveReadArray(this).toSpliced(...args);\n },\n unshift(...args) {\n return noTracking(this, \"unshift\", args);\n },\n values() {\n return iterator(this, \"values\", (item) => toWrapped(this, item));\n }\n};\nfunction iterator(self, method, wrapValue) {\n const arr = shallowReadArray(self);\n const iter = arr[method]();\n if (arr !== self && !isShallow(self)) {\n iter._next = iter.next;\n iter.next = () => {\n const result = iter._next();\n if (!result.done) {\n result.value = wrapValue(result.value);\n }\n return result;\n };\n }\n return iter;\n}\nconst arrayProto = Array.prototype;\nfunction apply(self, method, fn, thisArg, wrappedRetFn, args) {\n const arr = shallowReadArray(self);\n const needsWrap = arr !== self && !isShallow(self);\n const methodFn = arr[method];\n if (methodFn !== arrayProto[method]) {\n const result2 = methodFn.apply(self, args);\n return needsWrap ? toReactive(result2) : result2;\n }\n let wrappedFn = fn;\n if (arr !== self) {\n if (needsWrap) {\n wrappedFn = function(item, index) {\n return fn.call(this, toWrapped(self, item), index, self);\n };\n } else if (fn.length > 2) {\n wrappedFn = function(item, index) {\n return fn.call(this, item, index, self);\n };\n }\n }\n const result = methodFn.call(arr, wrappedFn, thisArg);\n return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;\n}\nfunction reduce(self, method, fn, args) {\n const arr = shallowReadArray(self);\n const needsWrap = arr !== self && !isShallow(self);\n let wrappedFn = fn;\n let wrapInitialAccumulator = false;\n if (arr !== self) {\n if (needsWrap) {\n wrapInitialAccumulator = args.length === 0;\n wrappedFn = function(acc, item, index) {\n if (wrapInitialAccumulator) {\n wrapInitialAccumulator = false;\n acc = toWrapped(self, acc);\n }\n return fn.call(this, acc, toWrapped(self, item), index, self);\n };\n } else if (fn.length > 3) {\n wrappedFn = function(acc, item, index) {\n return fn.call(this, acc, item, index, self);\n };\n }\n }\n const result = arr[method](wrappedFn, ...args);\n return wrapInitialAccumulator ? toWrapped(self, result) : result;\n}\nfunction searchProxy(self, method, args) {\n const arr = toRaw(self);\n track(arr, \"iterate\", ARRAY_ITERATE_KEY);\n const res = arr[method](...args);\n if ((res === -1 || res === false) && isProxy(args[0])) {\n args[0] = toRaw(args[0]);\n return arr[method](...args);\n }\n return res;\n}\nfunction noTracking(self, method, args = []) {\n pauseTracking();\n startBatch();\n const res = toRaw(self)[method].apply(self, args);\n endBatch();\n resetTracking();\n return res;\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nfunction hasOwnProperty(key) {\n if (!isSymbol(key)) key = String(key);\n const obj = toRaw(this);\n track(obj, \"has\", key);\n return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n constructor(_isReadonly = false, _isShallow = false) {\n this._isReadonly = _isReadonly;\n this._isShallow = _isShallow;\n }\n get(target, key, receiver) {\n if (key === \"__v_skip\") return target[\"__v_skip\"];\n const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_isShallow\") {\n return isShallow2;\n } else if (key === \"__v_raw\") {\n if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n // this means the receiver is a user proxy of the reactive proxy\n Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n return target;\n }\n return;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly2) {\n let fn;\n if (targetIsArray && (fn = arrayInstrumentations[key])) {\n return fn;\n }\n if (key === \"hasOwnProperty\") {\n return hasOwnProperty;\n }\n }\n const res = Reflect.get(\n target,\n key,\n // if this is a proxy wrapping a ref, return methods using the raw ref\n // as receiver so that we don't have to call `toRaw` on the ref in all\n // its class methods\n isRef(target) ? target : receiver\n );\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly2) {\n track(target, \"get\", key);\n }\n if (isShallow2) {\n return res;\n }\n if (isRef(res)) {\n const value = targetIsArray && isIntegerKey(key) ? res : res.value;\n return isReadonly2 && isObject(value) ? readonly(value) : value;\n }\n if (isObject(res)) {\n return isReadonly2 ? readonly(res) : reactive(res);\n }\n return res;\n }\n}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(false, isShallow2);\n }\n set(target, key, value, receiver) {\n let oldValue = target[key];\n const isArrayWithIntegerKey = isArray(target) && isIntegerKey(key);\n if (!this._isShallow) {\n const isOldValueReadonly = isReadonly(oldValue);\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!isArrayWithIntegerKey && isRef(oldValue) && !isRef(value)) {\n if (isOldValueReadonly) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target[key]\n );\n }\n return true;\n } else {\n oldValue.value = value;\n return true;\n }\n }\n }\n const hadKey = isArrayWithIntegerKey ? Number(key) < target.length : hasOwn(target, key);\n const result = Reflect.set(\n target,\n key,\n value,\n isRef(target) ? target : receiver\n );\n if (target === toRaw(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n }\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n }\n has(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n }\n ownKeys(target) {\n track(\n target,\n \"iterate\",\n isArray(target) ? \"length\" : ITERATE_KEY\n );\n return Reflect.ownKeys(target);\n }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n constructor(isShallow2 = false) {\n super(true, isShallow2);\n }\n set(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n deleteProperty(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n}\nconst mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction createIterableMethod(method, isReadonly2, isShallow2) {\n return function(...args) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n !isReadonly2 && track(\n rawTarget,\n \"iterate\",\n isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n );\n return extend(\n // inheriting all iterator properties\n Object.create(innerIterator),\n {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done ? { value, done } : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n }\n }\n );\n };\n}\nfunction createReadonlyMethod(type) {\n return function(...args) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n warn(\n `${capitalize(type)} operation ${key}failed: target is readonly.`,\n toRaw(this)\n );\n }\n return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n };\n}\nfunction createInstrumentations(readonly, shallow) {\n const instrumentations = {\n get(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"get\", key);\n }\n track(rawTarget, \"get\", rawKey);\n }\n const { has } = getProto(rawTarget);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n if (has.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n },\n get size() {\n const target = this[\"__v_raw\"];\n !readonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n return target.size;\n },\n has(key) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!readonly) {\n if (hasChanged(key, rawKey)) {\n track(rawTarget, \"has\", key);\n }\n track(rawTarget, \"has\", rawKey);\n }\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n },\n forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n !readonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n }\n };\n extend(\n instrumentations,\n readonly ? {\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\")\n } : {\n add(value) {\n const target = toRaw(this);\n const proto = getProto(target);\n const rawValue = toRaw(value);\n const valueToAdd = !shallow && !isShallow(value) && !isReadonly(value) ? rawValue : value;\n const hadKey = proto.has.call(target, valueToAdd) || hasChanged(value, valueToAdd) && proto.has.call(target, value) || hasChanged(rawValue, valueToAdd) && proto.has.call(target, rawValue);\n if (!hadKey) {\n target.add(valueToAdd);\n trigger(target, \"add\", valueToAdd, valueToAdd);\n }\n return this;\n },\n set(key, value) {\n if (!shallow && !isShallow(value) && !isReadonly(value)) {\n value = toRaw(value);\n }\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n },\n delete(key) {\n const target = toRaw(this);\n const { has, get } = getProto(target);\n let hadKey = has.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has, key);\n }\n const oldValue = get ? get.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n },\n clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = !!(process.env.NODE_ENV !== \"production\") ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n const result = target.clear();\n if (hadItems) {\n trigger(\n target,\n \"clear\",\n void 0,\n void 0,\n oldTarget\n );\n }\n return result;\n }\n }\n );\n const iteratorMethods = [\n \"keys\",\n \"values\",\n \"entries\",\n Symbol.iterator\n ];\n iteratorMethods.forEach((method) => {\n instrumentations[method] = createIterableMethod(method, readonly, shallow);\n });\n return instrumentations;\n}\nfunction createInstrumentationGetter(isReadonly2, shallow) {\n const instrumentations = createInstrumentations(isReadonly2, shallow);\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(\n hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n key,\n receiver\n );\n };\n}\nconst mutableCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has.call(target, rawKey)) {\n const type = toRawType(target);\n warn(\n `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n );\n }\n}\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1 /* COMMON */;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2 /* COLLECTION */;\n default:\n return 0 /* INVALID */;\n }\n}\nfunction getTargetType(value) {\n return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value));\n}\n// @__NO_SIDE_EFFECTS__\nfunction reactive(target) {\n if (/* @__PURE__ */ isReadonly(target)) {\n return target;\n }\n return createReactiveObject(\n target,\n false,\n mutableHandlers,\n mutableCollectionHandlers,\n reactiveMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowReactive(target) {\n return createReactiveObject(\n target,\n false,\n shallowReactiveHandlers,\n shallowCollectionHandlers,\n shallowReactiveMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction readonly(target) {\n return createReactiveObject(\n target,\n true,\n readonlyHandlers,\n readonlyCollectionHandlers,\n readonlyMap\n );\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowReadonly(target) {\n return createReactiveObject(\n target,\n true,\n shallowReadonlyHandlers,\n shallowReadonlyCollectionHandlers,\n shallowReadonlyMap\n );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `value cannot be made ${isReadonly2 ? \"readonly\" : \"reactive\"}: ${String(\n target\n )}`\n );\n }\n return target;\n }\n if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n return target;\n }\n const targetType = getTargetType(target);\n if (targetType === 0 /* INVALID */) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const proxy = new Proxy(\n target,\n targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n );\n proxyMap.set(target, proxy);\n return proxy;\n}\n// @__NO_SIDE_EFFECTS__\nfunction isReactive(value) {\n if (/* @__PURE__ */ isReadonly(value)) {\n return /* @__PURE__ */ isReactive(value[\"__v_raw\"]);\n }\n return !!(value && value[\"__v_isReactive\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\"]);\n}\n// @__NO_SIDE_EFFECTS__\nfunction isProxy(value) {\n return value ? !!value[\"__v_raw\"] : false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\"];\n return raw ? /* @__PURE__ */ toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n if (!hasOwn(value, \"__v_skip\") && Object.isExtensible(value)) {\n def(value, \"__v_skip\", true);\n }\n return value;\n}\nconst toReactive = (value) => isObject(value) ? /* @__PURE__ */ reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? /* @__PURE__ */ readonly(value) : value;\n\n// @__NO_SIDE_EFFECTS__\nfunction isRef(r) {\n return r ? r[\"__v_isRef\"] === true : false;\n}\n// @__NO_SIDE_EFFECTS__\nfunction ref(value) {\n return createRef(value, false);\n}\n// @__NO_SIDE_EFFECTS__\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (/* @__PURE__ */ isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, isShallow2) {\n this.dep = new Dep();\n this[\"__v_isRef\"] = true;\n this[\"__v_isShallow\"] = false;\n this._rawValue = isShallow2 ? value : toRaw(value);\n this._value = isShallow2 ? value : toReactive(value);\n this[\"__v_isShallow\"] = isShallow2;\n }\n get value() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n });\n } else {\n this.dep.track();\n }\n return this._value;\n }\n set value(newValue) {\n const oldValue = this._rawValue;\n const useDirectValue = this[\"__v_isShallow\"] || isShallow(newValue) || isReadonly(newValue);\n newValue = useDirectValue ? newValue : toRaw(newValue);\n if (hasChanged(newValue, oldValue)) {\n this._rawValue = newValue;\n this._value = useDirectValue ? newValue : toReactive(newValue);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this.dep.trigger({\n target: this,\n type: \"set\",\n key: \"value\",\n newValue,\n oldValue\n });\n } else {\n this.dep.trigger();\n }\n }\n }\n}\nfunction triggerRef(ref2) {\n if (ref2.dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n ref2.dep.trigger({\n target: ref2,\n type: \"set\",\n key: \"value\",\n newValue: ref2._value\n });\n } else {\n ref2.dep.trigger();\n }\n }\n}\nfunction unref(ref2) {\n return /* @__PURE__ */ isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n return isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => key === \"__v_raw\" ? target : unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (/* @__PURE__ */ isRef(oldValue) && !/* @__PURE__ */ isRef(value)) {\n oldValue.value = value;\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n const dep = this.dep = new Dep();\n const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep));\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._value = this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRefs(object) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isProxy(object)) {\n warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = propertyToRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, key, _defaultValue) {\n this._object = _object;\n this._defaultValue = _defaultValue;\n this[\"__v_isRef\"] = true;\n this._value = void 0;\n this._key = isSymbol(key) ? key : String(key);\n this._raw = toRaw(_object);\n let shallow = true;\n let obj = _object;\n if (!isArray(_object) || isSymbol(this._key) || !isIntegerKey(this._key)) {\n do {\n shallow = !isProxy(obj) || isShallow(obj);\n } while (shallow && (obj = obj[\"__v_raw\"]));\n }\n this._shallow = shallow;\n }\n get value() {\n let val = this._object[this._key];\n if (this._shallow) {\n val = unref(val);\n }\n return this._value = val === void 0 ? this._defaultValue : val;\n }\n set value(newVal) {\n if (this._shallow && /* @__PURE__ */ isRef(this._raw[this._key])) {\n const nestedRef = this._object[this._key];\n if (/* @__PURE__ */ isRef(nestedRef)) {\n nestedRef.value = newVal;\n return;\n }\n }\n this._object[this._key] = newVal;\n }\n get dep() {\n return getDepFromReactive(this._raw, this._key);\n }\n}\nclass GetterRefImpl {\n constructor(_getter) {\n this._getter = _getter;\n this[\"__v_isRef\"] = true;\n this[\"__v_isReadonly\"] = true;\n this._value = void 0;\n }\n get value() {\n return this._value = this._getter();\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction toRef(source, key, defaultValue) {\n if (/* @__PURE__ */ isRef(source)) {\n return source;\n } else if (isFunction(source)) {\n return new GetterRefImpl(source);\n } else if (isObject(source) && arguments.length > 1) {\n return propertyToRef(source, key, defaultValue);\n } else {\n return /* @__PURE__ */ ref(source);\n }\n}\nfunction propertyToRef(source, key, defaultValue) {\n return new ObjectRefImpl(source, key, defaultValue);\n}\n\nclass ComputedRefImpl {\n constructor(fn, setter, isSSR) {\n this.fn = fn;\n this.setter = setter;\n /**\n * @internal\n */\n this._value = void 0;\n /**\n * @internal\n */\n this.dep = new Dep(this);\n /**\n * @internal\n */\n this.__v_isRef = true;\n // TODO isolatedDeclarations \"__v_isReadonly\"\n // A computed is also a subscriber that tracks other deps\n /**\n * @internal\n */\n this.deps = void 0;\n /**\n * @internal\n */\n this.depsTail = void 0;\n /**\n * @internal\n */\n this.flags = 16;\n /**\n * @internal\n */\n this.globalVersion = globalVersion - 1;\n /**\n * @internal\n */\n this.next = void 0;\n // for backwards compat\n this.effect = this;\n this[\"__v_isReadonly\"] = !setter;\n this.isSSR = isSSR;\n }\n /**\n * @internal\n */\n notify() {\n this.flags |= 16;\n if (!(this.flags & 8) && // avoid infinite self recursion\n activeSub !== this) {\n batch(this, true);\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) ;\n }\n get value() {\n const link = !!(process.env.NODE_ENV !== \"production\") ? this.dep.track({\n target: this,\n type: \"get\",\n key: \"value\"\n }) : this.dep.track();\n refreshComputed(this);\n if (link) {\n link.version = this.dep.version;\n }\n return this._value;\n }\n set value(newValue) {\n if (this.setter) {\n this.setter(newValue);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\"Write operation failed: computed value is readonly\");\n }\n }\n}\n// @__NO_SIDE_EFFECTS__\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n if (isFunction(getterOrOptions)) {\n getter = getterOrOptions;\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, isSSR);\n if (!!(process.env.NODE_ENV !== \"production\") && debugOptions && !isSSR) {\n cRef.onTrack = debugOptions.onTrack;\n cRef.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nconst TrackOpTypes = {\n \"GET\": \"get\",\n \"HAS\": \"has\",\n \"ITERATE\": \"iterate\"\n};\nconst TriggerOpTypes = {\n \"SET\": \"set\",\n \"ADD\": \"add\",\n \"DELETE\": \"delete\",\n \"CLEAR\": \"clear\"\n};\nconst ReactiveFlags = {\n \"SKIP\": \"__v_skip\",\n \"IS_REACTIVE\": \"__v_isReactive\",\n \"IS_READONLY\": \"__v_isReadonly\",\n \"IS_SHALLOW\": \"__v_isShallow\",\n \"RAW\": \"__v_raw\",\n \"IS_REF\": \"__v_isRef\"\n};\n\nconst WatchErrorCodes = {\n \"WATCH_GETTER\": 2,\n \"2\": \"WATCH_GETTER\",\n \"WATCH_CALLBACK\": 3,\n \"3\": \"WATCH_CALLBACK\",\n \"WATCH_CLEANUP\": 4,\n \"4\": \"WATCH_CLEANUP\"\n};\nconst INITIAL_WATCHER_VALUE = {};\nconst cleanupMap = /* @__PURE__ */ new WeakMap();\nlet activeWatcher = void 0;\nfunction getCurrentWatcher() {\n return activeWatcher;\n}\nfunction onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {\n if (owner) {\n let cleanups = cleanupMap.get(owner);\n if (!cleanups) cleanupMap.set(owner, cleanups = []);\n cleanups.push(cleanupFn);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !failSilently) {\n warn(\n `onWatcherCleanup() was called when there was no active watcher to associate with.`\n );\n }\n}\nfunction watch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, once, scheduler, augmentJob, call } = options;\n const warnInvalidSource = (s) => {\n (options.onWarn || warn)(\n `Invalid watch source: `,\n s,\n `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`\n );\n };\n const reactiveGetter = (source2) => {\n if (deep) return source2;\n if (isShallow(source2) || deep === false || deep === 0)\n return traverse(source2, 1);\n return traverse(source2);\n };\n let effect;\n let getter;\n let cleanup;\n let boundCleanup;\n let forceTrigger = false;\n let isMultiSource = false;\n if (isRef(source)) {\n getter = () => source.value;\n forceTrigger = isShallow(source);\n } else if (isReactive(source)) {\n getter = () => reactiveGetter(source);\n forceTrigger = true;\n } else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n getter = () => source.map((s) => {\n if (isRef(s)) {\n return s.value;\n } else if (isReactive(s)) {\n return reactiveGetter(s);\n } else if (isFunction(s)) {\n return call ? call(s, 2) : s();\n } else {\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(s);\n }\n });\n } else if (isFunction(source)) {\n if (cb) {\n getter = call ? () => call(source, 2) : source;\n } else {\n getter = () => {\n if (cleanup) {\n pauseTracking();\n try {\n cleanup();\n } finally {\n resetTracking();\n }\n }\n const currentEffect = activeWatcher;\n activeWatcher = effect;\n try {\n return call ? call(source, 3, [boundCleanup]) : source(boundCleanup);\n } finally {\n activeWatcher = currentEffect;\n }\n };\n }\n } else {\n getter = NOOP;\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n const depth = deep === true ? Infinity : deep;\n getter = () => traverse(baseGetter(), depth);\n }\n const scope = getCurrentScope();\n const watchHandle = () => {\n effect.stop();\n if (scope && scope.active) {\n remove(scope.effects, effect);\n }\n };\n if (once && cb) {\n const _cb = cb;\n cb = (...args) => {\n _cb(...args);\n watchHandle();\n };\n }\n let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n const job = (immediateFirstRun) => {\n if (!(effect.flags & 1) || !effect.dirty && !immediateFirstRun) {\n return;\n }\n if (cb) {\n const newValue = effect.run();\n if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) {\n if (cleanup) {\n cleanup();\n }\n const currentWatcher = activeWatcher;\n activeWatcher = effect;\n try {\n const args = [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n boundCleanup\n ];\n oldValue = newValue;\n call ? call(cb, 3, args) : (\n // @ts-expect-error\n cb(...args)\n );\n } finally {\n activeWatcher = currentWatcher;\n }\n }\n } else {\n effect.run();\n }\n };\n if (augmentJob) {\n augmentJob(job);\n }\n effect = new ReactiveEffect(getter);\n effect.scheduler = scheduler ? () => scheduler(job, false) : job;\n boundCleanup = (fn) => onWatcherCleanup(fn, false, effect);\n cleanup = effect.onStop = () => {\n const cleanups = cleanupMap.get(effect);\n if (cleanups) {\n if (call) {\n call(cleanups, 4);\n } else {\n for (const cleanup2 of cleanups) cleanup2();\n }\n cleanupMap.delete(effect);\n }\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = options.onTrack;\n effect.onTrigger = options.onTrigger;\n }\n if (cb) {\n if (immediate) {\n job(true);\n } else {\n oldValue = effect.run();\n }\n } else if (scheduler) {\n scheduler(job.bind(null, true), true);\n } else {\n effect.run();\n }\n watchHandle.pause = effect.pause.bind(effect);\n watchHandle.resume = effect.resume.bind(effect);\n watchHandle.stop = watchHandle;\n return watchHandle;\n}\nfunction traverse(value, depth = Infinity, seen) {\n if (depth <= 0 || !isObject(value) || value[\"__v_skip\"]) {\n return value;\n }\n seen = seen || /* @__PURE__ */ new Map();\n if ((seen.get(value) || 0) >= depth) {\n return value;\n }\n seen.set(value, depth);\n depth--;\n if (isRef(value)) {\n traverse(value.value, depth, seen);\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], depth, seen);\n }\n } else if (isSet(value) || isMap(value)) {\n value.forEach((v) => {\n traverse(v, depth, seen);\n });\n } else if (isPlainObject(value)) {\n for (const key in value) {\n traverse(value[key], depth, seen);\n }\n for (const key of Object.getOwnPropertySymbols(value)) {\n if (Object.prototype.propertyIsEnumerable.call(value, key)) {\n traverse(value[key], depth, seen);\n }\n }\n }\n return value;\n}\n\nexport { ARRAY_ITERATE_KEY, EffectFlags, EffectScope, ITERATE_KEY, MAP_KEY_ITERATE_KEY, ReactiveEffect, ReactiveFlags, TrackOpTypes, TriggerOpTypes, WatchErrorCodes, computed, customRef, effect, effectScope, enableTracking, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onEffectCleanup, onScopeDispose, onWatcherCleanup, pauseTracking, proxyRefs, reactive, reactiveReadArray, readonly, ref, resetTracking, shallowReactive, shallowReadArray, shallowReadonly, shallowRef, stop, toRaw, toReactive, toReadonly, toRef, toRefs, toValue, track, traverse, trigger, triggerRef, unref, watch };\n","/**\n* @vue/runtime-core v3.5.34\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { pauseTracking, resetTracking, isRef, toRaw, traverse, watch as watch$1, shallowRef, readonly, isReactive, ref, isShallow, isReadonly, shallowReadArray, toReadonly, toReactive, shallowReadonly, track, reactive, customRef, shallowReactive, trigger, ReactiveEffect, isProxy, proxyRefs, markRaw, EffectScope, computed as computed$1 } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, TrackOpTypes, TriggerOpTypes, customRef, effect, effectScope, getCurrentScope, getCurrentWatcher, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, onWatcherCleanup, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, triggerRef, unref } from '@vue/reactivity';\nimport { isString, isFunction, EMPTY_OBJ, isPromise, isArray, NOOP, getGlobalThis, extend, isBuiltInDirective, NO, hasOwn, remove, def, isOn, isReservedProp, normalizeClass, stringifyStyle, normalizeStyle, isKnownSvgAttr, isBooleanAttr, isKnownHtmlAttr, includeBooleanAttr, isRenderableAttrValue, normalizeCssVarValue, getEscapedCssVarName, isObject, isRegExp, invokeArrayFns, toHandlerKey, camelize, capitalize, isSymbol, isGloballyAllowed, hyphenate, hasChanged, looseToNumber, isModelListener, looseEqual, EMPTY_ARR, toRawType, makeMap, toNumber } from '@vue/shared';\nexport { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n stack.push(vnode);\n}\nfunction popWarningContext() {\n stack.pop();\n}\nlet isWarning = false;\nfunction warn$1(msg, ...args) {\n if (isWarning) return;\n isWarning = true;\n pauseTracking();\n const instance = stack.length ? stack[stack.length - 1].component : null;\n const appWarnHandler = instance && instance.appContext.config.warnHandler;\n const trace = getComponentTrace();\n if (appWarnHandler) {\n callWithErrorHandling(\n appWarnHandler,\n instance,\n 11,\n [\n // eslint-disable-next-line no-restricted-syntax\n msg + args.map((a) => {\n var _a, _b;\n return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);\n }).join(\"\"),\n instance && instance.proxy,\n trace.map(\n ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`\n ).join(\"\\n\"),\n trace\n ]\n );\n } else {\n const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n if (trace.length && // avoid spamming console during tests\n true) {\n warnArgs.push(`\n`, ...formatTrace(trace));\n }\n console.warn(...warnArgs);\n }\n resetTracking();\n isWarning = false;\n}\nfunction getComponentTrace() {\n let currentVNode = stack[stack.length - 1];\n if (!currentVNode) {\n return [];\n }\n const normalizedStack = [];\n while (currentVNode) {\n const last = normalizedStack[0];\n if (last && last.vnode === currentVNode) {\n last.recurseCount++;\n } else {\n normalizedStack.push({\n vnode: currentVNode,\n recurseCount: 0\n });\n }\n const parentInstance = currentVNode.component && currentVNode.component.parent;\n currentVNode = parentInstance && parentInstance.vnode;\n }\n return normalizedStack;\n}\nfunction formatTrace(trace) {\n const logs = [];\n trace.forEach((entry, i) => {\n logs.push(...i === 0 ? [] : [`\n`], ...formatTraceEntry(entry));\n });\n return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n const isRoot = vnode.component ? vnode.component.parent == null : false;\n const open = ` at <${formatComponentName(\n vnode.component,\n vnode.type,\n isRoot\n )}`;\n const close = `>` + postfix;\n return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];\n}\nfunction formatProps(props) {\n const res = [];\n const keys = Object.keys(props);\n keys.slice(0, 3).forEach((key) => {\n res.push(...formatProp(key, props[key]));\n });\n if (keys.length > 3) {\n res.push(` ...`);\n }\n return res;\n}\nfunction formatProp(key, value, raw) {\n if (isString(value)) {\n value = JSON.stringify(value);\n return raw ? value : [`${key}=${value}`];\n } else if (typeof value === \"number\" || typeof value === \"boolean\" || value == null) {\n return raw ? value : [`${key}=${value}`];\n } else if (isRef(value)) {\n value = formatProp(key, toRaw(value.value), true);\n return raw ? value : [`${key}=Ref<`, value, `>`];\n } else if (isFunction(value)) {\n return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n } else {\n value = toRaw(value);\n return raw ? value : [`${key}=`, value];\n }\n}\nfunction assertNumber(val, type) {\n if (!!!(process.env.NODE_ENV !== \"production\")) return;\n if (val === void 0) {\n return;\n } else if (typeof val !== \"number\") {\n warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`);\n } else if (isNaN(val)) {\n warn$1(`${type} is NaN - the duration expression might be incorrect.`);\n }\n}\n\nconst ErrorCodes = {\n \"SETUP_FUNCTION\": 0,\n \"0\": \"SETUP_FUNCTION\",\n \"RENDER_FUNCTION\": 1,\n \"1\": \"RENDER_FUNCTION\",\n \"NATIVE_EVENT_HANDLER\": 5,\n \"5\": \"NATIVE_EVENT_HANDLER\",\n \"COMPONENT_EVENT_HANDLER\": 6,\n \"6\": \"COMPONENT_EVENT_HANDLER\",\n \"VNODE_HOOK\": 7,\n \"7\": \"VNODE_HOOK\",\n \"DIRECTIVE_HOOK\": 8,\n \"8\": \"DIRECTIVE_HOOK\",\n \"TRANSITION_HOOK\": 9,\n \"9\": \"TRANSITION_HOOK\",\n \"APP_ERROR_HANDLER\": 10,\n \"10\": \"APP_ERROR_HANDLER\",\n \"APP_WARN_HANDLER\": 11,\n \"11\": \"APP_WARN_HANDLER\",\n \"FUNCTION_REF\": 12,\n \"12\": \"FUNCTION_REF\",\n \"ASYNC_COMPONENT_LOADER\": 13,\n \"13\": \"ASYNC_COMPONENT_LOADER\",\n \"SCHEDULER\": 14,\n \"14\": \"SCHEDULER\",\n \"COMPONENT_UPDATE\": 15,\n \"15\": \"COMPONENT_UPDATE\",\n \"APP_UNMOUNT_CLEANUP\": 16,\n \"16\": \"APP_UNMOUNT_CLEANUP\"\n};\nconst ErrorTypeStrings$1 = {\n [\"sp\"]: \"serverPrefetch hook\",\n [\"bc\"]: \"beforeCreate hook\",\n [\"c\"]: \"created hook\",\n [\"bm\"]: \"beforeMount hook\",\n [\"m\"]: \"mounted hook\",\n [\"bu\"]: \"beforeUpdate hook\",\n [\"u\"]: \"updated\",\n [\"bum\"]: \"beforeUnmount hook\",\n [\"um\"]: \"unmounted hook\",\n [\"a\"]: \"activated hook\",\n [\"da\"]: \"deactivated hook\",\n [\"ec\"]: \"errorCaptured hook\",\n [\"rtc\"]: \"renderTracked hook\",\n [\"rtg\"]: \"renderTriggered hook\",\n [0]: \"setup function\",\n [1]: \"render function\",\n [2]: \"watcher getter\",\n [3]: \"watcher callback\",\n [4]: \"watcher cleanup function\",\n [5]: \"native event handler\",\n [6]: \"component event handler\",\n [7]: \"vnode hook\",\n [8]: \"directive hook\",\n [9]: \"transition hook\",\n [10]: \"app errorHandler\",\n [11]: \"app warnHandler\",\n [12]: \"ref function\",\n [13]: \"async component loader\",\n [14]: \"scheduler flush\",\n [15]: \"component update\",\n [16]: \"app unmount cleanup function\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n try {\n return args ? fn(...args) : fn();\n } catch (err) {\n handleError(err, instance, type);\n }\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n if (isFunction(fn)) {\n const res = callWithErrorHandling(fn, instance, type, args);\n if (res && isPromise(res)) {\n res.catch((err) => {\n handleError(err, instance, type);\n });\n }\n return res;\n }\n if (isArray(fn)) {\n const values = [];\n for (let i = 0; i < fn.length; i++) {\n values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n }\n return values;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}`\n );\n }\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n const contextVNode = instance ? instance.vnode : null;\n const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ;\n if (instance) {\n let cur = instance.parent;\n const exposedInstance = instance.proxy;\n const errorInfo = !!(process.env.NODE_ENV !== \"production\") ? ErrorTypeStrings$1[type] : `https://vuejs.org/error-reference/#runtime-${type}`;\n while (cur) {\n const errorCapturedHooks = cur.ec;\n if (errorCapturedHooks) {\n for (let i = 0; i < errorCapturedHooks.length; i++) {\n if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n return;\n }\n }\n }\n cur = cur.parent;\n }\n if (errorHandler) {\n pauseTracking();\n callWithErrorHandling(errorHandler, null, 10, [\n err,\n exposedInstance,\n errorInfo\n ]);\n resetTracking();\n return;\n }\n }\n logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction);\n}\nfunction logError(err, type, contextVNode, throwInDev = true, throwInProd = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const info = ErrorTypeStrings$1[type];\n if (contextVNode) {\n pushWarningContext(contextVNode);\n }\n warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n if (contextVNode) {\n popWarningContext();\n }\n if (throwInDev) {\n throw err;\n } else {\n console.error(err);\n }\n } else if (throwInProd) {\n throw err;\n } else {\n console.error(err);\n }\n}\n\nconst queue = [];\nlet flushIndex = -1;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /* @__PURE__ */ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n const p = currentFlushPromise || resolvedPromise;\n return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\nfunction findInsertionIndex(id) {\n let start = flushIndex + 1;\n let end = queue.length;\n while (start < end) {\n const middle = start + end >>> 1;\n const middleJob = queue[middle];\n const middleJobId = getId(middleJob);\n if (middleJobId < id || middleJobId === id && middleJob.flags & 2) {\n start = middle + 1;\n } else {\n end = middle;\n }\n }\n return start;\n}\nfunction queueJob(job) {\n if (!(job.flags & 1)) {\n const jobId = getId(job);\n const lastJob = queue[queue.length - 1];\n if (!lastJob || // fast path when the job id is larger than the tail\n !(job.flags & 2) && jobId >= getId(lastJob)) {\n queue.push(job);\n } else {\n queue.splice(findInsertionIndex(jobId), 0, job);\n }\n job.flags |= 1;\n queueFlush();\n }\n}\nfunction queueFlush() {\n if (!currentFlushPromise) {\n currentFlushPromise = resolvedPromise.then(flushJobs);\n }\n}\nfunction queuePostFlushCb(cb) {\n if (!isArray(cb)) {\n if (activePostFlushCbs && cb.id === -1) {\n activePostFlushCbs.splice(postFlushIndex + 1, 0, cb);\n } else if (!(cb.flags & 1)) {\n pendingPostFlushCbs.push(cb);\n cb.flags |= 1;\n }\n } else {\n pendingPostFlushCbs.push(...cb);\n }\n queueFlush();\n}\nfunction flushPreFlushCbs(instance, seen, i = flushIndex + 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (; i < queue.length; i++) {\n const cb = queue[i];\n if (cb && cb.flags & 2) {\n if (instance && cb.id !== instance.uid) {\n continue;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n queue.splice(i, 1);\n i--;\n if (cb.flags & 4) {\n cb.flags &= -2;\n }\n cb();\n if (!(cb.flags & 4)) {\n cb.flags &= -2;\n }\n }\n }\n}\nfunction flushPostFlushCbs(seen) {\n if (pendingPostFlushCbs.length) {\n const deduped = [...new Set(pendingPostFlushCbs)].sort(\n (a, b) => getId(a) - getId(b)\n );\n pendingPostFlushCbs.length = 0;\n if (activePostFlushCbs) {\n activePostFlushCbs.push(...deduped);\n return;\n }\n activePostFlushCbs = deduped;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n const cb = activePostFlushCbs[postFlushIndex];\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n if (cb.flags & 4) {\n cb.flags &= -2;\n }\n if (!(cb.flags & 8)) cb();\n cb.flags &= -2;\n }\n activePostFlushCbs = null;\n postFlushIndex = 0;\n }\n}\nconst getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id;\nfunction flushJobs(seen) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n const check = !!(process.env.NODE_ENV !== \"production\") ? (job) => checkRecursiveUpdates(seen, job) : NOOP;\n try {\n for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job && !(job.flags & 8)) {\n if (!!(process.env.NODE_ENV !== \"production\") && check(job)) {\n continue;\n }\n if (job.flags & 4) {\n job.flags &= ~1;\n }\n callWithErrorHandling(\n job,\n job.i,\n job.i ? 15 : 14\n );\n if (!(job.flags & 4)) {\n job.flags &= ~1;\n }\n }\n }\n } finally {\n for (; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job) {\n job.flags &= -2;\n }\n }\n flushIndex = -1;\n queue.length = 0;\n flushPostFlushCbs(seen);\n currentFlushPromise = null;\n if (queue.length || pendingPostFlushCbs.length) {\n flushJobs(seen);\n }\n }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n const count = seen.get(fn) || 0;\n if (count > RECURSION_LIMIT) {\n const instance = fn.i;\n const componentName = instance && getComponentName(instance.type);\n handleError(\n `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,\n null,\n 10\n );\n return true;\n }\n seen.set(fn, count + 1);\n return false;\n}\n\nlet isHmrUpdating = false;\nconst setHmrUpdating = (v) => {\n try {\n return isHmrUpdating;\n } finally {\n isHmrUpdating = v;\n }\n};\nconst hmrDirtyComponents = /* @__PURE__ */ new Map();\nif (!!(process.env.NODE_ENV !== \"production\")) {\n getGlobalThis().__VUE_HMR_RUNTIME__ = {\n createRecord: tryWrap(createRecord),\n rerender: tryWrap(rerender),\n reload: tryWrap(reload)\n };\n}\nconst map = /* @__PURE__ */ new Map();\nfunction registerHMR(instance) {\n const id = instance.type.__hmrId;\n let record = map.get(id);\n if (!record) {\n createRecord(id, instance.type);\n record = map.get(id);\n }\n record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n if (map.has(id)) {\n return false;\n }\n map.set(id, {\n initialDef: normalizeClassComponent(initialDef),\n instances: /* @__PURE__ */ new Set()\n });\n return true;\n}\nfunction normalizeClassComponent(component) {\n return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n const record = map.get(id);\n if (!record) {\n return;\n }\n record.initialDef.render = newRender;\n [...record.instances].forEach((instance) => {\n if (newRender) {\n instance.render = newRender;\n normalizeClassComponent(instance.type).render = newRender;\n }\n instance.renderCache = [];\n isHmrUpdating = true;\n if (!(instance.job.flags & 8)) {\n instance.update();\n }\n isHmrUpdating = false;\n });\n}\nfunction reload(id, newComp) {\n const record = map.get(id);\n if (!record) return;\n newComp = normalizeClassComponent(newComp);\n updateComponentDef(record.initialDef, newComp);\n const instances = [...record.instances];\n for (let i = 0; i < instances.length; i++) {\n const instance = instances[i];\n const oldComp = normalizeClassComponent(instance.type);\n let dirtyInstances = hmrDirtyComponents.get(oldComp);\n if (!dirtyInstances) {\n if (oldComp !== record.initialDef) {\n updateComponentDef(oldComp, newComp);\n }\n hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set());\n }\n dirtyInstances.add(instance);\n instance.appContext.propsCache.delete(instance.type);\n instance.appContext.emitsCache.delete(instance.type);\n instance.appContext.optionsCache.delete(instance.type);\n if (instance.ceReload) {\n dirtyInstances.add(instance);\n instance.ceReload(newComp.styles);\n dirtyInstances.delete(instance);\n } else if (instance.parent) {\n queueJob(() => {\n if (!(instance.job.flags & 8)) {\n isHmrUpdating = true;\n instance.parent.update();\n isHmrUpdating = false;\n dirtyInstances.delete(instance);\n }\n });\n } else if (instance.appContext.reload) {\n instance.appContext.reload();\n } else if (typeof window !== \"undefined\") {\n window.location.reload();\n } else {\n console.warn(\n \"[HMR] Root or manually mounted instance modified. Full reload required.\"\n );\n }\n if (instance.root.ce && instance !== instance.root) {\n instance.root.ce._removeChildStyle(oldComp);\n }\n }\n queuePostFlushCb(() => {\n hmrDirtyComponents.clear();\n });\n}\nfunction updateComponentDef(oldComp, newComp) {\n extend(oldComp, newComp);\n for (const key in oldComp) {\n if (key !== \"__file\" && !(key in newComp)) {\n delete oldComp[key];\n }\n }\n}\nfunction tryWrap(fn) {\n return (id, arg) => {\n try {\n return fn(id, arg);\n } catch (e) {\n console.error(e);\n console.warn(\n `[HMR] Something went wrong during Vue component hot-reload. Full reload required.`\n );\n }\n };\n}\n\nlet devtools$1;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n if (devtools$1) {\n devtools$1.emit(event, ...args);\n } else if (!devtoolsNotInstalled) {\n buffer.push({ event, args });\n }\n}\nfunction setDevtoolsHook$1(hook, target) {\n var _a, _b;\n devtools$1 = hook;\n if (devtools$1) {\n devtools$1.enabled = true;\n buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args));\n buffer = [];\n } else if (\n // handle late devtools injection - only do this if we are in an actual\n // browser environment to avoid the timer handle stalling test runner exit\n // (#4815)\n typeof window !== \"undefined\" && // some envs mock window but not fully\n window.HTMLElement && // also exclude jsdom\n // eslint-disable-next-line no-restricted-syntax\n !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes(\"jsdom\"))\n ) {\n const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];\n replay.push((newHook) => {\n setDevtoolsHook$1(newHook, target);\n });\n setTimeout(() => {\n if (!devtools$1) {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n devtoolsNotInstalled = true;\n buffer = [];\n }\n }, 3e3);\n } else {\n devtoolsNotInstalled = true;\n buffer = [];\n }\n}\nfunction devtoolsInitApp(app, version) {\n emit$1(\"app:init\" /* APP_INIT */, app, version, {\n Fragment,\n Text,\n Comment,\n Static\n });\n}\nfunction devtoolsUnmountApp(app) {\n emit$1(\"app:unmount\" /* APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(\"component:added\" /* COMPONENT_ADDED */);\nconst devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(\"component:updated\" /* COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(\n \"component:removed\" /* COMPONENT_REMOVED */\n);\nconst devtoolsComponentRemoved = (component) => {\n if (devtools$1 && typeof devtools$1.cleanupBuffer === \"function\" && // remove the component if it wasn't buffered\n !devtools$1.cleanupBuffer(component)) {\n _devtoolsComponentRemoved(component);\n }\n};\n// @__NO_SIDE_EFFECTS__\nfunction createDevtoolsComponentHook(hook) {\n return (component) => {\n emit$1(\n hook,\n component.appContext.app,\n component.uid,\n component.parent ? component.parent.uid : void 0,\n component\n );\n };\n}\nconst devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:start\" /* PERFORMANCE_START */);\nconst devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(\"perf:end\" /* PERFORMANCE_END */);\nfunction createDevtoolsPerformanceHook(hook) {\n return (component, type, time) => {\n emit$1(hook, component.appContext.app, component.uid, component, type, time);\n };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n emit$1(\n \"component:emit\" /* COMPONENT_EMIT */,\n component.appContext.app,\n component,\n event,\n params\n );\n}\n\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\nfunction setCurrentRenderingInstance(instance) {\n const prev = currentRenderingInstance;\n currentRenderingInstance = instance;\n currentScopeId = instance && instance.type.__scopeId || null;\n return prev;\n}\nfunction pushScopeId(id) {\n currentScopeId = id;\n}\nfunction popScopeId() {\n currentScopeId = null;\n}\nconst withScopeId = (_id) => withCtx;\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {\n if (!ctx) return fn;\n if (fn._n) {\n return fn;\n }\n const renderFnWithContext = (...args) => {\n if (renderFnWithContext._d) {\n setBlockTracking(-1);\n }\n const prevInstance = setCurrentRenderingInstance(ctx);\n let res;\n try {\n res = fn(...args);\n } finally {\n setCurrentRenderingInstance(prevInstance);\n if (renderFnWithContext._d) {\n setBlockTracking(1);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(ctx);\n }\n return res;\n };\n renderFnWithContext._n = true;\n renderFnWithContext._c = true;\n renderFnWithContext._d = true;\n return renderFnWithContext;\n}\n\nfunction validateDirectiveName(name) {\n if (isBuiltInDirective(name)) {\n warn$1(\"Do not use built-in directive ids as custom directive id: \" + name);\n }\n}\nfunction withDirectives(vnode, directives) {\n if (currentRenderingInstance === null) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`withDirectives can only be used inside render functions.`);\n return vnode;\n }\n const instance = getComponentPublicInstance(currentRenderingInstance);\n const bindings = vnode.dirs || (vnode.dirs = []);\n for (let i = 0; i < directives.length; i++) {\n let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n if (dir) {\n if (isFunction(dir)) {\n dir = {\n mounted: dir,\n updated: dir\n };\n }\n if (dir.deep) {\n traverse(value);\n }\n bindings.push({\n dir,\n instance,\n value,\n oldValue: void 0,\n arg,\n modifiers\n });\n }\n }\n return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n const bindings = vnode.dirs;\n const oldBindings = prevVNode && prevVNode.dirs;\n for (let i = 0; i < bindings.length; i++) {\n const binding = bindings[i];\n if (oldBindings) {\n binding.oldValue = oldBindings[i].value;\n }\n let hook = binding.dir[name];\n if (hook) {\n pauseTracking();\n callWithAsyncErrorHandling(hook, instance, 8, [\n vnode.el,\n binding,\n vnode,\n prevVNode\n ]);\n resetTracking();\n }\n }\n}\n\nfunction provide(key, value) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!currentInstance || currentInstance.isMounted) {\n warn$1(`provide() can only be used inside setup().`);\n }\n }\n if (currentInstance) {\n let provides = currentInstance.provides;\n const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n if (parentProvides === provides) {\n provides = currentInstance.provides = Object.create(parentProvides);\n }\n provides[key] = value;\n }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\n const instance = getCurrentInstance();\n if (instance || currentApp) {\n let provides = currentApp ? currentApp._context.provides : instance ? instance.parent == null || instance.ce ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : void 0;\n if (provides && key in provides) {\n return provides[key];\n } else if (arguments.length > 1) {\n return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`injection \"${String(key)}\" not found.`);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`inject() can only be used inside setup() or functional components.`);\n }\n}\nfunction hasInjectionContext() {\n return !!(getCurrentInstance() || currentApp);\n}\n\nconst ssrContextKey = /* @__PURE__ */ Symbol.for(\"v-scx\");\nconst useSSRContext = () => {\n {\n const ctx = inject(ssrContextKey);\n if (!ctx) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build.`\n );\n }\n return ctx;\n }\n};\n\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"post\" }) : { flush: \"post\" }\n );\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"sync\" }) : { flush: \"sync\" }\n );\n}\nfunction watch(source, cb, options) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(cb)) {\n warn$1(\n `\\`watch(fn, options?)\\` signature has been moved to a separate API. Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only supports \\`watch(source, cb, options?) signature.`\n );\n }\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, options = EMPTY_OBJ) {\n const { immediate, deep, flush, once } = options;\n if (!!(process.env.NODE_ENV !== \"production\") && !cb) {\n if (immediate !== void 0) {\n warn$1(\n `watch() \"immediate\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (deep !== void 0) {\n warn$1(\n `watch() \"deep\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (once !== void 0) {\n warn$1(\n `watch() \"once\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n }\n const baseWatchOptions = extend({}, options);\n if (!!(process.env.NODE_ENV !== \"production\")) baseWatchOptions.onWarn = warn$1;\n const runsImmediately = cb && immediate || !cb && flush !== \"post\";\n let ssrCleanup;\n if (isInSSRComponentSetup) {\n if (flush === \"sync\") {\n const ctx = useSSRContext();\n ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);\n } else if (!runsImmediately) {\n const watchStopHandle = () => {\n };\n watchStopHandle.stop = NOOP;\n watchStopHandle.resume = NOOP;\n watchStopHandle.pause = NOOP;\n return watchStopHandle;\n }\n }\n const instance = currentInstance;\n baseWatchOptions.call = (fn, type, args) => callWithAsyncErrorHandling(fn, instance, type, args);\n let isPre = false;\n if (flush === \"post\") {\n baseWatchOptions.scheduler = (job) => {\n queuePostRenderEffect(job, instance && instance.suspense);\n };\n } else if (flush !== \"sync\") {\n isPre = true;\n baseWatchOptions.scheduler = (job, isFirstRun) => {\n if (isFirstRun) {\n job();\n } else {\n queueJob(job);\n }\n };\n }\n baseWatchOptions.augmentJob = (job) => {\n if (cb) {\n job.flags |= 4;\n }\n if (isPre) {\n job.flags |= 2;\n if (instance) {\n job.id = instance.uid;\n job.i = instance;\n }\n }\n };\n const watchHandle = watch$1(source, cb, baseWatchOptions);\n if (isInSSRComponentSetup) {\n if (ssrCleanup) {\n ssrCleanup.push(watchHandle);\n } else if (runsImmediately) {\n watchHandle();\n }\n }\n return watchHandle;\n}\nfunction instanceWatch(source, value, options) {\n const publicThis = this.proxy;\n const getter = isString(source) ? source.includes(\".\") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);\n let cb;\n if (isFunction(value)) {\n cb = value;\n } else {\n cb = value.handler;\n options = value;\n }\n const reset = setCurrentInstance(this);\n const res = doWatch(getter, cb.bind(publicThis), options);\n reset();\n return res;\n}\nfunction createPathGetter(ctx, path) {\n const segments = path.split(\".\");\n return () => {\n let cur = ctx;\n for (let i = 0; i < segments.length && cur; i++) {\n cur = cur[segments[i]];\n }\n return cur;\n };\n}\n\nconst pendingMounts = /* @__PURE__ */ new WeakMap();\nconst TeleportEndKey = /* @__PURE__ */ Symbol(\"_vte\");\nconst isTeleport = (type) => type.__isTeleport;\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === \"\");\nconst isTeleportDeferred = (props) => props && (props.defer || props.defer === \"\");\nconst isTargetSVG = (target) => typeof SVGElement !== \"undefined\" && target instanceof SVGElement;\nconst isTargetMathML = (target) => typeof MathMLElement === \"function\" && target instanceof MathMLElement;\nconst resolveTarget = (props, select) => {\n const targetSelector = props && props.to;\n if (isString(targetSelector)) {\n if (!select) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Current renderer does not support string target for Teleports. (missing querySelector renderer option)`\n );\n return null;\n } else {\n const target = select(targetSelector);\n if (!!(process.env.NODE_ENV !== \"production\") && !target && !isTeleportDisabled(props)) {\n warn$1(\n `Failed to locate Teleport target with selector \"${targetSelector}\". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.`\n );\n }\n return target;\n }\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && !targetSelector && !isTeleportDisabled(props)) {\n warn$1(`Invalid Teleport target: ${targetSelector}`);\n }\n return targetSelector;\n }\n};\nconst TeleportImpl = {\n name: \"Teleport\",\n __isTeleport: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) {\n const {\n mc: mountChildren,\n pc: patchChildren,\n pbc: patchBlockChildren,\n o: { insert, querySelector, createText, createComment, parentNode }\n } = internals;\n const disabled = isTeleportDisabled(n2.props);\n let { dynamicChildren } = n2;\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n optimized = false;\n dynamicChildren = null;\n }\n const mount = (vnode, container2, anchor2) => {\n if (vnode.shapeFlag & 16) {\n mountChildren(\n vnode.children,\n container2,\n anchor2,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n };\n const mountToTarget = (vnode = n2) => {\n const disabled2 = isTeleportDisabled(vnode.props);\n const target = vnode.target = resolveTarget(vnode.props, querySelector);\n const targetAnchor = prepareAnchor(target, vnode, createText, insert);\n if (target) {\n if (namespace !== \"svg\" && isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace !== \"mathml\" && isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (parentComponent && parentComponent.isCE) {\n (parentComponent.ce._teleportTargets || (parentComponent.ce._teleportTargets = /* @__PURE__ */ new Set())).add(target);\n }\n if (!disabled2) {\n mount(vnode, target, targetAnchor);\n updateCssVars(vnode, false);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && !disabled2) {\n warn$1(\"Invalid Teleport target on mount:\", target, `(${typeof target})`);\n }\n };\n const queuePendingMount = (vnode) => {\n const mountJob = () => {\n if (pendingMounts.get(vnode) !== mountJob) return;\n pendingMounts.delete(vnode);\n if (isTeleportDisabled(vnode.props)) {\n const mountContainer = parentNode(vnode.el) || container;\n mount(vnode, mountContainer, vnode.anchor);\n updateCssVars(vnode, true);\n }\n mountToTarget(vnode);\n };\n pendingMounts.set(vnode, mountJob);\n queuePostRenderEffect(mountJob, parentSuspense);\n };\n if (n1 == null) {\n const placeholder = n2.el = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport start\") : createText(\"\");\n const mainAnchor = n2.anchor = !!(process.env.NODE_ENV !== \"production\") ? createComment(\"teleport end\") : createText(\"\");\n insert(placeholder, container, anchor);\n insert(mainAnchor, container, anchor);\n if (isTeleportDeferred(n2.props) || parentSuspense && parentSuspense.pendingBranch) {\n queuePendingMount(n2);\n return;\n }\n if (disabled) {\n mount(n2, container, mainAnchor);\n updateCssVars(n2, true);\n }\n mountToTarget();\n } else {\n n2.el = n1.el;\n const mainAnchor = n2.anchor = n1.anchor;\n const pendingMount = pendingMounts.get(n1);\n if (pendingMount) {\n pendingMount.flags |= 8;\n pendingMounts.delete(n1);\n queuePendingMount(n2);\n return;\n }\n n2.targetStart = n1.targetStart;\n const target = n2.target = n1.target;\n const targetAnchor = n2.targetAnchor = n1.targetAnchor;\n const wasDisabled = isTeleportDisabled(n1.props);\n const currentContainer = wasDisabled ? container : target;\n const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\n if (namespace === \"svg\" || isTargetSVG(target)) {\n namespace = \"svg\";\n } else if (namespace === \"mathml\" || isTargetMathML(target)) {\n namespace = \"mathml\";\n }\n if (dynamicChildren) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n currentContainer,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds\n );\n traverseStaticChildren(n1, n2, !!!(process.env.NODE_ENV !== \"production\"));\n } else if (!optimized) {\n patchChildren(\n n1,\n n2,\n currentContainer,\n currentAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n false\n );\n }\n if (disabled) {\n if (!wasDisabled) {\n moveTeleport(\n n2,\n container,\n mainAnchor,\n internals,\n 1\n );\n } else {\n if (n2.props && n1.props && n2.props.to !== n1.props.to) {\n n2.props.to = n1.props.to;\n }\n }\n } else {\n if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\n const nextTarget = n2.target = resolveTarget(\n n2.props,\n querySelector\n );\n if (nextTarget) {\n moveTeleport(\n n2,\n nextTarget,\n null,\n internals,\n 0\n );\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n \"Invalid Teleport target on update:\",\n target,\n `(${typeof target})`\n );\n }\n } else if (wasDisabled) {\n moveTeleport(\n n2,\n target,\n targetAnchor,\n internals,\n 1\n );\n }\n }\n updateCssVars(n2, disabled);\n }\n },\n remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n const {\n shapeFlag,\n children,\n anchor,\n targetStart,\n targetAnchor,\n target,\n props\n } = vnode;\n let shouldRemove = doRemove || !isTeleportDisabled(props);\n const pendingMount = pendingMounts.get(vnode);\n if (pendingMount) {\n pendingMount.flags |= 8;\n pendingMounts.delete(vnode);\n shouldRemove = false;\n }\n if (target) {\n hostRemove(targetStart);\n hostRemove(targetAnchor);\n }\n doRemove && hostRemove(anchor);\n if (shapeFlag & 16) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n unmount(\n child,\n parentComponent,\n parentSuspense,\n shouldRemove,\n !!child.dynamicChildren\n );\n }\n }\n },\n move: moveTeleport,\n hydrate: hydrateTeleport\n};\nfunction moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) {\n if (moveType === 0) {\n insert(vnode.targetAnchor, container, parentAnchor);\n }\n const { el, anchor, shapeFlag, children, props } = vnode;\n const isReorder = moveType === 2;\n if (isReorder) {\n insert(el, container, parentAnchor);\n }\n if (!pendingMounts.has(vnode) && (!isReorder || isTeleportDisabled(props))) {\n if (shapeFlag & 16) {\n for (let i = 0; i < children.length; i++) {\n move(\n children[i],\n container,\n parentAnchor,\n 2\n );\n }\n }\n }\n if (isReorder) {\n insert(anchor, container, parentAnchor);\n }\n}\nfunction hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, {\n o: { nextSibling, parentNode, querySelector, insert, createText }\n}, hydrateChildren) {\n function hydrateAnchor(target2, targetNode) {\n let targetAnchor = targetNode;\n while (targetAnchor) {\n if (targetAnchor && targetAnchor.nodeType === 8) {\n if (targetAnchor.data === \"teleport start anchor\") {\n vnode.targetStart = targetAnchor;\n } else if (targetAnchor.data === \"teleport anchor\") {\n vnode.targetAnchor = targetAnchor;\n target2._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n break;\n }\n }\n targetAnchor = nextSibling(targetAnchor);\n }\n }\n function hydrateDisabledTeleport(node2, vnode2) {\n vnode2.anchor = hydrateChildren(\n nextSibling(node2),\n vnode2,\n parentNode(node2),\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n const target = vnode.target = resolveTarget(\n vnode.props,\n querySelector\n );\n const disabled = isTeleportDisabled(vnode.props);\n if (target) {\n const targetNode = target._lpa || target.firstChild;\n if (vnode.shapeFlag & 16) {\n if (disabled) {\n hydrateDisabledTeleport(node, vnode);\n hydrateAnchor(target, targetNode);\n if (!vnode.targetAnchor) {\n prepareAnchor(\n target,\n vnode,\n createText,\n insert,\n // if target is the same as the main view, insert anchors before current node\n // to avoid hydrating mismatch\n parentNode(node) === target ? node : null\n );\n }\n } else {\n vnode.anchor = nextSibling(node);\n hydrateAnchor(target, targetNode);\n if (!vnode.targetAnchor) {\n prepareAnchor(target, vnode, createText, insert);\n }\n hydrateChildren(\n targetNode && nextSibling(targetNode),\n vnode,\n target,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n }\n updateCssVars(vnode, disabled);\n } else if (disabled) {\n if (vnode.shapeFlag & 16) {\n hydrateDisabledTeleport(node, vnode);\n vnode.targetStart = node;\n vnode.targetAnchor = nextSibling(node);\n }\n }\n return vnode.anchor && nextSibling(vnode.anchor);\n}\nconst Teleport = TeleportImpl;\nfunction updateCssVars(vnode, isDisabled) {\n const ctx = vnode.ctx;\n if (ctx && ctx.ut) {\n let node, anchor;\n if (isDisabled) {\n node = vnode.el;\n anchor = vnode.anchor;\n } else {\n node = vnode.targetStart;\n anchor = vnode.targetAnchor;\n }\n while (node && node !== anchor) {\n if (node.nodeType === 1) node.setAttribute(\"data-v-owner\", ctx.uid);\n node = node.nextSibling;\n }\n ctx.ut();\n }\n}\nfunction prepareAnchor(target, vnode, createText, insert, anchor = null) {\n const targetStart = vnode.targetStart = createText(\"\");\n const targetAnchor = vnode.targetAnchor = createText(\"\");\n targetStart[TeleportEndKey] = targetAnchor;\n if (target) {\n insert(targetStart, target, anchor);\n insert(targetAnchor, target, anchor);\n }\n return targetAnchor;\n}\n\nconst leaveCbKey = /* @__PURE__ */ Symbol(\"_leaveCb\");\nconst enterCbKey = /* @__PURE__ */ Symbol(\"_enterCb\");\nfunction useTransitionState() {\n const state = {\n isMounted: false,\n isLeaving: false,\n isUnmounting: false,\n leavingVNodes: /* @__PURE__ */ new Map()\n };\n onMounted(() => {\n state.isMounted = true;\n });\n onBeforeUnmount(() => {\n state.isUnmounting = true;\n });\n return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionPropsValidators = {\n mode: String,\n appear: Boolean,\n persisted: Boolean,\n // enter\n onBeforeEnter: TransitionHookValidator,\n onEnter: TransitionHookValidator,\n onAfterEnter: TransitionHookValidator,\n onEnterCancelled: TransitionHookValidator,\n // leave\n onBeforeLeave: TransitionHookValidator,\n onLeave: TransitionHookValidator,\n onAfterLeave: TransitionHookValidator,\n onLeaveCancelled: TransitionHookValidator,\n // appear\n onBeforeAppear: TransitionHookValidator,\n onAppear: TransitionHookValidator,\n onAfterAppear: TransitionHookValidator,\n onAppearCancelled: TransitionHookValidator\n};\nconst recursiveGetSubtree = (instance) => {\n const subTree = instance.subTree;\n return subTree.component ? recursiveGetSubtree(subTree.component) : subTree;\n};\nconst BaseTransitionImpl = {\n name: `BaseTransition`,\n props: BaseTransitionPropsValidators,\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n return () => {\n const children = slots.default && getTransitionRawChildren(slots.default(), true);\n const child = children && children.length ? findNonCommentChild(children) : (\n // Keep explicit default-slot conditionals on the same transition path\n // as regular v-if branches, which render a comment placeholder.\n instance.subTree ? createCommentVNode() : void 0\n );\n if (!child) {\n return;\n }\n const rawProps = toRaw(props);\n const { mode } = rawProps;\n if (!!(process.env.NODE_ENV !== \"production\") && mode && mode !== \"in-out\" && mode !== \"out-in\" && mode !== \"default\") {\n warn$1(`invalid <transition> mode: ${mode}`);\n }\n if (state.isLeaving) {\n return emptyPlaceholder(child);\n }\n const innerChild = getInnerChild$1(child);\n if (!innerChild) {\n return emptyPlaceholder(child);\n }\n let enterHooks = resolveTransitionHooks(\n innerChild,\n rawProps,\n state,\n instance,\n // #11061, ensure enterHooks is fresh after clone\n (hooks) => enterHooks = hooks\n );\n if (innerChild.type !== Comment) {\n setTransitionHooks(innerChild, enterHooks);\n }\n let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree);\n if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(oldInnerChild, innerChild) && recursiveGetSubtree(instance).type !== Comment) {\n let leavingHooks = resolveTransitionHooks(\n oldInnerChild,\n rawProps,\n state,\n instance\n );\n setTransitionHooks(oldInnerChild, leavingHooks);\n if (mode === \"out-in\" && innerChild.type !== Comment) {\n state.isLeaving = true;\n leavingHooks.afterLeave = () => {\n state.isLeaving = false;\n if (!(instance.job.flags & 8)) {\n instance.update();\n }\n delete leavingHooks.afterLeave;\n oldInnerChild = void 0;\n };\n return emptyPlaceholder(child);\n } else if (mode === \"in-out\" && innerChild.type !== Comment) {\n leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n const leavingVNodesCache = getLeavingNodesForType(\n state,\n oldInnerChild\n );\n leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n el[leaveCbKey] = () => {\n earlyRemove();\n el[leaveCbKey] = void 0;\n delete enterHooks.delayedLeave;\n oldInnerChild = void 0;\n };\n enterHooks.delayedLeave = () => {\n delayedLeave();\n delete enterHooks.delayedLeave;\n oldInnerChild = void 0;\n };\n };\n } else {\n oldInnerChild = void 0;\n }\n } else if (oldInnerChild) {\n oldInnerChild = void 0;\n }\n return child;\n };\n }\n};\nfunction findNonCommentChild(children) {\n let child = children[0];\n if (children.length > 1) {\n let hasFound = false;\n for (const c of children) {\n if (c.type !== Comment) {\n if (!!(process.env.NODE_ENV !== \"production\") && hasFound) {\n warn$1(\n \"<transition> can only be used on a single element or component. Use <transition-group> for lists.\"\n );\n break;\n }\n child = c;\n hasFound = true;\n if (!!!(process.env.NODE_ENV !== \"production\")) break;\n }\n }\n }\n return child;\n}\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n const { leavingVNodes } = state;\n let leavingVNodesCache = leavingVNodes.get(vnode.type);\n if (!leavingVNodesCache) {\n leavingVNodesCache = /* @__PURE__ */ Object.create(null);\n leavingVNodes.set(vnode.type, leavingVNodesCache);\n }\n return leavingVNodesCache;\n}\nfunction resolveTransitionHooks(vnode, props, state, instance, postClone) {\n const {\n appear,\n mode,\n persisted = false,\n onBeforeEnter,\n onEnter,\n onAfterEnter,\n onEnterCancelled,\n onBeforeLeave,\n onLeave,\n onAfterLeave,\n onLeaveCancelled,\n onBeforeAppear,\n onAppear,\n onAfterAppear,\n onAppearCancelled\n } = props;\n const key = String(vnode.key);\n const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n const callHook = (hook, args) => {\n hook && callWithAsyncErrorHandling(\n hook,\n instance,\n 9,\n args\n );\n };\n const callAsyncHook = (hook, args) => {\n const done = args[1];\n callHook(hook, args);\n if (isArray(hook)) {\n if (hook.every((hook2) => hook2.length <= 1)) done();\n } else if (hook.length <= 1) {\n done();\n }\n };\n const hooks = {\n mode,\n persisted,\n beforeEnter(el) {\n let hook = onBeforeEnter;\n if (!state.isMounted) {\n if (appear) {\n hook = onBeforeAppear || onBeforeEnter;\n } else {\n return;\n }\n }\n if (el[leaveCbKey]) {\n el[leaveCbKey](\n true\n /* cancelled */\n );\n }\n const leavingVNode = leavingVNodesCache[key];\n if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) {\n leavingVNode.el[leaveCbKey]();\n }\n callHook(hook, [el]);\n },\n enter(el) {\n if (!isHmrUpdating && leavingVNodesCache[key] === vnode) return;\n let hook = onEnter;\n let afterHook = onAfterEnter;\n let cancelHook = onEnterCancelled;\n if (!state.isMounted) {\n if (appear) {\n hook = onAppear || onEnter;\n afterHook = onAfterAppear || onAfterEnter;\n cancelHook = onAppearCancelled || onEnterCancelled;\n } else {\n return;\n }\n }\n let called = false;\n el[enterCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n if (cancelled) {\n callHook(cancelHook, [el]);\n } else {\n callHook(afterHook, [el]);\n }\n if (hooks.delayedLeave) {\n hooks.delayedLeave();\n }\n el[enterCbKey] = void 0;\n };\n const done = el[enterCbKey].bind(null, false);\n if (hook) {\n callAsyncHook(hook, [el, done]);\n } else {\n done();\n }\n },\n leave(el, remove) {\n const key2 = String(vnode.key);\n if (el[enterCbKey]) {\n el[enterCbKey](\n true\n /* cancelled */\n );\n }\n if (state.isUnmounting) {\n return remove();\n }\n callHook(onBeforeLeave, [el]);\n let called = false;\n el[leaveCbKey] = (cancelled) => {\n if (called) return;\n called = true;\n remove();\n if (cancelled) {\n callHook(onLeaveCancelled, [el]);\n } else {\n callHook(onAfterLeave, [el]);\n }\n el[leaveCbKey] = void 0;\n if (leavingVNodesCache[key2] === vnode) {\n delete leavingVNodesCache[key2];\n }\n };\n const done = el[leaveCbKey].bind(null, false);\n leavingVNodesCache[key2] = vnode;\n if (onLeave) {\n callAsyncHook(onLeave, [el, done]);\n } else {\n done();\n }\n },\n clone(vnode2) {\n const hooks2 = resolveTransitionHooks(\n vnode2,\n props,\n state,\n instance,\n postClone\n );\n if (postClone) postClone(hooks2);\n return hooks2;\n }\n };\n return hooks;\n}\nfunction emptyPlaceholder(vnode) {\n if (isKeepAlive(vnode)) {\n vnode = cloneVNode(vnode);\n vnode.children = null;\n return vnode;\n }\n}\nfunction getInnerChild$1(vnode) {\n if (!isKeepAlive(vnode)) {\n if (isTeleport(vnode.type) && vnode.children) {\n return findNonCommentChild(vnode.children);\n }\n return vnode;\n }\n if (vnode.component) {\n return vnode.component.subTree;\n }\n const { shapeFlag, children } = vnode;\n if (children) {\n if (shapeFlag & 16) {\n return children[0];\n }\n if (shapeFlag & 32 && isFunction(children.default)) {\n return children.default();\n }\n }\n}\nfunction setTransitionHooks(vnode, hooks) {\n if (vnode.shapeFlag & 6 && vnode.component) {\n vnode.transition = hooks;\n setTransitionHooks(vnode.component.subTree, hooks);\n } else if (vnode.shapeFlag & 128) {\n vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n } else {\n vnode.transition = hooks;\n }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n let ret = [];\n let keyedFragmentCount = 0;\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);\n if (child.type === Fragment) {\n if (child.patchFlag & 128) keyedFragmentCount++;\n ret = ret.concat(\n getTransitionRawChildren(child.children, keepComment, key)\n );\n } else if (keepComment || child.type !== Comment) {\n ret.push(key != null ? cloneVNode(child, { key }) : child);\n }\n }\n if (keyedFragmentCount > 1) {\n for (let i = 0; i < ret.length; i++) {\n ret[i].patchFlag = -2;\n }\n }\n return ret;\n}\n\n// @__NO_SIDE_EFFECTS__\nfunction defineComponent(options, extraOptions) {\n return isFunction(options) ? (\n // #8236: extend call and options.name access are considered side-effects\n // by Rollup, so we have to wrap it in a pure-annotated IIFE.\n /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()\n ) : options;\n}\n\nfunction useId() {\n const i = getCurrentInstance();\n if (i) {\n return (i.appContext.config.idPrefix || \"v\") + \"-\" + i.ids[0] + i.ids[1]++;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useId() is called when there is no active component instance to be associated with.`\n );\n }\n return \"\";\n}\nfunction markAsyncBoundary(instance) {\n instance.ids = [instance.ids[0] + instance.ids[2]++ + \"-\", 0, 0];\n}\n\nconst knownTemplateRefs = /* @__PURE__ */ new WeakSet();\nfunction useTemplateRef(key) {\n const i = getCurrentInstance();\n const r = shallowRef(null);\n if (i) {\n const refs = i.refs === EMPTY_OBJ ? i.refs = {} : i.refs;\n if (!!(process.env.NODE_ENV !== \"production\") && isTemplateRefKey(refs, key)) {\n warn$1(`useTemplateRef('${key}') already exists.`);\n } else {\n Object.defineProperty(refs, key, {\n enumerable: true,\n get: () => r.value,\n set: (val) => r.value = val\n });\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `useTemplateRef() is called when there is no active component instance to be associated with.`\n );\n }\n const ret = !!(process.env.NODE_ENV !== \"production\") ? readonly(r) : r;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n knownTemplateRefs.add(ret);\n }\n return ret;\n}\nfunction isTemplateRefKey(refs, key) {\n let desc;\n return !!((desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable);\n}\n\nconst pendingSetRefMap = /* @__PURE__ */ new WeakMap();\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n if (isArray(rawRef)) {\n rawRef.forEach(\n (r, i) => setRef(\n r,\n oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef),\n parentSuspense,\n vnode,\n isUnmount\n )\n );\n return;\n }\n if (isAsyncWrapper(vnode) && !isUnmount) {\n if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) {\n setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree);\n }\n return;\n }\n const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el;\n const value = isUnmount ? null : refValue;\n const { i: owner, r: ref } = rawRef;\n if (!!(process.env.NODE_ENV !== \"production\") && !owner) {\n warn$1(\n `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.`\n );\n return;\n }\n const oldRef = oldRawRef && oldRawRef.r;\n const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs;\n const setupState = owner.setupState;\n const rawSetupState = toRaw(setupState);\n const canSetSetupRef = setupState === EMPTY_OBJ ? NO : (key) => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (hasOwn(rawSetupState, key) && !isRef(rawSetupState[key])) {\n warn$1(\n `Template ref \"${key}\" used on a non-ref value. It will not work in the production build.`\n );\n }\n if (knownTemplateRefs.has(rawSetupState[key])) {\n return false;\n }\n }\n if (isTemplateRefKey(refs, key)) {\n return false;\n }\n return hasOwn(rawSetupState, key);\n };\n const canSetRef = (ref2, key) => {\n if (!!(process.env.NODE_ENV !== \"production\") && knownTemplateRefs.has(ref2)) {\n return false;\n }\n if (key && isTemplateRefKey(refs, key)) {\n return false;\n }\n return true;\n };\n if (oldRef != null && oldRef !== ref) {\n invalidatePendingSetRef(oldRawRef);\n if (isString(oldRef)) {\n refs[oldRef] = null;\n if (canSetSetupRef(oldRef)) {\n setupState[oldRef] = null;\n }\n } else if (isRef(oldRef)) {\n const oldRawRefAtom = oldRawRef;\n if (canSetRef(oldRef, oldRawRefAtom.k)) {\n oldRef.value = null;\n }\n if (oldRawRefAtom.k) refs[oldRawRefAtom.k] = null;\n }\n }\n if (isFunction(ref)) {\n callWithErrorHandling(ref, owner, 12, [value, refs]);\n } else {\n const _isString = isString(ref);\n const _isRef = isRef(ref);\n if (_isString || _isRef) {\n const doSet = () => {\n if (rawRef.f) {\n const existing = _isString ? canSetSetupRef(ref) ? setupState[ref] : refs[ref] : canSetRef(ref) || !rawRef.k ? ref.value : refs[rawRef.k];\n if (isUnmount) {\n isArray(existing) && remove(existing, refValue);\n } else {\n if (!isArray(existing)) {\n if (_isString) {\n refs[ref] = [refValue];\n if (canSetSetupRef(ref)) {\n setupState[ref] = refs[ref];\n }\n } else {\n const newVal = [refValue];\n if (canSetRef(ref, rawRef.k)) {\n ref.value = newVal;\n }\n if (rawRef.k) refs[rawRef.k] = newVal;\n }\n } else if (!existing.includes(refValue)) {\n existing.push(refValue);\n }\n }\n } else if (_isString) {\n refs[ref] = value;\n if (canSetSetupRef(ref)) {\n setupState[ref] = value;\n }\n } else if (_isRef) {\n if (canSetRef(ref, rawRef.k)) {\n ref.value = value;\n }\n if (rawRef.k) refs[rawRef.k] = value;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n };\n if (value) {\n const job = () => {\n doSet();\n pendingSetRefMap.delete(rawRef);\n };\n job.id = -1;\n pendingSetRefMap.set(rawRef, job);\n queuePostRenderEffect(job, parentSuspense);\n } else {\n invalidatePendingSetRef(rawRef);\n doSet();\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid template ref type:\", ref, `(${typeof ref})`);\n }\n }\n}\nfunction invalidatePendingSetRef(rawRef) {\n const pendingSetRef = pendingSetRefMap.get(rawRef);\n if (pendingSetRef) {\n pendingSetRef.flags |= 8;\n pendingSetRefMap.delete(rawRef);\n }\n}\n\nlet hasLoggedMismatchError = false;\nconst logMismatchError = () => {\n if (hasLoggedMismatchError) {\n return;\n }\n console.error(\"Hydration completed but contains mismatches.\");\n hasLoggedMismatchError = true;\n};\nconst isSVGContainer = (container) => container.namespaceURI.includes(\"svg\") && container.tagName !== \"foreignObject\";\nconst isMathMLContainer = (container) => container.namespaceURI.includes(\"MathML\");\nconst getContainerType = (container) => {\n if (container.nodeType !== 1) return void 0;\n if (isSVGContainer(container)) return \"svg\";\n if (isMathMLContainer(container)) return \"mathml\";\n return void 0;\n};\nconst isComment = (node) => node.nodeType === 8;\nfunction createHydrationFunctions(rendererInternals) {\n const {\n mt: mountComponent,\n p: patch,\n o: {\n patchProp,\n createText,\n nextSibling,\n parentNode,\n remove,\n insert,\n createComment\n }\n } = rendererInternals;\n const hydrate = (vnode, container) => {\n if (!container.hasChildNodes()) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Attempting to hydrate existing markup but container is empty. Performing full mount instead.`\n );\n patch(null, vnode, container);\n flushPostFlushCbs();\n container._vnode = vnode;\n return;\n }\n hydrateNode(container.firstChild, vnode, null, null, null);\n flushPostFlushCbs();\n container._vnode = vnode;\n };\n const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const isFragmentStart = isComment(node) && node.data === \"[\";\n const onMismatch = () => handleMismatch(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n isFragmentStart\n );\n const { type, ref, shapeFlag, patchFlag } = vnode;\n let domType = node.nodeType;\n vnode.el = node;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n def(node, \"__vnode\", vnode, true);\n def(node, \"__vueParentComponent\", parentComponent, true);\n }\n if (patchFlag === -2) {\n optimized = false;\n vnode.dynamicChildren = null;\n }\n let nextNode = null;\n switch (type) {\n case Text:\n if (domType !== 3) {\n if (vnode.children === \"\") {\n insert(vnode.el = createText(\"\"), parentNode(node), node);\n nextNode = node;\n } else {\n nextNode = onMismatch();\n }\n } else {\n if (node.data !== vnode.children) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text mismatch in`,\n node.parentNode,\n `\n - rendered on server: ${JSON.stringify(\n node.data\n )}\n - expected on client: ${JSON.stringify(vnode.children)}`\n );\n logMismatchError();\n node.data = vnode.children;\n }\n nextNode = nextSibling(node);\n }\n break;\n case Comment:\n if (isTemplateNode(node)) {\n nextNode = nextSibling(node);\n replaceNode(\n vnode.el = node.content.firstChild,\n node,\n parentComponent\n );\n } else if (domType !== 8 || isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = nextSibling(node);\n }\n break;\n case Static:\n if (isFragmentStart) {\n node = nextSibling(node);\n domType = node.nodeType;\n }\n if (domType === 1 || domType === 3) {\n nextNode = node;\n const needToAdoptContent = !vnode.children.length;\n for (let i = 0; i < vnode.staticCount; i++) {\n if (needToAdoptContent)\n vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data;\n if (i === vnode.staticCount - 1) {\n vnode.anchor = nextNode;\n }\n nextNode = nextSibling(nextNode);\n }\n return isFragmentStart ? nextSibling(nextNode) : nextNode;\n } else {\n onMismatch();\n }\n break;\n case Fragment:\n if (!isFragmentStart) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateFragment(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n break;\n default:\n if (shapeFlag & 1) {\n if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) {\n nextNode = onMismatch();\n } else {\n nextNode = hydrateElement(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n }\n } else if (shapeFlag & 6) {\n vnode.slotScopeIds = slotScopeIds;\n const container = parentNode(node);\n if (isFragmentStart) {\n nextNode = locateClosingAnchor(node);\n } else if (isComment(node) && node.data === \"teleport start\") {\n nextNode = locateClosingAnchor(node, node.data, \"teleport end\");\n } else {\n nextNode = nextSibling(node);\n }\n mountComponent(\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n optimized\n );\n if (isAsyncWrapper(vnode) && !vnode.type.__asyncResolved) {\n let subTree;\n if (isFragmentStart) {\n subTree = createVNode(Fragment);\n subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild;\n } else {\n subTree = node.nodeType === 3 ? createTextVNode(\"\") : createVNode(\"div\");\n }\n subTree.el = node;\n vnode.component.subTree = subTree;\n }\n } else if (shapeFlag & 64) {\n if (domType !== 8) {\n nextNode = onMismatch();\n } else {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateChildren\n );\n }\n } else if (shapeFlag & 128) {\n nextNode = vnode.type.hydrate(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n getContainerType(parentNode(node)),\n slotScopeIds,\n optimized,\n rendererInternals,\n hydrateNode\n );\n } else if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) {\n warn$1(\"Invalid HostVNode type:\", type, `(${typeof type})`);\n }\n }\n if (ref != null) {\n setRef(ref, null, parentSuspense, vnode);\n }\n return nextNode;\n };\n const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!vnode.dynamicChildren;\n const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode;\n const forcePatch = type === \"input\" || type === \"option\";\n if (!!(process.env.NODE_ENV !== \"production\") || forcePatch || patchFlag !== -1) {\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n }\n let needCallTransitionHooks = false;\n if (isTemplateNode(el)) {\n needCallTransitionHooks = needTransition(\n null,\n // no need check parentSuspense in hydration\n transition\n ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear;\n const content = el.content.firstChild;\n if (needCallTransitionHooks) {\n const cls = content.getAttribute(\"class\");\n if (cls) content.$cls = cls;\n transition.beforeEnter(content);\n }\n replaceNode(content, el, parentComponent);\n vnode.el = el = content;\n }\n if (shapeFlag & 16 && // skip if element has innerHTML / textContent\n !(props && (props.innerHTML || props.textContent))) {\n let next = hydrateChildren(\n el.firstChild,\n vnode,\n el,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n let hasWarned = false;\n while (next) {\n if (!isMismatchAllowed(el, 1 /* CHILDREN */)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && !hasWarned) {\n warn$1(\n `Hydration children mismatch on`,\n el,\n `\nServer rendered element contains more child nodes than client vdom.`\n );\n hasWarned = true;\n }\n logMismatchError();\n }\n const cur = next;\n next = next.nextSibling;\n remove(cur);\n }\n } else if (shapeFlag & 8) {\n let clientText = vnode.children;\n if (clientText[0] === \"\\n\" && (el.tagName === \"PRE\" || el.tagName === \"TEXTAREA\")) {\n clientText = clientText.slice(1);\n }\n const { textContent } = el;\n if (textContent !== clientText && // innerHTML normalize \\r\\n or \\r into a single \\n in the DOM\n textContent !== clientText.replace(/\\r\\n|\\r/g, \"\\n\")) {\n if (!isMismatchAllowed(el, 0 /* TEXT */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration text content mismatch on`,\n el,\n `\n - rendered on server: ${textContent}\n - expected on client: ${clientText}`\n );\n logMismatchError();\n }\n el.textContent = vnode.children;\n }\n }\n if (props) {\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ || forcePatch || !optimized || patchFlag & (16 | 32)) {\n const isCustomElement = el.tagName.includes(\"-\");\n for (const key in props) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && // #11189 skip if this node has directives that have created hooks\n // as it could have mutated the DOM in any possible way\n !(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) {\n logMismatchError();\n }\n if (forcePatch && (key.endsWith(\"value\") || key === \"indeterminate\") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers\n key[0] === \".\" || isCustomElement && !isReservedProp(key)) {\n patchProp(el, key, null, props[key], void 0, parentComponent);\n }\n }\n } else if (props.onClick) {\n patchProp(\n el,\n \"onClick\",\n null,\n props.onClick,\n void 0,\n parentComponent\n );\n } else if (patchFlag & 4 && isReactive(props.style)) {\n for (const key in props.style) props.style[key];\n }\n }\n let vnodeHooks;\n if (vnodeHooks = props && props.onVnodeBeforeMount) {\n invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n }\n if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) {\n queueEffectWithSuspense(() => {\n vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n needCallTransitionHooks && transition.enter(el);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n }, parentSuspense);\n }\n }\n return el.nextSibling;\n };\n const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n optimized = optimized || !!parentVNode.dynamicChildren;\n const children = parentVNode.children;\n const l = children.length;\n let hasWarned = false;\n for (let i = 0; i < l; i++) {\n const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]);\n const isText = vnode.type === Text;\n if (node) {\n if (isText && !optimized) {\n if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) {\n insert(\n createText(\n node.data.slice(vnode.children.length)\n ),\n container,\n nextSibling(node)\n );\n node.data = vnode.children;\n }\n }\n node = hydrateNode(\n node,\n vnode,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n } else if (isText && !vnode.children) {\n insert(vnode.el = createText(\"\"), container);\n } else {\n if (!isMismatchAllowed(container, 1 /* CHILDREN */)) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && !hasWarned) {\n warn$1(\n `Hydration children mismatch on`,\n container,\n `\nServer rendered element contains fewer child nodes than client vdom.`\n );\n hasWarned = true;\n }\n logMismatchError();\n }\n patch(\n null,\n vnode,\n container,\n null,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n }\n }\n return node;\n };\n const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n const { slotScopeIds: fragmentSlotScopeIds } = vnode;\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n }\n const container = parentNode(node);\n const next = hydrateChildren(\n nextSibling(node),\n vnode,\n container,\n parentComponent,\n parentSuspense,\n slotScopeIds,\n optimized\n );\n if (next && isComment(next) && next.data === \"]\") {\n return nextSibling(vnode.anchor = next);\n } else {\n logMismatchError();\n insert(vnode.anchor = createComment(`]`), container, next);\n return next;\n }\n };\n const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n if (!isMismatchAllowed(node.parentElement, 1 /* CHILDREN */)) {\n (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_HYDRATION_MISMATCH_DETAILS__) && warn$1(\n `Hydration node mismatch:\n- rendered on server:`,\n node,\n node.nodeType === 3 ? `(text)` : isComment(node) && node.data === \"[\" ? `(start of fragment)` : ``,\n `\n- expected on client:`,\n vnode.type\n );\n logMismatchError();\n }\n vnode.el = null;\n if (isFragment) {\n const end = locateClosingAnchor(node);\n while (true) {\n const next2 = nextSibling(node);\n if (next2 && next2 !== end) {\n remove(next2);\n } else {\n break;\n }\n }\n }\n const next = nextSibling(node);\n const container = parentNode(node);\n remove(node);\n patch(\n null,\n vnode,\n container,\n next,\n parentComponent,\n parentSuspense,\n getContainerType(container),\n slotScopeIds\n );\n if (parentComponent) {\n parentComponent.vnode.el = vnode.el;\n updateHOCHostEl(parentComponent, vnode.el);\n }\n return next;\n };\n const locateClosingAnchor = (node, open = \"[\", close = \"]\") => {\n let match = 0;\n while (node) {\n node = nextSibling(node);\n if (node && isComment(node)) {\n if (node.data === open) match++;\n if (node.data === close) {\n if (match === 0) {\n return nextSibling(node);\n } else {\n match--;\n }\n }\n }\n }\n return node;\n };\n const replaceNode = (newNode, oldNode, parentComponent) => {\n const parentNode2 = oldNode.parentNode;\n if (parentNode2) {\n parentNode2.replaceChild(newNode, oldNode);\n }\n let parent = parentComponent;\n while (parent) {\n if (parent.vnode.el === oldNode) {\n parent.vnode.el = parent.subTree.el = newNode;\n }\n parent = parent.parent;\n }\n };\n const isTemplateNode = (node) => {\n return node.nodeType === 1 && node.tagName === \"TEMPLATE\";\n };\n return [hydrate, hydrateNode];\n}\nfunction propHasMismatch(el, key, clientValue, vnode, instance) {\n let mismatchType;\n let mismatchKey;\n let actual;\n let expected;\n if (key === \"class\") {\n if (el.$cls) {\n actual = el.$cls;\n delete el.$cls;\n } else {\n actual = el.getAttribute(\"class\");\n }\n expected = normalizeClass(clientValue);\n if (!isSetEqual(toClassSet(actual || \"\"), toClassSet(expected))) {\n mismatchType = 2 /* CLASS */;\n mismatchKey = `class`;\n }\n } else if (key === \"style\") {\n actual = el.getAttribute(\"style\") || \"\";\n expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue));\n const actualMap = toStyleMap(actual);\n const expectedMap = toStyleMap(expected);\n if (vnode.dirs) {\n for (const { dir, value } of vnode.dirs) {\n if (dir.name === \"show\" && !value) {\n expectedMap.set(\"display\", \"none\");\n }\n }\n }\n if (instance) {\n resolveCssVars(instance, vnode, expectedMap);\n }\n if (!isMapEqual(actualMap, expectedMap)) {\n mismatchType = 3 /* STYLE */;\n mismatchKey = \"style\";\n }\n } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) {\n if (isBooleanAttr(key)) {\n actual = el.hasAttribute(key);\n expected = includeBooleanAttr(clientValue);\n } else if (clientValue == null) {\n actual = el.hasAttribute(key);\n expected = false;\n } else {\n if (el.hasAttribute(key)) {\n actual = el.getAttribute(key);\n } else if (key === \"value\" && el.tagName === \"TEXTAREA\") {\n actual = el.value;\n } else {\n actual = false;\n }\n expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false;\n }\n if (actual !== expected) {\n mismatchType = 4 /* ATTRIBUTE */;\n mismatchKey = key;\n }\n }\n if (mismatchType != null && !isMismatchAllowed(el, mismatchType)) {\n const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}=\"${v}\"`;\n const preSegment = `Hydration ${MismatchTypeString[mismatchType]} mismatch on`;\n const postSegment = `\n - rendered on server: ${format(actual)}\n - expected on client: ${format(expected)}\n Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead.\n You should fix the source of the mismatch.`;\n {\n warn$1(preSegment, el, postSegment);\n }\n return true;\n }\n return false;\n}\nfunction toClassSet(str) {\n return new Set(str.trim().split(/\\s+/));\n}\nfunction isSetEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const s of a) {\n if (!b.has(s)) {\n return false;\n }\n }\n return true;\n}\nfunction toStyleMap(str) {\n const styleMap = /* @__PURE__ */ new Map();\n for (const item of str.split(\";\")) {\n let [key, value] = item.split(\":\");\n key = key.trim();\n value = value && value.trim();\n if (key && value) {\n styleMap.set(key, value);\n }\n }\n return styleMap;\n}\nfunction isMapEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (value !== b.get(key)) {\n return false;\n }\n }\n return true;\n}\nfunction resolveCssVars(instance, vnode, expectedMap) {\n const root = instance.subTree;\n if (instance.getCssVars && (vnode === root || root && root.type === Fragment && root.children.includes(vnode))) {\n const cssVars = instance.getCssVars();\n for (const key in cssVars) {\n const value = normalizeCssVarValue(cssVars[key]);\n expectedMap.set(`--${getEscapedCssVarName(key, false)}`, value);\n }\n }\n if (vnode === root && instance.parent) {\n resolveCssVars(instance.parent, instance.vnode, expectedMap);\n }\n}\nconst allowMismatchAttr = \"data-allow-mismatch\";\nconst MismatchTypeString = {\n [0 /* TEXT */]: \"text\",\n [1 /* CHILDREN */]: \"children\",\n [2 /* CLASS */]: \"class\",\n [3 /* STYLE */]: \"style\",\n [4 /* ATTRIBUTE */]: \"attribute\"\n};\nfunction isMismatchAllowed(el, allowedType) {\n if (allowedType === 0 /* TEXT */ || allowedType === 1 /* CHILDREN */) {\n while (el && !el.hasAttribute(allowMismatchAttr)) {\n el = el.parentElement;\n }\n }\n const allowedAttr = el && el.getAttribute(allowMismatchAttr);\n if (allowedAttr == null) {\n return false;\n } else if (allowedAttr === \"\") {\n return true;\n } else {\n const list = allowedAttr.split(\",\");\n if (allowedType === 0 /* TEXT */ && list.includes(\"children\")) {\n return true;\n }\n return list.includes(MismatchTypeString[allowedType]);\n }\n}\n\nconst requestIdleCallback = getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1));\nconst cancelIdleCallback = getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id));\nconst hydrateOnIdle = (timeout = 1e4) => (hydrate) => {\n const id = requestIdleCallback(hydrate, { timeout });\n return () => cancelIdleCallback(id);\n};\nfunction elementIsVisibleInViewport(el) {\n const { top, left, bottom, right } = el.getBoundingClientRect();\n const { innerHeight, innerWidth } = window;\n return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth);\n}\nconst hydrateOnVisible = (opts) => (hydrate, forEach) => {\n const ob = new IntersectionObserver((entries) => {\n for (const e of entries) {\n if (!e.isIntersecting) continue;\n ob.disconnect();\n hydrate();\n break;\n }\n }, opts);\n forEach((el) => {\n if (!(el instanceof Element)) return;\n if (elementIsVisibleInViewport(el)) {\n hydrate();\n ob.disconnect();\n return false;\n }\n ob.observe(el);\n });\n return () => ob.disconnect();\n};\nconst hydrateOnMediaQuery = (query) => (hydrate) => {\n if (query) {\n const mql = matchMedia(query);\n if (mql.matches) {\n hydrate();\n } else {\n mql.addEventListener(\"change\", hydrate, { once: true });\n return () => mql.removeEventListener(\"change\", hydrate);\n }\n }\n};\nconst hydrateOnInteraction = (interactions = []) => (hydrate, forEach) => {\n if (isString(interactions)) interactions = [interactions];\n let hasHydrated = false;\n const doHydrate = (e) => {\n if (!hasHydrated) {\n hasHydrated = true;\n teardown();\n hydrate();\n e.target.dispatchEvent(new e.constructor(e.type, e));\n }\n };\n const teardown = () => {\n forEach((el) => {\n for (const i of interactions) {\n el.removeEventListener(i, doHydrate);\n }\n });\n };\n forEach((el) => {\n for (const i of interactions) {\n el.addEventListener(i, doHydrate, { once: true });\n }\n });\n return teardown;\n};\nfunction forEachElement(node, cb) {\n if (isComment(node) && node.data === \"[\") {\n let depth = 1;\n let next = node.nextSibling;\n while (next) {\n if (next.nodeType === 1) {\n const result = cb(next);\n if (result === false) {\n break;\n }\n } else if (isComment(next)) {\n if (next.data === \"]\") {\n if (--depth === 0) break;\n } else if (next.data === \"[\") {\n depth++;\n }\n }\n next = next.nextSibling;\n }\n } else {\n cb(node);\n }\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\n// @__NO_SIDE_EFFECTS__\nfunction defineAsyncComponent(source) {\n if (isFunction(source)) {\n source = { loader: source };\n }\n const {\n loader,\n loadingComponent,\n errorComponent,\n delay = 200,\n hydrate: hydrateStrategy,\n timeout,\n // undefined = never times out\n suspensible = true,\n onError: userOnError\n } = source;\n let pendingRequest = null;\n let resolvedComp;\n let retries = 0;\n const retry = () => {\n retries++;\n pendingRequest = null;\n return load();\n };\n const load = () => {\n let thisRequest;\n return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => {\n err = err instanceof Error ? err : new Error(String(err));\n if (userOnError) {\n return new Promise((resolve, reject) => {\n const userRetry = () => resolve(retry());\n const userFail = () => reject(err);\n userOnError(err, userRetry, userFail, retries + 1);\n });\n } else {\n throw err;\n }\n }).then((comp) => {\n if (thisRequest !== pendingRequest && pendingRequest) {\n return pendingRequest;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !comp) {\n warn$1(\n `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`\n );\n }\n if (comp && (comp.__esModule || comp[Symbol.toStringTag] === \"Module\")) {\n comp = comp.default;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && comp && !isObject(comp) && !isFunction(comp)) {\n throw new Error(`Invalid async component load result: ${comp}`);\n }\n resolvedComp = comp;\n return comp;\n }));\n };\n return defineComponent({\n name: \"AsyncComponentWrapper\",\n __asyncLoader: load,\n __asyncHydrate(el, instance, hydrate) {\n let patched = false;\n (instance.bu || (instance.bu = [])).push(() => patched = true);\n const performHydrate = () => {\n if (patched) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Skipping lazy hydration for component '${getComponentName(resolvedComp) || resolvedComp.__file}': it was updated before lazy hydration performed.`\n );\n }\n return;\n }\n hydrate();\n };\n const doHydrate = hydrateStrategy ? () => {\n const teardown = hydrateStrategy(\n performHydrate,\n (cb) => forEachElement(el, cb)\n );\n if (teardown) {\n (instance.bum || (instance.bum = [])).push(teardown);\n }\n } : performHydrate;\n if (resolvedComp) {\n doHydrate();\n } else {\n load().then(() => !instance.isUnmounted && doHydrate());\n }\n },\n get __asyncResolved() {\n return resolvedComp;\n },\n setup() {\n const instance = currentInstance;\n markAsyncBoundary(instance);\n if (resolvedComp) {\n return () => createInnerComp(resolvedComp, instance);\n }\n const onError = (err) => {\n pendingRequest = null;\n handleError(\n err,\n instance,\n 13,\n !errorComponent\n );\n };\n if (suspensible && instance.suspense || isInSSRComponentSetup) {\n return load().then((comp) => {\n return () => createInnerComp(comp, instance);\n }).catch((err) => {\n onError(err);\n return () => errorComponent ? createVNode(errorComponent, {\n error: err\n }) : null;\n });\n }\n const loaded = ref(false);\n const error = ref();\n const delayed = ref(!!delay);\n if (delay) {\n setTimeout(() => {\n delayed.value = false;\n }, delay);\n }\n if (timeout != null) {\n setTimeout(() => {\n if (!loaded.value && !error.value) {\n const err = new Error(\n `Async component timed out after ${timeout}ms.`\n );\n onError(err);\n error.value = err;\n }\n }, timeout);\n }\n load().then(() => {\n loaded.value = true;\n if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n instance.parent.update();\n }\n }).catch((err) => {\n onError(err);\n error.value = err;\n });\n return () => {\n if (loaded.value && resolvedComp) {\n return createInnerComp(resolvedComp, instance);\n } else if (error.value && errorComponent) {\n return createVNode(errorComponent, {\n error: error.value\n });\n } else if (loadingComponent && !delayed.value) {\n return createInnerComp(\n loadingComponent,\n instance\n );\n }\n };\n }\n });\n}\nfunction createInnerComp(comp, parent) {\n const { ref: ref2, props, children, ce } = parent.vnode;\n const vnode = createVNode(comp, props, children);\n vnode.ref = ref2;\n vnode.ce = ce;\n delete parent.vnode.ce;\n return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n name: `KeepAlive`,\n // Marker for special handling inside the renderer. We are not using a ===\n // check directly on KeepAlive in the renderer, because importing it directly\n // would prevent it from being tree-shaken.\n __isKeepAlive: true,\n props: {\n include: [String, RegExp, Array],\n exclude: [String, RegExp, Array],\n max: [String, Number]\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const sharedContext = instance.ctx;\n if (!sharedContext.renderer) {\n return () => {\n const children = slots.default && slots.default();\n return children && children.length === 1 ? children[0] : children;\n };\n }\n const cache = /* @__PURE__ */ new Map();\n const keys = /* @__PURE__ */ new Set();\n let current = null;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.__v_cache = cache;\n }\n const parentSuspense = instance.suspense;\n const {\n renderer: {\n p: patch,\n m: move,\n um: _unmount,\n o: { createElement }\n }\n } = sharedContext;\n const storageContainer = createElement(\"div\");\n sharedContext.activate = (vnode, container, anchor, namespace, optimized) => {\n const instance2 = vnode.component;\n move(vnode, container, anchor, 0, parentSuspense);\n patch(\n instance2.vnode,\n vnode,\n container,\n anchor,\n instance2,\n parentSuspense,\n namespace,\n vnode.slotScopeIds,\n optimized\n );\n queuePostRenderEffect(() => {\n instance2.isDeactivated = false;\n if (instance2.a) {\n invokeArrayFns(instance2.a);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n };\n sharedContext.deactivate = (vnode) => {\n const instance2 = vnode.component;\n invalidateMount(instance2.m);\n invalidateMount(instance2.a);\n move(vnode, storageContainer, null, 1, parentSuspense);\n queuePostRenderEffect(() => {\n if (instance2.da) {\n invokeArrayFns(instance2.da);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n instance2.isDeactivated = true;\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n instance2.__keepAliveStorageContainer = storageContainer;\n }\n };\n function unmount(vnode) {\n resetShapeFlag(vnode);\n _unmount(vnode, instance, parentSuspense, true);\n }\n function pruneCache(filter) {\n cache.forEach((vnode, key) => {\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : vnode.type\n );\n if (name && !filter(name)) {\n pruneCacheEntry(key);\n }\n });\n }\n function pruneCacheEntry(key) {\n const cached = cache.get(key);\n if (cached && (!current || !isSameVNodeType(cached, current))) {\n unmount(cached);\n } else if (current) {\n resetShapeFlag(current);\n }\n cache.delete(key);\n keys.delete(key);\n }\n watch(\n () => [props.include, props.exclude],\n ([include, exclude]) => {\n include && pruneCache((name) => matches(include, name));\n exclude && pruneCache((name) => !matches(exclude, name));\n },\n // prune post-render after `current` has been updated\n { flush: \"post\", deep: true }\n );\n let pendingCacheKey = null;\n const cacheSubtree = () => {\n if (pendingCacheKey != null) {\n if (isSuspense(instance.subTree.type)) {\n queuePostRenderEffect(() => {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }, instance.subTree.suspense);\n } else {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }\n }\n };\n onMounted(cacheSubtree);\n onUpdated(cacheSubtree);\n onBeforeUnmount(() => {\n cache.forEach((cached) => {\n const { subTree, suspense } = instance;\n const vnode = getInnerChild(subTree);\n if (cached.type === vnode.type && cached.key === vnode.key) {\n resetShapeFlag(vnode);\n const da = vnode.component.da;\n da && queuePostRenderEffect(da, suspense);\n return;\n }\n unmount(cached);\n });\n });\n return () => {\n pendingCacheKey = null;\n if (!slots.default) {\n return current = null;\n }\n const children = slots.default();\n const rawVNode = children[0];\n if (children.length > 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`KeepAlive should contain exactly one component child.`);\n }\n current = null;\n return children;\n } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) {\n current = null;\n return rawVNode;\n }\n let vnode = getInnerChild(rawVNode);\n if (vnode.type === Comment) {\n current = null;\n return vnode;\n }\n const comp = vnode.type;\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp\n );\n const { include, exclude, max } = props;\n if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) {\n vnode.shapeFlag &= -257;\n current = vnode;\n return rawVNode;\n }\n const key = vnode.key == null ? comp : vnode.key;\n const cachedVNode = cache.get(key);\n if (vnode.el) {\n vnode = cloneVNode(vnode);\n if (rawVNode.shapeFlag & 128) {\n rawVNode.ssContent = vnode;\n }\n }\n pendingCacheKey = key;\n if (cachedVNode) {\n vnode.el = cachedVNode.el;\n vnode.component = cachedVNode.component;\n if (vnode.transition) {\n setTransitionHooks(vnode, vnode.transition);\n }\n vnode.shapeFlag |= 512;\n keys.delete(key);\n keys.add(key);\n } else {\n keys.add(key);\n if (max && keys.size > parseInt(max, 10)) {\n pruneCacheEntry(keys.values().next().value);\n }\n }\n vnode.shapeFlag |= 256;\n current = vnode;\n return isSuspense(rawVNode.type) ? rawVNode : vnode;\n };\n }\n};\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n if (isArray(pattern)) {\n return pattern.some((p) => matches(p, name));\n } else if (isString(pattern)) {\n return pattern.split(\",\").includes(name);\n } else if (isRegExp(pattern)) {\n pattern.lastIndex = 0;\n return pattern.test(name);\n }\n return false;\n}\nfunction onActivated(hook, target) {\n registerKeepAliveHook(hook, \"a\", target);\n}\nfunction onDeactivated(hook, target) {\n registerKeepAliveHook(hook, \"da\", target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n const wrappedHook = hook.__wdc || (hook.__wdc = () => {\n let current = target;\n while (current) {\n if (current.isDeactivated) {\n return;\n }\n current = current.parent;\n }\n return hook();\n });\n injectHook(type, wrappedHook, target);\n if (target) {\n let current = target.parent;\n while (current && current.parent) {\n if (isKeepAlive(current.parent.vnode)) {\n injectToKeepAliveRoot(wrappedHook, type, target, current);\n }\n current = current.parent;\n }\n }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n const injected = injectHook(\n type,\n hook,\n keepAliveRoot,\n true\n /* prepend */\n );\n onUnmounted(() => {\n remove(keepAliveRoot[type], injected);\n }, target);\n}\nfunction resetShapeFlag(vnode) {\n vnode.shapeFlag &= -257;\n vnode.shapeFlag &= -513;\n}\nfunction getInnerChild(vnode) {\n return vnode.shapeFlag & 128 ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n if (target) {\n const hooks = target[type] || (target[type] = []);\n const wrappedHook = hook.__weh || (hook.__weh = (...args) => {\n pauseTracking();\n const reset = setCurrentInstance(target);\n const res = callWithAsyncErrorHandling(hook, target, type, args);\n reset();\n resetTracking();\n return res;\n });\n if (prepend) {\n hooks.unshift(wrappedHook);\n } else {\n hooks.push(wrappedHook);\n }\n return wrappedHook;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, \"\"));\n warn$1(\n `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` )\n );\n }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => {\n if (!isInSSRComponentSetup || lifecycle === \"sp\") {\n injectHook(lifecycle, (...args) => hook(...args), target);\n }\n};\nconst onBeforeMount = createHook(\"bm\");\nconst onMounted = createHook(\"m\");\nconst onBeforeUpdate = createHook(\n \"bu\"\n);\nconst onUpdated = createHook(\"u\");\nconst onBeforeUnmount = createHook(\n \"bum\"\n);\nconst onUnmounted = createHook(\"um\");\nconst onServerPrefetch = createHook(\n \"sp\"\n);\nconst onRenderTriggered = createHook(\"rtg\");\nconst onRenderTracked = createHook(\"rtc\");\nfunction onErrorCaptured(hook, target = currentInstance) {\n injectHook(\"ec\", hook, target);\n}\n\nconst COMPONENTS = \"components\";\nconst DIRECTIVES = \"directives\";\nfunction resolveComponent(name, maybeSelfReference) {\n return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = /* @__PURE__ */ Symbol.for(\"v-ndc\");\nfunction resolveDynamicComponent(component) {\n if (isString(component)) {\n return resolveAsset(COMPONENTS, component, false) || component;\n } else {\n return component || NULL_DYNAMIC_COMPONENT;\n }\n}\nfunction resolveDirective(name) {\n return resolveAsset(DIRECTIVES, name);\n}\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n const instance = currentRenderingInstance || currentInstance;\n if (instance) {\n const Component = instance.type;\n if (type === COMPONENTS) {\n const selfName = getComponentName(\n Component,\n false\n );\n if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {\n return Component;\n }\n }\n const res = (\n // local registration\n // check instance[type] first which is resolved for options API\n resolve(instance[type] || Component[type], name) || // global registration\n resolve(instance.appContext[type], name)\n );\n if (!res && maybeSelfReference) {\n return Component;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && warnMissing && !res) {\n const extra = type === COMPONENTS ? `\nIf this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;\n warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n }\n return res;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`\n );\n }\n}\nfunction resolve(registry, name) {\n return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);\n}\n\nfunction renderList(source, renderItem, cache, index) {\n let ret;\n const cached = cache && cache[index];\n const sourceIsArray = isArray(source);\n if (sourceIsArray || isString(source)) {\n const sourceIsReactiveArray = sourceIsArray && isReactive(source);\n let needsWrap = false;\n let isReadonlySource = false;\n if (sourceIsReactiveArray) {\n needsWrap = !isShallow(source);\n isReadonlySource = isReadonly(source);\n source = shallowReadArray(source);\n }\n ret = new Array(source.length);\n for (let i = 0, l = source.length; i < l; i++) {\n ret[i] = renderItem(\n needsWrap ? isReadonlySource ? toReadonly(toReactive(source[i])) : toReactive(source[i]) : source[i],\n i,\n void 0,\n cached && cached[i]\n );\n }\n } else if (typeof source === \"number\") {\n if (!!(process.env.NODE_ENV !== \"production\") && (!Number.isInteger(source) || source < 0)) {\n warn$1(\n `The v-for range expects a positive integer value but got ${source}.`\n );\n ret = [];\n } else {\n ret = new Array(source);\n for (let i = 0; i < source; i++) {\n ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);\n }\n }\n } else if (isObject(source)) {\n if (source[Symbol.iterator]) {\n ret = Array.from(\n source,\n (item, i) => renderItem(item, i, void 0, cached && cached[i])\n );\n } else {\n const keys = Object.keys(source);\n ret = new Array(keys.length);\n for (let i = 0, l = keys.length; i < l; i++) {\n const key = keys[i];\n ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n }\n }\n } else {\n ret = [];\n }\n if (cache) {\n cache[index] = ret;\n }\n return ret;\n}\n\nfunction createSlots(slots, dynamicSlots) {\n for (let i = 0; i < dynamicSlots.length; i++) {\n const slot = dynamicSlots[i];\n if (isArray(slot)) {\n for (let j = 0; j < slot.length; j++) {\n slots[slot[j].name] = slot[j].fn;\n }\n } else if (slot) {\n slots[slot.name] = slot.key ? (...args) => {\n const res = slot.fn(...args);\n if (res) res.key = slot.key;\n return res;\n } : slot.fn;\n }\n }\n return slots;\n}\n\nfunction renderSlot(slots, name, props = {}, fallback, noSlotted) {\n if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) {\n const hasProps = Object.keys(props).length > 0;\n if (name !== \"default\") props.name = name;\n return openBlock(), createBlock(\n Fragment,\n null,\n [createVNode(\"slot\", props, fallback && fallback())],\n hasProps ? -2 : 64\n );\n }\n let slot = slots[name];\n if (!!(process.env.NODE_ENV !== \"production\") && slot && slot.length > 1) {\n warn$1(\n `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.`\n );\n slot = () => [];\n }\n if (slot && slot._c) {\n slot._d = false;\n }\n openBlock();\n const validSlotContent = slot && ensureValidVNode(slot(props));\n const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch\n // key attached in the `createSlots` helper, respect that\n validSlotContent && validSlotContent.key;\n const rendered = createBlock(\n Fragment,\n {\n key: (slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content\n (!validSlotContent && fallback ? \"_fb\" : \"\")\n },\n validSlotContent || (fallback ? fallback() : []),\n validSlotContent && slots._ === 1 ? 64 : -2\n );\n if (!noSlotted && rendered.scopeId) {\n rendered.slotScopeIds = [rendered.scopeId + \"-s\"];\n }\n if (slot && slot._c) {\n slot._d = true;\n }\n return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n return vnodes.some((child) => {\n if (!isVNode(child)) return true;\n if (child.type === Comment) return false;\n if (child.type === Fragment && !ensureValidVNode(child.children))\n return false;\n return true;\n }) ? vnodes : null;\n}\n\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n const ret = {};\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(obj)) {\n warn$1(`v-on with no argument expects an object value.`);\n return ret;\n }\n for (const key in obj) {\n ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key];\n }\n return ret;\n}\n\nconst getPublicInstance = (i) => {\n if (!i) return null;\n if (isStatefulComponent(i)) return getComponentPublicInstance(i);\n return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = (\n // Move PURE marker to new line to workaround compiler discarding it\n // due to type annotation\n /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {\n $: (i) => i,\n $el: (i) => i.vnode.el,\n $data: (i) => i.data,\n $props: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.props) : i.props,\n $attrs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.attrs) : i.attrs,\n $slots: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.slots) : i.slots,\n $refs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.refs) : i.refs,\n $parent: (i) => getPublicInstance(i.parent),\n $root: (i) => getPublicInstance(i.root),\n $host: (i) => i.ce,\n $emit: (i) => i.emit,\n $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type,\n $forceUpdate: (i) => i.f || (i.f = () => {\n queueJob(i.update);\n }),\n $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),\n $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP\n })\n);\nconst isReservedPrefix = (key) => key === \"_\" || key === \"$\";\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n get({ _: instance }, key) {\n if (key === \"__v_skip\") {\n return true;\n }\n const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n if (!!(process.env.NODE_ENV !== \"production\") && key === \"__isVue\") {\n return true;\n }\n if (key[0] !== \"$\") {\n const n = accessCache[key];\n if (n !== void 0) {\n switch (n) {\n case 1 /* SETUP */:\n return setupState[key];\n case 2 /* DATA */:\n return data[key];\n case 4 /* CONTEXT */:\n return ctx[key];\n case 3 /* PROPS */:\n return props[key];\n }\n } else if (hasSetupBinding(setupState, key)) {\n accessCache[key] = 1 /* SETUP */;\n return setupState[key];\n } else if (__VUE_OPTIONS_API__ && data !== EMPTY_OBJ && hasOwn(data, key)) {\n accessCache[key] = 2 /* DATA */;\n return data[key];\n } else if (hasOwn(props, key)) {\n accessCache[key] = 3 /* PROPS */;\n return props[key];\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) {\n accessCache[key] = 0 /* OTHER */;\n }\n }\n const publicGetter = publicPropertiesMap[key];\n let cssModule, globalProperties;\n if (publicGetter) {\n if (key === \"$attrs\") {\n track(instance.attrs, \"get\", \"\");\n !!(process.env.NODE_ENV !== \"production\") && markAttrsAccessed();\n } else if (!!(process.env.NODE_ENV !== \"production\") && key === \"$slots\") {\n track(instance, \"get\", key);\n }\n return publicGetter(instance);\n } else if (\n // css module (injected by vue-loader)\n (cssModule = type.__cssModules) && (cssModule = cssModule[key])\n ) {\n return cssModule;\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (\n // global properties\n globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)\n ) {\n {\n return globalProperties[key];\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading\n // to infinite warning loop\n key.indexOf(\"__v\") !== 0)) {\n if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} must be accessed via $data because it starts with a reserved character (\"$\" or \"_\") and is not proxied on the render context.`\n );\n } else if (instance === currentRenderingInstance) {\n warn$1(\n `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`\n );\n }\n }\n },\n set({ _: instance }, key, value) {\n const { data, setupState, ctx } = instance;\n if (hasSetupBinding(setupState, key)) {\n setupState[key] = value;\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup && hasOwn(setupState, key)) {\n warn$1(`Cannot mutate <script setup> binding \"${key}\" from Options API.`);\n return false;\n } else if (__VUE_OPTIONS_API__ && data !== EMPTY_OBJ && hasOwn(data, key)) {\n data[key] = value;\n return true;\n } else if (hasOwn(instance.props, key)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`Attempting to mutate prop \"${key}\". Props are readonly.`);\n return false;\n }\n if (key[0] === \"$\" && key.slice(1) in instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `Attempting to mutate public property \"${key}\". Properties starting with $ are reserved and readonly.`\n );\n return false;\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && key in instance.appContext.config.globalProperties) {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n value\n });\n } else {\n ctx[key] = value;\n }\n }\n return true;\n },\n has({\n _: { data, setupState, accessCache, ctx, appContext, props, type }\n }, key) {\n let cssModules;\n return !!(accessCache[key] || __VUE_OPTIONS_API__ && data !== EMPTY_OBJ && key[0] !== \"$\" && hasOwn(data, key) || hasSetupBinding(setupState, key) || hasOwn(props, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key) || (cssModules = type.__cssModules) && cssModules[key]);\n },\n defineProperty(target, key, descriptor) {\n if (descriptor.get != null) {\n target._.accessCache[key] = 0;\n } else if (hasOwn(descriptor, \"value\")) {\n this.set(target, key, descriptor.value, null);\n }\n return Reflect.defineProperty(target, key, descriptor);\n }\n};\nif (!!(process.env.NODE_ENV !== \"production\") && true) {\n PublicInstanceProxyHandlers.ownKeys = (target) => {\n warn$1(\n `Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead.`\n );\n return Reflect.ownKeys(target);\n };\n}\nconst RuntimeCompiledPublicInstanceProxyHandlers = /* @__PURE__ */ extend({}, PublicInstanceProxyHandlers, {\n get(target, key) {\n if (key === Symbol.unscopables) {\n return;\n }\n return PublicInstanceProxyHandlers.get(target, key, target);\n },\n has(_, key) {\n const has = key[0] !== \"_\" && !isGloballyAllowed(key);\n if (!!(process.env.NODE_ENV !== \"production\") && !has && PublicInstanceProxyHandlers.has(_, key)) {\n warn$1(\n `Property ${JSON.stringify(\n key\n )} should not start with _ which is a reserved prefix for Vue internals.`\n );\n }\n return has;\n }\n});\nfunction createDevRenderContext(instance) {\n const target = {};\n Object.defineProperty(target, `_`, {\n configurable: true,\n enumerable: false,\n get: () => instance\n });\n Object.keys(publicPropertiesMap).forEach((key) => {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: false,\n get: () => publicPropertiesMap[key](instance),\n // intercepted by the proxy so no need for implementation,\n // but needed to prevent set errors\n set: NOOP\n });\n });\n return target;\n}\nfunction exposePropsOnRenderContext(instance) {\n const {\n ctx,\n propsOptions: [propsOptions]\n } = instance;\n if (propsOptions) {\n Object.keys(propsOptions).forEach((key) => {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => instance.props[key],\n set: NOOP\n });\n });\n }\n}\nfunction exposeSetupStateOnRenderContext(instance) {\n const { ctx, setupState } = instance;\n Object.keys(toRaw(setupState)).forEach((key) => {\n if (!setupState.__isScriptSetup) {\n if (isReservedPrefix(key[0])) {\n warn$1(\n `setup() return property ${JSON.stringify(\n key\n )} should not start with \"$\" or \"_\" which are reserved prefixes for Vue internals.`\n );\n return;\n }\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => setupState[key],\n set: NOOP\n });\n }\n });\n}\n\nconst warnRuntimeUsage = (method) => warn$1(\n `${method}() is a compiler-hint helper that is only usable inside <script setup> of a single file component. Its arguments should be compiled away and passing it at runtime has no effect.`\n);\nfunction defineProps() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineProps`);\n }\n return null;\n}\nfunction defineEmits() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineEmits`);\n }\n return null;\n}\nfunction defineExpose(exposed) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineExpose`);\n }\n}\nfunction defineOptions(options) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineOptions`);\n }\n}\nfunction defineSlots() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`defineSlots`);\n }\n return null;\n}\nfunction defineModel() {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(\"defineModel\");\n }\n}\nfunction withDefaults(props, defaults) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warnRuntimeUsage(`withDefaults`);\n }\n return null;\n}\nfunction useSlots() {\n return getContext(\"useSlots\").slots;\n}\nfunction useAttrs() {\n return getContext(\"useAttrs\").attrs;\n}\nfunction getContext(calledFunctionName) {\n const i = getCurrentInstance();\n if (!!(process.env.NODE_ENV !== \"production\") && !i) {\n warn$1(`${calledFunctionName}() called without active instance.`);\n }\n return i.setupContext || (i.setupContext = createSetupContext(i));\n}\nfunction normalizePropsOrEmits(props) {\n return isArray(props) ? props.reduce(\n (normalized, p) => (normalized[p] = null, normalized),\n {}\n ) : props;\n}\nfunction mergeDefaults(raw, defaults) {\n const props = normalizePropsOrEmits(raw);\n for (const key in defaults) {\n if (key.startsWith(\"__skip\")) continue;\n let opt = props[key];\n if (opt) {\n if (isArray(opt) || isFunction(opt)) {\n opt = props[key] = { type: opt, default: defaults[key] };\n } else {\n opt.default = defaults[key];\n }\n } else if (opt === null) {\n opt = props[key] = { default: defaults[key] };\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`props default key \"${key}\" has no corresponding declaration.`);\n }\n if (opt && defaults[`__skip_${key}`]) {\n opt.skipFactory = true;\n }\n }\n return props;\n}\nfunction mergeModels(a, b) {\n if (!a || !b) return a || b;\n if (isArray(a) && isArray(b)) return a.concat(b);\n return extend({}, normalizePropsOrEmits(a), normalizePropsOrEmits(b));\n}\nfunction createPropsRestProxy(props, excludedKeys) {\n const ret = {};\n for (const key in props) {\n if (!excludedKeys.includes(key)) {\n Object.defineProperty(ret, key, {\n enumerable: true,\n get: () => props[key]\n });\n }\n }\n return ret;\n}\nfunction withAsyncContext(getAwaitable) {\n const ctx = getCurrentInstance();\n const inSSRSetup = isInSSRComponentSetup;\n if (!!(process.env.NODE_ENV !== \"production\") && !ctx) {\n warn$1(\n `withAsyncContext called without active current instance. This is likely a bug.`\n );\n }\n let awaitable = getAwaitable();\n unsetCurrentInstance();\n if (inSSRSetup) {\n setInSSRSetupState(false);\n }\n const restore = () => {\n setCurrentInstance(ctx);\n if (inSSRSetup) {\n setInSSRSetupState(true);\n }\n };\n const cleanup = () => {\n if (getCurrentInstance() !== ctx) ctx.scope.off();\n unsetCurrentInstance();\n if (inSSRSetup) {\n setInSSRSetupState(false);\n }\n };\n if (isPromise(awaitable)) {\n awaitable = awaitable.catch((e) => {\n restore();\n Promise.resolve().then(() => Promise.resolve().then(cleanup));\n throw e;\n });\n }\n return [\n awaitable,\n () => {\n restore();\n Promise.resolve().then(cleanup);\n }\n ];\n}\n\nfunction createDuplicateChecker() {\n const cache = /* @__PURE__ */ Object.create(null);\n return (type, key) => {\n if (cache[key]) {\n warn$1(`${type} property \"${key}\" is already defined in ${cache[key]}.`);\n } else {\n cache[key] = type;\n }\n };\n}\nlet shouldCacheAccess = true;\nfunction applyOptions(instance) {\n const options = resolveMergedOptions(instance);\n const publicThis = instance.proxy;\n const ctx = instance.ctx;\n shouldCacheAccess = false;\n if (options.beforeCreate) {\n callHook(options.beforeCreate, instance, \"bc\");\n }\n const {\n // state\n data: dataOptions,\n computed: computedOptions,\n methods,\n watch: watchOptions,\n provide: provideOptions,\n inject: injectOptions,\n // lifecycle\n created,\n beforeMount,\n mounted,\n beforeUpdate,\n updated,\n activated,\n deactivated,\n beforeDestroy,\n beforeUnmount,\n destroyed,\n unmounted,\n render,\n renderTracked,\n renderTriggered,\n errorCaptured,\n serverPrefetch,\n // public API\n expose,\n inheritAttrs,\n // assets\n components,\n directives,\n filters\n } = options;\n const checkDuplicateProperties = !!(process.env.NODE_ENV !== \"production\") ? createDuplicateChecker() : null;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const [propsOptions] = instance.propsOptions;\n if (propsOptions) {\n for (const key in propsOptions) {\n checkDuplicateProperties(\"Props\" /* PROPS */, key);\n }\n }\n }\n if (injectOptions) {\n resolveInjections(injectOptions, ctx, checkDuplicateProperties);\n }\n if (methods) {\n for (const key in methods) {\n const methodHandler = methods[key];\n if (isFunction(methodHandler)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n Object.defineProperty(ctx, key, {\n value: methodHandler.bind(publicThis),\n configurable: true,\n enumerable: true,\n writable: true\n });\n } else {\n ctx[key] = methodHandler.bind(publicThis);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Methods\" /* METHODS */, key);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `Method \"${key}\" has type \"${typeof methodHandler}\" in the component definition. Did you reference the function correctly?`\n );\n }\n }\n }\n if (dataOptions) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(dataOptions)) {\n warn$1(\n `The data option must be a function. Plain object usage is no longer supported.`\n );\n }\n const data = dataOptions.call(publicThis, publicThis);\n if (!!(process.env.NODE_ENV !== \"production\") && isPromise(data)) {\n warn$1(\n `data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>.`\n );\n }\n if (!isObject(data)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`data() should return an object.`);\n } else {\n instance.data = reactive(data);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n for (const key in data) {\n checkDuplicateProperties(\"Data\" /* DATA */, key);\n if (!isReservedPrefix(key[0])) {\n Object.defineProperty(ctx, key, {\n configurable: true,\n enumerable: true,\n get: () => data[key],\n set: NOOP\n });\n }\n }\n }\n }\n }\n shouldCacheAccess = true;\n if (computedOptions) {\n for (const key in computedOptions) {\n const opt = computedOptions[key];\n const get = isFunction(opt) ? opt.bind(publicThis, publicThis) : isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP;\n if (!!(process.env.NODE_ENV !== \"production\") && get === NOOP) {\n warn$1(`Computed property \"${key}\" has no getter.`);\n }\n const set = !isFunction(opt) && isFunction(opt.set) ? opt.set.bind(publicThis) : !!(process.env.NODE_ENV !== \"production\") ? () => {\n warn$1(\n `Write operation failed: computed property \"${key}\" is readonly.`\n );\n } : NOOP;\n const c = computed({\n get,\n set\n });\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => c.value,\n set: (v) => c.value = v\n });\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Computed\" /* COMPUTED */, key);\n }\n }\n }\n if (watchOptions) {\n for (const key in watchOptions) {\n createWatcher(watchOptions[key], ctx, publicThis, key);\n }\n }\n if (provideOptions) {\n const provides = isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions;\n Reflect.ownKeys(provides).forEach((key) => {\n provide(key, provides[key]);\n });\n }\n if (created) {\n callHook(created, instance, \"c\");\n }\n function registerLifecycleHook(register, hook) {\n if (isArray(hook)) {\n hook.forEach((_hook) => register(_hook.bind(publicThis)));\n } else if (hook) {\n register(hook.bind(publicThis));\n }\n }\n registerLifecycleHook(onBeforeMount, beforeMount);\n registerLifecycleHook(onMounted, mounted);\n registerLifecycleHook(onBeforeUpdate, beforeUpdate);\n registerLifecycleHook(onUpdated, updated);\n registerLifecycleHook(onActivated, activated);\n registerLifecycleHook(onDeactivated, deactivated);\n registerLifecycleHook(onErrorCaptured, errorCaptured);\n registerLifecycleHook(onRenderTracked, renderTracked);\n registerLifecycleHook(onRenderTriggered, renderTriggered);\n registerLifecycleHook(onBeforeUnmount, beforeUnmount);\n registerLifecycleHook(onUnmounted, unmounted);\n registerLifecycleHook(onServerPrefetch, serverPrefetch);\n if (isArray(expose)) {\n if (expose.length) {\n const exposed = instance.exposed || (instance.exposed = {});\n expose.forEach((key) => {\n Object.defineProperty(exposed, key, {\n get: () => publicThis[key],\n set: (val) => publicThis[key] = val,\n enumerable: true\n });\n });\n } else if (!instance.exposed) {\n instance.exposed = {};\n }\n }\n if (render && instance.render === NOOP) {\n instance.render = render;\n }\n if (inheritAttrs != null) {\n instance.inheritAttrs = inheritAttrs;\n }\n if (components) instance.components = components;\n if (directives) instance.directives = directives;\n if (serverPrefetch) {\n markAsyncBoundary(instance);\n }\n}\nfunction resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP) {\n if (isArray(injectOptions)) {\n injectOptions = normalizeInject(injectOptions);\n }\n for (const key in injectOptions) {\n const opt = injectOptions[key];\n let injected;\n if (isObject(opt)) {\n if (\"default\" in opt) {\n injected = inject(\n opt.from || key,\n opt.default,\n true\n );\n } else {\n injected = inject(opt.from || key);\n }\n } else {\n injected = inject(opt);\n }\n if (isRef(injected)) {\n Object.defineProperty(ctx, key, {\n enumerable: true,\n configurable: true,\n get: () => injected.value,\n set: (v) => injected.value = v\n });\n } else {\n ctx[key] = injected;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n checkDuplicateProperties(\"Inject\" /* INJECT */, key);\n }\n }\n}\nfunction callHook(hook, instance, type) {\n callWithAsyncErrorHandling(\n isArray(hook) ? hook.map((h) => h.bind(instance.proxy)) : hook.bind(instance.proxy),\n instance,\n type\n );\n}\nfunction createWatcher(raw, ctx, publicThis, key) {\n let getter = key.includes(\".\") ? createPathGetter(publicThis, key) : () => publicThis[key];\n if (isString(raw)) {\n const handler = ctx[raw];\n if (isFunction(handler)) {\n {\n watch(getter, handler);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch handler specified by key \"${raw}\"`, handler);\n }\n } else if (isFunction(raw)) {\n {\n watch(getter, raw.bind(publicThis));\n }\n } else if (isObject(raw)) {\n if (isArray(raw)) {\n raw.forEach((r) => createWatcher(r, ctx, publicThis, key));\n } else {\n const handler = isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler];\n if (isFunction(handler)) {\n watch(getter, handler, raw);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch handler specified by key \"${raw.handler}\"`, handler);\n }\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid watch option: \"${key}\"`, raw);\n }\n}\nfunction resolveMergedOptions(instance) {\n const base = instance.type;\n const { mixins, extends: extendsOptions } = base;\n const {\n mixins: globalMixins,\n optionsCache: cache,\n config: { optionMergeStrategies }\n } = instance.appContext;\n const cached = cache.get(base);\n let resolved;\n if (cached) {\n resolved = cached;\n } else if (!globalMixins.length && !mixins && !extendsOptions) {\n {\n resolved = base;\n }\n } else {\n resolved = {};\n if (globalMixins.length) {\n globalMixins.forEach(\n (m) => mergeOptions(resolved, m, optionMergeStrategies, true)\n );\n }\n mergeOptions(resolved, base, optionMergeStrategies);\n }\n if (isObject(base)) {\n cache.set(base, resolved);\n }\n return resolved;\n}\nfunction mergeOptions(to, from, strats, asMixin = false) {\n const { mixins, extends: extendsOptions } = from;\n if (extendsOptions) {\n mergeOptions(to, extendsOptions, strats, true);\n }\n if (mixins) {\n mixins.forEach(\n (m) => mergeOptions(to, m, strats, true)\n );\n }\n for (const key in from) {\n if (asMixin && key === \"expose\") {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(\n `\"expose\" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.`\n );\n } else {\n const strat = internalOptionMergeStrats[key] || strats && strats[key];\n to[key] = strat ? strat(to[key], from[key]) : from[key];\n }\n }\n return to;\n}\nconst internalOptionMergeStrats = {\n data: mergeDataFn,\n props: mergeEmitsOrPropsOptions,\n emits: mergeEmitsOrPropsOptions,\n // objects\n methods: mergeObjectOptions,\n computed: mergeObjectOptions,\n // lifecycle\n beforeCreate: mergeAsArray,\n created: mergeAsArray,\n beforeMount: mergeAsArray,\n mounted: mergeAsArray,\n beforeUpdate: mergeAsArray,\n updated: mergeAsArray,\n beforeDestroy: mergeAsArray,\n beforeUnmount: mergeAsArray,\n destroyed: mergeAsArray,\n unmounted: mergeAsArray,\n activated: mergeAsArray,\n deactivated: mergeAsArray,\n errorCaptured: mergeAsArray,\n serverPrefetch: mergeAsArray,\n // assets\n components: mergeObjectOptions,\n directives: mergeObjectOptions,\n // watch\n watch: mergeWatchOptions,\n // provide / inject\n provide: mergeDataFn,\n inject: mergeInject\n};\nfunction mergeDataFn(to, from) {\n if (!from) {\n return to;\n }\n if (!to) {\n return from;\n }\n return function mergedDataFn() {\n return (extend)(\n isFunction(to) ? to.call(this, this) : to,\n isFunction(from) ? from.call(this, this) : from\n );\n };\n}\nfunction mergeInject(to, from) {\n return mergeObjectOptions(normalizeInject(to), normalizeInject(from));\n}\nfunction normalizeInject(raw) {\n if (isArray(raw)) {\n const res = {};\n for (let i = 0; i < raw.length; i++) {\n res[raw[i]] = raw[i];\n }\n return res;\n }\n return raw;\n}\nfunction mergeAsArray(to, from) {\n return to ? [...new Set([].concat(to, from))] : from;\n}\nfunction mergeObjectOptions(to, from) {\n return to ? extend(/* @__PURE__ */ Object.create(null), to, from) : from;\n}\nfunction mergeEmitsOrPropsOptions(to, from) {\n if (to) {\n if (isArray(to) && isArray(from)) {\n return [.../* @__PURE__ */ new Set([...to, ...from])];\n }\n return extend(\n /* @__PURE__ */ Object.create(null),\n normalizePropsOrEmits(to),\n normalizePropsOrEmits(from != null ? from : {})\n );\n } else {\n return from;\n }\n}\nfunction mergeWatchOptions(to, from) {\n if (!to) return from;\n if (!from) return to;\n const merged = extend(/* @__PURE__ */ Object.create(null), to);\n for (const key in from) {\n merged[key] = mergeAsArray(to[key], from[key]);\n }\n return merged;\n}\n\nfunction createAppContext() {\n return {\n app: null,\n config: {\n isNativeTag: NO,\n performance: false,\n globalProperties: {},\n optionMergeStrategies: {},\n errorHandler: void 0,\n warnHandler: void 0,\n compilerOptions: {}\n },\n mixins: [],\n components: {},\n directives: {},\n provides: /* @__PURE__ */ Object.create(null),\n optionsCache: /* @__PURE__ */ new WeakMap(),\n propsCache: /* @__PURE__ */ new WeakMap(),\n emitsCache: /* @__PURE__ */ new WeakMap()\n };\n}\nlet uid$1 = 0;\nfunction createAppAPI(render, hydrate) {\n return function createApp(rootComponent, rootProps = null) {\n if (!isFunction(rootComponent)) {\n rootComponent = extend({}, rootComponent);\n }\n if (rootProps != null && !isObject(rootProps)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`root props passed to app.mount() must be an object.`);\n rootProps = null;\n }\n const context = createAppContext();\n const installedPlugins = /* @__PURE__ */ new WeakSet();\n const pluginCleanupFns = [];\n let isMounted = false;\n const app = context.app = {\n _uid: uid$1++,\n _component: rootComponent,\n _props: rootProps,\n _container: null,\n _context: context,\n _instance: null,\n version,\n get config() {\n return context.config;\n },\n set config(v) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `app.config cannot be replaced. Modify individual options instead.`\n );\n }\n },\n use(plugin, ...options) {\n if (installedPlugins.has(plugin)) {\n !!(process.env.NODE_ENV !== \"production\") && warn$1(`Plugin has already been applied to target app.`);\n } else if (plugin && isFunction(plugin.install)) {\n installedPlugins.add(plugin);\n plugin.install(app, ...options);\n } else if (isFunction(plugin)) {\n installedPlugins.add(plugin);\n plugin(app, ...options);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `A plugin must either be a function or an object with an \"install\" function.`\n );\n }\n return app;\n },\n mixin(mixin) {\n if (__VUE_OPTIONS_API__) {\n if (!context.mixins.includes(mixin)) {\n context.mixins.push(mixin);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n \"Mixin has already been applied to target app\" + (mixin.name ? `: ${mixin.name}` : \"\")\n );\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Mixins are only available in builds supporting Options API\");\n }\n return app;\n },\n component(name, component) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateComponentName(name, context.config);\n }\n if (!component) {\n return context.components[name];\n }\n if (!!(process.env.NODE_ENV !== \"production\") && context.components[name]) {\n warn$1(`Component \"${name}\" has already been registered in target app.`);\n }\n context.components[name] = component;\n return app;\n },\n directive(name, directive) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateDirectiveName(name);\n }\n if (!directive) {\n return context.directives[name];\n }\n if (!!(process.env.NODE_ENV !== \"production\") && context.directives[name]) {\n warn$1(`Directive \"${name}\" has already been registered in target app.`);\n }\n context.directives[name] = directive;\n return app;\n },\n mount(rootContainer, isHydrate, namespace) {\n if (!isMounted) {\n if (!!(process.env.NODE_ENV !== \"production\") && rootContainer.__vue_app__) {\n warn$1(\n `There is already an app instance mounted on the host container.\n If you want to mount another app on the same host container, you need to unmount the previous app by calling \\`app.unmount()\\` first.`\n );\n }\n const vnode = app._ceVNode || createVNode(rootComponent, rootProps);\n vnode.appContext = context;\n if (namespace === true) {\n namespace = \"svg\";\n } else if (namespace === false) {\n namespace = void 0;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n context.reload = () => {\n const cloned = cloneVNode(vnode);\n cloned.el = null;\n render(cloned, rootContainer, namespace);\n };\n }\n if (isHydrate && hydrate) {\n hydrate(vnode, rootContainer);\n } else {\n render(vnode, rootContainer, namespace);\n }\n isMounted = true;\n app._container = rootContainer;\n rootContainer.__vue_app__ = app;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n app._instance = vnode.component;\n devtoolsInitApp(app, version);\n }\n return getComponentPublicInstance(vnode.component);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\n `App has already been mounted.\nIf you want to remount the same app, move your app creation logic into a factory function and create fresh app instances for each mount - e.g. \\`const createMyApp = () => createApp(App)\\``\n );\n }\n },\n onUnmount(cleanupFn) {\n if (!!(process.env.NODE_ENV !== \"production\") && typeof cleanupFn !== \"function\") {\n warn$1(\n `Expected function as first argument to app.onUnmount(), but got ${typeof cleanupFn}`\n );\n }\n pluginCleanupFns.push(cleanupFn);\n },\n unmount() {\n if (isMounted) {\n callWithAsyncErrorHandling(\n pluginCleanupFns,\n app._instance,\n 16\n );\n render(null, app._container);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n app._instance = null;\n devtoolsUnmountApp(app);\n }\n delete app._container.__vue_app__;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Cannot unmount an app that is not mounted.`);\n }\n },\n provide(key, value) {\n if (!!(process.env.NODE_ENV !== \"production\") && key in context.provides) {\n if (hasOwn(context.provides, key)) {\n warn$1(\n `App already provides property with key \"${String(key)}\". It will be overwritten with the new value.`\n );\n } else {\n warn$1(\n `App already provides property with key \"${String(key)}\" inherited from its parent element. It will be overwritten with the new value.`\n );\n }\n }\n context.provides[key] = value;\n return app;\n },\n runWithContext(fn) {\n const lastApp = currentApp;\n currentApp = app;\n try {\n return fn();\n } finally {\n currentApp = lastApp;\n }\n }\n };\n return app;\n };\n}\nlet currentApp = null;\n\nfunction useModel(props, name, options = EMPTY_OBJ) {\n const i = getCurrentInstance();\n if (!!(process.env.NODE_ENV !== \"production\") && !i) {\n warn$1(`useModel() called without active instance.`);\n return ref();\n }\n const camelizedName = camelize(name);\n if (!!(process.env.NODE_ENV !== \"production\") && !i.propsOptions[0][camelizedName]) {\n warn$1(`useModel() called with prop \"${name}\" which is not declared.`);\n return ref();\n }\n const hyphenatedName = hyphenate(name);\n const modifiers = getModelModifiers(props, camelizedName);\n const res = customRef((track, trigger) => {\n let localValue;\n let prevSetValue = EMPTY_OBJ;\n let prevEmittedValue;\n watchSyncEffect(() => {\n const propValue = props[camelizedName];\n if (hasChanged(localValue, propValue)) {\n localValue = propValue;\n trigger();\n }\n });\n return {\n get() {\n track();\n return options.get ? options.get(localValue) : localValue;\n },\n set(value) {\n const emittedValue = options.set ? options.set(value) : value;\n if (!hasChanged(emittedValue, localValue) && !(prevSetValue !== EMPTY_OBJ && hasChanged(value, prevSetValue))) {\n return;\n }\n const rawProps = i.vnode.props;\n if (!(rawProps && // check if parent has passed v-model\n (name in rawProps || camelizedName in rawProps || hyphenatedName in rawProps) && (`onUpdate:${name}` in rawProps || `onUpdate:${camelizedName}` in rawProps || `onUpdate:${hyphenatedName}` in rawProps))) {\n localValue = value;\n trigger();\n }\n i.emit(`update:${name}`, emittedValue);\n if (hasChanged(value, emittedValue) && hasChanged(value, prevSetValue) && !hasChanged(emittedValue, prevEmittedValue)) {\n trigger();\n }\n prevSetValue = value;\n prevEmittedValue = emittedValue;\n }\n };\n });\n res[Symbol.iterator] = () => {\n let i2 = 0;\n return {\n next() {\n if (i2 < 2) {\n return { value: i2++ ? modifiers || EMPTY_OBJ : res, done: false };\n } else {\n return { done: true };\n }\n }\n };\n };\n return res;\n}\nconst getModelModifiers = (props, modelName) => {\n return modelName === \"modelValue\" || modelName === \"model-value\" ? props.modelModifiers : props[`${modelName}Modifiers`] || props[`${camelize(modelName)}Modifiers`] || props[`${hyphenate(modelName)}Modifiers`];\n};\n\nfunction emit(instance, event, ...rawArgs) {\n if (instance.isUnmounted) return;\n const props = instance.vnode.props || EMPTY_OBJ;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const {\n emitsOptions,\n propsOptions: [propsOptions]\n } = instance;\n if (emitsOptions) {\n if (!(event in emitsOptions) && true) {\n if (!propsOptions || !(toHandlerKey(camelize(event)) in propsOptions)) {\n warn$1(\n `Component emitted event \"${event}\" but it is neither declared in the emits option nor as an \"${toHandlerKey(camelize(event))}\" prop.`\n );\n }\n } else {\n const validator = emitsOptions[event];\n if (isFunction(validator)) {\n const isValid = validator(...rawArgs);\n if (!isValid) {\n warn$1(\n `Invalid event arguments: event validation failed for event \"${event}\".`\n );\n }\n }\n }\n }\n }\n let args = rawArgs;\n const isModelListener = event.startsWith(\"update:\");\n const modifiers = isModelListener && getModelModifiers(props, event.slice(7));\n if (modifiers) {\n if (modifiers.trim) {\n args = rawArgs.map((a) => isString(a) ? a.trim() : a);\n }\n if (modifiers.number) {\n args = rawArgs.map(looseToNumber);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentEmit(instance, event, args);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\n warn$1(\n `Event \"${lowerCaseEvent}\" is emitted in component ${formatComponentName(\n instance,\n instance.type\n )} but the handler is registered for \"${event}\". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use \"${hyphenate(\n event\n )}\" instead of \"${event}\".`\n );\n }\n }\n let handlerName;\n let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)\n props[handlerName = toHandlerKey(camelize(event))];\n if (!handler && isModelListener) {\n handler = props[handlerName = toHandlerKey(hyphenate(event))];\n }\n if (handler) {\n callWithAsyncErrorHandling(\n handler,\n instance,\n 6,\n args\n );\n }\n const onceHandler = props[handlerName + `Once`];\n if (onceHandler) {\n if (!instance.emitted) {\n instance.emitted = {};\n } else if (instance.emitted[handlerName]) {\n return;\n }\n instance.emitted[handlerName] = true;\n callWithAsyncErrorHandling(\n onceHandler,\n instance,\n 6,\n args\n );\n }\n}\nconst mixinEmitsCache = /* @__PURE__ */ new WeakMap();\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n const cache = __VUE_OPTIONS_API__ && asMixin ? mixinEmitsCache : appContext.emitsCache;\n const cached = cache.get(comp);\n if (cached !== void 0) {\n return cached;\n }\n const raw = comp.emits;\n let normalized = {};\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendEmits = (raw2) => {\n const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);\n if (normalizedFromExtend) {\n hasExtends = true;\n extend(normalized, normalizedFromExtend);\n }\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendEmits);\n }\n if (comp.extends) {\n extendEmits(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendEmits);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, null);\n }\n return null;\n }\n if (isArray(raw)) {\n raw.forEach((key) => normalized[key] = null);\n } else {\n extend(normalized, raw);\n }\n if (isObject(comp)) {\n cache.set(comp, normalized);\n }\n return normalized;\n}\nfunction isEmitListener(options, key) {\n if (!options || !isOn(key)) {\n return false;\n }\n key = key.slice(2).replace(/Once$/, \"\");\n return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);\n}\n\nlet accessedAttrs = false;\nfunction markAttrsAccessed() {\n accessedAttrs = true;\n}\nfunction renderComponentRoot(instance) {\n const {\n type: Component,\n vnode,\n proxy,\n withProxy,\n propsOptions: [propsOptions],\n slots,\n attrs,\n emit,\n render,\n renderCache,\n props,\n data,\n setupState,\n ctx,\n inheritAttrs\n } = instance;\n const prev = setCurrentRenderingInstance(instance);\n let result;\n let fallthroughAttrs;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n accessedAttrs = false;\n }\n try {\n if (vnode.shapeFlag & 4) {\n const proxyToUse = withProxy || proxy;\n const thisProxy = !!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup ? new Proxy(proxyToUse, {\n get(target, key, receiver) {\n warn$1(\n `Property '${String(\n key\n )}' was accessed via 'this'. Avoid using 'this' in templates.`\n );\n return Reflect.get(target, key, receiver);\n }\n }) : proxyToUse;\n result = normalizeVNode(\n render.call(\n thisProxy,\n proxyToUse,\n renderCache,\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n setupState,\n data,\n ctx\n )\n );\n fallthroughAttrs = attrs;\n } else {\n const render2 = Component;\n if (!!(process.env.NODE_ENV !== \"production\") && attrs === props) {\n markAttrsAccessed();\n }\n result = normalizeVNode(\n render2.length > 1 ? render2(\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n !!(process.env.NODE_ENV !== \"production\") ? {\n get attrs() {\n markAttrsAccessed();\n return shallowReadonly(attrs);\n },\n slots,\n emit\n } : { attrs, slots, emit }\n ) : render2(\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(props) : props,\n null\n )\n );\n fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);\n }\n } catch (err) {\n blockStack.length = 0;\n handleError(err, instance, 1);\n result = createVNode(Comment);\n }\n let root = result;\n let setRoot = void 0;\n if (!!(process.env.NODE_ENV !== \"production\") && result.patchFlag > 0 && result.patchFlag & 2048) {\n [root, setRoot] = getChildRoot(result);\n }\n if (fallthroughAttrs && inheritAttrs !== false) {\n const keys = Object.keys(fallthroughAttrs);\n const { shapeFlag } = root;\n if (keys.length) {\n if (shapeFlag & (1 | 6)) {\n if (propsOptions && keys.some(isModelListener)) {\n fallthroughAttrs = filterModelListeners(\n fallthroughAttrs,\n propsOptions\n );\n }\n root = cloneVNode(root, fallthroughAttrs, false, true);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !accessedAttrs && root.type !== Comment) {\n const allAttrs = Object.keys(attrs);\n const eventAttrs = [];\n const extraAttrs = [];\n for (let i = 0, l = allAttrs.length; i < l; i++) {\n const key = allAttrs[i];\n if (isOn(key)) {\n if (!isModelListener(key)) {\n eventAttrs.push(key[2].toLowerCase() + key.slice(3));\n }\n } else {\n extraAttrs.push(key);\n }\n }\n if (extraAttrs.length) {\n warn$1(\n `Extraneous non-props attributes (${extraAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text or teleport root nodes.`\n );\n }\n if (eventAttrs.length) {\n warn$1(\n `Extraneous non-emits event listeners (${eventAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the \"emits\" option.`\n );\n }\n }\n }\n }\n if (vnode.dirs) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n warn$1(\n `Runtime directive used on component with non-element root node. The directives will not function as intended.`\n );\n }\n root = cloneVNode(root, null, false, true);\n root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n }\n if (vnode.transition) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n warn$1(\n `Component inside <Transition> renders non-element root node that cannot be animated.`\n );\n }\n setTransitionHooks(root, vnode.transition);\n }\n if (!!(process.env.NODE_ENV !== \"production\") && setRoot) {\n setRoot(root);\n } else {\n result = root;\n }\n setCurrentRenderingInstance(prev);\n return result;\n}\nconst getChildRoot = (vnode) => {\n const rawChildren = vnode.children;\n const dynamicChildren = vnode.dynamicChildren;\n const childRoot = filterSingleRoot(rawChildren, false);\n if (!childRoot) {\n return [vnode, void 0];\n } else if (!!(process.env.NODE_ENV !== \"production\") && childRoot.patchFlag > 0 && childRoot.patchFlag & 2048) {\n return getChildRoot(childRoot);\n }\n const index = rawChildren.indexOf(childRoot);\n const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\n const setRoot = (updatedRoot) => {\n rawChildren[index] = updatedRoot;\n if (dynamicChildren) {\n if (dynamicIndex > -1) {\n dynamicChildren[dynamicIndex] = updatedRoot;\n } else if (updatedRoot.patchFlag > 0) {\n vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\n }\n }\n };\n return [normalizeVNode(childRoot), setRoot];\n};\nfunction filterSingleRoot(children, recurse = true) {\n let singleRoot;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n if (child.type !== Comment || child.children === \"v-if\") {\n if (singleRoot) {\n return;\n } else {\n singleRoot = child;\n if (!!(process.env.NODE_ENV !== \"production\") && recurse && singleRoot.patchFlag > 0 && singleRoot.patchFlag & 2048) {\n return filterSingleRoot(singleRoot.children);\n }\n }\n }\n } else {\n return;\n }\n }\n return singleRoot;\n}\nconst getFunctionalFallthrough = (attrs) => {\n let res;\n for (const key in attrs) {\n if (key === \"class\" || key === \"style\" || isOn(key)) {\n (res || (res = {}))[key] = attrs[key];\n }\n }\n return res;\n};\nconst filterModelListeners = (attrs, props) => {\n const res = {};\n for (const key in attrs) {\n if (!isModelListener(key) || !(key.slice(9) in props)) {\n res[key] = attrs[key];\n }\n }\n return res;\n};\nconst isElementRoot = (vnode) => {\n return vnode.shapeFlag & (6 | 1) || vnode.type === Comment;\n};\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n const { props: prevProps, children: prevChildren, component } = prevVNode;\n const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n const emits = component.emitsOptions;\n if (!!(process.env.NODE_ENV !== \"production\") && (prevChildren || nextChildren) && isHmrUpdating) {\n return true;\n }\n if (nextVNode.dirs || nextVNode.transition) {\n return true;\n }\n if (optimized && patchFlag >= 0) {\n if (patchFlag & 1024) {\n return true;\n }\n if (patchFlag & 16) {\n if (!prevProps) {\n return !!nextProps;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n } else if (patchFlag & 8) {\n const dynamicProps = nextVNode.dynamicProps;\n for (let i = 0; i < dynamicProps.length; i++) {\n const key = dynamicProps[i];\n if (hasPropValueChanged(nextProps, prevProps, key) && !isEmitListener(emits, key)) {\n return true;\n }\n }\n }\n } else {\n if (prevChildren || nextChildren) {\n if (!nextChildren || !nextChildren.$stable) {\n return true;\n }\n }\n if (prevProps === nextProps) {\n return false;\n }\n if (!prevProps) {\n return !!nextProps;\n }\n if (!nextProps) {\n return true;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n }\n return false;\n}\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\n const nextKeys = Object.keys(nextProps);\n if (nextKeys.length !== Object.keys(prevProps).length) {\n return true;\n }\n for (let i = 0; i < nextKeys.length; i++) {\n const key = nextKeys[i];\n if (hasPropValueChanged(nextProps, prevProps, key) && !isEmitListener(emitsOptions, key)) {\n return true;\n }\n }\n return false;\n}\nfunction hasPropValueChanged(nextProps, prevProps, key) {\n const nextProp = nextProps[key];\n const prevProp = prevProps[key];\n if (key === \"style\" && isObject(nextProp) && isObject(prevProp)) {\n return !looseEqual(nextProp, prevProp);\n }\n return nextProp !== prevProp;\n}\nfunction updateHOCHostEl({ vnode, parent, suspense }, el) {\n while (parent) {\n const root = parent.subTree;\n if (root.suspense && root.suspense.activeBranch === vnode) {\n root.suspense.vnode.el = root.el = el;\n vnode = root;\n }\n if (root === vnode) {\n (vnode = parent.vnode).el = el;\n parent = parent.parent;\n } else {\n break;\n }\n }\n if (suspense && suspense.activeBranch === vnode) {\n suspense.vnode.el = el;\n }\n}\n\nconst internalObjectProto = {};\nconst createInternalObject = () => Object.create(internalObjectProto);\nconst isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto;\n\nfunction initProps(instance, rawProps, isStateful, isSSR = false) {\n const props = {};\n const attrs = createInternalObject();\n instance.propsDefaults = /* @__PURE__ */ Object.create(null);\n setFullProps(instance, rawProps, props, attrs);\n for (const key in instance.propsOptions[0]) {\n if (!(key in props)) {\n props[key] = void 0;\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateProps(rawProps || {}, props, instance);\n }\n if (isStateful) {\n instance.props = isSSR ? props : shallowReactive(props);\n } else {\n if (!instance.type.props) {\n instance.props = attrs;\n } else {\n instance.props = props;\n }\n }\n instance.attrs = attrs;\n}\nfunction isInHmrContext(instance) {\n while (instance) {\n if (instance.type.__hmrId) return true;\n instance = instance.parent;\n }\n}\nfunction updateProps(instance, rawProps, rawPrevProps, optimized) {\n const {\n props,\n attrs,\n vnode: { patchFlag }\n } = instance;\n const rawCurrentProps = toRaw(props);\n const [options] = instance.propsOptions;\n let hasAttrsChanged = false;\n if (\n // always force full diff in dev\n // - #1942 if hmr is enabled with sfc component\n // - vite#872 non-sfc component used by sfc component\n !(!!(process.env.NODE_ENV !== \"production\") && isInHmrContext(instance)) && (optimized || patchFlag > 0) && !(patchFlag & 16)\n ) {\n if (patchFlag & 8) {\n const propsToUpdate = instance.vnode.dynamicProps;\n for (let i = 0; i < propsToUpdate.length; i++) {\n let key = propsToUpdate[i];\n if (isEmitListener(instance.emitsOptions, key)) {\n continue;\n }\n const value = rawProps[key];\n if (options) {\n if (hasOwn(attrs, key)) {\n if (value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n } else {\n const camelizedKey = camelize(key);\n props[camelizedKey] = resolvePropValue(\n options,\n rawCurrentProps,\n camelizedKey,\n value,\n instance,\n false\n );\n }\n } else {\n if (value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n }\n }\n }\n } else {\n if (setFullProps(instance, rawProps, props, attrs)) {\n hasAttrsChanged = true;\n }\n let kebabKey;\n for (const key in rawCurrentProps) {\n if (!rawProps || // for camelCase\n !hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case\n // and converted to camelCase (#955)\n ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) {\n if (options) {\n if (rawPrevProps && // for camelCase\n (rawPrevProps[key] !== void 0 || // for kebab-case\n rawPrevProps[kebabKey] !== void 0)) {\n props[key] = resolvePropValue(\n options,\n rawCurrentProps,\n key,\n void 0,\n instance,\n true\n );\n }\n } else {\n delete props[key];\n }\n }\n }\n if (attrs !== rawCurrentProps) {\n for (const key in attrs) {\n if (!rawProps || !hasOwn(rawProps, key) && true) {\n delete attrs[key];\n hasAttrsChanged = true;\n }\n }\n }\n }\n if (hasAttrsChanged) {\n trigger(instance.attrs, \"set\", \"\");\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n validateProps(rawProps || {}, props, instance);\n }\n}\nfunction setFullProps(instance, rawProps, props, attrs) {\n const [options, needCastKeys] = instance.propsOptions;\n let hasAttrsChanged = false;\n let rawCastValues;\n if (rawProps) {\n for (let key in rawProps) {\n if (isReservedProp(key)) {\n continue;\n }\n const value = rawProps[key];\n let camelKey;\n if (options && hasOwn(options, camelKey = camelize(key))) {\n if (!needCastKeys || !needCastKeys.includes(camelKey)) {\n props[camelKey] = value;\n } else {\n (rawCastValues || (rawCastValues = {}))[camelKey] = value;\n }\n } else if (!isEmitListener(instance.emitsOptions, key)) {\n if (!(key in attrs) || value !== attrs[key]) {\n attrs[key] = value;\n hasAttrsChanged = true;\n }\n }\n }\n }\n if (needCastKeys) {\n const rawCurrentProps = toRaw(props);\n const castValues = rawCastValues || EMPTY_OBJ;\n for (let i = 0; i < needCastKeys.length; i++) {\n const key = needCastKeys[i];\n props[key] = resolvePropValue(\n options,\n rawCurrentProps,\n key,\n castValues[key],\n instance,\n !hasOwn(castValues, key)\n );\n }\n }\n return hasAttrsChanged;\n}\nfunction resolvePropValue(options, props, key, value, instance, isAbsent) {\n const opt = options[key];\n if (opt != null) {\n const hasDefault = hasOwn(opt, \"default\");\n if (hasDefault && value === void 0) {\n const defaultValue = opt.default;\n if (opt.type !== Function && !opt.skipFactory && isFunction(defaultValue)) {\n const { propsDefaults } = instance;\n if (key in propsDefaults) {\n value = propsDefaults[key];\n } else {\n const reset = setCurrentInstance(instance);\n value = propsDefaults[key] = defaultValue.call(\n null,\n props\n );\n reset();\n }\n } else {\n value = defaultValue;\n }\n if (instance.ce) {\n instance.ce._setProp(key, value);\n }\n }\n if (opt[0 /* shouldCast */]) {\n if (isAbsent && !hasDefault) {\n value = false;\n } else if (opt[1 /* shouldCastTrue */] && (value === \"\" || value === hyphenate(key))) {\n value = true;\n }\n }\n }\n return value;\n}\nconst mixinPropsCache = /* @__PURE__ */ new WeakMap();\nfunction normalizePropsOptions(comp, appContext, asMixin = false) {\n const cache = __VUE_OPTIONS_API__ && asMixin ? mixinPropsCache : appContext.propsCache;\n const cached = cache.get(comp);\n if (cached) {\n return cached;\n }\n const raw = comp.props;\n const normalized = {};\n const needCastKeys = [];\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendProps = (raw2) => {\n hasExtends = true;\n const [props, keys] = normalizePropsOptions(raw2, appContext, true);\n extend(normalized, props);\n if (keys) needCastKeys.push(...keys);\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendProps);\n }\n if (comp.extends) {\n extendProps(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendProps);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, EMPTY_ARR);\n }\n return EMPTY_ARR;\n }\n if (isArray(raw)) {\n for (let i = 0; i < raw.length; i++) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isString(raw[i])) {\n warn$1(`props must be strings when using array syntax.`, raw[i]);\n }\n const normalizedKey = camelize(raw[i]);\n if (validatePropName(normalizedKey)) {\n normalized[normalizedKey] = EMPTY_OBJ;\n }\n }\n } else if (raw) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(raw)) {\n warn$1(`invalid props options`, raw);\n }\n for (const key in raw) {\n const normalizedKey = camelize(key);\n if (validatePropName(normalizedKey)) {\n const opt = raw[key];\n const prop = normalized[normalizedKey] = isArray(opt) || isFunction(opt) ? { type: opt } : extend({}, opt);\n const propType = prop.type;\n let shouldCast = false;\n let shouldCastTrue = true;\n if (isArray(propType)) {\n for (let index = 0; index < propType.length; ++index) {\n const type = propType[index];\n const typeName = isFunction(type) && type.name;\n if (typeName === \"Boolean\") {\n shouldCast = true;\n break;\n } else if (typeName === \"String\") {\n shouldCastTrue = false;\n }\n }\n } else {\n shouldCast = isFunction(propType) && propType.name === \"Boolean\";\n }\n prop[0 /* shouldCast */] = shouldCast;\n prop[1 /* shouldCastTrue */] = shouldCastTrue;\n if (shouldCast || hasOwn(prop, \"default\")) {\n needCastKeys.push(normalizedKey);\n }\n }\n }\n }\n const res = [normalized, needCastKeys];\n if (isObject(comp)) {\n cache.set(comp, res);\n }\n return res;\n}\nfunction validatePropName(key) {\n if (key[0] !== \"$\" && !isReservedProp(key)) {\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(`Invalid prop name: \"${key}\" is a reserved property.`);\n }\n return false;\n}\nfunction getType(ctor) {\n if (ctor === null) {\n return \"null\";\n }\n if (typeof ctor === \"function\") {\n return ctor.name || \"\";\n } else if (typeof ctor === \"object\") {\n const name = ctor.constructor && ctor.constructor.name;\n return name || \"\";\n }\n return \"\";\n}\nfunction validateProps(rawProps, props, instance) {\n const resolvedValues = toRaw(props);\n const options = instance.propsOptions[0];\n const camelizePropsKey = Object.keys(rawProps).map((key) => camelize(key));\n for (const key in options) {\n let opt = options[key];\n if (opt == null) continue;\n validateProp(\n key,\n resolvedValues[key],\n opt,\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(resolvedValues) : resolvedValues,\n !camelizePropsKey.includes(key)\n );\n }\n}\nfunction validateProp(name, value, prop, props, isAbsent) {\n const { type, required, validator, skipCheck } = prop;\n if (required && isAbsent) {\n warn$1('Missing required prop: \"' + name + '\"');\n return;\n }\n if (value == null && !required) {\n return;\n }\n if (type != null && type !== true && !skipCheck) {\n let isValid = false;\n const types = isArray(type) ? type : [type];\n const expectedTypes = [];\n for (let i = 0; i < types.length && !isValid; i++) {\n const { valid, expectedType } = assertType(value, types[i]);\n expectedTypes.push(expectedType || \"\");\n isValid = valid;\n }\n if (!isValid) {\n warn$1(getInvalidTypeMessage(name, value, expectedTypes));\n return;\n }\n }\n if (validator && !validator(value, props)) {\n warn$1('Invalid prop: custom validator check failed for prop \"' + name + '\".');\n }\n}\nconst isSimpleType = /* @__PURE__ */ makeMap(\n \"String,Number,Boolean,Function,Symbol,BigInt\"\n);\nfunction assertType(value, type) {\n let valid;\n const expectedType = getType(type);\n if (expectedType === \"null\") {\n valid = value === null;\n } else if (isSimpleType(expectedType)) {\n const t = typeof value;\n valid = t === expectedType.toLowerCase();\n if (!valid && t === \"object\") {\n valid = value instanceof type;\n }\n } else if (expectedType === \"Object\") {\n valid = isObject(value);\n } else if (expectedType === \"Array\") {\n valid = isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid,\n expectedType\n };\n}\nfunction getInvalidTypeMessage(name, value, expectedTypes) {\n if (expectedTypes.length === 0) {\n return `Prop type [] for prop \"${name}\" won't match anything. Did you mean to use type Array instead?`;\n }\n let message = `Invalid prop: type check failed for prop \"${name}\". Expected ${expectedTypes.map(capitalize).join(\" | \")}`;\n const expectedType = expectedTypes[0];\n const receivedType = toRawType(value);\n const expectedValue = styleValue(value, expectedType);\n const receivedValue = styleValue(value, receivedType);\n if (expectedTypes.length === 1 && isExplicable(expectedType) && isCoercible(expectedType, receivedType)) {\n message += ` with value ${expectedValue}`;\n }\n message += `, got ${receivedType} `;\n if (isExplicable(receivedType)) {\n message += `with value ${receivedValue}.`;\n }\n return message;\n}\nfunction styleValue(value, type) {\n if (isSymbol(value)) {\n return value.toString();\n } else if (type === \"String\") {\n return `\"${value}\"`;\n } else if (type === \"Number\") {\n return `${Number(value)}`;\n } else {\n return `${value}`;\n }\n}\nfunction isExplicable(type) {\n const explicitTypes = [\"string\", \"number\", \"boolean\"];\n return explicitTypes.some((elem) => type.toLowerCase() === elem);\n}\nfunction isCoercible(...args) {\n return args.every((elem) => {\n const value = elem.toLowerCase();\n return value !== \"boolean\" && value !== \"symbol\";\n });\n}\n\nconst isInternalKey = (key) => key === \"_\" || key === \"_ctx\" || key === \"$stable\";\nconst normalizeSlotValue = (value) => isArray(value) ? value.map(normalizeVNode) : [normalizeVNode(value)];\nconst normalizeSlot = (key, rawSlot, ctx) => {\n if (rawSlot._n) {\n return rawSlot;\n }\n const normalized = withCtx((...args) => {\n if (!!(process.env.NODE_ENV !== \"production\") && currentInstance && !(ctx === null && currentRenderingInstance) && !(ctx && ctx.root !== currentInstance.root)) {\n warn$1(\n `Slot \"${key}\" invoked outside of the render function: this will not track dependencies used in the slot. Invoke the slot function inside the render function instead.`\n );\n }\n return normalizeSlotValue(rawSlot(...args));\n }, ctx);\n normalized._c = false;\n return normalized;\n};\nconst normalizeObjectSlots = (rawSlots, slots, instance) => {\n const ctx = rawSlots._ctx;\n for (const key in rawSlots) {\n if (isInternalKey(key)) continue;\n const value = rawSlots[key];\n if (isFunction(value)) {\n slots[key] = normalizeSlot(key, value, ctx);\n } else if (value != null) {\n if (!!(process.env.NODE_ENV !== \"production\") && true) {\n warn$1(\n `Non-function value encountered for slot \"${key}\". Prefer function slots for better performance.`\n );\n }\n const normalized = normalizeSlotValue(value);\n slots[key] = () => normalized;\n }\n }\n};\nconst normalizeVNodeSlots = (instance, children) => {\n if (!!(process.env.NODE_ENV !== \"production\") && !isKeepAlive(instance.vnode) && true) {\n warn$1(\n `Non-function value encountered for default slot. Prefer function slots for better performance.`\n );\n }\n const normalized = normalizeSlotValue(children);\n instance.slots.default = () => normalized;\n};\nconst assignSlots = (slots, children, optimized) => {\n for (const key in children) {\n if (optimized || !isInternalKey(key)) {\n slots[key] = children[key];\n }\n }\n};\nconst initSlots = (instance, children, optimized) => {\n const slots = instance.slots = createInternalObject();\n if (instance.vnode.shapeFlag & 32) {\n const type = children._;\n if (type) {\n assignSlots(slots, children, optimized);\n if (optimized) {\n def(slots, \"_\", type, true);\n }\n } else {\n normalizeObjectSlots(children, slots);\n }\n } else if (children) {\n normalizeVNodeSlots(instance, children);\n }\n};\nconst updateSlots = (instance, children, optimized) => {\n const { vnode, slots } = instance;\n let needDeletionCheck = true;\n let deletionComparisonTarget = EMPTY_OBJ;\n if (vnode.shapeFlag & 32) {\n const type = children._;\n if (type) {\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n assignSlots(slots, children, optimized);\n trigger(instance, \"set\", \"$slots\");\n } else if (optimized && type === 1) {\n needDeletionCheck = false;\n } else {\n assignSlots(slots, children, optimized);\n }\n } else {\n needDeletionCheck = !children.$stable;\n normalizeObjectSlots(children, slots);\n }\n deletionComparisonTarget = children;\n } else if (children) {\n normalizeVNodeSlots(instance, children);\n deletionComparisonTarget = { default: 1 };\n }\n if (needDeletionCheck) {\n for (const key in slots) {\n if (!isInternalKey(key) && deletionComparisonTarget[key] == null) {\n delete slots[key];\n }\n }\n }\n};\n\nlet supported;\nlet perf;\nfunction startMeasure(instance, type) {\n if (instance.appContext.config.performance && isSupported()) {\n perf.mark(`vue-${type}-${instance.uid}`);\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsPerfStart(instance, type, isSupported() ? perf.now() : Date.now());\n }\n}\nfunction endMeasure(instance, type) {\n if (instance.appContext.config.performance && isSupported()) {\n const startTag = `vue-${type}-${instance.uid}`;\n const endTag = startTag + `:end`;\n const measureName = `<${formatComponentName(instance, instance.type)}> ${type}`;\n perf.mark(endTag);\n perf.measure(measureName, startTag, endTag);\n perf.clearMeasures(measureName);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsPerfEnd(instance, type, isSupported() ? perf.now() : Date.now());\n }\n}\nfunction isSupported() {\n if (supported !== void 0) {\n return supported;\n }\n if (typeof window !== \"undefined\" && window.performance) {\n supported = true;\n perf = window.performance;\n } else {\n supported = false;\n }\n return supported;\n}\n\nfunction initFeatureFlags() {\n const needWarn = [];\n if (typeof __VUE_OPTIONS_API__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_OPTIONS_API__`);\n getGlobalThis().__VUE_OPTIONS_API__ = true;\n }\n if (typeof __VUE_PROD_DEVTOOLS__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_PROD_DEVTOOLS__`);\n getGlobalThis().__VUE_PROD_DEVTOOLS__ = false;\n }\n if (typeof __VUE_PROD_HYDRATION_MISMATCH_DETAILS__ !== \"boolean\") {\n !!(process.env.NODE_ENV !== \"production\") && needWarn.push(`__VUE_PROD_HYDRATION_MISMATCH_DETAILS__`);\n getGlobalThis().__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ = false;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && needWarn.length) {\n const multi = needWarn.length > 1;\n console.warn(\n `Feature flag${multi ? `s` : ``} ${needWarn.join(\", \")} ${multi ? `are` : `is`} not explicitly defined. You are running the esm-bundler build of Vue, which expects these compile-time feature flags to be globally injected via the bundler config in order to get better tree-shaking in the production bundle.\n\nFor more details, see https://link.vuejs.org/feature-flags.`\n );\n }\n}\n\nconst queuePostRenderEffect = queueEffectWithSuspense ;\nfunction createRenderer(options) {\n return baseCreateRenderer(options);\n}\nfunction createHydrationRenderer(options) {\n return baseCreateRenderer(options, createHydrationFunctions);\n}\nfunction baseCreateRenderer(options, createHydrationFns) {\n {\n initFeatureFlags();\n }\n const target = getGlobalThis();\n target.__VUE__ = true;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n setDevtoolsHook$1(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);\n }\n const {\n insert: hostInsert,\n remove: hostRemove,\n patchProp: hostPatchProp,\n createElement: hostCreateElement,\n createText: hostCreateText,\n createComment: hostCreateComment,\n setText: hostSetText,\n setElementText: hostSetElementText,\n parentNode: hostParentNode,\n nextSibling: hostNextSibling,\n setScopeId: hostSetScopeId = NOOP,\n insertStaticContent: hostInsertStaticContent\n } = options;\n const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, namespace = void 0, slotScopeIds = null, optimized = !!(process.env.NODE_ENV !== \"production\") && isHmrUpdating ? false : !!n2.dynamicChildren) => {\n if (n1 === n2) {\n return;\n }\n if (n1 && !isSameVNodeType(n1, n2)) {\n anchor = getNextHostNode(n1);\n unmount(n1, parentComponent, parentSuspense, true);\n n1 = null;\n }\n if (n2.patchFlag === -2) {\n optimized = false;\n n2.dynamicChildren = null;\n }\n const { type, ref, shapeFlag } = n2;\n switch (type) {\n case Text:\n processText(n1, n2, container, anchor);\n break;\n case Comment:\n processCommentNode(n1, n2, container, anchor);\n break;\n case Static:\n if (n1 == null) {\n mountStaticNode(n2, container, anchor, namespace);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n patchStaticNode(n1, n2, container, namespace);\n }\n break;\n case Fragment:\n processFragment(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n break;\n default:\n if (shapeFlag & 1) {\n processElement(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (shapeFlag & 6) {\n processComponent(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (shapeFlag & 64) {\n type.process(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n internals\n );\n } else if (shapeFlag & 128) {\n type.process(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n internals\n );\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn$1(\"Invalid VNode type:\", type, `(${typeof type})`);\n }\n }\n if (ref != null && parentComponent) {\n setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2);\n } else if (ref == null && n1 && n1.ref != null) {\n setRef(n1.ref, null, parentSuspense, n1, true);\n }\n };\n const processText = (n1, n2, container, anchor) => {\n if (n1 == null) {\n hostInsert(\n n2.el = hostCreateText(n2.children),\n container,\n anchor\n );\n } else {\n const el = n2.el = n1.el;\n if (n2.children !== n1.children) {\n hostSetText(el, n2.children);\n }\n }\n };\n const processCommentNode = (n1, n2, container, anchor) => {\n if (n1 == null) {\n hostInsert(\n n2.el = hostCreateComment(n2.children || \"\"),\n container,\n anchor\n );\n } else {\n n2.el = n1.el;\n }\n };\n const mountStaticNode = (n2, container, anchor, namespace) => {\n [n2.el, n2.anchor] = hostInsertStaticContent(\n n2.children,\n container,\n anchor,\n namespace,\n n2.el,\n n2.anchor\n );\n };\n const patchStaticNode = (n1, n2, container, namespace) => {\n if (n2.children !== n1.children) {\n const anchor = hostNextSibling(n1.anchor);\n removeStaticNode(n1);\n [n2.el, n2.anchor] = hostInsertStaticContent(\n n2.children,\n container,\n anchor,\n namespace\n );\n } else {\n n2.el = n1.el;\n n2.anchor = n1.anchor;\n }\n };\n const moveStaticNode = ({ el, anchor }, container, nextSibling) => {\n let next;\n while (el && el !== anchor) {\n next = hostNextSibling(el);\n hostInsert(el, container, nextSibling);\n el = next;\n }\n hostInsert(anchor, container, nextSibling);\n };\n const removeStaticNode = ({ el, anchor }) => {\n let next;\n while (el && el !== anchor) {\n next = hostNextSibling(el);\n hostRemove(el);\n el = next;\n }\n hostRemove(anchor);\n };\n const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n if (n2.type === \"svg\") {\n namespace = \"svg\";\n } else if (n2.type === \"math\") {\n namespace = \"mathml\";\n }\n if (n1 == null) {\n mountElement(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n const customElement = n1.el && n1.el._isVueCE ? n1.el : null;\n try {\n if (customElement) {\n customElement._beginPatch();\n }\n patchElement(\n n1,\n n2,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } finally {\n if (customElement) {\n customElement._endPatch();\n }\n }\n }\n };\n const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n let el;\n let vnodeHook;\n const { props, shapeFlag, transition, dirs } = vnode;\n el = vnode.el = hostCreateElement(\n vnode.type,\n namespace,\n props && props.is,\n props\n );\n if (shapeFlag & 8) {\n hostSetElementText(el, vnode.children);\n } else if (shapeFlag & 16) {\n mountChildren(\n vnode.children,\n el,\n null,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(vnode, namespace),\n slotScopeIds,\n optimized\n );\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n }\n setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);\n if (props) {\n for (const key in props) {\n if (key !== \"value\" && !isReservedProp(key)) {\n hostPatchProp(el, key, null, props[key], namespace, parentComponent);\n }\n }\n if (\"value\" in props) {\n hostPatchProp(el, \"value\", null, props.value, namespace);\n }\n if (vnodeHook = props.onVnodeBeforeMount) {\n invokeVNodeHook(vnodeHook, parentComponent, vnode);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n def(el, \"__vnode\", vnode, true);\n def(el, \"__vueParentComponent\", parentComponent, true);\n }\n if (dirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n }\n const needCallTransitionHooks = needTransition(parentSuspense, transition);\n if (needCallTransitionHooks) {\n transition.beforeEnter(el);\n }\n hostInsert(el, container, anchor);\n if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) {\n const isHmr = !!(process.env.NODE_ENV !== \"production\") && isHmrUpdating;\n queuePostRenderEffect(() => {\n let prev;\n if (!!(process.env.NODE_ENV !== \"production\")) prev = setHmrUpdating(isHmr);\n try {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n needCallTransitionHooks && transition.enter(el);\n dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n } finally {\n if (!!(process.env.NODE_ENV !== \"production\")) setHmrUpdating(prev);\n }\n }, parentSuspense);\n }\n };\n const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {\n if (scopeId) {\n hostSetScopeId(el, scopeId);\n }\n if (slotScopeIds) {\n for (let i = 0; i < slotScopeIds.length; i++) {\n hostSetScopeId(el, slotScopeIds[i]);\n }\n }\n if (parentComponent) {\n let subTree = parentComponent.subTree;\n if (!!(process.env.NODE_ENV !== \"production\") && subTree.patchFlag > 0 && subTree.patchFlag & 2048) {\n subTree = filterSingleRoot(subTree.children) || subTree;\n }\n if (vnode === subTree || isSuspense(subTree.type) && (subTree.ssContent === vnode || subTree.ssFallback === vnode)) {\n const parentVNode = parentComponent.vnode;\n setScopeId(\n el,\n parentVNode,\n parentVNode.scopeId,\n parentVNode.slotScopeIds,\n parentComponent.parent\n );\n }\n }\n };\n const mountChildren = (children, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, start = 0) => {\n for (let i = start; i < children.length; i++) {\n const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]);\n patch(\n null,\n child,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n };\n const patchElement = (n1, n2, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n const el = n2.el = n1.el;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n el.__vnode = n2;\n }\n let { patchFlag, dynamicChildren, dirs } = n2;\n patchFlag |= n1.patchFlag & 16;\n const oldProps = n1.props || EMPTY_OBJ;\n const newProps = n2.props || EMPTY_OBJ;\n let vnodeHook;\n parentComponent && toggleRecurse(parentComponent, false);\n if (vnodeHook = newProps.onVnodeBeforeUpdate) {\n invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n }\n if (dirs) {\n invokeDirectiveHook(n2, n1, parentComponent, \"beforeUpdate\");\n }\n parentComponent && toggleRecurse(parentComponent, true);\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) {\n patchFlag = 0;\n optimized = false;\n dynamicChildren = null;\n }\n if (oldProps.innerHTML && newProps.innerHTML == null || oldProps.textContent && newProps.textContent == null) {\n hostSetElementText(el, \"\");\n }\n if (dynamicChildren) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n el,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(n2, namespace),\n slotScopeIds\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n traverseStaticChildren(n1, n2);\n }\n } else if (!optimized) {\n patchChildren(\n n1,\n n2,\n el,\n null,\n parentComponent,\n parentSuspense,\n resolveChildrenNamespace(n2, namespace),\n slotScopeIds,\n false\n );\n }\n if (patchFlag > 0) {\n if (patchFlag & 16) {\n patchProps(el, oldProps, newProps, parentComponent, namespace);\n } else {\n if (patchFlag & 2) {\n if (oldProps.class !== newProps.class) {\n hostPatchProp(el, \"class\", null, newProps.class, namespace);\n }\n }\n if (patchFlag & 4) {\n hostPatchProp(el, \"style\", oldProps.style, newProps.style, namespace);\n }\n if (patchFlag & 8) {\n const propsToUpdate = n2.dynamicProps;\n for (let i = 0; i < propsToUpdate.length; i++) {\n const key = propsToUpdate[i];\n const prev = oldProps[key];\n const next = newProps[key];\n if (next !== prev || key === \"value\") {\n hostPatchProp(el, key, prev, next, namespace, parentComponent);\n }\n }\n }\n }\n if (patchFlag & 1) {\n if (n1.children !== n2.children) {\n hostSetElementText(el, n2.children);\n }\n }\n } else if (!optimized && dynamicChildren == null) {\n patchProps(el, oldProps, newProps, parentComponent, namespace);\n }\n if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n dirs && invokeDirectiveHook(n2, n1, parentComponent, \"updated\");\n }, parentSuspense);\n }\n };\n const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, namespace, slotScopeIds) => {\n for (let i = 0; i < newChildren.length; i++) {\n const oldVNode = oldChildren[i];\n const newVNode = newChildren[i];\n const container = (\n // oldVNode may be an errored async setup() component inside Suspense\n // which will not have a mounted element\n oldVNode.el && // - In the case of a Fragment, we need to provide the actual parent\n // of the Fragment itself so it can move its children.\n (oldVNode.type === Fragment || // - In the case of different nodes, there is going to be a replacement\n // which also requires the correct parent container\n !isSameVNodeType(oldVNode, newVNode) || // - In the case of a component, it could contain anything.\n oldVNode.shapeFlag & (6 | 64 | 128)) ? hostParentNode(oldVNode.el) : (\n // In other cases, the parent container is not actually used so we\n // just pass the block element here to avoid a DOM parentNode call.\n fallbackContainer\n )\n );\n patch(\n oldVNode,\n newVNode,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n true\n );\n }\n };\n const patchProps = (el, oldProps, newProps, parentComponent, namespace) => {\n if (oldProps !== newProps) {\n if (oldProps !== EMPTY_OBJ) {\n for (const key in oldProps) {\n if (!isReservedProp(key) && !(key in newProps)) {\n hostPatchProp(\n el,\n key,\n oldProps[key],\n null,\n namespace,\n parentComponent\n );\n }\n }\n }\n for (const key in newProps) {\n if (isReservedProp(key)) continue;\n const next = newProps[key];\n const prev = oldProps[key];\n if (next !== prev && key !== \"value\") {\n hostPatchProp(el, key, prev, next, namespace, parentComponent);\n }\n }\n if (\"value\" in newProps) {\n hostPatchProp(el, \"value\", oldProps.value, newProps.value, namespace);\n }\n }\n };\n const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText(\"\");\n const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText(\"\");\n let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;\n if (!!(process.env.NODE_ENV !== \"production\") && // #5523 dev root fragment may inherit directives\n (isHmrUpdating || patchFlag & 2048)) {\n patchFlag = 0;\n optimized = false;\n dynamicChildren = null;\n }\n if (fragmentSlotScopeIds) {\n slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n }\n if (n1 == null) {\n hostInsert(fragmentStartAnchor, container, anchor);\n hostInsert(fragmentEndAnchor, container, anchor);\n mountChildren(\n // #10007\n // such fragment like `<></>` will be compiled into\n // a fragment which doesn't have a children.\n // In this case fallback to an empty array\n n2.children || [],\n container,\n fragmentEndAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && // #2715 the previous fragment could've been a BAILed one as a result\n // of renderSlot() with no valid children\n n1.dynamicChildren && n1.dynamicChildren.length === dynamicChildren.length) {\n patchBlockChildren(\n n1.dynamicChildren,\n dynamicChildren,\n container,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n traverseStaticChildren(n1, n2);\n } else if (\n // #2080 if the stable fragment has a key, it's a <template v-for> that may\n // get moved around. Make sure all root level vnodes inherit el.\n // #2134 or if it's a component root, it may also get moved around\n // as the component is being moved.\n n2.key != null || parentComponent && n2 === parentComponent.subTree\n ) {\n traverseStaticChildren(\n n1,\n n2,\n true\n /* shallow */\n );\n }\n } else {\n patchChildren(\n n1,\n n2,\n container,\n fragmentEndAnchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n }\n };\n const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n n2.slotScopeIds = slotScopeIds;\n if (n1 == null) {\n if (n2.shapeFlag & 512) {\n parentComponent.ctx.activate(\n n2,\n container,\n anchor,\n namespace,\n optimized\n );\n } else {\n mountComponent(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n optimized\n );\n }\n } else {\n updateComponent(n1, n2, optimized);\n }\n };\n const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, namespace, optimized) => {\n const instance = (initialVNode.component = createComponentInstance(\n initialVNode,\n parentComponent,\n parentSuspense\n ));\n if (!!(process.env.NODE_ENV !== \"production\") && instance.type.__hmrId) {\n registerHMR(instance);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(initialVNode);\n startMeasure(instance, `mount`);\n }\n if (isKeepAlive(initialVNode)) {\n instance.ctx.renderer = internals;\n }\n {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `init`);\n }\n setupComponent(instance, false, optimized);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `init`);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && isHmrUpdating) initialVNode.el = null;\n if (instance.asyncDep) {\n parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect, optimized);\n if (!initialVNode.el) {\n const placeholder = instance.subTree = createVNode(Comment);\n processCommentNode(null, placeholder, container, anchor);\n initialVNode.placeholder = placeholder.el;\n }\n } else {\n setupRenderEffect(\n instance,\n initialVNode,\n container,\n anchor,\n parentSuspense,\n namespace,\n optimized\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n endMeasure(instance, `mount`);\n }\n };\n const updateComponent = (n1, n2, optimized) => {\n const instance = n2.component = n1.component;\n if (shouldUpdateComponent(n1, n2, optimized)) {\n if (instance.asyncDep && !instance.asyncResolved) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(n2);\n }\n updateComponentPreRender(instance, n2, optimized);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n return;\n } else {\n instance.next = n2;\n instance.update();\n }\n } else {\n n2.el = n1.el;\n instance.vnode = n2;\n }\n };\n const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, namespace, optimized) => {\n const componentUpdateFn = () => {\n if (!instance.isMounted) {\n let vnodeHook;\n const { el, props } = initialVNode;\n const { bm, m, parent, root, type } = instance;\n const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);\n toggleRecurse(instance, false);\n if (bm) {\n invokeArrayFns(bm);\n }\n if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeBeforeMount)) {\n invokeVNodeHook(vnodeHook, parent, initialVNode);\n }\n toggleRecurse(instance, true);\n if (el && hydrateNode) {\n const hydrateSubTree = () => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n instance.subTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `hydrate`);\n }\n hydrateNode(\n el,\n instance.subTree,\n instance,\n parentSuspense,\n null\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `hydrate`);\n }\n };\n if (isAsyncWrapperVNode && type.__asyncHydrate) {\n type.__asyncHydrate(\n el,\n instance,\n hydrateSubTree\n );\n } else {\n hydrateSubTree();\n }\n } else {\n if (root.ce && root.ce._hasShadowRoot()) {\n root.ce._injectChildStyle(\n type,\n instance.parent ? instance.parent.type : void 0\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n const subTree = instance.subTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `patch`);\n }\n patch(\n null,\n subTree,\n container,\n anchor,\n instance,\n parentSuspense,\n namespace\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `patch`);\n }\n initialVNode.el = subTree.el;\n }\n if (m) {\n queuePostRenderEffect(m, parentSuspense);\n }\n if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeMounted)) {\n const scopedInitialVNode = initialVNode;\n queuePostRenderEffect(\n () => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode),\n parentSuspense\n );\n }\n if (initialVNode.shapeFlag & 256 || parent && isAsyncWrapper(parent.vnode) && parent.vnode.shapeFlag & 256) {\n instance.a && queuePostRenderEffect(instance.a, parentSuspense);\n }\n instance.isMounted = true;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance);\n }\n initialVNode = container = anchor = null;\n } else {\n let { next, bu, u, parent, vnode } = instance;\n {\n const nonHydratedAsyncRoot = locateNonHydratedAsyncRoot(instance);\n if (nonHydratedAsyncRoot) {\n if (next) {\n next.el = vnode.el;\n updateComponentPreRender(instance, next, optimized);\n }\n nonHydratedAsyncRoot.asyncDep.then(() => {\n queuePostRenderEffect(() => {\n if (!instance.isUnmounted) update();\n }, parentSuspense);\n });\n return;\n }\n }\n let originNext = next;\n let vnodeHook;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(next || instance.vnode);\n }\n toggleRecurse(instance, false);\n if (next) {\n next.el = vnode.el;\n updateComponentPreRender(instance, next, optimized);\n } else {\n next = vnode;\n }\n if (bu) {\n invokeArrayFns(bu);\n }\n if (vnodeHook = next.props && next.props.onVnodeBeforeUpdate) {\n invokeVNodeHook(vnodeHook, parent, next, vnode);\n }\n toggleRecurse(instance, true);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `render`);\n }\n const nextTree = renderComponentRoot(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `render`);\n }\n const prevTree = instance.subTree;\n instance.subTree = nextTree;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `patch`);\n }\n patch(\n prevTree,\n nextTree,\n // parent may have changed if it's in a teleport\n hostParentNode(prevTree.el),\n // anchor may have changed if it's in a fragment\n getNextHostNode(prevTree),\n instance,\n parentSuspense,\n namespace\n );\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `patch`);\n }\n next.el = nextTree.el;\n if (originNext === null) {\n updateHOCHostEl(instance, nextTree.el);\n }\n if (u) {\n queuePostRenderEffect(u, parentSuspense);\n }\n if (vnodeHook = next.props && next.props.onVnodeUpdated) {\n queuePostRenderEffect(\n () => invokeVNodeHook(vnodeHook, parent, next, vnode),\n parentSuspense\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(instance);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n }\n };\n instance.scope.on();\n const effect = instance.effect = new ReactiveEffect(componentUpdateFn);\n instance.scope.off();\n const update = instance.update = effect.run.bind(effect);\n const job = instance.job = effect.runIfDirty.bind(effect);\n job.i = instance;\n job.id = instance.uid;\n effect.scheduler = () => queueJob(job);\n toggleRecurse(instance, true);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = instance.rtc ? (e) => invokeArrayFns(instance.rtc, e) : void 0;\n effect.onTrigger = instance.rtg ? (e) => invokeArrayFns(instance.rtg, e) : void 0;\n }\n update();\n };\n const updateComponentPreRender = (instance, nextVNode, optimized) => {\n nextVNode.component = instance;\n const prevProps = instance.vnode.props;\n instance.vnode = nextVNode;\n instance.next = null;\n updateProps(instance, nextVNode.props, prevProps, optimized);\n updateSlots(instance, nextVNode.children, optimized);\n pauseTracking();\n flushPreFlushCbs(instance);\n resetTracking();\n };\n const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized = false) => {\n const c1 = n1 && n1.children;\n const prevShapeFlag = n1 ? n1.shapeFlag : 0;\n const c2 = n2.children;\n const { patchFlag, shapeFlag } = n2;\n if (patchFlag > 0) {\n if (patchFlag & 128) {\n patchKeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n return;\n } else if (patchFlag & 256) {\n patchUnkeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n return;\n }\n }\n if (shapeFlag & 8) {\n if (prevShapeFlag & 16) {\n unmountChildren(c1, parentComponent, parentSuspense);\n }\n if (c2 !== c1) {\n hostSetElementText(container, c2);\n }\n } else {\n if (prevShapeFlag & 16) {\n if (shapeFlag & 16) {\n patchKeyedChildren(\n c1,\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n unmountChildren(c1, parentComponent, parentSuspense, true);\n }\n } else {\n if (prevShapeFlag & 8) {\n hostSetElementText(container, \"\");\n }\n if (shapeFlag & 16) {\n mountChildren(\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n }\n }\n };\n const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n c1 = c1 || EMPTY_ARR;\n c2 = c2 || EMPTY_ARR;\n const oldLength = c1.length;\n const newLength = c2.length;\n const commonLength = Math.min(oldLength, newLength);\n let i;\n for (i = 0; i < commonLength; i++) {\n const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n patch(\n c1[i],\n nextChild,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n }\n if (oldLength > newLength) {\n unmountChildren(\n c1,\n parentComponent,\n parentSuspense,\n true,\n false,\n commonLength\n );\n } else {\n mountChildren(\n c2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n commonLength\n );\n }\n };\n const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n let i = 0;\n const l2 = c2.length;\n let e1 = c1.length - 1;\n let e2 = l2 - 1;\n while (i <= e1 && i <= e2) {\n const n1 = c1[i];\n const n2 = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n if (isSameVNodeType(n1, n2)) {\n patch(\n n1,\n n2,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n break;\n }\n i++;\n }\n while (i <= e1 && i <= e2) {\n const n1 = c1[e1];\n const n2 = c2[e2] = optimized ? cloneIfMounted(c2[e2]) : normalizeVNode(c2[e2]);\n if (isSameVNodeType(n1, n2)) {\n patch(\n n1,\n n2,\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else {\n break;\n }\n e1--;\n e2--;\n }\n if (i > e1) {\n if (i <= e2) {\n const nextPos = e2 + 1;\n const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;\n while (i <= e2) {\n patch(\n null,\n c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]),\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n i++;\n }\n }\n } else if (i > e2) {\n while (i <= e1) {\n unmount(c1[i], parentComponent, parentSuspense, true);\n i++;\n }\n } else {\n const s1 = i;\n const s2 = i;\n const keyToNewIndexMap = /* @__PURE__ */ new Map();\n for (i = s2; i <= e2; i++) {\n const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n if (nextChild.key != null) {\n if (!!(process.env.NODE_ENV !== \"production\") && keyToNewIndexMap.has(nextChild.key)) {\n warn$1(\n `Duplicate keys found during update:`,\n JSON.stringify(nextChild.key),\n `Make sure keys are unique.`\n );\n }\n keyToNewIndexMap.set(nextChild.key, i);\n }\n }\n let j;\n let patched = 0;\n const toBePatched = e2 - s2 + 1;\n let moved = false;\n let maxNewIndexSoFar = 0;\n const newIndexToOldIndexMap = new Array(toBePatched);\n for (i = 0; i < toBePatched; i++) newIndexToOldIndexMap[i] = 0;\n for (i = s1; i <= e1; i++) {\n const prevChild = c1[i];\n if (patched >= toBePatched) {\n unmount(prevChild, parentComponent, parentSuspense, true);\n continue;\n }\n let newIndex;\n if (prevChild.key != null) {\n newIndex = keyToNewIndexMap.get(prevChild.key);\n } else {\n for (j = s2; j <= e2; j++) {\n if (newIndexToOldIndexMap[j - s2] === 0 && isSameVNodeType(prevChild, c2[j])) {\n newIndex = j;\n break;\n }\n }\n }\n if (newIndex === void 0) {\n unmount(prevChild, parentComponent, parentSuspense, true);\n } else {\n newIndexToOldIndexMap[newIndex - s2] = i + 1;\n if (newIndex >= maxNewIndexSoFar) {\n maxNewIndexSoFar = newIndex;\n } else {\n moved = true;\n }\n patch(\n prevChild,\n c2[newIndex],\n container,\n null,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n patched++;\n }\n }\n const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : EMPTY_ARR;\n j = increasingNewIndexSequence.length - 1;\n for (i = toBePatched - 1; i >= 0; i--) {\n const nextIndex = s2 + i;\n const nextChild = c2[nextIndex];\n const anchorVNode = c2[nextIndex + 1];\n const anchor = nextIndex + 1 < l2 ? (\n // #13559, #14173 fallback to el placeholder for unresolved async component\n anchorVNode.el || resolveAsyncComponentPlaceholder(anchorVNode)\n ) : parentAnchor;\n if (newIndexToOldIndexMap[i] === 0) {\n patch(\n null,\n nextChild,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized\n );\n } else if (moved) {\n if (j < 0 || i !== increasingNewIndexSequence[j]) {\n move(nextChild, container, anchor, 2);\n } else {\n j--;\n }\n }\n }\n }\n };\n const move = (vnode, container, anchor, moveType, parentSuspense = null) => {\n const { el, type, transition, children, shapeFlag } = vnode;\n if (shapeFlag & 6) {\n move(vnode.component.subTree, container, anchor, moveType);\n return;\n }\n if (shapeFlag & 128) {\n vnode.suspense.move(container, anchor, moveType);\n return;\n }\n if (shapeFlag & 64) {\n type.move(vnode, container, anchor, internals);\n return;\n }\n if (type === Fragment) {\n hostInsert(el, container, anchor);\n for (let i = 0; i < children.length; i++) {\n move(children[i], container, anchor, moveType);\n }\n hostInsert(vnode.anchor, container, anchor);\n return;\n }\n if (type === Static) {\n moveStaticNode(vnode, container, anchor);\n return;\n }\n const needTransition2 = moveType !== 2 && shapeFlag & 1 && transition;\n if (needTransition2) {\n if (moveType === 0) {\n transition.beforeEnter(el);\n hostInsert(el, container, anchor);\n queuePostRenderEffect(() => transition.enter(el), parentSuspense);\n } else {\n const { leave, delayLeave, afterLeave } = transition;\n const remove2 = () => {\n if (vnode.ctx.isUnmounted) {\n hostRemove(el);\n } else {\n hostInsert(el, container, anchor);\n }\n };\n const performLeave = () => {\n if (el._isLeaving) {\n el[leaveCbKey](\n true\n /* cancelled */\n );\n }\n leave(el, () => {\n remove2();\n afterLeave && afterLeave();\n });\n };\n if (delayLeave) {\n delayLeave(el, remove2, performLeave);\n } else {\n performLeave();\n }\n }\n } else {\n hostInsert(el, container, anchor);\n }\n };\n const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {\n const {\n type,\n props,\n ref,\n children,\n dynamicChildren,\n shapeFlag,\n patchFlag,\n dirs,\n cacheIndex,\n memo\n } = vnode;\n if (patchFlag === -2) {\n optimized = false;\n }\n if (ref != null) {\n pauseTracking();\n setRef(ref, null, parentSuspense, vnode, true);\n resetTracking();\n }\n if (cacheIndex != null) {\n parentComponent.renderCache[cacheIndex] = void 0;\n }\n if (shapeFlag & 256) {\n parentComponent.ctx.deactivate(vnode);\n return;\n }\n const shouldInvokeDirs = shapeFlag & 1 && dirs;\n const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);\n let vnodeHook;\n if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeBeforeUnmount)) {\n invokeVNodeHook(vnodeHook, parentComponent, vnode);\n }\n if (shapeFlag & 6) {\n unmountComponent(vnode.component, parentSuspense, doRemove);\n } else {\n if (shapeFlag & 128) {\n vnode.suspense.unmount(parentSuspense, doRemove);\n return;\n }\n if (shouldInvokeDirs) {\n invokeDirectiveHook(vnode, null, parentComponent, \"beforeUnmount\");\n }\n if (shapeFlag & 64) {\n vnode.type.remove(\n vnode,\n parentComponent,\n parentSuspense,\n internals,\n doRemove\n );\n } else if (dynamicChildren && // #5154\n // when v-once is used inside a block, setBlockTracking(-1) marks the\n // parent block with hasOnce: true\n // so that it doesn't take the fast path during unmount - otherwise\n // components nested in v-once are never unmounted.\n !dynamicChildren.hasOnce && // #1153: fast path should not be taken for non-stable (v-for) fragments\n (type !== Fragment || patchFlag > 0 && patchFlag & 64)) {\n unmountChildren(\n dynamicChildren,\n parentComponent,\n parentSuspense,\n false,\n true\n );\n } else if (type === Fragment && patchFlag & (128 | 256) || !optimized && shapeFlag & 16) {\n unmountChildren(children, parentComponent, parentSuspense);\n }\n if (doRemove) {\n remove(vnode);\n }\n }\n const shouldInvalidateMemo = memo != null && cacheIndex == null;\n if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs || shouldInvalidateMemo) {\n queuePostRenderEffect(() => {\n vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n shouldInvokeDirs && invokeDirectiveHook(vnode, null, parentComponent, \"unmounted\");\n if (shouldInvalidateMemo) {\n vnode.el = null;\n }\n }, parentSuspense);\n }\n };\n const remove = (vnode) => {\n const { type, el, anchor, transition } = vnode;\n if (type === Fragment) {\n if (!!(process.env.NODE_ENV !== \"production\") && vnode.patchFlag > 0 && vnode.patchFlag & 2048 && transition && !transition.persisted) {\n vnode.children.forEach((child) => {\n if (child.type === Comment) {\n hostRemove(child.el);\n } else {\n remove(child);\n }\n });\n } else {\n removeFragment(el, anchor);\n }\n return;\n }\n if (type === Static) {\n removeStaticNode(vnode);\n return;\n }\n const performRemove = () => {\n hostRemove(el);\n if (transition && !transition.persisted && transition.afterLeave) {\n transition.afterLeave();\n }\n };\n if (vnode.shapeFlag & 1 && transition && !transition.persisted) {\n const { leave, delayLeave } = transition;\n const performLeave = () => leave(el, performRemove);\n if (delayLeave) {\n delayLeave(vnode.el, performRemove, performLeave);\n } else {\n performLeave();\n }\n } else {\n performRemove();\n }\n };\n const removeFragment = (cur, end) => {\n let next;\n while (cur !== end) {\n next = hostNextSibling(cur);\n hostRemove(cur);\n cur = next;\n }\n hostRemove(end);\n };\n const unmountComponent = (instance, parentSuspense, doRemove) => {\n if (!!(process.env.NODE_ENV !== \"production\") && instance.type.__hmrId) {\n unregisterHMR(instance);\n }\n const { bum, scope, job, subTree, um, m, a } = instance;\n invalidateMount(m);\n invalidateMount(a);\n if (bum) {\n invokeArrayFns(bum);\n }\n scope.stop();\n if (job) {\n job.flags |= 8;\n unmount(subTree, instance, parentSuspense, doRemove);\n }\n if (um) {\n queuePostRenderEffect(um, parentSuspense);\n }\n queuePostRenderEffect(() => {\n instance.isUnmounted = true;\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentRemoved(instance);\n }\n };\n const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => {\n for (let i = start; i < children.length; i++) {\n unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);\n }\n };\n const getNextHostNode = (vnode) => {\n if (vnode.shapeFlag & 6) {\n return getNextHostNode(vnode.component.subTree);\n }\n if (vnode.shapeFlag & 128) {\n return vnode.suspense.next();\n }\n const el = hostNextSibling(vnode.anchor || vnode.el);\n const teleportEnd = el && el[TeleportEndKey];\n return teleportEnd ? hostNextSibling(teleportEnd) : el;\n };\n let isFlushing = false;\n const render = (vnode, container, namespace) => {\n let instance;\n if (vnode == null) {\n if (container._vnode) {\n unmount(container._vnode, null, null, true);\n instance = container._vnode.component;\n }\n } else {\n patch(\n container._vnode || null,\n vnode,\n container,\n null,\n null,\n null,\n namespace\n );\n }\n container._vnode = vnode;\n if (!isFlushing) {\n isFlushing = true;\n flushPreFlushCbs(instance);\n flushPostFlushCbs();\n isFlushing = false;\n }\n };\n const internals = {\n p: patch,\n um: unmount,\n m: move,\n r: remove,\n mt: mountComponent,\n mc: mountChildren,\n pc: patchChildren,\n pbc: patchBlockChildren,\n n: getNextHostNode,\n o: options\n };\n let hydrate;\n let hydrateNode;\n if (createHydrationFns) {\n [hydrate, hydrateNode] = createHydrationFns(\n internals\n );\n }\n return {\n render,\n hydrate,\n createApp: createAppAPI(render, hydrate)\n };\n}\nfunction resolveChildrenNamespace({ type, props }, currentNamespace) {\n return currentNamespace === \"svg\" && type === \"foreignObject\" || currentNamespace === \"mathml\" && type === \"annotation-xml\" && props && props.encoding && props.encoding.includes(\"html\") ? void 0 : currentNamespace;\n}\nfunction toggleRecurse({ effect, job }, allowed) {\n if (allowed) {\n effect.flags |= 32;\n job.flags |= 4;\n } else {\n effect.flags &= -33;\n job.flags &= -5;\n }\n}\nfunction needTransition(parentSuspense, transition) {\n return (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted;\n}\nfunction traverseStaticChildren(n1, n2, shallow = false) {\n const ch1 = n1.children;\n const ch2 = n2.children;\n if (isArray(ch1) && isArray(ch2)) {\n for (let i = 0; i < ch1.length; i++) {\n const c1 = ch1[i];\n let c2 = ch2[i];\n if (c2.shapeFlag & 1 && !c2.dynamicChildren) {\n if (c2.patchFlag <= 0 || c2.patchFlag === 32) {\n c2 = ch2[i] = cloneIfMounted(ch2[i]);\n c2.el = c1.el;\n }\n if (!shallow && c2.patchFlag !== -2)\n traverseStaticChildren(c1, c2);\n }\n if (c2.type === Text) {\n if (c2.patchFlag === -1) {\n c2 = ch2[i] = cloneIfMounted(c2);\n }\n c2.el = c1.el;\n }\n if (c2.type === Comment && !c2.el) {\n c2.el = c1.el;\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n c2.el && (c2.el.__vnode = c2);\n }\n }\n }\n}\nfunction getSequence(arr) {\n const p = arr.slice();\n const result = [0];\n let i, j, u, v, c;\n const len = arr.length;\n for (i = 0; i < len; i++) {\n const arrI = arr[i];\n if (arrI !== 0) {\n j = result[result.length - 1];\n if (arr[j] < arrI) {\n p[i] = j;\n result.push(i);\n continue;\n }\n u = 0;\n v = result.length - 1;\n while (u < v) {\n c = u + v >> 1;\n if (arr[result[c]] < arrI) {\n u = c + 1;\n } else {\n v = c;\n }\n }\n if (arrI < arr[result[u]]) {\n if (u > 0) {\n p[i] = result[u - 1];\n }\n result[u] = i;\n }\n }\n }\n u = result.length;\n v = result[u - 1];\n while (u-- > 0) {\n result[u] = v;\n v = p[v];\n }\n return result;\n}\nfunction locateNonHydratedAsyncRoot(instance) {\n const subComponent = instance.subTree.component;\n if (subComponent) {\n if (subComponent.asyncDep && !subComponent.asyncResolved) {\n return subComponent;\n } else {\n return locateNonHydratedAsyncRoot(subComponent);\n }\n }\n}\nfunction invalidateMount(hooks) {\n if (hooks) {\n for (let i = 0; i < hooks.length; i++)\n hooks[i].flags |= 8;\n }\n}\nfunction resolveAsyncComponentPlaceholder(anchorVnode) {\n if (anchorVnode.placeholder) {\n return anchorVnode.placeholder;\n }\n const instance = anchorVnode.component;\n if (instance) {\n return resolveAsyncComponentPlaceholder(instance.subTree);\n }\n return null;\n}\n\nconst isSuspense = (type) => type.__isSuspense;\nlet suspenseId = 0;\nconst SuspenseImpl = {\n name: \"Suspense\",\n // In order to make Suspense tree-shakable, we need to avoid importing it\n // directly in the renderer. The renderer checks for the __isSuspense flag\n // on a vnode's type and calls the `process` method, passing in renderer\n // internals.\n __isSuspense: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n if (n1 == null) {\n mountSuspense(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n } else {\n if (parentSuspense && parentSuspense.deps > 0 && !n1.suspense.isInFallback) {\n n2.suspense = n1.suspense;\n n2.suspense.vnode = n2;\n n2.el = n1.el;\n return;\n }\n patchSuspense(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n }\n },\n hydrate: hydrateSuspense,\n normalize: normalizeSuspenseChildren\n};\nconst Suspense = SuspenseImpl ;\nfunction triggerEvent(vnode, name) {\n const eventListener = vnode.props && vnode.props[name];\n if (isFunction(eventListener)) {\n eventListener();\n }\n}\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n const {\n p: patch,\n o: { createElement }\n } = rendererInternals;\n const hiddenContainer = createElement(\"div\");\n const suspense = vnode.suspense = createSuspenseBoundary(\n vnode,\n parentSuspense,\n parentComponent,\n container,\n hiddenContainer,\n anchor,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n patch(\n null,\n suspense.pendingBranch = vnode.ssContent,\n hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds\n );\n if (suspense.deps > 0) {\n triggerEvent(vnode, \"onPending\");\n triggerEvent(vnode, \"onFallback\");\n patch(\n null,\n vnode.ssFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds\n );\n setActiveBranch(suspense, vnode.ssFallback);\n } else {\n suspense.resolve(false, true);\n }\n}\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\n const suspense = n2.suspense = n1.suspense;\n suspense.vnode = n2;\n n2.el = n1.el;\n const newBranch = n2.ssContent;\n const newFallback = n2.ssFallback;\n const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\n if (pendingBranch) {\n suspense.pendingBranch = newBranch;\n if (isSameVNodeType(pendingBranch, newBranch)) {\n patch(\n pendingBranch,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else if (isInFallback) {\n if (!isHydrating) {\n patch(\n activeBranch,\n newFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newFallback);\n }\n }\n } else {\n suspense.pendingId = suspenseId++;\n if (isHydrating) {\n suspense.isHydrating = false;\n suspense.activeBranch = pendingBranch;\n } else {\n unmount(pendingBranch, parentComponent, suspense);\n }\n suspense.deps = 0;\n suspense.effects.length = 0;\n suspense.hiddenContainer = createElement(\"div\");\n if (isInFallback) {\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else {\n patch(\n activeBranch,\n newFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newFallback);\n }\n } else if (activeBranch && isSameVNodeType(activeBranch, newBranch)) {\n patch(\n activeBranch,\n newBranch,\n container,\n anchor,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n suspense.resolve(true);\n } else {\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n }\n }\n }\n } else {\n if (activeBranch && isSameVNodeType(activeBranch, newBranch)) {\n patch(\n activeBranch,\n newBranch,\n container,\n anchor,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newBranch);\n } else {\n triggerEvent(n2, \"onPending\");\n suspense.pendingBranch = newBranch;\n if (newBranch.shapeFlag & 512) {\n suspense.pendingId = newBranch.component.suspenseId;\n } else {\n suspense.pendingId = suspenseId++;\n }\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n namespace,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else {\n const { timeout, pendingId } = suspense;\n if (timeout > 0) {\n setTimeout(() => {\n if (suspense.pendingId === pendingId) {\n suspense.fallback(newFallback);\n }\n }, timeout);\n } else if (timeout === 0) {\n suspense.fallback(newFallback);\n }\n }\n }\n }\n}\nlet hasWarned = false;\nfunction createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, namespace, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\n if (!!(process.env.NODE_ENV !== \"production\") && true && !hasWarned) {\n hasWarned = true;\n console[console.info ? \"info\" : \"log\"](\n `<Suspense> is an experimental feature and its API will likely change.`\n );\n }\n const {\n p: patch,\n m: move,\n um: unmount,\n n: next,\n o: { parentNode, remove }\n } = rendererInternals;\n let parentSuspenseId;\n const isSuspensible = isVNodeSuspensible(vnode);\n if (isSuspensible) {\n if (parentSuspense && parentSuspense.pendingBranch) {\n parentSuspenseId = parentSuspense.pendingId;\n parentSuspense.deps++;\n }\n }\n const timeout = vnode.props ? toNumber(vnode.props.timeout) : void 0;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assertNumber(timeout, `Suspense timeout`);\n }\n const initialAnchor = anchor;\n const suspense = {\n vnode,\n parent: parentSuspense,\n parentComponent,\n namespace,\n container,\n hiddenContainer,\n deps: 0,\n pendingId: suspenseId++,\n timeout: typeof timeout === \"number\" ? timeout : -1,\n activeBranch: null,\n isFallbackMountPending: false,\n pendingBranch: null,\n isInFallback: !isHydrating,\n isHydrating,\n isUnmounted: false,\n effects: [],\n resolve(resume = false, sync = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!resume && !suspense.pendingBranch) {\n throw new Error(\n `suspense.resolve() is called without a pending branch.`\n );\n }\n if (suspense.isUnmounted) {\n throw new Error(\n `suspense.resolve() is called on an already unmounted suspense boundary.`\n );\n }\n }\n const {\n vnode: vnode2,\n activeBranch,\n pendingBranch,\n pendingId,\n effects,\n parentComponent: parentComponent2,\n container: container2,\n isInFallback\n } = suspense;\n let delayEnter = false;\n if (suspense.isHydrating) {\n suspense.isHydrating = false;\n } else if (!resume) {\n delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === \"out-in\";\n let hasUpdatedAnchor = false;\n if (delayEnter) {\n activeBranch.transition.afterLeave = () => {\n if (pendingId === suspense.pendingId) {\n move(\n pendingBranch,\n container2,\n anchor === initialAnchor && !hasUpdatedAnchor ? next(activeBranch) : anchor,\n 0\n );\n queuePostFlushCb(effects);\n if (isInFallback && vnode2.ssFallback) {\n vnode2.ssFallback.el = null;\n }\n }\n };\n }\n if (activeBranch && !suspense.isFallbackMountPending) {\n if (parentNode(activeBranch.el) === container2) {\n anchor = next(activeBranch);\n hasUpdatedAnchor = true;\n }\n unmount(activeBranch, parentComponent2, suspense, true);\n if (!delayEnter && isInFallback && vnode2.ssFallback) {\n queuePostRenderEffect(() => vnode2.ssFallback.el = null, suspense);\n }\n }\n if (!delayEnter) {\n move(pendingBranch, container2, anchor, 0);\n }\n }\n suspense.isFallbackMountPending = false;\n setActiveBranch(suspense, pendingBranch);\n suspense.pendingBranch = null;\n suspense.isInFallback = false;\n let parent = suspense.parent;\n let hasUnresolvedAncestor = false;\n while (parent) {\n if (parent.pendingBranch) {\n parent.effects.push(...effects);\n hasUnresolvedAncestor = true;\n break;\n }\n parent = parent.parent;\n }\n if (!hasUnresolvedAncestor && !delayEnter) {\n queuePostFlushCb(effects);\n }\n suspense.effects = [];\n if (isSuspensible) {\n if (parentSuspense && parentSuspense.pendingBranch && parentSuspenseId === parentSuspense.pendingId) {\n parentSuspense.deps--;\n if (parentSuspense.deps === 0 && !sync) {\n parentSuspense.resolve();\n }\n }\n }\n triggerEvent(vnode2, \"onResolve\");\n },\n fallback(fallbackVNode) {\n if (!suspense.pendingBranch) {\n return;\n }\n const { vnode: vnode2, activeBranch, parentComponent: parentComponent2, container: container2, namespace: namespace2 } = suspense;\n triggerEvent(vnode2, \"onFallback\");\n const anchor2 = next(activeBranch);\n const mountFallback = () => {\n suspense.isFallbackMountPending = false;\n if (!suspense.isInFallback) {\n return;\n }\n patch(\n null,\n fallbackVNode,\n container2,\n anchor2,\n parentComponent2,\n null,\n // fallback tree will not have suspense context\n namespace2,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, fallbackVNode);\n };\n const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === \"out-in\";\n if (delayEnter) {\n suspense.isFallbackMountPending = true;\n activeBranch.transition.afterLeave = mountFallback;\n }\n suspense.isInFallback = true;\n unmount(\n activeBranch,\n parentComponent2,\n null,\n // no suspense so unmount hooks fire now\n true\n // shouldRemove\n );\n if (!delayEnter) {\n mountFallback();\n }\n },\n move(container2, anchor2, type) {\n suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type);\n suspense.container = container2;\n },\n next() {\n return suspense.activeBranch && next(suspense.activeBranch);\n },\n registerDep(instance, setupRenderEffect, optimized2) {\n const isInPendingSuspense = !!suspense.pendingBranch;\n if (isInPendingSuspense) {\n suspense.deps++;\n }\n const hydratedEl = instance.vnode.el;\n instance.asyncDep.catch((err) => {\n handleError(err, instance, 0);\n }).then((asyncSetupResult) => {\n if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) {\n return;\n }\n unsetCurrentInstance();\n instance.asyncResolved = true;\n const { vnode: vnode2 } = instance;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(vnode2);\n }\n handleSetupResult(instance, asyncSetupResult, false);\n if (hydratedEl) {\n vnode2.el = hydratedEl;\n }\n const placeholder = !hydratedEl && instance.subTree.el;\n setupRenderEffect(\n instance,\n vnode2,\n // component may have been moved before resolve.\n // if this is not a hydration, instance.subTree will be the comment\n // placeholder.\n parentNode(hydratedEl || instance.subTree.el),\n // anchor will not be used if this is hydration, so only need to\n // consider the comment placeholder case.\n hydratedEl ? null : next(instance.subTree),\n suspense,\n namespace,\n optimized2\n );\n if (placeholder) {\n vnode2.placeholder = null;\n remove(placeholder);\n }\n updateHOCHostEl(instance, vnode2.el);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n if (isInPendingSuspense && --suspense.deps === 0) {\n suspense.resolve();\n }\n });\n },\n unmount(parentSuspense2, doRemove) {\n suspense.isUnmounted = true;\n if (suspense.activeBranch) {\n unmount(\n suspense.activeBranch,\n parentComponent,\n parentSuspense2,\n doRemove\n );\n }\n if (suspense.pendingBranch) {\n unmount(\n suspense.pendingBranch,\n parentComponent,\n parentSuspense2,\n doRemove\n );\n }\n }\n };\n return suspense;\n}\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n const suspense = vnode.suspense = createSuspenseBoundary(\n vnode,\n parentSuspense,\n parentComponent,\n node.parentNode,\n // eslint-disable-next-line no-restricted-globals\n document.createElement(\"div\"),\n null,\n namespace,\n slotScopeIds,\n optimized,\n rendererInternals,\n true\n );\n const result = hydrateNode(\n node,\n suspense.pendingBranch = vnode.ssContent,\n parentComponent,\n suspense,\n slotScopeIds,\n optimized\n );\n if (suspense.deps === 0) {\n suspense.resolve(false, true);\n }\n return result;\n}\nfunction normalizeSuspenseChildren(vnode) {\n const { shapeFlag, children } = vnode;\n const isSlotChildren = shapeFlag & 32;\n vnode.ssContent = normalizeSuspenseSlot(\n isSlotChildren ? children.default : children\n );\n vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment);\n}\nfunction normalizeSuspenseSlot(s) {\n let block;\n if (isFunction(s)) {\n const trackBlock = isBlockTreeEnabled && s._c;\n if (trackBlock) {\n s._d = false;\n openBlock();\n }\n s = s();\n if (trackBlock) {\n s._d = true;\n block = currentBlock;\n closeBlock();\n }\n }\n if (isArray(s)) {\n const singleChild = filterSingleRoot(s);\n if (!!(process.env.NODE_ENV !== \"production\") && !singleChild && s.filter((child) => child !== NULL_DYNAMIC_COMPONENT).length > 0) {\n warn$1(`<Suspense> slots expect a single root node.`);\n }\n s = singleChild;\n }\n s = normalizeVNode(s);\n if (block && !s.dynamicChildren) {\n s.dynamicChildren = block.filter((c) => c !== s);\n }\n return s;\n}\nfunction queueEffectWithSuspense(fn, suspense) {\n if (suspense && suspense.pendingBranch) {\n if (isArray(fn)) {\n suspense.effects.push(...fn);\n } else {\n suspense.effects.push(fn);\n }\n } else {\n queuePostFlushCb(fn);\n }\n}\nfunction setActiveBranch(suspense, branch) {\n suspense.activeBranch = branch;\n const { vnode, parentComponent } = suspense;\n let el = branch.el;\n while (!el && branch.component) {\n branch = branch.component.subTree;\n el = branch.el;\n }\n vnode.el = el;\n if (parentComponent && parentComponent.subTree === vnode) {\n parentComponent.vnode.el = el;\n updateHOCHostEl(parentComponent, el);\n }\n}\nfunction isVNodeSuspensible(vnode) {\n const suspensible = vnode.props && vnode.props.suspensible;\n return suspensible != null && suspensible !== false;\n}\n\nconst Fragment = /* @__PURE__ */ Symbol.for(\"v-fgt\");\nconst Text = /* @__PURE__ */ Symbol.for(\"v-txt\");\nconst Comment = /* @__PURE__ */ Symbol.for(\"v-cmt\");\nconst Static = /* @__PURE__ */ Symbol.for(\"v-stc\");\nconst blockStack = [];\nlet currentBlock = null;\nfunction openBlock(disableTracking = false) {\n blockStack.push(currentBlock = disableTracking ? null : []);\n}\nfunction closeBlock() {\n blockStack.pop();\n currentBlock = blockStack[blockStack.length - 1] || null;\n}\nlet isBlockTreeEnabled = 1;\nfunction setBlockTracking(value, inVOnce = false) {\n isBlockTreeEnabled += value;\n if (value < 0 && currentBlock && inVOnce) {\n currentBlock.hasOnce = true;\n }\n}\nfunction setupBlock(vnode) {\n vnode.dynamicChildren = isBlockTreeEnabled > 0 ? currentBlock || EMPTY_ARR : null;\n closeBlock();\n if (isBlockTreeEnabled > 0 && currentBlock) {\n currentBlock.push(vnode);\n }\n return vnode;\n}\nfunction createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) {\n return setupBlock(\n createBaseVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n shapeFlag,\n true\n )\n );\n}\nfunction createBlock(type, props, children, patchFlag, dynamicProps) {\n return setupBlock(\n createVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n true\n )\n );\n}\nfunction isVNode(value) {\n return value ? value.__v_isVNode === true : false;\n}\nfunction isSameVNodeType(n1, n2) {\n if (!!(process.env.NODE_ENV !== \"production\") && n2.shapeFlag & 6 && n1.component) {\n const dirtyInstances = hmrDirtyComponents.get(n2.type);\n if (dirtyInstances && dirtyInstances.has(n1.component)) {\n n1.shapeFlag &= -257;\n n2.shapeFlag &= -513;\n return false;\n }\n }\n return n1.type === n2.type && n1.key === n2.key;\n}\nlet vnodeArgsTransformer;\nfunction transformVNodeArgs(transformer) {\n vnodeArgsTransformer = transformer;\n}\nconst createVNodeWithArgsTransform = (...args) => {\n return _createVNode(\n ...vnodeArgsTransformer ? vnodeArgsTransformer(args, currentRenderingInstance) : args\n );\n};\nconst normalizeKey = ({ key }) => key != null ? key : null;\nconst normalizeRef = ({\n ref,\n ref_key,\n ref_for\n}) => {\n if (typeof ref === \"number\") {\n ref = \"\" + ref;\n }\n return ref != null ? isString(ref) || isRef(ref) || isFunction(ref) ? { i: currentRenderingInstance, r: ref, k: ref_key, f: !!ref_for } : ref : null;\n};\nfunction createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1, isBlockNode = false, needFullChildrenNormalization = false) {\n const vnode = {\n __v_isVNode: true,\n __v_skip: true,\n type,\n props,\n key: props && normalizeKey(props),\n ref: props && normalizeRef(props),\n scopeId: currentScopeId,\n slotScopeIds: null,\n children,\n component: null,\n suspense: null,\n ssContent: null,\n ssFallback: null,\n dirs: null,\n transition: null,\n el: null,\n anchor: null,\n target: null,\n targetStart: null,\n targetAnchor: null,\n staticCount: 0,\n shapeFlag,\n patchFlag,\n dynamicProps,\n dynamicChildren: null,\n appContext: null,\n ctx: currentRenderingInstance\n };\n if (needFullChildrenNormalization) {\n normalizeChildren(vnode, children);\n if (shapeFlag & 128) {\n type.normalize(vnode);\n }\n } else if (children) {\n vnode.shapeFlag |= isString(children) ? 8 : 16;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && vnode.key !== vnode.key) {\n warn$1(`VNode created with invalid key (NaN). VNode type:`, vnode.type);\n }\n if (isBlockTreeEnabled > 0 && // avoid a block node from tracking itself\n !isBlockNode && // has current parent block\n currentBlock && // presence of a patch flag indicates this node needs patching on updates.\n // component nodes also should always be patched, because even if the\n // component doesn't need to update, it needs to persist the instance on to\n // the next vnode so that it can be properly unmounted later.\n (vnode.patchFlag > 0 || shapeFlag & 6) && // the EVENTS flag is only for hydration and if it is the only flag, the\n // vnode should not be considered dynamic due to handler caching.\n vnode.patchFlag !== 32) {\n currentBlock.push(vnode);\n }\n return vnode;\n}\nconst createVNode = !!(process.env.NODE_ENV !== \"production\") ? createVNodeWithArgsTransform : _createVNode;\nfunction _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {\n if (!type || type === NULL_DYNAMIC_COMPONENT) {\n if (!!(process.env.NODE_ENV !== \"production\") && !type) {\n warn$1(`Invalid vnode type when creating vnode: ${type}.`);\n }\n type = Comment;\n }\n if (isVNode(type)) {\n const cloned = cloneVNode(\n type,\n props,\n true\n /* mergeRef: true */\n );\n if (children) {\n normalizeChildren(cloned, children);\n }\n if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock) {\n if (cloned.shapeFlag & 6) {\n currentBlock[currentBlock.indexOf(type)] = cloned;\n } else {\n currentBlock.push(cloned);\n }\n }\n cloned.patchFlag = -2;\n return cloned;\n }\n if (isClassComponent(type)) {\n type = type.__vccOpts;\n }\n if (props) {\n props = guardReactiveProps(props);\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (isObject(style)) {\n if (isProxy(style) && !isArray(style)) {\n style = extend({}, style);\n }\n props.style = normalizeStyle(style);\n }\n }\n const shapeFlag = isString(type) ? 1 : isSuspense(type) ? 128 : isTeleport(type) ? 64 : isObject(type) ? 4 : isFunction(type) ? 2 : 0;\n if (!!(process.env.NODE_ENV !== \"production\") && shapeFlag & 4 && isProxy(type)) {\n type = toRaw(type);\n warn$1(\n `Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with \\`markRaw\\` or using \\`shallowRef\\` instead of \\`ref\\`.`,\n `\nComponent that was made reactive: `,\n type\n );\n }\n return createBaseVNode(\n type,\n props,\n children,\n patchFlag,\n dynamicProps,\n shapeFlag,\n isBlockNode,\n true\n );\n}\nfunction guardReactiveProps(props) {\n if (!props) return null;\n return isProxy(props) || isInternalObject(props) ? extend({}, props) : props;\n}\nfunction cloneVNode(vnode, extraProps, mergeRef = false, cloneTransition = false) {\n const { props, ref, patchFlag, children, transition } = vnode;\n const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;\n const cloned = {\n __v_isVNode: true,\n __v_skip: true,\n type: vnode.type,\n props: mergedProps,\n key: mergedProps && normalizeKey(mergedProps),\n ref: extraProps && extraProps.ref ? (\n // #2078 in the case of <component :is=\"vnode\" ref=\"extra\"/>\n // if the vnode itself already has a ref, cloneVNode will need to merge\n // the refs so the single vnode can be set on multiple refs\n mergeRef && ref ? isArray(ref) ? ref.concat(normalizeRef(extraProps)) : [ref, normalizeRef(extraProps)] : normalizeRef(extraProps)\n ) : ref,\n scopeId: vnode.scopeId,\n slotScopeIds: vnode.slotScopeIds,\n children: !!(process.env.NODE_ENV !== \"production\") && patchFlag === -1 && isArray(children) ? children.map(deepCloneVNode) : children,\n target: vnode.target,\n targetStart: vnode.targetStart,\n targetAnchor: vnode.targetAnchor,\n staticCount: vnode.staticCount,\n shapeFlag: vnode.shapeFlag,\n // if the vnode is cloned with extra props, we can no longer assume its\n // existing patch flag to be reliable and need to add the FULL_PROPS flag.\n // note: preserve flag for fragments since they use the flag for children\n // fast paths only.\n patchFlag: extraProps && vnode.type !== Fragment ? patchFlag === -1 ? 16 : patchFlag | 16 : patchFlag,\n dynamicProps: vnode.dynamicProps,\n dynamicChildren: vnode.dynamicChildren,\n appContext: vnode.appContext,\n dirs: vnode.dirs,\n transition,\n // These should technically only be non-null on mounted VNodes. However,\n // they *should* be copied for kept-alive vnodes. So we just always copy\n // them since them being non-null during a mount doesn't affect the logic as\n // they will simply be overwritten.\n component: vnode.component,\n suspense: vnode.suspense,\n ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),\n ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),\n placeholder: vnode.placeholder,\n el: vnode.el,\n anchor: vnode.anchor,\n ctx: vnode.ctx,\n ce: vnode.ce\n };\n if (transition && cloneTransition) {\n setTransitionHooks(\n cloned,\n transition.clone(cloned)\n );\n }\n return cloned;\n}\nfunction deepCloneVNode(vnode) {\n const cloned = cloneVNode(vnode);\n if (isArray(vnode.children)) {\n cloned.children = vnode.children.map(deepCloneVNode);\n }\n return cloned;\n}\nfunction createTextVNode(text = \" \", flag = 0) {\n return createVNode(Text, null, text, flag);\n}\nfunction createStaticVNode(content, numberOfNodes) {\n const vnode = createVNode(Static, null, content);\n vnode.staticCount = numberOfNodes;\n return vnode;\n}\nfunction createCommentVNode(text = \"\", asBlock = false) {\n return asBlock ? (openBlock(), createBlock(Comment, null, text)) : createVNode(Comment, null, text);\n}\nfunction normalizeVNode(child) {\n if (child == null || typeof child === \"boolean\") {\n return createVNode(Comment);\n } else if (isArray(child)) {\n return createVNode(\n Fragment,\n null,\n // #3666, avoid reference pollution when reusing vnode\n child.slice()\n );\n } else if (isVNode(child)) {\n return cloneIfMounted(child);\n } else {\n return createVNode(Text, null, String(child));\n }\n}\nfunction cloneIfMounted(child) {\n return child.el === null && child.patchFlag !== -1 || child.memo ? child : cloneVNode(child);\n}\nfunction normalizeChildren(vnode, children) {\n let type = 0;\n const { shapeFlag } = vnode;\n if (children == null) {\n children = null;\n } else if (isArray(children)) {\n type = 16;\n } else if (typeof children === \"object\") {\n if (shapeFlag & (1 | 64)) {\n const slot = children.default;\n if (slot) {\n slot._c && (slot._d = false);\n normalizeChildren(vnode, slot());\n slot._c && (slot._d = true);\n }\n return;\n } else {\n type = 32;\n const slotFlag = children._;\n if (!slotFlag && !isInternalObject(children)) {\n children._ctx = currentRenderingInstance;\n } else if (slotFlag === 3 && currentRenderingInstance) {\n if (currentRenderingInstance.slots._ === 1) {\n children._ = 1;\n } else {\n children._ = 2;\n vnode.patchFlag |= 1024;\n }\n }\n }\n } else if (isFunction(children)) {\n children = { default: children, _ctx: currentRenderingInstance };\n type = 32;\n } else {\n children = String(children);\n if (shapeFlag & 64) {\n type = 16;\n children = [createTextVNode(children)];\n } else {\n type = 8;\n }\n }\n vnode.children = children;\n vnode.shapeFlag |= type;\n}\nfunction mergeProps(...args) {\n const ret = {};\n for (let i = 0; i < args.length; i++) {\n const toMerge = args[i];\n for (const key in toMerge) {\n if (key === \"class\") {\n if (ret.class !== toMerge.class) {\n ret.class = normalizeClass([ret.class, toMerge.class]);\n }\n } else if (key === \"style\") {\n ret.style = normalizeStyle([ret.style, toMerge.style]);\n } else if (isOn(key)) {\n const existing = ret[key];\n const incoming = toMerge[key];\n if (incoming && existing !== incoming && !(isArray(existing) && existing.includes(incoming))) {\n ret[key] = existing ? [].concat(existing, incoming) : incoming;\n } else if (incoming == null && existing == null && // mergeProps({ 'onUpdate:modelValue': undefined }) should not retain\n // the model listener.\n !isModelListener(key)) {\n ret[key] = incoming;\n }\n } else if (key !== \"\") {\n ret[key] = toMerge[key];\n }\n }\n }\n return ret;\n}\nfunction invokeVNodeHook(hook, instance, vnode, prevVNode = null) {\n callWithAsyncErrorHandling(hook, instance, 7, [\n vnode,\n prevVNode\n ]);\n}\n\nconst emptyAppContext = createAppContext();\nlet uid = 0;\nfunction createComponentInstance(vnode, parent, suspense) {\n const type = vnode.type;\n const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;\n const instance = {\n uid: uid++,\n vnode,\n type,\n parent,\n appContext,\n root: null,\n // to be immediately set\n next: null,\n subTree: null,\n // will be set synchronously right after creation\n effect: null,\n update: null,\n // will be set synchronously right after creation\n job: null,\n scope: new EffectScope(\n true\n /* detached */\n ),\n render: null,\n proxy: null,\n exposed: null,\n exposeProxy: null,\n withProxy: null,\n provides: parent ? parent.provides : Object.create(appContext.provides),\n ids: parent ? parent.ids : [\"\", 0, 0],\n accessCache: null,\n renderCache: [],\n // local resolved assets\n components: null,\n directives: null,\n // resolved props and emits options\n propsOptions: normalizePropsOptions(type, appContext),\n emitsOptions: normalizeEmitsOptions(type, appContext),\n // emit\n emit: null,\n // to be set immediately\n emitted: null,\n // props default value\n propsDefaults: EMPTY_OBJ,\n // inheritAttrs\n inheritAttrs: type.inheritAttrs,\n // state\n ctx: EMPTY_OBJ,\n data: EMPTY_OBJ,\n props: EMPTY_OBJ,\n attrs: EMPTY_OBJ,\n slots: EMPTY_OBJ,\n refs: EMPTY_OBJ,\n setupState: EMPTY_OBJ,\n setupContext: null,\n // suspense related\n suspense,\n suspenseId: suspense ? suspense.pendingId : 0,\n asyncDep: null,\n asyncResolved: false,\n // lifecycle hooks\n // not using enums here because it results in computed properties\n isMounted: false,\n isUnmounted: false,\n isDeactivated: false,\n bc: null,\n c: null,\n bm: null,\n m: null,\n bu: null,\n u: null,\n um: null,\n bum: null,\n da: null,\n a: null,\n rtg: null,\n rtc: null,\n ec: null,\n sp: null\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.ctx = createDevRenderContext(instance);\n } else {\n instance.ctx = { _: instance };\n }\n instance.root = parent ? parent.root : instance;\n instance.emit = emit.bind(null, instance);\n if (vnode.ce) {\n vnode.ce(instance);\n }\n return instance;\n}\nlet currentInstance = null;\nconst getCurrentInstance = () => currentInstance || currentRenderingInstance;\nlet internalSetCurrentInstance;\nlet setInSSRSetupState;\n{\n const g = getGlobalThis();\n const registerGlobalSetter = (key, setter) => {\n let setters;\n if (!(setters = g[key])) setters = g[key] = [];\n setters.push(setter);\n return (v) => {\n if (setters.length > 1) setters.forEach((set) => set(v));\n else setters[0](v);\n };\n };\n internalSetCurrentInstance = registerGlobalSetter(\n `__VUE_INSTANCE_SETTERS__`,\n (v) => currentInstance = v\n );\n setInSSRSetupState = registerGlobalSetter(\n `__VUE_SSR_SETTERS__`,\n (v) => isInSSRComponentSetup = v\n );\n}\nconst setCurrentInstance = (instance) => {\n const prev = currentInstance;\n internalSetCurrentInstance(instance);\n instance.scope.on();\n return () => {\n instance.scope.off();\n internalSetCurrentInstance(prev);\n };\n};\nconst unsetCurrentInstance = () => {\n currentInstance && currentInstance.scope.off();\n internalSetCurrentInstance(null);\n};\nconst isBuiltInTag = /* @__PURE__ */ makeMap(\"slot,component\");\nfunction validateComponentName(name, { isNativeTag }) {\n if (isBuiltInTag(name) || isNativeTag(name)) {\n warn$1(\n \"Do not use built-in or reserved HTML elements as component id: \" + name\n );\n }\n}\nfunction isStatefulComponent(instance) {\n return instance.vnode.shapeFlag & 4;\n}\nlet isInSSRComponentSetup = false;\nfunction setupComponent(instance, isSSR = false, optimized = false) {\n isSSR && setInSSRSetupState(isSSR);\n const { props, children } = instance.vnode;\n const isStateful = isStatefulComponent(instance);\n initProps(instance, props, isStateful, isSSR);\n initSlots(instance, children, optimized || isSSR);\n const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0;\n isSSR && setInSSRSetupState(false);\n return setupResult;\n}\nfunction setupStatefulComponent(instance, isSSR) {\n const Component = instance.type;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (Component.name) {\n validateComponentName(Component.name, instance.appContext.config);\n }\n if (Component.components) {\n const names = Object.keys(Component.components);\n for (let i = 0; i < names.length; i++) {\n validateComponentName(names[i], instance.appContext.config);\n }\n }\n if (Component.directives) {\n const names = Object.keys(Component.directives);\n for (let i = 0; i < names.length; i++) {\n validateDirectiveName(names[i]);\n }\n }\n if (Component.compilerOptions && isRuntimeOnly()) {\n warn$1(\n `\"compilerOptions\" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead.`\n );\n }\n }\n instance.accessCache = /* @__PURE__ */ Object.create(null);\n instance.proxy = new Proxy(instance.ctx, PublicInstanceProxyHandlers);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n exposePropsOnRenderContext(instance);\n }\n const { setup } = Component;\n if (setup) {\n pauseTracking();\n const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null;\n const reset = setCurrentInstance(instance);\n const setupResult = callWithErrorHandling(\n setup,\n instance,\n 0,\n [\n !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(instance.props) : instance.props,\n setupContext\n ]\n );\n const isAsyncSetup = isPromise(setupResult);\n resetTracking();\n reset();\n if ((isAsyncSetup || instance.sp) && !isAsyncWrapper(instance)) {\n markAsyncBoundary(instance);\n }\n if (isAsyncSetup) {\n setupResult.then(unsetCurrentInstance, unsetCurrentInstance);\n if (isSSR) {\n return setupResult.then((resolvedResult) => {\n handleSetupResult(instance, resolvedResult, isSSR);\n }).catch((e) => {\n handleError(e, instance, 0);\n });\n } else {\n instance.asyncDep = setupResult;\n if (!!(process.env.NODE_ENV !== \"production\") && !instance.suspense) {\n const name = formatComponentName(instance, Component);\n warn$1(\n `Component <${name}>: setup function returned a promise, but no <Suspense> boundary was found in the parent component tree. A component with async setup() must be nested in a <Suspense> in order to be rendered.`\n );\n }\n }\n } else {\n handleSetupResult(instance, setupResult, isSSR);\n }\n } else {\n finishComponentSetup(instance, isSSR);\n }\n}\nfunction handleSetupResult(instance, setupResult, isSSR) {\n if (isFunction(setupResult)) {\n if (instance.type.__ssrInlineRender) {\n instance.ssrRender = setupResult;\n } else {\n instance.render = setupResult;\n }\n } else if (isObject(setupResult)) {\n if (!!(process.env.NODE_ENV !== \"production\") && isVNode(setupResult)) {\n warn$1(\n `setup() should not return VNodes directly - return a render function instead.`\n );\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.devtoolsRawSetupState = setupResult;\n }\n instance.setupState = proxyRefs(setupResult);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n exposeSetupStateOnRenderContext(instance);\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupResult !== void 0) {\n warn$1(\n `setup() should return an object. Received: ${setupResult === null ? \"null\" : typeof setupResult}`\n );\n }\n finishComponentSetup(instance, isSSR);\n}\nlet compile;\nlet installWithProxy;\nfunction registerRuntimeCompiler(_compile) {\n compile = _compile;\n installWithProxy = (i) => {\n if (i.render._rc) {\n i.withProxy = new Proxy(i.ctx, RuntimeCompiledPublicInstanceProxyHandlers);\n }\n };\n}\nconst isRuntimeOnly = () => !compile;\nfunction finishComponentSetup(instance, isSSR, skipOptions) {\n const Component = instance.type;\n if (!instance.render) {\n if (!isSSR && compile && !Component.render) {\n const template = Component.template || __VUE_OPTIONS_API__ && resolveMergedOptions(instance).template;\n if (template) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n startMeasure(instance, `compile`);\n }\n const { isCustomElement, compilerOptions } = instance.appContext.config;\n const { delimiters, compilerOptions: componentCompilerOptions } = Component;\n const finalCompilerOptions = extend(\n extend(\n {\n isCustomElement,\n delimiters\n },\n compilerOptions\n ),\n componentCompilerOptions\n );\n Component.render = compile(template, finalCompilerOptions);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n endMeasure(instance, `compile`);\n }\n }\n }\n instance.render = Component.render || NOOP;\n if (installWithProxy) {\n installWithProxy(instance);\n }\n }\n if (__VUE_OPTIONS_API__ && true) {\n const reset = setCurrentInstance(instance);\n pauseTracking();\n try {\n applyOptions(instance);\n } finally {\n resetTracking();\n reset();\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !Component.render && instance.render === NOOP && !isSSR) {\n if (!compile && Component.template) {\n warn$1(\n `Component provided template option but runtime compilation is not supported in this build of Vue.` + (` Configure your bundler to alias \"vue\" to \"vue/dist/vue.esm-bundler.js\".` )\n );\n } else {\n warn$1(`Component is missing template or render function: `, Component);\n }\n }\n}\nconst attrsProxyHandlers = !!(process.env.NODE_ENV !== \"production\") ? {\n get(target, key) {\n markAttrsAccessed();\n track(target, \"get\", \"\");\n return target[key];\n },\n set() {\n warn$1(`setupContext.attrs is readonly.`);\n return false;\n },\n deleteProperty() {\n warn$1(`setupContext.attrs is readonly.`);\n return false;\n }\n} : {\n get(target, key) {\n track(target, \"get\", \"\");\n return target[key];\n }\n};\nfunction getSlotsProxy(instance) {\n return new Proxy(instance.slots, {\n get(target, key) {\n track(instance, \"get\", \"$slots\");\n return target[key];\n }\n });\n}\nfunction createSetupContext(instance) {\n const expose = (exposed) => {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (instance.exposed) {\n warn$1(`expose() should be called only once per setup().`);\n }\n if (exposed != null) {\n let exposedType = typeof exposed;\n if (exposedType === \"object\") {\n if (isArray(exposed)) {\n exposedType = \"array\";\n } else if (isRef(exposed)) {\n exposedType = \"ref\";\n }\n }\n if (exposedType !== \"object\") {\n warn$1(\n `expose() should be passed a plain object, received ${exposedType}.`\n );\n }\n }\n }\n instance.exposed = exposed || {};\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n let attrsProxy;\n let slotsProxy;\n return Object.freeze({\n get attrs() {\n return attrsProxy || (attrsProxy = new Proxy(instance.attrs, attrsProxyHandlers));\n },\n get slots() {\n return slotsProxy || (slotsProxy = getSlotsProxy(instance));\n },\n get emit() {\n return (event, ...args) => instance.emit(event, ...args);\n },\n expose\n });\n } else {\n return {\n attrs: new Proxy(instance.attrs, attrsProxyHandlers),\n slots: instance.slots,\n emit: instance.emit,\n expose\n };\n }\n}\nfunction getComponentPublicInstance(instance) {\n if (instance.exposed) {\n return instance.exposeProxy || (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {\n get(target, key) {\n if (key in target) {\n return target[key];\n } else if (key in publicPropertiesMap) {\n return publicPropertiesMap[key](instance);\n }\n },\n has(target, key) {\n return key in target || key in publicPropertiesMap;\n }\n }));\n } else {\n return instance.proxy;\n }\n}\nconst classifyRE = /(?:^|[-_])\\w/g;\nconst classify = (str) => str.replace(classifyRE, (c) => c.toUpperCase()).replace(/[-_]/g, \"\");\nfunction getComponentName(Component, includeInferred = true) {\n return isFunction(Component) ? Component.displayName || Component.name : Component.name || includeInferred && Component.__name;\n}\nfunction formatComponentName(instance, Component, isRoot = false) {\n let name = getComponentName(Component);\n if (!name && Component.__file) {\n const match = Component.__file.match(/([^/\\\\]+)\\.\\w+$/);\n if (match) {\n name = match[1];\n }\n }\n if (!name && instance) {\n const inferFromRegistry = (registry) => {\n for (const key in registry) {\n if (registry[key] === Component) {\n return key;\n }\n }\n };\n name = inferFromRegistry(instance.components) || instance.parent && inferFromRegistry(\n instance.parent.type.components\n ) || inferFromRegistry(instance.appContext.components);\n }\n return name ? classify(name) : isRoot ? `App` : `Anonymous`;\n}\nfunction isClassComponent(value) {\n return isFunction(value) && \"__vccOpts\" in value;\n}\n\nconst computed = (getterOrOptions, debugOptions) => {\n const c = computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const i = getCurrentInstance();\n if (i && i.appContext.config.warnRecursiveComputed) {\n c._warnRecursive = true;\n }\n }\n return c;\n};\n\nfunction h(type, propsOrChildren, children) {\n try {\n setBlockTracking(-1);\n const l = arguments.length;\n if (l === 2) {\n if (isObject(propsOrChildren) && !isArray(propsOrChildren)) {\n if (isVNode(propsOrChildren)) {\n return createVNode(type, null, [propsOrChildren]);\n }\n return createVNode(type, propsOrChildren);\n } else {\n return createVNode(type, null, propsOrChildren);\n }\n } else {\n if (l > 3) {\n children = Array.prototype.slice.call(arguments, 2);\n } else if (l === 3 && isVNode(children)) {\n children = [children];\n }\n return createVNode(type, propsOrChildren, children);\n }\n } finally {\n setBlockTracking(1);\n }\n}\n\nfunction initCustomFormatter() {\n if (!!!(process.env.NODE_ENV !== \"production\") || typeof window === \"undefined\") {\n return;\n }\n const vueStyle = { style: \"color:#3ba776\" };\n const numberStyle = { style: \"color:#1677ff\" };\n const stringStyle = { style: \"color:#f5222d\" };\n const keywordStyle = { style: \"color:#eb2f96\" };\n const formatter = {\n __vue_custom_formatter: true,\n header(obj) {\n if (!isObject(obj)) {\n return null;\n }\n if (obj.__isVue) {\n return [\"div\", vueStyle, `VueInstance`];\n } else if (isRef(obj)) {\n pauseTracking();\n const value = obj.value;\n resetTracking();\n return [\n \"div\",\n {},\n [\"span\", vueStyle, genRefFlag(obj)],\n \"<\",\n formatValue(value),\n `>`\n ];\n } else if (isReactive(obj)) {\n return [\n \"div\",\n {},\n [\"span\", vueStyle, isShallow(obj) ? \"ShallowReactive\" : \"Reactive\"],\n \"<\",\n formatValue(obj),\n `>${isReadonly(obj) ? ` (readonly)` : ``}`\n ];\n } else if (isReadonly(obj)) {\n return [\n \"div\",\n {},\n [\"span\", vueStyle, isShallow(obj) ? \"ShallowReadonly\" : \"Readonly\"],\n \"<\",\n formatValue(obj),\n \">\"\n ];\n }\n return null;\n },\n hasBody(obj) {\n return obj && obj.__isVue;\n },\n body(obj) {\n if (obj && obj.__isVue) {\n return [\n \"div\",\n {},\n ...formatInstance(obj.$)\n ];\n }\n }\n };\n function formatInstance(instance) {\n const blocks = [];\n if (instance.type.props && instance.props) {\n blocks.push(createInstanceBlock(\"props\", toRaw(instance.props)));\n }\n if (instance.setupState !== EMPTY_OBJ) {\n blocks.push(createInstanceBlock(\"setup\", instance.setupState));\n }\n if (instance.data !== EMPTY_OBJ) {\n blocks.push(createInstanceBlock(\"data\", toRaw(instance.data)));\n }\n const computed = extractKeys(instance, \"computed\");\n if (computed) {\n blocks.push(createInstanceBlock(\"computed\", computed));\n }\n const injected = extractKeys(instance, \"inject\");\n if (injected) {\n blocks.push(createInstanceBlock(\"injected\", injected));\n }\n blocks.push([\n \"div\",\n {},\n [\n \"span\",\n {\n style: keywordStyle.style + \";opacity:0.66\"\n },\n \"$ (internal): \"\n ],\n [\"object\", { object: instance }]\n ]);\n return blocks;\n }\n function createInstanceBlock(type, target) {\n target = extend({}, target);\n if (!Object.keys(target).length) {\n return [\"span\", {}];\n }\n return [\n \"div\",\n { style: \"line-height:1.25em;margin-bottom:0.6em\" },\n [\n \"div\",\n {\n style: \"color:#476582\"\n },\n type\n ],\n [\n \"div\",\n {\n style: \"padding-left:1.25em\"\n },\n ...Object.keys(target).map((key) => {\n return [\n \"div\",\n {},\n [\"span\", keywordStyle, key + \": \"],\n formatValue(target[key], false)\n ];\n })\n ]\n ];\n }\n function formatValue(v, asRaw = true) {\n if (typeof v === \"number\") {\n return [\"span\", numberStyle, v];\n } else if (typeof v === \"string\") {\n return [\"span\", stringStyle, JSON.stringify(v)];\n } else if (typeof v === \"boolean\") {\n return [\"span\", keywordStyle, v];\n } else if (isObject(v)) {\n return [\"object\", { object: asRaw ? toRaw(v) : v }];\n } else {\n return [\"span\", stringStyle, String(v)];\n }\n }\n function extractKeys(instance, type) {\n const Comp = instance.type;\n if (isFunction(Comp)) {\n return;\n }\n const extracted = {};\n for (const key in instance.ctx) {\n if (isKeyOfType(Comp, key, type)) {\n extracted[key] = instance.ctx[key];\n }\n }\n return extracted;\n }\n function isKeyOfType(Comp, key, type) {\n const opts = Comp[type];\n if (isArray(opts) && opts.includes(key) || isObject(opts) && key in opts) {\n return true;\n }\n if (Comp.extends && isKeyOfType(Comp.extends, key, type)) {\n return true;\n }\n if (Comp.mixins && Comp.mixins.some((m) => isKeyOfType(m, key, type))) {\n return true;\n }\n }\n function genRefFlag(v) {\n if (isShallow(v)) {\n return `ShallowRef`;\n }\n if (v.effect) {\n return `ComputedRef`;\n }\n return `Ref`;\n }\n if (window.devtoolsFormatters) {\n window.devtoolsFormatters.push(formatter);\n } else {\n window.devtoolsFormatters = [formatter];\n }\n}\n\nfunction withMemo(memo, render, cache, index) {\n const cached = cache[index];\n if (cached && isMemoSame(cached, memo)) {\n return cached;\n }\n const ret = render();\n ret.memo = memo.slice();\n ret.cacheIndex = index;\n return cache[index] = ret;\n}\nfunction isMemoSame(cached, memo) {\n const prev = cached.memo;\n if (prev.length != memo.length) {\n return false;\n }\n for (let i = 0; i < prev.length; i++) {\n if (hasChanged(prev[i], memo[i])) {\n return false;\n }\n }\n if (isBlockTreeEnabled > 0 && currentBlock) {\n currentBlock.push(cached);\n }\n return true;\n}\n\nconst version = \"3.5.34\";\nconst warn = !!(process.env.NODE_ENV !== \"production\") ? warn$1 : NOOP;\nconst ErrorTypeStrings = ErrorTypeStrings$1 ;\nconst devtools = !!(process.env.NODE_ENV !== \"production\") || true ? devtools$1 : void 0;\nconst setDevtoolsHook = !!(process.env.NODE_ENV !== \"production\") || true ? setDevtoolsHook$1 : NOOP;\nconst _ssrUtils = {\n createComponentInstance,\n setupComponent,\n renderComponentRoot,\n setCurrentRenderingInstance,\n isVNode: isVNode,\n normalizeVNode,\n getComponentPublicInstance,\n ensureValidVNode,\n pushWarningContext,\n popWarningContext\n};\nconst ssrUtils = _ssrUtils ;\nconst resolveFilter = null;\nconst compatUtils = null;\nconst DeprecationTypes = null;\n\nexport { BaseTransition, BaseTransitionPropsValidators, Comment, DeprecationTypes, ErrorCodes, ErrorTypeStrings, Fragment, KeepAlive, Static, Suspense, Teleport, Text, assertNumber, callWithAsyncErrorHandling, callWithErrorHandling, cloneVNode, compatUtils, computed, createBlock, createCommentVNode, createElementBlock, createBaseVNode as createElementVNode, createHydrationRenderer, createPropsRestProxy, createRenderer, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, defineEmits, defineExpose, defineModel, defineOptions, defineProps, defineSlots, devtools, getCurrentInstance, getTransitionRawChildren, guardReactiveProps, h, handleError, hasInjectionContext, hydrateOnIdle, hydrateOnInteraction, hydrateOnMediaQuery, hydrateOnVisible, initCustomFormatter, inject, isMemoSame, isRuntimeOnly, isVNode, mergeDefaults, mergeModels, mergeProps, nextTick, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onServerPrefetch, onUnmounted, onUpdated, openBlock, popScopeId, provide, pushScopeId, queuePostFlushCb, registerRuntimeCompiler, renderList, renderSlot, resolveComponent, resolveDirective, resolveDynamicComponent, resolveFilter, resolveTransitionHooks, setBlockTracking, setDevtoolsHook, setTransitionHooks, ssrContextKey, ssrUtils, toHandlers, transformVNodeArgs, useAttrs, useId, useModel, useSSRContext, useSlots, useTemplateRef, useTransitionState, version, warn, watch, watchEffect, watchPostEffect, watchSyncEffect, withAsyncContext, withCtx, withDefaults, withDirectives, withMemo, withScopeId };\n","/**\n* @vue/runtime-dom v3.5.34\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\nimport { warn, BaseTransitionPropsValidators, h, BaseTransition, assertNumber, getCurrentInstance, onBeforeUpdate, queuePostFlushCb, onMounted, watch, onUnmounted, Fragment, Static, camelize, callWithAsyncErrorHandling, nextTick, unref, createVNode, defineComponent, useTransitionState, onUpdated, toRaw, getTransitionRawChildren, setTransitionHooks, resolveTransitionHooks, Text, createRenderer, isRuntimeOnly, createHydrationRenderer } from '@vue/runtime-core';\nexport * from '@vue/runtime-core';\nimport { extend, isObject, toNumber, isArray, NOOP, normalizeCssVarValue, isString, hyphenate, capitalize, includeBooleanAttr, isSymbol, isSpecialBooleanAttr, isFunction, isOn, isModelListener, camelize as camelize$1, hasOwn, isPlainObject, EMPTY_OBJ, looseIndexOf, isSet, looseEqual, looseToNumber, invokeArrayFns, isHTMLTag, isSVGTag, isMathMLTag } from '@vue/shared';\n\nlet policy = void 0;\nconst tt = typeof window !== \"undefined\" && window.trustedTypes;\nif (tt) {\n try {\n policy = /* @__PURE__ */ tt.createPolicy(\"vue\", {\n createHTML: (val) => val\n });\n } catch (e) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Error creating trusted types policy: ${e}`);\n }\n}\nconst unsafeToTrustedHTML = policy ? (val) => policy.createHTML(val) : (val) => val;\nconst svgNS = \"http://www.w3.org/2000/svg\";\nconst mathmlNS = \"http://www.w3.org/1998/Math/MathML\";\nconst doc = typeof document !== \"undefined\" ? document : null;\nconst templateContainer = doc && /* @__PURE__ */ doc.createElement(\"template\");\nconst nodeOps = {\n insert: (child, parent, anchor) => {\n parent.insertBefore(child, anchor || null);\n },\n remove: (child) => {\n const parent = child.parentNode;\n if (parent) {\n parent.removeChild(child);\n }\n },\n createElement: (tag, namespace, is, props) => {\n const el = namespace === \"svg\" ? doc.createElementNS(svgNS, tag) : namespace === \"mathml\" ? doc.createElementNS(mathmlNS, tag) : is ? doc.createElement(tag, { is }) : doc.createElement(tag);\n if (tag === \"select\" && props && props.multiple != null) {\n el.setAttribute(\"multiple\", props.multiple);\n }\n return el;\n },\n createText: (text) => doc.createTextNode(text),\n createComment: (text) => doc.createComment(text),\n setText: (node, text) => {\n node.nodeValue = text;\n },\n setElementText: (el, text) => {\n el.textContent = text;\n },\n parentNode: (node) => node.parentNode,\n nextSibling: (node) => node.nextSibling,\n querySelector: (selector) => doc.querySelector(selector),\n setScopeId(el, id) {\n el.setAttribute(id, \"\");\n },\n // __UNSAFE__\n // Reason: innerHTML.\n // Static content here can only come from compiled templates.\n // As long as the user only uses trusted templates, this is safe.\n insertStaticContent(content, parent, anchor, namespace, start, end) {\n const before = anchor ? anchor.previousSibling : parent.lastChild;\n if (start && (start === end || start.nextSibling)) {\n while (true) {\n parent.insertBefore(start.cloneNode(true), anchor);\n if (start === end || !(start = start.nextSibling)) break;\n }\n } else {\n templateContainer.innerHTML = unsafeToTrustedHTML(\n namespace === \"svg\" ? `<svg>${content}</svg>` : namespace === \"mathml\" ? `<math>${content}</math>` : content\n );\n const template = templateContainer.content;\n if (namespace === \"svg\" || namespace === \"mathml\") {\n const wrapper = template.firstChild;\n while (wrapper.firstChild) {\n template.appendChild(wrapper.firstChild);\n }\n template.removeChild(wrapper);\n }\n parent.insertBefore(template, anchor);\n }\n return [\n // first\n before ? before.nextSibling : parent.firstChild,\n // last\n anchor ? anchor.previousSibling : parent.lastChild\n ];\n }\n};\n\nconst TRANSITION = \"transition\";\nconst ANIMATION = \"animation\";\nconst vtcKey = /* @__PURE__ */ Symbol(\"_vtc\");\nconst DOMTransitionPropsValidators = {\n name: String,\n type: String,\n css: {\n type: Boolean,\n default: true\n },\n duration: [String, Number, Object],\n enterFromClass: String,\n enterActiveClass: String,\n enterToClass: String,\n appearFromClass: String,\n appearActiveClass: String,\n appearToClass: String,\n leaveFromClass: String,\n leaveActiveClass: String,\n leaveToClass: String\n};\nconst TransitionPropsValidators = /* @__PURE__ */ extend(\n {},\n BaseTransitionPropsValidators,\n DOMTransitionPropsValidators\n);\nconst decorate$1 = (t) => {\n t.displayName = \"Transition\";\n t.props = TransitionPropsValidators;\n return t;\n};\nconst Transition = /* @__PURE__ */ decorate$1(\n (props, { slots }) => h(BaseTransition, resolveTransitionProps(props), slots)\n);\nconst callHook = (hook, args = []) => {\n if (isArray(hook)) {\n hook.forEach((h2) => h2(...args));\n } else if (hook) {\n hook(...args);\n }\n};\nconst hasExplicitCallback = (hook) => {\n return hook ? isArray(hook) ? hook.some((h2) => h2.length > 1) : hook.length > 1 : false;\n};\nfunction resolveTransitionProps(rawProps) {\n const baseProps = {};\n for (const key in rawProps) {\n if (!(key in DOMTransitionPropsValidators)) {\n baseProps[key] = rawProps[key];\n }\n }\n if (rawProps.css === false) {\n return baseProps;\n }\n const {\n name = \"v\",\n type,\n duration,\n enterFromClass = `${name}-enter-from`,\n enterActiveClass = `${name}-enter-active`,\n enterToClass = `${name}-enter-to`,\n appearFromClass = enterFromClass,\n appearActiveClass = enterActiveClass,\n appearToClass = enterToClass,\n leaveFromClass = `${name}-leave-from`,\n leaveActiveClass = `${name}-leave-active`,\n leaveToClass = `${name}-leave-to`\n } = rawProps;\n const durations = normalizeDuration(duration);\n const enterDuration = durations && durations[0];\n const leaveDuration = durations && durations[1];\n const {\n onBeforeEnter,\n onEnter,\n onEnterCancelled,\n onLeave,\n onLeaveCancelled,\n onBeforeAppear = onBeforeEnter,\n onAppear = onEnter,\n onAppearCancelled = onEnterCancelled\n } = baseProps;\n const finishEnter = (el, isAppear, done, isCancelled) => {\n el._enterCancelled = isCancelled;\n removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n done && done();\n };\n const finishLeave = (el, done) => {\n el._isLeaving = false;\n removeTransitionClass(el, leaveFromClass);\n removeTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveActiveClass);\n done && done();\n };\n const makeEnterHook = (isAppear) => {\n return (el, done) => {\n const hook = isAppear ? onAppear : onEnter;\n const resolve = () => finishEnter(el, isAppear, done);\n callHook(hook, [el, resolve]);\n nextFrame(() => {\n removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n if (!hasExplicitCallback(hook)) {\n whenTransitionEnds(el, type, enterDuration, resolve);\n }\n });\n };\n };\n return extend(baseProps, {\n onBeforeEnter(el) {\n callHook(onBeforeEnter, [el]);\n addTransitionClass(el, enterFromClass);\n addTransitionClass(el, enterActiveClass);\n },\n onBeforeAppear(el) {\n callHook(onBeforeAppear, [el]);\n addTransitionClass(el, appearFromClass);\n addTransitionClass(el, appearActiveClass);\n },\n onEnter: makeEnterHook(false),\n onAppear: makeEnterHook(true),\n onLeave(el, done) {\n el._isLeaving = true;\n const resolve = () => finishLeave(el, done);\n addTransitionClass(el, leaveFromClass);\n if (!el._enterCancelled) {\n forceReflow(el);\n addTransitionClass(el, leaveActiveClass);\n } else {\n addTransitionClass(el, leaveActiveClass);\n forceReflow(el);\n }\n nextFrame(() => {\n if (!el._isLeaving) {\n return;\n }\n removeTransitionClass(el, leaveFromClass);\n addTransitionClass(el, leaveToClass);\n if (!hasExplicitCallback(onLeave)) {\n whenTransitionEnds(el, type, leaveDuration, resolve);\n }\n });\n callHook(onLeave, [el, resolve]);\n },\n onEnterCancelled(el) {\n finishEnter(el, false, void 0, true);\n callHook(onEnterCancelled, [el]);\n },\n onAppearCancelled(el) {\n finishEnter(el, true, void 0, true);\n callHook(onAppearCancelled, [el]);\n },\n onLeaveCancelled(el) {\n finishLeave(el);\n callHook(onLeaveCancelled, [el]);\n }\n });\n}\nfunction normalizeDuration(duration) {\n if (duration == null) {\n return null;\n } else if (isObject(duration)) {\n return [NumberOf(duration.enter), NumberOf(duration.leave)];\n } else {\n const n = NumberOf(duration);\n return [n, n];\n }\n}\nfunction NumberOf(val) {\n const res = toNumber(val);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assertNumber(res, \"<transition> explicit duration\");\n }\n return res;\n}\nfunction addTransitionClass(el, cls) {\n cls.split(/\\s+/).forEach((c) => c && el.classList.add(c));\n (el[vtcKey] || (el[vtcKey] = /* @__PURE__ */ new Set())).add(cls);\n}\nfunction removeTransitionClass(el, cls) {\n cls.split(/\\s+/).forEach((c) => c && el.classList.remove(c));\n const _vtc = el[vtcKey];\n if (_vtc) {\n _vtc.delete(cls);\n if (!_vtc.size) {\n el[vtcKey] = void 0;\n }\n }\n}\nfunction nextFrame(cb) {\n requestAnimationFrame(() => {\n requestAnimationFrame(cb);\n });\n}\nlet endId = 0;\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n const id = el._endId = ++endId;\n const resolveIfNotStale = () => {\n if (id === el._endId) {\n resolve();\n }\n };\n if (explicitTimeout != null) {\n return setTimeout(resolveIfNotStale, explicitTimeout);\n }\n const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\n if (!type) {\n return resolve();\n }\n const endEvent = type + \"end\";\n let ended = 0;\n const end = () => {\n el.removeEventListener(endEvent, onEnd);\n resolveIfNotStale();\n };\n const onEnd = (e) => {\n if (e.target === el && ++ended >= propCount) {\n end();\n }\n };\n setTimeout(() => {\n if (ended < propCount) {\n end();\n }\n }, timeout + 1);\n el.addEventListener(endEvent, onEnd);\n}\nfunction getTransitionInfo(el, expectedType) {\n const styles = window.getComputedStyle(el);\n const getStyleProperties = (key) => (styles[key] || \"\").split(\", \");\n const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n const animationTimeout = getTimeout(animationDelays, animationDurations);\n let type = null;\n let timeout = 0;\n let propCount = 0;\n if (expectedType === TRANSITION) {\n if (transitionTimeout > 0) {\n type = TRANSITION;\n timeout = transitionTimeout;\n propCount = transitionDurations.length;\n }\n } else if (expectedType === ANIMATION) {\n if (animationTimeout > 0) {\n type = ANIMATION;\n timeout = animationTimeout;\n propCount = animationDurations.length;\n }\n } else {\n timeout = Math.max(transitionTimeout, animationTimeout);\n type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null;\n propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0;\n }\n const hasTransform = type === TRANSITION && /\\b(?:transform|all)(?:,|$)/.test(\n getStyleProperties(`${TRANSITION}Property`).toString()\n );\n return {\n type,\n timeout,\n propCount,\n hasTransform\n };\n}\nfunction getTimeout(delays, durations) {\n while (delays.length < durations.length) {\n delays = delays.concat(delays);\n }\n return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n}\nfunction toMs(s) {\n if (s === \"auto\") return 0;\n return Number(s.slice(0, -1).replace(\",\", \".\")) * 1e3;\n}\nfunction forceReflow(el) {\n const targetDocument = el ? el.ownerDocument : document;\n return targetDocument.body.offsetHeight;\n}\n\nfunction patchClass(el, value, isSVG) {\n const transitionClasses = el[vtcKey];\n if (transitionClasses) {\n value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(\" \");\n }\n if (value == null) {\n el.removeAttribute(\"class\");\n } else if (isSVG) {\n el.setAttribute(\"class\", value);\n } else {\n el.className = value;\n }\n}\n\nconst vShowOriginalDisplay = /* @__PURE__ */ Symbol(\"_vod\");\nconst vShowHidden = /* @__PURE__ */ Symbol(\"_vsh\");\nconst vShow = {\n // used for prop mismatch check during hydration\n name: \"show\",\n beforeMount(el, { value }, { transition }) {\n el[vShowOriginalDisplay] = el.style.display === \"none\" ? \"\" : el.style.display;\n if (transition && value) {\n transition.beforeEnter(el);\n } else {\n setDisplay(el, value);\n }\n },\n mounted(el, { value }, { transition }) {\n if (transition && value) {\n transition.enter(el);\n }\n },\n updated(el, { value, oldValue }, { transition }) {\n if (!value === !oldValue) return;\n if (transition) {\n if (value) {\n transition.beforeEnter(el);\n setDisplay(el, true);\n transition.enter(el);\n } else {\n transition.leave(el, () => {\n setDisplay(el, false);\n });\n }\n } else {\n setDisplay(el, value);\n }\n },\n beforeUnmount(el, { value }) {\n setDisplay(el, value);\n }\n};\nfunction setDisplay(el, value) {\n el.style.display = value ? el[vShowOriginalDisplay] : \"none\";\n el[vShowHidden] = !value;\n}\nfunction initVShowForSSR() {\n vShow.getSSRProps = ({ value }) => {\n if (!value) {\n return { style: { display: \"none\" } };\n }\n };\n}\n\nconst CSS_VAR_TEXT = /* @__PURE__ */ Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"CSS_VAR_TEXT\" : \"\");\nfunction useCssVars(getter) {\n const instance = getCurrentInstance();\n if (!instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`useCssVars is called without current active component instance.`);\n return;\n }\n const updateTeleports = instance.ut = (vars = getter(instance.proxy)) => {\n Array.from(\n document.querySelectorAll(`[data-v-owner=\"${instance.uid}\"]`)\n ).forEach((node) => setVarsOnNode(node, vars));\n };\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.getCssVars = () => getter(instance.proxy);\n }\n const setVars = () => {\n const vars = getter(instance.proxy);\n if (instance.ce) {\n setVarsOnNode(instance.ce, vars);\n } else {\n setVarsOnVNode(instance.subTree, vars);\n }\n updateTeleports(vars);\n };\n onBeforeUpdate(() => {\n queuePostFlushCb(setVars);\n });\n onMounted(() => {\n watch(setVars, NOOP, { flush: \"post\" });\n const ob = new MutationObserver(setVars);\n ob.observe(instance.subTree.el.parentNode, { childList: true });\n onUnmounted(() => ob.disconnect());\n });\n}\nfunction setVarsOnVNode(vnode, vars) {\n if (vnode.shapeFlag & 128) {\n const suspense = vnode.suspense;\n vnode = suspense.activeBranch;\n if (suspense.pendingBranch && !suspense.isHydrating) {\n suspense.effects.push(() => {\n setVarsOnVNode(suspense.activeBranch, vars);\n });\n }\n }\n while (vnode.component) {\n vnode = vnode.component.subTree;\n }\n if (vnode.shapeFlag & 1 && vnode.el) {\n setVarsOnNode(vnode.el, vars);\n } else if (vnode.type === Fragment) {\n vnode.children.forEach((c) => setVarsOnVNode(c, vars));\n } else if (vnode.type === Static) {\n let { el, anchor } = vnode;\n while (el) {\n setVarsOnNode(el, vars);\n if (el === anchor) break;\n el = el.nextSibling;\n }\n }\n}\nfunction setVarsOnNode(el, vars) {\n if (el.nodeType === 1) {\n const style = el.style;\n let cssText = \"\";\n for (const key in vars) {\n const value = normalizeCssVarValue(vars[key]);\n style.setProperty(`--${key}`, value);\n cssText += `--${key}: ${value};`;\n }\n style[CSS_VAR_TEXT] = cssText;\n }\n}\n\nconst displayRE = /(?:^|;)\\s*display\\s*:/;\nfunction patchStyle(el, prev, next) {\n const style = el.style;\n const isCssString = isString(next);\n let hasControlledDisplay = false;\n if (next && !isCssString) {\n if (prev) {\n if (!isString(prev)) {\n for (const key in prev) {\n if (next[key] == null) {\n setStyle(style, key, \"\");\n }\n }\n } else {\n for (const prevStyle of prev.split(\";\")) {\n const key = prevStyle.slice(0, prevStyle.indexOf(\":\")).trim();\n if (next[key] == null) {\n setStyle(style, key, \"\");\n }\n }\n }\n }\n for (const key in next) {\n if (key === \"display\") {\n hasControlledDisplay = true;\n }\n const value = next[key];\n if (value != null) {\n if (!shouldPreserveTextareaResizeStyle(\n el,\n key,\n !isString(prev) && prev ? prev[key] : void 0,\n value\n )) {\n setStyle(style, key, value);\n }\n } else {\n setStyle(style, key, \"\");\n }\n }\n } else {\n if (isCssString) {\n if (prev !== next) {\n const cssVarText = style[CSS_VAR_TEXT];\n if (cssVarText) {\n next += \";\" + cssVarText;\n }\n style.cssText = next;\n hasControlledDisplay = displayRE.test(next);\n }\n } else if (prev) {\n el.removeAttribute(\"style\");\n }\n }\n if (vShowOriginalDisplay in el) {\n el[vShowOriginalDisplay] = hasControlledDisplay ? style.display : \"\";\n if (el[vShowHidden]) {\n style.display = \"none\";\n }\n }\n}\nconst semicolonRE = /[^\\\\];\\s*$/;\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n if (isArray(val)) {\n val.forEach((v) => setStyle(style, name, v));\n } else {\n if (val == null) val = \"\";\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (semicolonRE.test(val)) {\n warn(\n `Unexpected semicolon at the end of '${name}' style value: '${val}'`\n );\n }\n }\n if (name.startsWith(\"--\")) {\n style.setProperty(name, val);\n } else {\n const prefixed = autoPrefix(style, name);\n if (importantRE.test(val)) {\n style.setProperty(\n hyphenate(prefixed),\n val.replace(importantRE, \"\"),\n \"important\"\n );\n } else {\n style[prefixed] = val;\n }\n }\n }\n}\nconst prefixes = [\"Webkit\", \"Moz\", \"ms\"];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n const cached = prefixCache[rawName];\n if (cached) {\n return cached;\n }\n let name = camelize(rawName);\n if (name !== \"filter\" && name in style) {\n return prefixCache[rawName] = name;\n }\n name = capitalize(name);\n for (let i = 0; i < prefixes.length; i++) {\n const prefixed = prefixes[i] + name;\n if (prefixed in style) {\n return prefixCache[rawName] = prefixed;\n }\n }\n return rawName;\n}\nfunction shouldPreserveTextareaResizeStyle(el, key, prev, next) {\n return el.tagName === \"TEXTAREA\" && (key === \"width\" || key === \"height\") && isString(next) && prev === next;\n}\n\nconst xlinkNS = \"http://www.w3.org/1999/xlink\";\nfunction patchAttr(el, key, value, isSVG, instance, isBoolean = isSpecialBooleanAttr(key)) {\n if (isSVG && key.startsWith(\"xlink:\")) {\n if (value == null) {\n el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n } else {\n el.setAttributeNS(xlinkNS, key, value);\n }\n } else {\n if (value == null || isBoolean && !includeBooleanAttr(value)) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(\n key,\n isBoolean ? \"\" : isSymbol(value) ? String(value) : value\n );\n }\n }\n}\n\nfunction patchDOMProp(el, key, value, parentComponent, attrName) {\n if (key === \"innerHTML\" || key === \"textContent\") {\n if (value != null) {\n el[key] = key === \"innerHTML\" ? unsafeToTrustedHTML(value) : value;\n }\n return;\n }\n const tag = el.tagName;\n if (key === \"value\" && tag !== \"PROGRESS\" && // custom elements may use _value internally\n !tag.includes(\"-\")) {\n const oldValue = tag === \"OPTION\" ? el.getAttribute(\"value\") || \"\" : el.value;\n const newValue = value == null ? (\n // #11647: value should be set as empty string for null and undefined,\n // but <input type=\"checkbox\"> should be set as 'on'.\n el.type === \"checkbox\" ? \"on\" : \"\"\n ) : String(value);\n if (oldValue !== newValue || !(\"_value\" in el)) {\n el.value = newValue;\n }\n if (value == null) {\n el.removeAttribute(key);\n }\n el._value = value;\n return;\n }\n let needRemove = false;\n if (value === \"\" || value == null) {\n const type = typeof el[key];\n if (type === \"boolean\") {\n value = includeBooleanAttr(value);\n } else if (value == null && type === \"string\") {\n value = \"\";\n needRemove = true;\n } else if (type === \"number\") {\n value = 0;\n needRemove = true;\n }\n }\n try {\n el[key] = value;\n } catch (e) {\n if (!!(process.env.NODE_ENV !== \"production\") && !needRemove) {\n warn(\n `Failed setting prop \"${key}\" on <${tag.toLowerCase()}>: value ${value} is invalid.`,\n e\n );\n }\n }\n needRemove && el.removeAttribute(attrName || key);\n}\n\nfunction addEventListener(el, event, handler, options) {\n el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n el.removeEventListener(event, handler, options);\n}\nconst veiKey = /* @__PURE__ */ Symbol(\"_vei\");\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n const invokers = el[veiKey] || (el[veiKey] = {});\n const existingInvoker = invokers[rawName];\n if (nextValue && existingInvoker) {\n existingInvoker.value = !!(process.env.NODE_ENV !== \"production\") ? sanitizeEventValue(nextValue, rawName) : nextValue;\n } else {\n const [name, options] = parseName(rawName);\n if (nextValue) {\n const invoker = invokers[rawName] = createInvoker(\n !!(process.env.NODE_ENV !== \"production\") ? sanitizeEventValue(nextValue, rawName) : nextValue,\n instance\n );\n addEventListener(el, name, invoker, options);\n } else if (existingInvoker) {\n removeEventListener(el, name, existingInvoker, options);\n invokers[rawName] = void 0;\n }\n }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n let options;\n if (optionsModifierRE.test(name)) {\n options = {};\n let m;\n while (m = name.match(optionsModifierRE)) {\n name = name.slice(0, name.length - m[0].length);\n options[m[0].toLowerCase()] = true;\n }\n }\n const event = name[2] === \":\" ? name.slice(3) : hyphenate(name.slice(2));\n return [event, options];\n}\nlet cachedNow = 0;\nconst p = /* @__PURE__ */ Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => cachedNow = 0), cachedNow = Date.now());\nfunction createInvoker(initialValue, instance) {\n const invoker = (e) => {\n if (!e._vts) {\n e._vts = Date.now();\n } else if (e._vts <= invoker.attached) {\n return;\n }\n callWithAsyncErrorHandling(\n patchStopImmediatePropagation(e, invoker.value),\n instance,\n 5,\n [e]\n );\n };\n invoker.value = initialValue;\n invoker.attached = getNow();\n return invoker;\n}\nfunction sanitizeEventValue(value, propName) {\n if (isFunction(value) || isArray(value)) {\n return value;\n }\n warn(\n `Wrong type passed as event handler to ${propName} - did you forget @ or : in front of your prop?\nExpected function or array of functions, received type ${typeof value}.`\n );\n return NOOP;\n}\nfunction patchStopImmediatePropagation(e, value) {\n if (isArray(value)) {\n const originalStop = e.stopImmediatePropagation;\n e.stopImmediatePropagation = () => {\n originalStop.call(e);\n e._stopped = true;\n };\n return value.map(\n (fn) => (e2) => !e2._stopped && fn && fn(e2)\n );\n } else {\n return value;\n }\n}\n\nconst isNativeOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // lowercase letter\nkey.charCodeAt(2) > 96 && key.charCodeAt(2) < 123;\nconst patchProp = (el, key, prevValue, nextValue, namespace, parentComponent) => {\n const isSVG = namespace === \"svg\";\n if (key === \"class\") {\n patchClass(el, nextValue, isSVG);\n } else if (key === \"style\") {\n patchStyle(el, prevValue, nextValue);\n } else if (isOn(key)) {\n if (!isModelListener(key)) {\n patchEvent(el, key, prevValue, nextValue, parentComponent);\n }\n } else if (key[0] === \".\" ? (key = key.slice(1), true) : key[0] === \"^\" ? (key = key.slice(1), false) : shouldSetAsProp(el, key, nextValue, isSVG)) {\n patchDOMProp(el, key, nextValue);\n if (!el.tagName.includes(\"-\") && (key === \"value\" || key === \"checked\" || key === \"selected\")) {\n patchAttr(el, key, nextValue, isSVG, parentComponent, key !== \"value\");\n }\n } else if (\n // #11081 force set props for possible async custom element\n el._isVueCE && // #12408 check if it's declared prop or it's async custom element\n (shouldSetAsPropForVueCE(el, key) || // @ts-expect-error _def is private\n el._def.__asyncLoader && (/[A-Z]/.test(key) || !isString(nextValue)))\n ) {\n patchDOMProp(el, camelize$1(key), nextValue, parentComponent, key);\n } else {\n if (key === \"true-value\") {\n el._trueValue = nextValue;\n } else if (key === \"false-value\") {\n el._falseValue = nextValue;\n }\n patchAttr(el, key, nextValue, isSVG);\n }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n if (isSVG) {\n if (key === \"innerHTML\" || key === \"textContent\") {\n return true;\n }\n if (key in el && isNativeOn(key) && isFunction(value)) {\n return true;\n }\n return false;\n }\n if (key === \"spellcheck\" || key === \"draggable\" || key === \"translate\" || key === \"autocorrect\") {\n return false;\n }\n if (key === \"sandbox\" && el.tagName === \"IFRAME\") {\n return false;\n }\n if (key === \"form\") {\n return false;\n }\n if (key === \"list\" && el.tagName === \"INPUT\") {\n return false;\n }\n if (key === \"type\" && el.tagName === \"TEXTAREA\") {\n return false;\n }\n if (key === \"width\" || key === \"height\") {\n const tag = el.tagName;\n if (tag === \"IMG\" || tag === \"VIDEO\" || tag === \"CANVAS\" || tag === \"SOURCE\") {\n return false;\n }\n }\n if (isNativeOn(key) && isString(value)) {\n return false;\n }\n return key in el;\n}\nfunction shouldSetAsPropForVueCE(el, key) {\n const props = (\n // @ts-expect-error _def is private\n el._def.props\n );\n if (!props) {\n return false;\n }\n const camelKey = camelize$1(key);\n return Array.isArray(props) ? props.some((prop) => camelize$1(prop) === camelKey) : Object.keys(props).some((prop) => camelize$1(prop) === camelKey);\n}\n\nconst REMOVAL = {};\n// @__NO_SIDE_EFFECTS__\nfunction defineCustomElement(options, extraOptions, _createApp) {\n let Comp = defineComponent(options, extraOptions);\n if (isPlainObject(Comp)) Comp = extend({}, Comp, extraOptions);\n class VueCustomElement extends VueElement {\n constructor(initialProps) {\n super(Comp, initialProps, _createApp);\n }\n }\n VueCustomElement.def = Comp;\n return VueCustomElement;\n}\nconst defineSSRCustomElement = (/* @__NO_SIDE_EFFECTS__ */ (options, extraOptions) => {\n return /* @__PURE__ */ defineCustomElement(options, extraOptions, createSSRApp);\n});\nconst BaseClass = typeof HTMLElement !== \"undefined\" ? HTMLElement : class {\n};\nclass VueElement extends BaseClass {\n constructor(_def, _props = {}, _createApp = createApp) {\n super();\n this._def = _def;\n this._props = _props;\n this._createApp = _createApp;\n this._isVueCE = true;\n /**\n * @internal\n */\n this._instance = null;\n /**\n * @internal\n */\n this._app = null;\n /**\n * @internal\n */\n this._nonce = this._def.nonce;\n this._connected = false;\n this._resolved = false;\n this._patching = false;\n this._dirty = false;\n this._numberProps = null;\n this._styleChildren = /* @__PURE__ */ new WeakSet();\n this._styleAnchors = /* @__PURE__ */ new WeakMap();\n this._ob = null;\n if (this.shadowRoot && _createApp !== createApp) {\n this._root = this.shadowRoot;\n } else {\n if (!!(process.env.NODE_ENV !== \"production\") && this.shadowRoot) {\n warn(\n `Custom element has pre-rendered declarative shadow root but is not defined as hydratable. Use \\`defineSSRCustomElement\\`.`\n );\n }\n if (_def.shadowRoot !== false) {\n this.attachShadow(\n extend({}, _def.shadowRootOptions, {\n mode: \"open\"\n })\n );\n this._root = this.shadowRoot;\n } else {\n this._root = this;\n }\n }\n }\n connectedCallback() {\n if (!this.isConnected) return;\n if (!this.shadowRoot && !this._resolved) {\n this._parseSlots();\n }\n this._connected = true;\n let parent = this;\n while (parent = parent && // #12479 should check assignedSlot first to get correct parent\n (parent.assignedSlot || parent.parentNode || parent.host)) {\n if (parent instanceof VueElement) {\n this._parent = parent;\n break;\n }\n }\n if (!this._instance) {\n if (this._resolved) {\n this._mount(this._def);\n } else {\n if (parent && parent._pendingResolve) {\n this._pendingResolve = parent._pendingResolve.then(() => {\n this._pendingResolve = void 0;\n this._resolveDef();\n });\n } else {\n this._resolveDef();\n }\n }\n }\n }\n _setParent(parent = this._parent) {\n if (parent) {\n this._instance.parent = parent._instance;\n this._inheritParentContext(parent);\n }\n }\n _inheritParentContext(parent = this._parent) {\n if (parent && this._app) {\n Object.setPrototypeOf(\n this._app._context.provides,\n parent._instance.provides\n );\n }\n }\n disconnectedCallback() {\n this._connected = false;\n nextTick(() => {\n if (!this._connected) {\n if (this._ob) {\n this._ob.disconnect();\n this._ob = null;\n }\n this._app && this._app.unmount();\n if (this._instance) this._instance.ce = void 0;\n this._app = this._instance = null;\n if (this._teleportTargets) {\n this._teleportTargets.clear();\n this._teleportTargets = void 0;\n }\n }\n });\n }\n _processMutations(mutations) {\n for (const m of mutations) {\n this._setAttr(m.attributeName);\n }\n }\n /**\n * resolve inner component definition (handle possible async component)\n */\n _resolveDef() {\n if (this._pendingResolve) {\n return;\n }\n for (let i = 0; i < this.attributes.length; i++) {\n this._setAttr(this.attributes[i].name);\n }\n this._ob = new MutationObserver(this._processMutations.bind(this));\n this._ob.observe(this, { attributes: true });\n const resolve = (def, isAsync = false) => {\n this._resolved = true;\n this._pendingResolve = void 0;\n const { props, styles } = def;\n let numberProps;\n if (props && !isArray(props)) {\n for (const key in props) {\n const opt = props[key];\n if (opt === Number || opt && opt.type === Number) {\n if (key in this._props) {\n this._props[key] = toNumber(this._props[key]);\n }\n (numberProps || (numberProps = /* @__PURE__ */ Object.create(null)))[camelize$1(key)] = true;\n }\n }\n }\n this._numberProps = numberProps;\n this._resolveProps(def);\n if (this.shadowRoot) {\n this._applyStyles(styles);\n } else if (!!(process.env.NODE_ENV !== \"production\") && styles) {\n warn(\n \"Custom element style injection is not supported when using shadowRoot: false\"\n );\n }\n this._mount(def);\n };\n const asyncDef = this._def.__asyncLoader;\n if (asyncDef) {\n this._pendingResolve = asyncDef().then((def) => {\n def.configureApp = this._def.configureApp;\n resolve(this._def = def, true);\n });\n } else {\n resolve(this._def);\n }\n }\n _mount(def) {\n if ((!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) && !def.name) {\n def.name = \"VueElement\";\n }\n this._app = this._createApp(def);\n this._inheritParentContext();\n if (def.configureApp) {\n def.configureApp(this._app);\n }\n this._app._ceVNode = this._createVNode();\n this._app.mount(this._root);\n const exposed = this._instance && this._instance.exposed;\n if (!exposed) return;\n for (const key in exposed) {\n if (!hasOwn(this, key)) {\n Object.defineProperty(this, key, {\n // unwrap ref to be consistent with public instance behavior\n get: () => unref(exposed[key])\n });\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`Exposed property \"${key}\" already exists on custom element.`);\n }\n }\n }\n _resolveProps(def) {\n const { props } = def;\n const declaredPropKeys = isArray(props) ? props : Object.keys(props || {});\n for (const key of Object.keys(this)) {\n if (key[0] !== \"_\" && declaredPropKeys.includes(key)) {\n this._setProp(key, this[key]);\n }\n }\n for (const key of declaredPropKeys.map(camelize$1)) {\n Object.defineProperty(this, key, {\n get() {\n return this._getProp(key);\n },\n set(val) {\n this._setProp(key, val, true, !this._patching);\n }\n });\n }\n }\n _setAttr(key) {\n if (key.startsWith(\"data-v-\")) return;\n const has = this.hasAttribute(key);\n let value = has ? this.getAttribute(key) : REMOVAL;\n const camelKey = camelize$1(key);\n if (has && this._numberProps && this._numberProps[camelKey]) {\n value = toNumber(value);\n }\n this._setProp(camelKey, value, false, true);\n }\n /**\n * @internal\n */\n _getProp(key) {\n return this._props[key];\n }\n /**\n * @internal\n */\n _setProp(key, val, shouldReflect = true, shouldUpdate = false) {\n if (val !== this._props[key]) {\n this._dirty = true;\n if (val === REMOVAL) {\n delete this._props[key];\n } else {\n this._props[key] = val;\n if (key === \"key\" && this._app) {\n this._app._ceVNode.key = val;\n }\n }\n if (shouldUpdate && this._instance) {\n this._update();\n }\n if (shouldReflect) {\n const ob = this._ob;\n if (ob) {\n this._processMutations(ob.takeRecords());\n ob.disconnect();\n }\n if (val === true) {\n this.setAttribute(hyphenate(key), \"\");\n } else if (typeof val === \"string\" || typeof val === \"number\") {\n this.setAttribute(hyphenate(key), val + \"\");\n } else if (!val) {\n this.removeAttribute(hyphenate(key));\n }\n ob && ob.observe(this, { attributes: true });\n }\n }\n }\n _update() {\n const vnode = this._createVNode();\n if (this._app) vnode.appContext = this._app._context;\n render(vnode, this._root);\n }\n _createVNode() {\n const baseProps = {};\n if (!this.shadowRoot) {\n baseProps.onVnodeMounted = baseProps.onVnodeUpdated = this._renderSlots.bind(this);\n }\n const vnode = createVNode(this._def, extend(baseProps, this._props));\n if (!this._instance) {\n vnode.ce = (instance) => {\n this._instance = instance;\n instance.ce = this;\n instance.isCE = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n instance.ceReload = (newStyles) => {\n if (this._styles) {\n this._styles.forEach((s) => this._root.removeChild(s));\n this._styles.length = 0;\n }\n this._styleAnchors.delete(this._def);\n this._applyStyles(newStyles);\n this._instance = null;\n this._update();\n };\n }\n const dispatch = (event, args) => {\n this.dispatchEvent(\n new CustomEvent(\n event,\n isPlainObject(args[0]) ? extend({ detail: args }, args[0]) : { detail: args }\n )\n );\n };\n instance.emit = (event, ...args) => {\n dispatch(event, args);\n if (hyphenate(event) !== event) {\n dispatch(hyphenate(event), args);\n }\n };\n this._setParent();\n };\n }\n return vnode;\n }\n _applyStyles(styles, owner, parentComp) {\n if (!styles) return;\n if (owner) {\n if (owner === this._def || this._styleChildren.has(owner)) {\n return;\n }\n this._styleChildren.add(owner);\n }\n const nonce = this._nonce;\n const root = this.shadowRoot;\n const insertionAnchor = parentComp ? this._getStyleAnchor(parentComp) || this._getStyleAnchor(this._def) : this._getRootStyleInsertionAnchor(root);\n let last = null;\n for (let i = styles.length - 1; i >= 0; i--) {\n const s = document.createElement(\"style\");\n if (nonce) s.setAttribute(\"nonce\", nonce);\n s.textContent = styles[i];\n root.insertBefore(s, last || insertionAnchor);\n last = s;\n if (i === 0) {\n if (!parentComp) this._styleAnchors.set(this._def, s);\n if (owner) this._styleAnchors.set(owner, s);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (owner) {\n if (owner.__hmrId) {\n if (!this._childStyles) this._childStyles = /* @__PURE__ */ new Map();\n let entry = this._childStyles.get(owner.__hmrId);\n if (!entry) {\n this._childStyles.set(owner.__hmrId, entry = []);\n }\n entry.push(s);\n }\n } else {\n (this._styles || (this._styles = [])).push(s);\n }\n }\n }\n }\n _getStyleAnchor(comp) {\n if (!comp) {\n return null;\n }\n const anchor = this._styleAnchors.get(comp);\n if (anchor && anchor.parentNode === this.shadowRoot) {\n return anchor;\n }\n if (anchor) {\n this._styleAnchors.delete(comp);\n }\n return null;\n }\n _getRootStyleInsertionAnchor(root) {\n for (let i = 0; i < root.childNodes.length; i++) {\n const node = root.childNodes[i];\n if (!(node instanceof HTMLStyleElement)) {\n return node;\n }\n }\n return null;\n }\n /**\n * Only called when shadowRoot is false\n */\n _parseSlots() {\n const slots = this._slots = {};\n let n;\n while (n = this.firstChild) {\n const slotName = n.nodeType === 1 && n.getAttribute(\"slot\") || \"default\";\n (slots[slotName] || (slots[slotName] = [])).push(n);\n this.removeChild(n);\n }\n }\n /**\n * Only called when shadowRoot is false\n */\n _renderSlots() {\n const outlets = this._getSlots();\n const scopeId = this._instance.type.__scopeId;\n for (let i = 0; i < outlets.length; i++) {\n const o = outlets[i];\n const slotName = o.getAttribute(\"name\") || \"default\";\n const content = this._slots[slotName];\n const parent = o.parentNode;\n if (content) {\n for (const n of content) {\n if (scopeId && n.nodeType === 1) {\n const id = scopeId + \"-s\";\n const walker = document.createTreeWalker(n, 1);\n n.setAttribute(id, \"\");\n let child;\n while (child = walker.nextNode()) {\n child.setAttribute(id, \"\");\n }\n }\n parent.insertBefore(n, o);\n }\n } else {\n while (o.firstChild) parent.insertBefore(o.firstChild, o);\n }\n parent.removeChild(o);\n }\n }\n /**\n * @internal\n */\n _getSlots() {\n const roots = [this];\n if (this._teleportTargets) {\n roots.push(...this._teleportTargets);\n }\n const slots = /* @__PURE__ */ new Set();\n for (const root of roots) {\n const found = root.querySelectorAll(\"slot\");\n for (let i = 0; i < found.length; i++) {\n slots.add(found[i]);\n }\n }\n return Array.from(slots);\n }\n /**\n * @internal\n */\n _injectChildStyle(comp, parentComp) {\n this._applyStyles(comp.styles, comp, parentComp);\n }\n /**\n * @internal\n */\n _beginPatch() {\n this._patching = true;\n this._dirty = false;\n }\n /**\n * @internal\n */\n _endPatch() {\n this._patching = false;\n if (this._dirty && this._instance) {\n this._update();\n }\n }\n /**\n * @internal\n */\n _hasShadowRoot() {\n return this._def.shadowRoot !== false;\n }\n /**\n * @internal\n */\n _removeChildStyle(comp) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n this._styleChildren.delete(comp);\n this._styleAnchors.delete(comp);\n if (this._childStyles && comp.__hmrId) {\n const oldStyles = this._childStyles.get(comp.__hmrId);\n if (oldStyles) {\n oldStyles.forEach((s) => this._root.removeChild(s));\n oldStyles.length = 0;\n }\n }\n }\n }\n}\nfunction useHost(caller) {\n const instance = getCurrentInstance();\n const el = instance && instance.ce;\n if (el) {\n return el;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!instance) {\n warn(\n `${caller || \"useHost\"} called without an active component instance.`\n );\n } else {\n warn(\n `${caller || \"useHost\"} can only be used in components defined via defineCustomElement.`\n );\n }\n }\n return null;\n}\nfunction useShadowRoot() {\n const el = !!(process.env.NODE_ENV !== \"production\") ? useHost(\"useShadowRoot\") : useHost();\n return el && el.shadowRoot;\n}\n\nfunction useCssModule(name = \"$style\") {\n {\n const instance = getCurrentInstance();\n if (!instance) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`useCssModule must be called inside setup()`);\n return EMPTY_OBJ;\n }\n const modules = instance.type.__cssModules;\n if (!modules) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Current instance does not have CSS modules injected.`);\n return EMPTY_OBJ;\n }\n const mod = modules[name];\n if (!mod) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`Current instance does not have CSS module named \"${name}\".`);\n return EMPTY_OBJ;\n }\n return mod;\n }\n}\n\nconst positionMap = /* @__PURE__ */ new WeakMap();\nconst newPositionMap = /* @__PURE__ */ new WeakMap();\nconst moveCbKey = /* @__PURE__ */ Symbol(\"_moveCb\");\nconst enterCbKey = /* @__PURE__ */ Symbol(\"_enterCb\");\nconst decorate = (t) => {\n delete t.props.mode;\n return t;\n};\nconst TransitionGroupImpl = /* @__PURE__ */ decorate({\n name: \"TransitionGroup\",\n props: /* @__PURE__ */ extend({}, TransitionPropsValidators, {\n tag: String,\n moveClass: String\n }),\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n let prevChildren;\n let children;\n onUpdated(() => {\n if (!prevChildren.length) {\n return;\n }\n const moveClass = props.moveClass || `${props.name || \"v\"}-move`;\n if (!hasCSSTransform(\n prevChildren[0].el,\n instance.vnode.el,\n moveClass\n )) {\n prevChildren = [];\n return;\n }\n prevChildren.forEach(callPendingCbs);\n prevChildren.forEach(recordPosition);\n const movedChildren = prevChildren.filter(applyTranslation);\n forceReflow(instance.vnode.el);\n movedChildren.forEach((c) => {\n const el = c.el;\n const style = el.style;\n addTransitionClass(el, moveClass);\n style.transform = style.webkitTransform = style.transitionDuration = \"\";\n const cb = el[moveCbKey] = (e) => {\n if (e && e.target !== el) {\n return;\n }\n if (!e || e.propertyName.endsWith(\"transform\")) {\n el.removeEventListener(\"transitionend\", cb);\n el[moveCbKey] = null;\n removeTransitionClass(el, moveClass);\n }\n };\n el.addEventListener(\"transitionend\", cb);\n });\n prevChildren = [];\n });\n return () => {\n const rawProps = toRaw(props);\n const cssTransitionProps = resolveTransitionProps(rawProps);\n let tag = rawProps.tag || Fragment;\n prevChildren = [];\n if (children) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.el && child.el instanceof Element) {\n prevChildren.push(child);\n setTransitionHooks(\n child,\n resolveTransitionHooks(\n child,\n cssTransitionProps,\n state,\n instance\n )\n );\n positionMap.set(child, getPosition(child.el));\n }\n }\n }\n children = slots.default ? getTransitionRawChildren(slots.default()) : [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.key != null) {\n setTransitionHooks(\n child,\n resolveTransitionHooks(child, cssTransitionProps, state, instance)\n );\n } else if (!!(process.env.NODE_ENV !== \"production\") && child.type !== Text) {\n warn(`<TransitionGroup> children must be keyed.`);\n }\n }\n return createVNode(tag, null, children);\n };\n }\n});\nconst TransitionGroup = TransitionGroupImpl;\nfunction callPendingCbs(c) {\n const el = c.el;\n if (el[moveCbKey]) {\n el[moveCbKey]();\n }\n if (el[enterCbKey]) {\n el[enterCbKey]();\n }\n}\nfunction recordPosition(c) {\n newPositionMap.set(c, getPosition(c.el));\n}\nfunction applyTranslation(c) {\n const oldPos = positionMap.get(c);\n const newPos = newPositionMap.get(c);\n const dx = oldPos.left - newPos.left;\n const dy = oldPos.top - newPos.top;\n if (dx || dy) {\n const el = c.el;\n const s = el.style;\n const rect = el.getBoundingClientRect();\n let scaleX = 1;\n let scaleY = 1;\n if (el.offsetWidth) scaleX = rect.width / el.offsetWidth;\n if (el.offsetHeight) scaleY = rect.height / el.offsetHeight;\n if (!Number.isFinite(scaleX) || scaleX === 0) scaleX = 1;\n if (!Number.isFinite(scaleY) || scaleY === 0) scaleY = 1;\n if (Math.abs(scaleX - 1) < 0.01) scaleX = 1;\n if (Math.abs(scaleY - 1) < 0.01) scaleY = 1;\n s.transform = s.webkitTransform = `translate(${dx / scaleX}px,${dy / scaleY}px)`;\n s.transitionDuration = \"0s\";\n return c;\n }\n}\nfunction getPosition(el) {\n const rect = el.getBoundingClientRect();\n return {\n left: rect.left,\n top: rect.top\n };\n}\nfunction hasCSSTransform(el, root, moveClass) {\n const clone = el.cloneNode();\n const _vtc = el[vtcKey];\n if (_vtc) {\n _vtc.forEach((cls) => {\n cls.split(/\\s+/).forEach((c) => c && clone.classList.remove(c));\n });\n }\n moveClass.split(/\\s+/).forEach((c) => c && clone.classList.add(c));\n clone.style.display = \"none\";\n const container = root.nodeType === 1 ? root : root.parentNode;\n container.appendChild(clone);\n const { hasTransform } = getTransitionInfo(clone);\n container.removeChild(clone);\n return hasTransform;\n}\n\nconst getModelAssigner = (vnode) => {\n const fn = vnode.props[\"onUpdate:modelValue\"] || false;\n return isArray(fn) ? (value) => invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n const target = e.target;\n if (target.composing) {\n target.composing = false;\n target.dispatchEvent(new Event(\"input\"));\n }\n}\nconst assignKey = /* @__PURE__ */ Symbol(\"_assign\");\nfunction castValue(value, trim, number) {\n if (trim) value = value.trim();\n if (number) value = looseToNumber(value);\n return value;\n}\nconst vModelText = {\n created(el, { modifiers: { lazy, trim, number } }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n const castToNumber = number || vnode.props && vnode.props.type === \"number\";\n addEventListener(el, lazy ? \"change\" : \"input\", (e) => {\n if (e.target.composing) return;\n el[assignKey](castValue(el.value, trim, castToNumber));\n });\n if (trim || castToNumber) {\n addEventListener(el, \"change\", () => {\n el.value = castValue(el.value, trim, castToNumber);\n });\n }\n if (!lazy) {\n addEventListener(el, \"compositionstart\", onCompositionStart);\n addEventListener(el, \"compositionend\", onCompositionEnd);\n addEventListener(el, \"change\", onCompositionEnd);\n }\n },\n // set value on mounted so it's after min/max for type=\"range\"\n mounted(el, { value }) {\n el.value = value == null ? \"\" : value;\n },\n beforeUpdate(el, { value, oldValue, modifiers: { lazy, trim, number } }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n if (el.composing) return;\n const elValue = (number || el.type === \"number\") && !/^0\\d/.test(el.value) ? looseToNumber(el.value) : el.value;\n const newValue = value == null ? \"\" : value;\n if (elValue === newValue) {\n return;\n }\n const rootNode = el.getRootNode();\n if ((rootNode instanceof Document || rootNode instanceof ShadowRoot) && rootNode.activeElement === el && el.type !== \"range\") {\n if (lazy && value === oldValue) {\n return;\n }\n if (trim && el.value.trim() === newValue) {\n return;\n }\n }\n el.value = newValue;\n }\n};\nconst vModelCheckbox = {\n // #4096 array checkboxes need to be deep traversed\n deep: true,\n created(el, _, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n addEventListener(el, \"change\", () => {\n const modelValue = el._modelValue;\n const elementValue = getValue(el);\n const checked = el.checked;\n const assign = el[assignKey];\n if (isArray(modelValue)) {\n const index = looseIndexOf(modelValue, elementValue);\n const found = index !== -1;\n if (checked && !found) {\n assign(modelValue.concat(elementValue));\n } else if (!checked && found) {\n const filtered = [...modelValue];\n filtered.splice(index, 1);\n assign(filtered);\n }\n } else if (isSet(modelValue)) {\n const cloned = new Set(modelValue);\n if (checked) {\n cloned.add(elementValue);\n } else {\n cloned.delete(elementValue);\n }\n assign(cloned);\n } else {\n assign(getCheckboxValue(el, checked));\n }\n });\n },\n // set initial checked on mount to wait for true-value/false-value\n mounted: setChecked,\n beforeUpdate(el, binding, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n setChecked(el, binding, vnode);\n }\n};\nfunction setChecked(el, { value, oldValue }, vnode) {\n el._modelValue = value;\n let checked;\n if (isArray(value)) {\n checked = looseIndexOf(value, vnode.props.value) > -1;\n } else if (isSet(value)) {\n checked = value.has(vnode.props.value);\n } else {\n if (value === oldValue) return;\n checked = looseEqual(value, getCheckboxValue(el, true));\n }\n if (el.checked !== checked) {\n el.checked = checked;\n }\n}\nconst vModelRadio = {\n created(el, { value }, vnode) {\n el.checked = looseEqual(value, vnode.props.value);\n el[assignKey] = getModelAssigner(vnode);\n addEventListener(el, \"change\", () => {\n el[assignKey](getValue(el));\n });\n },\n beforeUpdate(el, { value, oldValue }, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n if (value !== oldValue) {\n el.checked = looseEqual(value, vnode.props.value);\n }\n }\n};\nconst vModelSelect = {\n // <select multiple> value need to be deep traversed\n deep: true,\n created(el, { value, modifiers: { number } }, vnode) {\n const isSetModel = isSet(value);\n addEventListener(el, \"change\", () => {\n const selectedVal = Array.prototype.filter.call(el.options, (o) => o.selected).map(\n (o) => number ? looseToNumber(getValue(o)) : getValue(o)\n );\n el[assignKey](\n el.multiple ? isSetModel ? new Set(selectedVal) : selectedVal : selectedVal[0]\n );\n el._assigning = true;\n nextTick(() => {\n el._assigning = false;\n });\n });\n el[assignKey] = getModelAssigner(vnode);\n },\n // set value in mounted & updated because <select> relies on its children\n // <option>s.\n mounted(el, { value }) {\n setSelected(el, value);\n },\n beforeUpdate(el, _binding, vnode) {\n el[assignKey] = getModelAssigner(vnode);\n },\n updated(el, { value }) {\n if (!el._assigning) {\n setSelected(el, value);\n }\n }\n};\nfunction setSelected(el, value) {\n const isMultiple = el.multiple;\n const isArrayValue = isArray(value);\n if (isMultiple && !isArrayValue && !isSet(value)) {\n !!(process.env.NODE_ENV !== \"production\") && warn(\n `<select multiple v-model> expects an Array or Set value for its binding, but got ${Object.prototype.toString.call(value).slice(8, -1)}.`\n );\n return;\n }\n for (let i = 0, l = el.options.length; i < l; i++) {\n const option = el.options[i];\n const optionValue = getValue(option);\n if (isMultiple) {\n if (isArrayValue) {\n const optionType = typeof optionValue;\n if (optionType === \"string\" || optionType === \"number\") {\n option.selected = value.some((v) => String(v) === String(optionValue));\n } else {\n option.selected = looseIndexOf(value, optionValue) > -1;\n }\n } else {\n option.selected = value.has(optionValue);\n }\n } else if (looseEqual(getValue(option), value)) {\n if (el.selectedIndex !== i) el.selectedIndex = i;\n return;\n }\n }\n if (!isMultiple && el.selectedIndex !== -1) {\n el.selectedIndex = -1;\n }\n}\nfunction getValue(el) {\n return \"_value\" in el ? el._value : el.value;\n}\nfunction getCheckboxValue(el, checked) {\n const key = checked ? \"_trueValue\" : \"_falseValue\";\n return key in el ? el[key] : checked;\n}\nconst vModelDynamic = {\n created(el, binding, vnode) {\n callModelHook(el, binding, vnode, null, \"created\");\n },\n mounted(el, binding, vnode) {\n callModelHook(el, binding, vnode, null, \"mounted\");\n },\n beforeUpdate(el, binding, vnode, prevVNode) {\n callModelHook(el, binding, vnode, prevVNode, \"beforeUpdate\");\n },\n updated(el, binding, vnode, prevVNode) {\n callModelHook(el, binding, vnode, prevVNode, \"updated\");\n }\n};\nfunction resolveDynamicModel(tagName, type) {\n switch (tagName) {\n case \"SELECT\":\n return vModelSelect;\n case \"TEXTAREA\":\n return vModelText;\n default:\n switch (type) {\n case \"checkbox\":\n return vModelCheckbox;\n case \"radio\":\n return vModelRadio;\n default:\n return vModelText;\n }\n }\n}\nfunction callModelHook(el, binding, vnode, prevVNode, hook) {\n const modelToUse = resolveDynamicModel(\n el.tagName,\n vnode.props && vnode.props.type\n );\n const fn = modelToUse[hook];\n fn && fn(el, binding, vnode, prevVNode);\n}\nfunction initVModelForSSR() {\n vModelText.getSSRProps = ({ value }) => ({ value });\n vModelRadio.getSSRProps = ({ value }, vnode) => {\n if (vnode.props && looseEqual(vnode.props.value, value)) {\n return { checked: true };\n }\n };\n vModelCheckbox.getSSRProps = ({ value }, vnode) => {\n if (isArray(value)) {\n if (vnode.props && looseIndexOf(value, vnode.props.value) > -1) {\n return { checked: true };\n }\n } else if (isSet(value)) {\n if (vnode.props && value.has(vnode.props.value)) {\n return { checked: true };\n }\n } else if (value) {\n return { checked: true };\n }\n };\n vModelDynamic.getSSRProps = (binding, vnode) => {\n if (typeof vnode.type !== \"string\") {\n return;\n }\n const modelToUse = resolveDynamicModel(\n // resolveDynamicModel expects an uppercase tag name, but vnode.type is lowercase\n vnode.type.toUpperCase(),\n vnode.props && vnode.props.type\n );\n if (modelToUse.getSSRProps) {\n return modelToUse.getSSRProps(binding, vnode);\n }\n };\n}\n\nconst systemModifiers = [\"ctrl\", \"shift\", \"alt\", \"meta\"];\nconst modifierGuards = {\n stop: (e) => e.stopPropagation(),\n prevent: (e) => e.preventDefault(),\n self: (e) => e.target !== e.currentTarget,\n ctrl: (e) => !e.ctrlKey,\n shift: (e) => !e.shiftKey,\n alt: (e) => !e.altKey,\n meta: (e) => !e.metaKey,\n left: (e) => \"button\" in e && e.button !== 0,\n middle: (e) => \"button\" in e && e.button !== 1,\n right: (e) => \"button\" in e && e.button !== 2,\n exact: (e, modifiers) => systemModifiers.some((m) => e[`${m}Key`] && !modifiers.includes(m))\n};\nconst withModifiers = (fn, modifiers) => {\n if (!fn) return fn;\n const cache = fn._withMods || (fn._withMods = {});\n const cacheKey = modifiers.join(\".\");\n return cache[cacheKey] || (cache[cacheKey] = ((event, ...args) => {\n for (let i = 0; i < modifiers.length; i++) {\n const guard = modifierGuards[modifiers[i]];\n if (guard && guard(event, modifiers)) return;\n }\n return fn(event, ...args);\n }));\n};\nconst keyNames = {\n esc: \"escape\",\n space: \" \",\n up: \"arrow-up\",\n left: \"arrow-left\",\n right: \"arrow-right\",\n down: \"arrow-down\",\n delete: \"backspace\"\n};\nconst withKeys = (fn, modifiers) => {\n const cache = fn._withKeys || (fn._withKeys = {});\n const cacheKey = modifiers.join(\".\");\n return cache[cacheKey] || (cache[cacheKey] = ((event) => {\n if (!(\"key\" in event)) {\n return;\n }\n const eventKey = hyphenate(event.key);\n if (modifiers.some(\n (k) => k === eventKey || keyNames[k] === eventKey\n )) {\n return fn(event);\n }\n }));\n};\n\nconst rendererOptions = /* @__PURE__ */ extend({ patchProp }, nodeOps);\nlet renderer;\nlet enabledHydration = false;\nfunction ensureRenderer() {\n return renderer || (renderer = createRenderer(rendererOptions));\n}\nfunction ensureHydrationRenderer() {\n renderer = enabledHydration ? renderer : createHydrationRenderer(rendererOptions);\n enabledHydration = true;\n return renderer;\n}\nconst render = ((...args) => {\n ensureRenderer().render(...args);\n});\nconst hydrate = ((...args) => {\n ensureHydrationRenderer().hydrate(...args);\n});\nconst createApp = ((...args) => {\n const app = ensureRenderer().createApp(...args);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n injectNativeTagCheck(app);\n injectCompilerOptionsCheck(app);\n }\n const { mount } = app;\n app.mount = (containerOrSelector) => {\n const container = normalizeContainer(containerOrSelector);\n if (!container) return;\n const component = app._component;\n if (!isFunction(component) && !component.render && !component.template) {\n component.template = container.innerHTML;\n }\n if (container.nodeType === 1) {\n container.textContent = \"\";\n }\n const proxy = mount(container, false, resolveRootNamespace(container));\n if (container instanceof Element) {\n container.removeAttribute(\"v-cloak\");\n container.setAttribute(\"data-v-app\", \"\");\n }\n return proxy;\n };\n return app;\n});\nconst createSSRApp = ((...args) => {\n const app = ensureHydrationRenderer().createApp(...args);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n injectNativeTagCheck(app);\n injectCompilerOptionsCheck(app);\n }\n const { mount } = app;\n app.mount = (containerOrSelector) => {\n const container = normalizeContainer(containerOrSelector);\n if (container) {\n return mount(container, true, resolveRootNamespace(container));\n }\n };\n return app;\n});\nfunction resolveRootNamespace(container) {\n if (container instanceof SVGElement) {\n return \"svg\";\n }\n if (typeof MathMLElement === \"function\" && container instanceof MathMLElement) {\n return \"mathml\";\n }\n}\nfunction injectNativeTagCheck(app) {\n Object.defineProperty(app.config, \"isNativeTag\", {\n value: (tag) => isHTMLTag(tag) || isSVGTag(tag) || isMathMLTag(tag),\n writable: false\n });\n}\nfunction injectCompilerOptionsCheck(app) {\n if (isRuntimeOnly()) {\n const isCustomElement = app.config.isCustomElement;\n Object.defineProperty(app.config, \"isCustomElement\", {\n get() {\n return isCustomElement;\n },\n set() {\n warn(\n `The \\`isCustomElement\\` config option is deprecated. Use \\`compilerOptions.isCustomElement\\` instead.`\n );\n }\n });\n const compilerOptions = app.config.compilerOptions;\n const msg = `The \\`compilerOptions\\` config option is only respected when using a build of Vue.js that includes the runtime compiler (aka \"full build\"). Since you are using the runtime-only build, \\`compilerOptions\\` must be passed to \\`@vue/compiler-dom\\` in the build setup instead.\n- For vue-loader: pass it via vue-loader's \\`compilerOptions\\` loader option.\n- For vue-cli: see https://cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader\n- For vite: pass it via @vitejs/plugin-vue options. See https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-sfc`;\n Object.defineProperty(app.config, \"compilerOptions\", {\n get() {\n warn(msg);\n return compilerOptions;\n },\n set() {\n warn(msg);\n }\n });\n }\n}\nfunction normalizeContainer(container) {\n if (isString(container)) {\n const res = document.querySelector(container);\n if (!!(process.env.NODE_ENV !== \"production\") && !res) {\n warn(\n `Failed to mount app: mount target selector \"${container}\" returned null.`\n );\n }\n return res;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && window.ShadowRoot && container instanceof window.ShadowRoot && container.mode === \"closed\") {\n warn(\n `mounting on a ShadowRoot with \\`{mode: \"closed\"}\\` may lead to unpredictable bugs`\n );\n }\n return container;\n}\nlet ssrDirectiveInitialized = false;\nconst initDirectivesForSSR = () => {\n if (!ssrDirectiveInitialized) {\n ssrDirectiveInitialized = true;\n initVModelForSSR();\n initVShowForSSR();\n }\n} ;\n\nexport { Transition, TransitionGroup, VueElement, createApp, createSSRApp, defineCustomElement, defineSSRCustomElement, hydrate, initDirectivesForSSR, nodeOps, patchProp, render, useCssModule, useCssVars, useHost, useShadowRoot, vModelCheckbox, vModelDynamic, vModelRadio, vModelSelect, vModelText, vShow, withKeys, withModifiers };\n","/**\n * FileNode — node shape returned by the manager endpoint.\n *\n * Backend `?q=index` (or `GET /api/files/manager?action=index`) returns:\n * { adapter, storages, dirname, files: FileNode[] }\n */\nexport interface FileNode {\n /** DB node ID — needed by the per-user meta routes (starred, tags,\n * recently-opened). Backend's projectFileNodes() emits it for every\n * row; only client-synthesized rows (e.g. multi-storage virtual\n * folders) lack one. */\n id?: number;\n /** Full adapter-qualified path: `local://receipts/2024/invoice.pdf` */\n path: string;\n /** Relative basename: `invoice.pdf` */\n basename: string;\n /** Adapter-stripped relative path: `receipts/2024/invoice.pdf` */\n relativePath?: string;\n /** `file` or `dir` */\n type: 'file' | 'dir';\n /** Extension (lowercased, no dot). Empty string = no extension. */\n extension?: string;\n /** Bytes. 0 = directory. */\n size?: number;\n /** Unix ms (backend \"last_modified\"). */\n last_modified?: number;\n /** MIME. */\n mime_type?: string;\n /** Optional thumbnail URL (backend may inline). */\n thumb_url?: string | null;\n /** Visibility: private | public. */\n visibility?: 'private' | 'public';\n /** File count for directories. */\n count?: number;\n /** Client-side tag (localStorage or backend). */\n starred?: boolean;\n /** Hex color tag. */\n color?: string | null;\n /** Server-side trash marker. */\n trashed?: boolean;\n /** RBAC effective level for the current user on this entry (backend\n * projectFileNodes emits it when a storage has RBAC on). '' / undefined =\n * ACL not enforced. Used to gate edit/manage affordances client-side. */\n perm?: 'none' | 'viewer' | 'editor' | 'owner';\n /** Generic — any additional fields the backend wants to inline. */\n [k: string]: unknown;\n}\n\nexport interface ShareInfo {\n uuid: string;\n url: string;\n password_pin?: string | null;\n expires_at?: string | null;\n max_downloads?: number | null;\n downloads?: number;\n created_at?: string;\n}\n\nexport interface UploadLimits {\n max_upload_mb: number;\n}\n\nexport type ExternalServiceState = 'ok' | 'error' | 'disabled' | 'unknown';\n\nexport interface ExternalServiceStatus {\n enabled: boolean;\n state: ExternalServiceState;\n url?: string;\n last_check?: string;\n detail?: string;\n}\n\nexport interface Capabilities {\n ffmpeg?: boolean;\n ghostscript?: boolean;\n libreoffice?: boolean;\n onlyoffice_url?: string | null;\n drawio_url?: string | null;\n convert_url?: string | null;\n max_chunk_mb?: number;\n upload_limit_mb?: number;\n external?: {\n onlyoffice?: ExternalServiceStatus;\n drawio?: ExternalServiceStatus;\n mermaid?: ExternalServiceStatus;\n };\n}\n\n/** Single source of truth for \"is the IdP/editor/diagram service ready?\".\n * A capability is usable only when both flags say so — `enabled=true` but\n * `state='error'` means an operator turned it on but a probe just failed,\n * and we'd rather hide the entry than offer a button that 500s on click.\n */\nexport function isExternalUsable(s: ExternalServiceStatus | undefined): boolean {\n return !!s && s.enabled && s.state === 'ok';\n}\n\nexport interface UploadInitResponse {\n uploadId: string;\n parts: Array<{ partNumber: number; presignedUrl: string }>;\n expiresAt: string;\n s3Key?: string;\n}\n\nexport interface UploadFinalizeResponse {\n s3Key: string;\n url?: string;\n}\n\nexport interface ArchiveEntry {\n name: string;\n size: number;\n isDir: boolean;\n lastModified?: number;\n}\n\nexport type ViewMode = 'list' | 'grid';\n\nexport interface ClipboardState {\n mode: 'cut' | 'copy' | null;\n items: FileNode[];\n sourcePath: string | null;\n}\n\n/** A soft-deleted node as returned by the filex trash listing endpoint. */\nexport interface TrashEntry {\n id: number;\n storage_id: number;\n storage_name?: string;\n path: string;\n name: string;\n size: number;\n mime?: string;\n deleted_at: string;\n ttl_days?: number | null;\n}\n","/**\n * useFileApi — backend wrapper for the manager + ancillary endpoints.\n *\n * Two URL strategies, picked at construction time:\n *\n * 1. NEW (RESTful): caller passes `apiBase: 'https://files.example.com'`.\n * The manager endpoint becomes `${apiBase}/api/files/manager` and\n * every action uses `?action=…&path=…` as a query parameter (still\n * Vuefinder-compatible — the same `?q=…` convention is accepted by\n * the new Go backend, but `action` is the canonical name in v0.1+).\n *\n * 2. LEGACY (Vuefinder-compat): caller passes `endpoint:\n * '/api/files/manager'` (and the rest of the per-route fields).\n * Used by `@brftech/file-explorer` 0.1.0 embedders that have a\n * Laravel/Filament backend already.\n *\n * Per-route fields (`uploadInit`, `shareCreate`, …) ALWAYS win over\n * the auto-derived `apiBase` URL — lets the caller mix and match.\n *\n * Auth normalisation is centralised here. The component code never\n * thinks about CSRF vs Bearer vs Basic — it just calls `index(path)`.\n */\n\nimport type { ExplorerConfig, AuthConfig, EndpointMap } from '../types/ExplorerConfig';\nimport type {\n FileNode,\n ShareInfo,\n UploadLimits,\n Capabilities,\n ArchiveEntry,\n TrashEntry,\n} from '../types/FileNode';\n\n/** Server-side PendingOp DTO (mirror of Modules\\FishApp\\Models\\PendingOp::toApiArray). */\nexport interface PendingOpDto {\n id: number;\n op_type: 'copy' | 'move' | 'delete';\n status: 'pending' | 'running' | 'done' | 'error';\n progress_total: number;\n progress_done: number;\n target_path: string | null;\n source_dir: string | null;\n source_count: number;\n error_message: string | null;\n started_at: string | null;\n finished_at: string | null;\n created_at: string | null;\n}\n\nexport interface ManagerResponse {\n adapter: string;\n storages: string[];\n dirname: string;\n read_only: boolean;\n /** RBAC effective level for the current user on this directory ('' when ACL\n * is not enforced on the storage). Gates the folder-level write actions. */\n perm?: 'none' | 'viewer' | 'editor' | 'owner';\n files: FileNode[];\n}\n\n/** A single ACL grant row (RBAC permissions panel). */\nexport interface Grant {\n id: number;\n storage_id: number;\n path_prefix: string;\n user_id: number;\n level: 'viewer' | 'editor' | 'owner';\n user_email?: string;\n user_display_name?: string;\n inherited?: boolean;\n}\n\nexport interface PermissionsResponse {\n path: string;\n storage_rbac: boolean;\n direct: Grant[];\n inherited: Grant[];\n effective: string;\n}\n\nexport interface ResolveEmailResponse {\n found: boolean;\n user?: { id: number; email: string; display_name: string; role: string };\n}\n\nexport interface UserSuggestion {\n id: number;\n email: string;\n display_name: string;\n role: string;\n}\nexport interface UserSearchResponse {\n users: UserSuggestion[];\n}\n\nexport interface InviteResponse {\n mode: 'granted' | 'user_created' | 'shared';\n user_id?: number;\n url?: string;\n temp_password?: string;\n emailed: boolean;\n}\n\n/**\n * Resolve a Vuefinder-compatible endpoint map from the user's config.\n * Either `apiBase` is set (auto-derive everything) or each route is\n * supplied explicitly (legacy). Mixed mode works too — explicit fields\n * trump the derived URL.\n */\nexport function resolveEndpoints(config: ExplorerConfig): EndpointMap {\n // `apiBase: ''` (empty string) is a *valid* relative-root prefix —\n // it produces URLs like `/api/files/copy`. Treat only `undefined`\n // as \"no apiBase, legacy explicit-only mode\". Falsy boolean checks\n // would silently drop relative-root callers and leave every derived\n // endpoint null → \"endpoint not configured\" UI dead-ends.\n const base =\n config.apiBase != null ? config.apiBase.replace(/\\/+$/, '') : null;\n\n function derive(path: string | undefined, autoSegment: string): string | null {\n if (path) return path;\n if (base === null) return null;\n return `${base}${autoSegment}`;\n }\n\n // Manager URL is mandatory — pick the explicit `endpoint` first, then\n // fall back to `${apiBase}/api/files/manager`.\n const manager =\n config.endpoint ??\n (base !== null ? `${base}/api/files/manager` : null);\n\n if (!manager) {\n throw new Error(\n \"[@brftech/filex-core] config requires either `apiBase` or `endpoint`\",\n );\n }\n\n return {\n manager,\n uploadInit: derive(config.uploadInit, '/api/files/upload/init'),\n uploadFinalize: derive(config.uploadFinalize, '/api/files/upload/finalize'),\n uploadAbort: derive(config.uploadAbort, '/api/files/upload/abort'),\n shareCreate: derive(config.shareCreate, '/api/files/share'),\n shareList: derive(config.shareList, '/api/files/share'),\n shareDelete: derive(config.shareDelete, '/api/files/share/{uuid}'),\n limits: derive(config.limits, '/api/files/limits'),\n capabilities: derive(config.capabilities, '/api/files/capabilities'),\n archiveList: derive(config.archiveList, '/api/files/archive/list'),\n archiveExtract: derive(config.archiveExtract, '/api/files/archive/extract'),\n archiveAdd: derive(config.archiveAdd, '/api/files/archive/add'),\n copy: derive(config.copy, '/api/files/copy'),\n moveAsync: derive(config.moveAsync, '/api/files/move'),\n deleteAsync: derive(config.deleteAsync, '/api/files/delete'),\n opsList: derive(config.opsList, '/api/files/ops'),\n opsShow: derive(config.opsShow, '/api/files/ops/{id}'),\n onlyOfficeConfig: derive(config.onlyOfficeConfig, '/api/files/onlyoffice/config'),\n saveText: derive(config.saveText, '/api/files/save-text'),\n restore: derive(config.restore, '/api/files/restore'),\n // filex trash: list soft-deleted nodes + restore one by node id.\n trashList: derive(config.trashList, '/api/files/manager/trash'),\n trashRestore: derive(config.trashRestore, '/api/files/manager/restore'),\n };\n}\n\n/**\n * Resolve a possibly-async bearer token to a string. Caller passes\n * `auth.token` here so the auth header is fresh on every request.\n */\nasync function resolveToken(t: string | (() => string | Promise<string>)): Promise<string> {\n if (typeof t === 'function') {\n const out = t();\n return out instanceof Promise ? await out : out;\n }\n return t;\n}\n\n/**\n * Normalise the legacy `{type: 'bearer'}` shape to the modern\n * `{kind: 'bearer'}` discriminator. Lets us write a single auth-header\n * builder downstream.\n */\nfunction normalizeAuth(auth: AuthConfig | undefined): { kind: 'bearer'; token: string | (() => string | Promise<string>) }\n | { kind: 'csrf'; csrf: string }\n | { kind: 'basic'; user: string; pass: string }\n | { kind: 'none' } {\n if (!auth) return { kind: 'none' };\n if ('kind' in auth) return auth;\n // Legacy shape — translate.\n if (auth.type === 'bearer') return { kind: 'bearer', token: auth.token };\n if (auth.type === 'csrf') return { kind: 'csrf', csrf: auth.csrf };\n return { kind: 'none' };\n}\n\nexport function useFileApi(config: ExplorerConfig) {\n const endpoints = resolveEndpoints(config);\n const authConf = normalizeAuth(config.auth);\n\n async function authHeaders(extra: Record<string, string> = {}): Promise<Record<string, string>> {\n const h: Record<string, string> = { Accept: 'application/json', ...extra };\n if (authConf.kind === 'bearer') {\n const token = await resolveToken(authConf.token);\n if (token) h.Authorization = `Bearer ${token}`;\n } else if (authConf.kind === 'csrf') {\n h['X-CSRF-TOKEN'] = authConf.csrf;\n h['X-Requested-With'] = 'XMLHttpRequest';\n } else if (authConf.kind === 'basic') {\n const creds = btoa(`${authConf.user}:${authConf.pass}`);\n h.Authorization = `Basic ${creds}`;\n }\n return h;\n }\n\n /**\n * Sync auth-header builder for callers that need headers in a\n * non-async context (XMLHttpRequest, OnlyOffice config endpoint\n * post-mounted PreviewModal). Function-token bearers are *resolved\n * lazily* via the async path; here we just include the cached value\n * if any. Component code should prefer the async `authHeaders()` —\n * this is a defensive escape hatch.\n */\n function authHeadersSync(extra: Record<string, string> = {}): Record<string, string> {\n const h: Record<string, string> = { Accept: 'application/json', ...extra };\n if (authConf.kind === 'bearer' && typeof authConf.token === 'string') {\n h.Authorization = `Bearer ${authConf.token}`;\n } else if (authConf.kind === 'csrf') {\n h['X-CSRF-TOKEN'] = authConf.csrf;\n h['X-Requested-With'] = 'XMLHttpRequest';\n } else if (authConf.kind === 'basic') {\n const creds = btoa(`${authConf.user}:${authConf.pass}`);\n h.Authorization = `Basic ${creds}`;\n }\n return h;\n }\n\n function credentialsMode(): RequestCredentials {\n return authConf.kind === 'csrf' ? 'include' : 'same-origin';\n }\n\n // Map an HTTP status to a short, human-readable message in the explorer's\n // locale. The raw JSON body is attached as `.detail` for debugging but never\n // shown in the toast (Burak: \"404/403 falan verince ham json görüyorum\").\n function statusMessage(status: number): string {\n const tr = (config.locale ?? 'tr') !== 'en';\n const m: Record<number, [string, string]> = {\n 400: ['Geçersiz istek', 'Bad request'],\n 401: ['Oturum gerekli, tekrar giriş yapın', 'Sign-in required'],\n 403: ['Bu işlem için yetkiniz yok', 'You are not allowed to do this'],\n 404: ['Bulunamadı', 'Not found'],\n 409: ['Zaten var / çakışma', 'Already exists / conflict'],\n 413: ['Dosya çok büyük', 'File too large'],\n 415: ['Bu dosya türü desteklenmiyor', 'Unsupported file type'],\n 422: ['Geçersiz veri', 'Invalid data'],\n 429: ['Çok fazla istek, biraz bekleyin', 'Too many requests'],\n 500: ['Sunucu hatası', 'Server error'],\n 501: ['Bu işlem desteklenmiyor', 'Not supported'],\n 503: ['Servis şu an kullanılamıyor', 'Service unavailable'],\n };\n const e = m[status];\n if (e) return tr ? e[0] : e[1];\n return tr ? `Hata (${status})` : `Error (${status})`;\n }\n\n async function jsonFetch<T>(url: string, init: RequestInit = {}): Promise<T> {\n const headers = {\n ...(await authHeaders()),\n ...((init.headers as Record<string, string> | undefined) ?? {}),\n };\n const res = await fetch(url, {\n ...init,\n headers,\n credentials: credentialsMode(),\n });\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n const err = new Error(statusMessage(res.status)) as Error & { status?: number; detail?: string };\n err.status = res.status;\n err.detail = text.slice(0, 300);\n throw err;\n }\n return res.json() as Promise<T>;\n }\n\n // --------------------------------------------------------------------\n // Permissions (RBAC) — derived from the manager endpoint by swapping the\n // trailing `/manager` for `/permissions`. Owner/admin only (backend gated).\n // --------------------------------------------------------------------\n function permissionsUrl(sub = ''): string {\n const base = endpoints.manager.replace(/\\/manager(\\?.*)?$/, '/permissions');\n return base + sub;\n }\n async function listPermissions(path: string): Promise<PermissionsResponse> {\n return jsonFetch<PermissionsResponse>(permissionsUrl() + '?path=' + encodeURIComponent(path));\n }\n async function resolveEmail(email: string): Promise<ResolveEmailResponse> {\n return jsonFetch<ResolveEmailResponse>(permissionsUrl('/resolve') + '?email=' + encodeURIComponent(email));\n }\n async function searchUsers(q: string): Promise<UserSearchResponse> {\n return jsonFetch<UserSearchResponse>(permissionsUrl('/users') + '?q=' + encodeURIComponent(q));\n }\n async function addPermission(body: { path: string; user_id: number; level: string; is_dir?: boolean }): Promise<unknown> {\n return jsonFetch(permissionsUrl(), { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) });\n }\n async function updatePermission(id: number, level: string): Promise<unknown> {\n return jsonFetch(permissionsUrl('/' + id), { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ level }) });\n }\n async function deletePermission(id: number): Promise<unknown> {\n return jsonFetch(permissionsUrl('/' + id), { method: 'DELETE' });\n }\n async function invitePermission(body: { path: string; email: string; level: string; create_user?: boolean; role?: string; is_dir?: boolean; locale?: string }): Promise<InviteResponse> {\n return jsonFetch<InviteResponse>(permissionsUrl('/invite'), { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) });\n }\n async function shareMail(body: { path: string; email?: string; emails?: string[]; url: string; pin?: string | null; expires_days?: number; locale?: string; is_dir?: boolean; size?: number; mode?: string }): Promise<{ emailed: boolean; sent?: string[]; failed?: string[] }> {\n return jsonFetch<{ emailed: boolean; sent?: string[]; failed?: string[] }>(permissionsUrl('/share-mail'), { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) });\n }\n\n // --------------------------------------------------------------------\n // Manager contract — supports both `?q=action` (legacy) and\n // `?action=action` (new) by emitting BOTH. Backends recognising one\n // ignore the other; new backends prefer `action`.\n // --------------------------------------------------------------------\n\n function qs(params: Record<string, string | number | boolean | undefined>): string {\n const sp = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null) continue;\n sp.set(k, String(v));\n }\n return sp.toString();\n }\n\n function managerUrl(action: string, params: Record<string, string | number | boolean | undefined> = {}): string {\n const sep = endpoints.manager.includes('?') ? '&' : '?';\n return `${endpoints.manager}${sep}${qs({ q: action, action, ...params })}`;\n }\n\n async function index(path: string): Promise<ManagerResponse> {\n return jsonFetch<ManagerResponse>(managerUrl('index', { path }));\n }\n\n async function search(path: string, filter: string): Promise<ManagerResponse> {\n return jsonFetch<ManagerResponse>(managerUrl('search', { path, filter }));\n }\n\n async function subfolders(path: string): Promise<{ folders: FileNode[] }> {\n return jsonFetch<{ folders: FileNode[] }>(managerUrl('subfolders', { path }));\n }\n\n async function newFolder(path: string, name: string): Promise<ManagerResponse> {\n return jsonFetch<ManagerResponse>(managerUrl('newfolder'), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path, name }),\n });\n }\n\n async function rename(path: string, item: string, name: string): Promise<ManagerResponse> {\n return jsonFetch<ManagerResponse>(managerUrl('rename'), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path, item, name }),\n });\n }\n\n async function move(path: string, items: string[], target: string): Promise<ManagerResponse> {\n return jsonFetch<ManagerResponse>(managerUrl('move'), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path, item: target, items: items.map((p) => ({ path: p })) }),\n });\n }\n\n async function deleteItems(path: string, items: string[]): Promise<ManagerResponse> {\n return jsonFetch<ManagerResponse>(managerUrl('delete'), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path, items: items.map((p) => ({ path: p })) }),\n });\n }\n\n /** Server-side recursive copy (async — returns a PendingOp). */\n async function copy(source: string[], target: string): Promise<{ op: PendingOpDto }> {\n if (!endpoints.copy) throw new Error('copy endpoint not configured');\n return jsonFetch(endpoints.copy, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ source, target }),\n });\n }\n\n async function moveAsync(source: string[], target: string, sourceDir?: string): Promise<{ op: PendingOpDto }> {\n if (!endpoints.moveAsync) throw new Error('moveAsync endpoint not configured');\n return jsonFetch(endpoints.moveAsync, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ source, target, sourceDir }),\n });\n }\n\n async function deleteAsync(source: string[], sourceDir?: string): Promise<{ op: PendingOpDto }> {\n if (!endpoints.deleteAsync) throw new Error('deleteAsync endpoint not configured');\n return jsonFetch(endpoints.deleteAsync, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ source, sourceDir }),\n });\n }\n\n async function restore(source: string[]): Promise<{ ok: boolean; restored: number }> {\n if (!endpoints.restore) throw new Error('restore endpoint not configured');\n return jsonFetch(endpoints.restore, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ source }),\n });\n }\n\n /** filex trash listing — soft-deleted nodes across (or within) storages. */\n async function listTrash(storageName?: string): Promise<{ entries: TrashEntry[]; total: number }> {\n if (!endpoints.trashList) throw new Error('trashList endpoint not configured');\n const base = endpoints.trashList;\n const sep = base.includes('?') ? '&' : '?';\n const url = storageName ? `${base}${sep}storage=${encodeURIComponent(storageName)}` : base;\n return jsonFetch<{ entries: TrashEntry[]; total: number }>(url);\n }\n\n /**\n * Restore soft-deleted nodes by their node id. The filex backend restores\n * one node per call (`POST {node_id}`), so we fan out and tally successes.\n */\n async function restoreIds(ids: number[]): Promise<{ restored: number }> {\n const url = endpoints.trashRestore;\n if (!url) throw new Error('trashRestore endpoint not configured');\n let restored = 0;\n for (const id of ids) {\n try {\n await jsonFetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ node_id: id }),\n });\n restored++;\n } catch {\n /* skip individual failures; report the count that succeeded */\n }\n }\n return { restored };\n }\n\n /**\n * Legacy in-band multipart upload (small files / chunked endpoint\n * absent). XMLHttpRequest because fetch doesn't expose upload\n * progress on most browsers.\n */\n async function uploadMultipart(\n path: string,\n files: File[],\n onProgress?: (p: number) => void,\n ): Promise<ManagerResponse> {\n const fd = new FormData();\n fd.append('path', path);\n for (const f of files) {\n fd.append('file[]', f, f.name);\n }\n const headers = await authHeaders();\n return new Promise<ManagerResponse>((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open('POST', managerUrl('upload'));\n for (const [k, v] of Object.entries(headers)) {\n if (k === 'Content-Type') continue;\n xhr.setRequestHeader(k, v);\n }\n xhr.withCredentials = credentialsMode() === 'include';\n xhr.upload.onprogress = (ev) => {\n if (onProgress && ev.lengthComputable) {\n onProgress(Math.round((ev.loaded / ev.total) * 100));\n }\n };\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n try {\n resolve(JSON.parse(xhr.responseText));\n } catch (e) {\n reject(e);\n }\n } else {\n reject(new Error(`${xhr.status} ${xhr.statusText}: ${xhr.responseText.slice(0, 200)}`));\n }\n };\n xhr.onerror = () => reject(new Error('Network error'));\n xhr.send(fd);\n });\n }\n\n function downloadUrl(path: string): string {\n return managerUrl('download', { path });\n }\n\n function previewUrl(path: string): string {\n return managerUrl('preview', { path });\n }\n\n /**\n * Fetch a file body with the configured auth headers + credentials,\n * returning the raw blob plus a normalized object URL viewers can mount\n * directly. Used by the rich viewers (3D, EPUB, PDF, PSD, TIFF, …) which\n * need an `ArrayBuffer` or a `Blob`-backed `objectURL` rather than the\n * relative preview URL.\n *\n * Caller is responsible for revoking `url` (`URL.revokeObjectURL(url)`)\n * once the viewer unmounts to avoid leaking the blob.\n */\n async function fetchBlob(\n path: string,\n ): Promise<{ url: string; blob: Blob; mime: string }> {\n const headers = await authHeaders();\n const res = await fetch(previewUrl(path), {\n headers,\n credentials: credentialsMode(),\n });\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(\n `${res.status} ${res.statusText}${text ? ' — ' + text.slice(0, 200) : ''}`,\n );\n }\n const blob = await res.blob();\n const mime = blob.type || res.headers.get('content-type') || '';\n const url = URL.createObjectURL(blob);\n return { url, blob, mime };\n }\n\n /**\n * Like `fetchBlob` but returns the raw bytes — viewers that need\n * binary parsing (utif, ag-psd, pdfjs-dist) get the buffer directly\n * without the extra `Blob → arrayBuffer` round trip.\n */\n async function fetchArrayBuffer(path: string): Promise<ArrayBuffer> {\n const headers = await authHeaders();\n const res = await fetch(previewUrl(path), {\n headers,\n credentials: credentialsMode(),\n });\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new Error(\n `${res.status} ${res.statusText}${text ? ' — ' + text.slice(0, 200) : ''}`,\n );\n }\n return res.arrayBuffer();\n }\n\n // --------------------------------------------------------------------\n // Peripheral endpoints\n // --------------------------------------------------------------------\n\n async function limits(): Promise<UploadLimits> {\n if (!endpoints.limits) return { max_upload_mb: 1024 };\n return jsonFetch<UploadLimits>(endpoints.limits);\n }\n\n async function capabilities(): Promise<Capabilities> {\n if (!endpoints.capabilities) {\n return {\n ffmpeg: false,\n ghostscript: false,\n libreoffice: false,\n max_chunk_mb: 5,\n upload_limit_mb: 1024,\n onlyoffice_url: config.onlyOfficeBase ?? null,\n drawio_url: config.drawioBase ?? null,\n convert_url: config.convertBase ?? null,\n };\n }\n return jsonFetch<Capabilities>(endpoints.capabilities);\n }\n\n async function createShare(payload: {\n path: string;\n password?: boolean;\n expires_at?: string | null;\n max_downloads?: number | null;\n // File-drop (public upload link) — kind:'drop' mints an upload link into a\n // folder instead of a download link; drop_settings carries the caps.\n kind?: string;\n max_uploads?: number | null;\n drop_settings?: Record<string, unknown> | null;\n }): Promise<{ share: ShareInfo & { url: string; path: string; filename: string; kind?: string } }> {\n if (!endpoints.shareCreate) throw new Error('shareCreate endpoint not configured');\n return jsonFetch(endpoints.shareCreate, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n });\n }\n\n async function listShares(path: string): Promise<{ shares: ShareInfo[] }> {\n if (!endpoints.shareList) return { shares: [] };\n const sep = endpoints.shareList.includes('?') ? '&' : '?';\n return jsonFetch(`${endpoints.shareList}${sep}path=${encodeURIComponent(path)}`);\n }\n\n async function revokeShare(uuid: string): Promise<{ success: boolean }> {\n if (!endpoints.shareDelete) throw new Error('shareDelete endpoint not configured');\n const url = endpoints.shareDelete.replace('{uuid}', encodeURIComponent(uuid));\n return jsonFetch(url, { method: 'DELETE' });\n }\n\n async function archiveList(path: string): Promise<{ entries: ArchiveEntry[] }> {\n if (!endpoints.archiveList) throw new Error('archiveList endpoint not configured');\n const raw = await jsonFetch<{ entries: Array<{ name: string; size: number; is_dir: boolean; mtime?: number }> }>(\n endpoints.archiveList,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path }),\n },\n );\n return {\n entries: raw.entries.map((e) => ({\n name: e.name,\n size: e.size,\n isDir: e.is_dir,\n lastModified: e.mtime,\n })),\n };\n }\n\n async function archiveExtract(path: string, members?: string[]): Promise<{ keys: string[]; count: number }> {\n if (!endpoints.archiveExtract) throw new Error('archiveExtract endpoint not configured');\n return jsonFetch(endpoints.archiveExtract, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path, members }),\n });\n }\n\n async function archiveAdd(path: string, files: Array<{ name: string; source: string }>): Promise<{ path: string }> {\n if (!endpoints.archiveAdd) throw new Error('archiveAdd endpoint not configured');\n return jsonFetch(endpoints.archiveAdd, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path, files }),\n });\n }\n\n return {\n // Manager\n index,\n search,\n subfolders,\n newFolder,\n rename,\n move,\n copy,\n moveAsync,\n deleteAsync,\n deleteItems,\n restore,\n listTrash,\n restoreIds,\n uploadMultipart,\n downloadUrl,\n previewUrl,\n fetchBlob,\n fetchArrayBuffer,\n // Peripheral\n limits,\n capabilities,\n createShare,\n listShares,\n revokeShare,\n archiveList,\n archiveExtract,\n archiveAdd,\n // Permissions (RBAC panel)\n listPermissions,\n resolveEmail,\n searchUsers,\n addPermission,\n updatePermission,\n deletePermission,\n invitePermission,\n shareMail,\n // Internals (exposed for useUploadChunked + PreviewModal)\n endpoints,\n authHeaders,\n authHeadersSync,\n credentialsMode,\n jsonFetch,\n };\n}\n\nexport type FileApi = ReturnType<typeof useFileApi>;\n","/**\n * useUploadChunked — S3 multipart upload orchestrator for the browser.\n *\n * Contract (matches the standard /api/files/upload/{init,finalize,abort}):\n * 1. POST init {path, filename, size, mime}\n * → {uploadId, parts: [{partNumber, presignedUrl}], chunkBytes, totalParts}\n * 2. For each part: PUT <presignedUrl> <chunk bytes>, collect ETag header\n * 3. POST finalize {uploadId, parts: [{partNumber, etag}]}\n * → {s3Key, url, size}\n * Abort path: POST abort {uploadId} any time.\n *\n * We parallelize up to `parallelChunks` uploads (default 4). Progress is\n * reported as an aggregate percentage across all parts — individual part\n * percentages are tracked internally and summed.\n */\n\nimport type { ExplorerConfig } from '../types/ExplorerConfig';\nimport type { FileApi } from './useFileApi';\nimport type { UploadInitResponse, UploadFinalizeResponse } from '../types/FileNode';\n\nexport interface UploadJob {\n id: string; // local uuid\n file: File;\n path: string;\n uploadId?: string;\n totalBytes: number;\n uploadedBytes: number;\n percent: number;\n status: 'pending' | 'initializing' | 'uploading' | 'finalizing' | 'done' | 'error' | 'aborted';\n error?: string;\n cancel(): void;\n}\n\nexport interface UploadOptions {\n path: string;\n file: File;\n chunkSize?: number;\n parallelChunks?: number;\n onProgress?: (job: UploadJob) => void;\n onDone?: (job: UploadJob, result: UploadFinalizeResponse) => void;\n onError?: (job: UploadJob, err: Error) => void;\n}\n\nexport function useUploadChunked(config: ExplorerConfig, api: FileApi) {\n const DEFAULT_CHUNK = config.chunkSize ?? 5 * 1024 * 1024;\n const DEFAULT_PARALLEL = Math.max(1, Math.min(8, config.parallelChunks ?? 4));\n\n async function uploadFile(opts: UploadOptions): Promise<UploadFinalizeResponse> {\n const chunkSize = opts.chunkSize ?? DEFAULT_CHUNK;\n const parallel = opts.parallelChunks ?? DEFAULT_PARALLEL;\n\n const job: UploadJob = {\n id: crypto.randomUUID(),\n file: opts.file,\n path: opts.path,\n totalBytes: opts.file.size,\n uploadedBytes: 0,\n percent: 0,\n status: 'initializing',\n cancel: () => {}, // rebound below\n };\n\n let cancelled = false;\n const aborters: AbortController[] = [];\n job.cancel = () => {\n cancelled = true;\n for (const a of aborters) a.abort();\n };\n\n function report() {\n job.percent =\n job.totalBytes > 0\n ? Math.min(100, Math.round((job.uploadedBytes / job.totalBytes) * 100))\n : 0;\n opts.onProgress?.(job);\n }\n\n try {\n if (!api.endpoints.uploadInit) throw new Error('uploadInit not configured');\n // 1) init\n const init = await api.jsonFetch<UploadInitResponse & { chunkBytes?: number; totalParts?: number }>(\n api.endpoints.uploadInit,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n path: opts.path,\n filename: opts.file.name,\n size: opts.file.size,\n mime: opts.file.type || 'application/octet-stream',\n }),\n },\n );\n job.uploadId = init.uploadId;\n job.status = 'uploading';\n report();\n\n const actualChunk = init.chunkBytes ?? chunkSize;\n void actualChunk; // referenced below — keep TS happy with `chunkSize` shadow\n const partProgress = new Map<number, number>();\n\n // 2) upload parts in parallel windows\n const completed: Array<{ partNumber: number; etag: string }> = [];\n let cursor = 0;\n\n async function uploadPart(entry: { partNumber: number; presignedUrl: string }): Promise<void> {\n const idx = entry.partNumber - 1;\n const start = idx * (init.chunkBytes ?? chunkSize);\n const end = Math.min(start + (init.chunkBytes ?? chunkSize), opts.file.size);\n const blob = opts.file.slice(start, end);\n\n const ctl = new AbortController();\n aborters.push(ctl);\n\n await new Promise<void>((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open('PUT', entry.presignedUrl);\n xhr.upload.onprogress = (ev) => {\n if (ev.lengthComputable) {\n const prev = partProgress.get(entry.partNumber) ?? 0;\n const delta = ev.loaded - prev;\n partProgress.set(entry.partNumber, ev.loaded);\n job.uploadedBytes += delta;\n report();\n }\n };\n xhr.onload = () => {\n if (xhr.status >= 200 && xhr.status < 300) {\n const etag = (xhr.getResponseHeader('ETag') || xhr.getResponseHeader('etag') || '').trim();\n if (!etag) {\n reject(new Error('Missing ETag on S3 response'));\n return;\n }\n // Top off in case the last progress event under-reported.\n const blobSize = end - start;\n const prev = partProgress.get(entry.partNumber) ?? 0;\n if (prev < blobSize) {\n job.uploadedBytes += blobSize - prev;\n partProgress.set(entry.partNumber, blobSize);\n }\n completed.push({ partNumber: entry.partNumber, etag });\n resolve();\n } else {\n reject(\n new Error(`S3 PUT ${entry.partNumber} → ${xhr.status}: ${xhr.responseText.slice(0, 200)}`),\n );\n }\n };\n xhr.onerror = () => reject(new Error(`S3 PUT ${entry.partNumber} network error`));\n xhr.onabort = () => reject(new DOMException('Aborted', 'AbortError'));\n ctl.signal.addEventListener('abort', () => xhr.abort());\n xhr.send(blob);\n });\n }\n\n /**\n * Wrap `uploadPart` in a tiny exponential-backoff retry so a\n * single hiccup on the edge (intermittent TCP RST, transient\n * 5xx) doesn't kill the whole multipart session. Counter is\n * per-part — a flaky one doesn't burn the budget for healthy\n * neighbours. We DON'T retry user cancellations or AbortError.\n */\n const MAX_RETRIES = 2;\n async function uploadPartWithRetry(\n entry: { partNumber: number; presignedUrl: string },\n attempt = 0,\n ): Promise<void> {\n try {\n await uploadPart(entry);\n } catch (err) {\n if (cancelled) throw err;\n const e = err instanceof Error ? err : new Error(String(err));\n if (e.name === 'AbortError') throw e;\n if (attempt >= MAX_RETRIES) throw e;\n\n // Roll back any partial uploadedBytes so progress doesn't\n // double-count after the retry succeeds.\n const leaked = partProgress.get(entry.partNumber) ?? 0;\n if (leaked > 0) {\n job.uploadedBytes = Math.max(0, job.uploadedBytes - leaked);\n partProgress.delete(entry.partNumber);\n report();\n }\n\n // Exponential backoff with jitter — 500ms, 1s, 1.5s …\n const delay = 500 * (attempt + 1) + Math.floor(Math.random() * 250);\n await new Promise((r) => setTimeout(r, delay));\n return uploadPartWithRetry(entry, attempt + 1);\n }\n }\n\n async function worker() {\n while (!cancelled && cursor < init.parts.length) {\n const entry = init.parts[cursor++];\n await uploadPartWithRetry(entry);\n }\n }\n\n const workers: Promise<void>[] = [];\n for (let i = 0; i < parallel; i++) {\n workers.push(worker());\n }\n await Promise.all(workers);\n\n if (cancelled) {\n throw new DOMException('Aborted by user', 'AbortError');\n }\n\n // 3) finalize\n if (!api.endpoints.uploadFinalize) throw new Error('uploadFinalize not configured');\n job.status = 'finalizing';\n completed.sort((a, b) => a.partNumber - b.partNumber);\n const final = await api.jsonFetch<UploadFinalizeResponse>(api.endpoints.uploadFinalize, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ uploadId: init.uploadId, parts: completed }),\n });\n\n job.status = 'done';\n job.uploadedBytes = job.totalBytes;\n job.percent = 100;\n report();\n opts.onDone?.(job, final);\n return final;\n } catch (err) {\n const asError = err instanceof Error ? err : new Error(String(err));\n job.status = asError.name === 'AbortError' ? 'aborted' : 'error';\n job.error = asError.message;\n report();\n\n // Best-effort server-side cleanup\n if (job.uploadId && api.endpoints.uploadAbort && job.status === 'aborted') {\n try {\n await api.jsonFetch(api.endpoints.uploadAbort, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ uploadId: job.uploadId }),\n });\n } catch {\n /* swallow — DB row will expire, S3 TTL handles orphan parts */\n }\n }\n\n opts.onError?.(job, asError);\n throw asError;\n }\n }\n\n return { uploadFile };\n}\n","/**\n * useSelection — multi-select state with Ctrl/Shift semantics.\n *\n * click(path, {ctrl, shift})\n * no-mod → replace selection with [path]\n * ctrl → toggle path in selection\n * shift → range select from anchor to path\n */\n\nimport { ref, computed } from 'vue';\nimport type { FileNode } from '../types/FileNode';\n\nexport function useSelection(items: () => FileNode[]) {\n const selected = ref<Set<string>>(new Set());\n const anchor = ref<string | null>(null);\n\n function click(path: string, mod: { ctrl?: boolean; shift?: boolean } = {}) {\n if (mod.shift && anchor.value) {\n const list = items();\n const aIdx = list.findIndex((n) => n.path === anchor.value);\n const bIdx = list.findIndex((n) => n.path === path);\n if (aIdx === -1 || bIdx === -1) {\n selected.value = new Set([path]);\n anchor.value = path;\n return;\n }\n const [lo, hi] = aIdx < bIdx ? [aIdx, bIdx] : [bIdx, aIdx];\n const next = new Set<string>();\n for (let i = lo; i <= hi; i++) next.add(list[i].path);\n selected.value = next;\n return;\n }\n\n if (mod.ctrl) {\n const next = new Set(selected.value);\n if (next.has(path)) next.delete(path);\n else next.add(path);\n selected.value = next;\n anchor.value = path;\n return;\n }\n\n selected.value = new Set([path]);\n anchor.value = path;\n }\n\n function clear() {\n selected.value = new Set();\n anchor.value = null;\n }\n\n function selectAll() {\n selected.value = new Set(items().map((n) => n.path));\n }\n\n function has(path: string): boolean {\n return selected.value.has(path);\n }\n\n function add(path: string) {\n const next = new Set(selected.value);\n next.add(path);\n selected.value = next;\n }\n\n function remove(path: string) {\n const next = new Set(selected.value);\n next.delete(path);\n selected.value = next;\n }\n\n const size = computed(() => selected.value.size);\n const isEmpty = computed(() => selected.value.size === 0);\n\n const nodes = computed(() => {\n const list = items();\n return list.filter((n) => selected.value.has(n.path));\n });\n\n return { selected, anchor, click, clear, selectAll, has, add, remove, size, isEmpty, nodes };\n}\n","/**\n * useKeyboardShortcuts — binds FileExplorer's keyboard affordances.\n *\n * Activated whenever the explorer is mounted (only one instance per\n * page is expected). Skips events that originate inside form controls\n * so the user can type filenames in the search box, modals, etc.\n */\n\nimport { onMounted, onBeforeUnmount, type Ref } from 'vue';\n\nexport interface ShortcutHandlers {\n onDelete?: () => void;\n onRename?: () => void; // F2\n onSelectAll?: () => void; // Ctrl+A\n onCut?: () => void; // Ctrl+X\n onCopy?: () => void; // Ctrl+C\n onPaste?: () => void; // Ctrl+V\n onOpen?: () => void; // Enter\n onClose?: () => void; // Escape\n onFocusSearch?: () => void; // /\n onDuplicate?: () => void; // Ctrl+D\n onPathJump?: () => void; // Cmd+K / Ctrl+K\n onGoUp?: () => void; // Alt+Up / Backspace (when nothing selected)\n hasSelection?: () => boolean; // disambiguates Backspace\n}\n\nexport function useKeyboardShortcuts(rootEl: Ref<HTMLElement | null>, handlers: ShortcutHandlers) {\n function onKey(e: KeyboardEvent) {\n const root = rootEl.value;\n if (!root) return;\n\n // Skip when the event originates inside a form control — don't\n // want `Delete` while editing a filename, `/` while typing in the\n // search box, etc. Escape always goes through so modals can close.\n const target = e.target as HTMLElement | null;\n if (\n target &&\n (target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.isContentEditable)\n ) {\n if (e.key !== 'Escape') return;\n }\n\n const ctrl = e.ctrlKey || e.metaKey;\n\n switch (e.key) {\n case 'Delete':\n if (handlers.onDelete) {\n e.preventDefault();\n handlers.onDelete();\n }\n break;\n case 'Backspace':\n // Backspace = delete when something is selected (file-manager\n // convention), parent-dir navigation otherwise. Without this\n // disambiguation Backspace was firing onDelete with an empty\n // selection and nothing happened, leaving users wondering why\n // the obvious 'go back' key did nothing.\n if (handlers.hasSelection?.() && handlers.onDelete) {\n e.preventDefault();\n handlers.onDelete();\n } else if (handlers.onGoUp) {\n e.preventDefault();\n handlers.onGoUp();\n }\n break;\n case 'F2':\n if (handlers.onRename) {\n e.preventDefault();\n handlers.onRename();\n }\n break;\n case 'Enter':\n if (handlers.onOpen) {\n handlers.onOpen();\n }\n break;\n case 'Escape':\n if (handlers.onClose) {\n handlers.onClose();\n }\n break;\n case '/':\n if (handlers.onFocusSearch && !ctrl) {\n e.preventDefault();\n handlers.onFocusSearch();\n }\n break;\n case 'a':\n case 'A':\n if (ctrl && handlers.onSelectAll) {\n e.preventDefault();\n handlers.onSelectAll();\n }\n break;\n case 'x':\n case 'X':\n if (ctrl && handlers.onCut) {\n e.preventDefault();\n handlers.onCut();\n }\n break;\n case 'c':\n case 'C':\n if (ctrl && handlers.onCopy) {\n e.preventDefault();\n handlers.onCopy();\n }\n break;\n case 'v':\n case 'V':\n if (ctrl && handlers.onPaste) {\n e.preventDefault();\n handlers.onPaste();\n }\n break;\n case 'd':\n case 'D':\n if (ctrl && handlers.onDuplicate) {\n e.preventDefault();\n handlers.onDuplicate();\n }\n break;\n case 'k':\n case 'K':\n if (ctrl && handlers.onPathJump) {\n e.preventDefault();\n handlers.onPathJump();\n }\n break;\n case 'ArrowUp':\n // Alt+Up = parent dir (matches Finder / Files / Explorer).\n if (e.altKey && handlers.onGoUp) {\n e.preventDefault();\n handlers.onGoUp();\n }\n break;\n }\n }\n\n onMounted(() => window.addEventListener('keydown', onKey));\n onBeforeUnmount(() => window.removeEventListener('keydown', onKey));\n}\n","/** Turkish UI strings. */\nexport const tr: Record<string, string> = {\n 'toolbar.new_folder': 'Yeni Klasör',\n 'toolbar.upload': 'Yükle',\n 'toolbar.search': 'Ara',\n 'toolbar.search.placeholder': 'Dosya adı…',\n 'toolbar.view.list': 'Liste',\n 'toolbar.view.grid': 'Izgara',\n 'toolbar.refresh': 'Yenile',\n 'toolbar.go_up': 'Üst Klasör',\n\n 'ctx.open': 'Aç',\n 'ctx.preview': 'Önizle',\n 'ctx.download': 'İndir',\n 'ctx.convert': 'Dönüştür',\n 'ctx.rename': 'Yeniden Adlandır',\n 'ctx.delete': 'Sil',\n 'ctx.delete_perm': 'Kalıcı Olarak Sil',\n 'ctx.restore': 'Geri Getir',\n 'ctx.share': 'Paylaş',\n 'ctx.move': 'Taşı',\n 'ctx.copy': 'Kopyala',\n 'ctx.cut': 'Kes',\n 'ctx.paste': 'Yapıştır',\n 'ctx.info': 'Bilgi',\n 'ctx.duplicate': 'Kopyasını Oluştur',\n 'ctx.new_file': 'Yeni Dosya',\n\n 'modal.delete.title': 'Silinsin mi?',\n 'modal.delete.message': '{count} öğe çöpe atılacak.',\n 'modal.delete.confirm': 'Çöpe At',\n 'modal.delete.cancel': 'Vazgeç',\n\n 'modal.rename.title': 'Yeniden Adlandır',\n 'modal.rename.save': 'Kaydet',\n 'modal.rename.cancel': 'Vazgeç',\n\n 'modal.newfolder.title': 'Yeni Klasör',\n 'modal.newfolder.placeholder': 'Klasör adı',\n 'modal.newfolder.create': 'Oluştur',\n 'modal.newfolder.cancel': 'Vazgeç',\n\n 'modal.share.title': 'Paylaşım Linki',\n 'modal.share.pin': 'PIN koruması',\n 'modal.share.expires': 'Son kullanma',\n 'modal.share.max_downloads': 'İndirme limiti',\n 'modal.share.create': 'Paylaş',\n 'modal.share.cancel': 'Vazgeç',\n 'modal.share.copy': 'Kopyala',\n 'modal.share.url_copied': 'Link kopyalandı',\n 'modal.share.pin_copied': 'PIN kopyalandı',\n 'modal.share.cli_copied': 'CLI komutu kopyalandı',\n\n 'upload.progress': 'Yükleniyor',\n 'upload.done': 'Tamamlandı',\n 'upload.error': 'Hata',\n 'upload.aborted': 'İptal edildi',\n 'upload.cancel': 'İptal',\n\n 'empty.folder': 'Bu klasör boş',\n 'empty.search': 'Sonuç bulunamadı',\n 'loading': 'Yükleniyor…',\n\n 'col.name': 'Ad',\n 'col.size': 'Boyut',\n 'col.modified': 'Tarih',\n 'col.type': 'Tür',\n\n 'unit.bytes': 'B',\n 'unit.kb': 'KB',\n 'unit.mb': 'MB',\n 'unit.gb': 'GB',\n 'unit.tb': 'TB',\n\n 'breadcrumb.root': 'Kök',\n 'breadcrumb.copy_path': 'Yolu Kopyala',\n 'breadcrumb.go_to_path': 'Yola Git',\n 'breadcrumb.path_placeholder': 'fileman/foo/bar',\n\n 'ops.copy': 'Kopyalanıyor',\n 'ops.move': 'Taşınıyor',\n 'ops.delete': 'Siliniyor',\n 'ops.queued': 'sırada',\n 'ops.done': 'tamamlandı',\n 'ops.error': 'hata',\n\n 'node.trash': 'Çöp Kutusu',\n\n // ——— Zengin önizleyici chrome ———\n 'viewer.open_in_new_tab': 'Yeni Sekmede Aç',\n 'viewer.loading': 'Yükleniyor…',\n 'viewer.failed_to_load': 'Dosya yüklenemedi',\n 'viewer.peer_not_installed': 'Bu dosya tipi için opsiyonel kütüphane kurulu değil. Peer dependency yükle veya İndir düğmesini kullan.',\n 'viewer.format_unsupported_3d': 'Bu 3B format tarayıcı önizlemesinde desteklenmiyor (model-viewer yalnızca .glb / .gltf / .usdz okur). Lütfen indirip yerel bir araçta açın.',\n 'viewer.zoom_in': 'Yakınlaştır',\n 'viewer.zoom_out': 'Uzaklaştır',\n 'viewer.fit_width': 'Sayfa genişliğine sığdır',\n 'viewer.next_page': 'Sonraki sayfa',\n 'viewer.prev_page': 'Önceki sayfa',\n 'viewer.page_n_of_m': 'Sayfa {n} / {m}',\n 'viewer.tags': 'Etiketler',\n 'viewer.layers': 'Katmanlar',\n 'viewer.toc': 'İçindekiler',\n 'viewer.font_smaller': 'Yazıyı küçült',\n 'viewer.font_larger': 'Yazıyı büyüt',\n 'viewer.search': 'Ara',\n 'viewer.download': 'İndir',\n 'viewer.save_annotations': 'Açıklamaları kaydet',\n 'viewer.annotations_on': 'Açıklamalar: açık',\n 'viewer.annotations_off': 'Açıklamalar: kapalı',\n 'viewer.read_only': 'Salt okunur',\n 'viewer.csv_first_row_header': 'İlk satır başlık olsun',\n 'viewer.csv_filter': 'Satır filtrele…',\n 'viewer.epub_prev': 'Önceki',\n 'viewer.epub_next': 'Sonraki',\n 'viewer.drawio.disabled': 'diagrams.net editörü bu filex kurulumunda yapılandırılmamış — yönetici FILEX_DRAWIO_URL\\'yi ayarlamalı.',\n 'viewer.archive.entries': '{n} dosya',\n 'viewer.archive.empty': 'Arşiv boş.',\n 'viewer.archive.error': 'Arşiv okunamadı.',\n 'viewer.name': 'Ad',\n 'viewer.size': 'Boyut',\n};\n","/** English UI strings. */\nexport const en: Record<string, string> = {\n 'toolbar.new_folder': 'New Folder',\n 'toolbar.upload': 'Upload',\n 'toolbar.search': 'Search',\n 'toolbar.search.placeholder': 'File name…',\n 'toolbar.view.list': 'List',\n 'toolbar.view.grid': 'Grid',\n 'toolbar.refresh': 'Refresh',\n 'toolbar.go_up': 'Up one level',\n\n 'ctx.open': 'Open',\n 'ctx.preview': 'Preview',\n 'ctx.download': 'Download',\n 'ctx.convert': 'Convert',\n 'ctx.rename': 'Rename',\n 'ctx.delete': 'Delete',\n 'ctx.delete_perm': 'Delete Permanently',\n 'ctx.restore': 'Restore',\n 'ctx.share': 'Share',\n 'ctx.move': 'Move',\n 'ctx.copy': 'Copy',\n 'ctx.cut': 'Cut',\n 'ctx.paste': 'Paste',\n 'ctx.info': 'Info',\n 'ctx.duplicate': 'Duplicate',\n 'ctx.new_file': 'New File',\n\n 'modal.delete.title': 'Delete?',\n 'modal.delete.message': '{count} item(s) will be moved to trash.',\n 'modal.delete.confirm': 'Move to Trash',\n 'modal.delete.cancel': 'Cancel',\n\n 'modal.rename.title': 'Rename',\n 'modal.rename.save': 'Save',\n 'modal.rename.cancel': 'Cancel',\n\n 'modal.newfolder.title': 'New Folder',\n 'modal.newfolder.placeholder': 'Folder name',\n 'modal.newfolder.create': 'Create',\n 'modal.newfolder.cancel': 'Cancel',\n\n 'modal.share.title': 'Share Link',\n 'modal.share.pin': 'PIN protected',\n 'modal.share.expires': 'Expires at',\n 'modal.share.max_downloads': 'Download limit',\n 'modal.share.create': 'Share',\n 'modal.share.cancel': 'Cancel',\n 'modal.share.copy': 'Copy',\n 'modal.share.url_copied': 'Link copied',\n 'modal.share.pin_copied': 'PIN copied',\n 'modal.share.cli_copied': 'CLI command copied',\n\n 'upload.progress': 'Uploading',\n 'upload.done': 'Done',\n 'upload.error': 'Error',\n 'upload.aborted': 'Aborted',\n 'upload.cancel': 'Cancel',\n\n 'empty.folder': 'This folder is empty',\n 'empty.search': 'No results',\n 'loading': 'Loading…',\n\n 'col.name': 'Name',\n 'col.size': 'Size',\n 'col.modified': 'Modified',\n 'col.type': 'Type',\n\n 'unit.bytes': 'B',\n 'unit.kb': 'KB',\n 'unit.mb': 'MB',\n 'unit.gb': 'GB',\n 'unit.tb': 'TB',\n\n 'breadcrumb.root': 'Root',\n 'breadcrumb.copy_path': 'Copy Path',\n 'breadcrumb.go_to_path': 'Go To Path',\n 'breadcrumb.path_placeholder': 'fileman/foo/bar',\n\n 'ops.copy': 'Copying',\n 'ops.move': 'Moving',\n 'ops.delete': 'Deleting',\n 'ops.queued': 'queued',\n 'ops.done': 'done',\n 'ops.error': 'error',\n\n 'node.trash': 'Trash',\n\n // ——— Rich viewer chrome ———\n 'viewer.open_in_new_tab': 'Open in New Tab',\n 'viewer.loading': 'Loading…',\n 'viewer.failed_to_load': 'Failed to load file',\n 'viewer.peer_not_installed': 'Optional viewer library is not installed. Install the peer dependency or use the download button.',\n 'viewer.format_unsupported_3d': 'This 3D format is not supported in the browser preview (model-viewer only reads .glb / .gltf / .usdz). Please download and open with a local tool.',\n 'viewer.zoom_in': 'Zoom in',\n 'viewer.zoom_out': 'Zoom out',\n 'viewer.fit_width': 'Fit width',\n 'viewer.next_page': 'Next page',\n 'viewer.prev_page': 'Previous page',\n 'viewer.page_n_of_m': 'Page {n} of {m}',\n 'viewer.tags': 'Tags',\n 'viewer.layers': 'Layers',\n 'viewer.toc': 'Contents',\n 'viewer.font_smaller': 'Smaller text',\n 'viewer.font_larger': 'Larger text',\n 'viewer.search': 'Search',\n 'viewer.download': 'Download',\n 'viewer.save_annotations': 'Save annotations',\n 'viewer.annotations_on': 'Annotations: on',\n 'viewer.annotations_off': 'Annotations: off',\n 'viewer.read_only': 'Read only',\n 'viewer.csv_first_row_header': 'First row as header',\n 'viewer.csv_filter': 'Filter rows…',\n 'viewer.epub_prev': 'Previous',\n 'viewer.epub_next': 'Next',\n 'viewer.drawio.disabled': 'diagrams.net embed is not configured for this filex instance — operator must wire FILEX_DRAWIO_URL to enable the editor.',\n 'viewer.archive.entries': '{n} files',\n 'viewer.archive.empty': 'Archive is empty.',\n 'viewer.archive.error': 'Could not read archive contents.',\n 'viewer.name': 'Name',\n 'viewer.size': 'Size',\n};\n","/**\n * Locale message catalogue. The string-table is intentionally tiny — no\n * external i18n library, just a `t(key, vars?)` helper exposed via\n * `useLocale`.\n */\nimport { tr } from './tr';\nimport { en } from './en';\nimport type { LocaleCode } from '../types/ExplorerConfig';\n\nexport const messages: Record<LocaleCode, Record<string, string>> = { tr, en };\n\nexport { tr, en };\n","/**\n * useLocale — tr/en string table with a tiny `t()` helper.\n *\n * No i18n library — the catalogue is small enough to ship inline (see\n * src/locales).\n */\n\nimport { computed, type Ref } from 'vue';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { messages } from '../locales';\n\nexport function useLocale(localeRef: Ref<LocaleCode> | (() => LocaleCode)) {\n const lookup = computed(() => {\n const code = typeof localeRef === 'function' ? localeRef() : localeRef.value;\n return messages[code] ?? messages.tr;\n });\n\n function t(key: string, vars: Record<string, string | number> = {}): string {\n const raw = lookup.value[key] ?? key;\n return Object.entries(vars).reduce(\n (acc, [k, v]) => acc.replaceAll(`{${k}}`, String(v)),\n raw,\n );\n }\n\n function formatSize(bytes: number | undefined | null): string {\n if (bytes == null || bytes <= 0) return '—';\n const units: Array<[number, string]> = [\n [1024 ** 4, 'unit.tb'],\n [1024 ** 3, 'unit.gb'],\n [1024 ** 2, 'unit.mb'],\n [1024, 'unit.kb'],\n [1, 'unit.bytes'],\n ];\n for (const [div, key] of units) {\n if (bytes >= div) {\n const val = bytes / div;\n const rounded = val >= 100 ? Math.round(val) : val.toFixed(val >= 10 ? 1 : 2);\n return `${rounded} ${t(key)}`;\n }\n }\n return `${bytes} ${t('unit.bytes')}`;\n }\n\n /**\n * Render a FileNode's basename with locale-aware overrides:\n * - `.trash` directory → \"Çöp Kutusu\" / \"Trash\"\n * - Trash entries are stored as `<Ymd-His>-<rand>__<original>` so\n * listings inside .trash/ would otherwise show timestamps. Strip\n * that prefix so the user sees the original basename.\n */\n function nodeDisplayName(node: { basename: string }): string {\n if (node.basename === '.trash') return t('node.trash');\n const m = node.basename.match(/^\\d{8}-\\d{6}-[A-Za-z0-9]+__(.+)$/);\n if (m) return m[1];\n return node.basename;\n }\n\n return { t, formatSize, nodeDisplayName };\n}\n","/**\n * usePendingOps — track async copy/move/delete operations.\n *\n * Backend POST /files/{copy,move,delete} returns `{op}` immediately\n * (status='pending') and the actual S3 work runs in a worker. The\n * client polls `/files/ops` every 2s while there's anything still\n * pending or running so the user gets live feedback (\"3/5 kopyalandı\").\n *\n * Polling is reference-counted: callers `register(op)` after starting a\n * new op; an interval ticks while the registered set has any non-\n * terminal entries. Terminal ops (done/error) stay in the local cache\n * for `RETAIN_MS` so the UI can flash a final state before they fade\n * out, then a sweep removes them.\n */\n\nimport { computed, ref, onBeforeUnmount } from 'vue';\nimport type { ExplorerConfig } from '../types/ExplorerConfig';\nimport type { FileApi } from './useFileApi';\n\nexport interface PendingOp {\n id: number;\n op_type: 'copy' | 'move' | 'delete';\n status: 'pending' | 'running' | 'done' | 'error';\n progress_total: number;\n progress_done: number;\n target_path: string | null;\n source_dir: string | null;\n source_count: number;\n error_message: string | null;\n started_at: string | null;\n finished_at: string | null;\n created_at: string | null;\n}\n\nconst POLL_MS = 2000;\nconst RETAIN_MS = 8000;\n\n/**\n * normalizeOp maps the backend ops row (`{kind,total,done,failed,error,dest,\n * status:'ok'|'failed'|'partial'|…}`) onto the PendingOp contract the tray\n * renders (`{op_type,progress_total,progress_done,error_message,status:'done'|\n * 'error'|…}`). Without this the tray showed \"undefined/undefined\" for a\n * running op (progress_* were undefined) and never treated an 'ok'/'failed'\n * row as terminal. Tolerant of an already-normalized shape (idempotent).\n */\nfunction normalizeOp(raw: Record<string, unknown>): PendingOp {\n const num = (...vals: unknown[]): number => {\n for (const v of vals) if (typeof v === 'number') return v;\n return 0;\n };\n const str = (...vals: unknown[]): string | null => {\n for (const v of vals) if (typeof v === 'string' && v !== '') return v;\n return null;\n };\n const rawStatus = String(raw.status ?? 'pending');\n const status: PendingOp['status'] =\n rawStatus === 'ok' || rawStatus === 'done'\n ? 'done'\n : rawStatus === 'failed' || rawStatus === 'partial' || rawStatus === 'error'\n ? 'error'\n : rawStatus === 'running'\n ? 'running'\n : 'pending';\n const sources = Array.isArray(raw.sources) ? raw.sources : [];\n const opType = str(raw.op_type, raw.kind) ?? 'delete';\n return {\n id: num(raw.id),\n op_type: (opType === 'copy' || opType === 'move' ? opType : 'delete') as PendingOp['op_type'],\n status,\n progress_total: num(raw.progress_total, raw.total, sources.length),\n progress_done: num(raw.progress_done, raw.done),\n target_path: str(raw.target_path, raw.dest),\n source_dir: str(raw.source_dir),\n source_count: num(raw.source_count, sources.length),\n error_message: str(raw.error_message, raw.error),\n started_at: str(raw.started_at),\n finished_at: str(raw.finished_at),\n created_at: str(raw.created_at),\n };\n}\n\nexport interface UsePendingOpsOptions {\n /** Called once an op flips into a terminal state (done|error). */\n onSettled?: (op: PendingOp) => void;\n}\n\nexport function usePendingOps(\n config: ExplorerConfig,\n api: FileApi,\n opts: UsePendingOpsOptions = {},\n) {\n void config; // kept for future per-instance config knobs\n const ops = ref<PendingOp[]>([]);\n const announced = new Set<number>();\n const settledAt = new Map<number, number>();\n // First poll after mount returns the server's recent-history window\n // (last 5 min of done/error rows). Mark them announced silently and\n // skip the callback so we don't double-fire toasts on F5.\n let firstPollDone = false;\n\n const hasActive = computed(() =>\n ops.value.some((o) => o.status === 'pending' || o.status === 'running'),\n );\n\n let timer: ReturnType<typeof setInterval> | undefined;\n\n function startPolling() {\n if (timer) return;\n if (!api.endpoints.opsList) return;\n timer = setInterval(() => {\n void poll();\n }, POLL_MS);\n // Kick a poll right away.\n void poll();\n }\n\n function stopPolling() {\n if (timer) {\n clearInterval(timer);\n timer = undefined;\n }\n }\n\n async function poll(): Promise<void> {\n if (!api.endpoints.opsList) return;\n try {\n const res = await api.jsonFetch<{ ops: Record<string, unknown>[] }>(api.endpoints.opsList);\n const incoming = (res.ops || []).map(normalizeOp);\n\n for (const op of incoming) {\n if ((op.status === 'done' || op.status === 'error') && !announced.has(op.id)) {\n announced.add(op.id);\n settledAt.set(op.id, Date.now());\n if (firstPollDone) {\n opts.onSettled?.(op);\n }\n }\n }\n\n // Filter incoming: pending/running always; settled only if user\n // is currently seeing them in the local tray.\n const localIds = new Set(ops.value.map((o) => o.id));\n const visibleIncoming = incoming.filter((op) => {\n if (op.status === 'pending' || op.status === 'running') return true;\n if (!firstPollDone) return false;\n return localIds.has(op.id);\n });\n\n const visibleIds = new Set(visibleIncoming.map((o) => o.id));\n const local = ops.value.filter((o) => !visibleIds.has(o.id));\n const merged = [...visibleIncoming, ...local];\n\n firstPollDone = true;\n\n // Sweep: drop terminal ops past RETAIN_MS.\n const now = Date.now();\n const after = merged.filter((o) => {\n if (o.status === 'pending' || o.status === 'running') return true;\n const at = settledAt.get(o.id);\n return at !== undefined && now - at < RETAIN_MS;\n });\n ops.value = after;\n\n if (!hasActive.value && after.length === 0) {\n stopPolling();\n }\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn('[usePendingOps] poll failed:', err);\n }\n }\n\n function register(raw: PendingOp | Record<string, unknown>): void {\n const op = normalizeOp(raw as Record<string, unknown>);\n const exists = ops.value.some((o) => o.id === op.id);\n if (!exists) {\n ops.value = [op, ...ops.value];\n }\n startPolling();\n }\n\n function dismiss(id: number): void {\n ops.value = ops.value.filter((o) => o.id !== id);\n settledAt.delete(id);\n }\n\n onBeforeUnmount(() => {\n stopPolling();\n });\n\n return {\n ops,\n hasActive,\n register,\n dismiss,\n poll,\n startPolling,\n stopPolling,\n };\n}\n","/**\n * useMonacoLoader — fire-and-forget Monaco preloader.\n *\n * The preview/edit flow wants Monaco when available (best-in-class\n * editor) and highlight.js for read-only syntax colour as a graceful\n * fallback. Monaco is heavy (~5 MB), so we kick off the dynamic import\n * at module-init time — by the time the user clicks \"edit\" on a code\n * file (typically several seconds in), the chunk is already cached.\n *\n * - `monacoPromise` resolves to the Monaco namespace, or `null`\n * if the package is not installed (peer\n * missing) / load fails.\n * - `highlightPromise` resolves to the highlight.js export, or\n * `null` similarly.\n * - `getMonaco()` returns the cached module synchronously\n * (after `await monacoPromise`) so a click\n * handler doesn't re-trigger the import.\n *\n * Both modules are externalized in the bundler config — the consumer\n * either declares them as direct deps (Monaco UX) or doesn't (the\n * highlight.js read-only path takes over). No build-time hard dep here.\n */\n\nlet monacoPromise: Promise<unknown | null> | null = null;\nlet highlightPromise: Promise<unknown | null> | null = null;\nlet monacoCached: unknown | null = null;\nlet highlightCached: unknown | null = null;\n\n/**\n * Kick off the Monaco import the first time someone calls\n * `preloadEditor()` (typically the FileExplorer onMounted hook). Cheap\n * to call repeatedly — only the first call actually triggers the\n * dynamic import.\n */\nexport function preloadEditor(): void {\n if (!monacoPromise) {\n monacoPromise = import(/* @vite-ignore */ 'monaco-editor')\n .then((mod) => {\n monacoCached = (mod as { default?: unknown }).default ?? mod;\n return monacoCached;\n })\n .catch(() => {\n monacoCached = null;\n return null;\n });\n }\n if (!highlightPromise) {\n highlightPromise = import(/* @vite-ignore */ 'highlight.js')\n .then((mod) => {\n highlightCached = (mod as { default?: unknown }).default ?? mod;\n return highlightCached;\n })\n .catch(() => {\n highlightCached = null;\n return null;\n });\n }\n}\n\n/**\n * Resolve Monaco. If preload hasn't been kicked off yet, this triggers\n * it (and pays the load cost on the spot). Returns `null` when the\n * package isn't installed.\n */\nexport async function ensureMonaco(): Promise<unknown | null> {\n if (!monacoPromise) preloadEditor();\n return monacoPromise!;\n}\n\nexport async function ensureHighlight(): Promise<unknown | null> {\n if (!highlightPromise) preloadEditor();\n return highlightPromise!;\n}\n\n/** Synchronous cached lookup — null if Monaco not yet ready or absent. */\nexport function getMonaco(): unknown | null {\n return monacoCached;\n}\n\nexport function getHighlight(): unknown | null {\n return highlightCached;\n}\n\n/**\n * Composable wrapper — components that want reactive \"is Monaco ready\n * yet?\" semantics can read the resolved promise. The implementation is\n * intentionally tiny: components don't need anything fancier than\n * `await ensureMonaco()` inside the click handler.\n */\nexport function useMonacoLoader() {\n preloadEditor();\n return {\n ensureMonaco,\n ensureHighlight,\n getMonaco,\n getHighlight,\n };\n}\n","<script setup lang=\"ts\">\n/**\n * Toolbar — selection-aware action row.\n *\n * Layout:\n * - No selection → [📁 Yeni Klasör] [search | ⬆ ↻] [☰ ▦]\n * - 1 file selected → [👁 ⬇ 🔗 ✎ 🗑] [search | ⬆ ↻] [☰ ▦]\n * - 1 folder selected → [↗ ✎ 🗑] [search | ⬆ ↻] [☰ ▦]\n * - Multi selection → [✂ ❐ 🗑] [search | ⬆ ↻] [☰ ▦]\n *\n * Presentational only — all logic (rename, share, …) lives in\n * FileExplorer.vue, which listens for `action` emits.\n */\nimport { computed, ref, watch } from 'vue';\nimport type { ViewMode } from '../types/FileNode';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport type { ContextAction } from './ContextMenu.vue';\nimport { useLocale } from '../composables/useLocale';\n\nexport type SelectionMode = 'none' | 'single-file' | 'single-dir' | 'multi';\n\nconst props = defineProps<{\n viewMode: ViewMode;\n searchQuery: string;\n /**\n * Tells the toolbar which action set to render (a `.trash/` listing\n * gets a restore-only menu instead of cut/copy/etc).\n */\n trashActive: boolean;\n /**\n * The action list to render, supplied by FileExplorer. This is the SAME\n * list the right-click context menu renders for the current selection, so\n * the two menus can never drift apart. Dividers/hidden entries are filtered\n * out here (the toolbar is a flat row).\n */\n actions: ContextAction[];\n /** Current selection metadata — toolbar uses this to pick its mode. */\n selectionMode?: SelectionMode;\n /** True when clipboard has cut/copy items, so we can enable Paste. */\n pasteEnabled?: boolean;\n /** True when the universal converter (FILEX_CONVERT_URL) is available. */\n convertEnabled?: boolean;\n /**\n * True when the current dir has a parent the user can step up to.\n * Hidden at storage root because there's nothing above it.\n */\n canGoUp?: boolean;\n /**\n * Multi-storage virtual root marker — when true, mutation buttons\n * (New Folder / Upload / Paste) are hidden because there's no real\n * backend folder to write to.\n */\n atVirtualRoot?: boolean;\n /**\n * RBAC: false hides the write affordances (New Folder / Upload / Paste) when\n * the current user lacks edit on this directory. Undefined = no RBAC gating\n * (backward-compatible for embedders that don't pass it).\n */\n canWrite?: boolean;\n locale: LocaleCode;\n}>();\n\nconst emit = defineEmits<{\n (e: 'update:viewMode', v: ViewMode): void;\n (e: 'update:searchQuery', v: string): void;\n (e: 'new-folder'): void;\n (e: 'upload'): void;\n (e: 'refresh'): void;\n (e: 'go-up'): void;\n (e: 'action', key: string): void;\n (e: 'open-recents'): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\n\nconst searchEl = ref<HTMLInputElement | null>(null);\nconst localSearch = ref(props.searchQuery);\n\nwatch(() => props.searchQuery, (v) => {\n localSearch.value = v;\n});\n\nlet debounce: ReturnType<typeof setTimeout> | undefined;\nfunction onSearchInput(ev: Event) {\n const v = (ev.target as HTMLInputElement).value;\n localSearch.value = v;\n if (debounce) clearTimeout(debounce);\n debounce = setTimeout(() => emit('update:searchQuery', v), 200);\n}\n\nfunction focusSearch() {\n searchEl.value?.focus();\n searchEl.value?.select();\n}\n\ndefineExpose({ focusSearch });\n\nconst mode = computed<SelectionMode>(() => props.selectionMode ?? 'none');\n\n// The visible action buttons = the shared list from FileExplorer, minus\n// dividers and hidden entries (the toolbar is a flat row, not a dropdown).\n// Disabled entries render greyed-out. Because this is the SAME list the\n// context menu uses, the two menus are guaranteed to match.\nconst toolbarItems = computed(() => props.actions.filter((a) => !a.divider && !a.hidden));\n\nfunction fire(key: string) {\n emit('action', key);\n}\n</script>\n\n<template>\n <div class=\"fe-toolbar\">\n <div class=\"fe-toolbar__primary\">\n <button\n v-if=\"canGoUp\"\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only\"\n :title=\"t('toolbar.go_up')\"\n :aria-label=\"t('toolbar.go_up')\"\n @click=\"emit('go-up')\"\n >\n <span class=\"fe-icon\">↑</span>\n </button>\n\n <button\n v-if=\"mode === 'none' && !trashActive && !atVirtualRoot && canWrite !== false\"\n type=\"button\"\n class=\"fe-btn fe-btn--primary\"\n :title=\"t('toolbar.new_folder')\"\n @click=\"emit('new-folder')\"\n >\n <span class=\"fe-icon\">📁</span>\n <span class=\"fe-btn__label\">{{ t('toolbar.new_folder') }}</span>\n </button>\n\n <button\n v-for=\"a in toolbarItems\"\n :key=\"a.key\"\n type=\"button\"\n class=\"fe-btn\"\n :class=\"{ 'fe-btn--danger': a.danger, 'is-disabled': a.disabled }\"\n :disabled=\"a.disabled\"\n :title=\"a.label\"\n @click=\"fire(a.key)\"\n >\n <span class=\"fe-icon\">{{ a.icon }}</span>\n <span class=\"fe-btn__label\">{{ a.label }}</span>\n </button>\n\n <button\n v-if=\"pasteEnabled && mode === 'none' && !trashActive && !atVirtualRoot && canWrite !== false\"\n type=\"button\"\n class=\"fe-btn\"\n :title=\"t('ctx.paste')\"\n @click=\"fire('paste')\"\n >\n <span class=\"fe-icon\">📋</span>\n <span class=\"fe-btn__label\">{{ t('ctx.paste') }}</span>\n </button>\n </div>\n\n <div class=\"fe-toolbar__spacer\" />\n\n <div class=\"fe-toolbar__search-group\">\n <div class=\"fe-search\">\n <input\n ref=\"searchEl\"\n type=\"search\"\n class=\"fe-search__input\"\n :placeholder=\"t('toolbar.search.placeholder')\"\n :value=\"localSearch\"\n aria-label=\"Search\"\n @input=\"onSearchInput\"\n />\n </div>\n <button\n v-if=\"!atVirtualRoot && canWrite !== false\"\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only\"\n :title=\"t('toolbar.upload')\"\n @click=\"emit('upload')\"\n >\n <span class=\"fe-icon\">⬆</span>\n </button>\n <button\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only\"\n :title=\"t('toolbar.refresh')\"\n @click=\"emit('refresh')\"\n >\n <span class=\"fe-icon\">↻</span>\n </button>\n </div>\n\n <div class=\"fe-toolbar__view\" role=\"tablist\" aria-label=\"View\">\n <button\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only\"\n :class=\"{ 'is-active': viewMode === 'list' }\"\n role=\"tab\"\n :aria-selected=\"viewMode === 'list'\"\n :title=\"t('toolbar.view.list')\"\n @click=\"emit('update:viewMode', 'list')\"\n >\n <span class=\"fe-icon\">☰</span>\n </button>\n <button\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only\"\n :class=\"{ 'is-active': viewMode === 'grid' }\"\n role=\"tab\"\n :aria-selected=\"viewMode === 'grid'\"\n :title=\"t('toolbar.view.grid')\"\n @click=\"emit('update:viewMode', 'grid')\"\n >\n <span class=\"fe-icon\">▦</span>\n </button>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n/**\n * TagPicker — small chip list with add/remove for a node.\n *\n * Reads `GET /api/files/manager/tags?node_id=…` on mount, writes the\n * full new array via `POST /api/files/manager/tags`.\n *\n * Tag colors are deterministic: hash(name) → palette index. Consumers\n * can override with the `palette` prop.\n */\nimport { ref, watch, onMounted, computed } from 'vue';\n\nconst props = defineProps<{\n nodeId: number;\n apiBase?: string;\n authHeaders?: () => Record<string, string> | Promise<Record<string, string>>;\n /** Optional list of palette swatches; one is picked per tag deterministically. */\n palette?: string[];\n}>();\n\nconst emit = defineEmits<{\n (e: 'change', tags: string[]): void;\n (e: 'error', message: string): void;\n}>();\n\nconst tags = ref<string[]>([]);\nconst loading = ref(false);\nconst adding = ref(false);\nconst newTag = ref('');\n\nconst palette = computed(() => props.palette ?? [\n '#ef4444', '#f59e0b', '#10b981', '#3b82f6',\n '#8b5cf6', '#ec4899', '#14b8a6', '#f97316',\n]);\n\nfunction colorFor(tag: string): string {\n let h = 0;\n for (let i = 0; i < tag.length; i++) h = (h * 31 + tag.charCodeAt(i)) | 0;\n const arr = palette.value;\n return arr[Math.abs(h) % arr.length];\n}\n\nasync function buildHeaders(extra: Record<string, string> = {}): Promise<Record<string, string>> {\n return { ...(await (props.authHeaders ?? (() => ({})))()), ...extra };\n}\n\nasync function load() {\n loading.value = true;\n try {\n const base = props.apiBase ?? '';\n const res = await fetch(`${base}/api/files/manager/tags?node_id=${props.nodeId}`, {\n headers: await buildHeaders(),\n credentials: 'include',\n });\n if (res.ok) {\n const body = await res.json();\n tags.value = Array.isArray(body.tags) ? body.tags : [];\n }\n } catch (err) {\n emit('error', err instanceof Error ? err.message : String(err));\n } finally {\n loading.value = false;\n }\n}\n\nasync function persist(next: string[]) {\n const previous = [...tags.value];\n tags.value = next;\n try {\n const base = props.apiBase ?? '';\n const res = await fetch(`${base}/api/files/manager/tags`, {\n method: 'POST',\n headers: await buildHeaders({ 'Content-Type': 'application/json' }),\n credentials: 'include',\n body: JSON.stringify({ node_id: props.nodeId, tags: next }),\n });\n if (!res.ok) throw new Error(`tag save failed: ${res.status}`);\n emit('change', next);\n } catch (err) {\n tags.value = previous;\n emit('error', err instanceof Error ? err.message : String(err));\n }\n}\n\nfunction add() {\n const v = newTag.value.trim();\n if (!v || tags.value.includes(v)) {\n newTag.value = '';\n adding.value = false;\n return;\n }\n persist([...tags.value, v]);\n newTag.value = '';\n adding.value = false;\n}\n\nfunction remove(tag: string) {\n persist(tags.value.filter((t) => t !== tag));\n}\n\nonMounted(load);\nwatch(() => props.nodeId, load);\n</script>\n\n<template>\n <div class=\"filex-tag-picker\" :class=\"{ 'is-loading': loading }\">\n <span\n v-for=\"tag in tags\"\n :key=\"tag\"\n class=\"filex-tag\"\n :style=\"{ '--filex-tag-color': colorFor(tag) }\"\n >\n {{ tag }}\n <button class=\"filex-tag-x\" type=\"button\" @click=\"remove(tag)\" aria-label=\"Remove tag\">×</button>\n </span>\n\n <form v-if=\"adding\" class=\"filex-tag-add\" @submit.prevent=\"add\">\n <input\n v-model=\"newTag\"\n autofocus\n placeholder=\"tag name\"\n @blur=\"add\"\n @keydown.escape=\"adding = false; newTag = ''\"\n />\n </form>\n <button v-else class=\"filex-tag-add-btn\" type=\"button\" @click=\"adding = true\">+ Add tag</button>\n </div>\n</template>\n\n<style scoped>\n.filex-tag-picker {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n align-items: center;\n}\n.filex-tag-picker.is-loading {\n opacity: 0.6;\n pointer-events: none;\n}\n.filex-tag {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n border-radius: 999px;\n padding: 2px 10px;\n font-size: 12px;\n font-weight: 500;\n color: #fff;\n background: var(--filex-tag-color);\n}\n.filex-tag-x {\n background: transparent;\n border: none;\n color: rgba(255, 255, 255, 0.85);\n cursor: pointer;\n padding: 0 2px;\n font-size: 14px;\n line-height: 1;\n}\n.filex-tag-x:hover {\n color: #fff;\n}\n.filex-tag-add input {\n border: 1px solid var(--filex-border, #d1d5db);\n border-radius: 12px;\n padding: 2px 10px;\n font-size: 12px;\n width: 110px;\n}\n.filex-tag-add-btn {\n border: 1px dashed var(--filex-border, #d1d5db);\n background: transparent;\n border-radius: 999px;\n padding: 2px 10px;\n font-size: 12px;\n color: var(--filex-text-muted, #6b7280);\n cursor: pointer;\n}\n.filex-tag-add-btn:hover {\n border-color: var(--filex-accent, #6366f1);\n color: var(--filex-accent, #6366f1);\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * RecentlyOpened — drop-down/sidebar tray of the user's recently-opened\n * files. Backed by `GET /api/files/manager/recent?limit=20`.\n */\nimport { ref, onMounted, watch } from 'vue';\n\ninterface RecentNode {\n id: number;\n storage_id: number;\n path: string;\n name: string;\n mime?: string;\n last_opened?: string;\n}\n\nconst props = defineProps<{\n apiBase?: string;\n authHeaders?: () => Record<string, string> | Promise<Record<string, string>>;\n limit?: number;\n /** Optional refresh trigger — incrementing this re-fetches. */\n refreshKey?: number | string;\n}>();\n\nconst emit = defineEmits<{\n (e: 'open', node: RecentNode): void;\n (e: 'error', message: string): void;\n}>();\n\nconst items = ref<RecentNode[]>([]);\nconst loading = ref(false);\n\nasync function load() {\n loading.value = true;\n try {\n const headers = await (props.authHeaders ?? (() => ({})))();\n const base = props.apiBase ?? '';\n const limit = props.limit ?? 20;\n const res = await fetch(`${base}/api/files/manager/recent?limit=${limit}`, {\n headers,\n credentials: 'include',\n });\n if (res.ok) {\n const body = await res.json();\n items.value = Array.isArray(body.entries) ? body.entries : (Array.isArray(body) ? body : []);\n }\n } catch (err) {\n emit('error', err instanceof Error ? err.message : String(err));\n } finally {\n loading.value = false;\n }\n}\n\nfunction fmtTime(s?: string): string {\n if (!s) return '';\n const t = new Date(s).getTime();\n if (Number.isNaN(t)) return '';\n const diff = Date.now() - t;\n if (diff < 60_000) return 'just now';\n if (diff < 3_600_000) return `${Math.floor(diff / 60_000)}m ago`;\n if (diff < 86_400_000) return `${Math.floor(diff / 3_600_000)}h ago`;\n return `${Math.floor(diff / 86_400_000)}d ago`;\n}\n\nonMounted(load);\nwatch(() => props.refreshKey, load);\n</script>\n\n<template>\n <div class=\"filex-recent\">\n <header>\n <h3>Recently opened</h3>\n <button class=\"filex-recent-refresh\" type=\"button\" @click=\"load\" :disabled=\"loading\">\n ↻\n </button>\n </header>\n\n <ul v-if=\"items.length\">\n <li v-for=\"n in items\" :key=\"n.id\">\n <button type=\"button\" @click=\"emit('open', n)\" class=\"filex-recent-item\">\n <span class=\"filex-recent-name\">{{ n.name }}</span>\n <span class=\"filex-recent-meta\">{{ fmtTime(n.last_opened) }}</span>\n </button>\n </li>\n </ul>\n <p v-else-if=\"!loading\" class=\"filex-recent-empty\">Nothing here yet.</p>\n <p v-else class=\"filex-recent-empty\">Loading…</p>\n </div>\n</template>\n\n<style scoped>\n.filex-recent {\n background: var(--fe-bg-elev, var(--filex-bg-card, #ffffff));\n border: 1px solid var(--fe-border, var(--filex-border, #e5e7eb));\n border-radius: 8px;\n padding: 12px;\n font-size: 13px;\n}\n.filex-recent header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n.filex-recent h3 {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--fe-text, var(--filex-text, #111827));\n}\n.filex-recent-refresh {\n background: transparent;\n border: none;\n color: var(--fe-text-muted, var(--filex-text-muted, #9ca3af));\n cursor: pointer;\n font-size: 14px;\n padding: 2px 6px;\n}\n.filex-recent ul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.filex-recent-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n background: transparent;\n border: none;\n padding: 6px 8px;\n cursor: pointer;\n border-radius: 4px;\n text-align: left;\n}\n.filex-recent-item:hover {\n background: var(--fe-bg-hover, var(--filex-bg-soft, #f3f4f6));\n}\n.filex-recent-name {\n color: var(--fe-text, var(--filex-text, #111827));\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.filex-recent-meta {\n color: var(--fe-text-muted, var(--filex-text-muted, #9ca3af));\n font-size: 11px;\n margin-left: 8px;\n flex-shrink: 0;\n}\n.filex-recent-empty {\n color: var(--fe-text-muted, var(--filex-text-muted, #9ca3af));\n margin: 4px 0 0;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Breadcrumb — adapter-aware path crumbs.\n *\n * Dirname arrives as `<adapter>://<rel>` (e.g. `s3-test://aa/bb`). The\n * first crumb is ALWAYS the storage root — its label is the adapter\n * name itself (`s3-test`) and clicking it lands you at `<adapter>://`,\n * NOT at the first sub-folder you happened to be inside. The remaining\n * crumbs walk down the path one segment at a time.\n *\n * Examples:\n * `s3-test://` → [s3-test]\n * `s3-test://aa` → [s3-test] › [aa]\n * `s3-test://aa/bb` → [s3-test] › [aa] › [bb]\n *\n * `rootLabel` overrides the adapter name when the embedder wants a\n * branded label ('Files', 'My Drive', etc). Defaults to the adapter.\n *\n * The ✏ button swaps the crumbs for a free-form input; Enter\n * navigates, Escape cancels.\n */\nimport { computed, nextTick, ref } from 'vue';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\n\nconst props = defineProps<{\n dirname: string;\n adapter: string;\n rootLabel: string;\n locale: LocaleCode;\n /**\n * Multi-storage mode — when true the breadcrumb prepends a global\n * \"/\" crumb so the user can pop all the way back to the storage\n * picker. Storage name then occupies crumb #1 instead of #0.\n */\n multiStorageRoot?: boolean;\n /**\n * Root confinement (qualified `<adapter>://<rel>`). When set the breadcrumb\n * treats this folder as `/`: crumbs above it are hidden, the root crumb is\n * the confined folder's own name, and the ✏ path editor shows/accepts paths\n * relative to it (`/`, `/sub`). Pairs with FileExplorer's rootPath clamp.\n */\n rootPath?: string;\n}>();\n\n// Confined root parsed into its adapter-relative form (\"projeler/acme\") and\n// the trailing folder name used as the \"/\" crumb label.\nconst confinedRel = computed(() => {\n if (!props.rootPath) return '';\n const r = props.rootPath;\n const i = r.indexOf('://');\n return (i >= 0 ? r.slice(i + 3) : r).replace(/^\\/+|\\/+$/g, '');\n});\nconst floorLabel = computed(() => {\n const rel = confinedRel.value;\n if (!rel) return props.rootLabel || props.adapter;\n const parts = rel.split('/');\n return parts[parts.length - 1] || (props.rootLabel || props.adapter);\n});\n\nconst { t } = useLocale(() => props.locale);\n\nconst emit = defineEmits<{\n (e: 'navigate', adapterPath: string): void;\n (e: 'copy-path', adapterPath: string): void;\n (e: 'crumb-context', payload: { x: number; y: number; adapterPath: string; label: string }): void;\n (e: 'crumb-drop', adapterPath: string, ev: DragEvent): void;\n}>();\n\ninterface Crumb {\n label: string;\n adapterPath: string;\n}\n\nconst crumbs = computed<Crumb[]>(() => {\n const adapterPrefix = `${props.adapter}://`;\n const raw = props.dirname.startsWith(adapterPrefix)\n ? props.dirname.slice(adapterPrefix.length)\n : props.dirname;\n const parts = raw.split('/').filter(Boolean);\n\n const out: Crumb[] = [];\n\n // Confined: the root folder is the top crumb (its own name), and only the\n // path BELOW it is walked — segments above the confinement are never shown.\n if (props.rootPath) {\n const floor = confinedRel.value;\n const cur = raw.replace(/^\\/+|\\/+$/g, '');\n const below = floor && (cur === floor || cur.startsWith(floor + '/'))\n ? cur.slice(floor.length).replace(/^\\/+/, '')\n : '';\n out.push({ label: floorLabel.value, adapterPath: props.rootPath });\n let acc = floor;\n for (const part of below.split('/').filter(Boolean)) {\n acc = acc ? `${acc}/${part}` : part;\n out.push({ label: part === '.trash' ? t('node.trash') : part, adapterPath: `${adapterPrefix}${acc}` });\n }\n return out;\n }\n\n if (props.multiStorageRoot) {\n // Global \"/\" crumb — clicking it pops back to the storage picker\n // (FileExplorer treats the empty string as the virtual root).\n out.push({ label: '/', adapterPath: '' });\n if (props.adapter) {\n // Storage segment — wire form `<adapter>://` lands at storage\n // root regardless of where we are now.\n out.push({ label: props.rootLabel || props.adapter, adapterPath: adapterPrefix });\n }\n } else {\n // Single-storage mode: the storage name IS the root, no \"/\"\n // above it.\n out.push({\n label: props.rootLabel || props.adapter,\n adapterPath: adapterPrefix,\n });\n }\n\n let acc = '';\n for (const part of parts) {\n acc = acc ? `${acc}/${part}` : part;\n const label = part === '.trash' ? t('node.trash') : part;\n out.push({ label, adapterPath: `${adapterPrefix}${acc}` });\n }\n return out;\n});\n\nfunction onClick(crumb: Crumb) {\n emit('navigate', crumb.adapterPath);\n}\n\nfunction onContext(ev: MouseEvent, crumb: Crumb) {\n ev.preventDefault();\n ev.stopPropagation();\n emit('crumb-context', {\n x: ev.clientX,\n y: ev.clientY,\n adapterPath: crumb.adapterPath,\n label: crumb.label,\n });\n}\n\nfunction onCrumbDragOver(ev: DragEvent) {\n if (!ev.dataTransfer?.types.includes('application/x-brf-files')) return;\n ev.preventDefault();\n ev.stopPropagation();\n if (ev.dataTransfer) ev.dataTransfer.dropEffect = 'move';\n}\n\nfunction onCrumbDrop(ev: DragEvent, crumb: Crumb) {\n if (!ev.dataTransfer?.types.includes('application/x-brf-files')) return;\n ev.preventDefault();\n ev.stopPropagation();\n emit('crumb-drop', crumb.adapterPath, ev);\n}\n\nconst editing = ref(false);\nconst pathDraft = ref('');\nconst pathInput = ref<HTMLInputElement | null>(null);\n\nfunction startEdit() {\n const adapterPrefix = `${props.adapter}://`;\n const rel = props.dirname.startsWith(adapterPrefix)\n ? props.dirname.slice(adapterPrefix.length)\n : props.dirname;\n // Confined: edit relative to the root folder — `/` is the root, `/sub` below.\n if (props.rootPath) {\n const floor = confinedRel.value;\n const cur = rel.replace(/^\\/+|\\/+$/g, '');\n const below = floor && (cur === floor || cur.startsWith(floor + '/'))\n ? cur.slice(floor.length).replace(/^\\/+/, '')\n : '';\n pathDraft.value = below ? `/${below}` : '/';\n editing.value = true;\n void nextTick(() => {\n pathInput.value?.focus();\n pathInput.value?.select();\n });\n return;\n }\n // Multi-storage: show `/<storage>/<rel>` so the user can edit the\n // whole tree (`/main/foo`, `/s3-test/example`, just `/` for root).\n if (props.multiStorageRoot) {\n if (!props.adapter) {\n pathDraft.value = '/';\n } else {\n const trimmed = rel.replace(/^\\/+|\\/+$/g, '');\n pathDraft.value = trimmed\n ? `/${props.adapter}/${trimmed}`\n : `/${props.adapter}`;\n }\n } else {\n pathDraft.value = rel;\n }\n editing.value = true;\n void nextTick(() => {\n pathInput.value?.focus();\n pathInput.value?.select();\n });\n}\n\nfunction submitPath() {\n const raw = pathDraft.value.trim();\n editing.value = false;\n\n // Confined: the typed path is relative to the root folder; prepend the floor.\n if (props.rootPath) {\n const sub = raw.replace(/^\\/+|\\/+$/g, '');\n const floor = confinedRel.value;\n const rel = sub ? (floor ? `${floor}/${sub}` : sub) : floor;\n emit('navigate', rel ? `${props.adapter}://${rel}` : `${props.adapter}://`);\n return;\n }\n\n if (props.multiStorageRoot) {\n // Strip leading/trailing slashes. First segment = storage.\n const clean = raw.replace(/^\\/+|\\/+$/g, '');\n if (!clean) {\n // navigate to global root by emitting empty wire path; the\n // FileExplorer treats it as virtual storage list.\n emit('navigate', '');\n return;\n }\n const slash = clean.indexOf('/');\n const adapter = slash === -1 ? clean : clean.slice(0, slash);\n const rel = slash === -1 ? '' : clean.slice(slash + 1);\n emit('navigate', rel ? `${adapter}://${rel}` : `${adapter}://`);\n return;\n }\n\n const v = raw.replace(/^\\/+|\\/+$/g, '');\n if (!v) return;\n emit('navigate', `${props.adapter}://${v}`);\n}\n\nfunction cancelEdit() {\n editing.value = false;\n}\n</script>\n\n<template>\n <nav class=\"fe-breadcrumb\" aria-label=\"Breadcrumb\">\n <template v-if=\"!editing\">\n <button\n v-for=\"(c, i) in crumbs\"\n :key=\"c.adapterPath\"\n class=\"fe-breadcrumb__crumb\"\n :class=\"{ 'is-last': i === crumbs.length - 1 }\"\n type=\"button\"\n :aria-current=\"i === crumbs.length - 1 ? 'page' : undefined\"\n @click=\"onClick(c)\"\n @contextmenu=\"onContext($event, c)\"\n @dragover=\"onCrumbDragOver\"\n @drop=\"onCrumbDrop($event, c)\"\n >\n <span>{{ c.label }}</span>\n <span v-if=\"i < crumbs.length - 1\" class=\"fe-breadcrumb__sep\" aria-hidden=\"true\">›</span>\n </button>\n <button\n type=\"button\"\n class=\"fe-breadcrumb__edit\"\n :title=\"t('breadcrumb.go_to_path')\"\n :aria-label=\"t('breadcrumb.go_to_path')\"\n @click=\"startEdit\"\n >✏</button>\n </template>\n <template v-else>\n <input\n ref=\"pathInput\"\n v-model=\"pathDraft\"\n type=\"text\"\n class=\"fe-breadcrumb__input\"\n :placeholder=\"t('breadcrumb.path_placeholder')\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n @keydown.enter.prevent=\"submitPath\"\n @keydown.escape.prevent=\"cancelEdit\"\n @blur=\"cancelEdit\"\n />\n </template>\n </nav>\n</template>\n","<script setup lang=\"ts\">\n/**\n * StarButton — toggleable star indicator for a node.\n *\n * Backed by the `node_meta key=\"starred\"` server-side row (see\n * `POST /api/files/manager/star`). Optimistic update — flips the local\n * state immediately and rolls back on API error.\n */\nimport { ref, watch } from 'vue';\n\nconst props = defineProps<{\n starred: boolean;\n nodeId: number;\n apiBase?: string;\n /** Auth header builder injected by the parent file explorer. */\n authHeaders?: () => Record<string, string> | Promise<Record<string, string>>;\n /** Compact mode for grid view (no label, just the icon). */\n compact?: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: 'change', value: boolean): void;\n (e: 'error', message: string): void;\n}>();\n\nconst local = ref(props.starred);\nwatch(() => props.starred, (v) => { local.value = v; });\n\nasync function toggle() {\n const next = !local.value;\n local.value = next; // optimistic\n try {\n const headers = {\n 'Content-Type': 'application/json',\n ...(await (props.authHeaders ?? (() => ({})))()),\n };\n const base = props.apiBase ?? '';\n const res = await fetch(`${base}/api/files/manager/star`, {\n method: 'POST',\n headers,\n credentials: 'include',\n body: JSON.stringify({ node_id: props.nodeId, starred: next }),\n });\n if (!res.ok) throw new Error(`star toggle failed: ${res.status}`);\n emit('change', next);\n } catch (err) {\n local.value = !next; // rollback\n emit('error', err instanceof Error ? err.message : String(err));\n }\n}\n</script>\n\n<template>\n <button\n type=\"button\"\n class=\"filex-star-btn\"\n :class=\"{ 'is-starred': local, 'is-compact': compact }\"\n :aria-pressed=\"local\"\n :title=\"local ? 'Unstar' : 'Star'\"\n @click.stop=\"toggle\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" aria-hidden=\"true\">\n <path\n :fill=\"local ? 'currentColor' : 'none'\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linejoin=\"round\"\n d=\"M12 2.5l3.09 6.26 6.91 1-5 4.87 1.18 6.87L12 18.27l-6.18 3.23L7 14.63 2 9.76l6.91-1z\"\n />\n </svg>\n <span v-if=\"!compact\" class=\"filex-star-label\">{{ local ? 'Starred' : 'Star' }}</span>\n </button>\n</template>\n\n<style scoped>\n.filex-star-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: transparent;\n border: 1px solid transparent;\n border-radius: 6px;\n padding: 4px 8px;\n color: var(--filex-text-muted, #9ca3af);\n cursor: pointer;\n transition: color 120ms, background 120ms;\n}\n.filex-star-btn:hover {\n color: var(--filex-accent-amber, #f59e0b);\n background: var(--filex-bg-soft, rgba(0, 0, 0, 0.04));\n}\n.filex-star-btn.is-starred {\n color: var(--filex-accent-amber, #f59e0b);\n}\n.filex-star-btn.is-compact {\n padding: 4px;\n}\n.filex-star-label {\n font-size: 13px;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * ListView — tabular layout (name / size / modified).\n *\n * Selection + context menu + double-click open are caller-owned — we\n * just emit the events and let FileExplorer.vue handle them uniformly\n * across List and Grid.\n */\nimport { computed } from 'vue';\nimport type { FileNode } from '../types/FileNode';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\nimport StarButton from './StarButton.vue';\n\nconst props = defineProps<{\n files: FileNode[];\n selected: Set<string>;\n /** Paths that were cut → dim them so the user sees the pending move. */\n clipped?: Set<string>;\n /**\n * Show each row's parent directory under the basename. Caller flips\n * this on while a search filter is active so the user can tell\n * `invoice.pdf` (in 2024/) apart from `invoice.pdf` (in 2025/) when\n * both match the same query.\n */\n showParentPath?: boolean;\n locale: LocaleCode;\n loading?: boolean;\n /** Set of node IDs flagged starred by the user — render an inline\n * filled star indicator and let the user toggle it from the row. */\n starredIds?: Set<number>;\n /** Backend base URL + auth header builder forwarded to StarButton\n * so it can POST /api/files/manager/star on click. Optional —\n * embedders without auth wire-up pass nothing and the star column\n * hides itself. */\n apiBase?: string;\n authHeaders?: () => Record<string, string> | Promise<Record<string, string>>;\n}>();\n\nconst emit = defineEmits<{\n (e: 'click-row', node: FileNode, mod: { ctrl: boolean; shift: boolean }): void;\n (e: 'dbl-row', node: FileNode): void;\n (e: 'context-row', node: FileNode, ev: MouseEvent): void;\n (e: 'item-drag-start', node: FileNode, ev: DragEvent): void;\n (e: 'item-drop-into', target: FileNode, ev: DragEvent): void;\n (e: 'star-change', node: FileNode, value: boolean): void;\n}>();\n\nconst { t, formatSize, nodeDisplayName } = useLocale(() => props.locale);\n\nfunction isSelected(n: FileNode): boolean {\n return props.selected.has(n.path);\n}\n\nfunction onRowClick(n: FileNode, ev: MouseEvent) {\n emit('click-row', n, { ctrl: ev.ctrlKey || ev.metaKey, shift: ev.shiftKey });\n}\n\nfunction onRowDbl(n: FileNode) {\n emit('dbl-row', n);\n}\n\nfunction onRowCtx(n: FileNode, ev: MouseEvent) {\n // Stop bubbling so the root `@contextmenu` handler doesn't fire and\n // clear the selection we just set.\n ev.preventDefault();\n ev.stopPropagation();\n emit('context-row', n, ev);\n}\n\nfunction onItemDragStart(n: FileNode, ev: DragEvent) {\n emit('item-drag-start', n, ev);\n}\n\nfunction onItemDragOver(n: FileNode, ev: DragEvent) {\n if (n.type !== 'dir') return;\n if (!ev.dataTransfer?.types.includes('application/x-brf-files')) return;\n ev.preventDefault();\n ev.stopPropagation();\n if (ev.dataTransfer) ev.dataTransfer.dropEffect = 'move';\n}\n\nfunction onItemDrop(n: FileNode, ev: DragEvent) {\n if (n.type !== 'dir') return;\n if (!ev.dataTransfer?.types.includes('application/x-brf-files')) return;\n ev.preventDefault();\n ev.stopPropagation();\n emit('item-drop-into', n, ev);\n}\n\nlet pressTimer: ReturnType<typeof setTimeout> | undefined;\nlet pressTarget: FileNode | null = null;\n\nfunction onTouchStart(n: FileNode, ev: TouchEvent) {\n pressTarget = n;\n if (pressTimer) clearTimeout(pressTimer);\n pressTimer = setTimeout(() => {\n if (pressTarget) {\n const t0 = ev.touches[0];\n emit('context-row', pressTarget, {\n clientX: t0.clientX,\n clientY: t0.clientY,\n preventDefault: () => {},\n } as unknown as MouseEvent);\n }\n }, 500);\n}\n\nfunction cancelPress() {\n if (pressTimer) clearTimeout(pressTimer);\n pressTarget = null;\n}\n\nfunction iconFor(n: FileNode): string {\n if (n.mime_type === 'inode/storage') return '💾';\n if (n.type === 'dir') return '📁';\n const e = (n.extension || '').toLowerCase();\n if (['jpg', 'jpeg', 'png', 'webp', 'gif', 'bmp', 'avif', 'heic', 'svg'].includes(e)) return '🖼';\n if (['mp4', 'webm', 'mov', 'mkv', 'avi', 'ogv', 'm4v'].includes(e)) return '🎞';\n if (['mp3', 'wav', 'flac', 'ogg', 'm4a', 'aac', 'opus'].includes(e)) return '🎵';\n if (e === 'pdf') return '📕';\n if (['doc', 'docx', 'odt', 'rtf'].includes(e)) return '📄';\n if (['xls', 'xlsx', 'ods', 'csv'].includes(e)) return '📊';\n if (['ppt', 'pptx', 'odp'].includes(e)) return '📽';\n if (['zip', 'tar', 'gz', 'bz2', '7z', 'rar'].includes(e)) return '🗜';\n if (['txt', 'md', 'log', 'json', 'yml', 'yaml', 'xml'].includes(e)) return '📝';\n return '📎';\n}\n\nfunction displayDate(ms: number | undefined): string {\n if (!ms) return '—';\n const d = new Date(ms * (ms < 1e12 ? 1000 : 1));\n return d.toLocaleString();\n}\n\nfunction parentDir(path: string): string {\n const stripped = path.replace(/^[a-z][a-z0-9+.-]*:\\/\\//i, '');\n const idx = stripped.lastIndexOf('/');\n if (idx === -1) return '';\n return stripped.slice(0, idx);\n}\n\nconst rows = computed(() => props.files);\n</script>\n\n<template>\n <div class=\"fe-list\" :class=\"{ 'is-loading': loading, 'has-star-col': !!apiBase || apiBase === '' }\">\n <div class=\"fe-list__head\" role=\"row\">\n <div class=\"fe-list__col fe-list__col--star\" role=\"columnheader\" aria-label=\"Star\"></div>\n <div class=\"fe-list__col fe-list__col--name\" role=\"columnheader\">{{ t('col.name') }}</div>\n <div class=\"fe-list__col fe-list__col--size\" role=\"columnheader\">{{ t('col.size') }}</div>\n <div class=\"fe-list__col fe-list__col--mod\" role=\"columnheader\">{{ t('col.modified') }}</div>\n </div>\n <div class=\"fe-list__body\" role=\"rowgroup\">\n <div\n v-for=\"n in rows\"\n :key=\"n.path\"\n class=\"fe-list__row\"\n :class=\"{\n 'is-selected': isSelected(n),\n 'is-dir': n.type === 'dir',\n 'is-trash': n.trashed,\n 'is-clipped': clipped?.has(n.path),\n }\"\n role=\"row\"\n tabindex=\"0\"\n draggable=\"true\"\n @click=\"onRowClick(n, $event)\"\n @dblclick=\"onRowDbl(n)\"\n @contextmenu=\"onRowCtx(n, $event)\"\n @dragstart=\"onItemDragStart(n, $event)\"\n @dragover=\"onItemDragOver(n, $event)\"\n @drop=\"onItemDrop(n, $event)\"\n @touchstart.passive=\"onTouchStart(n, $event)\"\n @touchend=\"cancelPress\"\n @touchmove=\"cancelPress\"\n >\n <div class=\"fe-list__col fe-list__col--star\" @click.stop>\n <StarButton\n v-if=\"typeof n.id === 'number' && n.type === 'file'\"\n :starred=\"!!starredIds?.has(n.id)\"\n :node-id=\"n.id\"\n :api-base=\"apiBase\"\n :auth-headers=\"authHeaders\"\n compact\n @change=\"(val: boolean) => emit('star-change', n, val)\"\n />\n </div>\n <div class=\"fe-list__col fe-list__col--name\">\n <span class=\"fe-list__icon\" aria-hidden=\"true\">{{ iconFor(n) }}</span>\n <div class=\"fe-list__name-wrap\">\n <span class=\"fe-list__name\" :title=\"n.basename\">{{ nodeDisplayName(n) }}</span>\n <span\n v-if=\"showParentPath\"\n class=\"fe-list__parent\"\n :title=\"parentDir(n.path)\"\n >{{ parentDir(n.path) || '—' }}</span>\n </div>\n </div>\n <div class=\"fe-list__col fe-list__col--size\">\n {{ formatSize(n.size) }}\n </div>\n <div class=\"fe-list__col fe-list__col--mod\">\n {{ displayDate(n.last_modified) }}\n </div>\n </div>\n <div v-if=\"!loading && rows.length === 0\" class=\"fe-list__empty\">\n {{ t('empty.folder') }}\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n/**\n * GridView — card grid. Thumbnails preferred, fall back to icon.\n */\nimport type { FileNode } from '../types/FileNode';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\n\nconst props = defineProps<{\n files: FileNode[];\n selected: Set<string>;\n clipped?: Set<string>;\n showParentPath?: boolean;\n locale: LocaleCode;\n loading?: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: 'click-card', node: FileNode, mod: { ctrl: boolean; shift: boolean }): void;\n (e: 'dbl-card', node: FileNode): void;\n (e: 'context-card', node: FileNode, ev: MouseEvent): void;\n (e: 'item-drag-start', node: FileNode, ev: DragEvent): void;\n (e: 'item-drop-into', target: FileNode, ev: DragEvent): void;\n}>();\n\nconst { t, formatSize, nodeDisplayName } = useLocale(() => props.locale);\n\nfunction isSelected(n: FileNode): boolean {\n return props.selected.has(n.path);\n}\n\nfunction onClick(n: FileNode, ev: MouseEvent) {\n emit('click-card', n, { ctrl: ev.ctrlKey || ev.metaKey, shift: ev.shiftKey });\n}\n\nfunction onDbl(n: FileNode) {\n emit('dbl-card', n);\n}\n\nfunction onCtx(n: FileNode, ev: MouseEvent) {\n ev.preventDefault();\n ev.stopPropagation();\n emit('context-card', n, ev);\n}\n\nfunction onItemDragStart(n: FileNode, ev: DragEvent) {\n emit('item-drag-start', n, ev);\n}\n\nfunction onItemDragOver(n: FileNode, ev: DragEvent) {\n if (n.type !== 'dir') return;\n if (!ev.dataTransfer?.types.includes('application/x-brf-files')) return;\n ev.preventDefault();\n ev.stopPropagation();\n if (ev.dataTransfer) ev.dataTransfer.dropEffect = 'move';\n}\n\nfunction onItemDrop(n: FileNode, ev: DragEvent) {\n if (n.type !== 'dir') return;\n if (!ev.dataTransfer?.types.includes('application/x-brf-files')) return;\n ev.preventDefault();\n ev.stopPropagation();\n emit('item-drop-into', n, ev);\n}\n\nlet pressTimer: ReturnType<typeof setTimeout> | undefined;\nlet pressTarget: FileNode | null = null;\nfunction onTouchStart(n: FileNode, ev: TouchEvent) {\n pressTarget = n;\n if (pressTimer) clearTimeout(pressTimer);\n pressTimer = setTimeout(() => {\n if (pressTarget) {\n const t0 = ev.touches[0];\n emit('context-card', pressTarget, {\n clientX: t0.clientX,\n clientY: t0.clientY,\n preventDefault: () => {},\n } as unknown as MouseEvent);\n }\n }, 500);\n}\nfunction cancelPress() {\n if (pressTimer) clearTimeout(pressTimer);\n pressTarget = null;\n}\n\nfunction parentDir(path: string): string {\n const stripped = path.replace(/^[a-z][a-z0-9+.-]*:\\/\\//i, '');\n const idx = stripped.lastIndexOf('/');\n if (idx === -1) return '';\n return stripped.slice(0, idx);\n}\n\nfunction iconFor(n: FileNode): string {\n if (n.mime_type === 'inode/storage') return '💾';\n if (n.type === 'dir') return '📁';\n const e = (n.extension || '').toLowerCase();\n if (['jpg', 'jpeg', 'png', 'webp', 'gif', 'bmp', 'svg'].includes(e)) return '🖼';\n if (['mp4', 'webm', 'mov', 'mkv'].includes(e)) return '🎞';\n if (['mp3', 'wav', 'flac', 'ogg'].includes(e)) return '🎵';\n if (e === 'pdf') return '📕';\n if (['doc', 'docx', 'odt'].includes(e)) return '📄';\n if (['xls', 'xlsx', 'csv'].includes(e)) return '📊';\n if (['ppt', 'pptx'].includes(e)) return '📽';\n if (['zip', 'tar', 'gz', '7z'].includes(e)) return '🗜';\n return '📎';\n}\n</script>\n\n<template>\n <div class=\"fe-grid\" :class=\"{ 'is-loading': loading }\">\n <div\n v-for=\"n in files\"\n :key=\"n.path\"\n class=\"fe-grid__card\"\n :class=\"{\n 'is-selected': isSelected(n),\n 'is-dir': n.type === 'dir',\n 'is-trash': n.trashed,\n 'is-clipped': clipped?.has(n.path),\n }\"\n tabindex=\"0\"\n draggable=\"true\"\n @click=\"onClick(n, $event)\"\n @dblclick=\"onDbl(n)\"\n @contextmenu=\"onCtx(n, $event)\"\n @dragstart=\"onItemDragStart(n, $event)\"\n @dragover=\"onItemDragOver(n, $event)\"\n @drop=\"onItemDrop(n, $event)\"\n @touchstart.passive=\"onTouchStart(n, $event)\"\n @touchend=\"cancelPress\"\n @touchmove=\"cancelPress\"\n >\n <div class=\"fe-grid__thumb\">\n <!--\n draggable=\"false\" — HTML5 image drag dataTransfer adds 'Files'\n MIME, which trips the parent's upload handler; without this\n the user dragging an item with a thumbnail re-uploads it.\n Parent card stays draggable=true so internal move works.\n -->\n <img\n v-if=\"n.thumb_url\"\n :src=\"n.thumb_url\"\n :alt=\"n.basename\"\n loading=\"lazy\"\n draggable=\"false\"\n />\n <span v-else class=\"fe-grid__icon\">{{ iconFor(n) }}</span>\n </div>\n <div class=\"fe-grid__label\" :title=\"n.basename\">\n {{ nodeDisplayName(n) }}\n </div>\n <div\n v-if=\"showParentPath\"\n class=\"fe-grid__parent\"\n :title=\"parentDir(n.path)\"\n >{{ parentDir(n.path) || '—' }}</div>\n <div class=\"fe-grid__meta\">\n {{ formatSize(n.size) }}\n </div>\n </div>\n <div v-if=\"!loading && files.length === 0\" class=\"fe-grid__empty\">\n {{ t('empty.folder') }}\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n/**\n * ContextMenu — Teleport-based menu.\n *\n * Teleported under <body> so no parent (Ionic <ion-page>, Filament's\n * transformed flex containers, panel sidebars, …) can shift the\n * `position: fixed` backdrop off-window.\n */\nimport { ref, computed, onMounted, onBeforeUnmount, nextTick } from 'vue';\nimport type { LocaleCode, ThemeMode } from '../types/ExplorerConfig';\nimport type { FileNode } from '../types/FileNode';\nimport { useLocale } from '../composables/useLocale';\n\nexport interface ContextAction {\n key: string;\n label: string;\n icon?: string;\n danger?: boolean;\n disabled?: boolean;\n hidden?: boolean;\n divider?: boolean;\n}\n\nconst props = defineProps<{\n locale: LocaleCode;\n actions: ContextAction[];\n /**\n * Resolved theme. Teleported into <body> we lose the `.fe` parent\n * that scopes CSS vars, so we tag the backdrop with the current\n * theme so variables.css can re-apply dark overrides outside the\n * explorer tree.\n */\n theme?: ThemeMode;\n}>();\n\nconst emit = defineEmits<{\n (e: 'select', action: ContextAction, target: FileNode[]): void;\n}>();\n\nvoid useLocale(() => props.locale); // eager-instantiate t/lookup so future templates can reuse\n\nconst open = ref(false);\nconst x = ref(0);\nconst y = ref(0);\nconst targetNodes = ref<FileNode[]>([]);\nconst menuEl = ref<HTMLElement | null>(null);\n\nasync function show(ev: { clientX: number; clientY: number }, nodes: FileNode[]) {\n open.value = true;\n x.value = ev.clientX;\n y.value = ev.clientY;\n targetNodes.value = nodes;\n // After the menu renders, clamp it inside the viewport so a click near the\n // bottom/right edge doesn't push the menu off-screen (it opens down-right\n // from the cursor by default).\n await nextTick();\n clampToViewport();\n}\n\nfunction clampToViewport() {\n const el = menuEl.value;\n if (!el || typeof window === 'undefined') return;\n const rect = el.getBoundingClientRect();\n const margin = 8;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n if (y.value + rect.height > vh - margin) {\n y.value = Math.max(margin, vh - rect.height - margin);\n }\n if (x.value + rect.width > vw - margin) {\n x.value = Math.max(margin, vw - rect.width - margin);\n }\n}\n\nfunction hide() {\n open.value = false;\n}\n\nfunction pick(a: ContextAction) {\n if (a.disabled) return;\n emit('select', a, targetNodes.value);\n hide();\n}\n\nfunction onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') hide();\n}\n\nconst visibleActions = computed(() => props.actions.filter((a) => !a.hidden));\n\nconst prefersDark = ref(false);\nlet mq: MediaQueryList | undefined;\nfunction syncPrefersDark(e?: MediaQueryListEvent | MediaQueryList) {\n prefersDark.value = !!(e && 'matches' in e && e.matches);\n}\nonMounted(() => {\n if (typeof window === 'undefined') return;\n mq = window.matchMedia('(prefers-color-scheme: dark)');\n syncPrefersDark(mq);\n mq.addEventListener?.('change', syncPrefersDark);\n});\nonBeforeUnmount(() => {\n mq?.removeEventListener?.('change', syncPrefersDark);\n});\n\nconst themeClass = computed(() => {\n const t = props.theme || 'auto';\n return `fe-ctx-backdrop--theme-${t}`;\n});\n\ndefineExpose({ show, hide });\n</script>\n\n<template>\n <Teleport to=\"body\">\n <transition name=\"fe-ctx\">\n <div\n v-if=\"open\"\n class=\"fe-ctx-backdrop\"\n :class=\"themeClass\"\n :data-prefers-dark=\"prefersDark ? '1' : '0'\"\n @click=\"hide\"\n @contextmenu.prevent=\"hide\"\n @keydown=\"onKey\"\n >\n <div\n ref=\"menuEl\"\n class=\"fe-ctx\"\n role=\"menu\"\n :style=\"{ top: y + 'px', left: x + 'px' }\"\n @click.stop\n >\n <template v-for=\"(a, i) in visibleActions\" :key=\"a.key || i\">\n <div v-if=\"a.divider\" class=\"fe-ctx__sep\" />\n <button\n v-else\n type=\"button\"\n class=\"fe-ctx__item\"\n :class=\"{ 'is-danger': a.danger, 'is-disabled': a.disabled }\"\n :disabled=\"a.disabled\"\n role=\"menuitem\"\n @click=\"pick(a)\"\n >\n <span v-if=\"a.icon\" class=\"fe-ctx__icon\" aria-hidden=\"true\">{{ a.icon }}</span>\n <span class=\"fe-ctx__label\">{{ a.label }}</span>\n </button>\n </template>\n </div>\n </div>\n </transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\n/**\n * UploadProgress — floating footer showing active + recently-done uploads.\n */\nimport { computed } from 'vue';\nimport type { UploadJob } from '../composables/useUploadChunked';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\n\nconst props = defineProps<{\n jobs: UploadJob[];\n locale: LocaleCode;\n}>();\n\nconst emit = defineEmits<{\n (e: 'cancel', job: UploadJob): void;\n (e: 'dismiss', job: UploadJob): void;\n}>();\n\nconst { t, formatSize } = useLocale(() => props.locale);\n\nconst visible = computed(() => props.jobs);\n\nfunction statusLabel(j: UploadJob): string {\n switch (j.status) {\n case 'done':\n return t('upload.done');\n case 'error':\n return `${t('upload.error')}: ${j.error ?? ''}`;\n case 'aborted':\n return t('upload.aborted');\n default:\n return t('upload.progress');\n }\n}\n</script>\n\n<template>\n <transition name=\"fe-upload-slide\">\n <div v-if=\"visible.length > 0\" class=\"fe-upload\">\n <div class=\"fe-upload__header\">\n <strong>{{ t('upload.progress') }}</strong>\n <span class=\"fe-upload__count\">{{ visible.length }}</span>\n </div>\n <ul class=\"fe-upload__list\">\n <li\n v-for=\"j in visible\"\n :key=\"j.id\"\n class=\"fe-upload__item\"\n :class=\"`is-${j.status}`\"\n >\n <div class=\"fe-upload__name\" :title=\"j.file.name\">{{ j.file.name }}</div>\n <div class=\"fe-upload__bar\" :aria-valuenow=\"j.percent\" role=\"progressbar\">\n <div class=\"fe-upload__bar-fill\" :style=\"{ width: j.percent + '%' }\" />\n </div>\n <div class=\"fe-upload__meta\">\n <span>{{ statusLabel(j) }}</span>\n <span>{{ formatSize(j.uploadedBytes) }} / {{ formatSize(j.totalBytes) }}</span>\n <button\n v-if=\"j.status === 'uploading' || j.status === 'initializing'\"\n type=\"button\"\n class=\"fe-upload__cancel\"\n @click=\"emit('cancel', j)\"\n >\n {{ t('upload.cancel') }}\n </button>\n <button\n v-else\n type=\"button\"\n class=\"fe-upload__cancel\"\n @click=\"emit('dismiss', j)\"\n >×</button>\n </div>\n </li>\n </ul>\n </div>\n </transition>\n</template>\n","<script setup lang=\"ts\">\n/**\n * PendingOpsTray — bottom-left toast list for queued copy/move/delete.\n *\n * Sits next to UploadProgress visually (offset to its left when both\n * are open). Each row shows op type + a progress bar driven by\n * `progress_done / progress_total`. Terminal rows linger for a moment\n * (RETAIN_MS in usePendingOps) so the final state is visible before\n * they fade out.\n */\nimport { computed } from 'vue';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport type { PendingOp } from '../composables/usePendingOps';\nimport { useLocale } from '../composables/useLocale';\n\nconst props = defineProps<{\n ops: PendingOp[];\n locale: LocaleCode;\n}>();\n\nconst emit = defineEmits<{\n (e: 'dismiss', id: number): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\n\nconst sorted = computed(() => [...props.ops].sort((a, b) => b.id - a.id));\n\nfunction percent(op: PendingOp): number {\n if (op.status === 'done') return 100;\n if (op.progress_total <= 0) return 0;\n return Math.min(100, Math.round((op.progress_done / op.progress_total) * 100));\n}\n\nfunction statusClass(op: PendingOp): string {\n if (op.status === 'done') return 'is-done';\n if (op.status === 'error') return 'is-error';\n return '';\n}\n\nfunction summary(op: PendingOp): string {\n const verb =\n op.op_type === 'copy'\n ? t('ops.copy')\n : op.op_type === 'move'\n ? t('ops.move')\n : t('ops.delete');\n if (op.status === 'pending') return `${verb} (${t('ops.queued')})`;\n if (op.status === 'running') return `${verb} ${op.progress_done}/${op.progress_total}`;\n if (op.status === 'done') return `${verb} ${t('ops.done')} (${op.progress_total})`;\n if (op.status === 'error') return `${verb} ${t('ops.error')}`;\n return verb;\n}\n</script>\n\n<template>\n <transition-group\n v-if=\"sorted.length > 0\"\n name=\"fe-ops-slide\"\n tag=\"div\"\n class=\"fe-ops\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <div\n v-for=\"op in sorted\"\n :key=\"op.id\"\n class=\"fe-ops__item\"\n :class=\"statusClass(op)\"\n >\n <div class=\"fe-ops__row\">\n <span class=\"fe-ops__title\" :title=\"op.target_path || op.source_dir || ''\">\n {{ summary(op) }}\n </span>\n <button\n v-if=\"op.status === 'done' || op.status === 'error'\"\n type=\"button\"\n class=\"fe-ops__dismiss\"\n aria-label=\"Dismiss\"\n @click=\"emit('dismiss', op.id)\"\n >×</button>\n </div>\n <div class=\"fe-ops__bar\">\n <div class=\"fe-ops__bar-fill\" :style=\"{ width: percent(op) + '%' }\" />\n </div>\n <div v-if=\"op.status === 'error' && op.error_message\" class=\"fe-ops__error\">\n {{ op.error_message }}\n </div>\n </div>\n </transition-group>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Modal — tiny headless wrapper. Backdrop + centered card + ESC + autofocus.\n */\nimport { watch, onBeforeUnmount, ref } from 'vue';\n\nconst props = defineProps<{\n open: boolean;\n title?: string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n closeOnBackdrop?: boolean;\n /** When true, drop the dialog chrome (backdrop tint, header, footer,\n * centered card with border-radius) and render the slot full-bleed.\n * Used by the standalone /files/edit route where the browser tab IS\n * the container — a modal frame on top of it just steals real estate\n * from the editor. ESC + emit('close') still wire through so the\n * parent route can window.close() the tab. */\n chromeless?: boolean;\n /** Explicit theme. When set the modal stamps the appropriate\n * `.fe--theme-{light,dark}` class on its `.fe` backdrop so the CSS\n * variable cascade matches the host shell regardless of OS\n * preference (Modal is a portal-shaped descendant of `<body>`\n * rather than a child of the parent component, so plain DOM\n * inheritance isn't always enough). */\n theme?: 'light' | 'dark' | 'auto';\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n}>();\n\nconst cardEl = ref<HTMLElement | null>(null);\n\nwatch(\n () => props.open,\n (v) => {\n if (v) {\n document.addEventListener('keydown', onKey);\n setTimeout(() => {\n const focusable = cardEl.value?.querySelector<HTMLElement>(\n 'input,select,textarea,button,[tabindex]:not([tabindex=\"-1\"])',\n );\n focusable?.focus();\n }, 30);\n } else {\n document.removeEventListener('keydown', onKey);\n }\n },\n);\n\nonBeforeUnmount(() => document.removeEventListener('keydown', onKey));\n\nfunction onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') emit('close');\n}\n\nfunction onBackdrop() {\n if (props.closeOnBackdrop !== false) emit('close');\n}\n</script>\n\n<template>\n <transition name=\"fe-modal\">\n <div\n v-if=\"open\"\n class=\"fe fe-modal__backdrop\"\n :class=\"[\n { 'fe-modal__backdrop--chromeless': chromeless },\n theme === 'light' ? 'fe--theme-light' : '',\n theme === 'dark' ? 'fe--theme-dark' : '',\n ]\"\n role=\"presentation\"\n @click=\"onBackdrop\"\n >\n <div\n ref=\"cardEl\"\n class=\"fe-modal__card\"\n :class=\"[\n `fe-modal__card--${size || 'md'}`,\n chromeless && 'fe-modal__card--chromeless',\n ]\"\n role=\"dialog\"\n aria-modal=\"true\"\n @click.stop\n >\n <header v-if=\"title && !chromeless\" class=\"fe-modal__head\">\n <h2 class=\"fe-modal__title\">{{ title }}</h2>\n <button\n type=\"button\"\n class=\"fe-modal__close\"\n aria-label=\"Close\"\n @click=\"emit('close')\"\n >×</button>\n </header>\n <div class=\"fe-modal__body\">\n <slot />\n </div>\n <footer v-if=\"$slots.actions && !chromeless\" class=\"fe-modal__actions\">\n <slot name=\"actions\" />\n </footer>\n </div>\n </div>\n </transition>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\nimport Modal from './Modal.vue';\n\nconst props = defineProps<{\n open: boolean;\n locale: LocaleCode;\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n (e: 'submit', name: string): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\nconst name = ref('');\nconst err = ref<string | null>(null);\n\nwatch(() => props.open, (v) => {\n if (v) {\n name.value = '';\n err.value = null;\n }\n});\n\nfunction submit() {\n const clean = name.value.trim();\n if (!clean) {\n err.value = t('modal.newfolder.placeholder');\n return;\n }\n if (/[\\\\/]/.test(clean) || clean === '.' || clean === '..') {\n err.value = 'Geçersiz karakter';\n return;\n }\n emit('submit', clean);\n}\n</script>\n\n<template>\n <Modal :open=\"open\" :title=\"t('modal.newfolder.title')\" size=\"sm\" @close=\"emit('close')\">\n <form @submit.prevent=\"submit\">\n <input\n v-model=\"name\"\n type=\"text\"\n class=\"fe-input\"\n :placeholder=\"t('modal.newfolder.placeholder')\"\n autocomplete=\"off\"\n @keydown.enter.prevent=\"submit\"\n />\n <p v-if=\"err\" class=\"fe-form__error\">{{ err }}</p>\n </form>\n <template #actions>\n <button type=\"button\" class=\"fe-btn\" @click=\"emit('close')\">\n {{ t('modal.newfolder.cancel') }}\n </button>\n <button type=\"button\" class=\"fe-btn fe-btn--primary\" @click=\"submit\">\n {{ t('modal.newfolder.create') }}\n </button>\n </template>\n </Modal>\n</template>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\nimport Modal from './Modal.vue';\n\nconst props = defineProps<{\n open: boolean;\n locale: LocaleCode;\n currentName: string;\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n (e: 'submit', name: string): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\nconst name = ref('');\n\nwatch(\n () => [props.open, props.currentName] as const,\n ([isOpen, cur]) => {\n if (isOpen) {\n name.value = cur;\n }\n },\n);\n\nfunction submit() {\n const clean = name.value.trim();\n if (!clean) return;\n if (/[\\\\/]/.test(clean) || clean === '.' || clean === '..') return;\n emit('submit', clean);\n}\n</script>\n\n<template>\n <Modal :open=\"open\" :title=\"t('modal.rename.title')\" size=\"sm\" @close=\"emit('close')\">\n <form @submit.prevent=\"submit\">\n <input\n v-model=\"name\"\n type=\"text\"\n class=\"fe-input\"\n autocomplete=\"off\"\n @keydown.enter.prevent=\"submit\"\n />\n </form>\n <template #actions>\n <button type=\"button\" class=\"fe-btn\" @click=\"emit('close')\">\n {{ t('modal.rename.cancel') }}\n </button>\n <button type=\"button\" class=\"fe-btn fe-btn--primary\" @click=\"submit\">\n {{ t('modal.rename.save') }}\n </button>\n </template>\n </Modal>\n</template>\n","<script setup lang=\"ts\">\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\nimport Modal from './Modal.vue';\n\nconst props = defineProps<{\n open: boolean;\n locale: LocaleCode;\n count: number;\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n (e: 'confirm'): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\n</script>\n\n<template>\n <Modal :open=\"open\" :title=\"t('modal.delete.title')\" size=\"sm\" @close=\"emit('close')\">\n <p>{{ t('modal.delete.message', { count }) }}</p>\n <template #actions>\n <button type=\"button\" class=\"fe-btn\" @click=\"emit('close')\">\n {{ t('modal.delete.cancel') }}\n </button>\n <button type=\"button\" class=\"fe-btn fe-btn--danger\" @click=\"emit('confirm')\">\n {{ t('modal.delete.confirm') }}\n </button>\n </template>\n </Modal>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport type { ShareInfo } from '../types/FileNode';\nimport { useLocale } from '../composables/useLocale';\nimport Modal from './Modal.vue';\n\nconst props = defineProps<{\n open: boolean;\n locale: LocaleCode;\n share?: (ShareInfo & { url: string; filename?: string }) | null;\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n (\n e: 'submit',\n payload: { password: boolean; expires_at: string | null; max_downloads: number | null },\n ): void;\n (e: 'toast', msg: string): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\n\nconst usePin = ref(false);\nconst expiresAt = ref<string>('');\nconst maxDownloads = ref<string>('');\n\nwatch(() => props.open, (v) => {\n if (v) {\n usePin.value = false;\n expiresAt.value = '';\n maxDownloads.value = '';\n }\n});\n\nfunction submit() {\n emit('submit', {\n password: usePin.value,\n expires_at: expiresAt.value ? new Date(expiresAt.value).toISOString() : null,\n max_downloads: maxDownloads.value ? Number(maxDownloads.value) : null,\n });\n}\n\nasync function copy(value: string, toast: string) {\n try {\n await navigator.clipboard.writeText(value);\n emit('toast', toast);\n } catch {\n /* no-op */\n }\n}\n\n// Wrap a value in single quotes for safe paste into a POSIX shell —\n// embedded single quotes become the standard '\\'' dance.\nfunction shQuote(value: string): string {\n return `'${value.replace(/'/g, `'\\\\''`)}'`;\n}\n\n// One-line curl that downloads the shared file straight onto a server.\n// The PIN (if any) rides in the querystring — HandleDownload accepts\n// ?pin=, and -L follows the 302 to the presigned URL for S3 storages.\nconst cliCommand = computed(() => {\n const sh = props.share;\n if (!sh) return '';\n let url = sh.url;\n if (sh.password_pin) {\n url += (url.includes('?') ? '&' : '?') + 'pin=' + encodeURIComponent(sh.password_pin);\n }\n // Prefer an explicit output name; fall back to the server's\n // Content-Disposition filename (-OJ) when we don't know it.\n const target = sh.filename ? `-o ${shQuote(sh.filename)} ` : '-OJ ';\n return `curl -fSL ${target}${shQuote(url)}`;\n});\n</script>\n\n<template>\n <Modal :open=\"open\" :title=\"t('modal.share.title')\" size=\"md\" @close=\"emit('close')\">\n <template v-if=\"!share\">\n <form class=\"fe-form\" @submit.prevent=\"submit\">\n <label class=\"fe-form__row\">\n <input v-model=\"usePin\" type=\"checkbox\" />\n <span>{{ t('modal.share.pin') }}</span>\n </label>\n <label class=\"fe-form__row fe-form__row--stack\">\n <span>{{ t('modal.share.expires') }}</span>\n <input v-model=\"expiresAt\" type=\"datetime-local\" class=\"fe-input\" />\n </label>\n <label class=\"fe-form__row fe-form__row--stack\">\n <span>{{ t('modal.share.max_downloads') }}</span>\n <input v-model=\"maxDownloads\" type=\"number\" min=\"1\" class=\"fe-input\" />\n </label>\n </form>\n </template>\n <template v-else>\n <div class=\"fe-share-result\">\n <div class=\"fe-share-result__row\">\n <label>Link</label>\n <div class=\"fe-share-result__copy\">\n <input :value=\"share.url\" readonly class=\"fe-input\" />\n <button type=\"button\" class=\"fe-btn\" @click=\"copy(share.url, t('modal.share.url_copied'))\">\n {{ t('modal.share.copy') }}\n </button>\n </div>\n </div>\n <div v-if=\"share.password_pin\" class=\"fe-share-result__row\">\n <label>PIN</label>\n <div class=\"fe-share-result__copy\">\n <input :value=\"share.password_pin\" readonly class=\"fe-input fe-input--mono\" />\n <button type=\"button\" class=\"fe-btn\" @click=\"copy(share.password_pin, t('modal.share.pin_copied'))\">\n {{ t('modal.share.copy') }}\n </button>\n </div>\n </div>\n <div class=\"fe-share-result__row\">\n <label>CLI</label>\n <div class=\"fe-share-result__copy\">\n <input :value=\"cliCommand\" readonly class=\"fe-input fe-input--mono\" />\n <button type=\"button\" class=\"fe-btn\" @click=\"copy(cliCommand, t('modal.share.cli_copied'))\">\n {{ t('modal.share.copy') }}\n </button>\n </div>\n </div>\n </div>\n </template>\n <template #actions>\n <button type=\"button\" class=\"fe-btn\" @click=\"emit('close')\">\n {{ share ? 'Kapat' : t('modal.share.cancel') }}\n </button>\n <button v-if=\"!share\" type=\"button\" class=\"fe-btn fe-btn--primary\" @click=\"submit\">\n {{ t('modal.share.create') }}\n </button>\n </template>\n </Modal>\n</template>\n","<script setup lang=\"ts\">\n/**\n * PreviewModal — inline file preview.\n *\n * Strategy by extension:\n * image / video / audio / pdf → native browser elements\n * md / markdown → markdown-it (lazy) → rendered HTML\n * code (js/ts/php/py/json/...) → Monaco when ready, highlight.js\n * fallback while it's still loading,\n * plain `<pre>` when neither is\n * installed\n * office (docx/xlsx/pptx) → OnlyOffice iframe (config.onlyOfficeBase)\n * plain text (txt/log/conf) → CodeMirror when saveText is set,\n * `<pre>` otherwise\n * anything else → \"indir\" fallback\n *\n * Monaco is dynamic-imported at FileExplorer onMounted; by the time the\n * user clicks an editable code file the chunk is usually already cached.\n * We probe `getMonaco()` synchronously when the modal opens — if it's\n * not yet loaded we render the highlight.js read-only view immediately,\n * then upgrade to Monaco once the import resolves.\n */\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, shallowRef, watch } from 'vue';\nimport type { Component } from 'vue';\nimport type { FileNode } from '../types/FileNode';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport Modal from './Modal.vue';\nimport { ensureMonaco, getMonaco, ensureHighlight } from '../composables/useMonacoLoader';\nimport { useLocale } from '../composables/useLocale';\n\nconst props = defineProps<{\n open: boolean;\n locale: LocaleCode;\n file: FileNode | null;\n previewUrl: (path: string) => string;\n downloadUrl: (path: string) => string;\n onlyOfficeBase?: string | null;\n onlyOfficeConfigEndpoint?: string | null;\n saveTextEndpoint?: string | null;\n openMode?: 'edit' | 'view';\n authHeaders?: () => Record<string, string>;\n authCredentials?: RequestCredentials;\n /** New rich-viewer config (forwarded by FileExplorer from ExplorerConfig). */\n drawioUrl?: string | null;\n pdfWorkerUrl?: string | null;\n pdfSaveUrl?: string | null;\n /** Standalone full-screen viewer route — `?path=…&storage=…&type=…`. */\n viewerBaseUrl?: string | null;\n /** Drop the dialog chrome (backdrop tint, header bar, footer actions)\n * so the viewer fills the full viewport. Used by the standalone\n * /files/edit route where the browser tab IS the container — a\n * modal frame on top of the editor just steals real estate. */\n chromeless?: boolean;\n /** When the dynamic-viewer chunk fails to load, fall back to the\n * legacy native renderer (e.g. native `<object>` for PDFs). */\n /** Explicit theme. Forwarded to the underlying Modal (which tags\n * its backdrop with `.fe--theme-{light,dark}` so the CSS variable\n * override matches the host admin shell) and to Monaco (vs vs\n * vs-dark). When unset Monaco falls back to `prefers-color-scheme`\n * and the modal cascade follows whatever `.fe` parent it gets. */\n theme?: 'light' | 'dark' | 'auto';\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\n\nfunction ext(f: FileNode | null): string {\n return (f?.extension || '').toLowerCase();\n}\n\nconst IMAGE = ['jpg', 'jpeg', 'png', 'webp', 'gif', 'bmp', 'avif', 'svg', 'heic'];\nconst VIDEO = ['mp4', 'webm', 'mov', 'mkv', 'm4v', 'ogv'];\nconst AUDIO = ['mp3', 'wav', 'ogg', 'flac', 'm4a', 'aac', 'opus'];\n\nconst CODE_LANGS: Record<string, string> = {\n md: 'markdown', markdown: 'markdown',\n txt: 'plaintext', log: 'plaintext',\n js: 'javascript', mjs: 'javascript', cjs: 'javascript',\n ts: 'typescript', tsx: 'typescript', jsx: 'javascript',\n vue: 'xml', svelte: 'xml', html: 'xml', htm: 'xml', xml: 'xml', svg: 'xml',\n css: 'css', scss: 'scss', sass: 'scss', less: 'less',\n json: 'json', jsonc: 'json',\n yml: 'yaml', yaml: 'yaml',\n php: 'php', py: 'python', rb: 'ruby', go: 'go', rs: 'rust',\n java: 'java', kt: 'kotlin', swift: 'swift', cpp: 'cpp', c: 'c',\n h: 'cpp', hpp: 'cpp', cs: 'csharp', dart: 'dart',\n sh: 'bash', bash: 'bash', zsh: 'bash', fish: 'bash',\n sql: 'sql',\n toml: 'ini', ini: 'ini', conf: 'ini', env: 'bash', cfg: 'ini',\n dockerfile: 'dockerfile',\n graphql: 'graphql', gql: 'graphql',\n diff: 'diff', patch: 'diff',\n};\n// CSV/TSV land in the rich viewer (`csv` kind below) instead of the\n// legacy plain-text path so the user gets a proper table preview.\nconst TEXT_PLAIN = ['txt', 'log'];\nconst OFFICE = ['docx', 'doc', 'xlsx', 'xls', 'pptx', 'ppt', 'odt', 'ods', 'odp', 'rtf'];\n\n/**\n * Lazy viewer map — extension → component loader. Each loader is a\n * dynamic import so the viewer chunk only ships when the file type\n * is actually opened. The PreviewModal mounts the resolved component\n * via `<component :is=\"ViewerCmp\" />` once the dynamic import settles.\n */\nconst VIEWER_MAP: Record<string, () => Promise<Component>> = {\n glb: () => import('../viewers/Viewer3D.vue'),\n gltf: () => import('../viewers/Viewer3D.vue'),\n obj: () => import('../viewers/Viewer3D.vue'),\n stl: () => import('../viewers/Viewer3D.vue'),\n fbx: () => import('../viewers/Viewer3D.vue'),\n '3ds': () => import('../viewers/Viewer3D.vue'),\n\n epub: () => import('../viewers/EpubViewer.vue'),\n\n mmd: () => import('../viewers/MermaidViewer.vue'),\n mermaid: () => import('../viewers/MermaidViewer.vue'),\n\n drawio: () => import('../viewers/DrawioViewer.vue'),\n dio: () => import('../viewers/DrawioViewer.vue'),\n\n tif: () => import('../viewers/TiffViewer.vue'),\n tiff: () => import('../viewers/TiffViewer.vue'),\n\n psd: () => import('../viewers/PsdViewer.vue'),\n\n // PDF deliberately uses the native browser viewer (`kind === 'pdf'`\n // branch in the template). PdfViewer.vue still exists for callers\n // that want the rich custom UI but the SFC default keeps things\n // minimal — the browser already paints search/zoom/page UI for free.\n\n ipynb: () => import('../viewers/IpynbViewer.vue'),\n\n csv: () => import('../viewers/CsvViewer.vue'),\n tsv: () => import('../viewers/CsvViewer.vue'),\n\n zip: () => import('../viewers/ArchiveViewer.vue'),\n};\n\ntype PreviewKind =\n | 'image' | 'video' | 'audio' | 'pdf' | 'markdown' | 'code'\n | 'office' | 'text' | 'viewer' | 'other';\n\nconst kind = computed<PreviewKind>(() => {\n const e = ext(props.file);\n if (!e) return 'other';\n if (IMAGE.includes(e)) return 'image';\n if (VIDEO.includes(e)) return 'video';\n if (AUDIO.includes(e)) return 'audio';\n // PDF always uses the native browser <object> renderer. The\n // PdfViewer SFC is no longer wired into the default map — the\n // browser-bundled toolbar is enough and removes a 600 KB pdfjs\n // worker chunk + a custom toolbar layer for parity with the rest\n // of the read-only viewers.\n if (e === 'pdf') return 'pdf';\n // Markdown stays in its own branch (gets the split view in edit mode);\n // plain text → code editor in edit mode, raw <pre> in view mode.\n const wantEdit = props.openMode !== 'view';\n if (e === 'md' || e === 'markdown') return 'markdown';\n if (e in CODE_LANGS) return 'code';\n if (e in VIEWER_MAP) return 'viewer';\n if (OFFICE.includes(e)) return 'office';\n if (TEXT_PLAIN.includes(e)) return wantEdit ? 'code' : 'text';\n return 'other';\n});\n\n// --- Rich viewer plumbing ---\n//\n// `viewerCmp` holds the dynamically-imported component once the load\n// resolves. Stored in a `shallowRef` because the component itself\n// shouldn't be deep-watched.\nconst viewerCmp = shallowRef<Component | null>(null);\nconst viewerLoadError = ref<string | null>(null);\nconst pdfFallbackToNative = ref(false);\n\nasync function loadViewerFor(extension: string): Promise<void> {\n viewerCmp.value = null;\n viewerLoadError.value = null;\n const loader = VIEWER_MAP[extension];\n if (!loader) return;\n try {\n const mod = (await loader()) as { default?: Component };\n viewerCmp.value = mod.default ?? (mod as unknown as Component);\n } catch (err) {\n viewerLoadError.value = err instanceof Error ? err.message : 'viewer load failed';\n if (extension === 'pdf') pdfFallbackToNative.value = true;\n }\n}\n\nfunction onPdfFallback(): void {\n pdfFallbackToNative.value = true;\n}\n\n/** Build the props bundle pushed into the active viewer component. */\nconst viewerProps = computed(() => {\n const e = ext(props.file);\n const base: Record<string, unknown> = {\n url: src.value,\n ext: e,\n mime: props.file?.mime_type,\n t,\n authHeaders: props.authHeaders,\n authCredentials: props.authCredentials,\n };\n if (props.file) {\n base.filePath = stripAdapter(props.file.path);\n // Archive viewer needs the adapter-qualified path because the\n // /api/files/archive/list handler falls back to storages[0] when\n // no adapter prefix is present — on multi-storage instances that\n // 500s for every non-default storage (sample.zip on fm s3-test).\n if (e === 'zip' || e === 'rar' || e === '7z' || e === 'tar' || e === 'gz' || e === 'tgz') {\n base.filePath = props.file.path;\n }\n }\n if (e === 'drawio' || e === 'dio') {\n base.drawioUrl = props.drawioUrl ?? undefined;\n base.saveUrl = props.saveTextEndpoint ?? undefined;\n base.readOnly = props.openMode === 'view';\n }\n if (e === 'pdf') {\n base.pdfWorkerUrl = props.pdfWorkerUrl ?? undefined;\n base.pdfSaveUrl = props.pdfSaveUrl ?? undefined;\n }\n return base;\n});\n\nfunction openInNewTab(): void {\n buildAndOpenStandalone(props.openMode || 'edit');\n}\n\nfunction openEditInNewTab(): void {\n buildAndOpenStandalone('edit');\n}\n\nfunction buildAndOpenStandalone(mode: 'view' | 'edit'): void {\n if (!props.file) return;\n const e = ext(props.file);\n // Keep the adapter-qualified path intact so the editor route\n // resolves the storage from the URL (stripping it falls back to\n // storages[0] and 404s for any non-default adapter). Default base\n // is the SFC's standalone /files/edit route; embedders override via\n // viewerBaseUrl when they mount us elsewhere.\n const base = props.viewerBaseUrl || '/files/edit';\n const sep = base.includes('?') ? '&' : '?';\n const url =\n `${base}${sep}path=${encodeURIComponent(props.file.path)}` +\n `&type=${encodeURIComponent(e)}` +\n `&mode=${encodeURIComponent(mode)}`;\n window.open(url, '_blank', 'noopener');\n}\n\n/**\n * Extensions that have a meaningful \"edit\" surface. Read-only kinds\n * (image/video/audio/3D/archive) don't surface a \"Düzenle\" button.\n */\nconst EDITABLE_EXTS = new Set([\n // OnlyOffice — open the in-page office editor (or new tab) with\n // edit permissions.\n 'docx', 'doc', 'xlsx', 'xls', 'pptx', 'ppt',\n 'odt', 'ods', 'odp', 'rtf',\n // Drawio / mermaid round-trip via the new-tab route.\n 'drawio', 'dio', 'mmd', 'mermaid',\n // Code / text / markdown — Monaco / split editor.\n 'md', 'markdown', 'txt', 'log',\n 'json', 'jsonc', 'yaml', 'yml', 'xml', 'svg', 'html', 'htm',\n 'js', 'mjs', 'cjs', 'ts', 'tsx', 'jsx', 'vue', 'svelte',\n 'css', 'scss', 'sass', 'less',\n 'php', 'py', 'rb', 'go', 'rs', 'java', 'kt', 'swift',\n 'cpp', 'c', 'h', 'hpp', 'cs', 'dart',\n 'sh', 'bash', 'sql',\n 'toml', 'ini', 'conf', 'cfg', 'env',\n 'dockerfile', 'graphql', 'gql',\n]);\n\nconst canEditKind = computed<boolean>(() =>\n !!props.file && EDITABLE_EXTS.has(ext(props.file)),\n);\n\n// Keep adapter prefix so backend resolves the right storage — stripping\n// it defaults to storages[0] and 404s on any non-default adapter.\nconst src = computed(() => (props.file ? props.previewUrl(props.file.path) : ''));\nconst download = computed(() => (props.file ? props.downloadUrl(props.file.path) : ''));\n\nfunction stripAdapter(p: string): string {\n const idx = p.indexOf('://');\n return idx === -1 ? p : p.slice(idx + 3);\n}\n\nconst loading = ref(false);\nconst fetchError = ref<string | null>(null);\nconst rawText = ref<string>('');\nconst MAX_TEXT_BYTES = 1_000_000;\nconst tooLarge = ref(false);\n\n// Markdown split-edit state — drives the side-by-side textarea+preview\n// layout inside the `kind === 'markdown'` template when openMode='edit'.\nconst mdDirty = ref(false);\nconst mdSaving = ref(false);\nlet mdReRenderTimer: ReturnType<typeof setTimeout> | undefined;\nlet mdAutosaveTimer: ReturnType<typeof setTimeout> | undefined;\nfunction onMdInput() {\n mdDirty.value = true;\n if (mdReRenderTimer) clearTimeout(mdReRenderTimer);\n mdReRenderTimer = setTimeout(() => {\n renderMarkdown(rawText.value);\n }, 250);\n // Autosave 1.5s after last keystroke — manual Kaydet button + Ctrl+S\n // still work; saveMarkdown() guards against overlap.\n if (mdAutosaveTimer) clearTimeout(mdAutosaveTimer);\n mdAutosaveTimer = setTimeout(() => {\n void saveMarkdown();\n }, 1500);\n}\nasync function saveMarkdown() {\n if (!props.saveTextEndpoint || !props.file || mdSaving.value) return;\n mdSaving.value = true;\n fetchError.value = null;\n try {\n const headers = {\n 'Content-Type': 'application/json',\n ...(await (props.authHeaders ?? (() => ({})))()),\n };\n const res = await fetch(props.saveTextEndpoint, {\n method: 'POST',\n headers,\n credentials: props.authCredentials || 'same-origin',\n body: JSON.stringify({ path: stripAdapter(props.file.path), content: rawText.value }),\n });\n if (!res.ok) {\n throw new Error(`save failed: ${res.status} ${await res.text()}`);\n }\n mdDirty.value = false;\n } catch (err) {\n fetchError.value = err instanceof Error ? err.message : String(err);\n } finally {\n mdSaving.value = false;\n }\n}\n\nasync function fetchText(url: string): Promise<void> {\n loading.value = true;\n fetchError.value = null;\n rawText.value = '';\n tooLarge.value = false;\n try {\n const headers: Record<string, string> = {};\n if (props.authHeaders) Object.assign(headers, props.authHeaders());\n const res = await fetch(url, {\n credentials: props.authCredentials || 'include',\n headers,\n });\n if (!res.ok) {\n throw new Error(`${res.status} ${res.statusText}`);\n }\n const len = Number(res.headers.get('content-length') || '0');\n if (len > MAX_TEXT_BYTES) {\n tooLarge.value = true;\n return;\n }\n const text = await res.text();\n if (text.length > MAX_TEXT_BYTES) {\n tooLarge.value = true;\n rawText.value = text.slice(0, MAX_TEXT_BYTES);\n } else {\n rawText.value = text;\n }\n } catch (err) {\n fetchError.value = err instanceof Error ? err.message : String(err);\n } finally {\n loading.value = false;\n }\n}\n\n// --- Markdown rendering (lazy markdown-it) ---\n//\n// Beyond the base markdown render we walk the resulting DOM for two\n// enrichments:\n// - ```mermaid``` fences → swap the `<pre>` for a rendered SVG via\n// the `mermaid` peer (when installed).\n// - ```math``` / `$$ … $$` blocks → render with `katex` (peer).\n// Both enrichments degrade gracefully when the peer isn't available\n// (the original `<pre>` stays in place).\n\nconst markdownHtml = ref<string>('');\nconst markdownEl = ref<HTMLDivElement | null>(null);\n\nasync function renderMarkdown(text: string): Promise<void> {\n try {\n const mod = (await import(/* @vite-ignore */ 'markdown-it').catch(() => null)) as any;\n if (!mod) {\n markdownHtml.value = '';\n return;\n }\n const Md = (mod as { default: any }).default ?? (mod as any);\n // html: true so inline HTML in README.md / docs renders (the\n // GitHub / GitLab contract — operators expect `<img>`, tables,\n // `<details>`, etc. to work). We sanitize the output below to\n // strip scripts / event handlers before injecting via v-html.\n const md = new Md({\n html: true,\n linkify: true,\n breaks: true,\n typographer: true,\n });\n const raw = md.render(text);\n markdownHtml.value = sanitizeHtml(raw);\n // Wait for Vue to flush the v-html into the DOM before walking it.\n await new Promise<void>((r) => setTimeout(r, 0));\n await enrichMarkdown();\n } catch (err) {\n markdownHtml.value = '';\n fetchError.value = err instanceof Error ? err.message : String(err);\n }\n}\n\n/**\n * Sanitize the markdown-it output before v-html injection.\n *\n * GitHub / GitLab let README authors embed inline HTML (img, table,\n * details, kbd …) so the viewer ships with `html: true`. This filter\n * strips the executable surface: `<script>`, `<iframe>`, `<object>`,\n * `<embed>`, any `on*` event-handler attribute, and `javascript:`\n * URLs. Conservative — README content with inline handlers is\n * exceptional and silent over-removal beats silent XSS.\n *\n * No external dep — keeping the package install-free is the trade\n * we want. Integrators who need a heavier sanitizer can run their\n * own DOMPurify pass on the rendered output before showing it.\n */\nfunction sanitizeHtml(html: string): string {\n return html\n .replace(/<\\s*script\\b[^<]*(?:(?!<\\s*\\/\\s*script\\s*>)<[^<]*)*<\\s*\\/\\s*script\\s*>/gi, '')\n .replace(/<\\s*iframe\\b[\\s\\S]*?<\\s*\\/\\s*iframe\\s*>/gi, '')\n .replace(/<\\s*object\\b[\\s\\S]*?<\\s*\\/\\s*object\\s*>/gi, '')\n .replace(/<\\s*embed\\b[^>]*>/gi, '')\n .replace(/\\son\\w+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s>]+)/gi, '')\n .replace(/(href|src|action|formaction|xlink:href)\\s*=\\s*(?:\"\\s*javascript:[^\"]*\"|'\\s*javascript:[^']*')/gi, '$1=\"#\"');\n}\n\nasync function enrichMarkdown(): Promise<void> {\n if (!markdownEl.value) return;\n const root = markdownEl.value;\n const blocks = Array.from(root.querySelectorAll('pre > code')) as HTMLElement[];\n if (blocks.length === 0) return;\n\n let mermaid: any = undefined;\n let katex: any = undefined;\n\n for (const block of blocks) {\n const cls = block.className || '';\n const isMermaid =\n /\\blanguage-mermaid\\b/.test(cls) || /\\blanguage-mmd\\b/.test(cls);\n const isMath =\n /\\blanguage-math\\b/.test(cls) ||\n /\\blanguage-latex\\b/.test(cls) ||\n /\\blanguage-tex\\b/.test(cls);\n\n if (isMermaid) {\n if (mermaid === undefined) {\n try {\n const m = await import(/* @vite-ignore */ 'mermaid');\n mermaid = m.default ?? m;\n mermaid.initialize?.({\n startOnLoad: false,\n securityLevel: 'strict',\n });\n } catch {\n mermaid = null;\n }\n }\n if (!mermaid) continue;\n try {\n const id = `filex-md-mermaid-${Math.random().toString(36).slice(2)}`;\n const { svg } = await mermaid.render(id, block.textContent || '');\n const wrap = document.createElement('div');\n wrap.className = 'fe-preview__md-mermaid';\n wrap.innerHTML = svg;\n block.parentElement?.replaceWith(wrap);\n } catch {\n /* leave fenced block */\n }\n } else if (isMath) {\n if (katex === undefined) {\n try {\n const m = await import(/* @vite-ignore */ 'katex');\n katex = m.default ?? m;\n } catch {\n katex = null;\n }\n }\n if (!katex) continue;\n try {\n const html = katex.renderToString(block.textContent || '', {\n displayMode: true,\n throwOnError: false,\n });\n const wrap = document.createElement('div');\n wrap.className = 'fe-preview__md-math';\n wrap.innerHTML = html;\n block.parentElement?.replaceWith(wrap);\n } catch {\n /* leave fenced block */\n }\n }\n }\n}\n\n// --- Code highlight (highlight.js fallback) ---\n//\n// Used as the placeholder render until Monaco resolves, AND as the\n// permanent renderer when Monaco isn't installed at all (peer missing).\n\nconst codeHtml = ref<string>('');\n\nasync function highlightCode(text: string, language: string): Promise<void> {\n try {\n const mod = (await ensureHighlight()) as any;\n if (!mod) {\n codeHtml.value = '';\n return;\n }\n const hljs = mod.default ?? mod;\n if (hljs.getLanguage(language)) {\n const result = hljs.highlight(text, { language, ignoreIllegals: true });\n codeHtml.value = result.value;\n } else {\n const result = hljs.highlightAuto(text);\n codeHtml.value = result.value;\n }\n } catch (err) {\n codeHtml.value = '';\n fetchError.value = err instanceof Error ? err.message : String(err);\n }\n}\n\n// --- Monaco editor (lazy) ---\n//\n// We attempt to instantiate Monaco when the modal opens for a code/text\n// file. If the module isn't loaded yet, the highlight.js placeholder\n// renders first, and the editor mounts in-place once Monaco resolves.\n// Save endpoint required for editing — read-only Monaco still loads if\n// the user just wants the IDE-grade syntax/colour view.\n\nconst monacoEl = ref<HTMLDivElement | null>(null);\nlet monacoEditor: any = null;\nlet codeAutosaveTimer: ReturnType<typeof setTimeout> | undefined;\nconst monacoReady = ref(false);\nconst saving = ref(false);\nconst saveOk = ref(false);\nconst saveError = ref<string | null>(null);\n\nfunction disposeMonaco(): void {\n if (monacoEditor) {\n try {\n monacoEditor.dispose();\n } catch {\n /* ignore */\n }\n monacoEditor = null;\n }\n monacoReady.value = false;\n saveOk.value = false;\n saveError.value = null;\n}\n\n/**\n * Map an extension to a Monaco language id. Anything not in the map\n * just becomes 'plaintext' — Monaco still gives line numbers + Ctrl+S.\n */\nfunction monacoLanguageFor(extension: string): string {\n const map: Record<string, string> = {\n js: 'javascript', mjs: 'javascript', cjs: 'javascript',\n ts: 'typescript', tsx: 'typescript', jsx: 'javascript',\n json: 'json', jsonc: 'json',\n css: 'css', scss: 'scss', sass: 'scss', less: 'less',\n html: 'html', htm: 'html', vue: 'html', svelte: 'html',\n xml: 'xml', svg: 'xml',\n md: 'markdown', markdown: 'markdown',\n php: 'php', py: 'python',\n yml: 'yaml', yaml: 'yaml',\n go: 'go', rs: 'rust', sql: 'sql',\n cpp: 'cpp', c: 'c', h: 'cpp', hpp: 'cpp',\n sh: 'shell', bash: 'shell',\n dockerfile: 'dockerfile',\n toml: 'ini', ini: 'ini', conf: 'ini', cfg: 'ini',\n };\n return map[extension] ?? 'plaintext';\n}\n\nasync function tryMountMonaco(text: string, extension: string): Promise<boolean> {\n const monaco = (await ensureMonaco()) as any;\n if (!monaco || !monacoEl.value) return false;\n try {\n disposeMonaco();\n const editable = !!props.saveTextEndpoint && props.openMode !== 'view';\n // Honour the explicit theme prop when set; fall back to the OS\n // preference otherwise. Without this the Monaco editor stays on\n // vs-dark on OS-dark systems even when the host admin shell is\n // light, producing a jarring light-card + dark-code combo inside\n // the in-page preview modal.\n const dark = props.theme === 'dark'\n ? true\n : props.theme === 'light'\n ? false\n : window.matchMedia?.('(prefers-color-scheme: dark)').matches;\n monacoEditor = monaco.editor.create(monacoEl.value, {\n value: text,\n language: monacoLanguageFor(extension),\n readOnly: !editable,\n theme: dark ? 'vs-dark' : 'vs',\n automaticLayout: true,\n minimap: { enabled: false },\n fontSize: 13,\n });\n if (editable) {\n monacoEditor.addCommand(\n monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS,\n () => void saveCode(),\n );\n // Autosave: 1.5s after the last keystroke we POST the buffer.\n // Ctrl+S still works for the impatient — saveCode() guards against\n // overlap, so a manual save during the debounce window just wins\n // and the queued autosave becomes a no-op.\n monacoEditor.onDidChangeModelContent(() => {\n if (codeAutosaveTimer) clearTimeout(codeAutosaveTimer);\n codeAutosaveTimer = setTimeout(() => {\n void saveCode();\n }, 1500);\n });\n }\n monacoReady.value = true;\n return true;\n } catch (err) {\n fetchError.value = `Monaco mount fail: ${(err as Error).message}`;\n return false;\n }\n}\n\nasync function saveCode(): Promise<void> {\n if (!props.saveTextEndpoint || !props.file) return;\n if (props.openMode === 'view') return;\n if (saving.value) return;\n saving.value = true;\n saveOk.value = false;\n saveError.value = null;\n try {\n const text = monacoEditor ? monacoEditor.getValue() : '';\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (props.authHeaders) Object.assign(headers, props.authHeaders());\n const res = await fetch(props.saveTextEndpoint, {\n method: 'POST',\n headers,\n credentials: props.authCredentials || 'same-origin',\n body: JSON.stringify({\n path: stripAdapter(props.file.path),\n content: text,\n }),\n });\n if (!res.ok) {\n const txt = await res.text().catch(() => '');\n throw new Error(`${res.status} ${res.statusText}${txt ? ' — ' + txt.slice(0, 150) : ''}`);\n }\n saveOk.value = true;\n setTimeout(() => {\n saveOk.value = false;\n }, 2500);\n } catch (err) {\n saveError.value = (err as Error).message;\n } finally {\n saving.value = false;\n }\n}\n\n// --- Orchestration: fetch + render when modal opens ---\n\nasync function runOrchestration(open: boolean, url: string, k: string): Promise<void> {\n rawText.value = '';\n markdownHtml.value = '';\n codeHtml.value = '';\n fetchError.value = null;\n officeError.value = null;\n viewerCmp.value = null;\n viewerLoadError.value = null;\n pdfFallbackToNative.value = false;\n disposeOnlyOfficeEditor();\n disposeMonaco();\n if (!open || !url) return;\n if (k === 'viewer') {\n await loadViewerFor(ext(props.file));\n return;\n }\n if (k === 'markdown' || k === 'code' || k === 'text') {\n await fetchText(url);\n if (tooLarge.value) return;\n if (k === 'markdown') {\n await renderMarkdown(rawText.value);\n return;\n }\n // For code/text — try Monaco first when the cached module is\n // already in memory. If not, render the highlight.js placeholder\n // immediately, then attempt to upgrade to Monaco when the import\n // settles.\n const lang = CODE_LANGS[ext(props.file)] || '';\n const monacoCached = getMonaco();\n if (monacoCached) {\n await new Promise<void>((r) => setTimeout(r, 0));\n const ok = await tryMountMonaco(rawText.value, ext(props.file));\n if (!ok) await highlightCode(rawText.value, lang);\n } else {\n // Render highlight.js immediately for read-only colour. Then\n // kick off the Monaco load and swap it in once ready.\n if (k === 'code') await highlightCode(rawText.value, lang);\n ensureMonaco().then(async (m) => {\n if (!m) return;\n if (!props.open) return;\n // Wait one tick so the placeholder DOM exists before swapping.\n await new Promise<void>((r) => setTimeout(r, 0));\n await tryMountMonaco(rawText.value, ext(props.file));\n });\n }\n } else if (k === 'office') {\n await new Promise<void>((r) => setTimeout(r, 0));\n await mountOnlyOfficeEditor();\n }\n}\n\nwatch(\n () => [props.open, src.value, kind.value, props.openMode] as const,\n ([open, url, k]) => {\n void runOrchestration(open, url, k);\n },\n);\n\n// Hand-fire on mount so the standalone Editor.vue route (which mounts\n// us with `open` already true) actually runs the orchestration. The\n// watcher itself is non-immediate because `immediate: true` would fire\n// before the rest of <script setup> finishes, hitting the TDZ on\n// `officeEditor`/Monaco state below. Doing this in onMounted+nextTick\n// guarantees every `let`/`function` in the file has been hoisted.\nonMounted(() => {\n void nextTick(() => {\n if (!props.open) return;\n void runOrchestration(props.open, src.value, kind.value);\n });\n});\n\nconst codeLanguage = computed(() => CODE_LANGS[ext(props.file)] || 'plaintext');\n\n// --- OnlyOffice DocEditor (real, JWT-signed) ---\n\nconst officeEl = ref<HTMLDivElement | null>(null);\nconst officeError = ref<string | null>(null);\nlet officeEditor: any = null;\n\nasync function mountOnlyOfficeEditor(): Promise<void> {\n officeError.value = null;\n if (!props.file || kind.value !== 'office') return;\n if (!props.onlyOfficeConfigEndpoint) {\n officeError.value = 'OnlyOffice yapılandırması yok';\n return;\n }\n if (!officeEl.value) return;\n\n try {\n const headers: Record<string, string> = { 'Content-Type': 'application/json' };\n if (props.authHeaders) Object.assign(headers, props.authHeaders());\n const res = await fetch(props.onlyOfficeConfigEndpoint, {\n method: 'POST',\n headers,\n credentials: props.authCredentials || 'same-origin',\n body: JSON.stringify({\n // Send the FULL adapter-qualified path. The backend resolves\n // `<adapter>://<rel>` against ListEnabledStorages; passing the\n // bare relative path falls back to storages[0] which 404s for\n // anything sitting on a non-primary storage (e.g. s3-test).\n path: props.file.path,\n mode: props.openMode || 'edit',\n }),\n });\n if (!res.ok) {\n throw new Error(`Config fetch ${res.status}: ${(await res.text()).slice(0, 200)}`);\n }\n const { config, documentServerUrl } = (await res.json()) as {\n config: any;\n documentServerUrl: string;\n };\n\n await loadOnlyOfficeScript(documentServerUrl);\n disposeOnlyOfficeEditor();\n\n const mountId = 'fe-onlyoffice-mount';\n officeEl.value.id = mountId;\n\n config.events = {\n onError: (err: any) => {\n officeError.value = formatOnlyOfficeError(err);\n },\n };\n\n const W = window as any;\n if (!W.DocsAPI || !W.DocsAPI.DocEditor) {\n throw new Error('DocsAPI not available after script load');\n }\n officeEditor = new W.DocsAPI.DocEditor(mountId, config);\n } catch (err) {\n officeError.value = err instanceof Error ? err.message : String(err);\n }\n}\n\nfunction disposeOnlyOfficeEditor(): void {\n try {\n officeEditor?.destroyEditor?.();\n } catch {\n /* ignore */\n }\n officeEditor = null;\n}\n\nonBeforeUnmount(() => {\n disposeOnlyOfficeEditor();\n disposeMonaco();\n});\n\n/**\n * OnlyOffice fires onError with an event-like object:\n * { type:'error', data:{ errorCode, errorDescription, ... } }\n * The legacy stringification produced \"[object Object]\" for objects\n * whose `data` was itself an object. Walk one level deeper so the\n * user sees the actual error description instead of a useless cast.\n */\nfunction formatOnlyOfficeError(err: unknown): string {\n if (typeof err === 'string') return err;\n const e = err as { data?: unknown; message?: unknown; errorDescription?: unknown };\n if (e?.data && typeof e.data === 'object') {\n const d = e.data as { errorDescription?: unknown; errorCode?: unknown; message?: unknown };\n if (typeof d.errorDescription === 'string') return d.errorDescription;\n if (typeof d.message === 'string') return d.message;\n if (d.errorCode !== undefined) return `OnlyOffice error ${d.errorCode}`;\n }\n if (typeof e?.data === 'string') return e.data;\n if (typeof e?.errorDescription === 'string') return e.errorDescription;\n if (typeof e?.message === 'string') return e.message;\n try {\n return JSON.stringify(err);\n } catch {\n return 'OnlyOffice error';\n }\n}\n\nconst ONLYOFFICE_SCRIPT_ID = 'fe-onlyoffice-api-js';\nfunction loadOnlyOfficeScript(base: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if ((window as any).DocsAPI?.DocEditor) {\n resolve();\n return;\n }\n const existing = document.getElementById(ONLYOFFICE_SCRIPT_ID) as HTMLScriptElement | null;\n if (existing) {\n existing.addEventListener('load', () => resolve());\n existing.addEventListener('error', () => reject(new Error('OnlyOffice api.js load failed')));\n return;\n }\n const script = document.createElement('script');\n script.id = ONLYOFFICE_SCRIPT_ID;\n script.src = `${base.replace(/\\/$/, '')}/web-apps/apps/api/documents/api.js`;\n script.async = true;\n script.onload = () => resolve();\n script.onerror = () => reject(new Error('OnlyOffice api.js load failed'));\n document.head.appendChild(script);\n });\n}\n</script>\n\n<template>\n <Modal :open=\"open\" size=\"xl\" :title=\"file?.basename || ''\" :chromeless=\"chromeless\" :theme=\"theme\" @close=\"emit('close')\">\n <div v-if=\"file\" class=\"fe-preview\">\n <template v-if=\"kind === 'image'\">\n <img :src=\"src\" :alt=\"file.basename\" class=\"fe-preview__image\" />\n </template>\n <template v-else-if=\"kind === 'video'\">\n <video :src=\"src\" controls preload=\"metadata\" class=\"fe-preview__video\" />\n </template>\n <template v-else-if=\"kind === 'audio'\">\n <audio :src=\"src\" controls class=\"fe-preview__audio\" />\n </template>\n <template v-else-if=\"kind === 'pdf'\">\n <object :data=\"src\" type=\"application/pdf\" class=\"fe-preview__iframe\">\n <div class=\"fe-preview__fallback\">\n <span class=\"fe-preview__fallback-icon\">📕</span>\n <p>Tarayıcı PDF'i inline açamadı.</p>\n <a :href=\"download\" class=\"fe-btn fe-btn--primary\" target=\"_blank\" rel=\"noopener\">PDF'i Yeni Sekmede Aç</a>\n </div>\n </object>\n </template>\n\n <template v-else-if=\"kind === 'markdown'\">\n <div v-if=\"loading\" class=\"fe-preview__fallback\">{{ t('viewer.loading') }}</div>\n <div v-else-if=\"tooLarge\" class=\"fe-preview__fallback\">\n Dosya çok büyük (>1 MB). <a :href=\"download\" class=\"fe-btn\">{{ t('viewer.download') }}</a>\n </div>\n <div\n v-else-if=\"openMode === 'edit' && saveTextEndpoint\"\n class=\"fe-preview__md-split\"\n >\n <div class=\"fe-preview__md-split-bar\">\n <span class=\"fe-preview__md-split-label\">MARKDOWN</span>\n <span v-if=\"fetchError\" class=\"fe-preview__md-split-error\">{{ fetchError }}</span>\n <button\n type=\"button\"\n class=\"fe-btn fe-btn--primary\"\n :disabled=\"!mdDirty || mdSaving\"\n @click=\"saveMarkdown\"\n >\n {{ mdSaving ? 'Kaydediliyor…' : (mdDirty ? 'Kaydet (Ctrl+S)' : 'Kaydedildi') }}\n </button>\n </div>\n <div class=\"fe-preview__md-split-body\">\n <textarea\n class=\"fe-preview__md-split-input\"\n v-model=\"rawText\"\n @input=\"onMdInput\"\n @keydown.ctrl.s.prevent=\"saveMarkdown\"\n @keydown.meta.s.prevent=\"saveMarkdown\"\n spellcheck=\"false\"\n placeholder=\"# Markdown buraya…\"\n />\n <div\n ref=\"markdownEl\"\n class=\"fe-preview__md-split-output fe-preview__md\"\n v-html=\"markdownHtml\"\n ></div>\n </div>\n </div>\n <div v-else-if=\"fetchError\" class=\"fe-preview__fallback\">\n <p>{{ fetchError }}</p>\n <a :href=\"download\" class=\"fe-btn fe-btn--primary\">{{ t('viewer.download') }}</a>\n </div>\n <div v-else-if=\"markdownHtml\" ref=\"markdownEl\" class=\"fe-preview__md\" v-html=\"markdownHtml\"></div>\n <pre v-else class=\"fe-preview__pre\">{{ rawText }}</pre>\n </template>\n\n <template v-else-if=\"kind === 'viewer'\">\n <div v-if=\"viewerLoadError && !pdfFallbackToNative\" class=\"fe-preview__fallback\">\n <span class=\"fe-preview__fallback-icon\">⚠️</span>\n <p>{{ viewerLoadError }}</p>\n <a :href=\"download\" class=\"fe-btn fe-btn--primary\">{{ t('viewer.download') }}</a>\n </div>\n <div v-else-if=\"!viewerCmp\" class=\"fe-preview__fallback\">\n <span class=\"fe-preview__fallback-icon\">⏳</span>\n <p>{{ t('viewer.loading') }}</p>\n </div>\n <component\n v-else\n :is=\"viewerCmp\"\n v-bind=\"viewerProps\"\n class=\"fe-preview__viewer\"\n @fallback=\"onPdfFallback\"\n />\n </template>\n\n <template v-else-if=\"kind === 'code' || kind === 'text'\">\n <div v-if=\"loading\" class=\"fe-preview__fallback\">{{ t('viewer.loading') }}</div>\n <div v-else-if=\"tooLarge\" class=\"fe-preview__fallback\">\n Dosya çok büyük (>1 MB). <a :href=\"download\" class=\"fe-btn\">{{ t('viewer.download') }}</a>\n </div>\n <div v-else-if=\"fetchError\" class=\"fe-preview__fallback\">\n <p>{{ fetchError }}</p>\n <a :href=\"download\" class=\"fe-btn fe-btn--primary\">{{ t('viewer.download') }}</a>\n </div>\n <div v-else class=\"fe-preview__code-wrap\">\n <div class=\"fe-preview__code-toolbar\">\n <span class=\"fe-preview__code-lang\">{{ codeLanguage }}</span>\n <span v-if=\"!monacoReady && codeHtml\" class=\"fe-preview__code-status\">\n {{ saveTextEndpoint ? 'Editör yükleniyor…' : 'Salt okunur' }}\n </span>\n <span v-if=\"saveOk\" class=\"fe-preview__code-status fe-preview__code-status--ok\">✓ Kaydedildi</span>\n <span v-if=\"saveError\" class=\"fe-preview__code-status fe-preview__code-status--err\" :title=\"saveError\">✗ Hata</span>\n <span v-if=\"openMode === 'view'\" class=\"fe-preview__code-status\">Salt okunur</span>\n <button\n v-else-if=\"saveTextEndpoint && monacoReady\"\n type=\"button\"\n class=\"fe-btn fe-btn--primary\"\n :disabled=\"saving\"\n @click=\"saveCode\"\n >{{ saving ? 'Kaydediliyor…' : 'Kaydet (Ctrl+S)' }}</button>\n </div>\n <!-- Monaco target — hidden until ready, then occupies the slot. -->\n <div ref=\"monacoEl\" class=\"fe-preview__code-editor\" :class=\"{ 'is-hidden': !monacoReady }\" />\n <!-- Highlight.js read-only fallback — visible until Monaco mounts. -->\n <pre\n v-if=\"!monacoReady && codeHtml\"\n class=\"fe-preview__pre fe-preview__code hljs\"\n ><code :class=\"`language-${codeLanguage}`\" v-html=\"codeHtml\"></code></pre>\n <pre\n v-else-if=\"!monacoReady && !codeHtml\"\n class=\"fe-preview__pre\"\n :data-lang=\"codeLanguage\"\n >{{ rawText }}</pre>\n </div>\n </template>\n\n <template v-else-if=\"kind === 'office'\">\n <div v-if=\"officeError\" class=\"fe-preview__fallback\">\n <span class=\"fe-preview__fallback-icon\">📄</span>\n <p>{{ officeError }}</p>\n <a :href=\"download\" class=\"fe-btn fe-btn--primary\">İndir</a>\n </div>\n <div v-else ref=\"officeEl\" class=\"fe-preview__office\" />\n </template>\n\n <template v-else>\n <div class=\"fe-preview__fallback\">\n <span class=\"fe-preview__fallback-icon\">📎</span>\n <p>Bu dosya tipi için önizleme henüz yok.</p>\n <a :href=\"download\" class=\"fe-btn fe-btn--primary\">İndir</a>\n </div>\n </template>\n </div>\n <template #actions>\n <button\n v-if=\"file && openMode === 'view' && canEditKind\"\n type=\"button\"\n class=\"fe-btn fe-btn--primary\"\n @click=\"openEditInNewTab\"\n >✏ Düzenle</button>\n <button\n v-if=\"file\"\n type=\"button\"\n class=\"fe-btn\"\n @click=\"openInNewTab\"\n >↗ {{ t('viewer.open_in_new_tab') }}</button>\n <a v-if=\"file\" :href=\"download\" class=\"fe-btn\">{{ t('viewer.download') }}</a>\n <button type=\"button\" class=\"fe-btn\" @click=\"emit('close')\">Kapat</button>\n </template>\n </Modal>\n</template>\n\n<style>\n.fe-preview__code-editor.is-hidden {\n display: none;\n}\n/* Wrapper for the dynamic viewers — they render their own toolbars\n * inside the wrapper, so we just give them the full pane height. */\n.fe-preview__viewer {\n width: 100%;\n height: 100%;\n min-height: 70vh;\n display: flex;\n flex-direction: column;\n}\n.fe-preview .fe-preview__viewer {\n align-self: stretch;\n}\n.fe-preview__md-mermaid {\n display: flex;\n justify-content: center;\n margin: 16px 0;\n}\n.fe-preview__md-mermaid svg {\n max-width: 100%;\n height: auto;\n}\n.fe-preview__md-math {\n margin: 16px 0;\n text-align: center;\n overflow-x: auto;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * ConvertModal — universal file converter via a hidden, embedded iframe to\n * the p2r3/convert fork running at `convertUrl` (loaded with `?embed=1`).\n *\n * The iframe performs the actual conversion in-browser (WASM handlers); we\n * drive it headlessly over postMessage (protocol defined in the fork's\n * `setupEmbedBridge`):\n * 1. iframe → { source:'convert-embed', event:'ready' }\n * 2. we → { target:'convert-embed', cmd:'listFormats', id }\n * iframe→ { source, id, ok, formats:[{index,ext,format,mime,name,from,to}] }\n * 3. user searches + picks a target format\n * 4. we fetch the source bytes, → { cmd:'convert', name, bytes, fromIndex, toIndex }\n * iframe→ { ok, name, ext, bytes:ArrayBuffer }\n * 5. we wrap the bytes in a File and upload it to the current folder.\n */\nimport { computed, onBeforeUnmount, onMounted, ref } from 'vue';\n\nconst props = defineProps<{\n /** Converter base, e.g. https://fm.example.com/convert */\n convertUrl: string;\n /** Source file name with extension, e.g. \"clip.avi\" */\n fileName: string;\n /** Lazily fetch the source file bytes (api.fetchArrayBuffer bound to the path). */\n fetchBytes: () => Promise<ArrayBuffer>;\n /** Upload the produced File into the current folder (api.uploadMultipart bound to dir). */\n upload: (file: File) => Promise<void>;\n t?: (key: string, fallback: string) => string;\n}>();\n\nconst emit = defineEmits<{ (e: 'close'): void; (e: 'done', name: string): void }>();\n\ninterface Fmt {\n index: number; ext: string; format: string; mime: string;\n name: string; from: boolean; to: boolean; category: string | null;\n}\n\nconst iframeRef = ref<HTMLIFrameElement | null>(null);\nconst status = ref<'loading' | 'ready' | 'converting' | 'done' | 'error'>('loading');\nconst error = ref<string | null>(null);\nconst formats = ref<Fmt[]>([]);\nconst search = ref('');\nconst selectedTo = ref<Fmt | null>(null);\n\nconst srcExt = computed(() => (props.fileName.split('.').pop() || '').toLowerCase());\n\nconst fromFmt = computed<Fmt | null>(() => {\n const ins = formats.value.filter((f) => f.from);\n return (\n ins.find((f) => (f.ext || '').toLowerCase() === srcExt.value) ||\n ins.find((f) => (f.format || '').toLowerCase() === srcExt.value) ||\n null\n );\n});\n\nconst toList = computed<Fmt[]>(() => {\n const q = search.value.trim().toLowerCase();\n const seen = new Set<string>();\n const uniq: Fmt[] = [];\n for (const f of formats.value) {\n if (!f.to) continue;\n const key = (f.ext || f.format || '').toLowerCase();\n if (!key || seen.has(key)) continue;\n seen.add(key);\n uniq.push(f);\n }\n uniq.sort((a, b) => (a.ext || a.format).localeCompare(b.ext || b.format));\n if (!q) return uniq;\n return uniq.filter(\n (f) =>\n (f.ext || '').toLowerCase().includes(q) ||\n (f.format || '').toLowerCase().includes(q) ||\n (f.name || '').toLowerCase().includes(q) ||\n (f.mime || '').toLowerCase().includes(q),\n );\n});\n\nconst iframeSrc = computed(() => `${props.convertUrl.replace(/\\/$/, '')}/?embed=1`);\n\nlet msgId = 0;\nconst pending = new Map<number, { resolve: (v: any) => void; reject: (e: any) => void }>();\n\nfunction send(cmd: string, extra: Record<string, unknown> = {}, transfer: Transferable[] = []): Promise<any> {\n const id = ++msgId;\n return new Promise((resolve, reject) => {\n pending.set(id, { resolve, reject });\n iframeRef.value?.contentWindow?.postMessage({ target: 'convert-embed', id, cmd, ...extra }, '*', transfer);\n setTimeout(() => {\n if (pending.has(id)) { pending.delete(id); reject(new Error('convert timeout')); }\n }, 180000);\n });\n}\n\nfunction onMessage(ev: MessageEvent) {\n const d = ev.data;\n if (!d || d.source !== 'convert-embed') return;\n if (d.event === 'ready') { void loadFormats(); return; }\n const p = pending.get(d.id);\n if (!p) return;\n pending.delete(d.id);\n if (d.ok) p.resolve(d); else p.reject(new Error(d.error || 'convert error'));\n}\n\nasync function loadFormats() {\n try {\n const res = await send('listFormats');\n formats.value = res.formats || [];\n status.value = 'ready';\n if (!fromFmt.value) {\n error.value = tt('convert.unsupportedInput', 'Bu dosya tipi için kaynak format bulunamadı.');\n }\n } catch (e) {\n error.value = (e as Error).message;\n status.value = 'error';\n }\n}\n\nasync function doConvert() {\n if (!selectedTo.value || !fromFmt.value) return;\n status.value = 'converting';\n error.value = null;\n try {\n const buf = await props.fetchBytes();\n const res = await send(\n 'convert',\n { name: props.fileName, bytes: buf, fromIndex: fromFmt.value.index, toIndex: selectedTo.value.index },\n [buf],\n );\n const base = props.fileName.replace(/\\.[^.]+$/, '');\n const ext = res.ext || selectedTo.value.ext || selectedTo.value.format;\n const outName = `${base}.${ext}`;\n const file = new File([res.bytes], outName, { type: selectedTo.value.mime || 'application/octet-stream' });\n await props.upload(file);\n status.value = 'done';\n emit('done', outName);\n } catch (e) {\n error.value = (e as Error).message;\n status.value = 'error';\n }\n}\n\nfunction tt(k: string, fb: string) { return props.t ? props.t(k, fb) : fb; }\n\nonMounted(() => window.addEventListener('message', onMessage));\nonBeforeUnmount(() => window.removeEventListener('message', onMessage));\n</script>\n\n<template>\n <div class=\"filex-cv__bg\" @click.self=\"emit('close')\">\n <div class=\"filex-cv\">\n <header class=\"filex-cv__head\">\n <h3>{{ tt('convert.title', 'Dönüştür') }} — {{ fileName }}</h3>\n <button class=\"filex-cv__x\" @click=\"emit('close')\">✕</button>\n </header>\n\n <div v-if=\"status === 'loading'\" class=\"filex-cv__msg\">\n {{ tt('convert.loading', 'Dönüştürücü yükleniyor…') }}\n </div>\n\n <div v-else-if=\"status === 'done'\" class=\"filex-cv__msg filex-cv__ok\">\n <p>✓ {{ tt('convert.done', 'Dönüştürüldü ve klasöre yüklendi.') }}</p>\n <button class=\"filex-cv__convert\" @click=\"emit('close')\">{{ tt('convert.close', 'Kapat') }}</button>\n </div>\n\n <template v-else>\n <p class=\"filex-cv__src\">\n {{ tt('convert.from', 'Kaynak') }}: <b>{{ srcExt || '?' }}</b>\n </p>\n <input\n v-model=\"search\"\n class=\"filex-cv__search\"\n :placeholder=\"tt('convert.searchFmt', 'Hedef format ara (pdf, mp4, png…)')\"\n />\n <div class=\"filex-cv__list\">\n <button\n v-for=\"f in toList\"\n :key=\"f.index\"\n :class=\"['filex-cv__fmt', { 'is-sel': selectedTo?.index === f.index }]\"\n @click=\"selectedTo = f\"\n >\n <b>{{ (f.ext || f.format).toUpperCase() }}</b>\n <small>{{ f.name }}</small>\n </button>\n <div v-if=\"toList.length === 0\" class=\"filex-cv__empty\">\n {{ tt('convert.noFmt', 'Eşleşen format yok.') }}\n </div>\n </div>\n <div v-if=\"error\" class=\"filex-cv__err\">{{ error }}</div>\n <footer class=\"filex-cv__foot\">\n <button\n class=\"filex-cv__convert\"\n :disabled=\"!selectedTo || !fromFmt || status === 'converting'\"\n @click=\"doConvert\"\n >\n {{ status === 'converting' ? tt('convert.converting', 'Dönüştürülüyor…') : tt('convert.convert', 'Dönüştür') }}\n </button>\n </footer>\n </template>\n\n <!-- hidden headless converter engine -->\n <iframe ref=\"iframeRef\" :src=\"iframeSrc\" class=\"filex-cv__frame\" title=\"converter\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.filex-cv__bg {\n position: fixed; inset: 0; z-index: 1000;\n background: rgba(0, 0, 0, 0.55);\n display: flex; align-items: center; justify-content: center;\n}\n.filex-cv {\n width: min(560px, 92vw); max-height: 80vh; overflow: hidden;\n display: flex; flex-direction: column;\n background: var(--fe-bg, #fff); color: var(--fe-text, #1a1f29);\n border: 1px solid var(--fe-border, #e2e6ed); border-radius: 12px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.35);\n}\n.filex-cv__head {\n display: flex; align-items: center; justify-content: space-between;\n padding: 12px 16px; border-bottom: 1px solid var(--fe-border, #e2e6ed);\n}\n.filex-cv__head h3 { margin: 0; font-size: 14px; font-weight: 600; }\n.filex-cv__x { border: 0; background: none; cursor: pointer; font-size: 16px; color: var(--fe-text-muted, #5a6475); }\n.filex-cv__msg { padding: 28px; text-align: center; color: var(--fe-text-muted, #5a6475); }\n.filex-cv__ok { color: #059669; }\n.filex-cv__src { padding: 12px 16px 0; font-size: 13px; color: var(--fe-text-muted, #5a6475); }\n.filex-cv__search {\n margin: 8px 16px; padding: 8px 10px;\n border: 1px solid var(--fe-border, #e2e6ed); border-radius: 8px;\n background: var(--fe-bg-elev, #f7f8fa); color: inherit; font-size: 13px;\n}\n.filex-cv__list {\n flex: 1; overflow-y: auto; padding: 4px 12px 12px;\n display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 8px;\n}\n.filex-cv__fmt {\n display: flex; flex-direction: column; gap: 2px; align-items: flex-start;\n padding: 8px 10px; cursor: pointer; text-align: left;\n border: 1px solid var(--fe-border, #e2e6ed); border-radius: 8px;\n background: var(--fe-bg-elev, #f7f8fa); color: inherit;\n}\n.filex-cv__fmt small { color: var(--fe-text-muted, #5a6475); font-size: 11px; }\n.filex-cv__fmt.is-sel { border-color: #44c878; background: rgba(68, 200, 120, 0.12); }\n.filex-cv__empty { grid-column: 1 / -1; text-align: center; color: var(--fe-text-muted, #5a6475); padding: 16px; }\n.filex-cv__err { padding: 0 16px; color: var(--fe-danger, #dc2626); font-size: 13px; }\n.filex-cv__foot { padding: 12px 16px; border-top: 1px solid var(--fe-border, #e2e6ed); text-align: right; }\n.filex-cv__convert {\n padding: 8px 18px; border: 0; border-radius: 8px; cursor: pointer;\n background: #44c878; color: #03200f; font-weight: 600; font-size: 13px;\n}\n.filex-cv__convert:disabled { opacity: 0.5; cursor: default; }\n.filex-cv__frame { position: absolute; width: 0; height: 0; border: 0; left: -9999px; }\n</style>\n","<script setup lang=\"ts\">\n// Access modal — one popup combining \"İzinler\" (per-user RBAC grants,\n// owner-only) and \"Bağlantı ile paylaş\" (public share link, editor+). Opened\n// from the explorer's unified \"Paylaş / İzinler\" action. The layout is a fixed\n// header/tabs with a single scrollable body so the popup never grows into one\n// long scroll. Styling uses the SFC's --fe-* theme variables (light/dark).\nimport { ref, onMounted, onBeforeUnmount, computed } from 'vue';\nimport type { FileApi, Grant, UserSuggestion } from '../composables/useFileApi';\nimport type { ShareInfo } from '../types/FileNode';\n\nconst props = defineProps<{\n api: FileApi;\n path: string; // adapter://rel of the target item\n isDir?: boolean; // folder → grants cascade; file → no `/…` inheritance hint\n size?: number; // bytes, for the share-mail body (files only)\n locale?: 'tr' | 'en';\n}>();\nconst emit = defineEmits<{ (e: 'close'): void }>();\n\nconst tr = computed(() => (props.locale ?? 'tr') !== 'en');\nfunction L(t: string, e: string): string {\n return tr.value ? t : e;\n}\n\n// Split adapter://rel for a friendlier path chip.\nconst pathParts = computed(() => {\n const m = /^([^:]+):\\/\\/(.*)$/.exec(props.path);\n const adapter = m ? m[1] : '';\n const rel = m ? m[2] : props.path;\n const segs = rel.split('/').filter(Boolean);\n return { adapter, name: segs.length ? segs[segs.length - 1] : adapter, rel };\n});\n\ntype Tab = 'perms' | 'share' | 'drop';\nconst tab = ref<Tab>('perms');\nconst canManage = ref(false); // owner/admin → can see the permissions tab\n\n// ── permissions state ──\nconst loading = ref(true);\nconst err = ref('');\nconst direct = ref<Grant[]>([]);\nconst inherited = ref<Grant[]>([]);\nconst storageRbac = ref(true);\nconst email = ref('');\nconst level = ref<'viewer' | 'editor' | 'owner'>('viewer');\nconst busy = ref(false);\nconst notice = ref('');\nconst noAccount = ref(false);\nconst createRole = ref<'user' | 'viewer'>('user');\nconst inviteResult = ref<{ tempPassword?: string } | null>(null);\nconst suggestions = ref<UserSuggestion[]>([]);\nconst showSuggest = ref(false);\nlet searchTimer: ReturnType<typeof setTimeout> | undefined;\n\nconst levels: Array<{ v: 'viewer' | 'editor' | 'owner'; l: string; d: string }> = [\n { v: 'viewer', l: L('Görüntüleyen', 'Viewer'), d: L('görüntüle + indir', 'view + download') },\n { v: 'editor', l: L('Düzenleyen', 'Editor'), d: L('oku + yaz + sil', 'read + write + delete') },\n { v: 'owner', l: L('Sahip', 'Owner'), d: L('düzenle + izin yönet', 'edit + manage access') },\n];\nfunction levelLabel(v: string): string {\n return levels.find((o) => o.v === v)?.l ?? v;\n}\n\n// ── share state ──\nconst shares = ref<ShareInfo[]>([]);\nconst shareBusy = ref(false);\nconst sharePwd = ref(false);\nconst shareExpiry = ref(0); // days; 0 = never\nconst shareResult = ref<{ url: string; pin?: string | null } | null>(null);\nconst shareErr = ref('');\nconst copied = ref('');\n// prefilled recipient when the owner chose \"share link\" for a no-account email\nconst shareMailTo = ref('');\nconst shareMailBusy = ref(false);\nconst shareMailNotice = ref('');\n\nconst expiryOptions = [\n { v: 0, l: L('Süresiz', 'Never') },\n { v: 1, l: L('1 gün', '1 day') },\n { v: 7, l: L('7 gün', '7 days') },\n { v: 30, l: L('30 gün', '30 days') },\n];\n\n// ── file-drop (public upload link) state ──\nconst dropPwd = ref(false);\nconst dropExpiry = ref(0); // days; 0 = never\nconst dropShowAdv = ref(false);\nconst dropMaxFiles = ref<string>('');\nconst dropMaxSizeMB = ref<string>('');\nconst dropAllowedExt = ref<string>('');\nconst dropAskName = ref(true);\nconst dropBusy = ref(false);\nconst dropErr = ref('');\nconst dropResult = ref<{ url: string; pin?: string | null } | null>(null);\nconst dropMailTo = ref('');\nconst dropMailBusy = ref(false);\nconst dropMailNotice = ref('');\n\n// splitEmails turns a free-text recipient field into a deduped address list —\n// comma / semicolon / whitespace separated, so one input handles many people.\nfunction splitEmails(raw: string): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const part of raw.split(/[,;\\s]+/)) {\n const e = part.trim().toLowerCase();\n if (e && e.includes('@') && !seen.has(e)) {\n seen.add(e);\n out.push(e);\n }\n }\n return out;\n}\n\n// mailResultNotice renders a sent/failed summary from the share-mail response.\nfunction mailResultNotice(res: { sent?: string[]; failed?: string[] }): string {\n const sent = res.sent?.length ?? 0;\n const failed = res.failed?.length ?? 0;\n if (failed === 0) return L(`E-posta gönderildi ✓ (${sent})`, `Email sent ✓ (${sent})`);\n return L(`${sent} gönderildi, ${failed} başarısız`, `${sent} sent, ${failed} failed`);\n}\n\nasync function reload() {\n loading.value = true;\n err.value = '';\n try {\n const r = await props.api.listPermissions(props.path);\n direct.value = r.direct ?? [];\n inherited.value = r.inherited ?? [];\n storageRbac.value = r.storage_rbac;\n canManage.value = true;\n } catch (e) {\n // 403 = caller is editor (not owner): no permissions tab, share only.\n const st = (e as { status?: number }).status;\n if (st === 403) {\n canManage.value = false;\n // Editor (not owner): no permissions tab → fall back to the link tab.\n tab.value = 'share';\n } else {\n err.value = e instanceof Error ? e.message : String(e);\n }\n } finally {\n loading.value = false;\n }\n}\nasync function reloadShares() {\n try {\n const r = await props.api.listShares(props.path);\n shares.value = r.shares ?? [];\n } catch {\n shares.value = [];\n }\n}\nonMounted(async () => {\n await reload();\n await reloadShares();\n});\nonBeforeUnmount(() => {\n if (searchTimer) clearTimeout(searchTimer);\n});\n\nfunction onEmailInput() {\n noAccount.value = false;\n inviteResult.value = null;\n notice.value = '';\n const q = email.value.trim();\n if (searchTimer) clearTimeout(searchTimer);\n if (q.length < 1) {\n suggestions.value = [];\n showSuggest.value = false;\n return;\n }\n searchTimer = setTimeout(async () => {\n try {\n const r = await props.api.searchUsers(q);\n suggestions.value = r.users ?? [];\n showSuggest.value = suggestions.value.length > 0;\n } catch {\n showSuggest.value = false;\n }\n }, 180);\n}\nasync function pickUser(u: UserSuggestion) {\n showSuggest.value = false;\n email.value = u.email;\n let lvl = level.value;\n if (u.role === 'viewer' && lvl !== 'viewer') lvl = 'viewer';\n busy.value = true;\n notice.value = '';\n try {\n await props.api.addPermission({ path: props.path, user_id: u.id, level: lvl, is_dir: !!props.isDir });\n email.value = '';\n suggestions.value = [];\n await reload();\n notice.value = L('Yetki verildi.', 'Access granted.');\n } catch (e) {\n notice.value = e instanceof Error ? e.message : String(e);\n } finally {\n busy.value = false;\n }\n}\nasync function submitEmail() {\n const addr = email.value.trim().toLowerCase();\n if (!addr || !addr.includes('@')) {\n notice.value = L('Geçerli bir e-posta girin.', 'Enter a valid email.');\n return;\n }\n showSuggest.value = false;\n busy.value = true;\n notice.value = '';\n inviteResult.value = null;\n try {\n const res = await props.api.resolveEmail(addr);\n if (res.found && res.user) {\n let lvl = level.value;\n if (res.user.role === 'viewer' && lvl !== 'viewer') lvl = 'viewer';\n await props.api.addPermission({ path: props.path, user_id: res.user.id, level: lvl, is_dir: !!props.isDir });\n email.value = '';\n await reload();\n notice.value = L('Yetki verildi.', 'Access granted.');\n } else {\n noAccount.value = true;\n }\n } catch (e) {\n notice.value = e instanceof Error ? e.message : String(e);\n } finally {\n busy.value = false;\n }\n}\nasync function inviteCreateUser() {\n busy.value = true;\n notice.value = '';\n try {\n const r = await props.api.invitePermission({\n path: props.path, email: email.value.trim().toLowerCase(),\n level: level.value, create_user: true, role: createRole.value, is_dir: !!props.isDir,\n locale: props.locale ?? 'tr',\n });\n inviteResult.value = { tempPassword: r.temp_password };\n notice.value = r.emailed\n ? L('Kullanıcı açıldı, davet e-postası gönderildi.', 'User created, invite emailed.')\n : L('Kullanıcı açıldı. Geçici parolayı iletin.', 'User created. Share the temp password.');\n noAccount.value = false; email.value = '';\n await reload();\n } catch (e) {\n notice.value = e instanceof Error ? e.message : String(e);\n } finally {\n busy.value = false;\n }\n}\n// \"Sadece paylaş\" → jump to the share tab with the address prefilled so the\n// owner creates a link (with their chosen expiry/PIN) and mails it there.\nfunction gotoShareWithMail() {\n shareMailTo.value = email.value.trim().toLowerCase();\n noAccount.value = false;\n notice.value = '';\n tab.value = 'share';\n}\nasync function changeLevel(g: Grant, newLevel: string) {\n if (newLevel === g.level) return;\n busy.value = true;\n try { await props.api.updatePermission(g.id, newLevel); await reload(); }\n catch (e) { notice.value = e instanceof Error ? e.message : String(e); }\n finally { busy.value = false; }\n}\nasync function removeGrant(g: Grant) {\n busy.value = true;\n try { await props.api.deletePermission(g.id); await reload(); }\n catch (e) { notice.value = e instanceof Error ? e.message : String(e); }\n finally { busy.value = false; }\n}\nfunction glabel(g: Grant): string {\n return g.user_display_name || g.user_email || `#${g.user_id}`;\n}\nfunction ginitial(g: Grant): string {\n return (g.user_display_name || g.user_email || '?').charAt(0).toUpperCase();\n}\n\n// ── share actions ──\nfunction expiresAtISO(): string | null {\n if (!shareExpiry.value) return null;\n return new Date(Date.now() + shareExpiry.value * 86400000).toISOString();\n}\nasync function createLink() {\n shareBusy.value = true;\n shareErr.value = '';\n shareResult.value = null;\n shareMailNotice.value = '';\n try {\n const r = await props.api.createShare({\n path: props.path,\n password: sharePwd.value,\n expires_at: expiresAtISO(),\n });\n shareResult.value = { url: r.share.url, pin: r.share.password_pin ?? null };\n await reloadShares();\n } catch (e) {\n shareErr.value = e instanceof Error ? e.message : String(e);\n } finally {\n shareBusy.value = false;\n }\n}\nasync function sendShareMail() {\n const list = splitEmails(shareMailTo.value);\n if (!list.length) {\n shareMailNotice.value = L('Geçerli bir e-posta girin.', 'Enter a valid email.');\n return;\n }\n if (!shareResult.value?.url) return;\n shareMailBusy.value = true;\n shareMailNotice.value = '';\n try {\n const res = await props.api.shareMail({\n path: props.path, emails: list, url: shareResult.value.url,\n pin: shareResult.value.pin ?? undefined,\n expires_days: shareExpiry.value || undefined,\n locale: props.locale ?? 'tr',\n is_dir: !!props.isDir,\n size: props.size,\n });\n shareMailNotice.value = mailResultNotice(res);\n } catch (e) {\n const detail = (e as { detail?: string }).detail ?? '';\n if (detail.includes('not_configured')) {\n shareMailNotice.value = L('SMTP ayarlı/doğrulanmış değil — linki elle iletin.', 'SMTP not set up/verified — share the link manually.');\n } else if (detail.includes('send_failed')) {\n shareMailNotice.value = L('Gönderilemedi (geçici hata) — tekrar deneyin.', 'Send failed (temporary) — please retry.');\n } else {\n shareMailNotice.value = e instanceof Error ? e.message : String(e);\n }\n } finally {\n shareMailBusy.value = false;\n }\n}\n\n// ── file-drop (upload link) actions ──\nfunction dropExpiresAtISO(): string | null {\n if (!dropExpiry.value) return null;\n return new Date(Date.now() + dropExpiry.value * 86400000).toISOString();\n}\nasync function createDropLink() {\n dropBusy.value = true;\n dropErr.value = '';\n dropResult.value = null;\n dropMailNotice.value = '';\n try {\n const drop_settings: Record<string, unknown> = { ask_name: dropAskName.value };\n if (dropMaxFiles.value) drop_settings.max_files = Number(dropMaxFiles.value);\n if (dropMaxSizeMB.value) drop_settings.max_file_size_mb = Number(dropMaxSizeMB.value);\n const exts = dropAllowedExt.value.split(/[,\\s]+/).map((s) => s.trim().replace(/^\\./, '')).filter(Boolean);\n if (exts.length) drop_settings.allowed_ext = exts;\n const r = await props.api.createShare({\n path: props.path,\n kind: 'drop',\n password: dropPwd.value,\n expires_at: dropExpiresAtISO(),\n drop_settings,\n });\n dropResult.value = { url: r.share.url, pin: r.share.password_pin ?? null };\n } catch (e) {\n dropErr.value = e instanceof Error ? e.message : String(e);\n } finally {\n dropBusy.value = false;\n }\n}\nasync function sendDropMail() {\n const list = splitEmails(dropMailTo.value);\n if (!list.length) {\n dropMailNotice.value = L('Geçerli bir e-posta girin.', 'Enter a valid email.');\n return;\n }\n if (!dropResult.value?.url) return;\n dropMailBusy.value = true;\n dropMailNotice.value = '';\n try {\n const res = await props.api.shareMail({\n path: props.path, emails: list, url: dropResult.value.url,\n pin: dropResult.value.pin ?? undefined,\n expires_days: dropExpiry.value || undefined,\n locale: props.locale ?? 'tr',\n is_dir: true,\n mode: 'drop',\n });\n dropMailNotice.value = mailResultNotice(res);\n } catch (e) {\n const detail = (e as { detail?: string }).detail ?? '';\n if (detail.includes('not_configured')) {\n dropMailNotice.value = L('SMTP ayarlı/doğrulanmış değil — linki elle iletin.', 'SMTP not set up/verified — share the link manually.');\n } else {\n dropMailNotice.value = e instanceof Error ? e.message : String(e);\n }\n } finally {\n dropMailBusy.value = false;\n }\n}\nasync function revoke(s: ShareInfo) {\n shareBusy.value = true;\n try { await props.api.revokeShare(s.uuid); await reloadShares(); }\n catch (e) { shareErr.value = e instanceof Error ? e.message : String(e); }\n finally { shareBusy.value = false; }\n}\nfunction copy(text: string, tag = 'url') {\n navigator.clipboard?.writeText(text);\n copied.value = tag;\n setTimeout(() => { if (copied.value === tag) copied.value = ''; }, 1400);\n}\n</script>\n\n<template>\n <div class=\"fx-perm-overlay\" @click.self=\"emit('close')\">\n <div class=\"fx-perm-modal\">\n <header class=\"fx-perm-head\">\n <div class=\"fx-perm-title\">\n <span class=\"fx-perm-ico\" aria-hidden=\"true\">{{ isDir ? '📁' : '📄' }}</span>\n <div class=\"fx-perm-titletext\">\n <h3>{{ L('Paylaş / İzinler', 'Share / Permissions') }}</h3>\n <span class=\"fx-perm-sub\" :title=\"path\">{{ pathParts.name }}<span class=\"fx-perm-subdim\"> · {{ pathParts.adapter }}</span></span>\n </div>\n </div>\n <button class=\"fx-perm-x\" @click=\"emit('close')\" aria-label=\"close\">✕</button>\n </header>\n\n <div class=\"fx-perm-tabs\">\n <button\n v-if=\"canManage\"\n class=\"fx-perm-tab\"\n :class=\"{ 'is-active': tab === 'perms' }\"\n @click=\"tab = 'perms'\"\n >{{ L('Kişiler', 'People') }}</button>\n <button\n class=\"fx-perm-tab\"\n :class=\"{ 'is-active': tab === 'share' }\"\n @click=\"tab = 'share'\"\n >{{ L('Bağlantı', 'Link') }}</button>\n <button\n v-if=\"isDir\"\n class=\"fx-perm-tab\"\n :class=\"{ 'is-active': tab === 'drop' }\"\n @click=\"tab = 'drop'\"\n >{{ L('Dosya İste', 'Request files') }}</button>\n </div>\n\n <div class=\"fx-perm-body\">\n <!-- ───────── Permissions tab ───────── -->\n <template v-if=\"tab === 'perms' && canManage\">\n <div v-if=\"!storageRbac\" class=\"fx-perm-warn\">\n {{ L('Bu diskte RBAC kapalı — izinler yalnızca RBAC açık disklerde geçerli.', 'RBAC is off on this storage — grants only apply when RBAC is enabled.') }}\n </div>\n <div v-if=\"err\" class=\"fx-perm-warn\">{{ err }}</div>\n <div v-if=\"loading\" class=\"fx-perm-muted\">{{ L('Yükleniyor…', 'Loading…') }}</div>\n <template v-else>\n <!-- Add person (primary action, on top) -->\n <div class=\"fx-perm-addcard\">\n <div class=\"fx-perm-add\">\n <div class=\"fx-perm-emailwrap\">\n <input v-model=\"email\" type=\"email\" class=\"fx-perm-input\" autocomplete=\"off\"\n :placeholder=\"L('İsim veya e-posta', 'Name or email')\"\n @input=\"onEmailInput\" @keyup.enter=\"submitEmail\" @focus=\"onEmailInput\" />\n <ul v-if=\"showSuggest\" class=\"fx-perm-suggest\">\n <li v-for=\"u in suggestions\" :key=\"u.id\" @mousedown.prevent=\"pickUser(u)\">\n <span class=\"fx-perm-suggest-av\">{{ (u.display_name || u.email).charAt(0).toUpperCase() }}</span>\n <span class=\"fx-perm-suggest-txt\">\n <span class=\"fx-perm-suggest-name\">{{ u.display_name || u.email }}</span>\n <span class=\"fx-perm-suggest-meta\">{{ u.email }} · {{ u.role }}</span>\n </span>\n </li>\n </ul>\n </div>\n <select v-model=\"level\" class=\"fx-perm-sel\" :title=\"levels.find(o => o.v === level)?.d\">\n <option v-for=\"o in levels\" :key=\"o.v\" :value=\"o.v\">{{ o.l }}</option>\n </select>\n <button class=\"fx-perm-btn fx-perm-btn--primary\" :disabled=\"busy\" @click=\"submitEmail\">\n {{ L('Ekle', 'Add') }}\n </button>\n </div>\n\n <div v-if=\"noAccount\" class=\"fx-perm-invite\">\n <p class=\"fx-perm-muted\">{{ L('Bu e-postada hesap yok. Ne yapmak istersiniz?', 'No account for this email — what next?') }}</p>\n <div class=\"fx-perm-invite-actions\">\n <div class=\"fx-perm-invite-row\">\n <select v-model=\"createRole\" class=\"fx-perm-sel\">\n <option value=\"user\">{{ L('Kullanıcı', 'User') }}</option>\n <option value=\"viewer\">{{ L('Görüntüleyen', 'Viewer') }}</option>\n </select>\n <button class=\"fx-perm-btn fx-perm-btn--primary\" :disabled=\"busy\" @click=\"inviteCreateUser\">\n {{ L('Kullanıcı oluştur + yetki ver', 'Create user + grant') }}\n </button>\n </div>\n <button class=\"fx-perm-btn fx-perm-btn--ghost\" :disabled=\"busy\" @click=\"gotoShareWithMail\">\n {{ L('Sadece paylaşım linki gönder →', 'Just send a share link →') }}\n </button>\n </div>\n </div>\n <div v-if=\"notice\" class=\"fx-perm-notice\">{{ notice }}</div>\n <div v-if=\"inviteResult?.tempPassword\" class=\"fx-perm-reveal\">\n {{ L('Geçici parola:', 'Temp password:') }} <code>{{ inviteResult.tempPassword }}</code>\n </div>\n </div>\n\n <!-- People with access -->\n <div class=\"fx-perm-section\">\n <h4>{{ L('Erişimi olanlar', 'People with access') }}</h4>\n <div v-if=\"!direct.length && !inherited.length\" class=\"fx-perm-empty\">\n {{ L('Henüz kimseyle paylaşılmadı.', 'Not shared with anyone yet.') }}\n </div>\n <div v-for=\"g in direct\" :key=\"'d' + g.id\" class=\"fx-perm-person\">\n <span class=\"fx-perm-av\">{{ ginitial(g) }}</span>\n <span class=\"fx-perm-user\" :title=\"g.user_email\">{{ glabel(g) }}</span>\n <select class=\"fx-perm-sel fx-perm-sel--sm\" :value=\"g.level\"\n @change=\"changeLevel(g, ($event.target as HTMLSelectElement).value)\">\n <option v-for=\"o in levels\" :key=\"o.v\" :value=\"o.v\">{{ o.l }}</option>\n </select>\n <button class=\"fx-perm-del\" :disabled=\"busy\" :title=\"L('Kaldır', 'Remove')\" @click=\"removeGrant(g)\">✕</button>\n </div>\n <div v-for=\"g in inherited\" :key=\"'i' + g.id\" class=\"fx-perm-person fx-perm-inh\">\n <span class=\"fx-perm-av fx-perm-av--dim\">{{ ginitial(g) }}</span>\n <span class=\"fx-perm-user\" :title=\"g.user_email\">{{ glabel(g) }}</span>\n <span class=\"fx-perm-badge\">{{ levelLabel(g.level) }}</span>\n <span class=\"fx-perm-from\" :title=\"L('Üst klasörden gelir', 'Inherited from') + ': ' + (g.path_prefix || '/')\">\n ↳ {{ g.path_prefix || '/' }}\n </span>\n </div>\n </div>\n </template>\n </template>\n\n <!-- ───────── Share tab ───────── -->\n <template v-if=\"tab === 'share'\">\n <div class=\"fx-perm-addcard\">\n <div class=\"fx-perm-share-opts\">\n <label class=\"fx-perm-check\">\n <input type=\"checkbox\" v-model=\"sharePwd\" />\n {{ L('PIN ile koru', 'Protect with a PIN') }}\n </label>\n <label class=\"fx-perm-expiry\">\n <span class=\"fx-perm-muted\">{{ L('Süre', 'Expiry') }}</span>\n <select v-model.number=\"shareExpiry\" class=\"fx-perm-sel fx-perm-sel--sm\">\n <option v-for=\"o in expiryOptions\" :key=\"o.v\" :value=\"o.v\">{{ o.l }}</option>\n </select>\n </label>\n <button class=\"fx-perm-btn fx-perm-btn--primary\" :disabled=\"shareBusy\" @click=\"createLink\">\n {{ L('Bağlantı oluştur', 'Create link') }}\n </button>\n </div>\n\n <div v-if=\"shareErr\" class=\"fx-perm-warn\">{{ shareErr }}</div>\n\n <div v-if=\"shareResult\" class=\"fx-perm-result\">\n <div class=\"fx-perm-linkrow\">\n <a :href=\"shareResult.url\" target=\"_blank\" rel=\"noopener\" class=\"fx-perm-link\">{{ shareResult.url }}</a>\n <button class=\"fx-perm-btn fx-perm-btn--sm\" @click=\"copy(shareResult.url, 'new')\">\n {{ copied === 'new' ? L('Kopyalandı ✓', 'Copied ✓') : L('Kopyala', 'Copy') }}\n </button>\n </div>\n <div v-if=\"shareResult.pin\" class=\"fx-perm-pin\">\n <span>PIN: <code>{{ shareResult.pin }}</code></span>\n <button class=\"fx-perm-btn fx-perm-btn--sm\" @click=\"copy(shareResult.pin, 'sharepin')\">\n {{ copied === 'sharepin' ? L('Kopyalandı ✓', 'Copied ✓') : L('Kopyala', 'Copy') }}\n </button>\n </div>\n\n <!-- send by email (one or more, comma/space separated) -->\n <div class=\"fx-perm-mailrow\">\n <input v-model=\"shareMailTo\" type=\"text\" class=\"fx-perm-input\" autocomplete=\"off\"\n :placeholder=\"L('e-posta(lar) — virgülle ayırın', 'email(s) — comma separated')\" @keyup.enter=\"sendShareMail\" />\n <button class=\"fx-perm-btn\" :disabled=\"shareMailBusy\" @click=\"sendShareMail\">\n {{ L('Gönder', 'Send') }}\n </button>\n </div>\n <div v-if=\"shareMailNotice\" class=\"fx-perm-notice\">{{ shareMailNotice }}</div>\n </div>\n <p v-else-if=\"shareMailTo\" class=\"fx-perm-hint\">\n {{ L('Aşağıdan bir bağlantı oluşturun, ardından', 'Create a link below, then it will be sent to') }}\n <strong>{{ shareMailTo }}</strong> {{ L('adresine gönderin.', '.') }}\n </p>\n </div>\n\n <div class=\"fx-perm-section\">\n <h4>{{ L('Mevcut bağlantılar', 'Existing links') }}</h4>\n <div v-if=\"!shares.length\" class=\"fx-perm-empty\">{{ L('Yok', 'None') }}</div>\n <div v-for=\"s in shares\" :key=\"s.uuid\" class=\"fx-perm-person\">\n <span class=\"fx-perm-user fx-perm-link\" :title=\"s.url\">{{ s.url }}</span>\n <button class=\"fx-perm-btn fx-perm-btn--sm\" @click=\"copy(s.url, s.uuid)\">\n {{ copied === s.uuid ? L('✓', '✓') : L('Kopyala', 'Copy') }}\n </button>\n <button class=\"fx-perm-del\" :disabled=\"shareBusy\" :title=\"L('İptal', 'Revoke')\" @click=\"revoke(s)\">✕</button>\n </div>\n </div>\n </template>\n\n <!-- ───────── File-drop (upload link) tab ───────── -->\n <template v-if=\"tab === 'drop'\">\n <div class=\"fx-perm-addcard\">\n <p class=\"fx-perm-muted fx-perm-dropintro\">\n {{ L('Bu klasöre herkesin dosya YÜKLEYEBİLECEĞİ herkese açık bir bağlantı. Yükleyenler klasördeki mevcut dosyaları göremez.', 'A public link that lets anyone UPLOAD files into this folder. Uploaders never see the folder\\'s existing files.') }}\n </p>\n <div class=\"fx-perm-share-opts\">\n <label class=\"fx-perm-check\">\n <input type=\"checkbox\" v-model=\"dropPwd\" />\n {{ L('PIN ile koru', 'Protect with a PIN') }}\n </label>\n <label class=\"fx-perm-expiry\">\n <span class=\"fx-perm-muted\">{{ L('Süre', 'Expiry') }}</span>\n <select v-model.number=\"dropExpiry\" class=\"fx-perm-sel fx-perm-sel--sm\">\n <option v-for=\"o in expiryOptions\" :key=\"o.v\" :value=\"o.v\">{{ o.l }}</option>\n </select>\n </label>\n <button class=\"fx-perm-btn fx-perm-btn--primary\" :disabled=\"dropBusy\" @click=\"createDropLink\">\n {{ L('Bağlantı oluştur', 'Create link') }}\n </button>\n </div>\n\n <button type=\"button\" class=\"fx-perm-btn fx-perm-btn--ghost fx-perm-advtoggle\" @click=\"dropShowAdv = !dropShowAdv\">\n {{ dropShowAdv ? L('Gelişmiş ▲', 'Advanced ▲') : L('Gelişmiş ▼', 'Advanced ▼') }}\n </button>\n <div v-if=\"dropShowAdv\" class=\"fx-perm-adv\">\n <label class=\"fx-perm-adv-row\">\n <span class=\"fx-perm-muted\">{{ L('En fazla dosya', 'Max files') }}</span>\n <input v-model=\"dropMaxFiles\" type=\"number\" min=\"1\" class=\"fx-perm-input fx-perm-input--sm\" placeholder=\"20\" />\n </label>\n <label class=\"fx-perm-adv-row\">\n <span class=\"fx-perm-muted\">{{ L('Dosya başı MB', 'MB / file') }}</span>\n <input v-model=\"dropMaxSizeMB\" type=\"number\" min=\"1\" class=\"fx-perm-input fx-perm-input--sm\" placeholder=\"500\" />\n </label>\n <label class=\"fx-perm-adv-row\">\n <span class=\"fx-perm-muted\">{{ L('İzinli türler', 'Allowed types') }}</span>\n <input v-model=\"dropAllowedExt\" type=\"text\" class=\"fx-perm-input fx-perm-input--sm\" :placeholder=\"L('hepsi (örn. pdf, jpg)', 'all (e.g. pdf, jpg)')\" />\n </label>\n <label class=\"fx-perm-check\">\n <input type=\"checkbox\" v-model=\"dropAskName\" />\n {{ L('Yükleyenin adını sor', 'Ask uploader name') }}\n </label>\n </div>\n\n <div v-if=\"dropErr\" class=\"fx-perm-warn\">{{ dropErr }}</div>\n\n <div v-if=\"dropResult\" class=\"fx-perm-result\">\n <div class=\"fx-perm-linkrow\">\n <a :href=\"dropResult.url\" target=\"_blank\" rel=\"noopener\" class=\"fx-perm-link\">{{ dropResult.url }}</a>\n <button class=\"fx-perm-btn fx-perm-btn--sm\" @click=\"copy(dropResult.url, 'drop')\">\n {{ copied === 'drop' ? L('Kopyalandı ✓', 'Copied ✓') : L('Kopyala', 'Copy') }}\n </button>\n </div>\n <div v-if=\"dropResult.pin\" class=\"fx-perm-pin\">\n <span>PIN: <code>{{ dropResult.pin }}</code></span>\n <button class=\"fx-perm-btn fx-perm-btn--sm\" @click=\"copy(dropResult.pin, 'droppin')\">\n {{ copied === 'droppin' ? L('Kopyalandı ✓', 'Copied ✓') : L('Kopyala', 'Copy') }}\n </button>\n </div>\n\n <!-- email the upload link to one or more people -->\n <div class=\"fx-perm-mailrow\">\n <input v-model=\"dropMailTo\" type=\"text\" class=\"fx-perm-input\" autocomplete=\"off\"\n :placeholder=\"L('e-posta(lar) — virgülle ayırın', 'email(s) — comma separated')\" @keyup.enter=\"sendDropMail\" />\n <button class=\"fx-perm-btn\" :disabled=\"dropMailBusy\" @click=\"sendDropMail\">\n {{ L('Gönder', 'Send') }}\n </button>\n </div>\n <div v-if=\"dropMailNotice\" class=\"fx-perm-notice\">{{ dropMailNotice }}</div>\n </div>\n </div>\n </template>\n </div>\n </div>\n </div>\n</template>\n\n<style scoped>\n.fx-perm-overlay {\n position: fixed; inset: 0; background: rgba(0, 0, 0, 0.5);\n display: flex; align-items: center; justify-content: center; z-index: 10000;\n font-family: var(--fe-font);\n}\n.fx-perm-modal {\n display: flex; flex-direction: column;\n background: var(--fe-bg); color: var(--fe-text);\n width: min(520px, 94vw); max-height: 86vh;\n border: 1px solid var(--fe-border); border-radius: var(--fe-radius-lg, 14px);\n box-shadow: var(--fe-shadow); font-size: 14px; overflow: hidden;\n}\n/* header + tabs are fixed; only the body scrolls */\n.fx-perm-head {\n display: flex; align-items: center; justify-content: space-between; gap: 10px;\n padding: 16px 18px 12px; flex: none;\n}\n.fx-perm-title { display: flex; align-items: center; gap: 10px; min-width: 0; }\n.fx-perm-ico { font-size: 22px; line-height: 1; }\n.fx-perm-titletext { display: flex; flex-direction: column; min-width: 0; }\n.fx-perm-title h3 { margin: 0; font-size: 15px; font-weight: 600; color: var(--fe-text); }\n.fx-perm-sub {\n font-size: 12px; color: var(--fe-text); max-width: 340px;\n overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\n}\n.fx-perm-subdim { color: var(--fe-text-muted); }\n.fx-perm-x {\n background: none; border: none; font-size: 17px; cursor: pointer;\n color: var(--fe-text-muted); flex: none; line-height: 1; padding: 2px 4px; border-radius: 6px;\n}\n.fx-perm-x:hover { color: var(--fe-text); background: var(--fe-bg-hover); }\n.fx-perm-tabs { display: flex; gap: 2px; padding: 0 18px; border-bottom: 1px solid var(--fe-border); flex: none; }\n.fx-perm-tab {\n background: none; border: none; border-bottom: 2px solid transparent;\n padding: 8px 12px; cursor: pointer; color: var(--fe-text-muted); font-size: 13px;\n font-family: inherit; font-weight: 500;\n}\n.fx-perm-tab:hover { color: var(--fe-text); }\n.fx-perm-tab.is-active { color: var(--fe-primary); border-bottom-color: var(--fe-primary); }\n.fx-perm-body { flex: 1 1 auto; overflow-y: auto; padding: 14px 18px 18px; }\n\n.fx-perm-addcard {\n padding: 12px; border-radius: var(--fe-radius-md, 10px);\n background: var(--fe-bg-elev); border: 1px solid var(--fe-border);\n}\n.fx-perm-section { margin-top: 16px; }\n.fx-perm-section h4 {\n margin: 0 0 8px; font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--fe-text-muted);\n}\n.fx-perm-empty { color: var(--fe-text-muted); font-size: 13px; padding: 8px 2px; }\n\n/* person rows */\n.fx-perm-person { display: flex; align-items: center; gap: 10px; padding: 7px 2px; }\n.fx-perm-person + .fx-perm-person { border-top: 1px solid var(--fe-border); }\n.fx-perm-inh { color: var(--fe-text-muted); }\n.fx-perm-av {\n width: 28px; height: 28px; flex: none; border-radius: 50%;\n display: flex; align-items: center; justify-content: center;\n background: var(--fe-primary); color: var(--fe-text-on-primary, #fff);\n font-size: 12px; font-weight: 600;\n}\n.fx-perm-av--dim { background: var(--fe-bg-hover); color: var(--fe-text-muted); }\n.fx-perm-user { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--fe-text); min-width: 0; }\n.fx-perm-from { font-size: 11px; color: var(--fe-text-muted); white-space: nowrap; }\n.fx-perm-badge {\n font-size: 11px; padding: 2px 9px; border-radius: 999px;\n background: var(--fe-bg-hover); color: var(--fe-text);\n}\n\n/* inputs / selects / buttons */\n.fx-perm-sel, .fx-perm-input {\n padding: 7px 9px; border-radius: var(--fe-radius-sm, 7px); border: 1px solid var(--fe-border);\n background: var(--fe-bg); color: var(--fe-text); font-size: 13px; font-family: inherit;\n}\n.fx-perm-sel--sm { padding: 5px 7px; font-size: 12px; }\n.fx-perm-sel:focus, .fx-perm-input:focus { outline: none; border-color: var(--fe-primary); }\n.fx-perm-add { display: flex; gap: 8px; align-items: stretch; }\n.fx-perm-emailwrap { position: relative; flex: 1; min-width: 120px; }\n.fx-perm-input { width: 100%; box-sizing: border-box; }\n.fx-perm-suggest {\n position: absolute; top: calc(100% + 3px); left: 0; right: 0; z-index: 5; margin: 0; padding: 4px;\n list-style: none; background: var(--fe-bg); border: 1px solid var(--fe-border);\n border-radius: var(--fe-radius-sm, 7px); box-shadow: var(--fe-shadow); max-height: 210px; overflow: auto;\n}\n.fx-perm-suggest li { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border-radius: 6px; cursor: pointer; }\n.fx-perm-suggest li:hover { background: var(--fe-bg-hover); }\n.fx-perm-suggest-av {\n width: 24px; height: 24px; flex: none; border-radius: 50%; display: flex; align-items: center; justify-content: center;\n background: var(--fe-bg-hover); color: var(--fe-text); font-size: 11px; font-weight: 600;\n}\n.fx-perm-suggest-txt { display: flex; flex-direction: column; min-width: 0; }\n.fx-perm-suggest-name { color: var(--fe-text); font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.fx-perm-suggest-meta { color: var(--fe-text-muted); font-size: 11px; }\n.fx-perm-check { display: inline-flex; gap: 6px; align-items: center; font-size: 13px; color: var(--fe-text); cursor: pointer; }\n.fx-perm-btn {\n padding: 7px 13px; border-radius: var(--fe-radius-sm, 7px); border: 1px solid var(--fe-border);\n background: var(--fe-bg); color: var(--fe-text); font-size: 13px; font-family: inherit; cursor: pointer; white-space: nowrap;\n}\n.fx-perm-btn:hover:not(:disabled) { background: var(--fe-bg-hover); }\n.fx-perm-btn:disabled { opacity: 0.55; cursor: default; }\n.fx-perm-btn--sm { padding: 5px 10px; font-size: 12px; }\n.fx-perm-btn--primary { background: var(--fe-primary); border-color: var(--fe-primary); color: var(--fe-text-on-primary, #fff); }\n.fx-perm-btn--primary:hover:not(:disabled) { background: var(--fe-primary-hover, var(--fe-primary)); filter: brightness(1.05); }\n.fx-perm-btn--ghost { background: none; border-color: transparent; color: var(--fe-primary); padding-left: 2px; }\n.fx-perm-btn--ghost:hover:not(:disabled) { background: none; text-decoration: underline; }\n.fx-perm-del { background: none; border: none; color: var(--fe-danger); cursor: pointer; font-size: 14px; flex: none; padding: 2px 4px; }\n.fx-perm-del:hover:not(:disabled) { filter: brightness(1.15); }\n\n/* invite sub-flow */\n.fx-perm-invite {\n margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--fe-border);\n}\n.fx-perm-invite-actions { display: flex; flex-direction: column; gap: 8px; margin-top: 6px; }\n.fx-perm-invite-row { display: flex; gap: 8px; align-items: stretch; }\n.fx-perm-invite-row .fx-perm-btn--primary { flex: 1; }\n\n/* share result */\n.fx-perm-share-opts { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }\n.fx-perm-expiry { display: inline-flex; gap: 6px; align-items: center; font-size: 13px; }\n.fx-perm-share-opts .fx-perm-btn--primary { margin-left: auto; }\n.fx-perm-result { margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--fe-border); }\n.fx-perm-linkrow { display: flex; gap: 8px; align-items: center; }\n.fx-perm-link { color: var(--fe-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; min-width: 0; text-decoration: none; }\n.fx-perm-link:hover { text-decoration: underline; }\n.fx-perm-pin { margin: 8px 0 0; font-size: 13px; color: var(--fe-text); display: flex; align-items: center; gap: 8px; }\n.fx-perm-pin code, .fx-perm-reveal code { font-family: var(--fe-font-mono, monospace); background: var(--fe-bg-hover); padding: 1px 6px; border-radius: 5px; }\n.fx-perm-mailrow { display: flex; gap: 8px; margin-top: 10px; }\n.fx-perm-mailrow .fx-perm-input { flex: 1; }\n.fx-perm-hint { font-size: 13px; color: var(--fe-text-muted); margin: 10px 0 0; }\n\n/* file-drop tab */\n.fx-perm-dropintro { margin: 0 0 12px; line-height: 1.4; }\n.fx-perm-advtoggle { margin-top: 10px; padding-left: 2px; }\n.fx-perm-adv {\n margin-top: 8px; padding-top: 10px; border-top: 1px dashed var(--fe-border);\n display: flex; flex-direction: column; gap: 8px;\n}\n.fx-perm-adv-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; font-size: 13px; }\n.fx-perm-input--sm { width: 130px; padding: 5px 8px; font-size: 12px; }\n\n.fx-perm-warn {\n background: rgba(245, 158, 11, 0.14); border: 1px solid rgba(245, 158, 11, 0.4);\n border-radius: var(--fe-radius-sm, 7px); padding: 8px 10px; font-size: 13px; margin-bottom: 10px; color: var(--fe-text);\n}\n.fx-perm-notice { margin-top: 8px; font-size: 13px; color: var(--fe-text-muted); }\n.fx-perm-reveal { margin-top: 8px; font-size: 13px; word-break: break-all; color: var(--fe-text); }\n.fx-perm-muted { color: var(--fe-text-muted); font-size: 13px; }\n</style>\n","<script setup lang=\"ts\">\n/**\n * FileExplorer — the public Vue component, panel + PWA + standalone use.\n *\n * Orchestrates:\n * - Directory listing (useFileApi)\n * - Chunked multipart upload (useUploadChunked) + drag & drop\n * - Selection + keyboard shortcuts\n * - Context menu (Teleport-based) with per-target actions\n * - Modal flows: newFolder / rename / delete / share / preview\n * - Eager Monaco preload so the code-edit path is snappy\n *\n * All backend endpoints arrive via the `config` prop. Auth is bearer\n * (PWA / OIDC) / CSRF (panel) / basic / none — `useFileApi` swallows\n * the difference.\n */\nimport { computed, customRef, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport type { ExplorerConfig } from './types/ExplorerConfig';\nimport type {\n FileNode,\n ShareInfo,\n ViewMode,\n ClipboardState,\n Capabilities,\n} from './types/FileNode';\nimport { isExternalUsable } from './types/FileNode';\nimport { useFileApi } from './composables/useFileApi';\nimport { useUploadChunked, type UploadJob } from './composables/useUploadChunked';\nimport { useSelection } from './composables/useSelection';\nimport { useKeyboardShortcuts } from './composables/useKeyboardShortcuts';\nimport { useLocale } from './composables/useLocale';\nimport { usePendingOps, type PendingOp } from './composables/usePendingOps';\nimport { preloadEditor } from './composables/useMonacoLoader';\n\nimport Toolbar, { type SelectionMode } from './components/Toolbar.vue';\nimport StarButton from './components/StarButton.vue';\nimport TagPicker from './components/TagPicker.vue';\nimport RecentlyOpened from './components/RecentlyOpened.vue';\nimport Breadcrumb from './components/Breadcrumb.vue';\nimport ListView from './components/ListView.vue';\nimport GridView from './components/GridView.vue';\nimport ContextMenu, { type ContextAction } from './components/ContextMenu.vue';\nimport UploadProgress from './components/UploadProgress.vue';\nimport PendingOpsTray from './components/PendingOpsTray.vue';\n\nimport NewFolderModal from './modals/NewFolderModal.vue';\nimport RenameModal from './modals/RenameModal.vue';\nimport DeleteConfirmModal from './modals/DeleteConfirmModal.vue';\nimport ShareModal from './modals/ShareModal.vue';\nimport PreviewModal from './modals/PreviewModal.vue';\nimport ConvertModal from './modals/ConvertModal.vue';\nimport PermissionsModal from './modals/PermissionsModal.vue';\n\nconst props = defineProps<{\n config: ExplorerConfig;\n}>();\n\nconst emit = defineEmits<{\n (e: 'share-created', payload: { path: string; url: string; pin: string | null }): void;\n (e: 'file-opened', file: { path: string; basename: string }): void;\n (e: 'error', err: { message: string; context?: unknown }): void;\n (e: 'upload-progress', p: { uploadId: string; percent: number; done: boolean }): void;\n (\n e: 'selection-change',\n items: Array<{ path: string; basename: string; type: 'file' | 'dir' }>,\n ): void;\n}>();\n\n// --------------------------------------------------------------------\n// State\n// --------------------------------------------------------------------\n\nconst api = useFileApi(props.config);\nconst chunked = useUploadChunked(props.config, api);\nconst pendingOps = usePendingOps(props.config, api, {\n onSettled: (op: PendingOp) => {\n if (op.status === 'error') {\n flashToast(op.error_message || 'İşlem başarısız');\n } else {\n const verb =\n op.op_type === 'copy'\n ? 'Kopyalandı'\n : op.op_type === 'move'\n ? 'Taşındı'\n : 'Silindi';\n flashToast(`${verb} (${op.progress_total})`);\n }\n void load();\n },\n});\n\nconst loading = ref(false);\n// rootPath confinement (UX): when set, the explorer treats this folder as its\n// floor — it opens there, never lists the drives root, and can't navigate\n// above it. Security is enforced server-side (X-Filex-Root / token root scope);\n// this is purely the clean-embed presentation. `rootFloor` is the virtual form\n// (`<storage>/<rel>`) used for path comparisons in multi-storage mode.\nconst rootPathProp = (props.config.rootPath || '').trim(); // qualified `<adapter>://<rel>`\nconst rootFloor = rootPathProp.replace('://', '/').replace(/^\\/+|\\/+$/g, '');\nconst initialFloorPath = rootFloor || props.config.initialPath || '';\nconst currentPath = ref<string>(initialFloorPath);\nconst adapter = ref<string>(props.config.defaultAdapter || 'brf');\nconst dirname = ref<string>(initialFloorPath);\nconst files = ref<FileNode[]>([]);\n// RBAC effective level for the current directory ('' = ACL not enforced on\n// this storage → no gating). Drives which write/manage actions are offered.\nconst dirPerm = ref<string>('');\n\nconst VIEW_MODE_KEY = 'brf-file-explorer:view-mode';\nconst viewMode = customRef<ViewMode>((track, trigger) => {\n let value: ViewMode = (() => {\n try {\n const stored = localStorage.getItem(VIEW_MODE_KEY);\n if (stored === 'list' || stored === 'grid') return stored;\n } catch {\n /* private mode */\n }\n return props.config.viewMode ?? 'list';\n })();\n return {\n get() {\n track();\n return value;\n },\n set(next) {\n if (next === value) return;\n value = next;\n try {\n localStorage.setItem(VIEW_MODE_KEY, next);\n } catch {\n /* quota */\n }\n trigger();\n },\n };\n});\nconst searchQuery = ref('');\n// trashMode — true while viewing the filex trash (soft-deleted nodes from the\n// backend trash endpoint), entered by opening the virtual `.trash` row and\n// exited by any normal navigation (load() resets it). Replaces a brittle\n// `currentPath.startsWith('fileman/.trash')` check that never matched the\n// filex backend's storage layout, so trash always looked empty.\nconst trashMode = ref(false);\n// The storage the trash view was entered from, so \"up\" returns there (not the\n// global root). Set in loadTrash().\nconst trashOrigin = ref<string>('');\nconst trashActive = computed(() => trashMode.value);\nconst locale = computed(() => props.config.locale || 'tr');\n\n// canGoUp/goUp — toolbar's \"↑ Up one level\" button. In single-storage\n// mode \"\" means the storage root; in multi-storage mode \"\" means\n// the global root (storage list). Both → no parent → button hidden.\nconst canGoUp = computed(() => {\n const p = (currentPath.value ?? '').replace(/^\\/+|\\/+$/g, '');\n if (rootFloor && p === rootFloor) return false; // at the confined floor — nowhere above\n return p.length > 0;\n});\n\n// True when the explorer is showing the synthetic storage list and\n// there's no real backend folder to mutate. New Folder / Upload /\n// Paste are hidden in this state.\nconst atVirtualRoot = computed(() => {\n if (!multiStorageRoot.value) return false;\n return !((currentPath.value ?? '').replace(/^\\/+|\\/+$/g, ''));\n});\n\nfunction goUp() {\n // Leaving the trash view returns to the storage it was opened from, not the\n // global storage-list root.\n if (trashMode.value) {\n void load(trashOrigin.value);\n return;\n }\n const cur = (currentPath.value ?? '').replace(/^\\/+|\\/+$/g, '');\n if (!cur || cur === rootFloor) return;\n const idx = cur.lastIndexOf('/');\n let parent = idx === -1 ? '' : cur.slice(0, idx);\n // Never step above the confined floor.\n if (rootFloor && !(parent === rootFloor || parent.startsWith(rootFloor + '/'))) parent = rootFloor;\n void load(parent);\n}\n\nconst { t } = useLocale(locale);\n\nconst selection = useSelection(() => files.value);\nwatch(\n () => [...selection.selected.value],\n () => {\n emit(\n 'selection-change',\n selection.nodes.value.map((n) => ({ path: n.path, basename: n.basename, type: n.type })),\n );\n },\n);\n\nconst clipboard = ref<ClipboardState>({ mode: null, items: [], sourcePath: null });\n\nconst capabilitiesData = ref<Capabilities | null>(null);\n\n// Creative UI state: starred / tags / recently-opened. The component\n// helpers (StarButton, TagPicker, RecentlyOpened) handle their own\n// API calls — the explorer just tracks the cross-row state needed to\n// render inline stars and keep the recents tray in sync.\nconst starredIds = ref(new Set<number>());\nconst showRecents = ref(false);\nconst showTagPicker = ref(false);\nconst tagPickerNode = ref<FileNode | null>(null);\nconst recentRefreshKey = ref(0);\n\nasync function loadStarred() {\n try {\n const headers = await buildAuthHeaders();\n const base = props.config.apiBase ?? '';\n const res = await fetch(`${base}/api/files/manager/star/list?limit=500`, {\n headers,\n credentials: 'include',\n });\n if (!res.ok) return;\n const body = await res.json();\n const rows: { id?: number }[] = Array.isArray(body)\n ? body\n : Array.isArray(body?.entries)\n ? body.entries\n : Array.isArray(body?.nodes)\n ? body.nodes\n : [];\n starredIds.value = new Set(rows.map((n) => n.id).filter((id): id is number => typeof id === 'number'));\n } catch {\n // Silent — backend may be older without the meta routes.\n }\n}\n\nfunction onStarChange(n: FileNode, value: boolean) {\n if (typeof n.id !== 'number') return;\n const next = new Set(starredIds.value);\n if (value) next.add(n.id);\n else next.delete(n.id);\n starredIds.value = next;\n}\n\nasync function markRecent(n: FileNode) {\n if (typeof n.id !== 'number') return;\n try {\n const base = props.config.apiBase ?? '';\n await fetch(`${base}/api/files/manager/recent`, {\n method: 'POST',\n headers: await buildAuthHeaders({ 'Content-Type': 'application/json' }),\n credentials: 'include',\n body: JSON.stringify({ node_id: n.id }),\n });\n recentRefreshKey.value += 1;\n } catch {\n // Silent — the open succeeds, recent tracking is best-effort.\n }\n}\n\nfunction openTagPickerFor(n: FileNode) {\n if (typeof n.id !== 'number') return;\n tagPickerNode.value = n;\n showTagPicker.value = true;\n}\n\nfunction onRecentOpen(entry: { id: number; storage_id?: number; path: string; name: string }) {\n // RecentlyOpened emits the bare row — synthesize a FileNode shaped\n // enough for openNode to route into the editor / preview.\n const node = {\n type: 'file',\n path: entry.path,\n basename: entry.name,\n extension: (entry.name.split('.').pop() || '').toLowerCase(),\n id: entry.id,\n } as unknown as FileNode;\n showRecents.value = false;\n openNode(node);\n}\n\n// Resolution order for each external viewer: explicit config override → live\n// backend probe. The probe is the source of truth: an operator can flip the\n// service \"on\" but if last_check failed (state='error') we still hide the\n// entry so users don't get 503s on click. Explicit config wins because\n// embedders sometimes terminate TLS in front of filex and the backend can't\n// see the public URL.\nconst effectiveOnlyOfficeBase = computed<string | null>(() => {\n if (props.config.onlyOfficeBase) return props.config.onlyOfficeBase;\n const ext = capabilitiesData.value?.external?.onlyoffice;\n if (ext && !isExternalUsable(ext)) return null;\n return capabilitiesData.value?.onlyoffice_url || null;\n});\n\nconst effectiveOnlyOfficeConfigEndpoint = computed<string | null>(() => {\n if (!effectiveOnlyOfficeBase.value) return null;\n return api.endpoints.onlyOfficeConfig || null;\n});\n\nconst effectiveDrawioUrl = computed<string | null>(() => {\n const override = props.config.drawioUrl || props.config.drawioBase;\n if (override) return override;\n const ext = capabilitiesData.value?.external?.drawio;\n if (ext && !isExternalUsable(ext)) return null;\n return capabilitiesData.value?.drawio_url || null;\n});\n\n// Universal converter (p2r3/convert fork). convert_url is only populated by\n// the backend when the \"convert\" external service is enabled, so a simple\n// presence check is enough gating.\nconst effectiveConvertUrl = computed<string | null>(\n () => props.config.convertBase || capabilitiesData.value?.convert_url || null,\n);\n\n// Upload\nconst uploadJobs = ref<UploadJob[]>([]);\nconst fileInputEl = ref<HTMLInputElement | null>(null);\n\n// Modals\nconst showNewFolder = ref(false);\nconst showRename = ref(false);\nconst showDelete = ref(false);\nconst showShare = ref(false);\nconst showPreview = ref(false);\nconst renameTarget = ref<FileNode | null>(null);\nconst shareTarget = ref<FileNode | null>(null);\nconst activeShare = ref<(ShareInfo & { url: string; filename?: string }) | null>(null);\nconst previewTarget = ref<FileNode | null>(null);\nconst previewMode = ref<'edit' | 'view'>('edit');\nconst showConvert = ref(false);\nconst convertTarget = ref<FileNode | null>(null);\nconst showPerm = ref(false);\nconst permTarget = ref<FileNode | null>(null);\n\n// RBAC helpers. '' means ACL is not enforced on this storage → full access\n// (the pre-RBAC default). Otherwise 'editor'/'owner' may write; only 'owner'\n// manages permissions. Enforcement is server-side; this just shapes the menu.\nfunction permCanEdit(p: string | undefined): boolean {\n // undefined = ACL not enforced (dev / unwired) → full access. In production\n // the backend always sends a level; 'none'/'viewer' cannot write, only\n // 'editor'/'owner' can.\n return p === undefined || p === 'editor' || p === 'owner';\n}\nfunction permIsOwner(p: string | undefined): boolean {\n return p === 'owner';\n}\n// Effective perm for a selection: a single entry's own perm (falls back to the\n// directory perm), else the directory perm for multi-select / background.\nfunction selPerm(sel: FileNode[]): string {\n if (sel.length === 1 && typeof sel[0]?.perm === 'string') return sel[0].perm as string;\n return dirPerm.value;\n}\n// Can the current user write into the directory being viewed? Gates the\n// toolbar New Folder / Upload / Paste + drag-drop upload.\nconst canWriteHere = computed(() => permCanEdit(dirPerm.value));\n\n// Context menu\nconst ctxRef = ref<InstanceType<typeof ContextMenu> | null>(null);\nconst rootEl = ref<HTMLElement | null>(null);\nconst toolbarRef = ref<InstanceType<typeof Toolbar> | null>(null);\n\n// Toast (tiny, no lib)\nconst toast = ref<string | null>(null);\nlet toastTimer: ReturnType<typeof setTimeout> | undefined;\nfunction flashToast(msg: string) {\n toast.value = msg;\n if (toastTimer) clearTimeout(toastTimer);\n toastTimer = setTimeout(() => (toast.value = null), 2500);\n}\n\n// --------------------------------------------------------------------\n// Data loading\n// --------------------------------------------------------------------\n\n// multiStorageRoot — when on, \"/\" is a virtual folder listing every\n// configured storage as a clickable dir. Path semantics shift:\n//\n// \"\" → global root, list storages\n// \"<storage>\" → that storage's root (api: `<storage>://`)\n// \"<storage>/<rel>\" → deeper folder (api: `<storage>://<rel>`)\n//\n// `qualify()` is overridden inside this mode to translate the\n// slash-separated user path into the wire `<adapter>://<rel>` form.\nconst multiStorageRoot = computed(() => props.config.multiStorageRoot === true);\n\nfunction splitVirtualPath(p: string): { adapter: string; rel: string } {\n const clean = p.replace(/^\\/+|\\/+$/g, '');\n if (!clean) return { adapter: '', rel: '' };\n const slash = clean.indexOf('/');\n if (slash === -1) return { adapter: clean, rel: '' };\n return { adapter: clean.slice(0, slash), rel: clean.slice(slash + 1) };\n}\n\nfunction virtualToWire(p: string): string {\n // Convert `s3-test/example` → `s3-test://example`. Pass-through\n // when the input already carries `://` (legacy callers).\n if (p.includes('://')) return p;\n const { adapter, rel } = splitVirtualPath(p);\n if (!adapter) return ''; // global root — no wire form\n return rel ? `${adapter}://${rel}` : `${adapter}://`;\n}\n\nfunction wireToVirtual(p: string): string {\n // Convert `s3-test://example` → `s3-test/example`.\n const idx = p.indexOf('://');\n if (idx === -1) return p.replace(/^\\/+|\\/+$/g, '');\n const adapter = p.slice(0, idx);\n const rel = p.slice(idx + 3).replace(/^\\/+|\\/+$/g, '');\n return rel ? `${adapter}/${rel}` : adapter;\n}\n\nfunction virtualStorageRows(): FileNode[] {\n // Synthesize a FileNode for every configured storage. Used as the\n // \"/\" listing in multi-storage mode.\n const list = props.config.storages ?? [];\n return list.map((s) => ({\n type: 'dir',\n path: s.name, // virtual path (no adapter prefix)\n basename: s.label || s.name,\n extension: '',\n storage: s.name,\n visibility: 'private',\n file_size: 0,\n mime_type: 'inode/storage',\n extra_metadata: { driver: s.driver, readOnly: s.readOnly },\n } as unknown as FileNode));\n}\n\nasync function load(path?: string) {\n loading.value = true;\n // Any normal navigation exits trash mode (the trash view is entered only\n // by opening the virtual `.trash` row, which calls loadTrash()).\n trashMode.value = false;\n try {\n let requested = path ?? currentPath.value ?? '';\n // Clamp to the confined floor: an empty/above-floor request (incl. a stale\n // persisted path or the drives root) snaps back to rootPath. This both\n // suppresses the multi-storage drives list and blocks up-navigation.\n if (rootFloor) {\n const p = String(requested).replace(/^\\/+|\\/+$/g, '');\n if (!p || !(p === rootFloor || p.startsWith(rootFloor + '/'))) requested = rootFloor;\n }\n\n // Multi-storage virtual root — synthesize a list of storages\n // instead of calling the backend.\n if (multiStorageRoot.value && !virtualToWire(requested)) {\n currentPath.value = '';\n adapter.value = '';\n dirname.value = '';\n files.value = virtualStorageRows();\n return;\n }\n\n const target = multiStorageRoot.value\n ? virtualToWire(requested)\n : qualify(requested);\n\n const resp = searchQuery.value\n ? await api.search(target, searchQuery.value)\n : await api.index(target);\n adapter.value = resp.adapter;\n dirname.value = resp.dirname;\n dirPerm.value = (resp.perm as string) || '';\n files.value = (resp.files || []).filter((f) => {\n if (f.path.includes('.thumbs')) return false;\n if (f.path.includes('.versions') || f.basename === '.versions') return false;\n if (f.basename === '.trash') return false;\n if (f.basename === '.keepdir') return false;\n return true;\n });\n // Inject virtual `.trash` entry at root only.\n const dirRel = stripAdapter(resp.dirname);\n const inRoot = dirRel === 'fileman' || dirRel === '';\n const isTrashListing = dirRel.startsWith('fileman/.trash');\n const trashEntryEnabled = props.config.trashVisible !== false;\n if (!isTrashListing && inRoot && trashEntryEnabled) {\n files.value.unshift({\n type: 'dir',\n path: `${resp.adapter}://fileman/.trash`,\n basename: '.trash',\n extension: '',\n storage: resp.adapter,\n visibility: 'private',\n file_size: 0,\n mime_type: 'inode/directory',\n extra_metadata: {},\n } as unknown as FileNode);\n }\n // currentPath is the user-facing form: `s3-test/example` in\n // multi-storage mode, the bare relative path otherwise.\n currentPath.value = multiStorageRoot.value\n ? wireToVirtual(resp.dirname)\n : stripAdapter(resp.dirname);\n } catch (err) {\n const e = err instanceof Error ? err.message : String(err);\n emit('error', { message: e, context: { path } });\n flashToast(e);\n } finally {\n loading.value = false;\n }\n}\n\nfunction stripAdapter(p: string): string {\n const idx = p.indexOf('://');\n return idx === -1 ? p : p.slice(idx + 3);\n}\n\n// loadTrash — show the backend trash (soft-deleted nodes) as a flat listing.\n// Entered by opening the virtual `.trash` row. Each row keeps its node `id`\n// so restore can target it. Permanent delete is admin-only / auto-purge, so\n// the only mutation offered here is Restore.\nasync function loadTrash() {\n loading.value = true;\n trashOrigin.value = adapter.value || '';\n trashMode.value = true;\n selection.clear();\n try {\n const { entries } = await api.listTrash();\n files.value = entries.map(\n (e) =>\n ({\n type: 'file',\n id: e.id,\n path: e.storage_name ? `${e.storage_name}://${e.path}` : e.path,\n basename: e.name,\n extension: e.name.includes('.') ? e.name.split('.').pop() || '' : '',\n storage: e.storage_name || '',\n visibility: 'private',\n file_size: e.size,\n mime_type: e.mime || '',\n extra_metadata: { deleted_at: e.deleted_at, ttl_days: e.ttl_days ?? null },\n }) as unknown as FileNode,\n );\n dirname.value = '.trash';\n currentPath.value = '.trash';\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n emit('error', { message: msg, context: { op: 'trash-list' } });\n flashToast(msg);\n } finally {\n loading.value = false;\n }\n}\n\n/**\n * qualify — return `<adapter>://<rel>` for backend calls.\n *\n * The backend's manager handler picks a storage by parsing the\n * adapter prefix. Without one it falls back to `storages[0]`,\n * which 404s on every non-default storage (S3/SFTP/WebDAV in a\n * multi-storage install). All API callers (rename/move/delete/\n * upload/preview/download/share/copy) must use a qualified path.\n *\n * In multi-storage mode `currentPath` is `<storage>/<rel>` (no\n * `://`), so qualify forwards through `virtualToWire` which\n * splits the first segment off as the adapter. In single-storage\n * mode the legacy bare-relative path is glued onto `adapter.value`.\n *\n * `stripAdapter()` stays for cosmetic display logic only\n * (breadcrumb root check, inRoot computation, openPageBase).\n */\nfunction qualify(p: string): string {\n if (p && p.includes('://')) return p;\n if (multiStorageRoot.value) {\n const wire = virtualToWire(p ?? '');\n if (wire) return wire;\n return adapter.value ? `${adapter.value}://` : '';\n }\n if (!p) return `${adapter.value}://`;\n return `${adapter.value}://${p.replace(/^\\/+/, '')}`;\n}\n\nwatch(\n () => searchQuery.value,\n () => void load(),\n);\n\n// ----------------------------------------------------------------\n// Path persistence\n// ----------------------------------------------------------------\nconst PATH_LS_KEY = 'brf-file-explorer:path';\n\nfunction persistMode(): 'hash' | 'localStorage' | 'none' {\n return props.config.pathPersist ?? 'hash';\n}\n\nfunction readPersistedPath(): string {\n if (typeof window === 'undefined') return '';\n const mode = persistMode();\n if (mode === 'none') return '';\n if (mode === 'localStorage') {\n try {\n return localStorage.getItem(PATH_LS_KEY) || '';\n } catch {\n return '';\n }\n }\n const h = window.location.hash || '';\n if (!h.startsWith('#')) return '';\n return decodeURIComponent(h.slice(1)).replace(/^\\/+|\\/+$/g, '');\n}\n\nlet hashSyncSuppressed = false;\n\nfunction writePersistedPath(path: string) {\n if (typeof window === 'undefined') return;\n const mode = persistMode();\n if (mode === 'none') return;\n if (mode === 'localStorage') {\n try {\n if (path) localStorage.setItem(PATH_LS_KEY, path);\n else localStorage.removeItem(PATH_LS_KEY);\n } catch {\n /* private mode / quota */\n }\n return;\n }\n const target = path ? `#${path}` : '';\n if (window.location.hash === target) return;\n hashSyncSuppressed = true;\n history.replaceState(\n null,\n '',\n target || window.location.pathname + window.location.search,\n );\n}\n\nfunction onHashChange() {\n if (persistMode() !== 'hash') return;\n if (hashSyncSuppressed) {\n hashSyncSuppressed = false;\n return;\n }\n const p = readPersistedPath();\n if (p && p !== currentPath.value) {\n void load(p);\n }\n}\n\nwatch(currentPath, (p) => writePersistedPath(p));\n\nonMounted(async () => {\n // Eagerly start fetching Monaco — the user doesn't pay for it\n // perceptually; click-to-edit hits an in-memory cache.\n preloadEditor();\n\n const fromPersist = readPersistedPath();\n await load(fromPersist || undefined);\n await nextTick();\n rootEl.value?.focus();\n // Best-effort initial fetch — silent if the older backend doesn't\n // expose /api/files/manager/starred. Without this stars never light\n // up on first render even when the row IS starred server-side.\n void loadStarred();\n if (persistMode() === 'hash') {\n window.addEventListener('hashchange', onHashChange);\n }\n if (api.endpoints.opsList) {\n pendingOps.startPolling();\n }\n if (api.endpoints.capabilities) {\n api\n .capabilities()\n .then((cap) => {\n capabilitiesData.value = cap;\n })\n .catch(() => {\n /* swallow — `onlyoffice_url` falls back to null */\n });\n }\n});\n\n// --------------------------------------------------------------------\n// Keyboard\n// --------------------------------------------------------------------\n\nuseKeyboardShortcuts(rootEl, {\n onDelete: () => {\n if (!selection.isEmpty.value) showDelete.value = true;\n },\n onRename: () => {\n if (selection.nodes.value.length === 1) {\n renameTarget.value = selection.nodes.value[0];\n showRename.value = true;\n }\n },\n onSelectAll: () => selection.selectAll(),\n onOpen: () => {\n const n = selection.nodes.value[0];\n if (n) openNode(n);\n },\n onClose: () => {\n showNewFolder.value = false;\n showRename.value = false;\n showDelete.value = false;\n showShare.value = false;\n showPreview.value = false;\n ctxRef.value?.hide();\n },\n onFocusSearch: () => toolbarRef.value?.focusSearch(),\n onCut: () => cut(),\n onCopy: () => copyToClipboard(),\n onPaste: () => paste(),\n onGoUp: () => goUp(),\n hasSelection: () => !selection.isEmpty.value,\n});\n\n// --------------------------------------------------------------------\n// Actions\n// --------------------------------------------------------------------\n\nconst OFFICE_EXTS = new Set([\n 'docx', 'xlsx', 'pptx',\n 'doc', 'xls', 'ppt',\n 'odt', 'ods', 'odp',\n]);\nconst TEXT_CODE_EXTS = new Set([\n 'txt', 'md', 'markdown', 'log', 'csv', 'tsv', 'conf', 'ini',\n 'env', 'toml', 'cfg',\n 'json', 'jsonc', 'yaml', 'yml', 'xml', 'svg',\n 'js', 'mjs', 'cjs', 'ts', 'tsx', 'jsx',\n 'css', 'scss', 'sass', 'less',\n 'html', 'htm', 'vue', 'svelte',\n 'php', 'py', 'rb', 'rs', 'go', 'java', 'kt', 'swift',\n 'cpp', 'c', 'h', 'hpp', 'cs', 'dart',\n 'sh', 'bash', 'zsh', 'sql', 'lua', 'pl', 'r',\n 'dockerfile', 'gradle', 'gitignore',\n]);\n\nfunction openNode(n: FileNode) {\n // The virtual `.trash` row opens the backend trash listing, not a real dir.\n if (n.basename === '.trash') {\n void loadTrash();\n return;\n }\n if (n.type === 'dir') {\n // Multi-storage virtual rows have a bare path (`s3-test`); pass\n // them straight to load() which will treat them as the wire form\n // for that storage's root. Real backend rows still come back as\n // `<adapter>://<rel>` and stripAdapter turns them into the user\n // path semantics load() expects.\n const target = multiStorageRoot.value\n ? wireToVirtual(n.path)\n : stripAdapter(n.path);\n void load(target);\n return;\n }\n // \"Aç\" / double-click contract: open in a new tab against the\n // standalone editor route, regardless of file type. The editor page\n // picks the right viewer (OnlyOffice for office, Monaco for code/\n // text, drawio iframe for .drawio, image/PDF/3D viewers otherwise)\n // and wires save-on-change. This is the shape the origin app ships and\n // what users expect from a Files-style file manager.\n //\n // Capability gate: if we already know the required backend is offline\n // (OnlyOffice for office docs, drawio for diagrams), don't launch a\n // new tab that we'd just render a \"service not configured\" fallback\n // inside — drop into the in-page preview instead, which is the same\n // dead-end UI but without the tab-switching whiplash.\n // Double-click contract: in-page modal preview. Office docs and\n // other read-only kinds open in view mode so a quick peek doesn't\n // mount an editing surface on top of the content. Code/markdown\n // open in edit so the user gets the fast \"open, tweak, Ctrl+S\"\n // loop. Modal's \"Yeni sekmede aç\" button still launches the\n // standalone fullscreen editor route when richer editing is wanted.\n const ext = (n.extension || '').toLowerCase();\n // RBAC: viewers (no edit on this item) always get the read-only preview\n // modal — never the editable surface. This is the \"view vs edit\" split.\n previewMode.value = permCanEdit((n.perm as string) ?? dirPerm.value)\n ? previewModeForExt(ext)\n : 'view';\n previewTarget.value = n;\n showPreview.value = true;\n emit('file-opened', { path: n.path, basename: n.basename });\n void markRecent(n);\n}\n\nconst VIEW_DEFAULT_EXTS = new Set<string>([\n ...OFFICE_EXTS,\n 'drawio', 'dio',\n 'pdf', 'epub', 'ipynb', 'tiff', 'tif', 'psd',\n 'mmd', 'mermaid',\n 'glb', 'gltf', 'obj', 'stl', 'fbx', '3ds',\n 'zip', 'rar', '7z', 'tar', 'gz', 'tgz',\n 'jpg', 'jpeg', 'png', 'webp', 'gif', 'bmp', 'avif', 'svg', 'heic',\n 'mp4', 'webm', 'mov', 'mkv', 'm4v', 'ogv',\n 'mp3', 'wav', 'ogg', 'flac', 'm4a', 'aac', 'opus',\n]);\n\nfunction previewModeForExt(ext: string): 'view' | 'edit' {\n if (VIEW_DEFAULT_EXTS.has(ext)) return 'view';\n return 'edit';\n}\n\nasync function restoreSelection(targets?: FileNode[]) {\n const nodes = targets ?? selection.nodes.value;\n if (nodes.length === 0) return;\n try {\n // filex trash: restore by node id, then refresh the trash listing.\n if (trashMode.value) {\n const ids = nodes\n .map((n) => (n as { id?: number }).id)\n .filter((x): x is number => typeof x === 'number');\n const { restored } = await api.restoreIds(ids);\n flashToast(`${restored} öğe geri getirildi`);\n selection.clear();\n await loadTrash();\n return;\n }\n // Legacy path-based restore (the origin app `.trash/` convention).\n if (!api.endpoints.restore) return;\n const items = nodes.map((n) => n.path); // qualified\n const { restored } = await api.restore(items);\n flashToast(`${restored} öğe geri getirildi`);\n selection.clear();\n await load();\n } catch (err) {\n emit('error', { message: (err as Error).message, context: { op: 'restore' } });\n }\n}\n\nfunction previewNode(n: FileNode) {\n previewMode.value = 'view';\n previewTarget.value = n;\n showPreview.value = true;\n void markRecent(n);\n}\n\n/**\n * openNodeInNewTab — launches the standalone /files/edit route in a\n * fresh tab. Used by the context-menu \"Aç\" action; double-click stays\n * on the in-page modal path. Dirs still navigate inline (no editor for\n * directories). Falls back to the modal if no `openPageBase` is wired\n * by the embedder.\n */\nfunction openNodeInNewTab(n: FileNode) {\n if (n.type === 'dir') {\n const target = multiStorageRoot.value\n ? wireToVirtual(n.path)\n : stripAdapter(n.path);\n void load(target);\n return;\n }\n // RBAC: a viewer (no edit on this item) can't use the editable \"Aç\"\n // surface — drop to the read-only in-page preview instead.\n if (!permCanEdit((n.perm as string) ?? dirPerm.value)) {\n previewNode(n);\n return;\n }\n const ext = (n.extension || '').toLowerCase();\n const base = props.config.openPageBase;\n if (!base) {\n // Embedder didn't supply a standalone editor route — keep the\n // in-page modal as the only available affordance.\n openNode(n);\n return;\n }\n // Context-menu \"Aç\" is the intent-to-edit action — request edit\n // mode so OnlyOffice / Monaco mount with write permissions.\n // Read-only inspection lives on the \"Önizle\" entry + the dbl-click\n // in-page modal.\n const sep = base.includes('?') ? '&' : '?';\n const url =\n `${base}${sep}path=${encodeURIComponent(n.path)}` +\n `&type=${encodeURIComponent(ext)}` +\n `&mode=edit`;\n window.open(url, '_blank', 'noopener');\n emit('file-opened', { path: n.path, basename: n.basename });\n void markRecent(n);\n}\n\ntype ContextMode = 'selection' | 'breadcrumb';\nconst ctxMode = ref<ContextMode>('selection');\nconst breadcrumbCtxPath = ref<string>('');\nconst breadcrumbCtxLabel = ref<string>('');\n\nconst selectionMode = computed<SelectionMode>(() => {\n const sel = selection.nodes.value;\n if (sel.length === 0) return 'none';\n if (sel.length === 1) return sel[0].type === 'dir' ? 'single-dir' : 'single-file';\n return 'multi';\n});\n\nasync function onToolbarAction(key: string) {\n const sel = selection.nodes.value;\n // The toolbar's \"Aç\" opens the in-page preview/editor modal (quick peek);\n // everything else shares dispatchItemAction with the context menu so the two\n // identical menus also behave identically.\n if (key === 'open') {\n if (sel[0]) openNode(sel[0]);\n return;\n }\n await dispatchItemAction(key, sel);\n}\n\nasync function onContextTarget(node: FileNode, ev: MouseEvent) {\n ctxMode.value = 'selection';\n if (!selection.has(node.path)) {\n selection.click(node.path);\n await nextTick();\n }\n ctxRef.value?.show({ clientX: ev.clientX, clientY: ev.clientY }, selection.nodes.value);\n}\n\nfunction onContextCanvas(ev: MouseEvent) {\n ev.preventDefault();\n ctxMode.value = 'selection';\n selection.clear();\n ctxRef.value?.show({ clientX: ev.clientX, clientY: ev.clientY }, []);\n}\n\nfunction onCrumbContext(payload: { x: number; y: number; adapterPath: string; label: string }) {\n ctxMode.value = 'breadcrumb';\n breadcrumbCtxPath.value = payload.adapterPath;\n breadcrumbCtxLabel.value = payload.label;\n ctxRef.value?.show({ clientX: payload.x, clientY: payload.y }, []);\n}\n\nconst contextActions = computed<ContextAction[]>(() => {\n if (ctxMode.value === 'breadcrumb') {\n return [\n { key: 'open', label: t('ctx.open'), icon: '↗' },\n { key: 'copy-path', label: t('breadcrumb.copy_path'), icon: '📋' },\n ];\n }\n\n const sel = selection.nodes.value;\n const any = sel.length > 0;\n const single = sel.length === 1;\n\n if (trashActive.value) {\n if (!any) return [];\n return [\n { key: 'restore', label: t('ctx.restore'), icon: '↩' },\n { divider: true, key: 'sep1', label: '' },\n { key: 'delete', label: t('ctx.delete_perm'), icon: '🗑', danger: true },\n ];\n }\n\n // Storage roots (the virtual rows shown at the multi-storage \"/\"\n // overview) aren't real filesystem entries — they're mount points.\n // Hide every mutation entry (rename/delete/share/cut/copy/new-folder/\n // paste) and only offer \"Aç\" so the menu doesn't surface actions\n // that would 4xx on the backend.\n //\n // PRIOR BUG: this used `currentPath === '/'` but the load() branch\n // for the virtual root sets currentPath to EMPTY string, not '/'.\n // So the guard never fired and every mutation action leaked into\n // the menu at the depo listing — including new-folder + paste,\n // which Burak called out in the most direct possible terms. Use\n // the same empty-after-trim test as `atVirtualRoot` above.\n const trimmedPath = (currentPath.value ?? '').replace(/^\\/+|\\/+$/g, '');\n const inStorageRoot = multiStorageRoot.value && trimmedPath === '';\n if (inStorageRoot) {\n if (!any) return [];\n if (!single) return [];\n return [\n { key: 'open', label: t('ctx.open'), icon: '↗' },\n ];\n }\n\n // Empty background right-click: folder-level actions only. Viewers (no edit\n // on this dir) get nothing here.\n if (!any) {\n if (!permCanEdit(dirPerm.value)) return [];\n return [\n { key: 'new-folder', label: t('toolbar.new_folder'), icon: '📁' },\n { key: 'paste', label: t('ctx.paste'), icon: '📋', disabled: !clipboard.value.mode },\n ];\n }\n\n return selectionActionList(sel);\n});\n\n// selectionActionList — the SINGLE source of truth for the actions offered on a\n// selection. BOTH the right-click context menu AND the top toolbar render this\n// exact list so they can never drift apart (Burak: \"sağ klik menüyle üst menü\n// tutmuyor\"). The toolbar filters out dividers/hidden; the context menu shows\n// them. Action handling is unified in dispatchItemAction().\nfunction selectionActionList(sel: FileNode[]): ContextAction[] {\n const any = sel.length > 0;\n const single = sel.length === 1;\n const isFile = single && sel[0]?.type === 'file';\n const tagsLabel = locale.value === 'en' ? 'Tags…' : 'Etiketler…';\n const singleHasId = single && typeof sel[0]?.id === 'number';\n const copyIdLabel = locale.value === 'en' ? 'Copy node id' : \"Node id'yi kopyala\";\n // RBAC: gate mutating actions when the caller lacks edit on the target. The\n // \"İzinler\" (permissions) action shows only for owners on RBAC-on storages.\n const p = selPerm(sel);\n const w = permCanEdit(p); // may write here\n // Unified \"Paylaş / İzinler\" popup: public share link (editor+) + per-user\n // permissions (owner-only, decided inside the modal).\n // Unified \"Paylaş / İzinler\" popup carries the public share link, per-user\n // permissions AND the folder-only \"Dosya İste\" (file-drop) tab — the user\n // picks the action from inside the modal, so there's no separate button.\n const accessLabel = locale.value === 'en' ? 'Share / Permissions' : 'Paylaş / İzinler';\n return [\n { key: 'open', label: t('ctx.open'), icon: '↗', hidden: !single },\n { key: 'preview', label: t('ctx.preview'), icon: '👁', hidden: !single, disabled: !isFile },\n { key: 'download', label: t('ctx.download'), icon: '⬇', hidden: !single, disabled: !isFile },\n { key: 'convert', label: t('ctx.convert'), icon: '🔄', hidden: !single || !effectiveConvertUrl.value || !w, disabled: !isFile },\n { key: 'access', label: accessLabel, icon: '🔗', hidden: !single || !w },\n { key: 'copy-id', label: copyIdLabel, icon: '🆔', hidden: !singleHasId, disabled: !singleHasId },\n { divider: true, key: 'sep1', label: '', hidden: !w },\n { key: 'rename', label: t('ctx.rename'), icon: '✎', hidden: !single || !w, disabled: !single },\n { key: 'cut', label: t('ctx.cut'), icon: '✂', hidden: !any || !w, disabled: !any },\n { key: 'copy', label: t('ctx.copy'), icon: '❐', hidden: !any, disabled: !any },\n { key: 'paste', label: t('ctx.paste'), icon: '📋', hidden: !w, disabled: !clipboard.value.mode },\n { divider: true, key: 'sep-meta', label: '', hidden: !singleHasId },\n { key: 'tags', label: tagsLabel, icon: '🏷', hidden: !singleHasId, disabled: !singleHasId },\n { divider: true, key: 'sep2', label: '', hidden: !w },\n { key: 'delete', label: t('ctx.delete'), icon: '🗑', danger: true, hidden: !any || !w, disabled: !any },\n ];\n}\n\n// toolbarActions — what the top toolbar shows. Mirrors the context menu so the\n// two stay identical for a selection; the empty/trash/virtual-root cases match\n// the context menu's special branches.\nconst toolbarActions = computed<ContextAction[]>(() => {\n const sel = selection.nodes.value;\n if (trashActive.value) {\n if (sel.length === 0) return [];\n return [\n { key: 'restore', label: t('ctx.restore'), icon: '↩' },\n { key: 'delete', label: t('ctx.delete_perm'), icon: '🗑', danger: true },\n ];\n }\n const trimmedPath = (currentPath.value ?? '').replace(/^\\/+|\\/+$/g, '');\n if (multiStorageRoot.value && trimmedPath === '') {\n return sel.length === 1 ? [{ key: 'open', label: t('ctx.open'), icon: '↗' }] : [];\n }\n if (sel.length === 0) return [];\n return selectionActionList(sel);\n});\n\nasync function onContextAction(action: ContextAction, targets: FileNode[]) {\n if (ctxMode.value === 'breadcrumb') {\n if (action.key === 'open') {\n void load(stripAdapter(breadcrumbCtxPath.value));\n } else if (action.key === 'copy-path') {\n await onCopyPath(breadcrumbCtxPath.value);\n }\n return;\n }\n await dispatchItemAction(action.key, targets);\n}\n\n// dispatchItemAction — unified handler for an action key on a target set. Both\n// the right-click menu (onContextAction) and the toolbar (onToolbarAction)\n// route here, so the two menus that now render the SAME list also behave the\n// same. (Toolbar \"Aç\" is the one deliberate exception — see onToolbarAction.)\nasync function dispatchItemAction(key: string, targets: FileNode[]) {\n switch (key) {\n case 'open':\n // Context-menu \"Aç\" launches the standalone fullscreen route\n // in a new tab. Double-click (openNode) opens the in-page\n // modal — two distinct affordances on purpose: quick peek vs\n // dedicated editing surface.\n if (targets[0]) openNodeInNewTab(targets[0]);\n break;\n case 'preview':\n if (targets[0]) previewNode(targets[0]);\n break;\n case 'download':\n if (targets[0]) downloadFile(targets[0]);\n break;\n case 'convert':\n if (targets[0]) openConvert(targets[0]);\n break;\n case 'share':\n if (targets[0]) openShare(targets[0]);\n break;\n case 'access':\n if (targets[0]) {\n permTarget.value = targets[0];\n showPerm.value = true;\n }\n break;\n case 'copy-id':\n if (targets[0] && typeof targets[0].id === 'number') {\n const id = targets[0].id;\n navigator.clipboard?.writeText(String(id)).then(\n () => flashToast(locale.value === 'en' ? `Node id ${id} copied` : `Node id ${id} kopyalandı`),\n () => flashToast(`#${id}`),\n );\n }\n break;\n case 'tags':\n if (targets[0]) openTagPickerFor(targets[0]);\n break;\n case 'rename':\n if (targets[0]) {\n renameTarget.value = targets[0];\n showRename.value = true;\n }\n break;\n case 'cut':\n clipboard.value = { mode: 'cut', items: targets, sourcePath: currentPath.value };\n flashToast('Kes → Yapıştır hazır');\n break;\n case 'copy':\n clipboard.value = { mode: 'copy', items: targets, sourcePath: currentPath.value };\n flashToast('Kopyala → Yapıştır hazır');\n break;\n case 'paste':\n await paste();\n break;\n case 'delete':\n showDelete.value = true;\n break;\n case 'restore':\n if (targets.length > 0) await restoreSelection(targets);\n break;\n case 'new-folder':\n showNewFolder.value = true;\n break;\n case 'duplicate':\n if (targets[0]) await duplicate(targets[0]);\n break;\n }\n}\n\nfunction cut() {\n if (selection.isEmpty.value) return;\n clipboard.value = { mode: 'cut', items: selection.nodes.value, sourcePath: currentPath.value };\n flashToast('Kesildi');\n}\n\nfunction copyToClipboard() {\n if (selection.isEmpty.value) return;\n clipboard.value = { mode: 'copy', items: selection.nodes.value, sourcePath: currentPath.value };\n flashToast('Kopyalandı');\n}\n\nasync function paste() {\n const cb = clipboard.value;\n if (!cb.mode || cb.items.length === 0) return;\n try {\n const items = cb.items.map((n) => n.path); // already qualified (adapter://rel)\n const sourceDir = cb.sourcePath || '';\n const sameDir = cb.mode === 'cut' && sourceDir === currentPath.value;\n if (sameDir) {\n flashToast('Aynı klasöre kesilemez');\n return;\n }\n\n if (cb.mode === 'cut') {\n const { op } = await api.moveAsync(items, qualify(currentPath.value), qualify(sourceDir) || undefined);\n pendingOps.register(op);\n flashToast('Taşıma kuyruğa alındı');\n } else {\n const { op } = await api.copy(items, qualify(currentPath.value));\n pendingOps.register(op);\n flashToast('Kopyalama kuyruğa alındı');\n }\n clipboard.value = { mode: null, items: [], sourcePath: null };\n } catch (err) {\n emit('error', { message: (err as Error).message, context: { op: 'paste' } });\n }\n}\n\nasync function duplicate(n: FileNode) {\n try {\n const { op } = await api.copy([n.path], qualify(currentPath.value));\n pendingOps.register(op);\n } catch (err) {\n emit('error', { message: (err as Error).message, context: { op: 'duplicate' } });\n }\n}\n\nfunction downloadFile(n: FileNode) {\n // Keep `<adapter>://<rel>` so backend resolves the right storage\n // (stripping it would default to the first storage, which 404s for\n // any non-default storage like S3/SFTP/WebDAV).\n const url = api.downloadUrl(n.path);\n window.open(url, '_blank');\n}\n\n// ------- Modals -------\n\nasync function submitNewFolder(name: string) {\n try {\n await api.newFolder(qualify(currentPath.value), name);\n showNewFolder.value = false;\n await load();\n } catch (err) {\n emit('error', { message: (err as Error).message, context: { op: 'newfolder' } });\n }\n}\n\nasync function submitRename(name: string) {\n const target = renameTarget.value;\n if (!target) return;\n try {\n await api.rename(qualify(currentPath.value), target.path, name);\n showRename.value = false;\n renameTarget.value = null;\n await load();\n } catch (err) {\n emit('error', { message: (err as Error).message, context: { op: 'rename' } });\n }\n}\n\nasync function confirmDelete() {\n // In the trash view, items are already soft-deleted. Permanent removal is\n // admin-only (and the backend auto-purges after the retention window), so\n // offer Restore here rather than a delete that would just re-trash a path.\n if (trashMode.value) {\n showDelete.value = false;\n flashToast('Çöpteki öğeler saklama süresi sonunda otomatik silinir. Kalıcı silme yönetici panelinden yapılır.');\n return;\n }\n const items = selection.nodes.value.map((n) => n.path);\n if (items.length === 0) {\n showDelete.value = false;\n return;\n }\n try {\n if (api.endpoints.deleteAsync) {\n const { op } = await api.deleteAsync(items, qualify(currentPath.value));\n pendingOps.register(op);\n flashToast('Silme kuyruğa alındı');\n } else {\n await api.deleteItems(qualify(currentPath.value), items);\n await load();\n }\n showDelete.value = false;\n selection.clear();\n } catch (err) {\n emit('error', { message: (err as Error).message, context: { op: 'delete' } });\n }\n}\n\nfunction openShare(n: FileNode) {\n shareTarget.value = n;\n activeShare.value = null;\n showShare.value = true;\n}\n\nfunction openConvert(n: FileNode) {\n convertTarget.value = n;\n showConvert.value = true;\n}\n\nfunction onConvertDone(name: string) {\n flashToast(locale.value === 'en' ? `Converted → ${name}` : `Dönüştürüldü → ${name}`);\n void load();\n}\n\nasync function submitShare(payload: {\n password: boolean;\n expires_at: string | null;\n max_downloads: number | null;\n}) {\n const target = shareTarget.value;\n if (!target) return;\n try {\n const { share } = await api.createShare({\n path: target.path, // qualified `<adapter>://<rel>`\n password: payload.password,\n expires_at: payload.expires_at,\n max_downloads: payload.max_downloads,\n });\n activeShare.value = share;\n emit('share-created', { path: target.path, url: share.url, pin: share.password_pin ?? null });\n } catch (err) {\n emit('error', { message: (err as Error).message, context: { op: 'share' } });\n }\n}\n\nfunction closeShare() {\n showShare.value = false;\n shareTarget.value = null;\n activeShare.value = null;\n}\n\n// ------- Upload -------\n\nfunction triggerUpload() {\n if (!canWriteHere.value) {\n flashToast(locale.value === 'en' ? 'Read-only here' : 'Burada yazma yetkiniz yok');\n return;\n }\n fileInputEl.value?.click();\n}\n\nfunction onFilePicked(ev: Event) {\n const input = ev.target as HTMLInputElement;\n const list = input.files ? Array.from(input.files) : [];\n input.value = '';\n void uploadFiles(list);\n}\n\nasync function uploadFiles(list: File[]) {\n if (list.length === 0) return;\n const canChunk = !!(api.endpoints.uploadInit && api.endpoints.uploadFinalize);\n for (const f of list) {\n // Chunked (S3 multipart) only when the endpoints exist AND the file is\n // large. If chunked isn't viable (storage has no multipart support —\n // e.g. the local driver — or init errors out) fall back to the legacy\n // single-POST upload, which works for any storage / file size.\n if (canChunk && f.size >= 10 * 1024 * 1024) {\n if (await chunkedUpload(f)) continue;\n }\n await legacyUpload(f);\n }\n await load();\n}\n\nasync function legacyUpload(file: File) {\n // Register a progress row so the corner badge tracks the upload — large files\n // fall back here from the chunked path, and previously showed no progress at\n // all (the chunked placeholder was removed on init failure and the legacy\n // POST tracked nothing, so the badge vanished mid-upload).\n const id = crypto.randomUUID();\n const target = qualify(currentPath.value);\n uploadJobs.value = [\n ...uploadJobs.value,\n { id, file, path: target, totalBytes: file.size, uploadedBytes: 0, percent: 0, status: 'uploading', cancel() {} },\n ];\n const patch = (p: Partial<UploadJob>) => {\n const idx = uploadJobs.value.findIndex((j) => j.id === id);\n if (idx === -1) return;\n const next = [...uploadJobs.value];\n next[idx] = { ...next[idx], ...p };\n uploadJobs.value = next;\n };\n try {\n await api.uploadMultipart(target, [file], (percent) => {\n patch({ percent, uploadedBytes: Math.round((percent / 100) * file.size) });\n emit('upload-progress', { uploadId: id, percent, done: percent >= 100 });\n });\n patch({ percent: 100, uploadedBytes: file.size, status: 'done' });\n emit('upload-progress', { uploadId: id, percent: 100, done: true });\n } catch (err) {\n patch({ status: 'error' });\n emit('error', {\n message: (err as Error).message,\n context: { op: 'upload', file: file.name },\n });\n }\n}\n\n/**\n * Attempt an S3 multipart (chunked) upload. Returns `true` on success,\n * `false` when the storage can't do multipart (local driver, init 4xx/5xx)\n * so the caller can transparently fall back to the legacy single-POST\n * upload. On failure the progress placeholder is removed — no stuck error\n * row, no error toast, because the fallback path will report any real error.\n */\nasync function chunkedUpload(file: File): Promise<boolean> {\n // Register the progress row LAZILY — only once init succeeded and bytes are\n // actually moving. A doomed init (local driver / 4xx) then shows no badge at\n // all, so the legacy fallback's own badge is the only one the user sees (no\n // appear-then-vanish flicker).\n const id = crypto.randomUUID();\n let registered = false;\n try {\n await chunked.uploadFile({\n path: qualify(currentPath.value),\n file,\n onProgress: (job) => {\n if (!registered) {\n if (job.status !== 'uploading' && job.uploadedBytes <= 0) return;\n uploadJobs.value = [...uploadJobs.value, { ...job, id } as UploadJob];\n registered = true;\n } else {\n const idx = uploadJobs.value.findIndex((j) => j.id === id);\n if (idx !== -1) {\n const next = [...uploadJobs.value];\n next[idx] = { ...job, id } as UploadJob;\n uploadJobs.value = next;\n }\n }\n emit('upload-progress', {\n uploadId: job.uploadId ?? id,\n percent: job.percent,\n done: job.status === 'done',\n });\n },\n });\n return true;\n } catch {\n if (registered) uploadJobs.value = uploadJobs.value.filter((j) => j.id !== id);\n return false;\n }\n}\n\nconst dragCounter = ref(0);\nconst dragOver = ref(false);\n\n/**\n * isExternalFileDrag — `true` only when the user is dragging files\n * INTO the page from the OS (file picker, finder, etc.). Filters out:\n * - internal row drags (FE_DND_MIME present)\n * - browser image drags (`<img draggable=true>` on this page or\n * across pages). HTML5 `Files` type is leaky — it appears when\n * dragging any image element even though no real file is moving;\n * `dataTransfer.items[*].kind === 'file'` is the canonical signal\n * for an actual OS file.\n */\nfunction isExternalFileDrag(ev: DragEvent): boolean {\n const dt = ev.dataTransfer;\n if (!dt) return false;\n if (dt.types && dt.types.includes(FE_DND_MIME)) return false;\n // Some browsers expose `items` early in the drag, others only on\n // drop. When `items` is available we use it as the authoritative\n // signal — `kind === 'file'` means a real OS file. When unavailable\n // (Firefox during dragover sometimes returns 0 items), fall back to\n // the legacy `Files` type check.\n if (dt.items && dt.items.length > 0) {\n let hasFile = false;\n for (const it of Array.from(dt.items)) {\n if (it.kind === 'file') {\n hasFile = true;\n break;\n }\n }\n return hasFile;\n }\n return dt.types ? dt.types.includes('Files') : false;\n}\n\nfunction onDragEnter(ev: DragEvent) {\n if (!isExternalFileDrag(ev)) return;\n ev.preventDefault();\n dragCounter.value++;\n dragOver.value = true;\n}\nfunction onDragLeave() {\n dragCounter.value = Math.max(0, dragCounter.value - 1);\n if (dragCounter.value === 0) dragOver.value = false;\n}\nfunction onDragOver(ev: DragEvent) {\n if (isExternalFileDrag(ev)) {\n ev.preventDefault();\n }\n}\nfunction onDropUpload(ev: DragEvent) {\n // Internal row drag — nothing to do here, the row drop handler\n // in GridView/ListView already resolved the move.\n if (ev.dataTransfer?.types.includes(FE_DND_MIME)) {\n dragCounter.value = 0;\n dragOver.value = false;\n return;\n }\n // Browser-internal image drag without real files — bail before\n // we accidentally synthesise an upload from a 0-length file list\n // (some browsers populate `files` with zero-byte placeholders).\n if (!isExternalFileDrag(ev)) {\n dragCounter.value = 0;\n dragOver.value = false;\n return;\n }\n ev.preventDefault();\n dragCounter.value = 0;\n dragOver.value = false;\n // RBAC: block drag-drop upload where the user can't write.\n if (!canWriteHere.value) {\n flashToast(locale.value === 'en' ? 'Read-only here' : 'Burada yazma yetkiniz yok');\n return;\n }\n const list = ev.dataTransfer?.files ? Array.from(ev.dataTransfer.files) : [];\n if (list.length === 0) return;\n void uploadFiles(list);\n}\n\nfunction onWindowDragOver(ev: DragEvent) {\n if (ev.dataTransfer?.types.includes('Files')) ev.preventDefault();\n}\nfunction onWindowDrop(ev: DragEvent) {\n const root = rootEl.value;\n const target = ev.target as Node | null;\n if (root && target && !root.contains(target)) {\n ev.preventDefault();\n }\n}\nonMounted(() => {\n window.addEventListener('dragover', onWindowDragOver);\n window.addEventListener('drop', onWindowDrop);\n});\nonBeforeUnmount(() => {\n window.removeEventListener('dragover', onWindowDragOver);\n window.removeEventListener('drop', onWindowDrop);\n window.removeEventListener('hashchange', onHashChange);\n});\n\nconst clippedPaths = computed<Set<string>>(() => {\n if (clipboard.value.mode !== 'cut') return new Set();\n return new Set(clipboard.value.items.map((n) => n.path));\n});\n\n// --------------------------------------------------------------------\n// Item drag&drop move\n// --------------------------------------------------------------------\n\nconst FE_DND_MIME = 'application/x-brf-files';\n\nfunction onItemDragStart(node: FileNode, ev: DragEvent) {\n if (!ev.dataTransfer) return;\n if (node.basename === '.trash') {\n ev.preventDefault();\n return;\n }\n if (!selection.has(node.path)) {\n selection.click(node.path);\n }\n const items = selection.nodes.value\n .filter((n) => !clippedPaths.value.has(n.path))\n .filter((n) => n.basename !== '.trash')\n .map((n) => ({ path: n.path, basename: n.basename, type: n.type })); // qualified\n ev.dataTransfer.setData(FE_DND_MIME, JSON.stringify(items));\n ev.dataTransfer.setData('text/plain', items.map((i) => i.path).join('\\n'));\n ev.dataTransfer.effectAllowed = 'move';\n}\n\nasync function moveSourcesAsync(sources: string[], targetDir: string, opLabel: string): Promise<void> {\n try {\n if (api.endpoints.moveAsync) {\n const { op } = await api.moveAsync(sources, targetDir, qualify(currentPath.value));\n pendingOps.register(op);\n flashToast('Taşıma kuyruğa alındı');\n } else {\n await api.move(qualify(currentPath.value), sources, targetDir);\n await load();\n }\n selection.clear();\n } catch (err) {\n emit('error', { message: (err as Error).message, context: { op: opLabel, targetDir } });\n }\n}\n\nasync function onItemDropInto(target: FileNode, ev: DragEvent) {\n if (target.type !== 'dir') return;\n const raw = ev.dataTransfer?.getData(FE_DND_MIME);\n if (!raw) return;\n let items: Array<{ path: string }> = [];\n try {\n items = JSON.parse(raw);\n } catch {\n return;\n }\n if (items.length === 0) return;\n\n const targetDir = target.path; // qualified\n const sources = items\n .map((i) => i.path)\n .filter((p) => p && p !== targetDir && !targetDir.startsWith(p + '/'));\n if (sources.length === 0) {\n flashToast('Aynı klasöre taşınamaz');\n return;\n }\n await moveSourcesAsync(sources, targetDir, 'move-dnd');\n}\n\nasync function onCrumbDropInto(adapterPath: string, ev: DragEvent) {\n const raw = ev.dataTransfer?.getData(FE_DND_MIME);\n if (!raw) return;\n let items: Array<{ path: string }> = [];\n try {\n items = JSON.parse(raw);\n } catch {\n return;\n }\n if (items.length === 0) return;\n\n const targetDir = adapterPath; // already qualified by breadcrumb\n const sources = items\n .map((i) => i.path)\n .filter((p) => p && p !== targetDir && !targetDir.startsWith(p + '/'));\n if (sources.length === 0) return;\n await moveSourcesAsync(sources, targetDir, 'move-dnd-crumb');\n}\n\nfunction onCancelUpload(job: UploadJob) {\n job.cancel();\n}\n\nfunction onDismissUpload(job: UploadJob) {\n uploadJobs.value = uploadJobs.value.filter((j) => j.id !== job.id);\n}\n\n// ------- Breadcrumb -------\n\nfunction onNavigate(adapterPath: string) {\n // Multi-storage emits empty string for the global \"/\" crumb. The\n // load() function recognises that as the storage-list virtual root.\n if (multiStorageRoot.value && !adapterPath) {\n void load('');\n return;\n }\n if (multiStorageRoot.value) {\n void load(wireToVirtual(adapterPath));\n return;\n }\n void load(stripAdapter(adapterPath));\n}\n\nasync function onCopyPath(adapterPath: string) {\n try {\n await navigator.clipboard.writeText(adapterPath);\n flashToast(t('breadcrumb.copy_path'));\n } catch {\n /* no-op */\n }\n}\n\n// Sync auth-headers builder for PreviewModal — fetches against the\n// OnlyOffice config endpoint and the saveText endpoint need real\n// headers, not promises. Function-token bearers will use the cached\n// token; first-call resolution happens via the async path elsewhere.\nfunction buildAuthHeaders(extra: Record<string, string> = {}) {\n return api.authHeadersSync({ ...extra });\n}\n</script>\n\n<template>\n <div\n ref=\"rootEl\"\n class=\"fe\"\n :class=\"{\n 'fe--theme-light': config.theme === 'light',\n 'fe--theme-dark': config.theme === 'dark',\n 'fe--is-dragover': dragOver,\n }\"\n tabindex=\"-1\"\n @dragenter=\"onDragEnter\"\n @dragover=\"onDragOver\"\n @dragleave=\"onDragLeave\"\n @drop=\"onDropUpload\"\n @contextmenu=\"onContextCanvas\"\n >\n <Toolbar\n ref=\"toolbarRef\"\n :view-mode=\"viewMode\"\n :search-query=\"searchQuery\"\n :trash-active=\"trashActive\"\n :actions=\"toolbarActions\"\n :selection-mode=\"selectionMode\"\n :paste-enabled=\"!!clipboard.mode\"\n :convert-enabled=\"!!effectiveConvertUrl\"\n :can-go-up=\"canGoUp\"\n :at-virtual-root=\"atVirtualRoot\"\n :can-write=\"canWriteHere\"\n :locale=\"locale\"\n @update:view-mode=\"viewMode = $event\"\n @update:search-query=\"searchQuery = $event\"\n @new-folder=\"showNewFolder = true\"\n @upload=\"triggerUpload\"\n @refresh=\"() => load()\"\n @go-up=\"goUp\"\n @action=\"onToolbarAction\"\n @open-recents=\"showRecents = true\"\n />\n\n <Breadcrumb\n :dirname=\"dirname\"\n :adapter=\"adapter\"\n :root-label=\"adapter\"\n :locale=\"locale\"\n :multi-storage-root=\"multiStorageRoot\"\n :root-path=\"rootPathProp\"\n @navigate=\"onNavigate\"\n @copy-path=\"onCopyPath\"\n @crumb-context=\"onCrumbContext\"\n @crumb-drop=\"onCrumbDropInto\"\n />\n\n <div class=\"fe__body\" @click.self=\"selection.clear()\">\n <!-- Initial load: show a spinner rather than an empty/\"no files\" flash.\n Only when there's nothing yet — navigation keeps the current list. -->\n <div v-if=\"loading && files.length === 0\" class=\"fe__loading\">\n <span class=\"fe__spinner\" aria-hidden=\"true\"></span>\n <p class=\"fe__loading-text\">{{ t('loading') }}</p>\n </div>\n <ListView\n v-else-if=\"viewMode === 'list'\"\n :files=\"files\"\n :selected=\"selection.selected.value\"\n :clipped=\"clippedPaths\"\n :show-parent-path=\"!!searchQuery\"\n :locale=\"locale\"\n :loading=\"loading\"\n :starred-ids=\"starredIds\"\n :api-base=\"props.config.apiBase ?? ''\"\n :auth-headers=\"() => buildAuthHeaders()\"\n @click-row=\"(n, m) => selection.click(n.path, m)\"\n @dbl-row=\"openNode\"\n @context-row=\"onContextTarget\"\n @item-drag-start=\"onItemDragStart\"\n @item-drop-into=\"onItemDropInto\"\n @star-change=\"onStarChange\"\n />\n <GridView\n v-else\n :files=\"files\"\n :selected=\"selection.selected.value\"\n :clipped=\"clippedPaths\"\n :show-parent-path=\"!!searchQuery\"\n :locale=\"locale\"\n :loading=\"loading\"\n @click-card=\"(n, m) => selection.click(n.path, m)\"\n @dbl-card=\"openNode\"\n @context-card=\"onContextTarget\"\n @item-drag-start=\"onItemDragStart\"\n @item-drop-into=\"onItemDropInto\"\n />\n </div>\n\n <div v-if=\"dragOver\" class=\"fe__dragover\">\n <div class=\"fe__dragover-card\">\n <span class=\"fe-icon\">⬆</span>\n <p>Dosyaları buraya bırak</p>\n </div>\n </div>\n\n <UploadProgress\n :jobs=\"uploadJobs\"\n :locale=\"locale\"\n @cancel=\"onCancelUpload\"\n @dismiss=\"onDismissUpload\"\n />\n\n <PendingOpsTray\n :ops=\"pendingOps.ops.value\"\n :locale=\"locale\"\n @dismiss=\"(id) => pendingOps.dismiss(id)\"\n />\n\n <ContextMenu\n ref=\"ctxRef\"\n :locale=\"locale\"\n :theme=\"config.theme || 'auto'\"\n :actions=\"contextActions\"\n @select=\"onContextAction\"\n />\n\n <NewFolderModal\n :open=\"showNewFolder\"\n :locale=\"locale\"\n @close=\"showNewFolder = false\"\n @submit=\"submitNewFolder\"\n />\n <RenameModal\n :open=\"showRename\"\n :locale=\"locale\"\n :current-name=\"renameTarget?.basename || ''\"\n @close=\"showRename = false\"\n @submit=\"submitRename\"\n />\n <DeleteConfirmModal\n :open=\"showDelete\"\n :locale=\"locale\"\n :count=\"selection.size.value\"\n @close=\"showDelete = false\"\n @confirm=\"confirmDelete\"\n />\n <ShareModal\n :open=\"showShare\"\n :locale=\"locale\"\n :share=\"activeShare\"\n @close=\"closeShare\"\n @submit=\"submitShare\"\n @toast=\"flashToast\"\n />\n <PreviewModal\n :open=\"showPreview\"\n :locale=\"locale\"\n :file=\"previewTarget\"\n :theme=\"config.theme || 'auto'\"\n :preview-url=\"(p) => api.previewUrl(p)\"\n :download-url=\"(p) => api.downloadUrl(p)\"\n :only-office-base=\"effectiveOnlyOfficeBase\"\n :only-office-config-endpoint=\"effectiveOnlyOfficeConfigEndpoint\"\n :save-text-endpoint=\"api.endpoints.saveText || null\"\n :open-mode=\"previewMode\"\n :auth-headers=\"() => buildAuthHeaders({ 'Content-Type': 'application/json' })\"\n :auth-credentials=\"api.credentialsMode()\"\n :drawio-url=\"effectiveDrawioUrl\"\n :pdf-worker-url=\"props.config.pdfWorkerUrl || null\"\n :pdf-save-url=\"props.config.pdfSaveUrl || null\"\n :viewer-base-url=\"props.config.viewerBaseUrl || null\"\n @close=\"showPreview = false\"\n />\n <ConvertModal\n v-if=\"showConvert && convertTarget && effectiveConvertUrl\"\n :convert-url=\"effectiveConvertUrl\"\n :file-name=\"convertTarget?.basename || convertTarget?.path || ''\"\n :fetch-bytes=\"() => api.fetchArrayBuffer(convertTarget?.path ?? '')\"\n :upload=\"(f) => api.uploadMultipart(qualify(currentPath), [f]).then(() => {})\"\n @close=\"showConvert = false\"\n @done=\"onConvertDone\"\n />\n <PermissionsModal\n v-if=\"showPerm && permTarget\"\n :api=\"api\"\n :path=\"permTarget.path\"\n :is-dir=\"permTarget.type === 'dir'\"\n :size=\"typeof permTarget.size === 'number' ? permTarget.size : undefined\"\n :locale=\"locale === 'en' ? 'en' : 'tr'\"\n @close=\"showPerm = false\"\n />\n\n <!-- Recently-opened tray. Anchored to the toolbar trigger via fixed\n position; click the backdrop or any entry to dismiss.\n `.fe` + theme class keeps the dark/light cascade matching the\n host shell — without them the popup floats outside the\n FileExplorer root and falls back to :root light defaults. -->\n <transition name=\"fe-modal\">\n <div\n v-if=\"showRecents\"\n class=\"fe fe-modal__backdrop fe-recents__backdrop\"\n :class=\"{\n 'fe--theme-light': config.theme === 'light',\n 'fe--theme-dark': config.theme === 'dark',\n }\"\n @click=\"showRecents = false\"\n >\n <div class=\"fe-recents__panel\" @click.stop>\n <div class=\"fe-recents__header\">\n <strong>{{ locale === 'en' ? 'Recently opened' : 'Son açılanlar' }}</strong>\n <button class=\"fe-recents__close\" aria-label=\"Close\" @click=\"showRecents = false\">×</button>\n </div>\n <RecentlyOpened\n :api-base=\"props.config.apiBase ?? ''\"\n :auth-headers=\"() => buildAuthHeaders()\"\n :limit=\"20\"\n :refresh-key=\"recentRefreshKey\"\n @open=\"onRecentOpen\"\n @error=\"(msg: string) => emit('error', { message: msg, context: { op: 'recents' } })\"\n />\n </div>\n </div>\n </transition>\n\n <!-- Tag editor — opened from the context menu via Etiketler. -->\n <transition name=\"fe-modal\">\n <div\n v-if=\"showTagPicker && tagPickerNode && typeof tagPickerNode.id === 'number'\"\n class=\"fe-modal__backdrop\"\n @click=\"showTagPicker = false\"\n >\n <div class=\"fe-modal__card fe-modal__card--md\" @click.stop>\n <header class=\"fe-modal__head\">\n <h2 class=\"fe-modal__title\">\n {{ locale === 'en' ? 'Tags' : 'Etiketler' }} — {{ tagPickerNode.basename }}\n </h2>\n <button class=\"fe-modal__close\" aria-label=\"Close\" @click=\"showTagPicker = false\">×</button>\n </header>\n <div class=\"fe-modal__body\">\n <TagPicker\n :node-id=\"tagPickerNode.id\"\n :api-base=\"props.config.apiBase ?? ''\"\n :auth-headers=\"() => buildAuthHeaders()\"\n @error=\"(msg: string) => emit('error', { message: msg, context: { op: 'tags' } })\"\n />\n </div>\n </div>\n </div>\n </transition>\n\n <input\n ref=\"fileInputEl\"\n type=\"file\"\n multiple\n class=\"fe__file-input\"\n @change=\"onFilePicked\"\n />\n\n <transition name=\"fe-toast\">\n <div v-if=\"toast\" class=\"fe-toast\">{{ toast }}</div>\n </transition>\n </div>\n</template>\n\n<style src=\"./styles/variables.css\"></style>\n<style src=\"./styles/base.css\"></style>\n","/**\n * @brftech/filex — Web Component (custom element) wrapper around\n * `@brftech/filex-core`'s FileExplorer.\n *\n * Importing this file (side-effect) registers `<filex-explorer>` as a\n * global custom element. Use it in any framework / no framework:\n *\n * <filex-explorer api-base=\"https://files.example.com\" locale=\"tr\"></filex-explorer>\n *\n * <script type=\"module\">\n * // Side-effect import registers the element.\n * import '@brftech/filex';\n *\n * // Pass complex props as JS properties (auth, theme overrides, …).\n * document.querySelector('filex-explorer').config = {\n * apiBase: 'https://files.example.com',\n * auth: { kind: 'bearer', token: '<jwt>' },\n * locale: 'tr',\n * };\n * </script>\n *\n * Attributes that map to top-level config keys are auto-parsed: `api-base`,\n * `endpoint`, `locale`, `theme`, `trash-visible`. Anything else (auth,\n * shareBase, custom endpoints…) is set via the `config` JS property.\n *\n * `shadowRoot: false` — Tailwind / global CSS / OS dark mode propagate\n * naturally into the explorer; `<style>` from the core stylesheet is\n * appended to the host page once on first registration.\n */\n\nimport { defineCustomElement, h, ref, watch, type PropType } from 'vue';\nimport FileExplorer from '@brftech/filex-core/src/FileExplorer.vue';\nimport type { ExplorerConfig, LocaleCode, ThemeMode } from '@brftech/filex-core';\nimport coreCss from '@brftech/filex-core/style.css?inline';\n\n/**\n * Inject the core stylesheet into <head> once. We `?inline` it (handled\n * by Vite) so the CSS string lives inside the JS bundle — no separate\n * stylesheet to wire up on the host page. The bundle ALSO emits a\n * `style.css` file alongside in case the consumer wants the link tag\n * approach instead.\n */\nlet stylesInjected = false;\nfunction injectStylesOnce() {\n if (stylesInjected) return;\n if (typeof document === 'undefined') return;\n const tag = document.createElement('style');\n tag.setAttribute('data-filex', '');\n tag.textContent = coreCss as unknown as string;\n document.head.appendChild(tag);\n stylesInjected = true;\n}\n\n/**\n * Build the `config` object passed to the underlying FileExplorer SFC.\n * Pulls simple attributes (api-base, locale, theme, trash-visible) and\n * merges anything the consumer set via the `config` JS property.\n */\nfunction buildConfig(\n attrs: { apiBase?: string; endpoint?: string; locale?: string; theme?: string; trashVisible?: boolean | string },\n override: ExplorerConfig | null,\n): ExplorerConfig {\n const base: ExplorerConfig = {};\n if (attrs.apiBase) base.apiBase = attrs.apiBase;\n if (attrs.endpoint) base.endpoint = attrs.endpoint;\n if (attrs.locale === 'tr' || attrs.locale === 'en') base.locale = attrs.locale as LocaleCode;\n if (attrs.theme === 'light' || attrs.theme === 'dark' || attrs.theme === 'auto') {\n base.theme = attrs.theme as ThemeMode;\n }\n if (attrs.trashVisible !== undefined) {\n base.trashVisible =\n attrs.trashVisible === true || attrs.trashVisible === 'true' || attrs.trashVisible === '';\n }\n // `config` JS-property overrides win over individual attributes —\n // letting power users feed the whole shape at once.\n return { ...base, ...(override ?? {}) };\n}\n\n/**\n * Wrapper component — translates element attributes/properties into the\n * SFC's single `config` prop and forwards every event back out as a\n * native CustomEvent. Vue's `defineCustomElement` discovers props via\n * the `props` option below; events are dispatched against the host\n * element by Vue itself when we `emit(...)` here.\n */\nconst FilexExplorerWrapper = defineCustomElement({\n props: {\n /** Full ExplorerConfig as a JS property (preferred for complex shape). */\n config: {\n type: Object as PropType<ExplorerConfig | null>,\n default: null,\n },\n /** Shortcut attribute → config.apiBase. */\n apiBase: { type: String, default: '' },\n /** Shortcut attribute → config.endpoint (legacy). */\n endpoint: { type: String, default: '' },\n locale: { type: String, default: '' },\n theme: { type: String, default: '' },\n trashVisible: { type: [Boolean, String], default: undefined },\n },\n emits: [\n 'share-created',\n 'file-opened',\n 'error',\n 'upload-progress',\n 'selection-change',\n ],\n setup(props, { emit }) {\n injectStylesOnce();\n\n // Reactive config — recomputed when any input attribute or the\n // `config` JS property changes.\n const merged = ref<ExplorerConfig>(\n buildConfig(\n {\n apiBase: props.apiBase,\n endpoint: props.endpoint,\n locale: props.locale,\n theme: props.theme,\n trashVisible: props.trashVisible,\n },\n props.config,\n ),\n );\n\n watch(\n () => [\n props.config,\n props.apiBase,\n props.endpoint,\n props.locale,\n props.theme,\n props.trashVisible,\n ],\n () => {\n merged.value = buildConfig(\n {\n apiBase: props.apiBase,\n endpoint: props.endpoint,\n locale: props.locale,\n theme: props.theme,\n trashVisible: props.trashVisible,\n },\n props.config,\n );\n },\n { deep: true },\n );\n\n return () =>\n h(FileExplorer as never, {\n config: merged.value,\n onShareCreated: (p: unknown) => emit('share-created', p),\n onFileOpened: (f: unknown) => emit('file-opened', f),\n onError: (e: unknown) => emit('error', e),\n onUploadProgress: (p: unknown) => emit('upload-progress', p),\n onSelectionChange: (s: unknown) => emit('selection-change', s),\n });\n },\n}, { shadowRoot: false });\n\n/** Public class — useful for tests / programmatic instantiation. */\nexport const FilexElement = FilexExplorerWrapper;\n\n/**\n * Self-register on import so consumers can do\n * `import '@brftech/filex'`\n * and have the element available immediately. Idempotent — re-import\n * doesn't throw.\n */\nif (typeof customElements !== 'undefined' && !customElements.get('filex-explorer')) {\n customElements.define('filex-explorer', FilexExplorerWrapper);\n}\n\n/**\n * Augment the global JSX/HTML element typings so TypeScript projects\n * embedding the WC get autocomplete + type checking on `<filex-explorer>`.\n *\n * We deliberately resolve to `HTMLElement` rather than the wrapper class\n * because `InstanceType<typeof FilexExplorerWrapper>` triggers a TS2502\n * \"self-referential type annotation\" error inside this very file.\n */\ndeclare global {\n interface HTMLElementTagNameMap {\n 'filex-explorer': HTMLElement;\n }\n}\n\nexport type { ExplorerConfig } from '@brftech/filex-core';\n"],"names":["makeMap","str","map","key","val","EMPTY_OBJ","EMPTY_ARR","NOOP","NO","isOn","isModelListener","extend","remove","arr","el","i","hasOwnProperty","hasOwn","isArray","isMap","toTypeString","isSet","isDate","isFunction","isString","isSymbol","isObject","isPromise","objectToString","value","toRawType","isPlainObject","isIntegerKey","isReservedProp","cacheStringFunction","fn","cache","camelizeRE","camelize","c","hyphenateRE","hyphenate","capitalize","toHandlerKey","hasChanged","oldValue","invokeArrayFns","fns","arg","def","obj","writable","looseToNumber","n","toNumber","_globalThis","getGlobalThis","normalizeStyle","res","item","normalized","parseStringStyle","listDelimiterRE","propertyDelimiterRE","styleCommentRE","cssText","ret","tmp","normalizeClass","name","specialBooleanAttrs","isSpecialBooleanAttr","includeBooleanAttr","looseCompareArrays","a","b","equal","looseEqual","aValidType","bValidType","aKeysCount","bKeysCount","aHasKey","bHasKey","looseIndexOf","isRef","toDisplayString","replacer","_key","entries","val2","stringifySymbol","v","_a","activeEffectScope","EffectScope","detached","l","currentEffectScope","current","fromParent","last","getCurrentScope","activeSub","pausedQueueEffects","ReactiveEffect","batch","cleanupEffect","prepareDeps","prevEffect","prevShouldTrack","shouldTrack","cleanupDeps","link","removeSub","isDirty","batchDepth","batchedSub","batchedComputed","sub","isComputed","startBatch","endBatch","e","next","error","err","head","tail","prev","removeDep","refreshComputed","computed","globalVersion","dep","prevSub","soft","nextSub","prevDep","nextDep","trackStack","pauseTracking","resetTracking","cleanup","Link","Dep","debugInfo","addSub","currentTail","targetMap","ITERATE_KEY","MAP_KEY_ITERATE_KEY","ARRAY_ITERATE_KEY","track","target","type","depsMap","trigger","newValue","oldTarget","run","targetIsArray","isArrayIndex","newLength","key2","reactiveReadArray","array","raw","toReactive","shallowReadArray","toRaw","toWrapped","isReadonly","toReadonly","isReactive","arrayInstrumentations","iterator","args","x","thisArg","apply","searchProxy","separator","noTracking","reduce","comparer","self","method","wrapValue","iter","isShallow","result","arrayProto","wrappedRetFn","needsWrap","methodFn","result2","wrappedFn","index","wrapInitialAccumulator","acc","isNonTrackableKeys","builtInSymbols","BaseReactiveHandler","_isReadonly","_isShallow","receiver","isReadonly2","isShallow2","shallowReadonlyMap","readonlyMap","shallowReactiveMap","reactiveMap","readonly","MutableReactiveHandler","isArrayWithIntegerKey","isOldValueReadonly","hadKey","ReadonlyReactiveHandler","mutableHandlers","readonlyHandlers","shallowReactiveHandlers","toShallow","getProto","createIterableMethod","rawTarget","targetIsMap","isPair","isKeyOnly","innerIterator","wrap","done","createReadonlyMethod","createInstrumentations","shallow","instrumentations","rawKey","has","callback","observed","proto","rawValue","valueToAdd","get","hadItems","createInstrumentationGetter","mutableCollectionHandlers","shallowCollectionHandlers","readonlyCollectionHandlers","targetTypeMap","rawType","getTargetType","reactive","createReactiveObject","shallowReactive","baseHandlers","collectionHandlers","proxyMap","targetType","existingProxy","proxy","isProxy","markRaw","r","ref","createRef","shallowRef","RefImpl","useDirectValue","unref","ref2","shallowUnwrapHandlers","proxyRefs","objectWithRefs","CustomRefImpl","factory","set","newVal","customRef","ComputedRefImpl","setter","isSSR","getterOrOptions","debugOptions","getter","INITIAL_WATCHER_VALUE","cleanupMap","activeWatcher","onWatcherCleanup","cleanupFn","failSilently","owner","cleanups","watch","source","cb","options","immediate","deep","once","scheduler","augmentJob","call","reactiveGetter","source2","traverse","effect","boundCleanup","forceTrigger","isMultiSource","s","currentEffect","baseGetter","depth","scope","watchHandle","_cb","job","immediateFirstRun","currentWatcher","cleanup2","seen","callWithErrorHandling","instance","handleError","callWithAsyncErrorHandling","values","throwInDev","contextVNode","errorHandler","throwUnhandledErrorInProduction","cur","exposedInstance","errorInfo","errorCapturedHooks","logError","throwInProd","queue","flushIndex","pendingPostFlushCbs","activePostFlushCbs","postFlushIndex","resolvedPromise","currentFlushPromise","nextTick","p","findInsertionIndex","id","start","end","middle","middleJob","middleJobId","getId","queueJob","jobId","lastJob","queueFlush","flushJobs","queuePostFlushCb","flushPreFlushCbs","flushPostFlushCbs","deduped","currentRenderingInstance","currentScopeId","setCurrentRenderingInstance","withCtx","ctx","isNonScopedSlot","renderFnWithContext","setBlockTracking","prevInstance","withDirectives","vnode","directives","getComponentPublicInstance","bindings","dir","modifiers","invokeDirectiveHook","prevVNode","oldBindings","binding","hook","provide","currentInstance","provides","parentProvides","inject","defaultValue","treatDefaultAsFactory","getCurrentInstance","currentApp","ssrContextKey","useSSRContext","doWatch","flush","baseWatchOptions","runsImmediately","ssrCleanup","isInSSRComponentSetup","watchStopHandle","isPre","queuePostRenderEffect","isFirstRun","watch$1","instanceWatch","publicThis","createPathGetter","reset","setCurrentInstance","path","segments","pendingMounts","TeleportEndKey","isTeleport","isTeleportDisabled","props","isTeleportDeferred","isTargetSVG","isTargetMathML","resolveTarget","select","targetSelector","TeleportImpl","n1","n2","container","anchor","parentComponent","parentSuspense","namespace","slotScopeIds","optimized","internals","mountChildren","patchChildren","patchBlockChildren","insert","querySelector","createText","createComment","parentNode","disabled","dynamicChildren","mount","container2","anchor2","mountToTarget","disabled2","targetAnchor","prepareAnchor","updateCssVars","queuePendingMount","mountJob","mountContainer","placeholder","mainAnchor","pendingMount","wasDisabled","currentContainer","currentAnchor","traverseStaticChildren","moveTeleport","nextTarget","unmount","hostRemove","doRemove","shapeFlag","children","targetStart","shouldRemove","child","hydrateTeleport","parentAnchor","move","moveType","isReorder","node","nextSibling","hydrateChildren","hydrateAnchor","target2","targetNode","hydrateDisabledTeleport","node2","vnode2","Teleport","isDisabled","leaveCbKey","enterCbKey","useTransitionState","state","onMounted","onBeforeUnmount","TransitionHookValidator","BaseTransitionPropsValidators","recursiveGetSubtree","subTree","BaseTransitionImpl","slots","getTransitionRawChildren","findNonCommentChild","createCommentVNode","rawProps","mode","emptyPlaceholder","innerChild","getInnerChild$1","enterHooks","resolveTransitionHooks","hooks","Comment","setTransitionHooks","oldInnerChild","isSameVNodeType","leavingHooks","earlyRemove","delayedLeave","leavingVNodesCache","getLeavingNodesForType","BaseTransition","leavingVNodes","postClone","appear","persisted","onBeforeEnter","onEnter","onAfterEnter","onEnterCancelled","onBeforeLeave","onLeave","onAfterLeave","onLeaveCancelled","onBeforeAppear","onAppear","onAfterAppear","onAppearCancelled","callHook","callAsyncHook","hook2","leavingVNode","afterHook","cancelHook","called","cancelled","hooks2","isKeepAlive","cloneVNode","keepComment","parentKey","keyedFragmentCount","Fragment","defineComponent","extraOptions","markAsyncBoundary","isTemplateRefKey","refs","desc","pendingSetRefMap","setRef","rawRef","oldRawRef","isUnmount","isAsyncWrapper","refValue","oldRef","setupState","rawSetupState","canSetSetupRef","canSetRef","invalidatePendingSetRef","oldRawRefAtom","_isString","_isRef","doSet","existing","pendingSetRef","onActivated","registerKeepAliveHook","onDeactivated","wrappedHook","injectHook","injectToKeepAliveRoot","keepAliveRoot","injected","onUnmounted","prepend","createHook","lifecycle","onBeforeMount","onBeforeUpdate","onUpdated","onServerPrefetch","onRenderTriggered","onRenderTracked","onErrorCaptured","COMPONENTS","resolveComponent","maybeSelfReference","resolveAsset","NULL_DYNAMIC_COMPONENT","resolveDynamicComponent","component","warnMissing","Component","selfName","getComponentName","resolve","registry","renderList","renderItem","cached","sourceIsArray","sourceIsReactiveArray","isReadonlySource","keys","renderSlot","fallback","noSlotted","hasProps","openBlock","createBlock","createVNode","slot","validSlotContent","ensureValidVNode","slotKey","rendered","vnodes","isVNode","getPublicInstance","isStatefulComponent","publicPropertiesMap","resolveMergedOptions","hasSetupBinding","PublicInstanceProxyHandlers","data","accessCache","appContext","shouldCacheAccess","publicGetter","cssModule","globalProperties","cssModules","descriptor","normalizePropsOrEmits","applyOptions","dataOptions","computedOptions","methods","watchOptions","provideOptions","injectOptions","created","beforeMount","mounted","beforeUpdate","updated","activated","deactivated","beforeDestroy","beforeUnmount","destroyed","unmounted","render","renderTracked","renderTriggered","errorCaptured","serverPrefetch","expose","inheritAttrs","components","filters","resolveInjections","methodHandler","opt","createWatcher","registerLifecycleHook","register","_hook","exposed","checkDuplicateProperties","normalizeInject","h","handler","base","mixins","extendsOptions","globalMixins","optionMergeStrategies","resolved","m","mergeOptions","to","from","strats","asMixin","strat","internalOptionMergeStrats","mergeDataFn","mergeEmitsOrPropsOptions","mergeObjectOptions","mergeAsArray","mergeWatchOptions","mergeInject","merged","createAppContext","uid$1","createAppAPI","hydrate","rootComponent","rootProps","context","installedPlugins","pluginCleanupFns","isMounted","app","version","plugin","mixin","directive","rootContainer","isHydrate","lastApp","getModelModifiers","modelName","emit","event","rawArgs","handlerName","onceHandler","mixinEmitsCache","normalizeEmitsOptions","comp","hasExtends","extendEmits","raw2","normalizedFromExtend","isEmitListener","renderComponentRoot","withProxy","propsOptions","attrs","renderCache","fallthroughAttrs","proxyToUse","thisProxy","normalizeVNode","render2","getFunctionalFallthrough","blockStack","root","filterModelListeners","shouldUpdateComponent","nextVNode","prevProps","prevChildren","nextProps","nextChildren","patchFlag","emits","hasPropsChanged","dynamicProps","hasPropValueChanged","emitsOptions","nextKeys","nextProp","prevProp","updateHOCHostEl","parent","suspense","internalObjectProto","createInternalObject","isInternalObject","initProps","isStateful","setFullProps","updateProps","rawPrevProps","rawCurrentProps","hasAttrsChanged","propsToUpdate","camelizedKey","resolvePropValue","kebabKey","needCastKeys","rawCastValues","camelKey","castValues","isAbsent","hasDefault","propsDefaults","mixinPropsCache","normalizePropsOptions","extendProps","normalizedKey","validatePropName","prop","propType","shouldCast","shouldCastTrue","typeName","isInternalKey","normalizeSlotValue","normalizeSlot","rawSlot","normalizeObjectSlots","rawSlots","normalizeVNodeSlots","assignSlots","initSlots","updateSlots","needDeletionCheck","deletionComparisonTarget","queueEffectWithSuspense","createRenderer","baseCreateRenderer","createHydrationFns","hostInsert","hostPatchProp","hostCreateElement","hostCreateText","hostCreateComment","hostSetText","hostSetElementText","hostParentNode","hostNextSibling","hostSetScopeId","hostInsertStaticContent","patch","getNextHostNode","Text","processText","processCommentNode","Static","mountStaticNode","processFragment","processElement","processComponent","moveStaticNode","removeStaticNode","mountElement","customElement","patchElement","vnodeHook","transition","dirs","resolveChildrenNamespace","setScopeId","invokeVNodeHook","needCallTransitionHooks","needTransition","scopeId","isSuspense","parentVNode","cloneIfMounted","oldProps","newProps","toggleRecurse","patchProps","oldChildren","newChildren","fallbackContainer","oldVNode","newVNode","fragmentStartAnchor","fragmentEndAnchor","fragmentSlotScopeIds","mountComponent","updateComponent","initialVNode","createComponentInstance","setupComponent","setupRenderEffect","updateComponentPreRender","componentUpdateFn","bu","u","nonHydratedAsyncRoot","locateNonHydratedAsyncRoot","update","originNext","nextTree","prevTree","bm","isAsyncWrapperVNode","scopedInitialVNode","c1","prevShapeFlag","c2","patchKeyedChildren","patchUnkeyedChildren","unmountChildren","oldLength","commonLength","nextChild","l2","e1","e2","nextPos","s1","s2","keyToNewIndexMap","j","patched","toBePatched","moved","maxNewIndexSoFar","newIndexToOldIndexMap","prevChild","newIndex","increasingNewIndexSequence","getSequence","nextIndex","anchorVNode","resolveAsyncComponentPlaceholder","leave","delayLeave","afterLeave","remove2","performLeave","cacheIndex","memo","shouldInvokeDirs","shouldInvokeVnodeHook","unmountComponent","shouldInvalidateMemo","removeFragment","performRemove","bum","um","invalidateMount","teleportEnd","isFlushing","currentNamespace","allowed","ch1","ch2","len","arrI","subComponent","anchorVnode","currentBlock","disableTracking","closeBlock","isBlockTreeEnabled","inVOnce","setupBlock","createElementBlock","createBaseVNode","normalizeKey","normalizeRef","ref_key","ref_for","isBlockNode","needFullChildrenNormalization","normalizeChildren","_createVNode","cloned","isClassComponent","guardReactiveProps","klass","style","extraProps","mergeRef","cloneTransition","mergedProps","mergeProps","createTextVNode","text","flag","asBlock","slotFlag","toMerge","incoming","emptyAppContext","uid","internalSetCurrentInstance","setInSSRSetupState","g","registerGlobalSetter","setters","unsetCurrentInstance","setupResult","setupStatefulComponent","setup","setupContext","createSetupContext","isAsyncSetup","resolvedResult","handleSetupResult","finishComponentSetup","skipOptions","attrsProxyHandlers","includeInferred","computed$1","propsOrChildren","policy","tt","unsafeToTrustedHTML","svgNS","mathmlNS","doc","templateContainer","nodeOps","tag","is","selector","content","before","template","wrapper","TRANSITION","ANIMATION","vtcKey","DOMTransitionPropsValidators","TransitionPropsValidators","decorate$1","t","Transition","resolveTransitionProps","h2","hasExplicitCallback","baseProps","duration","enterFromClass","enterActiveClass","enterToClass","appearFromClass","appearActiveClass","appearToClass","leaveFromClass","leaveActiveClass","leaveToClass","durations","normalizeDuration","enterDuration","leaveDuration","finishEnter","isAppear","isCancelled","removeTransitionClass","finishLeave","makeEnterHook","nextFrame","addTransitionClass","whenTransitionEnds","forceReflow","NumberOf","cls","_vtc","endId","expectedType","explicitTimeout","resolveIfNotStale","timeout","propCount","getTransitionInfo","endEvent","ended","onEnd","styles","getStyleProperties","transitionDelays","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationDurations","animationTimeout","hasTransform","delays","d","toMs","patchClass","isSVG","transitionClasses","vShowOriginalDisplay","vShowHidden","vShow","setDisplay","CSS_VAR_TEXT","displayRE","patchStyle","isCssString","hasControlledDisplay","prevStyle","setStyle","shouldPreserveTextareaResizeStyle","cssVarText","importantRE","prefixed","autoPrefix","prefixes","prefixCache","rawName","xlinkNS","patchAttr","isBoolean","patchDOMProp","attrName","needRemove","addEventListener","removeEventListener","veiKey","patchEvent","prevValue","nextValue","invokers","existingInvoker","parseName","invoker","createInvoker","optionsModifierRE","cachedNow","getNow","initialValue","patchStopImmediatePropagation","originalStop","isNativeOn","patchProp","shouldSetAsProp","shouldSetAsPropForVueCE","camelize$1","REMOVAL","defineCustomElement","_createApp","Comp","VueCustomElement","VueElement","initialProps","BaseClass","_def","_props","createApp","mutations","isAsync","numberProps","asyncDef","declaredPropKeys","shouldReflect","shouldUpdate","ob","dispatch","parentComp","nonce","insertionAnchor","slotName","outlets","walker","roots","found","positionMap","newPositionMap","moveCbKey","decorate","TransitionGroupImpl","moveClass","hasCSSTransform","callPendingCbs","recordPosition","movedChildren","applyTranslation","cssTransitionProps","getPosition","TransitionGroup","oldPos","newPos","dx","dy","rect","scaleX","scaleY","clone","getModelAssigner","onCompositionStart","onCompositionEnd","assignKey","castValue","trim","number","vModelText","lazy","castToNumber","elValue","rootNode","vModelCheckbox","_","modelValue","elementValue","getValue","checked","assign","filtered","getCheckboxValue","setChecked","vModelSelect","isSetModel","selectedVal","o","setSelected","_binding","isMultiple","isArrayValue","option","optionValue","optionType","systemModifiers","modifierGuards","withModifiers","cacheKey","guard","keyNames","withKeys","eventKey","k","rendererOptions","renderer","ensureRenderer","containerOrSelector","normalizeContainer","resolveRootNamespace","isExternalUsable","resolveEndpoints","config","derive","autoSegment","manager","resolveToken","out","normalizeAuth","auth","useFileApi","endpoints","authConf","authHeaders","extra","token","creds","authHeadersSync","credentialsMode","statusMessage","status","tr","jsonFetch","url","init","headers","permissionsUrl","listPermissions","resolveEmail","email","searchUsers","q","addPermission","body","updatePermission","level","deletePermission","invitePermission","shareMail","qs","params","sp","managerUrl","action","sep","search","filter","subfolders","newFolder","rename","items","deleteItems","copy","moveAsync","sourceDir","deleteAsync","restore","listTrash","storageName","restoreIds","ids","restored","uploadMultipart","files","onProgress","fd","f","reject","xhr","ev","downloadUrl","previewUrl","fetchBlob","blob","mime","fetchArrayBuffer","limits","capabilities","createShare","payload","listShares","revokeShare","uuid","archiveList","archiveExtract","members","archiveAdd","useUploadChunked","api","DEFAULT_CHUNK","DEFAULT_PARALLEL","uploadFile","opts","_b","chunkSize","parallel","aborters","report","actualChunk","partProgress","completed","cursor","uploadPart","entry","ctl","delta","etag","blobSize","MAX_RETRIES","uploadPartWithRetry","attempt","leaked","delay","worker","workers","final","asError","useSelection","selected","click","mod","list","aIdx","bIdx","lo","hi","clear","selectAll","add","size","isEmpty","nodes","useKeyboardShortcuts","rootEl","handlers","onKey","ctrl","en","messages","useLocale","localeRef","lookup","code","vars","formatSize","bytes","units","div","nodeDisplayName","POLL_MS","RETAIN_MS","normalizeOp","num","vals","rawStatus","sources","opType","usePendingOps","ops","announced","settledAt","firstPollDone","hasActive","timer","startPolling","poll","stopPolling","op","localIds","visibleIncoming","visibleIds","local","now","after","at","dismiss","monacoPromise","highlightPromise","monacoCached","highlightCached","preloadEditor","ensureMonaco","ensureHighlight","getMonaco","__props","__emit","searchEl","localSearch","debounce","onSearchInput","focusSearch","__expose","toolbarItems","fire","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_unref","_cache","_hoisted_5","_toDisplayString","_Fragment","_renderList","_normalizeClass","$event","_hoisted_7","_hoisted_8","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_16","tags","loading","adding","newTag","palette","colorFor","buildHeaders","load","persist","previous","_normalizeStyle","_createTextVNode","_withKeys","limit","fmtTime","diff","_hoisted_3","_hoisted_6","confinedRel","floorLabel","rel","parts","crumbs","adapterPrefix","floor","below","part","label","onClick","crumb","onContext","onCrumbDragOver","onCrumbDrop","editing","pathDraft","pathInput","startEdit","trimmed","submitPath","clean","slash","adapter","cancelEdit","_hoisted_4","toggle","isSelected","onRowClick","onRowDbl","onRowCtx","onItemDragStart","onItemDragOver","onItemDrop","pressTimer","pressTarget","onTouchStart","t0","cancelPress","iconFor","displayDate","ms","parentDir","stripped","idx","rows","_createBlock","StarButton","_hoisted_9","_hoisted_13","_hoisted_14","onDbl","onCtx","open","y","targetNodes","menuEl","show","clampToViewport","margin","vw","vh","hide","pick","visibleActions","prefersDark","mq","syncPrefersDark","themeClass","_Teleport","_Transition","visible","statusLabel","sorted","percent","statusClass","summary","verb","_TransitionGroup","cardEl","focusable","onBackdrop","_renderSlot","_ctx","$slots","submit","Modal","isOpen","usePin","expiresAt","maxDownloads","toast","shQuote","cliCommand","sh","MAX_TEXT_BYTES","ONLYOFFICE_SCRIPT_ID","ext","IMAGE","VIDEO","AUDIO","CODE_LANGS","TEXT_PLAIN","OFFICE","VIEWER_MAP","kind","wantEdit","viewerCmp","viewerLoadError","pdfFallbackToNative","loadViewerFor","extension","loader","onPdfFallback","viewerProps","src","stripAdapter","openInNewTab","buildAndOpenStandalone","openEditInNewTab","EDITABLE_EXTS","canEditKind","download","fetchError","rawText","tooLarge","mdDirty","mdSaving","mdReRenderTimer","mdAutosaveTimer","onMdInput","renderMarkdown","saveMarkdown","fetchText","markdownHtml","markdownEl","Md","sanitizeHtml","enrichMarkdown","html","_c","blocks","mermaid","katex","block","isMermaid","isMath","svg","codeHtml","highlightCode","language","hljs","monacoEl","monacoEditor","codeAutosaveTimer","monacoReady","saving","saveOk","saveError","disposeMonaco","monacoLanguageFor","tryMountMonaco","monaco","editable","dark","saveCode","txt","runOrchestration","officeError","disposeOnlyOfficeEditor","lang","mountOnlyOfficeEditor","codeLanguage","officeEl","officeEditor","documentServerUrl","loadOnlyOfficeScript","mountId","formatOnlyOfficeError","W","script","_hoisted_45","_hoisted_15","_hoisted_18","_hoisted_19","_hoisted_21","_hoisted_22","_hoisted_23","_resolveDynamicComponent","_mergeProps","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","iframeRef","formats","selectedTo","srcExt","fromFmt","ins","toList","uniq","iframeSrc","msgId","pending","send","cmd","transfer","onMessage","loadFormats","doConvert","buf","outName","file","fb","L","pathParts","segs","tab","canManage","direct","inherited","storageRbac","busy","notice","noAccount","createRole","inviteResult","suggestions","showSuggest","searchTimer","levels","levelLabel","shares","shareBusy","sharePwd","shareExpiry","shareResult","shareErr","copied","shareMailTo","shareMailBusy","shareMailNotice","expiryOptions","dropPwd","dropExpiry","dropShowAdv","dropMaxFiles","dropMaxSizeMB","dropAllowedExt","dropAskName","dropBusy","dropErr","dropResult","dropMailTo","dropMailBusy","dropMailNotice","splitEmails","mailResultNotice","sent","failed","reload","reloadShares","onEmailInput","pickUser","lvl","submitEmail","addr","inviteCreateUser","gotoShareWithMail","changeLevel","newLevel","removeGrant","glabel","ginitial","expiresAtISO","createLink","sendShareMail","detail","dropExpiresAtISO","createDropLink","drop_settings","exts","sendDropMail","revoke","_hoisted_17","_withModifiers","_hoisted_20","_hoisted_39","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","_hoisted_55","_hoisted_56","_hoisted_57","_hoisted_58","_hoisted_59","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_70","_hoisted_71","_hoisted_72","_hoisted_73","_hoisted_74","_hoisted_75","_hoisted_76","_hoisted_77","_hoisted_78","_hoisted_79","_hoisted_80","_hoisted_81","_hoisted_82","_hoisted_83","_hoisted_85","_hoisted_86","_hoisted_87","_hoisted_88","_hoisted_89","_hoisted_90","_hoisted_91","_hoisted_93","_hoisted_94","VIEW_MODE_KEY","PATH_LS_KEY","FE_DND_MIME","chunked","pendingOps","flashToast","rootPathProp","rootFloor","initialFloorPath","currentPath","dirname","dirPerm","viewMode","stored","searchQuery","trashMode","trashOrigin","trashActive","locale","canGoUp","atVirtualRoot","multiStorageRoot","goUp","selection","clipboard","capabilitiesData","starredIds","showRecents","showTagPicker","tagPickerNode","recentRefreshKey","loadStarred","buildAuthHeaders","onStarChange","markRecent","openTagPickerFor","onRecentOpen","openNode","effectiveOnlyOfficeBase","effectiveOnlyOfficeConfigEndpoint","effectiveDrawioUrl","override","effectiveConvertUrl","uploadJobs","fileInputEl","showNewFolder","showRename","showDelete","showShare","showPreview","renameTarget","shareTarget","activeShare","previewTarget","previewMode","showConvert","convertTarget","showPerm","permTarget","permCanEdit","selPerm","sel","canWriteHere","ctxRef","toolbarRef","toastTimer","msg","splitVirtualPath","virtualToWire","wireToVirtual","virtualStorageRows","requested","qualify","resp","dirRel","inRoot","isTrashListing","trashEntryEnabled","loadTrash","wire","persistMode","readPersistedPath","hashSyncSuppressed","writePersistedPath","onHashChange","fromPersist","cap","cut","copyToClipboard","paste","OFFICE_EXTS","previewModeForExt","VIEW_DEFAULT_EXTS","restoreSelection","targets","previewNode","openNodeInNewTab","ctxMode","breadcrumbCtxPath","breadcrumbCtxLabel","selectionMode","onToolbarAction","dispatchItemAction","onContextTarget","onContextCanvas","onCrumbContext","contextActions","any","single","trimmedPath","selectionActionList","isFile","tagsLabel","singleHasId","copyIdLabel","w","accessLabel","toolbarActions","onContextAction","onCopyPath","downloadFile","openConvert","openShare","duplicate","submitNewFolder","submitRename","confirmDelete","onConvertDone","submitShare","share","closeShare","triggerUpload","onFilePicked","input","uploadFiles","canChunk","chunkedUpload","legacyUpload","registered","dragCounter","dragOver","isExternalFileDrag","dt","hasFile","it","onDragEnter","onDragLeave","onDragOver","onDropUpload","onWindowDragOver","onWindowDrop","clippedPaths","moveSourcesAsync","targetDir","opLabel","onItemDropInto","onCrumbDropInto","adapterPath","onCancelUpload","onDismissUpload","onNavigate","Toolbar","Breadcrumb","ListView","GridView","UploadProgress","PendingOpsTray","ContextMenu","NewFolderModal","RenameModal","DeleteConfirmModal","ShareModal","PreviewModal","ConvertModal","PermissionsModal","RecentlyOpened","TagPicker","stylesInjected","injectStylesOnce","coreCss","buildConfig","FilexExplorerWrapper","FileExplorer","FilexElement"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|