siril-cloud 0.0.1
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.
- package/dist/assets/index-BZRfMUEn.js +2 -0
- package/dist/assets/index-CpHptC47.css +1 -0
- package/dist/index.html +16 -0
- package/index.html +16 -0
- package/package.json +15 -0
- package/siril-cloud-client-0.0.1.tgz +0 -0
- package/src/App.svelte +452 -0
- package/src/app.css +34 -0
- package/src/main.ts +5 -0
- package/vite.config.ts +13 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var ei=Object.defineProperty;var Sr=e=>{throw TypeError(e)};var ti=(e,t,n)=>t in e?ei(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var ie=(e,t,n)=>ti(e,typeof t!="symbol"?t+"":t,n),Dn=(e,t,n)=>t.has(e)||Sr("Cannot "+n);var l=(e,t,n)=>(Dn(e,t,"read from private field"),n?n.call(e):t.get(e)),k=(e,t,n)=>t.has(e)?Sr("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),E=(e,t,n,r)=>(Dn(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),C=(e,t,n)=>(Dn(e,t,"access private method"),n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const a of i.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function n(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(s){if(s.ep)return;s.ep=!0;const i=n(s);fetch(s.href,i)}})();const ni="5";var $r;typeof window<"u"&&(($r=window.__svelte??(window.__svelte={})).v??($r.v=new Set)).add(ni);const ri=1,si=2,Br=4,ii=8,li=16,ai=1,oi=2,P=Symbol("uninitialized"),Hr=!1;var tr=Array.isArray,fi=Array.prototype.indexOf,bn=Array.prototype.includes,On=Array.from,ui=Object.defineProperty,Yt=Object.getOwnPropertyDescriptor,ci=Object.prototype,vi=Array.prototype,di=Object.getPrototypeOf,kr=Object.isExtensible;const hi=()=>{};function _i(e){for(var t=0;t<e.length;t++)e[t]()}function Ur(){var e,t,n=new Promise((r,s)=>{e=r,t=s});return{promise:n,resolve:e,reject:t}}const V=2,Ot=4,Mn=8,Vr=1<<24,ke=16,xe=32,Je=64,Bn=128,pe=512,j=1024,$=2048,Fe=4096,Q=8192,ge=16384,Nt=32768,qr=1<<25,Mt=65536,yn=1<<17,pi=1<<18,Pt=1<<19,gi=1<<20,Oe=1<<25,_t=65536,En=1<<21,Et=1<<22,Ke=1<<23,Kt=Symbol("$state"),mi=Symbol("attributes"),Hn=Symbol("class"),Un=Symbol("style"),Bt=Symbol("text"),_n=Symbol("form reset"),Fn=new class extends Error{constructor(){super(...arguments);ie(this,"name","StaleReactionError");ie(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};function wi(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function bi(e,t,n){throw new Error("https://svelte.dev/e/each_key_duplicate")}function yi(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function Ei(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function Si(e){throw new Error("https://svelte.dev/e/effect_orphan")}function ki(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function qi(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function xi(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Ti(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Ai(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}function Ci(){console.warn("https://svelte.dev/e/derived_inert")}function Oi(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Mi(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function Gr(e){return e===this.v}function Fi(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function Yr(e){return!Fi(e,this.v)}let Ri=!1,re=null;function Ft(e){re=e}function Kr(e,t=!1,n){re={p:re,i:!1,c:null,e:null,s:e,x:null,r:A,l:null}}function Wr(e){var t=re,n=t.e;if(n!==null){t.e=null;for(var r of n)ms(r)}return t.i=!0,re=t.p,{}}function Jr(){return!0}let nt=[];function Zr(){var e=nt;nt=[],_i(e)}function ct(e){if(nt.length===0&&!Jt){var t=nt;queueMicrotask(()=>{t===nt&&Zr()})}nt.push(e)}function Di(){for(;nt.length>0;)Zr()}function Qr(e){var t=A;if(t===null)return T.f|=Ke,e;if((t.f&Nt)===0&&(t.f&Ot)===0)throw e;Ye(e,t)}function Ye(e,t){if(!(t!==null&&(t.f&ge)!==0)){for(;t!==null;){if((t.f&Bn)!==0){if((t.f&Nt)===0)throw e;try{t.b.error(e);return}catch(n){e=n}}t=t.parent}throw e}}const Ni=-7169;function N(e,t){e.f=e.f&Ni|t}function nr(e){(e.f&pe)!==0||e.deps===null?N(e,j):N(e,Fe)}function Xr(e){if(e!==null)for(const t of e)(t.f&V)===0||(t.f&_t)===0||(t.f^=_t,Xr(t.deps))}function es(e,t,n){(e.f&$)!==0?t.add(e):(e.f&Fe)!==0&&n.add(e),Xr(e.deps),N(e,j)}function Pi(e){let t=0,n=gt(0),r;return()=>{ar()&&(g(n),ws(()=>(t===0&&(r=Os(()=>e(()=>Zt(n)))),t+=1,()=>{ct(()=>{t-=1,t===0&&(r==null||r(),r=void 0,Zt(n))})})))}}var Ii=Mt|Pt;function ji(e,t,n,r){new Li(e,t,n,r)}var ve,er,de,lt,ee,he,Z,ae,Pe,at,Ve,St,en,tn,Ie,Tn,R,$i,zi,Bi,Vn,pn,gn,Gn,Yn;class Li{constructor(t,n,r,s){k(this,R);ie(this,"parent");ie(this,"is_pending",!1);ie(this,"transform_error");k(this,ve);k(this,er,null);k(this,de);k(this,lt);k(this,ee);k(this,he,null);k(this,Z,null);k(this,ae,null);k(this,Pe,null);k(this,at,0);k(this,Ve,0);k(this,St,!1);k(this,en,new Set);k(this,tn,new Set);k(this,Ie,null);k(this,Tn,Pi(()=>(E(this,Ie,gt(l(this,at))),()=>{E(this,Ie,null)})));var i;E(this,ve,t),E(this,de,n),E(this,lt,a=>{var f=A;f.b=this,f.f|=Bn,r(a)}),this.parent=A.b,this.transform_error=s??((i=this.parent)==null?void 0:i.transform_error)??(a=>a),E(this,ee,or(()=>{C(this,R,Vn).call(this)},Ii))}defer_effect(t){es(t,l(this,en),l(this,tn))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!l(this,de).pending}update_pending_count(t,n){C(this,R,Gn).call(this,t,n),E(this,at,l(this,at)+t),!(!l(this,Ie)||l(this,St))&&(E(this,St,!0),ct(()=>{E(this,St,!1),l(this,Ie)&&Rt(l(this,Ie),l(this,at))}))}get_effect_pending(){return l(this,Tn).call(this),g(l(this,Ie))}error(t){if(!l(this,de).onerror&&!l(this,de).failed)throw t;w!=null&&w.is_fork?(l(this,he)&&w.skip_effect(l(this,he)),l(this,Z)&&w.skip_effect(l(this,Z)),l(this,ae)&&w.skip_effect(l(this,ae)),w.oncommit(()=>{C(this,R,Yn).call(this,t)})):C(this,R,Yn).call(this,t)}}ve=new WeakMap,er=new WeakMap,de=new WeakMap,lt=new WeakMap,ee=new WeakMap,he=new WeakMap,Z=new WeakMap,ae=new WeakMap,Pe=new WeakMap,at=new WeakMap,Ve=new WeakMap,St=new WeakMap,en=new WeakMap,tn=new WeakMap,Ie=new WeakMap,Tn=new WeakMap,R=new WeakSet,$i=function(){try{E(this,he,_e(()=>l(this,lt).call(this,l(this,ve))))}catch(t){this.error(t)}},zi=function(t){const n=l(this,de).failed;n&&E(this,ae,_e(()=>{n(l(this,ve),()=>t,()=>()=>{})}))},Bi=function(){const t=l(this,de).pending;t&&(this.is_pending=!0,E(this,Z,_e(()=>t(l(this,ve)))),ct(()=>{var n=E(this,Pe,document.createDocumentFragment()),r=We();n.append(r),E(this,he,C(this,R,gn).call(this,()=>_e(()=>l(this,lt).call(this,r)))),l(this,Ve)===0&&(l(this,ve).before(n),E(this,Pe,null),dt(l(this,Z),()=>{E(this,Z,null)}),C(this,R,pn).call(this,w))}))},Vn=function(){try{if(this.is_pending=this.has_pending_snippet(),E(this,Ve,0),E(this,at,0),E(this,he,_e(()=>{l(this,lt).call(this,l(this,ve))})),l(this,Ve)>0){var t=E(this,Pe,document.createDocumentFragment());ur(l(this,he),t);const n=l(this,de).pending;E(this,Z,_e(()=>n(l(this,ve))))}else C(this,R,pn).call(this,w)}catch(n){this.error(n)}},pn=function(t){this.is_pending=!1,t.transfer_effects(l(this,en),l(this,tn))},gn=function(t){var n=A,r=T,s=re;Re(l(this,ee)),me(l(this,ee)),Ft(l(this,ee).ctx);try{return pt.ensure(),t()}catch(i){return Qr(i),null}finally{Re(n),me(r),Ft(s)}},Gn=function(t,n){var r;if(!this.has_pending_snippet()){this.parent&&C(r=this.parent,R,Gn).call(r,t,n);return}E(this,Ve,l(this,Ve)+t),l(this,Ve)===0&&(C(this,R,pn).call(this,n),l(this,Z)&&dt(l(this,Z),()=>{E(this,Z,null)}),l(this,Pe)&&(l(this,ve).before(l(this,Pe)),E(this,Pe,null)))},Yn=function(t){l(this,he)&&(se(l(this,he)),E(this,he,null)),l(this,Z)&&(se(l(this,Z)),E(this,Z,null)),l(this,ae)&&(se(l(this,ae)),E(this,ae,null));var n=l(this,de).onerror;let r=l(this,de).failed;var s=!1,i=!1;const a=()=>{if(s){Mi();return}s=!0,i&&Ai(),l(this,ae)!==null&&dt(l(this,ae),()=>{E(this,ae,null)}),C(this,R,gn).call(this,()=>{C(this,R,Vn).call(this)})},f=o=>{try{i=!0,n==null||n(o,a),i=!1}catch(u){Ye(u,l(this,ee)&&l(this,ee).parent)}r&&E(this,ae,C(this,R,gn).call(this,()=>{try{return _e(()=>{var u=A;u.b=this,u.f|=Bn,r(l(this,ve),()=>o,()=>a)})}catch(u){return Ye(u,l(this,ee).parent),null}}))};ct(()=>{var o;try{o=this.transform_error(t)}catch(u){Ye(u,l(this,ee)&&l(this,ee).parent);return}o!==null&&typeof o=="object"&&typeof o.then=="function"?o.then(f,u=>Ye(u,l(this,ee)&&l(this,ee).parent)):f(o)})};function Hi(e,t,n,r){const s=ns;var i=e.filter(d=>!d.settled),a=t.map(s);if(n.length===0&&i.length===0){r(a);return}var f=A,o=Ui(),u=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(d=>d.promise)):null;function v(d){if((f.f&ge)===0){o();try{r([...a,...d])}catch(_){Ye(_,f)}Sn()}}var p=ts();if(n.length===0){u.then(()=>v([])).finally(p);return}function c(){Promise.all(n.map(d=>Vi(d))).then(v).catch(d=>Ye(d,f)).finally(p)}u?u.then(()=>{o(),c(),Sn()}):c()}function Ui(){var e=A,t=T,n=re,r=w;return function(i=!0){Re(e),me(t),Ft(n),i&&(e.f&ge)===0&&(r==null||r.activate(),r==null||r.apply())}}function Sn(e=!0){Re(null),me(null),Ft(null),e&&(w==null||w.deactivate())}function ts(){var e=A,t=e.b,n=w,r=!!(t!=null&&t.is_rendered());return t==null||t.update_pending_count(1,n),n.increment(r,e),()=>{t==null||t.update_pending_count(-1,n),n.decrement(r,e)}}function ns(e){var t=V|$;return A!==null&&(A.f|=Pt),{ctx:re,deps:null,effects:null,equals:Gr,f:t,fn:e,reactions:null,rv:0,v:P,wv:0,parent:A,ac:null}}const Ht=Symbol("obsolete");function Vi(e,t,n){let r=A;r===null&&wi();var s=void 0,i=gt(P),a=!T,f=new Set;return vl(()=>{var d,_;var o=A,u=Ur();s=u.promise;try{Promise.resolve(e()).then(u.resolve,m=>{m!==Fn&&u.reject(m)}).finally(Sn)}catch(m){u.reject(m),Sn()}var v=w;if(a){if((o.f&Nt)!==0)var p=ts();if((d=r.b)!=null&&d.is_rendered())(_=v.async_deriveds.get(o))==null||_.reject(Ht);else for(const m of f.values())m.reject(Ht);f.add(u),v.async_deriveds.set(o,u)}const c=(m,h=void 0)=>{p==null||p(),f.delete(u),h!==Ht&&(v.activate(),h?(i.f|=Ke,Rt(i,h)):((i.f&Ke)!==0&&(i.f^=Ke),Rt(i,m)),v.deactivate())};u.promise.then(c,m=>c(null,m||"unknown"))}),gs(()=>{for(const o of f)o.reject(Ht)}),new Promise(o=>{function u(v){function p(){v===s?o(i):u(s)}v.then(p,p)}u(s)})}function Gi(e){const t=ns(e);return t.equals=Yr,t}function Yi(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n<t.length;n+=1)se(t[n])}}function rr(e){var t,n=A,r=e.parent;if(!Ze&&r!==null&&e.v!==P&&(r.f&(ge|Q))!==0)return Ci(),e.v;Re(r);try{e.f&=~_t,Yi(e),t=Ts(e)}finally{Re(n)}return t}function rs(e){var t=rr(e);if(!e.equals(t)&&(e.wv=qs(),(!(w!=null&&w.is_fork)||e.deps===null)&&(w!==null?(w.capture(e,t,!0),Wt==null||Wt.capture(e,t,!0)):e.v=t,e.deps===null))){N(e,j);return}Ze||(U!==null?(ar()||w!=null&&w.is_fork)&&U.set(e,t):nr(e))}function Ki(e){var t,n;if(e.effects!==null)for(const r of e.effects)(r.teardown||r.ac)&&((t=r.teardown)==null||t.call(r),(n=r.ac)==null||n.abort(Fn),r.fn!==null&&(r.teardown=hi),r.ac=null,Xt(r,0),fr(r))}function ss(e){if(e.effects!==null)for(const t of e.effects)t.teardown&&t.fn!==null&&Dt(t)}let Nn=null,wt=null,w=null,Wt=null,U=null,Kn=null,Jt=!1,Pn=!1,yt=null,mn=null;var xr=0;let Wi=1;var kt,Ge,ot,qt,xt,Tt,je,At,te,nn,Le,Ee,Ae,Ct,ft,O,Wn,Ut,Jn,is,ls,bt,Ji,Vt;const An=class An{constructor(){k(this,O);ie(this,"id",Wi++);k(this,kt,!1);ie(this,"linked",!0);k(this,Ge,null);k(this,ot,null);ie(this,"async_deriveds",new Map);ie(this,"current",new Map);ie(this,"previous",new Map);k(this,qt,new Set);k(this,xt,new Set);k(this,Tt,0);k(this,je,new Map);k(this,At,null);k(this,te,[]);k(this,nn,[]);k(this,Le,new Set);k(this,Ee,new Set);k(this,Ae,new Map);k(this,Ct,new Set);ie(this,"is_fork",!1);k(this,ft,!1);wt===null?Nn=wt=this:(E(wt,ot,this),E(this,Ge,wt)),wt=this}skip_effect(t){l(this,Ae).has(t)||l(this,Ae).set(t,{d:[],m:[]}),l(this,Ct).delete(t)}unskip_effect(t,n=r=>this.schedule(r)){var r=l(this,Ae).get(t);if(r){l(this,Ae).delete(t);for(var s of r.d)N(s,$),n(s);for(s of r.m)N(s,Fe),n(s)}l(this,Ct).add(t)}capture(t,n,r=!1){t.v!==P&&!this.previous.has(t)&&this.previous.set(t,t.v),(t.f&Ke)===0&&(this.current.set(t,[n,r]),U==null||U.set(t,n)),this.is_fork||(t.v=n)}activate(){w=this}deactivate(){w=null,U=null}flush(){try{Pn=!0,w=this,C(this,O,Ut).call(this)}finally{xr=0,Kn=null,yt=null,mn=null,Pn=!1,w=null,U=null,vt.clear()}}discard(){var t;for(const n of l(this,xt))n(this);l(this,xt).clear();for(const n of this.async_deriveds.values())n.reject(Ht);C(this,O,Vt).call(this),(t=l(this,At))==null||t.resolve()}register_created_effect(t){l(this,nn).push(t)}increment(t,n){if(E(this,Tt,l(this,Tt)+1),t){let r=l(this,je).get(n)??0;l(this,je).set(n,r+1)}}decrement(t,n){if(E(this,Tt,l(this,Tt)-1),t){let r=l(this,je).get(n)??0;r===1?l(this,je).delete(n):l(this,je).set(n,r-1)}l(this,ft)||(E(this,ft,!0),ct(()=>{E(this,ft,!1),this.linked&&this.flush()}))}transfer_effects(t,n){for(const r of t)l(this,Le).add(r);for(const r of n)l(this,Ee).add(r);t.clear(),n.clear()}oncommit(t){l(this,qt).add(t)}ondiscard(t){l(this,xt).add(t)}settled(){return(l(this,At)??E(this,At,Ur())).promise}static ensure(){if(w===null){const t=w=new An;!Pn&&!Jt&&ct(()=>{l(t,kt)||t.flush()})}return w}apply(){{U=null;return}}schedule(t){var s;if(Kn=t,(s=t.b)!=null&&s.is_pending&&(t.f&(Ot|Mn|Vr))!==0&&(t.f&Nt)===0){t.b.defer_effect(t);return}for(var n=t;n.parent!==null;){n=n.parent;var r=n.f;if(yt!==null&&n===A&&(T===null||(T.f&V)===0))return;if((r&(Je|xe))!==0){if((r&j)===0)return;n.f^=j}}l(this,te).push(n)}};kt=new WeakMap,Ge=new WeakMap,ot=new WeakMap,qt=new WeakMap,xt=new WeakMap,Tt=new WeakMap,je=new WeakMap,At=new WeakMap,te=new WeakMap,nn=new WeakMap,Le=new WeakMap,Ee=new WeakMap,Ae=new WeakMap,Ct=new WeakMap,ft=new WeakMap,O=new WeakSet,Wn=function(){if(this.is_fork)return!0;for(const r of l(this,je).keys()){for(var t=r,n=!1;t.parent!==null;){if(l(this,Ae).has(t)){n=!0;break}t=t.parent}if(!n)return!0}return!1},Ut=function(){var o,u,v,p;E(this,kt,!0),xr++>1e3&&(C(this,O,Vt).call(this),Qi());for(const c of l(this,Le))l(this,Ee).delete(c),N(c,$),this.schedule(c);for(const c of l(this,Ee))N(c,Fe),this.schedule(c);const t=l(this,te);E(this,te,[]),this.apply();var n=yt=[],r=[],s=mn=[];for(const c of t)try{C(this,O,Jn).call(this,c,n,r)}catch(d){throw fs(c),C(this,O,Wn).call(this)||this.discard(),d}if(w=null,s.length>0){var i=An.ensure();for(const c of s)i.schedule(c)}if(yt=null,mn=null,C(this,O,Wn).call(this)){C(this,O,bt).call(this,r),C(this,O,bt).call(this,n);for(const[c,d]of l(this,Ae))os(c,d);s.length>0&&C(o=w,O,Ut).call(o);return}const a=C(this,O,is).call(this);if(a){C(this,O,bt).call(this,r),C(this,O,bt).call(this,n),C(u=a,O,ls).call(u,this);return}l(this,Le).clear(),l(this,Ee).clear();for(const c of l(this,qt))c(this);l(this,qt).clear(),Wt=this,Tr(r),Tr(n),Wt=null,(v=l(this,At))==null||v.resolve();var f=w;if(l(this,Tt)===0&&(l(this,te).length===0||f!==null)&&C(this,O,Vt).call(this),l(this,te).length>0)if(f!==null){const c=f;l(c,te).push(...l(this,te).filter(d=>!l(c,te).includes(d)))}else f=this;f!==null&&C(p=f,O,Ut).call(p)},Jn=function(t,n,r){t.f^=j;for(var s=t.first;s!==null;){var i=s.f,a=(i&(xe|Je))!==0,f=a&&(i&j)!==0,o=f||(i&Q)!==0||l(this,Ae).has(s);if(!o&&s.fn!==null){a?s.f^=j:(i&Ot)!==0?n.push(s):an(s)&&((i&ke)!==0&&l(this,Ee).add(s),Dt(s));var u=s.first;if(u!==null){s=u;continue}}for(;s!==null;){var v=s.next;if(v!==null){s=v;break}s=s.parent}}},is=function(){for(var t=l(this,Ge);t!==null;){if(!t.is_fork){for(const[n,[,r]]of this.current)if(t.current.has(n)&&!r)return t}t=l(t,Ge)}return null},ls=function(t){var r;for(const[s,i]of t.current)!this.previous.has(s)&&t.previous.has(s)&&this.previous.set(s,t.previous.get(s)),this.current.set(s,i);for(const[s,i]of t.async_deriveds){const a=this.async_deriveds.get(s);a&&i.promise.then(a.resolve).catch(a.reject)}t.async_deriveds.clear(),this.transfer_effects(l(t,Le),l(t,Ee));const n=s=>{var i=s.reactions;if(i!==null)for(const o of i){var a=o.f;if((a&V)!==0)n(o);else{var f=o;a&(Et|ke)&&!this.async_deriveds.has(f)&&(l(this,Ee).delete(f),N(f,$),this.schedule(f))}}};for(const s of this.current.keys())n(s);this.oncommit(()=>t.discard()),C(r=t,O,Vt).call(r),w=this,C(this,O,Ut).call(this)},bt=function(t){for(var n=0;n<t.length;n+=1)es(t[n],l(this,Le),l(this,Ee))},Ji=function(){var p;for(let c=Nn;c!==null;c=l(c,ot)){var t=c.id<this.id,n=[];for(const[d,[_,m]]of this.current){if(c.current.has(d)){var r=c.current.get(d)[0];if(t&&_!==r)c.current.set(d,[_,m]);else continue}n.push(d)}if(t)for(const[d,_]of this.async_deriveds){const m=c.async_deriveds.get(d);m&&_.promise.then(m.resolve).catch(m.reject)}var s=[...c.current.keys()].filter(d=>!c.current.get(d)[1]);if(!(!l(c,kt)||s.length===0)){var i=s.filter(d=>!this.current.has(d));if(i.length===0)t&&c.discard();else if(n.length>0){if(t)for(const d of l(this,Ct))c.unskip_effect(d,_=>{var m;(_.f&(ke|Et))!==0?c.schedule(_):C(m=c,O,bt).call(m,[_])});c.activate();var a=new Set,f=new Map;for(var o of n)as(o,i,a,f);f=new Map;var u=[...c.current].filter(([d,_])=>{const m=this.current.get(d);return m?m[0]!==_[0]||m[1]!==_[1]:!0}).map(([d])=>d);if(u.length>0)for(const d of l(this,nn))(d.f&(ge|Q|yn))===0&&sr(d,u,f)&&((d.f&(Et|ke))!==0?(N(d,$),c.schedule(d)):l(c,Le).add(d));if(l(c,te).length>0&&!l(c,ft)){c.apply();for(var v of l(c,te))C(p=c,O,Jn).call(p,v,[],[]);E(c,te,[])}c.deactivate()}}}},Vt=function(){if(this.linked){var t=l(this,Ge),n=l(this,ot);t===null?Nn=n:E(t,ot,n),n===null?wt=t:E(n,Ge,t),this.linked=!1}};let pt=An;function Zi(e){var t=Jt;Jt=!0;try{for(var n;;){if(Di(),w===null)return n;w.flush()}}finally{Jt=t}}function Qi(){try{ki()}catch(e){Ye(e,Kn)}}let ye=null;function Tr(e){var t=e.length;if(t!==0){for(var n=0;n<t;){var r=e[n++];if((r.f&(ge|Q))===0&&an(r)&&(ye=new Set,Dt(r),r.deps===null&&r.first===null&&r.nodes===null&&r.teardown===null&&r.ac===null&&ys(r),(ye==null?void 0:ye.size)>0)){vt.clear();for(const s of ye){if((s.f&(ge|Q))!==0)continue;const i=[s];let a=s.parent;for(;a!==null;)ye.has(a)&&(ye.delete(a),i.push(a)),a=a.parent;for(let f=i.length-1;f>=0;f--){const o=i[f];(o.f&(ge|Q))===0&&Dt(o)}}ye.clear()}}ye=null}}function as(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const s of e.reactions){const i=s.f;(i&V)!==0?as(s,t,n,r):(i&(Et|ke))!==0&&(i&$)===0&&sr(s,t,r)&&(N(s,$),ir(s))}}function sr(e,t,n){const r=n.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const s of e.deps){if(bn.call(t,s))return!0;if((s.f&V)!==0&&sr(s,t,n))return n.set(s,!0),!0}return n.set(e,!1),!1}function ir(e){w.schedule(e)}function os(e,t){if(!((e.f&xe)!==0&&(e.f&j)!==0)){(e.f&$)!==0?t.d.push(e):(e.f&Fe)!==0&&t.m.push(e),N(e,j);for(var n=e.first;n!==null;)os(n,t),n=n.next}}function fs(e){N(e,j);for(var t=e.first;t!==null;)fs(t),t=t.next}let kn=new Set;const vt=new Map;let us=!1;function gt(e,t){var n={f:0,v:e,reactions:null,equals:Gr,rv:0,wv:0};return n}function I(e,t){const n=gt(e);return _l(n),n}function Xi(e,t=!1,n=!0){const r=gt(e);return t||(r.equals=Yr),r}function F(e,t,n=!1){T!==null&&(!qe||(T.f&yn)!==0)&&Jr()&&(T.f&(V|ke|Et|yn))!==0&&(Me===null||!Me.has(e))&&Ti();let r=n?rt(t):t;return Rt(e,r,mn)}function Rt(e,t,n=null){if(!e.equals(t)){vt.set(e,Ze?t:e.v);var r=pt.ensure();if(r.capture(e,t),(e.f&V)!==0){const s=e;(e.f&$)!==0&&rr(s),U===null&&nr(s)}e.wv=qs(),cs(e,$,n),A!==null&&(A.f&j)!==0&&(A.f&(xe|Je))===0&&(ce===null?pl([e]):ce.push(e)),!r.is_fork&&kn.size>0&&!us&&el()}return t}function el(){us=!1;for(const e of kn){(e.f&j)!==0&&N(e,Fe);let t;try{t=an(e)}catch{t=!0}t&&Dt(e)}kn.clear()}function Zt(e){F(e,e.v+1)}function cs(e,t,n){var r=e.reactions;if(r!==null)for(var s=r.length,i=0;i<s;i++){var a=r[i],f=a.f,o=(f&$)===0;if(o&&N(a,t),(f&yn)!==0)kn.add(a);else if((f&V)!==0){var u=a;U==null||U.delete(u),(f&_t)===0&&(f&pe&&(A===null||(A.f&En)===0)&&(a.f|=_t),cs(u,Fe,n))}else if(o){var v=a;(f&ke)!==0&&ye!==null&&ye.add(v),n!==null?n.push(v):ir(v)}}}function rt(e){if(typeof e!="object"||e===null||Kt in e)return e;const t=di(e);if(t!==ci&&t!==vi)return e;var n=new Map,r=tr(e),s=I(0),i=ht,a=f=>{if(ht===i)return f();var o=T,u=ht;me(null),Fr(i);var v=f();return me(o),Fr(u),v};return r&&n.set("length",I(e.length)),new Proxy(e,{defineProperty(f,o,u){(!("value"in u)||u.configurable===!1||u.enumerable===!1||u.writable===!1)&&qi();var v=n.get(o);return v===void 0?a(()=>{var p=I(u.value);return n.set(o,p),p}):F(v,u.value,!0),!0},deleteProperty(f,o){var u=n.get(o);if(u===void 0){if(o in f){const v=a(()=>I(P));n.set(o,v),Zt(s)}}else F(u,P),Zt(s);return!0},get(f,o,u){var d;if(o===Kt)return e;var v=n.get(o),p=o in f;if(v===void 0&&(!p||(d=Yt(f,o))!=null&&d.writable)&&(v=a(()=>{var _=rt(p?f[o]:P),m=I(_);return m}),n.set(o,v)),v!==void 0){var c=g(v);return c===P?void 0:c}return Reflect.get(f,o,u)},getOwnPropertyDescriptor(f,o){var u=Reflect.getOwnPropertyDescriptor(f,o);if(u&&"value"in u){var v=n.get(o);v&&(u.value=g(v))}else if(u===void 0){var p=n.get(o),c=p==null?void 0:p.v;if(p!==void 0&&c!==P)return{enumerable:!0,configurable:!0,value:c,writable:!0}}return u},has(f,o){var c;if(o===Kt)return!0;var u=n.get(o),v=u!==void 0&&u.v!==P||Reflect.has(f,o);if(u!==void 0||A!==null&&(!v||(c=Yt(f,o))!=null&&c.writable)){u===void 0&&(u=a(()=>{var d=v?rt(f[o]):P,_=I(d);return _}),n.set(o,u));var p=g(u);if(p===P)return!1}return v},set(f,o,u,v){var M;var p=n.get(o),c=o in f;if(r&&o==="length")for(var d=u;d<p.v;d+=1){var _=n.get(d+"");_!==void 0?F(_,P):d in f&&(_=a(()=>I(P)),n.set(d+"",_))}if(p===void 0)(!c||(M=Yt(f,o))!=null&&M.writable)&&(p=a(()=>I(void 0)),F(p,rt(u)),n.set(o,p));else{c=p.v!==P;var m=a(()=>rt(u));F(p,m)}var h=Reflect.getOwnPropertyDescriptor(f,o);if(h!=null&&h.set&&h.set.call(v,u),!c){if(r&&typeof o=="string"){var S=n.get("length"),z=Number(o);Number.isInteger(z)&&z>=S.v&&F(S,z+1)}Zt(s)}return!0},ownKeys(f){g(s);var o=Reflect.ownKeys(f).filter(p=>{var c=n.get(p);return c===void 0||c.v!==P});for(var[u,v]of n)v.v!==P&&!(u in f)&&o.push(u);return o},setPrototypeOf(){xi()}})}function Ar(e){try{if(e!==null&&typeof e=="object"&&Kt in e)return e[Kt]}catch{}return e}function tl(e,t){return Object.is(Ar(e),Ar(t))}var Cr,vs,ds,hs;function nl(){if(Cr===void 0){Cr=window,vs=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;ds=Yt(t,"firstChild").get,hs=Yt(t,"nextSibling").get,kr(e)&&(e[Hn]=void 0,e[mi]=null,e[Un]=void 0,e.__e=void 0),kr(n)&&(n[Bt]=void 0)}}function We(e=""){return document.createTextNode(e)}function qn(e){return ds.call(e)}function ln(e){return hs.call(e)}function x(e,t){return qn(e)}function rl(e,t=!1){{var n=qn(e);return n instanceof Comment&&n.data===""?ln(n):n}}function q(e,t=1,n=!1){let r=e;for(;t--;)r=ln(r);return r}function sl(e){e.textContent=""}function _s(){return!1}function il(e,t,n){return n?document.createElement(e,{is:n}):document.createElement(e)}let Or=!1;function ll(){Or||(Or=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var t;if(!e.defaultPrevented)for(const n of e.target.elements)(t=n[_n])==null||t.call(n)})},{capture:!0}))}function lr(e){var t=T,n=A;me(null),Re(null);try{return e()}finally{me(t),Re(n)}}function ps(e,t,n,r=n){e.addEventListener(t,()=>lr(n));const s=e[_n];s?e[_n]=()=>{s(),r(!0)}:e[_n]=()=>r(!0),ll()}function al(e){A===null&&(T===null&&Si(),Ei()),Ze&&yi()}function ol(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function $e(e,t){var n=A;n!==null&&(n.f&Q)!==0&&(e|=Q);var r={ctx:re,deps:null,nodes:null,f:e|$|pe,first:null,fn:t,last:null,next:null,parent:n,b:n&&n.b,prev:null,teardown:null,wv:0,ac:null};w==null||w.register_created_effect(r);var s=r;if((e&Ot)!==0)yt!==null?yt.push(r):pt.ensure().schedule(r);else if(t!==null){try{Dt(r)}catch(a){throw se(r),a}s.deps===null&&s.teardown===null&&s.nodes===null&&s.first===s.last&&(s.f&Pt)===0&&(s=s.first,(e&ke)!==0&&(e&Mt)!==0&&s!==null&&(s.f|=Mt))}if(s!==null&&(s.parent=n,n!==null&&ol(s,n),T!==null&&(T.f&V)!==0&&(e&Je)===0)){var i=T;(i.effects??(i.effects=[])).push(s)}return r}function ar(){return T!==null&&!qe}function gs(e){const t=$e(Mn,null);return N(t,j),t.teardown=e,t}function fl(e){al();var t=A.f,n=!T&&(t&xe)!==0&&re!==null&&!re.i;if(n){var r=re;(r.e??(r.e=[])).push(e)}else return ms(e)}function ms(e){return $e(Ot|gi,e)}function ul(e){pt.ensure();const t=$e(Je|Pt,e);return(n={})=>new Promise(r=>{n.outro?dt(t,()=>{se(t),r(void 0)}):(se(t),r(void 0))})}function cl(e){return $e(Ot,e)}function vl(e){return $e(Et|Pt,e)}function ws(e,t=0){return $e(Mn|t,e)}function He(e,t=[],n=[],r=[]){Hi(r,t,n,s=>{$e(Mn,()=>{e(...s.map(g))})})}function or(e,t=0){var n=$e(ke|t,e);return n}function _e(e){return $e(xe|Pt,e)}function bs(e){var t=e.teardown;if(t!==null){const n=Ze,r=T;Mr(!0),me(null);try{t.call(null)}finally{Mr(n),me(r)}}}function fr(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const s=n.ac;s!==null&&lr(()=>{s.abort(Fn)});var r=n.next;(n.f&Je)!==0?n.parent=null:se(n,t),n=r}}function dl(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&xe)===0&&se(t),t=n}}function se(e,t=!0){var n=!1;(t||(e.f&pi)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(hl(e.nodes.start,e.nodes.end),n=!0),e.f|=qr,fr(e,t&&!n),Xt(e,0);var r=e.nodes&&e.nodes.t;if(r!==null)for(const i of r)i.stop();bs(e),e.f^=qr,e.f|=ge;var s=e.parent;s!==null&&s.first!==null&&ys(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=e.b=null}function hl(e,t){for(;e!==null;){var n=e===t?null:ln(e);e.remove(),e=n}}function ys(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function dt(e,t,n=!0){var r=[];Es(e,r,!0);var s=()=>{n&&se(e),t&&t()},i=r.length;if(i>0){var a=()=>--i||s();for(var f of r)f.out(a)}else s()}function Es(e,t,n){if((e.f&Q)===0){e.f^=Q;var r=e.nodes&&e.nodes.t;if(r!==null)for(const f of r)(f.is_global||n)&&t.push(f);for(var s=e.first;s!==null;){var i=s.next;if((s.f&Je)===0){var a=(s.f&Mt)!==0||(s.f&xe)!==0&&(e.f&ke)!==0;Es(s,t,a?n:!1)}s=i}}}function xn(e){Ss(e,!0)}function Ss(e,t){if((e.f&Q)!==0){e.f^=Q,(e.f&j)===0&&(N(e,$),pt.ensure().schedule(e));for(var n=e.first;n!==null;){var r=n.next,s=(n.f&Mt)!==0||(n.f&xe)!==0;Ss(n,s?t:!1),n=r}var i=e.nodes&&e.nodes.t;if(i!==null)for(const a of i)(a.is_global||t)&&a.in()}}function ur(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var s=n===r?null:ln(n);t.append(n),n=s}}let wn=!1,Ze=!1;function Mr(e){Ze=e}let T=null,qe=!1;function me(e){T=e}let A=null;function Re(e){A=e}let Me=null;function _l(e){T!==null&&(Me??(Me=new Set)).add(e)}let ne=null,le=0,ce=null;function pl(e){ce=e}let ks=1,st=0,ht=st;function Fr(e){ht=e}function qs(){return++ks}function an(e){var t=e.f;if((t&$)!==0)return!0;if(t&V&&(e.f&=~_t),(t&Fe)!==0){for(var n=e.deps,r=n.length,s=0;s<r;s++){var i=n[s];if(an(i)&&rs(i),i.wv>e.wv)return!0}(t&pe)!==0&&U===null&&N(e,j)}return!1}function xs(e,t,n=!0){var r=e.reactions;if(r!==null&&!(Me!==null&&Me.has(e)))for(var s=0;s<r.length;s++){var i=r[s];(i.f&V)!==0?xs(i,t,!1):t===i&&(n?N(i,$):(i.f&j)!==0&&N(i,Fe),ir(i))}}function Ts(e){var m;var t=ne,n=le,r=ce,s=T,i=Me,a=re,f=qe,o=ht,u=e.f;ne=null,le=0,ce=null,T=(u&(xe|Je))===0?e:null,Me=null,Ft(e.ctx),qe=!1,ht=++st,e.ac!==null&&(lr(()=>{e.ac.abort(Fn)}),e.ac=null);try{e.f|=En;var v=e.fn,p=v();e.f|=Nt;var c=e.deps,d=w==null?void 0:w.is_fork;if(ne!==null){var _;if(d||Xt(e,le),c!==null&&le>0)for(c.length=le+ne.length,_=0;_<ne.length;_++)c[le+_]=ne[_];else e.deps=c=ne;if(ar()&&(e.f&pe)!==0)for(_=le;_<c.length;_++)((m=c[_]).reactions??(m.reactions=[])).push(e)}else!d&&c!==null&&le<c.length&&(Xt(e,le),c.length=le);if(Jr()&&ce!==null&&!qe&&c!==null&&(e.f&(V|Fe|$))===0)for(_=0;_<ce.length;_++)xs(ce[_],e);if(s!==null&&s!==e){if(st++,s.deps!==null)for(let h=0;h<n;h+=1)s.deps[h].rv=st;if(t!==null)for(const h of t)h.rv=st;ce!==null&&(r===null?r=ce:r.push(...ce))}return(e.f&Ke)!==0&&(e.f^=Ke),p}catch(h){return Qr(h)}finally{e.f^=En,ne=t,le=n,ce=r,T=s,Me=i,Ft(a),qe=f,ht=o}}function gl(e,t){let n=t.reactions;if(n!==null){var r=fi.call(n,e);if(r!==-1){var s=n.length-1;s===0?n=t.reactions=null:(n[r]=n[s],n.pop())}}if(n===null&&(t.f&V)!==0&&(ne===null||!bn.call(ne,t))){var i=t;(i.f&pe)!==0&&(i.f^=pe,i.f&=~_t),i.v!==P&&nr(i),Ki(i),Xt(i,0)}}function Xt(e,t){var n=e.deps;if(n!==null)for(var r=t;r<n.length;r++)gl(e,n[r])}function Dt(e){var t=e.f;if((t&ge)===0){N(e,j);var n=A,r=wn;A=e,wn=!0;try{(t&(ke|Vr))!==0?dl(e):fr(e),bs(e);var s=Ts(e);e.teardown=typeof s=="function"?s:null,e.wv=ks;var i;Hr&&Ri&&(e.f&$)!==0&&e.deps}finally{wn=r,A=n}}}async function ml(){await Promise.resolve(),Zi()}function g(e){var t=e.f,n=(t&V)!==0;if(T!==null&&!qe){var r=A!==null&&(A.f&ge)!==0;if(!r&&(Me===null||!Me.has(e))){var s=T.deps;if((T.f&En)!==0)e.rv<st&&(e.rv=st,ne===null&&s!==null&&s[le]===e?le++:ne===null?ne=[e]:ne.push(e));else{T.deps??(T.deps=[]),bn.call(T.deps,e)||T.deps.push(e);var i=e.reactions;i===null?e.reactions=[T]:bn.call(i,T)||i.push(T)}}}if(Ze&&vt.has(e))return vt.get(e);if(n){var a=e;if(Ze){var f=a.v;return((a.f&j)===0&&a.reactions!==null||Cs(a))&&(f=rr(a)),vt.set(a,f),f}var o=(a.f&pe)===0&&!qe&&T!==null&&(wn||(T.f&pe)!==0),u=(a.f&Nt)===0;an(a)&&(o&&(a.f|=pe),rs(a)),o&&!u&&(ss(a),As(a))}if(U!=null&&U.has(e))return U.get(e);if((e.f&Ke)!==0)throw e.v;return e.v}function As(e){if(e.f|=pe,e.deps!==null)for(const t of e.deps)(t.reactions??(t.reactions=[])).push(e),(t.f&V)!==0&&(t.f&pe)===0&&(ss(t),As(t))}function Cs(e){if(e.v===P)return!0;if(e.deps===null)return!1;for(const t of e.deps)if(vt.has(t)||(t.f&V)!==0&&Cs(t))return!0;return!1}function Os(e){var t=qe;try{return qe=!0,e()}finally{qe=t}}const it=Symbol("events"),Ms=new Set,Zn=new Set;function tt(e,t,n){(t[it]??(t[it]={}))[e]=n}function wl(e){for(var t=0;t<e.length;t++)Ms.add(e[t]);for(var n of Zn)n(e)}let Rr=null;function Dr(e){var m,h;var t=this,n=t.ownerDocument,r=e.type,s=((m=e.composedPath)==null?void 0:m.call(e))||[],i=s[0]||e.target;Rr=e;var a=0,f=Rr===e&&e[it];if(f){var o=s.indexOf(f);if(o!==-1&&(t===document||t===window)){e[it]=t;return}var u=s.indexOf(t);if(u===-1)return;o<=u&&(a=o)}if(i=s[a]||e.target,i!==t){ui(e,"currentTarget",{configurable:!0,get(){return i||n}});var v=T,p=A;me(null),Re(null);try{for(var c,d=[];i!==null&&i!==t;){try{var _=(h=i[it])==null?void 0:h[r];_!=null&&(!i.disabled||e.target===i)&&_.call(i,e)}catch(S){c?d.push(S):c=S}if(e.cancelBubble)break;a++,i=a<s.length?s[a]:null}if(c){for(let S of d)queueMicrotask(()=>{throw S});throw c}}finally{e[it]=t,delete e.currentTarget,me(v),Re(p)}}}var zr;const In=((zr=globalThis==null?void 0:globalThis.window)==null?void 0:zr.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function bl(e){return(In==null?void 0:In.createHTML(e))??e}function yl(e){var t=il("template");return t.innerHTML=bl(e.replaceAll("<!>","<!---->")),t.content}function Qn(e,t){var n=A;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function fe(e,t){var n=(t&ai)!==0,r=(t&oi)!==0,s,i=!e.startsWith("<!>");return()=>{s===void 0&&(s=yl(i?e:"<!>"+e),n||(s=qn(s)));var a=r||vs?document.importNode(s,!0):s.cloneNode(!0);if(n){var f=qn(a),o=a.lastChild;Qn(f,o)}else Qn(a,a);return a}}function Nr(e=""){{var t=We(e+"");return Qn(t,t),t}}function J(e,t){e!==null&&e.before(t)}const El=["touchstart","touchmove"];function Sl(e){return El.includes(e)}function X(e,t){var n=t==null?"":typeof t=="object"?`${t}`:t;n!==(e[Bt]??(e[Bt]=e.nodeValue))&&(e[Bt]=n,e.nodeValue=`${n}`)}function kl(e,t){return ql(e,t)}const hn=new Map;function ql(e,{target:t,anchor:n,props:r={},events:s,context:i,intro:a=!0,transformError:f}){nl();var o=void 0,u=ul(()=>{var v=n??t.appendChild(We());ji(v,{pending:()=>{}},d=>{Kr({});var _=re;i&&(_.c=i),s&&(r.$$events=s),o=e(d,r)||{},Wr()},f);var p=new Set,c=d=>{for(var _=0;_<d.length;_++){var m=d[_];if(!p.has(m)){p.add(m);var h=Sl(m);for(const M of[t,document]){var S=hn.get(M);S===void 0&&(S=new Map,hn.set(M,S));var z=S.get(m);z===void 0?(M.addEventListener(m,Dr,{passive:h}),S.set(m,1)):S.set(m,z+1)}}}};return c(On(Ms)),Zn.add(c),()=>{var h;for(var d of p)for(const S of[t,document]){var _=hn.get(S),m=_.get(d);--m==0?(S.removeEventListener(d,Dr),_.delete(d),_.size===0&&hn.delete(S)):_.set(d,m)}Zn.delete(c),v!==n&&((h=v.parentNode)==null||h.removeChild(v))}});return xl.set(o,u),o}let xl=new WeakMap;var Se,Ce,oe,ut,rn,sn,Cn;class Tl{constructor(t,n=!0){ie(this,"anchor");k(this,Se,new Map);k(this,Ce,new Map);k(this,oe,new Map);k(this,ut,new Set);k(this,rn,!0);k(this,sn,t=>{if(l(this,Se).has(t)){var n=l(this,Se).get(t),r=l(this,Ce).get(n);if(r)xn(r),l(this,ut).delete(n);else{var s=l(this,oe).get(n);s&&(xn(s.effect),l(this,Ce).set(n,s.effect),l(this,oe).delete(n),s.fragment.lastChild.remove(),this.anchor.before(s.fragment),r=s.effect)}for(const[i,a]of l(this,Se)){if(l(this,Se).delete(i),i===t)break;const f=l(this,oe).get(a);f&&(se(f.effect),l(this,oe).delete(a))}for(const[i,a]of l(this,Ce)){if(i===n||l(this,ut).has(i))continue;const f=()=>{if(Array.from(l(this,Se).values()).includes(i)){var u=document.createDocumentFragment();ur(a,u),u.append(We()),l(this,oe).set(i,{effect:a,fragment:u})}else se(a);l(this,ut).delete(i),l(this,Ce).delete(i)};l(this,rn)||!r?(l(this,ut).add(i),dt(a,f,!1)):f()}}});k(this,Cn,t=>{l(this,Se).delete(t);const n=Array.from(l(this,Se).values());for(const[r,s]of l(this,oe))n.includes(r)||(se(s.effect),l(this,oe).delete(r))});this.anchor=t,E(this,rn,n)}ensure(t,n){var r=w,s=_s();if(n&&!l(this,Ce).has(t)&&!l(this,oe).has(t))if(s){var i=document.createDocumentFragment(),a=We();i.append(a),l(this,oe).set(t,{effect:_e(()=>n(a)),fragment:i})}else l(this,Ce).set(t,_e(()=>n(this.anchor)));if(l(this,Se).set(r,t),s){for(const[f,o]of l(this,Ce))f===t?r.unskip_effect(o):r.skip_effect(o);for(const[f,o]of l(this,oe))f===t?r.unskip_effect(o.effect):r.skip_effect(o.effect);r.oncommit(l(this,sn)),r.ondiscard(l(this,Cn))}else l(this,sn).call(this,r)}}Se=new WeakMap,Ce=new WeakMap,oe=new WeakMap,ut=new WeakMap,rn=new WeakMap,sn=new WeakMap,Cn=new WeakMap;function Te(e,t,n=!1){var r=new Tl(e),s=n?Mt:0;function i(a,f){r.ensure(a,f)}or(()=>{var a=!1;t((f,o=0)=>{a=!0,i(o,f)}),a||i(-1,null)},s)}function Pr(e,t){return t}function Al(e,t,n){for(var r=[],s=t.length,i,a=t.length,f=0;f<s;f++){let p=t[f];dt(p,()=>{if(i){if(i.pending.delete(p),i.done.add(p),i.pending.size===0){var c=e.outrogroups;Xn(e,On(i.done)),c.delete(i),c.size===0&&(e.outrogroups=null)}}else a-=1},!1)}if(a===0){var o=r.length===0&&n!==null;if(o){var u=n,v=u.parentNode;sl(v),v.append(u),e.items.clear()}Xn(e,t,!o)}else i={pending:new Set(t),done:new Set},(e.outrogroups??(e.outrogroups=new Set)).add(i)}function Xn(e,t,n=!0){var r;if(e.pending.size>0){r=new Set;for(const a of e.pending.values())for(const f of a)r.add(e.items.get(f).e)}for(var s=0;s<t.length;s++){var i=t[s];if(r!=null&&r.has(i)){i.f|=Oe;const a=document.createDocumentFragment();ur(i,a)}else se(t[s],n)}}var Ir;function jr(e,t,n,r,s,i=null){var a=e,f=new Map,o=(t&Br)!==0;if(o){var u=e;a=u.appendChild(We())}var v=null,p=Gi(()=>{var M=n();return tr(M)?M:M==null?[]:On(M)}),c,d=new Map,_=!0;function m(M){(z.effect.f&ge)===0&&(z.pending.delete(M),z.fallback=v,Cl(z,c,a,t,r),v!==null&&(c.length===0?(v.f&Oe)===0?xn(v):(v.f^=Oe,Gt(v,null,a)):dt(v,()=>{v=null})))}function h(M){z.pending.delete(M)}var S=or(()=>{c=g(p);for(var M=c.length,K=new Set,ue=w,De=_s(),G=0;G<M;G+=1){var Ne=c[G],ze=r(Ne,G),W=_?null:f.get(ze);W?(W.v&&Rt(W.v,Ne),W.i&&Rt(W.i,G),De&&ue.unskip_effect(W.e)):(W=Ol(f,_?a:Ir??(Ir=We()),Ne,ze,G,s,t,n),_||(W.e.f|=Oe),f.set(ze,W)),K.add(ze)}if(M===0&&i&&!v&&(_?v=_e(()=>i(a)):(v=_e(()=>i(Ir??(Ir=We()))),v.f|=Oe)),M>K.size&&bi(),!_)if(d.set(ue,K),De){for(const[Qe,mt]of f)K.has(Qe)||ue.skip_effect(mt.e);ue.oncommit(m),ue.ondiscard(h)}else m(ue);g(p)}),z={effect:S,items:f,pending:d,outrogroups:null,fallback:v};_=!1}function zt(e){for(;e!==null&&(e.f&xe)===0;)e=e.next;return e}function Cl(e,t,n,r,s){var W,Qe,mt,on,fn,un,It,cn,jt;var i=(r&ii)!==0,a=t.length,f=e.items,o=zt(e.effect.first),u,v=null,p,c=[],d=[],_,m,h,S;if(i)for(S=0;S<a;S+=1)_=t[S],m=s(_,S),h=f.get(m).e,(h.f&Oe)===0&&((Qe=(W=h.nodes)==null?void 0:W.a)==null||Qe.measure(),(p??(p=new Set)).add(h));for(S=0;S<a;S+=1){if(_=t[S],m=s(_,S),h=f.get(m).e,e.outrogroups!==null)for(const we of e.outrogroups)we.pending.delete(h),we.done.delete(h);if((h.f&Q)!==0&&(xn(h),i&&((on=(mt=h.nodes)==null?void 0:mt.a)==null||on.unfix(),(p??(p=new Set)).delete(h))),(h.f&Oe)!==0)if(h.f^=Oe,h===o)Gt(h,null,n);else{var z=v?v.next:o;h===e.effect.last&&(e.effect.last=h.prev),h.prev&&(h.prev.next=h.next),h.next&&(h.next.prev=h.prev),Ue(e,v,h),Ue(e,h,z),Gt(h,z,n),v=h,c=[],d=[],o=zt(v.next);continue}if(h!==o){if(u!==void 0&&u.has(h)){if(c.length<d.length){var M=d[0],K;v=M.prev;var ue=c[0],De=c[c.length-1];for(K=0;K<c.length;K+=1)Gt(c[K],M,n);for(K=0;K<d.length;K+=1)u.delete(d[K]);Ue(e,ue.prev,De.next),Ue(e,v,ue),Ue(e,De,M),o=M,v=De,S-=1,c=[],d=[]}else u.delete(h),Gt(h,o,n),Ue(e,h.prev,h.next),Ue(e,h,v===null?e.effect.first:v.next),Ue(e,v,h),v=h;continue}for(c=[],d=[];o!==null&&o!==h;)(u??(u=new Set)).add(o),d.push(o),o=zt(o.next);if(o===null)continue}(h.f&Oe)===0&&c.push(h),v=h,o=zt(h.next)}if(e.outrogroups!==null){for(const we of e.outrogroups)we.pending.size===0&&(Xn(e,On(we.done)),(fn=e.outrogroups)==null||fn.delete(we));e.outrogroups.size===0&&(e.outrogroups=null)}if(o!==null||u!==void 0){var G=[];if(u!==void 0)for(h of u)(h.f&Q)===0&&G.push(h);for(;o!==null;)(o.f&Q)===0&&o!==e.fallback&&G.push(o),o=zt(o.next);var Ne=G.length;if(Ne>0){var ze=(r&Br)!==0&&a===0?n:null;if(i){for(S=0;S<Ne;S+=1)(It=(un=G[S].nodes)==null?void 0:un.a)==null||It.measure();for(S=0;S<Ne;S+=1)(jt=(cn=G[S].nodes)==null?void 0:cn.a)==null||jt.fix()}Al(e,G,ze)}}i&&ct(()=>{var we,Lt;if(p!==void 0)for(h of p)(Lt=(we=h.nodes)==null?void 0:we.a)==null||Lt.apply()})}function Ol(e,t,n,r,s,i,a,f){var o=(a&ri)!==0?(a&li)===0?Xi(n,!1,!1):gt(n):null,u=(a&si)!==0?gt(s):null;return{v:o,i:u,e:_e(()=>(i(t,o??n,u??s,f),()=>{e.delete(r)}))}}function Gt(e,t,n){if(e.nodes)for(var r=e.nodes.start,s=e.nodes.end,i=t&&(t.f&Oe)===0?t.nodes.start:n;r!==null;){var a=ln(r);if(i.before(r),r===s)return;r=a}}function Ue(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}const Lr=[...`
|
|
2
|
+
\r\f \v\uFEFF`];function Ml(e,t,n){var r=e==null?"":""+e;if(t&&(r=r?r+" "+t:t),n){for(var s of Object.keys(n))if(n[s])r=r?r+" "+s:s;else if(r.length)for(var i=s.length,a=0;(a=r.indexOf(s,a))>=0;){var f=a+i;(a===0||Lr.includes(r[a-1]))&&(f===r.length||Lr.includes(r[f]))?r=(a===0?"":r.substring(0,a))+r.substring(f+1):a=f}}return r===""?null:r}function Fl(e,t){return e==null?null:String(e)}function jn(e,t,n,r,s,i){var a=e[Hn];if(a!==n||a===void 0){var f=Ml(n,r,i);f==null?e.removeAttribute("class"):e.className=f,e[Hn]=n}else if(i&&s!==i)for(var o in i){var u=!!i[o];(s==null||u!==!!s[o])&&e.classList.toggle(o,u)}return i}function Rl(e,t,n,r){var s=e[Un];if(s!==t){var i=Fl(t);i==null?e.removeAttribute("style"):e.style.cssText=i,e[Un]=t}return r}function Fs(e,t,n=!1){if(e.multiple){if(t==null)return;if(!tr(t))return Oi();for(var r of e.options)r.selected=t.includes(Qt(r));return}for(r of e.options){var s=Qt(r);if(tl(s,t)){r.selected=!0;return}}(!n||t!==void 0)&&(e.selectedIndex=-1)}function Dl(e){var t=new MutationObserver(()=>{Fs(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),gs(()=>{t.disconnect()})}function Nl(e,t,n=t){var r=new WeakSet,s=!0;ps(e,"change",i=>{var a=i?"[selected]":":checked",f;if(e.multiple)f=[].map.call(e.querySelectorAll(a),Qt);else{var o=e.querySelector(a)??e.querySelector("option:not([disabled])");f=o&&Qt(o)}n(f),e.__value=f,w!==null&&r.add(w)}),cl(()=>{var i=t();if(e===document.activeElement){var a=w;if(r.has(a))return}if(Fs(e,i,s),s&&i===void 0){var f=e.querySelector(":checked");f!==null&&(i=Qt(f),n(i))}e.__value=i,s=!1}),Dl(e)}function Qt(e){return"__value"in e?e.__value:e.value}function Ln(e,t,n=t){var r=new WeakSet;ps(e,"input",async s=>{var i=s?e.defaultValue:e.value;if(i=$n(e)?zn(i):i,n(i),w!==null&&r.add(w),await ml(),i!==(i=t())){var a=e.selectionStart,f=e.selectionEnd,o=e.value.length;if(e.value=i??"",f!==null){var u=e.value.length;a===f&&f===o&&u>o?(e.selectionStart=u,e.selectionEnd=u):(e.selectionStart=a,e.selectionEnd=Math.min(f,u))}}}),Os(t)==null&&e.value&&(n($n(e)?zn(e.value):e.value),w!==null&&r.add(w)),ws(()=>{var s=t();if(e===document.activeElement){var i=w;if(r.has(i))return}$n(e)&&s===zn(e.value)||e.type==="date"&&!s&&!e.value||s!==e.value&&(e.value=s??"")})}function $n(e){var t=e.type;return t==="number"||t==="range"}function zn(e){return e===""?null:+e}var Pl=fe('<span class="dim svelte-1n46o8q"> </span>'),Il=fe('<div class="error svelte-1n46o8q"> </div>'),jl=fe(`<div class="card settings-card svelte-1n46o8q"><h3 class="svelte-1n46o8q">Configuration</h3> <label class="svelte-1n46o8q"><span class="lbl svelte-1n46o8q">Watch Folder</span> <input type="text" placeholder="/home/user/astro/tonight" class="svelte-1n46o8q"/></label> <label class="svelte-1n46o8q"><span class="lbl svelte-1n46o8q">Cloud Storage</span> <select class="svelte-1n46o8q"><option>Google Drive</option><option disabled="">OneDrive (coming soon)</option><option disabled="">Dropbox (coming soon)</option></select></label> <label class="svelte-1n46o8q"><span class="lbl svelte-1n46o8q">Cloud Folder ID</span> <input type="text" placeholder="Google Drive folder ID" class="svelte-1n46o8q"/> <small class="svelte-1n46o8q">Paste the folder ID from your dashboard's Cloud Storage page</small></label> <label class="svelte-1n46o8q"><span class="lbl svelte-1n46o8q">API Key</span> <input type="password" placeholder="siril_sk_..." class="svelte-1n46o8q"/> <small class="svelte-1n46o8q">Generate in your web dashboard at /keys</small></label> <!> <div class="settings-actions svelte-1n46o8q"><button class="btn-secondary svelte-1n46o8q">Cancel</button> <button class="btn-primary svelte-1n46o8q">Save</button></div></div>`),Ll=fe('<button class="btn-primary danger svelte-1n46o8q">Stop & Stack</button>'),$l=fe('<button class="btn-primary svelte-1n46o8q">Start Watching</button>'),zl=fe('<button class="btn-primary svelte-1n46o8q"><!></button>'),Bl=fe('<div class="progress-bar svelte-1n46o8q"><div class="progress-fill svelte-1n46o8q"></div></div> <div class="dim small svelte-1n46o8q"> </div>',1),Hl=fe('<div class="card svelte-1n46o8q"><h3 class="svelte-1n46o8q">Activity</h3> <!></div>'),Ul=fe('<div class="history-row svelte-1n46o8q"><span class="file-name svelte-1n46o8q"> </span> <span> </span> <span class="dim small svelte-1n46o8q"> </span></div>'),Vl=fe('<div class="card svelte-1n46o8q"><h3 class="svelte-1n46o8q">Recent Uploads</h3> <div class="history-list svelte-1n46o8q"></div></div>'),Gl=fe('<div class="error-row svelte-1n46o8q"> </div>'),Yl=fe('<div class="card errors-card svelte-1n46o8q"><h3 style="color: var(--blush)" class="svelte-1n46o8q">Errors</h3> <!></div>'),Kl=fe('<div class="app svelte-1n46o8q"><header class="svelte-1n46o8q"><div class="logo-row svelte-1n46o8q"><div class="logo-mark svelte-1n46o8q"></div> <div><h1 class="svelte-1n46o8q">Siril Cloud Client</h1> <div class="status-row svelte-1n46o8q"><span></span> <span class="status-text svelte-1n46o8q"> </span> <!></div></div></div> <div class="header-actions svelte-1n46o8q"><button class="btn-secondary svelte-1n46o8q">Dashboard</button> <button class="btn-secondary svelte-1n46o8q">Settings</button></div></header> <!> <div class="stats-grid svelte-1n46o8q"><div class="stat-card svelte-1n46o8q"><span class="lbl svelte-1n46o8q">Total</span> <span class="val svelte-1n46o8q"> </span></div> <div class="stat-card svelte-1n46o8q"><span class="lbl svelte-1n46o8q">Uploading</span> <span class="val svelte-1n46o8q"> </span></div> <div class="stat-card svelte-1n46o8q"><span class="lbl svelte-1n46o8q">For Stack</span> <span class="val svelte-1n46o8q"> </span> <span class="lbl svelte-1n46o8q"> </span></div> <div class="stat-card svelte-1n46o8q"><span class="lbl svelte-1n46o8q">Errors</span> <span> </span></div></div> <div class="control-bar svelte-1n46o8q"><!> <!></div> <!> <!> <!></div>');function Wl(e,t){Kr(t,!0);let n=I(!1),r=I(""),s=I(""),i=I(!1),a=I("gdrive"),f=I(""),o=I(""),u=I(!1),v=I(rt({watching:!1,converting:0,uploading:0,total:0,errors:[],job_frames:0,job_bytes:0})),p=I(rt([])),c=I(!1);const d="http://localhost:9559";async function _(){try{const b=await fetch(d+"/api/status");if(b.ok){const y=await b.json();F(v,y,!0),F(n,y.watching,!0),y.watch_dir&&!g(r)&&F(r,y.watch_dir,!0)}}catch{}try{const b=await fetch(d+"/api/history");b.ok&&F(p,(await b.json()).history||[],!0)}catch{}}async function m(){F(o,"");const b=await fetch(d+"/api/configure",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({watch_dir:g(r),api_key:g(s),cloud_provider:g(a),cloud_folder_id:g(f)})}),y=await b.json();b.ok&&y.ok?(F(i,!0),F(u,!1)):F(o,y.error||"Save failed",!0)}async function h(){if(!g(i)){F(u,!0);return}(await fetch(d+"/api/start",{method:"POST"})).ok&&_()}async function S(){await fetch(d+"/api/stop",{method:"POST"}),_()}async function z(){var b;F(c,!0);try{const y=await fetch(d+"/api/submit",{method:"POST"}),D=await y.json();if(!y.ok)throw new Error(D.error||D.detail||"Failed");alert("Job submitted: "+((b=D.job)==null?void 0:b.job_id)||D.job_id),_()}catch(y){F(o,y.message,!0)}finally{F(c,!1)}}function M(b){const y=new Date(b),B=Math.floor((new Date().getTime()-y.getTime())/1e3);return B<60?`${B}s ago`:B<3600?`${Math.floor(B/60)}m ago`:B<86400?`${Math.floor(B/3600)}h ago`:`${Math.floor(B/86400)}d ago`}function K(){window.open("https://siril-web-261043368546-us-east-1.s3-website-us-east-1.amazonaws.com/cloud","_blank")}fl(()=>{const b=setInterval(_,2e3);return _(),()=>clearInterval(b)});var ue=Kl(),De=x(ue),G=x(De),Ne=q(x(G),2),ze=q(x(Ne),2),W=x(ze),Qe=q(W,2),mt=x(Qe),on=q(Qe,2);{var fn=b=>{var y=Pl(),D=x(y);He(()=>X(D,`· ${g(r)??""}`)),J(b,y)};Te(on,b=>{g(r)&&b(fn)})}var un=q(G,2),It=x(un),cn=q(It,2),jt=q(De,2);{var we=b=>{var y=jl(),D=q(x(y),2),B=q(x(D),2),H=q(D,2),L=q(x(H),2),Y=x(L);Y.value=Y.__value="gdrive";var Xe=q(Y);Xe.value=Xe.__value="onedrive";var Be=q(Xe);Be.value=Be.__value="dropbox";var et=q(H,2),$t=q(x(et),2),vn=q(et,2),Rn=q(x(vn),2),dn=q(vn,2);{var Js=be=>{var Er=Il(),Xs=x(Er);He(()=>X(Xs,g(o))),J(be,Er)};Te(dn,be=>{g(o)&&be(Js)})}var Zs=q(dn,2),yr=x(Zs),Qs=q(yr,2);Ln(B,()=>g(r),be=>F(r,be)),Nl(L,()=>g(a),be=>F(a,be)),Ln($t,()=>g(f),be=>F(f,be)),Ln(Rn,()=>g(s),be=>F(s,be)),tt("click",yr,()=>F(u,!1)),tt("click",Qs,m),J(b,y)};Te(jt,b=>{g(u)&&b(we)})}var Lt=q(jt,2),cr=x(Lt),Rs=q(x(cr),2),Ds=x(Rs),vr=q(cr,2),Ns=q(x(vr),2),Ps=x(Ns),dr=q(vr,2),hr=q(x(dr),2),Is=x(hr),js=q(hr,2),Ls=x(js),$s=q(dr,2),_r=q(x($s),2);let pr;var zs=x(_r),gr=q(Lt,2),mr=x(gr);{var Bs=b=>{var y=Ll();tt("click",y,S),J(b,y)},Hs=b=>{var y=$l();tt("click",y,h),J(b,y)};Te(mr,b=>{g(n)?b(Bs):b(Hs,-1)})}var Us=q(mr,2);{var Vs=b=>{var y=zl(),D=x(y);{var B=L=>{var Y=Nr("Submitting...");J(L,Y)},H=L=>{var Y=Nr();He(()=>X(Y,`Submit ${g(v).job_frames??""} Frames`)),J(L,Y)};Te(D,L=>{g(c)?L(B):L(H,-1)})}He(()=>y.disabled=g(c)),tt("click",y,z),J(b,y)};Te(Us,b=>{!g(n)&&(g(v).job_frames||0)>=5&&b(Vs)})}var wr=q(gr,2);{var Gs=b=>{var y=Hl(),D=q(x(y),2);{var B=H=>{var L=Bl(),Y=rl(L),Xe=x(Y),Be=q(Y,2),et=x(Be);He($t=>{Rl(Xe,`width: ${$t??""}%`),X(et,`${g(v).converting??""} converting, ${g(v).uploading??""} uploading`)},[()=>Math.min(100,(g(v).converting+g(v).uploading)/Math.max(1,g(v).total)*100)]),J(H,L)};Te(D,H=>{(g(v).converting||0)+(g(v).uploading||0)>0&&H(B)})}J(b,y)};Te(wr,b=>{(g(v).total||0)>0&&b(Gs)})}var br=q(wr,2);{var Ys=b=>{var y=Vl(),D=q(x(y),2);jr(D,21,()=>g(p).slice(0,20),Pr,(B,H)=>{var L=Ul(),Y=x(L),Xe=x(Y),Be=q(Y,2);let et;var $t=x(Be),vn=q(Be,2),Rn=x(vn);He(dn=>{X(Xe,g(H).path||g(H).file),et=jn(Be,1,"status-tag svelte-1n46o8q",null,et,{ok:g(H).status==="ok",err:g(H).status==="error"}),X($t,g(H).status),X(Rn,dn)},[()=>M(g(H).time)]),J(B,L)}),J(b,y)};Te(br,b=>{g(p).length>0&&b(Ys)})}var Ks=q(br,2);{var Ws=b=>{var y=Yl(),D=q(x(y),2);jr(D,17,()=>g(v).errors.slice(-10),Pr,(B,H)=>{var L=Gl(),Y=x(L);He(()=>X(Y,g(H))),J(B,L)}),J(b,y)};Te(Ks,b=>{var y;(((y=g(v).errors)==null?void 0:y.length)||0)>0&&b(Ws)})}He(b=>{var y,D;jn(W,1,`dot ${g(n)?"on":"off"}`,"svelte-1n46o8q"),X(mt,g(n)?"Watching":"Stopped"),X(Ds,g(v).total||0),X(Ps,g(v).uploading||0),X(Is,g(v).job_frames||0),X(Ls,`${b??""} GB`),pr=jn(_r,1,"val svelte-1n46o8q",null,pr,{"error-val":(((y=g(v).errors)==null?void 0:y.length)||0)>0}),X(zs,((D=g(v).errors)==null?void 0:D.length)||0)},[()=>(g(v).job_bytes/1024/1024/1024).toFixed(1)||"0"]),tt("click",It,K),tt("click",cn,()=>F(u,!g(u))),J(e,ue),Wr()}wl(["click"]);kl(Wl,{target:document.getElementById("app")});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@font-face{font-family:GT America Extended Bold;src:url(https://framerusercontent.com/assets/TuO3NJNVZj5Vv558NOmvyxcELE0.woff2) format("woff2");font-weight:700;font-display:swap}@font-face{font-family:GT America Black;src:url(https://framerusercontent.com/assets/NINDbh9LPQD1N7dM5iI06r6Go.woff2) format("woff2");font-weight:900;font-display:swap}:root{--void: #000000;--void-soft: #0D0D0D;--electric: #1A04FF;--electric-bright: #4D3AFF;--blush: #FFADAD;--font-sans: "Space Grotesk", sans-serif;--font-heading: "GT America Black", "Arial Black", sans-serif;--ease: cubic-bezier(.25, .46, .45, .94)}*{margin:0;padding:0;box-sizing:border-box}body{background:var(--void);color:#fff;font-family:var(--font-sans);-webkit-font-smoothing:antialiased}h1{font-family:var(--font-heading);text-transform:uppercase;letter-spacing:-2px;font-size:28px;line-height:1}.glass-card{background:#ffffff08;border:1px solid rgba(255,255,255,.08);border-radius:12px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.glass-card-blue{background:#1a04ff14;border:1px solid rgba(26,4,255,.2);border-radius:12px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 0 40px #1a04ff1a}.btn{background:var(--electric);color:#fff;border:none;border-radius:6px;padding:10px 24px;font-family:var(--font-sans);font-size:14px;font-weight:500;cursor:pointer;transition:box-shadow .3s,transform .3s}.btn:hover{box-shadow:0 0 30px #1a04ff66;transform:translateY(-1px)}.btn:disabled{opacity:.4;cursor:default;transform:none;box-shadow:none}input,select{width:100%;background:#ffffff08;border:1px solid rgba(255,255,255,.1);border-radius:6px;padding:10px;color:#fff;font-family:var(--font-sans);font-size:13px}input:focus,select:focus{border-color:var(--electric);outline:none;box-shadow:0 0 20px #1a04ff1a}label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:1.5px;color:#fff6;margin-bottom:4px}.dot{width:10px;height:10px;border-radius:50%;display:inline-block}.dot-on{background:var(--electric);box-shadow:0 0 10px #1a04ff99}.dot-off{background:#ffffff26}body{margin:0;background:var(--void, #050507);color:#fff;font-family:var(--font-body, system-ui, sans-serif)}.app.svelte-1n46o8q{max-width:640px;margin:0 auto;padding:32px 24px;display:flex;flex-direction:column;gap:16px}header.svelte-1n46o8q{display:flex;justify-content:space-between;align-items:flex-start}.logo-row.svelte-1n46o8q{display:flex;gap:12px;align-items:center}.logo-mark.svelte-1n46o8q{width:36px;height:36px;border-radius:8px;background:var(--electric, #1A04FF);box-shadow:0 0 20px #1a04ff4d}h1.svelte-1n46o8q{font-family:var(--font-heading, system-ui, sans-serif);text-transform:uppercase;letter-spacing:-.5px;font-size:20px;font-weight:600;margin:0}.status-row.svelte-1n46o8q{display:flex;align-items:center;gap:6px;margin-top:4px;font-size:12px;color:#ffffff80}.dot.svelte-1n46o8q{width:8px;height:8px;border-radius:50%}.dot.on.svelte-1n46o8q{background:#10b981;box-shadow:0 0 8px #10b981}.dot.off.svelte-1n46o8q{background:#fff3}.status-text.svelte-1n46o8q{color:#ffffffb3;font-weight:500}.dim.svelte-1n46o8q{color:#ffffff4d;font-size:11px}.small.svelte-1n46o8q{font-size:11px}.header-actions.svelte-1n46o8q{display:flex;gap:8px}.btn-secondary.svelte-1n46o8q,.btn-primary.svelte-1n46o8q{border:none;border-radius:6px;padding:8px 14px;font-size:13px;font-weight:500;cursor:pointer;transition:all .15s ease}.btn-secondary.svelte-1n46o8q{background:#ffffff0d;color:#ffffffb3}.btn-secondary.svelte-1n46o8q:hover{background:#ffffff1a;color:#fff}.btn-primary.svelte-1n46o8q{background:var(--electric, #1A04FF);color:#fff}.btn-primary.svelte-1n46o8q:hover{box-shadow:0 0 16px #1a04ff80}.btn-primary.danger.svelte-1n46o8q{background:#ef4444}.btn-primary.danger.svelte-1n46o8q:hover{box-shadow:0 0 16px #ef444480}.card.svelte-1n46o8q{background:#ffffff05;border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:20px}h3.svelte-1n46o8q{font-size:14px;font-weight:500;margin:0 0 16px;color:#fffc}.settings-card.svelte-1n46o8q label:where(.svelte-1n46o8q){display:block;margin-bottom:14px}.lbl.svelte-1n46o8q{display:block;font-size:11px;text-transform:uppercase;letter-spacing:1px;color:#fff6;margin-bottom:6px}input.svelte-1n46o8q,select.svelte-1n46o8q{width:100%;box-sizing:border-box;background:#ffffff08;border:1px solid rgba(255,255,255,.08);border-radius:6px;padding:8px 10px;color:#fff;font-size:13px}input.svelte-1n46o8q:focus,select.svelte-1n46o8q:focus{outline:none;border-color:var(--electric, #1A04FF)}small.svelte-1n46o8q{display:block;font-size:11px;color:#ffffff4d;margin-top:4px}.settings-actions.svelte-1n46o8q{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}.error.svelte-1n46o8q{background:#ffadad1a;border:1px solid rgba(255,173,173,.2);border-radius:6px;padding:8px 12px;font-size:12px;color:var(--blush, #ffadad);margin-bottom:12px}.stats-grid.svelte-1n46o8q{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.stat-card.svelte-1n46o8q{background:#ffffff05;border:1px solid rgba(255,255,255,.06);border-radius:10px;padding:14px 10px;text-align:center}.stat-card.svelte-1n46o8q .val:where(.svelte-1n46o8q){display:block;font-size:24px;font-weight:600;margin:4px 0 2px}.stat-card.svelte-1n46o8q .error-val:where(.svelte-1n46o8q){color:#ef4444}.control-bar.svelte-1n46o8q{display:flex;justify-content:center}.control-bar.svelte-1n46o8q .btn-primary:where(.svelte-1n46o8q){padding:10px 28px;font-size:14px}.progress-bar.svelte-1n46o8q{height:4px;background:#ffffff0d;border-radius:2px;overflow:hidden;margin-bottom:8px}.progress-fill.svelte-1n46o8q{height:100%;background:var(--electric, #1A04FF);border-radius:2px;transition:width .4s ease}.history-list.svelte-1n46o8q{display:flex;flex-direction:column;gap:2px}.history-row.svelte-1n46o8q{display:flex;align-items:center;gap:10px;padding:6px 0;font-size:12px;border-bottom:1px solid rgba(255,255,255,.03)}.file-name.svelte-1n46o8q{flex:1;font-family:Space Mono,monospace;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-tag.svelte-1n46o8q{font-size:9px;padding:2px 6px;border-radius:3px;text-transform:uppercase;font-weight:600;letter-spacing:.5px;background:#ffffff0f;color:#ffffff80}.status-tag.ok.svelte-1n46o8q{background:#10b98126;color:#10b981}.status-tag.err.svelte-1n46o8q{background:#ef444426;color:#ef4444}.errors-card.svelte-1n46o8q{border-color:#ef444433}.error-row.svelte-1n46o8q{font-size:11px;color:var(--blush, #ffadad);font-family:Space Mono,monospace;margin-top:4px;word-break:break-all}
|
package/dist/index.html
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en" class="dark">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>Siril Cloud Client</title>
|
|
7
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
|
+
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=Space+Mono:wght@400;700&display=swap" rel="stylesheet">
|
|
10
|
+
<script type="module" crossorigin src="/assets/index-BZRfMUEn.js"></script>
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CpHptC47.css">
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<div id="app"></div>
|
|
15
|
+
</body>
|
|
16
|
+
</html>
|
package/index.html
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en" class="dark">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<title>Siril Cloud Client</title>
|
|
7
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
|
+
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=Space+Mono:wght@400;700&display=swap" rel="stylesheet">
|
|
10
|
+
<link rel="stylesheet" href="/src/app.css" />
|
|
11
|
+
</head>
|
|
12
|
+
<body>
|
|
13
|
+
<div id="app"></div>
|
|
14
|
+
<script type="module" src="/src/main.ts"></script>
|
|
15
|
+
</body>
|
|
16
|
+
</html>
|
package/package.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "siril-cloud",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "vite",
|
|
7
|
+
"build": "vite build",
|
|
8
|
+
"preview": "vite preview"
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"@sveltejs/vite-plugin-svelte": "^5.0.0",
|
|
12
|
+
"svelte": "^5.0.0",
|
|
13
|
+
"vite": "^6.0.0"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
Binary file
|
package/src/App.svelte
ADDED
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
let watching = $state(false);
|
|
3
|
+
let dir = $state('');
|
|
4
|
+
let apiKey = $state('');
|
|
5
|
+
let saved = $state(false);
|
|
6
|
+
let cloudProvider = $state('gdrive');
|
|
7
|
+
let cloudFolderId = $state('');
|
|
8
|
+
let error = $state('');
|
|
9
|
+
let showSettings = $state(false);
|
|
10
|
+
let status = $state<any>({ watching: false, converting: 0, uploading: 0, total: 0, errors: [], job_frames: 0, job_bytes: 0 });
|
|
11
|
+
let history = $state<Array<{path: string, status: string, time: string}>>([]);
|
|
12
|
+
let submitting = $state(false);
|
|
13
|
+
|
|
14
|
+
const API = 'http://localhost:9559';
|
|
15
|
+
|
|
16
|
+
async function poll() {
|
|
17
|
+
try {
|
|
18
|
+
const r = await fetch(API + '/api/status');
|
|
19
|
+
if (r.ok) {
|
|
20
|
+
const s = await r.json();
|
|
21
|
+
status = s;
|
|
22
|
+
watching = s.watching;
|
|
23
|
+
if (s.watch_dir && !dir) dir = s.watch_dir;
|
|
24
|
+
}
|
|
25
|
+
} catch {}
|
|
26
|
+
try {
|
|
27
|
+
const r = await fetch(API + '/api/history');
|
|
28
|
+
if (r.ok) history = (await r.json()).history || [];
|
|
29
|
+
} catch {}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async function save() {
|
|
33
|
+
error = '';
|
|
34
|
+
const r = await fetch(API + '/api/configure', {
|
|
35
|
+
method: 'POST',
|
|
36
|
+
headers: { 'Content-Type': 'application/json' },
|
|
37
|
+
body: JSON.stringify({
|
|
38
|
+
watch_dir: dir,
|
|
39
|
+
api_key: apiKey,
|
|
40
|
+
cloud_provider: cloudProvider,
|
|
41
|
+
cloud_folder_id: cloudFolderId
|
|
42
|
+
})
|
|
43
|
+
});
|
|
44
|
+
const d = await r.json();
|
|
45
|
+
if (r.ok && d.ok) {
|
|
46
|
+
saved = true;
|
|
47
|
+
showSettings = false;
|
|
48
|
+
} else {
|
|
49
|
+
error = d.error || 'Save failed';
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async function start() {
|
|
54
|
+
if (!saved) { showSettings = true; return; }
|
|
55
|
+
const r = await fetch(API + '/api/start', { method: 'POST' });
|
|
56
|
+
if (r.ok) poll();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async function stop() {
|
|
60
|
+
await fetch(API + '/api/stop', { method: 'POST' });
|
|
61
|
+
poll();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async function submitJob() {
|
|
65
|
+
submitting = true;
|
|
66
|
+
try {
|
|
67
|
+
const r = await fetch(API + '/api/submit', { method: 'POST' });
|
|
68
|
+
const d = await r.json();
|
|
69
|
+
if (!r.ok) throw new Error(d.error || d.detail || 'Failed');
|
|
70
|
+
alert('Job submitted: ' + d.job?.job_id || d.job_id);
|
|
71
|
+
poll();
|
|
72
|
+
} catch(e: any) {
|
|
73
|
+
error = e.message;
|
|
74
|
+
} finally {
|
|
75
|
+
submitting = false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function timeAgo(dateStr: string): string {
|
|
80
|
+
const d = new Date(dateStr);
|
|
81
|
+
const now = new Date();
|
|
82
|
+
const sec = Math.floor((now.getTime() - d.getTime()) / 1000);
|
|
83
|
+
if (sec < 60) return `${sec}s ago`;
|
|
84
|
+
if (sec < 3600) return `${Math.floor(sec / 60)}m ago`;
|
|
85
|
+
if (sec < 86400) return `${Math.floor(sec / 3600)}h ago`;
|
|
86
|
+
return `${Math.floor(sec / 86400)}d ago`;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function openDashboard() {
|
|
90
|
+
window.open('https://siril-web-261043368546-us-east-1.s3-website-us-east-1.amazonaws.com/cloud', '_blank');
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
$effect(() => {
|
|
94
|
+
const i = setInterval(poll, 2000);
|
|
95
|
+
poll();
|
|
96
|
+
return () => clearInterval(i);
|
|
97
|
+
});
|
|
98
|
+
</script>
|
|
99
|
+
|
|
100
|
+
<div class="app">
|
|
101
|
+
<header>
|
|
102
|
+
<div class="logo-row">
|
|
103
|
+
<div class="logo-mark"></div>
|
|
104
|
+
<div>
|
|
105
|
+
<h1>Siril Cloud Client</h1>
|
|
106
|
+
<div class="status-row">
|
|
107
|
+
<span class="dot {watching ? 'on' : 'off'}"></span>
|
|
108
|
+
<span class="status-text">{watching ? 'Watching' : 'Stopped'}</span>
|
|
109
|
+
{#if dir}<span class="dim">· {dir}</span>{/if}
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
<div class="header-actions">
|
|
114
|
+
<button class="btn-secondary" onclick={openDashboard}>Dashboard</button>
|
|
115
|
+
<button class="btn-secondary" onclick={() => showSettings = !showSettings}>Settings</button>
|
|
116
|
+
</div>
|
|
117
|
+
</header>
|
|
118
|
+
|
|
119
|
+
{#if showSettings}
|
|
120
|
+
<div class="card settings-card">
|
|
121
|
+
<h3>Configuration</h3>
|
|
122
|
+
|
|
123
|
+
<label>
|
|
124
|
+
<span class="lbl">Watch Folder</span>
|
|
125
|
+
<input type="text" bind:value={dir} placeholder="/home/user/astro/tonight" />
|
|
126
|
+
</label>
|
|
127
|
+
|
|
128
|
+
<label>
|
|
129
|
+
<span class="lbl">Cloud Storage</span>
|
|
130
|
+
<select bind:value={cloudProvider}>
|
|
131
|
+
<option value="gdrive">Google Drive</option>
|
|
132
|
+
<option value="onedrive" disabled>OneDrive (coming soon)</option>
|
|
133
|
+
<option value="dropbox" disabled>Dropbox (coming soon)</option>
|
|
134
|
+
</select>
|
|
135
|
+
</label>
|
|
136
|
+
|
|
137
|
+
<label>
|
|
138
|
+
<span class="lbl">Cloud Folder ID</span>
|
|
139
|
+
<input type="text" bind:value={cloudFolderId} placeholder="Google Drive folder ID" />
|
|
140
|
+
<small>Paste the folder ID from your dashboard's Cloud Storage page</small>
|
|
141
|
+
</label>
|
|
142
|
+
|
|
143
|
+
<label>
|
|
144
|
+
<span class="lbl">API Key</span>
|
|
145
|
+
<input type="password" bind:value={apiKey} placeholder="siril_sk_..." />
|
|
146
|
+
<small>Generate in your web dashboard at /keys</small>
|
|
147
|
+
</label>
|
|
148
|
+
|
|
149
|
+
{#if error}
|
|
150
|
+
<div class="error">{error}</div>
|
|
151
|
+
{/if}
|
|
152
|
+
|
|
153
|
+
<div class="settings-actions">
|
|
154
|
+
<button class="btn-secondary" onclick={() => showSettings = false}>Cancel</button>
|
|
155
|
+
<button class="btn-primary" onclick={save}>Save</button>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
{/if}
|
|
159
|
+
|
|
160
|
+
<div class="stats-grid">
|
|
161
|
+
<div class="stat-card">
|
|
162
|
+
<span class="lbl">Total</span>
|
|
163
|
+
<span class="val">{status.total || 0}</span>
|
|
164
|
+
</div>
|
|
165
|
+
<div class="stat-card">
|
|
166
|
+
<span class="lbl">Uploading</span>
|
|
167
|
+
<span class="val">{status.uploading || 0}</span>
|
|
168
|
+
</div>
|
|
169
|
+
<div class="stat-card">
|
|
170
|
+
<span class="lbl">For Stack</span>
|
|
171
|
+
<span class="val">{status.job_frames || 0}</span>
|
|
172
|
+
<span class="lbl">{(status.job_bytes / 1024 / 1024 / 1024).toFixed(1) || '0'} GB</span>
|
|
173
|
+
</div>
|
|
174
|
+
<div class="stat-card">
|
|
175
|
+
<span class="lbl">Errors</span>
|
|
176
|
+
<span class="val" class:error-val={(status.errors?.length || 0) > 0}>{status.errors?.length || 0}</span>
|
|
177
|
+
</div>
|
|
178
|
+
</div>
|
|
179
|
+
|
|
180
|
+
<div class="control-bar">
|
|
181
|
+
{#if watching}
|
|
182
|
+
<button class="btn-primary danger" onclick={stop}>Stop & Stack</button>
|
|
183
|
+
{:else}
|
|
184
|
+
<button class="btn-primary" onclick={start}>Start Watching</button>
|
|
185
|
+
{/if}
|
|
186
|
+
{#if !watching && (status.job_frames || 0) >= 5}
|
|
187
|
+
<button class="btn-primary" onclick={submitJob} disabled={submitting}>
|
|
188
|
+
{#if submitting}Submitting...{:else}Submit {status.job_frames} Frames{/if}
|
|
189
|
+
</button>
|
|
190
|
+
{/if}
|
|
191
|
+
</div>
|
|
192
|
+
|
|
193
|
+
{#if (status.total || 0) > 0}
|
|
194
|
+
<div class="card">
|
|
195
|
+
<h3>Activity</h3>
|
|
196
|
+
{#if (status.converting || 0) + (status.uploading || 0) > 0}
|
|
197
|
+
<div class="progress-bar">
|
|
198
|
+
<div class="progress-fill" style="width: {Math.min(100, ((status.converting + status.uploading) / Math.max(1, status.total)) * 100)}%"></div>
|
|
199
|
+
</div>
|
|
200
|
+
<div class="dim small">{status.converting} converting, {status.uploading} uploading</div>
|
|
201
|
+
{/if}
|
|
202
|
+
</div>
|
|
203
|
+
{/if}
|
|
204
|
+
|
|
205
|
+
{#if history.length > 0}
|
|
206
|
+
<div class="card">
|
|
207
|
+
<h3>Recent Uploads</h3>
|
|
208
|
+
<div class="history-list">
|
|
209
|
+
{#each history.slice(0, 20) as h}
|
|
210
|
+
<div class="history-row">
|
|
211
|
+
<span class="file-name">{h.path || h.file}</span>
|
|
212
|
+
<span class="status-tag" class:ok={h.status === 'ok'} class:err={h.status === 'error'}>{h.status}</span>
|
|
213
|
+
<span class="dim small">{timeAgo(h.time)}</span>
|
|
214
|
+
</div>
|
|
215
|
+
{/each}
|
|
216
|
+
</div>
|
|
217
|
+
</div>
|
|
218
|
+
{/if}
|
|
219
|
+
|
|
220
|
+
{#if (status.errors?.length || 0) > 0}
|
|
221
|
+
<div class="card errors-card">
|
|
222
|
+
<h3 style="color: var(--blush)">Errors</h3>
|
|
223
|
+
{#each status.errors.slice(-10) as e}
|
|
224
|
+
<div class="error-row">{e}</div>
|
|
225
|
+
{/each}
|
|
226
|
+
</div>
|
|
227
|
+
{/if}
|
|
228
|
+
</div>
|
|
229
|
+
|
|
230
|
+
<style>
|
|
231
|
+
:global(body) {
|
|
232
|
+
margin: 0;
|
|
233
|
+
background: var(--void, #050507);
|
|
234
|
+
color: #fff;
|
|
235
|
+
font-family: var(--font-body, system-ui, sans-serif);
|
|
236
|
+
}
|
|
237
|
+
.app {
|
|
238
|
+
max-width: 640px;
|
|
239
|
+
margin: 0 auto;
|
|
240
|
+
padding: 32px 24px;
|
|
241
|
+
display: flex;
|
|
242
|
+
flex-direction: column;
|
|
243
|
+
gap: 16px;
|
|
244
|
+
}
|
|
245
|
+
header {
|
|
246
|
+
display: flex;
|
|
247
|
+
justify-content: space-between;
|
|
248
|
+
align-items: flex-start;
|
|
249
|
+
}
|
|
250
|
+
.logo-row {
|
|
251
|
+
display: flex;
|
|
252
|
+
gap: 12px;
|
|
253
|
+
align-items: center;
|
|
254
|
+
}
|
|
255
|
+
.logo-mark {
|
|
256
|
+
width: 36px;
|
|
257
|
+
height: 36px;
|
|
258
|
+
border-radius: 8px;
|
|
259
|
+
background: var(--electric, #1A04FF);
|
|
260
|
+
box-shadow: 0 0 20px rgba(26,4,255,0.3);
|
|
261
|
+
}
|
|
262
|
+
h1 {
|
|
263
|
+
font-family: var(--font-heading, system-ui, sans-serif);
|
|
264
|
+
text-transform: uppercase;
|
|
265
|
+
letter-spacing: -0.5px;
|
|
266
|
+
font-size: 20px;
|
|
267
|
+
font-weight: 600;
|
|
268
|
+
margin: 0;
|
|
269
|
+
}
|
|
270
|
+
.status-row {
|
|
271
|
+
display: flex;
|
|
272
|
+
align-items: center;
|
|
273
|
+
gap: 6px;
|
|
274
|
+
margin-top: 4px;
|
|
275
|
+
font-size: 12px;
|
|
276
|
+
color: rgba(255,255,255,0.5);
|
|
277
|
+
}
|
|
278
|
+
.dot {
|
|
279
|
+
width: 8px;
|
|
280
|
+
height: 8px;
|
|
281
|
+
border-radius: 50%;
|
|
282
|
+
}
|
|
283
|
+
.dot.on { background: #10b981; box-shadow: 0 0 8px #10b981; }
|
|
284
|
+
.dot.off { background: rgba(255,255,255,0.2); }
|
|
285
|
+
.status-text { color: rgba(255,255,255,0.7); font-weight: 500; }
|
|
286
|
+
.dim { color: rgba(255,255,255,0.3); font-size: 11px; }
|
|
287
|
+
.small { font-size: 11px; }
|
|
288
|
+
.header-actions { display: flex; gap: 8px; }
|
|
289
|
+
.btn-secondary, .btn-primary {
|
|
290
|
+
border: none;
|
|
291
|
+
border-radius: 6px;
|
|
292
|
+
padding: 8px 14px;
|
|
293
|
+
font-size: 13px;
|
|
294
|
+
font-weight: 500;
|
|
295
|
+
cursor: pointer;
|
|
296
|
+
transition: all 0.15s ease;
|
|
297
|
+
}
|
|
298
|
+
.btn-secondary {
|
|
299
|
+
background: rgba(255,255,255,0.05);
|
|
300
|
+
color: rgba(255,255,255,0.7);
|
|
301
|
+
}
|
|
302
|
+
.btn-secondary:hover { background: rgba(255,255,255,0.1); color: #fff; }
|
|
303
|
+
.btn-primary {
|
|
304
|
+
background: var(--electric, #1A04FF);
|
|
305
|
+
color: #fff;
|
|
306
|
+
}
|
|
307
|
+
.btn-primary:hover { box-shadow: 0 0 16px rgba(26,4,255,0.5); }
|
|
308
|
+
.btn-primary.danger { background: #ef4444; }
|
|
309
|
+
.btn-primary.danger:hover { box-shadow: 0 0 16px rgba(239,68,68,0.5); }
|
|
310
|
+
.card {
|
|
311
|
+
background: rgba(255,255,255,0.02);
|
|
312
|
+
border: 1px solid rgba(255,255,255,0.06);
|
|
313
|
+
border-radius: 12px;
|
|
314
|
+
padding: 20px;
|
|
315
|
+
}
|
|
316
|
+
h3 {
|
|
317
|
+
font-size: 14px;
|
|
318
|
+
font-weight: 500;
|
|
319
|
+
margin: 0 0 16px;
|
|
320
|
+
color: rgba(255,255,255,0.8);
|
|
321
|
+
}
|
|
322
|
+
.settings-card label {
|
|
323
|
+
display: block;
|
|
324
|
+
margin-bottom: 14px;
|
|
325
|
+
}
|
|
326
|
+
.lbl {
|
|
327
|
+
display: block;
|
|
328
|
+
font-size: 11px;
|
|
329
|
+
text-transform: uppercase;
|
|
330
|
+
letter-spacing: 1px;
|
|
331
|
+
color: rgba(255,255,255,0.4);
|
|
332
|
+
margin-bottom: 6px;
|
|
333
|
+
}
|
|
334
|
+
input, select {
|
|
335
|
+
width: 100%;
|
|
336
|
+
box-sizing: border-box;
|
|
337
|
+
background: rgba(255,255,255,0.03);
|
|
338
|
+
border: 1px solid rgba(255,255,255,0.08);
|
|
339
|
+
border-radius: 6px;
|
|
340
|
+
padding: 8px 10px;
|
|
341
|
+
color: #fff;
|
|
342
|
+
font-size: 13px;
|
|
343
|
+
}
|
|
344
|
+
input:focus, select:focus {
|
|
345
|
+
outline: none;
|
|
346
|
+
border-color: var(--electric, #1A04FF);
|
|
347
|
+
}
|
|
348
|
+
small {
|
|
349
|
+
display: block;
|
|
350
|
+
font-size: 11px;
|
|
351
|
+
color: rgba(255,255,255,0.3);
|
|
352
|
+
margin-top: 4px;
|
|
353
|
+
}
|
|
354
|
+
.settings-actions {
|
|
355
|
+
display: flex;
|
|
356
|
+
justify-content: flex-end;
|
|
357
|
+
gap: 8px;
|
|
358
|
+
margin-top: 8px;
|
|
359
|
+
}
|
|
360
|
+
.error {
|
|
361
|
+
background: rgba(255,173,173,0.1);
|
|
362
|
+
border: 1px solid rgba(255,173,173,0.2);
|
|
363
|
+
border-radius: 6px;
|
|
364
|
+
padding: 8px 12px;
|
|
365
|
+
font-size: 12px;
|
|
366
|
+
color: var(--blush, #ffadad);
|
|
367
|
+
margin-bottom: 12px;
|
|
368
|
+
}
|
|
369
|
+
.stats-grid {
|
|
370
|
+
display: grid;
|
|
371
|
+
grid-template-columns: repeat(4, 1fr);
|
|
372
|
+
gap: 8px;
|
|
373
|
+
}
|
|
374
|
+
.stat-card {
|
|
375
|
+
background: rgba(255,255,255,0.02);
|
|
376
|
+
border: 1px solid rgba(255,255,255,0.06);
|
|
377
|
+
border-radius: 10px;
|
|
378
|
+
padding: 14px 10px;
|
|
379
|
+
text-align: center;
|
|
380
|
+
}
|
|
381
|
+
.stat-card .val {
|
|
382
|
+
display: block;
|
|
383
|
+
font-size: 24px;
|
|
384
|
+
font-weight: 600;
|
|
385
|
+
margin: 4px 0 2px;
|
|
386
|
+
}
|
|
387
|
+
.stat-card .error-val { color: #ef4444; }
|
|
388
|
+
.control-bar {
|
|
389
|
+
display: flex;
|
|
390
|
+
justify-content: center;
|
|
391
|
+
}
|
|
392
|
+
.control-bar .btn-primary {
|
|
393
|
+
padding: 10px 28px;
|
|
394
|
+
font-size: 14px;
|
|
395
|
+
}
|
|
396
|
+
.progress-bar {
|
|
397
|
+
height: 4px;
|
|
398
|
+
background: rgba(255,255,255,0.05);
|
|
399
|
+
border-radius: 2px;
|
|
400
|
+
overflow: hidden;
|
|
401
|
+
margin-bottom: 8px;
|
|
402
|
+
}
|
|
403
|
+
.progress-fill {
|
|
404
|
+
height: 100%;
|
|
405
|
+
background: var(--electric, #1A04FF);
|
|
406
|
+
border-radius: 2px;
|
|
407
|
+
transition: width 0.4s ease;
|
|
408
|
+
}
|
|
409
|
+
.history-list {
|
|
410
|
+
display: flex;
|
|
411
|
+
flex-direction: column;
|
|
412
|
+
gap: 2px;
|
|
413
|
+
}
|
|
414
|
+
.history-row {
|
|
415
|
+
display: flex;
|
|
416
|
+
align-items: center;
|
|
417
|
+
gap: 10px;
|
|
418
|
+
padding: 6px 0;
|
|
419
|
+
font-size: 12px;
|
|
420
|
+
border-bottom: 1px solid rgba(255,255,255,0.03);
|
|
421
|
+
}
|
|
422
|
+
.file-name {
|
|
423
|
+
flex: 1;
|
|
424
|
+
font-family: 'Space Mono', monospace;
|
|
425
|
+
font-size: 11px;
|
|
426
|
+
overflow: hidden;
|
|
427
|
+
text-overflow: ellipsis;
|
|
428
|
+
white-space: nowrap;
|
|
429
|
+
}
|
|
430
|
+
.status-tag {
|
|
431
|
+
font-size: 9px;
|
|
432
|
+
padding: 2px 6px;
|
|
433
|
+
border-radius: 3px;
|
|
434
|
+
text-transform: uppercase;
|
|
435
|
+
font-weight: 600;
|
|
436
|
+
letter-spacing: 0.5px;
|
|
437
|
+
background: rgba(255,255,255,0.06);
|
|
438
|
+
color: rgba(255,255,255,0.5);
|
|
439
|
+
}
|
|
440
|
+
.status-tag.ok { background: rgba(16,185,129,0.15); color: #10b981; }
|
|
441
|
+
.status-tag.err { background: rgba(239,68,68,0.15); color: #ef4444; }
|
|
442
|
+
.errors-card {
|
|
443
|
+
border-color: rgba(239,68,68,0.2);
|
|
444
|
+
}
|
|
445
|
+
.error-row {
|
|
446
|
+
font-size: 11px;
|
|
447
|
+
color: var(--blush, #ffadad);
|
|
448
|
+
font-family: 'Space Mono', monospace;
|
|
449
|
+
margin-top: 4px;
|
|
450
|
+
word-break: break-all;
|
|
451
|
+
}
|
|
452
|
+
</style>
|
package/src/app.css
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
@font-face {
|
|
2
|
+
font-family: "GT America Extended Bold";
|
|
3
|
+
src: url("https://framerusercontent.com/assets/TuO3NJNVZj5Vv558NOmvyxcELE0.woff2") format("woff2");
|
|
4
|
+
font-weight: 700; font-display: swap;
|
|
5
|
+
}
|
|
6
|
+
@font-face {
|
|
7
|
+
font-family: "GT America Black";
|
|
8
|
+
src: url("https://framerusercontent.com/assets/NINDbh9LPQD1N7dM5iI06r6Go.woff2") format("woff2");
|
|
9
|
+
font-weight: 900; font-display: swap;
|
|
10
|
+
}
|
|
11
|
+
:root {
|
|
12
|
+
--void: #000000;
|
|
13
|
+
--void-soft: #0D0D0D;
|
|
14
|
+
--electric: #1A04FF;
|
|
15
|
+
--electric-bright: #4D3AFF;
|
|
16
|
+
--blush: #FFADAD;
|
|
17
|
+
--font-sans: 'Space Grotesk', sans-serif;
|
|
18
|
+
--font-heading: 'GT America Black', 'Arial Black', sans-serif;
|
|
19
|
+
--ease: cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
|
20
|
+
}
|
|
21
|
+
* { margin:0; padding:0; box-sizing:border-box }
|
|
22
|
+
body { background: var(--void); color: #fff; font-family: var(--font-sans); -webkit-font-smoothing: antialiased }
|
|
23
|
+
h1 { font-family: var(--font-heading); text-transform: uppercase; letter-spacing: -2px; font-size: 28px; line-height: 1 }
|
|
24
|
+
.glass-card { background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.08); border-radius: 12px; backdrop-filter: blur(10px) }
|
|
25
|
+
.glass-card-blue { background: rgba(26,4,255,0.08); border: 1px solid rgba(26,4,255,0.2); border-radius: 12px; backdrop-filter: blur(10px); box-shadow: 0 0 40px rgba(26,4,255,0.1) }
|
|
26
|
+
.btn { background: var(--electric); color: #fff; border: none; border-radius: 6px; padding: 10px 24px; font-family: var(--font-sans); font-size: 14px; font-weight: 500; cursor: pointer; transition: box-shadow 0.3s, transform 0.3s }
|
|
27
|
+
.btn:hover { box-shadow: 0 0 30px rgba(26,4,255,0.4); transform: translateY(-1px) }
|
|
28
|
+
.btn:disabled { opacity: 0.4; cursor: default; transform: none; box-shadow: none }
|
|
29
|
+
input, select { width: 100%; background: rgba(255,255,255,0.03); border: 1px solid rgba(255,255,255,0.1); border-radius: 6px; padding: 10px; color: #fff; font-family: var(--font-sans); font-size: 13px }
|
|
30
|
+
input:focus, select:focus { border-color: var(--electric); outline: none; box-shadow: 0 0 20px rgba(26,4,255,0.1) }
|
|
31
|
+
label { display: block; font-size: 11px; text-transform: uppercase; letter-spacing: 1.5px; color: rgba(255,255,255,0.4); margin-bottom: 4px }
|
|
32
|
+
.dot { width: 10px; height: 10px; border-radius: 50%; display: inline-block }
|
|
33
|
+
.dot-on { background: var(--electric); box-shadow: 0 0 10px rgba(26,4,255,0.6) }
|
|
34
|
+
.dot-off { background: rgba(255,255,255,0.15) }
|
package/src/main.ts
ADDED
package/vite.config.ts
ADDED