localdeck 1.4.0 → 1.5.0

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,21 @@
1
+ var Ac=Object.defineProperty;var Eo=r=>{throw TypeError(r)};var Lc=(r,e,a)=>e in r?Ac(r,e,{enumerable:!0,configurable:!0,writable:!0,value:a}):r[e]=a;var Lt=(r,e,a)=>Lc(r,typeof e!="symbol"?e+"":e,a),wi=(r,e,a)=>e.has(r)||Eo("Cannot "+a);var x=(r,e,a)=>(wi(r,e,"read from private field"),a?a.call(r):e.get(r)),xe=(r,e,a)=>e.has(r)?Eo("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(r):e.set(r,a),Oe=(r,e,a,s)=>(wi(r,e,"write to private field"),s?s.call(r,a):e.set(r,a),a),nt=(r,e,a)=>(wi(r,e,"access private method"),a);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))s(n);new MutationObserver(n=>{for(const i of n)if(i.type==="childList")for(const c of i.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&s(c)}).observe(document,{childList:!0,subtree:!0});function a(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 s(n){if(n.ep)return;n.ep=!0;const i=a(n);fetch(n.href,i)}})();const rl=!1;var ui=Array.isArray,Tc=Array.prototype.indexOf,Zn=Array.prototype.includes,di=Array.from,al=Object.defineProperty,Ga=Object.getOwnPropertyDescriptor,Ic=Object.getOwnPropertyDescriptors,Nc=Object.prototype,Dc=Array.prototype,sl=Object.getPrototypeOf,qo=Object.isExtensible;function Ws(r){return typeof r=="function"}const Oa=()=>{};function Mc(r){for(var e=0;e<r.length;e++)r[e]()}function nl(){var r,e,a=new Promise((s,n)=>{r=s,e=n});return{promise:a,resolve:r,reject:e}}function eo(r,e){if(Array.isArray(r))return r;if(!(Symbol.iterator in r))return Array.from(r);const a=[];for(const s of r)if(a.push(s),a.length===e)break;return a}const rr=2,vs=4,vi=8,to=1<<24,va=16,ra=32,Ua=64,Mi=128,ro=256,ta=512,Qt=1024,Yt=2048,pa=4096,Ar=8192,Mr=16384,Os=32768,Xn=1<<25,Za=65536,Qn=1<<17,il=1<<18,Us=1<<19,zc=1<<20,ja=1<<25,fs=65536,ei=1<<21,js=1<<22,Ya=1<<23,Ja=Symbol("$state"),ol=Symbol("component"),ll=Symbol("legacy props"),Oc=Symbol(""),Kn=Symbol("attributes"),zi=Symbol("class"),Oi=Symbol("style"),Xs=Symbol("text"),Fn=Symbol("form reset"),Rn=new class extends Error{constructor(){super(...arguments);Lt(this,"name","StaleReactionError");Lt(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};var Qo;const fi=!!((Qo=globalThis.document)!=null&&Qo.contentType)&&globalThis.document.contentType.includes("xml"),Uc=1,Hc=2,cl=4,Bc=8,Kc=16,Fc=1,Vc=2,Wc=4,$c=8,Gc=16,Yc=1,Jc=2,$t=Symbol("uninitialized"),ul="http://www.w3.org/1999/xhtml",Zc="http://www.w3.org/2000/svg",Xc="@attach";function Qc(){console.warn("https://svelte.dev/e/derived_inert")}function eu(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function tu(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let ru=!1;function dl(r){return r===this.v}function au(r,e){return r!=r?e==e:r!==e||r!==null&&typeof r=="object"||typeof r=="function"}function vl(r){return!au(r,this.v)}function ao(r){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function su(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function nu(r,e,a){throw new Error("https://svelte.dev/e/each_key_duplicate")}function iu(r){throw new Error("https://svelte.dev/e/effect_in_teardown")}function ou(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function lu(r){throw new Error("https://svelte.dev/e/effect_orphan")}function cu(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function uu(r){throw new Error("https://svelte.dev/e/props_invalid_value")}function du(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function vu(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function fu(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function pu(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}let Hs=!1,hu=!1;function gu(){Hs=!0}function mu(r){let e=r.p;for(;e!==null&&e.c===null;)e=e.p;return(e==null?void 0:e.c)??null}function _u(r,e){return r===null&&ao(),r.c??(r.c=new Map(mu(r)||void 0))}let Rt=null;function Ns(r){Rt=r}function yu(r){return _u(Rt).get(r)}function Tt(r,e=!1,a){Rt={p:Rt,i:!1,c:null,e:null,s:r,x:null,r:Xe,l:Hs&&!e?{s:null,u:null,$:[]}:null}}function It(r){var e=Rt,a=e.e;if(a!==null){e.e=null;for(var s of a)Tl(s)}return e.i=!0,Rt=e.p,so(r)}function so(r={}){return al(r,ol,{value:!0}),r}function Bs(){return!Hs||Rt!==null&&Rt.l===null}let rs=[];function fl(){var r=rs;rs=[],Mc(r)}function ea(r){if(rs.length===0&&!on){var e=rs;queueMicrotask(()=>{e===rs&&fl()})}rs.push(r)}function bu(){for(;rs.length>0;)fl()}const wu=-7169;function Ot(r,e){r.f=r.f&wu|e}function no(r){(r.f&ta)!==0||r.deps===null?Ot(r,Qt):Ot(r,pa)}function pl(r){if(r!==null)for(const e of r)(e.f&rr)===0||(e.f&fs)===0||(e.f^=fs,pl(e.deps))}function hl(r,e,a){(r.f&Yt)!==0?e.add(r):(r.f&pa)!==0&&a.add(r),pl(r.deps),Ot(r,Qt)}let Un=!1;function ku(r){var e=Un;try{return Un=!1,[r(),Un]}finally{Un=e}}function Su(r,e){if(e){const a=document.body;r.autofocus=!0,ea(()=>{document.activeElement===a&&r.focus()})}}let Co=!1;function xu(){Co||(Co=!0,document.addEventListener("reset",r=>{Promise.resolve().then(()=>{var e;if(!r.defaultPrevented)for(const a of r.target.elements)(e=a[Fn])==null||e.call(a)})},{capture:!0}))}function Ks(r){var e=et,a=Xe;aa(null),Ca(null);try{return r()}finally{aa(e),Ca(a)}}function pi(r,e,a,s=a){r.addEventListener(e,()=>Ks(a));const n=r[Fn];n?r[Fn]=()=>{n(),s(!0)}:r[Fn]=()=>s(!0),xu()}function io(r,e,a,s){const n=Bs()?cn:oo;var i=r.filter(S=>!S.settled),c=e.map(n);if(a.length===0&&i.length===0){s(c);return}var l=Xe,d=ju(),v=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(S=>S.promise)):null;function p(S){if((l.f&Mr)===0){d();try{s([...c,...S])}catch(j){xa(j,l)}ti()}}var _=gl();if(a.length===0){v.then(()=>p([])).finally(_);return}function w(){Promise.all(a.map(S=>Eu(S))).then(p).catch(S=>xa(S,l)).finally(_)}v?v.then(()=>{d(),w(),ti()}):w()}function ju(){var r=Xe,e=et,a=Rt,s=je;return function(i=!0){Ca(r),aa(e),Ns(a),i&&(r.f&Mr)===0&&(s==null||s.activate(),s==null||s.apply())}}function ti(r=!0){Ca(null),aa(null),Ns(null),r&&(je==null||je.deactivate())}function gl(){var r=Xe,e=r.b,a=je,s=!!(e!=null&&e.is_rendered());return e==null||e.update_pending_count(1,a),a.increment(s,r),()=>{e==null||e.update_pending_count(-1,a),a.decrement(s,r)}}function cn(r){var e=rr|Yt;return Xe!==null&&(Xe.f|=Us),{ctx:Rt,deps:null,effects:null,equals:dl,f:e,fn:r,reactions:null,rv:0,v:$t,wv:0,parent:Xe,ac:null}}const Qs=Symbol("obsolete");function Eu(r,e,a){let s=Xe;s===null&&su();var n=void 0,i=hs($t),c=!et,l=new Set;return Hu(()=>{var S,j;var d=Xe,v=nl();n=v.promise;try{Promise.resolve(r()).then(v.resolve,C=>{C!==Rn&&v.reject(C)}).finally(ti)}catch(C){v.reject(C),ti()}var p=je;if(c){if((d.f&Os)!==0)var _=gl();if((S=s.b)!=null&&S.is_rendered())(j=p.async_deriveds.get(d))==null||j.reject(Qs);else for(const C of l.values())C.reject(Qs);l.add(v),p.async_deriveds.set(d,v)}const w=(C,q=void 0)=>{_==null||_(),l.delete(v),q!==Qs&&(p.activate(),q?(i.f|=Ya,Ds(i,q)):((i.f&Ya)!==0&&(i.f^=Ya),Ds(i,C)),p.deactivate())};v.promise.then(w,C=>w(null,C||"unknown"))}),Ln(()=>{for(const d of l)d.reject(Qs)}),new Promise(d=>{function v(p){function _(){p===n?d(i):v(n)}p.then(_,_)}v(n)})}function F(r){const e=cn(r);return Ol(e),e}function oo(r){const e=cn(r);return e.equals=vl,e}function qu(r){var e=r.effects;if(e!==null){r.effects=null;for(var a=0;a<e.length;a+=1)ur(e[a])}}function lo(r){var e,a=Xe,s=r.parent;if(!Ha&&s!==null&&r.v!==$t&&(s.f&(Mr|Ar))!==0)return Qc(),r.v;Ca(s);try{r.f&=~fs,qu(r),e=Kl(r)}finally{Ca(a)}return e}function ml(r){var e=lo(r);if(!r.equals(e)&&(r.wv=Hl(),(!(je!=null&&je.is_fork)||r.deps===null)&&(je!==null?(je.capture(r,e,!0),nn==null||nn.capture(r,e,!0)):r.v=e,r.deps===null))){Ot(r,Qt);return}Ha||(cr!==null?(fo()||je!=null&&je.is_fork)&&cr.set(r,e):no(r))}function Cu(r){var e;if(r.effects!==null)for(const a of r.effects)(a.teardown||a.ac)&&((e=a.teardown)==null||e.call(a),a.ac!==null&&Ks(()=>{a.ac.abort(Rn),a.ac=null}),a.fn!==null&&(a.teardown=Oa),un(a,0),po(a))}function _l(r){if(r.effects!==null)for(const e of r.effects)e.teardown&&e.fn!==null&&Ms(e)}let ki=null,ks=null,je=null,nn=null,cr=null,Ui=null,on=!1,Si=!1,xs=null,Vn=null;var Po=0;let Pu=1;var Cs,Wa,ns,Ps,Rs,As,Da,Ls,Nr,vn,Ma,ua,wa,Ts,is,yt,Hi,en,Bi,yl,bl,Ss,Ru,tn;const oi=class oi{constructor(){xe(this,yt);Lt(this,"id",Pu++);xe(this,Cs,!1);Lt(this,"linked",!0);xe(this,Wa,null);xe(this,ns,null);Lt(this,"async_deriveds",new Map);Lt(this,"current",new Map);Lt(this,"previous",new Map);xe(this,Ps,new Set);xe(this,Rs,new Set);xe(this,As,0);xe(this,Da,new Map);xe(this,Ls,null);xe(this,Nr,[]);xe(this,vn,[]);xe(this,Ma,new Set);xe(this,ua,new Set);xe(this,wa,new Map);xe(this,Ts,new Set);Lt(this,"is_fork",!1);xe(this,is,!1);ks===null?ki=ks=this:(Oe(ks,ns,this),Oe(this,Wa,ks)),ks=this}skip_effect(e){x(this,wa).has(e)||x(this,wa).set(e,{d:[],m:[]}),x(this,Ts).delete(e)}unskip_effect(e,a=s=>this.schedule(s)){var s=x(this,wa).get(e);if(s){x(this,wa).delete(e);for(var n of s.d)Ot(n,Yt),a(n);for(n of s.m)Ot(n,pa),a(n)}x(this,Ts).add(e)}capture(e,a,s=!1){e.v!==$t&&!this.previous.has(e)&&this.previous.set(e,e.v),(e.f&Ya)===0&&(this.current.set(e,[a,s]),cr==null||cr.set(e,a)),this.is_fork||(e.v=a)}activate(){je=this}deactivate(){je=null,cr=null}flush(){try{Si=!0,je=this,nt(this,yt,en).call(this)}finally{Po=0,Ui=null,xs=null,Vn=null,Si=!1,je=null,cr=null,Ea.clear()}}discard(){var e;for(const a of x(this,Rs))a(this);x(this,Rs).clear();for(const a of this.async_deriveds.values())a.reject(Qs);nt(this,yt,tn).call(this),(e=x(this,Ls))==null||e.resolve()}register_created_effect(e){x(this,vn).push(e)}increment(e,a){if(Oe(this,As,x(this,As)+1),e){let s=x(this,Da).get(a)??0;x(this,Da).set(a,s+1)}}decrement(e,a){if(Oe(this,As,x(this,As)-1),e){let s=x(this,Da).get(a)??0;s===1?x(this,Da).delete(a):x(this,Da).set(a,s-1)}x(this,is)||(Oe(this,is,!0),ea(()=>{Oe(this,is,!1),this.linked&&this.flush()}))}transfer_effects(e,a){for(const s of e)x(this,Ma).add(s);for(const s of a)x(this,ua).add(s);e.clear(),a.clear()}oncommit(e){x(this,Ps).add(e)}ondiscard(e){x(this,Rs).add(e)}settled(){return(x(this,Ls)??Oe(this,Ls,nl())).promise}static ensure(){if(je===null){const e=je=new oi;!Si&&!on&&ea(()=>{x(e,Cs)||e.flush()})}return je}apply(){{cr=null;return}}schedule(e){var n;if(Ui=e,(n=e.b)!=null&&n.is_pending&&(e.f&(vs|vi|to))!==0&&(e.f&Os)===0){e.b.defer_effect(e);return}for(var a=e;a.parent!==null;){a=a.parent;var s=a.f;if(xs!==null&&a===Xe&&(et===null||(et.f&rr)===0))return;if((s&(Ua|ra))!==0){if((s&Qt)===0)return;a.f^=Qt}}x(this,Nr).push(a)}};Cs=new WeakMap,Wa=new WeakMap,ns=new WeakMap,Ps=new WeakMap,Rs=new WeakMap,As=new WeakMap,Da=new WeakMap,Ls=new WeakMap,Nr=new WeakMap,vn=new WeakMap,Ma=new WeakMap,ua=new WeakMap,wa=new WeakMap,Ts=new WeakMap,is=new WeakMap,yt=new WeakSet,Hi=function(){if(this.is_fork)return!0;for(const s of x(this,Da).keys()){for(var e=s,a=!1;e.parent!==null;){if(x(this,wa).has(e)){a=!0;break}e=e.parent}if(!a)return!0}return!1},en=function(){var d,v,p,_;Oe(this,Cs,!0),Po++>1e3&&(nt(this,yt,tn).call(this),Lu());for(const w of x(this,Ma))x(this,ua).delete(w),Ot(w,Yt),this.schedule(w);for(const w of x(this,ua))Ot(w,pa),this.schedule(w);const e=x(this,Nr);Oe(this,Nr,[]),this.apply();var a=xs=[],s=[],n=Vn=[];for(const w of e)try{nt(this,yt,Bi).call(this,w,a,s)}catch(S){throw Sl(w),nt(this,yt,Hi).call(this)||this.discard(),S}if(je=null,n.length>0){var i=oi.ensure();for(const w of n)i.schedule(w)}if(xs=null,Vn=null,nt(this,yt,Hi).call(this)){nt(this,yt,Ss).call(this,s),nt(this,yt,Ss).call(this,a);for(const[w,S]of x(this,wa))kl(w,S);n.length>0&&nt(d=je,yt,en).call(d);return}const c=nt(this,yt,yl).call(this);if(c){nt(this,yt,Ss).call(this,s),nt(this,yt,Ss).call(this,a),nt(v=c,yt,bl).call(v,this);return}x(this,Ma).clear(),x(this,ua).clear();for(const w of x(this,Ps))w(this);x(this,Ps).clear(),nn=this,Ro(s),Ro(a),nn=null,(p=x(this,Ls))==null||p.resolve();var l=je;if(x(this,As)===0&&(x(this,Nr).length===0||l!==null)&&nt(this,yt,tn).call(this),x(this,Nr).length>0)if(l!==null){const w=l;x(w,Nr).push(...x(this,Nr).filter(S=>!x(w,Nr).includes(S)))}else l=this;l!==null&&(Ea.clear(),nt(_=l,yt,en).call(_))},Bi=function(e,a,s){e.f^=Qt;for(var n=e.first;n!==null;){var i=n.f,c=(i&(ra|Ua))!==0,l=c&&(i&Qt)!==0,d=l||(i&Ar)!==0||x(this,wa).has(n);if(!d&&n.fn!==null){c?n.f^=Qt:(i&vs)!==0?a.push(n):Nn(n)&&((i&va)!==0&&x(this,ua).add(n),Ms(n));var v=n.first;if(v!==null){n=v;continue}}for(;n!==null;){var p=n.next;if(p!==null){n=p;break}n=n.parent}}},yl=function(){for(var e=x(this,Wa);e!==null;){if(!e.is_fork){for(const[a,[,s]]of this.current)if(e.current.has(a)&&!s)return e}e=x(e,Wa)}return null},bl=function(e){var s;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 c=this.async_deriveds.get(n);c&&i.promise.then(c.resolve).catch(c.reject)}e.async_deriveds.clear(),this.transfer_effects(x(e,Ma),x(e,ua));const a=n=>{var i=n.reactions;if(i!==null&&!((n.f&rr)!==0&&(n.f&(Yt|pa))===0))for(const d of i){var c=d.f;if((c&rr)!==0)a(d);else{var l=d;c&(js|va)&&!this.async_deriveds.has(l)&&(x(this,ua).delete(l),Ot(l,Yt),this.schedule(l))}}};for(const n of this.current.keys())a(n);this.oncommit(()=>e.discard()),nt(s=e,yt,tn).call(s),je=this,nt(this,yt,en).call(this)},Ss=function(e){for(var a=0;a<e.length;a+=1)hl(e[a],x(this,Ma),x(this,ua))},Ru=function(){var _;for(let w=ki;w!==null;w=x(w,ns)){var e=w.id<this.id,a=[];for(const[S,[j,C]]of this.current){if(w.current.has(S)){var s=w.current.get(S)[0];if(e&&j!==s)w.current.set(S,[j,C]);else continue}a.push(S)}if(e)for(const[S,j]of this.async_deriveds){const C=w.async_deriveds.get(S);C&&j.promise.then(C.resolve).catch(C.reject)}var n=[...w.current.keys()].filter(S=>!w.current.get(S)[1]);if(!(!x(w,Cs)||n.length===0)){var i=n.filter(S=>!this.current.has(S));if(i.length===0)e&&w.discard();else if(a.length>0){if(e)for(const S of x(this,Ts))w.unskip_effect(S,j=>{var C;(j.f&(va|js))!==0?w.schedule(j):nt(C=w,yt,Ss).call(C,[j])});w.activate();var c=new Set,l=new Map;for(var d of a)wl(d,i,c,l);l=new Map;var v=[...w.current].filter(([S,j])=>{const C=this.current.get(S);return C?C[0]!==j[0]||C[1]!==j[1]:!0}).map(([S])=>S);if(v.length>0)for(const S of x(this,vn))(S.f&(Mr|Ar|Qn))===0&&co(S,v,l)&&((S.f&(js|va))!==0?(Ot(S,Yt),w.schedule(S)):x(w,Ma).add(S));if(x(w,Nr).length>0&&!x(w,is)){w.apply();for(var p of x(w,Nr))nt(_=w,yt,Bi).call(_,p,[],[]);Oe(w,Nr,[])}w.deactivate()}}}},tn=function(){if(this.linked){var e=x(this,Wa),a=x(this,ns);e===null?ki=a:Oe(e,ns,a),a===null?ks=e:Oe(a,Wa,e),this.linked=!1}};let ps=oi;function Au(r){var e=on;on=!0;try{for(var a;;){if(bu(),je===null)return a;je.flush()}}finally{on=e}}function Lu(){try{cu()}catch(r){xa(r,Ui)}}let ca=null;function Ro(r){var e=r.length;if(e!==0){for(var a=0;a<e;){var s=r[a++];if((s.f&(Mr|Ar))===0&&Nn(s)&&(ca=new Set,Ms(s),s.deps===null&&s.first===null&&s.nodes===null&&s.teardown===null&&s.ac===null&&Dl(s),(ca==null?void 0:ca.size)>0)){Ea.clear();for(const n of ca){if((n.f&(Mr|Ar))!==0)continue;const i=[n];let c=n.parent;for(;c!==null;)ca.has(c)&&(ca.delete(c),i.push(c)),c=c.parent;for(let l=i.length-1;l>=0;l--){const d=i[l];(d.f&(Mr|Ar))===0&&Ms(d)}}ca.clear()}}ca=null}}function wl(r,e,a,s){if(!a.has(r)&&(a.add(r),r.reactions!==null))for(const n of r.reactions){const i=n.f;(i&rr)!==0?wl(n,e,a,s):(i&(js|va))!==0&&(i&Yt)===0&&co(n,e,s)&&(Ot(n,Yt),uo(n))}}function co(r,e,a){const s=a.get(r);if(s!==void 0)return s;if(r.deps!==null)for(const n of r.deps){if(Zn.call(e,n))return!0;if((n.f&rr)!==0&&co(n,e,a))return a.set(n,!0),!0}return a.set(r,!1),!1}function uo(r){je.schedule(r)}function kl(r,e){if(!((r.f&ra)!==0&&(r.f&Qt)!==0)){(r.f&Yt)!==0?e.d.push(r):(r.f&pa)!==0&&e.m.push(r),Ot(r,Qt);for(var a=r.first;a!==null;)kl(a,e),a=a.next}}function Sl(r){Ot(r,Qt);for(var e=r.first;e!==null;)Sl(e),e=e.next}let ri=new Set;const Ea=new Map;let xl=!1;function hs(r,e){var a={f:0,v:r,reactions:null,equals:dl,rv:0,wv:0};return a}function R(r,e){const a=hs(r);return Ol(a),a}function Tu(r,e=!1,a=!0){var n;const s=hs(r);return e||(s.equals=vl),Hs&&a&&Rt!==null&&Rt.l!==null&&((n=Rt.l).s??(n.s=[])).push(s),s}function u(r,e,a=!1){et!==null&&(!fa||(et.f&Qn)!==0)&&Bs()&&(et.f&(rr|va|js|Qn))!==0&&(qa===null||!qa.has(r))&&fu();let s=a?at(e):e;return Ds(r,s,Vn)}function Ds(r,e,a=null){if(!r.equals(e)){Ha?Ea.set(r,e):Ea.has(r)||Ea.set(r,r.v);var s=ps.ensure();if(s.capture(r,e),(r.f&rr)!==0){const n=r;(r.f&Yt)!==0&&lo(n),cr===null&&no(n)}r.wv=Hl(),El(r,Yt,a),Bs()&&Xe!==null&&(Xe.f&Qt)!==0&&(Xe.f&(ra|Ua))===0&&(Jr===null?Vu([r]):Jr.push(r)),!s.is_fork&&ri.size>0&&!xl&&Iu()}return e}function Iu(){xl=!1;for(const r of ri){(r.f&Qt)!==0&&Ot(r,pa);let e;try{e=Nn(r)}catch{e=!0}e&&Ms(r)}ri.clear()}function jl(r,e=1){var a=t(r),s=e===1?a++:a--;return u(r,a),s}function ln(r){u(r,r.v+1)}function El(r,e,a){var s=r.reactions;if(s!==null)for(var n=Bs(),i=s.length,c=0;c<i;c++){var l=s[c],d=l.f;if(!(!n&&l===Xe)){var v=(d&Yt)===0;if(v&&Ot(l,e),(d&Qn)!==0)ri.add(l);else if((d&rr)!==0){var p=l;cr==null||cr.delete(p),(d&fs)===0&&(d&ta&&(Xe===null||(Xe.f&ei)===0)&&(l.f|=fs),El(p,pa,a))}else if(v){var _=l;(d&va)!==0&&ca!==null&&ca.add(_),a!==null?a.push(_):uo(_)}}}}function at(r){if(typeof r!="object"||r===null||Ja in r||ol in r)return r;const e=sl(r);if(e!==Nc&&e!==Dc)return r;var a=new Map,s=ui(r),n=R(0),i=ds,c=l=>{if(ds===i)return l();var d=et,v=ds;aa(null),To(i);var p=l();return aa(d),To(v),p};return s&&a.set("length",R(r.length)),new Proxy(r,{defineProperty(l,d,v){(!("value"in v)||v.configurable===!1||v.enumerable===!1||v.writable===!1)&&du();var p=a.get(d);return p===void 0?c(()=>{var _=R(v.value);return a.set(d,_),_}):u(p,v.value,!0),!0},deleteProperty(l,d){var v=a.get(d);if(v===void 0){if(d in l){const p=c(()=>R($t));a.set(d,p),ln(n)}}else u(v,$t),ln(n);return!0},get(l,d,v){var S;if(d===Ja)return r;var p=a.get(d),_=d in l;if(p===void 0&&(!_||(S=Ga(l,d))!=null&&S.writable)&&(p=c(()=>{var j=at(_?l[d]:$t),C=R(j);return C}),a.set(d,p)),p!==void 0){var w=t(p);return w===$t?void 0:w}return Reflect.get(l,d,v)},getOwnPropertyDescriptor(l,d){var v=Reflect.getOwnPropertyDescriptor(l,d);if(v&&"value"in v){var p=a.get(d);p&&(v.value=t(p))}else if(v===void 0){var _=a.get(d),w=_==null?void 0:_.v;if(_!==void 0&&w!==$t)return{enumerable:!0,configurable:!0,value:w,writable:!0}}return v},has(l,d){var w;if(d===Ja)return!0;var v=a.get(d),p=v!==void 0&&v.v!==$t||Reflect.has(l,d);if(v!==void 0||Xe!==null&&(!p||(w=Ga(l,d))!=null&&w.writable)){v===void 0&&(v=c(()=>{var S=p?at(l[d]):$t,j=R(S);return j}),a.set(d,v));var _=t(v);if(_===$t)return!1}return p},set(l,d,v,p){var A;var _=a.get(d),w=d in l;if(s&&d==="length")for(var S=v;S<_.v;S+=1){var j=a.get(S+"");j!==void 0?u(j,$t):S in l&&(j=c(()=>R($t)),a.set(S+"",j))}if(_===void 0)(!w||(A=Ga(l,d))!=null&&A.writable)&&(_=c(()=>R(void 0)),u(_,at(v)),a.set(d,_));else{w=_.v!==$t;var C=c(()=>at(v));u(_,C)}var q=Reflect.getOwnPropertyDescriptor(l,d);if(q!=null&&q.set&&q.set.call(p,v),!w){if(s&&typeof d=="string"){var b=a.get("length"),I=Number(d);Number.isInteger(I)&&I>=b.v&&u(b,I+1)}ln(n)}return!0},ownKeys(l){t(n);var d=Reflect.ownKeys(l).filter(_=>{var w=a.get(_);return w===void 0||w.v!==$t});for(var[v,p]of a)p.v!==$t&&!(v in l)&&d.push(v);return d},setPrototypeOf(){vu()}})}function Ao(r){try{if(r!==null&&typeof r=="object"&&Ja in r)return r[Ja]}catch{}return r}function vo(r,e){return Object.is(Ao(r),Ao(e))}var ai,ql,Cl,Pl,Rl;function Nu(){if(ai===void 0){ai=window,ql=document,Cl=/Firefox/.test(navigator.userAgent);var r=Element.prototype,e=Node.prototype,a=Text.prototype;Pl=Ga(e,"firstChild").get,Rl=Ga(e,"nextSibling").get,qo(r)&&(r[zi]=void 0,r[Kn]=null,r[Oi]=void 0,r.__e=void 0),qo(a)&&(a[Xs]=void 0)}}function ha(r=""){return document.createTextNode(r)}function gs(r){return Pl.call(r)}function An(r){return Rl.call(r)}function f(r,e){return gs(r)}function Ye(r,e=!1){{var a=gs(r);return a instanceof Comment&&a.data===""?An(a):a}}function m(r,e=!1){return gs(r)}function o(r,e=1,a=!1){let s=r;for(;e--;)s=An(s);return s}function Du(r){r.textContent=""}function Al(){return!1}function Ll(r,e,a){return e==null||e===ul?a?document.createElement(r,{is:a}):document.createElement(r):a?document.createElementNS(e,r,{is:a}):document.createElementNS(e,r)}function Mu(r){var e=Xe;if(e===null)return et.f|=Ya,r;if((e.f&Os)===0&&(e.f&vs)===0)throw r;xa(r,e)}function xa(r,e){if(!(e!==null&&(e.f&Mr)!==0)){for(;e!==null;){if((e.f&Mi)!==0&&(e.f&(Mr|Xn))===0){if((e.f&Os)===0)throw r;try{e.b.error(r);return}catch(a){r=a}}e=e.parent}throw r}}function zu(r){Xe===null&&(et===null&&lu(),ou()),Ha&&iu()}function Ou(r,e){var a=e.last;a===null?e.last=e.first=r:(a.next=r,r.prev=a,e.last=r)}function ga(r,e){var a=Xe;a!==null&&(a.f&Ar)!==0&&(r|=Ar);var s={ctx:Rt,deps:null,nodes:null,f:r|Yt|ta,first:null,fn:e,last:null,next:null,parent:a,b:a&&a.b,prev:null,teardown:null,wv:0,ac:null};je==null||je.register_created_effect(s);var n=s;if((r&vs)!==0)xs!==null?xs.push(s):ps.ensure().schedule(s);else if(e!==null){try{Ms(s)}catch(c){throw ur(s),c}n.deps===null&&n.teardown===null&&n.nodes===null&&n.first===n.last&&(n.f&Us)===0&&(n=n.first,(r&va)!==0&&(r&Za)!==0&&n!==null&&(n.f|=Za))}if(n!==null&&(n.parent=a,a!==null&&Ou(n,a),et!==null&&(et.f&rr)!==0&&(r&Ua)===0)){var i=et;(i.effects??(i.effects=[])).push(n)}return s}function fo(){return et!==null&&!fa}function Ln(r){const e=ga(vi,null);return Ot(e,Qt),e.teardown=r,e}function yr(r){zu();var e=Xe.f,a=!et&&(e&ra)!==0&&Rt!==null&&!Rt.i;if(a){var s=Rt;(s.e??(s.e=[])).push(r)}else return Tl(r)}function Tl(r){return ga(vs|zc,r)}function Uu(r){ps.ensure();const e=ga(Ua|Us,r);return(a={})=>new Promise(s=>{a.outro?us(e,()=>{ur(e),s(void 0)}):(ur(e),s(void 0))})}function Tn(r){return ga(vs,r)}function Hu(r){return ga(js|Us,r)}function In(r,e=0){return ga(vi|e,r)}function E(r,e=[],a=[],s=[]){io(s,e,a,n=>{ga(vi,()=>{r(...n.map(t))})})}function Bu(r,e=[],a=[],s=[]){io(s,e,a,n=>{ga(vs,()=>r(...n.map(t)))})}function ys(r,e=0){var a=ga(va|e,r);return a}function Il(r,e=0){var a=ga(to|e,r);return a}function Rr(r){return ga(ra|Us,r)}function Nl(r){var e=r.teardown;if(e!==null){const a=Ha,s=et;Lo(!0),aa(null);try{e.call(null)}catch(n){xa(n,r.parent)}finally{Lo(a),aa(s)}}}function po(r,e=!1){var a=r.first;for(r.first=r.last=null;a!==null;){const n=a.ac;n!==null&&Ks(()=>{n.abort(Rn)});var s=a.next;(a.f&Ua)!==0?a.parent=null:ur(a,e),a=s}}function Ku(r){for(var e=r.first;e!==null;){var a=e.next;(e.f&ra)===0&&ur(e),e=a}}function ur(r,e=!0){var a=!1;(e||(r.f&il)!==0)&&r.nodes!==null&&r.nodes.end!==null&&(Fu(r.nodes.start,r.nodes.end),a=!0),r.f|=Xn,po(r,e&&!a),un(r,0);var s=r.nodes&&r.nodes.t;if(s!==null)for(const i of s)i.stop();Nl(r),r.f^=Xn,r.f|=Mr;var n=r.parent;n!==null&&n.first!==null&&Dl(r),r.next=r.prev=r.teardown=r.ctx=r.deps=r.fn=r.nodes=r.ac=r.b=null}function Fu(r,e){for(;r!==null;){var a=r===e?null:An(r);r.remove(),r=a}}function Dl(r){var e=r.parent,a=r.prev,s=r.next;a!==null&&(a.next=s),s!==null&&(s.prev=a),e!==null&&(e.first===r&&(e.first=s),e.last===r&&(e.last=a))}function us(r,e,a=!0){var s=[];r.f|=ro,Ml(r,s,!0);var n=()=>{a&&ur(r),e&&e()},i=s.length;if(i>0){var c=()=>--i||n();for(var l of s)l.out(c)}else n()}function Ml(r,e,a){if((r.f&Ar)===0){r.f^=Ar;var s=r.nodes&&r.nodes.t;if(s!==null)for(const l of s)(l.is_global||a)&&e.push(l);for(var n=r.first;n!==null;){var i=n.next;if((n.f&Ua)===0){var c=(n.f&Za)!==0||(n.f&ra)!==0&&(r.f&va)!==0;Ml(n,e,c?a:!1)}n=i}}}function si(r){r.f&=~ro,zl(r,!0)}function zl(r,e){if((r.f&ro)===0&&(r.f&Ar)!==0){r.f^=Ar,(r.f&Qt)===0&&(Ot(r,Yt),ps.ensure().schedule(r));for(var a=r.first;a!==null;){var s=a.next,n=(a.f&Za)!==0||(a.f&ra)!==0;zl(a,n?e:!1),a=s}var i=r.nodes&&r.nodes.t;if(i!==null)for(const c of i)(c.is_global||e)&&c.in()}}function ho(r,e){if(r.nodes)for(var a=r.nodes.start,s=r.nodes.end;a!==null;){var n=a===s?null:An(a);e.append(a),a=n}}let Wn=!1,Ha=!1;function Lo(r){Ha=r}let et=null,fa=!1;function aa(r){et=r}let Xe=null;function Ca(r){Xe=r}let qa=null;function Ol(r){et!==null&&(qa??(qa=new Set)).add(r)}let Dr=null,Vr=0,Jr=null;function Vu(r){Jr=r}let Ul=1,as=0,ds=as;function To(r){ds=r}function Hl(){return++Ul}function Nn(r){var e=r.f;if((e&Yt)!==0)return!0;if(e&rr&&(r.f&=~fs),(e&pa)!==0){for(var a=r.deps,s=a.length,n=0;n<s;n++){var i=a[n];if(Nn(i)&&ml(i),i.wv>r.wv)return!0}(e&ta)!==0&&cr===null&&Ot(r,Qt)}return!1}function Bl(r,e,a=!0){var s=r.reactions;if(s!==null&&!(qa!==null&&qa.has(r)))for(var n=0;n<s.length;n++){var i=s[n];(i.f&rr)!==0?Bl(i,e,!1):e===i&&(a?Ot(i,Yt):(i.f&Qt)!==0&&Ot(i,pa),uo(i))}}function Kl(r){var e=Dr,a=Vr,s=Jr,n=et,i=qa,c=Rt,l=fa,d=ds,v=r.f;Dr=null,Vr=0,Jr=null,et=(v&(ra|Ua))===0?r:null,qa=null,Ns(r.ctx),fa=!1,ds=++as,r.ac!==null&&(Ks(()=>{r.ac.abort(Rn)}),r.ac=null);try{r.f|=ei;var p=r.fn,_=p();r.f|=Os;var w=Io(r);if(Bs()&&Jr!==null&&!fa&&w!==null&&(r.f&(rr|pa|Yt))===0)for(var S=0;S<Jr.length;S++)Bl(Jr[S],r);if(n!==null&&n!==r){if(as++,n.deps!==null)for(let j=0;j<a;j+=1)n.deps[j].rv=as;if(e!==null)for(const j of e)j.rv=as;Jr!==null&&(s===null?s=Jr:s.push(...Jr))}return(r.f&Ya)!==0&&(r.f^=Ya),_}catch(j){return Io(r),Mu(j)}finally{r.f^=ei,Dr=e,Vr=a,Jr=s,et=n,qa=i,Ns(c),fa=l,ds=d}}function Io(r){var n;var e=r.deps,a=je==null?void 0:je.is_fork;if(Dr!==null){var s;if(a||un(r,Vr),e!==null&&Vr>0)for(e.length=Vr+Dr.length,s=0;s<Dr.length;s++)e[Vr+s]=Dr[s];else r.deps=e=Dr;if(fo()&&(r.f&ta)!==0)for(s=Vr;s<e.length;s++)((n=e[s]).reactions??(n.reactions=[])).push(r)}else!a&&e!==null&&Vr<e.length&&(un(r,Vr),e.length=Vr);return e}function Wu(r,e){let a=e.reactions;if(a!==null){var s=Tc.call(a,r);if(s!==-1){var n=a.length-1;n===0?a=e.reactions=null:(a[s]=a[n],a.pop())}}if(a===null&&(e.f&rr)!==0&&(Dr===null||!Zn.call(Dr,e))){var i=e;(i.f&ta)!==0&&(i.f^=ta,i.f&=~fs),i.v!==$t&&no(i),i.ac!==null&&Ks(()=>{i.ac.abort(Rn),i.ac=null,Ot(i,Yt)}),Cu(i),un(i,0)}}function un(r,e){var a=r.deps;if(a!==null)for(var s=e;s<a.length;s++)Wu(r,a[s])}function Ms(r){var e=r.f;if((e&Mr)===0){Ot(r,Qt);var a=Xe,s=Wn;Xe=r,Wn=(e&(ra|Ua))===0;try{(e&(va|to))!==0?Ku(r):po(r),Nl(r);var n=Kl(r);r.teardown=typeof n=="function"?n:null,r.wv=Ul;var i;rl&&hu&&(r.f&Yt)!==0&&r.deps}finally{Wn=s,Xe=a}}}async function ms(){await Promise.resolve(),Au()}function t(r){var e=r.f,a=(e&rr)!==0;if(et!==null&&!fa){var s=Xe!==null&&(Xe.f&Mr)!==0;if(!s&&(qa===null||!qa.has(r))){var n=et.deps;if((et.f&ei)!==0)r.rv<as&&(r.rv=as,Dr===null&&n!==null&&n[Vr]===r?Vr++:Dr===null?Dr=[r]:Dr.push(r));else{et.deps??(et.deps=[]),Zn.call(et.deps,r)||et.deps.push(r);var i=r.reactions;i===null?r.reactions=[et]:Zn.call(i,et)||i.push(et)}}}if(Ha&&Ea.has(r))return Ea.get(r);if(a){var c=r;if(Ha){var l=c.v;return((c.f&Qt)===0&&c.reactions!==null||Vl(c))&&(l=lo(c)),Ea.set(c,l),l}var d=(c.f&ta)===0&&!fa&&et!==null&&(Wn||(et.f&ta)!==0),v=(c.f&Os)===0;Nn(c)&&(d&&(c.f|=ta),ml(c)),d&&!v&&(_l(c),Fl(c))}if(cr!=null&&cr.has(r))return cr.get(r);if((r.f&Ya)!==0)throw r.v;return r.v}function Fl(r){if(r.f|=ta,r.deps!==null)for(const e of r.deps)(e.reactions??(e.reactions=[])).push(r),(e.f&rr)!==0&&(e.f&ta)===0&&(_l(e),Fl(e))}function Vl(r){if(r.v===$t)return!0;if(r.deps===null)return!1;for(const e of r.deps)if(Ea.has(e)||(e.f&rr)!==0&&Vl(e))return!0;return!1}function Pa(r){var e=fa;try{return fa=!0,r()}finally{fa=e}}function $u(r){return r.endsWith("capture")&&r!=="gotpointercapture"&&r!=="lostpointercapture"}const Gu=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"];function Yu(r){return Gu.includes(r)}const Ju={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 Zu(r){return r=r.toLowerCase(),Ju[r]??r}const Xu=["touchstart","touchmove"];function Qu(r){return Xu.includes(r)}const ss=Symbol("events"),Wl=new Set,Ki=new Set;function $l(r,e,a,s={}){function n(i){if(s.capture||Fi.call(e,i),!i.cancelBubble)return Ks(()=>a==null?void 0:a.call(this,i))}return r.startsWith("pointer")||r.startsWith("touch")||r==="wheel"?ea(()=>{e.addEventListener(r,n,s)}):e.addEventListener(r,n,s),n}function Kt(r,e,a,s,n){var i={capture:s,passive:n},c=$l(r,e,a,i);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&Ln(()=>{e.removeEventListener(r,c,i)})}function Q(r,e,a){(e[ss]??(e[ss]={}))[r]=a}function er(r){for(var e=0;e<r.length;e++)Wl.add(r[e]);for(var a of Ki)a(r)}let xi=null,ji=!1;function Fi(r){var C,q;var e=this,a=e.ownerDocument,s=r.type,n=((C=r.composedPath)==null?void 0:C.call(r))||[],i=n[0]||r.target;xi=r,ji||(ji=!0,setTimeout(()=>{ji=!1,xi=null}));var c=0,l=xi===r&&r[ss];if(l){var d=n.indexOf(l);if(d!==-1&&(e===document||e===window)){r[ss]=e;return}var v=n.indexOf(e);if(v===-1)return;d<=v&&(c=d)}if(i=n[c]||r.target,i!==e){al(r,"currentTarget",{configurable:!0,get(){return i||a}});var p=et,_=Xe;aa(null),Ca(null);try{for(var w,S=[];i!==null&&i!==e;){try{var j=(q=i[ss])==null?void 0:q[s];j!=null&&(!i.disabled||r.target===i)&&j.call(i,r)}catch(b){w?S.push(b):w=b}if(r.cancelBubble)break;c++,i=c<n.length?n[c]:null}if(w){for(let b of S)queueMicrotask(()=>{throw b});throw w}}finally{r[ss]=e,delete r.currentTarget,aa(p),Ca(_)}}}var el;const Ei=((el=globalThis==null?void 0:globalThis.window)==null?void 0:el.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:r=>r});function ed(r){return(Ei==null?void 0:Ei.createHTML(r))??r}function Gl(r){var e=Ll("template");return e.innerHTML=ed(r.replaceAll("<!>","<!---->")),e.content}function zs(r,e){var a=Xe;a.nodes===null&&(a.nodes={start:r,end:e,a:null,t:null})}function y(r,e){var a=(e&Yc)!==0,s=(e&Jc)!==0,n,i=!r.startsWith("<!>");return()=>{n===void 0&&(n=Gl(i?r:"<!>"+r),a||(n=gs(n)));var c=s||Cl?document.importNode(n,!0):n.cloneNode(!0);if(a){var l=gs(c),d=c.lastChild;zs(l,d)}else zs(c,c);return c}}function td(r,e,a="svg"){var s=!r.startsWith("<!>"),n=`<${a}>${s?r:"<!>"+r}</${a}>`,i;return()=>{if(!i){var c=Gl(n),l=gs(c);i=gs(l)}var d=i.cloneNode(!0);return zs(d,d),d}}function rd(r,e){return td(r,e,"svg")}function go(r=""){{var e=ha(r+"");return zs(e,e),e}}function Qr(){var r=document.createDocumentFragment(),e=document.createComment(""),a=ha();return r.append(e,a),zs(e,a),r}function g(r,e){r!==null&&r.before(e)}function ad(r){let e=0,a=hs(0),s;return()=>{fo()&&(t(a),In(()=>(e===0&&(s=Pa(()=>r(()=>ln(a)))),e+=1,()=>{ea(()=>{e-=1,e===0&&(s==null||s(),s=void 0,ln(a))})})))}}var sd=Za|Us;function nd(r,e,a,s){new id(r,e,a,s)}var Zr,Qi,Xr,os,qr,Br,Cr,Kr,ka,ls,$a,Is,fn,pn,za,li,jt,od,ld,Vi,cd,Wi,rn,$n,$i,Gi;class id{constructor(e,a,s,n){xe(this,jt);Lt(this,"parent");Lt(this,"is_pending",!1);Lt(this,"transform_error");xe(this,Zr);xe(this,Qi,null);xe(this,Xr);xe(this,os);xe(this,qr);xe(this,Br,null);xe(this,Cr,null);xe(this,Kr,null);xe(this,ka,null);xe(this,ls,0);xe(this,$a,0);xe(this,Is,!1);xe(this,fn,new Set);xe(this,pn,new Set);xe(this,za,null);xe(this,li,ad(()=>(Oe(this,za,hs(x(this,ls))),()=>{Oe(this,za,null)})));var i;Oe(this,Zr,e),Oe(this,Xr,a),Oe(this,os,c=>{var l=Xe;l.b=this,l.f|=Mi,s(c)}),this.parent=Xe.b,this.transform_error=n??((i=this.parent)==null?void 0:i.transform_error)??(c=>c),Oe(this,qr,ys(()=>{nt(this,jt,Wi).call(this)},sd))}defer_effect(e){hl(e,x(this,fn),x(this,pn))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!x(this,Xr).pending}update_pending_count(e,a){nt(this,jt,$i).call(this,e,a),Oe(this,ls,x(this,ls)+e),!(!x(this,za)||x(this,Is))&&(Oe(this,Is,!0),ea(()=>{Oe(this,Is,!1),x(this,za)&&Ds(x(this,za),x(this,ls))}))}get_effect_pending(){return x(this,li).call(this),t(x(this,za))}error(e){if(!x(this,Xr).onerror&&!x(this,Xr).failed)throw e;je!=null&&je.is_fork?(x(this,Br)&&je.skip_effect(x(this,Br)),x(this,Cr)&&je.skip_effect(x(this,Cr)),x(this,Kr)&&je.skip_effect(x(this,Kr)),je.oncommit(()=>{nt(this,jt,Gi).call(this,e)})):nt(this,jt,Gi).call(this,e)}}Zr=new WeakMap,Qi=new WeakMap,Xr=new WeakMap,os=new WeakMap,qr=new WeakMap,Br=new WeakMap,Cr=new WeakMap,Kr=new WeakMap,ka=new WeakMap,ls=new WeakMap,$a=new WeakMap,Is=new WeakMap,fn=new WeakMap,pn=new WeakMap,za=new WeakMap,li=new WeakMap,jt=new WeakSet,od=function(){try{Oe(this,Br,Rr(()=>x(this,os).call(this,x(this,Zr))))}catch(e){this.error(e)}},ld=function(e){const a=x(this,Xr).failed,{reset:s,invoke_onerror:n}=nt(this,jt,Vi).call(this,e);ea(n),a&&Oe(this,Kr,Rr(()=>{a(x(this,Zr),()=>e,()=>s)}))},Vi=function(e){var a=!1,s=!1;const n=()=>{if(a){tu();return}a=!0,s&&pu(),x(this,Kr)!==null&&us(x(this,Kr),()=>{Oe(this,Kr,null)}),nt(this,jt,$n).call(this,()=>{nt(this,jt,Wi).call(this)})};return{reset:n,invoke_onerror:()=>{var c,l;try{s=!0,(l=(c=x(this,Xr)).onerror)==null||l.call(c,e,n),s=!1}catch(d){xa(d,x(this,qr)&&x(this,qr).parent)}}}},cd=function(){const e=x(this,Xr).pending;e&&(this.is_pending=!0,Oe(this,Cr,Rr(()=>e(x(this,Zr)))),ea(()=>{var a=Oe(this,ka,document.createDocumentFragment()),s=ha(),n=!1;if(a.append(s),Oe(this,Br,nt(this,jt,$n).call(this,()=>{try{return Rr(()=>x(this,os).call(this,s))}catch(i){try{this.error(i),n=!0}catch(c){xa(c,x(this,qr).parent)}return null}})),x(this,Br)===null){Oe(this,ka,null),n&&nt(this,jt,rn).call(this,je);return}x(this,$a)===0&&(x(this,Zr).before(a),Oe(this,ka,null),us(x(this,Cr),()=>{Oe(this,Cr,null)}),nt(this,jt,rn).call(this,je))}))},Wi=function(){try{if(this.is_pending=this.has_pending_snippet(),Oe(this,$a,0),Oe(this,ls,0),Oe(this,Br,Rr(()=>{x(this,os).call(this,x(this,Zr))})),x(this,$a)>0){var e=Oe(this,ka,document.createDocumentFragment());ho(x(this,Br),e);const a=x(this,Xr).pending;Oe(this,Cr,Rr(()=>a(x(this,Zr))))}else nt(this,jt,rn).call(this,je)}catch(a){this.error(a)}},rn=function(e){this.is_pending=!1,e.transfer_effects(x(this,fn),x(this,pn))},$n=function(e){var a=Xe,s=et,n=Rt;Ca(x(this,qr)),aa(x(this,qr)),Ns(x(this,qr).ctx);try{return ps.ensure(),e()}finally{Ca(a),aa(s),Ns(n)}},$i=function(e,a){var s;if(!this.has_pending_snippet()){this.parent&&nt(s=this.parent,jt,$i).call(s,e,a);return}Oe(this,$a,x(this,$a)+e),x(this,$a)===0&&(nt(this,jt,rn).call(this,a),x(this,Cr)&&us(x(this,Cr),()=>{Oe(this,Cr,null)}),x(this,ka)&&(x(this,Zr).before(x(this,ka)),Oe(this,ka,null)))},Gi=function(e){x(this,Br)&&(ur(x(this,Br)),Oe(this,Br,null)),x(this,Cr)&&(ur(x(this,Cr)),Oe(this,Cr,null)),x(this,Kr)&&(ur(x(this,Kr)),Oe(this,Kr,null));let a=x(this,Xr).failed;const s=n=>{const{reset:i,invoke_onerror:c}=nt(this,jt,Vi).call(this,n);c(),a&&Oe(this,Kr,nt(this,jt,$n).call(this,()=>{try{return Rr(()=>{var l=Xe;l.b=this,l.f|=Mi,a(x(this,Zr),()=>n,()=>i)})}catch(l){return xa(l,x(this,qr).parent),null}}))};ea(()=>{var n;try{n=this.transform_error(e)}catch(i){xa(i,x(this,qr)&&x(this,qr).parent);return}n!==null&&typeof n=="object"&&typeof n.then=="function"?n.then(s,i=>xa(i,x(this,qr)&&x(this,qr).parent)):s(n)})};function h(r,e){var a=e==null?"":typeof e=="object"?`${e}`:e;a!==(r[Xs]??(r[Xs]=r.nodeValue))&&(r[Xs]=a,r.nodeValue=`${a}`)}function ud(r,e){return dd(r,e)}const Hn=new Map;function dd(r,{target:e,anchor:a,props:s={},events:n,context:i,intro:c=!0,transformError:l}){Nu();var d=void 0,v=Uu(()=>{var p=a??e.appendChild(ha());nd(p,{pending:()=>{}},S=>{Tt({});var j=Rt;i&&(j.c=i),n&&(s.$$events=n),d=r(S,s)||so(),It()},l);var _=new Set,w=S=>{for(var j=0;j<S.length;j++){var C=S[j];if(!_.has(C)){_.add(C);var q=Qu(C);for(const A of[e,document]){var b=Hn.get(A);b===void 0&&(b=new Map,Hn.set(A,b));var I=b.get(C);I===void 0?(A.addEventListener(C,Fi,{passive:q}),b.set(C,1)):b.set(C,I+1)}}}};return w(di(Wl)),Ki.add(w),()=>{var q;for(var S of _)for(const b of[e,document]){var j=Hn.get(b),C=j.get(S);--C==0?(b.removeEventListener(S,Fi),j.delete(S),j.size===0&&Hn.delete(b)):j.set(S,C)}Ki.delete(w),p!==a&&((q=p.parentNode)==null||q.removeChild(p))}});return vd.set(d,v),d}let vd=new WeakMap;var da,Sa,Fr,cs,hn,gn,ci;class hi{constructor(e,a=!0){Lt(this,"anchor");xe(this,da,new Map);xe(this,Sa,new Map);xe(this,Fr,new Map);xe(this,cs,new Set);xe(this,hn,!0);xe(this,gn,e=>{if(x(this,da).has(e)){var a=x(this,da).get(e),s=x(this,Sa).get(a);if(s)si(s),x(this,cs).delete(a);else{var n=x(this,Fr).get(a);n&&(si(n.effect),x(this,Sa).set(a,n.effect),x(this,Fr).delete(a),n.fragment.lastChild.remove(),this.anchor.before(n.fragment),s=n.effect)}for(const[i,c]of x(this,da)){if(x(this,da).delete(i),i===e)break;const l=x(this,Fr).get(c);l&&(ur(l.effect),x(this,Fr).delete(c))}for(const[i,c]of x(this,Sa)){if(i===a||x(this,cs).has(i))continue;const l=()=>{if(Array.from(x(this,da).values()).includes(i)){var v=document.createDocumentFragment();ho(c,v),v.append(ha()),x(this,Fr).set(i,{effect:c,fragment:v})}else ur(c);x(this,cs).delete(i),x(this,Sa).delete(i)};x(this,hn)||!s?(x(this,cs).add(i),us(c,l,!1)):l()}}});xe(this,ci,e=>{x(this,da).delete(e);const a=Array.from(x(this,da).values());for(const[s,n]of x(this,Fr))a.includes(s)||(ur(n.effect),x(this,Fr).delete(s))});this.anchor=e,Oe(this,hn,a)}ensure(e,a){var s=je,n=Al();if(a&&!x(this,Sa).has(e)&&!x(this,Fr).has(e))if(n){var i=document.createDocumentFragment(),c=ha();i.append(c),x(this,Fr).set(e,{effect:Rr(()=>a(c)),fragment:i})}else x(this,Sa).set(e,Rr(()=>a(this.anchor)));if(x(this,da).set(s,e),n){for(const[l,d]of x(this,Sa))l===e?s.unskip_effect(d):s.skip_effect(d);for(const[l,d]of x(this,Fr))l===e?s.unskip_effect(d.effect):s.skip_effect(d.effect);s.oncommit(x(this,gn)),s.ondiscard(x(this,ci))}else x(this,gn).call(this,s)}}da=new WeakMap,Sa=new WeakMap,Fr=new WeakMap,cs=new WeakMap,hn=new WeakMap,gn=new WeakMap,ci=new WeakMap;function D(r,e,a=!1){var s=new hi(r),n=a?Za:0;function i(c,l){s.ensure(c,l)}ys(()=>{var c=!1;e((l,d=0)=>{c=!0,i(d,l)}),c||i(-1,null)},n)}const fd=Symbol("NaN");function Va(r,e,a){var s=new hi(r),n=!Bs();ys(()=>{var i=e();i!==i&&(i=fd),n&&i!==null&&typeof i=="object"&&(i={}),s.ensure(i,a)})}function Ht(r,e){return e}function pd(r,e,a){for(var s=[],n=e.length,i,c=e.length,l=0;l<n;l++){let _=e[l];us(_,()=>{if(i){if(i.pending.delete(_),i.done.add(_),i.pending.size===0){var w=r.outrogroups;Yi(r,di(i.done)),w.delete(i),w.size===0&&(r.outrogroups=null)}}else c-=1},!1)}if(c===0){var d=s.length===0&&a!==null&&r.pending.size===0;if(d){var v=a,p=v.parentNode;Du(p),p.append(v),r.items.clear()}Yi(r,e,!d)}else i={pending:new Set(e),done:new Set},(r.outrogroups??(r.outrogroups=new Set)).add(i)}function Yi(r,e,a=!0){var s;if(r.pending.size>0){s=new Set;for(const c of r.pending.values())for(const l of c)s.add(r.items.get(l).e)}for(var n=0;n<e.length;n++){var i=e[n];if(s!=null&&s.has(i)){i.f|=ja;const c=document.createDocumentFragment();ho(i,c)}else ur(e[n],a)}}var No;function He(r,e,a,s,n,i=null){var c=r,l=new Map,d=(e&cl)!==0;if(d){var v=r;c=v.appendChild(ha())}var p=null,_=oo(()=>{var A=a();return ui(A)?A:A==null?[]:di(A)}),w,S=new Map,j=!0;function C(A){(I.effect.f&Mr)===0&&(I.pending.delete(A),I.fallback=p,hd(I,w,c,e,s),p!==null&&(w.length===0?(p.f&ja)===0?si(p):(p.f^=ja,an(p,null,c)):us(p,()=>{p=null})))}function q(A){I.pending.delete(A)}var b=ys(()=>{w=t(_);for(var A=w.length,L=new Set,P=je,W=Al(),O=0;O<A;O+=1){var Z=w[O],ae=s(Z,O),Y=j?null:l.get(ae);Y?(Y.v&&Ds(Y.v,Z),Y.i&&Ds(Y.i,O),W&&P.unskip_effect(Y.e)):(Y=gd(l,j?c:No??(No=ha()),Z,ae,O,n,e,a),j||(Y.e.f|=ja),l.set(ae,Y)),L.add(ae)}if(A===0&&i&&!p&&(j?p=Rr(()=>i(c)):(p=Rr(()=>i(No??(No=ha()))),p.f|=ja)),A>L.size&&nu(),!j)if(S.set(P,L),W){for(const[$,X]of l)L.has($)||P.skip_effect(X.e);P.oncommit(C),P.ondiscard(q)}else C(P);t(_)}),I={effect:b,items:l,pending:S,outrogroups:null,fallback:p};j=!1}function $s(r){for(;r!==null&&(r.f&ra)===0;)r=r.next;return r}function hd(r,e,a,s,n){var Y,$,X,T,se,B,K,re,ee;var i=(s&Bc)!==0,c=e.length,l=r.items,d=$s(r.effect.first),v,p=null,_,w=[],S=[],j,C,q,b;if(i)for(b=0;b<c;b+=1)j=e[b],C=n(j,b),q=l.get(C).e,(q.f&ja)===0&&(($=(Y=q.nodes)==null?void 0:Y.a)==null||$.measure(),(_??(_=new Set)).add(q));for(b=0;b<c;b+=1){if(j=e[b],C=n(j,b),q=l.get(C).e,r.outrogroups!==null)for(const oe of r.outrogroups)oe.pending.delete(q),oe.done.delete(q);if((q.f&Ar)!==0&&(si(q),i&&((T=(X=q.nodes)==null?void 0:X.a)==null||T.unfix(),(_??(_=new Set)).delete(q))),(q.f&ja)!==0)if(q.f^=ja,q===d)an(q,null,a);else{var I=p?p.next:d;q===r.effect.last&&(r.effect.last=q.prev),q.prev&&(q.prev.next=q.next),q.next&&(q.next.prev=q.prev),Fa(r,p,q),Fa(r,q,I),an(q,I,a),p=q,w=[],S=[],d=$s(p.next);continue}if(q!==d){if(v!==void 0&&v.has(q)){if(w.length<S.length){var A=S[0],L;p=A.prev;var P=w[0],W=w[w.length-1];for(L=0;L<w.length;L+=1)an(w[L],A,a);for(L=0;L<S.length;L+=1)v.delete(S[L]);Fa(r,P.prev,W.next),Fa(r,p,P),Fa(r,W,A),d=A,p=W,b-=1,w=[],S=[]}else v.delete(q),an(q,d,a),Fa(r,q.prev,q.next),Fa(r,q,p===null?r.effect.first:p.next),Fa(r,p,q),p=q;continue}for(w=[],S=[];d!==null&&d!==q;)(v??(v=new Set)).add(d),S.push(d),d=$s(d.next);if(d===null)continue}(q.f&ja)===0&&w.push(q),p=q,d=$s(q.next)}if(r.outrogroups!==null){for(const oe of r.outrogroups)oe.pending.size===0&&(Yi(r,di(oe.done)),(se=r.outrogroups)==null||se.delete(oe));r.outrogroups.size===0&&(r.outrogroups=null)}if(d!==null||v!==void 0){var O=[];if(v!==void 0)for(q of v)(q.f&Ar)===0&&O.push(q);for(;d!==null;)(d.f&Ar)===0&&d!==r.fallback&&O.push(d),d=$s(d.next);var Z=O.length;if(Z>0){var ae=(s&cl)!==0&&c===0?a:null;if(i){for(b=0;b<Z;b+=1)(K=(B=O[b].nodes)==null?void 0:B.a)==null||K.measure();for(b=0;b<Z;b+=1)(ee=(re=O[b].nodes)==null?void 0:re.a)==null||ee.fix()}pd(r,O,ae)}}i&&ea(()=>{var oe,U;if(_!==void 0)for(q of _)(U=(oe=q.nodes)==null?void 0:oe.a)==null||U.apply()})}function gd(r,e,a,s,n,i,c,l){var d=(c&Uc)!==0?(c&Kc)===0?Tu(a,!1,!1):hs(a):null,v=(c&Hc)!==0?hs(n):null;return{v:d,i:v,e:Rr(()=>(i(e,d??a,v??n,l),()=>{r.delete(s)}))}}function an(r,e,a){if(r.nodes)for(var s=r.nodes.start,n=r.nodes.end,i=e&&(e.f&ja)===0?e.nodes.start:a;s!==null;){var c=An(s);if(i.before(s),s===n)return;s=c}}function Fa(r,e,a){e===null?r.effect.first=a:e.next=a,a===null?r.effect.last=e:a.prev=e}function md(r,e,...a){var s=new hi(r);ys(()=>{const n=e()??null;s.ensure(n,n&&(i=>n(i,...a)))},Za)}function _d(r,e,a,s,n,i){var c=null,l=r,d=new hi(l,!1);ys(()=>{const v=e()||null;var p=Zc;if(v===null){d.ensure(null,null);return}return d.ensure(v,_=>{if(v){if(c=Ll(v,p),zs(c,c),s){var w=null,S=c.appendChild(ha());s(c,S),w==null||w.remove()}Xe.nodes.end=c,_.before(c)}}),()=>{}},Za),Ln(()=>{})}function yd(r,e){var a;a=document.head.appendChild(ha());try{ys(()=>{var s=Rr(()=>e(a));s.f|=il,ru||(s.nodes===null?s.nodes={start:a,end:a,a:null,t:null}:s.nodes.end=a)})}finally{}}function _s(r,e,a){Tn(()=>{var s=Pa(()=>e(r,a==null?void 0:a())||{});if(s!=null&&s.destroy)return()=>s.destroy()})}function bd(r,e){var a=void 0,s;Il(()=>{a!==(a=e())&&(s&&(ur(s),s=null),a&&(s=Rr(()=>{Tn(()=>a(r))})))})}function Yl(r){var e,a,s="";if(typeof r=="string"||typeof r=="number")s+=r;else if(typeof r=="object")if(Array.isArray(r)){var n=r.length;for(e=0;e<n;e++)r[e]&&(a=Yl(r[e]))&&(s&&(s+=" "),s+=a)}else for(a in r)r[a]&&(s&&(s+=" "),s+=a);return s}function wd(){for(var r,e,a=0,s="",n=arguments.length;a<n;a++)(r=arguments[a])&&(e=Yl(r))&&(s&&(s+=" "),s+=e);return s}function Jl(r){return typeof r=="object"?wd(r):r??""}const Do=[...`
2
+ \r\f \v\uFEFF`];function kd(r,e,a){var s=r==null?"":""+r;if(e&&(s=s?s+" "+e:e),a){for(var n of Object.keys(a))if(a[n])s=s?s+" "+n:n;else if(s.length)for(var i=n.length,c=0;(c=s.indexOf(n,c))>=0;){var l=c+i;(c===0||Do.includes(s[c-1]))&&(l===s.length||Do.includes(s[l]))?s=(c===0?"":s.substring(0,c))+s.substring(l+1):c=l}}return s===""?null:s}function Mo(r,e=!1){var a=e?" !important;":";",s="";for(var n of Object.keys(r)){var i=r[n];i!=null&&i!==""&&(s+=" "+n+": "+i+a)}return s}function qi(r){return r[0]!=="-"||r[1]!=="-"?r.toLowerCase():r}function Sd(r,e){if(e){var a="",s,n;if(Array.isArray(e)?(s=e[0],n=e[1]):s=e,r){r=String(r).replaceAll(/\/\*.*?\*\//g,"").trim();var i=!1,c=0,l=!1,d=[];s&&d.push(...Object.keys(s).map(qi)),n&&d.push(...Object.keys(n).map(qi));var v=0,p=-1;const C=r.length;for(var _=0;_<C;_++){var w=r[_];if(l?w==="/"&&r[_-1]==="*"&&(l=!1):i?i===w&&(i=!1):w==="/"&&r[_+1]==="*"?l=!0:w==='"'||w==="'"?i=w:w==="("?c++:w===")"&&c--,!l&&i===!1&&c===0){if(w===":"&&p===-1)p=_;else if(w===";"||_===C-1){if(p!==-1){var S=qi(r.substring(v,p).trim());if(!d.includes(S)){w!==";"&&_++;var j=r.substring(v,_).trim();a+=" "+j+";"}}v=_+1,p=-1}}}}return s&&(a+=Mo(s)),n&&(a+=Mo(n,!0)),a=a.trim(),a===""?null:a}return r==null?null:String(r)}function it(r,e,a,s,n,i){var c=r[zi];if(c!==a||c===void 0){var l=kd(a,s,i);l==null?r.removeAttribute("class"):e?r.className=l:r.setAttribute("class",l),r[zi]=a}else if(i&&n!==i)for(var d in i){var v=!!i[d];(n==null||v!==!!n[d])&&r.classList.toggle(d,v)}return i}function Ci(r,e={},a,s){for(var n in a){var i=a[n];e[n]!==i&&(a[n]==null?r.style.removeProperty(n):r.style.setProperty(n,i,s))}}function mo(r,e,a,s){var n=r[Oi];if(n!==e){var i=Sd(e,s);i==null?r.removeAttribute("style"):r.style.cssText=i,r[Oi]=e}else s&&(Array.isArray(s)?(Ci(r,a==null?void 0:a[0],s[0]),Ci(r,a==null?void 0:a[1],s[1],"important")):Ci(r,a,s));return s}function Zl(r,e){e?r.hasAttribute("selected")||r.setAttribute("selected",""):r.removeAttribute("selected")}function zo(r,e){var a=!("__defaultValue"in r);!a&&r.__defaultValue===e||(r.__defaultValue=e,Xl(r,!a||"__value"in r))}function Xl(r,e){var a=r.__defaultValue,s=r.multiple,n=s?a??[]:null;if(!(s&&!ui(n))){var i=r.selectedIndex,c=e&&s?new Set(r.selectedOptions):null;for(var l of r.options){var d=Es(l);Zl(l,s?n.includes(d):vo(d,a))}if(e)if(c!==null)for(l of r.options){var v=c.has(l);l.selected!==v&&(l.selected=v)}else r.selectedIndex!==i&&(r.selectedIndex=i)}}function dn(r,e,a=!1){if(r.multiple){if(e==null)return;if(!ui(e))return eu();for(var s of r.options)s.selected=e.includes(Es(s));return}for(s of r.options){var n=Es(s);if(vo(n,e)){s.selected=!0;return}}(!a||e!==void 0)&&(r.selectedIndex=-1)}function gi(r){var e=new MutationObserver(a=>{a.every(xd)||("__defaultValue"in r&&Xl(r,!1),"__value"in r&&dn(r,r.__value))});e.observe(r,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),Ln(()=>{e.disconnect()})}function Ql(r,e,a=e){var s=new WeakSet,n=!0;pi(r,"change",i=>{var c=i?"[selected]":":checked",l;if(r.multiple)l=[].map.call(r.querySelectorAll(c),Es);else{var d=r.querySelector(c)??r.querySelector("option:not([disabled])");l=d&&Es(d)}a(l),r.__value=l,je!==null&&s.add(je)}),Tn(()=>{var i=e();if(r===document.activeElement){var c=je;if(s.has(c))return}if(dn(r,i,n),n&&i===void 0){var l=r.querySelector(":checked");l!==null&&(i=Es(l),a(i))}r.__value=i,n=!1})}function Es(r){return"__value"in r?r.__value:r.value}function xd(r){if(r.target.closest("selectedcontent")!==null)return!0;if(r.type==="childList"){var e=[...r.addedNodes,...r.removedNodes];return e.length>0&&e.every(a=>a.nodeName==="SELECTEDCONTENT")}return!1}const Gs=Symbol("class"),Ys=Symbol("style"),ec=Symbol("is custom element"),tc=Symbol("is html"),jd=fi?"input":"INPUT",Ed=fi?"option":"OPTION",rc=fi?"select":"SELECT",qd=fi?"progress":"PROGRESS";function Cd(r,e){var a=mi(r);a.value===(a.value=e??void 0)||r.value===e&&(e!==0||r.nodeName!==qd)||(r.value=e??"")}function qs(r,e){var a=mi(r);a.checked!==(a.checked=e??void 0)&&(r.checked=e)}function V(r,e,a,s){var n=mi(r);n[e]!==(n[e]=a)&&(e==="loading"&&(r[Oc]=a),a==null?r.removeAttribute(e):typeof a!="string"&&ac(r).has(e)?r[e]=a:r.setAttribute(e,a))}function Pd(r,e,a,s,n=!1,i=!1){var c=mi(r),l=c[ec],d=!c[tc],v=e||{},p=r.nodeName===Ed,_=r.nodeName===rc;for(var w in e)!(w in a)&&w[0]+w[1]!=="$$"&&(a[w]=null);a.class?a.class=Jl(a.class):a[Gs]&&(a.class=null),a[Ys]&&(a.style??(a.style=null));var S=ac(r);if(r.nodeName===jd&&"type"in a&&("value"in a||"__value"in a)){var j=a.type;(j!==v.type||j===void 0&&r.hasAttribute("type"))&&(v.type=j,V(r,"type",j))}for(const W in a){let O=a[W];if(p&&W==="value"&&O==null){r.value=r.__value="",v[W]=O;continue}if(W==="class"){var C=r.namespaceURI==="http://www.w3.org/1999/xhtml";it(r,C,O,s,e==null?void 0:e[Gs],a[Gs]),v[W]=O,v[Gs]=a[Gs];continue}if(W==="style"){mo(r,O,e==null?void 0:e[Ys],a[Ys]),v[W]=O,v[Ys]=a[Ys];continue}var q=v[W];if(!(O===q&&!(O===void 0&&r.hasAttribute(W)))){v[W]=O;var b=W[0]+W[1];if(b!=="$$")if(b==="on"){const Z={},ae="$$"+W;let Y=W.slice(2);var I=Yu(Y);if($u(Y)&&(Y=Y.slice(0,-7),Z.capture=!0),!I&&q){if(O!=null)continue;r.removeEventListener(Y,v[ae],Z),v[ae]=null}if(I)Q(Y,r,O),er([Y]);else if(O!=null){let $=function(X){v[W].call(this,X)};var P=$;v[ae]=$l(Y,r,$,Z)}}else if(W==="style")V(r,W,O);else if(W==="autofocus")Su(r,!!O);else if(!l&&(W==="__value"||W==="value"&&O!=null))r.value=r.__value=O;else if(W==="selected"&&p)Zl(r,O);else{var A=W;d||(A=Zu(A));var L=A==="defaultValue"||A==="defaultChecked";if(_&&A==="defaultValue")continue;if(O==null&&!l&&!L)if(c[W]=null,A==="value"||A==="checked"){let Z=r;const ae=e===void 0;if(A==="value"){let Y=Z.defaultValue;Z.removeAttribute(A),Z.defaultValue=Y,Z.value=Z.__value=ae?Y:null}else{let Y=Z.defaultChecked;Z.removeAttribute(A),Z.defaultChecked=Y,Z.checked=ae?Y:!1}}else r.removeAttribute(W);else L||(l||typeof O!="string")&&S.has(A)?(r[A]=O,A in c&&(c[A]=$t)):typeof O!="function"&&V(r,A,O)}}}return v}function Oo(r,e,a=[],s=[],n=[],i,c=!1,l=!1){io(n,a,s,d=>{var v=void 0,p={},_=r.nodeName===rc,w=!1;if(Il(()=>{var j=e(...d.map(t)),C=Pd(r,v,j,i,c,l);if(w&&_){var q=r;"defaultValue"in j&&zo(q,j.defaultValue),"value"in j&&dn(q,j.value)}for(let I of Object.getOwnPropertySymbols(p))j[I]||ur(p[I]);for(let I of Object.getOwnPropertySymbols(j)){var b=j[I];I.description===Xc&&(!v||b!==v[I])&&(p[I]&&ur(p[I]),p[I]=Rr(()=>bd(r,()=>b))),C[I]=b}v=C}),_){var S=r;Tn(()=>{var j=v;"defaultValue"in j&&zo(S,j.defaultValue),dn(S,j.value,!0),gi(S)})}w=!0})}function mi(r){return r[Kn]??(r[Kn]={[ec]:r.nodeName.includes("-"),[tc]:r.namespaceURI===ul})}var Uo=new Map;function ac(r){var e=r.getAttribute("is")||r.nodeName,a=Uo.get(e);if(a)return a;Uo.set(e,a=new Set);for(var s,n=r,i=Element.prototype;i!==n;){s=Ic(n);for(var c in s)s[c].set&&c!=="innerHTML"&&c!=="textContent"&&c!=="innerText"&&a.add(c);n=sl(n)}return a}function Gt(r,e,a=e){var s=new WeakSet;pi(r,"input",async n=>{var i=n?r.defaultValue:r.value;if(i=Ri(r)?Ai(i):i,a(i),je!==null&&s.add(je),await ms(),i!==(i=e())){var c=r.selectionStart,l=r.selectionEnd,d=r.value.length;if(r.value=i??"",l!==null){var v=r.value.length;c===l&&l===d&&v>d?(r.selectionStart=v,r.selectionEnd=v):(r.selectionStart=c,r.selectionEnd=Math.min(l,v))}}}),Pa(e)==null&&r.value&&(a(Ri(r)?Ai(r.value):r.value),je!==null&&s.add(je)),In(()=>{var n=e();if(r===document.activeElement){var i=je;if(s.has(i))return}Ri(r)&&n===Ai(r.value)||r.type==="date"&&!n&&!r.value||n!==r.value&&(r.value=n??"")})}const Pi=new Set;function Rd(r,e,a,s,n=s){var i=a.getAttribute("type")==="checkbox",c=r;if(e!==null)for(var l of e)c=c[l]??(c[l]=[]);c.push(a),pi(a,"change",()=>{var d=a.__value;i&&(d=Ld(c,d,a.checked)),n(d)},()=>n(i?[]:null)),In(()=>{var d=s();i?(d=d||[],a.checked=d.includes(a.__value)):a.checked=vo(a.__value,d)}),Ln(()=>{var d=c.indexOf(a);d!==-1&&c.splice(d,1)}),Pi.has(c)||(Pi.add(c),ea(()=>{c.sort((d,v)=>d.compareDocumentPosition(v)===4?-1:1),Pi.delete(c)})),ea(()=>{})}function Ad(r,e,a=e){pi(r,"change",s=>{var n=s?r.defaultChecked:r.checked;a(n)}),Pa(e)==null&&a(r.checked),In(()=>{var s=e();r.checked=!!s})}function Ld(r,e,a){for(var s=new Set,n=0;n<r.length;n+=1)r[n].checked&&s.add(r[n].__value);return a||s.delete(e),Array.from(s)}function Ri(r){var e=r.type;return e==="number"||e==="range"}function Ai(r){return r===""?null:+r}function Li(r,e){return r===e||(r==null?void 0:r[Ja])===e}function Xa(r=so(),e,a,s){var n=Rt.r,i=Xe;return Tn(()=>{var c,l;return In(()=>{c=l,l=[],Pa(()=>{Li(a(...l),r)||(e(r,...l),c&&Li(a(...c),r)&&e(null,...c))})}),()=>{let d=i;for(;d!==n&&d.parent!==null&&d.parent.f&Xn;)d=d.parent;const v=()=>{l&&Li(a(...l),r)&&e(null,...l)},p=d.teardown;d.teardown=()=>{v(),p==null||p()}}}),r}const Td={get(r,e){if(!r.exclude.has(e))return r.props[e]},set(r,e){return!1},getOwnPropertyDescriptor(r,e){if(!r.exclude.has(e)&&e in r.props)return{enumerable:!0,configurable:!0,value:r.props[e]}},has(r,e){return r.exclude.has(e)?!1:e in r.props},ownKeys(r){return Reflect.ownKeys(r.props).filter(e=>!r.exclude.has(e))}};function dt(r,e,a){return new Proxy({props:r,exclude:e},Td)}const Id={get(r,e){let a=r.props.length;for(;a--;){let s=r.props[a];if(Ws(s)&&(s=s()),typeof s=="object"&&s!==null&&e in s)return s[e]}},set(r,e,a){let s=r.props.length;for(;s--;){let n=r.props[s];Ws(n)&&(n=n());const i=Ga(n,e);if(i&&i.set)return i.set(a),!0}return!1},getOwnPropertyDescriptor(r,e){let a=r.props.length;for(;a--;){let s=r.props[a];if(Ws(s)&&(s=s()),typeof s=="object"&&s!==null&&e in s){const n=Ga(s,e);return n&&!n.configurable&&(n.configurable=!0),n}}},has(r,e){if(e===Ja||e===ll)return!1;for(let a of r.props)if(Ws(a)&&(a=a()),a!=null&&e in a)return!0;return!1},ownKeys(r){const e=[];for(let a of r.props)if(Ws(a)&&(a=a()),!!a){for(const s in a)e.includes(s)||e.push(s);for(const s of Object.getOwnPropertySymbols(a))e.includes(s)||e.push(s)}return e}};function ft(...r){return new Proxy({props:r},Id)}function Re(r,e,a,s){var L;var n=!Hs||(a&Vc)!==0,i=(a&$c)!==0,c=(a&Gc)!==0,l=s,d=!0,v=void 0,p=()=>c&&n?(v??(v=cn(s)),t(v)):(d&&(d=!1,l=c?Pa(s):s),l);let _;if(i){var w=Ja in r||ll in r;_=((L=Ga(r,e))==null?void 0:L.set)??(w&&e in r?P=>r[e]=P:void 0)}var S,j=!1;i?[S,j]=ku(()=>r[e]):S=r[e],S===void 0&&s!==void 0&&(S=p(),_&&(n&&uu(),_(S)));var C;if(n?C=()=>{var P=r[e];return P===void 0?p():(d=!0,P)}:C=()=>{var P=r[e];return P!==void 0&&(l=void 0),P===void 0?l:P},n&&(a&Wc)===0)return C;if(_){var q=r.$$legacy;return(function(P,W){return arguments.length>0?((!n||!W||q||j)&&_(W?C():P),P):C()})}var b=!1,I=((a&Fc)!==0?cn:oo)(()=>(b=!1,C()));i&&t(I);var A=Xe;return(function(P,W){if(arguments.length>0){const O=W?t(I):n&&i?at(P):P;return u(I,O),b=!0,l!==void 0&&(l=O),P}return Ha&&b||(A.f&Mr)!==0?I.v:t(I)})}function Dn(r){Rt===null&&ao(),Hs&&Rt.l!==null?Dd(Rt).m.push(r):yr(()=>{const e=Pa(r);if(typeof e=="function")return e})}function Nd(r){Rt===null&&ao(),Dn(()=>()=>Pa(r))}function Dd(r){var e=r.l;return e.u??(e.u={a:[],b:[],m:[]})}const Md="5";var tl;typeof window<"u"&&((tl=window.__svelte??(window.__svelte={})).v??(tl.v=new Set)).add(Md);/**
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 zd={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 Od=r=>{for(const e in r)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 Ud=Symbol("lucide-context"),Hd=()=>yu(Ud);var Bd=new Set(["$$slots","$$events","$$legacy","name","color","size","strokeWidth","absoluteStrokeWidth","iconNode","children"]),Kd=rd("<svg><!><!></svg>");function pt(r,e){Tt(e,!0);const a=Hd()??{},s=Re(e,"color",19,()=>a.color??"currentColor"),n=Re(e,"size",19,()=>a.size??24),i=Re(e,"strokeWidth",19,()=>a.strokeWidth??2),c=Re(e,"absoluteStrokeWidth",19,()=>a.absoluteStrokeWidth??!1),l=Re(e,"iconNode",19,()=>[]),d=dt(e,Bd),v=F(()=>c()?Number(i())*24/Number(n()):i());var p=Kd();Oo(p,S=>({...zd,...S,...d,width:n(),height:n(),stroke:s(),"stroke-width":t(v),class:["lucide-icon lucide",a.class,e.name&&`lucide-${e.name}`,e.class]}),[()=>!e.children&&!Od(d)&&{"aria-hidden":"true"}]);var _=f(p);He(_,17,l,Ht,(S,j)=>{var C=F(()=>eo(t(j),2));let q=()=>t(C)[0],b=()=>t(C)[1];var I=Qr(),A=Ye(I);_d(A,q,!0,(L,P)=>{Oo(L,()=>({...b()}))}),g(S,I)});var w=o(_);md(w,()=>e.children??Oa),g(r,p),It()}var Fd=new Set(["$$slots","$$events","$$legacy"]);function Vd(r,e){let a=dt(e,Fd);const s=[["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"}]];pt(r,ft({name:"activity"},()=>a,{get iconNode(){return s}}))}var Wd=new Set(["$$slots","$$events","$$legacy"]);function $d(r,e){let a=dt(e,Wd);const s=[["path",{d:"M12 5v14"}],["path",{d:"m19 12-7 7-7-7"}]];pt(r,ft({name:"arrow-down"},()=>a,{get iconNode(){return s}}))}var Gd=new Set(["$$slots","$$events","$$legacy"]);function sc(r,e){let a=dt(e,Gd);const s=[["path",{d:"M7 7h10v10"}],["path",{d:"M7 17 17 7"}]];pt(r,ft({name:"arrow-up-right"},()=>a,{get iconNode(){return s}}))}var Yd=new Set(["$$slots","$$events","$$legacy"]);function _i(r,e){let a=dt(e,Yd);const s=[["path",{d:"M20 6 9 17l-5-5"}]];pt(r,ft({name:"check"},()=>a,{get iconNode(){return s}}))}var Jd=new Set(["$$slots","$$events","$$legacy"]);function ni(r,e){let a=dt(e,Jd);const s=[["path",{d:"m6 9 6 6 6-6"}]];pt(r,ft({name:"chevron-down"},()=>a,{get iconNode(){return s}}))}var Zd=new Set(["$$slots","$$events","$$legacy"]);function Xd(r,e){let a=dt(e,Zd);const s=[["path",{d:"m16 18 6-6-6-6"}],["path",{d:"m8 6-6 6 6 6"}]];pt(r,ft({name:"code"},()=>a,{get iconNode(){return s}}))}var Qd=new Set(["$$slots","$$events","$$legacy"]);function Mn(r,e){let a=dt(e,Qd);const s=[["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"}]];pt(r,ft({name:"copy"},()=>a,{get iconNode(){return s}}))}var ev=new Set(["$$slots","$$events","$$legacy"]);function tv(r,e){let a=dt(e,ev);const s=[["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"}]];pt(r,ft({name:"database"},()=>a,{get iconNode(){return s}}))}var rv=new Set(["$$slots","$$events","$$legacy"]);function av(r,e){let a=dt(e,rv);const s=[["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"}]];pt(r,ft({name:"file-text"},()=>a,{get iconNode(){return s}}))}var sv=new Set(["$$slots","$$events","$$legacy"]);function Ho(r,e){let a=dt(e,sv);const s=[["path",{d:"M15 6a9 9 0 0 0-9 9V3"}],["circle",{cx:"18",cy:"6",r:"3"}],["circle",{cx:"6",cy:"18",r:"3"}]];pt(r,ft({name:"git-branch"},()=>a,{get iconNode(){return s}}))}var nv=new Set(["$$slots","$$events","$$legacy"]);function iv(r,e){let a=dt(e,nv);const s=[["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"}]];pt(r,ft({name:"globe"},()=>a,{get iconNode(){return s}}))}var ov=new Set(["$$slots","$$events","$$legacy"]);function lv(r,e){let a=dt(e,ov);const s=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M12 16v-4"}],["path",{d:"M12 8h.01"}]];pt(r,ft({name:"info"},()=>a,{get iconNode(){return s}}))}var cv=new Set(["$$slots","$$events","$$legacy"]);function uv(r,e){let a=dt(e,cv);const s=[["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"}]];pt(r,ft({name:"key-round"},()=>a,{get iconNode(){return s}}))}var dv=new Set(["$$slots","$$events","$$legacy"]);function vv(r,e){let a=dt(e,dv);const s=[["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"}]];pt(r,ft({name:"link"},()=>a,{get iconNode(){return s}}))}var fv=new Set(["$$slots","$$events","$$legacy"]);function pv(r,e){let a=dt(e,fv);const s=[["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"}]];pt(r,ft({name:"list"},()=>a,{get iconNode(){return s}}))}var hv=new Set(["$$slots","$$events","$$legacy"]);function gv(r,e){let a=dt(e,hv);const s=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56"}]];pt(r,ft({name:"loader-circle"},()=>a,{get iconNode(){return s}}))}var mv=new Set(["$$slots","$$events","$$legacy"]);function _v(r,e){let a=dt(e,mv);const s=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M9 3v18"}],["path",{d:"m16 15-3-3 3-3"}]];pt(r,ft({name:"panel-left-close"},()=>a,{get iconNode(){return s}}))}var yv=new Set(["$$slots","$$events","$$legacy"]);function bv(r,e){let a=dt(e,yv);const s=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M9 3v18"}],["path",{d:"m14 9 3 3-3 3"}]];pt(r,ft({name:"panel-left-open"},()=>a,{get iconNode(){return s}}))}var wv=new Set(["$$slots","$$events","$$legacy"]);function kv(r,e){let a=dt(e,wv);const s=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}],["path",{d:"M3 9h18"}],["path",{d:"M9 21V9"}]];pt(r,ft({name:"panels-top-left"},()=>a,{get iconNode(){return s}}))}var Sv=new Set(["$$slots","$$events","$$legacy"]);function xv(r,e){let a=dt(e,Sv);const s=[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1"}]];pt(r,ft({name:"pause"},()=>a,{get iconNode(){return s}}))}var jv=new Set(["$$slots","$$events","$$legacy"]);function nc(r,e){let a=dt(e,jv);const s=[["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"}]];pt(r,ft({name:"play"},()=>a,{get iconNode(){return s}}))}var Ev=new Set(["$$slots","$$events","$$legacy"]);function qv(r,e){let a=dt(e,Ev);const s=[["path",{d:"M5 12h14"}],["path",{d:"M12 5v14"}]];pt(r,ft({name:"plus"},()=>a,{get iconNode(){return s}}))}var Cv=new Set(["$$slots","$$events","$$legacy"]);function Pv(r,e){let a=dt(e,Cv);const s=[["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"}]];pt(r,ft({name:"rotate-ccw-clock"},()=>a,{get iconNode(){return s}}))}var Rv=new Set(["$$slots","$$events","$$legacy"]);function _o(r,e){let a=dt(e,Rv);const s=[["path",{d:"m21 21-4.34-4.34"}],["circle",{cx:"11",cy:"11",r:"8"}]];pt(r,ft({name:"search"},()=>a,{get iconNode(){return s}}))}var Av=new Set(["$$slots","$$events","$$legacy"]);function ic(r,e){let a=dt(e,Av);const s=[["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"}]];pt(r,ft({name:"settings"},()=>a,{get iconNode(){return s}}))}var Lv=new Set(["$$slots","$$events","$$legacy"]);function Tv(r,e){let a=dt(e,Lv);const s=[["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"}]];pt(r,ft({name:"share-2"},()=>a,{get iconNode(){return s}}))}var Iv=new Set(["$$slots","$$events","$$legacy"]);function Nv(r,e){let a=dt(e,Iv);const s=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"}]];pt(r,ft({name:"square"},()=>a,{get iconNode(){return s}}))}var Dv=new Set(["$$slots","$$events","$$legacy"]);function Mv(r,e){let a=dt(e,Dv);const s=[["path",{d:"M12 19h8"}],["path",{d:"m4 17 6-6-6-6"}]];pt(r,ft({name:"terminal"},()=>a,{get iconNode(){return s}}))}var zv=new Set(["$$slots","$$events","$$legacy"]);function Ov(r,e){let a=dt(e,zv);const s=[["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"}]];pt(r,ft({name:"trash"},()=>a,{get iconNode(){return s}}))}var Uv=new Set(["$$slots","$$events","$$legacy"]);function Hv(r,e){let a=dt(e,Uv);const s=[["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"}]];pt(r,ft({name:"triangle-alert"},()=>a,{get iconNode(){return s}}))}var Bv=new Set(["$$slots","$$events","$$legacy"]);function yi(r,e){let a=dt(e,Bv);const s=[["path",{d:"M18 6 6 18"}],["path",{d:"m6 6 12 12"}]];pt(r,ft({name:"x"},()=>a,{get iconNode(){return s}}))}function yo(r){return!r||r.status==="stopped"?(r==null?void 0:r.readinessStatus)==="failed"?"failed to start":"stopped":r.status==="stopping"?"stopping":r.readinessStatus==="failed"?"check failed":r.readinessStatus==="checking"?"checking readiness":r.upstreamReady?r.readinessStatus==="ready"?"ready":"listening":"starting"}function Pr(r){return!!(r.serviceType&&r.serviceType!=="http")}function Kv(r,e,a,s){const n=c=>r.filter(l=>l.name===c.name).length>1?`${c.name} (${c.id})`:c.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"}}},...r.map(c=>({id:`project:${c.id}`,label:`Go to ${n(c)}`,detail:"Project",action:{type:"navigate",route:{page:"projects",projectId:c.id}}}))];for(const c of e){const{key:l,name:d,runtime:v,command:p}=c,_=r.find(q=>l.startsWith(`${q.id}:`)),w=`${_?n(_):(v==null?void 0:v.projectName)??"Project"} / ${d}`,S=!!(v&&v.status!=="stopped"),j=!s||(v==null?void 0:v.status)==="stopping"||["start","stop","restart"].some(q=>a.has(`service:${l}:${q}`)),C=(q,b,I=!1)=>i.push({id:`${q}:${l}`,label:`${b} ${d}`,detail:w,disabled:I,action:{type:q,key:l}});S&&(v!=null&&v.upstreamReady)&&v.urls[0]&&!Pr(v)&&i.push({id:`open:${l}`,label:`Open ${d} in browser`,detail:w,action:{type:"open",url:v.urls[0]}}),C("logs","View logs for"),Pr(v??p??{})||C("requests","View requests for"),!S&&p&&(_==null?void 0:_.available)!==!1&&C("start","Start",j),S&&C("stop","Stop",j),S&&p&&(_==null?void 0:_.available)!==!1&&(v==null?void 0:v.managedBy)==="daemon"&&C("restart","Restart",j)}return i}function Fv(r,e){const a=e.toLowerCase().trim().split(/\s+/).filter(Boolean);return r.filter(s=>a.every(n=>`${s.label} ${s.detail}`.toLowerCase().includes(n)))}var Vv=y('<small class="svelte-vw7b2v">Unavailable</small>'),Wv=y('<button role="option" tabindex="-1"><span><strong class="svelte-vw7b2v"> </strong><small class="svelte-vw7b2v"> </small></span> <!></button>'),$v=y('<p class="empty svelte-vw7b2v">No matching commands. Try a project or service name.</p>'),Gv=y('<p class="error svelte-vw7b2v" role="alert"> </p>'),Yv=y('<div class="load-error svelte-vw7b2v" role="alert"><span> </span><button>Retry</button></div>'),Jv=y('<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 Zv(r,e){Tt(e,!0);let a=Re(e,"loading",3,!1),s=Re(e,"loadError",3,""),n,i,c=R(""),l=R(""),d=R(!1),v=R(""),p=!1;const _=F(()=>Fv(e.commands,t(c))),w=F(()=>t(_).find(B=>B.id===t(l))??t(_)[0]),S=B=>`palette-${encodeURIComponent(B)}`;Dn(()=>{p=!0;const B=document.activeElement;return n.showModal(),i.focus(),()=>{p=!1,n.close(),B instanceof HTMLElement&&B.isConnected&&B.focus()}});async function j(B){if(!(!B||B.disabled||t(d))){u(d,!0),u(v,"");try{const K=await e.onExecute(B);if(K&&typeof K=="object"&&"ok"in K&&K.ok===!1)throw new Error("error"in K&&typeof K.error=="string"?K.error:"Service action failed.");p&&e.onClose()}catch(K){p&&u(v,K instanceof Error?K.message:"Could not run this command.",!0)}finally{p&&u(d,!1)}}}async function C(B){var re;if(B.isComposing||(B.key==="Enter"&&(B.preventDefault(),j(t(w))),B.key!=="ArrowDown"&&B.key!=="ArrowUp")||(B.preventDefault(),!t(_).length))return;const K=t(_).findIndex(ee=>{var oe;return ee.id===((oe=t(w))==null?void 0:oe.id)});u(l,t(_)[(K+(B.key==="ArrowDown"?1:-1)+t(_).length)%t(_).length].id,!0),await ms(),(re=document.getElementById(S(t(l))))==null||re.scrollIntoView({block:"nearest"})}var q=Jv(),b=f(q),I=f(b);_o(I,{size:20});var A=o(I,2);Xa(A,B=>i=B,()=>i);var L=o(A,2),P=o(b,2);He(P,21,()=>t(_),B=>B.id,(B,K)=>{var re=Wv();let ee;var oe=f(re),U=f(oe),M=m(U,!0),he=o(U),te=m(he,!0),be=o(oe,2);{var _e=ce=>{var ve=Vv();g(ce,ve)},de=ce=>{sc(ce,{size:16})};D(be,ce=>{t(K).disabled?ce(_e):t(K).action.type==="open"&&ce(de,1)})}E(ce=>{var ve,Ie;V(re,"id",ce),V(re,"aria-selected",((ve=t(w))==null?void 0:ve.id)===t(K).id),V(re,"aria-disabled",t(K).disabled||t(d)),ee=it(re,1,"svelte-vw7b2v",null,ee,{chosen:((Ie=t(w))==null?void 0:Ie.id)===t(K).id}),h(M,t(K).label),h(te,t(K).detail)},[()=>S(t(K).id)]),Q("click",re,()=>j(t(K))),g(B,re)});var W=o(P,2);{var O=B=>{var K=$v();g(B,K)};D(W,B=>{t(_).length||B(O)})}var Z=o(W,2);{var ae=B=>{var K=Gv(),re=m(K,!0);E(()=>h(re,t(v))),g(B,K)};D(Z,B=>{t(v)&&B(ae)})}var Y=o(Z,2);{var $=B=>{var K=Yv(),re=f(K),ee=m(re,!0),oe=o(re);E(()=>{h(ee,s()),oe.disabled=a()}),Q("click",oe,function(...U){var M;(M=e.onRetry)==null||M.apply(this,U)}),g(B,K)};D(Y,B=>{s()&&B($)})}var X=o(Y,2),T=f(X),se=m(T,!0);Xa(q,B=>n=B,()=>n),E(B=>{V(A,"aria-activedescendant",B),V(P,"aria-busy",t(d)),h(se,t(d)?"Running command…":a()?"Loading services…":`${t(_).length} commands`)},[()=>t(w)?S(t(w).id):void 0]),Kt("cancel",q,B=>{B.preventDefault(),e.onClose()}),Q("click",q,B=>{if(B.target===n){const K=n.getBoundingClientRect();(B.clientX<K.left||B.clientX>K.right||B.clientY<K.top||B.clientY>K.bottom)&&e.onClose()}}),Q("input",A,()=>{u(l,""),u(v,"")}),Q("keydown",A,C),Gt(A,()=>t(c),B=>u(c,B)),Q("click",L,function(...B){var K;(K=e.onClose)==null||K.apply(this,B)}),g(r,q),It()}er(["click","input","keydown"]);function Bo(r){const e=r.replace(/\/+$/,"").split("/").slice(1);if(r==="/"||r==="")return{page:"projects"};const[a,s]=e;if(e.length===1&&(a==="projects"||a==="services"||a==="settings"||a==="about"||a==="changelog"))return{page:a};if(e.length!==2&&e.length!==3||!s)return{page:"not-found"};let n;try{n=decodeURIComponent(s)}catch{return{page:"not-found"}}if(a==="projects"&&/^[a-zA-Z0-9_-]+$/.test(n)){if(e.length===2)return{page:a,projectId:n};if(e[2]==="secrets"||e[2]==="activity"||e[2]==="checks")return{page:a,projectId:n,section:e[2]}}return e.length===2&&a==="services"&&/^[a-zA-Z0-9_-]+:[a-zA-Z0-9_-]+$/.test(n)?{page:a,serviceKey:n}:{page:"not-found"}}function Js(r){return r.page==="projects"&&r.projectId?`/projects/${encodeURIComponent(r.projectId)}${r.section?`/${r.section}`:""}`:r.page==="services"&&r.serviceKey?`/services/${encodeURIComponent(r.serviceKey)}`:`/${r.page}`}function Xv(r){return r.button===0&&!r.metaKey&&!r.ctrlKey&&!r.shiftKey&&!r.altKey&&!r.defaultPrevented}function Ko(r,e,a=r==null?void 0:r.id){const s=e.filter(c=>!a||c.projectId===a),n=((r==null?void 0:r.commands)??[]).map(c=>({key:`${r.id}:${c.name}`,name:c.name,command:c,runtime:s.find(l=>l.name===c.name)})),i=new Set(n.map(c=>c.key));return[...n,...s.filter(c=>!i.has(c.key)).map(c=>({key:c.key,name:c.name,runtime:c}))]}function Qv(r,e){return e?r.replace(/^(http:\/\/[a-z0-9-]+(?:\.[a-z0-9-]+)?\.localhost):\d+(?=\/|$)/i,"$1"):r}async function ef(r,e=fetch){try{const a=await e("/api/forwarder",{method:r?"POST":"GET",cache:"no-store",...r?{headers:{"content-type":"application/json"},body:JSON.stringify({install:!0})}:{},signal:AbortSignal.timeout(r?135e3:6e3)});if(!a.ok)return{ready:!1,error:"Could not check forwarding. Restart LocalDeck to load the update, then try again."};const s=await a.json();return(s==null?void 0:s.ready)===!0?{ready:!0}:{ready:!1,error:typeof(s==null?void 0:s.error)=="string"?s.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 ii=1e3,oc=100,Gn=5e3,lc="localdeck-log-limit";function bo(r){return Number.isInteger(r)&&r>=oc&&r<=Gn}function cc(){try{const r=Number(localStorage.getItem(lc));return bo(r)?r:ii}catch{return ii}}function sn(r,e){if(r.startsWith("legacy-"))return!1;const[a,s]=r.split("-").map(c=>Number.parseInt(c,36)),[n,i]=e.split("-").map(c=>Number.parseInt(c,36));return a>n||a===n&&s>i}function Fo(r,e,a){const s=r.findIndex(l=>l.id===e.id);if(s>=0){if(r[s]===e)return r;r=r.filter((l,d)=>d!==s)}const n=(l,d)=>l.ts-d.ts||l.id.localeCompare(d.id);if(!r.length||n(r[r.length-1],e)<=0)return[...r.slice(Math.max(0,r.length+1-a)),e];let i=0,c=r.length;for(;i<c;){const l=i+c>>>1;n(r[l],e)<0?i=l+1:c=l}return r.length>=a&&i===0?r:[...r.slice(0,i),e,...r.slice(i)].slice(-a)}const Ti=500;function Vo(r,e,a){return[...new Map([...r,...e].map(n=>[n.id,n])).values()].sort((n,i)=>n.ts-i.ts||n.id.localeCompare(i.id)).slice(-a)}var mn,_n,yn,bn,wn,kn,Sn,xn,jn,En,qn,Cn,Pn;class tf{constructor(){xe(this,mn,R(at(cc())));xe(this,_n,R(at([])));xe(this,yn,R(at({})));xe(this,bn,R(at({})));xe(this,wn,R(!1));xe(this,kn,R(null));xe(this,Sn,R(at([])));xe(this,xn,R(null));xe(this,jn,R(at({})));xe(this,En,R(at({})));xe(this,qn,R(at({})));xe(this,Cn,R(at({})));Lt(this,"ws");Lt(this,"connecting");Lt(this,"catalogRequest",0);Lt(this,"refreshingProjects");Lt(this,"catalogGeneration",0);Lt(this,"detailRequests",{});xe(this,Pn,R(at({})));Lt(this,"historyLoads",new Map);Lt(this,"liveRevision",0);Lt(this,"liveVersions",{});Lt(this,"unshare",e=>this.call(`/api/services/${encodeURIComponent(e)}/share`,{method:"DELETE"}));Lt(this,"stop",e=>this.call(`/api/services/${encodeURIComponent(e)}/stop`,{method:"POST"}))}get logLimit(){return t(x(this,mn))}set logLimit(e){u(x(this,mn),e,!0)}async setLogLimit(e){var n;if(!bo(e))throw new Error("Log limit must be an integer between 100 and 5000");const a=this.logLimit;this.logLimit=e;const s=Object.keys(this.logs);for(const i of s)this.logs[i]=(n=this.logs[i])==null?void 0:n.slice(-e);e>a&&await Promise.all(s.map(async i=>{var c;await((c=this.historyLoads.get(i))==null?void 0:c.catch(()=>{})),await this.load(i)}))}get services(){return t(x(this,_n))}set services(e){u(x(this,_n),e,!0)}get logs(){return t(x(this,yn))}set logs(e){u(x(this,yn),e,!0)}get requests(){return t(x(this,bn))}set requests(e){u(x(this,bn),e,!0)}get connected(){return t(x(this,wn))}set connected(e){u(x(this,wn),e,!0)}get selected(){return t(x(this,kn))}set selected(e){u(x(this,kn),e,!0)}get projects(){return t(x(this,Sn))}set projects(e){u(x(this,Sn),e,!0)}get selectedProjectId(){return t(x(this,xn))}set selectedProjectId(e){u(x(this,xn),e,!0)}get projectDetails(){return t(x(this,jn))}set projectDetails(e){u(x(this,jn),e,!0)}get shareErrors(){return t(x(this,En))}set shareErrors(e){u(x(this,En),e,!0)}get projectErrors(){return t(x(this,qn))}set projectErrors(e){u(x(this,qn),e,!0)}get pendingActions(){return t(x(this,Cn))}set pendingActions(e){u(x(this,Cn),e,!0)}get historyBoundaries(){return t(x(this,Pn))}set historyBoundaries(e){u(x(this,Pn),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",a=new WebSocket(`${e}://${location.host}/api/events`);this.ws=a,a.onopen=()=>{this.ws===a&&(this.connected=!0)},a.onclose=()=>{this.ws===a&&(this.ws=void 0,this.connected=!1,setTimeout(()=>void this.connect(),1500))},a.onmessage=s=>{try{this.handle(JSON.parse(s.data))}catch{}}}handle(e){switch(e.type){case"snapshot":{const a=new Set(e.services.map(n=>n.key)),s=new Map;for(const n of e.services){const i=s.get(n.projectId);i?i.push(n):s.set(n.projectId,[n])}for(const n of this.services)a.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:s.get(n)??[]});for(const n of e.services)this.markLive(n.key),this.load(n.key).catch(()=>{});break}case"service":{const a=this.services.some(s=>s.key===e.service.key);this.markLive(e.service.key),this.upsertService(e.service),a||this.load(e.service.key).catch(()=>{});break}case"service:removed":this.markLive(e.name),this.services=this.services.filter(a=>a.key!==e.name),this.removeProjectDetailsService(e.name);break;case"history:cleared":{const a=`${e.service}/${e.kind}`,s=this.historyBoundaries[a];(!s||sn(e.beforeId,s))&&(this.historyBoundaries[a]=e.beforeId,e.kind==="logs"?this.logs[e.service]=(this.logs[e.service]??[]).filter(n=>sn(n.id,e.beforeId)):this.requests[e.service]=(this.requests[e.service]??[]).filter(n=>sn(n.id,e.beforeId)));break}case"log":{if(!this.retained(e.log.service,"logs",e.log.id))break;const a=this.logs[e.log.service]??[];this.logs[e.log.service]=Fo(a,e.log,this.logLimit);break}case"request":{if(!this.retained(e.request.service,"requests",e.request.id))break;const a=this.requests[e.request.service]??[],s=!a.some(i=>i.id===e.request.id);this.requests[e.request.service]=Fo(a,e.request,Ti);const n=this.services.find(i=>i.key===e.request.service);if(n&&s){const i={...n,stats:{...n.stats}};rf(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 a=()=>{this.refreshingProjects===e&&(this.refreshingProjects=void 0)};return e.then(a,a),e}async loadProjects(e=this.liveRevision,a=!1){const s=++this.catalogRequest;let n;try{const v=await this.call("/api/projects");if(!Array.isArray(v))throw new Error("projects response must be an array");n=v}catch(v){throw s===this.catalogRequest&&(this.projectErrors.projects=ts(v)),v}if(s!==this.catalogRequest)return;const i=new Set(n.map(v=>v.id)),c=new Set([...this.projects.filter(v=>!i.has(v.id)).map(v=>v.id),...Object.keys(this.projectDetails).filter(v=>!i.has(v))]);this.catalogGeneration++;for(const v of c)this.invalidateProject(v);if(this.projects=n,delete this.projectErrors.projects,!n.length){this.selectedProjectId=null,this.projectDetails={};return}if(a){await Promise.all(n.map(v=>this.loadProjectDetails(v.id,e).catch(()=>{})));return}const d=n.find(v=>v.id===this.selectedProjectId)??n.find(v=>v.available)??n[0];try{await this.selectProject(d.id,e)}catch{}}async selectProject(e,a=this.liveRevision){return this.selectedProjectId=e,this.loadProjectDetails(e,a)}async loadProjectDetails(e,a=this.liveRevision){const s=(this.detailRequests[e]??0)+1;this.detailRequests[e]=s;const n=this.catalogGeneration,i=a;try{const c=await this.call(`/api/projects/${encodeURIComponent(e)}`);if(!c||!Array.isArray(c.services)||!Array.isArray(c.commands))throw new Error("project details response is invalid");if(!this.isCurrentDetailRequest(e,s,n))return c;const l={...c,services:this.mergeFetchedServices(e,c.services,i)};return this.projectDetails[e]=l,this.projects=this.projects.map(d=>d.id===e?$o(l):d),delete this.projectErrors[e],this.syncProjectServices(e,l.services,i),l}catch(c){if(!this.isCurrentDetailRequest(e,s,n))throw c;const l=ts(c);if(this.projectErrors[e]=l,c instanceof Wo&&c.status===422){const d=this.projects.find(v=>v.id===e);if(d){const v={...d,available:!1,error:l};this.projects=this.projects.map(p=>p.id===e?v:p),this.projectDetails[e]={...v,commands:[],services:this.services.filter(p=>p.projectId===e)}}}throw c}}startService(e,a){return this.serviceAction(e,a,"start")}stopService(e,a){return this.serviceAction(e,a,"stop")}restartService(e,a){return this.serviceAction(e,a,"restart")}startAll(e){return this.bulkAction(e,"start")}stopAll(e){return this.bulkAction(e,"stop")}updateDependencies(e,a,s){const n=`${e}:${a}`;return this.pending(`project:${e}:update-dependencies:${a}`,async()=>{try{const i=await this.call(`/api/projects/${encodeURIComponent(e)}/services/${encodeURIComponent(a)}/dependencies`,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({after:[...new Set(s.map(c=>c.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(c=>c.id===e?$o(i):c),this.syncProjectServices(e,i.services,this.liveRevision),delete this.projectErrors[n]),i}catch(i){throw this.hasProject(e)&&(this.projectErrors[n]=ts(i)),i}})}forgetProject(e){return this.pending(`project:${e}:forget`,async()=>{try{const a=await this.call(`/api/projects/${encodeURIComponent(e)}`,{method:"DELETE"}),s=this.selectedProjectId===e;if(this.catalogRequest++,this.catalogGeneration++,this.projects=this.projects.filter(n=>n.id!==e),this.invalidateProject(e),s){const n=this.projects[0];if(this.selectedProjectId=(n==null?void 0:n.id)??null,n)try{await this.selectProject(n.id)}catch{}}return a}catch(a){throw this.projectErrors[e]=ts(a),a}})}load(e){const a=this.historyLoads.get(e);if(a)return a;const s=this.loadHistory(e);this.historyLoads.set(e,s);const n=()=>{this.historyLoads.get(e)===s&&this.historyLoads.delete(e)};return s.then(n,n),s}async loadHistory(e){const a=encodeURIComponent(e),[s,n]=await Promise.all([this.call(`/api/services/${a}/logs?limit=${this.logLimit}`,void 0,i=>this.readHistoryBoundary(e,"logs",i)),this.call(`/api/services/${a}/requests?limit=${Ti}`,void 0,i=>this.readHistoryBoundary(e,"requests",i))]);if(!Array.isArray(s)||!Array.isArray(n))throw new Error("history response must be an array");this.logs[e]=Vo(s.filter(i=>this.retained(e,"logs",i.id)),this.logs[e]??[],this.logLimit),this.requests[e]=Vo(n.filter(i=>this.retained(e,"requests",i.id)),this.requests[e]??[],Ti)}readHistoryBoundary(e,a,s){var i;const n=(i=s.headers)==null?void 0:i.get("x-localdeck-history-boundary");n&&this.handle({type:"history:cleared",eventId:n,service:e,kind:a,beforeId:n})}retained(e,a,s){const n=this.historyBoundaries[`${e}/${a}`];return!n||sn(s,n)}clearHistory(e,a){return this.pending(`history:${e}:${a}:clear`,async()=>{const s=await this.call(`/api/services/${encodeURIComponent(e)}/${a}`,{method:"DELETE"});this.handle(s)})}async share(e,a,s=!1){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(s?{public:!0}:{password:a||void 0})})}catch(n){throw this.shareErrors[e]=ts(n),n}})}async call(e,a,s){const n=await fetch(e,a),i=await n.json().catch(()=>({}));if(!n.ok)throw new Wo(n.status,typeof i.error=="string"?i.error:`request failed (${n.status})`);return s==null||s(n),i}serviceAction(e,a,s){const n=`${e}:${a}`,i=`service:${e}:${a}:${s}`;return this.pending(i,async()=>{const c=this.liveRevision,l=this.hasProject(e);try{const d=await this.call(`/api/projects/${encodeURIComponent(e)}/services/${encodeURIComponent(a)}/${s}`,{method:"POST"});return(!l||this.hasProject(e))&&(d.ok?delete this.projectErrors[n]:this.projectErrors[n]=d.error??`${s} failed`,d.service&&(this.liveVersions[d.service.key]??0)<=c&&this.upsertService(d.service)),await this.refreshAfterAction(e,l,c),d}catch(d){throw(!l||this.hasProject(e))&&(this.projectErrors[n]=ts(d)),d}})}bulkAction(e,a){return this.pending(`project:${e}:${a}-all`,async()=>{const s=this.liveRevision,n=this.hasProject(e);try{const i=await this.call(`/api/projects/${encodeURIComponent(e)}/${a}`,{method:"POST"});if(!n||this.hasProject(e)){delete this.projectErrors[e];for(const c of i.results)c.ok?delete this.projectErrors[c.key]:this.projectErrors[c.key]=c.error??`${a} failed`,c.service&&(this.liveVersions[c.key]??0)<=s&&this.upsertService(c.service)}return await this.refreshAfterAction(e,n,s),i}catch(i){throw(!n||this.hasProject(e))&&(this.projectErrors[e]=ts(i)),i}})}pending(e,a){const s=this.pendingActions[e];if(s)return s;const n=a();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,a,s){if(!(a&&!this.hasProject(e)))try{await this.loadProjects(s)}catch{}}markLive(e){this.liveVersions[e]=++this.liveRevision}hasProject(e){return this.projects.some(a=>a.id===e)}isCurrentDetailRequest(e,a,s){return this.detailRequests[e]===a&&this.catalogGeneration===s&&this.hasProject(e)}invalidateProject(e){this.detailRequests[e]=(this.detailRequests[e]??0)+1,delete this.projectDetails[e],delete this.projectErrors[e];for(const s of Object.keys(this.projectErrors))s.startsWith(`${e}:`)&&delete this.projectErrors[s];const a=this.services.find(s=>s.key===this.selected);this.services=this.services.filter(s=>s.projectId!==e),(a==null?void 0:a.projectId)===e&&(this.selected=null)}upsertService(e){const a=this.services.findIndex(s=>s.key===e.key);this.services=a===-1?[...this.services,e]:this.services.map(s=>s.key===e.key?e:s),this.updateProjectDetailsService(e)}updateProjectDetailsService(e){const a=this.projectDetails[e.projectId];if(!a)return;const n=a.services.findIndex(i=>i.key===e.key)===-1?[...a.services,e]:a.services.map(i=>i.key===e.key?e:i);this.projectDetails[e.projectId]={...a,services:n}}removeProjectDetailsService(e){for(const[a,s]of Object.entries(this.projectDetails))s!=null&&s.services.some(n=>n.key===e)&&(this.projectDetails[a]={...s,services:s.services.filter(n=>n.key!==e)})}mergeFetchedServices(e,a,s){const n=new Map(this.services.filter(l=>l.projectId===e).map(l=>[l.key,l])),i=[],c=new Set;for(const l of a){const v=(this.liveVersions[l.key]??0)>s?n.get(l.key):l;v&&(i.push(v),c.add(v.key))}for(const l of n.values())!c.has(l.key)&&(this.liveVersions[l.key]??0)>s&&i.push(l);return i}syncProjectServices(e,a,s){const n=this.services.filter(l=>l.projectId!==e),i=this.services.filter(l=>l.projectId===e&&(this.liveVersions[l.key]??0)>s),c=new Map;for(const l of[...a,...i])c.set(l.key,l);this.services=[...n,...c.values()]}}mn=new WeakMap,_n=new WeakMap,yn=new WeakMap,bn=new WeakMap,wn=new WeakMap,kn=new WeakMap,Sn=new WeakMap,xn=new WeakMap,jn=new WeakMap,En=new WeakMap,qn=new WeakMap,Cn=new WeakMap,Pn=new WeakMap;class Wo extends Error{constructor(e,a){super(a),this.status=e}}function $o(r){const{commands:e,services:a,...s}=r;return s}function ts(r){return r instanceof Error?r.message:String(r)}function rf(r,e){const a=r.stats,s=a.avgLatencyMs*a.requests+e.durationMs;a.requests++,e.error?a.proxyErrors++:e.status>=500?a.serverErrors++:e.status>=400?a.clientErrors++:a.ok++,a.avgLatencyMs=Math.round(s/a.requests),a.lastRequestAt=e.ts}const af=new tf;var sf=y('<code class="svelte-1hauwfi"> </code><button class="copy-command svelte-1hauwfi"><!></button>',1),nf=y('<p role="alert" class="svelte-1hauwfi"> </p>'),of=y('<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 class="svelte-1hauwfi">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> <!></li> <li class="svelte-1hauwfi"><strong>Windows:</strong> <!></li> <li class="svelte-1hauwfi"><strong>Linux (Debian/Ubuntu, AMD64):</strong> <!></li></ul> <a target="_blank" rel="noreferrer">Cloudflare installation instructions ↗</a> <p class="svelte-1hauwfi">Check your installation with <!>, then retry sharing. Restart LocalDeck after changing PATH.</p> <!> <span class="sr-only svelte-1hauwfi" role="status"> </span></section>');function uc(r){const e=(P,W=Oa)=>{var O=sf(),Z=Ye(O),ae=m(Z,!0),Y=o(Z),$=f(Y);{var X=se=>{_i(se,{size:14,"aria-hidden":"true"})},T=se=>{Mn(se,{size:14,"aria-hidden":"true"})};D($,se=>{t(a)===W()?se(X):se(T,-1)})}E(()=>{h(ae,W()),V(Y,"aria-label",`Copy command: ${W()}`),V(Y,"title",t(a)===W()?"Copied":"Copy command")}),Q("click",Y,()=>n(W())),g(P,O)};let a=R(""),s=R("");async function n(P){u(s,"");try{await navigator.clipboard.writeText(P),u(a,P,!0)}catch{u(s,"Could not copy. Select the command and copy it manually.")}}const i="https://developers.cloudflare.com/tunnel/downloads/";var c=of(),l=o(f(c),4),d=f(l),v=o(f(d),2);e(v,()=>"brew install cloudflared");var p=o(d,2),_=o(f(p),2);e(_,()=>"winget install Cloudflare.cloudflared");var w=o(p,2),S=o(f(w),2);e(S,()=>"curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb && sudo dpkg -i cloudflared.deb");var j=o(l,2);V(j,"href",i);var C=o(j,2),q=o(f(C));e(q,()=>"cloudflared --version");var b=o(C,2);{var I=P=>{var W=nf(),O=m(W,!0);E(()=>h(O,t(s))),g(P,W)};D(b,P=>{t(s)&&P(I)})}var A=o(b,2),L=m(A,!0);E(()=>h(L,t(a)?"Command copied":"")),g(r,c)}er(["click"]);gu();var lf=y('<div class="svelte-1vwaeio"><dt class="svelte-1vwaeio"><code class="svelte-1vwaeio"> </code></dt><dd class="svelte-1vwaeio"> </dd></div>'),cf=y('<details class="svelte-1vwaeio"><summary class="svelte-1vwaeio"> <span class="svelte-1vwaeio"> </span></summary> <dl class="svelte-1vwaeio"></dl></details>'),uf=y('<section class="about page-shell svelte-1vwaeio" aria-labelledby="about-title"><header class="page-heading"><div><h1 id="about-title">About LocalDeck</h1> <p class="page-subtitle svelte-1vwaeio">A home for your local development services.</p></div></header> <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> <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 df(r){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 a=uf(),s=o(f(a),6);uc(s);var n=o(s,2),i=o(f(n),4);He(i,5,()=>e,Ht,(c,l)=>{var d=cf(),v=f(d),p=f(v),_=o(p),w=m(_),S=o(v,2);He(S,5,()=>t(l).commands,Ht,(j,C)=>{var q=F(()=>eo(t(C),2));let b=()=>t(q)[0],I=()=>t(q)[1];var A=lf(),L=f(A),P=f(L),W=m(P,!0),O=o(L),Z=m(O,!0);E(()=>{h(W,b()),h(Z,I())}),g(j,A)}),E(()=>{h(p,t(l).title),h(w,`${t(l).commands.length??""} commands`)}),g(c,d)}),g(r,a)}var vf=y('<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 ff(r,e){Tt(e,!0);let a=R(void 0);yr(()=>{u(a,e.value,!0)});const s=F(()=>t(a)!==void 0&&bo(t(a)));var n=vf(),i=o(f(n),2),c=o(f(i),2),l=f(c),d=o(l),v=o(c,4),p=m(v);E(_=>{V(l,"min",oc),V(l,"max",Gn),d.disabled=!t(s)||t(a)===e.value,h(p,`Current limit: ${_??""} lines. Saved in this browser.`)},[()=>e.value.toLocaleString()]),Kt("submit",i,_=>{_.preventDefault(),t(s)&&t(a)!==void 0&&e.onSave(t(a))}),Q("input",l,_=>{_.currentTarget.valueAsNumber>Gn&&(_.currentTarget.value=String(Gn))}),Gt(l,()=>t(a),_=>u(a,_)),g(r,n),It()}er(["input"]);const pf=[{version:"1.5.0",title:"Debugging workflows: activity, baselines, worktrees, and checks",sections:[{title:"Added",changes:["Inspect a project's Activity timeline, which combines requests, logs, and service lifecycle changes. The Incidents view highlights failures and state changes, with service filters, search, and shareable event links.","Mark a baseline before changing code, then compare later observations for sample counts, error rates, restarts, error signatures, and route latency. Sparse traffic and incomplete history are reported instead of treated as fixed.","Discover existing Git worktrees of a project and switch between them. Each worktree keeps its own project ID and automatic ports, and discovery never starts services.","Preview a sanitized cURL or JSON export of a recorded request. Exports keep only representation headers, remove recognized credentials, and omit unsupported bodies.","Save eligible GET/HEAD requests as checks with an expected status and run them from the project's Checks tab. Saving never sends a request.","Add MCP tools for timelines, baselines, worktree environments, request exports, and saved checks. Project-restricted MCP servers cannot register environments."]},{title:"Fixed",changes:["Keep dashboard state when a project refreshes, and refine the debugging controls."]}]},{version:"1.4.0",title:"Safer sharing and a sturdier daemon",sections:[{title:"Changed",changes:["Protect share links with a password by default. When no password is entered, LocalDeck generates one; reveal it with Show next to the link. Public links now require ticking Public link in the dashboard, --public in the CLI, or public: true in the API and MCP.","Keep Clean URLs off after removing them in Settings, including across later localdeck run and up commands, until you enable them again."]},{title:"Security",changes:["Limit password attempts on shared links to 10 failures per visitor and 100 per share within 15 minutes, then answer with 429 and a retry time.","Keep the share session cookie away from the shared app and out of request records.","Redact Authorization, Cookie, Set-Cookie, and API key headers in MCP get_requests results.","Prevent other sites from embedding the dashboard in a frame."]},{title:"Fixed",changes:["Keep the daemon running when a WebSocket client disconnects while its service is restarting.","Detect stable ports already used on ::1 or wildcard addresses before claiming them.","Explain when a service listens only on an address LocalDeck cannot reach, instead of waiting indefinitely.","Bound in-memory logs and requests to 8 MiB each per service.","Release a project's remembered ports when it is forgotten.","On macOS, remove Clean URLs without an administrator prompt when no system relay is installed, and support account names that contain periods.","Show port-conflict startup guidance for single services as well as prefixed output."]}]},{version:"1.3.0",title:"Clearer requests, logs, and dashboard controls",sections:[{title:"Added",changes:["Add the read-only MCP get_response tool for cached response bodies, with updated capture documentation and agent debugging workflows.","Inspect requests in a dedicated detail pane while keeping the request list visible on desktop.","View JSON request and response bodies with indentation and syntax highlighting, and copy original response text, including replay responses.","Pause and resume displayed logs, copy individual lines, and jump to the latest output while capture continues.","Copy cloudflared installation commands for macOS, Windows, and Debian/Ubuntu AMD64 from the setup instructions."]},{title:"Changed",changes:["Refine the dashboard with charcoal surfaces, monospace typography, lime accents, and consistent title/subtitle headers and page spacing.","Simplify request and log rows with quieter metadata, aligned status and duration columns, and wrapped log messages.","Group the service selector by project with select-all controls. Show only active services in Requests and Logs and remove tabs when services stop.","Integrate clear actions into square service tabs and move background-traffic visibility into the Requests Options menu.","Consolidate project controls into Start project, Start remaining, and Stop project actions."]}]},{version:"1.2.3",title:"Updates for administrator-owned installations",sections:[{title:"Fixed",changes:["Check installation permissions before updating. On macOS and Linux, request administrator access for npm only when needed, while verifying the update and restarting the daemon as the original user.","Keep the daemon running if authentication is cancelled or installation fails. Explain how to update protected installations from non-interactive sessions and Windows.","Disable npm lifecycle scripts during updates and use the administrator's home for elevated npm operations to avoid creating a root-owned cache in the user's home."]}]},{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 hf=y('<li class="svelte-1tl5wtp"> </li>'),gf=y('<section class="release-section svelte-1tl5wtp"><h3 class="svelte-1tl5wtp"> </h3><ul class="svelte-1tl5wtp"></ul></section>'),mf=y('<article class="svelte-1tl5wtp"><h2 class="svelte-1tl5wtp"> <span class="svelte-1tl5wtp"> </span></h2> <!></article>'),_f=y('<section class="page-shell" aria-labelledby="changelog-title"><header class="page-heading"><div><h1 id="changelog-title">Changelog</h1><p class="page-subtitle">What’s new in LocalDeck.</p></div></header> <!></section>');function yf(r){var e=_f(),a=o(f(e),2);He(a,1,()=>pf,s=>s.version,(s,n)=>{var i=mf(),c=f(i),l=f(c),d=o(l),v=m(d,!0),p=o(c,2);He(p,1,()=>t(n).sections,Ht,(_,w)=>{var S=gf(),j=f(S),C=m(j,!0),q=o(j);He(q,5,()=>t(w).changes,Ht,(b,I)=>{var A=hf(),L=m(A,!0);E(()=>h(L,t(I))),g(b,A)}),E(()=>h(C,t(w).title)),g(_,S)}),E(()=>{V(i,"aria-labelledby",`release-${t(n).version}`),V(c,"id",`release-${t(n).version}`),h(l,`v${t(n).version??""} `),h(v,t(n).title)}),g(s,i)}),g(r,e)}function Bt(r){const e=r.ownerDocument;function a(n){r.open&&!n.composedPath().includes(r)&&(r.open=!1)}function s(n){var i;n.key!=="Escape"||!r.open||(r.open=!1,(i=r.querySelector("summary"))==null||i.focus(),n.stopPropagation())}return e.addEventListener("pointerdown",a,!0),e.addEventListener("focusin",a),r.addEventListener("keydown",s),{destroy(){e.removeEventListener("pointerdown",a,!0),e.removeEventListener("focusin",a),r.removeEventListener("keydown",s)}}}var bf=y('<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>'),wf=y('<button class="text-action remove svelte-sh54s5">Remove</button>'),kf=y('<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>'),Sf=y('<div class="list-heading svelte-sh54s5" aria-hidden="true"><span>Variable</span><span>Status</span><span></span></div> <ul class="svelte-sh54s5"></ul>',1),xf=y('<p class="empty svelte-sh54s5">No secrets yet. Choose Add secret to get started.</p>'),jf=y('<p class="saved svelte-sh54s5" role="status"> </p>'),Ef=y('<p class="error svelte-sh54s5" role="alert"> </p>'),qf=y('<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 Cf(r,e){Tt(e,!0);const a=U=>{var M=bf(),he=f(M),te=m(he,!0),be=o(he,2),_e=f(be),de=o(f(_e)),ce=o(_e,2),ve=o(f(ce)),Ie=o(be,4),bt=m(Ie,!0);E(()=>{h(te,t(j)?"Replace secret":t(p)?"Set secret value":"Add secret"),de.readOnly=t(p)!=="",de.disabled=t(c),ve.disabled=t(c),Ie.disabled=t(c)||!t(i)||!t(n),h(bt,t(c)?"Saving…":"Save secret")}),Kt("submit",M,I),Gt(de,()=>t(i),vt=>u(i,vt)),Gt(ve,()=>t(n),vt=>u(n,vt)),g(U,M)};let s=R(at([])),n=R(""),i=R(""),c=R(!1),l=R(""),d=R(""),v=0,p=R(null),_;function w(U,M){if(t(c)){U.preventDefault();return}const te=U.currentTarget.closest("details");te.open||(_&&(_.open=!1),_=te,u(p,M,!0),u(i,M,!0),u(n,""),u(l,""),u(d,""))}async function S(U){var he;const M=U.currentTarget;M===_&&M.open&&(await ms(),M.open&&((he=M.querySelector(t(p)?'input[type="password"]':"input"))==null||he.focus())),M===_&&!M.open&&(u(p,null),u(n,""),u(i,""))}const j=F(()=>t(s).some(U=>U.name===t(i)&&U.configured));async function C(U,M){const he=await fetch(`/api/projects/${encodeURIComponent(U)}/secrets`),te=await he.json();if(M===v){if(!he.ok)throw new Error(te.error??"Could not load secrets");u(s,te.secrets,!0)}}const q=F(()=>e.project.id);yr(()=>{const U=t(q),M=++v;u(s,[],!0),u(n,""),u(i,""),u(l,""),u(d,""),C(U,M).catch(he=>{M===v&&u(l,he instanceof Error?he.message:"Could not load secrets",!0)})});async function b(U,M){var be;const he=e.project.id,te=v;u(c,!0),u(l,""),u(d,"");try{const _e=await fetch(`/api/projects/${encodeURIComponent(he)}/secrets/${encodeURIComponent(U)}`,{method:M,...M==="PUT"?{headers:{"content-type":"application/json"},body:JSON.stringify({value:t(n)})}:{}}),de=await _e.json();if(te!==v)return;if(!_e.ok)throw new Error(de.error??"Could not update secret");u(n,""),u(i,""),M==="PUT"&&_&&(_.open=!1,(be=_.querySelector("summary"))==null||be.focus()),u(d,M==="PUT"?"Secret saved.":"Secret removed.",!0),await C(he,te)}catch(_e){te===v&&u(l,_e instanceof Error?_e.message:"Could not update secret",!0)}finally{u(c,!1)}}function I(U){U.preventDefault(),!t(c)&&t(i)&&t(n)&&b(t(i),"PUT")}var A=qf(),L=f(A),P=f(L),W=o(f(P)),O=m(W),Z=o(P,2),ae=f(Z),Y=f(ae);qv(Y,{size:14});var $=o(ae,2);{var X=U=>{a(U)};D($,U=>{t(p)===""&&U(X)})}_s(Z,U=>Bt==null?void 0:Bt(U));var T=o(L,4);{var se=U=>{var M=Sf(),he=o(Ye(M),2);He(he,21,()=>t(s),te=>te.name,(te,be)=>{var _e=kf(),de=f(_e),ce=m(de,!0),ve=o(de,2);let Ie;var bt=o(f(ve),1,!0),vt=o(ve,2),tt=f(vt),Be=f(tt),Ae=m(Be,!0),Ne=o(Be,2);{var Qe=ht=>{a(ht)};D(Ne,ht=>{t(p)===t(be).name&&ht(Qe)})}_s(tt,ht=>Bt==null?void 0:Bt(ht));var Ue=o(tt,2);{var br=ht=>{var dr=wf();E(()=>dr.disabled=t(c)),Q("click",dr,()=>b(t(be).name,"DELETE")),g(ht,dr)};D(Ue,ht=>{t(be).configured&&ht(br)})}E(()=>{h(ce,t(be).name),Ie=it(ve,1,"secret-status svelte-sh54s5",null,Ie,{configured:t(be).configured}),h(bt,t(be).configured?"Configured":"Missing value"),V(Be,"aria-label",`${t(be).configured?"Replace":"Set value for"} ${t(be).name}`),V(Be,"aria-disabled",t(c)),h(Ae,t(be).configured?"Replace":"Set value")}),Kt("toggle",tt,S),Q("click",Be,ht=>w(ht,t(be).name)),g(te,_e)}),g(U,M)},B=U=>{var M=xf();g(U,M)};D(T,U=>{t(s).length?U(se):U(B,-1)})}var K=o(T,2);{var re=U=>{var M=jf(),he=m(M,!0);E(()=>h(he,t(d))),g(U,M)};D(K,U=>{t(d)&&U(re)})}var ee=o(K,2);{var oe=U=>{var M=Ef(),he=m(M,!0);E(()=>h(he,t(l))),g(U,M)};D(ee,U=>{t(l)&&U(oe)})}E(()=>{h(O,`${t(s).length??""} ${t(s).length===1?"variable":"variables"}`),V(ae,"aria-disabled",t(c))}),Kt("toggle",Z,S),Q("click",ae,U=>w(U,"")),g(r,A),It()}er(["click"]);function Pf(r,e=!1){const a={json:!1,tokens:[{text:r,kind:"plain"}]};if(e||!r.trim())return a;try{JSON.parse(r)}catch{return a}const s=r.match(/"(?:\\.|[^"\\])*"|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?|true|false|null|[{}\[\],:]/g)??[],n=[];let i=0;const c=(d,v="plain")=>n.push({text:d,kind:v}),l=()=>c(`
21
+ `+" ".repeat(i));return s.forEach((d,v)=>{d==="{"||d==="["?(c(d),i++,s[v+1]!==(d==="{"?"}":"]")&&l()):d==="}"||d==="]"?(i--,s[v-1]!==(d==="}"?"{":"[")&&l(),c(d)):d===","?(c(d),l()):d===":"?c(": "):c(d,d.startsWith('"')?s[v+1]===":"?"key":"string":/^(true|false|null)$/.test(d)?"literal":"number")}),{json:!0,tokens:n}}var Rf=y("<span> </span>"),Af=y('<code class="svelte-1eh4gal"></code>'),Lf=y('<p role="alert" class="svelte-1eh4gal"> </p>'),Tf=y('<div class="body-viewer svelte-1eh4gal"><div class="body-toolbar svelte-1eh4gal"><span> </span><button class="svelte-1eh4gal"><!><span aria-live="polite"> </span></button></div> <pre role="region" tabindex="0" class="svelte-1eh4gal"><!></pre> <!></div>');function dc(r,e){Tt(e,!0);let a=Re(e,"encoded",3,!1),s=Re(e,"label",3,"response"),n=Re(e,"truncated",3,!1);const i=F(()=>Pf(e.data,a()));let c=R(!1),l=R("");yr(()=>{e.data,u(c,!1),u(l,"")});async function d(){try{await navigator.clipboard.writeText(e.data),u(c,!0),u(l,"")}catch{u(l,"Could not copy. Select the response text and copy it manually.")}}var v=Tf(),p=f(v),_=f(p),w=m(_),S=o(_),j=f(S);{var C=ae=>{_i(ae,{size:13})},q=ae=>{Mn(ae,{size:13})};D(j,ae=>{t(c)?ae(C):ae(q,-1)})}var b=o(j),I=m(b,!0),A=o(p,2),L=f(A);{var P=ae=>{var Y=Af();He(Y,21,()=>t(i).tokens,Ht,($,X)=>{var T=Rf(),se=m(T,!0);E(()=>{it(T,1,Jl(t(X).kind),"svelte-1eh4gal"),h(se,t(X).text)}),g($,T)}),g(ae,Y)},W=ae=>{var Y=go("(empty body)");g(ae,Y)};D(L,ae=>{e.data?ae(P):ae(W,-1)})}var O=o(A,2);{var Z=ae=>{var Y=Lf(),$=m(Y,!0);E(()=>h($,t(l))),g(ae,Y)};D(O,ae=>{t(l)&&ae(Z)})}E(()=>{h(w,`${a()?"Base64":t(i).json?"JSON":"Text"}${n()?" · partial":""}`),V(S,"aria-label",`Copy ${s()}`),V(S,"title",n()?"Copy captured portion":`Copy ${s()}`),h(I,t(c)?"Copied":`Copy ${s()}`),V(A,"aria-label",`${s()} content`)}),Q("click",S,d),g(r,v),It()}er(["click"]);const Yn=(r,e=Oa,a=Oa)=>{var s=Qr(),n=Ye(s);{var i=l=>{var d=Nf();He(d,21,e,Ht,(v,p)=>{var _=F(()=>eo(t(p),2));let w=()=>t(_)[0],S=()=>t(_)[1];var j=If(),C=f(j),q=m(C,!0),b=o(C),I=m(b,!0);E(()=>{h(q,w()),h(I,S()||"(empty)")}),g(v,j)}),g(l,d)},c=l=>{var d=Df(),v=m(d,!0);E(()=>h(v,a())),g(l,d)};D(n,l=>{e().length?l(i):l(c,-1)})}g(r,s)},Go=(r,e=Oa,a=Oa)=>{var s=Uf(),n=f(s),i=m(n),c=o(n,2);{var l=v=>{var p=zf(),_=Ye(p);Yn(_,()=>a().entries,()=>"No headers.");var w=o(_,2);{var S=j=>{var C=Mf();g(j,C)};D(w,j=>{a().truncated&&j(S)})}g(v,p)},d=v=>{var p=Of();g(v,p)};D(c,v=>{a()?v(l):v(d,-1)})}E(()=>h(i,`${e()??""}${a()?` (${a().entries.length})`:""}`)),g(r,s)},Ii=(r,e=Oa,a=Oa)=>{var s=Kf(),n=Ye(s),i=m(n,!0),c=o(n,2);{var l=v=>{var p=Hf(),_=Ye(p),w=m(_),S=o(_,2);{let j=F(()=>a().encoding==="base64"),C=F(()=>e()==="Request body"?"request body":"response"),q=F(()=>a().truncated||!a().complete);dc(S,{get data(){return a().data},get encoded(){return t(j)},get label(){return t(C)},get truncated(){return t(q)}})}E(j=>h(w,`${j??""} bytes${a().truncated?" · partial capture":""}${a().complete?"":" · incomplete transfer"}${a().encoding==="base64"?" · Base64":""}${a().contentEncoding?` · ${a().contentEncoding} encoded`:""}`),[()=>a().bytes.toLocaleString()]),g(v,p)},d=v=>{var p=Bf();g(v,p)};D(c,v=>{a()?v(l):v(d,-1)})}E(()=>h(i,e())),g(r,s)};var If=y('<div class="svelte-s74nzf"><dt class="svelte-s74nzf"> </dt><dd class="svelte-s74nzf"> </dd></div>'),Nf=y('<dl class="svelte-s74nzf"></dl>'),Df=y('<p class="svelte-s74nzf"> </p>'),Mf=y('<p class="svelte-s74nzf">Header capture limit reached; some headers were omitted.</p>'),zf=y("<!> <!>",1),Of=y('<p class="svelte-s74nzf">Headers were not captured for this request.</p>'),Uf=y('<details class="svelte-s74nzf"><summary class="svelte-s74nzf"> </summary> <!></details>'),Hf=y('<p class="svelte-s74nzf"> </p> <!>',1),Bf=y('<p class="svelte-s74nzf">This body was not captured. Make a new request through the LocalDeck URL.</p>'),Kf=y('<h4 class="svelte-s74nzf"> </h4> <!>',1),Ff=y('<p class="svelte-s74nzf">Request cookies were not captured.</p>'),Vf=y('<p class="svelte-s74nzf">Response cookies were not captured.</p>'),Wf=y('<p role="status" class="svelte-s74nzf">Loading response…</p>'),$f=y('<p role="alert" class="svelte-s74nzf"> </p><!>',1),Gf=y('<h4 class="svelte-s74nzf">Replay response</h4> <p class="svelte-s74nzf"> </p> <!>',1),Yf=y('<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 vc(r,e){Tt(e,!0);let a=Re(e,"replayResult",3,null),s=R(null),n=R(!1),i=R(""),c;Nd(()=>c==null?void 0:c.abort());async function l(ee){if(!(!ee.currentTarget.open||t(s)||t(n))){if(!e.record.responseBodyId){u(s,e.record.responseBody??null,!0);return}c=new AbortController,u(n,!0),u(i,"");try{const oe=await fetch(`/api/services/${encodeURIComponent(e.record.service)}/response?requestId=${encodeURIComponent(e.record.id)}`,{signal:c.signal}),U=await oe.json();if(!oe.ok)throw new Error(U.error??"Unable to load response");u(s,U,!0)}catch(oe){c.signal.aborted||u(i,oe instanceof Error?oe.message:"Unable to load response",!0)}finally{u(n,!1)}}}const d=F(()=>{var ee;return(((ee=e.record.requestHeaders)==null?void 0:ee.entries)??[]).filter(([oe])=>oe.toLowerCase()==="cookie").flatMap(([,oe])=>oe.split(";").map(U=>{const M=U.indexOf("=");return M<0?[U.trim(),""]:[U.slice(0,M).trim(),U.slice(M+1).trim()]}))}),v=F(()=>{var ee;return(((ee=e.record.responseHeaders)==null?void 0:ee.entries)??[]).filter(([oe])=>oe.toLowerCase()==="set-cookie")}),p=F(()=>[...new URLSearchParams(e.record.path.includes("?")?e.record.path.slice(e.record.path.indexOf("?")+1):"")]);var _=Yf(),w=f(_);Go(w,()=>"Request headers",()=>e.record.requestHeaders);var S=o(w,2);Go(S,()=>"Response headers",()=>e.record.responseHeaders);var j=o(S,2),C=f(j),q=m(C),b=o(C,2);Yn(b,()=>t(p),()=>"No query parameters.");var I=o(j,2),A=o(f(I),4);{var L=ee=>{Yn(ee,()=>t(d),()=>e.record.requestHeaders.truncated?"No cookies in the captured headers.":"No cookies sent.")},P=ee=>{var oe=Ff();g(ee,oe)};D(A,ee=>{e.record.requestHeaders?ee(L):ee(P,-1)})}var W=o(A,4);{var O=ee=>{Yn(ee,()=>t(v),()=>e.record.responseHeaders.truncated?"No cookies in the captured headers.":"No cookies set.")},Z=ee=>{var oe=Vf();g(ee,oe)};D(W,ee=>{e.record.responseHeaders?ee(O):ee(Z,-1)})}var ae=o(I,2),Y=o(f(ae),2);Ii(Y,()=>"Request body",()=>e.record.requestBody);var $=o(ae,2),X=o(f($),2);{var T=ee=>{var oe=Wf();g(ee,oe)},se=ee=>{var oe=$f(),U=Ye(oe),M=m(U,!0),he=o(U);Ii(he,()=>"Saved preview",()=>e.record.responseBody),E(()=>h(M,t(i))),g(ee,oe)},B=ee=>{Ii(ee,()=>"Response body",()=>t(s)??e.record.responseBody)};D(X,ee=>{t(n)?ee(T):t(i)?ee(se,1):ee(B,-1)})}var K=o(X,2);{var re=ee=>{var oe=Gf(),U=o(Ye(oe),2),M=m(U),he=o(U,2);dc(he,{get data(){return a().body},label:"replay response",get truncated(){return a().truncated}}),E(()=>h(M,`HTTP ${a().status??""} · ${a().durationMs??""} ms${a().truncated?" · preview truncated at 64 KiB":""}`)),g(ee,oe)};D(K,ee=>{a()&&ee(re)})}E(()=>h(q,`Query parameters (${t(p).length??""})`)),Kt("toggle",$,l),g(r,_),It()}var Jf=y('<li class="svelte-n8kbyu"> </li>'),Zf=y("<ul></ul>"),Xf=y('<form class="svelte-n8kbyu"><label class="svelte-n8kbyu">Check name<input required="" maxlength="120" placeholder="Homepage responds" class="svelte-n8kbyu"/></label> <label class="svelte-n8kbyu">Expected HTTP status<input type="number" required="" min="100" max="599" step="1" placeholder="200" class="svelte-n8kbyu"/></label> <button class="svelte-n8kbyu">Save as check</button></form>'),Qf=y('<p class="svelte-n8kbyu">This request cannot be saved as an executable check. Checks require GET/HEAD without a body or sensitive path values.</p>'),ep=y('<pre role="region" tabindex="0" aria-label="Sanitized cURL preview" class="svelte-n8kbyu"> </pre> <!> <div class="actions svelte-n8kbyu"><button class="svelte-n8kbyu">Copy sanitized cURL</button><button class="svelte-n8kbyu">Copy structured export</button></div> <!>',1),tp=y('<p role="alert" class="error svelte-n8kbyu"> </p>'),rp=y('<p role="status" class="svelte-n8kbyu"> </p>'),ap=y('<section aria-label="Request reproduction" class="svelte-n8kbyu"><h4 class="svelte-n8kbyu">Reproduce this request</h4> <p class="svelte-n8kbyu">Review a sanitized export or save an unauthenticated GET/HEAD check. Saving does not send a request.</p> <button class="svelte-n8kbyu"> </button> <!> <!><!></section>');function fc(r,e){Tt(e,!0);let a=R(null),s=R(!1),n=R(""),i=R(""),c=R(""),l=R(void 0);yr(()=>{e.record.id,e.record.service,u(a,null),u(n,""),u(i,""),u(c,""),u(l,void 0)});async function d(){if(t(s))return;const L=e.record;u(s,!0),u(n,"");try{const P=await fetch(`/api/services/${encodeURIComponent(L.service)}/reproduction?requestId=${encodeURIComponent(L.id)}`),W=await P.json();if(!P.ok)throw new Error(W.error??"Export unavailable");e.record===L&&u(a,W,!0)}catch(P){e.record===L&&u(n,P instanceof Error?P.message:"Export unavailable",!0)}finally{u(s,!1)}}async function v(L=!1){if(t(a))try{await navigator.clipboard.writeText(L?JSON.stringify(t(a).request,null,2):t(a).curl),u(i,L?"Structured request copied":"Sanitized cURL copied",!0)}catch{u(n,"Clipboard unavailable. Select and copy the preview text.")}}async function p(){var P;if(!e.service||!((P=t(a))!=null&&P.executable)||t(s)||!t(l))return;const L=e.record;u(s,!0),u(n,""),u(i,"");try{const W=await fetch(`/api/projects/${encodeURIComponent(e.service.projectId)}/checks`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({requestId:L.id,serviceKey:L.service,name:t(c),expectedStatus:t(l)})}),O=await W.json();if(!W.ok)throw new Error(O.error??"Could not save check");e.record===L&&u(i,"Check saved. Open Checks to run it explicitly.")}catch(W){e.record===L&&u(n,W instanceof Error?W.message:"Could not save check",!0)}finally{u(s,!1)}}var _=ap(),w=o(f(_),4),S=m(w,!0),j=o(w,2);{var C=L=>{var P=ep(),W=Ye(P),O=m(W,!0),Z=o(W,2);{var ae=K=>{var re=Zf();He(re,21,()=>t(a).omitted,Ht,(ee,oe)=>{var U=Jf(),M=m(U,!0);E(()=>h(M,t(oe))),g(ee,U)}),g(K,re)};D(Z,K=>{t(a).omitted.length&&K(ae)})}var Y=o(Z,2),$=f(Y),X=o($),T=o(Y,2);{var se=K=>{var re=Xf(),ee=f(re),oe=o(f(ee)),U=o(ee,2),M=o(f(U)),he=o(U,2);E(te=>he.disabled=te,[()=>t(s)||!t(c).trim()||!t(l)]),Kt("submit",re,te=>{te.preventDefault(),p()}),Gt(oe,()=>t(c),te=>u(c,te)),Gt(M,()=>t(l),te=>u(l,te)),g(K,re)},B=K=>{var re=Qf();g(K,re)};D(T,K=>{t(a).executable&&e.service?K(se):K(B,-1)})}E(()=>h(O,t(a).curl)),Q("click",$,()=>v()),Q("click",X,()=>v(!0)),g(L,P)};D(j,L=>{t(a)&&L(C)})}var q=o(j,2);{var b=L=>{var P=tp(),W=m(P,!0);E(()=>h(W,t(n))),g(L,P)};D(q,L=>{t(n)&&L(b)})}var I=o(q);{var A=L=>{var P=rp(),W=m(P,!0);E(()=>h(W,t(i))),g(L,P)};D(I,L=>{t(i)&&L(A)})}E(()=>{w.disabled=t(s),h(S,t(s)?"Working…":t(a)?"Refresh preview":"Preview sanitized request")}),Q("click",w,d),g(r,_),It()}er(["click"]);var sp=y("<option> </option>"),Yo=y('<p class="alert error svelte-1vefmtr" role="alert"> </p>'),np=y('<p role="status">Loading comparison…</p>'),Ni=y('<p class="svelte-1vefmtr"> </p>'),ip=y('<div class="alert svelte-1vefmtr"><strong>Limited evidence — no conclusion yet</strong><p class="svelte-1vefmtr"> </p><!></div>'),op=y('<p class="warn svelte-1vefmtr">Some summary details were shortened or omitted.</p>'),lp=y('<article class="summary svelte-1vefmtr"><h3 class="svelte-1vefmtr"> <span class="svelte-1vefmtr"> </span></h3><div class="metrics svelte-1vefmtr"><div><strong class="svelte-1vefmtr"> </strong><span class="svelte-1vefmtr">request samples</span></div><div><strong class="svelte-1vefmtr"> </strong><span class="svelte-1vefmtr">HTTP error rate</span></div><div><strong class="svelte-1vefmtr"> </strong><span class="svelte-1vefmtr">error log lines</span></div><div><strong class="svelte-1vefmtr"> </strong><span class="svelte-1vefmtr">restarts</span></div></div><p class="svelte-1vefmtr"> </p><!></article>'),cp=y('<li class="svelte-1vefmtr"> </li>'),up=y('<ul class="svelte-1vefmtr"></ul>'),dp=y('<p class="svelte-1vefmtr">No matching signatures in retained evidence.</p>'),vp=y('<article class="signatures svelte-1vefmtr"><h3 class="svelte-1vefmtr"> <span class="svelte-1vefmtr"> </span></h3><!></article>'),fp=y('<tr><th scope="row" class="svelte-1vefmtr"> </th><td class="svelte-1vefmtr"> </td><td class="svelte-1vefmtr"> </td><td class="svelte-1vefmtr"> </td><td class="svelte-1vefmtr"> </td></tr>'),pp=y('<details><summary class="svelte-1vefmtr">Route latency and request samples</summary><div class="table-scroll svelte-1vefmtr"><table class="svelte-1vefmtr"><thead><tr><th scope="col" class="svelte-1vefmtr">Route</th><th scope="col" class="svelte-1vefmtr">Before samples</th><th scope="col" class="svelte-1vefmtr">Before avg</th><th scope="col" class="svelte-1vefmtr">After samples</th><th scope="col" class="svelte-1vefmtr">After avg</th></tr></thead><tbody></tbody></table></div></details>'),hp=y('<section class="comparison svelte-1vefmtr" aria-label="Baseline comparison"><header class="svelte-1vefmtr"><div><h2 class="svelte-1vefmtr"> </h2><p class="svelte-1vefmtr"> </p></div><button>Close comparison</button></header> <!> <div class="summary-grid svelte-1vefmtr"></div> <p class="muted svelte-1vefmtr">Window lengths and traffic volumes may differ. “Not observed again” does not establish that an issue is fixed.</p> <div class="summary-grid svelte-1vefmtr"></div> <!></section>'),gp=y('<label class="svelte-1vefmtr"><input type="checkbox"/> </label>'),mp=y('<div class="alert svelte-1vefmtr"><strong>Partial history</strong><!></div>'),_p=y('<div class="empty svelte-1vefmtr"><h2 class="svelte-1vefmtr"> </h2><p class="svelte-1vefmtr"> </p></div>'),yp=y('<button><span></span><span class="event-copy svelte-1vefmtr"><span class="event-source svelte-1vefmtr"> <span class="svelte-1vefmtr"> </span></span><span class="event-title svelte-1vefmtr"> </span></span><time class="svelte-1vefmtr"> </time></button>'),bp=y('<button class="load-more svelte-1vefmtr"> </button>'),wp=y('<p role="status" class="svelte-1vefmtr"> </p>'),Jo=y('<p class="alert svelte-1vefmtr" role="status"> </p>'),kp=y('<p role="status" class="svelte-1vefmtr">Loading event…</p>'),Sp=y('<p role="status" class="svelte-1vefmtr">Loading captured metadata…</p>'),xp=y("<!><!>",1),jp=y('<section class="request-evidence svelte-1vefmtr" aria-label="Captured request evidence"><h3 class="svelte-1vefmtr">Captured request evidence</h3><!></section>'),Ep=y('<button class="nearby svelte-1vefmtr"> <span class="svelte-1vefmtr"> </span></button>'),qp=y('<p class="muted svelte-1vefmtr">No nearby events in this loaded window.</p>'),Cp=y('<dl class="svelte-1vefmtr"><dt class="svelte-1vefmtr">Timestamp</dt><dd class="svelte-1vefmtr"> </dd><dt class="svelte-1vefmtr">Source</dt><dd class="svelte-1vefmtr"> </dd><dt class="svelte-1vefmtr">Type</dt><dd class="svelte-1vefmtr"> </dd><dt class="svelte-1vefmtr">Event ID</dt><dd class="svelte-1vefmtr"> </dd></dl><pre class="svelte-1vefmtr"> </pre><!><!><h3 class="svelte-1vefmtr">Nearby in time</h3><p class="muted svelte-1vefmtr">Temporal proximity is context, not proven causation. These are nearby events in the loaded, filtered results.</p><!>',1),Pp=y('<aside aria-label="Event inspector" class="svelte-1vefmtr"><header class="svelte-1vefmtr"><h2 tabindex="-1" class="svelte-1vefmtr">Event detail</h2><button>Close</button></header><button>Copy event link</button><!><!></aside>'),Rp=y('<section class="page-shell activity svelte-1vefmtr"><header class="page-heading svelte-1vefmtr"><div><p class="eyebrow svelte-1vefmtr"> </p><h1>Activity</h1><p class="page-subtitle">Follow incidents across services, then compare the evidence around a change.</p></div><div class="live-controls svelte-1vefmtr"><span> </span><button> </button><button>Refresh</button></div></header> <section class="baseline-bar svelte-1vefmtr" aria-label="Baseline controls"><div><strong>Before your change</strong><p class="svelte-1vefmtr">Save a five-minute evidence window to compare later.</p></div><form class="svelte-1vefmtr"><input aria-label="Baseline label" placeholder="Optional baseline label" maxlength="100" class="svelte-1vefmtr"/><button class="primary"> </button></form><label class="saved svelte-1vefmtr">Compare with<select aria-label="Saved baseline" class="svelte-1vefmtr"><option>Choose a baseline</option><!></select></label></section> <!> <!> <!> <!> <form class="filters svelte-1vefmtr"><div class="segmented svelte-1vefmtr" aria-label="Activity filter"><button type="button" class="svelte-1vefmtr">Incidents</button><button type="button" class="svelte-1vefmtr">All activity</button></div><input aria-label="Search activity" placeholder="Search activity…" maxlength="200" class="svelte-1vefmtr"/><button>Search</button><details class="service-filter svelte-1vefmtr"><summary class="svelte-1vefmtr"> </summary><div class="service-options svelte-1vefmtr"><button type="button" class="svelte-1vefmtr">All services</button><!></div></details></form> <div class="timeline-meta svelte-1vefmtr"><span> </span><span>Newest first</span></div> <!> <div><div class="timeline svelte-1vefmtr" aria-label="Project activity"><!> <!> <!></div> <!></div></section>');function Ap(r,e){Tt(e,!0);let a=R(at([])),s=R(at([])),n=R(at([])),i=R("incidents"),c=R(""),l=R(at([])),d=R(at({items:[],coverage:{partial:!1,reasons:[]}})),v=R(!0),p=R(!1),_=R(!1),w=R(""),S=R(0),j=R(null),C=R(""),q=R(""),b=R(null),I=R(null),A=R(!1),L=R(""),P=R(!1),W=R(""),O=R(!1),Z=R(""),ae=R(""),Y=R(""),$=R(void 0),X=null,T=0,se=0,B=0,K=0,re;const ee=()=>`/api/projects/${encodeURIComponent(e.projectId)}`,oe=H=>new Date(H).toLocaleString(),U=H=>`${Math.max(0,(H.to-H.from)/6e4).toFixed(1)} min`,M=H=>H===null?"No requests":`${(H*100).toFixed(1)}%`;let he=F(()=>t(j)?t(a).filter(H=>H.id!==t(j).id&&Math.abs(H.ts-t(j).ts)<=3e4).slice(0,5):[]);async function te(H,G){const le=await fetch(H,{...G,signal:re==null?void 0:re.signal}),Ce=await le.json();if(!le.ok)throw new Error(Ce.error??"Activity request failed");return Ce}function be(){try{localStorage.setItem(`localdeck.activity.${e.projectId}`,JSON.stringify({filter:t(i),query:t(c),services:t(l)}))}catch{}}function _e(){const H=new URLSearchParams({filter:t(i),limit:"100"});return t(c).trim()&&H.set("query",t(c).trim()),t(l).length&&H.set("services",t(l).join(",")),H}async function de(H=!1){if(t(p)&&H)return;const G=++se,le=T,Ce=ee(),Le=_e();H&&t(d).nextCursor&&Le.set("cursor",t(d).nextCursor),u(p,!0),u(w,"");try{const Je=await te(`${Ce}/activity?${Le}`);if(le!==T||G!==se)return;u(d,Je,!0),u(a,H?[...t(a),...Je.items.filter(St=>!t(a).some(ir=>ir.id===St.id))]:Je.items,!0),u(S,Date.now(),!0)}catch(Je){le===T&&G===se&&u(w,Je instanceof Error?Je.message:"Activity unavailable",!0)}finally{le===T&&G===se&&u(p,!1)}}async function ce(){const H=T;try{const G=await te(`${ee()}/baselines`);H===T&&u(s,G.items,!0)}catch(G){H===T&&u(w,G instanceof Error?G.message:"Baselines unavailable",!0)}}async function ve(H,G=!1){if(G&&t(P))return;const le=++K,Ce=T;if(G||u(b,null),u(ae,""),!H){u(P,!1);return}u(P,!0);try{const Le=await te(`${ee()}/baselines/${encodeURIComponent(H)}`);Ce===T&&le===K&&u(b,Le,!0)}catch(Le){Ce===T&&le===K&&u(ae,Le instanceof Error?Le.message:"Baseline expired or unavailable",!0)}finally{Ce===T&&le===K&&u(P,!1)}}async function Ie(H,G,le){u(A,!0);try{const Ce=await te(`${ee()}/activity/${encodeURIComponent(H)}/evidence`);if(G!==T||le!==B)return;u(I,Ce,!0),Ce.request||u(L,"The original request evidence has expired or was cleared. The timeline summary remains available.")}catch(Ce){G===T&&le===B&&u(L,Ce instanceof Error?`Request evidence unavailable: ${Ce.message}`:"The original request evidence is no longer available.",!0)}finally{G===T&&le===B&&u(A,!1)}}async function bt(H){var Ce;const G=++B,le=T;if(u(C,H,!0),u(j,null),u(I,null),u(A,!1),u(L,""),u(Z,""),u(W,""),u(O,!!H),!!H)try{let Le=t(a).find(Je=>Je.id===H&&(!t(l).length||t(l).includes(Je.service)));if(!Le){const Je=new URLSearchParams({eventId:H,filter:"all",limit:"1"});t(l).length&&Je.set("services",t(l).join(",")),Le=(await te(`${ee()}/activity?${Je}`)).items[0]}if(le!==T||G!==B)return;u(j,Le??null,!0),Le||u(Z,"This event has expired, was cleared, or is outside the selected service scope."),(Le==null?void 0:Le.kind)==="request"&&Ie(Le.id,le,G),await ms(),le===T&&G===B&&((Ce=t($))==null||Ce.focus())}catch(Le){le===T&&G===B&&u(Z,Le instanceof Error?Le.message:"Event unavailable",!0)}}async function vt(){const H=t(C);try{await navigator.clipboard.writeText(location.href),t(C)===H&&u(W,"Link copied")}catch{t(C)===H&&u(W,"Could not copy. Copy the address from your browser.")}}function tt(){const H=new URLSearchParams(location.hash.slice(1)),G=H.get("event")??"";G!==t(C)&&bt(G);const le=H.get("baseline")??"";le!==t(q)&&(u(q,le,!0),ve(le))}function Be(H,G){const le=new URLSearchParams(location.hash.slice(1));G?le.set(H,G):le.delete(H),history.pushState(null,"",`${location.pathname}${location.search}${le.size?"#"+le:""}`),tt()}async function Ae(){Be("event",""),await ms(),X==null||X.focus()}function Ne(H,G){G instanceof HTMLElement&&!G.closest("aside")&&(X=G),Be("event",H.id)}function Qe(){be(),de(),t(C)&&bt(t(C))}function Ue(H){u(l,t(l).includes(H)?t(l).filter(G=>G!==H):[...t(l),H],!0),Qe()}async function br(){if(t(_))return;const H=T;u(_,!0),u(w,"");try{const G=await te(`${ee()}/baselines`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({label:t(Y),...t(l).length?{services:t(l)}:{}})});if(H!==T)return;await ce(),H===T&&(u(Y,""),Be("baseline",G.id))}catch(G){H===T&&u(w,G instanceof Error?G.message:"Baseline could not be saved",!0)}finally{H===T&&u(_,!1)}}async function ht(){const H=++T;re==null||re.abort(),re=new AbortController,++se,++B,++K,u(I,null),u(A,!1),u(L,""),u(a,[],!0),u(s,[],!0),u(n,[],!0),u(d,{items:[],coverage:{partial:!1,reasons:[]}},!0),u(j,null),u(C,""),u(q,""),u(b,null),u(P,!1),u(W,""),u(O,!1),u(p,!1),u(_,!1),u(S,0),u(w,""),u(Y,""),u(Z,""),u(ae,""),u(v,!0),u(i,"incidents"),u(c,""),u(l,[],!0);try{const G=JSON.parse(localStorage.getItem(`localdeck.activity.${e.projectId}`)??"null");G&&(u(i,G.filter==="all"?"all":"incidents",!0),u(c,typeof G.query=="string"?G.query.slice(0,200):"",!0),u(l,Array.isArray(G.services)?G.services.filter(le=>typeof le=="string"&&le.startsWith(`${e.projectId}:`)):[],!0))}catch{}try{const G=await te(ee());if(H!==T)return;u(n,[...new Set([...G.commands.map(le=>`${e.projectId}:${le.name}`),...(G.services??[]).map(le=>le.key)])],!0),u(l,t(l).filter(le=>t(n).includes(le)),!0)}catch(G){H===T&&u(w,G instanceof Error?G.message:"Services unavailable",!0)}H===T&&(await Promise.all([de(),ce()]),H===T&&tt())}const dr=F(()=>e.projectId);yr(()=>{t(dr),Pa(()=>void ht())}),Dn(()=>{const H=()=>tt(),G=Ce=>{Ce.key==="Escape"&&t(O)&&(Ce.preventDefault(),Ae())};window.addEventListener("keydown",G),window.addEventListener("hashchange",H),window.addEventListener("popstate",H);const le=setInterval(()=>{e.connected&&t(v)&&!t(O)&&(t(p)||de(),t(q)&&!t(P)&&ve(t(q),!0))},2500);return()=>{clearInterval(le),window.removeEventListener("keydown",G),window.removeEventListener("hashchange",H),window.removeEventListener("popstate",H),re==null||re.abort(),++T}});var sa=Rp(),ma=f(sa),Ra=f(ma),Wr=f(Ra),_a=m(Wr),ya=o(Ra),na=f(ya);let wr;var tr=m(na,!0),zr=o(na),Or=m(zr,!0),Aa=o(zr),La=o(ma,2),Ta=o(f(La)),ia=f(Ta),kr=o(ia),ar=m(kr,!0),Ba=o(Ta),Sr=o(f(Ba)),oa=f(Sr);oa.value=oa.__value="";var Qa=o(oa);He(Qa,17,()=>t(s),H=>H.id,(H,G)=>{var le=sp(),Ce=m(le),Le={};E(Je=>{h(Ce,`${t(G).label??""} · ${Je??""}`),Le!==(Le=t(G).id)&&(le.value=(le.__value=Le)??"")},[()=>oe(t(G).ts)]),g(H,le)});var $r;gi(Sr);var Ia=o(La,2);{var ie=H=>{var G=Yo(),le=m(G,!0);E(()=>h(le,t(w))),g(H,G)};D(Ia,H=>{t(w)&&H(ie)})}var ge=o(Ia,2);{var Se=H=>{var G=Yo(),le=m(G,!0);E(()=>h(le,t(ae))),g(H,G)};D(ge,H=>{t(ae)&&H(Se)})}var z=o(ge,2);{var ne=H=>{var G=np();g(H,G)};D(z,H=>{t(q)&&!t(b)&&!t(ae)&&H(ne)})}var ke=o(z,2);{var Te=H=>{var G=hp(),le=f(G),Ce=f(le),Le=f(Ce),Je=m(Le,!0),St=o(Le),ir=m(St),Tr=o(Ce),Ir=o(le,2);{var Ze=qt=>{var ut=ip(),Vt=o(f(ut)),hr=m(Vt,!0),or=o(Vt);He(or,17,()=>t(b).coverage.reasons,Ht,(lr,gr)=>{var Wt=Ni(),Zt=m(Wt,!0);E(()=>h(Zt,t(gr))),g(lr,Wt)}),E(()=>h(hr,t(b).insufficientEvidence?"Fewer than five requests in at least one window. Generate representative traffic before drawing conclusions.":"")),g(qt,ut)};D(Ir,qt=>{(t(b).insufficientEvidence||t(b).coverage.partial)&&qt(Ze)})}var wt=o(Ir,2);He(wt,21,()=>[{name:"Before",data:t(b).before},{name:"After",data:t(b).after}],Ht,(qt,ut)=>{var Vt=lp(),hr=f(Vt),or=f(hr),lr=o(or),gr=m(lr),Wt=o(hr),Zt=f(Wt),Gr=f(Zt),Xt=m(Gr,!0),xr=o(Zt),jr=f(xr),k=m(jr,!0),N=o(xr),J=f(N),me=m(J,!0),ue=o(N),pe=f(ue),ze=m(pe,!0),Pe=o(Wt),Fe=m(Pe),kt=o(Pe);{var Ge=qe=>{var gt=op();g(qe,gt)};D(kt,qe=>{t(ut).data.truncated&&qe(Ge)})}E((qe,gt,Ct,mr)=>{h(or,`${t(ut).name??""} `),h(gr,`${qe??""} window`),h(Xt,t(ut).data.requests),h(k,gt),h(me,t(ut).data.errorLines),h(ze,t(ut).data.restarts),h(Fe,`${t(ut).data.requestErrors??""} failed requests · ${Ct??""} — ${mr??""}`)},[()=>U(t(ut).data),()=>M(t(ut).data.errorRate),()=>oe(t(ut).data.from),()=>oe(t(ut).data.to)]),g(qt,Vt)});var ct=o(wt,4);He(ct,21,()=>[{title:"Newly observed",items:t(b).newlyObserved},{title:"Not observed again",items:t(b).notObservedAgain}],Ht,(qt,ut)=>{var Vt=vp(),hr=f(Vt),or=f(hr),lr=o(or),gr=m(lr,!0),Wt=o(hr);{var Zt=Xt=>{var xr=up();He(xr,21,()=>t(ut).items,Ht,(jr,k)=>{var N=cp(),J=m(N,!0);E(()=>h(J,t(k))),g(jr,N)}),g(Xt,xr)},Gr=Xt=>{var xr=dp();g(Xt,xr)};D(Wt,Xt=>{t(ut).items.length?Xt(Zt):Xt(Gr,-1)})}E(()=>{h(or,`${t(ut).title??""} `),h(gr,t(ut).items.length)}),g(qt,Vt)});var At=o(ct,2);{var pr=qt=>{var ut=pp(),Vt=o(f(ut)),hr=f(Vt),or=o(f(hr));He(or,21,()=>[...new Set([...t(b).before.routes,...t(b).after.routes].map(lr=>lr.route))],Ht,(lr,gr)=>{const Wt=F(()=>t(b).before.routes.find(Pe=>Pe.route===t(gr))),Zt=F(()=>t(b).after.routes.find(Pe=>Pe.route===t(gr)));var Gr=fp(),Xt=f(Gr),xr=m(Xt,!0),jr=o(Xt),k=m(jr,!0),N=o(jr),J=m(N,!0),me=o(N),ue=m(me,!0),pe=o(me),ze=m(pe,!0);E(()=>{var Pe,Fe;h(xr,t(gr)),h(k,((Pe=t(Wt))==null?void 0:Pe.count)??0),h(J,t(Wt)?`${t(Wt).avgLatencyMs} ms`:"—"),h(ue,((Fe=t(Zt))==null?void 0:Fe.count)??0),h(ze,t(Zt)?`${t(Zt).avgLatencyMs} ms`:"—")}),g(lr,Gr)}),g(qt,ut)};D(At,qt=>{(t(b).before.routes.length||t(b).after.routes.length)&&qt(pr)})}E(qt=>{var ut;h(Je,t(b).marker.label),h(ir,`${qt??""}${(ut=t(b).marker.git)!=null&&ut.branch?` · ${t(b).marker.git.branch}`:""}`)},[()=>oe(t(b).marker.ts)]),Q("click",Tr,()=>Be("baseline","")),g(H,G)};D(ke,H=>{t(b)&&H(Te)})}var Ve=o(ke,2),We=f(Ve),De=f(We),rt=o(De),Ut=o(We),ot=o(Ut,2),Me=f(ot),Mt=m(Me),Nt=o(Me),Dt=f(Nt),st=o(Dt);He(st,17,()=>t(n),Ht,(H,G)=>{var le=gp(),Ce=f(le),Le=o(Ce,1,!0);E((Je,St)=>{qs(Ce,Je),h(Le,St)},[()=>t(l).includes(t(G)),()=>t(G).split(":").slice(1).join(":")]),Q("change",Ce,()=>Ue(t(G))),g(H,le)});var Et=o(Ve,2),sr=f(Et),Lr=m(sr),nr=o(Et,2);{var vr=H=>{var G=mp(),le=o(f(G));He(le,17,()=>t(d).coverage.reasons,Ht,(Ce,Le)=>{var Je=Ni(),St=m(Je,!0);E(()=>h(St,t(Le))),g(Ce,Je)}),g(H,G)};D(nr,H=>{t(d).coverage.partial&&H(vr)})}var Ur=o(nr,2);let $e;var _t=f(Ur),Ft=f(_t);{var lt=H=>{var G=_p(),le=f(G),Ce=m(le,!0),Le=o(le),Je=m(Le,!0);E(()=>{h(Ce,t(p)?"Loading activity…":"No matching activity"),h(Je,t(p)?"Reading retained evidence.":"Try all activity, broaden the service selection, or generate traffic. Missing events do not prove recovery.")}),g(H,G)};D(Ft,H=>{t(a).length||H(lt)})}var Ke=o(Ft,2);He(Ke,17,()=>t(a),H=>H.id,(H,G)=>{var le=yp();let Ce;var Le=f(le);let Je;var St=o(Le),ir=f(St),Tr=f(ir),Ir=o(Tr),Ze=m(Ir),wt=o(ir),ct=m(wt,!0),At=o(St),pr=m(At,!0);E((qt,ut,Vt)=>{Ce=it(le,1,"event svelte-1vefmtr",null,Ce,{chosen:t(G).id===t(C)}),Je=it(Le,1,"event-dot svelte-1vefmtr",null,Je,{incident:t(G).severity==="error"}),h(Tr,`${qt??""} `),h(Ze,`${t(G).kind??""}${t(G).request?` · HTTP ${t(G).request.status}`:""}`),h(ct,t(G).title),V(At,"datetime",ut),h(pr,Vt)},[()=>t(G).service.split(":").slice(1).join(":"),()=>new Date(t(G).ts).toISOString(),()=>new Date(t(G).ts).toLocaleTimeString()]),Q("click",le,qt=>Ne(t(G),qt.currentTarget)),g(H,le)});var fe=o(Ke,2);{var Ee=H=>{var G=bp(),le=m(G,!0);E(()=>{G.disabled=t(p),h(le,t(p)?"Loading…":"Load older events")}),Q("click",G,()=>{u(v,!1),de(!0)}),g(H,G)};D(fe,H=>{t(d).nextCursor&&H(Ee)})}var Jt=o(_t,2);{var fr=H=>{var G=Pp(),le=f(G),Ce=f(le);Xa(Ce,ct=>u($,ct),()=>t($));var Le=o(Ce),Je=o(le),St=o(Je);{var ir=ct=>{var At=wp(),pr=m(At,!0);E(()=>h(pr,t(W))),g(ct,At)};D(St,ct=>{t(W)&&ct(ir)})}var Tr=o(St);{var Ir=ct=>{var At=Jo(),pr=m(At,!0);E(()=>h(pr,t(Z))),g(ct,At)},Ze=ct=>{var At=kp();g(ct,At)},wt=ct=>{var At=Cp(),pr=Ye(At),qt=o(f(pr)),ut=m(qt,!0),Vt=o(qt,2),hr=m(Vt,!0),or=o(Vt,2),lr=m(or),gr=o(or,2),Wt=m(gr,!0),Zt=o(pr),Gr=m(Zt,!0),Xt=o(Zt);{var xr=ue=>{var pe=Ni(),ze=m(pe);E(()=>h(ze,`HTTP ${t(j).request.status??""} · ${t(j).request.durationMs??""} ms · via ${t(j).request.via??""}`)),g(ue,pe)};D(Xt,ue=>{t(j).request&&ue(xr)})}var jr=o(Xt);{var k=ue=>{var pe=jp(),ze=o(f(pe));{var Pe=Ge=>{var qe=Sp();g(Ge,qe)},Fe=Ge=>{var qe=Jo(),gt=m(qe,!0);E(()=>h(gt,t(L))),g(Ge,qe)},kt=Ge=>{var qe=Qr(),gt=Ye(qe);Va(gt,()=>t(j).id,Ct=>{var mr=xp(),_r=Ye(mr);vc(_r,{get record(){return t(I).request}});var ba=o(_r);fc(ba,{get record(){return t(I).request},get service(){return t(I).service}}),g(Ct,mr)}),g(Ge,qe)};D(ze,Ge=>{var qe;t(A)?Ge(Pe):t(L)?Ge(Fe,1):(qe=t(I))!=null&&qe.request&&Ge(kt,2)})}g(ue,pe)};D(jr,ue=>{t(j).kind==="request"&&ue(k)})}var N=o(jr,3);{var J=ue=>{var pe=Qr(),ze=Ye(pe);He(ze,17,()=>t(he),Pe=>Pe.id,(Pe,Fe)=>{var kt=Ep(),Ge=f(kt),qe=o(Ge),gt=m(qe,!0);E(Ct=>{h(Ge,`${Ct??""} · ${t(Fe).service??""}`),h(gt,t(Fe).title)},[()=>new Date(t(Fe).ts).toLocaleTimeString()]),Q("click",kt,Ct=>Ne(t(Fe),Ct.currentTarget)),g(Pe,kt)}),g(ue,pe)},me=ue=>{var pe=qp();g(ue,pe)};D(N,ue=>{t(he).length?ue(J):ue(me,-1)})}E(ue=>{h(ut,ue),h(hr,t(j).service),h(lr,`${t(j).kind??""} · ${t(j).severity??""}`),h(Wt,t(j).id),h(Gr,t(j).title)},[()=>oe(t(j).ts)]),g(ct,At)};D(Tr,ct=>{t(Z)?ct(Ir):t(j)?ct(wt,-1):ct(Ze,1)})}Q("click",Le,Ae),Q("click",Je,vt),g(H,G)};D(Jt,H=>{t(O)&&H(fr)})}E(H=>{h(_a,`${e.projectName??""} / Debugging`),wr=it(na,1,"status svelte-1vefmtr",null,wr,{stale:!e.connected}),h(tr,e.connected?t(O)?"Live paused · inspecting":t(v)?"● Live":"Paused":"Disconnected · stale"),zr.disabled=t(O),h(Or,t(v)?"Pause live":"Resume live"),Aa.disabled=t(p)||!e.connected,kr.disabled=t(_)||!e.connected||!t(n).length,h(ar,t(_)?"Saving…":"Mark baseline"),$r!==($r=t(q))&&(Sr.value=(Sr.__value=$r)??"",dn(Sr,$r)),V(De,"aria-pressed",t(i)==="incidents"),V(rt,"aria-pressed",t(i)==="all"),h(Mt,`Services · ${(t(l).length||"all")??""}`),h(Lr,`${t(a).length??""} retained events${H??""}`),$e=it(Ur,1,"workspace svelte-1vefmtr",null,$e,{"with-inspector":t(O)}),V(_t,"aria-busy",t(p))},[()=>t(S)?` · Updated ${new Date(t(S)).toLocaleTimeString()}`:""]),Q("click",zr,()=>u(v,!t(v))),Q("click",Aa,()=>{de(),t(q)&&ve(t(q),!0)}),Kt("submit",Ta,H=>{H.preventDefault(),br()}),Gt(ia,()=>t(Y),H=>u(Y,H)),Q("change",Sr,H=>Be("baseline",H.currentTarget.value)),Kt("submit",Ve,H=>{H.preventDefault(),Qe()}),Q("click",De,()=>{u(i,"incidents"),Qe()}),Q("click",rt,()=>{u(i,"all"),Qe()}),Gt(Ut,()=>t(c),H=>u(c,H)),Q("click",Dt,()=>{u(l,[],!0),Qe()}),g(r,sa),It()}er(["click","change"]);var Lp=y('<p role="status" class="svelte-k48r5d">Discovering existing worktrees…</p>'),Tp=y('<button><!><span class="svelte-k48r5d"><strong class="svelte-k48r5d"> </strong><small class="svelte-k48r5d"> </small><small class="option-directory svelte-k48r5d"> </small></span><!></button>'),Ip=y('<p class="directory svelte-k48r5d"> </p>'),Np=y('<p class="unavailable svelte-k48r5d"> </p>'),Dp=y('<div class="controls svelte-k48r5d"><details class="picker svelte-k48r5d"><summary aria-label="Select worktree environment" class="svelte-k48r5d"><!><span class="svelte-k48r5d"> </span><!></summary> <div class="environment-options svelte-k48r5d" aria-label="Worktree environments"></div></details> <button class="svelte-k48r5d"> </button></div> <!> <!>',1),Mp=y('<p class="svelte-k48r5d">No existing Git worktrees were found for this project.</p>'),zp=y('<p role="status" class="svelte-k48r5d"> </p>'),Op=y('<p class="error svelte-k48r5d" role="alert"> </p>'),Up=y('<section class="environment svelte-k48r5d" aria-label="Worktree environment"><div class="heading svelte-k48r5d"><span>Environment</span><button class="refresh svelte-k48r5d" aria-label="Refresh worktree environments">Refresh</button></div> <!> <!> <!></section>');function Hp(r,e){Tt(e,!0);let a=R(at([])),s=R(""),n=R(!1),i=R(!1),c=R(""),l=R(""),d=R(0),v=0;const p=F(()=>t(a).find(Y=>Y.id===t(s)));let _=R(void 0);const w=F(()=>e.projectId);yr(()=>{const Y=t(w);t(d),++v;const $=new AbortController;return u(a,[],!0),u(s,""),u(n,!0),u(i,!1),u(c,""),u(l,""),(async()=>{var X;try{const T=await fetch(`/api/projects/${encodeURIComponent(Y)}/environments`,{signal:$.signal}),se=await T.json();if(!T.ok)throw new Error(se.error??"Could not discover environments.");if($.signal.aborted)return;u(a,se.environments??[],!0),u(s,((X=t(a).find(B=>B.current))==null?void 0:X.id)??"",!0),se.error&&u(l,se.error,!0)}catch(T){$.signal.aborted||u(c,T instanceof Error?T.message:String(T),!0)}finally{$.signal.aborted||u(n,!1)}})(),()=>{++v,$.abort()}});function S(Y){var $;return Y.branch??(Y.detached?`Detached ${(($=Y.head)==null?void 0:$.slice(0,8))??"HEAD"}`:"Unnamed branch")}async function j(){var se;if(t(i)||!((se=t(p))!=null&&se.available)||t(p).current)return;const Y=t(p),$=e.projectId,X=v,T=()=>X===v&&e.projectId===$;u(i,!0),u(c,"");try{if(Y.registered&&Y.projectId){await e.onSelect(Y.projectId);return}const B=await fetch(`/api/projects/${encodeURIComponent($)}/environments/${encodeURIComponent(Y.id)}/register`,{method:"POST"}),K=await B.json();if(!B.ok)throw new Error(K.error??"Could not register environment.");const re=K.project??K;if(typeof re.id!="string")throw new Error("The registration response did not include a project identity.");T()&&await e.onSelect(re.id)}catch(B){T()&&u(c,B instanceof Error?B.message:String(B),!0)}finally{T()&&u(i,!1)}}var C=Up(),q=f(C),b=o(f(q)),I=o(q,2);{var A=Y=>{var $=Lp();g(Y,$)},L=Y=>{var $=Dp(),X=Ye($),T=f(X),se=f(T),B=f(se);Ho(B,{size:16});var K=o(B),re=m(K,!0),ee=o(K);ni(ee,{size:14});var oe=o(se,2);He(oe,21,()=>t(a),_e=>_e.id,(_e,de)=>{var ce=Tp();let ve;var Ie=f(ce);Ho(Ie,{size:16});var bt=o(Ie),vt=f(bt),tt=m(vt,!0),Be=o(vt),Ae=m(Be),Ne=o(Be),Qe=m(Ne,!0),Ue=o(bt);{var br=ht=>{_i(ht,{size:16})};D(Ue,ht=>{t(de).id===t(s)&&ht(br)})}E(ht=>{ve=it(ce,1,"environment-option svelte-k48r5d",null,ve,{selected:t(de).id===t(s)}),ce.disabled=t(i)||!t(de).available,V(ce,"aria-pressed",t(de).id===t(s)),h(tt,ht),h(Ae,`${t(de).current?"Current environment":t(de).registered?"Registered":"Not registered"}${t(de).available?t(de).runningCount?` · ${t(de).runningCount} running`:"":" · Unavailable"}`),V(Ne,"title",t(de).directory),h(Qe,t(de).directory)},[()=>S(t(de))]),Q("click",ce,()=>{var ht;u(s,t(de).id,!0),t(_)&&(t(_).open=!1,(ht=t(_).querySelector("summary"))==null||ht.focus())}),g(_e,ce)}),Xa(T,_e=>u(_,_e),()=>t(_)),_s(T,_e=>Bt==null?void 0:Bt(_e));var U=o(T,2),M=m(U,!0),he=o(X,2);{var te=_e=>{var de=Ip(),ce=m(de,!0);E(()=>{V(de,"title",t(p).directory),h(ce,t(p).directory)}),g(_e,de)};D(he,_e=>{t(p)&&_e(te)})}var be=o(he,2);He(be,17,()=>t(a).filter(_e=>!_e.available),_e=>_e.id,(_e,de)=>{var ce=Np(),ve=m(ce);E(Ie=>{V(ce,"title",t(de).error),h(ve,`${Ie??""} is unavailable: ${t(de).error??"Configuration cannot be read."??""}`)},[()=>S(t(de))]),g(_e,ce)}),E(_e=>{var de,ce,ve,Ie;h(re,_e),U.disabled=t(i)||!((de=t(p))!=null&&de.available)||((ce=t(p))==null?void 0:ce.current),h(M,t(i)?(ve=t(p))!=null&&ve.registered?"Switching…":"Registering…":(Ie=t(p))!=null&&Ie.registered?"Switch":"Register & switch")},[()=>t(p)?S(t(p)):"Choose environment"]),Q("click",U,j),g(Y,$)},P=Y=>{var $=Mp();g(Y,$)};D(I,Y=>{t(n)?Y(A):t(a).length?Y(L,1):!t(l)&&!t(c)&&Y(P,2)})}var W=o(I,2);{var O=Y=>{var $=zp(),X=m($,!0);E(()=>h(X,t(l))),g(Y,$)};D(W,Y=>{t(l)&&Y(O)})}var Z=o(W,2);{var ae=Y=>{var $=Op(),X=m($);E(()=>h(X,`${t(c)??""} Use Refresh to try again.`)),g(Y,$)};D(Z,Y=>{t(c)&&Y(ae)})}E(()=>{V(C,"aria-busy",t(n)||t(i)),b.disabled=t(n)||t(i)}),Q("click",b,()=>jl(d)),g(r,C),It()}er(["click"]);var Bp=y('<p class="error svelte-1czhwfk" role="alert"> </p>'),Kp=y('<p role="status" class="svelte-1czhwfk">Loading checks…</p>'),Fp=y('<div class="empty svelte-1czhwfk"><strong class="svelte-1czhwfk">No saved checks</strong><p class="svelte-1czhwfk">Inspect a recorded request and choose Preview sanitized request, then Save as check.</p></div>'),Vp=y('<p class="error svelte-1czhwfk"> </p>'),Wp=y('<p class="svelte-1czhwfk"> </p>'),$p=y('<p role="status"> </p><!> <details class="svelte-1czhwfk"><summary class="svelte-1czhwfk"> </summary><!></details>',1),Gp=y('<p class="svelte-1czhwfk">Not run yet. Saving a check does not execute it.</p>'),Yp=y('<article class="svelte-1czhwfk"><div class="heading svelte-1czhwfk"><h3 class="svelte-1czhwfk"> </h3><div class="actions svelte-1czhwfk"><button class="svelte-1czhwfk"> </button><button class="svelte-1czhwfk">Delete</button></div></div> <p class="path svelte-1czhwfk"> </p><p class="svelte-1czhwfk"> </p> <!></article>'),Jp=y('<section aria-label="Saved reproduction checks" class="svelte-1czhwfk"><header class="svelte-1czhwfk"><div class="svelte-1czhwfk"><h2 class="svelte-1czhwfk">Reproduction checks</h2><p class="svelte-1czhwfk">Saved GET/HEAD requests for this environment. Each run sends an unauthenticated request and compares its HTTP status.</p></div><button class="svelte-1czhwfk">Refresh</button></header> <!> <!> <!></section>');function Zp(r,e){Tt(e,!0);let a=R(at([])),s=R(!1),n=R(""),i=R(""),c=0;const l=F(()=>e.projectId);yr(()=>{const A=t(l),L=++c;u(a,[],!0),u(i,""),d(A,L)});async function d(A=e.projectId,L=c){u(s,!0);try{const P=await fetch(`/api/projects/${encodeURIComponent(A)}/checks`),W=await P.json();if(!P.ok)throw new Error(W.error??"Checks unavailable");L===c&&u(a,W.items,!0)}catch(P){L===c&&u(i,P instanceof Error?P.message:"Checks unavailable",!0)}finally{L===c&&u(s,!1)}}async function v(A,L){if(t(n))return;const P=e.projectId,W=c;u(n,A.id,!0),u(i,"");try{const O=await fetch(`/api/projects/${encodeURIComponent(P)}/checks/${encodeURIComponent(A.id)}${L?"/run":""}`,{method:L?"POST":"DELETE"}),Z=await O.json();if(!O.ok)throw new Error(Z.error??"Check action failed");W===c&&await d(P,W)}catch(O){W===c&&u(i,O instanceof Error?O.message:"Check action failed",!0)}finally{u(n,"")}}var p=Jp(),_=f(p),w=o(f(_)),S=o(_,2);{var j=A=>{var L=Bp(),P=m(L,!0);E(()=>h(P,t(i))),g(A,L)};D(S,A=>{t(i)&&A(j)})}var C=o(S,2);{var q=A=>{var L=Kp();g(A,L)},b=A=>{var L=Fp();g(A,L)};D(C,A=>{t(s)&&!t(a).length?A(q):t(a).length||A(b,1)})}var I=o(C,2);He(I,17,()=>t(a),A=>A.id,(A,L)=>{var P=Yp(),W=f(P),O=f(W),Z=m(O,!0),ae=o(O),Y=f(ae),$=m(Y,!0),X=o(Y),T=o(W,2),se=m(T),B=o(T),K=m(B),re=o(B,2);{var ee=U=>{const M=F(()=>t(L).runs[t(L).runs.length-1]);var he=$p(),te=Ye(he);let be;var _e=m(te),de=o(te);{var ce=tt=>{var Be=Vp(),Ae=m(Be,!0);E(()=>h(Ae,t(M).error)),g(tt,Be)};D(de,tt=>{t(M).error&&tt(ce)})}var ve=o(de,2),Ie=f(ve),bt=m(Ie),vt=o(Ie);He(vt,17,()=>[...t(L).runs].reverse(),tt=>tt.id,(tt,Be)=>{var Ae=Wp(),Ne=m(Ae);E(Qe=>h(Ne,`${Qe??""} · ${t(Be).result??""} · ${t(Be).actualStatus?`HTTP ${t(Be).actualStatus}`:"No HTTP response"}`),[()=>new Date(t(Be).ts).toLocaleString()]),g(tt,Ae)}),E((tt,Be)=>{be=it(te,1,"svelte-1czhwfk",null,be,{failed:t(M).result!=="passed"}),h(_e,`${t(M).result==="passed"?"Passed":t(M).result==="status-mismatch"?"Status mismatch":"Transport failure"} · ${t(M).actualStatus?`HTTP ${t(M).actualStatus} · `:""}${tt??""} ms · ${Be??""}`),h(bt,`Run history (${t(L).runs.length??""})`)},[()=>Math.round(t(M).durationMs),()=>new Date(t(M).ts).toLocaleString()]),g(U,he)},oe=U=>{var M=Gp();g(U,M)};D(re,U=>{t(L).runs.length?U(ee):U(oe,-1)})}E(U=>{h(Z,t(L).name),Y.disabled=t(s)||!!t(n),h($,t(n)===t(L).id?"Working…":"Run check"),X.disabled=t(s)||!!t(n),V(T,"title",t(L).path),h(se,`${t(L).method??""} ${t(L).path??""}`),h(K,`${U??""} · Expected HTTP ${t(L).expectedStatus??""}`)},[()=>t(L).serviceKey.split(":").slice(1).join(":")]),Q("click",Y,()=>v(t(L),!0)),Q("click",X,()=>v(t(L),!1)),g(A,P)}),E(()=>w.disabled=t(s)||!!t(n)),Q("click",w,()=>d()),g(r,p),It()}er(["click"]);var Xp=y('<a class="mono svelte-iodvty" target="_blank" rel="noreferrer"> </a>'),Qp=y('<a class="mono svelte-iodvty" target="_blank" rel="noreferrer"> </a><span>Checking…</span>',1),eh=y('<span class="connecting svelte-iodvty" role="status"><span class="spinner svelte-iodvty"><!></span> <!></span>'),th=y('<span class="error svelte-iodvty" role="alert"><!><span> </span></span>'),rh=y('<span class="password svelte-iodvty"><span>Password:</span><span class="mono"> </span><button class="svelte-iodvty"> </button></span>'),ah=y('<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>'),sh=y('<span class="error svelte-iodvty" role="alert"> </span>'),nh=y('<div class="share-line svelte-iodvty"><!> <!> <!> <!></div>');function pc(r,e){Tt(e,!0);let a=Re(e,"protectedShare",3,!1),s=Re(e,"pending",3,!1),n=Re(e,"error",3,""),i=R(at(Date.now()));const c=F(()=>s()&&!e.url&&!!e.pendingUrl&&e.startedAt!==void 0&&t(i)-e.startedAt>=6e4);yr(()=>{if(!s()||e.url||e.startedAt===void 0)return;u(i,Date.now(),!0);const O=e.startedAt+6e4-Date.now();if(O<=0)return;const Z=setTimeout(()=>{u(i,Date.now(),!0)},O);return()=>clearTimeout(Z)});let l=R(null),d=R(!1),v=R(!1),p=R("");yr(()=>{e.url,e.pendingUrl,u(l,null),u(d,!1),u(p,"")});async function _(){if(t(d)){u(d,!1);return}if(!e.serviceKey||t(v))return;const O=e.url??e.pendingUrl;u(v,!0),u(p,"");try{const Z=await fetch(`/api/services/${encodeURIComponent(e.serviceKey)}/share-password`,{method:"POST",cache:"no-store"}),ae=await Z.json();if(!Z.ok)throw new Error(ae.error??"Could not load password");if(O!==(e.url??e.pendingUrl))return;if(typeof ae.password!="string")throw new Error("This share no longer has a password.");u(l,ae.password,!0),u(d,!0)}catch(Z){u(p,Z instanceof Error?Z.message:"Could not load password",!0)}finally{u(v,!1)}}var w=nh(),S=f(w);{var j=O=>{var Z=Xp(),ae=m(Z,!0);E(()=>{V(Z,"href",e.url),V(Z,"aria-label",`Shared link for ${e.name}`),h(ae,e.url)}),g(O,Z)},C=O=>{var Z=eh(),ae=f(Z),Y=f(ae);gv(Y,{size:14});var $=o(ae,2);{var X=se=>{var B=Qp(),K=Ye(B),re=m(K,!0);E(()=>{V(K,"href",e.pendingUrl),V(K,"aria-label",`Pending shared link for ${e.name}`),h(re,e.pendingUrl)}),g(se,B)},T=se=>{var B=go("Creating tunnel… up to two minutes");g(se,B)};D($,se=>{e.pendingUrl?se(X):se(T,-1)})}g(O,Z)},q=O=>{var Z=th(),ae=f(Z);yi(ae,{size:14});var Y=o(ae),$=m(Y,!0);E(()=>h($,n())),g(O,Z)};D(S,O=>{e.url?O(j):s()?O(C,1):n()&&O(q,2)})}var b=o(S,2);{var I=O=>{var Z=rh(),ae=o(f(Z)),Y=m(ae,!0),$=o(ae),X=m($,!0);E(()=>{h(Y,t(d)?t(l):"••••••••"),$.disabled=t(v),V($,"aria-label",`${t(d)?"Hide":"Show"} share password for ${e.name}`),h(X,t(v)?"Loading…":t(d)?"Hide":"Show")}),Q("click",$,_),g(O,Z)};D(b,O=>{(e.url||s()&&e.pendingUrl)&&a()&&O(I)})}var A=o(b,2);{var L=O=>{var Z=ah(),ae=o(f(Z));E(()=>V(ae,"href",e.pendingUrl)),g(O,Z)};D(A,O=>{t(c)&&O(L)})}var P=o(A,2);{var W=O=>{var Z=sh(),ae=m(Z,!0);E(()=>h(ae,t(p))),g(O,Z)};D(P,O=>{t(p)&&O(W)})}g(r,w),It()}er(["click"]);var ih=y('<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),oh=y('<p class="svelte-1u7hpyn">Start the service and wait until it is ready to share.</p>'),lh=y('<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 generate a password. You can reveal it next to the link.</p> <label class="public svelte-1u7hpyn"><input type="checkbox" class="svelte-1u7hpyn"/>Public link — no password, anyone with the URL can open it</label> <button class="primary" type="submit"> </button></form>',1),ch=y('<p class="error svelte-1u7hpyn" role="alert"> </p>'),uh=y('<details><summary class="svelte-1u7hpyn"><!> </summary> <div class="share-popover svelte-1u7hpyn"><strong> </strong> <!> <!></div></details>');function dh(r,e){Tt(e,!0);let a=Re(e,"busy",3,!1),s=Re(e,"menuItem",3,!1),n=R(void 0),i=R(""),c=R(!1),l=R(!1),d=R(""),v=R(!1);const p=F(()=>{var I,A;return a()||t(l)||((A=(I=e.service)==null?void 0:I.shareStartup)==null?void 0:A.status)==="starting"}),_=F(()=>e.service&&!Pr(e.service)&&e.service.status!=="stopped"&&e.service.status!=="stopping"&&e.service.upstreamReady);async function w(I){var A;if(!t(p)){u(l,!0),u(d,""),u(v,!1),t(n)&&(t(n).open=!1,(A=t(n).querySelector("summary"))==null||A.focus());try{I?await e.onUnshare():await e.onShare(t(c)?null:t(i)||null,t(c)),u(i,""),u(c,!1)}catch(L){u(d,L instanceof Error?L.message:String(L),!0)}finally{u(l,!1)}}}async function S(){var I;if((I=e.service)!=null&&I.share)try{await navigator.clipboard.writeText(e.service.share.url),u(v,!0)}catch{u(d,"Could not copy. Select and copy the link below.")}}var j=Qr(),C=Ye(j);{var q=I=>{var A=uh();let L;var P=f(A),W=f(P);Tv(W,{size:14});var O=o(W,1,!0),Z=o(P,2),ae=f(Z),Y=m(ae),$=o(ae,2);{var X=K=>{var re=ih(),ee=Ye(re),oe=m(ee,!0),U=o(ee,2),M=m(U,!0),he=o(U,2),te=f(he),be=f(te);Mn(be,{size:14});var _e=o(be,1,!0),de=o(te),ce=f(de);yi(ce,{size:14});var ve=o(ce,1,!0);E(()=>{V(ee,"href",e.service.share.url),h(oe,e.service.share.url),h(M,e.service.share.protected?"Password protected":"Public link — anyone with the URL can access it"),V(te,"aria-label",`Copy share link for ${e.name}`),h(_e,t(v)?"Copied":"Copy link"),de.disabled=t(p),h(ve,t(p)?"Stopping…":"Stop sharing")}),Q("click",te,S),Q("click",de,()=>w(!0)),g(K,re)},T=K=>{var re=lh(),ee=Ye(re),oe=o(ee,4);{var U=ve=>{var Ie=oh();g(ve,Ie)};D(oe,ve=>{t(_)||ve(U)})}var M=o(oe,2),he=f(M),te=o(f(he)),be=o(he,4),_e=f(be),de=o(be,2),ce=m(de,!0);E(()=>{V(ee,"hidden",!t(p)),te.disabled=t(p)||t(c),_e.disabled=t(p),de.disabled=!t(_)||t(p),h(ce,t(p)?"Starting tunnel…":"Create share link")}),Kt("submit",M,ve=>{ve.preventDefault(),t(_)&&w(!1)}),Gt(te,()=>t(i),ve=>u(i,ve)),Ad(_e,()=>t(c),ve=>u(c,ve)),g(K,re)};D($,K=>{var re;(re=e.service)!=null&&re.share?K(X):K(T,-1)})}var se=o($,2);{var B=K=>{var re=ch(),ee=m(re,!0);E(()=>h(ee,t(d))),g(K,re)};D(se,K=>{t(d)&&K(B)})}Xa(A,K=>u(n,K),()=>t(n)),_s(A,K=>Bt==null?void 0:Bt(K)),E(()=>{var K;L=it(A,1,"share-control svelte-1u7hpyn",null,L,{"menu-item":s()}),V(P,"aria-label",`Share ${e.name}`),h(O,(K=e.service)!=null&&K.share?"Shared":t(p)?"Connecting…":"Share"),h(Y,`Share ${e.name??""}`)}),g(I,A)},b=F(()=>!e.service||!Pr(e.service));D(C,I=>{t(b)&&I(q)})}g(r,j),It()}er(["click"]);var vh=y('<div class="share-action svelte-m918bk"><!></div>'),fh=y('<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 Ji(r,e){Tt(e,!0);let a=Re(e,"shareable",3,!0),s=Re(e,"busy",3,!1),n;function i(){var b;n.open=!1,(b=n.querySelector("summary"))==null||b.focus()}function c(b){i(),b()}var l=fh(),d=f(l),v=o(f(d));ni(v,{size:14});var p=o(d,2),_=f(p),w=f(_);av(w,{size:15});var S=o(_,2),j=f(S);pv(j,{size:15});var C=o(S,2);{var q=b=>{var I=vh(),A=f(I);dh(A,{get service(){return e.service},get name(){return e.name},get busy(){return s()},menuItem:!0,onShare:(L,P)=>(i(),e.onShare(L,P)),onUnshare:()=>(i(),e.onUnshare())}),g(b,I)};D(C,b=>{a()&&b(q)})}Xa(l,b=>n=b,()=>n),_s(l,b=>Bt==null?void 0:Bt(b)),E(()=>{V(d,"aria-label",`Options for ${e.name}`),V(p,"aria-label",`More actions for ${e.name}`),V(_,"aria-label",`Show logs for ${e.name}`),V(S,"aria-label",`View requests for ${e.name}`)}),Kt("toggle",l,()=>{if(!n.open)for(const b of n.querySelectorAll("details"))b.open=!1}),Q("click",_,()=>c(e.onLogs)),Q("click",S,()=>c(e.onRequests)),g(r,l),It()}er(["click"]);function ph(r){var c,l;const e=r.replace(/\x1b\[[0-9;]*m/g,"");if(!/\bEADDRINUSE\b|\b(?:port|address)\b[^\n]*already in use/i.test(e))return;const a=((c=/\bport\s+(\d+)\s+is already in use/i.exec(e))==null?void 0:c[1])??((l=/\b(?:listen|address already in use)[^\n]*:(\d+)\b/i.exec(e))==null?void 0:l[1]),s=a&&Number(a)>0&&Number(a)<=65535?a:void 0,n=s?`Port ${s} 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) || ${s??"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 hh=y('<li class="svelte-13pnhk8"> </li>'),gh=y('<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),mh=y('<p class="svelte-13pnhk8"> </p>'),_h=y('<div class="service-error svelte-13pnhk8" role="alert"><!></div>');function Zi(r,e){Tt(e,!0);const a=F(()=>ph(e.message));var s=_h(),n=f(s);{var i=l=>{var d=gh(),v=Ye(d),p=m(v,!0),_=o(v,2);He(_,21,()=>t(a).steps,Ht,(C,q)=>{var b=hh(),I=m(b,!0);E(()=>h(I,t(q))),g(C,b)});var w=o(_,2),S=o(f(w)),j=m(S,!0);E(()=>{h(p,t(a).title),h(j,e.message)}),g(l,d)},c=l=>{var d=mh(),v=m(d,!0);E(()=>h(v,e.message)),g(l,d)};D(n,l=>{t(a)?l(i):l(c,-1)})}g(r,s),It()}var yh=y('<p role="alert" class="svelte-1xk5qw3"> </p>'),bh=y('<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),wh=y('<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 kh(r,e){Tt(e,!0);let a=R(""),s=R(""),n=R(!1),i=R(!1);async function c(){u(n,!0),u(s,""),u(i,!1);try{const C=await fetch(`/api/projects/${encodeURIComponent(e.projectId)}/diagnostics`),q=await C.json();if(!C.ok)throw new Error(q.error??"Could not prepare diagnostics");u(a,q.report,!0)}catch(C){u(s,C instanceof Error?C.message:String(C),!0)}finally{u(n,!1)}}async function l(){try{await navigator.clipboard.writeText(t(a)),u(i,!0)}catch{u(s,"Clipboard unavailable. Select and copy the report below.")}}var d=wh(),v=o(f(d),4),p=m(v,!0),_=o(v,2);{var w=C=>{var q=yh(),b=m(q,!0);E(()=>h(b,t(s))),g(C,q)};D(_,C=>{t(s)&&C(w)})}var S=o(_,2);{var j=C=>{var q=bh(),b=o(Ye(q),2),I=o(f(b)),A=o(b,2),L=m(A,!0);E(()=>h(L,t(i)?"Copied":"Copy diagnostic report")),Gt(I,()=>t(a),P=>u(a,P)),Q("click",A,l),g(C,q)};D(S,C=>{t(a)&&C(j)})}E(()=>{v.disabled=t(n),h(p,t(n)?"Preparing…":"Preview diagnostic report")}),Q("click",v,c),g(r,d),It()}er(["click"]);var Sh=y('<label class="svelte-1gn57ev">Public port<input type="number" min="1" max="65535" placeholder="Automatic" class="svelte-1gn57ev"/></label>'),xh=y('<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),jh=y('<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),Eh=y('<p class="svelte-1gn57ev">Command readiness checks are configured in <code>.localdeck</code>.</p>'),qh=y('<label class="svelte-1gn57ev"><input type="checkbox" class="svelte-1gn57ev"/> </label>'),Ch=y("<small>No other services</small>"),Ph=y('<p role="alert" class="error svelte-1gn57ev"> </p>'),Rh=y('<p role="status" class="svelte-1gn57ev"> </p>'),Ah=y('<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 Lh(r,e){Tt(e,!0);const a=[];function s(){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=at(s()),i=R(!1),c=R(""),l=R("");async function d($){$.preventDefault(),u(i,!0),u(c,""),u(l,"");try{const X=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}:{}}:{}}}})}),T=await X.json();if(!X.ok)throw new Error(T.error??"Could not save configuration.");u(l,"Saved. Applies on the next service start.");try{await e.onSaved()}catch{u(l,t(l)+" Could not refresh the project.")}}catch(X){u(c,X instanceof Error?X.message:String(X),!0)}finally{u(i,!1)}}var v=Ah(),p=f(v),_=f(p),w=f(_);{var S=$=>{var X=Sh(),T=o(f(X));Gt(T,()=>n.port,se=>n.port=se),g($,X)};D(w,$=>{(!e.command.serviceType||e.command.serviceType==="http")&&$(S)})}var j=o(w,2),C=o(f(j)),q=o(j,2);{var b=$=>{var X=jh(),T=Ye(X),se=o(f(T)),B=f(se);B.value=B.__value="tcp";var K=o(B);K.value=K.__value="http",gi(se);var re=o(T,2);{var ee=te=>{var be=xh(),_e=Ye(be),de=o(f(_e)),ce=o(_e),ve=o(f(ce));Gt(de,()=>n.path,Ie=>n.path=Ie),Gt(ve,()=>n.status,Ie=>n.status=Ie),g(te,be)};D(re,te=>{n.type==="http"&&te(ee)})}var oe=o(re,2),U=o(f(oe)),M=o(oe,2),he=o(f(M));Ql(se,()=>n.type,te=>n.type=te),Gt(U,()=>n.timeout,te=>n.timeout=te),Gt(he,()=>n.interval,te=>n.interval=te),g($,X)},I=$=>{var X=Eh();g($,X)};D(q,$=>{e.command.ready.type!=="command"?$(b):$(I,-1)})}var A=o(_,2),L=o(f(A));He(L,21,()=>e.project.commands.filter($=>$.name!==e.command.name),Ht,($,X)=>{var T=qh(),se=f(T),B,K=o(se,1,!0);E(()=>{B!==(B=t(X).name)&&(se.value=(se.__value=B)??""),h(K,t(X).name)}),Rd(a,[],se,()=>(t(X).name,n.after),re=>n.after=re),g($,T)},$=>{var X=Ch();g($,X)});var P=o(A,2),W=m(P,!0),O=o(p,2);{var Z=$=>{var X=Ph(),T=m(X,!0);E(()=>h(T,t(c))),g($,X)};D(O,$=>{t(c)&&$(Z)})}var ae=o(O);{var Y=$=>{var X=Rh(),T=m(X,!0);E(()=>h(T,t(l))),g($,X)};D(ae,$=>{t(l)&&$(Y)})}E(()=>{p.disabled=t(i),h(W,t(i)?"Saving…":"Save configuration")}),Kt("submit",v,d),Gt(C,()=>n.upstream,$=>n.upstream=$),g(r,v),It()}var Th=y('<p class="error svelte-ruqv4s" role="alert"> </p>'),Ih=y('<p class="notice svelte-ruqv4s" role="status"> </p>'),Nh=y('<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 Dh(r,e){Tt(e,!0);let a=Re(e,"onSaved",3,async()=>{}),s=R(""),n=R(!1),i=R(""),c=R(""),l=R("");const d=F(()=>t(s).trim().toLowerCase()),v=F(()=>t(d)===t(l));yr(()=>{e.projectId,u(s,e.nickname??"",!0),u(l,(e.nickname??"").trim().toLowerCase(),!0)});async function p(){if(t(n)||t(v))return;const L=t(d);u(n,!0),u(i,""),u(c,"");try{const P=await fetch(`/api/projects/${encodeURIComponent(e.projectId)}/nickname`,{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({nickname:L})}),W=await P.json();if(!P.ok)throw new Error(W.error??"Could not save nickname.");u(s,W.nickname??"",!0),u(l,t(s).trim().toLowerCase(),!0),u(c,L?"Nickname saved to the project file.":"Nickname removed from the project file.",!0);try{await a()()}catch{u(c,t(c)+" Reload the dashboard to refresh the displayed links.")}}catch(P){u(i,P instanceof Error?P.message:String(P),!0)}finally{u(n,!1)}}var _=Nh(),w=o(f(_),2),S=f(w),j=o(S,2),C=m(j,!0),q=o(w,4);{var b=L=>{var P=Th(),W=m(P,!0);E(()=>h(W,t(i))),g(L,P)};D(q,L=>{t(i)&&L(b)})}var I=o(q,2);{var A=L=>{var P=Ih(),W=m(P,!0);E(()=>h(W,t(c))),g(L,P)};D(I,L=>{t(c)&&L(A)})}E(()=>{S.disabled=t(n),j.disabled=t(n)||t(v),h(C,t(n)?"Saving…":"Save")}),Kt("submit",_,L=>{L.preventDefault(),p()}),Gt(S,()=>t(s),L=>u(s,L)),g(r,_),It()}var Mh=y("<span>Waiting for listener</span>"),zh=y('<span title="Local Deck’s stable port forwards requests to the app">Proxy port <span class="mono"> </span></span>'),Oh=y('<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 Xi(r,e){Tt(e,!0);const a=F(()=>yo(e.service)),s=F(()=>!e.service||e.service.status==="stopped"?"Last used port":e.service.status==="stopping"?"Stopping on port":t(a)==="ready"||t(a)==="listening"?"Running on port":e.service.upstreamReady?"Listening on port":e.service.upstreamSource==="manual"?"Configured port":"Assigned port");var n=Qr(),i=Ye(n);{var c=l=>{var d=Oh(),v=f(d),p=f(v),_=o(p),w=m(_,!0),S=o(v,2);{var j=I=>{var A=Mh();g(I,A)};D(S,I=>{e.service.status!=="stopped"&&e.service.status!=="stopping"&&!e.service.upstreamReady&&I(j)})}var C=o(S,2);{var q=I=>{var A=zh(),L=o(f(A)),P=m(L,!0);E(()=>h(P,e.service.stablePort)),g(I,A)},b=F(()=>!Pr(e.service));D(C,I=>{t(b)&&I(q)})}E(()=>{h(p,`${t(s)??""} `),h(w,e.service.upstreamPort)}),g(l,d)};D(i,l=>{e.service&&l(c)})}g(r,n),It()}function Uh(r,e,a){return`service:${r}:${e}:${a}`}function Bn(r,e,a,s){const n=r.has(Uh(e,a,s));return{pending:n,label:{start:n?"Starting…":"Start",stop:n?"Stopping…":"Stop",restart:n?"Restarting…":"Restart"}[s]}}var Hh=y('<a class="open-app svelte-l7un4l" target="_blank" rel="noreferrer">Open app <!></a>'),Di=y('<button class="primary svelte-l7un4l"> </button>'),Zs=y('<button class="svelte-l7un4l"> </button>'),Bh=y('<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>'),Kh=y('<!><a target="_blank" rel="noreferrer" class="svelte-l7un4l"> </a><button aria-label="Copy app address" class="svelte-l7un4l"><!></button>',1),Fh=y('<span class="muted svelte-l7un4l"> </span>'),Vh=y('<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>'),Wh=y("<option> </option>"),$h=y('<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>'),Gh=y('<p class="bulk-summary svelte-l7un4l" aria-live="polite"> </p>'),Yh=y('<span class="command mono svelte-l7un4l"> </span>'),Jh=y('<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>'),Zh=y('<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>'),Xh=y('<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),Qh=y('<p class="inline-error svelte-l7un4l" role="alert"> </p>'),eg=y('<a class="mono svelte-l7un4l" target="_blank" rel="noreferrer"> </a>'),tg=y('<span class="dependency-summary svelte-l7un4l"><span class="svelte-l7un4l">Starts after</span> </span>'),rg=y('<a class="service-open svelte-l7un4l" target="_blank" rel="noreferrer">Open ↗</a>'),ag=y('<button class="copy svelte-l7un4l"> </button>'),sg=y('<p class="svelte-l7un4l"> </p>'),ng=y('<label class="svelte-l7un4l"><input type="checkbox" name="after"/> <span> </span></label>'),ig=y('<span class="no-dependencies svelte-l7un4l">No other services are configured.</span>'),og=y('<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>'),lg=y('<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>'),cg=y('<div class="empty-services svelte-l7un4l"><h2 class="svelte-l7un4l"> </h2> <p class="svelte-l7un4l"> </p></div>'),ug=y('<div class="launch-panel svelte-l7un4l"><div><h2 class="svelte-l7un4l"> </h2> <p class="svelte-l7un4l"> </p></div></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),dg=y('<section class="project-overview page-shell svelte-l7un4l"><header class="page-heading"><div class="heading svelte-l7un4l"><h1 id="project-title" class="svelte-l7un4l"> </h1> <p class="project-health page-subtitle svelte-l7un4l"><span></span> </p></div> <!></header> <div class="project-address svelte-l7un4l"><!></div> <div class="settings-panel svelte-l7un4l"><header class="page-heading"><div><h1 id="project-settings-title" class="svelte-l7un4l">Project settings</h1><p class="page-subtitle svelte-l7un4l"> </p></div><button>Done</button></header> <!> <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 vg(r,e){Tt(e,!0);let a=Re(e,"onStartAll",3,async()=>({ok:!0,results:[]})),s=Re(e,"onStopAll",3,async()=>({ok:!0,results:[]})),n=Re(e,"onStartService",3,async()=>({ok:!0})),i=Re(e,"onStopService",3,async()=>({ok:!0})),c=Re(e,"onRestartService",3,async()=>({ok:!0})),l=Re(e,"onUpdateDependencies",3,async()=>e.project),d=Re(e,"onRetry",3,async()=>{}),v=Re(e,"onForget",3,async()=>{}),p=Re(e,"onSelectService",3,()=>{}),_=Re(e,"onViewRequests",3,()=>{}),w=Re(e,"onOpenSecrets",3,()=>{}),S=Re(e,"shareErrors",19,()=>({})),j=Re(e,"onShare",3,async()=>{}),C=Re(e,"onUnshare",3,async()=>{}),q=R(""),b=R(at({})),I=R(!1),A=R(""),L=R(!1),P=R(!1),W=R(null),O=R(""),Z=R("");async function ae(ie,ge){try{await navigator.clipboard.writeText(ge),u(Z,ie,!0)}catch{u(b,{...t(b),[`${e.project.id}:${ie}`]:"Could not copy. Select the address and copy it manually."},!0)}}async function Y(){u(L,!0),u(q,"");try{const ie=await fetch(`/api/projects/${encodeURIComponent(e.project.id)}/profiles/${encodeURIComponent(t(A))}`,{method:"POST"}),ge=await ie.json();if(!ie.ok)throw new Error(ge.error??"Profile could not start");u(q,ge.ok?"Profile started.":ge.results.filter(Se=>!Se.ok).map(Se=>Se.error).join("; "),!0)}catch(ie){u(q,M(ie),!0)}finally{u(L,!1)}}const $=F(()=>e.services.filter(ie=>ie.projectId===e.project.id)),X=F(()=>t($).filter(ie=>!Pr(ie)&&ie.status!=="stopped"&&ie.status!=="stopping"&&ie.upstreamReady)),T=F(()=>t(X).find(ie=>ie.name==="web")??t(X)[0]),se=F(()=>t($).filter(ie=>ie.readinessStatus==="failed"||ie.lastError).length),B=F(()=>t($).filter(ie=>ie.status!=="stopped").length),K=F(()=>e.project.commands.filter(ie=>{const ge=t($).find(Se=>Se.name===ie.name);return!ge||ge.status==="stopped"}).length),re=F(()=>{const ie=e.project.commands.map(ge=>({command:ge,runtime:t($).find(Se=>Se.name===ge.name),configured:!0}));for(const ge of t($))e.project.commands.some(Se=>Se.name===ge.name)||ie.push({command:{name:ge.name,run:ge.command??"command unavailable",tags:[],after:[],ready:{type:"tcp",timeoutMs:6e4,intervalMs:400}},runtime:ge,configured:!1});return ie}),ee=F(()=>e.pending.has(`project:${e.project.id}:start-all`)),oe=F(()=>e.pending.has(`project:${e.project.id}:stop-all`)),U=F(()=>e.pending.has(`project:${e.project.id}:forget`)),M=ie=>ie instanceof Error?ie.message:String(ie);async function he(ie){u(q,""),u(b,{...t(b),[e.project.id]:void 0},!0);try{const ge=await(ie==="start"?a()():s()()),Se=ge.results.filter(ke=>ke.ok).length,z=ge.results.length-Se,ne=ie==="start"?"started":"stopped";u(q,z?`${Se} ${ne}; ${z} failed.`:`${Se} ${ne} successfully.`,!0)}catch(ge){u(b,{...t(b),[e.project.id]:M(ge)},!0)}}async function te(ie,ge){const Se=`${e.project.id}:${ie}`;u(b,{...t(b),[Se]:void 0},!0);try{ge==="start"?await n()(ie):ge==="stop"?await i()(ie):await c()(ie)}catch(z){u(b,{...t(b),[Se]:M(z)},!0)}}async function be(ie,ge){var ke;ie.preventDefault();const Se=ie.currentTarget,z=new FormData(Se).getAll("after").map(String),ne=`${e.project.id}:${ge}`;u(b,{...t(b),[ne]:void 0},!0);try{await l()(ge,z),(ke=Se.closest("details"))==null||ke.removeAttribute("open")}catch(Te){u(b,{...t(b),[ne]:M(Te)},!0)}}function _e(ie){var Se,z;const ge=ie.currentTarget;(Se=ge.form)==null||Se.reset(),(z=ge.closest("details"))==null||z.removeAttribute("open")}async function de(){u(I,!0),u(b,{...t(b),[e.project.id]:void 0},!0);try{await d()()}catch(ie){u(b,{...t(b),[e.project.id]:M(ie)},!0)}finally{u(I,!1)}}async function ce(){u(b,{...t(b),[e.project.id]:void 0},!0);try{await v()()}catch(ie){u(b,{...t(b),[e.project.id]:M(ie)},!0)}}const ve=yo;var Ie=dg(),bt=f(Ie),vt=f(bt),tt=f(vt),Be=m(tt,!0),Ae=o(tt,2),Ne=f(Ae);let Qe;var Ue=o(Ne,1,!0),br=o(vt,2);{var ht=ie=>{var ge=Bh(),Se=f(ge);{var z=ot=>{var Me=Hh(),Mt=o(f(Me));sc(Mt,{size:19}),E(()=>V(Me,"href",t(T).urls[0])),g(ot,Me)};D(Se,ot=>{var Me;(Me=t(T))!=null&&Me.urls[0]&&ot(z)})}var ne=o(Se,2);{var ke=ot=>{var Me=Di(),Mt=m(Me,!0);E(()=>{Me.disabled=t(ee)||t(oe),h(Mt,t(ee)?"Starting…":t(B)?"Start remaining":"Start project")}),Q("click",Me,()=>he("start")),g(ot,Me)};D(ne,ot=>{t(K)>0&&ot(ke)})}var Te=o(ne,2);{var Ve=ot=>{var Me=Zs(),Mt=m(Me,!0);E(()=>{Me.disabled=t(oe)||t(ee),h(Mt,t(oe)?"Stopping…":"Stop project")}),Q("click",Me,()=>he("stop")),g(ot,Me)};D(Te,ot=>{t(B)>0&&ot(Ve)})}var We=o(Te,2),De=f(We);ic(De,{size:16});var rt=o(We,2),Ut=f(rt);uv(Ut,{size:16}),E(ot=>{V(We,"aria-expanded",t(P)),V(rt,"href",ot)},[()=>`/projects/${encodeURIComponent(e.project.id)}/secrets`]),Q("click",We,()=>{u(P,!t(P)),u(O,"")}),Q("click",rt,function(...ot){var Me;(Me=w())==null||Me.apply(this,ot)}),g(ie,ge)};D(br,ie=>{e.project.available&&ie(ht)})}var dr=o(bt,2),sa=f(dr);{var ma=ie=>{var ge=Kh(),Se=Ye(ge);vv(Se,{size:18});var z=o(Se),ne=m(z,!0),ke=o(z),Te=f(ke);{var Ve=De=>{var rt=go("Copied");g(De,rt)},We=De=>{Mn(De,{size:16})};D(Te,De=>{t(Z)===t(T).name?De(Ve):De(We,-1)})}E(De=>{V(z,"href",t(T).urls[0]),h(ne,De)},[()=>t(T).urls[0].replace(/^https?:\/\//,"").replace(/\/$/,"")]),Q("click",ke,()=>ae(t(T).name,t(T).urls[0])),g(ie,ge)},Ra=ie=>{var ge=Fh(),Se=m(ge,!0);E(()=>h(Se,t(B)?"Waiting for your app to be ready…":"Start your project to get an app link.")),g(ie,ge)};D(sa,ie=>{var ge;(ge=t(T))!=null&&ge.urls[0]?ie(ma):ie(Ra,-1)})}var Wr=o(dr,2),_a=f(Wr),ya=f(_a),na=o(f(ya)),wr=m(na,!0),tr=o(ya),zr=o(_a,2);Dh(zr,{get projectId(){return e.project.id},get nickname(){return e.project.nickname},get onSaved(){return d()}});var Or=o(zr,6);He(Or,21,()=>e.project.commands,ie=>ie.name,(ie,ge)=>{var Se=Vh(),z=f(Se),ne=f(z),ke=m(ne,!0),Te=o(ne),Ve=m(Te,!0),We=o(z,2);{var De=rt=>{Lh(rt,{get project(){return e.project},get command(){return t(ge)},get onSaved(){return d()}})};D(We,rt=>{t(W)===t(ge).name&&rt(De)})}E(()=>{Se.open=t(W)===t(ge).name,h(ke,t(ge).name),h(Ve,t(ge).run)}),Kt("toggle",Se,rt=>{rt.currentTarget.open?u(W,t(ge).name,!0):t(W)===t(ge).name&&u(W,null)}),g(ie,Se)});var Aa=o(Or,2),La=o(f(Aa));kh(La,{get projectId(){return e.project.id}});var Ta=o(Aa,2);{var ia=ie=>{var ge=$h(),Se=o(f(ge),4),z=f(Se);z.value=z.__value="";var ne=o(z);He(ne,17,()=>Object.keys(e.project.profiles),Ht,(Ve,We)=>{var De=Wh(),rt=m(De,!0),Ut={};E(()=>{h(rt,t(We)),Ut!==(Ut=t(We))&&(De.value=(De.__value=Ut)??"")}),g(Ve,De)}),gi(Se);var ke=o(Se,2),Te=m(ke,!0);E(()=>{ke.disabled=!t(A)||t(L),h(Te,t(L)?"Starting profile…":"Start profile")}),Ql(Se,()=>t(A),Ve=>u(A,Ve)),Q("click",ke,Y),g(ie,ge)},kr=F(()=>e.project.profiles&&Object.keys(e.project.profiles).length);D(Ta,ie=>{t(kr)&&ie(ia)})}var ar=o(Wr,2);{var Ba=ie=>{var ge=Gh(),Se=m(ge,!0);E(()=>h(Se,t(q))),g(ie,ge)};D(ar,ie=>{t(q)&&ie(Ba)})}var Sr=o(ar,2);let oa;var Qa=f(Sr);{var $r=ie=>{var ge=Xh(),Se=Ye(ge),z=f(Se),ne=o(f(z),2),ke=m(ne,!0),Te=o(z,2),Ve=f(Te),We=m(Ve,!0),De=o(Ve,2),rt=m(De,!0),Ut=o(Se,2);{var ot=Me=>{var Mt=Zh(),Nt=o(f(Mt),4);He(Nt,21,()=>t($),Dt=>Dt.key,(Dt,st)=>{const Et=F(()=>Bn(e.pending,e.project.id,t(st).name,"stop")),sr=F(()=>t(b)[t(st).key]??e.errors[t(st).key]??t(st).lastError);var Lr=Jh();let nr;var vr=f(Lr),Ur=f(vr),$e=f(Ur);let _t;var Ft=o($e,2),lt=m(Ft,!0),Ke=o(Ft),fe=m(Ke,!0),Ee=o(Ur,2),Jt=m(Ee,!0),fr=o(Ee,2),H=m(fr,!0),G=o(fr,2);Xi(G,{get service(){return t(st)}});var le=o(G,2);{var Ce=Ze=>{var wt=Yh(),ct=m(wt);E(()=>h(ct,`$ ${t(st).command??""}`)),g(Ze,wt)};D(le,Ze=>{t(st).command&&Ze(Ce)})}var Le=o(vr,2),Je=f(Le);{var St=Ze=>{var wt=Zs(),ct=m(wt,!0);E(()=>{wt.disabled=t(Et).pending,h(ct,t(Et).label)}),Q("click",wt,()=>te(t(st).name,"stop")),g(Ze,wt)};D(Je,Ze=>{t(st).status!=="stopped"&&Ze(St)})}var ir=o(Je,2);{let Ze=F(()=>!Pr(t(st))),wt=F(()=>e.pending.has(`service:${t(st).key}:share`));Ji(ir,{get service(){return t(st)},get name(){return t(st).name},get shareable(){return t(Ze)},get busy(){return t(wt)},onLogs:()=>p()(t(st).key),onRequests:()=>_()(t(st).key),onShare:(ct,At)=>j()(t(st).key,ct,At),onUnshare:()=>C()(t(st).key)})}var Tr=o(Le,2);{var Ir=Ze=>{Zi(Ze,{get message(){return t(sr)}})};D(Tr,Ze=>{t(sr)&&Ze(Ir)})}E((Ze,wt)=>{nr=it(Lr,1,"service-card svelte-l7un4l",null,nr,{failed:Ze}),_t=it($e,1,"status-dot svelte-l7un4l",null,_t,{running:t(st).status!=="stopped"}),h(lt,t(st).name),h(fe,wt),h(Jt,t(st).managedBy==="terminal"?"terminal owned":"daemon managed"),h(H,t(st).urls[0])},[()=>!!t(sr),()=>ve(t(st))]),g(Dt,Lr)}),g(Me,Mt)};D(Ut,Me=>{t($).length&&Me(ot)})}E(()=>{h(ke,e.project.error??e.errors[e.project.id]??"The project configuration could not be loaded."),Ve.disabled=t(I),h(We,t(I)?"Retrying…":"Retry"),De.disabled=t(U),h(rt,t(U)?"Forgetting…":"Forget project")}),Q("click",Ve,de),Q("click",De,ce),g(ie,ge)},Ia=ie=>{var ge=ug(),Se=Ye(ge),z=f(Se),ne=f(z),ke=m(ne,!0),Te=o(ne,2),Ve=m(Te,!0),We=o(Se,2),De=f(We),rt=o(f(De)),Ut=f(rt),ot=f(Ut),Me=m(ot,!0),Mt=o(Ut,2),Nt=f(Mt),Dt=m(Nt,!0),st=o(Mt,2),Et=f(st),sr=m(Et,!0),Lr=o(De,2),nr=o(f(Lr)),vr=o(We,2);{var Ur=lt=>{var Ke=Qh(),fe=m(Ke,!0);E(()=>h(fe,t(b)[e.project.id]??e.errors[e.project.id])),g(lt,Ke)};D(vr,lt=>{(e.errors[e.project.id]||t(b)[e.project.id])&&lt(Ur)})}var $e=o(vr,2);He($e,21,()=>t(re).filter(lt=>lt.command.name.toLowerCase().includes(t(O).toLowerCase())),lt=>lt.command.name,(lt,Ke)=>{const fe=F(()=>t(Ke).command),Ee=F(()=>t(Ke).runtime),Jt=F(()=>Bn(e.pending,e.project.id,t(fe).name,"start")),fr=F(()=>Bn(e.pending,e.project.id,t(fe).name,"stop")),H=F(()=>Bn(e.pending,e.project.id,t(fe).name,"restart")),G=F(()=>!t(Ee)||t(Ee).status==="stopped"),le=F(()=>{var ye;return t(b)[`${e.project.id}:${t(fe).name}`]??e.errors[`${e.project.id}:${t(fe).name}`]??((ye=t(Ee))==null?void 0:ye.lastError)});var Ce=lg();let Le;var Je=f(Ce),St=f(Je),ir=f(St),Tr=f(ir);{var Ir=ye=>{tv(ye,{size:23})},Ze=F(()=>Pr(t(fe))),wt=ye=>{iv(ye,{size:23})},ct=ye=>{Xd(ye,{size:23})};D(Tr,ye=>{t(Ze)?ye(Ir):t(fe).name==="web"?ye(wt,1):ye(ct,-1)})}var At=o(ir,2),pr=m(At,!0),qt=o(At,2),ut=m(qt,!0),Vt=o(qt,2);let hr;var or=o(f(Vt),1,!0),lr=o(St,2),gr=f(lr);let Wt;var Zt=o(gr,2),Gr=m(Zt,!0),Xt=o(Zt,2),xr=m(Xt,!0),jr=o(lr,2),k=m(jr),N=o(jr,2),J=f(N);{var me=ye=>{var we=eg(),mt=m(we,!0);E(()=>{V(we,"href",t(Ee).urls[0]),h(mt,t(Ee).urls[0])}),g(ye,we)};D(J,ye=>{var we;(we=t(Ee))!=null&&we.urls[0]&&ye(me)})}var ue=o(J,2);{let ye=F(()=>{var xt,zt;return((zt=(xt=t(Ee))==null?void 0:xt.shareStartup)==null?void 0:zt.status)==="starting"?t(Ee).shareStartup.startedAt:void 0}),we=F(()=>{var xt;return(xt=t(Ee))==null?void 0:xt.key}),mt=F(()=>{var xt,zt,Vs,zn;return((zt=(xt=t(Ee))==null?void 0:xt.share)==null?void 0:zt.protected)??(((zn=(Vs=t(Ee))==null?void 0:Vs.shareStartup)==null?void 0:zn.status)==="starting"&&t(Ee).shareStartup.protected)??!1}),Yr=F(()=>{var xt,zt;return((zt=(xt=t(Ee))==null?void 0:xt.shareStartup)==null?void 0:zt.status)==="starting"?t(Ee).shareStartup.url:void 0}),Na=F(()=>{var xt,zt;return t(G)||(zt=(xt=t(Ee))==null?void 0:xt.share)==null?void 0:zt.url}),Fs=F(()=>{var xt,zt;return e.pending.has(`service:${e.project.id}:${t(fe).name}:share`)||((zt=(xt=t(Ee))==null?void 0:xt.shareStartup)==null?void 0:zt.status)==="starting"}),bs=F(()=>{var xt,zt;return((zt=(xt=t(Ee))==null?void 0:xt.shareStartup)==null?void 0:zt.status)==="failed"?t(Ee).shareStartup.error:S()[`${e.project.id}:${t(fe).name}`]??""});pc(ue,{get startedAt(){return t(ye)},get serviceKey(){return t(we)},get protectedShare(){return t(mt)},get pendingUrl(){return t(Yr)},get name(){return t(fe).name},get url(){return t(Na)},get pending(){return t(Fs)},get error(){return t(bs)}})}var pe=o(N,2),ze=m(pe,!0),Pe=o(pe,2);Xi(Pe,{get service(){return t(Ee)}});var Fe=o(Pe,2);{var kt=ye=>{var we=tg(),mt=o(f(we));E(Yr=>{V(we,"hidden",!t(P)),h(mt,` ${Yr??""}`)},[()=>t(fe).after.join(", ")]),g(ye,we)};D(Fe,ye=>{t(fe).after.length&&ye(kt)})}var Ge=o(Je,2),qe=f(Ge);{var gt=ye=>{var we=Di(),mt=m(we,!0);E(()=>{V(we,"aria-label",`Start ${t(fe).name}`),we.disabled=t(Jt).pending||t(fr).pending||t(H).pending,h(mt,t(Jt).label)}),Q("click",we,()=>te(t(fe).name,"start")),g(ye,we)},Ct=ye=>{var we=Zs(),mt=m(we,!0);E(()=>{var Yr,Na;V(we,"aria-label",`Stop ${t(fe).name}`),we.disabled=t(Jt).pending||t(fr).pending||t(H).pending||((Yr=t(Ee))==null?void 0:Yr.status)==="stopping",h(mt,((Na=t(Ee))==null?void 0:Na.status)==="stopping"?"Stopping…":t(fr).label)}),Q("click",we,()=>te(t(fe).name,"stop")),g(ye,we)};D(qe,ye=>{t(G)&&t(Ke).configured?ye(gt):t(G)||ye(Ct,1)})}var mr=o(qe,2);{let ye=F(()=>!Pr(t(fe))),we=F(()=>e.pending.has(`service:${e.project.id}:${t(fe).name}:share`));Ji(mr,{get service(){return t(Ee)},get name(){return t(fe).name},get shareable(){return t(ye)},get busy(){return t(we)},onLogs:()=>{var mt;return p()(((mt=t(Ee))==null?void 0:mt.key)??`${e.project.id}:${t(fe).name}`)},onRequests:()=>{var mt;return _()(((mt=t(Ee))==null?void 0:mt.key)??`${e.project.id}:${t(fe).name}`)},onShare:(mt,Yr)=>j()(`${e.project.id}:${t(fe).name}`,mt,Yr),onUnshare:()=>C()(`${e.project.id}:${t(fe).name}`)})}var _r=o(Ge,2),ba=f(_r);{var Pt=ye=>{var we=rg();E(()=>{V(we,"href",t(Ee).urls[0]),V(we,"aria-label",`Open ${t(fe).name} in browser`)}),g(ye,we)};D(ba,ye=>{var we;(we=t(Ee))!=null&&we.urls[0]&&!t(G)&&t(Ee).upstreamReady&&ye(Pt)})}var Hr=o(ba,2);{var es=ye=>{var we=ag(),mt=m(we,!0);E(()=>{V(we,"aria-label",`Copy ${t(fe).name} address`),h(mt,t(Z)===t(fe).name?"Copied":"Copy address")}),Q("click",we,()=>ae(t(fe).name,Pr(t(fe))?`localhost:${t(fe).upstream}`:t(Ee).urls[0])),g(ye,we)},hc=F(()=>{var ye;return((ye=t(Ee))==null?void 0:ye.urls[0])||Pr(t(fe))});D(Hr,ye=>{t(hc)&&ye(es)})}var wo=o(Hr,2);{var gc=ye=>{var we=Di(),mt=m(we,!0);E(()=>{we.disabled=t(Jt).pending,h(mt,t(Jt).label)}),Q("click",we,()=>te(t(fe).name,"start")),g(ye,we)},mc=ye=>{var we=Zs(),mt=m(we,!0);E(()=>{we.disabled=t(fr).pending,h(mt,t(fr).label)}),Q("click",we,()=>te(t(fe).name,"stop")),g(ye,we)};D(wo,ye=>{t(G)&&t(Ke).configured?ye(gc):t(G)||ye(mc,1)})}var _c=o(wo,2);{var yc=ye=>{var we=Zs(),mt=m(we,!0);E(()=>{we.disabled=t(H).pending,h(mt,t(H).label)}),Q("click",we,()=>te(t(fe).name,"restart")),g(ye,we)};D(_c,ye=>{var we;t(Ke).configured&&!t(G)&&((we=t(Ee))==null?void 0:we.managedBy)!=="terminal"&&ye(yc)})}var ko=o(_r,2);{var bc=ye=>{var we=og(),mt=f(we),Yr=m(mt),Na=o(mt,2),Fs=m(Na),bs=o(Na,2),xt=o(f(bs),2),zt=m(xt,!0),Vs=o(xt,2),zn=m(Vs,!0),Sc=o(Vs,2);{var xc=Er=>{var la=sg(),ws=m(la);E(Ka=>h(ws,`Environment variables: ${Ka??""}`),[()=>Object.keys(t(fe).env).join(", ")]),g(Er,la)};D(Sc,Er=>{t(fe).env&&Er(xc)})}var jc=o(bs,2),So=o(f(jc),2),xo=f(So),Ec=o(f(xo),2);He(Ec,17,()=>e.project.commands.filter(Er=>Er.name!==t(fe).name),Er=>Er.name,(Er,la)=>{var ws=ng(),Ka=f(ws),On=o(Ka,2),Pc=m(On,!0);E(Rc=>{Cd(Ka,t(la).name),qs(Ka,Rc),V(Ka,"aria-label",`${t(fe).name} starts after ${t(la).name}`),h(Pc,t(la).name)},[()=>t(fe).after.includes(t(la).name)]),g(Er,ws)},Er=>{var la=ig();g(Er,la)});var qc=o(xo,2),bi=f(qc),Cc=m(bi,!0),jo=o(bi,2);E((Er,la,ws,Ka)=>{var On;V(we,"hidden",!t(P)),h(Yr,`Configure ${t(fe).name??""}`),h(Fs,`$ ${t(fe).run??""}`),h(zt,((On=t(Ee))==null?void 0:On.readinessMessage)??(t(fe).ready.type==="tcp"?"Checks that the service accepts connections.":"Waits for the configured application check to pass.")),h(zn,Er),bi.disabled=la,h(Cc,ws),jo.disabled=Ka},[()=>JSON.stringify(t(fe).ready,null,2),()=>e.pending.has(`project:${e.project.id}:update-dependencies:${t(fe).name}`),()=>e.pending.has(`project:${e.project.id}:update-dependencies:${t(fe).name}`)?"Saving…":"Save order",()=>e.pending.has(`project:${e.project.id}:update-dependencies:${t(fe).name}`)]),Kt("submit",So,Er=>be(Er,t(fe).name)),Q("click",jo,_e),g(ye,we)};D(ko,ye=>{t(Ke).configured&&ye(bc)})}var wc=o(ko,2);{var kc=ye=>{Zi(ye,{get message(){return t(le)}})};D(wc,ye=>{t(le)&&ye(kc)})}E((ye,we,mt,Yr,Na,Fs,bs)=>{var xt,zt;Le=it(Ce,1,"service-card svelte-l7un4l",null,Le,{failed:ye}),V(St,"hidden",t(P)),h(pr,we),h(ut,t(fe).name),hr=it(Vt,1,"row-health svelte-l7un4l",null,hr,{ready:!t(G)&&((xt=t(Ee))==null?void 0:xt.upstreamReady)&&!t(le),errored:mt}),h(or,Yr),V(lr,"hidden",!t(P)),Wt=it(gr,1,"status-dot svelte-l7un4l",null,Wt,{running:!t(G),waiting:t(Ee)&&!t(Ee).upstreamReady&&!t(G)}),h(Gr,t(fe).name),h(xr,Na),V(jr,"hidden",!t(P)),h(k,`${Fs??""}${((zt=t(Ee))==null?void 0:zt.managedBy)==="terminal"?" · terminal owned":""}`),V(N,"hidden",t(P)),V(pe,"hidden",!t(P)),h(ze,bs),V(Ge,"hidden",t(P)),V(Ge,"aria-label",`Controls for ${t(fe).name}`),V(_r,"hidden",!t(P))},[()=>!!t(le),()=>Pr(t(fe))?"Database":t(fe).name==="web"?"Website":t(fe).name==="api"?"API":t(fe).name,()=>!!t(le),()=>t(le)?"Needs attention":ve(t(Ee)),()=>ve(t(Ee)),()=>Pr(t(fe))?"Database":"App service",()=>{var ye;return Pr(t(fe))?`Database endpoint: localhost:${t(fe).upstream}`:((ye=t(Ee))==null?void 0:ye.urls[0])??"App link available after start"}]),g(lt,Ce)},lt=>{var Ke=cg(),fe=f(Ke),Ee=m(fe,!0),Jt=o(fe,2),fr=m(Jt,!0);E(()=>{h(Ee,t(O)?"No matching services":"No configured services"),h(fr,t(O)?"Try a different name or clear the search.":`Add a service command to ${e.project.file} and retry this project.`)}),g(lt,Ke)});var _t=o($e,2),Ft=m(_t,!0);E(lt=>{V(Se,"hidden",!t(se)),h(ke,t(se)?"Some services need attention.":t(T)?"Your app is ready to open.":t(B)?"Your services are running.":"Let’s get your project running."),h(Ve,t(se)?"Check the service errors below. Other services can keep running.":t(T)?"Everything stays on your machine unless you choose to share it.":t(B)?"Open a service to see its startup progress and logs.":"Start your project to launch your services in the right order."),V(rt,"hidden",!t(P)),h(Me,e.project.commands.length),h(Dt,t(B)),h(sr,t(K)),V(Lr,"hidden",t(re).length<6&&!t(P)),V(_t,"hidden",t(P)),h(Ft,lt)},[()=>t(se)?"Some services need attention.":t(re).length&&t(re).every(lt=>{var Ke;return((Ke=lt.runtime)==null?void 0:Ke.upstreamReady)&&lt.runtime.status!=="stopped"})?`All ${t(re).length} services are ready`:`${t(B)} of ${t(re).length} services running`]),Gt(nr,()=>t(O),lt=>u(O,lt)),g(ie,ge)};D(Qa,ie=>{e.project.available?ie(Ia,-1):ie($r)})}E(()=>{V(Ie,"aria-labelledby",t(P)?"project-settings-title":"project-title"),V(bt,"hidden",t(P)),h(Be,e.project.name),Qe=it(Ne,1,"status-dot svelte-l7un4l",null,Qe,{running:t(B)>0&&!t(se)}),h(Ue,e.project.available?t(se)?"Needs attention":t(B)?"Running":"Stopped":"Unavailable"),V(dr,"hidden",t(P)),V(Wr,"hidden",!t(P)),h(wr,e.project.name),oa=it(Sr,1,"services-content svelte-l7un4l",null,oa,{managing:t(P)}),V(Sr,"hidden",t(P))}),Q("click",tr,()=>{u(P,!1),u(O,"")}),g(r,Ie),It()}er(["click"]);var fg=y('<a class="service-address mono svelte-1h3c7zm" target="_blank" rel="noreferrer"> </a>'),pg=y('<code class="service-address svelte-1h3c7zm"> </code>'),hg=y('<button class="svelte-1h3c7zm"><!><span> </span></button>'),gg=y('<button class="primary svelte-1h3c7zm"><!><span> </span></button>'),mg=y('<div class="action-error svelte-1h3c7zm"><!></div>'),_g=y('<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 yg(r,e){Tt(e,!0);let a=Re(e,"canStart",3,!1),s=Re(e,"pending",19,()=>new Set),n=Re(e,"error",3,""),i=Re(e,"shareError",3,"");Re(e,"logsSelected",3,!1);let c=Re(e,"onRequests",3,()=>{});const l=F(()=>e.entry.runtime),d=F(()=>!!(t(l)&&t(l).status!=="stopped")),v=F(()=>["start","stop","restart"].some(U=>s().has(`service:${e.entry.key}:${U}`))),p=F(()=>yo(t(l)));let _=R("");async function w(U){u(_,"");try{const M=await U();M&&typeof M=="object"&&"ok"in M&&M.ok===!1&&u(_,"error"in M&&typeof M.error=="string"?M.error:"Service action failed",!0)}catch(M){u(_,M instanceof Error?M.message:"Service action failed",!0)}}var S=_g(),j=f(S),C=f(j),q=f(C);let b;var I=o(q),A=m(I,!0),L=o(I),P=m(L,!0),W=o(C,2),O=m(W,!0),Z=o(W,2);{var ae=U=>{var M=fg(),he=m(M,!0);E(()=>{V(M,"href",t(l).urls[0]),h(he,t(l).urls[0])}),g(U,M)},Y=U=>{var M=pg(),he=m(M,!0);E(()=>{var te,be;return h(he,((te=e.entry.command)==null?void 0:te.run)??((be=t(l))==null?void 0:be.command))}),g(U,M)};D(Z,U=>{var M;(M=t(l))!=null&&M.urls[0]?U(ae):U(Y,-1)})}var $=o(Z,2);Xi($,{get service(){return t(l)}});var X=o($,2);{let U=F(()=>{var ce,ve;return((ve=(ce=t(l))==null?void 0:ce.shareStartup)==null?void 0:ve.status)==="starting"?t(l).shareStartup.startedAt:void 0}),M=F(()=>{var ce;return(ce=t(l))==null?void 0:ce.key}),he=F(()=>{var ce,ve,Ie,bt;return((ve=(ce=t(l))==null?void 0:ce.share)==null?void 0:ve.protected)??(((bt=(Ie=t(l))==null?void 0:Ie.shareStartup)==null?void 0:bt.status)==="starting"&&t(l).shareStartup.protected)??!1}),te=F(()=>{var ce,ve;return((ve=(ce=t(l))==null?void 0:ce.shareStartup)==null?void 0:ve.status)==="starting"?t(l).shareStartup.url:void 0}),be=F(()=>{var ce,ve;return t(d)?(ve=(ce=t(l))==null?void 0:ce.share)==null?void 0:ve.url:void 0}),_e=F(()=>{var ce,ve;return s().has(`service:${e.entry.key}:share`)||((ve=(ce=t(l))==null?void 0:ce.shareStartup)==null?void 0:ve.status)==="starting"}),de=F(()=>{var ce,ve;return((ve=(ce=t(l))==null?void 0:ce.shareStartup)==null?void 0:ve.status)==="failed"?t(l).shareStartup.error:i()});pc(X,{get startedAt(){return t(U)},get serviceKey(){return t(M)},get protectedShare(){return t(he)},get pendingUrl(){return t(te)},get name(){return e.entry.name},get url(){return t(be)},get pending(){return t(_e)},get error(){return t(de)}})}var T=o(j,2),se=f(T);{var B=U=>{var M=hg(),he=f(M);Nv(he,{size:13});var te=o(he),be=m(te,!0);E(_e=>{var de;M.disabled=t(v)||((de=t(l))==null?void 0:de.status)==="stopping",V(M,"aria-label",`Stop ${e.entry.name}`),h(be,_e)},[()=>{var _e;return s().has(`service:${e.entry.key}:stop`)||((_e=t(l))==null?void 0:_e.status)==="stopping"?"Stopping…":"Stop"}]),Q("click",M,()=>w(e.onStop)),g(U,M)},K=U=>{var M=gg(),he=f(M);nc(he,{size:14});var te=o(he),be=m(te,!0);E(_e=>{M.disabled=!a()||t(v),V(M,"aria-label",`Start ${e.entry.name}`),h(be,_e)},[()=>s().has(`service:${e.entry.key}:start`)?"Starting…":"Start"]),Q("click",M,()=>w(e.onStart)),g(U,M)};D(se,U=>{t(d)?U(B):a()&&U(K,1)})}var re=o(se,2);{let U=F(()=>!Pr(t(l)??e.entry.command??{})),M=F(()=>s().has(`service:${e.entry.key}:share`));Ji(re,{get service(){return t(l)},get name(){return e.entry.name},get shareable(){return t(U)},get busy(){return t(M)},get onLogs(){return e.onLogs},get onRequests(){return c()},get onShare(){return e.onShare},get onUnshare(){return e.onUnshare}})}var ee=o(T,2);{var oe=U=>{var M=mg(),he=f(M);{let te=F(()=>{var be;return t(_)||n()||((be=t(l))==null?void 0:be.lastError)||""});Zi(he,{get message(){return t(te)}})}g(U,M)};D(ee,U=>{var M;(t(_)||n()||(M=t(l))!=null&&M.lastError)&&U(oe)})}E(()=>{V(S,"aria-label",`${e.projectName} / ${e.entry.name}`),b=it(q,1,"status-dot svelte-1h3c7zm",null,b,{running:t(p)==="ready"||t(p)==="listening"}),h(A,e.entry.name),h(P,t(p)),h(O,e.projectName),V(T,"aria-label",`Controls for ${e.entry.name}`)}),g(r,S),It()}er(["click"]);function bg(r){var s,n;if(!["GET","HEAD"].includes(r.method)||r.status>=400||r.error)return!1;let e=r.path.split("?")[0];try{e=decodeURIComponent(e)}catch{}if(/^\/(?:api|graphql|trpc)(?:\/|$)/i.test(e))return!1;const a=(n=(s=r.requestHeaders)==null?void 0:s.entries.find(([i])=>i.toLowerCase()==="sec-fetch-dest"))==null?void 0:n[1];return a==="document"||a==="iframe"?!1:a&&/^(?:script|style|font|image|worker|sharedworker|serviceworker|audio|video)$/.test(a)||/^\/(?:@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)}var wg=y('<div class="empty svelte-tqqrb7"><strong class="svelte-tqqrb7">No matching requests</strong><p class="svelte-tqqrb7">Requests through your service’s LocalDeck URL appear here.</p></div>'),kg=y('<th class="service-column svelte-tqqrb7">Service</th>'),Sg=y('<td class="service-column svelte-tqqrb7"> </td>'),xg=y('<tr><td class="request-cell svelte-tqqrb7"><button class="svelte-tqqrb7"><span class="disclosure svelte-tqqrb7" aria-hidden="true"> </span><span class="method svelte-tqqrb7"> </span><span class="path svelte-tqqrb7"> </span></button></td><td> </td><td class="numeric duration svelte-tqqrb7"> <span class="unit svelte-tqqrb7">ms</span></td><!></tr>'),jg=y('<p class="error svelte-tqqrb7"> </p>'),Eg=y('<span class="svelte-tqqrb7">Only GET and HEAD can be replayed.</span>'),qg=y('<span class="svelte-tqqrb7">Start the service to replay this request.</span>'),Cg=y('<p class="error svelte-tqqrb7" role="alert"> </p>'),Pg=y('<p role="status" class="svelte-tqqrb7"> </p>'),Rg=y('<section class="inspector svelte-tqqrb7" aria-label="Request details"><header class="svelte-tqqrb7"><h3 class="svelte-tqqrb7">Request details</h3><button class="close-inspector svelte-tqqrb7" aria-label="Close request details"><!></button></header> <strong class="svelte-tqqrb7"> </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>'),Ag=y('<div class="request-list svelte-tqqrb7" role="region" aria-label="Recorded requests"><table class="svelte-tqqrb7"><thead><tr><th class="svelte-tqqrb7">Request</th><th class="numeric svelte-tqqrb7">Status</th><th class="numeric svelte-tqqrb7">Duration</th><!></tr></thead><tbody></tbody></table></div> <!>',1),Lg=y("<div><!></div>");function Tg(r,e){Tt(e,!0);let a=Re(e,"showService",3,!0),s=R("");const n=F(()=>e.records.find(b=>`${b.service}:${b.id}`===t(s))),i=F(()=>e.services.find(b=>{var I;return b.key===((I=t(n))==null?void 0:I.service)})),c=F(()=>t(n)&&["GET","HEAD"].includes(t(n).method)),l=F(()=>{var b;return((b=t(i))==null?void 0:b.status)==="running"&&t(i).upstreamReady});let d=R(!1),v=R(null),p=R("");yr(()=>{var b,I;(b=t(n))==null||b.id,(I=t(n))==null||I.service,u(v,null),u(p,"")});async function _(){var I,A;if(!t(n)||!t(c)||!t(l)||t(d))return;const b=t(n);u(d,!0),u(v,null),u(p,"");try{const L=await fetch(`/api/services/${encodeURIComponent(b.service)}/replay`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({requestId:b.id})}),P=await L.json();if(!L.ok)throw new Error(P.error??"Replay failed");((I=t(n))==null?void 0:I.id)===b.id&&t(n).service===b.service&&u(v,P,!0)}catch(L){((A=t(n))==null?void 0:A.id)===b.id&&t(n).service===b.service&&u(p,L instanceof Error?L.message:"Replay failed",!0)}finally{u(d,!1)}}var w=Lg();let S;var j=f(w);{var C=b=>{var I=wg();g(b,I)},q=b=>{var I=Ag(),A=Ye(I),L=f(A),P=f(L),W=f(P),O=o(f(W),3);{var Z=X=>{var T=kg();g(X,T)};D(O,X=>{a()&&X(Z)})}var ae=o(P);He(ae,21,()=>e.records,X=>`${X.service}:${X.id}`,(X,T)=>{var se=xg();let B;var K=f(se),re=f(K),ee=f(re),oe=m(ee,!0),U=o(ee),M=m(U,!0),he=o(U),te=m(he,!0),be=o(K);let _e;var de=m(be,!0),ce=o(be),ve=f(ce),Ie=o(ce);{var bt=vt=>{var tt=Sg(),Be=m(tt,!0);E((Ae,Ne)=>{V(tt,"title",Ae),h(Be,Ne)},[()=>e.names.get(t(T).service)??t(T).service,()=>e.names.get(t(T).service)??t(T).service]),g(vt,tt)};D(Ie,vt=>{a()&&vt(bt)})}E((vt,tt)=>{var Be,Ae,Ne,Qe,Ue,br;B=it(se,1,"request-row svelte-tqqrb7",null,B,{selected:((Be=t(n))==null?void 0:Be.service)===t(T).service&&((Ae=t(n))==null?void 0:Ae.id)===t(T).id}),V(re,"aria-label",vt),V(re,"aria-expanded",((Ne=t(n))==null?void 0:Ne.service)===t(T).service&&((Qe=t(n))==null?void 0:Qe.id)===t(T).id),h(oe,((Ue=t(n))==null?void 0:Ue.service)===t(T).service&&((br=t(n))==null?void 0:br.id)===t(T).id?"▾":"▸"),h(M,t(T).method),V(he,"title",t(T).path),h(te,t(T).path),_e=it(be,1,"numeric status svelte-tqqrb7",null,_e,{failed:t(T).status>=400||!!t(T).error||t(T).status===0,redirect:t(T).status>=300&&t(T).status<400}),h(de,t(T).status||"ERR"),h(ve,tt)},[()=>`Inspect ${t(T).method} ${t(T).path} for ${e.names.get(t(T).service)??t(T).service}`,()=>Math.round(t(T).durationMs).toLocaleString()]),Q("click",se,()=>u(s,t(s)===`${t(T).service}:${t(T).id}`?"":`${t(T).service}:${t(T).id}`,!0)),g(X,se)});var Y=o(A,2);{var $=X=>{var T=Rg(),se=f(T),B=o(f(se)),K=f(B);yi(K,{size:16});var re=o(se,2),ee=m(re),oe=o(re,2),U=m(oe),M=o(oe,2);{var he=Ae=>{var Ne=jg(),Qe=m(Ne,!0);E(()=>h(Qe,t(n).error)),g(Ae,Ne)};D(M,Ae=>{t(n).error&&Ae(he)})}var te=o(M,2);Va(te,()=>`${t(n).service}:${t(n).id}`,Ae=>{vc(Ae,{get record(){return t(n)},get replayResult(){return t(v)}})});var be=o(te,4),_e=m(be,!0),de=o(be,2);{var ce=Ae=>{var Ne=Eg();g(Ae,Ne)},ve=Ae=>{var Ne=qg();g(Ae,Ne)};D(de,Ae=>{t(c)?t(l)||Ae(ve,1):Ae(ce)})}var Ie=o(de,2);{var bt=Ae=>{var Ne=Cg(),Qe=m(Ne,!0);E(()=>h(Qe,t(p))),g(Ae,Ne)};D(Ie,Ae=>{t(p)&&Ae(bt)})}var vt=o(Ie,2);{var tt=Ae=>{var Ne=Pg(),Qe=m(Ne);E(()=>h(Qe,`Replay complete · HTTP ${t(v).status??""}. Expand Response to view the response.`)),g(Ae,Ne)};D(vt,Ae=>{t(v)&&Ae(tt)})}var Be=o(vt,2);Va(Be,()=>`${t(n).service}:${t(n).id}`,Ae=>{fc(Ae,{get record(){return t(n)},get service(){return t(i)}})}),E((Ae,Ne,Qe)=>{h(ee,`${t(n).method??""} ${t(n).path??""}`),h(U,`${Ae??""} · ${Ne??""} · ${t(n).via??""} · HTTP ${t(n).status??""} · ${Qe??""} bytes`),be.disabled=!t(c)||!t(l)||t(d),h(_e,t(d)?"Replaying…":"Replay request")},[()=>e.names.get(t(n).service)??t(n).service,()=>new Date(t(n).ts).toLocaleString(),()=>t(n).bytes.toLocaleString()]),Q("click",B,()=>u(s,"")),Q("click",be,_),g(X,T)};D(Y,X=>{t(n)&&X($)})}g(b,I)};D(j,b=>{e.records.length?b(q,-1):b(C)})}E(()=>S=it(w,1,"requests-panel svelte-tqqrb7",null,S,{inspecting:!!t(n)})),g(r,w),It()}er(["click"]);function Ig(r,e,a,s=ii,n={}){const i=a.trim().toLowerCase();return[...new Set(e)].flatMap(c=>[...(r[c]??[]).map(l=>l.source||l.stream!=="system"||!/^LocalDeck: (sharing |share for )/.test(l.line)?l:{...l,source:"share"}),...(n[c]??[]).filter(l=>l.via==="share").map(l=>({id:`request:${l.id}`,ts:l.ts,service:l.service,stream:"system",source:"share",line:`${l.method} ${l.path} → ${l.status} · ${Math.round(l.durationMs)} ms`}))]).filter(c=>!i||`${c.line} ${c.service} ${c.stream} ${c.source??""}`.toLowerCase().includes(i)).sort((c,l)=>c.ts-l.ts||c.service.localeCompare(l.service)||c.id.localeCompare(l.id)).slice(-s)}function Ng(r,e){return r.includes(e)?r.filter(a=>a!==e):[...new Set([...r,e])]}var Dg=y('<label class="service-choice svelte-147la1m"><input type="checkbox" class="svelte-147la1m"/><span> </span><span class="service-state svelte-147la1m"> </span></label>'),Mg=y('<fieldset class="source-group svelte-147la1m"><legend class="svelte-147la1m"> </legend> <label class="group-toggle svelte-147la1m"><span class="svelte-147la1m"> </span><span class="select-all svelte-147la1m">Select all <input type="checkbox" class="svelte-147la1m"/></span></label> <!></fieldset>'),zg=y("<p>No active services. Start a service to see it here.</p>"),Og=y('<div class="history-error svelte-147la1m" role="alert"> <button class="svelte-147la1m">Retry logs</button></div>'),Zo=y('<div class="history-error svelte-147la1m" role="alert"> </div>'),Ug=y('<div><button class="source-select svelte-147la1m"><span role="img"></span><span class="project-name svelte-147la1m"> </span> </button> <button class="clear-source svelte-147la1m"><!></button></div>'),Hg=y('<details class="request-options svelte-147la1m"><summary class="svelte-147la1m">Options <!></summary> <div class="request-options-menu svelte-147la1m"><label class="svelte-147la1m"><input type="checkbox" class="svelte-147la1m"/> Show assets &amp; dev traffic</label></div></details>'),Bg=y('<!> <div class="logs-status svelte-147la1m"><span> </span></div>',1),Kg=y('<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>'),Fg=y('<div class="empty svelte-147la1m"><strong class="svelte-147la1m"> </strong><span class="svelte-147la1m"> </span></div>'),Vg=y('<span class="source svelte-147la1m"> </span>'),Wg=y('<div><time class="svelte-147la1m"> </time> <!> <span class="stream svelte-147la1m"> </span><span class="line svelte-147la1m"> </span><button class="copy-line svelte-147la1m" aria-label="Copy log line"><!></button></div>'),$g=y("<!> Resume",1),Gg=y("<!> Pause",1),Yg=y('<div class="log-output svelte-147la1m" tabindex="0" role="region" aria-label="Log output"><!></div> <!> <div class="logs-status svelte-147la1m"><span> <span class="record-count svelte-147la1m"> </span></span><div class="log-controls svelte-147la1m"><button class="svelte-147la1m"><!></button><button class="svelte-147la1m"><!> Jump to latest</button></div></div>',1),Jg=y('<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></details> <label class="filter svelte-147la1m"><!><input type="search" class="svelte-147la1m"/></label> <button class="close svelte-147la1m"><!></button></header> <!> <!> <div class="source-tabs-row svelte-147la1m"><nav class="source-tabs svelte-147la1m"><button>All selected <span> </span></button> <!></nav> <!></div> <!></section>');function Zg(r,e){Tt(e,!0);let a=Re(e,"view",3,"logs"),s=Re(e,"services",19,()=>[]),n=Re(e,"historyBoundaries",19,()=>({})),i=Re(e,"resetView",3,0),c=Re(e,"requestedSource",3,null),l=Re(e,"error",3,""),d=Re(e,"requests",19,()=>({})),v=Re(e,"limit",3,ii);yr(()=>{i(),u(C,c()),u(S,"")});let p=R(""),_=R(at([]));async function w(z){const ne=a(),ke=`${z}/${ne}`;if(!t(_).includes(ke)){u(_,[...t(_),ke],!0),u(p,"");try{await e.onClear(z,ne),ne==="logs"&&u(b,null)}catch(Te){u(p,Te instanceof Error?Te.message:String(Te),!0)}finally{u(_,t(_).filter(Te=>Te!==ke),!0)}}}let S=R(""),j=R(!1),C=R(at(c())),q=R(!0),b=R(null),I=R(""),A=R("");function L(){t(b)?(u(b,null),u(q,!0)):(u(b,[...t(de)],!0),u(q,!1))}async function P(){u(b,null),u(q,!0),await ms(),t(Z)&&(t(Z).scrollTop=t(Z).scrollHeight)}async function W(z){u(A,"");try{await navigator.clipboard.writeText(z.line),u(I,`${z.service}:${z.id}`)}catch{u(A,"Could not copy. Select the message and copy it manually.")}}const O=F(()=>new Map(s().map(z=>[z.key,z.status])));let Z=R(void 0),ae,Y=R(void 0),$=R(720);const X=F(()=>Math.max(160,t($)-140)),T=F(()=>Math.min(t(X),Math.max(160,t(Y)??Math.min(420,Math.max(220,t($)*.33)))));let se;Dn(()=>{u($,window.innerHeight,!0);try{u(j,localStorage.getItem("localdeck-show-background-requests")==="true")}catch{}try{const z=Number(localStorage.getItem("localdeck-logs-height"));Number.isFinite(z)&&z>0&&u(Y,z,!0)}catch{}});function B(){try{localStorage.setItem("localdeck-logs-height",String(t(T)))}catch{}}function K(z){z.button===0&&(z.preventDefault(),se={y:z.clientY,height:ae.getBoundingClientRect().height},z.currentTarget.setPointerCapture(z.pointerId))}function re(z){!se||!z.currentTarget.hasPointerCapture(z.pointerId)||u(Y,Math.max(160,Math.min(t(X),se.height+se.y-z.clientY)),!0)}function ee(){se=void 0,B()}function oe(z){["ArrowUp","ArrowDown","Home","End"].includes(z.key)&&(z.preventDefault(),u(Y,z.key==="Home"?160:z.key==="End"?t(X):Math.max(160,Math.min(t(X),t(T)+(z.key==="ArrowUp"?24:-24))),!0),B())}const U=F(()=>{const z=new Map;for(const ne of e.sources){const ke=ne.key.split(":")[0];let Te=z.get(ke);Te||(Te={id:ke,name:ne.projectName,sources:[]},z.set(ke,Te)),Te.sources.push(ne)}return[...z.values()]});function M(z,ne){const ke=new Set(z);e.onSelectionChange(ne?[...new Set([...e.selectedKeys,...z])]:e.selectedKeys.filter(Te=>!ke.has(Te)))}const he=F(()=>e.sources.filter(z=>e.selectedKeys.includes(z.key))),te=F(()=>t(C)&&e.selectedKeys.includes(t(C))?t(C):null),be=F(()=>Object.fromEntries((t(te)?[t(te)]:e.selectedKeys).map(z=>{const ne=n()[`${z}/logs`],ke=d()[z]??[];return[z,ne?ke.filter(Te=>sn(Te.id,ne)):ke]}))),_e=F(()=>Ig(e.logs,t(te)?[t(te)]:e.selectedKeys,t(S),v(),t(be))),de=F(()=>t(b)??t(_e));yr(()=>{t(te),t(S),a(),e.selectedKeys,u(b,null),u(I,"")});const ce=F(()=>(t(te)?[t(te)]:e.selectedKeys).flatMap(z=>d()[z]??[]).filter(z=>`${z.method} ${z.path} ${z.status} ${z.via}`.toLowerCase().includes(t(S).trim().toLowerCase()))),ve=F(()=>new Set(t(ce).filter(bg))),Ie=F(()=>t(ce).filter(z=>t(j)||!t(ve).has(z)).sort((z,ne)=>ne.ts-z.ts||z.service.localeCompare(ne.service)||z.id.localeCompare(ne.id)).slice(0,v()));function bt(){u(j,!t(j));try{localStorage.setItem("localdeck-show-background-requests",String(t(j)))}catch{}}const vt=F(()=>new Map(e.sources.map(z=>[z.key,`${z.projectName} / ${z.name}`])));function tt(){t(Z)&&!t(b)&&u(q,t(Z).scrollHeight-t(Z).scrollTop-t(Z).clientHeight<32)}yr(()=>{t(de),t(q)&&ms().then(()=>{t(Z)&&t(q)&&(t(Z).scrollTop=t(Z).scrollHeight)})});var Be=Jg();Kt("resize",ai,()=>u($,window.innerHeight,!0));let Ae;var Ne=f(Be);V(Ne,"aria-valuemin",160);var Qe=o(Ne,2),Ue=f(Qe),br=f(Ue);Mv(br,{size:16,"aria-hidden":"true"});var ht=o(br,1,!0),dr=o(Ue,2),sa=f(dr),ma=o(f(sa)),Ra=m(ma,!0),Wr=o(ma);ni(Wr,{size:13,"aria-hidden":"true"});var _a=o(sa,2);He(_a,21,()=>t(U),z=>z.id,(z,ne)=>{const ke=F(()=>t(ne).sources.filter(Nt=>e.selectedKeys.includes(Nt.key)).length);var Te=Mg(),Ve=f(Te),We=m(Ve,!0),De=o(Ve,2),rt=f(De),Ut=m(rt,!0),ot=o(rt),Me=o(f(ot)),Mt=o(De,2);He(Mt,17,()=>t(ne).sources,Nt=>Nt.key,(Nt,Dt)=>{var st=Dg(),Et=f(st),sr=o(Et),Lr=m(sr,!0),nr=o(sr),vr=m(nr,!0);E((Ur,$e)=>{V(Et,"aria-label",`${t(ne).name} / ${t(Dt).name}`),qs(Et,Ur),h(Lr,t(Dt).name),h(vr,$e)},[()=>e.selectedKeys.includes(t(Dt).key),()=>t(O).get(t(Dt).key)??"stopped"]),Q("change",Et,()=>e.onSelectionChange(Ng(e.selectedKeys,t(Dt).key))),g(Nt,st)}),E(()=>{h(We,t(ne).name),h(Ut,t(ne).name),V(Me,"aria-label",`Select all services in ${t(ne).name}`),qs(Me,t(ke)===t(ne).sources.length),Me.indeterminate=t(ke)>0&&t(ke)<t(ne).sources.length}),Q("change",Me,Nt=>M(t(ne).sources.map(Dt=>Dt.key),Nt.currentTarget.checked)),g(z,Te)},z=>{var ne=zg();g(z,ne)}),_s(dr,z=>Bt==null?void 0:Bt(z));var ya=o(dr,2),na=f(ya);_o(na,{size:14,"aria-hidden":"true"});var wr=o(na),tr=o(ya,2),zr=f(tr);yi(zr,{size:17,"aria-hidden":"true"});var Or=o(Qe,2);{var Aa=z=>{var ne=Og(),ke=f(ne),Te=o(ke);E(()=>h(ke,l())),Q("click",Te,function(...Ve){var We;(We=e.onRetry)==null||We.apply(this,Ve)}),g(z,ne)};D(Or,z=>{l()&&z(Aa)})}var La=o(Or,2);{var Ta=z=>{var ne=Zo(),ke=m(ne);E(()=>h(ke,`Could not clear ${a()??""}: ${t(p)??""}`)),g(z,ne)};D(La,z=>{t(p)&&z(Ta)})}var ia=o(La,2),kr=f(ia),ar=f(kr);let Ba;var Sr=o(f(ar)),oa=m(Sr,!0),Qa=o(ar,2);He(Qa,17,()=>t(he),z=>z.key,(z,ne)=>{var ke=Ug();let Te;var Ve=f(ke),We=f(Ve);let De;var rt=o(We),Ut=m(rt),ot=o(rt),Me=o(Ve,2),Mt=f(Me);Ov(Mt,{size:13,"aria-hidden":"true"}),E((Nt,Dt,st,Et,sr)=>{Te=it(ke,1,"source-tab svelte-147la1m",null,Te,{active:t(te)===t(ne).key}),V(Ve,"aria-pressed",t(te)===t(ne).key),V(Ve,"title",`${t(ne).projectName} / ${t(ne).name}`),De=it(We,1,"service-signal svelte-147la1m",null,De,{running:Nt,starting:Dt}),V(We,"aria-label",st),V(We,"title",Et),h(Ut,`${t(ne).projectName??""} /`),h(ot,` ${t(ne).name??""}`),Me.disabled=sr,V(Me,"aria-label",`Clear ${a()} for ${t(ne).projectName} / ${t(ne).name}`),V(Me,"title",`Clear ${a()} for ${t(ne).projectName} / ${t(ne).name}`)},[()=>t(O).get(t(ne).key)==="running",()=>t(O).get(t(ne).key)==="starting",()=>t(O).get(t(ne).key)??"stopped",()=>t(O).get(t(ne).key)??"stopped",()=>t(_).includes(`${t(ne).key}/${a()}`)]),Q("click",Ve,()=>u(C,t(ne).key,!0)),Q("click",Me,()=>void w(t(ne).key)),g(z,ke)});var $r=o(kr,2);{var Ia=z=>{var ne=Hg(),ke=f(ne),Te=o(f(ke));ni(Te,{size:13,"aria-hidden":"true"});var Ve=o(ke,2),We=f(Ve),De=f(We);_s(ne,rt=>Bt==null?void 0:Bt(rt)),E(()=>qs(De,t(j))),Q("change",De,bt),g(z,ne)};D($r,z=>{a()==="requests"&&z(Ia)})}var ie=o(ia,2);{var ge=z=>{var ne=Bg(),ke=Ye(ne);{let De=F(()=>!t(te)&&e.selectedKeys.length>1);Tg(ke,{get records(){return t(Ie)},get services(){return s()},get names(){return t(vt)},get showService(){return t(De)}})}var Te=o(ke,2),Ve=f(Te),We=m(Ve);E((De,rt)=>h(We,`${De??""} requests${rt??""}`),[()=>t(Ie).length.toLocaleString(),()=>!t(j)&&t(ve).size?` · ${t(ve).size.toLocaleString()} background requests hidden`:""]),g(z,ne)},Se=z=>{var ne=Yg(),ke=Ye(ne),Te=f(ke);{var Ve=$e=>{var _t=Kg();g($e,_t)},We=$e=>{var _t=Fg(),Ft=f(_t),lt=m(Ft,!0),Ke=o(Ft),fe=m(Ke,!0);E((Ee,Jt)=>{h(lt,Ee),h(fe,Jt)},[()=>t(S).trim()?"No output matches this filter":"Waiting for output",()=>t(S).trim()?"Try another search or clear the filter.":"Output from the selected services will appear here."]),g($e,_t)},De=$e=>{var _t=Qr(),Ft=Ye(_t);He(Ft,17,()=>t(de),lt=>`${lt.service}:${lt.id}`,(lt,Ke)=>{var fe=Wg();let Ee;var Jt=f(fe),fr=m(Jt,!0),H=o(Jt,2);{var G=Ze=>{var wt=Vg(),ct=m(wt,!0);E((At,pr)=>{V(wt,"title",At),h(ct,pr)},[()=>t(vt).get(t(Ke).service)??t(Ke).service,()=>t(vt).get(t(Ke).service)??t(Ke).service]),g(Ze,wt)};D(H,Ze=>{!t(te)&&e.selectedKeys.length>1&&Ze(G)})}var le=o(H,2),Ce=m(le,!0),Le=o(le),Je=m(Le,!0),St=o(Le),ir=f(St);{var Tr=Ze=>{_i(Ze,{size:13})},Ir=Ze=>{Mn(Ze,{size:13})};D(ir,Ze=>{t(I)===`${t(Ke).service}:${t(Ke).id}`?Ze(Tr):Ze(Ir,-1)})}E((Ze,wt)=>{Ee=it(fe,1,"log-row svelte-147la1m",null,Ee,{"single-source":!!t(te)||e.selectedKeys.length<=1,stderr:t(Ke).stream==="stderr",shared:t(Ke).source==="share"}),V(Jt,"datetime",Ze),h(fr,wt),h(Ce,t(Ke).source==="share"?"SHARE":t(Ke).stream),h(Je,t(Ke).line),V(St,"title",t(I)===`${t(Ke).service}:${t(Ke).id}`?"Copied":"Copy log line")},[()=>new Date(t(Ke).ts).toISOString(),()=>new Date(t(Ke).ts).toLocaleTimeString([],{hour12:!1})]),Q("click",St,()=>W(t(Ke))),g(lt,fe)}),g($e,_t)};D(Te,$e=>{e.selectedKeys.length?t(de).length?$e(De,-1):$e(We,1):$e(Ve)})}Xa(ke,$e=>u(Z,$e),()=>t(Z));var rt=o(ke,2);{var Ut=$e=>{var _t=Zo(),Ft=m(_t,!0);E(()=>h(Ft,t(A))),g($e,_t)};D(rt,$e=>{t(A)&&$e(Ut)})}var ot=o(rt,2),Me=f(ot),Mt=f(Me),Nt=o(Mt),Dt=m(Nt,!0),st=o(Me),Et=f(st),sr=f(Et);{var Lr=$e=>{var _t=$g(),Ft=Ye(_t);nc(Ft,{size:12}),g($e,_t)},nr=$e=>{var _t=Gg(),Ft=Ye(_t);xv(Ft,{size:12}),g($e,_t)};D(sr,$e=>{t(b)?$e(Lr):$e(nr,-1)})}var vr=o(Et),Ur=f(vr);$d(Ur,{size:12}),E($e=>{h(Mt,t(b)?"Paused · capture continues":"Live output"),h(Dt,$e),V(Et,"aria-pressed",!!t(b)),vr.disabled=t(q)&&!t(b)},[()=>` · ${t(de).length.toLocaleString()} lines · limit ${v().toLocaleString()}`]),Kt("scroll",ke,tt),Q("click",Et,L),Q("click",vr,P),g(z,ne)};D(ie,z=>{a()==="requests"?z(ge):z(Se,-1)})}Xa(Be,z=>ae=z,()=>ae),E(z=>{V(Be,"aria-label",a()==="logs"?"Multi-service logs":"Service requests"),Ae=mo(Be,"",Ae,{height:`${t(T)}px`,"--logs-height":`${t(T)}px`}),V(Ne,"aria-valuemax",t(X)),V(Ne,"aria-valuenow",z),h(ht,a()==="logs"?"Logs":"Requests"),h(Ra,e.selectedKeys.length),V(wr,"aria-label",a()==="logs"?"Filter log output":"Filter requests"),V(wr,"placeholder",a()==="logs"?"Filter output…":"Filter requests…"),V(tr,"aria-label",`Close ${a()} panel`),V(tr,"title",`Close ${a()} panel`),V(kr,"aria-label",a()==="logs"?"Log source views":"Request source views"),Ba=it(ar,1,"all-sources svelte-147la1m",null,Ba,{active:!t(te)}),V(ar,"aria-pressed",!t(te)),h(oa,e.selectedKeys.length)},[()=>Math.round(t(T))]),Q("pointerdown",Ne,K),Q("pointermove",Ne,re),Q("pointerup",Ne,ee),Kt("pointercancel",Ne,ee),Kt("lostpointercapture",Ne,ee),Q("keydown",Ne,oe),Gt(wr,()=>t(S),z=>u(S,z)),Q("click",tr,function(...z){var ne;(ne=e.onClose)==null||ne.apply(this,z)}),Q("click",ar,()=>u(C,null)),g(r,Be),It()}er(["pointerdown","pointermove","pointerup","keydown","change","click"]);const Jn=r=>r instanceof Error?r.message:String(r);function Xg(r,e){return{async selectService(a){const s=r.services.find(i=>i.key===a);r.selected=a;const n=[r.load(a).catch(()=>{})];s&&r.projects.some(i=>i.id===s.projectId)&&!r.projectDetails[s.projectId]&&n.push(r.selectProject(s.projectId).catch(()=>{})),await Promise.all(n)},stopService(a){if(r.projects.some(d=>d.id===a.projectId))return r.stopService(a.projectId,a.name);const s=`service:${a.projectId}:${a.name}:stop`,n=e.pending[s];if(n)return n;delete e.errors[a.key];let i;try{i=r.stop(a.key)}catch(d){i=Promise.reject(d)}const c=i.catch(d=>{throw e.errors[a.key]=Jn(d),d});e.pending[s]=c;const l=()=>{e.pending[s]===c&&delete e.pending[s]};return c.then(l,l),c}}}var Qg=y("<button> </button>"),em=y('<div class="project-shortcuts svelte-1n46o8q"><p class="svelte-1n46o8q">Projects</p><!></div>'),tm=y('<small class="svelte-1n46o8q">Could not enable. Click to retry.</small>'),rm=y('<button class="clean-urls-warning svelte-1n46o8q"><!><span aria-live="polite" class="svelte-1n46o8q"><strong class="svelte-1n46o8q"> </strong><!></span></button>'),am=y('<div class="sidebar-resizer svelte-1n46o8q" role="separator" aria-label="Sidebar width" aria-orientation="vertical" tabindex="0"></div>'),sm=y('<a class="svelte-1n46o8q"> </a>'),nm=y('<div class="project-context svelte-1n46o8q"><!> <nav class="project-tabs svelte-1n46o8q" aria-label="Project sections"></nav></div>'),im=y('<div class="catalog-error svelte-1n46o8q" role="alert"><span> </span> <button class="svelte-1n46o8q">Retry projects</button></div>'),om=y('<section class="load-state page-shell page-heading svelte-1n46o8q"><h1 class="svelte-1n46o8q">Page not found</h1><a href="/projects" class="svelte-1n46o8q">Go to Projects</a></section>'),lm=y('<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>'),cm=y('<p aria-live="polite">Loading projects…</p>'),um=y("<p>No projects yet. Run <code>localdeck init</code> in your project to get started.</p>"),dm=y('<section class="all-services page-shell"><header class="page-heading"><div><h1>Projects</h1><p class="page-subtitle"> </p></div></header> <div class="all-service-grid svelte-1n46o8q"></div></section>'),Xo=y('<p role="alert"> </p>'),vm=y('<p class="forwarder-error svelte-1n46o8q" role="alert"> </p>'),fm=y(`<section class="global-settings page-shell svelte-1n46o8q"><header class="page-heading"><div><h1>Settings</h1> <p class="page-subtitle"> </p></div></header> <!> <!> <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>`),pm=y('<div class="empty-state svelte-1n46o8q"><h2 class="svelte-1n46o8q"> </h2><p> </p></div>'),hm=y('<p role="alert"> <button class="svelte-1n46o8q">Retry</button></p>'),gm=y('<section class="all-services page-shell" aria-labelledby="all-services-title"><header class="page-heading"><div><h1 id="all-services-title">All Services</h1> <p class="page-subtitle"> </p></div></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>'),mm=y('<section class="checks-page page-shell svelte-1n46o8q"><header class="page-heading"><div><h1>Checks</h1><p class="page-subtitle"> </p></div></header><!></section>'),_m=y('<section class="secrets-page page-shell" aria-label="Project secrets"><header class="page-heading"><div><h1>Secrets</h1><p class="page-subtitle"> </p></div></header> <!></section>'),ym=y('<section class="load-state page-shell page-heading svelte-1n46o8q" role="alert"><h1 class="svelte-1n46o8q"> </h1> <p> </p> <button class="primary svelte-1n46o8q">Retry</button></section>'),bm=y('<section class="load-state page-shell page-heading svelte-1n46o8q" aria-live="polite"><h1 class="svelte-1n46o8q"> </h1> <p>Reading the project configuration and current services.</p></section>'),wm=y('<section class="load-state page-shell page-heading svelte-1n46o8q" aria-live="polite"><h1 class="svelte-1n46o8q"> </h1> <!> <a href="/projects" class="svelte-1n46o8q">Back to Projects</a></section>'),km=y('<div class="logs-slot svelte-1n46o8q"><!></div>'),Sm=y('<button class="logs-toggle svelte-1n46o8q"> </button>'),xm=y('<!> <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 jm(r,e){Tt(e,!0);let a=Re(e,"deck",7,af),n=at(e.fallbackActions??{pending:{},errors:{}});const c=Bo(e.initialPath??(typeof window>"u"?"/projects":window.location.pathname));let l=R(at(c.page==="services"&&c.serviceKey?[c.serviceKey]:[])),d=R(at(c.page==="services"&&!!c.serviceKey));const v=k=>k.page==="services"?{page:"services"}:k;let p=R(at(v(c)));const _=F(()=>t(p).page==="projects"&&t(p).projectId?t(p).section==="secrets"?"project-secrets":t(p).section==="activity"?"project-activity":t(p).section==="checks"?"project-checks":"overview":t(p).page),w=F(()=>t(p).page==="services"?t(p).serviceKey:void 0),S=F(()=>{var k;return t(p).page==="projects"?t(p).projectId:(k=t(w))==null?void 0:k.split(":")[0]});let C=R(at(a().connected)),q=R(!1),b=R(!1),I=R(248),A=R(""),L=R(at(cc())),P=R("");function W(k){var N,J;u(L,k,!0),u(P,"");try{localStorage.setItem(lc,String(k))}catch{u(P,"The limit applies now, but this browser could not save it.")}(J=(N=a()).setLogLimit)==null||J.call(N,k).catch(()=>{u(P,"Limit updated. Some older logs could not be loaded; reopen Logs to retry.")})}function O(){try{localStorage.setItem("localdeck-sidebar",JSON.stringify({width:t(I),collapsed:t(b)}))}catch{}}function Z(k){k.currentTarget.setPointerCapture(k.pointerId)}function ae(k){k.currentTarget.hasPointerCapture(k.pointerId)&&u(I,Math.max(200,Math.min(400,k.clientX)),!0)}function Y(k){["ArrowLeft","ArrowRight","Home","End"].includes(k.key)&&(k.preventDefault(),u(I,k.key==="Home"?200:k.key==="End"?400:Math.max(200,Math.min(400,t(I)+(k.key==="ArrowRight"?16:-16))),!0),O())}async function $(){await Promise.all(a().projects.map(k=>{var N,J;return(J=(N=a()).loadProjectDetails)==null?void 0:J.call(N,k.id).catch(()=>{})}))}let X=R(""),T=0,se=R(!1),B=R(!1),K=R(!1),re=R(""),ee=0,oe=!1;const U=F(()=>a().services.map(k=>({...k,urls:k.urls.map(N=>Qv(N,t(se)))}))),M=F(()=>[...a().projects.flatMap(k=>Ko(a().projectDetails[k.id],t(U),k.id)),...Ko(void 0,t(U).filter(k=>!a().projects.some(N=>N.id===k.projectId)))]),he=F(()=>t(M).filter(k=>{var N,J;return`${k.name} ${((N=k.runtime)==null?void 0:N.projectName)??((J=a().projects.find(me=>k.key.startsWith(`${me.id}:`)))==null?void 0:J.name)??""}`.toLowerCase().includes(t(A).toLowerCase())})),te=F(()=>t(p).page==="services"),be=F(()=>Xg(a(),n)),_e=F(()=>new Set([...Object.keys(a().pendingActions),...Object.keys(n.pending)])),de=F(()=>Kv(a().projects,t(M),t(_e),a().connected));let ce=R(!1),ve=R(!1),Ie=R(""),bt=R("Ctrl+K");async function vt(){t(ce)||(u(ce,!0),await tt())}async function tt(){if(!t(ve)){u(ve,!0),u(Ie,"");try{(await Promise.allSettled(a().projects.map(N=>{var J,me;return(me=(J=a()).loadProjectDetails)==null?void 0:me.call(J,N.id)}))).some(N=>N.status==="rejected")&&u(Ie,"Some services could not be loaded. Results may be incomplete.")}finally{u(ve,!1)}}}function Be(k){k.defaultPrevented||k.isComposing||k.repeat||k.altKey||k.shiftKey||!(k.metaKey||k.ctrlKey)||k.key.toLowerCase()!=="k"||!t(ce)&&document.querySelector("dialog[open]")||(k.preventDefault(),t(ce)?u(ce,!1):vt())}function Ae(k){const N=t(de).find(pe=>pe.id===k.id);if(!N||N.disabled)throw new Error("This command is no longer available.");const J=N.action;if(J.type==="navigate")return wr(J.route);if(J.type==="open"){window.open(J.url,"_blank","noopener,noreferrer");return}if(J.type==="logs"||J.type==="requests")return ar(J.key,J.type);const me=t(M).find(pe=>pe.key===J.key);if(!me)throw new Error("Service is no longer available.");if(J.type==="stop"&&me.runtime)return t(be).stopService(me.runtime);const ue=J.key.split(":")[0];if(J.type==="start")return a().startService(ue,me.name);if(J.type==="restart")return a().restartService(ue,me.name);throw new Error("Service is no longer available.")}const Ne=F(()=>({...a().projectErrors,...n.errors})),Qe=F(()=>a().projects.find(k=>k.id===t(S))),Ue=F(()=>t(S)?a().projectDetails[t(S)]:void 0),br=F(()=>t(te)&&!t(w)),ht=F(()=>a().services.filter(k=>k.status!=="stopped")),dr=F(()=>a().services.filter(k=>k.status!=="stopped"&&k.status!=="stopping").map(k=>({key:k.key,name:k.name,projectName:k.projectName})));let sa=R(""),ma=R(0),Ra=R(at(c.page==="services"?c.serviceKey??null:null));async function Wr(k){u(sa,"");try{await Promise.all(k.filter(N=>a().services.some(J=>J.key===N)).map(N=>a().load(N)))}catch(N){u(sa,Jn(N),!0)}}function _a(k){const N=k.filter(J=>!t(l).includes(J));u(l,k.filter(J=>t(dr).some(me=>me.key===J)),!0),Wr(N.filter(J=>t(l).includes(J)))}let ya=new Set;yr(()=>{if(!a().connected)return;const k=a().services.filter(J=>J.status!=="stopped"&&J.status!=="stopping").map(J=>J.key),N=k.filter(J=>!ya.has(J));ya=new Set(k),Pa(()=>{const J=[...new Set([...t(l).filter(me=>k.includes(me)),...N])];(J.length!==t(l).length||J.some((me,ue)=>me!==t(l)[ue]))&&_a(J)})});async function na(){var N,J;const k=T;u(q,!0),u(X,""),a().selected=t(w)??null,t(S)&&(a().selectedProjectId=t(S));try{if(t(p).page==="services"&&!t(w))await $();else{const me=[];t(S)&&a().projects.some(ue=>ue.id===t(S))&&me.push(((J=(N=a()).loadProjectDetails)==null?void 0:J.call(N,t(S)))??a().selectProject(t(S))),t(w)&&a().services.some(ue=>ue.key===t(w))&&me.push(a().load(t(w))),await Promise.all(me)}}catch(me){k===T&&u(X,Jn(me),!0)}finally{k===T&&u(q,!1)}}function wr(k,N=!0){T++,k.page==="services"&&k.serviceKey&&ar(k.serviceKey),k=v(k),u(p,k,!0),u(X,""),N&&window.location.pathname!==Js(k)&&window.history.pushState(null,"",Js(k)),t(C)&&na()}function tr(k,N){Xv(k)&&(k.preventDefault(),wr(N))}Dn(()=>{u(bt,/Mac|iPhone|iPad/.test(navigator.platform)?"⌘K":"Ctrl+K",!0),u(b,window.matchMedia("(max-width: 760px)").matches,!0);try{const ue=JSON.parse(localStorage.getItem("localdeck-sidebar")??"null");ue&&(u(I,Math.max(200,Math.min(400,Number(ue.width)||248)),!0),u(b,ue.collapsed===!0))}catch{}try{localStorage.getItem("localdeck-clean-urls")!=="false"?Or(!1):u(B,!0)}catch{Or(!1)}t(p).page!=="not-found"&&window.location.pathname!==Js(t(p))&&window.history.replaceState(null,"",Js(t(p)));const k=()=>wr(Bo(window.location.pathname),!1);window.addEventListener("popstate",k),a().connect().then(()=>{u(C,!0),na();for(const ue of t(l))a().services.some(pe=>pe.key===ue)&&a().load(ue).catch(()=>{})}).catch(ue=>{u(X,Jn(ue),!0)});const N=()=>{var ue,pe;document.visibilityState==="visible"&&((pe=(ue=a()).refreshProjects)==null||pe.call(ue).catch(()=>{}))},J=setInterval(N,5e3);window.addEventListener("focus",N),document.addEventListener("visibilitychange",N);const me=setInterval(()=>{t(se)&&!t(K)&&!oe&&Or(!1)},15e3);return()=>{T++,window.removeEventListener("popstate",k),clearInterval(me),clearInterval(J),window.removeEventListener("focus",N),document.removeEventListener("visibilitychange",N),ee++}});function zr(){try{localStorage.setItem("localdeck-clean-urls",String(t(se)))}catch{}}async function Or(k){const N=++ee;u(K,k,!0),oe=!0,k&&u(re,"");const J=await ef(k);oe=!1,N===ee&&(u(B,!0),u(se,J.ready,!0),u(re,J.error??"",!0),u(K,!1),(k||J.ready)&&zr())}async function Aa(){u(K,!0);const k=++ee;try{const N=await fetch("/api/forwarder",{method:"DELETE",signal:AbortSignal.timeout(135e3)}),J=await N.json();if(k!==ee)return;if(!N.ok||J.removed!==!0)throw new Error(J.error??"Could not remove the system forwarder.");u(se,!1),u(re,""),zr()}catch(N){k===ee&&u(re,N instanceof Error?N.message:"Removal failed.",!0)}finally{k===ee&&u(K,!1)}}function La(k){k.currentTarget.checked?(k.currentTarget.checked=!1,Or(!0)):(ee++,u(se,!1),u(re,""),u(K,!1),zr())}function Ta(){wr({page:"services"})}function ia(k){if(k==="all")return Ta();wr({page:"projects",projectId:k})}let kr=R("logs");function ar(k,N="logs"){u(kr,N,!0),_a(t(l).includes(k)?t(l):[...t(l),k]),u(d,!0),u(Ra,k,!0),jl(ma),Wr([k])}async function Ba(k){const N=T;await a().forgetProject(k),N===T&&wr({page:"projects"})}var Sr=xm();yd("1n46o8q",k=>{Bu(()=>{var N;ql.title=`${(t(_)==="project-secrets"?"Secrets":t(_)==="overview"?((N=t(Qe))==null?void 0:N.name)??"Project":t(_)==="services"?"Services":t(_)==="settings"?"Settings":t(_)==="about"?"About":t(_)==="changelog"?"Changelog":t(_)==="not-found"?"Page not found":"Projects")??""} · LocalDeck`})}),Kt("keydown",ai,Be);var oa=Ye(Sr);{var Qa=k=>{Zv(k,{get commands(){return t(de)},get loading(){return t(ve)},get loadError(){return t(Ie)},onRetry:tt,onExecute:Ae,onClose:()=>{u(ce,!1)}})};D(oa,k=>{t(ce)&&k(Qa)})}var $r=o(oa,2);let Ia,ie;var ge=f($r),Se=f(ge),z=o(f(Se)),ne=f(z);{var ke=k=>{bv(k,{size:18})},Te=k=>{_v(k,{size:18})};D(ne,k=>{t(b)?k(ke):k(Te,-1)})}var Ve=o(Se,2),We=f(Ve),De=f(We);_o(De,{size:18});var rt=o(De,2),Ut=m(rt,!0),ot=o(We,2);let Me;var Mt=f(ot);kv(Mt,{size:18});var Nt=o(ot,2);let Dt;var st=f(Nt);Vd(st,{size:18});var Et=o(Nt,2);let sr;var Lr=f(Et);ic(Lr,{size:18});var nr=o(Et,2);let vr;var Ur=f(nr);lv(Ur,{size:18});var $e=o(nr,2);let _t;var Ft=f($e);Pv(Ft,{size:18});var lt=o(Ve,2);{var Ke=k=>{var N=em(),J=o(f(N));He(J,17,()=>a().projects,me=>me.id,(me,ue)=>{var pe=Qg();let ze;var Pe=m(pe,!0);E(()=>{ze=it(pe,1,"svelte-1n46o8q",null,ze,{current:!t(te)&&t(_)!=="projects"&&t(_)!=="settings"&&t(_)!=="about"&&t(S)===t(ue).id}),h(Pe,t(ue).name)}),Q("click",pe,()=>ia(t(ue).id)),g(me,pe)}),g(k,N)};D(lt,k=>{t(b)||k(Ke)})}var fe=o(lt,2);{var Ee=k=>{var N=rm(),J=f(N);Hv(J,{size:18});var me=o(J),ue=f(me),pe=m(ue,!0),ze=o(ue);{var Pe=Fe=>{var kt=tm();g(Fe,kt)};D(ze,Fe=>{t(re)&&!t(K)&&Fe(Pe)})}E(()=>{N.disabled=t(K),V(N,"aria-label",t(K)?"Enabling Clean URLs":"Enable Clean URLs"),V(N,"title",t(re)||"Enable Clean URLs"),h(pe,t(K)?"Enabling Clean URLs…":"Enable Clean URLs")}),Q("click",N,()=>void Or(!0)),g(k,N)};D(fe,k=>{t(B)&&!t(se)&&k(Ee)})}var Jt=o(fe,2);{var fr=k=>{var N=am();V(N,"aria-valuemin",200),V(N,"aria-valuemax",400),E(()=>V(N,"aria-valuenow",t(I))),Q("pointerdown",N,Z),Q("pointermove",N,ae),Q("pointerup",N,O),Kt("lostpointercapture",N,O),Q("keydown",N,Y),g(k,N)};D(Jt,k=>{t(b)||k(fr)})}var H=o(ge,2),G=f(H);{var le=k=>{var N=nm(),J=f(N);Va(J,()=>t(Ue).id,ue=>{Hp(ue,{get projectId(){return t(Ue).id},onSelect:async pe=>{const ze=T,Pe=t(S);await a().loadProjects(),ze===T&&Pe===t(S)&&ia(pe)}})});var me=o(J,2);He(me,20,()=>[{label:"Overview",section:void 0},{label:"Activity",section:"activity"},{label:"Checks",section:"checks"},{label:"Secrets",section:"secrets"}],Ht,(ue,pe)=>{var ze=sm(),Pe=m(ze,!0);E(Fe=>{V(ze,"href",Fe),V(ze,"aria-current",t(p).section===pe.section?"page":void 0),h(Pe,pe.label)},[()=>Js({page:"projects",projectId:t(Ue).id,section:pe.section})]),Q("click",ze,Fe=>tr(Fe,{page:"projects",projectId:t(Ue).id,section:pe.section})),g(ue,ze)}),g(k,N)};D(G,k=>{t(p).page==="projects"&&t(p).projectId&&t(Ue)&&k(le)})}var Ce=o(G,2);{var Le=k=>{var N=im(),J=f(N),me=m(J,!0),ue=o(J,2);E(()=>h(me,a().projectErrors.projects)),Q("click",ue,()=>void a().loadProjects().catch(()=>{})),g(k,N)};D(Ce,k=>{a().projectErrors.projects&&k(Le)})}var Je=o(Ce,2);{var St=k=>{var N=om(),J=o(f(N));Q("click",J,me=>tr(me,{page:"projects"})),g(k,N)},ir=k=>{df(k)},Tr=k=>{yf(k)},Ir=k=>{var N=dm(),J=f(N),me=f(J),ue=o(f(me)),pe=m(ue),ze=o(J,2);He(ze,21,()=>a().projects,Pe=>Pe.id,(Pe,Fe)=>{var kt=lm(),Ge=f(kt),qe=f(Ge),gt=m(qe,!0),Ct=o(qe),mr=m(Ct,!0),_r=o(Ge),ba=m(_r);E(Pt=>{h(gt,t(Fe).name),h(mr,t(Fe).available?"Available":"Unavailable"),h(ba,`${Pt??""} running services`)},[()=>t(U).filter(Pt=>Pt.projectId===t(Fe).id&&Pt.status!=="stopped").length]),Q("click",kt,()=>ia(t(Fe).id)),g(Pe,kt)},Pe=>{var Fe=Qr(),kt=Ye(Fe);{var Ge=gt=>{var Ct=cm();g(gt,Ct)},qe=gt=>{var Ct=um();g(gt,Ct)};D(kt,gt=>{t(C)?gt(qe,-1):gt(Ge)})}g(Pe,Fe)}),E(()=>h(pe,`${a().projects.length??""} projects`)),g(k,N)},Ze=k=>{var N=fm(),J=f(N),me=f(J),ue=o(f(me),2),pe=m(ue),ze=o(J,2);ff(ze,{get value(){return t(L)},onSave:W});var Pe=o(ze,2);{var Fe=Pt=>{var Hr=Xo(),es=m(Hr,!0);E(()=>h(es,t(P))),g(Pt,Hr)};D(Pe,Pt=>{t(P)&&Pt(Fe)})}var kt=o(Pe,6),Ge=f(kt),qe=o(kt,2),gt=m(qe,!0),Ct=o(qe,2);{var mr=Pt=>{var Hr=vm(),es=m(Hr,!0);E(()=>h(es,t(re))),g(Pt,Hr)};D(Ct,Pt=>{t(re)&&Pt(mr)})}var _r=o(Ct,4),ba=o(_r,2);uc(ba),E(()=>{h(pe,`${a().connected?"Daemon connected":"Waiting for daemon"} · ${t(ht).length??""} active`),qs(Ge,t(se)),Ge.disabled=t(K),h(gt,t(K)?"Setting up links… Complete the administrator approval prompt if shown.":t(se)?"Forwarding verified. Port-free links are active.":"Using original ports. Your app links remain unchanged."),_r.disabled=t(K)}),Q("change",Ge,La),Q("click",_r,Aa),g(k,N)},wt=k=>{var N=gm(),J=f(N),me=f(J),ue=o(f(me),2),pe=m(ue),ze=o(J,2),Pe=o(f(ze)),Fe=o(ze,2);He(Fe,21,()=>t(he),Ge=>Ge.key,(Ge,qe)=>{{let gt=F(()=>{var Pt,Hr;return((Pt=t(qe).runtime)==null?void 0:Pt.projectName)??((Hr=a().projects.find(es=>t(qe).key.startsWith(`${es.id}:`)))==null?void 0:Hr.name)??"Project"}),Ct=F(()=>{var Pt;return!!(t(qe).command&&((Pt=a().projectDetails[t(qe).key.split(":")[0]])!=null&&Pt.available))}),mr=F(()=>t(Ne)[t(qe).key]??""),_r=F(()=>{var Pt;return((Pt=a().shareErrors)==null?void 0:Pt[t(qe).key])??""}),ba=F(()=>t(d)&&t(kr)==="logs"&&t(l).includes(t(qe).key));yg(Ge,{get entry(){return t(qe)},get projectName(){return t(gt)},get canStart(){return t(Ct)},get pending(){return t(_e)},get error(){return t(mr)},get shareError(){return t(_r)},get logsSelected(){return t(ba)},onStart:()=>a().startService(t(qe).key.split(":")[0],t(qe).name),onStop:()=>t(qe).runtime?t(be).stopService(t(qe).runtime):Promise.resolve(),onShare:(Pt,Hr)=>a().share(t(qe).key,Pt,Hr),onUnshare:()=>a().unshare(t(qe).key),onRequests:()=>ar(t(qe).key,"requests"),onLogs:()=>ar(t(qe).key)})}},Ge=>{var qe=pm(),gt=f(qe),Ct=m(gt,!0),mr=o(gt),_r=m(mr,!0);E(()=>{h(Ct,t(A)?"No matching services":"No active services"),h(_r,t(A)?"Try another service or project name.":"Start a configured service from a project, or run LocalDeck from your terminal.")}),g(Ge,qe)});var kt=o(Fe,2);He(kt,17,()=>a().projects.filter(Ge=>a().projectErrors[Ge.id]),Ht,(Ge,qe)=>{var gt=hm(),Ct=f(gt),mr=o(Ct);E(()=>h(Ct,`${t(qe).name??""}: ${a().projectErrors[t(qe).id]??""} `)),Q("click",mr,$),g(Ge,gt)}),E(()=>h(pe,`${t(ht).length??""} active`)),Gt(Pe,()=>t(A),Ge=>u(A,Ge)),g(k,N)},ct=k=>{var N=Qr(),J=Ye(N);Va(J,()=>t(Ue).id,me=>{Ap(me,{get projectId(){return t(Ue).id},get projectName(){return t(Ue).name},get connected(){return a().connected}})}),g(k,N)},At=k=>{var N=Qr(),J=Ye(N);Va(J,()=>t(Ue).id,me=>{var ue=mm(),pe=f(ue),ze=f(pe),Pe=o(f(ze)),Fe=m(Pe),kt=o(pe);Zp(kt,{get projectId(){return t(Ue).id}}),E(()=>h(Fe,`${t(Ue).name??""} · Repeatable requests for this environment`)),g(me,ue)}),g(k,N)},pr=k=>{var N=Qr(),J=Ye(N);Va(J,()=>t(Ue).id,me=>{var ue=_m(),pe=f(ue),ze=f(pe),Pe=o(f(ze)),Fe=m(Pe,!0),kt=o(pe,2);Cf(kt,{get project(){return t(Ue)}}),E(()=>h(Fe,t(Ue).name)),g(me,ue)}),g(k,N)},qt=k=>{var N=Qr(),J=Ye(N);Va(J,()=>t(Ue).id,me=>{{let ue=F(()=>a().shareErrors??{});vg(me,{get project(){return t(Ue)},onOpenSecrets:pe=>tr(pe,{page:"projects",projectId:t(Ue).id,section:"secrets"}),get services(){return t(U)},get pending(){return t(_e)},get errors(){return t(Ne)},get shareErrors(){return t(ue)},onStartAll:()=>a().startAll(t(Ue).id),onStopAll:()=>a().stopAll(t(Ue).id),onStartService:pe=>a().startService(t(Ue).id,pe),onStopService:pe=>a().stopService(t(Ue).id,pe),onRestartService:pe=>a().restartService(t(Ue).id,pe),onUpdateDependencies:(pe,ze)=>a().updateDependencies(t(Ue).id,pe,ze),onRetry:()=>a().selectProject(t(Ue).id),onForget:()=>Ba(t(Ue).id),onSelectService:ar,onViewRequests:pe=>ar(pe,"requests"),onShare:(pe,ze,Pe)=>a().share(pe,ze,Pe),onUnshare:pe=>a().unshare(pe)})}}),g(k,N)},ut=k=>{var N=ym(),J=f(N),me=m(J),ue=o(J,2),pe=m(ue,!0),ze=o(ue,2);E(()=>{h(me,`Could not load ${t(Qe).name??""}`),h(pe,a().projectErrors[t(Qe).id])}),Q("click",ze,()=>void a().selectProject(t(Qe).id).catch(()=>{})),g(k,N)},Vt=k=>{var N=bm(),J=f(N),me=m(J);E(()=>h(me,`Loading ${t(Qe).name??""}`)),g(k,N)},hr=k=>{var N=wm(),J=f(N),me=m(J,!0),ue=o(J,2);{var pe=Pe=>{var Fe=Xo(),kt=m(Fe,!0);E(()=>h(kt,t(X))),g(Pe,Fe)};D(ue,Pe=>{t(X)&&Pe(pe)})}var ze=o(ue,2);E(()=>h(me,!t(C)||t(q)?"Loading project…":"Project not found")),Q("click",ze,Pe=>tr(Pe,{page:"projects"})),g(k,N)};D(Je,k=>{t(_)==="not-found"?k(St):t(_)==="about"?k(ir,1):t(_)==="changelog"?k(Tr,2):t(_)==="projects"?k(Ir,3):t(_)==="settings"?k(Ze,4):t(br)?k(wt,5):t(_)==="project-activity"&&t(Ue)?k(ct,6):t(_)==="project-checks"&&t(Ue)?k(At,7):t(_)==="project-secrets"&&t(Ue)?k(pr,8):t(_)==="overview"&&t(Ue)?k(qt,9):t(Qe)&&a().projectErrors[t(Qe).id]?k(ut,10):t(Qe)?k(Vt,11):k(hr,-1)})}var or=o(H,2);{var lr=k=>{var N=km(),J=f(N);Zg(J,{get historyBoundaries(){return a().historyBoundaries},onClear:(me,ue)=>a().clearHistory(me,ue),get view(){return t(kr)},get services(){return t(U)},get limit(){return t(L)},get sources(){return t(dr)},get selectedKeys(){return t(l)},get logs(){return a().logs},get requests(){return a().requests},get resetView(){return t(ma)},get requestedSource(){return t(Ra)},get error(){return t(sa)},onRetry:()=>void Wr(t(l)),onSelectionChange:_a,onClose:()=>u(d,!1)}),g(k,N)};D(or,k=>{t(d)&&k(lr)})}var gr=o(or,2),Wt=o(f(gr));let Zt;var Gr=o(f(Wt),1,!0),Xt=o(Wt),xr=m(Xt),jr=o(Xt);He(jr,20,()=>["requests","logs"],Ht,(k,N)=>{var J=Sm(),me=m(J,!0);E(()=>{V(J,"aria-expanded",t(d)&&t(kr)===N),h(me,N==="requests"?"Requests":"Logs")}),Q("click",J,()=>{u(d,t(kr)!==N||!t(d),!0),u(kr,N,!0),t(d)&&($(),Wr(t(l)))}),g(k,J)}),E(()=>{Ia=it($r,1,"layout svelte-1n46o8q",null,Ia,{collapsed:t(b)}),ie=mo($r,"",ie,{"--sidebar-width":`${t(I)}px`}),V(z,"aria-expanded",!t(b)),V(z,"aria-label",t(b)?"Expand sidebar":"Collapse sidebar"),V(We,"title",`Search commands (${t(bt)})`),h(Ut,t(bt)),V(ot,"aria-current",t(p).page==="projects"?"page":void 0),Me=it(ot,1,"svelte-1n46o8q",null,Me,{active:t(p).page==="projects"}),V(Nt,"aria-current",t(p).page==="services"?"page":void 0),Dt=it(Nt,1,"svelte-1n46o8q",null,Dt,{active:t(p).page==="services"}),V(Et,"aria-current",t(p).page==="settings"?"page":void 0),sr=it(Et,1,"svelte-1n46o8q",null,sr,{active:t(p).page==="settings"}),V(nr,"aria-current",t(p).page==="about"?"page":void 0),vr=it(nr,1,"svelte-1n46o8q",null,vr,{active:t(p).page==="about"}),V($e,"aria-current",t(p).page==="changelog"?"page":void 0),_t=it($e,1,"svelte-1n46o8q",null,_t,{active:t(p).page==="changelog"}),Zt=it(Wt,1,"connection svelte-1n46o8q",null,Zt,{connected:a().connected}),h(Gr,a().connected?"Daemon connected":"Connecting to daemon"),h(xr,`${t(ht).length??""} active services`)}),Q("click",z,()=>{u(b,!t(b)),O()}),Q("click",We,()=>vt()),Q("click",ot,k=>tr(k,{page:"projects"})),Q("click",Nt,k=>tr(k,{page:"services"})),Q("click",Et,k=>tr(k,{page:"settings"})),Q("click",nr,k=>tr(k,{page:"about"})),Q("click",$e,k=>tr(k,{page:"changelog"})),g(r,Sr),It()}er(["click","pointerdown","pointermove","pointerup","keydown","change"]);ud(jm,{target:document.getElementById("app")});