localdeck 1.2.1 → 1.2.2

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.
@@ -0,0 +1,20 @@
1
+ var kc=Object.defineProperty;var _o=t=>{throw TypeError(t)};var Sc=(t,e,r)=>e in t?kc(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var nt=(t,e,r)=>Sc(t,typeof e!="symbol"?e+"":e,r),ui=(t,e,r)=>e.has(t)||_o("Cannot "+r);var g=(t,e,r)=>(ui(t,e,"read from private field"),r?r.call(t):e.get(t)),pe=(t,e,r)=>e.has(t)?_o("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),xe=(t,e,r,a)=>(ui(t,e,"write to private field"),a?a.call(t,r):e.set(t,r),r),Ae=(t,e,r)=>(ui(t,e,"access private method"),r);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))a(n);new MutationObserver(n=>{for(const i of n)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&a(l)}).observe(document,{childList:!0,subtree:!0});function r(n){const i={};return n.integrity&&(i.integrity=n.integrity),n.referrerPolicy&&(i.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?i.credentials="include":n.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function a(n){if(n.ep)return;n.ep=!0;const i=r(n);fetch(n.href,i)}})();const Vo=!1;var Gn=Array.isArray,jc=Array.prototype.indexOf,Tn=Array.prototype.includes,Yn=Array.from,Wo=Object.defineProperty,hs=Object.getOwnPropertyDescriptor,xc=Object.getOwnPropertyDescriptors,Ec=Object.prototype,qc=Array.prototype,Go=Object.getPrototypeOf,yo=Object.isExtensible;function Ea(t){return typeof t=="function"}const ys=()=>{};function Pc(t){for(var e=0;e<t.length;e++)t[e]()}function Yo(){var t,e,r=new Promise((a,n)=>{t=a,e=n});return{promise:r,resolve:t,reject:e}}function Bi(t,e){if(Array.isArray(t))return t;if(!(Symbol.iterator in t))return Array.from(t);const r=[];for(const a of t)if(r.push(a),r.length===e)break;return r}const xt=2,Os=4,Jn=8,Fi=1<<24,xr=16,hr=32,ns=64,xi=128,Ki=256,pr=512,yt=1024,mt=2048,qr=4096,Bt=8192,Yt=16384,fa=32768,Nn=1<<25,bs=65536,Dn=1<<17,Jo=1<<18,pa=1<<19,Cc=1<<20,Vr=1<<25,zs=65536,In=1<<21,$s=1<<22,gs=1<<23,ms=Symbol("$state"),Zo=Symbol("component"),Xo=Symbol("legacy props"),Ac=Symbol(""),xn=Symbol("attributes"),Ei=Symbol("class"),qi=Symbol("style"),Aa=Symbol("text"),En=Symbol("form reset"),ln=new class extends Error{constructor(){super(...arguments);nt(this,"name","StaleReactionError");nt(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};var Bo;const Zn=!!((Bo=globalThis.document)!=null&&Bo.contentType)&&globalThis.document.contentType.includes("xml"),Rc=1,Lc=2,Qo=4,Tc=8,Nc=16,Dc=1,Ic=2,Mc=4,Oc=8,zc=16,Uc=1,Hc=2,gt=Symbol("uninitialized"),$o="http://www.w3.org/1999/xhtml",Bc="http://www.w3.org/2000/svg",Fc="@attach";function Kc(){console.warn("https://svelte.dev/e/derived_inert")}function Vc(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Wc(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let Gc=!1;function el(t){return t===this.v}function Yc(t,e){return t!=t?e==e:t!==e||t!==null&&typeof t=="object"||typeof t=="function"}function tl(t){return!Yc(t,this.v)}function Vi(t){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function Jc(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function Zc(t,e,r){throw new Error("https://svelte.dev/e/each_key_duplicate")}function Xc(t){throw new Error("https://svelte.dev/e/effect_in_teardown")}function Qc(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function $c(t){throw new Error("https://svelte.dev/e/effect_orphan")}function eu(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function tu(t){throw new Error("https://svelte.dev/e/props_invalid_value")}function ru(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function su(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function au(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function nu(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}let ha=!1,iu=!1;function ou(){ha=!0}function lu(t){let e=t.p;for(;e!==null&&e.c===null;)e=e.p;return(e==null?void 0:e.c)??null}function cu(t,e){return t===null&&Vi(),t.c??(t.c=new Map(lu(t)||void 0))}let tt=null;function la(t){tt=t}function uu(t){return cu(tt).get(t)}function bt(t,e=!1,r){tt={p:tt,i:!1,c:null,e:null,s:t,x:null,r:Ee,l:ha&&!e?{s:null,u:null,$:[]}:null}}function wt(t){var e=tt,r=e.e;if(r!==null){e.e=null;for(var a of r)wl(a)}return e.i=!0,tt=e.p,Wi(t)}function Wi(t={}){return Wo(t,Zo,{value:!0}),t}function ga(){return!ha||tt!==null&&tt.l===null}let Ps=[];function rl(){var t=Ps;Ps=[],Pc(t)}function fr(t){if(Ps.length===0&&!Oa){var e=Ps;queueMicrotask(()=>{e===Ps&&rl()})}Ps.push(t)}function du(){for(;Ps.length>0;)rl()}const vu=-7169;function vt(t,e){t.f=t.f&vu|e}function Gi(t){(t.f&pr)!==0||t.deps===null?vt(t,yt):vt(t,qr)}function sl(t){if(t!==null)for(const e of t)(e.f&xt)===0||(e.f&zs)===0||(e.f^=zs,sl(e.deps))}function al(t,e,r){(t.f&mt)!==0?e.add(t):(t.f&qr)!==0&&r.add(t),sl(t.deps),vt(t,yt)}let bn=!1;function fu(t){var e=bn;try{return bn=!1,[t(),bn]}finally{bn=e}}function pu(t,e){if(e){const r=document.body;t.autofocus=!0,fr(()=>{document.activeElement===r&&t.focus()})}}let bo=!1;function hu(){bo||(bo=!0,document.addEventListener("reset",t=>{Promise.resolve().then(()=>{var e;if(!t.defaultPrevented)for(const r of t.target.elements)(e=r[En])==null||e.call(r)})},{capture:!0}))}function ma(t){var e=qe,r=Ee;gr(null),Yr(null);try{return t()}finally{gr(e),Yr(r)}}function Yi(t,e,r,a=r){t.addEventListener(e,()=>ma(r));const n=t[En];n?t[En]=()=>{n(),a(!0)}:t[En]=()=>a(!0),hu()}function Ji(t,e,r,a){const n=ga()?Ua:Zi;var i=t.filter(y=>!y.settled),l=e.map(n);if(r.length===0&&i.length===0){a(l);return}var o=Ee,u=gu(),d=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(y=>y.promise)):null;function f(y){if((o.f&Yt)===0){u();try{a([...l,...y])}catch(q){Kr(q,o)}Mn()}}var h=nl();if(r.length===0){d.then(()=>f([])).finally(h);return}function m(){Promise.all(r.map(y=>mu(y))).then(f).catch(y=>Kr(y,o)).finally(h)}d?d.then(()=>{u(),m(),Mn()}):m()}function gu(){var t=Ee,e=qe,r=tt,a=he;return function(i=!0){Yr(t),gr(e),la(r),i&&(t.f&Yt)===0&&(a==null||a.activate(),a==null||a.apply())}}function Mn(t=!0){Yr(null),gr(null),la(null),t&&(he==null||he.deactivate())}function nl(){var t=Ee,e=t.b,r=he,a=!!(e!=null&&e.is_rendered());return e==null||e.update_pending_count(1,r),r.increment(a,t),()=>{e==null||e.update_pending_count(-1,r),r.decrement(a,t)}}function Ua(t){var e=xt|mt;return Ee!==null&&(Ee.f|=pa),{ctx:tt,deps:null,effects:null,equals:el,f:e,fn:t,reactions:null,rv:0,v:gt,wv:0,parent:Ee,ac:null}}const Ra=Symbol("obsolete");function mu(t,e,r){let a=Ee;a===null&&Jc();var n=void 0,i=Hs(gt),l=!qe,o=new Set;return Tu(()=>{var y,q;var u=Ee,d=Yo();n=d.promise;try{Promise.resolve(t()).then(d.resolve,S=>{S!==ln&&d.reject(S)}).finally(Mn)}catch(S){d.reject(S),Mn()}var f=he;if(l){if((u.f&fa)!==0)var h=nl();if((y=a.b)!=null&&y.is_rendered())(q=f.async_deriveds.get(u))==null||q.reject(Ra);else for(const S of o.values())S.reject(Ra);o.add(d),f.async_deriveds.set(u,d)}const m=(S,x=void 0)=>{h==null||h(),o.delete(d),x!==Ra&&(f.activate(),x?(i.f|=gs,ca(i,x)):((i.f&gs)!==0&&(i.f^=gs),ca(i,S)),f.deactivate())};d.promise.then(m,S=>m(null,S||"unknown"))}),un(()=>{for(const u of o)u.reject(Ra)}),new Promise(u=>{function d(f){function h(){f===n?u(i):d(n)}f.then(h,h)}d(n)})}function D(t){const e=Ua(t);return ql(e),e}function Zi(t){const e=Ua(t);return e.equals=tl,e}function _u(t){var e=t.effects;if(e!==null){t.effects=null;for(var r=0;r<e.length;r+=1)Lt(e[r])}}function Xi(t){var e,r=Ee,a=t.parent;if(!os&&a!==null&&t.v!==gt&&(a.f&(Yt|Bt))!==0)return Kc(),t.v;Yr(a);try{t.f&=~zs,_u(t),e=Rl(t)}finally{Yr(r)}return e}function il(t){var e=Xi(t);if(!t.equals(e)&&(t.wv=Cl(),(!(he!=null&&he.is_fork)||t.deps===null)&&(he!==null?(he.capture(t,e,!0),Ma==null||Ma.capture(t,e,!0)):t.v=e,t.deps===null))){vt(t,yt);return}os||(Rt!==null?(to()||he!=null&&he.is_fork)&&Rt.set(t,e):Gi(t))}function yu(t){var e;if(t.effects!==null)for(const r of t.effects)(r.teardown||r.ac)&&((e=r.teardown)==null||e.call(r),r.ac!==null&&ma(()=>{r.ac.abort(ln),r.ac=null}),r.fn!==null&&(r.teardown=ys),Ha(r,0),ro(r))}function ol(t){if(t.effects!==null)for(const e of t.effects)e.teardown&&e.fn!==null&&ua(e)}let di=null,Zs=null,he=null,Ma=null,Rt=null,Pi=null,Oa=!1,vi=!1,Qs=null,qn=null;var wo=0;let bu=1;var ta,fs,Rs,ra,sa,aa,rs,na,Wt,Fa,ss,Sr,Hr,ia,Ls,He,Ci,La,Ai,ll,cl,Xs,wu,Ta;const Kn=class Kn{constructor(){pe(this,He);nt(this,"id",bu++);pe(this,ta,!1);nt(this,"linked",!0);pe(this,fs,null);pe(this,Rs,null);nt(this,"async_deriveds",new Map);nt(this,"current",new Map);nt(this,"previous",new Map);pe(this,ra,new Set);pe(this,sa,new Set);pe(this,aa,0);pe(this,rs,new Map);pe(this,na,null);pe(this,Wt,[]);pe(this,Fa,[]);pe(this,ss,new Set);pe(this,Sr,new Set);pe(this,Hr,new Map);pe(this,ia,new Set);nt(this,"is_fork",!1);pe(this,Ls,!1);Zs===null?di=Zs=this:(xe(Zs,Rs,this),xe(this,fs,Zs)),Zs=this}skip_effect(e){g(this,Hr).has(e)||g(this,Hr).set(e,{d:[],m:[]}),g(this,ia).delete(e)}unskip_effect(e,r=a=>this.schedule(a)){var a=g(this,Hr).get(e);if(a){g(this,Hr).delete(e);for(var n of a.d)vt(n,mt),r(n);for(n of a.m)vt(n,qr),r(n)}g(this,ia).add(e)}capture(e,r,a=!1){e.v!==gt&&!this.previous.has(e)&&this.previous.set(e,e.v),(e.f&gs)===0&&(this.current.set(e,[r,a]),Rt==null||Rt.set(e,r)),this.is_fork||(e.v=r)}activate(){he=this}deactivate(){he=null,Rt=null}flush(){try{vi=!0,he=this,Ae(this,He,La).call(this)}finally{wo=0,Pi=null,Qs=null,qn=null,vi=!1,he=null,Rt=null,Wr.clear()}}discard(){var e;for(const r of g(this,sa))r(this);g(this,sa).clear();for(const r of this.async_deriveds.values())r.reject(Ra);Ae(this,He,Ta).call(this),(e=g(this,na))==null||e.resolve()}register_created_effect(e){g(this,Fa).push(e)}increment(e,r){if(xe(this,aa,g(this,aa)+1),e){let a=g(this,rs).get(r)??0;g(this,rs).set(r,a+1)}}decrement(e,r){if(xe(this,aa,g(this,aa)-1),e){let a=g(this,rs).get(r)??0;a===1?g(this,rs).delete(r):g(this,rs).set(r,a-1)}g(this,Ls)||(xe(this,Ls,!0),fr(()=>{xe(this,Ls,!1),this.linked&&this.flush()}))}transfer_effects(e,r){for(const a of e)g(this,ss).add(a);for(const a of r)g(this,Sr).add(a);e.clear(),r.clear()}oncommit(e){g(this,ra).add(e)}ondiscard(e){g(this,sa).add(e)}settled(){return(g(this,na)??xe(this,na,Yo())).promise}static ensure(){if(he===null){const e=he=new Kn;!vi&&!Oa&&fr(()=>{g(e,ta)||e.flush()})}return he}apply(){{Rt=null;return}}schedule(e){var n;if(Pi=e,(n=e.b)!=null&&n.is_pending&&(e.f&(Os|Jn|Fi))!==0&&(e.f&fa)===0){e.b.defer_effect(e);return}for(var r=e;r.parent!==null;){r=r.parent;var a=r.f;if(Qs!==null&&r===Ee&&(qe===null||(qe.f&xt)===0))return;if((a&(ns|hr))!==0){if((a&yt)===0)return;r.f^=yt}}g(this,Wt).push(r)}};ta=new WeakMap,fs=new WeakMap,Rs=new WeakMap,ra=new WeakMap,sa=new WeakMap,aa=new WeakMap,rs=new WeakMap,na=new WeakMap,Wt=new WeakMap,Fa=new WeakMap,ss=new WeakMap,Sr=new WeakMap,Hr=new WeakMap,ia=new WeakMap,Ls=new WeakMap,He=new WeakSet,Ci=function(){if(this.is_fork)return!0;for(const a of g(this,rs).keys()){for(var e=a,r=!1;e.parent!==null;){if(g(this,Hr).has(e)){r=!0;break}e=e.parent}if(!r)return!0}return!1},La=function(){var u,d,f,h;xe(this,ta,!0),wo++>1e3&&(Ae(this,He,Ta).call(this),Su());for(const m of g(this,ss))g(this,Sr).delete(m),vt(m,mt),this.schedule(m);for(const m of g(this,Sr))vt(m,qr),this.schedule(m);const e=g(this,Wt);xe(this,Wt,[]),this.apply();var r=Qs=[],a=[],n=qn=[];for(const m of e)try{Ae(this,He,Ai).call(this,m,r,a)}catch(y){throw vl(m),Ae(this,He,Ci).call(this)||this.discard(),y}if(he=null,n.length>0){var i=Kn.ensure();for(const m of n)i.schedule(m)}if(Qs=null,qn=null,Ae(this,He,Ci).call(this)){Ae(this,He,Xs).call(this,a),Ae(this,He,Xs).call(this,r);for(const[m,y]of g(this,Hr))dl(m,y);n.length>0&&Ae(u=he,He,La).call(u);return}const l=Ae(this,He,ll).call(this);if(l){Ae(this,He,Xs).call(this,a),Ae(this,He,Xs).call(this,r),Ae(d=l,He,cl).call(d,this);return}g(this,ss).clear(),g(this,Sr).clear();for(const m of g(this,ra))m(this);g(this,ra).clear(),Ma=this,ko(a),ko(r),Ma=null,(f=g(this,na))==null||f.resolve();var o=he;if(g(this,aa)===0&&(g(this,Wt).length===0||o!==null)&&Ae(this,He,Ta).call(this),g(this,Wt).length>0)if(o!==null){const m=o;g(m,Wt).push(...g(this,Wt).filter(y=>!g(m,Wt).includes(y)))}else o=this;o!==null&&(Wr.clear(),Ae(h=o,He,La).call(h))},Ai=function(e,r,a){e.f^=yt;for(var n=e.first;n!==null;){var i=n.f,l=(i&(hr|ns))!==0,o=l&&(i&yt)!==0,u=o||(i&Bt)!==0||g(this,Hr).has(n);if(!u&&n.fn!==null){l?n.f^=yt:(i&Os)!==0?r.push(n):vn(n)&&((i&xr)!==0&&g(this,Sr).add(n),ua(n));var d=n.first;if(d!==null){n=d;continue}}for(;n!==null;){var f=n.next;if(f!==null){n=f;break}n=n.parent}}},ll=function(){for(var e=g(this,fs);e!==null;){if(!e.is_fork){for(const[r,[,a]]of this.current)if(e.current.has(r)&&!a)return e}e=g(e,fs)}return null},cl=function(e){var a;for(const[n,i]of e.current)!this.previous.has(n)&&e.previous.has(n)&&this.previous.set(n,e.previous.get(n)),this.current.set(n,i);for(const[n,i]of e.async_deriveds){const l=this.async_deriveds.get(n);l&&i.promise.then(l.resolve).catch(l.reject)}e.async_deriveds.clear(),this.transfer_effects(g(e,ss),g(e,Sr));const r=n=>{var i=n.reactions;if(i!==null&&!((n.f&xt)!==0&&(n.f&(mt|qr))===0))for(const u of i){var l=u.f;if((l&xt)!==0)r(u);else{var o=u;l&($s|xr)&&!this.async_deriveds.has(o)&&(g(this,Sr).delete(o),vt(o,mt),this.schedule(o))}}};for(const n of this.current.keys())r(n);this.oncommit(()=>e.discard()),Ae(a=e,He,Ta).call(a),he=this,Ae(this,He,La).call(this)},Xs=function(e){for(var r=0;r<e.length;r+=1)al(e[r],g(this,ss),g(this,Sr))},wu=function(){var h;for(let m=di;m!==null;m=g(m,Rs)){var e=m.id<this.id,r=[];for(const[y,[q,S]]of this.current){if(m.current.has(y)){var a=m.current.get(y)[0];if(e&&q!==a)m.current.set(y,[q,S]);else continue}r.push(y)}if(e)for(const[y,q]of this.async_deriveds){const S=m.async_deriveds.get(y);S&&q.promise.then(S.resolve).catch(S.reject)}var n=[...m.current.keys()].filter(y=>!m.current.get(y)[1]);if(!(!g(m,ta)||n.length===0)){var i=n.filter(y=>!this.current.has(y));if(i.length===0)e&&m.discard();else if(r.length>0){if(e)for(const y of g(this,ia))m.unskip_effect(y,q=>{var S;(q.f&(xr|$s))!==0?m.schedule(q):Ae(S=m,He,Xs).call(S,[q])});m.activate();var l=new Set,o=new Map;for(var u of r)ul(u,i,l,o);o=new Map;var d=[...m.current].filter(([y,q])=>{const S=this.current.get(y);return S?S[0]!==q[0]||S[1]!==q[1]:!0}).map(([y])=>y);if(d.length>0)for(const y of g(this,Fa))(y.f&(Yt|Bt|Dn))===0&&Qi(y,d,o)&&((y.f&($s|xr))!==0?(vt(y,mt),m.schedule(y)):g(m,ss).add(y));if(g(m,Wt).length>0&&!g(m,Ls)){m.apply();for(var f of g(m,Wt))Ae(h=m,He,Ai).call(h,f,[],[]);xe(m,Wt,[])}m.deactivate()}}}},Ta=function(){if(this.linked){var e=g(this,fs),r=g(this,Rs);e===null?di=r:xe(e,Rs,r),r===null?Zs=e:xe(r,fs,e),this.linked=!1}};let Us=Kn;function ku(t){var e=Oa;Oa=!0;try{for(var r;;){if(du(),he===null)return r;he.flush()}}finally{Oa=e}}function Su(){try{eu()}catch(t){Kr(t,Pi)}}let kr=null;function ko(t){var e=t.length;if(e!==0){for(var r=0;r<e;){var a=t[r++];if((a.f&(Yt|Bt))===0&&vn(a)&&(kr=new Set,ua(a),a.deps===null&&a.first===null&&a.nodes===null&&a.teardown===null&&a.ac===null&&jl(a),(kr==null?void 0:kr.size)>0)){Wr.clear();for(const n of kr){if((n.f&(Yt|Bt))!==0)continue;const i=[n];let l=n.parent;for(;l!==null;)kr.has(l)&&(kr.delete(l),i.push(l)),l=l.parent;for(let o=i.length-1;o>=0;o--){const u=i[o];(u.f&(Yt|Bt))===0&&ua(u)}}kr.clear()}}kr=null}}function ul(t,e,r,a){if(!r.has(t)&&(r.add(t),t.reactions!==null))for(const n of t.reactions){const i=n.f;(i&xt)!==0?ul(n,e,r,a):(i&($s|xr))!==0&&(i&mt)===0&&Qi(n,e,a)&&(vt(n,mt),$i(n))}}function Qi(t,e,r){const a=r.get(t);if(a!==void 0)return a;if(t.deps!==null)for(const n of t.deps){if(Tn.call(e,n))return!0;if((n.f&xt)!==0&&Qi(n,e,r))return r.set(n,!0),!0}return r.set(t,!1),!1}function $i(t){he.schedule(t)}function dl(t,e){if(!((t.f&hr)!==0&&(t.f&yt)!==0)){(t.f&mt)!==0?e.d.push(t):(t.f&qr)!==0&&e.m.push(t),vt(t,yt);for(var r=t.first;r!==null;)dl(r,e),r=r.next}}function vl(t){vt(t,yt);for(var e=t.first;e!==null;)vl(e),e=e.next}let On=new Set;const Wr=new Map;let fl=!1;function Hs(t,e){var r={f:0,v:t,reactions:null,equals:el,rv:0,wv:0};return r}function I(t,e){const r=Hs(t);return ql(r),r}function ju(t,e=!1,r=!0){var n;const a=Hs(t);return e||(a.equals=tl),ha&&r&&tt!==null&&tt.l!==null&&((n=tt.l).s??(n.s=[])).push(a),a}function v(t,e,r=!1){qe!==null&&(!Er||(qe.f&Dn)!==0)&&ga()&&(qe.f&(xt|xr|$s|Dn))!==0&&(Gr===null||!Gr.has(t))&&au();let a=r?Ue(e):e;return ca(t,a,qn)}function ca(t,e,r=null){if(!t.equals(e)){os?Wr.set(t,e):Wr.has(t)||Wr.set(t,t.v);var a=Us.ensure();if(a.capture(t,e),(t.f&xt)!==0){const n=t;(t.f&mt)!==0&&Xi(n),Rt===null&&Gi(n)}t.wv=Cl(),pl(t,mt,r),ga()&&Ee!==null&&(Ee.f&yt)!==0&&(Ee.f&(hr|ns))===0&&(ur===null?Mu([t]):ur.push(t)),!a.is_fork&&On.size>0&&!fl&&xu()}return e}function xu(){fl=!1;for(const t of On){(t.f&yt)!==0&&vt(t,qr);let e;try{e=vn(t)}catch{e=!0}e&&ua(t)}On.clear()}function Eu(t,e=1){var r=s(t),a=e===1?r++:r--;return v(t,r),a}function za(t){v(t,t.v+1)}function pl(t,e,r){var a=t.reactions;if(a!==null)for(var n=ga(),i=a.length,l=0;l<i;l++){var o=a[l],u=o.f;if(!(!n&&o===Ee)){var d=(u&mt)===0;if(d&&vt(o,e),(u&Dn)!==0)On.add(o);else if((u&xt)!==0){var f=o;Rt==null||Rt.delete(f),(u&zs)===0&&(u&pr&&(Ee===null||(Ee.f&In)===0)&&(o.f|=zs),pl(f,qr,r))}else if(d){var h=o;(u&xr)!==0&&kr!==null&&kr.add(h),r!==null?r.push(h):$i(h)}}}}function Ue(t){if(typeof t!="object"||t===null||ms in t||Zo in t)return t;const e=Go(t);if(e!==Ec&&e!==qc)return t;var r=new Map,a=Gn(t),n=I(0),i=Ms,l=o=>{if(Ms===i)return o();var u=qe,d=Ms;gr(null),xo(i);var f=o();return gr(u),xo(d),f};return a&&r.set("length",I(t.length)),new Proxy(t,{defineProperty(o,u,d){(!("value"in d)||d.configurable===!1||d.enumerable===!1||d.writable===!1)&&ru();var f=r.get(u);return f===void 0?l(()=>{var h=I(d.value);return r.set(u,h),h}):v(f,d.value,!0),!0},deleteProperty(o,u){var d=r.get(u);if(d===void 0){if(u in o){const f=l(()=>I(gt));r.set(u,f),za(n)}}else v(d,gt),za(n);return!0},get(o,u,d){var y;if(u===ms)return t;var f=r.get(u),h=u in o;if(f===void 0&&(!h||(y=hs(o,u))!=null&&y.writable)&&(f=l(()=>{var q=Ue(h?o[u]:gt),S=I(q);return S}),r.set(u,f)),f!==void 0){var m=s(f);return m===gt?void 0:m}return Reflect.get(o,u,d)},getOwnPropertyDescriptor(o,u){var d=Reflect.getOwnPropertyDescriptor(o,u);if(d&&"value"in d){var f=r.get(u);f&&(d.value=s(f))}else if(d===void 0){var h=r.get(u),m=h==null?void 0:h.v;if(h!==void 0&&m!==gt)return{enumerable:!0,configurable:!0,value:m,writable:!0}}return d},has(o,u){var m;if(u===ms)return!0;var d=r.get(u),f=d!==void 0&&d.v!==gt||Reflect.has(o,u);if(d!==void 0||Ee!==null&&(!f||(m=hs(o,u))!=null&&m.writable)){d===void 0&&(d=l(()=>{var y=f?Ue(o[u]):gt,q=I(y);return q}),r.set(u,d));var h=s(d);if(h===gt)return!1}return f},set(o,u,d,f){var L;var h=r.get(u),m=u in o;if(a&&u==="length")for(var y=d;y<h.v;y+=1){var q=r.get(y+"");q!==void 0?v(q,gt):y in o&&(q=l(()=>I(gt)),r.set(y+"",q))}if(h===void 0)(!m||(L=hs(o,u))!=null&&L.writable)&&(h=l(()=>I(void 0)),v(h,Ue(d)),r.set(u,h));else{m=h.v!==gt;var S=l(()=>Ue(d));v(h,S)}var x=Reflect.getOwnPropertyDescriptor(o,u);if(x!=null&&x.set&&x.set.call(f,d),!m){if(a&&typeof u=="string"){var k=r.get("length"),A=Number(u);Number.isInteger(A)&&A>=k.v&&v(k,A+1)}za(n)}return!0},ownKeys(o){s(n);var u=Reflect.ownKeys(o).filter(h=>{var m=r.get(h);return m===void 0||m.v!==gt});for(var[d,f]of r)f.v!==gt&&!(d in o)&&u.push(d);return u},setPrototypeOf(){su()}})}function So(t){try{if(t!==null&&typeof t=="object"&&ms in t)return t[ms]}catch{}return t}function eo(t,e){return Object.is(So(t),So(e))}var zn,hl,gl,ml,_l;function qu(){if(zn===void 0){zn=window,hl=document,gl=/Firefox/.test(navigator.userAgent);var t=Element.prototype,e=Node.prototype,r=Text.prototype;ml=hs(e,"firstChild").get,_l=hs(e,"nextSibling").get,yo(t)&&(t[Ei]=void 0,t[xn]=null,t[qi]=void 0,t.__e=void 0),yo(r)&&(r[Aa]=void 0)}}function Pr(t=""){return document.createTextNode(t)}function Bs(t){return ml.call(t)}function cn(t){return _l.call(t)}function p(t,e){return Bs(t)}function Ke(t,e=!1){{var r=Bs(t);return r instanceof Comment&&r.data===""?cn(r):r}}function j(t,e=!1){return Bs(t)}function c(t,e=1,r=!1){let a=t;for(;e--;)a=cn(a);return a}function Pu(t){t.textContent=""}function yl(){return!1}function bl(t,e,r){return e==null||e===$o?r?document.createElement(t,{is:r}):document.createElement(t):r?document.createElementNS(e,t,{is:r}):document.createElementNS(e,t)}function Cu(t){var e=Ee;if(e===null)return qe.f|=gs,t;if((e.f&fa)===0&&(e.f&Os)===0)throw t;Kr(t,e)}function Kr(t,e){if(!(e!==null&&(e.f&Yt)!==0)){for(;e!==null;){if((e.f&xi)!==0&&(e.f&(Yt|Nn))===0){if((e.f&fa)===0)throw t;try{e.b.error(t);return}catch(r){t=r}}e=e.parent}throw t}}function Au(t){Ee===null&&(qe===null&&$c(),Qc()),os&&Xc()}function Ru(t,e){var r=e.last;r===null?e.last=e.first=t:(r.next=t,t.prev=r,e.last=t)}function Ar(t,e){var r=Ee;r!==null&&(r.f&Bt)!==0&&(t|=Bt);var a={ctx:tt,deps:null,nodes:null,f:t|mt|pr,first:null,fn:e,last:null,next:null,parent:r,b:r&&r.b,prev:null,teardown:null,wv:0,ac:null};he==null||he.register_created_effect(a);var n=a;if((t&Os)!==0)Qs!==null?Qs.push(a):Us.ensure().schedule(a);else if(e!==null){try{ua(a)}catch(l){throw Lt(a),l}n.deps===null&&n.teardown===null&&n.nodes===null&&n.first===n.last&&(n.f&pa)===0&&(n=n.first,(t&xr)!==0&&(t&bs)!==0&&n!==null&&(n.f|=bs))}if(n!==null&&(n.parent=r,r!==null&&Ru(n,r),qe!==null&&(qe.f&xt)!==0&&(t&ns)===0)){var i=qe;(i.effects??(i.effects=[])).push(n)}return a}function to(){return qe!==null&&!Er}function un(t){const e=Ar(Jn,null);return vt(e,yt),e.teardown=t,e}function is(t){Au();var e=Ee.f,r=!qe&&(e&hr)!==0&&tt!==null&&!tt.i;if(r){var a=tt;(a.e??(a.e=[])).push(t)}else return wl(t)}function wl(t){return Ar(Os|Cc,t)}function Lu(t){Us.ensure();const e=Ar(ns|pa,t);return(r={})=>new Promise(a=>{r.outro?Is(e,()=>{Lt(e),a(void 0)}):(Lt(e),a(void 0))})}function dn(t){return Ar(Os,t)}function Tu(t){return Ar($s|pa,t)}function Xn(t,e=0){return Ar(Jn|e,t)}function C(t,e=[],r=[],a=[]){Ji(a,e,r,n=>{Ar(Jn,()=>{t(...n.map(s))})})}function Nu(t,e=[],r=[],a=[]){Ji(a,e,r,n=>{Ar(Os,()=>t(...n.map(s)))})}function Fs(t,e=0){var r=Ar(xr|e,t);return r}function kl(t,e=0){var r=Ar(Fi|e,t);return r}function Ut(t){return Ar(hr|pa,t)}function Sl(t){var e=t.teardown;if(e!==null){const r=os,a=qe;jo(!0),gr(null);try{e.call(null)}catch(n){Kr(n,t.parent)}finally{jo(r),gr(a)}}}function ro(t,e=!1){var r=t.first;for(t.first=t.last=null;r!==null;){const n=r.ac;n!==null&&ma(()=>{n.abort(ln)});var a=r.next;(r.f&ns)!==0?r.parent=null:Lt(r,e),r=a}}function Du(t){for(var e=t.first;e!==null;){var r=e.next;(e.f&hr)===0&&Lt(e),e=r}}function Lt(t,e=!0){var r=!1;(e||(t.f&Jo)!==0)&&t.nodes!==null&&t.nodes.end!==null&&(Iu(t.nodes.start,t.nodes.end),r=!0),t.f|=Nn,ro(t,e&&!r),Ha(t,0);var a=t.nodes&&t.nodes.t;if(a!==null)for(const i of a)i.stop();Sl(t),t.f^=Nn,t.f|=Yt;var n=t.parent;n!==null&&n.first!==null&&jl(t),t.next=t.prev=t.teardown=t.ctx=t.deps=t.fn=t.nodes=t.ac=t.b=null}function Iu(t,e){for(;t!==null;){var r=t===e?null:cn(t);t.remove(),t=r}}function jl(t){var e=t.parent,r=t.prev,a=t.next;r!==null&&(r.next=a),a!==null&&(a.prev=r),e!==null&&(e.first===t&&(e.first=a),e.last===t&&(e.last=r))}function Is(t,e,r=!0){var a=[];t.f|=Ki,xl(t,a,!0);var n=()=>{r&&Lt(t),e&&e()},i=a.length;if(i>0){var l=()=>--i||n();for(var o of a)o.out(l)}else n()}function xl(t,e,r){if((t.f&Bt)===0){t.f^=Bt;var a=t.nodes&&t.nodes.t;if(a!==null)for(const o of a)(o.is_global||r)&&e.push(o);for(var n=t.first;n!==null;){var i=n.next;if((n.f&ns)===0){var l=(n.f&bs)!==0||(n.f&hr)!==0&&(t.f&xr)!==0;xl(n,e,l?r:!1)}n=i}}}function Un(t){t.f&=~Ki,El(t,!0)}function El(t,e){if((t.f&Ki)===0&&(t.f&Bt)!==0){t.f^=Bt,(t.f&yt)===0&&(vt(t,mt),Us.ensure().schedule(t));for(var r=t.first;r!==null;){var a=r.next,n=(r.f&bs)!==0||(r.f&hr)!==0;El(r,n?e:!1),r=a}var i=t.nodes&&t.nodes.t;if(i!==null)for(const l of i)(l.is_global||e)&&l.in()}}function so(t,e){if(t.nodes)for(var r=t.nodes.start,a=t.nodes.end;r!==null;){var n=r===a?null:cn(r);e.append(r),r=n}}let Pn=!1,os=!1;function jo(t){os=t}let qe=null,Er=!1;function gr(t){qe=t}let Ee=null;function Yr(t){Ee=t}let Gr=null;function ql(t){qe!==null&&(Gr??(Gr=new Set)).add(t)}let Gt=null,ar=0,ur=null;function Mu(t){ur=t}let Pl=1,Cs=0,Ms=Cs;function xo(t){Ms=t}function Cl(){return++Pl}function vn(t){var e=t.f;if((e&mt)!==0)return!0;if(e&xt&&(t.f&=~zs),(e&qr)!==0){for(var r=t.deps,a=r.length,n=0;n<a;n++){var i=r[n];if(vn(i)&&il(i),i.wv>t.wv)return!0}(e&pr)!==0&&Rt===null&&vt(t,yt)}return!1}function Al(t,e,r=!0){var a=t.reactions;if(a!==null&&!(Gr!==null&&Gr.has(t)))for(var n=0;n<a.length;n++){var i=a[n];(i.f&xt)!==0?Al(i,e,!1):e===i&&(r?vt(i,mt):(i.f&yt)!==0&&vt(i,qr),$i(i))}}function Rl(t){var e=Gt,r=ar,a=ur,n=qe,i=Gr,l=tt,o=Er,u=Ms,d=t.f;Gt=null,ar=0,ur=null,qe=(d&(hr|ns))===0?t:null,Gr=null,la(t.ctx),Er=!1,Ms=++Cs,t.ac!==null&&(ma(()=>{t.ac.abort(ln)}),t.ac=null);try{t.f|=In;var f=t.fn,h=f();t.f|=fa;var m=Eo(t);if(ga()&&ur!==null&&!Er&&m!==null&&(t.f&(xt|qr|mt))===0)for(var y=0;y<ur.length;y++)Al(ur[y],t);if(n!==null&&n!==t){if(Cs++,n.deps!==null)for(let q=0;q<r;q+=1)n.deps[q].rv=Cs;if(e!==null)for(const q of e)q.rv=Cs;ur!==null&&(a===null?a=ur:a.push(...ur))}return(t.f&gs)!==0&&(t.f^=gs),h}catch(q){return Eo(t),Cu(q)}finally{t.f^=In,Gt=e,ar=r,ur=a,qe=n,Gr=i,la(l),Er=o,Ms=u}}function Eo(t){var n;var e=t.deps,r=he==null?void 0:he.is_fork;if(Gt!==null){var a;if(r||Ha(t,ar),e!==null&&ar>0)for(e.length=ar+Gt.length,a=0;a<Gt.length;a++)e[ar+a]=Gt[a];else t.deps=e=Gt;if(to()&&(t.f&pr)!==0)for(a=ar;a<e.length;a++)((n=e[a]).reactions??(n.reactions=[])).push(t)}else!r&&e!==null&&ar<e.length&&(Ha(t,ar),e.length=ar);return e}function Ou(t,e){let r=e.reactions;if(r!==null){var a=jc.call(r,t);if(a!==-1){var n=r.length-1;n===0?r=e.reactions=null:(r[a]=r[n],r.pop())}}if(r===null&&(e.f&xt)!==0&&(Gt===null||!Tn.call(Gt,e))){var i=e;(i.f&pr)!==0&&(i.f^=pr,i.f&=~zs),i.v!==gt&&Gi(i),i.ac!==null&&ma(()=>{i.ac.abort(ln),i.ac=null,vt(i,mt)}),yu(i),Ha(i,0)}}function Ha(t,e){var r=t.deps;if(r!==null)for(var a=e;a<r.length;a++)Ou(t,r[a])}function ua(t){var e=t.f;if((e&Yt)===0){vt(t,yt);var r=Ee,a=Pn;Ee=t,Pn=(e&(hr|ns))===0;try{(e&(xr|Fi))!==0?Du(t):ro(t),Sl(t);var n=Rl(t);t.teardown=typeof n=="function"?n:null,t.wv=Pl;var i;Vo&&iu&&(t.f&mt)!==0&&t.deps}finally{Pn=a,Ee=r}}}async function Qn(){await Promise.resolve(),ku()}function s(t){var e=t.f,r=(e&xt)!==0;if(qe!==null&&!Er){var a=Ee!==null&&(Ee.f&Yt)!==0;if(!a&&(Gr===null||!Gr.has(t))){var n=qe.deps;if((qe.f&In)!==0)t.rv<Cs&&(t.rv=Cs,Gt===null&&n!==null&&n[ar]===t?ar++:Gt===null?Gt=[t]:Gt.push(t));else{qe.deps??(qe.deps=[]),Tn.call(qe.deps,t)||qe.deps.push(t);var i=t.reactions;i===null?t.reactions=[qe]:Tn.call(i,qe)||i.push(qe)}}}if(os&&Wr.has(t))return Wr.get(t);if(r){var l=t;if(os){var o=l.v;return((l.f&yt)===0&&l.reactions!==null||Tl(l))&&(o=Xi(l)),Wr.set(l,o),o}var u=(l.f&pr)===0&&!Er&&qe!==null&&(Pn||(qe.f&pr)!==0),d=(l.f&fa)===0;vn(l)&&(u&&(l.f|=pr),il(l)),u&&!d&&(ol(l),Ll(l))}if(Rt!=null&&Rt.has(t))return Rt.get(t);if((t.f&gs)!==0)throw t.v;return t.v}function Ll(t){if(t.f|=pr,t.deps!==null)for(const e of t.deps)(e.reactions??(e.reactions=[])).push(t),(e.f&xt)!==0&&(e.f&pr)===0&&(ol(e),Ll(e))}function Tl(t){if(t.v===gt)return!0;if(t.deps===null)return!1;for(const e of t.deps)if(Wr.has(e)||(e.f&xt)!==0&&Tl(e))return!0;return!1}function Ks(t){var e=Er;try{return Er=!0,t()}finally{Er=e}}function zu(t){return t.endsWith("capture")&&t!=="gotpointercapture"&&t!=="lostpointercapture"}const Uu=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"];function Hu(t){return Uu.includes(t)}const Bu={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"};function Fu(t){return t=t.toLowerCase(),Bu[t]??t}const Ku=["touchstart","touchmove"];function Vu(t){return Ku.includes(t)}const As=Symbol("events"),Nl=new Set,Ri=new Set;function Dl(t,e,r,a={}){function n(i){if(a.capture||Li.call(e,i),!i.cancelBubble)return ma(()=>r==null?void 0:r.call(this,i))}return t.startsWith("pointer")||t.startsWith("touch")||t==="wheel"?fr(()=>{e.addEventListener(t,n,a)}):e.addEventListener(t,n,a),n}function jt(t,e,r,a,n){var i={capture:a,passive:n},l=Dl(t,e,r,i);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&un(()=>{e.removeEventListener(t,l,i)})}function X(t,e,r){(e[As]??(e[As]={}))[t]=r}function nr(t){for(var e=0;e<t.length;e++)Nl.add(t[e]);for(var r of Ri)r(t)}let fi=null,pi=!1;function Li(t){var S,x;var e=this,r=e.ownerDocument,a=t.type,n=((S=t.composedPath)==null?void 0:S.call(t))||[],i=n[0]||t.target;fi=t,pi||(pi=!0,setTimeout(()=>{pi=!1,fi=null}));var l=0,o=fi===t&&t[As];if(o){var u=n.indexOf(o);if(u!==-1&&(e===document||e===window)){t[As]=e;return}var d=n.indexOf(e);if(d===-1)return;u<=d&&(l=u)}if(i=n[l]||t.target,i!==e){Wo(t,"currentTarget",{configurable:!0,get(){return i||r}});var f=qe,h=Ee;gr(null),Yr(null);try{for(var m,y=[];i!==null&&i!==e;){try{var q=(x=i[As])==null?void 0:x[a];q!=null&&(!i.disabled||t.target===i)&&q.call(i,t)}catch(k){m?y.push(k):m=k}if(t.cancelBubble)break;l++,i=l<n.length?n[l]:null}if(m){for(let k of y)queueMicrotask(()=>{throw k});throw m}}finally{t[As]=e,delete t.currentTarget,gr(f),Yr(h)}}}var Fo;const hi=((Fo=globalThis==null?void 0:globalThis.window)==null?void 0:Fo.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:t=>t});function Wu(t){return(hi==null?void 0:hi.createHTML(t))??t}function Il(t){var e=bl("template");return e.innerHTML=Wu(t.replaceAll("<!>","<!---->")),e.content}function da(t,e){var r=Ee;r.nodes===null&&(r.nodes={start:t,end:e,a:null,t:null})}function E(t,e){var r=(e&Uc)!==0,a=(e&Hc)!==0,n,i=!t.startsWith("<!>");return()=>{n===void 0&&(n=Il(i?t:"<!>"+t),r||(n=Bs(n)));var l=a||gl?document.importNode(n,!0):n.cloneNode(!0);if(r){var o=Bs(l),u=l.lastChild;da(o,u)}else da(l,l);return l}}function Gu(t,e,r="svg"){var a=!t.startsWith("<!>"),n=`<${r}>${a?t:"<!>"+t}</${r}>`,i;return()=>{if(!i){var l=Il(n),o=Bs(l);i=Bs(o)}var u=i.cloneNode(!0);return da(u,u),u}}function Yu(t,e){return Gu(t,e,"svg")}function Ml(t=""){{var e=Pr(t+"");return da(e,e),e}}function _s(){var t=document.createDocumentFragment(),e=document.createComment(""),r=Pr();return t.append(e,r),da(e,r),t}function w(t,e){t!==null&&t.before(e)}function Ju(t){let e=0,r=Hs(0),a;return()=>{to()&&(s(r),Xn(()=>(e===0&&(a=Ks(()=>t(()=>za(r)))),e+=1,()=>{fr(()=>{e-=1,e===0&&(a==null||a(),a=void 0,za(r))})})))}}var Zu=bs|pa;function Xu(t,e,r,a){new Qu(t,e,r,a)}var dr,Hi,vr,Ts,Mt,tr,Ot,rr,Br,Ns,ps,oa,Ka,Va,as,Vn,$e,$u,ed,Ti,td,Ni,Na,Cn,Di,Ii;class Qu{constructor(e,r,a,n){pe(this,$e);nt(this,"parent");nt(this,"is_pending",!1);nt(this,"transform_error");pe(this,dr);pe(this,Hi,null);pe(this,vr);pe(this,Ts);pe(this,Mt);pe(this,tr,null);pe(this,Ot,null);pe(this,rr,null);pe(this,Br,null);pe(this,Ns,0);pe(this,ps,0);pe(this,oa,!1);pe(this,Ka,new Set);pe(this,Va,new Set);pe(this,as,null);pe(this,Vn,Ju(()=>(xe(this,as,Hs(g(this,Ns))),()=>{xe(this,as,null)})));var i;xe(this,dr,e),xe(this,vr,r),xe(this,Ts,l=>{var o=Ee;o.b=this,o.f|=xi,a(l)}),this.parent=Ee.b,this.transform_error=n??((i=this.parent)==null?void 0:i.transform_error)??(l=>l),xe(this,Mt,Fs(()=>{Ae(this,$e,Ni).call(this)},Zu))}defer_effect(e){al(e,g(this,Ka),g(this,Va))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!g(this,vr).pending}update_pending_count(e,r){Ae(this,$e,Di).call(this,e,r),xe(this,Ns,g(this,Ns)+e),!(!g(this,as)||g(this,oa))&&(xe(this,oa,!0),fr(()=>{xe(this,oa,!1),g(this,as)&&ca(g(this,as),g(this,Ns))}))}get_effect_pending(){return g(this,Vn).call(this),s(g(this,as))}error(e){if(!g(this,vr).onerror&&!g(this,vr).failed)throw e;he!=null&&he.is_fork?(g(this,tr)&&he.skip_effect(g(this,tr)),g(this,Ot)&&he.skip_effect(g(this,Ot)),g(this,rr)&&he.skip_effect(g(this,rr)),he.oncommit(()=>{Ae(this,$e,Ii).call(this,e)})):Ae(this,$e,Ii).call(this,e)}}dr=new WeakMap,Hi=new WeakMap,vr=new WeakMap,Ts=new WeakMap,Mt=new WeakMap,tr=new WeakMap,Ot=new WeakMap,rr=new WeakMap,Br=new WeakMap,Ns=new WeakMap,ps=new WeakMap,oa=new WeakMap,Ka=new WeakMap,Va=new WeakMap,as=new WeakMap,Vn=new WeakMap,$e=new WeakSet,$u=function(){try{xe(this,tr,Ut(()=>g(this,Ts).call(this,g(this,dr))))}catch(e){this.error(e)}},ed=function(e){const r=g(this,vr).failed,{reset:a,invoke_onerror:n}=Ae(this,$e,Ti).call(this,e);fr(n),r&&xe(this,rr,Ut(()=>{r(g(this,dr),()=>e,()=>a)}))},Ti=function(e){var r=!1,a=!1;const n=()=>{if(r){Wc();return}r=!0,a&&nu(),g(this,rr)!==null&&Is(g(this,rr),()=>{xe(this,rr,null)}),Ae(this,$e,Cn).call(this,()=>{Ae(this,$e,Ni).call(this)})};return{reset:n,invoke_onerror:()=>{var l,o;try{a=!0,(o=(l=g(this,vr)).onerror)==null||o.call(l,e,n),a=!1}catch(u){Kr(u,g(this,Mt)&&g(this,Mt).parent)}}}},td=function(){const e=g(this,vr).pending;e&&(this.is_pending=!0,xe(this,Ot,Ut(()=>e(g(this,dr)))),fr(()=>{var r=xe(this,Br,document.createDocumentFragment()),a=Pr(),n=!1;if(r.append(a),xe(this,tr,Ae(this,$e,Cn).call(this,()=>{try{return Ut(()=>g(this,Ts).call(this,a))}catch(i){try{this.error(i),n=!0}catch(l){Kr(l,g(this,Mt).parent)}return null}})),g(this,tr)===null){xe(this,Br,null),n&&Ae(this,$e,Na).call(this,he);return}g(this,ps)===0&&(g(this,dr).before(r),xe(this,Br,null),Is(g(this,Ot),()=>{xe(this,Ot,null)}),Ae(this,$e,Na).call(this,he))}))},Ni=function(){try{if(this.is_pending=this.has_pending_snippet(),xe(this,ps,0),xe(this,Ns,0),xe(this,tr,Ut(()=>{g(this,Ts).call(this,g(this,dr))})),g(this,ps)>0){var e=xe(this,Br,document.createDocumentFragment());so(g(this,tr),e);const r=g(this,vr).pending;xe(this,Ot,Ut(()=>r(g(this,dr))))}else Ae(this,$e,Na).call(this,he)}catch(r){this.error(r)}},Na=function(e){this.is_pending=!1,e.transfer_effects(g(this,Ka),g(this,Va))},Cn=function(e){var r=Ee,a=qe,n=tt;Yr(g(this,Mt)),gr(g(this,Mt)),la(g(this,Mt).ctx);try{return Us.ensure(),e()}finally{Yr(r),gr(a),la(n)}},Di=function(e,r){var a;if(!this.has_pending_snippet()){this.parent&&Ae(a=this.parent,$e,Di).call(a,e,r);return}xe(this,ps,g(this,ps)+e),g(this,ps)===0&&(Ae(this,$e,Na).call(this,r),g(this,Ot)&&Is(g(this,Ot),()=>{xe(this,Ot,null)}),g(this,Br)&&(g(this,dr).before(g(this,Br)),xe(this,Br,null)))},Ii=function(e){g(this,tr)&&(Lt(g(this,tr)),xe(this,tr,null)),g(this,Ot)&&(Lt(g(this,Ot)),xe(this,Ot,null)),g(this,rr)&&(Lt(g(this,rr)),xe(this,rr,null));let r=g(this,vr).failed;const a=n=>{const{reset:i,invoke_onerror:l}=Ae(this,$e,Ti).call(this,n);l(),r&&xe(this,rr,Ae(this,$e,Cn).call(this,()=>{try{return Ut(()=>{var o=Ee;o.b=this,o.f|=xi,r(g(this,dr),()=>n,()=>i)})}catch(o){return Kr(o,g(this,Mt).parent),null}}))};fr(()=>{var n;try{n=this.transform_error(e)}catch(i){Kr(i,g(this,Mt)&&g(this,Mt).parent);return}n!==null&&typeof n=="object"&&typeof n.then=="function"?n.then(a,i=>Kr(i,g(this,Mt)&&g(this,Mt).parent)):a(n)})};function b(t,e){var r=e==null?"":typeof e=="object"?`${e}`:e;r!==(t[Aa]??(t[Aa]=t.nodeValue))&&(t[Aa]=r,t.nodeValue=`${r}`)}function rd(t,e){return sd(t,e)}const wn=new Map;function sd(t,{target:e,anchor:r,props:a={},events:n,context:i,intro:l=!0,transformError:o}){qu();var u=void 0,d=Lu(()=>{var f=r??e.appendChild(Pr());Xu(f,{pending:()=>{}},y=>{bt({});var q=tt;i&&(q.c=i),n&&(a.$$events=n),u=t(y,a)||Wi(),wt()},o);var h=new Set,m=y=>{for(var q=0;q<y.length;q++){var S=y[q];if(!h.has(S)){h.add(S);var x=Vu(S);for(const L of[e,document]){var k=wn.get(L);k===void 0&&(k=new Map,wn.set(L,k));var A=k.get(S);A===void 0?(L.addEventListener(S,Li,{passive:x}),k.set(S,1)):k.set(S,A+1)}}}};return m(Yn(Nl)),Ri.add(m),()=>{var x;for(var y of h)for(const k of[e,document]){var q=wn.get(k),S=q.get(y);--S==0?(k.removeEventListener(y,Li),q.delete(y),q.size===0&&wn.delete(k)):q.set(y,S)}Ri.delete(m),f!==r&&((x=f.parentNode)==null||x.removeChild(f))}});return ad.set(u,d),u}let ad=new WeakMap;var jr,Fr,sr,Ds,Wa,Ga,Wn;class $n{constructor(e,r=!0){nt(this,"anchor");pe(this,jr,new Map);pe(this,Fr,new Map);pe(this,sr,new Map);pe(this,Ds,new Set);pe(this,Wa,!0);pe(this,Ga,e=>{if(g(this,jr).has(e)){var r=g(this,jr).get(e),a=g(this,Fr).get(r);if(a)Un(a),g(this,Ds).delete(r);else{var n=g(this,sr).get(r);n&&(Un(n.effect),g(this,Fr).set(r,n.effect),g(this,sr).delete(r),n.fragment.lastChild.remove(),this.anchor.before(n.fragment),a=n.effect)}for(const[i,l]of g(this,jr)){if(g(this,jr).delete(i),i===e)break;const o=g(this,sr).get(l);o&&(Lt(o.effect),g(this,sr).delete(l))}for(const[i,l]of g(this,Fr)){if(i===r||g(this,Ds).has(i))continue;const o=()=>{if(Array.from(g(this,jr).values()).includes(i)){var d=document.createDocumentFragment();so(l,d),d.append(Pr()),g(this,sr).set(i,{effect:l,fragment:d})}else Lt(l);g(this,Ds).delete(i),g(this,Fr).delete(i)};g(this,Wa)||!a?(g(this,Ds).add(i),Is(l,o,!1)):o()}}});pe(this,Wn,e=>{g(this,jr).delete(e);const r=Array.from(g(this,jr).values());for(const[a,n]of g(this,sr))r.includes(a)||(Lt(n.effect),g(this,sr).delete(a))});this.anchor=e,xe(this,Wa,r)}ensure(e,r){var a=he,n=yl();if(r&&!g(this,Fr).has(e)&&!g(this,sr).has(e))if(n){var i=document.createDocumentFragment(),l=Pr();i.append(l),g(this,sr).set(e,{effect:Ut(()=>r(l)),fragment:i})}else g(this,Fr).set(e,Ut(()=>r(this.anchor)));if(g(this,jr).set(a,e),n){for(const[o,u]of g(this,Fr))o===e?a.unskip_effect(u):a.skip_effect(u);for(const[o,u]of g(this,sr))o===e?a.unskip_effect(u.effect):a.skip_effect(u.effect);a.oncommit(g(this,Ga)),a.ondiscard(g(this,Wn))}else g(this,Ga).call(this,a)}}jr=new WeakMap,Fr=new WeakMap,sr=new WeakMap,Ds=new WeakMap,Wa=new WeakMap,Ga=new WeakMap,Wn=new WeakMap;function B(t,e,r=!1){var a=new $n(t),n=r?bs:0;function i(l,o){a.ensure(l,o)}Fs(()=>{var l=!1;e((o,u=0)=>{l=!0,i(u,o)}),l||i(-1,null)},n)}const nd=Symbol("NaN");function qo(t,e,r){var a=new $n(t),n=!ga();Fs(()=>{var i=e();i!==i&&(i=nd),n&&i!==null&&typeof i=="object"&&(i={}),a.ensure(i,r)})}function Cr(t,e){return e}function id(t,e,r){for(var a=[],n=e.length,i,l=e.length,o=0;o<n;o++){let h=e[o];Is(h,()=>{if(i){if(i.pending.delete(h),i.done.add(h),i.pending.size===0){var m=t.outrogroups;Mi(t,Yn(i.done)),m.delete(i),m.size===0&&(t.outrogroups=null)}}else l-=1},!1)}if(l===0){var u=a.length===0&&r!==null&&t.pending.size===0;if(u){var d=r,f=d.parentNode;Pu(f),f.append(d),t.items.clear()}Mi(t,e,!u)}else i={pending:new Set(e),done:new Set},(t.outrogroups??(t.outrogroups=new Set)).add(i)}function Mi(t,e,r=!0){var a;if(t.pending.size>0){a=new Set;for(const l of t.pending.values())for(const o of l)a.add(t.items.get(o).e)}for(var n=0;n<e.length;n++){var i=e[n];if(a!=null&&a.has(i)){i.f|=Vr;const l=document.createDocumentFragment();so(i,l)}else Lt(e[n],r)}}var Po;function et(t,e,r,a,n,i=null){var l=t,o=new Map,u=(e&Qo)!==0;if(u){var d=t;l=d.appendChild(Pr())}var f=null,h=Zi(()=>{var L=r();return Gn(L)?L:L==null?[]:Yn(L)}),m,y=new Map,q=!0;function S(L){(A.effect.f&Yt)===0&&(A.pending.delete(L),A.fallback=f,od(A,m,l,e,a),f!==null&&(m.length===0?(f.f&Vr)===0?Un(f):(f.f^=Vr,Da(f,null,l)):Is(f,()=>{f=null})))}function x(L){A.pending.delete(L)}var k=Fs(()=>{m=s(h);for(var L=m.length,O=new Set,z=he,W=yl(),M=0;M<L;M+=1){var G=m[M],ce=a(G,M),ue=q?null:o.get(ce);ue?(ue.v&&ca(ue.v,G),ue.i&&ca(ue.i,M),W&&z.unskip_effect(ue.e)):(ue=ld(o,q?l:Po??(Po=Pr()),G,ce,M,n,e,r),q||(ue.e.f|=Vr),o.set(ce,ue)),O.add(ce)}if(L===0&&i&&!f&&(q?f=Ut(()=>i(l)):(f=Ut(()=>i(Po??(Po=Pr()))),f.f|=Vr)),L>O.size&&Zc(),!q)if(y.set(z,O),W){for(const[Y,re]of o)O.has(Y)||z.skip_effect(re.e);z.oncommit(S),z.ondiscard(x)}else S(z);s(h)}),A={effect:k,items:o,pending:y,outrogroups:null,fallback:f};q=!1}function qa(t){for(;t!==null&&(t.f&hr)===0;)t=t.next;return t}function od(t,e,r,a,n){var ue,Y,re,ve,ie,T,H,se,Z;var i=(a&Tc)!==0,l=e.length,o=t.items,u=qa(t.effect.first),d,f=null,h,m=[],y=[],q,S,x,k;if(i)for(k=0;k<l;k+=1)q=e[k],S=n(q,k),x=o.get(S).e,(x.f&Vr)===0&&((Y=(ue=x.nodes)==null?void 0:ue.a)==null||Y.measure(),(h??(h=new Set)).add(x));for(k=0;k<l;k+=1){if(q=e[k],S=n(q,k),x=o.get(S).e,t.outrogroups!==null)for(const Q of t.outrogroups)Q.pending.delete(x),Q.done.delete(x);if((x.f&Bt)!==0&&(Un(x),i&&((ve=(re=x.nodes)==null?void 0:re.a)==null||ve.unfix(),(h??(h=new Set)).delete(x))),(x.f&Vr)!==0)if(x.f^=Vr,x===u)Da(x,null,r);else{var A=f?f.next:u;x===t.effect.last&&(t.effect.last=x.prev),x.prev&&(x.prev.next=x.next),x.next&&(x.next.prev=x.prev),vs(t,f,x),vs(t,x,A),Da(x,A,r),f=x,m=[],y=[],u=qa(f.next);continue}if(x!==u){if(d!==void 0&&d.has(x)){if(m.length<y.length){var L=y[0],O;f=L.prev;var z=m[0],W=m[m.length-1];for(O=0;O<m.length;O+=1)Da(m[O],L,r);for(O=0;O<y.length;O+=1)d.delete(y[O]);vs(t,z.prev,W.next),vs(t,f,z),vs(t,W,L),u=L,f=W,k-=1,m=[],y=[]}else d.delete(x),Da(x,u,r),vs(t,x.prev,x.next),vs(t,x,f===null?t.effect.first:f.next),vs(t,f,x),f=x;continue}for(m=[],y=[];u!==null&&u!==x;)(d??(d=new Set)).add(u),y.push(u),u=qa(u.next);if(u===null)continue}(x.f&Vr)===0&&m.push(x),f=x,u=qa(x.next)}if(t.outrogroups!==null){for(const Q of t.outrogroups)Q.pending.size===0&&(Mi(t,Yn(Q.done)),(ie=t.outrogroups)==null||ie.delete(Q));t.outrogroups.size===0&&(t.outrogroups=null)}if(u!==null||d!==void 0){var M=[];if(d!==void 0)for(x of d)(x.f&Bt)===0&&M.push(x);for(;u!==null;)(u.f&Bt)===0&&u!==t.fallback&&M.push(u),u=qa(u.next);var G=M.length;if(G>0){var ce=(a&Qo)!==0&&l===0?r:null;if(i){for(k=0;k<G;k+=1)(H=(T=M[k].nodes)==null?void 0:T.a)==null||H.measure();for(k=0;k<G;k+=1)(Z=(se=M[k].nodes)==null?void 0:se.a)==null||Z.fix()}id(t,M,ce)}}i&&fr(()=>{var Q,N;if(h!==void 0)for(x of h)(N=(Q=x.nodes)==null?void 0:Q.a)==null||N.apply()})}function ld(t,e,r,a,n,i,l,o){var u=(l&Rc)!==0?(l&Nc)===0?ju(r,!1,!1):Hs(r):null,d=(l&Lc)!==0?Hs(n):null;return{v:u,i:d,e:Ut(()=>(i(e,u??r,d??n,o),()=>{t.delete(a)}))}}function Da(t,e,r){if(t.nodes)for(var a=t.nodes.start,n=t.nodes.end,i=e&&(e.f&Vr)===0?e.nodes.start:r;a!==null;){var l=cn(a);if(i.before(a),a===n)return;a=l}}function vs(t,e,r){e===null?t.effect.first=r:e.next=r,r===null?t.effect.last=e:r.prev=e}function cd(t,e,...r){var a=new $n(t);Fs(()=>{const n=e()??null;a.ensure(n,n&&(i=>n(i,...r)))},bs)}function ud(t,e,r,a,n,i){var l=null,o=t,u=new $n(o,!1);Fs(()=>{const d=e()||null;var f=Bc;if(d===null){u.ensure(null,null);return}return u.ensure(d,h=>{if(d){if(l=bl(d,f),da(l,l),a){var m=null,y=l.appendChild(Pr());a(l,y),m==null||m.remove()}Ee.nodes.end=l,h.before(l)}}),()=>{}},bs),un(()=>{})}function dd(t,e){var r;r=document.head.appendChild(Pr());try{Fs(()=>{var a=Ut(()=>e(r));a.f|=Jo,Gc||(a.nodes===null?a.nodes={start:r,end:r,a:null,t:null}:a.nodes.end=r)})}finally{}}function Ba(t,e,r){dn(()=>{var a=Ks(()=>e(t,r==null?void 0:r())||{});if(a!=null&&a.destroy)return()=>a.destroy()})}function vd(t,e){var r=void 0,a;kl(()=>{r!==(r=e())&&(a&&(Lt(a),a=null),r&&(a=Ut(()=>{dn(()=>r(t))})))})}function Ol(t){var e,r,a="";if(typeof t=="string"||typeof t=="number")a+=t;else if(typeof t=="object")if(Array.isArray(t)){var n=t.length;for(e=0;e<n;e++)t[e]&&(r=Ol(t[e]))&&(a&&(a+=" "),a+=r)}else for(r in t)t[r]&&(a&&(a+=" "),a+=r);return a}function fd(){for(var t,e,r=0,a="",n=arguments.length;r<n;r++)(t=arguments[r])&&(e=Ol(t))&&(a&&(a+=" "),a+=e);return a}function pd(t){return typeof t=="object"?fd(t):t??""}const Co=[...`
2
+ \r\f \v\uFEFF`];function hd(t,e,r){var a=t==null?"":""+t;if(e&&(a=a?a+" "+e:e),r){for(var n of Object.keys(r))if(r[n])a=a?a+" "+n:n;else if(a.length)for(var i=n.length,l=0;(l=a.indexOf(n,l))>=0;){var o=l+i;(l===0||Co.includes(a[l-1]))&&(o===a.length||Co.includes(a[o]))?a=(l===0?"":a.substring(0,l))+a.substring(o+1):l=o}}return a===""?null:a}function Ao(t,e=!1){var r=e?" !important;":";",a="";for(var n of Object.keys(t)){var i=t[n];i!=null&&i!==""&&(a+=" "+n+": "+i+r)}return a}function gi(t){return t[0]!=="-"||t[1]!=="-"?t.toLowerCase():t}function gd(t,e){if(e){var r="",a,n;if(Array.isArray(e)?(a=e[0],n=e[1]):a=e,t){t=String(t).replaceAll(/\/\*.*?\*\//g,"").trim();var i=!1,l=0,o=!1,u=[];a&&u.push(...Object.keys(a).map(gi)),n&&u.push(...Object.keys(n).map(gi));var d=0,f=-1;const S=t.length;for(var h=0;h<S;h++){var m=t[h];if(o?m==="/"&&t[h-1]==="*"&&(o=!1):i?i===m&&(i=!1):m==="/"&&t[h+1]==="*"?o=!0:m==='"'||m==="'"?i=m:m==="("?l++:m===")"&&l--,!o&&i===!1&&l===0){if(m===":"&&f===-1)f=h;else if(m===";"||h===S-1){if(f!==-1){var y=gi(t.substring(d,f).trim());if(!u.includes(y)){m!==";"&&h++;var q=t.substring(d,h).trim();r+=" "+q+";"}}d=h+1,f=-1}}}}return a&&(r+=Ao(a)),n&&(r+=Ao(n,!0)),r=r.trim(),r===""?null:r}return t==null?null:String(t)}function it(t,e,r,a,n,i){var l=t[Ei];if(l!==r||l===void 0){var o=hd(r,a,i);o==null?t.removeAttribute("class"):e?t.className=o:t.setAttribute("class",o),t[Ei]=r}else if(i&&n!==i)for(var u in i){var d=!!i[u];(n==null||d!==!!n[u])&&t.classList.toggle(u,d)}return i}function mi(t,e={},r,a){for(var n in r){var i=r[n];e[n]!==i&&(r[n]==null?t.style.removeProperty(n):t.style.setProperty(n,i,a))}}function ao(t,e,r,a){var n=t[qi];if(n!==e){var i=gd(e,a);i==null?t.removeAttribute("style"):t.style.cssText=i,t[qi]=e}else a&&(Array.isArray(a)?(mi(t,r==null?void 0:r[0],a[0]),mi(t,r==null?void 0:r[1],a[1],"important")):mi(t,r,a));return a}function zl(t,e){e?t.hasAttribute("selected")||t.setAttribute("selected",""):t.removeAttribute("selected")}function Ro(t,e){var r=!("__defaultValue"in t);!r&&t.__defaultValue===e||(t.__defaultValue=e,Ul(t,!r||"__value"in t))}function Ul(t,e){var r=t.__defaultValue,a=t.multiple,n=a?r??[]:null;if(!(a&&!Gn(n))){var i=t.selectedIndex,l=e&&a?new Set(t.selectedOptions):null;for(var o of t.options){var u=ea(o);zl(o,a?n.includes(u):eo(u,r))}if(e)if(l!==null)for(o of t.options){var d=l.has(o);o.selected!==d&&(o.selected=d)}else t.selectedIndex!==i&&(t.selectedIndex=i)}}function Hn(t,e,r=!1){if(t.multiple){if(e==null)return;if(!Gn(e))return Vc();for(var a of t.options)a.selected=e.includes(ea(a));return}for(a of t.options){var n=ea(a);if(eo(n,e)){a.selected=!0;return}}(!r||e!==void 0)&&(t.selectedIndex=-1)}function no(t){var e=new MutationObserver(r=>{r.every(md)||("__defaultValue"in t&&Ul(t,!1),"__value"in t&&Hn(t,t.__value))});e.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),un(()=>{e.disconnect()})}function Hl(t,e,r=e){var a=new WeakSet,n=!0;Yi(t,"change",i=>{var l=i?"[selected]":":checked",o;if(t.multiple)o=[].map.call(t.querySelectorAll(l),ea);else{var u=t.querySelector(l)??t.querySelector("option:not([disabled])");o=u&&ea(u)}r(o),t.__value=o,he!==null&&a.add(he)}),dn(()=>{var i=e();if(t===document.activeElement){var l=he;if(a.has(l))return}if(Hn(t,i,n),n&&i===void 0){var o=t.querySelector(":checked");o!==null&&(i=ea(o),r(i))}t.__value=i,n=!1})}function ea(t){return"__value"in t?t.__value:t.value}function md(t){if(t.target.closest("selectedcontent")!==null)return!0;if(t.type==="childList"){var e=[...t.addedNodes,...t.removedNodes];return e.length>0&&e.every(r=>r.nodeName==="SELECTEDCONTENT")}return!1}const Pa=Symbol("class"),Ca=Symbol("style"),Bl=Symbol("is custom element"),Fl=Symbol("is html"),_d=Zn?"input":"INPUT",yd=Zn?"option":"OPTION",Kl=Zn?"select":"SELECT",bd=Zn?"progress":"PROGRESS";function wd(t,e){var r=ei(t);r.value===(r.value=e??void 0)||t.value===e&&(e!==0||t.nodeName!==bd)||(t.value=e??"")}function Bn(t,e){var r=ei(t);r.checked!==(r.checked=e??void 0)&&(t.checked=e)}function U(t,e,r,a){var n=ei(t);n[e]!==(n[e]=r)&&(e==="loading"&&(t[Ac]=r),r==null?t.removeAttribute(e):typeof r!="string"&&Vl(t).has(e)?t[e]=r:t.setAttribute(e,r))}function kd(t,e,r,a,n=!1,i=!1){var l=ei(t),o=l[Bl],u=!l[Fl],d=e||{},f=t.nodeName===yd,h=t.nodeName===Kl;for(var m in e)!(m in r)&&m[0]+m[1]!=="$$"&&(r[m]=null);r.class?r.class=pd(r.class):r[Pa]&&(r.class=null),r[Ca]&&(r.style??(r.style=null));var y=Vl(t);if(t.nodeName===_d&&"type"in r&&("value"in r||"__value"in r)){var q=r.type;(q!==d.type||q===void 0&&t.hasAttribute("type"))&&(d.type=q,U(t,"type",q))}for(const W in r){let M=r[W];if(f&&W==="value"&&M==null){t.value=t.__value="",d[W]=M;continue}if(W==="class"){var S=t.namespaceURI==="http://www.w3.org/1999/xhtml";it(t,S,M,a,e==null?void 0:e[Pa],r[Pa]),d[W]=M,d[Pa]=r[Pa];continue}if(W==="style"){ao(t,M,e==null?void 0:e[Ca],r[Ca]),d[W]=M,d[Ca]=r[Ca];continue}var x=d[W];if(!(M===x&&!(M===void 0&&t.hasAttribute(W)))){d[W]=M;var k=W[0]+W[1];if(k!=="$$")if(k==="on"){const G={},ce="$$"+W;let ue=W.slice(2);var A=Hu(ue);if(zu(ue)&&(ue=ue.slice(0,-7),G.capture=!0),!A&&x){if(M!=null)continue;t.removeEventListener(ue,d[ce],G),d[ce]=null}if(A)X(ue,t,M),nr([ue]);else if(M!=null){let Y=function(re){d[W].call(this,re)};var z=Y;d[ce]=Dl(ue,t,Y,G)}}else if(W==="style")U(t,W,M);else if(W==="autofocus")pu(t,!!M);else if(!o&&(W==="__value"||W==="value"&&M!=null))t.value=t.__value=M;else if(W==="selected"&&f)zl(t,M);else{var L=W;u||(L=Fu(L));var O=L==="defaultValue"||L==="defaultChecked";if(h&&L==="defaultValue")continue;if(M==null&&!o&&!O)if(l[W]=null,L==="value"||L==="checked"){let G=t;const ce=e===void 0;if(L==="value"){let ue=G.defaultValue;G.removeAttribute(L),G.defaultValue=ue,G.value=G.__value=ce?ue:null}else{let ue=G.defaultChecked;G.removeAttribute(L),G.defaultChecked=ue,G.checked=ce?ue:!1}}else t.removeAttribute(W);else O||(o||typeof M!="string")&&y.has(L)?(t[L]=M,L in l&&(l[L]=gt)):typeof M!="function"&&U(t,L,M)}}}return d}function Lo(t,e,r=[],a=[],n=[],i,l=!1,o=!1){Ji(n,r,a,u=>{var d=void 0,f={},h=t.nodeName===Kl,m=!1;if(kl(()=>{var q=e(...u.map(s)),S=kd(t,d,q,i,l,o);if(m&&h){var x=t;"defaultValue"in q&&Ro(x,q.defaultValue),"value"in q&&Hn(x,q.value)}for(let A of Object.getOwnPropertySymbols(f))q[A]||Lt(f[A]);for(let A of Object.getOwnPropertySymbols(q)){var k=q[A];A.description===Fc&&(!d||k!==d[A])&&(f[A]&&Lt(f[A]),f[A]=Ut(()=>vd(t,()=>k))),S[A]=k}d=S}),h){var y=t;dn(()=>{var q=d;"defaultValue"in q&&Ro(y,q.defaultValue),Hn(y,q.value,!0),no(y)})}m=!0})}function ei(t){return t[xn]??(t[xn]={[Bl]:t.nodeName.includes("-"),[Fl]:t.namespaceURI===$o})}var To=new Map;function Vl(t){var e=t.getAttribute("is")||t.nodeName,r=To.get(e);if(r)return r;To.set(e,r=new Set);for(var a,n=t,i=Element.prototype;i!==n;){a=xc(n);for(var l in a)a[l].set&&l!=="innerHTML"&&l!=="textContent"&&l!=="innerText"&&r.add(l);n=Go(n)}return r}function Nt(t,e,r=e){var a=new WeakSet;Yi(t,"input",async n=>{var i=n?t.defaultValue:t.value;if(i=yi(t)?bi(i):i,r(i),he!==null&&a.add(he),await Qn(),i!==(i=e())){var l=t.selectionStart,o=t.selectionEnd,u=t.value.length;if(t.value=i??"",o!==null){var d=t.value.length;l===o&&o===u&&d>u?(t.selectionStart=d,t.selectionEnd=d):(t.selectionStart=l,t.selectionEnd=Math.min(o,d))}}}),Ks(e)==null&&t.value&&(r(yi(t)?bi(t.value):t.value),he!==null&&a.add(he)),Xn(()=>{var n=e();if(t===document.activeElement){var i=he;if(a.has(i))return}yi(t)&&n===bi(t.value)||t.type==="date"&&!n&&!t.value||n!==t.value&&(t.value=n??"")})}const _i=new Set;function Sd(t,e,r,a,n=a){var i=r.getAttribute("type")==="checkbox",l=t;if(e!==null)for(var o of e)l=l[o]??(l[o]=[]);l.push(r),Yi(r,"change",()=>{var u=r.__value;i&&(u=jd(l,u,r.checked)),n(u)},()=>n(i?[]:null)),Xn(()=>{var u=a();i?(u=u||[],r.checked=u.includes(r.__value)):r.checked=eo(r.__value,u)}),un(()=>{var u=l.indexOf(r);u!==-1&&l.splice(u,1)}),_i.has(l)||(_i.add(l),fr(()=>{l.sort((u,d)=>u.compareDocumentPosition(d)===4?-1:1),_i.delete(l)})),fr(()=>{})}function jd(t,e,r){for(var a=new Set,n=0;n<t.length;n+=1)t[n].checked&&a.add(t[n].__value);return r||a.delete(e),Array.from(a)}function yi(t){var e=t.type;return e==="number"||e==="range"}function bi(t){return t===""?null:+t}function wi(t,e){return t===e||(t==null?void 0:t[ms])===e}function va(t=Wi(),e,r,a){var n=tt.r,i=Ee;return dn(()=>{var l,o;return Xn(()=>{l=o,o=[],Ks(()=>{wi(r(...o),t)||(e(t,...o),l&&wi(r(...l),t)&&e(null,...l))})}),()=>{let u=i;for(;u!==n&&u.parent!==null&&u.parent.f&Nn;)u=u.parent;const d=()=>{o&&wi(r(...o),t)&&e(null,...o)},f=u.teardown;u.teardown=()=>{d(),f==null||f()}}}),t}const xd={get(t,e){if(!t.exclude.has(e))return t.props[e]},set(t,e){return!1},getOwnPropertyDescriptor(t,e){if(!t.exclude.has(e)&&e in t.props)return{enumerable:!0,configurable:!0,value:t.props[e]}},has(t,e){return t.exclude.has(e)?!1:e in t.props},ownKeys(t){return Reflect.ownKeys(t.props).filter(e=>!t.exclude.has(e))}};function Ve(t,e,r){return new Proxy({props:t,exclude:e},xd)}const Ed={get(t,e){let r=t.props.length;for(;r--;){let a=t.props[r];if(Ea(a)&&(a=a()),typeof a=="object"&&a!==null&&e in a)return a[e]}},set(t,e,r){let a=t.props.length;for(;a--;){let n=t.props[a];Ea(n)&&(n=n());const i=hs(n,e);if(i&&i.set)return i.set(r),!0}return!1},getOwnPropertyDescriptor(t,e){let r=t.props.length;for(;r--;){let a=t.props[r];if(Ea(a)&&(a=a()),typeof a=="object"&&a!==null&&e in a){const n=hs(a,e);return n&&!n.configurable&&(n.configurable=!0),n}}},has(t,e){if(e===ms||e===Xo)return!1;for(let r of t.props)if(Ea(r)&&(r=r()),r!=null&&e in r)return!0;return!1},ownKeys(t){const e=[];for(let r of t.props)if(Ea(r)&&(r=r()),!!r){for(const a in r)e.includes(a)||e.push(a);for(const a of Object.getOwnPropertySymbols(r))e.includes(a)||e.push(a)}return e}};function Ye(...t){return new Proxy({props:t},Ed)}function je(t,e,r,a){var O;var n=!ha||(r&Ic)!==0,i=(r&Oc)!==0,l=(r&zc)!==0,o=a,u=!0,d=void 0,f=()=>l&&n?(d??(d=Ua(a)),s(d)):(u&&(u=!1,o=l?Ks(a):a),o);let h;if(i){var m=ms in t||Xo in t;h=((O=hs(t,e))==null?void 0:O.set)??(m&&e in t?z=>t[e]=z:void 0)}var y,q=!1;i?[y,q]=fu(()=>t[e]):y=t[e],y===void 0&&a!==void 0&&(y=f(),h&&(n&&tu(),h(y)));var S;if(n?S=()=>{var z=t[e];return z===void 0?f():(u=!0,z)}:S=()=>{var z=t[e];return z!==void 0&&(o=void 0),z===void 0?o:z},n&&(r&Mc)===0)return S;if(h){var x=t.$$legacy;return(function(z,W){return arguments.length>0?((!n||!W||x||q)&&h(W?S():z),z):S()})}var k=!1,A=((r&Dc)!==0?Ua:Zi)(()=>(k=!1,S()));i&&s(A);var L=Ee;return(function(z,W){if(arguments.length>0){const M=W?s(A):n&&i?Ue(z):z;return v(A,M),k=!0,o!==void 0&&(o=M),z}return os&&k||(L.f&Yt)!==0?A.v:s(A)})}function ti(t){tt===null&&Vi(),ha&&tt.l!==null?Pd(tt).m.push(t):is(()=>{const e=Ks(t);if(typeof e=="function")return e})}function qd(t){tt===null&&Vi(),ti(()=>()=>Ks(t))}function Pd(t){var e=t.l;return e.u??(e.u={a:[],b:[],m:[]})}const Cd="5";var Ko;typeof window<"u"&&((Ko=window.__svelte??(window.__svelte={})).v??(Ko.v=new Set)).add(Cd);/**
3
+ * @file
4
+ * @license @lucide/svelte v1.41.0 - ISC
5
+ *
6
+ * This source code is licensed under the ISC license.
7
+ * See the LICENSE file in the root directory of this source tree.
8
+ */const Ad={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"};/**
9
+ * @file
10
+ * @license @lucide/svelte v1.41.0 - ISC
11
+ *
12
+ * This source code is licensed under the ISC license.
13
+ * See the LICENSE file in the root directory of this source tree.
14
+ */const Rd=t=>{for(const e in t)if(e.startsWith("aria-")||e==="role"||e==="title")return!0;return!1};/**
15
+ * @file
16
+ * @license @lucide/svelte v1.41.0 - ISC
17
+ *
18
+ * This source code is licensed under the ISC license.
19
+ * See the LICENSE file in the root directory of this source tree.
20
+ */const Ld=Symbol("lucide-context"),Td=()=>uu(Ld);var Nd=new Set(["$$slots","$$events","$$legacy","name","color","size","strokeWidth","absoluteStrokeWidth","iconNode","children"]),Dd=Yu("<svg><!><!></svg>");function Je(t,e){bt(e,!0);const r=Td()??{},a=je(e,"color",19,()=>r.color??"currentColor"),n=je(e,"size",19,()=>r.size??24),i=je(e,"strokeWidth",19,()=>r.strokeWidth??2),l=je(e,"absoluteStrokeWidth",19,()=>r.absoluteStrokeWidth??!1),o=je(e,"iconNode",19,()=>[]),u=Ve(e,Nd),d=D(()=>l()?Number(i())*24/Number(n()):i());var f=Dd();Lo(f,y=>({...Ad,...y,...u,width:n(),height:n(),stroke:a(),"stroke-width":s(d),class:["lucide-icon lucide",r.class,e.name&&`lucide-${e.name}`,e.class]}),[()=>!e.children&&!Rd(u)&&{"aria-hidden":"true"}]);var h=p(f);et(h,17,o,Cr,(y,q)=>{var S=D(()=>Bi(s(q),2));let x=()=>s(S)[0],k=()=>s(S)[1];var A=_s(),L=Ke(A);ud(L,x,!0,(O,z)=>{Lo(O,()=>({...k()}))}),w(y,A)});var m=c(h);cd(m,()=>e.children??ys),w(t,f),wt()}var Id=new Set(["$$slots","$$events","$$legacy"]);function Md(t,e){let r=Ve(e,Id);const a=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"}]];Je(t,Ye({name:"activity"},()=>r,{get iconNode(){return a}}))}var Od=new Set(["$$slots","$$events","$$legacy"]);function Wl(t,e){let r=Ve(e,Od);const a=[["path",{d:"M7 7h10v10"}],["path",{d:"M7 17 17 7"}]];Je(t,Ye({name:"arrow-up-right"},()=>r,{get iconNode(){return a}}))}var zd=new Set(["$$slots","$$events","$$legacy"]);function Gl(t,e){let r=Ve(e,zd);const a=[["path",{d:"m6 9 6 6 6-6"}]];Je(t,Ye({name:"chevron-down"},()=>r,{get iconNode(){return a}}))}var Ud=new Set(["$$slots","$$events","$$legacy"]);function Hd(t,e){let r=Ve(e,Ud);const a=[["path",{d:"m16 18 6-6-6-6"}],["path",{d:"m8 6-6 6 6 6"}]];Je(t,Ye({name:"code"},()=>r,{get iconNode(){return a}}))}var Bd=new Set(["$$slots","$$events","$$legacy"]);function Yl(t,e){let r=Ve(e,Bd);const a=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"}]];Je(t,Ye({name:"copy"},()=>r,{get iconNode(){return a}}))}var Fd=new Set(["$$slots","$$events","$$legacy"]);function Kd(t,e){let r=Ve(e,Fd);const a=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5"}],["path",{d:"M3 12A9 3 0 0 0 21 12"}]];Je(t,Ye({name:"database"},()=>r,{get iconNode(){return a}}))}var Vd=new Set(["$$slots","$$events","$$legacy"]);function Wd(t,e){let r=Ve(e,Vd);const a=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5"}],["path",{d:"M10 9H8"}],["path",{d:"M16 13H8"}],["path",{d:"M16 17H8"}]];Je(t,Ye({name:"file-text"},()=>r,{get iconNode(){return a}}))}var Gd=new Set(["$$slots","$$events","$$legacy"]);function Yd(t,e){let r=Ve(e,Gd);const a=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"}],["path",{d:"M2 12h20"}]];Je(t,Ye({name:"globe"},()=>r,{get iconNode(){return a}}))}var Jd=new Set(["$$slots","$$events","$$legacy"]);function Zd(t,e){let r=Ve(e,Jd);const a=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M12 16v-4"}],["path",{d:"M12 8h.01"}]];Je(t,Ye({name:"info"},()=>r,{get iconNode(){return a}}))}var Xd=new Set(["$$slots","$$events","$$legacy"]);function Qd(t,e){let r=Ve(e,Xd);const a=[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor"}]];Je(t,Ye({name:"key-round"},()=>r,{get iconNode(){return a}}))}var $d=new Set(["$$slots","$$events","$$legacy"]);function ev(t,e){let r=Ve(e,$d);const a=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"}]];Je(t,Ye({name:"link"},()=>r,{get iconNode(){return a}}))}var tv=new Set(["$$slots","$$events","$$legacy"]);function rv(t,e){let r=Ve(e,tv);const a=[["path",{d:"M3 5h.01"}],["path",{d:"M3 12h.01"}],["path",{d:"M3 19h.01"}],["path",{d:"M8 5h13"}],["path",{d:"M8 12h13"}],["path",{d:"M8 19h13"}]];Je(t,Ye({name:"list"},()=>r,{get iconNode(){return a}}))}var sv=new Set(["$$slots","$$events","$$legacy"]);function av(t,e){let r=Ve(e,sv);const a=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56"}]];Je(t,Ye({name:"loader-circle"},()=>r,{get iconNode(){return a}}))}var nv=new Set(["$$slots","$$events","$$legacy"]);function iv(t,e){let r=Ve(e,nv);const a=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M9 3v18"}],["path",{d:"m16 15-3-3 3-3"}]];Je(t,Ye({name:"panel-left-close"},()=>r,{get iconNode(){return a}}))}var ov=new Set(["$$slots","$$events","$$legacy"]);function lv(t,e){let r=Ve(e,ov);const a=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M9 3v18"}],["path",{d:"m14 9 3 3-3 3"}]];Je(t,Ye({name:"panel-left-open"},()=>r,{get iconNode(){return a}}))}var cv=new Set(["$$slots","$$events","$$legacy"]);function uv(t,e){let r=Ve(e,cv);const a=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M3 9h18"}],["path",{d:"M9 21V9"}]];Je(t,Ye({name:"panels-top-left"},()=>r,{get iconNode(){return a}}))}var dv=new Set(["$$slots","$$events","$$legacy"]);function vv(t,e){let r=Ve(e,dv);const a=[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z"}]];Je(t,Ye({name:"play"},()=>r,{get iconNode(){return a}}))}var fv=new Set(["$$slots","$$events","$$legacy"]);function pv(t,e){let r=Ve(e,fv);const a=[["path",{d:"M5 12h14"}],["path",{d:"M12 5v14"}]];Je(t,Ye({name:"plus"},()=>r,{get iconNode(){return a}}))}var hv=new Set(["$$slots","$$events","$$legacy"]);function gv(t,e){let r=Ve(e,hv);const a=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"}],["path",{d:"M3 3v5h5"}],["path",{d:"M12 7v5l4 2"}]];Je(t,Ye({name:"rotate-ccw-clock"},()=>r,{get iconNode(){return a}}))}var mv=new Set(["$$slots","$$events","$$legacy"]);function io(t,e){let r=Ve(e,mv);const a=[["path",{d:"m21 21-4.34-4.34"}],["circle",{cx:"11",cy:"11",r:"8"}]];Je(t,Ye({name:"search"},()=>r,{get iconNode(){return a}}))}var _v=new Set(["$$slots","$$events","$$legacy"]);function Jl(t,e){let r=Ve(e,_v);const a=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"}],["circle",{cx:"12",cy:"12",r:"3"}]];Je(t,Ye({name:"settings"},()=>r,{get iconNode(){return a}}))}var yv=new Set(["$$slots","$$events","$$legacy"]);function bv(t,e){let r=Ve(e,yv);const a=[["circle",{cx:"18",cy:"5",r:"3"}],["circle",{cx:"6",cy:"12",r:"3"}],["circle",{cx:"18",cy:"19",r:"3"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49"}]];Je(t,Ye({name:"share-2"},()=>r,{get iconNode(){return a}}))}var wv=new Set(["$$slots","$$events","$$legacy"]);function kv(t,e){let r=Ve(e,wv);const a=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}]];Je(t,Ye({name:"square"},()=>r,{get iconNode(){return a}}))}var Sv=new Set(["$$slots","$$events","$$legacy"]);function jv(t,e){let r=Ve(e,Sv);const a=[["path",{d:"M12 19h8"}],["path",{d:"m4 17 6-6-6-6"}]];Je(t,Ye({name:"terminal"},()=>r,{get iconNode(){return a}}))}var xv=new Set(["$$slots","$$events","$$legacy"]);function Ev(t,e){let r=Ve(e,xv);const a=[["path",{d:"M10 11v6"}],["path",{d:"M14 11v6"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6"}],["path",{d:"M3 6h18"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"}]];Je(t,Ye({name:"trash"},()=>r,{get iconNode(){return a}}))}var qv=new Set(["$$slots","$$events","$$legacy"]);function Pv(t,e){let r=Ve(e,qv);const a=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"}],["path",{d:"M12 9v4"}],["path",{d:"M12 17h.01"}]];Je(t,Ye({name:"triangle-alert"},()=>r,{get iconNode(){return a}}))}var Cv=new Set(["$$slots","$$events","$$legacy"]);function oo(t,e){let r=Ve(e,Cv);const a=[["path",{d:"M18 6 6 18"}],["path",{d:"m6 6 12 12"}]];Je(t,Ye({name:"x"},()=>r,{get iconNode(){return a}}))}function lo(t){return!t||t.status==="stopped"?(t==null?void 0:t.readinessStatus)==="failed"?"failed to start":"stopped":t.status==="stopping"?"stopping":t.readinessStatus==="failed"?"check failed":t.readinessStatus==="checking"?"checking readiness":t.upstreamReady?t.readinessStatus==="ready"?"ready":"listening":"starting"}function zt(t){return!!(t.serviceType&&t.serviceType!=="http")}function Av(t,e,r,a){const n=l=>t.filter(o=>o.name===l.name).length>1?`${l.name} (${l.id})`:l.name,i=[{id:"projects",label:"Go to projects",detail:"Navigation",action:{type:"navigate",route:{page:"projects"}}},{id:"services",label:"Go to all services",detail:"Navigation",action:{type:"navigate",route:{page:"services"}}},{id:"settings",label:"Go to settings",detail:"Navigation",action:{type:"navigate",route:{page:"settings"}}},...t.map(l=>({id:`project:${l.id}`,label:`Go to ${n(l)}`,detail:"Project",action:{type:"navigate",route:{page:"projects",projectId:l.id}}}))];for(const l of e){const{key:o,name:u,runtime:d,command:f}=l,h=t.find(x=>o.startsWith(`${x.id}:`)),m=`${h?n(h):(d==null?void 0:d.projectName)??"Project"} / ${u}`,y=!!(d&&d.status!=="stopped"),q=!a||(d==null?void 0:d.status)==="stopping"||["start","stop","restart"].some(x=>r.has(`service:${o}:${x}`)),S=(x,k,A=!1)=>i.push({id:`${x}:${o}`,label:`${k} ${u}`,detail:m,disabled:A,action:{type:x,key:o}});y&&(d!=null&&d.upstreamReady)&&d.urls[0]&&!zt(d)&&i.push({id:`open:${o}`,label:`Open ${u} in browser`,detail:m,action:{type:"open",url:d.urls[0]}}),S("logs","View logs for"),zt(d??f??{})||S("requests","View requests for"),!y&&f&&(h==null?void 0:h.available)!==!1&&S("start","Start",q),y&&S("stop","Stop",q),y&&f&&(h==null?void 0:h.available)!==!1&&(d==null?void 0:d.managedBy)==="daemon"&&S("restart","Restart",q)}return i}function Rv(t,e){const r=e.toLowerCase().trim().split(/\s+/).filter(Boolean);return t.filter(a=>r.every(n=>`${a.label} ${a.detail}`.toLowerCase().includes(n)))}var Lv=E('<small class="svelte-vw7b2v">Unavailable</small>'),Tv=E('<button role="option" tabindex="-1"><span><strong class="svelte-vw7b2v"> </strong><small class="svelte-vw7b2v"> </small></span> <!></button>'),Nv=E('<p class="empty svelte-vw7b2v">No matching commands. Try a project or service name.</p>'),Dv=E('<p class="error svelte-vw7b2v" role="alert"> </p>'),Iv=E('<div class="load-error svelte-vw7b2v" role="alert"><span> </span><button>Retry</button></div>'),Mv=E('<dialog aria-label="Command palette" class="svelte-vw7b2v"><div class="search-row svelte-vw7b2v"><!> <input role="combobox" aria-label="Search commands" aria-expanded="true" aria-controls="palette-results" aria-autocomplete="list" autocomplete="off" spellcheck="false" placeholder="Search projects, services, and actions…" class="svelte-vw7b2v"/> <button class="close svelte-vw7b2v" aria-label="Close command palette">Esc</button></div> <div class="results svelte-vw7b2v" id="palette-results" role="listbox" aria-label="Commands"></div> <!> <!> <!> <footer class="svelte-vw7b2v"><span role="status"> </span><span>↑ ↓ navigate <span class="separator svelte-vw7b2v">·</span> Enter select</span></footer></dialog>');function Ov(t,e){bt(e,!0);let r=je(e,"loading",3,!1),a=je(e,"loadError",3,""),n,i,l=I(""),o=I(""),u=I(!1),d=I(""),f=!1;const h=D(()=>Rv(e.commands,s(l))),m=D(()=>s(h).find(T=>T.id===s(o))??s(h)[0]),y=T=>`palette-${encodeURIComponent(T)}`;ti(()=>{f=!0;const T=document.activeElement;return n.showModal(),i.focus(),()=>{f=!1,n.close(),T instanceof HTMLElement&&T.isConnected&&T.focus()}});async function q(T){if(!(!T||T.disabled||s(u))){v(u,!0),v(d,"");try{const H=await e.onExecute(T);if(H&&typeof H=="object"&&"ok"in H&&H.ok===!1)throw new Error("error"in H&&typeof H.error=="string"?H.error:"Service action failed.");f&&e.onClose()}catch(H){f&&v(d,H instanceof Error?H.message:"Could not run this command.",!0)}finally{f&&v(u,!1)}}}async function S(T){var se;if(T.isComposing||(T.key==="Enter"&&(T.preventDefault(),q(s(m))),T.key!=="ArrowDown"&&T.key!=="ArrowUp")||(T.preventDefault(),!s(h).length))return;const H=s(h).findIndex(Z=>{var Q;return Z.id===((Q=s(m))==null?void 0:Q.id)});v(o,s(h)[(H+(T.key==="ArrowDown"?1:-1)+s(h).length)%s(h).length].id,!0),await Qn(),(se=document.getElementById(y(s(o))))==null||se.scrollIntoView({block:"nearest"})}var x=Mv(),k=p(x),A=p(k);io(A,{size:20});var L=c(A,2);va(L,T=>i=T,()=>i);var O=c(L,2),z=c(k,2);et(z,21,()=>s(h),T=>T.id,(T,H)=>{var se=Tv();let Z;var Q=p(se),N=p(Q),R=j(N,!0),oe=c(N),$=j(oe,!0),ge=c(Q,2);{var ae=de=>{var ye=Lv();w(de,ye)},Ce=de=>{Wl(de,{size:16})};B(ge,de=>{s(H).disabled?de(ae):s(H).action.type==="open"&&de(Ce,1)})}C(de=>{var ye,Ne;U(se,"id",de),U(se,"aria-selected",((ye=s(m))==null?void 0:ye.id)===s(H).id),U(se,"aria-disabled",s(H).disabled||s(u)),Z=it(se,1,"svelte-vw7b2v",null,Z,{chosen:((Ne=s(m))==null?void 0:Ne.id)===s(H).id}),b(R,s(H).label),b($,s(H).detail)},[()=>y(s(H).id)]),X("click",se,()=>q(s(H))),w(T,se)});var W=c(z,2);{var M=T=>{var H=Nv();w(T,H)};B(W,T=>{s(h).length||T(M)})}var G=c(W,2);{var ce=T=>{var H=Dv(),se=j(H,!0);C(()=>b(se,s(d))),w(T,H)};B(G,T=>{s(d)&&T(ce)})}var ue=c(G,2);{var Y=T=>{var H=Iv(),se=p(H),Z=j(se,!0),Q=c(se);C(()=>{b(Z,a()),Q.disabled=r()}),X("click",Q,function(...N){var R;(R=e.onRetry)==null||R.apply(this,N)}),w(T,H)};B(ue,T=>{a()&&T(Y)})}var re=c(ue,2),ve=p(re),ie=j(ve,!0);va(x,T=>n=T,()=>n),C(T=>{U(L,"aria-activedescendant",T),U(z,"aria-busy",s(u)),b(ie,s(u)?"Running command…":r()?"Loading services…":`${s(h).length} commands`)},[()=>s(m)?y(s(m).id):void 0]),jt("cancel",x,T=>{T.preventDefault(),e.onClose()}),X("click",x,T=>{if(T.target===n){const H=n.getBoundingClientRect();(T.clientX<H.left||T.clientX>H.right||T.clientY<H.top||T.clientY>H.bottom)&&e.onClose()}}),X("input",L,()=>{v(o,""),v(d,"")}),X("keydown",L,S),Nt(L,()=>s(l),T=>v(l,T)),X("click",O,function(...T){var H;(H=e.onClose)==null||H.apply(this,T)}),w(t,x),wt()}nr(["click","input","keydown"]);function No(t){const e=t.replace(/\/+$/,"").split("/").slice(1);if(t==="/"||t==="")return{page:"projects"};const[r,a]=e;if(e.length===1&&(r==="projects"||r==="services"||r==="settings"||r==="about"||r==="changelog"))return{page:r};if(e.length!==2&&e.length!==3||!a)return{page:"not-found"};let n;try{n=decodeURIComponent(a)}catch{return{page:"not-found"}}if(r==="projects"&&/^[a-zA-Z0-9_-]+$/.test(n)){if(e.length===2)return{page:r,projectId:n};if(e[2]==="secrets")return{page:r,projectId:n,section:"secrets"}}return e.length===2&&r==="services"&&/^[a-zA-Z0-9_-]+:[a-zA-Z0-9_-]+$/.test(n)?{page:r,serviceKey:n}:{page:"not-found"}}function kn(t){return t.page==="projects"&&t.projectId?`/projects/${encodeURIComponent(t.projectId)}${t.section?`/${t.section}`:""}`:t.page==="services"&&t.serviceKey?`/services/${encodeURIComponent(t.serviceKey)}`:`/${t.page}`}function zv(t){return t.button===0&&!t.metaKey&&!t.ctrlKey&&!t.shiftKey&&!t.altKey&&!t.defaultPrevented}function Do(t,e,r=t==null?void 0:t.id){const a=e.filter(l=>!r||l.projectId===r),n=((t==null?void 0:t.commands)??[]).map(l=>({key:`${t.id}:${l.name}`,name:l.name,command:l,runtime:a.find(o=>o.name===l.name)})),i=new Set(n.map(l=>l.key));return[...n,...a.filter(l=>!i.has(l.key)).map(l=>({key:l.key,name:l.name,runtime:l}))]}function Uv(t,e){return e?t.replace(/^(http:\/\/[a-z0-9-]+(?:\.[a-z0-9-]+)?\.localhost):\d+(?=\/|$)/i,"$1"):t}async function Hv(t,e=fetch){try{const r=await e("/api/forwarder",{method:t?"POST":"GET",cache:"no-store",...t?{headers:{"content-type":"application/json"},body:JSON.stringify({install:!0})}:{},signal:AbortSignal.timeout(t?135e3:6e3)});if(!r.ok)return{ready:!1,error:"Could not check forwarding. Restart LocalDeck to load the update, then try again."};const a=await r.json();return(a==null?void 0:a.ready)===!0?{ready:!0}:{ready:!1,error:typeof(a==null?void 0:a.error)=="string"?a.error:"Port-80 forwarding is unavailable. Your links still use their original port."}}catch{return{ready:!1,error:"Could not reach LocalDeck. Your links still use their original port."}}}const Fn=1e3,Zl=100,An=5e3,Xl="localdeck-log-limit";function co(t){return Number.isInteger(t)&&t>=Zl&&t<=An}function Ql(){try{const t=Number(localStorage.getItem(Xl));return co(t)?t:Fn}catch{return Fn}}function Ia(t,e){if(t.startsWith("legacy-"))return!1;const[r,a]=t.split("-").map(l=>Number.parseInt(l,36)),[n,i]=e.split("-").map(l=>Number.parseInt(l,36));return r>n||r===n&&a>i}function Io(t,e,r){const a=t.findIndex(o=>o.id===e.id);if(a>=0){if(t[a]===e)return t;t=t.filter((o,u)=>u!==a)}const n=(o,u)=>o.ts-u.ts||o.id.localeCompare(u.id);if(!t.length||n(t[t.length-1],e)<=0)return[...t.slice(Math.max(0,t.length+1-r)),e];let i=0,l=t.length;for(;i<l;){const o=i+l>>>1;n(t[o],e)<0?i=o+1:l=o}return t.length>=r&&i===0?t:[...t.slice(0,i),e,...t.slice(i)].slice(-r)}const ki=500;function Mo(t,e,r){return[...new Map([...t,...e].map(n=>[n.id,n])).values()].sort((n,i)=>n.ts-i.ts||n.id.localeCompare(i.id)).slice(-r)}var Ya,Ja,Za,Xa,Qa,$a,en,tn,rn,sn,an,nn,on;class Bv{constructor(){pe(this,Ya,I(Ue(Ql())));pe(this,Ja,I(Ue([])));pe(this,Za,I(Ue({})));pe(this,Xa,I(Ue({})));pe(this,Qa,I(!1));pe(this,$a,I(null));pe(this,en,I(Ue([])));pe(this,tn,I(null));pe(this,rn,I(Ue({})));pe(this,sn,I(Ue({})));pe(this,an,I(Ue({})));pe(this,nn,I(Ue({})));nt(this,"ws");nt(this,"connecting");nt(this,"catalogRequest",0);nt(this,"refreshingProjects");nt(this,"catalogGeneration",0);nt(this,"detailRequests",{});pe(this,on,I(Ue({})));nt(this,"historyLoads",new Map);nt(this,"liveRevision",0);nt(this,"liveVersions",{});nt(this,"unshare",e=>this.call(`/api/services/${encodeURIComponent(e)}/share`,{method:"DELETE"}));nt(this,"stop",e=>this.call(`/api/services/${encodeURIComponent(e)}/stop`,{method:"POST"}))}get logLimit(){return s(g(this,Ya))}set logLimit(e){v(g(this,Ya),e,!0)}async setLogLimit(e){var n;if(!co(e))throw new Error("Log limit must be an integer between 100 and 5000");const r=this.logLimit;this.logLimit=e;const a=Object.keys(this.logs);for(const i of a)this.logs[i]=(n=this.logs[i])==null?void 0:n.slice(-e);e>r&&await Promise.all(a.map(async i=>{var l;await((l=this.historyLoads.get(i))==null?void 0:l.catch(()=>{})),await this.load(i)}))}get services(){return s(g(this,Ja))}set services(e){v(g(this,Ja),e,!0)}get logs(){return s(g(this,Za))}set logs(e){v(g(this,Za),e,!0)}get requests(){return s(g(this,Xa))}set requests(e){v(g(this,Xa),e,!0)}get connected(){return s(g(this,Qa))}set connected(e){v(g(this,Qa),e,!0)}get selected(){return s(g(this,$a))}set selected(e){v(g(this,$a),e,!0)}get projects(){return s(g(this,en))}set projects(e){v(g(this,en),e,!0)}get selectedProjectId(){return s(g(this,tn))}set selectedProjectId(e){v(g(this,tn),e,!0)}get projectDetails(){return s(g(this,rn))}set projectDetails(e){v(g(this,rn),e,!0)}get shareErrors(){return s(g(this,sn))}set shareErrors(e){v(g(this,sn),e,!0)}get projectErrors(){return s(g(this,an))}set projectErrors(e){v(g(this,an),e,!0)}get pendingActions(){return s(g(this,nn))}set pendingActions(e){v(g(this,nn),e,!0)}get historyBoundaries(){return s(g(this,on))}set historyBoundaries(e){v(g(this,on),e,!0)}get current(){return this.services.find(e=>e.key===this.selected)??this.services[0]}connect(){if(this.ws&&this.ws.readyState<2)return Promise.resolve();if(this.connecting)return this.connecting;const e=this.connectAfterProjects();return this.connecting=e,e.then(()=>{this.connecting===e&&(this.connecting=void 0)},()=>{this.connecting===e&&(this.connecting=void 0)}),e}async connectAfterProjects(){try{await this.loadProjects()}catch{}if(this.ws&&this.ws.readyState<2)return;const e=location.protocol==="https:"?"wss":"ws",r=new WebSocket(`${e}://${location.host}/api/events`);this.ws=r,r.onopen=()=>{this.ws===r&&(this.connected=!0)},r.onclose=()=>{this.ws===r&&(this.ws=void 0,this.connected=!1,setTimeout(()=>void this.connect(),1500))},r.onmessage=a=>{try{this.handle(JSON.parse(a.data))}catch{}}}handle(e){switch(e.type){case"snapshot":{const r=new Set(e.services.map(n=>n.key)),a=new Map;for(const n of e.services){const i=a.get(n.projectId);i?i.push(n):a.set(n.projectId,[n])}for(const n of this.services)r.has(n.key)||this.markLive(n.key);this.services=e.services;for(const[n,i]of Object.entries(this.projectDetails))i&&(this.projectDetails[n]={...i,services:a.get(n)??[]});for(const n of e.services)this.markLive(n.key),this.load(n.key).catch(()=>{});break}case"service":{const r=this.services.some(a=>a.key===e.service.key);this.markLive(e.service.key),this.upsertService(e.service),r||this.load(e.service.key).catch(()=>{});break}case"service:removed":this.markLive(e.name),this.services=this.services.filter(r=>r.key!==e.name),this.removeProjectDetailsService(e.name);break;case"history:cleared":{const r=`${e.service}/${e.kind}`,a=this.historyBoundaries[r];(!a||Ia(e.beforeId,a))&&(this.historyBoundaries[r]=e.beforeId,e.kind==="logs"?this.logs[e.service]=(this.logs[e.service]??[]).filter(n=>Ia(n.id,e.beforeId)):this.requests[e.service]=(this.requests[e.service]??[]).filter(n=>Ia(n.id,e.beforeId)));break}case"log":{if(!this.retained(e.log.service,"logs",e.log.id))break;const r=this.logs[e.log.service]??[];this.logs[e.log.service]=Io(r,e.log,this.logLimit);break}case"request":{if(!this.retained(e.request.service,"requests",e.request.id))break;const r=this.requests[e.request.service]??[],a=!r.some(i=>i.id===e.request.id);this.requests[e.request.service]=Io(r,e.request,ki);const n=this.services.find(i=>i.key===e.request.service);if(n&&a){const i={...n,stats:{...n.stats}};Fv(i,e.request),this.markLive(i.key),this.upsertService(i)}break}}}refreshProjects(){if(this.refreshingProjects)return this.refreshingProjects;const e=this.loadProjects(this.liveRevision,!0);this.refreshingProjects=e;const r=()=>{this.refreshingProjects===e&&(this.refreshingProjects=void 0)};return e.then(r,r),e}async loadProjects(e=this.liveRevision,r=!1){const a=++this.catalogRequest;let n;try{const d=await this.call("/api/projects");if(!Array.isArray(d))throw new Error("projects response must be an array");n=d}catch(d){throw a===this.catalogRequest&&(this.projectErrors.projects=qs(d)),d}if(a!==this.catalogRequest)return;const i=new Set(n.map(d=>d.id)),l=new Set([...this.projects.filter(d=>!i.has(d.id)).map(d=>d.id),...Object.keys(this.projectDetails).filter(d=>!i.has(d))]);this.catalogGeneration++;for(const d of l)this.invalidateProject(d);if(this.projects=n,delete this.projectErrors.projects,!n.length){this.selectedProjectId=null,this.projectDetails={};return}if(r){await Promise.all(n.map(d=>this.loadProjectDetails(d.id,e).catch(()=>{})));return}const u=n.find(d=>d.id===this.selectedProjectId)??n.find(d=>d.available)??n[0];try{await this.selectProject(u.id,e)}catch{}}async selectProject(e,r=this.liveRevision){return this.selectedProjectId=e,this.loadProjectDetails(e,r)}async loadProjectDetails(e,r=this.liveRevision){const a=(this.detailRequests[e]??0)+1;this.detailRequests[e]=a;const n=this.catalogGeneration,i=r;try{const l=await this.call(`/api/projects/${encodeURIComponent(e)}`);if(!l||!Array.isArray(l.services)||!Array.isArray(l.commands))throw new Error("project details response is invalid");if(!this.isCurrentDetailRequest(e,a,n))return l;const o={...l,services:this.mergeFetchedServices(e,l.services,i)};return this.projectDetails[e]=o,this.projects=this.projects.map(u=>u.id===e?zo(o):u),delete this.projectErrors[e],this.syncProjectServices(e,o.services,i),o}catch(l){if(!this.isCurrentDetailRequest(e,a,n))throw l;const o=qs(l);if(this.projectErrors[e]=o,l instanceof Oo&&l.status===422){const u=this.projects.find(d=>d.id===e);if(u){const d={...u,available:!1,error:o};this.projects=this.projects.map(f=>f.id===e?d:f),this.projectDetails[e]={...d,commands:[],services:this.services.filter(f=>f.projectId===e)}}}throw l}}startService(e,r){return this.serviceAction(e,r,"start")}stopService(e,r){return this.serviceAction(e,r,"stop")}restartService(e,r){return this.serviceAction(e,r,"restart")}startAll(e){return this.bulkAction(e,"start")}stopAll(e){return this.bulkAction(e,"stop")}updateDependencies(e,r,a){const n=`${e}:${r}`;return this.pending(`project:${e}:update-dependencies:${r}`,async()=>{try{const i=await this.call(`/api/projects/${encodeURIComponent(e)}/services/${encodeURIComponent(r)}/dependencies`,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({after:[...new Set(a.map(l=>l.toLowerCase()))]})});if(!i||!Array.isArray(i.services)||!Array.isArray(i.commands))throw new Error("project details response is invalid");return this.hasProject(e)&&(this.projectDetails[e]=i,this.projects=this.projects.map(l=>l.id===e?zo(i):l),this.syncProjectServices(e,i.services,this.liveRevision),delete this.projectErrors[n]),i}catch(i){throw this.hasProject(e)&&(this.projectErrors[n]=qs(i)),i}})}forgetProject(e){return this.pending(`project:${e}:forget`,async()=>{try{const r=await this.call(`/api/projects/${encodeURIComponent(e)}`,{method:"DELETE"}),a=this.selectedProjectId===e;if(this.catalogRequest++,this.catalogGeneration++,this.projects=this.projects.filter(n=>n.id!==e),this.invalidateProject(e),a){const n=this.projects[0];if(this.selectedProjectId=(n==null?void 0:n.id)??null,n)try{await this.selectProject(n.id)}catch{}}return r}catch(r){throw this.projectErrors[e]=qs(r),r}})}load(e){const r=this.historyLoads.get(e);if(r)return r;const a=this.loadHistory(e);this.historyLoads.set(e,a);const n=()=>{this.historyLoads.get(e)===a&&this.historyLoads.delete(e)};return a.then(n,n),a}async loadHistory(e){const r=encodeURIComponent(e),[a,n]=await Promise.all([this.call(`/api/services/${r}/logs?limit=${this.logLimit}`,void 0,i=>this.readHistoryBoundary(e,"logs",i)),this.call(`/api/services/${r}/requests?limit=${ki}`,void 0,i=>this.readHistoryBoundary(e,"requests",i))]);if(!Array.isArray(a)||!Array.isArray(n))throw new Error("history response must be an array");this.logs[e]=Mo(a.filter(i=>this.retained(e,"logs",i.id)),this.logs[e]??[],this.logLimit),this.requests[e]=Mo(n.filter(i=>this.retained(e,"requests",i.id)),this.requests[e]??[],ki)}readHistoryBoundary(e,r,a){var i;const n=(i=a.headers)==null?void 0:i.get("x-localdeck-history-boundary");n&&this.handle({type:"history:cleared",eventId:n,service:e,kind:r,beforeId:n})}retained(e,r,a){const n=this.historyBoundaries[`${e}/${r}`];return!n||Ia(a,n)}clearHistory(e,r){return this.pending(`history:${e}:${r}:clear`,async()=>{const a=await this.call(`/api/services/${encodeURIComponent(e)}/${r}`,{method:"DELETE"});this.handle(a)})}async share(e,r){return this.pending(`service:${e}:share`,async()=>{delete this.shareErrors[e];try{return await this.call(`/api/services/${encodeURIComponent(e)}/share`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({password:r||void 0})})}catch(a){throw this.shareErrors[e]=qs(a),a}})}async call(e,r,a){const n=await fetch(e,r),i=await n.json().catch(()=>({}));if(!n.ok)throw new Oo(n.status,typeof i.error=="string"?i.error:`request failed (${n.status})`);return a==null||a(n),i}serviceAction(e,r,a){const n=`${e}:${r}`,i=`service:${e}:${r}:${a}`;return this.pending(i,async()=>{const l=this.liveRevision,o=this.hasProject(e);try{const u=await this.call(`/api/projects/${encodeURIComponent(e)}/services/${encodeURIComponent(r)}/${a}`,{method:"POST"});return(!o||this.hasProject(e))&&(u.ok?delete this.projectErrors[n]:this.projectErrors[n]=u.error??`${a} failed`,u.service&&(this.liveVersions[u.service.key]??0)<=l&&this.upsertService(u.service)),await this.refreshAfterAction(e,o,l),u}catch(u){throw(!o||this.hasProject(e))&&(this.projectErrors[n]=qs(u)),u}})}bulkAction(e,r){return this.pending(`project:${e}:${r}-all`,async()=>{const a=this.liveRevision,n=this.hasProject(e);try{const i=await this.call(`/api/projects/${encodeURIComponent(e)}/${r}`,{method:"POST"});if(!n||this.hasProject(e)){delete this.projectErrors[e];for(const l of i.results)l.ok?delete this.projectErrors[l.key]:this.projectErrors[l.key]=l.error??`${r} failed`,l.service&&(this.liveVersions[l.key]??0)<=a&&this.upsertService(l.service)}return await this.refreshAfterAction(e,n,a),i}catch(i){throw(!n||this.hasProject(e))&&(this.projectErrors[e]=qs(i)),i}})}pending(e,r){const a=this.pendingActions[e];if(a)return a;const n=r();return this.pendingActions[e]=n,n.then(()=>{this.pendingActions[e]===n&&delete this.pendingActions[e]},()=>{this.pendingActions[e]===n&&delete this.pendingActions[e]}),n}async refreshAfterAction(e,r,a){if(!(r&&!this.hasProject(e)))try{await this.loadProjects(a)}catch{}}markLive(e){this.liveVersions[e]=++this.liveRevision}hasProject(e){return this.projects.some(r=>r.id===e)}isCurrentDetailRequest(e,r,a){return this.detailRequests[e]===r&&this.catalogGeneration===a&&this.hasProject(e)}invalidateProject(e){this.detailRequests[e]=(this.detailRequests[e]??0)+1,delete this.projectDetails[e],delete this.projectErrors[e];for(const a of Object.keys(this.projectErrors))a.startsWith(`${e}:`)&&delete this.projectErrors[a];const r=this.services.find(a=>a.key===this.selected);this.services=this.services.filter(a=>a.projectId!==e),(r==null?void 0:r.projectId)===e&&(this.selected=null)}upsertService(e){const r=this.services.findIndex(a=>a.key===e.key);this.services=r===-1?[...this.services,e]:this.services.map(a=>a.key===e.key?e:a),this.updateProjectDetailsService(e)}updateProjectDetailsService(e){const r=this.projectDetails[e.projectId];if(!r)return;const n=r.services.findIndex(i=>i.key===e.key)===-1?[...r.services,e]:r.services.map(i=>i.key===e.key?e:i);this.projectDetails[e.projectId]={...r,services:n}}removeProjectDetailsService(e){for(const[r,a]of Object.entries(this.projectDetails))a!=null&&a.services.some(n=>n.key===e)&&(this.projectDetails[r]={...a,services:a.services.filter(n=>n.key!==e)})}mergeFetchedServices(e,r,a){const n=new Map(this.services.filter(o=>o.projectId===e).map(o=>[o.key,o])),i=[],l=new Set;for(const o of r){const d=(this.liveVersions[o.key]??0)>a?n.get(o.key):o;d&&(i.push(d),l.add(d.key))}for(const o of n.values())!l.has(o.key)&&(this.liveVersions[o.key]??0)>a&&i.push(o);return i}syncProjectServices(e,r,a){const n=this.services.filter(o=>o.projectId!==e),i=this.services.filter(o=>o.projectId===e&&(this.liveVersions[o.key]??0)>a),l=new Map;for(const o of[...r,...i])l.set(o.key,o);this.services=[...n,...l.values()]}}Ya=new WeakMap,Ja=new WeakMap,Za=new WeakMap,Xa=new WeakMap,Qa=new WeakMap,$a=new WeakMap,en=new WeakMap,tn=new WeakMap,rn=new WeakMap,sn=new WeakMap,an=new WeakMap,nn=new WeakMap,on=new WeakMap;class Oo extends Error{constructor(e,r){super(r),this.status=e}}function zo(t){const{commands:e,services:r,...a}=t;return a}function qs(t){return t instanceof Error?t.message:String(t)}function Fv(t,e){const r=t.stats,a=r.avgLatencyMs*r.requests+e.durationMs;r.requests++,e.error?r.proxyErrors++:e.status>=500?r.serverErrors++:e.status>=400?r.clientErrors++:r.ok++,r.avgLatencyMs=Math.round(a/r.requests),r.lastRequestAt=e.ts}const Kv=new Bv;ou();var Vv=E('<section aria-labelledby="sharing-setup-title" class="svelte-1hauwfi"><h3 id="sharing-setup-title" class="svelte-1hauwfi">Public HTTPS sharing</h3> <p class="svelte-1hauwfi">Sharing requires <code>cloudflared</code>, installed separately. LocalDeck does not bundle or download it. Local services and Clean URLs work without it.</p> <ul class="svelte-1hauwfi"><li class="svelte-1hauwfi"><strong>macOS:</strong> <code>brew install cloudflared</code></li> <li class="svelte-1hauwfi"><strong>Windows:</strong> use Cloudflare’s Windows installer or executable and ensure <code>cloudflared.exe</code> is on PATH.</li> <li class="svelte-1hauwfi"><strong>Linux:</strong> use Cloudflare’s package repository or the package for your distribution.</li></ul> <a target="_blank" rel="noreferrer">Cloudflare installation instructions ↗</a> <p class="svelte-1hauwfi">Check your installation with <code>cloudflared --version</code>, then retry sharing. Restart LocalDeck after changing PATH.</p></section>');function $l(t){const e="https://developers.cloudflare.com/tunnel/downloads/";var r=Vv(),a=c(p(r),6);U(a,"href",e),w(t,r)}var Wv=E('<div class="svelte-1vwaeio"><dt class="svelte-1vwaeio"><code class="svelte-1vwaeio"> </code></dt><dd class="svelte-1vwaeio"> </dd></div>'),Gv=E('<details class="svelte-1vwaeio"><summary class="svelte-1vwaeio"> <span class="svelte-1vwaeio"> </span></summary> <dl class="svelte-1vwaeio"></dl></details>'),Yv=E('<section class="about svelte-1vwaeio" aria-labelledby="about-title"><header class="svelte-1vwaeio"><img src="/localdeck-icon.png" alt="LocalDeck’s charcoal Patch Bay icon" width="144" height="144" class="svelte-1vwaeio"/> <p class="eyebrow svelte-1vwaeio">About</p> <h1 id="about-title" class="svelte-1vwaeio">LocalDeck</h1> <p class="intro svelte-1vwaeio">A home for your local development services.</p> <p class="svelte-1vwaeio">Run your apps in the right order, keep their URLs stable, and inspect logs and HTTP requests in one place. When you need to show someone your work, share a service through a Cloudflare tunnel.</p></header> <section aria-labelledby="getting-started" class="svelte-1vwaeio"><h2 id="getting-started" class="svelte-1vwaeio">Get started</h2> <p class="svelte-1vwaeio">Open a terminal in your project folder, then:</p> <ol class="steps svelte-1vwaeio"><li class="svelte-1vwaeio"><code class="svelte-1vwaeio">localdeck init</code><span class="svelte-1vwaeio">Create a .localdeck file from your project’s scripts.</span></li> <li class="svelte-1vwaeio"><code class="svelte-1vwaeio">localdeck up</code><span class="svelte-1vwaeio">Start your services and their dependencies.</span></li> <li class="svelte-1vwaeio"><code class="svelte-1vwaeio">localdeck open</code><span class="svelte-1vwaeio">In a second terminal, open the dashboard to see what’s running.</span></li></ol> <p class="note svelte-1vwaeio">Terminal-launched services stop with Ctrl-C. Services started from the dashboard run in the background, managed by the daemon.</p></section> <!> <section aria-labelledby="command-reference" class="svelte-1vwaeio"><h2 id="command-reference" class="svelte-1vwaeio">Command reference</h2> <p class="svelte-1vwaeio">Examples use <code class="svelte-1vwaeio">web</code> and <code class="svelte-1vwaeio">api</code>; replace them with your service names. If names overlap across projects, use <code class="svelte-1vwaeio">my-project/web</code> or the runtime key from <code class="svelte-1vwaeio">localdeck ps</code>.</p> <div class="command-groups svelte-1vwaeio"></div> <p class="note svelte-1vwaeio">Commands shown here are reference examples. Run them in your terminal. Database services use a database client and cannot be shared through an HTTP tunnel.</p></section> <section aria-labelledby="project-file" class="svelte-1vwaeio"><h2 id="project-file" class="svelte-1vwaeio">Your project file</h2> <p class="svelte-1vwaeio"><code class="svelte-1vwaeio">.localdeck</code> stores service commands, ports, dependencies, readiness checks, and your project nickname. Project settings in the dashboard can save the nickname and supported service configuration back to this file.</p> <p class="svelte-1vwaeio">LocalDeck looks for configuration in the current folder and its parents. It also accepts <code class="svelte-1vwaeio">.localdeck.json</code> and <code class="svelte-1vwaeio">localdeck.json</code>. Running services pick up configuration changes when restarted.</p></section></section>');function Jv(t){const e=[{title:"Set up a project",commands:[["localdeck init","Detects package scripts, writes .localdeck, and adds the project to the dashboard. Use --dry-run to preview, or --force to replace an existing configuration."],["localdeck init --name web --command 'npm run dev'","Creates a service with an explicit command. Works for projects without package scripts too."],["localdeck commands","Lists the configured services, commands, ports, tags, and dependencies. Alias: cmds."],["localdeck doctor","Checks configuration, dependencies, tools, and port availability without starting services. Add --json for a machine-readable report. Already-running ports may be reported as occupied."]]},{title:"Run services",commands:[["localdeck up","Starts every configured service, waiting for each service’s prerequisites to become ready."],["localdeck up web api","Starts services matching the supplied names or tags, plus their prerequisites."],["localdeck up --profile app","Starts the services in the app profile defined in .localdeck, plus their prerequisites."],["localdeck web","Starts the configured web service and its prerequisites. Replace web with your service name. localdeck run web does the same."],["localdeck run api -- node server.js","Runs a one-off service without a configuration file. Put the application command after --."],["localdeck run api --port 4000 --upstream 8787 -- node server.js","Uses port 4000 for the stable URL and forwards to an app listening on port 8787. Omit the flags for automatic allocation and detection. Short flags: -p and -u."]]},{title:"Inspect and stop",commands:[["localdeck ps","Lists registered services, their status, ports, runtime keys, and process information. Stopped entries may remain visible. Aliases: ls, ports."],["localdeck port web","Prints only the service’s stable port, useful in scripts."],["localdeck logs web","Shows the latest 100 captured output lines."],["localdeck logs web -f -n 200","Shows 200 lines and follows live output. --follow and --lines are the long flags. Ctrl-C exits the viewer."],["localdeck requests web -n 50","Shows recent HTTP requests that passed through LocalDeck’s proxy, including status and latency. Defaults to 50 requests."],["localdeck stop web","Stops the service and closes its share. Dependencies and dependent services are not automatically stopped."],["localdeck open","Starts the daemon if needed and opens this dashboard. Add a service name, such as localdeck open web, to open that service’s URL."]]},{title:"Share a service",commands:[["localdeck share web","Creates a public Cloudflare HTTPS tunnel with a generated password and prints both. Requires cloudflared."],["localdeck share web --password your-password","Creates a share protected by the password you supply."],["localdeck share web --public","Creates a share without password protection. Cannot be combined with --password."],["localdeck unshare web","Closes the public tunnel while leaving the local service running. Shares also close when the service stops or restarts, or the daemon shuts down."]]},{title:"Coding agents",commands:[["localdeck mcp","Runs a stdio MCP server for inspecting services, logs and requests, controlling services, replaying recorded GET/HEAD requests, and creating or closing quick shares. Configure this command in your MCP client."],["localdeck mcp --project <id>","Restricts every MCP tool to one exact remembered project ID from list_projects. Connecting starts no application services; disconnecting leaves existing services running."],["localdeck mcp --help","Prints MCP usage without starting the daemon."]]},{title:"Daemon and help",commands:[["localdeck daemon status","Shows the daemon’s status, PID, API URL, uptime, and data directory."],["localdeck daemon start","Starts the background daemon, or reuses the one already running."],["localdeck daemon run","Runs the daemon in the foreground for debugging. Ctrl-C shuts it down."],["localdeck daemon stop","Shuts down the daemon and cleans up its managed services and shares."],["localdeck forward","Runs an optional foreground relay from localhost port 80 to daemon port 7777. Add --to-port 8888 for a custom destination. Requires permission to bind port 80; does not start the daemon."],["localdeck help","Shows CLI usage. Also accepts -h or --help. Running localdeck without arguments additionally lists and remembers the current project when configured."],["localdeck --version","Prints the installed CLI version. Aliases: -v and --v."]]}];var r=Yv(),a=c(p(r),4);$l(a);var n=c(a,2),i=c(p(n),4);et(i,5,()=>e,Cr,(l,o)=>{var u=Gv(),d=p(u),f=p(d),h=c(f),m=j(h),y=c(d,2);et(y,5,()=>s(o).commands,Cr,(q,S)=>{var x=D(()=>Bi(s(S),2));let k=()=>s(x)[0],A=()=>s(x)[1];var L=Wv(),O=p(L),z=p(O),W=j(z,!0),M=c(O),G=j(M,!0);C(()=>{b(W,k()),b(G,A())}),w(q,L)}),C(()=>{b(f,s(o).title),b(m,`${s(o).commands.length??""} commands`)}),w(l,u)}),w(t,r)}var Zv=E('<section aria-labelledby="log-settings-title"><h3 id="log-settings-title" class="svelte-1offp6a">Logs</h3> <form><label for="log-line-limit" class="svelte-1offp6a">Maximum log lines</label> <div class="controls svelte-1offp6a"><input id="log-line-limit" type="number" step="1" aria-describedby="log-limit-help" class="svelte-1offp6a"/><button type="submit">Save</button></div> <p id="log-limit-help" class="svelte-1offp6a">100–5,000 lines. Applies to the combined log view and live history per service. Higher limits use more browser memory. Older output is available only while the daemon retains it.</p> <p class="current svelte-1offp6a" aria-live="polite"> </p></form></section>');function Xv(t,e){bt(e,!0);let r=I(void 0);is(()=>{v(r,e.value,!0)});const a=D(()=>s(r)!==void 0&&co(s(r)));var n=Zv(),i=c(p(n),2),l=c(p(i),2),o=p(l),u=c(o),d=c(l,4),f=j(d);C(h=>{U(o,"min",Zl),U(o,"max",An),u.disabled=!s(a)||s(r)===e.value,b(f,`Current limit: ${h??""} lines. Saved in this browser.`)},[()=>e.value.toLocaleString()]),jt("submit",i,h=>{h.preventDefault(),s(a)&&s(r)!==void 0&&e.onSave(s(r))}),X("input",o,h=>{h.currentTarget.valueAsNumber>An&&(h.currentTarget.value=String(An))}),Nt(o,()=>s(r),h=>v(r,h)),w(t,n),wt()}nr(["input"]);const Qv=[{version:"1.2.2",title:"Preserve secret edits during refreshes",sections:[{title:"Fixed",changes:["Prevent background dashboard refreshes from clearing the secret name and value while you type. Reset the secrets editor only when switching projects."]}]},{version:"1.2.1",title:"Automatic port variables and visible runtime ports",sections:[{title:"Fixed",changes:["Supply LocalDeck’s assigned port through custom variables used by --port, such as API_PORT and APP_PORT, so scripts can avoid occupied fallback ports without project edits.","Follow individual npm, pnpm, Yarn, and Bun package scripts, including npm workspace selectors and package directory options, for dashboard and terminal launches. Preserve explicit service environment settings and secrets."]},{title:"Added",changes:["Show ‘Running on port X’ with the actual app port and a separately labeled proxy port in the dashboard.","Distinguish assigned, configured, listening, stopping, and last-used ports so startup and stopped services are not reported as running."]}]},{version:"1.2.0",title:"Command palette",sections:[{title:"Added",changes:["Open the command palette with Cmd+K / Ctrl+K or Search commands in the sidebar.","Search projects and services to open apps, logs, and requests, or start, stop, and restart services.","Keyboard navigation, focus restoration, service availability checks, and retry for incomplete project loading."]}]},{version:"1.1.0",title:"Project secrets, full responses, and simpler controls",sections:[{title:"Added",changes:["Per-project secrets stored locally outside .localdeck and injected into service environments.","A dedicated Secrets page with Add, Replace, and Remove controls.","Missing-secret checks and secret redaction in service output, diagnostics, and MCP responses.","A separate Response section with full captured bodies loaded on demand from a 64 MiB cache.","Per-service buttons to clear requests and logs, with clearing preserved across refreshes and daemon restarts."]},{title:"Changed",changes:["Service rows now show Start/Stop and an Options menu for logs, requests, and sharing.","Project pages include a Secrets button beside Settings.","Updated nickname and secret-name placeholders.","Hide successful Svelte, Vue, Astro, MDX, and Stylus development files by default.","Combine small response chunks to reduce capture memory overhead.","Show when a full response has expired or a transfer is incomplete."]},{title:"Fixed",changes:["Prevent cleared records from returning through delayed history loads or reconnects.","Clarify that direct Wrangler requests and Worker service bindings bypass LocalDeck capture."]},{title:"Removed",changes:["Separate log, request, and share buttons from service rows."]}]},{version:"1.0.3",title:"Cleaner requests and CLI updates",sections:[{title:"Request filtering",changes:["Hide successful asset and development-module requests by default using browser resource types and file extensions, with explicit Vite, Next.js static, and SvelteKit immutable-asset paths.","Keep failures, mutations, page navigations, and recognized API paths visible. Add a saved Show assets & dev traffic toggle and a hidden-request count. Filtering does not discard captured records."]},{title:"CLI updater",changes:["Add localdeck --update to install the latest public npm release into the existing global npm installation prefix.","Verify the updated CLI before stopping the daemon, then restart through the newly installed CLI. Failed installation or validation leaves the running daemon untouched.","Explain that daemon restart stops managed services and public shares; services must be started again afterward.","Support standard global npm installs on macOS, Linux, and Windows, plus custom Unix prefixes. Reject source checkouts, linked builds, local installs, npx caches, and unrecognized layouts.","Report missing npm, permission errors, shutdown timeouts, and restart failures without invoking sudo."]}]},{version:"1.0.2",title:"Request inspection and automatic crash recovery",sections:[{title:"Request inspection",changes:["Restore request inspection and GET/HEAD replay in the dashboard, with separate View requests and View logs actions on services and project pages.","Add persistent Requests and Logs controls to the bottom bar. Switch views directly while retaining selected service sources.","Expand or collapse request details by clicking anywhere on a request row. Add full-row hover and keyboard focus highlights, while retaining keyboard button access.","Organize details in one column with Request headers, Response headers, Query parameters, Cookies, and Body sections, all collapsed by default.","Capture original HTTP request and response headers, preserving duplicate headers and Set-Cookie attributes. Limit each direction to 100 headers or 16 KiB.","Capture original request and response body previews up to 16 KiB per direction without buffering the full transfer. Show incomplete and truncated transfers explicitly.","Decode complete gzip, deflate, and Brotli bodies within the preview limit. Display binary or undecodable compressed data as Base64.","Show request cookies, response cookies, and repeated query parameters. Preserve captured values in local request history; older records explicitly identify missing capture data.","Display replay responses inside Body. Replay remains restricted to GET/HEAD, sends no original cookies, authorization, or body, and keeps response-size and timeout limits."]},{title:"Automatic crash recovery",changes:["Retry unexpectedly exited dashboard-managed and terminal-managed services up to three times, waiting three seconds before each attempt.","Cancel pending retries on Stop, Stop all, Ctrl-C, or daemon shutdown. Require a manual start after the retry budget is exhausted.","Log each retry attempt and preserve the underlying crash error when the restart limit is reached.","Clean up the previous process tree before retrying, guard readiness checks against stale processes, and revalidate upstream ownership when a terminal service changes PID."]},{title:"Documentation and validation",changes:["Document request capture limits, local storage of captured headers and cookies, replay behavior, and automatic restart semantics.","Add coverage for bounded body and header capture, duplicate cookies, compressed and interrupted transfers, retry limits, cancellation, and request metadata rendering."]}]},{version:"1.0.1",title:"Routing and packaging fixes",sections:[{title:"Fixes",changes:["Keep health checks on the detected IPv4 or IPv6 listener, preventing routing to another project using the same port on a different loopback address. Ignore stale health-check results after an upstream change.","Run platform-independent forwarder checks on Linux and macOS; restrict native plutil validation to macOS."]},{title:"Documentation and packaging",changes:["Remove private repository links from npm metadata and the README. Include configuration, command, dashboard, and MCP documentation in the package.","Align the README configuration example with the commands array generated by localdeck init and remove the assumed health endpoint."]}]},{version:"1.0.0",title:"Product launch",sections:[{title:"Project setup and configuration",changes:["Initialize .localdeck from package scripts, preview detection with --dry-run, or define commands explicitly for other languages.","Remember projects by configuration-file identity. Show unavailable projects with recovery errors instead of dropping them from the dashboard.","Configure startup dependencies, service tags, and named profiles. Start prerequisites first and stop project services in reverse dependency order.","Edit project nicknames, public/upstream ports, readiness checks, timing, and dependencies in project settings. Save configuration atomically; apply runtime changes after restart.","Disable nickname Save when its normalized value is unchanged. Expand service configuration to the available page width."]},{title:"Runtime and networking",changes:["Run existing development commands through a background daemon, with stable public ports and automatic upstream listener detection.","Add native Windows process and TCP listener discovery through PowerShell, plus a dedicated Windows networking CI job. Remove built-in Windows/Linux forwarding without invoking the macOS installer.","Provide project-qualified service identities and nickname-based localhost URLs. Reject ambiguous bare service names instead of selecting the wrong project.","Inject PORT and LOCALDECK_URL and resolve service references for local communication. Support TCP and HTTP readiness checks and database endpoints.","Keep terminal-owned and daemon-owned process lifecycles distinct. Clean up child process groups on stop, failed startup, and shutdown.","Offer optional port-free URLs through a verified local forwarder, with macOS setup, retry, removal, and fallback to original port URLs.","Add a Windows UAC installer for a persistent, loopback-only portproxy rule, guarded by a machine-level ownership marker, with verification and administrator-approved removal. Native elevated testing is pending.","Cancel pending public-share startup during shutdown so tunnel startup does not delay service cleanup."]},{title:"Dashboard navigation and controls",changes:["Add dedicated /projects, /services, /settings, /about, and /changelog pages with direct links, refresh, and browser Back/Forward support.","Render the requested page before daemon data loads, eliminating the All Services flash when refreshing Projects.","Search configured and running services across projects. Start and stop services directly in the list; open service output in the Logs panel instead of a separate service page.","Add a collapsible, resizable sidebar with saved preferences and a compact mobile layout.","Align Local runtime, daemon connection, active-service count, and Logs in one footer row.","Show an Enable Clean URLs action above Local runtime when Clean URLs are off. Enable forwarding directly, with pending and retry states.","Center action labels and empty states while keeping service rows full-width and left-aligned. Use neutral keyboard focus indicators, underlined Logs controls, and a borderless close icon.","Dismiss popup menus on outside interaction or Escape. Remove the redundant project Activity section."]},{title:"Logs and troubleshooting",changes:["Start and stop individual services from project pages, open their specific log tabs, and manage sharing with optional passwords, public URL copying, and Stop sharing. Display active public links beneath local service URLs in both service views.","Distinguish sharing lifecycle events and tunnel requests with teal SHARE labels; keep application stdout separate.","Stream service output live. Select multiple services in a bottom Logs panel, merge their output chronologically, or switch to individual service tabs.","Filter retained output, follow new lines, resize the panel with pointer or keyboard, and remember its height.","Configure the log-line limit in Settings from 100 to 5,000, with a default of 1,000. Apply it to live buffering and the combined view, and save the preference in the browser.","Preserve record identity and ordering when merging history with live output. Retry failed history loads and keep removed sources available for deselection.","Explain port conflicts with actionable recovery steps, including Vite strictPort and PORT configuration. Keep raw errors under Technical details and include guidance in startup logs.","Record proxied HTTP requests and expose request inspection through the CLI/API. Support bounded GET/HEAD replay through the API.","Generate local diagnostics with configuration, readiness failures, and recent logs, redacting environment values and recognized credentials."]},{title:"CLI, sharing, and integrations",changes:["Provide init, doctor, commands, up, run, ps, port, logs, requests, stop, open, and daemon-management commands, plus shorthand configured-service launches.","Add --h and --v aliases for help and version alongside the standard flags.","Share local HTTP services over HTTPS using cloudflared, with optional password protection and explicit share cleanup.","Treat incoming public tunnel traffic as reachability confirmation when local DNS probes lag. Add masked share passwords with on-demand reveal and remove input focus outlines.","Verify public tunnel connectivity before marking a share active. Keep tunnel startup and failure status in the daemon so refreshing the dashboard preserves it. Close the Share menu on submission and show the allocated URL beside its verification spinner. Show a spinner in the URL position while connecting and an inline error on failure. Suggest opening the pending link after one minute. Bound startup to two minutes and close unreachable tunnels with retry guidance.","Forward shared HTTP and WebSocket requests using the upstream Host so Vite accepts tunnel traffic. Preserve the public hostname and HTTPS scheme in forwarded headers.","Explain the separate cloudflared installation requirement in Settings, About, and platform-specific sharing errors, with official installation instructions.","Expose project and service tools to MCP clients. Access diagnostics through the daemon package export instead of a relative source import.","Authenticate CLI control and attach requests with an owner-only daemon token and validate browser origins for dashboard control requests."]},{title:"Packaging and release validation",changes:["Prepare one npm package containing the CLI, daemon, and bundled dashboard. Runtime requires Node.js 20 or newer; Bun is used for development and builds.","Bundle self-hosted IBM Plex fonts, the LocalDeck icon, license text, and third-party notices.","Adopt the LocalDeck Free-Use Proprietary License: free personal and commercial use, with restrictions on selling LocalDeck or charging for access to it.","Add TypeScript/Svelte checks, unit and process integration tests, installed-package tests, and clean-build artifact verification."]}]}];var $v=E('<li class="svelte-1tl5wtp"> </li>'),ef=E('<section class="release-section svelte-1tl5wtp"><h3 class="svelte-1tl5wtp"> </h3><ul class="svelte-1tl5wtp"></ul></section>'),tf=E('<article class="svelte-1tl5wtp"><h2 class="svelte-1tl5wtp"> <span class="svelte-1tl5wtp"> </span></h2> <!></article>'),rf=E('<section class="changelog svelte-1tl5wtp" aria-labelledby="changelog-title"><header class="svelte-1tl5wtp"><h1 id="changelog-title" class="svelte-1tl5wtp">Changelog</h1><p class="svelte-1tl5wtp">What’s new in LocalDeck.</p></header> <!></section>');function sf(t){var e=rf(),r=c(p(e),2);et(r,1,()=>Qv,a=>a.version,(a,n)=>{var i=tf(),l=p(i),o=p(l),u=c(o),d=j(u,!0),f=c(l,2);et(f,1,()=>s(n).sections,Cr,(h,m)=>{var y=ef(),q=p(y),S=j(q,!0),x=c(q);et(x,5,()=>s(m).changes,Cr,(k,A)=>{var L=$v(),O=j(L,!0);C(()=>b(O,s(A))),w(k,L)}),C(()=>b(S,s(m).title)),w(h,y)}),C(()=>{U(i,"aria-labelledby",`release-${s(n).version}`),U(l,"id",`release-${s(n).version}`),b(o,`v${s(n).version??""} `),b(d,s(n).title)}),w(a,i)}),w(t,e)}function Ht(t){const e=t.ownerDocument;function r(n){t.open&&!n.composedPath().includes(t)&&(t.open=!1)}function a(n){var i;n.key!=="Escape"||!t.open||(t.open=!1,(i=t.querySelector("summary"))==null||i.focus(),n.stopPropagation())}return e.addEventListener("pointerdown",r,!0),e.addEventListener("focusin",r),t.addEventListener("keydown",a),{destroy(){e.removeEventListener("pointerdown",r,!0),e.removeEventListener("focusin",r),t.removeEventListener("keydown",a)}}}var af=E('<form class="editor-popover svelte-sh54s5"><h2 class="svelte-sh54s5"> </h2> <div class="fields svelte-sh54s5"><label class="svelte-sh54s5">Variable name<input placeholder="SECRET_KEY" pattern="[A-Za-z_][A-Za-z0-9_]*" spellcheck="false" autocapitalize="off" required="" class="svelte-sh54s5"/></label> <label class="svelte-sh54s5">Secret value<input type="password" placeholder="Enter a value" autocomplete="new-password" required="" class="svelte-sh54s5"/></label></div> <p class="section-note svelte-sh54s5">Saved values are never displayed.</p> <button class="primary svelte-sh54s5"> </button></form>'),nf=E('<button class="text-action remove svelte-sh54s5">Remove</button>'),of=E('<li class="svelte-sh54s5"><code class="svelte-sh54s5"> </code> <span><i class="svelte-sh54s5"></i> </span> <div class="actions svelte-sh54s5"><details class="secret-editor svelte-sh54s5"><summary class="text-action svelte-sh54s5"> </summary> <!></details> <!></div></li>'),lf=E('<div class="list-heading svelte-sh54s5" aria-hidden="true"><span>Variable</span><span>Status</span><span></span></div> <ul class="svelte-sh54s5"></ul>',1),cf=E('<p class="empty svelte-sh54s5">No secrets yet. Choose Add secret to get started.</p>'),uf=E('<p class="saved svelte-sh54s5" role="status"> </p>'),df=E('<p class="error svelte-sh54s5" role="alert"> </p>'),vf=E('<section class="secrets svelte-sh54s5"><div class="section-heading svelte-sh54s5"><div><h2 class="svelte-sh54s5">Environment secrets</h2><span class="count svelte-sh54s5"> </span></div> <details class="secret-editor svelte-sh54s5"><summary class="add-secret svelte-sh54s5"><!>Add secret</summary> <!></details></div> <p class="section-note svelte-sh54s5">Available only to this project. Changes apply when the service next starts.</p> <!> <!> <!> <aside class="storage-note svelte-sh54s5"><strong class="svelte-sh54s5">Stored locally · Not encrypted</strong><p class="svelte-sh54s5">Secrets are stored in plaintext on this computer, outside your project. They are not encrypted. Anyone with access to the file can read them.</p></aside></section>');function ff(t,e){bt(e,!0);const r=N=>{var R=af(),oe=p(R),$=j(oe,!0),ge=c(oe,2),ae=p(ge),Ce=c(p(ae)),de=c(ae,2),ye=c(p(de)),Ne=c(ge,4),ot=j(Ne,!0);C(()=>{b($,s(q)?"Replace secret":s(f)?"Set secret value":"Add secret"),Ce.readOnly=s(f)!=="",Ce.disabled=s(l),ye.disabled=s(l),Ne.disabled=s(l)||!s(i)||!s(n),b(ot,s(l)?"Saving…":"Save secret")}),jt("submit",R,A),Nt(Ce,()=>s(i),Et=>v(i,Et)),Nt(ye,()=>s(n),Et=>v(n,Et)),w(N,R)};let a=I(Ue([])),n=I(""),i=I(""),l=I(!1),o=I(""),u=I(""),d=0,f=I(null),h;function m(N,R){if(s(l)){N.preventDefault();return}const $=N.currentTarget.closest("details");$.open||(h&&(h.open=!1),h=$,v(f,R,!0),v(i,R,!0),v(n,""),v(o,""),v(u,""))}async function y(N){var oe;const R=N.currentTarget;R===h&&R.open&&(await Qn(),R.open&&((oe=R.querySelector(s(f)?'input[type="password"]':"input"))==null||oe.focus())),R===h&&!R.open&&(v(f,null),v(n,""),v(i,""))}const q=D(()=>s(a).some(N=>N.name===s(i)&&N.configured));async function S(N,R){const oe=await fetch(`/api/projects/${encodeURIComponent(N)}/secrets`),$=await oe.json();if(R===d){if(!oe.ok)throw new Error($.error??"Could not load secrets");v(a,$.secrets,!0)}}const x=D(()=>e.project.id);is(()=>{const N=s(x),R=++d;v(a,[],!0),v(n,""),v(i,""),v(o,""),v(u,""),S(N,R).catch(oe=>{R===d&&v(o,oe instanceof Error?oe.message:"Could not load secrets",!0)})});async function k(N,R){var ge;const oe=e.project.id,$=d;v(l,!0),v(o,""),v(u,"");try{const ae=await fetch(`/api/projects/${encodeURIComponent(oe)}/secrets/${encodeURIComponent(N)}`,{method:R,...R==="PUT"?{headers:{"content-type":"application/json"},body:JSON.stringify({value:s(n)})}:{}}),Ce=await ae.json();if($!==d)return;if(!ae.ok)throw new Error(Ce.error??"Could not update secret");v(n,""),v(i,""),R==="PUT"&&h&&(h.open=!1,(ge=h.querySelector("summary"))==null||ge.focus()),v(u,R==="PUT"?"Secret saved.":"Secret removed.",!0),await S(oe,$)}catch(ae){$===d&&v(o,ae instanceof Error?ae.message:"Could not update secret",!0)}finally{v(l,!1)}}function A(N){N.preventDefault(),!s(l)&&s(i)&&s(n)&&k(s(i),"PUT")}var L=vf(),O=p(L),z=p(O),W=c(p(z)),M=j(W),G=c(z,2),ce=p(G),ue=p(ce);pv(ue,{size:14});var Y=c(ce,2);{var re=N=>{r(N)};B(Y,N=>{s(f)===""&&N(re)})}Ba(G,N=>Ht==null?void 0:Ht(N));var ve=c(O,4);{var ie=N=>{var R=lf(),oe=c(Ke(R),2);et(oe,21,()=>s(a),$=>$.name,($,ge)=>{var ae=of(),Ce=p(ae),de=j(Ce,!0),ye=c(Ce,2);let Ne;var ot=c(p(ye),1,!0),Et=c(ye,2),Dt=p(Et),Ft=p(Dt),ir=j(Ft,!0),mr=c(Ft,2);{var kt=rt=>{r(rt)};B(mr,rt=>{s(f)===s(ge).name&&rt(kt)})}Ba(Dt,rt=>Ht==null?void 0:Ht(rt));var Ze=c(Dt,2);{var Rr=rt=>{var qt=nf();C(()=>qt.disabled=s(l)),X("click",qt,()=>k(s(ge).name,"DELETE")),w(rt,qt)};B(Ze,rt=>{s(ge).configured&&rt(Rr)})}C(()=>{b(de,s(ge).name),Ne=it(ye,1,"secret-status svelte-sh54s5",null,Ne,{configured:s(ge).configured}),b(ot,s(ge).configured?"Configured":"Missing value"),U(Ft,"aria-label",`${s(ge).configured?"Replace":"Set value for"} ${s(ge).name}`),U(Ft,"aria-disabled",s(l)),b(ir,s(ge).configured?"Replace":"Set value")}),jt("toggle",Dt,y),X("click",Ft,rt=>m(rt,s(ge).name)),w($,ae)}),w(N,R)},T=N=>{var R=cf();w(N,R)};B(ve,N=>{s(a).length?N(ie):N(T,-1)})}var H=c(ve,2);{var se=N=>{var R=uf(),oe=j(R,!0);C(()=>b(oe,s(u))),w(N,R)};B(H,N=>{s(u)&&N(se)})}var Z=c(H,2);{var Q=N=>{var R=df(),oe=j(R,!0);C(()=>b(oe,s(o))),w(N,R)};B(Z,N=>{s(o)&&N(Q)})}C(()=>{b(M,`${s(a).length??""} ${s(a).length===1?"variable":"variables"}`),U(ce,"aria-disabled",s(l))}),jt("toggle",G,y),X("click",ce,N=>m(N,"")),w(t,L),wt()}nr(["click"]);var pf=E('<a class="mono svelte-iodvty" target="_blank" rel="noreferrer"> </a>'),hf=E('<a class="mono svelte-iodvty" target="_blank" rel="noreferrer"> </a><span>Checking…</span>',1),gf=E('<span class="connecting svelte-iodvty" role="status"><span class="spinner svelte-iodvty"><!></span> <!></span>'),mf=E('<span class="error svelte-iodvty" role="alert"><!><span> </span></span>'),_f=E('<span class="password svelte-iodvty"><span>Password:</span><span class="mono"> </span><button class="svelte-iodvty"> </button></span>'),yf=E('<span class="slow-hint svelte-iodvty" role="status">Taking longer than expected. <a target="_blank" rel="noreferrer" class="svelte-iodvty">Open the link to test it.</a></span>'),bf=E('<span class="error svelte-iodvty" role="alert"> </span>'),wf=E('<div class="share-line svelte-iodvty"><!> <!> <!> <!></div>');function ec(t,e){bt(e,!0);let r=je(e,"protectedShare",3,!1),a=je(e,"pending",3,!1),n=je(e,"error",3,""),i=I(Ue(Date.now()));const l=D(()=>a()&&!e.url&&!!e.pendingUrl&&e.startedAt!==void 0&&s(i)-e.startedAt>=6e4);is(()=>{if(!a()||e.url||e.startedAt===void 0)return;v(i,Date.now(),!0);const M=e.startedAt+6e4-Date.now();if(M<=0)return;const G=setTimeout(()=>{v(i,Date.now(),!0)},M);return()=>clearTimeout(G)});let o=I(null),u=I(!1),d=I(!1),f=I("");is(()=>{e.url,e.pendingUrl,v(o,null),v(u,!1),v(f,"")});async function h(){if(s(u)){v(u,!1);return}if(!e.serviceKey||s(d))return;const M=e.url??e.pendingUrl;v(d,!0),v(f,"");try{const G=await fetch(`/api/services/${encodeURIComponent(e.serviceKey)}/share-password`,{method:"POST",cache:"no-store"}),ce=await G.json();if(!G.ok)throw new Error(ce.error??"Could not load password");if(M!==(e.url??e.pendingUrl))return;if(typeof ce.password!="string")throw new Error("This share no longer has a password.");v(o,ce.password,!0),v(u,!0)}catch(G){v(f,G instanceof Error?G.message:"Could not load password",!0)}finally{v(d,!1)}}var m=wf(),y=p(m);{var q=M=>{var G=pf(),ce=j(G,!0);C(()=>{U(G,"href",e.url),U(G,"aria-label",`Shared link for ${e.name}`),b(ce,e.url)}),w(M,G)},S=M=>{var G=gf(),ce=p(G),ue=p(ce);av(ue,{size:14});var Y=c(ce,2);{var re=ie=>{var T=hf(),H=Ke(T),se=j(H,!0);C(()=>{U(H,"href",e.pendingUrl),U(H,"aria-label",`Pending shared link for ${e.name}`),b(se,e.pendingUrl)}),w(ie,T)},ve=ie=>{var T=Ml("Creating tunnel… up to two minutes");w(ie,T)};B(Y,ie=>{e.pendingUrl?ie(re):ie(ve,-1)})}w(M,G)},x=M=>{var G=mf(),ce=p(G);oo(ce,{size:14});var ue=c(ce),Y=j(ue,!0);C(()=>b(Y,n())),w(M,G)};B(y,M=>{e.url?M(q):a()?M(S,1):n()&&M(x,2)})}var k=c(y,2);{var A=M=>{var G=_f(),ce=c(p(G)),ue=j(ce,!0),Y=c(ce),re=j(Y,!0);C(()=>{b(ue,s(u)?s(o):"••••••••"),Y.disabled=s(d),U(Y,"aria-label",`${s(u)?"Hide":"Show"} share password for ${e.name}`),b(re,s(d)?"Loading…":s(u)?"Hide":"Show")}),X("click",Y,h),w(M,G)};B(k,M=>{(e.url||a()&&e.pendingUrl)&&r()&&M(A)})}var L=c(k,2);{var O=M=>{var G=yf(),ce=c(p(G));C(()=>U(ce,"href",e.pendingUrl)),w(M,G)};B(L,M=>{s(l)&&M(O)})}var z=c(L,2);{var W=M=>{var G=bf(),ce=j(G,!0);C(()=>b(ce,s(f))),w(M,G)};B(z,M=>{s(f)&&M(W)})}w(t,m),wt()}nr(["click"]);var kf=E('<a class="share-url mono svelte-1u7hpyn" target="_blank" rel="noreferrer"> </a> <p class="svelte-1u7hpyn"> </p> <div class="actions svelte-1u7hpyn"><button><!> </button><button><!> </button></div>',1),Sf=E('<p class="svelte-1u7hpyn">Start the service and wait until it is ready to share.</p>'),jf=E('<p role="status" class="svelte-1u7hpyn">Connecting and checking the public link… This can take up to two minutes.</p> <p class="svelte-1u7hpyn">Expose this service through a public HTTPS link. Requires <a href="https://developers.cloudflare.com/tunnel/downloads/" target="_blank" rel="noreferrer">cloudflared</a>.</p> <!> <form><label class="svelte-1u7hpyn">Password (optional)<input type="password" autocomplete="new-password" class="svelte-1u7hpyn"/></label> <p class="svelte-1u7hpyn">Leave blank to allow anyone with the link.</p> <button class="primary" type="submit"> </button></form>',1),xf=E('<p class="error svelte-1u7hpyn" role="alert"> </p>'),Ef=E('<details><summary class="svelte-1u7hpyn"><!> </summary> <div class="share-popover svelte-1u7hpyn"><strong> </strong> <!> <!></div></details>');function qf(t,e){bt(e,!0);let r=je(e,"busy",3,!1),a=je(e,"menuItem",3,!1),n=I(void 0),i=I(""),l=I(!1),o=I(""),u=I(!1);const d=D(()=>{var k,A;return r()||s(l)||((A=(k=e.service)==null?void 0:k.shareStartup)==null?void 0:A.status)==="starting"}),f=D(()=>e.service&&!zt(e.service)&&e.service.status!=="stopped"&&e.service.status!=="stopping"&&e.service.upstreamReady);async function h(k){var A;if(!s(d)){v(l,!0),v(o,""),v(u,!1),s(n)&&(s(n).open=!1,(A=s(n).querySelector("summary"))==null||A.focus());try{k?await e.onUnshare():await e.onShare(s(i)||null),v(i,"")}catch(L){v(o,L instanceof Error?L.message:String(L),!0)}finally{v(l,!1)}}}async function m(){var k;if((k=e.service)!=null&&k.share)try{await navigator.clipboard.writeText(e.service.share.url),v(u,!0)}catch{v(o,"Could not copy. Select and copy the link below.")}}var y=_s(),q=Ke(y);{var S=k=>{var A=Ef();let L;var O=p(A),z=p(O);bv(z,{size:14});var W=c(z,1,!0),M=c(O,2),G=p(M),ce=j(G),ue=c(G,2);{var Y=T=>{var H=kf(),se=Ke(H),Z=j(se,!0),Q=c(se,2),N=j(Q,!0),R=c(Q,2),oe=p(R),$=p(oe);Yl($,{size:14});var ge=c($,1,!0),ae=c(oe),Ce=p(ae);oo(Ce,{size:14});var de=c(Ce,1,!0);C(()=>{U(se,"href",e.service.share.url),b(Z,e.service.share.url),b(N,e.service.share.protected?"Password protected":"Public link — anyone with the URL can access it"),U(oe,"aria-label",`Copy share link for ${e.name}`),b(ge,s(u)?"Copied":"Copy link"),ae.disabled=s(d),b(de,s(d)?"Stopping…":"Stop sharing")}),X("click",oe,m),X("click",ae,()=>h(!0)),w(T,H)},re=T=>{var H=jf(),se=Ke(H),Z=c(se,4);{var Q=ae=>{var Ce=Sf();w(ae,Ce)};B(Z,ae=>{s(f)||ae(Q)})}var N=c(Z,2),R=p(N),oe=c(p(R)),$=c(R,4),ge=j($,!0);C(()=>{U(se,"hidden",!s(d)),oe.disabled=s(d),$.disabled=!s(f)||s(d),b(ge,s(d)?"Starting tunnel…":"Create share link")}),jt("submit",N,ae=>{ae.preventDefault(),s(f)&&h(!1)}),Nt(oe,()=>s(i),ae=>v(i,ae)),w(T,H)};B(ue,T=>{var H;(H=e.service)!=null&&H.share?T(Y):T(re,-1)})}var ve=c(ue,2);{var ie=T=>{var H=xf(),se=j(H,!0);C(()=>b(se,s(o))),w(T,H)};B(ve,T=>{s(o)&&T(ie)})}va(A,T=>v(n,T),()=>s(n)),Ba(A,T=>Ht==null?void 0:Ht(T)),C(()=>{var T;L=it(A,1,"share-control svelte-1u7hpyn",null,L,{"menu-item":a()}),U(O,"aria-label",`Share ${e.name}`),b(W,(T=e.service)!=null&&T.share?"Shared":s(d)?"Connecting…":"Share"),b(ce,`Share ${e.name??""}`)}),w(k,A)},x=D(()=>!e.service||!zt(e.service));B(q,k=>{s(x)&&k(S)})}w(t,y),wt()}nr(["click"]);var Pf=E('<div class="share-action svelte-m918bk"><!></div>'),Cf=E('<details class="service-options svelte-m918bk"><summary class="svelte-m918bk">Options <!></summary> <div class="options-popover svelte-m918bk"><button class="svelte-m918bk"><!>View logs</button> <button class="svelte-m918bk"><!>View requests</button> <!></div></details>');function Oi(t,e){bt(e,!0);let r=je(e,"shareable",3,!0),a=je(e,"busy",3,!1),n;function i(){var k;n.open=!1,(k=n.querySelector("summary"))==null||k.focus()}function l(k){i(),k()}var o=Cf(),u=p(o),d=c(p(u));Gl(d,{size:14});var f=c(u,2),h=p(f),m=p(h);Wd(m,{size:15});var y=c(h,2),q=p(y);rv(q,{size:15});var S=c(y,2);{var x=k=>{var A=Pf(),L=p(A);qf(L,{get service(){return e.service},get name(){return e.name},get busy(){return a()},menuItem:!0,onShare:O=>(i(),e.onShare(O)),onUnshare:()=>(i(),e.onUnshare())}),w(k,A)};B(S,k=>{r()&&k(x)})}va(o,k=>n=k,()=>n),Ba(o,k=>Ht==null?void 0:Ht(k)),C(()=>{U(u,"aria-label",`Options for ${e.name}`),U(f,"aria-label",`More actions for ${e.name}`),U(h,"aria-label",`Show logs for ${e.name}`),U(y,"aria-label",`View requests for ${e.name}`)}),jt("toggle",o,()=>{if(!n.open)for(const k of n.querySelectorAll("details"))k.open=!1}),X("click",h,()=>l(e.onLogs)),X("click",y,()=>l(e.onRequests)),w(t,o),wt()}nr(["click"]);function Af(t){var l,o;const e=t.replace(/\x1b\[[0-9;]*m/g,"");if(!/\bEADDRINUSE\b|\b(?:port|address)\b[^\n]*already in use/i.test(e))return;const r=((l=/\bport\s+(\d+)\s+is already in use/i.exec(e))==null?void 0:l[1])??((o=/\b(?:listen|address already in use)[^\n]*:(\d+)\b/i.exec(e))==null?void 0:o[1]),a=r&&Number(r)>0&&Number(r)<=65535?r:void 0,n=a?`Port ${a} is already in use.`:"The service’s port is already in use.",i=/\bvite\b|\bhttpServerStart\b/.test(e);return{title:n,steps:i?["Check server.port and server.strictPort in your Vite config. With strictPort: true, Vite exits when that port is occupied.",`To use LocalDeck’s assigned port, set server.port to Number(process.env.PORT) || ${a??"5173"}. You can keep strictPort: true.`,"Alternatively, stop the other instance, or set strictPort: false to let Vite try another port. Automatic port detection must be enabled in LocalDeck (leave upstream unset)."]:["Stop the other instance, or configure the app to listen on the PORT environment variable supplied by LocalDeck.","If the app requires a fixed port, choose an unused port in the app and set LocalDeck’s upstream to match."]}}var Rf=E('<li class="svelte-13pnhk8"> </li>'),Lf=E('<strong class="svelte-13pnhk8"> </strong> <ul class="svelte-13pnhk8"></ul> <details><summary class="svelte-13pnhk8">Technical details</summary><pre class="svelte-13pnhk8"> </pre></details>',1),Tf=E('<p class="svelte-13pnhk8"> </p>'),Nf=E('<div class="service-error svelte-13pnhk8" role="alert"><!></div>');function zi(t,e){bt(e,!0);const r=D(()=>Af(e.message));var a=Nf(),n=p(a);{var i=o=>{var u=Lf(),d=Ke(u),f=j(d,!0),h=c(d,2);et(h,21,()=>s(r).steps,Cr,(S,x)=>{var k=Rf(),A=j(k,!0);C(()=>b(A,s(x))),w(S,k)});var m=c(h,2),y=c(p(m)),q=j(y,!0);C(()=>{b(f,s(r).title),b(q,e.message)}),w(o,u)},l=o=>{var u=Tf(),d=j(u,!0);C(()=>b(d,e.message)),w(o,u)};B(n,o=>{s(r)?o(i):o(l,-1)})}w(t,a),wt()}var Df=E('<p role="alert" class="svelte-1xk5qw3"> </p>'),If=E('<p class="svelte-1xk5qw3">Review before sharing with your coding assistant. Known secrets are redacted; logs may contain other private data.</p> <label>Report to copy<textarea rows="10" spellcheck="false" class="svelte-1xk5qw3"></textarea></label> <button> </button>',1),Mf=E('<details class="diagnostics svelte-1xk5qw3"><summary class="svelte-1xk5qw3">Help &amp; diagnostics</summary> <p class="svelte-1xk5qw3">For setup problems, run <code>localdeck doctor</code> in your project folder.</p> <button> </button> <!> <!></details>');function Of(t,e){bt(e,!0);let r=I(""),a=I(""),n=I(!1),i=I(!1);async function l(){v(n,!0),v(a,""),v(i,!1);try{const S=await fetch(`/api/projects/${encodeURIComponent(e.projectId)}/diagnostics`),x=await S.json();if(!S.ok)throw new Error(x.error??"Could not prepare diagnostics");v(r,x.report,!0)}catch(S){v(a,S instanceof Error?S.message:String(S),!0)}finally{v(n,!1)}}async function o(){try{await navigator.clipboard.writeText(s(r)),v(i,!0)}catch{v(a,"Clipboard unavailable. Select and copy the report below.")}}var u=Mf(),d=c(p(u),4),f=j(d,!0),h=c(d,2);{var m=S=>{var x=Df(),k=j(x,!0);C(()=>b(k,s(a))),w(S,x)};B(h,S=>{s(a)&&S(m)})}var y=c(h,2);{var q=S=>{var x=If(),k=c(Ke(x),2),A=c(p(k)),L=c(k,2),O=j(L,!0);C(()=>b(O,s(i)?"Copied":"Copy diagnostic report")),Nt(A,()=>s(r),z=>v(r,z)),X("click",L,o),w(S,x)};B(y,S=>{s(r)&&S(q)})}C(()=>{d.disabled=s(n),b(f,s(n)?"Preparing…":"Preview diagnostic report")}),X("click",d,l),w(t,u),wt()}nr(["click"]);var zf=E('<label class="svelte-1gn57ev">Public port<input type="number" min="1" max="65535" placeholder="Automatic" class="svelte-1gn57ev"/></label>'),Uf=E('<label class="svelte-1gn57ev">Health path<input required="" pattern="/.*" placeholder="/health" class="svelte-1gn57ev"/></label><label class="svelte-1gn57ev">Expected status<input type="number" min="100" max="599" placeholder="Any successful status" class="svelte-1gn57ev"/></label>',1),Hf=E('<label class="svelte-1gn57ev">Readiness<select class="svelte-1gn57ev"><option>TCP connection</option><option>HTTP response</option></select></label> <!> <label class="svelte-1gn57ev">Timeout (ms)<input type="number" min="100" max="600000" required="" class="svelte-1gn57ev"/></label> <label class="svelte-1gn57ev">Check interval (ms)<input type="number" min="50" max="60000" required="" class="svelte-1gn57ev"/></label>',1),Bf=E('<p class="svelte-1gn57ev">Command readiness checks are configured in <code>.localdeck</code>.</p>'),Ff=E('<label class="svelte-1gn57ev"><input type="checkbox" class="svelte-1gn57ev"/> </label>'),Kf=E("<small>No other services</small>"),Vf=E('<p role="alert" class="error svelte-1gn57ev"> </p>'),Wf=E('<p role="status" class="svelte-1gn57ev"> </p>'),Gf=E('<form class="svelte-1gn57ev"><fieldset class="svelte-1gn57ev"><div class="fields svelte-1gn57ev"><!> <label class="svelte-1gn57ev">Upstream port<input type="number" min="1" max="65535" placeholder="Automatic" class="svelte-1gn57ev"/></label> <!></div> <div class="dependencies svelte-1gn57ev"><span>Starts after</span><div class="svelte-1gn57ev"></div></div> <button class="primary" type="submit"> </button></fieldset> <!><!></form>');function Yf(t,e){bt(e,!0);const r=[];function a(){return{port:e.command.port,upstream:e.command.upstream,type:e.command.ready.type,path:e.command.ready.type==="http"?e.command.ready.path:"/",status:e.command.ready.type==="http"?e.command.ready.status:void 0,timeout:e.command.ready.timeoutMs,interval:e.command.ready.intervalMs,after:[...e.command.after]}}let n=Ue(a()),i=I(!1),l=I(""),o=I("");async function u(Y){Y.preventDefault(),v(i,!0),v(l,""),v(o,"");try{const re=await fetch(`/api/projects/${encodeURIComponent(e.project.id)}/services/${encodeURIComponent(e.command.name)}/config`,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({port:n.port??null,upstream:n.upstream??null,after:n.after,...n.type==="command"?{}:{ready:{type:n.type,timeoutMs:n.timeout,intervalMs:n.interval,...n.type==="http"?{path:n.path,...n.status?{status:n.status}:{}}:{}}}})}),ve=await re.json();if(!re.ok)throw new Error(ve.error??"Could not save configuration.");v(o,"Saved. Applies on the next service start.");try{await e.onSaved()}catch{v(o,s(o)+" Could not refresh the project.")}}catch(re){v(l,re instanceof Error?re.message:String(re),!0)}finally{v(i,!1)}}var d=Gf(),f=p(d),h=p(f),m=p(h);{var y=Y=>{var re=zf(),ve=c(p(re));Nt(ve,()=>n.port,ie=>n.port=ie),w(Y,re)};B(m,Y=>{(!e.command.serviceType||e.command.serviceType==="http")&&Y(y)})}var q=c(m,2),S=c(p(q)),x=c(q,2);{var k=Y=>{var re=Hf(),ve=Ke(re),ie=c(p(ve)),T=p(ie);T.value=T.__value="tcp";var H=c(T);H.value=H.__value="http",no(ie);var se=c(ve,2);{var Z=$=>{var ge=Uf(),ae=Ke(ge),Ce=c(p(ae)),de=c(ae),ye=c(p(de));Nt(Ce,()=>n.path,Ne=>n.path=Ne),Nt(ye,()=>n.status,Ne=>n.status=Ne),w($,ge)};B(se,$=>{n.type==="http"&&$(Z)})}var Q=c(se,2),N=c(p(Q)),R=c(Q,2),oe=c(p(R));Hl(ie,()=>n.type,$=>n.type=$),Nt(N,()=>n.timeout,$=>n.timeout=$),Nt(oe,()=>n.interval,$=>n.interval=$),w(Y,re)},A=Y=>{var re=Bf();w(Y,re)};B(x,Y=>{e.command.ready.type!=="command"?Y(k):Y(A,-1)})}var L=c(h,2),O=c(p(L));et(O,21,()=>e.project.commands.filter(Y=>Y.name!==e.command.name),Cr,(Y,re)=>{var ve=Ff(),ie=p(ve),T,H=c(ie,1,!0);C(()=>{T!==(T=s(re).name)&&(ie.value=(ie.__value=T)??""),b(H,s(re).name)}),Sd(r,[],ie,()=>(s(re).name,n.after),se=>n.after=se),w(Y,ve)},Y=>{var re=Kf();w(Y,re)});var z=c(L,2),W=j(z,!0),M=c(f,2);{var G=Y=>{var re=Vf(),ve=j(re,!0);C(()=>b(ve,s(l))),w(Y,re)};B(M,Y=>{s(l)&&Y(G)})}var ce=c(M);{var ue=Y=>{var re=Wf(),ve=j(re,!0);C(()=>b(ve,s(o))),w(Y,re)};B(ce,Y=>{s(o)&&Y(ue)})}C(()=>{f.disabled=s(i),b(W,s(i)?"Saving…":"Save configuration")}),jt("submit",d,u),Nt(S,()=>n.upstream,Y=>n.upstream=Y),w(t,d),wt()}var Jf=E('<p class="error svelte-ruqv4s" role="alert"> </p>'),Zf=E('<p class="notice svelte-ruqv4s" role="status"> </p>'),Xf=E('<form class="svelte-ruqv4s"><label for="project-nickname" class="svelte-ruqv4s">Nickname</label> <div class="controls svelte-ruqv4s"><input id="project-nickname" placeholder="nickname" maxlength="63" pattern="[A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])?" autocapitalize="none" spellcheck="false" class="svelte-ruqv4s"/> <button class="primary" type="submit"> </button></div> <p class="hint svelte-ruqv4s">Saved in .localdeck. Leave blank to remove the nickname.</p> <!> <!></form>');function Qf(t,e){bt(e,!0);let r=je(e,"onSaved",3,async()=>{}),a=I(""),n=I(!1),i=I(""),l=I(""),o=I("");const u=D(()=>s(a).trim().toLowerCase()),d=D(()=>s(u)===s(o));is(()=>{e.projectId,v(a,e.nickname??"",!0),v(o,(e.nickname??"").trim().toLowerCase(),!0)});async function f(){if(s(n)||s(d))return;const O=s(u);v(n,!0),v(i,""),v(l,"");try{const z=await fetch(`/api/projects/${encodeURIComponent(e.projectId)}/nickname`,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({nickname:O})}),W=await z.json();if(!z.ok)throw new Error(W.error??"Could not save nickname.");v(a,W.nickname??"",!0),v(o,s(a).trim().toLowerCase(),!0),v(l,O?"Nickname saved to the project file.":"Nickname removed from the project file.",!0);try{await r()()}catch{v(l,s(l)+" Reload the dashboard to refresh the displayed links.")}}catch(z){v(i,z instanceof Error?z.message:String(z),!0)}finally{v(n,!1)}}var h=Xf(),m=c(p(h),2),y=p(m),q=c(y,2),S=j(q,!0),x=c(m,4);{var k=O=>{var z=Jf(),W=j(z,!0);C(()=>b(W,s(i))),w(O,z)};B(x,O=>{s(i)&&O(k)})}var A=c(x,2);{var L=O=>{var z=Zf(),W=j(z,!0);C(()=>b(W,s(l))),w(O,z)};B(A,O=>{s(l)&&O(L)})}C(()=>{y.disabled=s(n),q.disabled=s(n)||s(d),b(S,s(n)?"Saving…":"Save")}),jt("submit",h,O=>{O.preventDefault(),f()}),Nt(y,()=>s(a),O=>v(a,O)),w(t,h),wt()}var $f=E("<span>Waiting for listener</span>"),ep=E('<span title="Local Deck’s stable port forwards requests to the app">Proxy port <span class="mono"> </span></span>'),tp=E('<div class="service-port svelte-1poq4pf" aria-label="Service ports"><span title="The port your app process listens on"> <strong class="mono svelte-1poq4pf"> </strong></span> <!> <!></div>');function Ui(t,e){bt(e,!0);const r=D(()=>lo(e.service)),a=D(()=>!e.service||e.service.status==="stopped"?"Last used port":e.service.status==="stopping"?"Stopping on port":s(r)==="ready"||s(r)==="listening"?"Running on port":e.service.upstreamReady?"Listening on port":e.service.upstreamSource==="manual"?"Configured port":"Assigned port");var n=_s(),i=Ke(n);{var l=o=>{var u=tp(),d=p(u),f=p(d),h=c(f),m=j(h,!0),y=c(d,2);{var q=A=>{var L=$f();w(A,L)};B(y,A=>{e.service.status!=="stopped"&&e.service.status!=="stopping"&&!e.service.upstreamReady&&A(q)})}var S=c(y,2);{var x=A=>{var L=ep(),O=c(p(L)),z=j(O,!0);C(()=>b(z,e.service.stablePort)),w(A,L)},k=D(()=>!zt(e.service));B(S,A=>{s(k)&&A(x)})}C(()=>{b(f,`${s(a)??""} `),b(m,e.service.upstreamPort)}),w(o,u)};B(i,o=>{e.service&&o(l)})}w(t,n),wt()}function rp(t,e,r){return`service:${t}:${e}:${r}`}function Sn(t,e,r,a){const n=t.has(rp(e,r,a));return{pending:n,label:{start:n?"Starting…":"Start",stop:n?"Stopping…":"Stop",restart:n?"Restarting…":"Restart"}[a]}}var sp=E('<a class="open-app svelte-l7un4l" target="_blank" rel="noreferrer">Open app <!></a>'),Si=E('<button class="primary svelte-l7un4l"> </button>'),ap=E('<div class="project-actions svelte-l7un4l"><!> <button class="manage-button svelte-l7un4l" aria-label="Project settings" title="Project settings"><!><span>Settings</span></button> <a class="manage-button svelte-l7un4l" aria-label="Project secrets"><!><span>Secrets</span></a></div>'),np=E('<!><a target="_blank" rel="noreferrer" class="svelte-l7un4l"> </a><button aria-label="Copy app address" class="svelte-l7un4l"><!></button>',1),ip=E('<span class="muted svelte-l7un4l"> </span>'),op=E('<details class="svelte-l7un4l"><summary class="svelte-l7un4l"><strong class="svelte-l7un4l"> </strong><span class="svelte-l7un4l"> </span><span class="edit-label svelte-l7un4l">Edit</span></summary> <!></details>'),lp=E("<option> </option>"),cp=E('<details class="profiles svelte-l7un4l"><summary class="svelte-l7un4l">Advanced · Startup profiles</summary> <label for="startup-profile">Profile</label> <select id="startup-profile"><option>Choose a profile</option><!></select> <button> </button></details>'),up=E('<p class="bulk-summary svelte-l7un4l" aria-live="polite"> </p>'),dp=E('<span class="command mono svelte-l7un4l"> </span>'),jn=E('<button class="svelte-l7un4l"> </button>'),vp=E('<article><div class="service-main svelte-l7un4l"><span class="service-heading svelte-l7un4l"><span></span> <strong class="svelte-l7un4l"> </strong><span class="status-text svelte-l7un4l"> </span></span> <span class="ownership svelte-l7un4l"> </span> <span class="service-url mono svelte-l7un4l"> </span> <!> <!></div> <div class="service-actions svelte-l7un4l"><!> <!></div> <!></article>'),fp=E('<div class="active-services svelte-l7un4l"><h2 class="svelte-l7un4l">Active services</h2> <p class="svelte-l7un4l">These services can still be stopped while the configuration is unavailable.</p> <div class="service-grid svelte-l7un4l"></div></div>'),pp=E('<div class="unavailable svelte-l7un4l" role="alert"><div><h2 class="svelte-l7un4l">Project unavailable</h2> <p class="svelte-l7un4l"> </p></div> <div class="recovery-actions svelte-l7un4l"><button class="primary svelte-l7un4l"> </button> <button class="danger svelte-l7un4l"> </button></div></div> <!>',1),hp=E('<p class="inline-error svelte-l7un4l" role="alert"> </p>'),gp=E('<a class="mono svelte-l7un4l" target="_blank" rel="noreferrer"> </a>'),mp=E('<span class="dependency-summary svelte-l7un4l"><span class="svelte-l7un4l">Starts after</span> </span>'),_p=E('<a class="service-open svelte-l7un4l" target="_blank" rel="noreferrer">Open ↗</a>'),yp=E('<button class="copy svelte-l7un4l"> </button>'),bp=E('<p class="svelte-l7un4l"> </p>'),wp=E('<label class="svelte-l7un4l"><input type="checkbox" name="after"/> <span> </span></label>'),kp=E('<span class="no-dependencies svelte-l7un4l">No other services are configured.</span>'),Sp=E('<details class="service-settings svelte-l7un4l"><summary> </summary> <p class="command mono svelte-l7un4l"> </p> <details class="advanced-config"><summary>Advanced · Readiness &amp; environment</summary> <p class="svelte-l7un4l"> </p> <pre> </pre> <!> <p class="svelte-l7un4l">Edit <code>.localdeck</code> to customize these settings.</p></details> <details class="dependency-editor svelte-l7un4l"><summary class="svelte-l7un4l">Edit startup order</summary> <form class="svelte-l7un4l"><fieldset class="svelte-l7un4l"><legend class="svelte-l7un4l">Starts after</legend> <!></fieldset> <div class="dependency-actions svelte-l7un4l"><button class="primary" type="submit"> </button> <button type="button">Cancel</button></div></form></details></details>'),jp=E('<article><div class="service-main svelte-l7un4l"><span class="overview-row svelte-l7un4l"><span class="service-icon svelte-l7un4l"><!></span> <strong class="svelte-l7un4l"> </strong> <span class="technical-name svelte-l7un4l"> </span> <span><span class="status-dot svelte-l7un4l"></span> </span></span> <span class="service-heading svelte-l7un4l"><span></span> <strong class="svelte-l7un4l"> </strong> <span class="status-text svelte-l7un4l"> </span></span> <span class="ownership svelte-l7un4l"> </span> <div class="service-links svelte-l7un4l"><!> <!></div> <span class="service-url mono svelte-l7un4l"> </span> <!> <!></div> <div class="service-actions svelte-l7un4l"><!> <!></div> <div class="service-actions svelte-l7un4l"><!> <!> <!> <!></div> <!> <!></article>'),xp=E('<div class="empty-services svelte-l7un4l"><h2 class="svelte-l7un4l"> </h2> <p class="svelte-l7un4l"> </p></div>'),Ep=E('<div class="launch-panel svelte-l7un4l"><div><p class="eyebrow svelte-l7un4l">Local development</p> <h2 class="svelte-l7un4l"> </h2> <p class="svelte-l7un4l"> </p></div></div> <div class="project-actions bulk-actions svelte-l7un4l"><button class="svelte-l7un4l"> </button> <button class="svelte-l7un4l"> </button></div> <div class="list-heading svelte-l7un4l"><div><h2 class="svelte-l7un4l">Services</h2><div class="summary-row svelte-l7un4l" aria-label="Project service summary"><span><strong class="svelte-l7un4l"> </strong> configured</span> <span><strong class="svelte-l7un4l"> </strong> running</span> <span><strong class="svelte-l7un4l"> </strong> stopped</span></div></div> <label class="service-search svelte-l7un4l"><span class="svelte-l7un4l">Find a service</span><input type="search" placeholder="Search services…" class="svelte-l7un4l"/></label></div> <!> <div class="service-grid svelte-l7un4l"></div> <p class="readiness-summary svelte-l7un4l"> </p>',1),qp=E('<section class="project-overview svelte-l7un4l" aria-labelledby="project-title"><header class="svelte-l7un4l"><div class="heading svelte-l7un4l"><h1 id="project-title" class="svelte-l7un4l"> </h1> <p class="project-health svelte-l7un4l"><span></span> </p></div> <!></header> <div class="project-address svelte-l7un4l"><!></div> <div class="settings-panel svelte-l7un4l"><button>← Back to overview</button> <h1 class="settings-title svelte-l7un4l">Project settings</h1> <p class="settings-project svelte-l7un4l"> </p> <!> <h2 class="svelte-l7un4l">Service configuration</h2> <p class="settings-note svelte-l7un4l">Saved to .localdeck. Running services keep their current configuration until restarted.</p> <div class="config-list svelte-l7un4l"></div> <details class="settings-tools svelte-l7un4l"><summary>Diagnostics</summary><!></details> <!></div> <!> <div><!></div></section>');function Pp(t,e){bt(e,!0);let r=je(e,"onStartAll",3,async()=>({ok:!0,results:[]})),a=je(e,"onStopAll",3,async()=>({ok:!0,results:[]})),n=je(e,"onStartService",3,async()=>({ok:!0})),i=je(e,"onStopService",3,async()=>({ok:!0})),l=je(e,"onRestartService",3,async()=>({ok:!0})),o=je(e,"onUpdateDependencies",3,async()=>e.project),u=je(e,"onRetry",3,async()=>{}),d=je(e,"onForget",3,async()=>{}),f=je(e,"onSelectService",3,()=>{}),h=je(e,"onViewRequests",3,()=>{}),m=je(e,"onOpenSecrets",3,()=>{}),y=je(e,"shareErrors",19,()=>({})),q=je(e,"onShare",3,async()=>{}),S=je(e,"onUnshare",3,async()=>{}),x=I(""),k=I(Ue({})),A=I(!1),L=I(""),O=I(!1),z=I(!1),W=I(null),M=I(""),G=I("");async function ce(F,J){try{await navigator.clipboard.writeText(J),v(G,F,!0)}catch{v(k,{...s(k),[`${e.project.id}:${F}`]:"Could not copy. Select the address and copy it manually."},!0)}}async function ue(){v(O,!0),v(x,"");try{const F=await fetch(`/api/projects/${encodeURIComponent(e.project.id)}/profiles/${encodeURIComponent(s(L))}`,{method:"POST"}),J=await F.json();if(!F.ok)throw new Error(J.error??"Profile could not start");v(x,J.ok?"Profile started.":J.results.filter(le=>!le.ok).map(le=>le.error).join("; "),!0)}catch(F){v(x,R(F),!0)}finally{v(O,!1)}}const Y=D(()=>e.services.filter(F=>F.projectId===e.project.id)),re=D(()=>s(Y).filter(F=>!zt(F)&&F.status!=="stopped"&&F.status!=="stopping"&&F.upstreamReady)),ve=D(()=>s(re).find(F=>F.name==="web")??s(re)[0]),ie=D(()=>s(Y).filter(F=>F.readinessStatus==="failed"||F.lastError).length),T=D(()=>s(Y).filter(F=>F.status!=="stopped").length),H=D(()=>e.project.commands.filter(F=>{const J=s(Y).find(le=>le.name===F.name);return!J||J.status==="stopped"}).length),se=D(()=>{const F=e.project.commands.map(J=>({command:J,runtime:s(Y).find(le=>le.name===J.name),configured:!0}));for(const J of s(Y))e.project.commands.some(le=>le.name===J.name)||F.push({command:{name:J.name,run:J.command??"command unavailable",tags:[],after:[],ready:{type:"tcp",timeoutMs:6e4,intervalMs:400}},runtime:J,configured:!1});return F}),Z=D(()=>e.pending.has(`project:${e.project.id}:start-all`)),Q=D(()=>e.pending.has(`project:${e.project.id}:stop-all`)),N=D(()=>e.pending.has(`project:${e.project.id}:forget`)),R=F=>F instanceof Error?F.message:String(F);async function oe(F){v(x,""),v(k,{...s(k),[e.project.id]:void 0},!0);try{const J=await(F==="start"?r()():a()()),le=J.results.filter(Me=>Me.ok).length,Re=J.results.length-le,Xe=F==="start"?"started":"stopped";v(x,Re?`${le} ${Xe}; ${Re} failed.`:`${le} ${Xe} successfully.`,!0)}catch(J){v(k,{...s(k),[e.project.id]:R(J)},!0)}}async function $(F,J){const le=`${e.project.id}:${F}`;v(k,{...s(k),[le]:void 0},!0);try{J==="start"?await n()(F):J==="stop"?await i()(F):await l()(F)}catch(Re){v(k,{...s(k),[le]:R(Re)},!0)}}async function ge(F,J){var Me;F.preventDefault();const le=F.currentTarget,Re=new FormData(le).getAll("after").map(String),Xe=`${e.project.id}:${J}`;v(k,{...s(k),[Xe]:void 0},!0);try{await o()(J,Re),(Me=le.closest("details"))==null||Me.removeAttribute("open")}catch(Oe){v(k,{...s(k),[Xe]:R(Oe)},!0)}}function ae(F){var le,Re;const J=F.currentTarget;(le=J.form)==null||le.reset(),(Re=J.closest("details"))==null||Re.removeAttribute("open")}async function Ce(){v(A,!0),v(k,{...s(k),[e.project.id]:void 0},!0);try{await u()()}catch(F){v(k,{...s(k),[e.project.id]:R(F)},!0)}finally{v(A,!1)}}async function de(){v(k,{...s(k),[e.project.id]:void 0},!0);try{await d()()}catch(F){v(k,{...s(k),[e.project.id]:R(F)},!0)}}const ye=lo;var Ne=qp(),ot=p(Ne),Et=p(ot),Dt=p(Et),Ft=j(Dt,!0),ir=c(Dt,2),mr=p(ir);let kt;var Ze=c(mr,1,!0),Rr=c(Et,2);{var rt=F=>{var J=ap(),le=p(J);{var Re=ke=>{var we=sp(),ut=c(p(we));Wl(ut,{size:19}),C(()=>U(we,"href",s(ve).urls[0])),w(ke,we)},Xe=ke=>{var we=Si(),ut=j(we,!0);C(()=>{we.disabled=s(Z)||s(Q),b(ut,s(Z)?"Starting…":"Start project")}),X("click",we,()=>oe("start")),w(ke,we)};B(le,ke=>{var we;(we=s(ve))!=null&&we.urls[0]?ke(Re):ke(Xe,-1)})}var Me=c(le,2),Oe=p(Me);Jl(Oe,{size:16});var Be=c(Me,2),ft=p(Be);Qd(ft,{size:16}),C(ke=>{U(Me,"aria-expanded",s(z)),U(Be,"href",ke)},[()=>`/projects/${encodeURIComponent(e.project.id)}/secrets`]),X("click",Me,()=>{v(z,!s(z)),v(M,"")}),X("click",Be,function(...ke){var we;(we=m())==null||we.apply(this,ke)}),w(F,J)};B(Rr,F=>{e.project.available&&F(rt)})}var qt=c(ot,2),ws=p(qt);{var Lr=F=>{var J=np(),le=Ke(J);ev(le,{size:18});var Re=c(le),Xe=j(Re,!0),Me=c(Re),Oe=p(Me);{var Be=ke=>{var we=Ml("Copied");w(ke,we)},ft=ke=>{Yl(ke,{size:16})};B(Oe,ke=>{s(G)===s(ve).name?ke(Be):ke(ft,-1)})}C(ke=>{U(Re,"href",s(ve).urls[0]),b(Xe,ke)},[()=>s(ve).urls[0].replace(/^https?:\/\//,"").replace(/\/$/,"")]),X("click",Me,()=>ce(s(ve).name,s(ve).urls[0])),w(F,J)},We=F=>{var J=ip(),le=j(J,!0);C(()=>b(le,s(T)?"Waiting for your app to be ready…":"Start your project to get an app link.")),w(F,J)};B(ws,F=>{var J;(J=s(ve))!=null&&J.urls[0]?F(Lr):F(We,-1)})}var st=c(qt,2),Pt=p(st),ls=c(Pt,4),Tr=j(ls,!0),Jt=c(ls,2);Qf(Jt,{get projectId(){return e.project.id},get nickname(){return e.project.nickname},get onSaved(){return u()}});var Zt=c(Jt,6);et(Zt,21,()=>e.project.commands,F=>F.name,(F,J)=>{var le=op(),Re=p(le),Xe=p(Re),Me=j(Xe,!0),Oe=c(Xe),Be=j(Oe,!0),ft=c(Re,2);{var ke=we=>{Yf(we,{get project(){return e.project},get command(){return s(J)},get onSaved(){return u()}})};B(ft,we=>{s(W)===s(J).name&&we(ke)})}C(()=>{le.open=s(W)===s(J).name,b(Me,s(J).name),b(Be,s(J).run)}),jt("toggle",le,we=>{we.currentTarget.open?v(W,s(J).name,!0):s(W)===s(J).name&&v(W,null)}),w(F,le)});var cs=c(Zt,2),Jr=c(p(cs));Of(Jr,{get projectId(){return e.project.id}});var _a=c(cs,2);{var ya=F=>{var J=cp(),le=c(p(J),4),Re=p(le);Re.value=Re.__value="";var Xe=c(Re);et(Xe,17,()=>Object.keys(e.project.profiles),Cr,(Be,ft)=>{var ke=lp(),we=j(ke,!0),ut={};C(()=>{b(we,s(ft)),ut!==(ut=s(ft))&&(ke.value=(ke.__value=ut)??"")}),w(Be,ke)}),no(le);var Me=c(le,2),Oe=j(Me,!0);C(()=>{Me.disabled=!s(L)||s(O),b(Oe,s(O)?"Starting profile…":"Start profile")}),Hl(le,()=>s(L),Be=>v(L,Be)),X("click",Me,ue),w(F,J)},ba=D(()=>e.project.profiles&&Object.keys(e.project.profiles).length);B(_a,F=>{s(ba)&&F(ya)})}var K=c(st,2);{var fe=F=>{var J=up(),le=j(J,!0);C(()=>b(le,s(x))),w(F,J)};B(K,F=>{s(x)&&F(fe)})}var Pe=c(K,2);let De;var Tt=p(Pe);{var Ct=F=>{var J=pp(),le=Ke(J),Re=p(le),Xe=c(p(Re),2),Me=j(Xe,!0),Oe=c(Re,2),Be=p(Oe),ft=j(Be,!0),ke=c(Be,2),we=j(ke,!0),ut=c(le,2);{var Nr=Kt=>{var Xt=fp(),yr=c(p(Xt),4);et(yr,21,()=>s(Y),Dr=>Dr.key,(Dr,Le)=>{const Zr=D(()=>Sn(e.pending,e.project.id,s(Le).name,"stop")),Ir=D(()=>s(k)[s(Le).key]??e.errors[s(Le).key]??s(Le).lastError);var Qt=vp();let Xr;var us=p(Qt),or=p(us),Qr=p(or);let ks;var $r=c(Qr,2),Ss=j($r,!0),wa=c($r),js=j(wa,!0),xs=c(or,2),Vs=j(xs,!0),lt=c(xs,2),_t=j(lt,!0),ee=c(lt,2);Ui(ee,{get service(){return s(Le)}});var Se=c(ee,2);{var lr=ht=>{var At=dp(),Or=j(At);C(()=>b(Or,`$ ${s(Le).command??""}`)),w(ht,At)};B(Se,ht=>{s(Le).command&&ht(lr)})}var cr=c(us,2),es=p(cr);{var Vt=ht=>{var At=jn(),Or=j(At,!0);C(()=>{At.disabled=s(Zr).pending,b(Or,s(Zr).label)}),X("click",At,()=>$(s(Le).name,"stop")),w(ht,At)};B(es,ht=>{s(Le).status!=="stopped"&&ht(Vt)})}var Mr=c(es,2);{let ht=D(()=>!zt(s(Le))),At=D(()=>e.pending.has(`service:${s(Le).key}:share`));Oi(Mr,{get service(){return s(Le)},get name(){return s(Le).name},get shareable(){return s(ht)},get busy(){return s(At)},onLogs:()=>f()(s(Le).key),onRequests:()=>h()(s(Le).key),onShare:Or=>q()(s(Le).key,Or),onUnshare:()=>S()(s(Le).key)})}var Es=c(cr,2);{var Ws=ht=>{zi(ht,{get message(){return s(Ir)}})};B(Es,ht=>{s(Ir)&&ht(Ws)})}C((ht,At)=>{Xr=it(Qt,1,"service-card svelte-l7un4l",null,Xr,{failed:ht}),ks=it(Qr,1,"status-dot svelte-l7un4l",null,ks,{running:s(Le).status!=="stopped"}),b(Ss,s(Le).name),b(js,At),b(Vs,s(Le).managedBy==="terminal"?"terminal owned":"daemon managed"),b(_t,s(Le).urls[0])},[()=>!!s(Ir),()=>ye(s(Le))]),w(Dr,Qt)}),w(Kt,Xt)};B(ut,Kt=>{s(Y).length&&Kt(Nr)})}C(()=>{b(Me,e.project.error??e.errors[e.project.id]??"The project configuration could not be loaded."),Be.disabled=s(A),b(ft,s(A)?"Retrying…":"Retry"),ke.disabled=s(N),b(we,s(N)?"Forgetting…":"Forget project")}),X("click",Be,Ce),X("click",ke,de),w(F,J)},_r=F=>{var J=Ep(),le=Ke(J),Re=p(le),Xe=c(p(Re),2),Me=j(Xe,!0),Oe=c(Xe,2),Be=j(Oe,!0),ft=c(le,2),ke=p(ft),we=j(ke,!0),ut=c(ke,2),Nr=j(ut,!0),Kt=c(ft,2),Xt=p(Kt),yr=c(p(Xt)),Dr=p(yr),Le=p(Dr),Zr=j(Le,!0),Ir=c(Dr,2),Qt=p(Ir),Xr=j(Qt,!0),us=c(Ir,2),or=p(us),Qr=j(or,!0),ks=c(Xt,2),$r=c(p(ks)),Ss=c(Kt,2);{var wa=lt=>{var _t=hp(),ee=j(_t,!0);C(()=>b(ee,s(k)[e.project.id]??e.errors[e.project.id])),w(lt,_t)};B(Ss,lt=>{(e.errors[e.project.id]||s(k)[e.project.id])&&lt(wa)})}var js=c(Ss,2);et(js,21,()=>s(se).filter(lt=>lt.command.name.toLowerCase().includes(s(M).toLowerCase())),lt=>lt.command.name,(lt,_t)=>{const ee=D(()=>s(_t).command),Se=D(()=>s(_t).runtime),lr=D(()=>Sn(e.pending,e.project.id,s(ee).name,"start")),cr=D(()=>Sn(e.pending,e.project.id,s(ee).name,"stop")),es=D(()=>Sn(e.pending,e.project.id,s(ee).name,"restart")),Vt=D(()=>!s(Se)||s(Se).status==="stopped"),Mr=D(()=>{var te;return s(k)[`${e.project.id}:${s(ee).name}`]??e.errors[`${e.project.id}:${s(ee).name}`]??((te=s(Se))==null?void 0:te.lastError)});var Es=jp();let Ws;var ht=p(Es),At=p(ht),Or=p(At),ri=p(Or);{var si=te=>{Kd(te,{size:23})},ai=D(()=>zt(s(ee))),ni=te=>{Yd(te,{size:23})},fn=te=>{Hd(te,{size:23})};B(ri,te=>{s(ai)?te(si):s(ee).name==="web"?te(ni,1):te(fn,-1)})}var pn=c(Or,2),ii=j(pn,!0),Gs=c(pn,2),hn=j(Gs,!0),gn=c(Gs,2);let ka;var oi=c(p(gn),1,!0),Sa=c(At,2),_=p(Sa);let P;var V=c(_,2),me=j(V,!0),_e=c(V,2),be=j(_e,!0),ze=c(Sa,2),Ge=j(ze),at=c(ze,2),Fe=p(at);{var Te=te=>{var ne=gp(),Ie=j(ne,!0);C(()=>{U(ne,"href",s(Se).urls[0]),b(Ie,s(Se).urls[0])}),w(te,ne)};B(Fe,te=>{var ne;(ne=s(Se))!=null&&ne.urls[0]&&te(Te)})}var pt=c(Fe,2);{let te=D(()=>{var Qe,dt;return((dt=(Qe=s(Se))==null?void 0:Qe.shareStartup)==null?void 0:dt.status)==="starting"?s(Se).shareStartup.startedAt:void 0}),ne=D(()=>{var Qe;return(Qe=s(Se))==null?void 0:Qe.key}),Ie=D(()=>{var Qe,dt,xa,_n;return((dt=(Qe=s(Se))==null?void 0:Qe.share)==null?void 0:dt.protected)??(((_n=(xa=s(Se))==null?void 0:xa.shareStartup)==null?void 0:_n.status)==="starting"&&s(Se).shareStartup.protected)??!1}),Ur=D(()=>{var Qe,dt;return((dt=(Qe=s(Se))==null?void 0:Qe.shareStartup)==null?void 0:dt.status)==="starting"?s(Se).shareStartup.url:void 0}),ts=D(()=>{var Qe,dt;return s(Vt)||(dt=(Qe=s(Se))==null?void 0:Qe.share)==null?void 0:dt.url}),ja=D(()=>{var Qe,dt;return e.pending.has(`service:${e.project.id}:${s(ee).name}:share`)||((dt=(Qe=s(Se))==null?void 0:Qe.shareStartup)==null?void 0:dt.status)==="starting"}),Ys=D(()=>{var Qe,dt;return((dt=(Qe=s(Se))==null?void 0:Qe.shareStartup)==null?void 0:dt.status)==="failed"?s(Se).shareStartup.error:y()[`${e.project.id}:${s(ee).name}`]??""});ec(pt,{get startedAt(){return s(te)},get serviceKey(){return s(ne)},get protectedShare(){return s(Ie)},get pendingUrl(){return s(Ur)},get name(){return s(ee).name},get url(){return s(ts)},get pending(){return s(ja)},get error(){return s(Ys)}})}var St=c(at,2),$t=j(St,!0),zr=c(St,2);Ui(zr,{get service(){return s(Se)}});var er=c(zr,2);{var ct=te=>{var ne=mp(),Ie=c(p(ne));C(Ur=>{U(ne,"hidden",!s(z)),b(Ie,` ${Ur??""}`)},[()=>s(ee).after.join(", ")]),w(te,ne)};B(er,te=>{s(ee).after.length&&te(ct)})}var br=c(ht,2),mn=p(br);{var tc=te=>{var ne=Si(),Ie=j(ne,!0);C(()=>{U(ne,"aria-label",`Start ${s(ee).name}`),ne.disabled=s(lr).pending||s(cr).pending||s(es).pending,b(Ie,s(lr).label)}),X("click",ne,()=>$(s(ee).name,"start")),w(te,ne)},rc=te=>{var ne=jn(),Ie=j(ne,!0);C(()=>{var Ur,ts;U(ne,"aria-label",`Stop ${s(ee).name}`),ne.disabled=s(lr).pending||s(cr).pending||s(es).pending||((Ur=s(Se))==null?void 0:Ur.status)==="stopping",b(Ie,((ts=s(Se))==null?void 0:ts.status)==="stopping"?"Stopping…":s(cr).label)}),X("click",ne,()=>$(s(ee).name,"stop")),w(te,ne)};B(mn,te=>{s(Vt)&&s(_t).configured?te(tc):s(Vt)||te(rc,1)})}var sc=c(mn,2);{let te=D(()=>!zt(s(ee))),ne=D(()=>e.pending.has(`service:${e.project.id}:${s(ee).name}:share`));Oi(sc,{get service(){return s(Se)},get name(){return s(ee).name},get shareable(){return s(te)},get busy(){return s(ne)},onLogs:()=>{var Ie;return f()(((Ie=s(Se))==null?void 0:Ie.key)??`${e.project.id}:${s(ee).name}`)},onRequests:()=>{var Ie;return h()(((Ie=s(Se))==null?void 0:Ie.key)??`${e.project.id}:${s(ee).name}`)},onShare:Ie=>q()(`${e.project.id}:${s(ee).name}`,Ie),onUnshare:()=>S()(`${e.project.id}:${s(ee).name}`)})}var li=c(br,2),uo=p(li);{var ac=te=>{var ne=_p();C(()=>{U(ne,"href",s(Se).urls[0]),U(ne,"aria-label",`Open ${s(ee).name} in browser`)}),w(te,ne)};B(uo,te=>{var ne;(ne=s(Se))!=null&&ne.urls[0]&&!s(Vt)&&s(Se).upstreamReady&&te(ac)})}var vo=c(uo,2);{var nc=te=>{var ne=yp(),Ie=j(ne,!0);C(()=>{U(ne,"aria-label",`Copy ${s(ee).name} address`),b(Ie,s(G)===s(ee).name?"Copied":"Copy address")}),X("click",ne,()=>ce(s(ee).name,zt(s(ee))?`localhost:${s(ee).upstream}`:s(Se).urls[0])),w(te,ne)},ic=D(()=>{var te;return((te=s(Se))==null?void 0:te.urls[0])||zt(s(ee))});B(vo,te=>{s(ic)&&te(nc)})}var fo=c(vo,2);{var oc=te=>{var ne=Si(),Ie=j(ne,!0);C(()=>{ne.disabled=s(lr).pending,b(Ie,s(lr).label)}),X("click",ne,()=>$(s(ee).name,"start")),w(te,ne)},lc=te=>{var ne=jn(),Ie=j(ne,!0);C(()=>{ne.disabled=s(cr).pending,b(Ie,s(cr).label)}),X("click",ne,()=>$(s(ee).name,"stop")),w(te,ne)};B(fo,te=>{s(Vt)&&s(_t).configured?te(oc):s(Vt)||te(lc,1)})}var cc=c(fo,2);{var uc=te=>{var ne=jn(),Ie=j(ne,!0);C(()=>{ne.disabled=s(es).pending,b(Ie,s(es).label)}),X("click",ne,()=>$(s(ee).name,"restart")),w(te,ne)};B(cc,te=>{var ne;s(_t).configured&&!s(Vt)&&((ne=s(Se))==null?void 0:ne.managedBy)!=="terminal"&&te(uc)})}var po=c(li,2);{var dc=te=>{var ne=Sp(),Ie=p(ne),Ur=j(Ie),ts=c(Ie,2),ja=j(ts),Ys=c(ts,2),Qe=c(p(Ys),2),dt=j(Qe,!0),xa=c(Qe,2),_n=j(xa,!0),pc=c(xa,2);{var hc=It=>{var wr=bp(),Js=j(wr);C(ds=>b(Js,`Environment variables: ${ds??""}`),[()=>Object.keys(s(ee).env).join(", ")]),w(It,wr)};B(pc,It=>{s(ee).env&&It(hc)})}var gc=c(Ys,2),ho=c(p(gc),2),go=p(ho),mc=c(p(go),2);et(mc,17,()=>e.project.commands.filter(It=>It.name!==s(ee).name),It=>It.name,(It,wr)=>{var Js=wp(),ds=p(Js),yn=c(ds,2),bc=j(yn,!0);C(wc=>{wd(ds,s(wr).name),Bn(ds,wc),U(ds,"aria-label",`${s(ee).name} starts after ${s(wr).name}`),b(bc,s(wr).name)},[()=>s(ee).after.includes(s(wr).name)]),w(It,Js)},It=>{var wr=kp();w(It,wr)});var _c=c(go,2),ci=p(_c),yc=j(ci,!0),mo=c(ci,2);C((It,wr,Js,ds)=>{var yn;U(ne,"hidden",!s(z)),b(Ur,`Configure ${s(ee).name??""}`),b(ja,`$ ${s(ee).run??""}`),b(dt,((yn=s(Se))==null?void 0:yn.readinessMessage)??(s(ee).ready.type==="tcp"?"Checks that the service accepts connections.":"Waits for the configured application check to pass.")),b(_n,It),ci.disabled=wr,b(yc,Js),mo.disabled=ds},[()=>JSON.stringify(s(ee).ready,null,2),()=>e.pending.has(`project:${e.project.id}:update-dependencies:${s(ee).name}`),()=>e.pending.has(`project:${e.project.id}:update-dependencies:${s(ee).name}`)?"Saving…":"Save order",()=>e.pending.has(`project:${e.project.id}:update-dependencies:${s(ee).name}`)]),jt("submit",ho,It=>ge(It,s(ee).name)),X("click",mo,ae),w(te,ne)};B(po,te=>{s(_t).configured&&te(dc)})}var vc=c(po,2);{var fc=te=>{zi(te,{get message(){return s(Mr)}})};B(vc,te=>{s(Mr)&&te(fc)})}C((te,ne,Ie,Ur,ts,ja,Ys)=>{var Qe,dt;Ws=it(Es,1,"service-card svelte-l7un4l",null,Ws,{failed:te}),U(At,"hidden",s(z)),b(ii,ne),b(hn,s(ee).name),ka=it(gn,1,"row-health svelte-l7un4l",null,ka,{ready:!s(Vt)&&((Qe=s(Se))==null?void 0:Qe.upstreamReady)&&!s(Mr),errored:Ie}),b(oi,Ur),U(Sa,"hidden",!s(z)),P=it(_,1,"status-dot svelte-l7un4l",null,P,{running:!s(Vt),waiting:s(Se)&&!s(Se).upstreamReady&&!s(Vt)}),b(me,s(ee).name),b(be,ts),U(ze,"hidden",!s(z)),b(Ge,`${ja??""}${((dt=s(Se))==null?void 0:dt.managedBy)==="terminal"?" · terminal owned":""}`),U(at,"hidden",s(z)),U(St,"hidden",!s(z)),b($t,Ys),U(br,"hidden",s(z)),U(br,"aria-label",`Controls for ${s(ee).name}`),U(li,"hidden",!s(z))},[()=>!!s(Mr),()=>zt(s(ee))?"Database":s(ee).name==="web"?"Website":s(ee).name==="api"?"API":s(ee).name,()=>!!s(Mr),()=>s(Mr)?"Needs attention":ye(s(Se)),()=>ye(s(Se)),()=>zt(s(ee))?"Database":"App service",()=>{var te;return zt(s(ee))?`Database endpoint: localhost:${s(ee).upstream}`:((te=s(Se))==null?void 0:te.urls[0])??"App link available after start"}]),w(lt,Es)},lt=>{var _t=xp(),ee=p(_t),Se=j(ee,!0),lr=c(ee,2),cr=j(lr,!0);C(()=>{b(Se,s(M)?"No matching services":"No configured services"),b(cr,s(M)?"Try a different name or clear the search.":`Add a service command to ${e.project.file} and retry this project.`)}),w(lt,_t)});var xs=c(js,2),Vs=j(xs,!0);C(lt=>{U(le,"hidden",!s(ie)),b(Me,s(ie)?"Some services need attention.":s(ve)?"Your app is ready to open.":s(T)?"Your services are running.":"Let’s get your project running."),b(Be,s(ie)?"Check the service errors below. Other services can keep running.":s(ve)?"Everything stays on your machine unless you choose to share it.":s(T)?"Open a service to see its startup progress and logs.":"Start all to launch your services in the right order."),U(ft,"hidden",s(z)),ke.disabled=s(Z)||s(Q),b(we,s(Z)?"Starting all…":"Start all"),ut.disabled=s(Q)||s(Z)||!s(T),b(Nr,s(Q)?"Stopping all…":"Stop all"),U(yr,"hidden",!s(z)),b(Zr,e.project.commands.length),b(Xr,s(T)),b(Qr,s(H)),U(ks,"hidden",s(se).length<6&&!s(z)),U(xs,"hidden",s(z)),b(Vs,lt)},[()=>s(ie)?"Some services need attention.":s(se).length&&s(se).every(lt=>{var _t;return((_t=lt.runtime)==null?void 0:_t.upstreamReady)&&lt.runtime.status!=="stopped"})?`All ${s(se).length} services are ready`:`${s(T)} of ${s(se).length} services running`]),X("click",ke,()=>oe("start")),X("click",ut,()=>oe("stop")),Nt($r,()=>s(M),lt=>v(M,lt)),w(F,J)};B(Tt,F=>{e.project.available?F(_r,-1):F(Ct)})}C(()=>{U(ot,"hidden",s(z)),b(Ft,e.project.name),kt=it(mr,1,"status-dot svelte-l7un4l",null,kt,{running:s(T)>0&&!s(ie)}),b(Ze,e.project.available?s(ie)?"Needs attention":s(T)?"Running":"Stopped":"Unavailable"),U(qt,"hidden",s(z)),U(st,"hidden",!s(z)),b(Tr,e.project.name),De=it(Pe,1,"services-content svelte-l7un4l",null,De,{managing:s(z)}),U(Pe,"hidden",s(z))}),X("click",Pt,()=>{v(z,!1),v(M,"")}),w(t,Ne),wt()}nr(["click"]);var Cp=E('<a class="service-address mono svelte-1h3c7zm" target="_blank" rel="noreferrer"> </a>'),Ap=E('<code class="service-address svelte-1h3c7zm"> </code>'),Rp=E('<button class="svelte-1h3c7zm"><!><span> </span></button>'),Lp=E('<button class="primary svelte-1h3c7zm"><!><span> </span></button>'),Tp=E('<div class="action-error svelte-1h3c7zm"><!></div>'),Np=E('<article class="service-row svelte-1h3c7zm"><div class="service-info svelte-1h3c7zm"><div class="service-heading svelte-1h3c7zm"><span></span><strong class="svelte-1h3c7zm"> </strong><span class="service-status svelte-1h3c7zm"> </span></div> <span class="project-name svelte-1h3c7zm"> </span> <!> <!> <!></div> <div class="service-controls svelte-1h3c7zm"><!> <!></div> <!></article>');function Dp(t,e){bt(e,!0);let r=je(e,"canStart",3,!1),a=je(e,"pending",19,()=>new Set),n=je(e,"error",3,""),i=je(e,"shareError",3,"");je(e,"logsSelected",3,!1);let l=je(e,"onRequests",3,()=>{});const o=D(()=>e.entry.runtime),u=D(()=>!!(s(o)&&s(o).status!=="stopped")),d=D(()=>["start","stop","restart"].some(N=>a().has(`service:${e.entry.key}:${N}`))),f=D(()=>lo(s(o)));let h=I("");async function m(N){v(h,"");try{const R=await N();R&&typeof R=="object"&&"ok"in R&&R.ok===!1&&v(h,"error"in R&&typeof R.error=="string"?R.error:"Service action failed",!0)}catch(R){v(h,R instanceof Error?R.message:"Service action failed",!0)}}var y=Np(),q=p(y),S=p(q),x=p(S);let k;var A=c(x),L=j(A,!0),O=c(A),z=j(O,!0),W=c(S,2),M=j(W,!0),G=c(W,2);{var ce=N=>{var R=Cp(),oe=j(R,!0);C(()=>{U(R,"href",s(o).urls[0]),b(oe,s(o).urls[0])}),w(N,R)},ue=N=>{var R=Ap(),oe=j(R,!0);C(()=>{var $,ge;return b(oe,(($=e.entry.command)==null?void 0:$.run)??((ge=s(o))==null?void 0:ge.command))}),w(N,R)};B(G,N=>{var R;(R=s(o))!=null&&R.urls[0]?N(ce):N(ue,-1)})}var Y=c(G,2);Ui(Y,{get service(){return s(o)}});var re=c(Y,2);{let N=D(()=>{var de,ye;return((ye=(de=s(o))==null?void 0:de.shareStartup)==null?void 0:ye.status)==="starting"?s(o).shareStartup.startedAt:void 0}),R=D(()=>{var de;return(de=s(o))==null?void 0:de.key}),oe=D(()=>{var de,ye,Ne,ot;return((ye=(de=s(o))==null?void 0:de.share)==null?void 0:ye.protected)??(((ot=(Ne=s(o))==null?void 0:Ne.shareStartup)==null?void 0:ot.status)==="starting"&&s(o).shareStartup.protected)??!1}),$=D(()=>{var de,ye;return((ye=(de=s(o))==null?void 0:de.shareStartup)==null?void 0:ye.status)==="starting"?s(o).shareStartup.url:void 0}),ge=D(()=>{var de,ye;return s(u)?(ye=(de=s(o))==null?void 0:de.share)==null?void 0:ye.url:void 0}),ae=D(()=>{var de,ye;return a().has(`service:${e.entry.key}:share`)||((ye=(de=s(o))==null?void 0:de.shareStartup)==null?void 0:ye.status)==="starting"}),Ce=D(()=>{var de,ye;return((ye=(de=s(o))==null?void 0:de.shareStartup)==null?void 0:ye.status)==="failed"?s(o).shareStartup.error:i()});ec(re,{get startedAt(){return s(N)},get serviceKey(){return s(R)},get protectedShare(){return s(oe)},get pendingUrl(){return s($)},get name(){return e.entry.name},get url(){return s(ge)},get pending(){return s(ae)},get error(){return s(Ce)}})}var ve=c(q,2),ie=p(ve);{var T=N=>{var R=Rp(),oe=p(R);kv(oe,{size:13});var $=c(oe),ge=j($,!0);C(ae=>{var Ce;R.disabled=s(d)||((Ce=s(o))==null?void 0:Ce.status)==="stopping",U(R,"aria-label",`Stop ${e.entry.name}`),b(ge,ae)},[()=>{var ae;return a().has(`service:${e.entry.key}:stop`)||((ae=s(o))==null?void 0:ae.status)==="stopping"?"Stopping…":"Stop"}]),X("click",R,()=>m(e.onStop)),w(N,R)},H=N=>{var R=Lp(),oe=p(R);vv(oe,{size:14});var $=c(oe),ge=j($,!0);C(ae=>{R.disabled=!r()||s(d),U(R,"aria-label",`Start ${e.entry.name}`),b(ge,ae)},[()=>a().has(`service:${e.entry.key}:start`)?"Starting…":"Start"]),X("click",R,()=>m(e.onStart)),w(N,R)};B(ie,N=>{s(u)?N(T):r()&&N(H,1)})}var se=c(ie,2);{let N=D(()=>!zt(s(o)??e.entry.command??{})),R=D(()=>a().has(`service:${e.entry.key}:share`));Oi(se,{get service(){return s(o)},get name(){return e.entry.name},get shareable(){return s(N)},get busy(){return s(R)},get onLogs(){return e.onLogs},get onRequests(){return l()},get onShare(){return e.onShare},get onUnshare(){return e.onUnshare}})}var Z=c(ve,2);{var Q=N=>{var R=Tp(),oe=p(R);{let $=D(()=>{var ge;return s(h)||n()||((ge=s(o))==null?void 0:ge.lastError)||""});zi(oe,{get message(){return s($)}})}w(N,R)};B(Z,N=>{var R;(s(h)||n()||(R=s(o))!=null&&R.lastError)&&N(Q)})}C(()=>{U(y,"aria-label",`${e.projectName} / ${e.entry.name}`),k=it(x,1,"status-dot svelte-1h3c7zm",null,k,{running:s(f)==="ready"||s(f)==="listening"}),b(L,e.entry.name),b(z,s(f)),b(M,e.projectName),U(ve,"aria-label",`Controls for ${e.entry.name}`)}),w(t,y),wt()}nr(["click"]);function Ip(t){var a,n;if(!["GET","HEAD"].includes(t.method)||t.status>=400||t.error)return!1;let e=t.path.split("?")[0];try{e=decodeURIComponent(e)}catch{}if(/^\/(?:api|graphql|trpc)(?:\/|$)/i.test(e))return!1;const r=(n=(a=t.requestHeaders)==null?void 0:a.entries.find(([i])=>i.toLowerCase()==="sec-fetch-dest"))==null?void 0:n[1];return r==="document"||r==="iframe"?!1:r&&/^(?:script|style|font|image|worker|sharedworker|serviceworker|audio|video)$/.test(r)||/^\/(?:@fs|@id|@vite|node_modules)(?:\/|$)/.test(e)||e==="/@react-refresh"||/^\/(?:_next\/static|_app\/immutable)(?:\/|$)/.test(e)?!0:/\.(?:[cm]?[jt]sx?|svelte|vue|astro|mdx|css|scss|sass|less|styl(?:us)?|map|woff2?|ttf|otf|eot|png|jpe?g|gif|svg|ico|webp|avif)$/i.test(e)}const Rn=(t,e=ys,r=ys)=>{var a=_s(),n=Ke(a);{var i=o=>{var u=Op();et(u,21,e,Cr,(d,f)=>{var h=D(()=>Bi(s(f),2));let m=()=>s(h)[0],y=()=>s(h)[1];var q=Mp(),S=p(q),x=j(S,!0),k=c(S),A=j(k,!0);C(()=>{b(x,m()),b(A,y()||"(empty)")}),w(d,q)}),w(o,u)},l=o=>{var u=zp(),d=j(u,!0);C(()=>b(d,r())),w(o,u)};B(n,o=>{e().length?o(i):o(l,-1)})}w(t,a)},Uo=(t,e=ys,r=ys)=>{var a=Fp(),n=p(a),i=j(n),l=c(n,2);{var o=d=>{var f=Hp(),h=Ke(f);Rn(h,()=>r().entries,()=>"No headers.");var m=c(h,2);{var y=q=>{var S=Up();w(q,S)};B(m,q=>{r().truncated&&q(y)})}w(d,f)},u=d=>{var f=Bp();w(d,f)};B(l,d=>{r()?d(o):d(u,-1)})}C(()=>b(i,`${e()??""}${r()?` (${r().entries.length})`:""}`)),w(t,a)},ji=(t,e=ys,r=ys)=>{var a=Wp(),n=Ke(a),i=j(n,!0),l=c(n,2);{var o=d=>{var f=Kp(),h=Ke(f),m=j(h),y=c(h,2),q=j(y,!0);C(S=>{b(m,`${S??""} bytes${r().truncated?" · preview limited to 16 KiB":""}${r().complete?"":" · incomplete transfer"}${r().encoding==="base64"?" · Base64":""}${r().contentEncoding?` · ${r().contentEncoding} encoded`:""}`),b(q,r().data||"(empty body)")},[()=>r().bytes.toLocaleString()]),w(d,f)},u=d=>{var f=Vp();w(d,f)};B(l,d=>{r()?d(o):d(u,-1)})}C(()=>b(i,e())),w(t,a)};var Mp=E('<div class="svelte-s74nzf"><dt class="svelte-s74nzf"> </dt><dd class="svelte-s74nzf"> </dd></div>'),Op=E('<dl class="svelte-s74nzf"></dl>'),zp=E('<p class="svelte-s74nzf"> </p>'),Up=E('<p class="svelte-s74nzf">Header capture limit reached; some headers were omitted.</p>'),Hp=E("<!> <!>",1),Bp=E('<p class="svelte-s74nzf">Headers were not captured for this request.</p>'),Fp=E('<details class="svelte-s74nzf"><summary class="svelte-s74nzf"> </summary> <!></details>'),Kp=E('<p class="svelte-s74nzf"> </p> <pre class="svelte-s74nzf"> </pre>',1),Vp=E('<p class="svelte-s74nzf">This body was not captured. Make a new request through the LocalDeck URL.</p>'),Wp=E('<h4 class="svelte-s74nzf"> </h4> <!>',1),Gp=E('<p class="svelte-s74nzf">Request cookies were not captured.</p>'),Yp=E('<p class="svelte-s74nzf">Response cookies were not captured.</p>'),Jp=E('<p role="status" class="svelte-s74nzf">Loading response…</p>'),Zp=E('<p role="alert" class="svelte-s74nzf"> </p><!>',1),Xp=E('<h4 class="svelte-s74nzf">Replay response</h4> <p class="svelte-s74nzf"> </p> <pre class="svelte-s74nzf"> </pre>',1),Qp=E('<div class="metadata svelte-s74nzf"><!> <!> <details class="svelte-s74nzf"><summary class="svelte-s74nzf"> </summary> <!></details> <details class="svelte-s74nzf"><summary class="svelte-s74nzf">Cookies</summary> <h4 class="svelte-s74nzf">Request cookies</h4> <!> <h4 class="svelte-s74nzf">Response cookies</h4> <!></details> <details class="svelte-s74nzf"><summary class="svelte-s74nzf">Body</summary> <!></details> <details class="svelte-s74nzf"><summary class="svelte-s74nzf">Response</summary> <!> <!></details></div>');function $p(t,e){bt(e,!0);let r=je(e,"replayResult",3,null),a=I(null),n=I(!1),i=I(""),l;qd(()=>l==null?void 0:l.abort());async function o(Z){if(!(!Z.currentTarget.open||s(a)||s(n))){if(!e.record.responseBodyId){v(a,e.record.responseBody??null,!0);return}l=new AbortController,v(n,!0),v(i,"");try{const Q=await fetch(`/api/services/${encodeURIComponent(e.record.service)}/response?requestId=${encodeURIComponent(e.record.id)}`,{signal:l.signal}),N=await Q.json();if(!Q.ok)throw new Error(N.error??"Unable to load response");v(a,N,!0)}catch(Q){l.signal.aborted||v(i,Q instanceof Error?Q.message:"Unable to load response",!0)}finally{v(n,!1)}}}const u=D(()=>{var Z;return(((Z=e.record.requestHeaders)==null?void 0:Z.entries)??[]).filter(([Q])=>Q.toLowerCase()==="cookie").flatMap(([,Q])=>Q.split(";").map(N=>{const R=N.indexOf("=");return R<0?[N.trim(),""]:[N.slice(0,R).trim(),N.slice(R+1).trim()]}))}),d=D(()=>{var Z;return(((Z=e.record.responseHeaders)==null?void 0:Z.entries)??[]).filter(([Q])=>Q.toLowerCase()==="set-cookie")}),f=D(()=>[...new URLSearchParams(e.record.path.includes("?")?e.record.path.slice(e.record.path.indexOf("?")+1):"")]);var h=Qp(),m=p(h);Uo(m,()=>"Request headers",()=>e.record.requestHeaders);var y=c(m,2);Uo(y,()=>"Response headers",()=>e.record.responseHeaders);var q=c(y,2),S=p(q),x=j(S),k=c(S,2);Rn(k,()=>s(f),()=>"No query parameters.");var A=c(q,2),L=c(p(A),4);{var O=Z=>{Rn(Z,()=>s(u),()=>e.record.requestHeaders.truncated?"No cookies in the captured headers.":"No cookies sent.")},z=Z=>{var Q=Gp();w(Z,Q)};B(L,Z=>{e.record.requestHeaders?Z(O):Z(z,-1)})}var W=c(L,4);{var M=Z=>{Rn(Z,()=>s(d),()=>e.record.responseHeaders.truncated?"No cookies in the captured headers.":"No cookies set.")},G=Z=>{var Q=Yp();w(Z,Q)};B(W,Z=>{e.record.responseHeaders?Z(M):Z(G,-1)})}var ce=c(A,2),ue=c(p(ce),2);ji(ue,()=>"Request body",()=>e.record.requestBody);var Y=c(ce,2),re=c(p(Y),2);{var ve=Z=>{var Q=Jp();w(Z,Q)},ie=Z=>{var Q=Zp(),N=Ke(Q),R=j(N,!0),oe=c(N);ji(oe,()=>"Saved preview",()=>e.record.responseBody),C(()=>b(R,s(i))),w(Z,Q)},T=Z=>{ji(Z,()=>"Response body",()=>s(a)??e.record.responseBody)};B(re,Z=>{s(n)?Z(ve):s(i)?Z(ie,1):Z(T,-1)})}var H=c(re,2);{var se=Z=>{var Q=Xp(),N=c(Ke(Q),2),R=j(N),oe=c(N,2),$=j(oe,!0);C(()=>{b(R,`HTTP ${r().status??""} · ${r().durationMs??""} ms${r().truncated?" · preview truncated at 64 KiB":""}`),b($,r().body||"(empty response body)")}),w(Z,Q)};B(H,Z=>{r()&&Z(se)})}C(()=>b(x,`Query parameters (${s(f).length??""})`)),jt("toggle",Y,o),w(t,h),wt()}var eh=E('<p class="empty svelte-tqqrb7">No matching requests. Use the service’s LocalDeck URL to record traffic. Calls directly to Wrangler’s port or through Worker service bindings bypass capture.</p>'),th=E('<p class="error svelte-tqqrb7"> </p>'),rh=E('<span class="svelte-tqqrb7">Only GET and HEAD can be replayed.</span>'),sh=E('<span class="svelte-tqqrb7">Start the service to replay this request.</span>'),ah=E('<p class="error svelte-tqqrb7" role="alert"> </p>'),nh=E('<p role="status" class="svelte-tqqrb7"> </p>'),ih=E('<tr><td colspan="5" class="svelte-tqqrb7"><section class="inspector svelte-tqqrb7" aria-label="Request details"><strong> </strong> <p class="svelte-tqqrb7"> </p> <!> <!> <p class="svelte-tqqrb7">Replay sends a new GET/HEAD request without cookies, authorization, or a body.</p> <button class="replay svelte-tqqrb7"> </button> <!> <!> <!></section></td></tr>'),oh=E('<tr><td class="svelte-tqqrb7"> </td><td class="svelte-tqqrb7"><button class="svelte-tqqrb7"><span aria-hidden="true" class="svelte-tqqrb7"> </span> </button></td><td class="svelte-tqqrb7"> </td><td class="svelte-tqqrb7"> </td><td class="svelte-tqqrb7"> </td></tr> <!>',1),lh=E('<div class="request-list svelte-tqqrb7" role="region" aria-label="Recorded requests"><table class="svelte-tqqrb7"><thead><tr><th class="svelte-tqqrb7">Service</th><th class="svelte-tqqrb7">Request</th><th class="svelte-tqqrb7">Status</th><th class="svelte-tqqrb7">Time</th><th class="svelte-tqqrb7">Source</th></tr></thead><tbody></tbody></table></div>'),ch=E('<div class="requests-panel svelte-tqqrb7"><!></div>');function uh(t,e){bt(e,!0);let r=I("");const a=D(()=>e.records.find(S=>`${S.service}:${S.id}`===s(r))),n=D(()=>e.services.find(S=>{var x;return S.key===((x=s(a))==null?void 0:x.service)})),i=D(()=>s(a)&&["GET","HEAD"].includes(s(a).method)),l=D(()=>{var S;return((S=s(n))==null?void 0:S.status)==="running"&&s(n).upstreamReady});let o=I(!1),u=I(null),d=I("");is(()=>{var S,x;(S=s(a))==null||S.id,(x=s(a))==null||x.service,v(u,null),v(d,"")});async function f(){var x,k;if(!s(a)||!s(i)||!s(l)||s(o))return;const S=s(a);v(o,!0),v(u,null),v(d,"");try{const A=await fetch(`/api/services/${encodeURIComponent(S.service)}/replay`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({requestId:S.id})}),L=await A.json();if(!A.ok)throw new Error(L.error??"Replay failed");((x=s(a))==null?void 0:x.id)===S.id&&s(a).service===S.service&&v(u,L,!0)}catch(A){((k=s(a))==null?void 0:k.id)===S.id&&s(a).service===S.service&&v(d,A instanceof Error?A.message:"Replay failed",!0)}finally{v(o,!1)}}var h=ch(),m=p(h);{var y=S=>{var x=eh();w(S,x)},q=S=>{var x=lh(),k=p(x),A=c(p(k));et(A,21,()=>e.records,L=>`${L.service}:${L.id}`,(L,O)=>{var z=oh(),W=Ke(z);let M;var G=p(W),ce=j(G,!0),ue=c(G),Y=p(ue),re=p(Y),ve=j(re,!0),ie=c(re),T=c(ue),H=j(T,!0),se=c(T),Z=j(se),Q=c(se),N=j(Q,!0),R=c(W,2);{var oe=$=>{var ge=ih(),ae=p(ge),Ce=p(ae),de=p(Ce),ye=j(de),Ne=c(de,2),ot=j(Ne),Et=c(Ne,2);{var Dt=We=>{var st=th(),Pt=j(st,!0);C(()=>b(Pt,s(a).error)),w(We,st)};B(Et,We=>{s(a).error&&We(Dt)})}var Ft=c(Et,2);$p(Ft,{get record(){return s(a)},get replayResult(){return s(u)}});var ir=c(Ft,4),mr=j(ir,!0),kt=c(ir,2);{var Ze=We=>{var st=rh();w(We,st)},Rr=We=>{var st=sh();w(We,st)};B(kt,We=>{s(i)?s(l)||We(Rr,1):We(Ze)})}var rt=c(kt,2);{var qt=We=>{var st=ah(),Pt=j(st,!0);C(()=>b(Pt,s(d))),w(We,st)};B(rt,We=>{s(d)&&We(qt)})}var ws=c(rt,2);{var Lr=We=>{var st=nh(),Pt=j(st);C(()=>b(Pt,`Replay complete · HTTP ${s(u).status??""}. Expand Response to view the response.`)),w(We,st)};B(ws,We=>{s(u)&&We(Lr)})}C((We,st,Pt)=>{b(ye,`${s(a).method??""} ${s(a).path??""}`),b(ot,`${We??""} · ${st??""} · HTTP ${s(a).status??""} · ${Pt??""} bytes`),ir.disabled=!s(i)||!s(l)||s(o),b(mr,s(o)?"Replaying…":"Replay request")},[()=>e.names.get(s(a).service)??s(a).service,()=>new Date(s(a).ts).toLocaleString(),()=>s(a).bytes.toLocaleString()]),X("click",ir,f),w($,ge)};B(R,$=>{var ge,ae;((ge=s(a))==null?void 0:ge.service)===s(O).service&&((ae=s(a))==null?void 0:ae.id)===s(O).id&&$(oe)})}C(($,ge)=>{var ae,Ce,de,ye,Ne,ot;M=it(W,1,"request-row svelte-tqqrb7",null,M,{selected:((ae=s(a))==null?void 0:ae.service)===s(O).service&&((Ce=s(a))==null?void 0:Ce.id)===s(O).id}),b(ce,$),U(Y,"aria-label",ge),U(Y,"aria-expanded",((de=s(a))==null?void 0:de.service)===s(O).service&&((ye=s(a))==null?void 0:ye.id)===s(O).id),b(ve,((Ne=s(a))==null?void 0:Ne.service)===s(O).service&&((ot=s(a))==null?void 0:ot.id)===s(O).id?"▾":"▸"),b(ie,` ${s(O).method??""} ${s(O).path??""}`),b(H,s(O).status),b(Z,`${s(O).durationMs??""} ms`),b(N,s(O).via)},[()=>e.names.get(s(O).service)??s(O).service,()=>`Inspect ${s(O).method} ${s(O).path} for ${e.names.get(s(O).service)??s(O).service}`]),X("click",W,()=>v(r,s(r)===`${s(O).service}:${s(O).id}`?"":`${s(O).service}:${s(O).id}`,!0)),w(L,z)}),w(S,x)};B(m,S=>{e.records.length?S(q,-1):S(y)})}w(t,h),wt()}nr(["click"]);function dh(t,e,r,a=Fn,n={}){const i=r.trim().toLowerCase();return[...new Set(e)].flatMap(l=>[...(t[l]??[]).map(o=>o.source||o.stream!=="system"||!/^LocalDeck: (sharing |share for )/.test(o.line)?o:{...o,source:"share"}),...(n[l]??[]).filter(o=>o.via==="share").map(o=>({id:`request:${o.id}`,ts:o.ts,service:o.service,stream:"system",source:"share",line:`${o.method} ${o.path} → ${o.status} · ${Math.round(o.durationMs)} ms`}))]).filter(l=>!i||`${l.line} ${l.service} ${l.stream} ${l.source??""}`.toLowerCase().includes(i)).sort((l,o)=>l.ts-o.ts||l.service.localeCompare(o.service)||l.id.localeCompare(o.id)).slice(-a)}function vh(t,e){return t.includes(e)?t.filter(r=>r!==e):[...new Set([...t,e])]}var fh=E('<label class="svelte-147la1m"><input type="checkbox" class="svelte-147la1m"/><span> <small class="svelte-147la1m"> </small></span></label>'),ph=E("<p>No services available.</p>"),hh=E('<div class="history-error svelte-147la1m" role="alert"> <button class="svelte-147la1m">Retry logs</button></div>'),gh=E('<div class="history-error svelte-147la1m" role="alert"> </div>'),mh=E('<div class="source-tab svelte-147la1m"><button><span class="project-name svelte-147la1m"> </span> </button> <button class="clear-source svelte-147la1m"><!></button></div>'),_h=E('<div class="request-filter-bar svelte-147la1m"><label class="svelte-147la1m"><input type="checkbox" class="svelte-147la1m"/> Show assets &amp; dev traffic</label> <span> </span></div> <!>',1),yh=E('<div class="empty svelte-147la1m"><strong class="svelte-147la1m">Select services to view their logs</strong><span class="svelte-147la1m">Use the Services menu to combine output from multiple services.</span></div>'),bh=E('<div class="empty svelte-147la1m"><strong class="svelte-147la1m"> </strong><span class="svelte-147la1m"> </span></div>'),wh=E('<div><time class="svelte-147la1m"> </time> <span class="source svelte-147la1m"> </span> <span class="stream svelte-147la1m"> </span><span class="line svelte-147la1m"> </span></div>'),kh=E('<div class="log-output svelte-147la1m" tabindex="0" role="region" aria-label="Log output"><!></div> <div class="logs-status svelte-147la1m"><span>Live output<span class="record-count svelte-147la1m"> </span></span><button class="svelte-147la1m"> </button></div>',1),Sh=E('<section class="logs-dock svelte-147la1m"><div class="resize-handle svelte-147la1m" role="separator" tabindex="0" aria-label="Logs panel height" aria-orientation="horizontal"></div> <header class="logs-toolbar svelte-147la1m"><h2 class="svelte-147la1m"><!> </h2> <details class="source-picker svelte-147la1m"><summary class="svelte-147la1m">Services <span class="count svelte-147la1m"> </span><!></summary> <div class="source-options svelte-147la1m"><div class="picker-label svelte-147la1m">Include service output</div> <!></div></details> <label class="filter svelte-147la1m"><!><input type="search" class="svelte-147la1m"/></label> <button class="close svelte-147la1m"><!></button></header> <!> <!> <nav class="source-tabs svelte-147la1m" aria-label="Log source views"><button>All selected <span> </span></button> <!></nav> <!></section>');function jh(t,e){bt(e,!0);let r=je(e,"view",3,"logs"),a=je(e,"services",19,()=>[]),n=je(e,"historyBoundaries",19,()=>({})),i=je(e,"resetView",3,0),l=je(e,"requestedSource",3,null),o=je(e,"error",3,""),u=je(e,"requests",19,()=>({})),d=je(e,"limit",3,Fn);is(()=>{i(),v(S,l()),v(y,"")});let f=I(""),h=I(Ue([]));async function m(K){const fe=r(),Pe=`${K}/${fe}`;if(!s(h).includes(Pe)){v(h,[...s(h),Pe],!0),v(f,"");try{await e.onClear(K,fe)}catch(De){v(f,De instanceof Error?De.message:String(De),!0)}finally{v(h,s(h).filter(De=>De!==Pe),!0)}}}let y=I(""),q=I(!1),S=I(Ue(l())),x=I(!0),k=I(void 0),A,L=I(void 0),O=I(720);const z=D(()=>Math.max(160,s(O)-140)),W=D(()=>Math.min(s(z),Math.max(160,s(L)??Math.min(420,Math.max(220,s(O)*.33)))));let M;ti(()=>{v(O,window.innerHeight,!0);try{v(q,localStorage.getItem("localdeck-show-background-requests")==="true")}catch{}try{const K=Number(localStorage.getItem("localdeck-logs-height"));Number.isFinite(K)&&K>0&&v(L,K,!0)}catch{}});function G(){try{localStorage.setItem("localdeck-logs-height",String(s(W)))}catch{}}function ce(K){K.button===0&&(K.preventDefault(),M={y:K.clientY,height:A.getBoundingClientRect().height},K.currentTarget.setPointerCapture(K.pointerId))}function ue(K){!M||!K.currentTarget.hasPointerCapture(K.pointerId)||v(L,Math.max(160,Math.min(s(z),M.height+M.y-K.clientY)),!0)}function Y(){M=void 0,G()}function re(K){["ArrowUp","ArrowDown","Home","End"].includes(K.key)&&(K.preventDefault(),v(L,K.key==="Home"?160:K.key==="End"?s(z):Math.max(160,Math.min(s(z),s(W)+(K.key==="ArrowUp"?24:-24))),!0),G())}const ve=D(()=>e.sources.filter(K=>e.selectedKeys.includes(K.key))),ie=D(()=>s(S)&&e.selectedKeys.includes(s(S))?s(S):null),T=D(()=>Object.fromEntries((s(ie)?[s(ie)]:e.selectedKeys).map(K=>{const fe=n()[`${K}/logs`],Pe=u()[K]??[];return[K,fe?Pe.filter(De=>Ia(De.id,fe)):Pe]}))),H=D(()=>dh(e.logs,s(ie)?[s(ie)]:e.selectedKeys,s(y),d(),s(T))),se=D(()=>(s(ie)?[s(ie)]:e.selectedKeys).flatMap(K=>u()[K]??[]).filter(K=>`${K.method} ${K.path} ${K.status} ${K.via}`.toLowerCase().includes(s(y).trim().toLowerCase()))),Z=D(()=>new Set(s(se).filter(Ip))),Q=D(()=>s(se).filter(K=>s(q)||!s(Z).has(K)).sort((K,fe)=>fe.ts-K.ts||K.service.localeCompare(fe.service)||K.id.localeCompare(fe.id)).slice(0,d()));function N(){v(q,!s(q));try{localStorage.setItem("localdeck-show-background-requests",String(s(q)))}catch{}}const R=D(()=>new Map(e.sources.map(K=>[K.key,`${K.projectName} / ${K.name}`])));function oe(){s(k)&&v(x,s(k).scrollHeight-s(k).scrollTop-s(k).clientHeight<32)}is(()=>{s(H),s(x)&&Qn().then(()=>{s(k)&&s(x)&&(s(k).scrollTop=s(k).scrollHeight)})});var $=Sh();jt("resize",zn,()=>v(O,window.innerHeight,!0));let ge;var ae=p($);U(ae,"aria-valuemin",160);var Ce=c(ae,2),de=p(Ce),ye=p(de);jv(ye,{size:16,"aria-hidden":"true"});var Ne=c(ye,1,!0),ot=c(de,2),Et=p(ot),Dt=c(p(Et)),Ft=j(Dt,!0),ir=c(Dt);Gl(ir,{size:13,"aria-hidden":"true"});var mr=c(Et,2),kt=c(p(mr),2);et(kt,17,()=>e.sources,K=>K.key,(K,fe)=>{var Pe=fh(),De=p(Pe),Tt=c(De),Ct=p(Tt),_r=c(Ct),F=j(_r,!0);C(J=>{Bn(De,J),b(Ct,s(fe).name),b(F,s(fe).projectName)},[()=>e.selectedKeys.includes(s(fe).key)]),X("change",De,()=>e.onSelectionChange(vh(e.selectedKeys,s(fe).key))),w(K,Pe)},K=>{var fe=ph();w(K,fe)}),Ba(ot,K=>Ht==null?void 0:Ht(K));var Ze=c(ot,2),Rr=p(Ze);io(Rr,{size:14,"aria-hidden":"true"});var rt=c(Rr),qt=c(Ze,2),ws=p(qt);oo(ws,{size:17,"aria-hidden":"true"});var Lr=c(Ce,2);{var We=K=>{var fe=hh(),Pe=p(fe),De=c(Pe);C(()=>b(Pe,o())),X("click",De,function(...Tt){var Ct;(Ct=e.onRetry)==null||Ct.apply(this,Tt)}),w(K,fe)};B(Lr,K=>{o()&&K(We)})}var st=c(Lr,2);{var Pt=K=>{var fe=gh(),Pe=j(fe);C(()=>b(Pe,`Could not clear ${r()??""}: ${s(f)??""}`)),w(K,fe)};B(st,K=>{s(f)&&K(Pt)})}var ls=c(st,2),Tr=p(ls);let Jt;var Zt=c(p(Tr)),cs=j(Zt,!0),Jr=c(Tr,2);et(Jr,17,()=>s(ve),K=>K.key,(K,fe)=>{var Pe=mh(),De=p(Pe);let Tt;var Ct=p(De),_r=j(Ct),F=c(Ct),J=c(De,2),le=p(J);Ev(le,{size:13,"aria-hidden":"true"}),C(Re=>{U(De,"aria-pressed",s(ie)===s(fe).key),U(De,"title",`${s(fe).projectName} / ${s(fe).name}`),Tt=it(De,1,"svelte-147la1m",null,Tt,{active:s(ie)===s(fe).key}),b(_r,`${s(fe).projectName??""} /`),b(F,` ${s(fe).name??""}`),J.disabled=Re,U(J,"aria-label",`Clear ${r()} for ${s(fe).projectName} / ${s(fe).name}`),U(J,"title",`Clear ${r()} for ${s(fe).projectName} / ${s(fe).name}`)},[()=>s(h).includes(`${s(fe).key}/${r()}`)]),X("click",De,()=>v(S,s(fe).key,!0)),X("click",J,()=>void m(s(fe).key)),w(K,Pe)});var _a=c(ls,2);{var ya=K=>{var fe=_h(),Pe=Ke(fe),De=p(Pe),Tt=p(De),Ct=c(De,2),_r=j(Ct),F=c(Pe,2);uh(F,{get records(){return s(Q)},get services(){return a()},get names(){return s(R)}}),C((J,le)=>{Bn(Tt,s(q)),b(_r,`${J??""} requests${le??""}`)},[()=>s(Q).length.toLocaleString(),()=>!s(q)&&s(Z).size?` · ${s(Z).size.toLocaleString()} background requests hidden`:""]),X("change",Tt,N),w(K,fe)},ba=K=>{var fe=kh(),Pe=Ke(fe),De=p(Pe);{var Tt=Oe=>{var Be=yh();w(Oe,Be)},Ct=Oe=>{var Be=bh(),ft=p(Be),ke=j(ft,!0),we=c(ft),ut=j(we,!0);C((Nr,Kt)=>{b(ke,Nr),b(ut,Kt)},[()=>s(y).trim()?"No output matches this filter":"Waiting for output",()=>s(y).trim()?"Try another search or clear the filter.":"Output from the selected services will appear here."]),w(Oe,Be)},_r=Oe=>{var Be=_s(),ft=Ke(Be);et(ft,17,()=>s(H),ke=>`${ke.service}:${ke.id}`,(ke,we)=>{var ut=wh();let Nr;var Kt=p(ut),Xt=j(Kt,!0),yr=c(Kt,2),Dr=j(yr,!0),Le=c(yr,2),Zr=j(Le,!0),Ir=c(Le),Qt=j(Ir,!0);C((Xr,us,or,Qr)=>{Nr=it(ut,1,"log-row svelte-147la1m",null,Nr,{stderr:s(we).stream==="stderr",shared:s(we).source==="share"}),U(Kt,"datetime",Xr),b(Xt,us),U(yr,"title",or),b(Dr,Qr),b(Zr,s(we).source==="share"?"SHARE":s(we).stream),b(Qt,s(we).line)},[()=>new Date(s(we).ts).toISOString(),()=>new Date(s(we).ts).toLocaleTimeString([],{hour12:!1}),()=>s(R).get(s(we).service)??s(we).service,()=>s(R).get(s(we).service)??s(we).service]),w(ke,ut)}),w(Oe,Be)};B(De,Oe=>{e.selectedKeys.length?s(H).length?Oe(_r,-1):Oe(Ct,1):Oe(Tt)})}va(Pe,Oe=>v(k,Oe),()=>s(k));var F=c(Pe,2),J=p(F),le=c(p(J)),Re=j(le,!0),Xe=c(J),Me=j(Xe,!0);C(Oe=>{b(Re,Oe),U(Xe,"aria-pressed",s(x)),b(Me,s(x)?"Following output":"Follow output")},[()=>` · ${s(H).length.toLocaleString()} lines · limit ${d().toLocaleString()}`]),jt("scroll",Pe,oe),X("click",Xe,()=>v(x,!s(x))),w(K,fe)};B(_a,K=>{r()==="requests"?K(ya):K(ba,-1)})}va($,K=>A=K,()=>A),C(K=>{U($,"aria-label",r()==="logs"?"Multi-service logs":"Service requests"),ge=ao($,"",ge,{height:`${s(W)}px`,"--logs-height":`${s(W)}px`}),U(ae,"aria-valuemax",s(z)),U(ae,"aria-valuenow",K),b(Ne,r()==="logs"?"Logs":"Requests"),b(Ft,e.selectedKeys.length),U(rt,"aria-label",r()==="logs"?"Filter log output":"Filter requests"),U(rt,"placeholder",r()==="logs"?"Filter output…":"Filter requests…"),U(qt,"aria-label",`Close ${r()} panel`),U(qt,"title",`Close ${r()} panel`),U(Tr,"aria-pressed",!s(ie)),Jt=it(Tr,1,"svelte-147la1m",null,Jt,{active:!s(ie)}),b(cs,e.selectedKeys.length)},[()=>Math.round(s(W))]),X("pointerdown",ae,ce),X("pointermove",ae,ue),X("pointerup",ae,Y),jt("pointercancel",ae,Y),jt("lostpointercapture",ae,Y),X("keydown",ae,re),Nt(rt,()=>s(y),K=>v(y,K)),X("click",qt,function(...K){var fe;(fe=e.onClose)==null||fe.apply(this,K)}),X("click",Tr,()=>v(S,null)),w(t,$),wt()}nr(["pointerdown","pointermove","pointerup","keydown","change","click"]);const Ln=t=>t instanceof Error?t.message:String(t);function xh(t,e){return{async selectService(r){const a=t.services.find(i=>i.key===r);t.selected=r;const n=[t.load(r).catch(()=>{})];a&&t.projects.some(i=>i.id===a.projectId)&&!t.projectDetails[a.projectId]&&n.push(t.selectProject(a.projectId).catch(()=>{})),await Promise.all(n)},stopService(r){if(t.projects.some(u=>u.id===r.projectId))return t.stopService(r.projectId,r.name);const a=`service:${r.projectId}:${r.name}:stop`,n=e.pending[a];if(n)return n;delete e.errors[r.key];let i;try{i=t.stop(r.key)}catch(u){i=Promise.reject(u)}const l=i.catch(u=>{throw e.errors[r.key]=Ln(u),u});e.pending[a]=l;const o=()=>{e.pending[a]===l&&delete e.pending[a]};return l.then(o,o),l}}}var Eh=E("<button> </button>"),qh=E('<div class="project-shortcuts svelte-1n46o8q"><p class="svelte-1n46o8q">Projects</p><!></div>'),Ph=E('<small class="svelte-1n46o8q">Could not enable. Click to retry.</small>'),Ch=E('<button class="clean-urls-warning svelte-1n46o8q"><!><span aria-live="polite" class="svelte-1n46o8q"><strong class="svelte-1n46o8q"> </strong><!></span></button>'),Ah=E('<div class="sidebar-resizer svelte-1n46o8q" role="separator" aria-label="Sidebar width" aria-orientation="vertical" tabindex="0"></div>'),Rh=E('<div class="catalog-error svelte-1n46o8q" role="alert"><span> </span> <button class="svelte-1n46o8q">Retry projects</button></div>'),Lh=E('<section class="load-state svelte-1n46o8q"><h1 class="svelte-1n46o8q">Page not found</h1><a href="/projects" class="svelte-1n46o8q">Go to Projects</a></section>'),Th=E('<button class="all-service-card svelte-1n46o8q"><span class="service-heading svelte-1n46o8q"><strong class="svelte-1n46o8q"> </strong><span class="service-status svelte-1n46o8q"> </span></span><span class="project-name svelte-1n46o8q"> </span></button>'),Nh=E('<p aria-live="polite">Loading projects…</p>'),Dh=E("<p>No projects yet. Run <code>localdeck init</code> in your project to get started.</p>"),Ih=E('<section class="all-services svelte-1n46o8q"><header class="svelte-1n46o8q"><h1 class="svelte-1n46o8q">Projects</h1><span class="runtime-count svelte-1n46o8q"> </span></header> <div class="all-service-grid svelte-1n46o8q"></div></section>'),Ho=E('<p role="alert"> </p>'),Mh=E('<p class="forwarder-error svelte-1n46o8q" role="alert"> </p>'),Oh=E(`<section class="global-settings svelte-1n46o8q"><p class="eyebrow svelte-1n46o8q">LocalDeck</p><h1 class="svelte-1n46o8q">Settings</h1> <p> </p> <!> <!> <h3 class="svelte-1n46o8q">Clean URLs</h3> <p>LocalDeck sets this up when you start your project. Enable here to retry; Windows or macOS may ask for administrator approval once.</p> <label class="svelte-1n46o8q"><input type="checkbox"/> Use port-80 links</label> <p aria-live="polite"> </p> <!> <p>Turning this off only changes this browser's links. Installed Windows and macOS forwarding rules survive reboots. The daemon must still be running to serve your apps. Windows forwarding requires the IP Helper service. Built-in forwarding runs with the daemon. Your projects run as your normal user.</p> <button class="svelte-1n46o8q">Remove forwarder</button> <!></section>`),zh=E('<div class="empty-state svelte-1n46o8q"><h2 class="svelte-1n46o8q"> </h2><p> </p></div>'),Uh=E('<p role="alert"> <button class="svelte-1n46o8q">Retry</button></p>'),Hh=E('<section class="all-services svelte-1n46o8q" aria-labelledby="all-services-title"><header class="svelte-1n46o8q"><div><p class="eyebrow svelte-1n46o8q">Runtime</p> <h1 id="all-services-title" class="svelte-1n46o8q">All Services</h1></div> <span class="runtime-count svelte-1n46o8q"> </span></header> <label class="all-search svelte-1n46o8q">Find a service<input aria-label="Find a service" placeholder="Service or project name…" class="svelte-1n46o8q"/></label> <div class="all-service-grid svelte-1n46o8q"></div> <!></section>'),Bh=E('<section class="secrets-page svelte-1n46o8q" aria-label="Project secrets"><button class="svelte-1n46o8q">← Back to overview</button> <header class="secrets-page-heading svelte-1n46o8q"><p class="svelte-1n46o8q"> </p><h1 class="svelte-1n46o8q">Secrets</h1></header> <!></section>'),Fh=E('<section class="load-state svelte-1n46o8q" role="alert"><h1 class="svelte-1n46o8q"> </h1> <p> </p> <button class="primary svelte-1n46o8q">Retry</button></section>'),Kh=E('<section class="load-state svelte-1n46o8q" aria-live="polite"><h1 class="svelte-1n46o8q"> </h1> <p>Reading the project configuration and current services.</p></section>'),Vh=E('<section class="load-state svelte-1n46o8q" aria-live="polite"><h1 class="svelte-1n46o8q"> </h1> <!> <a href="/projects" class="svelte-1n46o8q">Back to Projects</a></section>'),Wh=E('<div class="logs-slot svelte-1n46o8q"><!></div>'),Gh=E('<button class="logs-toggle svelte-1n46o8q"> </button>'),Yh=E('<!> <div><aside class="app-rail svelte-1n46o8q" aria-label="Main navigation"><div class="brand svelte-1n46o8q"><span class="brand-identity svelte-1n46o8q"><img src="/localdeck-icon.png" alt="LocalDeck" width="36" height="36" class="svelte-1n46o8q"/><span class="brand-name svelte-1n46o8q" aria-hidden="true">LocalDeck</span></span><button class="collapse-toggle svelte-1n46o8q"><!></button></div> <nav class="svelte-1n46o8q"><button class="palette-trigger svelte-1n46o8q" aria-label="Open command palette" aria-haspopup="dialog" aria-keyshortcuts="Meta+K Control+K"><!><span class="svelte-1n46o8q">Search commands</span><kbd class="svelte-1n46o8q"> </kbd></button> <a href="/projects" aria-label="Projects" title="Projects"><!><span class="svelte-1n46o8q">Projects</span></a> <a href="/services" aria-label="All Services" title="All Services"><!><span class="svelte-1n46o8q">All Services</span></a> <a href="/settings" aria-label="Settings" title="Settings"><!><span class="svelte-1n46o8q">Settings</span></a> <a href="/about" aria-label="About" title="About"><!><span class="svelte-1n46o8q">About</span></a> <a href="/changelog" aria-label="Changelog" title="Changelog"><!><span class="svelte-1n46o8q">Changelog</span></a></nav> <!> <!> <!></aside> <main class="svelte-1n46o8q"><!> <!></main> <!> <footer class="statusbar svelte-1n46o8q"><span class="runtime-label svelte-1n46o8q">Local runtime</span><span><i class="svelte-1n46o8q"></i> </span><span class="port-status svelte-1n46o8q"> </span><div class="panel-controls svelte-1n46o8q"></div></footer></div>',1);function Jh(t,e){bt(e,!0);let r=je(e,"deck",7,Kv),n=Ue(e.fallbackActions??{pending:{},errors:{}});const l=No(e.initialPath??(typeof window>"u"?"/projects":window.location.pathname));let o=I(Ue(l.page==="services"&&l.serviceKey?[l.serviceKey]:[])),u=I(Ue(l.page==="services"&&!!l.serviceKey));const d=_=>_.page==="services"?{page:"services"}:_;let f=I(Ue(d(l)));const h=D(()=>s(f).page==="projects"&&s(f).projectId?s(f).section==="secrets"?"project-secrets":"overview":s(f).page),m=D(()=>s(f).page==="services"?s(f).serviceKey:void 0),y=D(()=>{var _;return s(f).page==="projects"?s(f).projectId:(_=s(m))==null?void 0:_.split(":")[0]});let S=I(Ue(r().connected)),x=I(!1),k=I(!1),A=I(248),L=I(""),O=I(Ue(Ql())),z=I("");function W(_){var P,V;v(O,_,!0),v(z,"");try{localStorage.setItem(Xl,String(_))}catch{v(z,"The limit applies now, but this browser could not save it.")}(V=(P=r()).setLogLimit)==null||V.call(P,_).catch(()=>{v(z,"Limit updated. Some older logs could not be loaded; reopen Logs to retry.")})}function M(){try{localStorage.setItem("localdeck-sidebar",JSON.stringify({width:s(A),collapsed:s(k)}))}catch{}}function G(_){_.currentTarget.setPointerCapture(_.pointerId)}function ce(_){_.currentTarget.hasPointerCapture(_.pointerId)&&v(A,Math.max(200,Math.min(400,_.clientX)),!0)}function ue(_){["ArrowLeft","ArrowRight","Home","End"].includes(_.key)&&(_.preventDefault(),v(A,_.key==="Home"?200:_.key==="End"?400:Math.max(200,Math.min(400,s(A)+(_.key==="ArrowRight"?16:-16))),!0),M())}async function Y(){await Promise.all(r().projects.map(_=>{var P,V;return(V=(P=r()).loadProjectDetails)==null?void 0:V.call(P,_.id).catch(()=>{})}))}let re=I(""),ve=0,ie=I(!1),T=I(!1),H=I(!1),se=I(""),Z=0,Q=!1;const N=D(()=>r().services.map(_=>({..._,urls:_.urls.map(P=>Uv(P,s(ie)))}))),R=D(()=>[...r().projects.flatMap(_=>Do(r().projectDetails[_.id],s(N),_.id)),...Do(void 0,s(N).filter(_=>!r().projects.some(P=>P.id===_.projectId)))]),oe=D(()=>s(R).filter(_=>{var P,V;return`${_.name} ${((P=_.runtime)==null?void 0:P.projectName)??((V=r().projects.find(me=>_.key.startsWith(`${me.id}:`)))==null?void 0:V.name)??""}`.toLowerCase().includes(s(L).toLowerCase())})),$=D(()=>s(f).page==="services"),ge=D(()=>xh(r(),n)),ae=D(()=>new Set([...Object.keys(r().pendingActions),...Object.keys(n.pending)])),Ce=D(()=>Av(r().projects,s(R),s(ae),r().connected));let de=I(!1),ye=I(!1),Ne=I(""),ot=I("Ctrl+K");async function Et(){s(de)||(v(de,!0),await Dt())}async function Dt(){if(!s(ye)){v(ye,!0),v(Ne,"");try{(await Promise.allSettled(r().projects.map(P=>{var V,me;return(me=(V=r()).loadProjectDetails)==null?void 0:me.call(V,P.id)}))).some(P=>P.status==="rejected")&&v(Ne,"Some services could not be loaded. Results may be incomplete.")}finally{v(ye,!1)}}}function Ft(_){_.defaultPrevented||_.isComposing||_.repeat||_.altKey||_.shiftKey||!(_.metaKey||_.ctrlKey)||_.key.toLowerCase()!=="k"||!s(de)&&document.querySelector("dialog[open]")||(_.preventDefault(),s(de)?v(de,!1):Et())}function ir(_){const P=s(Ce).find(be=>be.id===_.id);if(!P||P.disabled)throw new Error("This command is no longer available.");const V=P.action;if(V.type==="navigate")return Jt(V.route);if(V.type==="open"){window.open(V.url,"_blank","noopener,noreferrer");return}if(V.type==="logs"||V.type==="requests")return Pe(V.key,V.type);const me=s(R).find(be=>be.key===V.key);if(!me)throw new Error("Service is no longer available.");if(V.type==="stop"&&me.runtime)return s(ge).stopService(me.runtime);const _e=V.key.split(":")[0];if(V.type==="start")return r().startService(_e,me.name);if(V.type==="restart")return r().restartService(_e,me.name);throw new Error("Service is no longer available.")}const mr=D(()=>({...r().projectErrors,...n.errors})),kt=D(()=>r().projects.find(_=>_.id===s(y))),Ze=D(()=>s(y)?r().projectDetails[s(y)]:void 0),Rr=D(()=>s($)&&!s(m)),rt=D(()=>r().services.filter(_=>_.status!=="stopped")),qt=D(()=>s(R).map(_=>{var P,V;return{key:_.key,name:_.name,projectName:((P=_.runtime)==null?void 0:P.projectName)??((V=r().projects.find(me=>_.key.startsWith(`${me.id}:`)))==null?void 0:V.name)??"Project"}})),ws=D(()=>[...s(qt),...s(o).filter(_=>!s(qt).some(P=>P.key===_)).map(_=>({key:_,name:_.split(":").slice(1).join(":"),projectName:"Unavailable project"}))]);let Lr=I(""),We=I(0),st=I(Ue(l.page==="services"?l.serviceKey??null:null));async function Pt(_){v(Lr,"");try{await Promise.all(_.filter(P=>r().services.some(V=>V.key===P)).map(P=>r().load(P)))}catch(P){v(Lr,Ln(P),!0)}}function ls(_){const P=_.filter(V=>!s(o).includes(V));v(o,_,!0),Pt(P)}async function Tr(){var P,V;const _=ve;v(x,!0),v(re,""),r().selected=s(m)??null,s(y)&&(r().selectedProjectId=s(y));try{if(s(f).page==="services"&&!s(m))await Y();else{const me=[];s(y)&&r().projects.some(_e=>_e.id===s(y))&&me.push(((V=(P=r()).loadProjectDetails)==null?void 0:V.call(P,s(y)))??r().selectProject(s(y))),s(m)&&r().services.some(_e=>_e.key===s(m))&&me.push(r().load(s(m))),await Promise.all(me)}}catch(me){_===ve&&v(re,Ln(me),!0)}finally{_===ve&&v(x,!1)}}function Jt(_,P=!0){ve++,_.page==="services"&&_.serviceKey&&Pe(_.serviceKey),_=d(_),v(f,_,!0),v(re,""),P&&window.location.pathname!==kn(_)&&window.history.pushState(null,"",kn(_)),s(S)&&Tr()}function Zt(_,P){zv(_)&&(_.preventDefault(),Jt(P))}ti(()=>{v(ot,/Mac|iPhone|iPad/.test(navigator.platform)?"⌘K":"Ctrl+K",!0),v(k,window.matchMedia("(max-width: 760px)").matches,!0);try{const _e=JSON.parse(localStorage.getItem("localdeck-sidebar")??"null");_e&&(v(A,Math.max(200,Math.min(400,Number(_e.width)||248)),!0),v(k,_e.collapsed===!0))}catch{}try{localStorage.getItem("localdeck-clean-urls")!=="false"?Jr(!1):v(T,!0)}catch{Jr(!1)}s(f).page!=="not-found"&&window.location.pathname!==kn(s(f))&&window.history.replaceState(null,"",kn(s(f)));const _=()=>Jt(No(window.location.pathname),!1);window.addEventListener("popstate",_),r().connect().then(()=>{v(S,!0),Tr();for(const _e of s(o))r().services.some(be=>be.key===_e)&&r().load(_e).catch(()=>{})}).catch(_e=>{v(re,Ln(_e),!0)});const P=()=>{var _e,be;document.visibilityState==="visible"&&((be=(_e=r()).refreshProjects)==null||be.call(_e).catch(()=>{}))},V=setInterval(P,5e3);window.addEventListener("focus",P),document.addEventListener("visibilitychange",P);const me=setInterval(()=>{s(ie)&&!s(H)&&!Q&&Jr(!1)},15e3);return()=>{ve++,window.removeEventListener("popstate",_),clearInterval(me),clearInterval(V),window.removeEventListener("focus",P),document.removeEventListener("visibilitychange",P),Z++}});function cs(){try{localStorage.setItem("localdeck-clean-urls",String(s(ie)))}catch{}}async function Jr(_){const P=++Z;v(H,_,!0),Q=!0,_&&v(se,"");const V=await Hv(_);Q=!1,P===Z&&(v(T,!0),v(ie,V.ready,!0),v(se,V.error??"",!0),v(H,!1),(_||V.ready)&&cs())}async function _a(){v(H,!0);const _=++Z;try{const P=await fetch("/api/forwarder",{method:"DELETE",signal:AbortSignal.timeout(135e3)}),V=await P.json();if(_!==Z)return;if(!P.ok||V.removed!==!0)throw new Error(V.error??"Could not remove the system forwarder.");v(ie,!1),v(se,""),cs()}catch(P){_===Z&&v(se,P instanceof Error?P.message:"Removal failed.",!0)}finally{_===Z&&v(H,!1)}}function ya(_){_.currentTarget.checked?(_.currentTarget.checked=!1,Jr(!0)):(Z++,v(ie,!1),v(se,""),v(H,!1),cs())}function ba(){Jt({page:"services"})}function K(_){if(_==="all")return ba();Jt({page:"projects",projectId:_})}let fe=I("logs");function Pe(_,P="logs"){v(fe,P,!0),ls(s(o).includes(_)?s(o):[...s(o),_]),v(u,!0),v(st,_,!0),Eu(We),Pt([_])}async function De(_){const P=ve;await r().forgetProject(_),P===ve&&Jt({page:"projects"})}var Tt=Yh();dd("1n46o8q",_=>{Nu(()=>{var P;hl.title=`${(s(h)==="project-secrets"?"Secrets":s(h)==="overview"?((P=s(kt))==null?void 0:P.name)??"Project":s(h)==="services"?"Services":s(h)==="settings"?"Settings":s(h)==="about"?"About":s(h)==="changelog"?"Changelog":s(h)==="not-found"?"Page not found":"Projects")??""} · LocalDeck`})}),jt("keydown",zn,Ft);var Ct=Ke(Tt);{var _r=_=>{Ov(_,{get commands(){return s(Ce)},get loading(){return s(ye)},get loadError(){return s(Ne)},onRetry:Dt,onExecute:ir,onClose:()=>{v(de,!1)}})};B(Ct,_=>{s(de)&&_(_r)})}var F=c(Ct,2);let J,le;var Re=p(F),Xe=p(Re),Me=c(p(Xe)),Oe=p(Me);{var Be=_=>{lv(_,{size:18})},ft=_=>{iv(_,{size:18})};B(Oe,_=>{s(k)?_(Be):_(ft,-1)})}var ke=c(Xe,2),we=p(ke),ut=p(we);io(ut,{size:18});var Nr=c(ut,2),Kt=j(Nr,!0),Xt=c(we,2);let yr;var Dr=p(Xt);uv(Dr,{size:18});var Le=c(Xt,2);let Zr;var Ir=p(Le);Md(Ir,{size:18});var Qt=c(Le,2);let Xr;var us=p(Qt);Jl(us,{size:18});var or=c(Qt,2);let Qr;var ks=p(or);Zd(ks,{size:18});var $r=c(or,2);let Ss;var wa=p($r);gv(wa,{size:18});var js=c(ke,2);{var xs=_=>{var P=qh(),V=c(p(P));et(V,17,()=>r().projects,me=>me.id,(me,_e)=>{var be=Eh();let ze;var Ge=j(be,!0);C(()=>{ze=it(be,1,"svelte-1n46o8q",null,ze,{current:!s($)&&s(h)!=="projects"&&s(h)!=="settings"&&s(h)!=="about"&&s(y)===s(_e).id}),b(Ge,s(_e).name)}),X("click",be,()=>K(s(_e).id)),w(me,be)}),w(_,P)};B(js,_=>{s(k)||_(xs)})}var Vs=c(js,2);{var lt=_=>{var P=Ch(),V=p(P);Pv(V,{size:18});var me=c(V),_e=p(me),be=j(_e,!0),ze=c(_e);{var Ge=at=>{var Fe=Ph();w(at,Fe)};B(ze,at=>{s(se)&&!s(H)&&at(Ge)})}C(()=>{P.disabled=s(H),U(P,"aria-label",s(H)?"Enabling Clean URLs":"Enable Clean URLs"),U(P,"title",s(se)||"Enable Clean URLs"),b(be,s(H)?"Enabling Clean URLs…":"Enable Clean URLs")}),X("click",P,()=>void Jr(!0)),w(_,P)};B(Vs,_=>{s(T)&&!s(ie)&&_(lt)})}var _t=c(Vs,2);{var ee=_=>{var P=Ah();U(P,"aria-valuemin",200),U(P,"aria-valuemax",400),C(()=>U(P,"aria-valuenow",s(A))),X("pointerdown",P,G),X("pointermove",P,ce),X("pointerup",P,M),jt("lostpointercapture",P,M),X("keydown",P,ue),w(_,P)};B(_t,_=>{s(k)||_(ee)})}var Se=c(Re,2),lr=p(Se);{var cr=_=>{var P=Rh(),V=p(P),me=j(V,!0),_e=c(V,2);C(()=>b(me,r().projectErrors.projects)),X("click",_e,()=>void r().loadProjects().catch(()=>{})),w(_,P)};B(lr,_=>{r().projectErrors.projects&&_(cr)})}var es=c(lr,2);{var Vt=_=>{var P=Lh(),V=c(p(P));X("click",V,me=>Zt(me,{page:"projects"})),w(_,P)},Mr=_=>{Jv(_)},Es=_=>{sf(_)},Ws=_=>{var P=Ih(),V=p(P),me=c(p(V)),_e=j(me),be=c(V,2);et(be,21,()=>r().projects,ze=>ze.id,(ze,Ge)=>{var at=Th(),Fe=p(at),Te=p(Fe),pt=j(Te,!0),St=c(Te),$t=j(St,!0),zr=c(Fe),er=j(zr);C(ct=>{b(pt,s(Ge).name),b($t,s(Ge).available?"Available":"Unavailable"),b(er,`${ct??""} running services`)},[()=>s(N).filter(ct=>ct.projectId===s(Ge).id&&ct.status!=="stopped").length]),X("click",at,()=>K(s(Ge).id)),w(ze,at)},ze=>{var Ge=_s(),at=Ke(Ge);{var Fe=pt=>{var St=Nh();w(pt,St)},Te=pt=>{var St=Dh();w(pt,St)};B(at,pt=>{s(S)?pt(Te,-1):pt(Fe)})}w(ze,Ge)}),C(()=>b(_e,`${r().projects.length??""} projects`)),w(_,P)},ht=_=>{var P=Oh(),V=c(p(P),3),me=j(V),_e=c(V,2);Xv(_e,{get value(){return s(O)},onSave:W});var be=c(_e,2);{var ze=er=>{var ct=Ho(),br=j(ct,!0);C(()=>b(br,s(z))),w(er,ct)};B(be,er=>{s(z)&&er(ze)})}var Ge=c(be,6),at=p(Ge),Fe=c(Ge,2),Te=j(Fe,!0),pt=c(Fe,2);{var St=er=>{var ct=Mh(),br=j(ct,!0);C(()=>b(br,s(se))),w(er,ct)};B(pt,er=>{s(se)&&er(St)})}var $t=c(pt,4),zr=c($t,2);$l(zr),C(()=>{b(me,`${r().connected?"Daemon connected":"Waiting for daemon"} · ${s(rt).length??""} active`),Bn(at,s(ie)),at.disabled=s(H),b(Te,s(H)?"Setting up links… Complete the administrator approval prompt if shown.":s(ie)?"Forwarding verified. Port-free links are active.":"Using original ports. Your app links remain unchanged."),$t.disabled=s(H)}),X("change",at,ya),X("click",$t,_a),w(_,P)},At=_=>{var P=Hh(),V=p(P),me=c(p(V),2),_e=j(me),be=c(V,2),ze=c(p(be)),Ge=c(be,2);et(Ge,21,()=>s(oe),Fe=>Fe.key,(Fe,Te)=>{{let pt=D(()=>{var ct,br;return((ct=s(Te).runtime)==null?void 0:ct.projectName)??((br=r().projects.find(mn=>s(Te).key.startsWith(`${mn.id}:`)))==null?void 0:br.name)??"Project"}),St=D(()=>{var ct;return!!(s(Te).command&&((ct=r().projectDetails[s(Te).key.split(":")[0]])!=null&&ct.available))}),$t=D(()=>s(mr)[s(Te).key]??""),zr=D(()=>{var ct;return((ct=r().shareErrors)==null?void 0:ct[s(Te).key])??""}),er=D(()=>s(u)&&s(fe)==="logs"&&s(o).includes(s(Te).key));Dp(Fe,{get entry(){return s(Te)},get projectName(){return s(pt)},get canStart(){return s(St)},get pending(){return s(ae)},get error(){return s($t)},get shareError(){return s(zr)},get logsSelected(){return s(er)},onStart:()=>r().startService(s(Te).key.split(":")[0],s(Te).name),onStop:()=>s(Te).runtime?s(ge).stopService(s(Te).runtime):Promise.resolve(),onShare:ct=>r().share(s(Te).key,ct),onUnshare:()=>r().unshare(s(Te).key),onRequests:()=>Pe(s(Te).key,"requests"),onLogs:()=>Pe(s(Te).key)})}},Fe=>{var Te=zh(),pt=p(Te),St=j(pt,!0),$t=c(pt),zr=j($t,!0);C(()=>{b(St,s(L)?"No matching services":"No active services"),b(zr,s(L)?"Try another service or project name.":"Start a configured service from a project, or run LocalDeck from your terminal.")}),w(Fe,Te)});var at=c(Ge,2);et(at,17,()=>r().projects.filter(Fe=>r().projectErrors[Fe.id]),Cr,(Fe,Te)=>{var pt=Uh(),St=p(pt),$t=c(St);C(()=>b(St,`${s(Te).name??""}: ${r().projectErrors[s(Te).id]??""} `)),X("click",$t,Y),w(Fe,pt)}),C(()=>b(_e,`${s(rt).length??""} active`)),Nt(ze,()=>s(L),Fe=>v(L,Fe)),w(_,P)},Or=_=>{var P=_s(),V=Ke(P);qo(V,()=>s(Ze).id,me=>{var _e=Bh(),be=p(_e),ze=c(be,2),Ge=p(ze),at=j(Ge,!0),Fe=c(ze,2);ff(Fe,{get project(){return s(Ze)}}),C(()=>b(at,s(Ze).name)),X("click",be,()=>Jt({page:"projects",projectId:s(Ze).id})),w(me,_e)}),w(_,P)},ri=_=>{var P=_s(),V=Ke(P);qo(V,()=>s(Ze).id,me=>{{let _e=D(()=>r().shareErrors??{});Pp(me,{get project(){return s(Ze)},onOpenSecrets:be=>Zt(be,{page:"projects",projectId:s(Ze).id,section:"secrets"}),get services(){return s(N)},get pending(){return s(ae)},get errors(){return s(mr)},get shareErrors(){return s(_e)},onStartAll:()=>r().startAll(s(Ze).id),onStopAll:()=>r().stopAll(s(Ze).id),onStartService:be=>r().startService(s(Ze).id,be),onStopService:be=>r().stopService(s(Ze).id,be),onRestartService:be=>r().restartService(s(Ze).id,be),onUpdateDependencies:(be,ze)=>r().updateDependencies(s(Ze).id,be,ze),onRetry:()=>r().selectProject(s(Ze).id),onForget:()=>De(s(Ze).id),onSelectService:Pe,onViewRequests:be=>Pe(be,"requests"),onShare:(be,ze)=>r().share(be,ze),onUnshare:be=>r().unshare(be)})}}),w(_,P)},si=_=>{var P=Fh(),V=p(P),me=j(V),_e=c(V,2),be=j(_e,!0),ze=c(_e,2);C(()=>{b(me,`Could not load ${s(kt).name??""}`),b(be,r().projectErrors[s(kt).id])}),X("click",ze,()=>void r().selectProject(s(kt).id).catch(()=>{})),w(_,P)},ai=_=>{var P=Kh(),V=p(P),me=j(V);C(()=>b(me,`Loading ${s(kt).name??""}`)),w(_,P)},ni=_=>{var P=Vh(),V=p(P),me=j(V,!0),_e=c(V,2);{var be=Ge=>{var at=Ho(),Fe=j(at,!0);C(()=>b(Fe,s(re))),w(Ge,at)};B(_e,Ge=>{s(re)&&Ge(be)})}var ze=c(_e,2);C(()=>b(me,!s(S)||s(x)?"Loading project…":"Project not found")),X("click",ze,Ge=>Zt(Ge,{page:"projects"})),w(_,P)};B(es,_=>{s(h)==="not-found"?_(Vt):s(h)==="about"?_(Mr,1):s(h)==="changelog"?_(Es,2):s(h)==="projects"?_(Ws,3):s(h)==="settings"?_(ht,4):s(Rr)?_(At,5):s(h)==="project-secrets"&&s(Ze)?_(Or,6):s(h)==="overview"&&s(Ze)?_(ri,7):s(kt)&&r().projectErrors[s(kt).id]?_(si,8):s(kt)?_(ai,9):_(ni,-1)})}var fn=c(Se,2);{var pn=_=>{var P=Wh(),V=p(P);jh(V,{get historyBoundaries(){return r().historyBoundaries},onClear:(me,_e)=>r().clearHistory(me,_e),get view(){return s(fe)},get services(){return s(N)},get limit(){return s(O)},get sources(){return s(ws)},get selectedKeys(){return s(o)},get logs(){return r().logs},get requests(){return r().requests},get resetView(){return s(We)},get requestedSource(){return s(st)},get error(){return s(Lr)},onRetry:()=>void Pt(s(o)),onSelectionChange:ls,onClose:()=>v(u,!1)}),w(_,P)};B(fn,_=>{s(u)&&_(pn)})}var ii=c(fn,2),Gs=c(p(ii));let hn;var gn=c(p(Gs),1,!0),ka=c(Gs),oi=j(ka),Sa=c(ka);et(Sa,20,()=>["requests","logs"],Cr,(_,P)=>{var V=Gh(),me=j(V,!0);C(()=>{U(V,"aria-expanded",s(u)&&s(fe)===P),b(me,P==="requests"?"Requests":"Logs")}),X("click",V,()=>{v(u,s(fe)!==P||!s(u),!0),v(fe,P,!0),s(u)&&(Y(),Pt(s(o)))}),w(_,V)}),C(()=>{J=it(F,1,"layout svelte-1n46o8q",null,J,{collapsed:s(k)}),le=ao(F,"",le,{"--sidebar-width":`${s(A)}px`}),U(Me,"aria-expanded",!s(k)),U(Me,"aria-label",s(k)?"Expand sidebar":"Collapse sidebar"),U(we,"title",`Search commands (${s(ot)})`),b(Kt,s(ot)),U(Xt,"aria-current",s(f).page==="projects"?"page":void 0),yr=it(Xt,1,"svelte-1n46o8q",null,yr,{active:s(f).page==="projects"}),U(Le,"aria-current",s(f).page==="services"?"page":void 0),Zr=it(Le,1,"svelte-1n46o8q",null,Zr,{active:s(f).page==="services"}),U(Qt,"aria-current",s(f).page==="settings"?"page":void 0),Xr=it(Qt,1,"svelte-1n46o8q",null,Xr,{active:s(f).page==="settings"}),U(or,"aria-current",s(f).page==="about"?"page":void 0),Qr=it(or,1,"svelte-1n46o8q",null,Qr,{active:s(f).page==="about"}),U($r,"aria-current",s(f).page==="changelog"?"page":void 0),Ss=it($r,1,"svelte-1n46o8q",null,Ss,{active:s(f).page==="changelog"}),hn=it(Gs,1,"connection svelte-1n46o8q",null,hn,{connected:r().connected}),b(gn,r().connected?"Daemon connected":"Connecting to daemon"),b(oi,`${s(rt).length??""} active services`)}),X("click",Me,()=>{v(k,!s(k)),M()}),X("click",we,()=>Et()),X("click",Xt,_=>Zt(_,{page:"projects"})),X("click",Le,_=>Zt(_,{page:"services"})),X("click",Qt,_=>Zt(_,{page:"settings"})),X("click",or,_=>Zt(_,{page:"about"})),X("click",$r,_=>Zt(_,{page:"changelog"})),w(t,Tt),wt()}nr(["click","pointerdown","pointermove","pointerup","keydown","change"]);rd(Jh,{target:document.getElementById("app")});