cista 1.4.1__py3-none-any.whl → 1.4.2__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 +36 -9
- cista/_version.py +1 -1
- cista/app.py +24 -7
- cista/frontend-build/assets/index-C8Gp9T8Z.js +32 -0
- cista/frontend-build/assets/index-zDODUQOB.css +1 -0
- cista/frontend-build/assets/searchWorker-CxfnO8mP.js +1 -0
- cista/frontend-build/index.html +2 -2
- {cista-1.4.1.dist-info → cista-1.4.2.dist-info}/METADATA +1 -1
- {cista-1.4.1.dist-info → cista-1.4.2.dist-info}/RECORD +11 -10
- cista/frontend-build/assets/index-B0IgN1zv.css +0 -1
- cista/frontend-build/assets/index-PhZha5OE.js +0 -32
- {cista-1.4.1.dist-info → cista-1.4.2.dist-info}/WHEEL +0 -0
- {cista-1.4.1.dist-info → cista-1.4.2.dist-info}/entry_points.txt +0 -0
cista/__main__.py
CHANGED
|
@@ -25,6 +25,28 @@ def create_banner():
|
|
|
25
25
|
"""
|
|
26
26
|
|
|
27
27
|
|
|
28
|
+
def create_startup_box(*, folder, url, unix=None, dev=False, paskia_url=None):
|
|
29
|
+
"""Create a framed startup box with server information."""
|
|
30
|
+
title = f"Cista {cista.__version__}"
|
|
31
|
+
listen = f"{url} ({unix})" if unix else url
|
|
32
|
+
location = f"{folder} @ {listen}"
|
|
33
|
+
lines = [title, location]
|
|
34
|
+
if paskia_url:
|
|
35
|
+
lines.append(f"Paskia: {paskia_url}")
|
|
36
|
+
if dev:
|
|
37
|
+
lines.append("dev mode")
|
|
38
|
+
|
|
39
|
+
# Calculate width based on content
|
|
40
|
+
inner_width = max(len(line) for line in lines) + 2
|
|
41
|
+
|
|
42
|
+
# Build the box
|
|
43
|
+
box = [f"╭{'─' * inner_width}╮"]
|
|
44
|
+
for line in lines:
|
|
45
|
+
box.append(f"│ {line:<{inner_width - 1}}│")
|
|
46
|
+
box.append(f"╰{'─' * inner_width}╯")
|
|
47
|
+
return "\n".join(box) + "\n"
|
|
48
|
+
|
|
49
|
+
|
|
28
50
|
banner = create_banner()
|
|
29
51
|
|
|
30
52
|
doc = """\
|
|
@@ -83,8 +105,7 @@ def _main():
|
|
|
83
105
|
elif "--version" in sys.argv:
|
|
84
106
|
sys.stdout.write(f"cista {cista.__version__}\n")
|
|
85
107
|
return 0
|
|
86
|
-
|
|
87
|
-
sys.stderr.write(banner)
|
|
108
|
+
# Don't print banner yet for normal startup - we'll print the startup box later
|
|
88
109
|
args = docopt(doc)
|
|
89
110
|
if args["--user"]:
|
|
90
111
|
return _user(args)
|
|
@@ -121,17 +142,23 @@ def _main():
|
|
|
121
142
|
elif not exists:
|
|
122
143
|
settings["listen"] = ":8000"
|
|
123
144
|
operation = config.update_config(settings)
|
|
124
|
-
sys.stderr.write(f"Config {operation}: {config.conffile}\n")
|
|
125
145
|
# Prepare to serve
|
|
126
|
-
|
|
127
|
-
url, _ = serve.parse_listen(config.config.listen)
|
|
146
|
+
url, opts = serve.parse_listen(config.config.listen)
|
|
128
147
|
if not config.config.path.is_dir():
|
|
129
148
|
raise ValueError(f"No such directory: {config.config.path}")
|
|
130
|
-
extra = f" ({unix})" if unix else ""
|
|
131
149
|
dev = args["--dev"]
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
150
|
+
# Check for Paskia SSO
|
|
151
|
+
from cista.sso import PASKIA_BACKEND_URL
|
|
152
|
+
|
|
153
|
+
# Print startup box
|
|
154
|
+
startup_box = create_startup_box(
|
|
155
|
+
folder=config.config.path,
|
|
156
|
+
url=url,
|
|
157
|
+
unix=opts.get("unix"),
|
|
158
|
+
dev=dev,
|
|
159
|
+
paskia_url=PASKIA_BACKEND_URL or None,
|
|
160
|
+
)
|
|
161
|
+
sys.stderr.write(startup_box)
|
|
135
162
|
# Run the server
|
|
136
163
|
serve.run(dev=dev)
|
|
137
164
|
return 0
|
cista/_version.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# This file is automatically generated by hatch build.
|
|
2
|
-
__version__ = '1.4.
|
|
2
|
+
__version__ = '1.4.2'
|
cista/app.py
CHANGED
|
@@ -43,10 +43,13 @@ setproctitle("cista-main")
|
|
|
43
43
|
async def main_start(app):
|
|
44
44
|
config.load_config()
|
|
45
45
|
setproctitle(f"cista {config.config.path.name}")
|
|
46
|
-
|
|
46
|
+
# Small pool for memory-intensive preview generation
|
|
47
|
+
preview_workers = max(2, min(8, cpu_count()))
|
|
47
48
|
app.ctx.threadexec = ThreadPoolExecutor(
|
|
48
|
-
max_workers=
|
|
49
|
+
max_workers=preview_workers, thread_name_prefix="cista-preview"
|
|
49
50
|
)
|
|
51
|
+
# Larger pool for long-running but low-memory zip operations
|
|
52
|
+
app.ctx.zipexec = ThreadPoolExecutor(max_workers=32, thread_name_prefix="cista-zip")
|
|
50
53
|
watching.start(app)
|
|
51
54
|
|
|
52
55
|
|
|
@@ -56,6 +59,7 @@ async def main_stop(app):
|
|
|
56
59
|
quit.set()
|
|
57
60
|
watching.stop(app)
|
|
58
61
|
app.ctx.threadexec.shutdown()
|
|
62
|
+
app.ctx.zipexec.shutdown(cancel_futures=True)
|
|
59
63
|
await sso.close_client()
|
|
60
64
|
logger.debug("Cista worker threads all finished")
|
|
61
65
|
|
|
@@ -288,27 +292,40 @@ async def zip_download(req, keys, zipfile, ext):
|
|
|
288
292
|
yield chunk
|
|
289
293
|
assert size == 0
|
|
290
294
|
|
|
295
|
+
pending_put = None # Current queue.put future, can be cancelled
|
|
296
|
+
|
|
291
297
|
def worker():
|
|
298
|
+
nonlocal pending_put
|
|
292
299
|
try:
|
|
293
300
|
for chunk in stream_zip(local_files(files)):
|
|
294
|
-
asyncio.run_coroutine_threadsafe(queue.put(chunk), loop)
|
|
301
|
+
future = asyncio.run_coroutine_threadsafe(queue.put(chunk), loop)
|
|
302
|
+
pending_put = future
|
|
303
|
+
future.result() # Blocks until queue has space
|
|
304
|
+
except asyncio.CancelledError:
|
|
305
|
+
logger.info("ZIP download cancelled by client disconnect")
|
|
295
306
|
except Exception:
|
|
296
307
|
logger.exception("Error streaming ZIP")
|
|
297
308
|
raise
|
|
298
309
|
finally:
|
|
310
|
+
pending_put = None
|
|
299
311
|
asyncio.run_coroutine_threadsafe(queue.put(None), loop)
|
|
300
312
|
|
|
301
|
-
# Don't block the event loop: run in a thread
|
|
313
|
+
# Don't block the event loop: run in a thread (use larger zip pool)
|
|
302
314
|
queue = asyncio.Queue(maxsize=1)
|
|
303
315
|
loop = asyncio.get_event_loop()
|
|
304
|
-
thread = loop.run_in_executor(app.ctx.
|
|
316
|
+
thread = loop.run_in_executor(app.ctx.zipexec, worker)
|
|
305
317
|
|
|
306
318
|
# Stream the response
|
|
307
319
|
res = await req.respond(
|
|
308
320
|
content_type="application/zip",
|
|
309
321
|
headers={"cache-control": "no-store"},
|
|
310
322
|
)
|
|
311
|
-
|
|
312
|
-
await
|
|
323
|
+
try:
|
|
324
|
+
while chunk := await queue.get():
|
|
325
|
+
await res.send(chunk)
|
|
326
|
+
finally:
|
|
327
|
+
# Cancel any pending put to unblock and stop the worker
|
|
328
|
+
if pending_put:
|
|
329
|
+
pending_put.cancel()
|
|
313
330
|
|
|
314
331
|
await thread # If it raises, the response will fail download
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import{r as D,m as ao,e as io,i as re,h as ts,a as Rt,b as co,t as ns,g as os,o as ss,c as et,n as ve,d as Ve,f as K,w as Be,j as X,k as P,l as E,p as ne,q,s as We,u as Je,v as R,x as y,y as rs,z as un,A as tt,B as ge,C as ls,D as Ie,E as ee,F as dn,H as as,G as de,I as me,J as fe,K as st,L as Qe,M as is,N as ue,O as be,P as yt,Q as z,R as uo,S as fo,T as Re,U as cs,V as us,W as fn,X as $t,Y as Zt,Z as ds,_ as _n,$ as po,a0 as fs,a1 as wt,a2 as Qt,a3 as ps,a4 as mo,a5 as ms}from"./icons-DMD182WZ.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))o(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const l of r.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&o(l)}).observe(document,{childList:!0,subtree:!0});function n(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function o(s){if(s.ep)return;s.ep=!0;const r=n(s);fetch(s.href,r)}})();let ho;const Mt=e=>ho=e,go=Symbol();function en(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var dt;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(dt||(dt={}));function hs(){const e=io(!0),t=e.run(()=>D({}));let n=[],o=[];const s=ao({install(r){Mt(s),s._a=r,r.provide(go,s),r.config.globalProperties.$pinia=s,o.forEach(l=>n.push(l)),o=[]},use(r){return this._a?n.push(r):o.push(r),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return s}const vo=()=>{};function En(e,t,n,o=vo){e.add(t);const s=()=>{e.delete(t)&&o()};return!n&&os()&&ss(s),s}function qe(e,...t){e.forEach(n=>{n(...t)})}const gs=e=>e(),Rn=Symbol(),Wt=Symbol();function tn(e,t){e instanceof Map&&t instanceof Map?t.forEach((n,o)=>e.set(o,n)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const o=t[n],s=e[n];en(s)&&en(o)&&e.hasOwnProperty(n)&&!Rt(o)&&!co(o)?e[n]=tn(s,o):e[n]=o}return e}const vs=Symbol();function ys(e){return!en(e)||!Object.prototype.hasOwnProperty.call(e,vs)}const{assign:Ne}=Object;function ws(e){return!!(Rt(e)&&e.effect)}function ks(e,t,n,o){const{state:s,actions:r,getters:l}=t,i=n.state.value[e];let a;function c(){i||(n.state.value[e]=s?s():{});const p=Ve(n.state.value[e]);return Ne(p,r,Object.keys(l||{}).reduce((u,m)=>(u[m]=ao(K(()=>{Mt(n);const f=n._s.get(e);return l[m].call(f,f)})),u),{}))}return a=yo(e,c,t,n,o,!0),a}function yo(e,t,n={},o,s,r){let l;const i=Ne({actions:{}},n),a={deep:!0};let c,p,u=new Set,m=new Set,f;const S=o.state.value[e];!r&&!S&&(o.state.value[e]={});let I;function b(x){let A;c=p=!1,typeof x=="function"?(x(o.state.value[e]),A={type:dt.patchFunction,storeId:e,events:f}):(tn(o.state.value[e],x),A={type:dt.patchObject,payload:x,storeId:e,events:f});const T=I=Symbol();ve().then(()=>{I===T&&(c=!0)}),p=!0,qe(u,A,o.state.value[e])}const g=r?function(){const{state:A}=n,T=A?A():{};this.$patch(J=>{Ne(J,T)})}:vo;function $(){l.stop(),u.clear(),m.clear(),o._s.delete(e)}const w=(x,A="")=>{if(Rn in x)return x[Wt]=A,x;const T=function(){Mt(o);const J=Array.from(arguments),Y=new Set,F=new Set;function H(G){Y.add(G)}function U(G){F.add(G)}qe(m,{args:J,name:T[Wt],store:h,after:H,onError:U});let Z;try{Z=x.apply(this&&this.$id===e?this:h,J)}catch(G){throw qe(F,G),G}return Z instanceof Promise?Z.then(G=>(qe(Y,G),G)).catch(G=>(qe(F,G),Promise.reject(G))):(qe(Y,Z),Z)};return T[Rn]=!0,T[Wt]=A,T},k={_p:o,$id:e,$onAction:En.bind(null,m),$patch:b,$reset:g,$subscribe(x,A={}){const T=En(u,x,A.detached,()=>J()),J=l.run(()=>Be(()=>o.state.value[e],Y=>{(A.flush==="sync"?p:c)&&x({storeId:e,type:dt.direct,events:f},Y)},Ne({},a,A)));return T},$dispose:$},h=et(k);o._s.set(e,h);const C=(o._a&&o._a.runWithContext||gs)(()=>o._e.run(()=>(l=io()).run(()=>t({action:w}))));for(const x in C){const A=C[x];if(Rt(A)&&!ws(A)||co(A))r||(S&&ys(A)&&(Rt(A)?A.value=S[x]:tn(A,S[x])),o.state.value[e][x]=A);else if(typeof A=="function"){const T=w(A,x);C[x]=T,i.actions[x]=A}}return Ne(h,C),Ne(ns(h),C),Object.defineProperty(h,"$state",{get:()=>o.state.value[e],set:x=>{b(A=>{Ne(A,x)})}}),o._p.forEach(x=>{Ne(h,l.run(()=>x({store:h,app:o._a,pinia:o,options:i})))}),S&&r&&n.hydrate&&n.hydrate(h.$state,S),c=!0,p=!0,h}function wo(e,t,n){let o;const s=typeof t=="function";o=s?n:t;function r(l,i){const a=ts();return l=l||(a?re(go,null):null),l&&Mt(l),l=ho,l._s.has(e)||(s?yo(e,t,o,l):ks(e,o,l)),l._s.get(e)}return r.$id=e,r}const bs={class:"statustext"},Cs={key:0,class:"index"},xs={class:"filename"},Ss={key:0,class:"percent"},_s={key:1,class:"position"},Es={class:"speed"},Rs=X({__name:"TransferBar",props:{status:{}},emits:["cancel"],setup(e){const t=e,n=K(()=>t.status.xfer/t.status.total*100),o=K(()=>{let r=t.status.statbytes/t.status.statdur/1e3;const l=(Date.now()-t.status.tlast)/1e3;return l>5/r?0:l>1/r?1/l:r}),s=K(()=>o.value?o.value.toFixed(o.value<10?1:0)+" MB/s":"stalled");return(r,l)=>e.status.total?(R(),P("div",{key:0,class:"transferprogress",style:Je(`background: linear-gradient(to right, var(--bar) 0, var(--bar) ${n.value}%, var(--nobar) ${n.value}%, var(--nobar) 100%);`)},[E("div",bs,[e.status.filecount>1?(R(),P("span",Cs," ["+ne(e.status.fileidx)+"/"+ne(e.status.filecount)+"] ",1)):q("",!0),E("span",xs,[We(ne(e.status.filename.split("/").pop())+" ",1),e.status.filesize>1e7?(R(),P("span",Ss,ne((e.status.filepos/e.status.filesize*100).toFixed(0)+" %"),1)):q("",!0)]),e.status.total>1e7?(R(),P("span",_s,ne((e.status.xfer/1e6).toFixed(0)+" / "+(e.status.total/1e6).toFixed(0)+" MB"),1)):q("",!0),E("span",Es,ne(s.value),1),E("button",{class:"close",onClick:l[0]||(l[0]=i=>r.$emit("cancel"))},"❌")])],4)):q("",!0)}}),ye=(e,t)=>{const n=e.__vccOpts||e;for(const[o,s]of t)n[o]=s;return n},Is=ye(Rs,[["__scopeId","data-v-fc92216f"]]);const Ke=typeof document<"u";function ko(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function As(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&ko(e.default)}const Q=Object.assign;function zt(e,t){const n={};for(const o in t){const s=t[o];n[o]=Se(s)?s.map(e):e(s)}return n}const ft=()=>{},Se=Array.isArray;function In(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}let le=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const bo=Symbol("");le.MATCHER_NOT_FOUND+"",le.NAVIGATION_GUARD_REDIRECT+"",le.NAVIGATION_ABORTED+"",le.NAVIGATION_CANCELLED+"",le.NAVIGATION_DUPLICATED+"";function nt(e,t){return Q(new Error,{type:e,[bo]:!0},t)}function $e(e,t){return e instanceof Error&&bo in e&&(t==null||!!(e.type&t))}const $s=["params","query","hash"];function Ms(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of $s)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}const Ps=Symbol(""),An=Symbol(""),Pt=Symbol(""),Co=Symbol(""),nn=Symbol("");function pn(){return re(Pt)}const xo=/#/g,Os=/&/g,Ns=/\//g,Ts=/=/g,Ls=/\?/g,So=/\+/g,Ds=/%5B/g,Bs=/%5D/g,_o=/%5E/g,Fs=/%60/g,Eo=/%7B/g,Hs=/%7C/g,Ro=/%7D/g,Ws=/%20/g;function mn(e){return e==null?"":encodeURI(""+e).replace(Hs,"|").replace(Ds,"[").replace(Bs,"]")}function zs(e){return mn(e).replace(Eo,"{").replace(Ro,"}").replace(_o,"^")}function on(e){return mn(e).replace(So,"%2B").replace(Ws,"+").replace(xo,"%23").replace(Os,"%26").replace(Fs,"`").replace(Eo,"{").replace(Ro,"}").replace(_o,"^")}function Us(e){return on(e).replace(Ts,"%3D")}function js(e){return mn(e).replace(xo,"%23").replace(Ls,"%3F")}function Vs(e){return js(e).replace(Ns,"%2F")}function kt(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const qs=/\/$/,Gs=e=>e.replace(qs,"");function Ut(e,t,n="/"){let o,s={},r="",l="";const i=t.indexOf("#");let a=t.indexOf("?");return a=i>=0&&a>i?-1:a,a>=0&&(o=t.slice(0,a),r=t.slice(a,i>0?i:t.length),s=e(r.slice(1))),i>=0&&(o=o||t.slice(0,i),l=t.slice(i,t.length)),o=Xs(o??t,n),{fullPath:o+r+l,path:o,query:s,hash:kt(l)}}function Ks(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function $n(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Js(e,t,n){const o=t.matched.length-1,s=n.matched.length-1;return o>-1&&o===s&&ot(t.matched[o],n.matched[s])&&Io(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function ot(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function Io(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!Ys(e[n],t[n]))return!1;return!0}function Ys(e,t){return Se(e)?Mn(e,t):Se(t)?Mn(t,e):(e&&e.valueOf())===(t&&t.valueOf())}function Mn(e,t){return Se(t)?e.length===t.length&&e.every((n,o)=>n===t[o]):e.length===1&&e[0]===t}function Xs(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/"),s=o[o.length-1];(s===".."||s===".")&&o.push("");let r=n.length-1,l,i;for(l=0;l<o.length;l++)if(i=o[l],i!==".")if(i==="..")r>1&&r--;else break;return n.slice(0,r).join("/")+"/"+o.slice(l).join("/")}const Pe={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let sn=(function(e){return e.pop="pop",e.push="push",e})({}),jt=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Zs(e){if(!e)if(Ke){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Gs(e)}const Qs=/^[^#]+#/;function er(e,t){return e.replace(Qs,"#")+t}function tr(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}const Ot=()=>({left:window.scrollX,top:window.scrollY});function nr(e){let t;if("el"in e){const n=e.el,o=typeof n=="string"&&n.startsWith("#"),s=typeof n=="string"?o?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!s)return;t=tr(s,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.scrollX,t.top!=null?t.top:window.scrollY)}function Pn(e,t){return(history.state?history.state.position-t:-1)+e}const rn=new Map;function or(e,t){rn.set(e,t)}function sr(e){const t=rn.get(e);return rn.delete(e),t}function rr(e){return typeof e=="string"||e&&typeof e=="object"}function Ao(e){return typeof e=="string"||typeof e=="symbol"}function lr(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let o=0;o<n.length;++o){const s=n[o].replace(So," "),r=s.indexOf("="),l=kt(r<0?s:s.slice(0,r)),i=r<0?null:kt(s.slice(r+1));if(l in t){let a=t[l];Se(a)||(a=t[l]=[a]),a.push(i)}else t[l]=i}return t}function On(e){let t="";for(let n in e){const o=e[n];if(n=Us(n),o==null){o!==void 0&&(t+=(t.length?"&":"")+n);continue}(Se(o)?o.map(s=>s&&on(s)):[o&&on(o)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function ar(e){const t={};for(const n in e){const o=e[n];o!==void 0&&(t[n]=Se(o)?o.map(s=>s==null?null:""+s):o==null?o:""+o)}return t}function ct(){let e=[];function t(o){return e.push(o),()=>{const s=e.indexOf(o);s>-1&&e.splice(s,1)}}function n(){e=[]}return{add:t,list:()=>e.slice(),reset:n}}function Te(e,t,n,o,s,r=l=>l()){const l=o&&(o.enterCallbacks[s]=o.enterCallbacks[s]||[]);return()=>new Promise((i,a)=>{const c=m=>{m===!1?a(nt(le.NAVIGATION_ABORTED,{from:n,to:t})):m instanceof Error?a(m):rr(m)?a(nt(le.NAVIGATION_GUARD_REDIRECT,{from:t,to:m})):(l&&o.enterCallbacks[s]===l&&typeof m=="function"&&l.push(m),i())},p=r(()=>e.call(o&&o.instances[s],t,n,c));let u=Promise.resolve(p);e.length<3&&(u=u.then(c)),u.catch(m=>a(m))})}function Vt(e,t,n,o,s=r=>r()){const r=[];for(const l of e)for(const i in l.components){let a=l.components[i];if(!(t!=="beforeRouteEnter"&&!l.instances[i]))if(ko(a)){const c=(a.__vccOpts||a)[t];c&&r.push(Te(c,n,o,l,i,s))}else{let c=a();r.push(()=>c.then(p=>{if(!p)throw new Error(`Couldn't resolve component "${i}" at "${l.path}"`);const u=As(p)?p.default:p;l.mods[i]=p,l.components[i]=u;const m=(u.__vccOpts||u)[t];return m&&Te(m,n,o,l,i,s)()}))}}return r}function ir(e,t){const n=[],o=[],s=[],r=Math.max(t.matched.length,e.matched.length);for(let l=0;l<r;l++){const i=t.matched[l];i&&(e.matched.find(c=>ot(c,i))?o.push(i):n.push(i));const a=e.matched[l];a&&(t.matched.find(c=>ot(c,a))||s.push(a))}return[n,o,s]}let cr=()=>location.protocol+"//"+location.host;function $o(e,t){const{pathname:n,search:o,hash:s}=t,r=e.indexOf("#");if(r>-1){let l=s.includes(e.slice(r))?e.slice(r).length:1,i=s.slice(l);return i[0]!=="/"&&(i="/"+i),$n(i,"")}return $n(n,e)+o+s}function ur(e,t,n,o){let s=[],r=[],l=null;const i=({state:m})=>{const f=$o(e,location),S=n.value,I=t.value;let b=0;if(m){if(n.value=f,t.value=m,l&&l===S){l=null;return}b=I?m.position-I.position:0}else o(f);s.forEach(g=>{g(n.value,S,{delta:b,type:sn.pop,direction:b?b>0?jt.forward:jt.back:jt.unknown})})};function a(){l=n.value}function c(m){s.push(m);const f=()=>{const S=s.indexOf(m);S>-1&&s.splice(S,1)};return r.push(f),f}function p(){if(document.visibilityState==="hidden"){const{history:m}=window;if(!m.state)return;m.replaceState(Q({},m.state,{scroll:Ot()}),"")}}function u(){for(const m of r)m();r=[],window.removeEventListener("popstate",i),window.removeEventListener("pagehide",p),document.removeEventListener("visibilitychange",p)}return window.addEventListener("popstate",i),window.addEventListener("pagehide",p),document.addEventListener("visibilitychange",p),{pauseListeners:a,listen:c,destroy:u}}function Nn(e,t,n,o=!1,s=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:s?Ot():null}}function dr(e){const{history:t,location:n}=window,o={value:$o(e,n)},s={value:t.state};s.value||r(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(a,c,p){const u=e.indexOf("#"),m=u>-1?(n.host&&document.querySelector("base")?e:e.slice(u))+a:cr()+e+a;try{t[p?"replaceState":"pushState"](c,"",m),s.value=c}catch(f){console.error(f),n[p?"replace":"assign"](m)}}function l(a,c){r(a,Q({},t.state,Nn(s.value.back,a,s.value.forward,!0),c,{position:s.value.position}),!0),o.value=a}function i(a,c){const p=Q({},s.value,t.state,{forward:a,scroll:Ot()});r(p.current,p,!0),r(a,Q({},Nn(o.value,a,null),{position:p.position+1},c),!1),o.value=a}return{location:o,state:s,push:i,replace:l}}function fr(e){e=Zs(e);const t=dr(e),n=ur(e,t.state,t.location,t.replace);function o(r,l=!0){l||n.pauseListeners(),history.go(r)}const s=Q({location:"",base:e,go:o,createHref:er.bind(null,e)},t,n);return Object.defineProperty(s,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(s,"state",{enumerable:!0,get:()=>t.state.value}),s}function pr(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),fr(e)}let ze=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var ce=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(ce||{});const mr={type:ze.Static,value:""},hr=/[a-zA-Z0-9_]/;function gr(e){if(!e)return[[]];if(e==="/")return[[mr]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(f){throw new Error(`ERR (${n})/"${c}": ${f}`)}let n=ce.Static,o=n;const s=[];let r;function l(){r&&s.push(r),r=[]}let i=0,a,c="",p="";function u(){c&&(n===ce.Static?r.push({type:ze.Static,value:c}):n===ce.Param||n===ce.ParamRegExp||n===ce.ParamRegExpEnd?(r.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),r.push({type:ze.Param,value:c,regexp:p,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function m(){c+=a}for(;i<e.length;){if(a=e[i++],a==="\\"&&n!==ce.ParamRegExp){o=n,n=ce.EscapeNext;continue}switch(n){case ce.Static:a==="/"?(c&&u(),l()):a===":"?(u(),n=ce.Param):m();break;case ce.EscapeNext:m(),n=o;break;case ce.Param:a==="("?n=ce.ParamRegExp:hr.test(a)?m():(u(),n=ce.Static,a!=="*"&&a!=="?"&&a!=="+"&&i--);break;case ce.ParamRegExp:a===")"?p[p.length-1]=="\\"?p=p.slice(0,-1)+a:n=ce.ParamRegExpEnd:p+=a;break;case ce.ParamRegExpEnd:u(),n=ce.Static,a!=="*"&&a!=="?"&&a!=="+"&&i--,p="";break;default:t("Unknown state");break}}return n===ce.ParamRegExp&&t(`Unfinished custom RegExp for param "${c}"`),u(),l(),s}const Tn="[^/]+?",vr={sensitive:!1,strict:!1,start:!0,end:!0};var he=(function(e){return e[e._multiplier=10]="_multiplier",e[e.Root=90]="Root",e[e.Segment=40]="Segment",e[e.SubSegment=30]="SubSegment",e[e.Static=40]="Static",e[e.Dynamic=20]="Dynamic",e[e.BonusCustomRegExp=10]="BonusCustomRegExp",e[e.BonusWildcard=-50]="BonusWildcard",e[e.BonusRepeatable=-20]="BonusRepeatable",e[e.BonusOptional=-8]="BonusOptional",e[e.BonusStrict=.7000000000000001]="BonusStrict",e[e.BonusCaseSensitive=.25]="BonusCaseSensitive",e})(he||{});const yr=/[.+*?^${}()[\]/\\]/g;function wr(e,t){const n=Q({},vr,t),o=[];let s=n.start?"^":"";const r=[];for(const c of e){const p=c.length?[]:[he.Root];n.strict&&!c.length&&(s+="/");for(let u=0;u<c.length;u++){const m=c[u];let f=he.Segment+(n.sensitive?he.BonusCaseSensitive:0);if(m.type===ze.Static)u||(s+="/"),s+=m.value.replace(yr,"\\$&"),f+=he.Static;else if(m.type===ze.Param){const{value:S,repeatable:I,optional:b,regexp:g}=m;r.push({name:S,repeatable:I,optional:b});const $=g||Tn;if($!==Tn){f+=he.BonusCustomRegExp;try{`${$}`}catch(k){throw new Error(`Invalid custom RegExp for param "${S}" (${$}): `+k.message)}}let w=I?`((?:${$})(?:/(?:${$}))*)`:`(${$})`;u||(w=b&&c.length<2?`(?:/${w})`:"/"+w),b&&(w+="?"),s+=w,f+=he.Dynamic,b&&(f+=he.BonusOptional),I&&(f+=he.BonusRepeatable),$===".*"&&(f+=he.BonusWildcard)}p.push(f)}o.push(p)}if(n.strict&&n.end){const c=o.length-1;o[c][o[c].length-1]+=he.BonusStrict}n.strict||(s+="/?"),n.end?s+="$":n.strict&&!s.endsWith("/")&&(s+="(?:/|$)");const l=new RegExp(s,n.sensitive?"":"i");function i(c){const p=c.match(l),u={};if(!p)return null;for(let m=1;m<p.length;m++){const f=p[m]||"",S=r[m-1];u[S.name]=f&&S.repeatable?f.split("/"):f}return u}function a(c){let p="",u=!1;for(const m of e){(!u||!p.endsWith("/"))&&(p+="/"),u=!1;for(const f of m)if(f.type===ze.Static)p+=f.value;else if(f.type===ze.Param){const{value:S,repeatable:I,optional:b}=f,g=S in c?c[S]:"";if(Se(g)&&!I)throw new Error(`Provided param "${S}" is an array but it is not repeatable (* or + modifiers)`);const $=Se(g)?g.join("/"):g;if(!$)if(b)m.length<2&&(p.endsWith("/")?p=p.slice(0,-1):u=!0);else throw new Error(`Missing required param "${S}"`);p+=$}}return p||"/"}return{re:l,score:o,keys:r,parse:i,stringify:a}}function kr(e,t){let n=0;for(;n<e.length&&n<t.length;){const o=t[n]-e[n];if(o)return o;n++}return e.length<t.length?e.length===1&&e[0]===he.Static+he.Segment?-1:1:e.length>t.length?t.length===1&&t[0]===he.Static+he.Segment?1:-1:0}function Mo(e,t){let n=0;const o=e.score,s=t.score;for(;n<o.length&&n<s.length;){const r=kr(o[n],s[n]);if(r)return r;n++}if(Math.abs(s.length-o.length)===1){if(Ln(o))return 1;if(Ln(s))return-1}return s.length-o.length}function Ln(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const br={strict:!1,end:!0,sensitive:!1};function Cr(e,t,n){const o=wr(gr(e.path),n),s=Q(o,{record:e,parent:t,children:[],alias:[]});return t&&!s.record.aliasOf==!t.record.aliasOf&&t.children.push(s),s}function xr(e,t){const n=[],o=new Map;t=In(br,t);function s(u){return o.get(u)}function r(u,m,f){const S=!f,I=Bn(u);I.aliasOf=f&&f.record;const b=In(t,u),g=[I];if("alias"in u){const k=typeof u.alias=="string"?[u.alias]:u.alias;for(const h of k)g.push(Bn(Q({},I,{components:f?f.record.components:I.components,path:h,aliasOf:f?f.record:I})))}let $,w;for(const k of g){const{path:h}=k;if(m&&h[0]!=="/"){const v=m.record.path,C=v[v.length-1]==="/"?"":"/";k.path=m.record.path+(h&&C+h)}if($=Cr(k,m,b),f?f.alias.push($):(w=w||$,w!==$&&w.alias.push($),S&&u.name&&!Fn($)&&l(u.name)),Po($)&&a($),I.children){const v=I.children;for(let C=0;C<v.length;C++)r(v[C],$,f&&f.children[C])}f=f||$}return w?()=>{l(w)}:ft}function l(u){if(Ao(u)){const m=o.get(u);m&&(o.delete(u),n.splice(n.indexOf(m),1),m.children.forEach(l),m.alias.forEach(l))}else{const m=n.indexOf(u);m>-1&&(n.splice(m,1),u.record.name&&o.delete(u.record.name),u.children.forEach(l),u.alias.forEach(l))}}function i(){return n}function a(u){const m=Er(u,n);n.splice(m,0,u),u.record.name&&!Fn(u)&&o.set(u.record.name,u)}function c(u,m){let f,S={},I,b;if("name"in u&&u.name){if(f=o.get(u.name),!f)throw nt(le.MATCHER_NOT_FOUND,{location:u});b=f.record.name,S=Q(Dn(m.params,f.keys.filter(w=>!w.optional).concat(f.parent?f.parent.keys.filter(w=>w.optional):[]).map(w=>w.name)),u.params&&Dn(u.params,f.keys.map(w=>w.name))),I=f.stringify(S)}else if(u.path!=null)I=u.path,f=n.find(w=>w.re.test(I)),f&&(S=f.parse(I),b=f.record.name);else{if(f=m.name?o.get(m.name):n.find(w=>w.re.test(m.path)),!f)throw nt(le.MATCHER_NOT_FOUND,{location:u,currentLocation:m});b=f.record.name,S=Q({},m.params,u.params),I=f.stringify(S)}const g=[];let $=f;for(;$;)g.unshift($.record),$=$.parent;return{name:b,path:I,params:S,matched:g,meta:_r(g)}}e.forEach(u=>r(u));function p(){n.length=0,o.clear()}return{addRoute:r,resolve:c,removeRoute:l,clearRoutes:p,getRoutes:i,getRecordMatcher:s}}function Dn(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function Bn(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:Sr(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}};return Object.defineProperty(t,"mods",{value:{}}),t}function Sr(e){const t={},n=e.props||!1;if("component"in e)t.default=n;else for(const o in e.components)t[o]=typeof n=="object"?n[o]:n;return t}function Fn(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function _r(e){return e.reduce((t,n)=>Q(t,n.meta),{})}function Er(e,t){let n=0,o=t.length;for(;n!==o;){const r=n+o>>1;Mo(e,t[r])<0?o=r:n=r+1}const s=Rr(e);return s&&(o=t.lastIndexOf(s,o-1)),o}function Rr(e){let t=e;for(;t=t.parent;)if(Po(t)&&Mo(e,t)===0)return t}function Po({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Hn(e){const t=re(Pt),n=re(Co),o=K(()=>{const a=y(e.to);return t.resolve(a)}),s=K(()=>{const{matched:a}=o.value,{length:c}=a,p=a[c-1],u=n.matched;if(!p||!u.length)return-1;const m=u.findIndex(ot.bind(null,p));if(m>-1)return m;const f=Wn(a[c-2]);return c>1&&Wn(p)===f&&u[u.length-1].path!==f?u.findIndex(ot.bind(null,a[c-2])):m}),r=K(()=>s.value>-1&&Pr(n.params,o.value.params)),l=K(()=>s.value>-1&&s.value===n.matched.length-1&&Io(n.params,o.value.params));function i(a={}){if(Mr(a)){const c=t[y(e.replace)?"replace":"push"](y(e.to)).catch(ft);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:o,href:K(()=>o.value.href),isActive:r,isExactActive:l,navigate:i}}function Ir(e){return e.length===1?e[0]:e}const Ar=X({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Hn,setup(e,{slots:t}){const n=et(Hn(e)),{options:o}=re(Pt),s=K(()=>({[zn(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[zn(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const r=t.default&&Ir(t.default(n));return e.custom?r:tt("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},r)}}}),$r=Ar;function Mr(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Pr(e,t){for(const n in t){const o=t[n],s=e[n];if(typeof o=="string"){if(o!==s)return!1}else if(!Se(s)||s.length!==o.length||o.some((r,l)=>r.valueOf()!==s[l].valueOf()))return!1}return!0}function Wn(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const zn=(e,t,n)=>e??t??n,Or=X({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=re(nn),s=K(()=>e.route||o.value),r=re(An,0),l=K(()=>{let c=y(r);const{matched:p}=s.value;let u;for(;(u=p[c])&&!u.components;)c++;return c}),i=K(()=>s.value.matched[l.value]);ge(An,K(()=>l.value+1)),ge(Ps,i),ge(nn,s);const a=D();return Be(()=>[a.value,i.value,e.name],([c,p,u],[m,f,S])=>{p&&(p.instances[u]=c,f&&f!==p&&c&&c===m&&(p.leaveGuards.size||(p.leaveGuards=f.leaveGuards),p.updateGuards.size||(p.updateGuards=f.updateGuards))),c&&p&&(!f||!ot(p,f)||!m)&&(p.enterCallbacks[u]||[]).forEach(I=>I(c))},{flush:"post"}),()=>{const c=s.value,p=e.name,u=i.value,m=u&&u.components[p];if(!m)return Un(n.default,{Component:m,route:c});const f=u.props[p],S=f?f===!0?c.params:typeof f=="function"?f(c):f:null,b=tt(m,Q({},S,t,{onVnodeUnmounted:g=>{g.component.isUnmounted&&(u.instances[p]=null)},ref:a}));return Un(n.default,{Component:b,route:c})||b}}});function Un(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Oo=Or;function Nr(e){const t=xr(e.routes,e),n=e.parseQuery||lr,o=e.stringifyQuery||On,s=e.history,r=ct(),l=ct(),i=ct(),a=un(Pe);let c=Pe;Ke&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const p=zt.bind(null,d=>""+d),u=zt.bind(null,Vs),m=zt.bind(null,kt);function f(d,O){let M,N;return Ao(d)?(M=t.getRecordMatcher(d),N=O):N=d,t.addRoute(N,M)}function S(d){const O=t.getRecordMatcher(d);O&&t.removeRoute(O)}function I(){return t.getRoutes().map(d=>d.record)}function b(d){return!!t.getRecordMatcher(d)}function g(d,O){if(O=Q({},O||a.value),typeof d=="string"){const W=Ut(n,d,O.path),ae=t.resolve({path:W.path},O),Fe=s.createHref(W.fullPath);return Q(W,ae,{params:m(ae.params),hash:kt(W.hash),redirectedFrom:void 0,href:Fe})}let M;if(d.path!=null)M=Q({},d,{path:Ut(n,d.path,O.path).path});else{const W=Q({},d.params);for(const ae in W)W[ae]==null&&delete W[ae];M=Q({},d,{params:u(W)}),O.params=u(O.params)}const N=t.resolve(M,O),j=d.hash||"";N.params=p(m(N.params));const oe=Ks(o,Q({},d,{hash:zs(j),path:N.path})),V=s.createHref(oe);return Q({fullPath:oe,hash:j,query:o===On?ar(d.query):d.query||{}},N,{redirectedFrom:void 0,href:V})}function $(d){return typeof d=="string"?Ut(n,d,a.value.path):Q({},d)}function w(d,O){if(c!==d)return nt(le.NAVIGATION_CANCELLED,{from:O,to:d})}function k(d){return C(d)}function h(d){return k(Q($(d),{replace:!0}))}function v(d,O){const M=d.matched[d.matched.length-1];if(M&&M.redirect){const{redirect:N}=M;let j=typeof N=="function"?N(d,O):N;return typeof j=="string"&&(j=j.includes("?")||j.includes("#")?j=$(j):{path:j},j.params={}),Q({query:d.query,hash:d.hash,params:j.path!=null?{}:d.params},j)}}function C(d,O){const M=c=g(d),N=a.value,j=d.state,oe=d.force,V=d.replace===!0,W=v(M,N);if(W)return C(Q($(W),{state:typeof W=="object"?Q({},j,W.state):j,force:oe,replace:V}),O||M);const ae=M;ae.redirectedFrom=O;let Fe;return!oe&&Js(o,N,M)&&(Fe=nt(le.NAVIGATION_DUPLICATED,{to:ae,from:N}),te(N,N,!0,!1)),(Fe?Promise.resolve(Fe):T(ae,N)).catch(pe=>$e(pe)?$e(pe,le.NAVIGATION_GUARD_REDIRECT)?pe:ke(pe):ie(pe,ae,N)).then(pe=>{if(pe){if($e(pe,le.NAVIGATION_GUARD_REDIRECT))return C(Q({replace:V},$(pe.to),{state:typeof pe.to=="object"?Q({},j,pe.to.state):j,force:oe}),O||ae)}else pe=Y(ae,N,!0,V,j);return J(ae,N,pe),pe})}function x(d,O){const M=w(d,O);return M?Promise.reject(M):Promise.resolve()}function A(d){const O=L.values().next().value;return O&&typeof O.runWithContext=="function"?O.runWithContext(d):d()}function T(d,O){let M;const[N,j,oe]=ir(d,O);M=Vt(N.reverse(),"beforeRouteLeave",d,O);for(const W of N)W.leaveGuards.forEach(ae=>{M.push(Te(ae,d,O))});const V=x.bind(null,d,O);return M.push(V),B(M).then(()=>{M=[];for(const W of r.list())M.push(Te(W,d,O));return M.push(V),B(M)}).then(()=>{M=Vt(j,"beforeRouteUpdate",d,O);for(const W of j)W.updateGuards.forEach(ae=>{M.push(Te(ae,d,O))});return M.push(V),B(M)}).then(()=>{M=[];for(const W of oe)if(W.beforeEnter)if(Se(W.beforeEnter))for(const ae of W.beforeEnter)M.push(Te(ae,d,O));else M.push(Te(W.beforeEnter,d,O));return M.push(V),B(M)}).then(()=>(d.matched.forEach(W=>W.enterCallbacks={}),M=Vt(oe,"beforeRouteEnter",d,O,A),M.push(V),B(M))).then(()=>{M=[];for(const W of l.list())M.push(Te(W,d,O));return M.push(V),B(M)}).catch(W=>$e(W,le.NAVIGATION_CANCELLED)?W:Promise.reject(W))}function J(d,O,M){i.list().forEach(N=>A(()=>N(d,O,M)))}function Y(d,O,M,N,j){const oe=w(d,O);if(oe)return oe;const V=O===Pe,W=Ke?history.state:{};M&&(N||V?s.replace(d.fullPath,Q({scroll:V&&W&&W.scroll},j)):s.push(d.fullPath,j)),a.value=d,te(d,O,M,V),ke()}let F;function H(){F||(F=s.listen((d,O,M)=>{if(!_.listening)return;const N=g(d),j=v(N,_.currentRoute.value);if(j){C(Q(j,{replace:!0,force:!0}),N).catch(ft);return}c=N;const oe=a.value;Ke&&or(Pn(oe.fullPath,M.delta),Ot()),T(N,oe).catch(V=>$e(V,le.NAVIGATION_ABORTED|le.NAVIGATION_CANCELLED)?V:$e(V,le.NAVIGATION_GUARD_REDIRECT)?(C(Q($(V.to),{force:!0}),N).then(W=>{$e(W,le.NAVIGATION_ABORTED|le.NAVIGATION_DUPLICATED)&&!M.delta&&M.type===sn.pop&&s.go(-1,!1)}).catch(ft),Promise.reject()):(M.delta&&s.go(-M.delta,!1),ie(V,N,oe))).then(V=>{V=V||Y(N,oe,!1),V&&(M.delta&&!$e(V,le.NAVIGATION_CANCELLED)?s.go(-M.delta,!1):M.type===sn.pop&&$e(V,le.NAVIGATION_ABORTED|le.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),J(N,oe,V)}).catch(ft)}))}let U=ct(),Z=ct(),G;function ie(d,O,M){ke(d);const N=Z.list();return N.length?N.forEach(j=>j(d,O,M)):console.error(d),Promise.reject(d)}function we(){return G&&a.value!==Pe?Promise.resolve():new Promise((d,O)=>{U.add([d,O])})}function ke(d){return G||(G=!d,H(),U.list().forEach(([O,M])=>d?M(d):O()),U.reset()),d}function te(d,O,M,N){const{scrollBehavior:j}=e;if(!Ke||!j)return Promise.resolve();const oe=!M&&sr(Pn(d.fullPath,0))||(N||!M)&&history.state&&history.state.scroll||null;return ve().then(()=>j(d,O,oe)).then(V=>V&&nr(V)).catch(V=>ie(V,d,O))}const Ae=d=>s.go(d);let Me;const L=new Set,_={currentRoute:a,listening:!0,addRoute:f,removeRoute:S,clearRoutes:t.clearRoutes,hasRoute:b,getRoutes:I,resolve:g,options:e,push:k,replace:h,go:Ae,back:()=>Ae(-1),forward:()=>Ae(1),beforeEach:r.add,beforeResolve:l.add,afterEach:i.add,onError:Z.add,isReady:we,install(d){d.component("RouterLink",$r),d.component("RouterView",Oo),d.config.globalProperties.$router=_,Object.defineProperty(d.config.globalProperties,"$route",{enumerable:!0,get:()=>y(a)}),Ke&&!Me&&a.value===Pe&&(Me=!0,k(s.location).catch(N=>{}));const O={};for(const N in Pe)Object.defineProperty(O,N,{get:()=>a.value[N],enumerable:!0});d.provide(Pt,_),d.provide(Co,rs(O)),d.provide(nn,a);const M=d.unmount;L.add(d),d.unmount=function(){L.delete(d),L.size<1&&(c=Pe,F&&F(),F=null,a.value=Pe,Me=!1,G=!1),M()}}};function B(d){return d.reduce((O,M)=>O.then(()=>A(M)),Promise.resolve())}return _}function No(e){if(e===0)return"empty";for(const t of[null,"kB","MB","GB","TB","PB","EB"]){if(e<1e4)return e.toLocaleString().replace(","," ")+(t?` ${t}`:"");e=Math.round(e/1e3)}return"huge"}function To(e){const t=new Date(e*1e3),n=new Date,o=t.getTime()-n.getTime(),s=Math.abs(o),r=new Intl.RelativeTimeFormat("en",{numeric:"auto"});if(s<=5e3)return"now";if(s<=6e4)return r.format(Math.round(o/1e3),"second").replace(" ago","").replaceAll(" "," ");if(s<=36e5)return r.format(Math.round(o/6e4),"minute").replace("utes","").replace("ute","").replaceAll(" "," ");if(s<=864e5)return r.format(Math.round(o/36e5),"hour").replaceAll(" "," ");if(s<=6048e5)return r.format(Math.round(o/864e5),"day").replaceAll(" "," ");let l=t.toLocaleDateString("en-ie",{weekday:"short",year:"numeric",month:"short",day:"numeric"}).replace("Sept","Sep");return l.length===14&&(l=l.replace(" "," ")),l=l.replaceAll(" "," ").replace(" "," "),l=l.slice(0,-4)+l.slice(-2),l}const Nt=new Intl.Collator("en",{sensitivity:"base",numeric:!0,usage:"search"});function Tr(e){return"^"+e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase()+"$"}class It{loc="";key="";size=0;mtime=0;haystack="";dir=!1;_name="";constructor(t={}){const{name:n,...o}=t;Object.assign(this,o),n&&(this.name=n)}get name(){return this._name}set name(t){if(t.includes("/")||t.startsWith("."))throw Error(`Invalid name: ${t}`);this._name=t,this.haystack=Tr(t)}get sizedisp(){return No(this.size)}get modified(){return To(this.mtime)}get url(){const t=this.loc?`${this.loc}/${this.name}`:this.name;return this.dir?"/#/"+`${t}/`.replaceAll("#","%23"):`/files/${t}`.replaceAll("?","%3F").replaceAll("#","%23")}get urlrouter(){return this.url.replace(/^\/#/,"")}get img(){return this.dir?!1:["jpg","jpeg","png","gif","webp","avif","heic","heif","svg"].includes(this.ext)}get previewable(){return this.dir?!1:this.img?!0:["mp4","mkv","webm","ogg","mp3","flac","aac","pdf"].includes(this.ext)}get previewurl(){return this.url.replace(/^\/files/,"/preview")}get ext(){const t=this.name.lastIndexOf(".");return t===-1||t===this.name.length-1?"":this.name.slice(t+1).toLowerCase()}}const At="paskia-iframe",jn="paskia-dialog",Lr=`body::before {
|
|
2
|
+
content: '';
|
|
3
|
+
position: fixed;
|
|
4
|
+
inset: 0;
|
|
5
|
+
z-index: 1099;
|
|
6
|
+
background: transparent;
|
|
7
|
+
backdrop-filter: blur(0) brightness(1);
|
|
8
|
+
-webkit-backdrop-filter: blur(0) brightness(1);
|
|
9
|
+
pointer-events: none;
|
|
10
|
+
visibility: hidden;
|
|
11
|
+
transition: all 0.2s ease-out;
|
|
12
|
+
}
|
|
13
|
+
body.paskia-backdrop::before {
|
|
14
|
+
-webkit-backdrop-filter: blur(.2rem) brightness(0.5);
|
|
15
|
+
backdrop-filter: blur(.2rem) brightness(0.5);
|
|
16
|
+
visibility: visible;
|
|
17
|
+
}
|
|
18
|
+
body.paskia-backdrop {
|
|
19
|
+
overflow: auto;
|
|
20
|
+
}
|
|
21
|
+
#${At} {
|
|
22
|
+
border: none;
|
|
23
|
+
position: fixed;
|
|
24
|
+
top: 0;
|
|
25
|
+
left: 0;
|
|
26
|
+
width: 100%;
|
|
27
|
+
height: 100%;
|
|
28
|
+
z-index: 9999;
|
|
29
|
+
color-scheme: auto;
|
|
30
|
+
background: transparent;
|
|
31
|
+
}
|
|
32
|
+
`;let Le=null,He=null,Ye=null,Xe=null,Vn=!1,_t=0;function Dr(){if(document.getElementById(jn))return;const e=document.createElement("style");e.id=jn,e.textContent=Lr,document.head.insertBefore(e,document.head.firstChild)}class Ze extends Error{constructor(){super("Authentication cancelled"),this.name="AuthCancelledError"}}function hn(){_t++,document.body.classList.add("paskia-backdrop")}function Lo(){_t=Math.max(0,_t-1),_t===0&&document.body.classList.remove("paskia-backdrop")}function Br(){return!!document.getElementById(At)}function ln(){Le&&(Le.remove(),Le=null,Lo())}function Fr(e){const t=e.data;if(t?.type)switch(t.type){case"auth-success":ln(),Ye&&(Ye(),He=null,Ye=null,Xe=null);break;case"auth-back":ln(),Xe&&(Xe(new Ze),He=null,Ye=null,Xe=null);break}}function Hr(){Vn||typeof window<"u"&&(window.addEventListener("message",Fr),Vn=!0)}function gn(e,t="Authentication"){return Dr(),Hr(),He||(document.getElementById(At)?(He=new Promise((n,o)=>{Ye=n,Xe=o}),He):(He=new Promise((n,o)=>{Ye=n,Xe=o}),ln(),hn(),Le=document.createElement("iframe"),Le.id=At,Le.title=t,Le.src=e,document.body.appendChild(Le),He))}const Wr=1e3;class zr extends Error{constructor(t,n,o){super(o?.detail||`Request failed: ${n.status}`),this.name="ApiError",this.url=t,this.status=n.status,this.statusText=n.statusText,this.data=o}}class qt extends Error{constructor(t,n=null){super(t),this.name="NetworkError",this.originalError=n}}async function Do(e,t={}){const{timeout:n=Wr,...o}=t;for(o.credentials=o.credentials||"include";;){let s;try{s=await fetch(e,{...o,signal:n?AbortSignal.timeout(n):void 0})}catch(r){const l=r;throw l.name==="TimeoutError"?new qt("Request timed out",l):l.name==="AbortError"?r:l.name==="TypeError"&&l.message==="Failed to fetch"?new qt("Unable to connect to server",l):new qt(l.message||"Network error",l)}if(s.status===401||s.status===403){let r=null;try{r=await s.clone().json()}catch{}if(r?.auth?.iframe&&window===window.top){await gn(r.auth.iframe);continue}}return s}}async function xt(e,t={}){return Ur(e,t,Do)}async function Ur(e,t={},n=fetch){const o={Accept:"application/json",...t.headers};let s;t.body&&typeof t.body=="object"&&!(t.body instanceof FormData)?(o["Content-Type"]="application/json",s=JSON.stringify(t.body)):s=t.body;const r={...t,headers:o,body:s},l=await n(e,r),i=await l.json();if(!l.ok)throw new zr(e,l,i);return i}const bt="/api/control",jr="/api/upload",Vr="/api/watch";let xe=[],Et=500,pt=null,mt=!1;const Bo=()=>{xe=[]},qr=()=>{const e=localStorage["cista-files"];if(!e)return!1;const t=se();try{return xe=JSON.parse(e),t.updateRoot(xe),console.log(`Loaded session with ${xe.length} items cached`),!0}catch(n){return console.log("Loading session failed",n),!1}},Fo=()=>{localStorage["cista-files"]=JSON.stringify(xe)},Ue=(e,t)=>{const n=new WebSocket(new URL(e,location.origin.replace(/^http/,"ws")));for(const[o,s]of Object.entries(t))n.addEventListener(o,s);return n};async function Ho(e){const t=e.error?.auth?.iframe;if(t){const n=se();n.clearSensitiveData(),Bo(),mt=!0,n.authInProgress=!0,n.error="",Ce!==null&&(clearTimeout(Ce),Ce=null);try{await gn(t),mt=!1,n.authInProgress=!1,Tt()}catch(o){mt=!1,n.authInProgress=!1,o instanceof Ze?(console.log("User cancelled authentication"),n.dialog="accessdenied"):console.error("Auth iframe error:",o)}return!0}return!1}const Tt=()=>{Ce!==null&&(clearTimeout(Ce),Ce=null);const e=se();e.error!=="Reconnecting..."&&(e.error="Connecting..."),console.log(e.error),pt=Ue(Vr,{message:Jr,close:Kr}),pt.addEventListener("message",t=>{if(e.connected)return;const n=JSON.parse(t.data);if("error"in n){n.error.code===401||n.error.code===403?Ho(n):e.error=n.error.message;return}"server"in n&&(console.log("Connected to backend",n),e.server=n.server,e.connected=!0,Et=500,e.error="",n.user?e.login(n.user.username,n.user.privileged):e.isUserLogged&&e.logout())})},Gr=()=>{pt&&(pt.close(),pt=null)},an=()=>{mt=!1,Ce!==null&&(clearTimeout(Ce),Ce=null),Tt()};let Ce=null;const Kr=e=>{const t=se();if(mt||Br()){console.log("Skipping reconnect - awaiting authentication");return}t.connected&&(console.warn("Disconnected from server",e),t.connected=!1,t.error="Reconnecting..."),Ce!==null&&clearTimeout(Ce),Et=Math.min(5e3,Et+500),Ce=setTimeout(Tt,Et)},Jr=e=>{const t=JSON.parse(e.data);switch(!0){case!!t.root:Yr(t);break;case!!t.update:Xr(t);break;case!!t.space:console.log("Watch space",t.space);break;case!!t.error:Zr(t);break}};function Yr({root:e}){const t=se();console.log("Watch root",e),t.updateRoot(e),xe=e,Fo()}function Xr(e){const t=se(),n=e.update;if(console.log("Watch update",n),!xe)return console.error("Watch update before root");let o=[],s=0;for(const[r,l]of n)r==="k"?(o.push(...xe.slice(s,s+l)),s+=l):r==="d"?s+=l:r==="i"?o.push(...l):console.log("Unknown update action",r,l);if(s!=xe.length)throw Error(`Tree update out of sync, number of entries mismatch: got ${s}, expected ${xe.length}, new tree ${o.length}`);t.updateRoot(o),xe=o,Fo()}function Zr(e){if(se(),e.error.code===401||e.error.code===403){Ho(e);return}}const Wo={name:(e,t)=>Nt.compare(e.name,t.name),modified:(e,t)=>t.mtime-e.mtime,size:(e,t)=>t.size-e.size},zo=(e,t)=>{if(!t)return e;const n=[...e];return n.sort(Wo[t]),n},Qr=(e,t)=>{if(!t)return e;const n=Wo[t],o=new Map;for(const i of e){const a=i.loc;o.has(a)||o.set(a,[]),o.get(a).push(i)}for(const i of o.values())i.sort(n);const s=new Map;for(const[i,a]of o)s.set(i,a[0]);const r=[...o.keys()].sort((i,a)=>t==="name"?Nt.compare(i,a):n(s.get(i),s.get(a))),l=[];for(const i of r)l.push(...o.get(i));return l};function el(e){return new Worker("/assets/searchWorker-CxfnO8mP.js",{name:e?.name})}let Gt=null,qn=0;function Gn(){return Gt||(Gt=new el),Gt}const se=wo("main",{state:()=>({document:[],selected:new Set([]),query:"",searchResults:[],searchLoading:!1,fileExplorer:null,error:"",toast:"",toastTimeout:null,connected:!1,authInProgress:!1,cursor:"",server:{},dialog:"",uprogress:{},dprogress:{},prefs:{gallery:!1,sortListing:"",sortFiltered:""},user:{username:"",privileged:!1,isLoggedIn:!1}}),persist:{pick:["prefs","cursor","selected"],serializer:{deserialize:e=>{const t=JSON.parse(e);return t.selected=new Set(t.selected),t},serialize:e=>(e.selected=Array.from(e.selected),JSON.stringify(e))}},actions:{updateRoot(e){const t=[];let n=[];for(const[o,s,r,l,i,a]of e)n=n.slice(0,o-1),t.push(new It({name:s,loc:o?n.join("/"):"/",key:r,size:i,mtime:l,dir:!a})),n.push(s);this.document=t,this.syncSearchWorker()},showToast(e,t=3e3){this.toastTimeout&&(clearTimeout(this.toastTimeout),this.toastTimeout=null),this.toast=e,this.toastTimeout=setTimeout(()=>{this.toast="",this.toastTimeout=null},t)},clearToast(){this.toastTimeout&&(clearTimeout(this.toastTimeout),this.toastTimeout=null),this.toast=""},syncSearchWorker(){const e=Gn(),t=this.document.map(n=>({loc:n.loc,name:n.name,key:n.key,size:n.size,mtime:n.mtime,dir:n.dir}));e.postMessage({type:"update",documents:t})},search(e,t){const n=Gn(),o=++qn;if(!e){this.searchResults=[],this.searchLoading=!1;return}this.searchLoading=!0,n.onmessage=s=>{s.data.id===qn&&(this.searchResults=s.data.docs.map(r=>new It(r)),s.data.done&&(this.searchLoading=!1))},n.postMessage({type:"search",query:e,loc:t,id:o})},login(e,t){this.user.username=e,this.user.privileged=t,this.user.isLoggedIn=!0,this.dialog="",this.connected||an()},clearSensitiveData(){localStorage.removeItem("cista-files"),this.document=[],this.selected.clear(),this.user.username="",this.user.privileged=!1,this.user.isLoggedIn=!1,this.connected=!1,this.dialog="",this.cursor=""},async logout(){console.log("Logout");try{const e=await fetch("/auth/api/logout",{method:"POST"});if(!e.ok){const t=await e.json().catch(()=>({}));this.error=t.message||t.detail||"Logout failed";return}}catch{this.error="Logout failed";return}this.clearSensitiveData(),an()},toggleSort(e){this.query?this.prefs.sortFiltered=this.prefs.sortFiltered===e?"":e:this.prefs.sortListing=this.prefs.sortListing===e?"":e},sort(e){this.query?this.prefs.sortFiltered=e:this.prefs.sortListing=e},focusBreadcrumb(){document.querySelector(".breadcrumb").focus()},cancelDownloads(){location.reload()},cancelUploads(){location.reload()}},getters:{sortOrder(){return this.query?this.prefs.sortFiltered:this.prefs.sortListing},isUserLogged(){return this.user.isLoggedIn},recentDocuments(){return zo(this.document,"modified")},selectedFiles(){const e=this.selected,t=new Set,n={missing:new Set,docs:{},keys:[],recursive:[]};for(const r of this.document)e.has(r.key)&&(t.add(r.key),n.keys.push(r.key),n.docs[r.key]=r);for(const r of e)t.has(r)||n.missing.add(r);const o=new Set;function s(r,l,i){if(!i.dir&&o.has(r))throw Error(`Multiple selections conflict for: ${r}`);o.add(r),n.recursive.push([r,l,i])}for(const r of n.keys){const l=n.docs[r],i=l.loc?`${l.loc}/${l.name}`:l.name,a=l.loc.length;s(l.name,i,l);for(const c of this.document)if(c.loc===i||c.loc.startsWith(i)&&c.loc[i.length]==="/"){const p=c.loc?`${c.loc}/${c.name}`:c.name,u=p.slice(a);s(u,p,c)}}return n.recursive.sort((r,l)=>Nt.compare(r[0],l[0])),n}}}),Uo=e=>{const t=se(),n=e.join("/");return t.document.some(o=>(o.loc?`${o.loc}/${o.name}`:o.name)===n)},Kt=e=>{const t=[".tar.gz",".tar.bz2",".tar.xz",".tar.zst"],n=e.toLowerCase();for(const s of t)if(n.endsWith(s))return e.slice(0,-s.length);const o=e.lastIndexOf(".");if(o>0){const s=e.slice(o+1);if(s.length>=2&&s.length<=5&&/^[a-zA-Z0-9]+$/.test(s))return e.slice(0,o)}return e},tl=e=>{const t=e.map(s=>s.name);if(t.length===1)return Kt(t[0]);const n=e.map(s=>s.loc);return n.every(s=>s===n[0])&&n[0]?n[0].split("/").pop():t.length<=3?t.map(Kt).join("."):`${Kt(t[0])}.etc`},nl=["aria-current"],ol=["href","aria-current","onClick","title"],vn=X({__name:"BreadCrumb",props:{path:{},primary:{type:Boolean}},setup(e){const t=as,n=pn(),o=[],s=(u,m)=>{m&&(o[u]=m)};ls(()=>{o.length=1});const r=e,l=D([]),i=u=>u==r.path.length?"location":void 0,a=()=>{ve(()=>{const u=r.path.length;u<o.length&&o[u].focus()})},c=u=>{if(!o[u])throw Error(`No link at index ${u} (path: ${r.path})`);const f=u?`/${l.value.slice(0,u).join("/")}/`:"/",S=l.value.length?`/${l.value.join("/")}/`:"/",I=decodeURIComponent(location.hash.slice(1).split("//")[0]??""),b=f.replaceAll("?","%3F").replaceAll("#","%23");i(u)?(l.value.splice(u),n.push(b)):S.startsWith(I)?n.replace(b):n.push(b)},p=u=>{const m=r.path.length+u;m<0||m>l.value.length||c(m)};return Ie(()=>{const u=l.value.slice(0,r.path.length);if(!u.every((f,S)=>f===r.path[S]))l.value=r.path;else if(r.path.length>u.length)l.value=u.concat(r.path.slice(u.length));else for(let f=r.path.length;f<l.value.length;++f)if(!Uo(l.value.slice(0,f+1))){l.value=l.value.slice(0,f);break}r.primary&&ve(()=>{const f=document.activeElement;(!f||[...o,document.body].includes(f))&&a()})}),(u,m)=>(R(),P("nav",{class:"breadcrumb","aria-label":"Breadcrumb",onKeydown:[m[1]||(m[1]=Qe(de(f=>p(-1),["stop"]),["left"])),m[2]||(m[2]=Qe(de(f=>p(1),["stop"]),["right"]))],onKeyup:m[3]||(m[3]=Qe(f=>p(0),["enter"])),onFocus:a,tabindex:"0"},[E("a",{href:"#/",ref:f=>s(0,f),class:me(["home",{current:!!i(0)}]),"aria-current":i(0),onClick:m[0]||(m[0]=de(f=>c(0),["prevent"])),title:"/"},[(R(),ee(dn(y(t))))],10,nl),(R(!0),P(fe,null,st(l.value,(f,S)=>(R(),P("a",{key:S,href:`/#/${l.value.slice(0,S+1).join("/")}/`,class:me({current:!!i(S+1)}),"aria-current":i(S+1),onClick:de(I=>c(S+1),["prevent"]),ref_for:!0,ref:I=>s(S+1,I),title:`/${l.value.slice(0,S+1).join("/")}`},ne(f),11,ol))),128))],32))}}),sl={class:"action-button"},Lt=X({__name:"SvgButton",props:{name:{}},setup(e){return(t,n)=>(R(),P("button",sl,[(R(),ee(dn(y(is)[e.name]))),ue(t.$slots,"default")]))}}),rl=X({__name:"UploadButton",props:{path:Array},setup(e){const t=D(),n=D(),o=se(),s=e;function r(k){const h=Array.from(k.clipboardData?.items??[]),v=[],C=[];for(const x of h){if(x.kind!=="file")continue;const A=x.webkitGetAsEntry();if(A?.isFile){const T=x.getAsFile();T&&v.push(T)}else A?.isDirectory&&C.push(A)}if(v.length||C.length){k.preventDefault(),a(v);for(const x of C)l(x,`${s.path.join("/")}/${x.name}`)}}const l=async(k,h)=>{const v=k.createReader(),C=await new Promise(A=>v.readEntries(A)),x=[];for(const A of C){const T=`${h}/${A.name}`;if(A.isFile){const J=await new Promise(Y=>A.file(Y));x.push({file:J,cloudName:T,cloudPos:0})}else A.isDirectory&&await l(A,T)}x.length&&c(x)};function i(k){k.preventDefault();const h=k.target,v=Array.from((h??k.dataTransfer)?.files??[]);h&&(h.value=""),v.length&&a(v)}const a=k=>{const h=s.path.join("/");let v=[];for(const C of k)v.push({file:C,cloudName:h+"/"+(C.webkitRelativePath||C.name),cloudPos:0});c(v)},c=k=>{const h=k.filter(v=>v.cloudName.includes("/."));h.length&&(o.showToast("Won't upload dotfiles"),console.log("Dotfiles omitted",h),k=k.filter(v=>!v.cloudName.includes("/."))),k.length&&(k.sort((v,C)=>Nt.compare(v.cloudName,C.cloudName)),I=[...I,...k],S(k),w())},p={total:0,xfer:0,t0:0,tlast:0,statbytes:0,statdur:0,files:[],filestart:0,fileidx:0,filecount:0,filename:"",filesize:0,filepos:0,status:"idle"};o.uprogress={...p},setInterval(()=>{Date.now()-o.uprogress.tlast>3e3?(o.uprogress.statbytes=0,o.uprogress.statdur=1):(o.uprogress.statbytes*=.9,o.uprogress.statdur*=.9)},100);const u=({name:k,size:h,start:v,end:C})=>{if(k!==o.uprogress.filename)return;const x=Date.now();o.uprogress.xfer=o.uprogress.filestart+C,o.uprogress.filepos=C,o.uprogress.statbytes+=C-v,o.uprogress.statdur+=x-o.uprogress.tlast,o.uprogress.tlast=x,C===h&&(o.uprogress.filestart+=h,m(),++o.uprogress.fileidx>=o.uprogress.filecount&&f())},m=()=>{const k=o.uprogress.files.shift();if(!k)return f();o.uprogress.filepos=0,o.uprogress.filesize=k.file.size,o.uprogress.filename=k.cloudName},f=()=>{Object.assign(o.uprogress,p),o.uprogress.t0=Date.now(),o.uprogress.tlast=o.uprogress.t0+1},S=k=>{o.uprogress.files.length===0&&f(),o.uprogress.total+=k.reduce((h,v)=>h+v.file.size,0),o.uprogress.filecount+=k.length,o.uprogress.files=[...o.uprogress.files,...k],m()};let I=[];const b=async()=>await new Promise(k=>{const h=Ue(jr,{open(v){k(h)},error(v){console.error("Upload socket error",v),o.error="Upload socket error"},message(v){const C=JSON.parse(v.data);if("error"in C){console.error("Upload socket error",C.error),o.error=C.error.message;return}C.status==="ack"?u(C.req):console.log("Unknown upload response",C)}});h.sendMsg=v=>h.send(JSON.stringify(v)),h.sendData=async v=>{o.uprogress.status="uploading",await new Promise(C=>{const x=setInterval(()=>{h.bufferedAmount>1048576||(C(void 0),clearInterval(x))},1)}),o.uprogress.status="processing",h.send(v)}}),g=async()=>{const k=await b();for(;I.length;){const h=I[0],v=h.cloudPos,C=Math.min(h.file.size,v+(1<<20)),x={name:h.cloudName,size:h.file.size,start:v,end:C},A=h.file.slice(v,C);h.cloudPos=C,k.sendMsg(x),await k.sendData(A),h.cloudPos===h.file.size&&I.shift()}I.length&&w(),o.uprogress.status="idle",$=!1};let $=!1;const w=()=>{$===!1&&($=setTimeout(()=>{$=!0,g()},0))};return be(()=>{addEventListener("dragover",i),addEventListener("drop",i),addEventListener("paste",r)}),yt(()=>{removeEventListener("paste",r),removeEventListener("dragover",i),removeEventListener("drop",i)}),(k,h)=>{const v=Lt;return R(),P(fe,null,[E("template",null,[E("input",{ref_key:"fileInput",ref:t,onChange:i,type:"file",multiple:""},null,544),E("input",{ref_key:"folderInput",ref:n,onChange:i,type:"file",webkitdirectory:""},null,544)]),z(v,{name:"add-file","data-tooltip":"Upload files",onClick:h[0]||(h[0]=C=>t.value.click())}),z(v,{name:"add-folder","data-tooltip":"Upload folder",onClick:h[1]||(h[1]=C=>n.value.click())})],64)}}}),ll=wo("ssoAuth",()=>{const e=K(()=>se().server?.paskia===!0);function t(){se().clearSensitiveData(),Bo()}return{isExternalAuth:e,clearDataOnUnauth:t}});let De=null;function al(){return De!==null}function il(e){De&&jo(),De=e}function Kn(e){e===De&&(De=null)}function jo(){De&&(De.closeMenu(),De=null)}const Ee={defaultDirection:"br",defaultMinWidth:100,defaultMaxWidth:600,defaultZindex:100,defaultZoom:1,defaultAdjustPadding:{x:0,y:10}};function ht(e,t){let n=e.offsetTop;return e.offsetParent!=null&&e.offsetParent!=t&&(n-=e.offsetParent.scrollTop,n+=ht(e.offsetParent,t)),n}function gt(e,t){let n=e.offsetLeft;return e.offsetParent!=null&&e.offsetParent!=t&&(n-=e.offsetParent.scrollLeft,n+=gt(e.offsetParent,t)),n}function cl(e,t,n,o){return{x:gt(e,o)+t,y:ht(e,o)+n}}const Jt="mx-menu-default-container",ul="mx-menu-container-";let dl=0;function Vo(e){const{getContainer:t,zIndex:n}=e;if(t){const s=typeof t=="function"?t():t;if(s){let r=s.getAttribute("id");return r||(r=ul+dl++,s.setAttribute("id",r)),{eleId:r,container:s,isNew:!1}}}let o=document.getElementById(Jt);return o||(o=document.createElement("div"),o.setAttribute("id",Jt),o.setAttribute("class","mx-menu-ghost-host fullscreen"),document.body.appendChild(o)),o.style.zIndex=n?.toString()||Ee.defaultZindex.toString(),{eleId:Jt,container:o,isNew:!0}}function fl(e){let t=0;for(let n=0;n<e.length;n++){const o=e.charCodeAt(n);t=(t<<5)-t+o,t|=0}return t}function Jn(e){return typeof e=="number"?`${e}px`:e}const _e=X({props:{vnode:{type:null},data:{type:null,default:null}},setup(e){const{vnode:t,data:n}=Ve(e);return()=>typeof t.value=="function"?t.value(n.value):t.value}});function pl(e,t){const n={...e};return delete n[t],n}var ml=Object.defineProperty,hl=(e,t,n)=>t in e?ml(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Yn=(e,t,n)=>hl(e,typeof t!="symbol"?t+"":t,n);class Xn{constructor(t,n){Yn(this,"x",0),Yn(this,"y",0),this.x=t||0,this.y=n||0}set(t,n){this.x=t,this.y=n}substract(t){this.x-=t.x,this.y-=t.y}}function Zn(e){const{onDown:t,onMove:n,onUp:o}=e,s=new Xn,r=new Xn;let l;function i(c){c.stopPropagation(),r.set(c.x,c.y),r.substract(s),n(s,r,c,l)}function a(c){o(c,l),s.set(0,0),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",a)}return(c,p)=>t(c,p)?(l=p,s.set(c.x,c.y),document.addEventListener("mousemove",i),document.addEventListener("mouseup",a),c.stopPropagation(),!0):!1}function gl(e,t){let n=0;return{start(){n>0&&clearInterval(n),n=setInterval(()=>{n=0,t()},e)},stop(){n>0&&(clearInterval(n),n=0)}}}const ut=[],Qn=gl(100,()=>{for(const e of ut)e()});function vl(e,t,n,o){let s=0,r=0;function l(){e.value&&(t&&s!==e.value.offsetWidth&&t(e.value.offsetWidth),n&&r!==e.value.offsetHeight&&n(e.value.offsetHeight),s=e.value.offsetWidth,r=e.value.offsetHeight)}return{startResizeChecker(){Qn.start(),ut.push(l)},stopResizeChecker(){const i=ut.indexOf(l);i>=0&&ut.splice(i,1),ut.length===0&&Qn.stop()}}}const eo=140,yl=70,wl=X({__name:"ScrollRect",props:{scroll:{type:String,default:"both"},scrollBarAlwaysShow:{type:Boolean,default:!1},scrollBarBackgroundClickable:{type:Boolean,default:!1},height:{type:Number,default:void 0},width:{type:Number,default:void 0},maxHeight:{type:Number,default:void 0},maxWidth:{type:Number,default:void 0},containerClass:{type:String,default:""},containerStyle:{type:null}},emits:["scroll","resized"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=D(),l=D(),i=D(),a=D(),c=D(),p=D(),u=D(!1),m=K(()=>o.scroll==="horizontal"||o.scroll==="both"),f=K(()=>o.scroll==="vertical"||o.scroll==="both"),S=et({show:!1,size:0,sizeRaw:0,pos:0}),I=et({show:!1,size:0,sizeRaw:0,pos:0});let b=0,g=0,$=0,w=0,k=null;const h={attributes:!0,childList:!0};function v(){if(r.value){if(S.show){const _=r.value.offsetWidth/r.value.scrollWidth;S.sizeRaw=_*r.value.offsetWidth,S.size=_*100,S.pos=r.value.scrollLeft/(r.value.scrollWidth-r.value.offsetWidth)*(100-S.size),_>=1&&(S.show=!1)}if(I.show){const _=r.value.offsetHeight/r.value.scrollHeight;I.sizeRaw=_*r.value.offsetHeight,I.size=_*100,I.pos=r.value.scrollTop/(r.value.scrollHeight-r.value.offsetHeight)*(100-I.size),_>=1&&(I.show=!1)}s("scroll",r.value.scrollLeft,r.value.scrollTop)}}function C(_=!1){if(!r.value)return;let B=m.value,d=f.value;const O=B&&(b!==r.value.scrollWidth||$!==r.value.offsetWidth),M=f&&(g!==r.value.scrollHeight||w!==r.value.offsetHeight);if(!_&&!O&&!M)return;const N=window.getComputedStyle(r.value);(N.overflow==="hidden"||N.overflowX==="hidden")&&(B=!1),(N.overflow==="hidden"||N.overflowY==="hidden")&&(d=!1),S.show=B,I.show=d,v(),$=r.value.offsetWidth,w=r.value.offsetHeight,b=r.value.scrollWidth,g=r.value.scrollHeight,s("resized",b,g)}function x(_){var B;o.scroll=="horizontal"&&(_.deltaMode==0&&((B=r.value)==null||B.scrollTo({left:r.value.scrollLeft+(_.deltaY>0?eo:-140),behavior:"smooth"})),_.preventDefault(),_.stopPropagation())}function A(_){var B;_.deltaMode==0&&((B=r.value)==null||B.scrollTo({left:r.value.scrollLeft+(_.deltaY>0?eo:-140),behavior:"smooth"}),_.preventDefault(),_.stopPropagation())}function T(_){var B;_.deltaMode==0&&((B=r.value)==null||B.scrollTo({top:r.value.scrollTop+(_.deltaY>0?yl:-70),behavior:"smooth"}),_.preventDefault(),_.stopPropagation())}let J=0,Y=0,F=0,H=0;const U=Zn({onDown(_){return!i.value||!c.value?!1:(J=_.offsetX,Y=_.x-_.offsetX-c.value.offsetLeft,_.preventDefault(),u.value=!0,!0)},onMove(_,B,d){r.value&&i.value&&(we(d.x-J-Y),d.preventDefault(),d.stopPropagation())},onUp(){u.value=!1}}),Z=Zn({onDown(_){return!a.value||!p.value?!1:(F=_.offsetY,H=_.y-_.offsetY-p.value.offsetTop,_.preventDefault(),u.value=!0,!0)},onMove(_,B,d){r.value&&a.value&&(ke(d.y-F-H),d.preventDefault(),d.stopPropagation())},onUp(){u.value=!1}});function G(_){r.value&&(r.value.scrollLeft=_/100*(r.value.scrollWidth-r.value.offsetWidth))}function ie(_){r.value&&(r.value.scrollLeft=_/100*(r.value.scrollHeight-r.value.offsetHeight))}function we(_){r.value&&(r.value.scrollLeft=_/(r.value.offsetWidth-S.sizeRaw)*(r.value.scrollWidth-r.value.offsetWidth))}function ke(_){r.value&&(r.value.scrollTop=_/(r.value.offsetHeight-I.sizeRaw)*(r.value.scrollHeight-r.value.offsetHeight))}function te(_){o.scrollBarBackgroundClickable&&we(_.offsetX-S.sizeRaw/2)}function Ae(_){o.scrollBarBackgroundClickable&&ke(_.offsetY-I.sizeRaw/2)}const{startResizeChecker:Me,stopResizeChecker:L}=vl(r,()=>C(),()=>C());return be(()=>{ve(()=>{setTimeout(()=>C(!0),200),C(!0),Me(),k=new MutationObserver(()=>C()),k.observe(r.value,h)})}),$t(()=>{L(),k&&(k.disconnect(),k=null)}),t({refreshScrollState(){C(!0)},getScrollContainer(){return r.value},scrollTo(_,B){var d;(d=r.value)==null||d.scrollTo(_,B)},scrollToTop(){var _;(_=r.value)==null||_.scrollTo(0,0)},scrollToBottom(){var _;(_=r.value)==null||_.scrollTo(r.value.scrollWidth,r.value.scrollHeight)}}),(_,B)=>(R(),P("div",{ref_key:"scrollrect",ref:l,class:me(["vue-scroll-rect",e.scrollBarAlwaysShow?"always-show-scrollbar":"",e.scrollBarBackgroundClickable?"background-clickable":"",u.value?"dragging":""]),style:Je({width:e.width?`${e.width}px`:void 0,height:e.height?`${e.height}px`:void 0}),onWheel:x},[E("div",{ref_key:"container",ref:r,class:me(["scroll-content",e.scroll,e.containerClass]),style:Je({maxWidth:e.maxWidth?`${e.maxWidth}px`:void 0,maxHeight:e.maxHeight?`${e.maxHeight}px`:void 0,...e.containerStyle}),onScroll:v},[ue(_.$slots,"default")],38),S.show?ue(_.$slots,"scrollBarX",{key:0,scrollBarValue:S,onScroll:G},()=>[E("div",{ref_key:"scrollBarRefX",ref:i,class:"scrollbar horizontal",onClick:te,onWheel:A},[E("div",{class:"thumb",ref_key:"scrollBarThumbRefX",ref:c,style:Je({left:`${S.pos}%`,width:`${S.size}%`}),onMousedown:B[0]||(B[0]=(...d)=>y(U)&&y(U)(...d)),onWheel:A},null,36)],544)]):q("",!0),I.show?ue(_.$slots,"scrollBarY",{key:1,scrollBarValue:I,onScroll:ie},()=>[I.show?(R(),P("div",{key:0,ref_key:"scrollBarRefY",ref:a,class:"scrollbar vertical",onClick:Ae,onWheel:T},[E("div",{class:"thumb",ref_key:"scrollBarThumbRefY",ref:p,style:Je({top:`${I.pos}%`,height:`${I.size}%`}),onMousedown:B[1]||(B[1]=(...d)=>y(Z)&&y(Z)(...d)),onWheel:T},null,36)],544)):q("",!0)]):q("",!0)],38))}}),yn=(e,t)=>{const n=e.__vccOpts||e;for(const[o,s]of t)n[o]=s;return n},kl={},bl={class:"mx-checked-mark","aria-hidden":"true",viewBox:"0 0 1024 1024"},Cl=E("path",{d:"M129.3,428.6L52,512l345,372.5l575-620.8l-69.5-75L400.4,718.2L129.3,428.6z"},null,-1),xl=[Cl];function Sl(e,t){return R(),P("svg",bl,xl)}const _l=yn(kl,[["render",Sl]]),El={},Rl={class:"mx-right-arrow","aria-hidden":"true",viewBox:"0 0 1024 1024"},Il=E("path",{d:"M307.018 49.445c11.517 0 23.032 4.394 31.819 13.18L756.404 480.18c8.439 8.438 13.181 19.885 13.181 31.82s-4.741 23.38-13.181 31.82L338.838 961.376c-17.574 17.573-46.065 17.573-63.64-0.001-17.573-17.573-17.573-46.065 0.001-63.64L660.944 512 275.198 126.265c-17.574-17.573-17.574-46.066-0.001-63.64C283.985 53.839 295.501 49.445 307.018 49.445z"},null,-1),Al=[Il];function $l(e,t){return R(),P("svg",Rl,Al)}const Ml=yn(El,[["render",$l]]),Pl={class:"mx-item-row"},Ol=["xlink:href"],Nl={key:1,class:"label"},Tl={class:"mx-item-row"},Ll={class:"mx-shortcut"},wn=X({__name:"ContextMenuItem",props:{disabled:{type:Boolean,default:!1},hidden:{type:Boolean,default:!1},customRender:{type:Function,default:null},customClass:{type:String,default:""},clickHandler:{type:Function,default:null},label:{type:[String,Object,Function],default:""},icon:{type:[String,Object,Function],default:""},iconFontClass:{type:String,default:"iconfont"},checked:{type:Boolean,default:!1},shortcut:{type:String,default:""},svgIcon:{type:String,default:""},svgProps:{type:Object,default:null},preserveIconWidth:{type:Boolean,default:!0},showRightArrow:{type:Boolean,default:!1},hasChildren:{type:Boolean,default:!1},clickClose:{type:Boolean,default:!0},clickableWhenHasChildren:{type:Boolean,default:!1},rawMenuItem:{type:Object,default:void 0}},emits:["click","subMenuOpen","subMenuClose"],setup(e,{expose:t,emit:n}){const o=e,s=n,{clickHandler:r,clickClose:l,clickableWhenHasChildren:i,disabled:a,hidden:c,label:p,icon:u,iconFontClass:m,showRightArrow:f,shortcut:S,hasChildren:I}=Ve(o),b=D(!1),g=D(!1),$=D(),w=re("globalOptions"),k=re("globalHasSlot"),h=re("globalRenderSlot"),v=re("globalCloseMenu"),C=re("menuContext"),x=K(()=>typeof p.value=="string"?p.value:typeof p.value=="function"?fl(p.value.toString()):"MenuItem[unknow]");ge("MenuItemName",x);const A={getSubMenuInstance:()=>{},showSubMenu:()=>b.value?(C.markActiveMenuItem(A,!0),!0):I.value?(J(),!0):!1,hideSubMenu:()=>{C.closeOtherSubMenu()},isDisabledOrHidden:()=>a.value||c.value,getElement:()=>$.value,focus:()=>g.value=!0,blur:()=>g.value=!1,click:T};ge("menuItemInstance",A),be(()=>{C.isMenuItemDataCollectedFlag()?ve(()=>{let H=0;const U=C.getElement();if(U){let Z=0;for(let G=0;G<U.children.length;G++){const ie=U.children[G];if(ie.getAttribute("data-type")==="ContextMenuItem"){if(ie===$.value){H=Z;break}Z++}}}C.addChildMenuItem(A,H)}):C.addChildMenuItem(A)}),$t(()=>{C.removeChildMenuItem(A)});function T(H){if(!a.value){if(H){const U=H.target;if(U.classList.contains("mx-context-no-clickable")||w.value.ignoreClickClassName&&U.classList.contains(w.value.ignoreClickClassName))return;if(w.value.clickCloseClassName&&U.classList.contains(w.value.clickCloseClassName)){H.stopPropagation(),v(o.rawMenuItem);return}}I.value?i.value?(typeof r.value=="function"&&r.value(H),s("click",H)):b.value||J():(typeof r.value=="function"&&r.value(H),s("click",H),l.value&&v(o.rawMenuItem))}}function J(H){g.value=!1,C.checkCloseOtherSubMenuTimeOut()||C.closeOtherSubMenu(),a.value||(C.markActiveMenuItem(A),I.value&&(H||C.markThisOpenedByKeyBoard(),C.addOpenedSubMenu(Y),b.value=!0,ve(()=>s("subMenuOpen",A))))}function Y(){g.value=!1,b.value=!1,s("subMenuClose",A)}function F(){return{disabled:a.value,label:p.value,icon:u.value,iconFontClass:m.value,showRightArrow:f.value,clickClose:l.value,clickableWhenHasChildren:i.value,shortcut:S.value,theme:w.value.theme,isOpen:b,hasChildren:I,onClick:T,onMouseEnter:J,closeMenu:v}}return t(A),(H,U)=>y(c)?q("",!0):(R(),P("div",{key:0,class:"mx-context-menu-item-wrapper",ref_key:"menuItemRef",ref:$,"data-type":"ContextMenuItem"},[y(k)("itemRender")?(R(),ee(y(_e),{key:0,vnode:()=>y(h)("itemRender",F())},null,8,["vnode"])):e.customRender?(R(),ee(y(_e),{key:1,vnode:e.customRender,data:F()},null,8,["vnode","data"])):(R(),P("div",{key:2,class:me(["mx-context-menu-item",y(a)?"disabled":"",g.value?"keyboard-focus":"",e.customClass?" "+e.customClass:"",b.value?"open":""]),onClick:T,onMouseenter:J},[ue(H.$slots,"default",{},()=>[E("div",Pl,[E("div",{class:me(["mx-icon-placeholder",e.preserveIconWidth?"preserve-width":""])},[ue(H.$slots,"icon",{},()=>[y(k)("itemIconRender")?(R(),ee(y(_e),{key:0,vnode:()=>y(h)("itemIconRender",F())},null,8,["vnode"])):typeof e.svgIcon=="string"&&e.svgIcon?(R(),P("svg",Zt({key:1,class:"icon svg"},e.svgProps),[E("use",{"xlink:href":e.svgIcon},null,8,Ol)],16)):typeof y(u)!="string"?(R(),ee(y(_e),{key:2,vnode:y(u),data:y(u)},null,8,["vnode","data"])):typeof y(u)=="string"&&y(u)!==""?(R(),P("i",{key:3,class:me(y(u)+" icon "+y(m)+" "+y(w).iconFontClass)},null,2)):q("",!0)]),e.checked?ue(H.$slots,"check",{key:0},()=>[y(k)("itemCheckRender")?(R(),ee(y(_e),{key:0,vnode:()=>y(h)("itemCheckRender",F())},null,8,["vnode"])):q("",!0),z(_l)]):q("",!0)],2),ue(H.$slots,"label",{},()=>[y(k)("itemLabelRender")?(R(),ee(y(_e),{key:0,vnode:()=>y(h)("itemLabelRender",F())},null,8,["vnode"])):typeof y(p)=="string"?(R(),P("span",Nl,ne(y(p)),1)):(R(),ee(y(_e),{key:2,vnode:y(p),data:y(p)},null,8,["vnode","data"]))])]),E("div",Tl,[y(S)||H.$slots.shortcut?ue(H.$slots,"shortcut",{key:0},()=>[y(k)("itemShortcutRender")?(R(),ee(y(_e),{key:0,vnode:()=>y(h)("itemShortcutRender",F())},null,8,["vnode"])):q("",!0),E("span",Ll,ne(y(S)),1)]):q("",!0),y(f)?ue(H.$slots,"rightArrow",{key:1},()=>[y(k)("itemRightArrowRender")?(R(),ee(y(_e),{key:0,vnode:()=>y(h)("itemRightArrowRender",F())},null,8,["vnode"])):q("",!0),z(Ml)]):q("",!0)])])],34)),ue(H.$slots,"submenu",{context:A,show:b.value})],512))}}),Dl=X({name:"ContextMenuSperator",components:{VNodeRender:_e},setup(){const e=re("globalHasSlot"),t=re("globalRenderSlot");return{globalHasSlot:e,globalRenderSlot:t}}}),Bl={key:1,class:"mx-context-menu-item-sperator mx-context-no-clickable"};function Fl(e,t,n,o,s,r){const l=po("VNodeRender");return e.globalHasSlot("separatorRender")?(R(),ee(l,{key:0,vnode:()=>e.globalRenderSlot("separatorRender",{})},null,8,["vnode"])):(R(),P("div",Bl))}const vt=yn(Dl,[["render",Fl]]),kn=X({__name:"ContextSubMenu",props:{items:{type:Object,default:null},show:{type:Boolean,default:!1},maxHeight:{type:Number,default:0},maxWidth:{type:[String,Number],default:0},minWidth:{type:[String,Number],default:0},adjustPosition:{type:Boolean,default:!0},direction:{type:String,default:"br"},parentMenuItemContext:{type:Object,default:null}},emits:["closeAnimFinished"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=D(!1),l=re("globalGetMenuHostId",""),i=re("menuContext"),a=re("globalOptions");re("globalHasSlot"),re("globalRenderSlot");const c=D("UnknowOrRoot"),p=re("MenuItemName",c),{zIndex:u,getParentWidth:m,getParentHeight:f,getZoom:S}=i,{adjustPosition:I}=Ve(o),b=D(),g=D(),$=D(),w=[],k=re("globalSetCurrentSubMenu"),h=[];let v=null,C=0;function x(){v&&v.blur()}function A(L,_){if(L){for(let B=_!==void 0?_:0;B<h.length;B++)if(!h[B].isDisabledOrHidden()){T(B);break}}else for(let B=_!==void 0?_:h.length-1;B>=0;B--)if(!h[B].isDisabledOrHidden()){T(B);break}}function T(L){if(v&&x(),L!==void 0&&(v=h[Math.max(0,Math.min(L,h.length-1))]),!v)return;v.focus();const _=v.getElement();_&&_.scrollIntoView({behavior:"auto",block:"nearest",inline:"nearest"})}function J(){k(Y)}const Y={el:$,name:p,isTopLevel:()=>i.getParentContext()===null,closeSelfAndActiveParent:()=>{const L=U.getParentContext();if(L){L.closeOtherSubMenu();const _=L.getSubMenuInstanceContext();if(_)return _.focusCurrentItem(),!0}return!1},closeCurrentSubMenu:()=>{var L;return(L=U.getParentContext())==null?void 0:L.closeOtherSubMenu()},moveCurrentItemFirst:()=>A(!0),moveCurrentItemLast:()=>A(!1),moveCurrentItemDown:()=>A(!0,v?h.indexOf(v)+1:0),moveCurrentItemUp:()=>A(!1,v?h.indexOf(v)-1:0),focusCurrentItem:()=>T(),openCurrentItemSubMenu:()=>v?v?.showSubMenu():!1,triggerCurrentItemClick:L=>v?.click(L)};let F=!1,H=!1;const U={zIndex:u+1,container:i.container,adjustPadding:a.value.adjustPadding||Ee.defaultAdjustPadding,getParentWidth:()=>{var L;return((L=$.value)==null?void 0:L.offsetWidth)||0},getParentHeight:()=>{var L;return((L=$.value)==null?void 0:L.offsetHeight)||0},getPositon:()=>[te.value.x,te.value.y],getZoom:()=>a.value.zoom||Ee.defaultZoom,addOpenedSubMenu(L){w.push(L)},closeOtherSubMenu(){w.forEach(L=>L()),w.splice(0,w.length),k(Y)},checkCloseOtherSubMenuTimeOut(){return C?(clearTimeout(C),C=0,!0):!1},closeOtherSubMenuWithTimeOut(){C=setTimeout(()=>{C=0,this.closeOtherSubMenu()},200)},addChildMenuItem:(L,_)=>{_===void 0?h.push(L):h.splice(_,0,L)},removeChildMenuItem:L=>{h.splice(h.indexOf(L),1),L.getSubMenuInstance=()=>{}},markActiveMenuItem:(L,_=!1)=>{x(),v=L,_&&T()},markThisOpenedByKeyBoard:()=>{F=!0},isOpenedByKeyBoardFlag:()=>F?(F=!1,!0):!1,isMenuItemDataCollectedFlag:()=>H,getElement:()=>$.value||null,getParentContext:()=>i,getSubMenuInstanceContext:()=>Y};ge("menuContext",U);const Z={getChildItem:L=>h[L],getMenuDimensions:()=>g.value?{width:g.value.offsetWidth,height:g.value.offsetHeight}:{width:0,height:0},getSubmenuRoot:()=>g.value,getMenu:()=>$.value,getScrollValue:()=>{var L,_;return((_=(L=b.value)==null?void 0:L.getScrollContainer())==null?void 0:_.scrollTop)||0},setScrollValue:L=>{var _;return(_=b.value)==null?void 0:_.scrollTo(0,L)},getScrollHeight:()=>ie.value,adjustPosition:()=>{Ae()},getMaxHeight:()=>we.value,getPosition:()=>te.value,setPosition:(L,_)=>{te.value.x=L,te.value.y=_}},G=re("menuItemInstance",void 0);G&&(G.getSubMenuInstance=()=>Z);const ie=D(0),we=D(0),ke=D(!1),te=D({x:0,y:0});function Ae(){ve(()=>{var L;const _=$.value,B=g.value;if(_&&B&&b.value){const{container:d}=i,O=m?.()??0,M=f?.()??0,N=getComputedStyle(B),j=parseFloat(N.paddingLeft),oe=parseFloat(N.paddingTop),V=M>0?oe:0,W=document.documentElement.scrollHeight/S(),ae=document.documentElement.scrollWidth/S(),Fe=Math.min(ae,d.offsetWidth),pe=Math.min(W,d.offsetHeight);let Ft=gt(_,d),Ht=ht(_,d);if(o.direction.includes("l")?te.value.x-=_.offsetWidth+j:o.direction.includes("r")?te.value.x+=O+j:(te.value.x+=O/2,te.value.x-=(_.offsetWidth+j)/2),o.direction.includes("t")){const lt=(L=o.parentMenuItemContext)==null?void 0:L.getElement();lt&&(te.value.y+=lt.offsetHeight),te.value.y-=(_.offsetHeight+oe)/S()}else o.direction.includes("b")?te.value.y-=oe/S():te.value.y-=_.offsetHeight/2/S();ve(()=>{var lt,Cn;Ft=gt(_,d),Ht=ht(_,d);const xn=((Cn=(lt=b.value)==null?void 0:lt.getScrollContainer())==null?void 0:Cn.scrollHeight)||0,Qo=o.maxHeight;ie.value=o.maxHeight?Math.min(xn,o.maxHeight):xn;const es=Ft+_.offsetWidth-Fe,Sn=Ht+ie.value+V*2-pe;if(ke.value=Sn>0,I.value&&es>0){const at=O+_.offsetWidth-j,it=Ft;at>it?te.value.x-=it:te.value.x-=at}if(ke.value){if(I.value){const at=Sn,it=Ht;at>it?te.value.y-=it-V:te.value.y-=at-V}we.value=pe-(te.value.y+oe)}else we.value=Qo||0})}})}function Me(){var L;const _=(L=o.parentMenuItemContext)==null?void 0:L.getElement();if(_){const B=gt(_,i.container),d=ht(_,i.container);te.value.x=B,te.value.y=d}else{const[B,d]=i.getPositon();te.value.x=B,te.value.y=d}ve(()=>{var B;k(Y),(B=$.value)==null||B.focus({preventScroll:!0}),i.isOpenedByKeyBoardFlag()&&ve(()=>A(!0)),H=!0}),Ae()}return Be(()=>o.show,L=>{L&&Me()}),be(()=>{r.value=!0,o.show?Me():Ae()}),$t(()=>{r.value=!1,G&&(G.getSubMenuInstance=()=>{})}),t(Z),(L,_)=>{const B=po("ContextSubMenu",!0);return r.value?(R(),ee(fn,{key:0,to:`#${y(l)}`},[z(ds,Zt({appear:""},y(a).menuTransitionProps||{duration:10},{onAfterLeave:_[0]||(_[0]=d=>s("closeAnimFinished"))}),{default:Re(()=>[e.show?(R(),P("div",Zt({key:0,ref_key:"submenuRoot",ref:g},L.$attrs,{class:["mx-context-menu",y(a).customClass?y(a).customClass:"",y(a).theme??""],style:{maxWidth:e.maxWidth?y(Jn)(e.maxWidth):`${y(Ee).defaultMaxWidth}px`,minWidth:e.minWidth?y(Jn)(e.minWidth):`${y(Ee).defaultMinWidth}px`,zIndex:y(u),left:`${te.value.x}px`,top:`${te.value.y}px`},"data-type":"ContextSubMenu",onClick:J}),[z(y(wl),{ref_key:"scrollRectRef",ref:b,scroll:"vertical",maxHeight:we.value,containerClass:"mx-context-menu-scroll"},{default:Re(()=>[E("div",{class:me(["mx-context-menu-items"]),ref_key:"menu",ref:$},[ue(L.$slots,"default",{},()=>[(R(!0),P(fe,null,st(e.items,(d,O)=>(R(),P(fe,{key:O},[d.hidden!==!0&&d.divided==="up"?(R(),ee(vt,{key:0})):q("",!0),d.hidden!==!0&&d.divided==="self"?(R(),ee(vt,{key:1})):(R(),ee(wn,{key:2,clickHandler:d.onClick?M=>d.onClick(M):void 0,disabled:typeof d.disabled=="object"?d.disabled.value:d.disabled,hidden:typeof d.hidden=="object"?d.hidden.value:d.hidden,icon:d.icon,iconFontClass:d.iconFontClass,svgIcon:d.svgIcon,svgProps:d.svgProps,label:d.label,customRender:d.customRender,customClass:d.customClass,checked:typeof d.checked=="object"?d.checked.value:d.checked,shortcut:d.shortcut,clickClose:d.clickClose,clickableWhenHasChildren:d.clickableWhenHasChildren,preserveIconWidth:d.preserveIconWidth!==void 0?d.preserveIconWidth:y(a).preserveIconWidth,showRightArrow:d.children&&d.children.length>0,hasChildren:d.children&&d.children.length>0,rawMenuItem:d,onSubMenuOpen:M=>{var N;return(N=d.onSubMenuOpen)==null?void 0:N.call(d,M)},onSubMenuClose:M=>{var N;return(N=d.onSubMenuClose)==null?void 0:N.call(d,M)}},fo({_:2},[d.children&&d.children.length>0?{name:"submenu",fn:Re(({context:M,show:N})=>[z(B,{show:N,parentMenuItemContext:M,items:d.children,maxWidth:d.maxWidth,minWidth:d.minWidth,maxHeight:d.maxHeight,adjustPosition:d.adjustSubMenuPosition!==void 0?d.adjustSubMenuPosition:y(a).adjustPosition,direction:d.direction!==void 0?d.direction:y(a).direction},null,8,["show","parentMenuItemContext","items","maxWidth","minWidth","maxHeight","adjustPosition","direction"])]),key:"0"}:void 0]),1032,["clickHandler","disabled","hidden","icon","iconFontClass","svgIcon","svgProps","label","customRender","customClass","checked","shortcut","clickClose","clickableWhenHasChildren","preserveIconWidth","showRightArrow","hasChildren","rawMenuItem","onSubMenuOpen","onSubMenuClose"])),d.hidden!==!0&&(d.divided==="down"||d.divided===!0)?(R(),ee(vt,{key:3})):q("",!0)],64))),128))])],512)]),_:3},8,["maxHeight"])],16)):q("",!0)]),_:3},16)],8,["to"])):q("",!0)}}}),qo=X({__name:"ContextSubMenuWrapper",props:{options:{type:Object,default:null},show:{type:null,default:null},container:{type:Object,default:null},isFullScreenContainer:{type:Boolean,default:!0}},emits:["close","closeAnimFinished"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=uo(),l=D(),{options:i,show:a,container:c}=Ve(o);be(()=>{a.value&&m()}),$t(()=>{b()}),Be(a,v=>{v?m():(Kn(p),b())});const p={closeMenu:f,isClosed:S,getMenuRef:()=>l.value,getMenuDimensions:()=>{var v;return((v=l.value)==null?void 0:v.getMenuDimensions())??{width:0,height:0}}};let u=!1;function m(){I(),il(p)}function f(v){u=!0,s("close",v),i.value.menuTransitionProps||s("closeAnimFinished"),Kn(p)}function S(){return u}function I(){setTimeout(()=>{document.addEventListener("click",k,!0),document.addEventListener("contextmenu",k,!0),document.addEventListener("scroll",w,!0),!o.isFullScreenContainer&&c.value&&c.value.addEventListener("scroll",w,!0),i.value.keyboardControl!==!1&&document.addEventListener("keydown",$,!0)},50)}function b(){document.removeEventListener("contextmenu",k,!0),document.removeEventListener("click",k,!0),document.removeEventListener("scroll",w,!0),!o.isFullScreenContainer&&c.value&&c.value.removeEventListener("scroll",w,!0),i.value.keyboardControl!==!1&&document.removeEventListener("keydown",$,!0)}const g=D();ge("globalSetCurrentSubMenu",v=>g.value=v),ge("globalGetMenuHostId",c.value.id);function $(v){var C,x,A,T,J,Y,F,H,U,Z,G,ie,we;let ke=!0;switch(v.key){case"Escape":{((C=g.value)==null?void 0:C.isTopLevel())===!1?(x=g.value)==null||x.closeCurrentSubMenu():f();break}case"ArrowDown":(A=g.value)==null||A.moveCurrentItemDown();break;case"ArrowUp":(T=g.value)==null||T.moveCurrentItemUp();break;case"Home":(J=g.value)==null||J.moveCurrentItemFirst();break;case"End":(Y=g.value)==null||Y.moveCurrentItemLast();break;case"ArrowLeft":{(F=g.value)!=null&&F.closeSelfAndActiveParent()||(U=(H=i.value).onKeyFocusMoveLeft)==null||U.call(H);break}case"ArrowRight":(Z=g.value)!=null&&Z.openCurrentItemSubMenu()||(ie=(G=i.value).onKeyFocusMoveRight)==null||ie.call(G);break;case"Enter":(we=g.value)==null||we.triggerCurrentItemClick(v);break;default:ke=!1;break}ke&&g.value&&(v.stopPropagation(),v.preventDefault())}function w(v){i.value.closeWhenScroll!==!1&&h(v.target,null)}function k(v){h(v.target,v)}function h(v,C){for(var x,A;v;){if(v.classList&&v.classList.contains("mx-context-menu"))return;v=v.parentNode}C?i.value.clickCloseOnOutside!==!1?(b(),f()):(A=(x=i.value).onClickOnOutside)==null||A.call(x,C):(b(),f())}return ge("globalOptions",i),ge("globalCloseMenu",f),ge("globalIsFullScreenContainer",o.isFullScreenContainer),ge("globalHasSlot",v=>r[v]!==void 0),ge("globalRenderSlot",(v,C)=>ue(r,v,{...C},()=>[tt("span","Render slot failed")],!1)),ge("menuContext",{zIndex:i.value.zIndex||Ee.defaultZindex,container:c.value,adjustPadding:{x:0,y:0},getZoom:()=>i.value.zoom||Ee.defaultZoom,getParentWidth:()=>0,getParentHeight:()=>0,getPositon:()=>[i.value.x,i.value.y],closeOtherSubMenuWithTimeOut:()=>{},checkCloseOtherSubMenuTimeOut:()=>!1,addOpenedSubMenu:()=>{},closeOtherSubMenu:()=>{},getParentContext:()=>null,getSubMenuInstanceContext:()=>null,getElement:()=>null,addChildMenuItem:()=>{},removeChildMenuItem:()=>{},markActiveMenuItem:()=>{},markThisOpenedByKeyBoard:()=>{},isOpenedByKeyBoardFlag:()=>!1,isMenuItemDataCollectedFlag:()=>!1}),t(p),(v,C)=>(R(),ee(kn,{ref_key:"submenuInstance",ref:l,show:y(a),items:y(i).items,adjustPosition:y(i).adjustPosition,maxWidth:y(i).maxWidth||y(Ee).defaultMaxWidth,minWidth:y(i).minWidth||y(Ee).defaultMinWidth,maxHeight:y(i).maxHeight,direction:y(i).direction||y(Ee).defaultDirection,onCloseAnimFinished:C[0]||(C[0]=x=>s("closeAnimFinished"))},{default:Re(()=>[ue(v.$slots,"default")]),_:3},8,["show","items","adjustPosition","maxWidth","minWidth","maxHeight","direction"]))}}),Hl=X({__name:"ContextMenu",props:{options:{type:Object,default:null},show:{type:Boolean,default:!1}},emits:["update:show","close"],setup(e,{expose:t,emit:n}){const o=n,s=e,{options:r,show:l}=Ve(s),{isNew:i,container:a,eleId:c}=Vo(r.value),p=D(null),u=uo();function m(f){var S,I;o("update:show",!1),o("close"),(I=(S=r.value).onClose)==null||I.call(S,f)}return t({closeMenu:()=>o("update:show",!1),isClosed:()=>!l.value,getMenuRef:()=>{var f;return(f=p.value)==null?void 0:f.getMenuRef()},getMenuDimensions:()=>{var f;return((f=p.value)==null?void 0:f.getMenuDimensions())??{width:0,height:0}}}),(f,S)=>(R(),ee(fn,{to:`#${y(c)}`},[z(qo,{ref_key:"menuRef",ref:p,options:y(r),show:y(l),container:y(a),isFullScreenContainer:!y(i),onClose:m},fo({_:2},[st(y(u),(I,b)=>({name:b,fn:Re(g=>[ue(f.$slots,b,cs(us(g)))])}))]),1032,["options","show","container","isFullScreenContainer"])],8,["to"]))}}),Wl=X({name:"ContextMenuGroup",props:{disabled:{type:Boolean,default:!1},hidden:{type:Boolean,default:!1},clickHandler:{type:Function,default:null},label:{type:String,default:""},icon:{type:String,default:""},iconFontClass:{type:String,default:"iconfont"},checked:{type:Boolean,default:!1},shortcut:{type:String,default:""},svgIcon:{type:String,default:""},svgProps:{type:Object,default:null},preserveIconWidth:{type:Boolean,default:!0},showRightArrow:{type:Boolean,default:!1},clickClose:{type:Boolean,default:!0},adjustSubMenuPosition:{type:Boolean,default:void 0},maxHeight:{type:[String,Number],default:0},maxWidth:{type:[String,Number],default:0},minWidth:{type:[String,Number],default:0}},setup(e,t){const n=re("globalOptions"),{adjustSubMenuPosition:o,maxWidth:s,minWidth:r,maxHeight:l}=Ve(e),i=typeof o.value<"u"?o.value:n.value.adjustPosition,a=D(),c=D();return t.expose({getSubMenuRef:()=>a.value,getMenuItemRef:()=>c.value}),()=>tt(wn,{...e,ref:c,showRightArrow:!0,maxWidth:void 0,minWidth:void 0,maxHeight:void 0,adjustSubMenuPosition:void 0,hasChildren:typeof t.slots.default!==void 0},t.slots.default?{submenu:p=>tt(kn,{ref:a,show:p.show,maxWidth:s.value,minWidth:r.value,maxHeight:l.value,adjustPosition:i,parentMenuItemContext:p.context},{default:t.slots.default}),...pl(t.slots,"default")}:t.slots)}});function zl(e,t,n,o){const s=D(!0),r=tt(qo,{options:e,show:s,container:t,isFullScreenContainer:!n,onCloseAnimFinished:()=>{_n(null,t)},onClose:l=>{var i;(i=e.onClose)==null||i.call(e,l),s.value=!1}},o);return _n(r,t),r.component}function to(e,t){const n=Vo(e);return zl(e,n.container,n.isNew,t).exposed}const Dt={install(e){e.config.globalProperties.$contextmenu=to,e.component("ContextMenu",Hl),e.component("ContextMenuItem",wn),e.component("ContextMenuGroup",Wl),e.component("ContextMenuSperator",vt),e.component("ContextMenuSeparator",vt),e.component("ContextSubMenu",kn)},showContextMenu(e,t){return to(e,t)},isAnyContextMenuOpen(){return al()},closeContextMenu:jo,transformMenuPosition:cl},Ul={key:0,class:"empty-container"},jl={key:0},Vl={key:1},ql={key:2},Gl={key:3},Kl={key:4},Jl={key:5},Yl=X({__name:"EmptyFolder",props:{path:{},documents:{}},setup(e){const t=fs,n=se(),o=e;return(s,r)=>!o.path||e.documents.length===0?(R(),P("div",Ul,[(R(),ee(dn(y(t)),{class:me(["cog",{stopped:y(n).dialog==="accessdenied"||y(n).authInProgress}])},null,8,["class"])),y(n).dialog==="accessdenied"?(R(),P("p",jl,"Access Denied")):y(n).connected?y(n).document.length===0?(R(),P("p",ql,"Waiting for File List")):y(n).query?(R(),P("p",Gl,"No matches!")):y(Uo)(o.path)?(R(),P("p",Jl,"Empty folder")):(R(),P("p",Kl,"Folder not found")):(R(),P("p",Vl,"No Connection"))])):q("",!0)}}),Xl=ye(Yl,[["__scopeId","data-v-0494c508"]]),Zl=["checked"],Ql=X({__name:"SelectBox",props:{doc:{}},setup(e){const t=se();return(n,o)=>(R(),P("input",{type:"checkbox",tabindex:"-1",checked:y(t).selected.has(e.doc.key),onClick:o[0]||(o[0]=de(()=>{},["stop"])),onChange:o[1]||(o[1]=s=>{s.target.checked?y(t).selected.add(e.doc.key):y(t).selected.delete(e.doc.key)})},null,40,Zl))}}),cn=X({__name:"FileRenameInput",props:{doc:{},rename:{type:Function},exit:{type:Function}},setup(e){const t=D(null),n=D("");be(()=>{n.value=o.doc.name;const r=n.value.lastIndexOf(".");ve(()=>{t.value.focus(),t.value.setSelectionRange(0,r>0?r:n.value.length)})});const o=e,s=()=>{o.exit(),!(o.doc.key!=="new"&&(n.value===o.doc.name||n.value.length===0))&&o.rename(o.doc,n.value)};return(r,l)=>wt((R(),P("input",{ref_key:"input",ref:t,id:"FileRenameInput",type:"text",autocorrect:"off","onUpdate:modelValue":l[0]||(l[0]=i=>n.value=i),onBlur:l[1]||(l[1]=(...i)=>e.exit&&e.exit(...i)),onKeyup:[l[2]||(l[2]=Qe((...i)=>e.exit&&e.exit(...i),["esc"])),Qe(s,["enter"])]},null,544)),[[Qt,n.value]])}}),ea=["src"],ta=["src"],na={key:2,class:"folder icon"},oa={key:3,class:"video-container"},sa=["src","poster"],ra={class:"play-overlay"},la={key:4,class:"audio icon"},aa=["src"],ia={key:5,class:"archive icon"},ca=X({__name:"MediaPreview",props:{doc:{},quality:{}},setup(e,{expose:t}){const n=D(null),o=D(null),s=K(()=>n.value||o.value),r=K(()=>`${l.doc.previewurl}?${l.quality}&t=${l.doc.mtime}`),l=e,i=()=>{s.value&&(s.value.controls=!0,s.value.setAttribute("data-playing",""))},a=()=>{s.value&&(s.value.controls=!1,s.value.removeAttribute("data-playing"))};let c=null;const p=()=>{if(!s.value)return;s.value.load();const I=Array.from(document.querySelectorAll("video, audio"));if(I.length===0)return;let b=null;for(const g in I)if(I[g]===(c||s.value)){b=I[+g+1]??I[0]??null;break}if(b)if(b.tagName==="VIDEO"&&document.fullscreenElement===s.value){const g=s.value,$=b;if(g===$){$.play();return}c||g.addEventListener("fullscreenchange",w=>{c&&(c.currentTime=g.currentTime,c.click(),g.paused||c.play(),c=null,g.src=l.doc.url,g.poster=r.value,a())},{once:!0}),c=$,g.src=$.src,g.poster="",g.play()}else document.exitFullscreen(),b.click()};t({play(){if(!s.value)return!1;if(s.value.paused){s.value.play();for(const I of Array.from(document.querySelectorAll("video, audio")))I!==s.value&&I.pause()}else s.value.pause();return!0},media:s});const u=()=>["mkv","mp4","webm","mov","avi"].includes(l.doc.ext),m=()=>["mp3","flac","ogg","aac"].includes(l.doc.ext),f=()=>["zip","tar","gz","bz2","xz","7z","rar"].includes(l.doc.ext),S=()=>["bmp","ico","tif","tiff","heic","heif","pdf","epub","mobi"].includes(l.doc.ext)||l.doc.size>5e5&&["avif","webp","png","jpg","jpeg"].includes(l.doc.ext);return(I,b)=>S()?(R(),P("img",{key:0,src:`${e.doc.previewurl}?${e.quality}&t=${e.doc.mtime}`,alt:""},null,8,ea)):e.doc.img?(R(),P("img",{key:1,src:e.doc.url,alt:""},null,8,ta)):e.doc.dir?(R(),P("span",na)):u()?(R(),P("div",oa,[E("video",{ref_key:"vid",ref:o,src:e.doc.url,poster:r.value,preload:"none",onPlay:i,onPause:a,onEnded:p,onSeeking:b[0]||(b[0]=g=>s.value.play())},null,40,sa),E("div",ra,[z(y(ps))])])):m()?(R(),P("div",la,[E("audio",{ref_key:"aud",ref:n,src:e.doc.url,class:"icon",preload:"none",onPlay:i,onPause:a,onEnded:p,onSeeking:b[1]||(b[1]=g=>s.value.play())},null,40,aa)])):f()?(R(),P("span",ia)):(R(),P("span",{key:6,class:me(["file icon",`ext-${e.doc.ext}`])},null,2))}}),ua=ye(ca,[["__scopeId","data-v-47490c5c"]]);let Yt=!1,Ge=null,Xt=!1;const da=X({__name:"CursorTooltip",props:{text:{},delay:{}},setup(e,{expose:t}){const n=e,o=D(!1),s=D(0),r=D(0);let l=null,i=0,a=0;const c=8,p=K(()=>({left:`${s.value}px`,top:`${r.value}px`})),u=()=>window.matchMedia("(pointer: fine)").matches,m=()=>{o.value=!0,Yt=!0},f=()=>{l&&clearTimeout(l),Ge&&(clearTimeout(Ge),Ge=null);const g=Yt?0:n.delay??900;l=setTimeout(m,g)};return t({startHover:g=>{!u()&&!Xt||(s.value=g.clientX,r.value=g.clientY,i=g.clientX,a=g.clientY)},updatePosition:g=>{if((g.movementX!==0||g.movementY!==0)&&(Xt=!0),!u()&&!Xt||(s.value=g.clientX,r.value=g.clientY,o.value))return;const $=g.clientX-i,w=g.clientY-a;Math.sqrt($*$+w*w)>c&&(i=g.clientX,a=g.clientY,l&&(clearTimeout(l),l=null)),l||f()},endHover:()=>{l&&(clearTimeout(l),l=null),o.value=!1,Ge&&clearTimeout(Ge),Ge=setTimeout(()=>{Yt=!1},400)}}),(g,$)=>(R(),ee(fn,{to:"body"},[o.value?(R(),P("div",{key:0,class:"cursor-tooltip",style:Je(p.value)},[ue(g.$slots,"default",{},void 0,!0)],4)):q("",!0)]))}}),Go=ye(da,[["__scopeId","data-v-c5d421fc"]]),fa=["id","href"],pa={class:"tooltip-name"},ma={class:"tooltip-details"},ha=X({__name:"GalleryFigure",props:{doc:{},editing:{}},setup(e){const t=se(),n=e,o=D(null),s=D(null),r=K(()=>n.doc.key),l=i=>{o.value.play()&&i.preventDefault(),t.cursor=n.doc.key};return(i,a)=>{const c=cn,p=Ql;return R(),P("a",{id:`file-${e.doc.key}`,href:e.doc.url,tabindex:"-1",class:me({file:!e.doc.dir,folder:e.doc.dir,cursor:y(t).cursor===e.doc.key}),onContextmenu:a[3]||(a[3]=de(()=>{},["stop"])),onFocus:a[4]||(a[4]=de(u=>y(t).cursor=e.doc.key,["stop"])),onClick:l,onMouseenter:a[5]||(a[5]=(...u)=>s.value?.startHover&&s.value?.startHover(...u)),onMousemove:a[6]||(a[6]=(...u)=>s.value?.updatePosition&&s.value?.updatePosition(...u)),onMouseleave:a[7]||(a[7]=(...u)=>s.value?.endHover&&s.value?.endHover(...u))},[E("figure",null,[ue(i.$slots,"default",{},void 0,!0),z(ua,{ref_key:"m",ref:o,doc:e.doc,tabindex:"-1",quality:"sz=512",class:"figcontent"},null,8,["doc"]),a[9]||(a[9]=E("div",{class:"titlespacer"},null,-1)),E("figcaption",{onClick:a[1]||(a[1]=de(()=>{},["prevent"])),onContextmenu:a[2]||(a[2]=de(u=>i.$emit("menu",u),["prevent"]))},[e.editing?(R(),ee(c,{key:0,doc:e.doc,rename:e.editing.rename,exit:e.editing.exit},null,8,["doc","rename","exit"])):(R(),P(fe,{key:1},[z(p,{doc:e.doc,onClick:a[0]||(a[0]=u=>y(t).cursor=e.doc.key)},null,8,["doc"]),E("span",null,ne(e.doc.name),1),a[8]||(a[8]=E("div",{class:"namespacer"},null,-1))],64))],32)]),z(Go,{ref_key:"tooltip",ref:s,text:r.value},{default:Re(()=>[E("div",pa,ne(e.doc.name),1),E("div",ma,ne(e.doc.modified)+" — "+ne(e.doc.sizedisp),1)]),_:1},8,["text"])],42,fa)}}}),ga=ye(ha,[["__scopeId","data-v-91479c1d"]]),va=X({__name:"Gallery",props:{path:{},documents:{}},setup(e,{expose:t}){const n=e,o=se(),s=pn(),r=un(null),l=()=>{r.value=null},i=(h,v)=>{const C=h.name,x=Ue(bt,{message(A){const T=JSON.parse(A.data);"error"in T?(console.error("Rename failed",T.error.message,T.error),h.name=C):console.log("Rename succeeded",T)}});x.onopen=()=>{x.send(JSON.stringify({op:"rename",path:`${h.loc}/${C}`,to:v}))},h.name=v},a=D(),c=D(1),p=()=>{a.value&&(c.value=getComputedStyle(a.value).gridTemplateColumns.split(" ").length)},u=K(()=>c.value);t({newFolder(){const h=Math.floor(Date.now()/1e3);r.value=new It({loc:w.value,key:"new",name:"New Folder",dir:!0,mtime:h,size:0}),o.cursor=r.value.key},toggleSelectAll(){console.log("Select"),$.value=!$.value},toggleSortColumn(h){const v=["","name","modified","size",""][h];v&&o.toggleSort(v)},isCursor(){return o.cursor&&r.value===null},cursorRename(){r.value=n.documents.find(h=>h.key===o.cursor)??null},cursorSelect(){const h=o.cursor;h&&(o.selected.has(h)?o.selected.delete(h):o.selected.add(h),this.cursorMove(1,null))},up(h){this.cursorMove(-u.value,h)},down(h){this.cursorMove(u.value,h)},left(h){this.cursorMove(-1,h)},right(h){this.cursorMove(1,h)},cursorMove(h,v){const C=!!v?.shiftKey,x=n.documents;if(x.length===0){o.cursor="";return}const A=x.length,T=(U,Z)=>(U%Z+Z)%Z,J=(U,Z)=>T(U+Z,A+1),Y=o.cursor?x.findIndex(U=>U.key===o.cursor):A;if(v&&Y===0&&v.key==="ArrowLeft"||v&&Y===A-1&&v.key==="ArrowRight")return;let F;Y===A?F=h>0?0:A-1:(F=J(Y,h),(Math.abs(h)>=A||Math.sign(h)!==Math.sign(F-Y))&&(F=A)),o.cursor=x[F]?.key??"";const H=o.cursor?document.getElementById(`file-${o.cursor}`):"";if(C){let[U,Z]=h>0?[Y,F]:[F,Y];for(let G=U;G!==Z;G=J(G,1)){if(G===A)continue;const ie=x[G].key;o.selected.has(ie)?o.selected.delete(ie):o.selected.add(ie)}}S=H,f||(f=setTimeout(()=>{S&&S.scrollIntoView({block:"center",behavior:"smooth"}),f=null},300)),F===A&&m()}});const m=()=>{const h=document.querySelector(".breadcrumb");h&&h.focus()};let f=null,S=null;Ie(()=>{if(o.cursor&&o.cursor!==r.value?.key&&(r.value=null),r.value&&(o.cursor=r.value.key),o.cursor){const h=document.querySelector(`#file-${o.cursor}`);h&&(h.focus(),h.scrollIntoView({block:"center",behavior:"smooth"}))}}),Ie(()=>{!n.documents.length&&o.cursor&&(o.cursor="",m())});let I=null;be(()=>{const h=document.querySelector(".cursor");h&&(h.scrollIntoView({block:"center",behavior:"instant"}),h.focus()),p(),a.value&&(I=new ResizeObserver(p),I.observe(a.value))}),yt(()=>{I?.disconnect()});const b=(h,v)=>{const C=Ue(bt,{open(){C.send(JSON.stringify({op:"mkdir",path:`${h.loc}/${v}`}))},message(x){const A=JSON.parse(x.data);"error"in A?(console.error("Mkdir failed",A.error.message,A.error),r.value=null):(console.log("mkdir",A),s.push(h.urlrouter))}});h.name=v,h.key=crypto.randomUUID()},g=h=>{const v=n.documents,C=v[h].loc;return h===0?C!==w.value:C!==v[h-1].loc},$=K({get:()=>n.documents.length>0&&n.documents.every(h=>o.selected.has(h.key)),set:h=>{console.log("Setting allSelected",h);for(const v of n.documents)h?o.selected.add(v.key):o.selected.delete(v.key)}}),w=K(()=>n.path.join("/")),k=(h,v)=>{o.cursor=v.key,Dt.showContextMenu({x:h.x,y:h.y,items:[{label:"Rename",onClick:()=>{r.value=v}}]})};return(h,v)=>{const C=ga,x=vn;return n.documents.length||r.value?(R(),P("div",{key:0,class:"gallery",ref_key:"gallery",ref:a},[r.value?.key==="new"?(R(),ee(C,{doc:r.value,key:r.value.key,editing:{rename:b,exit:l}},null,8,["doc","editing"])):q("",!0),(R(!0),P(fe,null,st(e.documents,(A,T)=>(R(),P(fe,{key:A.key},[g(T)?(R(),ee(x,{key:0,path:A.loc?A.loc.split("/"):[],class:"folder-indicator"},null,8,["path"])):q("",!0),z(C,{doc:A,editing:r.value===A?{rename:i,exit:l}:null,onMenu:J=>k(J,A),class:me({"folder-start":g(T)})},null,8,["doc","editing","onMenu","class"])],64))),128))],512)):q("",!0)}}}),ya=ye(va,[["__scopeId","data-v-9973e293"]]),wa=X({__name:"FileSize",props:{doc:{}},setup(e){const t=K(()=>{const o=n.doc.sizedisp.split(" ").slice(-1)[0];return+o?"bytes":o}),n=e;return(o,s)=>(R(),P("td",{class:me(["size right",t.value])},ne(e.doc.sizedisp),3))}}),ka=ye(wa,[["__scopeId","data-v-444c7802"]]),ba={class:"modified right"},Ca=["datetime"],xa=X({__name:"FileModified",props:{doc:{},now:{}},setup(e){const t=e,n=D(null),o=K(()=>(t.now,To(t.doc.mtime))),s=K(()=>new Date(1e3*t.doc.mtime).toISOString().replace(".000Z","Z")),r=K(()=>s.value.replace("T"," ").replace("Z"," UTC"));return(l,i)=>(R(),P("td",ba,[E("time",{datetime:s.value,onMouseenter:i[0]||(i[0]=(...a)=>n.value?.startHover&&n.value?.startHover(...a)),onMousemove:i[1]||(i[1]=(...a)=>n.value?.updatePosition&&n.value?.updatePosition(...a)),onMouseleave:i[2]||(i[2]=(...a)=>n.value?.endHover&&n.value?.endHover(...a))},ne(o.value),41,Ca),z(Go,{ref_key:"tooltip",ref:n,text:r.value},{default:Re(()=>[We(ne(r.value),1)]),_:1},8,["text"])]))}}),Sa={key:0},_a={class:"selection"},Ea=["indeterminate"],Ra={key:0,class:"folder"},Ia={class:"name"},Aa={key:0,class:"folder-change"},$a={colspan:"5"},Ma=["id","onClick","onContextmenu"],Pa=["onClick"],Oa=["checked","onChange"],Na={class:"name"},Ta=["href","onFocus"],La=["onClick"],Da={class:"menu"},Ba=["onClick"],Fa={key:1,class:"summary"},Ha={colspan:"3",class:"right"},Wa={class:"size right"},za=X({__name:"FileExplorer",props:{path:{},documents:{}},setup(e,{expose:t}){const n=e,o=se(),s=pn(),r=un(null),l=(w,k)=>{const h=w.name,v=Ue(bt,{message(C){const x=JSON.parse(C.data);"error"in x?(console.error("Rename failed",x.error.message,x.error),w.name=h):console.log("Rename succeeded",x)}});v.onopen=()=>{v.send(JSON.stringify({op:"rename",path:`${w.loc}/${h}`,to:k}))},w.name=k};t({newFolder(){console.log("New folder");const w=Math.floor(Date.now()/1e3);r.value=new It({loc:g.value,key:"new",name:"New Folder",dir:!0,mtime:w,size:0}),o.cursor=r.value.key},toggleSelectAll(){console.log("Select"),b.value=!b.value},isCursor(){return o.cursor&&r.value===null},cursorRename(){r.value=n.documents.find(w=>w.key===o.cursor)??null},cursorSelect(){const w=o.cursor;w&&(o.selected.has(w)?o.selected.delete(w):o.selected.add(w),this.cursorMove(1,null))},up(w){this.cursorMove(-1,w)},down(w){this.cursorMove(1,w)},left(w){s.back()},right(w){const k=document.querySelector(`#file-${o.cursor} a`);k&&k.click()},cursorMove(w,k){const h=!!k?.shiftKey,v=n.documents;if(v.length===0){o.cursor="";return}const C=v.length,x=(F,H)=>(F%H+H)%H,A=(F,H)=>x(F+H,C+1),T=o.cursor?v.findIndex(F=>F.key===o.cursor):v.length,J=A(T,w);o.cursor=v[J]?.key??"";const Y=o.cursor?document.getElementById(`file-${o.cursor}`):"";if(h){let[F,H]=w>0?[T,J]:[J,T];for(let U=F;U!==H;U=A(U,1)){if(U===C)continue;const Z=v[U].key;o.selected.has(Z)?o.selected.delete(Z):o.selected.add(Z)}}c=Y,a||(a=setTimeout(()=>{c&&c.scrollIntoView({block:"center",behavior:"smooth"}),a=null},300)),J===C&&i()}});const i=()=>{const w=document.querySelector(".breadcrumb");w&&w.focus()};let a=null,c=null;Ie(()=>{if(o.cursor&&o.cursor!==r.value?.key&&(r.value=null),r.value&&(o.cursor=r.value?.key),o.cursor){const w=document.querySelector(`#file-${o.cursor} .name a`);w&&w.focus()}}),Ie(()=>{!n.documents.length&&o.cursor&&(o.cursor="",i())});let p=D(0),u=null;const m=()=>{p.value=Math.floor(Date.now()/1e3)};be(()=>{m(),u=setInterval(m,1e3);const w=document.querySelector(".cursor");w&&(w.scrollIntoView({block:"center",behavior:"instant"}),w.focus())}),yt(()=>{clearInterval(u)});const f=(w,k)=>{const h=Ue(bt,{open(){h.send(JSON.stringify({op:"mkdir",path:`${w.loc}/${k}`}))},message(v){const C=JSON.parse(v.data);"error"in C?(console.error("Mkdir failed",C.error.message,C.error),r.value=null):(console.log("mkdir",C),s.push(w.urlrouter))}});w.name=k,w.key=crypto.randomUUID()},S=w=>{const k=n.documents,h=k[w].loc;return w===0?h!==g.value:h!==k[w-1].loc},I=K({get:()=>n.documents.length>0&&n.documents.some(w=>o.selected.has(w.key))&&!b.value,set:w=>{}}),b=K({get:()=>n.documents.length>0&&n.documents.every(w=>o.selected.has(w.key)),set:w=>{console.log("Setting allSelected",w);for(const k of n.documents)w?o.selected.add(k.key):o.selected.delete(k.key)}}),g=K(()=>n.path.join("/")),$=(w,k)=>{o.cursor=k.key,Dt.showContextMenu({x:w.x,y:w.y,items:[{label:"Rename",onClick:()=>{r.value=k}}]})};return(w,k)=>{const h=xa,v=ka,C=vn;return n.documents.length||r.value?(R(),P("table",Sa,[E("thead",null,[E("tr",null,[E("th",_a,[wt(E("input",{type:"checkbox",tabindex:"-1","onUpdate:modelValue":k[0]||(k[0]=x=>b.value=x),indeterminate:I.value},null,8,Ea),[[mo,b.value]])]),E("th",{class:me(["sortcolumn",{sortactive:y(o).sortOrder==="name"}]),onClick:k[1]||(k[1]=x=>y(o).toggleSort("name"))},"Name",2),E("th",{class:me(["sortcolumn modified right",{sortactive:y(o).sortOrder==="modified"}]),onClick:k[2]||(k[2]=x=>y(o).toggleSort("modified"))},"Modified",2),E("th",{class:me(["sortcolumn size right",{sortactive:y(o).sortOrder==="size"}]),onClick:k[3]||(k[3]=x=>y(o).toggleSort("size"))},"Size",2),k[5]||(k[5]=E("th",{class:"menu"},null,-1))])]),E("tbody",null,[r.value?.key==="new"?(R(),P("tr",Ra,[k[6]||(k[6]=E("td",{class:"selection"},null,-1)),E("td",Ia,[z(cn,{doc:r.value,rename:f,exit:()=>{r.value=null}},null,8,["doc","exit"])]),z(h,{doc:r.value,now:y(p)},null,8,["doc","now"]),z(v,{doc:r.value},null,8,["doc"]),k[7]||(k[7]=E("td",{class:"menu"},null,-1))])):q("",!0),(R(!0),P(fe,null,st(e.documents,(x,A)=>(R(),P(fe,{key:x.key},[S(A)?(R(),P("tr",Aa,[E("th",$a,[z(C,{path:x.loc?x.loc.split("/"):[]},null,8,["path"])])])):q("",!0),E("tr",{id:`file-${x.key}`,class:me({file:!x.dir,folder:x.dir,cursor:y(o).cursor===x.key}),onClick:T=>y(o).cursor=y(o).cursor===x.key?"":x.key,onContextmenu:de(T=>$(T,x),["prevent"])},[E("td",{class:"selection",onClick:de(T=>y(o).cursor=y(o).cursor===x.key?x.key:"",["stop"])},[E("input",{type:"checkbox",tabindex:"-1",checked:y(o).selected.has(x.key),onChange:T=>T.target.checked?y(o).selected.add(x.key):y(o).selected.delete(x.key)},null,40,Oa)],8,Pa),E("td",Na,[r.value===x?(R(),ee(cn,{key:0,doc:x,rename:l,exit:()=>{r.value=null}},null,8,["doc","exit"])):(R(),P(fe,{key:1},[E("a",{href:x.url,tabindex:"-1",onContextmenu:k[4]||(k[4]=de(()=>{},["stop"])),onFocus:de(T=>y(o).cursor=x.key,["stop"])},ne(x.name),41,Ta),y(o).cursor==x.key?(R(),P("button",{key:0,tabindex:"-1",class:"rename-button",onClick:()=>r.value=x},"🖊️",8,La)):q("",!0)],64))]),z(h,{doc:x,now:y(p)},null,8,["doc","now"]),z(v,{doc:x},null,8,["doc"]),E("td",Da,[E("button",{tabindex:"-1",onClick:de(T=>$(T,x),["stop"])},"⋮",8,Ba)])],42,Ma)],64))),128)),n.documents.length>1?(R(),P("tr",Fa,[E("td",Ha,ne(n.documents.length)+" items",1),E("td",Wa,ne(y(No)(n.documents.reduce((x,A)=>x+A.size,0))),1),k[8]||(k[8]=E("td",{class:"menu"},null,-1))])):q("",!0)])])):q("",!0)}}}),Ua=ye(za,[["__scopeId","data-v-c61c7c3a"]]),ja={key:2,class:"search-loading"},Va=X({__name:"ExplorerView",props:{path:{},query:{}},setup(e){const t=se(),n=D(),o=e;Be(()=>[o.query,o.path.join("/")],([r,l])=>{t.search(r,l)},{immediate:!0});const s=K(()=>{const r=o.path.join("/");if(!o.query)return zo(t.document.filter(c=>c.loc===r),t.prefs.sortListing);const i=t.searchResults,a=t.prefs.sortFiltered;return a?Qr(i,a):i});return Ie(()=>{t.fileExplorer=n.value,t.query=o.query}),Be([()=>o.path.join("/"),()=>t.document.length],([r,l],[i,a])=>{r===i&&a!==void 0&&a>0||(t.prefs.gallery=s.value.some(c=>c.previewable))},{immediate:!0}),(r,l)=>{const i=ya,a=Xl;return R(),P(fe,null,[y(t).prefs.gallery?(R(),ee(i,{ref_key:"fileExplorer",ref:n,key:`gallery-${y(je).currentRoute.value.path}`,path:o.path,documents:s.value},null,8,["path","documents"])):(R(),ee(Ua,{ref_key:"fileExplorer",ref:n,key:`explorer-${y(je).currentRoute.value.path}`,path:o.path,documents:s.value},null,8,["path","documents"])),y(t).searchLoading?(R(),P("div",ja,"Searching...")):q("",!0),z(a,{documents:s.value,path:o.path},null,8,["documents","path"])],64)}}}),qa=ye(Va,[["__scopeId","data-v-d099f78a"]]),je=Nr({history:pr("/"),routes:[{path:"/:pathMatch(.*)*",name:"explorer",component:qa}]}),Ga={class:"headermain buttons"},Ka=["value"],Ja=X({__name:"HeaderMain",props:{path:{},query:{}},setup(e,{expose:t}){const n=se(),o=ll(),s=D(!1),r=D(),l=D(),i=e,a=m=>{if(!s.value)return;s.value=!1,document.querySelector(".breadcrumb").focus(),c(m)},c=m=>{const f=m.target.value;let S=i.path.join("/");S=S?`/${S}`:"";const b=(f?`${S}//${f}`:S||"/").replaceAll("?","%3F").replaceAll("#","%23");!i.query&&f?je.push(b):je.replace(b)},p=m=>{if(s.value=!s.value,!s.value)return a(m);ve(()=>{const f=r.value;f&&f.focus()})};Ie(()=>{i.query&&(s.value=!0)});const u=m=>{const f=[];o.isExternalAuth&&n.user.isLoggedIn&&f.push({label:"👤 "+(n.user.username||"User Account"),onClick:()=>{window.location.href="/auth/"}}),!o.isExternalAuth&&n.user.isLoggedIn&&f.push({label:"🔑 Change Password",onClick:()=>{n.dialog="settings"}}),n.user.privileged&&f.push({label:"⚙️ Admin Settings",onClick:()=>{n.dialog="usermgmt"}}),n.user.isLoggedIn?f.push({label:"🚪 Logout",onClick:()=>n.logout()}):n.server.public&&f.push({label:"🔐 Login",onClick:async()=>{try{await gn("/auth/restricted#theme=light"),an()}catch{console.log("Login cancelled")}}}),Dt.showContextMenu({x:m.target.getBoundingClientRect().right,y:m.target.getBoundingClientRect().bottom,items:f})};return t({toggleSearchInput:p,closeSearch:a}),(m,f)=>{const S=rl,I=Lt;return R(),P("nav",Ga,[z(S,{path:i.path},null,8,["path"]),z(I,{name:"create-folder","data-tooltip":"New folder",onClick:f[0]||(f[0]=()=>{console.log("New",y(n).fileExplorer),y(n).fileExplorer.newFolder(),console.log("Done")})}),ue(m.$slots,"default",{},void 0,!0),f[2]||(f[2]=E("div",{class:"spacer smallgap"},null,-1)),s.value?(R(),P("input",{key:0,ref_key:"search",ref:r,type:"search",value:e.query,onInput:c,placeholder:"Find files",class:"margin-input"},null,40,Ka)):q("",!0),z(I,{ref_key:"searchButton",ref:l,name:"find",onClick:de(p,["prevent"])},null,512),z(I,{name:"eye",onClick:f[1]||(f[1]=b=>y(n).prefs.gallery=!y(n).prefs.gallery)}),z(I,{name:"cog",onClick:u})])}}}),Ya=ye(Ja,[["__scopeId","data-v-b9ddc09f"]]);function St(e){return typeof e=="object"&&e!==null&&"error"in e}class Xa{async get(t){try{const n=await xt(t,{method:"GET"});if(St(n))throw new Oe(n.error.code,n.error.message);return n}catch(n){throw n instanceof Ze?new Oe(401,"Authentication cancelled"):n}}async post(t,n){try{const o=await xt(t,{method:"POST",body:n});if(St(o))throw new Oe(o.error.code,o.error.message);return o}catch(o){throw o instanceof Ze?new Oe(401,"Authentication cancelled"):o}}async put(t,n){try{const o=await xt(t,{method:"PUT",body:n});if(St(o))throw new Oe(o.error.code,o.error.message);return o}catch(o){throw o instanceof Ze?new Oe(401,"Authentication cancelled"):o}}async delete(t){try{const n=await xt(t,{method:"DELETE"});if(St(n))throw new Oe(n.error.code,n.error.message);return n}catch(n){throw n instanceof Ze?new Oe(401,"Authentication cancelled"):n}}}const rt=new Xa;class Oe extends Error{code;constructor(t,n){super(n),this.code=t}}const Za=X({__name:"DownloadButton",setup(e){const t=se(),n={total:0,xfer:0,t0:0,tlast:0,statbytes:0,statdur:0,files:[],filestart:0,fileidx:0,filecount:0,filename:"",filesize:0,filepos:0,status:"idle"};t.dprogress={...n},setInterval(()=>{Date.now()-t.dprogress.tlast>3e3?(t.dprogress.statbytes=0,t.dprogress.statdur=1):(t.dprogress.statbytes*=.9,t.dprogress.statdur*=.9)},100);const o=()=>{Object.assign(t.dprogress,n),t.dprogress.t0=Date.now(),t.dprogress.tlast=t.dprogress.t0+1},s=i=>{const a=document.createElement("a");a.href=i,a.download="",a.click()},r=async(i,a)=>{let c="",p=a;console.log("Downloading to filesystem",i.recursive);for(const[u,m,f]of i.recursive)f.dir||(t.dprogress.files.push(u),++t.dprogress.filecount,t.dprogress.total+=f.size);for(const[u,m,f]of i.recursive){c&&!u.startsWith(c+"/")&&(c="",p=a);const S=u.slice(c.length);for(const g of S.split("/").slice(0,f.dir?void 0:-1))if(g){c+=`${g}/`;try{p=await p.getDirectoryHandle(g.normalize("NFC"),{create:!0})}catch($){throw console.error("Failed to create directory",c,$),new Error(`Failed to create directory ${c}: ${$}`)}console.log("Created",c)}if(f.dir)continue;const I=u.split("/").pop().normalize("NFC");let b;try{b=await p.getFileHandle(I,{create:!0})}catch(g){throw console.error("Failed to create file",u,m,c+I,g),new Error(`Failed to create file ${c+I}: ${g}`)}try{const g=await b.createWritable(),$=`/files/${u}`;console.log("Fetching",$);const w=await Do($);if(!w.ok)throw t.error=`Failed to download ${$}: ${w.status} ${w.statusText}`,new Error(`Failed to download ${$}: ${w.status} ${w.statusText}`);if(w.body){++t.dprogress.fileidx;const k=w.body.getReader();for(await g.truncate(0),t.dprogress.tlast=Date.now();;){const{value:h,done:v}=await k.read();if(v)break;await g.write(h);const C=Date.now(),x=h.byteLength;t.dprogress.xfer+=x,t.dprogress.filepos+=x,t.dprogress.statbytes+=x,t.dprogress.statdur+=C-t.dprogress.tlast,t.dprogress.tlast=C}}await g.close(),console.log("Saved",c+I)}catch(g){throw console.error("Failed to write file",c+I,g),new Error(`Failed to write file ${c+I}: ${g}`)}}o()},l=async()=>{const i=t.selectedFiles;if(console.log("Download",i),i.keys.length===0){console.warn("Attempted download but no files found. Missing selected keys:",i.missing),t.showToast("No existing files selected"),t.selected.clear();return}const a=i.recursive.filter(([u,m,f])=>!f.dir);if(a.length===1)return t.selected.clear(),t.showToast(`Downloading ${a[0][0].split("/").pop()}`),s(`/files/${a[0][1]}`);if("showDirectoryPicker"in window)try{const u=await window.showDirectoryPicker({startIn:"downloads",mode:"readwrite"});await r(i,u),t.selected.clear();return}catch(u){console.error("Download to folder aborted",u)}console.log("Falling back to zip download");const c=i.keys.map(u=>i.docs[u]),p=tl(c);s(`/zip/${Array.from(i.keys).join("+")}/${p}.zip`),t.showToast(`Downloading ${p}.zip`),t.selected.clear()};return(i,a)=>{const c=Lt;return R(),ee(c,{name:"download","data-tooltip":"Download",onClick:l})}}}),Qa={class:"select-text"},ei=X({__name:"HeaderSelected",props:{path:Array},setup(e){const t=se(),n=e,o=K(()=>n.path.join("/")),s=(r,l)=>{const i=t.selectedFiles,a={op:r,sel:i.keys.map(p=>{const u=i.docs[p];return u.loc?`${u.loc}/${u.name}`:u.name})};l!==void 0&&(a.dst=l);const c=Ue(bt,{message(p){const u=JSON.parse(p.data);if("error"in u){console.error("Control socket error",a,u.error),t.error=u.error.message;return}else if(u.status==="ack"){console.log("Control ack OK",u),c.close(),t.selected.clear();return}else console.log("Unknown control response",a,u)}});c.onopen=()=>{c.send(JSON.stringify(a))}};return(r,l)=>{const i=Za,a=Lt;return y(t).selected.size?(R(),P(fe,{key:0},[l[4]||(l[4]=E("div",{class:"smallgap"},null,-1)),E("p",Qa,ne(y(t).selected.size)+" selected ➤",1),z(i),z(a,{name:"copy","data-tooltip":"Copy here",onClick:l[0]||(l[0]=c=>s("cp",o.value))}),z(a,{name:"paste","data-tooltip":"Move here",onClick:l[1]||(l[1]=c=>s("mv",o.value))}),z(a,{name:"trash","data-tooltip":"Delete ⚠️",onClick:l[2]||(l[2]=c=>s("rm"))}),E("button",{class:"action-button unselect","data-tooltip":"Unselect all",onClick:l[3]||(l[3]=c=>y(t).selected.clear())},"❌")],64)):q("",!0)}}}),ti=["id"],ni={key:0},oi={class:"modal-content"},Ko=X({__name:"ModalDialog",props:{title:{},name:{}},setup(e,{expose:t}){const n=D(null),o=D(null),s=se(),r=()=>{s.dialog="",Lo()},l=e;return t({show:()=>{s.dialog=l.name,hn(),ve(()=>{n.value?.focus();const a=o.value?.querySelector("input");a&&a.focus()})},close:r}),Ie(()=>{if(n.value){n.value.focus();const a=o.value?.querySelector("input");a&&a.focus()}}),(a,c)=>y(s).dialog===e.name?(R(),P("div",{key:0,class:"modal-overlay",onClick:de(r,["self"]),onKeydown:Qe(r,["escape"]),tabindex:"-1",ref_key:"overlay",ref:n},[E("div",{class:"modal-dialog",id:l.name,ref_key:"dialog",ref:o},[l.title?(R(),P("h1",ni,ne(l.title),1)):q("",!0),E("div",oi,[ue(a.$slots,"default",{},()=>[c[0]||(c[0]=We(" Dialog with no content ",-1)),E("button",{onClick:r},"OK")])])],8,ti)],544)):q("",!0)}}),si="/auth/password-change";async function ri(e,t,n){return await rt.post(si,{username:e,passwordChange:t,password:n})}const Bt="/auth/users";async function li(){return await rt.get(Bt)}async function no(e,t,n){return await rt.post(Bt,{username:e,password:t,privileged:n})}async function oo(e,t){return await rt.put(`${Bt}/${e}`,t)}async function so(e){return await rt.delete(`${Bt}/${e}`)}async function ai(e){return await rt.put("/api/config/public",{public:e})}const ii={class:"form-grid"},ci={class:"dialog-buttons"},ui=X({__name:"SettingsModal",setup(e){const t=D(!1),n=se(),o=D(),s=D(),r=et({passwordChange:"",password:""}),l=()=>{r.passwordChange="",r.password="",n.dialog=""},i=async a=>{a.preventDefault();try{if(r.passwordChange){if(!r.password){n.showToast("⚠️ Current password is required"),s.value.focus();return}await ri(n.user.username,r.passwordChange,r.password)}l()}catch(c){const p=c;n.showToast(p.message||"🛑 Unknown error")}finally{t.value=!1}};return(a,c)=>{const p=Ko;return R(),ee(p,{name:"settings",title:"Settings"},{default:Re(()=>[E("form",null,[y(n).user.isLoggedIn?(R(),P(fe,{key:0},[c[5]||(c[5]=E("h3",null,"Update your authentication",-1)),E("div",ii,[c[2]||(c[2]=E("label",{for:"passwordChange"},"New password:",-1)),wt(E("input",{ref_key:"passwordChange",ref:o,id:"passwordChange",type:"password",autocomplete:"new-password",spellcheck:"false",autocorrect:"off","onUpdate:modelValue":c[0]||(c[0]=u=>r.passwordChange=u)},null,512),[[Qt,r.passwordChange]]),c[3]||(c[3]=E("label",{for:"password"},"Current password:",-1)),wt(E("input",{ref_key:"password",ref:s,id:"password",name:"password",type:"password",autocomplete:"current-password",spellcheck:"false",autocorrect:"off","onUpdate:modelValue":c[1]||(c[1]=u=>r.password=u)},null,512),[[Qt,r.password]])]),E("div",ci,[E("input",{id:"close",type:"reset",value:"Close",class:"button",onClick:l}),c[4]||(c[4]=E("div",{class:"spacer"},null,-1)),E("input",{id:"submit",type:"submit",value:"Submit",class:"button",onClick:de(i,["prevent"])})])],64)):(R(),P(fe,{key:1},[c[7]||(c[7]=E("p",null,"No settings are available because you have not logged in.",-1)),E("div",{class:"dialog-buttons"},[c[6]||(c[6]=E("div",{class:"spacer"},null,-1)),E("input",{id:"close",type:"reset",value:"Close",class:"button",onClick:l})])],64))])]),_:1})}}}),di=ye(ui,[["__scopeId","data-v-127c9237"]]),fi={key:0,class:"loading"},pi={key:1},mi={class:"form-row"},hi={for:"publicAccess"},gi=["checked","onChange","disabled"],vi=["onClick"],yi=["onClick"],wi=["onClick","disabled"],ki=X({__name:"UserManagementModal",setup(e){const t=se(),n=D(!0),o=D([]),s=D(""),r=D("📋"),l=et({public:!1}),i=()=>{t.dialog="",s.value=""},a=async()=>{try{n.value=!0;const b=await li();o.value=b.users}catch(b){const g=b;t.showToast(g.message||"Failed to load users")}finally{n.value=!1}},c=async()=>{const b=window.prompt("Enter username for new user:");if(!(!b||!b.trim()))try{s.value="";const g=await no(b.trim(),void 0,!1);await a(),g.password&&(s.value=`User ${b.trim()} created. Password: ${g.password}`)}catch(g){const $=g;t.showToast($.message||"Failed to add user")}},p=async(b,g)=>{const $=g.target;try{await oo(b.username,{privileged:$.checked}),b.privileged=$.checked}catch(w){const k=w;t.showToast(k.message||"Failed to update user"),$.checked=b.privileged}},u=async b=>{const g=window.prompt("Enter new username:",b.username);if(!(!g||!g.trim()||g.trim()===b.username))try{s.value="";const $=await no(g.trim(),void 0,b.privileged);await so(b.username),await a(),$.password&&(s.value=`User renamed to ${g.trim()}. New password: ${$.password}`)}catch($){const w=$;t.showToast(w.message||"Failed to rename user")}},m=async b=>{if(confirm(`Reset password for ${b.username}? A new password will be generated.`))try{s.value="";const g=await oo(b.username,{password:""});g.password&&(s.value=`Password reset for ${b.username}. New password: ${g.password}`)}catch(g){const $=g;t.showToast($.message||"Failed to reset password")}},f=async b=>{if(confirm(`Delete user ${b}?`))try{await so(b),await a()}catch(g){const $=g;t.showToast($.message||"Failed to delete user")}},S=async(b=!1)=>{const g=s.value.match(/(?:Password|New password): (.+)/);if(g)if(await navigator.clipboard.writeText(g[1]),b){r.value="✅ Copied!";const $=s.value.replace(/(?:Password|New password): .+/,"Password copied to clipboard!");s.value=$,setTimeout(()=>{s.value="",r.value="📋"},3e3)}else s.value=""},I=async()=>{try{s.value="",await ai(l.public),t.server.public=l.public,s.value="Server settings updated"}catch(b){const g=b;t.showToast(g.message||"Failed to update settings")}};return be(()=>{l.public=t.server.public||!1,n.value=!1}),Be(()=>t.dialog,b=>{b==="usermgmt"&&!t.server.paskia&&a()}),Be(()=>t.server.public,b=>{l.public=b||!1}),(b,g)=>{const $=Ko;return R(),ee($,{name:"usermgmt",title:"Admin Settings"},{default:Re(()=>[n.value?(R(),P("div",fi,"Loading...")):(R(),P("div",pi,[g[8]||(g[8]=E("h3",null,"Server Settings",-1)),E("div",mi,[E("label",hi,[wt(E("input",{type:"checkbox",id:"publicAccess","onUpdate:modelValue":g[0]||(g[0]=w=>l.public=w),onChange:I},null,544),[[mo,l.public]]),g[3]||(g[3]=We(" Public access (anyone can read and write) ",-1))])]),y(t).server.paskia?(R(),P(fe,{key:0},[g[4]||(g[4]=E("h3",null,"User Management",-1)),g[5]||(g[5]=E("p",null,[We("See "),E("a",{href:"/auth/admin/"},"Paskia Admin"),We(".")],-1))],64)):(R(),P(fe,{key:1},[g[7]||(g[7]=E("h3",null,"Users",-1)),E("button",{onClick:c,class:"button",title:"Add new user"},"➕ Add User"),s.value?(R(),P("div",{key:0,class:"success-message",onClick:g[2]||(g[2]=w=>S(!1))},[We(ne(s.value)+" ",1),s.value.includes("Password:")||s.value.includes("New password:")?(R(),P("button",{key:0,onClick:g[1]||(g[1]=de(w=>S(!0),["stop"])),class:"button small",title:"Copy to clipboard"},ne(r.value),1)):q("",!0)])):q("",!0),E("table",null,[g[6]||(g[6]=E("thead",null,[E("tr",null,[E("th",null,"Username"),E("th",null,"Admin"),E("th",null,"Actions")])],-1)),E("tbody",null,[(R(!0),P(fe,null,st(o.value,w=>(R(),P("tr",{key:w.username},[E("td",null,ne(w.username),1),E("td",null,[E("input",{type:"checkbox",checked:w.privileged,onChange:k=>p(w,k),disabled:w.username===y(t).user.username},null,40,gi)]),E("td",null,[E("button",{onClick:k=>u(w),class:"button small",title:"Rename user"},"✏️",8,vi),E("button",{onClick:k=>m(w),class:"button small",title:"Reset password"},"🔑",8,yi),E("button",{onClick:k=>f(w.username),class:"button small danger",disabled:w.username===y(t).user.username,title:"Delete user"},"🗑️",8,wi)])]))),128))])])],64)),E("div",{class:"dialog-buttons"},[E("button",{onClick:i,class:"button"},"Close")])]))]),_:1})}}}),bi=ye(ki,[["__scopeId","data-v-afe859c3"]]),Ci={key:0,class:"modal-overlay"},xi=X({__name:"AccessDeniedModal",setup(e){const t=se(),n=()=>{location.reload()};return Ie(()=>{t.dialog==="accessdenied"&&hn()}),(o,s)=>y(t).dialog==="accessdenied"?(R(),P("div",Ci,[E("div",{class:"modal-dialog",id:"accessdenied"},[E("div",{class:"modal-content access-denied"},[s[0]||(s[0]=E("p",{class:"icon"},"⛔",-1)),s[1]||(s[1]=E("p",{class:"message"},"Access Denied",-1)),E("button",{onClick:n,class:"button"},"Reload")])])])):q("",!0)}}),Si=ye(xi,[["__scopeId","data-v-eaaa3c09"]]),_i=X({__name:"App",setup(e){const t=se(),n=K(()=>{const l=decodeURIComponent(je.currentRoute.value.path).split("//"),i=(l[0]??"").split("/").filter(c=>c!==""),a=l.slice(1).join("//");return{path:l[0]??"",pathList:i,query:a}});Ie(()=>{document.title=n.value.path.replace(/\/$/,"").split("/").pop()||t.server.name||"Cista Storage"}),be(qr),be(Tt),yt(Gr);const o=D(null);let s=null;const r=l=>{if(t.dialog){s&&(clearTimeout(s),s=null);return}const i=t.fileExplorer;if(!i)return;const a=i.isCursor(),c=l.target.tagName==="INPUT",p=l.type==="keyup";if(l.repeat){(l.key==="ArrowUp"||l.key==="ArrowDown"||l.key==="ArrowLeft"||l.key==="ArrowRight"||a&&l.code==="Space")&&(c||l.preventDefault());return}let u="";if(!c&&l.key.startsWith("Arrow"))u=l.key.slice(5).toLowerCase();else if(!p&&l.key==="f"&&(l.ctrlKey||l.metaKey))o.value.toggleSearchInput();else if(!c&&p&&l.key==="/")o.value.toggleSearchInput();else if(p&&l.key==="Escape")t.error="",t.clearToast(),o.value.closeSearch(l),t.focusBreadcrumb();else if(!c&&p&&l.key==="Backspace")je.back();else if(!c&&!p&&l.key==="a"&&(l.ctrlKey||l.metaKey))i.toggleSelectAll();else if(!c&&p&&l.key==="g")t.prefs.gallery=!t.prefs.gallery;else if(!c&&p&&(l.code==="Backquote"||l.key==="1"||l.key==="2"||l.key==="3"))t.sort(["","name","modified","size"][+l.key||0]);else if(!c&&a&&p&&!l.ctrlKey&&(l.key==="F2"||l.key==="r"))i.cursorRename();else if(!c&&a&&l.code==="Space")p&&!l.altKey&&!l.ctrlKey&&i.cursorSelect();else return;l.preventDefault(),s&&(clearTimeout(s),s=null);let m;switch(u){case"up":m=()=>i.up(l);break;case"down":m=()=>i.down(l);break;case"left":m=()=>i.left(l);break;case"right":m=()=>i.right(l);break}if(m&&!p){const S=l.altKey?20:100;m(),s=setTimeout(()=>{s=setInterval(m,S)},200-S)}};return be(()=>{window.addEventListener("keydown",r),window.addEventListener("keyup",r)}),yt(()=>{window.removeEventListener("keydown",r),window.removeEventListener("keyup",r)}),(l,i)=>{const a=di,c=ei,p=Ya,u=vn,m=Is;return R(),P(fe,null,[y(t).toast?(R(),P("div",{key:0,class:"toast-message",onClick:i[0]||(i[0]=f=>y(t).clearToast())},ne(y(t).toast),1)):y(t).error&&!y(t).authInProgress?(R(),P("div",{key:1,class:"toast-message status",onClick:i[1]||(i[1]=f=>y(t).error="")},ne(y(t).error),1)):q("",!0),z(a),z(bi),z(Si),E("header",null,[z(p,{ref_key:"headerMain",ref:o,path:n.value.pathList,query:n.value.query},{default:Re(()=>[z(c,{path:n.value.pathList},null,8,["path"])]),_:1},8,["path","query"]),z(u,{path:n.value.pathList,primary:""},null,8,["path"])]),E("main",null,[z(y(Oo),{path:n.value.pathList,query:n.value.query},null,8,["path","query"])]),E("footer",null,[z(m,{status:y(t).uprogress,onCancel:y(t).cancelUploads,class:"upload"},null,8,["status","onCancel"]),z(m,{status:y(t).dprogress,onCancel:y(t).cancelDownloads,class:"download"},null,8,["status","onCancel"])])],64)}}});function Ei(e,t){if(e==null)return;let n=e;for(let o=0;o<t.length;o++){if(n===void 0||n[t[o]]===void 0)return;if(n===null||n[t[o]]===null)return null;n=n[t[o]]}return n}function bn(e,t,n){if(n.length===0)return t;const o=n[0];return n.length>1&&(t=bn(typeof e!="object"||e===null||!Object.prototype.hasOwnProperty.call(e,o)?Number.isInteger(Number(n[1]))?[]:{}:e[o],t,Array.prototype.slice.call(n,1))),Number.isInteger(Number(o))&&Array.isArray(e)?e.slice()[o]:Object.assign({},e,{[o]:t})}function Jo(e,t){if(e==null||t.length===0)return e;if(t.length===1){if(e==null)return e;if(Number.isInteger(t[0])&&Array.isArray(e))return Array.prototype.slice.call(e,0).splice(t[0],1);const n={};for(const o in e)n[o]=e[o];return delete n[t[0]],n}if(e[t[0]]==null){if(Number.isInteger(t[0])&&Array.isArray(e))return Array.prototype.concat.call([],e);const n={};for(const o in e)n[o]=e[o];return n}return bn(e,Jo(e[t[0]],Array.prototype.slice.call(t,1)),[t[0]])}function Yo(e,t){return t.map(n=>n.split(".")).map(n=>[n,Ei(e,n)]).filter(n=>n[1]!==void 0).reduce((n,o)=>bn(n,o[1],o[0]),{})}function Xo(e,t){return t.map(n=>n.split(".")).reduce((n,o)=>Jo(n,o),e)}function ro(e,{storage:t,serializer:n,key:o,debug:s,pick:r,omit:l,beforeHydrate:i,afterHydrate:a},c,p=!0){try{p&&i?.(c);const u=t.getItem(o);if(u){const m=n.deserialize(u),f=r?Yo(m,r):m,S=l?Xo(f,l):f;e.$patch(S)}p&&a?.(c)}catch(u){s&&console.error("[pinia-plugin-persistedstate]",u)}}function lo(e,{storage:t,serializer:n,key:o,debug:s,pick:r,omit:l}){try{const i=r?Yo(e,r):e,a=l?Xo(i,l):i,c=n.serialize(a);t.setItem(o,c)}catch(i){s&&console.error("[pinia-plugin-persistedstate]",i)}}function Ri(e,t){return typeof e=="function"?e(t):typeof e=="string"?e:t}function Ii(e,t,n){const{pinia:o,store:s,options:{persist:r=n}}=e;if(!r)return;if(!(s.$id in o.state.value)){const i=o._s.get(s.$id.replace("__hot:",""));i&&Promise.resolve().then(()=>i.$persist());return}const l=(Array.isArray(r)?r:r===!0?[{}]:[r]).map(t);s.$hydrate=({runHooks:i=!0}={})=>{l.forEach(a=>{ro(s,a,e,i)})},s.$persist=()=>{l.forEach(i=>{lo(s.$state,i)})},l.forEach(i=>{ro(s,i,e),s.$subscribe((a,c)=>lo(c,i),{detached:!0})})}function Ai(e={}){return function(t){Ii(t,n=>{const o=Ri(n.key,t.store.$id);return{key:(e.key?e.key:s=>s)(o),debug:n.debug??e.debug??!1,serializer:n.serializer??e.serializer??{serialize:s=>JSON.stringify(s),deserialize:s=>JSON.parse(s)},storage:n.storage??e.storage??window.localStorage,beforeHydrate:n.beforeHydrate??e.beforeHydrate,afterHydrate:n.afterHydrate??e.afterHydrate,pick:n.pick,omit:n.omit}},e.auto??!1)}}var $i=Ai();const Ct=ms(_i);Ct.config.errorHandler=e=>{console.log(e)};const Zo=hs();Zo.use($i);Ct.use(Zo);Ct.use(je);Ct.use(Dt);Ct.mount("#app");
|
|
@@ -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 (max-height:600px){:root{--header-font-size: calc(10px + 10 * 100vh / 600);--root-font-size: .8rem;--header-height: 2rem}header .breadcrumb>*{padding-top:calc(8 + 8 * 100vh / 600)!important;padding-bottom:calc(8 + 8 * 100vh / 600)!important}}@media screen and (max-height:300px){:root{--header-font-size: 15px;--header-height: 28px ;--root-font-size: .6rem}header .breadcrumb>*{padding-top:14px!important;padding-bottom:14px!important}}@media screen and (orientation:landscape)and (min-width:700px){:root{--header-font-size: calc(8px + 8 * 100vh / 600)}header{display:flex;justify-content:space-between}header .headermain{order:1}header .breadcrumb{align-self:stretch}header .action-button{width:2em;height:2em}}@media print{:root{--primary-color: black;--primary-background: none;--header-background: none;--header-color: black}.headermain,.menu,.rename-button{display:none!important}.breadcrumb>a{color:#000!important;background:none!important;padding:0!important;margin:0!important;clip-path:none!important;max-width:none!important}.breadcrumb>a:after{content:"/"}.breadcrumb svg{fill:#000!important;margin:0 .5rem 0 1rem!important}body#app{position:static!important;height:auto!important}main{padding-bottom:0!important}thead tr{font-size:1rem!important;position:static!important;background:none!important;border-bottom:1pt solid black!important}audio::-webkit-media-controls-timeline,video::-webkit-media-controls-timeline{display:none}audio::-webkit-media-controls,video::-webkit-media-controls{display:none}tr,figure{page-break-inside:avoid}.selection{min-width:0!important;padding:0!important}.selection input{display:none}.selection input:checked{display:inherit}tbody .selection input:checked{opacity:1!important;transform:scale(.5);left:0}}*{box-sizing:border-box}html{font-size:var(--root-font-size);overflow:hidden}main{-ms-overflow-style:none;scrollbar-width:none}body{background-color:var(--primary-background);font-size:1rem;font-family:Roboto;color:var(--primary-color);margin:0;overflow:hidden;height:100vh;height:100dvh}tbody .size,tbody .modified{font-family:Roboto Mono}header{flex:0 0 auto;background-color:var(--header-background);color:var(--header-color);font-size:var(--header-font-size)}main{height:100%}::selection{color:#000;background:#ff0!important}button{font:inherit;color:inherit;margin:0;border:0;padding:0;background:none;cursor:pointer;min-width:1rem;min-height:1rem}input{margin:0}:focus{outline:none}a:link,a:visited,a:active,a:hover{color:var(--primary-color);text-decoration:none}table{border-collapse:collapse;border-spacing:0;border:0;gap:0}body#app{position:fixed;inset:0;display:flex;flex-direction:column}main{flex:1 1 auto;min-height:0;padding-bottom:3em;overflow-y:scroll;text-align:center}header nav.headermain{position:relative;z-index:100}.spacer{flex-grow:1}.smallgap{flex-shrink:1;width:2em}[data-tooltip]:hover:after{z-index:101;content:attr(data-tooltip);position:absolute;pointer-events:none;font-size:1rem;text-align:center;padding:.5rem 1rem;border-radius:3rem 0;box-shadow:0 0 1rem var(--accent-color);transform:translate(calc(1rem - 50%),150%);background-color:var(--accent-color);color:var(--primary-color);white-space:pre;animation:appearbriefly calc(10 * var(--transition-time)) linear forwards}@keyframes appearbriefly{0%{opacity:0}30%{opacity:0}40%{opacity:1}90%{opacity:1}to{opacity:0}}.error-message{padding:.5em;font-weight:700;background:var(--accent-color);color:#000}.transferprogress[data-v-fc92216f]{--bar: var(--accent-color);--nobar: var(--header-background);display:flex;flex-direction:column;color:var(--primary-color);width:100%}.statustext[data-v-fc92216f]{display:flex;align-items:center;margin:0 .5em;padding:.5rem 0}span[data-v-fc92216f]{color:#ccc;white-space:nowrap;text-align:right;padding:0 .5em}.filename[data-v-fc92216f]{color:#fff;flex:1 1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left}.index[data-v-fc92216f]{min-width:3.5em}.position[data-v-fc92216f],.speed[data-v-fc92216f]{min-width:4em}.upload .statustext[data-v-fc92216f]:before{font-size:1.5em;content:"🔺"}.download .statustext[data-v-fc92216f]:before{font-size:1.5em;content:"🔻"}:root{--breadcrumb-background-odd: #2d2d2d;--breadcrumb-background-even: #404040;--breadcrumb-color: #ddd;--breadcrumb-hover-color: #fff;--breadcrumb-hover-background-odd: #25a;--breadcrumb-hover-background-even: #812;--breadcrumb-transtime: .3s}.breadcrumb{flex:1 1 auto;display:flex;min-width:20%;max-width:100%;min-height:2em;margin:0;padding:0 1em 0 0;overflow:hidden}.breadcrumb>a{flex:0 4 auto;display:flex;align-items:center;margin:0 -.5em;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;color:var(--breadcrumb-color);padding:.3em 1.5em;clip-path:polygon(0 0,1em 50%,0 100%,100% 100%,100% 0,0 0);transition:all var(--breadcrumb-transtime)}.breadcrumb>a:first-child{flex:0 0 auto;padding-left:1.5em;padding-right:1.7em;clip-path:none}.breadcrumb>a:last-child{clip-path:polygon(0 0,calc(100% - 1em) 0,100% 50%,calc(100% - 1em) 100%,0 100%,1em 50%,0 0)}.breadcrumb>a:only-child{clip-path:polygon(0 0,calc(100% - 1em) 0,100% 50%,calc(100% - 1em) 100%,0 100%,0 0)}.breadcrumb svg{width:1.3em;height:1.3em;margin:-.5em;fill:var(--breadcrumb-color);transition:fill var(--breadcrumb-transtime)}.breadcrumb a:nth-child(odd){background:var(--breadcrumb-background-odd)}.breadcrumb a:nth-child(2n){background:var(--breadcrumb-background-even)}.breadcrumb a:nth-child(odd):hover,.breadcrumb a:focus:nth-child(odd){background:var(--breadcrumb-hover-background-odd)}.breadcrumb a:nth-child(2n):hover,.breadcrumb a:focus:nth-child(2n){background:var(--breadcrumb-hover-background-even)}.breadcrumb a:hover{color:var(--breadcrumb-hover-color)}.breadcrumb a:hover svg{fill:var(--breadcrumb-hover-color)}.breadcrumb a.current{color:var(--accent-color);max-width:none;flex:0 1 auto}.breadcrumb a.current svg{fill:var(--accent-color)}.action-button{background:none;border:none;color:#ccc;cursor:pointer;transition:all .2s ease;padding:.2em;width:3em;height:3em}.action-button:hover,.action-button:focus{color:#fff;transform:scale(1.1)}svg{fill:#ccc;transform:fill .2s ease}.action-button:hover svg,.action-button:focus svg{fill:#fff}@keyframes rotate-0494c508{0%{transform:rotate(0)}to{transform:rotate(360deg)}}svg.cog[data-v-0494c508]{width:10rem;height:10rem;margin:0 auto;animation:rotate-0494c508 10s linear infinite;filter:drop-shadow(0 0 1rem black);fill:#888}svg.cog.stopped[data-v-0494c508]{animation:none}input#FileRenameInput{color:var(--input-color);background:var(--input-background);border:0;border-radius:.3rem;padding:.4rem;margin:-.4rem;width:100%;outline:none;font:inherit}.gallery input#FileRenameInput{padding:.75em;font-weight:600;width:auto}img[data-v-47490c5c],embed[data-v-47490c5c],.icon[data-v-47490c5c],audio[data-v-47490c5c],video[data-v-47490c5c]{font-size:8em;overflow:hidden;min-width:50%;max-width:100%;max-height:100%;border-radius:.0625em}.folder[data-v-47490c5c]:before{content:"📁"}.folder[data-v-47490c5c]:hover:before,.cursor .folder[data-v-47490c5c]:before{content:"📂"}.archive[data-v-47490c5c]:before{content:"📦"}.file[data-v-47490c5c]:before{content:"📄"}.ext-img[data-v-47490c5c]:before{content:"💿"}.ext-exe[data-v-47490c5c]:before,.ext-msi[data-v-47490c5c]:before,.ext-dmg[data-v-47490c5c]:before,.ext-pkg[data-v-47490c5c]:before{content:"⚙️"}.ext-torrent[data-v-47490c5c]:before{content:"🏴☠️"}.audio audio[data-v-47490c5c]{opacity:0;transition:opacity var(--transition-time) ease-in-out}.audio:hover audio[data-v-47490c5c]{opacity:1}.audio.icon[data-v-47490c5c]:before{width:100%;content:"🔈"}.audio.icon[data-v-47490c5c]:has(audio[data-playing]):before{position:absolute;content:"🔊";bottom:0}.icon[data-v-47490c5c]{filter:brightness(.9)}figure.cursor .icon[data-v-47490c5c]{filter:brightness(1)}img[data-v-47490c5c]:before{text-shadow:0 0 .5rem #000;filter:grayscale(1);content:"❌"}.video-container[data-v-47490c5c]{position:relative;display:flex;align-items:center;justify-content:center;min-width:50%;max-width:100%;max-height:100%}.video-container video[data-v-47490c5c]{width:100%;height:100%;border-radius:.0625em;object-fit:contain}.play-overlay[data-v-47490c5c]{position:absolute;display:flex;align-items:center;justify-content:center;pointer-events:none;width:4em;height:4em;background:#0003;border-radius:50%;transition:opacity .2s ease,transform .2s ease}.play-overlay svg[data-v-47490c5c]{width:2em;height:2em;fill:#fff;margin-left:.25em}.video-container:hover .play-overlay[data-v-47490c5c]{transform:scale(1.1)}video[data-playing]+.play-overlay[data-v-47490c5c]{opacity:0}.cursor-tooltip[data-v-c5d421fc]{position:fixed;z-index:10000;padding:.5rem 1rem;border-radius:3rem 0;box-shadow:0 0 1rem var(--accent-color);background-color:var(--accent-color);color:var(--primary-color);white-space:nowrap;pointer-events:none;font-size:1rem}.tooltip-name[data-v-91479c1d]{font-weight:600;text-align:center}.tooltip-details[data-v-91479c1d]{text-align:center}figure[data-v-91479c1d]{max-height:15em;position:relative;border-radius:.5em;margin:0;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden}figure>article[data-v-91479c1d]{flex:0 0 auto}figure[data-v-91479c1d] .video-container{height:15em}.titlespacer[data-v-91479c1d]{flex-shrink:100000;width:100%;height:2em}figcaption[data-v-91479c1d]{position:absolute;overflow:hidden;bottom:0;display:flex;align-items:center;justify-content:center;width:100%}figcaption input[type=checkbox][data-v-91479c1d]{width:1.5em;height:1.5em;margin:.25em 0 .25em .25em;opacity:0;flex-shrink:0;transition:opacity var(--transition-time) ease-in-out}figcaption input[type=checkbox][data-v-91479c1d]:checked,figcaption:hover input[type=checkbox][data-v-91479c1d]{opacity:1}figcaption span[data-v-91479c1d]{cursor:default;padding:.5em;color:#fff;font-weight:600;text-shadow:0 0 .2em #000,0 0 .2em #000;text-wrap:nowrap;text-overflow:ellipsis;overflow:hidden}.cursor figcaption span[data-v-91479c1d]{color:var(--accent-color)}figcaption .namespacer[data-v-91479c1d]{flex-shrink:100000;height:2em;width:2em}.gallery[data-v-9973e293]{padding:1em;width:100%;display:grid;gap:.5em;grid-template-columns:repeat(auto-fill,minmax(15em,1fr));align-items:end}.folder-indicator[data-v-9973e293]{grid-column:1 / -1}.folder-start[data-v-9973e293]{grid-column-start:1}.size.empty[data-v-444c7802]{color:#555}.size.bytes[data-v-444c7802]{color:#77a}.size.kB[data-v-444c7802]{color:#474}.size.MB[data-v-444c7802]{color:#a80}.size.GB[data-v-444c7802]{color:#f83}.size.TB[data-v-444c7802],.size.PB[data-v-444c7802],.size.EB[data-v-444c7802],.size.huge[data-v-444c7802]{color:#f44;text-shadow:0 0 .2em}@media(prefers-color-scheme:dark){.size.empty[data-v-444c7802]{color:#bbb}.size.bytes[data-v-444c7802]{color:#99d}.size.kB[data-v-444c7802]{color:#aea}.size.MB[data-v-444c7802]{color:#ff4}.size.GB[data-v-444c7802]{color:#f86}.size.TB[data-v-444c7802],.size.PB[data-v-444c7802],.size.EB[data-v-444c7802],.size.huge[data-v-444c7802]{color:#f55}}.cursor .size[data-v-444c7802]{color:inherit;text-shadow:none}table[data-v-c61c7c3a]{width:100%;table-layout:fixed}thead tr[data-v-c61c7c3a]{position:sticky;top:0;z-index:2}tbody tr[data-v-c61c7c3a]{position:relative;z-index:auto}table thead .selection input[type=checkbox][data-v-c61c7c3a]{position:inherit;width:1rem;height:1rem;padding:0;margin:auto}table tbody .selection input[type=checkbox][data-v-c61c7c3a]{width:2rem;height:2rem}table .selection[data-v-c61c7c3a]{width:3rem;text-align:center;text-overflow:clip;padding:0}table .selection input[data-v-c61c7c3a]{margin:auto}table .modified[data-v-c61c7c3a]{width:10rem;text-overflow:clip}table .size[data-v-c61c7c3a]{width:7rem;text-overflow:clip}table .menu[data-v-c61c7c3a]{width:2rem}tbody td[data-v-c61c7c3a]{font-size:1.2rem}table th[data-v-c61c7c3a],table td[data-v-c61c7c3a]{padding:0 .5rem;font-weight:400;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.name[data-v-c61c7c3a]{white-space:nowrap;position:relative}.name .rename-button[data-v-c61c7c3a]{position:absolute;right:0;animation:appear-c61c7c3a calc(5 * var(--transition-time)) linear}@keyframes appear-c61c7c3a{0%{opacity:0}80%{opacity:0}to{opacity:1}}thead tr[data-v-c61c7c3a]{font-size:.8rem;background:linear-gradient(to bottom,#eee,#fff 30%,#ddd);color:#000;box-shadow:0 0 .2rem #000}tbody tr.cursor[data-v-c61c7c3a]{background:var(--accent-color)}.right[data-v-c61c7c3a]{text-align:right}.sortcolumn[data-v-c61c7c3a]:hover{cursor:pointer}.sortcolumn[data-v-c61c7c3a]:hover:after{color:var(--accent-color)}.sortcolumn[data-v-c61c7c3a]{padding-right:1.5rem}.sortcolumn[data-v-c61c7c3a]:after{font-size:1rem;content:"▸";color:#888;margin-left:.5rem;margin-top:-.2rem;position:absolute;transition:all var(--transition-time) linear}.sortactive[data-v-c61c7c3a]:after{transform:rotate(90deg);color:var(--accent-color)}.name a[data-v-c61c7c3a]{text-decoration:none}tbody .selection input[data-v-c61c7c3a]{z-index:1;position:absolute;opacity:0;left:.5rem;top:0}.selection[data-v-c61c7c3a]{width:2em;height:2em}.selection input[data-v-c61c7c3a]:checked{opacity:.7}.file .selection[data-v-c61c7c3a]:before{content:"📄";font-size:1.5rem}.folder .selection[data-v-c61c7c3a]:before{height:2rem;content:"📁";font-size:1.5rem}.empty-container[data-v-c61c7c3a]{padding-top:3rem;text-align:center;font-size:3rem;color:var(--accent-color)}.folder-change[data-v-c61c7c3a]{margin-left:-.5rem}.loc[data-v-c61c7c3a],.summary[data-v-c61c7c3a]{color:#888}.empty-container[data-v-d099f78a]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;font-size:2rem;text-shadow:0 0 .3rem #000,0 0 2rem #0008;color:var(--accent-color)}.search-loading[data-v-d099f78a]{position:fixed;bottom:1rem;right:1rem;padding:.5rem 1rem;background:var(--accent-color, #007bff);color:#fff;border-radius:.25rem;font-size:.875rem;opacity:.9}.buttons[data-v-b9ddc09f]{flex:1000 0 auto;padding:0;display:flex;align-items:center;z-index:10}input[type=search][data-v-b9ddc09f]{background:var(--input-background);color:var(--input-color);border:0;border-radius:.1em;outline:none;max-width:15ch}.select-text{color:var(--accent-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0}.modal-overlay{position:fixed;inset:0;z-index:1100;display:flex;align-items:center;justify-content:center}.modal-dialog{background:#ddd;color:#000;border:none;border-radius:.5rem;box-shadow:0 0 1rem #0008;padding:0;max-width:90vw;max-height:90vh;overflow:auto;font-size:1rem}.modal-dialog>h1{background:#146;color:#fff;font-size:1.2rem;font-weight:400;margin:0;padding:.5rem 1rem;position:sticky;top:0}.modal-dialog>.modal-content{padding:1rem}.modal-dialog h3{font-size:1rem;font-weight:600;margin:1rem 0 .5rem}.modal-dialog h3:first-child{margin-top:0}.modal-dialog a{color:#146}.modal-dialog a:hover{color:#f80}.modal-dialog input[type=text],.modal-dialog input[type=password],.modal-dialog select{font:inherit;font-size:1rem;padding:.5rem;border:2px solid #888;border-radius:.25rem;background:#fff;color:#000;min-width:12rem}.modal-dialog input[type=text]:focus,.modal-dialog input[type=password]:focus,.modal-dialog select:focus{outline:none;border-color:#f80}.modal-dialog label{font-size:1rem}.modal-dialog button,.modal-dialog input[type=submit],.modal-dialog input[type=reset],.modal-dialog .button{font:inherit;font-size:1rem;padding:.5rem 1rem;background:#146;color:#fff;border:none;border-radius:.25rem;cursor:pointer}.modal-dialog button:hover,.modal-dialog input[type=submit]:hover,.modal-dialog input[type=reset]:hover,.modal-dialog .button:hover{background:#f80}.modal-dialog button:disabled,.modal-dialog input[type=submit]:disabled,.modal-dialog input[type=reset]:disabled,.modal-dialog .button:disabled{background:#888;cursor:not-allowed}.modal-dialog .button.small{padding:.25rem .5rem;font-size:.875rem}.modal-dialog .button.danger{background:#c00}.modal-dialog .button.danger:hover:not(:disabled){background:red}.modal-dialog .form-row{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1rem;align-items:center;margin-bottom:.5rem}.modal-dialog .form-grid{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1rem;align-items:center}.modal-dialog .dialog-buttons{display:flex;justify-content:flex-end;align-items:center;gap:.5rem;margin-top:1rem}.modal-dialog .error-text{color:#c00;font-size:.875rem;min-height:1.2em;margin:.5rem 0}.modal-dialog .success-message{background:#f80;color:#000;padding:.5rem;border-radius:.25rem;margin:.5rem 0;display:flex;align-items:center;gap:.5rem;font-size:.875rem}.modal-dialog table{width:100%;border-collapse:collapse;margin:.5rem 0;font-size:1rem}.modal-dialog th,.modal-dialog td{border:1px solid #888;padding:.5rem;text-align:left}.modal-dialog th{background:#146;color:#fff;font-weight:400}.modal-dialog td{background:#fff}.modal-dialog td input[type=checkbox]{margin:0}.modal-dialog p{margin:0 0 .5rem;font-size:1rem}.modal-dialog .loading{padding:2rem;text-align:center;color:#666}.access-denied[data-v-eaaa3c09]{text-align:center;padding:2rem!important}.access-denied .icon[data-v-eaaa3c09]{font-size:4rem;margin:0 0 1rem}.access-denied .message[data-v-eaaa3c09]{font-size:1.5rem;font-weight:700;margin:0 0 1.5rem}.toast-message{position:fixed;top:1rem;left:50%;transform:translate(-50%);z-index:2000;padding:.75rem 1.5rem;background:var(--accent-color);color:#000;font-weight:700;border-radius:.25rem;box-shadow:0 .25rem 1rem #0000004d;cursor:pointer;max-width:90vw;text-align:center}.toast-message.status{background:#555;color:#fff}:root{--vue-scroll-rect-scrollbar-thumb-color: rgba(122,122,122, .3);--vue-scroll-rect-scrollbar-thumb-color-light: rgba(122, 122, 122, .5);--vue-scroll-rect-scrollbar-thumb-color-pressed: rgba(112, 112, 112, .2);--vue-scroll-rect-scrollbar-thumb-radius: 5px;--vue-scroll-rect-scrollbar-thumb-margin: 0px;--vue-scroll-rect-scrollbar-size: 8px}.vue-scroll-rect{position:relative;width:100%;height:100%;margin:0;overflow:hidden}.vue-scroll-rect>.scroll-content{position:relative;max-width:100%;max-height:100%;scrollbar-width:none;-ms-overflow-style:none}.vue-scroll-rect>.scroll-content::-webkit-scrollbar{width:0;height:0}.vue-scroll-rect>.scroll-content::-ms-scrollbar{width:0;height:0}.vue-scroll-rect>.scroll-content.both{overflow:scroll}.vue-scroll-rect>.scroll-content.horizontal{overflow-x:scroll}.vue-scroll-rect>.scroll-content.vertical{overflow-y:scroll}.vue-scroll-rect:hover>.scrollbar{opacity:1;transition:opacity .1s}.vue-scroll-rect.always-show-scrollbar>.scrollbar,.vue-scroll-rect .dragging>.scrollbar{opacity:1}.vue-scroll-rect.background-clickable>.scrollbar{pointer-events:all}.vue-scroll-rect>.scrollbar{position:absolute;opacity:0;transition:opacity 1.5s;pointer-events:none}.vue-scroll-rect>.scrollbar:hover{opacity:1}.vue-scroll-rect>.scrollbar .thumb{position:absolute;background-color:var(--vue-scroll-rect-scrollbar-thumb-color);border-radius:var(--vue-scroll-rect-scrollbar-thumb-radius);pointer-events:all}.vue-scroll-rect>.scrollbar .thumb:hover{background-color:var(--vue-scroll-rect-scrollbar-thumb-color-light)}.vue-scroll-rect>.scrollbar .thumb:active{background-color:var(--vue-scroll-rect-scrollbar-thumb-color-pressed)}.vue-scroll-rect>.scrollbar.horizontal{left:0;bottom:0;right:0;height:var(--vue-scroll-rect-scrollbar-size)}.vue-scroll-rect>.scrollbar.horizontal .thumb{top:var(--vue-scroll-rect-scrollbar-thumb-margin);bottom:var(--vue-scroll-rect-scrollbar-thumb-margin)}.vue-scroll-rect>.scrollbar.vertical{top:0;bottom:0;right:0;width:var(--vue-scroll-rect-scrollbar-size)}.vue-scroll-rect>.scrollbar.vertical .thumb{left:var(--vue-scroll-rect-scrollbar-thumb-margin);right:var(--vue-scroll-rect-scrollbar-thumb-margin)}:root{--mx-menu-backgroud: #fff;--mx-menu-hover-backgroud: #f1f1f1;--mx-menu-active-backgroud: #dfdfdf;--mx-menu-open-backgroud: #f1f1f1;--mx-menu-open-hover-backgroud: #f1f1f1;--mx-menu-divider: #f0f0f0;--mx-menu-text: #2e2e2e;--mx-menu-hover-text: #2e2e2e;--mx-menu-active-text: #2e2e2e;--mx-menu-open-text: #2e2e2e;--mx-menu-open-hover-text: #2e2e2e;--mx-menu-disabled-text: #c9c8c8;--mx-menu-icon-size: 16px;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-scrollbar-thumb-color: rgba(0, 0, 0, .2);--mx-menu-scrollbar-thumb-color-light: rgba(0, 0, 0, .3);--mx-menu-scrollbar-thumb-color-pressed: rgba(0, 0, 0, .1);--mx-menu-shortcut-backgroud: #ebebeb;--mx-menu-shortcut-backgroud-hover:#ebebeb;--mx-menu-shortcut-backgroud-active:#ebebeb;--mx-menu-shortcut-backgroud-open:#ebebeb;--mx-menu-shortcut-backgroud-disabled:#fdfdfd;--mx-menu-shortcut-text: #424242;--mx-menu-shortcut-text-hover: #424242;--mx-menu-shortcut-text-active: #424242;--mx-menu-shortcut-text-open: #424242;--mx-menu-shortcut-text-disabled: #a5a5a5;--mx-menu-placeholder-width: 24px}.mx-context-menu{pointer-events:all;display:inline-block;overflow:visible;position:absolute;background-color:var(--mx-menu-backgroud);border-radius:var(--mx-menu-backgroud-radius);padding:12px 0;box-shadow:0 10px 40px 10px var(--mx-menu-shadow-color);opacity:1;transition:opacity .2s ease-in-out;--vue-scroll-rect-scrollbar-thumb-color: var(--mx-menu-scrollbar-thumb-color);--vue-scroll-rect-scrollbar-thumb-color-light: var(--mx-menu-scrollbar-thumb-color-light);--vue-scroll-rect-scrollbar-thumb-color-pressed: var(--mx-menu-scrollbar-thumb-color-pressed)}.mx-context-menu-items{position:relative;overflow:visible}.mx-context-menu-scroll{overscroll-behavior:contain}.mx-context-menu-item{display:flex;flex-direction:row;justify-content:space-between;align-items:center;position:relative;padding:6px 15px;-webkit-user-select:none;user-select:none;overflow:visible;white-space:nowrap;text-overflow:ellipsis;color:var(--mx-menu-text)}.mx-context-menu-item .mx-right-arrow,.mx-context-menu-item .mx-checked-mark{fill:var(--mx-menu-text)}.mx-context-menu-item:hover{background-color:var(--mx-menu-hover-backgroud);color:var(--mx-menu-hover-text)}.mx-context-menu-item:hover .mx-right-arrow,.mx-context-menu-item:hover .mx-checked-mark{fill:var(--mx-menu-hover-text)}.mx-context-menu-item:hover .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-hover);color:var(--mx-menu-shortcut-text-hover)}.mx-context-menu-item:active{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text)}.mx-context-menu-item:active .mx-right-arrow,.mx-context-menu-item:active .mx-checked-mark{fill:var(--mx-menu-active-text)}.mx-context-menu-item:active .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-active);color:var(--mx-menu-shortcut-text-active)}.mx-context-menu-item.open{background-color:var(--mx-menu-open-backgroud);color:var(--mx-menu-open-text)}.mx-context-menu-item.open:hover{background-color:var(--mx-menu-open-hover-backgroud);color:var(--mx-menu-open-hover-text)}.mx-context-menu-item.open .mx-right-arrow,.mx-context-menu-item.open .mx-checked-mark{fill:var(--mx-menu-open-text)}.mx-context-menu-item.open .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-open);color:var(--mx-menu-shortcut-text-open)}.mx-context-menu-item.keyboard-focus{background-color:var(--mx-menu-active-backgroud)}.mx-context-menu-item.disabled{color:var(--mx-menu-disabled-text);cursor:not-allowed}.mx-context-menu-item.disabled:hover,.mx-context-menu-item.disabled:active{background-color:transparent}.mx-context-menu-item.disabled .mx-right-arrow,.mx-context-menu-item.disabled .mx-checked-mark{fill:var(--mx-menu-disabled-text)}.mx-context-menu-item.disabled .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-disabled);color:var(--mx-menu-shortcut-text-second)}.mx-context-menu-item .mx-item-row{display:flex;flex-direction:row;align-items:center;max-width:100%}.mx-context-menu-item .mx-icon-placeholder{position:relative;display:flex;flex-direction:row;align-items:center;height:auto;overflow:hidden}.mx-context-menu-item .mx-icon-placeholder.preserve-width{width:var(--mx-menu-placeholder-width)}.mx-context-menu-item .icon{display:inline-block;font-size:var(--mx-menu-icon-size)}.mx-context-menu-item .icon.svg{width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-context-menu-item .label{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-inline-end:16px}.mx-context-menu-item-wrapper{position:relative}.mx-context-menu-item-sperator{display:block;padding:5px 0;background-color:var(--mx-menu-backgroud)}.mx-context-menu-item-sperator:after{display:block;content:"";background-color:var(--mx-menu-divider);height:1px}.mx-right-arrow{width:14px;height:14px}.mx-checked-mark{width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-shortcut{position:relative;justify-self:flex-end;font-size:11.5px;padding:2px 4px;background-color:var(--mx-menu-shortcut-backgroud);color:var(--mx-menu-shortcut-text)}.mx-menu-bar.dark,.mx-context-menu.dark{--mx-menu-backgroud: #303031;--mx-menu-hover-backgroud: #636363;--mx-menu-active-backgroud: #555555;--mx-menu-open-backgroud: #636363;--mx-menu-open-hover-backgroud: #636363;--mx-menu-divider: #464646;--mx-menu-text: #ffffff;--mx-menu-hover-text: #ffffff;--mx-menu-active-text: #ffffff;--mx-menu-open-text: #ffffff;--mx-menu-open-hover-text: #ffffff;--mx-menu-disabled-text: #9c9c9c;--mx-menu-shadow-color: rgba(51, 51, 51, .2);--mx-menu-scrollbar-thumb-color: rgba(255, 255, 255, .3);--mx-menu-scrollbar-thumb-color-light: rgba(255, 255, 255, .5);--mx-menu-scrollbar-thumb-color-pressed: rgba(255, 255, 255, .2);--mx-menu-shortcut-backgroud: #505050;--mx-menu-shortcut-backgroud-hover:#505050;--mx-menu-shortcut-backgroud-active:#505050;--mx-menu-shortcut-backgroud-open:#505050;--mx-menu-shortcut-backgroud-disabled:#444444;--mx-menu-shortcut-text: #f1f1f1;--mx-menu-shortcut-text-hover: #ffffff;--mx-menu-shortcut-text-active: #ffffff;--mx-menu-shortcut-text-open: #ffffff;--mx-menu-shortcut-text-disabled: #9d9d9d}.mx-menu-bar.flat,.mx-context-menu.flat{border-radius:0;padding:7px 0;box-shadow:0 1px 2px 1px var(--mx-menu-shadow-color)}.mx-menu-bar.flat .mx-context-menu-item,.mx-context-menu.flat .mx-context-menu-item{padding:3px 12px}.mx-menu-bar.win10,.mx-context-menu.win10{border-radius:0;padding:8px 0;border:1px solid var(--mx-menu-border-color);box-shadow:2px 2px 1px 0 var(--mx-menu-shadow-color)}.mx-menu-bar.win10,.mx-context-menu.win10{--mx-menu-backgroud: #eeeeee;--mx-menu-hover-backgroud: #d8d8d8;--mx-menu-active-backgroud: #dfdfdf;--mx-menu-open-backgroud: #f1f1f1;--mx-menu-open-hover-backgroud: #d8d8d8;--mx-menu-divider: #aaaaaa;--mx-menu-border-color: #b1b1b1;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover: transparent;--mx-menu-shortcut-backgroud-active: transparent;--mx-menu-shortcut-backgroud-open: transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #272727;--mx-menu-shortcut-text-hover: #272727;--mx-menu-shortcut-text-active: #272727;--mx-menu-shortcut-text-open: #272727;--mx-menu-shortcut-text-disabled: #6b6b6b}.mx-menu-bar.win10 .mx-context-menu-item,.mx-context-menu.win10 .mx-context-menu-item{padding:2px 4px;margin:0 4px}.mx-menu-bar.win10 .mx-context-menu-item-sperator,.mx-context-menu.win10 .mx-context-menu-item-sperator{margin:0 4px}.mx-menu-bar.win10.dark,.mx-context-menu.win10.dark{--mx-menu-backgroud: #303031;--mx-menu-hover-backgroud: #636363;--mx-menu-active-backgroud: #555555;--mx-menu-open-backgroud: #636363;--mx-menu-open-hover-backgroud: #636363;--mx-menu-divider: #808080;--mx-menu-border-color: #656565;--mx-menu-shortcut-backgroud: #505050;--mx-menu-shortcut-backgroud-hover:#505050;--mx-menu-shortcut-backgroud-active:#505050;--mx-menu-shortcut-backgroud-open:#505050;--mx-menu-shortcut-backgroud-disabled:#444444;--mx-menu-shortcut-text: #f1f1f1;--mx-menu-shortcut-text-hover: #ffffff;--mx-menu-shortcut-text-active: #ffffff;--mx-menu-shortcut-text-open: #ffffff;--mx-menu-shortcut-text-disabled: #9d9d9d;padding:8px 0}.mx-menu-bar.win10.dark .mx-context-menu-item,.mx-context-menu.win10.dark .mx-context-menu-item{padding:6px 12px;margin:0}.mx-menu-bar.win10.dark .mx-context-menu-item-sperator,.mx-context-menu.win10.dark .mx-context-menu-item-sperator{margin:0 7px}.mx-menu-bar.mac,.mx-context-menu.mac{padding:8px 0;box-shadow:0 5px 7px 1px var(--mx-menu-shadow-color);border:1px solid var(--mx-menu-border-color)}.mx-menu-bar.mac,.mx-context-menu.mac{--mx-menu-backgroud: #ececec;--mx-menu-hover-backgroud: #0165e1;--mx-menu-active-backgroud: #0165e1;--mx-menu-open-backgroud: #858585;--mx-menu-open-hover-backgroud: #0165e1;--mx-menu-divider: #d2d2d2;--mx-menu-text: #232323;--mx-menu-hover-text: #fff;--mx-menu-active-text: #fff;--mx-menu-open-text: #fff;--mx-menu-open-hover-text: #fff;--mx-menu-disabled-text: #bbbbbb;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover:transparent;--mx-menu-shortcut-backgroud-active:transparent;--mx-menu-shortcut-backgroud-open:transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #424242;--mx-menu-shortcut-text-hover: #fff;--mx-menu-shortcut-text-active: #fff;--mx-menu-shortcut-text-open: #fff;--mx-menu-shortcut-text-disabled: #a5a5a5;--mx-menu-border-color: #bbbbbb}.mx-menu-bar.mac.dark,.mx-context-menu.mac.dark{--mx-menu-backgroud: #333333;--mx-menu-hover-backgroud: #0153d2;--mx-menu-active-backgroud: #0153d2;--mx-menu-open-hover-backgroud: #0153d2;--mx-menu-open-backgroud: #414346;--mx-menu-divider: #575757;--mx-menu-text: #dcdcdc;--mx-menu-hover-text: #fff;--mx-menu-active-text: #fff;--mx-menu-open-text: #fff;--mx-menu-open-hover-text: #fff;--mx-menu-disabled-text: #6a6a6a;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover:transparent;--mx-menu-shortcut-backgroud-active:transparent;--mx-menu-shortcut-backgroud-open:transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #dadada;--mx-menu-shortcut-text-hover: #fff;--mx-menu-shortcut-text-active: #fff;--mx-menu-shortcut-text-open: #fff;--mx-menu-shortcut-text-disabled: #6a6a6a;--mx-menu-border-color: #222}.mx-menu-bar.mac .mx-context-menu-item,.mx-context-menu.mac .mx-context-menu-item{border-radius:5px;margin:0 6px;padding:3px 6px}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text);outline:none}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-right-arrow,.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-checked-mark,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-right-arrow,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-checked-mark{fill:var(--mx-menu-active-text)}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-shortcut,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-active);color:var(--mx-menu-shortcut-text-active)}.mx-menu-bar.mac .mx-context-menu-item-sperator,.mx-context-menu.mac .mx-context-menu-item-sperator{margin:0 12px}.mx-context-menu .vue-scroll-rect>.scroll-content{overflow-y:scroll;height:100%;width:auto;position:relative!important}.mx-menu-ghost-host{position:absolute;inset:0;overflow:hidden;pointer-events:none}.mx-menu-ghost-host.fullscreen{position:fixed}.mx-menu-bar{flex:1;display:flex;flex-direction:row;align-items:center;background-color:var(--mx-menu-backgroud);padding:5px 0}.mx-menu-bar.mini{flex-grow:0}.mx-menu-bar .mx-menu-bar-content{display:flex;flex-direction:row;align-items:center}.mx-menu-bar .mx-menu-bar-item{padding:2px 8px;border-radius:5px;-webkit-user-select:none;user-select:none;background-color:var(--mx-menu-backgroud);color:var(--mx-menu-text)}.mx-menu-bar .mx-menu-bar-item:hover{background-color:var(--mx-menu-hover-backgroud);color:var(--mx-menu-hover-text)}.mx-menu-bar .mx-menu-bar-item:hover .mx-menu-bar-icon-menu{fill:var(--mx-menu-hover-text)}.mx-menu-bar .mx-menu-bar-item:active,.mx-menu-bar .mx-menu-bar-item.active{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text)}.mx-menu-bar .mx-menu-bar-item:active .mx-menu-bar-icon-menu,.mx-menu-bar .mx-menu-bar-item.active .mx-menu-bar-icon-menu{fill:var(--mx-menu-active-text)}.mx-menu-bar .mx-menu-bar-icon-menu{fill:var(--mx-menu-text);width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-menu-bar.flat .mx-menu-bar-item{border-radius:0}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(){"use strict";let d=[],i=[],u=0;function h(t){return"^"+t.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase()+"$"}function y(t){const e=t.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase();return{based:e,words:e.split(/\s+/)}}function w(t,e){const{based:s,words:c}=e;return t.includes(s)||c&&c.every(n=>t.includes(n))}const m=new Intl.Collator("en",{sensitivity:"base",numeric:!0,usage:"search"});function k(t){return[...t].sort((e,s)=>s.mtime-e.mtime)}function C(){return new Promise(t=>setTimeout(t,0))}async function F(t,e,s){const c=y(t),n=100,o=1e3,r=[];for(let l=0;l<i.length&&r.length<n;l+=o){if(u!==s)return;const M=Math.min(l+o,i.length);for(let a=l;a<M&&r.length<n;a++){const g=i[a];w(g.haystack,c)&&r.push(g)}if(r.length>0&&u===s){const a=f(r,t,e);postMessage({type:"results",docs:a.map(p),id:s,done:!1})}l+o<i.length&&r.length<n&&await C()}if(u===s){const l=f(r,t,e);postMessage({type:"results",docs:l.map(p),id:s,done:!0})}}function f(t,e,s){const c=s+"/";return[...t].sort((n,o)=>(o.loc===s)-(n.loc===s)||(o.loc.slice(0,c.length)===c)-(n.loc.slice(0,c.length)===c)||m.compare(n.loc,o.loc)||(n.dir===!1)-(o.dir===!1)||o.name.includes(e)-n.name.includes(e)||m.compare(n.name,o.name))}function p(t){const{haystack:e,...s}=t;return s}self.onmessage=async t=>{const e=t.data;e.type==="update"?(d=e.documents.map(s=>({...s,haystack:h(s.name)})),i=k(d)):e.type==="search"&&(u=e.id,e.query?await F(e.query,e.loc,e.id):postMessage({type:"results",docs:[],id:e.id,done:!0}))}})();
|
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-
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-C8Gp9T8Z.js"></script>
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/icons-DMD182WZ.js">
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
12
|
+
<link rel="stylesheet" crossorigin href="/assets/index-zDODUQOB.css">
|
|
13
13
|
|
|
14
14
|
<body id="app">
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
cista/__init__.py,sha256=4IT57gQUTOV6q9zFGj9i6E9LmiRz3dIfHK3q4qCeOIc,66
|
|
2
|
-
cista/__main__.py,sha256=
|
|
3
|
-
cista/_version.py,sha256=
|
|
2
|
+
cista/__main__.py,sha256=KVqxlBW9i4um8GYa47hH1U4OXmWdubCpNA7n6KMoot8,6951
|
|
3
|
+
cista/_version.py,sha256=1eoQ97skELXDgzdf64qCQRBpKiZSf3EiskPyq64o6mY,77
|
|
4
4
|
cista/api.py,sha256=57PmugmlB4TYsPTt5Cri6zcjeJ6zweTiNUSAVXq77lQ,5518
|
|
5
|
-
cista/app.py,sha256=
|
|
5
|
+
cista/app.py,sha256=xD8_6zs_3hCPbpgCCDGroyry7Zac2gkkdTS8CQUZVKc,11024
|
|
6
6
|
cista/auth.py,sha256=-xYYAYhNIivgkchfW0P7-fuJT1fodPpg-c0niVjgf4g,14339
|
|
7
7
|
cista/config.py,sha256=noKbZjpcEq5WG55WEkuKKudBzb5InoGEDtSWeUdVrJM,6183
|
|
8
8
|
cista/droppy.py,sha256=04a7TyZjmgmaLifGyH3WMAbwCAGBGPEl9oFYc423dQA,1304
|
|
@@ -14,19 +14,20 @@ cista/server80.py,sha256=opjtARyheVXQfJ5wBOMyzGDAtpMHnOpKNoZ1EsIytnI,780
|
|
|
14
14
|
cista/session.py,sha256=zc-A0iPaepAOLIoO5PTAHy9qn2NZb2zQir3Rm4ZmaK0,1090
|
|
15
15
|
cista/sso.py,sha256=z3ELX7Griv6W_OQuZA7y-u0rjk9ljHCUjrCEV-zEYE0,10410
|
|
16
16
|
cista/watching.py,sha256=zo1Q1jBXPSjRK8z4pay3ktsphOYcL795AhJWUXP2F7o,14314
|
|
17
|
-
cista/frontend-build/index.html,sha256=
|
|
17
|
+
cista/frontend-build/index.html,sha256=KEFswNThN81gM37uuGDw00i96tUMKQ4F96pAbRVUwKw,725
|
|
18
18
|
cista/frontend-build/robots.txt,sha256=Mx6pCQ2wyfb1l72YQP1bFxgw9uCzuhyyTfqR8Mla7cE,26
|
|
19
19
|
cista/frontend-build/assets/icons-DMD182WZ.js,sha256=-BkAWEpc8diE9goJhpYHUOopFwHQ9Rzx1-OvQkPwOfk,102556
|
|
20
|
-
cista/frontend-build/assets/index-
|
|
21
|
-
cista/frontend-build/assets/index-
|
|
20
|
+
cista/frontend-build/assets/index-C8Gp9T8Z.js,sha256=99awoVEcPWfIi9uFWgGQAggEi911V4zGPmn7lYc5c1M,118730
|
|
21
|
+
cista/frontend-build/assets/index-zDODUQOB.css,sha256=Rt2bHR8g-lrAmdzTMhLbbbxJzygMN3ibsqZTRoBfc7I,33340
|
|
22
22
|
cista/frontend-build/assets/logo-ctv8tVwU.svg,sha256=l9HX62cauXDeo8zXU5-xNWhLmm-y0-xsXp_1xzHQX7s,258
|
|
23
|
+
cista/frontend-build/assets/searchWorker-CxfnO8mP.js,sha256=w2RQ4_aPqdAGdxg8syi0zTtFsxzOmuubpdEuGpHx6T0,1519
|
|
23
24
|
cista/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
25
|
cista/util/apphelpers.py,sha256=sQ3oQGa3XlgPIIKeYDgk6wzmtml-O3GZH7g3lsePUXY,2603
|
|
25
26
|
cista/util/asynclink.py,sha256=3jl57o6f2AQGYDKV4hJFHSJUuJaKy3-dBctxNut8_9E,3122
|
|
26
27
|
cista/util/filename.py,sha256=_0qO7mPudritrSnlHQTAh03KiunYrt3I9vat5ZVXXEg,581
|
|
27
28
|
cista/util/lrucache.py,sha256=Gpzx7FNtN1Xkdlgipa1oGebnWolMJVZfruW3KKlX7Ms,2070
|
|
28
29
|
cista/util/pwgen.py,sha256=yapMYCAzOGqIm51LsQoBbkXAQQufAhbX0hOI1fPQ8nQ,6276
|
|
29
|
-
cista-1.4.
|
|
30
|
-
cista-1.4.
|
|
31
|
-
cista-1.4.
|
|
32
|
-
cista-1.4.
|
|
30
|
+
cista-1.4.2.dist-info/METADATA,sha256=Gt2L6WR9qdLHJPvSQbqNf2XLfdpbgnZcxAxXN64s_7w,8265
|
|
31
|
+
cista-1.4.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
32
|
+
cista-1.4.2.dist-info/entry_points.txt,sha256=_XK4tjdkpyX8yUrVMHboZ5EJ9Q1bNqhuIkKoA06WiKw,46
|
|
33
|
+
cista-1.4.2.dist-info/RECORD,,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@charset "UTF-8";:root{--primary-background: #ddd;--header-background: var(--soft-color);--header-color: #ccc;--input-background: #fff;--input-color: #000;--primary-color: #000;--soft-color: #146;--accent-color: #f80;--transition-time: .2s;--root-font-size: 1rem;--header-font-size: 1rem;--header-height: 4rem}@media(prefers-color-scheme:dark){:root{--primary-color: #ddd;--primary-background: var(--soft-color);--header-background: #000;--header-color: #ccc;--input-background: var(--soft-color);--input-color: #ddd}}@media screen and (max-width:600px){.size,.modified,.summary{display:none}}@media screen and (min-width:1000px){:root{--root-font-size: calc(8px + .8vw) }}@media screen and (min-width:2000px){:root{--root-font-size: 1.5rem}}@media screen and (max-height:600px){:root{--header-font-size: calc(10px + 10 * 100vh / 600);--root-font-size: .8rem;--header-height: 2rem}header .breadcrumb>*{padding-top:calc(8 + 8 * 100vh / 600)!important;padding-bottom:calc(8 + 8 * 100vh / 600)!important}}@media screen and (max-height:300px){:root{--header-font-size: 15px;--header-height: 28px ;--root-font-size: .6rem}header .breadcrumb>*{padding-top:14px!important;padding-bottom:14px!important}}@media screen and (orientation:landscape)and (min-width:700px){:root{--header-font-size: calc(8px + 8 * 100vh / 600)}header{display:flex;justify-content:space-between}header .headermain{order:1}header .breadcrumb{align-self:stretch}header .action-button{width:2em;height:2em}}@media print{:root{--primary-color: black;--primary-background: none;--header-background: none;--header-color: black}.headermain,.menu,.rename-button{display:none!important}.breadcrumb>a{color:#000!important;background:none!important;padding:0!important;margin:0!important;clip-path:none!important;max-width:none!important}.breadcrumb>a:after{content:"/"}.breadcrumb svg{fill:#000!important;margin:0 .5rem 0 1rem!important}body#app{position:static!important;height:auto!important}main{padding-bottom:0!important}thead tr{font-size:1rem!important;position:static!important;background:none!important;border-bottom:1pt solid black!important}audio::-webkit-media-controls-timeline,video::-webkit-media-controls-timeline{display:none}audio::-webkit-media-controls,video::-webkit-media-controls{display:none}tr,figure{page-break-inside:avoid}.selection{min-width:0!important;padding:0!important}.selection input{display:none}.selection input:checked{display:inherit}tbody .selection input:checked{opacity:1!important;transform:scale(.5);left:0}}*{box-sizing:border-box}html{font-size:var(--root-font-size);overflow:hidden}main{-ms-overflow-style:none;scrollbar-width:none}body{background-color:var(--primary-background);font-size:1rem;font-family:Roboto;color:var(--primary-color);margin:0;overflow:hidden;height:100vh;height:100dvh}tbody .size,tbody .modified{font-family:Roboto Mono}header{flex:0 0 auto;background-color:var(--header-background);color:var(--header-color);font-size:var(--header-font-size)}main{height:100%}::selection{color:#000;background:#ff0!important}button{font:inherit;color:inherit;margin:0;border:0;padding:0;background:none;cursor:pointer;min-width:1rem;min-height:1rem}input{margin:0}:focus{outline:none}a:link,a:visited,a:active,a:hover{color:var(--primary-color);text-decoration:none}table{border-collapse:collapse;border-spacing:0;border:0;gap:0}body#app{position:fixed;inset:0;display:flex;flex-direction:column}main{flex:1 1 auto;min-height:0;padding-bottom:3em;overflow-y:scroll;text-align:center}header nav.headermain{position:relative;z-index:100}.spacer{flex-grow:1}.smallgap{flex-shrink:1;width:2em}[data-tooltip]:hover:after{z-index:101;content:attr(data-tooltip);position:absolute;pointer-events:none;font-size:1rem;text-align:center;padding:.5rem 1rem;border-radius:3rem 0;box-shadow:0 0 1rem var(--accent-color);transform:translate(calc(1rem - 50%),150%);background-color:var(--accent-color);color:var(--primary-color);white-space:pre;animation:appearbriefly calc(10 * var(--transition-time)) linear forwards}@keyframes appearbriefly{0%{opacity:0}30%{opacity:0}40%{opacity:1}90%{opacity:1}to{opacity:0}}.error-message{padding:.5em;font-weight:700;background:var(--accent-color);color:#000}.transferprogress[data-v-fc92216f]{--bar: var(--accent-color);--nobar: var(--header-background);display:flex;flex-direction:column;color:var(--primary-color);width:100%}.statustext[data-v-fc92216f]{display:flex;align-items:center;margin:0 .5em;padding:.5rem 0}span[data-v-fc92216f]{color:#ccc;white-space:nowrap;text-align:right;padding:0 .5em}.filename[data-v-fc92216f]{color:#fff;flex:1 1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:left}.index[data-v-fc92216f]{min-width:3.5em}.position[data-v-fc92216f],.speed[data-v-fc92216f]{min-width:4em}.upload .statustext[data-v-fc92216f]:before{font-size:1.5em;content:"🔺"}.download .statustext[data-v-fc92216f]:before{font-size:1.5em;content:"🔻"}:root{--breadcrumb-background-odd: #2d2d2d;--breadcrumb-background-even: #404040;--breadcrumb-color: #ddd;--breadcrumb-hover-color: #fff;--breadcrumb-hover-background-odd: #25a;--breadcrumb-hover-background-even: #812;--breadcrumb-transtime: .3s}.breadcrumb{flex:1 1 auto;display:flex;min-width:20%;max-width:100%;min-height:2em;margin:0;padding:0 1em 0 0;overflow:hidden}.breadcrumb>a{flex:0 4 auto;display:flex;align-items:center;margin:0 -.5em;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;color:var(--breadcrumb-color);padding:.3em 1.5em;clip-path:polygon(0 0,1em 50%,0 100%,100% 100%,100% 0,0 0);transition:all var(--breadcrumb-transtime)}.breadcrumb>a:first-child{flex:0 0 auto;padding-left:1.5em;padding-right:1.7em;clip-path:none}.breadcrumb>a:last-child{clip-path:polygon(0 0,calc(100% - 1em) 0,100% 50%,calc(100% - 1em) 100%,0 100%,1em 50%,0 0)}.breadcrumb>a:only-child{clip-path:polygon(0 0,calc(100% - 1em) 0,100% 50%,calc(100% - 1em) 100%,0 100%,0 0)}.breadcrumb svg{width:1.3em;height:1.3em;margin:-.5em;fill:var(--breadcrumb-color);transition:fill var(--breadcrumb-transtime)}.breadcrumb a:nth-child(odd){background:var(--breadcrumb-background-odd)}.breadcrumb a:nth-child(2n){background:var(--breadcrumb-background-even)}.breadcrumb a:nth-child(odd):hover,.breadcrumb a:focus:nth-child(odd){background:var(--breadcrumb-hover-background-odd)}.breadcrumb a:nth-child(2n):hover,.breadcrumb a:focus:nth-child(2n){background:var(--breadcrumb-hover-background-even)}.breadcrumb a:hover{color:var(--breadcrumb-hover-color)}.breadcrumb a:hover svg{fill:var(--breadcrumb-hover-color)}.breadcrumb a.current{color:var(--accent-color);max-width:none;flex:0 1 auto}.breadcrumb a.current svg{fill:var(--accent-color)}.action-button{background:none;border:none;color:#ccc;cursor:pointer;transition:all .2s ease;padding:.2em;width:3em;height:3em}.action-button:hover,.action-button:focus{color:#fff;transform:scale(1.1)}svg{fill:#ccc;transform:fill .2s ease}.action-button:hover svg,.action-button:focus svg{fill:#fff}@keyframes rotate-0494c508{0%{transform:rotate(0)}to{transform:rotate(360deg)}}svg.cog[data-v-0494c508]{width:10rem;height:10rem;margin:0 auto;animation:rotate-0494c508 10s linear infinite;filter:drop-shadow(0 0 1rem black);fill:#888}svg.cog.stopped[data-v-0494c508]{animation:none}input#FileRenameInput{color:var(--input-color);background:var(--input-background);border:0;border-radius:.3rem;padding:.4rem;margin:-.4rem;width:100%;outline:none;font:inherit}.gallery input#FileRenameInput{padding:.75em;font-weight:600;width:auto}img[data-v-47490c5c],embed[data-v-47490c5c],.icon[data-v-47490c5c],audio[data-v-47490c5c],video[data-v-47490c5c]{font-size:8em;overflow:hidden;min-width:50%;max-width:100%;max-height:100%;border-radius:.0625em}.folder[data-v-47490c5c]:before{content:"📁"}.folder[data-v-47490c5c]:hover:before,.cursor .folder[data-v-47490c5c]:before{content:"📂"}.archive[data-v-47490c5c]:before{content:"📦"}.file[data-v-47490c5c]:before{content:"📄"}.ext-img[data-v-47490c5c]:before{content:"💿"}.ext-exe[data-v-47490c5c]:before,.ext-msi[data-v-47490c5c]:before,.ext-dmg[data-v-47490c5c]:before,.ext-pkg[data-v-47490c5c]:before{content:"⚙️"}.ext-torrent[data-v-47490c5c]:before{content:"🏴☠️"}.audio audio[data-v-47490c5c]{opacity:0;transition:opacity var(--transition-time) ease-in-out}.audio:hover audio[data-v-47490c5c]{opacity:1}.audio.icon[data-v-47490c5c]:before{width:100%;content:"🔈"}.audio.icon[data-v-47490c5c]:has(audio[data-playing]):before{position:absolute;content:"🔊";bottom:0}.icon[data-v-47490c5c]{filter:brightness(.9)}figure.cursor .icon[data-v-47490c5c]{filter:brightness(1)}img[data-v-47490c5c]:before{text-shadow:0 0 .5rem #000;filter:grayscale(1);content:"❌"}.video-container[data-v-47490c5c]{position:relative;display:flex;align-items:center;justify-content:center;min-width:50%;max-width:100%;max-height:100%}.video-container video[data-v-47490c5c]{width:100%;height:100%;border-radius:.0625em;object-fit:contain}.play-overlay[data-v-47490c5c]{position:absolute;display:flex;align-items:center;justify-content:center;pointer-events:none;width:4em;height:4em;background:#0003;border-radius:50%;transition:opacity .2s ease,transform .2s ease}.play-overlay svg[data-v-47490c5c]{width:2em;height:2em;fill:#fff;margin-left:.25em}.video-container:hover .play-overlay[data-v-47490c5c]{transform:scale(1.1)}video[data-playing]+.play-overlay[data-v-47490c5c]{opacity:0}.cursor-tooltip[data-v-c5d421fc]{position:fixed;z-index:10000;padding:.5rem 1rem;border-radius:3rem 0;box-shadow:0 0 1rem var(--accent-color);background-color:var(--accent-color);color:var(--primary-color);white-space:nowrap;pointer-events:none;font-size:1rem}.tooltip-name[data-v-91479c1d]{font-weight:600;text-align:center}.tooltip-details[data-v-91479c1d]{text-align:center}figure[data-v-91479c1d]{max-height:15em;position:relative;border-radius:.5em;margin:0;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:hidden}figure>article[data-v-91479c1d]{flex:0 0 auto}figure[data-v-91479c1d] .video-container{height:15em}.titlespacer[data-v-91479c1d]{flex-shrink:100000;width:100%;height:2em}figcaption[data-v-91479c1d]{position:absolute;overflow:hidden;bottom:0;display:flex;align-items:center;justify-content:center;width:100%}figcaption input[type=checkbox][data-v-91479c1d]{width:1.5em;height:1.5em;margin:.25em 0 .25em .25em;opacity:0;flex-shrink:0;transition:opacity var(--transition-time) ease-in-out}figcaption input[type=checkbox][data-v-91479c1d]:checked,figcaption:hover input[type=checkbox][data-v-91479c1d]{opacity:1}figcaption span[data-v-91479c1d]{cursor:default;padding:.5em;color:#fff;font-weight:600;text-shadow:0 0 .2em #000,0 0 .2em #000;text-wrap:nowrap;text-overflow:ellipsis;overflow:hidden}.cursor figcaption span[data-v-91479c1d]{color:var(--accent-color)}figcaption .namespacer[data-v-91479c1d]{flex-shrink:100000;height:2em;width:2em}.gallery[data-v-9973e293]{padding:1em;width:100%;display:grid;gap:.5em;grid-template-columns:repeat(auto-fill,minmax(15em,1fr));align-items:end}.folder-indicator[data-v-9973e293]{grid-column:1 / -1}.folder-start[data-v-9973e293]{grid-column-start:1}.size.empty[data-v-444c7802]{color:#555}.size.bytes[data-v-444c7802]{color:#77a}.size.kB[data-v-444c7802]{color:#474}.size.MB[data-v-444c7802]{color:#a80}.size.GB[data-v-444c7802]{color:#f83}.size.TB[data-v-444c7802],.size.PB[data-v-444c7802],.size.EB[data-v-444c7802],.size.huge[data-v-444c7802]{color:#f44;text-shadow:0 0 .2em}@media(prefers-color-scheme:dark){.size.empty[data-v-444c7802]{color:#bbb}.size.bytes[data-v-444c7802]{color:#99d}.size.kB[data-v-444c7802]{color:#aea}.size.MB[data-v-444c7802]{color:#ff4}.size.GB[data-v-444c7802]{color:#f86}.size.TB[data-v-444c7802],.size.PB[data-v-444c7802],.size.EB[data-v-444c7802],.size.huge[data-v-444c7802]{color:#f55}}.cursor .size[data-v-444c7802]{color:inherit;text-shadow:none}table[data-v-c61c7c3a]{width:100%;table-layout:fixed}thead tr[data-v-c61c7c3a]{position:sticky;top:0;z-index:2}tbody tr[data-v-c61c7c3a]{position:relative;z-index:auto}table thead .selection input[type=checkbox][data-v-c61c7c3a]{position:inherit;width:1rem;height:1rem;padding:0;margin:auto}table tbody .selection input[type=checkbox][data-v-c61c7c3a]{width:2rem;height:2rem}table .selection[data-v-c61c7c3a]{width:3rem;text-align:center;text-overflow:clip;padding:0}table .selection input[data-v-c61c7c3a]{margin:auto}table .modified[data-v-c61c7c3a]{width:10rem;text-overflow:clip}table .size[data-v-c61c7c3a]{width:7rem;text-overflow:clip}table .menu[data-v-c61c7c3a]{width:2rem}tbody td[data-v-c61c7c3a]{font-size:1.2rem}table th[data-v-c61c7c3a],table td[data-v-c61c7c3a]{padding:0 .5rem;font-weight:400;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.name[data-v-c61c7c3a]{white-space:nowrap;position:relative}.name .rename-button[data-v-c61c7c3a]{position:absolute;right:0;animation:appear-c61c7c3a calc(5 * var(--transition-time)) linear}@keyframes appear-c61c7c3a{0%{opacity:0}80%{opacity:0}to{opacity:1}}thead tr[data-v-c61c7c3a]{font-size:.8rem;background:linear-gradient(to bottom,#eee,#fff 30%,#ddd);color:#000;box-shadow:0 0 .2rem #000}tbody tr.cursor[data-v-c61c7c3a]{background:var(--accent-color)}.right[data-v-c61c7c3a]{text-align:right}.sortcolumn[data-v-c61c7c3a]:hover{cursor:pointer}.sortcolumn[data-v-c61c7c3a]:hover:after{color:var(--accent-color)}.sortcolumn[data-v-c61c7c3a]{padding-right:1.5rem}.sortcolumn[data-v-c61c7c3a]:after{font-size:1rem;content:"▸";color:#888;margin-left:.5rem;margin-top:-.2rem;position:absolute;transition:all var(--transition-time) linear}.sortactive[data-v-c61c7c3a]:after{transform:rotate(90deg);color:var(--accent-color)}.name a[data-v-c61c7c3a]{text-decoration:none}tbody .selection input[data-v-c61c7c3a]{z-index:1;position:absolute;opacity:0;left:.5rem;top:0}.selection[data-v-c61c7c3a]{width:2em;height:2em}.selection input[data-v-c61c7c3a]:checked{opacity:.7}.file .selection[data-v-c61c7c3a]:before{content:"📄";font-size:1.5rem}.folder .selection[data-v-c61c7c3a]:before{height:2rem;content:"📁";font-size:1.5rem}.empty-container[data-v-c61c7c3a]{padding-top:3rem;text-align:center;font-size:3rem;color:var(--accent-color)}.folder-change[data-v-c61c7c3a]{margin-left:-.5rem}.loc[data-v-c61c7c3a],.summary[data-v-c61c7c3a]{color:#888}.empty-container[data-v-f7875394]{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)}.buttons[data-v-b9ddc09f]{flex:1000 0 auto;padding:0;display:flex;align-items:center;z-index:10}input[type=search][data-v-b9ddc09f]{background:var(--input-background);color:var(--input-color);border:0;border-radius:.1em;outline:none;max-width:15ch}.select-text{color:var(--accent-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:0}.modal-overlay{position:fixed;inset:0;z-index:1100;display:flex;align-items:center;justify-content:center}.modal-dialog{background:#ddd;color:#000;border:none;border-radius:.5rem;box-shadow:0 0 1rem #0008;padding:0;max-width:90vw;max-height:90vh;overflow:auto;font-size:1rem}.modal-dialog>h1{background:#146;color:#fff;font-size:1.2rem;font-weight:400;margin:0;padding:.5rem 1rem;position:sticky;top:0}.modal-dialog>.modal-content{padding:1rem}.modal-dialog h3{font-size:1rem;font-weight:600;margin:1rem 0 .5rem}.modal-dialog h3:first-child{margin-top:0}.modal-dialog a{color:#146}.modal-dialog a:hover{color:#f80}.modal-dialog input[type=text],.modal-dialog input[type=password],.modal-dialog select{font:inherit;font-size:1rem;padding:.5rem;border:2px solid #888;border-radius:.25rem;background:#fff;color:#000;min-width:12rem}.modal-dialog input[type=text]:focus,.modal-dialog input[type=password]:focus,.modal-dialog select:focus{outline:none;border-color:#f80}.modal-dialog label{font-size:1rem}.modal-dialog button,.modal-dialog input[type=submit],.modal-dialog input[type=reset],.modal-dialog .button{font:inherit;font-size:1rem;padding:.5rem 1rem;background:#146;color:#fff;border:none;border-radius:.25rem;cursor:pointer}.modal-dialog button:hover,.modal-dialog input[type=submit]:hover,.modal-dialog input[type=reset]:hover,.modal-dialog .button:hover{background:#f80}.modal-dialog button:disabled,.modal-dialog input[type=submit]:disabled,.modal-dialog input[type=reset]:disabled,.modal-dialog .button:disabled{background:#888;cursor:not-allowed}.modal-dialog .button.small{padding:.25rem .5rem;font-size:.875rem}.modal-dialog .button.danger{background:#c00}.modal-dialog .button.danger:hover:not(:disabled){background:red}.modal-dialog .form-row{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1rem;align-items:center;margin-bottom:.5rem}.modal-dialog .form-grid{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1rem;align-items:center}.modal-dialog .dialog-buttons{display:flex;justify-content:flex-end;align-items:center;gap:.5rem;margin-top:1rem}.modal-dialog .error-text{color:#c00;font-size:.875rem;min-height:1.2em;margin:.5rem 0}.modal-dialog .success-message{background:#f80;color:#000;padding:.5rem;border-radius:.25rem;margin:.5rem 0;display:flex;align-items:center;gap:.5rem;font-size:.875rem}.modal-dialog table{width:100%;border-collapse:collapse;margin:.5rem 0;font-size:1rem}.modal-dialog th,.modal-dialog td{border:1px solid #888;padding:.5rem;text-align:left}.modal-dialog th{background:#146;color:#fff;font-weight:400}.modal-dialog td{background:#fff}.modal-dialog td input[type=checkbox]{margin:0}.modal-dialog p{margin:0 0 .5rem;font-size:1rem}.modal-dialog .loading{padding:2rem;text-align:center;color:#666}.access-denied[data-v-eaaa3c09]{text-align:center;padding:2rem!important}.access-denied .icon[data-v-eaaa3c09]{font-size:4rem;margin:0 0 1rem}.access-denied .message[data-v-eaaa3c09]{font-size:1.5rem;font-weight:700;margin:0 0 1.5rem}.toast-message{position:fixed;top:1rem;left:50%;transform:translate(-50%);z-index:2000;padding:.75rem 1.5rem;background:var(--accent-color);color:#000;font-weight:700;border-radius:.25rem;box-shadow:0 .25rem 1rem #0000004d;cursor:pointer;max-width:90vw;text-align:center}:root{--vue-scroll-rect-scrollbar-thumb-color: rgba(122,122,122, .3);--vue-scroll-rect-scrollbar-thumb-color-light: rgba(122, 122, 122, .5);--vue-scroll-rect-scrollbar-thumb-color-pressed: rgba(112, 112, 112, .2);--vue-scroll-rect-scrollbar-thumb-radius: 5px;--vue-scroll-rect-scrollbar-thumb-margin: 0px;--vue-scroll-rect-scrollbar-size: 8px}.vue-scroll-rect{position:relative;width:100%;height:100%;margin:0;overflow:hidden}.vue-scroll-rect>.scroll-content{position:relative;max-width:100%;max-height:100%;scrollbar-width:none;-ms-overflow-style:none}.vue-scroll-rect>.scroll-content::-webkit-scrollbar{width:0;height:0}.vue-scroll-rect>.scroll-content::-ms-scrollbar{width:0;height:0}.vue-scroll-rect>.scroll-content.both{overflow:scroll}.vue-scroll-rect>.scroll-content.horizontal{overflow-x:scroll}.vue-scroll-rect>.scroll-content.vertical{overflow-y:scroll}.vue-scroll-rect:hover>.scrollbar{opacity:1;transition:opacity .1s}.vue-scroll-rect.always-show-scrollbar>.scrollbar,.vue-scroll-rect .dragging>.scrollbar{opacity:1}.vue-scroll-rect.background-clickable>.scrollbar{pointer-events:all}.vue-scroll-rect>.scrollbar{position:absolute;opacity:0;transition:opacity 1.5s;pointer-events:none}.vue-scroll-rect>.scrollbar:hover{opacity:1}.vue-scroll-rect>.scrollbar .thumb{position:absolute;background-color:var(--vue-scroll-rect-scrollbar-thumb-color);border-radius:var(--vue-scroll-rect-scrollbar-thumb-radius);pointer-events:all}.vue-scroll-rect>.scrollbar .thumb:hover{background-color:var(--vue-scroll-rect-scrollbar-thumb-color-light)}.vue-scroll-rect>.scrollbar .thumb:active{background-color:var(--vue-scroll-rect-scrollbar-thumb-color-pressed)}.vue-scroll-rect>.scrollbar.horizontal{left:0;bottom:0;right:0;height:var(--vue-scroll-rect-scrollbar-size)}.vue-scroll-rect>.scrollbar.horizontal .thumb{top:var(--vue-scroll-rect-scrollbar-thumb-margin);bottom:var(--vue-scroll-rect-scrollbar-thumb-margin)}.vue-scroll-rect>.scrollbar.vertical{top:0;bottom:0;right:0;width:var(--vue-scroll-rect-scrollbar-size)}.vue-scroll-rect>.scrollbar.vertical .thumb{left:var(--vue-scroll-rect-scrollbar-thumb-margin);right:var(--vue-scroll-rect-scrollbar-thumb-margin)}:root{--mx-menu-backgroud: #fff;--mx-menu-hover-backgroud: #f1f1f1;--mx-menu-active-backgroud: #dfdfdf;--mx-menu-open-backgroud: #f1f1f1;--mx-menu-open-hover-backgroud: #f1f1f1;--mx-menu-divider: #f0f0f0;--mx-menu-text: #2e2e2e;--mx-menu-hover-text: #2e2e2e;--mx-menu-active-text: #2e2e2e;--mx-menu-open-text: #2e2e2e;--mx-menu-open-hover-text: #2e2e2e;--mx-menu-disabled-text: #c9c8c8;--mx-menu-icon-size: 16px;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-scrollbar-thumb-color: rgba(0, 0, 0, .2);--mx-menu-scrollbar-thumb-color-light: rgba(0, 0, 0, .3);--mx-menu-scrollbar-thumb-color-pressed: rgba(0, 0, 0, .1);--mx-menu-shortcut-backgroud: #ebebeb;--mx-menu-shortcut-backgroud-hover:#ebebeb;--mx-menu-shortcut-backgroud-active:#ebebeb;--mx-menu-shortcut-backgroud-open:#ebebeb;--mx-menu-shortcut-backgroud-disabled:#fdfdfd;--mx-menu-shortcut-text: #424242;--mx-menu-shortcut-text-hover: #424242;--mx-menu-shortcut-text-active: #424242;--mx-menu-shortcut-text-open: #424242;--mx-menu-shortcut-text-disabled: #a5a5a5;--mx-menu-placeholder-width: 24px}.mx-context-menu{pointer-events:all;display:inline-block;overflow:visible;position:absolute;background-color:var(--mx-menu-backgroud);border-radius:var(--mx-menu-backgroud-radius);padding:12px 0;box-shadow:0 10px 40px 10px var(--mx-menu-shadow-color);opacity:1;transition:opacity .2s ease-in-out;--vue-scroll-rect-scrollbar-thumb-color: var(--mx-menu-scrollbar-thumb-color);--vue-scroll-rect-scrollbar-thumb-color-light: var(--mx-menu-scrollbar-thumb-color-light);--vue-scroll-rect-scrollbar-thumb-color-pressed: var(--mx-menu-scrollbar-thumb-color-pressed)}.mx-context-menu-items{position:relative;overflow:visible}.mx-context-menu-scroll{overscroll-behavior:contain}.mx-context-menu-item{display:flex;flex-direction:row;justify-content:space-between;align-items:center;position:relative;padding:6px 15px;-webkit-user-select:none;user-select:none;overflow:visible;white-space:nowrap;text-overflow:ellipsis;color:var(--mx-menu-text)}.mx-context-menu-item .mx-right-arrow,.mx-context-menu-item .mx-checked-mark{fill:var(--mx-menu-text)}.mx-context-menu-item:hover{background-color:var(--mx-menu-hover-backgroud);color:var(--mx-menu-hover-text)}.mx-context-menu-item:hover .mx-right-arrow,.mx-context-menu-item:hover .mx-checked-mark{fill:var(--mx-menu-hover-text)}.mx-context-menu-item:hover .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-hover);color:var(--mx-menu-shortcut-text-hover)}.mx-context-menu-item:active{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text)}.mx-context-menu-item:active .mx-right-arrow,.mx-context-menu-item:active .mx-checked-mark{fill:var(--mx-menu-active-text)}.mx-context-menu-item:active .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-active);color:var(--mx-menu-shortcut-text-active)}.mx-context-menu-item.open{background-color:var(--mx-menu-open-backgroud);color:var(--mx-menu-open-text)}.mx-context-menu-item.open:hover{background-color:var(--mx-menu-open-hover-backgroud);color:var(--mx-menu-open-hover-text)}.mx-context-menu-item.open .mx-right-arrow,.mx-context-menu-item.open .mx-checked-mark{fill:var(--mx-menu-open-text)}.mx-context-menu-item.open .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-open);color:var(--mx-menu-shortcut-text-open)}.mx-context-menu-item.keyboard-focus{background-color:var(--mx-menu-active-backgroud)}.mx-context-menu-item.disabled{color:var(--mx-menu-disabled-text);cursor:not-allowed}.mx-context-menu-item.disabled:hover,.mx-context-menu-item.disabled:active{background-color:transparent}.mx-context-menu-item.disabled .mx-right-arrow,.mx-context-menu-item.disabled .mx-checked-mark{fill:var(--mx-menu-disabled-text)}.mx-context-menu-item.disabled .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-disabled);color:var(--mx-menu-shortcut-text-second)}.mx-context-menu-item .mx-item-row{display:flex;flex-direction:row;align-items:center;max-width:100%}.mx-context-menu-item .mx-icon-placeholder{position:relative;display:flex;flex-direction:row;align-items:center;height:auto;overflow:hidden}.mx-context-menu-item .mx-icon-placeholder.preserve-width{width:var(--mx-menu-placeholder-width)}.mx-context-menu-item .icon{display:inline-block;font-size:var(--mx-menu-icon-size)}.mx-context-menu-item .icon.svg{width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-context-menu-item .label{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-inline-end:16px}.mx-context-menu-item-wrapper{position:relative}.mx-context-menu-item-sperator{display:block;padding:5px 0;background-color:var(--mx-menu-backgroud)}.mx-context-menu-item-sperator:after{display:block;content:"";background-color:var(--mx-menu-divider);height:1px}.mx-right-arrow{width:14px;height:14px}.mx-checked-mark{width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-shortcut{position:relative;justify-self:flex-end;font-size:11.5px;padding:2px 4px;background-color:var(--mx-menu-shortcut-backgroud);color:var(--mx-menu-shortcut-text)}.mx-menu-bar.dark,.mx-context-menu.dark{--mx-menu-backgroud: #303031;--mx-menu-hover-backgroud: #636363;--mx-menu-active-backgroud: #555555;--mx-menu-open-backgroud: #636363;--mx-menu-open-hover-backgroud: #636363;--mx-menu-divider: #464646;--mx-menu-text: #ffffff;--mx-menu-hover-text: #ffffff;--mx-menu-active-text: #ffffff;--mx-menu-open-text: #ffffff;--mx-menu-open-hover-text: #ffffff;--mx-menu-disabled-text: #9c9c9c;--mx-menu-shadow-color: rgba(51, 51, 51, .2);--mx-menu-scrollbar-thumb-color: rgba(255, 255, 255, .3);--mx-menu-scrollbar-thumb-color-light: rgba(255, 255, 255, .5);--mx-menu-scrollbar-thumb-color-pressed: rgba(255, 255, 255, .2);--mx-menu-shortcut-backgroud: #505050;--mx-menu-shortcut-backgroud-hover:#505050;--mx-menu-shortcut-backgroud-active:#505050;--mx-menu-shortcut-backgroud-open:#505050;--mx-menu-shortcut-backgroud-disabled:#444444;--mx-menu-shortcut-text: #f1f1f1;--mx-menu-shortcut-text-hover: #ffffff;--mx-menu-shortcut-text-active: #ffffff;--mx-menu-shortcut-text-open: #ffffff;--mx-menu-shortcut-text-disabled: #9d9d9d}.mx-menu-bar.flat,.mx-context-menu.flat{border-radius:0;padding:7px 0;box-shadow:0 1px 2px 1px var(--mx-menu-shadow-color)}.mx-menu-bar.flat .mx-context-menu-item,.mx-context-menu.flat .mx-context-menu-item{padding:3px 12px}.mx-menu-bar.win10,.mx-context-menu.win10{border-radius:0;padding:8px 0;border:1px solid var(--mx-menu-border-color);box-shadow:2px 2px 1px 0 var(--mx-menu-shadow-color)}.mx-menu-bar.win10,.mx-context-menu.win10{--mx-menu-backgroud: #eeeeee;--mx-menu-hover-backgroud: #d8d8d8;--mx-menu-active-backgroud: #dfdfdf;--mx-menu-open-backgroud: #f1f1f1;--mx-menu-open-hover-backgroud: #d8d8d8;--mx-menu-divider: #aaaaaa;--mx-menu-border-color: #b1b1b1;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover: transparent;--mx-menu-shortcut-backgroud-active: transparent;--mx-menu-shortcut-backgroud-open: transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #272727;--mx-menu-shortcut-text-hover: #272727;--mx-menu-shortcut-text-active: #272727;--mx-menu-shortcut-text-open: #272727;--mx-menu-shortcut-text-disabled: #6b6b6b}.mx-menu-bar.win10 .mx-context-menu-item,.mx-context-menu.win10 .mx-context-menu-item{padding:2px 4px;margin:0 4px}.mx-menu-bar.win10 .mx-context-menu-item-sperator,.mx-context-menu.win10 .mx-context-menu-item-sperator{margin:0 4px}.mx-menu-bar.win10.dark,.mx-context-menu.win10.dark{--mx-menu-backgroud: #303031;--mx-menu-hover-backgroud: #636363;--mx-menu-active-backgroud: #555555;--mx-menu-open-backgroud: #636363;--mx-menu-open-hover-backgroud: #636363;--mx-menu-divider: #808080;--mx-menu-border-color: #656565;--mx-menu-shortcut-backgroud: #505050;--mx-menu-shortcut-backgroud-hover:#505050;--mx-menu-shortcut-backgroud-active:#505050;--mx-menu-shortcut-backgroud-open:#505050;--mx-menu-shortcut-backgroud-disabled:#444444;--mx-menu-shortcut-text: #f1f1f1;--mx-menu-shortcut-text-hover: #ffffff;--mx-menu-shortcut-text-active: #ffffff;--mx-menu-shortcut-text-open: #ffffff;--mx-menu-shortcut-text-disabled: #9d9d9d;padding:8px 0}.mx-menu-bar.win10.dark .mx-context-menu-item,.mx-context-menu.win10.dark .mx-context-menu-item{padding:6px 12px;margin:0}.mx-menu-bar.win10.dark .mx-context-menu-item-sperator,.mx-context-menu.win10.dark .mx-context-menu-item-sperator{margin:0 7px}.mx-menu-bar.mac,.mx-context-menu.mac{padding:8px 0;box-shadow:0 5px 7px 1px var(--mx-menu-shadow-color);border:1px solid var(--mx-menu-border-color)}.mx-menu-bar.mac,.mx-context-menu.mac{--mx-menu-backgroud: #ececec;--mx-menu-hover-backgroud: #0165e1;--mx-menu-active-backgroud: #0165e1;--mx-menu-open-backgroud: #858585;--mx-menu-open-hover-backgroud: #0165e1;--mx-menu-divider: #d2d2d2;--mx-menu-text: #232323;--mx-menu-hover-text: #fff;--mx-menu-active-text: #fff;--mx-menu-open-text: #fff;--mx-menu-open-hover-text: #fff;--mx-menu-disabled-text: #bbbbbb;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover:transparent;--mx-menu-shortcut-backgroud-active:transparent;--mx-menu-shortcut-backgroud-open:transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #424242;--mx-menu-shortcut-text-hover: #fff;--mx-menu-shortcut-text-active: #fff;--mx-menu-shortcut-text-open: #fff;--mx-menu-shortcut-text-disabled: #a5a5a5;--mx-menu-border-color: #bbbbbb}.mx-menu-bar.mac.dark,.mx-context-menu.mac.dark{--mx-menu-backgroud: #333333;--mx-menu-hover-backgroud: #0153d2;--mx-menu-active-backgroud: #0153d2;--mx-menu-open-hover-backgroud: #0153d2;--mx-menu-open-backgroud: #414346;--mx-menu-divider: #575757;--mx-menu-text: #dcdcdc;--mx-menu-hover-text: #fff;--mx-menu-active-text: #fff;--mx-menu-open-text: #fff;--mx-menu-open-hover-text: #fff;--mx-menu-disabled-text: #6a6a6a;--mx-menu-shadow-color: rgba(0, 0, 0, .1);--mx-menu-backgroud-radius: 10px;--mx-menu-shortcut-backgroud: transparent;--mx-menu-shortcut-backgroud-hover:transparent;--mx-menu-shortcut-backgroud-active:transparent;--mx-menu-shortcut-backgroud-open:transparent;--mx-menu-shortcut-backgroud-disabled:transparent;--mx-menu-shortcut-text: #dadada;--mx-menu-shortcut-text-hover: #fff;--mx-menu-shortcut-text-active: #fff;--mx-menu-shortcut-text-open: #fff;--mx-menu-shortcut-text-disabled: #6a6a6a;--mx-menu-border-color: #222}.mx-menu-bar.mac .mx-context-menu-item,.mx-context-menu.mac .mx-context-menu-item{border-radius:5px;margin:0 6px;padding:3px 6px}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text);outline:none}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-right-arrow,.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-checked-mark,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-right-arrow,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-checked-mark{fill:var(--mx-menu-active-text)}.mx-menu-bar.mac .mx-context-menu-item.keyboard-focus .mx-shortcut,.mx-context-menu.mac .mx-context-menu-item.keyboard-focus .mx-shortcut{background-color:var(--mx-menu-shortcut-backgroud-active);color:var(--mx-menu-shortcut-text-active)}.mx-menu-bar.mac .mx-context-menu-item-sperator,.mx-context-menu.mac .mx-context-menu-item-sperator{margin:0 12px}.mx-context-menu .vue-scroll-rect>.scroll-content{overflow-y:scroll;height:100%;width:auto;position:relative!important}.mx-menu-ghost-host{position:absolute;inset:0;overflow:hidden;pointer-events:none}.mx-menu-ghost-host.fullscreen{position:fixed}.mx-menu-bar{flex:1;display:flex;flex-direction:row;align-items:center;background-color:var(--mx-menu-backgroud);padding:5px 0}.mx-menu-bar.mini{flex-grow:0}.mx-menu-bar .mx-menu-bar-content{display:flex;flex-direction:row;align-items:center}.mx-menu-bar .mx-menu-bar-item{padding:2px 8px;border-radius:5px;-webkit-user-select:none;user-select:none;background-color:var(--mx-menu-backgroud);color:var(--mx-menu-text)}.mx-menu-bar .mx-menu-bar-item:hover{background-color:var(--mx-menu-hover-backgroud);color:var(--mx-menu-hover-text)}.mx-menu-bar .mx-menu-bar-item:hover .mx-menu-bar-icon-menu{fill:var(--mx-menu-hover-text)}.mx-menu-bar .mx-menu-bar-item:active,.mx-menu-bar .mx-menu-bar-item.active{background-color:var(--mx-menu-active-backgroud);color:var(--mx-menu-active-text)}.mx-menu-bar .mx-menu-bar-item:active .mx-menu-bar-icon-menu,.mx-menu-bar .mx-menu-bar-item.active .mx-menu-bar-icon-menu{fill:var(--mx-menu-active-text)}.mx-menu-bar .mx-menu-bar-icon-menu{fill:var(--mx-menu-text);width:var(--mx-menu-icon-size);height:var(--mx-menu-icon-size)}.mx-menu-bar.flat .mx-menu-bar-item{border-radius:0}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import{r as T,m as oo,e as so,i as re,h as Xo,a as It,b as ro,t as Zo,g as Qo,o as es,c as et,n as ge,d as Ve,f as K,w as ze,j as X,k as P,l as E,p as oe,q as G,s as He,u as Je,v as I,x as w,y as ts,z as ln,A as tt,B as ve,C as ns,D as Ie,E as ee,F as an,H as os,G as de,I as me,J as fe,K as rt,L as Qe,M as ss,N as ue,O as be,P as wt,Q as z,R as lo,S as ao,T as Re,U as rs,V as ls,W as cn,X as $t,Y as Jt,Z as as,_ as Sn,$ as io,a0 as is,a1 as kt,a2 as Yt,a3 as cs,a4 as co,a5 as us}from"./icons-DMD182WZ.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))o(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const l of r.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&o(l)}).observe(document,{childList:!0,subtree:!0});function n(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function o(s){if(s.ep)return;s.ep=!0;const r=n(s);fetch(s.href,r)}})();let uo;const Mt=e=>uo=e,fo=Symbol();function Xt(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var ft;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(ft||(ft={}));function ds(){const e=so(!0),t=e.run(()=>T({}));let n=[],o=[];const s=oo({install(r){Mt(s),s._a=r,r.provide(fo,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 po=()=>{};function xn(e,t,n,o=po){e.add(t);const s=()=>{e.delete(t)&&o()};return!n&&Qo()&&es(s),s}function qe(e,...t){e.forEach(n=>{n(...t)})}const fs=e=>e(),_n=Symbol(),Ht=Symbol();function Zt(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];Xt(s)&&Xt(o)&&e.hasOwnProperty(n)&&!It(o)&&!ro(o)?e[n]=Zt(s,o):e[n]=o}return e}const ps=Symbol();function ms(e){return!Xt(e)||!Object.prototype.hasOwnProperty.call(e,ps)}const{assign:Ne}=Object;function hs(e){return!!(It(e)&&e.effect)}function vs(e,t,n,o){const{state:s,actions:r,getters:l}=t,i=n.state.value[e];let a;function c(){i||(n.state.value[e]=s?s():{});const m=Ve(n.state.value[e]);return Ne(m,r,Object.keys(l||{}).reduce((u,p)=>(u[p]=oo(K(()=>{Mt(n);const f=n._s.get(e);return l[p].call(f,f)})),u),{}))}return a=mo(e,c,t,n,o,!0),a}function mo(e,t,n={},o,s,r){let l;const i=Ne({actions:{}},n),a={deep:!0};let c,m,u=new Set,p=new Set,f;const x=o.state.value[e];!r&&!x&&(o.state.value[e]={});let R;function b(S){let A;c=m=!1,typeof S=="function"?(S(o.state.value[e]),A={type:ft.patchFunction,storeId:e,events:f}):(Zt(o.state.value[e],S),A={type:ft.patchObject,payload:S,storeId:e,events:f});const D=R=Symbol();ge().then(()=>{R===D&&(c=!0)}),m=!0,qe(u,A,o.state.value[e])}const v=r?function(){const{state:A}=n,D=A?A():{};this.$patch(J=>{Ne(J,D)})}:po;function $(){l.stop(),u.clear(),p.clear(),o._s.delete(e)}const y=(S,A="")=>{if(_n in S)return S[Ht]=A,S;const D=function(){Mt(o);const J=Array.from(arguments),Y=new Set,F=new Set;function H(q){Y.add(q)}function U(q){F.add(q)}qe(p,{args:J,name:D[Ht],store:h,after:H,onError:U});let Z;try{Z=S.apply(this&&this.$id===e?this:h,J)}catch(q){throw qe(F,q),q}return Z instanceof Promise?Z.then(q=>(qe(Y,q),q)).catch(q=>(qe(F,q),Promise.reject(q))):(qe(Y,Z),Z)};return D[_n]=!0,D[Ht]=A,D},k={_p:o,$id:e,$onAction:xn.bind(null,p),$patch:b,$reset:v,$subscribe(S,A={}){const D=xn(u,S,A.detached,()=>J()),J=l.run(()=>ze(()=>o.state.value[e],Y=>{(A.flush==="sync"?m:c)&&S({storeId:e,type:ft.direct,events:f},Y)},Ne({},a,A)));return D},$dispose:$},h=et(k);o._s.set(e,h);const C=(o._a&&o._a.runWithContext||fs)(()=>o._e.run(()=>(l=so()).run(()=>t({action:y}))));for(const S in C){const A=C[S];if(It(A)&&!hs(A)||ro(A))r||(x&&ms(A)&&(It(A)?A.value=x[S]:Zt(A,x[S])),o.state.value[e][S]=A);else if(typeof A=="function"){const D=y(A,S);C[S]=D,i.actions[S]=A}}return Ne(h,C),Ne(Zo(h),C),Object.defineProperty(h,"$state",{get:()=>o.state.value[e],set:S=>{b(A=>{Ne(A,S)})}}),o._p.forEach(S=>{Ne(h,l.run(()=>S({store:h,app:o._a,pinia:o,options:i})))}),x&&r&&n.hydrate&&n.hydrate(h.$state,x),c=!0,m=!0,h}function ho(e,t,n){let o;const s=typeof t=="function";o=s?n:t;function r(l,i){const a=Xo();return l=l||(a?re(fo,null):null),l&&Mt(l),l=uo,l._s.has(e)||(s?mo(e,t,o,l):vs(e,o,l)),l._s.get(e)}return r.$id=e,r}const gs={class:"statustext"},ys={key:0,class:"index"},ws={class:"filename"},ks={key:0,class:"percent"},bs={key:1,class:"position"},Cs={class:"speed"},Ss=X({__name:"TransferBar",props:{status:{}},emits:["cancel"],setup(e){const t=e,n=K(()=>t.status.xfer/t.status.total*100),o=K(()=>{let r=t.status.statbytes/t.status.statdur/1e3;const l=(Date.now()-t.status.tlast)/1e3;return l>5/r?0:l>1/r?1/l:r}),s=K(()=>o.value?o.value.toFixed(o.value<10?1:0)+" MB/s":"stalled");return(r,l)=>e.status.total?(I(),P("div",{key:0,class:"transferprogress",style:Je(`background: linear-gradient(to right, var(--bar) 0, var(--bar) ${n.value}%, var(--nobar) ${n.value}%, var(--nobar) 100%);`)},[E("div",gs,[e.status.filecount>1?(I(),P("span",ys," ["+oe(e.status.fileidx)+"/"+oe(e.status.filecount)+"] ",1)):G("",!0),E("span",ws,[He(oe(e.status.filename.split("/").pop())+" ",1),e.status.filesize>1e7?(I(),P("span",ks,oe((e.status.filepos/e.status.filesize*100).toFixed(0)+" %"),1)):G("",!0)]),e.status.total>1e7?(I(),P("span",bs,oe((e.status.xfer/1e6).toFixed(0)+" / "+(e.status.total/1e6).toFixed(0)+" MB"),1)):G("",!0),E("span",Cs,oe(s.value),1),E("button",{class:"close",onClick:l[0]||(l[0]=i=>r.$emit("cancel"))},"❌")])],4)):G("",!0)}}),ye=(e,t)=>{const n=e.__vccOpts||e;for(const[o,s]of t)n[o]=s;return n},xs=ye(Ss,[["__scopeId","data-v-fc92216f"]]);const Ke=typeof document<"u";function vo(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function _s(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&vo(e.default)}const Q=Object.assign;function Wt(e,t){const n={};for(const o in t){const s=t[o];n[o]=xe(s)?s.map(e):e(s)}return n}const pt=()=>{},xe=Array.isArray;function En(e,t){const n={};for(const o in e)n[o]=o in t?t[o]:e[o];return n}let le=(function(e){return e[e.MATCHER_NOT_FOUND=1]="MATCHER_NOT_FOUND",e[e.NAVIGATION_GUARD_REDIRECT=2]="NAVIGATION_GUARD_REDIRECT",e[e.NAVIGATION_ABORTED=4]="NAVIGATION_ABORTED",e[e.NAVIGATION_CANCELLED=8]="NAVIGATION_CANCELLED",e[e.NAVIGATION_DUPLICATED=16]="NAVIGATION_DUPLICATED",e})({});const go=Symbol("");le.MATCHER_NOT_FOUND+"",le.NAVIGATION_GUARD_REDIRECT+"",le.NAVIGATION_ABORTED+"",le.NAVIGATION_CANCELLED+"",le.NAVIGATION_DUPLICATED+"";function nt(e,t){return Q(new Error,{type:e,[go]:!0},t)}function $e(e,t){return e instanceof Error&&go in e&&(t==null||!!(e.type&t))}const Es=["params","query","hash"];function Rs(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;const t={};for(const n of Es)n in e&&(t[n]=e[n]);return JSON.stringify(t,null,2)}const Is=Symbol(""),Rn=Symbol(""),Pt=Symbol(""),yo=Symbol(""),Qt=Symbol("");function un(){return re(Pt)}const wo=/#/g,As=/&/g,$s=/\//g,Ms=/=/g,Ps=/\?/g,ko=/\+/g,Os=/%5B/g,Ns=/%5D/g,bo=/%5E/g,Ds=/%60/g,Co=/%7B/g,Ls=/%7C/g,So=/%7D/g,Ts=/%20/g;function dn(e){return e==null?"":encodeURI(""+e).replace(Ls,"|").replace(Os,"[").replace(Ns,"]")}function Bs(e){return dn(e).replace(Co,"{").replace(So,"}").replace(bo,"^")}function en(e){return dn(e).replace(ko,"%2B").replace(Ts,"+").replace(wo,"%23").replace(As,"%26").replace(Ds,"`").replace(Co,"{").replace(So,"}").replace(bo,"^")}function Fs(e){return en(e).replace(Ms,"%3D")}function Hs(e){return dn(e).replace(wo,"%23").replace(Ps,"%3F")}function Ws(e){return Hs(e).replace($s,"%2F")}function bt(e){if(e==null)return null;try{return decodeURIComponent(""+e)}catch{}return""+e}const zs=/\/$/,Us=e=>e.replace(zs,"");function zt(e,t,n="/"){let o,s={},r="",l="";const i=t.indexOf("#");let a=t.indexOf("?");return a=i>=0&&a>i?-1:a,a>=0&&(o=t.slice(0,a),r=t.slice(a,i>0?i:t.length),s=e(r.slice(1))),i>=0&&(o=o||t.slice(0,i),l=t.slice(i,t.length)),o=Gs(o??t,n),{fullPath:o+r+l,path:o,query:s,hash:bt(l)}}function js(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function In(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Vs(e,t,n){const o=t.matched.length-1,s=n.matched.length-1;return o>-1&&o===s&&ot(t.matched[o],n.matched[s])&&xo(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function ot(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function xo(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n in e)if(!qs(e[n],t[n]))return!1;return!0}function qs(e,t){return xe(e)?An(e,t):xe(t)?An(t,e):(e&&e.valueOf())===(t&&t.valueOf())}function An(e,t){return xe(t)?e.length===t.length&&e.every((n,o)=>n===t[o]):e.length===1&&e[0]===t}function Gs(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),o=e.split("/"),s=o[o.length-1];(s===".."||s===".")&&o.push("");let r=n.length-1,l,i;for(l=0;l<o.length;l++)if(i=o[l],i!==".")if(i==="..")r>1&&r--;else break;return n.slice(0,r).join("/")+"/"+o.slice(l).join("/")}const Pe={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0};let tn=(function(e){return e.pop="pop",e.push="push",e})({}),Ut=(function(e){return e.back="back",e.forward="forward",e.unknown="",e})({});function Ks(e){if(!e)if(Ke){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),Us(e)}const Js=/^[^#]+#/;function Ys(e,t){return e.replace(Js,"#")+t}function Xs(e,t){const n=document.documentElement.getBoundingClientRect(),o=e.getBoundingClientRect();return{behavior:t.behavior,left:o.left-n.left-(t.left||0),top:o.top-n.top-(t.top||0)}}const Ot=()=>({left:window.scrollX,top:window.scrollY});function Zs(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=Xs(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 $n(e,t){return(history.state?history.state.position-t:-1)+e}const nn=new Map;function Qs(e,t){nn.set(e,t)}function er(e){const t=nn.get(e);return nn.delete(e),t}function tr(e){return typeof e=="string"||e&&typeof e=="object"}function _o(e){return typeof e=="string"||typeof e=="symbol"}function nr(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(ko," "),r=s.indexOf("="),l=bt(r<0?s:s.slice(0,r)),i=r<0?null:bt(s.slice(r+1));if(l in t){let a=t[l];xe(a)||(a=t[l]=[a]),a.push(i)}else t[l]=i}return t}function Mn(e){let t="";for(let n in e){const o=e[n];if(n=Fs(n),o==null){o!==void 0&&(t+=(t.length?"&":"")+n);continue}(xe(o)?o.map(s=>s&&en(s)):[o&&en(o)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+n,s!=null&&(t+="="+s))})}return t}function or(e){const t={};for(const n in e){const o=e[n];o!==void 0&&(t[n]=xe(o)?o.map(s=>s==null?null:""+s):o==null?o:""+o)}return t}function ut(){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((i,a)=>{const c=p=>{p===!1?a(nt(le.NAVIGATION_ABORTED,{from:n,to:t})):p instanceof Error?a(p):tr(p)?a(nt(le.NAVIGATION_GUARD_REDIRECT,{from:t,to:p})):(l&&o.enterCallbacks[s]===l&&typeof p=="function"&&l.push(p),i())},m=r(()=>e.call(o&&o.instances[s],t,n,c));let u=Promise.resolve(m);e.length<3&&(u=u.then(c)),u.catch(p=>a(p))})}function jt(e,t,n,o,s=r=>r()){const r=[];for(const l of e)for(const i in l.components){let a=l.components[i];if(!(t!=="beforeRouteEnter"&&!l.instances[i]))if(vo(a)){const c=(a.__vccOpts||a)[t];c&&r.push(De(c,n,o,l,i,s))}else{let c=a();r.push(()=>c.then(m=>{if(!m)throw new Error(`Couldn't resolve component "${i}" at "${l.path}"`);const u=_s(m)?m.default:m;l.mods[i]=m,l.components[i]=u;const p=(u.__vccOpts||u)[t];return p&&De(p,n,o,l,i,s)()}))}}return r}function sr(e,t){const n=[],o=[],s=[],r=Math.max(t.matched.length,e.matched.length);for(let l=0;l<r;l++){const i=t.matched[l];i&&(e.matched.find(c=>ot(c,i))?o.push(i):n.push(i));const a=e.matched[l];a&&(t.matched.find(c=>ot(c,a))||s.push(a))}return[n,o,s]}let rr=()=>location.protocol+"//"+location.host;function Eo(e,t){const{pathname:n,search:o,hash:s}=t,r=e.indexOf("#");if(r>-1){let l=s.includes(e.slice(r))?e.slice(r).length:1,i=s.slice(l);return i[0]!=="/"&&(i="/"+i),In(i,"")}return In(n,e)+o+s}function lr(e,t,n,o){let s=[],r=[],l=null;const i=({state:p})=>{const f=Eo(e,location),x=n.value,R=t.value;let b=0;if(p){if(n.value=f,t.value=p,l&&l===x){l=null;return}b=R?p.position-R.position:0}else o(f);s.forEach(v=>{v(n.value,x,{delta:b,type:tn.pop,direction:b?b>0?Ut.forward:Ut.back:Ut.unknown})})};function a(){l=n.value}function c(p){s.push(p);const f=()=>{const x=s.indexOf(p);x>-1&&s.splice(x,1)};return r.push(f),f}function m(){if(document.visibilityState==="hidden"){const{history:p}=window;if(!p.state)return;p.replaceState(Q({},p.state,{scroll:Ot()}),"")}}function u(){for(const p of r)p();r=[],window.removeEventListener("popstate",i),window.removeEventListener("pagehide",m),document.removeEventListener("visibilitychange",m)}return window.addEventListener("popstate",i),window.addEventListener("pagehide",m),document.addEventListener("visibilitychange",m),{pauseListeners:a,listen:c,destroy:u}}function Pn(e,t,n,o=!1,s=!1){return{back:e,current:t,forward:n,replaced:o,position:window.history.length,scroll:s?Ot():null}}function ar(e){const{history:t,location:n}=window,o={value:Eo(e,n)},s={value:t.state};s.value||r(o.value,{back:null,current:o.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(a,c,m){const u=e.indexOf("#"),p=u>-1?(n.host&&document.querySelector("base")?e:e.slice(u))+a:rr()+e+a;try{t[m?"replaceState":"pushState"](c,"",p),s.value=c}catch(f){console.error(f),n[m?"replace":"assign"](p)}}function l(a,c){r(a,Q({},t.state,Pn(s.value.back,a,s.value.forward,!0),c,{position:s.value.position}),!0),o.value=a}function i(a,c){const m=Q({},s.value,t.state,{forward:a,scroll:Ot()});r(m.current,m,!0),r(a,Q({},Pn(o.value,a,null),{position:m.position+1},c),!1),o.value=a}return{location:o,state:s,push:i,replace:l}}function ir(e){e=Ks(e);const t=ar(e),n=lr(e,t.state,t.location,t.replace);function o(r,l=!0){l||n.pauseListeners(),history.go(r)}const s=Q({location:"",base:e,go:o,createHref:Ys.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 cr(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),ir(e)}let We=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.Group=2]="Group",e})({});var ce=(function(e){return e[e.Static=0]="Static",e[e.Param=1]="Param",e[e.ParamRegExp=2]="ParamRegExp",e[e.ParamRegExpEnd=3]="ParamRegExpEnd",e[e.EscapeNext=4]="EscapeNext",e})(ce||{});const ur={type:We.Static,value:""},dr=/[a-zA-Z0-9_]/;function fr(e){if(!e)return[[]];if(e==="/")return[[ur]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(f){throw new Error(`ERR (${n})/"${c}": ${f}`)}let n=ce.Static,o=n;const s=[];let r;function l(){r&&s.push(r),r=[]}let i=0,a,c="",m="";function u(){c&&(n===ce.Static?r.push({type:We.Static,value:c}):n===ce.Param||n===ce.ParamRegExp||n===ce.ParamRegExpEnd?(r.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),r.push({type:We.Param,value:c,regexp:m,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function p(){c+=a}for(;i<e.length;){if(a=e[i++],a==="\\"&&n!==ce.ParamRegExp){o=n,n=ce.EscapeNext;continue}switch(n){case ce.Static:a==="/"?(c&&u(),l()):a===":"?(u(),n=ce.Param):p();break;case ce.EscapeNext:p(),n=o;break;case ce.Param:a==="("?n=ce.ParamRegExp:dr.test(a)?p():(u(),n=ce.Static,a!=="*"&&a!=="?"&&a!=="+"&&i--);break;case ce.ParamRegExp:a===")"?m[m.length-1]=="\\"?m=m.slice(0,-1)+a:n=ce.ParamRegExpEnd:m+=a;break;case ce.ParamRegExpEnd:u(),n=ce.Static,a!=="*"&&a!=="?"&&a!=="+"&&i--,m="";break;default:t("Unknown state");break}}return n===ce.ParamRegExp&&t(`Unfinished custom RegExp for param "${c}"`),u(),l(),s}const On="[^/]+?",pr={sensitive:!1,strict:!1,start:!0,end:!0};var he=(function(e){return e[e._multiplier=10]="_multiplier",e[e.Root=90]="Root",e[e.Segment=40]="Segment",e[e.SubSegment=30]="SubSegment",e[e.Static=40]="Static",e[e.Dynamic=20]="Dynamic",e[e.BonusCustomRegExp=10]="BonusCustomRegExp",e[e.BonusWildcard=-50]="BonusWildcard",e[e.BonusRepeatable=-20]="BonusRepeatable",e[e.BonusOptional=-8]="BonusOptional",e[e.BonusStrict=.7000000000000001]="BonusStrict",e[e.BonusCaseSensitive=.25]="BonusCaseSensitive",e})(he||{});const mr=/[.+*?^${}()[\]/\\]/g;function hr(e,t){const n=Q({},pr,t),o=[];let s=n.start?"^":"";const r=[];for(const c of e){const m=c.length?[]:[he.Root];n.strict&&!c.length&&(s+="/");for(let u=0;u<c.length;u++){const p=c[u];let f=he.Segment+(n.sensitive?he.BonusCaseSensitive:0);if(p.type===We.Static)u||(s+="/"),s+=p.value.replace(mr,"\\$&"),f+=he.Static;else if(p.type===We.Param){const{value:x,repeatable:R,optional:b,regexp:v}=p;r.push({name:x,repeatable:R,optional:b});const $=v||On;if($!==On){f+=he.BonusCustomRegExp;try{`${$}`}catch(k){throw new Error(`Invalid custom RegExp for param "${x}" (${$}): `+k.message)}}let y=R?`((?:${$})(?:/(?:${$}))*)`:`(${$})`;u||(y=b&&c.length<2?`(?:/${y})`:"/"+y),b&&(y+="?"),s+=y,f+=he.Dynamic,b&&(f+=he.BonusOptional),R&&(f+=he.BonusRepeatable),$===".*"&&(f+=he.BonusWildcard)}m.push(f)}o.push(m)}if(n.strict&&n.end){const c=o.length-1;o[c][o[c].length-1]+=he.BonusStrict}n.strict||(s+="/?"),n.end?s+="$":n.strict&&!s.endsWith("/")&&(s+="(?:/|$)");const l=new RegExp(s,n.sensitive?"":"i");function i(c){const m=c.match(l),u={};if(!m)return null;for(let p=1;p<m.length;p++){const f=m[p]||"",x=r[p-1];u[x.name]=f&&x.repeatable?f.split("/"):f}return u}function a(c){let m="",u=!1;for(const p of e){(!u||!m.endsWith("/"))&&(m+="/"),u=!1;for(const f of p)if(f.type===We.Static)m+=f.value;else if(f.type===We.Param){const{value:x,repeatable:R,optional:b}=f,v=x in c?c[x]:"";if(xe(v)&&!R)throw new Error(`Provided param "${x}" is an array but it is not repeatable (* or + modifiers)`);const $=xe(v)?v.join("/"):v;if(!$)if(b)p.length<2&&(m.endsWith("/")?m=m.slice(0,-1):u=!0);else throw new Error(`Missing required param "${x}"`);m+=$}}return m||"/"}return{re:l,score:o,keys:r,parse:i,stringify:a}}function vr(e,t){let n=0;for(;n<e.length&&n<t.length;){const o=t[n]-e[n];if(o)return o;n++}return e.length<t.length?e.length===1&&e[0]===he.Static+he.Segment?-1:1:e.length>t.length?t.length===1&&t[0]===he.Static+he.Segment?1:-1:0}function Ro(e,t){let n=0;const o=e.score,s=t.score;for(;n<o.length&&n<s.length;){const r=vr(o[n],s[n]);if(r)return r;n++}if(Math.abs(s.length-o.length)===1){if(Nn(o))return 1;if(Nn(s))return-1}return s.length-o.length}function Nn(e){const t=e[e.length-1];return e.length>0&&t[t.length-1]<0}const gr={strict:!1,end:!0,sensitive:!1};function yr(e,t,n){const o=hr(fr(e.path),n),s=Q(o,{record:e,parent:t,children:[],alias:[]});return t&&!s.record.aliasOf==!t.record.aliasOf&&t.children.push(s),s}function wr(e,t){const n=[],o=new Map;t=En(gr,t);function s(u){return o.get(u)}function r(u,p,f){const x=!f,R=Ln(u);R.aliasOf=f&&f.record;const b=En(t,u),v=[R];if("alias"in u){const k=typeof u.alias=="string"?[u.alias]:u.alias;for(const h of k)v.push(Ln(Q({},R,{components:f?f.record.components:R.components,path:h,aliasOf:f?f.record:R})))}let $,y;for(const k of v){const{path:h}=k;if(p&&h[0]!=="/"){const g=p.record.path,C=g[g.length-1]==="/"?"":"/";k.path=p.record.path+(h&&C+h)}if($=yr(k,p,b),f?f.alias.push($):(y=y||$,y!==$&&y.alias.push($),x&&u.name&&!Tn($)&&l(u.name)),Io($)&&a($),R.children){const g=R.children;for(let C=0;C<g.length;C++)r(g[C],$,f&&f.children[C])}f=f||$}return y?()=>{l(y)}:pt}function l(u){if(_o(u)){const p=o.get(u);p&&(o.delete(u),n.splice(n.indexOf(p),1),p.children.forEach(l),p.alias.forEach(l))}else{const p=n.indexOf(u);p>-1&&(n.splice(p,1),u.record.name&&o.delete(u.record.name),u.children.forEach(l),u.alias.forEach(l))}}function i(){return n}function a(u){const p=Cr(u,n);n.splice(p,0,u),u.record.name&&!Tn(u)&&o.set(u.record.name,u)}function c(u,p){let f,x={},R,b;if("name"in u&&u.name){if(f=o.get(u.name),!f)throw nt(le.MATCHER_NOT_FOUND,{location:u});b=f.record.name,x=Q(Dn(p.params,f.keys.filter(y=>!y.optional).concat(f.parent?f.parent.keys.filter(y=>y.optional):[]).map(y=>y.name)),u.params&&Dn(u.params,f.keys.map(y=>y.name))),R=f.stringify(x)}else if(u.path!=null)R=u.path,f=n.find(y=>y.re.test(R)),f&&(x=f.parse(R),b=f.record.name);else{if(f=p.name?o.get(p.name):n.find(y=>y.re.test(p.path)),!f)throw nt(le.MATCHER_NOT_FOUND,{location:u,currentLocation:p});b=f.record.name,x=Q({},p.params,u.params),R=f.stringify(x)}const v=[];let $=f;for(;$;)v.unshift($.record),$=$.parent;return{name:b,path:R,params:x,matched:v,meta:br(v)}}e.forEach(u=>r(u));function m(){n.length=0,o.clear()}return{addRoute:r,resolve:c,removeRoute:l,clearRoutes:m,getRoutes:i,getRecordMatcher:s}}function Dn(e,t){const n={};for(const o of t)o in e&&(n[o]=e[o]);return n}function Ln(e){const t={path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:e.aliasOf,beforeEnter:e.beforeEnter,props:kr(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 kr(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 Tn(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function br(e){return e.reduce((t,n)=>Q(t,n.meta),{})}function Cr(e,t){let n=0,o=t.length;for(;n!==o;){const r=n+o>>1;Ro(e,t[r])<0?o=r:n=r+1}const s=Sr(e);return s&&(o=t.lastIndexOf(s,o-1)),o}function Sr(e){let t=e;for(;t=t.parent;)if(Io(t)&&Ro(e,t)===0)return t}function Io({record:e}){return!!(e.name||e.components&&Object.keys(e.components).length||e.redirect)}function Bn(e){const t=re(Pt),n=re(yo),o=K(()=>{const a=w(e.to);return t.resolve(a)}),s=K(()=>{const{matched:a}=o.value,{length:c}=a,m=a[c-1],u=n.matched;if(!m||!u.length)return-1;const p=u.findIndex(ot.bind(null,m));if(p>-1)return p;const f=Fn(a[c-2]);return c>1&&Fn(m)===f&&u[u.length-1].path!==f?u.findIndex(ot.bind(null,a[c-2])):p}),r=K(()=>s.value>-1&&Ir(n.params,o.value.params)),l=K(()=>s.value>-1&&s.value===n.matched.length-1&&xo(n.params,o.value.params));function i(a={}){if(Rr(a)){const c=t[w(e.replace)?"replace":"push"](w(e.to)).catch(pt);return e.viewTransition&&typeof document<"u"&&"startViewTransition"in document&&document.startViewTransition(()=>c),c}return Promise.resolve()}return{route:o,href:K(()=>o.value.href),isActive:r,isExactActive:l,navigate:i}}function xr(e){return e.length===1?e[0]:e}const _r=X({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"},viewTransition:Boolean},useLink:Bn,setup(e,{slots:t}){const n=et(Bn(e)),{options:o}=re(Pt),s=K(()=>({[Hn(e.activeClass,o.linkActiveClass,"router-link-active")]:n.isActive,[Hn(e.exactActiveClass,o.linkExactActiveClass,"router-link-exact-active")]:n.isExactActive}));return()=>{const r=t.default&&xr(t.default(n));return e.custom?r:tt("a",{"aria-current":n.isExactActive?e.ariaCurrentValue:null,href:n.href,onClick:n.navigate,class:s.value},r)}}}),Er=_r;function Rr(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 Ir(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(!xe(s)||s.length!==o.length||o.some((r,l)=>r.valueOf()!==s[l].valueOf()))return!1}return!0}function Fn(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const Hn=(e,t,n)=>e??t??n,Ar=X({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:n}){const o=re(Qt),s=K(()=>e.route||o.value),r=re(Rn,0),l=K(()=>{let c=w(r);const{matched:m}=s.value;let u;for(;(u=m[c])&&!u.components;)c++;return c}),i=K(()=>s.value.matched[l.value]);ve(Rn,K(()=>l.value+1)),ve(Is,i),ve(Qt,s);const a=T();return ze(()=>[a.value,i.value,e.name],([c,m,u],[p,f,x])=>{m&&(m.instances[u]=c,f&&f!==m&&c&&c===p&&(m.leaveGuards.size||(m.leaveGuards=f.leaveGuards),m.updateGuards.size||(m.updateGuards=f.updateGuards))),c&&m&&(!f||!ot(m,f)||!p)&&(m.enterCallbacks[u]||[]).forEach(R=>R(c))},{flush:"post"}),()=>{const c=s.value,m=e.name,u=i.value,p=u&&u.components[m];if(!p)return Wn(n.default,{Component:p,route:c});const f=u.props[m],x=f?f===!0?c.params:typeof f=="function"?f(c):f:null,b=tt(p,Q({},x,t,{onVnodeUnmounted:v=>{v.component.isUnmounted&&(u.instances[m]=null)},ref:a}));return Wn(n.default,{Component:b,route:c})||b}}});function Wn(e,t){if(!e)return null;const n=e(t);return n.length===1?n[0]:n}const Ao=Ar;function $r(e){const t=wr(e.routes,e),n=e.parseQuery||nr,o=e.stringifyQuery||Mn,s=e.history,r=ut(),l=ut(),i=ut(),a=ln(Pe);let c=Pe;Ke&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const m=Wt.bind(null,d=>""+d),u=Wt.bind(null,Ws),p=Wt.bind(null,bt);function f(d,O){let M,N;return _o(d)?(M=t.getRecordMatcher(d),N=O):N=d,t.addRoute(N,M)}function x(d){const O=t.getRecordMatcher(d);O&&t.removeRoute(O)}function R(){return t.getRoutes().map(d=>d.record)}function b(d){return!!t.getRecordMatcher(d)}function v(d,O){if(O=Q({},O||a.value),typeof d=="string"){const W=zt(n,d,O.path),ae=t.resolve({path:W.path},O),Be=s.createHref(W.fullPath);return Q(W,ae,{params:p(ae.params),hash:bt(W.hash),redirectedFrom:void 0,href:Be})}let M;if(d.path!=null)M=Q({},d,{path:zt(n,d.path,O.path).path});else{const W=Q({},d.params);for(const ae in W)W[ae]==null&&delete W[ae];M=Q({},d,{params:u(W)}),O.params=u(O.params)}const N=t.resolve(M,O),j=d.hash||"";N.params=m(p(N.params));const ne=js(o,Q({},d,{hash:Bs(j),path:N.path})),V=s.createHref(ne);return Q({fullPath:ne,hash:j,query:o===Mn?or(d.query):d.query||{}},N,{redirectedFrom:void 0,href:V})}function $(d){return typeof d=="string"?zt(n,d,a.value.path):Q({},d)}function y(d,O){if(c!==d)return nt(le.NAVIGATION_CANCELLED,{from:O,to:d})}function k(d){return C(d)}function h(d){return k(Q($(d),{replace:!0}))}function g(d,O){const M=d.matched[d.matched.length-1];if(M&&M.redirect){const{redirect:N}=M;let j=typeof N=="function"?N(d,O):N;return typeof j=="string"&&(j=j.includes("?")||j.includes("#")?j=$(j):{path:j},j.params={}),Q({query:d.query,hash:d.hash,params:j.path!=null?{}:d.params},j)}}function C(d,O){const M=c=v(d),N=a.value,j=d.state,ne=d.force,V=d.replace===!0,W=g(M,N);if(W)return C(Q($(W),{state:typeof W=="object"?Q({},j,W.state):j,force:ne,replace:V}),O||M);const ae=M;ae.redirectedFrom=O;let Be;return!ne&&Vs(o,N,M)&&(Be=nt(le.NAVIGATION_DUPLICATED,{to:ae,from:N}),te(N,N,!0,!1)),(Be?Promise.resolve(Be):D(ae,N)).catch(pe=>$e(pe)?$e(pe,le.NAVIGATION_GUARD_REDIRECT)?pe:ke(pe):ie(pe,ae,N)).then(pe=>{if(pe){if($e(pe,le.NAVIGATION_GUARD_REDIRECT))return C(Q({replace:V},$(pe.to),{state:typeof pe.to=="object"?Q({},j,pe.to.state):j,force:ne}),O||ae)}else pe=Y(ae,N,!0,V,j);return J(ae,N,pe),pe})}function S(d,O){const M=y(d,O);return M?Promise.reject(M):Promise.resolve()}function A(d){const O=L.values().next().value;return O&&typeof O.runWithContext=="function"?O.runWithContext(d):d()}function D(d,O){let M;const[N,j,ne]=sr(d,O);M=jt(N.reverse(),"beforeRouteLeave",d,O);for(const W of N)W.leaveGuards.forEach(ae=>{M.push(De(ae,d,O))});const V=S.bind(null,d,O);return M.push(V),B(M).then(()=>{M=[];for(const W of r.list())M.push(De(W,d,O));return M.push(V),B(M)}).then(()=>{M=jt(j,"beforeRouteUpdate",d,O);for(const W of j)W.updateGuards.forEach(ae=>{M.push(De(ae,d,O))});return M.push(V),B(M)}).then(()=>{M=[];for(const W of ne)if(W.beforeEnter)if(xe(W.beforeEnter))for(const ae of W.beforeEnter)M.push(De(ae,d,O));else M.push(De(W.beforeEnter,d,O));return M.push(V),B(M)}).then(()=>(d.matched.forEach(W=>W.enterCallbacks={}),M=jt(ne,"beforeRouteEnter",d,O,A),M.push(V),B(M))).then(()=>{M=[];for(const W of l.list())M.push(De(W,d,O));return M.push(V),B(M)}).catch(W=>$e(W,le.NAVIGATION_CANCELLED)?W:Promise.reject(W))}function J(d,O,M){i.list().forEach(N=>A(()=>N(d,O,M)))}function Y(d,O,M,N,j){const ne=y(d,O);if(ne)return ne;const V=O===Pe,W=Ke?history.state:{};M&&(N||V?s.replace(d.fullPath,Q({scroll:V&&W&&W.scroll},j)):s.push(d.fullPath,j)),a.value=d,te(d,O,M,V),ke()}let F;function H(){F||(F=s.listen((d,O,M)=>{if(!_.listening)return;const N=v(d),j=g(N,_.currentRoute.value);if(j){C(Q(j,{replace:!0,force:!0}),N).catch(pt);return}c=N;const ne=a.value;Ke&&Qs($n(ne.fullPath,M.delta),Ot()),D(N,ne).catch(V=>$e(V,le.NAVIGATION_ABORTED|le.NAVIGATION_CANCELLED)?V:$e(V,le.NAVIGATION_GUARD_REDIRECT)?(C(Q($(V.to),{force:!0}),N).then(W=>{$e(W,le.NAVIGATION_ABORTED|le.NAVIGATION_DUPLICATED)&&!M.delta&&M.type===tn.pop&&s.go(-1,!1)}).catch(pt),Promise.reject()):(M.delta&&s.go(-M.delta,!1),ie(V,N,ne))).then(V=>{V=V||Y(N,ne,!1),V&&(M.delta&&!$e(V,le.NAVIGATION_CANCELLED)?s.go(-M.delta,!1):M.type===tn.pop&&$e(V,le.NAVIGATION_ABORTED|le.NAVIGATION_DUPLICATED)&&s.go(-1,!1)),J(N,ne,V)}).catch(pt)}))}let U=ut(),Z=ut(),q;function ie(d,O,M){ke(d);const N=Z.list();return N.length?N.forEach(j=>j(d,O,M)):console.error(d),Promise.reject(d)}function we(){return q&&a.value!==Pe?Promise.resolve():new Promise((d,O)=>{U.add([d,O])})}function ke(d){return q||(q=!d,H(),U.list().forEach(([O,M])=>d?M(d):O()),U.reset()),d}function te(d,O,M,N){const{scrollBehavior:j}=e;if(!Ke||!j)return Promise.resolve();const ne=!M&&er($n(d.fullPath,0))||(N||!M)&&history.state&&history.state.scroll||null;return ge().then(()=>j(d,O,ne)).then(V=>V&&Zs(V)).catch(V=>ie(V,d,O))}const Ae=d=>s.go(d);let Me;const L=new Set,_={currentRoute:a,listening:!0,addRoute:f,removeRoute:x,clearRoutes:t.clearRoutes,hasRoute:b,getRoutes:R,resolve:v,options:e,push:k,replace:h,go:Ae,back:()=>Ae(-1),forward:()=>Ae(1),beforeEach:r.add,beforeResolve:l.add,afterEach:i.add,onError:Z.add,isReady:we,install(d){d.component("RouterLink",Er),d.component("RouterView",Ao),d.config.globalProperties.$router=_,Object.defineProperty(d.config.globalProperties,"$route",{enumerable:!0,get:()=>w(a)}),Ke&&!Me&&a.value===Pe&&(Me=!0,k(s.location).catch(N=>{}));const O={};for(const N in Pe)Object.defineProperty(O,N,{get:()=>a.value[N],enumerable:!0});d.provide(Pt,_),d.provide(yo,ts(O)),d.provide(Qt,a);const M=d.unmount;L.add(d),d.unmount=function(){L.delete(d),L.size<1&&(c=Pe,F&&F(),F=null,a.value=Pe,Me=!1,q=!1),M()}}};function B(d){return d.reduce((O,M)=>O.then(()=>A(M)),Promise.resolve())}return _}function $o(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 Mo(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 st=new Intl.Collator("en",{sensitivity:"base",numeric:!0,usage:"search"});function Mr(e){return"^"+e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase()+"$"}function Pr(e){const t=e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase();return{based:t,words:t.split(/\s+/)}}function Or(e,t){const{based:n,words:o}=t;return e.includes(n)||o&&o.every(s=>e.includes(s))}class fn{loc="";key="";size=0;mtime=0;haystack="";dir=!1;_name="";constructor(t={}){const{name:n,...o}=t;Object.assign(this,o),n&&(this.name=n)}get name(){return this._name}set name(t){if(t.includes("/")||t.startsWith("."))throw Error(`Invalid name: ${t}`);this._name=t,this.haystack=Mr(t)}get sizedisp(){return $o(this.size)}get modified(){return Mo(this.mtime)}get url(){const t=this.loc?`${this.loc}/${this.name}`:this.name;return this.dir?"/#/"+`${t}/`.replaceAll("#","%23"):`/files/${t}`.replaceAll("?","%3F").replaceAll("#","%23")}get urlrouter(){return this.url.replace(/^\/#/,"")}get img(){return this.dir?!1:["jpg","jpeg","png","gif","webp","avif","heic","heif","svg"].includes(this.ext)}get previewable(){return this.dir?!1:this.img?!0:["mp4","mkv","webm","ogg","mp3","flac","aac","pdf"].includes(this.ext)}get previewurl(){return this.url.replace(/^\/files/,"/preview")}get ext(){const t=this.name.lastIndexOf(".");return t===-1||t===this.name.length-1?"":this.name.slice(t+1).toLowerCase()}}const At="paskia-iframe",zn="paskia-dialog",Nr=`body::before {
|
|
2
|
-
content: '';
|
|
3
|
-
position: fixed;
|
|
4
|
-
inset: 0;
|
|
5
|
-
z-index: 1099;
|
|
6
|
-
background: transparent;
|
|
7
|
-
backdrop-filter: blur(0) brightness(1);
|
|
8
|
-
-webkit-backdrop-filter: blur(0) brightness(1);
|
|
9
|
-
pointer-events: none;
|
|
10
|
-
visibility: hidden;
|
|
11
|
-
transition: all 0.2s ease-out;
|
|
12
|
-
}
|
|
13
|
-
body.paskia-backdrop::before {
|
|
14
|
-
-webkit-backdrop-filter: blur(.2rem) brightness(0.5);
|
|
15
|
-
backdrop-filter: blur(.2rem) brightness(0.5);
|
|
16
|
-
visibility: visible;
|
|
17
|
-
}
|
|
18
|
-
body.paskia-backdrop {
|
|
19
|
-
overflow: auto;
|
|
20
|
-
}
|
|
21
|
-
#${At} {
|
|
22
|
-
border: none;
|
|
23
|
-
position: fixed;
|
|
24
|
-
top: 0;
|
|
25
|
-
left: 0;
|
|
26
|
-
width: 100%;
|
|
27
|
-
height: 100%;
|
|
28
|
-
z-index: 9999;
|
|
29
|
-
color-scheme: auto;
|
|
30
|
-
background: transparent;
|
|
31
|
-
}
|
|
32
|
-
`;let Le=null,Fe=null,Ye=null,Xe=null,Un=!1,Et=0;function Dr(){if(document.getElementById(zn))return;const e=document.createElement("style");e.id=zn,e.textContent=Nr,document.head.insertBefore(e,document.head.firstChild)}class Ze extends Error{constructor(){super("Authentication cancelled"),this.name="AuthCancelledError"}}function pn(){Et++,document.body.classList.add("paskia-backdrop")}function Po(){Et=Math.max(0,Et-1),Et===0&&document.body.classList.remove("paskia-backdrop")}function Lr(){return!!document.getElementById(At)}function on(){Le&&(Le.remove(),Le=null,Po())}function Tr(e){const t=e.data;if(t?.type)switch(t.type){case"auth-success":on(),Ye&&(Ye(),Fe=null,Ye=null,Xe=null);break;case"auth-back":on(),Xe&&(Xe(new Ze),Fe=null,Ye=null,Xe=null);break}}function Br(){Un||typeof window<"u"&&(window.addEventListener("message",Tr),Un=!0)}function mn(e,t="Authentication"){return Dr(),Br(),Fe||(document.getElementById(At)?(Fe=new Promise((n,o)=>{Ye=n,Xe=o}),Fe):(Fe=new Promise((n,o)=>{Ye=n,Xe=o}),on(),pn(),Le=document.createElement("iframe"),Le.id=At,Le.title=t,Le.src=e,document.body.appendChild(Le),Fe))}const Fr=1e3;class Hr 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 Vt extends Error{constructor(t,n=null){super(t),this.name="NetworkError",this.originalError=n}}async function Oo(e,t={}){const{timeout:n=Fr,...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 Vt("Request timed out",l):l.name==="AbortError"?r:l.name==="TypeError"&&l.message==="Failed to fetch"?new Vt("Unable to connect to server",l):new Vt(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 mn(r.auth.iframe);continue}}return s}}async function xt(e,t={}){return Wr(e,t,Oo)}async function Wr(e,t={},n=fetch){const o={Accept:"application/json",...t.headers};let s;t.body&&typeof t.body=="object"&&!(t.body instanceof FormData)?(o["Content-Type"]="application/json",s=JSON.stringify(t.body)):s=t.body;const r={...t,headers:o,body:s},l=await n(e,r),i=await l.json();if(!l.ok)throw new Hr(e,l,i);return i}const Ct="/api/control",zr="/api/upload",Ur="/api/watch";let Se=[],Rt=500,mt=null,ht=!1;const No=()=>{Se=[]},jr=()=>{const e=localStorage["cista-files"];if(!e)return!1;const t=se();try{return Se=JSON.parse(e),t.updateRoot(Se),console.log(`Loaded session with ${Se.length} items cached`),!0}catch(n){return console.log("Loading session failed",n),!1}},Do=()=>{localStorage["cista-files"]=JSON.stringify(Se)},Ue=(e,t)=>{const n=new WebSocket(new URL(e,location.origin.replace(/^http/,"ws")));for(const[o,s]of Object.entries(t))n.addEventListener(o,s);return n};async function Lo(e){const t=e.error?.auth?.iframe;if(t){const n=se();n.clearSensitiveData(),No(),ht=!0,n.authInProgress=!0,n.error="",Ce!==null&&(clearTimeout(Ce),Ce=null);try{await mn(t),ht=!1,n.authInProgress=!1,Nt()}catch(o){ht=!1,n.authInProgress=!1,o instanceof Ze?(console.log("User cancelled authentication"),n.dialog="accessdenied"):console.error("Auth iframe error:",o)}return!0}return!1}const Nt=()=>{Ce!==null&&(clearTimeout(Ce),Ce=null);const e=se();e.error!=="Reconnecting..."&&(e.error="Connecting..."),console.log(e.error),mt=Ue(Ur,{message:Gr,close:qr}),mt.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?Lo(n):e.error=n.error.message;return}"server"in n&&(console.log("Connected to backend",n),e.server=n.server,e.connected=!0,Rt=500,e.error="",n.user?e.login(n.user.username,n.user.privileged):e.isUserLogged&&e.logout())})},Vr=()=>{mt&&(mt.close(),mt=null)},sn=()=>{ht=!1,Ce!==null&&(clearTimeout(Ce),Ce=null),Nt()};let Ce=null;const qr=e=>{const t=se();if(ht||Lr()){console.log("Skipping reconnect - awaiting authentication");return}t.connected&&(console.warn("Disconnected from server",e),t.connected=!1,t.error="Reconnecting..."),Ce!==null&&clearTimeout(Ce),Rt=Math.min(5e3,Rt+500),Ce=setTimeout(Nt,Rt)},Gr=e=>{const t=JSON.parse(e.data);switch(!0){case!!t.root:Kr(t);break;case!!t.update:Jr(t);break;case!!t.space:console.log("Watch space",t.space);break;case!!t.error:Yr(t);break}};function Kr({root:e}){const t=se();console.log("Watch root",e),t.updateRoot(e),Se=e,Do()}function Jr(e){const t=se(),n=e.update;if(console.log("Watch update",n),!Se)return console.error("Watch update before root");let o=[],s=0;for(const[r,l]of n)r==="k"?(o.push(...Se.slice(s,s+l)),s+=l):r==="d"?s+=l:r==="i"?o.push(...l):console.log("Unknown update action",r,l);if(s!=Se.length)throw Error(`Tree update out of sync, number of entries mismatch: got ${s}, expected ${Se.length}, new tree ${o.length}`);t.updateRoot(o),Se=o,Do()}function Yr(e){if(se(),e.error.code===401||e.error.code===403){Lo(e);return}}const To={name:(e,t)=>st.compare(e.name,t.name),modified:(e,t)=>t.mtime-e.mtime,size:(e,t)=>t.size-e.size},Bo=(e,t)=>{if(!t)return e;const n=[...e];return n.sort(To[t]),n},Xr=(e,t)=>{if(!t)return e;const n=To[t],o=new Map;for(const i of e){const a=i.loc;o.has(a)||o.set(a,[]),o.get(a).push(i)}for(const i of o.values())i.sort(n);const s=new Map;for(const[i,a]of o)s.set(i,a[0]);const r=[...o.keys()].sort((i,a)=>t==="name"?st.compare(i,a):n(s.get(i),s.get(a))),l=[];for(const i of r)l.push(...o.get(i));return l},se=ho("main",{state:()=>({document:[],selected:new Set([]),query:"",fileExplorer:null,error:"",connected:!1,authInProgress:!1,cursor:"",server:{},dialog:"",uprogress:{},dprogress:{},prefs:{gallery:!1,sortListing:"",sortFiltered:""},user:{username:"",privileged:!1,isLoggedIn:!1}}),persist:{pick:["prefs","cursor","selected"],serializer:{deserialize:e=>{const t=JSON.parse(e);return t.selected=new Set(t.selected),t},serialize:e=>(e.selected=Array.from(e.selected),JSON.stringify(e))}},actions:{updateRoot(e){const t=[];let n=[];for(const[o,s,r,l,i,a]of e)n=n.slice(0,o-1),t.push(new fn({name:s,loc:o?n.join("/"):"/",key:r,size:i,mtime:l,dir:!a})),n.push(s);this.document=t},login(e,t){this.user.username=e,this.user.privileged=t,this.user.isLoggedIn=!0,this.dialog="",this.connected||sn()},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(),sn()},toggleSort(e){this.query?this.prefs.sortFiltered=this.prefs.sortFiltered===e?"":e:this.prefs.sortListing=this.prefs.sortListing===e?"":e},sort(e){this.query?this.prefs.sortFiltered=e:this.prefs.sortListing=e},focusBreadcrumb(){document.querySelector(".breadcrumb").focus()},cancelDownloads(){location.reload()},cancelUploads(){location.reload()}},getters:{sortOrder(){return this.query?this.prefs.sortFiltered:this.prefs.sortListing},isUserLogged(){return this.user.isLoggedIn},recentDocuments(){return Bo(this.document,"modified")},selectedFiles(){const e=this.selected,t=new Set,n={missing:new Set,docs:{},keys:[],recursive:[]};for(const r of this.document)e.has(r.key)&&(t.add(r.key),n.keys.push(r.key),n.docs[r.key]=r);for(const r of e)t.has(r)||n.missing.add(r);const o=new Set;function s(r,l,i){if(!i.dir&&o.has(r))throw Error(`Multiple selections conflict for: ${r}`);o.add(r),n.recursive.push([r,l,i])}for(const r of n.keys){const l=n.docs[r],i=l.loc?`${l.loc}/${l.name}`:l.name,a=l.loc.length;s(l.name,i,l);for(const c of this.document)if(c.loc===i||c.loc.startsWith(i)&&c.loc[i.length]==="/"){const m=c.loc?`${c.loc}/${c.name}`:c.name,u=m.slice(a);s(u,m,c)}}return n.recursive.sort((r,l)=>st.compare(r[0],l[0])),n}}}),Fo=e=>{const t=se(),n=e.join("/");return t.document.some(o=>(o.loc?`${o.loc}/${o.name}`:o.name)===n)},Zr=["aria-current"],Qr=["href","aria-current","onClick","title"],hn=X({__name:"BreadCrumb",props:{path:{},primary:{type:Boolean}},setup(e){const t=os,n=un(),o=[],s=(u,p)=>{p&&(o[u]=p)};ns(()=>{o.length=1});const r=e,l=T([]),i=u=>u==r.path.length?"location":void 0,a=()=>{ge(()=>{const u=r.path.length;u<o.length&&o[u].focus()})},c=u=>{if(!o[u])throw Error(`No link at index ${u} (path: ${r.path})`);const f=u?`/${l.value.slice(0,u).join("/")}/`:"/",x=l.value.length?`/${l.value.join("/")}/`:"/",R=decodeURIComponent(location.hash.slice(1).split("//")[0]??""),b=f.replaceAll("?","%3F").replaceAll("#","%23");i(u)?(l.value.splice(u),n.push(b)):x.startsWith(R)?n.replace(b):n.push(b)},m=u=>{const p=r.path.length+u;p<0||p>l.value.length||c(p)};return Ie(()=>{const u=l.value.slice(0,r.path.length);if(!u.every((f,x)=>f===r.path[x]))l.value=r.path;else if(r.path.length>u.length)l.value=u.concat(r.path.slice(u.length));else for(let f=r.path.length;f<l.value.length;++f)if(!Fo(l.value.slice(0,f+1))){l.value=l.value.slice(0,f);break}r.primary&&ge(()=>{const f=document.activeElement;(!f||[...o,document.body].includes(f))&&a()})}),(u,p)=>(I(),P("nav",{class:"breadcrumb","aria-label":"Breadcrumb",onKeydown:[p[1]||(p[1]=Qe(de(f=>m(-1),["stop"]),["left"])),p[2]||(p[2]=Qe(de(f=>m(1),["stop"]),["right"]))],onKeyup:p[3]||(p[3]=Qe(f=>m(0),["enter"])),onFocus:a,tabindex:"0"},[E("a",{href:"#/",ref:f=>s(0,f),class:me(["home",{current:!!i(0)}]),"aria-current":i(0),onClick:p[0]||(p[0]=de(f=>c(0),["prevent"])),title:"/"},[(I(),ee(an(w(t))))],10,Zr),(I(!0),P(fe,null,rt(l.value,(f,x)=>(I(),P("a",{key:x,href:`/#/${l.value.slice(0,x+1).join("/")}/`,class:me({current:!!i(x+1)}),"aria-current":i(x+1),onClick:de(R=>c(x+1),["prevent"]),ref_for:!0,ref:R=>s(x+1,R),title:`/${l.value.slice(0,x+1).join("/")}`},oe(f),11,Qr))),128))],32))}}),el={class:"action-button"},Dt=X({__name:"SvgButton",props:{name:{}},setup(e){return(t,n)=>(I(),P("button",el,[(I(),ee(an(w(ss)[e.name]))),ue(t.$slots,"default")]))}}),tl=X({__name:"UploadButton",props:{path:Array},setup(e){const t=T(),n=T(),o=se(),s=e;function r(k){const h=Array.from(k.clipboardData?.items??[]),g=[],C=[];for(const S of h){if(S.kind!=="file")continue;const A=S.webkitGetAsEntry();if(A?.isFile){const D=S.getAsFile();D&&g.push(D)}else A?.isDirectory&&C.push(A)}if(g.length||C.length){k.preventDefault(),a(g);for(const S of C)l(S,`${s.path.join("/")}/${S.name}`)}}const l=async(k,h)=>{const g=k.createReader(),C=await new Promise(A=>g.readEntries(A)),S=[];for(const A of C){const D=`${h}/${A.name}`;if(A.isFile){const J=await new Promise(Y=>A.file(Y));S.push({file:J,cloudName:D,cloudPos:0})}else A.isDirectory&&await l(A,D)}S.length&&c(S)};function i(k){k.preventDefault();const h=k.target,g=Array.from((h??k.dataTransfer)?.files??[]);h&&(h.value=""),g.length&&a(g)}const a=k=>{const h=s.path.join("/");let g=[];for(const C of k)g.push({file:C,cloudName:h+"/"+(C.webkitRelativePath||C.name),cloudPos:0});c(g)},c=k=>{const h=k.filter(g=>g.cloudName.includes("/."));h.length&&(o.error="Won't upload dotfiles",console.log("Dotfiles omitted",h),k=k.filter(g=>!g.cloudName.includes("/."))),k.length&&(k.sort((g,C)=>st.compare(g.cloudName,C.cloudName)),R=[...R,...k],x(k),y())},m={total:0,xfer:0,t0:0,tlast:0,statbytes:0,statdur:0,files:[],filestart:0,fileidx:0,filecount:0,filename:"",filesize:0,filepos:0,status:"idle"};o.uprogress={...m},setInterval(()=>{Date.now()-o.uprogress.tlast>3e3?(o.uprogress.statbytes=0,o.uprogress.statdur=1):(o.uprogress.statbytes*=.9,o.uprogress.statdur*=.9)},100);const u=({name:k,size:h,start:g,end:C})=>{if(k!==o.uprogress.filename)return;const S=Date.now();o.uprogress.xfer=o.uprogress.filestart+C,o.uprogress.filepos=C,o.uprogress.statbytes+=C-g,o.uprogress.statdur+=S-o.uprogress.tlast,o.uprogress.tlast=S,C===h&&(o.uprogress.filestart+=h,p(),++o.uprogress.fileidx>=o.uprogress.filecount&&f())},p=()=>{const k=o.uprogress.files.shift();if(!k)return f();o.uprogress.filepos=0,o.uprogress.filesize=k.file.size,o.uprogress.filename=k.cloudName},f=()=>{Object.assign(o.uprogress,m),o.uprogress.t0=Date.now(),o.uprogress.tlast=o.uprogress.t0+1},x=k=>{o.uprogress.files.length===0&&f(),o.uprogress.total+=k.reduce((h,g)=>h+g.file.size,0),o.uprogress.filecount+=k.length,o.uprogress.files=[...o.uprogress.files,...k],p()};let R=[];const b=async()=>await new Promise(k=>{const h=Ue(zr,{open(g){k(h)},error(g){console.error("Upload socket error",g),o.error="Upload socket error"},message(g){const C=JSON.parse(g.data);if("error"in C){console.error("Upload socket error",C.error),o.error=C.error.message;return}C.status==="ack"?u(C.req):console.log("Unknown upload response",C)}});h.sendMsg=g=>h.send(JSON.stringify(g)),h.sendData=async g=>{o.uprogress.status="uploading",await new Promise(C=>{const S=setInterval(()=>{h.bufferedAmount>1048576||(C(void 0),clearInterval(S))},1)}),o.uprogress.status="processing",h.send(g)}}),v=async()=>{const k=await b();for(;R.length;){const h=R[0],g=h.cloudPos,C=Math.min(h.file.size,g+(1<<20)),S={name:h.cloudName,size:h.file.size,start:g,end:C},A=h.file.slice(g,C);h.cloudPos=C,k.sendMsg(S),await k.sendData(A),h.cloudPos===h.file.size&&R.shift()}R.length&&y(),o.uprogress.status="idle",$=!1};let $=!1;const y=()=>{$===!1&&($=setTimeout(()=>{$=!0,v()},0))};return be(()=>{addEventListener("dragover",i),addEventListener("drop",i),addEventListener("paste",r)}),wt(()=>{removeEventListener("paste",r),removeEventListener("dragover",i),removeEventListener("drop",i)}),(k,h)=>{const g=Dt;return I(),P(fe,null,[E("template",null,[E("input",{ref_key:"fileInput",ref:t,onChange:i,type:"file",multiple:""},null,544),E("input",{ref_key:"folderInput",ref:n,onChange:i,type:"file",webkitdirectory:""},null,544)]),z(g,{name:"add-file","data-tooltip":"Upload files",onClick:h[0]||(h[0]=C=>t.value.click())}),z(g,{name:"add-folder","data-tooltip":"Upload folder",onClick:h[1]||(h[1]=C=>n.value.click())})],64)}}}),nl=ho("ssoAuth",()=>{const e=K(()=>se().server?.paskia===!0);function t(){se().clearSensitiveData(),No()}return{isExternalAuth:e,clearDataOnUnauth:t}});let Te=null;function ol(){return Te!==null}function sl(e){Te&&Ho(),Te=e}function jn(e){e===Te&&(Te=null)}function Ho(){Te&&(Te.closeMenu(),Te=null)}const Ee={defaultDirection:"br",defaultMinWidth:100,defaultMaxWidth:600,defaultZindex:100,defaultZoom:1,defaultAdjustPadding:{x:0,y:10}};function vt(e,t){let n=e.offsetTop;return e.offsetParent!=null&&e.offsetParent!=t&&(n-=e.offsetParent.scrollTop,n+=vt(e.offsetParent,t)),n}function gt(e,t){let n=e.offsetLeft;return e.offsetParent!=null&&e.offsetParent!=t&&(n-=e.offsetParent.scrollLeft,n+=gt(e.offsetParent,t)),n}function rl(e,t,n,o){return{x:gt(e,o)+t,y:vt(e,o)+n}}const qt="mx-menu-default-container",ll="mx-menu-container-";let al=0;function Wo(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=ll+al++,s.setAttribute("id",r)),{eleId:r,container:s,isNew:!1}}}let o=document.getElementById(qt);return o||(o=document.createElement("div"),o.setAttribute("id",qt),o.setAttribute("class","mx-menu-ghost-host fullscreen"),document.body.appendChild(o)),o.style.zIndex=n?.toString()||Ee.defaultZindex.toString(),{eleId:qt,container:o,isNew:!0}}function il(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 Vn(e){return typeof e=="number"?`${e}px`:e}const _e=X({props:{vnode:{type:null},data:{type:null,default:null}},setup(e){const{vnode:t,data:n}=Ve(e);return()=>typeof t.value=="function"?t.value(n.value):t.value}});function cl(e,t){const n={...e};return delete n[t],n}var ul=Object.defineProperty,dl=(e,t,n)=>t in e?ul(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,qn=(e,t,n)=>dl(e,typeof t!="symbol"?t+"":t,n);class Gn{constructor(t,n){qn(this,"x",0),qn(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 Kn(e){const{onDown:t,onMove:n,onUp:o}=e,s=new Gn,r=new Gn;let l;function i(c){c.stopPropagation(),r.set(c.x,c.y),r.substract(s),n(s,r,c,l)}function a(c){o(c,l),s.set(0,0),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",a)}return(c,m)=>t(c,m)?(l=m,s.set(c.x,c.y),document.addEventListener("mousemove",i),document.addEventListener("mouseup",a),c.stopPropagation(),!0):!1}function fl(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 dt=[],Jn=fl(100,()=>{for(const e of dt)e()});function pl(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(){Jn.start(),dt.push(l)},stopResizeChecker(){const i=dt.indexOf(l);i>=0&&dt.splice(i,1),dt.length===0&&Jn.stop()}}}const Yn=140,ml=70,hl=X({__name:"ScrollRect",props:{scroll:{type:String,default:"both"},scrollBarAlwaysShow:{type:Boolean,default:!1},scrollBarBackgroundClickable:{type:Boolean,default:!1},height:{type:Number,default:void 0},width:{type:Number,default:void 0},maxHeight:{type:Number,default:void 0},maxWidth:{type:Number,default:void 0},containerClass:{type:String,default:""},containerStyle:{type:null}},emits:["scroll","resized"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=T(),l=T(),i=T(),a=T(),c=T(),m=T(),u=T(!1),p=K(()=>o.scroll==="horizontal"||o.scroll==="both"),f=K(()=>o.scroll==="vertical"||o.scroll==="both"),x=et({show:!1,size:0,sizeRaw:0,pos:0}),R=et({show:!1,size:0,sizeRaw:0,pos:0});let b=0,v=0,$=0,y=0,k=null;const h={attributes:!0,childList:!0};function g(){if(r.value){if(x.show){const _=r.value.offsetWidth/r.value.scrollWidth;x.sizeRaw=_*r.value.offsetWidth,x.size=_*100,x.pos=r.value.scrollLeft/(r.value.scrollWidth-r.value.offsetWidth)*(100-x.size),_>=1&&(x.show=!1)}if(R.show){const _=r.value.offsetHeight/r.value.scrollHeight;R.sizeRaw=_*r.value.offsetHeight,R.size=_*100,R.pos=r.value.scrollTop/(r.value.scrollHeight-r.value.offsetHeight)*(100-R.size),_>=1&&(R.show=!1)}s("scroll",r.value.scrollLeft,r.value.scrollTop)}}function C(_=!1){if(!r.value)return;let B=p.value,d=f.value;const O=B&&(b!==r.value.scrollWidth||$!==r.value.offsetWidth),M=f&&(v!==r.value.scrollHeight||y!==r.value.offsetHeight);if(!_&&!O&&!M)return;const N=window.getComputedStyle(r.value);(N.overflow==="hidden"||N.overflowX==="hidden")&&(B=!1),(N.overflow==="hidden"||N.overflowY==="hidden")&&(d=!1),x.show=B,R.show=d,g(),$=r.value.offsetWidth,y=r.value.offsetHeight,b=r.value.scrollWidth,v=r.value.scrollHeight,s("resized",b,v)}function S(_){var B;o.scroll=="horizontal"&&(_.deltaMode==0&&((B=r.value)==null||B.scrollTo({left:r.value.scrollLeft+(_.deltaY>0?Yn:-140),behavior:"smooth"})),_.preventDefault(),_.stopPropagation())}function A(_){var B;_.deltaMode==0&&((B=r.value)==null||B.scrollTo({left:r.value.scrollLeft+(_.deltaY>0?Yn:-140),behavior:"smooth"}),_.preventDefault(),_.stopPropagation())}function D(_){var B;_.deltaMode==0&&((B=r.value)==null||B.scrollTo({top:r.value.scrollTop+(_.deltaY>0?ml:-70),behavior:"smooth"}),_.preventDefault(),_.stopPropagation())}let J=0,Y=0,F=0,H=0;const U=Kn({onDown(_){return!i.value||!c.value?!1:(J=_.offsetX,Y=_.x-_.offsetX-c.value.offsetLeft,_.preventDefault(),u.value=!0,!0)},onMove(_,B,d){r.value&&i.value&&(we(d.x-J-Y),d.preventDefault(),d.stopPropagation())},onUp(){u.value=!1}}),Z=Kn({onDown(_){return!a.value||!m.value?!1:(F=_.offsetY,H=_.y-_.offsetY-m.value.offsetTop,_.preventDefault(),u.value=!0,!0)},onMove(_,B,d){r.value&&a.value&&(ke(d.y-F-H),d.preventDefault(),d.stopPropagation())},onUp(){u.value=!1}});function q(_){r.value&&(r.value.scrollLeft=_/100*(r.value.scrollWidth-r.value.offsetWidth))}function ie(_){r.value&&(r.value.scrollLeft=_/100*(r.value.scrollHeight-r.value.offsetHeight))}function we(_){r.value&&(r.value.scrollLeft=_/(r.value.offsetWidth-x.sizeRaw)*(r.value.scrollWidth-r.value.offsetWidth))}function ke(_){r.value&&(r.value.scrollTop=_/(r.value.offsetHeight-R.sizeRaw)*(r.value.scrollHeight-r.value.offsetHeight))}function te(_){o.scrollBarBackgroundClickable&&we(_.offsetX-x.sizeRaw/2)}function Ae(_){o.scrollBarBackgroundClickable&&ke(_.offsetY-R.sizeRaw/2)}const{startResizeChecker:Me,stopResizeChecker:L}=pl(r,()=>C(),()=>C());return be(()=>{ge(()=>{setTimeout(()=>C(!0),200),C(!0),Me(),k=new MutationObserver(()=>C()),k.observe(r.value,h)})}),$t(()=>{L(),k&&(k.disconnect(),k=null)}),t({refreshScrollState(){C(!0)},getScrollContainer(){return r.value},scrollTo(_,B){var d;(d=r.value)==null||d.scrollTo(_,B)},scrollToTop(){var _;(_=r.value)==null||_.scrollTo(0,0)},scrollToBottom(){var _;(_=r.value)==null||_.scrollTo(r.value.scrollWidth,r.value.scrollHeight)}}),(_,B)=>(I(),P("div",{ref_key:"scrollrect",ref:l,class:me(["vue-scroll-rect",e.scrollBarAlwaysShow?"always-show-scrollbar":"",e.scrollBarBackgroundClickable?"background-clickable":"",u.value?"dragging":""]),style:Je({width:e.width?`${e.width}px`:void 0,height:e.height?`${e.height}px`:void 0}),onWheel:S},[E("div",{ref_key:"container",ref:r,class:me(["scroll-content",e.scroll,e.containerClass]),style:Je({maxWidth:e.maxWidth?`${e.maxWidth}px`:void 0,maxHeight:e.maxHeight?`${e.maxHeight}px`:void 0,...e.containerStyle}),onScroll:g},[ue(_.$slots,"default")],38),x.show?ue(_.$slots,"scrollBarX",{key:0,scrollBarValue:x,onScroll:q},()=>[E("div",{ref_key:"scrollBarRefX",ref:i,class:"scrollbar horizontal",onClick:te,onWheel:A},[E("div",{class:"thumb",ref_key:"scrollBarThumbRefX",ref:c,style:Je({left:`${x.pos}%`,width:`${x.size}%`}),onMousedown:B[0]||(B[0]=(...d)=>w(U)&&w(U)(...d)),onWheel:A},null,36)],544)]):G("",!0),R.show?ue(_.$slots,"scrollBarY",{key:1,scrollBarValue:R,onScroll:ie},()=>[R.show?(I(),P("div",{key:0,ref_key:"scrollBarRefY",ref:a,class:"scrollbar vertical",onClick:Ae,onWheel:D},[E("div",{class:"thumb",ref_key:"scrollBarThumbRefY",ref:m,style:Je({top:`${R.pos}%`,height:`${R.size}%`}),onMousedown:B[1]||(B[1]=(...d)=>w(Z)&&w(Z)(...d)),onWheel:D},null,36)],544)):G("",!0)]):G("",!0)],38))}}),vn=(e,t)=>{const n=e.__vccOpts||e;for(const[o,s]of t)n[o]=s;return n},vl={},gl={class:"mx-checked-mark","aria-hidden":"true",viewBox:"0 0 1024 1024"},yl=E("path",{d:"M129.3,428.6L52,512l345,372.5l575-620.8l-69.5-75L400.4,718.2L129.3,428.6z"},null,-1),wl=[yl];function kl(e,t){return I(),P("svg",gl,wl)}const bl=vn(vl,[["render",kl]]),Cl={},Sl={class:"mx-right-arrow","aria-hidden":"true",viewBox:"0 0 1024 1024"},xl=E("path",{d:"M307.018 49.445c11.517 0 23.032 4.394 31.819 13.18L756.404 480.18c8.439 8.438 13.181 19.885 13.181 31.82s-4.741 23.38-13.181 31.82L338.838 961.376c-17.574 17.573-46.065 17.573-63.64-0.001-17.573-17.573-17.573-46.065 0.001-63.64L660.944 512 275.198 126.265c-17.574-17.573-17.574-46.066-0.001-63.64C283.985 53.839 295.501 49.445 307.018 49.445z"},null,-1),_l=[xl];function El(e,t){return I(),P("svg",Sl,_l)}const Rl=vn(Cl,[["render",El]]),Il={class:"mx-item-row"},Al=["xlink:href"],$l={key:1,class:"label"},Ml={class:"mx-item-row"},Pl={class:"mx-shortcut"},gn=X({__name:"ContextMenuItem",props:{disabled:{type:Boolean,default:!1},hidden:{type:Boolean,default:!1},customRender:{type:Function,default:null},customClass:{type:String,default:""},clickHandler:{type:Function,default:null},label:{type:[String,Object,Function],default:""},icon:{type:[String,Object,Function],default:""},iconFontClass:{type:String,default:"iconfont"},checked:{type:Boolean,default:!1},shortcut:{type:String,default:""},svgIcon:{type:String,default:""},svgProps:{type:Object,default:null},preserveIconWidth:{type:Boolean,default:!0},showRightArrow:{type:Boolean,default:!1},hasChildren:{type:Boolean,default:!1},clickClose:{type:Boolean,default:!0},clickableWhenHasChildren:{type:Boolean,default:!1},rawMenuItem:{type:Object,default:void 0}},emits:["click","subMenuOpen","subMenuClose"],setup(e,{expose:t,emit:n}){const o=e,s=n,{clickHandler:r,clickClose:l,clickableWhenHasChildren:i,disabled:a,hidden:c,label:m,icon:u,iconFontClass:p,showRightArrow:f,shortcut:x,hasChildren:R}=Ve(o),b=T(!1),v=T(!1),$=T(),y=re("globalOptions"),k=re("globalHasSlot"),h=re("globalRenderSlot"),g=re("globalCloseMenu"),C=re("menuContext"),S=K(()=>typeof m.value=="string"?m.value:typeof m.value=="function"?il(m.value.toString()):"MenuItem[unknow]");ve("MenuItemName",S);const A={getSubMenuInstance:()=>{},showSubMenu:()=>b.value?(C.markActiveMenuItem(A,!0),!0):R.value?(J(),!0):!1,hideSubMenu:()=>{C.closeOtherSubMenu()},isDisabledOrHidden:()=>a.value||c.value,getElement:()=>$.value,focus:()=>v.value=!0,blur:()=>v.value=!1,click:D};ve("menuItemInstance",A),be(()=>{C.isMenuItemDataCollectedFlag()?ge(()=>{let H=0;const U=C.getElement();if(U){let Z=0;for(let q=0;q<U.children.length;q++){const ie=U.children[q];if(ie.getAttribute("data-type")==="ContextMenuItem"){if(ie===$.value){H=Z;break}Z++}}}C.addChildMenuItem(A,H)}):C.addChildMenuItem(A)}),$t(()=>{C.removeChildMenuItem(A)});function D(H){if(!a.value){if(H){const U=H.target;if(U.classList.contains("mx-context-no-clickable")||y.value.ignoreClickClassName&&U.classList.contains(y.value.ignoreClickClassName))return;if(y.value.clickCloseClassName&&U.classList.contains(y.value.clickCloseClassName)){H.stopPropagation(),g(o.rawMenuItem);return}}R.value?i.value?(typeof r.value=="function"&&r.value(H),s("click",H)):b.value||J():(typeof r.value=="function"&&r.value(H),s("click",H),l.value&&g(o.rawMenuItem))}}function J(H){v.value=!1,C.checkCloseOtherSubMenuTimeOut()||C.closeOtherSubMenu(),a.value||(C.markActiveMenuItem(A),R.value&&(H||C.markThisOpenedByKeyBoard(),C.addOpenedSubMenu(Y),b.value=!0,ge(()=>s("subMenuOpen",A))))}function Y(){v.value=!1,b.value=!1,s("subMenuClose",A)}function F(){return{disabled:a.value,label:m.value,icon:u.value,iconFontClass:p.value,showRightArrow:f.value,clickClose:l.value,clickableWhenHasChildren:i.value,shortcut:x.value,theme:y.value.theme,isOpen:b,hasChildren:R,onClick:D,onMouseEnter:J,closeMenu:g}}return t(A),(H,U)=>w(c)?G("",!0):(I(),P("div",{key:0,class:"mx-context-menu-item-wrapper",ref_key:"menuItemRef",ref:$,"data-type":"ContextMenuItem"},[w(k)("itemRender")?(I(),ee(w(_e),{key:0,vnode:()=>w(h)("itemRender",F())},null,8,["vnode"])):e.customRender?(I(),ee(w(_e),{key:1,vnode:e.customRender,data:F()},null,8,["vnode","data"])):(I(),P("div",{key:2,class:me(["mx-context-menu-item",w(a)?"disabled":"",v.value?"keyboard-focus":"",e.customClass?" "+e.customClass:"",b.value?"open":""]),onClick:D,onMouseenter:J},[ue(H.$slots,"default",{},()=>[E("div",Il,[E("div",{class:me(["mx-icon-placeholder",e.preserveIconWidth?"preserve-width":""])},[ue(H.$slots,"icon",{},()=>[w(k)("itemIconRender")?(I(),ee(w(_e),{key:0,vnode:()=>w(h)("itemIconRender",F())},null,8,["vnode"])):typeof e.svgIcon=="string"&&e.svgIcon?(I(),P("svg",Jt({key:1,class:"icon svg"},e.svgProps),[E("use",{"xlink:href":e.svgIcon},null,8,Al)],16)):typeof w(u)!="string"?(I(),ee(w(_e),{key:2,vnode:w(u),data:w(u)},null,8,["vnode","data"])):typeof w(u)=="string"&&w(u)!==""?(I(),P("i",{key:3,class:me(w(u)+" icon "+w(p)+" "+w(y).iconFontClass)},null,2)):G("",!0)]),e.checked?ue(H.$slots,"check",{key:0},()=>[w(k)("itemCheckRender")?(I(),ee(w(_e),{key:0,vnode:()=>w(h)("itemCheckRender",F())},null,8,["vnode"])):G("",!0),z(bl)]):G("",!0)],2),ue(H.$slots,"label",{},()=>[w(k)("itemLabelRender")?(I(),ee(w(_e),{key:0,vnode:()=>w(h)("itemLabelRender",F())},null,8,["vnode"])):typeof w(m)=="string"?(I(),P("span",$l,oe(w(m)),1)):(I(),ee(w(_e),{key:2,vnode:w(m),data:w(m)},null,8,["vnode","data"]))])]),E("div",Ml,[w(x)||H.$slots.shortcut?ue(H.$slots,"shortcut",{key:0},()=>[w(k)("itemShortcutRender")?(I(),ee(w(_e),{key:0,vnode:()=>w(h)("itemShortcutRender",F())},null,8,["vnode"])):G("",!0),E("span",Pl,oe(w(x)),1)]):G("",!0),w(f)?ue(H.$slots,"rightArrow",{key:1},()=>[w(k)("itemRightArrowRender")?(I(),ee(w(_e),{key:0,vnode:()=>w(h)("itemRightArrowRender",F())},null,8,["vnode"])):G("",!0),z(Rl)]):G("",!0)])])],34)),ue(H.$slots,"submenu",{context:A,show:b.value})],512))}}),Ol=X({name:"ContextMenuSperator",components:{VNodeRender:_e},setup(){const e=re("globalHasSlot"),t=re("globalRenderSlot");return{globalHasSlot:e,globalRenderSlot:t}}}),Nl={key:1,class:"mx-context-menu-item-sperator mx-context-no-clickable"};function Dl(e,t,n,o,s,r){const l=io("VNodeRender");return e.globalHasSlot("separatorRender")?(I(),ee(l,{key:0,vnode:()=>e.globalRenderSlot("separatorRender",{})},null,8,["vnode"])):(I(),P("div",Nl))}const yt=vn(Ol,[["render",Dl]]),yn=X({__name:"ContextSubMenu",props:{items:{type:Object,default:null},show:{type:Boolean,default:!1},maxHeight:{type:Number,default:0},maxWidth:{type:[String,Number],default:0},minWidth:{type:[String,Number],default:0},adjustPosition:{type:Boolean,default:!0},direction:{type:String,default:"br"},parentMenuItemContext:{type:Object,default:null}},emits:["closeAnimFinished"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=T(!1),l=re("globalGetMenuHostId",""),i=re("menuContext"),a=re("globalOptions");re("globalHasSlot"),re("globalRenderSlot");const c=T("UnknowOrRoot"),m=re("MenuItemName",c),{zIndex:u,getParentWidth:p,getParentHeight:f,getZoom:x}=i,{adjustPosition:R}=Ve(o),b=T(),v=T(),$=T(),y=[],k=re("globalSetCurrentSubMenu"),h=[];let g=null,C=0;function S(){g&&g.blur()}function A(L,_){if(L){for(let B=_!==void 0?_:0;B<h.length;B++)if(!h[B].isDisabledOrHidden()){D(B);break}}else for(let B=_!==void 0?_:h.length-1;B>=0;B--)if(!h[B].isDisabledOrHidden()){D(B);break}}function D(L){if(g&&S(),L!==void 0&&(g=h[Math.max(0,Math.min(L,h.length-1))]),!g)return;g.focus();const _=g.getElement();_&&_.scrollIntoView({behavior:"auto",block:"nearest",inline:"nearest"})}function J(){k(Y)}const Y={el:$,name:m,isTopLevel:()=>i.getParentContext()===null,closeSelfAndActiveParent:()=>{const L=U.getParentContext();if(L){L.closeOtherSubMenu();const _=L.getSubMenuInstanceContext();if(_)return _.focusCurrentItem(),!0}return!1},closeCurrentSubMenu:()=>{var L;return(L=U.getParentContext())==null?void 0:L.closeOtherSubMenu()},moveCurrentItemFirst:()=>A(!0),moveCurrentItemLast:()=>A(!1),moveCurrentItemDown:()=>A(!0,g?h.indexOf(g)+1:0),moveCurrentItemUp:()=>A(!1,g?h.indexOf(g)-1:0),focusCurrentItem:()=>D(),openCurrentItemSubMenu:()=>g?g?.showSubMenu():!1,triggerCurrentItemClick:L=>g?.click(L)};let F=!1,H=!1;const U={zIndex:u+1,container:i.container,adjustPadding:a.value.adjustPadding||Ee.defaultAdjustPadding,getParentWidth:()=>{var L;return((L=$.value)==null?void 0:L.offsetWidth)||0},getParentHeight:()=>{var L;return((L=$.value)==null?void 0:L.offsetHeight)||0},getPositon:()=>[te.value.x,te.value.y],getZoom:()=>a.value.zoom||Ee.defaultZoom,addOpenedSubMenu(L){y.push(L)},closeOtherSubMenu(){y.forEach(L=>L()),y.splice(0,y.length),k(Y)},checkCloseOtherSubMenuTimeOut(){return C?(clearTimeout(C),C=0,!0):!1},closeOtherSubMenuWithTimeOut(){C=setTimeout(()=>{C=0,this.closeOtherSubMenu()},200)},addChildMenuItem:(L,_)=>{_===void 0?h.push(L):h.splice(_,0,L)},removeChildMenuItem:L=>{h.splice(h.indexOf(L),1),L.getSubMenuInstance=()=>{}},markActiveMenuItem:(L,_=!1)=>{S(),g=L,_&&D()},markThisOpenedByKeyBoard:()=>{F=!0},isOpenedByKeyBoardFlag:()=>F?(F=!1,!0):!1,isMenuItemDataCollectedFlag:()=>H,getElement:()=>$.value||null,getParentContext:()=>i,getSubMenuInstanceContext:()=>Y};ve("menuContext",U);const Z={getChildItem:L=>h[L],getMenuDimensions:()=>v.value?{width:v.value.offsetWidth,height:v.value.offsetHeight}:{width:0,height:0},getSubmenuRoot:()=>v.value,getMenu:()=>$.value,getScrollValue:()=>{var L,_;return((_=(L=b.value)==null?void 0:L.getScrollContainer())==null?void 0:_.scrollTop)||0},setScrollValue:L=>{var _;return(_=b.value)==null?void 0:_.scrollTo(0,L)},getScrollHeight:()=>ie.value,adjustPosition:()=>{Ae()},getMaxHeight:()=>we.value,getPosition:()=>te.value,setPosition:(L,_)=>{te.value.x=L,te.value.y=_}},q=re("menuItemInstance",void 0);q&&(q.getSubMenuInstance=()=>Z);const ie=T(0),we=T(0),ke=T(!1),te=T({x:0,y:0});function Ae(){ge(()=>{var L;const _=$.value,B=v.value;if(_&&B&&b.value){const{container:d}=i,O=p?.()??0,M=f?.()??0,N=getComputedStyle(B),j=parseFloat(N.paddingLeft),ne=parseFloat(N.paddingTop),V=M>0?ne:0,W=document.documentElement.scrollHeight/x(),ae=document.documentElement.scrollWidth/x(),Be=Math.min(ae,d.offsetWidth),pe=Math.min(W,d.offsetHeight);let Bt=gt(_,d),Ft=vt(_,d);if(o.direction.includes("l")?te.value.x-=_.offsetWidth+j:o.direction.includes("r")?te.value.x+=O+j:(te.value.x+=O/2,te.value.x-=(_.offsetWidth+j)/2),o.direction.includes("t")){const at=(L=o.parentMenuItemContext)==null?void 0:L.getElement();at&&(te.value.y+=at.offsetHeight),te.value.y-=(_.offsetHeight+ne)/x()}else o.direction.includes("b")?te.value.y-=ne/x():te.value.y-=_.offsetHeight/2/x();ge(()=>{var at,kn;Bt=gt(_,d),Ft=vt(_,d);const bn=((kn=(at=b.value)==null?void 0:at.getScrollContainer())==null?void 0:kn.scrollHeight)||0,Jo=o.maxHeight;ie.value=o.maxHeight?Math.min(bn,o.maxHeight):bn;const Yo=Bt+_.offsetWidth-Be,Cn=Ft+ie.value+V*2-pe;if(ke.value=Cn>0,R.value&&Yo>0){const it=O+_.offsetWidth-j,ct=Bt;it>ct?te.value.x-=ct:te.value.x-=it}if(ke.value){if(R.value){const it=Cn,ct=Ft;it>ct?te.value.y-=ct-V:te.value.y-=it-V}we.value=pe-(te.value.y+ne)}else we.value=Jo||0})}})}function Me(){var L;const _=(L=o.parentMenuItemContext)==null?void 0:L.getElement();if(_){const B=gt(_,i.container),d=vt(_,i.container);te.value.x=B,te.value.y=d}else{const[B,d]=i.getPositon();te.value.x=B,te.value.y=d}ge(()=>{var B;k(Y),(B=$.value)==null||B.focus({preventScroll:!0}),i.isOpenedByKeyBoardFlag()&&ge(()=>A(!0)),H=!0}),Ae()}return ze(()=>o.show,L=>{L&&Me()}),be(()=>{r.value=!0,o.show?Me():Ae()}),$t(()=>{r.value=!1,q&&(q.getSubMenuInstance=()=>{})}),t(Z),(L,_)=>{const B=io("ContextSubMenu",!0);return r.value?(I(),ee(cn,{key:0,to:`#${w(l)}`},[z(as,Jt({appear:""},w(a).menuTransitionProps||{duration:10},{onAfterLeave:_[0]||(_[0]=d=>s("closeAnimFinished"))}),{default:Re(()=>[e.show?(I(),P("div",Jt({key:0,ref_key:"submenuRoot",ref:v},L.$attrs,{class:["mx-context-menu",w(a).customClass?w(a).customClass:"",w(a).theme??""],style:{maxWidth:e.maxWidth?w(Vn)(e.maxWidth):`${w(Ee).defaultMaxWidth}px`,minWidth:e.minWidth?w(Vn)(e.minWidth):`${w(Ee).defaultMinWidth}px`,zIndex:w(u),left:`${te.value.x}px`,top:`${te.value.y}px`},"data-type":"ContextSubMenu",onClick:J}),[z(w(hl),{ref_key:"scrollRectRef",ref:b,scroll:"vertical",maxHeight:we.value,containerClass:"mx-context-menu-scroll"},{default:Re(()=>[E("div",{class:me(["mx-context-menu-items"]),ref_key:"menu",ref:$},[ue(L.$slots,"default",{},()=>[(I(!0),P(fe,null,rt(e.items,(d,O)=>(I(),P(fe,{key:O},[d.hidden!==!0&&d.divided==="up"?(I(),ee(yt,{key:0})):G("",!0),d.hidden!==!0&&d.divided==="self"?(I(),ee(yt,{key:1})):(I(),ee(gn,{key:2,clickHandler:d.onClick?M=>d.onClick(M):void 0,disabled:typeof d.disabled=="object"?d.disabled.value:d.disabled,hidden:typeof d.hidden=="object"?d.hidden.value:d.hidden,icon:d.icon,iconFontClass:d.iconFontClass,svgIcon:d.svgIcon,svgProps:d.svgProps,label:d.label,customRender:d.customRender,customClass:d.customClass,checked:typeof d.checked=="object"?d.checked.value:d.checked,shortcut:d.shortcut,clickClose:d.clickClose,clickableWhenHasChildren:d.clickableWhenHasChildren,preserveIconWidth:d.preserveIconWidth!==void 0?d.preserveIconWidth:w(a).preserveIconWidth,showRightArrow:d.children&&d.children.length>0,hasChildren:d.children&&d.children.length>0,rawMenuItem:d,onSubMenuOpen:M=>{var N;return(N=d.onSubMenuOpen)==null?void 0:N.call(d,M)},onSubMenuClose:M=>{var N;return(N=d.onSubMenuClose)==null?void 0:N.call(d,M)}},ao({_:2},[d.children&&d.children.length>0?{name:"submenu",fn:Re(({context:M,show:N})=>[z(B,{show:N,parentMenuItemContext:M,items:d.children,maxWidth:d.maxWidth,minWidth:d.minWidth,maxHeight:d.maxHeight,adjustPosition:d.adjustSubMenuPosition!==void 0?d.adjustSubMenuPosition:w(a).adjustPosition,direction:d.direction!==void 0?d.direction:w(a).direction},null,8,["show","parentMenuItemContext","items","maxWidth","minWidth","maxHeight","adjustPosition","direction"])]),key:"0"}:void 0]),1032,["clickHandler","disabled","hidden","icon","iconFontClass","svgIcon","svgProps","label","customRender","customClass","checked","shortcut","clickClose","clickableWhenHasChildren","preserveIconWidth","showRightArrow","hasChildren","rawMenuItem","onSubMenuOpen","onSubMenuClose"])),d.hidden!==!0&&(d.divided==="down"||d.divided===!0)?(I(),ee(yt,{key:3})):G("",!0)],64))),128))])],512)]),_:3},8,["maxHeight"])],16)):G("",!0)]),_:3},16)],8,["to"])):G("",!0)}}}),zo=X({__name:"ContextSubMenuWrapper",props:{options:{type:Object,default:null},show:{type:null,default:null},container:{type:Object,default:null},isFullScreenContainer:{type:Boolean,default:!0}},emits:["close","closeAnimFinished"],setup(e,{expose:t,emit:n}){const o=e,s=n,r=lo(),l=T(),{options:i,show:a,container:c}=Ve(o);be(()=>{a.value&&p()}),$t(()=>{b()}),ze(a,g=>{g?p():(jn(m),b())});const m={closeMenu:f,isClosed:x,getMenuRef:()=>l.value,getMenuDimensions:()=>{var g;return((g=l.value)==null?void 0:g.getMenuDimensions())??{width:0,height:0}}};let u=!1;function p(){R(),sl(m)}function f(g){u=!0,s("close",g),i.value.menuTransitionProps||s("closeAnimFinished"),jn(m)}function x(){return u}function R(){setTimeout(()=>{document.addEventListener("click",k,!0),document.addEventListener("contextmenu",k,!0),document.addEventListener("scroll",y,!0),!o.isFullScreenContainer&&c.value&&c.value.addEventListener("scroll",y,!0),i.value.keyboardControl!==!1&&document.addEventListener("keydown",$,!0)},50)}function b(){document.removeEventListener("contextmenu",k,!0),document.removeEventListener("click",k,!0),document.removeEventListener("scroll",y,!0),!o.isFullScreenContainer&&c.value&&c.value.removeEventListener("scroll",y,!0),i.value.keyboardControl!==!1&&document.removeEventListener("keydown",$,!0)}const v=T();ve("globalSetCurrentSubMenu",g=>v.value=g),ve("globalGetMenuHostId",c.value.id);function $(g){var C,S,A,D,J,Y,F,H,U,Z,q,ie,we;let ke=!0;switch(g.key){case"Escape":{((C=v.value)==null?void 0:C.isTopLevel())===!1?(S=v.value)==null||S.closeCurrentSubMenu():f();break}case"ArrowDown":(A=v.value)==null||A.moveCurrentItemDown();break;case"ArrowUp":(D=v.value)==null||D.moveCurrentItemUp();break;case"Home":(J=v.value)==null||J.moveCurrentItemFirst();break;case"End":(Y=v.value)==null||Y.moveCurrentItemLast();break;case"ArrowLeft":{(F=v.value)!=null&&F.closeSelfAndActiveParent()||(U=(H=i.value).onKeyFocusMoveLeft)==null||U.call(H);break}case"ArrowRight":(Z=v.value)!=null&&Z.openCurrentItemSubMenu()||(ie=(q=i.value).onKeyFocusMoveRight)==null||ie.call(q);break;case"Enter":(we=v.value)==null||we.triggerCurrentItemClick(g);break;default:ke=!1;break}ke&&v.value&&(g.stopPropagation(),g.preventDefault())}function y(g){i.value.closeWhenScroll!==!1&&h(g.target,null)}function k(g){h(g.target,g)}function h(g,C){for(var S,A;g;){if(g.classList&&g.classList.contains("mx-context-menu"))return;g=g.parentNode}C?i.value.clickCloseOnOutside!==!1?(b(),f()):(A=(S=i.value).onClickOnOutside)==null||A.call(S,C):(b(),f())}return ve("globalOptions",i),ve("globalCloseMenu",f),ve("globalIsFullScreenContainer",o.isFullScreenContainer),ve("globalHasSlot",g=>r[g]!==void 0),ve("globalRenderSlot",(g,C)=>ue(r,g,{...C},()=>[tt("span","Render slot failed")],!1)),ve("menuContext",{zIndex:i.value.zIndex||Ee.defaultZindex,container:c.value,adjustPadding:{x:0,y:0},getZoom:()=>i.value.zoom||Ee.defaultZoom,getParentWidth:()=>0,getParentHeight:()=>0,getPositon:()=>[i.value.x,i.value.y],closeOtherSubMenuWithTimeOut:()=>{},checkCloseOtherSubMenuTimeOut:()=>!1,addOpenedSubMenu:()=>{},closeOtherSubMenu:()=>{},getParentContext:()=>null,getSubMenuInstanceContext:()=>null,getElement:()=>null,addChildMenuItem:()=>{},removeChildMenuItem:()=>{},markActiveMenuItem:()=>{},markThisOpenedByKeyBoard:()=>{},isOpenedByKeyBoardFlag:()=>!1,isMenuItemDataCollectedFlag:()=>!1}),t(m),(g,C)=>(I(),ee(yn,{ref_key:"submenuInstance",ref:l,show:w(a),items:w(i).items,adjustPosition:w(i).adjustPosition,maxWidth:w(i).maxWidth||w(Ee).defaultMaxWidth,minWidth:w(i).minWidth||w(Ee).defaultMinWidth,maxHeight:w(i).maxHeight,direction:w(i).direction||w(Ee).defaultDirection,onCloseAnimFinished:C[0]||(C[0]=S=>s("closeAnimFinished"))},{default:Re(()=>[ue(g.$slots,"default")]),_:3},8,["show","items","adjustPosition","maxWidth","minWidth","maxHeight","direction"]))}}),Ll=X({__name:"ContextMenu",props:{options:{type:Object,default:null},show:{type:Boolean,default:!1}},emits:["update:show","close"],setup(e,{expose:t,emit:n}){const o=n,s=e,{options:r,show:l}=Ve(s),{isNew:i,container:a,eleId:c}=Wo(r.value),m=T(null),u=lo();function p(f){var x,R;o("update:show",!1),o("close"),(R=(x=r.value).onClose)==null||R.call(x,f)}return t({closeMenu:()=>o("update:show",!1),isClosed:()=>!l.value,getMenuRef:()=>{var f;return(f=m.value)==null?void 0:f.getMenuRef()},getMenuDimensions:()=>{var f;return((f=m.value)==null?void 0:f.getMenuDimensions())??{width:0,height:0}}}),(f,x)=>(I(),ee(cn,{to:`#${w(c)}`},[z(zo,{ref_key:"menuRef",ref:m,options:w(r),show:w(l),container:w(a),isFullScreenContainer:!w(i),onClose:p},ao({_:2},[rt(w(u),(R,b)=>({name:b,fn:Re(v=>[ue(f.$slots,b,rs(ls(v)))])}))]),1032,["options","show","container","isFullScreenContainer"])],8,["to"]))}}),Tl=X({name:"ContextMenuGroup",props:{disabled:{type:Boolean,default:!1},hidden:{type:Boolean,default:!1},clickHandler:{type:Function,default:null},label:{type:String,default:""},icon:{type:String,default:""},iconFontClass:{type:String,default:"iconfont"},checked:{type:Boolean,default:!1},shortcut:{type:String,default:""},svgIcon:{type:String,default:""},svgProps:{type:Object,default:null},preserveIconWidth:{type:Boolean,default:!0},showRightArrow:{type:Boolean,default:!1},clickClose:{type:Boolean,default:!0},adjustSubMenuPosition:{type:Boolean,default:void 0},maxHeight:{type:[String,Number],default:0},maxWidth:{type:[String,Number],default:0},minWidth:{type:[String,Number],default:0}},setup(e,t){const n=re("globalOptions"),{adjustSubMenuPosition:o,maxWidth:s,minWidth:r,maxHeight:l}=Ve(e),i=typeof o.value<"u"?o.value:n.value.adjustPosition,a=T(),c=T();return t.expose({getSubMenuRef:()=>a.value,getMenuItemRef:()=>c.value}),()=>tt(gn,{...e,ref:c,showRightArrow:!0,maxWidth:void 0,minWidth:void 0,maxHeight:void 0,adjustSubMenuPosition:void 0,hasChildren:typeof t.slots.default!==void 0},t.slots.default?{submenu:m=>tt(yn,{ref:a,show:m.show,maxWidth:s.value,minWidth:r.value,maxHeight:l.value,adjustPosition:i,parentMenuItemContext:m.context},{default:t.slots.default}),...cl(t.slots,"default")}:t.slots)}});function Bl(e,t,n,o){const s=T(!0),r=tt(zo,{options:e,show:s,container:t,isFullScreenContainer:!n,onCloseAnimFinished:()=>{Sn(null,t)},onClose:l=>{var i;(i=e.onClose)==null||i.call(e,l),s.value=!1}},o);return Sn(r,t),r.component}function Xn(e,t){const n=Wo(e);return Bl(e,n.container,n.isNew,t).exposed}const Lt={install(e){e.config.globalProperties.$contextmenu=Xn,e.component("ContextMenu",Ll),e.component("ContextMenuItem",gn),e.component("ContextMenuGroup",Tl),e.component("ContextMenuSperator",yt),e.component("ContextMenuSeparator",yt),e.component("ContextSubMenu",yn)},showContextMenu(e,t){return Xn(e,t)},isAnyContextMenuOpen(){return ol()},closeContextMenu:Ho,transformMenuPosition:rl},Fl={key:0,class:"empty-container"},Hl={key:0},Wl={key:1},zl={key:2},Ul={key:3},jl={key:4},Vl={key:5},ql=X({__name:"EmptyFolder",props:{path:{},documents:{}},setup(e){const t=is,n=se(),o=e;return(s,r)=>!o.path||e.documents.length===0?(I(),P("div",Fl,[(I(),ee(an(w(t)),{class:me(["cog",{stopped:w(n).dialog==="accessdenied"||w(n).authInProgress}])},null,8,["class"])),w(n).dialog==="accessdenied"?(I(),P("p",Hl,"Access Denied")):w(n).connected?w(n).document.length===0?(I(),P("p",zl,"Waiting for File List")):w(n).query?(I(),P("p",Ul,"No matches!")):w(Fo)(o.path)?(I(),P("p",Vl,"Empty folder")):(I(),P("p",jl,"Folder not found")):(I(),P("p",Wl,"No Connection"))])):G("",!0)}}),Gl=ye(ql,[["__scopeId","data-v-0494c508"]]),Kl=["checked"],Jl=X({__name:"SelectBox",props:{doc:{}},setup(e){const t=se();return(n,o)=>(I(),P("input",{type:"checkbox",tabindex:"-1",checked:w(t).selected.has(e.doc.key),onClick:o[0]||(o[0]=de(()=>{},["stop"])),onChange:o[1]||(o[1]=s=>{s.target.checked?w(t).selected.add(e.doc.key):w(t).selected.delete(e.doc.key)})},null,40,Kl))}}),rn=X({__name:"FileRenameInput",props:{doc:{},rename:{type:Function},exit:{type:Function}},setup(e){const t=T(null),n=T("");be(()=>{n.value=o.doc.name;const r=n.value.lastIndexOf(".");ge(()=>{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)=>kt((I(),P("input",{ref_key:"input",ref:t,id:"FileRenameInput",type:"text",autocorrect:"off","onUpdate:modelValue":l[0]||(l[0]=i=>n.value=i),onBlur:l[1]||(l[1]=(...i)=>e.exit&&e.exit(...i)),onKeyup:[l[2]||(l[2]=Qe((...i)=>e.exit&&e.exit(...i),["esc"])),Qe(s,["enter"])]},null,544)),[[Yt,n.value]])}}),Yl=["src"],Xl=["src"],Zl={key:2,class:"folder icon"},Ql={key:3,class:"video-container"},ea=["src","poster"],ta={class:"play-overlay"},na={key:4,class:"audio icon"},oa=["src"],sa={key:5,class:"archive icon"},ra=X({__name:"MediaPreview",props:{doc:{},quality:{}},setup(e,{expose:t}){const n=T(null),o=T(null),s=K(()=>n.value||o.value),r=K(()=>`${l.doc.previewurl}?${l.quality}&t=${l.doc.mtime}`),l=e,i=()=>{s.value&&(s.value.controls=!0,s.value.setAttribute("data-playing",""))},a=()=>{s.value&&(s.value.controls=!1,s.value.removeAttribute("data-playing"))};let c=null;const m=()=>{if(!s.value)return;s.value.load();const R=Array.from(document.querySelectorAll("video, audio"));if(R.length===0)return;let b=null;for(const v in R)if(R[v]===(c||s.value)){b=R[+v+1]??R[0]??null;break}if(b)if(b.tagName==="VIDEO"&&document.fullscreenElement===s.value){const v=s.value,$=b;if(v===$){$.play();return}c||v.addEventListener("fullscreenchange",y=>{c&&(c.currentTime=v.currentTime,c.click(),v.paused||c.play(),c=null,v.src=l.doc.url,v.poster=r.value,a())},{once:!0}),c=$,v.src=$.src,v.poster="",v.play()}else document.exitFullscreen(),b.click()};t({play(){if(!s.value)return!1;if(s.value.paused){s.value.play();for(const R of Array.from(document.querySelectorAll("video, audio")))R!==s.value&&R.pause()}else s.value.pause();return!0},media:s});const u=()=>["mkv","mp4","webm","mov","avi"].includes(l.doc.ext),p=()=>["mp3","flac","ogg","aac"].includes(l.doc.ext),f=()=>["zip","tar","gz","bz2","xz","7z","rar"].includes(l.doc.ext),x=()=>["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(R,b)=>x()?(I(),P("img",{key:0,src:`${e.doc.previewurl}?${e.quality}&t=${e.doc.mtime}`,alt:""},null,8,Yl)):e.doc.img?(I(),P("img",{key:1,src:e.doc.url,alt:""},null,8,Xl)):e.doc.dir?(I(),P("span",Zl)):u()?(I(),P("div",Ql,[E("video",{ref_key:"vid",ref:o,src:e.doc.url,poster:r.value,preload:"none",onPlay:i,onPause:a,onEnded:m,onSeeking:b[0]||(b[0]=v=>s.value.play())},null,40,ea),E("div",ta,[z(w(cs))])])):p()?(I(),P("div",na,[E("audio",{ref_key:"aud",ref:n,src:e.doc.url,class:"icon",preload:"none",onPlay:i,onPause:a,onEnded:m,onSeeking:b[1]||(b[1]=v=>s.value.play())},null,40,oa)])):f()?(I(),P("span",sa)):(I(),P("span",{key:6,class:me(["file icon",`ext-${e.doc.ext}`])},null,2))}}),la=ye(ra,[["__scopeId","data-v-47490c5c"]]);let Gt=!1,Ge=null,Kt=!1;const aa=X({__name:"CursorTooltip",props:{text:{},delay:{}},setup(e,{expose:t}){const n=e,o=T(!1),s=T(0),r=T(0);let l=null,i=0,a=0;const c=8,m=K(()=>({left:`${s.value}px`,top:`${r.value}px`})),u=()=>window.matchMedia("(pointer: fine)").matches,p=()=>{o.value=!0,Gt=!0},f=()=>{l&&clearTimeout(l),Ge&&(clearTimeout(Ge),Ge=null);const v=Gt?0:n.delay??900;l=setTimeout(p,v)};return t({startHover:v=>{!u()&&!Kt||(s.value=v.clientX,r.value=v.clientY,i=v.clientX,a=v.clientY)},updatePosition:v=>{if((v.movementX!==0||v.movementY!==0)&&(Kt=!0),!u()&&!Kt||(s.value=v.clientX,r.value=v.clientY,o.value))return;const $=v.clientX-i,y=v.clientY-a;Math.sqrt($*$+y*y)>c&&(i=v.clientX,a=v.clientY,l&&(clearTimeout(l),l=null)),l||f()},endHover:()=>{l&&(clearTimeout(l),l=null),o.value=!1,Ge&&clearTimeout(Ge),Ge=setTimeout(()=>{Gt=!1},400)}}),(v,$)=>(I(),ee(cn,{to:"body"},[o.value?(I(),P("div",{key:0,class:"cursor-tooltip",style:Je(m.value)},[ue(v.$slots,"default",{},void 0,!0)],4)):G("",!0)]))}}),Uo=ye(aa,[["__scopeId","data-v-c5d421fc"]]),ia=["id","href"],ca={class:"tooltip-name"},ua={class:"tooltip-details"},da=X({__name:"GalleryFigure",props:{doc:{},editing:{}},setup(e){const t=se(),n=e,o=T(null),s=T(null),r=K(()=>n.doc.key),l=i=>{o.value.play()&&i.preventDefault(),t.cursor=n.doc.key};return(i,a)=>{const c=rn,m=Jl;return I(),P("a",{id:`file-${e.doc.key}`,href:e.doc.url,tabindex:"-1",class:me({file:!e.doc.dir,folder:e.doc.dir,cursor:w(t).cursor===e.doc.key}),onContextmenu:a[3]||(a[3]=de(()=>{},["stop"])),onFocus:a[4]||(a[4]=de(u=>w(t).cursor=e.doc.key,["stop"])),onClick:l,onMouseenter:a[5]||(a[5]=(...u)=>s.value?.startHover&&s.value?.startHover(...u)),onMousemove:a[6]||(a[6]=(...u)=>s.value?.updatePosition&&s.value?.updatePosition(...u)),onMouseleave:a[7]||(a[7]=(...u)=>s.value?.endHover&&s.value?.endHover(...u))},[E("figure",null,[ue(i.$slots,"default",{},void 0,!0),z(la,{ref_key:"m",ref:o,doc:e.doc,tabindex:"-1",quality:"sz=512",class:"figcontent"},null,8,["doc"]),a[9]||(a[9]=E("div",{class:"titlespacer"},null,-1)),E("figcaption",{onClick:a[1]||(a[1]=de(()=>{},["prevent"])),onContextmenu:a[2]||(a[2]=de(u=>i.$emit("menu",u),["prevent"]))},[e.editing?(I(),ee(c,{key:0,doc:e.doc,rename:e.editing.rename,exit:e.editing.exit},null,8,["doc","rename","exit"])):(I(),P(fe,{key:1},[z(m,{doc:e.doc,onClick:a[0]||(a[0]=u=>w(t).cursor=e.doc.key)},null,8,["doc"]),E("span",null,oe(e.doc.name),1),a[8]||(a[8]=E("div",{class:"namespacer"},null,-1))],64))],32)]),z(Uo,{ref_key:"tooltip",ref:s,text:r.value},{default:Re(()=>[E("div",ca,oe(e.doc.name),1),E("div",ua,oe(e.doc.modified)+" — "+oe(e.doc.sizedisp),1)]),_:1},8,["text"])],42,ia)}}}),fa=ye(da,[["__scopeId","data-v-91479c1d"]]),pa=X({__name:"Gallery",props:{path:{},documents:{}},setup(e,{expose:t}){const n=e,o=se(),s=un(),r=ln(null),l=()=>{r.value=null},i=(h,g)=>{const C=h.name,S=Ue(Ct,{message(A){const D=JSON.parse(A.data);"error"in D?(console.error("Rename failed",D.error.message,D.error),h.name=C):console.log("Rename succeeded",D)}});S.onopen=()=>{S.send(JSON.stringify({op:"rename",path:`${h.loc}/${C}`,to:g}))},h.name=g},a=T(),c=T(1),m=()=>{a.value&&(c.value=getComputedStyle(a.value).gridTemplateColumns.split(" ").length)},u=K(()=>c.value);t({newFolder(){const h=Math.floor(Date.now()/1e3);r.value=new fn({loc:y.value,key:"new",name:"New Folder",dir:!0,mtime:h,size:0}),o.cursor=r.value.key},toggleSelectAll(){console.log("Select"),$.value=!$.value},toggleSortColumn(h){const g=["","name","modified","size",""][h];g&&o.toggleSort(g)},isCursor(){return o.cursor&&r.value===null},cursorRename(){r.value=n.documents.find(h=>h.key===o.cursor)??null},cursorSelect(){const h=o.cursor;h&&(o.selected.has(h)?o.selected.delete(h):o.selected.add(h),this.cursorMove(1,null))},up(h){this.cursorMove(-u.value,h)},down(h){this.cursorMove(u.value,h)},left(h){this.cursorMove(-1,h)},right(h){this.cursorMove(1,h)},cursorMove(h,g){const C=!!g?.shiftKey,S=n.documents;if(S.length===0){o.cursor="";return}const A=S.length,D=(U,Z)=>(U%Z+Z)%Z,J=(U,Z)=>D(U+Z,A+1),Y=o.cursor?S.findIndex(U=>U.key===o.cursor):A;if(g&&Y===0&&g.key==="ArrowLeft"||g&&Y===A-1&&g.key==="ArrowRight")return;let F;Y===A?F=h>0?0:A-1:(F=J(Y,h),(Math.abs(h)>=A||Math.sign(h)!==Math.sign(F-Y))&&(F=A)),o.cursor=S[F]?.key??"";const H=o.cursor?document.getElementById(`file-${o.cursor}`):"";if(C){let[U,Z]=h>0?[Y,F]:[F,Y];for(let q=U;q!==Z;q=J(q,1)){if(q===A)continue;const ie=S[q].key;o.selected.has(ie)?o.selected.delete(ie):o.selected.add(ie)}}x=H,f||(f=setTimeout(()=>{x&&x.scrollIntoView({block:"center",behavior:"smooth"}),f=null},300)),F===A&&p()}});const p=()=>{const h=document.querySelector(".breadcrumb");h&&h.focus()};let f=null,x=null;Ie(()=>{if(o.cursor&&o.cursor!==r.value?.key&&(r.value=null),r.value&&(o.cursor=r.value.key),o.cursor){const h=document.querySelector(`#file-${o.cursor}`);h&&(h.focus(),h.scrollIntoView({block:"center",behavior:"smooth"}))}}),Ie(()=>{!n.documents.length&&o.cursor&&(o.cursor="",p())});let R=null;be(()=>{const h=document.querySelector(".cursor");h&&(h.scrollIntoView({block:"center",behavior:"instant"}),h.focus()),m(),a.value&&(R=new ResizeObserver(m),R.observe(a.value))}),wt(()=>{R?.disconnect()});const b=(h,g)=>{const C=Ue(Ct,{open(){C.send(JSON.stringify({op:"mkdir",path:`${h.loc}/${g}`}))},message(S){const A=JSON.parse(S.data);"error"in A?(console.error("Mkdir failed",A.error.message,A.error),r.value=null):(console.log("mkdir",A),s.push(h.urlrouter))}});h.name=g,h.key=crypto.randomUUID()},v=h=>{const g=n.documents,C=g[h].loc;return h===0?C!==y.value:C!==g[h-1].loc},$=K({get:()=>n.documents.length>0&&n.documents.every(h=>o.selected.has(h.key)),set:h=>{console.log("Setting allSelected",h);for(const g of n.documents)h?o.selected.add(g.key):o.selected.delete(g.key)}}),y=K(()=>n.path.join("/")),k=(h,g)=>{o.cursor=g.key,Lt.showContextMenu({x:h.x,y:h.y,items:[{label:"Rename",onClick:()=>{r.value=g}}]})};return(h,g)=>{const C=fa,S=hn;return n.documents.length||r.value?(I(),P("div",{key:0,class:"gallery",ref_key:"gallery",ref:a},[r.value?.key==="new"?(I(),ee(C,{doc:r.value,key:r.value.key,editing:{rename:b,exit:l}},null,8,["doc","editing"])):G("",!0),(I(!0),P(fe,null,rt(e.documents,(A,D)=>(I(),P(fe,{key:A.key},[v(D)?(I(),ee(S,{key:0,path:A.loc?A.loc.split("/"):[],class:"folder-indicator"},null,8,["path"])):G("",!0),z(C,{doc:A,editing:r.value===A?{rename:i,exit:l}:null,onMenu:J=>k(J,A),class:me({"folder-start":v(D)})},null,8,["doc","editing","onMenu","class"])],64))),128))],512)):G("",!0)}}}),ma=ye(pa,[["__scopeId","data-v-9973e293"]]),ha=X({__name:"FileSize",props:{doc:{}},setup(e){const t=K(()=>{const o=n.doc.sizedisp.split(" ").slice(-1)[0];return+o?"bytes":o}),n=e;return(o,s)=>(I(),P("td",{class:me(["size right",t.value])},oe(e.doc.sizedisp),3))}}),va=ye(ha,[["__scopeId","data-v-444c7802"]]),ga={class:"modified right"},ya=["datetime"],wa=X({__name:"FileModified",props:{doc:{},now:{}},setup(e){const t=e,n=T(null),o=K(()=>(t.now,Mo(t.doc.mtime))),s=K(()=>new Date(1e3*t.doc.mtime).toISOString().replace(".000Z","Z")),r=K(()=>s.value.replace("T"," ").replace("Z"," UTC"));return(l,i)=>(I(),P("td",ga,[E("time",{datetime:s.value,onMouseenter:i[0]||(i[0]=(...a)=>n.value?.startHover&&n.value?.startHover(...a)),onMousemove:i[1]||(i[1]=(...a)=>n.value?.updatePosition&&n.value?.updatePosition(...a)),onMouseleave:i[2]||(i[2]=(...a)=>n.value?.endHover&&n.value?.endHover(...a))},oe(o.value),41,ya),z(Uo,{ref_key:"tooltip",ref:n,text:r.value},{default:Re(()=>[He(oe(r.value),1)]),_:1},8,["text"])]))}}),ka={key:0},ba={class:"selection"},Ca=["indeterminate"],Sa={key:0,class:"folder"},xa={class:"name"},_a={key:0,class:"folder-change"},Ea={colspan:"5"},Ra=["id","onClick","onContextmenu"],Ia=["onClick"],Aa=["checked","onChange"],$a={class:"name"},Ma=["href","onFocus"],Pa=["onClick"],Oa={class:"menu"},Na=["onClick"],Da={key:1,class:"summary"},La={colspan:"3",class:"right"},Ta={class:"size right"},Ba=X({__name:"FileExplorer",props:{path:{},documents:{}},setup(e,{expose:t}){const n=e,o=se(),s=un(),r=ln(null),l=(y,k)=>{const h=y.name,g=Ue(Ct,{message(C){const S=JSON.parse(C.data);"error"in S?(console.error("Rename failed",S.error.message,S.error),y.name=h):console.log("Rename succeeded",S)}});g.onopen=()=>{g.send(JSON.stringify({op:"rename",path:`${y.loc}/${h}`,to:k}))},y.name=k};t({newFolder(){console.log("New folder");const y=Math.floor(Date.now()/1e3);r.value=new fn({loc:v.value,key:"new",name:"New Folder",dir:!0,mtime:y,size:0}),o.cursor=r.value.key},toggleSelectAll(){console.log("Select"),b.value=!b.value},isCursor(){return o.cursor&&r.value===null},cursorRename(){r.value=n.documents.find(y=>y.key===o.cursor)??null},cursorSelect(){const y=o.cursor;y&&(o.selected.has(y)?o.selected.delete(y):o.selected.add(y),this.cursorMove(1,null))},up(y){this.cursorMove(-1,y)},down(y){this.cursorMove(1,y)},left(y){s.back()},right(y){const k=document.querySelector(`#file-${o.cursor} a`);k&&k.click()},cursorMove(y,k){const h=!!k?.shiftKey,g=n.documents;if(g.length===0){o.cursor="";return}const C=g.length,S=(F,H)=>(F%H+H)%H,A=(F,H)=>S(F+H,C+1),D=o.cursor?g.findIndex(F=>F.key===o.cursor):g.length,J=A(D,y);o.cursor=g[J]?.key??"";const Y=o.cursor?document.getElementById(`file-${o.cursor}`):"";if(h){let[F,H]=y>0?[D,J]:[J,D];for(let U=F;U!==H;U=A(U,1)){if(U===C)continue;const Z=g[U].key;o.selected.has(Z)?o.selected.delete(Z):o.selected.add(Z)}}c=Y,a||(a=setTimeout(()=>{c&&c.scrollIntoView({block:"center",behavior:"smooth"}),a=null},300)),J===C&&i()}});const i=()=>{const y=document.querySelector(".breadcrumb");y&&y.focus()};let a=null,c=null;Ie(()=>{if(o.cursor&&o.cursor!==r.value?.key&&(r.value=null),r.value&&(o.cursor=r.value?.key),o.cursor){const y=document.querySelector(`#file-${o.cursor} .name a`);y&&y.focus()}}),Ie(()=>{!n.documents.length&&o.cursor&&(o.cursor="",i())});let m=T(0),u=null;const p=()=>{m.value=Math.floor(Date.now()/1e3)};be(()=>{p(),u=setInterval(p,1e3);const y=document.querySelector(".cursor");y&&(y.scrollIntoView({block:"center",behavior:"instant"}),y.focus())}),wt(()=>{clearInterval(u)});const f=(y,k)=>{const h=Ue(Ct,{open(){h.send(JSON.stringify({op:"mkdir",path:`${y.loc}/${k}`}))},message(g){const C=JSON.parse(g.data);"error"in C?(console.error("Mkdir failed",C.error.message,C.error),r.value=null):(console.log("mkdir",C),s.push(y.urlrouter))}});y.name=k,y.key=crypto.randomUUID()},x=y=>{const k=n.documents,h=k[y].loc;return y===0?h!==v.value:h!==k[y-1].loc},R=K({get:()=>n.documents.length>0&&n.documents.some(y=>o.selected.has(y.key))&&!b.value,set:y=>{}}),b=K({get:()=>n.documents.length>0&&n.documents.every(y=>o.selected.has(y.key)),set:y=>{console.log("Setting allSelected",y);for(const k of n.documents)y?o.selected.add(k.key):o.selected.delete(k.key)}}),v=K(()=>n.path.join("/")),$=(y,k)=>{o.cursor=k.key,Lt.showContextMenu({x:y.x,y:y.y,items:[{label:"Rename",onClick:()=>{r.value=k}}]})};return(y,k)=>{const h=wa,g=va,C=hn;return n.documents.length||r.value?(I(),P("table",ka,[E("thead",null,[E("tr",null,[E("th",ba,[kt(E("input",{type:"checkbox",tabindex:"-1","onUpdate:modelValue":k[0]||(k[0]=S=>b.value=S),indeterminate:R.value},null,8,Ca),[[co,b.value]])]),E("th",{class:me(["sortcolumn",{sortactive:w(o).sortOrder==="name"}]),onClick:k[1]||(k[1]=S=>w(o).toggleSort("name"))},"Name",2),E("th",{class:me(["sortcolumn modified right",{sortactive:w(o).sortOrder==="modified"}]),onClick:k[2]||(k[2]=S=>w(o).toggleSort("modified"))},"Modified",2),E("th",{class:me(["sortcolumn size right",{sortactive:w(o).sortOrder==="size"}]),onClick:k[3]||(k[3]=S=>w(o).toggleSort("size"))},"Size",2),k[5]||(k[5]=E("th",{class:"menu"},null,-1))])]),E("tbody",null,[r.value?.key==="new"?(I(),P("tr",Sa,[k[6]||(k[6]=E("td",{class:"selection"},null,-1)),E("td",xa,[z(rn,{doc:r.value,rename:f,exit:()=>{r.value=null}},null,8,["doc","exit"])]),z(h,{doc:r.value,now:w(m)},null,8,["doc","now"]),z(g,{doc:r.value},null,8,["doc"]),k[7]||(k[7]=E("td",{class:"menu"},null,-1))])):G("",!0),(I(!0),P(fe,null,rt(e.documents,(S,A)=>(I(),P(fe,{key:S.key},[x(A)?(I(),P("tr",_a,[E("th",Ea,[z(C,{path:S.loc?S.loc.split("/"):[]},null,8,["path"])])])):G("",!0),E("tr",{id:`file-${S.key}`,class:me({file:!S.dir,folder:S.dir,cursor:w(o).cursor===S.key}),onClick:D=>w(o).cursor=w(o).cursor===S.key?"":S.key,onContextmenu:de(D=>$(D,S),["prevent"])},[E("td",{class:"selection",onClick:de(D=>w(o).cursor=w(o).cursor===S.key?S.key:"",["stop"])},[E("input",{type:"checkbox",tabindex:"-1",checked:w(o).selected.has(S.key),onChange:D=>D.target.checked?w(o).selected.add(S.key):w(o).selected.delete(S.key)},null,40,Aa)],8,Ia),E("td",$a,[r.value===S?(I(),ee(rn,{key:0,doc:S,rename:l,exit:()=>{r.value=null}},null,8,["doc","exit"])):(I(),P(fe,{key:1},[E("a",{href:S.url,tabindex:"-1",onContextmenu:k[4]||(k[4]=de(()=>{},["stop"])),onFocus:de(D=>w(o).cursor=S.key,["stop"])},oe(S.name),41,Ma),w(o).cursor==S.key?(I(),P("button",{key:0,tabindex:"-1",class:"rename-button",onClick:()=>r.value=S},"🖊️",8,Pa)):G("",!0)],64))]),z(h,{doc:S,now:w(m)},null,8,["doc","now"]),z(g,{doc:S},null,8,["doc"]),E("td",Oa,[E("button",{tabindex:"-1",onClick:de(D=>$(D,S),["stop"])},"⋮",8,Na)])],42,Ra)],64))),128)),n.documents.length>1?(I(),P("tr",Da,[E("td",La,oe(n.documents.length)+" items",1),E("td",Ta,oe(w($o)(n.documents.reduce((S,A)=>S+A.size,0))),1),k[8]||(k[8]=E("td",{class:"menu"},null,-1))])):G("",!0)])])):G("",!0)}}}),Fa=ye(Ba,[["__scopeId","data-v-c61c7c3a"]]),Ha=X({__name:"ExplorerView",props:{path:{},query:{}},setup(e){const t=se(),n=T(),o=e,s=K(()=>{const r=o.path.join("/"),l=o.query;if(!l)return Bo(t.document.filter(p=>p.loc===r),t.prefs.sortListing);const i=Pr(l);let a=100,c=[];for(const p of t.recentDocuments)if(Or(p.haystack,i)&&(c.push(p),--a===0))break;const m=r+"/",u=t.prefs.sortFiltered;return u?Xr(c,u):(c.sort((p,f)=>(f.loc===r)-(p.loc===r)||(f.loc.slice(0,m.length)===m)-(p.loc.slice(0,m.length)===m)||st.compare(p.loc,f.loc)||(p.type==="file")-(f.type==="file")||f.name.includes(l)-p.name.includes(l)||st.compare(p.name,f.name)),c)});return Ie(()=>{t.fileExplorer=n.value,t.query=o.query}),ze([()=>o.path.join("/"),()=>t.document.length],([r,l],[i,a])=>{r===i&&a!==void 0&&a>0||(t.prefs.gallery=s.value.some(c=>c.previewable))},{immediate:!0}),(r,l)=>{const i=ma,a=Gl;return I(),P(fe,null,[w(t).prefs.gallery?(I(),ee(i,{ref_key:"fileExplorer",ref:n,key:`gallery-${w(je).currentRoute.value.path}`,path:o.path,documents:s.value},null,8,["path","documents"])):(I(),ee(Fa,{ref_key:"fileExplorer",ref:n,key:`explorer-${w(je).currentRoute.value.path}`,path:o.path,documents:s.value},null,8,["path","documents"])),z(a,{documents:s.value,path:o.path},null,8,["documents","path"])],64)}}}),Wa=ye(Ha,[["__scopeId","data-v-f7875394"]]),je=$r({history:cr("/"),routes:[{path:"/:pathMatch(.*)*",name:"explorer",component:Wa}]}),za={class:"headermain buttons"},Ua=["value"],ja=X({__name:"HeaderMain",props:{path:{},query:{}},setup(e,{expose:t}){const n=se(),o=nl(),s=T(!1),r=T(),l=T(),i=e,a=p=>{if(!s.value)return;s.value=!1,document.querySelector(".breadcrumb").focus(),c(p)},c=p=>{const f=p.target.value;let x=i.path.join("/");x=x?`/${x}`:"";const b=(f?`${x}//${f}`:x||"/").replaceAll("?","%3F").replaceAll("#","%23");!i.query&&f?je.push(b):je.replace(b)},m=p=>{if(s.value=!s.value,!s.value)return a(p);ge(()=>{const f=r.value;f&&f.focus()})};Ie(()=>{i.query&&(s.value=!0)});const u=p=>{const f=[];o.isExternalAuth&&n.user.isLoggedIn&&f.push({label:"👤 "+(n.user.username||"User Account"),onClick:()=>{window.location.href="/auth/"}}),!o.isExternalAuth&&n.user.isLoggedIn&&f.push({label:"🔑 Change Password",onClick:()=>{n.dialog="settings"}}),n.user.privileged&&f.push({label:"⚙️ Admin Settings",onClick:()=>{n.dialog="usermgmt"}}),n.user.isLoggedIn?f.push({label:"🚪 Logout",onClick:()=>n.logout()}):n.server.public&&f.push({label:"🔐 Login",onClick:async()=>{try{await mn("/auth/restricted#theme=light"),sn()}catch{console.log("Login cancelled")}}}),Lt.showContextMenu({x:p.target.getBoundingClientRect().right,y:p.target.getBoundingClientRect().bottom,items:f})};return t({toggleSearchInput:m,closeSearch:a}),(p,f)=>{const x=tl,R=Dt;return I(),P("nav",za,[z(x,{path:i.path},null,8,["path"]),z(R,{name:"create-folder","data-tooltip":"New folder",onClick:f[0]||(f[0]=()=>{console.log("New",w(n).fileExplorer),w(n).fileExplorer.newFolder(),console.log("Done")})}),ue(p.$slots,"default",{},void 0,!0),f[2]||(f[2]=E("div",{class:"spacer smallgap"},null,-1)),s.value?(I(),P("input",{key:0,ref_key:"search",ref:r,type:"search",value:e.query,onInput:c,placeholder:"Find files",class:"margin-input"},null,40,Ua)):G("",!0),z(R,{ref_key:"searchButton",ref:l,name:"find",onClick:de(m,["prevent"])},null,512),z(R,{name:"eye",onClick:f[1]||(f[1]=b=>w(n).prefs.gallery=!w(n).prefs.gallery)}),z(R,{name:"cog",onClick:u})])}}}),Va=ye(ja,[["__scopeId","data-v-b9ddc09f"]]);function _t(e){return typeof e=="object"&&e!==null&&"error"in e}class qa{async get(t){try{const n=await xt(t,{method:"GET"});if(_t(n))throw new Oe(n.error.code,n.error.message);return n}catch(n){throw n instanceof Ze?new Oe(401,"Authentication cancelled"):n}}async post(t,n){try{const o=await xt(t,{method:"POST",body:n});if(_t(o))throw new Oe(o.error.code,o.error.message);return o}catch(o){throw o instanceof Ze?new Oe(401,"Authentication cancelled"):o}}async put(t,n){try{const o=await xt(t,{method:"PUT",body:n});if(_t(o))throw new Oe(o.error.code,o.error.message);return o}catch(o){throw o instanceof Ze?new Oe(401,"Authentication cancelled"):o}}async delete(t){try{const n=await xt(t,{method:"DELETE"});if(_t(n))throw new Oe(n.error.code,n.error.message);return n}catch(n){throw n instanceof Ze?new Oe(401,"Authentication cancelled"):n}}}const lt=new qa;class Oe extends Error{code;constructor(t,n){super(n),this.code=t}}const Ga=X({__name:"DownloadButton",setup(e){const t=se(),n={total:0,xfer:0,t0:0,tlast:0,statbytes:0,statdur:0,files:[],filestart:0,fileidx:0,filecount:0,filename:"",filesize:0,filepos:0,status:"idle"};t.dprogress={...n},setInterval(()=>{Date.now()-t.dprogress.tlast>3e3?(t.dprogress.statbytes=0,t.dprogress.statdur=1):(t.dprogress.statbytes*=.9,t.dprogress.statdur*=.9)},100);const o=()=>{Object.assign(t.dprogress,n),t.dprogress.t0=Date.now(),t.dprogress.tlast=t.dprogress.t0+1},s=i=>{const a=document.createElement("a");a.href=i,a.download="",a.click()},r=async(i,a)=>{let c="",m=a;console.log("Downloading to filesystem",i.recursive);for(const[u,p,f]of i.recursive)f.dir||(t.dprogress.files.push(u),++t.dprogress.filecount,t.dprogress.total+=f.size);for(const[u,p,f]of i.recursive){c&&!u.startsWith(c+"/")&&(c="",m=a);const x=u.slice(c.length);for(const v of x.split("/").slice(0,f.dir?void 0:-1))if(v){c+=`${v}/`;try{m=await m.getDirectoryHandle(v.normalize("NFC"),{create:!0})}catch($){throw console.error("Failed to create directory",c,$),new Error(`Failed to create directory ${c}: ${$}`)}console.log("Created",c)}if(f.dir)continue;const R=u.split("/").pop().normalize("NFC");let b;try{b=await m.getFileHandle(R,{create:!0})}catch(v){throw console.error("Failed to create file",u,p,c+R,v),new Error(`Failed to create file ${c+R}: ${v}`)}try{const v=await b.createWritable(),$=`/files/${u}`;console.log("Fetching",$);const y=await Oo($);if(!y.ok)throw t.error=`Failed to download ${$}: ${y.status} ${y.statusText}`,new Error(`Failed to download ${$}: ${y.status} ${y.statusText}`);if(y.body){++t.dprogress.fileidx;const k=y.body.getReader();for(await v.truncate(0),t.error="Direct download.",t.dprogress.tlast=Date.now();;){const{value:h,done:g}=await k.read();if(g)break;await v.write(h);const C=Date.now(),S=h.byteLength;t.dprogress.xfer+=S,t.dprogress.filepos+=S,t.dprogress.statbytes+=S,t.dprogress.statdur+=C-t.dprogress.tlast,t.dprogress.tlast=C}}await v.close(),console.log("Saved",c+R)}catch(v){throw console.error("Failed to write file",c+R,v),new Error(`Failed to write file ${c+R}: ${v}`)}}o()},l=async()=>{const i=t.selectedFiles;if(console.log("Download",i),i.keys.length===0){console.warn("Attempted download but no files found. Missing selected keys:",i.missing),t.error="No existing files selected",t.selected.clear();return}const a=i.recursive.filter(([m,u,p])=>!p.dir);if(a.length===1)return t.selected.clear(),t.error="Single file via browser downloads",s(`/files/${a[0][1]}`);if("showDirectoryPicker"in window)try{const m=await window.showDirectoryPicker({startIn:"downloads",mode:"readwrite"});await r(i,m),t.selected.clear();return}catch(m){console.error("Download to folder aborted",m)}console.log("Falling back to zip download");const c=i.keys.length===1?i.docs[i.keys[0]].name:"download";s(`/zip/${Array.from(i.keys).join("+")}/${c}.zip`),t.error="Downloading as ZIP via browser downloads",t.selected.clear()};return(i,a)=>{const c=Dt;return I(),ee(c,{name:"download","data-tooltip":"Download",onClick:l})}}}),Ka={class:"select-text"},Ja=X({__name:"HeaderSelected",props:{path:Array},setup(e){const t=se(),n=e,o=K(()=>n.path.join("/")),s=(r,l)=>{const i=t.selectedFiles,a={op:r,sel:i.keys.map(m=>{const u=i.docs[m];return u.loc?`${u.loc}/${u.name}`:u.name})};l!==void 0&&(a.dst=l);const c=Ue(Ct,{message(m){const u=JSON.parse(m.data);if("error"in u){console.error("Control socket error",a,u.error),t.error=u.error.message;return}else if(u.status==="ack"){console.log("Control ack OK",u),c.close(),t.selected.clear();return}else console.log("Unknown control response",a,u)}});c.onopen=()=>{c.send(JSON.stringify(a))}};return(r,l)=>{const i=Ga,a=Dt;return w(t).selected.size?(I(),P(fe,{key:0},[l[4]||(l[4]=E("div",{class:"smallgap"},null,-1)),E("p",Ka,oe(w(t).selected.size)+" selected ➤",1),z(i),z(a,{name:"copy","data-tooltip":"Copy here",onClick:l[0]||(l[0]=c=>s("cp",o.value))}),z(a,{name:"paste","data-tooltip":"Move here",onClick:l[1]||(l[1]=c=>s("mv",o.value))}),z(a,{name:"trash","data-tooltip":"Delete ⚠️",onClick:l[2]||(l[2]=c=>s("rm"))}),E("button",{class:"action-button unselect","data-tooltip":"Unselect all",onClick:l[3]||(l[3]=c=>w(t).selected.clear())},"❌")],64)):G("",!0)}}}),Ya=["id"],Xa={key:0},Za={class:"modal-content"},jo=X({__name:"ModalDialog",props:{title:{},name:{}},setup(e,{expose:t}){const n=T(null),o=T(null),s=se(),r=()=>{s.dialog="",Po()},l=e;return t({show:()=>{s.dialog=l.name,pn(),ge(()=>{n.value?.focus();const a=o.value?.querySelector("input");a&&a.focus()})},close:r}),Ie(()=>{if(n.value){n.value.focus();const a=o.value?.querySelector("input");a&&a.focus()}}),(a,c)=>w(s).dialog===e.name?(I(),P("div",{key:0,class:"modal-overlay",onClick:de(r,["self"]),onKeydown:Qe(r,["escape"]),tabindex:"-1",ref_key:"overlay",ref:n},[E("div",{class:"modal-dialog",id:l.name,ref_key:"dialog",ref:o},[l.title?(I(),P("h1",Xa,oe(l.title),1)):G("",!0),E("div",Za,[ue(a.$slots,"default",{},()=>[c[0]||(c[0]=He(" Dialog with no content ",-1)),E("button",{onClick:r},"OK")])])],8,Ya)],544)):G("",!0)}}),Qa="/auth/password-change";async function ei(e,t,n){return await lt.post(Qa,{username:e,passwordChange:t,password:n})}const Tt="/auth/users";async function ti(){return await lt.get(Tt)}async function Zn(e,t,n){return await lt.post(Tt,{username:e,password:t,privileged:n})}async function Qn(e,t){return await lt.put(`${Tt}/${e}`,t)}async function eo(e){return await lt.delete(`${Tt}/${e}`)}async function ni(e){return await lt.put("/api/config/public",{public:e})}const oi={class:"form-grid"},si={class:"dialog-buttons"},ri=X({__name:"SettingsModal",setup(e){const t=T(!1),n=se(),o=T(),s=T(),r=et({passwordChange:"",password:""}),l=()=>{r.passwordChange="",r.password="",n.dialog=""},i=async a=>{a.preventDefault();try{if(r.passwordChange){if(!r.password){n.error="⚠️ Current password is required",s.value.focus();return}await ei(n.user.username,r.passwordChange,r.password)}l()}catch(c){const m=c;n.error=m.message||"🛑 Unknown error"}finally{t.value=!1}};return(a,c)=>{const m=jo;return I(),ee(m,{name:"settings",title:"Settings"},{default:Re(()=>[E("form",null,[w(n).user.isLoggedIn?(I(),P(fe,{key:0},[c[5]||(c[5]=E("h3",null,"Update your authentication",-1)),E("div",oi,[c[2]||(c[2]=E("label",{for:"passwordChange"},"New password:",-1)),kt(E("input",{ref_key:"passwordChange",ref:o,id:"passwordChange",type:"password",autocomplete:"new-password",spellcheck:"false",autocorrect:"off","onUpdate:modelValue":c[0]||(c[0]=u=>r.passwordChange=u)},null,512),[[Yt,r.passwordChange]]),c[3]||(c[3]=E("label",{for:"password"},"Current password:",-1)),kt(E("input",{ref_key:"password",ref:s,id:"password",name:"password",type:"password",autocomplete:"current-password",spellcheck:"false",autocorrect:"off","onUpdate:modelValue":c[1]||(c[1]=u=>r.password=u)},null,512),[[Yt,r.password]])]),E("div",si,[E("input",{id:"close",type:"reset",value:"Close",class:"button",onClick:l}),c[4]||(c[4]=E("div",{class:"spacer"},null,-1)),E("input",{id:"submit",type:"submit",value:"Submit",class:"button",onClick:de(i,["prevent"])})])],64)):(I(),P(fe,{key:1},[c[7]||(c[7]=E("p",null,"No settings are available because you have not logged in.",-1)),E("div",{class:"dialog-buttons"},[c[6]||(c[6]=E("div",{class:"spacer"},null,-1)),E("input",{id:"close",type:"reset",value:"Close",class:"button",onClick:l})])],64))])]),_:1})}}}),li=ye(ri,[["__scopeId","data-v-a4815627"]]),ai={key:0,class:"loading"},ii={key:1},ci={class:"form-row"},ui={for:"publicAccess"},di=["checked","onChange","disabled"],fi=["onClick"],pi=["onClick"],mi=["onClick","disabled"],hi=X({__name:"UserManagementModal",setup(e){const t=se(),n=T(!0),o=T([]),s=T(""),r=T("📋"),l=et({public:!1}),i=()=>{t.dialog="",s.value=""},a=async()=>{try{n.value=!0;const b=await ti();o.value=b.users}catch(b){const v=b;t.error=v.message||"Failed to load users"}finally{n.value=!1}},c=async()=>{const b=window.prompt("Enter username for new user:");if(!(!b||!b.trim()))try{s.value="";const v=await Zn(b.trim(),void 0,!1);await a(),v.password&&(s.value=`User ${b.trim()} created. Password: ${v.password}`)}catch(v){const $=v;t.error=$.message||"Failed to add user"}},m=async(b,v)=>{const $=v.target;try{await Qn(b.username,{privileged:$.checked}),b.privileged=$.checked}catch(y){const k=y;t.error=k.message||"Failed to update user",$.checked=b.privileged}},u=async b=>{const v=window.prompt("Enter new username:",b.username);if(!(!v||!v.trim()||v.trim()===b.username))try{s.value="";const $=await Zn(v.trim(),void 0,b.privileged);await eo(b.username),await a(),$.password&&(s.value=`User renamed to ${v.trim()}. New password: ${$.password}`)}catch($){const y=$;t.error=y.message||"Failed to rename user"}},p=async b=>{if(confirm(`Reset password for ${b.username}? A new password will be generated.`))try{s.value="";const v=await Qn(b.username,{password:""});v.password&&(s.value=`Password reset for ${b.username}. New password: ${v.password}`)}catch(v){const $=v;t.error=$.message||"Failed to reset password"}},f=async b=>{if(confirm(`Delete user ${b}?`))try{await eo(b),await a()}catch(v){const $=v;t.error=$.message||"Failed to delete user"}},x=async(b=!1)=>{const v=s.value.match(/(?:Password|New password): (.+)/);if(v)if(await navigator.clipboard.writeText(v[1]),b){r.value="✅ Copied!";const $=s.value.replace(/(?:Password|New password): .+/,"Password copied to clipboard!");s.value=$,setTimeout(()=>{s.value="",r.value="📋"},3e3)}else s.value=""},R=async()=>{try{s.value="",await ni(l.public),t.server.public=l.public,s.value="Server settings updated"}catch(b){const v=b;t.error=v.message||"Failed to update settings"}};return be(()=>{l.public=t.server.public||!1,n.value=!1}),ze(()=>t.dialog,b=>{b==="usermgmt"&&!t.server.paskia&&a()}),ze(()=>t.server.public,b=>{l.public=b||!1}),(b,v)=>{const $=jo;return I(),ee($,{name:"usermgmt",title:"Admin Settings"},{default:Re(()=>[n.value?(I(),P("div",ai,"Loading...")):(I(),P("div",ii,[v[8]||(v[8]=E("h3",null,"Server Settings",-1)),E("div",ci,[E("label",ui,[kt(E("input",{type:"checkbox",id:"publicAccess","onUpdate:modelValue":v[0]||(v[0]=y=>l.public=y),onChange:R},null,544),[[co,l.public]]),v[3]||(v[3]=He(" Public access (anyone can read and write) ",-1))])]),w(t).server.paskia?(I(),P(fe,{key:0},[v[4]||(v[4]=E("h3",null,"User Management",-1)),v[5]||(v[5]=E("p",null,[He("See "),E("a",{href:"/auth/admin/"},"Paskia Admin"),He(".")],-1))],64)):(I(),P(fe,{key:1},[v[7]||(v[7]=E("h3",null,"Users",-1)),E("button",{onClick:c,class:"button",title:"Add new user"},"➕ Add User"),s.value?(I(),P("div",{key:0,class:"success-message",onClick:v[2]||(v[2]=y=>x(!1))},[He(oe(s.value)+" ",1),s.value.includes("Password:")||s.value.includes("New password:")?(I(),P("button",{key:0,onClick:v[1]||(v[1]=de(y=>x(!0),["stop"])),class:"button small",title:"Copy to clipboard"},oe(r.value),1)):G("",!0)])):G("",!0),E("table",null,[v[6]||(v[6]=E("thead",null,[E("tr",null,[E("th",null,"Username"),E("th",null,"Admin"),E("th",null,"Actions")])],-1)),E("tbody",null,[(I(!0),P(fe,null,rt(o.value,y=>(I(),P("tr",{key:y.username},[E("td",null,oe(y.username),1),E("td",null,[E("input",{type:"checkbox",checked:y.privileged,onChange:k=>m(y,k),disabled:y.username===w(t).user.username},null,40,di)]),E("td",null,[E("button",{onClick:k=>u(y),class:"button small",title:"Rename user"},"✏️",8,fi),E("button",{onClick:k=>p(y),class:"button small",title:"Reset password"},"🔑",8,pi),E("button",{onClick:k=>f(y.username),class:"button small danger",disabled:y.username===w(t).user.username,title:"Delete user"},"🗑️",8,mi)])]))),128))])])],64)),E("div",{class:"dialog-buttons"},[E("button",{onClick:i,class:"button"},"Close")])]))]),_:1})}}}),vi=ye(hi,[["__scopeId","data-v-f58072c3"]]),gi={key:0,class:"modal-overlay"},yi=X({__name:"AccessDeniedModal",setup(e){const t=se(),n=()=>{location.reload()};return Ie(()=>{t.dialog==="accessdenied"&&pn()}),(o,s)=>w(t).dialog==="accessdenied"?(I(),P("div",gi,[E("div",{class:"modal-dialog",id:"accessdenied"},[E("div",{class:"modal-content access-denied"},[s[0]||(s[0]=E("p",{class:"icon"},"⛔",-1)),s[1]||(s[1]=E("p",{class:"message"},"Access Denied",-1)),E("button",{onClick:n,class:"button"},"Reload")])])])):G("",!0)}}),wi=ye(yi,[["__scopeId","data-v-eaaa3c09"]]),ki=X({__name:"App",setup(e){const t=se(),n=K(()=>{const l=decodeURIComponent(je.currentRoute.value.path).split("//"),i=(l[0]??"").split("/").filter(c=>c!==""),a=l.slice(1).join("//");return{path:l[0]??"",pathList:i,query:a}});Ie(()=>{document.title=n.value.path.replace(/\/$/,"").split("/").pop()||t.server.name||"Cista Storage"}),be(jr),be(Nt),wt(Vr);const o=T(null);let s=null;const r=l=>{if(t.dialog){s&&(clearTimeout(s),s=null);return}const i=t.fileExplorer;if(!i)return;const a=i.isCursor(),c=l.target.tagName==="INPUT",m=l.type==="keyup";if(l.repeat){(l.key==="ArrowUp"||l.key==="ArrowDown"||l.key==="ArrowLeft"||l.key==="ArrowRight"||a&&l.code==="Space")&&(c||l.preventDefault());return}let u="";if(!c&&l.key.startsWith("Arrow"))u=l.key.slice(5).toLowerCase();else if(!m&&l.key==="f"&&(l.ctrlKey||l.metaKey))o.value.toggleSearchInput();else if(!c&&m&&l.key==="/")o.value.toggleSearchInput();else if(m&&l.key==="Escape")t.error="",o.value.closeSearch(l),t.focusBreadcrumb();else if(!c&&m&&l.key==="Backspace")je.back();else if(!c&&!m&&l.key==="a"&&(l.ctrlKey||l.metaKey))i.toggleSelectAll();else if(!c&&m&&l.key==="g")t.prefs.gallery=!t.prefs.gallery;else if(!c&&m&&(l.code==="Backquote"||l.key==="1"||l.key==="2"||l.key==="3"))t.sort(["","name","modified","size"][+l.key||0]);else if(!c&&a&&m&&!l.ctrlKey&&(l.key==="F2"||l.key==="r"))i.cursorRename();else if(!c&&a&&l.code==="Space")m&&!l.altKey&&!l.ctrlKey&&i.cursorSelect();else return;l.preventDefault(),s&&(clearTimeout(s),s=null);let p;switch(u){case"up":p=()=>i.up(l);break;case"down":p=()=>i.down(l);break;case"left":p=()=>i.left(l);break;case"right":p=()=>i.right(l);break}if(p&&!m){const x=l.altKey?20:100;p(),s=setTimeout(()=>{s=setInterval(p,x)},200-x)}};return be(()=>{window.addEventListener("keydown",r),window.addEventListener("keyup",r)}),wt(()=>{window.removeEventListener("keydown",r),window.removeEventListener("keyup",r)}),(l,i)=>{const a=li,c=Ja,m=Va,u=hn,p=xs;return I(),P(fe,null,[w(t).error&&!w(t).authInProgress?(I(),P("div",{key:0,class:"toast-message",onClick:i[0]||(i[0]=f=>w(t).error="")},oe(w(t).error),1)):G("",!0),z(a),z(vi),z(wi),E("header",null,[z(m,{ref_key:"headerMain",ref:o,path:n.value.pathList,query:n.value.query},{default:Re(()=>[z(c,{path:n.value.pathList},null,8,["path"])]),_:1},8,["path","query"]),z(u,{path:n.value.pathList,primary:""},null,8,["path"])]),E("main",null,[z(w(Ao),{path:n.value.pathList,query:n.value.query},null,8,["path","query"])]),E("footer",null,[z(p,{status:w(t).uprogress,onCancel:w(t).cancelUploads,class:"upload"},null,8,["status","onCancel"]),z(p,{status:w(t).dprogress,onCancel:w(t).cancelDownloads,class:"download"},null,8,["status","onCancel"])])],64)}}});function bi(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 wn(e,t,n){if(n.length===0)return t;const o=n[0];return n.length>1&&(t=wn(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 Vo(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 wn(e,Vo(e[t[0]],Array.prototype.slice.call(t,1)),[t[0]])}function qo(e,t){return t.map(n=>n.split(".")).map(n=>[n,bi(e,n)]).filter(n=>n[1]!==void 0).reduce((n,o)=>wn(n,o[1],o[0]),{})}function Go(e,t){return t.map(n=>n.split(".")).reduce((n,o)=>Vo(n,o),e)}function to(e,{storage:t,serializer:n,key:o,debug:s,pick:r,omit:l,beforeHydrate:i,afterHydrate:a},c,m=!0){try{m&&i?.(c);const u=t.getItem(o);if(u){const p=n.deserialize(u),f=r?qo(p,r):p,x=l?Go(f,l):f;e.$patch(x)}m&&a?.(c)}catch(u){s&&console.error("[pinia-plugin-persistedstate]",u)}}function no(e,{storage:t,serializer:n,key:o,debug:s,pick:r,omit:l}){try{const i=r?qo(e,r):e,a=l?Go(i,l):i,c=n.serialize(a);t.setItem(o,c)}catch(i){s&&console.error("[pinia-plugin-persistedstate]",i)}}function Ci(e,t){return typeof e=="function"?e(t):typeof e=="string"?e:t}function Si(e,t,n){const{pinia:o,store:s,options:{persist:r=n}}=e;if(!r)return;if(!(s.$id in o.state.value)){const i=o._s.get(s.$id.replace("__hot:",""));i&&Promise.resolve().then(()=>i.$persist());return}const l=(Array.isArray(r)?r:r===!0?[{}]:[r]).map(t);s.$hydrate=({runHooks:i=!0}={})=>{l.forEach(a=>{to(s,a,e,i)})},s.$persist=()=>{l.forEach(i=>{no(s.$state,i)})},l.forEach(i=>{to(s,i,e),s.$subscribe((a,c)=>no(c,i),{detached:!0})})}function xi(e={}){return function(t){Si(t,n=>{const o=Ci(n.key,t.store.$id);return{key:(e.key?e.key:s=>s)(o),debug:n.debug??e.debug??!1,serializer:n.serializer??e.serializer??{serialize:s=>JSON.stringify(s),deserialize:s=>JSON.parse(s)},storage:n.storage??e.storage??window.localStorage,beforeHydrate:n.beforeHydrate??e.beforeHydrate,afterHydrate:n.afterHydrate??e.afterHydrate,pick:n.pick,omit:n.omit}},e.auto??!1)}}var _i=xi();const St=us(ki);St.config.errorHandler=e=>{console.log(e)};const Ko=ds();Ko.use(_i);St.use(Ko);St.use(je);St.use(Lt);St.mount("#app");
|
|
File without changes
|
|
File without changes
|