@forinda/kickjs-devtools 7.14.0 → 7.15.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.
@@ -1,11 +1,12 @@
1
- (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))s(l);new MutationObserver(l=>{for(const a of l)if(a.type==="childList")for(const i of a.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function r(l){const a={};return l.integrity&&(a.integrity=l.integrity),l.referrerPolicy&&(a.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?a.credentials="include":l.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function s(l){if(l.ep)return;l.ep=!0;const a=r(l);fetch(l.href,a)}})();var $e={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return dn(this.context.count)},getNextContextId(){return dn(this.context.count++)}};function dn(e){const t=String(e),r=t.length-1;return $e.context.id+(r?String.fromCharCode(96+r):"")+t}function wr(e){$e.context=e}function ns(){return{...$e.context,id:$e.getNextContextId(),count:0}}var ls=(e,t)=>e===t,rl=Symbol("solid-track"),zt={equals:ls},un=null,nl=ol,Be=1,kt=2,ll={owned:null,cleanups:null,context:null,owner:null},ve=null,X=null,Et=null,it=null,xe=null,Me=null,Ae=null,er=0;function ct(e,t){const r=xe,s=ve,l=e.length===0,a=t===void 0?s:t,i=l?ll:{owned:null,cleanups:null,context:a?a.context:null,owner:a},c=l?e:()=>e(()=>De(()=>Ze(i)));ve=i,xe=null;try{return We(c,!0)}finally{xe=r,ve=s}}function P(e,t){t=t?Object.assign({},zt,t):zt;const r={value:e,observers:null,observerSlots:null,comparator:t.equals||void 0},s=l=>(typeof l=="function"&&(X&&X.running&&X.sources.has(r)?l=l(r.tValue):l=l(r.value)),al(r,l));return[sl.bind(r),s]}function q(e,t,r){const s=Br(e,t,!1,Be);Et&&X&&X.running?Me.push(s):Mt(s)}function qe(e,t,r){nl=cs;const s=Br(e,t,!1,Be),l=kr&&as(kr);l&&(s.suspense=l),(!r||!r.render)&&(s.user=!0),Ae?Ae.push(s):Mt(s)}function ce(e,t,r){r=r?Object.assign({},zt,r):zt;const s=Br(e,t,!0,0);return s.observers=null,s.observerSlots=null,s.comparator=r.equals||void 0,Et&&X&&X.running?(s.tState=Be,Me.push(s)):Mt(s),sl.bind(s)}function De(e){if(!it&&xe===null)return e();const t=xe;xe=null;try{return it?it.untrack(e):e()}finally{xe=t}}function _r(e,t,r){const s=Array.isArray(e);let l,a=r&&r.defer;return i=>{let c;if(s){c=Array(e.length);for(let h=0;h<e.length;h++)c[h]=e[h]()}else c=e();if(a)return a=!1,i;const u=De(()=>t(c,l,i));return l=c,u}}function Ie(e){qe(()=>De(e))}function ke(e){return ve===null||(ve.cleanups===null?ve.cleanups=[e]:ve.cleanups.push(e)),e}function ss(e){if(X&&X.running)return e(),X.done;const t=xe,r=ve;return Promise.resolve().then(()=>{xe=t,ve=r;let s;return(Et||kr)&&(s=X||(X={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),s.done||(s.done=new Promise(l=>s.resolve=l)),s.running=!0),We(e,!1),xe=ve=null,s?s.done:void 0})}var[iv,hn]=P(!1);function as(e){let t;return ve&&ve.context&&(t=ve.context[e.id])!==void 0?t:e.defaultValue}var kr;function sl(){const e=X&&X.running;if(this.sources&&(e?this.tState:this.state))if((e?this.tState:this.state)===Be)Mt(this);else{const t=Me;Me=null,We(()=>Ft(this),!1),Me=t}if(xe){const t=this.observers;if(!t||t[t.length-1]!==xe){const r=t?t.length:0;xe.sources?(xe.sources.push(this),xe.sourceSlots.push(r)):(xe.sources=[this],xe.sourceSlots=[r]),t?(t.push(xe),this.observerSlots.push(xe.sources.length-1)):(this.observers=[xe],this.observerSlots=[xe.sources.length-1])}}return e&&X.sources.has(this)?this.tValue:this.value}function al(e,t,r){let s=X&&X.running&&X.sources.has(e)?e.tValue:e.value;if(!e.comparator||!e.comparator(s,t)){if(X){const l=X.running;(l||!r&&X.sources.has(e))&&(X.sources.add(e),e.tValue=t),l||(e.value=t)}else e.value=t;e.observers&&e.observers.length&&We(()=>{for(let l=0;l<e.observers.length;l+=1){const a=e.observers[l],i=X&&X.running;i&&X.disposed.has(a)||((i?!a.tState:!a.state)&&(a.pure?Me.push(a):Ae.push(a),a.observers&&il(a)),i?a.tState=Be:a.state=Be)}if(Me.length>1e6)throw Me=[],new Error},!1)}return t}function Mt(e){if(!e.fn)return;Ze(e);const t=er;fn(e,X&&X.running&&X.sources.has(e)?e.tValue:e.value,t),X&&!X.running&&X.sources.has(e)&&queueMicrotask(()=>{We(()=>{X&&(X.running=!0),xe=ve=e,fn(e,e.tValue,t),xe=ve=null},!1)})}function fn(e,t,r){let s;const l=ve,a=xe;xe=ve=e;try{s=e.fn(t)}catch(i){return e.pure&&(X&&X.running?(e.tState=Be,e.tOwned&&e.tOwned.forEach(Ze),e.tOwned=void 0):(e.state=Be,e.owned&&e.owned.forEach(Ze),e.owned=null)),e.updatedAt=r+1,zr(i)}finally{xe=a,ve=l}(!e.updatedAt||e.updatedAt<=r)&&(e.updatedAt!=null&&"observers"in e?al(e,s,!0):X&&X.running&&e.pure?(X.sources.has(e)||(e.value=s),X.sources.add(e),e.tValue=s):e.value=s,e.updatedAt=r)}function Br(e,t,r,s=Be,l){const a={fn:e,state:s,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:t,owner:ve,context:ve?ve.context:null,pure:r};if(X&&X.running&&(a.state=0,a.tState=s),ve===null||ve!==ll&&(X&&X.running&&ve.pure?ve.tOwned?ve.tOwned.push(a):ve.tOwned=[a]:ve.owned?ve.owned.push(a):ve.owned=[a]),it&&a.fn){const i=a.fn,[c,u]=P(void 0,{equals:!1}),h=it.factory(i,u);ke(()=>h.dispose());let g,p=!1;const x=()=>ss(u).then(()=>{g&&(g.dispose(),g=void 0,p||u())});a.fn=v=>(c(),X&&X.running?(g||(g=it.factory(i,x)),g.track(v)):(p=!0,h.track(v)))}return a}function St(e){const t=X&&X.running;if((t?e.tState:e.state)===0)return;if((t?e.tState:e.state)===kt)return Ft(e);if(e.suspense&&De(e.suspense.inFallback))return e.suspense.effects.push(e);const r=[e];for(;(e=e.owner)&&(!e.updatedAt||e.updatedAt<er);){if(t&&X.disposed.has(e))return;(t?e.tState:e.state)&&r.push(e)}for(let s=r.length-1;s>=0;s--){if(e=r[s],t){let l=e,a=r[s+1];for(;(l=l.owner)&&l!==a;)if(X.disposed.has(l))return}if((t?e.tState:e.state)===Be)Mt(e);else if((t?e.tState:e.state)===kt){const l=Me;Me=null,We(()=>Ft(e,r[0]),!1),Me=l}}}function We(e,t){if(Me)return e();let r=!1;t||(Me=[]),Ae?r=!0:Ae=[],er++;try{const s=e();return os(r),s}catch(s){r||(Ae=null),Me=null,zr(s)}}function os(e){if(Me&&(Et&&X&&X.running?is(Me):ol(Me),Me=null),e)return;let t;if(X){if(!X.promises.size&&!X.queue.size){const s=X.sources,l=X.disposed;Ae.push.apply(Ae,X.effects),t=X.resolve;for(const a of Ae)"tState"in a&&(a.state=a.tState),delete a.tState;X=null,We(()=>{for(const a of l)Ze(a);for(const a of s){if(a.value=a.tValue,a.owned)for(let i=0,c=a.owned.length;i<c;i++)Ze(a.owned[i]);a.tOwned&&(a.owned=a.tOwned),delete a.tValue,delete a.tOwned,a.tState=0}hn(!1)},!1)}else if(X.running){X.running=!1,X.effects.push.apply(X.effects,Ae),Ae=null,hn(!0);return}}const r=Ae;Ae=null,r.length&&We(()=>nl(r),!1),t&&t()}function ol(e){for(let t=0;t<e.length;t++)St(e[t])}function is(e){for(let t=0;t<e.length;t++){const r=e[t],s=X.queue;s.has(r)||(s.add(r),Et(()=>{s.delete(r),We(()=>{X.running=!0,St(r)},!1),X&&(X.running=!1)}))}}function cs(e){let t,r=0;for(t=0;t<e.length;t++){const s=e[t];s.user?e[r++]=s:St(s)}if($e.context){if($e.count){$e.effects||($e.effects=[]),$e.effects.push(...e.slice(0,r));return}wr()}for($e.effects&&($e.done||!$e.count)&&(e=[...$e.effects,...e],r+=$e.effects.length,delete $e.effects),t=0;t<r;t++)St(e[t])}function Ft(e,t){const r=X&&X.running;r?e.tState=0:e.state=0;for(let s=0;s<e.sources.length;s+=1){const l=e.sources[s];if(l.sources){const a=r?l.tState:l.state;a===Be?l!==t&&(!l.updatedAt||l.updatedAt<er)&&St(l):a===kt&&Ft(l,t)}}}function il(e){const t=X&&X.running;for(let r=0;r<e.observers.length;r+=1){const s=e.observers[r];(t?!s.tState:!s.state)&&(t?s.tState=kt:s.state=kt,s.pure?Me.push(s):Ae.push(s),s.observers&&il(s))}}function Ze(e){let t;if(e.sources)for(;e.sources.length;){const r=e.sources.pop(),s=e.sourceSlots.pop(),l=r.observers;if(l&&l.length){const a=l.pop(),i=r.observerSlots.pop();s<l.length&&(a.sourceSlots[i]=s,l[s]=a,r.observerSlots[s]=i)}}if(e.tOwned){for(t=e.tOwned.length-1;t>=0;t--)Ze(e.tOwned[t]);delete e.tOwned}if(X&&X.running&&e.pure)cl(e,!0);else if(e.owned){for(t=e.owned.length-1;t>=0;t--)Ze(e.owned[t]);e.owned=null}if(e.cleanups){for(t=e.cleanups.length-1;t>=0;t--)e.cleanups[t]();e.cleanups=null}X&&X.running?e.tState=0:e.state=0}function cl(e,t){if(t||(e.tState=0,X.disposed.add(e)),e.owned)for(let r=0;r<e.owned.length;r++)cl(e.owned[r])}function ds(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown error",{cause:e})}function vn(e,t,r){try{for(const s of t)s(e)}catch(s){zr(s,r&&r.owner||null)}}function zr(e,t=ve){const r=un&&t&&t.context&&t.context[un],s=ds(e);if(!r)throw s;Ae?Ae.push({fn(){vn(s,r,t)},state:Be}):vn(s,r,t)}var Sr=Symbol("fallback");function Jt(e){for(let t=0;t<e.length;t++)e[t]()}function us(e,t,r={}){let s=[],l=[],a=[],i=0,c=t.length>1?[]:null;return ke(()=>Jt(a)),()=>{let u=e()||[],h=u.length,g,p;return u[rl],De(()=>{let v,_,N,$,m,S,b,f,w;if(h===0)i!==0&&(Jt(a),a=[],s=[],l=[],i=0,c&&(c=[])),r.fallback&&(s=[Sr],l[0]=ct(C=>(a[0]=C,r.fallback())),i=1);else if(i===0){for(l=new Array(h),p=0;p<h;p++)s[p]=u[p],l[p]=ct(x);i=h}else{for(N=new Array(h),$=new Array(h),c&&(m=new Array(h)),S=0,b=Math.min(i,h);S<b&&s[S]===u[S];S++);for(b=i-1,f=h-1;b>=S&&f>=S&&s[b]===u[f];b--,f--)N[f]=l[b],$[f]=a[b],c&&(m[f]=c[b]);for(v=new Map,_=new Array(f+1),p=f;p>=S;p--)w=u[p],g=v.get(w),_[p]=g===void 0?-1:g,v.set(w,p);for(g=S;g<=b;g++)w=s[g],p=v.get(w),p!==void 0&&p!==-1?(N[p]=l[g],$[p]=a[g],c&&(m[p]=c[g]),p=_[p],v.set(w,p)):a[g]();for(p=S;p<h;p++)p in N?(l[p]=N[p],a[p]=$[p],c&&(c[p]=m[p],c[p](p))):l[p]=ct(x);l=l.slice(0,i=h),s=u.slice(0)}return l});function x(v){if(a[p]=v,c){const[_,N]=P(p);return c[p]=N,t(u[p],_)}return t(u[p])}}}function hs(e,t,r={}){let s=[],l=[],a=[],i=[],c=0,u;return ke(()=>Jt(a)),()=>{const h=e()||[],g=h.length;return h[rl],De(()=>{if(g===0)return c!==0&&(Jt(a),a=[],s=[],l=[],c=0,i=[]),r.fallback&&(s=[Sr],l[0]=ct(x=>(a[0]=x,r.fallback())),c=1),l;for(s[0]===Sr&&(a[0](),a=[],s=[],l=[],c=0),u=0;u<g;u++)u<s.length&&s[u]!==h[u]?i[u](()=>h[u]):u>=s.length&&(l[u]=ct(p));for(;u<s.length;u++)a[u]();return c=i.length=a.length=g,s=h.slice(0),l=l.slice(0,c)});function p(x){a[u]=x;const[v,_]=P(h[u]);return i[u]=_,t(v,u)}}}var fs=!1;function o(e,t){if(fs&&$e.context){const r=$e.context;wr(ns());const s=De(()=>e(t||{}));return wr(r),s}return De(()=>e(t||{}))}var vs=e=>`Stale read from <${e}>.`;function re(e){const t="fallback"in e&&{fallback:()=>e.fallback};return ce(us(()=>e.each,e.children,t||void 0))}function Fr(e){const t="fallback"in e&&{fallback:()=>e.fallback};return ce(hs(()=>e.each,e.children,t||void 0))}function y(e){const t=e.keyed,r=ce(()=>e.when,void 0,void 0),s=t?r:ce(r,void 0,{equals:(l,a)=>!l==!a});return ce(()=>{const l=s();if(l){const a=e.children;return typeof a=="function"&&a.length>0?De(()=>a(t?l:()=>{if(!De(s))throw vs("Show");return r()})):a}return e.fallback},void 0,void 0)}var ae=e=>ce(()=>e());function gs(e,t,r){let s=r.length,l=t.length,a=s,i=0,c=0,u=t[l-1].nextSibling,h=null;for(;i<l||c<a;){if(t[i]===r[c]){i++,c++;continue}for(;t[l-1]===r[a-1];)l--,a--;if(l===i){const g=a<s?c?r[c-1].nextSibling:r[a-c]:u;for(;c<a;)e.insertBefore(r[c++],g)}else if(a===c)for(;i<l;)(!h||!h.has(t[i]))&&t[i].remove(),i++;else if(t[i]===r[a-1]&&r[c]===t[l-1]){const g=t[--l].nextSibling;e.insertBefore(r[c++],t[i++].nextSibling),e.insertBefore(r[--a],g),t[l]=r[a]}else{if(!h){h=new Map;let p=c;for(;p<a;)h.set(r[p],p++)}const g=h.get(t[i]);if(g!=null)if(c<g&&g<a){let p=i,x=1,v;for(;++p<l&&p<a&&!((v=h.get(t[p]))==null||v!==g+x);)x++;if(x>g-c){const _=t[i];for(;c<g;)e.insertBefore(r[c++],_)}else e.replaceChild(r[c++],t[i++])}else i++;else t[i++].remove()}}}var gn="_$DX_DELEGATE";function ms(e,t,r,s={}){let l;return ct(a=>{l=a,t===document?e():n(t,e(),!r&&t.firstChild?null:void 0,r)},s.owner),()=>{l(),t.textContent=""}}function d(e,t,r,s){let l;const a=()=>{const c=s?document.createElementNS("http://www.w3.org/1998/Math/MathML","template"):document.createElement("template");return c.innerHTML=e,r?c.content.firstChild.firstChild:s?c.firstChild:c.content.firstChild},i=t?()=>De(()=>document.importNode(l||(l=a()),!0)):()=>(l||(l=a())).cloneNode(!0);return i.cloneNode=i,i}function we(e,t=window.document){const r=t[gn]||(t[gn]=new Set);for(let s=0,l=e.length;s<l;s++){const a=e[s];r.has(a)||(r.add(a),t.addEventListener(a,ps))}}function F(e,t,r){Kr(e)||(r==null?e.removeAttribute(t):e.setAttribute(t,r))}function U(e,t){Kr(e)||(t==null?e.removeAttribute("class"):e.className=t)}function Jr(e,t,r,s){if(s)Array.isArray(r)?(e[`$$${t}`]=r[0],e[`$$${t}Data`]=r[1]):e[`$$${t}`]=r;else if(Array.isArray(r)){const l=r[0];e.addEventListener(t,r[0]=a=>l.call(e,r[1],a))}else e.addEventListener(t,r,typeof r!="function"&&r)}function dl(e,t,r){if(!t)return r?F(e,"style"):t;const s=e.style;if(typeof t=="string")return s.cssText=t;typeof r=="string"&&(s.cssText=r=void 0),r||(r={}),t||(t={});let l,a;for(a in r)t[a]??s.removeProperty(a),delete r[a];for(a in t)l=t[a],l!==r[a]&&(s.setProperty(a,l),r[a]=l);return r}function Ve(e,t,r){r!=null?e.style.setProperty(t,r):e.style.removeProperty(t)}function et(e,t,r){return De(()=>e(t,r))}function n(e,t,r,s){if(r!==void 0&&!s&&(s=[]),typeof t!="function")return Kt(e,t,s,r);q(l=>Kt(e,t(),l,r),s)}function Kr(e){return!!$e.context&&!$e.done&&(!e||e.isConnected)}function ps(e){if($e.registry&&$e.events&&$e.events.find(([u,h])=>h===e))return;let t=e.target;const r=`$$${e.type}`,s=e.target,l=e.currentTarget,a=u=>Object.defineProperty(e,"target",{configurable:!0,value:u}),i=()=>{const u=t[r];if(u&&!t.disabled){const h=t[`${r}Data`];if(h!==void 0?u.call(t,h,e):u.call(t,e),e.cancelBubble)return}return t.host&&typeof t.host!="string"&&!t.host._$host&&t.contains(e.target)&&a(t.host),!0},c=()=>{for(;i()&&(t=t._$host||t.parentNode||t.host););};Object.defineProperty(e,"currentTarget",{configurable:!0,get(){return t||document}}),$e.registry&&!$e.done&&($e.done=_$HY.done=!0);try{if(e.composedPath){const u=e.composedPath();a(u[0]);for(let h=0;h<u.length-2&&(t=u[h],!!i());h++){if(t._$host){t=t._$host,c();break}if(t.parentNode===l)break}}else c();a(s)}finally{e=t=null}}function Kt(e,t,r,s,l){const a=Kr(e);if(a){!r&&(r=[...e.childNodes]);let u=[];for(let h=0;h<r.length;h++){const g=r[h];g.nodeType===8&&g.data.slice(0,2)==="!$"?g.remove():u.push(g)}r=u}for(;typeof r=="function";)r=r();if(t===r)return r;const i=typeof t,c=s!==void 0;if(e=c&&r[0]&&r[0].parentNode||e,i==="string"||i==="number"){if(a||i==="number"&&(t=t.toString(),t===r))return r;if(c){let u=r[0];u&&u.nodeType===3?u.data!==t&&(u.data=t):u=document.createTextNode(t),r=st(e,r,s,u)}else r!==""&&typeof r=="string"?r=e.firstChild.data=t:r=e.textContent=t}else if(t==null||i==="boolean"){if(a)return r;r=st(e,r,s)}else{if(i==="function")return q(()=>{let u=t();for(;typeof u=="function";)u=u();r=Kt(e,u,r,s)}),()=>r;if(Array.isArray(t)){const u=[],h=r&&Array.isArray(r);if(Cr(u,t,r,l))return q(()=>r=Kt(e,u,r,s,!0)),()=>r;if(a){if(!u.length)return r;if(s===void 0)return r=[...e.childNodes];let g=u[0];if(g.parentNode!==e)return r;const p=[g];for(;(g=g.nextSibling)!==s;)p.push(g);return r=p}if(u.length===0){if(r=st(e,r,s),c)return r}else h?r.length===0?mn(e,u,s):gs(e,r,u):(r&&st(e),mn(e,u));r=u}else if(t.nodeType){if(a&&t.parentNode)return r=c?[t]:t;if(Array.isArray(r)){if(c)return r=st(e,r,s,t);st(e,r,null,t)}else r==null||r===""||!e.firstChild?e.appendChild(t):e.replaceChild(t,e.firstChild);r=t}}return r}function Cr(e,t,r,s){let l=!1;for(let a=0,i=t.length;a<i;a++){let c=t[a],u=r&&r[e.length],h;if(!(c==null||c===!0||c===!1))if((h=typeof c)=="object"&&c.nodeType)e.push(c);else if(Array.isArray(c))l=Cr(e,c,u)||l;else if(h==="function")if(s){for(;typeof c=="function";)c=c();l=Cr(e,Array.isArray(c)?c:[c],Array.isArray(u)?u:[u])||l}else e.push(c),l=!0;else{const g=String(c);u&&u.nodeType===3&&u.data===g?e.push(u):e.push(document.createTextNode(g))}}return l}function mn(e,t,r=null){for(let s=0,l=t.length;s<l;s++)e.insertBefore(t[s],r)}function st(e,t,r,s){if(r===void 0)return e.textContent="";const l=s||document.createTextNode("");if(t.length){let a=!1;for(let i=t.length-1;i>=0;i--){const c=t[i];if(l!==c){const u=c.parentNode===e;!a&&!i?u?e.replaceChild(l,c):e.insertBefore(l,r):u&&c.remove()}else a=!0}}else e.insertBefore(l,r);return[l]}var ul="kickjs-devtools-theme";function xs(){try{const e=localStorage.getItem(ul);if(e==="dark"||e==="light"||e==="system")return e}catch{}return"system"}function bs(){return typeof window>"u"||!window.matchMedia?"dark":window.matchMedia("(prefers-color-scheme: light)").matches?"light":"dark"}var[hl,$s]=P(xs()),[ys,ws]=P(bs());if(typeof window<"u"&&window.matchMedia){const e=window.matchMedia("(prefers-color-scheme: light)"),t=r=>ws(r.matches?"light":"dark");e.addEventListener("change",t)}var lr=hl;function Vr(){const e=hl();return e==="system"?ys():e}function fl(e){$s(e);try{localStorage.setItem(ul,e)}catch{}}function _s(){qe(()=>{const e=Vr();document.documentElement.dataset.theme=e}),ke(()=>{delete document.documentElement.dataset.theme})}var vl="kickjs-devtools-density";function ks(){try{const e=localStorage.getItem(vl);if(e==="sm"||e==="md"||e==="lg")return e}catch{}return"sm"}var[gl,Ss]=P(ks()),pn=gl;function ml(e){Ss(e);try{localStorage.setItem(vl,e)}catch{}}function Cs(){qe(()=>{document.documentElement.dataset.density=gl()}),ke(()=>{delete document.documentElement.dataset.density})}var pl="kickjs-devtools-fonts";function Es(){try{const e=JSON.parse(localStorage.getItem(pl)??"{}"),t=e&&typeof e=="object"?e:{};return{sans:typeof t.sans=="string"?t.sans:"",mono:typeof t.mono=="string"?t.mono:""}}catch{return{sans:"",mono:""}}}var[Gr,Ms]=P(Es()),Ts=Gr;function As(e,t){const r={...Gr(),[e]:t};Ms(r);try{localStorage.setItem(pl,JSON.stringify(r))}catch{}}function Os(e,t){const r=e.split(",").map(s=>s.replace(/["';{}\\]/g,"").trim()).filter(Boolean).map(s=>`"${s}"`);return r.length?`${r.join(", ")}, ${t}`:void 0}function Ls(){const e=document.documentElement,t={sans:getComputedStyle(e).getPropertyValue("--font-sans").trim()||"sans-serif",mono:getComputedStyle(e).getPropertyValue("--font-mono").trim()||"monospace"};qe(()=>{for(const r of["sans","mono"]){const s=Os(Gr()[r],t[r]);s?e.style.setProperty(`--font-${r}`,s):e.style.removeProperty(`--font-${r}`)}}),ke(()=>{e.style.removeProperty("--font-sans"),e.style.removeProperty("--font-mono")})}var[Rs,qs]=P("connecting"),[Is,xn]=P(null),[Ns,Ps]=P(!1),[Ds,Hs]=P(null),[Us,js]=P(null),[Bs,zs]=P(null),[Fs,Js]=P([]),[Ks,Vs]=P([]),[Gs,Ws]=P({enabled:!1,queues:[]}),[Ys,Qs]=P({enabled:!1}),[Xs,Zs]=P([]),se={connectionStatus:Rs,lastUpdate:Is,authRequired:Ns,authError:Ds,health:Us,metrics:Bs,routes:Fs,container:Ks,queues:Gs,ws:Ys,cron:Xs},me={setConnectionStatus:qs,setLastUpdate:xn,setAuthRequired:Ps,setAuthError:Hs,setHealth:js,setMetrics:zs,setRoutes:Js,setContainer:Vs,setQueues:Ws,setWs:Qs,setCron:Zs,touch(){xn(new Date)}};function nt(){return document.body.dataset.base??"/_debug"}var Wr="kickjs_devtools_token",ea=30,Dt=null;function Tt(){if(Dt)return Dt;const e=new URLSearchParams(location.search).get("token");if(e){Er(e);const r=new URL(location.href);return r.searchParams.delete("token"),history.replaceState({},"",r.toString()),e}const t=document.cookie.match(new RegExp(`${Wr}=([^;]+)`));return t?(Er(decodeURIComponent(t[1])),Dt):null}function Er(e){Dt=e,document.cookie=`${Wr}=${encodeURIComponent(e)}; path=${nt()}; max-age=${86400*ea}; SameSite=Lax`,ta()}function ta(){nt()!=="/"&&(document.cookie=`${Wr}=; path=/; max-age=0; SameSite=Lax`)}function Yr(e){const t=Tt();return t?`${e}${e.includes("?")?"&":"?"}token=${encodeURIComponent(t)}`:e}var Qr=class extends Error{constructor(){super("AUTH_REQUIRED"),this.name="AuthRequiredError"}};async function Te(e){const t=Yr(`${nt()}${e}`),r=await fetch(t,{headers:xl()});if(r.status===401||r.status===403)throw new Qr;if(!r.ok)throw new Error(`GET ${e} failed: ${r.status} ${r.statusText}`);return await r.json()}async function Vt(e){const t=await fetch(Yr(`${nt()}${e}`),{method:"POST",headers:xl()});if(t.status===401||t.status===403)throw new Qr;if(!t.ok){const r=await t.json().catch(()=>null);throw new Error(r?.error??`${t.status} ${t.statusText}`)}return t}function xl(){const e=Tt();return e?{"x-devtools-token":e}:{}}var sr=e=>new URLSearchParams(Object.entries(e).flatMap(([t,r])=>r===void 0?[]:[[t,String(r)]])).toString(),ye={jobs:()=>Te("/jobs"),jobList:e=>Te(`/jobs/list?${sr(e)}`),job:e=>Te(`/jobs/job?${sr(e)}`),jobAction:async e=>await(await Vt(`/jobs/action?${sr(e)}`)).json(),requests:(e=0)=>Te(`/requests?since=${e}`),runtime:()=>Te("/runtime"),topology:()=>Te("/topology"),configOrigins:()=>Te("/config/origins"),metrics:()=>Te("/metrics"),source:(e,t)=>Te(`/source?${new URLSearchParams({controller:e,handler:t})}`),routeRegistry:()=>Te("/routes"),container:()=>Te("/container"),health:()=>Te("/health"),cron:()=>Te("/cron"),cronRun:e=>Vt(`/cron/run?name=${encodeURIComponent(e)}`),queues:()=>Te("/queues"),ws:()=>Te("/ws"),tabs:()=>Te("/tabs")};function bl(e,t,r){const s=Yr(`${nt()}${e}`),l=new EventSource(s);return l.addEventListener("message",a=>{try{t(JSON.parse(a.data))}catch(i){console.warn("SSE parse failed",i)}}),r&&l.addEventListener("error",r),()=>l.close()}var[bn,ra]=P([]),[na,la]=P([]);function sa(){const e=setInterval(()=>{const t=se.metrics();t&&(ra(r=>[...r,t.requests].slice(-61)),la(r=>[...r,t.serverErrors].slice(-61)))},1e3);return()=>clearInterval(e)}function ar(e){const t=[];for(let r=1;r<e.length;r++)t.push(Math.max(0,e[r]-e[r-1]));return t}function Mr(e,t){if(e.length===0)return;const r=e.toSorted((s,l)=>s-l);return r[Math.min(r.length-1,Math.max(0,Math.ceil(t/100*r.length)-1))]}function aa(e,t,r){return[...new Map([...e,...t].map(s=>[s.timestamp,s])).values()].toSorted((s,l)=>s.timestamp-l.timestamp).slice(-r)}var oa=d("<svg class=sparkline preserveAspectRatio=none aria-hidden=true><path fill=none stroke-width=1.5 stroke-linejoin=round stroke-linecap=round>"),ia=e=>{const t=()=>e.width??200,s=ce(()=>{const l=e.values;if(l.length<2)return"";const a=Math.min(...l),i=Math.max(...l)-a||1,c=t()/(l.length-1),u=g=>40-(g-a)/i*36-2;let h=`M0 ${u(l[0]).toFixed(2)}`;for(let g=1;g<l.length;g++)h+=` L${(g*c).toFixed(2)} ${u(l[g]).toFixed(2)}`;return h});return(()=>{var l=oa(),a=l.firstChild;return q(i=>{var c=`0 0 ${t()} 40`,u=s(),h=e.stroke??"var(--color-accent)";return c!==i.e&&F(l,"viewBox",i.e=c),u!==i.t&&F(a,"d",i.t=u),h!==i.a&&F(a,"stroke",i.a=h),i},{e:void 0,t:void 0,a:void 0}),l})()};function dt(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KiB`:e<1073741824?`${(e/1024/1024).toFixed(1)} MiB`:`${(e/1024/1024/1024).toFixed(2)} GiB`}function Se(e){return e<1?`${e.toFixed(2)} ms`:e<100?`${e.toFixed(1)} ms`:`${Math.round(e)} ms`}function Gt(e){const t=Math.floor(e);return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m ${t%60}s`:`${Math.floor(t/3600)}h ${Math.floor(t%3600/60)}m ${t%60}s`}function Wt(e){return`${Math.round(e*100)}%`}function Xe(e){const t=e.toUpperCase();return t==="GET"?"text-emerald-400":t==="POST"?"text-cyan-400":t==="PUT"||t==="PATCH"?"text-amber-400":t==="DELETE"?"text-red-400":"text-text-secondary"}function Ct(e){return`dt-pill dt-pill-${e>=500?"err":e>=400?"warn":e>=300?"redir":"ok"}`}function Xr(e){return`dt-tone dt-tone-${e==="controller"?"violet":e==="service"?"blue":e==="repository"?"teal":"gray"}`}function ut(e){return`dt-tone dt-tone-${{ok:"green",warn:"amber",err:"red",idle:"gray"}[e]}`}function $t(e,t=1){const r=e*t;return r>1e3?"text-red-500":r>500?"text-orange-500":r>200?"text-amber-500":""}function tr(e,t=Date.now()){const r=Math.max(0,Math.round((t-e)/1e3));return r<60?`${r}s ago`:r<3600?`${Math.floor(r/60)}m ago`:r<86400?`${Math.floor(r/3600)}h ago`:`${Math.floor(r/86400)}d ago`}function or(e){let t=0;for(const r of e)t=r.charCodeAt(0)+((t<<5)-t);return`hsl(${Math.abs(t)%12*30} 60% 50%)`}function ca(e,t=12){const r=e.indexOf("?"),[s,l]=r===-1?[e,""]:[e.slice(0,r),e.slice(r)];return s.split("/").map(a=>a.length>t&&/\d/.test(a)?`${a.slice(0,6)}…`:a).join("/")+l}var da=d('<span class=dt-tip tabindex=0><svg class=dt-tip-icon viewBox="0 0 24 24"aria-hidden=true><circle cx=12 cy=12 r=9 fill=none stroke=currentColor stroke-width=1.5></circle><path d="M12 8h.01M12 11v6"stroke=currentColor stroke-width=2 stroke-linecap=round fill=none></path></svg><span role=tooltip>'),ua={"heap.used":{short:"V8-allocated memory currently used by JavaScript objects.",detail:"Grows as your code allocates objects, shrinks after GC frees them. A consistently rising heap-used line on the sparkline is the textbook leak signature."},"heap.total":{short:"V8-allocated memory the JS heap is currently sized to use.",detail:"Larger than heap-used; V8 reserves headroom so allocations don't pause to grow the heap. Bumps up in 1-8 MiB jumps as the heap expands."},rss:{short:"Total memory resident in physical RAM for this Node process.",detail:'Includes the JS heap, native buffers, V8 internal structures, and code. Always larger than heap-used; the gap is "everything the OS sees" minus "JS objects".'},external:{short:"Memory used by C++ objects bound to JS (Buffers, native bindings)."},"array-buffers":{short:"Memory used by ArrayBuffer / SharedArrayBuffer instances."},"event-loop.p99":{short:"How late the event loop ran, at the 99th percentile — about 0 when idle.",detail:"Sustained values above ~50ms mean some synchronous operation is blocking the loop. Common culprits: large JSON.parse, sync crypto, blocking DB drivers."},gc:{short:"Garbage-collector activity since process start.",detail:"Total run count and cumulative pause time. Frequent GC with low reclaim ratio = leak; rare GC with healthy reclaim = good citizen."},"leak.risk":{short:"Heap-growth slope over the recent window — stable / warn / critical.",detail:"Bucketed from heap-growth in MB/min: <5 = ok, <20 = warn, ≥20 = critical. Critical sustained for >5 minutes is the moment to capture a heap snapshot."},"gc.reclaim":{short:"Average ratio of memory freed by each GC pass.",detail:"Trending toward zero means GC can't free anything — strong leak indicator. Healthy apps reclaim 20-60% on each major GC."},"heap.utilization":{short:"Fraction of V8's hard heap-size limit currently in use.",detail:"Approaching 1 means the process is close to OOM. Use --max-old-space-size to raise the limit if your workload is memory-bound."},requests:{short:"Total HTTP requests handled since process start."},"server-errors":{short:"5xx responses — server-side failures."},"client-errors":{short:"4xx responses — bad client input, missing routes, auth denials."},"error-rate":{short:"Server errors as a percentage of total requests.",detail:"Computed across the lifetime of the process. Spikes typically signal upstream dependency failures; sustained elevation = code bug."},uptime:{short:"How long this Node process has been running."},"latency.avg":{short:"Mean response time per route (sum of all calls / call count)."},"latency.p50":{short:"Median — half the requests complete faster than this."},"latency.p95":{short:"95% of requests complete within this time."},"latency.p99":{short:"99% of requests complete within this time. Outlier-sensitive."},"latency.max":{short:"Slowest single response observed since process start."},"resolve.count":{short:"Number of times this token was resolved from the DI container."},"resolve.duration":{short:"How long the container took to resolve this token (ms)."},"post-construct":{short:"@PostConstruct lifecycle status: done / failed / none.",detail:'A failed PostConstruct means the service registered but its async init threw. The token is left in a "registered" state; resolve() will throw the original error.'}},Ke=e=>{const t=()=>e.text??ua[e.metric??""]?.short??"",r=e.placement??"top";return(()=>{var s=da(),l=s.firstChild.nextSibling;return U(l,`dt-tip-pop dt-tip-pop-${r}`),n(l,t),q(()=>F(s,"aria-label",t())),s})()};we(["click"]);var $l="kickjs-devtools-tab",Zr={memory:"runtime",topology:"runtime",graph:"container"};function ha(){try{const e=localStorage.getItem($l)??"overview";return Zr[e]??e}catch{return"overview"}}var[fa,va]=P(ha());function ht(e){const t=Zr[e]??e;va(t);try{localStorage.setItem($l,t)}catch{}}var ga=d('<svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=1.8 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path>'),$n={overview:"M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z",runtime:"M22 12h-4l-3 9L9 3l-3 9H2",memory:"M9 3v2M15 3v2M9 19v2M15 19v2M3 9h2M3 15h2M19 9h2M19 15h2M7 5h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2z",topology:"M12 2l10 5-10 5L2 7zM2 17l10 5 10-5M2 12l10 5 10-5",metrics:"M3 3v18h18M7 16v-4M12 16V8M17 16v-7",routes:"M6 3v12M18 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM6 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM18 9a9 9 0 0 1-9 9",requests:"M7 7h13l-4-4M17 17H4l4 4",container:"M21 8l-9-5-9 5v8l9 5 9-5zM3 8l9 5 9-5M12 13v8",graph:"M18 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM6 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM18 22a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM8.6 13.5l6.8 4M15.4 6.5l-6.8 4",database:"M12 3c4.97 0 9 1.34 9 3s-4.03 3-9 3-9-1.34-9-3 4.03-3 9-3zM21 12c0 1.66-4 3-9 3s-9-1.34-9-3M3 6v12c0 1.66 4 3 9 3s9-1.34 9-3V6",sockets:"M5 12.55a11 11 0 0 1 14.08 0M1.42 9a16 16 0 0 1 21.16 0M8.53 16.11a6 6 0 0 1 6.95 0M12 20h.01",queues:"M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01",activity:"M12 8v4l3 3M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18z",config:"M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6",custom:"M4 4h6v6H4zM14 4h6v6h-6zM4 14h6v6H4zM17 14v6M14 17h6",expand:"M9 18l6-6-6-6",collapse:"M15 18l-6-6 6-6",search:"M11 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16zM21 21l-4.35-4.35",action:"M13 2L3 14h9l-1 8 10-12h-9z",editor:"M16 18l6-6-6-6M8 6l-6 6 6 6",lock:"M5 11h14v10H5zM8 11V7a4 4 0 0 1 8 0v4",unlock:"M5 11h14v10H5zM8 11V7a4 4 0 0 1 7.75-1.4",eye:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8S1 12 1 12zM12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z",maximize:"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"},Je=e=>(()=>{var t=ga(),r=t.firstChild;return q(s=>{var l=e.size??18,a=e.size??18,i=e.class,c=$n[e.name]??$n.custom;return l!==s.e&&F(t,"width",s.e=l),a!==s.t&&F(t,"height",s.t=a),i!==s.a&&F(t,"class",s.a=i),c!==s.o&&F(r,"d",s.o=c),s},{e:void 0,t:void 0,a:void 0,o:void 0}),t})();function ma(e,t,r){const s=[...e];return t<0||t>=s.length||r<0||r>=s.length||s.splice(r,0,...s.splice(t,1)),s}var pa={publicFlag:"auth.public",csrfCookie:"_csrf",csrfHeader:"x-csrf-token",openApiUrl:"/openapi.json",editorUrl:"vscode://file{file}:{line}"};function Tr(e){return(Array.isArray(e)?e:e.split(",")).map(t=>t.trim()).filter(Boolean)}function yl(e,t,r,s){const l=s.toLowerCase();return t.defaultHeaders?.[l]??!(l==="authorization"&&wl(e,r))}function wl(e,t){return Tr(t.publicFlag).some(r=>e.flags?.[r]!==void 0)}var xa=new Set(["POST","PUT","PATCH","DELETE"]),ba=new Set(["GET","HEAD","OPTIONS"]),$a=e=>["DELETE","PUT","PATCH"].includes(e.toUpperCase()),Ar=e=>xa.has(e.toUpperCase());function Ht(e){const t=[...e.matchAll(/:([A-Za-z_$][\w$]*)/g)].map(r=>r[1]);return[...new Set(t)]}function ya(e,t){const r=[],s=e.split(/(:[A-Za-z_$][\w$]*)/).map(i=>i.startsWith(":")?(r.push(i.slice(1)),"([^/]+)"):i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(""),l=new RegExp(`^${s}/?$`).exec(t);if(!l)return{};const a=i=>{try{return decodeURIComponent(i)}catch{return i}};return Object.fromEntries(r.map((i,c)=>[i,a(l[c+1])]))}function _l(e,t,r,s){const l=t.replace(/:([A-Za-z_$][\w$]*)/g,(c,u)=>r[u]?encodeURIComponent(r[u]):c),a=new URLSearchParams;for(const c of s)c.enabled&&c.key&&a.append(c.key,c.value);const i=a.toString();return`${e}${l}${i?`?${i}`:""}`}function wa(e,t){for(const r of e.split(";")){const s=r.indexOf("=");if(!(s<0)&&r.slice(0,s).trim()===t)return decodeURIComponent(r.slice(s+1).trim())}}var kl=/\{\{\s*([\w.-]+)\s*\}\}/g;function Ut(e,t){return e.replace(kl,(r,s)=>Object.prototype.hasOwnProperty.call(t,s)?t[s]:r)}function en(e){const t={};for(const r of e)r.enabled&&r.key&&(t[r.key]=r.value);return t}function yn(e){const t=typeof e.body=="string"?e.body:"",r=(e.form??[]).flatMap(l=>[l.name,l.value??""]),s=[e.url,...Object.entries(e.headers).flat(),t,...r].join(`
2
- `);return[...new Set([...s.matchAll(kl)].map(l=>l[1]))]}function _a(e,t){const r=t.match(/[^.[\]]+/g)??[];let s=e;for(const l of r){if(s===null||typeof s!="object")return;s=s[l]}if(s!==void 0)return typeof s=="string"?s:JSON.stringify(s)}function ka(e){const{route:t,settings:r,origin:s,cookies:l}=e,a=e.variables??{},i=m=>Ut(m,a),c=m=>m.map(S=>({...S,key:i(S.key),value:i(S.value)})),u=Da(e.inputs,a,e.mappings??[]),h={params:Object.fromEntries(Object.entries(u.params).map(([m,S])=>[m,i(S)])),query:c(u.query),headers:c(e.inputs.headers),body:i(e.inputs.body),bodyMode:e.inputs.bodyMode,form:(e.inputs.form??[]).map(m=>({...m,key:i(m.key),value:i(m.value)}))},g=c(e.defaults.filter(m=>yl(t,e.inputs,r,m.key))),p=t.method.toUpperCase(),x={},v=m=>{for(const S of m)if(!(!S.enabled||!S.key)){for(const b of Object.keys(x))b.toLowerCase()===S.key.toLowerCase()&&delete x[b];x[S.key]=S.value}};v(g),v(h.headers);const _=m=>Object.keys(x).some(S=>S.toLowerCase()===m);if(!ba.has(p)&&!_(r.csrfHeader.toLowerCase())){const m=wa(l,r.csrfCookie);m&&(x[r.csrfHeader]=m)}const N=_l(s,t.path,h.params,h.query);if(Ar(p)&&h.bodyMode==="form"){const{body:m,form:S}=Ca(h.form??[]);for(const b of Object.keys(x))b.toLowerCase()==="content-type"&&delete x[b];return{method:p,url:N,headers:x,body:m,form:S}}const $=Ar(p)&&h.body.trim()?h.body:void 0;return $!==void 0&&!_("content-type")&&/^\s*[[{]/.test($)&&(x["Content-Type"]="application/json"),{method:p,url:N,headers:x,...$!==void 0?{body:$}:{}}}var Sa="<file>";function Ca(e){const t=new FormData,r=[];for(const s of e)if(!(!s.enabled||!s.key))if(s.type==="file"){for(const l of s.files??[])t.append(s.key,l,l.name),r.push({name:s.key,fileName:l.name});s.files?.length||r.push({name:s.key,fileName:Sa})}else t.append(s.key,s.value),r.push({name:s.key,value:s.value});return{body:t,form:r}}var Lt=e=>`'${e.replace(/'/g,"'\\''")}'`;function Ea(e){const t=[`curl -X ${e.method} ${Lt(e.url)}`];for(const[r,s]of Object.entries(e.headers))t.push(`-H ${Lt(`${r}: ${s}`)}`);if(e.form)for(const r of e.form)t.push(`-F ${Lt(r.fileName!==void 0?`${r.name}=@${r.fileName}`:`${r.name}=${r.value??""}`)}`);else typeof e.body=="string"&&t.push(`--data-raw ${Lt(e.body)}`);return t.join(` \\
1
+ (function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const l of document.querySelectorAll('link[rel="modulepreload"]'))s(l);new MutationObserver(l=>{for(const a of l)if(a.type==="childList")for(const i of a.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function r(l){const a={};return l.integrity&&(a.integrity=l.integrity),l.referrerPolicy&&(a.referrerPolicy=l.referrerPolicy),l.crossOrigin==="use-credentials"?a.credentials="include":l.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function s(l){if(l.ep)return;l.ep=!0;const a=r(l);fetch(l.href,a)}})();var $e={context:void 0,registry:void 0,effects:void 0,done:!1,getContextId(){return dn(this.context.count)},getNextContextId(){return dn(this.context.count++)}};function dn(e){const t=String(e),r=t.length-1;return $e.context.id+(r?String.fromCharCode(96+r):"")+t}function wr(e){$e.context=e}function ns(){return{...$e.context,id:$e.getNextContextId(),count:0}}var ls=(e,t)=>e===t,rl=Symbol("solid-track"),zt={equals:ls},un=null,nl=ol,Be=1,kt=2,ll={owned:null,cleanups:null,context:null,owner:null},ve=null,X=null,Et=null,it=null,xe=null,Me=null,Ae=null,er=0;function ct(e,t){const r=xe,s=ve,l=e.length===0,a=t===void 0?s:t,i=l?ll:{owned:null,cleanups:null,context:a?a.context:null,owner:a},c=l?e:()=>e(()=>De(()=>Ze(i)));ve=i,xe=null;try{return We(c,!0)}finally{xe=r,ve=s}}function P(e,t){t=t?Object.assign({},zt,t):zt;const r={value:e,observers:null,observerSlots:null,comparator:t.equals||void 0},s=l=>(typeof l=="function"&&(X&&X.running&&X.sources.has(r)?l=l(r.tValue):l=l(r.value)),al(r,l));return[sl.bind(r),s]}function q(e,t,r){const s=Br(e,t,!1,Be);Et&&X&&X.running?Me.push(s):Mt(s)}function qe(e,t,r){nl=cs;const s=Br(e,t,!1,Be),l=kr&&as(kr);l&&(s.suspense=l),(!r||!r.render)&&(s.user=!0),Ae?Ae.push(s):Mt(s)}function ce(e,t,r){r=r?Object.assign({},zt,r):zt;const s=Br(e,t,!0,0);return s.observers=null,s.observerSlots=null,s.comparator=r.equals||void 0,Et&&X&&X.running?(s.tState=Be,Me.push(s)):Mt(s),sl.bind(s)}function De(e){if(!it&&xe===null)return e();const t=xe;xe=null;try{return it?it.untrack(e):e()}finally{xe=t}}function _r(e,t,r){const s=Array.isArray(e);let l,a=r&&r.defer;return i=>{let c;if(s){c=Array(e.length);for(let f=0;f<e.length;f++)c[f]=e[f]()}else c=e();if(a)return a=!1,i;const u=De(()=>t(c,l,i));return l=c,u}}function Ie(e){qe(()=>De(e))}function ke(e){return ve===null||(ve.cleanups===null?ve.cleanups=[e]:ve.cleanups.push(e)),e}function ss(e){if(X&&X.running)return e(),X.done;const t=xe,r=ve;return Promise.resolve().then(()=>{xe=t,ve=r;let s;return(Et||kr)&&(s=X||(X={sources:new Set,effects:[],promises:new Set,disposed:new Set,queue:new Set,running:!0}),s.done||(s.done=new Promise(l=>s.resolve=l)),s.running=!0),We(e,!1),xe=ve=null,s?s.done:void 0})}var[cv,fn]=P(!1);function as(e){let t;return ve&&ve.context&&(t=ve.context[e.id])!==void 0?t:e.defaultValue}var kr;function sl(){const e=X&&X.running;if(this.sources&&(e?this.tState:this.state))if((e?this.tState:this.state)===Be)Mt(this);else{const t=Me;Me=null,We(()=>Ft(this),!1),Me=t}if(xe){const t=this.observers;if(!t||t[t.length-1]!==xe){const r=t?t.length:0;xe.sources?(xe.sources.push(this),xe.sourceSlots.push(r)):(xe.sources=[this],xe.sourceSlots=[r]),t?(t.push(xe),this.observerSlots.push(xe.sources.length-1)):(this.observers=[xe],this.observerSlots=[xe.sources.length-1])}}return e&&X.sources.has(this)?this.tValue:this.value}function al(e,t,r){let s=X&&X.running&&X.sources.has(e)?e.tValue:e.value;if(!e.comparator||!e.comparator(s,t)){if(X){const l=X.running;(l||!r&&X.sources.has(e))&&(X.sources.add(e),e.tValue=t),l||(e.value=t)}else e.value=t;e.observers&&e.observers.length&&We(()=>{for(let l=0;l<e.observers.length;l+=1){const a=e.observers[l],i=X&&X.running;i&&X.disposed.has(a)||((i?!a.tState:!a.state)&&(a.pure?Me.push(a):Ae.push(a),a.observers&&il(a)),i?a.tState=Be:a.state=Be)}if(Me.length>1e6)throw Me=[],new Error},!1)}return t}function Mt(e){if(!e.fn)return;Ze(e);const t=er;hn(e,X&&X.running&&X.sources.has(e)?e.tValue:e.value,t),X&&!X.running&&X.sources.has(e)&&queueMicrotask(()=>{We(()=>{X&&(X.running=!0),xe=ve=e,hn(e,e.tValue,t),xe=ve=null},!1)})}function hn(e,t,r){let s;const l=ve,a=xe;xe=ve=e;try{s=e.fn(t)}catch(i){return e.pure&&(X&&X.running?(e.tState=Be,e.tOwned&&e.tOwned.forEach(Ze),e.tOwned=void 0):(e.state=Be,e.owned&&e.owned.forEach(Ze),e.owned=null)),e.updatedAt=r+1,zr(i)}finally{xe=a,ve=l}(!e.updatedAt||e.updatedAt<=r)&&(e.updatedAt!=null&&"observers"in e?al(e,s,!0):X&&X.running&&e.pure?(X.sources.has(e)||(e.value=s),X.sources.add(e),e.tValue=s):e.value=s,e.updatedAt=r)}function Br(e,t,r,s=Be,l){const a={fn:e,state:s,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:t,owner:ve,context:ve?ve.context:null,pure:r};if(X&&X.running&&(a.state=0,a.tState=s),ve===null||ve!==ll&&(X&&X.running&&ve.pure?ve.tOwned?ve.tOwned.push(a):ve.tOwned=[a]:ve.owned?ve.owned.push(a):ve.owned=[a]),it&&a.fn){const i=a.fn,[c,u]=P(void 0,{equals:!1}),f=it.factory(i,u);ke(()=>f.dispose());let g,p=!1;const x=()=>ss(u).then(()=>{g&&(g.dispose(),g=void 0,p||u())});a.fn=v=>(c(),X&&X.running?(g||(g=it.factory(i,x)),g.track(v)):(p=!0,f.track(v)))}return a}function St(e){const t=X&&X.running;if((t?e.tState:e.state)===0)return;if((t?e.tState:e.state)===kt)return Ft(e);if(e.suspense&&De(e.suspense.inFallback))return e.suspense.effects.push(e);const r=[e];for(;(e=e.owner)&&(!e.updatedAt||e.updatedAt<er);){if(t&&X.disposed.has(e))return;(t?e.tState:e.state)&&r.push(e)}for(let s=r.length-1;s>=0;s--){if(e=r[s],t){let l=e,a=r[s+1];for(;(l=l.owner)&&l!==a;)if(X.disposed.has(l))return}if((t?e.tState:e.state)===Be)Mt(e);else if((t?e.tState:e.state)===kt){const l=Me;Me=null,We(()=>Ft(e,r[0]),!1),Me=l}}}function We(e,t){if(Me)return e();let r=!1;t||(Me=[]),Ae?r=!0:Ae=[],er++;try{const s=e();return os(r),s}catch(s){r||(Ae=null),Me=null,zr(s)}}function os(e){if(Me&&(Et&&X&&X.running?is(Me):ol(Me),Me=null),e)return;let t;if(X){if(!X.promises.size&&!X.queue.size){const s=X.sources,l=X.disposed;Ae.push.apply(Ae,X.effects),t=X.resolve;for(const a of Ae)"tState"in a&&(a.state=a.tState),delete a.tState;X=null,We(()=>{for(const a of l)Ze(a);for(const a of s){if(a.value=a.tValue,a.owned)for(let i=0,c=a.owned.length;i<c;i++)Ze(a.owned[i]);a.tOwned&&(a.owned=a.tOwned),delete a.tValue,delete a.tOwned,a.tState=0}fn(!1)},!1)}else if(X.running){X.running=!1,X.effects.push.apply(X.effects,Ae),Ae=null,fn(!0);return}}const r=Ae;Ae=null,r.length&&We(()=>nl(r),!1),t&&t()}function ol(e){for(let t=0;t<e.length;t++)St(e[t])}function is(e){for(let t=0;t<e.length;t++){const r=e[t],s=X.queue;s.has(r)||(s.add(r),Et(()=>{s.delete(r),We(()=>{X.running=!0,St(r)},!1),X&&(X.running=!1)}))}}function cs(e){let t,r=0;for(t=0;t<e.length;t++){const s=e[t];s.user?e[r++]=s:St(s)}if($e.context){if($e.count){$e.effects||($e.effects=[]),$e.effects.push(...e.slice(0,r));return}wr()}for($e.effects&&($e.done||!$e.count)&&(e=[...$e.effects,...e],r+=$e.effects.length,delete $e.effects),t=0;t<r;t++)St(e[t])}function Ft(e,t){const r=X&&X.running;r?e.tState=0:e.state=0;for(let s=0;s<e.sources.length;s+=1){const l=e.sources[s];if(l.sources){const a=r?l.tState:l.state;a===Be?l!==t&&(!l.updatedAt||l.updatedAt<er)&&St(l):a===kt&&Ft(l,t)}}}function il(e){const t=X&&X.running;for(let r=0;r<e.observers.length;r+=1){const s=e.observers[r];(t?!s.tState:!s.state)&&(t?s.tState=kt:s.state=kt,s.pure?Me.push(s):Ae.push(s),s.observers&&il(s))}}function Ze(e){let t;if(e.sources)for(;e.sources.length;){const r=e.sources.pop(),s=e.sourceSlots.pop(),l=r.observers;if(l&&l.length){const a=l.pop(),i=r.observerSlots.pop();s<l.length&&(a.sourceSlots[i]=s,l[s]=a,r.observerSlots[s]=i)}}if(e.tOwned){for(t=e.tOwned.length-1;t>=0;t--)Ze(e.tOwned[t]);delete e.tOwned}if(X&&X.running&&e.pure)cl(e,!0);else if(e.owned){for(t=e.owned.length-1;t>=0;t--)Ze(e.owned[t]);e.owned=null}if(e.cleanups){for(t=e.cleanups.length-1;t>=0;t--)e.cleanups[t]();e.cleanups=null}X&&X.running?e.tState=0:e.state=0}function cl(e,t){if(t||(e.tState=0,X.disposed.add(e)),e.owned)for(let r=0;r<e.owned.length;r++)cl(e.owned[r])}function ds(e){return e instanceof Error?e:new Error(typeof e=="string"?e:"Unknown error",{cause:e})}function vn(e,t,r){try{for(const s of t)s(e)}catch(s){zr(s,r&&r.owner||null)}}function zr(e,t=ve){const r=un&&t&&t.context&&t.context[un],s=ds(e);if(!r)throw s;Ae?Ae.push({fn(){vn(s,r,t)},state:Be}):vn(s,r,t)}var Sr=Symbol("fallback");function Jt(e){for(let t=0;t<e.length;t++)e[t]()}function us(e,t,r={}){let s=[],l=[],a=[],i=0,c=t.length>1?[]:null;return ke(()=>Jt(a)),()=>{let u=e()||[],f=u.length,g,p;return u[rl],De(()=>{let v,_,N,b,m,S,$,h,w;if(f===0)i!==0&&(Jt(a),a=[],s=[],l=[],i=0,c&&(c=[])),r.fallback&&(s=[Sr],l[0]=ct(C=>(a[0]=C,r.fallback())),i=1);else if(i===0){for(l=new Array(f),p=0;p<f;p++)s[p]=u[p],l[p]=ct(x);i=f}else{for(N=new Array(f),b=new Array(f),c&&(m=new Array(f)),S=0,$=Math.min(i,f);S<$&&s[S]===u[S];S++);for($=i-1,h=f-1;$>=S&&h>=S&&s[$]===u[h];$--,h--)N[h]=l[$],b[h]=a[$],c&&(m[h]=c[$]);for(v=new Map,_=new Array(h+1),p=h;p>=S;p--)w=u[p],g=v.get(w),_[p]=g===void 0?-1:g,v.set(w,p);for(g=S;g<=$;g++)w=s[g],p=v.get(w),p!==void 0&&p!==-1?(N[p]=l[g],b[p]=a[g],c&&(m[p]=c[g]),p=_[p],v.set(w,p)):a[g]();for(p=S;p<f;p++)p in N?(l[p]=N[p],a[p]=b[p],c&&(c[p]=m[p],c[p](p))):l[p]=ct(x);l=l.slice(0,i=f),s=u.slice(0)}return l});function x(v){if(a[p]=v,c){const[_,N]=P(p);return c[p]=N,t(u[p],_)}return t(u[p])}}}function fs(e,t,r={}){let s=[],l=[],a=[],i=[],c=0,u;return ke(()=>Jt(a)),()=>{const f=e()||[],g=f.length;return f[rl],De(()=>{if(g===0)return c!==0&&(Jt(a),a=[],s=[],l=[],c=0,i=[]),r.fallback&&(s=[Sr],l[0]=ct(x=>(a[0]=x,r.fallback())),c=1),l;for(s[0]===Sr&&(a[0](),a=[],s=[],l=[],c=0),u=0;u<g;u++)u<s.length&&s[u]!==f[u]?i[u](()=>f[u]):u>=s.length&&(l[u]=ct(p));for(;u<s.length;u++)a[u]();return c=i.length=a.length=g,s=f.slice(0),l=l.slice(0,c)});function p(x){a[u]=x;const[v,_]=P(f[u]);return i[u]=_,t(v,u)}}}var hs=!1;function o(e,t){if(hs&&$e.context){const r=$e.context;wr(ns());const s=De(()=>e(t||{}));return wr(r),s}return De(()=>e(t||{}))}var vs=e=>`Stale read from <${e}>.`;function re(e){const t="fallback"in e&&{fallback:()=>e.fallback};return ce(us(()=>e.each,e.children,t||void 0))}function Fr(e){const t="fallback"in e&&{fallback:()=>e.fallback};return ce(fs(()=>e.each,e.children,t||void 0))}function y(e){const t=e.keyed,r=ce(()=>e.when,void 0,void 0),s=t?r:ce(r,void 0,{equals:(l,a)=>!l==!a});return ce(()=>{const l=s();if(l){const a=e.children;return typeof a=="function"&&a.length>0?De(()=>a(t?l:()=>{if(!De(s))throw vs("Show");return r()})):a}return e.fallback},void 0,void 0)}var ae=e=>ce(()=>e());function gs(e,t,r){let s=r.length,l=t.length,a=s,i=0,c=0,u=t[l-1].nextSibling,f=null;for(;i<l||c<a;){if(t[i]===r[c]){i++,c++;continue}for(;t[l-1]===r[a-1];)l--,a--;if(l===i){const g=a<s?c?r[c-1].nextSibling:r[a-c]:u;for(;c<a;)e.insertBefore(r[c++],g)}else if(a===c)for(;i<l;)(!f||!f.has(t[i]))&&t[i].remove(),i++;else if(t[i]===r[a-1]&&r[c]===t[l-1]){const g=t[--l].nextSibling;e.insertBefore(r[c++],t[i++].nextSibling),e.insertBefore(r[--a],g),t[l]=r[a]}else{if(!f){f=new Map;let p=c;for(;p<a;)f.set(r[p],p++)}const g=f.get(t[i]);if(g!=null)if(c<g&&g<a){let p=i,x=1,v;for(;++p<l&&p<a&&!((v=f.get(t[p]))==null||v!==g+x);)x++;if(x>g-c){const _=t[i];for(;c<g;)e.insertBefore(r[c++],_)}else e.replaceChild(r[c++],t[i++])}else i++;else t[i++].remove()}}}var gn="_$DX_DELEGATE";function ms(e,t,r,s={}){let l;return ct(a=>{l=a,t===document?e():n(t,e(),!r&&t.firstChild?null:void 0,r)},s.owner),()=>{l(),t.textContent=""}}function d(e,t,r,s){let l;const a=()=>{const c=s?document.createElementNS("http://www.w3.org/1998/Math/MathML","template"):document.createElement("template");return c.innerHTML=e,r?c.content.firstChild.firstChild:s?c.firstChild:c.content.firstChild},i=t?()=>De(()=>document.importNode(l||(l=a()),!0)):()=>(l||(l=a())).cloneNode(!0);return i.cloneNode=i,i}function we(e,t=window.document){const r=t[gn]||(t[gn]=new Set);for(let s=0,l=e.length;s<l;s++){const a=e[s];r.has(a)||(r.add(a),t.addEventListener(a,ps))}}function F(e,t,r){Kr(e)||(r==null?e.removeAttribute(t):e.setAttribute(t,r))}function U(e,t){Kr(e)||(t==null?e.removeAttribute("class"):e.className=t)}function Jr(e,t,r,s){if(s)Array.isArray(r)?(e[`$$${t}`]=r[0],e[`$$${t}Data`]=r[1]):e[`$$${t}`]=r;else if(Array.isArray(r)){const l=r[0];e.addEventListener(t,r[0]=a=>l.call(e,r[1],a))}else e.addEventListener(t,r,typeof r!="function"&&r)}function dl(e,t,r){if(!t)return r?F(e,"style"):t;const s=e.style;if(typeof t=="string")return s.cssText=t;typeof r=="string"&&(s.cssText=r=void 0),r||(r={}),t||(t={});let l,a;for(a in r)t[a]??s.removeProperty(a),delete r[a];for(a in t)l=t[a],l!==r[a]&&(s.setProperty(a,l),r[a]=l);return r}function Ve(e,t,r){r!=null?e.style.setProperty(t,r):e.style.removeProperty(t)}function et(e,t,r){return De(()=>e(t,r))}function n(e,t,r,s){if(r!==void 0&&!s&&(s=[]),typeof t!="function")return Kt(e,t,s,r);q(l=>Kt(e,t(),l,r),s)}function Kr(e){return!!$e.context&&!$e.done&&(!e||e.isConnected)}function ps(e){if($e.registry&&$e.events&&$e.events.find(([u,f])=>f===e))return;let t=e.target;const r=`$$${e.type}`,s=e.target,l=e.currentTarget,a=u=>Object.defineProperty(e,"target",{configurable:!0,value:u}),i=()=>{const u=t[r];if(u&&!t.disabled){const f=t[`${r}Data`];if(f!==void 0?u.call(t,f,e):u.call(t,e),e.cancelBubble)return}return t.host&&typeof t.host!="string"&&!t.host._$host&&t.contains(e.target)&&a(t.host),!0},c=()=>{for(;i()&&(t=t._$host||t.parentNode||t.host););};Object.defineProperty(e,"currentTarget",{configurable:!0,get(){return t||document}}),$e.registry&&!$e.done&&($e.done=_$HY.done=!0);try{if(e.composedPath){const u=e.composedPath();a(u[0]);for(let f=0;f<u.length-2&&(t=u[f],!!i());f++){if(t._$host){t=t._$host,c();break}if(t.parentNode===l)break}}else c();a(s)}finally{e=t=null}}function Kt(e,t,r,s,l){const a=Kr(e);if(a){!r&&(r=[...e.childNodes]);let u=[];for(let f=0;f<r.length;f++){const g=r[f];g.nodeType===8&&g.data.slice(0,2)==="!$"?g.remove():u.push(g)}r=u}for(;typeof r=="function";)r=r();if(t===r)return r;const i=typeof t,c=s!==void 0;if(e=c&&r[0]&&r[0].parentNode||e,i==="string"||i==="number"){if(a||i==="number"&&(t=t.toString(),t===r))return r;if(c){let u=r[0];u&&u.nodeType===3?u.data!==t&&(u.data=t):u=document.createTextNode(t),r=st(e,r,s,u)}else r!==""&&typeof r=="string"?r=e.firstChild.data=t:r=e.textContent=t}else if(t==null||i==="boolean"){if(a)return r;r=st(e,r,s)}else{if(i==="function")return q(()=>{let u=t();for(;typeof u=="function";)u=u();r=Kt(e,u,r,s)}),()=>r;if(Array.isArray(t)){const u=[],f=r&&Array.isArray(r);if(Cr(u,t,r,l))return q(()=>r=Kt(e,u,r,s,!0)),()=>r;if(a){if(!u.length)return r;if(s===void 0)return r=[...e.childNodes];let g=u[0];if(g.parentNode!==e)return r;const p=[g];for(;(g=g.nextSibling)!==s;)p.push(g);return r=p}if(u.length===0){if(r=st(e,r,s),c)return r}else f?r.length===0?mn(e,u,s):gs(e,r,u):(r&&st(e),mn(e,u));r=u}else if(t.nodeType){if(a&&t.parentNode)return r=c?[t]:t;if(Array.isArray(r)){if(c)return r=st(e,r,s,t);st(e,r,null,t)}else r==null||r===""||!e.firstChild?e.appendChild(t):e.replaceChild(t,e.firstChild);r=t}}return r}function Cr(e,t,r,s){let l=!1;for(let a=0,i=t.length;a<i;a++){let c=t[a],u=r&&r[e.length],f;if(!(c==null||c===!0||c===!1))if((f=typeof c)=="object"&&c.nodeType)e.push(c);else if(Array.isArray(c))l=Cr(e,c,u)||l;else if(f==="function")if(s){for(;typeof c=="function";)c=c();l=Cr(e,Array.isArray(c)?c:[c],Array.isArray(u)?u:[u])||l}else e.push(c),l=!0;else{const g=String(c);u&&u.nodeType===3&&u.data===g?e.push(u):e.push(document.createTextNode(g))}}return l}function mn(e,t,r=null){for(let s=0,l=t.length;s<l;s++)e.insertBefore(t[s],r)}function st(e,t,r,s){if(r===void 0)return e.textContent="";const l=s||document.createTextNode("");if(t.length){let a=!1;for(let i=t.length-1;i>=0;i--){const c=t[i];if(l!==c){const u=c.parentNode===e;!a&&!i?u?e.replaceChild(l,c):e.insertBefore(l,r):u&&c.remove()}else a=!0}}else e.insertBefore(l,r);return[l]}var ul="kickjs-devtools-theme";function xs(){try{const e=localStorage.getItem(ul);if(e==="dark"||e==="light"||e==="system")return e}catch{}return"system"}function bs(){return typeof window>"u"||!window.matchMedia?"dark":window.matchMedia("(prefers-color-scheme: light)").matches?"light":"dark"}var[fl,$s]=P(xs()),[ys,ws]=P(bs());if(typeof window<"u"&&window.matchMedia){const e=window.matchMedia("(prefers-color-scheme: light)"),t=r=>ws(r.matches?"light":"dark");e.addEventListener("change",t)}var lr=fl;function Vr(){const e=fl();return e==="system"?ys():e}function hl(e){$s(e);try{localStorage.setItem(ul,e)}catch{}}function _s(){qe(()=>{const e=Vr();document.documentElement.dataset.theme=e}),ke(()=>{delete document.documentElement.dataset.theme})}var vl="kickjs-devtools-density";function ks(){try{const e=localStorage.getItem(vl);if(e==="sm"||e==="md"||e==="lg")return e}catch{}return"sm"}var[gl,Ss]=P(ks()),pn=gl;function ml(e){Ss(e);try{localStorage.setItem(vl,e)}catch{}}function Cs(){qe(()=>{document.documentElement.dataset.density=gl()}),ke(()=>{delete document.documentElement.dataset.density})}var pl="kickjs-devtools-fonts";function Es(){try{const e=JSON.parse(localStorage.getItem(pl)??"{}"),t=e&&typeof e=="object"?e:{};return{sans:typeof t.sans=="string"?t.sans:"",mono:typeof t.mono=="string"?t.mono:""}}catch{return{sans:"",mono:""}}}var[Gr,Ms]=P(Es()),Ts=Gr;function As(e,t){const r={...Gr(),[e]:t};Ms(r);try{localStorage.setItem(pl,JSON.stringify(r))}catch{}}function Os(e,t){const r=e.split(",").map(s=>s.replace(/["';{}\\]/g,"").trim()).filter(Boolean).map(s=>`"${s}"`);return r.length?`${r.join(", ")}, ${t}`:void 0}function Ls(){const e=document.documentElement,t={sans:getComputedStyle(e).getPropertyValue("--font-sans").trim()||"sans-serif",mono:getComputedStyle(e).getPropertyValue("--font-mono").trim()||"monospace"};qe(()=>{for(const r of["sans","mono"]){const s=Os(Gr()[r],t[r]);s?e.style.setProperty(`--font-${r}`,s):e.style.removeProperty(`--font-${r}`)}}),ke(()=>{e.style.removeProperty("--font-sans"),e.style.removeProperty("--font-mono")})}var[Rs,qs]=P("connecting"),[Is,xn]=P(null),[Ns,Ps]=P(!1),[Ds,Hs]=P(null),[Us,js]=P(null),[Bs,zs]=P(null),[Fs,Js]=P([]),[Ks,Vs]=P([]),[Gs,Ws]=P({enabled:!1,queues:[]}),[Ys,Qs]=P({enabled:!1}),[Xs,Zs]=P([]),se={connectionStatus:Rs,lastUpdate:Is,authRequired:Ns,authError:Ds,health:Us,metrics:Bs,routes:Fs,container:Ks,queues:Gs,ws:Ys,cron:Xs},me={setConnectionStatus:qs,setLastUpdate:xn,setAuthRequired:Ps,setAuthError:Hs,setHealth:js,setMetrics:zs,setRoutes:Js,setContainer:Vs,setQueues:Ws,setWs:Qs,setCron:Zs,touch(){xn(new Date)}};function nt(){return document.body.dataset.base??"/_debug"}var Wr="kickjs_devtools_token",ea=30,Dt=null;function Tt(){if(Dt)return Dt;const e=new URLSearchParams(location.search).get("token");if(e){Er(e);const r=new URL(location.href);return r.searchParams.delete("token"),history.replaceState({},"",r.toString()),e}const t=document.cookie.match(new RegExp(`${Wr}=([^;]+)`));return t?(Er(decodeURIComponent(t[1])),Dt):null}function Er(e){Dt=e,document.cookie=`${Wr}=${encodeURIComponent(e)}; path=${nt()}; max-age=${86400*ea}; SameSite=Lax`,ta()}function ta(){nt()!=="/"&&(document.cookie=`${Wr}=; path=/; max-age=0; SameSite=Lax`)}function Yr(e){const t=Tt();return t?`${e}${e.includes("?")?"&":"?"}token=${encodeURIComponent(t)}`:e}var Qr=class extends Error{constructor(){super("AUTH_REQUIRED"),this.name="AuthRequiredError"}};async function Te(e){const t=Yr(`${nt()}${e}`),r=await fetch(t,{headers:xl()});if(r.status===401||r.status===403)throw new Qr;if(!r.ok)throw new Error(`GET ${e} failed: ${r.status} ${r.statusText}`);return await r.json()}async function Vt(e){const t=await fetch(Yr(`${nt()}${e}`),{method:"POST",headers:xl()});if(t.status===401||t.status===403)throw new Qr;if(!t.ok){const r=await t.json().catch(()=>null);throw new Error(r?.error??`${t.status} ${t.statusText}`)}return t}function xl(){const e=Tt();return e?{"x-devtools-token":e}:{}}var sr=e=>new URLSearchParams(Object.entries(e).flatMap(([t,r])=>r===void 0?[]:[[t,String(r)]])).toString(),ye={jobs:()=>Te("/jobs"),jobList:e=>Te(`/jobs/list?${sr(e)}`),job:e=>Te(`/jobs/job?${sr(e)}`),jobAction:async e=>await(await Vt(`/jobs/action?${sr(e)}`)).json(),requests:(e=0)=>Te(`/requests?since=${e}`),runtime:()=>Te("/runtime"),topology:()=>Te("/topology"),configOrigins:()=>Te("/config/origins"),metrics:()=>Te("/metrics"),source:(e,t)=>Te(`/source?${new URLSearchParams({controller:e,handler:t})}`),routeRegistry:()=>Te("/routes"),container:()=>Te("/container"),health:()=>Te("/health"),cron:()=>Te("/cron"),cronRun:e=>Vt(`/cron/run?name=${encodeURIComponent(e)}`),queues:()=>Te("/queues"),ws:()=>Te("/ws"),tabs:()=>Te("/tabs")};function bl(e,t,r){const s=Yr(`${nt()}${e}`),l=new EventSource(s);return l.addEventListener("message",a=>{try{t(JSON.parse(a.data))}catch(i){console.warn("SSE parse failed",i)}}),r&&l.addEventListener("error",r),()=>l.close()}var[bn,ra]=P([]),[na,la]=P([]);function sa(){const e=setInterval(()=>{const t=se.metrics();t&&(ra(r=>[...r,t.requests].slice(-61)),la(r=>[...r,t.serverErrors].slice(-61)))},1e3);return()=>clearInterval(e)}function ar(e){const t=[];for(let r=1;r<e.length;r++)t.push(Math.max(0,e[r]-e[r-1]));return t}function Mr(e,t){if(e.length===0)return;const r=e.toSorted((s,l)=>s-l);return r[Math.min(r.length-1,Math.max(0,Math.ceil(t/100*r.length)-1))]}function aa(e,t,r){return[...new Map([...e,...t].map(s=>[s.timestamp,s])).values()].toSorted((s,l)=>s.timestamp-l.timestamp).slice(-r)}var oa=d("<svg class=sparkline preserveAspectRatio=none aria-hidden=true><path fill=none stroke-width=1.5 stroke-linejoin=round stroke-linecap=round>"),ia=e=>{const t=()=>e.width??200,s=ce(()=>{const l=e.values;if(l.length<2)return"";const a=Math.min(...l),i=Math.max(...l)-a||1,c=t()/(l.length-1),u=g=>40-(g-a)/i*36-2;let f=`M0 ${u(l[0]).toFixed(2)}`;for(let g=1;g<l.length;g++)f+=` L${(g*c).toFixed(2)} ${u(l[g]).toFixed(2)}`;return f});return(()=>{var l=oa(),a=l.firstChild;return q(i=>{var c=`0 0 ${t()} 40`,u=s(),f=e.stroke??"var(--color-accent)";return c!==i.e&&F(l,"viewBox",i.e=c),u!==i.t&&F(a,"d",i.t=u),f!==i.a&&F(a,"stroke",i.a=f),i},{e:void 0,t:void 0,a:void 0}),l})()};function dt(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KiB`:e<1073741824?`${(e/1024/1024).toFixed(1)} MiB`:`${(e/1024/1024/1024).toFixed(2)} GiB`}function Se(e){return e<1?`${e.toFixed(2)} ms`:e<100?`${e.toFixed(1)} ms`:`${Math.round(e)} ms`}function Gt(e){const t=Math.floor(e);return t<60?`${t}s`:t<3600?`${Math.floor(t/60)}m ${t%60}s`:`${Math.floor(t/3600)}h ${Math.floor(t%3600/60)}m ${t%60}s`}function Wt(e){return`${Math.round(e*100)}%`}function Xe(e){const t=e.toUpperCase();return t==="GET"?"text-emerald-400":t==="POST"?"text-cyan-400":t==="PUT"||t==="PATCH"?"text-amber-400":t==="DELETE"?"text-red-400":"text-text-secondary"}function Ct(e){return`dt-pill dt-pill-${e>=500?"err":e>=400?"warn":e>=300?"redir":"ok"}`}function Xr(e){return`dt-tone dt-tone-${e==="controller"?"violet":e==="service"?"blue":e==="repository"?"teal":"gray"}`}function ut(e){return`dt-tone dt-tone-${{ok:"green",warn:"amber",err:"red",idle:"gray"}[e]}`}function $t(e,t=1){const r=e*t;return r>1e3?"text-red-500":r>500?"text-orange-500":r>200?"text-amber-500":""}function tr(e,t=Date.now()){const r=Math.max(0,Math.round((t-e)/1e3));return r<60?`${r}s ago`:r<3600?`${Math.floor(r/60)}m ago`:r<86400?`${Math.floor(r/3600)}h ago`:`${Math.floor(r/86400)}d ago`}function or(e){let t=0;for(const r of e)t=r.charCodeAt(0)+((t<<5)-t);return`hsl(${Math.abs(t)%12*30} 60% 50%)`}function ca(e,t=12){const r=e.indexOf("?"),[s,l]=r===-1?[e,""]:[e.slice(0,r),e.slice(r)];return s.split("/").map(a=>a.length>t&&/\d/.test(a)?`${a.slice(0,6)}…`:a).join("/")+l}var da=d('<span class=dt-tip tabindex=0><svg class=dt-tip-icon viewBox="0 0 24 24"aria-hidden=true><circle cx=12 cy=12 r=9 fill=none stroke=currentColor stroke-width=1.5></circle><path d="M12 8h.01M12 11v6"stroke=currentColor stroke-width=2 stroke-linecap=round fill=none></path></svg><span role=tooltip>'),ua={"heap.used":{short:"V8-allocated memory currently used by JavaScript objects.",detail:"Grows as your code allocates objects, shrinks after GC frees them. A consistently rising heap-used line on the sparkline is the textbook leak signature."},"heap.total":{short:"V8-allocated memory the JS heap is currently sized to use.",detail:"Larger than heap-used; V8 reserves headroom so allocations don't pause to grow the heap. Bumps up in 1-8 MiB jumps as the heap expands."},rss:{short:"Total memory resident in physical RAM for this Node process.",detail:'Includes the JS heap, native buffers, V8 internal structures, and code. Always larger than heap-used; the gap is "everything the OS sees" minus "JS objects".'},external:{short:"Memory used by C++ objects bound to JS (Buffers, native bindings)."},"array-buffers":{short:"Memory used by ArrayBuffer / SharedArrayBuffer instances."},"event-loop.p99":{short:"How late the event loop ran, at the 99th percentile — about 0 when idle.",detail:"Sustained values above ~50ms mean some synchronous operation is blocking the loop. Common culprits: large JSON.parse, sync crypto, blocking DB drivers."},gc:{short:"Garbage-collector activity since process start.",detail:"Total run count and cumulative pause time. Frequent GC with low reclaim ratio = leak; rare GC with healthy reclaim = good citizen."},"leak.risk":{short:"Heap-growth slope over the recent window — stable / warn / critical.",detail:"Bucketed from heap-growth in MB/min: <5 = ok, <20 = warn, ≥20 = critical. Critical sustained for >5 minutes is the moment to capture a heap snapshot."},"gc.reclaim":{short:"Average ratio of memory freed by each GC pass.",detail:"Trending toward zero means GC can't free anything — strong leak indicator. Healthy apps reclaim 20-60% on each major GC."},"heap.utilization":{short:"Fraction of V8's hard heap-size limit currently in use.",detail:"Approaching 1 means the process is close to OOM. Use --max-old-space-size to raise the limit if your workload is memory-bound."},requests:{short:"Total HTTP requests handled since process start."},"server-errors":{short:"5xx responses — server-side failures."},"client-errors":{short:"4xx responses — bad client input, missing routes, auth denials."},"error-rate":{short:"Server errors as a percentage of total requests.",detail:"Computed across the lifetime of the process. Spikes typically signal upstream dependency failures; sustained elevation = code bug."},uptime:{short:"How long this Node process has been running."},"latency.avg":{short:"Mean response time per route (sum of all calls / call count)."},"latency.p50":{short:"Median — half the requests complete faster than this."},"latency.p95":{short:"95% of requests complete within this time."},"latency.p99":{short:"99% of requests complete within this time. Outlier-sensitive."},"latency.max":{short:"Slowest single response observed since process start."},"resolve.count":{short:"Number of times this token was resolved from the DI container."},"resolve.duration":{short:"How long the container took to resolve this token (ms)."},"post-construct":{short:"@PostConstruct lifecycle status: done / failed / none.",detail:'A failed PostConstruct means the service registered but its async init threw. The token is left in a "registered" state; resolve() will throw the original error.'}},Ke=e=>{const t=()=>e.text??ua[e.metric??""]?.short??"",r=e.placement??"top";return(()=>{var s=da(),l=s.firstChild.nextSibling;return U(l,`dt-tip-pop dt-tip-pop-${r}`),n(l,t),q(()=>F(s,"aria-label",t())),s})()};we(["click"]);var $l="kickjs-devtools-tab",Zr={memory:"runtime",topology:"runtime",graph:"container"};function fa(){try{const e=localStorage.getItem($l)??"overview";return Zr[e]??e}catch{return"overview"}}var[ha,va]=P(fa());function ft(e){const t=Zr[e]??e;va(t);try{localStorage.setItem($l,t)}catch{}}var ga=d('<svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=1.8 stroke-linecap=round stroke-linejoin=round aria-hidden=true><path>'),$n={overview:"M3 3h7v7H3zM14 3h7v7h-7zM3 14h7v7H3zM14 14h7v7h-7z",runtime:"M22 12h-4l-3 9L9 3l-3 9H2",memory:"M9 3v2M15 3v2M9 19v2M15 19v2M3 9h2M3 15h2M19 9h2M19 15h2M7 5h10a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2z",topology:"M12 2l10 5-10 5L2 7zM2 17l10 5 10-5M2 12l10 5 10-5",metrics:"M3 3v18h18M7 16v-4M12 16V8M17 16v-7",routes:"M6 3v12M18 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM6 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM18 9a9 9 0 0 1-9 9",requests:"M7 7h13l-4-4M17 17H4l4 4",container:"M21 8l-9-5-9 5v8l9 5 9-5zM3 8l9 5 9-5M12 13v8",graph:"M18 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM6 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM18 22a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM8.6 13.5l6.8 4M15.4 6.5l-6.8 4",database:"M12 3c4.97 0 9 1.34 9 3s-4.03 3-9 3-9-1.34-9-3 4.03-3 9-3zM21 12c0 1.66-4 3-9 3s-9-1.34-9-3M3 6v12c0 1.66 4 3 9 3s9-1.34 9-3V6",sockets:"M5 12.55a11 11 0 0 1 14.08 0M1.42 9a16 16 0 0 1 21.16 0M8.53 16.11a6 6 0 0 1 6.95 0M12 20h.01",queues:"M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01",activity:"M12 8v4l3 3M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18z",config:"M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6",custom:"M4 4h6v6H4zM14 4h6v6h-6zM4 14h6v6H4zM17 14v6M14 17h6",expand:"M9 18l6-6-6-6",collapse:"M15 18l-6-6 6-6",search:"M11 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16zM21 21l-4.35-4.35",action:"M13 2L3 14h9l-1 8 10-12h-9z",editor:"M16 18l6-6-6-6M8 6l-6 6 6 6",lock:"M5 11h14v10H5zM8 11V7a4 4 0 0 1 8 0v4",unlock:"M5 11h14v10H5zM8 11V7a4 4 0 0 1 7.75-1.4",eye:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8S1 12 1 12zM12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z",maximize:"M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"},Je=e=>(()=>{var t=ga(),r=t.firstChild;return q(s=>{var l=e.size??18,a=e.size??18,i=e.class,c=$n[e.name]??$n.custom;return l!==s.e&&F(t,"width",s.e=l),a!==s.t&&F(t,"height",s.t=a),i!==s.a&&F(t,"class",s.a=i),c!==s.o&&F(r,"d",s.o=c),s},{e:void 0,t:void 0,a:void 0,o:void 0}),t})();function ma(e,t,r){const s=[...e];return t<0||t>=s.length||r<0||r>=s.length||s.splice(r,0,...s.splice(t,1)),s}var pa={publicFlag:"auth.public",csrfCookie:"_csrf",csrfHeader:"x-csrf-token",openApiUrl:"/openapi.json",editorUrl:"vscode://file{file}:{line}"};function Tr(e){return(Array.isArray(e)?e:e.split(",")).map(t=>t.trim()).filter(Boolean)}function yl(e,t,r,s){const l=s.toLowerCase();return t.defaultHeaders?.[l]??!(l==="authorization"&&wl(e,r))}function wl(e,t){return Tr(t.publicFlag).some(r=>e.flags?.[r]!==void 0)}var xa=new Set(["POST","PUT","PATCH","DELETE"]),ba=new Set(["GET","HEAD","OPTIONS"]),$a=e=>["DELETE","PUT","PATCH"].includes(e.toUpperCase()),Ar=e=>xa.has(e.toUpperCase());function Ht(e){const t=[...e.matchAll(/:([A-Za-z_$][\w$]*)/g)].map(r=>r[1]);return[...new Set(t)]}function ya(e,t){const r=[],s=e.split(/(:[A-Za-z_$][\w$]*)/).map(i=>i.startsWith(":")?(r.push(i.slice(1)),"([^/]+)"):i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).join(""),l=new RegExp(`^${s}/?$`).exec(t);if(!l)return{};const a=i=>{try{return decodeURIComponent(i)}catch{return i}};return Object.fromEntries(r.map((i,c)=>[i,a(l[c+1])]))}function _l(e,t,r,s){const l=t.replace(/:([A-Za-z_$][\w$]*)/g,(c,u)=>r[u]?encodeURIComponent(r[u]):c),a=new URLSearchParams;for(const c of s)c.enabled&&c.key&&a.append(c.key,c.value);const i=a.toString();return`${e}${l}${i?`?${i}`:""}`}function wa(e,t){for(const r of e.split(";")){const s=r.indexOf("=");if(!(s<0)&&r.slice(0,s).trim()===t)return decodeURIComponent(r.slice(s+1).trim())}}var kl=/\{\{\s*([\w.-]+)\s*\}\}/g;function Ut(e,t){return e.replace(kl,(r,s)=>Object.prototype.hasOwnProperty.call(t,s)?t[s]:r)}function en(e){const t={};for(const r of e)r.enabled&&r.key&&(t[r.key]=r.value);return t}function yn(e){const t=typeof e.body=="string"?e.body:"",r=(e.form??[]).flatMap(l=>[l.name,l.value??""]),s=[e.url,...Object.entries(e.headers).flat(),t,...r].join(`
2
+ `);return[...new Set([...s.matchAll(kl)].map(l=>l[1]))]}function _a(e,t){const r=t.match(/[^.[\]]+/g)??[];let s=e;for(const l of r){if(s===null||typeof s!="object")return;s=s[l]}if(s!==void 0)return typeof s=="string"?s:JSON.stringify(s)}function ka(e){const{route:t,settings:r,origin:s,cookies:l}=e,a=e.variables??{},i=m=>Ut(m,a),c=m=>m.map(S=>({...S,key:i(S.key),value:i(S.value)})),u=Da(e.inputs,a,e.mappings??[]),f={params:Object.fromEntries(Object.entries(u.params).map(([m,S])=>[m,i(S)])),query:c(u.query),headers:c(e.inputs.headers),body:i(e.inputs.body),bodyMode:e.inputs.bodyMode,form:(e.inputs.form??[]).map(m=>({...m,key:i(m.key),value:i(m.value)}))},g=c(e.defaults.filter(m=>yl(t,e.inputs,r,m.key))),p=t.method.toUpperCase(),x={},v=m=>{for(const S of m)if(!(!S.enabled||!S.key)){for(const $ of Object.keys(x))$.toLowerCase()===S.key.toLowerCase()&&delete x[$];x[S.key]=S.value}};v(g),v(f.headers);const _=m=>Object.keys(x).some(S=>S.toLowerCase()===m);if(!ba.has(p)&&!_(r.csrfHeader.toLowerCase())){const m=wa(l,r.csrfCookie);m&&(x[r.csrfHeader]=m)}const N=_l(s,t.path,f.params,f.query);if(Ar(p)&&f.bodyMode==="form"){const{body:m,form:S}=Ca(f.form??[]);for(const $ of Object.keys(x))$.toLowerCase()==="content-type"&&delete x[$];return{method:p,url:N,headers:x,body:m,form:S}}const b=Ar(p)&&f.body.trim()?f.body:void 0;return b!==void 0&&!_("content-type")&&/^\s*[[{]/.test(b)&&(x["Content-Type"]="application/json"),{method:p,url:N,headers:x,...b!==void 0?{body:b}:{}}}var Sa="<file>";function Ca(e){const t=new FormData,r=[];for(const s of e)if(!(!s.enabled||!s.key))if(s.type==="file"){for(const l of s.files??[])t.append(s.key,l,l.name),r.push({name:s.key,fileName:l.name});s.files?.length||r.push({name:s.key,fileName:Sa})}else t.append(s.key,s.value),r.push({name:s.key,value:s.value});return{body:t,form:r}}var Lt=e=>`'${e.replace(/'/g,"'\\''")}'`;function Ea(e){const t=[`curl -X ${e.method} ${Lt(e.url)}`];for(const[r,s]of Object.entries(e.headers))t.push(`-H ${Lt(`${r}: ${s}`)}`);if(e.form)for(const r of e.form)t.push(`-F ${Lt(r.fileName!==void 0?`${r.name}=@${r.fileName}`:`${r.name}=${r.value??""}`)}`);else typeof e.body=="string"&&t.push(`--data-raw ${Lt(e.body)}`);return t.join(` \\
3
3
  `)}function Ma(e){const t={method:e.method};if(Object.keys(e.headers).length&&(t.headers=e.headers),e.form){const r=["const form = new FormData()"];for(const l of e.form)r.push(l.fileName!==void 0?`form.append(${JSON.stringify(l.name)}, fileInput.files[0]) // ${l.fileName}`:`form.append(${JSON.stringify(l.name)}, ${JSON.stringify(l.value??"")})`);const s=JSON.stringify(t,null,2).replace(/\n}$/,`,
4
4
  "body": form
5
5
  }`);return`${r.join(`
6
6
  `)}
7
7
 
8
- await fetch(${JSON.stringify(e.url)}, ${s})`}return typeof e.body=="string"&&(t.body=e.body),`await fetch(${JSON.stringify(e.url)}, ${JSON.stringify(t,null,2)})`}function wn(e,t){if(!t?.includes("json"))return e;try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}var at=e=>`kickjs-devtools:runner:${e.method.toUpperCase()} ${e.path}`,Sl=e=>{const t=e.upload&&e.upload.mode!=="none"?e.upload:void 0;return{params:Object.fromEntries(Ht(e.path).map(r=>[r,""])),query:[],headers:[],body:"",bodyMode:t?"form":"raw",form:t?[{key:t.fieldName??"file",value:"",enabled:!0,type:"file"}]:[]}};function Cl(e){return{...e,form:e.form?.map(({files:t,...r})=>r)}}function Ta(e,t,r=30){return[{...t,inputs:Cl(t.inputs)},...e].slice(0,r)}var Aa=e=>_l("",e.path,e.inputs.params,e.inputs.query);function Oa(e,t){for(const[r,s]of Object.entries(e?.paths??{}))if(r.replace(/\{([^}]+)\}/g,":$1")===t.path)return s?.[t.method.toLowerCase()]}function El(e,t){const r=t?.$ref;if(typeof r!="string"||!r.startsWith("#/"))return t;let s=e;for(const l of r.slice(2).split("/"))s=s?.[l];return s}function ot(e,t,r=0){const s=El(e,t);if(!s||r>6)return null;if(s.example!==void 0)return s.example;if(s.default!==void 0)return s.default;if(Array.isArray(s.enum)&&s.enum.length)return s.enum[0];const l=s.oneOf?.[0]??s.anyOf?.[0];if(l)return ot(e,l,r+1);if(s.allOf)return Object.assign({},...s.allOf.map(a=>ot(e,a,r+1)));switch((Array.isArray(s.type)?s.type.find(a=>a!=="null"):s.type)??(s.properties?"object":void 0)){case"object":return Object.fromEntries(Object.entries(s.properties??{}).map(([a,i])=>[a,ot(e,i,r+1)]));case"array":return s.items?[ot(e,s.items,r+1)]:[];case"string":return"";case"integer":case"number":return 0;case"boolean":return!1;default:return null}}function La(e,t){const r=Oa(e,t);if(!r)return;const s={},l=[];for(const i of r.parameters??[]){const c=El(e,i);c?.name&&(c.in==="path"&&c.description&&(s[c.name]=c.description),c.in==="query"&&l.push({name:c.name,required:!!c.required,description:c.description}))}const a=r.requestBody?.content?.["application/json"]?.schema;return{summary:r.summary??r.description,params:s,query:l,...a?{body:JSON.stringify(ot(e,a),null,2)}:{}}}function Ra(e){const{body:t,query:r,params:s}=e.schemas??{};if(!t&&!r&&!s)return;const l=c=>Object.fromEntries(Object.entries(c?.properties??{}).flatMap(([u,h])=>h?.description?[[u,String(h.description)]]:[])),a=new Set(Array.isArray(r?.required)?r.required:[]),i=l(r);return{params:l(s),query:Object.keys(r?.properties??{}).map(c=>({name:c,required:a.has(c),...i[c]?{description:i[c]}:{}})),...t?{body:JSON.stringify(ot(t,t),null,2)}:{}}}function _n(e,t){const r=new Set(e.query.map(a=>a.key)),s=[...e.query,...t.query.filter(a=>!r.has(a.name)).map(a=>({key:a.name,value:"",enabled:a.required}))],l=e.body.trim()||!t.body?e.body:t.body;return{...e,query:s,body:l}}function qa(e,t,r){const s=t.replace(/\\/g,"/").replace(/^(?=[A-Za-z]:)/,"/");return e.replace("{file}",encodeURI(s)).replace("{line}",String(r))}var Ia=["dev","stage","prod"],pt=e=>`${e.method.toUpperCase()} ${e.path}`,ir=e=>Array.isArray(e)?e.filter(t=>!!t&&typeof t=="object"&&typeof t.key=="string"&&typeof t.value=="string"&&typeof t.enabled=="boolean"):[];function Ml(e,t){const r=e,s=(Array.isArray(r?.environments)?r.environments:[]).filter(i=>i&&typeof i.id=="string"&&typeof i.name=="string").map(i=>({id:i.id,name:i.name,headers:ir(i.headers),variables:ir(i.variables),mappings:ir(i.mappings)}));if(s.length===0)return{environments:[{id:"dev",name:"dev",...t,mappings:[]}],activeId:"dev",pins:{}};const l=new Set(s.map(i=>i.id)),a=Object.fromEntries(Object.entries(r?.pins??{}).filter(([,i])=>typeof i=="string"&&l.has(i)));return{environments:s,activeId:l.has(r?.activeId)?r.activeId:s[0].id,pins:a}}function Na(e,t){const r=s=>e.environments.find(l=>l.id===s);return r(e.pins[pt(t)])??r(e.activeId)??e.environments[0]}function Pa(e){const t=new Set(e.environments.map(l=>l.name)),r=Ia.find(l=>!t.has(l));if(r)return r;let s=e.environments.length+1;for(;t.has(`env ${s}`);)s++;return`env ${s}`}function Da(e,t,r){const s=en(r),l=a=>{const i=s[a]??a;return Object.prototype.hasOwnProperty.call(t,i)?t[i]:void 0};return{params:Object.fromEntries(Object.entries(e.params).map(([a,i])=>[a,i||(l(a)??"")])),query:e.query.map(a=>a.enabled&&a.key&&!a.value&&l(a.key)!==void 0?{...a,value:l(a.key)}:a)}}function Tl(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch{return}}var Ha=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">Select a route to try it'),Ua=d('<p class="text-sm text-text-secondary mt-1">'),ja=d('<p class="text-xs text-amber-400 mt-2">No value for <!> in <strong></strong> — <button type=button class=underline>add it to the environment</button>.'),Ba=d('<ol class="flex flex-col gap-1 text-xs">'),za=d('<p class="text-xs text-text-muted mb-2">Set this up before you send. With both filled in, every 2xx response from this route copies the value at the JSON path into that variable of the environment it was sent with — log in once and routes using <code>{{token}}</code> pick it up. New variables start masked. Saved for this route only.'),Fa=d('<div class="flex flex-col sm:flex-row sm:items-center gap-2 text-xs"><input aria-label="JSON path"placeholder="JSON path, e.g. data.accessToken"><input aria-label="Variable name"placeholder="variable, e.g. token"><button type=button>Save now'),Ja=d('<p class="text-xs text-text-muted mt-1"role=status>'),Ka=d('<p class="text-xs text-text-muted mb-3">These apply to every route, not just this one, and save as you type in this browser (kept after the tab closes).'),Va=d(`<div class="grid grid-cols-1 sm:grid-cols-2 gap-3 mt-4"><label class="flex flex-col gap-1 text-xs text-text-muted">Public route flags (comma-separated)<span class=text-[0.7rem]>On routes carrying one of these flags (e.g. <code>auth.public</code> from your auth setup), the environment's default Authorization header starts unticked — a login route needs no token — and is sent only if you tick it under the route's Headers. Names your app uses; the runner adds no flags to the request.</span><input>`),Ga=d('<span class="text-xs text-text-muted"role=status>'),Wa=d('<div class="flex items-center gap-1 mb-2"><button type=button>Copy'),Ya=d('<pre class="text-xs font-mono bg-surface-2 border border-border rounded-lg p-3 overflow-x-auto whitespace-pre-wrap break-all select-text">'),Qa=d('<div class="text-sm text-red-400 bg-red-500/10 border border-red-500/30 rounded-lg p-3">Request failed: '),Xa=d('<ul class="flex flex-col gap-1">'),Za=d("<button type=button>Clear history"),eo=d('<div class="h-full flex flex-col min-h-0"><section class="h-full bg-surface-1 flex flex-col min-h-0"><header class="px-5 py-4 border-b border-border"><div class="flex items-start justify-between gap-4"><div class=min-w-0><div class="flex items-center gap-2"><span></span><h2 class="text-base font-semibold font-mono text-text-body break-all"></h2></div><p class="text-xs text-text-muted mt-1"><button type=button class="underline decoration-dotted hover:text-kick-500"title="Open in editor">.</button></p></div><button type=button class="text-text-muted hover:text-text-strong p-1 text-lg leading-none"aria-label=Close>✕</button></div><div class="flex items-stretch gap-2 mt-3"><div class="flex-1 min-w-0 flex items-center gap-2 font-mono text-xs bg-surface-2 border border-border rounded-lg px-3 py-2 text-text-secondary"><span></span><span class=break-all></span></div><button type=button></button></div><div class="flex items-center gap-2 mt-2 text-xs text-text-muted"><label class="flex items-center gap-2">Environment<select class="bg-surface-2 border border-border-strong rounded-lg px-2 py-1 text-xs text-text-body"><option value>Active (<!>)</option></select></label><button type=button class="underline hover:text-kick-500">Manage…</button></div></header><div class="flex-1 overflow-y-auto px-5 py-3 flex flex-col gap-2">'),to=d("<option>Pinned: "),ro=d('<span class="rounded bg-kick-500/15 px-1.5 text-[0.66rem] text-kick-500"title="Runs before request validation">before validation'),no=d("<span class=text-text-muted>needs "),lo=d("<span class=text-text-muted>overrides "),so=d('<span class="basis-full pl-7 font-mono text-[0.66rem] text-text-muted break-all">'),ao=d('<li class="flex flex-wrap items-baseline gap-x-2 gap-y-0.5 border-b border-border/40 py-1 last:border-0"><span class="w-5 shrink-0 text-right text-text-muted">.</span><span class="font-mono font-semibold text-text-body"></span><span class="rounded bg-surface-2 px-1.5 text-[0.66rem] text-text-muted">'),tn=d('<div class="flex flex-col gap-2">'),oo=d('<ul class="text-xs text-text-muted mt-2 flex flex-col gap-0.5">'),io=d('<div class="mt-3 text-xs"><p class="text-text-muted mb-1">From <strong></strong> — untick to leave one off this route only:'),co=d('<span class="text-xs text-text-muted ml-2">@FileUpload: field <code>'),uo=d('<div class="flex items-center gap-1 mb-2">'),ho=d(`<p class="text-xs text-text-muted mt-2">Sent as multipart/form-data. Picked files aren't saved — pick them again after reopening.`),fo=d('<label class="flex items-center gap-3 text-sm"><span class="font-mono text-text-secondary w-28 shrink-0">:</span><input>'),vo=d("<li><code>"),go=d('<span class="font-sans text-text-muted">(off by default: public route)'),mo=d('<label class="flex items-center gap-2 font-mono text-text-secondary"><input type=checkbox><span>: '),kn=d("<button type=button>"),po=d('<div class="group relative"><textarea placeholder="{ &quot;name&quot;: &quot;value&quot; }">'),xo=d('<div class="flex flex-wrap items-center gap-2"><button type=button>Fill empty inputs from OpenAPI</button><span class="text-[0.7rem] text-text-muted">This route only: adds the query params the spec lists and an example body if the body is empty. Never overwrites what you typed.'),bo=d('<label class="flex flex-col gap-1 text-xs text-text-muted"><span class=text-[0.7rem]></span><input>'),$o=d('<details class="text-xs mb-2"><summary class="cursor-pointer text-text-secondary">Response headers (<!>)</summary><table class=mt-2><tbody>'),yo=d('<div class="group relative"><pre class="text-xs font-mono bg-surface-2 border border-border rounded-lg p-3 overflow-x-auto max-h-[50vh] whitespace-pre-wrap break-all">'),wo=d('<p class="mt-1 text-xs text-text-muted">Body truncated to <!> characters.'),_o=d('<span class="flex items-center gap-3">Response<span> </span><span class="text-text-muted text-xs font-normal"> ms'),ko=d('<tr><td class="font-mono text-text-secondary pr-4"></td><td class="font-mono break-all">'),So=d('<p class="text-xs text-text-muted">Nothing sent yet.'),Co=d('<li><button type=button class="w-full flex items-center gap-2 text-xs text-left rounded px-2 py-1 hover:bg-surface-2"title="Open with these inputs"><span></span><span class="font-mono truncate flex-1"></span><span></span><span class="text-text-muted w-16 text-right"> ms</span><span class="text-text-muted w-16 text-right">'),Eo=d('<span class="text-xs font-normal text-text-muted">(<!>)'),Mo=d('<details class="border border-border rounded-lg bg-surface-1 group"><summary class="cursor-pointer select-none px-3 py-2 text-sm font-semibold text-text-body flex items-center gap-2"><span class="text-text-muted transition-transform group-open:rotate-90">▸</span></summary><div class="px-3 pb-3">'),To=d("<label><input type=file class=sr-only>"),Ao=d('<div class="flex items-center gap-2"><input type=checkbox aria-label=Enabled><select aria-label="Field type"><option value=text>Text</option><option value=file>File</option></select><input placeholder=name><button type=button aria-label="Remove field"title="Remove field">✕'),Oo=d("<input placeholder=value>"),Lo=d('<button type=button class="shrink-0 p-1 text-text-muted hover:text-text-body">'),Ro=d("<textarea>"),qo=d('<p class="text-xs text-text-muted">Masked — show it to read or edit.'),Io=d('<div><div class="flex items-center gap-2"><button type=button data-handle title="Drag, or ↑ / ↓, to reorder">⠿</button><input type=checkbox aria-label=Enabled><input><input autocomplete=off><div><button type=button class="shrink-0 p-1 text-text-muted hover:text-text-body"></button><button type=button class="shrink-0 p-1 text-text-muted hover:text-text-body"aria-label="Edit the whole value"title="Edit the whole value"></button><button type=button class="shrink-0 p-1 text-text-muted hover:text-text-body"aria-label="Remove row"title="Remove row">✕'),No=d(`<div class="fixed inset-0 z-70 flex justify-end bg-black/45"><section role=dialog aria-modal=true aria-label=Environments class="h-full w-full max-w-2xl bg-surface-1 border-l border-border flex flex-col"><header class="px-5 py-4 border-b border-border flex items-start justify-between gap-4"><div><h2 class="text-base font-semibold text-text-body">Environments</h2><p class="text-xs text-text-muted mt-1">What requests carry — default headers, <code>{{variables}}</code> and param mappings. One is active; a route can be pinned to another from its runner.</p><p class="text-xs text-text-muted mt-1">Changes save as you type — there is no Save button. Where they're kept depends on <strong class="font-semibold text-text-secondary">Remember on this browser</strong> below.</p></div><button type=button class="text-text-muted hover:text-text-strong p-1 text-lg leading-none"aria-label=Close>✕</button></header><div class="flex-1 overflow-y-auto px-5 py-4 flex flex-col gap-4"><label class="flex items-start gap-2 text-sm"><input type=checkbox class=mt-1><span>Remember on this browser<span class="block text-xs text-text-muted"></span></span></label><div class="flex flex-wrap items-center gap-1"role=tablist aria-label=Environment><button type=button>+ Add</button></div><div class="flex flex-wrap items-end gap-2"><label class="flex flex-col gap-1 text-xs text-text-muted grow">Name<input></label><button type=button></button><button type=button>Duplicate</button><button type=button>Delete</button></div><div><h3 class="text-xs font-semibold text-text-secondary mb-1">Default headers</h3><p class="text-xs text-text-muted mb-2">Sent with every route using this environment. A route can untick any of them under its own Headers; on routes carrying a public flag, Authorization starts unticked.</p></div><div><h3 class="text-xs font-semibold text-text-secondary mb-1">Variables</h3><p class="text-xs text-text-muted mb-2"><code>{{name}}</code> in any param, query, header or body value — e.g. <code>Authorization: Bearer {{token}}</code>. A variable named like a path or query param also fills it when it's left empty.</p><p class="text-xs text-text-muted mb-2">Type values here, or let a route fill one: a route's <strong>Save to variable</strong> copies a value from its response (say, the token a login returns) into this environment after every successful send. New variables it adds start masked.</p></div><div><h3 class="text-xs font-semibold text-text-secondary mb-1">Param mappings</h3><p class="text-xs text-text-muted mb-2">For names that differ: an empty <code>:tenantId</code> takes the variable <code>orgId</code>. Typed values always win.`),Po=d("<button type=button role=tab>"),Do=d('<div class="absolute top-2 right-2 flex gap-1 transition-opacity sm:opacity-0 sm:group-hover:opacity-100 sm:focus-within:opacity-100">'),Ho=d('<button type=button class="px-2 py-0.5 text-[0.68rem] font-semibold rounded-md border bg-surface-1 text-text-secondary border-border-strong hover:text-text-body"title="Pretty-print the JSON body">'),Uo=d('<button type=button class="px-2 py-0.5 text-[0.68rem] font-semibold rounded-md border bg-surface-1 text-text-secondary border-border-strong hover:text-text-body">'),Or="kickjs-devtools:runner:defaults",Lr="kickjs-devtools:runner:variables",jt="kickjs-devtools:runner:environments",Sn="kickjs-devtools:runner:settings",Al="kickjs-devtools:runner:remember",Cn="kickjs-devtools:runner:history",cr=2e5,[je,Rr]=P(null),ft=0,xt=null,[Ol,En]=P({});function jo(e){e in De(Ol)||(En(t=>({...t,[e]:void 0})),fetch(e,{credentials:"same-origin"}).then(t=>t.ok?t.json():null).catch(()=>null).then(t=>En(r=>({...r,[e]:t}))))}var[Bo,zo]=P(0);function dr(){const e=()=>Ll()?localStorage:sessionStorage,t=Ml(yt(e,jt,null),{headers:Yt(e,Or),variables:Yt(e,Lr)}),r=t.environments.find(s=>s.id===t.activeId)??t.environments[0];return en(r.variables)}function rr(e,t){if(t){const r=yt(()=>localStorage,at(e),Sl(e));xt={...r,params:{...r.params,...t}}}Rr(e),zo(r=>r+1),ht("routes")}function yt(e,t,r){try{const s=e().getItem(t);return s?{...r,...JSON.parse(s)}:r}catch{return r}}function Yt(e,t){try{const r=JSON.parse(e().getItem(t)??"[]");return Array.isArray(r)?r:[]}catch{return[]}}function ur(e,t){try{e().removeItem(t)}catch{}}function Ll(){try{return localStorage.getItem(Al)==="true"}catch{return!1}}function vt(e,t,r){try{e().setItem(t,JSON.stringify(r))}catch{}}var Mn=e=>e.filter(t=>t.enabled&&t.key).length,Fo=()=>{const[e,t]=P(null),[r,s]=P(Ll()),l=()=>r()?localStorage:sessionStorage,a=()=>r()?sessionStorage:localStorage,[i,c]=P(Ml(yt(l,jt,null),{headers:Yt(l,Or),variables:Yt(l,Lr)})),[u,h]=P(!1),g=ce(()=>{const J=je();return J?Na(i(),J):i().environments[0]}),p=(J,de)=>c(ge=>({...ge,environments:ge.environments.map(Ce=>Ce.id===J?{...Ce,...de}:Ce)})),x=()=>e()?.capture??{path:"",name:""},v=J=>B({capture:J}),[_,N]=P(null),[$,m]=P(yt(()=>localStorage,Sn,pa)),[S,b]=P(!1),[f,w]=P(!1),[C,I]=P(null),[H,D]=P(null),[E,T]=P(null),[O,j]=P("curl"),[k,A]=P((()=>{try{const J=JSON.parse(localStorage.getItem(Cn)??"[]");return Array.isArray(J)?J:[]}catch{return[]}})()),[W,V]=P(null),[z,L]=P(!1),ie=ce(()=>{const J=je();if(!J)return;const de=Ol()[$().openApiUrl];return(de?La(de,J):void 0)??Ra(J)});let R=null;qe(()=>{const J=je();if(Bo(),ft++,!J)return;let de=!1;try{de=localStorage.getItem(at(J))===null}catch{}const ge=xt??yt(()=>localStorage,at(J),Sl(J));xt=null;const Ce=Object.fromEntries(Ht(J.path).map(Re=>[Re,ge.params[Re]??""]));R=at(J),t({...ge,params:Ce}),L(de),N(null),V(null),I(null),D(null),b(!1),w(!1)}),qe(()=>{const J=je(),de=e();J&&de&&R===at(J)&&vt(()=>localStorage,at(J),Cl(de))}),qe(()=>{vt(l,jt,i()),ur(a,jt);for(const J of[l,a])ur(J,Or),ur(J,Lr);vt(()=>localStorage,Al,r())}),qe(()=>vt(()=>localStorage,Sn,$())),qe(()=>vt(()=>localStorage,Cn,k())),qe(()=>{je()&&jo($().openApiUrl)}),qe(()=>{const J=ie();!J||!z()||(L(!1),t(de=>de&&_n(de,J)))});const M=ce(()=>{const J=je(),de=e();return!J||!de?null:ka({route:J,inputs:de,defaults:g().headers,variables:en(g().variables),mappings:g().mappings,settings:$(),origin:window.location.origin,cookies:document.cookie})}),Z=()=>Rr(null),B=J=>{b(!1),t(de=>de&&{...de,...J})};async function K(){const J=M();if(!J)return;if($a(J.method)&&!S()){b(!0);return}b(!1),w(!0),D(null);const de=performance.now(),ge=ft,Ce=je(),Re=e(),ze=g().id,He=be=>A(Ne=>Ta(Ne,{at:Date.now(),method:Ce.method.toUpperCase(),path:Ce.path,inputs:Re,ms:Math.round(performance.now()-de),...be}));try{const be=await fetch(J.url,{method:J.method,headers:J.headers,body:J.body,credentials:"same-origin"}),Ne=await be.text();if(He({status:be.status}),ge!==ft)return;I({status:be.status,statusText:be.statusText,ms:Math.round(performance.now()-de),headers:[...be.headers.entries()],raw:Ne,body:wn(Ne.slice(0,cr),be.headers.get("content-type")),truncated:Ne.length>cr}),be.ok&&Re.capture&&te(Ne,Re.capture,ze)}catch(be){if(He({error:be instanceof Error?be.message:String(be)}),ge!==ft)return;I(null),D(be instanceof Error?be.message:String(be))}finally{ge===ft&&w(!1)}}const Q=ce(()=>{const J=M();return J?O()==="curl"?Ea(J):Ma(J):""});async function ne(){try{await navigator.clipboard.writeText(Q()),T("Copied")}catch{T("Copy failed — select the text instead")}setTimeout(()=>T(null),1500)}function ue(){const J=C();J&&te(J.raw,x(),g().id)}function te(J,de,ge){const Ce=de.path,Re=de.name;if(!Ce.trim()||!Re.trim())return;let ze;try{ze=JSON.parse(J)}catch{N("The response is not JSON");return}const He=_a(ze,Ce.trim());if(He===void 0){N(`Nothing at "${Ce.trim()}"`);return}const be=Re.trim(),Ne=i().environments.find(Ue=>Ue.id===ge);if(!Ne)return;const tt=Ne.variables;p(Ne.id,{variables:tt.some(Ue=>Ue.key===be)?tt.map(Ue=>Ue.key===be?{...Ue,value:He,enabled:!0}:Ue):[...tt,{key:be,value:He,enabled:!0,secret:!0}]}),N(`Saved {{${be}}} in ${Ne.name}`)}function fe(J){const de=se.routes().find(ge=>ge.method.toUpperCase()===J.method&&ge.path===J.path);de&&(xt=J.inputs,de===je()?(xt=null,B(J.inputs)):Rr(de))}async function Oe(){const J=je();if(J){V(null);try{const de=await ye.source(J.controller,J.handler);window.location.href=qa($().editorUrl,de.file,de.line),V(`${de.relative}:${de.line}`)}catch{V("Source not found under src/")}}}const Le=()=>{const J=je();return J?wl(J,$()):!1};return o(y,{get when(){return je()},get fallback(){return Ha()},children:J=>(()=>{var de=eo(),ge=de.firstChild,Ce=ge.firstChild,Re=Ce.firstChild,ze=Re.firstChild,He=ze.firstChild,be=He.firstChild,Ne=be.nextSibling,tt=He.nextSibling,Ue=tt.firstChild,Zl=Ue.firstChild,es=ze.nextSibling,rn=Re.nextSibling,nn=rn.firstChild,nr=nn.firstChild,ts=nr.nextSibling,At=nn.nextSibling,ln=rn.nextSibling.firstChild,Ot=ln.firstChild.nextSibling,sn=Ot.firstChild,an=sn.firstChild.nextSibling;an.nextSibling;var rs=ln.nextSibling,Ye=Ce.nextSibling;return n(de,o(y,{get when(){return u()},get children(){return o(Ko,{get state(){return i()},setState:c,get selectedId(){return g().id},get remember(){return r()},setRemember:s,onClose:()=>h(!1)})}}),ge),n(be,()=>J().method.toUpperCase()),n(Ne,()=>J().path),Ue.$$click=Oe,n(Ue,()=>J().controller,Zl),n(Ue,()=>J().handler,null),n(tt,o(y,{get when(){return W()},get children(){return[" · ",ae(()=>W())]}}),null),n(tt,o(y,{get when(){return Le()},get children(){return[" ","· public route — default Authorization off unless ticked under Headers"]}}),null),n(ze,o(y,{get when(){return ie()?.summary},get children(){var G=Ua();return n(G,()=>ie().summary),G}}),null),es.$$click=Z,n(nr,()=>J().method.toUpperCase()),n(ts,()=>M()?.url),At.$$click=K,n(At,(()=>{var G=ae(()=>!!f());return()=>G()?"Sending…":ae(()=>!!S())()?`Confirm ${J().method.toUpperCase()}`:"Send"})()),Ot.addEventListener("change",G=>{const Y=G.currentTarget.value,ee=pt(J());c(le=>{const oe={...le.pins};return Y?oe[ee]=Y:delete oe[ee],{...le,pins:oe}})}),n(sn,()=>i().environments.find(G=>G.id===i().activeId)?.name,an),n(Ot,o(re,{get each(){return i().environments},children:G=>(()=>{var Y=to();return Y.firstChild,n(Y,()=>G.name,null),q(()=>Y.value=G.id),Y})()}),null),rs.$$click=()=>h(!0),n(Ce,o(y,{get when(){return ae(()=>!!M())()&&yn(M()).length>0},get children(){var G=ja(),Y=G.firstChild.nextSibling,ee=Y.nextSibling.nextSibling,le=ee.nextSibling.nextSibling;return n(G,()=>yn(M()).map(oe=>`{{${oe}}}`).join(", "),Y),n(ee,()=>g().name),le.$$click=()=>h(!0),G}}),null),n(Ye,o(y,{get when(){return J().contributors?.length},get children(){return o(Fe,{title:"Context contributors",get count(){return J().contributors.length},get children(){var G=Ba();return n(G,o(re,{get each(){return J().contributors},children:(Y,ee)=>(()=>{var le=ao(),oe=le.firstChild,he=oe.firstChild,pe=oe.nextSibling,Ee=pe.nextSibling;return n(oe,()=>ee()+1,he),n(pe,()=>Y.key),n(Ee,()=>Y.source),n(le,o(y,{get when(){return Y.beforeValidation},get children(){return ro()}}),null),n(le,o(y,{get when(){return Y.dependsOn.length},get children(){var _e=no();return _e.firstChild,n(_e,()=>Y.dependsOn.join(", "),null),_e}}),null),n(le,o(y,{get when(){return Y.overrides.length},get children(){var _e=lo();return _e.firstChild,n(_e,()=>Y.overrides.map(rt=>rt.source).join(", "),null),_e}}),null),n(le,o(y,{get when(){return Y.label},get children(){var _e=so();return n(_e,()=>Y.label),_e}}),null),le})()})),G}})}}),null),n(Ye,o(y,{get when(){return e()},children:G=>[o(y,{get when(){return Ht(J().path).length>0},get children(){return o(Fe,{title:"Path params",open:!0,get children(){var Y=tn();return n(Y,o(re,{get each(){return Ht(J().path)},children:ee=>(()=>{var le=fo(),oe=le.firstChild;oe.firstChild;var he=oe.nextSibling;return n(oe,ee,null),he.$$input=pe=>B({params:{...G().params,[ee]:pe.currentTarget.value}}),U(he,Pe),q(()=>F(he,"placeholder",ie()?.params[ee])),q(()=>he.value=G().params[ee]??""),le})()})),Y}})}}),o(Fe,{title:"Query",get count(){return Mn(G().query)},get children(){return[o(wt,{get rows(){return G().query},onChange:Y=>B({query:Y}),get context(){return pt(J())}}),o(y,{get when(){return ie()?.query.length},get children(){var Y=oo();return n(Y,o(re,{get each(){return ie().query},children:ee=>(()=>{var le=vo(),oe=le.firstChild;return n(oe,()=>ee.name),n(le,()=>ee.required?" (required)":"",null),n(le,(()=>{var he=ae(()=>!!ee.description);return()=>he()?` — ${ee.description}`:""})(),null),le})()})),Y}})]}}),o(Fe,{title:"Headers",get count(){return Mn(G().headers)},get children(){return[o(wt,{get rows(){return G().headers},onChange:Y=>B({headers:Y}),get context(){return pt(J())}}),o(y,{get when(){return g().headers.some(Y=>Y.enabled&&Y.key)},get children(){var Y=io(),ee=Y.firstChild.firstChild.nextSibling;return n(ee,()=>g().name),n(Y,o(re,{get each(){return g().headers.filter(le=>le.enabled&&le.key)},children:le=>{const oe=le.key.toLowerCase(),he=()=>yl(J(),G(),$(),oe);return(()=>{var pe=mo(),Ee=pe.firstChild,_e=Ee.nextSibling,rt=_e.firstChild;return Ee.addEventListener("change",Ge=>B({defaultHeaders:{...G().defaultHeaders,[oe]:Ge.currentTarget.checked}})),n(_e,()=>le.key,rt),n(_e,(()=>{var Ge=ae(()=>!!le.secret);return()=>Ge()?"••••••":le.value})(),null),n(pe,o(y,{get when(){return ae(()=>!!(oe==="authorization"&&Le()))()&&G().defaultHeaders?.[oe]===void 0},get children(){return go()}}),null),q(()=>U(_e,he()?"":"line-through text-text-muted")),q(()=>Ee.checked=he()),pe})()}}),null),Y}})]}}),o(y,{get when(){return Ar(J().method)},get children(){return o(Fe,{title:"Body",open:!0,get children(){return[(()=>{var Y=uo();return n(Y,o(re,{each:[["raw","Raw"],["form","Form data"]],children:([ee,le])=>(()=>{var oe=kn();return oe.$$click=()=>B({bodyMode:ee}),n(oe,le),q(he=>{var pe=(G().bodyMode??"raw")===ee,Ee=`px-3 py-1 text-xs font-semibold rounded-lg border transition-colors ${(G().bodyMode??"raw")===ee?"bg-kick-500/20 text-kick-500 border-kick-500/30":"bg-surface-2 text-text-secondary border-border-strong hover:text-text-body"}`;return pe!==he.e&&F(oe,"aria-pressed",he.e=pe),Ee!==he.t&&U(oe,he.t=Ee),he},{e:void 0,t:void 0}),oe})()}),null),n(Y,o(y,{get when(){return ae(()=>!!J().upload)()&&J().upload.mode!=="none"},get children(){var ee=co(),le=ee.firstChild.nextSibling;return n(le,()=>J().upload.fieldName??"file"),n(ee,(()=>{var oe=ae(()=>J().upload.mode==="array");return()=>oe()?`, up to ${J().upload.maxCount??10} files`:", one file"})(),null),ee}}),null),Y})(),o(y,{get when(){return G().bodyMode==="form"},get fallback(){return(()=>{var Y=po(),ee=Y.firstChild;return ee.$$input=le=>B({body:le.currentTarget.value}),U(ee,`${Pe} font-mono min-h-40`),n(Y,o(Tn,{get children(){return o(y,{get when(){return G().body.trim()},get children(){return[o(Go,{text:()=>G().body,onFormat:le=>B({body:le})}),o(An,{text:()=>G().body,label:"Copy body"})]}})}}),null),q(()=>ee.value=G().body),Y})()},get children(){return[o(Jo,{get rows(){return G().form??[]},get multiple(){return J().upload?.mode==="array"},onChange:Y=>B({form:Y})}),ho()]}})]}})}})]}),null),n(Ye,o(Fe,{title:"Save to variable",get open(){return!!(x().path||x().name)},get count(){return x().path&&x().name?1:void 0},get children(){return[za(),(()=>{var G=Fa(),Y=G.firstChild,ee=Y.nextSibling,le=ee.nextSibling;return Y.$$input=oe=>v({...x(),path:oe.currentTarget.value}),U(Y,Pe),ee.$$input=oe=>v({...x(),name:oe.currentTarget.value}),U(ee,Pe),le.$$click=ue,U(le,`${Qe} shrink-0`),q(oe=>{var he=!C(),pe=C()?"Copy from the response shown now":"Send the request first";return he!==oe.e&&(le.disabled=oe.e=he),pe!==oe.t&&F(le,"title",oe.t=pe),oe},{e:void 0,t:void 0}),q(()=>Y.value=x().path),q(()=>ee.value=x().name),G})(),o(y,{get when(){return _()},get children(){var G=Ja();return n(G,_),G}})]}}),null),n(Ye,o(Fe,{title:"Settings",get children(){return[Ka(),o(y,{get when(){return ie()},children:G=>(()=>{var Y=xo(),ee=Y.firstChild;return ee.$$click=()=>B(_n(e(),G())),U(ee,Qe),Y})()}),(()=>{var G=Va(),Y=G.firstChild.firstChild.nextSibling.nextSibling;return Y.addEventListener("change",ee=>m({...$(),publicFlag:Tr(ee.currentTarget.value)})),U(Y,Pe),n(G,o(re,{each:[["csrfCookie","CSRF cookie","For csrf() / csrfGuard(): on POST, PUT, PATCH and DELETE the runner reads this cookie…"],["csrfHeader","CSRF header","…and sends its value in this header, unless the route already sets it."],["openApiUrl","OpenAPI spec URL","Where the Swagger adapter serves the spec. A route with nothing saved starts from its examples."],["editorUrl","Editor link ({file}, {line})","What the handler link under the route's title opens; {file} and {line} are filled in."]],children:([ee,le,oe])=>(()=>{var he=bo(),pe=he.firstChild,Ee=pe.nextSibling;return n(he,le,pe),n(pe,oe),Ee.$$input=_e=>m({...$(),[ee]:_e.currentTarget.value}),U(Ee,Pe),q(()=>Ee.value=$()[ee]),he})()}),null),q(()=>Y.value=Tr($().publicFlag).join(", ")),G})()]}}),null),n(Ye,o(Fe,{title:"Code snippet",get children(){return[(()=>{var G=Wa(),Y=G.firstChild;return n(G,o(re,{each:["curl","fetch"],children:ee=>(()=>{var le=kn();return le.$$click=()=>j(ee),n(le,ee),q(oe=>{var he=O()===ee,pe=`px-3 py-1 text-xs font-semibold rounded-lg border transition-colors ${O()===ee?"bg-kick-500/20 text-kick-500 border-kick-500/30":"bg-surface-2 text-text-secondary border-border-strong hover:text-text-body"}`;return he!==oe.e&&F(le,"aria-pressed",oe.e=he),pe!==oe.t&&U(le,oe.t=pe),oe},{e:void 0,t:void 0}),le})()}),Y),Y.$$click=ne,U(Y,`${Qe} ml-auto`),n(G,o(y,{get when(){return E()},get children(){var ee=Ga();return n(ee,E),ee}}),null),G})(),(()=>{var G=Ya();return n(G,Q),G})()]}}),null),n(Ye,o(y,{get when(){return H()},get children(){var G=Qa();return G.firstChild,n(G,H,null),G}}),null),n(Ye,o(y,{get when(){return C()},children:G=>o(Fe,{open:!0,get title(){return(()=>{var Y=_o(),ee=Y.firstChild.nextSibling,le=ee.firstChild,oe=ee.nextSibling,he=oe.firstChild;return n(ee,()=>G().status,le),n(ee,()=>G().statusText,null),n(oe,()=>G().ms,he),q(()=>U(ee,Ct(G().status))),Y})()},get children(){return[(()=>{var Y=$o(),ee=Y.firstChild,le=ee.firstChild.nextSibling;le.nextSibling;var oe=ee.nextSibling.firstChild;return n(ee,()=>G().headers.length,le),n(oe,o(re,{get each(){return G().headers},children:([he,pe])=>(()=>{var Ee=ko(),_e=Ee.firstChild,rt=_e.nextSibling;return n(_e,he),n(rt,pe),Ee})()})),Y})(),(()=>{var Y=yo(),ee=Y.firstChild;return n(ee,()=>G().body||"(empty body)"),n(Y,o(y,{get when(){return G().raw},get children(){return o(Tn,{get children(){return o(An,{label:"Copy response",text:()=>wn(G().raw,G().headers.find(([le])=>le==="content-type")?.[1]??null)})}})}}),null),Y})(),o(y,{get when(){return G().truncated},get children(){var Y=wo(),ee=Y.firstChild.nextSibling;return ee.nextSibling,n(Y,()=>cr.toLocaleString(),ee),Y}})]}})}),null),n(Ye,o(Fe,{title:"History",get count(){return k().length},get children(){return o(y,{get when(){return k().length>0},get fallback(){return So()},get children(){return[(()=>{var G=Xa();return n(G,o(re,{get each(){return k()},children:Y=>(()=>{var ee=Co(),le=ee.firstChild,oe=le.firstChild,he=oe.nextSibling,pe=he.nextSibling,Ee=pe.nextSibling,_e=Ee.firstChild,rt=Ee.nextSibling;return le.$$click=()=>fe(Y),n(oe,()=>Y.method),n(he,()=>Aa(Y)),n(pe,()=>Y.status??"failed"),n(Ee,()=>Y.ms,_e),n(rt,()=>new Date(Y.at).toLocaleTimeString()),q(Ge=>{var on=`font-bold w-14 shrink-0 ${Xe(Y.method)}`,cn=Y.status?Ct(Y.status):"dt-pill dt-pill-err";return on!==Ge.e&&U(oe,Ge.e=on),cn!==Ge.t&&U(pe,Ge.t=cn),Ge},{e:void 0,t:void 0}),ee})()})),G})(),(()=>{var G=Za();return G.$$click=()=>A([]),U(G,`${Qe} mt-2`),G})()]}})}}),null),q(G=>{var Y=`Try ${J().method} ${J().path}`,ee=`text-xs font-bold ${Xe(J().method)}`,le=`font-bold ${Xe(J().method)}`,oe=f(),he=`shrink-0 px-4 text-sm font-semibold rounded-lg border transition-colors ${S()?"bg-red-500/20 text-red-400 border-red-500/40":"bg-kick-500/20 text-kick-500 border-kick-500/30 hover:bg-kick-500/30"}`;return Y!==G.e&&F(ge,"aria-label",G.e=Y),ee!==G.t&&U(be,G.t=ee),le!==G.a&&U(nr,G.a=le),oe!==G.o&&(At.disabled=G.o=oe),he!==G.i&&U(At,G.i=he),G},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),q(()=>Ot.value=i().pins[pt(J())]??""),de})()})},Fe=e=>(()=>{var t=Mo(),r=t.firstChild;r.firstChild;var s=r.nextSibling;return n(r,()=>e.title,null),n(r,o(y,{get when(){return e.count},get children(){var l=Eo(),a=l.firstChild.nextSibling;return a.nextSibling,n(l,()=>e.count,a),l}}),null),n(s,()=>e.children),q(()=>t.open=e.open),t})(),Jo=e=>{const t=()=>[...e.rows,{key:"",value:"",enabled:!0,type:"text"}],r=(s,l)=>{const a=t().map((i,c)=>c===s?{...i,...l}:i);e.onChange(a.filter(i=>i.key||i.value||i.files?.length))};return(()=>{var s=tn();return n(s,o(Fr,{get each(){return t()},children:(l,a)=>(()=>{var i=Ao(),c=i.firstChild,u=c.nextSibling,h=u.nextSibling,g=h.nextSibling;return c.addEventListener("change",p=>r(a,{enabled:p.currentTarget.checked})),u.addEventListener("change",p=>r(a,{type:p.currentTarget.value,value:"",files:[]})),U(u,Vo),h.$$input=p=>r(a,{key:p.currentTarget.value}),U(h,Pe),n(i,o(y,{get when(){return l().type==="file"},get fallback(){return(()=>{var p=Oo();return p.$$input=x=>r(a,{value:x.currentTarget.value}),U(p,Pe),q(()=>p.value=l().value),p})()},get children(){var p=To(),x=p.firstChild;return U(p,`${Pe} cursor-pointer truncate`),x.addEventListener("change",v=>r(a,{files:[...v.currentTarget.files??[]]})),n(p,(()=>{var v=ae(()=>!!l().files?.length);return()=>v()?l().files.map(_=>_.name).join(", "):"Choose file…"})(),null),q(()=>x.multiple=e.multiple),p}}),g),g.$$click=()=>e.onChange(e.rows.filter((p,x)=>x!==a)),q(()=>U(g,`shrink-0 p-1 text-text-muted hover:text-text-body ${a===e.rows.length?"invisible":""}`)),q(()=>c.checked=l().enabled),q(()=>u.value=l().type),q(()=>h.value=l().key),i})()})),s})()},wt=e=>{const t=()=>[...e.rows,{key:"",value:"",enabled:!0}],r=($,m)=>{const S=t().map((b,f)=>f===$?{...b,...m}:b);e.onChange(S.filter(b=>b.key||b.value))},[s,l]=P(new Set),[a,i]=P(null);qe(_r(()=>e.context,()=>{l(new Set),i(null)},{defer:!0}));const c=$=>{const m=new Set(s());m.delete($)||m.add($),l(m)},u=$=>!!t()[$]?.secret&&!s().has($),h=$=>{l(new Set),i(null),e.onChange(e.rows.filter((m,S)=>S!==$))},[g,p]=P(null),x=($,m)=>{$===m||m<0||m>=e.rows.length||(l(new Set),i(null),e.onChange(ma(e.rows,$,m)))},v=$=>{const m=g();p(null),m!==null&&x(m,$)};let _;const N=($,m)=>{const S=$.key==="ArrowUp"?m-1:$.key==="ArrowDown"?m+1:null;S===null||S<0||S>=e.rows.length||($.preventDefault(),x(m,S),_?.querySelectorAll("[data-handle]")[S]?.focus())};return(()=>{var $=tn();return et(m=>_=m,$),n($,o(Fr,{get each(){return t()},children:(m,S)=>(()=>{var b=Io(),f=b.firstChild.firstChild,w=f.nextSibling,C=w.nextSibling,I=C.nextSibling,H=I.nextSibling,D=H.firstChild,E=D.nextSibling,T=E.nextSibling;return b.addEventListener("drop",O=>{O.preventDefault(),v(S)}),b.addEventListener("dragover",O=>{g()!==null&&S<e.rows.length&&O.preventDefault()}),f.addEventListener("dragend",()=>p(null)),f.addEventListener("dragstart",O=>{p(S),O.dataTransfer?.setData("text/plain",String(S))}),f.$$keydown=O=>N(O,S),F(f,"aria-label",`Move row ${S+1}: drag, or press up or down arrow`),w.addEventListener("change",O=>r(S,{enabled:O.currentTarget.checked})),C.$$input=O=>r(S,{key:O.currentTarget.value}),U(C,Pe),I.$$input=O=>r(S,{value:O.currentTarget.value}),U(I,Pe),n(H,o(y,{get when(){return m().secret},get children(){var O=Lo();return O.$$click=()=>c(S),n(O,o(Je,{name:"eye",size:14})),q(j=>{var k=!u(S),A=u(S)?"Show value":"Hide value",W=u(S)?"Show value":"Hide value";return k!==j.e&&F(O,"aria-pressed",j.e=k),A!==j.t&&F(O,"aria-label",j.t=A),W!==j.a&&F(O,"title",j.a=W),j},{e:void 0,t:void 0,a:void 0}),O}}),D),D.$$click=()=>r(S,{secret:!m().secret}),n(D,o(Je,{get name(){return m().secret?"lock":"unlock"},size:14})),E.$$click=()=>i(a()===S?null:S),n(E,o(Je,{name:"maximize",size:14})),T.$$click=()=>h(S),n(b,o(y,{get when(){return a()===S},get children(){return[(()=>{var O=Ro();return O.$$input=j=>r(S,{value:j.currentTarget.value}),U(O,`${Pe} font-mono text-xs min-h-24 break-all`),q(j=>{var k=`${m().key||"value"} — whole value`,A=u(S);return k!==j.e&&F(O,"aria-label",j.e=k),A!==j.t&&(O.readOnly=j.t=A),j},{e:void 0,t:void 0}),q(()=>O.value=u(S)?"•".repeat(Math.min(m().value.length,64)):m().value),O})(),o(y,{get when(){return u(S)},get children(){return qo()}})]}}),null),q(O=>{var j=`flex flex-col gap-1 ${g()===S?"opacity-50":""}`,k=S<e.rows.length,A=S<e.rows.length?0:-1,W=`shrink-0 select-none border-0 bg-transparent p-0 text-text-muted ${S<e.rows.length?"cursor-grab":"invisible"}`,V=e.keyPlaceholder??"name",z=u(S)?"password":"text",L=e.valuePlaceholder??"value",ie=`flex items-center ${S===e.rows.length?"invisible":""}`,R=!!m().secret,M=m().secret?"Secret: masked":"Mark as secret",Z=m().secret?"Secret: masked — click to stop masking":"Mark as secret",B=a()===S;return j!==O.e&&U(b,O.e=j),k!==O.t&&F(f,"draggable",O.t=k),A!==O.a&&F(f,"tabindex",O.a=A),W!==O.o&&U(f,O.o=W),V!==O.i&&F(C,"placeholder",O.i=V),z!==O.n&&F(I,"type",O.n=z),L!==O.s&&F(I,"placeholder",O.s=L),ie!==O.h&&U(H,O.h=ie),R!==O.r&&F(D,"aria-pressed",O.r=R),M!==O.d&&F(D,"aria-label",O.d=M),Z!==O.l&&F(D,"title",O.l=Z),B!==O.u&&F(E,"aria-expanded",O.u=B),O},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0}),q(()=>w.checked=m().enabled),q(()=>C.value=m().key),q(()=>I.value=m().value),b})()})),$})()},Ko=e=>{const[t,r]=P(e.selectedId),s=()=>e.state.environments.find(h=>h.id===t())??e.state.environments[0],l=h=>e.setState(g=>({...g,environments:g.environments.map(p=>p.id===s().id?{...p,...h}:p)})),a=h=>h.map(g=>({...g})),i=h=>{const g=`env-${Date.now().toString(36)}`;e.setState(p=>({...p,environments:[...p.environments,{id:g,name:h?`${h.name} copy`:Pa(p),headers:h?a(h.headers):[],variables:h?a(h.variables):[],mappings:h?a(h.mappings):[]}]})),r(g)},c=()=>{const h=s().id;e.setState(g=>{const p=g.environments.filter(v=>v.id!==h),x=Object.fromEntries(Object.entries(g.pins).filter(([,v])=>v!==h));return{environments:p,activeId:g.activeId===h?p[0].id:g.activeId,pins:x}}),r(e.state.environments[0].id)},u=h=>Object.values(e.state.pins).filter(g=>g===h).length;return(()=>{var h=No(),g=h.firstChild.firstChild,p=g.firstChild.nextSibling,x=g.nextSibling.firstChild,v=x.firstChild,_=v.nextSibling.firstChild.nextSibling,N=x.nextSibling,$=N.firstChild,m=N.nextSibling,S=m.firstChild,b=S.firstChild.nextSibling,f=S.nextSibling,w=f.nextSibling,C=w.nextSibling,I=m.nextSibling;I.firstChild.nextSibling;var H=I.nextSibling;H.firstChild.nextSibling.nextSibling;var D=H.nextSibling;return D.firstChild.nextSibling,h.$$keydown=E=>E.key==="Escape"&&e.onClose(),h.$$click=E=>E.target===E.currentTarget&&e.onClose(),p.$$click=()=>e.onClose(),v.addEventListener("change",E=>e.setRemember(E.currentTarget.checked)),n(_,()=>e.remember?"Saved in localStorage and kept after the tab closes. Environments may hold tokens — turn this off on a shared machine.":"Kept for this browser tab only."),n(N,o(re,{get each(){return e.state.environments},children:E=>(()=>{var T=Po();return T.$$click=()=>r(E.id),n(T,()=>E.name||"(unnamed)",null),n(T,()=>E.id===e.state.activeId?" · active":"",null),q(O=>{var j=E.id===s().id,k=`px-3 py-1 text-xs font-semibold rounded-lg border transition-colors ${E.id===s().id?"bg-kick-500/20 text-kick-500 border-kick-500/30":"bg-surface-2 text-text-secondary border-border-strong hover:text-text-body"}`;return j!==O.e&&F(T,"aria-selected",O.e=j),k!==O.t&&U(T,O.t=k),O},{e:void 0,t:void 0}),T})()}),$),$.$$click=()=>i(),U($,Qe),b.$$input=E=>l({name:E.currentTarget.value}),U(b,Pe),f.$$click=()=>e.setState(E=>({...E,activeId:s().id})),U(f,Qe),n(f,()=>s().id===e.state.activeId?"Active":"Make active"),w.$$click=()=>i(s()),U(w,Qe),C.$$click=c,U(C,Qe),n(I,o(wt,{get rows(){return s().headers},onChange:E=>l({headers:E}),get context(){return s().id}}),null),n(H,o(wt,{get rows(){return s().variables},onChange:E=>l({variables:E}),get context(){return s().id}}),null),n(D,o(wt,{get rows(){return s().mappings},onChange:E=>l({mappings:E}),get context(){return s().id},keyPlaceholder:"param or query name",valuePlaceholder:"variable"}),null),q(E=>{var T=s().id===e.state.activeId,O=e.state.environments.length===1,j=u(s().id)?`${u(s().id)} pinned route(s) go back to the active environment`:void 0;return T!==E.e&&(f.disabled=E.e=T),O!==E.t&&(C.disabled=E.t=O),j!==E.a&&F(C,"title",E.a=j),E},{e:void 0,t:void 0,a:void 0}),q(()=>v.checked=e.remember),q(()=>b.value=s().name),h})()},Vo="w-24 shrink-0 bg-surface-2 border border-border-strong rounded-lg px-2 py-1.5 text-sm text-text-body focus:outline-none focus:border-kick-500",Pe="w-full min-w-0 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500",Tn=e=>(()=>{var t=Do();return n(t,()=>e.children),t})(),Go=e=>{const[t,r]=P(!1),s=()=>{const l=Tl(e.text());if(l!==void 0)return e.onFormat(l);r(!0),setTimeout(()=>r(!1),1500)};return(()=>{var l=Ho();return l.$$click=s,n(l,()=>t()?"Not JSON":"Format"),l})()},An=e=>{const[t,r]=P(null),s=async()=>{try{await navigator.clipboard.writeText(e.text()),r("Copied")}catch{r("Copy failed")}setTimeout(()=>r(null),1500)};return(()=>{var l=Uo();return l.$$click=s,n(l,()=>t()??"Copy"),q(()=>F(l,"aria-label",e.label)),l})()},Qe="px-3 py-2 text-xs font-semibold rounded-lg border bg-surface-2 text-text-secondary border-border-strong hover:text-text-body disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:text-text-secondary";we(["click","input","keydown"]);var Wo=d("<div class=dt-split><div class=dt-split-left></div><div class=dt-resizer role=separator aria-orientation=vertical></div><div class=dt-split-right>"),On=240,Ln=720,lt=e=>{const t=`kickjs-devtools-split:${e.storageKey}`,r=(()=>{try{const c=Number(localStorage.getItem(t));if(c>=On&&c<=Ln)return c}catch{}return e.defaultLeft??380})(),[s,l]=P(r);let a=null;ke(()=>a?.());const i=c=>{c.preventDefault();const u=c.clientX,h=s();document.body.style.cursor="col-resize";const g=x=>l(Math.min(Ln,Math.max(On,h+x.clientX-u))),p=()=>{a?.();try{localStorage.setItem(t,String(s()))}catch{}};a=()=>{document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",p),document.body.style.cursor="",a=null},document.addEventListener("mousemove",g),document.addEventListener("mouseup",p)};return(()=>{var c=Wo(),u=c.firstChild,h=u.nextSibling,g=h.nextSibling;return n(u,()=>e.left),h.$$mousedown=i,n(g,()=>e.right),q(p=>dl(u,`width:${s()}px`,p)),c})()};we(["mousedown"]);var Yo=d('<div class="flex flex-col gap-1.5 border-b border-border p-2"><input type=text placeholder="Search method or path…"class="w-full bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"><div class="flex items-center gap-1 flex-wrap"><span class=flex-1></span><button type=button></button><button type=button>Clear</button></div><div class="text-xs text-text-muted"> requests'),Qo=d('<div class="min-h-0 flex-1 overflow-y-auto">'),Xo=d("<button type=button>"),Zo=d("<div class=empty>"),ei=d('<span class="text-red-500 text-[0.66rem]">●'),ti=d('<button type=button><span></span><span></span><span class="min-w-0 flex-1 truncate font-mono"></span><span class="shrink-0 text-[0.7rem] text-text-muted tabular-nums"></span><span class="w-14 shrink-0 text-right text-[0.66rem] text-text-muted tabular-nums">'),ri=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">Select a request to see its details'),ni=d('<section class="flex h-full min-h-0 flex-col gap-3 overflow-y-auto bg-surface-1 p-4"><div class="flex items-center gap-2"><span></span><span></span><span class="min-w-0 truncate font-mono text-sm text-text-strong"></span></div><dl class="grid grid-cols-[8rem_1fr] gap-x-3 gap-y-1.5 text-[0.8rem]"><dt class=text-text-muted>Route</dt><dd class="m-0 font-mono"></dd><dt class=text-text-muted>Duration</dt><dd class=m-0></dd><dt class=text-text-muted>Time</dt><dd class=m-0></dd><dt class=text-text-muted>Request ID</dt><dd class="m-0 font-mono break-all">'),li=d('<div class="rounded-md border border-red-500/40 bg-red-500/10 px-3 py-2 text-sm"><span class="font-semibold text-red-500"></span><span class=text-text-body>: '),si=d(`<div><button type=button class="rounded-md border border-kick-500/30 bg-kick-500/20 px-3 py-1 text-xs font-semibold text-kick-500 hover:bg-kick-500/30">Replay in runner</button><p class="mt-1.5 text-xs text-text-muted">Opens the route with these path params. Query, headers and body aren't logged — the runner keeps the ones saved for this route.`),ai=1500,oi=500,ii=["ALL","2xx","3xx","4xx","5xx"],qr=null;function ci(e){qr=e,ht("requests")}var di=e=>new Date(e).toLocaleTimeString([],{hour12:!1}),ui=()=>{const[e,t]=P([]),[r,s]=P(qr);qr=null;const[l,a]=P(""),[i,c]=P("ALL"),[u,h]=P(!1);let g=0,p=!1;const x=async()=>{if(!(u()||p)){p=!0;try{const{requests:b,latest:f}=await ye.requests(g);if(f<g){g=0,t([]),s(null);return}if(b.length===0)return;g=b[b.length-1].seq,t(w=>[...b.toReversed(),...w].slice(0,oi))}catch{}finally{p=!1}}};Ie(()=>{x();const b=setInterval(()=>{x()},ai);ke(()=>clearInterval(b))});const v=ce(()=>{const b=l().trim().toLowerCase(),f=i();return e().filter(w=>(f==="ALL"||Math.floor(w.status/100)===Number(f[0]))&&(!b||`${w.method} ${w.path}`.toLowerCase().includes(b)))}),_=ce(()=>e().find(b=>b.seq===r())??null),N=b=>b.route===void 0?void 0:se.routes().find(f=>f.method.toUpperCase()===b.method.toUpperCase()&&f.path===b.route),$=b=>`px-2 py-0.5 text-[0.68rem] font-semibold rounded-md border ${b?"bg-kick-500/20 text-kick-500 border-kick-500/30":"bg-surface-2 text-text-secondary border-border-strong hover:text-text-body"}`,m=[(()=>{var b=Yo(),f=b.firstChild,w=f.nextSibling,C=w.firstChild,I=C.nextSibling,H=I.nextSibling,D=w.nextSibling,E=D.firstChild;return f.$$input=T=>a(T.currentTarget.value),n(w,o(re,{each:ii,children:T=>(()=>{var O=Xo();return O.$$click=()=>c(T),n(O,T),q(j=>{var k=i()===T,A=$(i()===T);return k!==j.e&&F(O,"aria-pressed",j.e=k),A!==j.t&&U(O,j.t=A),j},{e:void 0,t:void 0}),O})()}),C),I.$$click=()=>h(T=>!T),n(I,()=>u()?"Paused":"Pause"),H.$$click=()=>{t([]),s(null)},n(D,o(y,{get when(){return l()||i()!=="ALL"},get children(){return[ae(()=>v().length)," matched · "]}}),E),n(D,()=>e().length,E),q(T=>{var O=u(),j=$(u()),k=$(!1);return O!==T.e&&F(I,"aria-pressed",T.e=O),j!==T.t&&U(I,T.t=j),k!==T.a&&U(H,T.a=k),T},{e:void 0,t:void 0,a:void 0}),q(()=>f.value=l()),b})(),(()=>{var b=Qo();return n(b,o(y,{get when(){return v().length>0},get fallback(){return(()=>{var f=Zo();return n(f,()=>e().length?"No requests match":"No requests yet — call the app"),f})()},get children(){return o(re,{get each(){return v()},children:f=>(()=>{var w=ti(),C=w.firstChild,I=C.nextSibling,H=I.nextSibling,D=H.nextSibling,E=D.nextSibling;return w.$$click=()=>s(f.seq),n(C,()=>f.status),n(I,()=>f.method),n(H,()=>ca(f.path)),n(w,o(y,{get when(){return f.error},get children(){var T=ei();return q(()=>F(T,"title",f.error.message)),T}}),D),n(D,()=>Se(f.durationMs)),n(E,()=>di(f.at)),q(T=>{var O=`flex w-full cursor-pointer items-center gap-2 border-0 border-b border-border/50 px-2.5 py-1 text-left text-[0.78rem] text-text-body ${r()===f.seq?"bg-accent/12 shadow-[inset_2px_0_0_0_var(--color-accent)]":"bg-transparent hover:bg-surface-hover"}`,j=`${Ct(f.status)} w-10 shrink-0 text-center`,k=`w-[3.4rem] shrink-0 font-mono text-[0.68rem] font-bold ${Xe(f.method)}`,A=f.path;return O!==T.e&&U(w,T.e=O),j!==T.t&&U(C,T.t=j),k!==T.a&&U(I,T.a=k),A!==T.o&&F(H,"title",T.o=A),T},{e:void 0,t:void 0,a:void 0,o:void 0}),w})()})}})),b})()],S=o(y,{get when(){return _()},get fallback(){return ri()},children:b=>(()=>{var f=ni(),w=f.firstChild,C=w.firstChild,I=C.nextSibling,H=I.nextSibling,D=w.nextSibling,E=D.firstChild.nextSibling,T=E.nextSibling.nextSibling,O=T.nextSibling.nextSibling,j=O.nextSibling.nextSibling;return n(C,()=>b().status),n(I,()=>b().method),n(H,()=>b().path),n(f,o(y,{get when(){return b().error},children:k=>(()=>{var A=li(),W=A.firstChild,V=W.nextSibling;return V.firstChild,n(W,()=>k().name),n(V,()=>k().message,null),A})()}),D),n(E,()=>b().route??"no route matched"),n(T,()=>Se(b().durationMs)),n(O,()=>new Date(b().at).toLocaleString()),n(j,()=>b().requestId??"—"),n(f,o(y,{get when(){return N(b())},children:k=>(()=>{var A=si(),W=A.firstChild;return W.$$click=()=>rr(k(),ya(k().path,b().path)),A})()}),null),q(k=>{var A=Ct(b().status),W=`font-mono text-sm font-bold ${Xe(b().method)}`;return A!==k.e&&U(C,k.e=A),W!==k.t&&U(I,k.t=W),k},{e:void 0,t:void 0}),f})()});return o(lt,{storageKey:"requests",left:m,right:S})};we(["input","click"]);var hi=d('<div class="flex flex-col gap-4"><div class="grid grid-cols-2 gap-3 lg:grid-cols-4"></div><div class="grid grid-cols-1 gap-4 lg:grid-cols-[2fr_1fr]"><section class="rounded-xl border border-border bg-surface-1"><header class="flex items-center justify-between border-b border-border px-4 py-2.5"><h2 class="text-xs font-semibold uppercase tracking-wider text-text-muted">Recent failures</h2><button type=button class="text-xs text-text-muted hover:text-text-strong">All requests →</button></header></section><section class="rounded-xl border border-border bg-surface-1 px-4 py-3 text-[0.8rem]"><h2 class="mb-2 text-xs font-semibold uppercase tracking-wider text-text-muted">App'),fi=d('<div class="flex flex-col items-center gap-2 px-4 py-8 text-sm text-text-muted">'),vi=d('<button type=button class="rounded-md border border-kick-500/30 bg-kick-500/20 px-3 py-1 text-xs font-semibold text-kick-500 hover:bg-kick-500/30">Try a route'),gi=d('<button type=button class="flex w-full cursor-pointer items-center gap-2 border-0 border-b border-border/50 bg-transparent px-4 py-1.5 text-left text-[0.78rem] text-text-body last:border-b-0 hover:bg-surface-hover"><span></span><span></span><span class="min-w-0 shrink truncate font-mono"></span><span class="min-w-0 flex-1 truncate text-xs text-red-500"></span><span class="shrink-0 text-[0.66rem] text-text-muted tabular-nums">'),mi=d('<p class="italic text-text-muted">Loading…'),Rn=d("<span>"),pi=d('<h3 class="mt-3 mb-1 text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">Adapters'),xi=d('<div class="flex items-center gap-2 py-0.5"><span aria-hidden=true></span><span class="min-w-0 flex-1 truncate text-text-secondary">'),bi=d('<div class="flex flex-col rounded-xl border border-border bg-surface-1 px-4 pt-3 pb-2"><span class="text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted"></span><span></span><span class="text-xs text-text-muted"></span><div class="mt-1 h-8 [&amp;_svg]:block [&amp;_svg]:h-full [&amp;_svg]:w-full">'),$i=d('<div class="flex items-center justify-between py-0.5"><span class=text-text-secondary></span><span class="font-medium tabular-nums">'),yi=2e3,wi=()=>{const[e,t]=P([]),[r,s]=P(null);let l=0,a=!1;const i=async()=>{if(!a){a=!0;try{const[h,g]=await Promise.allSettled([ye.requests(l),ye.runtime()]);if(h.status==="fulfilled"){if(h.value.latest<l){l=0,t([]);return}const p=h.value.requests;p.length&&(l=p[p.length-1].seq,t(x=>[...x,...p].slice(-200)))}s(g.status==="fulfilled"?g.value.history.map(p=>p.memory.heapUsed):null)}finally{a=!1}}};Ie(()=>{i();const h=setInterval(()=>{i()},yi);ke(()=>clearInterval(h))});const c=ce(()=>Mr(e().map(h=>h.durationMs),95)),u=ce(()=>e().filter(h=>h.status>=500||h.error).toReversed().slice(0,6));return(()=>{var h=hi(),g=h.firstChild,p=g.nextSibling.firstChild,x=p.firstChild.firstChild.nextSibling,v=p.nextSibling;return v.firstChild,n(g,o(gt,{label:"Requests",get value(){return se.metrics()?.requests.toLocaleString()??"—"},get hint(){return`${_i(ar(bn()))} in the last minute`},get series(){return ar(bn())}}),null),n(g,o(gt,{label:"Server errors",get value(){return se.metrics()?.serverErrors.toLocaleString()??"—"},get hint(){return[ae(()=>Wt(se.metrics()?.errorRate??0))," error rate",o(Ke,{metric:"error-rate"})]},get series(){return ar(na())},stroke:"#ef4444",get tone(){return se.metrics()?.serverErrors?"err":void 0}}),null),n(g,o(gt,{label:"Latency p95",get value(){return ae(()=>c()===void 0)()?"—":Se(c())},get hint(){return`over the last ${e().length} requests`},get series(){return e().slice(-60).map(_=>_.durationMs)}}),null),n(g,o(y,{get when(){return r()},get fallback(){return o(gt,{label:"Uptime",get value(){return ae(()=>!!se.health())()?Gt(se.health().uptime):"—"},hint:"runtime sampler is off"})},children:_=>o(gt,{label:"Heap used",get value(){return ae(()=>!!_().length)()?dt(_()[_().length-1]):"—"},hint:"sampled every second",get series(){return _()}})}),null),x.$$click=()=>ht("requests"),n(p,o(y,{get when(){return u().length>0},get fallback(){return(()=>{var _=fi();return n(_,o(y,{get when(){return e().length>0},get fallback(){return["No requests yet.",(()=>{var N=vi();return N.$$click=()=>ht("routes"),N})()]},get children(){return["No failures in the last ",ae(()=>e().length)," requests."]}})),_})()},get children(){return o(re,{get each(){return u()},children:_=>(()=>{var N=gi(),$=N.firstChild,m=$.nextSibling,S=m.nextSibling,b=S.nextSibling,f=b.nextSibling;return N.$$click=()=>ci(_.seq),n($,()=>_.status),n(m,()=>_.method),n(S,()=>_.path),n(b,(()=>{var w=ae(()=>!!_.error);return()=>w()?`${_.error.name}: ${_.error.message}`:""})()),n(f,()=>new Date(_.at).toLocaleTimeString([],{hour12:!1})),q(w=>{var C=`${Ct(_.status)} w-10 shrink-0 text-center`,I=`w-[3.4rem] shrink-0 font-mono text-[0.68rem] font-bold ${Xe(_.method)}`;return C!==w.e&&U($,w.e=C),I!==w.t&&U(m,w.t=I),w},{e:void 0,t:void 0}),N})()})}}),null),n(v,o(y,{get when(){return se.health()},get fallback(){return mi()},children:_=>[o(Rt,{label:"Status",get children(){var N=Rn();return n(N,()=>_().status),q(()=>U(N,`badge ${ki(_().status)}`)),N}}),o(Rt,{label:"Uptime",get children(){return Gt(_().uptime)}}),o(y,{get when(){return se.metrics()},children:N=>o(Rt,{label:"Started",get children(){return new Date(N().startedAt).toLocaleTimeString()}})}),o(y,{get when(){return se.ws().enabled},get children(){return o(Rt,{label:"WebSocket",get children(){return[ae(()=>se.ws().activeConnections??0)," open ·"," ",ae(()=>(se.ws().messagesReceived??0)+(se.ws().messagesSent??0))," msgs"]}})}}),o(y,{get when(){return Object.keys(_().adapters).length>0},get children(){return[pi(),o(re,{get each(){return Object.entries(_().adapters)},children:([N,$])=>(()=>{var m=xi(),S=m.firstChild,b=S.nextSibling;return F(m,"title",$),n(b,N),n(m,o(y,{when:$!=="running",get children(){var f=Rn();return n(f,$),q(()=>U(f,`text-xs ${qn($).text}`)),f}}),null),q(()=>U(S,`h-2 w-2 shrink-0 rounded-full ${qn($).dot}`)),m})()})]}})]}),null),h})()},gt=e=>(()=>{var t=bi(),r=t.firstChild,s=r.nextSibling,l=s.nextSibling,a=l.nextSibling;return n(r,()=>e.label),n(s,()=>e.value),n(l,()=>e.hint),n(a,o(y,{get when(){return(e.series?.length??0)>1},get children(){return o(ia,{get values(){return e.series},get stroke(){return e.stroke}})}})),q(()=>U(s,`mt-0.5 text-xl font-semibold tabular-nums ${e.tone==="err"?"text-red-500":"text-text-strong"}`)),t})(),Rt=e=>(()=>{var t=$i(),r=t.firstChild,s=r.nextSibling;return n(r,()=>e.label),n(s,()=>e.children),t})(),_i=e=>e.reduce((t,r)=>t+r,0);function ki(e){return e==="healthy"?"badge-ok":e==="degraded"?"badge-warn":"badge-critical"}function qn(e){return e==="running"||e==="up"?{dot:"bg-emerald-500",text:"text-emerald-500"}:e==="down"||e==="stopped"?{dot:"bg-red-500",text:"text-red-500"}:{dot:"bg-amber-500",text:"text-amber-500"}}we(["click"]);var Si=d('<section class="flex flex-col rounded-xl border border-border bg-surface-1 px-4 pt-3 pb-2"><header class="flex items-baseline gap-2"><h3 class="text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted"></h3><span class=flex-1></span></header><div class="relative mt-1"><svg viewBox="0 0 300 80"preserveAspectRatio=none class="block h-20 w-full"><line x1=0 x2=300 y1=79.5 y2=79.5 stroke=var(--color-border)></line></svg><span class="pointer-events-none absolute top-0 left-0 text-[0.6rem] text-text-muted tabular-nums"></span></div><div class="flex justify-between text-[0.6rem] text-text-muted"><span></span><span>now'),Ci=d('<span class="inline-block h-0.5 w-2.5 rounded">'),Ei=d('<span class="flex items-center gap-1 text-xs text-text-muted"><span>'),Mi=d("<svg><line y1=74 y2=80 stroke=var(--color-text-muted) vector-effect=non-scaling-stroke></svg>",!1,!0,!1),Ti=d("<svg><path fill=none stroke-width=1.5 stroke-linejoin=round vector-effect=non-scaling-stroke></svg>",!1,!0,!1),Ai=300,Oi=80,qt=e=>{const t=ce(()=>Math.max(0,...e.series.map(u=>u.values.length))),r=ce(()=>e.max??(Math.max(0,...e.series.flatMap(u=>[...u.values]))*1.1||1)),s=u=>t()>1?u/(t()-1)*Ai:0,l=u=>Oi-Math.min(u,r())/r()*78-1,a=u=>u.map((h,g)=>`${g?"L":"M"}${s(g).toFixed(1)} ${l(h).toFixed(1)}`).join(" "),i=(u,h)=>u.color??(h===0?"var(--color-accent)":"var(--color-text-muted)"),c=u=>u.values[u.values.length-1];return(()=>{var u=Si(),h=u.firstChild,g=h.firstChild,p=g.nextSibling,x=h.nextSibling,v=x.firstChild;v.firstChild;var _=v.nextSibling,N=x.nextSibling.firstChild;return n(g,()=>e.title),n(h,()=>e.info,p),n(h,o(re,{get each(){return e.series},children:($,m)=>o(y,{get when(){return c($)!==void 0},get children(){var S=Ei(),b=S.firstChild;return n(S,o(y,{get when(){return e.series.length>1},get children(){return[(()=>{var f=Ci();return q(w=>Ve(f,"background",i($,m()))),f})(),ae(()=>$.label)]}}),b),n(b,()=>e.format(c($))),q(()=>U(b,`tabular-nums ${m()===0?"text-base font-semibold text-text-strong":""}`)),S}})}),null),n(v,o(re,{get each(){return e.marks??[]},children:$=>(()=>{var m=Mi();return q(S=>{var b=s($),f=s($);return b!==S.e&&F(m,"x1",S.e=b),f!==S.t&&F(m,"x2",S.t=f),S},{e:void 0,t:void 0}),m})()}),null),n(v,o(re,{get each(){return e.series.map(($,m)=>({s:$,i:m})).toReversed()},children:({s:$,i:m})=>(()=>{var S=Ti();return q(b=>{var f=a($.values),w=i($,m);return f!==b.e&&F(S,"d",b.e=f),w!==b.t&&F(S,"stroke",b.t=w),b},{e:void 0,t:void 0}),S})()}),null),n(_,()=>e.format(r())),n(N,(()=>{var $=ae(()=>t()>1);return()=>$()?`${t()}s ago`:""})()),u})()},Li=d('<div class="flex flex-col gap-4"><header class="flex flex-wrap items-center gap-2 text-xs"><span class=flex-1></span></header><div class="grid grid-cols-1 gap-3 lg:grid-cols-2"></div><p class="-mt-2 text-[0.66rem] text-text-muted">Ticks under the event-loop chart mark garbage collections. CPU is a percentage of one core.'),Ri=d('<div class=dt-panel-grid><div class="card max-w-md text-sm text-text-secondary">The runtime sampler is off. Remove <code>runtime: { enabled: false }</code> from <code>DevToolsAdapter(...)</code> to see process metrics here.'),qi=d('<span class="dt-tone dt-tone-gray">Node '),Ii=d('<span class="dt-tone dt-tone-gray">/'),Ni=d('<span class="dt-tone dt-tone-gray">pid '),Pi=d('<span class="dt-tone dt-tone-blue">'),Di=d("<span class=text-text-muted>up <!> · <!> GCs, <!> paused"),Hi=d('<div class="mt-2 flex flex-wrap gap-1.5">'),Ui=d('<p class="mt-2 text-xs text-text-muted">Growth is judged once the process has run past its startup — about 50 seconds.'),ji=d('<section class="rounded-xl border border-border bg-surface-1 px-4 py-3"><header class="mb-2 flex items-center gap-2"><h3 class="text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">Memory health</h3><span></span></header><dl class="grid grid-cols-2 gap-x-6 gap-y-1 text-[0.8rem] md:grid-cols-4">'),Bi=d('<span class="dt-tone dt-tone-gray font-mono"> '),zi=d('<div><dt class="text-xs text-text-muted"></dt><dd class="m-0 font-semibold tabular-nums">'),Rl=d('<span class="max-w-80 truncate text-text-muted">'),Fi=d('<button type=button class="rounded-md border border-border-strong bg-surface-2 px-2.5 py-1 text-xs text-text-secondary hover:text-text-strong disabled:opacity-50"title="Blocks the event loop for a few seconds — avoid in production">'),Ji=d('<button type=button class="rounded-md border border-border-strong bg-surface-2 px-2.5 py-1 text-xs text-text-secondary hover:text-text-strong disabled:opacity-50"title="Needs node --expose-gc">'),Ki=60,Vi=()=>{const[e,t]=P([]),[r,s]=P(null),[l,a]=P(null),[i,c]=P(!1),u=v=>{t(_=>aa(_,v,Ki))};Ie(()=>{ye.runtime().then(_=>{a(_.process??null),s(_.health),u(_.history)}).catch(()=>c(!0));const v=bl("/memory/stream",_=>{u([_.snapshot]),s(_.health)},()=>{});ke(v)});const h=ce(()=>e()[e().length-1]),g=v=>e().map(v),p=ce(()=>e().map((v,_,N)=>{const $=_?v.timestamp-N[_-1].timestamp:1e3;return(v.cpu.userMicros+v.cpu.systemMicros)/1e3/Math.max(1,$)*100})),x=ce(()=>e().flatMap((v,_,N)=>_&&v.gc.count>N[_-1].gc.count?[_]:[]));return o(y,{get when(){return!i()},get fallback(){return Ri()},get children(){var v=Li(),_=v.firstChild,N=_.firstChild,$=_.nextSibling;return $.nextSibling,n(_,o(y,{get when(){return l()},children:m=>[o(y,{get when(){return m().runtime},children:S=>(()=>{var b=Pi();return n(b,()=>S().name),b})()}),(()=>{var S=qi();return S.firstChild,n(S,()=>m().nodeVersion,null),S})(),(()=>{var S=Ii(),b=S.firstChild;return n(S,()=>m().platform,b),n(S,()=>m().arch,null),S})(),(()=>{var S=Ni();return S.firstChild,n(S,()=>m().pid,null),S})()]}),N),n(_,o(y,{get when(){return h()},children:m=>(()=>{var S=Di(),b=S.firstChild.nextSibling,f=b.nextSibling.nextSibling,w=f.nextSibling.nextSibling;return w.nextSibling,n(S,()=>Gt(m().uptimeSec),b),n(S,()=>m().gc.count,f),n(S,()=>Se(m().gc.totalPauseMs),w),S})()}),N),n(_,o(Gi,{}),null),n(_,o(Wi,{}),null),n($,o(qt,{title:"Heap",get info(){return o(Ke,{metric:"heap.used"})},format:dt,get series(){return[{label:"used",values:g(m=>m.memory.heapUsed)},{label:"total",values:g(m=>m.memory.heapTotal)}]}}),null),n($,o(qt,{title:"Process memory",get info(){return o(Ke,{metric:"rss"})},format:dt,get series(){return[{label:"RSS",values:g(m=>m.memory.rss)},{label:"external",values:g(m=>m.memory.external)}]}}),null),n($,o(qt,{title:"Event loop delay",get info(){return o(Ke,{metric:"event-loop.p99"})},format:Se,get marks(){return x()},get series(){return[{label:"p99",values:g(m=>m.eventLoop.p99)},{label:"p50",values:g(m=>m.eventLoop.p50)}]}}),null),n($,o(qt,{title:"CPU",format:m=>`${m.toFixed(m<10?1:0)}%`,get max(){return Math.max(100,...p())},get series(){return[{label:"CPU",values:p()}]}}),null),n(v,o(y,{get when(){return r()},children:m=>(()=>{var S=ji(),b=S.firstChild,f=b.firstChild.nextSibling,w=b.nextSibling;return n(b,o(Ke,{metric:"leak.risk"}),f),n(f,(()=>{var C=ae(()=>!!m().sampling);return()=>C()?"sampling":m().heapGrowthSeverity})()),n(w,o(It,{label:"Heap growth",get children(){return ae(()=>!!m().sampling)()?"measuring…":`${dt(m().heapGrowthBytesPerSec*60)}/min`}}),null),n(w,o(It,{label:"GC reclaim",metric:"gc.reclaim",get children(){return ae(()=>!!m().sampling)()?"—":Wt(m().gcReclaimRatio)}}),null),n(w,o(It,{label:"Heap of limit",metric:"heap.utilization",get children(){return Wt(m().heapUtilization)}}),null),n(w,o(It,{label:"Open handles",get children(){return m().activeHandles}}),null),n(S,o(y,{get when(){return Object.keys(m().handlesByType).length>0},get children(){var C=Hi();return n(C,o(re,{get each(){return Object.entries(m().handlesByType).toSorted((I,H)=>H[1]-I[1])},children:([I,H])=>(()=>{var D=Bi(),E=D.firstChild;return n(D,I,E),n(D,H,null),D})()})),C}}),null),n(S,o(y,{get when(){return m().sampling},get children(){return Ui()}}),null),q(()=>U(f,m().sampling?ut("idle"):ut(m().heapGrowthSeverity==="ok"?"ok":m().heapGrowthSeverity==="warn"?"warn":"err"))),S})()}),null),v}})},It=e=>(()=>{var t=zi(),r=t.firstChild,s=r.nextSibling;return n(r,()=>e.label,null),n(r,o(y,{get when(){return e.metric},get children(){return o(Ke,{get metric(){return e.metric}})}}),null),n(s,()=>e.children),t})(),Gi=()=>{const[e,t]=P(null),[r,s]=P(!1),l=async()=>{s(!0),t(null);try{const a=await Vt("/memory/snapshot"),i=await a.blob(),c=/filename="?([^";]+)"?/.exec(a.headers.get("content-disposition")??"")?.[1]??`kickjs-heap-${Date.now()}.heapsnapshot`,u=URL.createObjectURL(i);Object.assign(document.createElement("a"),{href:u,download:c}).click(),URL.revokeObjectURL(u),t(`Saved ${c} (${dt(i.size)})`)}catch(a){t(a instanceof Error?a.message:String(a))}finally{s(!1)}};return[o(y,{get when(){return e()},get children(){var a=Rl();return n(a,e),q(()=>F(a,"title",e())),a}}),(()=>{var a=Fi();return a.$$click=()=>{l()},n(a,()=>r()?"Capturing…":"Heap snapshot"),q(()=>a.disabled=r()),a})()]},Wi=()=>{const[e,t]=P(null),[r,s]=P(!1),l=async()=>{s(!0),t(null);try{const a=await(await Vt("/memory/gc")).json();t(`GC freed ${dt(a.reclaimedBytes)} in ${a.elapsedMs}ms`)}catch(a){t(a instanceof Error?a.message:String(a))}finally{s(!1)}};return[o(y,{get when(){return e()},get children(){var a=Rl();return n(a,e),q(()=>F(a,"title",e())),a}}),(()=>{var a=Ji();return a.$$click=()=>{l()},n(a,()=>r()?"Collecting…":"Run GC"),q(()=>a.disabled=r()),a})()]};we(["click"]);var Yi=d('<div class="flex flex-wrap gap-1">'),Qi=d('<span class="text-xs text-text-muted">None'),Xi=d('<button type=button class="rounded border border-border-strong bg-surface-2 px-2 py-0.5 font-mono text-xs text-text-body hover:border-kick-500 hover:text-kick-500">'),Zi=d('<div class="p-4 text-sm text-text-muted"> is no longer registered.'),ec=d('<span class="dt-tone dt-tone-gray"title="Served by its registerFallback() default — the app binds nothing of its own">fallback'),tc=d("<dt class=text-text-muted>First"),In=d("<dd class=m-0>"),rc=d("<dt class=text-text-muted>Last"),nc=d("<dt class=text-text-muted>Took "),lc=d('<dd class="m-0 tabular-nums">'),sc=d('<dl class="grid grid-cols-[9rem_1fr] gap-y-1"><dt class=text-text-muted>Resolves </dt><dd class="m-0 tabular-nums"></dd><dt class=text-text-muted>@PostConstruct </dt><dd class=m-0><span>'),ac=d('<section class="flex flex-col gap-4 p-4 text-[0.8rem]"><header><h2 class="m-0 break-all font-mono text-base text-text-strong"></h2><div class="mt-1.5 flex flex-wrap gap-1.5"><span></span><span class="dt-tone dt-tone-gray"></span><span>'),oc=d('<div><h3 class="mb-1.5 text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">'),Ir=null;function ql(e){Ir=e,ht("container")}function ic(){const e=Ir;return Ir=null,e}function Qt(e){return e.postConstructStatus==="failed"?{label:"failed",tone:ut("err")}:e.instantiated?{label:"active",tone:ut("ok")}:{label:"registered",tone:ut("idle")}}var cc=e=>{const t=ce(()=>se.container().find(l=>l.token===e.token)),r=ce(()=>se.container().filter(l=>l.dependencies?.includes(e.token)).map(l=>l.token)),s=l=>o(y,{get when(){return l.length},get fallback(){return Qi()},get children(){var a=Yi();return n(a,o(re,{each:l,children:i=>(()=>{var c=Xi();return c.$$click=()=>e.onSelect(i),n(c,i),c})()})),a}});return o(y,{get when(){return t()},get fallback(){return(()=>{var l=Zi(),a=l.firstChild;return n(l,()=>e.token,a),l})()},children:l=>(()=>{var a=ac(),i=a.firstChild.firstChild,c=i.nextSibling,u=c.firstChild,h=u.nextSibling,g=h.nextSibling;return n(i,()=>l().token),n(u,()=>l().kind??"unknown"),n(h,()=>l().scope??"singleton"),n(c,o(y,{get when(){return l().fallback},get children(){return ec()}}),g),n(g,()=>Qt(l()).label),n(a,o(hr,{get title(){return`Depends on (${l().dependencies?.length??0})`},get children(){return s(l().dependencies??[])}}),null),n(a,o(hr,{get title(){return`Used by (${r().length})`},get children(){return s(r())}}),null),n(a,o(hr,{title:"Resolution",get children(){var p=sc(),x=p.firstChild;x.firstChild;var v=x.nextSibling,_=v.nextSibling;_.firstChild;var N=_.nextSibling.firstChild;return n(x,o(Ke,{metric:"resolve.count"}),null),n(v,()=>l().resolveCount??0),n(p,o(y,{get when(){return l().firstResolvedAt},get children(){return[tc(),(()=>{var $=In();return n($,()=>new Date(l().firstResolvedAt).toLocaleTimeString()),$})()]}}),_),n(p,o(y,{get when(){return l().lastResolvedAt},get children(){return[rc(),(()=>{var $=In();return n($,()=>new Date(l().lastResolvedAt).toLocaleTimeString()),$})()]}}),_),n(p,o(y,{get when(){return l().resolveDurationMs!=null},get children(){return[(()=>{var $=nc();return $.firstChild,n($,o(Ke,{metric:"resolve.duration"}),null),$})(),(()=>{var $=lc();return n($,()=>Se(l().resolveDurationMs)),$})()]}}),_),n(_,o(Ke,{metric:"post-construct"}),null),n(N,()=>l().postConstructStatus??"none"),q(()=>U(N,ut(l().postConstructStatus==="failed"?"err":l().postConstructStatus==="done"?"ok":"idle"))),p}}),null),q(p=>{var x=Xr(l().kind),v=Qt(l()).tone;return x!==p.e&&U(u,p.e=x),v!==p.t&&U(g,p.t=v),p},{e:void 0,t:void 0}),a})()})},hr=e=>(()=>{var t=oc(),r=t.firstChild;return n(r,()=>e.title),n(t,()=>e.children,null),t})();we(["click"]);var dc=d('<div class="card text-sm text-red-500">'),uc=d('<div class="rounded-md border border-red-500/40 bg-red-500/10 px-3 py-2 text-sm">'),hc=d('<div class="flex flex-col gap-3"><div class="flex items-center gap-3 text-xs text-text-muted"><h2 class="text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">Plugged in</h2><span class=flex-1></span><button type=button class="rounded-md border border-border-strong bg-surface-2 px-2.5 py-1 text-xs text-text-secondary hover:text-text-strong">Refresh'),fc=d("<span> plugins · <!> adapters · <!> contributors · updated "),vc=d('<div><span class="font-semibold text-red-500"> (<!>) introspect() failed:</span> '),gc=d("<div class=empty>Loading topology…"),mc=d('<div class="grid grid-cols-1 items-start gap-3 lg:grid-cols-3">'),pc=d('<section class="flex flex-col gap-2"><h2 class="text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted"> <span class=font-normal>(<!>)'),xc=d('<div class="rounded-lg border border-dashed border-border px-3 py-2 text-xs text-text-muted">'),bc=d('<span class="dt-tone dt-tone-gray">v'),$c=d('<div class="mt-1.5 flex flex-wrap items-center gap-1"title="Declared dependsOn — runs after these"><span class="w-14 text-[0.66rem] text-text-muted">after'),yc=d('<div class="mt-1.5 flex flex-wrap items-center gap-1"><span class="w-14 text-[0.66rem] text-text-muted">hooks'),wc=d('<div class="mt-1.5 flex flex-wrap gap-x-3 gap-y-0.5">'),_c=d('<dl class="mt-1.5 grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5">'),kc=d('<p class="mt-1 text-xs text-text-muted">Reports nothing — it has no introspect().'),Sc=d('<article><header class="flex items-center gap-2"><span class="h-1.5 w-1.5 rounded-full bg-emerald-500"aria-hidden=true></span><span class="min-w-0 flex-1 truncate font-mono font-semibold text-text-strong">'),Il=d("<span>"),Cc=d('<span class="cursor-help rounded border border-border px-1.5 font-mono text-[0.68rem] text-text-secondary">'),Ec=d('<span class=text-text-muted> <span class="font-semibold text-text-body tabular-nums">'),Mc=d("<dt class=text-text-muted>"),Tc=d('<dd class="m-0 truncate font-mono">'),Ac=d('<div class="mt-1.5 flex flex-wrap items-center gap-1"><span class="w-14 text-[0.66rem] text-text-muted">'),Oc=d('<button type=button title="Open in Container">'),Lc=d('<div class="mt-1 flex flex-wrap items-center gap-1 text-[0.68rem] text-text-muted">after'),Rc=d('<article><div class="flex items-center gap-2"><span class="min-w-0 flex-1 truncate font-mono font-semibold">ctx.</span><span class="dt-tone dt-tone-gray">'),qc=()=>{const[e,t]=P(null),[r,s]=P(null),[l,a]=P(null),i=async()=>{try{t(await ye.topology()),s(null)}catch(u){s(u instanceof Error?u.message:String(u))}};Ie(()=>{i();const u=setInterval(()=>{i()},5e3);ke(()=>clearInterval(u))});const c=(u,h)=>!!h&&(h===u.name||!!u.tokens?.provides.includes(h)||!!u.tokens?.requires.includes(h));return(()=>{var u=hc(),h=u.firstChild,g=h.firstChild.nextSibling,p=g.nextSibling;return n(h,o(y,{get when(){return e()},children:x=>(()=>{var v=fc(),_=v.firstChild,N=_.nextSibling,$=N.nextSibling.nextSibling;return $.nextSibling,n(v,()=>x().plugins.length,_),n(v,()=>x().adapters.length,N),n(v,()=>x().contributors.length,$),n(v,()=>tr(x().timestamp),null),v})()}),g),p.$$click=()=>{i()},n(u,o(y,{get when(){return r()},get children(){var x=dc();return n(x,r),x}}),null),n(u,o(y,{get when(){return e()?.errors.length},get children(){var x=uc();return n(x,o(re,{get each(){return e().errors},children:v=>(()=>{var _=vc(),N=_.firstChild,$=N.firstChild,m=$.nextSibling;return m.nextSibling,N.nextSibling,n(N,()=>v.name,$),n(N,()=>v.kind,m),n(_,()=>v.message,null),_})()})),x}}),null),n(u,o(y,{get when(){return e()},get fallback(){return gc()},children:x=>(()=>{var v=mc();return n(v,o(fr,{title:"Plugins",get count(){return x().plugins.length},empty:"No plugins — definePlugin(...) adds one.",get children(){return o(re,{get each(){return x().plugins},children:_=>o(Nn,{p:_,get lit(){return c(_,l())},get hover(){return l()},onHover:a})})}}),null),n(v,o(fr,{title:"Adapters",get count(){return x().adapters.length},empty:"No adapters registered.",get children(){return o(re,{get each(){return x().adapters},children:_=>o(Nn,{p:_,get lit(){return c(_,l())},get hover(){return l()},onHover:a})})}}),null),n(v,o(fr,{title:"Contributors",get count(){return x().contributors.length},empty:"No context contributors — defineContextDecorator(...) adds one.",get children(){return o(re,{get each(){return x().contributors},children:_=>o(Nc,{c:_,get hover(){return l()},onHover:a})})}}),null),v})()}),null),u})()},fr=e=>(()=>{var t=pc(),r=t.firstChild,s=r.firstChild,l=s.nextSibling,a=l.firstChild.nextSibling;return a.nextSibling,n(r,()=>e.title,s),n(l,()=>e.count,a),n(t,o(y,{get when(){return e.count>0},get fallback(){return(()=>{var i=xc();return n(i,()=>e.empty),i})()},get children(){return e.children}}),null),t})(),Nn=e=>{const t=ce(()=>Object.entries(e.p.state??{})),r=ce(()=>Object.entries(e.p.metrics??{})),s=()=>t().length+r().length+(e.p.tokens?.provides.length??0)+(e.p.tokens?.requires.length??0)+(e.p.hooks?.length??0)+(e.p.dependsOn?.length??0)>0;return(()=>{var l=Sc(),a=l.firstChild,i=a.firstChild.nextSibling;return n(i,()=>e.p.name),n(a,o(y,{get when(){return e.p.version},get children(){var c=bc();return c.firstChild,n(c,()=>e.p.version,null),c}}),null),n(l,o(y,{get when(){return e.p.dependsOn?.length},get children(){var c=$c();return c.firstChild,n(c,o(re,{get each(){return e.p.dependsOn},children:u=>(()=>{var h=Il();return h.addEventListener("mouseleave",()=>e.onHover(null)),h.addEventListener("mouseenter",()=>e.onHover(u)),n(h,u),q(()=>U(h,`rounded border px-1.5 font-mono text-[0.68rem] ${e.hover===u?"border-kick-500 text-kick-500":"border-border-strong text-text-secondary"}`)),h})()}),null),c}}),null),n(l,o(y,{get when(){return e.p.hooks?.length},get children(){var c=yc();return c.firstChild,n(c,o(re,{get each(){return e.p.hooks},children:u=>(()=>{var h=Cc();return n(h,u),q(()=>F(h,"title",Ic[u]??u)),h})()}),null),c}}),null),n(l,o(y,{get when(){return r().length},get children(){var c=wc();return n(c,o(re,{get each(){return r()},children:([u,h])=>(()=>{var g=Ec(),p=g.firstChild,x=p.nextSibling;return n(g,u,p),n(x,()=>h.toLocaleString()),g})()})),c}}),null),n(l,o(y,{get when(){return t().length},get children(){var c=_c();return n(c,o(re,{get each(){return t()},children:([u,h])=>[(()=>{var g=Mc();return n(g,u),g})(),(()=>{var g=Tc();return n(g,()=>typeof h=="string"?h:JSON.stringify(h)),q(()=>F(g,"title",JSON.stringify(h))),g})()]})),c}}),null),n(l,o(Pn,{label:"provides",get tokens(){return e.p.tokens?.provides??[]},get hover(){return e.hover},get onHover(){return e.onHover}}),null),n(l,o(Pn,{label:"requires",get tokens(){return e.p.tokens?.requires??[]},get hover(){return e.hover},get onHover(){return e.onHover}}),null),n(l,o(y,{get when(){return!s()},get children(){return kc()}}),null),q(()=>U(l,`rounded-lg border bg-surface-1 px-3 py-2 text-[0.78rem] transition-colors ${e.lit?"border-kick-500 shadow-[0_0_0_1px_var(--color-accent)]":"border-border"}`)),l})()},Ic={register:"register() — adds DI bindings before modules load",modules:"modules() — contributes modules (and their routes)",adapters:"adapters() — brings its own adapters",setup:"setup() — mounts modules conditionally at boot",middleware:"middleware() — adds global middleware",contributors:"contributors() — adds ctx values before handlers run",beforeMount:"beforeMount() — runs before global middleware, e.g. to register early routes",onRouteMount:"onRouteMount() — called for each mounted controller",beforeStart:"beforeStart() — runs before the server starts listening",afterStart:"afterStart() — runs once the server is listening",onReady:"onReady() — runs after the app has fully bootstrapped",onResponse:"onResponse() — sees every response",onError:"onError() — sees every unhandled error",onHealthCheck:"onHealthCheck() — reports up / down to /health",shutdown:"shutdown() — cleans up when the app stops"},Pn=e=>o(y,{get when(){return e.tokens.length},get children(){var t=Ac(),r=t.firstChild;return n(r,()=>e.label),n(t,o(re,{get each(){return e.tokens},children:s=>(()=>{var l=Oc();return l.$$click=()=>ql(s),l.addEventListener("mouseleave",()=>e.onHover(null)),l.addEventListener("mouseenter",()=>e.onHover(s)),n(l,s),q(()=>U(l,`rounded border px-1.5 font-mono text-[0.68rem] ${e.hover===s?"border-kick-500 text-kick-500":"border-border-strong text-text-secondary hover:text-text-strong"}`)),l})()}),null),t}}),Nc=e=>(()=>{var t=Rc(),r=t.firstChild.firstChild;r.firstChild;var s=r.nextSibling;return t.addEventListener("mouseleave",()=>e.onHover(null)),t.addEventListener("mouseenter",()=>e.onHover(e.c.key)),n(r,()=>e.c.key,null),n(s,()=>e.c.source),n(t,o(y,{get when(){return e.c.dependsOn.length},get children(){var l=Lc();return l.firstChild,n(l,o(re,{get each(){return e.c.dependsOn},children:a=>(()=>{var i=Il();return n(i,a),q(()=>U(i,`rounded border px-1.5 font-mono ${e.hover===a?"border-kick-500 text-kick-500":"border-border-strong"}`)),i})()}),null),l}}),null),q(()=>U(t,`rounded-lg border bg-surface-1 px-3 py-1.5 text-[0.78rem] ${e.hover===e.c.key?"border-kick-500":"border-border"}`)),t})();we(["click"]);var Pc=d('<button type=button class="underline hover:text-text-body">'),Dc=d('<div class="flex flex-col gap-1.5 border-b border-border p-2"><input type=text placeholder="Search path, controller, handler…"class="w-full bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"><div class="flex items-center gap-1 flex-wrap"></div><div class="text-xs text-text-muted"> routes'),Hc=d('<div class="min-h-0 flex-1 overflow-y-auto">'),Uc=d("<button type=button>"),jc=d("<div class=empty>"),Bc=d('<button type=button class="sticky top-0 z-1 flex w-full cursor-pointer items-center gap-1.5 border-0 border-b border-border bg-surface-2 px-2.5 py-1 text-left text-[0.66rem] font-bold uppercase tracking-wide text-text-muted hover:text-text-body"><span class="inline-block w-2.5"></span> <span class=font-normal>(<!>)'),zc=d('<button type=button><span></span><span class="min-w-0 flex-1 truncate font-mono">'),Fc=d('<span class="shrink-0 font-mono text-[0.66rem] text-text-muted">'),Jc=d('<span class="max-w-[40%] truncate text-[0.66rem] text-text-muted">'),Nl="kickjs-devtools:routes:collapsed";function Kc(){try{const e=JSON.parse(localStorage.getItem(Nl)??"[]");return new Set(Array.isArray(e)?e.filter(t=>typeof t=="string"):[])}catch{return new Set}}var Vc=["ALL","GET","POST","PUT","PATCH","DELETE"];function Gc(e){const t=e.contributors?.length??0;return t>0?`ctx ${t}`:""}function Wc(e){return(e.contributors??[]).map(t=>{const r=t.overrides.length?` (overrides ${t.overrides.map(s=>s.source).join(", ")})`:"";return` ${t.key} — ${t.source}${r}`}).join(`
9
- `)}function Yc(e){return Object.entries(e??{}).map(([t,r])=>r===!0?t:`${t}=${JSON.stringify(r)}`).join(", ")}var Qc=()=>{const[e,t]=P(""),[r,s]=P("ALL"),l=ce(()=>{const v=e().trim().toLowerCase();return se.routes().filter(_=>(r()==="ALL"||_.method.toUpperCase()===r())&&(!v||_.path.toLowerCase().includes(v)||_.controller.toLowerCase().includes(v)||_.handler.toLowerCase().includes(v)))}),a=ce(()=>{const v=new Map;for(const _ of l()){const N=v.get(_.controller)??[];N.push(_),v.set(_.controller,N)}return[...v]}),[i,c]=P(Kc()),u=v=>{c(v);try{localStorage.setItem(Nl,JSON.stringify([...v]))}catch{}},h=v=>{const _=new Set(i());_.delete(v)||_.add(v),u(_)},g=v=>!!e().trim()||r()!=="ALL"||!i().has(v),p=v=>{const _=je();return!!_&&_.method===v.method&&_.path===v.path},x=[(()=>{var v=Dc(),_=v.firstChild,N=_.nextSibling,$=N.nextSibling,m=$.firstChild;return _.$$input=S=>t(S.currentTarget.value),n(N,o(re,{each:Vc,children:S=>(()=>{var b=Uc();return b.$$click=()=>s(S),n(b,S),q(f=>{var w=r()===S,C=`px-2 py-0.5 text-[0.68rem] font-semibold rounded-md border ${r()===S?"bg-kick-500/20 text-kick-500 border-kick-500/30":"bg-surface-2 text-text-secondary border-border-strong hover:text-text-body"}`;return w!==f.e&&F(b,"aria-pressed",f.e=w),C!==f.t&&U(b,f.t=C),f},{e:void 0,t:void 0}),b})()})),n($,o(y,{get when(){return e()||r()!=="ALL"},get children(){return[ae(()=>l().length)," matched · "]}}),m),n($,()=>se.routes().length,m),n($,o(y,{get when(){return a().length>1},get children(){return[" · ",(()=>{var S=Pc();return S.$$click=()=>u(i().size?new Set:new Set(a().map(([b])=>b))),n(S,()=>i().size?"Expand all":"Collapse all"),S})()]}}),null),q(()=>_.value=e()),v})(),(()=>{var v=Hc();return n(v,o(y,{get when(){return a().length>0},get fallback(){return(()=>{var _=jc();return n(_,()=>se.routes().length?"No routes match":"No routes registered"),_})()},get children(){return o(re,{get each(){return a()},children:([_,N])=>[(()=>{var $=Bc(),m=$.firstChild,S=m.nextSibling,b=S.nextSibling,f=b.firstChild.nextSibling;return f.nextSibling,$.$$click=()=>h(_),n(m,()=>g(_)?"▾":"▸"),n($,_,S),n(b,()=>N.length,f),q(()=>F($,"aria-expanded",g(_))),$})(),o(re,{get each(){return g(_)?N:[]},children:$=>(()=>{var m=zc(),S=m.firstChild,b=S.nextSibling;return m.$$click=()=>rr($),n(S,()=>$.method),n(b,()=>$.path),n(m,o(y,{get when(){return Gc($)},children:f=>(()=>{var w=Fc();return n(w,f),w})()}),null),n(m,o(y,{get when(){return Yc($.flags)},children:f=>(()=>{var w=Jc();return n(w,f),w})()}),null),q(f=>{var w=`flex w-full cursor-pointer items-center gap-2 border-0 border-b border-border/50 px-2.5 py-1 text-left text-[0.78rem] text-text-body ${p($)?"bg-accent/12 shadow-[inset_2px_0_0_0_var(--color-accent)]":"bg-transparent hover:bg-surface-hover"}`,C=`${$.controller}.${$.handler}${$.middleware.length?` · middleware: ${$.middleware.join(", ")}`:""}${$.contributors?.length?`
8
+ await fetch(${JSON.stringify(e.url)}, ${s})`}return typeof e.body=="string"&&(t.body=e.body),`await fetch(${JSON.stringify(e.url)}, ${JSON.stringify(t,null,2)})`}function wn(e,t){if(!t?.includes("json"))return e;try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}var at=e=>`kickjs-devtools:runner:${e.method.toUpperCase()} ${e.path}`,Sl=e=>{const t=e.upload&&e.upload.mode!=="none"?e.upload:void 0;return{params:Object.fromEntries(Ht(e.path).map(r=>[r,""])),query:[],headers:[],body:"",bodyMode:t?"form":"raw",form:t?[{key:t.fieldName??"file",value:"",enabled:!0,type:"file"}]:[]}};function Cl(e){return{...e,form:e.form?.map(({files:t,...r})=>r)}}function Ta(e,t,r=30){return[{...t,inputs:Cl(t.inputs)},...e].slice(0,r)}var Aa=e=>_l("",e.path,e.inputs.params,e.inputs.query);function Oa(e,t){for(const[r,s]of Object.entries(e?.paths??{}))if(r.replace(/\{([^}]+)\}/g,":$1")===t.path)return s?.[t.method.toLowerCase()]}function El(e,t){const r=t?.$ref;if(typeof r!="string"||!r.startsWith("#/"))return t;let s=e;for(const l of r.slice(2).split("/"))s=s?.[l];return s}function ot(e,t,r=0){const s=El(e,t);if(!s||r>6)return null;if(s.example!==void 0)return s.example;if(s.default!==void 0)return s.default;if(Array.isArray(s.enum)&&s.enum.length)return s.enum[0];const l=s.oneOf?.[0]??s.anyOf?.[0];if(l)return ot(e,l,r+1);if(s.allOf)return Object.assign({},...s.allOf.map(a=>ot(e,a,r+1)));switch((Array.isArray(s.type)?s.type.find(a=>a!=="null"):s.type)??(s.properties?"object":void 0)){case"object":return Object.fromEntries(Object.entries(s.properties??{}).map(([a,i])=>[a,ot(e,i,r+1)]));case"array":return s.items?[ot(e,s.items,r+1)]:[];case"string":return"";case"integer":case"number":return 0;case"boolean":return!1;default:return null}}function La(e,t){const r=Oa(e,t);if(!r)return;const s={},l=[];for(const i of r.parameters??[]){const c=El(e,i);c?.name&&(c.in==="path"&&c.description&&(s[c.name]=c.description),c.in==="query"&&l.push({name:c.name,required:!!c.required,description:c.description}))}const a=r.requestBody?.content?.["application/json"]?.schema;return{summary:r.summary??r.description,params:s,query:l,...a?{body:JSON.stringify(ot(e,a),null,2)}:{}}}function Ra(e){const{body:t,query:r,params:s}=e.schemas??{};if(!t&&!r&&!s)return;const l=c=>Object.fromEntries(Object.entries(c?.properties??{}).flatMap(([u,f])=>f?.description?[[u,String(f.description)]]:[])),a=new Set(Array.isArray(r?.required)?r.required:[]),i=l(r);return{params:l(s),query:Object.keys(r?.properties??{}).map(c=>({name:c,required:a.has(c),...i[c]?{description:i[c]}:{}})),...t?{body:JSON.stringify(ot(t,t),null,2)}:{}}}function _n(e,t){const r=new Set(e.query.map(a=>a.key)),s=[...e.query,...t.query.filter(a=>!r.has(a.name)).map(a=>({key:a.name,value:"",enabled:a.required}))],l=e.body.trim()||!t.body?e.body:t.body;return{...e,query:s,body:l}}function qa(e,t,r){const s=t.replace(/\\/g,"/").replace(/^(?=[A-Za-z]:)/,"/");return e.replace("{file}",encodeURI(s)).replace("{line}",String(r))}var Ia=["dev","stage","prod"],pt=e=>`${e.method.toUpperCase()} ${e.path}`,ir=e=>Array.isArray(e)?e.filter(t=>!!t&&typeof t=="object"&&typeof t.key=="string"&&typeof t.value=="string"&&typeof t.enabled=="boolean"):[];function Ml(e,t){const r=e,s=(Array.isArray(r?.environments)?r.environments:[]).filter(i=>i&&typeof i.id=="string"&&typeof i.name=="string").map(i=>({id:i.id,name:i.name,headers:ir(i.headers),variables:ir(i.variables),mappings:ir(i.mappings)}));if(s.length===0)return{environments:[{id:"dev",name:"dev",...t,mappings:[]}],activeId:"dev",pins:{}};const l=new Set(s.map(i=>i.id)),a=Object.fromEntries(Object.entries(r?.pins??{}).filter(([,i])=>typeof i=="string"&&l.has(i)));return{environments:s,activeId:l.has(r?.activeId)?r.activeId:s[0].id,pins:a}}function Na(e,t){const r=s=>e.environments.find(l=>l.id===s);return r(e.pins[pt(t)])??r(e.activeId)??e.environments[0]}function Pa(e){const t=new Set(e.environments.map(l=>l.name)),r=Ia.find(l=>!t.has(l));if(r)return r;let s=e.environments.length+1;for(;t.has(`env ${s}`);)s++;return`env ${s}`}function Da(e,t,r){const s=en(r),l=a=>{const i=s[a]??a;return Object.prototype.hasOwnProperty.call(t,i)?t[i]:void 0};return{params:Object.fromEntries(Object.entries(e.params).map(([a,i])=>[a,i||(l(a)??"")])),query:e.query.map(a=>a.enabled&&a.key&&!a.value&&l(a.key)!==void 0?{...a,value:l(a.key)}:a)}}function Tl(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch{return}}var Ha=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">Select a route to try it'),Ua=d('<p class="text-sm text-text-secondary mt-1">'),ja=d('<p class="text-xs text-amber-400 mt-2">No value for <!> in <strong></strong> — <button type=button class=underline>add it to the environment</button>.'),Ba=d('<ol class="flex flex-col gap-1 text-xs">'),za=d('<p class="text-xs text-text-muted mb-2">Set this up before you send. With both filled in, every 2xx response from this route copies the value at the JSON path into that variable of the environment it was sent with — log in once and routes using <code>{{token}}</code> pick it up. New variables start masked. Saved for this route only.'),Fa=d('<div class="flex flex-col sm:flex-row sm:items-center gap-2 text-xs"><input aria-label="JSON path"placeholder="JSON path, e.g. data.accessToken"><input aria-label="Variable name"placeholder="variable, e.g. token"><button type=button>Save now'),Ja=d('<p class="text-xs text-text-muted mt-1"role=status>'),Ka=d('<p class="text-xs text-text-muted mb-3">These apply to every route, not just this one, and save as you type in this browser (kept after the tab closes).'),Va=d(`<div class="grid grid-cols-1 sm:grid-cols-2 gap-3 mt-4"><label class="flex flex-col gap-1 text-xs text-text-muted">Public route flags (comma-separated)<span class=text-[0.7rem]>On routes carrying one of these flags (e.g. <code>auth.public</code> from your auth setup), the environment's default Authorization header starts unticked — a login route needs no token — and is sent only if you tick it under the route's Headers. Names your app uses; the runner adds no flags to the request.</span><input>`),Ga=d('<span class="text-xs text-text-muted"role=status>'),Wa=d('<div class="flex items-center gap-1 mb-2"><button type=button>Copy'),Ya=d('<pre class="text-xs font-mono bg-surface-2 border border-border rounded-lg p-3 overflow-x-auto whitespace-pre-wrap break-all select-text">'),Qa=d('<div class="text-sm text-red-400 bg-red-500/10 border border-red-500/30 rounded-lg p-3">Request failed: '),Xa=d('<ul class="flex flex-col gap-1">'),Za=d("<button type=button>Clear history"),eo=d('<div class="h-full flex flex-col min-h-0"><section class="h-full bg-surface-1 flex flex-col min-h-0"><header class="px-5 py-4 border-b border-border"><div class="flex items-start justify-between gap-4"><div class=min-w-0><div class="flex items-center gap-2"><span></span><h2 class="text-base font-semibold font-mono text-text-body break-all"></h2></div><p class="text-xs text-text-muted mt-1"><button type=button class="underline decoration-dotted hover:text-kick-500"title="Open in editor">.</button></p></div><button type=button class="text-text-muted hover:text-text-strong p-1 text-lg leading-none"aria-label=Close>✕</button></div><div class="flex items-stretch gap-2 mt-3"><div class="flex-1 min-w-0 flex items-center gap-2 font-mono text-xs bg-surface-2 border border-border rounded-lg px-3 py-2 text-text-secondary"><span></span><span class=break-all></span></div><button type=button></button></div><div class="flex items-center gap-2 mt-2 text-xs text-text-muted"><label class="flex items-center gap-2">Environment<select class="bg-surface-2 border border-border-strong rounded-lg px-2 py-1 text-xs text-text-body"><option value>Active (<!>)</option></select></label><button type=button class="underline hover:text-kick-500">Manage…</button></div></header><div class="flex-1 overflow-y-auto px-5 py-3 flex flex-col gap-2">'),to=d("<option>Pinned: "),ro=d('<span class="rounded bg-kick-500/15 px-1.5 text-[0.66rem] text-kick-500"title="Runs before request validation">before validation'),no=d("<span class=text-text-muted>needs "),lo=d("<span class=text-text-muted>overrides "),so=d('<span class="basis-full pl-7 font-mono text-[0.66rem] text-text-muted break-all">'),ao=d('<li class="flex flex-wrap items-baseline gap-x-2 gap-y-0.5 border-b border-border/40 py-1 last:border-0"><span class="w-5 shrink-0 text-right text-text-muted">.</span><span class="font-mono font-semibold text-text-body"></span><span class="rounded bg-surface-2 px-1.5 text-[0.66rem] text-text-muted">'),tn=d('<div class="flex flex-col gap-2">'),oo=d('<ul class="text-xs text-text-muted mt-2 flex flex-col gap-0.5">'),io=d('<div class="mt-3 text-xs"><p class="text-text-muted mb-1">From <strong></strong> — untick to leave one off this route only:'),co=d('<span class="text-xs text-text-muted ml-2">@FileUpload: field <code>'),uo=d('<div class="flex items-center gap-1 mb-2">'),fo=d(`<p class="text-xs text-text-muted mt-2">Sent as multipart/form-data. Picked files aren't saved — pick them again after reopening.`),ho=d('<label class="flex items-center gap-3 text-sm"><span class="font-mono text-text-secondary w-28 shrink-0">:</span><input>'),vo=d("<li><code>"),go=d('<span class="font-sans text-text-muted">(off by default: public route)'),mo=d('<label class="flex items-center gap-2 font-mono text-text-secondary"><input type=checkbox><span>: '),kn=d("<button type=button>"),po=d('<div class="group relative"><textarea placeholder="{ &quot;name&quot;: &quot;value&quot; }">'),xo=d('<div class="flex flex-wrap items-center gap-2"><button type=button>Fill empty inputs from OpenAPI</button><span class="text-[0.7rem] text-text-muted">This route only: adds the query params the spec lists and an example body if the body is empty. Never overwrites what you typed.'),bo=d('<label class="flex flex-col gap-1 text-xs text-text-muted"><span class=text-[0.7rem]></span><input>'),$o=d('<details class="text-xs mb-2"><summary class="cursor-pointer text-text-secondary">Response headers (<!>)</summary><table class=mt-2><tbody>'),yo=d('<div class="group relative"><pre class="text-xs font-mono bg-surface-2 border border-border rounded-lg p-3 overflow-x-auto max-h-[50vh] whitespace-pre-wrap break-all">'),wo=d('<p class="mt-1 text-xs text-text-muted">Body truncated to <!> characters.'),_o=d('<span class="flex items-center gap-3">Response<span> </span><span class="text-text-muted text-xs font-normal"> ms'),ko=d('<tr><td class="font-mono text-text-secondary pr-4"></td><td class="font-mono break-all">'),So=d('<p class="text-xs text-text-muted">Nothing sent yet.'),Co=d('<li><button type=button class="w-full flex items-center gap-2 text-xs text-left rounded px-2 py-1 hover:bg-surface-2"title="Open with these inputs"><span></span><span class="font-mono truncate flex-1"></span><span></span><span class="text-text-muted w-16 text-right"> ms</span><span class="text-text-muted w-16 text-right">'),Eo=d('<span class="text-xs font-normal text-text-muted">(<!>)'),Mo=d('<details class="border border-border rounded-lg bg-surface-1 group"><summary class="cursor-pointer select-none px-3 py-2 text-sm font-semibold text-text-body flex items-center gap-2"><span class="text-text-muted transition-transform group-open:rotate-90">▸</span></summary><div class="px-3 pb-3">'),To=d("<label><input type=file class=sr-only>"),Ao=d('<div class="flex items-center gap-2"><input type=checkbox aria-label=Enabled><select aria-label="Field type"><option value=text>Text</option><option value=file>File</option></select><input placeholder=name><button type=button aria-label="Remove field"title="Remove field">✕'),Oo=d("<input placeholder=value>"),Lo=d('<button type=button class="shrink-0 p-1 text-text-muted hover:text-text-body">'),Ro=d("<textarea>"),qo=d('<p class="text-xs text-text-muted">Masked — show it to read or edit.'),Io=d('<div><div class="flex items-center gap-2"><button type=button data-handle title="Drag, or ↑ / ↓, to reorder">⠿</button><input type=checkbox aria-label=Enabled><input><input autocomplete=off><div><button type=button class="shrink-0 p-1 text-text-muted hover:text-text-body"></button><button type=button class="shrink-0 p-1 text-text-muted hover:text-text-body"aria-label="Edit the whole value"title="Edit the whole value"></button><button type=button class="shrink-0 p-1 text-text-muted hover:text-text-body"aria-label="Remove row"title="Remove row">✕'),No=d(`<div class="fixed inset-0 z-70 flex justify-end bg-black/45"><section role=dialog aria-modal=true aria-label=Environments class="h-full w-full max-w-2xl bg-surface-1 border-l border-border flex flex-col"><header class="px-5 py-4 border-b border-border flex items-start justify-between gap-4"><div><h2 class="text-base font-semibold text-text-body">Environments</h2><p class="text-xs text-text-muted mt-1">What requests carry — default headers, <code>{{variables}}</code> and param mappings. One is active; a route can be pinned to another from its runner.</p><p class="text-xs text-text-muted mt-1">Changes save as you type — there is no Save button. Where they're kept depends on <strong class="font-semibold text-text-secondary">Remember on this browser</strong> below.</p></div><button type=button class="text-text-muted hover:text-text-strong p-1 text-lg leading-none"aria-label=Close>✕</button></header><div class="flex-1 overflow-y-auto px-5 py-4 flex flex-col gap-4"><label class="flex items-start gap-2 text-sm"><input type=checkbox class=mt-1><span>Remember on this browser<span class="block text-xs text-text-muted"></span></span></label><div class="flex flex-wrap items-center gap-1"role=tablist aria-label=Environment><button type=button>+ Add</button></div><div class="flex flex-wrap items-end gap-2"><label class="flex flex-col gap-1 text-xs text-text-muted grow">Name<input></label><button type=button></button><button type=button>Duplicate</button><button type=button>Delete</button></div><div><h3 class="text-xs font-semibold text-text-secondary mb-1">Default headers</h3><p class="text-xs text-text-muted mb-2">Sent with every route using this environment. A route can untick any of them under its own Headers; on routes carrying a public flag, Authorization starts unticked.</p></div><div><h3 class="text-xs font-semibold text-text-secondary mb-1">Variables</h3><p class="text-xs text-text-muted mb-2"><code>{{name}}</code> in any param, query, header or body value — e.g. <code>Authorization: Bearer {{token}}</code>. A variable named like a path or query param also fills it when it's left empty.</p><p class="text-xs text-text-muted mb-2">Type values here, or let a route fill one: a route's <strong>Save to variable</strong> copies a value from its response (say, the token a login returns) into this environment after every successful send. New variables it adds start masked.</p></div><div><h3 class="text-xs font-semibold text-text-secondary mb-1">Param mappings</h3><p class="text-xs text-text-muted mb-2">For names that differ: an empty <code>:tenantId</code> takes the variable <code>orgId</code>. Typed values always win.`),Po=d("<button type=button role=tab>"),Do=d('<div class="absolute top-2 right-2 flex gap-1 transition-opacity sm:opacity-0 sm:group-hover:opacity-100 sm:focus-within:opacity-100">'),Ho=d('<button type=button class="px-2 py-0.5 text-[0.68rem] font-semibold rounded-md border bg-surface-1 text-text-secondary border-border-strong hover:text-text-body"title="Pretty-print the JSON body">'),Uo=d('<button type=button class="px-2 py-0.5 text-[0.68rem] font-semibold rounded-md border bg-surface-1 text-text-secondary border-border-strong hover:text-text-body">'),Or="kickjs-devtools:runner:defaults",Lr="kickjs-devtools:runner:variables",jt="kickjs-devtools:runner:environments",Sn="kickjs-devtools:runner:settings",Al="kickjs-devtools:runner:remember",Cn="kickjs-devtools:runner:history",cr=2e5,[je,Rr]=P(null),ht=0,xt=null,[Ol,En]=P({});function jo(e){e in De(Ol)||(En(t=>({...t,[e]:void 0})),fetch(e,{credentials:"same-origin"}).then(t=>t.ok?t.json():null).catch(()=>null).then(t=>En(r=>({...r,[e]:t}))))}var[Bo,zo]=P(0);function dr(){const e=()=>Ll()?localStorage:sessionStorage,t=Ml(yt(e,jt,null),{headers:Yt(e,Or),variables:Yt(e,Lr)}),r=t.environments.find(s=>s.id===t.activeId)??t.environments[0];return en(r.variables)}function rr(e,t){if(!e.offPort){if(t){const r=yt(()=>localStorage,at(e),Sl(e));xt={...r,params:{...r.params,...t}}}Rr(e),zo(r=>r+1),ft("routes")}}function yt(e,t,r){try{const s=e().getItem(t);return s?{...r,...JSON.parse(s)}:r}catch{return r}}function Yt(e,t){try{const r=JSON.parse(e().getItem(t)??"[]");return Array.isArray(r)?r:[]}catch{return[]}}function ur(e,t){try{e().removeItem(t)}catch{}}function Ll(){try{return localStorage.getItem(Al)==="true"}catch{return!1}}function vt(e,t,r){try{e().setItem(t,JSON.stringify(r))}catch{}}var Mn=e=>e.filter(t=>t.enabled&&t.key).length,Fo=()=>{const[e,t]=P(null),[r,s]=P(Ll()),l=()=>r()?localStorage:sessionStorage,a=()=>r()?sessionStorage:localStorage,[i,c]=P(Ml(yt(l,jt,null),{headers:Yt(l,Or),variables:Yt(l,Lr)})),[u,f]=P(!1),g=ce(()=>{const J=je();return J?Na(i(),J):i().environments[0]}),p=(J,de)=>c(ge=>({...ge,environments:ge.environments.map(Ce=>Ce.id===J?{...Ce,...de}:Ce)})),x=()=>e()?.capture??{path:"",name:""},v=J=>B({capture:J}),[_,N]=P(null),[b,m]=P(yt(()=>localStorage,Sn,pa)),[S,$]=P(!1),[h,w]=P(!1),[C,I]=P(null),[H,D]=P(null),[E,T]=P(null),[O,j]=P("curl"),[k,A]=P((()=>{try{const J=JSON.parse(localStorage.getItem(Cn)??"[]");return Array.isArray(J)?J:[]}catch{return[]}})()),[W,V]=P(null),[z,L]=P(!1),ie=ce(()=>{const J=je();if(!J)return;const de=Ol()[b().openApiUrl];return(de?La(de,J):void 0)??Ra(J)});let R=null;qe(()=>{const J=je();if(Bo(),ht++,!J)return;let de=!1;try{de=localStorage.getItem(at(J))===null}catch{}const ge=xt??yt(()=>localStorage,at(J),Sl(J));xt=null;const Ce=Object.fromEntries(Ht(J.path).map(Re=>[Re,ge.params[Re]??""]));R=at(J),t({...ge,params:Ce}),L(de),N(null),V(null),I(null),D(null),$(!1),w(!1)}),qe(()=>{const J=je(),de=e();J&&de&&R===at(J)&&vt(()=>localStorage,at(J),Cl(de))}),qe(()=>{vt(l,jt,i()),ur(a,jt);for(const J of[l,a])ur(J,Or),ur(J,Lr);vt(()=>localStorage,Al,r())}),qe(()=>vt(()=>localStorage,Sn,b())),qe(()=>vt(()=>localStorage,Cn,k())),qe(()=>{je()&&jo(b().openApiUrl)}),qe(()=>{const J=ie();!J||!z()||(L(!1),t(de=>de&&_n(de,J)))});const M=ce(()=>{const J=je(),de=e();return!J||!de?null:ka({route:J,inputs:de,defaults:g().headers,variables:en(g().variables),mappings:g().mappings,settings:b(),origin:window.location.origin,cookies:document.cookie})}),Z=()=>Rr(null),B=J=>{$(!1),t(de=>de&&{...de,...J})};async function K(){const J=M();if(!J)return;if($a(J.method)&&!S()){$(!0);return}$(!1),w(!0),D(null);const de=performance.now(),ge=ht,Ce=je(),Re=e(),ze=g().id,He=be=>A(Ne=>Ta(Ne,{at:Date.now(),method:Ce.method.toUpperCase(),path:Ce.path,inputs:Re,ms:Math.round(performance.now()-de),...be}));try{const be=await fetch(J.url,{method:J.method,headers:J.headers,body:J.body,credentials:"same-origin"}),Ne=await be.text();if(He({status:be.status}),ge!==ht)return;I({status:be.status,statusText:be.statusText,ms:Math.round(performance.now()-de),headers:[...be.headers.entries()],raw:Ne,body:wn(Ne.slice(0,cr),be.headers.get("content-type")),truncated:Ne.length>cr}),be.ok&&Re.capture&&te(Ne,Re.capture,ze)}catch(be){if(He({error:be instanceof Error?be.message:String(be)}),ge!==ht)return;I(null),D(be instanceof Error?be.message:String(be))}finally{ge===ht&&w(!1)}}const Q=ce(()=>{const J=M();return J?O()==="curl"?Ea(J):Ma(J):""});async function ne(){try{await navigator.clipboard.writeText(Q()),T("Copied")}catch{T("Copy failed — select the text instead")}setTimeout(()=>T(null),1500)}function ue(){const J=C();J&&te(J.raw,x(),g().id)}function te(J,de,ge){const Ce=de.path,Re=de.name;if(!Ce.trim()||!Re.trim())return;let ze;try{ze=JSON.parse(J)}catch{N("The response is not JSON");return}const He=_a(ze,Ce.trim());if(He===void 0){N(`Nothing at "${Ce.trim()}"`);return}const be=Re.trim(),Ne=i().environments.find(Ue=>Ue.id===ge);if(!Ne)return;const tt=Ne.variables;p(Ne.id,{variables:tt.some(Ue=>Ue.key===be)?tt.map(Ue=>Ue.key===be?{...Ue,value:He,enabled:!0}:Ue):[...tt,{key:be,value:He,enabled:!0,secret:!0}]}),N(`Saved {{${be}}} in ${Ne.name}`)}function he(J){const de=se.routes().find(ge=>ge.method.toUpperCase()===J.method&&ge.path===J.path);de&&(xt=J.inputs,de===je()?(xt=null,B(J.inputs)):Rr(de))}async function Oe(){const J=je();if(J){V(null);try{const de=await ye.source(J.controller,J.handler);window.location.href=qa(b().editorUrl,de.file,de.line),V(`${de.relative}:${de.line}`)}catch{V("Source not found under src/")}}}const Le=()=>{const J=je();return J?wl(J,b()):!1};return o(y,{get when(){return je()},get fallback(){return Ha()},children:J=>(()=>{var de=eo(),ge=de.firstChild,Ce=ge.firstChild,Re=Ce.firstChild,ze=Re.firstChild,He=ze.firstChild,be=He.firstChild,Ne=be.nextSibling,tt=He.nextSibling,Ue=tt.firstChild,Zl=Ue.firstChild,es=ze.nextSibling,rn=Re.nextSibling,nn=rn.firstChild,nr=nn.firstChild,ts=nr.nextSibling,At=nn.nextSibling,ln=rn.nextSibling.firstChild,Ot=ln.firstChild.nextSibling,sn=Ot.firstChild,an=sn.firstChild.nextSibling;an.nextSibling;var rs=ln.nextSibling,Ye=Ce.nextSibling;return n(de,o(y,{get when(){return u()},get children(){return o(Ko,{get state(){return i()},setState:c,get selectedId(){return g().id},get remember(){return r()},setRemember:s,onClose:()=>f(!1)})}}),ge),n(be,()=>J().method.toUpperCase()),n(Ne,()=>J().path),Ue.$$click=Oe,n(Ue,()=>J().controller,Zl),n(Ue,()=>J().handler,null),n(tt,o(y,{get when(){return W()},get children(){return[" · ",ae(()=>W())]}}),null),n(tt,o(y,{get when(){return Le()},get children(){return[" ","· public route — default Authorization off unless ticked under Headers"]}}),null),n(ze,o(y,{get when(){return ie()?.summary},get children(){var G=Ua();return n(G,()=>ie().summary),G}}),null),es.$$click=Z,n(nr,()=>J().method.toUpperCase()),n(ts,()=>M()?.url),At.$$click=K,n(At,(()=>{var G=ae(()=>!!h());return()=>G()?"Sending…":ae(()=>!!S())()?`Confirm ${J().method.toUpperCase()}`:"Send"})()),Ot.addEventListener("change",G=>{const Y=G.currentTarget.value,ee=pt(J());c(le=>{const oe={...le.pins};return Y?oe[ee]=Y:delete oe[ee],{...le,pins:oe}})}),n(sn,()=>i().environments.find(G=>G.id===i().activeId)?.name,an),n(Ot,o(re,{get each(){return i().environments},children:G=>(()=>{var Y=to();return Y.firstChild,n(Y,()=>G.name,null),q(()=>Y.value=G.id),Y})()}),null),rs.$$click=()=>f(!0),n(Ce,o(y,{get when(){return ae(()=>!!M())()&&yn(M()).length>0},get children(){var G=ja(),Y=G.firstChild.nextSibling,ee=Y.nextSibling.nextSibling,le=ee.nextSibling.nextSibling;return n(G,()=>yn(M()).map(oe=>`{{${oe}}}`).join(", "),Y),n(ee,()=>g().name),le.$$click=()=>f(!0),G}}),null),n(Ye,o(y,{get when(){return J().contributors?.length},get children(){return o(Fe,{title:"Context contributors",get count(){return J().contributors.length},get children(){var G=Ba();return n(G,o(re,{get each(){return J().contributors},children:(Y,ee)=>(()=>{var le=ao(),oe=le.firstChild,fe=oe.firstChild,pe=oe.nextSibling,Ee=pe.nextSibling;return n(oe,()=>ee()+1,fe),n(pe,()=>Y.key),n(Ee,()=>Y.source),n(le,o(y,{get when(){return Y.beforeValidation},get children(){return ro()}}),null),n(le,o(y,{get when(){return Y.dependsOn.length},get children(){var _e=no();return _e.firstChild,n(_e,()=>Y.dependsOn.join(", "),null),_e}}),null),n(le,o(y,{get when(){return Y.overrides.length},get children(){var _e=lo();return _e.firstChild,n(_e,()=>Y.overrides.map(rt=>rt.source).join(", "),null),_e}}),null),n(le,o(y,{get when(){return Y.label},get children(){var _e=so();return n(_e,()=>Y.label),_e}}),null),le})()})),G}})}}),null),n(Ye,o(y,{get when(){return e()},children:G=>[o(y,{get when(){return Ht(J().path).length>0},get children(){return o(Fe,{title:"Path params",open:!0,get children(){var Y=tn();return n(Y,o(re,{get each(){return Ht(J().path)},children:ee=>(()=>{var le=ho(),oe=le.firstChild;oe.firstChild;var fe=oe.nextSibling;return n(oe,ee,null),fe.$$input=pe=>B({params:{...G().params,[ee]:pe.currentTarget.value}}),U(fe,Pe),q(()=>F(fe,"placeholder",ie()?.params[ee])),q(()=>fe.value=G().params[ee]??""),le})()})),Y}})}}),o(Fe,{title:"Query",get count(){return Mn(G().query)},get children(){return[o(wt,{get rows(){return G().query},onChange:Y=>B({query:Y}),get context(){return pt(J())}}),o(y,{get when(){return ie()?.query.length},get children(){var Y=oo();return n(Y,o(re,{get each(){return ie().query},children:ee=>(()=>{var le=vo(),oe=le.firstChild;return n(oe,()=>ee.name),n(le,()=>ee.required?" (required)":"",null),n(le,(()=>{var fe=ae(()=>!!ee.description);return()=>fe()?` — ${ee.description}`:""})(),null),le})()})),Y}})]}}),o(Fe,{title:"Headers",get count(){return Mn(G().headers)},get children(){return[o(wt,{get rows(){return G().headers},onChange:Y=>B({headers:Y}),get context(){return pt(J())}}),o(y,{get when(){return g().headers.some(Y=>Y.enabled&&Y.key)},get children(){var Y=io(),ee=Y.firstChild.firstChild.nextSibling;return n(ee,()=>g().name),n(Y,o(re,{get each(){return g().headers.filter(le=>le.enabled&&le.key)},children:le=>{const oe=le.key.toLowerCase(),fe=()=>yl(J(),G(),b(),oe);return(()=>{var pe=mo(),Ee=pe.firstChild,_e=Ee.nextSibling,rt=_e.firstChild;return Ee.addEventListener("change",Ge=>B({defaultHeaders:{...G().defaultHeaders,[oe]:Ge.currentTarget.checked}})),n(_e,()=>le.key,rt),n(_e,(()=>{var Ge=ae(()=>!!le.secret);return()=>Ge()?"••••••":le.value})(),null),n(pe,o(y,{get when(){return ae(()=>!!(oe==="authorization"&&Le()))()&&G().defaultHeaders?.[oe]===void 0},get children(){return go()}}),null),q(()=>U(_e,fe()?"":"line-through text-text-muted")),q(()=>Ee.checked=fe()),pe})()}}),null),Y}})]}}),o(y,{get when(){return Ar(J().method)},get children(){return o(Fe,{title:"Body",open:!0,get children(){return[(()=>{var Y=uo();return n(Y,o(re,{each:[["raw","Raw"],["form","Form data"]],children:([ee,le])=>(()=>{var oe=kn();return oe.$$click=()=>B({bodyMode:ee}),n(oe,le),q(fe=>{var pe=(G().bodyMode??"raw")===ee,Ee=`px-3 py-1 text-xs font-semibold rounded-lg border transition-colors ${(G().bodyMode??"raw")===ee?"bg-kick-500/20 text-kick-500 border-kick-500/30":"bg-surface-2 text-text-secondary border-border-strong hover:text-text-body"}`;return pe!==fe.e&&F(oe,"aria-pressed",fe.e=pe),Ee!==fe.t&&U(oe,fe.t=Ee),fe},{e:void 0,t:void 0}),oe})()}),null),n(Y,o(y,{get when(){return ae(()=>!!J().upload)()&&J().upload.mode!=="none"},get children(){var ee=co(),le=ee.firstChild.nextSibling;return n(le,()=>J().upload.fieldName??"file"),n(ee,(()=>{var oe=ae(()=>J().upload.mode==="array");return()=>oe()?`, up to ${J().upload.maxCount??10} files`:", one file"})(),null),ee}}),null),Y})(),o(y,{get when(){return G().bodyMode==="form"},get fallback(){return(()=>{var Y=po(),ee=Y.firstChild;return ee.$$input=le=>B({body:le.currentTarget.value}),U(ee,`${Pe} font-mono min-h-40`),n(Y,o(Tn,{get children(){return o(y,{get when(){return G().body.trim()},get children(){return[o(Go,{text:()=>G().body,onFormat:le=>B({body:le})}),o(An,{text:()=>G().body,label:"Copy body"})]}})}}),null),q(()=>ee.value=G().body),Y})()},get children(){return[o(Jo,{get rows(){return G().form??[]},get multiple(){return J().upload?.mode==="array"},onChange:Y=>B({form:Y})}),fo()]}})]}})}})]}),null),n(Ye,o(Fe,{title:"Save to variable",get open(){return!!(x().path||x().name)},get count(){return x().path&&x().name?1:void 0},get children(){return[za(),(()=>{var G=Fa(),Y=G.firstChild,ee=Y.nextSibling,le=ee.nextSibling;return Y.$$input=oe=>v({...x(),path:oe.currentTarget.value}),U(Y,Pe),ee.$$input=oe=>v({...x(),name:oe.currentTarget.value}),U(ee,Pe),le.$$click=ue,U(le,`${Qe} shrink-0`),q(oe=>{var fe=!C(),pe=C()?"Copy from the response shown now":"Send the request first";return fe!==oe.e&&(le.disabled=oe.e=fe),pe!==oe.t&&F(le,"title",oe.t=pe),oe},{e:void 0,t:void 0}),q(()=>Y.value=x().path),q(()=>ee.value=x().name),G})(),o(y,{get when(){return _()},get children(){var G=Ja();return n(G,_),G}})]}}),null),n(Ye,o(Fe,{title:"Settings",get children(){return[Ka(),o(y,{get when(){return ie()},children:G=>(()=>{var Y=xo(),ee=Y.firstChild;return ee.$$click=()=>B(_n(e(),G())),U(ee,Qe),Y})()}),(()=>{var G=Va(),Y=G.firstChild.firstChild.nextSibling.nextSibling;return Y.addEventListener("change",ee=>m({...b(),publicFlag:Tr(ee.currentTarget.value)})),U(Y,Pe),n(G,o(re,{each:[["csrfCookie","CSRF cookie","For csrf() / csrfGuard(): on POST, PUT, PATCH and DELETE the runner reads this cookie…"],["csrfHeader","CSRF header","…and sends its value in this header, unless the route already sets it."],["openApiUrl","OpenAPI spec URL","Where the Swagger adapter serves the spec. A route with nothing saved starts from its examples."],["editorUrl","Editor link ({file}, {line})","What the handler link under the route's title opens; {file} and {line} are filled in."]],children:([ee,le,oe])=>(()=>{var fe=bo(),pe=fe.firstChild,Ee=pe.nextSibling;return n(fe,le,pe),n(pe,oe),Ee.$$input=_e=>m({...b(),[ee]:_e.currentTarget.value}),U(Ee,Pe),q(()=>Ee.value=b()[ee]),fe})()}),null),q(()=>Y.value=Tr(b().publicFlag).join(", ")),G})()]}}),null),n(Ye,o(Fe,{title:"Code snippet",get children(){return[(()=>{var G=Wa(),Y=G.firstChild;return n(G,o(re,{each:["curl","fetch"],children:ee=>(()=>{var le=kn();return le.$$click=()=>j(ee),n(le,ee),q(oe=>{var fe=O()===ee,pe=`px-3 py-1 text-xs font-semibold rounded-lg border transition-colors ${O()===ee?"bg-kick-500/20 text-kick-500 border-kick-500/30":"bg-surface-2 text-text-secondary border-border-strong hover:text-text-body"}`;return fe!==oe.e&&F(le,"aria-pressed",oe.e=fe),pe!==oe.t&&U(le,oe.t=pe),oe},{e:void 0,t:void 0}),le})()}),Y),Y.$$click=ne,U(Y,`${Qe} ml-auto`),n(G,o(y,{get when(){return E()},get children(){var ee=Ga();return n(ee,E),ee}}),null),G})(),(()=>{var G=Ya();return n(G,Q),G})()]}}),null),n(Ye,o(y,{get when(){return H()},get children(){var G=Qa();return G.firstChild,n(G,H,null),G}}),null),n(Ye,o(y,{get when(){return C()},children:G=>o(Fe,{open:!0,get title(){return(()=>{var Y=_o(),ee=Y.firstChild.nextSibling,le=ee.firstChild,oe=ee.nextSibling,fe=oe.firstChild;return n(ee,()=>G().status,le),n(ee,()=>G().statusText,null),n(oe,()=>G().ms,fe),q(()=>U(ee,Ct(G().status))),Y})()},get children(){return[(()=>{var Y=$o(),ee=Y.firstChild,le=ee.firstChild.nextSibling;le.nextSibling;var oe=ee.nextSibling.firstChild;return n(ee,()=>G().headers.length,le),n(oe,o(re,{get each(){return G().headers},children:([fe,pe])=>(()=>{var Ee=ko(),_e=Ee.firstChild,rt=_e.nextSibling;return n(_e,fe),n(rt,pe),Ee})()})),Y})(),(()=>{var Y=yo(),ee=Y.firstChild;return n(ee,()=>G().body||"(empty body)"),n(Y,o(y,{get when(){return G().raw},get children(){return o(Tn,{get children(){return o(An,{label:"Copy response",text:()=>wn(G().raw,G().headers.find(([le])=>le==="content-type")?.[1]??null)})}})}}),null),Y})(),o(y,{get when(){return G().truncated},get children(){var Y=wo(),ee=Y.firstChild.nextSibling;return ee.nextSibling,n(Y,()=>cr.toLocaleString(),ee),Y}})]}})}),null),n(Ye,o(Fe,{title:"History",get count(){return k().length},get children(){return o(y,{get when(){return k().length>0},get fallback(){return So()},get children(){return[(()=>{var G=Xa();return n(G,o(re,{get each(){return k()},children:Y=>(()=>{var ee=Co(),le=ee.firstChild,oe=le.firstChild,fe=oe.nextSibling,pe=fe.nextSibling,Ee=pe.nextSibling,_e=Ee.firstChild,rt=Ee.nextSibling;return le.$$click=()=>he(Y),n(oe,()=>Y.method),n(fe,()=>Aa(Y)),n(pe,()=>Y.status??"failed"),n(Ee,()=>Y.ms,_e),n(rt,()=>new Date(Y.at).toLocaleTimeString()),q(Ge=>{var on=`font-bold w-14 shrink-0 ${Xe(Y.method)}`,cn=Y.status?Ct(Y.status):"dt-pill dt-pill-err";return on!==Ge.e&&U(oe,Ge.e=on),cn!==Ge.t&&U(pe,Ge.t=cn),Ge},{e:void 0,t:void 0}),ee})()})),G})(),(()=>{var G=Za();return G.$$click=()=>A([]),U(G,`${Qe} mt-2`),G})()]}})}}),null),q(G=>{var Y=`Try ${J().method} ${J().path}`,ee=`text-xs font-bold ${Xe(J().method)}`,le=`font-bold ${Xe(J().method)}`,oe=h(),fe=`shrink-0 px-4 text-sm font-semibold rounded-lg border transition-colors ${S()?"bg-red-500/20 text-red-400 border-red-500/40":"bg-kick-500/20 text-kick-500 border-kick-500/30 hover:bg-kick-500/30"}`;return Y!==G.e&&F(ge,"aria-label",G.e=Y),ee!==G.t&&U(be,G.t=ee),le!==G.a&&U(nr,G.a=le),oe!==G.o&&(At.disabled=G.o=oe),fe!==G.i&&U(At,G.i=fe),G},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),q(()=>Ot.value=i().pins[pt(J())]??""),de})()})},Fe=e=>(()=>{var t=Mo(),r=t.firstChild;r.firstChild;var s=r.nextSibling;return n(r,()=>e.title,null),n(r,o(y,{get when(){return e.count},get children(){var l=Eo(),a=l.firstChild.nextSibling;return a.nextSibling,n(l,()=>e.count,a),l}}),null),n(s,()=>e.children),q(()=>t.open=e.open),t})(),Jo=e=>{const t=()=>[...e.rows,{key:"",value:"",enabled:!0,type:"text"}],r=(s,l)=>{const a=t().map((i,c)=>c===s?{...i,...l}:i);e.onChange(a.filter(i=>i.key||i.value||i.files?.length))};return(()=>{var s=tn();return n(s,o(Fr,{get each(){return t()},children:(l,a)=>(()=>{var i=Ao(),c=i.firstChild,u=c.nextSibling,f=u.nextSibling,g=f.nextSibling;return c.addEventListener("change",p=>r(a,{enabled:p.currentTarget.checked})),u.addEventListener("change",p=>r(a,{type:p.currentTarget.value,value:"",files:[]})),U(u,Vo),f.$$input=p=>r(a,{key:p.currentTarget.value}),U(f,Pe),n(i,o(y,{get when(){return l().type==="file"},get fallback(){return(()=>{var p=Oo();return p.$$input=x=>r(a,{value:x.currentTarget.value}),U(p,Pe),q(()=>p.value=l().value),p})()},get children(){var p=To(),x=p.firstChild;return U(p,`${Pe} cursor-pointer truncate`),x.addEventListener("change",v=>r(a,{files:[...v.currentTarget.files??[]]})),n(p,(()=>{var v=ae(()=>!!l().files?.length);return()=>v()?l().files.map(_=>_.name).join(", "):"Choose file…"})(),null),q(()=>x.multiple=e.multiple),p}}),g),g.$$click=()=>e.onChange(e.rows.filter((p,x)=>x!==a)),q(()=>U(g,`shrink-0 p-1 text-text-muted hover:text-text-body ${a===e.rows.length?"invisible":""}`)),q(()=>c.checked=l().enabled),q(()=>u.value=l().type),q(()=>f.value=l().key),i})()})),s})()},wt=e=>{const t=()=>[...e.rows,{key:"",value:"",enabled:!0}],r=(b,m)=>{const S=t().map(($,h)=>h===b?{...$,...m}:$);e.onChange(S.filter($=>$.key||$.value))},[s,l]=P(new Set),[a,i]=P(null);qe(_r(()=>e.context,()=>{l(new Set),i(null)},{defer:!0}));const c=b=>{const m=new Set(s());m.delete(b)||m.add(b),l(m)},u=b=>!!t()[b]?.secret&&!s().has(b),f=b=>{l(new Set),i(null),e.onChange(e.rows.filter((m,S)=>S!==b))},[g,p]=P(null),x=(b,m)=>{b===m||m<0||m>=e.rows.length||(l(new Set),i(null),e.onChange(ma(e.rows,b,m)))},v=b=>{const m=g();p(null),m!==null&&x(m,b)};let _;const N=(b,m)=>{const S=b.key==="ArrowUp"?m-1:b.key==="ArrowDown"?m+1:null;S===null||S<0||S>=e.rows.length||(b.preventDefault(),x(m,S),_?.querySelectorAll("[data-handle]")[S]?.focus())};return(()=>{var b=tn();return et(m=>_=m,b),n(b,o(Fr,{get each(){return t()},children:(m,S)=>(()=>{var $=Io(),h=$.firstChild.firstChild,w=h.nextSibling,C=w.nextSibling,I=C.nextSibling,H=I.nextSibling,D=H.firstChild,E=D.nextSibling,T=E.nextSibling;return $.addEventListener("drop",O=>{O.preventDefault(),v(S)}),$.addEventListener("dragover",O=>{g()!==null&&S<e.rows.length&&O.preventDefault()}),h.addEventListener("dragend",()=>p(null)),h.addEventListener("dragstart",O=>{p(S),O.dataTransfer?.setData("text/plain",String(S))}),h.$$keydown=O=>N(O,S),F(h,"aria-label",`Move row ${S+1}: drag, or press up or down arrow`),w.addEventListener("change",O=>r(S,{enabled:O.currentTarget.checked})),C.$$input=O=>r(S,{key:O.currentTarget.value}),U(C,Pe),I.$$input=O=>r(S,{value:O.currentTarget.value}),U(I,Pe),n(H,o(y,{get when(){return m().secret},get children(){var O=Lo();return O.$$click=()=>c(S),n(O,o(Je,{name:"eye",size:14})),q(j=>{var k=!u(S),A=u(S)?"Show value":"Hide value",W=u(S)?"Show value":"Hide value";return k!==j.e&&F(O,"aria-pressed",j.e=k),A!==j.t&&F(O,"aria-label",j.t=A),W!==j.a&&F(O,"title",j.a=W),j},{e:void 0,t:void 0,a:void 0}),O}}),D),D.$$click=()=>r(S,{secret:!m().secret}),n(D,o(Je,{get name(){return m().secret?"lock":"unlock"},size:14})),E.$$click=()=>i(a()===S?null:S),n(E,o(Je,{name:"maximize",size:14})),T.$$click=()=>f(S),n($,o(y,{get when(){return a()===S},get children(){return[(()=>{var O=Ro();return O.$$input=j=>r(S,{value:j.currentTarget.value}),U(O,`${Pe} font-mono text-xs min-h-24 break-all`),q(j=>{var k=`${m().key||"value"} — whole value`,A=u(S);return k!==j.e&&F(O,"aria-label",j.e=k),A!==j.t&&(O.readOnly=j.t=A),j},{e:void 0,t:void 0}),q(()=>O.value=u(S)?"•".repeat(Math.min(m().value.length,64)):m().value),O})(),o(y,{get when(){return u(S)},get children(){return qo()}})]}}),null),q(O=>{var j=`flex flex-col gap-1 ${g()===S?"opacity-50":""}`,k=S<e.rows.length,A=S<e.rows.length?0:-1,W=`shrink-0 select-none border-0 bg-transparent p-0 text-text-muted ${S<e.rows.length?"cursor-grab":"invisible"}`,V=e.keyPlaceholder??"name",z=u(S)?"password":"text",L=e.valuePlaceholder??"value",ie=`flex items-center ${S===e.rows.length?"invisible":""}`,R=!!m().secret,M=m().secret?"Secret: masked":"Mark as secret",Z=m().secret?"Secret: masked — click to stop masking":"Mark as secret",B=a()===S;return j!==O.e&&U($,O.e=j),k!==O.t&&F(h,"draggable",O.t=k),A!==O.a&&F(h,"tabindex",O.a=A),W!==O.o&&U(h,O.o=W),V!==O.i&&F(C,"placeholder",O.i=V),z!==O.n&&F(I,"type",O.n=z),L!==O.s&&F(I,"placeholder",O.s=L),ie!==O.h&&U(H,O.h=ie),R!==O.r&&F(D,"aria-pressed",O.r=R),M!==O.d&&F(D,"aria-label",O.d=M),Z!==O.l&&F(D,"title",O.l=Z),B!==O.u&&F(E,"aria-expanded",O.u=B),O},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0}),q(()=>w.checked=m().enabled),q(()=>C.value=m().key),q(()=>I.value=m().value),$})()})),b})()},Ko=e=>{const[t,r]=P(e.selectedId),s=()=>e.state.environments.find(f=>f.id===t())??e.state.environments[0],l=f=>e.setState(g=>({...g,environments:g.environments.map(p=>p.id===s().id?{...p,...f}:p)})),a=f=>f.map(g=>({...g})),i=f=>{const g=`env-${Date.now().toString(36)}`;e.setState(p=>({...p,environments:[...p.environments,{id:g,name:f?`${f.name} copy`:Pa(p),headers:f?a(f.headers):[],variables:f?a(f.variables):[],mappings:f?a(f.mappings):[]}]})),r(g)},c=()=>{const f=s().id;e.setState(g=>{const p=g.environments.filter(v=>v.id!==f),x=Object.fromEntries(Object.entries(g.pins).filter(([,v])=>v!==f));return{environments:p,activeId:g.activeId===f?p[0].id:g.activeId,pins:x}}),r(e.state.environments[0].id)},u=f=>Object.values(e.state.pins).filter(g=>g===f).length;return(()=>{var f=No(),g=f.firstChild.firstChild,p=g.firstChild.nextSibling,x=g.nextSibling.firstChild,v=x.firstChild,_=v.nextSibling.firstChild.nextSibling,N=x.nextSibling,b=N.firstChild,m=N.nextSibling,S=m.firstChild,$=S.firstChild.nextSibling,h=S.nextSibling,w=h.nextSibling,C=w.nextSibling,I=m.nextSibling;I.firstChild.nextSibling;var H=I.nextSibling;H.firstChild.nextSibling.nextSibling;var D=H.nextSibling;return D.firstChild.nextSibling,f.$$keydown=E=>E.key==="Escape"&&e.onClose(),f.$$click=E=>E.target===E.currentTarget&&e.onClose(),p.$$click=()=>e.onClose(),v.addEventListener("change",E=>e.setRemember(E.currentTarget.checked)),n(_,()=>e.remember?"Saved in localStorage and kept after the tab closes. Environments may hold tokens — turn this off on a shared machine.":"Kept for this browser tab only."),n(N,o(re,{get each(){return e.state.environments},children:E=>(()=>{var T=Po();return T.$$click=()=>r(E.id),n(T,()=>E.name||"(unnamed)",null),n(T,()=>E.id===e.state.activeId?" · active":"",null),q(O=>{var j=E.id===s().id,k=`px-3 py-1 text-xs font-semibold rounded-lg border transition-colors ${E.id===s().id?"bg-kick-500/20 text-kick-500 border-kick-500/30":"bg-surface-2 text-text-secondary border-border-strong hover:text-text-body"}`;return j!==O.e&&F(T,"aria-selected",O.e=j),k!==O.t&&U(T,O.t=k),O},{e:void 0,t:void 0}),T})()}),b),b.$$click=()=>i(),U(b,Qe),$.$$input=E=>l({name:E.currentTarget.value}),U($,Pe),h.$$click=()=>e.setState(E=>({...E,activeId:s().id})),U(h,Qe),n(h,()=>s().id===e.state.activeId?"Active":"Make active"),w.$$click=()=>i(s()),U(w,Qe),C.$$click=c,U(C,Qe),n(I,o(wt,{get rows(){return s().headers},onChange:E=>l({headers:E}),get context(){return s().id}}),null),n(H,o(wt,{get rows(){return s().variables},onChange:E=>l({variables:E}),get context(){return s().id}}),null),n(D,o(wt,{get rows(){return s().mappings},onChange:E=>l({mappings:E}),get context(){return s().id},keyPlaceholder:"param or query name",valuePlaceholder:"variable"}),null),q(E=>{var T=s().id===e.state.activeId,O=e.state.environments.length===1,j=u(s().id)?`${u(s().id)} pinned route(s) go back to the active environment`:void 0;return T!==E.e&&(h.disabled=E.e=T),O!==E.t&&(C.disabled=E.t=O),j!==E.a&&F(C,"title",E.a=j),E},{e:void 0,t:void 0,a:void 0}),q(()=>v.checked=e.remember),q(()=>$.value=s().name),f})()},Vo="w-24 shrink-0 bg-surface-2 border border-border-strong rounded-lg px-2 py-1.5 text-sm text-text-body focus:outline-none focus:border-kick-500",Pe="w-full min-w-0 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500",Tn=e=>(()=>{var t=Do();return n(t,()=>e.children),t})(),Go=e=>{const[t,r]=P(!1),s=()=>{const l=Tl(e.text());if(l!==void 0)return e.onFormat(l);r(!0),setTimeout(()=>r(!1),1500)};return(()=>{var l=Ho();return l.$$click=s,n(l,()=>t()?"Not JSON":"Format"),l})()},An=e=>{const[t,r]=P(null),s=async()=>{try{await navigator.clipboard.writeText(e.text()),r("Copied")}catch{r("Copy failed")}setTimeout(()=>r(null),1500)};return(()=>{var l=Uo();return l.$$click=s,n(l,()=>t()??"Copy"),q(()=>F(l,"aria-label",e.label)),l})()},Qe="px-3 py-2 text-xs font-semibold rounded-lg border bg-surface-2 text-text-secondary border-border-strong hover:text-text-body disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:text-text-secondary";we(["click","input","keydown"]);var Wo=d("<div class=dt-split><div class=dt-split-left></div><div class=dt-resizer role=separator aria-orientation=vertical></div><div class=dt-split-right>"),On=240,Ln=720,lt=e=>{const t=`kickjs-devtools-split:${e.storageKey}`,r=(()=>{try{const c=Number(localStorage.getItem(t));if(c>=On&&c<=Ln)return c}catch{}return e.defaultLeft??380})(),[s,l]=P(r);let a=null;ke(()=>a?.());const i=c=>{c.preventDefault();const u=c.clientX,f=s();document.body.style.cursor="col-resize";const g=x=>l(Math.min(Ln,Math.max(On,f+x.clientX-u))),p=()=>{a?.();try{localStorage.setItem(t,String(s()))}catch{}};a=()=>{document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",p),document.body.style.cursor="",a=null},document.addEventListener("mousemove",g),document.addEventListener("mouseup",p)};return(()=>{var c=Wo(),u=c.firstChild,f=u.nextSibling,g=f.nextSibling;return n(u,()=>e.left),f.$$mousedown=i,n(g,()=>e.right),q(p=>dl(u,`width:${s()}px`,p)),c})()};we(["mousedown"]);var Yo=d('<div class="flex flex-col gap-1.5 border-b border-border p-2"><input type=text placeholder="Search method or path…"class="w-full bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"><div class="flex items-center gap-1 flex-wrap"><span class=flex-1></span><button type=button></button><button type=button>Clear</button></div><div class="text-xs text-text-muted"> requests'),Qo=d('<div class="min-h-0 flex-1 overflow-y-auto">'),Xo=d("<button type=button>"),Zo=d("<div class=empty>"),ei=d('<span class="text-red-500 text-[0.66rem]">●'),ti=d('<button type=button><span></span><span></span><span class="min-w-0 flex-1 truncate font-mono"></span><span class="shrink-0 text-[0.7rem] text-text-muted tabular-nums"></span><span class="w-14 shrink-0 text-right text-[0.66rem] text-text-muted tabular-nums">'),ri=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">Select a request to see its details'),ni=d('<section class="flex h-full min-h-0 flex-col gap-3 overflow-y-auto bg-surface-1 p-4"><div class="flex items-center gap-2"><span></span><span></span><span class="min-w-0 truncate font-mono text-sm text-text-strong"></span></div><dl class="grid grid-cols-[8rem_1fr] gap-x-3 gap-y-1.5 text-[0.8rem]"><dt class=text-text-muted>Route</dt><dd class="m-0 font-mono"></dd><dt class=text-text-muted>Duration</dt><dd class=m-0></dd><dt class=text-text-muted>Time</dt><dd class=m-0></dd><dt class=text-text-muted>Request ID</dt><dd class="m-0 font-mono break-all">'),li=d('<div class="rounded-md border border-red-500/40 bg-red-500/10 px-3 py-2 text-sm"><span class="font-semibold text-red-500"></span><span class=text-text-body>: '),si=d(`<div><button type=button class="rounded-md border border-kick-500/30 bg-kick-500/20 px-3 py-1 text-xs font-semibold text-kick-500 hover:bg-kick-500/30">Replay in runner</button><p class="mt-1.5 text-xs text-text-muted">Opens the route with these path params. Query, headers and body aren't logged — the runner keeps the ones saved for this route.`),ai=1500,oi=500,ii=["ALL","2xx","3xx","4xx","5xx"],qr=null;function ci(e){qr=e,ft("requests")}var di=e=>new Date(e).toLocaleTimeString([],{hour12:!1}),ui=()=>{const[e,t]=P([]),[r,s]=P(qr);qr=null;const[l,a]=P(""),[i,c]=P("ALL"),[u,f]=P(!1);let g=0,p=!1;const x=async()=>{if(!(u()||p)){p=!0;try{const{requests:$,latest:h}=await ye.requests(g);if(h<g){g=0,t([]),s(null);return}if($.length===0)return;g=$[$.length-1].seq,t(w=>[...$.toReversed(),...w].slice(0,oi))}catch{}finally{p=!1}}};Ie(()=>{x();const $=setInterval(()=>{x()},ai);ke(()=>clearInterval($))});const v=ce(()=>{const $=l().trim().toLowerCase(),h=i();return e().filter(w=>(h==="ALL"||Math.floor(w.status/100)===Number(h[0]))&&(!$||`${w.method} ${w.path}`.toLowerCase().includes($)))}),_=ce(()=>e().find($=>$.seq===r())??null),N=$=>$.route===void 0?void 0:se.routes().find(h=>h.method.toUpperCase()===$.method.toUpperCase()&&h.path===$.route),b=$=>`px-2 py-0.5 text-[0.68rem] font-semibold rounded-md border ${$?"bg-kick-500/20 text-kick-500 border-kick-500/30":"bg-surface-2 text-text-secondary border-border-strong hover:text-text-body"}`,m=[(()=>{var $=Yo(),h=$.firstChild,w=h.nextSibling,C=w.firstChild,I=C.nextSibling,H=I.nextSibling,D=w.nextSibling,E=D.firstChild;return h.$$input=T=>a(T.currentTarget.value),n(w,o(re,{each:ii,children:T=>(()=>{var O=Xo();return O.$$click=()=>c(T),n(O,T),q(j=>{var k=i()===T,A=b(i()===T);return k!==j.e&&F(O,"aria-pressed",j.e=k),A!==j.t&&U(O,j.t=A),j},{e:void 0,t:void 0}),O})()}),C),I.$$click=()=>f(T=>!T),n(I,()=>u()?"Paused":"Pause"),H.$$click=()=>{t([]),s(null)},n(D,o(y,{get when(){return l()||i()!=="ALL"},get children(){return[ae(()=>v().length)," matched · "]}}),E),n(D,()=>e().length,E),q(T=>{var O=u(),j=b(u()),k=b(!1);return O!==T.e&&F(I,"aria-pressed",T.e=O),j!==T.t&&U(I,T.t=j),k!==T.a&&U(H,T.a=k),T},{e:void 0,t:void 0,a:void 0}),q(()=>h.value=l()),$})(),(()=>{var $=Qo();return n($,o(y,{get when(){return v().length>0},get fallback(){return(()=>{var h=Zo();return n(h,()=>e().length?"No requests match":"No requests yet — call the app"),h})()},get children(){return o(re,{get each(){return v()},children:h=>(()=>{var w=ti(),C=w.firstChild,I=C.nextSibling,H=I.nextSibling,D=H.nextSibling,E=D.nextSibling;return w.$$click=()=>s(h.seq),n(C,()=>h.status),n(I,()=>h.method),n(H,()=>ca(h.path)),n(w,o(y,{get when(){return h.error},get children(){var T=ei();return q(()=>F(T,"title",h.error.message)),T}}),D),n(D,()=>Se(h.durationMs)),n(E,()=>di(h.at)),q(T=>{var O=`flex w-full cursor-pointer items-center gap-2 border-0 border-b border-border/50 px-2.5 py-1 text-left text-[0.78rem] text-text-body ${r()===h.seq?"bg-accent/12 shadow-[inset_2px_0_0_0_var(--color-accent)]":"bg-transparent hover:bg-surface-hover"}`,j=`${Ct(h.status)} w-10 shrink-0 text-center`,k=`w-[3.4rem] shrink-0 font-mono text-[0.68rem] font-bold ${Xe(h.method)}`,A=h.path;return O!==T.e&&U(w,T.e=O),j!==T.t&&U(C,T.t=j),k!==T.a&&U(I,T.a=k),A!==T.o&&F(H,"title",T.o=A),T},{e:void 0,t:void 0,a:void 0,o:void 0}),w})()})}})),$})()],S=o(y,{get when(){return _()},get fallback(){return ri()},children:$=>(()=>{var h=ni(),w=h.firstChild,C=w.firstChild,I=C.nextSibling,H=I.nextSibling,D=w.nextSibling,E=D.firstChild.nextSibling,T=E.nextSibling.nextSibling,O=T.nextSibling.nextSibling,j=O.nextSibling.nextSibling;return n(C,()=>$().status),n(I,()=>$().method),n(H,()=>$().path),n(h,o(y,{get when(){return $().error},children:k=>(()=>{var A=li(),W=A.firstChild,V=W.nextSibling;return V.firstChild,n(W,()=>k().name),n(V,()=>k().message,null),A})()}),D),n(E,()=>$().route??"no route matched"),n(T,()=>Se($().durationMs)),n(O,()=>new Date($().at).toLocaleString()),n(j,()=>$().requestId??"—"),n(h,o(y,{get when(){return N($())},children:k=>(()=>{var A=si(),W=A.firstChild;return W.$$click=()=>rr(k(),ya(k().path,$().path)),A})()}),null),q(k=>{var A=Ct($().status),W=`font-mono text-sm font-bold ${Xe($().method)}`;return A!==k.e&&U(C,k.e=A),W!==k.t&&U(I,k.t=W),k},{e:void 0,t:void 0}),h})()});return o(lt,{storageKey:"requests",left:m,right:S})};we(["input","click"]);var fi=d('<div class="flex flex-col gap-4"><div class="grid grid-cols-2 gap-3 lg:grid-cols-4"></div><div class="grid grid-cols-1 gap-4 lg:grid-cols-[2fr_1fr]"><section class="rounded-xl border border-border bg-surface-1"><header class="flex items-center justify-between border-b border-border px-4 py-2.5"><h2 class="text-xs font-semibold uppercase tracking-wider text-text-muted">Recent failures</h2><button type=button class="text-xs text-text-muted hover:text-text-strong">All requests →</button></header></section><section class="rounded-xl border border-border bg-surface-1 px-4 py-3 text-[0.8rem]"><h2 class="mb-2 text-xs font-semibold uppercase tracking-wider text-text-muted">App'),hi=d('<div class="flex flex-col items-center gap-2 px-4 py-8 text-sm text-text-muted">'),vi=d('<button type=button class="rounded-md border border-kick-500/30 bg-kick-500/20 px-3 py-1 text-xs font-semibold text-kick-500 hover:bg-kick-500/30">Try a route'),gi=d('<button type=button class="flex w-full cursor-pointer items-center gap-2 border-0 border-b border-border/50 bg-transparent px-4 py-1.5 text-left text-[0.78rem] text-text-body last:border-b-0 hover:bg-surface-hover"><span></span><span></span><span class="min-w-0 shrink truncate font-mono"></span><span class="min-w-0 flex-1 truncate text-xs text-red-500"></span><span class="shrink-0 text-[0.66rem] text-text-muted tabular-nums">'),mi=d('<p class="italic text-text-muted">Loading…'),Rn=d("<span>"),pi=d('<h3 class="mt-3 mb-1 text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">Adapters'),xi=d('<div class="flex items-center gap-2 py-0.5"><span aria-hidden=true></span><span class="min-w-0 flex-1 truncate text-text-secondary">'),bi=d('<div class="flex flex-col rounded-xl border border-border bg-surface-1 px-4 pt-3 pb-2"><span class="text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted"></span><span></span><span class="text-xs text-text-muted"></span><div class="mt-1 h-8 [&amp;_svg]:block [&amp;_svg]:h-full [&amp;_svg]:w-full">'),$i=d('<div class="flex items-center justify-between py-0.5"><span class=text-text-secondary></span><span class="font-medium tabular-nums">'),yi=2e3,wi=()=>{const[e,t]=P([]),[r,s]=P(null);let l=0,a=!1;const i=async()=>{if(!a){a=!0;try{const[f,g]=await Promise.allSettled([ye.requests(l),ye.runtime()]);if(f.status==="fulfilled"){if(f.value.latest<l){l=0,t([]);return}const p=f.value.requests;p.length&&(l=p[p.length-1].seq,t(x=>[...x,...p].slice(-200)))}s(g.status==="fulfilled"?g.value.history.map(p=>p.memory.heapUsed):null)}finally{a=!1}}};Ie(()=>{i();const f=setInterval(()=>{i()},yi);ke(()=>clearInterval(f))});const c=ce(()=>Mr(e().map(f=>f.durationMs),95)),u=ce(()=>e().filter(f=>f.status>=500||f.error).toReversed().slice(0,6));return(()=>{var f=fi(),g=f.firstChild,p=g.nextSibling.firstChild,x=p.firstChild.firstChild.nextSibling,v=p.nextSibling;return v.firstChild,n(g,o(gt,{label:"Requests",get value(){return se.metrics()?.requests.toLocaleString()??"—"},get hint(){return`${_i(ar(bn()))} in the last minute`},get series(){return ar(bn())}}),null),n(g,o(gt,{label:"Server errors",get value(){return se.metrics()?.serverErrors.toLocaleString()??"—"},get hint(){return[ae(()=>Wt(se.metrics()?.errorRate??0))," error rate",o(Ke,{metric:"error-rate"})]},get series(){return ar(na())},stroke:"#ef4444",get tone(){return se.metrics()?.serverErrors?"err":void 0}}),null),n(g,o(gt,{label:"Latency p95",get value(){return ae(()=>c()===void 0)()?"—":Se(c())},get hint(){return`over the last ${e().length} requests`},get series(){return e().slice(-60).map(_=>_.durationMs)}}),null),n(g,o(y,{get when(){return r()},get fallback(){return o(gt,{label:"Uptime",get value(){return ae(()=>!!se.health())()?Gt(se.health().uptime):"—"},hint:"runtime sampler is off"})},children:_=>o(gt,{label:"Heap used",get value(){return ae(()=>!!_().length)()?dt(_()[_().length-1]):"—"},hint:"sampled every second",get series(){return _()}})}),null),x.$$click=()=>ft("requests"),n(p,o(y,{get when(){return u().length>0},get fallback(){return(()=>{var _=hi();return n(_,o(y,{get when(){return e().length>0},get fallback(){return["No requests yet.",(()=>{var N=vi();return N.$$click=()=>ft("routes"),N})()]},get children(){return["No failures in the last ",ae(()=>e().length)," requests."]}})),_})()},get children(){return o(re,{get each(){return u()},children:_=>(()=>{var N=gi(),b=N.firstChild,m=b.nextSibling,S=m.nextSibling,$=S.nextSibling,h=$.nextSibling;return N.$$click=()=>ci(_.seq),n(b,()=>_.status),n(m,()=>_.method),n(S,()=>_.path),n($,(()=>{var w=ae(()=>!!_.error);return()=>w()?`${_.error.name}: ${_.error.message}`:""})()),n(h,()=>new Date(_.at).toLocaleTimeString([],{hour12:!1})),q(w=>{var C=`${Ct(_.status)} w-10 shrink-0 text-center`,I=`w-[3.4rem] shrink-0 font-mono text-[0.68rem] font-bold ${Xe(_.method)}`;return C!==w.e&&U(b,w.e=C),I!==w.t&&U(m,w.t=I),w},{e:void 0,t:void 0}),N})()})}}),null),n(v,o(y,{get when(){return se.health()},get fallback(){return mi()},children:_=>[o(Rt,{label:"Status",get children(){var N=Rn();return n(N,()=>_().status),q(()=>U(N,`badge ${ki(_().status)}`)),N}}),o(Rt,{label:"Uptime",get children(){return Gt(_().uptime)}}),o(y,{get when(){return se.metrics()},children:N=>o(Rt,{label:"Started",get children(){return new Date(N().startedAt).toLocaleTimeString()}})}),o(y,{get when(){return se.ws().enabled},get children(){return o(Rt,{label:"WebSocket",get children(){return[ae(()=>se.ws().activeConnections??0)," open ·"," ",ae(()=>(se.ws().messagesReceived??0)+(se.ws().messagesSent??0))," msgs"]}})}}),o(y,{get when(){return Object.keys(_().adapters).length>0},get children(){return[pi(),o(re,{get each(){return Object.entries(_().adapters)},children:([N,b])=>(()=>{var m=xi(),S=m.firstChild,$=S.nextSibling;return F(m,"title",b),n($,N),n(m,o(y,{when:b!=="running",get children(){var h=Rn();return n(h,b),q(()=>U(h,`text-xs ${qn(b).text}`)),h}}),null),q(()=>U(S,`h-2 w-2 shrink-0 rounded-full ${qn(b).dot}`)),m})()})]}})]}),null),f})()},gt=e=>(()=>{var t=bi(),r=t.firstChild,s=r.nextSibling,l=s.nextSibling,a=l.nextSibling;return n(r,()=>e.label),n(s,()=>e.value),n(l,()=>e.hint),n(a,o(y,{get when(){return(e.series?.length??0)>1},get children(){return o(ia,{get values(){return e.series},get stroke(){return e.stroke}})}})),q(()=>U(s,`mt-0.5 text-xl font-semibold tabular-nums ${e.tone==="err"?"text-red-500":"text-text-strong"}`)),t})(),Rt=e=>(()=>{var t=$i(),r=t.firstChild,s=r.nextSibling;return n(r,()=>e.label),n(s,()=>e.children),t})(),_i=e=>e.reduce((t,r)=>t+r,0);function ki(e){return e==="healthy"?"badge-ok":e==="degraded"?"badge-warn":"badge-critical"}function qn(e){return e==="running"||e==="up"?{dot:"bg-emerald-500",text:"text-emerald-500"}:e==="down"||e==="stopped"?{dot:"bg-red-500",text:"text-red-500"}:{dot:"bg-amber-500",text:"text-amber-500"}}we(["click"]);var Si=d('<section class="flex flex-col rounded-xl border border-border bg-surface-1 px-4 pt-3 pb-2"><header class="flex items-baseline gap-2"><h3 class="text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted"></h3><span class=flex-1></span></header><div class="relative mt-1"><svg viewBox="0 0 300 80"preserveAspectRatio=none class="block h-20 w-full"><line x1=0 x2=300 y1=79.5 y2=79.5 stroke=var(--color-border)></line></svg><span class="pointer-events-none absolute top-0 left-0 text-[0.6rem] text-text-muted tabular-nums"></span></div><div class="flex justify-between text-[0.6rem] text-text-muted"><span></span><span>now'),Ci=d('<span class="inline-block h-0.5 w-2.5 rounded">'),Ei=d('<span class="flex items-center gap-1 text-xs text-text-muted"><span>'),Mi=d("<svg><line y1=74 y2=80 stroke=var(--color-text-muted) vector-effect=non-scaling-stroke></svg>",!1,!0,!1),Ti=d("<svg><path fill=none stroke-width=1.5 stroke-linejoin=round vector-effect=non-scaling-stroke></svg>",!1,!0,!1),Ai=300,Oi=80,qt=e=>{const t=ce(()=>Math.max(0,...e.series.map(u=>u.values.length))),r=ce(()=>e.max??(Math.max(0,...e.series.flatMap(u=>[...u.values]))*1.1||1)),s=u=>t()>1?u/(t()-1)*Ai:0,l=u=>Oi-Math.min(u,r())/r()*78-1,a=u=>u.map((f,g)=>`${g?"L":"M"}${s(g).toFixed(1)} ${l(f).toFixed(1)}`).join(" "),i=(u,f)=>u.color??(f===0?"var(--color-accent)":"var(--color-text-muted)"),c=u=>u.values[u.values.length-1];return(()=>{var u=Si(),f=u.firstChild,g=f.firstChild,p=g.nextSibling,x=f.nextSibling,v=x.firstChild;v.firstChild;var _=v.nextSibling,N=x.nextSibling.firstChild;return n(g,()=>e.title),n(f,()=>e.info,p),n(f,o(re,{get each(){return e.series},children:(b,m)=>o(y,{get when(){return c(b)!==void 0},get children(){var S=Ei(),$=S.firstChild;return n(S,o(y,{get when(){return e.series.length>1},get children(){return[(()=>{var h=Ci();return q(w=>Ve(h,"background",i(b,m()))),h})(),ae(()=>b.label)]}}),$),n($,()=>e.format(c(b))),q(()=>U($,`tabular-nums ${m()===0?"text-base font-semibold text-text-strong":""}`)),S}})}),null),n(v,o(re,{get each(){return e.marks??[]},children:b=>(()=>{var m=Mi();return q(S=>{var $=s(b),h=s(b);return $!==S.e&&F(m,"x1",S.e=$),h!==S.t&&F(m,"x2",S.t=h),S},{e:void 0,t:void 0}),m})()}),null),n(v,o(re,{get each(){return e.series.map((b,m)=>({s:b,i:m})).toReversed()},children:({s:b,i:m})=>(()=>{var S=Ti();return q($=>{var h=a(b.values),w=i(b,m);return h!==$.e&&F(S,"d",$.e=h),w!==$.t&&F(S,"stroke",$.t=w),$},{e:void 0,t:void 0}),S})()}),null),n(_,()=>e.format(r())),n(N,(()=>{var b=ae(()=>t()>1);return()=>b()?`${t()}s ago`:""})()),u})()},Li=d('<div class="flex flex-col gap-4"><header class="flex flex-wrap items-center gap-2 text-xs"><span class=flex-1></span></header><div class="grid grid-cols-1 gap-3 lg:grid-cols-2"></div><p class="-mt-2 text-[0.66rem] text-text-muted">Ticks under the event-loop chart mark garbage collections. CPU is a percentage of one core.'),Ri=d('<div class=dt-panel-grid><div class="card max-w-md text-sm text-text-secondary">The runtime sampler is off. Remove <code>runtime: { enabled: false }</code> from <code>DevToolsAdapter(...)</code> to see process metrics here.'),qi=d('<span class="dt-tone dt-tone-gray">Node '),Ii=d('<span class="dt-tone dt-tone-gray">/'),Ni=d('<span class="dt-tone dt-tone-gray">pid '),Pi=d('<span class="dt-tone dt-tone-blue">'),Di=d("<span class=text-text-muted>up <!> · <!> GCs, <!> paused"),Hi=d('<div class="mt-2 flex flex-wrap gap-1.5">'),Ui=d('<p class="mt-2 text-xs text-text-muted">Growth is judged once the process has run past its startup — about 50 seconds.'),ji=d('<section class="rounded-xl border border-border bg-surface-1 px-4 py-3"><header class="mb-2 flex items-center gap-2"><h3 class="text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">Memory health</h3><span></span></header><dl class="grid grid-cols-2 gap-x-6 gap-y-1 text-[0.8rem] md:grid-cols-4">'),Bi=d('<span class="dt-tone dt-tone-gray font-mono"> '),zi=d('<div><dt class="text-xs text-text-muted"></dt><dd class="m-0 font-semibold tabular-nums">'),Rl=d('<span class="max-w-80 truncate text-text-muted">'),Fi=d('<button type=button class="rounded-md border border-border-strong bg-surface-2 px-2.5 py-1 text-xs text-text-secondary hover:text-text-strong disabled:opacity-50"title="Blocks the event loop for a few seconds — avoid in production">'),Ji=d('<button type=button class="rounded-md border border-border-strong bg-surface-2 px-2.5 py-1 text-xs text-text-secondary hover:text-text-strong disabled:opacity-50"title="Needs node --expose-gc">'),Ki=60,Vi=()=>{const[e,t]=P([]),[r,s]=P(null),[l,a]=P(null),[i,c]=P(!1),u=v=>{t(_=>aa(_,v,Ki))};Ie(()=>{ye.runtime().then(_=>{a(_.process??null),s(_.health),u(_.history)}).catch(()=>c(!0));const v=bl("/memory/stream",_=>{u([_.snapshot]),s(_.health)},()=>{});ke(v)});const f=ce(()=>e()[e().length-1]),g=v=>e().map(v),p=ce(()=>e().map((v,_,N)=>{const b=_?v.timestamp-N[_-1].timestamp:1e3;return(v.cpu.userMicros+v.cpu.systemMicros)/1e3/Math.max(1,b)*100})),x=ce(()=>e().flatMap((v,_,N)=>_&&v.gc.count>N[_-1].gc.count?[_]:[]));return o(y,{get when(){return!i()},get fallback(){return Ri()},get children(){var v=Li(),_=v.firstChild,N=_.firstChild,b=_.nextSibling;return b.nextSibling,n(_,o(y,{get when(){return l()},children:m=>[o(y,{get when(){return m().runtime},children:S=>(()=>{var $=Pi();return n($,()=>S().name),$})()}),(()=>{var S=qi();return S.firstChild,n(S,()=>m().nodeVersion,null),S})(),(()=>{var S=Ii(),$=S.firstChild;return n(S,()=>m().platform,$),n(S,()=>m().arch,null),S})(),(()=>{var S=Ni();return S.firstChild,n(S,()=>m().pid,null),S})()]}),N),n(_,o(y,{get when(){return f()},children:m=>(()=>{var S=Di(),$=S.firstChild.nextSibling,h=$.nextSibling.nextSibling,w=h.nextSibling.nextSibling;return w.nextSibling,n(S,()=>Gt(m().uptimeSec),$),n(S,()=>m().gc.count,h),n(S,()=>Se(m().gc.totalPauseMs),w),S})()}),N),n(_,o(Gi,{}),null),n(_,o(Wi,{}),null),n(b,o(qt,{title:"Heap",get info(){return o(Ke,{metric:"heap.used"})},format:dt,get series(){return[{label:"used",values:g(m=>m.memory.heapUsed)},{label:"total",values:g(m=>m.memory.heapTotal)}]}}),null),n(b,o(qt,{title:"Process memory",get info(){return o(Ke,{metric:"rss"})},format:dt,get series(){return[{label:"RSS",values:g(m=>m.memory.rss)},{label:"external",values:g(m=>m.memory.external)}]}}),null),n(b,o(qt,{title:"Event loop delay",get info(){return o(Ke,{metric:"event-loop.p99"})},format:Se,get marks(){return x()},get series(){return[{label:"p99",values:g(m=>m.eventLoop.p99)},{label:"p50",values:g(m=>m.eventLoop.p50)}]}}),null),n(b,o(qt,{title:"CPU",format:m=>`${m.toFixed(m<10?1:0)}%`,get max(){return Math.max(100,...p())},get series(){return[{label:"CPU",values:p()}]}}),null),n(v,o(y,{get when(){return r()},children:m=>(()=>{var S=ji(),$=S.firstChild,h=$.firstChild.nextSibling,w=$.nextSibling;return n($,o(Ke,{metric:"leak.risk"}),h),n(h,(()=>{var C=ae(()=>!!m().sampling);return()=>C()?"sampling":m().heapGrowthSeverity})()),n(w,o(It,{label:"Heap growth",get children(){return ae(()=>!!m().sampling)()?"measuring…":`${dt(m().heapGrowthBytesPerSec*60)}/min`}}),null),n(w,o(It,{label:"GC reclaim",metric:"gc.reclaim",get children(){return ae(()=>!!m().sampling)()?"—":Wt(m().gcReclaimRatio)}}),null),n(w,o(It,{label:"Heap of limit",metric:"heap.utilization",get children(){return Wt(m().heapUtilization)}}),null),n(w,o(It,{label:"Open handles",get children(){return m().activeHandles}}),null),n(S,o(y,{get when(){return Object.keys(m().handlesByType).length>0},get children(){var C=Hi();return n(C,o(re,{get each(){return Object.entries(m().handlesByType).toSorted((I,H)=>H[1]-I[1])},children:([I,H])=>(()=>{var D=Bi(),E=D.firstChild;return n(D,I,E),n(D,H,null),D})()})),C}}),null),n(S,o(y,{get when(){return m().sampling},get children(){return Ui()}}),null),q(()=>U(h,m().sampling?ut("idle"):ut(m().heapGrowthSeverity==="ok"?"ok":m().heapGrowthSeverity==="warn"?"warn":"err"))),S})()}),null),v}})},It=e=>(()=>{var t=zi(),r=t.firstChild,s=r.nextSibling;return n(r,()=>e.label,null),n(r,o(y,{get when(){return e.metric},get children(){return o(Ke,{get metric(){return e.metric}})}}),null),n(s,()=>e.children),t})(),Gi=()=>{const[e,t]=P(null),[r,s]=P(!1),l=async()=>{s(!0),t(null);try{const a=await Vt("/memory/snapshot"),i=await a.blob(),c=/filename="?([^";]+)"?/.exec(a.headers.get("content-disposition")??"")?.[1]??`kickjs-heap-${Date.now()}.heapsnapshot`,u=URL.createObjectURL(i);Object.assign(document.createElement("a"),{href:u,download:c}).click(),URL.revokeObjectURL(u),t(`Saved ${c} (${dt(i.size)})`)}catch(a){t(a instanceof Error?a.message:String(a))}finally{s(!1)}};return[o(y,{get when(){return e()},get children(){var a=Rl();return n(a,e),q(()=>F(a,"title",e())),a}}),(()=>{var a=Fi();return a.$$click=()=>{l()},n(a,()=>r()?"Capturing…":"Heap snapshot"),q(()=>a.disabled=r()),a})()]},Wi=()=>{const[e,t]=P(null),[r,s]=P(!1),l=async()=>{s(!0),t(null);try{const a=await(await Vt("/memory/gc")).json();t(`GC freed ${dt(a.reclaimedBytes)} in ${a.elapsedMs}ms`)}catch(a){t(a instanceof Error?a.message:String(a))}finally{s(!1)}};return[o(y,{get when(){return e()},get children(){var a=Rl();return n(a,e),q(()=>F(a,"title",e())),a}}),(()=>{var a=Ji();return a.$$click=()=>{l()},n(a,()=>r()?"Collecting…":"Run GC"),q(()=>a.disabled=r()),a})()]};we(["click"]);var Yi=d('<div class="flex flex-wrap gap-1">'),Qi=d('<span class="text-xs text-text-muted">None'),Xi=d('<button type=button class="rounded border border-border-strong bg-surface-2 px-2 py-0.5 font-mono text-xs text-text-body hover:border-kick-500 hover:text-kick-500">'),Zi=d('<div class="p-4 text-sm text-text-muted"> is no longer registered.'),ec=d('<span class="dt-tone dt-tone-gray"title="Served by its registerFallback() default — the app binds nothing of its own">fallback'),tc=d("<dt class=text-text-muted>First"),In=d("<dd class=m-0>"),rc=d("<dt class=text-text-muted>Last"),nc=d("<dt class=text-text-muted>Took "),lc=d('<dd class="m-0 tabular-nums">'),sc=d('<dl class="grid grid-cols-[9rem_1fr] gap-y-1"><dt class=text-text-muted>Resolves </dt><dd class="m-0 tabular-nums"></dd><dt class=text-text-muted>@PostConstruct </dt><dd class=m-0><span>'),ac=d('<section class="flex flex-col gap-4 p-4 text-[0.8rem]"><header><h2 class="m-0 break-all font-mono text-base text-text-strong"></h2><div class="mt-1.5 flex flex-wrap gap-1.5"><span></span><span class="dt-tone dt-tone-gray"></span><span>'),oc=d('<div><h3 class="mb-1.5 text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">'),Ir=null;function ql(e){Ir=e,ft("container")}function ic(){const e=Ir;return Ir=null,e}function Qt(e){return e.postConstructStatus==="failed"?{label:"failed",tone:ut("err")}:e.instantiated?{label:"active",tone:ut("ok")}:{label:"registered",tone:ut("idle")}}var cc=e=>{const t=ce(()=>se.container().find(l=>l.token===e.token)),r=ce(()=>se.container().filter(l=>l.dependencies?.includes(e.token)).map(l=>l.token)),s=l=>o(y,{get when(){return l.length},get fallback(){return Qi()},get children(){var a=Yi();return n(a,o(re,{each:l,children:i=>(()=>{var c=Xi();return c.$$click=()=>e.onSelect(i),n(c,i),c})()})),a}});return o(y,{get when(){return t()},get fallback(){return(()=>{var l=Zi(),a=l.firstChild;return n(l,()=>e.token,a),l})()},children:l=>(()=>{var a=ac(),i=a.firstChild.firstChild,c=i.nextSibling,u=c.firstChild,f=u.nextSibling,g=f.nextSibling;return n(i,()=>l().token),n(u,()=>l().kind??"unknown"),n(f,()=>l().scope??"singleton"),n(c,o(y,{get when(){return l().fallback},get children(){return ec()}}),g),n(g,()=>Qt(l()).label),n(a,o(fr,{get title(){return`Depends on (${l().dependencies?.length??0})`},get children(){return s(l().dependencies??[])}}),null),n(a,o(fr,{get title(){return`Used by (${r().length})`},get children(){return s(r())}}),null),n(a,o(fr,{title:"Resolution",get children(){var p=sc(),x=p.firstChild;x.firstChild;var v=x.nextSibling,_=v.nextSibling;_.firstChild;var N=_.nextSibling.firstChild;return n(x,o(Ke,{metric:"resolve.count"}),null),n(v,()=>l().resolveCount??0),n(p,o(y,{get when(){return l().firstResolvedAt},get children(){return[tc(),(()=>{var b=In();return n(b,()=>new Date(l().firstResolvedAt).toLocaleTimeString()),b})()]}}),_),n(p,o(y,{get when(){return l().lastResolvedAt},get children(){return[rc(),(()=>{var b=In();return n(b,()=>new Date(l().lastResolvedAt).toLocaleTimeString()),b})()]}}),_),n(p,o(y,{get when(){return l().resolveDurationMs!=null},get children(){return[(()=>{var b=nc();return b.firstChild,n(b,o(Ke,{metric:"resolve.duration"}),null),b})(),(()=>{var b=lc();return n(b,()=>Se(l().resolveDurationMs)),b})()]}}),_),n(_,o(Ke,{metric:"post-construct"}),null),n(N,()=>l().postConstructStatus??"none"),q(()=>U(N,ut(l().postConstructStatus==="failed"?"err":l().postConstructStatus==="done"?"ok":"idle"))),p}}),null),q(p=>{var x=Xr(l().kind),v=Qt(l()).tone;return x!==p.e&&U(u,p.e=x),v!==p.t&&U(g,p.t=v),p},{e:void 0,t:void 0}),a})()})},fr=e=>(()=>{var t=oc(),r=t.firstChild;return n(r,()=>e.title),n(t,()=>e.children,null),t})();we(["click"]);var dc=d('<div class="card text-sm text-red-500">'),uc=d('<div class="rounded-md border border-red-500/40 bg-red-500/10 px-3 py-2 text-sm">'),fc=d('<div class="flex flex-col gap-3"><div class="flex items-center gap-3 text-xs text-text-muted"><h2 class="text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">Plugged in</h2><span class=flex-1></span><button type=button class="rounded-md border border-border-strong bg-surface-2 px-2.5 py-1 text-xs text-text-secondary hover:text-text-strong">Refresh'),hc=d("<span> plugins · <!> adapters · <!> contributors · updated "),vc=d('<div><span class="font-semibold text-red-500"> (<!>) introspect() failed:</span> '),gc=d("<div class=empty>Loading topology…"),mc=d('<div class="grid grid-cols-1 items-start gap-3 lg:grid-cols-3">'),pc=d('<section class="flex flex-col gap-2"><h2 class="text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted"> <span class=font-normal>(<!>)'),xc=d('<div class="rounded-lg border border-dashed border-border px-3 py-2 text-xs text-text-muted">'),bc=d('<span class="dt-tone dt-tone-gray">v'),$c=d('<div class="mt-1.5 flex flex-wrap items-center gap-1"title="Declared dependsOn — runs after these"><span class="w-14 text-[0.66rem] text-text-muted">after'),yc=d('<div class="mt-1.5 flex flex-wrap items-center gap-1"><span class="w-14 text-[0.66rem] text-text-muted">hooks'),wc=d('<div class="mt-1.5 flex flex-wrap gap-x-3 gap-y-0.5">'),_c=d('<dl class="mt-1.5 grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5">'),kc=d('<p class="mt-1 text-xs text-text-muted">Reports nothing — it has no introspect().'),Sc=d('<article><header class="flex items-center gap-2"><span class="h-1.5 w-1.5 rounded-full bg-emerald-500"aria-hidden=true></span><span class="min-w-0 flex-1 truncate font-mono font-semibold text-text-strong">'),Il=d("<span>"),Cc=d('<span class="cursor-help rounded border border-border px-1.5 font-mono text-[0.68rem] text-text-secondary">'),Ec=d('<span class=text-text-muted> <span class="font-semibold text-text-body tabular-nums">'),Mc=d("<dt class=text-text-muted>"),Tc=d('<dd class="m-0 truncate font-mono">'),Ac=d('<div class="mt-1.5 flex flex-wrap items-center gap-1"><span class="w-14 text-[0.66rem] text-text-muted">'),Oc=d('<button type=button title="Open in Container">'),Lc=d('<div class="mt-1 flex flex-wrap items-center gap-1 text-[0.68rem] text-text-muted">after'),Rc=d('<article><div class="flex items-center gap-2"><span class="min-w-0 flex-1 truncate font-mono font-semibold">ctx.</span><span class="dt-tone dt-tone-gray">'),qc=()=>{const[e,t]=P(null),[r,s]=P(null),[l,a]=P(null),i=async()=>{try{t(await ye.topology()),s(null)}catch(u){s(u instanceof Error?u.message:String(u))}};Ie(()=>{i();const u=setInterval(()=>{i()},5e3);ke(()=>clearInterval(u))});const c=(u,f)=>!!f&&(f===u.name||!!u.tokens?.provides.includes(f)||!!u.tokens?.requires.includes(f));return(()=>{var u=fc(),f=u.firstChild,g=f.firstChild.nextSibling,p=g.nextSibling;return n(f,o(y,{get when(){return e()},children:x=>(()=>{var v=hc(),_=v.firstChild,N=_.nextSibling,b=N.nextSibling.nextSibling;return b.nextSibling,n(v,()=>x().plugins.length,_),n(v,()=>x().adapters.length,N),n(v,()=>x().contributors.length,b),n(v,()=>tr(x().timestamp),null),v})()}),g),p.$$click=()=>{i()},n(u,o(y,{get when(){return r()},get children(){var x=dc();return n(x,r),x}}),null),n(u,o(y,{get when(){return e()?.errors.length},get children(){var x=uc();return n(x,o(re,{get each(){return e().errors},children:v=>(()=>{var _=vc(),N=_.firstChild,b=N.firstChild,m=b.nextSibling;return m.nextSibling,N.nextSibling,n(N,()=>v.name,b),n(N,()=>v.kind,m),n(_,()=>v.message,null),_})()})),x}}),null),n(u,o(y,{get when(){return e()},get fallback(){return gc()},children:x=>(()=>{var v=mc();return n(v,o(hr,{title:"Plugins",get count(){return x().plugins.length},empty:"No plugins — definePlugin(...) adds one.",get children(){return o(re,{get each(){return x().plugins},children:_=>o(Nn,{p:_,get lit(){return c(_,l())},get hover(){return l()},onHover:a})})}}),null),n(v,o(hr,{title:"Adapters",get count(){return x().adapters.length},empty:"No adapters registered.",get children(){return o(re,{get each(){return x().adapters},children:_=>o(Nn,{p:_,get lit(){return c(_,l())},get hover(){return l()},onHover:a})})}}),null),n(v,o(hr,{title:"Contributors",get count(){return x().contributors.length},empty:"No context contributors — defineContextDecorator(...) adds one.",get children(){return o(re,{get each(){return x().contributors},children:_=>o(Nc,{c:_,get hover(){return l()},onHover:a})})}}),null),v})()}),null),u})()},hr=e=>(()=>{var t=pc(),r=t.firstChild,s=r.firstChild,l=s.nextSibling,a=l.firstChild.nextSibling;return a.nextSibling,n(r,()=>e.title,s),n(l,()=>e.count,a),n(t,o(y,{get when(){return e.count>0},get fallback(){return(()=>{var i=xc();return n(i,()=>e.empty),i})()},get children(){return e.children}}),null),t})(),Nn=e=>{const t=ce(()=>Object.entries(e.p.state??{})),r=ce(()=>Object.entries(e.p.metrics??{})),s=()=>t().length+r().length+(e.p.tokens?.provides.length??0)+(e.p.tokens?.requires.length??0)+(e.p.hooks?.length??0)+(e.p.dependsOn?.length??0)>0;return(()=>{var l=Sc(),a=l.firstChild,i=a.firstChild.nextSibling;return n(i,()=>e.p.name),n(a,o(y,{get when(){return e.p.version},get children(){var c=bc();return c.firstChild,n(c,()=>e.p.version,null),c}}),null),n(l,o(y,{get when(){return e.p.dependsOn?.length},get children(){var c=$c();return c.firstChild,n(c,o(re,{get each(){return e.p.dependsOn},children:u=>(()=>{var f=Il();return f.addEventListener("mouseleave",()=>e.onHover(null)),f.addEventListener("mouseenter",()=>e.onHover(u)),n(f,u),q(()=>U(f,`rounded border px-1.5 font-mono text-[0.68rem] ${e.hover===u?"border-kick-500 text-kick-500":"border-border-strong text-text-secondary"}`)),f})()}),null),c}}),null),n(l,o(y,{get when(){return e.p.hooks?.length},get children(){var c=yc();return c.firstChild,n(c,o(re,{get each(){return e.p.hooks},children:u=>(()=>{var f=Cc();return n(f,u),q(()=>F(f,"title",Ic[u]??u)),f})()}),null),c}}),null),n(l,o(y,{get when(){return r().length},get children(){var c=wc();return n(c,o(re,{get each(){return r()},children:([u,f])=>(()=>{var g=Ec(),p=g.firstChild,x=p.nextSibling;return n(g,u,p),n(x,()=>f.toLocaleString()),g})()})),c}}),null),n(l,o(y,{get when(){return t().length},get children(){var c=_c();return n(c,o(re,{get each(){return t()},children:([u,f])=>[(()=>{var g=Mc();return n(g,u),g})(),(()=>{var g=Tc();return n(g,()=>typeof f=="string"?f:JSON.stringify(f)),q(()=>F(g,"title",JSON.stringify(f))),g})()]})),c}}),null),n(l,o(Pn,{label:"provides",get tokens(){return e.p.tokens?.provides??[]},get hover(){return e.hover},get onHover(){return e.onHover}}),null),n(l,o(Pn,{label:"requires",get tokens(){return e.p.tokens?.requires??[]},get hover(){return e.hover},get onHover(){return e.onHover}}),null),n(l,o(y,{get when(){return!s()},get children(){return kc()}}),null),q(()=>U(l,`rounded-lg border bg-surface-1 px-3 py-2 text-[0.78rem] transition-colors ${e.lit?"border-kick-500 shadow-[0_0_0_1px_var(--color-accent)]":"border-border"}`)),l})()},Ic={register:"register() — adds DI bindings before modules load",modules:"modules() — contributes modules (and their routes)",adapters:"adapters() — brings its own adapters",setup:"setup() — mounts modules conditionally at boot",middleware:"middleware() — adds global middleware",contributors:"contributors() — adds ctx values before handlers run",beforeMount:"beforeMount() — runs before global middleware, e.g. to register early routes",onRouteMount:"onRouteMount() — called for each mounted controller",beforeStart:"beforeStart() — runs before the server starts listening",afterStart:"afterStart() — runs once the server is listening",onReady:"onReady() — runs after the app has fully bootstrapped",onResponse:"onResponse() — sees every response",onError:"onError() — sees every unhandled error",onHealthCheck:"onHealthCheck() — reports up / down to /health",shutdown:"shutdown() — cleans up when the app stops"},Pn=e=>o(y,{get when(){return e.tokens.length},get children(){var t=Ac(),r=t.firstChild;return n(r,()=>e.label),n(t,o(re,{get each(){return e.tokens},children:s=>(()=>{var l=Oc();return l.$$click=()=>ql(s),l.addEventListener("mouseleave",()=>e.onHover(null)),l.addEventListener("mouseenter",()=>e.onHover(s)),n(l,s),q(()=>U(l,`rounded border px-1.5 font-mono text-[0.68rem] ${e.hover===s?"border-kick-500 text-kick-500":"border-border-strong text-text-secondary hover:text-text-strong"}`)),l})()}),null),t}}),Nc=e=>(()=>{var t=Rc(),r=t.firstChild.firstChild;r.firstChild;var s=r.nextSibling;return t.addEventListener("mouseleave",()=>e.onHover(null)),t.addEventListener("mouseenter",()=>e.onHover(e.c.key)),n(r,()=>e.c.key,null),n(s,()=>e.c.source),n(t,o(y,{get when(){return e.c.dependsOn.length},get children(){var l=Lc();return l.firstChild,n(l,o(re,{get each(){return e.c.dependsOn},children:a=>(()=>{var i=Il();return n(i,a),q(()=>U(i,`rounded border px-1.5 font-mono ${e.hover===a?"border-kick-500 text-kick-500":"border-border-strong"}`)),i})()}),null),l}}),null),q(()=>U(t,`rounded-lg border bg-surface-1 px-3 py-1.5 text-[0.78rem] ${e.hover===e.c.key?"border-kick-500":"border-border"}`)),t})();we(["click"]);var Pc=d('<button type=button class="underline hover:text-text-body">'),Dc=d('<div class="flex flex-col gap-1.5 border-b border-border p-2"><input type=text placeholder="Search path, controller, handler…"class="w-full bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"><div class="flex items-center gap-1 flex-wrap"></div><div class="text-xs text-text-muted"> routes'),Hc=d('<div class="min-h-0 flex-1 overflow-y-auto">'),Uc=d("<button type=button>"),jc=d("<div class=empty>"),Bc=d('<button type=button class="sticky top-0 z-1 flex w-full cursor-pointer items-center gap-1.5 border-0 border-b border-border bg-surface-2 px-2.5 py-1 text-left text-[0.66rem] font-bold uppercase tracking-wide text-text-muted hover:text-text-body"><span class="inline-block w-2.5"></span> <span class=font-normal>(<!>)'),zc=d('<span class="shrink-0 rounded border border-border-strong px-1 text-[0.62rem] text-text-muted">mgmt'),Fc=d('<button type=button><span></span><span class="min-w-0 flex-1 truncate font-mono">'),Jc=d('<span class="shrink-0 font-mono text-[0.66rem] text-text-muted">'),Kc=d('<span class="max-w-[40%] truncate text-[0.66rem] text-text-muted">'),Nl="kickjs-devtools:routes:collapsed";function Vc(){try{const e=JSON.parse(localStorage.getItem(Nl)??"[]");return new Set(Array.isArray(e)?e.filter(t=>typeof t=="string"):[])}catch{return new Set}}var Gc=["ALL","GET","POST","PUT","PATCH","DELETE"];function Wc(e){const t=e.contributors?.length??0;return t>0?`ctx ${t}`:""}function Yc(e){return(e.contributors??[]).map(t=>{const r=t.overrides.length?` (overrides ${t.overrides.map(s=>s.source).join(", ")})`:"";return` ${t.key} — ${t.source}${r}`}).join(`
9
+ `)}function Qc(e){return Object.entries(e??{}).map(([t,r])=>r===!0?t:`${t}=${JSON.stringify(r)}`).join(", ")}var Xc=()=>{const[e,t]=P(""),[r,s]=P("ALL"),l=ce(()=>{const v=e().trim().toLowerCase();return se.routes().filter(_=>(r()==="ALL"||_.method.toUpperCase()===r())&&(!v||_.path.toLowerCase().includes(v)||_.controller.toLowerCase().includes(v)||_.handler.toLowerCase().includes(v)))}),a=ce(()=>{const v=new Map;for(const _ of l()){const N=v.get(_.controller)??[];N.push(_),v.set(_.controller,N)}return[...v]}),[i,c]=P(Vc()),u=v=>{c(v);try{localStorage.setItem(Nl,JSON.stringify([...v]))}catch{}},f=v=>{const _=new Set(i());_.delete(v)||_.add(v),u(_)},g=v=>!!e().trim()||r()!=="ALL"||!i().has(v),p=v=>{const _=je();return!!_&&_.method===v.method&&_.path===v.path},x=[(()=>{var v=Dc(),_=v.firstChild,N=_.nextSibling,b=N.nextSibling,m=b.firstChild;return _.$$input=S=>t(S.currentTarget.value),n(N,o(re,{each:Gc,children:S=>(()=>{var $=Uc();return $.$$click=()=>s(S),n($,S),q(h=>{var w=r()===S,C=`px-2 py-0.5 text-[0.68rem] font-semibold rounded-md border ${r()===S?"bg-kick-500/20 text-kick-500 border-kick-500/30":"bg-surface-2 text-text-secondary border-border-strong hover:text-text-body"}`;return w!==h.e&&F($,"aria-pressed",h.e=w),C!==h.t&&U($,h.t=C),h},{e:void 0,t:void 0}),$})()})),n(b,o(y,{get when(){return e()||r()!=="ALL"},get children(){return[ae(()=>l().length)," matched · "]}}),m),n(b,()=>se.routes().length,m),n(b,o(y,{get when(){return a().length>1},get children(){return[" · ",(()=>{var S=Pc();return S.$$click=()=>u(i().size?new Set:new Set(a().map(([$])=>$))),n(S,()=>i().size?"Expand all":"Collapse all"),S})()]}}),null),q(()=>_.value=e()),v})(),(()=>{var v=Hc();return n(v,o(y,{get when(){return a().length>0},get fallback(){return(()=>{var _=jc();return n(_,()=>se.routes().length?"No routes match":"No routes registered"),_})()},get children(){return o(re,{get each(){return a()},children:([_,N])=>[(()=>{var b=Bc(),m=b.firstChild,S=m.nextSibling,$=S.nextSibling,h=$.firstChild.nextSibling;return h.nextSibling,b.$$click=()=>f(_),n(m,()=>g(_)?"▾":"▸"),n(b,_,S),n($,()=>N.length,h),q(()=>F(b,"aria-expanded",g(_))),b})(),o(re,{get each(){return g(_)?N:[]},children:b=>(()=>{var m=Fc(),S=m.firstChild,$=S.nextSibling;return m.$$click=()=>rr(b),n(S,()=>b.method),n($,()=>b.path),n(m,o(y,{get when(){return b.port==="management"},get children(){return zc()}}),null),n(m,o(y,{get when(){return Wc(b)},children:h=>(()=>{var w=Jc();return n(w,h),w})()}),null),n(m,o(y,{get when(){return Qc(b.flags)},children:h=>(()=>{var w=Kc();return n(w,h),w})()}),null),q(h=>{var w=b.offPort,C=`flex w-full items-center gap-2 border-0 border-b border-border/50 px-2.5 py-1 text-left text-[0.78rem] text-text-body ${b.offPort?"cursor-default bg-transparent opacity-60":p(b)?"cursor-pointer bg-accent/12 shadow-[inset_2px_0_0_0_var(--color-accent)]":"cursor-pointer bg-transparent hover:bg-surface-hover"}`,I=`${b.controller}.${b.handler}${b.middleware.length?` · middleware: ${b.middleware.join(", ")}`:""}${b.contributors?.length?`
10
10
  context contributors:
11
- ${Wc($)}`:""}`,I=`w-[3.4rem] shrink-0 font-mono text-[0.68rem] font-bold ${Xe($.method)}`;return w!==f.e&&U(m,f.e=w),C!==f.t&&F(m,"title",f.t=C),I!==f.a&&U(S,f.a=I),f},{e:void 0,t:void 0,a:void 0}),m})()})]})}})),v})()];return o(lt,{storageKey:"routes",left:x,get right(){return o(Fo,{})}})};we(["input","click"]);var Xc=d('<th><button type=button class="inline-flex items-center gap-1 text-text-muted hover:text-text-strong"><span aria-hidden=true>');function Pl(e,t=!0){const[r,s]=P(e),[l,a]=P(t);return{key:r,desc:l,toggle:u=>{u===r()?a(h=>!h):(s(()=>u),a(!0))},apply:(u,h)=>u.toSorted((g,p)=>{const x=h(g,r()),v=h(p,r()),_=typeof x=="number"&&typeof v=="number"?x-v:String(x).localeCompare(String(v));return l()?-_:_}),set:s}}var Dl=e=>(()=>{var t=Xc(),r=t.firstChild,s=r.firstChild;return Jr(r,"click",e.onClick,!0),n(r,()=>e.label,s),n(s,()=>e.desc?"↓":"↑"),q(l=>{var a=`px-2 py-1.5 font-semibold ${e.align==="left"?"text-left":"text-right"}`,i=e.active?"opacity-70":"opacity-0";return a!==l.e&&U(t,l.e=a),i!==l.t&&U(s,l.t=i),l},{e:void 0,t:void 0}),t})();we(["click"]);var Zc=d('<div class="card text-sm text-red-500">'),ed=d('<div class="overflow-hidden rounded-xl border border-border bg-surface-1"><table class="w-full border-collapse text-[0.8rem]"><thead class="border-b border-border text-xs"><tr></tr></thead><tbody>'),td=d(`<p class="text-[0.66rem] text-text-muted">Percentiles cover each route's last 1,000 calls. Durations turn amber above 200 ms, orange above 500 ms, red above 1 s.`),rd=d('<div class="flex flex-col gap-3"><div class="flex flex-wrap items-center gap-2"><input type=text placeholder="Filter routes…"class="w-64 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"><div class="flex overflow-hidden rounded-md border border-border-strong text-xs"></div><span class=flex-1></span><span class="text-xs text-text-muted"> routes'),nd=d("<button type=button>"),ld=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">'),sd=d('<tr class="cursor-pointer border-b border-dashed border-transparent hover:border-border hover:bg-surface-hover"><td class="px-2 py-1.5"><span class="flex items-center gap-2"><span></span><span class="truncate font-mono"></span></span></td><td class="px-2 py-1.5 text-right tabular-nums"></td><td></td><td>'),ad=d('<tr class="border-b border-border bg-surface-2/50"><td colspan=7 class="px-4 py-3">'),od=d('<span class="h-1.5 w-16 overflow-hidden rounded-full bg-border/60"><span class="block h-full rounded-full bg-kick-500/70">'),id=d('<td class="px-2 py-1.5 text-right tabular-nums"><span class="inline-flex items-center justify-end gap-2"><span>'),cd=d('<div class="flex flex-wrap items-end gap-8"><div><div class="mb-1 text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">Latency (ms)</div><div class="flex h-16 items-end gap-1"></div></div><div class=text-xs><div class="mb-1 text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">Outcomes</div><div class="flex gap-2"><span class="dt-pill dt-pill-ok"> ok</span><span class="dt-pill dt-pill-warn"> 4xx</span><span class="dt-pill dt-pill-err"> 5xx</span></div><div class="mt-2 text-text-muted">min <!> · avg '),dd=d('<div class="flex w-7 flex-col items-center gap-0.5"><div class="w-full rounded-sm bg-kick-500/60"></div><span class="text-[0.58rem] text-text-muted tabular-nums">'),ud=d('<button type=button class="rounded-md border border-kick-500/30 bg-kick-500/20 px-3 py-1 text-xs font-semibold text-kick-500 hover:bg-kick-500/30">Try in runner'),Dn=["p50","p95","p99"],hd=()=>{const[e,t]=P(null),[r,s]=P(null),[l,a]=P(""),[i,c]=P("p95"),[u,h]=P(null),g=Pl("p95"),p=async()=>{try{t(await ye.metrics()),s(null)}catch($){s($ instanceof Error?$.message:String($))}};Ie(()=>{p();const $=setInterval(()=>{p()},2e3);ke(()=>clearInterval($))});const x=ce(()=>{const $=l().trim().toLowerCase(),m=Object.entries(e()?.routeLatency??{}).map(([b,f])=>{const w=b.indexOf(" ");return{...f,key:b,method:b.slice(0,w),path:b.slice(w+1),errorShare:f.count?f.serverErrors/f.count:0}}),S=$?m.filter(b=>b.key.toLowerCase().includes($)):m;return g.apply(S,(b,f)=>f==="route"?b.path:f==="errors"?b.errorShare:b[f])}),v=ce(()=>Math.max(1,...x().map($=>$[i()]))),_=$=>{c($),g.set($)},N=($,m,S="right")=>o(Dl,{label:m,align:S,get active(){return g.key()===$},get desc(){return g.desc()},onClick:()=>g.toggle($)});return(()=>{var $=rd(),m=$.firstChild,S=m.firstChild,b=S.nextSibling,f=b.nextSibling,w=f.nextSibling,C=w.firstChild;return S.$$input=I=>a(I.currentTarget.value),n(b,o(re,{each:Dn,children:I=>(()=>{var H=nd();return H.$$click=()=>_(I),n(H,I),q(D=>{var E=i()===I,T=`px-2.5 py-1 font-semibold ${i()===I?"bg-kick-500/20 text-kick-500":"bg-surface-2 text-text-secondary hover:text-text-body"}`;return E!==D.e&&F(H,"aria-pressed",D.e=E),T!==D.t&&U(H,D.t=T),D},{e:void 0,t:void 0}),H})()})),n(m,o(Ke,{get metric(){return`latency.${i()}`}}),f),n(w,()=>x().length,C),n($,o(y,{get when(){return r()},get children(){var I=Zc();return n(I,r),I}}),null),n($,o(y,{get when(){return x().length>0},get fallback(){return(()=>{var I=ld(),H=I.firstChild;return n(H,()=>l()?"No routes match":"No requests yet — latency appears per route once the app is called."),I})()},get children(){return[(()=>{var I=ed(),H=I.firstChild.firstChild,D=H.firstChild,E=H.nextSibling;return n(D,()=>N("route","Route","left"),null),n(D,()=>N("count","Calls"),null),n(D,()=>N("errors","5xx"),null),n(D,()=>N("p50","p50"),null),n(D,()=>N("p95","p95"),null),n(D,()=>N("p99","p99"),null),n(D,()=>N("maxMs","Max"),null),n(E,o(re,{get each(){return x()},children:T=>[(()=>{var O=sd(),j=O.firstChild,k=j.firstChild.firstChild,A=k.nextSibling,W=j.nextSibling,V=W.nextSibling,z=V.nextSibling;return O.$$click=()=>h(L=>L===T.key?null:T.key),n(k,()=>T.method),n(A,()=>T.path),n(W,()=>T.count.toLocaleString()),n(V,(()=>{var L=ae(()=>!!T.serverErrors);return()=>L()?Wt(T.errorShare):"—"})()),n(O,o(re,{each:Dn,children:L=>(()=>{var ie=id(),R=ie.firstChild,M=R.firstChild;return n(R,o(y,{get when(){return L===i()},get children(){var Z=od(),B=Z.firstChild;return q(K=>Ve(B,"width",`${T[L]/v()*100}%`)),Z}}),M),n(M,()=>Se(T[L])),q(()=>U(M,`min-w-14 ${$t(T[L])}`)),ie})()}),z),n(z,()=>Se(T.maxMs)),q(L=>{var ie=`w-[3.4rem] shrink-0 font-mono text-[0.68rem] font-bold ${Xe(T.method)}`,R=`px-2 py-1.5 text-right tabular-nums ${T.serverErrors?"text-red-500":"text-text-muted"}`,M=`${T.serverErrors} server errors, ${T.clientErrors} client errors`,Z=`px-2 py-1.5 text-right tabular-nums ${$t(T.maxMs)}`;return ie!==L.e&&U(k,L.e=ie),R!==L.t&&U(V,L.t=R),M!==L.a&&F(V,"title",L.a=M),Z!==L.o&&U(z,L.o=Z),L},{e:void 0,t:void 0,a:void 0,o:void 0}),O})(),o(y,{get when(){return u()===T.key},get children(){var O=ad(),j=O.firstChild;return n(j,o(fd,{row:T,get buckets(){return e()?.latencyBucketsMs??[]}})),O}})]})),I})(),td()]}}),null),q(()=>S.value=l()),$})()},fd=e=>{const t=()=>Math.max(1,...e.row.histogram),r=a=>a<e.buckets.length?`≤${e.buckets[a]}`:`>${e.buckets[e.buckets.length-1]}`,s=()=>se.routes().find(a=>a.method.toUpperCase()===e.row.method&&a.path===e.row.path),l=()=>e.row.count-e.row.serverErrors-e.row.clientErrors;return(()=>{var a=cd(),i=a.firstChild,c=i.firstChild.nextSibling,u=i.nextSibling.firstChild.nextSibling,h=u.firstChild,g=h.firstChild,p=h.nextSibling,x=p.firstChild,v=p.nextSibling,_=v.firstChild,N=u.nextSibling,$=N.firstChild.nextSibling;return $.nextSibling,n(c,o(re,{get each(){return e.row.histogram},children:(m,S)=>(()=>{var b=dd(),f=b.firstChild,w=f.nextSibling;return n(w,()=>r(S())),q(C=>{var I=`${m} calls ${r(S())} ms`,H=`${Math.max(m?2:0,m/t()*48)}px`;return I!==C.e&&F(b,"title",C.e=I),H!==C.t&&Ve(f,"height",C.t=H),C},{e:void 0,t:void 0}),b})()})),n(h,l,g),n(p,()=>e.row.clientErrors,x),n(v,()=>e.row.serverErrors,_),n(N,()=>Se(Number.isFinite(e.row.minMs)?e.row.minMs:0),$),n(N,()=>Se(e.row.count?e.row.totalMs/e.row.count:0),null),n(a,o(y,{get when(){return s()},children:m=>(()=>{var S=ud();return S.$$click=()=>rr(m()),S})()}),null),a})()};we(["input","click"]);var Nr=(e,t)=>`${e}→${t}`;function vd(e,t){const r=new Map(e.map(x=>[x,[]]));for(const x of t)r.has(x.from)&&r.has(x.to)&&r.get(x.from).push(x.to);const s=new Set,l=new Map,a=x=>{l.set(x,"active");for(const v of r.get(x))l.get(v)==="active"?s.add(Nr(x,v)):l.has(v)||a(v);l.set(x,"done")};for(const x of e)l.has(x)||a(x);const i=x=>r.get(x).filter(v=>!s.has(Nr(x,v))),c=new Set;for(const[x,v]of r){v.length&&c.add(x);for(const _ of v)c.add(_)}const u=new Map,h=new Map([...c].map(x=>[x,0]));for(const x of c)for(const v of i(x))h.set(v,h.get(v)+1);const g=[...c].filter(x=>h.get(x)===0);for(const x of g)u.set(x,0);for(;g.length;){const x=g.shift();for(const v of i(x))u.set(v,Math.max(u.get(v)??0,u.get(x)+1)),h.set(v,h.get(v)-1),h.get(v)===0&&g.push(v)}const p=[];for(const x of e){if(!c.has(x))continue;const v=u.get(x)??0;(p[v]??=[]).push(x)}for(let x=1;x<p.length;x++){const v=new Map(p[x-1].map((N,$)=>[N,$])),_=N=>{const $=p[x-1].filter(m=>i(m).includes(N)).map(m=>v.get(m));return $.length?$.reduce((m,S)=>m+S,0)/$.length:1/0};p[x]=p[x].toSorted((N,$)=>_(N)-_($))}return{layers:p,cycleEdges:s,isolated:e.filter(x=>!c.has(x))}}var gd=.2;var Hl=e=>Math.min(3,Math.max(gd,e));function Hn(e,t,r,s){const l=Hl(e.k*t),a=l/e.k;return{k:l,x:r-(r-e.x)*a,y:s-(s-e.y)*a}}function md(e,t,r,s=24){const l=Hl(Math.min(1,(t-s*2)/e.w,(r-s*2)/e.h));return{k:l,x:(t-e.w*l)/2-e.x*l,y:(r-e.h*l)/2-e.y*l}}var pd=d('<span class="flex items-center gap-1 text-xs text-red-500"><span class="h-0.5 w-3 bg-red-500"></span> cycle'),xd=d('<button type=button class="rounded-md border border-border-strong bg-surface-2 px-2 py-0.5 text-xs text-text-secondary hover:text-text-strong">Reset layout'),bd=d('<svg class="absolute inset-0 h-full w-full"><defs><marker id=dt-arrow viewBox="0 0 8 8"refX=7 refY=4 markerWidth=6 markerHeight=6 orient=auto><path d="M0 0 L8 4 L0 8 z"fill=var(--color-text-muted)></path></marker></defs><g>'),$d=d('<div class="max-h-32 overflow-y-auto border-t border-border p-3"><div class="mb-1.5 text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">No dependencies either way (<!>)</div><div class="flex flex-wrap gap-1">'),yd=d('<div class="flex min-h-0 flex-1 flex-col"><div class="flex flex-wrap items-center gap-2 border-b border-border p-2"><span class=flex-1></span><button type=button class="rounded-md border border-border-strong bg-surface-2 px-2 py-0.5 text-xs text-text-secondary hover:text-text-strong"aria-label="Zoom out">−</button><span class="w-10 text-center text-xs text-text-muted tabular-nums">%</span><button type=button class="rounded-md border border-border-strong bg-surface-2 px-2 py-0.5 text-xs text-text-secondary hover:text-text-strong"aria-label="Zoom in">+</button><button type=button class="rounded-md border border-border-strong bg-surface-2 px-2 py-0.5 text-xs text-text-secondary hover:text-text-strong">Fit</button></div><div style="background-image:radial-gradient(var(--color-border) 1px, transparent 1px)"><span class="pointer-events-none absolute bottom-2 left-2 text-[0.62rem] text-text-muted">Drag tokens to arrange · drag or scroll to pan · ⌘/Ctrl + scroll to zoom'),wd=d('<span class="text-xs text-text-muted">All <!> tokens — select one to see just its chain'),_d=d(`<span class="text-xs text-text-muted">'s chain · <!> tokens`),kd=d('<button type=button class="rounded-md border border-border-strong bg-surface-2 px-2 py-0.5 text-xs text-text-secondary hover:text-text-strong">Whole graph'),Sd=d('<span class="flex items-center gap-1 text-xs text-text-muted"><span class="h-2 w-2 rounded-sm">'),Cd=d('<div class="p-6 text-sm text-text-muted">No dependencies between registered tokens yet.'),Ed=d("<svg><path fill=none marker-end=url(#dt-arrow)></svg>",!1,!0,!1),Md=d("<svg><g class=cursor-move><title> — drag to move, click to focus</title><rect width=164 height=26 rx=5 fill=var(--color-surface-1)></rect><rect width=4 height=26 rx=2></rect><text x=12 y=17 font-size=11.5 font-family=var(--font-mono) fill=var(--color-text-body)></svg>",!1,!0,!1),Td=d("<button type=button>"),Un=164,vr=26,Ul="kickjs-devtools-graph-positions",Ad=3,Pr={controller:"#8b5cf6",service:"#3b82f6",repository:"#14b8a6",other:"#9ca3af"},Od=e=>Pr[e??""]??Pr.other,jn=1;function Ld(){try{return JSON.parse(localStorage.getItem(Ul)??"{}")}catch{return{}}}var Rd=e=>{const t=()=>e.selected,r=k=>e.onSelect(k),[s,l]=P(Ld()),[a,i]=P({}),c=()=>t()?a():s(),u=k=>{t()?i(k):l(k)},[h,g]=P({x:0,y:0,k:1}),[p,x]=P(!1);let v;const _=ce(()=>se.container()),N=ce(()=>new Map(_().map(k=>[k.token,k]))),$=ce(()=>_().flatMap(k=>(k.dependencies??[]).filter(A=>N().has(A)).map(A=>({from:k.token,to:A})))),m=ce(()=>{const k=t();if(!k||!N().has(k))return null;const A=z=>{const L=new Set([k]),ie=[k];for(;ie.length;)for(const R of z(ie.pop()))L.has(R)||(L.add(R),ie.push(R));return L},W=A(z=>N().get(z)?.dependencies?.filter(L=>N().has(L))??[]),V=A(z=>$().filter(L=>L.to===z).map(L=>L.from));return new Set([...W,...V])}),S=ce(()=>{const k=m();return k?$().filter(A=>k.has(A.from)&&k.has(A.to)):$()}),b=ce(()=>{const k=m();return vd(_().map(A=>A.token).filter(A=>!k||k.has(A)),S())}),f=ce(()=>{const k=new Map;return b().layers.forEach((A,W)=>A.forEach((V,z)=>k.set(V,c()[V]??{x:W*220,y:z*36}))),k}),w=()=>{if(!v||f().size===0)return;const k=[...f().values()],A=Math.min(...k.map(L=>L.x)),W=Math.min(...k.map(L=>L.y)),V={x:A,y:W,w:Math.max(...k.map(L=>L.x))+Un-A,h:Math.max(...k.map(L=>L.y))+vr-W},z=md(V,v.clientWidth,v.clientHeight);if(m()&&z.k>jn){const L=jn;g({k:L,x:(v.clientWidth-V.w*L)/2-V.x*L,y:(v.clientHeight-V.h*L)/2-V.y*L})}else g(z)};Ie(()=>requestAnimationFrame(w)),qe(_r(t,()=>{i({}),requestAnimationFrame(w)},{defer:!0})),qe(_r(()=>f().size>0,(k,A)=>{k&&!A&&requestAnimationFrame(w)}));const C=k=>{if(!t()){l(k);try{localStorage.setItem(Ul,JSON.stringify(k))}catch{}}};let I=null;const H=k=>{if(k.button!==0)return;const A=k.target.closest("[data-node]")?.getAttribute("data-node"),W=A?f().get(A):void 0;A&&!W||(k.currentTarget.setPointerCapture(k.pointerId),A&&W?I={kind:"node",id:A,sx:k.clientX,sy:k.clientY,from:W,dragged:!1}:(I={kind:"pan",sx:k.clientX,sy:k.clientY,view:h()},x(!0)))},D=k=>{const A=I;if(!A)return;const W=k.clientX-A.sx,V=k.clientY-A.sy;if(A.kind==="pan"){g({...A.view,x:A.view.x+W,y:A.view.y+V});return}if(!A.dragged&&Math.hypot(W,V)<Ad)return;A.dragged=!0;const z=h().k;u(L=>({...L,[A.id]:{x:A.from.x+W/z,y:A.from.y+V/z}}))},E=()=>{const k=I;I=null,x(!1),k?.kind==="node"&&(k.dragged?C(c()):k.id!==t()&&r(k.id))},T=k=>{if(k.preventDefault(),k.ctrlKey||k.metaKey){const A=v.getBoundingClientRect(),W=Math.max(-50,Math.min(50,k.deltaY));g(V=>Hn(V,Math.exp(-W*.005),k.clientX-A.left,k.clientY-A.top))}else g(A=>({...A,x:A.x-k.deltaX,y:A.y-k.deltaY}))},O=k=>{v&&g(A=>Hn(A,k,v.clientWidth/2,v.clientHeight/2))},j=(k,A)=>{const W=f().get(k),V=f().get(A),z=W.x+Un,L=W.y+vr/2,ie=V.x,R=V.y+vr/2,M=Math.max(30,Math.abs(ie-z)/2);return`M${z} ${L} C${z+M} ${L} ${ie-M} ${R} ${ie} ${R}`};return(()=>{var k=yd(),A=k.firstChild,W=A.firstChild,V=W.nextSibling,z=V.nextSibling,L=z.firstChild,ie=z.nextSibling,R=ie.nextSibling,M=A.nextSibling,Z=M.firstChild;return n(A,o(y,{get when(){return m()},get fallback(){return(()=>{var B=wd(),K=B.firstChild.nextSibling;return K.nextSibling,n(B,()=>_().length,K),B})()},children:B=>[(()=>{var K=_d(),Q=K.firstChild,ne=Q.nextSibling;return ne.nextSibling,n(K,t,Q),n(K,()=>B().size,ne),K})(),(()=>{var K=kd();return K.$$click=()=>r(null),K})()]}),W),n(A,o(re,{get each(){return Object.entries(Pr)},children:([B,K])=>(()=>{var Q=Sd(),ne=Q.firstChild;return Ve(ne,"background",K),n(Q,B,null),Q})()}),W),n(A,o(y,{get when(){return b().cycleEdges.size>0},get children(){return pd()}}),W),V.$$click=()=>O(1/1.25),n(z,()=>Math.round(h().k*100),L),ie.$$click=()=>O(1.25),R.$$click=w,n(A,o(y,{get when(){return Object.keys(c()).length>0},get children(){var B=xd();return B.$$click=()=>{C({}),requestAnimationFrame(w)},B}}),null),M.addEventListener("wheel",T),M.addEventListener("pointercancel",E),M.$$pointerup=E,M.$$pointermove=D,M.$$pointerdown=H,et(B=>v=B,M),n(M,o(y,{get when(){return b().layers.length>0},get fallback(){return Cd()},get children(){var B=bd(),K=B.firstChild.nextSibling;return n(K,o(re,{get each(){return S()},children:Q=>{const ne=()=>b().cycleEdges.has(Nr(Q.from,Q.to));return(()=>{var ue=Ed();return q(te=>{var fe=j(Q.from,Q.to),Oe=ne()?"#ef4444":"var(--color-border-strong)",Le=t()===Q.from||t()===Q.to?2:1.25,J=ne()?"4 3":void 0;return fe!==te.e&&F(ue,"d",te.e=fe),Oe!==te.t&&F(ue,"stroke",te.t=Oe),Le!==te.a&&F(ue,"stroke-width",te.a=Le),J!==te.o&&F(ue,"stroke-dasharray",te.o=J),te},{e:void 0,t:void 0,a:void 0,o:void 0}),ue})()}}),null),n(K,o(re,{get each(){return b().layers.flat()},children:Q=>{const ne=()=>f().get(Q),ue=()=>N().get(Q)?.kind??"";return(()=>{var te=Md(),fe=te.firstChild,Oe=fe.firstChild,Le=fe.nextSibling,J=Le.nextSibling,de=J.nextSibling;return F(te,"data-node",Q),n(fe,Q,Oe),n(de,(()=>{var ge=ae(()=>Q.length>22);return()=>ge()?`${Q.slice(0,21)}…`:Q})()),q(ge=>{var Ce=`translate(${ne().x} ${ne().y})`,Re=t()===Q?"var(--color-accent)":"var(--color-border-strong)",ze=t()===Q?2:1,He=Od(ue());return Ce!==ge.e&&F(te,"transform",ge.e=Ce),Re!==ge.t&&F(Le,"stroke",ge.t=Re),ze!==ge.a&&F(Le,"stroke-width",ge.a=ze),He!==ge.o&&F(J,"fill",ge.o=He),ge},{e:void 0,t:void 0,a:void 0,o:void 0}),te})()}}),null),q(()=>F(K,"transform",`translate(${h().x} ${h().y}) scale(${h().k})`)),B}}),Z),n(k,o(y,{get when(){return b().isolated.length>0},get children(){var B=$d(),K=B.firstChild,Q=K.firstChild.nextSibling;Q.nextSibling;var ne=K.nextSibling;return n(K,()=>b().isolated.length,Q),n(ne,o(re,{get each(){return b().isolated},children:ue=>(()=>{var te=Td();return te.$$click=()=>r(ue),n(te,ue),q(()=>U(te,`${Xr(N().get(ue)?.kind)} font-mono ${t()===ue?"ring-1 ring-kick-500":""}`)),te})()})),B}}),null),q(B=>{var K=`relative min-h-0 flex-1 touch-none select-none overflow-hidden ${p()?"cursor-grabbing":"cursor-grab"}`,Q=`${16*h().k}px ${16*h().k}px`,ne=`${h().x}px ${h().y}px`;return K!==B.e&&U(M,B.e=K),Q!==B.t&&Ve(M,"background-size",B.t=Q),ne!==B.a&&Ve(M,"background-position",B.a=ne),B},{e:void 0,t:void 0,a:void 0}),k})()};we(["click","pointerdown","pointermove","pointerup"]);var qd=d('<button type=button> <span class="font-normal opacity-70">'),Id=d('<div class="flex flex-col gap-1.5 border-b border-border p-2"><input type=text placeholder="Search tokens…"class="w-full bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"><div class="flex flex-wrap items-center gap-1"><span class="mx-1 h-4 w-px bg-border"></span><span class="mx-1 h-4 w-px bg-border"></span></div><div class="flex items-center gap-2 text-xs text-text-muted"><span class=flex-1> tokens</span><label class="flex items-center gap-1">Sort<select class="rounded border border-border-strong bg-surface-2 px-1 py-0.5 text-xs text-text-body">'),Nd=d('<div class="min-h-0 flex-1 overflow-y-auto">'),Pd=d("<option>"),Dd=d("<div class=empty>"),Hd=d('<span class="dt-tone dt-tone-gray">'),Ud=d('<span class="dt-tone dt-tone-gray"title="Served by its registerFallback() default">fallback'),jd=d('<button type=button><span></span><span class="min-w-0 flex-1 truncate font-mono"></span><span></span><span class="w-10 shrink-0 text-right text-[0.7rem] text-text-muted tabular-nums">×</span><span class="w-14 shrink-0 text-right text-[0.66rem] text-text-muted">'),Bd=d("<button type=button>"),zd=d('<div class="flex h-full flex-col"><div class="flex items-center gap-1 border-b border-border px-2 py-1.5"></div><div class="flex min-h-0 flex-1 flex-col">'),Fd=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">Select a token to see its dependencies'),Jd=d('<div class="min-h-0 flex-1 overflow-y-auto bg-surface-1">'),Bn="kickjs-devtools:container:view",zn="kickjs-devtools:container:sort",Fn={resolves:"Most resolved",recent:"Recently resolved",name:"Name"};function Jn(e,t,r){try{const s=localStorage.getItem(e);return t.includes(s)?s:r}catch{return r}}function Kn(e,t){try{localStorage.setItem(e,t)}catch{}}var jl=["controller","service","repository"],gr=e=>jl.includes(e.kind??"")?e.kind:"other",Kd=()=>{const[e,t]=P(""),[r,s]=P(null),[l,a]=P(null),[i,c]=P(ic()),[u,h]=P(!1),[g,p]=P(Jn(zn,Object.keys(Fn),"resolves")),[x,v]=P(Jn(Bn,["detail","graph"],"detail")),_=ce(()=>{const E=e().trim().toLowerCase();return se.container().filter(T=>!E||T.token.toLowerCase().includes(E))}),N=(E,T)=>{const O=new Map;for(const j of T)O.set(E(j),(O.get(E(j))??0)+1);return O},$=ce(()=>N(gr,_().filter(E=>!l()||(E.scope??"singleton")===l()))),m=ce(()=>N(E=>E.scope??"singleton",_().filter(E=>!r()||gr(E)===r()))),S=ce(()=>_().filter(E=>!E.resolveCount).length),b={resolves:(E,T)=>(T.resolveCount??0)-(E.resolveCount??0),recent:(E,T)=>(T.lastResolvedAt??0)-(E.lastResolvedAt??0),name:()=>0},f=ce(()=>_().filter(E=>(!r()||gr(E)===r())&&(!l()||(E.scope??"singleton")===l())&&(!u()||!E.resolveCount)).toSorted((E,T)=>b[g()](E,T)||E.token.localeCompare(T.token))),w=(E,T,O,j)=>o(y,{get when(){return T()||O()},get children(){var k=qd(),A=k.firstChild,W=A.nextSibling;return Jr(k,"click",j,!0),n(k,E,A),n(W,()=>T()??0),q(V=>{var z=O(),L=`rounded-md border px-2 py-0.5 text-[0.68rem] font-semibold ${O()?"border-kick-500/30 bg-kick-500/20 text-kick-500":"border-border-strong bg-surface-2 text-text-secondary hover:text-text-body"}`;return z!==V.e&&F(k,"aria-pressed",V.e=z),L!==V.t&&U(k,V.t=L),V},{e:void 0,t:void 0}),k}}),C=[(()=>{var E=Id(),T=E.firstChild,O=T.nextSibling,j=O.firstChild,k=j.nextSibling,A=O.nextSibling.firstChild,W=A.firstChild,V=A.nextSibling.firstChild.nextSibling;return T.$$input=z=>t(z.currentTarget.value),n(O,o(re,{get each(){return[...jl,"other"]},children:z=>w(z,()=>$().get(z),()=>r()===z,()=>s(L=>L===z?null:z))}),j),n(O,o(re,{each:["singleton","transient","request"],children:z=>w(z,()=>m().get(z),()=>l()===z,()=>a(L=>L===z?null:z))}),k),n(O,()=>w("never resolved",S,u,()=>h(z=>!z)),null),n(A,o(y,{get when(){return f().length!==se.container().length},get children(){return[ae(()=>f().length)," matched ·"," "]}}),W),n(A,()=>se.container().length,W),V.addEventListener("change",z=>{const L=z.currentTarget.value;p(L),Kn(zn,L)}),n(V,o(re,{get each(){return Object.entries(Fn)},children:([z,L])=>(()=>{var ie=Pd();return ie.value=z,n(ie,L),ie})()})),q(()=>T.value=e()),q(()=>V.value=g()),E})(),(()=>{var E=Nd();return n(E,o(y,{get when(){return f().length>0},get fallback(){return(()=>{var T=Dd();return n(T,()=>se.container().length?"No tokens match":"Nothing registered yet"),T})()},get children(){return o(re,{get each(){return f()},children:T=>(()=>{var O=jd(),j=O.firstChild,k=j.nextSibling,A=k.nextSibling,W=A.nextSibling,V=W.firstChild,z=W.nextSibling;return O.$$click=()=>c(T.token),n(k,()=>T.token),n(A,(()=>{var L=ae(()=>!!(T.kind&&T.kind!=="unknown"));return()=>L()?T.kind:"other"})()),n(O,o(y,{get when(){return(T.scope??"singleton")!=="singleton"},get children(){var L=Hd();return n(L,()=>T.scope),L}}),W),n(O,o(y,{get when(){return T.fallback},get children(){return Ud()}}),W),n(W,()=>T.resolveCount??0,V),n(z,(()=>{var L=ae(()=>!!T.lastResolvedAt);return()=>L()?tr(T.lastResolvedAt):"—"})()),q(L=>{var ie=`flex w-full cursor-pointer items-center gap-2 border-0 border-b border-border/50 px-2.5 py-1 text-left text-[0.78rem] text-text-body ${i()===T.token?"bg-accent/12 shadow-[inset_2px_0_0_0_var(--color-accent)]":"bg-transparent hover:bg-surface-hover"}`,R=`h-1.5 w-1.5 shrink-0 rounded-full ${Qt(T).label==="failed"?"bg-red-500":T.instantiated?"bg-emerald-500":"bg-border-strong"}`,M=Qt(T).label,Z=T.token,B=Xr(T.kind);return ie!==L.e&&U(O,L.e=ie),R!==L.t&&U(j,L.t=R),M!==L.a&&F(j,"title",L.a=M),Z!==L.o&&F(k,"title",L.o=Z),B!==L.i&&U(A,L.i=B),L},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),O})()})}})),E})()],I=E=>{v(E),Kn(Bn,E)},H=(E,T)=>(()=>{var O=Bd();return O.$$click=()=>I(E),n(O,T),q(j=>{var k=x()===E,A=`rounded-md border px-2 py-0.5 text-xs font-semibold ${x()===E?"border-kick-500/30 bg-kick-500/20 text-kick-500":"border-border-strong bg-surface-2 text-text-secondary hover:text-text-body"}`;return k!==j.e&&F(O,"aria-pressed",j.e=k),A!==j.t&&U(O,j.t=A),j},{e:void 0,t:void 0}),O})(),D=(()=>{var E=zd(),T=E.firstChild,O=T.nextSibling;return n(T,()=>H("detail","Details"),null),n(T,()=>H("graph","Graph"),null),n(O,o(y,{get when(){return x()==="graph"},get fallback(){return o(y,{get when(){return i()},get fallback(){return Fd()},children:j=>(()=>{var k=Jd();return n(k,o(cc,{get token(){return j()},onSelect:c})),k})()})},get children(){return o(Rd,{get selected(){return i()},onSelect:c})}})),E})();return o(lt,{storageKey:"container",left:C,right:D})};we(["click","input"]);var Vd=d("<button type=button>Retry all failed"),Nt=d("<button type=button>"),Gd=d('<span class="text-xs text-text-muted">'),Wd=d('<div class="flex flex-wrap items-center gap-1.5">'),Yd=d('<div class="flex flex-col gap-2 border-b border-border p-2"><div class="flex flex-wrap gap-1">'),Qd=d('<div class="p-4 text-sm text-text-muted">'),Xd=d('<button type=button class="w-full py-2 text-xs text-text-muted hover:text-text-strong">Load 50 more'),Zd=d('<div class="min-h-0 flex-1 overflow-y-auto">'),eu=d('<span class="font-normal text-text-muted">paused'),tu=d('<span class="rounded bg-red-500/15 px-1 text-red-500">'),ru=d('<div class="flex flex-wrap items-center gap-x-3 gap-y-1 text-xs">'),nu=d("<button type=button> <span>"),lu=d("<div class=empty>No <!> jobs"),su=d('<span class="shrink-0 text-[0.68rem] text-text-muted tabular-nums"title=attempts>'),au=d('<button type=button><span class="w-16 shrink-0 truncate font-mono text-[0.68rem] text-text-muted">#</span><span class="w-32 shrink-0 truncate font-mono font-semibold"></span><span class="min-w-0 flex-1 truncate text-[0.72rem] text-red-500"></span><span class="w-14 shrink-0 text-right text-[0.66rem] text-text-muted">'),ou=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">'),iu=d("<button type=button>Retry"),cu=d("<dt class=text-text-muted>Created"),mr=d("<dd class=m-0>"),du=d("<dt class=text-text-muted>Ran for"),uu=d("<dt class=text-text-muted>Delay"),hu=d('<div class="rounded-md border border-red-500/40 bg-red-500/10 px-3 py-2 text-red-500">'),fu=d('<section class="flex h-full flex-col gap-3 overflow-y-auto bg-surface-1 p-4 text-[0.8rem]"><header class="flex flex-wrap items-center gap-2"><h2 class="m-0 font-mono text-base text-text-strong"></h2><span></span><span class="font-mono text-xs text-text-muted">#</span><span class=flex-1></span></header><dl class="grid grid-cols-[7rem_1fr] gap-y-1 text-xs"><dt class=text-text-muted>Attempts</dt><dd class="m-0 tabular-nums">'),vu=d('<pre class="m-0 mb-1.5 max-h-48 overflow-auto rounded-md border border-border bg-surface-2 p-2 font-mono text-[0.68rem]">'),gu=d('<div class=dt-panel-grid><div class="card max-w-lg text-sm text-text-secondary">'),mu=d('<p class="m-0 mb-2 font-semibold text-text-strong">No job tool is connected'),pu=d("<p class=m-0>Add <code>QueueAdapter</code> from <code>@forinda/kickjs-queue</code> to browse BullMQ jobs here — retry failures, remove jobs, pause a queue. Any other job tool can show up too by exposing <code>jobInspector()</code> from its adapter."),xu=d('<pre class="m-0 max-h-72 overflow-auto rounded-md border border-border bg-surface-2 p-3 font-mono text-xs">'),bu=d('<div><h3 class="mb-1.5 text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">'),$u=["failed","active","waiting","delayed","completed","paused"],pr=50,Vn={failed:"text-red-500",active:"text-blue-500",waiting:"text-text-secondary",delayed:"text-amber-500",completed:"text-emerald-500",paused:"text-text-muted"},yu=()=>{const[e,t]=P(null),[r,s]=P(null),[l,a]=P(null),[i,c]=P("failed"),[u,h]=P([]),[g,p]=P(null),[x,v]=P(pr),[_,N]=P(null),[$,m]=P(null),[S,b]=P(null),[f,w]=P(!1),[C,I]=P(null),H=ce(()=>e()?.find(R=>R.source===l()?.source)),D=ce(()=>H()?.queues.find(R=>R.name===l()?.queue)),E=R=>!!H()?.actions.includes(R),T=async()=>{try{const{sources:R}=await ye.jobs();if(t(R),s(null),!l()){const M=R.find(Z=>Z.queues.length);M&&a({source:M.source,queue:M.queues[0].name})}}catch(R){s(R instanceof Error?R.message:String(R))}},O=async()=>{const R=l();if(R)try{const{jobs:M}=await ye.jobList({...R,state:i(),start:0,end:x()-1});h(M),p(null)}catch(M){h([]),p(M instanceof Error?M.message:String(M))}},j=async()=>{const R=l(),M=_();if(!R||!M){m(null);return}try{m(await ye.job({...R,id:M}))}catch{m(null)}},k=async()=>{await T(),await Promise.all([O(),j()])};Ie(()=>{k();const R=setInterval(()=>{k()},3e3);ke(()=>clearInterval(R))});const A=(R,M=i())=>{a(R),c(M),v(pr),N(null),m(null),O()},W=R=>{N(R),j()},V=async(R,M={})=>{const Z=l();if(!Z)return;const B=`${R}:${M.id??M.state??""}`;if(M.confirm&&C()!==B){I(B);return}I(null),w(!0),b(null);try{const K=await ye.jobAction({...Z,action:R,id:M.id,state:M.state});b(R==="clean"?`Removed ${K.count??0} ${M.state} jobs`:R==="remove"?"Job removed":R==="retry"?"Job queued to run again":R==="retryAll"?"Failed jobs queued to run again":R==="pause"?"Queue paused":"Queue resumed"),(R==="remove"||R==="retry")&&N(null),await k()}catch(K){b(K instanceof Error?K.message:String(K))}finally{w(!1)}},z=(R=!1)=>`rounded-md border px-2 py-0.5 text-xs disabled:opacity-50 ${R?"border-red-500/40 text-red-500 hover:bg-red-500/10":"border-border-strong bg-surface-2 text-text-secondary hover:text-text-strong"}`,L=[(()=>{var R=Yd(),M=R.firstChild;return n(M,o(re,{get each(){return e()??[]},children:Z=>o(re,{get each(){return Z.queues},children:B=>{const K=()=>l()?.source===Z.source&&l()?.queue===B.name;return(()=>{var Q=Nt();return Q.$$click=()=>A({source:Z.source,queue:B.name},"failed"),n(Q,()=>B.name,null),n(Q,o(y,{get when(){return B.paused},get children(){return eu()}}),null),n(Q,o(y,{get when(){return B.counts.failed},get children(){var ne=tu();return n(ne,()=>B.counts.failed),ne}}),null),q(ne=>{var ue=(e()?.length??0)>1?Z.source:void 0,te=`flex items-center gap-1.5 rounded-md border px-2 py-0.5 text-xs font-semibold ${K()?"border-kick-500/30 bg-kick-500/20 text-kick-500":"border-border-strong bg-surface-2 text-text-secondary hover:text-text-body"}`;return ue!==ne.e&&F(Q,"title",ne.e=ue),te!==ne.t&&U(Q,ne.t=te),ne},{e:void 0,t:void 0}),Q})()}})})),n(R,o(y,{get when(){return D()},children:Z=>(()=>{var B=ru();return n(B,o(re,{each:$u,children:K=>(()=>{var Q=nu(),ne=Q.firstChild,ue=ne.nextSibling;return Q.$$click=()=>A(l(),K),n(Q,K,ne),n(ue,()=>Z().counts[K]??"–"),q(te=>{var fe=`border-b-2 pb-0.5 ${i()===K?"border-kick-500 font-semibold text-text-strong":"border-transparent text-text-muted hover:text-text-body"}`,Oe=`tabular-nums ${Z().counts[K]?Vn[K]:""}`;return fe!==te.e&&U(Q,te.e=fe),Oe!==te.t&&U(ue,te.t=Oe),te},{e:void 0,t:void 0}),Q})()})),B})()}),null),n(R,o(y,{get when(){return D()},get children(){var Z=Wd();return n(Z,o(y,{get when(){return ae(()=>!!(E("retryAll")&&i()==="failed"))()&&D().counts.failed},get children(){var B=Vd();return B.$$click=()=>{V("retryAll")},q(K=>{var Q=z(),ne=f();return Q!==K.e&&U(B,K.e=Q),ne!==K.t&&(B.disabled=K.t=ne),K},{e:void 0,t:void 0}),B}}),null),n(Z,o(y,{get when(){return ae(()=>!!E("clean"))()&&u().length>0},get children(){var B=Nt();return B.addEventListener("blur",()=>I(null)),B.$$click=()=>{V("clean",{state:i(),confirm:!0})},n(B,(()=>{var K=ae(()=>C()===`clean:${i()}`);return()=>K()?`Confirm: delete all ${i()}`:`Clean ${i()}`})()),q(K=>{var Q=z(!0),ne=f();return Q!==K.e&&U(B,K.e=Q),ne!==K.t&&(B.disabled=K.t=ne),K},{e:void 0,t:void 0}),B}}),null),n(Z,o(y,{get when(){return E(D().paused?"resume":"pause")},get children(){var B=Nt();return B.$$click=()=>{V(D().paused?"resume":"pause")},n(B,()=>D().paused?"Resume queue":"Pause queue"),q(K=>{var Q=z(),ne=f();return Q!==K.e&&U(B,K.e=Q),ne!==K.t&&(B.disabled=K.t=ne),K},{e:void 0,t:void 0}),B}}),null),n(Z,o(y,{get when(){return S()},get children(){var B=Gd();return n(B,S),B}}),null),Z}}),null),R})(),(()=>{var R=Zd();return n(R,o(y,{get when(){return g()},get children(){var M=Qd();return n(M,g),M}}),null),n(R,o(y,{get when(){return u().length>0},get fallback(){return o(y,{get when(){return ae(()=>!!D())()&&!g()},get children(){var M=lu(),Z=M.firstChild.nextSibling;return Z.nextSibling,n(M,i,Z),M}})},get children(){return[o(re,{get each(){return u()},children:M=>(()=>{var Z=au(),B=Z.firstChild;B.firstChild;var K=B.nextSibling,Q=K.nextSibling,ne=Q.nextSibling;return Z.$$click=()=>W(M.id),n(B,()=>M.id,null),n(K,()=>M.name),n(Q,()=>M.failedReason??""),n(Z,o(y,{get when(){return M.attempts>1||M.maxAttempts},get children(){var ue=su();return n(ue,()=>M.attempts,null),n(ue,(()=>{var te=ae(()=>!!M.maxAttempts);return()=>te()?`/${M.maxAttempts}`:""})(),null),ue}}),ne),n(ne,(()=>{var ue=ae(()=>!!(M.finishedAt??M.createdAt));return()=>ue()?tr(M.finishedAt??M.createdAt):""})()),q(()=>U(Z,`flex w-full cursor-pointer items-center gap-2 border-0 border-b border-border/50 px-2.5 py-1 text-left text-[0.76rem] text-text-body ${_()===M.id?"bg-accent/12 shadow-[inset_2px_0_0_0_var(--color-accent)]":"bg-transparent hover:bg-surface-hover"}`)),Z})()}),o(y,{get when(){return u().length>=x()},get children(){var M=Xd();return M.$$click=()=>{v(Z=>Z+pr),O()},M}})]}}),null),R})()],ie=o(y,{get when(){return $()},get fallback(){return(()=>{var R=ou(),M=R.firstChild;return n(M,()=>_()?"Loading…":"Select a job to see its data and errors"),R})()},children:R=>(()=>{var M=fu(),Z=M.firstChild,B=Z.firstChild,K=B.nextSibling,Q=K.nextSibling;Q.firstChild,Q.nextSibling;var ne=Z.nextSibling,ue=ne.firstChild.nextSibling;return n(B,()=>R().name),n(K,()=>R().state),n(Q,()=>R().id,null),n(Z,o(y,{get when(){return ae(()=>!!E("retry"))()&&R().state==="failed"},get children(){var te=iu();return te.$$click=()=>{V("retry",{id:R().id})},q(fe=>{var Oe=z(),Le=f();return Oe!==fe.e&&U(te,fe.e=Oe),Le!==fe.t&&(te.disabled=fe.t=Le),fe},{e:void 0,t:void 0}),te}}),null),n(Z,o(y,{get when(){return E("remove")},get children(){var te=Nt();return te.addEventListener("blur",()=>I(null)),te.$$click=()=>{V("remove",{id:R().id,confirm:!0})},n(te,()=>C()===`remove:${R().id}`?"Confirm remove":"Remove"),q(fe=>{var Oe=z(!0),Le=f();return Oe!==fe.e&&U(te,fe.e=Oe),Le!==fe.t&&(te.disabled=fe.t=Le),fe},{e:void 0,t:void 0}),te}}),null),n(ue,()=>R().attempts,null),n(ue,(()=>{var te=ae(()=>!!R().maxAttempts);return()=>te()?` of ${R().maxAttempts}`:""})(),null),n(ne,o(y,{get when(){return R().createdAt},get children(){return[cu(),(()=>{var te=mr();return n(te,()=>new Date(R().createdAt).toLocaleString()),te})()]}}),null),n(ne,o(y,{get when(){return ae(()=>!!R().processedAt)()&&R().finishedAt},get children(){return[du(),(()=>{var te=mr();return n(te,()=>Se(R().finishedAt-R().processedAt)),te})()]}}),null),n(ne,o(y,{get when(){return R().delayMs},get children(){return[uu(),(()=>{var te=mr();return n(te,()=>Se(R().delayMs)),te})()]}}),null),n(M,o(y,{get when(){return R().failedReason},get children(){var te=hu();return n(te,()=>R().failedReason),te}}),null),n(M,o(xr,{title:"Data",get children(){return Gn(R().data)}}),null),n(M,o(y,{get when(){return ae(()=>R().result!==void 0)()&&R().result!==null},get children(){return o(xr,{title:"Result",get children(){return Gn(R().result)}})}}),null),n(M,o(y,{get when(){return R().stacktrace?.length},get children(){return o(xr,{get title(){return`Stack traces (${R().stacktrace.length})`},get children(){return o(re,{get each(){return R().stacktrace.toReversed()},children:te=>(()=>{var fe=vu();return n(fe,te),fe})()})}})}}),null),q(()=>U(K,`text-xs font-semibold ${Vn[R().state]}`)),M})()});return o(y,{get when(){return ae(()=>!!e())()&&e().length>0},get fallback(){return(()=>{var R=gu(),M=R.firstChild;return n(M,o(y,{get when(){return r()},get fallback(){return e()?wu:"Loading…"},get children(){return r()}})),R})()},get children(){return o(lt,{storageKey:"queues",left:L,right:ie,defaultLeft:560})}})},wu=[mu(),pu()];function Gn(e){let t;try{t=JSON.stringify(e,null,2)??String(e)}catch{t=String(e)}return(()=>{var r=xu();return n(r,t),r})()}var xr=e=>(()=>{var t=bu(),r=t.firstChild;return n(r,()=>e.title),n(t,()=>e.children,null),t})();we(["click"]);var _u=d('<button type=button> <span class="font-normal opacity-70">'),ku=d('<div class="flex h-full flex-col"><div class="flex items-center gap-1 border-b border-border px-3 py-2"></div><div class="flex min-h-0 flex-1 flex-col">'),Su=d('<div class="mb-2 text-sm text-red-500">'),Cu=d('<div class="mb-2 text-xs text-text-muted"role=status>'),Eu=d('<table class="w-full border-collapse text-[0.78rem]"><thead><tr class="text-left text-[0.66rem] uppercase tracking-wider text-text-muted"><th class="py-1.5 pr-3 font-semibold">Job</th><th class="py-1.5 pr-3 font-semibold">Schedule</th><th class="py-1.5 pr-3 font-semibold">Next</th><th class="py-1.5 pr-3 font-semibold">Last run</th><th class="py-1.5 pr-3 text-right font-semibold">Runs</th><th class=py-1.5></th></tr></thead><tbody>'),Mu=d(`<div class="flex min-h-0 flex-1 flex-col overflow-y-auto p-3"><p class="mb-2 text-xs text-text-muted">Every <code>@Cron</code> job, whatever schedules it. Runs are counted from when the app started; <strong>Run now</strong> starts one immediately (it does the job's real work — the button asks twice).`),Tu=d("<div class=empty>No <code>@Cron</code> jobs — decorate a service method with <code>@Cron('*/5 * * * *')</code> and register the service."),Wn=d('<div class="text-xs text-text-muted">'),Au=d('<span class="dt-tone dt-tone-gray">disabled'),Ou=d("<span class=text-blue-500>running…"),Lu=d('<div class="max-w-md truncate text-xs text-red-500">'),Ru=d("<span class=text-red-500> · <!> failed"),qu=d('<tr><td class="py-1.5 pr-3"><div class="font-mono text-text-strong"></div></td><td class="py-1.5 pr-3 font-mono whitespace-nowrap"></td><td class="py-1.5 pr-3 whitespace-nowrap text-text-secondary"></td><td class="py-1.5 pr-3"></td><td class="py-1.5 pr-3 text-right tabular-nums"></td><td class="py-1.5 text-right"><button type=button>'),Iu=d("<span class=text-text-muted>—"),Nu=d("<span>"),Pu=d("<span class=text-text-muted>not since start"),Du=d("<span class=whitespace-nowrap><span></span> <span class=text-text-muted>"),Bl="kickjs-devtools:jobs:view";function Hu(){try{const e=localStorage.getItem(Bl);return e==="scheduled"||e==="queues"?e:null}catch{return null}}var Uu=()=>{const[e,t]=P(Hu()??(se.cron().length||!se.queues().queues.length?"scheduled":"queues")),r=l=>{t(l);try{localStorage.setItem(Bl,l)}catch{}},s=(l,a,i)=>(()=>{var c=_u(),u=c.firstChild,h=u.nextSibling;return c.$$click=()=>r(l),n(c,a,u),n(h,i),q(g=>{var p=e()===l,x=`rounded-md border px-2.5 py-0.5 text-xs font-semibold ${e()===l?"border-kick-500/30 bg-kick-500/20 text-kick-500":"border-border-strong bg-surface-2 text-text-secondary hover:text-text-body"}`;return p!==g.e&&F(c,"aria-pressed",g.e=p),x!==g.t&&U(c,g.t=x),g},{e:void 0,t:void 0}),c})();return(()=>{var l=ku(),a=l.firstChild,i=a.nextSibling;return n(a,()=>s("scheduled","Scheduled",se.cron().length),null),n(a,()=>s("queues","Queues",se.queues().queues.length),null),n(i,o(y,{get when(){return e()==="scheduled"},get fallback(){return o(yu,{})},get children(){return o(Bu,{})}})),l})()};function ju(e,t){const r=Math.round((e-t)/1e3);return r<=0?"now":`in ${Gt(r).split(" ")[0]}`}var Bu=()=>{const[e,t]=P(Date.now()),[r,s]=P(null),[l,a]=P(null),[i,c]=P(null),u=async()=>{try{me.setCron((await ye.cron()).jobs),c(null)}catch(g){c(g instanceof Error?g.message:String(g))}t(Date.now())};Ie(()=>{u();const g=setInterval(()=>{u()},2e3);ke(()=>clearInterval(g))});const h=async g=>{if(l()!==g.name){a(g.name);return}a(null);try{await ye.cronRun(g.name),s(`Started ${g.name}`),u()}catch(p){s(p instanceof Error?p.message:String(p))}};return(()=>{var g=Mu();return g.firstChild,n(g,o(y,{get when(){return i()},get children(){var p=Su();return n(p,i),p}}),null),n(g,o(y,{get when(){return r()},get children(){var p=Cu();return n(p,r),p}}),null),n(g,o(y,{get when(){return se.cron().length},get fallback(){return Tu()},get children(){var p=Eu(),x=p.firstChild.nextSibling;return n(x,o(Fr,{get each(){return se.cron()},children:v=>(()=>{var _=qu(),N=_.firstChild,$=N.firstChild,m=N.nextSibling,S=m.nextSibling,b=S.nextSibling,f=b.nextSibling,w=f.nextSibling.firstChild;return n($,()=>v().name),n(N,o(y,{get when(){return v().description},get children(){var C=Wn();return n(C,()=>v().description),C}}),null),n(N,o(y,{get when(){return!v().enabled},get children(){return Au()}}),null),n(m,()=>v().expression,null),n(m,o(y,{get when(){return v().timezone},get children(){var C=Wn();return n(C,()=>v().timezone),C}}),null),n(S,o(y,{get when(){return v().nextRunAt},get fallback(){return Iu()},children:C=>(()=>{var I=Nu();return n(I,()=>ju(C(),e())),q(()=>F(I,"title",new Date(C()).toLocaleString())),I})()})),n(b,o(y,{get when(){return v().stats.running>0},get fallback(){return o(y,{get when(){return v().stats.lastStartedAt},get fallback(){return Pu()},children:C=>(()=>{var I=Du(),H=I.firstChild,D=H.nextSibling.nextSibling;return n(H,()=>v().stats.lastOutcome==="failed"?"✕ failed":"✓ ok"),n(D,()=>tr(C(),e()),null),n(D,o(y,{get when(){return v().stats.lastDurationMs!==void 0},get children(){return[" · ",ae(()=>Se(v().stats.lastDurationMs))]}}),null),q(()=>U(H,v().stats.lastOutcome==="failed"?"text-red-500":"text-emerald-500")),I})()})},get children(){return Ou()}}),null),n(b,o(y,{get when(){return ae(()=>v().stats.lastOutcome==="failed")()&&v().stats.lastError},get children(){var C=Lu();return n(C,()=>v().stats.lastError),q(()=>F(C,"title",v().stats.lastError)),C}}),null),n(f,()=>v().stats.runs,null),n(f,o(y,{get when(){return v().stats.failures},get children(){var C=Ru(),I=C.firstChild.nextSibling;return I.nextSibling,n(C,()=>v().stats.failures,I),C}}),null),w.addEventListener("blur",()=>l()===v().name&&a(null)),w.$$click=()=>{h(v())},n(w,()=>l()===v().name?"Run it?":"Run now"),q(C=>{var I=`border-t border-border/60 align-top ${v().enabled?"":"opacity-60"}`,H=!v().enabled||v().stats.running>0&&!v().overlap,D=`whitespace-nowrap rounded-md border px-2 py-0.5 text-xs disabled:cursor-not-allowed disabled:opacity-50 ${l()===v().name?"border-amber-500/50 bg-amber-500/15 text-amber-500":"border-border-strong bg-surface-2 text-text-secondary hover:text-text-strong"}`;return I!==C.e&&U(_,C.e=I),H!==C.t&&(w.disabled=C.t=H),D!==C.a&&U(w,C.a=D),C},{e:void 0,t:void 0,a:void 0}),_})()})),p}}),null),g})()};we(["click"]);var zu=d('<div class="min-h-0 flex-1 overflow-y-auto">'),Fu=d("<div class=empty>No <code>WsAdapter</code> — add one from <code>@forinda/kickjs-ws</code> to see its namespaces here."),Ju=d("<div class=empty>No namespaces yet"),Ku=d('<span class="flex flex-wrap gap-1">'),Vu=d('<button type=button><span class="flex items-center gap-2"><span class="min-w-0 flex-1 truncate font-mono text-text-body"></span><span class="text-[0.7rem] text-text-muted tabular-nums"> open'),Gu=d('<span class="rounded border border-border px-1.5 font-mono text-[0.66rem] text-text-secondary">'),Wu=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">Select a namespace to connect to it'),Yu=d('<div class="border-b border-border p-2 text-xs text-text-muted">'),Qu=d('<button type=button class="shrink-0 px-3 py-1.5 text-xs font-semibold rounded-lg border bg-surface-2 text-text-secondary border-border-strong hover:text-text-body disabled:cursor-not-allowed disabled:opacity-50">Connect'),Xu=d('<p class="text-xs text-red-500">'),Zu=d(`<div class="flex h-full flex-col gap-3 overflow-hidden p-3 text-sm"><div class="flex flex-col gap-2"><div class="flex items-center gap-2"><span class="font-mono text-text-strong"></span><span>● </span></div><div class="flex items-center gap-2"><input class="w-full min-w-0 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"aria-label="Query string"placeholder="query, e.g. token={{token}}"><input class="w-full min-w-0 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"aria-label=Subprotocols placeholder="protocols, e.g. bearer, {{token}}"></div><p class="text-xs text-text-muted"><code>{{variables}}</code> come from the API runner's active environment. Browsers can't set headers on a WebSocket: pass a token as subprotocols (<code>bearer, {{token}}</code>), in the query, or rely on cookies — whichever your app reads.</p></div><div class="flex flex-col gap-2"><div class="flex items-center gap-2"><input class="w-full min-w-0 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"aria-label=Event><datalist></datalist><button type=button class="shrink-0 px-3 py-1.5 text-xs font-semibold rounded-lg border bg-surface-2 text-text-secondary border-border-strong hover:text-text-body disabled:cursor-not-allowed disabled:opacity-50">Send</button></div><textarea class="w-full min-w-0 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500 h-24 font-mono text-xs"aria-label="Data (JSON)"placeholder="data as JSON, e.g. { &quot;channelId&quot;: &quot;{{channelId}}&quot; } — optional"></textarea></div><div class="flex min-h-0 flex-1 flex-col"><div class="mb-1 flex items-center gap-2 text-xs text-text-muted"><span class=flex-1>Messages (<!>)</span><button type=button class="underline hover:text-text-body">Clear</button></div><div class="min-h-0 flex-1 overflow-y-auto rounded-lg border border-border bg-surface-2 p-2 font-mono text-xs">`),eh=d('<button type=button class="shrink-0 px-3 py-1.5 text-xs font-semibold rounded-lg border bg-surface-2 text-text-secondary border-border-strong hover:text-text-body disabled:cursor-not-allowed disabled:opacity-50">Disconnect'),th=d("<option>"),rh=d("<span class=text-text-muted>Nothing yet."),nh=d('<div class="flex gap-2 border-b border-border/40 py-1 last:border-0"><span></span><span class="shrink-0 text-text-muted"></span><pre>'),zl=e=>`kickjs-devtools:sockets:${e}`;function lh(e){try{const t=JSON.parse(localStorage.getItem(zl(e))??"{}");return{query:typeof t.query=="string"?t.query:"",protocols:typeof t.protocols=="string"?t.protocols:"",event:typeof t.event=="string"?t.event:"",data:typeof t.data=="string"?t.data:""}}catch{return{query:"",protocols:"",event:"",data:""}}}var sh=()=>{const[e,t]=P(null),r=()=>Object.keys(se.ws().namespaces??{}).toSorted(),s=c=>se.ws().namespaces?.[c],l=async()=>{try{me.setWs(await ye.ws())}catch{}};Ie(()=>{l();const c=setInterval(()=>{l()},2e3);ke(()=>clearInterval(c))});const a=(()=>{var c=zu();return n(c,o(y,{get when(){return se.ws().enabled},get fallback(){return Fu()},get children(){return o(y,{get when(){return r().length},get fallback(){return Ju()},get children(){return o(re,{get each(){return r()},children:u=>(()=>{var h=Vu(),g=h.firstChild.firstChild,p=g.nextSibling,x=p.firstChild;return h.$$click=()=>t(u),n(g,u),n(p,()=>s(u)?.connections??0,x),n(h,o(y,{get when(){return s(u)?.events?.length},get children(){var v=Ku();return n(v,o(re,{get each(){return s(u)?.events},children:_=>(()=>{var N=Gu();return n(N,_),N})()})),v}}),null),q(()=>U(h,`flex w-full flex-col gap-1 border-0 border-b border-border/50 px-2.5 py-1.5 text-left text-[0.78rem] ${e()===u?"bg-accent/12 shadow-[inset_2px_0_0_0_var(--color-accent)]":"bg-transparent hover:bg-surface-hover"}`)),h})()})}})}})),c})(),i=o(y,{get when(){return e()},keyed:!0,get fallback(){return Wu()},children:c=>o(ah,{path:c,get events(){return se.ws().namespaces?.[c]?.events??[]}})});return o(lt,{storageKey:"sockets",get left(){return[(()=>{var c=Yu();return n(c,o(y,{get when(){return se.ws().enabled},get children(){return[ae(()=>r().length)," namespaces · ",ae(()=>se.ws().activeConnections??0)," open ·"," ",ae(()=>(se.ws().messagesReceived??0)+(se.ws().messagesSent??0))," messages"]}})),c})(),a]},right:i})},ah=e=>{const[t,r]=P(lh(e.path)),[s,l]=P("closed"),[a,i]=P([]),[c,u]=P(null);let h=null,g=0,p;const x=b=>{const f={...t(),...b};r(f);try{localStorage.setItem(zl(e.path),JSON.stringify(f))}catch{}},v=(b,f)=>{i(w=>[...w,{id:g++,dir:b,at:Date.now(),text:f}].slice(-200)),queueMicrotask(()=>p?.scrollTo({top:p.scrollHeight}))},_=()=>{const b=Ut(t().query.trim().replace(/^\?/,""),dr());return`${location.protocol==="https:"?"wss":"ws"}://${location.host}${e.path}${b?`?${b}`:""}`},N=()=>{if(h)return;const b=_(),f=Ut(t().protocols,dr()).split(",").map(C=>C.trim()).filter(Boolean);l("connecting"),v("info",`Connecting to ${e.path}…`);let w;try{w=new WebSocket(b,f)}catch(C){l("closed"),v("info",C instanceof Error?C.message:String(C));return}h=w,w.addEventListener("open",()=>{l("open"),v("info","Connected")}),w.addEventListener("message",C=>v("in",typeof C.data=="string"?C.data:"(binary frame)")),w.addEventListener("error",()=>v("info","Socket error — see the close reason below")),w.addEventListener("close",C=>{h===w&&(h=null),l("closed"),v("info",`Closed (${C.code}${C.reason?`: ${C.reason}`:""})`)})},$=()=>h?.close(1e3,"closed from DevTools");ke(()=>h?.close(1e3,"closed from DevTools"));const m=()=>{if(!h||s()!=="open")return;const b=Ut(t().data.trim(),dr());let f;if(b)try{f=JSON.parse(b)}catch{u("Data is not valid JSON");return}u(null);const w=JSON.stringify(f===void 0?{event:t().event}:{event:t().event,data:f});h.send(w),v("out",w)},S=b=>Tl(b)??b;return(()=>{var b=Zu(),f=b.firstChild,w=f.firstChild,C=w.firstChild,I=C.nextSibling;I.firstChild;var H=w.nextSibling,D=H.firstChild,E=D.nextSibling,T=f.nextSibling,O=T.firstChild,j=O.firstChild,k=j.nextSibling,A=k.nextSibling,W=O.nextSibling,V=T.nextSibling.firstChild,z=V.firstChild,L=z.firstChild.nextSibling;L.nextSibling;var ie=z.nextSibling,R=V.nextSibling;return n(C,()=>e.path),n(I,s,null),D.$$input=M=>x({query:M.currentTarget.value}),E.$$input=M=>x({protocols:M.currentTarget.value}),n(H,o(y,{get when(){return s()==="closed"},get fallback(){return(()=>{var M=eh();return M.$$click=$,M})()},get children(){var M=Qu();return M.$$click=N,M}}),null),j.$$input=M=>x({event:M.currentTarget.value}),n(k,o(re,{get each(){return e.events},children:M=>(()=>{var Z=th();return Z.value=M,Z})()})),A.$$click=m,W.$$input=M=>x({data:M.currentTarget.value}),F(W,"spellcheck",!1),n(T,o(y,{get when(){return c()},get children(){var M=Xu();return n(M,c),M}}),null),n(z,()=>a().length,L),ie.$$click=()=>i([]),et(M=>p=M,R),n(R,o(y,{get when(){return a().length},get fallback(){return rh()},get children(){return o(re,{get each(){return a()},children:M=>(()=>{var Z=nh(),B=Z.firstChild,K=B.nextSibling,Q=K.nextSibling;return n(B,(()=>{var ne=ae(()=>M.dir==="out");return()=>ne()?"↑":M.dir==="in"?"↓":"·"})()),n(K,()=>new Date(M.at).toLocaleTimeString()),n(Q,(()=>{var ne=ae(()=>M.dir==="info");return()=>ne()?M.text:S(M.text)})()),q(ne=>{var ue=`w-4 shrink-0 ${M.dir==="out"?"text-blue-500":M.dir==="in"?"text-emerald-500":"text-text-muted"}`,te=M.dir==="out"?"sent":M.dir==="in"?"received":"",fe=`m-0 min-w-0 flex-1 whitespace-pre-wrap break-all ${M.dir==="info"?"text-text-muted":"text-text-body"}`;return ue!==ne.e&&U(B,ne.e=ue),te!==ne.t&&F(B,"title",ne.t=te),fe!==ne.a&&U(Q,ne.a=fe),ne},{e:void 0,t:void 0,a:void 0}),Z})()})}})),q(M=>{var Z=`text-xs ${s()==="open"?"text-emerald-500":s()==="connecting"?"text-amber-500":"text-text-muted"}`,B=s()!=="closed",K=s()!=="closed",Q=`events-${e.path}`,ne=e.events.length?`event, e.g. ${e.events[0]}`:"event name",ue=`events-${e.path}`,te=s()!=="open"||!t().event.trim(),fe=s()==="open"?"Send { event, data }":"Connect first";return Z!==M.e&&U(I,M.e=Z),B!==M.t&&(D.disabled=M.t=B),K!==M.a&&(E.disabled=M.a=K),Q!==M.o&&F(j,"list",M.o=Q),ne!==M.i&&F(j,"placeholder",M.i=ne),ue!==M.n&&F(k,"id",M.n=ue),te!==M.s&&(A.disabled=M.s=te),fe!==M.h&&F(A,"title",M.h=fe),M},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),q(()=>D.value=t().query),q(()=>E.value=t().protocols),q(()=>j.value=t().event),q(()=>W.value=t().data),b})()};we(["click","input"]);function oh(){let e=new Map,t=new Set;return{on:(r,s)=>{let l=e.get(r);return l||(l=new Set,e.set(r,l)),l.add(s),()=>{let a=e.get(r);a?.delete(s),a&&a.size===0&&e.delete(r)}},onAny:r=>(t.add(r),()=>{t.delete(r)}),dispatch:r=>{let s=e.get(r.type);if(s&&s.size>0)for(let l of[...s])try{l(r.payload)}catch(a){console.error(`[kick:devtools-bus] handler for "${r.type}" threw`,a)}if(t.size>0)for(let l of[...t])try{l(r)}catch(a){console.error("[kick:devtools-bus] onAny handler threw",a)}}}}function ih(e={}){let t=oh(),r=e.channel===!1?null:e.channel??"kick-devtools",s=r!=null&&typeof BroadcastChannel<"u"?new BroadcastChannel(r):null;s?.addEventListener("message",x=>{let v=x.data;v&&typeof v.type=="string"&&typeof v.ts=="number"&&t.dispatch({...v,__kick_origin:"broadcast"})});let l=null,a=0,i=null,c=e.reconnectMs??500,u=e.reconnectMaxMs??5e3,h=()=>{e.wsUrl&&typeof WebSocket<"u"&&(!l||l.readyState!==WebSocket.OPEN&&l.readyState!==WebSocket.CONNECTING)&&(l=new WebSocket(e.wsUrl),l.addEventListener("open",()=>{a=0}),l.addEventListener("message",x=>{try{let v=JSON.parse(String(x.data));if(!v||typeof v.type!="string"||typeof v.ts!="number")return;t.dispatch({...v,__kick_origin:"ws"})}catch{}}),l.addEventListener("close",()=>{l=null,g()}),l.addEventListener("error",()=>{g()}))},g=()=>{if(!e.wsUrl||i!=null)return;a+=1;let x=Math.min(a*c,u);i=setTimeout(()=>{i=null,h()},x)},p=x=>{s?.postMessage(x),l&&l.readyState===WebSocket.OPEN?l.send(JSON.stringify(x)):e.wsUrl&&h()};return{on(x,v){return h(),t.on(x,v)},onAny(x){return h(),t.onAny(x)},emit(x,v){let _={type:x,payload:v,ts:Date.now(),__kick_origin:"local"};t.dispatch(_),p(_)}}}var bt=null,[ch,Dr]=P([]);function dh(){if(bt)return()=>{};const e=`${nt()}/_bus`,t=location.protocol==="https:"?"wss:":"ws:",r=Tt(),s=r?`?token=${encodeURIComponent(r)}`:"",l=`${t}//${location.host}${e}${s}`;bt=ih({channel:"kick-devtools",wsUrl:l});const a=bt.onAny(i=>{Dr(c=>{const u=c.length>=500?c.slice(1):c.slice();return u.push(i),u})});return()=>{a(),bt=null,Dr([])}}function Xt(){return ch}function uh(){Dr([])}function Fl(){return bt}var br=200;function Hr(e){if(e==null)return String(e);if(typeof e=="bigint")return`${e.toString()}n`;if(typeof e!="object")return String(e);const t=new WeakSet,r=(l,a)=>{if(typeof a=="bigint")return`${a.toString()}n`;if(a instanceof Error)return{name:a.name,message:a.message};if(a&&typeof a=="object"){if(t.has(a))return"[Circular]";t.add(a)}return a};let s;try{s=JSON.stringify(e,r)}catch{s="[unserialisable]"}return s===void 0&&(s=String(e)),s.length>br?`${s.slice(0,br)}… (+${s.length-br} chars)`:s}function Ur(e){const t=new Date(e);return`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}:${String(t.getSeconds()).padStart(2,"0")}.${String(t.getMilliseconds()).padStart(3,"0")}`}function hh(e){return e.replace(/'(?:[^']|'')*'/g,"?").replace(/\$\d+|:\w+|@\w+/g,"?").replace(/\b\d+(?:\.\d+)?\b/g,"?").replace(/\(\s*\?(?:\s*,\s*\?)+\s*\)/g,"(?)").replace(/\s+/g," ").trim()}var fh=d("<button type=button>"),vh=d('<span>p95 <b class="text-text-body tabular-nums">'),gh=d("<span> statements"),mh=d('<div class="flex flex-col gap-1.5 border-b border-border p-2"><div class="flex items-center gap-1.5"><input type=text placeholder="Filter SQL…"class="min-w-0 flex-1 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"><div class="flex overflow-hidden rounded-md border border-border-strong text-xs"></div></div><div class="flex flex-wrap gap-x-3 text-xs text-text-muted"><span><b class="text-text-body tabular-nums"></b> queries</span><span><b class=tabular-nums></b> failed</span><span><b class=tabular-nums></b> ≥ 50 ms'),ph=d('<table class="w-full table-fixed border-collapse text-[0.76rem]"><colgroup><col><col class=w-14><col class=w-16><col class=w-20><col class=w-32><col class=w-20></colgroup><thead class="sticky top-0 z-1 border-b border-border bg-surface-2 text-xs"><tr></tr></thead><tbody>'),xh=d('<div class="min-h-0 flex-1 overflow-y-auto">'),bh=d("<div class=empty>No queries yet. kick/db reports each statement here when DevTools is installed — run one."),$h=d('<button type=button><span class="w-[5.6rem] shrink-0 font-mono text-[0.68rem] text-text-muted tabular-nums"></span><span></span><span class="min-w-0 flex-1 truncate font-mono text-[0.7rem]">'),yh=d('<tr><td class="truncate px-2 py-1 font-mono text-[0.7rem]"></td><td class="px-2 py-1 text-right tabular-nums"></td><td></td><td></td><td class="px-2 py-1 text-right tabular-nums"><span class="inline-flex items-center gap-1.5"><span class="h-1.5 w-12 overflow-hidden rounded-full bg-border/60"><span class="block h-full rounded-full bg-kick-500/70"></span></span><span></span></span></td><td class="px-2 py-1 text-right tabular-nums">'),wh=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">Select a query to see its SQL and parameters'),_h=d('<section class="flex h-full flex-col gap-3 overflow-y-auto bg-surface-1 p-4 text-[0.8rem]">'),kh=d('<dl class="grid grid-cols-3 gap-2">'),Sh=d('<div class="text-xs text-text-muted">'),Ch=d('<div class="rounded-md border border-red-500/40 bg-red-500/10 px-3 py-2 text-red-500">'),Eh=d('<pre class="m-0 whitespace-pre-wrap break-words rounded-md border border-border bg-surface-2 p-3 font-mono text-xs">'),Mh=d('<ol class="m-0 list-none rounded-md border border-border bg-surface-2 p-2 font-mono text-xs">'),Th=d('<li class="flex gap-3 py-0.5"><span class="w-6 text-right text-text-muted">$</span><span class=break-all>'),Ah=d('<div class="rounded-md border border-border bg-surface-2 px-3 py-2"><dt class="text-[0.66rem] uppercase tracking-wider text-text-muted"></dt><dd class="m-0 font-semibold tabular-nums">'),Oh=d('<div><h3 class="mb-1.5 text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">'),Lh=50,Rh=()=>{const[e,t]=P([]),[r,s]=P("slowest"),[l,a]=P(""),[i,c]=P(null),u=Pl("totalMs"),h=b=>{t(f=>[...f,b].slice(-500))},g=(b,f)=>{const w=b;return{sql:w.sql,parameters:w.parameters,durationMs:0,dialect:w.dialect,error:w.error instanceof Error?w.error.message:String(w.error??"query error"),ts:f}};Ie(()=>{for(const C of Xt()())C.type==="db:query"?h({...C.payload,ts:C.ts}):C.type==="db:query-error"&&h(g(C.payload,C.ts));const b=Fl(),f=b?.on("db:query",C=>h({...C,ts:C.ts??Date.now()})),w=b?.on("db:query-error",C=>h(g(C,Date.now())));ke(()=>{f?.(),w?.()})});const p=ce(()=>{const b=l().trim().toLowerCase();return b?e().filter(f=>f.sql.toLowerCase().includes(b)):e()}),x=ce(()=>{const b=new Map;for(const w of p()){const C=hh(w.sql),I=b.get(C)??[];I.push(w),b.set(C,I)}const f=[...b].map(([w,C])=>{const I=C.filter(D=>!D.error).map(D=>D.durationMs),H=I.reduce((D,E)=>D+E,0);return{sql:w,calls:C.length,errors:C.length-I.length,totalMs:H,meanMs:I.length?H/I.length:0,p95Ms:Mr(I,95)??0,last:C[C.length-1]}});return u.apply(f,(w,C)=>w[C])}),v=ce(()=>Math.max(1,...x().map(b=>b.p95Ms))),_=ce(()=>{const b=p(),f=b.filter(w=>!w.error).map(w=>w.durationMs);return{total:b.length,errors:b.length-f.length,slow:f.filter(w=>w>=Lh).length,p95:Mr(f,95)}}),N=(b,f)=>(()=>{var w=fh();return w.$$click=()=>s(b),n(w,f),q(C=>{var I=r()===b,H=`px-2.5 py-1 font-semibold ${r()===b?"bg-kick-500/20 text-kick-500":"bg-surface-2 text-text-secondary hover:text-text-body"}`;return I!==C.e&&F(w,"aria-pressed",C.e=I),H!==C.t&&U(w,C.t=H),C},{e:void 0,t:void 0}),w})(),$=b=>`flex w-full cursor-pointer items-center gap-2 border-0 border-b border-border/50 px-2.5 py-1 text-left text-[0.76rem] text-text-body ${b?"bg-accent/12 shadow-[inset_2px_0_0_0_var(--color-accent)]":"bg-transparent hover:bg-surface-hover"}`,m=[(()=>{var b=mh(),f=b.firstChild,w=f.firstChild,C=w.nextSibling,I=f.nextSibling,H=I.firstChild,D=H.firstChild,E=H.nextSibling,T=E.firstChild,O=E.nextSibling,j=O.firstChild;return w.$$input=k=>a(k.currentTarget.value),n(C,()=>N("slowest","Slowest"),null),n(C,()=>N("recent","Recent"),null),n(D,()=>_().total),n(T,()=>_().errors),n(j,()=>_().slow),n(I,o(y,{get when(){return _().p95!==void 0},get children(){var k=vh(),A=k.firstChild.nextSibling;return n(A,()=>Se(_().p95)),k}}),null),n(I,o(y,{get when(){return r()==="slowest"},get children(){var k=gh(),A=k.firstChild;return n(k,()=>x().length,A),k}}),null),q(k=>{var A=_().errors?"text-red-500":"",W=_().slow?"text-amber-500":"";return A!==k.e&&U(E,k.e=A),W!==k.t&&U(O,k.t=W),k},{e:void 0,t:void 0}),q(()=>w.value=l()),b})(),(()=>{var b=xh();return n(b,o(y,{get when(){return e().length>0},get fallback(){return bh()},get children(){return o(y,{get when(){return r()==="slowest"},get fallback(){return o(re,{get each(){return p().toReversed()},children:f=>(()=>{var w=$h(),C=w.firstChild,I=C.nextSibling,H=I.nextSibling;return w.$$click=()=>c({query:f}),n(C,()=>Ur(f.ts)),n(I,(()=>{var D=ae(()=>!!f.error);return()=>D()?"failed":Se(f.durationMs)})()),n(H,()=>f.sql),q(D=>{var E=$(i()?.query===f),T=`w-14 shrink-0 text-right tabular-nums ${f.error?"text-red-500":$t(f.durationMs,4)}`;return E!==D.e&&U(w,D.e=E),T!==D.t&&U(I,D.t=T),D},{e:void 0,t:void 0}),w})()})},get children(){var f=ph(),w=f.firstChild.nextSibling,C=w.firstChild,I=w.nextSibling;return n(C,()=>[["sql","Statement","left"],["calls","Calls"],["errors","Failed"],["meanMs","Mean"],["p95Ms","p95"],["totalMs","Total"]].map(([H,D,E])=>o(Dl,{label:D,align:E==="left"?"left":"right",get active(){return u.key()===H},get desc(){return u.desc()},onClick:()=>u.toggle(H)}))),n(I,o(re,{get each(){return x()},children:H=>(()=>{var D=yh(),E=D.firstChild,T=E.nextSibling,O=T.nextSibling,j=O.nextSibling,k=j.nextSibling,A=k.firstChild.firstChild,W=A.firstChild,V=A.nextSibling,z=k.nextSibling;return D.$$click=()=>c({group:H,query:H.last}),n(E,()=>H.sql),n(T,()=>H.calls),n(O,()=>H.errors||"—"),n(j,(()=>{var L=ae(()=>H.calls>H.errors);return()=>L()?Se(H.meanMs):"—"})()),n(V,(()=>{var L=ae(()=>H.calls>H.errors);return()=>L()?Se(H.p95Ms):"—"})()),n(z,()=>Se(H.totalMs)),q(L=>{var ie=`cursor-pointer border-b border-border/50 ${i()?.group?.sql===H.sql?"bg-accent/12":"hover:bg-surface-hover"}`,R=H.sql,M=`px-2 py-1 text-right tabular-nums ${H.errors?"text-red-500":"text-text-muted"}`,Z=`px-2 py-1 text-right tabular-nums ${$t(H.meanMs,4)}`,B=`${H.p95Ms/v()*100}%`,K=`min-w-12 ${$t(H.p95Ms,4)}`;return ie!==L.e&&U(D,L.e=ie),R!==L.t&&F(E,"title",L.t=R),M!==L.a&&U(O,L.a=M),Z!==L.o&&U(j,L.o=Z),B!==L.i&&Ve(W,"width",L.i=B),K!==L.n&&U(V,L.n=K),L},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),D})()})),f}})}})),b})()],S=o(y,{get when(){return i()},get fallback(){return wh()},children:b=>(()=>{var f=_h();return n(f,o(y,{get when(){return b().group},children:w=>(()=>{var C=kh();return n(C,o($r,{label:"Calls",get children(){return w().calls}}),null),n(C,o($r,{label:"Mean",get children(){return ae(()=>w().calls>w().errors)()?Se(w().meanMs):"—"}}),null),n(C,o($r,{label:"p95",get children(){return ae(()=>w().calls>w().errors)()?Se(w().p95Ms):"—"}}),null),C})()}),null),n(f,o(y,{get when(){return b().query},children:w=>[(()=>{var C=Sh();return n(C,()=>b().group?"Latest call · ":"",null),n(C,()=>new Date(w().ts).toLocaleString(),null),n(C,o(y,{get when(){return w().dialect},get children(){return[" · ",ae(()=>w().dialect)]}}),null),n(C,o(y,{get when(){return!w().error},get children(){return[" · ",ae(()=>Se(w().durationMs))]}}),null),C})(),o(y,{get when(){return w().error},get children(){var C=Ch();return n(C,()=>w().error),C}}),o(Yn,{title:"SQL",get children(){var C=Eh();return n(C,()=>w().sql),C}}),o(y,{get when(){return w().parameters?.length},get children(){return o(Yn,{get title(){return`Parameters (${w().parameters.length})`},get children(){var C=Mh();return n(C,o(re,{get each(){return w().parameters},children:(I,H)=>(()=>{var D=Th(),E=D.firstChild;E.firstChild;var T=E.nextSibling;return n(E,()=>H()+1,null),n(T,()=>JSON.stringify(I)??String(I)),D})()})),C}})}})]}),null),f})()});return o(lt,{storageKey:"database",left:m,right:S,defaultLeft:600})},$r=e=>(()=>{var t=Ah(),r=t.firstChild,s=r.nextSibling;return n(r,()=>e.label),n(s,()=>e.children),t})(),Yn=e=>(()=>{var t=Oh(),r=t.firstChild;return n(r,()=>e.title),n(t,()=>e.children,null),t})();we(["click","input"]);var qh=d('<div class="flex flex-wrap gap-1">'),Ih=d("<span class=text-amber-500>"),Nh=d('<div class="flex flex-col gap-1.5 border-b border-border p-2"><div class="flex items-center gap-1.5"><input type=text placeholder="Search type or payload…"class="min-w-0 flex-1 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"><button type=button class="rounded-md border border-border-strong bg-surface-2 px-2 py-1 text-xs text-text-secondary hover:text-text-strong"></button><button type=button class="rounded-md border border-border-strong bg-surface-2 px-2 py-1 text-xs text-text-secondary hover:text-text-strong">Clear</button></div><div class="flex items-center text-xs text-text-muted"><span> shown · <!>/<!> kept</span><span class=flex-1>'),Ph=d('<button type=button class="absolute top-2 left-1/2 z-10 -translate-x-1/2 rounded-full bg-kick-500 px-3 py-0.5 text-xs font-semibold text-white shadow"> new ↑'),Dh=d('<div class="relative min-h-0 flex-1"><div class="h-full overflow-y-auto">'),Hh=d('<button type=button><span class="h-1.5 w-1.5 rounded-full"></span><span class="font-normal text-text-muted">'),Uh=d("<div class=empty>"),jh=d('<button type=button><span class="w-[5.6rem] shrink-0 font-mono text-[0.68rem] text-text-muted tabular-nums"></span><span class="flex w-36 shrink-0 items-center gap-1.5 truncate font-mono text-[0.72rem] font-semibold"><span class="h-1.5 w-1.5 shrink-0 rounded-full"></span></span><span class="min-w-0 flex-1 truncate font-mono text-[0.7rem] text-text-secondary">'),Bh=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">Select an event to see its payload'),zh=d('<section class="flex h-full flex-col gap-2 overflow-y-auto bg-surface-1 p-4 text-[0.8rem]"><header class="flex items-center gap-2"><span class="h-2 w-2 rounded-full"></span><h2 class="m-0 font-mono text-sm text-text-strong"></h2></header><div class="text-xs text-text-muted"> · </div><pre class="m-0 overflow-x-auto rounded-md border border-border bg-surface-2 p-3 font-mono text-xs leading-relaxed">'),mt=e=>e.split(":")[0]||e;function Qn(e){return/error|fail|crash/i.test(e)?"err":/warn|slow|retry|timeout/i.test(e)?"warn":"info"}function Fh(e){try{return JSON.stringify(e,null,2)??String(e)}catch{return Hr(e)}}var Jh=()=>{const e=Xt(),[t,r]=P(""),[s,l]=P(new Set),[a,i]=P(null),[c,u]=P(null),[h,g]=P(!1);let p;const x=ce(()=>{const H=new Map;for(const D of e())H.set(mt(D.type),(H.get(mt(D.type))??0)+1);return[...H].toSorted((D,E)=>E[1]-D[1])}),v=H=>{const D=t().trim().toLowerCase();return H.filter(E=>!s().has(mt(E.type))&&(!D||E.type.toLowerCase().includes(D)||Hr(E.payload).toLowerCase().includes(D))).toReversed()},_=ce(()=>v(c()??e())),N=ce(()=>c()?v(e()).length-_().length:0),$=()=>{c()||u(e())},m=()=>{g(!1),u(null),p?.scrollTo({top:0})},S=()=>{!p||h()||(p.scrollTop>8?$():u(null))},b=H=>{l(D=>{const E=new Set(D);return E.has(H)?E.delete(H):E.add(H),E})},f={err:"bg-red-500/8",warn:"bg-amber-500/8",info:""},w={err:"shadow-[inset_2px_0_0_0_#ef4444]",warn:"shadow-[inset_2px_0_0_0_#f59e0b]",info:""},C=[(()=>{var H=Nh(),D=H.firstChild,E=D.firstChild,T=E.nextSibling,O=T.nextSibling,j=D.nextSibling,k=j.firstChild,A=k.firstChild,W=A.nextSibling,V=W.nextSibling.nextSibling;return V.nextSibling,k.nextSibling,E.$$input=z=>r(z.currentTarget.value),T.$$click=()=>{h()?m():(g(!0),$())},n(T,()=>h()?"Resume":"Pause"),O.$$click=()=>{uh(),u(null),i(null)},n(H,o(y,{get when(){return x().length>0},get children(){var z=qh();return n(z,o(re,{get each(){return x()},children:([L,ie])=>(()=>{var R=Hh(),M=R.firstChild,Z=M.nextSibling;return R.$$click=()=>b(L),n(R,L,Z),n(Z,ie),q(B=>{var K=!s().has(L),Q=`flex items-center gap-1 rounded-md border border-border-strong px-1.5 py-0.5 text-[0.68rem] font-semibold ${s().has(L)?"opacity-40":"bg-surface-2"}`,ne=or(L);return K!==B.e&&F(R,"aria-pressed",B.e=K),Q!==B.t&&U(R,B.t=Q),ne!==B.a&&Ve(M,"background",B.a=ne),B},{e:void 0,t:void 0,a:void 0}),R})()})),z}}),j),n(k,()=>_().length,A),n(k,()=>e().length,W),n(k,500,V),n(j,o(y,{get when(){return c()},get children(){var z=Ih();return n(z,()=>h()?"paused":"held while scrolled"),z}}),null),q(()=>E.value=t()),H})(),(()=>{var H=Dh(),D=H.firstChild;return n(H,o(y,{get when(){return N()>0},get children(){var E=Ph(),T=E.firstChild;return E.$$click=m,n(E,N,T),E}}),D),D.addEventListener("scroll",S),et(E=>p=E,D),n(D,o(y,{get when(){return _().length>0},get fallback(){return(()=>{var E=Uh();return n(E,()=>e().length?"No events match":"No events yet — kick/db queries, queue jobs and anything emitted on DEVTOOLS_BUS show up here."),E})()},get children(){return o(re,{get each(){return _()},children:E=>(()=>{var T=jh(),O=T.firstChild,j=O.nextSibling,k=j.firstChild,A=j.nextSibling;return T.$$click=()=>i(E),n(O,()=>Ur(E.ts)),n(j,()=>E.type,null),n(A,()=>Hr(E.payload)),q(W=>{var V=`flex w-full cursor-pointer items-center gap-2 border-0 border-b border-border/50 px-2.5 py-1 text-left text-[0.76rem] text-text-body ${f[Qn(E.type)]} ${w[Qn(E.type)]} ${a()===E?"!bg-accent/12":"hover:bg-surface-hover"}`,z=or(mt(E.type));return V!==W.e&&U(T,W.e=V),z!==W.t&&Ve(k,"background",W.t=z),W},{e:void 0,t:void 0}),T})()})}})),H})()],I=o(y,{get when(){return a()},get fallback(){return Bh()},children:H=>(()=>{var D=zh(),E=D.firstChild,T=E.firstChild,O=T.nextSibling,j=E.nextSibling,k=j.firstChild,A=j.nextSibling;return n(O,()=>H().type),n(j,()=>new Date(H().ts).toLocaleString(),k),n(j,()=>Ur(H().ts),null),n(j,o(y,{get when(){return H().pluginId},get children(){return[" · from ",ae(()=>H().pluginId)]}}),null),n(A,()=>Fh(H().payload)),q(W=>Ve(T,"background",or(mt(H().type)))),D})()});return o(lt,{storageKey:"activity",left:C,right:I,defaultLeft:560})};we(["input","click"]);var Kh="modulepreload",Vh=function(e){return"/_debug/"+e},Gh={},Wh=function(t){return t.pathname.endsWith(".css")},Yh=function(t,r,s){if(r in t)return t[r];const l=s();if(!l){t[r]=void 0;return}const a=l.then(()=>{t[r]=void 0},i=>{throw t[r]=void 0,i});return t[r]=a,a},Qh=function(t,r,s){let l=Promise.resolve();if(r&&r.length>0){let h=function(p){return Promise.all(p.map(x=>Promise.resolve(x).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))},g=function(p){return import.meta.resolve?new URL(import.meta.resolve(p)):new URL(p,import.meta.url)},i;const c=document.querySelector("meta[property=csp-nonce]"),u=c?.nonce||c?.getAttribute("nonce");l=h(r.map(p=>{p=Vh(p,s);const x=g(p),v=Wh(x);return Yh(Gh,x.href,()=>{if(i===void 0){i={all:new Set,styles:new Set};const N=document.getElementsByTagName("link");for(let $=N.length-1;$>=0;$--){const m=N[$];i.all.add(m.href),m.rel==="stylesheet"&&i.styles.add(m.href)}}if((v?i.styles:i.all).has(x.href))return;const _=document.createElement("link");if(_.rel=v?"stylesheet":Kh,v||(_.as="script"),_.crossOrigin="",_.href=x.href,u&&_.setAttribute("nonce",u),document.head.appendChild(_),v)return new Promise((N,$)=>{_.addEventListener("load",N),_.addEventListener("error",()=>$(new Error(`Unable to preload CSS for ${x}`)))})})}).filter(p=>p!==void 0))}function a(i){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=i,window.dispatchEvent(c),!c.defaultPrevented)throw i}return l.then(i=>{for(const c of i||[])c.status==="rejected"&&a(c.reason);return t().catch(a)})},Xh=d("<div style=display:flex;flex-direction:column;height:100%>"),Zh=d('<iframe title="custom devtools tab"sandbox="allow-scripts allow-same-origin allow-forms"style=flex:1;width:100%;border:none;background:var(--bg)>'),ef=d("<div style=padding:16px><div class=card>"),tf=d("<div style=color:var(--text-dim);font-size:12px>"),rf=d('<div style="display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--border)"><div><div style=font-weight:600></div></div><button type=button class=tab style="border:1px solid var(--border);border-radius:4px;padding:6px 14px;border-bottom-color:var(--border)">'),nf=d('<div class=card><div class=card-title>Last response</div><pre class="m-0 font-mono text-xs whitespace-pre-wrap">'),lf=d("<div style=padding:16px;flex:1;overflow:auto>"),sf=d('<div class="card m-4 text-red-500">'),af=d('<div class="min-h-0 flex-1 overflow-auto">'),of=e=>(()=>{var t=Xh();return n(t,o(y,{get when(){return e.tab.view.type==="iframe"},get children(){return o(cf,{get view(){return e.tab.view}})}}),null),n(t,o(y,{get when(){return e.tab.view.type==="launch"},get children(){return o(df,{get view(){return e.tab.view},get tabId(){return e.tab.id}})}}),null),n(t,o(y,{get when(){return e.tab.view.type==="module"},get children(){return o(hf,{get view(){return e.tab.view}})}}),null),n(t,o(y,{get when(){return e.tab.view.type==="html"},get children(){return o(uf,{get view(){return e.tab.view}})}}),null),t})(),cf=e=>{const t=()=>{const r=new URL(e.view.src,location.href),s=Tt();return s&&r.origin===location.origin&&r.searchParams.set("token",s),r.href};return(()=>{var r=Zh();return q(()=>F(r,"src",t())),r})()},df=e=>{const[t,r]=P(null),[s,l]=P(null),a=async i=>{r(i),l(null);try{const c=new URLSearchParams({tab:e.tabId,action:i}),u=Tt();u&&c.set("token",u);const h=await fetch(`${nt()}/tabs/run?${c}`,{method:"POST",headers:u?{"x-devtools-token":u}:void 0}),g=await h.json().catch(()=>({}));l(h.ok?JSON.stringify(g.result,null,2):`${h.status} — ${g.error??h.statusText}`)}catch(c){l(c instanceof Error?c.message:String(c))}finally{r(null)}};return(()=>{var i=ef(),c=i.firstChild;return n(c,o(re,{get each(){return e.view.actions},children:u=>(()=>{var h=rf(),g=h.firstChild,p=g.firstChild,x=g.nextSibling;return n(p,()=>u.label),n(g,o(y,{get when(){return u.description},get children(){var v=tf();return n(v,()=>u.description),v}}),null),x.$$click=()=>{a(u.id)},n(x,()=>t()===u.id?"Running…":"Run"),q(()=>x.disabled=t()===u.id),h})()})),n(i,o(y,{get when(){return s()},children:u=>(()=>{var h=nf(),g=h.firstChild.nextSibling;return n(g,u),h})()}),null),i})()},uf=e=>(()=>{var t=lf();return q(()=>t.innerHTML=e.view.html),t})(),hf=e=>{let t;const[r,s]=P(null);let l,a=!1;return Ie(async()=>{const i=new URL(e.view.src,location.href);if(i.origin!==location.origin){s(`Refusing to load a tab module from another origin: ${i.origin}`);return}const c=Fl();if(!c){s("The event bus is not ready yet — reopen the tab.");return}try{const u=await Qh(()=>import(i.href),[]),h=typeof u.default=="function"?u.default:u.default?.render;if(typeof h!="function"){s(`${i.pathname} has no default export with a render function`);return}if(a||!t)return;const g={bus:c,config:{theme:Vr(),panelHeight:t.clientHeight},query:new URLSearchParams(location.search)};l=h(t,g)}catch(u){s(u instanceof Error?u.message:String(u))}}),ke(()=>{a=!0,typeof l=="function"&&l()}),[o(y,{get when(){return r()},get children(){var i=sf();return n(i,r),i}}),(()=>{var i=af();return et(c=>t=c,i),i})()]};we(["click"]);var ff=d("<span> variables"),vf=d('<div class="card text-sm text-red-500">'),gf=d('<div class="flex flex-col gap-3"><div class="flex items-center gap-3 text-xs text-text-muted"><h2 class="text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">Where config comes from</h2><span class=flex-1></span><button type=button class="rounded-md border border-border-strong bg-surface-2 px-2.5 py-1 text-xs text-text-secondary hover:text-text-strong">Refresh'),mf=d("<div class=empty>Loading config…"),pf=d("<div class=empty>The app declares no env schema or settings sections."),xf=d('<section class=card><h3 class="mb-2 text-xs font-semibold text-text-strong"></h3><table class="w-full text-[0.78rem]"><tbody>'),bf=d('<tr class="border-b border-border/50 last:border-0"><td class="py-1 pr-3 font-mono text-text-body"></td><td class="py-1 text-right"><span>'),$f={env:"env",file:"_FILE",provided:"provided",default:"default",unset:"unset"},yf={env:"border-emerald-500/40 text-emerald-600 dark:text-emerald-400",file:"border-sky-500/40 text-sky-600 dark:text-sky-400",provided:"border-violet-500/40 text-violet-600 dark:text-violet-400",default:"border-border-strong text-text-muted",unset:"border-amber-500/50 text-amber-600 dark:text-amber-400"},wf=()=>{const[e,t]=P(null),[r,s]=P(null),l=async()=>{try{t(await ye.configOrigins()),s(null)}catch(c){s(c instanceof Error?c.message:String(c))}};Ie(()=>{l()});const a=ce(()=>{const c=e();return c?[{title:"Env schema",vars:c.env},...c.sections.map(u=>({title:`${u.prefix} settings`,vars:u.vars}))].filter(u=>u.vars.length>0):[]}),i=ce(()=>a().flatMap(c=>c.vars).filter(c=>c.origin==="unset").length);return(()=>{var c=gf(),u=c.firstChild,h=u.firstChild.nextSibling,g=h.nextSibling;return n(u,o(y,{get when(){return e()},get children(){var p=ff(),x=p.firstChild;return n(p,()=>a().reduce((v,_)=>v+_.vars.length,0),x),n(p,o(y,{get when(){return i()},get children(){return[" · ",ae(()=>i())," unset"]}}),null),p}}),h),g.$$click=()=>{l()},n(c,o(y,{get when(){return r()},get children(){var p=vf();return n(p,r),p}}),null),n(c,o(y,{get when(){return e()},get fallback(){return o(y,{get when(){return!r()},get children(){return mf()}})},get children(){return o(y,{get when(){return a().length},get fallback(){return pf()},get children(){return o(re,{get each(){return a()},children:p=>(()=>{var x=xf(),v=x.firstChild,_=v.nextSibling.firstChild;return n(v,()=>p.title),n(_,o(re,{get each(){return p.vars},children:N=>(()=>{var $=bf(),m=$.firstChild,S=m.nextSibling.firstChild;return n(m,()=>N.name),n(S,()=>$f[N.origin]),q(()=>U(S,`rounded-md border px-1.5 py-0.5 text-[0.68rem] font-semibold ${yf[N.origin]}`)),$})()})),x})()})}})}}),null),c})()};we(["click"]);var Zt=!1,_t=null,Bt=null;async function _f(){return me.setConnectionStatus("connecting"),await jr(),Bt=bl("/stream",e=>{if(!Zt){if(me.setConnectionStatus("live"),Kl(),e.type==="metrics"){kf(e),me.touch();return}if(e.type==="container"){jr();return}}},()=>{Zt||(se.connectionStatus()!=="disconnected"&&me.setConnectionStatus("polling"),Jl())}),Sf}async function jr(){const e=await Promise.allSettled([ye.health(),ye.metrics(),ye.routeRegistry(),ye.container(),ye.queues(),ye.ws(),ye.cron()]);if(e.every(u=>u.status==="rejected"&&u.reason instanceof Qr)){me.setAuthRequired(!0),me.setConnectionStatus("disconnected");return}if(e.every(u=>u.status==="rejected")){me.setConnectionStatus("disconnected"),Jl();return}se.connectionStatus()==="disconnected"&&me.setConnectionStatus("polling"),se.authRequired()&&(me.setAuthRequired(!1),me.setAuthError(null));const[t,r,s,l,a,i,c]=e;t.status==="fulfilled"&&me.setHealth({status:t.value.status,errorRate:t.value.errorRate,uptime:t.value.uptime,adapters:t.value.adapters??{}}),r.status==="fulfilled"&&me.setMetrics({requests:r.value.requests,serverErrors:r.value.serverErrors,clientErrors:r.value.clientErrors,errorRate:r.value.errorRate,uptimeSeconds:r.value.uptimeSeconds,startedAt:r.value.startedAt}),s.status==="fulfilled"&&me.setRoutes(s.value.routes??[]),l.status==="fulfilled"&&me.setContainer(l.value.registrations??[]),a.status==="fulfilled"&&me.setQueues({enabled:a.value.enabled,queues:a.value.queues??[]}),i.status==="fulfilled"&&me.setWs(i.value),c.status==="fulfilled"&&me.setCron(c.value.jobs),me.touch()}function kf(e){const t=se.metrics();if(!t)return;me.setMetrics({...t,requests:e.requestCount,serverErrors:e.errorCount,clientErrors:e.clientErrorCount,errorRate:e.errorRate,uptimeSeconds:e.uptimeSeconds});const r=se.health();r&&me.setHealth({...r,uptime:e.uptimeSeconds,errorRate:e.errorRate})}function Jl(){_t||(_t=setInterval(()=>{Zt||jr()},5e3))}function Kl(){_t&&(clearInterval(_t),_t=null)}function Sf(){Zt=!0,Kl(),Bt&&(Bt(),Bt=null),me.setConnectionStatus("disconnected")}var Cf=d('<div class="fixed inset-0 z-[60] bg-slate-950/90 flex items-center justify-center p-4"><div class="bg-slate-900 border border-slate-700 rounded-2xl p-8 max-w-md w-full shadow-2xl"><div class="text-center mb-6"><h2 class="text-xl font-bold text-kick-500 mb-2">⚡ KickJS DevTools</h2><p class="text-sm text-slate-400">Enter your DevTools token to continue.</p><p class="text-xs text-slate-600 mt-1">The token is printed in the server console on startup, e.g. <code class="font-mono text-slate-500">[token: abc123…]</code></p></div><form><input type=text autofocus placeholder="Paste your token here…"class="w-full bg-slate-800 border border-slate-700 rounded-lg px-4 py-3 text-sm text-slate-200 placeholder-slate-500 focus:outline-none focus:border-kick-500 font-mono mb-3"><button type=submit class="w-full bg-kick-500 hover:bg-kick-600 text-white font-semibold py-2.5 rounded-lg transition-colors disabled:opacity-50">'),Ef=d('<p class="text-red-400 text-sm mb-3">'),Mf=()=>{const[e,t]=P(""),[r,s]=P(!1),l=async()=>{const a=e().trim();if(!a){me.setAuthError("Token is required");return}s(!0),me.setAuthError(null);try{Er(a),await ye.health(),me.setAuthRequired(!1),me.setAuthError(null),t("")}catch{me.setAuthError("Invalid token — request was rejected.")}finally{s(!1)}};return o(y,{get when(){return se.authRequired()},get children(){var a=Cf(),i=a.firstChild.firstChild.nextSibling,c=i.firstChild,u=c.nextSibling;return i.addEventListener("submit",h=>{h.preventDefault(),l()}),c.$$input=h=>t(h.currentTarget.value),n(i,o(y,{get when(){return se.authError()},children:h=>(()=>{var g=Ef();return n(g,h),g})()}),u),n(u,()=>r()?"Verifying…":"Authenticate"),q(()=>u.disabled=r()),q(()=>c.value=e()),a}})};we(["input"]);function Xn(e,t){const r=e.trim().toLowerCase();if(!r)return 0;const s=t.toLowerCase(),l=s.indexOf(r);if(l>=0){const c=l===0||/[\s/.\-_:]/.test(s[l-1]);return 1e3-l+(c?100:0)}let a=0,i=0;for(const c of r){const u=s.indexOf(c,a);if(u<0)return null;i+=u-a,a=u+1}return 500-i}function Tf(e,t){if(!t.trim())return[...e];const r=e.map(l=>{const a=Xn(t,l.title),i=l.description?Xn(t,l.description):null;return{item:l,score:Math.max(a??-1/0,i===null?-1/0:i-50)}}).filter(l=>l.score>-1/0).toSorted((l,a)=>a.score-l.score).map(l=>l.item),s=[...new Set(r.map(l=>l.group))];return r.toSorted((l,a)=>s.indexOf(l.group)-s.indexOf(a.group))}var Af=d('<div class="fixed inset-0 z-70 flex items-start justify-center bg-black/45 pt-[12vh]"><div class="flex max-h-[60vh] w-[min(640px,calc(100vw-32px))] flex-col overflow-hidden rounded-md border border-border-strong bg-surface-1 shadow-2xl"role=dialog aria-modal=true aria-label="Command palette"><div class="flex items-center gap-2.5 border-b border-border px-3.5 py-2.5 text-text-muted"><input class="flex-1 border-none bg-transparent text-sm text-text-body outline-none"placeholder="Jump to a tab, route or DI token…"aria-label=Search><kbd class=dt-kbd>Esc</kbd></div><div class="overflow-y-auto p-1.5"role=listbox>'),Of=d('<div class="p-6 text-center text-text-muted">No results for “<!>”'),Lf=d('<div class="px-2 pt-2 pb-1 text-[0.64rem] font-bold uppercase tracking-wider text-text-muted">'),Rf=d('<span class="min-w-0 truncate text-xs text-text-muted">'),qf=d("<button type=button role=option><span class=whitespace-nowrap>"),If=e=>{const[t,r]=P(!1),[s,l]=P(""),[a,i]=P(0);let c,u,h=null;const g=ce(()=>Tf(e.items(),s()).slice(0,50)),p=()=>{h=document.activeElement instanceof HTMLElement?document.activeElement:null,l(""),i(0),r(!0),queueMicrotask(()=>c?.focus())},x=()=>{r(!1),h?.focus(),h=null},v=$=>{$&&(x(),$.run())};Ie(()=>{const $=m=>{if(m.key==="Escape"&&t()){m.preventDefault(),x();return}const S=m.target instanceof HTMLElement&&(m.target.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(m.target.tagName));(m.key==="k"&&(m.metaKey||m.ctrlKey)||m.key==="/"&&!S&&!t())&&(m.preventDefault(),t()?x():p())};document.addEventListener("keydown",$),ke(()=>document.removeEventListener("keydown",$))});const _=$=>{const m=g().length;$.key==="ArrowDown"?($.preventDefault(),i(S=>m?(S+1)%m:0)):$.key==="ArrowUp"?($.preventDefault(),i(S=>m?(S-1+m)%m:0)):$.key==="Enter"&&($.preventDefault(),v(g()[a()]))},N=$=>{if($.key!=="Tab"||!u)return;const m=[c,...u.querySelectorAll('[role="option"]')].filter(f=>!!f);if(m.length===0)return;const S=m.indexOf(document.activeElement),b=$.shiftKey?S<=0?m.length-1:S-1:(S+1)%m.length;$.preventDefault(),m[b].focus()};return o(y,{get when(){return t()},get children(){var $=Af(),m=$.firstChild,S=m.firstChild,b=S.firstChild,f=S.nextSibling;return $.$$click=w=>w.target===w.currentTarget&&x(),m.$$keydown=N,et(w=>u=w,m),n(S,o(Je,{name:"search",size:16}),b),b.$$keydown=_,b.$$input=w=>{l(w.currentTarget.value),i(0)},et(w=>c=w,b),n(f,o(y,{get when(){return g().length>0},get fallback(){return(()=>{var w=Of(),C=w.firstChild.nextSibling;return C.nextSibling,n(w,s,C),w})()},get children(){return o(re,{get each(){return g()},children:(w,C)=>[o(y,{get when(){return C()===0||g()[C()-1].group!==w.group},get children(){var I=Lf();return n(I,()=>w.group),I}}),(()=>{var I=qf(),H=I.firstChild;return I.$$click=()=>v(w),I.$$mousemove=()=>i(C()),n(I,o(Je,{get name(){return w.icon},size:16}),H),n(H,()=>w.title),n(I,o(y,{get when(){return w.description},get children(){var D=Rf();return n(D,()=>w.description),D}}),null),q(D=>{var E=C()===a(),T=`flex w-full cursor-pointer items-center gap-2.5 rounded-md border-none px-2 py-1.5 text-left text-[0.82rem] ${C()===a()?"bg-accent/15 text-text-strong":"bg-transparent text-text-secondary"}`;return E!==D.e&&F(I,"aria-selected",D.e=E),T!==D.t&&U(I,D.t=T),D},{e:void 0,t:void 0}),I})()]})}})),q(()=>b.value=s()),$}})};function Nf(){document.dispatchEvent(new KeyboardEvent("keydown",{key:"k",ctrlKey:!0}))}we(["click","keydown","input","mousemove"]);var Zn=d("<div class=dt-nav-sep>"),Pf=d("<div class=dt-resizer role=separator aria-orientation=vertical>"),Df=d('<div class="flex flex-col gap-6">'),Hf=d('<div class=card style=border-color:var(--warn);margin-top:16px><div class=card-title style=color:var(--warn)> custom-tab issue(s)</div><ul style="margin:8px 0 0;padding-left:20px;font-family:var(--font-mono);font-size:12px">'),Uf=d(`<div class="fixed bottom-4 left-1/2 z-60 flex -translate-x-1/2 items-center gap-2.5 rounded-md border border-red-500/40 bg-surface-1 px-3.5 py-2 text-[0.8rem] shadow-xl"role=status><span class="dt-pulse dt-pulse-disconnected"aria-hidden=true></span>Can't reach the app — retrying every few seconds…`),jf=d('<div class=app><header class=dt-header><div class=dt-header-brand><span class=dt-bolt aria-hidden=true>⚡</span><h1>KickJS DevTools</h1></div><div style=display:flex;align-items:center;gap:12px><button type=button class="flex cursor-pointer items-center gap-2 rounded-md border border-border-strong bg-surface-2 px-2.5 py-1 text-xs text-text-muted hover:text-text-strong">Search<kbd class=dt-kbd>⌘K</kbd></button></div></header><div class=dt-shell><aside role=tablist><div class=dt-sidebar-foot><button type=button class=dt-rail-toggle></button></div></aside><main role=tabpanel>'),yr=d("<button type=button role=tab><span class=dt-nav-main><span class=dt-nav-label>"),el=d("<span class=tab-badge>"),Bf=d("<div class=dt-nav-group><button type=button class=dt-nav-group-header><span>▾"),zf=d("<li>: "),Ff=d("<div class=dt-conn><span aria-hidden=true></span><span class=dt-conn-label></span><span class=dt-conn-sep>·</span><span class=dt-conn-ts>Updated "),Jf=d("<div class=dt-settings-pop role=menu><div class=dt-settings-section><div class=dt-settings-label>Density</div><div class=dt-seg></div><div class=dt-settings-hint>Controls spacing &amp; font scale. Default: Small.</div></div><div class=dt-settings-section><div class=dt-settings-label>Fonts</div><div class=dt-settings-hint>Fonts installed on this computer, comma-separated. Ours stay as the fallback, so a name that isn't installed changes nothing. Empty = default."),Kf=d('<div class=dt-settings><button type=button aria-label=Settings aria-haspopup=true title=Settings><svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2><circle cx=12 cy=12 r=3></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z">'),Vf=d("<button type=button>"),Gf=d("<label class=dt-settings-field><span></span><input type=text>"),Wf=d('<svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z">'),Yf=d("<button type=button class=dt-theme-toggle>"),Qf=d('<svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2><circle cx=12 cy=12 r=4></circle><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41">');function Pt(e,t){return!!e.quiet&&!t&&!e.count?.()}function Vl(){return[{id:"overview",label:"Overview"},{id:"runtime",label:"Runtime"},{id:"routes",label:"Routes",count:()=>se.routes().length||void 0},{id:"sockets",label:"Sockets",quiet:!0,count:()=>Object.keys(se.ws().namespaces??{}).length||void 0},{id:"metrics",label:"Metrics"},{id:"config",label:"Config"},{id:"requests",label:"Requests"},{id:"container",label:"Container",count:()=>se.container().length||void 0},{id:"queues",label:"Jobs",quiet:!0,count:()=>se.queues().queues.length+se.cron().length||void 0},{id:"database",label:"Database",quiet:!0,count:()=>Xt()().filter(e=>e.type==="db:query"||e.type==="db:query-error").length||void 0},{id:"activity",label:"Activity",quiet:!0,count:()=>Xt()().length||void 0}]}var Xf=new Set([...Vl().map(e=>e.id),...Object.keys(Zr)]),Zf=[{label:null,ids:["overview"]},{label:"Runtime",ids:["runtime","metrics","requests","config"]},{label:"Architecture",ids:["routes","sockets","container"]},{label:"Data & Jobs",ids:["database","queues"]},{label:null,ids:["activity"]}],Gl="kickjs-devtools-sidebar-w",tl="kickjs-devtools-sidebar-mode",ev=new Set(["routes","sockets","requests","container","activity","database","queues"]),Wl="kickjs-devtools-sidebar-collapsed",Yl=150,Ql=360;function tv(){try{const e=Number(localStorage.getItem(Gl));if(e>=Yl&&e<=Ql)return e}catch{}return 200}function rv(){try{const e=localStorage.getItem(Wl);if(e)return JSON.parse(e)}catch{}return[]}var nv=()=>{const e=fa,[t,r]=P((()=>{try{return localStorage.getItem(tl)!=="full"}catch{return!0}})()),s=()=>{const f=!t();r(f);try{localStorage.setItem(tl,f?"rail":"full")}catch{}},[l,a]=P([]),[i,c]=P([]),u=Vl(),h=new Map(u.map(f=>[f.id,f])),[g,p]=P(tv()),[x,v]=P(rv()),_=f=>{v(w=>{const C=w.includes(f)?w.filter(I=>I!==f):[...w,f];try{localStorage.setItem(Wl,JSON.stringify(C))}catch{}return C})};let N=null;ke(()=>N?.());const $=f=>{f.preventDefault();const w=f.clientX,C=g();document.body.style.cursor="col-resize";const I=E=>{const T=Math.min(Ql,Math.max(Yl,C+(E.clientX-w)));p(T)},H=()=>{document.removeEventListener("mousemove",I),document.removeEventListener("mouseup",D),document.body.style.cursor="",N=null},D=()=>{H();try{localStorage.setItem(Gl,String(g()))}catch{}};N=H,document.addEventListener("mousemove",I),document.addEventListener("mouseup",D)};Ie(()=>{ye.tabs().then(({tabs:I,errors:H})=>{a(I.filter(D=>!Xf.has(D.id))),c(H)}).catch(()=>{});let f=null;_f().then(I=>{f=I});const w=dh(),C=sa();ke(()=>{f?.(),w(),C()}),_s(),Cs(),Ls()});const m=f=>{ht(f),queueMicrotask(()=>{document.querySelector(`[role="tab"][data-tab-id="${f}"]`)?.scrollIntoView({behavior:"smooth",inline:"center",block:"nearest"})})},S=()=>[...u.map(f=>({id:`tab:${f.id}`,title:f.label,group:"Tabs",icon:f.id,run:()=>m(f.id)})),...l().map(f=>({id:`tab:${f.id}`,title:f.title,group:"Tabs",icon:"custom",run:()=>m(f.id)})),...se.routes().map(f=>({id:`route:${f.method} ${f.path}`,title:`${f.method} ${f.path}`,description:`${f.controller}.${f.handler}`,group:"Routes",icon:"routes",run:()=>rr(f)})),...se.container().map(f=>({id:`token:${f.token}`,title:f.token,description:[f.kind,f.scope].filter(Boolean).join(" · "),group:"DI tokens",icon:"container",run:()=>ql(f.token)})),...["system","light","dark"].map(f=>({id:`theme:${f}`,title:`Theme: ${f}`,group:"Actions",icon:"action",run:()=>fl(f)})),...["sm","md","lg"].map(f=>({id:`density:${f}`,title:`Density: ${f}`,group:"Actions",icon:"action",run:()=>ml(f)}))],b=()=>l().find(f=>f.id===e());return(()=>{var f=jf(),w=f.firstChild,C=w.firstChild.nextSibling,I=C.firstChild,H=I.firstChild,D=w.nextSibling,E=D.firstChild,T=E.firstChild,O=T.firstChild,j=E.nextSibling;return Jr(I,"click",Nf,!0),n(I,o(Je,{name:"search",size:13}),H),n(C,o(lv,{}),null),n(C,o(ov,{}),null),n(C,o(av,{}),null),n(E,o(re,{each:Zf,children:k=>o(y,{get when(){return k.label},get fallback(){return o(re,{get each(){return k.ids},children:A=>{const W=h.get(A);return o(y,{when:W,children:V=>(()=>{var z=yr(),L=z.firstChild,ie=L.firstChild;return z.$$click=()=>m(A),F(z,"data-tab-id",A),n(L,o(Je,{name:A}),ie),n(ie,()=>V().label),n(z,o(y,{get when(){return V().count?.()},children:R=>(()=>{var M=el();return n(M,R),M})()}),null),q(R=>{var M=`dt-nav-item ${e()===A?"active":""} ${Pt(V(),e()===A)?"opacity-50":""}`,Z=e()===A,B=V().label,K=Pt(V(),e()===A)?`${V().label} — nothing reported yet`:V().label;return M!==R.e&&U(z,R.e=M),Z!==R.t&&F(z,"aria-selected",R.t=Z),B!==R.a&&F(z,"aria-label",R.a=B),K!==R.o&&F(z,"title",R.o=K),R},{e:void 0,t:void 0,a:void 0,o:void 0}),z})()})}})},children:A=>(()=>{var W=Bf(),V=W.firstChild,z=V.firstChild;return n(W,o(y,{get when(){return t()},get children(){return Zn()}}),V),V.$$click=()=>_(A()),n(V,A,null),n(W,o(y,{get when(){return t()||!x().includes(A())},get children(){return o(re,{get each(){return k.ids},children:L=>{const ie=h.get(L);return o(y,{when:ie,children:R=>(()=>{var M=yr(),Z=M.firstChild,B=Z.firstChild;return M.$$click=()=>m(L),F(M,"data-tab-id",L),n(Z,o(Je,{name:L}),B),n(B,()=>R().label),n(M,o(y,{get when(){return R().count?.()},children:K=>(()=>{var Q=el();return n(Q,K),Q})()}),null),q(K=>{var Q=`dt-nav-item nested ${e()===L?"active":""} ${Pt(R(),e()===L)?"opacity-50":""}`,ne=e()===L,ue=R().label,te=Pt(R(),e()===L)?`${R().label} — nothing reported yet`:R().label;return Q!==K.e&&U(M,K.e=Q),ne!==K.t&&F(M,"aria-selected",K.t=ne),ue!==K.a&&F(M,"aria-label",K.a=ue),te!==K.o&&F(M,"title",K.o=te),K},{e:void 0,t:void 0,a:void 0,o:void 0}),M})()})}})}}),null),q(L=>{var ie=t(),R=!x().includes(A()),M=`dt-nav-caret ${x().includes(A())?"closed":""}`;return ie!==L.e&&(V.hidden=L.e=ie),R!==L.t&&F(V,"aria-expanded",L.t=R),M!==L.a&&U(z,L.a=M),L},{e:void 0,t:void 0,a:void 0}),W})()})}),T),n(E,o(y,{get when(){return l().length>0},get children(){return[Zn(),o(re,{get each(){return l()},children:k=>(()=>{var A=yr(),W=A.firstChild,V=W.firstChild;return A.$$click=()=>m(k.id),n(W,o(Je,{name:"custom"}),V),n(V,()=>k.title),q(z=>{var L=k.id,ie=`dt-nav-item ${e()===k.id?"active":""}`,R=e()===k.id,M=k.title,Z=k.title;return L!==z.e&&F(A,"data-tab-id",z.e=L),ie!==z.t&&U(A,z.t=ie),R!==z.a&&F(A,"aria-selected",z.a=R),M!==z.o&&F(A,"aria-label",z.o=M),Z!==z.i&&F(A,"title",z.i=Z),z},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),A})()})]}}),T),O.$$click=s,n(O,o(Je,{get name(){return t()?"expand":"collapse"},size:16})),n(D,o(y,{get when(){return!t()},get children(){var k=Pf();return k.$$mousedown=$,k}}),j),n(j,o(y,{get when(){return e()==="overview"},get children(){return o(wi,{})}}),null),n(j,o(y,{get when(){return e()==="runtime"},get children(){var k=Df();return n(k,o(Vi,{}),null),n(k,o(qc,{}),null),k}}),null),n(j,o(y,{get when(){return e()==="config"},get children(){return o(wf,{})}}),null),n(j,o(y,{get when(){return e()==="routes"},get children(){return o(Qc,{})}}),null),n(j,o(y,{get when(){return e()==="sockets"},get children(){return o(sh,{})}}),null),n(j,o(y,{get when(){return e()==="requests"},get children(){return o(ui,{})}}),null),n(j,o(y,{get when(){return e()==="metrics"},get children(){return o(hd,{})}}),null),n(j,o(y,{get when(){return e()==="container"},get children(){return o(Kd,{})}}),null),n(j,o(y,{get when(){return e()==="queues"},get children(){return o(Uu,{})}}),null),n(j,o(y,{get when(){return e()==="database"},get children(){return o(Rh,{})}}),null),n(j,o(y,{get when(){return e()==="activity"},get children(){return o(Jh,{})}}),null),n(j,o(y,{get when(){return b()},children:k=>o(of,{get tab(){return k()}})}),null),n(j,o(y,{get when(){return ae(()=>i().length>0)()&&e()==="overview"},get children(){var k=Hf(),A=k.firstChild,W=A.firstChild,V=A.nextSibling;return n(A,()=>i().length,W),n(V,o(re,{get each(){return i()},children:z=>(()=>{var L=zf(),ie=L.firstChild;return n(L,()=>z.source,ie),n(L,()=>z.reason,null),L})()})),k}}),null),n(f,o(If,{items:S}),null),n(f,o(Mf,{}),null),n(f,o(y,{get when(){return ae(()=>se.connectionStatus()==="disconnected")()&&!se.authRequired()},get children(){return Uf()}}),null),q(k=>{var A=`dt-sidebar ${t()?"rail":""}`,W=`width:${g()}px`,V=t()?"Show labels":"Icons only",z=t()?"Show labels":"Icons only",L=`dt-main ${ev.has(e())?"flush":""}`;return A!==k.e&&U(E,k.e=A),k.t=dl(E,W,k.t),V!==k.a&&F(O,"title",k.a=V),z!==k.o&&F(O,"aria-label",k.o=z),L!==k.i&&U(j,k.i=L),k},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),f})()},lv=()=>{const e=r=>r==="live"?"Live":r==="polling"?"Polling":r==="disconnected"?"Disconnected":"Connecting…",t=r=>r?r.toLocaleTimeString():"never";return(()=>{var r=Ff(),s=r.firstChild,l=s.nextSibling,a=l.nextSibling.nextSibling;return a.firstChild,n(l,()=>e(se.connectionStatus())),n(a,()=>t(se.lastUpdate()),null),q(()=>U(s,`dt-pulse dt-pulse-${se.connectionStatus()}`)),r})()},sv=[{id:"sm",label:"Small"},{id:"md",label:"Medium"},{id:"lg",label:"Large"}],av=()=>{const[e,t]=P(!1);let r;const s=a=>{e()&&r&&!r.contains(a.target)&&t(!1)},l=a=>{a.key==="Escape"&&t(!1)};return document.addEventListener("click",s),document.addEventListener("keydown",l),ke(()=>{document.removeEventListener("click",s),document.removeEventListener("keydown",l)}),(()=>{var a=Kf(),i=a.firstChild;return et(c=>r=c,a),i.$$click=()=>t(c=>!c),n(a,o(y,{get when(){return e()},get children(){var c=Jf(),u=c.firstChild,h=u.firstChild.nextSibling,g=u.nextSibling,p=g.firstChild.nextSibling;return n(h,o(re,{each:sv,children:x=>(()=>{var v=Vf();return v.$$click=()=>ml(x.id),n(v,()=>x.label),q(_=>{var N=`dt-seg-item ${pn()===x.id?"active":""}`,$=pn()===x.id;return N!==_.e&&U(v,_.e=N),$!==_.t&&F(v,"aria-pressed",_.t=$),_},{e:void 0,t:void 0}),v})()})),n(g,o(re,{each:[["sans","Interface","e.g. Inter"],["mono","Code & editors","e.g. JetBrains Mono"]],children:([x,v,_])=>(()=>{var N=Gf(),$=N.firstChild,m=$.nextSibling;return n($,v),m.$$input=S=>As(x,S.currentTarget.value),F(m,"spellcheck",!1),F(m,"placeholder",_),q(()=>m.value=Ts()[x]),N})()}),p),c}}),null),q(c=>{var u=`dt-settings-btn ${e()?"open":""}`,h=e();return u!==c.e&&U(i,c.e=u),h!==c.t&&F(i,"aria-expanded",c.t=h),c},{e:void 0,t:void 0}),a})()},ov=()=>{const e=()=>{const r=lr()==="system"?"light":lr()==="light"?"dark":"system";fl(r)},t=()=>{const r=lr();return`Theme: ${r==="system"?"follow system":r} (click to cycle)`};return(()=>{var r=Yf();return r.$$click=e,n(r,o(y,{get when(){return Vr()==="dark"},get fallback(){return Qf()},get children(){return Wf()}})),q(s=>{var l=t(),a=t();return l!==s.e&&F(r,"aria-label",s.e=l),a!==s.t&&F(r,"title",s.t=a),s},{e:void 0,t:void 0}),r})()};we(["click","mousedown","input"]);var Xl=document.getElementById("root");if(!Xl)throw new Error("#root not found");ms(()=>o(nv,{}),Xl);
11
+ ${Yc(b)}`:""}${b.offPort?`
12
+ Served on the ${b.port} port — the runner calls this page's own port.`:""}`,H=`w-[3.4rem] shrink-0 font-mono text-[0.68rem] font-bold ${Xe(b.method)}`;return w!==h.e&&(m.disabled=h.e=w),C!==h.t&&U(m,h.t=C),I!==h.a&&F(m,"title",h.a=I),H!==h.o&&U(S,h.o=H),h},{e:void 0,t:void 0,a:void 0,o:void 0}),m})()})]})}})),v})()];return o(lt,{storageKey:"routes",left:x,get right(){return o(Fo,{})}})};we(["input","click"]);var Zc=d('<th><button type=button class="inline-flex items-center gap-1 text-text-muted hover:text-text-strong"><span aria-hidden=true>');function Pl(e,t=!0){const[r,s]=P(e),[l,a]=P(t);return{key:r,desc:l,toggle:u=>{u===r()?a(f=>!f):(s(()=>u),a(!0))},apply:(u,f)=>u.toSorted((g,p)=>{const x=f(g,r()),v=f(p,r()),_=typeof x=="number"&&typeof v=="number"?x-v:String(x).localeCompare(String(v));return l()?-_:_}),set:s}}var Dl=e=>(()=>{var t=Zc(),r=t.firstChild,s=r.firstChild;return Jr(r,"click",e.onClick,!0),n(r,()=>e.label,s),n(s,()=>e.desc?"↓":"↑"),q(l=>{var a=`px-2 py-1.5 font-semibold ${e.align==="left"?"text-left":"text-right"}`,i=e.active?"opacity-70":"opacity-0";return a!==l.e&&U(t,l.e=a),i!==l.t&&U(s,l.t=i),l},{e:void 0,t:void 0}),t})();we(["click"]);var ed=d('<div class="card text-sm text-red-500">'),td=d('<div class="overflow-hidden rounded-xl border border-border bg-surface-1"><table class="w-full border-collapse text-[0.8rem]"><thead class="border-b border-border text-xs"><tr></tr></thead><tbody>'),rd=d(`<p class="text-[0.66rem] text-text-muted">Percentiles cover each route's last 1,000 calls. Durations turn amber above 200 ms, orange above 500 ms, red above 1 s.`),nd=d('<div class="flex flex-col gap-3"><div class="flex flex-wrap items-center gap-2"><input type=text placeholder="Filter routes…"class="w-64 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"><div class="flex overflow-hidden rounded-md border border-border-strong text-xs"></div><span class=flex-1></span><span class="text-xs text-text-muted"> routes'),ld=d("<button type=button>"),sd=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">'),ad=d('<tr class="cursor-pointer border-b border-dashed border-transparent hover:border-border hover:bg-surface-hover"><td class="px-2 py-1.5"><span class="flex items-center gap-2"><span></span><span class="truncate font-mono"></span></span></td><td class="px-2 py-1.5 text-right tabular-nums"></td><td></td><td>'),od=d('<tr class="border-b border-border bg-surface-2/50"><td colspan=7 class="px-4 py-3">'),id=d('<span class="h-1.5 w-16 overflow-hidden rounded-full bg-border/60"><span class="block h-full rounded-full bg-kick-500/70">'),cd=d('<td class="px-2 py-1.5 text-right tabular-nums"><span class="inline-flex items-center justify-end gap-2"><span>'),dd=d('<div class="flex flex-wrap items-end gap-8"><div><div class="mb-1 text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">Latency (ms)</div><div class="flex h-16 items-end gap-1"></div></div><div class=text-xs><div class="mb-1 text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">Outcomes</div><div class="flex gap-2"><span class="dt-pill dt-pill-ok"> ok</span><span class="dt-pill dt-pill-warn"> 4xx</span><span class="dt-pill dt-pill-err"> 5xx</span></div><div class="mt-2 text-text-muted">min <!> · avg '),ud=d('<div class="flex w-7 flex-col items-center gap-0.5"><div class="w-full rounded-sm bg-kick-500/60"></div><span class="text-[0.58rem] text-text-muted tabular-nums">'),fd=d('<button type=button class="rounded-md border border-kick-500/30 bg-kick-500/20 px-3 py-1 text-xs font-semibold text-kick-500 hover:bg-kick-500/30">Try in runner'),Dn=["p50","p95","p99"],hd=()=>{const[e,t]=P(null),[r,s]=P(null),[l,a]=P(""),[i,c]=P("p95"),[u,f]=P(null),g=Pl("p95"),p=async()=>{try{t(await ye.metrics()),s(null)}catch(b){s(b instanceof Error?b.message:String(b))}};Ie(()=>{p();const b=setInterval(()=>{p()},2e3);ke(()=>clearInterval(b))});const x=ce(()=>{const b=l().trim().toLowerCase(),m=Object.entries(e()?.routeLatency??{}).map(([$,h])=>{const w=$.indexOf(" ");return{...h,key:$,method:$.slice(0,w),path:$.slice(w+1),errorShare:h.count?h.serverErrors/h.count:0}}),S=b?m.filter($=>$.key.toLowerCase().includes(b)):m;return g.apply(S,($,h)=>h==="route"?$.path:h==="errors"?$.errorShare:$[h])}),v=ce(()=>Math.max(1,...x().map(b=>b[i()]))),_=b=>{c(b),g.set(b)},N=(b,m,S="right")=>o(Dl,{label:m,align:S,get active(){return g.key()===b},get desc(){return g.desc()},onClick:()=>g.toggle(b)});return(()=>{var b=nd(),m=b.firstChild,S=m.firstChild,$=S.nextSibling,h=$.nextSibling,w=h.nextSibling,C=w.firstChild;return S.$$input=I=>a(I.currentTarget.value),n($,o(re,{each:Dn,children:I=>(()=>{var H=ld();return H.$$click=()=>_(I),n(H,I),q(D=>{var E=i()===I,T=`px-2.5 py-1 font-semibold ${i()===I?"bg-kick-500/20 text-kick-500":"bg-surface-2 text-text-secondary hover:text-text-body"}`;return E!==D.e&&F(H,"aria-pressed",D.e=E),T!==D.t&&U(H,D.t=T),D},{e:void 0,t:void 0}),H})()})),n(m,o(Ke,{get metric(){return`latency.${i()}`}}),h),n(w,()=>x().length,C),n(b,o(y,{get when(){return r()},get children(){var I=ed();return n(I,r),I}}),null),n(b,o(y,{get when(){return x().length>0},get fallback(){return(()=>{var I=sd(),H=I.firstChild;return n(H,()=>l()?"No routes match":"No requests yet — latency appears per route once the app is called."),I})()},get children(){return[(()=>{var I=td(),H=I.firstChild.firstChild,D=H.firstChild,E=H.nextSibling;return n(D,()=>N("route","Route","left"),null),n(D,()=>N("count","Calls"),null),n(D,()=>N("errors","5xx"),null),n(D,()=>N("p50","p50"),null),n(D,()=>N("p95","p95"),null),n(D,()=>N("p99","p99"),null),n(D,()=>N("maxMs","Max"),null),n(E,o(re,{get each(){return x()},children:T=>[(()=>{var O=ad(),j=O.firstChild,k=j.firstChild.firstChild,A=k.nextSibling,W=j.nextSibling,V=W.nextSibling,z=V.nextSibling;return O.$$click=()=>f(L=>L===T.key?null:T.key),n(k,()=>T.method),n(A,()=>T.path),n(W,()=>T.count.toLocaleString()),n(V,(()=>{var L=ae(()=>!!T.serverErrors);return()=>L()?Wt(T.errorShare):"—"})()),n(O,o(re,{each:Dn,children:L=>(()=>{var ie=cd(),R=ie.firstChild,M=R.firstChild;return n(R,o(y,{get when(){return L===i()},get children(){var Z=id(),B=Z.firstChild;return q(K=>Ve(B,"width",`${T[L]/v()*100}%`)),Z}}),M),n(M,()=>Se(T[L])),q(()=>U(M,`min-w-14 ${$t(T[L])}`)),ie})()}),z),n(z,()=>Se(T.maxMs)),q(L=>{var ie=`w-[3.4rem] shrink-0 font-mono text-[0.68rem] font-bold ${Xe(T.method)}`,R=`px-2 py-1.5 text-right tabular-nums ${T.serverErrors?"text-red-500":"text-text-muted"}`,M=`${T.serverErrors} server errors, ${T.clientErrors} client errors`,Z=`px-2 py-1.5 text-right tabular-nums ${$t(T.maxMs)}`;return ie!==L.e&&U(k,L.e=ie),R!==L.t&&U(V,L.t=R),M!==L.a&&F(V,"title",L.a=M),Z!==L.o&&U(z,L.o=Z),L},{e:void 0,t:void 0,a:void 0,o:void 0}),O})(),o(y,{get when(){return u()===T.key},get children(){var O=od(),j=O.firstChild;return n(j,o(vd,{row:T,get buckets(){return e()?.latencyBucketsMs??[]}})),O}})]})),I})(),rd()]}}),null),q(()=>S.value=l()),b})()},vd=e=>{const t=()=>Math.max(1,...e.row.histogram),r=a=>a<e.buckets.length?`≤${e.buckets[a]}`:`>${e.buckets[e.buckets.length-1]}`,s=()=>se.routes().find(a=>a.method.toUpperCase()===e.row.method&&a.path===e.row.path),l=()=>e.row.count-e.row.serverErrors-e.row.clientErrors;return(()=>{var a=dd(),i=a.firstChild,c=i.firstChild.nextSibling,u=i.nextSibling.firstChild.nextSibling,f=u.firstChild,g=f.firstChild,p=f.nextSibling,x=p.firstChild,v=p.nextSibling,_=v.firstChild,N=u.nextSibling,b=N.firstChild.nextSibling;return b.nextSibling,n(c,o(re,{get each(){return e.row.histogram},children:(m,S)=>(()=>{var $=ud(),h=$.firstChild,w=h.nextSibling;return n(w,()=>r(S())),q(C=>{var I=`${m} calls ${r(S())} ms`,H=`${Math.max(m?2:0,m/t()*48)}px`;return I!==C.e&&F($,"title",C.e=I),H!==C.t&&Ve(h,"height",C.t=H),C},{e:void 0,t:void 0}),$})()})),n(f,l,g),n(p,()=>e.row.clientErrors,x),n(v,()=>e.row.serverErrors,_),n(N,()=>Se(Number.isFinite(e.row.minMs)?e.row.minMs:0),b),n(N,()=>Se(e.row.count?e.row.totalMs/e.row.count:0),null),n(a,o(y,{get when(){return s()},children:m=>(()=>{var S=fd();return S.$$click=()=>rr(m()),S})()}),null),a})()};we(["input","click"]);var Nr=(e,t)=>`${e}→${t}`;function gd(e,t){const r=new Map(e.map(x=>[x,[]]));for(const x of t)r.has(x.from)&&r.has(x.to)&&r.get(x.from).push(x.to);const s=new Set,l=new Map,a=x=>{l.set(x,"active");for(const v of r.get(x))l.get(v)==="active"?s.add(Nr(x,v)):l.has(v)||a(v);l.set(x,"done")};for(const x of e)l.has(x)||a(x);const i=x=>r.get(x).filter(v=>!s.has(Nr(x,v))),c=new Set;for(const[x,v]of r){v.length&&c.add(x);for(const _ of v)c.add(_)}const u=new Map,f=new Map([...c].map(x=>[x,0]));for(const x of c)for(const v of i(x))f.set(v,f.get(v)+1);const g=[...c].filter(x=>f.get(x)===0);for(const x of g)u.set(x,0);for(;g.length;){const x=g.shift();for(const v of i(x))u.set(v,Math.max(u.get(v)??0,u.get(x)+1)),f.set(v,f.get(v)-1),f.get(v)===0&&g.push(v)}const p=[];for(const x of e){if(!c.has(x))continue;const v=u.get(x)??0;(p[v]??=[]).push(x)}for(let x=1;x<p.length;x++){const v=new Map(p[x-1].map((N,b)=>[N,b])),_=N=>{const b=p[x-1].filter(m=>i(m).includes(N)).map(m=>v.get(m));return b.length?b.reduce((m,S)=>m+S,0)/b.length:1/0};p[x]=p[x].toSorted((N,b)=>_(N)-_(b))}return{layers:p,cycleEdges:s,isolated:e.filter(x=>!c.has(x))}}var md=.2;var Hl=e=>Math.min(3,Math.max(md,e));function Hn(e,t,r,s){const l=Hl(e.k*t),a=l/e.k;return{k:l,x:r-(r-e.x)*a,y:s-(s-e.y)*a}}function pd(e,t,r,s=24){const l=Hl(Math.min(1,(t-s*2)/e.w,(r-s*2)/e.h));return{k:l,x:(t-e.w*l)/2-e.x*l,y:(r-e.h*l)/2-e.y*l}}var xd=d('<span class="flex items-center gap-1 text-xs text-red-500"><span class="h-0.5 w-3 bg-red-500"></span> cycle'),bd=d('<button type=button class="rounded-md border border-border-strong bg-surface-2 px-2 py-0.5 text-xs text-text-secondary hover:text-text-strong">Reset layout'),$d=d('<svg class="absolute inset-0 h-full w-full"><defs><marker id=dt-arrow viewBox="0 0 8 8"refX=7 refY=4 markerWidth=6 markerHeight=6 orient=auto><path d="M0 0 L8 4 L0 8 z"fill=var(--color-text-muted)></path></marker></defs><g>'),yd=d('<div class="max-h-32 overflow-y-auto border-t border-border p-3"><div class="mb-1.5 text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">No dependencies either way (<!>)</div><div class="flex flex-wrap gap-1">'),wd=d('<div class="flex min-h-0 flex-1 flex-col"><div class="flex flex-wrap items-center gap-2 border-b border-border p-2"><span class=flex-1></span><button type=button class="rounded-md border border-border-strong bg-surface-2 px-2 py-0.5 text-xs text-text-secondary hover:text-text-strong"aria-label="Zoom out">−</button><span class="w-10 text-center text-xs text-text-muted tabular-nums">%</span><button type=button class="rounded-md border border-border-strong bg-surface-2 px-2 py-0.5 text-xs text-text-secondary hover:text-text-strong"aria-label="Zoom in">+</button><button type=button class="rounded-md border border-border-strong bg-surface-2 px-2 py-0.5 text-xs text-text-secondary hover:text-text-strong">Fit</button></div><div style="background-image:radial-gradient(var(--color-border) 1px, transparent 1px)"><span class="pointer-events-none absolute bottom-2 left-2 text-[0.62rem] text-text-muted">Drag tokens to arrange · drag or scroll to pan · ⌘/Ctrl + scroll to zoom'),_d=d('<span class="text-xs text-text-muted">All <!> tokens — select one to see just its chain'),kd=d(`<span class="text-xs text-text-muted">'s chain · <!> tokens`),Sd=d('<button type=button class="rounded-md border border-border-strong bg-surface-2 px-2 py-0.5 text-xs text-text-secondary hover:text-text-strong">Whole graph'),Cd=d('<span class="flex items-center gap-1 text-xs text-text-muted"><span class="h-2 w-2 rounded-sm">'),Ed=d('<div class="p-6 text-sm text-text-muted">No dependencies between registered tokens yet.'),Md=d("<svg><path fill=none marker-end=url(#dt-arrow)></svg>",!1,!0,!1),Td=d("<svg><g class=cursor-move><title> — drag to move, click to focus</title><rect width=164 height=26 rx=5 fill=var(--color-surface-1)></rect><rect width=4 height=26 rx=2></rect><text x=12 y=17 font-size=11.5 font-family=var(--font-mono) fill=var(--color-text-body)></svg>",!1,!0,!1),Ad=d("<button type=button>"),Un=164,vr=26,Ul="kickjs-devtools-graph-positions",Od=3,Pr={controller:"#8b5cf6",service:"#3b82f6",repository:"#14b8a6",other:"#9ca3af"},Ld=e=>Pr[e??""]??Pr.other,jn=1;function Rd(){try{return JSON.parse(localStorage.getItem(Ul)??"{}")}catch{return{}}}var qd=e=>{const t=()=>e.selected,r=k=>e.onSelect(k),[s,l]=P(Rd()),[a,i]=P({}),c=()=>t()?a():s(),u=k=>{t()?i(k):l(k)},[f,g]=P({x:0,y:0,k:1}),[p,x]=P(!1);let v;const _=ce(()=>se.container()),N=ce(()=>new Map(_().map(k=>[k.token,k]))),b=ce(()=>_().flatMap(k=>(k.dependencies??[]).filter(A=>N().has(A)).map(A=>({from:k.token,to:A})))),m=ce(()=>{const k=t();if(!k||!N().has(k))return null;const A=z=>{const L=new Set([k]),ie=[k];for(;ie.length;)for(const R of z(ie.pop()))L.has(R)||(L.add(R),ie.push(R));return L},W=A(z=>N().get(z)?.dependencies?.filter(L=>N().has(L))??[]),V=A(z=>b().filter(L=>L.to===z).map(L=>L.from));return new Set([...W,...V])}),S=ce(()=>{const k=m();return k?b().filter(A=>k.has(A.from)&&k.has(A.to)):b()}),$=ce(()=>{const k=m();return gd(_().map(A=>A.token).filter(A=>!k||k.has(A)),S())}),h=ce(()=>{const k=new Map;return $().layers.forEach((A,W)=>A.forEach((V,z)=>k.set(V,c()[V]??{x:W*220,y:z*36}))),k}),w=()=>{if(!v||h().size===0)return;const k=[...h().values()],A=Math.min(...k.map(L=>L.x)),W=Math.min(...k.map(L=>L.y)),V={x:A,y:W,w:Math.max(...k.map(L=>L.x))+Un-A,h:Math.max(...k.map(L=>L.y))+vr-W},z=pd(V,v.clientWidth,v.clientHeight);if(m()&&z.k>jn){const L=jn;g({k:L,x:(v.clientWidth-V.w*L)/2-V.x*L,y:(v.clientHeight-V.h*L)/2-V.y*L})}else g(z)};Ie(()=>requestAnimationFrame(w)),qe(_r(t,()=>{i({}),requestAnimationFrame(w)},{defer:!0})),qe(_r(()=>h().size>0,(k,A)=>{k&&!A&&requestAnimationFrame(w)}));const C=k=>{if(!t()){l(k);try{localStorage.setItem(Ul,JSON.stringify(k))}catch{}}};let I=null;const H=k=>{if(k.button!==0)return;const A=k.target.closest("[data-node]")?.getAttribute("data-node"),W=A?h().get(A):void 0;A&&!W||(k.currentTarget.setPointerCapture(k.pointerId),A&&W?I={kind:"node",id:A,sx:k.clientX,sy:k.clientY,from:W,dragged:!1}:(I={kind:"pan",sx:k.clientX,sy:k.clientY,view:f()},x(!0)))},D=k=>{const A=I;if(!A)return;const W=k.clientX-A.sx,V=k.clientY-A.sy;if(A.kind==="pan"){g({...A.view,x:A.view.x+W,y:A.view.y+V});return}if(!A.dragged&&Math.hypot(W,V)<Od)return;A.dragged=!0;const z=f().k;u(L=>({...L,[A.id]:{x:A.from.x+W/z,y:A.from.y+V/z}}))},E=()=>{const k=I;I=null,x(!1),k?.kind==="node"&&(k.dragged?C(c()):k.id!==t()&&r(k.id))},T=k=>{if(k.preventDefault(),k.ctrlKey||k.metaKey){const A=v.getBoundingClientRect(),W=Math.max(-50,Math.min(50,k.deltaY));g(V=>Hn(V,Math.exp(-W*.005),k.clientX-A.left,k.clientY-A.top))}else g(A=>({...A,x:A.x-k.deltaX,y:A.y-k.deltaY}))},O=k=>{v&&g(A=>Hn(A,k,v.clientWidth/2,v.clientHeight/2))},j=(k,A)=>{const W=h().get(k),V=h().get(A),z=W.x+Un,L=W.y+vr/2,ie=V.x,R=V.y+vr/2,M=Math.max(30,Math.abs(ie-z)/2);return`M${z} ${L} C${z+M} ${L} ${ie-M} ${R} ${ie} ${R}`};return(()=>{var k=wd(),A=k.firstChild,W=A.firstChild,V=W.nextSibling,z=V.nextSibling,L=z.firstChild,ie=z.nextSibling,R=ie.nextSibling,M=A.nextSibling,Z=M.firstChild;return n(A,o(y,{get when(){return m()},get fallback(){return(()=>{var B=_d(),K=B.firstChild.nextSibling;return K.nextSibling,n(B,()=>_().length,K),B})()},children:B=>[(()=>{var K=kd(),Q=K.firstChild,ne=Q.nextSibling;return ne.nextSibling,n(K,t,Q),n(K,()=>B().size,ne),K})(),(()=>{var K=Sd();return K.$$click=()=>r(null),K})()]}),W),n(A,o(re,{get each(){return Object.entries(Pr)},children:([B,K])=>(()=>{var Q=Cd(),ne=Q.firstChild;return Ve(ne,"background",K),n(Q,B,null),Q})()}),W),n(A,o(y,{get when(){return $().cycleEdges.size>0},get children(){return xd()}}),W),V.$$click=()=>O(1/1.25),n(z,()=>Math.round(f().k*100),L),ie.$$click=()=>O(1.25),R.$$click=w,n(A,o(y,{get when(){return Object.keys(c()).length>0},get children(){var B=bd();return B.$$click=()=>{C({}),requestAnimationFrame(w)},B}}),null),M.addEventListener("wheel",T),M.addEventListener("pointercancel",E),M.$$pointerup=E,M.$$pointermove=D,M.$$pointerdown=H,et(B=>v=B,M),n(M,o(y,{get when(){return $().layers.length>0},get fallback(){return Ed()},get children(){var B=$d(),K=B.firstChild.nextSibling;return n(K,o(re,{get each(){return S()},children:Q=>{const ne=()=>$().cycleEdges.has(Nr(Q.from,Q.to));return(()=>{var ue=Md();return q(te=>{var he=j(Q.from,Q.to),Oe=ne()?"#ef4444":"var(--color-border-strong)",Le=t()===Q.from||t()===Q.to?2:1.25,J=ne()?"4 3":void 0;return he!==te.e&&F(ue,"d",te.e=he),Oe!==te.t&&F(ue,"stroke",te.t=Oe),Le!==te.a&&F(ue,"stroke-width",te.a=Le),J!==te.o&&F(ue,"stroke-dasharray",te.o=J),te},{e:void 0,t:void 0,a:void 0,o:void 0}),ue})()}}),null),n(K,o(re,{get each(){return $().layers.flat()},children:Q=>{const ne=()=>h().get(Q),ue=()=>N().get(Q)?.kind??"";return(()=>{var te=Td(),he=te.firstChild,Oe=he.firstChild,Le=he.nextSibling,J=Le.nextSibling,de=J.nextSibling;return F(te,"data-node",Q),n(he,Q,Oe),n(de,(()=>{var ge=ae(()=>Q.length>22);return()=>ge()?`${Q.slice(0,21)}…`:Q})()),q(ge=>{var Ce=`translate(${ne().x} ${ne().y})`,Re=t()===Q?"var(--color-accent)":"var(--color-border-strong)",ze=t()===Q?2:1,He=Ld(ue());return Ce!==ge.e&&F(te,"transform",ge.e=Ce),Re!==ge.t&&F(Le,"stroke",ge.t=Re),ze!==ge.a&&F(Le,"stroke-width",ge.a=ze),He!==ge.o&&F(J,"fill",ge.o=He),ge},{e:void 0,t:void 0,a:void 0,o:void 0}),te})()}}),null),q(()=>F(K,"transform",`translate(${f().x} ${f().y}) scale(${f().k})`)),B}}),Z),n(k,o(y,{get when(){return $().isolated.length>0},get children(){var B=yd(),K=B.firstChild,Q=K.firstChild.nextSibling;Q.nextSibling;var ne=K.nextSibling;return n(K,()=>$().isolated.length,Q),n(ne,o(re,{get each(){return $().isolated},children:ue=>(()=>{var te=Ad();return te.$$click=()=>r(ue),n(te,ue),q(()=>U(te,`${Xr(N().get(ue)?.kind)} font-mono ${t()===ue?"ring-1 ring-kick-500":""}`)),te})()})),B}}),null),q(B=>{var K=`relative min-h-0 flex-1 touch-none select-none overflow-hidden ${p()?"cursor-grabbing":"cursor-grab"}`,Q=`${16*f().k}px ${16*f().k}px`,ne=`${f().x}px ${f().y}px`;return K!==B.e&&U(M,B.e=K),Q!==B.t&&Ve(M,"background-size",B.t=Q),ne!==B.a&&Ve(M,"background-position",B.a=ne),B},{e:void 0,t:void 0,a:void 0}),k})()};we(["click","pointerdown","pointermove","pointerup"]);var Id=d('<button type=button> <span class="font-normal opacity-70">'),Nd=d('<div class="flex flex-col gap-1.5 border-b border-border p-2"><input type=text placeholder="Search tokens…"class="w-full bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"><div class="flex flex-wrap items-center gap-1"><span class="mx-1 h-4 w-px bg-border"></span><span class="mx-1 h-4 w-px bg-border"></span></div><div class="flex items-center gap-2 text-xs text-text-muted"><span class=flex-1> tokens</span><label class="flex items-center gap-1">Sort<select class="rounded border border-border-strong bg-surface-2 px-1 py-0.5 text-xs text-text-body">'),Pd=d('<div class="min-h-0 flex-1 overflow-y-auto">'),Dd=d("<option>"),Hd=d("<div class=empty>"),Ud=d('<span class="dt-tone dt-tone-gray">'),jd=d('<span class="dt-tone dt-tone-gray"title="Served by its registerFallback() default">fallback'),Bd=d('<button type=button><span></span><span class="min-w-0 flex-1 truncate font-mono"></span><span></span><span class="w-10 shrink-0 text-right text-[0.7rem] text-text-muted tabular-nums">×</span><span class="w-14 shrink-0 text-right text-[0.66rem] text-text-muted">'),zd=d("<button type=button>"),Fd=d('<div class="flex h-full flex-col"><div class="flex items-center gap-1 border-b border-border px-2 py-1.5"></div><div class="flex min-h-0 flex-1 flex-col">'),Jd=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">Select a token to see its dependencies'),Kd=d('<div class="min-h-0 flex-1 overflow-y-auto bg-surface-1">'),Bn="kickjs-devtools:container:view",zn="kickjs-devtools:container:sort",Fn={resolves:"Most resolved",recent:"Recently resolved",name:"Name"};function Jn(e,t,r){try{const s=localStorage.getItem(e);return t.includes(s)?s:r}catch{return r}}function Kn(e,t){try{localStorage.setItem(e,t)}catch{}}var jl=["controller","service","repository"],gr=e=>jl.includes(e.kind??"")?e.kind:"other",Vd=()=>{const[e,t]=P(""),[r,s]=P(null),[l,a]=P(null),[i,c]=P(ic()),[u,f]=P(!1),[g,p]=P(Jn(zn,Object.keys(Fn),"resolves")),[x,v]=P(Jn(Bn,["detail","graph"],"detail")),_=ce(()=>{const E=e().trim().toLowerCase();return se.container().filter(T=>!E||T.token.toLowerCase().includes(E))}),N=(E,T)=>{const O=new Map;for(const j of T)O.set(E(j),(O.get(E(j))??0)+1);return O},b=ce(()=>N(gr,_().filter(E=>!l()||(E.scope??"singleton")===l()))),m=ce(()=>N(E=>E.scope??"singleton",_().filter(E=>!r()||gr(E)===r()))),S=ce(()=>_().filter(E=>!E.resolveCount).length),$={resolves:(E,T)=>(T.resolveCount??0)-(E.resolveCount??0),recent:(E,T)=>(T.lastResolvedAt??0)-(E.lastResolvedAt??0),name:()=>0},h=ce(()=>_().filter(E=>(!r()||gr(E)===r())&&(!l()||(E.scope??"singleton")===l())&&(!u()||!E.resolveCount)).toSorted((E,T)=>$[g()](E,T)||E.token.localeCompare(T.token))),w=(E,T,O,j)=>o(y,{get when(){return T()||O()},get children(){var k=Id(),A=k.firstChild,W=A.nextSibling;return Jr(k,"click",j,!0),n(k,E,A),n(W,()=>T()??0),q(V=>{var z=O(),L=`rounded-md border px-2 py-0.5 text-[0.68rem] font-semibold ${O()?"border-kick-500/30 bg-kick-500/20 text-kick-500":"border-border-strong bg-surface-2 text-text-secondary hover:text-text-body"}`;return z!==V.e&&F(k,"aria-pressed",V.e=z),L!==V.t&&U(k,V.t=L),V},{e:void 0,t:void 0}),k}}),C=[(()=>{var E=Nd(),T=E.firstChild,O=T.nextSibling,j=O.firstChild,k=j.nextSibling,A=O.nextSibling.firstChild,W=A.firstChild,V=A.nextSibling.firstChild.nextSibling;return T.$$input=z=>t(z.currentTarget.value),n(O,o(re,{get each(){return[...jl,"other"]},children:z=>w(z,()=>b().get(z),()=>r()===z,()=>s(L=>L===z?null:z))}),j),n(O,o(re,{each:["singleton","transient","request"],children:z=>w(z,()=>m().get(z),()=>l()===z,()=>a(L=>L===z?null:z))}),k),n(O,()=>w("never resolved",S,u,()=>f(z=>!z)),null),n(A,o(y,{get when(){return h().length!==se.container().length},get children(){return[ae(()=>h().length)," matched ·"," "]}}),W),n(A,()=>se.container().length,W),V.addEventListener("change",z=>{const L=z.currentTarget.value;p(L),Kn(zn,L)}),n(V,o(re,{get each(){return Object.entries(Fn)},children:([z,L])=>(()=>{var ie=Dd();return ie.value=z,n(ie,L),ie})()})),q(()=>T.value=e()),q(()=>V.value=g()),E})(),(()=>{var E=Pd();return n(E,o(y,{get when(){return h().length>0},get fallback(){return(()=>{var T=Hd();return n(T,()=>se.container().length?"No tokens match":"Nothing registered yet"),T})()},get children(){return o(re,{get each(){return h()},children:T=>(()=>{var O=Bd(),j=O.firstChild,k=j.nextSibling,A=k.nextSibling,W=A.nextSibling,V=W.firstChild,z=W.nextSibling;return O.$$click=()=>c(T.token),n(k,()=>T.token),n(A,(()=>{var L=ae(()=>!!(T.kind&&T.kind!=="unknown"));return()=>L()?T.kind:"other"})()),n(O,o(y,{get when(){return(T.scope??"singleton")!=="singleton"},get children(){var L=Ud();return n(L,()=>T.scope),L}}),W),n(O,o(y,{get when(){return T.fallback},get children(){return jd()}}),W),n(W,()=>T.resolveCount??0,V),n(z,(()=>{var L=ae(()=>!!T.lastResolvedAt);return()=>L()?tr(T.lastResolvedAt):"—"})()),q(L=>{var ie=`flex w-full cursor-pointer items-center gap-2 border-0 border-b border-border/50 px-2.5 py-1 text-left text-[0.78rem] text-text-body ${i()===T.token?"bg-accent/12 shadow-[inset_2px_0_0_0_var(--color-accent)]":"bg-transparent hover:bg-surface-hover"}`,R=`h-1.5 w-1.5 shrink-0 rounded-full ${Qt(T).label==="failed"?"bg-red-500":T.instantiated?"bg-emerald-500":"bg-border-strong"}`,M=Qt(T).label,Z=T.token,B=Xr(T.kind);return ie!==L.e&&U(O,L.e=ie),R!==L.t&&U(j,L.t=R),M!==L.a&&F(j,"title",L.a=M),Z!==L.o&&F(k,"title",L.o=Z),B!==L.i&&U(A,L.i=B),L},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),O})()})}})),E})()],I=E=>{v(E),Kn(Bn,E)},H=(E,T)=>(()=>{var O=zd();return O.$$click=()=>I(E),n(O,T),q(j=>{var k=x()===E,A=`rounded-md border px-2 py-0.5 text-xs font-semibold ${x()===E?"border-kick-500/30 bg-kick-500/20 text-kick-500":"border-border-strong bg-surface-2 text-text-secondary hover:text-text-body"}`;return k!==j.e&&F(O,"aria-pressed",j.e=k),A!==j.t&&U(O,j.t=A),j},{e:void 0,t:void 0}),O})(),D=(()=>{var E=Fd(),T=E.firstChild,O=T.nextSibling;return n(T,()=>H("detail","Details"),null),n(T,()=>H("graph","Graph"),null),n(O,o(y,{get when(){return x()==="graph"},get fallback(){return o(y,{get when(){return i()},get fallback(){return Jd()},children:j=>(()=>{var k=Kd();return n(k,o(cc,{get token(){return j()},onSelect:c})),k})()})},get children(){return o(qd,{get selected(){return i()},onSelect:c})}})),E})();return o(lt,{storageKey:"container",left:C,right:D})};we(["click","input"]);var Gd=d("<button type=button>Retry all failed"),Nt=d("<button type=button>"),Wd=d('<span class="text-xs text-text-muted">'),Yd=d('<div class="flex flex-wrap items-center gap-1.5">'),Qd=d('<div class="flex flex-col gap-2 border-b border-border p-2"><div class="flex flex-wrap gap-1">'),Xd=d('<div class="p-4 text-sm text-text-muted">'),Zd=d('<button type=button class="w-full py-2 text-xs text-text-muted hover:text-text-strong">Load 50 more'),eu=d('<div class="min-h-0 flex-1 overflow-y-auto">'),tu=d('<span class="font-normal text-text-muted">paused'),ru=d('<span class="rounded bg-red-500/15 px-1 text-red-500">'),nu=d('<div class="flex flex-wrap items-center gap-x-3 gap-y-1 text-xs">'),lu=d("<button type=button> <span>"),su=d("<div class=empty>No <!> jobs"),au=d('<span class="shrink-0 text-[0.68rem] text-text-muted tabular-nums"title=attempts>'),ou=d('<button type=button><span class="w-16 shrink-0 truncate font-mono text-[0.68rem] text-text-muted">#</span><span class="w-32 shrink-0 truncate font-mono font-semibold"></span><span class="min-w-0 flex-1 truncate text-[0.72rem] text-red-500"></span><span class="w-14 shrink-0 text-right text-[0.66rem] text-text-muted">'),iu=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">'),cu=d("<button type=button>Retry"),du=d("<dt class=text-text-muted>Created"),mr=d("<dd class=m-0>"),uu=d("<dt class=text-text-muted>Ran for"),fu=d("<dt class=text-text-muted>Delay"),hu=d('<div class="rounded-md border border-red-500/40 bg-red-500/10 px-3 py-2 text-red-500">'),vu=d('<section class="flex h-full flex-col gap-3 overflow-y-auto bg-surface-1 p-4 text-[0.8rem]"><header class="flex flex-wrap items-center gap-2"><h2 class="m-0 font-mono text-base text-text-strong"></h2><span></span><span class="font-mono text-xs text-text-muted">#</span><span class=flex-1></span></header><dl class="grid grid-cols-[7rem_1fr] gap-y-1 text-xs"><dt class=text-text-muted>Attempts</dt><dd class="m-0 tabular-nums">'),gu=d('<pre class="m-0 mb-1.5 max-h-48 overflow-auto rounded-md border border-border bg-surface-2 p-2 font-mono text-[0.68rem]">'),mu=d('<div class=dt-panel-grid><div class="card max-w-lg text-sm text-text-secondary">'),pu=d('<p class="m-0 mb-2 font-semibold text-text-strong">No job tool is connected'),xu=d("<p class=m-0>Add <code>QueueAdapter</code> from <code>@forinda/kickjs-queue</code> to browse BullMQ jobs here — retry failures, remove jobs, pause a queue. Any other job tool can show up too by exposing <code>jobInspector()</code> from its adapter."),bu=d('<pre class="m-0 max-h-72 overflow-auto rounded-md border border-border bg-surface-2 p-3 font-mono text-xs">'),$u=d('<div><h3 class="mb-1.5 text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">'),yu=["failed","active","waiting","delayed","completed","paused"],pr=50,Vn={failed:"text-red-500",active:"text-blue-500",waiting:"text-text-secondary",delayed:"text-amber-500",completed:"text-emerald-500",paused:"text-text-muted"},wu=()=>{const[e,t]=P(null),[r,s]=P(null),[l,a]=P(null),[i,c]=P("failed"),[u,f]=P([]),[g,p]=P(null),[x,v]=P(pr),[_,N]=P(null),[b,m]=P(null),[S,$]=P(null),[h,w]=P(!1),[C,I]=P(null),H=ce(()=>e()?.find(R=>R.source===l()?.source)),D=ce(()=>H()?.queues.find(R=>R.name===l()?.queue)),E=R=>!!H()?.actions.includes(R),T=async()=>{try{const{sources:R}=await ye.jobs();if(t(R),s(null),!l()){const M=R.find(Z=>Z.queues.length);M&&a({source:M.source,queue:M.queues[0].name})}}catch(R){s(R instanceof Error?R.message:String(R))}},O=async()=>{const R=l();if(R)try{const{jobs:M}=await ye.jobList({...R,state:i(),start:0,end:x()-1});f(M),p(null)}catch(M){f([]),p(M instanceof Error?M.message:String(M))}},j=async()=>{const R=l(),M=_();if(!R||!M){m(null);return}try{m(await ye.job({...R,id:M}))}catch{m(null)}},k=async()=>{await T(),await Promise.all([O(),j()])};Ie(()=>{k();const R=setInterval(()=>{k()},3e3);ke(()=>clearInterval(R))});const A=(R,M=i())=>{a(R),c(M),v(pr),N(null),m(null),O()},W=R=>{N(R),j()},V=async(R,M={})=>{const Z=l();if(!Z)return;const B=`${R}:${M.id??M.state??""}`;if(M.confirm&&C()!==B){I(B);return}I(null),w(!0),$(null);try{const K=await ye.jobAction({...Z,action:R,id:M.id,state:M.state});$(R==="clean"?`Removed ${K.count??0} ${M.state} jobs`:R==="remove"?"Job removed":R==="retry"?"Job queued to run again":R==="retryAll"?"Failed jobs queued to run again":R==="pause"?"Queue paused":"Queue resumed"),(R==="remove"||R==="retry")&&N(null),await k()}catch(K){$(K instanceof Error?K.message:String(K))}finally{w(!1)}},z=(R=!1)=>`rounded-md border px-2 py-0.5 text-xs disabled:opacity-50 ${R?"border-red-500/40 text-red-500 hover:bg-red-500/10":"border-border-strong bg-surface-2 text-text-secondary hover:text-text-strong"}`,L=[(()=>{var R=Qd(),M=R.firstChild;return n(M,o(re,{get each(){return e()??[]},children:Z=>o(re,{get each(){return Z.queues},children:B=>{const K=()=>l()?.source===Z.source&&l()?.queue===B.name;return(()=>{var Q=Nt();return Q.$$click=()=>A({source:Z.source,queue:B.name},"failed"),n(Q,()=>B.name,null),n(Q,o(y,{get when(){return B.paused},get children(){return tu()}}),null),n(Q,o(y,{get when(){return B.counts.failed},get children(){var ne=ru();return n(ne,()=>B.counts.failed),ne}}),null),q(ne=>{var ue=(e()?.length??0)>1?Z.source:void 0,te=`flex items-center gap-1.5 rounded-md border px-2 py-0.5 text-xs font-semibold ${K()?"border-kick-500/30 bg-kick-500/20 text-kick-500":"border-border-strong bg-surface-2 text-text-secondary hover:text-text-body"}`;return ue!==ne.e&&F(Q,"title",ne.e=ue),te!==ne.t&&U(Q,ne.t=te),ne},{e:void 0,t:void 0}),Q})()}})})),n(R,o(y,{get when(){return D()},children:Z=>(()=>{var B=nu();return n(B,o(re,{each:yu,children:K=>(()=>{var Q=lu(),ne=Q.firstChild,ue=ne.nextSibling;return Q.$$click=()=>A(l(),K),n(Q,K,ne),n(ue,()=>Z().counts[K]??"–"),q(te=>{var he=`border-b-2 pb-0.5 ${i()===K?"border-kick-500 font-semibold text-text-strong":"border-transparent text-text-muted hover:text-text-body"}`,Oe=`tabular-nums ${Z().counts[K]?Vn[K]:""}`;return he!==te.e&&U(Q,te.e=he),Oe!==te.t&&U(ue,te.t=Oe),te},{e:void 0,t:void 0}),Q})()})),B})()}),null),n(R,o(y,{get when(){return D()},get children(){var Z=Yd();return n(Z,o(y,{get when(){return ae(()=>!!(E("retryAll")&&i()==="failed"))()&&D().counts.failed},get children(){var B=Gd();return B.$$click=()=>{V("retryAll")},q(K=>{var Q=z(),ne=h();return Q!==K.e&&U(B,K.e=Q),ne!==K.t&&(B.disabled=K.t=ne),K},{e:void 0,t:void 0}),B}}),null),n(Z,o(y,{get when(){return ae(()=>!!E("clean"))()&&u().length>0},get children(){var B=Nt();return B.addEventListener("blur",()=>I(null)),B.$$click=()=>{V("clean",{state:i(),confirm:!0})},n(B,(()=>{var K=ae(()=>C()===`clean:${i()}`);return()=>K()?`Confirm: delete all ${i()}`:`Clean ${i()}`})()),q(K=>{var Q=z(!0),ne=h();return Q!==K.e&&U(B,K.e=Q),ne!==K.t&&(B.disabled=K.t=ne),K},{e:void 0,t:void 0}),B}}),null),n(Z,o(y,{get when(){return E(D().paused?"resume":"pause")},get children(){var B=Nt();return B.$$click=()=>{V(D().paused?"resume":"pause")},n(B,()=>D().paused?"Resume queue":"Pause queue"),q(K=>{var Q=z(),ne=h();return Q!==K.e&&U(B,K.e=Q),ne!==K.t&&(B.disabled=K.t=ne),K},{e:void 0,t:void 0}),B}}),null),n(Z,o(y,{get when(){return S()},get children(){var B=Wd();return n(B,S),B}}),null),Z}}),null),R})(),(()=>{var R=eu();return n(R,o(y,{get when(){return g()},get children(){var M=Xd();return n(M,g),M}}),null),n(R,o(y,{get when(){return u().length>0},get fallback(){return o(y,{get when(){return ae(()=>!!D())()&&!g()},get children(){var M=su(),Z=M.firstChild.nextSibling;return Z.nextSibling,n(M,i,Z),M}})},get children(){return[o(re,{get each(){return u()},children:M=>(()=>{var Z=ou(),B=Z.firstChild;B.firstChild;var K=B.nextSibling,Q=K.nextSibling,ne=Q.nextSibling;return Z.$$click=()=>W(M.id),n(B,()=>M.id,null),n(K,()=>M.name),n(Q,()=>M.failedReason??""),n(Z,o(y,{get when(){return M.attempts>1||M.maxAttempts},get children(){var ue=au();return n(ue,()=>M.attempts,null),n(ue,(()=>{var te=ae(()=>!!M.maxAttempts);return()=>te()?`/${M.maxAttempts}`:""})(),null),ue}}),ne),n(ne,(()=>{var ue=ae(()=>!!(M.finishedAt??M.createdAt));return()=>ue()?tr(M.finishedAt??M.createdAt):""})()),q(()=>U(Z,`flex w-full cursor-pointer items-center gap-2 border-0 border-b border-border/50 px-2.5 py-1 text-left text-[0.76rem] text-text-body ${_()===M.id?"bg-accent/12 shadow-[inset_2px_0_0_0_var(--color-accent)]":"bg-transparent hover:bg-surface-hover"}`)),Z})()}),o(y,{get when(){return u().length>=x()},get children(){var M=Zd();return M.$$click=()=>{v(Z=>Z+pr),O()},M}})]}}),null),R})()],ie=o(y,{get when(){return b()},get fallback(){return(()=>{var R=iu(),M=R.firstChild;return n(M,()=>_()?"Loading…":"Select a job to see its data and errors"),R})()},children:R=>(()=>{var M=vu(),Z=M.firstChild,B=Z.firstChild,K=B.nextSibling,Q=K.nextSibling;Q.firstChild,Q.nextSibling;var ne=Z.nextSibling,ue=ne.firstChild.nextSibling;return n(B,()=>R().name),n(K,()=>R().state),n(Q,()=>R().id,null),n(Z,o(y,{get when(){return ae(()=>!!E("retry"))()&&R().state==="failed"},get children(){var te=cu();return te.$$click=()=>{V("retry",{id:R().id})},q(he=>{var Oe=z(),Le=h();return Oe!==he.e&&U(te,he.e=Oe),Le!==he.t&&(te.disabled=he.t=Le),he},{e:void 0,t:void 0}),te}}),null),n(Z,o(y,{get when(){return E("remove")},get children(){var te=Nt();return te.addEventListener("blur",()=>I(null)),te.$$click=()=>{V("remove",{id:R().id,confirm:!0})},n(te,()=>C()===`remove:${R().id}`?"Confirm remove":"Remove"),q(he=>{var Oe=z(!0),Le=h();return Oe!==he.e&&U(te,he.e=Oe),Le!==he.t&&(te.disabled=he.t=Le),he},{e:void 0,t:void 0}),te}}),null),n(ue,()=>R().attempts,null),n(ue,(()=>{var te=ae(()=>!!R().maxAttempts);return()=>te()?` of ${R().maxAttempts}`:""})(),null),n(ne,o(y,{get when(){return R().createdAt},get children(){return[du(),(()=>{var te=mr();return n(te,()=>new Date(R().createdAt).toLocaleString()),te})()]}}),null),n(ne,o(y,{get when(){return ae(()=>!!R().processedAt)()&&R().finishedAt},get children(){return[uu(),(()=>{var te=mr();return n(te,()=>Se(R().finishedAt-R().processedAt)),te})()]}}),null),n(ne,o(y,{get when(){return R().delayMs},get children(){return[fu(),(()=>{var te=mr();return n(te,()=>Se(R().delayMs)),te})()]}}),null),n(M,o(y,{get when(){return R().failedReason},get children(){var te=hu();return n(te,()=>R().failedReason),te}}),null),n(M,o(xr,{title:"Data",get children(){return Gn(R().data)}}),null),n(M,o(y,{get when(){return ae(()=>R().result!==void 0)()&&R().result!==null},get children(){return o(xr,{title:"Result",get children(){return Gn(R().result)}})}}),null),n(M,o(y,{get when(){return R().stacktrace?.length},get children(){return o(xr,{get title(){return`Stack traces (${R().stacktrace.length})`},get children(){return o(re,{get each(){return R().stacktrace.toReversed()},children:te=>(()=>{var he=gu();return n(he,te),he})()})}})}}),null),q(()=>U(K,`text-xs font-semibold ${Vn[R().state]}`)),M})()});return o(y,{get when(){return ae(()=>!!e())()&&e().length>0},get fallback(){return(()=>{var R=mu(),M=R.firstChild;return n(M,o(y,{get when(){return r()},get fallback(){return e()?_u:"Loading…"},get children(){return r()}})),R})()},get children(){return o(lt,{storageKey:"queues",left:L,right:ie,defaultLeft:560})}})},_u=[pu(),xu()];function Gn(e){let t;try{t=JSON.stringify(e,null,2)??String(e)}catch{t=String(e)}return(()=>{var r=bu();return n(r,t),r})()}var xr=e=>(()=>{var t=$u(),r=t.firstChild;return n(r,()=>e.title),n(t,()=>e.children,null),t})();we(["click"]);var ku=d('<button type=button> <span class="font-normal opacity-70">'),Su=d('<div class="flex h-full flex-col"><div class="flex items-center gap-1 border-b border-border px-3 py-2"></div><div class="flex min-h-0 flex-1 flex-col">'),Cu=d('<div class="mb-2 text-sm text-red-500">'),Eu=d('<div class="mb-2 text-xs text-text-muted"role=status>'),Mu=d('<table class="w-full border-collapse text-[0.78rem]"><thead><tr class="text-left text-[0.66rem] uppercase tracking-wider text-text-muted"><th class="py-1.5 pr-3 font-semibold">Job</th><th class="py-1.5 pr-3 font-semibold">Schedule</th><th class="py-1.5 pr-3 font-semibold">Next</th><th class="py-1.5 pr-3 font-semibold">Last run</th><th class="py-1.5 pr-3 text-right font-semibold">Runs</th><th class=py-1.5></th></tr></thead><tbody>'),Tu=d(`<div class="flex min-h-0 flex-1 flex-col overflow-y-auto p-3"><p class="mb-2 text-xs text-text-muted">Every <code>@Cron</code> job, whatever schedules it. Runs are counted from when the app started; <strong>Run now</strong> starts one immediately (it does the job's real work — the button asks twice).`),Au=d("<div class=empty>No <code>@Cron</code> jobs — decorate a service method with <code>@Cron('*/5 * * * *')</code> and register the service."),Wn=d('<div class="text-xs text-text-muted">'),Ou=d('<span class="dt-tone dt-tone-gray">disabled'),Lu=d("<span class=text-blue-500>running…"),Ru=d('<div class="max-w-md truncate text-xs text-red-500">'),qu=d("<span class=text-red-500> · <!> failed"),Iu=d('<tr><td class="py-1.5 pr-3"><div class="font-mono text-text-strong"></div></td><td class="py-1.5 pr-3 font-mono whitespace-nowrap"></td><td class="py-1.5 pr-3 whitespace-nowrap text-text-secondary"></td><td class="py-1.5 pr-3"></td><td class="py-1.5 pr-3 text-right tabular-nums"></td><td class="py-1.5 text-right"><button type=button>'),Nu=d("<span class=text-text-muted>—"),Pu=d("<span>"),Du=d("<span class=text-text-muted>not since start"),Hu=d("<span class=whitespace-nowrap><span></span> <span class=text-text-muted>"),Bl="kickjs-devtools:jobs:view";function Uu(){try{const e=localStorage.getItem(Bl);return e==="scheduled"||e==="queues"?e:null}catch{return null}}var ju=()=>{const[e,t]=P(Uu()??(se.cron().length||!se.queues().queues.length?"scheduled":"queues")),r=l=>{t(l);try{localStorage.setItem(Bl,l)}catch{}},s=(l,a,i)=>(()=>{var c=ku(),u=c.firstChild,f=u.nextSibling;return c.$$click=()=>r(l),n(c,a,u),n(f,i),q(g=>{var p=e()===l,x=`rounded-md border px-2.5 py-0.5 text-xs font-semibold ${e()===l?"border-kick-500/30 bg-kick-500/20 text-kick-500":"border-border-strong bg-surface-2 text-text-secondary hover:text-text-body"}`;return p!==g.e&&F(c,"aria-pressed",g.e=p),x!==g.t&&U(c,g.t=x),g},{e:void 0,t:void 0}),c})();return(()=>{var l=Su(),a=l.firstChild,i=a.nextSibling;return n(a,()=>s("scheduled","Scheduled",se.cron().length),null),n(a,()=>s("queues","Queues",se.queues().queues.length),null),n(i,o(y,{get when(){return e()==="scheduled"},get fallback(){return o(wu,{})},get children(){return o(zu,{})}})),l})()};function Bu(e,t){const r=Math.round((e-t)/1e3);return r<=0?"now":`in ${Gt(r).split(" ")[0]}`}var zu=()=>{const[e,t]=P(Date.now()),[r,s]=P(null),[l,a]=P(null),[i,c]=P(null),u=async()=>{try{me.setCron((await ye.cron()).jobs),c(null)}catch(g){c(g instanceof Error?g.message:String(g))}t(Date.now())};Ie(()=>{u();const g=setInterval(()=>{u()},2e3);ke(()=>clearInterval(g))});const f=async g=>{if(l()!==g.name){a(g.name);return}a(null);try{await ye.cronRun(g.name),s(`Started ${g.name}`),u()}catch(p){s(p instanceof Error?p.message:String(p))}};return(()=>{var g=Tu();return g.firstChild,n(g,o(y,{get when(){return i()},get children(){var p=Cu();return n(p,i),p}}),null),n(g,o(y,{get when(){return r()},get children(){var p=Eu();return n(p,r),p}}),null),n(g,o(y,{get when(){return se.cron().length},get fallback(){return Au()},get children(){var p=Mu(),x=p.firstChild.nextSibling;return n(x,o(Fr,{get each(){return se.cron()},children:v=>(()=>{var _=Iu(),N=_.firstChild,b=N.firstChild,m=N.nextSibling,S=m.nextSibling,$=S.nextSibling,h=$.nextSibling,w=h.nextSibling.firstChild;return n(b,()=>v().name),n(N,o(y,{get when(){return v().description},get children(){var C=Wn();return n(C,()=>v().description),C}}),null),n(N,o(y,{get when(){return!v().enabled},get children(){return Ou()}}),null),n(m,()=>v().expression,null),n(m,o(y,{get when(){return v().timezone},get children(){var C=Wn();return n(C,()=>v().timezone),C}}),null),n(S,o(y,{get when(){return v().nextRunAt},get fallback(){return Nu()},children:C=>(()=>{var I=Pu();return n(I,()=>Bu(C(),e())),q(()=>F(I,"title",new Date(C()).toLocaleString())),I})()})),n($,o(y,{get when(){return v().stats.running>0},get fallback(){return o(y,{get when(){return v().stats.lastStartedAt},get fallback(){return Du()},children:C=>(()=>{var I=Hu(),H=I.firstChild,D=H.nextSibling.nextSibling;return n(H,()=>v().stats.lastOutcome==="failed"?"✕ failed":"✓ ok"),n(D,()=>tr(C(),e()),null),n(D,o(y,{get when(){return v().stats.lastDurationMs!==void 0},get children(){return[" · ",ae(()=>Se(v().stats.lastDurationMs))]}}),null),q(()=>U(H,v().stats.lastOutcome==="failed"?"text-red-500":"text-emerald-500")),I})()})},get children(){return Lu()}}),null),n($,o(y,{get when(){return ae(()=>v().stats.lastOutcome==="failed")()&&v().stats.lastError},get children(){var C=Ru();return n(C,()=>v().stats.lastError),q(()=>F(C,"title",v().stats.lastError)),C}}),null),n(h,()=>v().stats.runs,null),n(h,o(y,{get when(){return v().stats.failures},get children(){var C=qu(),I=C.firstChild.nextSibling;return I.nextSibling,n(C,()=>v().stats.failures,I),C}}),null),w.addEventListener("blur",()=>l()===v().name&&a(null)),w.$$click=()=>{f(v())},n(w,()=>l()===v().name?"Run it?":"Run now"),q(C=>{var I=`border-t border-border/60 align-top ${v().enabled?"":"opacity-60"}`,H=!v().enabled||v().stats.running>0&&!v().overlap,D=`whitespace-nowrap rounded-md border px-2 py-0.5 text-xs disabled:cursor-not-allowed disabled:opacity-50 ${l()===v().name?"border-amber-500/50 bg-amber-500/15 text-amber-500":"border-border-strong bg-surface-2 text-text-secondary hover:text-text-strong"}`;return I!==C.e&&U(_,C.e=I),H!==C.t&&(w.disabled=C.t=H),D!==C.a&&U(w,C.a=D),C},{e:void 0,t:void 0,a:void 0}),_})()})),p}}),null),g})()};we(["click"]);var Fu=d('<div class="min-h-0 flex-1 overflow-y-auto">'),Ju=d("<div class=empty>No <code>WsAdapter</code> — add one from <code>@forinda/kickjs-ws</code> to see its namespaces here."),Ku=d("<div class=empty>No namespaces yet"),Vu=d('<span class="flex flex-wrap gap-1">'),Gu=d('<button type=button><span class="flex items-center gap-2"><span class="min-w-0 flex-1 truncate font-mono text-text-body"></span><span class="text-[0.7rem] text-text-muted tabular-nums"> open'),Wu=d('<span class="rounded border border-border px-1.5 font-mono text-[0.66rem] text-text-secondary">'),Yu=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">Select a namespace to connect to it'),Qu=d('<div class="border-b border-border p-2 text-xs text-text-muted">'),Xu=d('<button type=button class="shrink-0 px-3 py-1.5 text-xs font-semibold rounded-lg border bg-surface-2 text-text-secondary border-border-strong hover:text-text-body disabled:cursor-not-allowed disabled:opacity-50">Connect'),Zu=d('<p class="text-xs text-red-500">'),ef=d(`<div class="flex h-full flex-col gap-3 overflow-hidden p-3 text-sm"><div class="flex flex-col gap-2"><div class="flex items-center gap-2"><span class="font-mono text-text-strong"></span><span>● </span></div><div class="flex items-center gap-2"><input class="w-full min-w-0 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"aria-label="Query string"placeholder="query, e.g. token={{token}}"><input class="w-full min-w-0 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"aria-label=Subprotocols placeholder="protocols, e.g. bearer, {{token}}"></div><p class="text-xs text-text-muted"><code>{{variables}}</code> come from the API runner's active environment. Browsers can't set headers on a WebSocket: pass a token as subprotocols (<code>bearer, {{token}}</code>), in the query, or rely on cookies — whichever your app reads.</p></div><div class="flex flex-col gap-2"><div class="flex items-center gap-2"><input class="w-full min-w-0 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"aria-label=Event><datalist></datalist><button type=button class="shrink-0 px-3 py-1.5 text-xs font-semibold rounded-lg border bg-surface-2 text-text-secondary border-border-strong hover:text-text-body disabled:cursor-not-allowed disabled:opacity-50">Send</button></div><textarea class="w-full min-w-0 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500 h-24 font-mono text-xs"aria-label="Data (JSON)"placeholder="data as JSON, e.g. { &quot;channelId&quot;: &quot;{{channelId}}&quot; } — optional"></textarea></div><div class="flex min-h-0 flex-1 flex-col"><div class="mb-1 flex items-center gap-2 text-xs text-text-muted"><span class=flex-1>Messages (<!>)</span><button type=button class="underline hover:text-text-body">Clear</button></div><div class="min-h-0 flex-1 overflow-y-auto rounded-lg border border-border bg-surface-2 p-2 font-mono text-xs">`),tf=d('<button type=button class="shrink-0 px-3 py-1.5 text-xs font-semibold rounded-lg border bg-surface-2 text-text-secondary border-border-strong hover:text-text-body disabled:cursor-not-allowed disabled:opacity-50">Disconnect'),rf=d("<option>"),nf=d("<span class=text-text-muted>Nothing yet."),lf=d('<div class="flex gap-2 border-b border-border/40 py-1 last:border-0"><span></span><span class="shrink-0 text-text-muted"></span><pre>'),zl=e=>`kickjs-devtools:sockets:${e}`;function sf(e){try{const t=JSON.parse(localStorage.getItem(zl(e))??"{}");return{query:typeof t.query=="string"?t.query:"",protocols:typeof t.protocols=="string"?t.protocols:"",event:typeof t.event=="string"?t.event:"",data:typeof t.data=="string"?t.data:""}}catch{return{query:"",protocols:"",event:"",data:""}}}var af=()=>{const[e,t]=P(null),r=()=>Object.keys(se.ws().namespaces??{}).toSorted(),s=c=>se.ws().namespaces?.[c],l=async()=>{try{me.setWs(await ye.ws())}catch{}};Ie(()=>{l();const c=setInterval(()=>{l()},2e3);ke(()=>clearInterval(c))});const a=(()=>{var c=Fu();return n(c,o(y,{get when(){return se.ws().enabled},get fallback(){return Ju()},get children(){return o(y,{get when(){return r().length},get fallback(){return Ku()},get children(){return o(re,{get each(){return r()},children:u=>(()=>{var f=Gu(),g=f.firstChild.firstChild,p=g.nextSibling,x=p.firstChild;return f.$$click=()=>t(u),n(g,u),n(p,()=>s(u)?.connections??0,x),n(f,o(y,{get when(){return s(u)?.events?.length},get children(){var v=Vu();return n(v,o(re,{get each(){return s(u)?.events},children:_=>(()=>{var N=Wu();return n(N,_),N})()})),v}}),null),q(()=>U(f,`flex w-full flex-col gap-1 border-0 border-b border-border/50 px-2.5 py-1.5 text-left text-[0.78rem] ${e()===u?"bg-accent/12 shadow-[inset_2px_0_0_0_var(--color-accent)]":"bg-transparent hover:bg-surface-hover"}`)),f})()})}})}})),c})(),i=o(y,{get when(){return e()},keyed:!0,get fallback(){return Yu()},children:c=>o(of,{path:c,get events(){return se.ws().namespaces?.[c]?.events??[]}})});return o(lt,{storageKey:"sockets",get left(){return[(()=>{var c=Qu();return n(c,o(y,{get when(){return se.ws().enabled},get children(){return[ae(()=>r().length)," namespaces · ",ae(()=>se.ws().activeConnections??0)," open ·"," ",ae(()=>(se.ws().messagesReceived??0)+(se.ws().messagesSent??0))," messages"]}})),c})(),a]},right:i})},of=e=>{const[t,r]=P(sf(e.path)),[s,l]=P("closed"),[a,i]=P([]),[c,u]=P(null);let f=null,g=0,p;const x=$=>{const h={...t(),...$};r(h);try{localStorage.setItem(zl(e.path),JSON.stringify(h))}catch{}},v=($,h)=>{i(w=>[...w,{id:g++,dir:$,at:Date.now(),text:h}].slice(-200)),queueMicrotask(()=>p?.scrollTo({top:p.scrollHeight}))},_=()=>{const $=Ut(t().query.trim().replace(/^\?/,""),dr());return`${location.protocol==="https:"?"wss":"ws"}://${location.host}${e.path}${$?`?${$}`:""}`},N=()=>{if(f)return;const $=_(),h=Ut(t().protocols,dr()).split(",").map(C=>C.trim()).filter(Boolean);l("connecting"),v("info",`Connecting to ${e.path}…`);let w;try{w=new WebSocket($,h)}catch(C){l("closed"),v("info",C instanceof Error?C.message:String(C));return}f=w,w.addEventListener("open",()=>{l("open"),v("info","Connected")}),w.addEventListener("message",C=>v("in",typeof C.data=="string"?C.data:"(binary frame)")),w.addEventListener("error",()=>v("info","Socket error — see the close reason below")),w.addEventListener("close",C=>{f===w&&(f=null),l("closed"),v("info",`Closed (${C.code}${C.reason?`: ${C.reason}`:""})`)})},b=()=>f?.close(1e3,"closed from DevTools");ke(()=>f?.close(1e3,"closed from DevTools"));const m=()=>{if(!f||s()!=="open")return;const $=Ut(t().data.trim(),dr());let h;if($)try{h=JSON.parse($)}catch{u("Data is not valid JSON");return}u(null);const w=JSON.stringify(h===void 0?{event:t().event}:{event:t().event,data:h});f.send(w),v("out",w)},S=$=>Tl($)??$;return(()=>{var $=ef(),h=$.firstChild,w=h.firstChild,C=w.firstChild,I=C.nextSibling;I.firstChild;var H=w.nextSibling,D=H.firstChild,E=D.nextSibling,T=h.nextSibling,O=T.firstChild,j=O.firstChild,k=j.nextSibling,A=k.nextSibling,W=O.nextSibling,V=T.nextSibling.firstChild,z=V.firstChild,L=z.firstChild.nextSibling;L.nextSibling;var ie=z.nextSibling,R=V.nextSibling;return n(C,()=>e.path),n(I,s,null),D.$$input=M=>x({query:M.currentTarget.value}),E.$$input=M=>x({protocols:M.currentTarget.value}),n(H,o(y,{get when(){return s()==="closed"},get fallback(){return(()=>{var M=tf();return M.$$click=b,M})()},get children(){var M=Xu();return M.$$click=N,M}}),null),j.$$input=M=>x({event:M.currentTarget.value}),n(k,o(re,{get each(){return e.events},children:M=>(()=>{var Z=rf();return Z.value=M,Z})()})),A.$$click=m,W.$$input=M=>x({data:M.currentTarget.value}),F(W,"spellcheck",!1),n(T,o(y,{get when(){return c()},get children(){var M=Zu();return n(M,c),M}}),null),n(z,()=>a().length,L),ie.$$click=()=>i([]),et(M=>p=M,R),n(R,o(y,{get when(){return a().length},get fallback(){return nf()},get children(){return o(re,{get each(){return a()},children:M=>(()=>{var Z=lf(),B=Z.firstChild,K=B.nextSibling,Q=K.nextSibling;return n(B,(()=>{var ne=ae(()=>M.dir==="out");return()=>ne()?"↑":M.dir==="in"?"↓":"·"})()),n(K,()=>new Date(M.at).toLocaleTimeString()),n(Q,(()=>{var ne=ae(()=>M.dir==="info");return()=>ne()?M.text:S(M.text)})()),q(ne=>{var ue=`w-4 shrink-0 ${M.dir==="out"?"text-blue-500":M.dir==="in"?"text-emerald-500":"text-text-muted"}`,te=M.dir==="out"?"sent":M.dir==="in"?"received":"",he=`m-0 min-w-0 flex-1 whitespace-pre-wrap break-all ${M.dir==="info"?"text-text-muted":"text-text-body"}`;return ue!==ne.e&&U(B,ne.e=ue),te!==ne.t&&F(B,"title",ne.t=te),he!==ne.a&&U(Q,ne.a=he),ne},{e:void 0,t:void 0,a:void 0}),Z})()})}})),q(M=>{var Z=`text-xs ${s()==="open"?"text-emerald-500":s()==="connecting"?"text-amber-500":"text-text-muted"}`,B=s()!=="closed",K=s()!=="closed",Q=`events-${e.path}`,ne=e.events.length?`event, e.g. ${e.events[0]}`:"event name",ue=`events-${e.path}`,te=s()!=="open"||!t().event.trim(),he=s()==="open"?"Send { event, data }":"Connect first";return Z!==M.e&&U(I,M.e=Z),B!==M.t&&(D.disabled=M.t=B),K!==M.a&&(E.disabled=M.a=K),Q!==M.o&&F(j,"list",M.o=Q),ne!==M.i&&F(j,"placeholder",M.i=ne),ue!==M.n&&F(k,"id",M.n=ue),te!==M.s&&(A.disabled=M.s=te),he!==M.h&&F(A,"title",M.h=he),M},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0}),q(()=>D.value=t().query),q(()=>E.value=t().protocols),q(()=>j.value=t().event),q(()=>W.value=t().data),$})()};we(["click","input"]);function cf(){let e=new Map,t=new Set;return{on:(r,s)=>{let l=e.get(r);return l||(l=new Set,e.set(r,l)),l.add(s),()=>{let a=e.get(r);a?.delete(s),a&&a.size===0&&e.delete(r)}},onAny:r=>(t.add(r),()=>{t.delete(r)}),dispatch:r=>{let s=e.get(r.type);if(s&&s.size>0)for(let l of[...s])try{l(r.payload)}catch(a){console.error(`[kick:devtools-bus] handler for "${r.type}" threw`,a)}if(t.size>0)for(let l of[...t])try{l(r)}catch(a){console.error("[kick:devtools-bus] onAny handler threw",a)}}}}function df(e={}){let t=cf(),r=e.channel===!1?null:e.channel??"kick-devtools",s=r!=null&&typeof BroadcastChannel<"u"?new BroadcastChannel(r):null;s?.addEventListener("message",x=>{let v=x.data;v&&typeof v.type=="string"&&typeof v.ts=="number"&&t.dispatch({...v,__kick_origin:"broadcast"})});let l=null,a=0,i=null,c=e.reconnectMs??500,u=e.reconnectMaxMs??5e3,f=()=>{e.wsUrl&&typeof WebSocket<"u"&&(!l||l.readyState!==WebSocket.OPEN&&l.readyState!==WebSocket.CONNECTING)&&(l=new WebSocket(e.wsUrl),l.addEventListener("open",()=>{a=0}),l.addEventListener("message",x=>{try{let v=JSON.parse(String(x.data));if(!v||typeof v.type!="string"||typeof v.ts!="number")return;t.dispatch({...v,__kick_origin:"ws"})}catch{}}),l.addEventListener("close",()=>{l=null,g()}),l.addEventListener("error",()=>{g()}))},g=()=>{if(!e.wsUrl||i!=null)return;a+=1;let x=Math.min(a*c,u);i=setTimeout(()=>{i=null,f()},x)},p=x=>{s?.postMessage(x),l&&l.readyState===WebSocket.OPEN?l.send(JSON.stringify(x)):e.wsUrl&&f()};return{on(x,v){return f(),t.on(x,v)},onAny(x){return f(),t.onAny(x)},emit(x,v){let _={type:x,payload:v,ts:Date.now(),__kick_origin:"local"};t.dispatch(_),p(_)}}}var bt=null,[uf,Dr]=P([]);function ff(){if(bt)return()=>{};const e=`${nt()}/_bus`,t=location.protocol==="https:"?"wss:":"ws:",r=Tt(),s=r?`?token=${encodeURIComponent(r)}`:"",l=`${t}//${location.host}${e}${s}`;bt=df({channel:"kick-devtools",wsUrl:l});const a=bt.onAny(i=>{Dr(c=>{const u=c.length>=500?c.slice(1):c.slice();return u.push(i),u})});return()=>{a(),bt=null,Dr([])}}function Xt(){return uf}function hf(){Dr([])}function Fl(){return bt}var br=200;function Hr(e){if(e==null)return String(e);if(typeof e=="bigint")return`${e.toString()}n`;if(typeof e!="object")return String(e);const t=new WeakSet,r=(l,a)=>{if(typeof a=="bigint")return`${a.toString()}n`;if(a instanceof Error)return{name:a.name,message:a.message};if(a&&typeof a=="object"){if(t.has(a))return"[Circular]";t.add(a)}return a};let s;try{s=JSON.stringify(e,r)}catch{s="[unserialisable]"}return s===void 0&&(s=String(e)),s.length>br?`${s.slice(0,br)}… (+${s.length-br} chars)`:s}function Ur(e){const t=new Date(e);return`${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}:${String(t.getSeconds()).padStart(2,"0")}.${String(t.getMilliseconds()).padStart(3,"0")}`}function vf(e){return e.replace(/'(?:[^']|'')*'/g,"?").replace(/\$\d+|:\w+|@\w+/g,"?").replace(/\b\d+(?:\.\d+)?\b/g,"?").replace(/\(\s*\?(?:\s*,\s*\?)+\s*\)/g,"(?)").replace(/\s+/g," ").trim()}var gf=d("<button type=button>"),mf=d('<span>p95 <b class="text-text-body tabular-nums">'),pf=d("<span> statements"),xf=d('<div class="flex flex-col gap-1.5 border-b border-border p-2"><div class="flex items-center gap-1.5"><input type=text placeholder="Filter SQL…"class="min-w-0 flex-1 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"><div class="flex overflow-hidden rounded-md border border-border-strong text-xs"></div></div><div class="flex flex-wrap gap-x-3 text-xs text-text-muted"><span><b class="text-text-body tabular-nums"></b> queries</span><span><b class=tabular-nums></b> failed</span><span><b class=tabular-nums></b> ≥ 50 ms'),bf=d('<table class="w-full table-fixed border-collapse text-[0.76rem]"><colgroup><col><col class=w-14><col class=w-16><col class=w-20><col class=w-32><col class=w-20></colgroup><thead class="sticky top-0 z-1 border-b border-border bg-surface-2 text-xs"><tr></tr></thead><tbody>'),$f=d('<div class="min-h-0 flex-1 overflow-y-auto">'),yf=d("<div class=empty>No queries yet. kick/db reports each statement here when DevTools is installed — run one."),wf=d('<button type=button><span class="w-[5.6rem] shrink-0 font-mono text-[0.68rem] text-text-muted tabular-nums"></span><span></span><span class="min-w-0 flex-1 truncate font-mono text-[0.7rem]">'),_f=d('<tr><td class="truncate px-2 py-1 font-mono text-[0.7rem]"></td><td class="px-2 py-1 text-right tabular-nums"></td><td></td><td></td><td class="px-2 py-1 text-right tabular-nums"><span class="inline-flex items-center gap-1.5"><span class="h-1.5 w-12 overflow-hidden rounded-full bg-border/60"><span class="block h-full rounded-full bg-kick-500/70"></span></span><span></span></span></td><td class="px-2 py-1 text-right tabular-nums">'),kf=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">Select a query to see its SQL and parameters'),Sf=d('<section class="flex h-full flex-col gap-3 overflow-y-auto bg-surface-1 p-4 text-[0.8rem]">'),Cf=d('<dl class="grid grid-cols-3 gap-2">'),Ef=d('<div class="text-xs text-text-muted">'),Mf=d('<div class="rounded-md border border-red-500/40 bg-red-500/10 px-3 py-2 text-red-500">'),Tf=d('<pre class="m-0 whitespace-pre-wrap break-words rounded-md border border-border bg-surface-2 p-3 font-mono text-xs">'),Af=d('<ol class="m-0 list-none rounded-md border border-border bg-surface-2 p-2 font-mono text-xs">'),Of=d('<li class="flex gap-3 py-0.5"><span class="w-6 text-right text-text-muted">$</span><span class=break-all>'),Lf=d('<div class="rounded-md border border-border bg-surface-2 px-3 py-2"><dt class="text-[0.66rem] uppercase tracking-wider text-text-muted"></dt><dd class="m-0 font-semibold tabular-nums">'),Rf=d('<div><h3 class="mb-1.5 text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">'),qf=50,If=()=>{const[e,t]=P([]),[r,s]=P("slowest"),[l,a]=P(""),[i,c]=P(null),u=Pl("totalMs"),f=$=>{t(h=>[...h,$].slice(-500))},g=($,h)=>{const w=$;return{sql:w.sql,parameters:w.parameters,durationMs:0,dialect:w.dialect,error:w.error instanceof Error?w.error.message:String(w.error??"query error"),ts:h}};Ie(()=>{for(const C of Xt()())C.type==="db:query"?f({...C.payload,ts:C.ts}):C.type==="db:query-error"&&f(g(C.payload,C.ts));const $=Fl(),h=$?.on("db:query",C=>f({...C,ts:C.ts??Date.now()})),w=$?.on("db:query-error",C=>f(g(C,Date.now())));ke(()=>{h?.(),w?.()})});const p=ce(()=>{const $=l().trim().toLowerCase();return $?e().filter(h=>h.sql.toLowerCase().includes($)):e()}),x=ce(()=>{const $=new Map;for(const w of p()){const C=vf(w.sql),I=$.get(C)??[];I.push(w),$.set(C,I)}const h=[...$].map(([w,C])=>{const I=C.filter(D=>!D.error).map(D=>D.durationMs),H=I.reduce((D,E)=>D+E,0);return{sql:w,calls:C.length,errors:C.length-I.length,totalMs:H,meanMs:I.length?H/I.length:0,p95Ms:Mr(I,95)??0,last:C[C.length-1]}});return u.apply(h,(w,C)=>w[C])}),v=ce(()=>Math.max(1,...x().map($=>$.p95Ms))),_=ce(()=>{const $=p(),h=$.filter(w=>!w.error).map(w=>w.durationMs);return{total:$.length,errors:$.length-h.length,slow:h.filter(w=>w>=qf).length,p95:Mr(h,95)}}),N=($,h)=>(()=>{var w=gf();return w.$$click=()=>s($),n(w,h),q(C=>{var I=r()===$,H=`px-2.5 py-1 font-semibold ${r()===$?"bg-kick-500/20 text-kick-500":"bg-surface-2 text-text-secondary hover:text-text-body"}`;return I!==C.e&&F(w,"aria-pressed",C.e=I),H!==C.t&&U(w,C.t=H),C},{e:void 0,t:void 0}),w})(),b=$=>`flex w-full cursor-pointer items-center gap-2 border-0 border-b border-border/50 px-2.5 py-1 text-left text-[0.76rem] text-text-body ${$?"bg-accent/12 shadow-[inset_2px_0_0_0_var(--color-accent)]":"bg-transparent hover:bg-surface-hover"}`,m=[(()=>{var $=xf(),h=$.firstChild,w=h.firstChild,C=w.nextSibling,I=h.nextSibling,H=I.firstChild,D=H.firstChild,E=H.nextSibling,T=E.firstChild,O=E.nextSibling,j=O.firstChild;return w.$$input=k=>a(k.currentTarget.value),n(C,()=>N("slowest","Slowest"),null),n(C,()=>N("recent","Recent"),null),n(D,()=>_().total),n(T,()=>_().errors),n(j,()=>_().slow),n(I,o(y,{get when(){return _().p95!==void 0},get children(){var k=mf(),A=k.firstChild.nextSibling;return n(A,()=>Se(_().p95)),k}}),null),n(I,o(y,{get when(){return r()==="slowest"},get children(){var k=pf(),A=k.firstChild;return n(k,()=>x().length,A),k}}),null),q(k=>{var A=_().errors?"text-red-500":"",W=_().slow?"text-amber-500":"";return A!==k.e&&U(E,k.e=A),W!==k.t&&U(O,k.t=W),k},{e:void 0,t:void 0}),q(()=>w.value=l()),$})(),(()=>{var $=$f();return n($,o(y,{get when(){return e().length>0},get fallback(){return yf()},get children(){return o(y,{get when(){return r()==="slowest"},get fallback(){return o(re,{get each(){return p().toReversed()},children:h=>(()=>{var w=wf(),C=w.firstChild,I=C.nextSibling,H=I.nextSibling;return w.$$click=()=>c({query:h}),n(C,()=>Ur(h.ts)),n(I,(()=>{var D=ae(()=>!!h.error);return()=>D()?"failed":Se(h.durationMs)})()),n(H,()=>h.sql),q(D=>{var E=b(i()?.query===h),T=`w-14 shrink-0 text-right tabular-nums ${h.error?"text-red-500":$t(h.durationMs,4)}`;return E!==D.e&&U(w,D.e=E),T!==D.t&&U(I,D.t=T),D},{e:void 0,t:void 0}),w})()})},get children(){var h=bf(),w=h.firstChild.nextSibling,C=w.firstChild,I=w.nextSibling;return n(C,()=>[["sql","Statement","left"],["calls","Calls"],["errors","Failed"],["meanMs","Mean"],["p95Ms","p95"],["totalMs","Total"]].map(([H,D,E])=>o(Dl,{label:D,align:E==="left"?"left":"right",get active(){return u.key()===H},get desc(){return u.desc()},onClick:()=>u.toggle(H)}))),n(I,o(re,{get each(){return x()},children:H=>(()=>{var D=_f(),E=D.firstChild,T=E.nextSibling,O=T.nextSibling,j=O.nextSibling,k=j.nextSibling,A=k.firstChild.firstChild,W=A.firstChild,V=A.nextSibling,z=k.nextSibling;return D.$$click=()=>c({group:H,query:H.last}),n(E,()=>H.sql),n(T,()=>H.calls),n(O,()=>H.errors||"—"),n(j,(()=>{var L=ae(()=>H.calls>H.errors);return()=>L()?Se(H.meanMs):"—"})()),n(V,(()=>{var L=ae(()=>H.calls>H.errors);return()=>L()?Se(H.p95Ms):"—"})()),n(z,()=>Se(H.totalMs)),q(L=>{var ie=`cursor-pointer border-b border-border/50 ${i()?.group?.sql===H.sql?"bg-accent/12":"hover:bg-surface-hover"}`,R=H.sql,M=`px-2 py-1 text-right tabular-nums ${H.errors?"text-red-500":"text-text-muted"}`,Z=`px-2 py-1 text-right tabular-nums ${$t(H.meanMs,4)}`,B=`${H.p95Ms/v()*100}%`,K=`min-w-12 ${$t(H.p95Ms,4)}`;return ie!==L.e&&U(D,L.e=ie),R!==L.t&&F(E,"title",L.t=R),M!==L.a&&U(O,L.a=M),Z!==L.o&&U(j,L.o=Z),B!==L.i&&Ve(W,"width",L.i=B),K!==L.n&&U(V,L.n=K),L},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),D})()})),h}})}})),$})()],S=o(y,{get when(){return i()},get fallback(){return kf()},children:$=>(()=>{var h=Sf();return n(h,o(y,{get when(){return $().group},children:w=>(()=>{var C=Cf();return n(C,o($r,{label:"Calls",get children(){return w().calls}}),null),n(C,o($r,{label:"Mean",get children(){return ae(()=>w().calls>w().errors)()?Se(w().meanMs):"—"}}),null),n(C,o($r,{label:"p95",get children(){return ae(()=>w().calls>w().errors)()?Se(w().p95Ms):"—"}}),null),C})()}),null),n(h,o(y,{get when(){return $().query},children:w=>[(()=>{var C=Ef();return n(C,()=>$().group?"Latest call · ":"",null),n(C,()=>new Date(w().ts).toLocaleString(),null),n(C,o(y,{get when(){return w().dialect},get children(){return[" · ",ae(()=>w().dialect)]}}),null),n(C,o(y,{get when(){return!w().error},get children(){return[" · ",ae(()=>Se(w().durationMs))]}}),null),C})(),o(y,{get when(){return w().error},get children(){var C=Mf();return n(C,()=>w().error),C}}),o(Yn,{title:"SQL",get children(){var C=Tf();return n(C,()=>w().sql),C}}),o(y,{get when(){return w().parameters?.length},get children(){return o(Yn,{get title(){return`Parameters (${w().parameters.length})`},get children(){var C=Af();return n(C,o(re,{get each(){return w().parameters},children:(I,H)=>(()=>{var D=Of(),E=D.firstChild;E.firstChild;var T=E.nextSibling;return n(E,()=>H()+1,null),n(T,()=>JSON.stringify(I)??String(I)),D})()})),C}})}})]}),null),h})()});return o(lt,{storageKey:"database",left:m,right:S,defaultLeft:600})},$r=e=>(()=>{var t=Lf(),r=t.firstChild,s=r.nextSibling;return n(r,()=>e.label),n(s,()=>e.children),t})(),Yn=e=>(()=>{var t=Rf(),r=t.firstChild;return n(r,()=>e.title),n(t,()=>e.children,null),t})();we(["click","input"]);var Nf=d('<div class="flex flex-wrap gap-1">'),Pf=d("<span class=text-amber-500>"),Df=d('<div class="flex flex-col gap-1.5 border-b border-border p-2"><div class="flex items-center gap-1.5"><input type=text placeholder="Search type or payload…"class="min-w-0 flex-1 bg-surface-2 border border-border-strong rounded-lg px-3 py-1.5 text-sm text-text-body placeholder:text-text-muted focus:outline-none focus:border-kick-500"><button type=button class="rounded-md border border-border-strong bg-surface-2 px-2 py-1 text-xs text-text-secondary hover:text-text-strong"></button><button type=button class="rounded-md border border-border-strong bg-surface-2 px-2 py-1 text-xs text-text-secondary hover:text-text-strong">Clear</button></div><div class="flex items-center text-xs text-text-muted"><span> shown · <!>/<!> kept</span><span class=flex-1>'),Hf=d('<button type=button class="absolute top-2 left-1/2 z-10 -translate-x-1/2 rounded-full bg-kick-500 px-3 py-0.5 text-xs font-semibold text-white shadow"> new ↑'),Uf=d('<div class="relative min-h-0 flex-1"><div class="h-full overflow-y-auto">'),jf=d('<button type=button><span class="h-1.5 w-1.5 rounded-full"></span><span class="font-normal text-text-muted">'),Bf=d("<div class=empty>"),zf=d('<button type=button><span class="w-[5.6rem] shrink-0 font-mono text-[0.68rem] text-text-muted tabular-nums"></span><span class="flex w-36 shrink-0 items-center gap-1.5 truncate font-mono text-[0.72rem] font-semibold"><span class="h-1.5 w-1.5 shrink-0 rounded-full"></span></span><span class="min-w-0 flex-1 truncate font-mono text-[0.7rem] text-text-secondary">'),Ff=d('<div class=dt-panel-grid><div class="card text-sm text-text-muted">Select an event to see its payload'),Jf=d('<section class="flex h-full flex-col gap-2 overflow-y-auto bg-surface-1 p-4 text-[0.8rem]"><header class="flex items-center gap-2"><span class="h-2 w-2 rounded-full"></span><h2 class="m-0 font-mono text-sm text-text-strong"></h2></header><div class="text-xs text-text-muted"> · </div><pre class="m-0 overflow-x-auto rounded-md border border-border bg-surface-2 p-3 font-mono text-xs leading-relaxed">'),mt=e=>e.split(":")[0]||e;function Qn(e){return/error|fail|crash/i.test(e)?"err":/warn|slow|retry|timeout/i.test(e)?"warn":"info"}function Kf(e){try{return JSON.stringify(e,null,2)??String(e)}catch{return Hr(e)}}var Vf=()=>{const e=Xt(),[t,r]=P(""),[s,l]=P(new Set),[a,i]=P(null),[c,u]=P(null),[f,g]=P(!1);let p;const x=ce(()=>{const H=new Map;for(const D of e())H.set(mt(D.type),(H.get(mt(D.type))??0)+1);return[...H].toSorted((D,E)=>E[1]-D[1])}),v=H=>{const D=t().trim().toLowerCase();return H.filter(E=>!s().has(mt(E.type))&&(!D||E.type.toLowerCase().includes(D)||Hr(E.payload).toLowerCase().includes(D))).toReversed()},_=ce(()=>v(c()??e())),N=ce(()=>c()?v(e()).length-_().length:0),b=()=>{c()||u(e())},m=()=>{g(!1),u(null),p?.scrollTo({top:0})},S=()=>{!p||f()||(p.scrollTop>8?b():u(null))},$=H=>{l(D=>{const E=new Set(D);return E.has(H)?E.delete(H):E.add(H),E})},h={err:"bg-red-500/8",warn:"bg-amber-500/8",info:""},w={err:"shadow-[inset_2px_0_0_0_#ef4444]",warn:"shadow-[inset_2px_0_0_0_#f59e0b]",info:""},C=[(()=>{var H=Df(),D=H.firstChild,E=D.firstChild,T=E.nextSibling,O=T.nextSibling,j=D.nextSibling,k=j.firstChild,A=k.firstChild,W=A.nextSibling,V=W.nextSibling.nextSibling;return V.nextSibling,k.nextSibling,E.$$input=z=>r(z.currentTarget.value),T.$$click=()=>{f()?m():(g(!0),b())},n(T,()=>f()?"Resume":"Pause"),O.$$click=()=>{hf(),u(null),i(null)},n(H,o(y,{get when(){return x().length>0},get children(){var z=Nf();return n(z,o(re,{get each(){return x()},children:([L,ie])=>(()=>{var R=jf(),M=R.firstChild,Z=M.nextSibling;return R.$$click=()=>$(L),n(R,L,Z),n(Z,ie),q(B=>{var K=!s().has(L),Q=`flex items-center gap-1 rounded-md border border-border-strong px-1.5 py-0.5 text-[0.68rem] font-semibold ${s().has(L)?"opacity-40":"bg-surface-2"}`,ne=or(L);return K!==B.e&&F(R,"aria-pressed",B.e=K),Q!==B.t&&U(R,B.t=Q),ne!==B.a&&Ve(M,"background",B.a=ne),B},{e:void 0,t:void 0,a:void 0}),R})()})),z}}),j),n(k,()=>_().length,A),n(k,()=>e().length,W),n(k,500,V),n(j,o(y,{get when(){return c()},get children(){var z=Pf();return n(z,()=>f()?"paused":"held while scrolled"),z}}),null),q(()=>E.value=t()),H})(),(()=>{var H=Uf(),D=H.firstChild;return n(H,o(y,{get when(){return N()>0},get children(){var E=Hf(),T=E.firstChild;return E.$$click=m,n(E,N,T),E}}),D),D.addEventListener("scroll",S),et(E=>p=E,D),n(D,o(y,{get when(){return _().length>0},get fallback(){return(()=>{var E=Bf();return n(E,()=>e().length?"No events match":"No events yet — kick/db queries, queue jobs and anything emitted on DEVTOOLS_BUS show up here."),E})()},get children(){return o(re,{get each(){return _()},children:E=>(()=>{var T=zf(),O=T.firstChild,j=O.nextSibling,k=j.firstChild,A=j.nextSibling;return T.$$click=()=>i(E),n(O,()=>Ur(E.ts)),n(j,()=>E.type,null),n(A,()=>Hr(E.payload)),q(W=>{var V=`flex w-full cursor-pointer items-center gap-2 border-0 border-b border-border/50 px-2.5 py-1 text-left text-[0.76rem] text-text-body ${h[Qn(E.type)]} ${w[Qn(E.type)]} ${a()===E?"!bg-accent/12":"hover:bg-surface-hover"}`,z=or(mt(E.type));return V!==W.e&&U(T,W.e=V),z!==W.t&&Ve(k,"background",W.t=z),W},{e:void 0,t:void 0}),T})()})}})),H})()],I=o(y,{get when(){return a()},get fallback(){return Ff()},children:H=>(()=>{var D=Jf(),E=D.firstChild,T=E.firstChild,O=T.nextSibling,j=E.nextSibling,k=j.firstChild,A=j.nextSibling;return n(O,()=>H().type),n(j,()=>new Date(H().ts).toLocaleString(),k),n(j,()=>Ur(H().ts),null),n(j,o(y,{get when(){return H().pluginId},get children(){return[" · from ",ae(()=>H().pluginId)]}}),null),n(A,()=>Kf(H().payload)),q(W=>Ve(T,"background",or(mt(H().type)))),D})()});return o(lt,{storageKey:"activity",left:C,right:I,defaultLeft:560})};we(["input","click"]);var Gf="modulepreload",Wf=function(e){return"/_debug/"+e},Yf={},Qf=function(t){return t.pathname.endsWith(".css")},Xf=function(t,r,s){if(r in t)return t[r];const l=s();if(!l){t[r]=void 0;return}const a=l.then(()=>{t[r]=void 0},i=>{throw t[r]=void 0,i});return t[r]=a,a},Zf=function(t,r,s){let l=Promise.resolve();if(r&&r.length>0){let f=function(p){return Promise.all(p.map(x=>Promise.resolve(x).then(v=>({status:"fulfilled",value:v}),v=>({status:"rejected",reason:v}))))},g=function(p){return import.meta.resolve?new URL(import.meta.resolve(p)):new URL(p,import.meta.url)},i;const c=document.querySelector("meta[property=csp-nonce]"),u=c?.nonce||c?.getAttribute("nonce");l=f(r.map(p=>{p=Wf(p,s);const x=g(p),v=Qf(x);return Xf(Yf,x.href,()=>{if(i===void 0){i={all:new Set,styles:new Set};const N=document.getElementsByTagName("link");for(let b=N.length-1;b>=0;b--){const m=N[b];i.all.add(m.href),m.rel==="stylesheet"&&i.styles.add(m.href)}}if((v?i.styles:i.all).has(x.href))return;const _=document.createElement("link");if(_.rel=v?"stylesheet":Gf,v||(_.as="script"),_.crossOrigin="",_.href=x.href,u&&_.setAttribute("nonce",u),document.head.appendChild(_),v)return new Promise((N,b)=>{_.addEventListener("load",N),_.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${x}`)))})})}).filter(p=>p!==void 0))}function a(i){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=i,window.dispatchEvent(c),!c.defaultPrevented)throw i}return l.then(i=>{for(const c of i||[])c.status==="rejected"&&a(c.reason);return t().catch(a)})},eh=d("<div style=display:flex;flex-direction:column;height:100%>"),th=d('<iframe title="custom devtools tab"sandbox="allow-scripts allow-same-origin allow-forms"style=flex:1;width:100%;border:none;background:var(--bg)>'),rh=d("<div style=padding:16px><div class=card>"),nh=d("<div style=color:var(--text-dim);font-size:12px>"),lh=d('<div style="display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--border)"><div><div style=font-weight:600></div></div><button type=button class=tab style="border:1px solid var(--border);border-radius:4px;padding:6px 14px;border-bottom-color:var(--border)">'),sh=d('<div class=card><div class=card-title>Last response</div><pre class="m-0 font-mono text-xs whitespace-pre-wrap">'),ah=d("<div style=padding:16px;flex:1;overflow:auto>"),oh=d('<div class="card m-4 text-red-500">'),ih=d('<div class="min-h-0 flex-1 overflow-auto">'),ch=e=>(()=>{var t=eh();return n(t,o(y,{get when(){return e.tab.view.type==="iframe"},get children(){return o(dh,{get view(){return e.tab.view}})}}),null),n(t,o(y,{get when(){return e.tab.view.type==="launch"},get children(){return o(uh,{get view(){return e.tab.view},get tabId(){return e.tab.id}})}}),null),n(t,o(y,{get when(){return e.tab.view.type==="module"},get children(){return o(hh,{get view(){return e.tab.view}})}}),null),n(t,o(y,{get when(){return e.tab.view.type==="html"},get children(){return o(fh,{get view(){return e.tab.view}})}}),null),t})(),dh=e=>{const t=()=>{const r=new URL(e.view.src,location.href),s=Tt();return s&&r.origin===location.origin&&r.searchParams.set("token",s),r.href};return(()=>{var r=th();return q(()=>F(r,"src",t())),r})()},uh=e=>{const[t,r]=P(null),[s,l]=P(null),a=async i=>{r(i),l(null);try{const c=new URLSearchParams({tab:e.tabId,action:i}),u=Tt();u&&c.set("token",u);const f=await fetch(`${nt()}/tabs/run?${c}`,{method:"POST",headers:u?{"x-devtools-token":u}:void 0}),g=await f.json().catch(()=>({}));l(f.ok?JSON.stringify(g.result,null,2):`${f.status} — ${g.error??f.statusText}`)}catch(c){l(c instanceof Error?c.message:String(c))}finally{r(null)}};return(()=>{var i=rh(),c=i.firstChild;return n(c,o(re,{get each(){return e.view.actions},children:u=>(()=>{var f=lh(),g=f.firstChild,p=g.firstChild,x=g.nextSibling;return n(p,()=>u.label),n(g,o(y,{get when(){return u.description},get children(){var v=nh();return n(v,()=>u.description),v}}),null),x.$$click=()=>{a(u.id)},n(x,()=>t()===u.id?"Running…":"Run"),q(()=>x.disabled=t()===u.id),f})()})),n(i,o(y,{get when(){return s()},children:u=>(()=>{var f=sh(),g=f.firstChild.nextSibling;return n(g,u),f})()}),null),i})()},fh=e=>(()=>{var t=ah();return q(()=>t.innerHTML=e.view.html),t})(),hh=e=>{let t;const[r,s]=P(null);let l,a=!1;return Ie(async()=>{const i=new URL(e.view.src,location.href);if(i.origin!==location.origin){s(`Refusing to load a tab module from another origin: ${i.origin}`);return}const c=Fl();if(!c){s("The event bus is not ready yet — reopen the tab.");return}try{const u=await Zf(()=>import(i.href),[]),f=typeof u.default=="function"?u.default:u.default?.render;if(typeof f!="function"){s(`${i.pathname} has no default export with a render function`);return}if(a||!t)return;const g={bus:c,config:{theme:Vr(),panelHeight:t.clientHeight},query:new URLSearchParams(location.search)};l=f(t,g)}catch(u){s(u instanceof Error?u.message:String(u))}}),ke(()=>{a=!0,typeof l=="function"&&l()}),[o(y,{get when(){return r()},get children(){var i=oh();return n(i,r),i}}),(()=>{var i=ih();return et(c=>t=c,i),i})()]};we(["click"]);var vh=d("<span> variables"),gh=d('<div class="card text-sm text-red-500">'),mh=d('<div class="flex flex-col gap-3"><div class="flex items-center gap-3 text-xs text-text-muted"><h2 class="text-[0.66rem] font-semibold uppercase tracking-wider text-text-muted">Where config comes from</h2><span class=flex-1></span><button type=button class="rounded-md border border-border-strong bg-surface-2 px-2.5 py-1 text-xs text-text-secondary hover:text-text-strong">Refresh'),ph=d("<div class=empty>Loading config…"),xh=d("<div class=empty>The app declares no env schema or settings sections."),bh=d('<section class=card><h3 class="mb-2 text-xs font-semibold text-text-strong"></h3><table class="w-full text-[0.78rem]"><tbody>'),$h=d('<tr class="border-b border-border/50 last:border-0"><td class="py-1 pr-3 font-mono text-text-body"></td><td class="py-1 text-right"><span>'),yh={env:"env",file:"_FILE",provided:"provided",default:"default",unset:"unset"},wh={env:"border-emerald-500/40 text-emerald-600 dark:text-emerald-400",file:"border-sky-500/40 text-sky-600 dark:text-sky-400",provided:"border-violet-500/40 text-violet-600 dark:text-violet-400",default:"border-border-strong text-text-muted",unset:"border-amber-500/50 text-amber-600 dark:text-amber-400"},_h=()=>{const[e,t]=P(null),[r,s]=P(null),l=async()=>{try{t(await ye.configOrigins()),s(null)}catch(c){s(c instanceof Error?c.message:String(c))}};Ie(()=>{l()});const a=ce(()=>{const c=e();return c?[{title:"Env schema",vars:c.env},...c.sections.map(u=>({title:`${u.prefix} settings`,vars:u.vars}))].filter(u=>u.vars.length>0):[]}),i=ce(()=>a().flatMap(c=>c.vars).filter(c=>c.origin==="unset").length);return(()=>{var c=mh(),u=c.firstChild,f=u.firstChild.nextSibling,g=f.nextSibling;return n(u,o(y,{get when(){return e()},get children(){var p=vh(),x=p.firstChild;return n(p,()=>a().reduce((v,_)=>v+_.vars.length,0),x),n(p,o(y,{get when(){return i()},get children(){return[" · ",ae(()=>i())," unset"]}}),null),p}}),f),g.$$click=()=>{l()},n(c,o(y,{get when(){return r()},get children(){var p=gh();return n(p,r),p}}),null),n(c,o(y,{get when(){return e()},get fallback(){return o(y,{get when(){return!r()},get children(){return ph()}})},get children(){return o(y,{get when(){return a().length},get fallback(){return xh()},get children(){return o(re,{get each(){return a()},children:p=>(()=>{var x=bh(),v=x.firstChild,_=v.nextSibling.firstChild;return n(v,()=>p.title),n(_,o(re,{get each(){return p.vars},children:N=>(()=>{var b=$h(),m=b.firstChild,S=m.nextSibling.firstChild;return n(m,()=>N.name),n(S,()=>yh[N.origin]),q(()=>U(S,`rounded-md border px-1.5 py-0.5 text-[0.68rem] font-semibold ${wh[N.origin]}`)),b})()})),x})()})}})}}),null),c})()};we(["click"]);var Zt=!1,_t=null,Bt=null;async function kh(){return me.setConnectionStatus("connecting"),await jr(),Bt=bl("/stream",e=>{if(!Zt){if(me.setConnectionStatus("live"),Kl(),e.type==="metrics"){Sh(e),me.touch();return}if(e.type==="container"){jr();return}}},()=>{Zt||(se.connectionStatus()!=="disconnected"&&me.setConnectionStatus("polling"),Jl())}),Ch}async function jr(){const e=await Promise.allSettled([ye.health(),ye.metrics(),ye.routeRegistry(),ye.container(),ye.queues(),ye.ws(),ye.cron()]);if(e.every(u=>u.status==="rejected"&&u.reason instanceof Qr)){me.setAuthRequired(!0),me.setConnectionStatus("disconnected");return}if(e.every(u=>u.status==="rejected")){me.setConnectionStatus("disconnected"),Jl();return}se.connectionStatus()==="disconnected"&&me.setConnectionStatus("polling"),se.authRequired()&&(me.setAuthRequired(!1),me.setAuthError(null));const[t,r,s,l,a,i,c]=e;if(t.status==="fulfilled"&&me.setHealth({status:t.value.status,errorRate:t.value.errorRate,uptime:t.value.uptime,adapters:t.value.adapters??{}}),r.status==="fulfilled"&&me.setMetrics({requests:r.value.requests,serverErrors:r.value.serverErrors,clientErrors:r.value.clientErrors,errorRate:r.value.errorRate,uptimeSeconds:r.value.uptimeSeconds,startedAt:r.value.startedAt}),s.status==="fulfilled"){const u=s.value.port;me.setRoutes((s.value.routes??[]).map(f=>u&&f.port&&f.port!==u?{...f,offPort:!0}:f))}l.status==="fulfilled"&&me.setContainer(l.value.registrations??[]),a.status==="fulfilled"&&me.setQueues({enabled:a.value.enabled,queues:a.value.queues??[]}),i.status==="fulfilled"&&me.setWs(i.value),c.status==="fulfilled"&&me.setCron(c.value.jobs),me.touch()}function Sh(e){const t=se.metrics();if(!t)return;me.setMetrics({...t,requests:e.requestCount,serverErrors:e.errorCount,clientErrors:e.clientErrorCount,errorRate:e.errorRate,uptimeSeconds:e.uptimeSeconds});const r=se.health();r&&me.setHealth({...r,uptime:e.uptimeSeconds,errorRate:e.errorRate})}function Jl(){_t||(_t=setInterval(()=>{Zt||jr()},5e3))}function Kl(){_t&&(clearInterval(_t),_t=null)}function Ch(){Zt=!0,Kl(),Bt&&(Bt(),Bt=null),me.setConnectionStatus("disconnected")}var Eh=d('<div class="fixed inset-0 z-[60] bg-slate-950/90 flex items-center justify-center p-4"><div class="bg-slate-900 border border-slate-700 rounded-2xl p-8 max-w-md w-full shadow-2xl"><div class="text-center mb-6"><h2 class="text-xl font-bold text-kick-500 mb-2">⚡ KickJS DevTools</h2><p class="text-sm text-slate-400">Enter your DevTools token to continue.</p><p class="text-xs text-slate-600 mt-1">The token is printed in the server console on startup, e.g. <code class="font-mono text-slate-500">[token: abc123…]</code></p></div><form><input type=text autofocus placeholder="Paste your token here…"class="w-full bg-slate-800 border border-slate-700 rounded-lg px-4 py-3 text-sm text-slate-200 placeholder-slate-500 focus:outline-none focus:border-kick-500 font-mono mb-3"><button type=submit class="w-full bg-kick-500 hover:bg-kick-600 text-white font-semibold py-2.5 rounded-lg transition-colors disabled:opacity-50">'),Mh=d('<p class="text-red-400 text-sm mb-3">'),Th=()=>{const[e,t]=P(""),[r,s]=P(!1),l=async()=>{const a=e().trim();if(!a){me.setAuthError("Token is required");return}s(!0),me.setAuthError(null);try{Er(a),await ye.health(),me.setAuthRequired(!1),me.setAuthError(null),t("")}catch{me.setAuthError("Invalid token — request was rejected.")}finally{s(!1)}};return o(y,{get when(){return se.authRequired()},get children(){var a=Eh(),i=a.firstChild.firstChild.nextSibling,c=i.firstChild,u=c.nextSibling;return i.addEventListener("submit",f=>{f.preventDefault(),l()}),c.$$input=f=>t(f.currentTarget.value),n(i,o(y,{get when(){return se.authError()},children:f=>(()=>{var g=Mh();return n(g,f),g})()}),u),n(u,()=>r()?"Verifying…":"Authenticate"),q(()=>u.disabled=r()),q(()=>c.value=e()),a}})};we(["input"]);function Xn(e,t){const r=e.trim().toLowerCase();if(!r)return 0;const s=t.toLowerCase(),l=s.indexOf(r);if(l>=0){const c=l===0||/[\s/.\-_:]/.test(s[l-1]);return 1e3-l+(c?100:0)}let a=0,i=0;for(const c of r){const u=s.indexOf(c,a);if(u<0)return null;i+=u-a,a=u+1}return 500-i}function Ah(e,t){if(!t.trim())return[...e];const r=e.map(l=>{const a=Xn(t,l.title),i=l.description?Xn(t,l.description):null;return{item:l,score:Math.max(a??-1/0,i===null?-1/0:i-50)}}).filter(l=>l.score>-1/0).toSorted((l,a)=>a.score-l.score).map(l=>l.item),s=[...new Set(r.map(l=>l.group))];return r.toSorted((l,a)=>s.indexOf(l.group)-s.indexOf(a.group))}var Oh=d('<div class="fixed inset-0 z-70 flex items-start justify-center bg-black/45 pt-[12vh]"><div class="flex max-h-[60vh] w-[min(640px,calc(100vw-32px))] flex-col overflow-hidden rounded-md border border-border-strong bg-surface-1 shadow-2xl"role=dialog aria-modal=true aria-label="Command palette"><div class="flex items-center gap-2.5 border-b border-border px-3.5 py-2.5 text-text-muted"><input class="flex-1 border-none bg-transparent text-sm text-text-body outline-none"placeholder="Jump to a tab, route or DI token…"aria-label=Search><kbd class=dt-kbd>Esc</kbd></div><div class="overflow-y-auto p-1.5"role=listbox>'),Lh=d('<div class="p-6 text-center text-text-muted">No results for “<!>”'),Rh=d('<div class="px-2 pt-2 pb-1 text-[0.64rem] font-bold uppercase tracking-wider text-text-muted">'),qh=d('<span class="min-w-0 truncate text-xs text-text-muted">'),Ih=d("<button type=button role=option><span class=whitespace-nowrap>"),Nh=e=>{const[t,r]=P(!1),[s,l]=P(""),[a,i]=P(0);let c,u,f=null;const g=ce(()=>Ah(e.items(),s()).slice(0,50)),p=()=>{f=document.activeElement instanceof HTMLElement?document.activeElement:null,l(""),i(0),r(!0),queueMicrotask(()=>c?.focus())},x=()=>{r(!1),f?.focus(),f=null},v=b=>{b&&(x(),b.run())};Ie(()=>{const b=m=>{if(m.key==="Escape"&&t()){m.preventDefault(),x();return}const S=m.target instanceof HTMLElement&&(m.target.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(m.target.tagName));(m.key==="k"&&(m.metaKey||m.ctrlKey)||m.key==="/"&&!S&&!t())&&(m.preventDefault(),t()?x():p())};document.addEventListener("keydown",b),ke(()=>document.removeEventListener("keydown",b))});const _=b=>{const m=g().length;b.key==="ArrowDown"?(b.preventDefault(),i(S=>m?(S+1)%m:0)):b.key==="ArrowUp"?(b.preventDefault(),i(S=>m?(S-1+m)%m:0)):b.key==="Enter"&&(b.preventDefault(),v(g()[a()]))},N=b=>{if(b.key!=="Tab"||!u)return;const m=[c,...u.querySelectorAll('[role="option"]')].filter(h=>!!h);if(m.length===0)return;const S=m.indexOf(document.activeElement),$=b.shiftKey?S<=0?m.length-1:S-1:(S+1)%m.length;b.preventDefault(),m[$].focus()};return o(y,{get when(){return t()},get children(){var b=Oh(),m=b.firstChild,S=m.firstChild,$=S.firstChild,h=S.nextSibling;return b.$$click=w=>w.target===w.currentTarget&&x(),m.$$keydown=N,et(w=>u=w,m),n(S,o(Je,{name:"search",size:16}),$),$.$$keydown=_,$.$$input=w=>{l(w.currentTarget.value),i(0)},et(w=>c=w,$),n(h,o(y,{get when(){return g().length>0},get fallback(){return(()=>{var w=Lh(),C=w.firstChild.nextSibling;return C.nextSibling,n(w,s,C),w})()},get children(){return o(re,{get each(){return g()},children:(w,C)=>[o(y,{get when(){return C()===0||g()[C()-1].group!==w.group},get children(){var I=Rh();return n(I,()=>w.group),I}}),(()=>{var I=Ih(),H=I.firstChild;return I.$$click=()=>v(w),I.$$mousemove=()=>i(C()),n(I,o(Je,{get name(){return w.icon},size:16}),H),n(H,()=>w.title),n(I,o(y,{get when(){return w.description},get children(){var D=qh();return n(D,()=>w.description),D}}),null),q(D=>{var E=C()===a(),T=`flex w-full cursor-pointer items-center gap-2.5 rounded-md border-none px-2 py-1.5 text-left text-[0.82rem] ${C()===a()?"bg-accent/15 text-text-strong":"bg-transparent text-text-secondary"}`;return E!==D.e&&F(I,"aria-selected",D.e=E),T!==D.t&&U(I,D.t=T),D},{e:void 0,t:void 0}),I})()]})}})),q(()=>$.value=s()),b}})};function Ph(){document.dispatchEvent(new KeyboardEvent("keydown",{key:"k",ctrlKey:!0}))}we(["click","keydown","input","mousemove"]);var Zn=d("<div class=dt-nav-sep>"),Dh=d("<div class=dt-resizer role=separator aria-orientation=vertical>"),Hh=d('<div class="flex flex-col gap-6">'),Uh=d('<div class=card style=border-color:var(--warn);margin-top:16px><div class=card-title style=color:var(--warn)> custom-tab issue(s)</div><ul style="margin:8px 0 0;padding-left:20px;font-family:var(--font-mono);font-size:12px">'),jh=d(`<div class="fixed bottom-4 left-1/2 z-60 flex -translate-x-1/2 items-center gap-2.5 rounded-md border border-red-500/40 bg-surface-1 px-3.5 py-2 text-[0.8rem] shadow-xl"role=status><span class="dt-pulse dt-pulse-disconnected"aria-hidden=true></span>Can't reach the app — retrying every few seconds…`),Bh=d('<div class=app><header class=dt-header><div class=dt-header-brand><span class=dt-bolt aria-hidden=true>⚡</span><h1>KickJS DevTools</h1></div><div style=display:flex;align-items:center;gap:12px><button type=button class="flex cursor-pointer items-center gap-2 rounded-md border border-border-strong bg-surface-2 px-2.5 py-1 text-xs text-text-muted hover:text-text-strong">Search<kbd class=dt-kbd>⌘K</kbd></button></div></header><div class=dt-shell><aside role=tablist><div class=dt-sidebar-foot><button type=button class=dt-rail-toggle></button></div></aside><main role=tabpanel>'),yr=d("<button type=button role=tab><span class=dt-nav-main><span class=dt-nav-label>"),el=d("<span class=tab-badge>"),zh=d("<div class=dt-nav-group><button type=button class=dt-nav-group-header><span>▾"),Fh=d("<li>: "),Jh=d("<div class=dt-conn><span aria-hidden=true></span><span class=dt-conn-label></span><span class=dt-conn-sep>·</span><span class=dt-conn-ts>Updated "),Kh=d("<div class=dt-settings-pop role=menu><div class=dt-settings-section><div class=dt-settings-label>Density</div><div class=dt-seg></div><div class=dt-settings-hint>Controls spacing &amp; font scale. Default: Small.</div></div><div class=dt-settings-section><div class=dt-settings-label>Fonts</div><div class=dt-settings-hint>Fonts installed on this computer, comma-separated. Ours stay as the fallback, so a name that isn't installed changes nothing. Empty = default."),Vh=d('<div class=dt-settings><button type=button aria-label=Settings aria-haspopup=true title=Settings><svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2><circle cx=12 cy=12 r=3></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z">'),Gh=d("<button type=button>"),Wh=d("<label class=dt-settings-field><span></span><input type=text>"),Yh=d('<svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z">'),Qh=d("<button type=button class=dt-theme-toggle>"),Xh=d('<svg viewBox="0 0 24 24"fill=none stroke=currentColor stroke-width=2><circle cx=12 cy=12 r=4></circle><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41">');function Pt(e,t){return!!e.quiet&&!t&&!e.count?.()}function Vl(){return[{id:"overview",label:"Overview"},{id:"runtime",label:"Runtime"},{id:"routes",label:"Routes",count:()=>se.routes().length||void 0},{id:"sockets",label:"Sockets",quiet:!0,count:()=>Object.keys(se.ws().namespaces??{}).length||void 0},{id:"metrics",label:"Metrics"},{id:"config",label:"Config"},{id:"requests",label:"Requests"},{id:"container",label:"Container",count:()=>se.container().length||void 0},{id:"queues",label:"Jobs",quiet:!0,count:()=>se.queues().queues.length+se.cron().length||void 0},{id:"database",label:"Database",quiet:!0,count:()=>Xt()().filter(e=>e.type==="db:query"||e.type==="db:query-error").length||void 0},{id:"activity",label:"Activity",quiet:!0,count:()=>Xt()().length||void 0}]}var Zh=new Set([...Vl().map(e=>e.id),...Object.keys(Zr)]),ev=[{label:null,ids:["overview"]},{label:"Runtime",ids:["runtime","metrics","requests","config"]},{label:"Architecture",ids:["routes","sockets","container"]},{label:"Data & Jobs",ids:["database","queues"]},{label:null,ids:["activity"]}],Gl="kickjs-devtools-sidebar-w",tl="kickjs-devtools-sidebar-mode",tv=new Set(["routes","sockets","requests","container","activity","database","queues"]),Wl="kickjs-devtools-sidebar-collapsed",Yl=150,Ql=360;function rv(){try{const e=Number(localStorage.getItem(Gl));if(e>=Yl&&e<=Ql)return e}catch{}return 200}function nv(){try{const e=localStorage.getItem(Wl);if(e)return JSON.parse(e)}catch{}return[]}var lv=()=>{const e=ha,[t,r]=P((()=>{try{return localStorage.getItem(tl)!=="full"}catch{return!0}})()),s=()=>{const h=!t();r(h);try{localStorage.setItem(tl,h?"rail":"full")}catch{}},[l,a]=P([]),[i,c]=P([]),u=Vl(),f=new Map(u.map(h=>[h.id,h])),[g,p]=P(rv()),[x,v]=P(nv()),_=h=>{v(w=>{const C=w.includes(h)?w.filter(I=>I!==h):[...w,h];try{localStorage.setItem(Wl,JSON.stringify(C))}catch{}return C})};let N=null;ke(()=>N?.());const b=h=>{h.preventDefault();const w=h.clientX,C=g();document.body.style.cursor="col-resize";const I=E=>{const T=Math.min(Ql,Math.max(Yl,C+(E.clientX-w)));p(T)},H=()=>{document.removeEventListener("mousemove",I),document.removeEventListener("mouseup",D),document.body.style.cursor="",N=null},D=()=>{H();try{localStorage.setItem(Gl,String(g()))}catch{}};N=H,document.addEventListener("mousemove",I),document.addEventListener("mouseup",D)};Ie(()=>{ye.tabs().then(({tabs:I,errors:H})=>{a(I.filter(D=>!Zh.has(D.id))),c(H)}).catch(()=>{});let h=null;kh().then(I=>{h=I});const w=ff(),C=sa();ke(()=>{h?.(),w(),C()}),_s(),Cs(),Ls()});const m=h=>{ft(h),queueMicrotask(()=>{document.querySelector(`[role="tab"][data-tab-id="${h}"]`)?.scrollIntoView({behavior:"smooth",inline:"center",block:"nearest"})})},S=()=>[...u.map(h=>({id:`tab:${h.id}`,title:h.label,group:"Tabs",icon:h.id,run:()=>m(h.id)})),...l().map(h=>({id:`tab:${h.id}`,title:h.title,group:"Tabs",icon:"custom",run:()=>m(h.id)})),...se.routes().map(h=>({id:`route:${h.method} ${h.path}`,title:`${h.method} ${h.path}`,description:`${h.controller}.${h.handler}`,group:"Routes",icon:"routes",run:()=>rr(h)})),...se.container().map(h=>({id:`token:${h.token}`,title:h.token,description:[h.kind,h.scope].filter(Boolean).join(" · "),group:"DI tokens",icon:"container",run:()=>ql(h.token)})),...["system","light","dark"].map(h=>({id:`theme:${h}`,title:`Theme: ${h}`,group:"Actions",icon:"action",run:()=>hl(h)})),...["sm","md","lg"].map(h=>({id:`density:${h}`,title:`Density: ${h}`,group:"Actions",icon:"action",run:()=>ml(h)}))],$=()=>l().find(h=>h.id===e());return(()=>{var h=Bh(),w=h.firstChild,C=w.firstChild.nextSibling,I=C.firstChild,H=I.firstChild,D=w.nextSibling,E=D.firstChild,T=E.firstChild,O=T.firstChild,j=E.nextSibling;return Jr(I,"click",Ph,!0),n(I,o(Je,{name:"search",size:13}),H),n(C,o(sv,{}),null),n(C,o(iv,{}),null),n(C,o(ov,{}),null),n(E,o(re,{each:ev,children:k=>o(y,{get when(){return k.label},get fallback(){return o(re,{get each(){return k.ids},children:A=>{const W=f.get(A);return o(y,{when:W,children:V=>(()=>{var z=yr(),L=z.firstChild,ie=L.firstChild;return z.$$click=()=>m(A),F(z,"data-tab-id",A),n(L,o(Je,{name:A}),ie),n(ie,()=>V().label),n(z,o(y,{get when(){return V().count?.()},children:R=>(()=>{var M=el();return n(M,R),M})()}),null),q(R=>{var M=`dt-nav-item ${e()===A?"active":""} ${Pt(V(),e()===A)?"opacity-50":""}`,Z=e()===A,B=V().label,K=Pt(V(),e()===A)?`${V().label} — nothing reported yet`:V().label;return M!==R.e&&U(z,R.e=M),Z!==R.t&&F(z,"aria-selected",R.t=Z),B!==R.a&&F(z,"aria-label",R.a=B),K!==R.o&&F(z,"title",R.o=K),R},{e:void 0,t:void 0,a:void 0,o:void 0}),z})()})}})},children:A=>(()=>{var W=zh(),V=W.firstChild,z=V.firstChild;return n(W,o(y,{get when(){return t()},get children(){return Zn()}}),V),V.$$click=()=>_(A()),n(V,A,null),n(W,o(y,{get when(){return t()||!x().includes(A())},get children(){return o(re,{get each(){return k.ids},children:L=>{const ie=f.get(L);return o(y,{when:ie,children:R=>(()=>{var M=yr(),Z=M.firstChild,B=Z.firstChild;return M.$$click=()=>m(L),F(M,"data-tab-id",L),n(Z,o(Je,{name:L}),B),n(B,()=>R().label),n(M,o(y,{get when(){return R().count?.()},children:K=>(()=>{var Q=el();return n(Q,K),Q})()}),null),q(K=>{var Q=`dt-nav-item nested ${e()===L?"active":""} ${Pt(R(),e()===L)?"opacity-50":""}`,ne=e()===L,ue=R().label,te=Pt(R(),e()===L)?`${R().label} — nothing reported yet`:R().label;return Q!==K.e&&U(M,K.e=Q),ne!==K.t&&F(M,"aria-selected",K.t=ne),ue!==K.a&&F(M,"aria-label",K.a=ue),te!==K.o&&F(M,"title",K.o=te),K},{e:void 0,t:void 0,a:void 0,o:void 0}),M})()})}})}}),null),q(L=>{var ie=t(),R=!x().includes(A()),M=`dt-nav-caret ${x().includes(A())?"closed":""}`;return ie!==L.e&&(V.hidden=L.e=ie),R!==L.t&&F(V,"aria-expanded",L.t=R),M!==L.a&&U(z,L.a=M),L},{e:void 0,t:void 0,a:void 0}),W})()})}),T),n(E,o(y,{get when(){return l().length>0},get children(){return[Zn(),o(re,{get each(){return l()},children:k=>(()=>{var A=yr(),W=A.firstChild,V=W.firstChild;return A.$$click=()=>m(k.id),n(W,o(Je,{name:"custom"}),V),n(V,()=>k.title),q(z=>{var L=k.id,ie=`dt-nav-item ${e()===k.id?"active":""}`,R=e()===k.id,M=k.title,Z=k.title;return L!==z.e&&F(A,"data-tab-id",z.e=L),ie!==z.t&&U(A,z.t=ie),R!==z.a&&F(A,"aria-selected",z.a=R),M!==z.o&&F(A,"aria-label",z.o=M),Z!==z.i&&F(A,"title",z.i=Z),z},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),A})()})]}}),T),O.$$click=s,n(O,o(Je,{get name(){return t()?"expand":"collapse"},size:16})),n(D,o(y,{get when(){return!t()},get children(){var k=Dh();return k.$$mousedown=b,k}}),j),n(j,o(y,{get when(){return e()==="overview"},get children(){return o(wi,{})}}),null),n(j,o(y,{get when(){return e()==="runtime"},get children(){var k=Hh();return n(k,o(Vi,{}),null),n(k,o(qc,{}),null),k}}),null),n(j,o(y,{get when(){return e()==="config"},get children(){return o(_h,{})}}),null),n(j,o(y,{get when(){return e()==="routes"},get children(){return o(Xc,{})}}),null),n(j,o(y,{get when(){return e()==="sockets"},get children(){return o(af,{})}}),null),n(j,o(y,{get when(){return e()==="requests"},get children(){return o(ui,{})}}),null),n(j,o(y,{get when(){return e()==="metrics"},get children(){return o(hd,{})}}),null),n(j,o(y,{get when(){return e()==="container"},get children(){return o(Vd,{})}}),null),n(j,o(y,{get when(){return e()==="queues"},get children(){return o(ju,{})}}),null),n(j,o(y,{get when(){return e()==="database"},get children(){return o(If,{})}}),null),n(j,o(y,{get when(){return e()==="activity"},get children(){return o(Vf,{})}}),null),n(j,o(y,{get when(){return $()},children:k=>o(ch,{get tab(){return k()}})}),null),n(j,o(y,{get when(){return ae(()=>i().length>0)()&&e()==="overview"},get children(){var k=Uh(),A=k.firstChild,W=A.firstChild,V=A.nextSibling;return n(A,()=>i().length,W),n(V,o(re,{get each(){return i()},children:z=>(()=>{var L=Fh(),ie=L.firstChild;return n(L,()=>z.source,ie),n(L,()=>z.reason,null),L})()})),k}}),null),n(h,o(Nh,{items:S}),null),n(h,o(Th,{}),null),n(h,o(y,{get when(){return ae(()=>se.connectionStatus()==="disconnected")()&&!se.authRequired()},get children(){return jh()}}),null),q(k=>{var A=`dt-sidebar ${t()?"rail":""}`,W=`width:${g()}px`,V=t()?"Show labels":"Icons only",z=t()?"Show labels":"Icons only",L=`dt-main ${tv.has(e())?"flush":""}`;return A!==k.e&&U(E,k.e=A),k.t=dl(E,W,k.t),V!==k.a&&F(O,"title",k.a=V),z!==k.o&&F(O,"aria-label",k.o=z),L!==k.i&&U(j,k.i=L),k},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),h})()},sv=()=>{const e=r=>r==="live"?"Live":r==="polling"?"Polling":r==="disconnected"?"Disconnected":"Connecting…",t=r=>r?r.toLocaleTimeString():"never";return(()=>{var r=Jh(),s=r.firstChild,l=s.nextSibling,a=l.nextSibling.nextSibling;return a.firstChild,n(l,()=>e(se.connectionStatus())),n(a,()=>t(se.lastUpdate()),null),q(()=>U(s,`dt-pulse dt-pulse-${se.connectionStatus()}`)),r})()},av=[{id:"sm",label:"Small"},{id:"md",label:"Medium"},{id:"lg",label:"Large"}],ov=()=>{const[e,t]=P(!1);let r;const s=a=>{e()&&r&&!r.contains(a.target)&&t(!1)},l=a=>{a.key==="Escape"&&t(!1)};return document.addEventListener("click",s),document.addEventListener("keydown",l),ke(()=>{document.removeEventListener("click",s),document.removeEventListener("keydown",l)}),(()=>{var a=Vh(),i=a.firstChild;return et(c=>r=c,a),i.$$click=()=>t(c=>!c),n(a,o(y,{get when(){return e()},get children(){var c=Kh(),u=c.firstChild,f=u.firstChild.nextSibling,g=u.nextSibling,p=g.firstChild.nextSibling;return n(f,o(re,{each:av,children:x=>(()=>{var v=Gh();return v.$$click=()=>ml(x.id),n(v,()=>x.label),q(_=>{var N=`dt-seg-item ${pn()===x.id?"active":""}`,b=pn()===x.id;return N!==_.e&&U(v,_.e=N),b!==_.t&&F(v,"aria-pressed",_.t=b),_},{e:void 0,t:void 0}),v})()})),n(g,o(re,{each:[["sans","Interface","e.g. Inter"],["mono","Code & editors","e.g. JetBrains Mono"]],children:([x,v,_])=>(()=>{var N=Wh(),b=N.firstChild,m=b.nextSibling;return n(b,v),m.$$input=S=>As(x,S.currentTarget.value),F(m,"spellcheck",!1),F(m,"placeholder",_),q(()=>m.value=Ts()[x]),N})()}),p),c}}),null),q(c=>{var u=`dt-settings-btn ${e()?"open":""}`,f=e();return u!==c.e&&U(i,c.e=u),f!==c.t&&F(i,"aria-expanded",c.t=f),c},{e:void 0,t:void 0}),a})()},iv=()=>{const e=()=>{const r=lr()==="system"?"light":lr()==="light"?"dark":"system";hl(r)},t=()=>{const r=lr();return`Theme: ${r==="system"?"follow system":r} (click to cycle)`};return(()=>{var r=Qh();return r.$$click=e,n(r,o(y,{get when(){return Vr()==="dark"},get fallback(){return Xh()},get children(){return Yh()}})),q(s=>{var l=t(),a=t();return l!==s.e&&F(r,"aria-label",s.e=l),a!==s.t&&F(r,"title",s.t=a),s},{e:void 0,t:void 0}),r})()};we(["click","mousedown","input"]);var Xl=document.getElementById("root");if(!Xl)throw new Error("#root not found");ms(()=>o(lv,{}),Xl);