cista 1.4.2__tar.gz → 1.4.3__tar.gz
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.
- {cista-1.4.2 → cista-1.4.3}/PKG-INFO +2 -2
- {cista-1.4.2 → cista-1.4.3}/cista/__main__.py +1 -1
- {cista-1.4.2 → cista-1.4.3}/cista/_version.py +1 -1
- cista-1.4.3/cista/frontend-build/assets/index-D2oWGW3J.js +32 -0
- cista-1.4.2/cista/frontend-build/assets/index-zDODUQOB.css → cista-1.4.3/cista/frontend-build/assets/index-DEDFmpD8.css +1 -1
- cista-1.4.3/cista/frontend-build/assets/searchWorker-BnRGGAa-.js +1 -0
- {cista-1.4.2 → cista-1.4.3}/cista/frontend-build/index.html +2 -2
- {cista-1.4.2 → cista-1.4.3}/cista/preview.py +2 -2
- {cista-1.4.2 → cista-1.4.3}/pyproject.toml +1 -1
- cista-1.4.2/cista/frontend-build/assets/index-C8Gp9T8Z.js +0 -32
- cista-1.4.2/cista/frontend-build/assets/searchWorker-CxfnO8mP.js +0 -1
- {cista-1.4.2 → cista-1.4.3}/.gitignore +0 -0
- {cista-1.4.2 → cista-1.4.3}/README.md +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/__init__.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/api.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/app.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/auth.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/config.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/droppy.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/fileio.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/frontend-build/assets/icons-DMD182WZ.js +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/frontend-build/assets/logo-ctv8tVwU.svg +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/frontend-build/robots.txt +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/protocol.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/serve.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/server80.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/session.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/sso.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/util/__init__.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/util/apphelpers.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/util/asynclink.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/util/filename.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/util/lrucache.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/util/pwgen.py +0 -0
- {cista-1.4.2 → cista-1.4.3}/cista/watching.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cista
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.3
|
|
4
4
|
Summary: Dropbox-like file server with modern web interface
|
|
5
5
|
Project-URL: Homepage, https://git.zi.fi/Vasanko/cista-storage
|
|
6
6
|
Author: Vasanko
|
|
@@ -16,7 +16,7 @@ Requires-Python: >=3.11
|
|
|
16
16
|
Requires-Dist: argon2-cffi>=25.1.0
|
|
17
17
|
Requires-Dist: av>=15.0.0
|
|
18
18
|
Requires-Dist: blake3>=1.0.5
|
|
19
|
-
Requires-Dist: docopt>=0.
|
|
19
|
+
Requires-Dist: docopt-ng>=0.9.0
|
|
20
20
|
Requires-Dist: fastapi-vue>=0.5.1
|
|
21
21
|
Requires-Dist: fastapi[standard]>=0.128.0
|
|
22
22
|
Requires-Dist: html5tagger>=1.3.0
|
|
@@ -28,7 +28,7 @@ def create_banner():
|
|
|
28
28
|
def create_startup_box(*, folder, url, unix=None, dev=False, paskia_url=None):
|
|
29
29
|
"""Create a framed startup box with server information."""
|
|
30
30
|
title = f"Cista {cista.__version__}"
|
|
31
|
-
listen =
|
|
31
|
+
listen = unix if unix else url
|
|
32
32
|
location = f"{folder} @ {listen}"
|
|
33
33
|
lines = [title, location]
|
|
34
34
|
if paskia_url:
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# This file is automatically generated by hatch build.
|
|
2
|
-
__version__ = '1.4.
|
|
2
|
+
__version__ = '1.4.3'
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import{r as D,m as ao,e as io,i as re,h as ns,a as It,b as co,t as os,g as ss,o as rs,c as Qe,n as ve,d as je,f as K,w as Be,j as X,k as P,l as E,p as ne,q,s as We,u as Ke,v as R,x as w,y as ls,z as dn,A as et,B as ge,C as as,D as Ae,E as ee,F as fn,H as is,G as de,I as me,J as fe,K as ot,L as Ze,M as cs,N as ue,O as be,P as vt,Q as z,R as uo,S as fo,T as Re,U as us,V as ds,W as pn,X as Mt,Y as Qt,Z as fs,_ as En,$ as po,a0 as ps,a1 as yt,a2 as en,a3 as ms,a4 as mo,a5 as hs}from"./icons-DMD182WZ.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))o(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const l of r.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&o(l)}).observe(document,{childList:!0,subtree:!0});function n(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function o(s){if(s.ep)return;s.ep=!0;const r=n(s);fetch(s.href,r)}})();let ho;const Pt=e=>ho=e,go=Symbol();function tn(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var ut;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(ut||(ut={}));function gs(){const e=io(!0),t=e.run(()=>D({}));let n=[],o=[];const s=ao({install(r){Pt(s),s._a=r,r.provide(go,s),r.config.globalProperties.$pinia=s,o.forEach(l=>n.push(l)),o=[]},use(r){return this._a?n.push(r):o.push(r),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return s}const vo=()=>{};function Rn(e,t,n,o=vo){e.add(t);const s=()=>{e.delete(t)&&o()};return!n&&ss()&&rs(s),s}function Ve(e,...t){e.forEach(n=>{n(...t)})}const vs=e=>e(),An=Symbol(),Ut=Symbol();function nn(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,o)=>e.set(o,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const o=t[n],s=e[n];tn(s)&&tn(o)&&e.hasOwnProperty(n)&&!It(o)&&!co(o)?e[n]=nn(s,o):e[n]=o}return e}const ys=Symbol();function ws(e){return!tn(e)||!Object.prototype.hasOwnProperty.call(e,ys)}const{assign:Ne}=Object;function ks(e){return!!(It(e)&&e.effect)}function bs(e,t,n,o){const{state:s,actions:r,getters:l}=t,i=n.state.value[e];let a;function c(){i||(n.state.value[e]=s?s():{});const p=je(n.state.value[e]);return Ne(p,r,Object.keys(l||{}).reduce((u,m)=>(u[m]=ao(K(()=>{Pt(n);const f=n._s.get(e);return l[m].call(f,f)})),u),{}))}return a=yo(e,c,t,n,o,!0),a}function yo(e,t,n={},o,s,r){let l;const i=Ne({actions:{}},n),a={deep:!0};let c,p,u=new Set,m=new Set,f;const S=o.state.value[e];!r&&!S&&(o.state.value[e]={});let A;function b(x){let I;c=p=!1,typeof x=="function"?(x(o.state.value[e]),I={type:ut.patchFunction,storeId:e,events:f}):(nn(o.state.value[e],x),I={type:ut.patchObject,payload:x,storeId:e,events:f});const T=A=Symbol();ve().then(()=>{A===T&&(c=!0)}),p=!0,Ve(u,I,o.state.value[e])}const g=r?function(){const{state:I}=n,T=I?I():{};this.$patch(J=>{Ne(J,T)})}:vo;function $(){l.stop(),u.clear(),m.clear(),o._s.delete(e)}const y=(x,I="")=>{if(An in x)return x[Ut]=I,x;const T=function(){Pt(o);const J=Array.from(arguments),Y=new Set,F=new Set;function H(G){Y.add(G)}function U(G){F.add(G)}Ve(m,{args:J,name:T[Ut],store:h,after:H,onError:U});let Z;try{Z=x.apply(this&&this.$id===e?this:h,J)}catch(G){throw Ve(F,G),G}return Z instanceof Promise?Z.then(G=>(Ve(Y,G),G)).catch(G=>(Ve(F,G),Promise.reject(G))):(Ve(Y,Z),Z)};return T[An]=!0,T[Ut]=I,T},k={_p:o,$id:e,$onAction:Rn.bind(null,m),$patch:b,$reset:g,$subscribe(x,I={}){const T=Rn(u,x,I.detached,()=>J()),J=l.run(()=>Be(()=>o.state.value[e],Y=>{(I.flush==="sync"?p:c)&&x({storeId:e,type:ut.direct,events:f},Y)},Ne({},a,I)));return T},$dispose:$},h=Qe(k);o._s.set(e,h);const C=(o._a&&o._a.runWithContext||vs)(()=>o._e.run(()=>(l=io()).run(()=>t({action:y}))));for(const x in C){const I=C[x];if(It(I)&&!ks(I)||co(I))r||(S&&ws(I)&&(It(I)?I.value=S[x]:nn(I,S[x])),o.state.value[e][x]=I);else if(typeof I=="function"){const T=y(I,x);C[x]=T,i.actions[x]=I}}return Ne(h,C),Ne(os(h),C),Object.defineProperty(h,"$state",{get:()=>o.state.value[e],set:x=>{b(I=>{Ne(I,x)})}}),o._p.forEach(x=>{Ne(h,l.run(()=>x({store:h,app:o._a,pinia:o,options:i})))}),S&&r&&n.hydrate&&n.hydrate(h.$state,S),c=!0,p=!0,h}function wo(e,t,n){let o;const s=typeof t=="function";o=s?n:t;function r(l,i){const a=ns();return l=l||(a?re(go,null):null),l&&Pt(l),l=ho,l._s.has(e)||(s?yo(e,t,o,l):bs(e,o,l)),l._s.get(e)}return r.$id=e,r}const Cs={class:"statustext"},xs={key:0,class:"index"},Ss={class:"filename"},_s={key:0,class:"percent"},Es={key:1,class:"position"},Rs={class:"speed"},As=X({__name:"TransferBar",props:{status:{}},emits:["cancel"],setup(e){const t=e,n=K(()=>t.status.xfer/t.status.total*100),o=K(()=>{let r=t.status.statbytes/t.status.statdur/1e3;const l=(Date.now()-t.status.tlast)/1e3;return l>5/r?0:l>1/r?1/l:r}),s=K(()=>o.value?o.value.toFixed(o.value<10?1:0)+" MB/s":"stalled");return(r,l)=>e.status.total?(R(),P("div",{key:0,class:"transferprogress",style:Ke(`background: linear-gradient(to right, var(--bar) 0, var(--bar) ${n.value}%, var(--nobar) ${n.value}%, var(--nobar) 100%);`)},[E("div",Cs,[e.status.filecount>1?(R(),P("span",xs," ["+ne(e.status.fileidx)+"/"+ne(e.status.filecount)+"] ",1)):q("",!0),E("span",Ss,[We(ne(e.status.filename.split("/").pop())+" ",1),e.status.filesize>1e7?(R(),P("span",_s,ne((e.status.filepos/e.status.filesize*100).toFixed(0)+" %"),1)):q("",!0)]),e.status.total>1e7?(R(),P("span",Es,ne((e.status.xfer/1e6).toFixed(0)+" / "+(e.status.total/1e6).toFixed(0)+" MB"),1)):q("",!0),E("span",Rs,ne(s.value),1),E("button",{class:"close",onClick:l[0]||(l[0]=i=>r.$emit("cancel"))},"❌")])],4)):q("",!0)}}),ye=(e,t)=>{const n=e.__vccOpts||e;for(const[o,s]of t)n[o]=s;return n},Is=ye(As,[["__scopeId","data-v-fc92216f"]]);const Ge=typeof document<"u";function ko(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function $s(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&ko(e.default)}const Q=Object.assign;function jt(e,t){const n={};for(const o in t){const s=t[o];n[o]=Se(s)?s.map(e):e(s)}return n}const dt=()=>{},Se=Array.isArray;function In(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}let le=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const bo=Symbol("");le.MATCHER_NOT_FOUND+"",le.NAVIGATION_GUARD_REDIRECT+"",le.NAVIGATION_ABORTED+"",le.NAVIGATION_CANCELLED+"",le.NAVIGATION_DUPLICATED+"";function tt(e,t){return Q(new Error,{type:e,[bo]:!0},t)}function $e(e,t){return e instanceof Error&&bo in e&&(t==null||!!(e.type&t))}const Ms=["params","query","hash"];function Ps(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of Ms)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}const Os=Symbol(""),$n=Symbol(""),Ot=Symbol(""),Co=Symbol(""),on=Symbol("");function mn(){return re(Ot)}const xo=/#/g,Ns=/&/g,Ts=/\//g,Ls=/=/g,Ds=/\?/g,So=/\+/g,Bs=/%5B/g,Fs=/%5D/g,_o=/%5E/g,Hs=/%60/g,Eo=/%7B/g,Ws=/%7C/g,Ro=/%7D/g,zs=/%20/g;function hn(e){return e==null?"":encodeURI(""+e).replace(Ws,"|").replace(Bs,"[").replace(Fs,"]")}function Us(e){return hn(e).replace(Eo,"{").replace(Ro,"}").replace(_o,"^")}function sn(e){return hn(e).replace(So,"%2B").replace(zs,"+").replace(xo,"%23").replace(Ns,"%26").replace(Hs,"`").replace(Eo,"{").replace(Ro,"}").replace(_o,"^")}function js(e){return sn(e).replace(Ls,"%3D")}function Vs(e){return hn(e).replace(xo,"%23").replace(Ds,"%3F")}function qs(e){return Vs(e).replace(Ts,"%2F")}function wt(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const Gs=/\/$/,Ks=e=>e.replace(Gs,"");function Vt(e,t,n="/"){let o,s={},r="",l="";const i=t.indexOf("#");let a=t.indexOf("?");return a=i>=0&&a>i?-1:a,a>=0&&(o=t.slice(0,a),r=t.slice(a,i>0?i:t.length),s=e(r.slice(1))),i>=0&&(o=o||t.slice(0,i),l=t.slice(i,t.length)),o=Zs(o??t,n),{fullPath:o+r+l,path:o,query:s,hash:wt(l)}}function Js(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function Mn(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Ys(e,t,n){const o=t.matched.length-1,s=n.matched.length-1;return o>-1&&o===s&&nt(t.matched[o],n.matched[s])&&Ao(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function nt(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Ao(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Xs(e[n],t[n]))return!1;return!0}function Xs(e,t){return Se(e)?Pn(e,t):Se(t)?Pn(t,e):(e&&e.valueOf())===(t&&t.valueOf())}function Pn(e,t){return Se(t)?e.length===t.length&&e.every((n,o)=>n===t[o]):e.length===1&&e[0]===t}function Zs(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/"),s=o[o.length-1];(s===".."||s===".")&&o.push("");let r=n.length-1,l,i;for(l=0;l<o.length;l++)if(i=o[l],i!==".")if(i==="..")r>1&&r--;else break;return n.slice(0,r).join("/")+"/"+o.slice(l).join("/")}const Pe={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let rn=(function(e){return e.pop="pop",e.push="push",e})({}),qt=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Qs(e){if(!e)if(Ge){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Ks(e)}const er=/^[^#]+#/;function tr(e,t){return e.replace(er,"#")+t}function nr(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}const Nt=()=>({left:window.scrollX,top:window.scrollY});function or(e){let t;if("el"in e){const n=e.el,o=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?o?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=nr(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function On(e,t){return(history.state?history.state.position-t:-1)+e}const ln=new Map;function sr(e,t){ln.set(e,t)}function rr(e){const t=ln.get(e);return ln.delete(e),t}function lr(e){return typeof e=="string"||e&&typeof e=="object"}function Io(e){return typeof e=="string"||typeof e=="symbol"}function ar(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;o<n.length;++o){const s=n[o].replace(So," "),r=s.indexOf("="),l=wt(r<0?s:s.slice(0,r)),i=r<0?null:wt(s.slice(r+1));if(l in t){let a=t[l];Se(a)||(a=t[l]=[a]),a.push(i)}else t[l]=i}return t}function Nn(e){let t="";for(let n in e){const o=e[n];if(n=js(n),o==null){o!==void 0&&(t+=(t.length?"&":"")+n);continue}(Se(o)?o.map(s=>s&&sn(s)):[o&&sn(o)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function ir(e){const t={};for(const n in e){const o=e[n];o!==void 0&&(t[n]=Se(o)?o.map(s=>s==null?null:""+s):o==null?o:""+o)}return t}function it(){let e=[];function t(o){return e.push(o),()=>{const s=e.indexOf(o);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Te(e,t,n,o,s,r=l=>l()){const l=o&&(o.enterCallbacks[s]=o.enterCallbacks[s]||[]);return()=>new Promise((i,a)=>{const c=m=>{m===!1?a(tt(le.NAVIGATION_ABORTED,{from:n,to:t})):m instanceof Error?a(m):lr(m)?a(tt(le.NAVIGATION_GUARD_REDIRECT,{from:t,to:m})):(l&&o.enterCallbacks[s]===l&&typeof m=="function"&&l.push(m),i())},p=r(()=>e.call(o&&o.instances[s],t,n,c));let u=Promise.resolve(p);e.length<3&&(u=u.then(c)),u.catch(m=>a(m))})}function Gt(e,t,n,o,s=r=>r()){const r=[];for(const l of e)for(const i in l.components){let a=l.components[i];if(!(t!=="beforeRouteEnter"&&!l.instances[i]))if(ko(a)){const c=(a.__vccOpts||a)[t];c&&r.push(Te(c,n,o,l,i,s))}else{let c=a();r.push(()=>c.then(p=>{if(!p)throw new Error(`Couldn't resolve component "${i}" at "${l.path}"`);const u=$s(p)?p.default:p;l.mods[i]=p,l.components[i]=u;const m=(u.__vccOpts||u)[t];return m&&Te(m,n,o,l,i,s)()}))}}return r}function cr(e,t){const n=[],o=[],s=[],r=Math.max(t.matched.length,e.matched.length);for(let l=0;l<r;l++){const i=t.matched[l];i&&(e.matched.find(c=>nt(c,i))?o.push(i):n.push(i));const a=e.matched[l];a&&(t.matched.find(c=>nt(c,a))||s.push(a))}return[n,o,s]}let ur=()=>location.protocol+"//"+location.host;function $o(e,t){const{pathname:n,search:o,hash:s}=t,r=e.indexOf("#");if(r>-1){let l=s.includes(e.slice(r))?e.slice(r).length:1,i=s.slice(l);return i[0]!=="/"&&(i="/"+i),Mn(i,"")}return Mn(n,e)+o+s}function dr(e,t,n,o){let s=[],r=[],l=null;const i=({state:m})=>{const f=$o(e,location),S=n.value,A=t.value;let b=0;if(m){if(n.value=f,t.value=m,l&&l===S){l=null;return}b=A?m.position-A.position:0}else o(f);s.forEach(g=>{g(n.value,S,{delta:b,type:rn.pop,direction:b?b>0?qt.forward:qt.back:qt.unknown})})};function a(){l=n.value}function c(m){s.push(m);const f=()=>{const S=s.indexOf(m);S>-1&&s.splice(S,1)};return r.push(f),f}function p(){if(document.visibilityState==="hidden"){const{history:m}=window;if(!m.state)return;m.replaceState(Q({},m.state,{scroll:Nt()}),"")}}function u(){for(const m of r)m();r=[],window.removeEventListener("popstate",i),window.removeEventListener("pagehide",p),document.removeEventListener("visibilitychange",p)}return window.addEventListener("popstate",i),window.addEventListener("pagehide",p),document.addEventListener("visibilitychange",p),{pauseListeners:a,listen:c,destroy:u}}function Tn(e,t,n,o=!1,s=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:s?Nt():null}}function fr(e){const{history:t,location:n}=window,o={value:$o(e,n)},s={value:t.state};s.value||r(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(a,c,p){const u=e.indexOf("#"),m=u>-1?(n.host&&document.querySelector("base")?e:e.slice(u))+a:ur()+e+a;try{t[p?"replaceState":"pushState"](c,"",m),s.value=c}catch(f){console.error(f),n[p?"replace":"assign"](m)}}function l(a,c){r(a,Q({},t.state,Tn(s.value.back,a,s.value.forward,!0),c,{position:s.value.position}),!0),o.value=a}function i(a,c){const p=Q({},s.value,t.state,{forward:a,scroll:Nt()});r(p.current,p,!0),r(a,Q({},Tn(o.value,a,null),{position:p.position+1},c),!1),o.value=a}return{location:o,state:s,push:i,replace:l}}function pr(e){e=Qs(e);const t=fr(e),n=dr(e,t.state,t.location,t.replace);function o(r,l=!0){l||n.pauseListeners(),history.go(r)}const s=Q({location:"",base:e,go:o,createHref:tr.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}function mr(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),pr(e)}let ze=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var ce=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(ce||{});const hr={type:ze.Static,value:""},gr=/[a-zA-Z0-9_]/;function vr(e){if(!e)return[[]];if(e==="/")return[[hr]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(f){throw new Error(`ERR (${n})/"${c}": ${f}`)}let n=ce.Static,o=n;const s=[];let r;function l(){r&&s.push(r),r=[]}let i=0,a,c="",p="";function u(){c&&(n===ce.Static?r.push({type:ze.Static,value:c}):n===ce.Param||n===ce.ParamRegExp||n===ce.ParamRegExpEnd?(r.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),r.push({type:ze.Param,value:c,regexp:p,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function m(){c+=a}for(;i<e.length;){if(a=e[i++],a==="\\"&&n!==ce.ParamRegExp){o=n,n=ce.EscapeNext;continue}switch(n){case ce.Static:a==="/"?(c&&u(),l()):a===":"?(u(),n=ce.Param):m();break;case ce.EscapeNext:m(),n=o;break;case ce.Param:a==="("?n=ce.ParamRegExp:gr.test(a)?m():(u(),n=ce.Static,a!=="*"&&a!=="?"&&a!=="+"&&i--);break;case ce.ParamRegExp:a===")"?p[p.length-1]=="\\"?p=p.slice(0,-1)+a:n=ce.ParamRegExpEnd:p+=a;break;case ce.ParamRegExpEnd:u(),n=ce.Static,a!=="*"&&a!=="?"&&a!=="+"&&i--,p="";break;default:t("Unknown state");break}}return n===ce.ParamRegExp&&t(`Unfinished custom RegExp for param "${c}"`),u(),l(),s}const Ln="[^/]+?",yr={sensitive:!1,strict:!1,start:!0,end:!0};var he=(function(e){return e[e._multiplier=10]="_multiplier",e[e.Root=90]="Root",e[e.Segment=40]="Segment",e[e.SubSegment=30]="SubSegment",e[e.Static=40]="Static",e[e.Dynamic=20]="Dynamic",e[e.BonusCustomRegExp=10]="BonusCustomRegExp",e[e.BonusWildcard=-50]="BonusWildcard",e[e.BonusRepeatable=-20]="BonusRepeatable",e[e.BonusOptional=-8]="BonusOptional",e[e.BonusStrict=.7000000000000001]="BonusStrict",e[e.BonusCaseSensitive=.25]="BonusCaseSensitive",e})(he||{});const wr=/[.+*?^${}()[\]/\\]/g;function kr(e,t){const n=Q({},yr,t),o=[];let s=n.start?"^":"";const r=[];for(const c of e){const p=c.length?[]:[he.Root];n.strict&&!c.length&&(s+="/");for(let u=0;u<c.length;u++){const m=c[u];let f=he.Segment+(n.sensitive?he.BonusCaseSensitive:0);if(m.type===ze.Static)u||(s+="/"),s+=m.value.replace(wr,"\\$&"),f+=he.Static;else if(m.type===ze.Param){const{value:S,repeatable:A,optional:b,regexp:g}=m;r.push({name:S,repeatable:A,optional:b});const $=g||Ln;if($!==Ln){f+=he.BonusCustomRegExp;try{`${$}`}catch(k){throw new Error(`Invalid custom RegExp for param "${S}" (${$}): `+k.message)}}let y=A?`((?:${$})(?:/(?:${$}))*)`:`(${$})`;u||(y=b&&c.length<2?`(?:/${y})`:"/"+y),b&&(y+="?"),s+=y,f+=he.Dynamic,b&&(f+=he.BonusOptional),A&&(f+=he.BonusRepeatable),$===".*"&&(f+=he.BonusWildcard)}p.push(f)}o.push(p)}if(n.strict&&n.end){const c=o.length-1;o[c][o[c].length-1]+=he.BonusStrict}n.strict||(s+="/?"),n.end?s+="$":n.strict&&!s.endsWith("/")&&(s+="(?:/|$)");const l=new RegExp(s,n.sensitive?"":"i");function i(c){const p=c.match(l),u={};if(!p)return null;for(let m=1;m<p.length;m++){const f=p[m]||"",S=r[m-1];u[S.name]=f&&S.repeatable?f.split("/"):f}return u}function a(c){let p="",u=!1;for(const m of e){(!u||!p.endsWith("/"))&&(p+="/"),u=!1;for(const f of m)if(f.type===ze.Static)p+=f.value;else if(f.type===ze.Param){const{value:S,repeatable:A,optional:b}=f,g=S in c?c[S]:"";if(Se(g)&&!A)throw new Error(`Provided param "${S}" is an array but it is not repeatable (* or + modifiers)`);const $=Se(g)?g.join("/"):g;if(!$)if(b)m.length<2&&(p.endsWith("/")?p=p.slice(0,-1):u=!0);else throw new Error(`Missing required param "${S}"`);p+=$}}return p||"/"}return{re:l,score:o,keys:r,parse:i,stringify:a}}function br(e,t){let n=0;for(;n<e.length&&n<t.length;){const o=t[n]-e[n];if(o)return o;n++}return e.length<t.length?e.length===1&&e[0]===he.Static+he.Segment?-1:1:e.length>t.length?t.length===1&&t[0]===he.Static+he.Segment?1:-1:0}function Mo(e,t){let n=0;const o=e.score,s=t.score;for(;n<o.length&&n<s.length;){const r=br(o[n],s[n]);if(r)return r;n++}if(Math.abs(s.length-o.length)===1){if(Dn(o))return 1;if(Dn(s))return-1}return s.length-o.length}function Dn(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const Cr={strict:!1,end:!0,sensitive:!1};function xr(e,t,n){const o=kr(vr(e.path),n),s=Q(o,{record:e,parent:t,children:[],alias:[]});return t&&!s.record.aliasOf==!t.record.aliasOf&&t.children.push(s),s}function Sr(e,t){const n=[],o=new Map;t=In(Cr,t);function s(u){return o.get(u)}function r(u,m,f){const S=!f,A=Fn(u);A.aliasOf=f&&f.record;const b=In(t,u),g=[A];if("alias"in u){const k=typeof u.alias=="string"?[u.alias]:u.alias;for(const h of k)g.push(Fn(Q({},A,{components:f?f.record.components:A.components,path:h,aliasOf:f?f.record:A})))}let $,y;for(const k of g){const{path:h}=k;if(m&&h[0]!=="/"){const v=m.record.path,C=v[v.length-1]==="/"?"":"/";k.path=m.record.path+(h&&C+h)}if($=xr(k,m,b),f?f.alias.push($):(y=y||$,y!==$&&y.alias.push($),S&&u.name&&!Hn($)&&l(u.name)),Po($)&&a($),A.children){const v=A.children;for(let C=0;C<v.length;C++)r(v[C],$,f&&f.children[C])}f=f||$}return y?()=>{l(y)}:dt}function l(u){if(Io(u)){const m=o.get(u);m&&(o.delete(u),n.splice(n.indexOf(m),1),m.children.forEach(l),m.alias.forEach(l))}else{const m=n.indexOf(u);m>-1&&(n.splice(m,1),u.record.name&&o.delete(u.record.name),u.children.forEach(l),u.alias.forEach(l))}}function i(){return n}function a(u){const m=Rr(u,n);n.splice(m,0,u),u.record.name&&!Hn(u)&&o.set(u.record.name,u)}function c(u,m){let f,S={},A,b;if("name"in u&&u.name){if(f=o.get(u.name),!f)throw tt(le.MATCHER_NOT_FOUND,{location:u});b=f.record.name,S=Q(Bn(m.params,f.keys.filter(y=>!y.optional).concat(f.parent?f.parent.keys.filter(y=>y.optional):[]).map(y=>y.name)),u.params&&Bn(u.params,f.keys.map(y=>y.name))),A=f.stringify(S)}else if(u.path!=null)A=u.path,f=n.find(y=>y.re.test(A)),f&&(S=f.parse(A),b=f.record.name);else{if(f=m.name?o.get(m.name):n.find(y=>y.re.test(m.path)),!f)throw tt(le.MATCHER_NOT_FOUND,{location:u,currentLocation:m});b=f.record.name,S=Q({},m.params,u.params),A=f.stringify(S)}const g=[];let $=f;for(;$;)g.unshift($.record),$=$.parent;return{name:b,path:A,params:S,matched:g,meta:Er(g)}}e.forEach(u=>r(u));function p(){n.length=0,o.clear()}return{addRoute:r,resolve:c,removeRoute:l,clearRoutes:p,getRoutes:i,getRecordMatcher:s}}function Bn(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function Fn(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:_r(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function _r(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const o in e.components)t[o]=typeof n=="object"?n[o]:n;return t}function Hn(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function Er(e){return e.reduce((t,n)=>Q(t,n.meta),{})}function Rr(e,t){let n=0,o=t.length;for(;n!==o;){const r=n+o>>1;Mo(e,t[r])<0?o=r:n=r+1}const s=Ar(e);return s&&(o=t.lastIndexOf(s,o-1)),o}function Ar(e){let t=e;for(;t=t.parent;)if(Po(t)&&Mo(e,t)===0)return t}function Po({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Wn(e){const t=re(Ot),n=re(Co),o=K(()=>{const a=w(e.to);return t.resolve(a)}),s=K(()=>{const{matched:a}=o.value,{length:c}=a,p=a[c-1],u=n.matched;if(!p||!u.length)return-1;const m=u.findIndex(nt.bind(null,p));if(m>-1)return m;const f=zn(a[c-2]);return c>1&&zn(p)===f&&u[u.length-1].path!==f?u.findIndex(nt.bind(null,a[c-2])):m}),r=K(()=>s.value>-1&&Or(n.params,o.value.params)),l=K(()=>s.value>-1&&s.value===n.matched.length-1&&Ao(n.params,o.value.params));function i(a={}){if(Pr(a)){const c=t[w(e.replace)?"replace":"push"](w(e.to)).catch(dt);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:o,href:K(()=>o.value.href),isActive:r,isExactActive:l,navigate:i}}function Ir(e){return e.length===1?e[0]:e}const $r=X({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Wn,setup(e,{slots:t}){const n=Qe(Wn(e)),{options:o}=re(Ot),s=K(()=>({[Un(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[Un(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const r=t.default&&Ir(t.default(n));return e.custom?r:et("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},r)}}}),Mr=$r;function Pr(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Or(e,t){for(const n in t){const o=t[n],s=e[n];if(typeof o=="string"){if(o!==s)return!1}else if(!Se(s)||s.length!==o.length||o.some((r,l)=>r.valueOf()!==s[l].valueOf()))return!1}return!0}function zn(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Un=(e,t,n)=>e??t??n,Nr=X({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=re(on),s=K(()=>e.route||o.value),r=re($n,0),l=K(()=>{let c=w(r);const{matched:p}=s.value;let u;for(;(u=p[c])&&!u.components;)c++;return c}),i=K(()=>s.value.matched[l.value]);ge($n,K(()=>l.value+1)),ge(Os,i),ge(on,s);const a=D();return Be(()=>[a.value,i.value,e.name],([c,p,u],[m,f,S])=>{p&&(p.instances[u]=c,f&&f!==p&&c&&c===m&&(p.leaveGuards.size||(p.leaveGuards=f.leaveGuards),p.updateGuards.size||(p.updateGuards=f.updateGuards))),c&&p&&(!f||!nt(p,f)||!m)&&(p.enterCallbacks[u]||[]).forEach(A=>A(c))},{flush:"post"}),()=>{const c=s.value,p=e.name,u=i.value,m=u&&u.components[p];if(!m)return jn(n.default,{Component:m,route:c});const f=u.props[p],S=f?f===!0?c.params:typeof f=="function"?f(c):f:null,b=et(m,Q({},S,t,{onVnodeUnmounted:g=>{g.component.isUnmounted&&(u.instances[p]=null)},ref:a}));return jn(n.default,{Component:b,route:c})||b}}});function jn(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Oo=Nr;function Tr(e){const t=Sr(e.routes,e),n=e.parseQuery||ar,o=e.stringifyQuery||Nn,s=e.history,r=it(),l=it(),i=it(),a=dn(Pe);let c=Pe;Ge&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const p=jt.bind(null,d=>""+d),u=jt.bind(null,qs),m=jt.bind(null,wt);function f(d,O){let M,N;return Io(d)?(M=t.getRecordMatcher(d),N=O):N=d,t.addRoute(N,M)}function S(d){const O=t.getRecordMatcher(d);O&&t.removeRoute(O)}function A(){return t.getRoutes().map(d=>d.record)}function b(d){return!!t.getRecordMatcher(d)}function g(d,O){if(O=Q({},O||a.value),typeof d=="string"){const W=Vt(n,d,O.path),ae=t.resolve({path:W.path},O),Fe=s.createHref(W.fullPath);return Q(W,ae,{params:m(ae.params),hash:wt(W.hash),redirectedFrom:void 0,href:Fe})}let M;if(d.path!=null)M=Q({},d,{path:Vt(n,d.path,O.path).path});else{const W=Q({},d.params);for(const ae in W)W[ae]==null&&delete W[ae];M=Q({},d,{params:u(W)}),O.params=u(O.params)}const N=t.resolve(M,O),j=d.hash||"";N.params=p(m(N.params));const oe=Js(o,Q({},d,{hash:Us(j),path:N.path})),V=s.createHref(oe);return Q({fullPath:oe,hash:j,query:o===Nn?ir(d.query):d.query||{}},N,{redirectedFrom:void 0,href:V})}function $(d){return typeof d=="string"?Vt(n,d,a.value.path):Q({},d)}function y(d,O){if(c!==d)return tt(le.NAVIGATION_CANCELLED,{from:O,to:d})}function k(d){return C(d)}function h(d){return k(Q($(d),{replace:!0}))}function v(d,O){const M=d.matched[d.matched.length-1];if(M&&M.redirect){const{redirect:N}=M;let j=typeof N=="function"?N(d,O):N;return typeof j=="string"&&(j=j.includes("?")||j.includes("#")?j=$(j):{path:j},j.params={}),Q({query:d.query,hash:d.hash,params:j.path!=null?{}:d.params},j)}}function C(d,O){const M=c=g(d),N=a.value,j=d.state,oe=d.force,V=d.replace===!0,W=v(M,N);if(W)return C(Q($(W),{state:typeof W=="object"?Q({},j,W.state):j,force:oe,replace:V}),O||M);const ae=M;ae.redirectedFrom=O;let Fe;return!oe&&Ys(o,N,M)&&(Fe=tt(le.NAVIGATION_DUPLICATED,{to:ae,from:N}),te(N,N,!0,!1)),(Fe?Promise.resolve(Fe):T(ae,N)).catch(pe=>$e(pe)?$e(pe,le.NAVIGATION_GUARD_REDIRECT)?pe:ke(pe):ie(pe,ae,N)).then(pe=>{if(pe){if($e(pe,le.NAVIGATION_GUARD_REDIRECT))return C(Q({replace:V},$(pe.to),{state:typeof pe.to=="object"?Q({},j,pe.to.state):j,force:oe}),O||ae)}else pe=Y(ae,N,!0,V,j);return J(ae,N,pe),pe})}function x(d,O){const M=y(d,O);return M?Promise.reject(M):Promise.resolve()}function I(d){const O=L.values().next().value;return O&&typeof O.runWithContext=="function"?O.runWithContext(d):d()}function T(d,O){let M;const[N,j,oe]=cr(d,O);M=Gt(N.reverse(),"beforeRouteLeave",d,O);for(const W of N)W.leaveGuards.forEach(ae=>{M.push(Te(ae,d,O))});const V=x.bind(null,d,O);return M.push(V),B(M).then(()=>{M=[];for(const W of r.list())M.push(Te(W,d,O));return M.push(V),B(M)}).then(()=>{M=Gt(j,"beforeRouteUpdate",d,O);for(const W of j)W.updateGuards.forEach(ae=>{M.push(Te(ae,d,O))});return M.push(V),B(M)}).then(()=>{M=[];for(const W of oe)if(W.beforeEnter)if(Se(W.beforeEnter))for(const ae of W.beforeEnter)M.push(Te(ae,d,O));else M.push(Te(W.beforeEnter,d,O));return M.push(V),B(M)}).then(()=>(d.matched.forEach(W=>W.enterCallbacks={}),M=Gt(oe,"beforeRouteEnter",d,O,I),M.push(V),B(M))).then(()=>{M=[];for(const W of l.list())M.push(Te(W,d,O));return M.push(V),B(M)}).catch(W=>$e(W,le.NAVIGATION_CANCELLED)?W:Promise.reject(W))}function J(d,O,M){i.list().forEach(N=>I(()=>N(d,O,M)))}function Y(d,O,M,N,j){const oe=y(d,O);if(oe)return oe;const V=O===Pe,W=Ge?history.state:{};M&&(N||V?s.replace(d.fullPath,Q({scroll:V&&W&&W.scroll},j)):s.push(d.fullPath,j)),a.value=d,te(d,O,M,V),ke()}let F;function H(){F||(F=s.listen((d,O,M)=>{if(!_.listening)return;const N=g(d),j=v(N,_.currentRoute.value);if(j){C(Q(j,{replace:!0,force:!0}),N).catch(dt);return}c=N;const oe=a.value;Ge&&sr(On(oe.fullPath,M.delta),Nt()),T(N,oe).catch(V=>$e(V,le.NAVIGATION_ABORTED|le.NAVIGATION_CANCELLED)?V:$e(V,le.NAVIGATION_GUARD_REDIRECT)?(C(Q($(V.to),{force:!0}),N).then(W=>{$e(W,le.NAVIGATION_ABORTED|le.NAVIGATION_DUPLICATED)&&!M.delta&&M.type===rn.pop&&s.go(-1,!1)}).catch(dt),Promise.reject()):(M.delta&&s.go(-M.delta,!1),ie(V,N,oe))).then(V=>{V=V||Y(N,oe,!1),V&&(M.delta&&!$e(V,le.NAVIGATION_CANCELLED)?s.go(-M.delta,!1):M.type===rn.pop&&$e(V,le.NAVIGATION_ABORTED|le.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),J(N,oe,V)}).catch(dt)}))}let U=it(),Z=it(),G;function ie(d,O,M){ke(d);const N=Z.list();return N.length?N.forEach(j=>j(d,O,M)):console.error(d),Promise.reject(d)}function we(){return G&&a.value!==Pe?Promise.resolve():new Promise((d,O)=>{U.add([d,O])})}function ke(d){return G||(G=!d,H(),U.list().forEach(([O,M])=>d?M(d):O()),U.reset()),d}function te(d,O,M,N){const{scrollBehavior:j}=e;if(!Ge||!j)return Promise.resolve();const oe=!M&&rr(On(d.fullPath,0))||(N||!M)&&history.state&&history.state.scroll||null;return ve().then(()=>j(d,O,oe)).then(V=>V&&or(V)).catch(V=>ie(V,d,O))}const Ie=d=>s.go(d);let Me;const L=new Set,_={currentRoute:a,listening:!0,addRoute:f,removeRoute:S,clearRoutes:t.clearRoutes,hasRoute:b,getRoutes:A,resolve:g,options:e,push:k,replace:h,go:Ie,back:()=>Ie(-1),forward:()=>Ie(1),beforeEach:r.add,beforeResolve:l.add,afterEach:i.add,onError:Z.add,isReady:we,install(d){d.component("RouterLink",Mr),d.component("RouterView",Oo),d.config.globalProperties.$router=_,Object.defineProperty(d.config.globalProperties,"$route",{enumerable:!0,get:()=>w(a)}),Ge&&!Me&&a.value===Pe&&(Me=!0,k(s.location).catch(N=>{}));const O={};for(const N in Pe)Object.defineProperty(O,N,{get:()=>a.value[N],enumerable:!0});d.provide(Ot,_),d.provide(Co,ls(O)),d.provide(on,a);const M=d.unmount;L.add(d),d.unmount=function(){L.delete(d),L.size<1&&(c=Pe,F&&F(),F=null,a.value=Pe,Me=!1,G=!1),M()}}};function B(d){return d.reduce((O,M)=>O.then(()=>I(M)),Promise.resolve())}return _}function No(e){if(e===0)return"empty";for(const t of[null,"kB","MB","GB","TB","PB","EB"]){if(e<1e4)return e.toLocaleString().replace(","," ")+(t?` ${t}`:"");e=Math.round(e/1e3)}return"huge"}function To(e){const t=new Date(e*1e3),n=new Date,o=t.getTime()-n.getTime(),s=Math.abs(o),r=new Intl.RelativeTimeFormat("en",{numeric:"auto"});if(s<=5e3)return"now";if(s<=6e4)return r.format(Math.round(o/1e3),"second").replace(" ago","").replaceAll(" "," ");if(s<=36e5)return r.format(Math.round(o/6e4),"minute").replace("utes","").replace("ute","").replaceAll(" "," ");if(s<=864e5)return r.format(Math.round(o/36e5),"hour").replaceAll(" "," ");if(s<=6048e5)return r.format(Math.round(o/864e5),"day").replaceAll(" "," ");let l=t.toLocaleDateString("en-ie",{weekday:"short",year:"numeric",month:"short",day:"numeric"}).replace("Sept","Sep");return l.length===14&&(l=l.replace(" "," ")),l=l.replaceAll(" "," ").replace(" "," "),l=l.slice(0,-4)+l.slice(-2),l}const Tt=new Intl.Collator("en",{sensitivity:"base",numeric:!0,usage:"search"});class Lt{loc="";key="";size=0;mtime=0;dir=!1;_name="";constructor(t={}){const{name:n,...o}=t;Object.assign(this,o),n&&(this._name=n)}get name(){return this._name}set name(t){if(t.includes("/")||t.startsWith("."))throw Error(`Invalid name: ${t}`);this._name=t}get sizedisp(){return No(this.size)}get modified(){return To(this.mtime)}get url(){const t=this.loc?`${this.loc}/${this.name}`:this.name;return this.dir?"/#/"+`${t}/`.replaceAll("#","%23"):`/files/${t}`.replaceAll("?","%3F").replaceAll("#","%23")}get urlrouter(){return this.url.replace(/^\/#/,"")}get img(){return this.dir?!1:["jpg","jpeg","png","gif","webp","avif","heic","heif","svg"].includes(this.ext)}get previewable(){return this.dir?!1:this.img?!0:["mp4","mkv","webm","ogg","mp3","flac","aac","pdf"].includes(this.ext)}get previewurl(){return this.url.replace(/^\/files/,"/preview")}get ext(){const t=this.name.lastIndexOf(".");return t===-1||t===this.name.length-1?"":this.name.slice(t+1).toLowerCase()}}const $t="paskia-iframe",Vn="paskia-dialog",Lr=`body::before {
|
|
2
|
+
content: '';
|
|
3
|
+
position: fixed;
|
|
4
|
+
inset: 0;
|
|
5
|
+
z-index: 1099;
|
|
6
|
+
background: transparent;
|
|
7
|
+
backdrop-filter: blur(0) brightness(1);
|
|
8
|
+
-webkit-backdrop-filter: blur(0) brightness(1);
|
|
9
|
+
pointer-events: none;
|
|
10
|
+
visibility: hidden;
|
|
11
|
+
transition: all 0.2s ease-out;
|
|
12
|
+
}
|
|
13
|
+
body.paskia-backdrop::before {
|
|
14
|
+
-webkit-backdrop-filter: blur(.2rem) brightness(0.5);
|
|
15
|
+
backdrop-filter: blur(.2rem) brightness(0.5);
|
|
16
|
+
visibility: visible;
|
|
17
|
+
}
|
|
18
|
+
body.paskia-backdrop {
|
|
19
|
+
overflow: auto;
|
|
20
|
+
}
|
|
21
|
+
#${$t} {
|
|
22
|
+
border: none;
|
|
23
|
+
position: fixed;
|
|
24
|
+
top: 0;
|
|
25
|
+
left: 0;
|
|
26
|
+
width: 100%;
|
|
27
|
+
height: 100%;
|
|
28
|
+
z-index: 9999;
|
|
29
|
+
color-scheme: auto;
|
|
30
|
+
background: transparent;
|
|
31
|
+
}
|
|
32
|
+
`;let Le=null,He=null,Je=null,Ye=null,qn=!1,Et=0;function Dr(){if(document.getElementById(Vn))return;const e=document.createElement("style");e.id=Vn,e.textContent=Lr,document.head.insertBefore(e,document.head.firstChild)}class Xe extends Error{constructor(){super("Authentication cancelled"),this.name="AuthCancelledError"}}function gn(){Et++,document.body.classList.add("paskia-backdrop")}function Lo(){Et=Math.max(0,Et-1),Et===0&&document.body.classList.remove("paskia-backdrop")}function Br(){return!!document.getElementById($t)}function an(){Le&&(Le.remove(),Le=null,Lo())}function Fr(e){const t=e.data;if(t?.type)switch(t.type){case"auth-success":an(),Je&&(Je(),He=null,Je=null,Ye=null);break;case"auth-back":an(),Ye&&(Ye(new Xe),He=null,Je=null,Ye=null);break}}function Hr(){qn||typeof window<"u"&&(window.addEventListener("message",Fr),qn=!0)}function vn(e,t="Authentication"){return Dr(),Hr(),He||(document.getElementById($t)?(He=new Promise((n,o)=>{Je=n,Ye=o}),He):(He=new Promise((n,o)=>{Je=n,Ye=o}),an(),gn(),Le=document.createElement("iframe"),Le.id=$t,Le.title=t,Le.src=e,document.body.appendChild(Le),He))}const Wr=1e3;class zr extends Error{constructor(t,n,o){super(o?.detail||`Request failed: ${n.status}`),this.name="ApiError",this.url=t,this.status=n.status,this.statusText=n.statusText,this.data=o}}class Kt extends Error{constructor(t,n=null){super(t),this.name="NetworkError",this.originalError=n}}async function Do(e,t={}){const{timeout:n=Wr,...o}=t;for(o.credentials=o.credentials||"include";;){let s;try{s=await fetch(e,{...o,signal:n?AbortSignal.timeout(n):void 0})}catch(r){const l=r;throw l.name==="TimeoutError"?new Kt("Request timed out",l):l.name==="AbortError"?r:l.name==="TypeError"&&l.message==="Failed to fetch"?new Kt("Unable to connect to server",l):new Kt(l.message||"Network error",l)}if(s.status===401||s.status===403){let r=null;try{r=await s.clone().json()}catch{}if(r?.auth?.iframe&&window===window.top){await vn(r.auth.iframe);continue}}return s}}async function xt(e,t={}){return Ur(e,t,Do)}async function Ur(e,t={},n=fetch){const o={Accept:"application/json",...t.headers};let s;t.body&&typeof t.body=="object"&&!(t.body instanceof FormData)?(o["Content-Type"]="application/json",s=JSON.stringify(t.body)):s=t.body;const r={...t,headers:o,body:s},l=await n(e,r),i=await l.json();if(!l.ok)throw new zr(e,l,i);return i}const kt="/api/control",jr="/api/upload",Vr="/api/watch";let xe=[],Rt=500,ft=null,pt=!1;const Bo=()=>{xe=[]},qr=()=>{const e=localStorage["cista-files"];if(!e)return!1;const t=se();try{return xe=JSON.parse(e),t.updateRoot(xe),console.log(`Loaded session with ${xe.length} items cached`),!0}catch(n){return console.log("Loading session failed",n),!1}},Fo=()=>{localStorage["cista-files"]=JSON.stringify(xe)},Ue=(e,t)=>{const n=new WebSocket(new URL(e,location.origin.replace(/^http/,"ws")));for(const[o,s]of Object.entries(t))n.addEventListener(o,s);return n};async function Ho(e){const t=e.error?.auth?.iframe;if(t){const n=se();n.clearSensitiveData(),Bo(),pt=!0,n.authInProgress=!0,n.error="",Ce!==null&&(clearTimeout(Ce),Ce=null);try{await vn(t),pt=!1,n.authInProgress=!1,Dt()}catch(o){pt=!1,n.authInProgress=!1,o instanceof Xe?(console.log("User cancelled authentication"),n.dialog="accessdenied"):console.error("Auth iframe error:",o)}return!0}return!1}const Dt=()=>{Ce!==null&&(clearTimeout(Ce),Ce=null);const e=se();e.error!=="Reconnecting..."&&(e.error="Connecting..."),console.log(e.error),ft=Ue(Vr,{message:Jr,close:Kr}),ft.addEventListener("message",t=>{if(e.connected)return;const n=JSON.parse(t.data);if("error"in n){n.error.code===401||n.error.code===403?Ho(n):e.error=n.error.message;return}"server"in n&&(console.log("Connected to backend",n),e.server=n.server,e.connected=!0,Rt=500,e.error="",n.user?e.login(n.user.username,n.user.privileged):e.isUserLogged&&e.logout())})},Gr=()=>{ft&&(ft.close(),ft=null)},cn=()=>{pt=!1,Ce!==null&&(clearTimeout(Ce),Ce=null),Dt()};let Ce=null;const Kr=e=>{const t=se();if(pt||Br()){console.log("Skipping reconnect - awaiting authentication");return}t.connected&&(console.warn("Disconnected from server",e),t.connected=!1,t.error="Reconnecting..."),Ce!==null&&clearTimeout(Ce),Rt=Math.min(5e3,Rt+500),Ce=setTimeout(Dt,Rt)},Jr=e=>{const t=JSON.parse(e.data);switch(!0){case!!t.root:Yr(t);break;case!!t.update:Xr(t);break;case!!t.space:console.log("Watch space",t.space);break;case!!t.error:Zr(t);break}};function Yr({root:e}){const t=se();console.log("Watch root",e),t.updateRoot(e),xe=e,Fo()}function Xr(e){const t=se(),n=e.update;if(console.log("Watch update",n),!xe)return console.error("Watch update before root");let o=[],s=0;for(const[r,l]of n)r==="k"?(o.push(...xe.slice(s,s+l)),s+=l):r==="d"?s+=l:r==="i"?o.push(...l):console.log("Unknown update action",r,l);if(s!=xe.length)throw Error(`Tree update out of sync, number of entries mismatch: got ${s}, expected ${xe.length}, new tree ${o.length}`);t.updateRoot(o),xe=o,Fo()}function Zr(e){if(se(),e.error.code===401||e.error.code===403){Ho(e);return}}const Wo={name:(e,t)=>Tt.compare(e.name,t.name),modified:(e,t)=>t.mtime-e.mtime,size:(e,t)=>t.size-e.size},zo=(e,t)=>{if(!t)return e;const n=[...e];return n.sort(Wo[t]),n},Qr=(e,t)=>{if(!t)return e;const n=Wo[t],o=new Map;for(const i of e){const a=i.loc;o.has(a)||o.set(a,[]),o.get(a).push(i)}for(const i of o.values())i.sort(n);const s=new Map;for(const[i,a]of o)s.set(i,a[0]);const r=[...o.keys()].sort((i,a)=>t==="name"?Tt.compare(i,a):n(s.get(i),s.get(a))),l=[];for(const i of r)l.push(...o.get(i));return l};function el(e){return new Worker("/assets/searchWorker-BnRGGAa-.js",{name:e?.name})}let St=null,Uo=0,At=null;function Gn(){return St||(St=new el,St.onmessage=e=>{if(!At||e.data.id!==Uo)return;const t=[];for(const n of e.data.docs)t.push(new Lt(n));At.searchResults=t,e.data.done&&(At.searchLoading=!1)}),St}const se=wo("main",{state:()=>({document:[],selected:new Set([]),query:"",searchResults:[],searchLoading:!1,_searchRouteTimer:null,fileExplorer:null,error:"",toast:"",toastTimeout:null,connected:!1,authInProgress:!1,cursor:"",server:{},dialog:"",uprogress:{},dprogress:{},prefs:{gallery:!1,sortListing:"",sortFiltered:""},user:{username:"",privileged:!1,isLoggedIn:!1}}),persist:{pick:["prefs","cursor","selected"],serializer:{deserialize:e=>{const t=JSON.parse(e);return t.selected=new Set(t.selected),t},serialize:e=>(e.selected=Array.from(e.selected),JSON.stringify(e))}},actions:{updateRoot(e){const t=[];let n=[];for(const[o,s,r,l,i,a]of e)n=n.slice(0,o-1),t.push(new Lt({name:s,loc:o?n.join("/"):"/",key:r,size:i,mtime:l,dir:!a})),n.push(s);this.document=t,this.syncSearchWorker()},showToast(e,t=3e3){this.toastTimeout&&(clearTimeout(this.toastTimeout),this.toastTimeout=null),this.toast=e,this.toastTimeout=setTimeout(()=>{this.toast="",this.toastTimeout=null},t)},clearToast(){this.toastTimeout&&(clearTimeout(this.toastTimeout),this.toastTimeout=null),this.toast=""},syncSearchWorker(){const e=Gn(),t=this.document.map(n=>({loc:n.loc,name:n.name,key:n.key,size:n.size,mtime:n.mtime,dir:n.dir}));e.postMessage({type:"update",documents:t})},search(e,t){const n=Gn(),o=++Uo;if(At=this,!e){this.searchResults=[],this.searchLoading=!1;return}this.searchLoading=!0,n.postMessage({type:"search",query:e,loc:t,id:o})},login(e,t){this.user.username=e,this.user.privileged=t,this.user.isLoggedIn=!0,this.dialog="",this.connected||cn()},clearSensitiveData(){localStorage.removeItem("cista-files"),this.document=[],this.selected.clear(),this.user.username="",this.user.privileged=!1,this.user.isLoggedIn=!1,this.connected=!1,this.dialog="",this.cursor=""},async logout(){console.log("Logout");try{const e=await fetch("/auth/api/logout",{method:"POST"});if(!e.ok){const t=await e.json().catch(()=>({}));this.error=t.message||t.detail||"Logout failed";return}}catch{this.error="Logout failed";return}this.clearSensitiveData(),cn()},toggleSort(e){this.query?this.prefs.sortFiltered=this.prefs.sortFiltered===e?"":e:this.prefs.sortListing=this.prefs.sortListing===e?"":e},sort(e){this.query?this.prefs.sortFiltered=e:this.prefs.sortListing=e},focusBreadcrumb(){document.querySelector(".breadcrumb").focus()},cancelDownloads(){location.reload()},cancelUploads(){location.reload()}},getters:{sortOrder(){return this.query?this.prefs.sortFiltered:this.prefs.sortListing},isUserLogged(){return this.user.isLoggedIn},recentDocuments(){return zo(this.document,"modified")},selectedFiles(){const e=this.selected,t=new Set,n={missing:new Set,docs:{},keys:[],recursive:[]};for(const r of this.document)e.has(r.key)&&(t.add(r.key),n.keys.push(r.key),n.docs[r.key]=r);for(const r of e)t.has(r)||n.missing.add(r);const o=new Set;function s(r,l,i){if(!i.dir&&o.has(r))throw Error(`Multiple selections conflict for: ${r}`);o.add(r),n.recursive.push([r,l,i])}for(const r of n.keys){const l=n.docs[r],i=l.loc?`${l.loc}/${l.name}`:l.name,a=l.loc.length;s(l.name,i,l);for(const c of this.document)if(c.loc===i||c.loc.startsWith(i)&&c.loc[i.length]==="/"){const p=c.loc?`${c.loc}/${c.name}`:c.name,u=p.slice(a);s(u,p,c)}}return n.recursive.sort((r,l)=>Tt.compare(r[0],l[0])),n}}}),jo=e=>{const t=se(),n=e.join("/");return t.document.some(o=>(o.loc?`${o.loc}/${o.name}`:o.name)===n)},Jt=e=>{const t=[".tar.gz",".tar.bz2",".tar.xz",".tar.zst"],n=e.toLowerCase();for(const s of t)if(n.endsWith(s))return e.slice(0,-s.length);const o=e.lastIndexOf(".");if(o>0){const s=e.slice(o+1);if(s.length>=2&&s.length<=5&&/^[a-zA-Z0-9]+$/.test(s))return e.slice(0,o)}return e},tl=e=>{const t=e.map(s=>s.name);if(t.length===1)return Jt(t[0]);const n=e.map(s=>s.loc);return n.every(s=>s===n[0])&&n[0]?n[0].split("/").pop():t.length<=3?t.map(Jt).join("."):`${Jt(t[0])}.etc`},nl=["aria-current"],ol=["href","aria-current","onClick","title"],yn=X({__name:"BreadCrumb",props:{path:{},primary:{type:Boolean}},setup(e){const t=is,n=mn(),o=[],s=(u,m)=>{m&&(o[u]=m)};as(()=>{o.length=1});const r=e,l=D([]),i=u=>u==r.path.length?"location":void 0,a=()=>{ve(()=>{const u=r.path.length;u<o.length&&o[u].focus()})},c=u=>{if(!o[u])throw Error(`No link at index ${u} (path: ${r.path})`);const f=u?`/${l.value.slice(0,u).join("/")}/`:"/",S=l.value.length?`/${l.value.join("/")}/`:"/",A=decodeURIComponent(location.hash.slice(1).split("//")[0]??""),b=f.replaceAll("?","%3F").replaceAll("#","%23");i(u)?(l.value.splice(u),n.push(b)):S.startsWith(A)?n.replace(b):n.push(b)},p=u=>{const m=r.path.length+u;m<0||m>l.value.length||c(m)};return Ae(()=>{const u=l.value.slice(0,r.path.length);if(!u.every((f,S)=>f===r.path[S]))l.value=r.path;else if(r.path.length>u.length)l.value=u.concat(r.path.slice(u.length));else for(let f=r.path.length;f<l.value.length;++f)if(!jo(l.value.slice(0,f+1))){l.value=l.value.slice(0,f);break}r.primary&&ve(()=>{const f=document.activeElement;(!f||[...o,document.body].includes(f))&&a()})}),(u,m)=>(R(),P("nav",{class:"breadcrumb","aria-label":"Breadcrumb",onKeydown:[m[1]||(m[1]=Ze(de(f=>p(-1),["stop"]),["left"])),m[2]||(m[2]=Ze(de(f=>p(1),["stop"]),["right"]))],onKeyup:m[3]||(m[3]=Ze(f=>p(0),["enter"])),onFocus:a,tabindex:"0"},[E("a",{href:"#/",ref:f=>s(0,f),class:me(["home",{current:!!i(0)}]),"aria-current":i(0),onClick:m[0]||(m[0]=de(f=>c(0),["prevent"])),title:"/"},[(R(),ee(fn(w(t))))],10,nl),(R(!0),P(fe,null,ot(l.value,(f,S)=>(R(),P("a",{key:S,href:`/#/${l.value.slice(0,S+1).join("/")}/`,class:me({current:!!i(S+1)}),"aria-current":i(S+1),onClick:de(A=>c(S+1),["prevent"]),ref_for:!0,ref:A=>s(S+1,A),title:`/${l.value.slice(0,S+1).join("/")}`},ne(f),11,ol))),128))],32))}}),sl={class:"action-button"},Bt=X({__name:"SvgButton",props:{name:{}},setup(e){return(t,n)=>(R(),P("button",sl,[(R(),ee(fn(w(cs)[e.name]))),ue(t.$slots,"default")]))}}),rl=X({__name:"UploadButton",props:{path:Array},setup(e){const t=D(),n=D(),o=se(),s=e;function r(k){const h=Array.from(k.clipboardData?.items??[]),v=[],C=[];for(const x of h){if(x.kind!=="file")continue;const I=x.webkitGetAsEntry();if(I?.isFile){const T=x.getAsFile();T&&v.push(T)}else I?.isDirectory&&C.push(I)}if(v.length||C.length){k.preventDefault(),a(v);for(const x of C)l(x,`${s.path.join("/")}/${x.name}`)}}const l=async(k,h)=>{const v=k.createReader(),C=await new Promise(I=>v.readEntries(I)),x=[];for(const I of C){const T=`${h}/${I.name}`;if(I.isFile){const J=await new Promise(Y=>I.file(Y));x.push({file:J,cloudName:T,cloudPos:0})}else I.isDirectory&&await l(I,T)}x.length&&c(x)};function i(k){k.preventDefault();const h=k.target,v=Array.from((h??k.dataTransfer)?.files??[]);h&&(h.value=""),v.length&&a(v)}const a=k=>{const h=s.path.join("/");let v=[];for(const C of k)v.push({file:C,cloudName:h+"/"+(C.webkitRelativePath||C.name),cloudPos:0});c(v)},c=k=>{const h=k.filter(v=>v.cloudName.includes("/."));h.length&&(o.showToast("Won't upload dotfiles"),console.log("Dotfiles omitted",h),k=k.filter(v=>!v.cloudName.includes("/."))),k.length&&(k.sort((v,C)=>Tt.compare(v.cloudName,C.cloudName)),A=[...A,...k],S(k),y())},p={total:0,xfer:0,t0:0,tlast:0,statbytes:0,statdur:0,files:[],filestart:0,fileidx:0,filecount:0,filename:"",filesize:0,filepos:0,status:"idle"};o.uprogress={...p},setInterval(()=>{Date.now()-o.uprogress.tlast>3e3?(o.uprogress.statbytes=0,o.uprogress.statdur=1):(o.uprogress.statbytes*=.9,o.uprogress.statdur*=.9)},100);const u=({name:k,size:h,start:v,end:C})=>{if(k!==o.uprogress.filename)return;const x=Date.now();o.uprogress.xfer=o.uprogress.filestart+C,o.uprogress.filepos=C,o.uprogress.statbytes+=C-v,o.uprogress.statdur+=x-o.uprogress.tlast,o.uprogress.tlast=x,C===h&&(o.uprogress.filestart+=h,m(),++o.uprogress.fileidx>=o.uprogress.filecount&&f())},m=()=>{const k=o.uprogress.files.shift();if(!k)return f();o.uprogress.filepos=0,o.uprogress.filesize=k.file.size,o.uprogress.filename=k.cloudName},f=()=>{Object.assign(o.uprogress,p),o.uprogress.t0=Date.now(),o.uprogress.tlast=o.uprogress.t0+1},S=k=>{o.uprogress.files.length===0&&f(),o.uprogress.total+=k.reduce((h,v)=>h+v.file.size,0),o.uprogress.filecount+=k.length,o.uprogress.files=[...o.uprogress.files,...k],m()};let A=[];const b=async()=>await new Promise(k=>{const h=Ue(jr,{open(v){k(h)},error(v){console.error("Upload socket error",v),o.error="Upload socket error"},message(v){const C=JSON.parse(v.data);if("error"in C){console.error("Upload socket error",C.error),o.error=C.error.message;return}C.status==="ack"?u(C.req):console.log("Unknown upload response",C)}});h.sendMsg=v=>h.send(JSON.stringify(v)),h.sendData=async v=>{o.uprogress.status="uploading",await new Promise(C=>{const x=setInterval(()=>{h.bufferedAmount>1048576||(C(void 0),clearInterval(x))},1)}),o.uprogress.status="processing",h.send(v)}}),g=async()=>{const k=await b();for(;A.length;){const h=A[0],v=h.cloudPos,C=Math.min(h.file.size,v+(1<<20)),x={name:h.cloudName,size:h.file.size,start:v,end:C},I=h.file.slice(v,C);h.cloudPos=C,k.sendMsg(x),await k.sendData(I),h.cloudPos===h.file.size&&A.shift()}A.length&&y(),o.uprogress.status="idle",$=!1};let $=!1;const y=()=>{$===!1&&($=setTimeout(()=>{$=!0,g()},0))};return be(()=>{addEventListener("dragover",i),addEventListener("drop",i),addEventListener("paste",r)}),vt(()=>{removeEventListener("paste",r),removeEventListener("dragover",i),removeEventListener("drop",i)}),(k,h)=>{const v=Bt;return R(),P(fe,null,[E("template",null,[E("input",{ref_key:"fileInput",ref:t,onChange:i,type:"file",multiple:""},null,544),E("input",{ref_key:"folderInput",ref:n,onChange:i,type:"file",webkitdirectory:""},null,544)]),z(v,{name:"add-file","data-tooltip":"Upload files",onClick:h[0]||(h[0]=C=>t.value.click())}),z(v,{name:"add-folder","data-tooltip":"Upload folder",onClick:h[1]||(h[1]=C=>n.value.click())})],64)}}}),ll=wo("ssoAuth",()=>{const e=K(()=>se().server?.paskia===!0);function t(){se().clearSensitiveData(),Bo()}return{isExternalAuth:e,clearDataOnUnauth:t}});let De=null;function al(){return De!==null}function il(e){De&&Vo(),De=e}function Kn(e){e===De&&(De=null)}function Vo(){De&&(De.closeMenu(),De=null)}const Ee={defaultDirection:"br",defaultMinWidth:100,defaultMaxWidth:600,defaultZindex:100,defaultZoom:1,defaultAdjustPadding:{x:0,y:10}};function mt(e,t){let n=e.offsetTop;return e.offsetParent!=null&&e.offsetParent!=t&&(n-=e.offsetParent.scrollTop,n+=mt(e.offsetParent,t)),n}function ht(e,t){let n=e.offsetLeft;return e.offsetParent!=null&&e.offsetParent!=t&&(n-=e.offsetParent.scrollLeft,n+=ht(e.offsetParent,t)),n}function cl(e,t,n,o){return{x:ht(e,o)+t,y:mt(e,o)+n}}const Yt="mx-menu-default-container",ul="mx-menu-container-";let dl=0;function qo(e){const{getContainer:t,zIndex:n}=e;if(t){const s=typeof t=="function"?t():t;if(s){let r=s.getAttribute("id");return r||(r=ul+dl++,s.setAttribute("id",r)),{eleId:r,container:s,isNew:!1}}}let o=document.getElementById(Yt);return o||(o=document.createElement("div"),o.setAttribute("id",Yt),o.setAttribute("class","mx-menu-ghost-host fullscreen"),document.body.appendChild(o)),o.style.zIndex=n?.toString()||Ee.defaultZindex.toString(),{eleId:Yt,container:o,isNew:!0}}function fl(e){let t=0;for(let n=0;n<e.length;n++){const o=e.charCodeAt(n);t=(t<<5)-t+o,t|=0}return t}function Jn(e){return typeof e=="number"?`${e}px`:e}const _e=X({props:{vnode:{type:null},data:{type:null,default:null}},setup(e){const{vnode:t,data:n}=je(e);return()=>typeof t.value=="function"?t.value(n.value):t.value}});function pl(e,t){const n={...e};return delete n[t],n}var ml=Object.defineProperty,hl=(e,t,n)=>t in e?ml(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Yn=(e,t,n)=>hl(e,typeof t!="symbol"?t+"":t,n);class Xn{constructor(t,n){Yn(this,"x",0),Yn(this,"y",0),this.x=t||0,this.y=n||0}set(t,n){this.x=t,this.y=n}substract(t){this.x-=t.x,this.y-=t.y}}function Zn(e){const{onDown:t,onMove:n,onUp:o}=e,s=new Xn,r=new Xn;let l;function i(c){c.stopPropagation(),r.set(c.x,c.y),r.substract(s),n(s,r,c,l)}function a(c){o(c,l),s.set(0,0),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",a)}return(c,p)=>t(c,p)?(l=p,s.set(c.x,c.y),document.addEventListener("mousemove",i),document.addEventListener("mouseup",a),c.stopPropagation(),!0):!1}function gl(e,t){let n=0;return{start(){n>0&&clearInterval(n),n=setInterval(()=>{n=0,t()},e)},stop(){n>0&&(clearInterval(n),n=0)}}}const ct=[],Qn=gl(100,()=>{for(const e of ct)e()});function vl(e,t,n,o){let s=0,r=0;function l(){e.value&&(t&&s!==e.value.offsetWidth&&t(e.value.offsetWidth),n&&r!==e.value.offsetHeight&&n(e.value.offsetHeight),s=e.value.offsetWidth,r=e.value.offsetHeight)}return{startResizeChecker(){Qn.start(),ct.push(l)},stopResizeChecker(){const i=ct.indexOf(l);i>=0&&ct.splice(i,1),ct.length===0&&Qn.stop()}}}const eo=140,yl=70,wl=X({__name:"ScrollRect",props:{scroll:{type:String,default:"both"},scrollBarAlwaysShow:{type:Boolean,default:!1},scrollBarBackgroundClickable:{type:Boolean,default:!1},height:{type:Number,default:void 0},width:{type:Number,default:void 0},maxHeight:{type:Number,default:void 0},maxWidth:{type:Number,default:void 0},containerClass:{type:String,default:""},containerStyle:{type:null}},emits:["scroll","resized"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=D(),l=D(),i=D(),a=D(),c=D(),p=D(),u=D(!1),m=K(()=>o.scroll==="horizontal"||o.scroll==="both"),f=K(()=>o.scroll==="vertical"||o.scroll==="both"),S=Qe({show:!1,size:0,sizeRaw:0,pos:0}),A=Qe({show:!1,size:0,sizeRaw:0,pos:0});let b=0,g=0,$=0,y=0,k=null;const h={attributes:!0,childList:!0};function v(){if(r.value){if(S.show){const _=r.value.offsetWidth/r.value.scrollWidth;S.sizeRaw=_*r.value.offsetWidth,S.size=_*100,S.pos=r.value.scrollLeft/(r.value.scrollWidth-r.value.offsetWidth)*(100-S.size),_>=1&&(S.show=!1)}if(A.show){const _=r.value.offsetHeight/r.value.scrollHeight;A.sizeRaw=_*r.value.offsetHeight,A.size=_*100,A.pos=r.value.scrollTop/(r.value.scrollHeight-r.value.offsetHeight)*(100-A.size),_>=1&&(A.show=!1)}s("scroll",r.value.scrollLeft,r.value.scrollTop)}}function C(_=!1){if(!r.value)return;let B=m.value,d=f.value;const O=B&&(b!==r.value.scrollWidth||$!==r.value.offsetWidth),M=f&&(g!==r.value.scrollHeight||y!==r.value.offsetHeight);if(!_&&!O&&!M)return;const N=window.getComputedStyle(r.value);(N.overflow==="hidden"||N.overflowX==="hidden")&&(B=!1),(N.overflow==="hidden"||N.overflowY==="hidden")&&(d=!1),S.show=B,A.show=d,v(),$=r.value.offsetWidth,y=r.value.offsetHeight,b=r.value.scrollWidth,g=r.value.scrollHeight,s("resized",b,g)}function x(_){var B;o.scroll=="horizontal"&&(_.deltaMode==0&&((B=r.value)==null||B.scrollTo({left:r.value.scrollLeft+(_.deltaY>0?eo:-140),behavior:"smooth"})),_.preventDefault(),_.stopPropagation())}function I(_){var B;_.deltaMode==0&&((B=r.value)==null||B.scrollTo({left:r.value.scrollLeft+(_.deltaY>0?eo:-140),behavior:"smooth"}),_.preventDefault(),_.stopPropagation())}function T(_){var B;_.deltaMode==0&&((B=r.value)==null||B.scrollTo({top:r.value.scrollTop+(_.deltaY>0?yl:-70),behavior:"smooth"}),_.preventDefault(),_.stopPropagation())}let J=0,Y=0,F=0,H=0;const U=Zn({onDown(_){return!i.value||!c.value?!1:(J=_.offsetX,Y=_.x-_.offsetX-c.value.offsetLeft,_.preventDefault(),u.value=!0,!0)},onMove(_,B,d){r.value&&i.value&&(we(d.x-J-Y),d.preventDefault(),d.stopPropagation())},onUp(){u.value=!1}}),Z=Zn({onDown(_){return!a.value||!p.value?!1:(F=_.offsetY,H=_.y-_.offsetY-p.value.offsetTop,_.preventDefault(),u.value=!0,!0)},onMove(_,B,d){r.value&&a.value&&(ke(d.y-F-H),d.preventDefault(),d.stopPropagation())},onUp(){u.value=!1}});function G(_){r.value&&(r.value.scrollLeft=_/100*(r.value.scrollWidth-r.value.offsetWidth))}function ie(_){r.value&&(r.value.scrollLeft=_/100*(r.value.scrollHeight-r.value.offsetHeight))}function we(_){r.value&&(r.value.scrollLeft=_/(r.value.offsetWidth-S.sizeRaw)*(r.value.scrollWidth-r.value.offsetWidth))}function ke(_){r.value&&(r.value.scrollTop=_/(r.value.offsetHeight-A.sizeRaw)*(r.value.scrollHeight-r.value.offsetHeight))}function te(_){o.scrollBarBackgroundClickable&&we(_.offsetX-S.sizeRaw/2)}function Ie(_){o.scrollBarBackgroundClickable&&ke(_.offsetY-A.sizeRaw/2)}const{startResizeChecker:Me,stopResizeChecker:L}=vl(r,()=>C(),()=>C());return be(()=>{ve(()=>{setTimeout(()=>C(!0),200),C(!0),Me(),k=new MutationObserver(()=>C()),k.observe(r.value,h)})}),Mt(()=>{L(),k&&(k.disconnect(),k=null)}),t({refreshScrollState(){C(!0)},getScrollContainer(){return r.value},scrollTo(_,B){var d;(d=r.value)==null||d.scrollTo(_,B)},scrollToTop(){var _;(_=r.value)==null||_.scrollTo(0,0)},scrollToBottom(){var _;(_=r.value)==null||_.scrollTo(r.value.scrollWidth,r.value.scrollHeight)}}),(_,B)=>(R(),P("div",{ref_key:"scrollrect",ref:l,class:me(["vue-scroll-rect",e.scrollBarAlwaysShow?"always-show-scrollbar":"",e.scrollBarBackgroundClickable?"background-clickable":"",u.value?"dragging":""]),style:Ke({width:e.width?`${e.width}px`:void 0,height:e.height?`${e.height}px`:void 0}),onWheel:x},[E("div",{ref_key:"container",ref:r,class:me(["scroll-content",e.scroll,e.containerClass]),style:Ke({maxWidth:e.maxWidth?`${e.maxWidth}px`:void 0,maxHeight:e.maxHeight?`${e.maxHeight}px`:void 0,...e.containerStyle}),onScroll:v},[ue(_.$slots,"default")],38),S.show?ue(_.$slots,"scrollBarX",{key:0,scrollBarValue:S,onScroll:G},()=>[E("div",{ref_key:"scrollBarRefX",ref:i,class:"scrollbar horizontal",onClick:te,onWheel:I},[E("div",{class:"thumb",ref_key:"scrollBarThumbRefX",ref:c,style:Ke({left:`${S.pos}%`,width:`${S.size}%`}),onMousedown:B[0]||(B[0]=(...d)=>w(U)&&w(U)(...d)),onWheel:I},null,36)],544)]):q("",!0),A.show?ue(_.$slots,"scrollBarY",{key:1,scrollBarValue:A,onScroll:ie},()=>[A.show?(R(),P("div",{key:0,ref_key:"scrollBarRefY",ref:a,class:"scrollbar vertical",onClick:Ie,onWheel:T},[E("div",{class:"thumb",ref_key:"scrollBarThumbRefY",ref:p,style:Ke({top:`${A.pos}%`,height:`${A.size}%`}),onMousedown:B[1]||(B[1]=(...d)=>w(Z)&&w(Z)(...d)),onWheel:T},null,36)],544)):q("",!0)]):q("",!0)],38))}}),wn=(e,t)=>{const n=e.__vccOpts||e;for(const[o,s]of t)n[o]=s;return n},kl={},bl={class:"mx-checked-mark","aria-hidden":"true",viewBox:"0 0 1024 1024"},Cl=E("path",{d:"M129.3,428.6L52,512l345,372.5l575-620.8l-69.5-75L400.4,718.2L129.3,428.6z"},null,-1),xl=[Cl];function Sl(e,t){return R(),P("svg",bl,xl)}const _l=wn(kl,[["render",Sl]]),El={},Rl={class:"mx-right-arrow","aria-hidden":"true",viewBox:"0 0 1024 1024"},Al=E("path",{d:"M307.018 49.445c11.517 0 23.032 4.394 31.819 13.18L756.404 480.18c8.439 8.438 13.181 19.885 13.181 31.82s-4.741 23.38-13.181 31.82L338.838 961.376c-17.574 17.573-46.065 17.573-63.64-0.001-17.573-17.573-17.573-46.065 0.001-63.64L660.944 512 275.198 126.265c-17.574-17.573-17.574-46.066-0.001-63.64C283.985 53.839 295.501 49.445 307.018 49.445z"},null,-1),Il=[Al];function $l(e,t){return R(),P("svg",Rl,Il)}const Ml=wn(El,[["render",$l]]),Pl={class:"mx-item-row"},Ol=["xlink:href"],Nl={key:1,class:"label"},Tl={class:"mx-item-row"},Ll={class:"mx-shortcut"},kn=X({__name:"ContextMenuItem",props:{disabled:{type:Boolean,default:!1},hidden:{type:Boolean,default:!1},customRender:{type:Function,default:null},customClass:{type:String,default:""},clickHandler:{type:Function,default:null},label:{type:[String,Object,Function],default:""},icon:{type:[String,Object,Function],default:""},iconFontClass:{type:String,default:"iconfont"},checked:{type:Boolean,default:!1},shortcut:{type:String,default:""},svgIcon:{type:String,default:""},svgProps:{type:Object,default:null},preserveIconWidth:{type:Boolean,default:!0},showRightArrow:{type:Boolean,default:!1},hasChildren:{type:Boolean,default:!1},clickClose:{type:Boolean,default:!0},clickableWhenHasChildren:{type:Boolean,default:!1},rawMenuItem:{type:Object,default:void 0}},emits:["click","subMenuOpen","subMenuClose"],setup(e,{expose:t,emit:n}){const o=e,s=n,{clickHandler:r,clickClose:l,clickableWhenHasChildren:i,disabled:a,hidden:c,label:p,icon:u,iconFontClass:m,showRightArrow:f,shortcut:S,hasChildren:A}=je(o),b=D(!1),g=D(!1),$=D(),y=re("globalOptions"),k=re("globalHasSlot"),h=re("globalRenderSlot"),v=re("globalCloseMenu"),C=re("menuContext"),x=K(()=>typeof p.value=="string"?p.value:typeof p.value=="function"?fl(p.value.toString()):"MenuItem[unknow]");ge("MenuItemName",x);const I={getSubMenuInstance:()=>{},showSubMenu:()=>b.value?(C.markActiveMenuItem(I,!0),!0):A.value?(J(),!0):!1,hideSubMenu:()=>{C.closeOtherSubMenu()},isDisabledOrHidden:()=>a.value||c.value,getElement:()=>$.value,focus:()=>g.value=!0,blur:()=>g.value=!1,click:T};ge("menuItemInstance",I),be(()=>{C.isMenuItemDataCollectedFlag()?ve(()=>{let H=0;const U=C.getElement();if(U){let Z=0;for(let G=0;G<U.children.length;G++){const ie=U.children[G];if(ie.getAttribute("data-type")==="ContextMenuItem"){if(ie===$.value){H=Z;break}Z++}}}C.addChildMenuItem(I,H)}):C.addChildMenuItem(I)}),Mt(()=>{C.removeChildMenuItem(I)});function T(H){if(!a.value){if(H){const U=H.target;if(U.classList.contains("mx-context-no-clickable")||y.value.ignoreClickClassName&&U.classList.contains(y.value.ignoreClickClassName))return;if(y.value.clickCloseClassName&&U.classList.contains(y.value.clickCloseClassName)){H.stopPropagation(),v(o.rawMenuItem);return}}A.value?i.value?(typeof r.value=="function"&&r.value(H),s("click",H)):b.value||J():(typeof r.value=="function"&&r.value(H),s("click",H),l.value&&v(o.rawMenuItem))}}function J(H){g.value=!1,C.checkCloseOtherSubMenuTimeOut()||C.closeOtherSubMenu(),a.value||(C.markActiveMenuItem(I),A.value&&(H||C.markThisOpenedByKeyBoard(),C.addOpenedSubMenu(Y),b.value=!0,ve(()=>s("subMenuOpen",I))))}function Y(){g.value=!1,b.value=!1,s("subMenuClose",I)}function F(){return{disabled:a.value,label:p.value,icon:u.value,iconFontClass:m.value,showRightArrow:f.value,clickClose:l.value,clickableWhenHasChildren:i.value,shortcut:S.value,theme:y.value.theme,isOpen:b,hasChildren:A,onClick:T,onMouseEnter:J,closeMenu:v}}return t(I),(H,U)=>w(c)?q("",!0):(R(),P("div",{key:0,class:"mx-context-menu-item-wrapper",ref_key:"menuItemRef",ref:$,"data-type":"ContextMenuItem"},[w(k)("itemRender")?(R(),ee(w(_e),{key:0,vnode:()=>w(h)("itemRender",F())},null,8,["vnode"])):e.customRender?(R(),ee(w(_e),{key:1,vnode:e.customRender,data:F()},null,8,["vnode","data"])):(R(),P("div",{key:2,class:me(["mx-context-menu-item",w(a)?"disabled":"",g.value?"keyboard-focus":"",e.customClass?" "+e.customClass:"",b.value?"open":""]),onClick:T,onMouseenter:J},[ue(H.$slots,"default",{},()=>[E("div",Pl,[E("div",{class:me(["mx-icon-placeholder",e.preserveIconWidth?"preserve-width":""])},[ue(H.$slots,"icon",{},()=>[w(k)("itemIconRender")?(R(),ee(w(_e),{key:0,vnode:()=>w(h)("itemIconRender",F())},null,8,["vnode"])):typeof e.svgIcon=="string"&&e.svgIcon?(R(),P("svg",Qt({key:1,class:"icon svg"},e.svgProps),[E("use",{"xlink:href":e.svgIcon},null,8,Ol)],16)):typeof w(u)!="string"?(R(),ee(w(_e),{key:2,vnode:w(u),data:w(u)},null,8,["vnode","data"])):typeof w(u)=="string"&&w(u)!==""?(R(),P("i",{key:3,class:me(w(u)+" icon "+w(m)+" "+w(y).iconFontClass)},null,2)):q("",!0)]),e.checked?ue(H.$slots,"check",{key:0},()=>[w(k)("itemCheckRender")?(R(),ee(w(_e),{key:0,vnode:()=>w(h)("itemCheckRender",F())},null,8,["vnode"])):q("",!0),z(_l)]):q("",!0)],2),ue(H.$slots,"label",{},()=>[w(k)("itemLabelRender")?(R(),ee(w(_e),{key:0,vnode:()=>w(h)("itemLabelRender",F())},null,8,["vnode"])):typeof w(p)=="string"?(R(),P("span",Nl,ne(w(p)),1)):(R(),ee(w(_e),{key:2,vnode:w(p),data:w(p)},null,8,["vnode","data"]))])]),E("div",Tl,[w(S)||H.$slots.shortcut?ue(H.$slots,"shortcut",{key:0},()=>[w(k)("itemShortcutRender")?(R(),ee(w(_e),{key:0,vnode:()=>w(h)("itemShortcutRender",F())},null,8,["vnode"])):q("",!0),E("span",Ll,ne(w(S)),1)]):q("",!0),w(f)?ue(H.$slots,"rightArrow",{key:1},()=>[w(k)("itemRightArrowRender")?(R(),ee(w(_e),{key:0,vnode:()=>w(h)("itemRightArrowRender",F())},null,8,["vnode"])):q("",!0),z(Ml)]):q("",!0)])])],34)),ue(H.$slots,"submenu",{context:I,show:b.value})],512))}}),Dl=X({name:"ContextMenuSperator",components:{VNodeRender:_e},setup(){const e=re("globalHasSlot"),t=re("globalRenderSlot");return{globalHasSlot:e,globalRenderSlot:t}}}),Bl={key:1,class:"mx-context-menu-item-sperator mx-context-no-clickable"};function Fl(e,t,n,o,s,r){const l=po("VNodeRender");return e.globalHasSlot("separatorRender")?(R(),ee(l,{key:0,vnode:()=>e.globalRenderSlot("separatorRender",{})},null,8,["vnode"])):(R(),P("div",Bl))}const gt=wn(Dl,[["render",Fl]]),bn=X({__name:"ContextSubMenu",props:{items:{type:Object,default:null},show:{type:Boolean,default:!1},maxHeight:{type:Number,default:0},maxWidth:{type:[String,Number],default:0},minWidth:{type:[String,Number],default:0},adjustPosition:{type:Boolean,default:!0},direction:{type:String,default:"br"},parentMenuItemContext:{type:Object,default:null}},emits:["closeAnimFinished"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=D(!1),l=re("globalGetMenuHostId",""),i=re("menuContext"),a=re("globalOptions");re("globalHasSlot"),re("globalRenderSlot");const c=D("UnknowOrRoot"),p=re("MenuItemName",c),{zIndex:u,getParentWidth:m,getParentHeight:f,getZoom:S}=i,{adjustPosition:A}=je(o),b=D(),g=D(),$=D(),y=[],k=re("globalSetCurrentSubMenu"),h=[];let v=null,C=0;function x(){v&&v.blur()}function I(L,_){if(L){for(let B=_!==void 0?_:0;B<h.length;B++)if(!h[B].isDisabledOrHidden()){T(B);break}}else for(let B=_!==void 0?_:h.length-1;B>=0;B--)if(!h[B].isDisabledOrHidden()){T(B);break}}function T(L){if(v&&x(),L!==void 0&&(v=h[Math.max(0,Math.min(L,h.length-1))]),!v)return;v.focus();const _=v.getElement();_&&_.scrollIntoView({behavior:"auto",block:"nearest",inline:"nearest"})}function J(){k(Y)}const Y={el:$,name:p,isTopLevel:()=>i.getParentContext()===null,closeSelfAndActiveParent:()=>{const L=U.getParentContext();if(L){L.closeOtherSubMenu();const _=L.getSubMenuInstanceContext();if(_)return _.focusCurrentItem(),!0}return!1},closeCurrentSubMenu:()=>{var L;return(L=U.getParentContext())==null?void 0:L.closeOtherSubMenu()},moveCurrentItemFirst:()=>I(!0),moveCurrentItemLast:()=>I(!1),moveCurrentItemDown:()=>I(!0,v?h.indexOf(v)+1:0),moveCurrentItemUp:()=>I(!1,v?h.indexOf(v)-1:0),focusCurrentItem:()=>T(),openCurrentItemSubMenu:()=>v?v?.showSubMenu():!1,triggerCurrentItemClick:L=>v?.click(L)};let F=!1,H=!1;const U={zIndex:u+1,container:i.container,adjustPadding:a.value.adjustPadding||Ee.defaultAdjustPadding,getParentWidth:()=>{var L;return((L=$.value)==null?void 0:L.offsetWidth)||0},getParentHeight:()=>{var L;return((L=$.value)==null?void 0:L.offsetHeight)||0},getPositon:()=>[te.value.x,te.value.y],getZoom:()=>a.value.zoom||Ee.defaultZoom,addOpenedSubMenu(L){y.push(L)},closeOtherSubMenu(){y.forEach(L=>L()),y.splice(0,y.length),k(Y)},checkCloseOtherSubMenuTimeOut(){return C?(clearTimeout(C),C=0,!0):!1},closeOtherSubMenuWithTimeOut(){C=setTimeout(()=>{C=0,this.closeOtherSubMenu()},200)},addChildMenuItem:(L,_)=>{_===void 0?h.push(L):h.splice(_,0,L)},removeChildMenuItem:L=>{h.splice(h.indexOf(L),1),L.getSubMenuInstance=()=>{}},markActiveMenuItem:(L,_=!1)=>{x(),v=L,_&&T()},markThisOpenedByKeyBoard:()=>{F=!0},isOpenedByKeyBoardFlag:()=>F?(F=!1,!0):!1,isMenuItemDataCollectedFlag:()=>H,getElement:()=>$.value||null,getParentContext:()=>i,getSubMenuInstanceContext:()=>Y};ge("menuContext",U);const Z={getChildItem:L=>h[L],getMenuDimensions:()=>g.value?{width:g.value.offsetWidth,height:g.value.offsetHeight}:{width:0,height:0},getSubmenuRoot:()=>g.value,getMenu:()=>$.value,getScrollValue:()=>{var L,_;return((_=(L=b.value)==null?void 0:L.getScrollContainer())==null?void 0:_.scrollTop)||0},setScrollValue:L=>{var _;return(_=b.value)==null?void 0:_.scrollTo(0,L)},getScrollHeight:()=>ie.value,adjustPosition:()=>{Ie()},getMaxHeight:()=>we.value,getPosition:()=>te.value,setPosition:(L,_)=>{te.value.x=L,te.value.y=_}},G=re("menuItemInstance",void 0);G&&(G.getSubMenuInstance=()=>Z);const ie=D(0),we=D(0),ke=D(!1),te=D({x:0,y:0});function Ie(){ve(()=>{var L;const _=$.value,B=g.value;if(_&&B&&b.value){const{container:d}=i,O=m?.()??0,M=f?.()??0,N=getComputedStyle(B),j=parseFloat(N.paddingLeft),oe=parseFloat(N.paddingTop),V=M>0?oe:0,W=document.documentElement.scrollHeight/S(),ae=document.documentElement.scrollWidth/S(),Fe=Math.min(ae,d.offsetWidth),pe=Math.min(W,d.offsetHeight);let Wt=ht(_,d),zt=mt(_,d);if(o.direction.includes("l")?te.value.x-=_.offsetWidth+j:o.direction.includes("r")?te.value.x+=O+j:(te.value.x+=O/2,te.value.x-=(_.offsetWidth+j)/2),o.direction.includes("t")){const rt=(L=o.parentMenuItemContext)==null?void 0:L.getElement();rt&&(te.value.y+=rt.offsetHeight),te.value.y-=(_.offsetHeight+oe)/S()}else o.direction.includes("b")?te.value.y-=oe/S():te.value.y-=_.offsetHeight/2/S();ve(()=>{var rt,xn;Wt=ht(_,d),zt=mt(_,d);const Sn=((xn=(rt=b.value)==null?void 0:rt.getScrollContainer())==null?void 0:xn.scrollHeight)||0,es=o.maxHeight;ie.value=o.maxHeight?Math.min(Sn,o.maxHeight):Sn;const ts=Wt+_.offsetWidth-Fe,_n=zt+ie.value+V*2-pe;if(ke.value=_n>0,A.value&&ts>0){const lt=O+_.offsetWidth-j,at=Wt;lt>at?te.value.x-=at:te.value.x-=lt}if(ke.value){if(A.value){const lt=_n,at=zt;lt>at?te.value.y-=at-V:te.value.y-=lt-V}we.value=pe-(te.value.y+oe)}else we.value=es||0})}})}function Me(){var L;const _=(L=o.parentMenuItemContext)==null?void 0:L.getElement();if(_){const B=ht(_,i.container),d=mt(_,i.container);te.value.x=B,te.value.y=d}else{const[B,d]=i.getPositon();te.value.x=B,te.value.y=d}ve(()=>{var B;k(Y),(B=$.value)==null||B.focus({preventScroll:!0}),i.isOpenedByKeyBoardFlag()&&ve(()=>I(!0)),H=!0}),Ie()}return Be(()=>o.show,L=>{L&&Me()}),be(()=>{r.value=!0,o.show?Me():Ie()}),Mt(()=>{r.value=!1,G&&(G.getSubMenuInstance=()=>{})}),t(Z),(L,_)=>{const B=po("ContextSubMenu",!0);return r.value?(R(),ee(pn,{key:0,to:`#${w(l)}`},[z(fs,Qt({appear:""},w(a).menuTransitionProps||{duration:10},{onAfterLeave:_[0]||(_[0]=d=>s("closeAnimFinished"))}),{default:Re(()=>[e.show?(R(),P("div",Qt({key:0,ref_key:"submenuRoot",ref:g},L.$attrs,{class:["mx-context-menu",w(a).customClass?w(a).customClass:"",w(a).theme??""],style:{maxWidth:e.maxWidth?w(Jn)(e.maxWidth):`${w(Ee).defaultMaxWidth}px`,minWidth:e.minWidth?w(Jn)(e.minWidth):`${w(Ee).defaultMinWidth}px`,zIndex:w(u),left:`${te.value.x}px`,top:`${te.value.y}px`},"data-type":"ContextSubMenu",onClick:J}),[z(w(wl),{ref_key:"scrollRectRef",ref:b,scroll:"vertical",maxHeight:we.value,containerClass:"mx-context-menu-scroll"},{default:Re(()=>[E("div",{class:me(["mx-context-menu-items"]),ref_key:"menu",ref:$},[ue(L.$slots,"default",{},()=>[(R(!0),P(fe,null,ot(e.items,(d,O)=>(R(),P(fe,{key:O},[d.hidden!==!0&&d.divided==="up"?(R(),ee(gt,{key:0})):q("",!0),d.hidden!==!0&&d.divided==="self"?(R(),ee(gt,{key:1})):(R(),ee(kn,{key:2,clickHandler:d.onClick?M=>d.onClick(M):void 0,disabled:typeof d.disabled=="object"?d.disabled.value:d.disabled,hidden:typeof d.hidden=="object"?d.hidden.value:d.hidden,icon:d.icon,iconFontClass:d.iconFontClass,svgIcon:d.svgIcon,svgProps:d.svgProps,label:d.label,customRender:d.customRender,customClass:d.customClass,checked:typeof d.checked=="object"?d.checked.value:d.checked,shortcut:d.shortcut,clickClose:d.clickClose,clickableWhenHasChildren:d.clickableWhenHasChildren,preserveIconWidth:d.preserveIconWidth!==void 0?d.preserveIconWidth:w(a).preserveIconWidth,showRightArrow:d.children&&d.children.length>0,hasChildren:d.children&&d.children.length>0,rawMenuItem:d,onSubMenuOpen:M=>{var N;return(N=d.onSubMenuOpen)==null?void 0:N.call(d,M)},onSubMenuClose:M=>{var N;return(N=d.onSubMenuClose)==null?void 0:N.call(d,M)}},fo({_:2},[d.children&&d.children.length>0?{name:"submenu",fn:Re(({context:M,show:N})=>[z(B,{show:N,parentMenuItemContext:M,items:d.children,maxWidth:d.maxWidth,minWidth:d.minWidth,maxHeight:d.maxHeight,adjustPosition:d.adjustSubMenuPosition!==void 0?d.adjustSubMenuPosition:w(a).adjustPosition,direction:d.direction!==void 0?d.direction:w(a).direction},null,8,["show","parentMenuItemContext","items","maxWidth","minWidth","maxHeight","adjustPosition","direction"])]),key:"0"}:void 0]),1032,["clickHandler","disabled","hidden","icon","iconFontClass","svgIcon","svgProps","label","customRender","customClass","checked","shortcut","clickClose","clickableWhenHasChildren","preserveIconWidth","showRightArrow","hasChildren","rawMenuItem","onSubMenuOpen","onSubMenuClose"])),d.hidden!==!0&&(d.divided==="down"||d.divided===!0)?(R(),ee(gt,{key:3})):q("",!0)],64))),128))])],512)]),_:3},8,["maxHeight"])],16)):q("",!0)]),_:3},16)],8,["to"])):q("",!0)}}}),Go=X({__name:"ContextSubMenuWrapper",props:{options:{type:Object,default:null},show:{type:null,default:null},container:{type:Object,default:null},isFullScreenContainer:{type:Boolean,default:!0}},emits:["close","closeAnimFinished"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=uo(),l=D(),{options:i,show:a,container:c}=je(o);be(()=>{a.value&&m()}),Mt(()=>{b()}),Be(a,v=>{v?m():(Kn(p),b())});const p={closeMenu:f,isClosed:S,getMenuRef:()=>l.value,getMenuDimensions:()=>{var v;return((v=l.value)==null?void 0:v.getMenuDimensions())??{width:0,height:0}}};let u=!1;function m(){A(),il(p)}function f(v){u=!0,s("close",v),i.value.menuTransitionProps||s("closeAnimFinished"),Kn(p)}function S(){return u}function A(){setTimeout(()=>{document.addEventListener("click",k,!0),document.addEventListener("contextmenu",k,!0),document.addEventListener("scroll",y,!0),!o.isFullScreenContainer&&c.value&&c.value.addEventListener("scroll",y,!0),i.value.keyboardControl!==!1&&document.addEventListener("keydown",$,!0)},50)}function b(){document.removeEventListener("contextmenu",k,!0),document.removeEventListener("click",k,!0),document.removeEventListener("scroll",y,!0),!o.isFullScreenContainer&&c.value&&c.value.removeEventListener("scroll",y,!0),i.value.keyboardControl!==!1&&document.removeEventListener("keydown",$,!0)}const g=D();ge("globalSetCurrentSubMenu",v=>g.value=v),ge("globalGetMenuHostId",c.value.id);function $(v){var C,x,I,T,J,Y,F,H,U,Z,G,ie,we;let ke=!0;switch(v.key){case"Escape":{((C=g.value)==null?void 0:C.isTopLevel())===!1?(x=g.value)==null||x.closeCurrentSubMenu():f();break}case"ArrowDown":(I=g.value)==null||I.moveCurrentItemDown();break;case"ArrowUp":(T=g.value)==null||T.moveCurrentItemUp();break;case"Home":(J=g.value)==null||J.moveCurrentItemFirst();break;case"End":(Y=g.value)==null||Y.moveCurrentItemLast();break;case"ArrowLeft":{(F=g.value)!=null&&F.closeSelfAndActiveParent()||(U=(H=i.value).onKeyFocusMoveLeft)==null||U.call(H);break}case"ArrowRight":(Z=g.value)!=null&&Z.openCurrentItemSubMenu()||(ie=(G=i.value).onKeyFocusMoveRight)==null||ie.call(G);break;case"Enter":(we=g.value)==null||we.triggerCurrentItemClick(v);break;default:ke=!1;break}ke&&g.value&&(v.stopPropagation(),v.preventDefault())}function y(v){i.value.closeWhenScroll!==!1&&h(v.target,null)}function k(v){h(v.target,v)}function h(v,C){for(var x,I;v;){if(v.classList&&v.classList.contains("mx-context-menu"))return;v=v.parentNode}C?i.value.clickCloseOnOutside!==!1?(b(),f()):(I=(x=i.value).onClickOnOutside)==null||I.call(x,C):(b(),f())}return ge("globalOptions",i),ge("globalCloseMenu",f),ge("globalIsFullScreenContainer",o.isFullScreenContainer),ge("globalHasSlot",v=>r[v]!==void 0),ge("globalRenderSlot",(v,C)=>ue(r,v,{...C},()=>[et("span","Render slot failed")],!1)),ge("menuContext",{zIndex:i.value.zIndex||Ee.defaultZindex,container:c.value,adjustPadding:{x:0,y:0},getZoom:()=>i.value.zoom||Ee.defaultZoom,getParentWidth:()=>0,getParentHeight:()=>0,getPositon:()=>[i.value.x,i.value.y],closeOtherSubMenuWithTimeOut:()=>{},checkCloseOtherSubMenuTimeOut:()=>!1,addOpenedSubMenu:()=>{},closeOtherSubMenu:()=>{},getParentContext:()=>null,getSubMenuInstanceContext:()=>null,getElement:()=>null,addChildMenuItem:()=>{},removeChildMenuItem:()=>{},markActiveMenuItem:()=>{},markThisOpenedByKeyBoard:()=>{},isOpenedByKeyBoardFlag:()=>!1,isMenuItemDataCollectedFlag:()=>!1}),t(p),(v,C)=>(R(),ee(bn,{ref_key:"submenuInstance",ref:l,show:w(a),items:w(i).items,adjustPosition:w(i).adjustPosition,maxWidth:w(i).maxWidth||w(Ee).defaultMaxWidth,minWidth:w(i).minWidth||w(Ee).defaultMinWidth,maxHeight:w(i).maxHeight,direction:w(i).direction||w(Ee).defaultDirection,onCloseAnimFinished:C[0]||(C[0]=x=>s("closeAnimFinished"))},{default:Re(()=>[ue(v.$slots,"default")]),_:3},8,["show","items","adjustPosition","maxWidth","minWidth","maxHeight","direction"]))}}),Hl=X({__name:"ContextMenu",props:{options:{type:Object,default:null},show:{type:Boolean,default:!1}},emits:["update:show","close"],setup(e,{expose:t,emit:n}){const o=n,s=e,{options:r,show:l}=je(s),{isNew:i,container:a,eleId:c}=qo(r.value),p=D(null),u=uo();function m(f){var S,A;o("update:show",!1),o("close"),(A=(S=r.value).onClose)==null||A.call(S,f)}return t({closeMenu:()=>o("update:show",!1),isClosed:()=>!l.value,getMenuRef:()=>{var f;return(f=p.value)==null?void 0:f.getMenuRef()},getMenuDimensions:()=>{var f;return((f=p.value)==null?void 0:f.getMenuDimensions())??{width:0,height:0}}}),(f,S)=>(R(),ee(pn,{to:`#${w(c)}`},[z(Go,{ref_key:"menuRef",ref:p,options:w(r),show:w(l),container:w(a),isFullScreenContainer:!w(i),onClose:m},fo({_:2},[ot(w(u),(A,b)=>({name:b,fn:Re(g=>[ue(f.$slots,b,us(ds(g)))])}))]),1032,["options","show","container","isFullScreenContainer"])],8,["to"]))}}),Wl=X({name:"ContextMenuGroup",props:{disabled:{type:Boolean,default:!1},hidden:{type:Boolean,default:!1},clickHandler:{type:Function,default:null},label:{type:String,default:""},icon:{type:String,default:""},iconFontClass:{type:String,default:"iconfont"},checked:{type:Boolean,default:!1},shortcut:{type:String,default:""},svgIcon:{type:String,default:""},svgProps:{type:Object,default:null},preserveIconWidth:{type:Boolean,default:!0},showRightArrow:{type:Boolean,default:!1},clickClose:{type:Boolean,default:!0},adjustSubMenuPosition:{type:Boolean,default:void 0},maxHeight:{type:[String,Number],default:0},maxWidth:{type:[String,Number],default:0},minWidth:{type:[String,Number],default:0}},setup(e,t){const n=re("globalOptions"),{adjustSubMenuPosition:o,maxWidth:s,minWidth:r,maxHeight:l}=je(e),i=typeof o.value<"u"?o.value:n.value.adjustPosition,a=D(),c=D();return t.expose({getSubMenuRef:()=>a.value,getMenuItemRef:()=>c.value}),()=>et(kn,{...e,ref:c,showRightArrow:!0,maxWidth:void 0,minWidth:void 0,maxHeight:void 0,adjustSubMenuPosition:void 0,hasChildren:typeof t.slots.default!==void 0},t.slots.default?{submenu:p=>et(bn,{ref:a,show:p.show,maxWidth:s.value,minWidth:r.value,maxHeight:l.value,adjustPosition:i,parentMenuItemContext:p.context},{default:t.slots.default}),...pl(t.slots,"default")}:t.slots)}});function zl(e,t,n,o){const s=D(!0),r=et(Go,{options:e,show:s,container:t,isFullScreenContainer:!n,onCloseAnimFinished:()=>{En(null,t)},onClose:l=>{var i;(i=e.onClose)==null||i.call(e,l),s.value=!1}},o);return En(r,t),r.component}function to(e,t){const n=qo(e);return zl(e,n.container,n.isNew,t).exposed}const Ft={install(e){e.config.globalProperties.$contextmenu=to,e.component("ContextMenu",Hl),e.component("ContextMenuItem",kn),e.component("ContextMenuGroup",Wl),e.component("ContextMenuSperator",gt),e.component("ContextMenuSeparator",gt),e.component("ContextSubMenu",bn)},showContextMenu(e,t){return to(e,t)},isAnyContextMenuOpen(){return al()},closeContextMenu:Vo,transformMenuPosition:cl},Ul={key:0,class:"empty-container"},jl={key:0},Vl={key:1},ql={key:2},Gl={key:3},Kl={key:4},Jl={key:5},Yl=X({__name:"EmptyFolder",props:{path:{},documents:{}},setup(e){const t=ps,n=se(),o=e;return(s,r)=>!o.path||e.documents.length===0?(R(),P("div",Ul,[(R(),ee(fn(w(t)),{class:me(["cog",{stopped:w(n).dialog==="accessdenied"||w(n).authInProgress}])},null,8,["class"])),w(n).dialog==="accessdenied"?(R(),P("p",jl,"Access Denied")):w(n).connected?w(n).document.length===0?(R(),P("p",ql,"Waiting for File List")):w(n).query?(R(),P("p",Gl,"No matches!")):w(jo)(o.path)?(R(),P("p",Jl,"Empty folder")):(R(),P("p",Kl,"Folder not found")):(R(),P("p",Vl,"No Connection"))])):q("",!0)}}),Xl=ye(Yl,[["__scopeId","data-v-0494c508"]]),Zl=["checked"],Ql=X({__name:"SelectBox",props:{doc:{}},setup(e){const t=se();return(n,o)=>(R(),P("input",{type:"checkbox",tabindex:"-1",checked:w(t).selected.has(e.doc.key),onClick:o[0]||(o[0]=de(()=>{},["stop"])),onChange:o[1]||(o[1]=s=>{s.target.checked?w(t).selected.add(e.doc.key):w(t).selected.delete(e.doc.key)})},null,40,Zl))}}),un=X({__name:"FileRenameInput",props:{doc:{},rename:{type:Function},exit:{type:Function}},setup(e){const t=D(null),n=D("");be(()=>{n.value=o.doc.name;const r=n.value.lastIndexOf(".");ve(()=>{t.value.focus(),t.value.setSelectionRange(0,r>0?r:n.value.length)})});const o=e,s=()=>{o.exit(),!(o.doc.key!=="new"&&(n.value===o.doc.name||n.value.length===0))&&o.rename(o.doc,n.value)};return(r,l)=>yt((R(),P("input",{ref_key:"input",ref:t,id:"FileRenameInput",type:"text",autocorrect:"off","onUpdate:modelValue":l[0]||(l[0]=i=>n.value=i),onBlur:l[1]||(l[1]=(...i)=>e.exit&&e.exit(...i)),onKeyup:[l[2]||(l[2]=Ze((...i)=>e.exit&&e.exit(...i),["esc"])),Ze(s,["enter"])]},null,544)),[[en,n.value]])}}),ea=["src"],ta=["src"],na={key:2,class:"folder icon"},oa={key:3,class:"video-container"},sa=["src","poster"],ra={class:"play-overlay"},la={key:4,class:"audio icon"},aa=["src"],ia={key:5,class:"archive icon"},ca=X({__name:"MediaPreview",props:{doc:{},quality:{}},setup(e,{expose:t}){const n=D(null),o=D(null),s=K(()=>n.value||o.value),r=K(()=>`${l.doc.previewurl}?${l.quality}&t=${l.doc.mtime}`),l=e,i=()=>{s.value&&(s.value.controls=!0,s.value.setAttribute("data-playing",""))},a=()=>{s.value&&(s.value.controls=!1,s.value.removeAttribute("data-playing"))};let c=null;const p=()=>{if(!s.value)return;s.value.load();const A=Array.from(document.querySelectorAll("video, audio"));if(A.length===0)return;let b=null;for(const g in A)if(A[g]===(c||s.value)){b=A[+g+1]??A[0]??null;break}if(b)if(b.tagName==="VIDEO"&&document.fullscreenElement===s.value){const g=s.value,$=b;if(g===$){$.play();return}c||g.addEventListener("fullscreenchange",y=>{c&&(c.currentTime=g.currentTime,c.click(),g.paused||c.play(),c=null,g.src=l.doc.url,g.poster=r.value,a())},{once:!0}),c=$,g.src=$.src,g.poster="",g.play()}else document.exitFullscreen(),b.click()};t({play(){if(!s.value)return!1;if(s.value.paused){s.value.play();for(const A of Array.from(document.querySelectorAll("video, audio")))A!==s.value&&A.pause()}else s.value.pause();return!0},media:s});const u=()=>["mkv","mp4","webm","mov","avi"].includes(l.doc.ext),m=()=>["mp3","flac","ogg","aac"].includes(l.doc.ext),f=()=>["zip","tar","gz","bz2","xz","7z","rar"].includes(l.doc.ext),S=()=>["bmp","ico","tif","tiff","heic","heif","pdf","epub","mobi"].includes(l.doc.ext)||l.doc.size>5e5&&["avif","webp","png","jpg","jpeg"].includes(l.doc.ext);return(A,b)=>S()?(R(),P("img",{key:0,src:`${e.doc.previewurl}?${e.quality}&t=${e.doc.mtime}`,alt:""},null,8,ea)):e.doc.img?(R(),P("img",{key:1,src:e.doc.url,alt:""},null,8,ta)):e.doc.dir?(R(),P("span",na)):u()?(R(),P("div",oa,[E("video",{ref_key:"vid",ref:o,src:e.doc.url,poster:r.value,preload:"none",onPlay:i,onPause:a,onEnded:p,onSeeking:b[0]||(b[0]=g=>s.value.play())},null,40,sa),E("div",ra,[z(w(ms))])])):m()?(R(),P("div",la,[E("audio",{ref_key:"aud",ref:n,src:e.doc.url,class:"icon",preload:"none",onPlay:i,onPause:a,onEnded:p,onSeeking:b[1]||(b[1]=g=>s.value.play())},null,40,aa)])):f()?(R(),P("span",ia)):(R(),P("span",{key:6,class:me(["file icon",`ext-${e.doc.ext}`])},null,2))}}),ua=ye(ca,[["__scopeId","data-v-47490c5c"]]);let Xt=!1,qe=null,Zt=!1;const da=X({__name:"CursorTooltip",props:{text:{},delay:{}},setup(e,{expose:t}){const n=e,o=D(!1),s=D(0),r=D(0);let l=null,i=0,a=0;const c=8,p=K(()=>({left:`${s.value}px`,top:`${r.value}px`})),u=()=>window.matchMedia("(pointer: fine)").matches,m=()=>{o.value=!0,Xt=!0},f=()=>{l&&clearTimeout(l),qe&&(clearTimeout(qe),qe=null);const g=Xt?0:n.delay??900;l=setTimeout(m,g)};return t({startHover:g=>{!u()&&!Zt||(s.value=g.clientX,r.value=g.clientY,i=g.clientX,a=g.clientY)},updatePosition:g=>{if((g.movementX!==0||g.movementY!==0)&&(Zt=!0),!u()&&!Zt||(s.value=g.clientX,r.value=g.clientY,o.value))return;const $=g.clientX-i,y=g.clientY-a;Math.sqrt($*$+y*y)>c&&(i=g.clientX,a=g.clientY,l&&(clearTimeout(l),l=null)),l||f()},endHover:()=>{l&&(clearTimeout(l),l=null),o.value=!1,qe&&clearTimeout(qe),qe=setTimeout(()=>{Xt=!1},400)}}),(g,$)=>(R(),ee(pn,{to:"body"},[o.value?(R(),P("div",{key:0,class:"cursor-tooltip",style:Ke(p.value)},[ue(g.$slots,"default",{},void 0,!0)],4)):q("",!0)]))}}),Ko=ye(da,[["__scopeId","data-v-c5d421fc"]]),fa=["id","href"],pa={class:"tooltip-name"},ma={class:"tooltip-details"},ha=X({__name:"GalleryFigure",props:{doc:{},editing:{}},setup(e){const t=se(),n=e,o=D(null),s=D(null),r=K(()=>n.doc.key),l=i=>{o.value.play()&&i.preventDefault(),t.cursor=n.doc.key};return(i,a)=>{const c=un,p=Ql;return R(),P("a",{id:`file-${e.doc.key}`,href:e.doc.url,tabindex:"-1",class:me({file:!e.doc.dir,folder:e.doc.dir,cursor:w(t).cursor===e.doc.key}),onContextmenu:a[3]||(a[3]=de(()=>{},["stop"])),onFocus:a[4]||(a[4]=de(u=>w(t).cursor=e.doc.key,["stop"])),onClick:l,onMouseenter:a[5]||(a[5]=(...u)=>s.value?.startHover&&s.value?.startHover(...u)),onMousemove:a[6]||(a[6]=(...u)=>s.value?.updatePosition&&s.value?.updatePosition(...u)),onMouseleave:a[7]||(a[7]=(...u)=>s.value?.endHover&&s.value?.endHover(...u))},[E("figure",null,[ue(i.$slots,"default",{},void 0,!0),z(ua,{ref_key:"m",ref:o,doc:e.doc,tabindex:"-1",quality:"sz=512",class:"figcontent"},null,8,["doc"]),a[9]||(a[9]=E("div",{class:"titlespacer"},null,-1)),E("figcaption",{onClick:a[1]||(a[1]=de(()=>{},["prevent"])),onContextmenu:a[2]||(a[2]=de(u=>i.$emit("menu",u),["prevent"]))},[e.editing?(R(),ee(c,{key:0,doc:e.doc,rename:e.editing.rename,exit:e.editing.exit},null,8,["doc","rename","exit"])):(R(),P(fe,{key:1},[z(p,{doc:e.doc,onClick:a[0]||(a[0]=u=>w(t).cursor=e.doc.key)},null,8,["doc"]),E("span",null,ne(e.doc.name),1),a[8]||(a[8]=E("div",{class:"namespacer"},null,-1))],64))],32)]),z(Ko,{ref_key:"tooltip",ref:s,text:r.value},{default:Re(()=>[E("div",pa,ne(e.doc.name),1),E("div",ma,ne(e.doc.modified)+" — "+ne(e.doc.sizedisp),1)]),_:1},8,["text"])],42,fa)}}}),ga=ye(ha,[["__scopeId","data-v-91479c1d"]]),va=X({__name:"Gallery",props:{path:{},documents:{}},setup(e,{expose:t}){const n=e,o=se(),s=mn(),r=dn(null),l=()=>{r.value=null},i=(h,v)=>{const C=h.name,x=Ue(kt,{message(I){const T=JSON.parse(I.data);"error"in T?(console.error("Rename failed",T.error.message,T.error),h.name=C):console.log("Rename succeeded",T)}});x.onopen=()=>{x.send(JSON.stringify({op:"rename",path:`${h.loc}/${C}`,to:v}))},h.name=v},a=D(),c=D(1),p=()=>{a.value&&(c.value=getComputedStyle(a.value).gridTemplateColumns.split(" ").length)},u=K(()=>c.value);t({newFolder(){const h=Math.floor(Date.now()/1e3);r.value=new Lt({loc:y.value,key:"new",name:"New Folder",dir:!0,mtime:h,size:0}),o.cursor=r.value.key},toggleSelectAll(){console.log("Select"),$.value=!$.value},toggleSortColumn(h){const v=["","name","modified","size",""][h];v&&o.toggleSort(v)},isCursor(){return o.cursor&&r.value===null},cursorRename(){r.value=n.documents.find(h=>h.key===o.cursor)??null},cursorSelect(){const h=o.cursor;h&&(o.selected.has(h)?o.selected.delete(h):o.selected.add(h),this.cursorMove(1,null))},up(h){this.cursorMove(-u.value,h)},down(h){this.cursorMove(u.value,h)},left(h){this.cursorMove(-1,h)},right(h){this.cursorMove(1,h)},cursorMove(h,v){const C=!!v?.shiftKey,x=n.documents;if(x.length===0){o.cursor="";return}const I=x.length,T=(U,Z)=>(U%Z+Z)%Z,J=(U,Z)=>T(U+Z,I+1),Y=o.cursor?x.findIndex(U=>U.key===o.cursor):I;if(v&&Y===0&&v.key==="ArrowLeft"||v&&Y===I-1&&v.key==="ArrowRight")return;let F;Y===I?F=h>0?0:I-1:(F=J(Y,h),(Math.abs(h)>=I||Math.sign(h)!==Math.sign(F-Y))&&(F=I)),o.cursor=x[F]?.key??"";const H=o.cursor?document.getElementById(`file-${o.cursor}`):"";if(C){let[U,Z]=h>0?[Y,F]:[F,Y];for(let G=U;G!==Z;G=J(G,1)){if(G===I)continue;const ie=x[G].key;o.selected.has(ie)?o.selected.delete(ie):o.selected.add(ie)}}S=H,f||(f=setTimeout(()=>{S&&S.scrollIntoView({block:"center",behavior:"smooth"}),f=null},300)),F===I&&m()}});const m=()=>{const h=document.querySelector(".breadcrumb");h&&h.focus()};let f=null,S=null;Ae(()=>{if(o.cursor&&o.cursor!==r.value?.key&&(r.value=null),r.value&&(o.cursor=r.value.key),o.cursor){const h=document.querySelector(`#file-${o.cursor}`);h&&(h.focus(),h.scrollIntoView({block:"center",behavior:"smooth"}))}}),Ae(()=>{!n.documents.length&&o.cursor&&(o.cursor="",m())});let A=null;be(()=>{const h=document.querySelector(".cursor");h&&(h.scrollIntoView({block:"center",behavior:"instant"}),h.focus()),p(),a.value&&(A=new ResizeObserver(p),A.observe(a.value))}),vt(()=>{A?.disconnect()});const b=(h,v)=>{const C=Ue(kt,{open(){C.send(JSON.stringify({op:"mkdir",path:`${h.loc}/${v}`}))},message(x){const I=JSON.parse(x.data);"error"in I?(console.error("Mkdir failed",I.error.message,I.error),r.value=null):(console.log("mkdir",I),s.push(h.urlrouter))}});h.name=v,h.key=crypto.randomUUID()},g=h=>{const v=n.documents,C=v[h].loc;return h===0?C!==y.value:C!==v[h-1].loc},$=K({get:()=>n.documents.length>0&&n.documents.every(h=>o.selected.has(h.key)),set:h=>{console.log("Setting allSelected",h);for(const v of n.documents)h?o.selected.add(v.key):o.selected.delete(v.key)}}),y=K(()=>n.path.join("/")),k=(h,v)=>{o.cursor=v.key,Ft.showContextMenu({x:h.x,y:h.y,items:[{label:"Rename",onClick:()=>{r.value=v}}]})};return(h,v)=>{const C=ga,x=yn;return n.documents.length||r.value?(R(),P("div",{key:0,class:"gallery",ref_key:"gallery",ref:a},[r.value?.key==="new"?(R(),ee(C,{doc:r.value,key:r.value.key,editing:{rename:b,exit:l}},null,8,["doc","editing"])):q("",!0),(R(!0),P(fe,null,ot(e.documents,(I,T)=>(R(),P(fe,{key:I.key},[g(T)?(R(),ee(x,{key:0,path:I.loc?I.loc.split("/"):[],class:"folder-indicator"},null,8,["path"])):q("",!0),z(C,{doc:I,editing:r.value===I?{rename:i,exit:l}:null,onMenu:J=>k(J,I),class:me({"folder-start":g(T)})},null,8,["doc","editing","onMenu","class"])],64))),128))],512)):q("",!0)}}}),ya=ye(va,[["__scopeId","data-v-9973e293"]]),wa=X({__name:"FileSize",props:{doc:{}},setup(e){const t=K(()=>{const o=n.doc.sizedisp.split(" ").slice(-1)[0];return+o?"bytes":o}),n=e;return(o,s)=>(R(),P("td",{class:me(["size right",t.value])},ne(e.doc.sizedisp),3))}}),ka=ye(wa,[["__scopeId","data-v-444c7802"]]),ba={class:"modified right"},Ca=["datetime"],xa=X({__name:"FileModified",props:{doc:{},now:{}},setup(e){const t=e,n=D(null),o=K(()=>(t.now,To(t.doc.mtime))),s=K(()=>new Date(1e3*t.doc.mtime).toISOString().replace(".000Z","Z")),r=K(()=>s.value.replace("T"," ").replace("Z"," UTC"));return(l,i)=>(R(),P("td",ba,[E("time",{datetime:s.value,onMouseenter:i[0]||(i[0]=(...a)=>n.value?.startHover&&n.value?.startHover(...a)),onMousemove:i[1]||(i[1]=(...a)=>n.value?.updatePosition&&n.value?.updatePosition(...a)),onMouseleave:i[2]||(i[2]=(...a)=>n.value?.endHover&&n.value?.endHover(...a))},ne(o.value),41,Ca),z(Ko,{ref_key:"tooltip",ref:n,text:r.value},{default:Re(()=>[We(ne(r.value),1)]),_:1},8,["text"])]))}}),Sa={key:0},_a={class:"selection"},Ea=["indeterminate"],Ra={key:0,class:"folder"},Aa={class:"name"},Ia={key:0,class:"folder-change"},$a={colspan:"5"},Ma=["id","onClick","onContextmenu"],Pa=["onClick"],Oa=["checked","onChange"],Na={class:"name"},Ta=["href","onFocus"],La=["onClick"],Da={class:"menu"},Ba=["onClick"],Fa={key:1,class:"summary"},Ha={colspan:"3",class:"right"},Wa={class:"size right"},za=X({__name:"FileExplorer",props:{path:{},documents:{}},setup(e,{expose:t}){const n=e,o=se(),s=mn(),r=dn(null),l=(y,k)=>{const h=y.name,v=Ue(kt,{message(C){const x=JSON.parse(C.data);"error"in x?(console.error("Rename failed",x.error.message,x.error),y.name=h):console.log("Rename succeeded",x)}});v.onopen=()=>{v.send(JSON.stringify({op:"rename",path:`${y.loc}/${h}`,to:k}))},y.name=k};t({newFolder(){console.log("New folder");const y=Math.floor(Date.now()/1e3);r.value=new Lt({loc:g.value,key:"new",name:"New Folder",dir:!0,mtime:y,size:0}),o.cursor=r.value.key},toggleSelectAll(){console.log("Select"),b.value=!b.value},isCursor(){return o.cursor&&r.value===null},cursorRename(){r.value=n.documents.find(y=>y.key===o.cursor)??null},cursorSelect(){const y=o.cursor;y&&(o.selected.has(y)?o.selected.delete(y):o.selected.add(y),this.cursorMove(1,null))},up(y){this.cursorMove(-1,y)},down(y){this.cursorMove(1,y)},left(y){s.back()},right(y){const k=document.querySelector(`#file-${o.cursor} a`);k&&k.click()},cursorMove(y,k){const h=!!k?.shiftKey,v=n.documents;if(v.length===0){o.cursor="";return}const C=v.length,x=(F,H)=>(F%H+H)%H,I=(F,H)=>x(F+H,C+1),T=o.cursor?v.findIndex(F=>F.key===o.cursor):v.length,J=I(T,y);o.cursor=v[J]?.key??"";const Y=o.cursor?document.getElementById(`file-${o.cursor}`):"";if(h){let[F,H]=y>0?[T,J]:[J,T];for(let U=F;U!==H;U=I(U,1)){if(U===C)continue;const Z=v[U].key;o.selected.has(Z)?o.selected.delete(Z):o.selected.add(Z)}}c=Y,a||(a=setTimeout(()=>{c&&c.scrollIntoView({block:"center",behavior:"smooth"}),a=null},300)),J===C&&i()}});const i=()=>{const y=document.querySelector(".breadcrumb");y&&y.focus()};let a=null,c=null;Ae(()=>{if(o.cursor&&o.cursor!==r.value?.key&&(r.value=null),r.value&&(o.cursor=r.value?.key),o.cursor){const y=document.querySelector(`#file-${o.cursor} .name a`);y&&y.focus()}}),Ae(()=>{!n.documents.length&&o.cursor&&(o.cursor="",i())});let p=D(0),u=null;const m=()=>{p.value=Math.floor(Date.now()/1e3)};be(()=>{m(),u=setInterval(m,1e3);const y=document.querySelector(".cursor");y&&(y.scrollIntoView({block:"center",behavior:"instant"}),y.focus())}),vt(()=>{clearInterval(u)});const f=(y,k)=>{const h=Ue(kt,{open(){h.send(JSON.stringify({op:"mkdir",path:`${y.loc}/${k}`}))},message(v){const C=JSON.parse(v.data);"error"in C?(console.error("Mkdir failed",C.error.message,C.error),r.value=null):(console.log("mkdir",C),s.push(y.urlrouter))}});y.name=k,y.key=crypto.randomUUID()},S=y=>{const k=n.documents,h=k[y].loc;return y===0?h!==g.value:h!==k[y-1].loc},A=K({get:()=>n.documents.length>0&&n.documents.some(y=>o.selected.has(y.key))&&!b.value,set:y=>{}}),b=K({get:()=>n.documents.length>0&&n.documents.every(y=>o.selected.has(y.key)),set:y=>{console.log("Setting allSelected",y);for(const k of n.documents)y?o.selected.add(k.key):o.selected.delete(k.key)}}),g=K(()=>n.path.join("/")),$=(y,k)=>{o.cursor=k.key,Ft.showContextMenu({x:y.x,y:y.y,items:[{label:"Rename",onClick:()=>{r.value=k}}]})};return(y,k)=>{const h=xa,v=ka,C=yn;return n.documents.length||r.value?(R(),P("table",Sa,[E("thead",null,[E("tr",null,[E("th",_a,[yt(E("input",{type:"checkbox",tabindex:"-1","onUpdate:modelValue":k[0]||(k[0]=x=>b.value=x),indeterminate:A.value},null,8,Ea),[[mo,b.value]])]),E("th",{class:me(["sortcolumn",{sortactive:w(o).sortOrder==="name"}]),onClick:k[1]||(k[1]=x=>w(o).toggleSort("name"))},"Name",2),E("th",{class:me(["sortcolumn modified right",{sortactive:w(o).sortOrder==="modified"}]),onClick:k[2]||(k[2]=x=>w(o).toggleSort("modified"))},"Modified",2),E("th",{class:me(["sortcolumn size right",{sortactive:w(o).sortOrder==="size"}]),onClick:k[3]||(k[3]=x=>w(o).toggleSort("size"))},"Size",2),k[5]||(k[5]=E("th",{class:"menu"},null,-1))])]),E("tbody",null,[r.value?.key==="new"?(R(),P("tr",Ra,[k[6]||(k[6]=E("td",{class:"selection"},null,-1)),E("td",Aa,[z(un,{doc:r.value,rename:f,exit:()=>{r.value=null}},null,8,["doc","exit"])]),z(h,{doc:r.value,now:w(p)},null,8,["doc","now"]),z(v,{doc:r.value},null,8,["doc"]),k[7]||(k[7]=E("td",{class:"menu"},null,-1))])):q("",!0),(R(!0),P(fe,null,ot(e.documents,(x,I)=>(R(),P(fe,{key:x.key},[S(I)?(R(),P("tr",Ia,[E("th",$a,[z(C,{path:x.loc?x.loc.split("/"):[]},null,8,["path"])])])):q("",!0),E("tr",{id:`file-${x.key}`,class:me({file:!x.dir,folder:x.dir,cursor:w(o).cursor===x.key}),onClick:T=>w(o).cursor=w(o).cursor===x.key?"":x.key,onContextmenu:de(T=>$(T,x),["prevent"])},[E("td",{class:"selection",onClick:de(T=>w(o).cursor=w(o).cursor===x.key?x.key:"",["stop"])},[E("input",{type:"checkbox",tabindex:"-1",checked:w(o).selected.has(x.key),onChange:T=>T.target.checked?w(o).selected.add(x.key):w(o).selected.delete(x.key)},null,40,Oa)],8,Pa),E("td",Na,[r.value===x?(R(),ee(un,{key:0,doc:x,rename:l,exit:()=>{r.value=null}},null,8,["doc","exit"])):(R(),P(fe,{key:1},[E("a",{href:x.url,tabindex:"-1",onContextmenu:k[4]||(k[4]=de(()=>{},["stop"])),onFocus:de(T=>w(o).cursor=x.key,["stop"])},ne(x.name),41,Ta),w(o).cursor==x.key?(R(),P("button",{key:0,tabindex:"-1",class:"rename-button",onClick:()=>r.value=x},"🖊️",8,La)):q("",!0)],64))]),z(h,{doc:x,now:w(p)},null,8,["doc","now"]),z(v,{doc:x},null,8,["doc"]),E("td",Da,[E("button",{tabindex:"-1",onClick:de(T=>$(T,x),["stop"])},"⋮",8,Ba)])],42,Ma)],64))),128)),n.documents.length>1?(R(),P("tr",Fa,[E("td",Ha,ne(n.documents.length)+" items",1),E("td",Wa,ne(w(No)(n.documents.reduce((x,I)=>x+I.size,0))),1),k[8]||(k[8]=E("td",{class:"menu"},null,-1))])):q("",!0)])])):q("",!0)}}}),Ua=ye(za,[["__scopeId","data-v-c61c7c3a"]]),ja={key:2,class:"search-loading"},Va=X({__name:"ExplorerView",props:{path:{},query:{}},setup(e){const t=se(),n=D(),o=e,s=K(()=>o.path.join("/"));Be(()=>[o.query,o.path.join("/")],([l,i])=>{l&&t.searchResults.length===0?t.search(l,i):l||t.search("",i)},{immediate:!0});const r=K(()=>{const l=o.path.join("/");if(!o.query)return zo(t.document.filter(p=>p.loc===l),t.prefs.sortListing);const a=t.searchResults,c=t.prefs.sortFiltered;return c?Qr(a,c):a});return Ae(()=>{t.fileExplorer=n.value,t.query=o.query}),Be([()=>o.path.join("/"),()=>t.document.length],([l,i],[a,c])=>{l===a&&c!==void 0&&c>0||(t.prefs.gallery=r.value.some(p=>p.previewable))},{immediate:!0}),(l,i)=>{const a=ya,c=Xl;return R(),P(fe,null,[w(t).prefs.gallery?(R(),ee(a,{ref_key:"fileExplorer",ref:n,key:`gallery-${s.value}`,path:o.path,documents:r.value},null,8,["path","documents"])):(R(),ee(Ua,{ref_key:"fileExplorer",ref:n,key:`explorer-${s.value}`,path:o.path,documents:r.value},null,8,["path","documents"])),w(t).searchLoading?(R(),P("div",ja,"Searching...")):q("",!0),z(c,{documents:r.value,path:o.path},null,8,["documents","path"])],64)}}}),qa=ye(Va,[["__scopeId","data-v-3425a1f1"]]),bt=Tr({history:mr("/"),routes:[{path:"/:pathMatch(.*)*",name:"explorer",component:qa}]}),Ga={class:"headermain buttons"},Ka=["value"],Ja=X({__name:"HeaderMain",props:{path:{},query:{}},setup(e,{expose:t}){const n=se(),o=ll(),s=D(!1),r=D(),l=D(),i=e,a=m=>{if(!s.value)return;s.value=!1,document.querySelector(".breadcrumb").focus(),c(m)},c=m=>{const f=m.target.value;let S=i.path.join("/");S=S?`/${S}`:"";const b=(f?`${S}//${f}`:S||"/").replaceAll("?","%3F").replaceAll("#","%23");n.search(f,i.path.join("/")),requestAnimationFrame(()=>{!i.query&&f?bt.push(b):bt.replace(b)})},p=m=>{if(s.value=!s.value,!s.value)return a(m);ve(()=>{const f=r.value;f&&f.focus()})};Ae(()=>{i.query&&(s.value=!0)});const u=m=>{const f=[];o.isExternalAuth&&n.user.isLoggedIn&&f.push({label:"👤 "+(n.user.username||"User Account"),onClick:()=>{window.location.href="/auth/"}}),!o.isExternalAuth&&n.user.isLoggedIn&&f.push({label:"🔑 Change Password",onClick:()=>{n.dialog="settings"}}),n.user.privileged&&f.push({label:"⚙️ Admin Settings",onClick:()=>{n.dialog="usermgmt"}}),n.user.isLoggedIn?f.push({label:"🚪 Logout",onClick:()=>n.logout()}):n.server.public&&f.push({label:"🔐 Login",onClick:async()=>{try{await vn("/auth/restricted#theme=light"),cn()}catch{console.log("Login cancelled")}}}),Ft.showContextMenu({x:m.target.getBoundingClientRect().right,y:m.target.getBoundingClientRect().bottom,items:f})};return t({toggleSearchInput:p,closeSearch:a}),(m,f)=>{const S=rl,A=Bt;return R(),P("nav",Ga,[z(S,{path:i.path},null,8,["path"]),z(A,{name:"create-folder","data-tooltip":"New folder",onClick:f[0]||(f[0]=()=>{console.log("New",w(n).fileExplorer),w(n).fileExplorer.newFolder(),console.log("Done")})}),ue(m.$slots,"default",{},void 0,!0),f[2]||(f[2]=E("div",{class:"spacer smallgap"},null,-1)),s.value?(R(),P("input",{key:0,ref_key:"search",ref:r,type:"search",value:e.query,onInput:c,placeholder:"Find files",class:"margin-input"},null,40,Ka)):q("",!0),z(A,{ref_key:"searchButton",ref:l,name:"find",onClick:de(p,["prevent"])},null,512),z(A,{name:"eye",onClick:f[1]||(f[1]=b=>w(n).prefs.gallery=!w(n).prefs.gallery)}),z(A,{name:"cog",onClick:u})])}}}),Ya=ye(Ja,[["__scopeId","data-v-b8abc548"]]);function _t(e){return typeof e=="object"&&e!==null&&"error"in e}class Xa{async get(t){try{const n=await xt(t,{method:"GET"});if(_t(n))throw new Oe(n.error.code,n.error.message);return n}catch(n){throw n instanceof Xe?new Oe(401,"Authentication cancelled"):n}}async post(t,n){try{const o=await xt(t,{method:"POST",body:n});if(_t(o))throw new Oe(o.error.code,o.error.message);return o}catch(o){throw o instanceof Xe?new Oe(401,"Authentication cancelled"):o}}async put(t,n){try{const o=await xt(t,{method:"PUT",body:n});if(_t(o))throw new Oe(o.error.code,o.error.message);return o}catch(o){throw o instanceof Xe?new Oe(401,"Authentication cancelled"):o}}async delete(t){try{const n=await xt(t,{method:"DELETE"});if(_t(n))throw new Oe(n.error.code,n.error.message);return n}catch(n){throw n instanceof Xe?new Oe(401,"Authentication cancelled"):n}}}const st=new Xa;class Oe extends Error{code;constructor(t,n){super(n),this.code=t}}const Za=X({__name:"DownloadButton",setup(e){const t=se(),n={total:0,xfer:0,t0:0,tlast:0,statbytes:0,statdur:0,files:[],filestart:0,fileidx:0,filecount:0,filename:"",filesize:0,filepos:0,status:"idle"};t.dprogress={...n},setInterval(()=>{Date.now()-t.dprogress.tlast>3e3?(t.dprogress.statbytes=0,t.dprogress.statdur=1):(t.dprogress.statbytes*=.9,t.dprogress.statdur*=.9)},100);const o=()=>{Object.assign(t.dprogress,n),t.dprogress.t0=Date.now(),t.dprogress.tlast=t.dprogress.t0+1},s=i=>{const a=document.createElement("a");a.href=i,a.download="",a.click()},r=async(i,a)=>{let c="",p=a;console.log("Downloading to filesystem",i.recursive);for(const[u,m,f]of i.recursive)f.dir||(t.dprogress.files.push(u),++t.dprogress.filecount,t.dprogress.total+=f.size);for(const[u,m,f]of i.recursive){c&&!u.startsWith(c+"/")&&(c="",p=a);const S=u.slice(c.length);for(const g of S.split("/").slice(0,f.dir?void 0:-1))if(g){c+=`${g}/`;try{p=await p.getDirectoryHandle(g.normalize("NFC"),{create:!0})}catch($){throw console.error("Failed to create directory",c,$),new Error(`Failed to create directory ${c}: ${$}`)}console.log("Created",c)}if(f.dir)continue;const A=u.split("/").pop().normalize("NFC");let b;try{b=await p.getFileHandle(A,{create:!0})}catch(g){throw console.error("Failed to create file",u,m,c+A,g),new Error(`Failed to create file ${c+A}: ${g}`)}try{const g=await b.createWritable(),$=`/files/${u}`;console.log("Fetching",$);const y=await Do($);if(!y.ok)throw t.error=`Failed to download ${$}: ${y.status} ${y.statusText}`,new Error(`Failed to download ${$}: ${y.status} ${y.statusText}`);if(y.body){++t.dprogress.fileidx;const k=y.body.getReader();for(await g.truncate(0),t.dprogress.tlast=Date.now();;){const{value:h,done:v}=await k.read();if(v)break;await g.write(h);const C=Date.now(),x=h.byteLength;t.dprogress.xfer+=x,t.dprogress.filepos+=x,t.dprogress.statbytes+=x,t.dprogress.statdur+=C-t.dprogress.tlast,t.dprogress.tlast=C}}await g.close(),console.log("Saved",c+A)}catch(g){throw console.error("Failed to write file",c+A,g),new Error(`Failed to write file ${c+A}: ${g}`)}}o()},l=async()=>{const i=t.selectedFiles;if(console.log("Download",i),i.keys.length===0){console.warn("Attempted download but no files found. Missing selected keys:",i.missing),t.showToast("No existing files selected"),t.selected.clear();return}const a=i.recursive.filter(([u,m,f])=>!f.dir);if(a.length===1)return t.selected.clear(),t.showToast(`Downloading ${a[0][0].split("/").pop()}`),s(`/files/${a[0][1]}`);if("showDirectoryPicker"in window)try{const u=await window.showDirectoryPicker({startIn:"downloads",mode:"readwrite"});await r(i,u),t.selected.clear();return}catch(u){console.error("Download to folder aborted",u)}console.log("Falling back to zip download");const c=i.keys.map(u=>i.docs[u]),p=tl(c);s(`/zip/${Array.from(i.keys).join("+")}/${p}.zip`),t.showToast(`Downloading ${p}.zip`),t.selected.clear()};return(i,a)=>{const c=Bt;return R(),ee(c,{name:"download","data-tooltip":"Download",onClick:l})}}}),Qa={class:"select-text"},ei=X({__name:"HeaderSelected",props:{path:Array},setup(e){const t=se(),n=e,o=K(()=>n.path.join("/")),s=(r,l)=>{const i=t.selectedFiles,a={op:r,sel:i.keys.map(p=>{const u=i.docs[p];return u.loc?`${u.loc}/${u.name}`:u.name})};l!==void 0&&(a.dst=l);const c=Ue(kt,{message(p){const u=JSON.parse(p.data);if("error"in u){console.error("Control socket error",a,u.error),t.error=u.error.message;return}else if(u.status==="ack"){console.log("Control ack OK",u),c.close(),t.selected.clear();return}else console.log("Unknown control response",a,u)}});c.onopen=()=>{c.send(JSON.stringify(a))}};return(r,l)=>{const i=Za,a=Bt;return w(t).selected.size?(R(),P(fe,{key:0},[l[4]||(l[4]=E("div",{class:"smallgap"},null,-1)),E("p",Qa,ne(w(t).selected.size)+" selected ➤",1),z(i),z(a,{name:"copy","data-tooltip":"Copy here",onClick:l[0]||(l[0]=c=>s("cp",o.value))}),z(a,{name:"paste","data-tooltip":"Move here",onClick:l[1]||(l[1]=c=>s("mv",o.value))}),z(a,{name:"trash","data-tooltip":"Delete ⚠️",onClick:l[2]||(l[2]=c=>s("rm"))}),E("button",{class:"action-button unselect","data-tooltip":"Unselect all",onClick:l[3]||(l[3]=c=>w(t).selected.clear())},"❌")],64)):q("",!0)}}}),ti=["id"],ni={key:0},oi={class:"modal-content"},Jo=X({__name:"ModalDialog",props:{title:{},name:{}},setup(e,{expose:t}){const n=D(null),o=D(null),s=se(),r=()=>{s.dialog="",Lo()},l=e;return t({show:()=>{s.dialog=l.name,gn(),ve(()=>{n.value?.focus();const a=o.value?.querySelector("input");a&&a.focus()})},close:r}),Ae(()=>{if(n.value){n.value.focus();const a=o.value?.querySelector("input");a&&a.focus()}}),(a,c)=>w(s).dialog===e.name?(R(),P("div",{key:0,class:"modal-overlay",onClick:de(r,["self"]),onKeydown:Ze(r,["escape"]),tabindex:"-1",ref_key:"overlay",ref:n},[E("div",{class:"modal-dialog",id:l.name,ref_key:"dialog",ref:o},[l.title?(R(),P("h1",ni,ne(l.title),1)):q("",!0),E("div",oi,[ue(a.$slots,"default",{},()=>[c[0]||(c[0]=We(" Dialog with no content ",-1)),E("button",{onClick:r},"OK")])])],8,ti)],544)):q("",!0)}}),si="/auth/password-change";async function ri(e,t,n){return await st.post(si,{username:e,passwordChange:t,password:n})}const Ht="/auth/users";async function li(){return await st.get(Ht)}async function no(e,t,n){return await st.post(Ht,{username:e,password:t,privileged:n})}async function oo(e,t){return await st.put(`${Ht}/${e}`,t)}async function so(e){return await st.delete(`${Ht}/${e}`)}async function ai(e){return await st.put("/api/config/public",{public:e})}const ii={class:"form-grid"},ci={class:"dialog-buttons"},ui=X({__name:"SettingsModal",setup(e){const t=D(!1),n=se(),o=D(),s=D(),r=Qe({passwordChange:"",password:""}),l=()=>{r.passwordChange="",r.password="",n.dialog=""},i=async a=>{a.preventDefault();try{if(r.passwordChange){if(!r.password){n.showToast("⚠️ Current password is required"),s.value.focus();return}await ri(n.user.username,r.passwordChange,r.password)}l()}catch(c){const p=c;n.showToast(p.message||"🛑 Unknown error")}finally{t.value=!1}};return(a,c)=>{const p=Jo;return R(),ee(p,{name:"settings",title:"Settings"},{default:Re(()=>[E("form",null,[w(n).user.isLoggedIn?(R(),P(fe,{key:0},[c[5]||(c[5]=E("h3",null,"Update your authentication",-1)),E("div",ii,[c[2]||(c[2]=E("label",{for:"passwordChange"},"New password:",-1)),yt(E("input",{ref_key:"passwordChange",ref:o,id:"passwordChange",type:"password",autocomplete:"new-password",spellcheck:"false",autocorrect:"off","onUpdate:modelValue":c[0]||(c[0]=u=>r.passwordChange=u)},null,512),[[en,r.passwordChange]]),c[3]||(c[3]=E("label",{for:"password"},"Current password:",-1)),yt(E("input",{ref_key:"password",ref:s,id:"password",name:"password",type:"password",autocomplete:"current-password",spellcheck:"false",autocorrect:"off","onUpdate:modelValue":c[1]||(c[1]=u=>r.password=u)},null,512),[[en,r.password]])]),E("div",ci,[E("input",{id:"close",type:"reset",value:"Close",class:"button",onClick:l}),c[4]||(c[4]=E("div",{class:"spacer"},null,-1)),E("input",{id:"submit",type:"submit",value:"Submit",class:"button",onClick:de(i,["prevent"])})])],64)):(R(),P(fe,{key:1},[c[7]||(c[7]=E("p",null,"No settings are available because you have not logged in.",-1)),E("div",{class:"dialog-buttons"},[c[6]||(c[6]=E("div",{class:"spacer"},null,-1)),E("input",{id:"close",type:"reset",value:"Close",class:"button",onClick:l})])],64))])]),_:1})}}}),di=ye(ui,[["__scopeId","data-v-127c9237"]]),fi={key:0,class:"loading"},pi={key:1},mi={class:"form-row"},hi={for:"publicAccess"},gi=["checked","onChange","disabled"],vi=["onClick"],yi=["onClick"],wi=["onClick","disabled"],ki=X({__name:"UserManagementModal",setup(e){const t=se(),n=D(!0),o=D([]),s=D(""),r=D("📋"),l=Qe({public:!1}),i=()=>{t.dialog="",s.value=""},a=async()=>{try{n.value=!0;const b=await li();o.value=b.users}catch(b){const g=b;t.showToast(g.message||"Failed to load users")}finally{n.value=!1}},c=async()=>{const b=window.prompt("Enter username for new user:");if(!(!b||!b.trim()))try{s.value="";const g=await no(b.trim(),void 0,!1);await a(),g.password&&(s.value=`User ${b.trim()} created. Password: ${g.password}`)}catch(g){const $=g;t.showToast($.message||"Failed to add user")}},p=async(b,g)=>{const $=g.target;try{await oo(b.username,{privileged:$.checked}),b.privileged=$.checked}catch(y){const k=y;t.showToast(k.message||"Failed to update user"),$.checked=b.privileged}},u=async b=>{const g=window.prompt("Enter new username:",b.username);if(!(!g||!g.trim()||g.trim()===b.username))try{s.value="";const $=await no(g.trim(),void 0,b.privileged);await so(b.username),await a(),$.password&&(s.value=`User renamed to ${g.trim()}. New password: ${$.password}`)}catch($){const y=$;t.showToast(y.message||"Failed to rename user")}},m=async b=>{if(confirm(`Reset password for ${b.username}? A new password will be generated.`))try{s.value="";const g=await oo(b.username,{password:""});g.password&&(s.value=`Password reset for ${b.username}. New password: ${g.password}`)}catch(g){const $=g;t.showToast($.message||"Failed to reset password")}},f=async b=>{if(confirm(`Delete user ${b}?`))try{await so(b),await a()}catch(g){const $=g;t.showToast($.message||"Failed to delete user")}},S=async(b=!1)=>{const g=s.value.match(/(?:Password|New password): (.+)/);if(g)if(await navigator.clipboard.writeText(g[1]),b){r.value="✅ Copied!";const $=s.value.replace(/(?:Password|New password): .+/,"Password copied to clipboard!");s.value=$,setTimeout(()=>{s.value="",r.value="📋"},3e3)}else s.value=""},A=async()=>{try{s.value="",await ai(l.public),t.server.public=l.public,s.value="Server settings updated"}catch(b){const g=b;t.showToast(g.message||"Failed to update settings")}};return be(()=>{l.public=t.server.public||!1,n.value=!1}),Be(()=>t.dialog,b=>{b==="usermgmt"&&!t.server.paskia&&a()}),Be(()=>t.server.public,b=>{l.public=b||!1}),(b,g)=>{const $=Jo;return R(),ee($,{name:"usermgmt",title:"Admin Settings"},{default:Re(()=>[n.value?(R(),P("div",fi,"Loading...")):(R(),P("div",pi,[g[8]||(g[8]=E("h3",null,"Server Settings",-1)),E("div",mi,[E("label",hi,[yt(E("input",{type:"checkbox",id:"publicAccess","onUpdate:modelValue":g[0]||(g[0]=y=>l.public=y),onChange:A},null,544),[[mo,l.public]]),g[3]||(g[3]=We(" Public access (anyone can read and write) ",-1))])]),w(t).server.paskia?(R(),P(fe,{key:0},[g[4]||(g[4]=E("h3",null,"User Management",-1)),g[5]||(g[5]=E("p",null,[We("See "),E("a",{href:"/auth/admin/"},"Paskia Admin"),We(".")],-1))],64)):(R(),P(fe,{key:1},[g[7]||(g[7]=E("h3",null,"Users",-1)),E("button",{onClick:c,class:"button",title:"Add new user"},"➕ Add User"),s.value?(R(),P("div",{key:0,class:"success-message",onClick:g[2]||(g[2]=y=>S(!1))},[We(ne(s.value)+" ",1),s.value.includes("Password:")||s.value.includes("New password:")?(R(),P("button",{key:0,onClick:g[1]||(g[1]=de(y=>S(!0),["stop"])),class:"button small",title:"Copy to clipboard"},ne(r.value),1)):q("",!0)])):q("",!0),E("table",null,[g[6]||(g[6]=E("thead",null,[E("tr",null,[E("th",null,"Username"),E("th",null,"Admin"),E("th",null,"Actions")])],-1)),E("tbody",null,[(R(!0),P(fe,null,ot(o.value,y=>(R(),P("tr",{key:y.username},[E("td",null,ne(y.username),1),E("td",null,[E("input",{type:"checkbox",checked:y.privileged,onChange:k=>p(y,k),disabled:y.username===w(t).user.username},null,40,gi)]),E("td",null,[E("button",{onClick:k=>u(y),class:"button small",title:"Rename user"},"✏️",8,vi),E("button",{onClick:k=>m(y),class:"button small",title:"Reset password"},"🔑",8,yi),E("button",{onClick:k=>f(y.username),class:"button small danger",disabled:y.username===w(t).user.username,title:"Delete user"},"🗑️",8,wi)])]))),128))])])],64)),E("div",{class:"dialog-buttons"},[E("button",{onClick:i,class:"button"},"Close")])]))]),_:1})}}}),bi=ye(ki,[["__scopeId","data-v-afe859c3"]]),Ci={key:0,class:"modal-overlay"},xi=X({__name:"AccessDeniedModal",setup(e){const t=se(),n=()=>{location.reload()};return Ae(()=>{t.dialog==="accessdenied"&&gn()}),(o,s)=>w(t).dialog==="accessdenied"?(R(),P("div",Ci,[E("div",{class:"modal-dialog",id:"accessdenied"},[E("div",{class:"modal-content access-denied"},[s[0]||(s[0]=E("p",{class:"icon"},"⛔",-1)),s[1]||(s[1]=E("p",{class:"message"},"Access Denied",-1)),E("button",{onClick:n,class:"button"},"Reload")])])])):q("",!0)}}),Si=ye(xi,[["__scopeId","data-v-eaaa3c09"]]),_i=X({__name:"App",setup(e){const t=se(),n=K(()=>{const l=decodeURIComponent(bt.currentRoute.value.path).split("//"),i=(l[0]??"").split("/").filter(c=>c!==""),a=l.slice(1).join("//");return{path:l[0]??"",pathList:i,query:a}});Ae(()=>{document.title=n.value.path.replace(/\/$/,"").split("/").pop()||t.server.name||"Cista Storage"}),be(qr),be(Dt),vt(Gr);const o=D(null);let s=null;const r=l=>{if(t.dialog){s&&(clearTimeout(s),s=null);return}const i=t.fileExplorer;if(!i)return;const a=i.isCursor(),c=l.target.tagName==="INPUT",p=l.type==="keyup";if(l.repeat){(l.key==="ArrowUp"||l.key==="ArrowDown"||l.key==="ArrowLeft"||l.key==="ArrowRight"||a&&l.code==="Space")&&(c||l.preventDefault());return}let u="";if(!c&&l.key.startsWith("Arrow"))u=l.key.slice(5).toLowerCase();else if(!p&&l.key==="f"&&(l.ctrlKey||l.metaKey))o.value.toggleSearchInput();else if(!c&&p&&l.key==="/")o.value.toggleSearchInput();else if(p&&l.key==="Escape")t.error="",t.clearToast(),o.value.closeSearch(l),t.focusBreadcrumb();else if(!c&&p&&l.key==="Backspace")bt.back();else if(!c&&!p&&l.key==="a"&&(l.ctrlKey||l.metaKey))i.toggleSelectAll();else if(!c&&p&&l.key==="g")t.prefs.gallery=!t.prefs.gallery;else if(!c&&p&&(l.code==="Backquote"||l.key==="1"||l.key==="2"||l.key==="3"))t.sort(["","name","modified","size"][+l.key||0]);else if(!c&&a&&p&&!l.ctrlKey&&(l.key==="F2"||l.key==="r"))i.cursorRename();else if(!c&&a&&l.code==="Space")p&&!l.altKey&&!l.ctrlKey&&i.cursorSelect();else return;l.preventDefault(),s&&(clearTimeout(s),s=null);let m;switch(u){case"up":m=()=>i.up(l);break;case"down":m=()=>i.down(l);break;case"left":m=()=>i.left(l);break;case"right":m=()=>i.right(l);break}if(m&&!p){const S=l.altKey?20:100;m(),s=setTimeout(()=>{s=setInterval(m,S)},200-S)}};return be(()=>{window.addEventListener("keydown",r),window.addEventListener("keyup",r)}),vt(()=>{window.removeEventListener("keydown",r),window.removeEventListener("keyup",r)}),(l,i)=>{const a=di,c=ei,p=Ya,u=yn,m=Is;return R(),P(fe,null,[w(t).toast?(R(),P("div",{key:0,class:"toast-message",onClick:i[0]||(i[0]=f=>w(t).clearToast())},ne(w(t).toast),1)):w(t).error&&!w(t).authInProgress?(R(),P("div",{key:1,class:"toast-message status",onClick:i[1]||(i[1]=f=>w(t).error="")},ne(w(t).error),1)):q("",!0),z(a),z(bi),z(Si),E("header",null,[z(p,{ref_key:"headerMain",ref:o,path:n.value.pathList,query:n.value.query},{default:Re(()=>[z(c,{path:n.value.pathList},null,8,["path"])]),_:1},8,["path","query"]),z(u,{path:n.value.pathList,primary:""},null,8,["path"])]),E("main",null,[z(w(Oo),{path:n.value.pathList,query:n.value.query},null,8,["path","query"])]),E("footer",null,[z(m,{status:w(t).uprogress,onCancel:w(t).cancelUploads,class:"upload"},null,8,["status","onCancel"]),z(m,{status:w(t).dprogress,onCancel:w(t).cancelDownloads,class:"download"},null,8,["status","onCancel"])])],64)}}});function Ei(e,t){if(e==null)return;let n=e;for(let o=0;o<t.length;o++){if(n===void 0||n[t[o]]===void 0)return;if(n===null||n[t[o]]===null)return null;n=n[t[o]]}return n}function Cn(e,t,n){if(n.length===0)return t;const o=n[0];return n.length>1&&(t=Cn(typeof e!="object"||e===null||!Object.prototype.hasOwnProperty.call(e,o)?Number.isInteger(Number(n[1]))?[]:{}:e[o],t,Array.prototype.slice.call(n,1))),Number.isInteger(Number(o))&&Array.isArray(e)?e.slice()[o]:Object.assign({},e,{[o]:t})}function Yo(e,t){if(e==null||t.length===0)return e;if(t.length===1){if(e==null)return e;if(Number.isInteger(t[0])&&Array.isArray(e))return Array.prototype.slice.call(e,0).splice(t[0],1);const n={};for(const o in e)n[o]=e[o];return delete n[t[0]],n}if(e[t[0]]==null){if(Number.isInteger(t[0])&&Array.isArray(e))return Array.prototype.concat.call([],e);const n={};for(const o in e)n[o]=e[o];return n}return Cn(e,Yo(e[t[0]],Array.prototype.slice.call(t,1)),[t[0]])}function Xo(e,t){return t.map(n=>n.split(".")).map(n=>[n,Ei(e,n)]).filter(n=>n[1]!==void 0).reduce((n,o)=>Cn(n,o[1],o[0]),{})}function Zo(e,t){return t.map(n=>n.split(".")).reduce((n,o)=>Yo(n,o),e)}function ro(e,{storage:t,serializer:n,key:o,debug:s,pick:r,omit:l,beforeHydrate:i,afterHydrate:a},c,p=!0){try{p&&i?.(c);const u=t.getItem(o);if(u){const m=n.deserialize(u),f=r?Xo(m,r):m,S=l?Zo(f,l):f;e.$patch(S)}p&&a?.(c)}catch(u){s&&console.error("[pinia-plugin-persistedstate]",u)}}function lo(e,{storage:t,serializer:n,key:o,debug:s,pick:r,omit:l}){try{const i=r?Xo(e,r):e,a=l?Zo(i,l):i,c=n.serialize(a);t.setItem(o,c)}catch(i){s&&console.error("[pinia-plugin-persistedstate]",i)}}function Ri(e,t){return typeof e=="function"?e(t):typeof e=="string"?e:t}function Ai(e,t,n){const{pinia:o,store:s,options:{persist:r=n}}=e;if(!r)return;if(!(s.$id in o.state.value)){const i=o._s.get(s.$id.replace("__hot:",""));i&&Promise.resolve().then(()=>i.$persist());return}const l=(Array.isArray(r)?r:r===!0?[{}]:[r]).map(t);s.$hydrate=({runHooks:i=!0}={})=>{l.forEach(a=>{ro(s,a,e,i)})},s.$persist=()=>{l.forEach(i=>{lo(s.$state,i)})},l.forEach(i=>{ro(s,i,e),s.$subscribe((a,c)=>lo(c,i),{detached:!0})})}function Ii(e={}){return function(t){Ai(t,n=>{const o=Ri(n.key,t.store.$id);return{key:(e.key?e.key:s=>s)(o),debug:n.debug??e.debug??!1,serializer:n.serializer??e.serializer??{serialize:s=>JSON.stringify(s),deserialize:s=>JSON.parse(s)},storage:n.storage??e.storage??window.localStorage,beforeHydrate:n.beforeHydrate??e.beforeHydrate,afterHydrate:n.afterHydrate??e.afterHydrate,pick:n.pick,omit:n.omit}},e.auto??!1)}}var $i=Ii();const Ct=hs(_i);Ct.config.errorHandler=e=>{console.log(e)};const Qo=gs();Qo.use($i);Ct.use(Qo);Ct.use(bt);Ct.use(Ft);Ct.mount("#app");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";:root{--primary-background: #ddd;--header-background: var(--soft-color);--header-color: #ccc;--input-background: #fff;--input-color: #000;--primary-color: #000;--soft-color: #146;--accent-color: #f80;--transition-time: .2s;--root-font-size: 1rem;--header-font-size: 1rem;--header-height: 4rem}@media(prefers-color-scheme:dark){:root{--primary-color: #ddd;--primary-background: var(--soft-color);--header-background: #000;--header-color: #ccc;--input-background: var(--soft-color);--input-color: #ddd}}@media screen and (max-width:600px){.size,.modified,.summary{display:none}}@media screen and (min-width:1000px){:root{--root-font-size: calc(8px + .8vw) }}@media screen and (min-width:2000px){:root{--root-font-size: 1.5rem}}@media screen and (max-height:600px){:root{--header-font-size: calc(10px + 10 * 100vh / 600);--root-font-size: .8rem;--header-height: 2rem}header .breadcrumb>*{padding-top:calc(8 + 8 * 100vh / 600)!important;padding-bottom:calc(8 + 8 * 100vh / 600)!important}}@media screen and (max-height:300px){:root{--header-font-size: 15px;--header-height: 28px ;--root-font-size: .6rem}header .breadcrumb>*{padding-top:14px!important;padding-bottom:14px!important}}@media screen and (orientation:landscape)and (min-width:700px){:root{--header-font-size: calc(8px + 8 * 100vh / 600)}header{display:flex;justify-content:space-between}header .headermain{order:1}header .breadcrumb{align-self:stretch}header .action-button{width:2em;height:2em}}@media print{:root{--primary-color: black;--primary-background: none;--header-background: none;--header-color: black}.headermain,.menu,.rename-button{display:none!important}.breadcrumb>a{color:#000!important;background:none!important;padding:0!important;margin:0!important;clip-path:none!important;max-width:none!important}.breadcrumb>a:after{content:"/"}.breadcrumb svg{fill:#000!important;margin:0 .5rem 0 1rem!important}body#app{position:static!important;height:auto!important}main{padding-bottom:0!important}thead tr{font-size:1rem!important;position:static!important;background:none!important;border-bottom:1pt solid black!important}audio::-webkit-media-controls-timeline,video::-webkit-media-controls-timeline{display:none}audio::-webkit-media-controls,video::-webkit-media-controls{display:none}tr,figure{page-break-inside:avoid}.selection{min-width:0!important;padding:0!important}.selection input{display:none}.selection input:checked{display:inherit}tbody .selection input:checked{opacity:1!important;transform:scale(.5);left:0}}*{box-sizing:border-box}html{font-size:var(--root-font-size);overflow:hidden}main{-ms-overflow-style:none;scrollbar-width:none}body{background-color:var(--primary-background);font-size:1rem;font-family:Roboto;color:var(--primary-color);margin:0;overflow:hidden;height:100vh;height:100dvh}tbody .size,tbody .modified{font-family:Roboto Mono}header{flex:0 0 auto;background-color:var(--header-background);color:var(--header-color);font-size:var(--header-font-size)}main{height:100%}::selection{color:#000;background:#ff0!important}button{font:inherit;color:inherit;margin:0;border:0;padding:0;background:none;cursor:pointer;min-width:1rem;min-height:1rem}input{margin:0}:focus{outline:none}a:link,a:visited,a:active,a:hover{color:var(--primary-color);text-decoration:none}table{border-collapse:collapse;border-spacing:0;border:0;gap:0}body#app{position:fixed;inset:0;display:flex;flex-direction:column}main{flex:1 1 auto;min-height:0;padding-bottom:3em;overflow-y:scroll;text-align:center}header nav.headermain{position:relative;z-index:100}.spacer{flex-grow:1}.smallgap{flex-shrink:1;width:2em}[data-tooltip]:hover:after{z-index:101;content:attr(data-tooltip);position:absolute;pointer-events:none;font-size:1rem;text-align:center;padding:.5rem 1rem;border-radius:3rem 0;box-shadow:0 0 1rem var(--accent-color);transform:translate(calc(1rem - 50%),150%);background-color:var(--accent-color);color:var(--primary-color);white-space:pre;animation:appearbriefly calc(10 * var(--transition-time)) linear forwards}@keyframes appearbriefly{0%{opacity:0}30%{opacity:0}40%{opacity:1}90%{opacity:1}to{opacity:0}}.error-message{padding:.5em;font-weight:700;background:var(--accent-color);color:#000}.transferprogress[data-v-fc92216f]{--bar: var(--accent-color);--nobar: var(--header-background);display:flex;flex-direction:column;color:var(--primary-color);width:100%}.statustext[data-v-fc92216f]{display:flex;align-items:center;margin:0 .5em;padding:.5rem 0}span[data-v-fc92216f]{color:#ccc;white-space:nowrap;text-align:right;padding:0 .5em}.filename[data-v-fc92216f]{color:#fff;flex:1 1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left}.index[data-v-fc92216f]{min-width:3.5em}.position[data-v-fc92216f],.speed[data-v-fc92216f]{min-width:4em}.upload .statustext[data-v-fc92216f]:before{font-size:1.5em;content:"🔺"}.download .statustext[data-v-fc92216f]:before{font-size:1.5em;content:"🔻"}:root{--breadcrumb-background-odd: #2d2d2d;--breadcrumb-background-even: #404040;--breadcrumb-color: #ddd;--breadcrumb-hover-color: #fff;--breadcrumb-hover-background-odd: #25a;--breadcrumb-hover-background-even: #812;--breadcrumb-transtime: .3s}.breadcrumb{flex:1 1 auto;display:flex;min-width:20%;max-width:100%;min-height:2em;margin:0;padding:0 1em 0 0;overflow:hidden}.breadcrumb>a{flex:0 4 auto;display:flex;align-items:center;margin:0 -.5em;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;color:var(--breadcrumb-color);padding:.3em 1.5em;clip-path:polygon(0 0,1em 50%,0 100%,100% 100%,100% 0,0 0);transition:all var(--breadcrumb-transtime)}.breadcrumb>a:first-child{flex:0 0 auto;padding-left:1.5em;padding-right:1.7em;clip-path:none}.breadcrumb>a:last-child{clip-path:polygon(0 0,calc(100% - 1em) 0,100% 50%,calc(100% - 1em) 100%,0 100%,1em 50%,0 0)}.breadcrumb>a:only-child{clip-path:polygon(0 0,calc(100% - 1em) 0,100% 50%,calc(100% - 1em) 100%,0 100%,0 0)}.breadcrumb svg{width:1.3em;height:1.3em;margin:-.5em;fill:var(--breadcrumb-color);transition:fill var(--breadcrumb-transtime)}.breadcrumb a:nth-child(odd){background:var(--breadcrumb-background-odd)}.breadcrumb a:nth-child(2n){background:var(--breadcrumb-background-even)}.breadcrumb a:nth-child(odd):hover,.breadcrumb a:focus:nth-child(odd){background:var(--breadcrumb-hover-background-odd)}.breadcrumb a:nth-child(2n):hover,.breadcrumb a:focus:nth-child(2n){background:var(--breadcrumb-hover-background-even)}.breadcrumb a:hover{color:var(--breadcrumb-hover-color)}.breadcrumb a:hover svg{fill:var(--breadcrumb-hover-color)}.breadcrumb a.current{color:var(--accent-color);max-width:none;flex:0 1 auto}.breadcrumb a.current svg{fill:var(--accent-color)}.action-button{background:none;border:none;color:#ccc;cursor:pointer;transition:all .2s ease;padding:.2em;width:3em;height:3em}.action-button:hover,.action-button:focus{color:#fff;transform:scale(1.1)}svg{fill:#ccc;transform:fill .2s ease}.action-button:hover svg,.action-button:focus svg{fill:#fff}@keyframes rotate-0494c508{0%{transform:rotate(0)}to{transform:rotate(360deg)}}svg.cog[data-v-0494c508]{width:10rem;height:10rem;margin:0 auto;animation:rotate-0494c508 10s linear infinite;filter:drop-shadow(0 0 1rem black);fill:#888}svg.cog.stopped[data-v-0494c508]{animation:none}input#FileRenameInput{color:var(--input-color);background:var(--input-background);border:0;border-radius:.3rem;padding:.4rem;margin:-.4rem;width:100%;outline:none;font:inherit}.gallery input#FileRenameInput{padding:.75em;font-weight:600;width:auto}img[data-v-47490c5c],embed[data-v-47490c5c],.icon[data-v-47490c5c],audio[data-v-47490c5c],video[data-v-47490c5c]{font-size:8em;overflow:hidden;min-width:50%;max-width:100%;max-height:100%;border-radius:.0625em}.folder[data-v-47490c5c]:before{content:"📁"}.folder[data-v-47490c5c]:hover:before,.cursor .folder[data-v-47490c5c]:before{content:"📂"}.archive[data-v-47490c5c]:before{content:"📦"}.file[data-v-47490c5c]:before{content:"📄"}.ext-img[data-v-47490c5c]:before{content:"💿"}.ext-exe[data-v-47490c5c]:before,.ext-msi[data-v-47490c5c]:before,.ext-dmg[data-v-47490c5c]:before,.ext-pkg[data-v-47490c5c]:before{content:"⚙️"}.ext-torrent[data-v-47490c5c]:before{content:"🏴☠️"}.audio audio[data-v-47490c5c]{opacity:0;transition:opacity var(--transition-time) ease-in-out}.audio:hover audio[data-v-47490c5c]{opacity:1}.audio.icon[data-v-47490c5c]:before{width:100%;content:"🔈"}.audio.icon[data-v-47490c5c]:has(audio[data-playing]):before{position:absolute;content:"🔊";bottom:0}.icon[data-v-47490c5c]{filter:brightness(.9)}figure.cursor .icon[data-v-47490c5c]{filter:brightness(1)}img[data-v-47490c5c]:before{text-shadow:0 0 .5rem #000;filter:grayscale(1);content:"❌"}.video-container[data-v-47490c5c]{position:relative;display:flex;align-items:center;justify-content:center;min-width:50%;max-width:100%;max-height:100%}.video-container video[data-v-47490c5c]{width:100%;height:100%;border-radius:.0625em;object-fit:contain}.play-overlay[data-v-47490c5c]{position:absolute;display:flex;align-items:center;justify-content:center;pointer-events:none;width:4em;height:4em;background:#0003;border-radius:50%;transition:opacity .2s ease,transform .2s ease}.play-overlay svg[data-v-47490c5c]{width:2em;height:2em;fill:#fff;margin-left:.25em}.video-container:hover .play-overlay[data-v-47490c5c]{transform:scale(1.1)}video[data-playing]+.play-overlay[data-v-47490c5c]{opacity:0}.cursor-tooltip[data-v-c5d421fc]{position:fixed;z-index:10000;padding:.5rem 1rem;border-radius:3rem 0;box-shadow:0 0 1rem var(--accent-color);background-color:var(--accent-color);color:var(--primary-color);white-space:nowrap;pointer-events:none;font-size:1rem}.tooltip-name[data-v-91479c1d]{font-weight:600;text-align:center}.tooltip-details[data-v-91479c1d]{text-align:center}figure[data-v-91479c1d]{max-height:15em;position:relative;border-radius:.5em;margin:0;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden}figure>article[data-v-91479c1d]{flex:0 0 auto}figure[data-v-91479c1d] .video-container{height:15em}.titlespacer[data-v-91479c1d]{flex-shrink:100000;width:100%;height:2em}figcaption[data-v-91479c1d]{position:absolute;overflow:hidden;bottom:0;display:flex;align-items:center;justify-content:center;width:100%}figcaption input[type=checkbox][data-v-91479c1d]{width:1.5em;height:1.5em;margin:.25em 0 .25em .25em;opacity:0;flex-shrink:0;transition:opacity var(--transition-time) ease-in-out}figcaption input[type=checkbox][data-v-91479c1d]:checked,figcaption:hover input[type=checkbox][data-v-91479c1d]{opacity:1}figcaption span[data-v-91479c1d]{cursor:default;padding:.5em;color:#fff;font-weight:600;text-shadow:0 0 .2em #000,0 0 .2em #000;text-wrap:nowrap;text-overflow:ellipsis;overflow:hidden}.cursor figcaption span[data-v-91479c1d]{color:var(--accent-color)}figcaption .namespacer[data-v-91479c1d]{flex-shrink:100000;height:2em;width:2em}.gallery[data-v-9973e293]{padding:1em;width:100%;display:grid;gap:.5em;grid-template-columns:repeat(auto-fill,minmax(15em,1fr));align-items:end}.folder-indicator[data-v-9973e293]{grid-column:1 / -1}.folder-start[data-v-9973e293]{grid-column-start:1}.size.empty[data-v-444c7802]{color:#555}.size.bytes[data-v-444c7802]{color:#77a}.size.kB[data-v-444c7802]{color:#474}.size.MB[data-v-444c7802]{color:#a80}.size.GB[data-v-444c7802]{color:#f83}.size.TB[data-v-444c7802],.size.PB[data-v-444c7802],.size.EB[data-v-444c7802],.size.huge[data-v-444c7802]{color:#f44;text-shadow:0 0 .2em}@media(prefers-color-scheme:dark){.size.empty[data-v-444c7802]{color:#bbb}.size.bytes[data-v-444c7802]{color:#99d}.size.kB[data-v-444c7802]{color:#aea}.size.MB[data-v-444c7802]{color:#ff4}.size.GB[data-v-444c7802]{color:#f86}.size.TB[data-v-444c7802],.size.PB[data-v-444c7802],.size.EB[data-v-444c7802],.size.huge[data-v-444c7802]{color:#f55}}.cursor .size[data-v-444c7802]{color:inherit;text-shadow:none}table[data-v-c61c7c3a]{width:100%;table-layout:fixed}thead tr[data-v-c61c7c3a]{position:sticky;top:0;z-index:2}tbody tr[data-v-c61c7c3a]{position:relative;z-index:auto}table thead .selection input[type=checkbox][data-v-c61c7c3a]{position:inherit;width:1rem;height:1rem;padding:0;margin:auto}table tbody .selection input[type=checkbox][data-v-c61c7c3a]{width:2rem;height:2rem}table .selection[data-v-c61c7c3a]{width:3rem;text-align:center;text-overflow:clip;padding:0}table .selection input[data-v-c61c7c3a]{margin:auto}table .modified[data-v-c61c7c3a]{width:10rem;text-overflow:clip}table .size[data-v-c61c7c3a]{width:7rem;text-overflow:clip}table .menu[data-v-c61c7c3a]{width:2rem}tbody td[data-v-c61c7c3a]{font-size:1.2rem}table th[data-v-c61c7c3a],table td[data-v-c61c7c3a]{padding:0 .5rem;font-weight:400;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.name[data-v-c61c7c3a]{white-space:nowrap;position:relative}.name .rename-button[data-v-c61c7c3a]{position:absolute;right:0;animation:appear-c61c7c3a calc(5 * var(--transition-time)) linear}@keyframes appear-c61c7c3a{0%{opacity:0}80%{opacity:0}to{opacity:1}}thead tr[data-v-c61c7c3a]{font-size:.8rem;background:linear-gradient(to bottom,#eee,#fff 30%,#ddd);color:#000;box-shadow:0 0 .2rem #000}tbody tr.cursor[data-v-c61c7c3a]{background:var(--accent-color)}.right[data-v-c61c7c3a]{text-align:right}.sortcolumn[data-v-c61c7c3a]:hover{cursor:pointer}.sortcolumn[data-v-c61c7c3a]:hover:after{color:var(--accent-color)}.sortcolumn[data-v-c61c7c3a]{padding-right:1.5rem}.sortcolumn[data-v-c61c7c3a]:after{font-size:1rem;content:"▸";color:#888;margin-left:.5rem;margin-top:-.2rem;position:absolute;transition:all var(--transition-time) linear}.sortactive[data-v-c61c7c3a]:after{transform:rotate(90deg);color:var(--accent-color)}.name a[data-v-c61c7c3a]{text-decoration:none}tbody .selection input[data-v-c61c7c3a]{z-index:1;position:absolute;opacity:0;left:.5rem;top:0}.selection[data-v-c61c7c3a]{width:2em;height:2em}.selection input[data-v-c61c7c3a]:checked{opacity:.7}.file .selection[data-v-c61c7c3a]:before{content:"📄";font-size:1.5rem}.folder .selection[data-v-c61c7c3a]:before{height:2rem;content:"📁";font-size:1.5rem}.empty-container[data-v-c61c7c3a]{padding-top:3rem;text-align:center;font-size:3rem;color:var(--accent-color)}.folder-change[data-v-c61c7c3a]{margin-left:-.5rem}.loc[data-v-c61c7c3a],.summary[data-v-c61c7c3a]{color:#888}.empty-container[data-v-d099f78a]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;font-size:2rem;text-shadow:0 0 .3rem #000,0 0 2rem #0008;color:var(--accent-color)}.search-loading[data-v-d099f78a]{position:fixed;bottom:1rem;right:1rem;padding:.5rem 1rem;background:var(--accent-color, #007bff);color:#fff;border-radius:.25rem;font-size:.875rem;opacity:.9}.buttons[data-v-b9ddc09f]{flex:1000 0 auto;padding:0;display:flex;align-items:center;z-index:10}input[type=search][data-v-b9ddc09f]{background:var(--input-background);color:var(--input-color);border:0;border-radius:.1em;outline:none;max-width:15ch}.select-text{color:var(--accent-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0}.modal-overlay{position:fixed;inset:0;z-index:1100;display:flex;align-items:center;justify-content:center}.modal-dialog{background:#ddd;color:#000;border:none;border-radius:.5rem;box-shadow:0 0 1rem #0008;padding:0;max-width:90vw;max-height:90vh;overflow:auto;font-size:1rem}.modal-dialog>h1{background:#146;color:#fff;font-size:1.2rem;font-weight:400;margin:0;padding:.5rem 1rem;position:sticky;top:0}.modal-dialog>.modal-content{padding:1rem}.modal-dialog h3{font-size:1rem;font-weight:600;margin:1rem 0 .5rem}.modal-dialog h3:first-child{margin-top:0}.modal-dialog a{color:#146}.modal-dialog a:hover{color:#f80}.modal-dialog input[type=text],.modal-dialog input[type=password],.modal-dialog select{font:inherit;font-size:1rem;padding:.5rem;border:2px solid #888;border-radius:.25rem;background:#fff;color:#000;min-width:12rem}.modal-dialog input[type=text]:focus,.modal-dialog input[type=password]:focus,.modal-dialog select:focus{outline:none;border-color:#f80}.modal-dialog label{font-size:1rem}.modal-dialog button,.modal-dialog input[type=submit],.modal-dialog input[type=reset],.modal-dialog .button{font:inherit;font-size:1rem;padding:.5rem 1rem;background:#146;color:#fff;border:none;border-radius:.25rem;cursor:pointer}.modal-dialog button:hover,.modal-dialog input[type=submit]:hover,.modal-dialog input[type=reset]:hover,.modal-dialog .button:hover{background:#f80}.modal-dialog button:disabled,.modal-dialog input[type=submit]:disabled,.modal-dialog input[type=reset]:disabled,.modal-dialog .button:disabled{background:#888;cursor:not-allowed}.modal-dialog .button.small{padding:.25rem .5rem;font-size:.875rem}.modal-dialog .button.danger{background:#c00}.modal-dialog .button.danger:hover:not(:disabled){background:red}.modal-dialog .form-row{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1rem;align-items:center;margin-bottom:.5rem}.modal-dialog .form-grid{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1rem;align-items:center}.modal-dialog .dialog-buttons{display:flex;justify-content:flex-end;align-items:center;gap:.5rem;margin-top:1rem}.modal-dialog .error-text{color:#c00;font-size:.875rem;min-height:1.2em;margin:.5rem 0}.modal-dialog .success-message{background:#f80;color:#000;padding:.5rem;border-radius:.25rem;margin:.5rem 0;display:flex;align-items:center;gap:.5rem;font-size:.875rem}.modal-dialog table{width:100%;border-collapse:collapse;margin:.5rem 0;font-size:1rem}.modal-dialog th,.modal-dialog td{border:1px solid #888;padding:.5rem;text-align:left}.modal-dialog th{background:#146;color:#fff;font-weight:400}.modal-dialog td{background:#fff}.modal-dialog td input[type=checkbox]{margin:0}.modal-dialog p{margin:0 0 .5rem;font-size:1rem}.modal-dialog .loading{padding:2rem;text-align:center;color:#666}.access-denied[data-v-eaaa3c09]{text-align:center;padding:2rem!important}.access-denied .icon[data-v-eaaa3c09]{font-size:4rem;margin:0 0 1rem}.access-denied .message[data-v-eaaa3c09]{font-size:1.5rem;font-weight:700;margin:0 0 1.5rem}.toast-message{position:fixed;top:1rem;left:50%;transform:translate(-50%);z-index:2000;padding:.75rem 1.5rem;background:var(--accent-color);color:#000;font-weight:700;border-radius:.25rem;box-shadow:0 .25rem 1rem #0000004d;cursor:pointer;max-width:90vw;text-align:center}.toast-message.status{background:#555;color:#fff}:root{--vue-scroll-rect-scrollbar-thumb-color: rgba(122,122,122, .3);--vue-scroll-rect-scrollbar-thumb-color-light: rgba(122, 122, 122, .5);--vue-scroll-rect-scrollbar-thumb-color-pressed: rgba(112, 112, 112, .2);--vue-scroll-rect-scrollbar-thumb-radius: 5px;--vue-scroll-rect-scrollbar-thumb-margin: 0px;--vue-scroll-rect-scrollbar-size: 8px}.vue-scroll-rect{position:relative;width:100%;height:100%;margin:0;overflow:hidden}.vue-scroll-rect>.scroll-content{position:relative;max-width:100%;max-height:100%;scrollbar-width:none;-ms-overflow-style:none}.vue-scroll-rect>.scroll-content::-webkit-scrollbar{width:0;height:0}.vue-scroll-rect>.scroll-content::-ms-scrollbar{width:0;height:0}.vue-scroll-rect>.scroll-content.both{overflow:scroll}.vue-scroll-rect>.scroll-content.horizontal{overflow-x:scroll}.vue-scroll-rect>.scroll-content.vertical{overflow-y:scroll}.vue-scroll-rect:hover>.scrollbar{opacity:1;transition:opacity .1s}.vue-scroll-rect.always-show-scrollbar>.scrollbar,.vue-scroll-rect .dragging>.scrollbar{opacity:1}.vue-scroll-rect.background-clickable>.scrollbar{pointer-events:all}.vue-scroll-rect>.scrollbar{position:absolute;opacity:0;transition:opacity 1.5s;pointer-events:none}.vue-scroll-rect>.scrollbar:hover{opacity:1}.vue-scroll-rect>.scrollbar .thumb{position:absolute;background-color:var(--vue-scroll-rect-scrollbar-thumb-color);border-radius:var(--vue-scroll-rect-scrollbar-thumb-radius);pointer-events:all}.vue-scroll-rect>.scrollbar .thumb:hover{background-color:var(--vue-scroll-rect-scrollbar-thumb-color-light)}.vue-scroll-rect>.scrollbar .thumb:active{background-color:var(--vue-scroll-rect-scrollbar-thumb-color-pressed)}.vue-scroll-rect>.scrollbar.horizontal{left:0;bottom:0;right:0;height:var(--vue-scroll-rect-scrollbar-size)}.vue-scroll-rect>.scrollbar.horizontal .thumb{top:var(--vue-scroll-rect-scrollbar-thumb-margin);bottom:var(--vue-scroll-rect-scrollbar-thumb-margin)}.vue-scroll-rect>.scrollbar.vertical{top:0;bottom:0;right:0;width:var(--vue-scroll-rect-scrollbar-size)}.vue-scroll-rect>.scrollbar.vertical .thumb{left:var(--vue-scroll-rect-scrollbar-thumb-margin);right:var(--vue-scroll-rect-scrollbar-thumb-margin)}:root{--mx-menu-backgroud: #fff;--mx-menu-hover-backgroud: #f1f1f1;--mx-menu-active-backgroud: #dfdfdf;--mx-menu-open-backgroud: #f1f1f1;--mx-menu-open-hover-backgroud: #f1f1f1;--mx-menu-divider: #f0f0f0;--mx-menu-text: #2e2e2e;--mx-menu-hover-text: #2e2e2e;--mx-menu-active-text: #2e2e2e;--mx-menu-open-text: #2e2e2e;--mx-menu-open-hover-text: #2e2e2e;--mx-menu-disabled-text: #c9c8c8;--mx-menu-icon-size: 16px;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-scrollbar-thumb-color: rgba(0, 0, 0, .2);--mx-menu-scrollbar-thumb-color-light: rgba(0, 0, 0, .3);--mx-menu-scrollbar-thumb-color-pressed: rgba(0, 0, 0, .1);--mx-menu-shortcut-backgroud: #ebebeb;--mx-menu-shortcut-backgroud-hover:#ebebeb;--mx-menu-shortcut-backgroud-active:#ebebeb;--mx-menu-shortcut-backgroud-open:#ebebeb;--mx-menu-shortcut-backgroud-disabled:#fdfdfd;--mx-menu-shortcut-text: #424242;--mx-menu-shortcut-text-hover: #424242;--mx-menu-shortcut-text-active: #424242;--mx-menu-shortcut-text-open: #424242;--mx-menu-shortcut-text-disabled: #a5a5a5;--mx-menu-placeholder-width: 24px}.mx-context-menu{pointer-events:all;display:inline-block;overflow:visible;position:absolute;background-color:var(--mx-menu-backgroud);border-radius:var(--mx-menu-backgroud-radius);padding:12px 0;box-shadow:0 10px 40px 10px var(--mx-menu-shadow-color);opacity:1;transition:opacity .2s ease-in-out;--vue-scroll-rect-scrollbar-thumb-color: var(--mx-menu-scrollbar-thumb-color);--vue-scroll-rect-scrollbar-thumb-color-light: var(--mx-menu-scrollbar-thumb-color-light);--vue-scroll-rect-scrollbar-thumb-color-pressed: var(--mx-menu-scrollbar-thumb-color-pressed)}.mx-context-menu-items{position:relative;overflow:visible}.mx-context-menu-scroll{overscroll-behavior:contain}.mx-context-menu-item{display:flex;flex-direction:row;justify-content:space-between;align-items:center;position:relative;padding:6px 15px;-webkit-user-select:none;user-select:none;overflow:visible;white-space:nowrap;text-overflow:ellipsis;color:var(--mx-menu-text)}.mx-context-menu-item .mx-right-arrow,.mx-context-menu-item .mx-checked-mark{fill:var(--mx-menu-text)}.mx-context-menu-item:hover{background-color:var(--mx-menu-hover-backgroud);color:var(--mx-menu-hover-text)}.mx-context-menu-item:hover .mx-right-arrow,.mx-context-menu-item:hover .mx-checked-mark{fill:var(--mx-menu-hover-text)}.mx-context-menu-item:hover .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-hover);color:var(--mx-menu-shortcut-text-hover)}.mx-context-menu-item:active{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text)}.mx-context-menu-item:active .mx-right-arrow,.mx-context-menu-item:active .mx-checked-mark{fill:var(--mx-menu-active-text)}.mx-context-menu-item:active .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-active);color:var(--mx-menu-shortcut-text-active)}.mx-context-menu-item.open{background-color:var(--mx-menu-open-backgroud);color:var(--mx-menu-open-text)}.mx-context-menu-item.open:hover{background-color:var(--mx-menu-open-hover-backgroud);color:var(--mx-menu-open-hover-text)}.mx-context-menu-item.open .mx-right-arrow,.mx-context-menu-item.open .mx-checked-mark{fill:var(--mx-menu-open-text)}.mx-context-menu-item.open .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-open);color:var(--mx-menu-shortcut-text-open)}.mx-context-menu-item.keyboard-focus{background-color:var(--mx-menu-active-backgroud)}.mx-context-menu-item.disabled{color:var(--mx-menu-disabled-text);cursor:not-allowed}.mx-context-menu-item.disabled:hover,.mx-context-menu-item.disabled:active{background-color:transparent}.mx-context-menu-item.disabled .mx-right-arrow,.mx-context-menu-item.disabled .mx-checked-mark{fill:var(--mx-menu-disabled-text)}.mx-context-menu-item.disabled .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-disabled);color:var(--mx-menu-shortcut-text-second)}.mx-context-menu-item .mx-item-row{display:flex;flex-direction:row;align-items:center;max-width:100%}.mx-context-menu-item .mx-icon-placeholder{position:relative;display:flex;flex-direction:row;align-items:center;height:auto;overflow:hidden}.mx-context-menu-item .mx-icon-placeholder.preserve-width{width:var(--mx-menu-placeholder-width)}.mx-context-menu-item .icon{display:inline-block;font-size:var(--mx-menu-icon-size)}.mx-context-menu-item .icon.svg{width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-context-menu-item .label{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-inline-end:16px}.mx-context-menu-item-wrapper{position:relative}.mx-context-menu-item-sperator{display:block;padding:5px 0;background-color:var(--mx-menu-backgroud)}.mx-context-menu-item-sperator:after{display:block;content:"";background-color:var(--mx-menu-divider);height:1px}.mx-right-arrow{width:14px;height:14px}.mx-checked-mark{width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-shortcut{position:relative;justify-self:flex-end;font-size:11.5px;padding:2px 4px;background-color:var(--mx-menu-shortcut-backgroud);color:var(--mx-menu-shortcut-text)}.mx-menu-bar.dark,.mx-context-menu.dark{--mx-menu-backgroud: #303031;--mx-menu-hover-backgroud: #636363;--mx-menu-active-backgroud: #555555;--mx-menu-open-backgroud: #636363;--mx-menu-open-hover-backgroud: #636363;--mx-menu-divider: #464646;--mx-menu-text: #ffffff;--mx-menu-hover-text: #ffffff;--mx-menu-active-text: #ffffff;--mx-menu-open-text: #ffffff;--mx-menu-open-hover-text: #ffffff;--mx-menu-disabled-text: #9c9c9c;--mx-menu-shadow-color: rgba(51, 51, 51, .2);--mx-menu-scrollbar-thumb-color: rgba(255, 255, 255, .3);--mx-menu-scrollbar-thumb-color-light: rgba(255, 255, 255, .5);--mx-menu-scrollbar-thumb-color-pressed: rgba(255, 255, 255, .2);--mx-menu-shortcut-backgroud: #505050;--mx-menu-shortcut-backgroud-hover:#505050;--mx-menu-shortcut-backgroud-active:#505050;--mx-menu-shortcut-backgroud-open:#505050;--mx-menu-shortcut-backgroud-disabled:#444444;--mx-menu-shortcut-text: #f1f1f1;--mx-menu-shortcut-text-hover: #ffffff;--mx-menu-shortcut-text-active: #ffffff;--mx-menu-shortcut-text-open: #ffffff;--mx-menu-shortcut-text-disabled: #9d9d9d}.mx-menu-bar.flat,.mx-context-menu.flat{border-radius:0;padding:7px 0;box-shadow:0 1px 2px 1px var(--mx-menu-shadow-color)}.mx-menu-bar.flat .mx-context-menu-item,.mx-context-menu.flat .mx-context-menu-item{padding:3px 12px}.mx-menu-bar.win10,.mx-context-menu.win10{border-radius:0;padding:8px 0;border:1px solid var(--mx-menu-border-color);box-shadow:2px 2px 1px 0 var(--mx-menu-shadow-color)}.mx-menu-bar.win10,.mx-context-menu.win10{--mx-menu-backgroud: #eeeeee;--mx-menu-hover-backgroud: #d8d8d8;--mx-menu-active-backgroud: #dfdfdf;--mx-menu-open-backgroud: #f1f1f1;--mx-menu-open-hover-backgroud: #d8d8d8;--mx-menu-divider: #aaaaaa;--mx-menu-border-color: #b1b1b1;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover: transparent;--mx-menu-shortcut-backgroud-active: transparent;--mx-menu-shortcut-backgroud-open: transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #272727;--mx-menu-shortcut-text-hover: #272727;--mx-menu-shortcut-text-active: #272727;--mx-menu-shortcut-text-open: #272727;--mx-menu-shortcut-text-disabled: #6b6b6b}.mx-menu-bar.win10 .mx-context-menu-item,.mx-context-menu.win10 .mx-context-menu-item{padding:2px 4px;margin:0 4px}.mx-menu-bar.win10 .mx-context-menu-item-sperator,.mx-context-menu.win10 .mx-context-menu-item-sperator{margin:0 4px}.mx-menu-bar.win10.dark,.mx-context-menu.win10.dark{--mx-menu-backgroud: #303031;--mx-menu-hover-backgroud: #636363;--mx-menu-active-backgroud: #555555;--mx-menu-open-backgroud: #636363;--mx-menu-open-hover-backgroud: #636363;--mx-menu-divider: #808080;--mx-menu-border-color: #656565;--mx-menu-shortcut-backgroud: #505050;--mx-menu-shortcut-backgroud-hover:#505050;--mx-menu-shortcut-backgroud-active:#505050;--mx-menu-shortcut-backgroud-open:#505050;--mx-menu-shortcut-backgroud-disabled:#444444;--mx-menu-shortcut-text: #f1f1f1;--mx-menu-shortcut-text-hover: #ffffff;--mx-menu-shortcut-text-active: #ffffff;--mx-menu-shortcut-text-open: #ffffff;--mx-menu-shortcut-text-disabled: #9d9d9d;padding:8px 0}.mx-menu-bar.win10.dark .mx-context-menu-item,.mx-context-menu.win10.dark .mx-context-menu-item{padding:6px 12px;margin:0}.mx-menu-bar.win10.dark .mx-context-menu-item-sperator,.mx-context-menu.win10.dark .mx-context-menu-item-sperator{margin:0 7px}.mx-menu-bar.mac,.mx-context-menu.mac{padding:8px 0;box-shadow:0 5px 7px 1px var(--mx-menu-shadow-color);border:1px solid var(--mx-menu-border-color)}.mx-menu-bar.mac,.mx-context-menu.mac{--mx-menu-backgroud: #ececec;--mx-menu-hover-backgroud: #0165e1;--mx-menu-active-backgroud: #0165e1;--mx-menu-open-backgroud: #858585;--mx-menu-open-hover-backgroud: #0165e1;--mx-menu-divider: #d2d2d2;--mx-menu-text: #232323;--mx-menu-hover-text: #fff;--mx-menu-active-text: #fff;--mx-menu-open-text: #fff;--mx-menu-open-hover-text: #fff;--mx-menu-disabled-text: #bbbbbb;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover:transparent;--mx-menu-shortcut-backgroud-active:transparent;--mx-menu-shortcut-backgroud-open:transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #424242;--mx-menu-shortcut-text-hover: #fff;--mx-menu-shortcut-text-active: #fff;--mx-menu-shortcut-text-open: #fff;--mx-menu-shortcut-text-disabled: #a5a5a5;--mx-menu-border-color: #bbbbbb}.mx-menu-bar.mac.dark,.mx-context-menu.mac.dark{--mx-menu-backgroud: #333333;--mx-menu-hover-backgroud: #0153d2;--mx-menu-active-backgroud: #0153d2;--mx-menu-open-hover-backgroud: #0153d2;--mx-menu-open-backgroud: #414346;--mx-menu-divider: #575757;--mx-menu-text: #dcdcdc;--mx-menu-hover-text: #fff;--mx-menu-active-text: #fff;--mx-menu-open-text: #fff;--mx-menu-open-hover-text: #fff;--mx-menu-disabled-text: #6a6a6a;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover:transparent;--mx-menu-shortcut-backgroud-active:transparent;--mx-menu-shortcut-backgroud-open:transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #dadada;--mx-menu-shortcut-text-hover: #fff;--mx-menu-shortcut-text-active: #fff;--mx-menu-shortcut-text-open: #fff;--mx-menu-shortcut-text-disabled: #6a6a6a;--mx-menu-border-color: #222}.mx-menu-bar.mac .mx-context-menu-item,.mx-context-menu.mac .mx-context-menu-item{border-radius:5px;margin:0 6px;padding:3px 6px}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text);outline:none}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-right-arrow,.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-checked-mark,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-right-arrow,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-checked-mark{fill:var(--mx-menu-active-text)}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-shortcut,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-active);color:var(--mx-menu-shortcut-text-active)}.mx-menu-bar.mac .mx-context-menu-item-sperator,.mx-context-menu.mac .mx-context-menu-item-sperator{margin:0 12px}.mx-context-menu .vue-scroll-rect>.scroll-content{overflow-y:scroll;height:100%;width:auto;position:relative!important}.mx-menu-ghost-host{position:absolute;inset:0;overflow:hidden;pointer-events:none}.mx-menu-ghost-host.fullscreen{position:fixed}.mx-menu-bar{flex:1;display:flex;flex-direction:row;align-items:center;background-color:var(--mx-menu-backgroud);padding:5px 0}.mx-menu-bar.mini{flex-grow:0}.mx-menu-bar .mx-menu-bar-content{display:flex;flex-direction:row;align-items:center}.mx-menu-bar .mx-menu-bar-item{padding:2px 8px;border-radius:5px;-webkit-user-select:none;user-select:none;background-color:var(--mx-menu-backgroud);color:var(--mx-menu-text)}.mx-menu-bar .mx-menu-bar-item:hover{background-color:var(--mx-menu-hover-backgroud);color:var(--mx-menu-hover-text)}.mx-menu-bar .mx-menu-bar-item:hover .mx-menu-bar-icon-menu{fill:var(--mx-menu-hover-text)}.mx-menu-bar .mx-menu-bar-item:active,.mx-menu-bar .mx-menu-bar-item.active{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text)}.mx-menu-bar .mx-menu-bar-item:active .mx-menu-bar-icon-menu,.mx-menu-bar .mx-menu-bar-item.active .mx-menu-bar-icon-menu{fill:var(--mx-menu-active-text)}.mx-menu-bar .mx-menu-bar-icon-menu{fill:var(--mx-menu-text);width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-menu-bar.flat .mx-menu-bar-item{border-radius:0}
|
|
1
|
+
@charset "UTF-8";:root{--primary-background: #ddd;--header-background: var(--soft-color);--header-color: #ccc;--input-background: #fff;--input-color: #000;--primary-color: #000;--soft-color: #146;--accent-color: #f80;--transition-time: .2s;--root-font-size: 1rem;--header-font-size: 1rem;--header-height: 4rem}@media(prefers-color-scheme:dark){:root{--primary-color: #ddd;--primary-background: var(--soft-color);--header-background: #000;--header-color: #ccc;--input-background: var(--soft-color);--input-color: #ddd}}@media screen and (max-width:600px){.size,.modified,.summary{display:none}}@media screen and (min-width:1000px){:root{--root-font-size: calc(8px + .8vw) }}@media screen and (min-width:2000px){:root{--root-font-size: 1.5rem}}@media screen and (max-height:600px){:root{--header-font-size: calc(10px + 10 * 100vh / 600);--root-font-size: .8rem;--header-height: 2rem}header .breadcrumb>*{padding-top:calc(8 + 8 * 100vh / 600)!important;padding-bottom:calc(8 + 8 * 100vh / 600)!important}}@media screen and (max-height:300px){:root{--header-font-size: 15px;--header-height: 28px ;--root-font-size: .6rem}header .breadcrumb>*{padding-top:14px!important;padding-bottom:14px!important}}@media screen and (orientation:landscape)and (min-width:700px){:root{--header-font-size: calc(8px + 8 * 100vh / 600)}header{display:flex;justify-content:space-between}header .headermain{order:1}header .breadcrumb{align-self:stretch}header .action-button{width:2em;height:2em}}@media print{:root{--primary-color: black;--primary-background: none;--header-background: none;--header-color: black}.headermain,.menu,.rename-button{display:none!important}.breadcrumb>a{color:#000!important;background:none!important;padding:0!important;margin:0!important;clip-path:none!important;max-width:none!important}.breadcrumb>a:after{content:"/"}.breadcrumb svg{fill:#000!important;margin:0 .5rem 0 1rem!important}body#app{position:static!important;height:auto!important}main{padding-bottom:0!important}thead tr{font-size:1rem!important;position:static!important;background:none!important;border-bottom:1pt solid black!important}audio::-webkit-media-controls-timeline,video::-webkit-media-controls-timeline{display:none}audio::-webkit-media-controls,video::-webkit-media-controls{display:none}tr,figure{page-break-inside:avoid}.selection{min-width:0!important;padding:0!important}.selection input{display:none}.selection input:checked{display:inherit}tbody .selection input:checked{opacity:1!important;transform:scale(.5);left:0}}*{box-sizing:border-box}html{font-size:var(--root-font-size);overflow:hidden}main{-ms-overflow-style:none;scrollbar-width:none}body{background-color:var(--primary-background);font-size:1rem;font-family:Roboto;color:var(--primary-color);margin:0;overflow:hidden;height:100vh;height:100dvh}tbody .size,tbody .modified{font-family:Roboto Mono}header{flex:0 0 auto;background-color:var(--header-background);color:var(--header-color);font-size:var(--header-font-size)}main{height:100%}::selection{color:#000;background:#ff0!important}button{font:inherit;color:inherit;margin:0;border:0;padding:0;background:none;cursor:pointer;min-width:1rem;min-height:1rem}input{margin:0}:focus{outline:none}a:link,a:visited,a:active,a:hover{color:var(--primary-color);text-decoration:none}table{border-collapse:collapse;border-spacing:0;border:0;gap:0}body#app{position:fixed;inset:0;display:flex;flex-direction:column}main{flex:1 1 auto;min-height:0;padding-bottom:3em;overflow-y:scroll;text-align:center}header nav.headermain{position:relative;z-index:100}.spacer{flex-grow:1}.smallgap{flex-shrink:1;width:2em}[data-tooltip]:hover:after{z-index:101;content:attr(data-tooltip);position:absolute;pointer-events:none;font-size:1rem;text-align:center;padding:.5rem 1rem;border-radius:3rem 0;box-shadow:0 0 1rem var(--accent-color);transform:translate(calc(1rem - 50%),150%);background-color:var(--accent-color);color:var(--primary-color);white-space:pre;animation:appearbriefly calc(10 * var(--transition-time)) linear forwards}@keyframes appearbriefly{0%{opacity:0}30%{opacity:0}40%{opacity:1}90%{opacity:1}to{opacity:0}}.error-message{padding:.5em;font-weight:700;background:var(--accent-color);color:#000}.transferprogress[data-v-fc92216f]{--bar: var(--accent-color);--nobar: var(--header-background);display:flex;flex-direction:column;color:var(--primary-color);width:100%}.statustext[data-v-fc92216f]{display:flex;align-items:center;margin:0 .5em;padding:.5rem 0}span[data-v-fc92216f]{color:#ccc;white-space:nowrap;text-align:right;padding:0 .5em}.filename[data-v-fc92216f]{color:#fff;flex:1 1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left}.index[data-v-fc92216f]{min-width:3.5em}.position[data-v-fc92216f],.speed[data-v-fc92216f]{min-width:4em}.upload .statustext[data-v-fc92216f]:before{font-size:1.5em;content:"🔺"}.download .statustext[data-v-fc92216f]:before{font-size:1.5em;content:"🔻"}:root{--breadcrumb-background-odd: #2d2d2d;--breadcrumb-background-even: #404040;--breadcrumb-color: #ddd;--breadcrumb-hover-color: #fff;--breadcrumb-hover-background-odd: #25a;--breadcrumb-hover-background-even: #812;--breadcrumb-transtime: .3s}.breadcrumb{flex:1 1 auto;display:flex;min-width:20%;max-width:100%;min-height:2em;margin:0;padding:0 1em 0 0;overflow:hidden}.breadcrumb>a{flex:0 4 auto;display:flex;align-items:center;margin:0 -.5em;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;color:var(--breadcrumb-color);padding:.3em 1.5em;clip-path:polygon(0 0,1em 50%,0 100%,100% 100%,100% 0,0 0);transition:all var(--breadcrumb-transtime)}.breadcrumb>a:first-child{flex:0 0 auto;padding-left:1.5em;padding-right:1.7em;clip-path:none}.breadcrumb>a:last-child{clip-path:polygon(0 0,calc(100% - 1em) 0,100% 50%,calc(100% - 1em) 100%,0 100%,1em 50%,0 0)}.breadcrumb>a:only-child{clip-path:polygon(0 0,calc(100% - 1em) 0,100% 50%,calc(100% - 1em) 100%,0 100%,0 0)}.breadcrumb svg{width:1.3em;height:1.3em;margin:-.5em;fill:var(--breadcrumb-color);transition:fill var(--breadcrumb-transtime)}.breadcrumb a:nth-child(odd){background:var(--breadcrumb-background-odd)}.breadcrumb a:nth-child(2n){background:var(--breadcrumb-background-even)}.breadcrumb a:nth-child(odd):hover,.breadcrumb a:focus:nth-child(odd){background:var(--breadcrumb-hover-background-odd)}.breadcrumb a:nth-child(2n):hover,.breadcrumb a:focus:nth-child(2n){background:var(--breadcrumb-hover-background-even)}.breadcrumb a:hover{color:var(--breadcrumb-hover-color)}.breadcrumb a:hover svg{fill:var(--breadcrumb-hover-color)}.breadcrumb a.current{color:var(--accent-color);max-width:none;flex:0 1 auto}.breadcrumb a.current svg{fill:var(--accent-color)}.action-button{background:none;border:none;color:#ccc;cursor:pointer;transition:all .2s ease;padding:.2em;width:3em;height:3em}.action-button:hover,.action-button:focus{color:#fff;transform:scale(1.1)}svg{fill:#ccc;transform:fill .2s ease}.action-button:hover svg,.action-button:focus svg{fill:#fff}@keyframes rotate-0494c508{0%{transform:rotate(0)}to{transform:rotate(360deg)}}svg.cog[data-v-0494c508]{width:10rem;height:10rem;margin:0 auto;animation:rotate-0494c508 10s linear infinite;filter:drop-shadow(0 0 1rem black);fill:#888}svg.cog.stopped[data-v-0494c508]{animation:none}input#FileRenameInput{color:var(--input-color);background:var(--input-background);border:0;border-radius:.3rem;padding:.4rem;margin:-.4rem;width:100%;outline:none;font:inherit}.gallery input#FileRenameInput{padding:.75em;font-weight:600;width:auto}img[data-v-47490c5c],embed[data-v-47490c5c],.icon[data-v-47490c5c],audio[data-v-47490c5c],video[data-v-47490c5c]{font-size:8em;overflow:hidden;min-width:50%;max-width:100%;max-height:100%;border-radius:.0625em}.folder[data-v-47490c5c]:before{content:"📁"}.folder[data-v-47490c5c]:hover:before,.cursor .folder[data-v-47490c5c]:before{content:"📂"}.archive[data-v-47490c5c]:before{content:"📦"}.file[data-v-47490c5c]:before{content:"📄"}.ext-img[data-v-47490c5c]:before{content:"💿"}.ext-exe[data-v-47490c5c]:before,.ext-msi[data-v-47490c5c]:before,.ext-dmg[data-v-47490c5c]:before,.ext-pkg[data-v-47490c5c]:before{content:"⚙️"}.ext-torrent[data-v-47490c5c]:before{content:"🏴☠️"}.audio audio[data-v-47490c5c]{opacity:0;transition:opacity var(--transition-time) ease-in-out}.audio:hover audio[data-v-47490c5c]{opacity:1}.audio.icon[data-v-47490c5c]:before{width:100%;content:"🔈"}.audio.icon[data-v-47490c5c]:has(audio[data-playing]):before{position:absolute;content:"🔊";bottom:0}.icon[data-v-47490c5c]{filter:brightness(.9)}figure.cursor .icon[data-v-47490c5c]{filter:brightness(1)}img[data-v-47490c5c]:before{text-shadow:0 0 .5rem #000;filter:grayscale(1);content:"❌"}.video-container[data-v-47490c5c]{position:relative;display:flex;align-items:center;justify-content:center;min-width:50%;max-width:100%;max-height:100%}.video-container video[data-v-47490c5c]{width:100%;height:100%;border-radius:.0625em;object-fit:contain}.play-overlay[data-v-47490c5c]{position:absolute;display:flex;align-items:center;justify-content:center;pointer-events:none;width:4em;height:4em;background:#0003;border-radius:50%;transition:opacity .2s ease,transform .2s ease}.play-overlay svg[data-v-47490c5c]{width:2em;height:2em;fill:#fff;margin-left:.25em}.video-container:hover .play-overlay[data-v-47490c5c]{transform:scale(1.1)}video[data-playing]+.play-overlay[data-v-47490c5c]{opacity:0}.cursor-tooltip[data-v-c5d421fc]{position:fixed;z-index:10000;padding:.5rem 1rem;border-radius:3rem 0;box-shadow:0 0 1rem var(--accent-color);background-color:var(--accent-color);color:var(--primary-color);white-space:nowrap;pointer-events:none;font-size:1rem}.tooltip-name[data-v-91479c1d]{font-weight:600;text-align:center}.tooltip-details[data-v-91479c1d]{text-align:center}figure[data-v-91479c1d]{max-height:15em;position:relative;border-radius:.5em;margin:0;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden}figure>article[data-v-91479c1d]{flex:0 0 auto}figure[data-v-91479c1d] .video-container{height:15em}.titlespacer[data-v-91479c1d]{flex-shrink:100000;width:100%;height:2em}figcaption[data-v-91479c1d]{position:absolute;overflow:hidden;bottom:0;display:flex;align-items:center;justify-content:center;width:100%}figcaption input[type=checkbox][data-v-91479c1d]{width:1.5em;height:1.5em;margin:.25em 0 .25em .25em;opacity:0;flex-shrink:0;transition:opacity var(--transition-time) ease-in-out}figcaption input[type=checkbox][data-v-91479c1d]:checked,figcaption:hover input[type=checkbox][data-v-91479c1d]{opacity:1}figcaption span[data-v-91479c1d]{cursor:default;padding:.5em;color:#fff;font-weight:600;text-shadow:0 0 .2em #000,0 0 .2em #000;text-wrap:nowrap;text-overflow:ellipsis;overflow:hidden}.cursor figcaption span[data-v-91479c1d]{color:var(--accent-color)}figcaption .namespacer[data-v-91479c1d]{flex-shrink:100000;height:2em;width:2em}.gallery[data-v-9973e293]{padding:1em;width:100%;display:grid;gap:.5em;grid-template-columns:repeat(auto-fill,minmax(15em,1fr));align-items:end}.folder-indicator[data-v-9973e293]{grid-column:1 / -1}.folder-start[data-v-9973e293]{grid-column-start:1}.size.empty[data-v-444c7802]{color:#555}.size.bytes[data-v-444c7802]{color:#77a}.size.kB[data-v-444c7802]{color:#474}.size.MB[data-v-444c7802]{color:#a80}.size.GB[data-v-444c7802]{color:#f83}.size.TB[data-v-444c7802],.size.PB[data-v-444c7802],.size.EB[data-v-444c7802],.size.huge[data-v-444c7802]{color:#f44;text-shadow:0 0 .2em}@media(prefers-color-scheme:dark){.size.empty[data-v-444c7802]{color:#bbb}.size.bytes[data-v-444c7802]{color:#99d}.size.kB[data-v-444c7802]{color:#aea}.size.MB[data-v-444c7802]{color:#ff4}.size.GB[data-v-444c7802]{color:#f86}.size.TB[data-v-444c7802],.size.PB[data-v-444c7802],.size.EB[data-v-444c7802],.size.huge[data-v-444c7802]{color:#f55}}.cursor .size[data-v-444c7802]{color:inherit;text-shadow:none}table[data-v-c61c7c3a]{width:100%;table-layout:fixed}thead tr[data-v-c61c7c3a]{position:sticky;top:0;z-index:2}tbody tr[data-v-c61c7c3a]{position:relative;z-index:auto}table thead .selection input[type=checkbox][data-v-c61c7c3a]{position:inherit;width:1rem;height:1rem;padding:0;margin:auto}table tbody .selection input[type=checkbox][data-v-c61c7c3a]{width:2rem;height:2rem}table .selection[data-v-c61c7c3a]{width:3rem;text-align:center;text-overflow:clip;padding:0}table .selection input[data-v-c61c7c3a]{margin:auto}table .modified[data-v-c61c7c3a]{width:10rem;text-overflow:clip}table .size[data-v-c61c7c3a]{width:7rem;text-overflow:clip}table .menu[data-v-c61c7c3a]{width:2rem}tbody td[data-v-c61c7c3a]{font-size:1.2rem}table th[data-v-c61c7c3a],table td[data-v-c61c7c3a]{padding:0 .5rem;font-weight:400;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.name[data-v-c61c7c3a]{white-space:nowrap;position:relative}.name .rename-button[data-v-c61c7c3a]{position:absolute;right:0;animation:appear-c61c7c3a calc(5 * var(--transition-time)) linear}@keyframes appear-c61c7c3a{0%{opacity:0}80%{opacity:0}to{opacity:1}}thead tr[data-v-c61c7c3a]{font-size:.8rem;background:linear-gradient(to bottom,#eee,#fff 30%,#ddd);color:#000;box-shadow:0 0 .2rem #000}tbody tr.cursor[data-v-c61c7c3a]{background:var(--accent-color)}.right[data-v-c61c7c3a]{text-align:right}.sortcolumn[data-v-c61c7c3a]:hover{cursor:pointer}.sortcolumn[data-v-c61c7c3a]:hover:after{color:var(--accent-color)}.sortcolumn[data-v-c61c7c3a]{padding-right:1.5rem}.sortcolumn[data-v-c61c7c3a]:after{font-size:1rem;content:"▸";color:#888;margin-left:.5rem;margin-top:-.2rem;position:absolute;transition:all var(--transition-time) linear}.sortactive[data-v-c61c7c3a]:after{transform:rotate(90deg);color:var(--accent-color)}.name a[data-v-c61c7c3a]{text-decoration:none}tbody .selection input[data-v-c61c7c3a]{z-index:1;position:absolute;opacity:0;left:.5rem;top:0}.selection[data-v-c61c7c3a]{width:2em;height:2em}.selection input[data-v-c61c7c3a]:checked{opacity:.7}.file .selection[data-v-c61c7c3a]:before{content:"📄";font-size:1.5rem}.folder .selection[data-v-c61c7c3a]:before{height:2rem;content:"📁";font-size:1.5rem}.empty-container[data-v-c61c7c3a]{padding-top:3rem;text-align:center;font-size:3rem;color:var(--accent-color)}.folder-change[data-v-c61c7c3a]{margin-left:-.5rem}.loc[data-v-c61c7c3a],.summary[data-v-c61c7c3a]{color:#888}.empty-container[data-v-3425a1f1]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;font-size:2rem;text-shadow:0 0 .3rem #000,0 0 2rem #0008;color:var(--accent-color)}.search-loading[data-v-3425a1f1]{position:fixed;bottom:1rem;right:1rem;padding:.5rem 1rem;background:var(--accent-color, #007bff);color:#fff;border-radius:.25rem;font-size:.875rem;opacity:.9}.buttons[data-v-b8abc548]{flex:1000 0 auto;padding:0;display:flex;align-items:center;z-index:10}input[type=search][data-v-b8abc548]{background:var(--input-background);color:var(--input-color);border:0;border-radius:.1em;outline:none;max-width:15ch}.select-text{color:var(--accent-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0}.modal-overlay{position:fixed;inset:0;z-index:1100;display:flex;align-items:center;justify-content:center}.modal-dialog{background:#ddd;color:#000;border:none;border-radius:.5rem;box-shadow:0 0 1rem #0008;padding:0;max-width:90vw;max-height:90vh;overflow:auto;font-size:1rem}.modal-dialog>h1{background:#146;color:#fff;font-size:1.2rem;font-weight:400;margin:0;padding:.5rem 1rem;position:sticky;top:0}.modal-dialog>.modal-content{padding:1rem}.modal-dialog h3{font-size:1rem;font-weight:600;margin:1rem 0 .5rem}.modal-dialog h3:first-child{margin-top:0}.modal-dialog a{color:#146}.modal-dialog a:hover{color:#f80}.modal-dialog input[type=text],.modal-dialog input[type=password],.modal-dialog select{font:inherit;font-size:1rem;padding:.5rem;border:2px solid #888;border-radius:.25rem;background:#fff;color:#000;min-width:12rem}.modal-dialog input[type=text]:focus,.modal-dialog input[type=password]:focus,.modal-dialog select:focus{outline:none;border-color:#f80}.modal-dialog label{font-size:1rem}.modal-dialog button,.modal-dialog input[type=submit],.modal-dialog input[type=reset],.modal-dialog .button{font:inherit;font-size:1rem;padding:.5rem 1rem;background:#146;color:#fff;border:none;border-radius:.25rem;cursor:pointer}.modal-dialog button:hover,.modal-dialog input[type=submit]:hover,.modal-dialog input[type=reset]:hover,.modal-dialog .button:hover{background:#f80}.modal-dialog button:disabled,.modal-dialog input[type=submit]:disabled,.modal-dialog input[type=reset]:disabled,.modal-dialog .button:disabled{background:#888;cursor:not-allowed}.modal-dialog .button.small{padding:.25rem .5rem;font-size:.875rem}.modal-dialog .button.danger{background:#c00}.modal-dialog .button.danger:hover:not(:disabled){background:red}.modal-dialog .form-row{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1rem;align-items:center;margin-bottom:.5rem}.modal-dialog .form-grid{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1rem;align-items:center}.modal-dialog .dialog-buttons{display:flex;justify-content:flex-end;align-items:center;gap:.5rem;margin-top:1rem}.modal-dialog .error-text{color:#c00;font-size:.875rem;min-height:1.2em;margin:.5rem 0}.modal-dialog .success-message{background:#f80;color:#000;padding:.5rem;border-radius:.25rem;margin:.5rem 0;display:flex;align-items:center;gap:.5rem;font-size:.875rem}.modal-dialog table{width:100%;border-collapse:collapse;margin:.5rem 0;font-size:1rem}.modal-dialog th,.modal-dialog td{border:1px solid #888;padding:.5rem;text-align:left}.modal-dialog th{background:#146;color:#fff;font-weight:400}.modal-dialog td{background:#fff}.modal-dialog td input[type=checkbox]{margin:0}.modal-dialog p{margin:0 0 .5rem;font-size:1rem}.modal-dialog .loading{padding:2rem;text-align:center;color:#666}.access-denied[data-v-eaaa3c09]{text-align:center;padding:2rem!important}.access-denied .icon[data-v-eaaa3c09]{font-size:4rem;margin:0 0 1rem}.access-denied .message[data-v-eaaa3c09]{font-size:1.5rem;font-weight:700;margin:0 0 1.5rem}.toast-message{position:fixed;top:1rem;left:50%;transform:translate(-50%);z-index:2000;padding:.75rem 1.5rem;background:var(--accent-color);color:#000;font-weight:700;border-radius:.25rem;box-shadow:0 .25rem 1rem #0000004d;cursor:pointer;max-width:90vw;text-align:center}.toast-message.status{background:#555;color:#fff}:root{--vue-scroll-rect-scrollbar-thumb-color: rgba(122,122,122, .3);--vue-scroll-rect-scrollbar-thumb-color-light: rgba(122, 122, 122, .5);--vue-scroll-rect-scrollbar-thumb-color-pressed: rgba(112, 112, 112, .2);--vue-scroll-rect-scrollbar-thumb-radius: 5px;--vue-scroll-rect-scrollbar-thumb-margin: 0px;--vue-scroll-rect-scrollbar-size: 8px}.vue-scroll-rect{position:relative;width:100%;height:100%;margin:0;overflow:hidden}.vue-scroll-rect>.scroll-content{position:relative;max-width:100%;max-height:100%;scrollbar-width:none;-ms-overflow-style:none}.vue-scroll-rect>.scroll-content::-webkit-scrollbar{width:0;height:0}.vue-scroll-rect>.scroll-content::-ms-scrollbar{width:0;height:0}.vue-scroll-rect>.scroll-content.both{overflow:scroll}.vue-scroll-rect>.scroll-content.horizontal{overflow-x:scroll}.vue-scroll-rect>.scroll-content.vertical{overflow-y:scroll}.vue-scroll-rect:hover>.scrollbar{opacity:1;transition:opacity .1s}.vue-scroll-rect.always-show-scrollbar>.scrollbar,.vue-scroll-rect .dragging>.scrollbar{opacity:1}.vue-scroll-rect.background-clickable>.scrollbar{pointer-events:all}.vue-scroll-rect>.scrollbar{position:absolute;opacity:0;transition:opacity 1.5s;pointer-events:none}.vue-scroll-rect>.scrollbar:hover{opacity:1}.vue-scroll-rect>.scrollbar .thumb{position:absolute;background-color:var(--vue-scroll-rect-scrollbar-thumb-color);border-radius:var(--vue-scroll-rect-scrollbar-thumb-radius);pointer-events:all}.vue-scroll-rect>.scrollbar .thumb:hover{background-color:var(--vue-scroll-rect-scrollbar-thumb-color-light)}.vue-scroll-rect>.scrollbar .thumb:active{background-color:var(--vue-scroll-rect-scrollbar-thumb-color-pressed)}.vue-scroll-rect>.scrollbar.horizontal{left:0;bottom:0;right:0;height:var(--vue-scroll-rect-scrollbar-size)}.vue-scroll-rect>.scrollbar.horizontal .thumb{top:var(--vue-scroll-rect-scrollbar-thumb-margin);bottom:var(--vue-scroll-rect-scrollbar-thumb-margin)}.vue-scroll-rect>.scrollbar.vertical{top:0;bottom:0;right:0;width:var(--vue-scroll-rect-scrollbar-size)}.vue-scroll-rect>.scrollbar.vertical .thumb{left:var(--vue-scroll-rect-scrollbar-thumb-margin);right:var(--vue-scroll-rect-scrollbar-thumb-margin)}:root{--mx-menu-backgroud: #fff;--mx-menu-hover-backgroud: #f1f1f1;--mx-menu-active-backgroud: #dfdfdf;--mx-menu-open-backgroud: #f1f1f1;--mx-menu-open-hover-backgroud: #f1f1f1;--mx-menu-divider: #f0f0f0;--mx-menu-text: #2e2e2e;--mx-menu-hover-text: #2e2e2e;--mx-menu-active-text: #2e2e2e;--mx-menu-open-text: #2e2e2e;--mx-menu-open-hover-text: #2e2e2e;--mx-menu-disabled-text: #c9c8c8;--mx-menu-icon-size: 16px;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-scrollbar-thumb-color: rgba(0, 0, 0, .2);--mx-menu-scrollbar-thumb-color-light: rgba(0, 0, 0, .3);--mx-menu-scrollbar-thumb-color-pressed: rgba(0, 0, 0, .1);--mx-menu-shortcut-backgroud: #ebebeb;--mx-menu-shortcut-backgroud-hover:#ebebeb;--mx-menu-shortcut-backgroud-active:#ebebeb;--mx-menu-shortcut-backgroud-open:#ebebeb;--mx-menu-shortcut-backgroud-disabled:#fdfdfd;--mx-menu-shortcut-text: #424242;--mx-menu-shortcut-text-hover: #424242;--mx-menu-shortcut-text-active: #424242;--mx-menu-shortcut-text-open: #424242;--mx-menu-shortcut-text-disabled: #a5a5a5;--mx-menu-placeholder-width: 24px}.mx-context-menu{pointer-events:all;display:inline-block;overflow:visible;position:absolute;background-color:var(--mx-menu-backgroud);border-radius:var(--mx-menu-backgroud-radius);padding:12px 0;box-shadow:0 10px 40px 10px var(--mx-menu-shadow-color);opacity:1;transition:opacity .2s ease-in-out;--vue-scroll-rect-scrollbar-thumb-color: var(--mx-menu-scrollbar-thumb-color);--vue-scroll-rect-scrollbar-thumb-color-light: var(--mx-menu-scrollbar-thumb-color-light);--vue-scroll-rect-scrollbar-thumb-color-pressed: var(--mx-menu-scrollbar-thumb-color-pressed)}.mx-context-menu-items{position:relative;overflow:visible}.mx-context-menu-scroll{overscroll-behavior:contain}.mx-context-menu-item{display:flex;flex-direction:row;justify-content:space-between;align-items:center;position:relative;padding:6px 15px;-webkit-user-select:none;user-select:none;overflow:visible;white-space:nowrap;text-overflow:ellipsis;color:var(--mx-menu-text)}.mx-context-menu-item .mx-right-arrow,.mx-context-menu-item .mx-checked-mark{fill:var(--mx-menu-text)}.mx-context-menu-item:hover{background-color:var(--mx-menu-hover-backgroud);color:var(--mx-menu-hover-text)}.mx-context-menu-item:hover .mx-right-arrow,.mx-context-menu-item:hover .mx-checked-mark{fill:var(--mx-menu-hover-text)}.mx-context-menu-item:hover .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-hover);color:var(--mx-menu-shortcut-text-hover)}.mx-context-menu-item:active{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text)}.mx-context-menu-item:active .mx-right-arrow,.mx-context-menu-item:active .mx-checked-mark{fill:var(--mx-menu-active-text)}.mx-context-menu-item:active .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-active);color:var(--mx-menu-shortcut-text-active)}.mx-context-menu-item.open{background-color:var(--mx-menu-open-backgroud);color:var(--mx-menu-open-text)}.mx-context-menu-item.open:hover{background-color:var(--mx-menu-open-hover-backgroud);color:var(--mx-menu-open-hover-text)}.mx-context-menu-item.open .mx-right-arrow,.mx-context-menu-item.open .mx-checked-mark{fill:var(--mx-menu-open-text)}.mx-context-menu-item.open .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-open);color:var(--mx-menu-shortcut-text-open)}.mx-context-menu-item.keyboard-focus{background-color:var(--mx-menu-active-backgroud)}.mx-context-menu-item.disabled{color:var(--mx-menu-disabled-text);cursor:not-allowed}.mx-context-menu-item.disabled:hover,.mx-context-menu-item.disabled:active{background-color:transparent}.mx-context-menu-item.disabled .mx-right-arrow,.mx-context-menu-item.disabled .mx-checked-mark{fill:var(--mx-menu-disabled-text)}.mx-context-menu-item.disabled .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-disabled);color:var(--mx-menu-shortcut-text-second)}.mx-context-menu-item .mx-item-row{display:flex;flex-direction:row;align-items:center;max-width:100%}.mx-context-menu-item .mx-icon-placeholder{position:relative;display:flex;flex-direction:row;align-items:center;height:auto;overflow:hidden}.mx-context-menu-item .mx-icon-placeholder.preserve-width{width:var(--mx-menu-placeholder-width)}.mx-context-menu-item .icon{display:inline-block;font-size:var(--mx-menu-icon-size)}.mx-context-menu-item .icon.svg{width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-context-menu-item .label{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-inline-end:16px}.mx-context-menu-item-wrapper{position:relative}.mx-context-menu-item-sperator{display:block;padding:5px 0;background-color:var(--mx-menu-backgroud)}.mx-context-menu-item-sperator:after{display:block;content:"";background-color:var(--mx-menu-divider);height:1px}.mx-right-arrow{width:14px;height:14px}.mx-checked-mark{width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-shortcut{position:relative;justify-self:flex-end;font-size:11.5px;padding:2px 4px;background-color:var(--mx-menu-shortcut-backgroud);color:var(--mx-menu-shortcut-text)}.mx-menu-bar.dark,.mx-context-menu.dark{--mx-menu-backgroud: #303031;--mx-menu-hover-backgroud: #636363;--mx-menu-active-backgroud: #555555;--mx-menu-open-backgroud: #636363;--mx-menu-open-hover-backgroud: #636363;--mx-menu-divider: #464646;--mx-menu-text: #ffffff;--mx-menu-hover-text: #ffffff;--mx-menu-active-text: #ffffff;--mx-menu-open-text: #ffffff;--mx-menu-open-hover-text: #ffffff;--mx-menu-disabled-text: #9c9c9c;--mx-menu-shadow-color: rgba(51, 51, 51, .2);--mx-menu-scrollbar-thumb-color: rgba(255, 255, 255, .3);--mx-menu-scrollbar-thumb-color-light: rgba(255, 255, 255, .5);--mx-menu-scrollbar-thumb-color-pressed: rgba(255, 255, 255, .2);--mx-menu-shortcut-backgroud: #505050;--mx-menu-shortcut-backgroud-hover:#505050;--mx-menu-shortcut-backgroud-active:#505050;--mx-menu-shortcut-backgroud-open:#505050;--mx-menu-shortcut-backgroud-disabled:#444444;--mx-menu-shortcut-text: #f1f1f1;--mx-menu-shortcut-text-hover: #ffffff;--mx-menu-shortcut-text-active: #ffffff;--mx-menu-shortcut-text-open: #ffffff;--mx-menu-shortcut-text-disabled: #9d9d9d}.mx-menu-bar.flat,.mx-context-menu.flat{border-radius:0;padding:7px 0;box-shadow:0 1px 2px 1px var(--mx-menu-shadow-color)}.mx-menu-bar.flat .mx-context-menu-item,.mx-context-menu.flat .mx-context-menu-item{padding:3px 12px}.mx-menu-bar.win10,.mx-context-menu.win10{border-radius:0;padding:8px 0;border:1px solid var(--mx-menu-border-color);box-shadow:2px 2px 1px 0 var(--mx-menu-shadow-color)}.mx-menu-bar.win10,.mx-context-menu.win10{--mx-menu-backgroud: #eeeeee;--mx-menu-hover-backgroud: #d8d8d8;--mx-menu-active-backgroud: #dfdfdf;--mx-menu-open-backgroud: #f1f1f1;--mx-menu-open-hover-backgroud: #d8d8d8;--mx-menu-divider: #aaaaaa;--mx-menu-border-color: #b1b1b1;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover: transparent;--mx-menu-shortcut-backgroud-active: transparent;--mx-menu-shortcut-backgroud-open: transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #272727;--mx-menu-shortcut-text-hover: #272727;--mx-menu-shortcut-text-active: #272727;--mx-menu-shortcut-text-open: #272727;--mx-menu-shortcut-text-disabled: #6b6b6b}.mx-menu-bar.win10 .mx-context-menu-item,.mx-context-menu.win10 .mx-context-menu-item{padding:2px 4px;margin:0 4px}.mx-menu-bar.win10 .mx-context-menu-item-sperator,.mx-context-menu.win10 .mx-context-menu-item-sperator{margin:0 4px}.mx-menu-bar.win10.dark,.mx-context-menu.win10.dark{--mx-menu-backgroud: #303031;--mx-menu-hover-backgroud: #636363;--mx-menu-active-backgroud: #555555;--mx-menu-open-backgroud: #636363;--mx-menu-open-hover-backgroud: #636363;--mx-menu-divider: #808080;--mx-menu-border-color: #656565;--mx-menu-shortcut-backgroud: #505050;--mx-menu-shortcut-backgroud-hover:#505050;--mx-menu-shortcut-backgroud-active:#505050;--mx-menu-shortcut-backgroud-open:#505050;--mx-menu-shortcut-backgroud-disabled:#444444;--mx-menu-shortcut-text: #f1f1f1;--mx-menu-shortcut-text-hover: #ffffff;--mx-menu-shortcut-text-active: #ffffff;--mx-menu-shortcut-text-open: #ffffff;--mx-menu-shortcut-text-disabled: #9d9d9d;padding:8px 0}.mx-menu-bar.win10.dark .mx-context-menu-item,.mx-context-menu.win10.dark .mx-context-menu-item{padding:6px 12px;margin:0}.mx-menu-bar.win10.dark .mx-context-menu-item-sperator,.mx-context-menu.win10.dark .mx-context-menu-item-sperator{margin:0 7px}.mx-menu-bar.mac,.mx-context-menu.mac{padding:8px 0;box-shadow:0 5px 7px 1px var(--mx-menu-shadow-color);border:1px solid var(--mx-menu-border-color)}.mx-menu-bar.mac,.mx-context-menu.mac{--mx-menu-backgroud: #ececec;--mx-menu-hover-backgroud: #0165e1;--mx-menu-active-backgroud: #0165e1;--mx-menu-open-backgroud: #858585;--mx-menu-open-hover-backgroud: #0165e1;--mx-menu-divider: #d2d2d2;--mx-menu-text: #232323;--mx-menu-hover-text: #fff;--mx-menu-active-text: #fff;--mx-menu-open-text: #fff;--mx-menu-open-hover-text: #fff;--mx-menu-disabled-text: #bbbbbb;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover:transparent;--mx-menu-shortcut-backgroud-active:transparent;--mx-menu-shortcut-backgroud-open:transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #424242;--mx-menu-shortcut-text-hover: #fff;--mx-menu-shortcut-text-active: #fff;--mx-menu-shortcut-text-open: #fff;--mx-menu-shortcut-text-disabled: #a5a5a5;--mx-menu-border-color: #bbbbbb}.mx-menu-bar.mac.dark,.mx-context-menu.mac.dark{--mx-menu-backgroud: #333333;--mx-menu-hover-backgroud: #0153d2;--mx-menu-active-backgroud: #0153d2;--mx-menu-open-hover-backgroud: #0153d2;--mx-menu-open-backgroud: #414346;--mx-menu-divider: #575757;--mx-menu-text: #dcdcdc;--mx-menu-hover-text: #fff;--mx-menu-active-text: #fff;--mx-menu-open-text: #fff;--mx-menu-open-hover-text: #fff;--mx-menu-disabled-text: #6a6a6a;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover:transparent;--mx-menu-shortcut-backgroud-active:transparent;--mx-menu-shortcut-backgroud-open:transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #dadada;--mx-menu-shortcut-text-hover: #fff;--mx-menu-shortcut-text-active: #fff;--mx-menu-shortcut-text-open: #fff;--mx-menu-shortcut-text-disabled: #6a6a6a;--mx-menu-border-color: #222}.mx-menu-bar.mac .mx-context-menu-item,.mx-context-menu.mac .mx-context-menu-item{border-radius:5px;margin:0 6px;padding:3px 6px}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text);outline:none}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-right-arrow,.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-checked-mark,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-right-arrow,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-checked-mark{fill:var(--mx-menu-active-text)}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-shortcut,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-active);color:var(--mx-menu-shortcut-text-active)}.mx-menu-bar.mac .mx-context-menu-item-sperator,.mx-context-menu.mac .mx-context-menu-item-sperator{margin:0 12px}.mx-context-menu .vue-scroll-rect>.scroll-content{overflow-y:scroll;height:100%;width:auto;position:relative!important}.mx-menu-ghost-host{position:absolute;inset:0;overflow:hidden;pointer-events:none}.mx-menu-ghost-host.fullscreen{position:fixed}.mx-menu-bar{flex:1;display:flex;flex-direction:row;align-items:center;background-color:var(--mx-menu-backgroud);padding:5px 0}.mx-menu-bar.mini{flex-grow:0}.mx-menu-bar .mx-menu-bar-content{display:flex;flex-direction:row;align-items:center}.mx-menu-bar .mx-menu-bar-item{padding:2px 8px;border-radius:5px;-webkit-user-select:none;user-select:none;background-color:var(--mx-menu-backgroud);color:var(--mx-menu-text)}.mx-menu-bar .mx-menu-bar-item:hover{background-color:var(--mx-menu-hover-backgroud);color:var(--mx-menu-hover-text)}.mx-menu-bar .mx-menu-bar-item:hover .mx-menu-bar-icon-menu{fill:var(--mx-menu-hover-text)}.mx-menu-bar .mx-menu-bar-item:active,.mx-menu-bar .mx-menu-bar-item.active{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text)}.mx-menu-bar .mx-menu-bar-item:active .mx-menu-bar-icon-menu,.mx-menu-bar .mx-menu-bar-item.active .mx-menu-bar-icon-menu{fill:var(--mx-menu-active-text)}.mx-menu-bar .mx-menu-bar-icon-menu{fill:var(--mx-menu-text);width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-menu-bar.flat .mx-menu-bar-item{border-radius:0}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(){"use strict";let d=[],i=[],u=0;function y(t){return"^"+t.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase()+"$"}function w(t){const e=t.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase();return{based:e,words:e.split(/\s+/)}}function C(t,e){const{based:s,words:c}=e;return t.includes(s)||c&&c.every(n=>t.includes(n))}const m=new Intl.Collator("en",{sensitivity:"base",numeric:!0,usage:"search"});function R(t){return[...t].sort((e,s)=>s.mtime-e.mtime)}function k(){return new Promise(t=>setTimeout(t,0))}async function F(t,e,s){const c=w(t),n=100,o=500,l=[];let g=0;for(let r=0;r<i.length&&l.length<n;r+=o){if(u!==s)return;const M=Math.min(r+o,i.length);for(let a=r;a<M&&l.length<n;a++){const h=i[a];C(h.haystack,c)&&l.push(h)}if(l.length>g&&u===s){g=l.length;const a=f(l,t,e);postMessage({type:"results",docs:a.map(p),id:s,done:!1})}r+o<i.length&&l.length<n&&await k()}if(u===s){const r=f(l,t,e);postMessage({type:"results",docs:r.map(p),id:s,done:!0})}}function f(t,e,s){const c=s+"/";return[...t].sort((n,o)=>(o.loc===s)-(n.loc===s)||(o.loc.slice(0,c.length)===c)-(n.loc.slice(0,c.length)===c)||m.compare(n.loc,o.loc)||(n.dir===!1)-(o.dir===!1)||o.name.includes(e)-n.name.includes(e)||m.compare(n.name,o.name))}function p(t){const{haystack:e,...s}=t;return s}self.onmessage=async t=>{const e=t.data;e.type==="update"?(d=e.documents.map(s=>({...s,haystack:y(s.name)})),i=R(d)):e.type==="search"&&(u=e.id,e.query?await F(e.query,e.loc,e.id):postMessage({type:"results",docs:[],id:e.id,done:!0}))}})();
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
8
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
9
|
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono&family=Roboto:wght@400;700&display=swap" rel="stylesheet">
|
|
10
|
-
<script type="module" crossorigin src="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-D2oWGW3J.js"></script>
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/icons-DMD182WZ.js">
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DEDFmpD8.css">
|
|
13
13
|
|
|
14
14
|
<body id="app">
|
|
@@ -89,9 +89,9 @@ def dispatch(path, quality, maxsize, maxzoom):
|
|
|
89
89
|
return process_video(path, quality=quality, maxsize=maxsize)
|
|
90
90
|
return process_image(path, quality=quality, maxsize=maxsize)
|
|
91
91
|
except ValueError as e:
|
|
92
|
-
logger.warning(f"Cannot generate preview for {path
|
|
92
|
+
logger.warning(f"Cannot generate preview for {path}: {e}")
|
|
93
93
|
except Exception as e:
|
|
94
|
-
logger.exception(f"Error generating preview for {path
|
|
94
|
+
logger.exception(f"Error generating preview for {path}: {e}")
|
|
95
95
|
|
|
96
96
|
|
|
97
97
|
def process_image(path, *, maxsize, quality):
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import{r as D,m as ao,e as io,i as re,h as ts,a as Rt,b as co,t as ns,g as os,o as ss,c as et,n as ve,d as Ve,f as K,w as Be,j as X,k as P,l as E,p as ne,q,s as We,u as Je,v as R,x as y,y as rs,z as un,A as tt,B as ge,C as ls,D as Ie,E as ee,F as dn,H as as,G as de,I as me,J as fe,K as st,L as Qe,M as is,N as ue,O as be,P as yt,Q as z,R as uo,S as fo,T as Re,U as cs,V as us,W as fn,X as $t,Y as Zt,Z as ds,_ as _n,$ as po,a0 as fs,a1 as wt,a2 as Qt,a3 as ps,a4 as mo,a5 as ms}from"./icons-DMD182WZ.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))o(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const l of r.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&o(l)}).observe(document,{childList:!0,subtree:!0});function n(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function o(s){if(s.ep)return;s.ep=!0;const r=n(s);fetch(s.href,r)}})();let ho;const Mt=e=>ho=e,go=Symbol();function en(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var dt;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(dt||(dt={}));function hs(){const e=io(!0),t=e.run(()=>D({}));let n=[],o=[];const s=ao({install(r){Mt(s),s._a=r,r.provide(go,s),r.config.globalProperties.$pinia=s,o.forEach(l=>n.push(l)),o=[]},use(r){return this._a?n.push(r):o.push(r),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return s}const vo=()=>{};function En(e,t,n,o=vo){e.add(t);const s=()=>{e.delete(t)&&o()};return!n&&os()&&ss(s),s}function qe(e,...t){e.forEach(n=>{n(...t)})}const gs=e=>e(),Rn=Symbol(),Wt=Symbol();function tn(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,o)=>e.set(o,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const o=t[n],s=e[n];en(s)&&en(o)&&e.hasOwnProperty(n)&&!Rt(o)&&!co(o)?e[n]=tn(s,o):e[n]=o}return e}const vs=Symbol();function ys(e){return!en(e)||!Object.prototype.hasOwnProperty.call(e,vs)}const{assign:Ne}=Object;function ws(e){return!!(Rt(e)&&e.effect)}function ks(e,t,n,o){const{state:s,actions:r,getters:l}=t,i=n.state.value[e];let a;function c(){i||(n.state.value[e]=s?s():{});const p=Ve(n.state.value[e]);return Ne(p,r,Object.keys(l||{}).reduce((u,m)=>(u[m]=ao(K(()=>{Mt(n);const f=n._s.get(e);return l[m].call(f,f)})),u),{}))}return a=yo(e,c,t,n,o,!0),a}function yo(e,t,n={},o,s,r){let l;const i=Ne({actions:{}},n),a={deep:!0};let c,p,u=new Set,m=new Set,f;const S=o.state.value[e];!r&&!S&&(o.state.value[e]={});let I;function b(x){let A;c=p=!1,typeof x=="function"?(x(o.state.value[e]),A={type:dt.patchFunction,storeId:e,events:f}):(tn(o.state.value[e],x),A={type:dt.patchObject,payload:x,storeId:e,events:f});const T=I=Symbol();ve().then(()=>{I===T&&(c=!0)}),p=!0,qe(u,A,o.state.value[e])}const g=r?function(){const{state:A}=n,T=A?A():{};this.$patch(J=>{Ne(J,T)})}:vo;function $(){l.stop(),u.clear(),m.clear(),o._s.delete(e)}const w=(x,A="")=>{if(Rn in x)return x[Wt]=A,x;const T=function(){Mt(o);const J=Array.from(arguments),Y=new Set,F=new Set;function H(G){Y.add(G)}function U(G){F.add(G)}qe(m,{args:J,name:T[Wt],store:h,after:H,onError:U});let Z;try{Z=x.apply(this&&this.$id===e?this:h,J)}catch(G){throw qe(F,G),G}return Z instanceof Promise?Z.then(G=>(qe(Y,G),G)).catch(G=>(qe(F,G),Promise.reject(G))):(qe(Y,Z),Z)};return T[Rn]=!0,T[Wt]=A,T},k={_p:o,$id:e,$onAction:En.bind(null,m),$patch:b,$reset:g,$subscribe(x,A={}){const T=En(u,x,A.detached,()=>J()),J=l.run(()=>Be(()=>o.state.value[e],Y=>{(A.flush==="sync"?p:c)&&x({storeId:e,type:dt.direct,events:f},Y)},Ne({},a,A)));return T},$dispose:$},h=et(k);o._s.set(e,h);const C=(o._a&&o._a.runWithContext||gs)(()=>o._e.run(()=>(l=io()).run(()=>t({action:w}))));for(const x in C){const A=C[x];if(Rt(A)&&!ws(A)||co(A))r||(S&&ys(A)&&(Rt(A)?A.value=S[x]:tn(A,S[x])),o.state.value[e][x]=A);else if(typeof A=="function"){const T=w(A,x);C[x]=T,i.actions[x]=A}}return Ne(h,C),Ne(ns(h),C),Object.defineProperty(h,"$state",{get:()=>o.state.value[e],set:x=>{b(A=>{Ne(A,x)})}}),o._p.forEach(x=>{Ne(h,l.run(()=>x({store:h,app:o._a,pinia:o,options:i})))}),S&&r&&n.hydrate&&n.hydrate(h.$state,S),c=!0,p=!0,h}function wo(e,t,n){let o;const s=typeof t=="function";o=s?n:t;function r(l,i){const a=ts();return l=l||(a?re(go,null):null),l&&Mt(l),l=ho,l._s.has(e)||(s?yo(e,t,o,l):ks(e,o,l)),l._s.get(e)}return r.$id=e,r}const bs={class:"statustext"},Cs={key:0,class:"index"},xs={class:"filename"},Ss={key:0,class:"percent"},_s={key:1,class:"position"},Es={class:"speed"},Rs=X({__name:"TransferBar",props:{status:{}},emits:["cancel"],setup(e){const t=e,n=K(()=>t.status.xfer/t.status.total*100),o=K(()=>{let r=t.status.statbytes/t.status.statdur/1e3;const l=(Date.now()-t.status.tlast)/1e3;return l>5/r?0:l>1/r?1/l:r}),s=K(()=>o.value?o.value.toFixed(o.value<10?1:0)+" MB/s":"stalled");return(r,l)=>e.status.total?(R(),P("div",{key:0,class:"transferprogress",style:Je(`background: linear-gradient(to right, var(--bar) 0, var(--bar) ${n.value}%, var(--nobar) ${n.value}%, var(--nobar) 100%);`)},[E("div",bs,[e.status.filecount>1?(R(),P("span",Cs," ["+ne(e.status.fileidx)+"/"+ne(e.status.filecount)+"] ",1)):q("",!0),E("span",xs,[We(ne(e.status.filename.split("/").pop())+" ",1),e.status.filesize>1e7?(R(),P("span",Ss,ne((e.status.filepos/e.status.filesize*100).toFixed(0)+" %"),1)):q("",!0)]),e.status.total>1e7?(R(),P("span",_s,ne((e.status.xfer/1e6).toFixed(0)+" / "+(e.status.total/1e6).toFixed(0)+" MB"),1)):q("",!0),E("span",Es,ne(s.value),1),E("button",{class:"close",onClick:l[0]||(l[0]=i=>r.$emit("cancel"))},"❌")])],4)):q("",!0)}}),ye=(e,t)=>{const n=e.__vccOpts||e;for(const[o,s]of t)n[o]=s;return n},Is=ye(Rs,[["__scopeId","data-v-fc92216f"]]);const Ke=typeof document<"u";function ko(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function As(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&ko(e.default)}const Q=Object.assign;function zt(e,t){const n={};for(const o in t){const s=t[o];n[o]=Se(s)?s.map(e):e(s)}return n}const ft=()=>{},Se=Array.isArray;function In(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}let le=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const bo=Symbol("");le.MATCHER_NOT_FOUND+"",le.NAVIGATION_GUARD_REDIRECT+"",le.NAVIGATION_ABORTED+"",le.NAVIGATION_CANCELLED+"",le.NAVIGATION_DUPLICATED+"";function nt(e,t){return Q(new Error,{type:e,[bo]:!0},t)}function $e(e,t){return e instanceof Error&&bo in e&&(t==null||!!(e.type&t))}const $s=["params","query","hash"];function Ms(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of $s)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}const Ps=Symbol(""),An=Symbol(""),Pt=Symbol(""),Co=Symbol(""),nn=Symbol("");function pn(){return re(Pt)}const xo=/#/g,Os=/&/g,Ns=/\//g,Ts=/=/g,Ls=/\?/g,So=/\+/g,Ds=/%5B/g,Bs=/%5D/g,_o=/%5E/g,Fs=/%60/g,Eo=/%7B/g,Hs=/%7C/g,Ro=/%7D/g,Ws=/%20/g;function mn(e){return e==null?"":encodeURI(""+e).replace(Hs,"|").replace(Ds,"[").replace(Bs,"]")}function zs(e){return mn(e).replace(Eo,"{").replace(Ro,"}").replace(_o,"^")}function on(e){return mn(e).replace(So,"%2B").replace(Ws,"+").replace(xo,"%23").replace(Os,"%26").replace(Fs,"`").replace(Eo,"{").replace(Ro,"}").replace(_o,"^")}function Us(e){return on(e).replace(Ts,"%3D")}function js(e){return mn(e).replace(xo,"%23").replace(Ls,"%3F")}function Vs(e){return js(e).replace(Ns,"%2F")}function kt(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const qs=/\/$/,Gs=e=>e.replace(qs,"");function Ut(e,t,n="/"){let o,s={},r="",l="";const i=t.indexOf("#");let a=t.indexOf("?");return a=i>=0&&a>i?-1:a,a>=0&&(o=t.slice(0,a),r=t.slice(a,i>0?i:t.length),s=e(r.slice(1))),i>=0&&(o=o||t.slice(0,i),l=t.slice(i,t.length)),o=Xs(o??t,n),{fullPath:o+r+l,path:o,query:s,hash:kt(l)}}function Ks(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function $n(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Js(e,t,n){const o=t.matched.length-1,s=n.matched.length-1;return o>-1&&o===s&&ot(t.matched[o],n.matched[s])&&Io(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function ot(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Io(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Ys(e[n],t[n]))return!1;return!0}function Ys(e,t){return Se(e)?Mn(e,t):Se(t)?Mn(t,e):(e&&e.valueOf())===(t&&t.valueOf())}function Mn(e,t){return Se(t)?e.length===t.length&&e.every((n,o)=>n===t[o]):e.length===1&&e[0]===t}function Xs(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/"),s=o[o.length-1];(s===".."||s===".")&&o.push("");let r=n.length-1,l,i;for(l=0;l<o.length;l++)if(i=o[l],i!==".")if(i==="..")r>1&&r--;else break;return n.slice(0,r).join("/")+"/"+o.slice(l).join("/")}const Pe={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let sn=(function(e){return e.pop="pop",e.push="push",e})({}),jt=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Zs(e){if(!e)if(Ke){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Gs(e)}const Qs=/^[^#]+#/;function er(e,t){return e.replace(Qs,"#")+t}function tr(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}const Ot=()=>({left:window.scrollX,top:window.scrollY});function nr(e){let t;if("el"in e){const n=e.el,o=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?o?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=tr(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Pn(e,t){return(history.state?history.state.position-t:-1)+e}const rn=new Map;function or(e,t){rn.set(e,t)}function sr(e){const t=rn.get(e);return rn.delete(e),t}function rr(e){return typeof e=="string"||e&&typeof e=="object"}function Ao(e){return typeof e=="string"||typeof e=="symbol"}function lr(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;o<n.length;++o){const s=n[o].replace(So," "),r=s.indexOf("="),l=kt(r<0?s:s.slice(0,r)),i=r<0?null:kt(s.slice(r+1));if(l in t){let a=t[l];Se(a)||(a=t[l]=[a]),a.push(i)}else t[l]=i}return t}function On(e){let t="";for(let n in e){const o=e[n];if(n=Us(n),o==null){o!==void 0&&(t+=(t.length?"&":"")+n);continue}(Se(o)?o.map(s=>s&&on(s)):[o&&on(o)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function ar(e){const t={};for(const n in e){const o=e[n];o!==void 0&&(t[n]=Se(o)?o.map(s=>s==null?null:""+s):o==null?o:""+o)}return t}function ct(){let e=[];function t(o){return e.push(o),()=>{const s=e.indexOf(o);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Te(e,t,n,o,s,r=l=>l()){const l=o&&(o.enterCallbacks[s]=o.enterCallbacks[s]||[]);return()=>new Promise((i,a)=>{const c=m=>{m===!1?a(nt(le.NAVIGATION_ABORTED,{from:n,to:t})):m instanceof Error?a(m):rr(m)?a(nt(le.NAVIGATION_GUARD_REDIRECT,{from:t,to:m})):(l&&o.enterCallbacks[s]===l&&typeof m=="function"&&l.push(m),i())},p=r(()=>e.call(o&&o.instances[s],t,n,c));let u=Promise.resolve(p);e.length<3&&(u=u.then(c)),u.catch(m=>a(m))})}function Vt(e,t,n,o,s=r=>r()){const r=[];for(const l of e)for(const i in l.components){let a=l.components[i];if(!(t!=="beforeRouteEnter"&&!l.instances[i]))if(ko(a)){const c=(a.__vccOpts||a)[t];c&&r.push(Te(c,n,o,l,i,s))}else{let c=a();r.push(()=>c.then(p=>{if(!p)throw new Error(`Couldn't resolve component "${i}" at "${l.path}"`);const u=As(p)?p.default:p;l.mods[i]=p,l.components[i]=u;const m=(u.__vccOpts||u)[t];return m&&Te(m,n,o,l,i,s)()}))}}return r}function ir(e,t){const n=[],o=[],s=[],r=Math.max(t.matched.length,e.matched.length);for(let l=0;l<r;l++){const i=t.matched[l];i&&(e.matched.find(c=>ot(c,i))?o.push(i):n.push(i));const a=e.matched[l];a&&(t.matched.find(c=>ot(c,a))||s.push(a))}return[n,o,s]}let cr=()=>location.protocol+"//"+location.host;function $o(e,t){const{pathname:n,search:o,hash:s}=t,r=e.indexOf("#");if(r>-1){let l=s.includes(e.slice(r))?e.slice(r).length:1,i=s.slice(l);return i[0]!=="/"&&(i="/"+i),$n(i,"")}return $n(n,e)+o+s}function ur(e,t,n,o){let s=[],r=[],l=null;const i=({state:m})=>{const f=$o(e,location),S=n.value,I=t.value;let b=0;if(m){if(n.value=f,t.value=m,l&&l===S){l=null;return}b=I?m.position-I.position:0}else o(f);s.forEach(g=>{g(n.value,S,{delta:b,type:sn.pop,direction:b?b>0?jt.forward:jt.back:jt.unknown})})};function a(){l=n.value}function c(m){s.push(m);const f=()=>{const S=s.indexOf(m);S>-1&&s.splice(S,1)};return r.push(f),f}function p(){if(document.visibilityState==="hidden"){const{history:m}=window;if(!m.state)return;m.replaceState(Q({},m.state,{scroll:Ot()}),"")}}function u(){for(const m of r)m();r=[],window.removeEventListener("popstate",i),window.removeEventListener("pagehide",p),document.removeEventListener("visibilitychange",p)}return window.addEventListener("popstate",i),window.addEventListener("pagehide",p),document.addEventListener("visibilitychange",p),{pauseListeners:a,listen:c,destroy:u}}function Nn(e,t,n,o=!1,s=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:s?Ot():null}}function dr(e){const{history:t,location:n}=window,o={value:$o(e,n)},s={value:t.state};s.value||r(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(a,c,p){const u=e.indexOf("#"),m=u>-1?(n.host&&document.querySelector("base")?e:e.slice(u))+a:cr()+e+a;try{t[p?"replaceState":"pushState"](c,"",m),s.value=c}catch(f){console.error(f),n[p?"replace":"assign"](m)}}function l(a,c){r(a,Q({},t.state,Nn(s.value.back,a,s.value.forward,!0),c,{position:s.value.position}),!0),o.value=a}function i(a,c){const p=Q({},s.value,t.state,{forward:a,scroll:Ot()});r(p.current,p,!0),r(a,Q({},Nn(o.value,a,null),{position:p.position+1},c),!1),o.value=a}return{location:o,state:s,push:i,replace:l}}function fr(e){e=Zs(e);const t=dr(e),n=ur(e,t.state,t.location,t.replace);function o(r,l=!0){l||n.pauseListeners(),history.go(r)}const s=Q({location:"",base:e,go:o,createHref:er.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}function pr(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),fr(e)}let ze=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var ce=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(ce||{});const mr={type:ze.Static,value:""},hr=/[a-zA-Z0-9_]/;function gr(e){if(!e)return[[]];if(e==="/")return[[mr]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(f){throw new Error(`ERR (${n})/"${c}": ${f}`)}let n=ce.Static,o=n;const s=[];let r;function l(){r&&s.push(r),r=[]}let i=0,a,c="",p="";function u(){c&&(n===ce.Static?r.push({type:ze.Static,value:c}):n===ce.Param||n===ce.ParamRegExp||n===ce.ParamRegExpEnd?(r.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),r.push({type:ze.Param,value:c,regexp:p,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function m(){c+=a}for(;i<e.length;){if(a=e[i++],a==="\\"&&n!==ce.ParamRegExp){o=n,n=ce.EscapeNext;continue}switch(n){case ce.Static:a==="/"?(c&&u(),l()):a===":"?(u(),n=ce.Param):m();break;case ce.EscapeNext:m(),n=o;break;case ce.Param:a==="("?n=ce.ParamRegExp:hr.test(a)?m():(u(),n=ce.Static,a!=="*"&&a!=="?"&&a!=="+"&&i--);break;case ce.ParamRegExp:a===")"?p[p.length-1]=="\\"?p=p.slice(0,-1)+a:n=ce.ParamRegExpEnd:p+=a;break;case ce.ParamRegExpEnd:u(),n=ce.Static,a!=="*"&&a!=="?"&&a!=="+"&&i--,p="";break;default:t("Unknown state");break}}return n===ce.ParamRegExp&&t(`Unfinished custom RegExp for param "${c}"`),u(),l(),s}const Tn="[^/]+?",vr={sensitive:!1,strict:!1,start:!0,end:!0};var he=(function(e){return e[e._multiplier=10]="_multiplier",e[e.Root=90]="Root",e[e.Segment=40]="Segment",e[e.SubSegment=30]="SubSegment",e[e.Static=40]="Static",e[e.Dynamic=20]="Dynamic",e[e.BonusCustomRegExp=10]="BonusCustomRegExp",e[e.BonusWildcard=-50]="BonusWildcard",e[e.BonusRepeatable=-20]="BonusRepeatable",e[e.BonusOptional=-8]="BonusOptional",e[e.BonusStrict=.7000000000000001]="BonusStrict",e[e.BonusCaseSensitive=.25]="BonusCaseSensitive",e})(he||{});const yr=/[.+*?^${}()[\]/\\]/g;function wr(e,t){const n=Q({},vr,t),o=[];let s=n.start?"^":"";const r=[];for(const c of e){const p=c.length?[]:[he.Root];n.strict&&!c.length&&(s+="/");for(let u=0;u<c.length;u++){const m=c[u];let f=he.Segment+(n.sensitive?he.BonusCaseSensitive:0);if(m.type===ze.Static)u||(s+="/"),s+=m.value.replace(yr,"\\$&"),f+=he.Static;else if(m.type===ze.Param){const{value:S,repeatable:I,optional:b,regexp:g}=m;r.push({name:S,repeatable:I,optional:b});const $=g||Tn;if($!==Tn){f+=he.BonusCustomRegExp;try{`${$}`}catch(k){throw new Error(`Invalid custom RegExp for param "${S}" (${$}): `+k.message)}}let w=I?`((?:${$})(?:/(?:${$}))*)`:`(${$})`;u||(w=b&&c.length<2?`(?:/${w})`:"/"+w),b&&(w+="?"),s+=w,f+=he.Dynamic,b&&(f+=he.BonusOptional),I&&(f+=he.BonusRepeatable),$===".*"&&(f+=he.BonusWildcard)}p.push(f)}o.push(p)}if(n.strict&&n.end){const c=o.length-1;o[c][o[c].length-1]+=he.BonusStrict}n.strict||(s+="/?"),n.end?s+="$":n.strict&&!s.endsWith("/")&&(s+="(?:/|$)");const l=new RegExp(s,n.sensitive?"":"i");function i(c){const p=c.match(l),u={};if(!p)return null;for(let m=1;m<p.length;m++){const f=p[m]||"",S=r[m-1];u[S.name]=f&&S.repeatable?f.split("/"):f}return u}function a(c){let p="",u=!1;for(const m of e){(!u||!p.endsWith("/"))&&(p+="/"),u=!1;for(const f of m)if(f.type===ze.Static)p+=f.value;else if(f.type===ze.Param){const{value:S,repeatable:I,optional:b}=f,g=S in c?c[S]:"";if(Se(g)&&!I)throw new Error(`Provided param "${S}" is an array but it is not repeatable (* or + modifiers)`);const $=Se(g)?g.join("/"):g;if(!$)if(b)m.length<2&&(p.endsWith("/")?p=p.slice(0,-1):u=!0);else throw new Error(`Missing required param "${S}"`);p+=$}}return p||"/"}return{re:l,score:o,keys:r,parse:i,stringify:a}}function kr(e,t){let n=0;for(;n<e.length&&n<t.length;){const o=t[n]-e[n];if(o)return o;n++}return e.length<t.length?e.length===1&&e[0]===he.Static+he.Segment?-1:1:e.length>t.length?t.length===1&&t[0]===he.Static+he.Segment?1:-1:0}function Mo(e,t){let n=0;const o=e.score,s=t.score;for(;n<o.length&&n<s.length;){const r=kr(o[n],s[n]);if(r)return r;n++}if(Math.abs(s.length-o.length)===1){if(Ln(o))return 1;if(Ln(s))return-1}return s.length-o.length}function Ln(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const br={strict:!1,end:!0,sensitive:!1};function Cr(e,t,n){const o=wr(gr(e.path),n),s=Q(o,{record:e,parent:t,children:[],alias:[]});return t&&!s.record.aliasOf==!t.record.aliasOf&&t.children.push(s),s}function xr(e,t){const n=[],o=new Map;t=In(br,t);function s(u){return o.get(u)}function r(u,m,f){const S=!f,I=Bn(u);I.aliasOf=f&&f.record;const b=In(t,u),g=[I];if("alias"in u){const k=typeof u.alias=="string"?[u.alias]:u.alias;for(const h of k)g.push(Bn(Q({},I,{components:f?f.record.components:I.components,path:h,aliasOf:f?f.record:I})))}let $,w;for(const k of g){const{path:h}=k;if(m&&h[0]!=="/"){const v=m.record.path,C=v[v.length-1]==="/"?"":"/";k.path=m.record.path+(h&&C+h)}if($=Cr(k,m,b),f?f.alias.push($):(w=w||$,w!==$&&w.alias.push($),S&&u.name&&!Fn($)&&l(u.name)),Po($)&&a($),I.children){const v=I.children;for(let C=0;C<v.length;C++)r(v[C],$,f&&f.children[C])}f=f||$}return w?()=>{l(w)}:ft}function l(u){if(Ao(u)){const m=o.get(u);m&&(o.delete(u),n.splice(n.indexOf(m),1),m.children.forEach(l),m.alias.forEach(l))}else{const m=n.indexOf(u);m>-1&&(n.splice(m,1),u.record.name&&o.delete(u.record.name),u.children.forEach(l),u.alias.forEach(l))}}function i(){return n}function a(u){const m=Er(u,n);n.splice(m,0,u),u.record.name&&!Fn(u)&&o.set(u.record.name,u)}function c(u,m){let f,S={},I,b;if("name"in u&&u.name){if(f=o.get(u.name),!f)throw nt(le.MATCHER_NOT_FOUND,{location:u});b=f.record.name,S=Q(Dn(m.params,f.keys.filter(w=>!w.optional).concat(f.parent?f.parent.keys.filter(w=>w.optional):[]).map(w=>w.name)),u.params&&Dn(u.params,f.keys.map(w=>w.name))),I=f.stringify(S)}else if(u.path!=null)I=u.path,f=n.find(w=>w.re.test(I)),f&&(S=f.parse(I),b=f.record.name);else{if(f=m.name?o.get(m.name):n.find(w=>w.re.test(m.path)),!f)throw nt(le.MATCHER_NOT_FOUND,{location:u,currentLocation:m});b=f.record.name,S=Q({},m.params,u.params),I=f.stringify(S)}const g=[];let $=f;for(;$;)g.unshift($.record),$=$.parent;return{name:b,path:I,params:S,matched:g,meta:_r(g)}}e.forEach(u=>r(u));function p(){n.length=0,o.clear()}return{addRoute:r,resolve:c,removeRoute:l,clearRoutes:p,getRoutes:i,getRecordMatcher:s}}function Dn(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function Bn(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Sr(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Sr(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const o in e.components)t[o]=typeof n=="object"?n[o]:n;return t}function Fn(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function _r(e){return e.reduce((t,n)=>Q(t,n.meta),{})}function Er(e,t){let n=0,o=t.length;for(;n!==o;){const r=n+o>>1;Mo(e,t[r])<0?o=r:n=r+1}const s=Rr(e);return s&&(o=t.lastIndexOf(s,o-1)),o}function Rr(e){let t=e;for(;t=t.parent;)if(Po(t)&&Mo(e,t)===0)return t}function Po({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Hn(e){const t=re(Pt),n=re(Co),o=K(()=>{const a=y(e.to);return t.resolve(a)}),s=K(()=>{const{matched:a}=o.value,{length:c}=a,p=a[c-1],u=n.matched;if(!p||!u.length)return-1;const m=u.findIndex(ot.bind(null,p));if(m>-1)return m;const f=Wn(a[c-2]);return c>1&&Wn(p)===f&&u[u.length-1].path!==f?u.findIndex(ot.bind(null,a[c-2])):m}),r=K(()=>s.value>-1&&Pr(n.params,o.value.params)),l=K(()=>s.value>-1&&s.value===n.matched.length-1&&Io(n.params,o.value.params));function i(a={}){if(Mr(a)){const c=t[y(e.replace)?"replace":"push"](y(e.to)).catch(ft);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:o,href:K(()=>o.value.href),isActive:r,isExactActive:l,navigate:i}}function Ir(e){return e.length===1?e[0]:e}const Ar=X({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Hn,setup(e,{slots:t}){const n=et(Hn(e)),{options:o}=re(Pt),s=K(()=>({[zn(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[zn(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const r=t.default&&Ir(t.default(n));return e.custom?r:tt("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},r)}}}),$r=Ar;function Mr(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Pr(e,t){for(const n in t){const o=t[n],s=e[n];if(typeof o=="string"){if(o!==s)return!1}else if(!Se(s)||s.length!==o.length||o.some((r,l)=>r.valueOf()!==s[l].valueOf()))return!1}return!0}function Wn(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const zn=(e,t,n)=>e??t??n,Or=X({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=re(nn),s=K(()=>e.route||o.value),r=re(An,0),l=K(()=>{let c=y(r);const{matched:p}=s.value;let u;for(;(u=p[c])&&!u.components;)c++;return c}),i=K(()=>s.value.matched[l.value]);ge(An,K(()=>l.value+1)),ge(Ps,i),ge(nn,s);const a=D();return Be(()=>[a.value,i.value,e.name],([c,p,u],[m,f,S])=>{p&&(p.instances[u]=c,f&&f!==p&&c&&c===m&&(p.leaveGuards.size||(p.leaveGuards=f.leaveGuards),p.updateGuards.size||(p.updateGuards=f.updateGuards))),c&&p&&(!f||!ot(p,f)||!m)&&(p.enterCallbacks[u]||[]).forEach(I=>I(c))},{flush:"post"}),()=>{const c=s.value,p=e.name,u=i.value,m=u&&u.components[p];if(!m)return Un(n.default,{Component:m,route:c});const f=u.props[p],S=f?f===!0?c.params:typeof f=="function"?f(c):f:null,b=tt(m,Q({},S,t,{onVnodeUnmounted:g=>{g.component.isUnmounted&&(u.instances[p]=null)},ref:a}));return Un(n.default,{Component:b,route:c})||b}}});function Un(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Oo=Or;function Nr(e){const t=xr(e.routes,e),n=e.parseQuery||lr,o=e.stringifyQuery||On,s=e.history,r=ct(),l=ct(),i=ct(),a=un(Pe);let c=Pe;Ke&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const p=zt.bind(null,d=>""+d),u=zt.bind(null,Vs),m=zt.bind(null,kt);function f(d,O){let M,N;return Ao(d)?(M=t.getRecordMatcher(d),N=O):N=d,t.addRoute(N,M)}function S(d){const O=t.getRecordMatcher(d);O&&t.removeRoute(O)}function I(){return t.getRoutes().map(d=>d.record)}function b(d){return!!t.getRecordMatcher(d)}function g(d,O){if(O=Q({},O||a.value),typeof d=="string"){const W=Ut(n,d,O.path),ae=t.resolve({path:W.path},O),Fe=s.createHref(W.fullPath);return Q(W,ae,{params:m(ae.params),hash:kt(W.hash),redirectedFrom:void 0,href:Fe})}let M;if(d.path!=null)M=Q({},d,{path:Ut(n,d.path,O.path).path});else{const W=Q({},d.params);for(const ae in W)W[ae]==null&&delete W[ae];M=Q({},d,{params:u(W)}),O.params=u(O.params)}const N=t.resolve(M,O),j=d.hash||"";N.params=p(m(N.params));const oe=Ks(o,Q({},d,{hash:zs(j),path:N.path})),V=s.createHref(oe);return Q({fullPath:oe,hash:j,query:o===On?ar(d.query):d.query||{}},N,{redirectedFrom:void 0,href:V})}function $(d){return typeof d=="string"?Ut(n,d,a.value.path):Q({},d)}function w(d,O){if(c!==d)return nt(le.NAVIGATION_CANCELLED,{from:O,to:d})}function k(d){return C(d)}function h(d){return k(Q($(d),{replace:!0}))}function v(d,O){const M=d.matched[d.matched.length-1];if(M&&M.redirect){const{redirect:N}=M;let j=typeof N=="function"?N(d,O):N;return typeof j=="string"&&(j=j.includes("?")||j.includes("#")?j=$(j):{path:j},j.params={}),Q({query:d.query,hash:d.hash,params:j.path!=null?{}:d.params},j)}}function C(d,O){const M=c=g(d),N=a.value,j=d.state,oe=d.force,V=d.replace===!0,W=v(M,N);if(W)return C(Q($(W),{state:typeof W=="object"?Q({},j,W.state):j,force:oe,replace:V}),O||M);const ae=M;ae.redirectedFrom=O;let Fe;return!oe&&Js(o,N,M)&&(Fe=nt(le.NAVIGATION_DUPLICATED,{to:ae,from:N}),te(N,N,!0,!1)),(Fe?Promise.resolve(Fe):T(ae,N)).catch(pe=>$e(pe)?$e(pe,le.NAVIGATION_GUARD_REDIRECT)?pe:ke(pe):ie(pe,ae,N)).then(pe=>{if(pe){if($e(pe,le.NAVIGATION_GUARD_REDIRECT))return C(Q({replace:V},$(pe.to),{state:typeof pe.to=="object"?Q({},j,pe.to.state):j,force:oe}),O||ae)}else pe=Y(ae,N,!0,V,j);return J(ae,N,pe),pe})}function x(d,O){const M=w(d,O);return M?Promise.reject(M):Promise.resolve()}function A(d){const O=L.values().next().value;return O&&typeof O.runWithContext=="function"?O.runWithContext(d):d()}function T(d,O){let M;const[N,j,oe]=ir(d,O);M=Vt(N.reverse(),"beforeRouteLeave",d,O);for(const W of N)W.leaveGuards.forEach(ae=>{M.push(Te(ae,d,O))});const V=x.bind(null,d,O);return M.push(V),B(M).then(()=>{M=[];for(const W of r.list())M.push(Te(W,d,O));return M.push(V),B(M)}).then(()=>{M=Vt(j,"beforeRouteUpdate",d,O);for(const W of j)W.updateGuards.forEach(ae=>{M.push(Te(ae,d,O))});return M.push(V),B(M)}).then(()=>{M=[];for(const W of oe)if(W.beforeEnter)if(Se(W.beforeEnter))for(const ae of W.beforeEnter)M.push(Te(ae,d,O));else M.push(Te(W.beforeEnter,d,O));return M.push(V),B(M)}).then(()=>(d.matched.forEach(W=>W.enterCallbacks={}),M=Vt(oe,"beforeRouteEnter",d,O,A),M.push(V),B(M))).then(()=>{M=[];for(const W of l.list())M.push(Te(W,d,O));return M.push(V),B(M)}).catch(W=>$e(W,le.NAVIGATION_CANCELLED)?W:Promise.reject(W))}function J(d,O,M){i.list().forEach(N=>A(()=>N(d,O,M)))}function Y(d,O,M,N,j){const oe=w(d,O);if(oe)return oe;const V=O===Pe,W=Ke?history.state:{};M&&(N||V?s.replace(d.fullPath,Q({scroll:V&&W&&W.scroll},j)):s.push(d.fullPath,j)),a.value=d,te(d,O,M,V),ke()}let F;function H(){F||(F=s.listen((d,O,M)=>{if(!_.listening)return;const N=g(d),j=v(N,_.currentRoute.value);if(j){C(Q(j,{replace:!0,force:!0}),N).catch(ft);return}c=N;const oe=a.value;Ke&&or(Pn(oe.fullPath,M.delta),Ot()),T(N,oe).catch(V=>$e(V,le.NAVIGATION_ABORTED|le.NAVIGATION_CANCELLED)?V:$e(V,le.NAVIGATION_GUARD_REDIRECT)?(C(Q($(V.to),{force:!0}),N).then(W=>{$e(W,le.NAVIGATION_ABORTED|le.NAVIGATION_DUPLICATED)&&!M.delta&&M.type===sn.pop&&s.go(-1,!1)}).catch(ft),Promise.reject()):(M.delta&&s.go(-M.delta,!1),ie(V,N,oe))).then(V=>{V=V||Y(N,oe,!1),V&&(M.delta&&!$e(V,le.NAVIGATION_CANCELLED)?s.go(-M.delta,!1):M.type===sn.pop&&$e(V,le.NAVIGATION_ABORTED|le.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),J(N,oe,V)}).catch(ft)}))}let U=ct(),Z=ct(),G;function ie(d,O,M){ke(d);const N=Z.list();return N.length?N.forEach(j=>j(d,O,M)):console.error(d),Promise.reject(d)}function we(){return G&&a.value!==Pe?Promise.resolve():new Promise((d,O)=>{U.add([d,O])})}function ke(d){return G||(G=!d,H(),U.list().forEach(([O,M])=>d?M(d):O()),U.reset()),d}function te(d,O,M,N){const{scrollBehavior:j}=e;if(!Ke||!j)return Promise.resolve();const oe=!M&&sr(Pn(d.fullPath,0))||(N||!M)&&history.state&&history.state.scroll||null;return ve().then(()=>j(d,O,oe)).then(V=>V&&nr(V)).catch(V=>ie(V,d,O))}const Ae=d=>s.go(d);let Me;const L=new Set,_={currentRoute:a,listening:!0,addRoute:f,removeRoute:S,clearRoutes:t.clearRoutes,hasRoute:b,getRoutes:I,resolve:g,options:e,push:k,replace:h,go:Ae,back:()=>Ae(-1),forward:()=>Ae(1),beforeEach:r.add,beforeResolve:l.add,afterEach:i.add,onError:Z.add,isReady:we,install(d){d.component("RouterLink",$r),d.component("RouterView",Oo),d.config.globalProperties.$router=_,Object.defineProperty(d.config.globalProperties,"$route",{enumerable:!0,get:()=>y(a)}),Ke&&!Me&&a.value===Pe&&(Me=!0,k(s.location).catch(N=>{}));const O={};for(const N in Pe)Object.defineProperty(O,N,{get:()=>a.value[N],enumerable:!0});d.provide(Pt,_),d.provide(Co,rs(O)),d.provide(nn,a);const M=d.unmount;L.add(d),d.unmount=function(){L.delete(d),L.size<1&&(c=Pe,F&&F(),F=null,a.value=Pe,Me=!1,G=!1),M()}}};function B(d){return d.reduce((O,M)=>O.then(()=>A(M)),Promise.resolve())}return _}function No(e){if(e===0)return"empty";for(const t of[null,"kB","MB","GB","TB","PB","EB"]){if(e<1e4)return e.toLocaleString().replace(","," ")+(t?` ${t}`:"");e=Math.round(e/1e3)}return"huge"}function To(e){const t=new Date(e*1e3),n=new Date,o=t.getTime()-n.getTime(),s=Math.abs(o),r=new Intl.RelativeTimeFormat("en",{numeric:"auto"});if(s<=5e3)return"now";if(s<=6e4)return r.format(Math.round(o/1e3),"second").replace(" ago","").replaceAll(" "," ");if(s<=36e5)return r.format(Math.round(o/6e4),"minute").replace("utes","").replace("ute","").replaceAll(" "," ");if(s<=864e5)return r.format(Math.round(o/36e5),"hour").replaceAll(" "," ");if(s<=6048e5)return r.format(Math.round(o/864e5),"day").replaceAll(" "," ");let l=t.toLocaleDateString("en-ie",{weekday:"short",year:"numeric",month:"short",day:"numeric"}).replace("Sept","Sep");return l.length===14&&(l=l.replace(" "," ")),l=l.replaceAll(" "," ").replace(" "," "),l=l.slice(0,-4)+l.slice(-2),l}const Nt=new Intl.Collator("en",{sensitivity:"base",numeric:!0,usage:"search"});function Tr(e){return"^"+e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase()+"$"}class It{loc="";key="";size=0;mtime=0;haystack="";dir=!1;_name="";constructor(t={}){const{name:n,...o}=t;Object.assign(this,o),n&&(this.name=n)}get name(){return this._name}set name(t){if(t.includes("/")||t.startsWith("."))throw Error(`Invalid name: ${t}`);this._name=t,this.haystack=Tr(t)}get sizedisp(){return No(this.size)}get modified(){return To(this.mtime)}get url(){const t=this.loc?`${this.loc}/${this.name}`:this.name;return this.dir?"/#/"+`${t}/`.replaceAll("#","%23"):`/files/${t}`.replaceAll("?","%3F").replaceAll("#","%23")}get urlrouter(){return this.url.replace(/^\/#/,"")}get img(){return this.dir?!1:["jpg","jpeg","png","gif","webp","avif","heic","heif","svg"].includes(this.ext)}get previewable(){return this.dir?!1:this.img?!0:["mp4","mkv","webm","ogg","mp3","flac","aac","pdf"].includes(this.ext)}get previewurl(){return this.url.replace(/^\/files/,"/preview")}get ext(){const t=this.name.lastIndexOf(".");return t===-1||t===this.name.length-1?"":this.name.slice(t+1).toLowerCase()}}const At="paskia-iframe",jn="paskia-dialog",Lr=`body::before {
|
|
2
|
-
content: '';
|
|
3
|
-
position: fixed;
|
|
4
|
-
inset: 0;
|
|
5
|
-
z-index: 1099;
|
|
6
|
-
background: transparent;
|
|
7
|
-
backdrop-filter: blur(0) brightness(1);
|
|
8
|
-
-webkit-backdrop-filter: blur(0) brightness(1);
|
|
9
|
-
pointer-events: none;
|
|
10
|
-
visibility: hidden;
|
|
11
|
-
transition: all 0.2s ease-out;
|
|
12
|
-
}
|
|
13
|
-
body.paskia-backdrop::before {
|
|
14
|
-
-webkit-backdrop-filter: blur(.2rem) brightness(0.5);
|
|
15
|
-
backdrop-filter: blur(.2rem) brightness(0.5);
|
|
16
|
-
visibility: visible;
|
|
17
|
-
}
|
|
18
|
-
body.paskia-backdrop {
|
|
19
|
-
overflow: auto;
|
|
20
|
-
}
|
|
21
|
-
#${At} {
|
|
22
|
-
border: none;
|
|
23
|
-
position: fixed;
|
|
24
|
-
top: 0;
|
|
25
|
-
left: 0;
|
|
26
|
-
width: 100%;
|
|
27
|
-
height: 100%;
|
|
28
|
-
z-index: 9999;
|
|
29
|
-
color-scheme: auto;
|
|
30
|
-
background: transparent;
|
|
31
|
-
}
|
|
32
|
-
`;let Le=null,He=null,Ye=null,Xe=null,Vn=!1,_t=0;function Dr(){if(document.getElementById(jn))return;const e=document.createElement("style");e.id=jn,e.textContent=Lr,document.head.insertBefore(e,document.head.firstChild)}class Ze extends Error{constructor(){super("Authentication cancelled"),this.name="AuthCancelledError"}}function hn(){_t++,document.body.classList.add("paskia-backdrop")}function Lo(){_t=Math.max(0,_t-1),_t===0&&document.body.classList.remove("paskia-backdrop")}function Br(){return!!document.getElementById(At)}function ln(){Le&&(Le.remove(),Le=null,Lo())}function Fr(e){const t=e.data;if(t?.type)switch(t.type){case"auth-success":ln(),Ye&&(Ye(),He=null,Ye=null,Xe=null);break;case"auth-back":ln(),Xe&&(Xe(new Ze),He=null,Ye=null,Xe=null);break}}function Hr(){Vn||typeof window<"u"&&(window.addEventListener("message",Fr),Vn=!0)}function gn(e,t="Authentication"){return Dr(),Hr(),He||(document.getElementById(At)?(He=new Promise((n,o)=>{Ye=n,Xe=o}),He):(He=new Promise((n,o)=>{Ye=n,Xe=o}),ln(),hn(),Le=document.createElement("iframe"),Le.id=At,Le.title=t,Le.src=e,document.body.appendChild(Le),He))}const Wr=1e3;class zr extends Error{constructor(t,n,o){super(o?.detail||`Request failed: ${n.status}`),this.name="ApiError",this.url=t,this.status=n.status,this.statusText=n.statusText,this.data=o}}class qt extends Error{constructor(t,n=null){super(t),this.name="NetworkError",this.originalError=n}}async function Do(e,t={}){const{timeout:n=Wr,...o}=t;for(o.credentials=o.credentials||"include";;){let s;try{s=await fetch(e,{...o,signal:n?AbortSignal.timeout(n):void 0})}catch(r){const l=r;throw l.name==="TimeoutError"?new qt("Request timed out",l):l.name==="AbortError"?r:l.name==="TypeError"&&l.message==="Failed to fetch"?new qt("Unable to connect to server",l):new qt(l.message||"Network error",l)}if(s.status===401||s.status===403){let r=null;try{r=await s.clone().json()}catch{}if(r?.auth?.iframe&&window===window.top){await gn(r.auth.iframe);continue}}return s}}async function xt(e,t={}){return Ur(e,t,Do)}async function Ur(e,t={},n=fetch){const o={Accept:"application/json",...t.headers};let s;t.body&&typeof t.body=="object"&&!(t.body instanceof FormData)?(o["Content-Type"]="application/json",s=JSON.stringify(t.body)):s=t.body;const r={...t,headers:o,body:s},l=await n(e,r),i=await l.json();if(!l.ok)throw new zr(e,l,i);return i}const bt="/api/control",jr="/api/upload",Vr="/api/watch";let xe=[],Et=500,pt=null,mt=!1;const Bo=()=>{xe=[]},qr=()=>{const e=localStorage["cista-files"];if(!e)return!1;const t=se();try{return xe=JSON.parse(e),t.updateRoot(xe),console.log(`Loaded session with ${xe.length} items cached`),!0}catch(n){return console.log("Loading session failed",n),!1}},Fo=()=>{localStorage["cista-files"]=JSON.stringify(xe)},Ue=(e,t)=>{const n=new WebSocket(new URL(e,location.origin.replace(/^http/,"ws")));for(const[o,s]of Object.entries(t))n.addEventListener(o,s);return n};async function Ho(e){const t=e.error?.auth?.iframe;if(t){const n=se();n.clearSensitiveData(),Bo(),mt=!0,n.authInProgress=!0,n.error="",Ce!==null&&(clearTimeout(Ce),Ce=null);try{await gn(t),mt=!1,n.authInProgress=!1,Tt()}catch(o){mt=!1,n.authInProgress=!1,o instanceof Ze?(console.log("User cancelled authentication"),n.dialog="accessdenied"):console.error("Auth iframe error:",o)}return!0}return!1}const Tt=()=>{Ce!==null&&(clearTimeout(Ce),Ce=null);const e=se();e.error!=="Reconnecting..."&&(e.error="Connecting..."),console.log(e.error),pt=Ue(Vr,{message:Jr,close:Kr}),pt.addEventListener("message",t=>{if(e.connected)return;const n=JSON.parse(t.data);if("error"in n){n.error.code===401||n.error.code===403?Ho(n):e.error=n.error.message;return}"server"in n&&(console.log("Connected to backend",n),e.server=n.server,e.connected=!0,Et=500,e.error="",n.user?e.login(n.user.username,n.user.privileged):e.isUserLogged&&e.logout())})},Gr=()=>{pt&&(pt.close(),pt=null)},an=()=>{mt=!1,Ce!==null&&(clearTimeout(Ce),Ce=null),Tt()};let Ce=null;const Kr=e=>{const t=se();if(mt||Br()){console.log("Skipping reconnect - awaiting authentication");return}t.connected&&(console.warn("Disconnected from server",e),t.connected=!1,t.error="Reconnecting..."),Ce!==null&&clearTimeout(Ce),Et=Math.min(5e3,Et+500),Ce=setTimeout(Tt,Et)},Jr=e=>{const t=JSON.parse(e.data);switch(!0){case!!t.root:Yr(t);break;case!!t.update:Xr(t);break;case!!t.space:console.log("Watch space",t.space);break;case!!t.error:Zr(t);break}};function Yr({root:e}){const t=se();console.log("Watch root",e),t.updateRoot(e),xe=e,Fo()}function Xr(e){const t=se(),n=e.update;if(console.log("Watch update",n),!xe)return console.error("Watch update before root");let o=[],s=0;for(const[r,l]of n)r==="k"?(o.push(...xe.slice(s,s+l)),s+=l):r==="d"?s+=l:r==="i"?o.push(...l):console.log("Unknown update action",r,l);if(s!=xe.length)throw Error(`Tree update out of sync, number of entries mismatch: got ${s}, expected ${xe.length}, new tree ${o.length}`);t.updateRoot(o),xe=o,Fo()}function Zr(e){if(se(),e.error.code===401||e.error.code===403){Ho(e);return}}const Wo={name:(e,t)=>Nt.compare(e.name,t.name),modified:(e,t)=>t.mtime-e.mtime,size:(e,t)=>t.size-e.size},zo=(e,t)=>{if(!t)return e;const n=[...e];return n.sort(Wo[t]),n},Qr=(e,t)=>{if(!t)return e;const n=Wo[t],o=new Map;for(const i of e){const a=i.loc;o.has(a)||o.set(a,[]),o.get(a).push(i)}for(const i of o.values())i.sort(n);const s=new Map;for(const[i,a]of o)s.set(i,a[0]);const r=[...o.keys()].sort((i,a)=>t==="name"?Nt.compare(i,a):n(s.get(i),s.get(a))),l=[];for(const i of r)l.push(...o.get(i));return l};function el(e){return new Worker("/assets/searchWorker-CxfnO8mP.js",{name:e?.name})}let Gt=null,qn=0;function Gn(){return Gt||(Gt=new el),Gt}const se=wo("main",{state:()=>({document:[],selected:new Set([]),query:"",searchResults:[],searchLoading:!1,fileExplorer:null,error:"",toast:"",toastTimeout:null,connected:!1,authInProgress:!1,cursor:"",server:{},dialog:"",uprogress:{},dprogress:{},prefs:{gallery:!1,sortListing:"",sortFiltered:""},user:{username:"",privileged:!1,isLoggedIn:!1}}),persist:{pick:["prefs","cursor","selected"],serializer:{deserialize:e=>{const t=JSON.parse(e);return t.selected=new Set(t.selected),t},serialize:e=>(e.selected=Array.from(e.selected),JSON.stringify(e))}},actions:{updateRoot(e){const t=[];let n=[];for(const[o,s,r,l,i,a]of e)n=n.slice(0,o-1),t.push(new It({name:s,loc:o?n.join("/"):"/",key:r,size:i,mtime:l,dir:!a})),n.push(s);this.document=t,this.syncSearchWorker()},showToast(e,t=3e3){this.toastTimeout&&(clearTimeout(this.toastTimeout),this.toastTimeout=null),this.toast=e,this.toastTimeout=setTimeout(()=>{this.toast="",this.toastTimeout=null},t)},clearToast(){this.toastTimeout&&(clearTimeout(this.toastTimeout),this.toastTimeout=null),this.toast=""},syncSearchWorker(){const e=Gn(),t=this.document.map(n=>({loc:n.loc,name:n.name,key:n.key,size:n.size,mtime:n.mtime,dir:n.dir}));e.postMessage({type:"update",documents:t})},search(e,t){const n=Gn(),o=++qn;if(!e){this.searchResults=[],this.searchLoading=!1;return}this.searchLoading=!0,n.onmessage=s=>{s.data.id===qn&&(this.searchResults=s.data.docs.map(r=>new It(r)),s.data.done&&(this.searchLoading=!1))},n.postMessage({type:"search",query:e,loc:t,id:o})},login(e,t){this.user.username=e,this.user.privileged=t,this.user.isLoggedIn=!0,this.dialog="",this.connected||an()},clearSensitiveData(){localStorage.removeItem("cista-files"),this.document=[],this.selected.clear(),this.user.username="",this.user.privileged=!1,this.user.isLoggedIn=!1,this.connected=!1,this.dialog="",this.cursor=""},async logout(){console.log("Logout");try{const e=await fetch("/auth/api/logout",{method:"POST"});if(!e.ok){const t=await e.json().catch(()=>({}));this.error=t.message||t.detail||"Logout failed";return}}catch{this.error="Logout failed";return}this.clearSensitiveData(),an()},toggleSort(e){this.query?this.prefs.sortFiltered=this.prefs.sortFiltered===e?"":e:this.prefs.sortListing=this.prefs.sortListing===e?"":e},sort(e){this.query?this.prefs.sortFiltered=e:this.prefs.sortListing=e},focusBreadcrumb(){document.querySelector(".breadcrumb").focus()},cancelDownloads(){location.reload()},cancelUploads(){location.reload()}},getters:{sortOrder(){return this.query?this.prefs.sortFiltered:this.prefs.sortListing},isUserLogged(){return this.user.isLoggedIn},recentDocuments(){return zo(this.document,"modified")},selectedFiles(){const e=this.selected,t=new Set,n={missing:new Set,docs:{},keys:[],recursive:[]};for(const r of this.document)e.has(r.key)&&(t.add(r.key),n.keys.push(r.key),n.docs[r.key]=r);for(const r of e)t.has(r)||n.missing.add(r);const o=new Set;function s(r,l,i){if(!i.dir&&o.has(r))throw Error(`Multiple selections conflict for: ${r}`);o.add(r),n.recursive.push([r,l,i])}for(const r of n.keys){const l=n.docs[r],i=l.loc?`${l.loc}/${l.name}`:l.name,a=l.loc.length;s(l.name,i,l);for(const c of this.document)if(c.loc===i||c.loc.startsWith(i)&&c.loc[i.length]==="/"){const p=c.loc?`${c.loc}/${c.name}`:c.name,u=p.slice(a);s(u,p,c)}}return n.recursive.sort((r,l)=>Nt.compare(r[0],l[0])),n}}}),Uo=e=>{const t=se(),n=e.join("/");return t.document.some(o=>(o.loc?`${o.loc}/${o.name}`:o.name)===n)},Kt=e=>{const t=[".tar.gz",".tar.bz2",".tar.xz",".tar.zst"],n=e.toLowerCase();for(const s of t)if(n.endsWith(s))return e.slice(0,-s.length);const o=e.lastIndexOf(".");if(o>0){const s=e.slice(o+1);if(s.length>=2&&s.length<=5&&/^[a-zA-Z0-9]+$/.test(s))return e.slice(0,o)}return e},tl=e=>{const t=e.map(s=>s.name);if(t.length===1)return Kt(t[0]);const n=e.map(s=>s.loc);return n.every(s=>s===n[0])&&n[0]?n[0].split("/").pop():t.length<=3?t.map(Kt).join("."):`${Kt(t[0])}.etc`},nl=["aria-current"],ol=["href","aria-current","onClick","title"],vn=X({__name:"BreadCrumb",props:{path:{},primary:{type:Boolean}},setup(e){const t=as,n=pn(),o=[],s=(u,m)=>{m&&(o[u]=m)};ls(()=>{o.length=1});const r=e,l=D([]),i=u=>u==r.path.length?"location":void 0,a=()=>{ve(()=>{const u=r.path.length;u<o.length&&o[u].focus()})},c=u=>{if(!o[u])throw Error(`No link at index ${u} (path: ${r.path})`);const f=u?`/${l.value.slice(0,u).join("/")}/`:"/",S=l.value.length?`/${l.value.join("/")}/`:"/",I=decodeURIComponent(location.hash.slice(1).split("//")[0]??""),b=f.replaceAll("?","%3F").replaceAll("#","%23");i(u)?(l.value.splice(u),n.push(b)):S.startsWith(I)?n.replace(b):n.push(b)},p=u=>{const m=r.path.length+u;m<0||m>l.value.length||c(m)};return Ie(()=>{const u=l.value.slice(0,r.path.length);if(!u.every((f,S)=>f===r.path[S]))l.value=r.path;else if(r.path.length>u.length)l.value=u.concat(r.path.slice(u.length));else for(let f=r.path.length;f<l.value.length;++f)if(!Uo(l.value.slice(0,f+1))){l.value=l.value.slice(0,f);break}r.primary&&ve(()=>{const f=document.activeElement;(!f||[...o,document.body].includes(f))&&a()})}),(u,m)=>(R(),P("nav",{class:"breadcrumb","aria-label":"Breadcrumb",onKeydown:[m[1]||(m[1]=Qe(de(f=>p(-1),["stop"]),["left"])),m[2]||(m[2]=Qe(de(f=>p(1),["stop"]),["right"]))],onKeyup:m[3]||(m[3]=Qe(f=>p(0),["enter"])),onFocus:a,tabindex:"0"},[E("a",{href:"#/",ref:f=>s(0,f),class:me(["home",{current:!!i(0)}]),"aria-current":i(0),onClick:m[0]||(m[0]=de(f=>c(0),["prevent"])),title:"/"},[(R(),ee(dn(y(t))))],10,nl),(R(!0),P(fe,null,st(l.value,(f,S)=>(R(),P("a",{key:S,href:`/#/${l.value.slice(0,S+1).join("/")}/`,class:me({current:!!i(S+1)}),"aria-current":i(S+1),onClick:de(I=>c(S+1),["prevent"]),ref_for:!0,ref:I=>s(S+1,I),title:`/${l.value.slice(0,S+1).join("/")}`},ne(f),11,ol))),128))],32))}}),sl={class:"action-button"},Lt=X({__name:"SvgButton",props:{name:{}},setup(e){return(t,n)=>(R(),P("button",sl,[(R(),ee(dn(y(is)[e.name]))),ue(t.$slots,"default")]))}}),rl=X({__name:"UploadButton",props:{path:Array},setup(e){const t=D(),n=D(),o=se(),s=e;function r(k){const h=Array.from(k.clipboardData?.items??[]),v=[],C=[];for(const x of h){if(x.kind!=="file")continue;const A=x.webkitGetAsEntry();if(A?.isFile){const T=x.getAsFile();T&&v.push(T)}else A?.isDirectory&&C.push(A)}if(v.length||C.length){k.preventDefault(),a(v);for(const x of C)l(x,`${s.path.join("/")}/${x.name}`)}}const l=async(k,h)=>{const v=k.createReader(),C=await new Promise(A=>v.readEntries(A)),x=[];for(const A of C){const T=`${h}/${A.name}`;if(A.isFile){const J=await new Promise(Y=>A.file(Y));x.push({file:J,cloudName:T,cloudPos:0})}else A.isDirectory&&await l(A,T)}x.length&&c(x)};function i(k){k.preventDefault();const h=k.target,v=Array.from((h??k.dataTransfer)?.files??[]);h&&(h.value=""),v.length&&a(v)}const a=k=>{const h=s.path.join("/");let v=[];for(const C of k)v.push({file:C,cloudName:h+"/"+(C.webkitRelativePath||C.name),cloudPos:0});c(v)},c=k=>{const h=k.filter(v=>v.cloudName.includes("/."));h.length&&(o.showToast("Won't upload dotfiles"),console.log("Dotfiles omitted",h),k=k.filter(v=>!v.cloudName.includes("/."))),k.length&&(k.sort((v,C)=>Nt.compare(v.cloudName,C.cloudName)),I=[...I,...k],S(k),w())},p={total:0,xfer:0,t0:0,tlast:0,statbytes:0,statdur:0,files:[],filestart:0,fileidx:0,filecount:0,filename:"",filesize:0,filepos:0,status:"idle"};o.uprogress={...p},setInterval(()=>{Date.now()-o.uprogress.tlast>3e3?(o.uprogress.statbytes=0,o.uprogress.statdur=1):(o.uprogress.statbytes*=.9,o.uprogress.statdur*=.9)},100);const u=({name:k,size:h,start:v,end:C})=>{if(k!==o.uprogress.filename)return;const x=Date.now();o.uprogress.xfer=o.uprogress.filestart+C,o.uprogress.filepos=C,o.uprogress.statbytes+=C-v,o.uprogress.statdur+=x-o.uprogress.tlast,o.uprogress.tlast=x,C===h&&(o.uprogress.filestart+=h,m(),++o.uprogress.fileidx>=o.uprogress.filecount&&f())},m=()=>{const k=o.uprogress.files.shift();if(!k)return f();o.uprogress.filepos=0,o.uprogress.filesize=k.file.size,o.uprogress.filename=k.cloudName},f=()=>{Object.assign(o.uprogress,p),o.uprogress.t0=Date.now(),o.uprogress.tlast=o.uprogress.t0+1},S=k=>{o.uprogress.files.length===0&&f(),o.uprogress.total+=k.reduce((h,v)=>h+v.file.size,0),o.uprogress.filecount+=k.length,o.uprogress.files=[...o.uprogress.files,...k],m()};let I=[];const b=async()=>await new Promise(k=>{const h=Ue(jr,{open(v){k(h)},error(v){console.error("Upload socket error",v),o.error="Upload socket error"},message(v){const C=JSON.parse(v.data);if("error"in C){console.error("Upload socket error",C.error),o.error=C.error.message;return}C.status==="ack"?u(C.req):console.log("Unknown upload response",C)}});h.sendMsg=v=>h.send(JSON.stringify(v)),h.sendData=async v=>{o.uprogress.status="uploading",await new Promise(C=>{const x=setInterval(()=>{h.bufferedAmount>1048576||(C(void 0),clearInterval(x))},1)}),o.uprogress.status="processing",h.send(v)}}),g=async()=>{const k=await b();for(;I.length;){const h=I[0],v=h.cloudPos,C=Math.min(h.file.size,v+(1<<20)),x={name:h.cloudName,size:h.file.size,start:v,end:C},A=h.file.slice(v,C);h.cloudPos=C,k.sendMsg(x),await k.sendData(A),h.cloudPos===h.file.size&&I.shift()}I.length&&w(),o.uprogress.status="idle",$=!1};let $=!1;const w=()=>{$===!1&&($=setTimeout(()=>{$=!0,g()},0))};return be(()=>{addEventListener("dragover",i),addEventListener("drop",i),addEventListener("paste",r)}),yt(()=>{removeEventListener("paste",r),removeEventListener("dragover",i),removeEventListener("drop",i)}),(k,h)=>{const v=Lt;return R(),P(fe,null,[E("template",null,[E("input",{ref_key:"fileInput",ref:t,onChange:i,type:"file",multiple:""},null,544),E("input",{ref_key:"folderInput",ref:n,onChange:i,type:"file",webkitdirectory:""},null,544)]),z(v,{name:"add-file","data-tooltip":"Upload files",onClick:h[0]||(h[0]=C=>t.value.click())}),z(v,{name:"add-folder","data-tooltip":"Upload folder",onClick:h[1]||(h[1]=C=>n.value.click())})],64)}}}),ll=wo("ssoAuth",()=>{const e=K(()=>se().server?.paskia===!0);function t(){se().clearSensitiveData(),Bo()}return{isExternalAuth:e,clearDataOnUnauth:t}});let De=null;function al(){return De!==null}function il(e){De&&jo(),De=e}function Kn(e){e===De&&(De=null)}function jo(){De&&(De.closeMenu(),De=null)}const Ee={defaultDirection:"br",defaultMinWidth:100,defaultMaxWidth:600,defaultZindex:100,defaultZoom:1,defaultAdjustPadding:{x:0,y:10}};function ht(e,t){let n=e.offsetTop;return e.offsetParent!=null&&e.offsetParent!=t&&(n-=e.offsetParent.scrollTop,n+=ht(e.offsetParent,t)),n}function gt(e,t){let n=e.offsetLeft;return e.offsetParent!=null&&e.offsetParent!=t&&(n-=e.offsetParent.scrollLeft,n+=gt(e.offsetParent,t)),n}function cl(e,t,n,o){return{x:gt(e,o)+t,y:ht(e,o)+n}}const Jt="mx-menu-default-container",ul="mx-menu-container-";let dl=0;function Vo(e){const{getContainer:t,zIndex:n}=e;if(t){const s=typeof t=="function"?t():t;if(s){let r=s.getAttribute("id");return r||(r=ul+dl++,s.setAttribute("id",r)),{eleId:r,container:s,isNew:!1}}}let o=document.getElementById(Jt);return o||(o=document.createElement("div"),o.setAttribute("id",Jt),o.setAttribute("class","mx-menu-ghost-host fullscreen"),document.body.appendChild(o)),o.style.zIndex=n?.toString()||Ee.defaultZindex.toString(),{eleId:Jt,container:o,isNew:!0}}function fl(e){let t=0;for(let n=0;n<e.length;n++){const o=e.charCodeAt(n);t=(t<<5)-t+o,t|=0}return t}function Jn(e){return typeof e=="number"?`${e}px`:e}const _e=X({props:{vnode:{type:null},data:{type:null,default:null}},setup(e){const{vnode:t,data:n}=Ve(e);return()=>typeof t.value=="function"?t.value(n.value):t.value}});function pl(e,t){const n={...e};return delete n[t],n}var ml=Object.defineProperty,hl=(e,t,n)=>t in e?ml(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Yn=(e,t,n)=>hl(e,typeof t!="symbol"?t+"":t,n);class Xn{constructor(t,n){Yn(this,"x",0),Yn(this,"y",0),this.x=t||0,this.y=n||0}set(t,n){this.x=t,this.y=n}substract(t){this.x-=t.x,this.y-=t.y}}function Zn(e){const{onDown:t,onMove:n,onUp:o}=e,s=new Xn,r=new Xn;let l;function i(c){c.stopPropagation(),r.set(c.x,c.y),r.substract(s),n(s,r,c,l)}function a(c){o(c,l),s.set(0,0),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",a)}return(c,p)=>t(c,p)?(l=p,s.set(c.x,c.y),document.addEventListener("mousemove",i),document.addEventListener("mouseup",a),c.stopPropagation(),!0):!1}function gl(e,t){let n=0;return{start(){n>0&&clearInterval(n),n=setInterval(()=>{n=0,t()},e)},stop(){n>0&&(clearInterval(n),n=0)}}}const ut=[],Qn=gl(100,()=>{for(const e of ut)e()});function vl(e,t,n,o){let s=0,r=0;function l(){e.value&&(t&&s!==e.value.offsetWidth&&t(e.value.offsetWidth),n&&r!==e.value.offsetHeight&&n(e.value.offsetHeight),s=e.value.offsetWidth,r=e.value.offsetHeight)}return{startResizeChecker(){Qn.start(),ut.push(l)},stopResizeChecker(){const i=ut.indexOf(l);i>=0&&ut.splice(i,1),ut.length===0&&Qn.stop()}}}const eo=140,yl=70,wl=X({__name:"ScrollRect",props:{scroll:{type:String,default:"both"},scrollBarAlwaysShow:{type:Boolean,default:!1},scrollBarBackgroundClickable:{type:Boolean,default:!1},height:{type:Number,default:void 0},width:{type:Number,default:void 0},maxHeight:{type:Number,default:void 0},maxWidth:{type:Number,default:void 0},containerClass:{type:String,default:""},containerStyle:{type:null}},emits:["scroll","resized"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=D(),l=D(),i=D(),a=D(),c=D(),p=D(),u=D(!1),m=K(()=>o.scroll==="horizontal"||o.scroll==="both"),f=K(()=>o.scroll==="vertical"||o.scroll==="both"),S=et({show:!1,size:0,sizeRaw:0,pos:0}),I=et({show:!1,size:0,sizeRaw:0,pos:0});let b=0,g=0,$=0,w=0,k=null;const h={attributes:!0,childList:!0};function v(){if(r.value){if(S.show){const _=r.value.offsetWidth/r.value.scrollWidth;S.sizeRaw=_*r.value.offsetWidth,S.size=_*100,S.pos=r.value.scrollLeft/(r.value.scrollWidth-r.value.offsetWidth)*(100-S.size),_>=1&&(S.show=!1)}if(I.show){const _=r.value.offsetHeight/r.value.scrollHeight;I.sizeRaw=_*r.value.offsetHeight,I.size=_*100,I.pos=r.value.scrollTop/(r.value.scrollHeight-r.value.offsetHeight)*(100-I.size),_>=1&&(I.show=!1)}s("scroll",r.value.scrollLeft,r.value.scrollTop)}}function C(_=!1){if(!r.value)return;let B=m.value,d=f.value;const O=B&&(b!==r.value.scrollWidth||$!==r.value.offsetWidth),M=f&&(g!==r.value.scrollHeight||w!==r.value.offsetHeight);if(!_&&!O&&!M)return;const N=window.getComputedStyle(r.value);(N.overflow==="hidden"||N.overflowX==="hidden")&&(B=!1),(N.overflow==="hidden"||N.overflowY==="hidden")&&(d=!1),S.show=B,I.show=d,v(),$=r.value.offsetWidth,w=r.value.offsetHeight,b=r.value.scrollWidth,g=r.value.scrollHeight,s("resized",b,g)}function x(_){var B;o.scroll=="horizontal"&&(_.deltaMode==0&&((B=r.value)==null||B.scrollTo({left:r.value.scrollLeft+(_.deltaY>0?eo:-140),behavior:"smooth"})),_.preventDefault(),_.stopPropagation())}function A(_){var B;_.deltaMode==0&&((B=r.value)==null||B.scrollTo({left:r.value.scrollLeft+(_.deltaY>0?eo:-140),behavior:"smooth"}),_.preventDefault(),_.stopPropagation())}function T(_){var B;_.deltaMode==0&&((B=r.value)==null||B.scrollTo({top:r.value.scrollTop+(_.deltaY>0?yl:-70),behavior:"smooth"}),_.preventDefault(),_.stopPropagation())}let J=0,Y=0,F=0,H=0;const U=Zn({onDown(_){return!i.value||!c.value?!1:(J=_.offsetX,Y=_.x-_.offsetX-c.value.offsetLeft,_.preventDefault(),u.value=!0,!0)},onMove(_,B,d){r.value&&i.value&&(we(d.x-J-Y),d.preventDefault(),d.stopPropagation())},onUp(){u.value=!1}}),Z=Zn({onDown(_){return!a.value||!p.value?!1:(F=_.offsetY,H=_.y-_.offsetY-p.value.offsetTop,_.preventDefault(),u.value=!0,!0)},onMove(_,B,d){r.value&&a.value&&(ke(d.y-F-H),d.preventDefault(),d.stopPropagation())},onUp(){u.value=!1}});function G(_){r.value&&(r.value.scrollLeft=_/100*(r.value.scrollWidth-r.value.offsetWidth))}function ie(_){r.value&&(r.value.scrollLeft=_/100*(r.value.scrollHeight-r.value.offsetHeight))}function we(_){r.value&&(r.value.scrollLeft=_/(r.value.offsetWidth-S.sizeRaw)*(r.value.scrollWidth-r.value.offsetWidth))}function ke(_){r.value&&(r.value.scrollTop=_/(r.value.offsetHeight-I.sizeRaw)*(r.value.scrollHeight-r.value.offsetHeight))}function te(_){o.scrollBarBackgroundClickable&&we(_.offsetX-S.sizeRaw/2)}function Ae(_){o.scrollBarBackgroundClickable&&ke(_.offsetY-I.sizeRaw/2)}const{startResizeChecker:Me,stopResizeChecker:L}=vl(r,()=>C(),()=>C());return be(()=>{ve(()=>{setTimeout(()=>C(!0),200),C(!0),Me(),k=new MutationObserver(()=>C()),k.observe(r.value,h)})}),$t(()=>{L(),k&&(k.disconnect(),k=null)}),t({refreshScrollState(){C(!0)},getScrollContainer(){return r.value},scrollTo(_,B){var d;(d=r.value)==null||d.scrollTo(_,B)},scrollToTop(){var _;(_=r.value)==null||_.scrollTo(0,0)},scrollToBottom(){var _;(_=r.value)==null||_.scrollTo(r.value.scrollWidth,r.value.scrollHeight)}}),(_,B)=>(R(),P("div",{ref_key:"scrollrect",ref:l,class:me(["vue-scroll-rect",e.scrollBarAlwaysShow?"always-show-scrollbar":"",e.scrollBarBackgroundClickable?"background-clickable":"",u.value?"dragging":""]),style:Je({width:e.width?`${e.width}px`:void 0,height:e.height?`${e.height}px`:void 0}),onWheel:x},[E("div",{ref_key:"container",ref:r,class:me(["scroll-content",e.scroll,e.containerClass]),style:Je({maxWidth:e.maxWidth?`${e.maxWidth}px`:void 0,maxHeight:e.maxHeight?`${e.maxHeight}px`:void 0,...e.containerStyle}),onScroll:v},[ue(_.$slots,"default")],38),S.show?ue(_.$slots,"scrollBarX",{key:0,scrollBarValue:S,onScroll:G},()=>[E("div",{ref_key:"scrollBarRefX",ref:i,class:"scrollbar horizontal",onClick:te,onWheel:A},[E("div",{class:"thumb",ref_key:"scrollBarThumbRefX",ref:c,style:Je({left:`${S.pos}%`,width:`${S.size}%`}),onMousedown:B[0]||(B[0]=(...d)=>y(U)&&y(U)(...d)),onWheel:A},null,36)],544)]):q("",!0),I.show?ue(_.$slots,"scrollBarY",{key:1,scrollBarValue:I,onScroll:ie},()=>[I.show?(R(),P("div",{key:0,ref_key:"scrollBarRefY",ref:a,class:"scrollbar vertical",onClick:Ae,onWheel:T},[E("div",{class:"thumb",ref_key:"scrollBarThumbRefY",ref:p,style:Je({top:`${I.pos}%`,height:`${I.size}%`}),onMousedown:B[1]||(B[1]=(...d)=>y(Z)&&y(Z)(...d)),onWheel:T},null,36)],544)):q("",!0)]):q("",!0)],38))}}),yn=(e,t)=>{const n=e.__vccOpts||e;for(const[o,s]of t)n[o]=s;return n},kl={},bl={class:"mx-checked-mark","aria-hidden":"true",viewBox:"0 0 1024 1024"},Cl=E("path",{d:"M129.3,428.6L52,512l345,372.5l575-620.8l-69.5-75L400.4,718.2L129.3,428.6z"},null,-1),xl=[Cl];function Sl(e,t){return R(),P("svg",bl,xl)}const _l=yn(kl,[["render",Sl]]),El={},Rl={class:"mx-right-arrow","aria-hidden":"true",viewBox:"0 0 1024 1024"},Il=E("path",{d:"M307.018 49.445c11.517 0 23.032 4.394 31.819 13.18L756.404 480.18c8.439 8.438 13.181 19.885 13.181 31.82s-4.741 23.38-13.181 31.82L338.838 961.376c-17.574 17.573-46.065 17.573-63.64-0.001-17.573-17.573-17.573-46.065 0.001-63.64L660.944 512 275.198 126.265c-17.574-17.573-17.574-46.066-0.001-63.64C283.985 53.839 295.501 49.445 307.018 49.445z"},null,-1),Al=[Il];function $l(e,t){return R(),P("svg",Rl,Al)}const Ml=yn(El,[["render",$l]]),Pl={class:"mx-item-row"},Ol=["xlink:href"],Nl={key:1,class:"label"},Tl={class:"mx-item-row"},Ll={class:"mx-shortcut"},wn=X({__name:"ContextMenuItem",props:{disabled:{type:Boolean,default:!1},hidden:{type:Boolean,default:!1},customRender:{type:Function,default:null},customClass:{type:String,default:""},clickHandler:{type:Function,default:null},label:{type:[String,Object,Function],default:""},icon:{type:[String,Object,Function],default:""},iconFontClass:{type:String,default:"iconfont"},checked:{type:Boolean,default:!1},shortcut:{type:String,default:""},svgIcon:{type:String,default:""},svgProps:{type:Object,default:null},preserveIconWidth:{type:Boolean,default:!0},showRightArrow:{type:Boolean,default:!1},hasChildren:{type:Boolean,default:!1},clickClose:{type:Boolean,default:!0},clickableWhenHasChildren:{type:Boolean,default:!1},rawMenuItem:{type:Object,default:void 0}},emits:["click","subMenuOpen","subMenuClose"],setup(e,{expose:t,emit:n}){const o=e,s=n,{clickHandler:r,clickClose:l,clickableWhenHasChildren:i,disabled:a,hidden:c,label:p,icon:u,iconFontClass:m,showRightArrow:f,shortcut:S,hasChildren:I}=Ve(o),b=D(!1),g=D(!1),$=D(),w=re("globalOptions"),k=re("globalHasSlot"),h=re("globalRenderSlot"),v=re("globalCloseMenu"),C=re("menuContext"),x=K(()=>typeof p.value=="string"?p.value:typeof p.value=="function"?fl(p.value.toString()):"MenuItem[unknow]");ge("MenuItemName",x);const A={getSubMenuInstance:()=>{},showSubMenu:()=>b.value?(C.markActiveMenuItem(A,!0),!0):I.value?(J(),!0):!1,hideSubMenu:()=>{C.closeOtherSubMenu()},isDisabledOrHidden:()=>a.value||c.value,getElement:()=>$.value,focus:()=>g.value=!0,blur:()=>g.value=!1,click:T};ge("menuItemInstance",A),be(()=>{C.isMenuItemDataCollectedFlag()?ve(()=>{let H=0;const U=C.getElement();if(U){let Z=0;for(let G=0;G<U.children.length;G++){const ie=U.children[G];if(ie.getAttribute("data-type")==="ContextMenuItem"){if(ie===$.value){H=Z;break}Z++}}}C.addChildMenuItem(A,H)}):C.addChildMenuItem(A)}),$t(()=>{C.removeChildMenuItem(A)});function T(H){if(!a.value){if(H){const U=H.target;if(U.classList.contains("mx-context-no-clickable")||w.value.ignoreClickClassName&&U.classList.contains(w.value.ignoreClickClassName))return;if(w.value.clickCloseClassName&&U.classList.contains(w.value.clickCloseClassName)){H.stopPropagation(),v(o.rawMenuItem);return}}I.value?i.value?(typeof r.value=="function"&&r.value(H),s("click",H)):b.value||J():(typeof r.value=="function"&&r.value(H),s("click",H),l.value&&v(o.rawMenuItem))}}function J(H){g.value=!1,C.checkCloseOtherSubMenuTimeOut()||C.closeOtherSubMenu(),a.value||(C.markActiveMenuItem(A),I.value&&(H||C.markThisOpenedByKeyBoard(),C.addOpenedSubMenu(Y),b.value=!0,ve(()=>s("subMenuOpen",A))))}function Y(){g.value=!1,b.value=!1,s("subMenuClose",A)}function F(){return{disabled:a.value,label:p.value,icon:u.value,iconFontClass:m.value,showRightArrow:f.value,clickClose:l.value,clickableWhenHasChildren:i.value,shortcut:S.value,theme:w.value.theme,isOpen:b,hasChildren:I,onClick:T,onMouseEnter:J,closeMenu:v}}return t(A),(H,U)=>y(c)?q("",!0):(R(),P("div",{key:0,class:"mx-context-menu-item-wrapper",ref_key:"menuItemRef",ref:$,"data-type":"ContextMenuItem"},[y(k)("itemRender")?(R(),ee(y(_e),{key:0,vnode:()=>y(h)("itemRender",F())},null,8,["vnode"])):e.customRender?(R(),ee(y(_e),{key:1,vnode:e.customRender,data:F()},null,8,["vnode","data"])):(R(),P("div",{key:2,class:me(["mx-context-menu-item",y(a)?"disabled":"",g.value?"keyboard-focus":"",e.customClass?" "+e.customClass:"",b.value?"open":""]),onClick:T,onMouseenter:J},[ue(H.$slots,"default",{},()=>[E("div",Pl,[E("div",{class:me(["mx-icon-placeholder",e.preserveIconWidth?"preserve-width":""])},[ue(H.$slots,"icon",{},()=>[y(k)("itemIconRender")?(R(),ee(y(_e),{key:0,vnode:()=>y(h)("itemIconRender",F())},null,8,["vnode"])):typeof e.svgIcon=="string"&&e.svgIcon?(R(),P("svg",Zt({key:1,class:"icon svg"},e.svgProps),[E("use",{"xlink:href":e.svgIcon},null,8,Ol)],16)):typeof y(u)!="string"?(R(),ee(y(_e),{key:2,vnode:y(u),data:y(u)},null,8,["vnode","data"])):typeof y(u)=="string"&&y(u)!==""?(R(),P("i",{key:3,class:me(y(u)+" icon "+y(m)+" "+y(w).iconFontClass)},null,2)):q("",!0)]),e.checked?ue(H.$slots,"check",{key:0},()=>[y(k)("itemCheckRender")?(R(),ee(y(_e),{key:0,vnode:()=>y(h)("itemCheckRender",F())},null,8,["vnode"])):q("",!0),z(_l)]):q("",!0)],2),ue(H.$slots,"label",{},()=>[y(k)("itemLabelRender")?(R(),ee(y(_e),{key:0,vnode:()=>y(h)("itemLabelRender",F())},null,8,["vnode"])):typeof y(p)=="string"?(R(),P("span",Nl,ne(y(p)),1)):(R(),ee(y(_e),{key:2,vnode:y(p),data:y(p)},null,8,["vnode","data"]))])]),E("div",Tl,[y(S)||H.$slots.shortcut?ue(H.$slots,"shortcut",{key:0},()=>[y(k)("itemShortcutRender")?(R(),ee(y(_e),{key:0,vnode:()=>y(h)("itemShortcutRender",F())},null,8,["vnode"])):q("",!0),E("span",Ll,ne(y(S)),1)]):q("",!0),y(f)?ue(H.$slots,"rightArrow",{key:1},()=>[y(k)("itemRightArrowRender")?(R(),ee(y(_e),{key:0,vnode:()=>y(h)("itemRightArrowRender",F())},null,8,["vnode"])):q("",!0),z(Ml)]):q("",!0)])])],34)),ue(H.$slots,"submenu",{context:A,show:b.value})],512))}}),Dl=X({name:"ContextMenuSperator",components:{VNodeRender:_e},setup(){const e=re("globalHasSlot"),t=re("globalRenderSlot");return{globalHasSlot:e,globalRenderSlot:t}}}),Bl={key:1,class:"mx-context-menu-item-sperator mx-context-no-clickable"};function Fl(e,t,n,o,s,r){const l=po("VNodeRender");return e.globalHasSlot("separatorRender")?(R(),ee(l,{key:0,vnode:()=>e.globalRenderSlot("separatorRender",{})},null,8,["vnode"])):(R(),P("div",Bl))}const vt=yn(Dl,[["render",Fl]]),kn=X({__name:"ContextSubMenu",props:{items:{type:Object,default:null},show:{type:Boolean,default:!1},maxHeight:{type:Number,default:0},maxWidth:{type:[String,Number],default:0},minWidth:{type:[String,Number],default:0},adjustPosition:{type:Boolean,default:!0},direction:{type:String,default:"br"},parentMenuItemContext:{type:Object,default:null}},emits:["closeAnimFinished"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=D(!1),l=re("globalGetMenuHostId",""),i=re("menuContext"),a=re("globalOptions");re("globalHasSlot"),re("globalRenderSlot");const c=D("UnknowOrRoot"),p=re("MenuItemName",c),{zIndex:u,getParentWidth:m,getParentHeight:f,getZoom:S}=i,{adjustPosition:I}=Ve(o),b=D(),g=D(),$=D(),w=[],k=re("globalSetCurrentSubMenu"),h=[];let v=null,C=0;function x(){v&&v.blur()}function A(L,_){if(L){for(let B=_!==void 0?_:0;B<h.length;B++)if(!h[B].isDisabledOrHidden()){T(B);break}}else for(let B=_!==void 0?_:h.length-1;B>=0;B--)if(!h[B].isDisabledOrHidden()){T(B);break}}function T(L){if(v&&x(),L!==void 0&&(v=h[Math.max(0,Math.min(L,h.length-1))]),!v)return;v.focus();const _=v.getElement();_&&_.scrollIntoView({behavior:"auto",block:"nearest",inline:"nearest"})}function J(){k(Y)}const Y={el:$,name:p,isTopLevel:()=>i.getParentContext()===null,closeSelfAndActiveParent:()=>{const L=U.getParentContext();if(L){L.closeOtherSubMenu();const _=L.getSubMenuInstanceContext();if(_)return _.focusCurrentItem(),!0}return!1},closeCurrentSubMenu:()=>{var L;return(L=U.getParentContext())==null?void 0:L.closeOtherSubMenu()},moveCurrentItemFirst:()=>A(!0),moveCurrentItemLast:()=>A(!1),moveCurrentItemDown:()=>A(!0,v?h.indexOf(v)+1:0),moveCurrentItemUp:()=>A(!1,v?h.indexOf(v)-1:0),focusCurrentItem:()=>T(),openCurrentItemSubMenu:()=>v?v?.showSubMenu():!1,triggerCurrentItemClick:L=>v?.click(L)};let F=!1,H=!1;const U={zIndex:u+1,container:i.container,adjustPadding:a.value.adjustPadding||Ee.defaultAdjustPadding,getParentWidth:()=>{var L;return((L=$.value)==null?void 0:L.offsetWidth)||0},getParentHeight:()=>{var L;return((L=$.value)==null?void 0:L.offsetHeight)||0},getPositon:()=>[te.value.x,te.value.y],getZoom:()=>a.value.zoom||Ee.defaultZoom,addOpenedSubMenu(L){w.push(L)},closeOtherSubMenu(){w.forEach(L=>L()),w.splice(0,w.length),k(Y)},checkCloseOtherSubMenuTimeOut(){return C?(clearTimeout(C),C=0,!0):!1},closeOtherSubMenuWithTimeOut(){C=setTimeout(()=>{C=0,this.closeOtherSubMenu()},200)},addChildMenuItem:(L,_)=>{_===void 0?h.push(L):h.splice(_,0,L)},removeChildMenuItem:L=>{h.splice(h.indexOf(L),1),L.getSubMenuInstance=()=>{}},markActiveMenuItem:(L,_=!1)=>{x(),v=L,_&&T()},markThisOpenedByKeyBoard:()=>{F=!0},isOpenedByKeyBoardFlag:()=>F?(F=!1,!0):!1,isMenuItemDataCollectedFlag:()=>H,getElement:()=>$.value||null,getParentContext:()=>i,getSubMenuInstanceContext:()=>Y};ge("menuContext",U);const Z={getChildItem:L=>h[L],getMenuDimensions:()=>g.value?{width:g.value.offsetWidth,height:g.value.offsetHeight}:{width:0,height:0},getSubmenuRoot:()=>g.value,getMenu:()=>$.value,getScrollValue:()=>{var L,_;return((_=(L=b.value)==null?void 0:L.getScrollContainer())==null?void 0:_.scrollTop)||0},setScrollValue:L=>{var _;return(_=b.value)==null?void 0:_.scrollTo(0,L)},getScrollHeight:()=>ie.value,adjustPosition:()=>{Ae()},getMaxHeight:()=>we.value,getPosition:()=>te.value,setPosition:(L,_)=>{te.value.x=L,te.value.y=_}},G=re("menuItemInstance",void 0);G&&(G.getSubMenuInstance=()=>Z);const ie=D(0),we=D(0),ke=D(!1),te=D({x:0,y:0});function Ae(){ve(()=>{var L;const _=$.value,B=g.value;if(_&&B&&b.value){const{container:d}=i,O=m?.()??0,M=f?.()??0,N=getComputedStyle(B),j=parseFloat(N.paddingLeft),oe=parseFloat(N.paddingTop),V=M>0?oe:0,W=document.documentElement.scrollHeight/S(),ae=document.documentElement.scrollWidth/S(),Fe=Math.min(ae,d.offsetWidth),pe=Math.min(W,d.offsetHeight);let Ft=gt(_,d),Ht=ht(_,d);if(o.direction.includes("l")?te.value.x-=_.offsetWidth+j:o.direction.includes("r")?te.value.x+=O+j:(te.value.x+=O/2,te.value.x-=(_.offsetWidth+j)/2),o.direction.includes("t")){const lt=(L=o.parentMenuItemContext)==null?void 0:L.getElement();lt&&(te.value.y+=lt.offsetHeight),te.value.y-=(_.offsetHeight+oe)/S()}else o.direction.includes("b")?te.value.y-=oe/S():te.value.y-=_.offsetHeight/2/S();ve(()=>{var lt,Cn;Ft=gt(_,d),Ht=ht(_,d);const xn=((Cn=(lt=b.value)==null?void 0:lt.getScrollContainer())==null?void 0:Cn.scrollHeight)||0,Qo=o.maxHeight;ie.value=o.maxHeight?Math.min(xn,o.maxHeight):xn;const es=Ft+_.offsetWidth-Fe,Sn=Ht+ie.value+V*2-pe;if(ke.value=Sn>0,I.value&&es>0){const at=O+_.offsetWidth-j,it=Ft;at>it?te.value.x-=it:te.value.x-=at}if(ke.value){if(I.value){const at=Sn,it=Ht;at>it?te.value.y-=it-V:te.value.y-=at-V}we.value=pe-(te.value.y+oe)}else we.value=Qo||0})}})}function Me(){var L;const _=(L=o.parentMenuItemContext)==null?void 0:L.getElement();if(_){const B=gt(_,i.container),d=ht(_,i.container);te.value.x=B,te.value.y=d}else{const[B,d]=i.getPositon();te.value.x=B,te.value.y=d}ve(()=>{var B;k(Y),(B=$.value)==null||B.focus({preventScroll:!0}),i.isOpenedByKeyBoardFlag()&&ve(()=>A(!0)),H=!0}),Ae()}return Be(()=>o.show,L=>{L&&Me()}),be(()=>{r.value=!0,o.show?Me():Ae()}),$t(()=>{r.value=!1,G&&(G.getSubMenuInstance=()=>{})}),t(Z),(L,_)=>{const B=po("ContextSubMenu",!0);return r.value?(R(),ee(fn,{key:0,to:`#${y(l)}`},[z(ds,Zt({appear:""},y(a).menuTransitionProps||{duration:10},{onAfterLeave:_[0]||(_[0]=d=>s("closeAnimFinished"))}),{default:Re(()=>[e.show?(R(),P("div",Zt({key:0,ref_key:"submenuRoot",ref:g},L.$attrs,{class:["mx-context-menu",y(a).customClass?y(a).customClass:"",y(a).theme??""],style:{maxWidth:e.maxWidth?y(Jn)(e.maxWidth):`${y(Ee).defaultMaxWidth}px`,minWidth:e.minWidth?y(Jn)(e.minWidth):`${y(Ee).defaultMinWidth}px`,zIndex:y(u),left:`${te.value.x}px`,top:`${te.value.y}px`},"data-type":"ContextSubMenu",onClick:J}),[z(y(wl),{ref_key:"scrollRectRef",ref:b,scroll:"vertical",maxHeight:we.value,containerClass:"mx-context-menu-scroll"},{default:Re(()=>[E("div",{class:me(["mx-context-menu-items"]),ref_key:"menu",ref:$},[ue(L.$slots,"default",{},()=>[(R(!0),P(fe,null,st(e.items,(d,O)=>(R(),P(fe,{key:O},[d.hidden!==!0&&d.divided==="up"?(R(),ee(vt,{key:0})):q("",!0),d.hidden!==!0&&d.divided==="self"?(R(),ee(vt,{key:1})):(R(),ee(wn,{key:2,clickHandler:d.onClick?M=>d.onClick(M):void 0,disabled:typeof d.disabled=="object"?d.disabled.value:d.disabled,hidden:typeof d.hidden=="object"?d.hidden.value:d.hidden,icon:d.icon,iconFontClass:d.iconFontClass,svgIcon:d.svgIcon,svgProps:d.svgProps,label:d.label,customRender:d.customRender,customClass:d.customClass,checked:typeof d.checked=="object"?d.checked.value:d.checked,shortcut:d.shortcut,clickClose:d.clickClose,clickableWhenHasChildren:d.clickableWhenHasChildren,preserveIconWidth:d.preserveIconWidth!==void 0?d.preserveIconWidth:y(a).preserveIconWidth,showRightArrow:d.children&&d.children.length>0,hasChildren:d.children&&d.children.length>0,rawMenuItem:d,onSubMenuOpen:M=>{var N;return(N=d.onSubMenuOpen)==null?void 0:N.call(d,M)},onSubMenuClose:M=>{var N;return(N=d.onSubMenuClose)==null?void 0:N.call(d,M)}},fo({_:2},[d.children&&d.children.length>0?{name:"submenu",fn:Re(({context:M,show:N})=>[z(B,{show:N,parentMenuItemContext:M,items:d.children,maxWidth:d.maxWidth,minWidth:d.minWidth,maxHeight:d.maxHeight,adjustPosition:d.adjustSubMenuPosition!==void 0?d.adjustSubMenuPosition:y(a).adjustPosition,direction:d.direction!==void 0?d.direction:y(a).direction},null,8,["show","parentMenuItemContext","items","maxWidth","minWidth","maxHeight","adjustPosition","direction"])]),key:"0"}:void 0]),1032,["clickHandler","disabled","hidden","icon","iconFontClass","svgIcon","svgProps","label","customRender","customClass","checked","shortcut","clickClose","clickableWhenHasChildren","preserveIconWidth","showRightArrow","hasChildren","rawMenuItem","onSubMenuOpen","onSubMenuClose"])),d.hidden!==!0&&(d.divided==="down"||d.divided===!0)?(R(),ee(vt,{key:3})):q("",!0)],64))),128))])],512)]),_:3},8,["maxHeight"])],16)):q("",!0)]),_:3},16)],8,["to"])):q("",!0)}}}),qo=X({__name:"ContextSubMenuWrapper",props:{options:{type:Object,default:null},show:{type:null,default:null},container:{type:Object,default:null},isFullScreenContainer:{type:Boolean,default:!0}},emits:["close","closeAnimFinished"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=uo(),l=D(),{options:i,show:a,container:c}=Ve(o);be(()=>{a.value&&m()}),$t(()=>{b()}),Be(a,v=>{v?m():(Kn(p),b())});const p={closeMenu:f,isClosed:S,getMenuRef:()=>l.value,getMenuDimensions:()=>{var v;return((v=l.value)==null?void 0:v.getMenuDimensions())??{width:0,height:0}}};let u=!1;function m(){I(),il(p)}function f(v){u=!0,s("close",v),i.value.menuTransitionProps||s("closeAnimFinished"),Kn(p)}function S(){return u}function I(){setTimeout(()=>{document.addEventListener("click",k,!0),document.addEventListener("contextmenu",k,!0),document.addEventListener("scroll",w,!0),!o.isFullScreenContainer&&c.value&&c.value.addEventListener("scroll",w,!0),i.value.keyboardControl!==!1&&document.addEventListener("keydown",$,!0)},50)}function b(){document.removeEventListener("contextmenu",k,!0),document.removeEventListener("click",k,!0),document.removeEventListener("scroll",w,!0),!o.isFullScreenContainer&&c.value&&c.value.removeEventListener("scroll",w,!0),i.value.keyboardControl!==!1&&document.removeEventListener("keydown",$,!0)}const g=D();ge("globalSetCurrentSubMenu",v=>g.value=v),ge("globalGetMenuHostId",c.value.id);function $(v){var C,x,A,T,J,Y,F,H,U,Z,G,ie,we;let ke=!0;switch(v.key){case"Escape":{((C=g.value)==null?void 0:C.isTopLevel())===!1?(x=g.value)==null||x.closeCurrentSubMenu():f();break}case"ArrowDown":(A=g.value)==null||A.moveCurrentItemDown();break;case"ArrowUp":(T=g.value)==null||T.moveCurrentItemUp();break;case"Home":(J=g.value)==null||J.moveCurrentItemFirst();break;case"End":(Y=g.value)==null||Y.moveCurrentItemLast();break;case"ArrowLeft":{(F=g.value)!=null&&F.closeSelfAndActiveParent()||(U=(H=i.value).onKeyFocusMoveLeft)==null||U.call(H);break}case"ArrowRight":(Z=g.value)!=null&&Z.openCurrentItemSubMenu()||(ie=(G=i.value).onKeyFocusMoveRight)==null||ie.call(G);break;case"Enter":(we=g.value)==null||we.triggerCurrentItemClick(v);break;default:ke=!1;break}ke&&g.value&&(v.stopPropagation(),v.preventDefault())}function w(v){i.value.closeWhenScroll!==!1&&h(v.target,null)}function k(v){h(v.target,v)}function h(v,C){for(var x,A;v;){if(v.classList&&v.classList.contains("mx-context-menu"))return;v=v.parentNode}C?i.value.clickCloseOnOutside!==!1?(b(),f()):(A=(x=i.value).onClickOnOutside)==null||A.call(x,C):(b(),f())}return ge("globalOptions",i),ge("globalCloseMenu",f),ge("globalIsFullScreenContainer",o.isFullScreenContainer),ge("globalHasSlot",v=>r[v]!==void 0),ge("globalRenderSlot",(v,C)=>ue(r,v,{...C},()=>[tt("span","Render slot failed")],!1)),ge("menuContext",{zIndex:i.value.zIndex||Ee.defaultZindex,container:c.value,adjustPadding:{x:0,y:0},getZoom:()=>i.value.zoom||Ee.defaultZoom,getParentWidth:()=>0,getParentHeight:()=>0,getPositon:()=>[i.value.x,i.value.y],closeOtherSubMenuWithTimeOut:()=>{},checkCloseOtherSubMenuTimeOut:()=>!1,addOpenedSubMenu:()=>{},closeOtherSubMenu:()=>{},getParentContext:()=>null,getSubMenuInstanceContext:()=>null,getElement:()=>null,addChildMenuItem:()=>{},removeChildMenuItem:()=>{},markActiveMenuItem:()=>{},markThisOpenedByKeyBoard:()=>{},isOpenedByKeyBoardFlag:()=>!1,isMenuItemDataCollectedFlag:()=>!1}),t(p),(v,C)=>(R(),ee(kn,{ref_key:"submenuInstance",ref:l,show:y(a),items:y(i).items,adjustPosition:y(i).adjustPosition,maxWidth:y(i).maxWidth||y(Ee).defaultMaxWidth,minWidth:y(i).minWidth||y(Ee).defaultMinWidth,maxHeight:y(i).maxHeight,direction:y(i).direction||y(Ee).defaultDirection,onCloseAnimFinished:C[0]||(C[0]=x=>s("closeAnimFinished"))},{default:Re(()=>[ue(v.$slots,"default")]),_:3},8,["show","items","adjustPosition","maxWidth","minWidth","maxHeight","direction"]))}}),Hl=X({__name:"ContextMenu",props:{options:{type:Object,default:null},show:{type:Boolean,default:!1}},emits:["update:show","close"],setup(e,{expose:t,emit:n}){const o=n,s=e,{options:r,show:l}=Ve(s),{isNew:i,container:a,eleId:c}=Vo(r.value),p=D(null),u=uo();function m(f){var S,I;o("update:show",!1),o("close"),(I=(S=r.value).onClose)==null||I.call(S,f)}return t({closeMenu:()=>o("update:show",!1),isClosed:()=>!l.value,getMenuRef:()=>{var f;return(f=p.value)==null?void 0:f.getMenuRef()},getMenuDimensions:()=>{var f;return((f=p.value)==null?void 0:f.getMenuDimensions())??{width:0,height:0}}}),(f,S)=>(R(),ee(fn,{to:`#${y(c)}`},[z(qo,{ref_key:"menuRef",ref:p,options:y(r),show:y(l),container:y(a),isFullScreenContainer:!y(i),onClose:m},fo({_:2},[st(y(u),(I,b)=>({name:b,fn:Re(g=>[ue(f.$slots,b,cs(us(g)))])}))]),1032,["options","show","container","isFullScreenContainer"])],8,["to"]))}}),Wl=X({name:"ContextMenuGroup",props:{disabled:{type:Boolean,default:!1},hidden:{type:Boolean,default:!1},clickHandler:{type:Function,default:null},label:{type:String,default:""},icon:{type:String,default:""},iconFontClass:{type:String,default:"iconfont"},checked:{type:Boolean,default:!1},shortcut:{type:String,default:""},svgIcon:{type:String,default:""},svgProps:{type:Object,default:null},preserveIconWidth:{type:Boolean,default:!0},showRightArrow:{type:Boolean,default:!1},clickClose:{type:Boolean,default:!0},adjustSubMenuPosition:{type:Boolean,default:void 0},maxHeight:{type:[String,Number],default:0},maxWidth:{type:[String,Number],default:0},minWidth:{type:[String,Number],default:0}},setup(e,t){const n=re("globalOptions"),{adjustSubMenuPosition:o,maxWidth:s,minWidth:r,maxHeight:l}=Ve(e),i=typeof o.value<"u"?o.value:n.value.adjustPosition,a=D(),c=D();return t.expose({getSubMenuRef:()=>a.value,getMenuItemRef:()=>c.value}),()=>tt(wn,{...e,ref:c,showRightArrow:!0,maxWidth:void 0,minWidth:void 0,maxHeight:void 0,adjustSubMenuPosition:void 0,hasChildren:typeof t.slots.default!==void 0},t.slots.default?{submenu:p=>tt(kn,{ref:a,show:p.show,maxWidth:s.value,minWidth:r.value,maxHeight:l.value,adjustPosition:i,parentMenuItemContext:p.context},{default:t.slots.default}),...pl(t.slots,"default")}:t.slots)}});function zl(e,t,n,o){const s=D(!0),r=tt(qo,{options:e,show:s,container:t,isFullScreenContainer:!n,onCloseAnimFinished:()=>{_n(null,t)},onClose:l=>{var i;(i=e.onClose)==null||i.call(e,l),s.value=!1}},o);return _n(r,t),r.component}function to(e,t){const n=Vo(e);return zl(e,n.container,n.isNew,t).exposed}const Dt={install(e){e.config.globalProperties.$contextmenu=to,e.component("ContextMenu",Hl),e.component("ContextMenuItem",wn),e.component("ContextMenuGroup",Wl),e.component("ContextMenuSperator",vt),e.component("ContextMenuSeparator",vt),e.component("ContextSubMenu",kn)},showContextMenu(e,t){return to(e,t)},isAnyContextMenuOpen(){return al()},closeContextMenu:jo,transformMenuPosition:cl},Ul={key:0,class:"empty-container"},jl={key:0},Vl={key:1},ql={key:2},Gl={key:3},Kl={key:4},Jl={key:5},Yl=X({__name:"EmptyFolder",props:{path:{},documents:{}},setup(e){const t=fs,n=se(),o=e;return(s,r)=>!o.path||e.documents.length===0?(R(),P("div",Ul,[(R(),ee(dn(y(t)),{class:me(["cog",{stopped:y(n).dialog==="accessdenied"||y(n).authInProgress}])},null,8,["class"])),y(n).dialog==="accessdenied"?(R(),P("p",jl,"Access Denied")):y(n).connected?y(n).document.length===0?(R(),P("p",ql,"Waiting for File List")):y(n).query?(R(),P("p",Gl,"No matches!")):y(Uo)(o.path)?(R(),P("p",Jl,"Empty folder")):(R(),P("p",Kl,"Folder not found")):(R(),P("p",Vl,"No Connection"))])):q("",!0)}}),Xl=ye(Yl,[["__scopeId","data-v-0494c508"]]),Zl=["checked"],Ql=X({__name:"SelectBox",props:{doc:{}},setup(e){const t=se();return(n,o)=>(R(),P("input",{type:"checkbox",tabindex:"-1",checked:y(t).selected.has(e.doc.key),onClick:o[0]||(o[0]=de(()=>{},["stop"])),onChange:o[1]||(o[1]=s=>{s.target.checked?y(t).selected.add(e.doc.key):y(t).selected.delete(e.doc.key)})},null,40,Zl))}}),cn=X({__name:"FileRenameInput",props:{doc:{},rename:{type:Function},exit:{type:Function}},setup(e){const t=D(null),n=D("");be(()=>{n.value=o.doc.name;const r=n.value.lastIndexOf(".");ve(()=>{t.value.focus(),t.value.setSelectionRange(0,r>0?r:n.value.length)})});const o=e,s=()=>{o.exit(),!(o.doc.key!=="new"&&(n.value===o.doc.name||n.value.length===0))&&o.rename(o.doc,n.value)};return(r,l)=>wt((R(),P("input",{ref_key:"input",ref:t,id:"FileRenameInput",type:"text",autocorrect:"off","onUpdate:modelValue":l[0]||(l[0]=i=>n.value=i),onBlur:l[1]||(l[1]=(...i)=>e.exit&&e.exit(...i)),onKeyup:[l[2]||(l[2]=Qe((...i)=>e.exit&&e.exit(...i),["esc"])),Qe(s,["enter"])]},null,544)),[[Qt,n.value]])}}),ea=["src"],ta=["src"],na={key:2,class:"folder icon"},oa={key:3,class:"video-container"},sa=["src","poster"],ra={class:"play-overlay"},la={key:4,class:"audio icon"},aa=["src"],ia={key:5,class:"archive icon"},ca=X({__name:"MediaPreview",props:{doc:{},quality:{}},setup(e,{expose:t}){const n=D(null),o=D(null),s=K(()=>n.value||o.value),r=K(()=>`${l.doc.previewurl}?${l.quality}&t=${l.doc.mtime}`),l=e,i=()=>{s.value&&(s.value.controls=!0,s.value.setAttribute("data-playing",""))},a=()=>{s.value&&(s.value.controls=!1,s.value.removeAttribute("data-playing"))};let c=null;const p=()=>{if(!s.value)return;s.value.load();const I=Array.from(document.querySelectorAll("video, audio"));if(I.length===0)return;let b=null;for(const g in I)if(I[g]===(c||s.value)){b=I[+g+1]??I[0]??null;break}if(b)if(b.tagName==="VIDEO"&&document.fullscreenElement===s.value){const g=s.value,$=b;if(g===$){$.play();return}c||g.addEventListener("fullscreenchange",w=>{c&&(c.currentTime=g.currentTime,c.click(),g.paused||c.play(),c=null,g.src=l.doc.url,g.poster=r.value,a())},{once:!0}),c=$,g.src=$.src,g.poster="",g.play()}else document.exitFullscreen(),b.click()};t({play(){if(!s.value)return!1;if(s.value.paused){s.value.play();for(const I of Array.from(document.querySelectorAll("video, audio")))I!==s.value&&I.pause()}else s.value.pause();return!0},media:s});const u=()=>["mkv","mp4","webm","mov","avi"].includes(l.doc.ext),m=()=>["mp3","flac","ogg","aac"].includes(l.doc.ext),f=()=>["zip","tar","gz","bz2","xz","7z","rar"].includes(l.doc.ext),S=()=>["bmp","ico","tif","tiff","heic","heif","pdf","epub","mobi"].includes(l.doc.ext)||l.doc.size>5e5&&["avif","webp","png","jpg","jpeg"].includes(l.doc.ext);return(I,b)=>S()?(R(),P("img",{key:0,src:`${e.doc.previewurl}?${e.quality}&t=${e.doc.mtime}`,alt:""},null,8,ea)):e.doc.img?(R(),P("img",{key:1,src:e.doc.url,alt:""},null,8,ta)):e.doc.dir?(R(),P("span",na)):u()?(R(),P("div",oa,[E("video",{ref_key:"vid",ref:o,src:e.doc.url,poster:r.value,preload:"none",onPlay:i,onPause:a,onEnded:p,onSeeking:b[0]||(b[0]=g=>s.value.play())},null,40,sa),E("div",ra,[z(y(ps))])])):m()?(R(),P("div",la,[E("audio",{ref_key:"aud",ref:n,src:e.doc.url,class:"icon",preload:"none",onPlay:i,onPause:a,onEnded:p,onSeeking:b[1]||(b[1]=g=>s.value.play())},null,40,aa)])):f()?(R(),P("span",ia)):(R(),P("span",{key:6,class:me(["file icon",`ext-${e.doc.ext}`])},null,2))}}),ua=ye(ca,[["__scopeId","data-v-47490c5c"]]);let Yt=!1,Ge=null,Xt=!1;const da=X({__name:"CursorTooltip",props:{text:{},delay:{}},setup(e,{expose:t}){const n=e,o=D(!1),s=D(0),r=D(0);let l=null,i=0,a=0;const c=8,p=K(()=>({left:`${s.value}px`,top:`${r.value}px`})),u=()=>window.matchMedia("(pointer: fine)").matches,m=()=>{o.value=!0,Yt=!0},f=()=>{l&&clearTimeout(l),Ge&&(clearTimeout(Ge),Ge=null);const g=Yt?0:n.delay??900;l=setTimeout(m,g)};return t({startHover:g=>{!u()&&!Xt||(s.value=g.clientX,r.value=g.clientY,i=g.clientX,a=g.clientY)},updatePosition:g=>{if((g.movementX!==0||g.movementY!==0)&&(Xt=!0),!u()&&!Xt||(s.value=g.clientX,r.value=g.clientY,o.value))return;const $=g.clientX-i,w=g.clientY-a;Math.sqrt($*$+w*w)>c&&(i=g.clientX,a=g.clientY,l&&(clearTimeout(l),l=null)),l||f()},endHover:()=>{l&&(clearTimeout(l),l=null),o.value=!1,Ge&&clearTimeout(Ge),Ge=setTimeout(()=>{Yt=!1},400)}}),(g,$)=>(R(),ee(fn,{to:"body"},[o.value?(R(),P("div",{key:0,class:"cursor-tooltip",style:Je(p.value)},[ue(g.$slots,"default",{},void 0,!0)],4)):q("",!0)]))}}),Go=ye(da,[["__scopeId","data-v-c5d421fc"]]),fa=["id","href"],pa={class:"tooltip-name"},ma={class:"tooltip-details"},ha=X({__name:"GalleryFigure",props:{doc:{},editing:{}},setup(e){const t=se(),n=e,o=D(null),s=D(null),r=K(()=>n.doc.key),l=i=>{o.value.play()&&i.preventDefault(),t.cursor=n.doc.key};return(i,a)=>{const c=cn,p=Ql;return R(),P("a",{id:`file-${e.doc.key}`,href:e.doc.url,tabindex:"-1",class:me({file:!e.doc.dir,folder:e.doc.dir,cursor:y(t).cursor===e.doc.key}),onContextmenu:a[3]||(a[3]=de(()=>{},["stop"])),onFocus:a[4]||(a[4]=de(u=>y(t).cursor=e.doc.key,["stop"])),onClick:l,onMouseenter:a[5]||(a[5]=(...u)=>s.value?.startHover&&s.value?.startHover(...u)),onMousemove:a[6]||(a[6]=(...u)=>s.value?.updatePosition&&s.value?.updatePosition(...u)),onMouseleave:a[7]||(a[7]=(...u)=>s.value?.endHover&&s.value?.endHover(...u))},[E("figure",null,[ue(i.$slots,"default",{},void 0,!0),z(ua,{ref_key:"m",ref:o,doc:e.doc,tabindex:"-1",quality:"sz=512",class:"figcontent"},null,8,["doc"]),a[9]||(a[9]=E("div",{class:"titlespacer"},null,-1)),E("figcaption",{onClick:a[1]||(a[1]=de(()=>{},["prevent"])),onContextmenu:a[2]||(a[2]=de(u=>i.$emit("menu",u),["prevent"]))},[e.editing?(R(),ee(c,{key:0,doc:e.doc,rename:e.editing.rename,exit:e.editing.exit},null,8,["doc","rename","exit"])):(R(),P(fe,{key:1},[z(p,{doc:e.doc,onClick:a[0]||(a[0]=u=>y(t).cursor=e.doc.key)},null,8,["doc"]),E("span",null,ne(e.doc.name),1),a[8]||(a[8]=E("div",{class:"namespacer"},null,-1))],64))],32)]),z(Go,{ref_key:"tooltip",ref:s,text:r.value},{default:Re(()=>[E("div",pa,ne(e.doc.name),1),E("div",ma,ne(e.doc.modified)+" — "+ne(e.doc.sizedisp),1)]),_:1},8,["text"])],42,fa)}}}),ga=ye(ha,[["__scopeId","data-v-91479c1d"]]),va=X({__name:"Gallery",props:{path:{},documents:{}},setup(e,{expose:t}){const n=e,o=se(),s=pn(),r=un(null),l=()=>{r.value=null},i=(h,v)=>{const C=h.name,x=Ue(bt,{message(A){const T=JSON.parse(A.data);"error"in T?(console.error("Rename failed",T.error.message,T.error),h.name=C):console.log("Rename succeeded",T)}});x.onopen=()=>{x.send(JSON.stringify({op:"rename",path:`${h.loc}/${C}`,to:v}))},h.name=v},a=D(),c=D(1),p=()=>{a.value&&(c.value=getComputedStyle(a.value).gridTemplateColumns.split(" ").length)},u=K(()=>c.value);t({newFolder(){const h=Math.floor(Date.now()/1e3);r.value=new It({loc:w.value,key:"new",name:"New Folder",dir:!0,mtime:h,size:0}),o.cursor=r.value.key},toggleSelectAll(){console.log("Select"),$.value=!$.value},toggleSortColumn(h){const v=["","name","modified","size",""][h];v&&o.toggleSort(v)},isCursor(){return o.cursor&&r.value===null},cursorRename(){r.value=n.documents.find(h=>h.key===o.cursor)??null},cursorSelect(){const h=o.cursor;h&&(o.selected.has(h)?o.selected.delete(h):o.selected.add(h),this.cursorMove(1,null))},up(h){this.cursorMove(-u.value,h)},down(h){this.cursorMove(u.value,h)},left(h){this.cursorMove(-1,h)},right(h){this.cursorMove(1,h)},cursorMove(h,v){const C=!!v?.shiftKey,x=n.documents;if(x.length===0){o.cursor="";return}const A=x.length,T=(U,Z)=>(U%Z+Z)%Z,J=(U,Z)=>T(U+Z,A+1),Y=o.cursor?x.findIndex(U=>U.key===o.cursor):A;if(v&&Y===0&&v.key==="ArrowLeft"||v&&Y===A-1&&v.key==="ArrowRight")return;let F;Y===A?F=h>0?0:A-1:(F=J(Y,h),(Math.abs(h)>=A||Math.sign(h)!==Math.sign(F-Y))&&(F=A)),o.cursor=x[F]?.key??"";const H=o.cursor?document.getElementById(`file-${o.cursor}`):"";if(C){let[U,Z]=h>0?[Y,F]:[F,Y];for(let G=U;G!==Z;G=J(G,1)){if(G===A)continue;const ie=x[G].key;o.selected.has(ie)?o.selected.delete(ie):o.selected.add(ie)}}S=H,f||(f=setTimeout(()=>{S&&S.scrollIntoView({block:"center",behavior:"smooth"}),f=null},300)),F===A&&m()}});const m=()=>{const h=document.querySelector(".breadcrumb");h&&h.focus()};let f=null,S=null;Ie(()=>{if(o.cursor&&o.cursor!==r.value?.key&&(r.value=null),r.value&&(o.cursor=r.value.key),o.cursor){const h=document.querySelector(`#file-${o.cursor}`);h&&(h.focus(),h.scrollIntoView({block:"center",behavior:"smooth"}))}}),Ie(()=>{!n.documents.length&&o.cursor&&(o.cursor="",m())});let I=null;be(()=>{const h=document.querySelector(".cursor");h&&(h.scrollIntoView({block:"center",behavior:"instant"}),h.focus()),p(),a.value&&(I=new ResizeObserver(p),I.observe(a.value))}),yt(()=>{I?.disconnect()});const b=(h,v)=>{const C=Ue(bt,{open(){C.send(JSON.stringify({op:"mkdir",path:`${h.loc}/${v}`}))},message(x){const A=JSON.parse(x.data);"error"in A?(console.error("Mkdir failed",A.error.message,A.error),r.value=null):(console.log("mkdir",A),s.push(h.urlrouter))}});h.name=v,h.key=crypto.randomUUID()},g=h=>{const v=n.documents,C=v[h].loc;return h===0?C!==w.value:C!==v[h-1].loc},$=K({get:()=>n.documents.length>0&&n.documents.every(h=>o.selected.has(h.key)),set:h=>{console.log("Setting allSelected",h);for(const v of n.documents)h?o.selected.add(v.key):o.selected.delete(v.key)}}),w=K(()=>n.path.join("/")),k=(h,v)=>{o.cursor=v.key,Dt.showContextMenu({x:h.x,y:h.y,items:[{label:"Rename",onClick:()=>{r.value=v}}]})};return(h,v)=>{const C=ga,x=vn;return n.documents.length||r.value?(R(),P("div",{key:0,class:"gallery",ref_key:"gallery",ref:a},[r.value?.key==="new"?(R(),ee(C,{doc:r.value,key:r.value.key,editing:{rename:b,exit:l}},null,8,["doc","editing"])):q("",!0),(R(!0),P(fe,null,st(e.documents,(A,T)=>(R(),P(fe,{key:A.key},[g(T)?(R(),ee(x,{key:0,path:A.loc?A.loc.split("/"):[],class:"folder-indicator"},null,8,["path"])):q("",!0),z(C,{doc:A,editing:r.value===A?{rename:i,exit:l}:null,onMenu:J=>k(J,A),class:me({"folder-start":g(T)})},null,8,["doc","editing","onMenu","class"])],64))),128))],512)):q("",!0)}}}),ya=ye(va,[["__scopeId","data-v-9973e293"]]),wa=X({__name:"FileSize",props:{doc:{}},setup(e){const t=K(()=>{const o=n.doc.sizedisp.split(" ").slice(-1)[0];return+o?"bytes":o}),n=e;return(o,s)=>(R(),P("td",{class:me(["size right",t.value])},ne(e.doc.sizedisp),3))}}),ka=ye(wa,[["__scopeId","data-v-444c7802"]]),ba={class:"modified right"},Ca=["datetime"],xa=X({__name:"FileModified",props:{doc:{},now:{}},setup(e){const t=e,n=D(null),o=K(()=>(t.now,To(t.doc.mtime))),s=K(()=>new Date(1e3*t.doc.mtime).toISOString().replace(".000Z","Z")),r=K(()=>s.value.replace("T"," ").replace("Z"," UTC"));return(l,i)=>(R(),P("td",ba,[E("time",{datetime:s.value,onMouseenter:i[0]||(i[0]=(...a)=>n.value?.startHover&&n.value?.startHover(...a)),onMousemove:i[1]||(i[1]=(...a)=>n.value?.updatePosition&&n.value?.updatePosition(...a)),onMouseleave:i[2]||(i[2]=(...a)=>n.value?.endHover&&n.value?.endHover(...a))},ne(o.value),41,Ca),z(Go,{ref_key:"tooltip",ref:n,text:r.value},{default:Re(()=>[We(ne(r.value),1)]),_:1},8,["text"])]))}}),Sa={key:0},_a={class:"selection"},Ea=["indeterminate"],Ra={key:0,class:"folder"},Ia={class:"name"},Aa={key:0,class:"folder-change"},$a={colspan:"5"},Ma=["id","onClick","onContextmenu"],Pa=["onClick"],Oa=["checked","onChange"],Na={class:"name"},Ta=["href","onFocus"],La=["onClick"],Da={class:"menu"},Ba=["onClick"],Fa={key:1,class:"summary"},Ha={colspan:"3",class:"right"},Wa={class:"size right"},za=X({__name:"FileExplorer",props:{path:{},documents:{}},setup(e,{expose:t}){const n=e,o=se(),s=pn(),r=un(null),l=(w,k)=>{const h=w.name,v=Ue(bt,{message(C){const x=JSON.parse(C.data);"error"in x?(console.error("Rename failed",x.error.message,x.error),w.name=h):console.log("Rename succeeded",x)}});v.onopen=()=>{v.send(JSON.stringify({op:"rename",path:`${w.loc}/${h}`,to:k}))},w.name=k};t({newFolder(){console.log("New folder");const w=Math.floor(Date.now()/1e3);r.value=new It({loc:g.value,key:"new",name:"New Folder",dir:!0,mtime:w,size:0}),o.cursor=r.value.key},toggleSelectAll(){console.log("Select"),b.value=!b.value},isCursor(){return o.cursor&&r.value===null},cursorRename(){r.value=n.documents.find(w=>w.key===o.cursor)??null},cursorSelect(){const w=o.cursor;w&&(o.selected.has(w)?o.selected.delete(w):o.selected.add(w),this.cursorMove(1,null))},up(w){this.cursorMove(-1,w)},down(w){this.cursorMove(1,w)},left(w){s.back()},right(w){const k=document.querySelector(`#file-${o.cursor} a`);k&&k.click()},cursorMove(w,k){const h=!!k?.shiftKey,v=n.documents;if(v.length===0){o.cursor="";return}const C=v.length,x=(F,H)=>(F%H+H)%H,A=(F,H)=>x(F+H,C+1),T=o.cursor?v.findIndex(F=>F.key===o.cursor):v.length,J=A(T,w);o.cursor=v[J]?.key??"";const Y=o.cursor?document.getElementById(`file-${o.cursor}`):"";if(h){let[F,H]=w>0?[T,J]:[J,T];for(let U=F;U!==H;U=A(U,1)){if(U===C)continue;const Z=v[U].key;o.selected.has(Z)?o.selected.delete(Z):o.selected.add(Z)}}c=Y,a||(a=setTimeout(()=>{c&&c.scrollIntoView({block:"center",behavior:"smooth"}),a=null},300)),J===C&&i()}});const i=()=>{const w=document.querySelector(".breadcrumb");w&&w.focus()};let a=null,c=null;Ie(()=>{if(o.cursor&&o.cursor!==r.value?.key&&(r.value=null),r.value&&(o.cursor=r.value?.key),o.cursor){const w=document.querySelector(`#file-${o.cursor} .name a`);w&&w.focus()}}),Ie(()=>{!n.documents.length&&o.cursor&&(o.cursor="",i())});let p=D(0),u=null;const m=()=>{p.value=Math.floor(Date.now()/1e3)};be(()=>{m(),u=setInterval(m,1e3);const w=document.querySelector(".cursor");w&&(w.scrollIntoView({block:"center",behavior:"instant"}),w.focus())}),yt(()=>{clearInterval(u)});const f=(w,k)=>{const h=Ue(bt,{open(){h.send(JSON.stringify({op:"mkdir",path:`${w.loc}/${k}`}))},message(v){const C=JSON.parse(v.data);"error"in C?(console.error("Mkdir failed",C.error.message,C.error),r.value=null):(console.log("mkdir",C),s.push(w.urlrouter))}});w.name=k,w.key=crypto.randomUUID()},S=w=>{const k=n.documents,h=k[w].loc;return w===0?h!==g.value:h!==k[w-1].loc},I=K({get:()=>n.documents.length>0&&n.documents.some(w=>o.selected.has(w.key))&&!b.value,set:w=>{}}),b=K({get:()=>n.documents.length>0&&n.documents.every(w=>o.selected.has(w.key)),set:w=>{console.log("Setting allSelected",w);for(const k of n.documents)w?o.selected.add(k.key):o.selected.delete(k.key)}}),g=K(()=>n.path.join("/")),$=(w,k)=>{o.cursor=k.key,Dt.showContextMenu({x:w.x,y:w.y,items:[{label:"Rename",onClick:()=>{r.value=k}}]})};return(w,k)=>{const h=xa,v=ka,C=vn;return n.documents.length||r.value?(R(),P("table",Sa,[E("thead",null,[E("tr",null,[E("th",_a,[wt(E("input",{type:"checkbox",tabindex:"-1","onUpdate:modelValue":k[0]||(k[0]=x=>b.value=x),indeterminate:I.value},null,8,Ea),[[mo,b.value]])]),E("th",{class:me(["sortcolumn",{sortactive:y(o).sortOrder==="name"}]),onClick:k[1]||(k[1]=x=>y(o).toggleSort("name"))},"Name",2),E("th",{class:me(["sortcolumn modified right",{sortactive:y(o).sortOrder==="modified"}]),onClick:k[2]||(k[2]=x=>y(o).toggleSort("modified"))},"Modified",2),E("th",{class:me(["sortcolumn size right",{sortactive:y(o).sortOrder==="size"}]),onClick:k[3]||(k[3]=x=>y(o).toggleSort("size"))},"Size",2),k[5]||(k[5]=E("th",{class:"menu"},null,-1))])]),E("tbody",null,[r.value?.key==="new"?(R(),P("tr",Ra,[k[6]||(k[6]=E("td",{class:"selection"},null,-1)),E("td",Ia,[z(cn,{doc:r.value,rename:f,exit:()=>{r.value=null}},null,8,["doc","exit"])]),z(h,{doc:r.value,now:y(p)},null,8,["doc","now"]),z(v,{doc:r.value},null,8,["doc"]),k[7]||(k[7]=E("td",{class:"menu"},null,-1))])):q("",!0),(R(!0),P(fe,null,st(e.documents,(x,A)=>(R(),P(fe,{key:x.key},[S(A)?(R(),P("tr",Aa,[E("th",$a,[z(C,{path:x.loc?x.loc.split("/"):[]},null,8,["path"])])])):q("",!0),E("tr",{id:`file-${x.key}`,class:me({file:!x.dir,folder:x.dir,cursor:y(o).cursor===x.key}),onClick:T=>y(o).cursor=y(o).cursor===x.key?"":x.key,onContextmenu:de(T=>$(T,x),["prevent"])},[E("td",{class:"selection",onClick:de(T=>y(o).cursor=y(o).cursor===x.key?x.key:"",["stop"])},[E("input",{type:"checkbox",tabindex:"-1",checked:y(o).selected.has(x.key),onChange:T=>T.target.checked?y(o).selected.add(x.key):y(o).selected.delete(x.key)},null,40,Oa)],8,Pa),E("td",Na,[r.value===x?(R(),ee(cn,{key:0,doc:x,rename:l,exit:()=>{r.value=null}},null,8,["doc","exit"])):(R(),P(fe,{key:1},[E("a",{href:x.url,tabindex:"-1",onContextmenu:k[4]||(k[4]=de(()=>{},["stop"])),onFocus:de(T=>y(o).cursor=x.key,["stop"])},ne(x.name),41,Ta),y(o).cursor==x.key?(R(),P("button",{key:0,tabindex:"-1",class:"rename-button",onClick:()=>r.value=x},"🖊️",8,La)):q("",!0)],64))]),z(h,{doc:x,now:y(p)},null,8,["doc","now"]),z(v,{doc:x},null,8,["doc"]),E("td",Da,[E("button",{tabindex:"-1",onClick:de(T=>$(T,x),["stop"])},"⋮",8,Ba)])],42,Ma)],64))),128)),n.documents.length>1?(R(),P("tr",Fa,[E("td",Ha,ne(n.documents.length)+" items",1),E("td",Wa,ne(y(No)(n.documents.reduce((x,A)=>x+A.size,0))),1),k[8]||(k[8]=E("td",{class:"menu"},null,-1))])):q("",!0)])])):q("",!0)}}}),Ua=ye(za,[["__scopeId","data-v-c61c7c3a"]]),ja={key:2,class:"search-loading"},Va=X({__name:"ExplorerView",props:{path:{},query:{}},setup(e){const t=se(),n=D(),o=e;Be(()=>[o.query,o.path.join("/")],([r,l])=>{t.search(r,l)},{immediate:!0});const s=K(()=>{const r=o.path.join("/");if(!o.query)return zo(t.document.filter(c=>c.loc===r),t.prefs.sortListing);const i=t.searchResults,a=t.prefs.sortFiltered;return a?Qr(i,a):i});return Ie(()=>{t.fileExplorer=n.value,t.query=o.query}),Be([()=>o.path.join("/"),()=>t.document.length],([r,l],[i,a])=>{r===i&&a!==void 0&&a>0||(t.prefs.gallery=s.value.some(c=>c.previewable))},{immediate:!0}),(r,l)=>{const i=ya,a=Xl;return R(),P(fe,null,[y(t).prefs.gallery?(R(),ee(i,{ref_key:"fileExplorer",ref:n,key:`gallery-${y(je).currentRoute.value.path}`,path:o.path,documents:s.value},null,8,["path","documents"])):(R(),ee(Ua,{ref_key:"fileExplorer",ref:n,key:`explorer-${y(je).currentRoute.value.path}`,path:o.path,documents:s.value},null,8,["path","documents"])),y(t).searchLoading?(R(),P("div",ja,"Searching...")):q("",!0),z(a,{documents:s.value,path:o.path},null,8,["documents","path"])],64)}}}),qa=ye(Va,[["__scopeId","data-v-d099f78a"]]),je=Nr({history:pr("/"),routes:[{path:"/:pathMatch(.*)*",name:"explorer",component:qa}]}),Ga={class:"headermain buttons"},Ka=["value"],Ja=X({__name:"HeaderMain",props:{path:{},query:{}},setup(e,{expose:t}){const n=se(),o=ll(),s=D(!1),r=D(),l=D(),i=e,a=m=>{if(!s.value)return;s.value=!1,document.querySelector(".breadcrumb").focus(),c(m)},c=m=>{const f=m.target.value;let S=i.path.join("/");S=S?`/${S}`:"";const b=(f?`${S}//${f}`:S||"/").replaceAll("?","%3F").replaceAll("#","%23");!i.query&&f?je.push(b):je.replace(b)},p=m=>{if(s.value=!s.value,!s.value)return a(m);ve(()=>{const f=r.value;f&&f.focus()})};Ie(()=>{i.query&&(s.value=!0)});const u=m=>{const f=[];o.isExternalAuth&&n.user.isLoggedIn&&f.push({label:"👤 "+(n.user.username||"User Account"),onClick:()=>{window.location.href="/auth/"}}),!o.isExternalAuth&&n.user.isLoggedIn&&f.push({label:"🔑 Change Password",onClick:()=>{n.dialog="settings"}}),n.user.privileged&&f.push({label:"⚙️ Admin Settings",onClick:()=>{n.dialog="usermgmt"}}),n.user.isLoggedIn?f.push({label:"🚪 Logout",onClick:()=>n.logout()}):n.server.public&&f.push({label:"🔐 Login",onClick:async()=>{try{await gn("/auth/restricted#theme=light"),an()}catch{console.log("Login cancelled")}}}),Dt.showContextMenu({x:m.target.getBoundingClientRect().right,y:m.target.getBoundingClientRect().bottom,items:f})};return t({toggleSearchInput:p,closeSearch:a}),(m,f)=>{const S=rl,I=Lt;return R(),P("nav",Ga,[z(S,{path:i.path},null,8,["path"]),z(I,{name:"create-folder","data-tooltip":"New folder",onClick:f[0]||(f[0]=()=>{console.log("New",y(n).fileExplorer),y(n).fileExplorer.newFolder(),console.log("Done")})}),ue(m.$slots,"default",{},void 0,!0),f[2]||(f[2]=E("div",{class:"spacer smallgap"},null,-1)),s.value?(R(),P("input",{key:0,ref_key:"search",ref:r,type:"search",value:e.query,onInput:c,placeholder:"Find files",class:"margin-input"},null,40,Ka)):q("",!0),z(I,{ref_key:"searchButton",ref:l,name:"find",onClick:de(p,["prevent"])},null,512),z(I,{name:"eye",onClick:f[1]||(f[1]=b=>y(n).prefs.gallery=!y(n).prefs.gallery)}),z(I,{name:"cog",onClick:u})])}}}),Ya=ye(Ja,[["__scopeId","data-v-b9ddc09f"]]);function St(e){return typeof e=="object"&&e!==null&&"error"in e}class Xa{async get(t){try{const n=await xt(t,{method:"GET"});if(St(n))throw new Oe(n.error.code,n.error.message);return n}catch(n){throw n instanceof Ze?new Oe(401,"Authentication cancelled"):n}}async post(t,n){try{const o=await xt(t,{method:"POST",body:n});if(St(o))throw new Oe(o.error.code,o.error.message);return o}catch(o){throw o instanceof Ze?new Oe(401,"Authentication cancelled"):o}}async put(t,n){try{const o=await xt(t,{method:"PUT",body:n});if(St(o))throw new Oe(o.error.code,o.error.message);return o}catch(o){throw o instanceof Ze?new Oe(401,"Authentication cancelled"):o}}async delete(t){try{const n=await xt(t,{method:"DELETE"});if(St(n))throw new Oe(n.error.code,n.error.message);return n}catch(n){throw n instanceof Ze?new Oe(401,"Authentication cancelled"):n}}}const rt=new Xa;class Oe extends Error{code;constructor(t,n){super(n),this.code=t}}const Za=X({__name:"DownloadButton",setup(e){const t=se(),n={total:0,xfer:0,t0:0,tlast:0,statbytes:0,statdur:0,files:[],filestart:0,fileidx:0,filecount:0,filename:"",filesize:0,filepos:0,status:"idle"};t.dprogress={...n},setInterval(()=>{Date.now()-t.dprogress.tlast>3e3?(t.dprogress.statbytes=0,t.dprogress.statdur=1):(t.dprogress.statbytes*=.9,t.dprogress.statdur*=.9)},100);const o=()=>{Object.assign(t.dprogress,n),t.dprogress.t0=Date.now(),t.dprogress.tlast=t.dprogress.t0+1},s=i=>{const a=document.createElement("a");a.href=i,a.download="",a.click()},r=async(i,a)=>{let c="",p=a;console.log("Downloading to filesystem",i.recursive);for(const[u,m,f]of i.recursive)f.dir||(t.dprogress.files.push(u),++t.dprogress.filecount,t.dprogress.total+=f.size);for(const[u,m,f]of i.recursive){c&&!u.startsWith(c+"/")&&(c="",p=a);const S=u.slice(c.length);for(const g of S.split("/").slice(0,f.dir?void 0:-1))if(g){c+=`${g}/`;try{p=await p.getDirectoryHandle(g.normalize("NFC"),{create:!0})}catch($){throw console.error("Failed to create directory",c,$),new Error(`Failed to create directory ${c}: ${$}`)}console.log("Created",c)}if(f.dir)continue;const I=u.split("/").pop().normalize("NFC");let b;try{b=await p.getFileHandle(I,{create:!0})}catch(g){throw console.error("Failed to create file",u,m,c+I,g),new Error(`Failed to create file ${c+I}: ${g}`)}try{const g=await b.createWritable(),$=`/files/${u}`;console.log("Fetching",$);const w=await Do($);if(!w.ok)throw t.error=`Failed to download ${$}: ${w.status} ${w.statusText}`,new Error(`Failed to download ${$}: ${w.status} ${w.statusText}`);if(w.body){++t.dprogress.fileidx;const k=w.body.getReader();for(await g.truncate(0),t.dprogress.tlast=Date.now();;){const{value:h,done:v}=await k.read();if(v)break;await g.write(h);const C=Date.now(),x=h.byteLength;t.dprogress.xfer+=x,t.dprogress.filepos+=x,t.dprogress.statbytes+=x,t.dprogress.statdur+=C-t.dprogress.tlast,t.dprogress.tlast=C}}await g.close(),console.log("Saved",c+I)}catch(g){throw console.error("Failed to write file",c+I,g),new Error(`Failed to write file ${c+I}: ${g}`)}}o()},l=async()=>{const i=t.selectedFiles;if(console.log("Download",i),i.keys.length===0){console.warn("Attempted download but no files found. Missing selected keys:",i.missing),t.showToast("No existing files selected"),t.selected.clear();return}const a=i.recursive.filter(([u,m,f])=>!f.dir);if(a.length===1)return t.selected.clear(),t.showToast(`Downloading ${a[0][0].split("/").pop()}`),s(`/files/${a[0][1]}`);if("showDirectoryPicker"in window)try{const u=await window.showDirectoryPicker({startIn:"downloads",mode:"readwrite"});await r(i,u),t.selected.clear();return}catch(u){console.error("Download to folder aborted",u)}console.log("Falling back to zip download");const c=i.keys.map(u=>i.docs[u]),p=tl(c);s(`/zip/${Array.from(i.keys).join("+")}/${p}.zip`),t.showToast(`Downloading ${p}.zip`),t.selected.clear()};return(i,a)=>{const c=Lt;return R(),ee(c,{name:"download","data-tooltip":"Download",onClick:l})}}}),Qa={class:"select-text"},ei=X({__name:"HeaderSelected",props:{path:Array},setup(e){const t=se(),n=e,o=K(()=>n.path.join("/")),s=(r,l)=>{const i=t.selectedFiles,a={op:r,sel:i.keys.map(p=>{const u=i.docs[p];return u.loc?`${u.loc}/${u.name}`:u.name})};l!==void 0&&(a.dst=l);const c=Ue(bt,{message(p){const u=JSON.parse(p.data);if("error"in u){console.error("Control socket error",a,u.error),t.error=u.error.message;return}else if(u.status==="ack"){console.log("Control ack OK",u),c.close(),t.selected.clear();return}else console.log("Unknown control response",a,u)}});c.onopen=()=>{c.send(JSON.stringify(a))}};return(r,l)=>{const i=Za,a=Lt;return y(t).selected.size?(R(),P(fe,{key:0},[l[4]||(l[4]=E("div",{class:"smallgap"},null,-1)),E("p",Qa,ne(y(t).selected.size)+" selected ➤",1),z(i),z(a,{name:"copy","data-tooltip":"Copy here",onClick:l[0]||(l[0]=c=>s("cp",o.value))}),z(a,{name:"paste","data-tooltip":"Move here",onClick:l[1]||(l[1]=c=>s("mv",o.value))}),z(a,{name:"trash","data-tooltip":"Delete ⚠️",onClick:l[2]||(l[2]=c=>s("rm"))}),E("button",{class:"action-button unselect","data-tooltip":"Unselect all",onClick:l[3]||(l[3]=c=>y(t).selected.clear())},"❌")],64)):q("",!0)}}}),ti=["id"],ni={key:0},oi={class:"modal-content"},Ko=X({__name:"ModalDialog",props:{title:{},name:{}},setup(e,{expose:t}){const n=D(null),o=D(null),s=se(),r=()=>{s.dialog="",Lo()},l=e;return t({show:()=>{s.dialog=l.name,hn(),ve(()=>{n.value?.focus();const a=o.value?.querySelector("input");a&&a.focus()})},close:r}),Ie(()=>{if(n.value){n.value.focus();const a=o.value?.querySelector("input");a&&a.focus()}}),(a,c)=>y(s).dialog===e.name?(R(),P("div",{key:0,class:"modal-overlay",onClick:de(r,["self"]),onKeydown:Qe(r,["escape"]),tabindex:"-1",ref_key:"overlay",ref:n},[E("div",{class:"modal-dialog",id:l.name,ref_key:"dialog",ref:o},[l.title?(R(),P("h1",ni,ne(l.title),1)):q("",!0),E("div",oi,[ue(a.$slots,"default",{},()=>[c[0]||(c[0]=We(" Dialog with no content ",-1)),E("button",{onClick:r},"OK")])])],8,ti)],544)):q("",!0)}}),si="/auth/password-change";async function ri(e,t,n){return await rt.post(si,{username:e,passwordChange:t,password:n})}const Bt="/auth/users";async function li(){return await rt.get(Bt)}async function no(e,t,n){return await rt.post(Bt,{username:e,password:t,privileged:n})}async function oo(e,t){return await rt.put(`${Bt}/${e}`,t)}async function so(e){return await rt.delete(`${Bt}/${e}`)}async function ai(e){return await rt.put("/api/config/public",{public:e})}const ii={class:"form-grid"},ci={class:"dialog-buttons"},ui=X({__name:"SettingsModal",setup(e){const t=D(!1),n=se(),o=D(),s=D(),r=et({passwordChange:"",password:""}),l=()=>{r.passwordChange="",r.password="",n.dialog=""},i=async a=>{a.preventDefault();try{if(r.passwordChange){if(!r.password){n.showToast("⚠️ Current password is required"),s.value.focus();return}await ri(n.user.username,r.passwordChange,r.password)}l()}catch(c){const p=c;n.showToast(p.message||"🛑 Unknown error")}finally{t.value=!1}};return(a,c)=>{const p=Ko;return R(),ee(p,{name:"settings",title:"Settings"},{default:Re(()=>[E("form",null,[y(n).user.isLoggedIn?(R(),P(fe,{key:0},[c[5]||(c[5]=E("h3",null,"Update your authentication",-1)),E("div",ii,[c[2]||(c[2]=E("label",{for:"passwordChange"},"New password:",-1)),wt(E("input",{ref_key:"passwordChange",ref:o,id:"passwordChange",type:"password",autocomplete:"new-password",spellcheck:"false",autocorrect:"off","onUpdate:modelValue":c[0]||(c[0]=u=>r.passwordChange=u)},null,512),[[Qt,r.passwordChange]]),c[3]||(c[3]=E("label",{for:"password"},"Current password:",-1)),wt(E("input",{ref_key:"password",ref:s,id:"password",name:"password",type:"password",autocomplete:"current-password",spellcheck:"false",autocorrect:"off","onUpdate:modelValue":c[1]||(c[1]=u=>r.password=u)},null,512),[[Qt,r.password]])]),E("div",ci,[E("input",{id:"close",type:"reset",value:"Close",class:"button",onClick:l}),c[4]||(c[4]=E("div",{class:"spacer"},null,-1)),E("input",{id:"submit",type:"submit",value:"Submit",class:"button",onClick:de(i,["prevent"])})])],64)):(R(),P(fe,{key:1},[c[7]||(c[7]=E("p",null,"No settings are available because you have not logged in.",-1)),E("div",{class:"dialog-buttons"},[c[6]||(c[6]=E("div",{class:"spacer"},null,-1)),E("input",{id:"close",type:"reset",value:"Close",class:"button",onClick:l})])],64))])]),_:1})}}}),di=ye(ui,[["__scopeId","data-v-127c9237"]]),fi={key:0,class:"loading"},pi={key:1},mi={class:"form-row"},hi={for:"publicAccess"},gi=["checked","onChange","disabled"],vi=["onClick"],yi=["onClick"],wi=["onClick","disabled"],ki=X({__name:"UserManagementModal",setup(e){const t=se(),n=D(!0),o=D([]),s=D(""),r=D("📋"),l=et({public:!1}),i=()=>{t.dialog="",s.value=""},a=async()=>{try{n.value=!0;const b=await li();o.value=b.users}catch(b){const g=b;t.showToast(g.message||"Failed to load users")}finally{n.value=!1}},c=async()=>{const b=window.prompt("Enter username for new user:");if(!(!b||!b.trim()))try{s.value="";const g=await no(b.trim(),void 0,!1);await a(),g.password&&(s.value=`User ${b.trim()} created. Password: ${g.password}`)}catch(g){const $=g;t.showToast($.message||"Failed to add user")}},p=async(b,g)=>{const $=g.target;try{await oo(b.username,{privileged:$.checked}),b.privileged=$.checked}catch(w){const k=w;t.showToast(k.message||"Failed to update user"),$.checked=b.privileged}},u=async b=>{const g=window.prompt("Enter new username:",b.username);if(!(!g||!g.trim()||g.trim()===b.username))try{s.value="";const $=await no(g.trim(),void 0,b.privileged);await so(b.username),await a(),$.password&&(s.value=`User renamed to ${g.trim()}. New password: ${$.password}`)}catch($){const w=$;t.showToast(w.message||"Failed to rename user")}},m=async b=>{if(confirm(`Reset password for ${b.username}? A new password will be generated.`))try{s.value="";const g=await oo(b.username,{password:""});g.password&&(s.value=`Password reset for ${b.username}. New password: ${g.password}`)}catch(g){const $=g;t.showToast($.message||"Failed to reset password")}},f=async b=>{if(confirm(`Delete user ${b}?`))try{await so(b),await a()}catch(g){const $=g;t.showToast($.message||"Failed to delete user")}},S=async(b=!1)=>{const g=s.value.match(/(?:Password|New password): (.+)/);if(g)if(await navigator.clipboard.writeText(g[1]),b){r.value="✅ Copied!";const $=s.value.replace(/(?:Password|New password): .+/,"Password copied to clipboard!");s.value=$,setTimeout(()=>{s.value="",r.value="📋"},3e3)}else s.value=""},I=async()=>{try{s.value="",await ai(l.public),t.server.public=l.public,s.value="Server settings updated"}catch(b){const g=b;t.showToast(g.message||"Failed to update settings")}};return be(()=>{l.public=t.server.public||!1,n.value=!1}),Be(()=>t.dialog,b=>{b==="usermgmt"&&!t.server.paskia&&a()}),Be(()=>t.server.public,b=>{l.public=b||!1}),(b,g)=>{const $=Ko;return R(),ee($,{name:"usermgmt",title:"Admin Settings"},{default:Re(()=>[n.value?(R(),P("div",fi,"Loading...")):(R(),P("div",pi,[g[8]||(g[8]=E("h3",null,"Server Settings",-1)),E("div",mi,[E("label",hi,[wt(E("input",{type:"checkbox",id:"publicAccess","onUpdate:modelValue":g[0]||(g[0]=w=>l.public=w),onChange:I},null,544),[[mo,l.public]]),g[3]||(g[3]=We(" Public access (anyone can read and write) ",-1))])]),y(t).server.paskia?(R(),P(fe,{key:0},[g[4]||(g[4]=E("h3",null,"User Management",-1)),g[5]||(g[5]=E("p",null,[We("See "),E("a",{href:"/auth/admin/"},"Paskia Admin"),We(".")],-1))],64)):(R(),P(fe,{key:1},[g[7]||(g[7]=E("h3",null,"Users",-1)),E("button",{onClick:c,class:"button",title:"Add new user"},"➕ Add User"),s.value?(R(),P("div",{key:0,class:"success-message",onClick:g[2]||(g[2]=w=>S(!1))},[We(ne(s.value)+" ",1),s.value.includes("Password:")||s.value.includes("New password:")?(R(),P("button",{key:0,onClick:g[1]||(g[1]=de(w=>S(!0),["stop"])),class:"button small",title:"Copy to clipboard"},ne(r.value),1)):q("",!0)])):q("",!0),E("table",null,[g[6]||(g[6]=E("thead",null,[E("tr",null,[E("th",null,"Username"),E("th",null,"Admin"),E("th",null,"Actions")])],-1)),E("tbody",null,[(R(!0),P(fe,null,st(o.value,w=>(R(),P("tr",{key:w.username},[E("td",null,ne(w.username),1),E("td",null,[E("input",{type:"checkbox",checked:w.privileged,onChange:k=>p(w,k),disabled:w.username===y(t).user.username},null,40,gi)]),E("td",null,[E("button",{onClick:k=>u(w),class:"button small",title:"Rename user"},"✏️",8,vi),E("button",{onClick:k=>m(w),class:"button small",title:"Reset password"},"🔑",8,yi),E("button",{onClick:k=>f(w.username),class:"button small danger",disabled:w.username===y(t).user.username,title:"Delete user"},"🗑️",8,wi)])]))),128))])])],64)),E("div",{class:"dialog-buttons"},[E("button",{onClick:i,class:"button"},"Close")])]))]),_:1})}}}),bi=ye(ki,[["__scopeId","data-v-afe859c3"]]),Ci={key:0,class:"modal-overlay"},xi=X({__name:"AccessDeniedModal",setup(e){const t=se(),n=()=>{location.reload()};return Ie(()=>{t.dialog==="accessdenied"&&hn()}),(o,s)=>y(t).dialog==="accessdenied"?(R(),P("div",Ci,[E("div",{class:"modal-dialog",id:"accessdenied"},[E("div",{class:"modal-content access-denied"},[s[0]||(s[0]=E("p",{class:"icon"},"⛔",-1)),s[1]||(s[1]=E("p",{class:"message"},"Access Denied",-1)),E("button",{onClick:n,class:"button"},"Reload")])])])):q("",!0)}}),Si=ye(xi,[["__scopeId","data-v-eaaa3c09"]]),_i=X({__name:"App",setup(e){const t=se(),n=K(()=>{const l=decodeURIComponent(je.currentRoute.value.path).split("//"),i=(l[0]??"").split("/").filter(c=>c!==""),a=l.slice(1).join("//");return{path:l[0]??"",pathList:i,query:a}});Ie(()=>{document.title=n.value.path.replace(/\/$/,"").split("/").pop()||t.server.name||"Cista Storage"}),be(qr),be(Tt),yt(Gr);const o=D(null);let s=null;const r=l=>{if(t.dialog){s&&(clearTimeout(s),s=null);return}const i=t.fileExplorer;if(!i)return;const a=i.isCursor(),c=l.target.tagName==="INPUT",p=l.type==="keyup";if(l.repeat){(l.key==="ArrowUp"||l.key==="ArrowDown"||l.key==="ArrowLeft"||l.key==="ArrowRight"||a&&l.code==="Space")&&(c||l.preventDefault());return}let u="";if(!c&&l.key.startsWith("Arrow"))u=l.key.slice(5).toLowerCase();else if(!p&&l.key==="f"&&(l.ctrlKey||l.metaKey))o.value.toggleSearchInput();else if(!c&&p&&l.key==="/")o.value.toggleSearchInput();else if(p&&l.key==="Escape")t.error="",t.clearToast(),o.value.closeSearch(l),t.focusBreadcrumb();else if(!c&&p&&l.key==="Backspace")je.back();else if(!c&&!p&&l.key==="a"&&(l.ctrlKey||l.metaKey))i.toggleSelectAll();else if(!c&&p&&l.key==="g")t.prefs.gallery=!t.prefs.gallery;else if(!c&&p&&(l.code==="Backquote"||l.key==="1"||l.key==="2"||l.key==="3"))t.sort(["","name","modified","size"][+l.key||0]);else if(!c&&a&&p&&!l.ctrlKey&&(l.key==="F2"||l.key==="r"))i.cursorRename();else if(!c&&a&&l.code==="Space")p&&!l.altKey&&!l.ctrlKey&&i.cursorSelect();else return;l.preventDefault(),s&&(clearTimeout(s),s=null);let m;switch(u){case"up":m=()=>i.up(l);break;case"down":m=()=>i.down(l);break;case"left":m=()=>i.left(l);break;case"right":m=()=>i.right(l);break}if(m&&!p){const S=l.altKey?20:100;m(),s=setTimeout(()=>{s=setInterval(m,S)},200-S)}};return be(()=>{window.addEventListener("keydown",r),window.addEventListener("keyup",r)}),yt(()=>{window.removeEventListener("keydown",r),window.removeEventListener("keyup",r)}),(l,i)=>{const a=di,c=ei,p=Ya,u=vn,m=Is;return R(),P(fe,null,[y(t).toast?(R(),P("div",{key:0,class:"toast-message",onClick:i[0]||(i[0]=f=>y(t).clearToast())},ne(y(t).toast),1)):y(t).error&&!y(t).authInProgress?(R(),P("div",{key:1,class:"toast-message status",onClick:i[1]||(i[1]=f=>y(t).error="")},ne(y(t).error),1)):q("",!0),z(a),z(bi),z(Si),E("header",null,[z(p,{ref_key:"headerMain",ref:o,path:n.value.pathList,query:n.value.query},{default:Re(()=>[z(c,{path:n.value.pathList},null,8,["path"])]),_:1},8,["path","query"]),z(u,{path:n.value.pathList,primary:""},null,8,["path"])]),E("main",null,[z(y(Oo),{path:n.value.pathList,query:n.value.query},null,8,["path","query"])]),E("footer",null,[z(m,{status:y(t).uprogress,onCancel:y(t).cancelUploads,class:"upload"},null,8,["status","onCancel"]),z(m,{status:y(t).dprogress,onCancel:y(t).cancelDownloads,class:"download"},null,8,["status","onCancel"])])],64)}}});function Ei(e,t){if(e==null)return;let n=e;for(let o=0;o<t.length;o++){if(n===void 0||n[t[o]]===void 0)return;if(n===null||n[t[o]]===null)return null;n=n[t[o]]}return n}function bn(e,t,n){if(n.length===0)return t;const o=n[0];return n.length>1&&(t=bn(typeof e!="object"||e===null||!Object.prototype.hasOwnProperty.call(e,o)?Number.isInteger(Number(n[1]))?[]:{}:e[o],t,Array.prototype.slice.call(n,1))),Number.isInteger(Number(o))&&Array.isArray(e)?e.slice()[o]:Object.assign({},e,{[o]:t})}function Jo(e,t){if(e==null||t.length===0)return e;if(t.length===1){if(e==null)return e;if(Number.isInteger(t[0])&&Array.isArray(e))return Array.prototype.slice.call(e,0).splice(t[0],1);const n={};for(const o in e)n[o]=e[o];return delete n[t[0]],n}if(e[t[0]]==null){if(Number.isInteger(t[0])&&Array.isArray(e))return Array.prototype.concat.call([],e);const n={};for(const o in e)n[o]=e[o];return n}return bn(e,Jo(e[t[0]],Array.prototype.slice.call(t,1)),[t[0]])}function Yo(e,t){return t.map(n=>n.split(".")).map(n=>[n,Ei(e,n)]).filter(n=>n[1]!==void 0).reduce((n,o)=>bn(n,o[1],o[0]),{})}function Xo(e,t){return t.map(n=>n.split(".")).reduce((n,o)=>Jo(n,o),e)}function ro(e,{storage:t,serializer:n,key:o,debug:s,pick:r,omit:l,beforeHydrate:i,afterHydrate:a},c,p=!0){try{p&&i?.(c);const u=t.getItem(o);if(u){const m=n.deserialize(u),f=r?Yo(m,r):m,S=l?Xo(f,l):f;e.$patch(S)}p&&a?.(c)}catch(u){s&&console.error("[pinia-plugin-persistedstate]",u)}}function lo(e,{storage:t,serializer:n,key:o,debug:s,pick:r,omit:l}){try{const i=r?Yo(e,r):e,a=l?Xo(i,l):i,c=n.serialize(a);t.setItem(o,c)}catch(i){s&&console.error("[pinia-plugin-persistedstate]",i)}}function Ri(e,t){return typeof e=="function"?e(t):typeof e=="string"?e:t}function Ii(e,t,n){const{pinia:o,store:s,options:{persist:r=n}}=e;if(!r)return;if(!(s.$id in o.state.value)){const i=o._s.get(s.$id.replace("__hot:",""));i&&Promise.resolve().then(()=>i.$persist());return}const l=(Array.isArray(r)?r:r===!0?[{}]:[r]).map(t);s.$hydrate=({runHooks:i=!0}={})=>{l.forEach(a=>{ro(s,a,e,i)})},s.$persist=()=>{l.forEach(i=>{lo(s.$state,i)})},l.forEach(i=>{ro(s,i,e),s.$subscribe((a,c)=>lo(c,i),{detached:!0})})}function Ai(e={}){return function(t){Ii(t,n=>{const o=Ri(n.key,t.store.$id);return{key:(e.key?e.key:s=>s)(o),debug:n.debug??e.debug??!1,serializer:n.serializer??e.serializer??{serialize:s=>JSON.stringify(s),deserialize:s=>JSON.parse(s)},storage:n.storage??e.storage??window.localStorage,beforeHydrate:n.beforeHydrate??e.beforeHydrate,afterHydrate:n.afterHydrate??e.afterHydrate,pick:n.pick,omit:n.omit}},e.auto??!1)}}var $i=Ai();const Ct=ms(_i);Ct.config.errorHandler=e=>{console.log(e)};const Zo=hs();Zo.use($i);Ct.use(Zo);Ct.use(je);Ct.use(Dt);Ct.mount("#app");
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){"use strict";let d=[],i=[],u=0;function h(t){return"^"+t.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase()+"$"}function y(t){const e=t.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase();return{based:e,words:e.split(/\s+/)}}function w(t,e){const{based:s,words:c}=e;return t.includes(s)||c&&c.every(n=>t.includes(n))}const m=new Intl.Collator("en",{sensitivity:"base",numeric:!0,usage:"search"});function k(t){return[...t].sort((e,s)=>s.mtime-e.mtime)}function C(){return new Promise(t=>setTimeout(t,0))}async function F(t,e,s){const c=y(t),n=100,o=1e3,r=[];for(let l=0;l<i.length&&r.length<n;l+=o){if(u!==s)return;const M=Math.min(l+o,i.length);for(let a=l;a<M&&r.length<n;a++){const g=i[a];w(g.haystack,c)&&r.push(g)}if(r.length>0&&u===s){const a=f(r,t,e);postMessage({type:"results",docs:a.map(p),id:s,done:!1})}l+o<i.length&&r.length<n&&await C()}if(u===s){const l=f(r,t,e);postMessage({type:"results",docs:l.map(p),id:s,done:!0})}}function f(t,e,s){const c=s+"/";return[...t].sort((n,o)=>(o.loc===s)-(n.loc===s)||(o.loc.slice(0,c.length)===c)-(n.loc.slice(0,c.length)===c)||m.compare(n.loc,o.loc)||(n.dir===!1)-(o.dir===!1)||o.name.includes(e)-n.name.includes(e)||m.compare(n.name,o.name))}function p(t){const{haystack:e,...s}=t;return s}self.onmessage=async t=>{const e=t.data;e.type==="update"?(d=e.documents.map(s=>({...s,haystack:h(s.name)})),i=k(d)):e.type==="search"&&(u=e.id,e.query?await F(e.query,e.loc,e.id):postMessage({type:"results",docs:[],id:e.id,done:!0}))}})();
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|