<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="./favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>ui</title>
<script type="module" crossorigin>(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e,t,n,r,i,a,o,s,c,l,u,d,f,p,m={},h=[],g=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,_=Array.isArray;function v(e,t){for(var n in t)e[n]=t[n];return e}function y(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function b(t,n,r){var i,a,o,s={};for(o in n)o==`key`?i=n[o]:o==`ref`?a=n[o]:s[o]=n[o];if(arguments.length>2&&(s.children=arguments.length>3?e.call(arguments,2):r),typeof t==`function`&&t.defaultProps!=null)for(o in t.defaultProps)s[o]===void 0&&(s[o]=t.defaultProps[o]);return x(t,s,i,a,null)}function x(e,r,i,a,o){var s={type:e,props:r,key:i,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:o??++n,__i:-1,__u:0};return o==null&&t.vnode!=null&&t.vnode(s),s}function S(e){return e.children}function C(e,t){this.props=e,this.context=t}function w(e,t){if(t==null)return e.__?w(e.__,e.__i+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type==`function`?w(e):null}function T(e){if(e.__P&&e.__d){var n=e.__v,r=n.__e,i=[],a=[],o=v({},n);o.__v=n.__v+1,t.vnode&&t.vnode(o),I(e.__P,o,n,e.__n,e.__P.namespaceURI,32&n.__u?[r]:null,i,r??w(n),!!(32&n.__u),a),o.__v=n.__v,o.__.__k[o.__i]=o,R(i,o,a),n.__e=n.__=null,o.__e!=r&&E(o)}}function E(e){if((e=e.__)!=null&&e.__c!=null)return e.__e=e.__c.base=null,e.__k.some(function(t){if(t!=null&&t.__e!=null)return e.__e=e.__c.base=t.__e}),E(e)}function D(e){(!e.__d&&(e.__d=!0)&&r.push(e)&&!O.__r++||i!=t.debounceRendering)&&((i=t.debounceRendering)||a)(O)}function O(){try{for(var e,t=1;r.length;)r.length>t&&r.sort(o),e=r.shift(),t=r.length,T(e)}finally{r.length=O.__r=0}}function k(e,t,n,r,i,a,o,s,c,l,u){var d,f,p,g,_,v,y,b=r&&r.__k||h,x=t.length;for(c=A(n,t,b,c,x),d=0;d<x;d++)(p=n.__k[d])!=null&&(f=p.__i!=-1&&b[p.__i]||m,p.__i=d,v=I(e,p,f,i,a,o,s,c,l,u),g=p.__e,p.ref&&f.ref!=p.ref&&(f.ref&&B(f.ref,null,p),u.push(p.ref,p.__c||g,p)),_==null&&g!=null&&(_=g),(y=!!(4&p.__u))||f.__k===p.__k?(c=j(p,c,e,y),y&&f.__e&&(f.__e=null)):typeof p.type==`function`&&v!==void 0?c=v:g&&(c=g.nextSibling),p.__u&=-7);return n.__e=_,c}function A(e,t,n,r,i){var a,o,s,c,l,u=n.length,d=u,f=0;for(e.__k=Array(i),a=0;a<i;a++)(o=t[a])!=null&&typeof o!=`boolean`&&typeof o!=`function`?(typeof o==`string`||typeof o==`number`||typeof o==`bigint`||o.constructor==String?o=e.__k[a]=x(null,o,null,null,null):_(o)?o=e.__k[a]=x(S,{children:o},null,null,null):o.constructor===void 0&&o.__b>0?o=e.__k[a]=x(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):e.__k[a]=o,c=a+f,o.__=e,o.__b=e.__b+1,s=null,(l=o.__i=M(o,n,c,d))!=-1&&(d--,(s=n[l])&&(s.__u|=2)),s==null||s.__v==null?(l==-1&&(i>u?f--:i<u&&f++),typeof o.type!=`function`&&(o.__u|=4)):l!=c&&(l==c-1?f--:l==c+1?f++:(l>c?f--:f++,o.__u|=4))):e.__k[a]=null;if(d)for(a=0;a<u;a++)(s=n[a])!=null&&!(2&s.__u)&&(s.__e==r&&(r=w(s)),V(s,s));return r}function j(e,t,n,r){var i,a;if(typeof e.type==`function`){for(i=e.__k,a=0;i&&a<i.length;a++)i[a]&&(i[a].__=e,t=j(i[a],t,n,r));return t}e.__e!=t&&(r&&(t&&e.type&&!t.parentNode&&(t=w(e)),n.insertBefore(e.__e,t||null)),t=e.__e);do t&&=t.nextSibling;while(t!=null&&t.nodeType==8);return t}function M(e,t,n,r){var i,a,o,s=e.key,c=e.type,l=t[n],u=l!=null&&(2&l.__u)==0;if(l===null&&s==null||u&&s==l.key&&c==l.type)return n;if(r>+!!u){for(i=n-1,a=n+1;i>=0||a<t.length;)if((l=t[o=i>=0?i--:a++])!=null&&!(2&l.__u)&&s==l.key&&c==l.type)return o}return-1}function N(e,t,n){t[0]==`-`?e.setProperty(t,n??``):e[t]=n==null?``:typeof n!=`number`||g.test(t)?n:n+`px`}function P(e,t,n,r,i){var a,o;n:if(t==`style`)if(typeof n==`string`)e.style.cssText=n;else{if(typeof r==`string`&&(e.style.cssText=r=``),r)for(t in r)n&&t in n||N(e.style,t,``);if(n)for(t in n)r&&n[t]==r[t]||N(e.style,t,n[t])}else if(t[0]==`o`&&t[1]==`n`)a=t!=(t=t.replace(u,`$1`)),o=t.toLowerCase(),t=o in e||t==`onFocusOut`||t==`onFocusIn`?o.slice(2):t.slice(2),e.l||={},e.l[t+a]=n,n?r?n[l]=r[l]:(n[l]=d,e.addEventListener(t,a?p:f,a)):e.removeEventListener(t,a?p:f,a);else{if(i==`http://www.w3.org/2000/svg`)t=t.replace(/xlink(H|:h)/,`h`).replace(/sName$/,`s`);else if(t!=`width`&&t!=`height`&&t!=`href`&&t!=`list`&&t!=`form`&&t!=`tabIndex`&&t!=`download`&&t!=`rowSpan`&&t!=`colSpan`&&t!=`role`&&t!=`popover`&&t in e)try{e[t]=n??``;break n}catch{}typeof n==`function`||(n==null||!1===n&&t[4]!=`-`?e.removeAttribute(t):e.setAttribute(t,t==`popover`&&n==1?``:n))}}function F(e){return function(n){if(this.l){var r=this.l[n.type+e];if(n[c]==null)n[c]=d++;else if(n[c]<r[l])return;return r(t.event?t.event(n):n)}}}function I(e,n,r,i,a,o,s,c,l,u){var d,f,p,m,g,b,x,w,T,E,D,O,A,j,M,N=n.type;if(n.constructor!==void 0)return null;128&r.__u&&(l=!!(32&r.__u),o=[c=n.__e=r.__e]),(d=t.__b)&&d(n);n:if(typeof N==`function`)try{if(w=n.props,T=N.prototype&&N.prototype.render,E=(d=N.contextType)&&i[d.__c],D=d?E?E.props.value:d.__:i,r.__c?x=(f=n.__c=r.__c).__=f.__E:(T?n.__c=f=new N(w,D):(n.__c=f=new C(w,D),f.constructor=N,f.render=te),E&&E.sub(f),f.state||={},f.__n=i,p=f.__d=!0,f.__h=[],f._sb=[]),T&&f.__s==null&&(f.__s=f.state),T&&N.getDerivedStateFromProps!=null&&(f.__s==f.state&&(f.__s=v({},f.__s)),v(f.__s,N.getDerivedStateFromProps(w,f.__s))),m=f.props,g=f.state,f.__v=n,p)T&&N.getDerivedStateFromProps==null&&f.componentWillMount!=null&&f.componentWillMount(),T&&f.componentDidMount!=null&&f.__h.push(f.componentDidMount);else{if(T&&N.getDerivedStateFromProps==null&&w!==m&&f.componentWillReceiveProps!=null&&f.componentWillReceiveProps(w,D),n.__v==r.__v||!f.__e&&f.shouldComponentUpdate!=null&&!1===f.shouldComponentUpdate(w,f.__s,D)){n.__v!=r.__v&&(f.props=w,f.state=f.__s,f.__d=!1),n.__e=r.__e,n.__k=r.__k,n.__k.some(function(e){e&&(e.__=n)}),h.push.apply(f.__h,f._sb),f._sb=[],f.__h.length&&s.push(f);break n}f.componentWillUpdate!=null&&f.componentWillUpdate(w,f.__s,D),T&&f.componentDidUpdate!=null&&f.__h.push(function(){f.componentDidUpdate(m,g,b)})}if(f.context=D,f.props=w,f.__P=e,f.__e=!1,O=t.__r,A=0,T)f.state=f.__s,f.__d=!1,O&&O(n),d=f.render(f.props,f.state,f.context),h.push.apply(f.__h,f._sb),f._sb=[];else do f.__d=!1,O&&O(n),d=f.render(f.props,f.state,f.context),f.state=f.__s;while(f.__d&&++A<25);f.state=f.__s,f.getChildContext!=null&&(i=v(v({},i),f.getChildContext())),T&&!p&&f.getSnapshotBeforeUpdate!=null&&(b=f.getSnapshotBeforeUpdate(m,g)),j=d!=null&&d.type===S&&d.key==null?z(d.props.children):d,c=k(e,_(j)?j:[j],n,r,i,a,o,s,c,l,u),f.base=n.__e,n.__u&=-161,f.__h.length&&s.push(f),x&&(f.__E=f.__=null)}catch(e){if(n.__v=null,l||o!=null)if(e.then){for(n.__u|=l?160:128;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;o[o.indexOf(c)]=null,n.__e=c}else{for(M=o.length;M--;)y(o[M]);L(n)}else n.__e=r.__e,n.__k=r.__k,e.then||L(n);t.__e(e,n,r)}else o==null&&n.__v==r.__v?(n.__k=r.__k,n.__e=r.__e):c=n.__e=ee(r.__e,n,r,i,a,o,s,l,u);return(d=t.diffed)&&d(n),128&n.__u?void 0:c}function L(e){e&&(e.__c&&(e.__c.__e=!0),e.__k&&e.__k.some(L))}function R(e,n,r){for(var i=0;i<r.length;i++)B(r[i],r[++i],r[++i]);t.__c&&t.__c(n,e),e.some(function(n){try{e=n.__h,n.__h=[],e.some(function(e){e.call(n)})}catch(e){t.__e(e,n.__v)}})}function z(e){return typeof e!=`object`||!e||e.__b>0?e:_(e)?e.map(z):e.constructor===void 0?v({},e):null}function ee(n,r,i,a,o,s,c,l,u){var d,f,p,h,g,v,b,x=i.props||m,S=r.props,C=r.type;if(C==`svg`?o=`http://www.w3.org/2000/svg`:C==`math`?o=`http://www.w3.org/1998/Math/MathML`:o||=`http://www.w3.org/1999/xhtml`,s!=null){for(d=0;d<s.length;d++)if((g=s[d])&&`setAttribute`in g==!!C&&(C?g.localName==C:g.nodeType==3)){n=g,s[d]=null;break}}if(n==null){if(C==null)return document.createTextNode(S);n=document.createElementNS(o,C,S.is&&S),l&&=(t.__m&&t.__m(r,s),!1),s=null}if(C==null)x===S||l&&n.data==S||(n.data=S);else{if(s=C==`textarea`&&S.defaultValue!=null?null:s&&e.call(n.childNodes),!l&&s!=null)for(x={},d=0;d<n.attributes.length;d++)x[(g=n.attributes[d]).name]=g.value;for(d in x)g=x[d],d==`dangerouslySetInnerHTML`?p=g:d==`children`||d in S||d==`value`&&`defaultValue`in S||d==`checked`&&`defaultChecked`in S||P(n,d,null,g,o);for(d in S)g=S[d],d==`children`?h=g:d==`dangerouslySetInnerHTML`?f=g:d==`value`?v=g:d==`checked`?b=g:l&&typeof g!=`function`||x[d]===g||P(n,d,g,x[d],o);if(f)l||p&&(f.__html==p.__html||f.__html==n.innerHTML)||(n.innerHTML=f.__html),r.__k=[];else if(p&&(n.innerHTML=``),k(r.type==`template`?n.content:n,_(h)?h:[h],r,i,a,C==`foreignObject`?`http://www.w3.org/1999/xhtml`:o,s,c,s?s[0]:i.__k&&w(i,0),l,u),s!=null)for(d=s.length;d--;)y(s[d]);l&&C!=`textarea`||(d=`value`,C==`progress`&&v==null?n.removeAttribute(`value`):v!=null&&(v!==n[d]||C==`progress`&&!v||C==`option`&&v!=x[d])&&P(n,d,v,x[d],o),d=`checked`,b!=null&&b!=n[d]&&P(n,d,b,x[d],o))}return n}function B(e,n,r){try{if(typeof e==`function`){var i=typeof e.__u==`function`;i&&e.__u(),i&&n==null||(e.__u=e(n))}else e.current=n}catch(e){t.__e(e,r)}}function V(e,n,r){var i,a;if(t.unmount&&t.unmount(e),(i=e.ref)&&(i.current&&i.current!=e.__e||B(i,null,n)),(i=e.__c)!=null){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(e){t.__e(e,n)}i.base=i.__P=null}if(i=e.__k)for(a=0;a<i.length;a++)i[a]&&V(i[a],n,r||typeof e.type!=`function`);r||y(e.__e),e.__c=e.__=e.__e=void 0}function te(e,t,n){return this.constructor(e,n)}function ne(n,r,i){var a,o,s,c;r==document&&(r=document.documentElement),t.__&&t.__(n,r),o=(a=typeof i==`function`)?null:i&&i.__k||r.__k,s=[],c=[],I(r,n=(!a&&i||r).__k=b(S,null,[n]),o||m,m,r.namespaceURI,!a&&i?[i]:o?null:r.firstChild?e.call(r.childNodes):null,s,!a&&i?i:o?o.__e:r.firstChild,a,c),R(s,n,c)}e=h.slice,t={__e:function(e,t,n,r){for(var i,a,o;t=t.__;)if((i=t.__c)&&!i.__)try{if((a=i.constructor)&&a.getDerivedStateFromError!=null&&(i.setState(a.getDerivedStateFromError(e)),o=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,r||{}),o=i.__d),o)return i.__E=i}catch(t){e=t}throw e}},n=0,C.prototype.setState=function(e,t){var n=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=v({},this.state);typeof e==`function`&&(e=e(v({},n),this.props)),e&&v(n,e),e!=null&&this.__v&&(t&&this._sb.push(t),D(this))},C.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),D(this))},C.prototype.render=S,r=[],a=typeof Promise==`function`?Promise.prototype.then.bind(Promise.resolve()):setTimeout,o=function(e,t){return e.__v.__b-t.__v.__b},O.__r=0,s=Math.random().toString(8),c=`__d`+s,l=`__a`+s,u=/(PointerCapture)$|Capture$/i,d=0,f=F(!1),p=F(!0);var H,U,W,G,K=0,re=[],q=t,ie=q.__b,ae=q.__r,oe=q.diffed,se=q.__c,ce=q.unmount,le=q.__;function J(e,t){q.__h&&q.__h(U,e,K||t),K=0;var n=U.__H||={__:[],__h:[]};return e>=n.__.length&&n.__.push({}),n.__[e]}function Y(e){return K=1,ue(_e,e)}function ue(e,t,n){var r=J(H++,2);if(r.t=e,!r.__c&&(r.__=[n?n(t):_e(void 0,t),function(e){var t=r.__N?r.__N[0]:r.__[0],n=r.t(t,e);t!==n&&(r.__N=[n,r.__[1]],r.__c.setState({}))}],r.__c=U,!U.__f)){var i=function(e,t,n){if(!r.__c.__H)return!0;var i=r.__c.__H.__.filter(function(e){return e.__c});if(i.every(function(e){return!e.__N}))return!a||a.call(this,e,t,n);var o=r.__c.props!==e;return i.some(function(e){if(e.__N){var t=e.__[0];e.__=e.__N,e.__N=void 0,t!==e.__[0]&&(o=!0)}}),a&&a.call(this,e,t,n)||o};U.__f=!0;var a=U.shouldComponentUpdate,o=U.componentWillUpdate;U.componentWillUpdate=function(e,t,n){if(this.__e){var r=a;a=void 0,i(e,t,n),a=r}o&&o.call(this,e,t,n)},U.shouldComponentUpdate=i}return r.__N||r.__}function X(e,t){var n=J(H++,3);!q.__s&&ge(n.__H,t)&&(n.__=e,n.u=t,U.__H.__h.push(n))}function de(e){return K=5,fe(function(){return{current:e}},[])}function fe(e,t){var n=J(H++,7);return ge(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function pe(){for(var e;e=re.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(Z),t.__h.some(Q),t.__h=[]}catch(n){t.__h=[],q.__e(n,e.__v)}}}q.__b=function(e){U=null,ie&&ie(e)},q.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),le&&le(e,t)},q.__r=function(e){ae&&ae(e),H=0;var t=(U=e.__c).__H;t&&(W===U?(t.__h=[],U.__h=[],t.__.some(function(e){e.__N&&(e.__=e.__N),e.u=e.__N=void 0})):(t.__h.some(Z),t.__h.some(Q),t.__h=[],H=0)),W=U},q.diffed=function(e){oe&&oe(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(re.push(t)!==1&&G===q.requestAnimationFrame||((G=q.requestAnimationFrame)||he)(pe)),t.__H.__.some(function(e){e.u&&(e.__H=e.u),e.u=void 0})),W=U=null},q.__c=function(e,t){t.some(function(e){try{e.__h.some(Z),e.__h=e.__h.filter(function(e){return!e.__||Q(e)})}catch(n){t.some(function(e){e.__h&&=[]}),t=[],q.__e(n,e.__v)}}),se&&se(e,t)},q.unmount=function(e){ce&&ce(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some(function(e){try{Z(e)}catch(e){t=e}}),n.__H=void 0,t&&q.__e(t,n.__v))};var me=typeof requestAnimationFrame==`function`;function he(e){var t,n=function(){clearTimeout(r),me&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,35);me&&(t=requestAnimationFrame(n))}function Z(e){var t=U,n=e.__c;typeof n==`function`&&(e.__c=void 0,n()),U=t}function Q(e){var t=U;e.__c=e.__(),U=t}function ge(e,t){return!e||e.length!==t.length||t.some(function(t,n){return t!==e[n]})}function _e(e,t){return typeof t==`function`?t(e):t}var ve=0;Array.isArray;function $(e,n,r,i,a,o){n||={};var s,c,l=n;if(`ref`in l)for(c in l={},n)c==`ref`?s=n[c]:l[c]=n[c];var u={type:e,props:l,key:r,ref:s,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--ve,__i:-1,__u:0,__source:a,__self:o};if(typeof e==`function`&&(s=e.defaultProps))for(c in s)l[c]===void 0&&(l[c]=s[c]);return t.vnode&&t.vnode(u),u}var ye=()=>$(`svg`,{class:`file-icon folder`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,children:$(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`})}),be=()=>$(`svg`,{class:`file-icon file`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,children:[$(`path`,{d:`M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z`}),$(`polyline`,{points:`14 2 14 8 20 8`})]}),xe=()=>$(`svg`,{class:`file-icon code`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,children:[$(`polyline`,{points:`16 18 22 12 16 6`}),$(`polyline`,{points:`8 6 2 12 8 18`})]}),Se=()=>$(`svg`,{class:`file-icon image`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,children:[$(`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,ry:`2`}),$(`circle`,{cx:`8.5`,cy:`8.5`,r:`1.5`}),$(`polyline`,{points:`21 15 16 10 5 21`})]}),Ce=()=>$(`svg`,{class:`action-icon`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,children:[$(`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`}),$(`polyline`,{points:`7 10 12 15 17 10`}),$(`line`,{x1:`12`,y1:`15`,x2:`12`,y2:`3`})]}),we=()=>$(`svg`,{class:`action-icon`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,children:[$(`path`,{d:`M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z`}),$(`circle`,{cx:`12`,cy:`12`,r:`3`})]}),Te=()=>$(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,width:`18`,height:`18`,children:[$(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`}),$(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`})]}),Ee=()=>$(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`,width:`16`,height:`16`,children:[$(`polyline`,{points:`23 4 23 10 17 10`}),$(`polyline`,{points:`1 20 1 14 7 14`}),$(`path`,{d:`M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15`})]});function De(){let[e,t]=Y(``),[n,r]=Y([]),[i,a]=Y(!0),[o,s]=Y(null),[c,l]=Y(``),[u,d]=Y([]),[f,p]=Y(`disconnected`),[m,h]=Y(`/`),[g,_]=Y(!1),[v,y]=Y(`http://127.0.0.1:8888`),[b,x]=Y(null),[S,C]=Y(!1),[w,T]=Y(null),E=de(null);X(()=>{let e=localStorage.getItem(`fsv_api_base`);e&&(h(e),y(e))},[]);let D=async(e,t=m)=>{a(!0),s(null);try{let n=`${t.endsWith(`/`)?t.slice(0,-1):t}/api/files?path=${encodeURIComponent(e)}`,i=await fetch(n);if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e.error||`HTTP Error ${i.status}`)}r(await i.json())}catch(e){s(e.message||`Failed to load files`),r([])}finally{a(!1)}};X(()=>{D(e)},[e,m]),X(()=>{E.current&&E.current.close(),p(`connecting`);let e=``;e=m===`/`?`${window.location.protocol===`https:`?`wss:`:`ws:`}//${window.location.host}/ws`:m.replace(/^http/,`ws`).replace(/\/$/,``)+`/ws`;try{let t=new WebSocket(e);E.current=t,t.onopen=()=>{p(`connected`),d(e=>[{time:new Date().toLocaleTimeString(),msg:`Connected to server WebSocket`},...e])},t.onmessage=e=>{d(t=>[{time:new Date().toLocaleTimeString(),msg:e.data},...t.slice(0,49)])},t.onclose=()=>{p(`disconnected`)},t.onerror=()=>{p(`disconnected`)}}catch{p(`disconnected`)}return()=>{E.current&&E.current.close()}},[m]);let O=()=>{localStorage.setItem(`fsv_api_base`,v),h(v),_(!1)},k=e=>{if(e===0)return`0 B`;let t=1024,n=[`B`,`KB`,`MB`,`GB`,`TB`],r=Math.floor(Math.log(e)/Math.log(t));return parseFloat((e/t**+r).toFixed(1))+` `+n[r]},A=e=>e?new Date(e*1e3).toLocaleString():`-`,j=e=>{if(e.is_dir)return $(ye,{});let t=e.name.split(`.`).pop()?.toLowerCase();return[`png`,`jpg`,`jpeg`,`gif`,`svg`,`webp`,`ico`].includes(t||``)?$(Se,{}):[`rs`,`js`,`ts`,`tsx`,`jsx`,`html`,`css`,`json`,`toml`,`yaml`,`yml`,`md`,`sh`,`py`,`go`].includes(t||``)?$(xe,{}):$(be,{})},M=e=>{let t=e.split(`.`).pop()?.toLowerCase();return[`rs`,`toml`,`json`,`md`,`txt`,`js`,`ts`,`tsx`,`css`,`html`,`yaml`,`yml`,`sh`,`py`].includes(t||``)},N=e=>{e.is_dir&&t(e.path)},P=e=>{let t=`${m.endsWith(`/`)?m.slice(0,-1):m}/api/download?path=${encodeURIComponent(e.path)}`;window.open(t,`_blank`)},F=async e=>{x(e),C(!0),T(null);try{let t=`${m.endsWith(`/`)?m.slice(0,-1):m}/api/download?path=${encodeURIComponent(e.path)}`,n=await fetch(t);if(!n.ok)throw Error(`Failed to load preview`);T(await n.text())}catch(e){T(`Error loading file preview: ${e.message}`)}finally{C(!1)}},I=()=>{let t=e.split(`/`).filter(e=>e),n=[{name:`Root`,path:``}],r=``;return t.forEach(e=>{r=r?`${r}/${e}`:e,n.push({name:e,path:r})}),n},L=n.filter(e=>e.name.toLowerCase().includes(c.toLowerCase()));return $(`div`,{class:`fsv-layout`,children:[$(`aside`,{class:`sidebar`,children:[$(`div`,{class:`brand`,children:[$(`div`,{class:`logo-badge`,children:`FSV`}),$(`h2`,{children:`File Share Viewer`})]}),$(`div`,{class:`connection-status`,children:[$(`div`,{class:`indicator ${f}`}),$(`span`,{class:`status-text`,children:f===`connected`?`Connected to WebSocket`:f===`connecting`?`Connecting to Server...`:`Backend Disconnected`}),$(`button`,{class:`settings-trigger`,onClick:()=>{y(m),_(!0)},children:`⚙️`})]}),$(`div`,{class:`ws-feed`,children:[$(`h3`,{children:`Real-time Server Feed`}),$(`p`,{class:`feed-sub`,children:`Logs broadcasts from Rust CLI`}),$(`div`,{class:`log-container`,children:u.length===0?$(`div`,{class:`empty-logs`,children:`No broadcast messages yet. Use the Rust command-line 'broadcast <msg>' to push messages here live.`}):u.map((e,t)=>$(`div`,{class:`log-item`,children:[$(`span`,{class:`log-time`,children:[`[`,e.time,`]`]}),$(`span`,{class:`log-text`,children:e.msg})]},t))})]})]}),$(`main`,{class:`main-content`,children:[$(`header`,{class:`top-bar`,children:[$(`div`,{class:`breadcrumb-container`,children:I().map((e,n,r)=>$(`span`,{class:`breadcrumb-item`,children:[$(`button`,{class:`crumb-btn`,onClick:()=>t(e.path),children:e.name}),n<r.length-1&&$(`span`,{class:`crumb-separator`,children:`/`})]},n))}),$(`div`,{class:`actions-group`,children:[$(`div`,{class:`search-box`,children:[$(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,width:`16`,height:`16`,children:[$(`circle`,{cx:`11`,cy:`11`,r:`8`}),$(`line`,{x1:`21`,y1:`21`,x2:`16.65`,y2:`16.65`})]}),$(`input`,{type:`text`,placeholder:`Search current folder...`,value:c,onInput:e=>l(e.target.value)})]}),$(`button`,{class:`icon-btn`,title:`Refresh files`,onClick:()=>D(e),children:$(Ee,{})})]})]}),$(`div`,{class:`browser-body`,children:i?$(`div`,{class:`state-container`,children:[$(`div`,{class:`spinner`}),$(`p`,{children:`Scanning directory contents...`})]}):o?$(`div`,{class:`state-container error-state`,children:[$(`div`,{class:`error-icon`,children:`⚠️`}),$(`h3`,{children:`API Connection Error`}),$(`p`,{children:o}),$(`button`,{class:`btn btn-primary`,onClick:()=>D(e),children:`Try Again`})]}):L.length===0?$(`div`,{class:`state-container`,children:[$(`div`,{class:`empty-icon`,children:`📁`}),$(`h3`,{children:`No items found`}),$(`p`,{children:c?`No files match your search criteria.`:`This directory is empty.`})]}):$(`div`,{class:`file-grid`,children:L.map(e=>$(`div`,{class:`file-card ${e.is_dir?`dir-card`:``}`,onClick:()=>e.is_dir&&N(e),children:[$(`div`,{class:`file-icon-wrap`,children:j(e)}),$(`div`,{class:`file-info-wrap`,children:[$(`span`,{class:`file-name`,title:e.name,children:e.name}),$(`span`,{class:`file-meta`,children:[e.is_dir?`Folder`:k(e.size),!e.is_dir&&e.modified&&` • ${A(e.modified).split(`,`)[0]}`]})]}),$(`div`,{class:`file-actions`,onClick:e=>e.stopPropagation(),children:[!e.is_dir&&M(e.name)&&$(`button`,{class:`action-btn`,title:`Preview File`,onClick:()=>F(e),children:$(we,{})}),!e.is_dir&&$(`button`,{class:`action-btn`,title:`Download File`,onClick:()=>P(e),children:$(Ce,{})})]})]},e.path))})})]}),b&&$(`div`,{class:`modal-overlay`,onClick:()=>x(null),children:$(`div`,{class:`modal-card preview-modal`,onClick:e=>e.stopPropagation(),children:[$(`div`,{class:`modal-header`,children:[$(`div`,{class:`modal-title`,children:[j(b),$(`h3`,{children:[`Preview: `,b.name]})]}),$(`button`,{class:`modal-close`,onClick:()=>x(null),children:$(Te,{})})]}),$(`div`,{class:`modal-body preview-body`,children:S?$(`div`,{class:`preview-loading`,children:[$(`div`,{class:`spinner`}),$(`p`,{children:`Fetching content...`})]}):$(`pre`,{class:`code-block`,children:$(`code`,{children:w})})})]})}),g&&$(`div`,{class:`modal-overlay`,onClick:()=>_(!1),children:$(`div`,{class:`modal-card settings-modal`,onClick:e=>e.stopPropagation(),children:[$(`div`,{class:`modal-header`,children:[$(`h3`,{children:`Backend API Settings`}),$(`button`,{class:`modal-close`,onClick:()=>_(!1),children:$(Te,{})})]}),$(`div`,{class:`modal-body`,children:[$(`div`,{class:`form-group`,children:[$(`label`,{children:`Rust Server URL Base`}),$(`input`,{type:`text`,placeholder:`e.g. http://127.0.0.1:8888`,value:v,onInput:e=>y(e.target.value)}),$(`p`,{class:`form-help`,children:`Use "/" (default) to proxy requests via Vite in development, or set the explicit URL of your running fsv instance.`})]}),$(`div`,{class:`modal-actions`,children:[$(`button`,{class:`btn btn-secondary`,onClick:()=>_(!1),children:`Cancel`}),$(`button`,{class:`btn btn-primary`,onClick:O,children:`Save Configuration`})]})]})]})})]})}ne($(De,{}),document.getElementById(`app`));</script>
<style rel="stylesheet" crossorigin>:root{--text:#6b6375;--text-h:#08060d;--bg:#fff;--border:#e5e4e7;--code-bg:#f4f3ec;--accent:#aa3bff;--accent-bg:#aa3bff1a;--accent-border:#aa3bff80;--social-bg:#f4f3ec80;--shadow:#0000001a 0 10px 15px -3px, #0000000d 0 4px 6px -2px;--sans:system-ui, "Segoe UI", Roboto, sans-serif;--heading:system-ui, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, Consolas, monospace;font:18px/145% var(--sans);letter-spacing:.18px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}@media (width<=1024px){:root{font-size:16px}}@media (prefers-color-scheme:dark){:root{--text:#9ca3af;--text-h:#f3f4f6;--bg:#16171d;--border:#2e303a;--code-bg:#1f2028;--accent:#c084fc;--accent-bg:#c084fc26;--accent-border:#c084fc80;--social-bg:#2f303a80;--shadow:#0006 0 10px 15px -3px, #00000040 0 4px 6px -2px}#social .button-icon{filter:invert()brightness(2)}}body{margin:0}#app{text-align:center;border-inline:1px solid var(--border);box-sizing:border-box;flex-direction:column;width:1126px;max-width:100%;min-height:100svh;margin:0 auto;display:flex}h1,h2{font-family:var(--heading);color:var(--text-h);font-weight:500}h1{letter-spacing:-1.68px;margin:32px 0;font-size:56px}@media (width<=1024px){h1{margin:20px 0;font-size:36px}}h2{letter-spacing:-.24px;margin:0 0 8px;font-size:24px;line-height:118%}@media (width<=1024px){h2{font-size:20px}}p{margin:0}code,.counter{font-family:var(--mono);color:var(--text-h);border-radius:4px;display:inline-flex}code{background:var(--code-bg);padding:4px 8px;font-size:15px;line-height:135%}.fsv-layout{background-color:var(--bg);min-height:100vh;color:var(--text);font-family:var(--sans);grid-template-columns:280px 1fr;transition:background-color .3s,color .3s;display:grid}.sidebar{background-color:var(--code-bg);border-right:1px solid var(--border);box-sizing:border-box;flex-direction:column;gap:24px;padding:24px;display:flex}.brand{align-items:center;gap:12px;display:flex}.logo-badge{color:#fff;letter-spacing:.5px;background:linear-gradient(135deg,#a855f7 0%,#7c3aed 100%);border-radius:8px;padding:6px 12px;font-size:14px;font-weight:800}.brand h2{text-transform:uppercase;letter-spacing:1px;color:var(--text-h);margin:0;font-size:16px}.connection-status{background-color:var(--bg);border:1px solid var(--border);border-radius:8px;align-items:center;gap:10px;padding:10px 14px;font-size:13px;display:flex;box-shadow:0 2px 4px #00000005}.indicator{border-radius:50%;width:8px;height:8px}.indicator.connected{background-color:#22c55e;box-shadow:0 0 8px #22c55e}.indicator.connecting{background-color:#eab308;animation:1.5s infinite pulse;box-shadow:0 0 8px #eab308}.indicator.disconnected{background-color:#ef4444;box-shadow:0 0 8px #ef4444}.status-text{color:var(--text-h);white-space:nowrap;text-overflow:ellipsis;flex-grow:1;font-weight:500;overflow:hidden}.settings-trigger{cursor:pointer;color:var(--text);background:0 0;border:none;justify-content:center;align-items:center;padding:0;font-size:16px;transition:transform .2s;display:flex}.settings-trigger:hover{color:var(--accent);transform:rotate(45deg)}.ws-feed{flex-direction:column;flex-grow:1;gap:8px;min-height:0;display:flex}.ws-feed h3{color:var(--text-h);margin:0;font-size:14px}.feed-sub{color:var(--text);margin-top:-4px;font-size:11px}.log-container{background-color:var(--bg);border:1px solid var(--border);font-family:var(--mono);box-sizing:border-box;border-radius:8px;flex-direction:column;flex-grow:1;gap:8px;padding:12px;font-size:11px;display:flex;overflow-y:auto}.empty-logs{color:var(--text);text-align:center;opacity:.6;margin:auto;padding:0 10px;line-height:140%}.log-item{border-bottom:1px solid var(--border);flex-direction:column;gap:2px;padding-bottom:6px;line-height:130%;animation:.3s ease-out fadeIn;display:flex}.log-item:last-child{border-bottom:none}.log-time{color:var(--accent);font-weight:600}.log-text{color:var(--text-h);word-break:break-all}.main-content{box-sizing:border-box;flex-direction:column;height:100vh;display:flex;overflow:hidden}.top-bar{border-bottom:1px solid var(--border);background-color:var(--bg);justify-content:space-between;align-items:center;gap:16px;padding:16px 24px;display:flex}.breadcrumb-container{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.breadcrumb-item{align-items:center;gap:4px;display:flex}.crumb-btn{cursor:pointer;font-family:var(--sans);color:var(--text);background:0 0;border:none;border-radius:4px;padding:4px 8px;font-size:14px;font-weight:500;transition:background-color .2s,color .2s}.crumb-btn:hover{background-color:var(--code-bg);color:var(--accent)}.crumb-separator{color:var(--border);font-size:14px}.actions-group{align-items:center;gap:12px;display:flex}.search-box{background-color:var(--code-bg);border:1px solid var(--border);border-radius:6px;align-items:center;gap:8px;width:240px;padding:6px 12px;transition:border-color .2s,box-shadow .2s;display:flex}.search-box:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg)}.search-box input{color:var(--text-h);font-family:var(--sans);background:0 0;border:none;outline:none;width:100%;font-size:13px}.icon-btn{background-color:var(--code-bg);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;width:32px;height:32px;transition:background-color .2s,border-color .2s;display:flex}.icon-btn:hover{background-color:var(--accent-bg);border-color:var(--accent-border);color:var(--accent)}.browser-body{background-color:var(--bg);flex-grow:1;padding:24px;overflow-y:auto}.file-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;display:grid}.file-card{border:1px solid var(--border);cursor:pointer;background-color:var(--bg);box-sizing:border-box;border-radius:12px;align-items:center;gap:14px;padding:16px;transition:transform .2s,border-color .2s,box-shadow .2s;display:flex;position:relative;overflow:hidden}.file-card:hover{border-color:var(--accent-border);box-shadow:var(--shadow);transform:translateY(-2px)}.dir-card{background:linear-gradient(135deg, var(--bg) 0%, var(--code-bg) 100%)}.file-icon-wrap{background-color:var(--code-bg);width:42px;height:42px;color:var(--text);border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;transition:background-color .2s,color .2s;display:flex}.file-card:hover .file-icon-wrap{background-color:var(--accent-bg);color:var(--accent)}.file-icon{width:22px;height:22px}.file-icon.folder{color:#a855f7}.file-icon.image{color:#10b981}.file-icon.code{color:#3b82f6}.file-info-wrap{flex-direction:column;flex-grow:1;gap:4px;min-width:0;display:flex}.file-name{color:var(--text-h);text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;overflow:hidden}.file-meta{color:var(--text);font-size:11px}.file-actions{opacity:0;gap:6px;transition:opacity .2s;display:flex}.file-card:hover .file-actions{opacity:1}.action-btn{background-color:var(--bg);border:1px solid var(--border);color:var(--text);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;padding:0;transition:background-color .2s,border-color .2s;display:flex}.action-btn:hover{background-color:var(--accent-bg);border-color:var(--accent);color:var(--accent)}.action-icon{width:14px;height:14px}.state-container{text-align:center;height:100%;color:var(--text);flex-direction:column;justify-content:center;align-items:center;gap:16px;display:flex}.state-container h3{color:var(--text-h);margin:0}.state-container p{max-width:320px;margin:0;font-size:14px}.error-state{color:#ef4444}.error-icon{font-size:48px}.empty-icon{opacity:.6;font-size:48px}.spinner{border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:40px;height:40px;animation:1s linear infinite spin}.modal-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:100;background-color:#0006;justify-content:center;align-items:center;padding:20px;animation:.2s ease-out fadeIn;display:flex;position:fixed;inset:0}.modal-card{background-color:var(--bg);border:1px solid var(--border);box-shadow:var(--shadow);box-sizing:border-box;border-radius:16px;flex-direction:column;animation:.3s cubic-bezier(.16,1,.3,1) slideUp;display:flex;overflow:hidden}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.modal-header h3{color:var(--text-h);margin:0;font-size:16px}.modal-title{align-items:center;gap:10px;display:flex}.modal-close{cursor:pointer;color:var(--text);background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:4px;display:flex}.modal-close:hover{background-color:var(--code-bg);color:var(--text-h)}.modal-body{padding:20px}.preview-modal{width:900px;max-width:100%;height:80vh}.preview-body{background-color:var(--code-bg);flex-grow:1;padding:0;overflow:hidden}.preview-loading{flex-direction:column;justify-content:center;align-items:center;gap:12px;height:100%;display:flex}.code-block{box-sizing:border-box;height:100%;margin:0;padding:20px;overflow:auto}.code-block code{color:var(--text-h);white-space:pre;background:0 0;padding:0;font-size:13px;line-height:150%}.settings-modal{width:420px;max-width:100%}.form-group{flex-direction:column;gap:8px;margin-bottom:20px;display:flex}.form-group label{color:var(--text-h);font-size:13px;font-weight:600}.form-group input{border:1px solid var(--border);background-color:var(--bg);color:var(--text-h);font-family:var(--sans);border-radius:6px;outline:none;padding:8px 12px;font-size:14px}.form-group input:focus{border-color:var(--accent)}.form-help{color:var(--text);font-size:11px;line-height:140%}.modal-actions{justify-content:flex-end;gap:10px;margin-top:10px;display:flex}.btn{font-family:var(--sans);cursor:pointer;border-radius:6px;outline:none;padding:8px 16px;font-size:13px;font-weight:500;transition:background-color .2s,border-color .2s}.btn-primary{background-color:var(--accent);color:#fff;border:1px solid #0000}.btn-primary:hover{background-color:#9333ea}.btn-secondary{background-color:var(--code-bg);border:1px solid var(--border);color:var(--text-h)}.btn-secondary:hover{background-color:var(--border)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(.9)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@media (width<=768px){.fsv-layout{grid-template-columns:1fr}.sidebar{border-right:none;border-bottom:1px solid var(--border);z-index:10;gap:16px;height:auto;padding:16px;position:sticky;top:0}.ws-feed{display:none}.main-content{height:auto;overflow:visible}.top-bar{z-index:9;position:sticky;top:68px}.browser-body{overflow-y:visible}}
/*$vite$:1*/</style>
</head>
<body>
<div id="app"></div>
</body>
</html>