cista 1.4.2__py3-none-any.whl → 1.5.0__py3-none-any.whl
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/__main__.py +7 -7
- cista/_version.py +1 -1
- cista/api.py +6 -0
- cista/app.py +7 -32
- cista/frontend-build/assets/{icons-DMD182WZ.js → icons-6j2UZ_HA.js} +1 -1
- cista/frontend-build/assets/index-BHQJhxzY.js +32 -0
- cista/frontend-build/assets/index-De5UYAfC.css +1 -0
- cista/frontend-build/assets/searchWorker-DbTcSX-c.js +1 -0
- cista/frontend-build/index.html +3 -3
- cista/preview.py +2 -2
- cista/protocol.py +28 -0
- cista/serve.py +21 -10
- cista/watching.py +349 -80
- {cista-1.4.2.dist-info → cista-1.5.0.dist-info}/METADATA +3 -3
- cista-1.5.0.dist-info/RECORD +33 -0
- cista/frontend-build/assets/index-C8Gp9T8Z.js +0 -32
- cista/frontend-build/assets/index-zDODUQOB.css +0 -1
- cista/frontend-build/assets/searchWorker-CxfnO8mP.js +0 -1
- cista-1.4.2.dist-info/RECORD +0 -33
- {cista-1.4.2.dist-info → cista-1.5.0.dist-info}/WHEEL +0 -0
- {cista-1.4.2.dist-info → cista-1.5.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import{r as F,m as go,e as vo,i as ie,h as as,a as Lt,b as yo,t as is,g as cs,o as us,c as rt,n as be,d as Xe,f as q,w as ze,j as Q,k as N,l as S,p as te,q as G,s as Ce,u as tt,v as E,x as xe,y as lt,z as ee,A as fe,T as yn,B as wn,C as g,D as ds,E as we,F as V,G as fs,H as kn,I as at,J as ye,K as ps,L as Pe,M as ms,N as me,O as he,P as ge,Q as dt,R as Ke,S as wo,U as ko,V as hs,W as gs,X as Ht,Y as ln,Z as vs,_ as Pn,$ as bo,a0 as ys,a1 as _t,a2 as an,a3 as ws,a4 as Co,a5 as ks}from"./icons-6j2UZ_HA.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 xo;const Ft=e=>xo=e,So=Symbol();function cn(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var yt;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(yt||(yt={}));function bs(){const e=vo(!0),t=e.run(()=>F({}));let n=[],o=[];const s=go({install(r){Ft(s),s._a=r,r.provide(So,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 $o=()=>{};function On(e,t,n,o=$o){e.add(t);const s=()=>{e.delete(t)&&o()};return!n&&cs()&&us(s),s}function Ze(e,...t){e.forEach(n=>{n(...t)})}const Cs=e=>e(),Tn=Symbol(),Xt=Symbol();function un(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];cn(s)&&cn(o)&&e.hasOwnProperty(n)&&!Lt(o)&&!yo(o)?e[n]=un(s,o):e[n]=o}return e}const xs=Symbol();function Ss(e){return!cn(e)||!Object.prototype.hasOwnProperty.call(e,xs)}const{assign:Le}=Object;function $s(e){return!!(Lt(e)&&e.effect)}function _s(e,t,n,o){const{state:s,actions:r,getters:l}=t,c=n.state.value[e];let a;function i(){c||(n.state.value[e]=s?s():{});const d=Xe(n.state.value[e]);return Le(d,r,Object.keys(l||{}).reduce((p,h)=>(p[h]=go(q(()=>{Ft(n);const k=n._s.get(e);return l[h].call(k,k)})),p),{}))}return a=_o(e,i,t,n,o,!0),a}function _o(e,t,n={},o,s,r){let l;const c=Le({actions:{}},n),a={deep:!0};let i,d,p=new Set,h=new Set,k;const $=o.state.value[e];!r&&!$&&(o.state.value[e]={});let _;function v(b){let u;i=d=!1,typeof b=="function"?(b(o.state.value[e]),u={type:yt.patchFunction,storeId:e,events:k}):(un(o.state.value[e],b),u={type:yt.patchObject,payload:b,storeId:e,events:k});const x=_=Symbol();be().then(()=>{_===x&&(i=!0)}),d=!0,Ze(p,u,o.state.value[e])}const w=r?function(){const{state:u}=n,x=u?u():{};this.$patch(P=>{Le(P,x)})}:$o;function I(){l.stop(),p.clear(),h.clear(),o._s.delete(e)}const M=(b,u="")=>{if(Tn in b)return b[Xt]=u,b;const x=function(){Ft(o);const P=Array.from(arguments),O=new Set,L=new Set;function D(z){O.add(z)}function j(z){L.add(z)}Ze(h,{args:P,name:x[Xt],store:y,after:D,onError:j});let K;try{K=b.apply(this&&this.$id===e?this:y,P)}catch(z){throw Ze(L,z),z}return K instanceof Promise?K.then(z=>(Ze(O,z),z)).catch(z=>(Ze(L,z),Promise.reject(z))):(Ze(O,K),K)};return x[Tn]=!0,x[Xt]=u,x},A={_p:o,$id:e,$onAction:On.bind(null,h),$patch:v,$reset:w,$subscribe(b,u={}){const x=On(p,b,u.detached,()=>P()),P=l.run(()=>ze(()=>o.state.value[e],O=>{(u.flush==="sync"?d:i)&&b({storeId:e,type:yt.direct,events:k},O)},Le({},a,u)));return x},$dispose:I},y=rt(A);o._s.set(e,y);const f=(o._a&&o._a.runWithContext||Cs)(()=>o._e.run(()=>(l=vo()).run(()=>t({action:M}))));for(const b in f){const u=f[b];if(Lt(u)&&!$s(u)||yo(u))r||($&&Ss(u)&&(Lt(u)?u.value=$[b]:un(u,$[b])),o.state.value[e][b]=u);else if(typeof u=="function"){const x=M(u,b);f[b]=x,c.actions[b]=u}}return Le(y,f),Le(is(y),f),Object.defineProperty(y,"$state",{get:()=>o.state.value[e],set:b=>{v(u=>{Le(u,b)})}}),o._p.forEach(b=>{Le(y,l.run(()=>b({store:y,app:o._a,pinia:o,options:c})))}),$&&r&&n.hydrate&&n.hydrate(y.$state,$),i=!0,d=!0,y}function Eo(e,t,n){let o;const s=typeof t=="function";o=s?n:t;function r(l,c){const a=as();return l=l||(a?ie(So,null):null),l&&Ft(l),l=xo,l._s.has(e)||(s?_o(e,t,o,l):_s(e,o,l)),l._s.get(e)}return r.$id=e,r}const Es={class:"statustext"},Rs={key:0,class:"index"},Is={class:"filename"},Ms={key:0,class:"percent"},As={key:1,class:"position"},Ps={class:"speed"},Os=Q({__name:"TransferBar",props:{status:{}},emits:["cancel"],setup(e){const t=e,n=q(()=>t.status.xfer/t.status.total*100),o=q(()=>{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=q(()=>o.value?o.value.toFixed(o.value<10?1:0)+" MB/s":"stalled");return(r,l)=>e.status.total?(E(),N("div",{key:0,class:"transferprogress",style:tt(`background: linear-gradient(to right, var(--bar) 0, var(--bar) ${n.value}%, var(--nobar) ${n.value}%, var(--nobar) 100%);`)},[S("div",Es,[e.status.filecount>1?(E(),N("span",Rs," ["+te(e.status.fileidx)+"/"+te(e.status.filecount)+"] ",1)):G("",!0),S("span",Is,[Ce(te(e.status.filename.split("/").pop())+" ",1),e.status.filesize>1e7?(E(),N("span",Ms,te((e.status.filepos/e.status.filesize*100).toFixed(0)+" %"),1)):G("",!0)]),e.status.total>1e7?(E(),N("span",As,te((e.status.xfer/1e6).toFixed(0)+" / "+(e.status.total/1e6).toFixed(0)+" MB"),1)):G("",!0),S("span",Ps,te(s.value),1),S("button",{class:"close",onClick:l[0]||(l[0]=c=>r.$emit("cancel"))},"❌")])],4)):G("",!0)}}),Se=(e,t)=>{const n=e.__vccOpts||e;for(const[o,s]of t)n[o]=s;return n},Ts=Se(Os,[["__scopeId","data-v-ee5a3f0e"]]);let Zt=!1,Qe=null,Nn=0;const Ns=Q({__name:"CursorTooltip",props:{text:{},delay:{}},setup(e,{expose:t}){const n=e,o=F(!1),s=F(0),r=F(0),l=F(0),c=F(0),a=F(null);let i=null,d=0,p=0;const h=8,k=q(()=>{let C=s.value,f=r.value;return l.value>0&&c.value>0&&(C+l.value+8>window.innerWidth&&(C=window.innerWidth-l.value-8),f+c.value+8>window.innerHeight&&(f=window.innerHeight-c.value-8),C=Math.max(8,C),f=Math.max(8,f)),{left:`${C}px`,top:`${f}px`}}),$=()=>{Nn=Date.now()};xe(()=>document.addEventListener("touchstart",$,{passive:!0})),lt(()=>document.removeEventListener("touchstart",$));const _=()=>Date.now()-Nn<500,v=()=>{o.value=!0,Zt=!0,requestAnimationFrame(()=>{a.value&&(l.value=a.value.offsetWidth,c.value=a.value.offsetHeight)})},w=()=>{i&&clearTimeout(i),Qe&&(clearTimeout(Qe),Qe=null);const y=Zt?0:n.delay??900;i=setTimeout(v,y)};return t({startHover:y=>{_()||(s.value=y.clientX,r.value=y.clientY,d=y.clientX,p=y.clientY)},updatePosition:y=>{if(_()||(s.value=y.clientX,r.value=y.clientY,o.value))return;const C=y.clientX-d,f=y.clientY-p;Math.sqrt(C*C+f*f)>h&&(d=y.clientX,p=y.clientY,i&&(clearTimeout(i),i=null)),i||w()},endHover:()=>{i&&(clearTimeout(i),i=null),o.value=!1,Qe&&clearTimeout(Qe),Qe=setTimeout(()=>{Zt=!1},400)}}),(y,C)=>(E(),ee(yn,{to:"body"},[o.value?(E(),N("div",{key:0,ref_key:"tooltipEl",ref:a,class:"cursor-tooltip",style:tt(k.value)},[fe(y.$slots,"default",{},void 0,!0)],4)):G("",!0)]))}}),Ye=Se(Ns,[["__scopeId","data-v-7e1f0ce6"]]),Wt=Q({__name:"SvgButton",props:{name:{},tooltip:{}},setup(e){const t=e,n=F(null),o=t.tooltip??"";return(s,r)=>(E(),N("button",{class:"action-button",onMouseenter:r[0]||(r[0]=(...l)=>n.value?.startHover&&n.value?.startHover(...l)),onMousemove:r[1]||(r[1]=(...l)=>n.value?.updatePosition&&n.value?.updatePosition(...l)),onMouseleave:r[2]||(r[2]=(...l)=>n.value?.endHover&&n.value?.endHover(...l))},[(E(),ee(wn(g(ds)[e.name]))),fe(s.$slots,"default"),g(o)?(E(),ee(Ye,{key:0,ref_key:"tooltip",ref:n,text:g(o)},{default:we(()=>[Ce(te(g(o)),1)]),_:1},8,["text"])):G("",!0)],32))}});function wt(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 Ro(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 zt=new Intl.Collator("en",{sensitivity:"base",numeric:!0,usage:"search"});class it{loc="";key="";size=0;mtime=0;dir=!1;ghost=!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 wt(this.size)}get modified(){return Ro(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 Dt="paskia-iframe",Ln="paskia-dialog",Ls=`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
|
+
#${Dt} {
|
|
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 Be=null,qe=null,nt=null,ot=null,Dn=!1,Pt=0;function Ds(){if(document.getElementById(Ln))return;const e=document.createElement("style");e.id=Ln,e.textContent=Ls,document.head.insertBefore(e,document.head.firstChild)}class st extends Error{constructor(){super("Authentication cancelled"),this.name="AuthCancelledError"}}function bn(){Pt++,document.body.classList.add("paskia-backdrop")}function Io(){Pt=Math.max(0,Pt-1),Pt===0&&document.body.classList.remove("paskia-backdrop")}function Bs(){return!!document.getElementById(Dt)}function dn(){Be&&(Be.remove(),Be=null,Io())}function Hs(e){const t=e.data;if(t?.type)switch(t.type){case"auth-success":dn(),nt&&(nt(),qe=null,nt=null,ot=null);break;case"auth-back":dn(),ot&&(ot(new st),qe=null,nt=null,ot=null);break}}function Fs(){Dn||typeof window<"u"&&(window.addEventListener("message",Hs),Dn=!0)}function Cn(e,t="Authentication"){return Ds(),Fs(),qe||(document.getElementById(Dt)?(qe=new Promise((n,o)=>{nt=n,ot=o}),qe):(qe=new Promise((n,o)=>{nt=n,ot=o}),dn(),bn(),Be=document.createElement("iframe"),Be.id=Dt,Be.title=t,Be.src=e,document.body.appendChild(Be),qe))}const Ws=1e3;class zs 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 Mo(e,t={}){const{timeout:n=Ws,...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 Cn(r.auth.iframe);continue}}return s}}async function It(e,t={}){return Us(e,t,Mo)}async function Us(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),c=await l.json();if(!l.ok)throw new zs(e,l,c);return c}const Je="/api/control",js="/api/upload",Vs="/api/watch";let _e=[],Ot=500,kt=null,bt=!1;const Ao=()=>{_e=[]},qs=()=>{const e=localStorage["cista-files"];if(!e)return!1;const t=se();try{return _e=JSON.parse(e),t.updateRoot(_e),console.log(`Loaded session with ${_e.length} items cached`),!0}catch(n){return console.log("Loading session failed",n),!1}},Po=()=>{localStorage["cista-files"]=JSON.stringify(_e)},Ae=(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 Oo(e){const t=e.error?.auth?.iframe;if(t){const n=se();n.clearSensitiveData(),Ao(),bt=!0,n.authInProgress=!0,n.error="",$e!==null&&(clearTimeout($e),$e=null);try{await Cn(t),bt=!1,n.authInProgress=!1,Ut()}catch(o){bt=!1,n.authInProgress=!1,o instanceof st?(console.log("User cancelled authentication"),n.dialog="accessdenied"):console.error("Auth iframe error:",o)}return!0}return!1}const Ut=()=>{$e!==null&&(clearTimeout($e),$e=null);const e=se();e.error!=="Reconnecting..."&&(e.error="Connecting..."),console.log(e.error),kt=Ae(Vs,{message:Js,close:Ks}),kt.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?Oo(n):e.error=n.error.message;return}"server"in n&&(console.log("Connected to backend",n),e.server=n.server,e.connected=!0,Ot=500,e.error="",n.user?e.login(n.user.username,n.user.privileged):e.isUserLogged&&e.logout())})},Gs=()=>{kt&&(kt.close(),kt=null)},fn=()=>{bt=!1,$e!==null&&(clearTimeout($e),$e=null),Ut()};let $e=null;const Ks=e=>{const t=se();if(bt||Bs()){console.log("Skipping reconnect - awaiting authentication");return}t.connected&&(console.warn("Disconnected from server",e),t.connected=!1,t.error="Reconnecting..."),$e!==null&&clearTimeout($e),Ot=Math.min(5e3,Ot+500),$e=setTimeout(Ut,Ot)},Js=e=>{const t=JSON.parse(e.data);switch(!0){case!!t.root:Ys(t);break;case!!t.update:Xs(t);break;case!!t.space:const n=se();n.space=t.space;break;case!!t.error:Zs(t);break}};function Ys({root:e}){const t=se();console.log("Watch root",e),t.updateRoot(e),_e=e,Po()}function Xs(e){const t=se(),n=e.update;if(console.log("Watch update",n),!_e)return console.error("Watch update before root");let o=[],s=0;for(const[r,l]of n)r==="k"?(o.push(..._e.slice(s,s+l)),s+=l):r==="d"?s+=l:r==="i"?o.push(...l):console.log("Unknown update action",r,l);if(s!=_e.length)throw Error(`Tree update out of sync, number of entries mismatch: got ${s}, expected ${_e.length}, new tree ${o.length}`);t.updateRoot(o),_e=o,Po()}function Zs(e){if(se(),e.error.code===401||e.error.code===403){Oo(e);return}}const To={name:(e,t)=>zt.compare(e.name,t.name),modified:(e,t)=>t.mtime-e.mtime,size:(e,t)=>t.size-e.size},No=(e,t)=>{if(!t)return e;const n=[...e];return n.sort(To[t]),n},Qs=(e,t)=>{if(!t)return e;const n=To[t],o=new Map;for(const c of e){const a=c.loc;o.has(a)||o.set(a,[]),o.get(a).push(c)}for(const c of o.values())c.sort(n);const s=new Map;for(const[c,a]of o)s.set(c,a[0]);const r=[...o.keys()].sort((c,a)=>t==="name"?zt.compare(c,a):n(s.get(c),s.get(a))),l=[];for(const c of r)l.push(...o.get(c));return l};function er(e){return new Worker("/assets/searchWorker-DbTcSX-c.js",{name:e?.name})}let Mt=null,Tt=0,Nt=null,He=null,Fe=null,Bn=0;function Hn(){return Mt||(Mt=new er,Mt.onmessage=e=>{if(!Nt||e.data.id!==Tt)return;const t=e.data.docs.map(o=>new it(o));Fe&&(clearTimeout(Fe),Fe=null);const n=performance.now();!e.data.done&&n-Bn<50||(Bn=n,Nt.searchResults=t,e.data.done&&(He&&(clearTimeout(He),He=null),Nt.searchLoading=!1))}),Mt}const se=Eo("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},space:{disk:0,free:0,usage:0,storage:0}}),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,c,a]of e)n=n.slice(0,o-1),t.push(new it({name:s,loc:o?n.join("/"):"/",key:r,size:c,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=Hn(),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=Hn(),o=++Tt;if(Nt=this,this.query=e,He&&(clearTimeout(He),He=null),Fe&&(clearTimeout(Fe),Fe=null),!e){this.searchResults=[],this.searchLoading=!1;return}Fe=setTimeout(()=>{Tt===o&&(this.searchResults=[]),Fe=null},50),He=setTimeout(()=>{Tt===o&&(this.searchLoading=!0),He=null},100),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||fn()},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(),fn()},toggleSort(e){const n=(this.query?this.prefs.sortFiltered:this.prefs.sortListing)===e?"":e;this.query?this.prefs.sortFiltered=n:this.prefs.sortListing=n,this.showSortToast(n)},sort(e){this.query?this.prefs.sortFiltered=e:this.prefs.sortListing=e,this.showSortToast(e)},showSortToast(e){const t={"":"Folders first",name:"Alphabetical order",modified:"Newest first",size:"Largest first"};this.showToast(t[e]||e,1200)},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 No(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,c){if(!c.dir&&o.has(r))throw Error(`Multiple selections conflict for: ${r}`);o.add(r),n.recursive.push([r,l,c])}for(const r of n.keys){const l=n.docs[r],c=l.loc?`${l.loc}/${l.name}`:l.name,a=l.loc.length;s(l.name,c,l);for(const i of this.document)if(i.loc===c||i.loc.startsWith(c)&&i.loc[c.length]==="/"){const d=i.loc?`${i.loc}/${i.name}`:i.name,p=d.slice(a);s(p,d,i)}}return n.recursive.sort((r,l)=>zt.compare(r[0],l[0])),n}}});function At(e){return typeof e=="object"&&e!==null&&"error"in e}class tr{async get(t){try{const n=await It(t,{method:"GET"});if(At(n))throw new Te(n.error.code,n.error.message);return n}catch(n){throw n instanceof st?new Te(401,"Authentication cancelled"):n}}async post(t,n){try{const o=await It(t,{method:"POST",body:n});if(At(o))throw new Te(o.error.code,o.error.message);return o}catch(o){throw o instanceof st?new Te(401,"Authentication cancelled"):o}}async put(t,n){try{const o=await It(t,{method:"PUT",body:n});if(At(o))throw new Te(o.error.code,o.error.message);return o}catch(o){throw o instanceof st?new Te(401,"Authentication cancelled"):o}}async delete(t){try{const n=await It(t,{method:"DELETE"});if(At(n))throw new Te(n.error.code,n.error.message);return n}catch(n){throw n instanceof st?new Te(401,"Authentication cancelled"):n}}}const ft=new tr;class Te extends Error{code;constructor(t,n){super(n),this.code=t}}const Lo=e=>{const t=se(),n=e.join("/");return t.document.some(o=>(o.loc?`${o.loc}/${o.name}`:o.name)===n)},en=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},nr=e=>{const t=e.map(s=>s.name);if(t.length===1)return en(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(en).join("."):`${en(t[0])}.etc`},or=Q({__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=a=>{const i=document.createElement("a");i.href=a,i.download="",i.click()},r=async(a,i)=>{let d="",p=i;console.log("Downloading to filesystem",a.recursive);for(const[h,k,$]of a.recursive)$.dir||(t.dprogress.files.push(h),++t.dprogress.filecount,t.dprogress.total+=$.size);for(const[h,k,$]of a.recursive){d&&!h.startsWith(d+"/")&&(d="",p=i);const _=h.slice(d.length);for(const I of _.split("/").slice(0,$.dir?void 0:-1))if(I){d+=`${I}/`;try{p=await p.getDirectoryHandle(I.normalize("NFC"),{create:!0})}catch(M){throw console.error("Failed to create directory",d,M),new Error(`Failed to create directory ${d}: ${M}`)}console.log("Created",d)}if($.dir)continue;const v=h.split("/").pop().normalize("NFC");let w;try{w=await p.getFileHandle(v,{create:!0})}catch(I){throw console.error("Failed to create file",h,k,d+v,I),new Error(`Failed to create file ${d+v}: ${I}`)}try{const I=await w.createWritable(),M=`/files/${h}`;console.log("Fetching",M);const A=await Mo(M);if(!A.ok)throw t.error=`Failed to download ${M}: ${A.status} ${A.statusText}`,new Error(`Failed to download ${M}: ${A.status} ${A.statusText}`);if(A.body){++t.dprogress.fileidx;const y=A.body.getReader();for(await I.truncate(0),t.dprogress.tlast=Date.now();;){const{value:C,done:f}=await y.read();if(f)break;await I.write(C);const b=Date.now(),u=C.byteLength;t.dprogress.xfer+=u,t.dprogress.filepos+=u,t.dprogress.statbytes+=u,t.dprogress.statdur+=b-t.dprogress.tlast,t.dprogress.tlast=b}}await I.close(),console.log("Saved",d+v)}catch(I){throw console.error("Failed to write file",d+v,I),new Error(`Failed to write file ${d+v}: ${I}`)}}o()},l=a=>{const i=a.keys.map(p=>a.docs[p]),d=nr(i);s(`/zip/${Array.from(a.keys).join("+")}/${d}.zip`),t.showToast(`Downloading ${d}.zip`),t.selected.clear()},c=async a=>{const i=t.selectedFiles;if(i.keys.length===0){t.showToast("No existing files selected"),t.selected.clear();return}const d=i.recursive.filter(([p,h,k])=>!k.dir);if(d.length===1)return t.selected.clear(),t.showToast(`Downloading ${d[0][0].split("/").pop()}`),s(`/files/${d[0][1]}`);if(a.altKey&&"showDirectoryPicker"in window){try{const p=await window.showDirectoryPicker({startIn:"downloads",mode:"readwrite"});await r(i,p),t.selected.clear()}catch(p){console.error("Download to folder failed",p),t.showToast("Download to folder failed")}return}l(i)};return(a,i)=>{const d=Wt;return E(),ee(d,{name:"download",tooltip:"Download",onClick:c})}}}),sr={key:0,class:"selection-bar"},rr={class:"select-text"},lr=Q({__name:"HeaderSelected",props:{path:Array},setup(e){const t=F(null),n=se(),o=e,s=q(()=>o.path.join("/")),r=(l,c)=>{const a=n.selectedFiles,i={op:l,sel:a.keys.map(p=>{const h=a.docs[p];return h.loc?`${h.loc}/${h.name}`:h.name})};if(c!==void 0&&(i.dst=c),l==="rm"||l==="mv")for(const p of a.keys)a.docs[p].ghost=!0;const d=Ae(Je,{message(p){const h=JSON.parse(p.data);if("error"in h){console.error("Control socket error",i,h.error),n.error=h.error.message;return}else if(h.status==="ack"){console.log("Control ack OK",h),d.close(),n.selected.clear();return}else console.log("Unknown control response",i,h)}});d.onopen=()=>{d.send(JSON.stringify(i))}};return(l,c)=>{const a=or,i=Wt;return g(n).selected.size?(E(),N("div",sr,[S("p",rr,te(g(n).selected.size)+" selected",1),V(a),V(i,{name:"copy",tooltip:"Copy here",onClick:c[0]||(c[0]=d=>r("cp",s.value))}),V(i,{name:"paste",tooltip:"Move here",onClick:c[1]||(c[1]=d=>r("mv",s.value))}),V(i,{name:"trash",tooltip:"Delete ⚠️",onClick:c[2]||(c[2]=d=>r("rm"))}),S("button",{class:"action-button unselect",onClick:c[3]||(c[3]=d=>g(n).selected.clear()),onMouseenter:c[4]||(c[4]=(...d)=>t.value?.startHover&&t.value?.startHover(...d)),onMousemove:c[5]||(c[5]=(...d)=>t.value?.updatePosition&&t.value?.updatePosition(...d)),onMouseleave:c[6]||(c[6]=(...d)=>t.value?.endHover&&t.value?.endHover(...d))},[c[8]||(c[8]=Ce("❌",-1)),V(Ye,{ref_key:"unselectTooltip",ref:t,text:"Unselect all"},{default:we(()=>[...c[7]||(c[7]=[Ce("Unselect all",-1)])]),_:1},512)],32)])):G("",!0)}}});const et=typeof document<"u";function Do(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function ar(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Do(e.default)}const ne=Object.assign;function tn(e,t){const n={};for(const o in t){const s=t[o];n[o]=Ee(s)?s.map(e):e(s)}return n}const Ct=()=>{},Ee=Array.isArray;function Fn(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}let ce=(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("");ce.MATCHER_NOT_FOUND+"",ce.NAVIGATION_GUARD_REDIRECT+"",ce.NAVIGATION_ABORTED+"",ce.NAVIGATION_CANCELLED+"",ce.NAVIGATION_DUPLICATED+"";function ct(e,t){return ne(new Error,{type:e,[Bo]:!0},t)}function Me(e,t){return e instanceof Error&&Bo in e&&(t==null||!!(e.type&t))}const ir=["params","query","hash"];function cr(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of ir)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}const ur=Symbol(""),Wn=Symbol(""),jt=Symbol(""),Ho=Symbol(""),pn=Symbol("");function Vt(){return ie(jt)}const Fo=/#/g,dr=/&/g,fr=/\//g,pr=/=/g,mr=/\?/g,Wo=/\+/g,hr=/%5B/g,gr=/%5D/g,zo=/%5E/g,vr=/%60/g,Uo=/%7B/g,yr=/%7C/g,jo=/%7D/g,wr=/%20/g;function xn(e){return e==null?"":encodeURI(""+e).replace(yr,"|").replace(hr,"[").replace(gr,"]")}function kr(e){return xn(e).replace(Uo,"{").replace(jo,"}").replace(zo,"^")}function mn(e){return xn(e).replace(Wo,"%2B").replace(wr,"+").replace(Fo,"%23").replace(dr,"%26").replace(vr,"`").replace(Uo,"{").replace(jo,"}").replace(zo,"^")}function br(e){return mn(e).replace(pr,"%3D")}function Cr(e){return xn(e).replace(Fo,"%23").replace(mr,"%3F")}function xr(e){return Cr(e).replace(fr,"%2F")}function Et(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const Sr=/\/$/,$r=e=>e.replace(Sr,"");function nn(e,t,n="/"){let o,s={},r="",l="";const c=t.indexOf("#");let a=t.indexOf("?");return a=c>=0&&a>c?-1:a,a>=0&&(o=t.slice(0,a),r=t.slice(a,c>0?c:t.length),s=e(r.slice(1))),c>=0&&(o=o||t.slice(0,c),l=t.slice(c,t.length)),o=Ir(o??t,n),{fullPath:o+r+l,path:o,query:s,hash:Et(l)}}function _r(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function zn(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Er(e,t,n){const o=t.matched.length-1,s=n.matched.length-1;return o>-1&&o===s&&ut(t.matched[o],n.matched[s])&&Vo(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function ut(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Vo(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Rr(e[n],t[n]))return!1;return!0}function Rr(e,t){return Ee(e)?Un(e,t):Ee(t)?Un(t,e):(e&&e.valueOf())===(t&&t.valueOf())}function Un(e,t){return Ee(t)?e.length===t.length&&e.every((n,o)=>n===t[o]):e.length===1&&e[0]===t}function Ir(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,c;for(l=0;l<o.length;l++)if(c=o[l],c!==".")if(c==="..")r>1&&r--;else break;return n.slice(0,r).join("/")+"/"+o.slice(l).join("/")}const Ne={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let hn=(function(e){return e.pop="pop",e.push="push",e})({}),on=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Mr(e){if(!e)if(et){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),$r(e)}const Ar=/^[^#]+#/;function Pr(e,t){return e.replace(Ar,"#")+t}function Or(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 qt=()=>({left:window.scrollX,top:window.scrollY});function Tr(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=Or(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 jn(e,t){return(history.state?history.state.position-t:-1)+e}const gn=new Map;function Nr(e,t){gn.set(e,t)}function Lr(e){const t=gn.get(e);return gn.delete(e),t}function Dr(e){return typeof e=="string"||e&&typeof e=="object"}function qo(e){return typeof e=="string"||typeof e=="symbol"}function Br(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(Wo," "),r=s.indexOf("="),l=Et(r<0?s:s.slice(0,r)),c=r<0?null:Et(s.slice(r+1));if(l in t){let a=t[l];Ee(a)||(a=t[l]=[a]),a.push(c)}else t[l]=c}return t}function Vn(e){let t="";for(let n in e){const o=e[n];if(n=br(n),o==null){o!==void 0&&(t+=(t.length?"&":"")+n);continue}(Ee(o)?o.map(s=>s&&mn(s)):[o&&mn(o)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function Hr(e){const t={};for(const n in e){const o=e[n];o!==void 0&&(t[n]=Ee(o)?o.map(s=>s==null?null:""+s):o==null?o:""+o)}return t}function gt(){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 De(e,t,n,o,s,r=l=>l()){const l=o&&(o.enterCallbacks[s]=o.enterCallbacks[s]||[]);return()=>new Promise((c,a)=>{const i=h=>{h===!1?a(ct(ce.NAVIGATION_ABORTED,{from:n,to:t})):h instanceof Error?a(h):Dr(h)?a(ct(ce.NAVIGATION_GUARD_REDIRECT,{from:t,to:h})):(l&&o.enterCallbacks[s]===l&&typeof h=="function"&&l.push(h),c())},d=r(()=>e.call(o&&o.instances[s],t,n,i));let p=Promise.resolve(d);e.length<3&&(p=p.then(i)),p.catch(h=>a(h))})}function sn(e,t,n,o,s=r=>r()){const r=[];for(const l of e)for(const c in l.components){let a=l.components[c];if(!(t!=="beforeRouteEnter"&&!l.instances[c]))if(Do(a)){const i=(a.__vccOpts||a)[t];i&&r.push(De(i,n,o,l,c,s))}else{let i=a();r.push(()=>i.then(d=>{if(!d)throw new Error(`Couldn't resolve component "${c}" at "${l.path}"`);const p=ar(d)?d.default:d;l.mods[c]=d,l.components[c]=p;const h=(p.__vccOpts||p)[t];return h&&De(h,n,o,l,c,s)()}))}}return r}function Fr(e,t){const n=[],o=[],s=[],r=Math.max(t.matched.length,e.matched.length);for(let l=0;l<r;l++){const c=t.matched[l];c&&(e.matched.find(i=>ut(i,c))?o.push(c):n.push(c));const a=e.matched[l];a&&(t.matched.find(i=>ut(i,a))||s.push(a))}return[n,o,s]}let Wr=()=>location.protocol+"//"+location.host;function Go(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,c=s.slice(l);return c[0]!=="/"&&(c="/"+c),zn(c,"")}return zn(n,e)+o+s}function zr(e,t,n,o){let s=[],r=[],l=null;const c=({state:h})=>{const k=Go(e,location),$=n.value,_=t.value;let v=0;if(h){if(n.value=k,t.value=h,l&&l===$){l=null;return}v=_?h.position-_.position:0}else o(k);s.forEach(w=>{w(n.value,$,{delta:v,type:hn.pop,direction:v?v>0?on.forward:on.back:on.unknown})})};function a(){l=n.value}function i(h){s.push(h);const k=()=>{const $=s.indexOf(h);$>-1&&s.splice($,1)};return r.push(k),k}function d(){if(document.visibilityState==="hidden"){const{history:h}=window;if(!h.state)return;h.replaceState(ne({},h.state,{scroll:qt()}),"")}}function p(){for(const h of r)h();r=[],window.removeEventListener("popstate",c),window.removeEventListener("pagehide",d),document.removeEventListener("visibilitychange",d)}return window.addEventListener("popstate",c),window.addEventListener("pagehide",d),document.addEventListener("visibilitychange",d),{pauseListeners:a,listen:i,destroy:p}}function qn(e,t,n,o=!1,s=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:s?qt():null}}function Ur(e){const{history:t,location:n}=window,o={value:Go(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,i,d){const p=e.indexOf("#"),h=p>-1?(n.host&&document.querySelector("base")?e:e.slice(p))+a:Wr()+e+a;try{t[d?"replaceState":"pushState"](i,"",h),s.value=i}catch(k){console.error(k),n[d?"replace":"assign"](h)}}function l(a,i){r(a,ne({},t.state,qn(s.value.back,a,s.value.forward,!0),i,{position:s.value.position}),!0),o.value=a}function c(a,i){const d=ne({},s.value,t.state,{forward:a,scroll:qt()});r(d.current,d,!0),r(a,ne({},qn(o.value,a,null),{position:d.position+1},i),!1),o.value=a}return{location:o,state:s,push:c,replace:l}}function jr(e){e=Mr(e);const t=Ur(e),n=zr(e,t.state,t.location,t.replace);function o(r,l=!0){l||n.pauseListeners(),history.go(r)}const s=ne({location:"",base:e,go:o,createHref:Pr.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 Vr(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),jr(e)}let Ge=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var de=(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})(de||{});const qr={type:Ge.Static,value:""},Gr=/[a-zA-Z0-9_]/;function Kr(e){if(!e)return[[]];if(e==="/")return[[qr]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(k){throw new Error(`ERR (${n})/"${i}": ${k}`)}let n=de.Static,o=n;const s=[];let r;function l(){r&&s.push(r),r=[]}let c=0,a,i="",d="";function p(){i&&(n===de.Static?r.push({type:Ge.Static,value:i}):n===de.Param||n===de.ParamRegExp||n===de.ParamRegExpEnd?(r.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${i}) must be alone in its segment. eg: '/:ids+.`),r.push({type:Ge.Param,value:i,regexp:d,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),i="")}function h(){i+=a}for(;c<e.length;){if(a=e[c++],a==="\\"&&n!==de.ParamRegExp){o=n,n=de.EscapeNext;continue}switch(n){case de.Static:a==="/"?(i&&p(),l()):a===":"?(p(),n=de.Param):h();break;case de.EscapeNext:h(),n=o;break;case de.Param:a==="("?n=de.ParamRegExp:Gr.test(a)?h():(p(),n=de.Static,a!=="*"&&a!=="?"&&a!=="+"&&c--);break;case de.ParamRegExp:a===")"?d[d.length-1]=="\\"?d=d.slice(0,-1)+a:n=de.ParamRegExpEnd:d+=a;break;case de.ParamRegExpEnd:p(),n=de.Static,a!=="*"&&a!=="?"&&a!=="+"&&c--,d="";break;default:t("Unknown state");break}}return n===de.ParamRegExp&&t(`Unfinished custom RegExp for param "${i}"`),p(),l(),s}const Gn="[^/]+?",Jr={sensitive:!1,strict:!1,start:!0,end:!0};var ve=(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})(ve||{});const Yr=/[.+*?^${}()[\]/\\]/g;function Xr(e,t){const n=ne({},Jr,t),o=[];let s=n.start?"^":"";const r=[];for(const i of e){const d=i.length?[]:[ve.Root];n.strict&&!i.length&&(s+="/");for(let p=0;p<i.length;p++){const h=i[p];let k=ve.Segment+(n.sensitive?ve.BonusCaseSensitive:0);if(h.type===Ge.Static)p||(s+="/"),s+=h.value.replace(Yr,"\\$&"),k+=ve.Static;else if(h.type===Ge.Param){const{value:$,repeatable:_,optional:v,regexp:w}=h;r.push({name:$,repeatable:_,optional:v});const I=w||Gn;if(I!==Gn){k+=ve.BonusCustomRegExp;try{`${I}`}catch(A){throw new Error(`Invalid custom RegExp for param "${$}" (${I}): `+A.message)}}let M=_?`((?:${I})(?:/(?:${I}))*)`:`(${I})`;p||(M=v&&i.length<2?`(?:/${M})`:"/"+M),v&&(M+="?"),s+=M,k+=ve.Dynamic,v&&(k+=ve.BonusOptional),_&&(k+=ve.BonusRepeatable),I===".*"&&(k+=ve.BonusWildcard)}d.push(k)}o.push(d)}if(n.strict&&n.end){const i=o.length-1;o[i][o[i].length-1]+=ve.BonusStrict}n.strict||(s+="/?"),n.end?s+="$":n.strict&&!s.endsWith("/")&&(s+="(?:/|$)");const l=new RegExp(s,n.sensitive?"":"i");function c(i){const d=i.match(l),p={};if(!d)return null;for(let h=1;h<d.length;h++){const k=d[h]||"",$=r[h-1];p[$.name]=k&&$.repeatable?k.split("/"):k}return p}function a(i){let d="",p=!1;for(const h of e){(!p||!d.endsWith("/"))&&(d+="/"),p=!1;for(const k of h)if(k.type===Ge.Static)d+=k.value;else if(k.type===Ge.Param){const{value:$,repeatable:_,optional:v}=k,w=$ in i?i[$]:"";if(Ee(w)&&!_)throw new Error(`Provided param "${$}" is an array but it is not repeatable (* or + modifiers)`);const I=Ee(w)?w.join("/"):w;if(!I)if(v)h.length<2&&(d.endsWith("/")?d=d.slice(0,-1):p=!0);else throw new Error(`Missing required param "${$}"`);d+=I}}return d||"/"}return{re:l,score:o,keys:r,parse:c,stringify:a}}function Zr(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]===ve.Static+ve.Segment?-1:1:e.length>t.length?t.length===1&&t[0]===ve.Static+ve.Segment?1:-1:0}function Ko(e,t){let n=0;const o=e.score,s=t.score;for(;n<o.length&&n<s.length;){const r=Zr(o[n],s[n]);if(r)return r;n++}if(Math.abs(s.length-o.length)===1){if(Kn(o))return 1;if(Kn(s))return-1}return s.length-o.length}function Kn(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const Qr={strict:!1,end:!0,sensitive:!1};function el(e,t,n){const o=Xr(Kr(e.path),n),s=ne(o,{record:e,parent:t,children:[],alias:[]});return t&&!s.record.aliasOf==!t.record.aliasOf&&t.children.push(s),s}function tl(e,t){const n=[],o=new Map;t=Fn(Qr,t);function s(p){return o.get(p)}function r(p,h,k){const $=!k,_=Yn(p);_.aliasOf=k&&k.record;const v=Fn(t,p),w=[_];if("alias"in p){const A=typeof p.alias=="string"?[p.alias]:p.alias;for(const y of A)w.push(Yn(ne({},_,{components:k?k.record.components:_.components,path:y,aliasOf:k?k.record:_})))}let I,M;for(const A of w){const{path:y}=A;if(h&&y[0]!=="/"){const C=h.record.path,f=C[C.length-1]==="/"?"":"/";A.path=h.record.path+(y&&f+y)}if(I=el(A,h,v),k?k.alias.push(I):(M=M||I,M!==I&&M.alias.push(I),$&&p.name&&!Xn(I)&&l(p.name)),Jo(I)&&a(I),_.children){const C=_.children;for(let f=0;f<C.length;f++)r(C[f],I,k&&k.children[f])}k=k||I}return M?()=>{l(M)}:Ct}function l(p){if(qo(p)){const h=o.get(p);h&&(o.delete(p),n.splice(n.indexOf(h),1),h.children.forEach(l),h.alias.forEach(l))}else{const h=n.indexOf(p);h>-1&&(n.splice(h,1),p.record.name&&o.delete(p.record.name),p.children.forEach(l),p.alias.forEach(l))}}function c(){return n}function a(p){const h=sl(p,n);n.splice(h,0,p),p.record.name&&!Xn(p)&&o.set(p.record.name,p)}function i(p,h){let k,$={},_,v;if("name"in p&&p.name){if(k=o.get(p.name),!k)throw ct(ce.MATCHER_NOT_FOUND,{location:p});v=k.record.name,$=ne(Jn(h.params,k.keys.filter(M=>!M.optional).concat(k.parent?k.parent.keys.filter(M=>M.optional):[]).map(M=>M.name)),p.params&&Jn(p.params,k.keys.map(M=>M.name))),_=k.stringify($)}else if(p.path!=null)_=p.path,k=n.find(M=>M.re.test(_)),k&&($=k.parse(_),v=k.record.name);else{if(k=h.name?o.get(h.name):n.find(M=>M.re.test(h.path)),!k)throw ct(ce.MATCHER_NOT_FOUND,{location:p,currentLocation:h});v=k.record.name,$=ne({},h.params,p.params),_=k.stringify($)}const w=[];let I=k;for(;I;)w.unshift(I.record),I=I.parent;return{name:v,path:_,params:$,matched:w,meta:ol(w)}}e.forEach(p=>r(p));function d(){n.length=0,o.clear()}return{addRoute:r,resolve:i,removeRoute:l,clearRoutes:d,getRoutes:c,getRecordMatcher:s}}function Jn(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function Yn(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:nl(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 nl(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 Xn(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function ol(e){return e.reduce((t,n)=>ne(t,n.meta),{})}function sl(e,t){let n=0,o=t.length;for(;n!==o;){const r=n+o>>1;Ko(e,t[r])<0?o=r:n=r+1}const s=rl(e);return s&&(o=t.lastIndexOf(s,o-1)),o}function rl(e){let t=e;for(;t=t.parent;)if(Jo(t)&&Ko(e,t)===0)return t}function Jo({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Zn(e){const t=ie(jt),n=ie(Ho),o=q(()=>{const a=g(e.to);return t.resolve(a)}),s=q(()=>{const{matched:a}=o.value,{length:i}=a,d=a[i-1],p=n.matched;if(!d||!p.length)return-1;const h=p.findIndex(ut.bind(null,d));if(h>-1)return h;const k=Qn(a[i-2]);return i>1&&Qn(d)===k&&p[p.length-1].path!==k?p.findIndex(ut.bind(null,a[i-2])):h}),r=q(()=>s.value>-1&&ul(n.params,o.value.params)),l=q(()=>s.value>-1&&s.value===n.matched.length-1&&Vo(n.params,o.value.params));function c(a={}){if(cl(a)){const i=t[g(e.replace)?"replace":"push"](g(e.to)).catch(Ct);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>i),i}return Promise.resolve()}return{route:o,href:q(()=>o.value.href),isActive:r,isExactActive:l,navigate:c}}function ll(e){return e.length===1?e[0]:e}const al=Q({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:Zn,setup(e,{slots:t}){const n=rt(Zn(e)),{options:o}=ie(jt),s=q(()=>({[eo(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[eo(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const r=t.default&&ll(t.default(n));return e.custom?r:at("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},r)}}}),il=al;function cl(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 ul(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(!Ee(s)||s.length!==o.length||o.some((r,l)=>r.valueOf()!==s[l].valueOf()))return!1}return!0}function Qn(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const eo=(e,t,n)=>e??t??n,dl=Q({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=ie(pn),s=q(()=>e.route||o.value),r=ie(Wn,0),l=q(()=>{let i=g(r);const{matched:d}=s.value;let p;for(;(p=d[i])&&!p.components;)i++;return i}),c=q(()=>s.value.matched[l.value]);ye(Wn,q(()=>l.value+1)),ye(ur,c),ye(pn,s);const a=F();return ze(()=>[a.value,c.value,e.name],([i,d,p],[h,k,$])=>{d&&(d.instances[p]=i,k&&k!==d&&i&&i===h&&(d.leaveGuards.size||(d.leaveGuards=k.leaveGuards),d.updateGuards.size||(d.updateGuards=k.updateGuards))),i&&d&&(!k||!ut(d,k)||!h)&&(d.enterCallbacks[p]||[]).forEach(_=>_(i))},{flush:"post"}),()=>{const i=s.value,d=e.name,p=c.value,h=p&&p.components[d];if(!h)return to(n.default,{Component:h,route:i});const k=p.props[d],$=k?k===!0?i.params:typeof k=="function"?k(i):k:null,v=at(h,ne({},$,t,{onVnodeUnmounted:w=>{w.component.isUnmounted&&(p.instances[d]=null)},ref:a}));return to(n.default,{Component:v,route:i})||v}}});function to(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Yo=dl;function fl(e){const t=tl(e.routes,e),n=e.parseQuery||Br,o=e.stringifyQuery||Vn,s=e.history,r=gt(),l=gt(),c=gt(),a=kn(Ne);let i=Ne;et&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const d=tn.bind(null,m=>""+m),p=tn.bind(null,xr),h=tn.bind(null,Et);function k(m,B){let T,H;return qo(m)?(T=t.getRecordMatcher(m),H=B):H=m,t.addRoute(H,T)}function $(m){const B=t.getRecordMatcher(m);B&&t.removeRoute(B)}function _(){return t.getRoutes().map(m=>m.record)}function v(m){return!!t.getRecordMatcher(m)}function w(m,B){if(B=ne({},B||a.value),typeof m=="string"){const J=nn(n,m,B.path),ue=t.resolve({path:J.path},B),Ue=s.createHref(J.fullPath);return ne(J,ue,{params:h(ue.params),hash:Et(J.hash),redirectedFrom:void 0,href:Ue})}let T;if(m.path!=null)T=ne({},m,{path:nn(n,m.path,B.path).path});else{const J=ne({},m.params);for(const ue in J)J[ue]==null&&delete J[ue];T=ne({},m,{params:p(J)}),B.params=p(B.params)}const H=t.resolve(T,B),Y=m.hash||"";H.params=d(h(H.params));const le=_r(o,ne({},m,{hash:kr(Y),path:H.path})),X=s.createHref(le);return ne({fullPath:le,hash:Y,query:o===Vn?Hr(m.query):m.query||{}},H,{redirectedFrom:void 0,href:X})}function I(m){return typeof m=="string"?nn(n,m,a.value.path):ne({},m)}function M(m,B){if(i!==m)return ct(ce.NAVIGATION_CANCELLED,{from:B,to:m})}function A(m){return f(m)}function y(m){return A(ne(I(m),{replace:!0}))}function C(m,B){const T=m.matched[m.matched.length-1];if(T&&T.redirect){const{redirect:H}=T;let Y=typeof H=="function"?H(m,B):H;return typeof Y=="string"&&(Y=Y.includes("?")||Y.includes("#")?Y=I(Y):{path:Y},Y.params={}),ne({query:m.query,hash:m.hash,params:Y.path!=null?{}:m.params},Y)}}function f(m,B){const T=i=w(m),H=a.value,Y=m.state,le=m.force,X=m.replace===!0,J=C(T,H);if(J)return f(ne(I(J),{state:typeof J=="object"?ne({},Y,J.state):Y,force:le,replace:X}),B||T);const ue=T;ue.redirectedFrom=B;let Ue;return!le&&Er(o,H,T)&&(Ue=ct(ce.NAVIGATION_DUPLICATED,{to:ue,from:H}),Z(H,H,!0,!1)),(Ue?Promise.resolve(Ue):x(ue,H)).catch(pe=>Me(pe)?Me(pe,ce.NAVIGATION_GUARD_REDIRECT)?pe:ae(pe):re(pe,ue,H)).then(pe=>{if(pe){if(Me(pe,ce.NAVIGATION_GUARD_REDIRECT))return f(ne({replace:X},I(pe.to),{state:typeof pe.to=="object"?ne({},Y,pe.to.state):Y,force:le}),B||ue)}else pe=O(ue,H,!0,X,Y);return P(ue,H,pe),pe})}function b(m,B){const T=M(m,B);return T?Promise.reject(T):Promise.resolve()}function u(m){const B=W.values().next().value;return B&&typeof B.runWithContext=="function"?B.runWithContext(m):m()}function x(m,B){let T;const[H,Y,le]=Fr(m,B);T=sn(H.reverse(),"beforeRouteLeave",m,B);for(const J of H)J.leaveGuards.forEach(ue=>{T.push(De(ue,m,B))});const X=b.bind(null,m,B);return T.push(X),U(T).then(()=>{T=[];for(const J of r.list())T.push(De(J,m,B));return T.push(X),U(T)}).then(()=>{T=sn(Y,"beforeRouteUpdate",m,B);for(const J of Y)J.updateGuards.forEach(ue=>{T.push(De(ue,m,B))});return T.push(X),U(T)}).then(()=>{T=[];for(const J of le)if(J.beforeEnter)if(Ee(J.beforeEnter))for(const ue of J.beforeEnter)T.push(De(ue,m,B));else T.push(De(J.beforeEnter,m,B));return T.push(X),U(T)}).then(()=>(m.matched.forEach(J=>J.enterCallbacks={}),T=sn(le,"beforeRouteEnter",m,B,u),T.push(X),U(T))).then(()=>{T=[];for(const J of l.list())T.push(De(J,m,B));return T.push(X),U(T)}).catch(J=>Me(J,ce.NAVIGATION_CANCELLED)?J:Promise.reject(J))}function P(m,B,T){c.list().forEach(H=>u(()=>H(m,B,T)))}function O(m,B,T,H,Y){const le=M(m,B);if(le)return le;const X=B===Ne,J=et?history.state:{};T&&(H||X?s.replace(m.fullPath,ne({scroll:X&&J&&J.scroll},Y)):s.push(m.fullPath,Y)),a.value=m,Z(m,B,T,X),ae()}let L;function D(){L||(L=s.listen((m,B,T)=>{if(!R.listening)return;const H=w(m),Y=C(H,R.currentRoute.value);if(Y){f(ne(Y,{replace:!0,force:!0}),H).catch(Ct);return}i=H;const le=a.value;et&&Nr(jn(le.fullPath,T.delta),qt()),x(H,le).catch(X=>Me(X,ce.NAVIGATION_ABORTED|ce.NAVIGATION_CANCELLED)?X:Me(X,ce.NAVIGATION_GUARD_REDIRECT)?(f(ne(I(X.to),{force:!0}),H).then(J=>{Me(J,ce.NAVIGATION_ABORTED|ce.NAVIGATION_DUPLICATED)&&!T.delta&&T.type===hn.pop&&s.go(-1,!1)}).catch(Ct),Promise.reject()):(T.delta&&s.go(-T.delta,!1),re(X,H,le))).then(X=>{X=X||O(H,le,!1),X&&(T.delta&&!Me(X,ce.NAVIGATION_CANCELLED)?s.go(-T.delta,!1):T.type===hn.pop&&Me(X,ce.NAVIGATION_ABORTED|ce.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),P(H,le,X)}).catch(Ct)}))}let j=gt(),K=gt(),z;function re(m,B,T){ae(m);const H=K.list();return H.length?H.forEach(Y=>Y(m,B,T)):console.error(m),Promise.reject(m)}function oe(){return z&&a.value!==Ne?Promise.resolve():new Promise((m,B)=>{j.add([m,B])})}function ae(m){return z||(z=!m,D(),j.list().forEach(([B,T])=>m?T(m):B()),j.reset()),m}function Z(m,B,T,H){const{scrollBehavior:Y}=e;if(!et||!Y)return Promise.resolve();const le=!T&&Lr(jn(m.fullPath,0))||(H||!T)&&history.state&&history.state.scroll||null;return be().then(()=>Y(m,B,le)).then(X=>X&&Tr(X)).catch(X=>re(X,m,B))}const ke=m=>s.go(m);let Oe;const W=new Set,R={currentRoute:a,listening:!0,addRoute:k,removeRoute:$,clearRoutes:t.clearRoutes,hasRoute:v,getRoutes:_,resolve:w,options:e,push:A,replace:y,go:ke,back:()=>ke(-1),forward:()=>ke(1),beforeEach:r.add,beforeResolve:l.add,afterEach:c.add,onError:K.add,isReady:oe,install(m){m.component("RouterLink",il),m.component("RouterView",Yo),m.config.globalProperties.$router=R,Object.defineProperty(m.config.globalProperties,"$route",{enumerable:!0,get:()=>g(a)}),et&&!Oe&&a.value===Ne&&(Oe=!0,A(s.location).catch(H=>{}));const B={};for(const H in Ne)Object.defineProperty(B,H,{get:()=>a.value[H],enumerable:!0});m.provide(jt,R),m.provide(Ho,fs(B)),m.provide(pn,a);const T=m.unmount;W.add(m),m.unmount=function(){W.delete(m),W.size<1&&(i=Ne,L&&L(),L=null,a.value=Ne,Oe=!1,z=!1),T()}}};function U(m){return m.reduce((B,T)=>B.then(()=>u(T)),Promise.resolve())}return R}const pl=["aria-current"],ml=["href","aria-current","onClick","onMouseenter","onMousemove","onMouseleave"],Sn=Q({__name:"BreadCrumb",props:{path:{},primary:{type:Boolean}},setup(e){const t=ms,n=Vt(),o=[],s=($,_)=>{_&&(o[$]=_)};ps(()=>{o.length=1});const r=F(null),l=F(new Map),c=($,_)=>{_?l.value.set($,_):l.value.delete($)},a=e,i=F([]),d=$=>$==a.path.length?"location":void 0,p=()=>{be(()=>{const $=a.path.length;$<o.length&&o[$].focus()})},h=$=>{if(!o[$])throw Error(`No link at index ${$} (path: ${a.path})`);const v=$?`/${i.value.slice(0,$).join("/")}/`:"/",w=i.value.length?`/${i.value.join("/")}/`:"/",I=decodeURIComponent(location.hash.slice(1).split("//")[0]??""),M=v.replaceAll("?","%3F").replaceAll("#","%23");d($)?(i.value.splice($),n.push(M)):w.startsWith(I)?n.replace(M):n.push(M)},k=$=>{const _=a.path.length+$;_<0||_>i.value.length||h(_)};return Pe(()=>{const $=i.value.slice(0,a.path.length);if(!$.every((v,w)=>v===a.path[w]))i.value=a.path;else if(a.path.length>$.length)i.value=$.concat(a.path.slice($.length));else for(let v=a.path.length;v<i.value.length;++v)if(!Lo(i.value.slice(0,v+1))){i.value=i.value.slice(0,v);break}a.primary&&be(()=>{const v=document.activeElement;(!v||[...o,document.body].includes(v))&&p()})}),($,_)=>(E(),N("nav",{class:"breadcrumb","aria-label":"Breadcrumb",onKeydown:[_[4]||(_[4]=Ke(me(v=>k(-1),["stop"]),["left"])),_[5]||(_[5]=Ke(me(v=>k(1),["stop"]),["right"]))],onKeyup:_[6]||(_[6]=Ke(v=>k(0),["enter"])),onFocus:p,tabindex:"0"},[S("a",{href:"#/",ref:v=>s(0,v),class:he(["home",{current:!!d(0)}]),"aria-current":d(0),onClick:_[0]||(_[0]=me(v=>h(0),["prevent"])),onMouseenter:_[1]||(_[1]=(...v)=>r.value?.startHover&&r.value?.startHover(...v)),onMousemove:_[2]||(_[2]=(...v)=>r.value?.updatePosition&&r.value?.updatePosition(...v)),onMouseleave:_[3]||(_[3]=(...v)=>r.value?.endHover&&r.value?.endHover(...v))},[(E(),ee(wn(g(t)))),V(Ye,{ref_key:"homeTooltip",ref:r,text:"/"},{default:we(()=>[..._[7]||(_[7]=[Ce("/",-1)])]),_:1},512)],42,pl),(E(!0),N(ge,null,dt(i.value,(v,w)=>(E(),N("a",{key:w,href:`/#/${i.value.slice(0,w+1).join("/")}/`,class:he({current:!!d(w+1)}),"aria-current":d(w+1),onClick:me(I=>h(w+1),["prevent"]),ref_for:!0,ref:I=>s(w+1,I),onMouseenter:l.value.get(w)?.startHover,onMousemove:l.value.get(w)?.updatePosition,onMouseleave:l.value.get(w)?.endHover},[Ce(te(v),1),V(Ye,{ref_for:!0,ref:I=>c(w,I),text:`/${i.value.slice(0,w+1).join("/")}`},{default:we(()=>[Ce(te(`/${i.value.slice(0,w+1).join("/")}`),1)]),_:2},1032,["text"])],42,ml))),128))],32))}}),hl=Q({__name:"UploadButton",props:{path:Array},setup(e){const t=Vt(),n=F(),o=F(),s=se(),r=e;function l(y){const C=Array.from(y.clipboardData?.items??[]),f=[],b=[];for(const u of C){if(u.kind!=="file")continue;const x=u.webkitGetAsEntry();if(x?.isFile){const P=u.getAsFile();P&&f.push(P)}else x?.isDirectory&&b.push(x)}if(f.length||b.length){y.preventDefault(),i(f);for(const u of b)c(u,`${r.path.join("/")}/${u.name}`)}}const c=async(y,C)=>{const f=y.createReader(),b=await new Promise(x=>f.readEntries(x)),u=[];for(const x of b){const P=`${C}/${x.name}`;if(x.isFile){const O=await new Promise(L=>x.file(L));u.push({file:O,cloudName:P,cloudPos:0})}else x.isDirectory&&await c(x,P)}u.length&&d(u)};function a(y){y.preventDefault();const C=y.target,f=Array.from((C??y.dataTransfer)?.files??[]);C&&(C.value=""),f.length&&i(f)}const i=y=>{const C=r.path.join("/");let f=[],b="";for(const u of y){const x=u.webkitRelativePath||u.name;!b&&u.webkitRelativePath&&(b=x.split("/")[0]??""),f.push({file:u,cloudName:C+"/"+x,cloudPos:0})}d(f),b&&t.push("/"+(C?C+"/":"")+b+"/")},d=y=>{if(y.filter(x=>x.cloudName.includes("/.")).length&&(s.showToast("Won't upload dotfiles"),y=y.filter(x=>!x.cloudName.includes("/."))),!y.length)return;y.sort((x,P)=>zt.compare(x.cloudName,P.cloudName));const f=Math.floor(Date.now()/1e3),b=new Map(s.document.map(x=>[x.loc?`${x.loc}/${x.name}`:x.name,x])),u=new Set;for(const x of y){const P=x.cloudName.lastIndexOf("/"),O=P>0?x.cloudName.slice(0,P):"",L=x.cloudName.slice(P+1),D=O.split("/");for(let K=0;K<D.length;K++){const z=D.slice(0,K+1).join("/");z&&!b.has(z)&&!u.has(z)&&(s.document.push(new it({loc:D.slice(0,K).join("/"),name:D[K],key:crypto.randomUUID(),size:0,mtime:f,dir:!0,ghost:!0})),u.add(z))}const j=b.get(x.cloudName);j?(j.size=x.file.size,j.mtime=f,j.ghost=!0):s.document.push(new it({loc:O,name:L,key:crypto.randomUUID(),size:x.file.size,mtime:f,dir:!1,ghost:!0}))}v=[...v,...y],_(y),A()},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"};s.uprogress={...p},setInterval(()=>{Date.now()-s.uprogress.tlast>3e3?(s.uprogress.statbytes=0,s.uprogress.statdur=1):(s.uprogress.statbytes*=.9,s.uprogress.statdur*=.9)},100);const h=({name:y,size:C,start:f,end:b})=>{if(y!==s.uprogress.filename)return;const u=Date.now();s.uprogress.xfer=s.uprogress.filestart+b,s.uprogress.filepos=b,s.uprogress.statbytes+=b-f,s.uprogress.statdur+=u-s.uprogress.tlast,s.uprogress.tlast=u,b===C&&(s.uprogress.filestart+=C,k(),++s.uprogress.fileidx>=s.uprogress.filecount&&$())},k=()=>{const y=s.uprogress.files.shift();if(!y)return $();s.uprogress.filepos=0,s.uprogress.filesize=y.file.size,s.uprogress.filename=y.cloudName},$=()=>{Object.assign(s.uprogress,p),s.uprogress.t0=Date.now(),s.uprogress.tlast=s.uprogress.t0+1},_=y=>{s.uprogress.files.length===0&&$(),s.uprogress.total+=y.reduce((C,f)=>C+f.file.size,0),s.uprogress.filecount+=y.length,s.uprogress.files=[...s.uprogress.files,...y],k()};let v=[];const w=async()=>await new Promise(y=>{const C=Ae(js,{open(f){y(C)},error(f){console.error("Upload socket error",f),s.error="Upload socket error"},message(f){const b=JSON.parse(f.data);if("error"in b){console.error("Upload socket error",b.error),s.error=b.error.message;return}b.status==="ack"?h(b.req):console.log("Unknown upload response",b)}});C.sendMsg=f=>C.send(JSON.stringify(f)),C.sendData=async f=>{s.uprogress.status="uploading",await new Promise(b=>{const u=setInterval(()=>{C.bufferedAmount>1048576||(b(void 0),clearInterval(u))},1)}),s.uprogress.status="processing",C.send(f)}}),I=async()=>{const y=await w();for(;v.length;){const C=v[0],f=C.cloudPos,b=Math.min(C.file.size,f+(1<<20)),u={name:C.cloudName,size:C.file.size,start:f,end:b},x=C.file.slice(f,b);C.cloudPos=b,y.sendMsg(u),await y.sendData(x),C.cloudPos===C.file.size&&v.shift()}v.length&&A(),s.uprogress.status="idle",M=!1};let M=!1;const A=()=>{M===!1&&(M=setTimeout(()=>{M=!0,I()},0))};return xe(()=>{addEventListener("dragover",a),addEventListener("drop",a),addEventListener("paste",l)}),lt(()=>{removeEventListener("paste",l),removeEventListener("dragover",a),removeEventListener("drop",a)}),(y,C)=>{const f=Wt;return E(),N(ge,null,[S("template",null,[S("input",{ref_key:"fileInput",ref:n,onChange:a,type:"file",multiple:""},null,544),S("input",{ref_key:"folderInput",ref:o,onChange:a,type:"file",webkitdirectory:""},null,544)]),V(f,{name:"add-file",tooltip:"Upload files",onClick:C[0]||(C[0]=b=>n.value.click())}),V(f,{name:"add-folder",tooltip:"Upload folder",onClick:C[1]||(C[1]=b=>o.value.click())})],64)}}}),gl=Eo("ssoAuth",()=>{const e=q(()=>se().server?.paskia===!0);function t(){se().clearSensitiveData(),Ao()}return{isExternalAuth:e,clearDataOnUnauth:t}});let We=null;function vl(){return We!==null}function yl(e){We&&Xo(),We=e}function no(e){e===We&&(We=null)}function Xo(){We&&(We.closeMenu(),We=null)}const Ie={defaultDirection:"br",defaultMinWidth:100,defaultMaxWidth:600,defaultZindex:100,defaultZoom:1,defaultAdjustPadding:{x:0,y:10}};function xt(e,t){let n=e.offsetTop;return e.offsetParent!=null&&e.offsetParent!=t&&(n-=e.offsetParent.scrollTop,n+=xt(e.offsetParent,t)),n}function St(e,t){let n=e.offsetLeft;return e.offsetParent!=null&&e.offsetParent!=t&&(n-=e.offsetParent.scrollLeft,n+=St(e.offsetParent,t)),n}function wl(e,t,n,o){return{x:St(e,o)+t,y:xt(e,o)+n}}const rn="mx-menu-default-container",kl="mx-menu-container-";let bl=0;function Zo(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=kl+bl++,s.setAttribute("id",r)),{eleId:r,container:s,isNew:!1}}}let o=document.getElementById(rn);return o||(o=document.createElement("div"),o.setAttribute("id",rn),o.setAttribute("class","mx-menu-ghost-host fullscreen"),document.body.appendChild(o)),o.style.zIndex=n?.toString()||Ie.defaultZindex.toString(),{eleId:rn,container:o,isNew:!0}}function Cl(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 oo(e){return typeof e=="number"?`${e}px`:e}const Re=Q({props:{vnode:{type:null},data:{type:null,default:null}},setup(e){const{vnode:t,data:n}=Xe(e);return()=>typeof t.value=="function"?t.value(n.value):t.value}});function xl(e,t){const n={...e};return delete n[t],n}var Sl=Object.defineProperty,$l=(e,t,n)=>t in e?Sl(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,so=(e,t,n)=>$l(e,typeof t!="symbol"?t+"":t,n);class ro{constructor(t,n){so(this,"x",0),so(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 lo(e){const{onDown:t,onMove:n,onUp:o}=e,s=new ro,r=new ro;let l;function c(i){i.stopPropagation(),r.set(i.x,i.y),r.substract(s),n(s,r,i,l)}function a(i){o(i,l),s.set(0,0),document.removeEventListener("mousemove",c),document.removeEventListener("mouseup",a)}return(i,d)=>t(i,d)?(l=d,s.set(i.x,i.y),document.addEventListener("mousemove",c),document.addEventListener("mouseup",a),i.stopPropagation(),!0):!1}function _l(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 vt=[],ao=_l(100,()=>{for(const e of vt)e()});function El(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(){ao.start(),vt.push(l)},stopResizeChecker(){const c=vt.indexOf(l);c>=0&&vt.splice(c,1),vt.length===0&&ao.stop()}}}const io=140,Rl=70,Il=Q({__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=F(),l=F(),c=F(),a=F(),i=F(),d=F(),p=F(!1),h=q(()=>o.scroll==="horizontal"||o.scroll==="both"),k=q(()=>o.scroll==="vertical"||o.scroll==="both"),$=rt({show:!1,size:0,sizeRaw:0,pos:0}),_=rt({show:!1,size:0,sizeRaw:0,pos:0});let v=0,w=0,I=0,M=0,A=null;const y={attributes:!0,childList:!0};function C(){if(r.value){if($.show){const R=r.value.offsetWidth/r.value.scrollWidth;$.sizeRaw=R*r.value.offsetWidth,$.size=R*100,$.pos=r.value.scrollLeft/(r.value.scrollWidth-r.value.offsetWidth)*(100-$.size),R>=1&&($.show=!1)}if(_.show){const R=r.value.offsetHeight/r.value.scrollHeight;_.sizeRaw=R*r.value.offsetHeight,_.size=R*100,_.pos=r.value.scrollTop/(r.value.scrollHeight-r.value.offsetHeight)*(100-_.size),R>=1&&(_.show=!1)}s("scroll",r.value.scrollLeft,r.value.scrollTop)}}function f(R=!1){if(!r.value)return;let U=h.value,m=k.value;const B=U&&(v!==r.value.scrollWidth||I!==r.value.offsetWidth),T=k&&(w!==r.value.scrollHeight||M!==r.value.offsetHeight);if(!R&&!B&&!T)return;const H=window.getComputedStyle(r.value);(H.overflow==="hidden"||H.overflowX==="hidden")&&(U=!1),(H.overflow==="hidden"||H.overflowY==="hidden")&&(m=!1),$.show=U,_.show=m,C(),I=r.value.offsetWidth,M=r.value.offsetHeight,v=r.value.scrollWidth,w=r.value.scrollHeight,s("resized",v,w)}function b(R){var U;o.scroll=="horizontal"&&(R.deltaMode==0&&((U=r.value)==null||U.scrollTo({left:r.value.scrollLeft+(R.deltaY>0?io:-140),behavior:"smooth"})),R.preventDefault(),R.stopPropagation())}function u(R){var U;R.deltaMode==0&&((U=r.value)==null||U.scrollTo({left:r.value.scrollLeft+(R.deltaY>0?io:-140),behavior:"smooth"}),R.preventDefault(),R.stopPropagation())}function x(R){var U;R.deltaMode==0&&((U=r.value)==null||U.scrollTo({top:r.value.scrollTop+(R.deltaY>0?Rl:-70),behavior:"smooth"}),R.preventDefault(),R.stopPropagation())}let P=0,O=0,L=0,D=0;const j=lo({onDown(R){return!c.value||!i.value?!1:(P=R.offsetX,O=R.x-R.offsetX-i.value.offsetLeft,R.preventDefault(),p.value=!0,!0)},onMove(R,U,m){r.value&&c.value&&(oe(m.x-P-O),m.preventDefault(),m.stopPropagation())},onUp(){p.value=!1}}),K=lo({onDown(R){return!a.value||!d.value?!1:(L=R.offsetY,D=R.y-R.offsetY-d.value.offsetTop,R.preventDefault(),p.value=!0,!0)},onMove(R,U,m){r.value&&a.value&&(ae(m.y-L-D),m.preventDefault(),m.stopPropagation())},onUp(){p.value=!1}});function z(R){r.value&&(r.value.scrollLeft=R/100*(r.value.scrollWidth-r.value.offsetWidth))}function re(R){r.value&&(r.value.scrollLeft=R/100*(r.value.scrollHeight-r.value.offsetHeight))}function oe(R){r.value&&(r.value.scrollLeft=R/(r.value.offsetWidth-$.sizeRaw)*(r.value.scrollWidth-r.value.offsetWidth))}function ae(R){r.value&&(r.value.scrollTop=R/(r.value.offsetHeight-_.sizeRaw)*(r.value.scrollHeight-r.value.offsetHeight))}function Z(R){o.scrollBarBackgroundClickable&&oe(R.offsetX-$.sizeRaw/2)}function ke(R){o.scrollBarBackgroundClickable&&ae(R.offsetY-_.sizeRaw/2)}const{startResizeChecker:Oe,stopResizeChecker:W}=El(r,()=>f(),()=>f());return xe(()=>{be(()=>{setTimeout(()=>f(!0),200),f(!0),Oe(),A=new MutationObserver(()=>f()),A.observe(r.value,y)})}),Ht(()=>{W(),A&&(A.disconnect(),A=null)}),t({refreshScrollState(){f(!0)},getScrollContainer(){return r.value},scrollTo(R,U){var m;(m=r.value)==null||m.scrollTo(R,U)},scrollToTop(){var R;(R=r.value)==null||R.scrollTo(0,0)},scrollToBottom(){var R;(R=r.value)==null||R.scrollTo(r.value.scrollWidth,r.value.scrollHeight)}}),(R,U)=>(E(),N("div",{ref_key:"scrollrect",ref:l,class:he(["vue-scroll-rect",e.scrollBarAlwaysShow?"always-show-scrollbar":"",e.scrollBarBackgroundClickable?"background-clickable":"",p.value?"dragging":""]),style:tt({width:e.width?`${e.width}px`:void 0,height:e.height?`${e.height}px`:void 0}),onWheel:b},[S("div",{ref_key:"container",ref:r,class:he(["scroll-content",e.scroll,e.containerClass]),style:tt({maxWidth:e.maxWidth?`${e.maxWidth}px`:void 0,maxHeight:e.maxHeight?`${e.maxHeight}px`:void 0,...e.containerStyle}),onScroll:C},[fe(R.$slots,"default")],38),$.show?fe(R.$slots,"scrollBarX",{key:0,scrollBarValue:$,onScroll:z},()=>[S("div",{ref_key:"scrollBarRefX",ref:c,class:"scrollbar horizontal",onClick:Z,onWheel:u},[S("div",{class:"thumb",ref_key:"scrollBarThumbRefX",ref:i,style:tt({left:`${$.pos}%`,width:`${$.size}%`}),onMousedown:U[0]||(U[0]=(...m)=>g(j)&&g(j)(...m)),onWheel:u},null,36)],544)]):G("",!0),_.show?fe(R.$slots,"scrollBarY",{key:1,scrollBarValue:_,onScroll:re},()=>[_.show?(E(),N("div",{key:0,ref_key:"scrollBarRefY",ref:a,class:"scrollbar vertical",onClick:ke,onWheel:x},[S("div",{class:"thumb",ref_key:"scrollBarThumbRefY",ref:d,style:tt({top:`${_.pos}%`,height:`${_.size}%`}),onMousedown:U[1]||(U[1]=(...m)=>g(K)&&g(K)(...m)),onWheel:x},null,36)],544)):G("",!0)]):G("",!0)],38))}}),$n=(e,t)=>{const n=e.__vccOpts||e;for(const[o,s]of t)n[o]=s;return n},Ml={},Al={class:"mx-checked-mark","aria-hidden":"true",viewBox:"0 0 1024 1024"},Pl=S("path",{d:"M129.3,428.6L52,512l345,372.5l575-620.8l-69.5-75L400.4,718.2L129.3,428.6z"},null,-1),Ol=[Pl];function Tl(e,t){return E(),N("svg",Al,Ol)}const Nl=$n(Ml,[["render",Tl]]),Ll={},Dl={class:"mx-right-arrow","aria-hidden":"true",viewBox:"0 0 1024 1024"},Bl=S("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),Hl=[Bl];function Fl(e,t){return E(),N("svg",Dl,Hl)}const Wl=$n(Ll,[["render",Fl]]),zl={class:"mx-item-row"},Ul=["xlink:href"],jl={key:1,class:"label"},Vl={class:"mx-item-row"},ql={class:"mx-shortcut"},_n=Q({__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:c,disabled:a,hidden:i,label:d,icon:p,iconFontClass:h,showRightArrow:k,shortcut:$,hasChildren:_}=Xe(o),v=F(!1),w=F(!1),I=F(),M=ie("globalOptions"),A=ie("globalHasSlot"),y=ie("globalRenderSlot"),C=ie("globalCloseMenu"),f=ie("menuContext"),b=q(()=>typeof d.value=="string"?d.value:typeof d.value=="function"?Cl(d.value.toString()):"MenuItem[unknow]");ye("MenuItemName",b);const u={getSubMenuInstance:()=>{},showSubMenu:()=>v.value?(f.markActiveMenuItem(u,!0),!0):_.value?(P(),!0):!1,hideSubMenu:()=>{f.closeOtherSubMenu()},isDisabledOrHidden:()=>a.value||i.value,getElement:()=>I.value,focus:()=>w.value=!0,blur:()=>w.value=!1,click:x};ye("menuItemInstance",u),xe(()=>{f.isMenuItemDataCollectedFlag()?be(()=>{let D=0;const j=f.getElement();if(j){let K=0;for(let z=0;z<j.children.length;z++){const re=j.children[z];if(re.getAttribute("data-type")==="ContextMenuItem"){if(re===I.value){D=K;break}K++}}}f.addChildMenuItem(u,D)}):f.addChildMenuItem(u)}),Ht(()=>{f.removeChildMenuItem(u)});function x(D){if(!a.value){if(D){const j=D.target;if(j.classList.contains("mx-context-no-clickable")||M.value.ignoreClickClassName&&j.classList.contains(M.value.ignoreClickClassName))return;if(M.value.clickCloseClassName&&j.classList.contains(M.value.clickCloseClassName)){D.stopPropagation(),C(o.rawMenuItem);return}}_.value?c.value?(typeof r.value=="function"&&r.value(D),s("click",D)):v.value||P():(typeof r.value=="function"&&r.value(D),s("click",D),l.value&&C(o.rawMenuItem))}}function P(D){w.value=!1,f.checkCloseOtherSubMenuTimeOut()||f.closeOtherSubMenu(),a.value||(f.markActiveMenuItem(u),_.value&&(D||f.markThisOpenedByKeyBoard(),f.addOpenedSubMenu(O),v.value=!0,be(()=>s("subMenuOpen",u))))}function O(){w.value=!1,v.value=!1,s("subMenuClose",u)}function L(){return{disabled:a.value,label:d.value,icon:p.value,iconFontClass:h.value,showRightArrow:k.value,clickClose:l.value,clickableWhenHasChildren:c.value,shortcut:$.value,theme:M.value.theme,isOpen:v,hasChildren:_,onClick:x,onMouseEnter:P,closeMenu:C}}return t(u),(D,j)=>g(i)?G("",!0):(E(),N("div",{key:0,class:"mx-context-menu-item-wrapper",ref_key:"menuItemRef",ref:I,"data-type":"ContextMenuItem"},[g(A)("itemRender")?(E(),ee(g(Re),{key:0,vnode:()=>g(y)("itemRender",L())},null,8,["vnode"])):e.customRender?(E(),ee(g(Re),{key:1,vnode:e.customRender,data:L()},null,8,["vnode","data"])):(E(),N("div",{key:2,class:he(["mx-context-menu-item",g(a)?"disabled":"",w.value?"keyboard-focus":"",e.customClass?" "+e.customClass:"",v.value?"open":""]),onClick:x,onMouseenter:P},[fe(D.$slots,"default",{},()=>[S("div",zl,[S("div",{class:he(["mx-icon-placeholder",e.preserveIconWidth?"preserve-width":""])},[fe(D.$slots,"icon",{},()=>[g(A)("itemIconRender")?(E(),ee(g(Re),{key:0,vnode:()=>g(y)("itemIconRender",L())},null,8,["vnode"])):typeof e.svgIcon=="string"&&e.svgIcon?(E(),N("svg",ln({key:1,class:"icon svg"},e.svgProps),[S("use",{"xlink:href":e.svgIcon},null,8,Ul)],16)):typeof g(p)!="string"?(E(),ee(g(Re),{key:2,vnode:g(p),data:g(p)},null,8,["vnode","data"])):typeof g(p)=="string"&&g(p)!==""?(E(),N("i",{key:3,class:he(g(p)+" icon "+g(h)+" "+g(M).iconFontClass)},null,2)):G("",!0)]),e.checked?fe(D.$slots,"check",{key:0},()=>[g(A)("itemCheckRender")?(E(),ee(g(Re),{key:0,vnode:()=>g(y)("itemCheckRender",L())},null,8,["vnode"])):G("",!0),V(Nl)]):G("",!0)],2),fe(D.$slots,"label",{},()=>[g(A)("itemLabelRender")?(E(),ee(g(Re),{key:0,vnode:()=>g(y)("itemLabelRender",L())},null,8,["vnode"])):typeof g(d)=="string"?(E(),N("span",jl,te(g(d)),1)):(E(),ee(g(Re),{key:2,vnode:g(d),data:g(d)},null,8,["vnode","data"]))])]),S("div",Vl,[g($)||D.$slots.shortcut?fe(D.$slots,"shortcut",{key:0},()=>[g(A)("itemShortcutRender")?(E(),ee(g(Re),{key:0,vnode:()=>g(y)("itemShortcutRender",L())},null,8,["vnode"])):G("",!0),S("span",ql,te(g($)),1)]):G("",!0),g(k)?fe(D.$slots,"rightArrow",{key:1},()=>[g(A)("itemRightArrowRender")?(E(),ee(g(Re),{key:0,vnode:()=>g(y)("itemRightArrowRender",L())},null,8,["vnode"])):G("",!0),V(Wl)]):G("",!0)])])],34)),fe(D.$slots,"submenu",{context:u,show:v.value})],512))}}),Gl=Q({name:"ContextMenuSperator",components:{VNodeRender:Re},setup(){const e=ie("globalHasSlot"),t=ie("globalRenderSlot");return{globalHasSlot:e,globalRenderSlot:t}}}),Kl={key:1,class:"mx-context-menu-item-sperator mx-context-no-clickable"};function Jl(e,t,n,o,s,r){const l=bo("VNodeRender");return e.globalHasSlot("separatorRender")?(E(),ee(l,{key:0,vnode:()=>e.globalRenderSlot("separatorRender",{})},null,8,["vnode"])):(E(),N("div",Kl))}const $t=$n(Gl,[["render",Jl]]),En=Q({__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=F(!1),l=ie("globalGetMenuHostId",""),c=ie("menuContext"),a=ie("globalOptions");ie("globalHasSlot"),ie("globalRenderSlot");const i=F("UnknowOrRoot"),d=ie("MenuItemName",i),{zIndex:p,getParentWidth:h,getParentHeight:k,getZoom:$}=c,{adjustPosition:_}=Xe(o),v=F(),w=F(),I=F(),M=[],A=ie("globalSetCurrentSubMenu"),y=[];let C=null,f=0;function b(){C&&C.blur()}function u(W,R){if(W){for(let U=R!==void 0?R:0;U<y.length;U++)if(!y[U].isDisabledOrHidden()){x(U);break}}else for(let U=R!==void 0?R:y.length-1;U>=0;U--)if(!y[U].isDisabledOrHidden()){x(U);break}}function x(W){if(C&&b(),W!==void 0&&(C=y[Math.max(0,Math.min(W,y.length-1))]),!C)return;C.focus();const R=C.getElement();R&&R.scrollIntoView({behavior:"auto",block:"nearest",inline:"nearest"})}function P(){A(O)}const O={el:I,name:d,isTopLevel:()=>c.getParentContext()===null,closeSelfAndActiveParent:()=>{const W=j.getParentContext();if(W){W.closeOtherSubMenu();const R=W.getSubMenuInstanceContext();if(R)return R.focusCurrentItem(),!0}return!1},closeCurrentSubMenu:()=>{var W;return(W=j.getParentContext())==null?void 0:W.closeOtherSubMenu()},moveCurrentItemFirst:()=>u(!0),moveCurrentItemLast:()=>u(!1),moveCurrentItemDown:()=>u(!0,C?y.indexOf(C)+1:0),moveCurrentItemUp:()=>u(!1,C?y.indexOf(C)-1:0),focusCurrentItem:()=>x(),openCurrentItemSubMenu:()=>C?C?.showSubMenu():!1,triggerCurrentItemClick:W=>C?.click(W)};let L=!1,D=!1;const j={zIndex:p+1,container:c.container,adjustPadding:a.value.adjustPadding||Ie.defaultAdjustPadding,getParentWidth:()=>{var W;return((W=I.value)==null?void 0:W.offsetWidth)||0},getParentHeight:()=>{var W;return((W=I.value)==null?void 0:W.offsetHeight)||0},getPositon:()=>[Z.value.x,Z.value.y],getZoom:()=>a.value.zoom||Ie.defaultZoom,addOpenedSubMenu(W){M.push(W)},closeOtherSubMenu(){M.forEach(W=>W()),M.splice(0,M.length),A(O)},checkCloseOtherSubMenuTimeOut(){return f?(clearTimeout(f),f=0,!0):!1},closeOtherSubMenuWithTimeOut(){f=setTimeout(()=>{f=0,this.closeOtherSubMenu()},200)},addChildMenuItem:(W,R)=>{R===void 0?y.push(W):y.splice(R,0,W)},removeChildMenuItem:W=>{y.splice(y.indexOf(W),1),W.getSubMenuInstance=()=>{}},markActiveMenuItem:(W,R=!1)=>{b(),C=W,R&&x()},markThisOpenedByKeyBoard:()=>{L=!0},isOpenedByKeyBoardFlag:()=>L?(L=!1,!0):!1,isMenuItemDataCollectedFlag:()=>D,getElement:()=>I.value||null,getParentContext:()=>c,getSubMenuInstanceContext:()=>O};ye("menuContext",j);const K={getChildItem:W=>y[W],getMenuDimensions:()=>w.value?{width:w.value.offsetWidth,height:w.value.offsetHeight}:{width:0,height:0},getSubmenuRoot:()=>w.value,getMenu:()=>I.value,getScrollValue:()=>{var W,R;return((R=(W=v.value)==null?void 0:W.getScrollContainer())==null?void 0:R.scrollTop)||0},setScrollValue:W=>{var R;return(R=v.value)==null?void 0:R.scrollTo(0,W)},getScrollHeight:()=>re.value,adjustPosition:()=>{ke()},getMaxHeight:()=>oe.value,getPosition:()=>Z.value,setPosition:(W,R)=>{Z.value.x=W,Z.value.y=R}},z=ie("menuItemInstance",void 0);z&&(z.getSubMenuInstance=()=>K);const re=F(0),oe=F(0),ae=F(!1),Z=F({x:0,y:0});function ke(){be(()=>{var W;const R=I.value,U=w.value;if(R&&U&&v.value){const{container:m}=c,B=h?.()??0,T=k?.()??0,H=getComputedStyle(U),Y=parseFloat(H.paddingLeft),le=parseFloat(H.paddingTop),X=T>0?le:0,J=document.documentElement.scrollHeight/$(),ue=document.documentElement.scrollWidth/$(),Ue=Math.min(ue,m.offsetWidth),pe=Math.min(J,m.offsetHeight);let Jt=St(R,m),Yt=xt(R,m);if(o.direction.includes("l")?Z.value.x-=R.offsetWidth+Y:o.direction.includes("r")?Z.value.x+=B+Y:(Z.value.x+=B/2,Z.value.x-=(R.offsetWidth+Y)/2),o.direction.includes("t")){const pt=(W=o.parentMenuItemContext)==null?void 0:W.getElement();pt&&(Z.value.y+=pt.offsetHeight),Z.value.y-=(R.offsetHeight+le)/$()}else o.direction.includes("b")?Z.value.y-=le/$():Z.value.y-=R.offsetHeight/2/$();be(()=>{var pt,In;Jt=St(R,m),Yt=xt(R,m);const Mn=((In=(pt=v.value)==null?void 0:pt.getScrollContainer())==null?void 0:In.scrollHeight)||0,rs=o.maxHeight;re.value=o.maxHeight?Math.min(Mn,o.maxHeight):Mn;const ls=Jt+R.offsetWidth-Ue,An=Yt+re.value+X*2-pe;if(ae.value=An>0,_.value&&ls>0){const mt=B+R.offsetWidth-Y,ht=Jt;mt>ht?Z.value.x-=ht:Z.value.x-=mt}if(ae.value){if(_.value){const mt=An,ht=Yt;mt>ht?Z.value.y-=ht-X:Z.value.y-=mt-X}oe.value=pe-(Z.value.y+le)}else oe.value=rs||0})}})}function Oe(){var W;const R=(W=o.parentMenuItemContext)==null?void 0:W.getElement();if(R){const U=St(R,c.container),m=xt(R,c.container);Z.value.x=U,Z.value.y=m}else{const[U,m]=c.getPositon();Z.value.x=U,Z.value.y=m}be(()=>{var U;A(O),(U=I.value)==null||U.focus({preventScroll:!0}),c.isOpenedByKeyBoardFlag()&&be(()=>u(!0)),D=!0}),ke()}return ze(()=>o.show,W=>{W&&Oe()}),xe(()=>{r.value=!0,o.show?Oe():ke()}),Ht(()=>{r.value=!1,z&&(z.getSubMenuInstance=()=>{})}),t(K),(W,R)=>{const U=bo("ContextSubMenu",!0);return r.value?(E(),ee(yn,{key:0,to:`#${g(l)}`},[V(vs,ln({appear:""},g(a).menuTransitionProps||{duration:10},{onAfterLeave:R[0]||(R[0]=m=>s("closeAnimFinished"))}),{default:we(()=>[e.show?(E(),N("div",ln({key:0,ref_key:"submenuRoot",ref:w},W.$attrs,{class:["mx-context-menu",g(a).customClass?g(a).customClass:"",g(a).theme??""],style:{maxWidth:e.maxWidth?g(oo)(e.maxWidth):`${g(Ie).defaultMaxWidth}px`,minWidth:e.minWidth?g(oo)(e.minWidth):`${g(Ie).defaultMinWidth}px`,zIndex:g(p),left:`${Z.value.x}px`,top:`${Z.value.y}px`},"data-type":"ContextSubMenu",onClick:P}),[V(g(Il),{ref_key:"scrollRectRef",ref:v,scroll:"vertical",maxHeight:oe.value,containerClass:"mx-context-menu-scroll"},{default:we(()=>[S("div",{class:he(["mx-context-menu-items"]),ref_key:"menu",ref:I},[fe(W.$slots,"default",{},()=>[(E(!0),N(ge,null,dt(e.items,(m,B)=>(E(),N(ge,{key:B},[m.hidden!==!0&&m.divided==="up"?(E(),ee($t,{key:0})):G("",!0),m.hidden!==!0&&m.divided==="self"?(E(),ee($t,{key:1})):(E(),ee(_n,{key:2,clickHandler:m.onClick?T=>m.onClick(T):void 0,disabled:typeof m.disabled=="object"?m.disabled.value:m.disabled,hidden:typeof m.hidden=="object"?m.hidden.value:m.hidden,icon:m.icon,iconFontClass:m.iconFontClass,svgIcon:m.svgIcon,svgProps:m.svgProps,label:m.label,customRender:m.customRender,customClass:m.customClass,checked:typeof m.checked=="object"?m.checked.value:m.checked,shortcut:m.shortcut,clickClose:m.clickClose,clickableWhenHasChildren:m.clickableWhenHasChildren,preserveIconWidth:m.preserveIconWidth!==void 0?m.preserveIconWidth:g(a).preserveIconWidth,showRightArrow:m.children&&m.children.length>0,hasChildren:m.children&&m.children.length>0,rawMenuItem:m,onSubMenuOpen:T=>{var H;return(H=m.onSubMenuOpen)==null?void 0:H.call(m,T)},onSubMenuClose:T=>{var H;return(H=m.onSubMenuClose)==null?void 0:H.call(m,T)}},ko({_:2},[m.children&&m.children.length>0?{name:"submenu",fn:we(({context:T,show:H})=>[V(U,{show:H,parentMenuItemContext:T,items:m.children,maxWidth:m.maxWidth,minWidth:m.minWidth,maxHeight:m.maxHeight,adjustPosition:m.adjustSubMenuPosition!==void 0?m.adjustSubMenuPosition:g(a).adjustPosition,direction:m.direction!==void 0?m.direction:g(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"])),m.hidden!==!0&&(m.divided==="down"||m.divided===!0)?(E(),ee($t,{key:3})):G("",!0)],64))),128))])],512)]),_:3},8,["maxHeight"])],16)):G("",!0)]),_:3},16)],8,["to"])):G("",!0)}}}),Qo=Q({__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=wo(),l=F(),{options:c,show:a,container:i}=Xe(o);xe(()=>{a.value&&h()}),Ht(()=>{v()}),ze(a,C=>{C?h():(no(d),v())});const d={closeMenu:k,isClosed:$,getMenuRef:()=>l.value,getMenuDimensions:()=>{var C;return((C=l.value)==null?void 0:C.getMenuDimensions())??{width:0,height:0}}};let p=!1;function h(){_(),yl(d)}function k(C){p=!0,s("close",C),c.value.menuTransitionProps||s("closeAnimFinished"),no(d)}function $(){return p}function _(){setTimeout(()=>{document.addEventListener("click",A,!0),document.addEventListener("contextmenu",A,!0),document.addEventListener("scroll",M,!0),!o.isFullScreenContainer&&i.value&&i.value.addEventListener("scroll",M,!0),c.value.keyboardControl!==!1&&document.addEventListener("keydown",I,!0)},50)}function v(){document.removeEventListener("contextmenu",A,!0),document.removeEventListener("click",A,!0),document.removeEventListener("scroll",M,!0),!o.isFullScreenContainer&&i.value&&i.value.removeEventListener("scroll",M,!0),c.value.keyboardControl!==!1&&document.removeEventListener("keydown",I,!0)}const w=F();ye("globalSetCurrentSubMenu",C=>w.value=C),ye("globalGetMenuHostId",i.value.id);function I(C){var f,b,u,x,P,O,L,D,j,K,z,re,oe;let ae=!0;switch(C.key){case"Escape":{((f=w.value)==null?void 0:f.isTopLevel())===!1?(b=w.value)==null||b.closeCurrentSubMenu():k();break}case"ArrowDown":(u=w.value)==null||u.moveCurrentItemDown();break;case"ArrowUp":(x=w.value)==null||x.moveCurrentItemUp();break;case"Home":(P=w.value)==null||P.moveCurrentItemFirst();break;case"End":(O=w.value)==null||O.moveCurrentItemLast();break;case"ArrowLeft":{(L=w.value)!=null&&L.closeSelfAndActiveParent()||(j=(D=c.value).onKeyFocusMoveLeft)==null||j.call(D);break}case"ArrowRight":(K=w.value)!=null&&K.openCurrentItemSubMenu()||(re=(z=c.value).onKeyFocusMoveRight)==null||re.call(z);break;case"Enter":(oe=w.value)==null||oe.triggerCurrentItemClick(C);break;default:ae=!1;break}ae&&w.value&&(C.stopPropagation(),C.preventDefault())}function M(C){c.value.closeWhenScroll!==!1&&y(C.target,null)}function A(C){y(C.target,C)}function y(C,f){for(var b,u;C;){if(C.classList&&C.classList.contains("mx-context-menu"))return;C=C.parentNode}f?c.value.clickCloseOnOutside!==!1?(v(),k()):(u=(b=c.value).onClickOnOutside)==null||u.call(b,f):(v(),k())}return ye("globalOptions",c),ye("globalCloseMenu",k),ye("globalIsFullScreenContainer",o.isFullScreenContainer),ye("globalHasSlot",C=>r[C]!==void 0),ye("globalRenderSlot",(C,f)=>fe(r,C,{...f},()=>[at("span","Render slot failed")],!1)),ye("menuContext",{zIndex:c.value.zIndex||Ie.defaultZindex,container:i.value,adjustPadding:{x:0,y:0},getZoom:()=>c.value.zoom||Ie.defaultZoom,getParentWidth:()=>0,getParentHeight:()=>0,getPositon:()=>[c.value.x,c.value.y],closeOtherSubMenuWithTimeOut:()=>{},checkCloseOtherSubMenuTimeOut:()=>!1,addOpenedSubMenu:()=>{},closeOtherSubMenu:()=>{},getParentContext:()=>null,getSubMenuInstanceContext:()=>null,getElement:()=>null,addChildMenuItem:()=>{},removeChildMenuItem:()=>{},markActiveMenuItem:()=>{},markThisOpenedByKeyBoard:()=>{},isOpenedByKeyBoardFlag:()=>!1,isMenuItemDataCollectedFlag:()=>!1}),t(d),(C,f)=>(E(),ee(En,{ref_key:"submenuInstance",ref:l,show:g(a),items:g(c).items,adjustPosition:g(c).adjustPosition,maxWidth:g(c).maxWidth||g(Ie).defaultMaxWidth,minWidth:g(c).minWidth||g(Ie).defaultMinWidth,maxHeight:g(c).maxHeight,direction:g(c).direction||g(Ie).defaultDirection,onCloseAnimFinished:f[0]||(f[0]=b=>s("closeAnimFinished"))},{default:we(()=>[fe(C.$slots,"default")]),_:3},8,["show","items","adjustPosition","maxWidth","minWidth","maxHeight","direction"]))}}),Yl=Q({__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}=Xe(s),{isNew:c,container:a,eleId:i}=Zo(r.value),d=F(null),p=wo();function h(k){var $,_;o("update:show",!1),o("close"),(_=($=r.value).onClose)==null||_.call($,k)}return t({closeMenu:()=>o("update:show",!1),isClosed:()=>!l.value,getMenuRef:()=>{var k;return(k=d.value)==null?void 0:k.getMenuRef()},getMenuDimensions:()=>{var k;return((k=d.value)==null?void 0:k.getMenuDimensions())??{width:0,height:0}}}),(k,$)=>(E(),ee(yn,{to:`#${g(i)}`},[V(Qo,{ref_key:"menuRef",ref:d,options:g(r),show:g(l),container:g(a),isFullScreenContainer:!g(c),onClose:h},ko({_:2},[dt(g(p),(_,v)=>({name:v,fn:we(w=>[fe(k.$slots,v,hs(gs(w)))])}))]),1032,["options","show","container","isFullScreenContainer"])],8,["to"]))}}),Xl=Q({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=ie("globalOptions"),{adjustSubMenuPosition:o,maxWidth:s,minWidth:r,maxHeight:l}=Xe(e),c=typeof o.value<"u"?o.value:n.value.adjustPosition,a=F(),i=F();return t.expose({getSubMenuRef:()=>a.value,getMenuItemRef:()=>i.value}),()=>at(_n,{...e,ref:i,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:d=>at(En,{ref:a,show:d.show,maxWidth:s.value,minWidth:r.value,maxHeight:l.value,adjustPosition:c,parentMenuItemContext:d.context},{default:t.slots.default}),...xl(t.slots,"default")}:t.slots)}});function Zl(e,t,n,o){const s=F(!0),r=at(Qo,{options:e,show:s,container:t,isFullScreenContainer:!n,onCloseAnimFinished:()=>{Pn(null,t)},onClose:l=>{var c;(c=e.onClose)==null||c.call(e,l),s.value=!1}},o);return Pn(r,t),r.component}function co(e,t){const n=Zo(e);return Zl(e,n.container,n.isNew,t).exposed}const Gt={install(e){e.config.globalProperties.$contextmenu=co,e.component("ContextMenu",Yl),e.component("ContextMenuItem",_n),e.component("ContextMenuGroup",Xl),e.component("ContextMenuSperator",$t),e.component("ContextMenuSeparator",$t),e.component("ContextSubMenu",En)},showContextMenu(e,t){return co(e,t)},isAnyContextMenuOpen(){return vl()},closeContextMenu:Xo,transformMenuPosition:wl},Ql={key:0,class:"empty-container"},ea={key:0},ta={key:1},na={key:2},oa={key:3},sa={key:4},ra={key:5},la=Q({__name:"EmptyFolder",props:{path:{},documents:{}},setup(e){const t=ys,n=se(),o=e;return(s,r)=>!o.path||e.documents.length===0?(E(),N("div",Ql,[(E(),ee(wn(g(t)),{class:he(["cog",{stopped:g(n).dialog==="accessdenied"||g(n).authInProgress}])},null,8,["class"])),g(n).dialog==="accessdenied"?(E(),N("p",ea,"Access Denied")):g(n).connected?g(n).document.length===0?(E(),N("p",na,"Waiting for File List")):g(n).query?(E(),N("p",oa,"No matches!")):g(Lo)(o.path)?(E(),N("p",ra,"Empty folder")):(E(),N("p",sa,"Folder not found")):(E(),N("p",ta,"No Connection"))])):G("",!0)}}),aa=Se(la,[["__scopeId","data-v-0494c508"]]),ia=["checked"],ca=Q({__name:"SelectBox",props:{doc:{}},setup(e){const t=se();return(n,o)=>(E(),N("input",{type:"checkbox",tabindex:"-1",checked:g(t).selected.has(e.doc.key),onClick:o[0]||(o[0]=me(()=>{},["stop"])),onChange:o[1]||(o[1]=s=>{s.target.checked?g(t).selected.add(e.doc.key):g(t).selected.delete(e.doc.key)})},null,40,ia))}}),vn=Q({__name:"FileRenameInput",props:{doc:{},rename:{type:Function},exit:{type:Function}},setup(e){const t=F(null),n=F("");xe(()=>{n.value=o.doc.name;const r=n.value.lastIndexOf(".");be(()=>{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)=>_t((E(),N("input",{ref_key:"input",ref:t,id:"FileRenameInput",type:"text",autocorrect:"off","onUpdate:modelValue":l[0]||(l[0]=c=>n.value=c),onBlur:l[1]||(l[1]=(...c)=>e.exit&&e.exit(...c)),onKeyup:[l[2]||(l[2]=Ke((...c)=>e.exit&&e.exit(...c),["esc"])),Ke(s,["enter"])]},null,544)),[[an,n.value]])}}),ua=["src"],da=["src"],fa={key:2,class:"folder icon"},pa={key:3,class:"video-container"},ma=["src","poster"],ha={class:"play-overlay"},ga={key:4,class:"audio icon"},va=["src"],ya={key:5,class:"archive icon"},wa=Q({__name:"MediaPreview",props:{doc:{},quality:{}},setup(e,{expose:t}){const n=F(null),o=F(null),s=q(()=>n.value||o.value),r=q(()=>`${l.doc.previewurl}?${l.quality}&t=${l.doc.mtime}`),l=e,c=()=>{s.value&&(s.value.controls=!0,s.value.setAttribute("data-playing",""))},a=()=>{s.value&&(s.value.controls=!1,s.value.removeAttribute("data-playing"))};let i=null;const d=()=>{if(!s.value)return;s.value.load();const _=Array.from(document.querySelectorAll("video, audio"));if(_.length===0)return;let v=null;for(const w in _)if(_[w]===(i||s.value)){v=_[+w+1]??_[0]??null;break}if(v)if(v.tagName==="VIDEO"&&document.fullscreenElement===s.value){const w=s.value,I=v;if(w===I){I.play();return}i||w.addEventListener("fullscreenchange",M=>{i&&(i.currentTime=w.currentTime,i.click(),w.paused||i.play(),i=null,w.src=l.doc.url,w.poster=r.value,a())},{once:!0}),i=I,w.src=I.src,w.poster="",w.play()}else document.exitFullscreen(),v.click()};t({play(){if(!s.value)return!1;if(s.value.paused){s.value.play();for(const _ of Array.from(document.querySelectorAll("video, audio")))_!==s.value&&_.pause()}else s.value.pause();return!0},media:s});const p=()=>["mkv","mp4","webm","mov","avi"].includes(l.doc.ext),h=()=>["mp3","flac","ogg","aac"].includes(l.doc.ext),k=()=>["zip","tar","gz","bz2","xz","7z","rar"].includes(l.doc.ext),$=()=>["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(_,v)=>$()?(E(),N("img",{key:0,src:`${e.doc.previewurl}?${e.quality}&t=${e.doc.mtime}`,alt:""},null,8,ua)):e.doc.img?(E(),N("img",{key:1,src:e.doc.url,alt:""},null,8,da)):e.doc.dir?(E(),N("span",fa)):p()?(E(),N("div",pa,[S("video",{ref_key:"vid",ref:o,src:e.doc.url,poster:r.value,preload:"none",onPlay:c,onPause:a,onEnded:d,onSeeking:v[0]||(v[0]=w=>s.value.play())},null,40,ma),S("div",ha,[V(g(ws))])])):h()?(E(),N("div",ga,[S("audio",{ref_key:"aud",ref:n,src:e.doc.url,class:"icon",preload:"none",onPlay:c,onPause:a,onEnded:d,onSeeking:v[1]||(v[1]=w=>s.value.play())},null,40,va)])):k()?(E(),N("span",ya)):(E(),N("span",{key:6,class:he(["file icon",`ext-${e.doc.ext}`])},null,2))}}),ka=Se(wa,[["__scopeId","data-v-47490c5c"]]),ba=["id","href"],Ca={class:"tooltip-name"},xa={class:"tooltip-details"},Sa=Q({__name:"GalleryFigure",props:{doc:{},editing:{}},setup(e){const t=se(),n=e,o=F(null),s=F(null),r=q(()=>n.doc.key),l=c=>{o.value.play()&&c.preventDefault(),t.cursor=n.doc.key};return(c,a)=>{const i=vn,d=ca;return E(),N("a",{id:`file-${e.doc.key}`,href:e.doc.url,tabindex:"-1",class:he({file:!e.doc.dir,folder:e.doc.dir,cursor:g(t).cursor===e.doc.key,ghost:e.doc.ghost}),onContextmenu:a[3]||(a[3]=me(()=>{},["stop"])),onFocus:a[4]||(a[4]=me(p=>g(t).cursor=e.doc.key,["stop"])),onClick:l,onMouseenter:a[5]||(a[5]=(...p)=>s.value?.startHover&&s.value?.startHover(...p)),onMousemove:a[6]||(a[6]=(...p)=>s.value?.updatePosition&&s.value?.updatePosition(...p)),onMouseleave:a[7]||(a[7]=(...p)=>s.value?.endHover&&s.value?.endHover(...p))},[S("figure",null,[fe(c.$slots,"default",{},void 0,!0),V(ka,{ref_key:"m",ref:o,doc:e.doc,tabindex:"-1",quality:"sz=512",class:"figcontent"},null,8,["doc"]),a[9]||(a[9]=S("div",{class:"titlespacer"},null,-1)),S("figcaption",{onClick:a[1]||(a[1]=me(()=>{},["prevent"])),onContextmenu:a[2]||(a[2]=me(p=>c.$emit("menu",p),["prevent"]))},[e.editing?(E(),ee(i,{key:0,doc:e.doc,rename:e.editing.rename,exit:e.editing.exit},null,8,["doc","rename","exit"])):(E(),N(ge,{key:1},[V(d,{doc:e.doc,onClick:a[0]||(a[0]=p=>g(t).cursor=e.doc.key)},null,8,["doc"]),S("span",null,te(e.doc.name),1),a[8]||(a[8]=S("div",{class:"namespacer"},null,-1))],64))],32)]),V(Ye,{ref_key:"tooltip",ref:s,text:r.value},{default:we(()=>[S("div",Ca,te(e.doc.name),1),S("div",xa,te(e.doc.modified)+" — "+te(e.doc.sizedisp),1)]),_:1},8,["text"])],42,ba)}}}),$a=Se(Sa,[["__scopeId","data-v-79b3799a"]]),_a=Q({__name:"Gallery",props:{path:{},documents:{}},setup(e,{expose:t}){const n=e,o=se(),s=Vt(),r=kn(null),l=()=>{r.value=null},c=(u,x)=>{const P=u.name,O=Ae(Je,{message(L){const D=JSON.parse(L.data);"error"in D?(console.error("Rename failed",D.error.message,D.error),u.name=P):console.log("Rename succeeded",D)}});O.onopen=()=>{O.send(JSON.stringify({op:"rename",path:`${u.loc}/${P}`,to:x}))},u.name=x},a=F(),i=F(1),d=()=>{a.value&&(i.value=getComputedStyle(a.value).gridTemplateColumns.split(" ").length)},p=q(()=>i.value);t({newFolder(){const u=Math.floor(Date.now()/1e3);r.value=new it({loc:M.value,key:"new",name:"New Folder",dir:!0,mtime:u,size:0}),o.cursor=r.value.key},toggleSelectAll(){console.log("Select"),I.value=!I.value},toggleSortColumn(u){const x=["","name","modified","size",""][u];x&&o.toggleSort(x)},isCursor(){return o.cursor&&r.value===null},cursorRename(){r.value=n.documents.find(u=>u.key===o.cursor)??null},cursorSelect(){const u=o.cursor;u&&(o.selected.has(u)?o.selected.delete(u):o.selected.add(u),this.cursorMove(1,null))},up(u){this.cursorMove(-p.value,u)},down(u){this.cursorMove(p.value,u)},left(u){this.cursorMove(-1,u)},right(u){this.cursorMove(1,u)},cursorMove(u,x){const P=!!x?.shiftKey,O=n.documents;if(O.length===0){o.cursor="";return}const L=O.length,D=(oe,ae)=>(oe%ae+ae)%ae,j=(oe,ae)=>D(oe+ae,L+1),K=o.cursor?O.findIndex(oe=>oe.key===o.cursor):L;if(x&&K===0&&x.key==="ArrowLeft"||x&&K===L-1&&x.key==="ArrowRight")return;let z;K===L?z=u>0?0:L-1:(z=j(K,u),(Math.abs(u)>=L||Math.sign(u)!==Math.sign(z-K))&&(z=L)),o.cursor=O[z]?.key??"";const re=o.cursor?document.getElementById(`file-${o.cursor}`):"";if(P){let[oe,ae]=u>0?[K,z]:[z,K];for(let Z=oe;Z!==ae;Z=j(Z,1)){if(Z===L)continue;const ke=O[Z].key;o.selected.has(ke)?o.selected.delete(ke):o.selected.add(ke)}}$=re,k||(k=setTimeout(()=>{$&&$.scrollIntoView({block:"center",behavior:"smooth"}),k=null},300)),z===L&&h()}});const h=()=>{const u=document.querySelector(".breadcrumb");u&&u.focus()};let k=null,$=null;Pe(()=>{if(o.cursor&&o.cursor!==r.value?.key&&(r.value=null),r.value&&(o.cursor=r.value.key),o.cursor){const u=document.querySelector(`#file-${o.cursor}`);u&&(u.focus(),u.scrollIntoView({block:"center",behavior:"smooth"}))}}),Pe(()=>{!n.documents.length&&o.cursor&&(o.cursor="",h())});let _=null;xe(()=>{const u=document.querySelector(".cursor");u&&(u.scrollIntoView({block:"center",behavior:"instant"}),u.focus()),d(),a.value&&(_=new ResizeObserver(d),_.observe(a.value))}),lt(()=>{_?.disconnect()});const v=(u,x)=>{const P=Ae(Je,{open(){P.send(JSON.stringify({op:"mkdir",path:`${u.loc}/${x}`}))},message(O){const L=JSON.parse(O.data);"error"in L?(console.error("Mkdir failed",L.error.message,L.error),r.value=null):(console.log("mkdir",L),s.push(u.urlrouter))}});u.name=x,u.key=crypto.randomUUID(),u.ghost=!0,o.document.push(u),r.value=null},w=u=>{const x=n.documents,P=x[u].loc;return u===0?P!==M.value:P!==x[u-1].loc},I=q({get:()=>n.documents.length>0&&n.documents.every(u=>o.selected.has(u.key)),set:u=>{console.log("Setting allSelected",u);for(const x of n.documents)u?o.selected.add(x.key):o.selected.delete(x.key)}}),M=q(()=>n.path.join("/")),A=u=>{const x=u.loc?`${u.loc}/${u.name}`:u.name;if(u.dir){const P=document.createElement("a");P.href=`/zip/${u.key}/${u.name}.zip`,P.download="",P.click(),o.showToast(`Downloading ${u.name}.zip`)}else{const P=document.createElement("a");P.href=`/files/${x}`,P.download="",P.click(),o.showToast(`Downloading ${u.name}`)}},y=async u=>{const x=new URL(u.url,window.location.origin).href;try{await navigator.clipboard.writeText(x),o.showToast("📋 Link copied!")}catch{o.showToast("Failed to copy link")}},C=async u=>{const x=u.loc?`${u.loc}/${u.name}`:u.name;try{o.showToast("Copying image...");const O=await(await fetch(`/files/${x}`)).blob();if(O.type!=="image/png"){const L=new Image;L.src=URL.createObjectURL(O),await new Promise(K=>L.onload=K);const D=document.createElement("canvas");D.width=L.naturalWidth,D.height=L.naturalHeight,D.getContext("2d").drawImage(L,0,0);const j=await new Promise(K=>D.toBlob(z=>K(z),"image/png"));URL.revokeObjectURL(L.src),await navigator.clipboard.write([new ClipboardItem({"image/png":j})])}else await navigator.clipboard.write([new ClipboardItem({"image/png":O})]);o.showToast("📋 Image copied!")}catch(P){console.error("Copy image failed",P),o.showToast("Failed to copy image")}},f=u=>{const x=u.loc?`${u.loc}/${u.name}`:u.name;u.ghost=!0;const P=Ae(Je,{message(O){const L=JSON.parse(O.data);"error"in L?(console.error("Delete failed",L.error),u.ghost=!1,o.showToast(L.error.message||"Delete failed")):L.status==="ack"&&(o.showToast(`🗑️ Deleted ${u.name}`),P.close())}});P.onopen=()=>{P.send(JSON.stringify({op:"rm",sel:[x]}))}},b=(u,x)=>{o.cursor=x.key;const P=[{label:"📥 Download",onClick:()=>A(x)},{label:"🔗 Copy Link",onClick:()=>y(x)}];x.img&&P.push({label:"📋 Copy Image",onClick:()=>C(x)}),P.push({label:"✏️ Rename",onClick:()=>{r.value=x}},{label:"🗑️ Delete",onClick:()=>f(x)}),Gt.showContextMenu({x:u.x,y:u.y,items:P})};return(u,x)=>{const P=$a,O=Sn;return n.documents.length||r.value?(E(),N("div",{key:0,class:"gallery",ref_key:"gallery",ref:a},[r.value?.key==="new"?(E(),ee(P,{doc:r.value,key:r.value.key,editing:{rename:v,exit:l}},null,8,["doc","editing"])):G("",!0),(E(!0),N(ge,null,dt(e.documents,(L,D)=>(E(),N(ge,{key:L.key},[w(D)?(E(),ee(O,{key:0,path:L.loc?L.loc.split("/"):[],class:"folder-indicator"},null,8,["path"])):G("",!0),V(P,{doc:L,editing:r.value===L?{rename:c,exit:l}:null,onMenu:j=>b(j,L),class:he({"folder-start":w(D)})},null,8,["doc","editing","onMenu","class"])],64))),128))],512)):G("",!0)}}}),Ea=Se(_a,[["__scopeId","data-v-bf535403"]]),Ra=Q({__name:"FileSize",props:{doc:{}},setup(e){const t=q(()=>{const o=n.doc.sizedisp.split(" ").slice(-1)[0];return+o?"bytes":o}),n=e;return(o,s)=>(E(),N("td",{class:he(["size right",t.value])},te(e.doc.sizedisp),3))}}),Ia=Se(Ra,[["__scopeId","data-v-444c7802"]]),Ma={class:"modified right"},Aa=["datetime"],Pa=Q({__name:"FileModified",props:{doc:{},now:{}},setup(e){const t=e,n=F(null),o=q(()=>(t.now,Ro(t.doc.mtime))),s=q(()=>new Date(1e3*t.doc.mtime).toISOString().replace(".000Z","Z")),r=q(()=>s.value.replace("T"," ").replace("Z"," UTC"));return(l,c)=>(E(),N("td",Ma,[S("time",{datetime:s.value,onMouseenter:c[0]||(c[0]=(...a)=>n.value?.startHover&&n.value?.startHover(...a)),onMousemove:c[1]||(c[1]=(...a)=>n.value?.updatePosition&&n.value?.updatePosition(...a)),onMouseleave:c[2]||(c[2]=(...a)=>n.value?.endHover&&n.value?.endHover(...a))},te(o.value),41,Aa),V(Ye,{ref_key:"tooltip",ref:n,text:r.value},{default:we(()=>[Ce(te(r.value),1)]),_:1},8,["text"])]))}}),Oa={key:0},Ta={class:"selection"},Na=["indeterminate"],La={key:0,class:"folder"},Da={class:"name"},Ba={key:0,class:"folder-change"},Ha={colspan:"5"},Fa=["id","onClick","onContextmenu"],Wa=["onClick"],za=["checked","onChange"],Ua={class:"name"},ja=["href","onFocus"],Va=["onClick"],qa={class:"menu"},Ga=["onClick"],Ka={key:1,class:"summary"},Ja={colspan:"3",class:"right"},Ya={class:"size right"},Xa=Q({__name:"FileExplorer",props:{path:{},documents:{}},setup(e,{expose:t}){const n=e,o=se(),s=Vt(),r=kn(null),l=(f,b)=>{const u=f.name,x=Ae(Je,{message(P){const O=JSON.parse(P.data);"error"in O?(console.error("Rename failed",O.error.message,O.error),f.name=u):console.log("Rename succeeded",O)}});x.onopen=()=>{x.send(JSON.stringify({op:"rename",path:`${f.loc}/${u}`,to:b}))},f.name=b};t({newFolder(){console.log("New folder");const f=Math.floor(Date.now()/1e3);r.value=new it({loc:w.value,key:"new",name:"New Folder",dir:!0,mtime:f,size:0}),o.cursor=r.value.key},toggleSelectAll(){console.log("Select"),v.value=!v.value},isCursor(){return o.cursor&&r.value===null},cursorRename(){r.value=n.documents.find(f=>f.key===o.cursor)??null},cursorSelect(){const f=o.cursor;f&&(o.selected.has(f)?o.selected.delete(f):o.selected.add(f),this.cursorMove(1,null))},up(f){this.cursorMove(-1,f)},down(f){this.cursorMove(1,f)},left(f){s.back()},right(f){const b=document.querySelector(`#file-${o.cursor} a`);b&&b.click()},cursorMove(f,b){const u=!!b?.shiftKey,x=n.documents;if(x.length===0){o.cursor="";return}const P=x.length,O=(z,re)=>(z%re+re)%re,L=(z,re)=>O(z+re,P+1),D=o.cursor?x.findIndex(z=>z.key===o.cursor):x.length,j=L(D,f);o.cursor=x[j]?.key??"";const K=o.cursor?document.getElementById(`file-${o.cursor}`):"";if(u){let[z,re]=f>0?[D,j]:[j,D];for(let oe=z;oe!==re;oe=L(oe,1)){if(oe===P)continue;const ae=x[oe].key;o.selected.has(ae)?o.selected.delete(ae):o.selected.add(ae)}}i=K,a||(a=setTimeout(()=>{i&&i.scrollIntoView({block:"center",behavior:"smooth"}),a=null},300)),j===P&&c()}});const c=()=>{const f=document.querySelector(".breadcrumb");f&&f.focus()};let a=null,i=null;Pe(()=>{if(o.cursor&&o.cursor!==r.value?.key&&(r.value=null),r.value&&(o.cursor=r.value?.key),o.cursor){const f=document.querySelector(`#file-${o.cursor} .name a`);f&&f.focus()}}),Pe(()=>{!n.documents.length&&o.cursor&&(o.cursor="",c())});let d=F(0),p=null;const h=()=>{d.value=Math.floor(Date.now()/1e3)};xe(()=>{h(),p=setInterval(h,1e3);const f=document.querySelector(".cursor");f&&(f.scrollIntoView({block:"center",behavior:"instant"}),f.focus())}),lt(()=>{clearInterval(p)});const k=(f,b)=>{const u=Ae(Je,{open(){u.send(JSON.stringify({op:"mkdir",path:`${f.loc}/${b}`}))},message(x){const P=JSON.parse(x.data);"error"in P?(console.error("Mkdir failed",P.error.message,P.error),r.value=null):(console.log("mkdir",P),s.push(f.urlrouter))}});f.name=b,f.key=crypto.randomUUID(),f.ghost=!0,o.document.push(f),r.value=null},$=f=>{const b=n.documents,u=b[f].loc;return f===0?u!==w.value:u!==b[f-1].loc},_=q({get:()=>n.documents.length>0&&n.documents.some(f=>o.selected.has(f.key))&&!v.value,set:f=>{}}),v=q({get:()=>n.documents.length>0&&n.documents.every(f=>o.selected.has(f.key)),set:f=>{console.log("Setting allSelected",f);for(const b of n.documents)f?o.selected.add(b.key):o.selected.delete(b.key)}}),w=q(()=>n.path.join("/")),I=f=>{const b=f.loc?`${f.loc}/${f.name}`:f.name;if(f.dir){const u=document.createElement("a");u.href=`/zip/${f.key}/${f.name}.zip`,u.download="",u.click(),o.showToast(`Downloading ${f.name}.zip`)}else{const u=document.createElement("a");u.href=`/files/${b}`,u.download="",u.click(),o.showToast(`Downloading ${f.name}`)}},M=async f=>{const b=new URL(f.url,window.location.origin).href;try{await navigator.clipboard.writeText(b),o.showToast("📋 Link copied!")}catch{o.showToast("Failed to copy link")}},A=async f=>{const b=f.loc?`${f.loc}/${f.name}`:f.name;try{o.showToast("Copying image...");const x=await(await fetch(`/files/${b}`)).blob();if(x.type!=="image/png"){const P=new Image;P.src=URL.createObjectURL(x),await new Promise(D=>P.onload=D);const O=document.createElement("canvas");O.width=P.naturalWidth,O.height=P.naturalHeight,O.getContext("2d").drawImage(P,0,0);const L=await new Promise(D=>O.toBlob(j=>D(j),"image/png"));URL.revokeObjectURL(P.src),await navigator.clipboard.write([new ClipboardItem({"image/png":L})])}else await navigator.clipboard.write([new ClipboardItem({"image/png":x})]);o.showToast("📋 Image copied!")}catch(u){console.error("Copy image failed",u),o.showToast("Failed to copy image")}},y=f=>{const b=f.loc?`${f.loc}/${f.name}`:f.name;f.ghost=!0;const u=Ae(Je,{message(x){const P=JSON.parse(x.data);"error"in P?(console.error("Delete failed",P.error),f.ghost=!1,o.showToast(P.error.message||"Delete failed")):P.status==="ack"&&(o.showToast(`🗑️ Deleted ${f.name}`),u.close())}});u.onopen=()=>{u.send(JSON.stringify({op:"rm",sel:[b]}))}},C=(f,b)=>{o.cursor=b.key;const u=[{label:"📥 Download",onClick:()=>I(b)},{label:"🔗 Copy Link",onClick:()=>M(b)}];b.img&&u.push({label:"📋 Copy Image",onClick:()=>A(b)}),u.push({label:"✏️ Rename",onClick:()=>{r.value=b}},{label:"🗑️ Delete",onClick:()=>y(b)}),Gt.showContextMenu({x:f.x,y:f.y,items:u})};return(f,b)=>{const u=Pa,x=Ia,P=Sn;return n.documents.length||r.value?(E(),N("table",Oa,[S("thead",null,[S("tr",null,[S("th",Ta,[_t(S("input",{type:"checkbox",tabindex:"-1","onUpdate:modelValue":b[0]||(b[0]=O=>v.value=O),indeterminate:_.value},null,8,Na),[[Co,v.value]])]),S("th",{class:he(["sortcolumn",{sortactive:g(o).sortOrder==="name"}]),onClick:b[1]||(b[1]=O=>g(o).toggleSort("name"))},"Name",2),S("th",{class:he(["sortcolumn modified right",{sortactive:g(o).sortOrder==="modified"}]),onClick:b[2]||(b[2]=O=>g(o).toggleSort("modified"))},"Modified",2),S("th",{class:he(["sortcolumn size right",{sortactive:g(o).sortOrder==="size"}]),onClick:b[3]||(b[3]=O=>g(o).toggleSort("size"))},"Size",2),b[5]||(b[5]=S("th",{class:"menu"},null,-1))])]),S("tbody",null,[r.value?.key==="new"?(E(),N("tr",La,[b[6]||(b[6]=S("td",{class:"selection"},null,-1)),S("td",Da,[V(vn,{doc:r.value,rename:k,exit:()=>{r.value=null}},null,8,["doc","exit"])]),V(u,{doc:r.value,now:g(d)},null,8,["doc","now"]),V(x,{doc:r.value},null,8,["doc"]),b[7]||(b[7]=S("td",{class:"menu"},null,-1))])):G("",!0),(E(!0),N(ge,null,dt(e.documents,(O,L)=>(E(),N(ge,{key:O.key},[$(L)?(E(),N("tr",Ba,[S("th",Ha,[V(P,{path:O.loc?O.loc.split("/"):[]},null,8,["path"])])])):G("",!0),S("tr",{id:`file-${O.key}`,class:he({file:!O.dir,folder:O.dir,cursor:g(o).cursor===O.key,ghost:O.ghost}),onClick:D=>g(o).cursor=g(o).cursor===O.key?"":O.key,onContextmenu:me(D=>C(D,O),["prevent"])},[S("td",{class:"selection",onClick:me(D=>g(o).cursor=g(o).cursor===O.key?O.key:"",["stop"])},[S("input",{type:"checkbox",tabindex:"-1",checked:g(o).selected.has(O.key),onChange:D=>D.target.checked?g(o).selected.add(O.key):g(o).selected.delete(O.key)},null,40,za)],8,Wa),S("td",Ua,[r.value===O?(E(),ee(vn,{key:0,doc:O,rename:l,exit:()=>{r.value=null}},null,8,["doc","exit"])):(E(),N(ge,{key:1},[S("a",{href:O.url,tabindex:"-1",onContextmenu:b[4]||(b[4]=me(()=>{},["stop"])),onFocus:me(D=>g(o).cursor=O.key,["stop"])},te(O.name),41,ja),g(o).cursor==O.key?(E(),N("button",{key:0,tabindex:"-1",class:"rename-button",onClick:()=>r.value=O},"🖊️",8,Va)):G("",!0)],64))]),V(u,{doc:O,now:g(d)},null,8,["doc","now"]),V(x,{doc:O},null,8,["doc"]),S("td",qa,[S("button",{tabindex:"-1",onClick:me(D=>C(D,O),["stop"])},"⋮",8,Ga)])],42,Fa)],64))),128)),n.documents.length>1?(E(),N("tr",Ka,[S("td",Ja,te(n.documents.length)+" items",1),S("td",Ya,te(g(wt)(n.documents.reduce((O,L)=>O+L.size,0))),1),b[8]||(b[8]=S("td",{class:"menu"},null,-1))])):G("",!0)])])):G("",!0)}}}),Za=Se(Xa,[["__scopeId","data-v-674ac4d9"]]),Qa={key:2,class:"search-loading"},ei=Q({__name:"ExplorerView",props:{path:{},query:{}},setup(e){const t=se(),n=F(),o=e,s=q(()=>o.path.join("/"));ze(()=>[o.query,o.path.join("/")],([l,c])=>{t.query!==l&&t.search(l,c)},{immediate:!0});const r=q(()=>{const l=o.path.join("/");if(!o.query)return No(t.document.filter(d=>d.loc===l),t.prefs.sortListing);const a=t.searchResults,i=t.prefs.sortFiltered;return i?Qs(a,i):a});return Pe(()=>{t.fileExplorer=n.value}),ze([()=>o.path.join("/"),()=>t.document.length],([l,c],[a,i])=>{l===a&&i!==void 0&&i>0||(t.prefs.gallery=r.value.some(d=>d.previewable))},{immediate:!0}),(l,c)=>{const a=Ea,i=aa;return E(),N(ge,null,[g(t).prefs.gallery?(E(),ee(a,{ref_key:"fileExplorer",ref:n,key:`gallery-${s.value}`,path:o.path,documents:r.value},null,8,["path","documents"])):(E(),ee(Za,{ref_key:"fileExplorer",ref:n,key:`explorer-${s.value}`,path:o.path,documents:r.value},null,8,["path","documents"])),g(t).searchLoading?(E(),N("div",Qa,"Searching...")):G("",!0),V(i,{documents:r.value,path:o.path},null,8,["documents","path"])],64)}}}),ti=Se(ei,[["__scopeId","data-v-20851203"]]),Bt=fl({history:Vr("/"),routes:[{path:"/:pathMatch(.*)*",name:"explorer",component:ti}]}),ni={class:"headermain buttons"},oi={class:"search-group"},si=["value"],ri={viewBox:"0 0 32 32",class:"pie-mini"},li=["stroke","stroke-dasharray","stroke-dashoffset"],ai=["stroke-dasharray"],ii={class:"disk-tooltip"},ci={viewBox:"0 0 160 80",width:"160",height:"80",class:"pie-tooltip"},ui=["stroke","stroke-dasharray","stroke-dashoffset"],di=["stroke-dasharray"],fi={x:"92",y:"19",class:"pie-label"},pi={x:"92",y:"39",class:"pie-label"},mi=["fill"],hi={x:"92",y:"59",class:"pie-label"},je=50.27,Ve=100.53,gi=Q({__name:"HeaderMain",props:{path:{},query:{}},setup(e,{expose:t}){const n=se(),o=gl(),s=F(),r=F(null),l=q(()=>{const A=n.space;return A.disk?`${A.storage/A.disk*je} ${je}`:`0 ${je}`}),c=q(()=>{const A=n.space;return A.disk?`${A.free/A.disk*je} ${je}`:`0 ${je}`}),a=q(()=>{const A=n.space;return A.disk?-(A.storage/A.disk)*je:0}),i=q(()=>{const A=n.space;if(!A.disk)return"#6c6";const y=A.free/A.disk;return y>.25?"#5b5":y>.1?"#db3":"#d44"}),d=q(()=>{const A=n.space;return A.disk?`${A.storage/A.disk*Ve} ${Ve}`:`0 ${Ve}`}),p=q(()=>{const A=n.space;return A.disk?`${A.free/A.disk*Ve} ${Ve}`:`0 ${Ve}`}),h=q(()=>{const A=n.space;return A.disk?-(A.storage/A.disk)*Ve:0}),k=e,$=A=>{const y=s.value;y&&(y.value="",w(A)),document.querySelector(".breadcrumb").focus()},_=()=>{s.value?.focus()};let v=null;const w=A=>{const y=A.target.value,C=k.path.join("/");n.search(y,C),v!==null&&cancelAnimationFrame(v),v=requestAnimationFrame(()=>{v=null;let f=C;f=f?`/${f}`:"";const u=(y?`${f}//${y}`:f||"/").replaceAll("?","%3F").replaceAll("#","%23");Bt.replace(u)})},I=()=>{s.value?.focus()},M=A=>{const y=[];o.isExternalAuth&&n.user.isLoggedIn&&y.push({label:"👤 "+(n.user.username||"User Account"),onClick:()=>{window.location.href="/auth/"}}),!o.isExternalAuth&&n.user.isLoggedIn&&y.push({label:"🔑 Change Password",onClick:()=>{n.dialog="settings"}}),n.user.privileged&&y.push({label:"⚙️ Admin Settings",onClick:()=>{n.dialog="usermgmt"}}),n.user.isLoggedIn?y.push({label:"🚪 Logout",onClick:()=>n.logout()}):n.server.public&&y.push({label:"🔐 Login",onClick:async()=>{try{await Cn("/auth/restricted#theme=light"),fn()}catch{console.log("Login cancelled")}}}),Gt.showContextMenu({x:A.target.getBoundingClientRect().right,y:A.target.getBoundingClientRect().bottom,items:y})};return t({toggleSearchInput:I,clearSearch:$}),(A,y)=>{const C=hl,f=Wt;return E(),N("nav",ni,[V(C,{path:k.path},null,8,["path"]),V(f,{name:"create-folder",tooltip:"New folder",onClick:y[0]||(y[0]=()=>{g(n).fileExplorer.newFolder()})}),y[11]||(y[11]=S("div",{class:"smallgap"},null,-1)),V(f,{name:"eye",onClick:y[1]||(y[1]=b=>g(n).prefs.gallery=!g(n).prefs.gallery),tooltip:"Details/Gallery"}),S("div",oi,[V(f,{name:"find",onClick:_,tooltip:"Search"}),S("input",{ref_key:"search",ref:s,type:"search",value:e.query,onInput:w,onKeydown:Ke($,["escape"])},null,40,si),e.query?G("",!0):(E(),N("span",{key:0,class:"search-hint",onClick:_},"/"))]),y[12]||(y[12]=S("div",{class:"spacer smallgap"},null,-1)),g(n).space.disk?(E(),N("div",{key:0,class:"disk-space",onMouseenter:y[2]||(y[2]=(...b)=>r.value?.startHover&&r.value?.startHover(...b)),onMousemove:y[3]||(y[3]=(...b)=>r.value?.updatePosition&&r.value?.updatePosition(...b)),onMouseleave:y[4]||(y[4]=(...b)=>r.value?.endHover&&r.value?.endHover(...b))},[(E(),N("svg",ri,[y[5]||(y[5]=S("circle",{r:"16",cx:"16",cy:"16",fill:"#c8e"},null,-1)),S("circle",{r:"8",cx:"16",cy:"16",fill:"transparent",stroke:i.value,"stroke-width":"16","stroke-dasharray":c.value,"stroke-dashoffset":a.value,transform:"rotate(-90 16 16)"},null,8,li),S("circle",{r:"8",cx:"16",cy:"16",fill:"transparent",stroke:"#82d","stroke-width":"16","stroke-dasharray":l.value,transform:"rotate(-90 16 16)"},null,8,ai),y[6]||(y[6]=S("circle",{r:"2",cx:"16",cy:"16",fill:"rgba(255,255,255,0.2)"},null,-1))])),V(Ye,{ref_key:"diskTooltip",ref:r,text:"Disk space"},{default:we(()=>[S("div",ii,[(E(),N("svg",ci,[y[7]||(y[7]=S("circle",{r:"32",cx:"40",cy:"40",fill:"#c8e"},null,-1)),S("circle",{r:"16",cx:"40",cy:"40",fill:"transparent",stroke:i.value,"stroke-width":"32","stroke-dasharray":p.value,"stroke-dashoffset":h.value,transform:"rotate(-90 40 40)"},null,8,ui),S("circle",{r:"16",cx:"40",cy:"40",fill:"transparent",stroke:"#82d","stroke-width":"32","stroke-dasharray":d.value,transform:"rotate(-90 40 40)"},null,8,di),y[8]||(y[8]=S("circle",{r:"4",cx:"40",cy:"40",fill:"rgba(255,255,255,0.25)"},null,-1)),y[9]||(y[9]=S("rect",{x:"78",y:"10",width:"10",height:"10",fill:"#82d",rx:"2"},null,-1)),S("text",fi,te(g(wt)(g(n).space.storage))+" stored",1),y[10]||(y[10]=S("rect",{x:"78",y:"30",width:"10",height:"10",fill:"#c8e",rx:"2"},null,-1)),S("text",pi,te(g(wt)(g(n).space.usage-g(n).space.storage))+" other",1),S("rect",{x:"78",y:"50",width:"10",height:"10",fill:i.value,rx:"2"},null,8,mi),S("text",hi,te(g(wt)(g(n).space.free))+" free",1)]))])]),_:1},512)],32)):G("",!0),V(f,{name:"cog",onClick:M})])}}}),vi=Se(gi,[["__scopeId","data-v-7e0e5f3d"]]),yi=["id"],wi={key:0},ki={class:"modal-content"},es=Q({__name:"ModalDialog",props:{title:{},name:{}},setup(e,{expose:t}){const n=F(null),o=F(null),s=se(),r=()=>{s.dialog="",Io()},l=e;return t({show:()=>{s.dialog=l.name,bn(),be(()=>{n.value?.focus();const a=o.value?.querySelector("input");a&&a.focus()})},close:r}),Pe(()=>{if(n.value){n.value.focus();const a=o.value?.querySelector("input");a&&a.focus()}}),(a,i)=>g(s).dialog===e.name?(E(),N("div",{key:0,class:"modal-overlay",onClick:me(r,["self"]),onKeydown:Ke(r,["escape"]),tabindex:"-1",ref_key:"overlay",ref:n},[S("div",{class:"modal-dialog",id:l.name,ref_key:"dialog",ref:o},[l.title?(E(),N("h1",wi,te(l.title),1)):G("",!0),S("div",ki,[fe(a.$slots,"default",{},()=>[i[0]||(i[0]=Ce(" Dialog with no content ",-1)),S("button",{onClick:r},"OK")])])],8,yi)],544)):G("",!0)}}),bi="/auth/password-change";async function Ci(e,t,n){return await ft.post(bi,{username:e,passwordChange:t,password:n})}const Kt="/auth/users";async function xi(){return await ft.get(Kt)}async function uo(e,t,n){return await ft.post(Kt,{username:e,password:t,privileged:n})}async function fo(e,t){return await ft.put(`${Kt}/${e}`,t)}async function po(e){return await ft.delete(`${Kt}/${e}`)}async function Si(e){return await ft.put("/api/config/public",{public:e})}const $i={class:"form-grid"},_i={class:"dialog-buttons"},Ei=Q({__name:"SettingsModal",setup(e){const t=F(!1),n=se(),o=F(),s=F(),r=rt({passwordChange:"",password:""}),l=()=>{r.passwordChange="",r.password="",n.dialog=""},c=async a=>{a.preventDefault();try{if(r.passwordChange){if(!r.password){n.showToast("⚠️ Current password is required"),s.value.focus();return}await Ci(n.user.username,r.passwordChange,r.password)}l()}catch(i){const d=i;n.showToast(d.message||"🛑 Unknown error")}finally{t.value=!1}};return(a,i)=>{const d=es;return E(),ee(d,{name:"settings",title:"Settings"},{default:we(()=>[S("form",null,[g(n).user.isLoggedIn?(E(),N(ge,{key:0},[i[5]||(i[5]=S("h3",null,"Update your authentication",-1)),S("div",$i,[i[2]||(i[2]=S("label",{for:"passwordChange"},"New password:",-1)),_t(S("input",{ref_key:"passwordChange",ref:o,id:"passwordChange",type:"password",autocomplete:"new-password",spellcheck:"false",autocorrect:"off","onUpdate:modelValue":i[0]||(i[0]=p=>r.passwordChange=p)},null,512),[[an,r.passwordChange]]),i[3]||(i[3]=S("label",{for:"password"},"Current password:",-1)),_t(S("input",{ref_key:"password",ref:s,id:"password",name:"password",type:"password",autocomplete:"current-password",spellcheck:"false",autocorrect:"off","onUpdate:modelValue":i[1]||(i[1]=p=>r.password=p)},null,512),[[an,r.password]])]),S("div",_i,[S("input",{id:"close",type:"reset",value:"Close",class:"button",onClick:l}),i[4]||(i[4]=S("div",{class:"spacer"},null,-1)),S("input",{id:"submit",type:"submit",value:"Submit",class:"button",onClick:me(c,["prevent"])})])],64)):(E(),N(ge,{key:1},[i[7]||(i[7]=S("p",null,"No settings are available because you have not logged in.",-1)),S("div",{class:"dialog-buttons"},[i[6]||(i[6]=S("div",{class:"spacer"},null,-1)),S("input",{id:"close",type:"reset",value:"Close",class:"button",onClick:l})])],64))])]),_:1})}}}),Ri=Se(Ei,[["__scopeId","data-v-127c9237"]]),Ii={key:0,class:"loading"},Mi={key:1},Ai={class:"form-row"},Pi={for:"publicAccess"},Oi=["checked","onChange","disabled"],Ti=["onClick"],Ni=["onClick"],Li=["onClick","disabled"],Di=Q({__name:"UserManagementModal",setup(e){const t=se(),n=F(!0),o=F([]),s=F(""),r=F("📋"),l=rt({public:!1}),c=()=>{t.dialog="",s.value=""},a=async()=>{try{n.value=!0;const v=await xi();o.value=v.users}catch(v){const w=v;t.showToast(w.message||"Failed to load users")}finally{n.value=!1}},i=async()=>{const v=window.prompt("Enter username for new user:");if(!(!v||!v.trim()))try{s.value="";const w=await uo(v.trim(),void 0,!1);await a(),w.password&&(s.value=`User ${v.trim()} created. Password: ${w.password}`)}catch(w){const I=w;t.showToast(I.message||"Failed to add user")}},d=async(v,w)=>{const I=w.target;try{await fo(v.username,{privileged:I.checked}),v.privileged=I.checked}catch(M){const A=M;t.showToast(A.message||"Failed to update user"),I.checked=v.privileged}},p=async v=>{const w=window.prompt("Enter new username:",v.username);if(!(!w||!w.trim()||w.trim()===v.username))try{s.value="";const I=await uo(w.trim(),void 0,v.privileged);await po(v.username),await a(),I.password&&(s.value=`User renamed to ${w.trim()}. New password: ${I.password}`)}catch(I){const M=I;t.showToast(M.message||"Failed to rename user")}},h=async v=>{if(confirm(`Reset password for ${v.username}? A new password will be generated.`))try{s.value="";const w=await fo(v.username,{password:""});w.password&&(s.value=`Password reset for ${v.username}. New password: ${w.password}`)}catch(w){const I=w;t.showToast(I.message||"Failed to reset password")}},k=async v=>{if(confirm(`Delete user ${v}?`))try{await po(v),await a()}catch(w){const I=w;t.showToast(I.message||"Failed to delete user")}},$=async(v=!1)=>{const w=s.value.match(/(?:Password|New password): (.+)/);if(w)if(await navigator.clipboard.writeText(w[1]),v){r.value="✅ Copied!";const I=s.value.replace(/(?:Password|New password): .+/,"Password copied to clipboard!");s.value=I,setTimeout(()=>{s.value="",r.value="📋"},3e3)}else s.value=""},_=async()=>{try{s.value="",await Si(l.public),t.server.public=l.public,s.value="Server settings updated"}catch(v){const w=v;t.showToast(w.message||"Failed to update settings")}};return xe(()=>{l.public=t.server.public||!1,n.value=!1}),ze(()=>t.dialog,v=>{v==="usermgmt"&&!t.server.paskia&&a()}),ze(()=>t.server.public,v=>{l.public=v||!1}),(v,w)=>{const I=es;return E(),ee(I,{name:"usermgmt",title:"Admin Settings"},{default:we(()=>[n.value?(E(),N("div",Ii,"Loading...")):(E(),N("div",Mi,[w[8]||(w[8]=S("h3",null,"Server Settings",-1)),S("div",Ai,[S("label",Pi,[_t(S("input",{type:"checkbox",id:"publicAccess","onUpdate:modelValue":w[0]||(w[0]=M=>l.public=M),onChange:_},null,544),[[Co,l.public]]),w[3]||(w[3]=Ce(" Public access (anyone can read and write) ",-1))])]),g(t).server.paskia?(E(),N(ge,{key:0},[w[4]||(w[4]=S("h3",null,"User Management",-1)),w[5]||(w[5]=S("p",null,[Ce("See "),S("a",{href:"/auth/admin/"},"Paskia Admin"),Ce(".")],-1))],64)):(E(),N(ge,{key:1},[w[7]||(w[7]=S("h3",null,"Users",-1)),S("button",{onClick:i,class:"button",title:"Add new user"},"➕ Add User"),s.value?(E(),N("div",{key:0,class:"success-message",onClick:w[2]||(w[2]=M=>$(!1))},[Ce(te(s.value)+" ",1),s.value.includes("Password:")||s.value.includes("New password:")?(E(),N("button",{key:0,onClick:w[1]||(w[1]=me(M=>$(!0),["stop"])),class:"button small",title:"Copy to clipboard"},te(r.value),1)):G("",!0)])):G("",!0),S("table",null,[w[6]||(w[6]=S("thead",null,[S("tr",null,[S("th",null,"Username"),S("th",null,"Admin"),S("th",null,"Actions")])],-1)),S("tbody",null,[(E(!0),N(ge,null,dt(o.value,M=>(E(),N("tr",{key:M.username},[S("td",null,te(M.username),1),S("td",null,[S("input",{type:"checkbox",checked:M.privileged,onChange:A=>d(M,A),disabled:M.username===g(t).user.username},null,40,Oi)]),S("td",null,[S("button",{onClick:A=>p(M),class:"button small",title:"Rename user"},"✏️",8,Ti),S("button",{onClick:A=>h(M),class:"button small",title:"Reset password"},"🔑",8,Ni),S("button",{onClick:A=>k(M.username),class:"button small danger",disabled:M.username===g(t).user.username,title:"Delete user"},"🗑️",8,Li)])]))),128))])])],64)),S("div",{class:"dialog-buttons"},[S("button",{onClick:c,class:"button"},"Close")])]))]),_:1})}}}),Bi=Se(Di,[["__scopeId","data-v-afe859c3"]]),Hi={key:0,class:"modal-overlay"},Fi=Q({__name:"AccessDeniedModal",setup(e){const t=se(),n=()=>{location.reload()};return Pe(()=>{t.dialog==="accessdenied"&&bn()}),(o,s)=>g(t).dialog==="accessdenied"?(E(),N("div",Hi,[S("div",{class:"modal-dialog",id:"accessdenied"},[S("div",{class:"modal-content access-denied"},[s[0]||(s[0]=S("p",{class:"icon"},"⛔",-1)),s[1]||(s[1]=S("p",{class:"message"},"Access Denied",-1)),S("button",{onClick:n,class:"button"},"Reload")])])])):G("",!0)}}),Wi=Se(Fi,[["__scopeId","data-v-eaaa3c09"]]),zi={key:2},Ui=Q({__name:"App",setup(e){const t=se(),n=q(()=>{const l=decodeURIComponent(Bt.currentRoute.value.path).split("//"),c=(l[0]??"").split("/").filter(i=>i!==""),a=l.slice(1).join("//");return{path:l[0]??"",pathList:c,query:a}});Pe(()=>{document.title=n.value.path.replace(/\/$/,"").split("/").pop()||t.server.name||"Cista Storage"}),xe(qs),xe(Ut),lt(Gs);const o=F(null);let s=null;const r=l=>{if(t.dialog){s&&(clearTimeout(s),s=null);return}const c=t.fileExplorer;if(!c)return;const a=c.isCursor(),i=l.target.tagName==="INPUT",d=l.type==="keyup";if(l.repeat){(l.key==="ArrowUp"||l.key==="ArrowDown"||l.key==="ArrowLeft"||l.key==="ArrowRight"||a&&l.code==="Space")&&(i||l.preventDefault());return}let p="";if(!i&&l.key.startsWith("Arrow"))p=l.key.slice(5).toLowerCase();else if(!d&&l.key==="f"&&(l.ctrlKey||l.metaKey))o.value.toggleSearchInput();else if(!i&&d&&l.key==="/")o.value.toggleSearchInput();else if(d&&l.key==="Escape")t.error="",t.clearToast(),o.value.clearSearch(l),t.focusBreadcrumb();else if(!i&&d&&l.key==="Backspace")Bt.back();else if(!i&&!d&&l.key==="a"&&(l.ctrlKey||l.metaKey))c.toggleSelectAll();else if(!i&&d&&l.key==="g")t.prefs.gallery=!t.prefs.gallery;else if(!i&&d&&(l.code==="Backquote"||l.key==="1"||l.key==="2"||l.key==="3"))t.sort(["","name","modified","size"][+l.key||0]);else if(!i&&a&&d&&!l.ctrlKey&&(l.key==="F2"||l.key==="r"))c.cursorRename();else if(!i&&a&&l.code==="Space")d&&!l.altKey&&!l.ctrlKey&&c.cursorSelect();else return;l.preventDefault(),s&&(clearTimeout(s),s=null);let h;switch(p){case"up":h=()=>c.up(l);break;case"down":h=()=>c.down(l);break;case"left":h=()=>c.left(l);break;case"right":h=()=>c.right(l);break}if(h&&!d){const $=l.altKey?20:100;h(),s=setTimeout(()=>{s=setInterval(h,$)},200-$)}};return xe(()=>{window.addEventListener("keydown",r),window.addEventListener("keyup",r)}),lt(()=>{window.removeEventListener("keydown",r),window.removeEventListener("keyup",r)}),(l,c)=>{const a=Ri,i=vi,d=Sn,p=lr,h=Ts;return E(),N(ge,null,[g(t).toast?(E(),N("div",{key:0,class:"toast-message",onClick:c[0]||(c[0]=k=>g(t).clearToast())},te(g(t).toast),1)):g(t).error&&!g(t).authInProgress?(E(),N("div",{key:1,class:"toast-message status",onClick:c[1]||(c[1]=k=>g(t).error="")},te(g(t).error),1)):G("",!0),V(a),V(Bi),V(Wi),S("header",null,[V(i,{ref_key:"headerMain",ref:o,path:n.value.pathList,query:n.value.query},null,8,["path","query"]),V(d,{path:n.value.pathList,primary:""},null,8,["path"])]),S("main",null,[V(g(Yo),{path:n.value.pathList,query:n.value.query},null,8,["path","query"])]),g(t).selected.size||g(t).uprogress.total||g(t).dprogress.total?(E(),N("footer",zi,[V(p,{path:n.value.pathList},null,8,["path"]),V(h,{status:g(t).uprogress,onCancel:g(t).cancelUploads,class:"upload"},null,8,["status","onCancel"]),V(h,{status:g(t).dprogress,onCancel:g(t).cancelDownloads,class:"download"},null,8,["status","onCancel"])])):G("",!0)],64)}}});function ji(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 Rn(e,t,n){if(n.length===0)return t;const o=n[0];return n.length>1&&(t=Rn(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 ts(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 Rn(e,ts(e[t[0]],Array.prototype.slice.call(t,1)),[t[0]])}function ns(e,t){return t.map(n=>n.split(".")).map(n=>[n,ji(e,n)]).filter(n=>n[1]!==void 0).reduce((n,o)=>Rn(n,o[1],o[0]),{})}function os(e,t){return t.map(n=>n.split(".")).reduce((n,o)=>ts(n,o),e)}function mo(e,{storage:t,serializer:n,key:o,debug:s,pick:r,omit:l,beforeHydrate:c,afterHydrate:a},i,d=!0){try{d&&c?.(i);const p=t.getItem(o);if(p){const h=n.deserialize(p),k=r?ns(h,r):h,$=l?os(k,l):k;e.$patch($)}d&&a?.(i)}catch(p){s&&console.error("[pinia-plugin-persistedstate]",p)}}function ho(e,{storage:t,serializer:n,key:o,debug:s,pick:r,omit:l}){try{const c=r?ns(e,r):e,a=l?os(c,l):c,i=n.serialize(a);t.setItem(o,i)}catch(c){s&&console.error("[pinia-plugin-persistedstate]",c)}}function Vi(e,t){return typeof e=="function"?e(t):typeof e=="string"?e:t}function qi(e,t,n){const{pinia:o,store:s,options:{persist:r=n}}=e;if(!r)return;if(!(s.$id in o.state.value)){const c=o._s.get(s.$id.replace("__hot:",""));c&&Promise.resolve().then(()=>c.$persist());return}const l=(Array.isArray(r)?r:r===!0?[{}]:[r]).map(t);s.$hydrate=({runHooks:c=!0}={})=>{l.forEach(a=>{mo(s,a,e,c)})},s.$persist=()=>{l.forEach(c=>{ho(s.$state,c)})},l.forEach(c=>{mo(s,c,e),s.$subscribe((a,i)=>ho(i,c),{detached:!0})})}function Gi(e={}){return function(t){qi(t,n=>{const o=Vi(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 Ki=Gi();const Rt=ks(Ui);Rt.config.errorHandler=e=>{console.log(e)};const ss=bs();ss.use(Ki);Rt.use(ss);Rt.use(Bt);Rt.use(Gt);Rt.mount("#app");
|
|
@@ -0,0 +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 (orientation:landscape)and (min-width:700px){header{display:flex;justify-content:space-between}header .headermain{order:1}header .breadcrumb{align-self:stretch}}@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}.error-message{padding:.5em;font-weight:700;background:var(--accent-color);color:#000}.ghost{opacity:.5}.transferprogress[data-v-ee5a3f0e]{--bar: var(--accent-color);--nobar: transparent;display:flex;flex-direction:column;justify-content:center;color:var(--primary-color);width:100%}.statustext[data-v-ee5a3f0e]{display:flex;align-items:center;justify-content:center;margin:0 .5em;padding:.5rem 0}span[data-v-ee5a3f0e]{color:#ccc;white-space:nowrap;text-align:right;padding:0 .5em}.filename[data-v-ee5a3f0e]{color:#fff;flex:1 1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left}.index[data-v-ee5a3f0e]{min-width:3.5em}.position[data-v-ee5a3f0e],.speed[data-v-ee5a3f0e]{min-width:4em}.upload .statustext[data-v-ee5a3f0e]:before{font-size:1.5em;content:"🔺"}.download .statustext[data-v-ee5a3f0e]:before{font-size:1.5em;content:"🔻"}.cursor-tooltip[data-v-7e1f0ce6]{position:fixed;z-index:10000;padding:.5rem 1rem;border-radius:3rem 0;box-shadow:0 0 1rem #00000080;background:#0000004d;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);color:#fff;pointer-events:none;font-size:1rem}.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}.selection-bar{display:flex;align-items:center;justify-content:center;padding:.3em .5em;background:transparent;color:var(--header-color)}.select-text{color:var(--accent-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0;padding-right:.5em}: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)}@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}.tooltip-name[data-v-79b3799a]{font-weight:600;text-align:center}.tooltip-details[data-v-79b3799a]{text-align:center}figure[data-v-79b3799a]{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-79b3799a]{flex:0 0 auto}figure[data-v-79b3799a] .video-container{height:15em}.titlespacer[data-v-79b3799a]{flex-shrink:100000;width:100%;height:2em}figcaption[data-v-79b3799a]{position:absolute;overflow:hidden;bottom:0;display:flex;align-items:center;justify-content:center;width:100%}figcaption input[type=checkbox][data-v-79b3799a]{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-79b3799a]:checked,figcaption:hover input[type=checkbox][data-v-79b3799a]{opacity:1}figcaption span[data-v-79b3799a]{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-79b3799a]{color:var(--accent-color)}figcaption .namespacer[data-v-79b3799a]{flex-shrink:100000;height:2em;width:2em}.gallery[data-v-bf535403]{padding:1em;width:100%;display:grid;gap:.5em;grid-template-columns:repeat(auto-fill,minmax(15em,1fr));align-items:end}.folder-indicator[data-v-bf535403]{grid-column:1 / -1}.folder-start[data-v-bf535403]{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-674ac4d9]{width:100%;table-layout:fixed}thead tr[data-v-674ac4d9]{position:sticky;top:0;z-index:2}tbody tr[data-v-674ac4d9]{position:relative;z-index:auto}table thead .selection input[type=checkbox][data-v-674ac4d9]{position:inherit;width:1rem;height:1rem;padding:0;margin:auto}table tbody .selection input[type=checkbox][data-v-674ac4d9]{width:2rem;height:2rem}table .selection[data-v-674ac4d9]{width:3rem;text-align:center;text-overflow:clip;padding:0}table .selection input[data-v-674ac4d9]{margin:auto}table .modified[data-v-674ac4d9]{width:10rem;text-overflow:clip}table .size[data-v-674ac4d9]{width:7rem;text-overflow:clip}table .menu[data-v-674ac4d9]{width:2rem}tbody td[data-v-674ac4d9]{font-size:1.2rem}table th[data-v-674ac4d9],table td[data-v-674ac4d9]{padding:0 .5rem;font-weight:400;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.name[data-v-674ac4d9]{white-space:nowrap;position:relative}.name .rename-button[data-v-674ac4d9]{position:absolute;right:0;animation:appear-674ac4d9 calc(5 * var(--transition-time)) linear}@keyframes appear-674ac4d9{0%{opacity:0}80%{opacity:0}to{opacity:1}}thead tr[data-v-674ac4d9]{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-674ac4d9]{background:var(--accent-color)}.right[data-v-674ac4d9]{text-align:right}.sortcolumn[data-v-674ac4d9]:hover{cursor:pointer}.sortcolumn[data-v-674ac4d9]{padding-right:1.5rem}.sortcolumn[data-v-674ac4d9]:after{font-size:1rem;content:"▸";color:#888;margin-left:.5rem;margin-top:-.2rem;position:absolute;transition:all var(--transition-time) linear}.sortactive[data-v-674ac4d9]:after{transform:rotate(90deg);color:var(--accent-color)}.name a[data-v-674ac4d9]{text-decoration:none}tbody .selection input[data-v-674ac4d9]{z-index:1;position:absolute;opacity:0;left:.5rem;top:0}.selection[data-v-674ac4d9]{width:2em;height:2em}.selection input[data-v-674ac4d9]:checked{opacity:.7}.file .selection[data-v-674ac4d9]:before{content:"📄";font-size:1.5rem}.folder .selection[data-v-674ac4d9]:before{height:2rem;content:"📁";font-size:1.5rem}.empty-container[data-v-674ac4d9]{padding-top:3rem;text-align:center;font-size:3rem;color:var(--accent-color)}.folder-change[data-v-674ac4d9]{margin-left:-.5rem}.loc[data-v-674ac4d9],.summary[data-v-674ac4d9]{color:#888}.empty-container[data-v-20851203]{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-20851203]{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-7e0e5f3d]{flex:1000 0 auto;padding:0;display:flex;align-items:center;z-index:10}.search-group[data-v-7e0e5f3d]{position:relative;display:flex;align-items:center;background:#ffffff1a;border-radius:1.5em;padding:0 .3em;transition:background .2s ease;flex:1 1 auto;min-width:5.5em;max-width:20em}.search-group[data-v-7e0e5f3d]:focus-within{background:#fff3}.search-group:focus-within .search-hint[data-v-7e0e5f3d]{opacity:0;pointer-events:none}.search-group[data-v-7e0e5f3d] .action-button{width:2.2em;height:2.2em;flex-shrink:0}.search-group input[type=search][data-v-7e0e5f3d]{background:transparent;color:var(--header-color);border:none;outline:none;padding:.2em .5em .2em 0;font-size:var(--header-font-size);flex:1 1 3em;min-width:3em}.search-hint[data-v-7e0e5f3d]{position:absolute;right:.5em;font-family:system-ui,sans-serif;font-size:1em;font-weight:700;color:#333;background:#ccc;border:1px solid #999;border-radius:.3em;padding:0 .45em;line-height:1.4;cursor:pointer;transition:opacity .15s ease}.disk-space[data-v-7e0e5f3d]{display:flex;align-items:center;cursor:default}.pie-mini[data-v-7e0e5f3d]{width:1.4em;height:1.4em}.disk-tooltip[data-v-7e0e5f3d]{line-height:1.5}.pie-tooltip[data-v-7e0e5f3d]{display:block}.pie-tooltip .pie-label[data-v-7e0e5f3d]{fill:#fff;font-size:9px}.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}footer{position:fixed;bottom:0;left:0;right:0;display:flex;flex-direction:column;align-items:center;background:#0000004d;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:50}footer>*{justify-content:center}: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 l=[],u=0;const c=[],q=10,a=100;function M(n){return"^"+n.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase()+"$"}function S(n){return n.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase()}function g(n,e,t){return n.includes(e)||t.every(o=>n.includes(o))}const y=new Intl.Collator("en",{sensitivity:"base",numeric:!0}),z=()=>new Promise(n=>setTimeout(n,0));function k(n){let e=null;for(const t of c)t.complete&&n.startsWith(t.query)&&(!e||t.query.length>e.query.length)&&(e=t);return e}function C(n,e,t){const o=c.findIndex(r=>r.query===n);o!==-1&&c.splice(o,1),c.unshift({query:n,results:e,complete:t}),c.length>q&&c.pop()}function E(){c.length=0}async function L(n,e,t){const o=S(n),r=o.split(/\s+/),s=[];let h=0;const m=c.find(i=>i.query===o);if(m){u===t&&f(m.results,n,e,t,!0);return}const N=k(o);if(N){for(const i of N.results)g(i.haystack,o,r)&&s.push(i);C(o,s,!0),u===t&&f(s,n,e,t,!0);return}const p=500;for(let i=0;i<l.length&&s.length<a;i+=p){if(u!==t)return;const T=Math.min(i+p,l.length);for(let d=i;d<T&&s.length<a;d++){const b=l[d];g(b.haystack,o,r)&&s.push(b)}s.length>h&&u===t&&(h=s.length,f(s,n,e,t,!1)),i+p<l.length&&s.length<a&&await z()}C(o,s,s.length<a),u===t&&f(s,n,e,t,!0)}function f(n,e,t,o,r){const s=R(n,e,t);postMessage({type:"results",docs:s.map(({haystack:h,...m})=>m),id:o,done:r})}function R(n,e,t){const o=t+"/";return[...n].sort((r,s)=>+(s.loc===t)-+(r.loc===t)||Number(s.loc.startsWith(o))-Number(r.loc.startsWith(o))||y.compare(r.loc,s.loc)||Number(s.dir)-Number(r.dir)||Number(s.name.includes(e))-Number(r.name.includes(e))||y.compare(r.name,s.name))}self.onmessage=async n=>{const e=n.data;e.type==="update"?(l=e.documents.map(t=>({...t,haystack:M(t.name)})).sort((t,o)=>o.mtime-t.mtime),E()):e.type==="search"&&(u=e.id,e.query?await L(e.query,e.loc,e.id):postMessage({type:"results",docs:[],id:e.id,done:!0}))}})();
|
cista/frontend-build/index.html
CHANGED
|
@@ -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-
|
|
11
|
-
<link rel="modulepreload" crossorigin href="/assets/icons-
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-BHQJhxzY.js"></script>
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/icons-6j2UZ_HA.js">
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/assets/index-De5UYAfC.css">
|
|
13
13
|
|
|
14
14
|
<body id="app">
|
cista/preview.py
CHANGED
|
@@ -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):
|
cista/protocol.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import shutil
|
|
4
|
+
from pathlib import PurePosixPath
|
|
4
5
|
from typing import Any
|
|
5
6
|
|
|
6
7
|
import msgspec
|
|
@@ -16,6 +17,10 @@ class ControlBase(msgspec.Struct, tag_field="op", tag=str.lower):
|
|
|
16
17
|
def __call__(self):
|
|
17
18
|
raise NotImplementedError
|
|
18
19
|
|
|
20
|
+
def affected_paths(self) -> list[str]:
|
|
21
|
+
"""Return list of paths affected by this operation for change notification."""
|
|
22
|
+
return []
|
|
23
|
+
|
|
19
24
|
|
|
20
25
|
class MkDir(ControlBase):
|
|
21
26
|
path: str
|
|
@@ -24,6 +29,9 @@ class MkDir(ControlBase):
|
|
|
24
29
|
path = config.config.path / filename.sanitize(self.path)
|
|
25
30
|
path.mkdir(parents=True, exist_ok=False)
|
|
26
31
|
|
|
32
|
+
def affected_paths(self) -> list[str]:
|
|
33
|
+
return [filename.sanitize(self.path)]
|
|
34
|
+
|
|
27
35
|
|
|
28
36
|
class Rename(ControlBase):
|
|
29
37
|
path: str
|
|
@@ -36,6 +44,11 @@ class Rename(ControlBase):
|
|
|
36
44
|
path = config.config.path / filename.sanitize(self.path)
|
|
37
45
|
path.rename(path.with_name(to))
|
|
38
46
|
|
|
47
|
+
def affected_paths(self) -> list[str]:
|
|
48
|
+
sanitized = filename.sanitize(self.path)
|
|
49
|
+
new_path = str(PurePosixPath(sanitized).with_name(filename.sanitize(self.to)))
|
|
50
|
+
return [sanitized, new_path]
|
|
51
|
+
|
|
39
52
|
|
|
40
53
|
class Rm(ControlBase):
|
|
41
54
|
sel: list[str]
|
|
@@ -49,6 +62,9 @@ class Rm(ControlBase):
|
|
|
49
62
|
else:
|
|
50
63
|
p.unlink()
|
|
51
64
|
|
|
65
|
+
def affected_paths(self) -> list[str]:
|
|
66
|
+
return [filename.sanitize(p) for p in self.sel]
|
|
67
|
+
|
|
52
68
|
|
|
53
69
|
class Mv(ControlBase):
|
|
54
70
|
sel: list[str]
|
|
@@ -63,6 +79,13 @@ class Mv(ControlBase):
|
|
|
63
79
|
for p in sel:
|
|
64
80
|
shutil.move(p, dst)
|
|
65
81
|
|
|
82
|
+
def affected_paths(self) -> list[str]:
|
|
83
|
+
dst = filename.sanitize(self.dst)
|
|
84
|
+
paths = [filename.sanitize(p) for p in self.sel]
|
|
85
|
+
# Include new locations in dst
|
|
86
|
+
paths.extend(f"{dst}/{PurePosixPath(p).name}" for p in self.sel)
|
|
87
|
+
return paths
|
|
88
|
+
|
|
66
89
|
|
|
67
90
|
class Cp(ControlBase):
|
|
68
91
|
sel: list[str]
|
|
@@ -86,6 +109,11 @@ class Cp(ControlBase):
|
|
|
86
109
|
else:
|
|
87
110
|
shutil.copy2(p, dst)
|
|
88
111
|
|
|
112
|
+
def affected_paths(self) -> list[str]:
|
|
113
|
+
dst = filename.sanitize(self.dst)
|
|
114
|
+
# Only destinations are new (sources unchanged)
|
|
115
|
+
return [f"{dst}/{PurePosixPath(filename.sanitize(p)).name}" for p in self.sel]
|
|
116
|
+
|
|
89
117
|
|
|
90
118
|
ControlTypes = MkDir | Rename | Rm | Mv | Cp
|
|
91
119
|
|