@brftech/filex 0.13.0 → 0.13.2

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.
Files changed (34) hide show
  1. package/dist/{ArchiveViewer-Bw4qt4BQ.js → ArchiveViewer-xcMqjnqy.js} +27 -27
  2. package/dist/ArchiveViewer-xcMqjnqy.js.map +1 -0
  3. package/dist/CsvViewer-CLzV0FCe.js +131 -0
  4. package/dist/CsvViewer-CLzV0FCe.js.map +1 -0
  5. package/dist/{DrawioViewer-BsE2fQqG.js → DrawioViewer-DuJ2CfSd.js} +16 -16
  6. package/dist/{DrawioViewer-BsE2fQqG.js.map → DrawioViewer-DuJ2CfSd.js.map} +1 -1
  7. package/dist/{EpubViewer-B87lY2bx.js → EpubViewer-CaCIiF4j.js} +29 -29
  8. package/dist/EpubViewer-CaCIiF4j.js.map +1 -0
  9. package/dist/{IpynbViewer-B1hyfKPb.js → IpynbViewer-D4wu8rc3.js} +32 -32
  10. package/dist/IpynbViewer-D4wu8rc3.js.map +1 -0
  11. package/dist/{MermaidViewer-BGr51EGN.js → MermaidViewer-Dx4wXykM.js} +27 -27
  12. package/dist/MermaidViewer-Dx4wXykM.js.map +1 -0
  13. package/dist/{PsdViewer-dGW1Q1mx.js → PsdViewer-DR3C4XZq.js} +35 -35
  14. package/dist/PsdViewer-DR3C4XZq.js.map +1 -0
  15. package/dist/{TiffViewer-CjxGP7f0.js → TiffViewer--HDhn-6v.js} +41 -41
  16. package/dist/TiffViewer--HDhn-6v.js.map +1 -0
  17. package/dist/{Viewer3D-teKAfhUJ.js → Viewer3D-aGTniZWl.js} +14 -14
  18. package/dist/{Viewer3D-teKAfhUJ.js.map → Viewer3D-aGTniZWl.js.map} +1 -1
  19. package/dist/filex.js +1 -1
  20. package/dist/filex.umd.cjs +38 -38
  21. package/dist/filex.umd.cjs.map +1 -1
  22. package/dist/{index-4kRs6jnx.js → index-C_N3pzqm.js} +3854 -3860
  23. package/dist/index-C_N3pzqm.js.map +1 -0
  24. package/dist/style.css +1 -1
  25. package/package.json +2 -2
  26. package/dist/ArchiveViewer-Bw4qt4BQ.js.map +0 -1
  27. package/dist/CsvViewer-CzOfR70Z.js +0 -131
  28. package/dist/CsvViewer-CzOfR70Z.js.map +0 -1
  29. package/dist/EpubViewer-B87lY2bx.js.map +0 -1
  30. package/dist/IpynbViewer-B1hyfKPb.js.map +0 -1
  31. package/dist/MermaidViewer-BGr51EGN.js.map +0 -1
  32. package/dist/PsdViewer-dGW1Q1mx.js.map +0 -1
  33. package/dist/TiffViewer-CjxGP7f0.js.map +0 -1
  34. package/dist/index-4kRs6jnx.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-C_N3pzqm.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/lib/realtime.ts","../../core/src/composables/useRealtime.ts","../../core/src/composables/useThumbs.ts","../../core/src/composables/useMonacoLoader.ts","../../core/src/components/PresenceBar.vue","../../core/src/components/ContextMenu.vue","../../core/src/components/Toolbar.vue","../../core/src/components/TagPicker.vue","../../core/src/components/RecentlyOpened.vue","../../core/src/components/Breadcrumb.vue","../../core/src/lib/fileIcons.ts","../../core/src/lib/snippet.ts","../../core/src/lib/dragGhost.ts","../../core/src/components/StarButton.vue","../../core/src/components/ListView.vue","../../core/src/components/GridView.vue","../../core/src/components/GalleryView.vue","../../core/src/components/UploadProgress.vue","../../core/src/components/PendingOpsTray.vue","../../core/src/components/InspectorPanel.vue","../../core/src/components/CommandPalette.vue","../../core/src/modals/Modal.vue","../../core/src/components/ShortcutsHelp.vue","../../core/src/lib/themes.ts","../../core/src/components/ThemeGallery.vue","../../core/src/components/ShortcutSettings.vue","../../core/src/modals/PreviewModal.vue","../../core/src/components/QuickLook.vue","../../core/src/components/OperationsCenter.vue","../../core/src/composables/useOperations.ts","../../core/src/components/OnboardingTour.vue","../../core/src/components/TabBar.vue","../../core/src/lib/e2ecrypto.ts","../../core/src/lib/listing.ts","../../core/src/components/SecondaryPane.vue","../../core/src/composables/useTabs.ts","../../core/src/components/EncryptedFolderModal.vue","../../core/src/modals/NewFolderModal.vue","../../core/src/modals/RenameModal.vue","../../core/src/modals/DeleteConfirmModal.vue","../../core/src/modals/ShareModal.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 = \"&quot;\";\n break;\n case 38:\n escaped = \"&amp;\";\n break;\n case 39:\n escaped = \"&#39;\";\n break;\n case 60:\n escaped = \"&lt;\";\n break;\n case 62:\n escaped = \"&gt;\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n return src.replace(commentStripRE, \"\");\n}\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 /* wiring:e2 — dir rows: true when the folder is E2E-encrypted (carries a\n * `.filex-e2e.json` marker). Drives the 🔒 badge in the listings. */\n e2e?: boolean;\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' | 'gallery'; /* wiring:d2 — üçüncü görünüm: galeri */\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 /* wiring:e2 — E2E-encrypted folder awareness: `e2e` is true when the listed\n * dir IS an encrypted root; `e2e_root` is the adapter-qualified path of the\n * nearest encrypted root covering this dir (set for the root itself AND for\n * every subfolder inside the subtree). Absent on plain folders / old\n * backends — consumers must stay undefined-safe. */\n e2e?: boolean;\n e2e_root?: string;\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}\n\n/* === koru:k1 — version history (inspector panel) === */\n\n/** Mirrors backend `model.NodeVersion` (GET /api/files/versions?node_id=…). */\nexport interface NodeVersion {\n id: number;\n node_id: number;\n version_n: number;\n storage_key?: string;\n size: number;\n etag?: string;\n created_at: string;\n}\nexport interface UserSearchResponse {\n users: UserSuggestion[];\n}\n\n/* === calisma:d3 — node comments (inspector panel) === */\n\n/** Mirrors backend `model.NodeComment` (GET /api/files/comments?node_id=…). */\nexport interface NodeComment {\n id: number;\n node_id: number;\n user_id: number;\n body: string;\n created_at: string;\n updated_at?: string;\n /** Joined author display name (email fallback), filled by the backend. */\n author_name?: string;\n /** Whether the CURRENT caller may delete this row (author or admin). */\n can_delete?: boolean;\n}\n/* === /calisma:d3 === */\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/* === bul:s3 — global search (GET /api/files/search) === */\n\nexport type GlobalSearchScope = 'name' | 'content' | 'all';\n\n/**\n * One hit from the dedicated files-search endpoint. The backend returns raw\n * node rows (`{results: [...]}`), so `path` is the IN-STORAGE relative path\n * (no `adapter://` prefix) and the storage comes back as a numeric\n * `storage_id`. `snippet`/`matched` are the v0.2 \"Bul\" contract additions —\n * older backends simply omit them, so every consumer must stay\n * undefined-safe.\n */\nexport interface GlobalSearchHit {\n id?: number;\n storage_id?: number;\n name?: string;\n path?: string;\n /** `file` | `dir` (backend NodeType). */\n type?: string;\n size?: number;\n mime?: string;\n /** Plain-text content snippet; matches wrapped in «» (never HTML). */\n snippet?: string;\n /** Where the hit matched: name | content | both. */\n matched?: 'name' | 'content' | 'both';\n [k: string]: unknown;\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 /* === bul:s3 — global \"search everywhere\" ===\n * Derived from the manager endpoint by swapping `/manager` for `/search`\n * (same trick permissionsUrl uses), so embedded proxies that forward the\n * whole /api/files/* subtree keep working. Errors and legacy backends\n * degrade to an empty result list — the palette just shows nothing. */\n async function globalSearch(\n query: string,\n opts: { limit?: number; scope?: GlobalSearchScope } = {},\n ): Promise<GlobalSearchHit[]> {\n const base = endpoints.manager.replace(/\\/manager(\\?.*)?$/, '/search');\n const sep = base.includes('?') ? '&' : '?';\n const url = `${base}${sep}${qs({ q: query, limit: opts.limit, scope: opts.scope })}`;\n const data = await jsonFetch<{ results?: GlobalSearchHit[] | null }>(url);\n return Array.isArray(data?.results) ? data.results : [];\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 /* === koru:k1 — version history (inspector panel) ===\n * Derived from the manager endpoint by swapping `/manager` for `/versions`\n * (same trick permissionsUrl/globalSearch use) so embedded proxies that\n * forward the whole /api/files/* subtree keep working.\n * GET /api/files/versions?node_id=N → {versions, node_id}\n * POST /api/files/versions/restore → {node_id, version_id, snapshot_current}\n * POST /api/files/versions/snapshot → {node_id} (may not exist on older backends)\n */\n function versionsUrl(sub = ''): string {\n const base = endpoints.manager.replace(/\\/manager(\\?.*)?$/, '/versions');\n return base + sub;\n }\n async function listVersions(nodeId: number): Promise<NodeVersion[]> {\n const data = await jsonFetch<{ versions?: NodeVersion[] | null }>(\n versionsUrl() + '?node_id=' + encodeURIComponent(String(nodeId)),\n );\n return Array.isArray(data?.versions) ? data.versions : [];\n }\n async function restoreVersion(\n nodeId: number,\n versionId: number,\n snapshotCurrent = true,\n ): Promise<void> {\n await jsonFetch(versionsUrl('/restore'), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n node_id: nodeId,\n version_id: versionId,\n snapshot_current: snapshotCurrent,\n }),\n });\n }\n async function snapshotVersion(nodeId: number): Promise<void> {\n await jsonFetch(versionsUrl('/snapshot'), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ node_id: nodeId }),\n });\n }\n /* === /koru:k1 === */\n\n /* === calisma:d3 — node comments (inspector panel) ===\n * Same manager-URL derivation trick as versions/permissions so embedded\n * proxies forwarding the whole /api/files/* subtree keep working.\n * GET /api/files/comments?node_id=N → {comments, node_id}\n * POST /api/files/comments → {node_id, body}\n * DELETE /api/files/comments/{id} → {ok}\n */\n function commentsUrl(sub = ''): string {\n const base = endpoints.manager.replace(/\\/manager(\\?.*)?$/, '/comments');\n return base + sub;\n }\n async function listComments(nodeId: number): Promise<NodeComment[]> {\n const data = await jsonFetch<{ comments?: NodeComment[] | null }>(\n commentsUrl() + '?node_id=' + encodeURIComponent(String(nodeId)),\n );\n return Array.isArray(data?.comments) ? data.comments : [];\n }\n async function addComment(nodeId: number, body: string): Promise<NodeComment> {\n const data = await jsonFetch<{ comment: NodeComment }>(commentsUrl(), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ node_id: nodeId, body }),\n });\n return data.comment;\n }\n async function deleteComment(id: number): Promise<void> {\n await jsonFetch(commentsUrl('/' + encodeURIComponent(String(id))), {\n method: 'DELETE',\n });\n }\n /* === /calisma:d3 === */\n\n // Mint a short-lived WebSocket auth ticket for the realtime layer. Derived\n // from the manager URL (so it flows through the same host proxy) and uses the\n // same auth/creds as every other call. Returns null on any failure (a backend\n // without the endpoint, a network error) so the caller falls back to polling.\n async function wsTicket(): Promise<{ ticket: string; ws_url: string } | null> {\n const url = endpoints.manager.replace(/\\/manager(\\?.*)?$/, '/ws-ticket');\n try {\n return await jsonFetch<{ ticket: string; ws_url: string }>(url, { method: 'POST' });\n } catch {\n return null;\n }\n }\n\n return {\n // Realtime\n wsTicket,\n // Manager\n index,\n search,\n globalSearch /* bul:s3 */,\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 // Version history (koru:k1 inspector)\n listVersions,\n restoreVersion,\n snapshotVersion,\n // Node comments (calisma:d3 inspector)\n listComments,\n addComment,\n deleteComment,\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 * wiring:c2 — rewritten as a REGISTRY: every action is declared once\n * (id + default combo + i18n label + category) and the user may remap\n * the customizable ones. Overrides persist in localStorage under\n * `filex.shortcuts` as `{ \"<actionId>\": \"<combo>\" }` — only deviations\n * from the defaults are stored; an empty string means \"unbound\".\n *\n * Canonical combo format (also the display format): modifiers in\n * `Ctrl+Alt+Shift` order followed by a single key token, joined with\n * `+`. Key tokens: uppercase letters/digits, symbols as typed (`/`,\n * `?`), `F1`–`F12`, `Space`, `Enter`, `Esc`, `Del`, `Backspace`, `Tab`,\n * `Home`, `End`, `PgUp`, `PgDn` and arrows as `↑ ↓ ← →`. Meta (Cmd) is\n * folded into `Ctrl` so one saved combo works on macOS too. For\n * printable symbols Shift is omitted (`?` already encodes it).\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 { computed, onMounted, onBeforeUnmount, ref, type ComputedRef, 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; // (unwired — kept for API compat)\n onPathJump?: () => void; // Cmd+K / Ctrl+K\n onGoUp?: () => void; // Alt+Up / Backspace (when nothing selected)\n onShowHelp?: () => void; // ? (Shift+/ on most layouts)\n onToggleInspector?: () => void; // i (koru:k1 details panel)\n onToggleHidden?: () => void; // Ctrl+Shift+. — dot-file visibility\n onQuickLook?: () => void; // Space (wiring:c2 quick-look overlay)\n /* wiring:d1 — tab strip actions */\n onTabNew?: () => void; // Ctrl+T\n onTabClose?: () => void; // Ctrl+W\n onTabNext?: () => void; // Ctrl+Tab\n onTabPrev?: () => void; // Ctrl+Shift+Tab\n /* /wiring:d1 */\n hasSelection?: () => boolean; // disambiguates Backspace\n}\n\n// --------------------------------------------------------------------\n// Registry\n// --------------------------------------------------------------------\n\n/** One remappable action in the shortcut registry. */\nexport interface ShortcutActionDef {\n /** Stable id — also the localStorage override key. */\n id: string;\n /** Default combo in canonical form. */\n defaultCombo: string;\n /**\n * Extra built-in combos that also trigger the action but are NOT\n * remappable (e.g. Backspace on go-up, which carries the\n * selection-dependent dual behaviour). Shown in the help sheet and\n * reserved in conflict detection.\n */\n fixedCombos?: string[];\n labelKey: string;\n groupKey: string;\n /** false → the combo can't be remapped (Esc). Default true. */\n customizable?: boolean;\n /** false → don't preventDefault on match (Enter / Esc). Default true. */\n prevent?: boolean;\n /** true → fires even when focus sits in a form control (Esc). */\n inForms?: boolean;\n}\n\n/** Registry order = help/settings display order. */\nexport const SHORTCUT_ACTIONS: ShortcutActionDef[] = [\n // Navigation\n { id: 'palette', defaultCombo: 'Ctrl+K', labelKey: 'shortcuts.palette', groupKey: 'shortcuts.group.nav' },\n { id: 'search', defaultCombo: '/', labelKey: 'shortcuts.search', groupKey: 'shortcuts.group.nav' },\n { id: 'go-up', defaultCombo: 'Alt+↑', fixedCombos: ['Backspace'], labelKey: 'shortcuts.go_up', groupKey: 'shortcuts.group.nav' },\n { id: 'open', defaultCombo: 'Enter', prevent: false, labelKey: 'shortcuts.open', groupKey: 'shortcuts.group.nav' },\n { id: 'quicklook', defaultCombo: 'Space', labelKey: 'shortcuts.quicklook', groupKey: 'shortcuts.group.nav' },\n { id: 'close', defaultCombo: 'Esc', customizable: false, prevent: false, inForms: true, labelKey: 'shortcuts.close', groupKey: 'shortcuts.group.nav' },\n { id: 'inspector', defaultCombo: 'I', labelKey: 'shortcuts.inspector', groupKey: 'shortcuts.group.nav' } /* koru:k1 */,\n { id: 'help', defaultCombo: '?', labelKey: 'shortcuts.help', groupKey: 'shortcuts.group.nav' },\n { id: 'toggle-hidden', defaultCombo: 'Ctrl+Shift+.', labelKey: 'shortcuts.toggle_hidden', groupKey: 'shortcuts.group.nav' },\n // Selection\n { id: 'select-all', defaultCombo: 'Ctrl+A', labelKey: 'shortcuts.select_all', groupKey: 'shortcuts.group.selection' },\n // File operations\n { id: 'rename', defaultCombo: 'F2', labelKey: 'shortcuts.rename', groupKey: 'shortcuts.group.file' },\n { id: 'delete', defaultCombo: 'Del', labelKey: 'shortcuts.delete', groupKey: 'shortcuts.group.file' },\n { id: 'cut', defaultCombo: 'Ctrl+X', labelKey: 'shortcuts.cut', groupKey: 'shortcuts.group.file' },\n { id: 'copy', defaultCombo: 'Ctrl+C', labelKey: 'shortcuts.copy', groupKey: 'shortcuts.group.file' },\n { id: 'paste', defaultCombo: 'Ctrl+V', labelKey: 'shortcuts.paste', groupKey: 'shortcuts.group.file' },\n /* wiring:d1 — tabs. Note: browsers reserve Ctrl+T/W/Tab in normal pages\n * (preventDefault can't stop them there); they work in webcomponent/PWA/\n * kiosk contexts and stay remappable through the settings modal. */\n { id: 'tab-new', defaultCombo: 'Ctrl+T', labelKey: 'shortcuts.tab_new', groupKey: 'shortcuts.group.tabs' },\n { id: 'tab-close', defaultCombo: 'Ctrl+W', labelKey: 'shortcuts.tab_close', groupKey: 'shortcuts.group.tabs' },\n { id: 'tab-next', defaultCombo: 'Ctrl+Tab', labelKey: 'shortcuts.tab_next', groupKey: 'shortcuts.group.tabs' },\n { id: 'tab-prev', defaultCombo: 'Ctrl+Shift+Tab', labelKey: 'shortcuts.tab_prev', groupKey: 'shortcuts.group.tabs' },\n /* /wiring:d1 */\n];\n\n/** action id → ShortcutHandlers callback name. */\nconst HANDLER_KEY: Record<string, keyof ShortcutHandlers> = {\n palette: 'onPathJump',\n search: 'onFocusSearch',\n 'go-up': 'onGoUp',\n open: 'onOpen',\n quicklook: 'onQuickLook',\n close: 'onClose',\n inspector: 'onToggleInspector',\n 'toggle-hidden': 'onToggleHidden',\n help: 'onShowHelp',\n 'select-all': 'onSelectAll',\n rename: 'onRename',\n delete: 'onDelete',\n cut: 'onCut',\n copy: 'onCopy',\n paste: 'onPaste',\n /* wiring:d1 */\n 'tab-new': 'onTabNew',\n 'tab-close': 'onTabClose',\n 'tab-next': 'onTabNext',\n 'tab-prev': 'onTabPrev',\n};\n\n// --------------------------------------------------------------------\n// Overrides (localStorage `filex.shortcuts`)\n// --------------------------------------------------------------------\n\nconst SHORTCUTS_LS_KEY = 'filex.shortcuts';\n\nfunction readOverrides(): Record<string, string> {\n try {\n const raw = localStorage.getItem(SHORTCUTS_LS_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== 'object') return {};\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(parsed as Record<string, unknown>)) {\n if (typeof v === 'string' && SHORTCUT_ACTIONS.some((a) => a.id === k)) out[k] = v;\n }\n return out;\n } catch {\n return {};\n }\n}\n\n// Module-level so the key handler, the \"?\" help sheet and the settings\n// modal all observe the same reactive mapping.\nconst overrides = ref<Record<string, string>>(readOverrides());\n\nfunction writeOverrides(): void {\n try {\n if (Object.keys(overrides.value).length === 0) localStorage.removeItem(SHORTCUTS_LS_KEY);\n else localStorage.setItem(SHORTCUTS_LS_KEY, JSON.stringify(overrides.value));\n } catch {\n /* private mode / quota */\n }\n}\n\nfunction defOf(id: string): ShortcutActionDef | undefined {\n return SHORTCUT_ACTIONS.find((a) => a.id === id);\n}\n\n/** Current combo for an action ('' = unbound). */\nexport function effectiveCombo(id: string): string {\n const o = overrides.value[id];\n if (o !== undefined) return o;\n return defOf(id)?.defaultCombo ?? '';\n}\n\n/** Set (or clear back to default) a user override. '' unbinds. */\nexport function setShortcutOverride(id: string, combo: string): void {\n const def = defOf(id);\n if (!def || def.customizable === false) return;\n const next = { ...overrides.value };\n if (combo === def.defaultCombo) delete next[id];\n else next[id] = combo;\n overrides.value = next;\n writeOverrides();\n}\n\nexport function resetShortcut(id: string): void {\n if (!(id in overrides.value)) return;\n const next = { ...overrides.value };\n delete next[id];\n overrides.value = next;\n writeOverrides();\n}\n\nexport function resetAllShortcuts(): void {\n overrides.value = {};\n writeOverrides();\n}\n\nexport interface ShortcutConflict {\n id: string;\n /** true → the clash is with a fixed (non-remappable) combo. */\n fixed: boolean;\n}\n\n/**\n * Does `combo` already trigger another action? Checks both effective\n * combos and the reserved fixed combos (Backspace, Esc). Returns null\n * when free.\n */\nexport function findShortcutConflict(combo: string, excludeId: string): ShortcutConflict | null {\n if (!combo) return null;\n for (const def of SHORTCUT_ACTIONS) {\n if (def.id === excludeId) continue;\n if (def.fixedCombos?.includes(combo)) return { id: def.id, fixed: true };\n if (effectiveCombo(def.id) === combo) return { id: def.id, fixed: def.customizable === false };\n }\n return null;\n}\n\n// --------------------------------------------------------------------\n// Event → canonical combo\n// --------------------------------------------------------------------\n\nconst KEY_TOKEN_MAP: Record<string, string> = {\n ' ': 'Space',\n Spacebar: 'Space',\n Escape: 'Esc',\n Delete: 'Del',\n ArrowUp: '↑',\n ArrowDown: '↓',\n ArrowLeft: '←',\n ArrowRight: '→',\n PageUp: 'PgUp',\n PageDown: 'PgDn',\n};\n\nconst MODIFIER_KEYS = new Set(['Control', 'Alt', 'Shift', 'Meta', 'AltGraph', 'CapsLock', 'NumLock', 'ScrollLock', 'Fn', 'Dead']);\n\nfunction keyToken(e: KeyboardEvent): string | null {\n const k = e.key;\n if (!k || MODIFIER_KEYS.has(k)) return null;\n const mapped = KEY_TOKEN_MAP[k];\n if (mapped) return mapped;\n if (k.length === 1) {\n const upper = k.toUpperCase();\n // Letters normalize to uppercase; symbols pass through as typed.\n return upper;\n }\n return k; // 'Enter', 'F2', 'Tab', 'Home', 'End', 'Backspace', …\n}\n\n/**\n * Canonical combo for a keyboard event, or null for a bare modifier\n * press. Meta folds into Ctrl; Shift is dropped for printable symbols\n * because the produced character already encodes it (`?` not `Shift+?`).\n */\nexport function comboFromEvent(e: KeyboardEvent): string | null {\n const key = keyToken(e);\n if (!key) return null;\n const parts: string[] = [];\n if (e.ctrlKey || e.metaKey) parts.push('Ctrl');\n if (e.altKey) parts.push('Alt');\n const printableSymbol = key.length === 1 && key.toUpperCase() === key.toLowerCase();\n if (e.shiftKey && !printableSymbol) parts.push('Shift');\n parts.push(key);\n return parts.join('+');\n}\n\n// --------------------------------------------------------------------\n// Reactive views (help sheet + settings modal)\n// --------------------------------------------------------------------\n\nexport interface ShortcutView {\n id: string;\n /** Current (possibly remapped) combo, '' = unbound. */\n combo: string;\n /** Non-remappable extra combos (display + reservation only). */\n fixedCombos: string[];\n /** Display combos: [combo, ...fixedCombos] minus empties. */\n keys: string[];\n labelKey: string;\n groupKey: string;\n customizable: boolean;\n overridden: boolean;\n}\n\n/** Reactive, override-aware view of the registry (registry order). */\nexport function useShortcutList(): ComputedRef<ShortcutView[]> {\n return computed(() =>\n SHORTCUT_ACTIONS.map((def) => {\n const combo = effectiveCombo(def.id);\n const fixed = def.fixedCombos ?? [];\n return {\n id: def.id,\n combo,\n fixedCombos: fixed,\n keys: [combo, ...fixed].filter((c) => !!c),\n labelKey: def.labelKey,\n groupKey: def.groupKey,\n customizable: def.customizable !== false,\n overridden: overrides.value[def.id] !== undefined,\n };\n }),\n );\n}\n\n/**\n * @deprecated Legacy static cheat-sheet shape (pre-registry). Kept for\n * API compatibility; use `useShortcutList()` for the live, remap-aware\n * list.\n */\nexport interface ShortcutDef {\n keys: string[];\n labelKey: string;\n groupKey: string;\n}\n\n/** @deprecated See {@link useShortcutList}. Defaults only. */\nexport const SHORTCUTS: ShortcutDef[] = SHORTCUT_ACTIONS.map((def) => ({\n keys: [def.defaultCombo, ...(def.fixedCombos ?? [])].filter((c) => !!c),\n labelKey: def.labelKey,\n groupKey: def.groupKey,\n}));\n\n// --------------------------------------------------------------------\n// Binding\n// --------------------------------------------------------------------\n\nexport function useKeyboardShortcuts(rootEl: Ref<HTMLElement | null>, handlers: ShortcutHandlers) {\n // combo → action def, rebuilt when overrides change.\n const comboMap = computed(() => {\n const m = new Map<string, ShortcutActionDef>();\n for (const def of SHORTCUT_ACTIONS) {\n const c = effectiveCombo(def.id);\n if (c) m.set(c, def);\n }\n return m;\n });\n\n function onKey(e: KeyboardEvent) {\n const root = rootEl.value;\n if (!root) return;\n\n /* ui-fix — while a context menu is open, global shortcuts stay quiet\n * (except Esc, which the menu scopes itself). Otherwise e.g. Delete\n * opens a modal UNDER the menu backdrop and the UI wedges: the\n * backdrop intercepts every click on the new dialog. */\n if (e.key !== 'Escape' && document.querySelector('.fe-ctx-backdrop')) 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 const inForm = !!(\n target &&\n (target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.tagName === 'SELECT' ||\n target.isContentEditable)\n );\n\n const combo = comboFromEvent(e);\n if (!combo) return;\n\n // Backspace keeps its FIXED dual behaviour: delete when something is\n // selected (file-manager convention), parent-dir navigation otherwise.\n // Not remappable — the selection-dependent branch doesn't fit the\n // one-combo-one-action registry model.\n if (combo === 'Backspace') {\n if (inForm) return;\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 return;\n }\n\n const def = comboMap.value.get(combo);\n if (!def) return;\n if (inForm && !def.inForms) return;\n // Space on a focused button/link must keep its native activation\n // (quick-look would otherwise fire alongside the click).\n if (\n combo === 'Space' &&\n target &&\n typeof target.closest === 'function' &&\n target.closest('button, a, select, summary, [role=\"button\"], [role=\"menuitem\"]')\n ) {\n return;\n }\n const fn = handlers[HANDLER_KEY[def.id]] as (() => void) | undefined;\n if (!fn) return;\n if (def.prevent !== false) e.preventDefault();\n fn();\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.show_hidden': 'Gizli dosyaları göster',\n 'ctx.hide_hidden': 'Gizli dosyaları gizle',\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.failed': '“{name}” yüklenemedi',\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 'notFound.title': 'Klasör bulunamadı',\n 'notFound.desc': 'Bu klasör mevcut değil, taşınmış ya da erişim yetkiniz yok.',\n 'notFound.goRoot': 'Kök klasöre dön',\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.saving': 'Kaydediliyor…',\n 'viewer.save': 'Kaydet (Ctrl+S)',\n 'viewer.saved': 'Kaydedildi',\n 'viewer.save_error': 'Hata',\n 'viewer.editor_loading': 'Editör yükleniyor…',\n 'viewer.no_preview': 'Bu dosya tipi için önizleme henüz yok.',\n 'viewer.edit': 'Düzenle',\n 'viewer.close': 'Kapat',\n 'presence.expand': 'İsimleri göster',\n 'presence.collapse': 'Küçült',\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 // ——— cila:a — sıralama / tarih grupları / yoğunluk ———\n 'col.sort': 'Sırala',\n 'group.today': 'Bugün',\n 'group.yesterday': 'Dün',\n 'group.this_week': 'Bu Hafta',\n 'group.this_month': 'Bu Ay',\n 'group.no_date': 'Tarihsiz',\n 'toolbar.density.compact': 'Sıkışık görünüm',\n 'toolbar.density.comfortable': 'Rahat görünüm',\n\n // ——— cila:c — komut paleti + kısayol yardımı + breadcrumb ———\n 'palette.placeholder': 'Dosya, klasör veya komut ara…',\n 'palette.files': 'Dosyalar',\n 'palette.commands': 'Komutlar',\n 'palette.goto': 'Yola git',\n 'palette.empty': 'Sonuç bulunamadı',\n 'palette.hint': '↑↓ gezin · Enter seç · Esc kapat',\n 'cmd.view_toggle': 'Görünümü değiştir (liste ⇄ ızgara)',\n 'cmd.trash': 'Çöp kutusunu aç',\n 'shortcuts.title': 'Klavye Kısayolları',\n 'shortcuts.group.nav': 'Gezinme',\n 'shortcuts.group.selection': 'Seçim',\n 'shortcuts.group.file': 'Dosya işlemleri',\n 'shortcuts.palette': 'Komut paleti',\n 'shortcuts.search': 'Aramaya odaklan',\n 'shortcuts.go_up': 'Üst klasöre çık',\n 'shortcuts.open': 'Seçili öğeyi aç',\n 'shortcuts.close': 'Kapat / vazgeç',\n 'shortcuts.toggle_hidden': 'Gizli dosyaları göster/gizle',\n 'shortcuts.help': 'Bu yardım penceresi',\n 'shortcuts.select_all': 'Tümünü seç',\n 'shortcuts.rename': 'Yeniden adlandır',\n 'shortcuts.delete': 'Sil',\n 'shortcuts.cut': 'Kes',\n 'shortcuts.copy': 'Kopyala',\n 'shortcuts.paste': 'Yapıştır',\n 'breadcrumb.more': 'Aradaki klasörler',\n\n // ——— State screens + undo snackbar + connection badge (cila:b) ———\n 'empty.hint': 'Dosyaları buraya sürükleyip bırakın',\n 'empty.upload': 'Dosya yükle',\n 'empty.search.title': 'Aramanla eşleşen dosya yok',\n 'empty.search.hint': 'Farklı bir arama terimi deneyin',\n 'empty.trash.title': 'Çöp kutusu boş',\n 'error.title': 'Liste yüklenemedi',\n 'error.retry': 'Yeniden dene',\n 'toast.undo': 'Geri Al',\n 'toast.undone': 'Geri alındı',\n 'toast.undo_failed': 'Geri alınamadı',\n 'toast.renamed': 'Yeniden adlandırıldı',\n 'toast.moved': 'Taşındı',\n 'toast.trashed': 'Çöpe taşındı',\n 'conn.offline': 'Canlı bağlantı yok — değişiklikler gecikebilir',\n 'conn.tooltip': 'Sunucuyla canlı bağlantı kurulamadı; liste belirli aralıklarla otomatik yenilenir. Bağlantı geri gelince bu uyarı kaybolur.',\n\n /* === bul:s3 === */\n 'palette.everywhere': 'Her yerde',\n 'palette.searching': 'Aranıyor…',\n 'palette.saved': 'Kayıtlı aramalar',\n 'palette.save': 'Aramayı kaydet',\n 'palette.saved.delete': 'Kayıtlı aramayı sil',\n 'search.in_content': 'İçerikte',\n\n /* === bag:b4 === */\n 'toolbar.more': 'Diğer işlemler',\n 'toolbar.search.close': 'Aramayı kapat',\n 'sheet.menu': 'İşlemler',\n 'sheet.close': 'Kapat',\n\n /* === koru:k1 === */\n 'toolbar.inspector': 'Ayrıntılar',\n 'ctx.details': 'Ayrıntılar',\n 'shortcuts.inspector': 'Ayrıntılar panelini aç/kapat',\n 'inspector.title': 'Ayrıntılar',\n 'inspector.close': 'Kapat',\n 'inspector.section.general': 'Genel',\n 'inspector.section.versions': 'Sürümler',\n 'inspector.section.permissions': 'İzinler',\n 'inspector.section.shares': 'Paylaşımlar',\n 'inspector.path': 'Yol',\n 'inspector.size': 'Boyut',\n 'inspector.modified': 'Değiştirilme',\n 'inspector.mime': 'MIME türü',\n 'inspector.etag': 'ETag',\n 'inspector.copy': 'Kopyala',\n 'inspector.copied': 'Kopyalandı',\n 'inspector.error': 'Yüklenemedi',\n 'inspector.items_summary': '{n} öğe, toplam {size}',\n 'inspector.folder_items': '{n} öğe',\n 'inspector.versions.empty': 'Sürüm geçmişi yok',\n 'inspector.versions.v': 'Sürüm {n}',\n 'inspector.versions.restore': 'Geri yükle',\n 'inspector.versions.restore_confirm': 'Bu sürüm geri yüklensin mi?',\n 'inspector.versions.snapshot_current': 'Önce şimdiki halin sürümünü al',\n 'inspector.versions.confirm': 'Onayla',\n 'inspector.versions.cancel': 'Vazgeç',\n 'inspector.versions.take_snapshot': 'Şimdiki halin sürümünü al',\n 'inspector.versions.restored': 'Sürüm geri yüklendi',\n 'inspector.versions.snapshotted': 'Sürüm alındı',\n 'inspector.versions.unsupported': 'Sunucu bu işlemi desteklemiyor',\n 'inspector.perm.none': 'Erişim yok',\n 'inspector.perm.viewer': 'Görüntüleyen',\n 'inspector.perm.editor': 'Düzenleyen',\n 'inspector.perm.owner': 'Sahip',\n 'inspector.perm.manage': 'İzinleri yönet',\n 'inspector.shares.empty': 'Paylaşım linki yok',\n 'inspector.shares.copy': 'Linki kopyala',\n\n /* wiring:c1 — tema galerisi */\n 'theme.menu': 'Tema',\n 'theme.title': 'Tema Galerisi',\n 'theme.hint': 'Tema yalnız renk paletini değiştirir; açık/koyu mod ayrı çalışmaya devam eder.',\n 'theme.reset': 'Varsayılana dön',\n 'theme.close': 'Kapat',\n 'theme.selected': 'Seçili',\n 'theme.name.default': 'Varsayılan',\n 'theme.name.night': 'Gece Mavisi',\n 'theme.name.forest': 'Orman',\n 'theme.name.amber': 'Kehribar',\n 'theme.name.lilac': 'Leylak',\n 'theme.name.contrast': 'Yüksek Kontrast',\n 'theme.name.gray': 'Yumuşak Gri',\n 'theme.name.terminal': 'Terminal Yeşili',\n /* === wiring:c2 — özelleştirilebilir kısayollar + hızlı bakış === */\n 'shortcuts.quicklook': 'Hızlı bakış',\n 'shortcuts.customize': 'Özelleştir',\n 'shortcuts.settings.menu': 'Kısayollar',\n 'shortcuts.settings.title': 'Kısayol Ayarları',\n 'shortcuts.settings.hint': 'Bir kısayolu değiştirmek için \"Değiştir\"e basıp yeni tuş kombinasyonuna basın. Değişiklikler yalnızca bu tarayıcıda saklanır.',\n 'shortcuts.settings.change': 'Değiştir',\n 'shortcuts.settings.capture': 'Tuşlara basın… (Esc iptal)',\n 'shortcuts.settings.reset': 'Varsayılana dön',\n 'shortcuts.settings.reset_all': 'Tümünü sıfırla',\n 'shortcuts.settings.unbound': 'Atanmadı',\n 'shortcuts.settings.fixed': 'Sabit',\n 'shortcuts.settings.customized': 'Özelleştirildi',\n 'shortcuts.settings.conflict': 'kombinasyonu \"{name}\" kısayolunda kullanılıyor.',\n 'shortcuts.settings.conflict_fixed': 'kombinasyonu \"{name}\" sabit kısayoluna ayrılmış — kullanılamaz.',\n 'shortcuts.settings.conflict_take': 'Eskisini boşa çıkar ve ata',\n 'shortcuts.settings.conflict_cancel': 'Vazgeç',\n 'quicklook.hint_close': 'kapat',\n 'quicklook.hint_nav': 'önceki/sonraki',\n 'quicklook.hint_open': 'aç',\n /* === /wiring:c2 === */\n /* === wiring:c3 — işlem merkezi === */\n 'opc.title': 'İşlemler',\n 'opc.aria_badge': '{n} işlem — işlem merkezini aç/kapat',\n 'opc.close': 'Kapat',\n 'opc.active': 'Sürüyor',\n 'opc.history': 'Geçmiş',\n 'opc.clear': 'Temizle',\n 'opc.empty': 'İşlem yok',\n 'opc.cancel': 'İptal',\n 'opc.retry': 'Yeniden dene',\n 'opc.dismiss': 'Kapat',\n 'opc.queued': 'Sırada',\n 'opc.percent': '%{n}',\n 'opc.status.running': 'Sürüyor',\n 'opc.status.done': 'Bitti',\n 'opc.status.error': 'Hata',\n 'opc.status.aborted': 'İptal edildi',\n 'opc.kind.upload': 'Yükleme',\n 'opc.kind.copy': 'Kopyalama',\n 'opc.kind.move': 'Taşıma',\n 'opc.kind.delete': 'Silme',\n 'opc.kind.convert': 'Dönüştürme',\n 'opc.kind.archive': 'Arşiv',\n /* === wiring:c4 — onboarding turu + erişilebilirlik + hata kartı === */\n 'tour.aria': 'Tanıtım turu',\n 'tour.restart': 'Turu tekrar başlat',\n 'tour.skip': 'Turu atla',\n 'tour.back': 'Geri',\n 'tour.next': 'İleri',\n 'tour.done': 'Bitti',\n 'tour.progress': '{n} / {m}',\n 'tour.step.nav.title': 'Depo ve klasörler',\n 'tour.step.nav.desc':\n 'Bulunduğun konum burada görünür. Kırıntı çubuğundaki adımlara tıklayarak üst klasörlere ve depo köküne dönebilirsin.',\n 'tour.step.upload.title': 'Dosya yükle',\n 'tour.step.upload.desc':\n 'Bu düğmeyle dosya seçebilirsin; dosyaları doğrudan pencereye sürükleyip bırakmak da çalışır.',\n 'tour.step.search.title': 'Arama',\n 'tour.step.search.desc':\n 'Bu kutu bulunduğun klasörü filtreler. Ctrl+K komut paleti ile tüm depolarda arama yapabilir ve komut çalıştırabilirsin.',\n 'tour.step.view.title': 'Görünümü değiştir',\n 'tour.step.view.desc':\n 'Liste ve ızgara görünümü arasında geçiş yapabilirsin; seçimin hatırlanır.',\n 'tour.step.share.title': 'Paylaşım',\n 'tour.step.share.desc':\n 'Bir dosyaya sağ tıklayıp \"Paylaş / İzinler\" ile bağlantı oluşturabilir, PIN ve son kullanma süresi ekleyebilirsin.',\n 'tour.step.help.title': 'Kısayollar',\n 'tour.step.help.desc':\n '? tuşu kısayol kartını, Ctrl+K komut paletini açar. Bu turu menüdeki \"Turu tekrar başlat\" ile dilediğinde yeniden izleyebilirsin.',\n 'error.hint': 'Bağlantı ya da sunucu kaynaklı geçici bir sorun olabilir. Yeniden deneyin.',\n 'error.details': 'Teknik ayrıntılar',\n 'col.star': 'Yıldız',\n 'toolbar.view_label': 'Görünüm',\n 'list.aria': 'Dosya listesi',\n 'grid.aria': 'Dosya ızgarası',\n\n /* === wiring:d1 — sekmeler + split panel === */\n 'tabs.strip': 'Sekmeler',\n 'tabs.new': 'Yeni sekme',\n 'tabs.close': 'Sekmeyi kapat',\n 'tabs.split': 'Görünümü böl',\n 'tabs.split_off': 'Bölmeyi kapat',\n 'ctx.open_new_tab': 'Yeni sekmede aç',\n 'shortcuts.group.tabs': 'Sekmeler',\n 'shortcuts.tab_new': 'Yeni sekme',\n 'shortcuts.tab_close': 'Sekmeyi kapat',\n 'shortcuts.tab_next': 'Sonraki sekme',\n 'shortcuts.tab_prev': 'Önceki sekme',\n 'cmd.tab_new': 'Yeni sekme aç',\n 'cmd.split_toggle': 'Görünümü böl / birleştir',\n 'split.pane': 'İkincil panel',\n 'split.close': 'Yan paneli kapat',\n 'split.error': 'Liste yüklenemedi',\n 'split.retry': 'Yeniden dene',\n 'split.copy_queued': 'Kopyalama kuyruğa alındı',\n 'split.cross_copy': 'Depolar farklı — kopyalama kuyruğa alındı',\n 'split.cross_failed': 'Depolar arası kopyalama bu sunucuda desteklenmiyor',\n /* === /wiring:d1 === */\n /* wiring:d2 — galeri görünümü */\n 'toolbar.view.gallery': 'Galeri',\n 'gallery.aria': 'Dosya galerisi',\n /* /wiring:d2 */\n /* wiring:d3 — Yorumlar (inspector node comments) */\n 'inspector.section.comments': 'Yorumlar',\n 'inspector.comments.empty': 'Henüz yorum yok.',\n 'inspector.comments.placeholder': 'Yorum yaz…',\n 'inspector.comments.send': 'Gönder',\n 'inspector.comments.delete': 'Yorumu sil',\n /* wiring:e2 — uçtan uca şifreli klasörler */\n 'e2e.create.title': 'Şifreli klasör oluştur',\n 'e2e.create.option': 'Şifreli klasör oluştur…',\n 'e2e.create.pw_placeholder': 'Klasör parolası (en az 8 karakter)',\n 'e2e.create.pw2_placeholder': 'Parolayı tekrar girin',\n 'e2e.create.warn_title': 'GERİ DÖNÜŞÜ YOK',\n 'e2e.create.warn_body':\n 'Dosyalar yalnız bu parolayla açılır. Parola sunucuda TUTULMAZ; unutursanız içerik sonsuza dek kaybolur. Kurtarma yolu yoktur — yönetici dahil kimse açamaz.',\n 'e2e.create.ack': 'Anladım: parolayı kaybedersem verilerim kurtarılamaz.',\n 'e2e.create.ack_required': 'Devam etmek için uyarıyı onaylayın.',\n 'e2e.create.pw_short': 'Parola en az 8 karakter olmalı.',\n 'e2e.create.pw_mismatch': 'Parolalar birbirini tutmuyor.',\n 'e2e.create.bad_name': 'Geçersiz klasör adı.',\n 'e2e.create.create': 'Şifreli klasörü oluştur',\n 'e2e.create.busy': 'Oluşturuluyor…',\n 'e2e.create.done': 'Şifreli klasör oluşturuldu',\n 'e2e.create.failed': 'Şifreli klasör oluşturulamadı',\n 'e2e.create.nested': 'Şifreli klasörün içine ikinci bir şifreli klasör açılamaz.',\n 'e2e.locked.title': 'Bu klasör uçtan uca şifreli',\n 'e2e.locked.hint': 'İçeriği görmek için klasör parolasını girin. Parola yalnız bu sekmede, bellekte tutulur.',\n 'e2e.locked.pw_placeholder': 'Klasör parolası',\n 'e2e.locked.unlock': 'Kilidi aç',\n 'e2e.locked.busy': 'Doğrulanıyor…',\n 'e2e.unlock.wrong': 'Parola yanlış.',\n 'e2e.unlock.marker_missing': 'Şifre dosyası (.filex-e2e.json) okunamadı.',\n 'e2e.strip.label': 'Şifreli klasör — kilit açık',\n 'e2e.strip.lock': 'Kilitle',\n 'e2e.locked_toast': 'Klasör kilitlendi',\n 'e2e.upload.too_big': '200 MB üstü dosyalar şifreli klasöre yüklenemez (MVP sınırı)',\n 'e2e.upload.locked': 'Önce klasörün kilidini açın',\n 'e2e.decrypting': 'Çözülüyor…',\n 'e2e.decrypt_failed': 'Dosya çözülemedi (parola değişmiş ya da dosya bozulmuş olabilir).',\n 'e2e.download.failed': 'Şifreli dosya indirilemedi.',\n /* /wiring:e2 */\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.show_hidden': 'Show hidden files',\n 'ctx.hide_hidden': 'Hide hidden files',\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.failed': 'Could not upload “{name}”',\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 'notFound.title': 'Folder not found',\n 'notFound.desc': 'This folder does not exist, was moved, or you do not have access to it.',\n 'notFound.goRoot': 'Go to root folder',\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.saving': 'Saving…',\n 'viewer.save': 'Save (Ctrl+S)',\n 'viewer.saved': 'Saved',\n 'viewer.save_error': 'Error',\n 'viewer.editor_loading': 'Loading editor…',\n 'viewer.no_preview': 'No preview for this file type yet.',\n 'viewer.edit': 'Edit',\n 'viewer.close': 'Close',\n 'presence.expand': 'Show names',\n 'presence.collapse': 'Collapse',\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 // ——— cila:a — sorting / date groups / density ———\n 'col.sort': 'Sort',\n 'group.today': 'Today',\n 'group.yesterday': 'Yesterday',\n 'group.this_week': 'This Week',\n 'group.this_month': 'This Month',\n 'group.no_date': 'No date',\n 'toolbar.density.compact': 'Compact view',\n 'toolbar.density.comfortable': 'Comfortable view',\n\n // ——— cila:c — command palette + shortcuts help + breadcrumb ———\n 'palette.placeholder': 'Search files, folders or commands…',\n 'palette.files': 'Files',\n 'palette.commands': 'Commands',\n 'palette.goto': 'Go to path',\n 'palette.empty': 'No results',\n 'palette.hint': '↑↓ navigate · Enter select · Esc close',\n 'cmd.view_toggle': 'Toggle view (list ⇄ grid)',\n 'cmd.trash': 'Open trash',\n 'shortcuts.title': 'Keyboard Shortcuts',\n 'shortcuts.group.nav': 'Navigation',\n 'shortcuts.group.selection': 'Selection',\n 'shortcuts.group.file': 'File operations',\n 'shortcuts.palette': 'Command palette',\n 'shortcuts.search': 'Focus search',\n 'shortcuts.go_up': 'Go up one level',\n 'shortcuts.open': 'Open selected item',\n 'shortcuts.close': 'Close / cancel',\n 'shortcuts.toggle_hidden': 'Show/hide hidden files',\n 'shortcuts.help': 'This help dialog',\n 'shortcuts.select_all': 'Select all',\n 'shortcuts.rename': 'Rename',\n 'shortcuts.delete': 'Delete',\n 'shortcuts.cut': 'Cut',\n 'shortcuts.copy': 'Copy',\n 'shortcuts.paste': 'Paste',\n 'breadcrumb.more': 'Hidden folders',\n\n // ——— State screens + undo snackbar + connection badge (cila:b) ———\n 'empty.hint': 'Drag and drop files here',\n 'empty.upload': 'Upload files',\n 'empty.search.title': 'No files match your search',\n 'empty.search.hint': 'Try a different search term',\n 'empty.trash.title': 'Trash is empty',\n 'error.title': 'Could not load this folder',\n 'error.retry': 'Try again',\n 'toast.undo': 'Undo',\n 'toast.undone': 'Undone',\n 'toast.undo_failed': 'Could not undo',\n 'toast.renamed': 'Renamed',\n 'toast.moved': 'Moved',\n 'toast.trashed': 'Moved to trash',\n 'conn.offline': 'No live connection — changes may be delayed',\n 'conn.tooltip': 'Live connection to the server is unavailable; the list refreshes periodically. This notice disappears once the connection is back.',\n\n /* === bul:s3 === */\n 'palette.everywhere': 'Everywhere',\n 'palette.searching': 'Searching…',\n 'palette.saved': 'Saved searches',\n 'palette.save': 'Save search',\n 'palette.saved.delete': 'Delete saved search',\n 'search.in_content': 'In content',\n\n /* === bag:b4 === */\n 'toolbar.more': 'More actions',\n 'toolbar.search.close': 'Close search',\n 'sheet.menu': 'Actions',\n 'sheet.close': 'Close',\n\n /* === koru:k1 === */\n 'toolbar.inspector': 'Details',\n 'ctx.details': 'Details',\n 'shortcuts.inspector': 'Toggle details panel',\n 'inspector.title': 'Details',\n 'inspector.close': 'Close',\n 'inspector.section.general': 'General',\n 'inspector.section.versions': 'Versions',\n 'inspector.section.permissions': 'Permissions',\n 'inspector.section.shares': 'Shares',\n 'inspector.path': 'Path',\n 'inspector.size': 'Size',\n 'inspector.modified': 'Modified',\n 'inspector.mime': 'MIME type',\n 'inspector.etag': 'ETag',\n 'inspector.copy': 'Copy',\n 'inspector.copied': 'Copied',\n 'inspector.error': 'Could not load',\n 'inspector.items_summary': '{n} items, {size} total',\n 'inspector.folder_items': '{n} items',\n 'inspector.versions.empty': 'No version history',\n 'inspector.versions.v': 'Version {n}',\n 'inspector.versions.restore': 'Restore',\n 'inspector.versions.restore_confirm': 'Restore this version?',\n 'inspector.versions.snapshot_current': 'Snapshot the current state first',\n 'inspector.versions.confirm': 'Confirm',\n 'inspector.versions.cancel': 'Cancel',\n 'inspector.versions.take_snapshot': 'Snapshot current state',\n 'inspector.versions.restored': 'Version restored',\n 'inspector.versions.snapshotted': 'Snapshot taken',\n 'inspector.versions.unsupported': 'The server does not support this operation',\n 'inspector.perm.none': 'No access',\n 'inspector.perm.viewer': 'Viewer',\n 'inspector.perm.editor': 'Editor',\n 'inspector.perm.owner': 'Owner',\n 'inspector.perm.manage': 'Manage permissions',\n 'inspector.shares.empty': 'No share links',\n 'inspector.shares.copy': 'Copy link',\n\n /* wiring:c1 — theme gallery */\n 'theme.menu': 'Theme',\n 'theme.title': 'Theme Gallery',\n 'theme.hint': 'Themes only change the color palette; light/dark mode still applies separately.',\n 'theme.reset': 'Reset to default',\n 'theme.close': 'Close',\n 'theme.selected': 'Selected',\n 'theme.name.default': 'Default',\n 'theme.name.night': 'Night Blue',\n 'theme.name.forest': 'Forest',\n 'theme.name.amber': 'Amber',\n 'theme.name.lilac': 'Lilac',\n 'theme.name.contrast': 'High Contrast',\n 'theme.name.gray': 'Soft Gray',\n 'theme.name.terminal': 'Terminal Green',\n /* === wiring:c2 — customizable shortcuts + quick look === */\n 'shortcuts.quicklook': 'Quick look',\n 'shortcuts.customize': 'Customize',\n 'shortcuts.settings.menu': 'Shortcuts',\n 'shortcuts.settings.title': 'Shortcut Settings',\n 'shortcuts.settings.hint': 'To remap a shortcut, press \"Change\" and then the new key combination. Changes are stored in this browser only.',\n 'shortcuts.settings.change': 'Change',\n 'shortcuts.settings.capture': 'Press keys… (Esc cancels)',\n 'shortcuts.settings.reset': 'Reset to default',\n 'shortcuts.settings.reset_all': 'Reset all',\n 'shortcuts.settings.unbound': 'Not set',\n 'shortcuts.settings.fixed': 'Fixed',\n 'shortcuts.settings.customized': 'Customized',\n 'shortcuts.settings.conflict': 'is already used by \"{name}\".',\n 'shortcuts.settings.conflict_fixed': 'is reserved by the fixed shortcut \"{name}\" — it cannot be used.',\n 'shortcuts.settings.conflict_take': 'Unassign old and use here',\n 'shortcuts.settings.conflict_cancel': 'Cancel',\n 'quicklook.hint_close': 'close',\n 'quicklook.hint_nav': 'previous/next',\n 'quicklook.hint_open': 'open',\n /* === /wiring:c2 === */\n /* === wiring:c3 — operations center === */\n 'opc.title': 'Operations',\n 'opc.aria_badge': '{n} operations — toggle operations center',\n 'opc.close': 'Close',\n 'opc.active': 'In progress',\n 'opc.history': 'History',\n 'opc.clear': 'Clear',\n 'opc.empty': 'No operations',\n 'opc.cancel': 'Cancel',\n 'opc.retry': 'Retry',\n 'opc.dismiss': 'Dismiss',\n 'opc.queued': 'Queued',\n 'opc.percent': '{n}%',\n 'opc.status.running': 'In progress',\n 'opc.status.done': 'Done',\n 'opc.status.error': 'Failed',\n 'opc.status.aborted': 'Cancelled',\n 'opc.kind.upload': 'Upload',\n 'opc.kind.copy': 'Copy',\n 'opc.kind.move': 'Move',\n 'opc.kind.delete': 'Delete',\n 'opc.kind.convert': 'Convert',\n 'opc.kind.archive': 'Archive',\n /* === wiring:c4 — onboarding tour + accessibility + error card === */\n 'tour.aria': 'Onboarding tour',\n 'tour.restart': 'Restart the tour',\n 'tour.skip': 'Skip tour',\n 'tour.back': 'Back',\n 'tour.next': 'Next',\n 'tour.done': 'Done',\n 'tour.progress': '{n} / {m}',\n 'tour.step.nav.title': 'Storages & folders',\n 'tour.step.nav.desc':\n 'Your current location lives here. Click any crumb to jump back to parent folders or the storage root.',\n 'tour.step.upload.title': 'Upload files',\n 'tour.step.upload.desc':\n 'Pick files with this button — or simply drag & drop them anywhere in the window.',\n 'tour.step.search.title': 'Search',\n 'tour.step.search.desc':\n 'This box filters the current folder. The Ctrl+K command palette searches across all storages and runs commands.',\n 'tour.step.view.title': 'Switch views',\n 'tour.step.view.desc':\n 'Toggle between the list and grid layout; your choice is remembered.',\n 'tour.step.share.title': 'Sharing',\n 'tour.step.share.desc':\n 'Right-click any file and use \"Share / Permissions\" to create a link with an optional PIN and expiry.',\n 'tour.step.help.title': 'Shortcuts',\n 'tour.step.help.desc':\n 'Press ? for the shortcut cheat-sheet and Ctrl+K for the command palette. Replay this tour any time via \"Restart the tour\" in the menu.',\n 'error.hint': 'This may be a temporary network or server problem. Please try again.',\n 'error.details': 'Technical details',\n 'col.star': 'Star',\n 'toolbar.view_label': 'View',\n 'list.aria': 'File list',\n 'grid.aria': 'File grid',\n\n /* === wiring:d1 — tabs + split pane === */\n 'tabs.strip': 'Tabs',\n 'tabs.new': 'New tab',\n 'tabs.close': 'Close tab',\n 'tabs.split': 'Split view',\n 'tabs.split_off': 'Close split',\n 'ctx.open_new_tab': 'Open in new tab',\n 'shortcuts.group.tabs': 'Tabs',\n 'shortcuts.tab_new': 'New tab',\n 'shortcuts.tab_close': 'Close tab',\n 'shortcuts.tab_next': 'Next tab',\n 'shortcuts.tab_prev': 'Previous tab',\n 'cmd.tab_new': 'Open a new tab',\n 'cmd.split_toggle': 'Toggle split view',\n 'split.pane': 'Secondary pane',\n 'split.close': 'Close the side pane',\n 'split.error': 'Could not load the listing',\n 'split.retry': 'Retry',\n 'split.copy_queued': 'Copy queued',\n 'split.cross_copy': 'Different storages — copy queued instead',\n 'split.cross_failed': 'Cross-storage copy is not supported by this server',\n /* === /wiring:d1 === */\n /* wiring:d2 — gallery view */\n 'toolbar.view.gallery': 'Gallery',\n 'gallery.aria': 'File gallery',\n /* /wiring:d2 */\n /* wiring:d3 — inspector node comments */\n 'inspector.section.comments': 'Comments',\n 'inspector.comments.empty': 'No comments yet.',\n 'inspector.comments.placeholder': 'Write a comment…',\n 'inspector.comments.send': 'Send',\n 'inspector.comments.delete': 'Delete comment',\n /* wiring:e2 — end-to-end encrypted folders */\n 'e2e.create.title': 'Create encrypted folder',\n 'e2e.create.option': 'Create encrypted folder…',\n 'e2e.create.pw_placeholder': 'Folder password (min 8 characters)',\n 'e2e.create.pw2_placeholder': 'Repeat the password',\n 'e2e.create.warn_title': 'NO WAY BACK',\n 'e2e.create.warn_body':\n 'Files open ONLY with this password. The password is NEVER stored on the server; if you forget it the content is lost forever. There is no recovery — not even an admin can open it.',\n 'e2e.create.ack': 'I understand: if I lose the password my data cannot be recovered.',\n 'e2e.create.ack_required': 'Please confirm the warning to continue.',\n 'e2e.create.pw_short': 'Password must be at least 8 characters.',\n 'e2e.create.pw_mismatch': 'Passwords do not match.',\n 'e2e.create.bad_name': 'Invalid folder name.',\n 'e2e.create.create': 'Create encrypted folder',\n 'e2e.create.busy': 'Creating…',\n 'e2e.create.done': 'Encrypted folder created',\n 'e2e.create.failed': 'Could not create the encrypted folder',\n 'e2e.create.nested': 'You cannot create an encrypted folder inside another one.',\n 'e2e.locked.title': 'This folder is end-to-end encrypted',\n 'e2e.locked.hint': 'Enter the folder password to see its contents. The password stays in this tab’s memory only.',\n 'e2e.locked.pw_placeholder': 'Folder password',\n 'e2e.locked.unlock': 'Unlock',\n 'e2e.locked.busy': 'Verifying…',\n 'e2e.unlock.wrong': 'Wrong password.',\n 'e2e.unlock.marker_missing': 'Could not read the key file (.filex-e2e.json).',\n 'e2e.strip.label': 'Encrypted folder — unlocked',\n 'e2e.strip.lock': 'Lock',\n 'e2e.locked_toast': 'Folder locked',\n 'e2e.upload.too_big': 'Files over 200 MB cannot be uploaded to an encrypted folder (MVP limit)',\n 'e2e.upload.locked': 'Unlock the folder first',\n 'e2e.decrypting': 'Decrypting…',\n 'e2e.decrypt_failed': 'Could not decrypt the file (password changed or file corrupted).',\n 'e2e.download.failed': 'Could not download the encrypted file.',\n /* /wiring:e2 */\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 // A real zero (empty file / empty folder) is information, not absence.\n if (bytes === 0) return `0 ${t('unit.bytes')}`;\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","// Realtime (WebSocket) client for filex live collaboration, bundled into the\n// core explorer so EVERY consumer — the native panel AND the vendored\n// webcomponent embedded in host apps — gets live folder updates + presence.\n//\n// Auth: the browser's native WebSocket can't set an Authorization header and,\n// when embedded, connects cross-origin to fm.brf.sh. So instead of a header we\n// fetch a short-lived, single-use TICKET through the host's normal API (which\n// injects the real token server-side) and open `wss://…/api/ws?ticket=<t>`.\n// The durable token never reaches the browser.\n//\n// Degradation: if the ticket or the socket is unavailable (old backend, blocked\n// upgrade, unsupported env), `onFallback(true)` fires so the consumer can fall\n// back to plain API polling. The page always keeps working — every send is\n// guarded, connect() is wrapped, reconnects are capped.\n\nexport interface PresenceUser {\n id: number;\n /** Stable identity key from the server (user id + optional per-end-user\n * presence key). Distinguishes end users sharing one proxy token — use it\n * for list keys and colours instead of `id`. */\n uid?: string;\n name: string;\n file?: string;\n}\n\nexport interface ChangeMessage {\n type: 'change';\n path: string;\n action: string; // create | delete | rename | move | upload | modify\n name?: string;\n new_name?: string;\n}\n\nexport interface PresenceMessage {\n type: 'presence';\n path: string;\n users: PresenceUser[];\n}\n\nexport interface WsTicket {\n ticket: string;\n ws_url: string;\n}\n\nexport interface RealtimeHandlers {\n onChange?: (msg: ChangeMessage) => void;\n onPresence?: (msg: PresenceMessage) => void;\n onStatus?: (connected: boolean) => void;\n /** Fires true when the live socket is unavailable (consumer should poll),\n * false when a live socket is (re)established. */\n onFallback?: (active: boolean) => void;\n}\n\nexport interface RealtimeOptions {\n /** Fetch a fresh ticket (single-use) via the host API. null → no live socket. */\n getTicket: () => Promise<WsTicket | null>;\n handlers: RealtimeHandlers;\n}\n\nconst PING_INTERVAL_MS = 25_000;\nconst MAX_BACKOFF_MS = 15_000;\nconst MAX_RETRIES = 6;\n\nexport class RealtimeClient {\n private ws: WebSocket | null = null;\n private opts: RealtimeOptions;\n private closed = false;\n private connecting = false;\n private retries = 0;\n private fallback = false;\n private pingTimer: ReturnType<typeof setInterval> | null = null;\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n\n // Last-known intent, replayed on (re)connect.\n private currentPath: string | null = null;\n private currentFocus: string | null = null;\n\n constructor(opts: RealtimeOptions) {\n this.opts = opts;\n void this.connect();\n }\n\n /** Subscribe to a folder (\"<adapter>://<dir>\"). Swaps the active room and\n * resets focus. Passing null unsubscribes (drive list / trash have no room). */\n subscribe(path: string | null): void {\n this.currentPath = path;\n this.currentFocus = null;\n if (path) this.send({ type: 'subscribe', path });\n }\n\n /** Report the file the user is focused on (or null to clear). */\n setFocus(file: string | null): void {\n this.currentFocus = file;\n this.send({ type: 'focus', file });\n }\n\n /** Tear down permanently — call on unmount. */\n close(): void {\n this.closed = true;\n this.clearTimers();\n this.dropSocket();\n }\n\n private async connect(): Promise<void> {\n if (this.closed || this.connecting || this.ws) return;\n this.connecting = true;\n let ticket: WsTicket | null = null;\n try {\n ticket = await this.opts.getTicket();\n } catch {\n ticket = null;\n }\n this.connecting = false;\n if (this.closed) return;\n if (!ticket || !ticket.ticket || !ticket.ws_url) {\n this.fail();\n return;\n }\n\n const sep = ticket.ws_url.includes('?') ? '&' : '?';\n let ws: WebSocket;\n try {\n ws = new WebSocket(`${ticket.ws_url}${sep}ticket=${encodeURIComponent(ticket.ticket)}`);\n } catch {\n this.fail();\n return;\n }\n this.ws = ws;\n\n ws.onopen = () => {\n this.retries = 0;\n this.setFallback(false);\n this.opts.handlers.onStatus?.(true);\n if (this.currentPath) this.send({ type: 'subscribe', path: this.currentPath });\n if (this.currentFocus !== null) this.send({ type: 'focus', file: this.currentFocus });\n this.startPing();\n };\n\n ws.onmessage = (ev: MessageEvent) => {\n let msg: unknown;\n try {\n msg = JSON.parse(typeof ev.data === 'string' ? ev.data : '');\n } catch {\n return;\n }\n const m = msg as { type?: string };\n if (m?.type === 'change') this.opts.handlers.onChange?.(msg as ChangeMessage);\n else if (m?.type === 'presence') this.opts.handlers.onPresence?.(msg as PresenceMessage);\n // pong / error frames are intentionally ignored by the UI.\n };\n\n ws.onerror = () => {\n // onclose fires next; reconnect is handled there.\n };\n\n ws.onclose = () => {\n this.stopPing();\n this.ws = null;\n this.opts.handlers.onStatus?.(false);\n this.fail();\n };\n }\n\n // fail schedules a capped reconnect; after MAX_RETRIES it gives up on the live\n // socket and flips to fallback (polling) mode.\n private fail(): void {\n if (this.closed || this.reconnectTimer) return;\n if (this.retries >= MAX_RETRIES) {\n this.setFallback(true);\n return;\n }\n const delay = Math.min(1000 * 2 ** this.retries, MAX_BACKOFF_MS);\n this.retries += 1;\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = null;\n void this.connect();\n }, delay);\n }\n\n private setFallback(active: boolean): void {\n if (this.fallback === active) return;\n this.fallback = active;\n this.opts.handlers.onFallback?.(active);\n }\n\n private send(obj: unknown): void {\n const ws = this.ws;\n if (!ws || ws.readyState !== WebSocket.OPEN) return;\n try {\n ws.send(JSON.stringify(obj));\n } catch {\n /* a failed send just means a missed live update */\n }\n }\n\n private startPing(): void {\n this.stopPing();\n this.pingTimer = setInterval(() => this.send({ type: 'ping' }), PING_INTERVAL_MS);\n }\n\n private stopPing(): void {\n if (this.pingTimer) {\n clearInterval(this.pingTimer);\n this.pingTimer = null;\n }\n }\n\n private dropSocket(): void {\n if (this.ws) {\n try {\n this.ws.onclose = null; // suppress reconnect\n this.ws.close();\n } catch {\n /* ignore */\n }\n this.ws = null;\n }\n }\n\n private clearTimers(): void {\n this.stopPing();\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n }\n}\n","// useRealtime wires the folder-scoped live-collaboration layer (RealtimeClient)\n// into the explorer: it turns change events into a debounced soft reload, tracks\n// per-folder presence, and — when no live socket is available — falls back to\n// plain API polling so embedded/offline consumers still get near-live updates.\n//\n// The explorer calls start()/stop() on mount/unmount, subscribe() on folder\n// navigation, and setFocus() on selection; it binds presenceUsers into the UI.\n\nimport { ref, type Ref } from 'vue';\nimport { RealtimeClient, type PresenceUser, type PresenceMessage } from '../lib/realtime';\n\nconst RELOAD_DEBOUNCE_MS = 200;\nconst POLL_INTERVAL_MS = 12_000;\n\nexport interface RealtimeApi {\n wsTicket: () => Promise<{ ticket: string; ws_url: string } | null>;\n}\n\nexport function useRealtime(api: RealtimeApi, opts: { reload: () => void }) {\n const presenceUsers: Ref<PresenceUser[]> = ref([]);\n const connected = ref(false);\n // True while the live socket is unavailable and the polling fallback is\n // active — the explorer surfaces a small \"no live connection\" badge from it.\n // Stays false during ordinary reconnect attempts, so brief blips don't flash\n // the badge; only a genuinely given-up socket (RealtimeClient onFallback)\n // flips it.\n const degraded = ref(false);\n\n let client: RealtimeClient | null = null;\n let pendingSubscribe: string | null = null;\n let reloadTimer: ReturnType<typeof setTimeout> | null = null;\n let pollTimer: ReturnType<typeof setInterval> | null = null;\n\n function debouncedReload(): void {\n // A burst of change frames (e.g. a multi-file upload) collapses into one\n // soft reload of the current folder.\n if (reloadTimer) clearTimeout(reloadTimer);\n reloadTimer = setTimeout(() => {\n reloadTimer = null;\n opts.reload();\n }, RELOAD_DEBOUNCE_MS);\n }\n\n function onPresence(msg: PresenceMessage): void {\n // Ignore late frames for a folder we've already navigated away from.\n if (pendingSubscribe && msg.path && msg.path !== pendingSubscribe) return;\n presenceUsers.value = Array.isArray(msg.users) ? msg.users : [];\n }\n\n function onFallback(active: boolean): void {\n degraded.value = active;\n if (active) {\n // No live socket → poll the listing; presence isn't available here.\n presenceUsers.value = [];\n if (!pollTimer) pollTimer = setInterval(() => opts.reload(), POLL_INTERVAL_MS);\n } else if (pollTimer) {\n clearInterval(pollTimer);\n pollTimer = null;\n }\n }\n\n function start(): void {\n if (client) return;\n client = new RealtimeClient({\n getTicket: () => api.wsTicket(),\n handlers: {\n onChange: debouncedReload,\n onPresence,\n onFallback,\n onStatus: (c) => {\n connected.value = c;\n },\n },\n });\n }\n\n function subscribe(wire: string | null): void {\n presenceUsers.value = []; // drop the previous folder's roster immediately\n pendingSubscribe = wire;\n client?.subscribe(wire);\n }\n\n function setFocus(file: string | null): void {\n client?.setFocus(file);\n }\n\n function stop(): void {\n if (reloadTimer) {\n clearTimeout(reloadTimer);\n reloadTimer = null;\n }\n if (pollTimer) {\n clearInterval(pollTimer);\n pollTimer = null;\n }\n client?.close();\n client = null;\n degraded.value = false;\n }\n\n return { presenceUsers, connected, degraded, start, subscribe, setFocus, stop };\n}\n","// useThumbs — authenticated thumbnail loader for the grid view.\n//\n// The backend emits `thumb_url` as a ROOT-RELATIVE path (\"/api/files/thumb/{id}\").\n// A plain `<img src>` only works for the native same-origin SPA: an embedded\n// webcomponent resolves it against the HOST page's origin (work.brf.sh → 404)\n// and, even with the URL fixed, `<img>` cannot carry the bearer header a\n// proxied host (fishapp PWA) requires. So thumbs are fetched through the same\n// auth machinery as every API call (headers + credentials), cached as object\n// URLs, and handed to the grid; a failed fetch falls back to the file icon.\n\nimport { ref } from 'vue';\nimport type { FileNode } from '../types/FileNode';\n\ninterface ThumbApiSlice {\n authHeaders: (extra?: Record<string, string>) => Promise<Record<string, string>>;\n credentialsMode: () => RequestCredentials;\n}\n\n/** Cap the object-URL cache; beyond it oldest entries are revoked. Thumbs are\n * small (~KBs) so this is generous while still bounding a long session. */\nconst MAX_CACHED = 500;\n\nexport function useThumbs(apiBase: string | undefined, api: ThumbApiSlice) {\n const urls = ref<Record<string, string>>({});\n const order: string[] = [];\n const failed = new Set<string>();\n const pending = new Set<string>();\n\n function resolveUrl(raw: string): string {\n if (/^https?:\\/\\//i.test(raw)) return raw;\n const base = (apiBase || '').replace(/\\/+$/, '');\n return base && raw.startsWith('/') ? base + raw : raw;\n }\n\n /** Reactive: returns the loaded object URL for the node's thumb, kicking off\n * the fetch on first sight. null = not (yet) available → show the icon. */\n function src(n: FileNode): string | null {\n const raw = n.thumb_url;\n if (!raw) return null;\n const got = urls.value[raw];\n if (got) return got;\n if (!failed.has(raw) && !pending.has(raw)) void load(raw);\n return null;\n }\n\n async function load(raw: string): Promise<void> {\n pending.add(raw);\n try {\n const res = await fetch(resolveUrl(raw), {\n headers: await api.authHeaders({ Accept: '*/*' }),\n credentials: api.credentialsMode(),\n });\n if (!res.ok) throw new Error(String(res.status));\n const blob = await res.blob();\n if (order.length >= MAX_CACHED) {\n const evict = order.shift();\n if (evict && urls.value[evict]) {\n URL.revokeObjectURL(urls.value[evict]);\n const next = { ...urls.value };\n delete next[evict];\n urls.value = next;\n }\n }\n order.push(raw);\n urls.value = { ...urls.value, [raw]: URL.createObjectURL(blob) };\n } catch {\n // 404 (thumb evicted server-side) or auth hiccup — icon fallback, and we\n // don't retry within this session to avoid hammering.\n failed.add(raw);\n } finally {\n pending.delete(raw);\n }\n }\n\n return { src };\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// PresenceBar — compact avatar strip showing who else is viewing the current\n// folder, and (as a small badge) which file each person is focused on. The\n// server already excludes the recipient from the roster (presence answers\n// \"who ELSE is here\"); the optional selfId filter remains as a belt-and-braces\n// for older backends. Purely presentational; the live data comes from the\n// realtime presence stream.\n\nimport { computed, ref } from 'vue';\nimport type { PresenceUser } from '../lib/realtime';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\n\nconst props = defineProps<{\n users: PresenceUser[];\n selfId?: number | null;\n locale?: LocaleCode;\n}>();\n\nconst { t } = useLocale(() => props.locale ?? 'tr');\n\nconst others = computed(() =>\n (props.users ?? []).filter((u) => props.selfId == null || u.id !== props.selfId),\n);\n\n// Compact (avatar strip) ⇄ expanded (scrollable name chips). With many users\n// the strip collapses to \"+N\", so the expanded mode is how you actually READ\n// who is here; the choice sticks for the session via localStorage.\nconst EXPAND_KEY = 'filex.presence.expanded';\nconst expanded = ref<boolean>((() => {\n try {\n return localStorage.getItem(EXPAND_KEY) === '1';\n } catch {\n return false;\n }\n})());\nfunction toggleExpanded(): void {\n expanded.value = !expanded.value;\n try {\n localStorage.setItem(EXPAND_KEY, expanded.value ? '1' : '0');\n } catch {\n /* private mode — session-only */\n }\n}\n\n// Stable key per identity: end users behind one shared proxy token have the\n// same numeric id but distinct server-issued uids.\nfunction keyOf(u: PresenceUser): string {\n return u.uid ?? String(u.id);\n}\n\nfunction initials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '?';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\n// Deterministic hue per identity so the same person keeps the same colour.\nfunction hue(u: PresenceUser): number {\n const s = keyOf(u);\n let h = 0;\n for (let i = 0; i < s.length; i++) h = (h * 31 + s.charCodeAt(i)) >>> 0;\n return h % 360;\n}\n\nfunction label(u: PresenceUser): string {\n return u.file ? `${u.name} · ${u.file}` : u.name;\n}\n</script>\n\n<template>\n <div v-if=\"others.length\" class=\"fx-presence\" :class=\"{ 'fx-presence--wide': expanded }\">\n <!-- Expanded: every user as an avatar+name chip in a horizontally\n scrollable row — names stay fully readable however many join. -->\n <div v-if=\"expanded\" class=\"fx-presence-chips\">\n <span\n v-for=\"u in others\"\n :key=\"keyOf(u)\"\n class=\"fx-presence-chip\"\n :title=\"label(u)\"\n >\n <span\n class=\"fx-presence-avatar\"\n :style=\"{ backgroundColor: `hsl(${hue(u)} 60% 45%)` }\"\n >\n {{ initials(u.name) }}\n <span v-if=\"u.file\" class=\"fx-presence-dot\" aria-hidden=\"true\"></span>\n </span>\n <span class=\"fx-presence-chip-name\">{{ u.name }}</span>\n <span v-if=\"u.file\" class=\"fx-presence-chip-file\">· {{ u.file }}</span>\n </span>\n </div>\n\n <!-- Compact: the classic overlapping avatar strip. -->\n <template v-else>\n <div class=\"fx-presence-avatars\" :title=\"others.map(label).join(', ')\">\n <span\n v-for=\"u in others.slice(0, 5)\"\n :key=\"keyOf(u)\"\n class=\"fx-presence-avatar\"\n :style=\"{ backgroundColor: `hsl(${hue(u)} 60% 45%)` }\"\n :title=\"label(u)\"\n >\n {{ initials(u.name) }}\n <span v-if=\"u.file\" class=\"fx-presence-dot\" aria-hidden=\"true\"></span>\n </span>\n <span v-if=\"others.length > 5\" class=\"fx-presence-more\">+{{ others.length - 5 }}</span>\n </div>\n <span class=\"fx-presence-text\" :title=\"others.map(label).join(', ')\">\n {{ others.length === 1 ? others[0].name : `${others.length} kişi` }}\n <template v-if=\"others.length === 1 && others[0].file\">\n · <span class=\"fx-presence-file\">{{ others[0].file }}</span>\n </template>\n </span>\n </template>\n\n <button\n type=\"button\"\n class=\"fx-presence-toggle\"\n :title=\"expanded ? t('presence.collapse') : t('presence.expand')\"\n :aria-expanded=\"expanded\"\n @click=\"toggleExpanded\"\n >{{ expanded ? '‹' : '›' }}</button>\n </div>\n</template>\n\n<style>\n/* ⚠ NOT `scoped`, deliberately. Vue's scoped styles compile to\n `.cls[data-v-HASH]`, and in the web-component build the hash baked into\n this CSS does not match the one Vue stamps onto the DOM — so every rule\n here silently stopped applying. Measured in the desktop app: the share\n dialog had `position: static`, no background and no radius, i.e. raw\n unstyled HTML, in EVERY embedded surface.\n Safe to drop: every selector below is prefixed (fx-/fe-/filex-), so\n there is nothing here that can leak into a host page. */\n.fx-presence {\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n max-width: 100%;\n}\n.fx-presence-avatars {\n display: inline-flex;\n align-items: center;\n}\n.fx-presence-avatar {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.5rem;\n height: 1.5rem;\n margin-left: -0.4rem;\n border-radius: 9999px;\n border: 2px solid var(--fx-presence-ring, #ffffff);\n color: #fff;\n font-size: 0.6rem;\n font-weight: 600;\n line-height: 1;\n user-select: none;\n}\n.fx-presence-avatar:first-child {\n margin-left: 0;\n}\n.fx-presence-dot {\n position: absolute;\n right: -1px;\n bottom: -1px;\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 9999px;\n background: #22c55e; /* green — actively focused on a file */\n border: 1.5px solid var(--fx-presence-ring, #ffffff);\n}\n.fx-presence-more {\n margin-left: 0.15rem;\n font-size: 0.7rem;\n color: rgb(113 113 122); /* zinc-500 */\n}\n.fx-presence--wide {\n flex: 1 1 auto;\n min-width: 0;\n}\n.fx-presence-chips {\n display: flex;\n align-items: center;\n gap: 0.4rem;\n overflow-x: auto;\n min-width: 0;\n padding-bottom: 2px; /* keep the scrollbar off the chips */\n scrollbar-width: thin;\n}\n.fx-presence-chip {\n display: inline-flex;\n align-items: center;\n gap: 0.35rem;\n flex: 0 0 auto;\n padding: 0.15rem 0.5rem 0.15rem 0.2rem;\n border-radius: 9999px;\n background: rgb(244 244 245); /* zinc-100 */\n font-size: 0.75rem;\n color: rgb(63 63 70); /* zinc-700 */\n white-space: nowrap;\n}\n.fx-presence-chip .fx-presence-avatar {\n margin-left: 0;\n}\n.fx-presence-chip-name {\n font-weight: 500;\n}\n.fx-presence-chip-file {\n color: rgb(113 113 122); /* zinc-500 */\n max-width: 12rem;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.fx-presence-toggle {\n flex: 0 0 auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.25rem;\n height: 1.25rem;\n border: none;\n border-radius: 9999px;\n background: transparent;\n color: rgb(113 113 122); /* zinc-500 */\n font-size: 0.9rem;\n line-height: 1;\n cursor: pointer;\n}\n.fx-presence-toggle:hover {\n background: rgb(228 228 231); /* zinc-200 */\n color: rgb(63 63 70);\n}\n.dark .fx-presence-chip {\n background: rgb(39 39 42); /* zinc-800 */\n color: rgb(212 212 216); /* zinc-300 */\n}\n.dark .fx-presence-toggle:hover {\n background: rgb(39 39 42);\n color: rgb(212 212 216);\n}\n.fx-presence-text {\n font-size: 0.75rem;\n color: rgb(113 113 122); /* zinc-500 */\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 14rem;\n}\n.fx-presence-file {\n color: rgb(82 82 91); /* zinc-600 */\n font-weight: 500;\n}\n.dark .fx-presence-avatar,\n.dark .fx-presence-dot {\n --fx-presence-ring: #18181b; /* zinc-900 */\n}\n</style>\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 * bag:b4 — bottom-sheet presentation for coarse-pointer (touch)\n * contexts. When true the menu renders as a full-width sheet sliding\n * up from the bottom edge (grab handle, ≥44px touch targets; closed\n * by overlay tap, dragging the handle down, or Esc). The position\n * passed to show() is ignored. When absent/false the classic anchored\n * menu renders — desktop right-click behavior is untouched.\n */\n sheet?: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: 'select', action: ContextAction, target: FileNode[]): void;\n}>();\n\nconst { t } = useLocale(() => props.locale); // bag:b4 — sheet aria labels need t()\n\nconst open = ref(false);\nconst x = ref(0);\nconst y = ref(0);\nconst targetNodes = ref<FileNode[]>([]);\nconst menuEl = ref<HTMLElement | null>(null);\n\n/* wiring:c4 — where the pointer opened the menu; kept separate from x/y so\n * the edge-flip can re-anchor ABOVE/LEFT of the cursor instead of merely\n * clamping (a clamp near the bottom edge used to leave the menu covering\n * the clicked row). */\nlet anchorX = 0;\nlet anchorY = 0;\n/* wiring:c4 — focus restore: whatever had focus before the menu opened gets\n * it back on hide, so keyboard users don't fall back to <body>. */\nlet prevFocus: HTMLElement | null = null;\n\nasync function show(ev: { clientX: number; clientY: number }, nodes: FileNode[]) {\n prevFocus = (document.activeElement as HTMLElement | null) ?? null; /* wiring:c4 */\n open.value = true;\n x.value = ev.clientX;\n y.value = ev.clientY;\n anchorX = ev.clientX; /* wiring:c4 */\n anchorY = ev.clientY; /* wiring:c4 */\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 if (props.sheet) {\n // bag:b4 — sheet mode: no anchoring; focus the panel so Esc closes it\n // without requiring a prior click inside.\n sheetEl.value?.focus();\n return;\n }\n clampToViewport();\n focusItem(0); /* wiring:c4 — keyboard nav starts on the first item */\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 /* wiring:c4 — edge flip: overflowing the bottom/right edge re-anchors the\n * menu above/left of the cursor when there's room; clamping stays as the\n * fallback for tiny viewports. */\n if (anchorY + rect.height > vh - margin) {\n const flipped = anchorY - rect.height;\n y.value = flipped >= margin ? flipped : Math.max(margin, vh - rect.height - margin);\n }\n if (anchorX + rect.width > vw - margin) {\n const flipped = anchorX - rect.width;\n x.value = flipped >= margin ? flipped : Math.max(margin, vw - rect.width - margin);\n }\n}\n\nfunction hide() {\n open.value = false;\n /* bag:b4 — reset any in-flight sheet drag so reopening starts clean. */\n sheetDragging.value = false;\n sheetDragY.value = 0;\n /* wiring:c4 — give focus back to the opener (row/card/⋯ button). */\n prevFocus?.focus?.();\n prevFocus = null;\n}\n\n/* === wiring:c4 — keyboard navigation (menu + sheet) ===\n * Arrow keys cycle through enabled items, Home/End jump, Enter/Space\n * activate the focused <button> natively, Esc closes (see onKey). Disabled\n * buttons are unfocusable, so the query skips them by construction. */\nfunction menuItems(): HTMLElement[] {\n const host = props.sheet ? sheetEl.value : menuEl.value;\n if (!host) return [];\n return Array.from(\n host.querySelectorAll<HTMLElement>('.fe-ctx__item:not(:disabled)'),\n );\n}\n\nfunction focusItem(idx: number) {\n const items = menuItems();\n if (items.length === 0) return;\n const i = ((idx % items.length) + items.length) % items.length;\n items[i]?.focus();\n}\n\nfunction moveFocus(delta: number) {\n const items = menuItems();\n if (items.length === 0) return;\n const active = document.activeElement as HTMLElement | null;\n const cur = active ? items.indexOf(active) : -1;\n if (cur === -1) {\n focusItem(delta > 0 ? 0 : items.length - 1);\n return;\n }\n focusItem(cur + delta);\n}\n/* === /wiring:c4 === */\n\n/* bag:b4 — sheet drag-to-dismiss. Bound to the grab handle only, so the\n * scrollable item list keeps its native touch scrolling. Dragging past the\n * threshold closes; anything less snaps back. */\nconst sheetEl = ref<HTMLElement | null>(null);\nconst sheetDragging = ref(false);\nconst sheetDragY = ref(0);\nlet sheetDragStart = 0;\n\nfunction onSheetDragStart(e: TouchEvent) {\n const t0 = e.touches[0];\n if (!t0) return;\n sheetDragging.value = true;\n sheetDragStart = t0.clientY;\n sheetDragY.value = 0;\n}\nfunction onSheetDragMove(e: TouchEvent) {\n if (!sheetDragging.value) return;\n const t0 = e.touches[0];\n if (!t0) return;\n sheetDragY.value = Math.max(0, t0.clientY - sheetDragStart);\n}\nfunction onSheetDragEnd() {\n if (!sheetDragging.value) return;\n const shouldClose = sheetDragY.value > 72;\n sheetDragging.value = false;\n if (shouldClose) {\n hide();\n } else {\n sheetDragY.value = 0;\n }\n}\nconst sheetStyle = computed(() =>\n sheetDragY.value > 0\n ? { transform: `translateY(${sheetDragY.value}px)`, transition: 'none' }\n : undefined,\n);\n/* /bag:b4 */\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') {\n // Scoped close: Esc with the menu open closes ONLY the menu — the\n // explorer's global onClose (which also dismisses modals/toasts)\n // shouldn't fire underneath.\n e.stopPropagation();\n hide();\n return;\n }\n if (e.key === 'Enter' || e.key === ' ') {\n // Native button activation handles the pick; stop the bubble so the\n // explorer's global Enter=open shortcut doesn't double-fire and pop\n // the preview modal on top of the chosen action.\n e.stopPropagation();\n return;\n }\n /* wiring:c4 — arrow-key navigation; stopPropagation keeps the explorer's\n * global shortcut handler (Enter=open, Backspace=up…) out of the loop\n * while the menu is up. */\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n e.stopPropagation();\n moveFocus(1);\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n e.stopPropagation();\n moveFocus(-1);\n } else if (e.key === 'Home') {\n e.preventDefault();\n focusItem(0);\n } else if (e.key === 'End') {\n e.preventDefault();\n focusItem(-1);\n } else if (e.key === 'Tab') {\n // A menu is not a tab-stop container — Tab closes it (WAI-ARIA menu\n // pattern) instead of tabbing behind the backdrop.\n e.preventDefault();\n hide();\n }\n}\n\n/* wiring:c4 — hidden-entry filtering used to leave orphaned separators\n * (leading/trailing/doubled) when the entries around a divider were hidden\n * by RBAC or selection shape. Collapse them here so every visible divider\n * actually separates two groups. */\nconst visibleActions = computed(() => {\n const vis = props.actions.filter((a) => !a.hidden);\n const out: ContextAction[] = [];\n for (const a of vis) {\n if (a.divider && (out.length === 0 || out[out.length - 1].divider)) continue;\n out.push(a);\n }\n while (out.length > 0 && out[out.length - 1].divider) out.pop();\n return out;\n});\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=\"sheet ? 'fe-sheet' : 'fe-ctx'\">\n <div\n v-if=\"open\"\n class=\"fe-ctx-backdrop\"\n :class=\"[themeClass, { 'fe-ctx-backdrop--sheet': sheet }]\"\n :data-prefers-dark=\"prefersDark ? '1' : '0'\"\n @click=\"hide\"\n @contextmenu.prevent=\"hide\"\n @keydown=\"onKey\"\n >\n <!-- bag:b4 — bottom-sheet variant (coarse pointer / touch) -->\n <div\n v-if=\"sheet\"\n ref=\"sheetEl\"\n class=\"fe-sheet\"\n role=\"menu\"\n :aria-label=\"t('sheet.menu')\"\n tabindex=\"-1\"\n :style=\"sheetStyle\"\n @click.stop\n >\n <div\n class=\"fe-sheet__handle\"\n role=\"button\"\n tabindex=\"0\"\n :aria-label=\"t('sheet.close')\"\n @click=\"hide\"\n @keydown.enter.prevent=\"hide\"\n @touchstart.passive=\"onSheetDragStart\"\n @touchmove.passive=\"onSheetDragMove\"\n @touchend=\"onSheetDragEnd\"\n @touchcancel=\"onSheetDragEnd\"\n />\n <div class=\"fe-sheet__items\">\n <template v-for=\"(a, i) in visibleActions\" :key=\"a.key || i\">\n <div v-if=\"a.divider\" class=\"fe-ctx__sep\" role=\"separator\" />\n <button\n v-else\n type=\"button\"\n class=\"fe-ctx__item fe-sheet__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 <div\n v-else\n ref=\"menuEl\"\n class=\"fe-ctx\"\n role=\"menu\"\n aria-orientation=\"vertical\"\n :aria-label=\"t('sheet.menu') /* wiring:c4 */\"\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\" role=\"separator\" />\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 * 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, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport type { ViewMode } from '../types/FileNode';\nimport type { LocaleCode, ThemeMode } from '../types/ExplorerConfig';\nimport ContextMenu, { 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 * bag:b4 — narrow/embed mini mode. When true the toolbar collapses to\n * [↑?] [🔍] [⬆] [⋯]: secondary actions (New Folder, Refresh, density,\n * view switcher, selection actions, Paste) move into the \"⋯\" overflow\n * menu and search expands from an icon to a full-width input. When\n * absent/false the classic wide layout renders unchanged.\n */\n narrow?: boolean;\n /**\n * bag:b4 — resolved theme, forwarded to the teleported overflow menu\n * (which loses the `.fe` variable scope under <body>).\n */\n theme?: ThemeMode;\n /* koru:k1 — inspector (details panel) toggle state, for the pressed style. */\n inspectorOpen?: boolean;\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 (e: 'update:density', v: Density): void;\n (e: 'toggle-inspector'): void /* koru:k1 */;\n (e: 'open-theme'): void /* wiring:c1 — tema galerisi */;\n (e: 'open-shortcut-settings'): void /* wiring:c2 */;\n}>();\n\n// Density toggle — the toolbar owns the persisted preference; the parent\n// only mirrors the value into a root class so both views pick it up.\nexport type Density = 'comfortable' | 'compact';\nconst DENSITY_LS_KEY = 'filex.density';\nconst density = ref<Density>(\n (() => {\n try {\n return localStorage.getItem(DENSITY_LS_KEY) === 'compact' ? 'compact' : 'comfortable';\n } catch {\n return 'comfortable';\n }\n })(),\n);\nonMounted(() => emit('update:density', density.value));\n\nfunction toggleDensity() {\n density.value = density.value === 'compact' ? 'comfortable' : 'compact';\n try {\n localStorage.setItem(DENSITY_LS_KEY, density.value);\n } catch {\n /* quota */\n }\n emit('update:density', density.value);\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\nasync function focusSearch() {\n /* bag:b4 — in narrow mode the input is collapsed behind the icon. */\n if (props.narrow && !searchOpen.value) {\n searchOpen.value = true;\n await nextTick();\n }\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\n/* === ui-fix — wide-mode action folding ===============================\n * Long selection-action rows used to wrap the whole toolbar and push the\n * search / view controls onto a second line. The row is now single-line:\n * actions that do not fit fold into a \"⋯\" menu. Widths come from a\n * hidden measurement strip (all actions always rendered there), so the\n * calculation never mutates what it measures. */\nconst primaryEl = ref<HTMLElement | null>(null);\nconst measureEl = ref<HTMLElement | null>(null);\nconst wideMoreBtnEl = ref<HTMLElement | null>(null);\nconst wideMoreRef = ref<InstanceType<typeof ContextMenu> | null>(null);\nconst visibleActionCount = ref(Number.MAX_SAFE_INTEGER);\nconst visibleToolbarItems = computed(() => toolbarItems.value.slice(0, visibleActionCount.value));\nconst overflowToolbarItems = computed(() => toolbarItems.value.slice(visibleActionCount.value));\nconst WIDE_MORE_BTN_W = 40;\n\nfunction recalcFold() {\n if (props.narrow) return;\n const cont = primaryEl.value;\n const meas = measureEl.value;\n if (!cont || !meas) {\n visibleActionCount.value = toolbarItems.value.length;\n return;\n }\n const gap = parseFloat(getComputedStyle(cont).gap) || 8;\n let fixed = 0;\n for (const child of Array.from(cont.children) as HTMLElement[]) {\n if (child === meas || child === wideMoreBtnEl.value) continue;\n if (child.classList.contains('fe-btn--fold')) continue;\n if (child.offsetWidth > 0) fixed += child.offsetWidth + gap;\n }\n const widths = (Array.from(meas.children) as HTMLElement[]).map((c) => c.offsetWidth + gap);\n const total = widths.reduce((s, w) => s + w, 0);\n const avail = cont.clientWidth - fixed;\n if (total <= avail) {\n visibleActionCount.value = widths.length;\n return;\n }\n let used = WIDE_MORE_BTN_W + gap;\n let count = 0;\n for (const w of widths) {\n if (used + w > avail) break;\n used += w;\n count += 1;\n }\n visibleActionCount.value = count;\n}\n\nlet foldRo: ResizeObserver | undefined;\nonMounted(() => {\n if (typeof ResizeObserver !== 'undefined' && primaryEl.value) {\n foldRo = new ResizeObserver(() => recalcFold());\n foldRo.observe(primaryEl.value);\n }\n void nextTick(recalcFold);\n});\nonBeforeUnmount(() => foldRo?.disconnect());\nwatch(\n () => [toolbarItems.value, props.narrow, props.trashActive, mode.value] as const,\n () => void nextTick(recalcFold),\n { deep: false },\n);\n\nfunction openWideMore() {\n const r = wideMoreBtnEl.value?.getBoundingClientRect();\n wideMoreRef.value?.show({ clientX: r ? r.right : 0, clientY: r ? r.bottom + 4 : 0 } as MouseEvent, []);\n}\n/* === /ui-fix ========================================================= */\n\nfunction fire(key: string) {\n emit('action', key);\n}\n\n/* === bag:b4 — narrow-mode state: expandable search + \"⋯\" overflow menu === */\n\nconst searchOpen = ref(false);\n// Leaving narrow mode discards the transient expanded-search state so the\n// wide layout always comes back exactly as it was.\nwatch(\n () => props.narrow,\n (n) => {\n if (!n) searchOpen.value = false;\n },\n);\n\nasync function openSearch() {\n searchOpen.value = true;\n await nextTick();\n searchEl.value?.focus();\n}\nfunction closeSearch() {\n // Keep the query (it still filters the listing); the icon shows an\n // active state while a query is set.\n searchOpen.value = false;\n}\n\n// Coarse-pointer detection — the overflow menu renders as a bottom sheet on\n// touch devices, matching the file context menu.\nconst coarse = ref(false);\nlet coarseMq: MediaQueryList | undefined;\nfunction syncCoarse(e?: MediaQueryListEvent | MediaQueryList) {\n coarse.value = !!(e && 'matches' in e && e.matches);\n}\nonMounted(() => {\n if (typeof window === 'undefined' || !window.matchMedia) return;\n coarseMq = window.matchMedia('(pointer: coarse)');\n syncCoarse(coarseMq);\n coarseMq.addEventListener?.('change', syncCoarse);\n});\nonBeforeUnmount(() => {\n coarseMq?.removeEventListener?.('change', syncCoarse);\n});\n\nconst moreBtnEl = ref<HTMLElement | null>(null);\nconst moreRef = ref<InstanceType<typeof ContextMenu> | null>(null);\n\n// Everything the wide toolbar renders as standalone buttons, folded into one\n// action list: folder-level writes (New Folder / Paste), the shared\n// selection actions, then the view utilities (Refresh / density / view mode).\nconst moreActions = computed<ContextAction[]>(() => {\n const list: ContextAction[] = [];\n const writable =\n !props.trashActive && !props.atVirtualRoot && props.canWrite !== false;\n if (mode.value === 'none' && writable) {\n list.push({ key: 'new-folder', label: t('toolbar.new_folder'), icon: '📁' });\n if (props.pasteEnabled) list.push({ key: 'paste', label: t('ctx.paste'), icon: '📋' });\n }\n list.push(...toolbarItems.value);\n if (list.length) list.push({ divider: true, key: 'bag-sep', label: '' });\n list.push({ key: 'refresh', label: t('toolbar.refresh'), icon: '↻' });\n list.push({\n key: 'density',\n label:\n density.value === 'compact'\n ? t('toolbar.density.comfortable')\n : t('toolbar.density.compact'),\n icon: '⇅',\n });\n /* wiring:d2 — dar mod ⋯ menüsü: aktif olmayan İKİ görünüm de listelenir\n (list/grid/gallery); eski tekli toggle üç modda eksik kalıyordu. */\n if (props.viewMode !== 'list') list.push({ key: 'view-list', label: t('toolbar.view.list'), icon: '☰' });\n if (props.viewMode !== 'grid') list.push({ key: 'view-grid', label: t('toolbar.view.grid'), icon: '▦' });\n if (props.viewMode !== 'gallery') list.push({ key: 'view-gallery', label: t('toolbar.view.gallery'), icon: '▣' });\n /* /wiring:d2 */\n /* koru:k1 — inspector toggle also reachable from the narrow overflow menu */\n list.push({ key: 'inspector', label: t('toolbar.inspector'), icon: 'ℹ' });\n /* wiring:c1 — tema galerisi de dar modda ⋯ menüsünden açılır */\n list.push({ key: 'theme', label: t('theme.menu'), icon: '🎨' });\n list.push({ key: 'shortcut-settings', label: t('shortcuts.settings.menu'), icon: '⌨' }) /* wiring:c2 */;\n list.push({ key: 'tour', label: t('tour.restart'), icon: '🎓' }); /* wiring:c4 */\n return list;\n});\n\nfunction openMore() {\n const r = moreBtnEl.value?.getBoundingClientRect();\n moreRef.value?.show({ clientX: r ? r.right : 0, clientY: r ? r.bottom + 4 : 0 }, []);\n}\n\nfunction onMoreSelect(a: ContextAction) {\n switch (a.key) {\n case 'new-folder':\n emit('new-folder');\n break;\n case 'refresh':\n emit('refresh');\n break;\n case 'density':\n toggleDensity();\n break;\n case 'view-list':\n emit('update:viewMode', 'list');\n break;\n case 'view-grid':\n emit('update:viewMode', 'grid');\n break;\n case 'view-gallery' /* wiring:d2 */:\n emit('update:viewMode', 'gallery');\n break;\n case 'inspector' /* koru:k1 */:\n emit('toggle-inspector');\n break;\n case 'theme' /* wiring:c1 */:\n emit('open-theme');\n break;\n case 'shortcut-settings' /* wiring:c2 */:\n emit('open-shortcut-settings');\n break;\n case 'tour' /* wiring:c4 — bubbles to the FileExplorer root listener */:\n moreBtnEl.value?.dispatchEvent(new CustomEvent('fe:tour-restart', { bubbles: true }));\n break;\n default:\n fire(a.key);\n }\n}\n\n/* === /bag:b4 === */\n</script>\n\n<template>\n <div\n class=\"fe-toolbar\"\n :class=\"{\n 'fe-toolbar--narrow': narrow /* bag:b4 */,\n 'fe-toolbar--searching': narrow && searchOpen /* bag:b4 */,\n }\"\n >\n <!-- bag:b4 — wide layout, untouched; renders exactly as before when not narrow -->\n <template v-if=\"!narrow\">\n <div ref=\"primaryEl\" 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 visibleToolbarItems\"\n :key=\"a.key\"\n type=\"button\"\n class=\"fe-btn fe-btn--fold\"\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 <!-- ui-fix — sığmayan aksiyonlar tek satırı korumak için ⋯ menüsüne\n katlanır (arama/görünüm kontrolleri artık alt satıra düşmez). -->\n <button\n v-if=\"overflowToolbarItems.length > 0\"\n ref=\"wideMoreBtnEl\"\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only\"\n :title=\"t('toolbar.more')\"\n :aria-label=\"t('toolbar.more')\"\n aria-haspopup=\"menu\"\n @click=\"openWideMore\"\n >\n <span class=\"fe-icon\">⋯</span>\n </button>\n\n <!-- Görünmez ölçüm şeridi: TÜM aksiyonlar her zaman burada render\n edilir; katlama hesabı gerçek genişliklerden yapılır. -->\n <div ref=\"measureEl\" class=\"fe-toolbar__measure\" aria-hidden=\"true\">\n <button\n v-for=\"a in toolbarItems\"\n :key=\"'m-' + a.key\"\n type=\"button\"\n class=\"fe-btn\"\n tabindex=\"-1\"\n >\n <span class=\"fe-icon\">{{ a.icon }}</span>\n <span class=\"fe-btn__label\">{{ a.label }}</span>\n </button>\n </div>\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=\"t('toolbar.search') /* wiring:c4 — was hardcoded EN */\"\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 :aria-label=\"t('toolbar.upload') /* wiring:c4 */\"\n @click=\"emit('upload')\"\n >\n <span class=\"fe-icon\" aria-hidden=\"true\">⬆</span>\n </button>\n <button\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only\"\n :title=\"t('toolbar.refresh')\"\n :aria-label=\"t('toolbar.refresh') /* wiring:c4 */\"\n @click=\"emit('refresh')\"\n >\n <span class=\"fe-icon\" aria-hidden=\"true\">↻</span>\n </button>\n </div>\n\n <button\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only fe-toolbar__density\"\n :class=\"{ 'is-active': density === 'compact' }\"\n :aria-pressed=\"density === 'compact'\"\n :aria-label=\"density === 'compact' ? t('toolbar.density.comfortable') : t('toolbar.density.compact')\"\n :title=\"density === 'compact' ? t('toolbar.density.comfortable') : t('toolbar.density.compact')\"\n @click=\"toggleDensity\"\n >\n <!-- Row-spacing glyph: tight rows when compact is ON, airy rows otherwise. -->\n <svg\n v-if=\"density === 'compact'\"\n class=\"fe-ficon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M4 6.5h16M4 10.5h16M4 14.5h16M4 18.5h16\" />\n </svg>\n <svg\n v-else\n class=\"fe-ficon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M4 5.5h16M4 12h16M4 18.5h16\" />\n </svg>\n </button>\n\n <!-- koru:k1 — inspector (details panel) toggle -->\n <button\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only fe-toolbar__inspector\"\n :class=\"{ 'is-active': inspectorOpen }\"\n :aria-pressed=\"!!inspectorOpen\"\n :title=\"t('toolbar.inspector')\"\n :aria-label=\"t('toolbar.inspector')\"\n @click=\"emit('toggle-inspector')\"\n >\n <svg\n class=\"fe-ficon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 11v5\" />\n <circle cx=\"12\" cy=\"7.6\" r=\"1\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n </button>\n\n <!-- wiring:c1 — tema galerisi (palet ikonu) -->\n <button\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only fe-toolbar__theme\"\n :title=\"t('theme.menu')\"\n :aria-label=\"t('theme.menu')\"\n @click=\"emit('open-theme')\"\n >\n <svg\n class=\"fe-ficon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M12 3a9 9 0 1 0 0 18h1.4a2.1 2.1 0 0 0 1.5-3.6 2.1 2.1 0 0 1 1.5-3.6H19a2 2 0 0 0 2-2A9 9 0 0 0 12 3z\" />\n <circle cx=\"7.8\" cy=\"10.2\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"11.6\" cy=\"7.2\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"16\" cy=\"8.6\" r=\"1.15\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n </button>\n <!-- /wiring:c1 -->\n\n <div class=\"fe-toolbar__view\" role=\"tablist\" :aria-label=\"t('toolbar.view_label') /* wiring:c4 — was hardcoded EN */\">\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 :aria-label=\"t('toolbar.view.list') /* wiring:c4 */\"\n @click=\"emit('update:viewMode', 'list')\"\n >\n <span class=\"fe-icon\" aria-hidden=\"true\">☰</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 :aria-label=\"t('toolbar.view.grid') /* wiring:c4 */\"\n @click=\"emit('update:viewMode', 'grid')\"\n >\n <span class=\"fe-icon\" aria-hidden=\"true\">▦</span>\n </button>\n <!-- wiring:d2 — üçüncü görünüm: galeri -->\n <button\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only\"\n :class=\"{ 'is-active': viewMode === 'gallery' }\"\n role=\"tab\"\n :aria-selected=\"viewMode === 'gallery'\"\n :title=\"t('toolbar.view.gallery')\"\n :aria-label=\"t('toolbar.view.gallery')\"\n @click=\"emit('update:viewMode', 'gallery')\"\n >\n <span class=\"fe-icon\" aria-hidden=\"true\">▣</span>\n </button>\n <!-- /wiring:d2 -->\n </div>\n </template>\n\n <!-- bag:b4 — narrow layout: [↑?] ... [🔍] [⬆] [⋯], search expands full-width -->\n <template v-else>\n <template v-if=\"searchOpen\">\n <div class=\"fe-search fe-search--full\">\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=\"t('toolbar.search')\"\n @input=\"onSearchInput\"\n @keydown.esc.stop.prevent=\"closeSearch\"\n />\n </div>\n <button\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only\"\n :title=\"t('toolbar.search.close')\"\n :aria-label=\"t('toolbar.search.close')\"\n @click=\"closeSearch\"\n >\n <span class=\"fe-icon\">✕</span>\n </button>\n </template>\n <template v-else>\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 <div class=\"fe-toolbar__spacer\" />\n\n <button\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only fe-toolbar__search-toggle\"\n :class=\"{ 'is-active': !!localSearch }\"\n :title=\"t('toolbar.search')\"\n :aria-label=\"t('toolbar.search')\"\n @click=\"openSearch\"\n >\n <span class=\"fe-icon\">🔍</span>\n </button>\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 :aria-label=\"t('toolbar.upload')\"\n @click=\"emit('upload')\"\n >\n <span class=\"fe-icon\">⬆</span>\n </button>\n <button\n ref=\"moreBtnEl\"\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only fe-toolbar__more\"\n :title=\"t('toolbar.more')\"\n :aria-label=\"t('toolbar.more')\"\n aria-haspopup=\"menu\"\n @click=\"openMore\"\n >\n <span class=\"fe-icon\">⋯</span>\n </button>\n </template>\n\n <ContextMenu\n ref=\"moreRef\"\n :locale=\"locale\"\n :theme=\"theme || 'auto'\"\n :sheet=\"coarse\"\n :actions=\"moreActions\"\n @select=\"onMoreSelect\"\n />\n </template>\n\n <!-- ui-fix — wide modda katlanan aksiyonların ⋯ menüsü -->\n <ContextMenu\n v-if=\"!narrow\"\n ref=\"wideMoreRef\"\n :locale=\"locale\"\n :theme=\"theme || 'auto'\"\n :sheet=\"false\"\n :actions=\"overflowToolbarItems\"\n @select=\"(a) => fire(a.key)\"\n />\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 /** Credentials mode, from the explorer's auth kind. ⚠ Defaults to\n * 'same-origin': a credentialed cross-origin request cannot be answered\n * with ACAO:* , so hardcoding 'include' broke this call in every embed\n * served from a different origin to the API. */\n authCredentials?: RequestCredentials;\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: props.authCredentials ?? 'same-origin',\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: props.authCredentials ?? 'same-origin',\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>\n/* ⚠ NOT `scoped`, deliberately. Vue's scoped styles compile to\n `.cls[data-v-HASH]`, and in the web-component build the hash baked into\n this CSS does not match the one Vue stamps onto the DOM — so every rule\n here silently stopped applying. Measured in the desktop app: the share\n dialog had `position: static`, no background and no radius, i.e. raw\n unstyled HTML, in EVERY embedded surface.\n Safe to drop: every selector below is prefixed (fx-/fe-/filex-), so\n there is nothing here that can leak into a host page. */\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 /** Credentials mode, from the explorer's auth kind. ⚠ Defaults to\n * 'same-origin': a credentialed cross-origin request cannot be answered\n * with ACAO:* , so hardcoding 'include' broke this call in every embed\n * served from a different origin to the API. */\n authCredentials?: RequestCredentials;\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: props.authCredentials ?? 'same-origin',\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>\n/* ⚠ NOT `scoped`, deliberately. Vue's scoped styles compile to\n `.cls[data-v-HASH]`, and in the web-component build the hash baked into\n this CSS does not match the one Vue stamps onto the DOM — so every rule\n here silently stopped applying. Measured in the desktop app: the share\n dialog had `position: static`, no background and no radius, i.e. raw\n unstyled HTML, in EVERY embedded surface.\n Safe to drop: every selector below is prefixed (fx-/fe-/filex-), so\n there is nothing here that can leak into a host page. */\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, onBeforeUnmount, ref, watch } 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\n// ------------------------------------------------------------------\n// Overflow collapse (cila:c / I5) — when the trail grows past the\n// threshold, show `root › … › parent › current`; the middle crumbs move\n// into a dropdown. Visible crumbs keep their full click/drag-drop/context\n// behavior; dropdown entries only navigate.\n// ------------------------------------------------------------------\nconst OVERFLOW_THRESHOLD = 4;\nconst collapsed = computed(() => crumbs.value.length > OVERFLOW_THRESHOLD);\nconst leadCrumbs = computed<Crumb[]>(() =>\n collapsed.value ? crumbs.value.slice(0, 1) : crumbs.value,\n);\nconst middleCrumbs = computed<Crumb[]>(() =>\n collapsed.value ? crumbs.value.slice(1, -2) : [],\n);\nconst tailCrumbs = computed<Crumb[]>(() =>\n collapsed.value ? crumbs.value.slice(-2) : [],\n);\n\nconst overflowOpen = ref(false);\nconst moreWrapEl = ref<HTMLElement | null>(null);\n\nfunction onOverflowPick(crumb: Crumb) {\n overflowOpen.value = false;\n emit('navigate', crumb.adapterPath);\n}\n\nfunction onDocClick(e: MouseEvent) {\n const wrap = moreWrapEl.value;\n if (wrap && e.target instanceof Node && wrap.contains(e.target)) return;\n overflowOpen.value = false;\n}\n\nfunction onDocKeydown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.stopPropagation();\n overflowOpen.value = false;\n }\n}\n\nwatch(overflowOpen, (v) => {\n if (v) {\n document.addEventListener('click', onDocClick, true);\n document.addEventListener('keydown', onDocKeydown, true);\n } else {\n document.removeEventListener('click', onDocClick, true);\n document.removeEventListener('keydown', onDocKeydown, true);\n }\n});\n// Navigation rebuilds the trail — a stale open menu would list crumbs of\n// the previous folder.\nwatch(crumbs, () => {\n overflowOpen.value = false;\n});\nonBeforeUnmount(() => {\n document.removeEventListener('click', onDocClick, true);\n document.removeEventListener('keydown', onDocKeydown, true);\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 leadCrumbs\"\n :key=\"c.adapterPath\"\n class=\"fe-breadcrumb__crumb\"\n :class=\"{ 'is-last': !collapsed && i === leadCrumbs.length - 1 }\"\n type=\"button\"\n :aria-current=\"!collapsed && i === leadCrumbs.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=\"collapsed || i < leadCrumbs.length - 1\" class=\"fe-breadcrumb__sep\" aria-hidden=\"true\">›</span>\n </button>\n <span v-if=\"middleCrumbs.length\" ref=\"moreWrapEl\" class=\"fe-breadcrumb__more-wrap\">\n <button\n type=\"button\"\n class=\"fe-breadcrumb__more\"\n aria-haspopup=\"menu\"\n :aria-expanded=\"overflowOpen\"\n :aria-label=\"t('breadcrumb.more')\"\n :title=\"t('breadcrumb.more')\"\n @click=\"overflowOpen = !overflowOpen\"\n >…</button>\n <span class=\"fe-breadcrumb__sep\" aria-hidden=\"true\">›</span>\n <div v-if=\"overflowOpen\" class=\"fe-breadcrumb__menu\" role=\"menu\">\n <button\n v-for=\"c in middleCrumbs\"\n :key=\"c.adapterPath\"\n type=\"button\"\n class=\"fe-breadcrumb__menu-item\"\n role=\"menuitem\"\n @click=\"onOverflowPick(c)\"\n >{{ c.label }}</button>\n </div>\n </span>\n <button\n v-for=\"(c, i) in tailCrumbs\"\n :key=\"c.adapterPath\"\n class=\"fe-breadcrumb__crumb\"\n :class=\"{ 'is-last': i === tailCrumbs.length - 1 }\"\n type=\"button\"\n :aria-current=\"i === tailCrumbs.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 < tailCrumbs.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","/**\n * fileIcons — extension/type → inline SVG icon mapping.\n *\n * Replaces the old emoji maps in GridView/ListView with a minimalist\n * line-icon set. Icons are hand-drawn 24×24 strokes on `currentColor`;\n * each family gets an accent via `--fe-icon-<family>` (variables.css),\n * applied through the `fe-ficon--<family>` class in base.css.\n *\n * Scope: file-TYPE icons only. Action emojis (trash/star/…) and the\n * special `.trash` / storage rows stay emoji — see the views.\n */\n\nexport type IconFamily =\n | 'folder'\n | 'image'\n | 'video'\n | 'audio'\n | 'pdf'\n | 'doc'\n | 'sheet'\n | 'slides'\n | 'archive'\n | 'code'\n | 'text'\n | 'unknown';\n\nconst EXT_FAMILIES: Record<string, IconFamily> = {};\n\nfunction reg(family: IconFamily, exts: string[]) {\n for (const e of exts) EXT_FAMILIES[e] = family;\n}\n\nreg('image', ['jpg', 'jpeg', 'png', 'webp', 'gif', 'bmp', 'avif', 'heic', 'svg', 'ico', 'tiff', 'tif']);\nreg('video', ['mp4', 'webm', 'mov', 'mkv', 'avi', 'ogv', 'm4v']);\nreg('audio', ['mp3', 'wav', 'flac', 'ogg', 'm4a', 'aac', 'opus']);\nreg('pdf', ['pdf']);\nreg('doc', ['doc', 'docx', 'odt', 'rtf']);\nreg('sheet', ['xls', 'xlsx', 'ods', 'csv']);\nreg('slides', ['ppt', 'pptx', 'odp']);\nreg('archive', ['zip', 'tar', 'gz', 'bz2', '7z', 'rar', 'xz', 'zst']);\nreg('code', [\n 'js', 'ts', 'jsx', 'tsx', 'mjs', 'cjs', 'vue', 'py', 'go', 'rs', 'php', 'rb',\n 'java', 'kt', 'swift', 'c', 'cpp', 'h', 'hpp', 'cs', 'css', 'scss', 'less',\n 'html', 'htm', 'json', 'yml', 'yaml', 'xml', 'sh', 'bash', 'ps1', 'sql', 'toml',\n]);\nreg('text', ['txt', 'md', 'markdown', 'log', 'ini', 'conf', 'cfg', 'env']);\n\n/** Pick the icon family for a listing node. */\nexport function iconFamilyFor(node: {\n type?: string;\n extension?: string | null;\n}): IconFamily {\n if (node.type === 'dir') return 'folder';\n const ext = (node.extension || '').toLowerCase();\n return EXT_FAMILIES[ext] ?? 'unknown';\n}\n\n// Shared fragments. The document families reuse one sheet-with-fold base so\n// the set reads as one system; media families get standalone shapes.\nconst FILE_BASE =\n '<path d=\"M6.5 3h7L18.5 8v11.5a1.5 1.5 0 0 1-1.5 1.5H6.5A1.5 1.5 0 0 1 5 19.5v-15A1.5 1.5 0 0 1 6.5 3z\"/>' +\n '<path d=\"M13.5 3v5h5\"/>';\n\nconst GLYPHS: Record<IconFamily, string> = {\n // Folder is the one \"filled\" member — a soft currentColor wash keeps it\n // visually anchored without breaking the line style.\n folder:\n '<path d=\"M3 7a2 2 0 0 1 2-2h4.2l2 2.4H19a2 2 0 0 1 2 2V17a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" fill=\"currentColor\" fill-opacity=\"0.14\"/>',\n image:\n '<rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"/>' +\n '<circle cx=\"8.6\" cy=\"10\" r=\"1.6\"/>' +\n '<path d=\"M5.2 16.6l4.3-4.3 3 3 2.4-2.4 3.9 3.7\"/>',\n video:\n '<rect x=\"3\" y=\"5\" width=\"18\" height=\"14\" rx=\"2\"/>' +\n '<path d=\"M10.2 9.3v5.4l4.8-2.7z\" fill=\"currentColor\" stroke=\"none\"/>',\n audio:\n '<path d=\"M9 17.5V7.2l9-2.2v10.4\"/>' +\n '<circle cx=\"6.8\" cy=\"17.6\" r=\"2.2\"/>' +\n '<circle cx=\"15.8\" cy=\"15.5\" r=\"2.2\"/>',\n pdf:\n FILE_BASE +\n '<rect x=\"7.5\" y=\"12\" width=\"9\" height=\"5\" rx=\"1\" fill=\"currentColor\" fill-opacity=\"0.14\"/>',\n doc:\n FILE_BASE +\n '<path d=\"M8.5 13h7M8.5 16h7\"/>',\n sheet:\n FILE_BASE +\n '<path d=\"M8 12.5h8M8 15.5h8M8 18h8M12 12.5V18\"/>',\n slides:\n FILE_BASE +\n '<rect x=\"8\" y=\"12.5\" width=\"8\" height=\"5\" rx=\"0.8\"/>',\n archive:\n FILE_BASE +\n '<path d=\"M10 3v1.6M10 6.6v1.6M10 10.2v1.6\"/>' +\n '<rect x=\"8.6\" y=\"14\" width=\"2.8\" height=\"3.4\" rx=\"0.8\"/>',\n code:\n FILE_BASE +\n '<path d=\"M10.4 12.5L8.3 15l2.1 2.5M13.6 12.5l2.1 2.5-2.1 2.5\"/>',\n text:\n FILE_BASE +\n '<path d=\"M8.5 12h7M8.5 15h7M8.5 18h4.5\"/>',\n unknown:\n FILE_BASE +\n '<path d=\"M10.3 13.1a1.8 1.8 0 1 1 2.5 1.9c-.6.3-.8.7-.8 1.4\"/>' +\n '<circle cx=\"12\" cy=\"18.4\" r=\"0.9\" fill=\"currentColor\" stroke=\"none\"/>',\n};\n\nconst SVG_CACHE = new Map<IconFamily, string>();\n\n/** Inline SVG markup for a family (safe static strings — v-html friendly). */\nexport function iconSvg(family: IconFamily): string {\n let svg = SVG_CACHE.get(family);\n if (!svg) {\n svg =\n `<svg class=\"fe-ficon fe-ficon--${family}\" viewBox=\"0 0 24 24\" fill=\"none\" ` +\n 'stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" ' +\n 'stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\">' +\n `${GLYPHS[family]}</svg>`;\n SVG_CACHE.set(family, svg);\n }\n return svg;\n}\n\n/** Convenience: node → SVG markup in one call. */\nexport function fileIconSvg(node: { type?: string; extension?: string | null }): string {\n return iconSvg(iconFamilyFor(node));\n}\n","/* bul:s3 */\n/**\n * Snippet segment parser — the search backend returns content snippets as\n * PLAIN TEXT with matched words wrapped in «guillemets» (contract: no HTML\n * ever crosses the wire). The UI renders highlights by splitting the string\n * into segments and emitting each one as a TEXT node (a <mark> wrapper for\n * matches) — never via innerHTML, so a file whose content contains markup\n * can't inject anything into the page.\n */\n\nexport interface SnippetSegment {\n /** Literal text of this segment. Always rendered as a text node. */\n text: string;\n /** True when the segment was «wrapped» — render inside <mark>. */\n match: boolean;\n}\n\n/**\n * Split a `«»`-annotated snippet into render segments. An unpaired `«`\n * degrades gracefully: the rest of the string is treated as plain text.\n */\nexport function snippetSegments(snippet: string): SnippetSegment[] {\n const out: SnippetSegment[] = [];\n if (!snippet) return out;\n const re = /«([^«»]*)»/g;\n let last = 0;\n let m: RegExpExecArray | null;\n while ((m = re.exec(snippet)) !== null) {\n if (m.index > last) out.push({ text: snippet.slice(last, m.index), match: false });\n if (m[1]) out.push({ text: m[1], match: true });\n last = m.index + m[0].length;\n }\n if (last < snippet.length) out.push({ text: snippet.slice(last), match: false });\n return out;\n}\n\n/** Matched-in values the search contract allows on a hit. */\nexport type SearchMatched = 'name' | 'content' | 'both';\n\n/** True when the hit matched (at least partly) inside file CONTENT. */\nexport function matchedInContent(matched: unknown): boolean {\n return matched === 'content' || matched === 'both';\n}\n","/**\n * dragGhost — wiring:c4 custom HTML5 drag image.\n *\n * The browser default drag image (a translucent snapshot of the row/card)\n * reads poorly for multi-selection drags. This builds a small pill with the\n * dragged item's name and, for multi-drags, a count badge, parks it\n * off-screen (setDragImage requires a rendered element), and removes it on\n * the next tick. Purely visual — the dataTransfer payload is untouched.\n *\n * Styled by `.fe-dragghost` in base.css via the `--fe-*` tokens published\n * at :root (and re-published at `.dark`/html level for dark hosts), so it\n * matches the active theme even though it's appended to <body>.\n */\nexport function applyDragGhost(ev: DragEvent, name: string, count: number): void {\n const dt = ev.dataTransfer;\n if (!dt || typeof document === 'undefined' || typeof dt.setDragImage !== 'function') return;\n try {\n const el = document.createElement('div');\n el.className = 'fe-dragghost';\n const label = document.createElement('span');\n label.className = 'fe-dragghost__name';\n label.textContent = name;\n el.appendChild(label);\n if (count > 1) {\n const badge = document.createElement('span');\n badge.className = 'fe-dragghost__badge';\n badge.textContent = String(count);\n el.appendChild(badge);\n }\n el.style.position = 'fixed';\n el.style.top = '-1000px';\n el.style.left = '-1000px';\n document.body.appendChild(el);\n dt.setDragImage(el, 14, 14);\n // The engine snapshots the element synchronously during dragstart —\n // safe to drop it right after.\n setTimeout(() => el.remove(), 0);\n } catch {\n /* non-critical visual nicety — native ghost remains */\n }\n}\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 /** Credentials mode, from the explorer's auth kind. ⚠ Defaults to\n * 'same-origin': a credentialed cross-origin request cannot be answered\n * with ACAO:* , so hardcoding 'include' broke this call in every embed\n * served from a different origin to the API. */\n authCredentials?: RequestCredentials;\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: props.authCredentials ?? 'same-origin',\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>\n/* ⚠ NOT `scoped`, deliberately. Vue's scoped styles compile to\n `.cls[data-v-HASH]`, and in the web-component build the hash baked into\n this CSS does not match the one Vue stamps onto the DOM — so every rule\n here silently stopped applying. Measured in the desktop app: the share\n dialog had `position: static`, no background and no radius, i.e. raw\n unstyled HTML, in EVERY embedded surface.\n Safe to drop: every selector below is prefixed (fx-/fe-/filex-), so\n there is nothing here that can leak into a host page. */\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, ref } from 'vue';\nimport type { FileNode } from '../types/FileNode';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\nimport { fileIconSvg } from '../lib/fileIcons';\nimport { matchedInContent, snippetSegments } from '../lib/snippet'; /* bul:s3 */\nimport { applyDragGhost } from '../lib/dragGhost'; /* wiring:c4 */\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 authCredentials?: RequestCredentials;\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 /* wiring:c4 — custom ghost (name + multi-select count badge). Visual\n * only; the payload/selection logic stays in FileExplorer. */\n applyDragGhost(\n ev,\n nodeDisplayName(n),\n props.selected.has(n.path) ? props.selected.size : 1,\n );\n emit('item-drag-start', n, ev);\n}\n\n/* wiring:c4 — droptarget highlight: the folder row currently hovered by an\n * internal drag gets `.is-droptarget`. Purely visual — the accept/deny\n * decision below is untouched (files never preventDefault, so the browser\n * shows the native no-drop cursor on invalid targets). */\nconst dropTargetPath = ref<string | null>(null);\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 dropTargetPath.value = n.path; /* wiring:c4 */\n}\n\n/* wiring:c4 */\nfunction onItemDragLeave(n: FileNode) {\n if (dropTargetPath.value === n.path) dropTargetPath.value = null;\n}\n\nfunction onItemDrop(n: FileNode, ev: DragEvent) {\n dropTargetPath.value = null; /* wiring:c4 */\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\n// Special rows keep their emoji (trash/storage are not file-TYPE icons);\n// everything else renders the SVG icon set from lib/fileIcons.\nfunction specialEmojiFor(n: FileNode): string | null {\n if (n.basename === '.trash') return '🗑';\n if (n.mime_type === 'inode/storage') return '💾';\n if (n.type === 'dir' && n.e2e === true) return '🔒'; /* wiring:e2 — şifreli klasör rozeti */\n return null;\n}\n\nfunction isPinnedSpecial(n: FileNode): boolean {\n return n.basename === '.trash' || n.mime_type === 'inode/storage';\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\n/* bul:s3 — search-result enrichment. The v0.2 backend inlines `snippet`\n * (plain text, «» highlights) + `matched` on search hits; regular listings\n * never carry them, so presence-gating keeps normal rows untouched and an\n * older backend simply renders nothing extra. */\nfunction rowSnippet(n: FileNode): string {\n const s = (n as Record<string, unknown>).snippet;\n return typeof s === 'string' ? s : '';\n}\n\nfunction rowInContent(n: FileNode): boolean {\n return matchedInContent((n as Record<string, unknown>).matched);\n}\n\n// ------------------------------------------------------------------\n// Column sorting — local to the list view. Default (null) keeps the\n// backend order, i.e. exactly the pre-existing behavior.\n// ------------------------------------------------------------------\n\ntype SortKey = 'name' | 'size' | 'modified';\nconst SORT_LS_KEY = 'filex.list-sort';\n\nconst sortKey = ref<SortKey | null>(null);\nconst sortDir = ref<'asc' | 'desc'>('asc');\ntry {\n const raw = localStorage.getItem(SORT_LS_KEY);\n if (raw) {\n const p = JSON.parse(raw) as { key?: unknown; dir?: unknown };\n if (p.key === 'name' || p.key === 'size' || p.key === 'modified') sortKey.value = p.key;\n if (p.dir === 'asc' || p.dir === 'desc') sortDir.value = p.dir;\n }\n} catch {\n /* private mode / bad JSON */\n}\n\n// Dates default to newest-first, the others to ascending.\nfunction defaultDir(key: SortKey): 'asc' | 'desc' {\n return key === 'modified' ? 'desc' : 'asc';\n}\n\n// Click cycle per column: default direction → flipped → back to backend order.\nfunction toggleSort(key: SortKey) {\n if (sortKey.value !== key) {\n sortKey.value = key;\n sortDir.value = defaultDir(key);\n } else if (sortDir.value === defaultDir(key)) {\n sortDir.value = sortDir.value === 'asc' ? 'desc' : 'asc';\n } else {\n sortKey.value = null;\n }\n try {\n localStorage.setItem(\n SORT_LS_KEY,\n JSON.stringify({ key: sortKey.value, dir: sortDir.value }),\n );\n } catch {\n /* quota */\n }\n}\n\nfunction ariaSort(key: SortKey): 'ascending' | 'descending' | 'none' {\n if (sortKey.value !== key) return 'none';\n return sortDir.value === 'asc' ? 'ascending' : 'descending';\n}\n\nfunction modifiedMs(n: FileNode): number | null {\n const v = n.last_modified;\n if (!v) return null;\n return v * (v < 1e12 ? 1000 : 1);\n}\n\nconst rows = computed(() => {\n const key = sortKey.value;\n if (!key) return props.files;\n // Virtual rows (.trash / storage drives) stay pinned on top in their\n // original order; only real entries take part in the sort.\n const pinned: FileNode[] = [];\n const rest: FileNode[] = [];\n for (const n of props.files) (isPinnedSpecial(n) ? pinned : rest).push(n);\n const dir = sortDir.value === 'asc' ? 1 : -1;\n rest.sort((a, b) => {\n if (key === 'name') {\n return (\n dir *\n a.basename.localeCompare(b.basename, undefined, { numeric: true, sensitivity: 'base' })\n );\n }\n if (key === 'size') return dir * ((a.size ?? -1) - (b.size ?? -1));\n const am = modifiedMs(a);\n const bm = modifiedMs(b);\n // Undated rows go last in both directions so date groups stay clean.\n if (am == null && bm == null) return 0;\n if (am == null) return 1;\n if (bm == null) return -1;\n return dir * (am - bm);\n });\n return [...pinned, ...rest];\n});\n\n// ------------------------------------------------------------------\n// Date grouping — only while sorted by modified date. Rows are split\n// into contiguous segments so the row markup below stays untouched.\n// ------------------------------------------------------------------\n\ninterface Segment {\n id: string;\n /** null = no header (ungrouped mode, or the pinned virtual rows). */\n label: string | null;\n nodes: FileNode[];\n}\n\nconst monthFmt = computed(\n () =>\n new Intl.DateTimeFormat(props.locale === 'tr' ? 'tr-TR' : 'en-US', {\n month: 'long',\n year: 'numeric',\n }),\n);\n\nfunction bucketFor(ms: number | null): { id: string; label: string } {\n if (ms == null) return { id: 'none', label: t('group.no_date') };\n const d = new Date(ms);\n const now = new Date();\n const dayStart = (x: Date) => new Date(x.getFullYear(), x.getMonth(), x.getDate()).getTime();\n const today = dayStart(now);\n const day = dayStart(d);\n const DAY = 86_400_000;\n // Future stamps (clock skew) read best as \"today\".\n if (day >= today) return { id: 'today', label: t('group.today') };\n if (day === today - DAY) return { id: 'yesterday', label: t('group.yesterday') };\n if (day > today - 7 * DAY) return { id: 'week', label: t('group.this_week') };\n if (d.getFullYear() === now.getFullYear() && d.getMonth() === now.getMonth()) {\n return { id: 'month', label: t('group.this_month') };\n }\n return { id: `m-${d.getFullYear()}-${d.getMonth()}`, label: monthFmt.value.format(d) };\n}\n\nconst segments = computed<Segment[]>(() => {\n const list = rows.value;\n if (sortKey.value !== 'modified') return [{ id: 'all', label: null, nodes: list }];\n const out: Segment[] = [];\n let cur: Segment | null = null;\n for (const n of list) {\n const b = isPinnedSpecial(n) ? { id: 'pinned', label: null } : bucketFor(modifiedMs(n));\n if (!cur || cur.id !== b.id) {\n cur = { id: b.id, label: b.label, nodes: [] };\n out.push(cur);\n }\n cur.nodes.push(n);\n }\n return out;\n});\n</script>\n\n<template>\n <!-- wiring:c4 — grid semantics: container role + localized labels; rows\n carry aria-selected below. Structure/layout untouched. -->\n <div\n class=\"fe-list\"\n :class=\"{ 'is-loading': loading, 'has-star-col': !!apiBase || apiBase === '' }\"\n role=\"grid\"\n :aria-label=\"t('list.aria')\"\n :aria-busy=\"loading ? 'true' : undefined\"\n >\n <div class=\"fe-list__head\" role=\"row\">\n <div class=\"fe-list__col fe-list__col--star\" role=\"columnheader\" :aria-label=\"t('col.star') /* wiring:c4 */\"></div>\n <div class=\"fe-list__col fe-list__col--name\" role=\"columnheader\" :aria-sort=\"ariaSort('name')\">\n <button type=\"button\" class=\"fe-list__sort\" :title=\"t('col.sort')\" @click=\"toggleSort('name')\">\n {{ t('col.name') }}\n <span v-if=\"sortKey === 'name'\" class=\"fe-list__sort-arrow\" aria-hidden=\"true\">{{ sortDir === 'asc' ? '↑' : '↓' }}</span>\n </button>\n </div>\n <div class=\"fe-list__col fe-list__col--size\" role=\"columnheader\" :aria-sort=\"ariaSort('size')\">\n <button type=\"button\" class=\"fe-list__sort\" :title=\"t('col.sort')\" @click=\"toggleSort('size')\">\n {{ t('col.size') }}\n <span v-if=\"sortKey === 'size'\" class=\"fe-list__sort-arrow\" aria-hidden=\"true\">{{ sortDir === 'asc' ? '↑' : '↓' }}</span>\n </button>\n </div>\n <div class=\"fe-list__col fe-list__col--mod\" role=\"columnheader\" :aria-sort=\"ariaSort('modified')\">\n <button type=\"button\" class=\"fe-list__sort\" :title=\"t('col.sort')\" @click=\"toggleSort('modified')\">\n {{ t('col.modified') }}\n <span v-if=\"sortKey === 'modified'\" class=\"fe-list__sort-arrow\" aria-hidden=\"true\">{{ sortDir === 'asc' ? '↑' : '↓' }}</span>\n </button>\n </div>\n </div>\n <div class=\"fe-list__body\" role=\"rowgroup\">\n <template v-for=\"seg in segments\" :key=\"seg.id\">\n <div v-if=\"seg.label\" class=\"fe-list__group\" role=\"presentation\">{{ seg.label }}</div>\n <div\n v-for=\"n in seg.nodes\"\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 'is-droptarget': dropTargetPath === n.path /* wiring:c4 */,\n }\"\n role=\"row\"\n tabindex=\"0\"\n :aria-selected=\"isSelected(n) ? 'true' : 'false'\"\n :aria-label=\"nodeDisplayName(n) /* wiring:c4 */\"\n :data-fe-path=\"n.path /* wiring:d1 — orta-tık yeni sekme delegasyonu */\"\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 @dragleave=\"onItemDragLeave(n) /* wiring:c4 */\"\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\" role=\"gridcell\" @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 :auth-credentials=\"authCredentials\"\n compact\n @change=\"(val: boolean) => emit('star-change', n, val)\"\n />\n </div>\n <div class=\"fe-list__col fe-list__col--name\" role=\"gridcell\">\n <span v-if=\"specialEmojiFor(n)\" class=\"fe-list__icon\" aria-hidden=\"true\">{{ specialEmojiFor(n) }}</span>\n <!-- eslint-disable-next-line vue/no-v-html — static markup from lib/fileIcons -->\n <span v-else class=\"fe-list__icon fe-list__icon--svg\" aria-hidden=\"true\" v-html=\"fileIconSvg(n)\"></span>\n <div class=\"fe-list__name-wrap\">\n <span class=\"fe-list__name\" :title=\"n.basename\">\n {{ nodeDisplayName(n) }}\n <!-- bul:s3 — content-match badge -->\n <span v-if=\"rowInContent(n)\" class=\"fe-list__badge\">{{ t('search.in_content') }}</span>\n </span>\n <span\n v-if=\"showParentPath\"\n class=\"fe-list__parent\"\n :title=\"parentDir(n.path)\"\n >{{ parentDir(n.path) || '—' }}</span>\n <!-- bul:s3 — content snippet («» → <mark> via TEXT segments, no innerHTML) -->\n <span v-if=\"rowSnippet(n)\" class=\"fe-list__snippet\">\n <template v-for=\"(seg, si) in snippetSegments(rowSnippet(n))\" :key=\"si\">\n <mark v-if=\"seg.match\" class=\"fe-list__mark\">{{ seg.text }}</mark>\n <template v-else>{{ seg.text }}</template>\n </template>\n </span>\n </div>\n </div>\n <div class=\"fe-list__col fe-list__col--size\" role=\"gridcell\">\n {{ formatSize(n.size) }}\n </div>\n <div class=\"fe-list__col fe-list__col--mod\" role=\"gridcell\">\n {{ displayDate(n.last_modified) }}\n </div>\n </div>\n </template>\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 { ref } from 'vue'; /* wiring:c4 */\nimport type { FileNode } from '../types/FileNode';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\nimport { fileIconSvg } from '../lib/fileIcons';\nimport { snippetSegments } from '../lib/snippet'; /* bul:s3 */\nimport { applyDragGhost } from '../lib/dragGhost'; /* wiring:c4 */\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 /** Authenticated thumb resolver (useThumbs.src). Raw `thumb_url` is\n * root-relative and unauthenticated — a bare <img src> only works for the\n * native same-origin SPA, so embedded hosts NEED this. null = icon. */\n thumbSrc?: (n: FileNode) => string | null;\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\n// Prefer the authenticated resolver when the host wired one; otherwise fall\n// back to the raw URL (legacy same-origin behavior).\nfunction thumbOf(n: FileNode): string | null {\n return props.thumbSrc ? props.thumbSrc(n) : (n.thumb_url ?? null);\n}\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 /* wiring:c4 — custom ghost (name + multi-select count badge), visual only. */\n applyDragGhost(\n ev,\n nodeDisplayName(n),\n props.selected.has(n.path) ? props.selected.size : 1,\n );\n emit('item-drag-start', n, ev);\n}\n\n/* wiring:c4 — droptarget highlight, mirrors ListView (visual layer only). */\nconst dropTargetPath = ref<string | null>(null);\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 dropTargetPath.value = n.path; /* wiring:c4 */\n}\n\n/* wiring:c4 */\nfunction onItemDragLeave(n: FileNode) {\n if (dropTargetPath.value === n.path) dropTargetPath.value = null;\n}\n\nfunction onItemDrop(n: FileNode, ev: DragEvent) {\n dropTargetPath.value = null; /* wiring:c4 */\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\n// Special rows keep their emoji (trash/storage are not file-TYPE icons);\n// everything else renders the SVG icon set from lib/fileIcons.\nfunction specialEmojiFor(n: FileNode): string | null {\n if (n.basename === '.trash') return '🗑';\n if (n.mime_type === 'inode/storage') return '💾';\n if (n.type === 'dir' && n.e2e === true) return '🔒'; /* wiring:e2 — şifreli klasör rozeti */\n return null;\n}\n\n/* bul:s3 — search-result enrichment, same presence-gating as ListView:\n * only search hits carry `snippet`, so normal listings render nothing. */\nfunction cardSnippet(n: FileNode): string {\n const s = (n as Record<string, unknown>).snippet;\n return typeof s === 'string' ? s : '';\n}\n\n// Plain-text form for the title attribute — same parser as the render\n// path, guillemets dropped (no separate sanitize route).\nfunction snippetTitle(snippet: string): string {\n return snippetSegments(snippet)\n .map((seg) => seg.text)\n .join('');\n}\n</script>\n\n<template>\n <!-- wiring:c4 — listbox semantics (multi-selectable cards as options);\n localized label + busy state. Structure/layout untouched. -->\n <div\n class=\"fe-grid\"\n :class=\"{ 'is-loading': loading }\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n :aria-label=\"t('grid.aria')\"\n :aria-busy=\"loading ? 'true' : undefined\"\n >\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 'is-droptarget': dropTargetPath === n.path /* wiring:c4 */,\n }\"\n tabindex=\"0\"\n role=\"option\"\n :aria-selected=\"isSelected(n) ? 'true' : 'false'\"\n :aria-label=\"nodeDisplayName(n) /* wiring:c4 */\"\n :data-fe-path=\"n.path /* wiring:d1 — orta-tık yeni sekme delegasyonu */\"\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 @dragleave=\"onItemDragLeave(n) /* wiring:c4 */\"\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=\"thumbOf(n)\"\n :src=\"thumbOf(n)!\"\n :alt=\"n.basename\"\n loading=\"lazy\"\n draggable=\"false\"\n />\n <span v-else-if=\"specialEmojiFor(n)\" class=\"fe-grid__icon\">{{ specialEmojiFor(n) }}</span>\n <!-- eslint-disable-next-line vue/no-v-html — static markup from lib/fileIcons -->\n <span v-else class=\"fe-grid__icon fe-grid__icon--svg\" v-html=\"fileIconSvg(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 <!-- bul:s3 — content snippet («» → <mark> via TEXT segments, no innerHTML) -->\n <div v-if=\"cardSnippet(n)\" class=\"fe-grid__snippet\" :title=\"snippetTitle(cardSnippet(n))\">\n <template v-for=\"(seg, si) in snippetSegments(cardSnippet(n))\" :key=\"si\">\n <mark v-if=\"seg.match\" class=\"fe-grid__mark\">{{ seg.text }}</mark>\n <template v-else>{{ seg.text }}</template>\n </template>\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// (unscoped styles by design — see base.css wiring:d2 block; SFC scoped\n// styles are banned for webcomponent data-v hash mismatch reasons.)\n/**\n * GalleryView — wiring:d2. Third view mode: large-thumbnail gallery for\n * visual browsing (photos/videos). Derived from GridView (same props/emits,\n * same listbox a11y, same selection/drag/touch contract) but renders big\n * square tiles: thumbnail (or SVG file-type icon fallback) with the name\n * below and size+date revealed on hover/focus. GridView itself is untouched.\n */\nimport { ref } from 'vue';\nimport type { FileNode } from '../types/FileNode';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\nimport { fileIconSvg } from '../lib/fileIcons';\nimport { applyDragGhost } from '../lib/dragGhost';\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 /** Authenticated thumb resolver (useThumbs.src) — same contract as\n * GridView: raw `thumb_url` is root-relative and unauthenticated, so\n * embedded hosts NEED this. null = icon fallback. */\n thumbSrc?: (n: FileNode) => string | null;\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 thumbOf(n: FileNode): string | null {\n return props.thumbSrc ? props.thumbSrc(n) : (n.thumb_url ?? null);\n}\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 applyDragGhost(\n ev,\n nodeDisplayName(n),\n props.selected.has(n.path) ? props.selected.size : 1,\n );\n emit('item-drag-start', n, ev);\n}\n\n// Drop-target highlight — mirrors GridView (visual layer only).\nconst dropTargetPath = ref<string | null>(null);\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 dropTargetPath.value = n.path;\n}\n\nfunction onItemDragLeave(n: FileNode) {\n if (dropTargetPath.value === n.path) dropTargetPath.value = null;\n}\n\nfunction onItemDrop(n: FileNode, ev: DragEvent) {\n dropTargetPath.value = null;\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\n// Long-press → context menu, same as GridView (touch parity).\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\n// Special rows keep their emoji (trash/storage are not file-TYPE icons).\nfunction specialEmojiFor(n: FileNode): string | null {\n if (n.basename === '.trash') return '🗑';\n if (n.mime_type === 'inode/storage') return '💾';\n if (n.type === 'dir' && n.e2e === true) return '🔒'; /* wiring:e2 — şifreli klasör rozeti */\n return null;\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\n// Hover meta line: size for files, entry count (when known) for dirs.\nfunction metaFor(n: FileNode): string {\n const date = displayDate(n.last_modified);\n const size = n.type === 'dir' ? '' : formatSize(n.size);\n return [size, date].filter((s) => !!s).join(' · ');\n}\n</script>\n\n<template>\n <div\n class=\"fe-gal\"\n :class=\"{ 'is-loading': loading }\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n :aria-label=\"t('gallery.aria')\"\n :aria-busy=\"loading ? 'true' : undefined\"\n >\n <div\n v-for=\"n in files\"\n :key=\"n.path\"\n class=\"fe-gal__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 'is-droptarget': dropTargetPath === n.path,\n }\"\n tabindex=\"0\"\n role=\"option\"\n :aria-selected=\"isSelected(n) ? 'true' : 'false'\"\n :aria-label=\"nodeDisplayName(n)\"\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 @dragleave=\"onItemDragLeave(n)\"\n @drop=\"onItemDrop(n, $event)\"\n @touchstart.passive=\"onTouchStart(n, $event)\"\n @touchend=\"cancelPress\"\n @touchmove=\"cancelPress\"\n >\n <div class=\"fe-gal__thumb\">\n <!-- draggable=\"false\" for the same reason as GridView: HTML5 image\n drag adds a 'Files' MIME to dataTransfer, which would trip the\n parent's upload handler on internal drags. -->\n <img\n v-if=\"thumbOf(n)\"\n :src=\"thumbOf(n)!\"\n :alt=\"n.basename\"\n loading=\"lazy\"\n draggable=\"false\"\n />\n <span v-else-if=\"specialEmojiFor(n)\" class=\"fe-gal__icon\">{{ specialEmojiFor(n) }}</span>\n <!-- eslint-disable-next-line vue/no-v-html — static markup from lib/fileIcons -->\n <span v-else class=\"fe-gal__icon fe-gal__icon--svg\" v-html=\"fileIconSvg(n)\"></span>\n <div class=\"fe-gal__meta\" aria-hidden=\"true\">\n <span v-if=\"metaFor(n)\" class=\"fe-gal__meta-line\">{{ metaFor(n) }}</span>\n <span\n v-if=\"showParentPath && parentDir(n.path)\"\n class=\"fe-gal__meta-line fe-gal__meta-line--path\"\n :title=\"parentDir(n.path)\"\n >{{ parentDir(n.path) }}</span>\n </div>\n </div>\n <div class=\"fe-gal__label\" :title=\"n.basename\">\n {{ nodeDisplayName(n) }}\n </div>\n </div>\n <div v-if=\"!loading && files.length === 0\" class=\"fe-gal__empty\">\n {{ t('empty.folder') }}\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n/**\n * UploadProgress — renderless upload publisher (wiring:c3).\n *\n * Historically this drew its own floating bottom-right footer. Since the\n * unified operations center it renders NOTHING: it reconciles the host's\n * `jobs` list into the shared useOperations store, and the visible UI is\n * OperationsCenter's badge + panel. The original emit contract is kept —\n * cancel/dismiss (and the new retry) still bubble to the host, which owns\n * the actual upload machinery. Mount it exactly as before; just pass the\n * store via `center`.\n */\nimport { watch } from 'vue';\nimport type { UploadJob } from '../composables/useUploadChunked';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport type { OperationsStore, OperationStatus } from '../composables/useOperations';\n\nconst props = defineProps<{\n jobs: UploadJob[];\n /** Kept for mount compatibility — strings now render in OperationsCenter. */\n locale: LocaleCode;\n center: OperationsStore;\n}>();\n\nconst emit = defineEmits<{\n (e: 'cancel', job: UploadJob): void;\n (e: 'dismiss', job: UploadJob): void;\n (e: 'retry', job: UploadJob): void;\n}>();\n\nfunction mapStatus(s: UploadJob['status']): OperationStatus {\n if (s === 'done') return 'done';\n if (s === 'error') return 'error';\n if (s === 'aborted') return 'aborted';\n return 'running'; // pending | initializing | uploading | finalizing\n}\n\nwatch(\n () => props.jobs,\n (jobs) => {\n props.center.sync(\n 'upload',\n jobs.map((j) => ({\n input: {\n id: j.id,\n kind: 'upload' as const,\n name: j.file.name,\n percent: j.totalBytes > 0 || j.status === 'done' ? j.percent : null,\n status: mapStatus(j.status),\n error: j.error ?? null,\n uploadedBytes: j.uploadedBytes,\n totalBytes: j.totalBytes,\n cancellable: j.status === 'uploading' || j.status === 'initializing',\n retryable: j.status === 'error',\n },\n actions: {\n cancel: () => emit('cancel', j),\n dismiss: () => emit('dismiss', j),\n retry: () => emit('retry', j),\n },\n })),\n );\n },\n { immediate: true },\n);\n</script>\n\n<template>\n <i v-if=\"false\" />\n</template>\n","<script setup lang=\"ts\">\n/**\n * PendingOpsTray — renderless ops-queue publisher (wiring:c3).\n *\n * Historically a bottom-left toast list for queued copy/move/delete. Since\n * the unified operations center it renders NOTHING: it reconciles the\n * usePendingOps rows into the shared useOperations store; OperationsCenter\n * draws them. Terminal-state lingering (\"bitti\" flash → history) and sticky\n * errors are handled by the store — note usePendingOps sweeps terminal rows\n * after its RETAIN window, which the store treats as \"move to history\"\n * (errors stay pinned until the user dismisses them).\n *\n * Queue ops are not client-retryable: the normalized PendingOp no longer\n * carries the source list, so a failed op only offers dismiss.\n */\nimport { watch } from 'vue';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport type { PendingOp } from '../composables/usePendingOps';\nimport type { OperationsStore, OperationStatus } from '../composables/useOperations';\n\nconst props = defineProps<{\n ops: PendingOp[];\n /** Kept for mount compatibility — strings now render in OperationsCenter. */\n locale: LocaleCode;\n center: OperationsStore;\n}>();\n\nconst emit = defineEmits<{\n (e: 'dismiss', id: number): void;\n}>();\n\nfunction mapStatus(op: PendingOp): OperationStatus {\n if (op.status === 'done') return 'done';\n if (op.status === 'error') return 'error';\n return 'running'; // pending | running\n}\n\nfunction percentOf(op: PendingOp): number | null {\n if (op.status === 'done') return 100;\n if (op.progress_total <= 0) return null;\n return Math.min(100, Math.round((op.progress_done / op.progress_total) * 100));\n}\n\nwatch(\n () => props.ops,\n (ops) => {\n props.center.sync(\n 'ops',\n ops.map((op) => ({\n input: {\n id: op.id,\n kind: op.op_type,\n name: op.target_path || op.source_dir || '',\n percent: percentOf(op),\n status: mapStatus(op),\n error: op.error_message,\n queued: op.status === 'pending',\n doneCount: op.progress_done,\n totalCount: op.progress_total,\n cancellable: false,\n retryable: false,\n },\n actions: {\n dismiss: () => emit('dismiss', op.id),\n },\n })),\n );\n },\n { immediate: true },\n);\n</script>\n\n<template>\n <i v-if=\"false\" />\n</template>\n","<script setup lang=\"ts\">\n/**\n * InspectorPanel — koru:k1 details (\"Ayrıntılar\") side panel.\n *\n * Rendered as a flex sibling of `.fe__body` (right side, ~300px). In\n * `fe--narrow` embeds it becomes a full-size overlay with its own close\n * button (Esc handled by FileExplorer's shortcut chain).\n *\n * Sections:\n * - Genel : icon/thumb, name, path (copy), size, modified, mime, etag.\n * Multi-select → \"N items, total X\" summary; no selection →\n * current-folder summary.\n * - Sürümler : version history via GET /api/files/versions?node_id=…\n * + restore (with optional snapshot-current) + snapshot-now.\n * The section hides silently when the backend gates the\n * endpoint (401/403) or doesn't ship it (404).\n * - İzinler : effective RBAC level badge + \"manage\" (opens the existing\n * PermissionsModal through the host). Only when ACL is\n * enforced on the storage (perm is a non-empty string).\n * - Paylaşımlar: existing share links (GET /api/files/share?path=…) with\n * copy buttons. Hidden silently when the list call fails\n * (viewer-level users get 403 by design).\n *\n * The panel is mounted with v-if by the host — closed state leaves zero DOM.\n */\nimport { computed, ref, watch } from 'vue';\nimport type { FileApi, NodeVersion } from '../composables/useFileApi';\nimport type { FileNode, ShareInfo } from '../types/FileNode';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\nimport { fileIconSvg } from '../lib/fileIcons';\n\nconst props = defineProps<{\n api: FileApi;\n /** Current selection (empty array → current-folder summary). */\n nodes: FileNode[];\n /** Display label of the folder being viewed (for the no-selection state). */\n dirLabel: string;\n /** Number of entries in the folder being viewed. */\n dirCount: number;\n /** RBAC effective level of the current dir ('' = ACL not enforced). */\n dirPerm?: string;\n locale: LocaleCode;\n /** Narrow/embed mode → full-size overlay presentation. */\n narrow?: boolean;\n /** Authenticated thumbnail resolver (useThumbs.src). Optional. */\n thumbSrc?: (n: FileNode) => string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n (e: 'manage-permissions', node: FileNode): void;\n (e: 'toast', message: string): void;\n /** Fired after a successful restore/snapshot so the host can reload. */\n (e: 'changed'): void;\n}>();\n\nconst { t, formatSize, nodeDisplayName } = useLocale(() => props.locale);\n\n// ── selection shape ──────────────────────────────────────────────────\nconst single = computed<FileNode | null>(() =>\n props.nodes.length === 1 ? props.nodes[0] : null,\n);\nconst isMulti = computed(() => props.nodes.length > 1);\nconst isFile = computed(() => single.value?.type === 'file');\nconst nodeId = computed<number | null>(() =>\n typeof single.value?.id === 'number' ? (single.value.id as number) : null,\n);\nconst multiTotal = computed(() =>\n props.nodes.reduce((acc, n) => acc + (typeof n.size === 'number' ? n.size : 0), 0),\n);\nconst etag = computed<string | null>(() => {\n const v = single.value?.etag;\n return typeof v === 'string' && v !== '' ? v : null;\n});\nconst thumb = computed<string | null>(() =>\n single.value && isFile.value && props.thumbSrc ? props.thumbSrc(single.value) : null,\n);\n\nfunction shortHash(h: string): string {\n return h.length > 12 ? `${h.slice(0, 12)}…` : h;\n}\n\nfunction formatDate(ms: number | undefined): string {\n if (!ms) return '—';\n try {\n return new Date(ms).toLocaleString(props.locale === 'en' ? 'en-GB' : 'tr-TR', {\n dateStyle: 'medium',\n timeStyle: 'short',\n });\n } catch {\n return new Date(ms).toISOString();\n }\n}\n\nfunction formatDateStr(s: string | undefined | null): string {\n if (!s) return '—';\n const ms = Date.parse(s);\n return Number.isNaN(ms) ? s : formatDate(ms);\n}\n\nasync function copyText(text: string): Promise<void> {\n try {\n await navigator.clipboard.writeText(text);\n emit('toast', t('inspector.copied'));\n } catch {\n emit('toast', text);\n }\n}\n\n// ── RBAC (İzinler) ───────────────────────────────────────────────────\n// Effective level for the selected item: its own perm, else the dir's.\n// A non-empty string means ACL is enforced → section shows.\nconst effectivePerm = computed<string>(() => {\n if (!single.value) return '';\n // Backends may send '' when ACL is off — widen past the declared union.\n const own = single.value.perm as string | undefined;\n if (typeof own === 'string' && own !== '') return own;\n return props.dirPerm || '';\n});\nconst canManagePerms = computed(\n () => effectivePerm.value === 'editor' || effectivePerm.value === 'owner',\n);\nfunction permLabel(level: string): string {\n return t(`inspector.perm.${level}`) === `inspector.perm.${level}`\n ? level\n : t(`inspector.perm.${level}`);\n}\n\n// ── versions state ───────────────────────────────────────────────────\ntype SectionState = 'idle' | 'loading' | 'ok' | 'hidden' | 'error';\nconst versionsState = ref<SectionState>('idle');\nconst versions = ref<NodeVersion[]>([]);\nconst confirmVersionId = ref<number | null>(null);\nconst snapshotFirst = ref(true);\nconst versionBusy = ref(false);\n\n// ── shares state ─────────────────────────────────────────────────────\nconst sharesState = ref<SectionState>('idle');\nconst shares = ref<ShareInfo[]>([]);\n\n// Race guard: only the latest refresh may write state.\nlet refreshSeq = 0;\n\nasync function refresh(): Promise<void> {\n const seq = ++refreshSeq;\n confirmVersionId.value = null;\n versions.value = [];\n shares.value = [];\n\n // Versions — single file with a backend node id only.\n if (single.value && isFile.value && nodeId.value != null) {\n versionsState.value = 'loading';\n void loadVersions(seq);\n } else {\n versionsState.value = 'hidden';\n }\n\n // Shares — any single selection (files and folders both shareable).\n if (single.value) {\n sharesState.value = 'loading';\n const path = single.value.path;\n try {\n const { shares: list } = await props.api.listShares(path);\n if (seq !== refreshSeq) return;\n shares.value = Array.isArray(list) ? list : [];\n sharesState.value = 'ok';\n } catch {\n if (seq !== refreshSeq) return;\n // 403 = viewer-level user (by design), anything else — auxiliary\n // info, hide silently rather than alarm.\n sharesState.value = 'hidden';\n }\n } else {\n sharesState.value = 'hidden';\n }\n}\n\nasync function loadVersions(seq: number): Promise<void> {\n const id = nodeId.value;\n if (id == null) return;\n try {\n const list = await props.api.listVersions(id);\n if (seq !== refreshSeq) return;\n versions.value = list;\n versionsState.value = 'ok';\n } catch (err) {\n if (seq !== refreshSeq) return;\n const status = (err as { status?: number }).status;\n // Gated (401/403) or absent (404) endpoint → section silently hidden.\n if (status === 401 || status === 403 || status === 404) {\n versionsState.value = 'hidden';\n } else {\n versionsState.value = 'error';\n }\n }\n}\n\nfunction askRestore(v: NodeVersion): void {\n confirmVersionId.value = v.id;\n snapshotFirst.value = true;\n}\n\nasync function confirmRestore(v: NodeVersion): Promise<void> {\n const id = nodeId.value;\n if (id == null || versionBusy.value) return;\n versionBusy.value = true;\n try {\n await props.api.restoreVersion(id, v.id, snapshotFirst.value);\n emit('toast', t('inspector.versions.restored'));\n confirmVersionId.value = null;\n emit('changed');\n await loadVersions(++refreshSeq);\n } catch (err) {\n emit('toast', (err as Error).message);\n } finally {\n versionBusy.value = false;\n }\n}\n\nasync function takeSnapshot(): Promise<void> {\n const id = nodeId.value;\n if (id == null || versionBusy.value) return;\n versionBusy.value = true;\n try {\n await props.api.snapshotVersion(id);\n emit('toast', t('inspector.versions.snapshotted'));\n await loadVersions(++refreshSeq);\n } catch (err) {\n const status = (err as { status?: number }).status;\n // Older backends don't ship POST /versions/snapshot yet.\n if (status === 404 || status === 405 || status === 501) {\n emit('toast', t('inspector.versions.unsupported'));\n } else {\n emit('toast', (err as Error).message);\n }\n } finally {\n versionBusy.value = false;\n }\n}\n\nwatch(\n () => props.nodes.map((n) => n.path).join('\u0000'),\n () => void refresh(),\n { immediate: true },\n);\n\n/* === calisma:d3 — Yorumlar (node comments) ===\n * Flat chronological thread per node (files AND folders — every backend\n * row carries an id). Loaded through its own watcher + seq guard so the\n * existing refresh() stays untouched. Add/delete are NOT optimistic: the\n * list re-fetches after each successful API round-trip. The section hides\n * silently when the backend gates (401/403) or lacks (404) the endpoint.\n */\nimport type { NodeComment } from '../composables/useFileApi';\n\nconst commentsState = ref<SectionState>('hidden');\nconst comments = ref<NodeComment[]>([]);\nconst commentDraft = ref('');\nconst commentBusy = ref(false);\nconst commentNodeId = computed<number | null>(() =>\n typeof single.value?.id === 'number' ? (single.value.id as number) : null,\n);\nlet commentSeq = 0;\n\nasync function loadComments(): Promise<void> {\n const seq = ++commentSeq;\n const id = commentNodeId.value;\n if (id == null) {\n commentsState.value = 'hidden';\n comments.value = [];\n return;\n }\n commentsState.value = comments.value.length > 0 ? 'ok' : 'loading';\n try {\n const list = await props.api.listComments(id);\n if (seq !== commentSeq) return;\n comments.value = list;\n commentsState.value = 'ok';\n } catch (err) {\n if (seq !== commentSeq) return;\n comments.value = [];\n const status = (err as { status?: number }).status;\n commentsState.value =\n status === 401 || status === 403 || status === 404 ? 'hidden' : 'error';\n }\n}\n\nasync function sendComment(): Promise<void> {\n const id = commentNodeId.value;\n const body = commentDraft.value.trim();\n if (id == null || body === '' || commentBusy.value) return;\n commentBusy.value = true;\n try {\n await props.api.addComment(id, body);\n commentDraft.value = '';\n await loadComments();\n } catch (err) {\n emit('toast', (err as Error).message);\n } finally {\n commentBusy.value = false;\n }\n}\n\nasync function removeComment(c: NodeComment): Promise<void> {\n if (commentBusy.value) return;\n commentBusy.value = true;\n try {\n await props.api.deleteComment(c.id);\n await loadComments();\n } catch (err) {\n emit('toast', (err as Error).message);\n } finally {\n commentBusy.value = false;\n }\n}\n\n/** Relative \"3 minutes ago\" stamp via Intl (locale-aware, no i18n keys). */\nfunction relativeTime(iso: string): string {\n const ms = Date.parse(iso);\n if (Number.isNaN(ms)) return iso;\n const diffS = Math.round((ms - Date.now()) / 1000);\n const abs = Math.abs(diffS);\n const units: Array<[Intl.RelativeTimeFormatUnit, number]> = [\n ['year', 31536000],\n ['month', 2592000],\n ['day', 86400],\n ['hour', 3600],\n ['minute', 60],\n ];\n try {\n const rtf = new Intl.RelativeTimeFormat(\n props.locale === 'en' ? 'en' : 'tr',\n { numeric: 'auto' },\n );\n for (const [unit, secs] of units) {\n if (abs >= secs) return rtf.format(Math.trunc(diffS / secs), unit);\n }\n return rtf.format(diffS, 'second');\n } catch {\n return formatDateStr(iso);\n }\n}\n\nwatch(\n () => commentNodeId.value,\n () => {\n comments.value = [];\n commentDraft.value = '';\n void loadComments();\n },\n { immediate: true },\n);\n/* === /calisma:d3 === */\n</script>\n\n<template>\n <aside\n class=\"fe-inspector\"\n :class=\"{ 'fe-inspector--overlay': narrow }\"\n role=\"complementary\"\n :aria-label=\"t('inspector.title')\"\n >\n <header class=\"fe-inspector__head\">\n <h2 class=\"fe-inspector__title\">{{ t('inspector.title') }}</h2>\n <button\n type=\"button\"\n class=\"fe-inspector__close\"\n :title=\"t('inspector.close')\"\n :aria-label=\"t('inspector.close')\"\n @click=\"emit('close')\"\n >×</button>\n </header>\n\n <div class=\"fe-inspector__scroll\">\n <!-- ══ Genel ══ -->\n <section class=\"fe-inspector__section\">\n <h3 class=\"fe-inspector__heading\">{{ t('inspector.section.general') }}</h3>\n\n <!-- Multi selection → summary -->\n <div v-if=\"isMulti\" class=\"fe-inspector__hero\">\n <span class=\"fe-inspector__bigicon\" v-html=\"fileIconSvg({ type: 'dir' })\"></span>\n <p class=\"fe-inspector__name\">\n {{ t('inspector.items_summary', { n: nodes.length, size: formatSize(multiTotal) }) }}\n </p>\n </div>\n\n <!-- Single selection → full meta -->\n <template v-else-if=\"single\">\n <div class=\"fe-inspector__hero\">\n <img\n v-if=\"thumb\"\n class=\"fe-inspector__thumb\"\n :src=\"thumb\"\n alt=\"\"\n aria-hidden=\"true\"\n />\n <span\n v-else\n class=\"fe-inspector__bigicon\"\n v-html=\"fileIconSvg(single)\"\n ></span>\n <p class=\"fe-inspector__name\" :title=\"single.basename\">\n {{ nodeDisplayName(single) }}\n </p>\n </div>\n\n <dl class=\"fe-inspector__meta\">\n <div class=\"fe-inspector__row\">\n <dt>{{ t('inspector.path') }}</dt>\n <dd class=\"fe-inspector__pathcell\">\n <span class=\"fe-inspector__path\" :title=\"single.path\">{{ single.path }}</span>\n <button\n type=\"button\"\n class=\"fe-inspector__copy\"\n :title=\"t('inspector.copy')\"\n :aria-label=\"t('inspector.copy')\"\n @click=\"copyText(single.path)\"\n >⧉</button>\n </dd>\n </div>\n <div v-if=\"isFile\" class=\"fe-inspector__row\">\n <dt>{{ t('inspector.size') }}</dt>\n <dd>{{ formatSize(typeof single.size === 'number' ? single.size : null) }}</dd>\n </div>\n <div class=\"fe-inspector__row\">\n <dt>{{ t('inspector.modified') }}</dt>\n <dd>{{ formatDate(single.last_modified) }}</dd>\n </div>\n <div v-if=\"isFile && single.mime_type\" class=\"fe-inspector__row\">\n <dt>{{ t('inspector.mime') }}</dt>\n <dd class=\"fe-inspector__mime\">{{ single.mime_type }}</dd>\n </div>\n <div v-if=\"etag\" class=\"fe-inspector__row\">\n <dt>{{ t('inspector.etag') }}</dt>\n <dd class=\"fe-inspector__pathcell\">\n <span class=\"fe-inspector__path\" :title=\"etag\">{{ shortHash(etag) }}</span>\n <button\n type=\"button\"\n class=\"fe-inspector__copy\"\n :title=\"t('inspector.copy')\"\n :aria-label=\"t('inspector.copy')\"\n @click=\"copyText(etag)\"\n >⧉</button>\n </dd>\n </div>\n </dl>\n </template>\n\n <!-- No selection → current folder summary -->\n <div v-else class=\"fe-inspector__hero\">\n <span class=\"fe-inspector__bigicon\" v-html=\"fileIconSvg({ type: 'dir' })\"></span>\n <p class=\"fe-inspector__name\" :title=\"dirLabel\">{{ dirLabel }}</p>\n <p class=\"fe-inspector__sub\">{{ t('inspector.folder_items', { n: dirCount }) }}</p>\n </div>\n </section>\n\n <!-- ══ Sürümler ══ -->\n <section\n v-if=\"versionsState === 'ok' || versionsState === 'error'\"\n class=\"fe-inspector__section\"\n >\n <h3 class=\"fe-inspector__heading\">{{ t('inspector.section.versions') }}</h3>\n\n <p v-if=\"versionsState === 'error'\" class=\"fe-inspector__empty\">\n {{ t('inspector.error') }}\n </p>\n <template v-else>\n <p v-if=\"versions.length === 0\" class=\"fe-inspector__empty\">\n {{ t('inspector.versions.empty') }}\n </p>\n <ul v-else class=\"fe-inspector__versions\">\n <li v-for=\"v in versions\" :key=\"v.id\" class=\"fe-inspector__version\">\n <div class=\"fe-inspector__version-main\">\n <span class=\"fe-inspector__version-n\">\n {{ t('inspector.versions.v', { n: v.version_n }) }}\n </span>\n <span class=\"fe-inspector__version-meta\">\n {{ formatDateStr(v.created_at) }} · {{ formatSize(v.size) }}\n </span>\n </div>\n <div v-if=\"confirmVersionId === v.id\" class=\"fe-inspector__confirm\">\n <p class=\"fe-inspector__confirm-q\">{{ t('inspector.versions.restore_confirm') }}</p>\n <label class=\"fe-inspector__check\">\n <input v-model=\"snapshotFirst\" type=\"checkbox\" />\n {{ t('inspector.versions.snapshot_current') }}\n </label>\n <div class=\"fe-inspector__confirm-actions\">\n <button\n type=\"button\"\n class=\"fe-btn fe-btn--primary fe-btn--sm\"\n :disabled=\"versionBusy\"\n @click=\"confirmRestore(v)\"\n >{{ t('inspector.versions.confirm') }}</button>\n <button\n type=\"button\"\n class=\"fe-btn fe-btn--sm\"\n :disabled=\"versionBusy\"\n @click=\"confirmVersionId = null\"\n >{{ t('inspector.versions.cancel') }}</button>\n </div>\n </div>\n <button\n v-else\n type=\"button\"\n class=\"fe-btn fe-btn--sm\"\n :disabled=\"versionBusy\"\n @click=\"askRestore(v)\"\n >{{ t('inspector.versions.restore') }}</button>\n </li>\n </ul>\n <button\n type=\"button\"\n class=\"fe-btn fe-btn--sm fe-inspector__snapshot\"\n :disabled=\"versionBusy\"\n @click=\"takeSnapshot\"\n >{{ t('inspector.versions.take_snapshot') }}</button>\n </template>\n </section>\n\n <!-- ══ İzinler ══ -->\n <section v-if=\"single && effectivePerm\" class=\"fe-inspector__section\">\n <h3 class=\"fe-inspector__heading\">{{ t('inspector.section.permissions') }}</h3>\n <div class=\"fe-inspector__permrow\">\n <span\n class=\"fe-inspector__badge\"\n :class=\"`fe-inspector__badge--${effectivePerm}`\"\n >{{ permLabel(effectivePerm) }}</span>\n <button\n v-if=\"canManagePerms\"\n type=\"button\"\n class=\"fe-btn fe-btn--sm\"\n @click=\"emit('manage-permissions', single)\"\n >{{ t('inspector.perm.manage') }}</button>\n </div>\n </section>\n\n <!-- ══ Paylaşımlar ══ -->\n <section v-if=\"sharesState === 'ok'\" class=\"fe-inspector__section\">\n <h3 class=\"fe-inspector__heading\">{{ t('inspector.section.shares') }}</h3>\n <p v-if=\"shares.length === 0\" class=\"fe-inspector__empty\">\n {{ t('inspector.shares.empty') }}\n </p>\n <ul v-else class=\"fe-inspector__shares\">\n <li v-for=\"s in shares\" :key=\"s.uuid\" class=\"fe-inspector__share\">\n <span class=\"fe-inspector__share-url\" :title=\"s.url\">{{ s.url }}</span>\n <span v-if=\"s.password_pin\" class=\"fe-inspector__badge fe-inspector__badge--pin\">PIN</span>\n <span v-if=\"s.expires_at\" class=\"fe-inspector__share-exp\">\n {{ formatDateStr(s.expires_at) }}\n </span>\n <button\n type=\"button\"\n class=\"fe-inspector__copy\"\n :title=\"t('inspector.shares.copy')\"\n :aria-label=\"t('inspector.shares.copy')\"\n @click=\"copyText(s.url)\"\n >⧉</button>\n </li>\n </ul>\n </section>\n\n <!-- ══ calisma:d3 — Yorumlar ══ -->\n <section\n v-if=\"commentsState === 'ok' || commentsState === 'error'\"\n class=\"fe-inspector__section\"\n >\n <h3 class=\"fe-inspector__heading\">\n {{ t('inspector.section.comments') }}\n <span\n v-if=\"comments.length > 0\"\n class=\"fe-inspector__countbadge\"\n >{{ comments.length }}</span>\n </h3>\n\n <p v-if=\"commentsState === 'error'\" class=\"fe-inspector__empty\">\n {{ t('inspector.error') }}\n </p>\n <template v-else>\n <p v-if=\"comments.length === 0\" class=\"fe-inspector__empty\">\n {{ t('inspector.comments.empty') }}\n </p>\n <ul v-else class=\"fe-inspector__comments\">\n <li v-for=\"c in comments\" :key=\"c.id\" class=\"fe-inspector__comment\">\n <div class=\"fe-inspector__comment-top\">\n <span class=\"fe-inspector__comment-author\" :title=\"c.author_name\">\n {{ c.author_name || '—' }}\n </span>\n <span class=\"fe-inspector__comment-time\" :title=\"formatDateStr(c.created_at)\">\n {{ relativeTime(c.created_at) }}\n </span>\n <button\n v-if=\"c.can_delete\"\n type=\"button\"\n class=\"fe-inspector__comment-del\"\n :disabled=\"commentBusy\"\n :title=\"t('inspector.comments.delete')\"\n :aria-label=\"t('inspector.comments.delete')\"\n @click=\"removeComment(c)\"\n >×</button>\n </div>\n <p class=\"fe-inspector__comment-body\">{{ c.body }}</p>\n </li>\n </ul>\n <form class=\"fe-inspector__comment-form\" @submit.prevent=\"sendComment\">\n <input\n v-model=\"commentDraft\"\n type=\"text\"\n class=\"fe-inspector__comment-input\"\n maxlength=\"5000\"\n :placeholder=\"t('inspector.comments.placeholder')\"\n :aria-label=\"t('inspector.comments.placeholder')\"\n :disabled=\"commentBusy\"\n />\n <button\n type=\"submit\"\n class=\"fe-btn fe-btn--primary fe-btn--sm\"\n :disabled=\"commentBusy || commentDraft.trim() === ''\"\n >{{ t('inspector.comments.send') }}</button>\n </form>\n </template>\n </section>\n <!-- ══ /calisma:d3 ══ -->\n </div>\n </aside>\n</template>\n","<script setup lang=\"ts\">\n/**\n * CommandPalette — Ctrl/Cmd+K quick launcher.\n *\n * Sources (no new backend calls — everything comes from props):\n * 1. Files/folders of the CURRENT listing (`files` prop), filtered by a\n * tiny scored-includes matcher (no fuzzy-search dependency).\n * 2. Commands mapped 1:1 onto existing FileExplorer actions, surfaced as\n * individual emits so the host wires each to code it already has.\n * 3. Path jump: any query containing `/` offers a \"go to path\" entry.\n *\n * Keyboard: ↑/↓ move, Enter selects, Esc closes; the listener sits on the\n * document in CAPTURE phase so it wins over useKeyboardShortcuts' window\n * handler (otherwise Enter would also fire the explorer's own onOpen).\n *\n * bul:s3 additions:\n * 4. \"Everywhere\" group — ≥3-char queries also hit the global files-search\n * endpoint (debounced 250ms, max 8 rows) via the `globalSearch` prop.\n * Content matches get an \"İçerikte\" badge + a «»-highlighted snippet\n * rendered as pure text nodes (no innerHTML).\n * 5. Saved searches — localStorage-backed (`filex.saved-searches`, max 10);\n * \"save current query\" command + per-row delete.\n */\nimport { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport type { FileNode, ViewMode } from '../types/FileNode';\nimport type { GlobalSearchHit } from '../composables/useFileApi';\nimport { matchedInContent, snippetSegments } from '../lib/snippet';\nimport { useLocale } from '../composables/useLocale';\n\nconst props = defineProps<{\n open: boolean;\n locale: LocaleCode;\n files: FileNode[];\n viewMode: ViewMode;\n /** Gates the mutating commands (new folder / upload). */\n canWrite?: boolean;\n /** Gates the \"up one level\" command. */\n canGoUp?: boolean;\n /* bul:s3 — global search callback; absent = older host, group hidden. */\n globalSearch?: (q: string) => Promise<GlobalSearchHit[]>;\n /* wiring:d1 — false hides the split command (narrow embeds). */\n splitEnabled?: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n (e: 'open-node', node: FileNode): void;\n (e: 'navigate', path: string): void;\n (e: 'new-folder'): void;\n (e: 'upload'): void;\n (e: 'toggle-view'): void;\n (e: 'open-trash'): void;\n (e: 'refresh'): void;\n (e: 'go-up'): void;\n /* bul:s3 — an \"everywhere\" hit was chosen. */\n (e: 'open-hit', hit: GlobalSearchHit): void;\n /* wiring:int — settings surfaces reachable from anywhere via the palette */\n (e: 'open-theme'): void;\n (e: 'open-shortcut-settings'): void;\n (e: 'start-tour'): void;\n /* wiring:d1 — tab / split commands */\n (e: 'tab-new'): void;\n (e: 'split-toggle'): void;\n}>();\n\nconst { t, nodeDisplayName } = useLocale(() => props.locale);\n\nconst query = ref('');\nconst active = ref(0);\nconst inputEl = ref<HTMLInputElement | null>(null);\nconst listEl = ref<HTMLElement | null>(null);\n\ntype PaletteItem =\n | { kind: 'goto'; id: string; label: string; icon: string; path: string }\n | { kind: 'file'; id: string; label: string; icon: string; node: FileNode }\n | { kind: 'command'; id: string; label: string; icon: string; command: string }\n /* bul:s3 — everywhere hit / saved search / save-current-query. */\n | { kind: 'hit'; id: string; label: string; icon: string; hit: GlobalSearchHit; crumb: string; inContent: boolean; snippet: string }\n | { kind: 'saved'; id: string; label: string; icon: string; query: string }\n | { kind: 'save'; id: string; label: string; icon: string; query: string };\n\n/* bul:s3 — narrowed aliases so the template doesn't need kind-guards. */\ntype HitItem = Extract<PaletteItem, { kind: 'hit' }>;\ntype SavedGroupItem = Extract<PaletteItem, { kind: 'saved' | 'save' }>;\n\n/**\n * Scored includes: -1 = no match; otherwise earlier + prefix matches rank\n * higher and shorter names get a small edge. Good enough without a fuzzy\n * dependency.\n */\nfunction matchScore(label: string, q: string): number {\n if (!q) return 0;\n const n = label.toLocaleLowerCase();\n const s = q.toLocaleLowerCase();\n const i = n.indexOf(s);\n if (i === -1) return -1;\n let sc = 100 - Math.min(i, 50);\n if (i === 0) sc += 40;\n sc -= Math.min(n.length, 40) / 4;\n return sc;\n}\n\nconst gotoItems = computed<PaletteItem[]>(() => {\n const q = query.value.trim();\n if (!q.includes('/')) return [];\n const clean = q.replace(/^\\/+|\\/+$/g, '');\n if (!clean) return [];\n return [\n { kind: 'goto', id: `goto:${clean}`, label: `${t('palette.goto')}: ${clean}`, icon: '➜', path: clean },\n ];\n});\n\nconst fileItems = computed<PaletteItem[]>(() => {\n const q = query.value.trim();\n const scored = props.files\n .map((f) => ({ f, name: nodeDisplayName(f), s: matchScore(nodeDisplayName(f), q) }))\n .filter((r) => r.s >= 0);\n if (q) scored.sort((a, b) => b.s - a.s);\n return scored.slice(0, 8).map((r) => ({\n kind: 'file' as const,\n id: `file:${r.f.path}`,\n label: r.name,\n icon: r.f.type === 'dir' ? '📁' : '📄',\n node: r.f,\n }));\n});\n\nconst commandItems = computed<PaletteItem[]>(() => {\n const q = query.value.trim();\n const defs: Array<{ command: string; label: string; icon: string; enabled: boolean }> = [\n { command: 'new-folder', label: t('toolbar.new_folder'), icon: '📁', enabled: props.canWrite !== false },\n { command: 'upload', label: t('toolbar.upload'), icon: '⬆', enabled: props.canWrite !== false },\n { command: 'toggle-view', label: t('cmd.view_toggle'), icon: props.viewMode === 'list' ? '▦' : props.viewMode === 'grid' ? '▣' : '☰', enabled: true /* wiring:d2 — sıradaki mod ikonu (list→grid→galeri→list) */ },\n { command: 'open-trash', label: t('cmd.trash'), icon: '🗑', enabled: true },\n { command: 'refresh', label: t('toolbar.refresh'), icon: '⟳', enabled: true },\n { command: 'go-up', label: t('toolbar.go_up'), icon: '↑', enabled: props.canGoUp !== false },\n /* wiring:int */\n { command: 'open-theme', label: t('theme.menu'), icon: '🎨', enabled: true },\n { command: 'open-shortcut-settings', label: t('shortcuts.settings.menu'), icon: '⌨', enabled: true },\n { command: 'start-tour', label: t('tour.restart'), icon: '🎓', enabled: true },\n /* wiring:d1 — sekme + split */\n { command: 'tab-new', label: t('cmd.tab_new'), icon: '⧉', enabled: true },\n { command: 'split-toggle', label: t('cmd.split_toggle'), icon: '◫', enabled: props.splitEnabled !== false },\n ];\n return defs\n .filter((d) => d.enabled && matchScore(d.label, q) >= 0)\n .map((d) => ({ kind: 'command' as const, id: `cmd:${d.command}`, label: d.label, icon: d.icon, command: d.command }));\n});\n\n/* === bul:s3 — \"everywhere\" global search ================================ */\n\nconst EVERYWHERE_MIN_CHARS = 3;\nconst EVERYWHERE_LIMIT = 8;\nconst EVERYWHERE_DEBOUNCE_MS = 250;\n\nconst everywhere = ref<GlobalSearchHit[]>([]);\nconst everywhereLoading = ref(false);\nlet everywhereTimer: ReturnType<typeof setTimeout> | undefined;\nlet everywhereSeq = 0;\n\nfunction scheduleEverywhere(q: string) {\n if (everywhereTimer) clearTimeout(everywhereTimer);\n const fn = props.globalSearch;\n if (!fn || q.length < EVERYWHERE_MIN_CHARS) {\n everywhere.value = [];\n everywhereLoading.value = false;\n return;\n }\n everywhereLoading.value = true;\n everywhereTimer = setTimeout(async () => {\n const seq = ++everywhereSeq;\n try {\n const hits = await fn(q);\n if (seq !== everywhereSeq) return; // stale response — a newer query won\n everywhere.value = Array.isArray(hits) ? hits.slice(0, EVERYWHERE_LIMIT) : [];\n } catch {\n if (seq === everywhereSeq) everywhere.value = [];\n } finally {\n if (seq === everywhereSeq) everywhereLoading.value = false;\n }\n }, EVERYWHERE_DEBOUNCE_MS);\n}\n\n/** Parent-path crumb for a hit row (storage label when the hit carries one). */\nfunction hitCrumb(h: GlobalSearchHit): string {\n const rel = String(h.path ?? '').replace(/^\\/+|\\/+$/g, '');\n const slash = rel.lastIndexOf('/');\n const parent = slash === -1 ? '' : rel.slice(0, slash);\n const storage =\n (typeof h.storage === 'string' && h.storage) ||\n (typeof h.storage_name === 'string' && h.storage_name) ||\n '';\n if (storage && parent) return `${storage}/${parent}`;\n if (storage) return storage;\n return parent || '/';\n}\n\nconst hitItems = computed<HitItem[]>(() =>\n everywhere.value.map((h) => ({\n kind: 'hit' as const,\n id: `hit:${h.storage_id ?? ''}:${h.path ?? ''}:${h.id ?? ''}`,\n label: String(h.name ?? h.path ?? ''),\n icon: h.type === 'dir' ? '📁' : '📄',\n hit: h,\n crumb: hitCrumb(h),\n inContent: matchedInContent(h.matched),\n snippet: typeof h.snippet === 'string' ? h.snippet : '',\n })),\n);\n\n/* === bul:s3 — saved searches (localStorage) ============================= */\n\nconst SAVED_LS_KEY = 'filex.saved-searches';\nconst SAVED_MAX = 10;\n\nconst savedSearches = ref<string[]>([]);\n\nfunction readSavedSearches(): string[] {\n try {\n const raw = localStorage.getItem(SAVED_LS_KEY);\n if (!raw) return [];\n const parsed: unknown = JSON.parse(raw);\n if (!Array.isArray(parsed)) return [];\n return parsed.filter((x): x is string => typeof x === 'string' && x.trim() !== '').slice(0, SAVED_MAX);\n } catch {\n return [];\n }\n}\n\nfunction writeSavedSearches(list: string[]) {\n savedSearches.value = list.slice(0, SAVED_MAX);\n try {\n localStorage.setItem(SAVED_LS_KEY, JSON.stringify(savedSearches.value));\n } catch {\n /* private mode / quota — the in-memory list still works this session */\n }\n}\n\nfunction saveSearch(q: string) {\n const clean = q.trim();\n if (!clean) return;\n const list = savedSearches.value.filter((s) => s !== clean);\n list.unshift(clean); // newest first; cap enforced by writeSavedSearches\n writeSavedSearches(list);\n}\n\nfunction removeSavedSearch(q: string) {\n writeSavedSearches(savedSearches.value.filter((s) => s !== q));\n if (active.value >= flat.value.length) active.value = Math.max(0, flat.value.length - 1);\n}\n\nconst savedItems = computed<SavedGroupItem[]>(() => {\n const q = query.value.trim();\n const out: SavedGroupItem[] = [];\n // \"Save this query\" command — only when there IS a query and it isn't saved yet.\n if (q && !savedSearches.value.includes(q)) {\n out.push({ kind: 'save', id: `save:${q}`, label: `${t('palette.save')}: ${q}`, icon: '💾', query: q });\n }\n const scored = savedSearches.value\n .map((s) => ({ s, sc: matchScore(s, q) }))\n .filter((r) => r.sc >= 0 || !q);\n for (const r of scored) {\n out.push({ kind: 'saved', id: `saved:${r.s}`, label: r.s, icon: '🔖', query: r.s });\n }\n return out;\n});\n\n/* ======================================================================== */\n\nconst flat = computed<PaletteItem[]>(() => [\n ...gotoItems.value,\n ...fileItems.value,\n ...hitItems.value,\n ...savedItems.value,\n ...commandItems.value,\n]);\nconst fileOffset = computed(() => gotoItems.value.length);\nconst hitOffset = computed(() => fileOffset.value + fileItems.value.length);\nconst savedOffset = computed(() => hitOffset.value + hitItems.value.length);\nconst cmdOffset = computed(() => savedOffset.value + savedItems.value.length);\n\nwatch(query, (q) => {\n active.value = 0;\n scheduleEverywhere(q.trim()); /* bul:s3 */\n});\n\nfunction move(delta: number) {\n const n = flat.value.length;\n if (!n) return;\n active.value = (active.value + delta + n) % n;\n void nextTick(() => {\n listEl.value?.querySelector('.is-active')?.scrollIntoView({ block: 'nearest' });\n });\n}\n\nfunction choose(item?: PaletteItem) {\n const it = item ?? flat.value[active.value];\n if (!it) return;\n /* bul:s3 — saved-search rows keep the palette OPEN: picking one re-runs\n * the palette with that query; saving just persists it. */\n if (it.kind === 'saved') {\n query.value = it.query;\n void nextTick(() => inputEl.value?.focus());\n return;\n }\n if (it.kind === 'save') {\n saveSearch(it.query);\n void nextTick(() => inputEl.value?.focus());\n return;\n }\n emit('close');\n if (it.kind === 'hit') {\n emit('open-hit', it.hit);\n return;\n }\n if (it.kind === 'file') {\n emit('open-node', it.node);\n } else if (it.kind === 'goto') {\n emit('navigate', it.path);\n } else {\n switch (it.command) {\n case 'new-folder': emit('new-folder'); break;\n case 'upload': emit('upload'); break;\n case 'toggle-view': emit('toggle-view'); break;\n case 'open-trash': emit('open-trash'); break;\n case 'refresh': emit('refresh'); break;\n case 'go-up': emit('go-up'); break;\n /* wiring:int */\n case 'open-theme': emit('open-theme'); break;\n case 'open-shortcut-settings': emit('open-shortcut-settings'); break;\n case 'start-tour': emit('start-tour'); break;\n /* wiring:d1 */\n case 'tab-new': emit('tab-new'); break;\n case 'split-toggle': emit('split-toggle'); break;\n }\n }\n}\n\nfunction onDocKeydown(e: KeyboardEvent) {\n if (!props.open) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n e.stopPropagation();\n move(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n e.stopPropagation();\n move(-1);\n break;\n case 'Enter':\n e.preventDefault();\n e.stopPropagation();\n choose();\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n emit('close');\n break;\n }\n}\n\nwatch(\n () => props.open,\n (v) => {\n if (v) {\n query.value = '';\n active.value = 0;\n /* bul:s3 — fresh session state for the new groups. */\n everywhere.value = [];\n everywhereLoading.value = false;\n savedSearches.value = readSavedSearches();\n document.addEventListener('keydown', onDocKeydown, true);\n void nextTick(() => inputEl.value?.focus());\n } else {\n if (everywhereTimer) clearTimeout(everywhereTimer); /* bul:s3 */\n document.removeEventListener('keydown', onDocKeydown, true);\n }\n },\n);\n\nonBeforeUnmount(() => {\n if (everywhereTimer) clearTimeout(everywhereTimer); /* bul:s3 */\n document.removeEventListener('keydown', onDocKeydown, true);\n});\n</script>\n\n<template>\n <transition name=\"fe-modal\">\n <div\n v-if=\"open\"\n class=\"fe-modal__backdrop fe-cmdp__backdrop\"\n role=\"presentation\"\n @click=\"emit('close')\"\n >\n <div\n class=\"fe-cmdp\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-label=\"t('palette.placeholder')\"\n @click.stop\n >\n <div class=\"fe-cmdp__inputwrap\">\n <svg\n class=\"fe-cmdp__glyph\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"7\" cy=\"7\" r=\"4.5\" />\n <path d=\"m10.5 10.5 3.5 3.5\" />\n </svg>\n <input\n ref=\"inputEl\"\n v-model=\"query\"\n type=\"text\"\n class=\"fe-cmdp__input\"\n :placeholder=\"t('palette.placeholder')\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n />\n </div>\n\n <div ref=\"listEl\" class=\"fe-cmdp__list\" role=\"listbox\">\n <button\n v-for=\"(it, i) in gotoItems\"\n :key=\"it.id\"\n type=\"button\"\n class=\"fe-cmdp__item\"\n :class=\"{ 'is-active': i === active }\"\n role=\"option\"\n :aria-selected=\"i === active\"\n @mouseenter=\"active = i\"\n @click=\"choose(it)\"\n >\n <span class=\"fe-cmdp__icon\" aria-hidden=\"true\">{{ it.icon }}</span>\n <span class=\"fe-cmdp__label\">{{ it.label }}</span>\n </button>\n\n <template v-if=\"fileItems.length\">\n <div class=\"fe-cmdp__group\">{{ t('palette.files') }}</div>\n <button\n v-for=\"(it, i) in fileItems\"\n :key=\"it.id\"\n type=\"button\"\n class=\"fe-cmdp__item\"\n :class=\"{ 'is-active': fileOffset + i === active }\"\n role=\"option\"\n :aria-selected=\"fileOffset + i === active\"\n @mouseenter=\"active = fileOffset + i\"\n @click=\"choose(it)\"\n >\n <span class=\"fe-cmdp__icon\" aria-hidden=\"true\">{{ it.icon }}</span>\n <span class=\"fe-cmdp__label\">{{ it.label }}</span>\n </button>\n </template>\n\n <!-- bul:s3 — \"Everywhere\" global-search hits -->\n <template v-if=\"hitItems.length || everywhereLoading\">\n <div class=\"fe-cmdp__group\">{{ t('palette.everywhere') }}</div>\n <div v-if=\"everywhereLoading && !hitItems.length\" class=\"fe-cmdp__loading\">\n {{ t('palette.searching') }}\n </div>\n <button\n v-for=\"(it, i) in hitItems\"\n :key=\"it.id\"\n type=\"button\"\n class=\"fe-cmdp__item fe-cmdp__item--hit\"\n :class=\"{ 'is-active': hitOffset + i === active }\"\n role=\"option\"\n :aria-selected=\"hitOffset + i === active\"\n @mouseenter=\"active = hitOffset + i\"\n @click=\"choose(it)\"\n >\n <span class=\"fe-cmdp__icon\" aria-hidden=\"true\">{{ it.icon }}</span>\n <span class=\"fe-cmdp__hitbody\">\n <span class=\"fe-cmdp__hitline\">\n <span class=\"fe-cmdp__label\">{{ it.label }}</span>\n <span v-if=\"it.inContent\" class=\"fe-cmdp__badge\">{{ t('search.in_content') }}</span>\n </span>\n <span v-if=\"it.crumb\" class=\"fe-cmdp__crumb\" :title=\"it.crumb\">{{ it.crumb }}</span>\n <!-- Snippet: «»-highlights become <mark> via TEXT segments — never innerHTML. -->\n <span v-if=\"it.snippet\" class=\"fe-cmdp__snippet\">\n <template v-for=\"(seg, si) in snippetSegments(it.snippet)\" :key=\"si\">\n <mark v-if=\"seg.match\" class=\"fe-cmdp__mark\">{{ seg.text }}</mark>\n <template v-else>{{ seg.text }}</template>\n </template>\n </span>\n </span>\n </button>\n </template>\n\n <!-- bul:s3 — saved searches -->\n <template v-if=\"savedItems.length\">\n <div class=\"fe-cmdp__group\">{{ t('palette.saved') }}</div>\n <div\n v-for=\"(it, i) in savedItems\"\n :key=\"it.id\"\n class=\"fe-cmdp__item fe-cmdp__item--saved\"\n :class=\"{ 'is-active': savedOffset + i === active }\"\n role=\"option\"\n :aria-selected=\"savedOffset + i === active\"\n tabindex=\"-1\"\n @mouseenter=\"active = savedOffset + i\"\n @click=\"choose(it)\"\n @keydown.enter.prevent=\"choose(it)\"\n >\n <span class=\"fe-cmdp__icon\" aria-hidden=\"true\">{{ it.icon }}</span>\n <span class=\"fe-cmdp__label\">{{ it.label }}</span>\n <button\n v-if=\"it.kind === 'saved'\"\n type=\"button\"\n class=\"fe-cmdp__del\"\n :title=\"t('palette.saved.delete')\"\n :aria-label=\"t('palette.saved.delete')\"\n @click.stop=\"removeSavedSearch(it.query)\"\n >🗑</button>\n </div>\n </template>\n\n <template v-if=\"commandItems.length\">\n <div class=\"fe-cmdp__group\">{{ t('palette.commands') }}</div>\n <button\n v-for=\"(it, i) in commandItems\"\n :key=\"it.id\"\n type=\"button\"\n class=\"fe-cmdp__item\"\n :class=\"{ 'is-active': cmdOffset + i === active }\"\n role=\"option\"\n :aria-selected=\"cmdOffset + i === active\"\n @mouseenter=\"active = cmdOffset + i\"\n @click=\"choose(it)\"\n >\n <span class=\"fe-cmdp__icon\" aria-hidden=\"true\">{{ it.icon }}</span>\n <span class=\"fe-cmdp__label\">{{ it.label }}</span>\n </button>\n </template>\n\n <div v-if=\"flat.length === 0 && !everywhereLoading\" class=\"fe-cmdp__empty\">\n {{ t('palette.empty') }}\n </div>\n </div>\n\n <div class=\"fe-cmdp__hint\">{{ t('palette.hint') }}</div>\n </div>\n </div>\n </transition>\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\n/* wiring:c4 — a11y: unique title id for aria-labelledby + focus restore.\n * The element focused before the modal opened gets focus back on close so\n * keyboard users return to where they were instead of <body>. */\nlet modalSeq = 0;\nconst titleId = `fe-modal-title-${++modalSeq}-${Math.random().toString(36).slice(2, 7)}`;\nlet prevFocus: HTMLElement | null = null;\n\nconst FOCUSABLE =\n 'input:not([disabled]),select:not([disabled]),textarea:not([disabled]),' +\n 'button:not([disabled]),a[href],[tabindex]:not([tabindex=\"-1\"])';\n\nwatch(\n () => props.open,\n (v) => {\n if (v) {\n prevFocus = (document.activeElement as HTMLElement | null) ?? null; /* wiring:c4 */\n document.addEventListener('keydown', onKey);\n setTimeout(() => {\n const focusable = cardEl.value?.querySelector<HTMLElement>(FOCUSABLE);\n focusable?.focus();\n }, 30);\n } else {\n document.removeEventListener('keydown', onKey);\n /* wiring:c4 — return focus to the opener. */\n prevFocus?.focus?.();\n prevFocus = null;\n }\n },\n);\n\nonBeforeUnmount(() => document.removeEventListener('keydown', onKey));\n\nfunction onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n emit('close');\n return;\n }\n /* wiring:c4 — focus trap: Tab cycles inside the card (WAI-ARIA dialog).\n * Without it, Tab walked out into the host page behind the backdrop. */\n if (e.key === 'Tab' && cardEl.value) {\n const nodes = Array.from(cardEl.value.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n (el) => el.offsetParent !== null || el === document.activeElement,\n );\n if (nodes.length === 0) return;\n const first = nodes[0];\n const last = nodes[nodes.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (e.shiftKey && (active === first || !cardEl.value.contains(active))) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && (active === last || !cardEl.value.contains(active))) {\n e.preventDefault();\n first.focus();\n }\n }\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 :aria-labelledby=\"title && !chromeless ? titleId : undefined\"\n :aria-label=\"!title || chromeless ? title || undefined : undefined\"\n @click.stop\n >\n <header v-if=\"title && !chromeless\" class=\"fe-modal__head\">\n <h2 :id=\"titleId\" 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\">\n/**\n * ShortcutsHelp — \"?\" cheat-sheet modal.\n *\n * wiring:c2 — renders the live shortcut registry (useShortcutList) so\n * user remaps show up here too, grouped by section. Unbound actions are\n * listed with an \"unassigned\" chip. The footer carries a \"Customize\"\n * button that asks the host to open ShortcutSettings. Modal.vue\n * supplies Esc handling, backdrop, focus and the close button.\n */\nimport { computed } from 'vue';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\nimport { useShortcutList, type ShortcutView } from '../composables/useKeyboardShortcuts';\nimport Modal from '../modals/Modal.vue';\n\nconst props = defineProps<{\n open: boolean;\n locale: LocaleCode;\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n (e: 'customize'): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\n\nconst list = useShortcutList();\n\nconst groups = computed(() => {\n const order: string[] = [];\n const map = new Map<string, ShortcutView[]>();\n for (const s of list.value) {\n if (!map.has(s.groupKey)) {\n map.set(s.groupKey, []);\n order.push(s.groupKey);\n }\n map.get(s.groupKey)!.push(s);\n }\n return order.map((key) => ({ key, items: map.get(key)! }));\n});\n</script>\n\n<template>\n <Modal :open=\"open\" :title=\"t('shortcuts.title')\" size=\"md\" @close=\"emit('close')\">\n <div class=\"fe-shortcuts\">\n <section v-for=\"g in groups\" :key=\"g.key\" class=\"fe-shortcuts__group\">\n <h3 class=\"fe-shortcuts__heading\">{{ t(g.key) }}</h3>\n <div class=\"fe-shortcuts__table\">\n <div v-for=\"s in g.items\" :key=\"s.id\" class=\"fe-shortcuts__row\">\n <span class=\"fe-shortcuts__keys\">\n <template v-if=\"s.keys.length === 0\">\n <span class=\"fe-shortcuts__unbound\">{{ t('shortcuts.settings.unbound') }}</span>\n </template>\n <template v-for=\"(combo, i) in s.keys\" v-else :key=\"combo\">\n <kbd class=\"fe-kbd\">{{ combo }}</kbd>\n <span v-if=\"i < s.keys.length - 1\" class=\"fe-shortcuts__or\" aria-hidden=\"true\">/</span>\n </template>\n </span>\n <span class=\"fe-shortcuts__desc\">\n {{ t(s.labelKey) }}\n <span\n v-if=\"s.overridden\"\n class=\"fe-shortcuts__custom\"\n :title=\"t('shortcuts.settings.customized')\"\n >●</span>\n </span>\n </div>\n </div>\n </section>\n </div>\n <template #actions>\n <button type=\"button\" class=\"fe-btn fe-btn--primary\" @click=\"emit('customize')\">\n ⌨ {{ t('shortcuts.customize') }}\n </button>\n <button type=\"button\" class=\"fe-btn\" @click=\"emit('close')\">{{ t('viewer.close') }}</button>\n </template>\n </Modal>\n</template>\n","/**\n * themes.ts — wiring:c1 theme registry + application engine.\n *\n * A \"theme\" is a palette-only preset: a map of `--fe-*` CSS custom\n * properties in TWO variants (light + dark). Picking a theme is fully\n * independent from the light/dark MODE — the mode (config.theme prop /\n * OS preference) keeps deciding which variant of the selected theme is\n * active, exactly like the stock palette in styles/variables.css.\n *\n * Application strategy (two cooperating layers):\n *\n * 1. Inline `--fe-*` variables on the explorer ROOT element\n * (`applyThemeToEl`) — the documented \"consumer overrides by setting\n * --fe-* on a higher scope\" philosophy, resolved to the currently\n * active variant. Covers the whole `.fe` subtree, works in embeds\n * without touching the host page's own theme.\n *\n * 2. A singleton injected `<style data-filex-theme>` (`syncThemeStyle`)\n * that mirrors variables.css' EXACT selector cascade with the\n * selected theme's values. This is required because some surfaces\n * re-declare the variables on themselves and would otherwise shadow\n * the inherited inline values back to the stock palette:\n * - the Teleport-ed context menu backdrop (`.fe-ctx-backdrop…`\n * lives under <body>, outside the root element entirely), and\n * - modal backdrops, which carry their own `.fe` /\n * `.fe--theme-dark` classes (dark-mode selectors like\n * `.dark .fe` re-set the tokens on those descendants).\n * Because the injected element is appended to <head> at runtime it\n * always comes AFTER the bundled stylesheet, so equal-specificity\n * rules win by source order — the same mechanism variables.css uses\n * internally. No `!important` needed.\n *\n * The `default` theme applies NOTHING (inline vars removed, style\n * element emptied) so host-level `--fe-*` overrides keep working\n * untouched — its token maps below exist only to render the gallery\n * preview card.\n *\n * Persistence: localStorage `filex.theme` (absent/invalid → default),\n * shared reactively across every explorer instance on the page and\n * synced across tabs via the `storage` event.\n *\n * All palettes were contrast-checked (WCAG 2.1): text/bg ≥ 7:1,\n * text on elevated/hover/selected surfaces + muted text + text-on-primary\n * ≥ 4.5:1, primary & danger vs bg ≥ 3:1 — in BOTH variants.\n */\n\nimport { ref, type Ref } from 'vue';\n\n/** Map of `--fe-*` custom property → value. */\nexport type ThemeTokenMap = Record<string, string>;\n\nexport interface ThemeDef {\n /** Stable id — persisted in localStorage, never shown to users. */\n id: string;\n /** i18n catalogue key for the display name (tr + en). */\n nameKey: string;\n /** Palette applied when the resolved mode is light. */\n light: ThemeTokenMap;\n /** Palette applied when the resolved mode is dark. */\n dark: ThemeTokenMap;\n}\n\nexport const THEME_LS_KEY = 'filex.theme';\nexport const DEFAULT_THEME_ID = 'default';\n\n/* ------------------------------------------------------------------ */\n/* Registry */\n/* ------------------------------------------------------------------ */\n\nexport const THEMES: ThemeDef[] = [\n {\n // Stock palette — the maps duplicate variables.css ONLY for the\n // gallery preview; applying this theme clears all overrides.\n id: DEFAULT_THEME_ID,\n nameKey: 'theme.name.default',\n light: {\n '--fe-bg': '#ffffff',\n '--fe-bg-elev': '#f7f8fa',\n '--fe-bg-hover': '#edf0f5',\n '--fe-bg-selected': '#dfe8ff',\n '--fe-border': '#e2e6ed',\n '--fe-border-strong': '#c7ced9',\n '--fe-text': '#1a1e27',\n '--fe-text-muted': '#5a6475',\n '--fe-text-on-primary': '#ffffff',\n '--fe-primary': '#3b82f6',\n '--fe-primary-hover': '#2563eb',\n '--fe-danger': '#dc2626',\n '--fe-danger-hover': '#b91c1c',\n },\n dark: {\n '--fe-bg': '#0f1419',\n '--fe-bg-elev': '#161c25',\n '--fe-bg-hover': '#1f2733',\n '--fe-bg-selected': '#23324a',\n '--fe-border': '#2a323e',\n '--fe-border-strong': '#3a4453',\n '--fe-text': '#e5e9f0',\n '--fe-text-muted': '#8b95a7',\n '--fe-text-on-primary': '#ffffff',\n '--fe-primary': '#60a5fa',\n '--fe-primary-hover': '#3b82f6',\n '--fe-danger': '#f87171',\n '--fe-danger-hover': '#ef4444',\n },\n },\n {\n // Gece Mavisi — deep indigo/navy.\n id: 'night',\n nameKey: 'theme.name.night',\n light: {\n '--fe-bg': '#f6f8fd',\n '--fe-bg-elev': '#edf1fa',\n '--fe-bg-hover': '#e2e9f7',\n '--fe-bg-selected': '#d2ddf4',\n '--fe-border': '#d6deee',\n '--fe-border-strong': '#aebfda',\n '--fe-text': '#151f38',\n '--fe-text-muted': '#49587a',\n '--fe-text-on-primary': '#ffffff',\n '--fe-primary': '#2c4a9e',\n '--fe-primary-hover': '#213a80',\n '--fe-danger': '#c62828',\n '--fe-danger-hover': '#a51f1f',\n },\n dark: {\n '--fe-bg': '#0a1024',\n '--fe-bg-elev': '#111a35',\n '--fe-bg-hover': '#1a2547',\n '--fe-bg-selected': '#243665',\n '--fe-border': '#26335a',\n '--fe-border-strong': '#3c4e84',\n '--fe-text': '#dfe6f7',\n '--fe-text-muted': '#96a5cc',\n '--fe-text-on-primary': '#050b26',\n '--fe-primary': '#6d8dfc',\n '--fe-primary-hover': '#5273f2',\n '--fe-danger': '#f87171',\n '--fe-danger-hover': '#ef4444',\n },\n },\n {\n // Orman — calm greens.\n id: 'forest',\n nameKey: 'theme.name.forest',\n light: {\n '--fe-bg': '#f5faf5',\n '--fe-bg-elev': '#eaf3eb',\n '--fe-bg-hover': '#dcecdf',\n '--fe-bg-selected': '#c8e2ce',\n '--fe-border': '#d2e2d4',\n '--fe-border-strong': '#a2c3a8',\n '--fe-text': '#182b1d',\n '--fe-text-muted': '#42604a',\n '--fe-text-on-primary': '#ffffff',\n '--fe-primary': '#2b7a41',\n '--fe-primary-hover': '#226334',\n '--fe-danger': '#c62828',\n '--fe-danger-hover': '#a51f1f',\n },\n dark: {\n '--fe-bg': '#0d1611',\n '--fe-bg-elev': '#132019',\n '--fe-bg-hover': '#1b2d23',\n '--fe-bg-selected': '#264532',\n '--fe-border': '#28402f',\n '--fe-border-strong': '#3e5f49',\n '--fe-text': '#dcebe0',\n '--fe-text-muted': '#93b09b',\n '--fe-text-on-primary': '#04180b',\n '--fe-primary': '#54c17a',\n '--fe-primary-hover': '#3fae66',\n '--fe-danger': '#f87171',\n '--fe-danger-hover': '#ef4444',\n },\n },\n {\n // Kehribar — warm amber/bronze.\n id: 'amber',\n nameKey: 'theme.name.amber',\n light: {\n '--fe-bg': '#fdf9f0',\n '--fe-bg-elev': '#f7efdd',\n '--fe-bg-hover': '#f0e3c8',\n '--fe-bg-selected': '#ead6ab',\n '--fe-border': '#e6dabf',\n '--fe-border-strong': '#c6b184',\n '--fe-text': '#33270f',\n '--fe-text-muted': '#655631',\n '--fe-text-on-primary': '#ffffff',\n '--fe-primary': '#9a4b00',\n '--fe-primary-hover': '#7c3c00',\n '--fe-danger': '#c62828',\n '--fe-danger-hover': '#a51f1f',\n },\n dark: {\n '--fe-bg': '#191307',\n '--fe-bg-elev': '#231a0c',\n '--fe-bg-hover': '#2f2312',\n '--fe-bg-selected': '#44331b',\n '--fe-border': '#3b2e17',\n '--fe-border-strong': '#5b4a29',\n '--fe-text': '#f2e7d4',\n '--fe-text-muted': '#bda887',\n '--fe-text-on-primary': '#2a1c02',\n '--fe-primary': '#f5a524',\n '--fe-primary-hover': '#ffb84d',\n '--fe-danger': '#f87171',\n '--fe-danger-hover': '#ef4444',\n },\n },\n {\n // Leylak — soft purple.\n id: 'lilac',\n nameKey: 'theme.name.lilac',\n light: {\n '--fe-bg': '#faf7fd',\n '--fe-bg-elev': '#f2ecfa',\n '--fe-bg-hover': '#e8ddf5',\n '--fe-bg-selected': '#dccaf0',\n '--fe-border': '#e1d6ee',\n '--fe-border-strong': '#bda6d9',\n '--fe-text': '#241a33',\n '--fe-text-muted': '#584871',\n '--fe-text-on-primary': '#ffffff',\n '--fe-primary': '#7231e0',\n '--fe-primary-hover': '#5f21c4',\n '--fe-danger': '#c62828',\n '--fe-danger-hover': '#a51f1f',\n },\n dark: {\n '--fe-bg': '#130f1c',\n '--fe-bg-elev': '#1b1527',\n '--fe-bg-hover': '#261d37',\n '--fe-bg-selected': '#37294f',\n '--fe-border': '#302546',\n '--fe-border-strong': '#4b3a6d',\n '--fe-text': '#e9e2f5',\n '--fe-text-muted': '#a999c5',\n '--fe-text-on-primary': '#180d33',\n '--fe-primary': '#b197fa',\n '--fe-primary-hover': '#9c7cf4',\n '--fe-danger': '#f87171',\n '--fe-danger-hover': '#ef4444',\n },\n },\n {\n // Yüksek Kontrast — black/white with strong borders, saturated accents.\n id: 'contrast',\n nameKey: 'theme.name.contrast',\n light: {\n '--fe-bg': '#ffffff',\n '--fe-bg-elev': '#f2f2f2',\n '--fe-bg-hover': '#e0e0e0',\n '--fe-bg-selected': '#c9dcff',\n '--fe-border': '#5c5c5c',\n '--fe-border-strong': '#000000',\n '--fe-text': '#000000',\n '--fe-text-muted': '#3d3d3d',\n '--fe-text-on-primary': '#ffffff',\n '--fe-primary': '#003d99',\n '--fe-primary-hover': '#002a6b',\n '--fe-danger': '#a80000',\n '--fe-danger-hover': '#7d0000',\n '--fe-shadow': '0 0 0 1px #000000, 0 10px 32px rgba(0, 0, 0, 0.25)',\n '--fe-shadow-sm': '0 0 0 1px #000000',\n },\n dark: {\n '--fe-bg': '#000000',\n '--fe-bg-elev': '#0d0d0d',\n '--fe-bg-hover': '#212121',\n '--fe-bg-selected': '#003d80',\n '--fe-border': '#8f8f8f',\n '--fe-border-strong': '#ffffff',\n '--fe-text': '#ffffff',\n '--fe-text-muted': '#d6d6d6',\n '--fe-text-on-primary': '#001430',\n '--fe-primary': '#7ab8ff',\n '--fe-primary-hover': '#9ccaff',\n '--fe-danger': '#ff7575',\n '--fe-danger-hover': '#ff9999',\n '--fe-shadow': '0 0 0 1px #ffffff, 0 12px 32px rgba(0, 0, 0, 0.65)',\n '--fe-shadow-sm': '0 0 0 1px #ffffff',\n },\n },\n {\n // Yumuşak Gri — desaturated, quiet neutral.\n id: 'gray',\n nameKey: 'theme.name.gray',\n light: {\n '--fe-bg': '#f7f7f8',\n '--fe-bg-elev': '#efeff1',\n '--fe-bg-hover': '#e4e4e7',\n '--fe-bg-selected': '#d6d7db',\n '--fe-border': '#dfdfe2',\n '--fe-border-strong': '#b9b9c0',\n '--fe-text': '#26272b',\n '--fe-text-muted': '#585a63',\n '--fe-text-on-primary': '#ffffff',\n '--fe-primary': '#4b4b54',\n '--fe-primary-hover': '#38383f',\n '--fe-danger': '#c62828',\n '--fe-danger-hover': '#a51f1f',\n },\n dark: {\n '--fe-bg': '#131316',\n '--fe-bg-elev': '#1b1b1f',\n '--fe-bg-hover': '#26262b',\n '--fe-bg-selected': '#35353c',\n '--fe-border': '#2d2d33',\n '--fe-border-strong': '#4a4a52',\n '--fe-text': '#e6e6e9',\n '--fe-text-muted': '#a4a4ad',\n '--fe-text-on-primary': '#17171b',\n '--fe-primary': '#b0b0ba',\n '--fe-primary-hover': '#c4c4cd',\n '--fe-danger': '#f87171',\n '--fe-danger-hover': '#ef4444',\n },\n },\n {\n // Terminal Yeşili — phosphor green, monospace face for the full CRT vibe.\n id: 'terminal',\n nameKey: 'theme.name.terminal',\n light: {\n '--fe-bg': '#f3f9f4',\n '--fe-bg-elev': '#e5f2e8',\n '--fe-bg-hover': '#d5ead9',\n '--fe-bg-selected': '#bce3c6',\n '--fe-border': '#cbe2d1',\n '--fe-border-strong': '#94c2a0',\n '--fe-text': '#0c2913',\n '--fe-text-muted': '#31573c',\n '--fe-text-on-primary': '#ffffff',\n '--fe-primary': '#116b33',\n '--fe-primary-hover': '#0c5427',\n '--fe-danger': '#c62828',\n '--fe-danger-hover': '#a51f1f',\n '--fe-font': 'ui-monospace, \"SF Mono\", Consolas, Menlo, monospace',\n },\n dark: {\n '--fe-bg': '#050d07',\n '--fe-bg-elev': '#0a1710',\n '--fe-bg-hover': '#112418',\n '--fe-bg-selected': '#1a3a26',\n '--fe-border': '#1c3a2a',\n '--fe-border-strong': '#316144',\n '--fe-text': '#4fdd8b',\n '--fe-text-muted': '#38a668',\n '--fe-text-on-primary': '#03180a',\n '--fe-primary': '#25c95e',\n '--fe-primary-hover': '#4fdd8b',\n '--fe-danger': '#ff6b62',\n '--fe-danger-hover': '#ff8d86',\n '--fe-font': 'ui-monospace, \"SF Mono\", Consolas, Menlo, monospace',\n },\n },\n];\n\nexport function themeById(id: string | null | undefined): ThemeDef | undefined {\n return THEMES.find((t) => t.id === id);\n}\n\n/** Every token key ANY theme touches — used to fully clear inline overrides\n * when switching themes (a theme that skips a token must not inherit the\n * previous theme's value for it). */\nconst ALL_TOKEN_KEYS: string[] = Array.from(\n new Set(THEMES.flatMap((t) => [...Object.keys(t.light), ...Object.keys(t.dark)])),\n);\n\n/* ------------------------------------------------------------------ */\n/* Shared reactive state + persistence */\n/* ------------------------------------------------------------------ */\n\nfunction readStoredThemeId(): string {\n try {\n const v = localStorage.getItem(THEME_LS_KEY);\n return v && themeById(v) ? v : DEFAULT_THEME_ID;\n } catch {\n return DEFAULT_THEME_ID;\n }\n}\n\n// Module-level singleton so every explorer instance on the page follows the\n// same selection instantly.\nconst themeId: Ref<string> = ref(\n typeof window === 'undefined' ? DEFAULT_THEME_ID : readStoredThemeId(),\n);\n\nexport function setTheme(id: string): void {\n const valid = themeById(id) ? id : DEFAULT_THEME_ID;\n themeId.value = valid;\n try {\n if (valid === DEFAULT_THEME_ID) localStorage.removeItem(THEME_LS_KEY);\n else localStorage.setItem(THEME_LS_KEY, valid);\n } catch {\n /* quota / private mode */\n }\n}\n\n/** Reactive handle for components: `{ themeId, setTheme }`. */\nexport function useThemeState(): { themeId: Ref<string>; setTheme: (id: string) => void } {\n return { themeId, setTheme };\n}\n\n// Cross-tab sync — another tab changing the preference updates this one live.\nif (typeof window !== 'undefined') {\n try {\n window.addEventListener('storage', (e) => {\n if (e.key !== THEME_LS_KEY) return;\n themeId.value = e.newValue && themeById(e.newValue) ? e.newValue : DEFAULT_THEME_ID;\n });\n } catch {\n /* non-browser env */\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Application — layer 1: inline vars on the explorer root */\n/* ------------------------------------------------------------------ */\n\n/**\n * Set (or clear, for the default theme) the selected theme's tokens as\n * inline CSS variables on the explorer root element, resolved to the\n * active variant. Inline style wins over every stylesheet rule, so the\n * root subtree is always correct regardless of host CSS.\n */\nexport function applyThemeToEl(el: HTMLElement, id: string, dark: boolean): void {\n for (const key of ALL_TOKEN_KEYS) el.style.removeProperty(key);\n if (id === DEFAULT_THEME_ID) return;\n const theme = themeById(id);\n if (!theme) return;\n const map = dark ? theme.dark : theme.light;\n for (const [key, value] of Object.entries(map)) el.style.setProperty(key, value);\n}\n\n/* ------------------------------------------------------------------ */\n/* Application — layer 2: injected stylesheet for shadowed surfaces */\n/* ------------------------------------------------------------------ */\n\nconst STYLE_ATTR = 'data-filex-theme';\n\nfunction cssDecls(map: ThemeTokenMap): string {\n return Object.entries(map)\n .map(([k, v]) => `${k}:${v};`)\n .join('');\n}\n\n/**\n * Generate a stylesheet that mirrors styles/variables.css' selector\n * cascade 1:1 (light base → explicit-dark selectors → prefers-dark media\n * block) with the theme's palette. Appended after the bundled CSS it\n * overrides every surface — teleported context menus, modal backdrops —\n * in whichever mode they resolve to, without JS having to track them.\n */\nexport function generateThemeCss(theme: ThemeDef): string {\n const light = cssDecls(theme.light);\n const dark = cssDecls(theme.dark);\n const darkSelectors = [\n '.fe--theme-dark',\n \":root[data-theme='dark'] .fe\",\n '.fe.fe--theme-dark',\n ':root.dark',\n '.dark',\n ':root.dark .fe',\n '.dark .fe',\n '.fe-ctx-backdrop--theme-dark',\n \".fe-ctx-backdrop--theme-auto[data-prefers-dark='1']\",\n ].join(',');\n const autoDarkSelectors = [\n '.fe:not(.fe--theme-light)',\n '.fe-ctx-backdrop--theme-auto:not(.fe-ctx-backdrop--theme-light)',\n ].join(',');\n return (\n `/* filex theme: ${theme.id} */` +\n `:root,.fe{${light}}` +\n `${darkSelectors}{${dark}}` +\n `@media (prefers-color-scheme: dark){${autoDarkSelectors}{${dark}}}`\n );\n}\n\n/**\n * Create/update/empty the singleton `<style data-filex-theme>` element in\n * <head>. Idempotent — safe to call from every explorer instance.\n */\nexport function syncThemeStyle(id: string): void {\n if (typeof document === 'undefined') return;\n let el = document.head.querySelector<HTMLStyleElement>(`style[${STYLE_ATTR}]`);\n const theme = id === DEFAULT_THEME_ID ? undefined : themeById(id);\n if (!theme) {\n if (el) el.textContent = '';\n return;\n }\n if (!el) {\n el = document.createElement('style');\n el.setAttribute(STYLE_ATTR, '');\n document.head.appendChild(el);\n } else if (el !== document.head.lastElementChild) {\n // Keep it AFTER any stylesheet injected later (e.g. the webcomponent's\n // own core-CSS injection) so equal-specificity rules keep losing to us.\n document.head.appendChild(el);\n }\n const css = generateThemeCss(theme);\n if (el.textContent !== css) el.textContent = css;\n}\n","<script setup lang=\"ts\">\n/**\n * ThemeGallery — wiring:c1 theme picker modal.\n *\n * A grid of theme cards, each rendering a mini live preview (surface +\n * toolbar chips + sample rows) painted with that theme's tokens for the\n * CURRENTLY resolved light/dark mode — so the card shows exactly what\n * you'd get. Click applies instantly (live preview behind the modal) and\n * persists; the selected card carries a ✓. \"Varsayılana dön\" resets.\n *\n * Presentational only — selection state + persistence live in\n * lib/themes.ts (shared across instances); the parent forwards `select`.\n */\nimport type { LocaleCode, ThemeMode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\nimport { THEMES, DEFAULT_THEME_ID, type ThemeDef } from '../lib/themes';\nimport Modal from '../modals/Modal.vue';\n\nconst props = defineProps<{\n open: boolean;\n locale: LocaleCode;\n /** Host mode (forwarded to Modal so the backdrop themes correctly). */\n theme?: ThemeMode;\n /** Resolved mode — decides which variant the preview cards paint. */\n dark: boolean;\n /** Currently selected theme id. */\n current: string;\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n (e: 'select', id: string): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\n\n/** Inline variables for one card — a self-contained mini `--fe-*` scope,\n * so the preview markup can use the exact same tokens the real UI uses. */\nfunction cardVars(th: ThemeDef): Record<string, string> {\n return props.dark ? th.dark : th.light;\n}\n\nconst DEFAULT_ID = DEFAULT_THEME_ID;\n</script>\n\n<template>\n <Modal :open=\"open\" :title=\"t('theme.title')\" size=\"lg\" :theme=\"theme\" @close=\"emit('close')\">\n <p class=\"fe-themes__hint\">{{ t('theme.hint') }}</p>\n <div class=\"fe-themes\" role=\"listbox\" :aria-label=\"t('theme.title')\">\n <button\n v-for=\"th in THEMES\"\n :key=\"th.id\"\n type=\"button\"\n class=\"fe-themecard\"\n :class=\"{ 'is-selected': th.id === current }\"\n role=\"option\"\n :aria-selected=\"th.id === current\"\n :style=\"cardVars(th)\"\n @click=\"emit('select', th.id)\"\n >\n <span class=\"fe-themecard__preview\" aria-hidden=\"true\">\n <span class=\"fe-themecard__topbar\">\n <span class=\"fe-themecard__chip fe-themecard__chip--primary\"></span>\n <span class=\"fe-themecard__chip\"></span>\n <span class=\"fe-themecard__chip fe-themecard__chip--ghost\"></span>\n </span>\n <span class=\"fe-themecard__row\">\n <span class=\"fe-themecard__dot\"></span>\n <span class=\"fe-themecard__line\" style=\"width: 62%\"></span>\n </span>\n <span class=\"fe-themecard__row fe-themecard__row--selected\">\n <span class=\"fe-themecard__dot fe-themecard__dot--primary\"></span>\n <span class=\"fe-themecard__line\" style=\"width: 44%\"></span>\n </span>\n <span class=\"fe-themecard__row\">\n <span class=\"fe-themecard__dot fe-themecard__dot--muted\"></span>\n <span class=\"fe-themecard__line fe-themecard__line--muted\" style=\"width: 74%\"></span>\n </span>\n </span>\n <span class=\"fe-themecard__name\">\n {{ t(th.nameKey) }}\n <span v-if=\"th.id === current\" class=\"fe-themecard__check\" :title=\"t('theme.selected')\">✓</span>\n </span>\n </button>\n </div>\n <template #actions>\n <button\n type=\"button\"\n class=\"fe-btn\"\n :disabled=\"current === DEFAULT_ID\"\n @click=\"emit('select', DEFAULT_ID)\"\n >\n {{ t('theme.reset') }}\n </button>\n <button type=\"button\" class=\"fe-btn fe-btn--primary\" @click=\"emit('close')\">\n {{ t('theme.close') }}\n </button>\n </template>\n </Modal>\n</template>\n\n<!-- Deliberately NOT scoped: the webcomponent injects the CORE package's\n built style.css, whose data-v scope ids don't match the ids the\n webcomponent's own compile assigns (verified: fe-themecard got\n data-v-99a95ed7 in core vs data-v-5d4cc1fd in the wc bundle) — scoped\n rules would silently not apply in embeds. Class names are fe-*\n namespaced, so global is collision-safe (same approach as base.css). -->\n<style>\n.fe-themes__hint {\n margin: 0 0 12px;\n font-size: 12.5px;\n color: var(--fe-text-muted);\n}\n\n.fe-themes {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));\n gap: 12px;\n}\n\n/* Each card is its own mini token scope (inline --fe-* vars from the theme\n definition), so every color below refers to the CARD's theme — not the\n active page theme. */\n.fe-themecard {\n display: flex;\n flex-direction: column;\n padding: 0;\n border: 2px solid var(--fe-border-strong);\n border-radius: var(--fe-radius, 8px);\n background: var(--fe-bg);\n cursor: pointer;\n overflow: hidden;\n text-align: left;\n transition: transform 0.12s ease, box-shadow 0.12s ease;\n font: inherit;\n}\n\n.fe-themecard:hover {\n transform: translateY(-2px);\n box-shadow: var(--fe-shadow-sm, 0 2px 6px rgba(15, 23, 42, 0.08));\n}\n\n.fe-themecard:focus-visible {\n outline: 2px solid var(--fe-primary);\n outline-offset: 2px;\n}\n\n.fe-themecard.is-selected {\n border-color: var(--fe-primary);\n box-shadow: 0 0 0 2px var(--fe-primary);\n}\n\n.fe-themecard__preview {\n display: flex;\n flex-direction: column;\n gap: 6px;\n padding: 10px;\n background: var(--fe-bg);\n border-bottom: 1px solid var(--fe-border);\n min-height: 84px;\n}\n\n.fe-themecard__topbar {\n display: flex;\n gap: 4px;\n margin-bottom: 2px;\n}\n\n.fe-themecard__chip {\n height: 8px;\n width: 22px;\n border-radius: 4px;\n background: var(--fe-bg-hover);\n border: 1px solid var(--fe-border);\n}\n\n.fe-themecard__chip--primary {\n background: var(--fe-primary);\n border-color: var(--fe-primary);\n}\n\n.fe-themecard__chip--ghost {\n background: var(--fe-bg-elev);\n}\n\n.fe-themecard__row {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 3px 4px;\n border-radius: 4px;\n}\n\n.fe-themecard__row--selected {\n background: var(--fe-bg-selected);\n}\n\n.fe-themecard__dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--fe-text);\n opacity: 0.75;\n flex: none;\n}\n\n.fe-themecard__dot--primary {\n background: var(--fe-primary);\n opacity: 1;\n}\n\n.fe-themecard__dot--muted {\n background: var(--fe-text-muted);\n}\n\n.fe-themecard__line {\n height: 6px;\n border-radius: 3px;\n background: var(--fe-text);\n opacity: 0.55;\n}\n\n.fe-themecard__line--muted {\n background: var(--fe-text-muted);\n}\n\n.fe-themecard__name {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n padding: 8px 10px;\n font-size: 12.5px;\n font-weight: 600;\n color: var(--fe-text);\n background: var(--fe-bg-elev);\n font-family: var(--fe-font, inherit);\n}\n\n.fe-themecard__check {\n flex: none;\n width: 18px;\n height: 18px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n background: var(--fe-primary);\n color: var(--fe-text-on-primary);\n font-size: 11px;\n line-height: 1;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * ShortcutSettings — wiring:c2 keyboard-shortcut customization modal.\n *\n * Category-grouped rows from the shortcut registry; each row shows the\n * action label + current combo badge(s) + \"Change\" (press-to-capture:\n * the next key combination is recorded, Esc cancels) + a per-row\n * \"reset to default\" and a header \"reset all\".\n *\n * Conflicts: assigning a combo that another action already uses turns\n * the row into a red warning with two choices — unbind the old action\n * and take the combo, or cancel. Combos reserved by fixed shortcuts\n * (Backspace, Esc) can never be taken.\n *\n * While the modal is open a window-level CAPTURE listener swallows\n * keydowns (except Esc/Tab) so experimenting with keys can't trigger\n * explorer actions behind the modal; native button activation (Enter/\n * Space on a focused button) is a default action and still works.\n */\nimport { computed, onBeforeUnmount, ref, watch } from 'vue';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\nimport {\n comboFromEvent,\n effectiveCombo,\n findShortcutConflict,\n resetAllShortcuts,\n resetShortcut,\n setShortcutOverride,\n useShortcutList,\n SHORTCUT_ACTIONS,\n type ShortcutView,\n} from '../composables/useKeyboardShortcuts';\nimport Modal from '../modals/Modal.vue';\n\nconst props = defineProps<{\n open: boolean;\n locale: LocaleCode;\n theme?: 'light' | 'dark' | 'auto';\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\n\nconst list = useShortcutList();\n\nconst groups = computed(() => {\n const order: string[] = [];\n const map = new Map<string, ShortcutView[]>();\n for (const s of list.value) {\n if (!map.has(s.groupKey)) {\n map.set(s.groupKey, []);\n order.push(s.groupKey);\n }\n map.get(s.groupKey)!.push(s);\n }\n return order.map((key) => ({ key, items: map.get(key)! }));\n});\n\nconst anyOverridden = computed(() => list.value.some((s) => s.overridden));\n\n// --- capture / conflict state ---\n\nconst capturingId = ref<string | null>(null);\nconst conflict = ref<{ id: string; combo: string; conflictId: string; fixed: boolean } | null>(null);\n\nfunction labelOf(id: string): string {\n const def = SHORTCUT_ACTIONS.find((a) => a.id === id);\n return def ? t(def.labelKey) : id;\n}\n\nfunction beginCapture(id: string) {\n conflict.value = null;\n capturingId.value = id;\n}\n\nfunction cancelCapture() {\n capturingId.value = null;\n}\n\nfunction attemptAssign(id: string, combo: string) {\n capturingId.value = null;\n if (combo === effectiveCombo(id)) return; // unchanged\n const clash = findShortcutConflict(combo, id);\n if (clash) {\n conflict.value = { id, combo, conflictId: clash.id, fixed: clash.fixed };\n return;\n }\n setShortcutOverride(id, combo);\n}\n\nfunction confirmConflictTake() {\n const c = conflict.value;\n if (!c || c.fixed) return;\n setShortcutOverride(c.conflictId, ''); // unbind the old owner\n setShortcutOverride(c.id, c.combo);\n conflict.value = null;\n}\n\nfunction dismissConflict() {\n conflict.value = null;\n}\n\nfunction onReset(id: string) {\n conflict.value = null;\n resetShortcut(id);\n}\n\nfunction onResetAll() {\n conflict.value = null;\n capturingId.value = null;\n resetAllShortcuts();\n}\n\n// --- window capture listener (only while open) ---\n\nfunction onWindowKeydown(e: KeyboardEvent) {\n if (capturingId.value) {\n e.preventDefault();\n e.stopPropagation();\n if (e.key === 'Escape') {\n cancelCapture();\n return;\n }\n const combo = comboFromEvent(e);\n if (!combo) return; // bare modifier — keep listening\n attemptAssign(capturingId.value, combo);\n return;\n }\n // Modal open but idle: let Esc (close) and Tab (focus nav) through,\n // swallow everything else so explorer shortcuts can't fire behind us.\n if (e.key === 'Escape' || e.key === 'Tab') return;\n e.stopPropagation();\n}\n\nwatch(\n () => props.open,\n (open) => {\n if (open) {\n window.addEventListener('keydown', onWindowKeydown, true);\n } else {\n window.removeEventListener('keydown', onWindowKeydown, true);\n capturingId.value = null;\n conflict.value = null;\n }\n },\n);\n\nonBeforeUnmount(() => window.removeEventListener('keydown', onWindowKeydown, true));\n\nfunction onClose() {\n if (capturingId.value) {\n cancelCapture();\n return;\n }\n emit('close');\n}\n</script>\n\n<template>\n <Modal :open=\"open\" :title=\"t('shortcuts.settings.title')\" size=\"lg\" :theme=\"theme\" @close=\"onClose\">\n <div class=\"fe-shortset\">\n <div class=\"fe-shortset__topbar\">\n <p class=\"fe-shortset__hint\">{{ t('shortcuts.settings.hint') }}</p>\n <button\n type=\"button\"\n class=\"fe-btn fe-shortset__reset-all\"\n :disabled=\"!anyOverridden\"\n @click=\"onResetAll\"\n >\n ↺ {{ t('shortcuts.settings.reset_all') }}\n </button>\n </div>\n\n <section v-for=\"g in groups\" :key=\"g.key\" class=\"fe-shortset__group\">\n <h3 class=\"fe-shortcuts__heading\">{{ t(g.key) }}</h3>\n <div\n v-for=\"s in g.items\"\n :key=\"s.id\"\n class=\"fe-shortset__item\"\n :class=\"{\n 'is-capturing': capturingId === s.id,\n 'is-conflict': conflict?.id === s.id,\n }\"\n >\n <div class=\"fe-shortset__row\">\n <span class=\"fe-shortset__label\">\n {{ t(s.labelKey) }}\n <span v-if=\"s.overridden\" class=\"fe-shortcuts__custom\" :title=\"t('shortcuts.settings.customized')\">●</span>\n </span>\n <span class=\"fe-shortset__keys\">\n <span v-if=\"capturingId === s.id\" class=\"fe-shortset__capture\" role=\"status\">\n {{ t('shortcuts.settings.capture') }}\n </span>\n <template v-else>\n <span v-if=\"s.keys.length === 0\" class=\"fe-shortcuts__unbound\">\n {{ t('shortcuts.settings.unbound') }}\n </span>\n <template v-for=\"(combo, i) in s.keys\" v-else :key=\"combo\">\n <kbd class=\"fe-kbd\">{{ combo }}</kbd>\n <span v-if=\"i < s.keys.length - 1\" class=\"fe-shortcuts__or\" aria-hidden=\"true\">/</span>\n </template>\n </template>\n </span>\n <span class=\"fe-shortset__actions\">\n <template v-if=\"s.customizable\">\n <button\n v-if=\"capturingId !== s.id\"\n type=\"button\"\n class=\"fe-btn fe-shortset__btn\"\n @click=\"beginCapture(s.id)\"\n >\n {{ t('shortcuts.settings.change') }}\n </button>\n <button\n v-else\n type=\"button\"\n class=\"fe-btn fe-shortset__btn\"\n @click=\"cancelCapture\"\n >\n {{ t('shortcuts.settings.conflict_cancel') }}\n </button>\n <button\n v-if=\"s.overridden\"\n type=\"button\"\n class=\"fe-btn fe-btn--icon-only fe-shortset__btn\"\n :title=\"t('shortcuts.settings.reset')\"\n :aria-label=\"t('shortcuts.settings.reset')\"\n @click=\"onReset(s.id)\"\n >\n ↺\n </button>\n </template>\n <span v-else class=\"fe-shortset__fixed\">{{ t('shortcuts.settings.fixed') }}</span>\n </span>\n </div>\n <div v-if=\"conflict && conflict.id === s.id\" class=\"fe-shortset__conflict\" role=\"alert\">\n <span class=\"fe-shortset__conflict-msg\">\n <kbd class=\"fe-kbd\">{{ conflict.combo }}</kbd>\n {{\n conflict.fixed\n ? t('shortcuts.settings.conflict_fixed', { name: labelOf(conflict.conflictId) })\n : t('shortcuts.settings.conflict', { name: labelOf(conflict.conflictId) })\n }}\n </span>\n <span class=\"fe-shortset__conflict-actions\">\n <button\n v-if=\"!conflict.fixed\"\n type=\"button\"\n class=\"fe-btn fe-btn--danger fe-shortset__btn\"\n @click=\"confirmConflictTake\"\n >\n {{ t('shortcuts.settings.conflict_take') }}\n </button>\n <button type=\"button\" class=\"fe-btn fe-shortset__btn\" @click=\"dismissConflict\">\n {{ t('shortcuts.settings.conflict_cancel') }}\n </button>\n </span>\n </div>\n </div>\n </section>\n </div>\n <template #actions>\n <button type=\"button\" class=\"fe-btn\" @click=\"onClose\">{{ t('viewer.close') }}</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 /* wiring:e2 — false hides the \"Düzenle\" / \"Yeni Sekmede Aç\" buttons.\n * The standalone route fetches RAW server bytes, which inside an\n * E2E-encrypted folder is ciphertext (and its save path could clobber\n * the encrypted blob) — the host disables the escape hatches there. */\n newTabEnabled?: boolean;\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 || 'same-origin',\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 ? t('viewer.saving') : (mdDirty ? t('viewer.save') : t('viewer.saved')) }}\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 ? t('viewer.editor_loading') : t('viewer.read_only') }}\n </span>\n <span v-if=\"saveOk\" class=\"fe-preview__code-status fe-preview__code-status--ok\">✓ {{ t('viewer.saved') }}</span>\n <span v-if=\"saveError\" class=\"fe-preview__code-status fe-preview__code-status--err\" :title=\"saveError\">✗ {{ t('viewer.save_error') }}</span>\n <span v-if=\"openMode === 'view'\" class=\"fe-preview__code-status\">{{ t('viewer.read_only') }}</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 ? t('viewer.saving') : t('viewer.save') }}</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\">{{ t('viewer.download') }}</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>{{ t('viewer.no_preview') }}</p>\n <a :href=\"download\" class=\"fe-btn fe-btn--primary\">{{ t('viewer.download') }}</a>\n </div>\n </template>\n </div>\n <template #actions>\n <button\n v-if=\"file && openMode === 'view' && canEditKind && newTabEnabled !== false /* wiring:e2 */\"\n type=\"button\"\n class=\"fe-btn fe-btn--primary\"\n @click=\"openEditInNewTab\"\n >✏ {{ t('viewer.edit') }}</button>\n <button\n v-if=\"file && newTabEnabled !== false /* wiring:e2 */\"\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')\">{{ t('viewer.close') }}</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 * QuickLook — wiring:c2 Space quick-look overlay.\n *\n * A thin behavioural wrapper over the existing PreviewModal (view\n * mode), so every viewer the modal knows (image/video/pdf/office/code/\n * 3D/archive/…) works in quick-look for free. What this layer adds:\n *\n * - Space closes again (macOS Quick Look convention)\n * - ← ↑ / → ↓ ask the host to move the selection; the host keeps the\n * `file` prop in sync so the preview follows the selection\n * - Enter promotes the peek into the full open flow (emit 'open-full')\n * - a small floating hint bar with the key legend\n *\n * Keys are handled in window CAPTURE phase with stopPropagation so the\n * global shortcut registry never double-handles them; events that\n * originate in a form control inside a viewer (e.g. the CSV filter\n * input) are left alone. Esc is untouched — PreviewModal's own Modal\n * already closes on it.\n */\nimport { onBeforeUnmount, watch } from 'vue';\nimport type { FileNode } from '../types/FileNode';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\nimport PreviewModal from '../modals/PreviewModal.vue';\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 authHeaders?: () => Record<string, string>;\n authCredentials?: RequestCredentials;\n drawioUrl?: string | null;\n pdfWorkerUrl?: string | null;\n viewerBaseUrl?: string | null;\n theme?: 'light' | 'dark' | 'auto';\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n /** Arrow navigation: -1 = previous file, +1 = next file. */\n (e: 'nav', delta: number): void;\n /** Enter — close the peek and open the file for real. */\n (e: 'open-full'): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\n\nfunction inFormControl(target: EventTarget | null): boolean {\n const el = target as HTMLElement | null;\n return !!(\n el &&\n (el.tagName === 'INPUT' ||\n el.tagName === 'TEXTAREA' ||\n el.tagName === 'SELECT' ||\n el.isContentEditable)\n );\n}\n\nfunction onKeydown(e: KeyboardEvent) {\n if (!props.open) return;\n if (e.ctrlKey || e.metaKey || e.altKey) return;\n if (inFormControl(e.target)) return;\n switch (e.key) {\n case ' ':\n e.preventDefault();\n e.stopPropagation();\n emit('close');\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n e.preventDefault();\n e.stopPropagation();\n emit('nav', 1);\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n e.preventDefault();\n e.stopPropagation();\n emit('nav', -1);\n break;\n case 'Enter':\n e.preventDefault();\n e.stopPropagation();\n emit('open-full');\n break;\n }\n}\n\nwatch(\n () => props.open,\n (open) => {\n if (open) window.addEventListener('keydown', onKeydown, true);\n else window.removeEventListener('keydown', onKeydown, true);\n },\n { immediate: true },\n);\n\nonBeforeUnmount(() => window.removeEventListener('keydown', onKeydown, true));\n</script>\n\n<template>\n <PreviewModal\n class=\"fe-quicklook\"\n :open=\"open\"\n :locale=\"locale\"\n :file=\"file\"\n :theme=\"theme\"\n :preview-url=\"previewUrl\"\n :download-url=\"downloadUrl\"\n :only-office-base=\"onlyOfficeBase\"\n :only-office-config-endpoint=\"onlyOfficeConfigEndpoint\"\n open-mode=\"view\"\n :auth-headers=\"authHeaders\"\n :auth-credentials=\"authCredentials\"\n :drawio-url=\"drawioUrl\"\n :pdf-worker-url=\"pdfWorkerUrl\"\n :viewer-base-url=\"viewerBaseUrl\"\n @close=\"emit('close')\"\n />\n <transition name=\"fe-toast\">\n <div\n v-if=\"open\"\n class=\"fe fe-ql-hint\"\n :class=\"{\n 'fe--theme-light': theme === 'light',\n 'fe--theme-dark': theme === 'dark',\n }\"\n aria-hidden=\"true\"\n >\n <kbd class=\"fe-kbd\">Space</kbd> {{ t('quicklook.hint_close') }}\n <span class=\"fe-ql-hint__sep\">·</span>\n <kbd class=\"fe-kbd\">↑</kbd><kbd class=\"fe-kbd\">↓</kbd> {{ t('quicklook.hint_nav') }}\n <span class=\"fe-ql-hint__sep\">·</span>\n <kbd class=\"fe-kbd\">Enter</kbd> {{ t('quicklook.hint_open') }}\n </div>\n </transition>\n</template>\n","<script setup lang=\"ts\">\n/**\n * OperationsCenter — the single visible surface for long-running work\n * (wiring:c3). Compact bottom-right badge (active count + aggregate\n * progress ring; hidden when idle) that expands into a panel: active\n * operations on top, session history below.\n *\n * Renders whatever the useOperations store aggregates — uploads, ops-queue\n * jobs, future convert/archive kinds — with one uniform row template.\n * Cancel / retry / dismiss route back through the store's action registry\n * to the owning publisher.\n */\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport type { Operation, OperationsStore } from '../composables/useOperations';\nimport { useLocale } from '../composables/useLocale';\n\nconst props = defineProps<{\n center: OperationsStore;\n locale: LocaleCode;\n narrow?: boolean;\n}>();\n\nconst { t, formatSize } = useLocale(() => props.locale);\n\nconst open = ref(false);\nconst rootEl = ref<HTMLElement | null>(null);\n\nconst active = computed(() => props.center.active.value);\nconst history = computed(() => props.center.history.value);\nconst hasError = computed(() => props.center.hasError.value);\nconst overall = computed(() => props.center.overallPercent.value);\nconst runningCount = computed(() => props.center.runningCount.value);\n\n// Badge visible while anything is active; once the panel is open it stays\n// up (showing history) until the user closes it. Idle + closed → hidden.\nconst visible = computed(() => active.value.length > 0 || (open.value && history.value.length > 0));\n\nwatch(visible, (v) => {\n if (!v) open.value = false;\n});\n\n// ---- progress ring ----\nconst RING_R = 8.5;\nconst RING_C = 2 * Math.PI * RING_R;\nconst ringOffset = computed(() => {\n const p = overall.value;\n if (p === null) return RING_C * 0.72; // spinner arc\n return RING_C * (1 - Math.min(100, Math.max(0, p)) / 100);\n});\nconst ringSpin = computed(() => overall.value === null && runningCount.value > 0);\n\nconst pctText = computed(() => {\n if (runningCount.value === 0 || overall.value === null) return '';\n return t('opc.percent', { n: overall.value });\n});\n\nconst badgeAria = computed(() => t('opc.aria_badge', { n: active.value.length }));\n\n// ---- row helpers ----\nconst KIND_ICONS: Record<Operation['kind'], string> = {\n upload: 'M12 16V5M7 9.5 12 5l5 4.5M5 19h14',\n copy: 'M9 9h11v11H9zM5 15V4h11',\n move: 'M4 12h13M12 6l6 6-6 6',\n delete: 'M5 7h14M9 7V5h6v2M8 7l1 13h6l1-13',\n convert: 'M20 8A8 8 0 0 0 6 6L4 8M4 16a8 8 0 0 0 14 2l2-2M20 3v5h-5M4 21v-5h5',\n archive: 'M4 8V5h16v3zM5 8h14v12H5zM10 12h4',\n};\n\nfunction kindLabel(o: Operation): string {\n return t(`opc.kind.${o.kind}`);\n}\n\nfunction rowTitle(o: Operation): string {\n return o.name || kindLabel(o);\n}\n\nfunction statusText(o: Operation): string {\n if (o.status === 'running') {\n if (o.queued) return t('opc.queued');\n if (o.totalBytes && o.totalBytes > 0) {\n return `${formatSize(o.uploadedBytes ?? 0)} / ${formatSize(o.totalBytes)}`;\n }\n if (o.totalCount && o.totalCount > 0) {\n return `${o.doneCount ?? 0}/${o.totalCount}`;\n }\n return t('opc.status.running');\n }\n if (o.status === 'done') return t('opc.status.done');\n if (o.status === 'aborted') return t('opc.status.aborted');\n return o.error || t('opc.status.error');\n}\n\nfunction chipText(o: Operation): string {\n return t(`opc.status.${o.status === 'running' ? 'running' : o.status}`);\n}\n\n// ---- outside click + Escape ----\nfunction onDocPointerDown(ev: MouseEvent) {\n if (!open.value) return;\n const el = rootEl.value;\n if (el && ev.target instanceof Node && !el.contains(ev.target)) open.value = false;\n}\nfunction onDocKeydown(ev: KeyboardEvent) {\n if (open.value && ev.key === 'Escape') open.value = false;\n}\nonMounted(() => {\n document.addEventListener('mousedown', onDocPointerDown);\n document.addEventListener('keydown', onDocKeydown);\n});\nonBeforeUnmount(() => {\n document.removeEventListener('mousedown', onDocPointerDown);\n document.removeEventListener('keydown', onDocKeydown);\n});\n</script>\n\n<template>\n <div\n v-if=\"visible\"\n ref=\"rootEl\"\n class=\"fe-opc\"\n :class=\"{ 'fe-opc--narrow': narrow, 'fe-opc--open': open }\"\n >\n <transition name=\"fe-opc-pop\">\n <section v-if=\"open\" class=\"fe-opc__panel\" role=\"dialog\" :aria-label=\"t('opc.title')\">\n <header class=\"fe-opc__head\">\n <strong>{{ t('opc.title') }}</strong>\n <button\n type=\"button\"\n class=\"fe-opc__x\"\n :aria-label=\"t('opc.close')\"\n @click=\"open = false\"\n >×</button>\n </header>\n <div class=\"fe-opc__body\">\n <div v-if=\"active.length > 0\" class=\"fe-opc__section\" aria-live=\"polite\">\n <h3 class=\"fe-opc__section-title\">{{ t('opc.active') }}</h3>\n <ul class=\"fe-opc__list\">\n <li\n v-for=\"o in active\"\n :key=\"o.key\"\n class=\"fe-opc__item\"\n :class=\"`is-${o.status}`\"\n >\n <svg\n class=\"fe-opc__kicon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path :d=\"KIND_ICONS[o.kind]\" />\n </svg>\n <div class=\"fe-opc__mid\">\n <div class=\"fe-opc__name\" :title=\"rowTitle(o)\">{{ rowTitle(o) }}</div>\n <div class=\"fe-opc__sub\">\n <span class=\"fe-opc__kind\">{{ kindLabel(o) }}</span>\n <span class=\"fe-opc__dot\" aria-hidden=\"true\">·</span>\n <span class=\"fe-opc__state\">{{ statusText(o) }}</span>\n </div>\n <div\n v-if=\"o.status === 'running' && o.percent !== null\"\n class=\"fe-opc__bar\"\n role=\"progressbar\"\n :aria-valuenow=\"o.percent\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n >\n <div class=\"fe-opc__bar-fill\" :style=\"{ width: o.percent + '%' }\" />\n </div>\n </div>\n <span\n v-if=\"o.status === 'running' && o.percent === null && !o.queued\"\n class=\"fe-opc__spin\"\n aria-hidden=\"true\"\n />\n <div class=\"fe-opc__acts\">\n <button\n v-if=\"o.status === 'running' && o.cancellable\"\n type=\"button\"\n class=\"fe-opc__act\"\n @click=\"center.cancel(o.key)\"\n >{{ t('opc.cancel') }}</button>\n <button\n v-if=\"o.status === 'error' && o.retryable\"\n type=\"button\"\n class=\"fe-opc__act fe-opc__act--retry\"\n @click=\"center.retry(o.key)\"\n >{{ t('opc.retry') }}</button>\n <button\n v-if=\"o.status !== 'running'\"\n type=\"button\"\n class=\"fe-opc__x\"\n :aria-label=\"t('opc.dismiss')\"\n @click=\"center.dismiss(o.key)\"\n >×</button>\n </div>\n </li>\n </ul>\n </div>\n\n <div v-if=\"history.length > 0\" class=\"fe-opc__section\">\n <h3 class=\"fe-opc__section-title\">\n {{ t('opc.history') }}\n <button type=\"button\" class=\"fe-opc__act\" @click=\"center.clearHistory()\">\n {{ t('opc.clear') }}\n </button>\n </h3>\n <ul class=\"fe-opc__list fe-opc__list--history\">\n <li\n v-for=\"o in history\"\n :key=\"'h-' + o.key\"\n class=\"fe-opc__item fe-opc__item--history\"\n :class=\"`is-${o.status}`\"\n >\n <svg\n class=\"fe-opc__kicon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path :d=\"KIND_ICONS[o.kind]\" />\n </svg>\n <div class=\"fe-opc__mid\">\n <div class=\"fe-opc__name\" :title=\"rowTitle(o)\">{{ rowTitle(o) }}</div>\n <div v-if=\"o.status === 'error' && o.error\" class=\"fe-opc__sub fe-opc__sub--err\">\n {{ o.error }}\n </div>\n </div>\n <span class=\"fe-opc__chip\" :class=\"`is-${o.status}`\">{{ chipText(o) }}</span>\n </li>\n </ul>\n </div>\n\n <p v-if=\"active.length === 0 && history.length === 0\" class=\"fe-opc__empty\">\n {{ t('opc.empty') }}\n </p>\n </div>\n </section>\n </transition>\n\n <button\n type=\"button\"\n class=\"fe-opc__badge\"\n :class=\"{ 'is-error': hasError }\"\n :aria-expanded=\"open\"\n :aria-label=\"badgeAria\"\n @click=\"open = !open\"\n >\n <svg\n class=\"fe-opc__ring\"\n :class=\"{ 'fe-opc__ring--spin': ringSpin }\"\n viewBox=\"0 0 22 22\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <circle class=\"fe-opc__ring-track\" cx=\"11\" cy=\"11\" :r=\"RING_R\" fill=\"none\" stroke-width=\"2.5\" />\n <circle\n class=\"fe-opc__ring-fill\"\n cx=\"11\"\n cy=\"11\"\n :r=\"RING_R\"\n fill=\"none\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n :stroke-dasharray=\"RING_C\"\n :stroke-dashoffset=\"ringOffset\"\n transform=\"rotate(-90 11 11)\"\n />\n </svg>\n <span class=\"fe-opc__count\">{{ active.length }}</span>\n <span v-if=\"pctText\" class=\"fe-opc__pct\">{{ pctText }}</span>\n </button>\n </div>\n</template>\n","/**\n * useOperations — unified long-running-operation store (wiring:c3).\n *\n * One presentation-level aggregation point for everything that used to be\n * scattered across corner UIs:\n * - uploads (useUploadChunked jobs / legacy multipart rows)\n * - ops-queue jobs (usePendingOps copy/move/delete worker ops)\n * - future kinds (convert / archive — same `sync()` contract, own group)\n *\n * The store does NOT talk to the network. Publishers (renderless\n * UploadProgress / PendingOpsTray adapters) reconcile their reactive source\n * lists into the store via `sync(group, items)`; OperationsCenter renders the\n * merged picture (badge + panel). Action callbacks (cancel/retry/dismiss)\n * are registered per row so the panel can route user intent back to the\n * owning surface without the store knowing any transport details.\n *\n * Lifecycle rules (per the İşlem Merkezi contract):\n * - running rows live in `active`;\n * - done/aborted rows linger in `active` for DONE_LINGER_MS (\"bitti\"\n * flash) then move to `history` (session-only, capped);\n * - error rows are STICKY: they stay in `active` until the user\n * dismisses or retries them — even after the source list swept them\n * (usePendingOps drops terminal ops after its RETAIN window).\n */\n\nimport { computed, getCurrentScope, onScopeDispose, ref } from 'vue';\n\nexport type OperationKind = 'upload' | 'copy' | 'move' | 'delete' | 'convert' | 'archive';\nexport type OperationStatus = 'running' | 'done' | 'error' | 'aborted';\n\n/** What a publisher hands to `sync()` for one row. */\nexport interface OperationInput {\n /** Stable id within the group (upload uuid / ops row id). */\n id: string | number;\n kind: OperationKind;\n /** Primary label — file name or target path. '' → renderer falls back to the kind verb. */\n name: string;\n /** 0..100, or null for indeterminate (renderer shows a spinner). */\n percent: number | null;\n status: OperationStatus;\n error?: string | null;\n /** Queue op accepted but not started yet (\"Sırada\"). */\n queued?: boolean;\n /** Progress counters for queue ops (3/5 items). */\n doneCount?: number;\n totalCount?: number;\n /** Byte progress for uploads. */\n uploadedBytes?: number;\n totalBytes?: number;\n cancellable?: boolean;\n retryable?: boolean;\n}\n\nexport interface OperationActions {\n cancel?: () => void;\n /** Clean the row out of the OWNING source list (called on retire/dismiss). */\n dismiss?: () => void;\n retry?: () => void;\n}\n\nexport interface Operation {\n /** `${group}:${id}` — unique across publishers. */\n key: string;\n kind: OperationKind;\n name: string;\n percent: number | null;\n status: OperationStatus;\n error: string | null;\n queued: boolean;\n doneCount: number | null;\n totalCount: number | null;\n uploadedBytes: number | null;\n totalBytes: number | null;\n cancellable: boolean;\n retryable: boolean;\n startedAt: number;\n settledAt: number | null;\n}\n\nconst DONE_LINGER_MS = 4000;\nconst HISTORY_CAP = 50;\n\nfunction toOperation(key: string, input: OperationInput, prev?: Operation): Operation {\n const terminal = input.status !== 'running';\n return {\n key,\n kind: input.kind,\n name: input.name,\n percent: input.percent,\n status: input.status,\n error: input.error ?? null,\n queued: input.queued ?? false,\n doneCount: input.doneCount ?? null,\n totalCount: input.totalCount ?? null,\n uploadedBytes: input.uploadedBytes ?? null,\n totalBytes: input.totalBytes ?? null,\n cancellable: input.cancellable ?? false,\n retryable: input.retryable ?? false,\n startedAt: prev?.startedAt ?? Date.now(),\n settledAt: prev?.settledAt ?? (terminal ? Date.now() : null),\n };\n}\n\nexport function useOperations() {\n const active = ref<Operation[]>([]);\n const history = ref<Operation[]>([]);\n\n const actions = new Map<string, OperationActions>();\n /** Keys already moved to history — sync must not resurrect them. */\n const retired = new Set<string>();\n const lingerTimers = new Map<string, ReturnType<typeof setTimeout>>();\n\n function clearTimer(key: string) {\n const tm = lingerTimers.get(key);\n if (tm !== undefined) {\n clearTimeout(tm);\n lingerTimers.delete(key);\n }\n }\n\n /** Move a row from active to the session history (newest first). */\n function retire(key: string, opts: { toHistory?: boolean } = {}) {\n clearTimer(key);\n const idx = active.value.findIndex((o) => o.key === key);\n if (idx === -1) return;\n const [op] = active.value.splice(idx, 1);\n active.value = [...active.value];\n retired.add(key);\n if (opts.toHistory !== false) {\n history.value = [{ ...op, settledAt: op.settledAt ?? Date.now() }, ...history.value].slice(\n 0,\n HISTORY_CAP,\n );\n }\n }\n\n function scheduleLinger(key: string) {\n if (lingerTimers.has(key)) return;\n lingerTimers.set(\n key,\n setTimeout(() => {\n lingerTimers.delete(key);\n // Retire + ask the owning source to drop its row so it doesn't\n // resurrect on the next sync (uploads keep done rows forever).\n const acts = actions.get(key);\n retire(key);\n acts?.dismiss?.();\n }, DONE_LINGER_MS),\n );\n }\n\n /**\n * Full-list reconcile for one publisher group. Upserts every present row,\n * removes vanished ones (sticky errors excepted), and manages the\n * done-linger → history hand-off.\n */\n function sync(\n group: string,\n items: Array<{ input: OperationInput; actions?: OperationActions }>,\n ): void {\n const prefix = `${group}:`;\n const present = new Set<string>();\n let next = [...active.value];\n let changed = false;\n\n for (const item of items) {\n const key = `${group}:${item.input.id}`;\n present.add(key);\n if (item.actions) actions.set(key, item.actions);\n if (retired.has(key)) continue; // already history — don't resurrect\n const idx = next.findIndex((o) => o.key === key);\n const op = toOperation(key, item.input, idx === -1 ? undefined : next[idx]);\n if (idx === -1) {\n next = [op, ...next];\n changed = true;\n } else if (JSON.stringify(next[idx]) !== JSON.stringify(op)) {\n next[idx] = op;\n changed = true;\n }\n if (op.status === 'done' || op.status === 'aborted') scheduleLinger(key);\n }\n\n // Vanished from source: running → drop silently (superseded elsewhere),\n // done/aborted → straight to history, error → sticky (keep visible).\n for (const o of [...next]) {\n if (!o.key.startsWith(prefix) || present.has(o.key)) continue;\n if (o.status === 'error') continue;\n clearTimer(o.key);\n next = next.filter((x) => x.key !== o.key);\n changed = true;\n if (o.status !== 'running') {\n retired.add(o.key);\n history.value = [{ ...o, settledAt: o.settledAt ?? Date.now() }, ...history.value].slice(\n 0,\n HISTORY_CAP,\n );\n }\n }\n\n // Bookkeeping: retired keys whose source rows are gone can be forgotten\n // (their ids won't reappear — uuids / monotonic op ids).\n for (const key of [...retired]) {\n if (key.startsWith(prefix) && !present.has(key)) retired.delete(key);\n }\n for (const key of [...actions.keys()]) {\n if (key.startsWith(prefix) && !present.has(key) && !active.value.some((o) => o.key === key)) {\n // keep actions for rows still on screen (sticky errors)\n if (!next.some((o) => o.key === key)) actions.delete(key);\n }\n }\n\n if (changed) active.value = next;\n }\n\n function cancel(key: string) {\n actions.get(key)?.cancel?.();\n }\n\n function retry(key: string) {\n const acts = actions.get(key);\n retire(key); // failed attempt goes to history; retry publishes a fresh row\n acts?.dismiss?.();\n acts?.retry?.();\n }\n\n function dismiss(key: string) {\n const acts = actions.get(key);\n retire(key);\n acts?.dismiss?.();\n }\n\n function clearHistory() {\n history.value = [];\n }\n\n const runningCount = computed(\n () => active.value.filter((o) => o.status === 'running').length,\n );\n const errorCount = computed(() => active.value.filter((o) => o.status === 'error').length);\n const hasError = computed(() => errorCount.value > 0);\n\n /**\n * Aggregate progress across determinate running rows (uploads weighted by\n * bytes, queue ops by item counts). null → nothing determinate is running\n * (badge ring spins instead of filling).\n */\n const overallPercent = computed<number | null>(() => {\n const running = active.value.filter((o) => o.status === 'running');\n let sum = 0;\n let n = 0;\n for (const o of running) {\n let frac: number | null = null;\n if (o.totalBytes && o.totalBytes > 0) {\n frac = Math.min(1, (o.uploadedBytes ?? 0) / o.totalBytes);\n } else if (o.totalCount && o.totalCount > 0) {\n frac = Math.min(1, (o.doneCount ?? 0) / o.totalCount);\n } else if (o.percent !== null) {\n frac = Math.min(1, o.percent / 100);\n }\n if (frac !== null) {\n sum += frac;\n n += 1;\n }\n }\n if (n === 0) return null;\n return Math.round((sum / n) * 100);\n });\n\n if (getCurrentScope()) {\n onScopeDispose(() => {\n for (const tm of lingerTimers.values()) clearTimeout(tm);\n lingerTimers.clear();\n });\n }\n\n return {\n active,\n history,\n runningCount,\n errorCount,\n hasError,\n overallPercent,\n sync,\n cancel,\n retry,\n dismiss,\n clearHistory,\n };\n}\n\nexport type OperationsStore = ReturnType<typeof useOperations>;\n","<script setup lang=\"ts\">\n/**\n * OnboardingTour — wiring:c4 first-use coach-mark tour.\n *\n * A dependency-free spotlight walkthrough: each step targets a live DOM\n * element inside the explorer root (resolved lazily — steps whose target\n * is missing are skipped, so confined embeds with hidden surfaces never\n * show a dangling spotlight). Positioning is hand-rolled with\n * getBoundingClientRect + fixed overlay; the spotlight is a rounded\n * cutout drawn with a huge box-shadow.\n *\n * Teleported under <body> (same reason as ContextMenu: transformed embed\n * ancestors break position:fixed) and re-uses the `.fe-ctx-backdrop--theme-*`\n * classes so the CSS-variable theme cascade applies outside the `.fe` tree.\n *\n * Persistence (`filex.tourDone`) is the PARENT's job — the tour only\n * emits `close`; FileExplorer decides when it counts as done.\n */\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport type { LocaleCode, ThemeMode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\n\nconst props = defineProps<{\n open: boolean;\n locale: LocaleCode;\n /** Explorer root — targets are resolved inside it only. */\n root: HTMLElement | null;\n theme?: ThemeMode;\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\n\n// ------------------------------------------------------------------\n// Step definitions. `target` returns the element to spotlight (null =\n// centered card, e.g. the closing shortcuts step). Buttons without a\n// stable class are found via their localized title attribute — the\n// toolbar gives every icon-only button a title from the same catalogue.\n// ------------------------------------------------------------------\n\nfunction byTitle(root: HTMLElement, label: string): HTMLElement | null {\n const nodes = root.querySelectorAll<HTMLElement>('button[title]');\n for (const el of Array.from(nodes)) {\n if (el.getAttribute('title') === label) return el;\n }\n return null;\n}\n\ninterface TourStep {\n id: string;\n titleKey: string;\n descKey: string;\n target: (root: HTMLElement) => HTMLElement | null;\n}\n\nconst STEPS: TourStep[] = [\n {\n id: 'nav',\n titleKey: 'tour.step.nav.title',\n descKey: 'tour.step.nav.desc',\n target: (r) => r.querySelector<HTMLElement>('.fe-breadcrumb'),\n },\n {\n id: 'upload',\n titleKey: 'tour.step.upload.title',\n descKey: 'tour.step.upload.desc',\n target: (r) =>\n byTitle(r, t('toolbar.upload')) || r.querySelector<HTMLElement>('.fe-fab'),\n },\n {\n id: 'search',\n titleKey: 'tour.step.search.title',\n descKey: 'tour.step.search.desc',\n target: (r) =>\n r.querySelector<HTMLElement>('.fe-search__input') ||\n r.querySelector<HTMLElement>('.fe-toolbar__search-toggle'),\n },\n {\n id: 'view',\n titleKey: 'tour.step.view.title',\n descKey: 'tour.step.view.desc',\n target: (r) => r.querySelector<HTMLElement>('.fe-toolbar__view'),\n },\n {\n id: 'share',\n titleKey: 'tour.step.share.title',\n descKey: 'tour.step.share.desc',\n target: (r) => r.querySelector<HTMLElement>('.fe__body'),\n },\n {\n id: 'help',\n titleKey: 'tour.step.help.title',\n descKey: 'tour.step.help.desc',\n target: () => null,\n },\n];\n\n// Steps re-resolved on every open so surfaces that appeared/disappeared\n// since mount (narrow-mode collapse, RBAC hiding upload…) are honored.\nconst activeSteps = ref<TourStep[]>([]);\nconst stepIdx = ref(0);\n\nconst step = computed<TourStep | null>(() => activeSteps.value[stepIdx.value] ?? null);\nconst total = computed(() => activeSteps.value.length);\n\nfunction resolveSteps() {\n const r = props.root;\n activeSteps.value = STEPS.filter((s) => {\n if (s.id === 'help') return true; // centered card — no DOM dependency\n if (!r) return false;\n const el = s.target(r);\n // Element must exist AND be laid out (visible) — a display:none\n // toolbar section in narrow mode yields a 0×0 rect.\n if (!el) return false;\n const rect = el.getBoundingClientRect();\n return rect.width > 0 && rect.height > 0;\n });\n}\n\n// ------------------------------------------------------------------\n// Spotlight + card geometry\n// ------------------------------------------------------------------\n\ninterface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\nconst spot = ref<Rect | null>(null);\nconst cardStyle = ref<Record<string, string>>({});\nconst cardEl = ref<HTMLElement | null>(null);\n\nconst PAD = 6; // spotlight breathing room around the target\nconst GAP = 12; // gap between spotlight and the card\n\nasync function place() {\n const s = step.value;\n const r = props.root;\n if (!s) return;\n const el = r ? s.target(r) : null;\n if (!el) {\n spot.value = null; // centered card\n cardStyle.value = {};\n return;\n }\n const rect = el.getBoundingClientRect();\n if (rect.width <= 0 && rect.height <= 0) {\n spot.value = null;\n cardStyle.value = {};\n return;\n }\n spot.value = {\n top: rect.top - PAD,\n left: rect.left - PAD,\n width: rect.width + PAD * 2,\n height: rect.height + PAD * 2,\n };\n // Card: below the spotlight when there's room, above otherwise;\n // clamped into the viewport horizontally.\n await nextTick();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const cw = Math.min(340, vw - 24);\n const ch = cardEl.value?.offsetHeight ?? 160;\n let top = rect.bottom + PAD + GAP;\n if (top + ch > vh - 12) top = Math.max(12, rect.top - PAD - GAP - ch);\n let left = rect.left + rect.width / 2 - cw / 2;\n left = Math.min(Math.max(12, left), vw - cw - 12);\n cardStyle.value = {\n top: `${Math.round(top)}px`,\n left: `${Math.round(left)}px`,\n width: `${cw}px`,\n };\n}\n\nfunction onViewportChange() {\n if (props.open) void place();\n}\n\n// ------------------------------------------------------------------\n// Flow\n// ------------------------------------------------------------------\n\nfunction next() {\n if (stepIdx.value >= total.value - 1) {\n emit('close');\n return;\n }\n stepIdx.value += 1;\n}\n\nfunction back() {\n if (stepIdx.value > 0) stepIdx.value -= 1;\n}\n\nfunction skip() {\n emit('close');\n}\n\nfunction onKey(e: KeyboardEvent) {\n if (!props.open) return;\n if (e.key === 'Escape') {\n e.stopPropagation();\n skip();\n } else if (e.key === 'ArrowRight' || e.key === 'Enter') {\n e.preventDefault();\n next();\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n back();\n }\n}\n\nwatch(\n () => props.open,\n async (v) => {\n if (v) {\n stepIdx.value = 0;\n resolveSteps();\n await nextTick();\n await place();\n cardEl.value?.focus();\n }\n },\n);\n\nwatch(stepIdx, async () => {\n await place();\n cardEl.value?.focus();\n});\n\nonMounted(() => {\n window.addEventListener('resize', onViewportChange);\n window.addEventListener('scroll', onViewportChange, true);\n});\nonBeforeUnmount(() => {\n window.removeEventListener('resize', onViewportChange);\n window.removeEventListener('scroll', onViewportChange, true);\n});\n\n// Theme cascade outside `.fe` — same pattern as ContextMenu.\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});\nconst themeClass = computed(() => `fe-ctx-backdrop--theme-${props.theme || 'auto'}`);\n</script>\n\n<template>\n <Teleport to=\"body\">\n <transition name=\"fe-tour\">\n <div\n v-if=\"open && step\"\n class=\"fe-tour\"\n :class=\"themeClass\"\n :data-prefers-dark=\"prefersDark ? '1' : '0'\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-label=\"t('tour.aria')\"\n @keydown=\"onKey\"\n >\n <!-- Spotlight: rounded cutout via huge box-shadow. Centered steps\n (no target) use a full-dim overlay instead. -->\n <div\n v-if=\"spot\"\n class=\"fe-tour__spot\"\n :style=\"{\n top: spot.top + 'px',\n left: spot.left + 'px',\n width: spot.width + 'px',\n height: spot.height + 'px',\n }\"\n aria-hidden=\"true\"\n />\n <div v-else class=\"fe-tour__dim\" aria-hidden=\"true\" />\n\n <div\n ref=\"cardEl\"\n class=\"fe-tour__card\"\n :class=\"{ 'fe-tour__card--center': !spot }\"\n :style=\"spot ? cardStyle : {}\"\n tabindex=\"-1\"\n >\n <p class=\"fe-tour__progress\" aria-hidden=\"true\">\n {{ t('tour.progress', { n: stepIdx + 1, m: total }) }}\n </p>\n <h3 class=\"fe-tour__title\">{{ t(step.titleKey) }}</h3>\n <p class=\"fe-tour__desc\">{{ t(step.descKey) }}</p>\n <div class=\"fe-tour__dots\" aria-hidden=\"true\">\n <span\n v-for=\"(s, i) in activeSteps\"\n :key=\"s.id\"\n class=\"fe-tour__dot\"\n :class=\"{ 'is-active': i === stepIdx }\"\n />\n </div>\n <div class=\"fe-tour__actions\">\n <button type=\"button\" class=\"fe-btn fe-tour__skip\" @click=\"skip\">\n {{ t('tour.skip') }}\n </button>\n <span class=\"fe-tour__actions-spacer\" />\n <button\n v-if=\"stepIdx > 0\"\n type=\"button\"\n class=\"fe-btn\"\n @click=\"back\"\n >\n {{ t('tour.back') }}\n </button>\n <button type=\"button\" class=\"fe-btn fe-btn--primary\" @click=\"next\">\n {{ stepIdx >= total - 1 ? t('tour.done') : t('tour.next') }}\n </button>\n </div>\n </div>\n </div>\n </transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\n/**\n * TabBar — wiring:d1 sekme şeridi.\n *\n * Thin strip that sits ABOVE the toolbar. The host renders it only when\n * 2+ tabs exist (embed pixel-parity: a single tab shows nothing at all).\n * Purely presentational: every mutation is an emit; useTabs owns state.\n *\n * Interactions:\n * click tab → select\n * × / middle-tık → close\n * + → new tab (clone of the current location)\n * drag → reorder (HTML5 DnD; live-swap while dragging)\n * ⫿ (split) → toggle the active tab's secondary pane\n *\n * UNSCOPED styles (`fe-tabs*` in base.css) — the webcomponent build\n * cannot carry scoped data-v hashes (v0.5.0 discovery).\n */\nimport { ref } from 'vue';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\n\nexport interface TabItem {\n id: string;\n label: string;\n /** true → the tab carries a split pane (small accent dot). */\n split: boolean;\n}\n\nconst props = defineProps<{\n tabs: TabItem[];\n activeId: string;\n locale: LocaleCode;\n /** false → the split toggle is hidden (narrow embeds). */\n splitEnabled?: boolean;\n /** true → the split toggle renders pressed (active tab has a pane). */\n splitActive?: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: 'select', id: string): void;\n (e: 'close', id: string): void;\n (e: 'new'): void;\n (e: 'reorder', from: number, to: number): void;\n (e: 'toggle-split'): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\n\n// ---- drag-sort (HTML5 DnD, live swap) ------------------------------\nconst dragIndex = ref<number | null>(null);\nconst overIndex = ref<number | null>(null);\n\nfunction onDragStart(i: number, ev: DragEvent) {\n dragIndex.value = i;\n if (ev.dataTransfer) {\n ev.dataTransfer.effectAllowed = 'move';\n // Firefox requires SOME payload for a drag to start. Deliberately not\n // the internal file-DnD MIME, so the explorer's drop surfaces ignore it.\n ev.dataTransfer.setData('text/plain', props.tabs[i]?.id ?? '');\n }\n}\n\nfunction onDragOver(i: number, ev: DragEvent) {\n if (dragIndex.value === null) return;\n ev.preventDefault();\n ev.stopPropagation();\n if (ev.dataTransfer) ev.dataTransfer.dropEffect = 'move';\n overIndex.value = i;\n}\n\nfunction onDragLeave(i: number) {\n if (overIndex.value === i) overIndex.value = null;\n}\n\nfunction onDrop(i: number, ev: DragEvent) {\n if (dragIndex.value === null) return;\n ev.preventDefault();\n ev.stopPropagation();\n if (dragIndex.value !== i) emit('reorder', dragIndex.value, i);\n dragIndex.value = null;\n overIndex.value = null;\n}\n\nfunction onDragEnd() {\n dragIndex.value = null;\n overIndex.value = null;\n}\n\n// Middle-click closes a tab (browser convention). The mousedown guard\n// cancels Chromium's autoscroll on the scrollable strip — without it the\n// auxclick event is never generated.\nfunction onTabMiddleDown(ev: MouseEvent) {\n if (ev.button === 1) ev.preventDefault();\n}\nfunction onAux(id: string, ev: MouseEvent) {\n if (ev.button !== 1) return;\n ev.preventDefault();\n ev.stopPropagation();\n emit('close', id);\n}\n</script>\n\n<template>\n <div class=\"fe-tabs\" role=\"tablist\" :aria-label=\"t('tabs.strip')\">\n <div class=\"fe-tabs__scroll\">\n <div\n v-for=\"(tab, i) in tabs\"\n :key=\"tab.id\"\n class=\"fe-tabs__tab\"\n :class=\"{\n 'is-active': tab.id === activeId,\n 'is-dragover': overIndex === i && dragIndex !== null && dragIndex !== i,\n }\"\n role=\"tab\"\n :aria-selected=\"tab.id === activeId ? 'true' : 'false'\"\n tabindex=\"0\"\n draggable=\"true\"\n :title=\"tab.label\"\n @click=\"emit('select', tab.id)\"\n @keydown.enter.prevent=\"emit('select', tab.id)\"\n @mousedown=\"onTabMiddleDown($event)\"\n @auxclick=\"onAux(tab.id, $event)\"\n @dragstart=\"onDragStart(i, $event)\"\n @dragover=\"onDragOver(i, $event)\"\n @dragleave=\"onDragLeave(i)\"\n @drop=\"onDrop(i, $event)\"\n @dragend=\"onDragEnd\"\n >\n <span v-if=\"tab.split\" class=\"fe-tabs__splitdot\" aria-hidden=\"true\"></span>\n <span class=\"fe-tabs__label\">{{ tab.label }}</span>\n <button\n type=\"button\"\n class=\"fe-tabs__close\"\n :aria-label=\"t('tabs.close')\"\n :title=\"t('tabs.close')\"\n @click.stop=\"emit('close', tab.id)\"\n >×</button>\n </div>\n <button\n type=\"button\"\n class=\"fe-tabs__new\"\n :aria-label=\"t('tabs.new')\"\n :title=\"t('tabs.new')\"\n @click=\"emit('new')\"\n >+</button>\n </div>\n <button\n v-if=\"splitEnabled !== false\"\n type=\"button\"\n class=\"fe-tabs__split\"\n :class=\"{ 'is-active': splitActive }\"\n :aria-label=\"splitActive ? t('tabs.split_off') : t('tabs.split')\"\n :title=\"splitActive ? t('tabs.split_off') : t('tabs.split')\"\n :aria-pressed=\"splitActive ? 'true' : 'false'\"\n @click=\"emit('toggle-split')\"\n >\n <svg\n class=\"fe-ficon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" />\n <path d=\"M12 4v16\" />\n </svg>\n </button>\n </div>\n</template>\n","/**\n * e2ecrypto — client-side crypto for E2E-encrypted folders (wiring:e2).\n *\n * WebCrypto ONLY — zero dependencies. Design doc: docs/E2E-ENCRYPTION.md.\n *\n * Scheme (v1):\n * folder password ─PBKDF2-SHA256(600k iter, per-folder 16B salt)─▶ KEK (AES-256-GCM)\n * per-file random 32B DEK (AES-256-GCM) encrypts the content one-shot;\n * the DEK is wrapped with the KEK and stored in the file's own header.\n *\n * File layout ('filexe2e' magic, fixed 97-byte header):\n * [0..8) magic \"filexe2e\"\n * [8] version 0x01\n * [9..21) wrapIV (12B) — GCM IV of the DEK wrap\n * [21..69) wrappedDEK (48B = 32B DEK + 16B GCM tag)\n * [69..81) dataIV (12B) — GCM IV of the content\n * [81..97) reserved (zeros; v2 chunking/metadata)\n * [97..) ciphertext (content + 16B GCM tag)\n *\n * Folder marker `.filex-e2e.json` at the encrypted-folder root:\n * { v:1, salt:<b64 16B>, iter:600000, verify:<b64 12B IV || GCM('filex-e2e-verify-v1')> }\n *\n * The KEK NEVER leaves memory — no storage of any kind. Password loss is\n * data loss by design (no recovery path exists anywhere).\n */\n\nexport const E2E_MARKER_NAME = '.filex-e2e.json';\nexport const E2E_MAGIC = 'filexe2e';\nexport const E2E_VERSION = 1;\nexport const E2E_DEFAULT_ITERATIONS = 600_000;\nexport const E2E_MIN_ITERATIONS = 600_000;\n/** MVP single-shot in-memory ceiling — larger uploads are refused with a warning. */\nexport const E2E_MAX_FILE_BYTES = 200 * 1024 * 1024;\nexport const E2E_MIN_PASSWORD_LEN = 8;\n\nconst VERIFY_PLAINTEXT = 'filex-e2e-verify-v1';\nconst MAGIC_BYTES = new TextEncoder().encode(E2E_MAGIC); // 8 bytes\nconst HEADER_LEN = 97;\nconst WRAP_IV_OFF = 9;\nconst WRAPPED_DEK_OFF = 21;\nconst WRAPPED_DEK_LEN = 48;\nconst DATA_IV_OFF = 69;\nconst IV_LEN = 12;\n\nexport interface E2eMarker {\n v: number;\n salt: string; // base64\n iter: number;\n verify: string; // base64: 12B IV || AES-GCM ciphertext of VERIFY_PLAINTEXT\n}\n\n/** Thrown on wrong password / corrupted ciphertext (GCM tag mismatch). */\nexport class E2eDecryptError extends Error {\n constructor(msg = 'e2e: decrypt failed') {\n super(msg);\n this.name = 'E2eDecryptError';\n }\n}\n\n// ---------------------------------------------------------------------\n// base64 helpers (no deps)\n// ---------------------------------------------------------------------\n\nexport function bytesToB64(b: Uint8Array): string {\n let s = '';\n for (let i = 0; i < b.length; i++) s += String.fromCharCode(b[i]);\n return btoa(s);\n}\n\nexport function b64ToBytes(s: string): Uint8Array {\n const raw = atob(s);\n const out = new Uint8Array(raw.length);\n for (let i = 0; i < raw.length; i++) out[i] = raw.charCodeAt(i);\n return out;\n}\n\n// ---------------------------------------------------------------------\n// Key derivation\n// ---------------------------------------------------------------------\n\n/**\n * Derive the folder KEK from a password. Returns a NON-extractable\n * AES-256-GCM CryptoKey — it can encrypt/decrypt but never be exported,\n * so even a same-origin script can't read the raw key material back.\n */\nexport async function deriveKek(\n password: string,\n salt: Uint8Array,\n iterations: number,\n): Promise<CryptoKey> {\n const material = await crypto.subtle.importKey(\n 'raw',\n new TextEncoder().encode(password),\n 'PBKDF2',\n false,\n ['deriveKey'],\n );\n return crypto.subtle.deriveKey(\n // Copy into a fresh ArrayBuffer-backed view — TS 5.9 BufferSource typing\n // rejects Uint8Array<ArrayBufferLike> that may wrap a SharedArrayBuffer.\n { name: 'PBKDF2', salt: new Uint8Array(salt).buffer as ArrayBuffer, iterations, hash: 'SHA-256' },\n material,\n { name: 'AES-GCM', length: 256 },\n false, // non-extractable\n ['encrypt', 'decrypt'],\n );\n}\n\n// ---------------------------------------------------------------------\n// Marker create / verify\n// ---------------------------------------------------------------------\n\n/** Create a fresh folder marker for `password` (also returns the derived KEK). */\nexport async function createMarker(\n password: string,\n iterations: number = E2E_DEFAULT_ITERATIONS,\n): Promise<{ marker: E2eMarker; kek: CryptoKey }> {\n const iter = Math.max(E2E_MIN_ITERATIONS, iterations);\n const salt = crypto.getRandomValues(new Uint8Array(16));\n const kek = await deriveKek(password, salt, iter);\n const iv = crypto.getRandomValues(new Uint8Array(IV_LEN));\n const ct = new Uint8Array(\n await crypto.subtle.encrypt(\n { name: 'AES-GCM', iv: iv.buffer as ArrayBuffer },\n kek,\n new TextEncoder().encode(VERIFY_PLAINTEXT),\n ),\n );\n const verify = new Uint8Array(IV_LEN + ct.length);\n verify.set(iv, 0);\n verify.set(ct, IV_LEN);\n return {\n marker: { v: E2E_VERSION, salt: bytesToB64(salt), iter, verify: bytesToB64(verify) },\n kek,\n };\n}\n\n/** Parse marker JSON text; returns null when the shape is not a v1 marker. */\nexport function parseMarker(text: string): E2eMarker | null {\n try {\n const m = JSON.parse(text) as E2eMarker;\n if (!m || m.v !== E2E_VERSION) return null;\n if (typeof m.salt !== 'string' || typeof m.verify !== 'string') return null;\n if (typeof m.iter !== 'number' || m.iter < 1) return null;\n return m;\n } catch {\n return null;\n }\n}\n\n/**\n * Check `password` against a folder marker. Resolves to the derived KEK on\n * success, or `null` on a wrong password (GCM tag mismatch on the verify\n * blob). Never talks to any server.\n */\nexport async function verifyPassword(\n marker: E2eMarker,\n password: string,\n): Promise<CryptoKey | null> {\n const salt = b64ToBytes(marker.salt);\n const kek = await deriveKek(password, salt, marker.iter);\n const verify = b64ToBytes(marker.verify);\n if (verify.length <= IV_LEN) return null;\n try {\n const pt = await crypto.subtle.decrypt(\n { name: 'AES-GCM', iv: verify.slice(0, IV_LEN).buffer as ArrayBuffer },\n kek,\n verify.slice(IV_LEN).buffer as ArrayBuffer,\n );\n if (new TextDecoder().decode(pt) !== VERIFY_PLAINTEXT) return null;\n return kek;\n } catch {\n return null; // wrong password\n }\n}\n\n// ---------------------------------------------------------------------\n// Magic sniff\n// ---------------------------------------------------------------------\n\n/** True when the buffer starts with the 'filexe2e' magic. */\nexport function hasMagic(buf: ArrayBuffer | Uint8Array): boolean {\n const b = buf instanceof Uint8Array ? buf : new Uint8Array(buf);\n if (b.length < MAGIC_BYTES.length) return false;\n for (let i = 0; i < MAGIC_BYTES.length; i++) {\n if (b[i] !== MAGIC_BYTES[i]) return false;\n }\n return true;\n}\n\n// ---------------------------------------------------------------------\n// File encrypt / decrypt (one-shot MVP)\n// ---------------------------------------------------------------------\n\n/**\n * Encrypt `content` under the folder KEK: mints a fresh DEK, encrypts the\n * content one-shot, wraps the DEK with the KEK and prepends the fixed\n * 'filexe2e' header. Throws when content exceeds E2E_MAX_FILE_BYTES.\n */\nexport async function encryptFile(kek: CryptoKey, content: ArrayBuffer): Promise<ArrayBuffer> {\n if (content.byteLength > E2E_MAX_FILE_BYTES) {\n throw new Error('e2e: file exceeds the 200MB single-shot limit');\n }\n const rawDek = crypto.getRandomValues(new Uint8Array(32));\n const dek = await crypto.subtle.importKey('raw', rawDek.buffer as ArrayBuffer, { name: 'AES-GCM' }, false, [\n 'encrypt',\n ]);\n const wrapIV = crypto.getRandomValues(new Uint8Array(IV_LEN));\n const dataIV = crypto.getRandomValues(new Uint8Array(IV_LEN));\n const wrappedDek = new Uint8Array(\n await crypto.subtle.encrypt({ name: 'AES-GCM', iv: wrapIV.buffer as ArrayBuffer }, kek, rawDek.buffer as ArrayBuffer),\n );\n const ct = new Uint8Array(\n await crypto.subtle.encrypt({ name: 'AES-GCM', iv: dataIV.buffer as ArrayBuffer }, dek, content),\n );\n // Zero the raw DEK copy as a hygiene measure (best-effort — GC may have\n // other copies, but don't leave the obvious one around).\n rawDek.fill(0);\n\n const out = new Uint8Array(HEADER_LEN + ct.length);\n out.set(MAGIC_BYTES, 0);\n out[8] = E2E_VERSION;\n out.set(wrapIV, WRAP_IV_OFF);\n out.set(wrappedDek, WRAPPED_DEK_OFF); // 48 bytes\n out.set(dataIV, DATA_IV_OFF);\n // [81..97) reserved zeros\n out.set(ct, HEADER_LEN);\n return out.buffer;\n}\n\n/**\n * Decrypt a 'filexe2e' blob with the folder KEK. Throws E2eDecryptError on\n * a wrong key / tampered data, and a plain Error when the header is not an\n * e2e file at all.\n */\nexport async function decryptFile(kek: CryptoKey, data: ArrayBuffer): Promise<ArrayBuffer> {\n const b = new Uint8Array(data);\n if (!hasMagic(b) || b.length < HEADER_LEN) {\n throw new Error('e2e: not an encrypted file');\n }\n if (b[8] !== E2E_VERSION) {\n throw new Error(`e2e: unsupported version ${b[8]}`);\n }\n const wrapIV = b.slice(WRAP_IV_OFF, WRAP_IV_OFF + IV_LEN);\n const wrappedDek = b.slice(WRAPPED_DEK_OFF, WRAPPED_DEK_OFF + WRAPPED_DEK_LEN);\n const dataIV = b.slice(DATA_IV_OFF, DATA_IV_OFF + IV_LEN);\n let rawDek: ArrayBuffer;\n try {\n rawDek = await crypto.subtle.decrypt(\n { name: 'AES-GCM', iv: wrapIV.buffer as ArrayBuffer },\n kek,\n wrappedDek.buffer as ArrayBuffer,\n );\n } catch {\n throw new E2eDecryptError('e2e: DEK unwrap failed (wrong password?)');\n }\n const dek = await crypto.subtle.importKey('raw', rawDek, { name: 'AES-GCM' }, false, ['decrypt']);\n try {\n return await crypto.subtle.decrypt(\n { name: 'AES-GCM', iv: dataIV.buffer as ArrayBuffer },\n dek,\n b.slice(HEADER_LEN).buffer as ArrayBuffer,\n );\n } catch {\n throw new E2eDecryptError('e2e: content decrypt failed');\n }\n}\n\n// ---------------------------------------------------------------------\n// In-memory session key ring\n// ---------------------------------------------------------------------\n\n/**\n * Tiny per-explorer key ring: encrypted-folder root (wire path) → KEK.\n * Lives ONLY in memory — \"Kilitle\" drops the entry, a reload drops all.\n */\nexport function createKeyRing() {\n const keys = new Map<string, CryptoKey>();\n return {\n get(root: string): CryptoKey | undefined {\n return keys.get(root);\n },\n set(root: string, kek: CryptoKey): void {\n keys.set(root, kek);\n },\n /** Drop one folder's key (\"Kilitle\"). */\n lock(root: string): void {\n keys.delete(root);\n },\n has(root: string): boolean {\n return keys.has(root);\n },\n clear(): void {\n keys.clear();\n },\n };\n}\n\nexport type E2eKeyRing = ReturnType<typeof createKeyRing>;\n","/**\n * listing.ts — shared listing helpers used by BOTH the main panel\n * (FileExplorer.load) and the split-view secondary panel\n * (SecondaryPane.loadPane). SINGLE SOURCE so the two panes can never\n * drift apart: the internal-entry filter and the virtual `.trash` row\n * must be identical in both, otherwise split view shows mismatched rows\n * (the trash row missing on one side → visible row-offset).\n */\nimport { ref } from 'vue';\n\nimport type { FileNode } from '../types/FileNode';\nimport { E2E_MARKER_NAME } from './e2ecrypto';\n\n/** Adapter-strip: `s3-test://fileman/x` → `fileman/x`. */\nexport function stripAdapter(p: string): string {\n const idx = p.indexOf('://');\n return idx === -1 ? p : p.slice(idx + 3);\n}\n\n/**\n * Hide system/internal entries the user must never see as files:\n * thumbnails, version history, the soft-delete store, keepdir markers\n * and the E2E marker. Shared by both panes' listing filters.\n */\nexport function filterInternalEntries(files: FileNode[]): FileNode[] {\n return (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 if (f.basename === E2E_MARKER_NAME) return false;\n return true;\n });\n}\n\nconst SHOW_HIDDEN_LS_KEY = 'filex.showHidden';\n\nfunction readShowHidden(): boolean {\n try {\n return localStorage.getItem(SHOW_HIDDEN_LS_KEY) === '1';\n } catch {\n return false; // private mode / no storage → hidden, the safe default\n }\n}\n\n/**\n * Whether dot-prefixed entries are listed. Off by default, like every other\n * file manager. Shared by both panes so split view can't disagree with itself.\n */\nexport const showHiddenFiles = ref(readShowHidden());\n\nexport function setShowHiddenFiles(v: boolean): void {\n showHiddenFiles.value = v;\n try {\n localStorage.setItem(SHOW_HIDDEN_LS_KEY, v ? '1' : '0');\n } catch {\n /* preference just won't persist */\n }\n}\n\n/**\n * Hide dot-prefixed entries unless the user asked to see them.\n *\n * These are mostly not the user's files at all: a Mac writing over WebDAV\n * leaves a `.DS_Store` in every folder it opens and an AppleDouble `._name`\n * beside every file carrying extended attributes. Finder hides its own litter\n * locally, so seeing it reappear in the web UI reads as corruption.\n *\n * A toggle rather than a blocklist, because they ARE real files: hiding them\n * outright would leave the ones already uploaded unreachable and undeletable.\n */\nexport function filterHiddenEntries(files: FileNode[], showHidden: boolean): FileNode[] {\n if (showHidden) return files || [];\n return (files || []).filter((f) => !(f.basename || '').startsWith('.'));\n}\n\n/** filterInternalEntries + filterHiddenEntries — what both panes render. */\nexport function filterListing(files: FileNode[]): FileNode[] {\n return filterHiddenEntries(filterInternalEntries(files), showHiddenFiles.value);\n}\n\n/** True when `dirname` (adapter-qualified) is the storage root, where the\n * virtual trash row belongs. */\nexport function isStorageRootDir(dirname: string): boolean {\n const rel = stripAdapter(dirname);\n return rel === 'fileman' || rel === '';\n}\n\n/** True when the listing IS the trash view (don't inject the row into itself). */\nexport function isTrashListing(dirname: string): boolean {\n return stripAdapter(dirname).startsWith('fileman/.trash');\n}\n\n/** The synthetic `.trash` row shown at storage root — rendered as\n * \"Çöp Kutusu\" / \"Trash\" via the `.trash` basename → locale mapping. */\nexport function makeTrashRow(adapter: string): FileNode {\n return {\n type: 'dir',\n path: `${adapter}://fileman/.trash`,\n basename: '.trash',\n extension: '',\n storage: adapter,\n visibility: 'private',\n size: 0,\n file_size: 0,\n mime_type: 'inode/directory',\n extra_metadata: {},\n } as unknown as FileNode;\n}\n\n/**\n * Inject the virtual `.trash` row at the front of a root listing when\n * enabled. Returns true if a row was added (so the caller can hydrate\n * it). Mutates `files` in place. Single source for both panes.\n */\nexport function injectTrashRow(\n files: FileNode[],\n adapter: string,\n dirname: string,\n trashVisible: boolean,\n): boolean {\n if (!trashVisible) return false;\n if (isTrashListing(dirname)) return false;\n if (!isStorageRootDir(dirname)) return false;\n files.unshift(makeTrashRow(adapter));\n return true;\n}\n\n/** Best-effort fill of the trash row's size (total bytes) + date (newest\n * deletion) from the backend trash listing, so it reads like a real\n * folder instead of \"— / —\". Non-blocking; mutates the row in place. */\nexport async function hydrateTrashRow(\n files: FileNode[],\n storage: string,\n api: { listTrash: (s?: string) => Promise<{ entries: Array<{ size?: number; deleted_at: string }> }> },\n): Promise<void> {\n try {\n const { entries } = await api.listTrash(storage);\n const row = files.find((f) => f.basename === '.trash');\n if (!row) return;\n let total = 0;\n let newest = 0;\n for (const e of entries) {\n total += e.size || 0;\n const ts = Date.parse(e.deleted_at);\n if (!Number.isNaN(ts) && ts > newest) newest = ts;\n }\n row.size = total;\n if (newest > 0) row.last_modified = newest;\n } catch {\n /* keep the bare row */\n }\n}\n","<script setup lang=\"ts\">\n/**\n * SecondaryPane — wiring:d1 split görünümün sağ (ikincil) paneli.\n *\n * Deliberately LIGHT: its own path + its own listing — fetched through\n * the SAME FileApi instance the host already constructed (`api.index`,\n * no copied fetch logic) — a small breadcrumb, double-click navigation,\n * click selection and drag&drop in BOTH directions. No toolbar, no\n * inspector, no upload: those belong to the main panel.\n *\n * Path semantics, confinement (`clamp`) and wire-form resolution\n * (`qualify` / `toUser`) are injected from the host so the pane can\n * never drift from the main panel's multi-storage / rootFloor rules.\n *\n * Cross-pane transfers only EMIT (`transfer`); the host decides\n * move-vs-copy and runs the existing ops APIs. Unscoped styles\n * (`fe-split*` in base.css) — webcomponent data-v rule.\n */\nimport { computed, ref } from 'vue';\nimport type { FileApi } from '../composables/useFileApi';\nimport type { FileNode, ViewMode } from '../types/FileNode';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\nimport { filterListing, injectTrashRow, hydrateTrashRow } from '../lib/listing';\nimport ListView from './ListView.vue';\nimport GridView from './GridView.vue';\nimport GalleryView from './GalleryView.vue';\n\n// Same literals ListView/GridView already hardcode for the internal DnD\n// channel; `-src` carries the origin directory so the host can move (and\n// undo) correctly across panes.\nconst FE_DND_MIME = 'application/x-brf-files';\nconst FE_DND_SRC_MIME = 'application/x-brf-files-src';\n\nconst props = defineProps<{\n api: FileApi;\n /** Opening location, in the host's `currentPath` form. */\n initialPath: string;\n locale: LocaleCode;\n /** Host's own qualify(): user path → wire `<adapter>://<rel>`. */\n qualify: (p: string) => string;\n /** Host's wire → user-path converter (multi-storage aware). */\n toUser: (wire: string) => string;\n /** Host's rootFloor clamp — keeps the pane inside the confine. */\n clamp: (p: string) => string;\n /** Label for the root crumb (adapter name / storage list). */\n rootLabel: string;\n /** rootFloor (user-path form, '' when unconfined) — trims crumbs. */\n floor?: string;\n /** Multi-storage mode: '' is the virtual drives root (no fetch). */\n multiRoot?: boolean;\n /** Synthesized storage rows for the virtual drives root. */\n virtualRows?: () => FileNode[];\n /** Active-panel highlight (keyboard target). */\n active?: boolean;\n /** ui-fix — the pane renders the SAME view components as the main\n * panel (list/grid/gallery) instead of its own flat list. */\n viewMode?: ViewMode;\n /** ui-fix — authenticated thumb resolver, forwarded to grid/gallery. */\n thumbSrc?: (n: FileNode) => string | null;\n /** ui-fix — mirror the main panel's virtual `.trash` row at storage root\n * so both split panes list identical rows (no row-offset). Defaults on. */\n trashVisible?: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: 'navigate', path: string): void;\n (e: 'activate'): void;\n (e: 'close'): void;\n (e: 'open-tab', path: string): void;\n (e: 'transfer', p: { sources: string[]; targetWire: string; originWire?: string }): void;\n /* ui-fix — yan panelde sağ-tık: menü ana bileşende (FileExplorer) açılır.\n * node=null → boş alana sağ-tık (seçimsiz, yalnız Yapıştır). */\n (e: 'context', node: FileNode | null, ev: MouseEvent): void;\n /* ui-fix — çöp kutusu satırı açıldığında: trash görünümü ana panele aittir\n * (geri yükleme aksiyonlarıyla), host loadTrash() ile açar. */\n (e: 'open-trash'): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\n\nconst path = ref<string>('');\nconst files = ref<FileNode[]>([]);\nconst loading = ref(false);\nconst error = ref('');\nconst selected = ref(new Set<string>());\n\nfunction isStorageRow(n: FileNode): boolean {\n return n.mime_type === 'inode/storage';\n}\n\nconst atVirtualRoot = computed(\n () => !!props.multiRoot && !(path.value ?? '').replace(/^\\/+|\\/+$/g, ''),\n);\n\nasync function loadPane(target?: string): Promise<void> {\n const requested = props.clamp(target ?? path.value ?? '');\n loading.value = true;\n error.value = '';\n try {\n // Multi-storage virtual root: synthesize the drives list, no backend\n // call — mirrors the main panel's load() branch.\n if (props.multiRoot && !requested) {\n files.value = props.virtualRows ? props.virtualRows() : [];\n path.value = '';\n selected.value = new Set();\n emit('navigate', '');\n return;\n }\n const resp = await props.api.index(props.qualify(requested));\n // Same internal-entry filter + virtual `.trash` row as the main panel\n // (shared helpers → both split panes list identical rows, no offset).\n files.value = filterListing(resp.files);\n if (injectTrashRow(files.value, resp.adapter, resp.dirname, props.trashVisible !== false)) {\n void hydrateTrashRow(files.value, resp.adapter, props.api);\n }\n path.value = props.toUser(resp.dirname);\n selected.value = new Set();\n emit('navigate', path.value);\n } catch (err) {\n error.value = err instanceof Error ? err.message : String(err);\n } finally {\n loading.value = false;\n }\n}\n\nvoid loadPane(props.initialPath ?? '');\n\n// ------------------------------------------------------------------\n// Breadcrumb (kırıntı)\n// ------------------------------------------------------------------\n\ninterface Crumb {\n label: string;\n target: string;\n last: boolean;\n}\n\nconst crumbs = computed<Crumb[]>(() => {\n const clean = (path.value || '').replace(/^\\/+|\\/+$/g, '');\n const segs = clean ? clean.split('/') : [];\n const floor = (props.floor || '').replace(/^\\/+|\\/+$/g, '');\n const out: Crumb[] = [];\n let acc = '';\n for (const s of segs) {\n acc = acc ? `${acc}/${s}` : s;\n // Confined embeds: hide the segments strictly ABOVE the floor — the\n // floor segment itself acts as the pane's root crumb.\n if (floor && !(acc === floor || acc.startsWith(floor + '/'))) continue;\n out.push({ label: s, target: acc, last: false });\n }\n if (out.length > 0) out[out.length - 1].last = true;\n return out;\n});\n\nconst showRootCrumb = computed(() => !props.floor);\n\nfunction crumbGo(target: string) {\n emit('activate');\n void loadPane(target);\n}\n\n// ------------------------------------------------------------------\n// Selection + navigation\n// ------------------------------------------------------------------\n\n/* ui-fix — adapter for the shared view components' click contract\n * ({ctrl, shift} mod object instead of a MouseEvent). Shift behaves as\n * ctrl here: the pane keeps a simple Set, no range anchor. */\nfunction onViewClick(n: FileNode, mod: { ctrl: boolean; shift: boolean }) {\n emit('activate');\n const multi = mod.ctrl || mod.shift;\n const next = new Set<string>(multi ? selected.value : []);\n if (multi && next.has(n.path)) next.delete(n.path);\n else next.add(n.path);\n selected.value = next;\n}\n\n/* ui-fix — right-click on a pane item: activate + select it, then let the\n * host open the pane context menu (its actions are pane-routed). Selecting\n * first keeps the menu's targets on THIS pane, not the main panel. */\nfunction onViewContext(n: FileNode, ev: MouseEvent) {\n ev.preventDefault();\n ev.stopPropagation();\n emit('activate');\n if (!selected.value.has(n.path)) selected.value = new Set([n.path]);\n emit('context', n, ev);\n}\n\n/* ui-fix — boş alana (arka plan) sağ-tık: seçimsiz menü (yalnız Yapıştır)\n * → boş klasöre / mevcut klasöre dosya yapıştırma. Satır menüsü stopProp\n * ettiğinden bu yalnız gerçek boş alanda tetiklenir. */\nfunction onBgContext(ev: MouseEvent) {\n ev.preventDefault();\n ev.stopPropagation(); // FileExplorer kökündeki canvas menüsüne bubble etmesin\n emit('activate');\n selected.value = new Set();\n emit('context', null, ev);\n}\n\n/* ui-fix — drop-into from the shared views: same payload path as the\n * old flat rows (dir check + wire-qualified row paths). */\nfunction onViewDropInto(target: FileNode, ev: DragEvent) {\n dropBg.value = false;\n if (target.type !== 'dir' || isStorageRow(target)) return;\n if (!acceptDrag(ev)) return;\n handleDropPayload(ev, target.path);\n}\n\nfunction onRowDbl(n: FileNode) {\n if (n.type !== 'dir') return;\n // The virtual `.trash` row opens the backend trash listing (restore\n // actions) — that view lives in the main panel; let the host open it.\n if (n.basename === '.trash') {\n emit('activate');\n emit('open-trash');\n return;\n }\n void loadPane(isStorageRow(n) ? n.path : props.toUser(n.path));\n}\n\nfunction clearSelection() {\n selected.value = new Set();\n}\n\n// ------------------------------------------------------------------\n// Drag source\n// ------------------------------------------------------------------\n\nfunction onRowDragStart(n: FileNode, ev: DragEvent) {\n if (!ev.dataTransfer) return;\n if (isStorageRow(n) || atVirtualRoot.value || n.basename === '.trash') {\n ev.preventDefault();\n return;\n }\n if (!selected.value.has(n.path)) selected.value = new Set([n.path]);\n const items = files.value\n .filter((f) => selected.value.has(f.path) && !isStorageRow(f))\n .map((f) => ({ path: f.path, basename: f.basename, type: f.type }));\n if (items.length === 0) {\n ev.preventDefault();\n return;\n }\n ev.dataTransfer.setData(FE_DND_MIME, JSON.stringify(items));\n ev.dataTransfer.setData(FE_DND_SRC_MIME, props.qualify(path.value));\n ev.dataTransfer.setData('text/plain', items.map((i) => i.path).join('\\n'));\n ev.dataTransfer.effectAllowed = 'move';\n}\n\n// ------------------------------------------------------------------\n// Drop target (dir rows + pane background)\n// ------------------------------------------------------------------\n\nconst dropBg = ref(false);\n\nfunction acceptDrag(ev: DragEvent): boolean {\n return !!ev.dataTransfer?.types.includes(FE_DND_MIME);\n}\n\nfunction handleDropPayload(ev: DragEvent, targetWire: string) {\n const raw = ev.dataTransfer?.getData(FE_DND_MIME);\n if (!raw || !targetWire) return;\n let items: Array<{ path: string }> = [];\n try {\n items = JSON.parse(raw);\n } catch {\n return;\n }\n const origin = ev.dataTransfer?.getData(FE_DND_SRC_MIME) || undefined;\n const sources = items\n .map((i) => i.path)\n .filter((p) => p && p !== targetWire && !targetWire.startsWith(p + '/'));\n if (sources.length === 0) return;\n ev.preventDefault();\n ev.stopPropagation();\n emit('transfer', { sources, targetWire, originWire: origin });\n}\n\nfunction onBgDragOver(ev: DragEvent) {\n if (!acceptDrag(ev) || atVirtualRoot.value) return;\n ev.preventDefault();\n ev.stopPropagation();\n if (ev.dataTransfer) ev.dataTransfer.dropEffect = 'move';\n dropBg.value = true;\n}\n\nfunction onBgDragLeave() {\n dropBg.value = false;\n}\n\nfunction onBgDrop(ev: DragEvent) {\n dropBg.value = false;\n if (!acceptDrag(ev) || atVirtualRoot.value) return;\n handleDropPayload(ev, props.qualify(path.value));\n}\n\n// ------------------------------------------------------------------\n// Host API (keyboard routing when this pane is active)\n// ------------------------------------------------------------------\n\nfunction goUp() {\n const cur = (path.value ?? '').replace(/^\\/+|\\/+$/g, '');\n const floor = (props.floor || '').replace(/^\\/+|\\/+$/g, '');\n if (!cur || cur === floor) return;\n const idx = cur.lastIndexOf('/');\n void loadPane(idx === -1 ? '' : cur.slice(0, idx));\n}\n\nfunction selectAll() {\n selected.value = new Set(files.value.filter((f) => !isStorageRow(f)).map((f) => f.path));\n}\n\nfunction selectedNodes(): FileNode[] {\n return files.value.filter((f) => selected.value.has(f.path));\n}\n\nfunction openSelected() {\n const n = selectedNodes()[0];\n if (n && n.type === 'dir') onRowDbl(n);\n}\n\nfunction reload(): Promise<void> {\n return loadPane();\n}\n\nfunction getPath(): string {\n return path.value;\n}\n\ndefineExpose({ reload, goUp, selectAll, openSelected, selectedNodes, getPath });\n</script>\n\n<template>\n <section\n class=\"fe-split\"\n :class=\"{ 'fe-pane--focus': active }\"\n role=\"region\"\n :aria-label=\"t('split.pane')\"\n @pointerdown=\"emit('activate')\"\n >\n <header class=\"fe-split__crumbs\">\n <button\n v-if=\"showRootCrumb\"\n type=\"button\"\n class=\"fe-split__crumb\"\n :class=\"{ 'is-last': crumbs.length === 0 }\"\n :title=\"rootLabel\"\n @click=\"crumbGo('')\"\n >{{ rootLabel }}</button>\n <template v-for=\"c in crumbs\" :key=\"c.target\">\n <span class=\"fe-split__sep\" aria-hidden=\"true\">›</span>\n <button\n type=\"button\"\n class=\"fe-split__crumb\"\n :class=\"{ 'is-last': c.last }\"\n :title=\"c.label\"\n @click=\"crumbGo(c.target)\"\n >{{ c.label }}</button>\n </template>\n <span class=\"fe-split__spacer\"></span>\n <button\n type=\"button\"\n class=\"fe-split__closebtn\"\n :aria-label=\"t('split.close')\"\n :title=\"t('split.close')\"\n @click=\"emit('close')\"\n >×</button>\n </header>\n\n <div\n class=\"fe-split__body\"\n :class=\"{ 'is-dropover': dropBg }\"\n @click.self=\"clearSelection\"\n @contextmenu=\"onBgContext\"\n @dragover=\"onBgDragOver\"\n @dragleave=\"onBgDragLeave\"\n @drop=\"onBgDrop\"\n >\n <div v-if=\"loading && files.length === 0\" class=\"fe-split__state\" role=\"status\">\n {{ t('loading') }}\n </div>\n <div v-else-if=\"error\" class=\"fe-split__state\">\n <span>{{ t('split.error') }}</span>\n <button type=\"button\" class=\"fe-btn\" @click=\"() => loadPane()\">\n {{ t('split.retry') }}\n </button>\n </div>\n <div v-else-if=\"files.length === 0\" class=\"fe-split__state\">\n {{ t('empty.folder') }}\n </div>\n <!-- ui-fix — aynı görünüm bileşenleri (list/grid/gallery), pane'in\n kendi viewMode'uyla; eski düz fe-split__list kalktı. -->\n <ListView\n v-else-if=\"(viewMode ?? 'list') === 'list'\"\n :files=\"files\"\n :selected=\"selected\"\n :locale=\"locale\"\n :loading=\"loading\"\n @click-row=\"onViewClick\"\n @dbl-row=\"onRowDbl\"\n @context-row=\"onViewContext\"\n @item-drag-start=\"onRowDragStart\"\n @item-drop-into=\"onViewDropInto\"\n />\n <GridView\n v-else-if=\"viewMode === 'grid'\"\n :files=\"files\"\n :selected=\"selected\"\n :locale=\"locale\"\n :loading=\"loading\"\n :thumb-src=\"thumbSrc\"\n @click-card=\"onViewClick\"\n @dbl-card=\"onRowDbl\"\n @context-card=\"onViewContext\"\n @item-drag-start=\"onRowDragStart\"\n @item-drop-into=\"onViewDropInto\"\n />\n <GalleryView\n v-else\n :files=\"files\"\n :selected=\"selected\"\n :locale=\"locale\"\n :loading=\"loading\"\n :thumb-src=\"thumbSrc\"\n @click-card=\"onViewClick\"\n @dbl-card=\"onRowDbl\"\n @context-card=\"onViewContext\"\n @item-drag-start=\"onRowDragStart\"\n @item-drop-into=\"onViewDropInto\"\n />\n </div>\n </section>\n</template>\n","/**\n * useTabs — wiring:d1 sekmeler (çalışma alanı tab şeridi).\n *\n * A LAYER ABOVE FileExplorer's location state, never a replacement for\n * it: each tab is a location snapshot `{ id, path, viewMode, split }`.\n * The composable performs no fetching and owns no navigation — the host\n * activates a tab by running its EXISTING `load(path)` pipeline and\n * reports navigations back through `syncActive()`, which keeps the\n * active snapshot glued to wherever the user actually is.\n *\n * `path` is stored in the SAME form as FileExplorer's `currentPath`\n * (virtual `<storage>/<rel>` in multi-storage mode, bare relative path\n * in single-storage mode) — i.e. the exact string `load(path)` accepts.\n * Storing the wire form (`adapter://rel`) instead would break the\n * rootPath-floor clamp inside load() (the floor is compared in user-path\n * form), so the user-path form is deliberate.\n *\n * Persistence: localStorage under a host-supplied key (the host derives\n * it from the pathPersist scope: disabled when `pathPersist: 'none'`,\n * suffixed with the rootPath confine so embedded instances with\n * different confines never clobber each other). Schema:\n *\n * { \"v\": 1, \"active\": \"<id>\",\n * \"tabs\": [ { \"id\", \"path\", \"viewMode\", \"split\": {\"path\"}|null } ] }\n */\n\nimport { computed, ref, watch, type Ref } from 'vue';\nimport type { ViewMode } from '../types/FileNode';\n\n/** Per-tab split state — the secondary pane's own location. */\nexport interface TabSplit {\n path: string;\n /** ui-fix — the pane's OWN view mode (list/grid/gallery); undefined\n * inherits the main panel's mode at split time. */\n viewMode?: ViewMode;\n}\n\nexport interface TabState {\n id: string;\n /** Location snapshot in `currentPath` form (see module docs). */\n path: string;\n viewMode: ViewMode;\n split: TabSplit | null;\n}\n\nexport interface UseTabsOptions {\n /** localStorage key; null disables persistence entirely. */\n storageKey: string | null;\n}\n\nfunction makeId(): string {\n try {\n return crypto.randomUUID();\n } catch {\n return `t${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;\n }\n}\n\nexport function useTabs(opts: UseTabsOptions) {\n const tabs: Ref<TabState[]> = ref([]);\n const activeId = ref<string>('');\n\n const activeTab = computed<TabState | null>(\n () => tabs.value.find((t) => t.id === activeId.value) ?? null,\n );\n const activeIndex = computed(() => tabs.value.findIndex((t) => t.id === activeId.value));\n const hasMultiple = computed(() => tabs.value.length > 1);\n\n // ------------------------------------------------------------------\n // Persistence\n // ------------------------------------------------------------------\n\n /** Restore from storage. Returns true when at least one tab loaded. */\n function restore(): boolean {\n if (!opts.storageKey) return false;\n try {\n const raw = localStorage.getItem(opts.storageKey);\n if (!raw) return false;\n const parsed = JSON.parse(raw) as { v?: unknown; active?: unknown; tabs?: unknown };\n if (!parsed || !Array.isArray(parsed.tabs) || parsed.tabs.length === 0) return false;\n const clean: TabState[] = [];\n for (const t of parsed.tabs as Array<Record<string, unknown>>) {\n if (!t || typeof t.path !== 'string') continue;\n // ViewMode is validated loosely on purpose: future modes (e.g. the\n // gallery wave) must survive a round-trip through an older schema.\n const vm =\n typeof t.viewMode === 'string' && t.viewMode ? (t.viewMode as ViewMode) : 'list';\n const rawSplit = t.split as { path?: unknown; viewMode?: unknown } | null | undefined;\n const split =\n rawSplit && typeof rawSplit === 'object' && typeof rawSplit.path === 'string'\n ? {\n path: rawSplit.path,\n viewMode:\n typeof rawSplit.viewMode === 'string' && rawSplit.viewMode\n ? (rawSplit.viewMode as ViewMode)\n : undefined,\n }\n : null;\n clean.push({\n id: typeof t.id === 'string' && t.id ? t.id : makeId(),\n path: t.path,\n viewMode: vm,\n split,\n });\n }\n if (clean.length === 0) return false;\n tabs.value = clean;\n activeId.value = clean.some((t) => t.id === parsed.active)\n ? String(parsed.active)\n : clean[0].id;\n return true;\n } catch {\n return false;\n }\n }\n\n function persist(): void {\n if (!opts.storageKey) return;\n try {\n localStorage.setItem(\n opts.storageKey,\n JSON.stringify({ v: 1, active: activeId.value, tabs: tabs.value }),\n );\n } catch {\n /* private mode / quota */\n }\n }\n\n watch([tabs, activeId], persist, { deep: true });\n\n // ------------------------------------------------------------------\n // Mutations\n // ------------------------------------------------------------------\n\n /** Create the first tab (no-op once any tab exists). */\n function seed(path: string, viewMode: ViewMode): void {\n if (tabs.value.length > 0) return;\n const t: TabState = { id: makeId(), path, viewMode, split: null };\n tabs.value = [t];\n activeId.value = t.id;\n }\n\n /** Update the ACTIVE tab's snapshot (navigation / view-mode change). */\n function syncActive(patch: Partial<Pick<TabState, 'path' | 'viewMode'>>): void {\n const t = activeTab.value;\n if (!t) return;\n if (patch.path !== undefined) t.path = patch.path;\n if (patch.viewMode !== undefined) t.viewMode = patch.viewMode;\n }\n\n /** Open a new tab right after the active one (browser convention). */\n function openTab(\n path: string,\n o: { viewMode: ViewMode; background?: boolean; split?: TabSplit | null },\n ): TabState {\n const t: TabState = { id: makeId(), path, viewMode: o.viewMode, split: o.split ?? null };\n const idx = activeIndex.value;\n tabs.value.splice(idx === -1 ? tabs.value.length : idx + 1, 0, t);\n if (!o.background) activeId.value = t.id;\n return t;\n }\n\n /**\n * Close a tab. The last remaining tab never closes. Returns the tab\n * the host must ACTIVATE (right neighbour, else left) when the active\n * one was closed; null when the visible location is unchanged.\n */\n function closeTab(id: string): TabState | null {\n if (tabs.value.length <= 1) return null;\n const idx = tabs.value.findIndex((t) => t.id === id);\n if (idx === -1) return null;\n const wasActive = tabs.value[idx].id === activeId.value;\n tabs.value.splice(idx, 1);\n if (!wasActive) return null;\n const next = tabs.value[Math.min(idx, tabs.value.length - 1)];\n activeId.value = next.id;\n return next;\n }\n\n /** Make a tab active. Returns it when the active tab actually changed. */\n function activate(id: string): TabState | null {\n const t = tabs.value.find((x) => x.id === id);\n if (!t || t.id === activeId.value) return null;\n activeId.value = t.id;\n return t;\n }\n\n /** Cycle: +1 = next, -1 = previous (wraps). */\n function step(delta: number): TabState | null {\n if (tabs.value.length < 2) return null;\n const idx = activeIndex.value === -1 ? 0 : activeIndex.value;\n const next = tabs.value[(idx + delta + tabs.value.length) % tabs.value.length];\n return activate(next.id);\n }\n\n /** Drag-sort support: move the tab at `from` to position `to`. */\n function move(from: number, to: number): void {\n if (from === to) return;\n if (from < 0 || to < 0 || from >= tabs.value.length || to >= tabs.value.length) return;\n const list = [...tabs.value];\n const [t] = list.splice(from, 1);\n list.splice(to, 0, t);\n tabs.value = list;\n }\n\n /** Set (or clear with null) the ACTIVE tab's split state. */\n function setSplit(split: TabSplit | null): void {\n const t = activeTab.value;\n if (!t) return;\n t.split = split;\n }\n\n return {\n tabs,\n activeId,\n activeTab,\n activeIndex,\n hasMultiple,\n restore,\n seed,\n syncActive,\n openTab,\n closeTab,\n activate,\n step,\n move,\n setSplit,\n };\n}\n\nexport type TabsApi = ReturnType<typeof useTabs>;\n","<script setup lang=\"ts\">\n/**\n * EncryptedFolderModal — create an E2E-encrypted folder (wiring:e2).\n *\n * Collects folder name + password ×2 and an explicit \"I understand there\n * is NO recovery\" acknowledgement. The parent (FileExplorer) performs the\n * actual newfolder + marker-upload dance; this modal never touches the\n * network and never stores the password anywhere.\n *\n * Crypto scheme + threat model: docs/E2E-ENCRYPTION.md.\n */\nimport { ref, watch } from 'vue';\nimport type { LocaleCode } from '../types/ExplorerConfig';\nimport { useLocale } from '../composables/useLocale';\nimport { E2E_MIN_PASSWORD_LEN } from '../lib/e2ecrypto';\nimport Modal from '../modals/Modal.vue';\n\nconst props = defineProps<{\n open: boolean;\n locale: LocaleCode;\n /** True while the parent is creating the folder + uploading the marker. */\n busy?: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n (e: 'submit', payload: { name: string; password: string }): void;\n}>();\n\nconst { t } = useLocale(() => props.locale);\nconst name = ref('');\nconst password = ref('');\nconst password2 = ref('');\nconst ack = ref(false);\nconst err = ref<string | null>(null);\n\nwatch(\n () => props.open,\n (v) => {\n if (v) {\n name.value = '';\n password.value = '';\n password2.value = '';\n ack.value = false;\n err.value = null;\n }\n },\n);\n\nfunction submit() {\n if (props.busy) return;\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 === '..' || clean.startsWith('.filex')) {\n err.value = t('e2e.create.bad_name');\n return;\n }\n if (password.value.length < E2E_MIN_PASSWORD_LEN) {\n err.value = t('e2e.create.pw_short');\n return;\n }\n if (password.value !== password2.value) {\n err.value = t('e2e.create.pw_mismatch');\n return;\n }\n if (!ack.value) {\n err.value = t('e2e.create.ack_required');\n return;\n }\n err.value = null;\n emit('submit', { name: clean, password: password.value });\n}\n</script>\n\n<template>\n <Modal :open=\"open\" :title=\"t('e2e.create.title')\" size=\"sm\" @close=\"emit('close')\">\n <form class=\"fe-e2e-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 :disabled=\"busy\"\n />\n <input\n v-model=\"password\"\n type=\"password\"\n class=\"fe-input\"\n :placeholder=\"t('e2e.create.pw_placeholder')\"\n autocomplete=\"new-password\"\n :disabled=\"busy\"\n />\n <input\n v-model=\"password2\"\n type=\"password\"\n class=\"fe-input\"\n :placeholder=\"t('e2e.create.pw2_placeholder')\"\n autocomplete=\"new-password\"\n :disabled=\"busy\"\n @keydown.enter.prevent=\"submit\"\n />\n <div class=\"fe-e2e-warn\" role=\"alert\">\n <strong>{{ t('e2e.create.warn_title') }}</strong>\n <p>{{ t('e2e.create.warn_body') }}</p>\n </div>\n <label class=\"fe-e2e-ack\">\n <input v-model=\"ack\" type=\"checkbox\" :disabled=\"busy\" />\n <span>{{ t('e2e.create.ack') }}</span>\n </label>\n <p v-if=\"err\" class=\"fe-form__error\">{{ err }}</p>\n </form>\n <template #actions>\n <button type=\"button\" class=\"fe-btn\" :disabled=\"busy\" @click=\"emit('close')\">\n {{ t('modal.newfolder.cancel') }}\n </button>\n <button type=\"button\" class=\"fe-btn fe-btn--primary\" :disabled=\"busy\" @click=\"submit\">\n {{ busy ? t('e2e.create.busy') : t('e2e.create.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 /* wiring:e2 — hosts hide the encrypted option (e.g. already inside an\n * encrypted folder / feature-gated embeds). Default: shown. */\n encryptedOption?: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: 'close'): void;\n (e: 'submit', name: string): void;\n /* wiring:e2 — user picked \"Create encrypted folder…\" — the parent swaps\n * this modal for EncryptedFolderModal. */\n (e: 'encrypted'): 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 <!-- wiring:e2 — encrypted-folder entry point lives inside the normal\n new-folder flow so every trigger (toolbar / context menu / palette)\n reaches it without extra wiring. -->\n <button\n v-if=\"encryptedOption !== false\"\n type=\"button\"\n class=\"fe-e2e-optlink\"\n @click=\"emit('encrypted')\"\n >\n 🔒 {{ t('e2e.create.option') }}\n </button>\n <!-- /wiring:e2 -->\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 * 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.brf.sh/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>\n/* ⚠ NOT `scoped`, deliberately. Vue's scoped styles compile to\n `.cls[data-v-HASH]`, and in the web-component build the hash baked into\n this CSS does not match the one Vue stamps onto the DOM — so every rule\n here silently stopped applying. Measured in the desktop app: the share\n dialog had `position: static`, no background and no radius, i.e. raw\n unstyled HTML, in EVERY embedded surface.\n Safe to drop: every selector below is prefixed (fx-/fe-/filex-), so\n there is nothing here that can leak into a host page. */\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\n// ── native share (Web Share API) ──\n// Same OS share sheet the fishapp uses (Windows share / Android share). Only\n// shown when the browser supports it (secure context + navigator.share, e.g.\n// Chrome/Edge on Windows, Android). The shared text mirrors the invite email\n// body (see backend mail_templates.go) so a WhatsApp/mail forward reads the\n// same as an emailed link.\nconst canShare = computed(() => typeof navigator !== 'undefined' && typeof navigator.share === 'function');\n\n// humanSize mirrors the Go humanSize() used in the email body (1.4 MB).\nfunction humanSize(b?: number): string {\n if (!b || b <= 0) return '';\n const unit = 1024;\n if (b < unit) return `${b} B`;\n const units = ['K', 'M', 'G', 'T', 'P', 'E'];\n let div = unit, exp = 0;\n for (let n = b / unit; n >= unit; n /= unit) { div *= unit; exp++; }\n return `${(b / div).toFixed(1)} ${units[exp]}B`;\n}\n\nfunction expiryLine(days: number): string {\n if (days > 0) return L(`Bu bağlantı ${days} gün geçerlidir.`, `This link is valid for ${days} day(s).`);\n return L('Bu bağlantının süresi yoktur.', 'This link does not expire.');\n}\n\n// Text + title for a download-share link, mirroring shareMailText().\nfunction shareBody(): { title: string; text: string } {\n const name = pathParts.value.name;\n const url = shareResult.value?.url ?? '';\n const pin = shareResult.value?.pin ?? '';\n const kind = props.isDir ? L('klasör', 'folder') : L('dosya', 'file');\n const title = tr.value\n ? `${name} ${props.isDir ? 'klasörü' : 'dosyası'} sizinle paylaşıldı`\n : `${name} has been shared with you`;\n const lines: string[] = [];\n lines.push(L('Merhaba,', 'Hello,'), '');\n lines.push(L(`Sizinle bir ${kind} paylaşıldı:`, `A ${kind} has been shared with you:`), '');\n if (props.isDir) {\n lines.push(L(`Klasör: ${name}`, `Folder: ${name}`));\n } else {\n lines.push(L(`Dosya: ${name}`, `File: ${name}`));\n const sz = humanSize(props.size);\n if (sz) lines.push(L(`Boyut: ${sz}`, `Size: ${sz}`));\n }\n lines.push('', L('İndirmek için:', 'Download it here:'), url);\n if (pin) lines.push('', L(`PIN (erişim kodu): ${pin}`, `PIN (access code): ${pin}`));\n lines.push('', expiryLine(shareExpiry.value));\n return { title, text: lines.join('\\n') };\n}\n\n// Text + title for a file-drop (upload) link, mirroring dropInviteMailText().\nfunction dropBody(): { title: string; text: string } {\n const folder = pathParts.value.name;\n const url = dropResult.value?.url ?? '';\n const pin = dropResult.value?.pin ?? '';\n const maxFiles = Number(dropMaxFiles.value) || 20;\n const maxMB = Number(dropMaxSizeMB.value) || 500;\n const exts = dropAllowedExt.value.split(/[,\\s]+/).map((s) => s.trim().replace(/^\\./, '')).filter(Boolean);\n const title = L(`${folder} adlı klasöre dosya eklemeniz istendi`, `You've been asked to add files to ${folder}`);\n const lines: string[] = [];\n lines.push(L('Merhaba,', 'Hello,'), '');\n lines.push(L('Dosya yüklemeniz istendi.', \"You've been invited to upload files.\"), '');\n lines.push(L(`Klasör: ${folder}`, `Folder: ${folder}`));\n lines.push(L(`Sınır: en fazla ${maxFiles} dosya, dosya başına ${maxMB} MB.`, `Limit: up to ${maxFiles} file(s), ${maxMB} MB per file.`));\n lines.push(exts.length\n ? L(`İzinli türler: ${exts.join(', ')}`, `Allowed types: ${exts.join(', ')}`)\n : L('İzinli türler: tüm türler', 'Allowed types: all'));\n lines.push('', L('Dosyalarınızı buradan yükleyebilirsiniz:', 'Upload your files here:'), url);\n if (pin) lines.push('', L(`PIN (erişim kodu): ${pin}`, `PIN (access code): ${pin}`));\n lines.push('', expiryLine(dropExpiry.value));\n return { title, text: lines.join('\\n') };\n}\n\nasync function nativeShare(body: { title: string; text: string }) {\n if (!canShare.value) return;\n try {\n await navigator.share(body);\n } catch {\n // user cancelled (AbortError) or the target rejected — nothing to do.\n }\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\n <!-- native share (OS share sheet) — same as the fishapp Paylaş button -->\n <button v-if=\"canShare\" type=\"button\" class=\"fx-perm-btn fx-perm-btn--ghost fx-perm-sharebtn\" @click=\"nativeShare(shareBody())\">\n <span aria-hidden=\"true\">📤</span> {{ L('Paylaş', 'Share') }}\n </button>\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\n <!-- native share (OS share sheet) — same as the fishapp Paylaş button -->\n <button v-if=\"canShare\" type=\"button\" class=\"fx-perm-btn fx-perm-btn--ghost fx-perm-sharebtn\" @click=\"nativeShare(dropBody())\">\n <span aria-hidden=\"true\">📤</span> {{ L('Paylaş', 'Share') }}\n </button>\n </div>\n </div>\n </template>\n </div>\n </div>\n </div>\n</template>\n\n<style>\n/* ⚠ NOT `scoped`, deliberately. Vue's scoped styles compile to\n `.cls[data-v-HASH]`, and in the web-component build the hash baked into\n this CSS does not match the one Vue stamps onto the DOM — so every rule\n here silently stopped applying. Measured in the desktop app: the share\n dialog had `position: static`, no background and no radius, i.e. raw\n unstyled HTML, in EVERY embedded surface.\n Safe to drop: every selector below is prefixed (fx-/fe-/filex-), so\n there is nothing here that can leak into a host page. */\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/* native \"Paylaş\" button — sits under the mail row, full width */\n.fx-perm-sharebtn { display: flex; width: 100%; align-items: center; justify-content: center; gap: 6px; margin-top: 8px; }\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, type GlobalSearchHit } 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 { useRealtime } from './composables/useRealtime';\nimport { useThumbs } from './composables/useThumbs';\nimport { preloadEditor } from './composables/useMonacoLoader';\nimport PresenceBar from './components/PresenceBar.vue';\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 GalleryView from './components/GalleryView.vue'; /* wiring:d2 */\nimport ContextMenu, { type ContextAction } from './components/ContextMenu.vue';\nimport UploadProgress from './components/UploadProgress.vue';\nimport PendingOpsTray from './components/PendingOpsTray.vue';\nimport InspectorPanel from './components/InspectorPanel.vue'; /* koru:k1 */\n/* cila:c wiring */\nimport CommandPalette from './components/CommandPalette.vue';\nimport ShortcutsHelp from './components/ShortcutsHelp.vue';\n/* /cila:c wiring */\n/* wiring:c1 — tema galerisi */\nimport ThemeGallery from './components/ThemeGallery.vue';\nimport { useThemeState, applyThemeToEl, syncThemeStyle } from './lib/themes';\n/* /wiring:c1 */\n/* wiring:c2 — shortcut settings modal + Space quick-look overlay */\nimport ShortcutSettings from './components/ShortcutSettings.vue';\nimport QuickLook from './components/QuickLook.vue';\n/* /wiring:c2 */\n/* wiring:c3 — unified operations center */\nimport OperationsCenter from './components/OperationsCenter.vue';\nimport { useOperations } from './composables/useOperations';\n/* /wiring:c3 */\n/* wiring:c4 */\nimport OnboardingTour from './components/OnboardingTour.vue';\n/* /wiring:c4 */\n/* wiring:d1 — sekmeler + tab başına split */\nimport TabBar from './components/TabBar.vue';\nimport SecondaryPane from './components/SecondaryPane.vue';\nimport { useTabs, type TabState } from './composables/useTabs';\n/* /wiring:d1 */\n/* wiring:e2 — uçtan uca şifreli klasörler (docs/E2E-ENCRYPTION.md) */\nimport EncryptedFolderModal from './components/EncryptedFolderModal.vue';\nimport {\n createKeyRing,\n createMarker,\n parseMarker,\n verifyPassword,\n encryptFile,\n decryptFile,\n hasMagic,\n E2E_MARKER_NAME,\n E2E_MAX_FILE_BYTES,\n} from './lib/e2ecrypto';\n/* /wiring:e2 */\n\n/* ui-fix — listing helpers shared with SecondaryPane (single source: the\n internal-entry filter + virtual `.trash` row must be identical in both\n panes or split view shows mismatched rows). */\nimport {\n filterListing,\n showHiddenFiles,\n setShowHiddenFiles,\n injectTrashRow,\n hydrateTrashRow as hydrateTrashRowShared,\n} from './lib/listing';\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 // Fires whenever the viewed folder changes (virtual `<storage>/<rel>` form).\n // Lets a host (e.g. the Explore page's realtime layer) track the current\n // folder without reaching into internal state.\n (e: 'navigate', p: { path: string }): void;\n}>();\n\n// --------------------------------------------------------------------\n// State\n// --------------------------------------------------------------------\n\nconst api = useFileApi(props.config);\n\n// Locale up-front: the pendingOps onSettled callback below (and the undo-toast\n// helpers) need `t()` at runtime, so the catalogue must be constructed before\n// they are wired. Depends only on props — safe this early.\nconst locale = computed(() => props.config.locale || 'tr');\nconst { t } = useLocale(locale);\n\n// Live collaboration (WebSocket file-change events + presence), bundled into the\n// core so every consumer — the native panel AND the embedded webcomponent —\n// gets it. Auth is a short-lived ticket fetched through the same API (works\n// same-origin and proxied cross-origin); it degrades to polling when no live\n// socket is available.\nconst realtime = useRealtime(api, { reload: () => load() });\nconst presenceUsers = realtime.presenceUsers;\n// True while the live socket is unavailable and the explorer runs on the\n// polling fallback — drives the small \"no live connection\" badge. Healthy\n// connections show nothing.\nconst realtimeDegraded = realtime.degraded;\nfunction realtimeRoom(vp: string): string | null {\n const p = (vp || '').replace(/^\\/+|\\/+$/g, '');\n if (p === '.trash' || p.startsWith('.trash/')) return null;\n // The wire form must go through the mode-aware qualify(), exactly like every\n // API call: in single-storage mode currentPath is a BARE relative path\n // (\"projeler/5\") — virtualToWire would mistake its first segment for an\n // adapter (\"projeler://5\") and subscribe a nonexistent room, so presence and\n // live changes silently missed the real folder. An empty p is the storage\n // root — a real room (\"main://\") — not \"no room\"; only the multi-storage\n // drives list (no adapter yet) has none.\n const wire = qualify(p);\n if (!wire || !wire.includes('://') || wire.startsWith('://')) return null;\n return wire;\n}\nonMounted(() => {\n realtime.start();\n realtime.subscribe(realtimeRoom(currentPath.value));\n});\nonBeforeUnmount(() => realtime.stop());\n\n// Authenticated thumbnails — raw thumb_url is root-relative + header-less,\n// which only ever worked for the native same-origin SPA (embedded hosts got\n// empty/broken <img>s). See useThumbs.\nconst thumbs = useThumbs(props.config.apiBase, api);\n\nconst chunked = useUploadChunked(props.config, api);\n\n// Undo registry for async pending ops: when a cleanly-invertible operation\n// (move → reverse move, trash-delete → restore) is queued, its inverse is\n// registered under the op id; once the op settles OK the toast grows a\n// \"Geri Al\" action. Ops without an entry keep the plain settled toast.\nconst opUndo = new Map<number, { message: string; fn: () => Promise<void> }>();\n\nconst pendingOps = usePendingOps(props.config, api, {\n onSettled: (op: PendingOp) => {\n const undo = opUndo.get(op.id);\n opUndo.delete(op.id);\n if (op.status === 'error') {\n flashToast(op.error_message || 'İşlem başarısız');\n } else if (undo) {\n undoToast(`${undo.message} (${op.progress_total})`, undo.fn);\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 void splitPaneRef.value?.reload(); /* wiring:d1 — ikincil panel de tazelenir */\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// The dead deep-link state: set to the requested path when a listing came\n// back 404 (folder doesn't exist) or 403 (RBAC-hidden — rendered identically\n// on purpose so a denied folder doesn't reveal that it exists). '' = none.\nconst notFoundPath = ref<string>('');\n// Listing failure that is NOT a dead link (network error, 5xx): remembered so\n// the body can render a retryable error state instead of a misleading \"this\n// folder is empty\". Only shown when no listing is visible — a failed\n// navigation away from a healthy listing keeps the current list + toast,\n// exactly as before.\nconst loadError = ref<string>('');\nlet loadErrorPath: string | undefined;\nfunction retryLoad() {\n void load(loadErrorPath);\n}\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' || stored === 'gallery') return stored; /* wiring:d2 */\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});\n/* cila:a density — Toolbar owns the persisted preference (filex.density);\n mirrored here only so the root `.fe` can carry fe--density-compact. */\nconst density = ref<'comfortable' | 'compact'>('comfortable');\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);\n\n// When the caller can see exactly ONE storage, the multi-storage root is a\n// one-row list that carries no information — the user clicks through it every\n// single time. Treat that storage as the floor instead: open it directly and\n// stop offering an \"up\" that only leads back to the one row.\n//\n// Empty string means \"not in that situation\" (single-storage mode, or more\n// than one storage visible), which leaves every existing path untouched.\nconst soleStorageName = computed(() => {\n if (!multiStorageRoot.value) return '';\n const list = props.config.storages ?? [];\n return list.length === 1 ? list[0].name : '';\n});\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 if (soleStorageName.value && p === soleStorageName.value) return false;\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 // The button is hidden here, but Alt+↑ / Backspace still route through.\n if (soleStorageName.value && cur === soleStorageName.value) 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 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 // Presence focus: a single selected file is what the user is \"on\"; a\n // multi-select or folder selection clears it.\n const focusFiles = selection.nodes.value.filter((n) => n.type === 'file');\n realtime.setFocus(focusFiles.length === 1 ? focusFiles[0].basename : null);\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 // ⚠ NOT 'include'. With a bearer token the request is cross-origin for\n // every embedder that serves the UI from a different origin to the API\n // (the desktop app is one), and a credentialed request may not be\n // answered with `Access-Control-Allow-Origin: *` — which is what filex\n // sends. This one line made starred files fail silently in every such\n // install while the rest of the explorer worked.\n credentials: api.credentialsMode(),\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: api.credentialsMode(),\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);\n/* ui-fix — açık olan rename/delete/new-folder modal'ı yan panele mi ait?\n * (menü ana panelle aynı; mutasyonlar doğru panele yönlensin diye.) */\nconst mutationInPane = ref(false);\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/* === koru:k1 — inspector (details) panel ===\n * Open/closed preference persists under `filex.inspector`; the panel itself\n * mounts with v-if so the closed state leaves zero DOM behind. */\nconst INSPECTOR_LS_KEY = 'filex.inspector';\nconst showInspector = ref<boolean>(\n (() => {\n try {\n return localStorage.getItem(INSPECTOR_LS_KEY) === '1';\n } catch {\n return false;\n }\n })(),\n);\nfunction persistInspector(v: boolean) {\n try {\n localStorage.setItem(INSPECTOR_LS_KEY, v ? '1' : '0');\n } catch {\n /* quota / private mode */\n }\n}\nfunction toggleInspector() {\n showInspector.value = !showInspector.value;\n persistInspector(showInspector.value);\n}\nfunction openInspector() {\n if (!showInspector.value) {\n showInspector.value = true;\n persistInspector(true);\n }\n}\nfunction closeInspector() {\n if (showInspector.value) {\n showInspector.value = false;\n persistInspector(false);\n }\n}\n// Folder summary label for the no-selection state.\nconst inspectorDirLabel = computed(() => {\n if (trashMode.value) return t('node.trash');\n const p = (currentPath.value ?? '').replace(/^\\/+|\\/+$/g, '');\n if (!p) return adapter.value || t('breadcrumb.root');\n return p.split('/').pop() || p;\n});\nfunction onInspectorManage(n: FileNode) {\n permTarget.value = n;\n showPerm.value = true;\n}\n/* === /koru:k1 === */\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// Empty-state affordances: the \"drop files here\" hint + upload button only\n// make sense in a real writable folder (not the virtual drives root, not the\n// trash view).\nconst emptyCanUpload = computed(\n () => canWriteHere.value && !atVirtualRoot.value && !trashMode.value,\n);\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/* bag:b4 — narrow/embed mini mode.\n * isNarrow: container width < 560px (ResizeObserver on the .fe root, so it\n * tracks the EMBED container, not the viewport) → root gets `fe--narrow`,\n * the toolbar collapses and the upload FAB appears.\n * isCoarse: touch-first device → context menus render as a bottom sheet. */\nconst isNarrow = ref(false);\nconst isCoarse = ref(false);\nlet narrowRO: ResizeObserver | undefined;\nlet coarseMq: MediaQueryList | undefined;\nfunction syncCoarsePointer(e?: MediaQueryListEvent | MediaQueryList) {\n isCoarse.value = !!(e && 'matches' in e && e.matches);\n}\nonMounted(() => {\n if (typeof ResizeObserver !== 'undefined' && rootEl.value) {\n narrowRO = new ResizeObserver((entries) => {\n const w = entries[0]?.contentRect?.width ?? rootEl.value?.clientWidth ?? 0;\n isNarrow.value = w > 0 && w < 560;\n });\n narrowRO.observe(rootEl.value);\n }\n if (typeof window !== 'undefined' && window.matchMedia) {\n coarseMq = window.matchMedia('(pointer: coarse)');\n syncCoarsePointer(coarseMq);\n coarseMq.addEventListener?.('change', syncCoarsePointer);\n }\n});\nonBeforeUnmount(() => {\n narrowRO?.disconnect();\n narrowRO = undefined;\n coarseMq?.removeEventListener?.('change', syncCoarsePointer);\n coarseMq = undefined;\n});\n/* /bag:b4 */\n\n// Toast (tiny, no lib). Evolved into a snackbar: plain messages keep the old\n// 2.5s auto-hide; messages carrying an action (\"Geri Al\") stay 8s and can be\n// dismissed by click or Esc.\ninterface ToastState {\n message: string;\n actionLabel?: string;\n action?: () => void | Promise<void>;\n}\nconst toast = ref<ToastState | null>(null);\nlet toastTimer: ReturnType<typeof setTimeout> | undefined;\nfunction showToast(state: ToastState, ms: number) {\n toast.value = state;\n if (toastTimer) clearTimeout(toastTimer);\n toastTimer = setTimeout(() => (toast.value = null), ms);\n}\nfunction flashToast(msg: string) {\n showToast({ message: msg }, 2500);\n}\nfunction undoToast(message: string, undo: () => Promise<void>) {\n showToast({ message, actionLabel: t('toast.undo'), action: undo }, 8000);\n}\nfunction dismissToast() {\n if (toastTimer) {\n clearTimeout(toastTimer);\n toastTimer = undefined;\n }\n toast.value = null;\n}\nasync function runToastAction() {\n const act = toast.value?.action;\n dismissToast();\n if (!act) return;\n try {\n await act();\n flashToast(t('toast.undone'));\n await load();\n } catch {\n flashToast(t('toast.undo_failed'));\n }\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\n// Flip dot-file visibility. Both panes filter at load time rather than in a\n// computed, so the listings are re-fetched instead of re-filtered — that keeps\n// selection and the operations that read `files` working on exactly what is\n// on screen.\nfunction toggleHiddenFiles() {\n setShowHiddenFiles(!showHiddenFiles.value);\n void load();\n void splitPaneRef.value?.reload();\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 let requested = path ?? currentPath.value ?? '';\n try {\n notFoundPath.value = '';\n loadError.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 // One visible storage → skip the one-row list and open it. Recursion is\n // bounded: the recursive call carries a non-empty path, so\n // virtualToWire() resolves and this branch is not re-entered.\n if (soleStorageName.value) return await load(soleStorageName.value);\n currentPath.value = '';\n adapter.value = '';\n dirname.value = '';\n e2eRoot.value = ''; /* wiring:e2 — sanal kökte kilit ekranı olmaz */\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 /* wiring:e2 — backend tells us when this dir sits inside an encrypted\n subtree; '' resets on every plain folder. Drives the lock screen. */\n e2eRoot.value = typeof resp.e2e_root === 'string' ? resp.e2e_root : '';\n /* /wiring:e2 */\n files.value = filterListing(resp.files);\n // Inject virtual `.trash` entry at root only — shared helper so the\n // split-view secondary pane shows the exact same row (no row-offset).\n if (injectTrashRow(files.value, resp.adapter, resp.dirname, props.config.trashVisible !== false)) {\n void hydrateTrashRowShared(files.value, resp.adapter, api);\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 const status = (err as { status?: number }).status;\n if (status === 404 || status === 403) {\n // Dead deep link (deleted folder, phantom path or RBAC-hidden dir):\n // show the dedicated not-found state instead of a toast over a stale\n // listing that reads as \"this folder is empty\".\n notFoundPath.value = String(requested);\n e2eRoot.value = ''; /* wiring:e2 — ölü linkte kilit ekranı kalmasın */\n files.value = [];\n emit('error', { message: e, context: { path } });\n return;\n }\n // Real failure (network, 5xx). Never swallowed: the error still emits, and\n // it surfaces either as the retryable error state (nothing else on screen)\n // or as the classic toast over the still-visible previous listing.\n loadError.value = e;\n loadErrorPath = typeof requested === 'string' ? requested : undefined;\n emit('error', { message: e, context: { path } });\n if (files.value.length > 0) 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// \"Go to root\" escape hatch on the not-found state. load('') clamps to the\n// confined rootFloor on embeds, so this is safe everywhere.\nfunction leaveNotFound() {\n notFoundPath.value = '';\n // Cold-load on a dead deep link: currentPath is still '' (the 404 never\n // committed it), so navigating to root doesn't change it and the\n // watch(currentPath) persistence never fires — the dead hash would\n // survive and a reload would land on the 404 again. Clear it explicitly;\n // if load('') clamps to a confined floor path, the watch fires with the\n // new path and rewrites the hash correctly anyway.\n writePersistedPath('');\n void load('');\n}\n\n// (hydrateTrashRow moved to lib/listing.ts — shared with SecondaryPane.)\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 e2eRoot.value = ''; /* wiring:e2 — çöp görünümü şifreli bağlamın dışındadır */\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\n// ----------------------------------------------------------------\n// Undo helpers — compute the inverse of cleanly-invertible operations\n// (move → reverse move, rename → rename back, trash → restore). All\n// paths here are wire form (`<adapter>://<rel>`).\n// ----------------------------------------------------------------\n\nfunction wireBasename(p: string): string {\n const idx = p.indexOf('://');\n const rel = (idx === -1 ? p : p.slice(idx + 3)).replace(/\\/+$/, '');\n const slash = rel.lastIndexOf('/');\n return slash === -1 ? rel : rel.slice(slash + 1);\n}\n\nfunction wireParent(p: string): string {\n const idx = p.indexOf('://');\n const prefix = idx === -1 ? '' : p.slice(0, idx + 3);\n const rel = (idx === -1 ? p : p.slice(idx + 3)).replace(/\\/+$/, '');\n const slash = rel.lastIndexOf('/');\n return slash === -1 ? prefix : prefix + rel.slice(0, slash);\n}\n\n/* ui-fix — iki wire yolun AYNI dizini gösterip göstermediği (trailing-slash\n * ve kök `adapter://` güvenli). Bir öğeyi ZATEN bulunduğu klasöre bırakma\n * (source parent === target) no-op olmalı; aksi halde backend \"kendine\n * kopyala\" 400'ü döner. */\nfunction sameDir(a: string, b: string): boolean {\n const norm = (s: string) => {\n const i = s.indexOf('://');\n const pre = i === -1 ? '' : s.slice(0, i + 3);\n const rel = (i === -1 ? s : s.slice(i + 3)).replace(/\\/+$/, '');\n return pre + rel;\n };\n return norm(a) === norm(b);\n}\n\nfunction wireJoin(dir: string, name: string): string {\n if (!dir) return name;\n return dir.endsWith('://') || dir.endsWith('/') ? dir + name : `${dir}/${name}`;\n}\n\n// Register the inverse of a queued async move under its op id: once the op\n// settles OK, the toast offers \"Geri Al\" which queues the reverse move. The\n// inverse op deliberately gets NO undo entry of its own (no redo ping-pong).\nfunction registerMoveUndo(\n opId: number,\n sources: string[],\n targetWire: string,\n originWire: string | undefined,\n) {\n if (!originWire || !targetWire) return;\n const movedPaths = sources.map((p) => wireJoin(targetWire, wireBasename(p)));\n if (movedPaths.length === 0) return;\n opUndo.set(opId, {\n message: t('toast.moved'),\n fn: async () => {\n const { op } = await api.moveAsync(movedPaths, originWire, targetWire);\n pendingOps.register(op);\n },\n });\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' | 'hash+localStorage' | 'none' {\n return props.config.pathPersist ?? 'hash';\n}\n\nfunction hashPersistEnabled(): boolean {\n const m = persistMode();\n return m === 'hash' || m === 'hash+localStorage';\n}\n\n// A pasted/hand-edited hash can carry a stray `%` (a folder literally named\n// \"100%\") that decodeURIComponent rejects — fall back to the raw text.\nfunction safeDecode(s: string): string {\n try {\n return decodeURIComponent(s);\n } catch {\n return s;\n }\n}\n\nfunction readLsPath(): string {\n try {\n return localStorage.getItem(PATH_LS_KEY) || '';\n } catch {\n return '';\n }\n}\n\nfunction readHashPath(): string {\n const h = window.location.hash || '';\n if (!h.startsWith('#')) return '';\n return safeDecode(h.slice(1)).replace(/^\\/+|\\/+$/g, '');\n}\n\nfunction readPersistedPath(): string {\n if (typeof window === 'undefined') return '';\n const mode = persistMode();\n if (mode === 'none') return '';\n if (mode === 'localStorage') return readLsPath();\n const fromHash = readHashPath();\n if (fromHash || mode === 'hash') return fromHash;\n // hash+localStorage with an empty hash: an explicit start path\n // (?storage= deep link / rootPath floor) outranks the remembered folder.\n if (initialFloorPath) return '';\n return readLsPath();\n}\n\nfunction writePersistedPath(path: string) {\n if (typeof window === 'undefined') return;\n const mode = persistMode();\n if (mode === 'none') return;\n if (mode === 'localStorage' || mode === 'hash+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 if (mode === 'localStorage') return;\n }\n // Encode per segment so folder names with `%`/`#`/`?` survive the URL\n // round-trip while `/` separators stay readable.\n const encoded = path ? path.split('/').map(encodeURIComponent).join('/') : '';\n const target = encoded ? `#${encoded}` : '';\n if ((window.location.hash || '') === target) return;\n // replaceState never fires `hashchange`, so onHashChange only ever sees\n // genuine external edits (paste, back/forward) — no self-echo to suppress.\n history.replaceState(\n null,\n '',\n target || window.location.pathname + window.location.search,\n );\n}\n\nfunction onHashChange() {\n if (!hashPersistEnabled()) return;\n const p = readHashPath();\n if (p && p !== currentPath.value) {\n void load(p);\n }\n}\n\nwatch(currentPath, (p) => {\n writePersistedPath(p);\n emit('navigate', { path: p });\n realtime.subscribe(realtimeRoom(p));\n});\n\n// Let a host force a soft re-fetch of the current folder (reusing the existing\n// list-fetch) — used by the realtime layer to refresh on live change events\n// without a full component remount.\ndefineExpose({ reload: () => load() });\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 (hashPersistEnabled()) {\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\n/* cila:c wiring — command palette (Ctrl/Cmd+K) + shortcuts help (?) state */\nconst showPalette = ref(false);\nconst showShortcutsHelp = ref(false);\n/* /cila:c wiring */\n\n/* bul:s3 — palette \"everywhere\" search + open-hit navigation */\n\n// Debounce/min-chars live in the palette; this is just the API call.\nfunction paletteGlobalSearch(q: string): Promise<GlobalSearchHit[]> {\n return api.globalSearch(q, { limit: 8, scope: 'all' });\n}\n\n/**\n * Open a global-search hit: navigate to the file's folder, then select +\n * preview it through the existing openNode mechanics. Hits come back as raw\n * node rows (in-storage relative `path`, numeric `storage_id`), so the\n * storage segment for multi-storage mode is resolved best-effort: an\n * explicit name on the hit (future backends) > the only configured storage\n * > the storage currently open. A wrong guess lands on the existing\n * \"folder not found\" state, which is already a graceful dead-end.\n */\nasync function openSearchHit(hit: GlobalSearchHit) {\n const rel = String(hit.path ?? '').replace(/^\\/+|\\/+$/g, '');\n if (!rel) return;\n const isDir = hit.type === 'dir';\n const slash = rel.lastIndexOf('/');\n const targetRel = isDir ? rel : slash === -1 ? '' : rel.slice(0, slash);\n let target = targetRel;\n if (multiStorageRoot.value) {\n const configured = props.config.storages ?? [];\n const storageName =\n (typeof hit.storage === 'string' && hit.storage) ||\n (typeof hit.storage_name === 'string' && hit.storage_name) ||\n (configured.length === 1 ? configured[0].name : '') ||\n adapter.value;\n if (!storageName) return;\n target = targetRel ? `${storageName}/${targetRel}` : storageName;\n }\n await load(target);\n if (isDir) return;\n const name = String(hit.name ?? rel.slice(slash + 1));\n const node = files.value.find((f) => f.type === 'file' && f.basename === name);\n if (node) {\n selection.click(node.path);\n openNode(node);\n }\n}\n/* /bul:s3 */\n\nuseKeyboardShortcuts(rootEl, {\n onDelete: () => {\n /* ui-fix — kısayol da aktif panele gider (menüyle tutarlı). */\n if (paneIsActive.value) {\n const psel = splitPaneRef.value?.selectedNodes() ?? [];\n if (psel.length) {\n paneCtxTargets.value = psel;\n mutationInPane.value = true;\n showDelete.value = true;\n }\n } else if (!selection.isEmpty.value) {\n mutationInPane.value = false;\n showDelete.value = true;\n }\n },\n onRename: () => {\n if (paneIsActive.value) {\n const psel = splitPaneRef.value?.selectedNodes() ?? [];\n if (psel.length === 1) {\n renameTarget.value = psel[0];\n mutationInPane.value = true;\n showRename.value = true;\n }\n } else if (selection.nodes.value.length === 1) {\n renameTarget.value = selection.nodes.value[0];\n mutationInPane.value = false;\n showRename.value = true;\n }\n },\n onSelectAll: () => (paneIsActive.value ? splitPaneRef.value?.selectAll() : selection.selectAll()) /* wiring:d1 pane-route */,\n onOpen: () => {\n if (paneIsActive.value) return splitPaneRef.value?.openSelected(); /* wiring:d1 pane-route */\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 dismissToast();\n /* koru:k1 — Esc closes the narrow-mode inspector overlay only; the wide\n side panel is a persistent surface toggled by `i` / the toolbar. */\n if (isNarrow.value) closeInspector();\n },\n onFocusSearch: () => toolbarRef.value?.focusSearch(),\n onCut: () => (paneIsActive.value ? paneCut() : cut()) /* wiring:d1 pane-route */,\n onCopy: () => (paneIsActive.value ? paneCopy() : copyToClipboard()) /* wiring:d1 pane-route */,\n onPaste: () => (paneIsActive.value ? void panePaste() : void paste()) /* wiring:d1 pane-route */,\n onGoUp: () => (paneIsActive.value ? splitPaneRef.value?.goUp() : goUp()) /* wiring:d1 pane-route */,\n /* cila:c wiring */\n onPathJump: () => {\n showPalette.value = true;\n },\n onShowHelp: () => {\n showShortcutsHelp.value = true;\n },\n /* /cila:c wiring */\n onQuickLook: () => quickLookToggle() /* wiring:c2 */,\n onToggleHidden: () => toggleHiddenFiles(),\n onToggleInspector: () => toggleInspector() /* koru:k1 */,\n /* wiring:d1 — sekme aksiyonları (registry: tab-new/close/next/prev) */\n onTabNew: () => newTabHere(),\n onTabClose: () => closeTabById(tabsActiveId.value),\n onTabNext: () => nextTab(),\n onTabPrev: () => prevTab(),\n /* /wiring:d1 */\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 /* wiring:e2 — şifreli klasörde dosya açma: kilit açıksa çöz + salt-okunur\n önizleme (blob URL mevcut viewer'lara gider); kilitliyken hiçbir şey\n açılmaz (kilit ekranı zaten listeyi kapatır). */\n if (e2eUnlocked.value && n.type === 'file') {\n void e2eOpenPreview(n);\n return;\n }\n if (e2eLocked.value && n.type === 'file') return;\n /* /wiring:e2 */\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 brf-mono 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 (brf-mono `.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 /* wiring:e2 — önizleme de çözülmüş blob'dan beslenir */\n if (e2eUnlocked.value && n.type === 'file') {\n void e2eOpenPreview(n);\n return;\n }\n /* /wiring:e2 */\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 /* wiring:e2 — standalone editör rotası sunucudan HAM (şifreli) baytı\n çeker; şifreli klasörde her \"Aç\" in-page çözülmüş önizlemeye iner. */\n if (e2eActive.value) {\n if (e2eUnlocked.value) void e2eOpenPreview(n);\n return;\n }\n /* /wiring:e2 */\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' | 'pane' /* ui-fix — yan panel sağ-tık */;\nconst ctxMode = ref<ContextMode>('selection');\nconst breadcrumbCtxPath = ref<string>('');\n/* ui-fix — yan panel sağ-tık menüsünün hedef node'ları (pane selection). */\nconst paneCtxTargets = ref<FileNode[]>([]);\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\n/* ui-fix — yan (ikincil) panelde sağ-tık: pane'i aktifleştir + menüyü aç.\n * Menü ana panelle BİREBİR aynı (selectionActionList tek kaynak); aksiyonlar\n * dispatchItemAction'a gider ve ctxMode==='pane' iken pane-route'lanır. */\nfunction onPaneContext(node: FileNode | null, ev: MouseEvent) {\n activePane.value = 'split';\n const sel = splitPaneRef.value?.selectedNodes() ?? [];\n // node=null (boş alana sağ-tık): seçimsiz menü (Yeni Klasör + Yapıştır).\n // Aksi halde pane seçimi (yoksa tıklanan node) hedeftir.\n paneCtxTargets.value = node ? (sel.length > 0 ? sel : [node]) : [];\n ctxMode.value = 'pane';\n ctxRef.value?.show({ clientX: ev.clientX, clientY: ev.clientY }, paneCtxTargets.value);\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 if (ctxMode.value === 'pane' /* ui-fix — yan panel menüsü ana panelle BİREBİR aynı */) {\n const psel = paneCtxTargets.value;\n if (psel.length === 0) {\n // Boş alana sağ-tık: ana paneldeki canvas menüsüyle aynı.\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 return selectionActionList(psel);\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 { key: 'open-tab', label: t('ctx.open_new_tab'), icon: '⧉' } /* wiring:d1 */,\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 // Showing hidden files is a VIEW preference, so it stays available to\n // viewers too — the edit gate below only covers the mutating actions.\n const view: ContextAction[] = [\n {\n key: 'toggle-hidden',\n label: showHiddenFiles.value ? t('ctx.hide_hidden') : t('ctx.show_hidden'),\n icon: showHiddenFiles.value ? '🙈' : '👁',\n },\n ];\n if (!permCanEdit(dirPerm.value)) return view;\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 ...view,\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: 'open-tab', label: t('ctx.open_new_tab'), icon: '⧉', hidden: !single || sel[0]?.type !== 'dir' } /* wiring:d1 — klasörü yeni sekmede aç */,\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 || e2eActive.value /* wiring:e2 — convert ciphertext'e anlamsız */, disabled: !isFile },\n { key: 'access', label: accessLabel, icon: '🔗', hidden: !single || !w || e2eActive.value /* wiring:e2 — paylaşım MVP'de kapalı (link ciphertext verir) */ },\n { key: 'details', label: t('ctx.details'), icon: 'ℹ', hidden: !any } /* koru:k1 */,\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 if (ctxMode.value === 'pane' /* ui-fix — yan panel: aynı dispatch, pane-route */) {\n await dispatchItemAction(action.key, paneCtxTargets.value);\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 'details' /* koru:k1 */:\n openInspector();\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 mutationInPane.value = ctxMode.value === 'pane'; /* ui-fix */\n showRename.value = true;\n }\n break;\n case 'cut':\n /* ui-fix — pane bağlamında pano kaynağı pane'in dizini olmalı. */\n if (ctxMode.value === 'pane') paneCut();\n else {\n clipboard.value = { mode: 'cut', items: targets, sourcePath: currentPath.value };\n flashToast('Kes → Yapıştır hazır');\n }\n break;\n case 'copy':\n if (ctxMode.value === 'pane') paneCopy();\n else {\n clipboard.value = { mode: 'copy', items: targets, sourcePath: currentPath.value };\n flashToast('Kopyala → Yapıştır hazır');\n }\n break;\n case 'paste':\n /* ui-fix — sağ-klik menüsünden yapıştırma da aktif panele gider\n * (klavye kısayolu zaten pane-route'luydu; menü değildi). */\n if (ctxMode.value === 'pane' || paneIsActive.value) await panePaste();\n else await paste();\n break;\n case 'delete':\n mutationInPane.value = ctxMode.value === 'pane'; /* ui-fix */\n showDelete.value = true;\n break;\n case 'restore':\n if (targets.length > 0) await restoreSelection(targets);\n break;\n case 'toggle-hidden':\n toggleHiddenFiles();\n break;\n case 'new-folder':\n mutationInPane.value = ctxMode.value === 'pane'; /* ui-fix */\n showNewFolder.value = true;\n break;\n case 'duplicate':\n if (targets[0]) await duplicate(targets[0]);\n break;\n /* wiring:d1 — sağ-tık \"Yeni sekmede aç\" */\n case 'open-tab':\n if (targets[0]) openNodeInTab(targets[0]);\n break;\n /* /wiring:d1 */\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 targetWire = qualify(currentPath.value);\n const originWire = qualify(sourceDir) || undefined;\n const { op } = await api.moveAsync(items, targetWire, originWire);\n registerMoveUndo(op.id, items, targetWire, originWire);\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 /* wiring:e2 — şifreli klasörde indirme: baytları çek, çöz, orijinal adla\n kaydet (ham ciphertext'i kullanıcıya vermek anlamsız). */\n if (e2eUnlocked.value) {\n void e2eDownload(n);\n return;\n }\n /* /wiring:e2 */\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 const inPane = mutationInPane.value; /* ui-fix — yan panelde yeni klasör */\n try {\n const dirWire = inPane ? qualify(splitPaneRef.value?.getPath() ?? '') : qualify(currentPath.value);\n await api.newFolder(dirWire, name);\n showNewFolder.value = false;\n if (inPane) await splitPaneRef.value?.reload();\n else 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 const inPane = mutationInPane.value; /* ui-fix — yan panelden yeniden adlandırma */\n try {\n const dirWire = inPane ? qualify(splitPaneRef.value?.getPath() ?? '') : qualify(currentPath.value);\n const oldPath = target.path; // qualified\n const oldName = target.basename;\n await api.rename(dirWire, oldPath, name);\n showRename.value = false;\n renameTarget.value = null;\n if (inPane) await splitPaneRef.value?.reload();\n else await load();\n // Clean inverse: rename the new path back to the old basename.\n if (name && name !== oldName) {\n const newPath = wireJoin(wireParent(oldPath), name);\n undoToast(t('toast.renamed'), async () => {\n await api.rename(dirWire, newPath, oldName);\n });\n }\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 /* ui-fix — yan panelden silme: hedefler + dizin + tazeleme pane'e ait. */\n const inPane = mutationInPane.value;\n const targets = inPane ? paneCtxTargets.value : selection.nodes.value;\n const dirWire = inPane ? qualify(splitPaneRef.value?.getPath() ?? '') : qualify(currentPath.value);\n const items = targets.map((n) => n.path);\n if (items.length === 0) {\n showDelete.value = false;\n return;\n }\n // Trash-delete is invertible via node-id restore — but only when EVERY\n // selected node carries a backend id and the restore endpoint exists.\n // A partial-undo offer would be a lie, so all-or-nothing.\n const nodeIds = targets\n .map((n) => (n as { id?: number }).id)\n .filter((x): x is number => typeof x === 'number');\n const restoreUndo =\n api.endpoints.trashRestore && nodeIds.length === targets.length\n ? async () => {\n const { restored } = await api.restoreIds(nodeIds);\n if (restored === 0) throw new Error('restore failed');\n }\n : null;\n try {\n if (api.endpoints.deleteAsync) {\n const { op } = await api.deleteAsync(items, dirWire);\n if (restoreUndo) {\n opUndo.set(op.id, { message: t('toast.trashed'), fn: restoreUndo });\n }\n pendingOps.register(op);\n flashToast('Silme kuyruğa alındı');\n } else {\n await api.deleteItems(dirWire, items);\n if (inPane) await splitPaneRef.value?.reload();\n else await load();\n if (restoreUndo) undoToast(t('toast.trashed'), restoreUndo);\n }\n showDelete.value = false;\n if (inPane) void splitPaneRef.value?.reload();\n else 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 /* wiring:e2 — şifreli klasörde upload şeffaf şifrelenir. Kilitliyken\n yükleme yok (düz metin sızdırma kapısı olurdu); 200MB üstü MVP\n tek-shot sınırına takılır ve uyarıyla atlanır. */\n if (e2eLocked.value) {\n flashToast(t('e2e.upload.locked'));\n return;\n }\n if (e2eUnlocked.value) {\n list = await e2eEncryptUploads(list);\n if (list.length === 0) return;\n }\n /* /wiring:e2 */\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 // Tell the USER, not just the embedding app. `emit('error')` alone left a\n // standalone deployment silent: the progress bar ran to 100% (the bytes\n // do go out — the server rejects them afterwards), the row flipped to an\n // error state carrying no message, and nothing else appeared. olivov lost\n // ten days of uploads to that silence (H2, 2026-08-05).\n const message = (err as Error).message;\n patch({ status: 'error', error: message });\n flashToast(t('upload.failed', { name: file.name }));\n emit('error', {\n 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 /* wiring:d1 — iç sürüklemeler kök gövdeye de bırakılabilir olmalı ki split\n panelinden ana panelin BOŞLUĞUNA bırakmak çalışsın (origin dragover'da\n okunamaz — karar drop anında verilir; aynı-klasör drop'u no-op kalır). */\n if (ev.dataTransfer?.types.includes(FE_DND_MIME)) {\n ev.preventDefault();\n return;\n }\n /* /wiring:d1 */\n if (isExternalFileDrag(ev)) {\n ev.preventDefault();\n }\n}\nfunction onDropUpload(ev: DragEvent) {\n /* wiring:d1 — split panelinden ana panelin boşluğuna bırakma = geçerli\n klasöre aktar (aynı klasörden gelenler no-op, eski davranış korunur). */\n if (ev.dataTransfer?.types.includes(FE_DND_MIME)) {\n const d1Origin = ev.dataTransfer.getData(FE_DND_SRC_MIME) || '';\n const d1Here = qualify(currentPath.value);\n if (d1Origin && d1Here && d1Origin !== d1Here && !trashMode.value && canWriteHere.value) {\n ev.preventDefault();\n dragCounter.value = 0;\n dragOver.value = false;\n try {\n const d1Items = JSON.parse(ev.dataTransfer.getData(FE_DND_MIME)) as Array<{ path: string }>;\n void transferItems(d1Items.map((i) => i.path), d1Here, d1Origin);\n } catch {\n /* bozuk payload — yok say */\n }\n return;\n }\n }\n /* /wiring:d1 */\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(FE_DND_SRC_MIME, qualify(currentPath.value)); /* wiring:d1 — paneller arası origin damgası */\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, originOverride?: string): Promise<void> {\n try {\n const originWire = originOverride ?? qualify(currentPath.value); /* wiring:d1 — split panelinden gelen sürüklemede gerçek kaynak klasör */\n if (api.endpoints.moveAsync) {\n const { op } = await api.moveAsync(sources, targetDir, originWire);\n registerMoveUndo(op.id, sources, targetDir, originWire);\n pendingOps.register(op);\n flashToast('Taşıma kuyruğa alındı');\n } else {\n await api.move(originWire, sources, targetDir);\n await load();\n // Sync move (no async endpoint): offer the reverse move right away.\n const movedPaths = sources.map((p) => wireJoin(targetDir, wireBasename(p)));\n undoToast(t('toast.moved'), async () => {\n await api.move(targetDir, movedPaths, originWire);\n });\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 // ui-fix — öğe zaten targetDir'in içindeyse (parent===target) atla: yerinde\n // bırakma no-op, backend \"kendine kopyala\" 400'ü tetiklemez.\n .filter((p) => p && p !== targetDir && !targetDir.startsWith(p + '/') && !sameDir(wireParent(p), targetDir));\n if (sources.length === 0) return; // sessiz no-op (yerinde bırakma)\n await transferItems(sources, targetDir, dndOrigin(ev)); /* wiring:d1 — depo-farkında aktarım */\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 // ui-fix — kırıntıya (aynı klasöre) yerinde bırakma no-op.\n .filter((p) => p && p !== targetDir && !targetDir.startsWith(p + '/') && !sameDir(wireParent(p), targetDir));\n if (sources.length === 0) return;\n await transferItems(sources, targetDir, dndOrigin(ev)); /* wiring:d1 — depo-farkında aktarım */\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\n/* === wiring:c1 — tema galerisi ===\n * Selected theme (shared module state, localStorage `filex.theme`) is applied\n * as inline `--fe-*` variables on the explorer root, resolved to the active\n * light/dark variant — plus a mirrored injected stylesheet for the surfaces\n * that re-declare tokens (teleported context menu, modal backdrops). Theme\n * selection is independent from the light/dark mode: the mode only picks\n * WHICH variant of the theme paints. */\nconst showThemeGallery = ref(false);\nconst { themeId: activeThemeId, setTheme: setActiveTheme } = useThemeState();\n// Resolved mode: explicit config wins, otherwise the OS preference — the same\n// logic variables.css encodes in CSS. The inline root variables beat every\n// stylesheet rule, so they must track this resolution at runtime.\nconst themeMq =\n typeof window !== 'undefined' && window.matchMedia\n ? window.matchMedia('(prefers-color-scheme: dark)')\n : undefined;\nconst themeOsDark = ref(!!themeMq?.matches);\nfunction onThemeMqChange(e: MediaQueryListEvent) {\n themeOsDark.value = e.matches;\n}\nonMounted(() => themeMq?.addEventListener?.('change', onThemeMqChange));\nonBeforeUnmount(() => themeMq?.removeEventListener?.('change', onThemeMqChange));\nconst themeResolvedDark = computed(\n () => props.config.theme === 'dark' || (props.config.theme !== 'light' && themeOsDark.value),\n);\nwatch(\n [activeThemeId, themeResolvedDark, rootEl],\n () => {\n syncThemeStyle(activeThemeId.value);\n if (rootEl.value) applyThemeToEl(rootEl.value, activeThemeId.value, themeResolvedDark.value);\n },\n { immediate: true },\n);\n/* === /wiring:c1 === */\n/* === wiring:c2 — shortcut settings modal + Space quick-look ===\n * quickLookTarget follows the selection while the peek is open: arrow\n * keys emitted by QuickLook move the selection here, and the watcher\n * below syncs the previewed file. Space toggles (registry action\n * `quicklook`); Enter promotes the peek into the normal open flow. */\nconst showShortcutSettings = ref(false);\nconst quickLookOpen = ref(false);\nconst quickLookTarget = ref<FileNode | null>(null);\n\nfunction quickLookToggle() {\n if (quickLookOpen.value) {\n quickLookOpen.value = false;\n return;\n }\n const sel = selection.nodes.value;\n const n = sel.length === 1 ? sel[0] : null;\n if (!n || n.type !== 'file' || n.basename === '.trash') return;\n /* wiring:e2 — Space peek şifreli klasörde önce çözer, sonra açar */\n if (e2eActive.value) {\n if (!e2eUnlocked.value) return;\n void (async () => {\n try {\n await e2eFetchDecrypted(n);\n } catch {\n flashToast(t('e2e.decrypt_failed'));\n return;\n }\n quickLookTarget.value = n;\n quickLookOpen.value = true;\n void markRecent(n);\n })();\n return;\n }\n /* /wiring:e2 */\n quickLookTarget.value = n;\n quickLookOpen.value = true;\n void markRecent(n);\n}\n\nfunction quickLookNav(delta: number) {\n const onlyFiles = files.value.filter((f) => f.type === 'file');\n if (onlyFiles.length === 0) return;\n const cur = quickLookTarget.value;\n let idx = cur ? onlyFiles.findIndex((f) => f.path === cur.path) : -1;\n idx = idx === -1 ? (delta > 0 ? 0 : onlyFiles.length - 1) : (idx + delta + onlyFiles.length) % onlyFiles.length;\n const next = onlyFiles[idx];\n if (!next || next.path === cur?.path) return;\n selection.click(next.path);\n}\n\nfunction quickLookOpenFull() {\n const n = quickLookTarget.value;\n quickLookOpen.value = false;\n if (n) openNode(n);\n}\n\nwatch(\n () => selection.nodes.value,\n (nodes) => {\n if (!quickLookOpen.value) return;\n const n = nodes.length === 1 && nodes[0].type === 'file' ? nodes[0] : null;\n /* wiring:e2 — ok tuşlarıyla gezerken de hedef atanmadan ÖNCE çöz,\n yoksa viewer bir anlığına ham ciphertext URL'i alır. */\n if (n && n.path !== quickLookTarget.value?.path && e2eUnlocked.value) {\n void (async () => {\n try {\n await e2eFetchDecrypted(n);\n } catch {\n /* çözülemedi — hedefi yine de değiştir, viewer hata gösterir */\n }\n quickLookTarget.value = n;\n void markRecent(n);\n })();\n return;\n }\n /* /wiring:e2 */\n if (n && n.path !== quickLookTarget.value?.path) {\n quickLookTarget.value = n;\n void markRecent(n);\n }\n },\n);\n/* === /wiring:c2 === */\n/* wiring:c3 — operations center store + failed-upload retry */\nconst opsCenter = useOperations();\n\n/**\n * Retry a failed upload from the operations center. The failed row is\n * already retired by the store; re-run the upload against the job's ORIGINAL\n * target folder (the user may have navigated away since) via the legacy\n * single-POST path — works for any storage / size, no chunked precondition.\n */\nfunction retryUploadJob(job: UploadJob) {\n uploadJobs.value = uploadJobs.value.filter((j) => j.id !== job.id);\n const file = job.file;\n const target = job.path || qualify(currentPath.value);\n const id = crypto.randomUUID();\n uploadJobs.value = [\n ...uploadJobs.value,\n { id, file, path: target, totalBytes: file.size, uploadedBytes: 0, percent: 0, status: 'uploading', cancel() {} },\n ];\n const patchRetry = (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 api\n .uploadMultipart(target, [file], (percent) => {\n patchRetry({ percent, uploadedBytes: Math.round((percent / 100) * file.size) });\n emit('upload-progress', { uploadId: id, percent, done: percent >= 100 });\n })\n .then(() => {\n patchRetry({ percent: 100, uploadedBytes: file.size, status: 'done' });\n emit('upload-progress', { uploadId: id, percent: 100, done: true });\n void load();\n })\n .catch((err: Error) => {\n patchRetry({ status: 'error', error: err.message });\n flashToast(t('upload.failed', { name: file.name }));\n emit('error', { message: err.message, context: { op: 'upload-retry', file: file.name } });\n });\n}\n/* /wiring:c3 */\n/* === wiring:c4 — onboarding coach-mark tour ===\n * First mount with no `filex.tourDone` flag auto-starts the tour (short\n * delay so the listing/toolbar are laid out). Closing it — finished OR\n * skipped — stamps the flag; \"Turu tekrar başlat\" re-opens it any time.\n * Restart arrives as a bubbled `fe:tour-restart` CustomEvent from the\n * Toolbar overflow menu, so no extra prop/emit threading through the\n * shared component tags is needed. */\nconst TOUR_LS_KEY = 'filex.tourDone';\nconst showTour = ref(false);\nlet tourTimer: ReturnType<typeof setTimeout> | undefined;\n\nfunction tourAlreadyDone(): boolean {\n try {\n return localStorage.getItem(TOUR_LS_KEY) === '1';\n } catch {\n return true; // no storage → never auto-nag\n }\n}\n\nfunction startTour() {\n showTour.value = true;\n}\n\nfunction onTourClose() {\n showTour.value = false;\n try {\n localStorage.setItem(TOUR_LS_KEY, '1');\n } catch {\n /* private mode / quota */\n }\n rootEl.value?.focus();\n}\n\nfunction onTourRestartEvent() {\n startTour();\n}\n\nonMounted(() => {\n rootEl.value?.addEventListener('fe:tour-restart', onTourRestartEvent);\n if (!tourAlreadyDone()) {\n tourTimer = setTimeout(() => {\n if (!showTour.value) startTour();\n }, 900);\n }\n});\nonBeforeUnmount(() => {\n if (tourTimer) clearTimeout(tourTimer);\n rootEl.value?.removeEventListener('fe:tour-restart', onTourRestartEvent);\n});\n/* === /wiring:c4 === */\n\n/* === wiring:d1 — sekmeler (tab şeridi) + tab başına split ===\n *\n * useTabs, mevcut konum state'inin (currentPath/viewMode) ÜSTÜNDE bir\n * katmandır: aktif tab gezinmeleri watch ile dinleyip snapshot'ını\n * günceller; tab geçişi mevcut load(path) yolunu çağırır — yeni fetch\n * mantığı yok. Şerit tek sekmede hiç render edilmez (embed pixel-aynı).\n *\n * Persist: `filex.tabs` — pathPersist scope mantığı izlenir: mode 'none'\n * ise persist kapalı; rootPath confine'ı anahtara eklenir ki farklı\n * confine'lı embed'ler birbirinin sekmelerini ezmesin.\n */\nconst FE_DND_SRC_MIME = 'application/x-brf-files-src';\n\nconst TABS_LS_BASE = 'filex.tabs';\nfunction tabsStorageKey(): string | null {\n if (persistMode() === 'none') return null;\n return rootPathProp ? `${TABS_LS_BASE}:${rootPathProp}` : TABS_LS_BASE;\n}\nconst tabsApi = useTabs({ storageKey: tabsStorageKey() });\nconst tabsRestored = tabsApi.restore();\nconst tabsActiveId = tabsApi.activeId;\n\nconst tabsVisible = computed(() => tabsApi.hasMultiple.value);\nconst activeSplit = computed(() => tabsApi.activeTab.value?.split ?? null);\n\n// Sekme adı OTOMATİK = güncel klasör adı (kök = depo adı / kök etiketi).\nfunction tabLabel(path: string): string {\n const p = (path || '').replace(/^\\/+|\\/+$/g, '');\n if (p === '.trash') return t('node.trash');\n if (!p) return multiStorageRoot.value ? t('breadcrumb.root') : adapter.value || t('breadcrumb.root');\n return p.split('/').pop() || p;\n}\nconst tabItems = computed(() =>\n tabsApi.tabs.value.map((tb) => ({ id: tb.id, label: tabLabel(tb.path), split: !!tb.split })),\n);\n\n// Aktif tab kullanıcıyı izler: gezinme + görünüm değişimi snapshot'a yazılır.\nwatch(currentPath, (p) => tabsApi.syncActive({ path: p }));\nwatch(viewMode, (v) => tabsApi.syncActive({ viewMode: v }));\n\n// İlk sekme, ilk konum belli olur olmaz tohumlanır (restore varsa dokunma —\n// aktif snapshot ilk load sonrası currentPath watcher'ıyla zaten senkronlanır).\nonMounted(() => {\n if (!tabsRestored) tabsApi.seed(currentPath.value ?? '', viewMode.value);\n});\n\nfunction applyTabLocation(tb: TabState) {\n if (tb.viewMode && tb.viewMode !== viewMode.value) viewMode.value = tb.viewMode;\n if (tb.path === '.trash') {\n void loadTrash();\n return;\n }\n void load(tb.path);\n}\nfunction activateTab(id: string) {\n const tb = tabsApi.activate(id);\n if (tb) applyTabLocation(tb);\n}\nfunction newTabHere() {\n // Mevcut konumu klonlar; görünüm zaten oradadır, load gerekmez.\n tabsApi.openTab(currentPath.value ?? '', { viewMode: viewMode.value, background: false });\n}\nfunction closeTabById(id: string) {\n const next = tabsApi.closeTab(id);\n if (next) applyTabLocation(next);\n}\nfunction nextTab() {\n const tb = tabsApi.step(1);\n if (tb) applyTabLocation(tb);\n}\nfunction prevTab() {\n const tb = tabsApi.step(-1);\n if (tb) applyTabLocation(tb);\n}\n\n/** Bir klasörü ARKA PLANDA yeni sekmede aç (orta-tık / sağ-tık / palet). */\nfunction openNodeInTab(n: FileNode) {\n if (n.type !== 'dir' || n.basename === '.trash') return;\n const target = multiStorageRoot.value ? wireToVirtual(n.path) : stripAdapter(n.path);\n tabsApi.openTab(target, { viewMode: viewMode.value, background: true });\n}\n\n// Orta-tık delegasyonu: ListView/GridView satırları data-fe-path taşır; kendi\n// keydown/emit zinciri eklemek yerine kökte tek auxclick dinleyicisi yeter.\n// (SecondaryPane kendi satırlarında stopPropagation ile kendisi halleder.)\nfunction onListAuxClick(ev: MouseEvent) {\n if (ev.button !== 1) return;\n const host = ev.target as HTMLElement | null;\n const el = host && typeof host.closest === 'function' ? host.closest('[data-fe-path]') : null;\n const p = el?.getAttribute('data-fe-path');\n if (!p) return;\n const node = files.value.find((f) => f.path === p);\n if (!node || node.type !== 'dir' || node.basename === '.trash') return;\n ev.preventDefault();\n openNodeInTab(node);\n}\n// Orta-tuş mousedown'ı satırlar üzerinde iptal: scroll'lu gövdede Chromium'un\n// autoscroll'u devreye girer ve auxclick HİÇ üretilmez (canlı teşhis) —\n// preventDefault autoscroll'u bastırır, auxclick yeniden akar.\nfunction onListMiddleDown(ev: MouseEvent) {\n if (ev.button !== 1) return;\n const host = ev.target as HTMLElement | null;\n if (host && typeof host.closest === 'function' && host.closest('[data-fe-path]')) {\n ev.preventDefault();\n }\n}\nonMounted(() => {\n rootEl.value?.addEventListener('auxclick', onListAuxClick);\n rootEl.value?.addEventListener('mousedown', onListMiddleDown);\n});\nonBeforeUnmount(() => {\n rootEl.value?.removeEventListener('auxclick', onListAuxClick);\n rootEl.value?.removeEventListener('mousedown', onListMiddleDown);\n});\n\n// ---- split (tab başına ikincil panel) ------------------------------\n\nconst splitPaneRef = ref<InstanceType<typeof SecondaryPane> | null>(null);\n// Dar modda split devre dışı (state korunur, genişleyince geri gelir).\nconst splitVisible = computed(() => !!activeSplit.value && !isNarrow.value);\n\nfunction toggleSplit() {\n if (activeSplit.value) {\n tabsApi.setSplit(null);\n activePane.value = 'main';\n return;\n }\n if (isNarrow.value) return;\n tabsApi.setSplit({ path: currentPath.value ?? '', viewMode: viewMode.value });\n}\nfunction closeSplit() {\n tabsApi.setSplit(null);\n activePane.value = 'main';\n}\nfunction onPaneNavigate(p: string) {\n tabsApi.setSplit({ ...(activeSplit.value ?? {}), path: p });\n}\n/* ui-fix — çöp kutusu satırı yan panelde açılınca: trash görünümü (geri\n * yükleme aksiyonlarıyla) ana panele aittir → ana paneli aktif edip aç. */\nfunction onPaneOpenTrash() {\n activePane.value = 'main';\n void loadTrash();\n}\n/* ui-fix — pane'in KENDİ görünüm modu: split açılırken ana panelinkini\n * devralır, sonrasında bağımsız. Toolbar'ın görünüm değiştiricisi ve palet\n * toggle'ı AKTİF panele yazar (Burak: \"B tıklıyken ikon değiştir dersem\n * B'nin değişmesi lazım\"). */\nconst paneViewMode = computed<ViewMode>(() => activeSplit.value?.viewMode ?? viewMode.value);\nfunction setPaneViewMode(v: ViewMode) {\n if (!activeSplit.value) return;\n tabsApi.setSplit({ ...activeSplit.value, viewMode: v });\n}\nconst displayedViewMode = computed<ViewMode>(() =>\n paneIsActive.value ? paneViewMode.value : viewMode.value,\n);\nfunction setDisplayedViewMode(v: ViewMode) {\n if (paneIsActive.value) setPaneViewMode(v);\n else viewMode.value = v;\n}\n\n// Aktif panel: kısayollar aktif panele gider; panel tıklamayla aktifleşir.\nconst activePane = ref<'main' | 'split'>('main');\nfunction setPaneMain() {\n activePane.value = 'main';\n}\nwatch(splitVisible, (v) => {\n if (!v) activePane.value = 'main';\n});\nconst paneIsActive = computed(() => activePane.value === 'split' && splitVisible.value);\nconst mainPaneFocus = computed(() => splitVisible.value && activePane.value === 'main');\n\n// Pane yardımcıları — hep ana panelin mevcut dönüştürücülerini sarar.\nfunction paneToUser(wire: string): string {\n return multiStorageRoot.value ? wireToVirtual(wire) : stripAdapter(wire);\n}\nfunction paneClamp(p: string): string {\n const clean = String(p ?? '').replace(/^\\/+|\\/+$/g, '');\n if (!rootFloor) return clean;\n if (!clean || !(clean === rootFloor || clean.startsWith(rootFloor + '/'))) return rootFloor;\n return clean;\n}\n\n// Pano (clipboard) aktif panele göre: kes/kopyala pane seçiminden beslenir,\n// yapıştır pane klasörüne iner. State ana panelinkiyle ORTAK — panolar arası\n// kes-yapıştır bedavaya çalışır.\nfunction paneCut() {\n const nodes = splitPaneRef.value?.selectedNodes() ?? [];\n if (nodes.length === 0) return;\n clipboard.value = { mode: 'cut', items: nodes, sourcePath: splitPaneRef.value?.getPath() ?? '' };\n flashToast('Kesildi');\n}\nfunction paneCopy() {\n const nodes = splitPaneRef.value?.selectedNodes() ?? [];\n if (nodes.length === 0) return;\n clipboard.value = { mode: 'copy', items: nodes, sourcePath: splitPaneRef.value?.getPath() ?? '' };\n flashToast('Kopyalandı');\n}\nasync function panePaste() {\n const cb = clipboard.value;\n const pane = splitPaneRef.value;\n if (!cb.mode || cb.items.length === 0 || !pane) return;\n const targetWire = qualify(pane.getPath() ?? '');\n const originWire = qualify(cb.sourcePath || '') || undefined;\n if (cb.mode === 'cut' && originWire === targetWire) {\n flashToast('Aynı klasöre kesilemez');\n return;\n }\n await transferItems(cb.items.map((n) => n.path), targetWire, originWire, cb.mode === 'copy');\n clipboard.value = { mode: null, items: [], sourcePath: null };\n}\n\n// ---- paneller arası aktarım ----------------------------------------\n\nfunction wireAdapterOf(p: string): string {\n const i = p.indexOf('://');\n return i === -1 ? '' : p.slice(0, i);\n}\nfunction dndOrigin(ev: DragEvent): string | undefined {\n const v = ev.dataTransfer?.getData(FE_DND_SRC_MIME);\n return v || undefined;\n}\n\n/**\n * transferItems — panel-arası / pano aktarımının tek kapısı.\n * Aynı depo → TAŞI (mevcut moveSourcesAsync yolu: kuyruk + geri al).\n * Farklı depo → KOPYALA dene; backend cross-storage desteklemiyorsa\n * i18n'li hata toast'ı. Bitince ikincil panel de tazelenir (ana panel\n * moveSourcesAsync / pendingOps onSettled üzerinden zaten tazelenir).\n */\nasync function transferItems(\n sources: string[],\n targetWire: string,\n originWire?: string,\n forceCopy = false,\n): Promise<void> {\n // ui-fix — yerinde bırakma (source parent === target) no-op: backend\n // \"kendine kopyala\" 400'ü engellenir (paneller arası + pano yolu).\n const list = sources.filter(\n (p) => p && p !== targetWire && !targetWire.startsWith(p + '/') && !sameDir(wireParent(p), targetWire),\n );\n if (list.length === 0 || !targetWire) return;\n const targetAdapter = wireAdapterOf(targetWire);\n const cross = list.some((p) => wireAdapterOf(p) !== targetAdapter);\n if (cross || forceCopy) {\n try {\n const { op } = await api.copy(list, targetWire);\n pendingOps.register(op);\n flashToast(cross ? t('split.cross_copy') : t('split.copy_queued'));\n } catch (err) {\n emit('error', { message: (err as Error).message, context: { op: 'transfer', targetWire } });\n flashToast(cross ? t('split.cross_failed') : (err as Error).message);\n return;\n }\n } else {\n await moveSourcesAsync(list, targetWire, 'move-transfer', originWire);\n }\n void splitPaneRef.value?.reload();\n}\n\nfunction onPaneTransfer(p: { sources: string[]; targetWire: string; originWire?: string }) {\n void transferItems(p.sources, p.targetWire, p.originWire);\n}\n/* === /wiring:d1 === */\n\n/* === wiring:e2 — uçtan uca şifreli klasörler ===\n *\n * Kripto şeması + tehdit modeli: docs/E2E-ENCRYPTION.md ve lib/e2ecrypto.ts.\n * Burada yalnız orkestrasyon var: backend listing yanıtındaki `e2e_root`\n * kilit ekranını sürer; parola marker'a karşı TARAYICIDA doğrulanır (sunucuya\n * hiçbir şey gitmez); türetilen klasör anahtarı (KEK) YALNIZ bellekte yaşar\n * (`e2eRing`) — localStorage/sessionStorage'a asla yazılmaz. Upload şeffaf\n * şifrelenir, önizleme/indirme şeffaf çözülür (blob URL mevcut viewer'lara).\n */\nconst e2eRing = createKeyRing();\n// Map'ler reaktif değil — sürüm sayacı computed'ları tetikler.\nconst e2eRingVer = ref(0);\n// İçinde bulunulan şifreli kökün wire yolu ('' = şifreli bağlam yok).\nconst e2eRoot = ref('');\n// path → çözülmüş blob objectURL (önizleme). Kilitleme/unmount'ta revoke.\nconst e2eUrls = new Map<string, string>();\n\nconst e2eActive = computed(() => !!e2eRoot.value && !trashMode.value);\nconst e2eUnlocked = computed(() => {\n void e2eRingVer.value;\n return e2eActive.value && e2eRing.has(e2eRoot.value);\n});\nconst e2eLocked = computed(() => {\n void e2eRingVer.value;\n return e2eActive.value && !e2eRing.has(e2eRoot.value);\n});\n\n// Kilit ekranı formu.\nconst e2ePw = ref('');\nconst e2eUnlockBusy = ref(false);\nconst e2eUnlockErr = ref('');\n// Şifreli klasör oluşturma modalı.\nconst showEncFolder = ref(false);\nconst e2eCreateBusy = ref(false);\n\nfunction e2eKek(): CryptoKey | null {\n return e2eRing.get(e2eRoot.value) ?? null;\n}\n\nfunction e2eRevokeAll() {\n for (const url of e2eUrls.values()) URL.revokeObjectURL(url);\n e2eUrls.clear();\n}\nonBeforeUnmount(e2eRevokeAll);\n\n/** Kilidi aç: marker'ı kökten çek, parolayı YERELDE doğrula, KEK'i belleğe koy. */\nasync function e2eUnlock() {\n if (!e2ePw.value || e2eUnlockBusy.value || !e2eRoot.value) return;\n e2eUnlockBusy.value = true;\n e2eUnlockErr.value = '';\n try {\n let markerText = '';\n try {\n const { blob, url } = await api.fetchBlob(wireJoin(e2eRoot.value, E2E_MARKER_NAME));\n URL.revokeObjectURL(url);\n markerText = await blob.text();\n } catch {\n e2eUnlockErr.value = t('e2e.unlock.marker_missing');\n return;\n }\n const marker = parseMarker(markerText);\n if (!marker) {\n e2eUnlockErr.value = t('e2e.unlock.marker_missing');\n return;\n }\n const kek = await verifyPassword(marker, e2ePw.value);\n if (!kek) {\n e2eUnlockErr.value = t('e2e.unlock.wrong');\n return;\n }\n e2eRing.set(e2eRoot.value, kek);\n e2eRingVer.value++;\n e2ePw.value = '';\n } finally {\n e2eUnlockBusy.value = false;\n }\n}\n\n/** \"Kilitle\": bellekteki anahtarı ve çözülmüş blob'ları at. */\nfunction e2eLock() {\n if (!e2eRoot.value) return;\n e2eRing.lock(e2eRoot.value);\n e2eRingVer.value++;\n e2eRevokeAll();\n flashToast(t('e2e.locked_toast'));\n}\n\n// Uzantı → önizleme MIME'ı: çözülmüş blob'un <img>/<video>/<object>\n// etiketlerinde doğru render'ı için (sunucu şifreli dosyayı octet-stream\n// bilir, oradan gelen tip işe yaramaz).\nconst E2E_MIME: Record<string, string> = {\n txt: 'text/plain', md: 'text/markdown', log: 'text/plain', csv: 'text/csv',\n json: 'application/json', xml: 'application/xml', html: 'text/html',\n jpg: 'image/jpeg', jpeg: 'image/jpeg', png: 'image/png', gif: 'image/gif',\n webp: 'image/webp', bmp: 'image/bmp', avif: 'image/avif', svg: 'image/svg+xml',\n pdf: 'application/pdf',\n mp4: 'video/mp4', webm: 'video/webm', mov: 'video/quicktime', m4v: 'video/mp4',\n mp3: 'audio/mpeg', wav: 'audio/wav', ogg: 'audio/ogg', flac: 'audio/flac',\n m4a: 'audio/mp4', aac: 'audio/aac', opus: 'audio/opus',\n};\nfunction e2eMimeFor(n: FileNode): string {\n const ext = (n.extension || '').toLowerCase();\n return E2E_MIME[ext] || 'application/octet-stream';\n}\n\n/**\n * Dosyayı çek + çöz + objectURL'ini cache'le. Magic'siz (ör. DAV'la düz\n * yazılmış) dosyada null döner — çağıran normal ham akışa düşer. Yanlış\n * anahtar/bozuk veri E2eDecryptError fırlatır (çağıran toast'lar).\n */\nasync function e2eFetchDecrypted(n: FileNode): Promise<string | null> {\n const cached = e2eUrls.get(n.path);\n if (cached) return cached;\n const kek = e2eKek();\n if (!kek) return null;\n const buf = await api.fetchArrayBuffer(n.path);\n if (!hasMagic(buf)) return null;\n const plain = await decryptFile(kek, buf);\n const url = URL.createObjectURL(new Blob([plain], { type: e2eMimeFor(n) }));\n e2eUrls.set(n.path, url);\n return url;\n}\n\n/** PreviewModal/QuickLook'a giden URL sağlayıcı: çözülmüş blob > ham URL. */\nfunction e2ePreviewSrc(p: string): string {\n return e2eUrls.get(p) ?? api.previewUrl(p);\n}\n\n/** Çöz + salt-okunur in-page önizleme (openNode/previewNode buraya iner). */\nasync function e2eOpenPreview(n: FileNode) {\n try {\n await e2eFetchDecrypted(n);\n } catch {\n flashToast(t('e2e.decrypt_failed'));\n return;\n }\n previewMode.value = '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\n/** Çöz + orijinal adla indir. Magic'siz dosya olduğu gibi iner. */\nasync function e2eDownload(n: FileNode) {\n try {\n const buf = await api.fetchArrayBuffer(n.path);\n const kek = e2eKek();\n let out = buf;\n if (hasMagic(buf)) {\n if (!kek) throw new Error('locked');\n out = await decryptFile(kek, buf);\n }\n const url = URL.createObjectURL(new Blob([out], { type: e2eMimeFor(n) }));\n const a = document.createElement('a');\n a.href = url;\n a.download = n.basename;\n document.body.appendChild(a);\n a.click();\n a.remove();\n setTimeout(() => URL.revokeObjectURL(url), 30_000);\n } catch {\n flashToast(t('e2e.download.failed'));\n }\n}\n\n/** Upload listesi → şifreli File listesi (200MB üstü + marker adı atlanır). */\nasync function e2eEncryptUploads(list: File[]): Promise<File[]> {\n const kek = e2eKek();\n if (!kek) return [];\n const out: File[] = [];\n for (const f of list) {\n if (f.name === E2E_MARKER_NAME) continue;\n if (f.size > E2E_MAX_FILE_BYTES) {\n flashToast(t('e2e.upload.too_big'));\n continue;\n }\n try {\n const ct = await encryptFile(kek, await f.arrayBuffer());\n out.push(new File([ct], f.name, { type: 'application/octet-stream' }));\n } catch (err) {\n emit('error', { message: (err as Error).message, context: { op: 'e2e-encrypt', file: f.name } });\n }\n }\n return out;\n}\n\n/** EncryptedFolderModal submit'i: klasörü aç + marker'ı yükle + kilidi açık bırak. */\nasync function submitEncryptedFolder(payload: { name: string; password: string }) {\n if (e2eActive.value) {\n // İç içe şifreli klasör kök tespitini bulanıklaştırır — MVP'de yok.\n flashToast(t('e2e.create.nested'));\n return;\n }\n e2eCreateBusy.value = true;\n try {\n const dirWire = qualify(currentPath.value);\n await api.newFolder(dirWire, payload.name);\n const { marker, kek } = await createMarker(payload.password);\n const markerFile = new File([JSON.stringify(marker)], E2E_MARKER_NAME, {\n type: 'application/json',\n });\n const newDirWire = wireJoin(dirWire, payload.name);\n await api.uploadMultipart(newDirWire, [markerFile]);\n // Oluşturan oturumda kilit açık başlar (parolayı az önce kendisi girdi).\n e2eRing.set(newDirWire, kek);\n e2eRingVer.value++;\n showEncFolder.value = false;\n flashToast(t('e2e.create.done'));\n await load();\n } catch (err) {\n emit('error', { message: (err as Error).message, context: { op: 'e2e-create' } });\n flashToast(t('e2e.create.failed'));\n } finally {\n e2eCreateBusy.value = false;\n }\n}\n/* === /wiring:e2 === */\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 'fe--density-compact': density === 'compact' /* cila:a density */,\n 'fe--narrow': isNarrow /* bag:b4 */,\n }\"\n tabindex=\"-1\"\n @dragenter=\"onDragEnter\"\n @dragover=\"onDragOver\"\n @dragleave=\"onDragLeave\"\n @drop=\"onDropUpload\"\n @contextmenu=\"onContextCanvas\"\n >\n <!-- wiring:d1 — sekme şeridi: TEK sekmede hiç render edilmez (embed pixel-aynı) -->\n <TabBar\n v-if=\"tabsVisible\"\n :tabs=\"tabItems\"\n :active-id=\"tabsActiveId\"\n :locale=\"locale\"\n :split-enabled=\"!isNarrow\"\n :split-active=\"!!activeSplit\"\n @select=\"activateTab\"\n @close=\"closeTabById\"\n @new=\"newTabHere\"\n @reorder=\"(from: number, to: number) => tabsApi.move(from, to)\"\n @toggle-split=\"toggleSplit\"\n />\n <!-- /wiring:d1 -->\n <Toolbar\n ref=\"toolbarRef\"\n :view-mode=\"displayedViewMode /* ui-fix — aktif panelin modu */\"\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 :narrow=\"isNarrow /* bag:b4 */\"\n :theme=\"config.theme || 'auto' /* bag:b4 */\"\n :inspector-open=\"showInspector /* koru:k1 */\"\n @toggle-inspector=\"toggleInspector /* koru:k1 */\"\n @open-theme=\"showThemeGallery = true /* wiring:c1 */\"\n @update:view-mode=\"setDisplayedViewMode($event) /* ui-fix — aktif panele */\"\n @update:search-query=\"searchQuery = $event\"\n @update:density=\"density = $event\"\n @open-shortcut-settings=\"showShortcutSettings = true /* wiring:c2 */\"\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 <!-- koru:k1 — fe__main lays the listing body and the inspector panel out\n as flex siblings (row). Without the inspector open it is visually\n identical to the previous direct-child fe__body. -->\n <div class=\"fe__main\" :class=\"{ 'fe__main--split': splitVisible } /* wiring:d1 */\">\n <!-- ui-fix — sol panelin başlığı (breadcrumb + durum şeritleri + body)\n tek bir sarmalda: split modunda bu sarmal sol yarıya sığar, böylece\n breadcrumb tüm sayfayı değil kendi panelini kaplar (SecondaryPane'in\n kendi kırıntısıyla simetrik). Aktif-panel vurgusu da bu sarmalda. -->\n <div\n class=\"fe__primary\"\n :class=\"{ 'fe-pane--focus': mainPaneFocus } /* wiring:d1 — aktif panel vurgusu */\"\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 <!-- Live presence: who else is viewing this folder (empty → nothing shown).\n When the live socket is unavailable the same strip carries a small\n degraded-connection badge instead (presence is empty in fallback);\n a healthy connection shows nothing extra. -->\n <div v-if=\"presenceUsers.length || realtimeDegraded\" class=\"fe__presence\">\n <PresenceBar v-if=\"presenceUsers.length\" :users=\"presenceUsers\" :locale=\"locale\" />\n <span\n v-if=\"realtimeDegraded\"\n class=\"fe-connbadge\"\n role=\"status\"\n :title=\"t('conn.tooltip')\"\n >\n <span class=\"fe-connbadge__dot\" aria-hidden=\"true\"></span>\n {{ t('conn.offline') }}\n </span>\n </div>\n\n <!-- wiring:e2 — kilit açık şeridi: şifreli klasörde anahtar bellekteyken\n görünür; \"Kilitle\" anahtarı ve çözülmüş blob'ları atar. -->\n <div v-if=\"e2eUnlocked\" class=\"fe-e2e-strip\" role=\"status\">\n <span class=\"fe-e2e-strip__icon\" aria-hidden=\"true\">🔒</span>\n <span class=\"fe-e2e-strip__label\">{{ t('e2e.strip.label') }}</span>\n <button type=\"button\" class=\"fe-btn fe-e2e-strip__btn\" @click=\"e2eLock\">\n {{ t('e2e.strip.lock') }}\n </button>\n </div>\n <!-- /wiring:e2 -->\n\n <div\n class=\"fe__body\"\n @pointerdown.capture=\"setPaneMain() /* wiring:d1 */\"\n @click.self=\"selection.clear()\"\n >\n <!-- Initial load: skeleton ghosts (view-mode aware) instead of an\n empty/\"no files\" flash. Only when there's nothing yet — navigation\n keeps the current list, exactly as before. -->\n <div v-if=\"loading && files.length === 0\" class=\"fe__skeleton\" role=\"status\">\n <span class=\"fe-sr-only\">{{ t('loading') }}</span>\n <div v-if=\"viewMode !== 'list' /* wiring:d2 — galeri de grid iskeletini kullanır */\" class=\"fe-skel-grid\" aria-hidden=\"true\">\n <div v-for=\"i in 8\" :key=\"i\" class=\"fe-skel-card\">\n <div class=\"fe-skel fe-skel--thumb\"></div>\n <div class=\"fe-skel fe-skel--label\"></div>\n </div>\n </div>\n <div v-else class=\"fe-skel-list\" aria-hidden=\"true\">\n <div v-for=\"i in 8\" :key=\"i\" class=\"fe-skel-row\">\n <div class=\"fe-skel fe-skel--icon\"></div>\n <div class=\"fe-skel fe-skel--name\"></div>\n <div class=\"fe-skel fe-skel--size\"></div>\n <div class=\"fe-skel fe-skel--date\"></div>\n </div>\n </div>\n </div>\n <!-- Dead deep link (404) or RBAC-hidden dir (403, shown identically):\n a dedicated state instead of a misleading \"this folder is empty\". -->\n <div v-else-if=\"notFoundPath\" class=\"fe-state\">\n <svg\n class=\"fe-state__art\"\n viewBox=\"0 0 120 100\"\n width=\"110\"\n height=\"92\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 36v42a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6V44a6 6 0 0 0-6-6H62l-9-10H24a6 6 0 0 0-6 6z\" />\n <path d=\"M52 55c0-4.6 3.6-8 8-8s8 3.4 8 8c0 5.5-8 4.8-8 11\" />\n <circle cx=\"60\" cy=\"73\" r=\"1.6\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n <p class=\"fe-state__title\">{{ t('notFound.title') }}</p>\n <p class=\"fe-state__path\">{{ notFoundPath }}</p>\n <p class=\"fe-state__hint\">{{ t('notFound.desc') }}</p>\n <div class=\"fe-state__actions\">\n <button type=\"button\" class=\"fe-btn\" @click=\"leaveNotFound\">\n {{ t('notFound.goRoot') }}\n </button>\n </div>\n </div>\n <!-- Listing failed (network / 5xx) with nothing else to show: retryable\n error state in the same visual language. -->\n <div v-else-if=\"loadError && files.length === 0\" class=\"fe-state\">\n <svg\n class=\"fe-state__art\"\n viewBox=\"0 0 120 100\"\n width=\"110\"\n height=\"92\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"60\" cy=\"50\" r=\"28\" />\n <path d=\"M60 36v18\" />\n <circle cx=\"60\" cy=\"63\" r=\"1.8\" fill=\"currentColor\" stroke=\"none\" />\n <path d=\"M24 88h72\" stroke-dasharray=\"3 5\" />\n </svg>\n <p class=\"fe-state__title\">{{ t('error.title') }}</p>\n <!-- wiring:c4 — friendly hint + collapsible technical detail; the raw\n error message used to sit in the hint slot and read like UI copy. -->\n <p class=\"fe-state__hint\">{{ t('error.hint') }}</p>\n <div class=\"fe-state__actions\">\n <button type=\"button\" class=\"fe-btn fe-btn--primary\" @click=\"retryLoad\">\n {{ t('error.retry') }}\n </button>\n </div>\n <details class=\"fe-state__details\">\n <summary class=\"fe-state__details-summary\">{{ t('error.details') }}</summary>\n <pre class=\"fe-state__details-pre\">{{ loadError }}</pre>\n </details>\n <!-- /wiring:c4 -->\n </div>\n <!-- wiring:e2 — şifreli klasör kilit ekranı: parola doğru girilene dek\n listeleme render edilmez. Parola tarayıcıda marker'a karşı\n doğrulanır; sunucuya gitmez. -->\n <div v-else-if=\"e2eLocked\" class=\"fe-state fe-e2e-lock\">\n <svg\n class=\"fe-state__art\"\n viewBox=\"0 0 120 100\"\n width=\"110\"\n height=\"92\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <rect x=\"38\" y=\"44\" width=\"44\" height=\"34\" rx=\"6\" />\n <path d=\"M46 44v-8a14 14 0 0 1 28 0v8\" />\n <circle cx=\"60\" cy=\"59\" r=\"3\" fill=\"currentColor\" stroke=\"none\" />\n <path d=\"M60 62v7\" />\n </svg>\n <p class=\"fe-state__title\">{{ t('e2e.locked.title') }}</p>\n <p class=\"fe-state__hint\">{{ t('e2e.locked.hint') }}</p>\n <form class=\"fe-e2e-lock__form\" @submit.prevent=\"e2eUnlock\">\n <input\n v-model=\"e2ePw\"\n type=\"password\"\n class=\"fe-input fe-e2e-lock__input\"\n :placeholder=\"t('e2e.locked.pw_placeholder')\"\n autocomplete=\"current-password\"\n :disabled=\"e2eUnlockBusy\"\n />\n <button\n type=\"submit\"\n class=\"fe-btn fe-btn--primary\"\n :disabled=\"e2eUnlockBusy || !e2ePw\"\n >\n {{ e2eUnlockBusy ? t('e2e.locked.busy') : t('e2e.locked.unlock') }}\n </button>\n </form>\n <p v-if=\"e2eUnlockErr\" class=\"fe-form__error\" role=\"alert\">{{ e2eUnlockErr }}</p>\n </div>\n <!-- /wiring:e2 -->\n <!-- Search with zero hits — its own message, not \"folder is empty\". -->\n <div v-else-if=\"!loading && files.length === 0 && searchQuery\" class=\"fe-state\">\n <svg\n class=\"fe-state__art\"\n viewBox=\"0 0 120 100\"\n width=\"110\"\n height=\"92\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"52\" cy=\"44\" r=\"22\" />\n <path d=\"M68 61l20 20\" />\n <path d=\"M46 38l12 12M58 38l-12 12\" />\n </svg>\n <p class=\"fe-state__title\">{{ t('empty.search.title') }}</p>\n <p class=\"fe-state__hint\">{{ t('empty.search.hint') }}</p>\n </div>\n <!-- Empty trash view. -->\n <div v-else-if=\"!loading && files.length === 0 && trashMode\" class=\"fe-state\">\n <svg\n class=\"fe-state__art\"\n viewBox=\"0 0 120 100\"\n width=\"110\"\n height=\"92\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M38 34l4 48a6 6 0 0 0 6 5.6h24a6 6 0 0 0 6-5.6l4-48\" />\n <path d=\"M32 34h56\" />\n <path d=\"M50 34v-6a6 6 0 0 1 6-6h8a6 6 0 0 1 6 6v6\" />\n <path d=\"M52 44v32M60 44v32M68 44v32\" opacity=\"0.5\" />\n </svg>\n <p class=\"fe-state__title\">{{ t('empty.trash.title') }}</p>\n </div>\n <!-- Loaded, zero files, no search: the real empty-folder state. The\n upload affordances follow write permission (RBAC viewers only get\n the title). -->\n <div v-else-if=\"!loading && files.length === 0\" class=\"fe-state\">\n <svg\n class=\"fe-state__art\"\n viewBox=\"0 0 120 100\"\n width=\"110\"\n height=\"92\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 36v42a6 6 0 0 0 6 6h72a6 6 0 0 0 6-6V44a6 6 0 0 0-6-6H62l-9-10H24a6 6 0 0 0-6 6z\" />\n <g v-if=\"emptyCanUpload\">\n <path d=\"M60 50v14\" stroke-dasharray=\"3 4\" />\n <path d=\"M53 59l7 8 7-8\" />\n </g>\n </svg>\n <p class=\"fe-state__title\">{{ t('empty.folder') }}</p>\n <p v-if=\"emptyCanUpload\" class=\"fe-state__hint\">{{ t('empty.hint') }}</p>\n <div v-if=\"emptyCanUpload\" class=\"fe-state__actions\">\n <button type=\"button\" class=\"fe-btn fe-btn--primary\" @click=\"triggerUpload\">\n {{ t('empty.upload') }}\n </button>\n </div>\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 :auth-credentials=\"api.credentialsMode()\"\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-if=\"viewMode === 'grid' /* wiring:d2 — v-else → v-else-if (3. mod eklendi) */\"\n :files=\"files\"\n :selected=\"selection.selected.value\"\n :clipped=\"clippedPaths\"\n :show-parent-path=\"!!searchQuery\"\n :locale=\"locale\"\n :loading=\"loading\"\n :thumb-src=\"thumbs.src\"\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 <!-- wiring:d2 — galeri görünümü (GridView ile aynı event sözleşmesi) -->\n <GalleryView\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 :thumb-src=\"thumbs.src\"\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 <!-- /wiring:d2 -->\n </div>\n </div><!-- /fe__primary ui-fix -->\n\n <!-- wiring:d1 — tab başına split: sağ ikincil panel (dar modda kapalı).\n :key tab kimliğine bağlı — tab geçişinde pane kendi konumuyla temiz\n remount olur. -->\n <SecondaryPane\n v-if=\"splitVisible && activeSplit\"\n ref=\"splitPaneRef\"\n :key=\"'split-' + tabsActiveId\"\n :api=\"api\"\n :initial-path=\"activeSplit.path\"\n :locale=\"locale\"\n :qualify=\"qualify\"\n :to-user=\"paneToUser\"\n :clamp=\"paneClamp\"\n :root-label=\"multiStorageRoot ? '/' : adapter || t('breadcrumb.root')\"\n :floor=\"rootFloor\"\n :multi-root=\"multiStorageRoot\"\n :virtual-rows=\"virtualStorageRows\"\n :active=\"paneIsActive\"\n :view-mode=\"paneViewMode /* ui-fix */\"\n :thumb-src=\"thumbs.src /* ui-fix */\"\n :trash-visible=\"config.trashVisible !== false /* ui-fix — çöp satırı simetrisi */\"\n @navigate=\"onPaneNavigate\"\n @activate=\"activePane = 'split'\"\n @close=\"closeSplit\"\n @open-tab=\"(p: string) => tabsApi.openTab(p, { viewMode: viewMode, background: true })\"\n @transfer=\"onPaneTransfer\"\n @context=\"onPaneContext /* ui-fix — yan panel sağ-tık menüsü */\"\n @open-trash=\"onPaneOpenTrash /* ui-fix — çöp kutusu ana panelde açılır */\"\n />\n <!-- /wiring:d1 -->\n\n <!-- koru:k1 — inspector (details) panel; v-if keeps the closed state\n free of any DOM. Narrow mode renders it as a full-size overlay. -->\n <InspectorPanel\n v-if=\"showInspector\"\n :api=\"api\"\n :nodes=\"selection.nodes.value\"\n :dir-label=\"inspectorDirLabel\"\n :dir-count=\"files.length\"\n :dir-perm=\"dirPerm\"\n :locale=\"locale\"\n :narrow=\"isNarrow\"\n :thumb-src=\"thumbs.src\"\n @close=\"closeInspector\"\n @manage-permissions=\"onInspectorManage\"\n @toast=\"flashToast\"\n @changed=\"() => load()\"\n />\n </div>\n <!-- /koru:k1 fe__main -->\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 <!-- wiring:c3 — unified operations center. UploadProgress + PendingOpsTray\n no longer draw their own corner UIs: they are renderless publishers\n feeding the opsCenter store; the single visible surface is the\n OperationsCenter badge + panel below. -->\n <UploadProgress\n :jobs=\"uploadJobs\"\n :locale=\"locale\"\n :center=\"opsCenter\"\n @cancel=\"onCancelUpload\"\n @dismiss=\"onDismissUpload\"\n @retry=\"retryUploadJob\"\n />\n\n <PendingOpsTray\n :ops=\"pendingOps.ops.value\"\n :locale=\"locale\"\n :center=\"opsCenter\"\n @dismiss=\"(id) => pendingOps.dismiss(id)\"\n />\n\n <OperationsCenter\n :center=\"opsCenter\"\n :locale=\"locale\"\n :narrow=\"isNarrow\"\n />\n <!-- /wiring:c3 -->\n\n <!-- bag:b4 — narrow-mode upload FAB (hidden in trash / read-only /\n virtual root; PendingOpsTray+UploadProgress shift up via CSS). -->\n <button\n v-if=\"isNarrow && emptyCanUpload\"\n type=\"button\"\n class=\"fe-fab\"\n :title=\"t('toolbar.upload')\"\n :aria-label=\"t('toolbar.upload')\"\n @click=\"triggerUpload\"\n >\n <svg\n class=\"fe-ficon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.2\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M12 5v14M5 12h14\" />\n </svg>\n </button>\n\n <ContextMenu\n ref=\"ctxRef\"\n :locale=\"locale\"\n :theme=\"config.theme || 'auto'\"\n :sheet=\"isCoarse /* bag:b4 */\"\n :actions=\"contextActions\"\n @select=\"onContextAction\"\n />\n\n <NewFolderModal\n :open=\"showNewFolder\"\n :locale=\"locale\"\n :encrypted-option=\"!e2eActive /* wiring:e2 — iç içe şifreli klasör yok */\"\n @close=\"showNewFolder = false\"\n @submit=\"submitNewFolder\"\n @encrypted=\"showNewFolder = false; showEncFolder = true /* wiring:e2 */\"\n />\n <!-- wiring:e2 — şifreli klasör oluşturma modalı -->\n <EncryptedFolderModal\n :open=\"showEncFolder\"\n :locale=\"locale\"\n :busy=\"e2eCreateBusy\"\n @close=\"showEncFolder = false\"\n @submit=\"submitEncryptedFolder\"\n />\n <!-- /wiring:e2 -->\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) => e2ePreviewSrc(p) /* wiring:e2 — çözülmüş blob > ham URL */\"\n :download-url=\"(p) => (e2eUnlocked ? e2ePreviewSrc(p) : api.downloadUrl(p)) /* wiring:e2 */\"\n :only-office-base=\"e2eActive ? null : effectiveOnlyOfficeBase /* wiring:e2 — OO ciphertext açamaz */\"\n :only-office-config-endpoint=\"effectiveOnlyOfficeConfigEndpoint\"\n :new-tab-enabled=\"!e2eActive /* wiring:e2 — standalone rota ham baytı çeker */\"\n :save-text-endpoint=\"e2eActive ? null : api.endpoints.saveText || null /* wiring:e2 — düz metin kaydı sızıntı olur */\"\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 :auth-credentials=\"api.credentialsMode()\"\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 :auth-credentials=\"api.credentialsMode()\"\n @error=\"(msg: string) => emit('error', { message: msg, context: { op: 'tags' } })\"\n />\n </div>\n </div>\n </div>\n </transition>\n\n <!-- cila:c wiring — command palette (Ctrl/Cmd+K) + shortcuts help (?) -->\n <CommandPalette\n :open=\"showPalette\"\n :locale=\"locale\"\n :files=\"files\"\n :view-mode=\"viewMode\"\n :can-write=\"canWriteHere && !atVirtualRoot && !trashActive\"\n :can-go-up=\"canGoUp\"\n :global-search=\"paletteGlobalSearch\"\n @close=\"showPalette = false\"\n @open-hit=\"openSearchHit\"\n @open-node=\"openNode\"\n @navigate=\"(p: string) => load(p)\"\n @new-folder=\"showNewFolder = true\"\n @upload=\"triggerUpload\"\n @toggle-view=\"setDisplayedViewMode(displayedViewMode === 'list' ? 'grid' : displayedViewMode === 'grid' ? 'gallery' : 'list') /* wiring:d2 + ui-fix — 3 mod döngüsü, aktif panele */\"\n @open-trash=\"loadTrash\"\n @refresh=\"() => load()\"\n @go-up=\"goUp\"\n @open-theme=\"showThemeGallery = true /* wiring:int */\"\n @open-shortcut-settings=\"showShortcutSettings = true /* wiring:int */\"\n @start-tour=\"startTour() /* wiring:int */\"\n :split-enabled=\"!isNarrow /* wiring:d1 */\"\n @tab-new=\"newTabHere() /* wiring:d1 */\"\n @split-toggle=\"toggleSplit() /* wiring:d1 */\"\n />\n <ShortcutsHelp\n :open=\"showShortcutsHelp\"\n :locale=\"locale\"\n @close=\"showShortcutsHelp = false\"\n @customize=\"showShortcutsHelp = false; showShortcutSettings = true /* wiring:c2 */\"\n />\n <!-- /cila:c wiring -->\n\n <!-- wiring:c1 — tema galerisi -->\n <ThemeGallery\n :open=\"showThemeGallery\"\n :locale=\"locale\"\n :theme=\"config.theme || 'auto'\"\n :dark=\"themeResolvedDark\"\n :current=\"activeThemeId\"\n @close=\"showThemeGallery = false\"\n @select=\"setActiveTheme\"\n />\n <!-- /wiring:c1 -->\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\n v-if=\"toast\"\n class=\"fe-toast\"\n :class=\"{ 'fe-toast--action': !!toast.actionLabel }\"\n role=\"status\"\n @click=\"dismissToast\"\n >\n <span class=\"fe-toast__msg\">{{ toast.message }}</span>\n <button\n v-if=\"toast.actionLabel && toast.action\"\n type=\"button\"\n class=\"fe-toast__action\"\n @click.stop=\"runToastAction\"\n >{{ toast.actionLabel }}</button>\n </div>\n </transition>\n\n <!-- wiring:c2 — shortcut settings modal + Space quick-look overlay -->\n <ShortcutSettings\n :open=\"showShortcutSettings\"\n :locale=\"locale\"\n :theme=\"config.theme || 'auto'\"\n @close=\"showShortcutSettings = false\"\n />\n <QuickLook\n :open=\"quickLookOpen\"\n :locale=\"locale\"\n :file=\"quickLookTarget\"\n :theme=\"config.theme || 'auto'\"\n :preview-url=\"(p: string) => e2ePreviewSrc(p) /* wiring:e2 */\"\n :download-url=\"(p: string) => (e2eUnlocked ? e2ePreviewSrc(p) : api.downloadUrl(p)) /* wiring:e2 */\"\n :only-office-base=\"e2eActive ? null : effectiveOnlyOfficeBase /* wiring:e2 */\"\n :only-office-config-endpoint=\"effectiveOnlyOfficeConfigEndpoint\"\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 :viewer-base-url=\"props.config.viewerBaseUrl || null\"\n @close=\"quickLookOpen = false\"\n @nav=\"quickLookNav\"\n @open-full=\"quickLookOpenFull\"\n />\n <!-- /wiring:c2 -->\n <!-- wiring:c4 — onboarding coach-mark tour (teleports itself to body) -->\n <OnboardingTour\n :open=\"showTour\"\n :locale=\"locale\"\n :root=\"rootEl\"\n :theme=\"config.theme || 'auto'\"\n @close=\"onTourClose\"\n />\n <!-- /wiring:c4 -->\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 /**\n * Host attrs (style/class) must NOT fall through onto the inner `.fe`\n * root: an embedder's `el.style.cssText = 'display:block;height:100%'`\n * would get copied verbatim, and the inline display:block overrides the\n * core `.fe{display:flex}` — the flex column collapses and internal\n * scrolling dies in height-constrained embeds. The host element keeps\n * its own style/class regardless (it is a real DOM element).\n */\n inheritAttrs: false,\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","onScopeDispose","failSilently","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","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","createStaticVNode","content","numberOfNodes","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","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","o","walker","roots","found","getModelAssigner","onCompositionStart","onCompositionEnd","assignKey","castValue","trim","number","vModelText","lazy","castToNumber","elValue","rootNode","vModelCheckbox","_","modelValue","elementValue","getValue","checked","assign","filtered","getCheckboxValue","setChecked","vModelSelect","isSetModel","selectedVal","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","globalSearch","query","opts","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","versionsUrl","listVersions","nodeId","restoreVersion","versionId","snapshotCurrent","snapshotVersion","commentsUrl","listComments","addComment","deleteComment","wsTicket","useUploadChunked","api","DEFAULT_CHUNK","DEFAULT_PARALLEL","uploadFile","_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","SHORTCUT_ACTIONS","HANDLER_KEY","SHORTCUTS_LS_KEY","readOverrides","parsed","overrides","writeOverrides","defOf","effectiveCombo","setShortcutOverride","combo","resetShortcut","resetAllShortcuts","findShortcutConflict","excludeId","KEY_TOKEN_MAP","MODIFIER_KEYS","keyToken","mapped","comboFromEvent","parts","printableSymbol","useShortcutList","fixed","useKeyboardShortcuts","rootEl","handlers","comboMap","onKey","inForm","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","PING_INTERVAL_MS","MAX_BACKOFF_MS","RealtimeClient","__publicField","file","ticket","ws","_c","_d","msg","active","RELOAD_DEBOUNCE_MS","POLL_INTERVAL_MS","useRealtime","presenceUsers","connected","degraded","client","pendingSubscribe","reloadTimer","pollTimer","debouncedReload","onPresence","onFallback","subscribe","wire","setFocus","stop","MAX_CACHED","useThumbs","apiBase","urls","order","failed","pending","resolveUrl","src","got","load","evict","monacoPromise","highlightPromise","monacoCached","highlightCached","preloadEditor","ensureMonaco","ensureHighlight","getMonaco","EXPAND_KEY","__props","others","expanded","toggleExpanded","keyOf","initials","hue","label","_createElementBlock","_normalizeClass","_openBlock","_hoisted_1","_Fragment","_renderList","_createElementVNode","_normalizeStyle","_createTextVNode","_toDisplayString","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_8","_hoisted_9","_hoisted_11","_unref","_hoisted_12","__emit","open","y","targetNodes","menuEl","anchorX","anchorY","prevFocus","show","sheetEl","clampToViewport","focusItem","rect","margin","vw","vh","flipped","hide","sheetDragging","sheetDragY","menuItems","host","idx","moveFocus","sheetDragStart","onSheetDragStart","t0","onSheetDragMove","onSheetDragEnd","shouldClose","sheetStyle","pick","visibleActions","vis","prefersDark","mq","syncPrefersDark","themeClass","__expose","_createBlock","_Teleport","_Transition","$event","_hoisted_7","_hoisted_10","_hoisted_13","DENSITY_LS_KEY","WIDE_MORE_BTN_W","density","toggleDensity","searchEl","localSearch","debounce","onSearchInput","focusSearch","searchOpen","toolbarItems","primaryEl","measureEl","wideMoreBtnEl","wideMoreRef","visibleActionCount","visibleToolbarItems","overflowToolbarItems","recalcFold","cont","meas","gap","widths","total","w","avail","used","count","foldRo","openWideMore","fire","openSearch","closeSearch","coarse","coarseMq","syncCoarse","moreBtnEl","moreRef","moreActions","openMore","onMoreSelect","_hoisted_26","ContextMenu","_cache","_hoisted_6","_hoisted_18","_hoisted_19","tags","loading","adding","newTag","palette","colorFor","buildHeaders","persist","previous","_withKeys","limit","fmtTime","diff","_hoisted_2","OVERFLOW_THRESHOLD","confinedRel","floorLabel","rel","crumbs","adapterPrefix","floor","below","part","collapsed","leadCrumbs","middleCrumbs","tailCrumbs","overflowOpen","moreWrapEl","onOverflowPick","crumb","onDocClick","onDocKeydown","onClick","onContext","onCrumbDragOver","onCrumbDrop","editing","pathDraft","pathInput","startEdit","trimmed","submitPath","clean","slash","adapter","cancelEdit","EXT_FAMILIES","reg","family","exts","iconFamilyFor","ext","FILE_BASE","GLYPHS","SVG_CACHE","iconSvg","svg","fileIconSvg","snippetSegments","snippet","re","matchedInContent","matched","applyDragGhost","dt","badge","toggle","SORT_LS_KEY","isSelected","onRowClick","onRowDbl","onRowCtx","onItemDragStart","dropTargetPath","onItemDragOver","onItemDragLeave","onItemDrop","pressTimer","pressTarget","onTouchStart","cancelPress","specialEmojiFor","isPinnedSpecial","displayDate","ms","parentDir","stripped","rowSnippet","rowInContent","sortKey","sortDir","defaultDir","toggleSort","ariaSort","modifiedMs","rows","pinned","rest","am","monthFmt","bucketFor","dayStart","today","day","DAY","seg","_hoisted_14","StarButton","_hoisted_16","_hoisted_17","_hoisted_21","_hoisted_22","_hoisted_23","si","_hoisted_24","_hoisted_25","_hoisted_27","thumbOf","onDbl","onCtx","cardSnippet","snippetTitle","metaFor","date","mapStatus","jobs","percentOf","single","isMulti","isFile","multiTotal","thumb","shortHash","formatDate","formatDateStr","copyText","effectivePerm","own","canManagePerms","permLabel","versionsState","versions","confirmVersionId","snapshotFirst","versionBusy","sharesState","shares","refreshSeq","refresh","seq","loadVersions","askRestore","confirmRestore","takeSnapshot","commentsState","comments","commentDraft","commentBusy","commentNodeId","commentSeq","loadComments","sendComment","removeComment","relativeTime","iso","diffS","abs","rtf","unit","secs","_hoisted_15","_hoisted_20","_hoisted_28","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_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_60","_hoisted_61","_hoisted_62","_hoisted_63","_hoisted_64","_hoisted_65","_hoisted_66","_hoisted_67","_hoisted_68","_hoisted_69","_hoisted_71","EVERYWHERE_MIN_CHARS","EVERYWHERE_LIMIT","EVERYWHERE_DEBOUNCE_MS","SAVED_LS_KEY","SAVED_MAX","inputEl","listEl","matchScore","sc","gotoItems","fileItems","scored","commandItems","everywhere","everywhereLoading","everywhereTimer","everywhereSeq","scheduleEverywhere","hits","hitCrumb","storage","hitItems","savedSearches","readSavedSearches","writeSavedSearches","saveSearch","removeSavedSearch","flat","savedItems","fileOffset","hitOffset","savedOffset","cmdOffset","choose","it","_withModifiers","_hoisted_29","FOCUSABLE","cardEl","modalSeq","titleId","focusable","first","onBackdrop","_renderSlot","_ctx","$slots","groups","Modal","THEME_LS_KEY","DEFAULT_THEME_ID","THEMES","themeById","ALL_TOKEN_KEYS","readStoredThemeId","themeId","setTheme","valid","useThemeState","applyThemeToEl","dark","theme","STYLE_ATTR","cssDecls","generateThemeCss","light","darkSelectors","autoDarkSelectors","syncThemeStyle","css","cardVars","th","DEFAULT_ID","anyOverridden","capturingId","conflict","labelOf","beginCapture","cancelCapture","attemptAssign","clash","confirmConflictTake","dismissConflict","onReset","onResetAll","onWindowKeydown","onClose","MAX_TEXT_BYTES","ONLYOFFICE_SCRIPT_ID","IMAGE","VIDEO","AUDIO","CODE_LANGS","TEXT_PLAIN","OFFICE","VIEWER_MAP","kind","wantEdit","viewerCmp","viewerLoadError","pdfFallbackToNative","loadViewerFor","extension","loader","onPdfFallback","viewerProps","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","blocks","mermaid","katex","block","isMermaid","isMath","codeHtml","highlightCode","language","hljs","monacoEl","monacoEditor","codeAutosaveTimer","monacoReady","saving","saveOk","saveError","disposeMonaco","monacoLanguageFor","tryMountMonaco","monaco","editable","saveCode","txt","runOrchestration","officeError","disposeOnlyOfficeEditor","lang","mountOnlyOfficeEditor","codeLanguage","officeEl","officeEditor","documentServerUrl","loadOnlyOfficeScript","mountId","formatOnlyOfficeError","W","script","_resolveDynamicComponent","_mergeProps","inFormControl","onKeydown","PreviewModal","RING_R","history","hasError","overall","runningCount","visible","RING_C","ringOffset","ringSpin","pctText","badgeAria","KIND_ICONS","kindLabel","rowTitle","statusText","chipText","onDocPointerDown","DONE_LINGER_MS","HISTORY_CAP","toOperation","input","terminal","useOperations","actions","retired","lingerTimers","clearTimer","tm","retire","scheduleLinger","acts","sync","group","prefix","present","changed","cancel","retry","clearHistory","errorCount","overallPercent","running","sum","frac","PAD","GAP","byTitle","STEPS","activeSteps","stepIdx","step","resolveSteps","spot","cardStyle","place","cw","ch","top","left","onViewportChange","back","skip","dragIndex","overIndex","onDragStart","onDragOver","onDragLeave","onDrop","onDragEnd","onTabMiddleDown","onAux","tab","E2E_MARKER_NAME","E2E_MAGIC","E2E_VERSION","E2E_DEFAULT_ITERATIONS","E2E_MIN_ITERATIONS","E2E_MAX_FILE_BYTES","E2E_MIN_PASSWORD_LEN","VERIFY_PLAINTEXT","MAGIC_BYTES","HEADER_LEN","WRAP_IV_OFF","WRAPPED_DEK_OFF","WRAPPED_DEK_LEN","DATA_IV_OFF","IV_LEN","E2eDecryptError","bytesToB64","b64ToBytes","deriveKek","password","salt","iterations","material","createMarker","kek","iv","ct","verify","parseMarker","verifyPassword","marker","pt","hasMagic","buf","encryptFile","rawDek","dek","wrapIV","dataIV","wrappedDek","decryptFile","createKeyRing","filterInternalEntries","SHOW_HIDDEN_LS_KEY","readShowHidden","showHiddenFiles","setShowHiddenFiles","filterHiddenEntries","showHidden","filterListing","isStorageRootDir","dirname","isTrashListing","makeTrashRow","injectTrashRow","trashVisible","hydrateTrashRow","row","newest","ts","FE_DND_MIME","FE_DND_SRC_MIME","isStorageRow","atVirtualRoot","loadPane","requested","resp","segs","showRootCrumb","crumbGo","onViewClick","multi","onViewContext","onBgContext","onViewDropInto","dropBg","acceptDrag","handleDropPayload","clearSelection","onRowDragStart","targetWire","origin","onBgDragOver","onBgDragLeave","onBgDrop","goUp","selectedNodes","openSelected","reload","getPath","ListView","GridView","GalleryView","makeId","useTabs","tabs","activeId","activeTab","activeIndex","hasMultiple","vm","rawSplit","split","seed","viewMode","syncActive","openTab","closeTab","wasActive","activate","setSplit","password2","ack","submit","isOpen","usePin","expiresAt","maxDownloads","toast","shQuote","cliCommand","sh","iframeRef","formats","selectedTo","srcExt","fromFmt","ins","toList","uniq","iframeSrc","msgId","send","cmd","transfer","onMessage","loadFormats","doConvert","outName","fb","L","pathParts","canManage","direct","inherited","storageRbac","busy","notice","noAccount","createRole","inviteResult","suggestions","showSuggest","searchTimer","levels","levelLabel","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","reloadShares","onEmailInput","pickUser","lvl","submitEmail","addr","inviteCreateUser","gotoShareWithMail","changeLevel","newLevel","removeGrant","glabel","ginitial","expiresAtISO","createLink","sendShareMail","detail","dropExpiresAtISO","createDropLink","drop_settings","sendDropMail","revoke","canShare","humanSize","exp","expiryLine","days","shareBody","pin","title","lines","sz","dropBody","folder","maxFiles","maxMB","nativeShare","_hoisted_70","_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","INSPECTOR_LS_KEY","PATH_LS_KEY","TOUR_LS_KEY","TABS_LS_BASE","locale","realtime","realtimeDegraded","realtimeRoom","vp","qualify","currentPath","thumbs","chunked","opUndo","pendingOps","undo","flashToast","undoToast","verb","splitPaneRef","rootPathProp","rootFloor","initialFloorPath","dirPerm","notFoundPath","loadError","loadErrorPath","retryLoad","stored","searchQuery","trashMode","trashOrigin","trashActive","soleStorageName","multiStorageRoot","canGoUp","selection","focusFiles","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","mutationInPane","shareTarget","activeShare","previewTarget","previewMode","showConvert","convertTarget","showPerm","permTarget","showInspector","persistInspector","toggleInspector","openInspector","closeInspector","inspectorDirLabel","onInspectorManage","permCanEdit","selPerm","sel","canWriteHere","emptyCanUpload","ctxRef","toolbarRef","isNarrow","isCoarse","narrowRO","syncCoarsePointer","toastTimer","showToast","message","dismissToast","runToastAction","act","splitVirtualPath","virtualToWire","wireToVirtual","virtualStorageRows","toggleHiddenFiles","e2eRoot","hydrateTrashRowShared","leaveNotFound","writePersistedPath","loadTrash","wireBasename","wireParent","sameDir","norm","pre","wireJoin","registerMoveUndo","opId","originWire","movedPaths","persistMode","hashPersistEnabled","safeDecode","readLsPath","readHashPath","readPersistedPath","fromHash","encoded","onHashChange","fromPersist","cap","showPalette","showShortcutsHelp","paletteGlobalSearch","openSearchHit","hit","isDir","targetRel","configured","paneIsActive","psel","paneCtxTargets","paneCut","cut","paneCopy","copyToClipboard","panePaste","paste","quickLookToggle","newTabHere","closeTabById","tabsActiveId","nextTab","prevTab","OFFICE_EXTS","e2eUnlocked","e2eOpenPreview","e2eLocked","previewModeForExt","VIEW_DEFAULT_EXTS","restoreSelection","targets","previewNode","openNodeInNewTab","e2eActive","ctxMode","breadcrumbCtxPath","breadcrumbCtxLabel","selectionMode","onToolbarAction","dispatchItemAction","onContextTarget","onContextCanvas","onCrumbContext","onPaneContext","activePane","contextActions","selectionActionList","any","trimmedPath","view","tagsLabel","singleHasId","copyIdLabel","accessLabel","toolbarActions","onContextAction","onCopyPath","downloadFile","openConvert","openShare","duplicate","openNodeInTab","e2eDownload","submitNewFolder","inPane","dirWire","submitRename","oldPath","oldName","newPath","confirmDelete","nodeIds","restoreUndo","onConvertDone","submitShare","share","closeShare","triggerUpload","onFilePicked","uploadFiles","e2eEncryptUploads","canChunk","chunkedUpload","legacyUpload","percent","registered","dragCounter","dragOver","isExternalFileDrag","hasFile","onDragEnter","onDropUpload","d1Origin","d1Here","d1Items","transferItems","onWindowDragOver","onWindowDrop","clippedPaths","moveSourcesAsync","targetDir","opLabel","originOverride","onItemDropInto","dndOrigin","onCrumbDropInto","adapterPath","onCancelUpload","onDismissUpload","onNavigate","showThemeGallery","activeThemeId","setActiveTheme","themeMq","themeOsDark","onThemeMqChange","themeResolvedDark","showShortcutSettings","quickLookOpen","quickLookTarget","e2eFetchDecrypted","quickLookNav","onlyFiles","quickLookOpenFull","opsCenter","retryUploadJob","patchRetry","showTour","tourTimer","tourAlreadyDone","startTour","onTourClose","onTourRestartEvent","tabsStorageKey","tabsApi","tabsRestored","tabsVisible","activeSplit","tabLabel","tabItems","tb","applyTabLocation","activateTab","onListAuxClick","onListMiddleDown","splitVisible","toggleSplit","closeSplit","onPaneNavigate","onPaneOpenTrash","paneViewMode","setPaneViewMode","displayedViewMode","setDisplayedViewMode","setPaneMain","mainPaneFocus","paneToUser","paneClamp","pane","wireAdapterOf","forceCopy","targetAdapter","cross","onPaneTransfer","e2eRing","e2eRingVer","e2eUrls","e2ePw","e2eUnlockBusy","e2eUnlockErr","showEncFolder","e2eCreateBusy","e2eKek","e2eRevokeAll","e2eUnlock","markerText","e2eLock","E2E_MIME","e2eMimeFor","plain","e2ePreviewSrc","submitEncryptedFolder","markerFile","newDirWire","TabBar","Toolbar","Breadcrumb","PresenceBar","SecondaryPane","InspectorPanel","UploadProgress","PendingOpsTray","OperationsCenter","NewFolderModal","EncryptedFolderModal","RenameModal","DeleteConfirmModal","ShareModal","ConvertModal","PermissionsModal","RecentlyOpened","TagPicker","CommandPalette","ShortcutsHelp","ThemeGallery","ShortcutSettings","QuickLook","OnboardingTour","stylesInjected","injectStylesOnce","coreCss","buildConfig","FilexExplorerWrapper","FileExplorer","FilexElement"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}