daimon 0.7.0 → 0.8.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.
Files changed (48) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/dist/cli.js +178 -74
  3. package/dist/dashboard/browser/{chunk-YNCTXEXX.js → chunk-2BXIFQGQ.js} +1 -1
  4. package/dist/dashboard/browser/{chunk-6BDWIJ3G.js → chunk-3WKRVGPT.js} +1 -1
  5. package/dist/dashboard/browser/chunk-44JIQO3X.js +1 -0
  6. package/dist/dashboard/browser/chunk-4BAKWDAV.js +1 -0
  7. package/dist/dashboard/browser/chunk-4OCNYL7T.js +1 -0
  8. package/dist/dashboard/browser/chunk-6WZJCF24.js +1 -0
  9. package/dist/dashboard/browser/chunk-7C772RJ3.js +3 -0
  10. package/dist/dashboard/browser/{chunk-25VLDASM.js → chunk-7NPLP3QD.js} +1 -1
  11. package/dist/dashboard/browser/chunk-A4BNXJUT.js +1 -0
  12. package/dist/dashboard/browser/{chunk-YA4AZONZ.js → chunk-CM4RQF3A.js} +1 -1
  13. package/dist/dashboard/browser/chunk-CNSXWFDX.js +1 -0
  14. package/dist/dashboard/browser/chunk-CY5YRTQK.js +1 -0
  15. package/dist/dashboard/browser/{chunk-5PAHWCG5.js → chunk-EIWOTZT3.js} +1 -1
  16. package/dist/dashboard/browser/{chunk-ZEO5YLWG.js → chunk-GYWEXV2L.js} +1 -1
  17. package/dist/dashboard/browser/chunk-H2N3RBHF.js +1 -0
  18. package/dist/dashboard/browser/{chunk-RIDV4B55.js → chunk-H3L4MTG4.js} +1 -1
  19. package/dist/dashboard/browser/{chunk-ZVUH3ISD.js → chunk-I65I7J5Q.js} +1 -1
  20. package/dist/dashboard/browser/chunk-K7S4ITPJ.js +2 -0
  21. package/dist/dashboard/browser/chunk-KL6X73FV.js +1 -0
  22. package/dist/dashboard/browser/{chunk-Q3N4MMWW.js → chunk-LBL7Z5BE.js} +4 -4
  23. package/dist/dashboard/browser/chunk-LHAMBNO6.js +1 -0
  24. package/dist/dashboard/browser/chunk-NX6DTO32.js +1 -0
  25. package/dist/dashboard/browser/chunk-P5IE6DI6.js +2 -0
  26. package/dist/dashboard/browser/{chunk-SR5JAOLW.js → chunk-Q772THBA.js} +1 -1
  27. package/dist/dashboard/browser/{chunk-OUXULJ3Z.js → chunk-QSBOKS53.js} +1 -1
  28. package/dist/dashboard/browser/{chunk-HYGMRGYR.js → chunk-V2KNRAE4.js} +1 -1
  29. package/dist/dashboard/browser/{chunk-GDJOSLWM.js → chunk-VM2FOT77.js} +1 -1
  30. package/dist/dashboard/browser/index.html +1 -1
  31. package/dist/dashboard/browser/main-4CQTBXSB.js +1 -0
  32. package/dist/main.js +58 -48
  33. package/dist/mcp.js +3 -3
  34. package/package.json +2 -2
  35. package/src/templates/claude/skill.md.tmpl +4 -1
  36. package/src/templates/plugins/example-doctor.mjs +45 -0
  37. package/dist/dashboard/browser/chunk-6C6GHU3A.js +0 -1
  38. package/dist/dashboard/browser/chunk-BDYOKQF3.js +0 -1
  39. package/dist/dashboard/browser/chunk-HYIZMKSF.js +0 -1
  40. package/dist/dashboard/browser/chunk-IQZZO5IM.js +0 -3
  41. package/dist/dashboard/browser/chunk-J5UK77OJ.js +0 -1
  42. package/dist/dashboard/browser/chunk-JI63U3KC.js +0 -2
  43. package/dist/dashboard/browser/chunk-L2PHC6DL.js +0 -1
  44. package/dist/dashboard/browser/chunk-MHYQENOC.js +0 -1
  45. package/dist/dashboard/browser/chunk-UU5K6ZPO.js +0 -1
  46. package/dist/dashboard/browser/chunk-XXIJQBCQ.js +0 -2
  47. package/dist/dashboard/browser/chunk-ZDNBWNU5.js +0 -1
  48. package/dist/dashboard/browser/main-IDF27PFI.js +0 -1
@@ -1 +0,0 @@
1
- import{a as U}from"./chunk-WAN7TQQW.js";import{a as W,b as j}from"./chunk-CILFSVSP.js";import{a as pt}from"./chunk-25VLDASM.js";import"./chunk-RIDV4B55.js";import"./chunk-OHX55ZU4.js";import{b as q,c as dt,d as mt,e as B}from"./chunk-SR5JAOLW.js";import{a as L,b as F}from"./chunk-XXIJQBCQ.js";import"./chunk-YNQPX5G6.js";import"./chunk-IQZZO5IM.js";import"./chunk-KLH6B22T.js";import{b as st,c as lt}from"./chunk-5PAHWCG5.js";import{i as ct,j as K}from"./chunk-Q3N4MMWW.js";import"./chunk-Y6B6X4Y6.js";import{$b as it,Db as V,Eb as _,Fb as u,Gb as et,Hb as D,Ib as h,Jb as M,Kb as x,Lb as o,Mb as r,Nb as C,Sb as v,Ub as g,Wa as N,Wb as p,Ya as tt,_a as s,_b as nt,a as R,ac as ot,b as $,db as P,ea as O,fc as z,gc as k,ic as c,ja as d,jc as f,ka as m,kc as E,lc as A,pa as Z,pb as T,sc as rt,ta as w,xc as I,yc as at}from"./chunk-K43KW4K2.js";var G=(n,e)=>e.name;function ft(n,e){if(n&1&&C(0,"span",5),n&2){let t=e.$implicit;V("data-k",t)}}function xt(n,e){if(n&1&&(o(0,"span",8)(1,"span",22),c(2,"error"),r(),c(3),r()),n&2){let t=p().$implicit;x("matTooltip",t.errorCount+" errors"),s(3),E("",t.errorCount," ")}}function Ct(n,e){if(n&1&&(o(0,"span",11)(1,"span",22),c(2,"lan"),r(),o(3,"dm-mono"),c(4),r()()),n&2){let t=p().$implicit;s(4),f(t.port)}}function vt(n,e){if(n&1){let t=v();o(0,"a",23),g("click",function(a){return d(t),m(a.stopPropagation())}),o(1,"span",22),c(2,"open_in_new"),r(),o(3,"dm-mono"),c(4),r()()}if(n&2){let t=p().$implicit;x("href",t.url,N),s(4),f(t.url)}}function bt(n,e){if(n&1&&(o(0,"span",15)(1,"span",22),c(2,"folder_open"),r(),c(3),r()),n&2){let t=p().$implicit;s(3),f(t.workspaceLabel)}}function yt(n,e){if(n&1&&(o(0,"span",16),c(1),r()),n&2){let t=p().$implicit,i=p();s(),f(i.fmtSince(t.lastChangeMs))}}function wt(n,e){n&1&&C(0,"mat-spinner",21)}function ht(n,e){n&1&&(o(0,"span",22),c(1,"play_arrow"),r())}function Mt(n,e){if(n&1){let t=v();o(0,"button",24),g("click",function(){d(t);let a=p().$implicit,l=p();return m(l.act.emit({name:a.name,kind:"start"}))}),_(1,wt,1,0,"mat-spinner",21)(2,ht,2,0,"span",22),r()}if(n&2){let t=p().$implicit,i=p();x("disabled",i.isBusy(t.name,"start")),s(),u(i.isBusy(t.name,"start")?1:2)}}function kt(n,e){n&1&&C(0,"mat-spinner",21)}function Pt(n,e){n&1&&(o(0,"span",22),c(1,"stop"),r())}function Ot(n,e){if(n&1){let t=v();o(0,"button",25),g("click",function(){d(t);let a=p().$implicit,l=p();return m(l.act.emit({name:a.name,kind:"stop"}))}),_(1,kt,1,0,"mat-spinner",21)(2,Pt,2,0,"span",22),r()}if(n&2){let t=p().$implicit,i=p();x("disabled",i.isBusy(t.name,"stop")),s(),u(i.isBusy(t.name,"stop")?1:2)}}function St(n,e){n&1&&C(0,"mat-spinner",21)}function Tt(n,e){n&1&&(o(0,"span",22),c(1,"restart_alt"),r())}function Vt(n,e){if(n&1){let t=v();o(0,"article",2),g("click",function(){let a=d(t).$implicit,l=p();return m(l.open.emit(a.name))})("mouseenter",function(){let a=d(t).$index,l=p();return m(l.focus.emit(a))})("keydown.enter",function(){let a=d(t).$implicit,l=p();return m(l.open.emit(a.name))}),C(1,"div",3),o(2,"div",4),h(3,ft,1,1,"span",5,et),r(),o(5,"div",6),C(6,"dm-status-pill",7),_(7,xt,4,2,"span",8),r(),o(8,"div",9)(9,"dm-mono"),c(10),r()(),o(11,"div",10),_(12,Ct,5,1,"span",11),_(13,vt,5,2,"a",12),r(),o(14,"div",13)(15,"div",14),_(16,bt,4,1,"span",15),_(17,yt,2,1,"span",16),r(),o(18,"div",17),g("click",function(a){return d(t),m(a.stopPropagation())}),_(19,Mt,3,2,"button",18)(20,Ot,3,2,"button",19),o(21,"button",20),g("click",function(){let a=d(t).$implicit,l=p();return m(l.act.emit({name:a.name,kind:"restart"}))}),_(22,St,1,0,"mat-spinner",21)(23,Tt,2,0,"span",22),r()()()()}if(n&2){let t=e.$implicit,i=e.$index,a=p();z("--dm-tone",a.tone(t.workspaceLabel)),k("f",i===a.focusedIndex),s(2),x("matTooltip",a.ribbonTooltip(t.name)),s(),M(a.ribbonTicks(t.name)),s(3),x("status",t.status)("health",t.health),s(),u(t.errorCount>0?7:-1),s(3),f(t.name),s(2),u(t.port!=null?12:-1),s(),u(t.url?13:-1),s(3),u(t.workspaceLabel?16:-1),s(),u(t.lastChangeMs?17:-1),s(2),u(t.status==="stopped"||t.status==="error"?19:20),s(2),x("disabled",a.isBusy(t.name,"restart")),s(),u(a.isBusy(t.name,"restart")?22:23)}}function Et(n,e){if(n&1&&(o(0,"span",10),c(1),r()),n&2){let t=p().$implicit;s(),f(t.errorCount)}}function At(n,e){n&1&&(o(0,"span",11),c(1,"0"),r())}function It(n,e){n&1&&C(0,"mat-spinner",16)}function Lt(n,e){n&1&&(o(0,"span",17),c(1,"play_arrow"),r())}function Ft(n,e){if(n&1){let t=v();o(0,"button",19),g("click",function(){d(t);let a=p().$implicit,l=p();return m(l.act.emit({name:a.name,kind:"start"}))}),_(1,It,1,0,"mat-spinner",16)(2,Lt,2,0,"span",17),r()}if(n&2){let t=p().$implicit,i=p();x("disabled",i.isBusy(t.name,"start")),s(),u(i.isBusy(t.name,"start")?1:2)}}function Bt(n,e){n&1&&C(0,"mat-spinner",16)}function Rt(n,e){n&1&&(o(0,"span",17),c(1,"stop"),r())}function $t(n,e){if(n&1){let t=v();o(0,"button",20),g("click",function(){d(t);let a=p().$implicit,l=p();return m(l.act.emit({name:a.name,kind:"stop"}))}),_(1,Bt,1,0,"mat-spinner",16)(2,Rt,2,0,"span",17),r()}if(n&2){let t=p().$implicit,i=p();x("disabled",i.isBusy(t.name,"stop")),s(),u(i.isBusy(t.name,"stop")?1:2)}}function Nt(n,e){n&1&&C(0,"mat-spinner",16)}function Dt(n,e){n&1&&(o(0,"span",17),c(1,"restart_alt"),r())}function zt(n,e){if(n&1&&(o(0,"a",18)(1,"span",17),c(2,"open_in_new"),r()()),n&2){let t=p().$implicit;x("href",t.url,N)}}function Kt(n,e){if(n&1){let t=v();o(0,"div",4),g("click",function(){let a=d(t).$implicit,l=p();return m(l.open.emit(a.name))})("mouseenter",function(){let a=d(t).$index,l=p();return m(l.focus.emit(a))})("keydown.enter",function(){let a=d(t).$implicit,l=p();return m(l.open.emit(a.name))}),o(1,"div"),C(2,"dm-status-pill",5),r(),o(3,"div",6),C(4,"span",7),o(5,"dm-mono"),c(6),r()(),o(7,"div",8),c(8),r(),o(9,"div",9)(10,"dm-mono"),c(11),r()(),o(12,"div",9)(13,"dm-mono"),c(14),r()(),o(15,"div",9)(16,"dm-mono"),c(17),r()(),o(18,"div",9)(19,"dm-mono"),c(20),r()(),o(21,"div"),_(22,Et,2,1,"span",10)(23,At,2,0,"span",11),r(),o(24,"div",12),g("click",function(a){return d(t),m(a.stopPropagation())}),_(25,Ft,3,2,"button",13)(26,$t,3,2,"button",14),o(27,"button",15),g("click",function(){let a=d(t).$implicit,l=p();return m(l.act.emit({name:a.name,kind:"restart"}))}),_(28,Nt,1,0,"mat-spinner",16)(29,Dt,2,0,"span",17),r(),_(30,zt,3,1,"a",18),r()()}if(n&2){let t=e.$implicit,i=e.$index,a=p();z("--dm-tone",a.tone(t.workspaceLabel)),k("f",i===a.focusedIndex),s(2),x("status",t.status)("health",t.health),s(4),f(t.name),s(2),f(t.workspaceLabel||"\u2014"),s(3),f(t.port??"\u2014"),s(3),f(a.fmtUptime(t.uptimeMs)),s(3),f(a.fmtPct(t.cpu)),s(3),f(a.fmtMem(t.memMB)),s(2),u(t.errorCount>0?22:23),s(3),u(t.status==="stopped"||t.status==="error"?25:26),s(2),x("disabled",a.isBusy(t.name,"restart")),s(),u(a.isBusy(t.name,"restart")?28:29),s(2),u(t.url?30:-1)}}var Wt=["searchInput"],jt=n=>["/apps",n],qt=(n,e)=>e.key;function Ut(n,e){if(n&1&&(o(0,"div",27)(1,"span",24),c(2),r(),o(3,"span",25),c(4,"errors"),r()()),n&2){let t=p();s(2),f(t.totals.totalErrCount)}}function Qt(n,e){if(n&1&&(o(0,"span",34),c(1),r()),n&2){let t=p(2).$implicit;s(),E(" ",t.firstError.code)}}function Ht(n,e){if(n&1&&(o(0,"dm-mono")(1,"span",33),c(2),r(),_(3,Qt,2,1,"span",34),r()),n&2){let t=p().$implicit;s(2),A("",t.firstError.file,":",t.firstError.line),s(),u(t.firstError.code?3:-1)}}function Yt(n,e){if(n&1&&(o(0,"a",31)(1,"strong"),c(2),r(),o(3,"span",32),c(4),r(),_(5,Ht,4,3,"dm-mono"),r()),n&2){let t=e.$implicit;x("routerLink",rt(5,jt,t.name)),s(2),f(t.name),s(2),A("",t.errCount," ",t.errCount===1?"error":"errors"),s(),u(t.firstError?5:-1)}}function Gt(n,e){if(n&1&&(o(0,"div",28)(1,"div",29)(2,"span",8),c(3,"priority_high"),r(),c(4,"Needs attention "),r(),o(5,"div",30),h(6,Yt,6,7,"a",31,G),r()()),n&2){let t=p();s(6),M(t.needsAttention)}}function Jt(n,e){if(n&1&&(o(0,"section",2)(1,"div",22)(2,"div",23)(3,"span",24),c(4),r(),o(5,"span",25),c(6,"apps"),r()(),o(7,"div",26)(8,"span",24),c(9),r(),o(10,"span",25),c(11,"serving"),r()(),o(12,"div",27)(13,"span",24),c(14),r(),o(15,"span",25),c(16,"errored"),r()(),o(17,"div",23)(18,"span",24),c(19),r(),o(20,"span",25),c(21,"stopped"),r()(),_(22,Ut,5,1,"div",27),r(),_(23,Gt,8,0,"div",28),r()),n&2){let t=e;s(4),f(t.totals.apps),s(5),f(t.totals.serving),s(3),k("dm-zero",!t.totals.errors),s(2),f(t.totals.errors),s(5),f(t.totals.stopped),s(3),u(t.totals.totalErrCount>0?22:-1),s(),u(t.needsAttention.length?23:-1)}}function Xt(n,e){if(n&1&&(c(0," \xB7 workspace "),o(1,"dm-mono"),c(2),r()),n&2){let t=p();s(2),f(t.workspace())}}function Zt(n,e){if(n&1){let t=v();o(0,"button",35),g("click",function(){d(t);let a=p();return m(a.onQuery(""))}),o(1,"span",8),c(2,"close"),r()()}}function te(n,e){if(n&1){let t=v();o(0,"button",36),g("click",function(){let a=d(t).$implicit,l=p();return m(l.setStatus(a.key))}),c(1),o(2,"span",37),c(3),r()()}if(n&2){let t=e.$implicit,i=p();k("active",i.status()===t.key),V("aria-selected",i.status()===t.key),s(),E(" ",t.label),s(2),f(i.countFor(t.key))}}function ee(n,e){if(n&1){let t=v();o(0,"button",40),g("click",function(){let a=d(t).$implicit,l=p(2);return m(l.toggleTag(a))}),c(1),r()}if(n&2){let t=e.$implicit,i=p(2);k("active",i.isTagSelected(t)),V("aria-pressed",i.isTagSelected(t)),s(),f(t)}}function ne(n,e){if(n&1){let t=v();o(0,"button",41),g("click",function(){d(t);let a=p(2);return m(a.clearTags())}),o(1,"span",8),c(2,"close"),r()()}}function ie(n,e){if(n&1&&(o(0,"div",17),h(1,ee,2,4,"button",38,D),_(3,ne,3,0,"button",39),r()),n&2){let t=p();s(),M(t.allTags()),s(2),u(t.selectedTags().size?3:-1)}}function oe(n,e){n&1&&(o(0,"article",42),C(1,"div",43),o(2,"div",44),C(3,"dm-skeleton",45)(4,"dm-skeleton",46)(5,"dm-skeleton",47),r()())}function re(n,e){if(n&1&&(o(0,"div",18),h(1,oe,6,0,"article",42,D),r()),n&2){let t=p();s(),M(t.skeletonItems)}}function ae(n,e){n&1&&(o(0,"dm-empty",19)(1,"div",48)(2,"a",49)(3,"span",8),c(4,"stethoscope"),r(),c(5,"Open Doctor "),r()()())}function se(n,e){n&1&&C(0,"dm-empty",20)}function le(n,e){if(n&1){let t=v();o(0,"dm-apps-cards",50),g("open",function(a){d(t);let l=p();return m(l.open(a))})("focus",function(a){d(t);let l=p();return m(l.focusedIndex.set(a))})("act",function(a){d(t);let l=p();return m(l.act(a.name,a.kind))}),r()}if(n&2){let t=p();x("items",t.filtered())("focusedIndex",t.focusedIndex())("busy",t.busyMap())}}function ce(n,e){if(n&1){let t=v();o(0,"dm-apps-list-view",50),g("open",function(a){d(t);let l=p();return m(l.open(a))})("focus",function(a){d(t);let l=p();return m(l.focusedIndex.set(a))})("act",function(a){d(t);let l=p();return m(l.act(a.name,a.kind))}),r()}if(n&2){let t=p();x("items",t.filtered())("focusedIndex",t.focusedIndex())("busy",t.busyMap())}}var _t="daimon.apps.view",ut="daimon.workspace",Q="daimon.apps.tags",H=class n{items=[];focusedIndex=0;busy={};open=new P;focus=new P;act=new P;tone=U;api=O(K);RIBBON_BUCKETS=20;RIBBON_WINDOW_MS=3600*1e3;perAppTicks=I(()=>{let e=this.api.events(),i=Date.now()-this.RIBBON_WINDOW_MS,a=this.RIBBON_WINDOW_MS/this.RIBBON_BUCKETS,l=new Map,y={stopped:1,serving:2,compiling:3,starting:3,error:4};for(let b of e){if(b.type!=="status"||!b.app||!b.to||b.ts<i)continue;let J=Math.min(this.RIBBON_BUCKETS-1,Math.floor((b.ts-i)/a)),S=l.get(b.app);S||(S=new Array(this.RIBBON_BUCKETS).fill(""),l.set(b.app,S));let X=S[J];(!X||(y[b.to]??0)>(y[X]??0))&&(S[J]=b.to)}return l});isBusy(e,t){return!!this.busy[e]?.[t]}ribbonTicks(e){return this.perAppTicks().get(e)??new Array(this.RIBBON_BUCKETS).fill("")}ribbonTooltip(e){let t=this.perAppTicks().get(e);if(!t)return"no status events in the last 60 min";let i={};for(let l of t)l&&(i[l]=(i[l]??0)+1);let a=Object.entries(i).map(([l,y])=>`${y} ${l}`).join(" \xB7 ");return a?`last 60 min: ${a}`:"no status events in the last 60 min"}fmtSince(e){if(!e||e<=0)return"";let t=Math.floor(e/1e3);return t<60?t+"s ago":t<3600?Math.floor(t/60)+"m ago":t<86400?Math.floor(t/3600)+"h ago":Math.floor(t/86400)+"d ago"}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=T({type:n,selectors:[["dm-apps-cards"]],inputs:{items:"items",focusedIndex:"focusedIndex",busy:"busy"},outputs:{open:"open",focus:"focus",act:"act"},decls:3,vars:0,consts:[[1,"g"],["role","button","tabindex","0",1,"c",3,"f","--dm-tone"],["role","button","tabindex","0",1,"c",3,"click","mouseenter","keydown.enter"],[1,"ac"],["aria-hidden","true",1,"rb",3,"matTooltip"],[1,"tk"],[1,"h"],[3,"status","health"],[1,"eb",3,"matTooltip"],[1,"n"],[1,"m"],["matTooltip","Port",1,"mi"],["target","_blank","rel","noopener",1,"mi","ml",3,"href"],[1,"ft"],[1,"tg"],[1,"ws"],[1,"sn"],[1,"ax",3,"click"],["matTooltip","Start (s)","aria-label","Start",1,"ib",3,"disabled"],["matTooltip","Stop (x)","aria-label","Stop",1,"ib",3,"disabled"],["matTooltip","Restart (r)","aria-label","Restart",1,"ib",3,"click","disabled"],["diameter","16"],[1,"material-symbols-outlined"],["target","_blank","rel","noopener",1,"mi","ml",3,"click","href"],["matTooltip","Start (s)","aria-label","Start",1,"ib",3,"click","disabled"],["matTooltip","Stop (x)","aria-label","Stop",1,"ib",3,"click","disabled"]],template:function(t,i){t&1&&(o(0,"div",0),h(1,Vt,24,16,"article",1,G),r()),t&2&&(s(),M(i.items))},dependencies:[F,L,j,W,q,B],styles:["[_nghost-%COMP%]{display:block}.g[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem}.c[_ngcontent-%COMP%]{position:relative;display:flex;flex-direction:column;background:var(--mat-sys-surface-container-low);border:1px solid var(--mat-sys-outline-variant);border-radius:14px;overflow:hidden;cursor:pointer;transition:box-shadow var(--dm-motion-short) var(--dm-motion-easing),transform var(--dm-motion-short) var(--dm-motion-easing),border-color var(--dm-motion-short) var(--dm-motion-easing)}.c[_ngcontent-%COMP%]:hover{box-shadow:var(--mat-sys-level2);transform:translateY(-1px)}.c.f[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary);box-shadow:0 0 0 2px color-mix(in oklch,var(--mat-sys-primary) 25%,transparent)}.ac[_ngcontent-%COMP%]{height:4px;background:var(--dm-tone,var(--mat-sys-surface-container))}.rb[_ngcontent-%COMP%]{display:flex;gap:1px;height:6px;padding:0 .75rem;align-items:center;background:var(--mat-sys-surface-container-lowest)}.rb[_ngcontent-%COMP%] .tk[_ngcontent-%COMP%]{flex:1;height:6px;border-radius:1px;background:var(--mat-sys-surface-container)}.rb[_ngcontent-%COMP%] .tk[data-k=serving][_ngcontent-%COMP%]{background:color-mix(in oklch,var(--mat-sys-primary) 60%,transparent)}.rb[_ngcontent-%COMP%] .tk[data-k=error][_ngcontent-%COMP%]{background:var(--mat-sys-error)}.rb[_ngcontent-%COMP%] .tk[data-k=starting][_ngcontent-%COMP%], .rb[_ngcontent-%COMP%] .tk[data-k=compiling][_ngcontent-%COMP%]{background:color-mix(in oklch,var(--mat-sys-tertiary) 70%,transparent)}.rb[_ngcontent-%COMP%] .tk[data-k=stopped][_ngcontent-%COMP%]{background:var(--mat-sys-outline-variant)}.h[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:.75rem .875rem 0}.n[_ngcontent-%COMP%]{padding:.375rem .875rem 0;font:500 1.05rem/1.5rem Roboto}.n[_ngcontent-%COMP%] .dm-mono[_ngcontent-%COMP%]{font-size:1.05rem;font-weight:500}.m[_ngcontent-%COMP%]{padding:.25rem .875rem .5rem;display:flex;flex-wrap:wrap;gap:.75rem;color:var(--mat-sys-on-surface-variant)}.mi[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;font-size:.8125rem}.mi[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:14px}.ml[_ngcontent-%COMP%]{color:var(--mat-sys-primary);text-decoration:none}.ml[_ngcontent-%COMP%]:hover{text-decoration:underline}.ft[_ngcontent-%COMP%]{margin-top:auto;padding:.5rem .75rem .5rem .875rem;display:flex;align-items:center;justify-content:space-between;gap:.5rem;border-top:1px solid var(--mat-sys-outline-variant)}.tg[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;flex-wrap:wrap;min-width:0}.ws[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;padding:2px 8px;border-radius:999px;font:500 .6875rem/1rem Roboto;background:var(--mat-sys-surface-container);color:var(--mat-sys-on-surface-variant);border:1px solid var(--mat-sys-outline-variant)}.ws[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:12px}.sn[_ngcontent-%COMP%]{font:400 .6875rem/1rem Roboto;color:var(--mat-sys-on-surface-variant)}.ax[_ngcontent-%COMP%]{display:inline-flex;gap:.25rem}.ib[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;background:transparent;border:0;border-radius:8px;color:var(--mat-sys-on-surface-variant);cursor:pointer;transition:background var(--dm-motion-short) var(--dm-motion-easing),color var(--dm-motion-short) var(--dm-motion-easing)}.ib[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface)}.ib[_ngcontent-%COMP%]:disabled{opacity:.55;cursor:not-allowed}.ib[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:18px}.eb[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;padding:1px 8px;border-radius:999px;font:600 .75rem/1rem var(--dm-mono);background:color-mix(in oklch,var(--mat-sys-error) 14%,transparent);color:var(--mat-sys-error);border:1px solid color-mix(in oklch,var(--mat-sys-error) 30%,transparent)}.eb[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:14px}"],changeDetection:0})},Y=class n{items=[];focusedIndex=0;busy={};open=new P;focus=new P;act=new P;tone=U;isBusy(e,t){return!!this.busy[e]?.[t]}fmtUptime(e){if(!e||e<0)return"\u2014";let t=Math.floor(e/1e3);return t<60?t+"s":t<3600?Math.floor(t/60)+"m":t<86400?Math.floor(t/3600)+"h":Math.floor(t/86400)+"d"}fmtPct(e){return e==null||isNaN(e)?"\u2014":e.toFixed(0)+"%"}fmtMem(e){return e==null||isNaN(e)?"\u2014":e>=1024?(e/1024).toFixed(1)+"G":Math.round(e)+"M"}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=T({type:n,selectors:[["dm-apps-list-view"]],inputs:{items:"items",focusedIndex:"focusedIndex",busy:"busy"},outputs:{open:"open",focus:"focus",act:"act"},decls:22,vars:0,consts:[["role","table",1,"ls"],["role","row",1,"rw","rh"],[1,"ar"],["role","row","tabindex","0",1,"rw",3,"f","--dm-tone"],["role","row","tabindex","0",1,"rw",3,"click","mouseenter","keydown.enter"],[3,"status","health"],[1,"nm"],[1,"tn"],[1,"ws"],[1,"sm"],[1,"eb"],[1,"dm"],[1,"ax",3,"click"],["matTooltip","Start","aria-label","Start",1,"ib",3,"disabled"],["matTooltip","Stop","aria-label","Stop",1,"ib",3,"disabled"],["matTooltip","Restart","aria-label","Restart",1,"ib",3,"click","disabled"],["diameter","14"],[1,"material-symbols-outlined"],["target","_blank","rel","noopener","matTooltip","Open","aria-label","Open",1,"ib",3,"href"],["matTooltip","Start","aria-label","Start",1,"ib",3,"click","disabled"],["matTooltip","Stop","aria-label","Stop",1,"ib",3,"click","disabled"]],template:function(t,i){t&1&&(o(0,"div",0)(1,"div",1)(2,"div"),c(3,"status"),r(),o(4,"div"),c(5,"name"),r(),o(6,"div"),c(7,"workspace"),r(),o(8,"div"),c(9,"port"),r(),o(10,"div"),c(11,"uptime"),r(),o(12,"div"),c(13,"cpu"),r(),o(14,"div"),c(15,"mem"),r(),o(16,"div"),c(17,"err"),r(),o(18,"div",2),c(19,"actions"),r()(),h(20,Kt,31,17,"div",3,G),r()),t&2&&(s(20),M(i.items))},dependencies:[F,L,j,W,q,B],styles:['[_nghost-%COMP%]{display:block}.ls[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container-low);border:1px solid var(--mat-sys-outline-variant);border-radius:12px;overflow:hidden}.rw[_ngcontent-%COMP%]{display:grid;align-items:center;gap:.75rem;grid-template-columns:110px minmax(160px,1.5fr) minmax(100px,1fr) 70px 80px 70px 80px 60px 140px;padding:0 .875rem;min-height:36px;cursor:pointer;position:relative;border-bottom:1px solid var(--mat-sys-outline-variant);transition:background var(--dm-motion-short) var(--dm-motion-easing)}.rw[_ngcontent-%COMP%]:last-child{border-bottom:0}.rw[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container)}.rw.f[_ngcontent-%COMP%]{background:color-mix(in oklch,var(--mat-sys-primary) 8%,transparent)}.rw.f[_ngcontent-%COMP%]:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--mat-sys-primary)}.rh[_ngcontent-%COMP%]{min-height:30px;background:var(--mat-sys-surface-container);cursor:default;font:500 .6875rem/1rem Roboto;text-transform:uppercase;letter-spacing:.04rem;color:var(--mat-sys-on-surface-variant)}.rh[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container)}.nm[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;min-width:0;overflow:hidden}.nm[_ngcontent-%COMP%] .dm-mono[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tn[_ngcontent-%COMP%]{width:3px;height:18px;border-radius:2px;background:var(--dm-tone,var(--mat-sys-surface-container));flex-shrink:0}.ws[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--mat-sys-on-surface-variant);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sm[_ngcontent-%COMP%]{font-size:.8125rem}.ar[_ngcontent-%COMP%], .ax[_ngcontent-%COMP%]{display:inline-flex;gap:.125rem;justify-content:flex-end}.dm[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:.8125rem}.ib[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;background:transparent;border:0;border-radius:6px;color:var(--mat-sys-on-surface-variant);cursor:pointer;transition:background var(--dm-motion-short) var(--dm-motion-easing),color var(--dm-motion-short) var(--dm-motion-easing);text-decoration:none}.ib[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface)}.ib[_ngcontent-%COMP%]:disabled{opacity:.55;cursor:not-allowed}.ib[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:16px}.eb[_ngcontent-%COMP%]{display:inline-flex;align-items:center;padding:0 6px;border-radius:999px;font:600 .75rem/1rem var(--dm-mono);background:color-mix(in oklch,var(--mat-sys-error) 14%,transparent);color:var(--mat-sys-error);border:1px solid color-mix(in oklch,var(--mat-sys-error) 30%,transparent)}@media(max-width:1000px){.rw[_ngcontent-%COMP%]{grid-template-columns:100px minmax(120px,1fr) 70px 70px 60px 110px}.rw[_ngcontent-%COMP%] .ws[_ngcontent-%COMP%], .rw[_ngcontent-%COMP%] .sm[_ngcontent-%COMP%]:nth-of-type(3), .rw[_ngcontent-%COMP%] .sm[_ngcontent-%COMP%]:nth-of-type(4){display:none}}'],changeDetection:0})},gt=class n{api=O(K);router=O(st);snack=O(pt);destroyRef=O(Z);searchInput;view=w("cards");query=w("");status=w("all");workspace=w(null);focusedIndex=w(0);busyMap=w({});selectedTags=w(new Set);allTags=I(()=>{let e=new Set;for(let t of this.api.apps())for(let i of t.tags??[])e.add(i);return Array.from(e).sort()});skeletonItems=Array.from({length:6},(e,t)=>t);statusFilters=[{key:"all",label:"All"},{key:"serving",label:"Serving"},{key:"errors",label:"Errors"},{key:"stopped",label:"Stopped"}];filtered=I(()=>{let e=this.query().trim().toLowerCase(),t=this.status(),i=this.workspace(),a=this.selectedTags();return this.api.apps().filter(l=>{if(i&&l.workspaceLabel!==i||t==="serving"&&l.status!=="serving"||t==="errors"&&l.status!=="error"&&l.errorCount===0||t==="stopped"&&l.status!=="stopped")return!1;if(a.size){let y=l.tags??[];for(let b of a)if(!y.includes(b))return!1}return!(e&&![l.name,l.workspaceLabel??"",...l.tags??[]].join(" ").toLowerCase().includes(e))})});constructor(){this.view.set(localStorage.getItem(_t)==="list"?"list":"cards"),this.workspace.set(localStorage.getItem(ut));let e=(localStorage.getItem(Q)??"").split(",").map(t=>t.trim()).filter(Boolean);e.length&&this.selectedTags.set(new Set(e)),at(()=>{let t=this.filtered().length;this.focusedIndex()>=t&&this.focusedIndex.set(Math.max(0,t-1))}),this.bindWindow("daimon:toggle-density",()=>this.setView(this.view()==="cards"?"list":"cards")),this.bindWindow("daimon:focus-filter",()=>queueMicrotask(()=>this.searchInput?.nativeElement.focus())),this.bindWindow("daimon:workspace",t=>{let i=t.detail;this.workspace.set(i??null)}),this.bindWindow("daimon:key",t=>this.onKey(t.detail))}async ngAfterViewInit(){this.api.ready()||await this.api.refresh()}onStorage(e){e.key===ut&&this.workspace.set(e.newValue)}bindWindow(e,t){window.addEventListener(e,t),this.destroyRef.onDestroy(()=>window.removeEventListener(e,t))}setView(e){this.view.set(e),localStorage.setItem(_t,e)}setStatus(e){this.status.set(e),this.focusedIndex.set(0)}isTagSelected(e){return this.selectedTags().has(e)}toggleTag(e){let t=new Set(this.selectedTags());t.has(e)?t.delete(e):t.add(e),this.selectedTags.set(t),this.persistTags(t),this.focusedIndex.set(0)}clearTags(){this.selectedTags.set(new Set),this.persistTags(new Set),this.focusedIndex.set(0)}persistTags(e){e.size?localStorage.setItem(Q,Array.from(e).join(",")):localStorage.removeItem(Q)}onQuery(e){this.query.set(e),this.focusedIndex.set(0)}open(e){this.router.navigate(["/apps",e])}countFor(e){return this.api.apps().filter(t=>e==="all"?!0:e==="serving"?t.status==="serving":e==="errors"?t.status==="error"||t.errorCount>0:e==="stopped"?t.status==="stopped":!1).length}async act(e,t){if(!this.busyMap()[e]?.[t]){this.setBusy(e,t,!0);try{t==="start"?await this.api.startApp(e):t==="stop"?await this.api.stopApp(e):await this.api.restartApp(e)}catch(i){this.snack.open(`${t} ${e} failed: ${i?.message??"error"}`,"Dismiss",{duration:4e3})}finally{this.setBusy(e,t,!1)}}}setBusy(e,t,i){this.busyMap.update(a=>$(R({},a),{[e]:$(R({},a[e]??{}),{[t]:i})}))}onKey(e){let t=this.filtered();if(!t.length)return;let i=Math.max(0,Math.min(this.focusedIndex(),t.length-1));if(e==="j")this.focusedIndex.set((i+1)%t.length);else if(e==="k")this.focusedIndex.set((i-1+t.length)%t.length);else if(e==="s")this.act(t[i].name,"start");else if(e==="x")this.act(t[i].name,"stop");else if(e==="r"){let a=t[i].name;this.snack.open(`Restart ${a}? Press R again or click confirm.`,"Confirm",{duration:4e3}).onAction().subscribe(()=>{this.act(a,"restart")})}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=T({type:n,selectors:[["dm-apps-list"]],viewQuery:function(t,i){if(t&1&&nt(Wt,5),t&2){let a;it(a=ot())&&(i.searchInput=a.first)}},hostBindings:function(t,i){t&1&&g("storage",function(l){return i.onStorage(l)},tt)},decls:33,vars:12,consts:[["searchInput",""],[1,"dm-page"],[1,"dm-overview"],[1,"dm-page-header"],[1,"dm-page-sub"],[1,"dm-header-actions"],["role","group","aria-label","View mode",1,"dm-toggle"],["type","button","matTooltip","Cards (.)","aria-label","Cards view",3,"click"],[1,"material-symbols-outlined"],["type","button","matTooltip","Dense list (.)","aria-label","List view",3,"click"],[1,"dm-filterbar"],[1,"dm-search"],[1,"material-symbols-outlined","dm-search-icon"],["type","search","placeholder","Filter apps by name, tag, workspace\u2026","aria-label","Filter apps",3,"input","value"],["type","button","aria-label","Clear",1,"dm-search-clear"],["role","tablist","aria-label","Status filter",1,"dm-chips"],["type","button","role","tab",1,"dm-chip",3,"active"],["role","group","aria-label","Tag filter",1,"dm-chips","dm-tag-row"],[1,"dm-grid-sk"],["icon","rocket_launch","title","No apps discovered yet","hint","Run daimon init --auto in your workspace to discover apps, or run /discover. The doctor page can help diagnose missing apps."],["icon","search_off","title","No matches","hint","No apps match the current filters. Clear them or try a different query."],[3,"items","focusedIndex","busy"],[1,"dm-totals-row"],[1,"dm-total"],[1,"dm-total-num"],[1,"dm-total-label"],[1,"dm-total","dm-total-serving"],[1,"dm-total","dm-total-error"],[1,"dm-attention"],[1,"dm-att-title"],[1,"dm-att-list"],[1,"dm-att-row",3,"routerLink"],[1,"dm-att-meta"],[1,"dm-att-where"],[1,"dm-att-code"],["type","button","aria-label","Clear",1,"dm-search-clear",3,"click"],["type","button","role","tab",1,"dm-chip",3,"click"],[1,"dm-chip-count"],["type","button",1,"dm-chip",3,"active"],["type","button","aria-label","Clear tag filter",1,"dm-chip","dm-chip-clear"],["type","button",1,"dm-chip",3,"click"],["type","button","aria-label","Clear tag filter",1,"dm-chip","dm-chip-clear",3,"click"],[1,"dm-card-sk"],[1,"dm-sk-accent"],[1,"dm-sk-body"],["width","60%","height","1.25rem"],["width","40%","height",".875rem"],["width","80%","height",".875rem"],[1,"dm-empty-actions"],["routerLink","/doctor",1,"dm-link-btn"],[3,"open","focus","act","items","focusedIndex","busy"]],template:function(t,i){if(t&1){let a=v();o(0,"div",1),_(1,Jt,24,8,"section",2),o(2,"header",3)(3,"div")(4,"h1"),c(5,"Apps"),r(),o(6,"div",4),c(7),_(8,Xt,3,1),r()(),o(9,"div",5)(10,"div",6)(11,"button",7),g("click",function(){return d(a),m(i.setView("cards"))}),o(12,"span",8),c(13,"grid_view"),r()(),o(14,"button",9),g("click",function(){return d(a),m(i.setView("list"))}),o(15,"span",8),c(16,"view_list"),r()()()()(),o(17,"div",10)(18,"div",11)(19,"span",12),c(20,"search"),r(),o(21,"input",13,0),g("input",function(y){return d(a),m(i.onQuery(y.target.value))}),r(),_(23,Zt,3,0,"button",14),r(),o(24,"div",15),h(25,te,4,5,"button",16,qt),r(),_(27,ie,4,1,"div",17),r(),_(28,re,3,0,"div",18)(29,ae,6,0,"dm-empty",19)(30,se,1,0,"dm-empty",20)(31,le,1,3,"dm-apps-cards",21)(32,ce,1,3,"dm-apps-list-view",21),r()}if(t&2){let a;s(),u((a=i.api.overview())?1:-1,a),s(6),A(" ",i.filtered().length," of ",i.api.apps().length," visible "),s(),u(i.workspace()?8:-1),s(3),k("active",i.view()==="cards"),s(3),k("active",i.view()==="list"),s(7),x("value",i.query()),s(2),u(i.query()?23:-1),s(2),M(i.statusFilters),s(2),u(i.allTags().length?27:-1),s(),u(i.api.ready()?i.api.apps().length===0?29:i.filtered().length===0?30:i.view()==="cards"?31:32:28)}},dependencies:[lt,ct,F,L,dt,mt,B,H,Y],styles:["[_nghost-%COMP%]{display:block}.dm-page[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem}.dm-overview[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(280px,1fr) minmax(0,2fr);gap:1rem;padding:1rem 1.25rem;border-radius:14px;background:var(--mat-sys-surface-container-low);border:1px solid var(--mat-sys-outline-variant)}@media(max-width:760px){.dm-overview[_ngcontent-%COMP%]{grid-template-columns:1fr}}.dm-totals-row[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.75rem}.dm-total[_ngcontent-%COMP%]{display:flex;flex-direction:column;padding:.5rem .875rem;border-radius:10px;background:var(--mat-sys-surface-container);min-width:70px}.dm-total-num[_ngcontent-%COMP%]{font:600 1.5rem/1.75rem Roboto;color:var(--mat-sys-on-surface)}.dm-total-label[_ngcontent-%COMP%]{font:500 .6875rem/1rem Roboto;text-transform:uppercase;letter-spacing:.04rem;color:var(--mat-sys-on-surface-variant)}.dm-total-serving[_ngcontent-%COMP%] .dm-total-num[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.dm-total-error[_ngcontent-%COMP%] .dm-total-num[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.dm-total-error.dm-zero[_ngcontent-%COMP%] .dm-total-num[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.dm-attention[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem;min-width:0}.dm-att-title[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;font:500 .8125rem/1.25rem Roboto;color:var(--mat-sys-error)}.dm-att-title[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:18px}.dm-att-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem}.dm-att-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;min-width:0;padding:.375rem .625rem;border-radius:8px;text-decoration:none;color:var(--mat-sys-on-surface);background:var(--mat-sys-surface-container);border-left:3px solid var(--mat-sys-error)}.dm-att-row[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high)}.dm-att-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-weight:500;font-size:.875rem}.dm-att-meta[_ngcontent-%COMP%]{font-size:.75rem;color:var(--mat-sys-on-surface-variant);white-space:nowrap}.dm-att-where[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.dm-att-code[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);margin-left:.25rem}.dm-page-header[_ngcontent-%COMP%]{display:flex;align-items:flex-end;justify-content:space-between;gap:1rem}.dm-page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;font:400 1.5rem/2rem Roboto}.dm-page-sub[_ngcontent-%COMP%]{font:400 .8125rem/1.25rem Roboto;color:var(--mat-sys-on-surface-variant);margin-top:.25rem;display:flex;gap:.25rem;flex-wrap:wrap}.dm-header-actions[_ngcontent-%COMP%]{display:flex;gap:.5rem}.dm-toggle[_ngcontent-%COMP%], .dm-chips[_ngcontent-%COMP%]{display:inline-flex;padding:2px;border-radius:10px;background:var(--mat-sys-surface-container);border:1px solid var(--mat-sys-outline-variant)}.dm-toggle[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .dm-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;padding:5px 10px;border-radius:8px;background:transparent;border:0;color:var(--mat-sys-on-surface-variant);cursor:pointer;font:500 .8125rem/1rem Roboto}.dm-toggle[_ngcontent-%COMP%] button[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:18px}.dm-toggle[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover, .dm-chip[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface)}.dm-toggle[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%], .dm-chip.active[_ngcontent-%COMP%]{background:var(--mat-sys-surface);color:var(--mat-sys-primary)}.dm-toggle[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%]{box-shadow:var(--mat-sys-level1)}.dm-chip-count[_ngcontent-%COMP%]{font:500 .6875rem/1rem var(--dm-mono);padding:0 5px;border-radius:999px;background:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface-variant)}.dm-chip.active[_ngcontent-%COMP%] .dm-chip-count[_ngcontent-%COMP%]{background:color-mix(in oklch,var(--mat-sys-primary) 16%,transparent);color:var(--mat-sys-primary)}.dm-filterbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.dm-search[_ngcontent-%COMP%]{position:relative;flex:1;min-width:220px;display:inline-flex;align-items:center;background:var(--mat-sys-surface-container);border:1px solid var(--mat-sys-outline-variant);border-radius:10px}.dm-search[_ngcontent-%COMP%]:focus-within{border-color:var(--mat-sys-primary)}.dm-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{flex:1;border:0;outline:0;background:transparent;padding:8px 36px;font:400 .875rem/1.25rem Roboto;color:var(--mat-sys-on-surface)}.dm-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder{color:var(--mat-sys-on-surface-variant)}.dm-search-icon[_ngcontent-%COMP%]{position:absolute;left:10px;pointer-events:none;font-size:18px;color:var(--mat-sys-on-surface-variant)}.dm-search-clear[_ngcontent-%COMP%]{position:absolute;right:6px;background:transparent;border:0;cursor:pointer;color:var(--mat-sys-on-surface-variant);width:24px;height:24px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center}.dm-search-clear[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high)}.dm-search-clear[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:16px}.dm-grid-sk[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem}.dm-card-sk[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container-low);border:1px solid var(--mat-sys-outline-variant);border-radius:14px;overflow:hidden}.dm-sk-accent[_ngcontent-%COMP%]{height:4px;background:var(--mat-sys-surface-container)}.dm-sk-body[_ngcontent-%COMP%]{padding:1rem;display:flex;flex-direction:column;gap:.5rem}.dm-empty-actions[_ngcontent-%COMP%]{margin-top:.75rem}.dm-link-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;padding:6px 14px;border-radius:10px;background:var(--mat-sys-primary);color:var(--mat-sys-on-primary);text-decoration:none;font:500 .875rem/1.25rem Roboto}.dm-link-btn[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:18px}.dm-tag-row[_ngcontent-%COMP%]{flex-wrap:wrap;gap:4px;max-width:100%}.dm-chip-clear[_ngcontent-%COMP%]{padding:5px 6px;color:var(--mat-sys-on-surface-variant)}.dm-chip-clear[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:16px}"],changeDetection:0})};export{H as AppsCardsViewComponent,gt as AppsListComponent,Y as AppsListViewComponent};
@@ -1,2 +0,0 @@
1
- import{d as ge}from"./chunk-ZEO5YLWG.js";import{a as re,b as ae,c as le,d as se,e as me,g as ce,h as de,k as pe,l as ue}from"./chunk-YA4AZONZ.js";import"./chunk-P5IU57TV.js";import"./chunk-NDSAQ2HK.js";import{b as X,f as G,h as K,j as Y}from"./chunk-YYAZGY5M.js";import"./chunk-PJPGLT4T.js";import{b as Z,c as ee,d as te}from"./chunk-RIDV4B55.js";import"./chunk-OHX55ZU4.js";import{b as ne,d as ie,e as oe}from"./chunk-SR5JAOLW.js";import{a as J,b as U}from"./chunk-XXIJQBCQ.js";import"./chunk-YNQPX5G6.js";import{a as z,e as H,f as Q,h as q}from"./chunk-IQZZO5IM.js";import"./chunk-KLH6B22T.js";import{b as B}from"./chunk-5PAHWCG5.js";import{h as $,i as j,j as W}from"./chunk-Q3N4MMWW.js";import{h as A}from"./chunk-Y6B6X4Y6.js";import{$b as I,Db as V,Eb as g,Fb as _,Ib as O,Jb as R,Kb as f,Lb as a,Mb as r,Nb as h,Sb as x,Ub as u,Va as T,Wb as c,_a as l,_b as N,ac as D,ea as S,gc as M,ic as s,ja as d,jc as y,ka as p,kc as b,lc as k,pb as E,ta as C,ub as L,xc as v,yc as F,za as P}from"./chunk-K43KW4K2.js";var xe=["viewport"],Ce=(i,t)=>t.name;function he(i,t){if(i&1&&(a(0,"span",7),s(1,"\xB7"),r(),a(2,"dm-mono")(3,"span",8),s(4),r()(),h(5,"dm-status-pill",9)),i&2){let e=t;l(4),y(e.name),l(),f("status",e.status)("health",e.health)}}function ve(i,t){if(i&1&&(a(0,"span",7),s(1,"\xB7"),r(),a(2,"span"),s(3),r()),i&2){let e=c();l(3),k("",e.filtered().length," / ",e.lines().length," lines")}}function ye(i,t){if(i&1){let e=x();a(0,"div",5)(1,"button",10),u("click",function(){d(e);let o=c();return p(o.togglePause())}),a(2,"mat-icon"),s(3),r(),s(4),r(),a(5,"button",11),u("click",function(){d(e);let o=c();return p(o.copyAll())}),a(6,"mat-icon"),s(7,"content_copy"),r(),s(8," Copy "),r(),a(9,"button",12),u("click",function(){d(e);let o=c();return p(o.clear())}),a(10,"mat-icon"),s(11,"delete_sweep"),r(),s(12," Clear "),r()()}if(i&2){let e=c();l(),f("matTooltip",e.paused()?"Resume":"Pause"),l(2),y(e.paused()?"play_arrow":"pause"),l(),b(" ",e.paused()?"Resume":"Pause"," ")}}function be(i,t){i&1&&h(0,"dm-empty",13)}function we(i,t){if(i&1&&(a(0,"mat-option",16),s(1),r()),i&2){let e=t.$implicit;f("value",e.name),l(),k("",e.name," (",e.status,")")}}function Se(i,t){if(i&1){let e=x();a(0,"mat-form-field",14)(1,"mat-label"),s(2,"Application"),r(),a(3,"mat-select",15),u("selectionChange",function(o){d(e);let m=c(2);return p(m.goto(o.value))}),O(4,we,2,3,"mat-option",16,Ce),r()()}if(i&2){let e=c(2);l(4),R(e.api.apps())}}function Me(i,t){if(i&1&&(a(0,"div",6)(1,"h3"),s(2,"Pick an app to tail"),r(),g(3,be,1,0,"dm-empty",13)(4,Se,6,0,"mat-form-field",14),r()),i&2){let e=c();l(3),_(e.api.apps().length===0?3:4)}}function ke(i,t){if(i&1){let e=x();a(0,"button",27),u("click",function(){d(e);let o=c(2);return p(o.filter.set(""))}),a(1,"mat-icon"),s(2,"close"),r()()}}function Pe(i,t){i&1&&(a(0,"span",22)(1,"mat-icon"),s(2,"warning"),r(),s(3),r()),i&2&&(l(3),b(" ",t," "))}function Te(i,t){if(i&1){let e=x();a(0,"button",28),u("click",function(){d(e);let o=c(2);return p(o.jumpToLatest())}),a(1,"mat-icon"),s(2,"arrow_downward"),r(),s(3," Jump to latest "),r()}}function Ee(i,t){if(i&1){let e=x();a(0,"button",30),u("click",function(){d(e);let o=c(3);return p(o.startApp())}),a(1,"mat-icon"),s(2,"play_arrow"),r(),s(3," Start app "),r()}}function Le(i,t){if(i&1&&(a(0,"dm-empty",24),g(1,Ee,4,0,"button",29),r()),i&2){let e,n=c(2);l(),_(((e=n.currentApp())==null?null:e.status)==="stopped"?1:-1)}}function Ve(i,t){i&1&&h(0,"dm-empty",25)}function Oe(i,t){if(i&1&&(a(0,"div",33)(1,"span",34),s(2),r(),h(3,"span",35),r()),i&2){let e=t.$implicit,n=c(3);V("data-sev",e.severity),l(2),y(n.fmtTs(e.ts)),l(),f("innerHTML",n.render(e.line),T)}}function Re(i,t){if(i&1){let e=x();a(0,"cdk-virtual-scroll-viewport",31,0),u("scrolledIndexChange",function(){d(e);let o=c(2);return p(o.onScroll())}),L(2,Oe,4,3,"div",32),r()}if(i&2){let e=c(2);l(2),f("cdkVirtualForOf",e.filtered())("cdkVirtualForTrackBy",e.trackTs)("cdkVirtualForTemplateCacheSize",0)}}function Ne(i,t){if(i&1){let e=x();a(0,"div",17)(1,"mat-form-field",18)(2,"mat-label"),s(3,"Filter"),r(),a(4,"input",19),u("ngModelChange",function(o){d(e);let m=c();return p(m.filter.set(o))}),r(),g(5,ke,3,0,"button",20),r(),a(6,"button",10),u("click",function(){d(e);let o=c();return p(o.useRegex.set(!o.useRegex()))}),a(7,"mat-icon"),s(8),r(),s(9," .* regex "),r(),a(10,"button",21),u("click",function(){d(e);let o=c();return p(o.jumpToNextError())}),a(11,"mat-icon"),s(12,"error"),r(),s(13," Next error "),r(),g(14,Pe,4,1,"span",22),g(15,Te,4,0,"button",23),r(),g(16,Le,2,1,"dm-empty",24)(17,Ve,1,0,"dm-empty",25)(18,Re,3,3,"cdk-virtual-scroll-viewport",26)}if(i&2){let e,n=c();l(4),f("ngModel",n.filter())("placeholder",n.useRegex()?"regex (case-insensitive)":"case-insensitive substring"),l(),_(n.filter()?5:-1),l(),M("dm-on",n.useRegex()),f("matTooltip",n.useRegex()?"Regex on \u2014 click to use substring":"Substring \u2014 click to use regex"),l(2),y(n.useRegex()?"check_circle":"pattern"),l(2),f("disabled",!n.hasNextError()),l(4),_((e=n.regexError())?14:-1,e),l(),_(n.stuckToBottom()?-1:15),l(),_(n.filtered().length===0&&n.lines().length===0?16:n.filtered().length===0?17:18)}}var w=1e3,Ie=/\x1b\[[0-9;]*m/g;function De(i){return/\berror:|\bERROR\b|\bError\b/.test(i)?"error":/\bWARN\b|\bWarning\b/.test(i)?"warn":"info"}function _e(i){let t=new Date(i),e=String(t.getHours()).padStart(2,"0"),n=String(t.getMinutes()).padStart(2,"0"),o=String(t.getSeconds()).padStart(2,"0"),m=String(t.getMilliseconds()).padStart(3,"0");return`${e}:${n}:${o}.${m}`}function Fe(i){return i.replace(/[&<>"']/g,t=>t==="&"?"&amp;":t==="<"?"&lt;":t===">"?"&gt;":t==='"'?"&quot;":"&#39;")}function Ae(i){return i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var fe=class i{name="";api=S(W);router=S(B);viewport;lines=C([]);filter=C("");useRegex=C(!1);paused=C(!1);stuckToBottom=C(!0);buffered=[];stop;rafScheduled=!1;currentApp=v(()=>this.name?this.api.byName(this.name):void 0);filterState=v(()=>{let t=this.filter();if(!t)return{pred:null,error:null};if(!this.useRegex()){let e=t.toLowerCase();return{pred:n=>n.toLowerCase().includes(e),error:null}}try{let e=new RegExp(t,"i");return{pred:n=>e.test(n),error:null}}catch(e){return{pred:null,error:e?.message??"invalid regex"}}});regexError=v(()=>this.filterState().error);filtered=v(()=>{let{pred:t}=this.filterState(),e=this.lines();return t?e.filter(n=>t(n.line)):e});hasNextError=v(()=>this.filtered().some(t=>t.severity==="error"));constructor(){F(()=>{this.filtered(),this.stuckToBottom()&&this.scrollSoon()})}ngOnChanges(t){"name"in t&&(this.teardown(),this.lines.set([]),this.buffered=[],this.filter.set(""),this.stuckToBottom.set(!0),this.name&&this.openStream())}ngOnDestroy(){this.teardown()}openStream(){let t=this.name;this.stop=this.api.openLogStream(t,({ts:e,line:n})=>{let o=(n??"").replace(Ie,""),m={ts:e,line:o,severity:De(o)};if(this.paused()){this.buffered.push(m),this.buffered.length>w&&this.buffered.splice(0,this.buffered.length-w);return}this.append([m])})}append(t){this.lines.update(e=>{let n=e.concat(t);return n.length>w?n.slice(n.length-w):n})}teardown(){this.stop?.(),this.stop=void 0}togglePause(){let t=!this.paused();if(this.paused.set(t),!t&&this.buffered.length){let e=this.buffered;this.buffered=[],this.append(e)}}clear(){this.lines.set([]),this.buffered=[]}async copyAll(){let t=this.lines().map(e=>`${_e(e.ts)} ${e.line}`).join(`
2
- `);try{await navigator.clipboard.writeText(t)}catch{}}onScroll(){let t=this.viewport;if(!t)return;let e=t.getRenderedRange().end,n=t.getDataLength();this.stuckToBottom.set(n===0||e>=n-1)}jumpToLatest(){this.stuckToBottom.set(!0),this.scrollSoon()}jumpToNextError(){let t=this.viewport;if(!t)return;let e=this.filtered();if(e.length===0)return;let n=Math.max(0,t.getRenderedRange().end),o=-1;for(let m=n;m<e.length;m++)if(e[m].severity==="error"){o=m;break}if(o===-1){for(let m=0;m<Math.min(n,e.length);m++)if(e[m].severity==="error"){o=m;break}}o!==-1&&(this.stuckToBottom.set(!1),t.scrollToIndex(o,"smooth"))}scrollSoon(){this.rafScheduled||(this.rafScheduled=!0,requestAnimationFrame(()=>{this.rafScheduled=!1;let t=this.viewport;if(!t)return;let e=t.getDataLength();e>0&&t.scrollToIndex(e,"auto")}))}goto(t){this.router.navigateByUrl(`/logs/${encodeURIComponent(t)}`)}startApp(){this.name&&this.api.startApp(this.name)}fmtTs(t){return _e(t)}trackTs=(t,e)=>e.ts+":"+e.line.length;render(t){let e=this.filter(),n=Fe(t);if(!e)return n;try{let o=this.useRegex()?new RegExp(e,"gi"):new RegExp(Ae(e),"gi");return n.replace(o,m=>`<mark>${m}</mark>`)}catch{return n}}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=E({type:i,selectors:[["dm-logs-page"]],viewQuery:function(e,n){if(e&1&&N(xe,5),e&2){let o;I(o=D())&&(n.viewport=o.first)}},inputs:{name:"name"},features:[P],decls:13,vars:7,consts:[["viewport",""],[1,"dm-page-header"],[1,"dm-page-sub"],[1,"dm-conn"],[1,"dm-conn-dot"],[1,"dm-actions"],[1,"dm-picker"],[1,"dm-sep"],[1,"dm-app"],[3,"status","health"],["mat-stroked-button","",3,"click","matTooltip"],["mat-stroked-button","","matTooltip","Copy buffer",3,"click"],["mat-stroked-button","","matTooltip","Clear buffer",3,"click"],["icon","apps","title","No apps registered","hint","Add apps to your daimon config to see logs"],["appearance","outline",1,"dm-picker-field"],[3,"selectionChange"],[3,"value"],[1,"dm-toolbar"],["appearance","outline",1,"dm-filter"],["matInput","",3,"ngModelChange","ngModel","placeholder"],["matSuffix","","mat-icon-button",""],["mat-stroked-button","","matTooltip","Jump to next error",3,"click","disabled"],["matTooltip","Invalid regex",1,"dm-rxerr"],["mat-flat-button","","color","primary",1,"dm-jump"],["icon","terminal","title","No logs yet","hint","Start the app or wait for output"],["icon","filter_alt_off","title","No matches","hint","Adjust your filter to see lines"],["itemSize","22",1,"dm-viewport"],["matSuffix","","mat-icon-button","",3,"click"],["mat-flat-button","","color","primary",1,"dm-jump",3,"click"],["mat-flat-button","","color","primary"],["mat-flat-button","","color","primary",3,"click"],["itemSize","22",1,"dm-viewport",3,"scrolledIndexChange"],["class","dm-row",4,"cdkVirtualFor","cdkVirtualForOf","cdkVirtualForTrackBy","cdkVirtualForTemplateCacheSize"],[1,"dm-row"],[1,"dm-ts"],[1,"dm-line",3,"innerHTML"]],template:function(e,n){if(e&1&&(a(0,"div",1)(1,"div")(2,"h1"),s(3," Logs "),g(4,he,6,3),r(),a(5,"div",2)(6,"span",3),h(7,"span",4),s(8),r(),g(9,ve,4,2),r()(),g(10,ye,13,3,"div",5),r(),g(11,Me,5,1,"div",6)(12,Ne,19,11)),e&2){let o;l(4),_((o=n.currentApp())?4:-1,o),l(2),M("dm-conn-on",n.api.connected()),l(2),b(" ",n.api.connected()?"stream connected":"disconnected"," "),l(),_(n.name?9:-1),l(),_(n.name?10:-1),l(),_(n.name?12:11)}},dependencies:[A,Y,X,G,K,q,z,Q,H,se,le,re,ae,de,ce,me,ue,pe,te,ee,Z,j,$,ge,U,J,ne,ie,oe],styles:["[_nghost-%COMP%]{display:block}.dm-page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}.dm-sep[_ngcontent-%COMP%]{color:var(--mat-sys-outline);margin:0 .15rem}.dm-app[_ngcontent-%COMP%]{color:var(--mat-sys-primary);font-weight:500}.dm-actions[_ngcontent-%COMP%]{display:flex;gap:.5rem;align-items:flex-end}.dm-conn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.35rem}.dm-conn-dot[_ngcontent-%COMP%]{width:7px;height:7px;border-radius:999px;background:var(--mat-sys-outline)}.dm-conn-on[_ngcontent-%COMP%] .dm-conn-dot[_ngcontent-%COMP%]{background:var(--mat-sys-primary);box-shadow:0 0 0 3px color-mix(in oklch,var(--mat-sys-primary) 24%,transparent)}.dm-picker[_ngcontent-%COMP%]{max-width:32rem;margin:2rem auto;text-align:center}.dm-picker[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-weight:400;color:var(--mat-sys-on-surface-variant)}.dm-picker-field[_ngcontent-%COMP%]{width:100%}.dm-toolbar[_ngcontent-%COMP%]{display:flex;gap:1rem;align-items:center;margin-bottom:.75rem}.dm-filter[_ngcontent-%COMP%]{flex:1;max-width:28rem}.dm-jump[_ngcontent-%COMP%]{margin-left:auto}button.dm-on[_ngcontent-%COMP%]{color:var(--mat-sys-primary);border-color:var(--mat-sys-primary)}.dm-rxerr[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;color:var(--mat-sys-error);font:500 .8125rem/1rem Roboto}.dm-rxerr[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}.dm-viewport[_ngcontent-%COMP%]{height:calc(100vh - 13rem);min-height:24rem;border:1px solid var(--mat-sys-outline-variant);border-radius:10px;background:var(--mat-sys-surface-container-lowest);contain:strict}.dm-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;height:22px;padding:0 .75rem;font-family:var(--dm-mono);font-size:.8125rem;line-height:22px;white-space:pre;border-left:3px solid transparent;color:var(--mat-sys-on-surface)}.dm-row[data-sev=error][_ngcontent-%COMP%]{border-left-color:var(--mat-sys-error);background:color-mix(in oklch,var(--mat-sys-error) 6%,transparent)}.dm-row[data-sev=warn][_ngcontent-%COMP%]{border-left-color:var(--mat-sys-tertiary);background:color-mix(in oklch,var(--mat-sys-tertiary) 5%,transparent)}.dm-ts[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);flex:0 0 auto}.dm-line[_ngcontent-%COMP%]{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis}.dm-line[_ngcontent-%COMP%] mark{background:color-mix(in oklch,var(--mat-sys-tertiary) 35%,transparent);color:var(--mat-sys-on-tertiary-container);padding:0 2px;border-radius:3px}"],changeDetection:0})};export{fe as LogsPageComponent};
@@ -1 +0,0 @@
1
- import{a as te,b as ne,c as ie,d as ae,e as oe,g as re,h as se,k as le,l as me}from"./chunk-YA4AZONZ.js";import"./chunk-P5IU57TV.js";import"./chunk-NDSAQ2HK.js";import{b as Q,f as K,h as j,j as z}from"./chunk-YYAZGY5M.js";import"./chunk-PJPGLT4T.js";import{b as G,c as J,d as W}from"./chunk-RIDV4B55.js";import"./chunk-OHX55ZU4.js";import{b as X,c as Y,d as Z,e as ee}from"./chunk-SR5JAOLW.js";import{a as $,b as U}from"./chunk-XXIJQBCQ.js";import"./chunk-YNQPX5G6.js";import"./chunk-IQZZO5IM.js";import"./chunk-KLH6B22T.js";import{c as L}from"./chunk-5PAHWCG5.js";import{c as B,h as A,i as V,j as H}from"./chunk-Q3N4MMWW.js";import{h as N}from"./chunk-Y6B6X4Y6.js";import{Db as x,Eb as g,Fb as f,Gb as I,Hb as O,Ib as v,Jb as y,Kb as u,Lb as o,Mb as a,Nb as b,Sb as M,Ub as h,Wb as d,_a as s,ea as w,gc as T,ic as r,ja as _,jc as p,ka as C,kc as k,pb as q,s as E,sc as D,ta as c,xc as P,yc as F,za as R}from"./chunk-K43KW4K2.js";var ue=n=>["/apps",n],he=(n,t)=>t.value;function ge(n,t){if(n&1&&b(0,"dm-status-pill",4),n&2){let e=t;u("status",e.status)("health",e.health)}}function fe(n,t){if(n&1&&(o(0,"span"),r(1,"Last refreshed "),o(2,"dm-mono"),r(3),a()()),n&2){let e=d();s(3),p(e.lastRefreshedLabel())}}function _e(n,t){n&1&&(o(0,"span"),r(1,"Loading\u2026"),a())}function Ce(n,t){n&1&&(o(0,"span",2),r(1,"\xB7"),a(),o(2,"span",10),r(3,"paused"),a())}function xe(n,t){n&1&&(o(0,"dm-empty",9)(1,"a",11),r(2,"Go to apps"),a()())}function ve(n,t){if(n&1&&(o(0,"mat-option",15),r(1),a()),n&2){let e=t.$implicit;u("value",e.value),s(),p(e.label)}}function ye(n,t){if(n&1){let e=M();o(0,"button",26),h("click",function(){let l=_(e).$implicit,m=d(2);return C(m.toggleMethod(l))}),r(1),a()}if(n&2){let e=t.$implicit,i=d(2);T("dm-chip-active",i.methodFilter().has(e)),x("data-method",e),s(),k(" ",e," ")}}function be(n,t){if(n&1){let e=M();o(0,"button",26),h("click",function(){let l=_(e).$implicit,m=d(2);return C(m.toggleStatus(l))}),r(1),a()}if(n&2){let e=t.$implicit,i=d(2);T("dm-chip-active",i.statusFilter().has(e)),x("data-bucket",e),s(),k(" ",e," ")}}function Me(n,t){if(n&1){let e=M();o(0,"button",27),h("click",function(){_(e);let l=d(2);return C(l.pathQuery.set(""))}),o(1,"mat-icon"),r(2,"close"),a()()}}function Pe(n,t){n&1&&(o(0,"div",22),b(1,"dm-skeleton",28)(2,"dm-skeleton",28)(3,"dm-skeleton",28)(4,"dm-skeleton",28),a())}function Se(n,t){n&1&&b(0,"dm-empty",23)}function ke(n,t){n&1&&b(0,"dm-empty",24)}function we(n,t){if(n&1&&(o(0,"tr")(1,"td",30)(2,"dm-mono")(3,"span",35),r(4),a()()(),o(5,"td",31)(6,"dm-mono")(7,"span",36),r(8),a()()(),o(9,"td",32)(10,"dm-mono")(11,"span",37),r(12),a()()(),o(13,"td",33)(14,"dm-mono")(15,"span",38),r(16),a()()(),o(17,"td",34)(18,"dm-mono"),r(19),a()()()),n&2){let e=t.$implicit,i=d(3);s(3),u("matTooltip",i.absTs(e.ts)),s(),p(i.relTs(e.ts)),s(3),x("data-method",e.method),s(),p(e.method),s(3),x("data-bucket",i.bucketOf(e.status)),s(),p(e.status),s(3),u("title",e.path),s(),p(e.path),s(3),p(e.durationMs)}}function Oe(n,t){if(n&1&&(o(0,"div",25)(1,"table",29)(2,"thead")(3,"tr")(4,"th",30),r(5,"Time"),a(),o(6,"th",31),r(7,"Method"),a(),o(8,"th",32),r(9,"Status"),a(),o(10,"th",33),r(11,"Path"),a(),o(12,"th",34),r(13,"ms"),a()()(),o(14,"tbody"),v(15,we,20,9,"tr",null,I),a()()()),n&2){let e=d(2);s(15),y(e.filtered())}}function Te(n,t){if(n&1){let e=M();o(0,"div",12)(1,"mat-form-field",13)(2,"mat-label"),r(3,"Since"),a(),o(4,"mat-select",14),h("ngModelChange",function(l){_(e);let m=d();return C(m.since.set(l))}),v(5,ve,2,2,"mat-option",15,he),a()(),o(7,"div",16)(8,"span",17),r(9,"Methods"),a(),v(10,ye,2,4,"button",18,O),a(),o(12,"div",16)(13,"span",17),r(14,"Status"),a(),v(15,be,2,4,"button",18,O),a(),o(17,"mat-form-field",19)(18,"mat-label"),r(19,"Path contains"),a(),o(20,"input",20),h("ngModelChange",function(l){_(e);let m=d();return C(m.pathQuery.set(l))}),a(),g(21,Me,3,0,"button",21),a()(),g(22,Pe,5,0,"div",22)(23,Se,1,0,"dm-empty",23)(24,ke,1,0,"dm-empty",24)(25,Oe,17,0,"div",25)}if(n&2){let e=d();s(4),u("ngModel",e.since()),s(),y(e.sinceOptions),s(5),y(e.methods),s(5),y(e.statusBuckets),s(5),u("ngModel",e.pathQuery()),s(),f(e.pathQuery()?21:-1),s(),f(e.loading()&&e.rows().length===0?22:e.filtered().length===0&&e.rows().length===0?23:e.filtered().length===0?24:25)}}var Ee=["GET","POST","PUT","DELETE","PATCH"],Re=["2xx","3xx","4xx","5xx"],qe=[{value:"5m",label:"5m"},{value:"15m",label:"15m"},{value:"1h",label:"1h"},{value:"all",label:"All"}],Ie=5e3;function de(n,t){let e=Math.max(0,Math.floor((t-n)/1e3));if(e<1)return"just now";if(e<60)return`${e}s ago`;let i=Math.floor(e/60);if(i<60)return`${i}m ago`;let l=Math.floor(i/60);return l<24?`${l}h ago`:`${Math.floor(l/24)}d ago`}function ce(n){return n>=200&&n<300?"2xx":n>=300&&n<400?"3xx":n>=400&&n<500?"4xx":n>=500&&n<600?"5xx":null}var pe=class n{name="";api=w(H);http=w(B);methods=Ee;statusBuckets=Re;sinceOptions=qe;loading=c(!0);rows=c([]);since=c("5m");methodFilter=c(new Set);statusFilter=c(new Set);pathQuery=c("");paused=c(!1);lastRefreshed=c(null);tick=c(0);currentApp=P(()=>this.name?this.api.byName(this.name):void 0);unknownApp=P(()=>this.name?this.api.ready()?!this.api.byName(this.name):!1:!0);filtered=P(()=>{let t=this.rows(),e=this.methodFilter(),i=this.statusFilter(),l=this.pathQuery().trim().toLowerCase();return t.filter(m=>{if(e.size>0&&!e.has(m.method.toUpperCase()))return!1;if(i.size>0){let S=ce(m.status);if(!S||!i.has(S))return!1}return!(l&&!m.path.toLowerCase().includes(l))}).sort((m,S)=>S.ts-m.ts)});lastRefreshedLabel=P(()=>{this.tick();let t=this.lastRefreshed();return t?de(t,Date.now()):"\u2014"});refreshTimer;tickTimer;sinceFirst=!0;constructor(){F(()=>{let t=this.since();if(this.sinceFirst){this.sinceFirst=!1;return}this.refresh()})}ngOnInit(){this.refresh(),this.refreshTimer=setInterval(()=>{this.paused()||this.refresh(!0)},Ie),this.tickTimer=setInterval(()=>this.tick.update(t=>t+1),1e3)}ngOnChanges(t){"name"in t&&!t.name.firstChange&&(this.rows.set([]),this.refresh())}ngOnDestroy(){this.refreshTimer&&clearInterval(this.refreshTimer),this.tickTimer&&clearInterval(this.tickTimer)}togglePause(){this.paused.update(t=>!t)}toggleMethod(t){this.methodFilter.update(e=>{let i=new Set(e);return i.has(t)?i.delete(t):i.add(t),i})}toggleStatus(t){this.statusFilter.update(e=>{let i=new Set(e);return i.has(t)?i.delete(t):i.add(t),i})}async refresh(t=!1){if(this.name){t||this.loading.set(!0);try{let e=this.since(),i=e==="all"?"":`?since=${encodeURIComponent(e)}`,l=`/api/apps/${encodeURIComponent(this.name)}/requests${i}`,m=await E(this.http.get(l));this.rows.set(Array.isArray(m)?m:[]),this.lastRefreshed.set(Date.now())}catch{}finally{t||this.loading.set(!1)}}}relTs(t){return this.tick(),de(t,Date.now())}absTs(t){return new Date(t).toLocaleString()}bucketOf(t){return ce(t)}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=q({type:n,selectors:[["dm-requests-page"]],inputs:{name:"name"},features:[R],decls:29,vars:11,consts:[[1,"dm-page-header"],["matTooltip","Back to app",1,"dm-back",3,"routerLink"],[1,"dm-sep"],[1,"dm-app"],[3,"status","health"],[1,"dm-page-sub"],[1,"dm-header-actions"],["mat-stroked-button","",3,"click","matTooltip"],["mat-stroked-button","","matTooltip","Refresh now",3,"click"],["icon","search_off","title","Unknown app","hint","No app with that name. Head back to the apps list."],[1,"dm-paused"],["routerLink","/",1,"dm-empty-link"],[1,"dm-toolbar"],["appearance","outline",1,"dm-since"],[3,"ngModelChange","ngModel"],[3,"value"],[1,"dm-chip-group"],[1,"dm-chip-label"],[1,"dm-chip",3,"dm-chip-active"],["appearance","outline",1,"dm-path-filter"],["matInput","","placeholder","/api/...",3,"ngModelChange","ngModel"],["matSuffix","","mat-icon-button",""],[1,"dm-skel-rows"],["icon","hourglass_empty","title","No requests yet","hint","Either no traffic has hit the dev server, or requestLog.enabled is false in your config."],["icon","filter_alt_off","title","No matching requests","hint","Adjust filters to see more rows."],[1,"dm-table-wrap"],[1,"dm-chip",3,"click"],["matSuffix","","mat-icon-button","",3,"click"],["height","2rem"],[1,"dm-req-table"],[1,"dm-col-time"],[1,"dm-col-method"],[1,"dm-col-status"],[1,"dm-col-path"],[1,"dm-col-dur"],[3,"matTooltip"],[1,"dm-method"],[1,"dm-status"],[1,"dm-path",3,"title"]],template:function(e,i){if(e&1&&(o(0,"div",0)(1,"div")(2,"h1")(3,"a",1)(4,"mat-icon"),r(5,"arrow_back"),a()(),o(6,"span"),r(7,"Requests"),a(),o(8,"span",2),r(9,"\xB7"),a(),o(10,"dm-mono")(11,"span",3),r(12),a()(),g(13,ge,1,2,"dm-status-pill",4),a(),o(14,"div",5),g(15,fe,4,1,"span")(16,_e,2,0,"span"),g(17,Ce,4,0),a()(),o(18,"div",6)(19,"button",7),h("click",function(){return i.togglePause()}),o(20,"mat-icon"),r(21),a(),r(22),a(),o(23,"button",8),h("click",function(){return i.refresh()}),o(24,"mat-icon"),r(25,"refresh"),a(),r(26," Refresh "),a()()(),g(27,xe,3,0,"dm-empty",9)(28,Te,26,4)),e&2){let l;s(3),u("routerLink",D(9,ue,i.name)),s(9),p(i.name),s(),f((l=i.currentApp())?13:-1,l),s(2),f(i.lastRefreshed()?15:16),s(2),f(i.paused()?17:-1),s(2),u("matTooltip",i.paused()?"Resume auto-refresh":"Pause auto-refresh"),s(2),p(i.paused()?"play_arrow":"pause"),s(),k(" ",i.paused()?"Resume":"Pause"," "),s(5),f(i.unknownApp()?27:28)}},dependencies:[N,z,Q,K,j,L,ae,ie,te,ne,se,re,oe,me,le,W,J,G,V,A,U,$,X,Z,Y,ee],styles:['[_nghost-%COMP%]{display:block}.dm-page-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;flex-wrap:wrap}.dm-page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin:0}.dm-sep[_ngcontent-%COMP%]{color:var(--mat-sys-outline)}.dm-app[_ngcontent-%COMP%]{color:var(--mat-sys-primary);font-weight:500}.dm-back[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;color:var(--mat-sys-on-surface-variant);text-decoration:none;padding:4px;border-radius:8px}.dm-back[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container);color:var(--mat-sys-on-surface)}.dm-page-sub[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);margin-top:.25rem;font-size:.875rem}.dm-paused[_ngcontent-%COMP%]{color:var(--mat-sys-tertiary)}.dm-header-actions[_ngcontent-%COMP%]{display:flex;gap:.5rem}.dm-toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;margin:1rem 0}.dm-since[_ngcontent-%COMP%]{width:8rem}.dm-path-filter[_ngcontent-%COMP%]{flex:1;min-width:14rem}.dm-chip-group[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.35rem;flex-wrap:wrap}.dm-chip-label[_ngcontent-%COMP%]{font:500 .6875rem/1rem Roboto;text-transform:uppercase;letter-spacing:.04rem;color:var(--mat-sys-on-surface-variant);margin-right:.25rem}.dm-chip[_ngcontent-%COMP%]{font-family:Roboto Mono,ui-monospace,monospace;font-size:.75rem;padding:4px 10px;border-radius:999px;border:1px solid var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container);color:var(--mat-sys-on-surface-variant);cursor:pointer;letter-spacing:.04rem}.dm-chip[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface)}.dm-chip-active[_ngcontent-%COMP%]{background:color-mix(in oklch,var(--mat-sys-primary) 14%,transparent);border-color:color-mix(in oklch,var(--mat-sys-primary) 35%,transparent);color:var(--mat-sys-primary)}.dm-skel-rows[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.35rem}.dm-table-wrap[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-outline-variant);border-radius:12px;overflow:hidden;background:var(--mat-sys-surface-container-lowest)}.dm-req-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;table-layout:fixed}.dm-req-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{text-align:left;padding:8px 12px;font:500 .6875rem/1rem Roboto;text-transform:uppercase;letter-spacing:.04rem;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container);border-bottom:1px solid var(--mat-sys-outline-variant)}.dm-req-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:6px 12px;border-bottom:1px solid var(--mat-sys-outline-variant);font-size:.8125rem;height:32px;line-height:20px;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dm-req-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%]{border-bottom:none}.dm-req-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{background:color-mix(in oklch,var(--mat-sys-primary) 6%,transparent)}.dm-col-time[_ngcontent-%COMP%]{width:7rem}.dm-col-method[_ngcontent-%COMP%], .dm-col-status[_ngcontent-%COMP%]{width:5rem}.dm-col-path[_ngcontent-%COMP%]{width:auto}.dm-col-dur[_ngcontent-%COMP%]{width:5rem;text-align:right}.dm-method[data-method=GET][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.dm-method[data-method=POST][_ngcontent-%COMP%]{color:var(--mat-sys-tertiary)}.dm-method[data-method=DELETE][_ngcontent-%COMP%]{color:var(--mat-sys-error)}.dm-method[data-method=PUT][_ngcontent-%COMP%], .dm-method[data-method=PATCH][_ngcontent-%COMP%]{color:var(--mat-sys-secondary)}.dm-method[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.dm-status[data-bucket="2xx"][_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.dm-status[data-bucket="3xx"][_ngcontent-%COMP%]{color:var(--mat-sys-secondary)}.dm-status[data-bucket="4xx"][_ngcontent-%COMP%]{color:var(--mat-sys-tertiary)}.dm-status[data-bucket="5xx"][_ngcontent-%COMP%]{color:var(--mat-sys-error)}.dm-status[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.dm-path[_ngcontent-%COMP%]{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;color:var(--mat-sys-on-surface)}.dm-empty-link[_ngcontent-%COMP%]{color:var(--mat-sys-primary);text-decoration:none;margin-top:.5rem}.dm-empty-link[_ngcontent-%COMP%]:hover{text-decoration:underline}'],changeDetection:0})};export{pe as RequestsPageComponent};
@@ -1 +0,0 @@
1
- import{a as X,b as Y,c as Z,e as ee,f as te,g as ne}from"./chunk-7NRE3SNA.js";import{a as V,b as K}from"./chunk-CILFSVSP.js";import{a as Q,b as W}from"./chunk-25VLDASM.js";import{b as L,c as q,d as H}from"./chunk-RIDV4B55.js";import"./chunk-OHX55ZU4.js";import{c as U,d as G,e as J}from"./chunk-SR5JAOLW.js";import"./chunk-YNQPX5G6.js";import"./chunk-IQZZO5IM.js";import"./chunk-KLH6B22T.js";import{c as $}from"./chunk-5PAHWCG5.js";import{c as N,h as j,i as B,j as z}from"./chunk-Q3N4MMWW.js";import{P as A}from"./chunk-Y6B6X4Y6.js";import{Db as k,Eb as v,Fb as _,Hb as E,Ib as h,Jb as b,Kb as y,Lb as a,Mb as o,Nb as x,Sb as R,Ub as C,Wb as p,_a as d,aa as F,ea as M,ic as r,ja as D,jc as u,ka as O,kc as P,pb as S,qb as I,s as T,ta as g,xc as w}from"./chunk-K43KW4K2.js";var ie=(()=>{class n{static \u0275fac=function(i){return new(i||n)};static \u0275mod=I({type:n});static \u0275inj=F({imports:[A,A]})}return n})();var de=(n,e)=>e.name,se=(n,e)=>e.reason;function le(n,e){n&1&&(a(0,"div",7),x(1,"dm-skeleton",23)(2,"dm-skeleton",24)(3,"dm-skeleton",25),o())}function me(n,e){if(n&1&&(a(0,"div",26)(1,"span",27),r(2,"Connection"),o(),a(3,"span",28)(4,"span",29),x(5,"span",30),r(6),o()()(),a(7,"div",26)(8,"span",27),r(9,"Version"),o(),a(10,"span",28)(11,"dm-mono"),r(12),o()()(),a(13,"div",26)(14,"span",27),r(15,"API port"),o(),a(16,"span",28)(17,"dm-mono"),r(18),o()()(),a(19,"div",26)(20,"span",27),r(21,"Apps tracked"),o(),a(22,"span",28)(23,"dm-mono"),r(24),o()()()),n&2){let t=p();d(4),k("data-kind",t.api.connected()?"ok":"err"),d(2),P("",t.api.connected()?"connected":"disconnected"," "),d(6),u(t.daemonVersion()||"unknown"),d(6),u(t.daemonPort()||"-"),d(6),u(t.api.apps().length)}}function ce(n,e){n&1&&(a(0,"div",7),x(1,"dm-skeleton",31)(2,"dm-skeleton",25)(3,"dm-skeleton",32),o())}function pe(n,e){if(n&1&&(a(0,"dm-empty",8)(1,"dm-mono"),r(2,"daimon init --auto"),o()()),n&2){let t=p();y("title","No apps discovered")("hint",t.discovery().suggestion||"Run daimon init --auto in your workspace")}}function ue(n,e){if(n&1&&(a(0,"li")(1,"dm-mono"),r(2),o()()),n&2){let t=e.$implicit;d(2),u(t)}}function ge(n,e){if(n&1&&(a(0,"tr")(1,"td")(2,"dm-mono"),r(3),o()(),a(4,"td",37)(5,"dm-mono"),r(6),o()()()),n&2){let t=e.$implicit;d(3),u(t.reason),d(3),u(t.count)}}function fe(n,e){if(n&1&&(a(0,"div",33)(1,"div",27),r(2,"Rejected"),o(),a(3,"table",36)(4,"tbody"),h(5,ge,7,2,"tr",null,se),o()()()),n&2){let t=p(2);d(5),b(t.rejectedRows())}}function ve(n,e){if(n&1&&(a(0,"li")(1,"dm-mono"),r(2),o()()),n&2){let t=e.$implicit;d(2),u(t)}}function _e(n,e){if(n&1&&(a(0,"div",33)(1,"div",27),r(2,"Warnings"),o(),a(3,"ul",38),h(4,ve,3,1,"li",null,E),o()()),n&2){let t=p(2);d(4),b(t.discovery().warnings)}}function xe(n,e){if(n&1&&(a(0,"div",35),r(1),o()),n&2){let t=p(2);d(),u(t.discovery().suggestion)}}function ye(n,e){if(n&1&&(a(0,"div",26)(1,"span",27),r(2,"Apps found"),o(),a(3,"span",28)(4,"dm-mono"),r(5),o()()(),a(6,"div",26)(7,"span",27),r(8,"Scanned"),o(),a(9,"span",28)(10,"dm-mono"),r(11),o()()(),a(12,"div",33)(13,"div",27),r(14,"Search roots"),o(),a(15,"ul",34),h(16,ue,3,1,"li",null,E),o()(),v(18,fe,7,0,"div",33),v(19,_e,6,0,"div",33),v(20,xe,2,1,"div",35)),n&2){let t=p();d(5),u(t.discovery().appsFound),d(6),u(t.discovery().scanned),d(5),b(t.discovery().searchRoots),d(2),_(t.rejectedRows().length?18:-1),d(),_(t.discovery().warnings.length?19:-1),d(),_(t.discovery().suggestion?20:-1)}}function Ce(n,e){n&1&&(a(0,"div",9),r(1,"Discovery info unavailable."),o())}function he(n,e){n&1&&x(0,"mat-spinner",14)}function be(n,e){n&1&&(a(0,"mat-icon"),r(1,"play_arrow"),o())}function Me(n,e){n&1&&x(0,"mat-spinner",14)}function ke(n,e){n&1&&(a(0,"mat-icon"),r(1,"build"),o())}function Pe(n,e){if(n&1&&(a(0,"dm-mono"),r(1),o()),n&2){let t=p(2).$implicit,i=p();d(),u(i.state(t.name).detail)}}function we(n,e){if(n&1&&(a(0,"span"),r(1),o()),n&2){let t=p(2).$implicit,i=p();d(),u(i.state(t.name).detail)}}function De(n,e){if(n&1&&(a(0,"div",41),v(1,Pe,2,1,"dm-mono")(2,we,2,1,"span"),o()),n&2){let t=p().$implicit,i=p();d(),_(i.state(t.name).isPath?1:2)}}function Oe(n,e){n&1&&x(0,"mat-spinner",14)}function Se(n,e){n&1&&(a(0,"mat-icon"),r(1,"search"),o())}function Ee(n,e){n&1&&x(0,"mat-spinner",14)}function Ae(n,e){n&1&&(a(0,"mat-icon"),r(1,"build"),o())}function Te(n,e){if(n&1){let t=R();a(0,"mat-card",6)(1,"mat-card-header")(2,"mat-card-title"),r(3),o()(),a(4,"mat-card-content")(5,"div",39)(6,"div",40),r(7),o(),a(8,"span",29),x(9,"span",30),r(10),o()(),v(11,De,3,1,"div",41),o(),a(12,"mat-card-actions",42)(13,"button",13),C("click",function(){let s=D(t).$implicit,m=p();return O(m.runOne(s.name,!0))}),v(14,Oe,1,0,"mat-spinner",14)(15,Se,2,0,"mat-icon"),r(16," Dry-run "),o(),a(17,"button",43),C("click",function(){let s=D(t).$implicit,m=p();return O(m.runOne(s.name,!1))}),v(18,Ee,1,0,"mat-spinner",14)(19,Ae,2,0,"mat-icon"),r(20," Fix "),o()()()}if(n&2){let t=e.$implicit,i=p();d(3),u(t.title),d(4),u(t.description),d(),k("data-kind",i.state(t.name).status),d(2),P("",i.state(t.name).status," "),d(),_(i.state(t.name).detail?11:-1),d(2),y("disabled",i.busy(t.name)||i.busyAll()),d(),_(i.busy(t.name)==="dry"?14:15),d(3),y("disabled",i.busy(t.name)||i.busyAll()),d(),_(i.busy(t.name)==="fix"?18:19)}}function Fe(n,e){n&1&&x(0,"mat-spinner",14)}function Ie(n,e){n&1&&(a(0,"mat-icon"),r(1,"refresh"),o())}var Re=[{name:"orphan-daemon",title:"Orphan daemon",description:"Daemon may be running from the wrong cwd, ignoring your local daimon.config.json"},{name:"stale-lock",title:"Stale lock",description:"Lock file exists but the daemon process is dead"},{name:"missing-search-root",title:"Missing search root",description:"Current cwd has an nx/angular/vite project but isn\u2019t configured"},{name:"corrupt-history-db",title:"Corrupt history DB",description:"History SQLite DB failed quickCheck()"}],oe=class n{api=M(z);http=M(N);snack=M(Q);routines=Re;results=g(new Map);results_lastIntent=g(new Map);errored=g(new Set);loading=g(!0);discovery=g(null);daemonVersion=g("");daemonPort=g(null);configLoaded=g(!1);overview=g(null);busyMap=g(new Map);busyAll=g(!1);busyAllKind=g(null);reloading=g(!1);rejectedRows=w(()=>{let e=this.discovery();return e?Object.entries(e.rejected||{}).map(([t,i])=>({reason:t,count:i})).sort((t,i)=>i.count-t.count):[]});subtitle=w(()=>{let e=this.results(),t=0;for(let i of e.values())i.detected&&t++;return this.loading()&&e.size===0?"Checking system health\u2026":e.size===0?"Run diagnostics to see if any routines need fixing.":t===0?"All checked routines look clean.":`${t} routine${t===1?"":"s"} need${t===1?"s":""} fixing`});tokenEstimate=w(()=>120+this.api.apps().length*34);async ngOnInit(){await this.refreshAll()}async refreshAll(){this.loading.set(!0);try{let[e,t,i]=await Promise.all([this.api.getConfig().catch(()=>null),this.api.discoveryExplain().catch(()=>null),T(this.http.get("/api/overview")).catch(()=>null)]);e&&e.config&&(this.configLoaded.set(!0),this.daemonPort.set(e.config.apiPort??e.config.api?.port??null)),this.discovery.set(t),this.overview.set(i),i?.version&&this.daemonVersion.set(i.version),this.api.apps().length||await this.api.refresh()}finally{this.loading.set(!1)}}state(e){let t=this.results().get(e),i=this.results_lastIntent().get(e),s=this.errored().has(e);if(!t)return{status:"unknown",detail:"",isPath:!1};let m;s?m="error":i==="fix"?m=t.detected?"fixed":"clean":m=t.detected?"detected":"clean";let f=t.description||"",c=/[\\/]/.test(f)||f.includes(":\\")||f.startsWith("/");return{status:m,detail:f,isPath:c}}busy(e){return this.busyMap().get(e)}async runOne(e,t){if(!t&&!window.confirm(`Run fix for "${e}"? This will modify daemon state.`))return;let i=t?"dry":"fix";this.setBusy(e,i);try{let s=await this.api.runAutoFix({dryRun:t,permitted:[e]});this.ingestResults(s,i);let m=this.results().get(e);m?this.snack.open(t?m.detected?`${e}: issue detected`:`${e}: clean`:m.detected?`${e}: fix applied`:`${e}: no action needed`,"OK",{duration:3500}):this.snack.open(`${e}: no result returned`,"OK",{duration:3e3})}catch(s){this.markError(e,s?.message||String(s)),this.snack.open(`${e} failed: ${s?.message||s}`,"Dismiss",{duration:5e3})}finally{this.setBusy(e,null)}}async runAllDry(){this.busyAll.set(!0),this.busyAllKind.set("dry");try{let e=await this.api.runAutoFix({dryRun:!0});this.ingestResults(e,"dry"),this.snack.open("Dry-run complete","OK",{duration:2500})}catch(e){this.snack.open(`Dry-run failed: ${e?.message||e}`,"Dismiss",{duration:5e3})}finally{this.busyAll.set(!1),this.busyAllKind.set(null)}}async fixAll(){if(window.confirm("Run every fix routine without dry-run? This will modify daemon state.")){this.busyAll.set(!0),this.busyAllKind.set("fix");try{let t=await this.api.runAutoFix({dryRun:!1});this.ingestResults(t,"fix"),this.snack.open("Fix-all complete","OK",{duration:2500})}catch(t){this.snack.open(`Fix-all failed: ${t?.message||t}`,"Dismiss",{duration:5e3})}finally{this.busyAll.set(!1),this.busyAllKind.set(null)}}}async reloadConfig(){this.reloading.set(!0);try{await this.api.reloadConfig(),this.snack.open("Config reloaded","OK",{duration:2500}),await this.refreshAll()}catch(e){this.snack.open(`Reload failed: ${e?.message||e}`,"Dismiss",{duration:5e3})}finally{this.reloading.set(!1)}}setBusy(e,t){this.busyMap.update(i=>{let s=new Map(i);return t===null?s.delete(e):s.set(e,t),s})}ingestResults(e,t){let i=Array.isArray(e?.ran)?e.ran:[],s=Array.isArray(e?.skipped)?e.skipped:[],m=Array.isArray(e?.errors)?e.errors:[];if(this.results.update(f=>{let c=new Map(f);for(let l of i)c.set(l.name,l);for(let l of s)c.set(l.name,l);for(let l of m){let ae=c.get(l.name);c.set(l.name,{name:l.name,detected:ae?.detected??!1,description:l.error||"error"})}return c}),this.errored.update(f=>{let c=new Set(f);for(let l of i)c.delete(l.name);for(let l of s)c.delete(l.name);for(let l of m)c.add(l.name);return c}),this.results_lastIntent.update(f=>{let c=new Map(f);for(let l of i)c.set(l.name,t);for(let l of s)c.set(l.name,t);for(let l of m)c.set(l.name,"fix");return c}),m.length)for(let f of m)this.markError(f.name,f.error)}markError(e,t){this.results.update(i=>{let s=new Map(i);return s.set(e,{name:e,detected:!1,description:t||"error"}),s}),this.results_lastIntent.update(i=>{let s=new Map(i);return s.set(e,"fix"),s}),this.errored.update(i=>{let s=new Set(i);return s.add(e),s})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=S({type:n,selectors:[["dm-doctor-page"]],decls:74,vars:11,consts:[[1,"dm-page-header"],[1,"dm-page-sub"],["mat-icon-button","","aria-label","Refresh",3,"click","disabled"],[1,"dm-section"],[1,"dm-section-title"],[1,"dm-grid-2"],[1,"dm-card"],[1,"dm-stack"],["icon","search_off",3,"title","hint"],[1,"dm-muted"],[1,"dm-banner"],[1,"dm-banner-text"],[1,"dm-banner-actions"],["mat-stroked-button","",3,"click","disabled"],["diameter","16"],["mat-flat-button","","color","warn",3,"click","disabled"],[1,"dm-quick"],["mat-stroked-button","","routerLink","/config"],["mat-stroked-button","","routerLink","/events"],[1,"dm-stat"],[1,"dm-stat-icon"],[1,"dm-stat-label"],[1,"dm-stat-value"],["height","1.25rem","width","60%"],["height","1rem","width","40%"],["height","1rem","width","50%"],[1,"dm-kv"],[1,"dm-k"],[1,"dm-v"],[1,"dm-pill"],[1,"dm-dot"],["height","1rem","width","70%"],["height","1rem","width","80%"],[1,"dm-block"],[1,"dm-list"],[1,"dm-callout"],[1,"dm-table"],[1,"dm-num"],[1,"dm-list","dm-warn"],[1,"dm-row-between"],[1,"dm-routine-desc"],[1,"dm-detail"],["align","end"],["mat-flat-button","","color","primary",3,"click","disabled"]],template:function(t,i){t&1&&(a(0,"div",0)(1,"div")(2,"h1"),r(3,"Doctor"),o(),a(4,"div",1),r(5),o()(),a(6,"button",2),C("click",function(){return i.refreshAll()}),a(7,"mat-icon"),r(8,"refresh"),o()()(),a(9,"section",3)(10,"h2",4),r(11,"System overview"),o(),a(12,"div",5)(13,"mat-card",6)(14,"mat-card-header")(15,"mat-card-title"),r(16,"Daemon"),o()(),a(17,"mat-card-content"),v(18,le,4,0,"div",7)(19,me,25,5),o()(),a(20,"mat-card",6)(21,"mat-card-header")(22,"mat-card-title"),r(23,"Discovery"),o()(),a(24,"mat-card-content"),v(25,ce,4,0,"div",7)(26,pe,3,2,"dm-empty",8)(27,ye,21,5)(28,Ce,2,0,"div",9),o()()()(),a(29,"section",3)(30,"h2",4),r(31,"Auto-fix routines"),o(),a(32,"div",10)(33,"div",11),r(34,"Run diagnostics across every routine, or attempt all fixes in one go."),o(),a(35,"div",12)(36,"button",13),C("click",function(){return i.runAllDry()}),v(37,he,1,0,"mat-spinner",14)(38,be,2,0,"mat-icon"),r(39," Run all dry-run "),o(),a(40,"button",15),C("click",function(){return i.fixAll()}),v(41,Me,1,0,"mat-spinner",14)(42,ke,2,0,"mat-icon"),r(43," Fix everything (be careful) "),o()()(),a(44,"div",5),h(45,Te,21,9,"mat-card",6,de),o()(),a(47,"section",3)(48,"h2",4),r(49,"Quick links"),o(),a(50,"div",16)(51,"button",17)(52,"mat-icon"),r(53,"tune"),o(),r(54," Open Config editor "),o(),a(55,"button",18)(56,"mat-icon"),r(57,"timeline"),o(),r(58," View Events "),o(),a(59,"button",13),C("click",function(){return i.reloadConfig()}),v(60,Fe,1,0,"mat-spinner",14)(61,Ie,2,0,"mat-icon"),r(62," Reload config "),o(),a(63,"div",19)(64,"div",20)(65,"mat-icon"),r(66,"token"),o()(),a(67,"div")(68,"div",21),r(69,"API token footprint"),o(),a(70,"div",22)(71,"dm-mono"),r(72),o(),r(73," per Claude session"),o()()()()()),t&2&&(d(5),u(i.subtitle()),d(),y("disabled",i.loading()),d(12),_(i.loading()&&!i.configLoaded()?18:19),d(7),_(i.loading()&&!i.discovery()?25:i.discovery()&&i.discovery().appsFound===0?26:i.discovery()?27:28),d(11),y("disabled",i.busyAll()),d(),_(i.busyAll()&&i.busyAllKind()==="dry"?37:38),d(3),y("disabled",i.busyAll()),d(),_(i.busyAll()&&i.busyAllKind()==="fix"?41:42),d(4),b(i.routines),d(14),y("disabled",i.reloading()),d(),_(i.reloading()?60:61),d(12),P("~ ",i.tokenEstimate()," tokens"))},dependencies:[$,ne,X,ee,Z,te,Y,H,q,L,B,j,K,V,W,ie,U,G,J],styles:["[_nghost-%COMP%]{display:block;max-width:1200px;margin:0 auto}.dm-section[_ngcontent-%COMP%]{margin-bottom:1.25rem}.dm-section-title[_ngcontent-%COMP%]{margin:0 0 .5rem;font:500 .6875rem/1rem Roboto;color:var(--mat-sys-on-surface-variant);letter-spacing:.06em;text-transform:uppercase}.dm-grid-2[_ngcontent-%COMP%]{display:grid;gap:.75rem;grid-template-columns:repeat(2,minmax(0,1fr))}@media(max-width:800px){.dm-grid-2[_ngcontent-%COMP%]{grid-template-columns:1fr}}.dm-card[_ngcontent-%COMP%]{background:var(--mat-sys-surface-container-low)}.dm-stack[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.dm-kv[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;padding:.35rem 0;border-bottom:1px solid var(--mat-sys-outline-variant)}.dm-kv[_ngcontent-%COMP%]:last-child{border-bottom:0}.dm-k[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:.8125rem}.dm-v[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface)}.dm-block[_ngcontent-%COMP%]{margin-top:.75rem}.dm-block[_ngcontent-%COMP%] .dm-k[_ngcontent-%COMP%]{display:block;margin-bottom:.35rem}.dm-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem}.dm-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{padding:.25rem .5rem;background:var(--mat-sys-surface-container);border-radius:6px;overflow-wrap:anywhere}.dm-warn[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.dm-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;font-size:.8125rem}.dm-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:.25rem .5rem;border-bottom:1px solid var(--mat-sys-outline-variant)}.dm-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%]{border-bottom:0}.dm-num[_ngcontent-%COMP%]{text-align:right;color:var(--mat-sys-on-surface-variant)}.dm-callout[_ngcontent-%COMP%]{margin-top:.75rem;padding:.65rem .85rem;border-radius:10px;background:color-mix(in oklch,var(--mat-sys-tertiary) 12%,transparent);border:1px solid color-mix(in oklch,var(--mat-sys-tertiary) 28%,transparent);color:var(--mat-sys-on-surface);font-size:.875rem}.dm-muted[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:.875rem}.dm-pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.4rem;padding:2px 10px;border-radius:999px;border:1px solid var(--mat-sys-outline-variant);background:var(--mat-sys-surface-container);color:var(--mat-sys-on-surface);font:500 .75rem/1rem Roboto;letter-spacing:.025rem}.dm-pill[_ngcontent-%COMP%] .dm-dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:999px;background:var(--mat-sys-outline)}.dm-pill[data-kind=ok][_ngcontent-%COMP%], .dm-pill[data-kind=clean][_ngcontent-%COMP%], .dm-pill[data-kind=fixed][_ngcontent-%COMP%]{background:color-mix(in oklch,var(--mat-sys-primary) 12%,transparent);border-color:color-mix(in oklch,var(--mat-sys-primary) 28%,transparent)}.dm-pill[data-kind=ok][_ngcontent-%COMP%] .dm-dot[_ngcontent-%COMP%], .dm-pill[data-kind=clean][_ngcontent-%COMP%] .dm-dot[_ngcontent-%COMP%], .dm-pill[data-kind=fixed][_ngcontent-%COMP%] .dm-dot[_ngcontent-%COMP%]{background:var(--mat-sys-primary)}.dm-pill[data-kind=detected][_ngcontent-%COMP%]{background:color-mix(in oklch,var(--mat-sys-tertiary) 14%,transparent);border-color:color-mix(in oklch,var(--mat-sys-tertiary) 28%,transparent)}.dm-pill[data-kind=detected][_ngcontent-%COMP%] .dm-dot[_ngcontent-%COMP%]{background:var(--mat-sys-tertiary)}.dm-pill[data-kind=err][_ngcontent-%COMP%], .dm-pill[data-kind=error][_ngcontent-%COMP%]{background:color-mix(in oklch,var(--mat-sys-error) 14%,transparent);border-color:color-mix(in oklch,var(--mat-sys-error) 30%,transparent);color:var(--mat-sys-error)}.dm-pill[data-kind=err][_ngcontent-%COMP%] .dm-dot[_ngcontent-%COMP%], .dm-pill[data-kind=error][_ngcontent-%COMP%] .dm-dot[_ngcontent-%COMP%]{background:var(--mat-sys-error)}.dm-banner[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.5rem .85rem;margin-bottom:.75rem;background:var(--mat-sys-surface-container);border:1px solid var(--mat-sys-outline-variant);border-radius:10px}.dm-banner-text[_ngcontent-%COMP%]{font-size:.875rem;color:var(--mat-sys-on-surface-variant)}.dm-banner-actions[_ngcontent-%COMP%]{display:flex;gap:.5rem}@media(max-width:700px){.dm-banner[_ngcontent-%COMP%]{flex-direction:column;align-items:stretch}.dm-banner-actions[_ngcontent-%COMP%]{flex-wrap:wrap}}.dm-row-between[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.dm-routine-desc[_ngcontent-%COMP%]{font-size:.875rem;color:var(--mat-sys-on-surface-variant);flex:1}.dm-detail[_ngcontent-%COMP%]{margin-top:.75rem;padding:.5rem .65rem;background:var(--mat-sys-surface-container);border-radius:8px;font-size:.8125rem;overflow-wrap:anywhere}.dm-quick[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.75rem}.dm-quick[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{justify-content:flex-start;padding:.5rem .75rem;height:auto;min-height:40px}.dm-stat[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.625rem;padding:.5rem .75rem;border:1px solid var(--mat-sys-outline-variant);border-radius:10px;background:var(--mat-sys-surface-container-low)}.dm-stat-icon[_ngcontent-%COMP%]{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:8px;background:color-mix(in oklch,var(--mat-sys-primary) 14%,transparent);color:var(--mat-sys-primary)}.dm-stat-icon[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:16px;width:16px;height:16px}.dm-stat-label[_ngcontent-%COMP%]{font-size:.75rem;color:var(--mat-sys-on-surface-variant);text-transform:uppercase;letter-spacing:.025rem}.dm-stat-value[_ngcontent-%COMP%]{font-size:.875rem;color:var(--mat-sys-on-surface)}mat-spinner[_ngcontent-%COMP%]{display:inline-block;margin-right:.35rem}"],changeDetection:0})};export{oe as DoctorPageComponent};
@@ -1 +0,0 @@
1
- import{a as A,b as $,c as j,f as L,g as z}from"./chunk-7NRE3SNA.js";import{a as I}from"./chunk-25VLDASM.js";import{c as D,d as T}from"./chunk-RIDV4B55.js";import"./chunk-OHX55ZU4.js";import{c as N,e as R}from"./chunk-SR5JAOLW.js";import"./chunk-YNQPX5G6.js";import"./chunk-IQZZO5IM.js";import"./chunk-KLH6B22T.js";import{c as k,h as E,i as w}from"./chunk-Q3N4MMWW.js";import"./chunk-Y6B6X4Y6.js";import{Eb as m,Fb as l,Kb as y,Lb as t,Mb as e,Nb as g,Sb as S,Ub as b,Wb as c,_a as r,ea as C,gc as M,ic as i,ja as _,jc as f,ka as h,kc as v,lc as P,pb as x,s as u,ta as d,xc as O}from"./chunk-K43KW4K2.js";function V(a,o){a&1&&g(0,"dm-skeleton",2)}function F(a,o){if(a&1&&(t(0,"span"),i(1),e()),a&2){let n=c();r(),v("Recording in progress \xB7 ",n.elapsedLabel())}}function H(a,o){a&1&&(t(0,"span"),i(1,"Not recording"),e())}function J(a,o){a&1&&(t(0,"div",3),g(1,"dm-skeleton",4)(2,"dm-skeleton",4)(3,"dm-skeleton",4),e())}function W(a,o){a&1&&(g(0,"span",20),t(1,"span",21),i(2,"REC"),e())}function q(a,o){a&1&&(t(0,"span",8),i(1,"Idle"),e())}function G(a,o){if(a&1&&(t(0,"div",22)(1,"span",23),i(2,"Path"),e(),t(3,"dm-mono")(4,"span",25),i(5),e()()()),a&2){let n=c(3);r(5),f(n.path())}}function K(a,o){if(a&1&&(t(0,"div",10)(1,"div",22)(2,"span",23),i(3,"Elapsed"),e(),t(4,"dm-mono")(5,"span",24),i(6),e()()(),m(7,G,6,1,"div",22),e()),a&2){let n=c(2);r(6),f(n.elapsedLabel()),r(),l(n.path()?7:-1)}}function Q(a,o){if(a&1){let n=S();t(0,"mat-card",5)(1,"mat-card-content")(2,"div",6)(3,"div",7),m(4,W,3,0)(5,q,2,0,"span",8),e(),t(6,"button",9),b("click",function(){_(n);let p=c();return h(p.toggle())}),t(7,"mat-icon"),i(8),e(),i(9),e()(),m(10,K,8,2,"div",10),e()(),t(11,"div",11)(12,"mat-card",12)(13,"mat-card-header")(14,"mat-card-title"),i(15,"What gets recorded"),e()(),t(16,"mat-card-content")(17,"ul",13)(18,"li"),i(19,"App lifecycle events (start, stop, restart)"),e(),t(20,"li"),i(21,"Task invocations"),e(),t(22,"li"),i(23,"Config changes"),e()(),t(24,"div",14)(25,"span",15),i(26,"Saved as"),e(),t(27,"dm-mono")(28,"span",16),i(29,"~/.daimon/sessions/session-<timestamp>.jsonl"),e()()(),t(30,"div",14)(31,"span",15),i(32,"Replay"),e(),t(33,"dm-mono")(34,"span",16),i(35,"daimon replay session.jsonl --speed 1"),e()()(),t(36,"div",17),i(37," Each JSONL line is "),t(38,"dm-mono")(39,"span",16),i(40),e()(),i(41,". "),e()()(),t(42,"mat-card",12)(43,"mat-card-header")(44,"mat-card-title"),i(45,"Replay primer"),e()(),t(46,"mat-card-content")(47,"div",18)(48,"dm-mono")(49,"span",16),i(50,"daimon replay <file.jsonl>"),e()(),t(51,"span",19),i(52,"play at default speed"),e()(),t(53,"div",18)(54,"dm-mono")(55,"span",16),i(56,"daimon replay <file.jsonl> --speed 2"),e()(),t(57,"span",19),i(58,"2x faster"),e()(),t(59,"div",17),i(60," Replay runs from the CLI. The dashboard doesn't trigger replays. "),e()()()()}if(a&2){let n=c();r(3),M("dm-state-rec",n.recording()),r(),l(n.recording()?4:5),r(2),y("disabled",n.busy()),r(2),f(n.recording()?"stop_circle":"radio_button_checked"),r(),v(" ",n.recording()?"Stop recording":"Start recording"," "),r(),l(n.recording()?10:-1),r(30),P("","{"," ts, kind, app?, task?, args? ","}")}}function U(a){let o=Math.max(0,Math.floor(a/1e3)),n=Math.floor(o/3600),s=Math.floor(o%3600/60),p=o%60;return n>0?`${n}h ${s}m ${p}s`:s>0?`${s}m ${p}s`:`${p}s`}var B=class a{http=C(k);snack=C(I);loading=d(!0);recording=d(!1);path=d(void 0);busy=d(!1);startedAt=d(null);tick=d(0);elapsedLabel=O(()=>{this.tick();let o=this.startedAt();return o?U(Date.now()-o):"0s"});tickTimer;ngOnInit(){this.loadStatus(),this.tickTimer=setInterval(()=>{this.recording()&&this.tick.update(o=>o+1)},1e3)}ngOnDestroy(){this.tickTimer&&clearInterval(this.tickTimer)}async loadStatus(){this.loading.set(!0);try{let o=await u(this.http.get("/api/session/status"));this.recording.set(!!o?.recording),this.path.set(o?.path),o?.recording?this.startedAt.set(Date.now()):this.startedAt.set(null)}catch{this.recording.set(!1),this.startedAt.set(null)}finally{this.loading.set(!1)}}async toggle(){if(this.busy())return;this.busy.set(!0);let o=this.recording();try{let n=await u(this.http.post("/api/session/record?action=toggle",{})),s=!!n?.recording;this.recording.set(s),this.path.set(n?.path),s&&!o?(this.startedAt.set(Date.now()),this.snack.open(n?.path?`Started session at ${n.path}`:"Started session","",{duration:2500})):!s&&o&&(this.startedAt.set(null),this.snack.open("Stopped session","",{duration:2500}))}catch(n){this.snack.open(`Session toggle failed: ${n?.message??"error"}`,"Dismiss",{duration:4e3,panelClass:"dm-snack-error"})}finally{this.busy.set(!1)}}static \u0275fac=function(n){return new(n||a)};static \u0275cmp=x({type:a,selectors:[["dm-sessions-page"]],decls:10,vars:2,consts:[[1,"dm-page-header"],[1,"dm-page-sub"],["width","12rem","height","1rem"],[1,"dm-skel-grid"],["height","9rem"],[1,"dm-status-card"],[1,"dm-status-row"],[1,"dm-state"],[1,"dm-idle-label"],["mat-flat-button","","color","primary",1,"dm-toggle-btn",3,"click","disabled"],[1,"dm-rec-meta"],[1,"dm-info-grid"],[1,"dm-info-card"],[1,"dm-info-list"],[1,"dm-info-row"],[1,"dm-info-label"],[1,"dm-info-mono"],[1,"dm-info-hint"],[1,"dm-replay-row"],[1,"dm-replay-desc"],[1,"dm-rec-dot"],[1,"dm-rec-label"],[1,"dm-meta-row"],[1,"dm-meta-label"],[1,"dm-meta-value"],[1,"dm-meta-value","dm-path"]],template:function(n,s){n&1&&(t(0,"div",0)(1,"div")(2,"h1"),i(3,"Sessions"),e(),t(4,"div",1),m(5,V,1,0,"dm-skeleton",2)(6,F,2,1,"span")(7,H,2,0,"span"),e()()(),m(8,J,4,0,"div",3)(9,Q,61,9)),n&2&&(r(5),l(s.loading()?5:s.recording()?6:7),r(3),l(s.loading()?8:9))},dependencies:[z,A,j,L,$,T,D,w,E,N,R],styles:["[_nghost-%COMP%]{display:block}.dm-page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0}.dm-page-sub[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);margin-top:.25rem;font-size:.875rem}.dm-skel-grid[_ngcontent-%COMP%]{display:grid;gap:1rem;grid-template-columns:repeat(auto-fill,minmax(18rem,1fr))}.dm-status-card[_ngcontent-%COMP%]{margin-bottom:1rem;border:1px solid var(--mat-sys-outline-variant)}.dm-status-row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;flex-wrap:wrap}.dm-state[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.65rem;font:500 1.5rem/2rem Roboto;color:var(--mat-sys-on-surface-variant)}.dm-state-rec[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.dm-rec-dot[_ngcontent-%COMP%]{width:14px;height:14px;border-radius:999px;background:var(--mat-sys-error);box-shadow:0 0 0 4px color-mix(in oklch,var(--mat-sys-error) 22%,transparent);animation:_ngcontent-%COMP%_dm-pulse 1.4s ease-in-out infinite}@keyframes _ngcontent-%COMP%_dm-pulse{0%,to{opacity:1}50%{opacity:.35}}@media(prefers-reduced-motion:reduce){.dm-rec-dot[_ngcontent-%COMP%]{animation:none}}.dm-rec-label[_ngcontent-%COMP%]{letter-spacing:.05rem}.dm-idle-label[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant)}.dm-toggle-btn[_ngcontent-%COMP%]{min-height:48px;padding:0 1.25rem;font-size:1rem}.dm-rec-meta[_ngcontent-%COMP%]{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--mat-sys-outline-variant);display:flex;flex-direction:column;gap:.5rem}.dm-meta-row[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:.75rem}.dm-meta-label[_ngcontent-%COMP%]{font:500 .6875rem/1rem Roboto;text-transform:uppercase;letter-spacing:.04rem;color:var(--mat-sys-on-surface-variant);min-width:4.5rem}.dm-meta-value[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface)}.dm-path[_ngcontent-%COMP%]{word-break:break-all}.dm-info-grid[_ngcontent-%COMP%]{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(20rem,1fr))}.dm-info-card[_ngcontent-%COMP%]{border:1px solid var(--mat-sys-outline-variant)}.dm-info-list[_ngcontent-%COMP%]{margin:0 0 1rem;padding-left:1.25rem;color:var(--mat-sys-on-surface);font-size:.875rem}.dm-info-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin-bottom:.25rem}.dm-info-row[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.15rem;margin-bottom:.65rem}.dm-info-label[_ngcontent-%COMP%]{font:500 .6875rem/1rem Roboto;text-transform:uppercase;letter-spacing:.04rem;color:var(--mat-sys-on-surface-variant)}.dm-info-mono[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);word-break:break-all}.dm-info-hint[_ngcontent-%COMP%]{margin-top:.5rem;font-size:.8125rem;color:var(--mat-sys-on-surface-variant)}.dm-replay-row[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.15rem;margin-bottom:.65rem}.dm-replay-desc[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--mat-sys-on-surface-variant)}"],changeDetection:0})};export{B as SessionsPageComponent};
@@ -1,2 +0,0 @@
1
- import{b as tt,g as et,i as it,p as b,t as ot,v as st,y as nt}from"./chunk-IQZZO5IM.js";import{b as T,m as w}from"./chunk-KLH6B22T.js";import{F as W,H as q,M as K,N as J,P as v,f as B,p as $,q as Z,r as y,t as Q}from"./chunk-Y6B6X4Y6.js";import{$b as G,Ca as d,Ec as U,Kb as k,Lb as f,Mb as V,Sb as F,Ub as u,V as a,_a as L,_b as H,a as h,aa as P,ac as z,ca as _,ea as r,eb as M,fb as m,gc as g,i as c,ic as X,ja as R,jc as j,ka as A,lb as S,na as p,oa as E,pb as x,qb as N,rb as Y}from"./chunk-K43KW4K2.js";var ft=["tooltip"],O=20;var C=new _("mat-tooltip-scroll-strategy",{providedIn:"root",factory:()=>{let n=r(p);return()=>b(n,{scrollThrottle:O})}});function lt(n){let ct=r(p);return()=>b(ct,{scrollThrottle:O})}var I={provide:C,deps:[],useFactory:lt};function ht(){return{showDelay:0,hideDelay:0,touchendHideDelay:1500}}var pt=new _("mat-tooltip-default-options",{providedIn:"root",factory:ht});var rt="tooltip-panel",at=Z({passive:!0}),ut=8,gt=8,yt=24,vt=200,Tt=(()=>{class n{_elementRef=r(d);_ngZone=r(M);_platform=r($);_ariaDescriber=r(K);_focusMonitor=r(Q);_dir=r(J);_injector=r(p);_viewContainerRef=r(S);_animationsDisabled=w();_defaultOptions=r(pt,{optional:!0});_overlayRef;_tooltipInstance;_overlayPanelClass;_portal;_position="below";_positionAtOrigin=!1;_disabled=!1;_tooltipClass;_viewInitialized=!1;_pointerExitEventsInitialized=!1;_tooltipComponent=dt;_viewportMargin=8;_currentPosition;_cssClassPrefix="mat-mdc";_ariaDescriptionPending;_dirSubscribed=!1;get position(){return this._position}set position(t){t!==this._position&&(this._position=t,this._overlayRef&&(this._updatePosition(this._overlayRef),this._tooltipInstance?.show(0),this._overlayRef.updatePosition()))}get positionAtOrigin(){return this._positionAtOrigin}set positionAtOrigin(t){this._positionAtOrigin=T(t),this._detach(),this._overlayRef=null}get disabled(){return this._disabled}set disabled(t){let e=T(t);this._disabled!==e&&(this._disabled=e,e?this.hide(0):this._setupPointerEnterEventsIfNeeded(),this._syncAriaDescription(this.message))}get showDelay(){return this._showDelay}set showDelay(t){this._showDelay=y(t)}_showDelay;get hideDelay(){return this._hideDelay}set hideDelay(t){this._hideDelay=y(t),this._tooltipInstance&&(this._tooltipInstance._mouseLeaveHideDelay=this._hideDelay)}_hideDelay;touchGestures="auto";get message(){return this._message}set message(t){let e=this._message;this._message=t!=null?String(t).trim():"",!this._message&&this._isTooltipVisible()?this.hide(0):(this._setupPointerEnterEventsIfNeeded(),this._updateTooltipMessage()),this._syncAriaDescription(e)}_message="";get tooltipClass(){return this._tooltipClass}set tooltipClass(t){this._tooltipClass=t,this._tooltipInstance&&this._setTooltipClass(this._tooltipClass)}_passiveListeners=[];_touchstartTimeout=null;_destroyed=new c;_isDestroyed=!1;constructor(){let t=this._defaultOptions;t&&(this._showDelay=t.showDelay,this._hideDelay=t.hideDelay,t.position&&(this.position=t.position),t.positionAtOrigin&&(this.positionAtOrigin=t.positionAtOrigin),t.touchGestures&&(this.touchGestures=t.touchGestures),t.tooltipClass&&(this.tooltipClass=t.tooltipClass)),this._viewportMargin=ut}ngAfterViewInit(){this._viewInitialized=!0,this._setupPointerEnterEventsIfNeeded(),this._focusMonitor.monitor(this._elementRef).pipe(a(this._destroyed)).subscribe(t=>{t?t==="keyboard"&&this._ngZone.run(()=>this.show()):this._ngZone.run(()=>this.hide(0))})}ngOnDestroy(){let t=this._elementRef.nativeElement;this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this._overlayRef&&(this._overlayRef.dispose(),this._tooltipInstance=null),this._passiveListeners.forEach(([e,i])=>{t.removeEventListener(e,i,at)}),this._passiveListeners.length=0,this._destroyed.next(),this._destroyed.complete(),this._isDestroyed=!0,this._ariaDescriber.removeDescription(t,this.message,"tooltip"),this._focusMonitor.stopMonitoring(t)}show(t=this.showDelay,e){if(this.disabled||!this.message||this._isTooltipVisible()){this._tooltipInstance?._cancelPendingAnimations();return}let i=this._createOverlay(e);this._detach(),this._portal=this._portal||new it(this._tooltipComponent,this._viewContainerRef);let o=this._tooltipInstance=i.attach(this._portal).instance;o._triggerElement=this._elementRef.nativeElement,o._mouseLeaveHideDelay=this._hideDelay,o.afterHidden().pipe(a(this._destroyed)).subscribe(()=>this._detach()),this._setTooltipClass(this._tooltipClass),this._updateTooltipMessage(),o.show(t)}hide(t=this.hideDelay){let e=this._tooltipInstance;e&&(e.isVisible()?e.hide(t):(e._cancelPendingAnimations(),this._detach()))}toggle(t){this._isTooltipVisible()?this.hide():this.show(void 0,t)}_isTooltipVisible(){return!!this._tooltipInstance&&this._tooltipInstance.isVisible()}_createOverlay(t){if(this._overlayRef){let s=this._overlayRef.getConfig().positionStrategy;if((!this.positionAtOrigin||!t)&&s._origin instanceof d)return this._overlayRef;this._detach()}let e=this._injector.get(tt).getAncestorScrollContainers(this._elementRef),i=`${this._cssClassPrefix}-${rt}`,o=ot(this._injector,this.positionAtOrigin?t||this._elementRef:this._elementRef).withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`).withFlexibleDimensions(!1).withViewportMargin(this._viewportMargin).withScrollableContainers(e);return o.positionChanges.pipe(a(this._destroyed)).subscribe(s=>{this._updateCurrentPositionClass(s.connectionPair),this._tooltipInstance&&s.scrollableViewProperties.isOverlayClipped&&this._tooltipInstance.isVisible()&&this._ngZone.run(()=>this.hide(0))}),this._overlayRef=st(this._injector,{direction:this._dir,positionStrategy:o,panelClass:this._overlayPanelClass?[...this._overlayPanelClass,i]:i,scrollStrategy:this._injector.get(C)(),disableAnimations:this._animationsDisabled}),this._updatePosition(this._overlayRef),this._overlayRef.detachments().pipe(a(this._destroyed)).subscribe(()=>this._detach()),this._overlayRef.outsidePointerEvents().pipe(a(this._destroyed)).subscribe(()=>this._tooltipInstance?._handleBodyInteraction()),this._overlayRef.keydownEvents().pipe(a(this._destroyed)).subscribe(s=>{this._isTooltipVisible()&&s.keyCode===27&&!q(s)&&(s.preventDefault(),s.stopPropagation(),this._ngZone.run(()=>this.hide(0)))}),this._defaultOptions?.disableTooltipInteractivity&&this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`),this._dirSubscribed||(this._dirSubscribed=!0,this._dir.change.pipe(a(this._destroyed)).subscribe(()=>{this._overlayRef&&this._updatePosition(this._overlayRef)})),this._overlayRef}_detach(){this._overlayRef&&this._overlayRef.hasAttached()&&this._overlayRef.detach(),this._tooltipInstance=null}_updatePosition(t){let e=t.getConfig().positionStrategy,i=this._getOrigin(),o=this._getOverlayPosition();e.withPositions([this._addOffset(h(h({},i.main),o.main)),this._addOffset(h(h({},i.fallback),o.fallback))])}_addOffset(t){let e=gt,i=!this._dir||this._dir.value=="ltr";return t.originY==="top"?t.offsetY=-e:t.originY==="bottom"?t.offsetY=e:t.originX==="start"?t.offsetX=i?-e:e:t.originX==="end"&&(t.offsetX=i?e:-e),t}_getOrigin(){let t=!this._dir||this._dir.value=="ltr",e=this.position,i;e=="above"||e=="below"?i={originX:"center",originY:e=="above"?"top":"bottom"}:e=="before"||e=="left"&&t||e=="right"&&!t?i={originX:"start",originY:"center"}:(e=="after"||e=="right"&&t||e=="left"&&!t)&&(i={originX:"end",originY:"center"});let{x:o,y:s}=this._invertPosition(i.originX,i.originY);return{main:i,fallback:{originX:o,originY:s}}}_getOverlayPosition(){let t=!this._dir||this._dir.value=="ltr",e=this.position,i;e=="above"?i={overlayX:"center",overlayY:"bottom"}:e=="below"?i={overlayX:"center",overlayY:"top"}:e=="before"||e=="left"&&t||e=="right"&&!t?i={overlayX:"end",overlayY:"center"}:(e=="after"||e=="right"&&t||e=="left"&&!t)&&(i={overlayX:"start",overlayY:"center"});let{x:o,y:s}=this._invertPosition(i.overlayX,i.overlayY);return{main:i,fallback:{overlayX:o,overlayY:s}}}_updateTooltipMessage(){this._tooltipInstance&&(this._tooltipInstance.message=this.message,this._tooltipInstance._markForCheck(),m(()=>{this._tooltipInstance&&this._overlayRef.updatePosition()},{injector:this._injector}))}_setTooltipClass(t){this._tooltipInstance&&(this._tooltipInstance.tooltipClass=t,this._tooltipInstance._markForCheck())}_invertPosition(t,e){return this.position==="above"||this.position==="below"?e==="top"?e="bottom":e==="bottom"&&(e="top"):t==="end"?t="start":t==="start"&&(t="end"),{x:t,y:e}}_updateCurrentPositionClass(t){let{overlayY:e,originX:i,originY:o}=t,s;if(e==="center"?this._dir&&this._dir.value==="rtl"?s=i==="end"?"left":"right":s=i==="start"?"left":"right":s=e==="bottom"&&o==="top"?"above":"below",s!==this._currentPosition){let l=this._overlayRef;if(l){let D=`${this._cssClassPrefix}-${rt}-`;l.removePanelClass(D+this._currentPosition),l.addPanelClass(D+s)}this._currentPosition=s}}_setupPointerEnterEventsIfNeeded(){this._disabled||!this.message||!this._viewInitialized||this._passiveListeners.length||(this._platformSupportsMouseEvents()?this._passiveListeners.push(["mouseenter",t=>{this._setupPointerExitEventsIfNeeded();let e;t.x!==void 0&&t.y!==void 0&&(e=t),this.show(void 0,e)}]):this.touchGestures!=="off"&&(this._disableNativeGesturesIfNecessary(),this._passiveListeners.push(["touchstart",t=>{let e=t.targetTouches?.[0],i=e?{x:e.clientX,y:e.clientY}:void 0;this._setupPointerExitEventsIfNeeded(),this._touchstartTimeout&&clearTimeout(this._touchstartTimeout);let o=500;this._touchstartTimeout=setTimeout(()=>{this._touchstartTimeout=null,this.show(void 0,i)},this._defaultOptions?.touchLongPressShowDelay??o)}])),this._addListeners(this._passiveListeners))}_setupPointerExitEventsIfNeeded(){if(this._pointerExitEventsInitialized)return;this._pointerExitEventsInitialized=!0;let t=[];if(this._platformSupportsMouseEvents())t.push(["mouseleave",e=>{let i=e.relatedTarget;(!i||!this._overlayRef?.overlayElement.contains(i))&&this.hide()}],["wheel",e=>this._wheelListener(e)]);else if(this.touchGestures!=="off"){this._disableNativeGesturesIfNecessary();let e=()=>{this._touchstartTimeout&&clearTimeout(this._touchstartTimeout),this.hide(this._defaultOptions?.touchendHideDelay)};t.push(["touchend",e],["touchcancel",e])}this._addListeners(t),this._passiveListeners.push(...t)}_addListeners(t){t.forEach(([e,i])=>{this._elementRef.nativeElement.addEventListener(e,i,at)})}_platformSupportsMouseEvents(){return!this._platform.IOS&&!this._platform.ANDROID}_wheelListener(t){if(this._isTooltipVisible()){let e=this._injector.get(E).elementFromPoint(t.clientX,t.clientY),i=this._elementRef.nativeElement;e!==i&&!i.contains(e)&&this.hide()}}_disableNativeGesturesIfNecessary(){let t=this.touchGestures;if(t!=="off"){let e=this._elementRef.nativeElement,i=e.style;(t==="on"||e.nodeName!=="INPUT"&&e.nodeName!=="TEXTAREA")&&(i.userSelect=i.msUserSelect=i.webkitUserSelect=i.MozUserSelect="none"),(t==="on"||!e.draggable)&&(i.webkitUserDrag="none"),i.touchAction="none",i.webkitTapHighlightColor="transparent"}}_syncAriaDescription(t){this._ariaDescriptionPending||(this._ariaDescriptionPending=!0,this._ariaDescriber.removeDescription(this._elementRef.nativeElement,t,"tooltip"),this._isDestroyed||m({write:()=>{this._ariaDescriptionPending=!1,this.message&&!this.disabled&&this._ariaDescriber.describe(this._elementRef.nativeElement,this.message,"tooltip")}},{injector:this._injector}))}static \u0275fac=function(e){return new(e||n)};static \u0275dir=Y({type:n,selectors:[["","matTooltip",""]],hostAttrs:[1,"mat-mdc-tooltip-trigger"],hostVars:2,hostBindings:function(e,i){e&2&&g("mat-mdc-tooltip-disabled",i.disabled)},inputs:{position:[0,"matTooltipPosition","position"],positionAtOrigin:[0,"matTooltipPositionAtOrigin","positionAtOrigin"],disabled:[0,"matTooltipDisabled","disabled"],showDelay:[0,"matTooltipShowDelay","showDelay"],hideDelay:[0,"matTooltipHideDelay","hideDelay"],touchGestures:[0,"matTooltipTouchGestures","touchGestures"],message:[0,"matTooltip","message"],tooltipClass:[0,"matTooltipClass","tooltipClass"]},exportAs:["matTooltip"]})}return n})(),dt=(()=>{class n{_changeDetectorRef=r(U);_elementRef=r(d);_isMultiline=!1;message;tooltipClass;_showTimeoutId;_hideTimeoutId;_triggerElement;_mouseLeaveHideDelay;_animationsDisabled=w();_tooltip;_closeOnInteraction=!1;_isVisible=!1;_onHide=new c;_showAnimation="mat-mdc-tooltip-show";_hideAnimation="mat-mdc-tooltip-hide";constructor(){}show(t){this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=setTimeout(()=>{this._toggleVisibility(!0),this._showTimeoutId=void 0},t)}hide(t){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId=setTimeout(()=>{this._toggleVisibility(!1),this._hideTimeoutId=void 0},t)}afterHidden(){return this._onHide}isVisible(){return this._isVisible}ngOnDestroy(){this._cancelPendingAnimations(),this._onHide.complete(),this._triggerElement=null}_handleBodyInteraction(){this._closeOnInteraction&&this.hide(0)}_markForCheck(){this._changeDetectorRef.markForCheck()}_handleMouseLeave({relatedTarget:t}){(!t||!this._triggerElement.contains(t))&&(this.isVisible()?this.hide(this._mouseLeaveHideDelay):this._finalizeAnimation(!1))}_onShow(){this._isMultiline=this._isTooltipMultiline(),this._markForCheck()}_isTooltipMultiline(){let t=this._elementRef.nativeElement.getBoundingClientRect();return t.height>yt&&t.width>=vt}_handleAnimationEnd({animationName:t}){(t===this._showAnimation||t===this._hideAnimation)&&this._finalizeAnimation(t===this._showAnimation)}_cancelPendingAnimations(){this._showTimeoutId!=null&&clearTimeout(this._showTimeoutId),this._hideTimeoutId!=null&&clearTimeout(this._hideTimeoutId),this._showTimeoutId=this._hideTimeoutId=void 0}_finalizeAnimation(t){t?this._closeOnInteraction=!0:this.isVisible()||this._onHide.next()}_toggleVisibility(t){let e=this._tooltip.nativeElement,i=this._showAnimation,o=this._hideAnimation;if(e.classList.remove(t?o:i),e.classList.add(t?i:o),this._isVisible!==t&&(this._isVisible=t,this._changeDetectorRef.markForCheck()),t&&!this._animationsDisabled&&typeof getComputedStyle=="function"){let s=getComputedStyle(e);(s.getPropertyValue("animation-duration")==="0s"||s.getPropertyValue("animation-name")==="none")&&(this._animationsDisabled=!0)}t&&this._onShow(),this._animationsDisabled&&(e.classList.add("_mat-animation-noopable"),this._finalizeAnimation(t))}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=x({type:n,selectors:[["mat-tooltip-component"]],viewQuery:function(e,i){if(e&1&&H(ft,7),e&2){let o;G(o=z())&&(i._tooltip=o.first)}},hostAttrs:["aria-hidden","true"],hostBindings:function(e,i){e&1&&u("mouseleave",function(s){return i._handleMouseLeave(s)})},decls:4,vars:4,consts:[["tooltip",""],[1,"mdc-tooltip","mat-mdc-tooltip",3,"animationend","ngClass"],[1,"mat-mdc-tooltip-surface","mdc-tooltip__surface"]],template:function(e,i){if(e&1){let o=F();f(0,"div",1,0),u("animationend",function(l){return R(o),A(i._handleAnimationEnd(l))}),f(2,"div",2),X(3),V()()}e&2&&(g("mdc-tooltip--multiline",i._isMultiline),k("ngClass",i.tooltipClass),L(3),j(i.message))},dependencies:[B],styles:[`.mat-mdc-tooltip{position:relative;transform:scale(0);display:inline-flex}.mat-mdc-tooltip::before{content:"";top:0;right:0;bottom:0;left:0;z-index:-1;position:absolute}.mat-mdc-tooltip-panel-below .mat-mdc-tooltip::before{top:-8px}.mat-mdc-tooltip-panel-above .mat-mdc-tooltip::before{bottom:-8px}.mat-mdc-tooltip-panel-right .mat-mdc-tooltip::before{left:-8px}.mat-mdc-tooltip-panel-left .mat-mdc-tooltip::before{right:-8px}.mat-mdc-tooltip._mat-animation-noopable{animation:none;transform:scale(1)}.mat-mdc-tooltip-surface{word-break:normal;overflow-wrap:anywhere;padding:4px 8px;min-width:40px;max-width:200px;min-height:24px;max-height:40vh;box-sizing:border-box;overflow:hidden;text-align:center;will-change:transform,opacity;background-color:var(--mat-tooltip-container-color, var(--mat-sys-inverse-surface));color:var(--mat-tooltip-supporting-text-color, var(--mat-sys-inverse-on-surface));border-radius:var(--mat-tooltip-container-shape, var(--mat-sys-corner-extra-small));font-family:var(--mat-tooltip-supporting-text-font, var(--mat-sys-body-small-font));font-size:var(--mat-tooltip-supporting-text-size, var(--mat-sys-body-small-size));font-weight:var(--mat-tooltip-supporting-text-weight, var(--mat-sys-body-small-weight));line-height:var(--mat-tooltip-supporting-text-line-height, var(--mat-sys-body-small-line-height));letter-spacing:var(--mat-tooltip-supporting-text-tracking, var(--mat-sys-body-small-tracking))}.mat-mdc-tooltip-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:"";pointer-events:none}.mdc-tooltip--multiline .mat-mdc-tooltip-surface{text-align:left}[dir=rtl] .mdc-tooltip--multiline .mat-mdc-tooltip-surface{text-align:right}.mat-mdc-tooltip-panel{line-height:normal}.mat-mdc-tooltip-panel.mat-mdc-tooltip-panel-non-interactive{pointer-events:none}@keyframes mat-mdc-tooltip-show{0%{opacity:0;transform:scale(0.8)}100%{opacity:1;transform:scale(1)}}@keyframes mat-mdc-tooltip-hide{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0.8)}}.mat-mdc-tooltip-show{animation:mat-mdc-tooltip-show 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-mdc-tooltip-hide{animation:mat-mdc-tooltip-hide 75ms cubic-bezier(0.4, 0, 1, 1) forwards}
2
- `],encapsulation:2,changeDetection:0})}return n})();var bt=(()=>{class n{static \u0275fac=function(e){return new(e||n)};static \u0275mod=N({type:n});static \u0275inj=P({providers:[I],imports:[W,nt,v,v,et]})}return n})();export{Tt as a,bt as b};
@@ -1 +0,0 @@
1
- import{a as ne,b as ie,c as ae}from"./chunk-ZVUH3ISD.js";import{a as U,b as X,c as Y,d as ee,f as te,g as O}from"./chunk-7NRE3SNA.js";import{a as I,b as J}from"./chunk-LBRCWYRN.js";import"./chunk-P5IU57TV.js";import"./chunk-NDSAQ2HK.js";import{j}from"./chunk-YYAZGY5M.js";import"./chunk-OHX55ZU4.js";import{c as $,d as G,e as Z}from"./chunk-SR5JAOLW.js";import"./chunk-YNQPX5G6.js";import"./chunk-KLH6B22T.js";import{i as K,j as H}from"./chunk-Q3N4MMWW.js";import{h as L}from"./chunk-Y6B6X4Y6.js";import{$b as C,Eb as P,Fb as D,Ib as F,Jb as q,Kb as _,Lb as l,Mb as d,Nb as b,Sb as N,Ub as E,Wb as z,_a as u,_b as f,ac as y,ea as W,ic as p,ja as S,jc as w,ka as M,pb as x,ta as k}from"./chunk-K43KW4K2.js";var se=["canvas"];function le(a,t){if(a&1&&(l(0,"mat-card-subtitle"),p(1),d()),a&2){let e=z();u(),w(e.subtitle)}}function de(a,t){a&1&&b(0,"dm-skeleton",2)}function me(a,t){a&1&&b(0,"dm-empty",3)}function pe(a,t){a&1&&(l(0,"div",4),b(1,"canvas",null,0),d())}var ce=["compileChart"],ue=["bundleChart"],he=["errorChart"],ge=["restartChart"],fe=(a,t)=>t.name;function Ce(a,t){if(a&1&&(l(0,"mat-button-toggle",13)(1,"dm-mono"),p(2),d()()),a&2){let e=t.$implicit;_("value",e.name),u(2),w(e.name)}}I.register(...J);function v(a){return getComputedStyle(document.documentElement).getPropertyValue(a).trim()}function ye(a,t){let e=new Date(a);return t==="24h"?e.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):e.toLocaleDateString([],{month:"short",day:"numeric"})}var R=class a{canvasRef;chart;loading=!0;empty=!1;title="";subtitle="";pendingCfg=null;ngAfterViewInit(){this.pendingCfg&&this.applyCfg(this.pendingCfg)}setData(t){if(this.title=t.title,this.subtitle=t.subtitle??"",this.loading=!1,this.empty=t.datasets.every(r=>!r.data?.length),this.empty){this.destroy();return}let e=matchMedia("(prefers-reduced-motion: reduce)").matches,n=v("--mat-sys-outline-variant")||"rgba(120,120,120,0.3)",i={type:t.chartType,data:{labels:t.labels,datasets:t.datasets},options:{responsive:!0,maintainAspectRatio:!1,animation:e?!1:{duration:200},plugins:{legend:{position:"bottom",labels:{boxWidth:12}}},scales:{x:{stacked:!!t.stacked,ticks:{maxTicksLimit:8,autoSkip:!0},grid:{color:n}},y:{stacked:!!t.stacked,beginAtZero:!0,title:t.yLabel?{display:!0,text:t.yLabel}:void 0,grid:{color:n}}}}};if(!this.canvasRef){this.pendingCfg=i;return}this.applyCfg(i)}applyCfg(t){let e=this.canvasRef?.nativeElement;if(!e){this.pendingCfg=t;return}this.chart&&this.chart.destroy(),this.chart=new I(e,t),this.pendingCfg=null}setLoading(){this.loading=!0,this.empty=!1,this.destroy()}destroy(){this.chart?.destroy(),this.chart=void 0}ngOnDestroy(){this.destroy()}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=x({type:a,selectors:[["dm-trend-chart"]],viewQuery:function(e,n){if(e&1&&f(se,5),e&2){let i;C(i=y())&&(n.canvasRef=i.first)}},decls:9,vars:3,consts:[["canvas",""],[1,"dm-trend-card"],["height","220px"],["icon","query_stats","title","No data","hint","Run the app to populate this metric"],[1,"dm-chart-box"]],template:function(e,n){e&1&&(l(0,"mat-card",1)(1,"mat-card-header")(2,"mat-card-title"),p(3),d(),P(4,le,2,1,"mat-card-subtitle"),d(),l(5,"mat-card-content"),P(6,de,1,0,"dm-skeleton",2)(7,me,1,0,"dm-empty",3)(8,pe,3,0,"div",4),d()()),e&2&&(u(3),w(n.title),u(),D(n.subtitle?4:-1),u(2),D(n.loading?6:n.empty?7:8))},dependencies:[L,O,U,Y,te,ee,X,G,$],styles:["[_nghost-%COMP%]{display:block}.dm-trend-card[_ngcontent-%COMP%]{height:100%}.dm-chart-box[_ngcontent-%COMP%]{position:relative;height:220px}"],changeDetection:0})},re=class a{api=W(H);window=k("7d");appFilter=k("__all__");compileChart;bundleChart;errorChart;restartChart;timer;async ngOnInit(){await this.api.refresh(),await this.loadAll(),this.timer=setInterval(()=>{this.loadAll(!0)},6e4)}ngOnDestroy(){this.timer&&clearInterval(this.timer)}onWindowChange(t){this.window.set(t),this.loadAll()}onAppChange(t){this.appFilter.set(t),this.loadAll()}async loadAll(t=!1){let e=this.window(),n=this.appFilter(),i=n==="__all__"?this.api.apps().map(o=>o.name):[n];t||(this.compileChart?.setLoading(),this.bundleChart?.setLoading(),this.errorChart?.setLoading(),this.restartChart?.setLoading());let r=v("--mat-sys-primary")||"#6750a4",s=v("--mat-sys-tertiary")||"#7d5260",g=v("--mat-sys-error")||"#b3261e",oe=v("--mat-sys-secondary")||"#625b71",m=[r,s,oe,g,"color-mix(in oklch, "+r+" 60%, transparent)","color-mix(in oklch, "+s+" 60%, transparent)"],[A,Q,B,V]=await Promise.all([this.fetchSeries(i,"compile",e),this.fetchSeries(i,"bundle",e),this.fetchSeries(i,"errors",e),this.fetchSeries(i,"restarts",e)]),c=this.unionLabels([A,Q,B,V],e);this.compileChart?.setData({title:"Compile time",subtitle:"avg ms per "+(e==="24h"?"hour":"day"),chartType:"line",labels:c.labels,datasets:A.map((o,h)=>({label:o.app,data:this.align(o.points,c.buckets,"v"),borderColor:m[h%m.length],backgroundColor:"transparent",borderWidth:1.4,tension:.3,pointRadius:0})),yLabel:"ms"});let T=[];Q.forEach((o,h)=>{T.push({label:o.app+" \xB7 initialKB",data:this.align(o.points,c.buckets,"v"),backgroundColor:m[h*2%m.length],stack:o.app}),T.push({label:o.app+" \xB7 lazyKB",data:this.align(o.points,c.buckets,"v2"),backgroundColor:m[(h*2+1)%m.length],stack:o.app})}),this.bundleChart?.setData({title:"Bundle size",subtitle:"initial + lazy KB, stacked",chartType:"bar",labels:c.labels,datasets:T,stacked:!0,yLabel:"KB"}),this.errorChart?.setData({title:"Error frequency",subtitle:"errors per "+(e==="24h"?"hour":"day"),chartType:"bar",labels:c.labels,datasets:B.map((o,h)=>({label:o.app,data:this.align(o.points,c.buckets,"v"),backgroundColor:m[h%m.length]})),yLabel:"count"}),this.restartChart?.setData({title:"Restart rate",subtitle:"error\u2192starting transitions per "+(e==="24h"?"hour":"day"),chartType:"bar",labels:c.labels,datasets:V.map((o,h)=>({label:o.app,data:this.align(o.points,c.buckets,"v"),backgroundColor:m[h%m.length]})),yLabel:"count"})}async fetchSeries(t,e,n){return t.length===0?[]:(await Promise.all(t.map(async r=>{let s=await this.api.getTrends({app:r,metric:e,since:n});return{app:r,points:s?.points??[]}}))).filter(r=>r.points.length>0)}unionLabels(t,e){let n=new Set;for(let r of t)for(let s of r)for(let g of s.points)n.add(g.t);let i=[...n].sort((r,s)=>r-s);return{buckets:i,labels:i.map(r=>ye(r,e))}}align(t,e,n){let i=new Map;for(let r of t)i.set(r.t,r);return e.map(r=>{let s=i.get(r);if(!s)return 0;let g=n==="v"?s.v:s.v2;return typeof g=="number"?g:0})}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=x({type:a,selectors:[["dm-trends-page"]],viewQuery:function(e,n){if(e&1&&(f(ce,5),f(ue,5),f(he,5),f(ge,5)),e&2){let i;C(i=y())&&(n.compileChart=i.first),C(i=y())&&(n.bundleChart=i.first),C(i=y())&&(n.errorChart=i.first),C(i=y())&&(n.restartChart=i.first)}},decls:28,vars:2,consts:[["compileChart",""],["bundleChart",""],["errorChart",""],["restartChart",""],[1,"dm-page-header"],[1,"dm-page-sub"],[1,"dm-controls"],["hideSingleSelectionIndicator","","aria-label","Time window",3,"change","value"],["value","24h"],["value","7d"],["value","30d"],["hideSingleSelectionIndicator","","aria-label","App scope",3,"change","value"],["value","__all__"],[3,"value"],[1,"dm-grid"]],template:function(e,n){if(e&1){let i=N();l(0,"div",4)(1,"div")(2,"h1"),p(3,"Trends"),d(),l(4,"div",5),p(5,"Historical compile \xB7 bundle \xB7 error \xB7 restart trends"),d()(),l(6,"div",6)(7,"mat-button-toggle-group",7),E("change",function(s){return S(i),M(n.onWindowChange(s.value))}),l(8,"mat-button-toggle",8),p(9,"24h"),d(),l(10,"mat-button-toggle",9),p(11,"7d"),d(),l(12,"mat-button-toggle",10),p(13,"30d"),d()(),l(14,"mat-button-toggle-group",11),E("change",function(s){return S(i),M(n.onAppChange(s.value))}),l(15,"mat-button-toggle",12),p(16,"All apps"),d(),F(17,Ce,3,2,"mat-button-toggle",13,fe),d()()(),l(19,"div",14),b(20,"dm-trend-chart",null,0)(22,"dm-trend-chart",null,1)(24,"dm-trend-chart",null,2)(26,"dm-trend-chart",null,3),d()}e&2&&(u(7),_("value",n.window()),u(7),_("value",n.appFilter()),u(3),q(n.api.apps()))},dependencies:[L,j,O,ae,ne,ie,K,Z,R],styles:["[_nghost-%COMP%]{display:block}.dm-page-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;flex-wrap:wrap;margin-bottom:1rem}.dm-page-sub[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:.875rem}.dm-controls[_ngcontent-%COMP%]{display:flex;gap:.75rem;flex-wrap:wrap}.dm-grid[_ngcontent-%COMP%]{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(28rem,1fr))}"],changeDetection:0})};export{R as TrendChartComponent,re as TrendsPageComponent};
@@ -1 +0,0 @@
1
- import{a as ke,b as Se}from"./chunk-XXIJQBCQ.js";import"./chunk-YNQPX5G6.js";import"./chunk-IQZZO5IM.js";import"./chunk-KLH6B22T.js";import{a as he,b as fe,c as ve,d as ye,e as xe,f as be}from"./chunk-5PAHWCG5.js";import{a as pe,b as ce,d as ue,e as ge,g as _e,h as Ce,i as Ee,j as N}from"./chunk-Q3N4MMWW.js";import"./chunk-Y6B6X4Y6.js";import{$ as D,Ab as ae,Bb as se,Ca as I,Db as k,Eb as y,Fb as x,Hb as B,Ia as ee,Ib as w,Jb as T,Kb as S,Lb as d,Mb as l,Nb as C,Ob as a,Pb as s,Sb as M,Ub as h,Vb as P,Wb as u,Y as W,Za as R,_a as m,ca as Y,cb as te,ea as c,eb as ne,fa as q,gc as A,ha as X,hb as oe,ia as Z,ic as i,ja as b,jc as f,ka as _,kb as ie,na as G,oa as J,pb as v,sc as de,ta as g,ua as Q,vb as re,vc as le,xc as me}from"./chunk-K43KW4K2.js";var Ie="@",Re=(()=>{class o{doc;delegate;zone;animationType;moduleImpl;_rendererFactoryPromise=null;scheduler=null;injector=c(G);loadingSchedulerFn=c(Ae,{optional:!0});_engine;constructor(t,n,r,p,E){this.doc=t,this.delegate=n,this.zone=r,this.animationType=p,this.moduleImpl=E}ngOnDestroy(){this._engine?.flush()}loadImpl(){let t=()=>this.moduleImpl??import("./chunk-UC3XMN2Y.js").then(r=>r),n;return this.loadingSchedulerFn?n=this.loadingSchedulerFn(t):n=t(),n.catch(r=>{throw new W(5300,!1)}).then(({\u0275createEngine:r,\u0275AnimationRendererFactory:p})=>{this._engine=r(this.animationType,this.doc);let E=new p(this.delegate,this._engine,this.zone);return this.delegate=E,E})}createRenderer(t,n){let r=this.delegate.createRenderer(t,n);if(r.\u0275type===0)return r;typeof r.throwOnSyntheticProps=="boolean"&&(r.throwOnSyntheticProps=!1);let p=new z(r);return n?.data?.animation&&!this._rendererFactoryPromise&&(this._rendererFactoryPromise=this.loadImpl()),this._rendererFactoryPromise?.then(E=>{let De=E.createRenderer(t,n);p.use(De),this.scheduler??=this.injector.get(Q,null,{optional:!0}),this.scheduler?.notify(10)}).catch(E=>{p.use(r)}),p}begin(){this.delegate.begin?.()}end(){this.delegate.end?.()}whenRenderingDone(){return this.delegate.whenRenderingDone?.()??Promise.resolve()}componentReplaced(t){this._engine?.flush(),this.delegate.componentReplaced?.(t)}static \u0275fac=function(n){ie()};static \u0275prov=D({token:o,factory:o.\u0275fac})}return o})(),z=class{delegate;replay=[];\u0275type=1;constructor(e){this.delegate=e}use(e){if(this.delegate=e,this.replay!==null){for(let t of this.replay)t(e);this.replay=null}}get data(){return this.delegate.data}destroy(){this.replay=null,this.delegate.destroy()}createElement(e,t){return this.delegate.createElement(e,t)}createComment(e){return this.delegate.createComment(e)}createText(e){return this.delegate.createText(e)}get destroyNode(){return this.delegate.destroyNode}appendChild(e,t){this.delegate.appendChild(e,t)}insertBefore(e,t,n,r){this.delegate.insertBefore(e,t,n,r)}removeChild(e,t,n,r){this.delegate.removeChild(e,t,n,r)}selectRootElement(e,t){return this.delegate.selectRootElement(e,t)}parentNode(e){return this.delegate.parentNode(e)}nextSibling(e){return this.delegate.nextSibling(e)}setAttribute(e,t,n,r){this.delegate.setAttribute(e,t,n,r)}removeAttribute(e,t,n){this.delegate.removeAttribute(e,t,n)}addClass(e,t){this.delegate.addClass(e,t)}removeClass(e,t){this.delegate.removeClass(e,t)}setStyle(e,t,n,r){this.delegate.setStyle(e,t,n,r)}removeStyle(e,t,n){this.delegate.removeStyle(e,t,n)}setProperty(e,t,n){this.shouldReplay(t)&&this.replay.push(r=>r.setProperty(e,t,n)),this.delegate.setProperty(e,t,n)}setValue(e,t){this.delegate.setValue(e,t)}listen(e,t,n,r){return this.shouldReplay(t)&&this.replay.push(p=>p.listen(e,t,n,r)),this.delegate.listen(e,t,n,r)}shouldReplay(e){return this.replay!==null&&e.startsWith(Ie)}},Ae=new Y("");function Me(o="animations"){return te("NgAsyncAnimations"),q([{provide:oe,useFactory:(e,t,n)=>new Re(e,t,n,o),deps:[J,pe,ne]},{provide:ee,useValue:o==="noop"?"NoopAnimations":"BrowserAnimations"}])}var Ne=o=>({exact:o}),Fe=(o,e)=>e.path;function Le(o,e){o&1&&(d(0,"span"),i(1,"daimon"),l())}function Ke(o,e){if(o&1&&(d(0,"span",6),i(1),l()),o&2){let t=u().$implicit;m(),f(t.label)}}function je(o,e){if(o&1&&(d(0,"a",5)(1,"mat-icon",2),i(2),l(),y(3,Ke,2,1,"span",6),l()),o&2){let t=e.$implicit,n=u();S("routerLink",t.path)("routerLinkActiveOptions",de(5,Ne,t.path==="/"))("matTooltip",n.expanded()?t.shortcut:t.label+" \xB7 "+t.shortcut),m(2),f(t.icon),m(),x(n.expanded()?3:-1)}}var He=[{path:"/",icon:"apps",label:"Apps",shortcut:"g a"},{path:"/errors",icon:"error",label:"Errors",shortcut:"g e"},{path:"/logs",icon:"terminal",label:"Logs",shortcut:"g l"},{path:"/config",icon:"tune",label:"Settings",shortcut:"g s"},{path:"/doctor",icon:"medical_services",label:"Doctor",shortcut:"g d"},{path:"/events",icon:"timeline",label:"Events",shortcut:"g v"},{path:"/history",icon:"query_stats",label:"History",shortcut:"g h"},{path:"/trends",icon:"show_chart",label:"Trends",shortcut:"g t"},{path:"/sessions",icon:"radio_button_checked",label:"Sessions",shortcut:"g n"}],we="daimon.nav.expanded",F=class o{entries=He;expanded=g(!0);ngOnInit(){let e=localStorage.getItem(we);e!==null&&this.expanded.set(e==="1")}toggle(){this.expanded.update(e=>!e),localStorage.setItem(we,this.expanded()?"1":"0")}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=v({type:o,selectors:[["dm-nav-rail"]],decls:11,vars:5,consts:[[1,"dm-rail"],[1,"dm-rail-toggle",3,"click"],["fontSet","material-symbols-outlined"],[1,"dm-rail-brand"],[1,"dm-rail-items"],["routerLinkActive","active","matTooltipPosition","right",1,"dm-rail-item",3,"routerLink","routerLinkActiveOptions","matTooltip"],[1,"dm-rail-label"]],template:function(t,n){t&1&&(d(0,"nav",0)(1,"button",1),h("click",function(){return n.toggle()}),d(2,"mat-icon",2),i(3),l()(),d(4,"div",3)(5,"mat-icon",2),i(6,"developer_board"),l(),y(7,Le,2,0,"span"),l(),d(8,"div",4),w(9,je,4,7,"a",5,Fe),l()()),t&2&&(A("expanded",n.expanded()),m(),k("aria-label",n.expanded()?"Collapse":"Expand"),m(2),f(n.expanded()?"menu_open":"menu"),m(4),x(n.expanded()?7:-1),m(2),T(n.entries))},dependencies:[ve,ye,Ee,Ce,Se,ke],styles:["[_nghost-%COMP%]{display:contents}.dm-rail[_ngcontent-%COMP%]{grid-area:rail;display:flex;flex-direction:column;background:var(--mat-sys-surface-container);border-right:1px solid var(--mat-sys-outline-variant);width:64px;transition:width var(--dm-motion-medium) var(--dm-motion-easing-emphasized);overflow:hidden;-webkit-user-select:none;user-select:none}.dm-rail.expanded[_ngcontent-%COMP%]{width:240px}.dm-rail-toggle[_ngcontent-%COMP%]{border:none;background:transparent;color:var(--mat-sys-on-surface-variant);padding:12px;cursor:pointer;align-self:flex-end;display:flex;align-items:center;justify-content:center}.dm-rail-toggle[_ngcontent-%COMP%]:hover{color:var(--mat-sys-on-surface)}.dm-rail-brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:0 16px 12px 20px;color:var(--mat-sys-primary);font:500 1rem/1.5rem Roboto;letter-spacing:.009rem}.dm-rail-items[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px;padding:8px}.dm-rail-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:10px 12px;border-radius:12px;color:var(--mat-sys-on-surface-variant);text-decoration:none;font:500 .875rem/1.25rem Roboto;transition:background var(--dm-motion-short) var(--dm-motion-easing),color var(--dm-motion-short) var(--dm-motion-easing);white-space:nowrap}.dm-rail-item[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface)}.dm-rail-item.active[_ngcontent-%COMP%]{background:color-mix(in oklch,var(--mat-sys-primary) 14%,transparent);color:var(--mat-sys-primary)}.dm-rail-label[_ngcontent-%COMP%]{flex:1}"],changeDetection:0})};function Ve(o,e){if(o&1){let t=M();a(0,"div",2)(1,"button",3),P("click",function(){b(t);let r=u();return _(r.set("auto"))}),i(2,"Auto"),s(),a(3,"button",3),P("click",function(){b(t);let r=u();return _(r.set("light"))}),i(4,"Light"),s(),a(5,"button",3),P("click",function(){b(t);let r=u();return _(r.set("dark"))}),i(6,"Dark"),s()()}}var Te="daimon.theme",K=class o{theme=g("auto");host=c(I);open=g(!1);icon=()=>this.theme()==="dark"?"dark_mode":this.theme()==="light"?"light_mode":"contrast";ngOnInit(){let e=localStorage.getItem(Te)||"auto";this.set(e,!1)}set(e,t=!0){this.theme.set(e),localStorage.setItem(Te,e);let n=document.documentElement;e==="auto"?n.style.removeProperty("color-scheme"):n.style.setProperty("color-scheme",e),t&&this.open.set(!1)}onDocClick(e){this.open()&&(this.host.nativeElement.contains(e.target)||this.open.set(!1))}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=v({type:o,selectors:[["dm-theme-toggle"]],hostBindings:function(t,n){t&1&&h("click",function(p){return n.onDocClick(p)},R)},decls:4,vars:3,consts:[["type","button","aria-label","Theme","aria-haspopup","true",1,"tt-btn",3,"click"],[1,"material-symbols-outlined"],["role","menu",1,"tt-pop"],["type","button","role","menuitem",3,"click"]],template:function(t,n){t&1&&(a(0,"button",0),P("click",function(){return n.open.set(!n.open())}),a(1,"span",1),i(2),s()(),y(3,Ve,7,0,"div",2)),t&2&&(k("aria-expanded",n.open()),m(2),f(n.icon()),m(),x(n.open()?3:-1))},styles:["[_nghost-%COMP%]{position:relative;display:inline-block}.tt-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border:0;background:transparent;border-radius:999px;color:var(--mat-sys-on-surface-variant);cursor:pointer}.tt-btn[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface)}.tt-btn[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:20px}.tt-pop[_ngcontent-%COMP%]{position:absolute;right:0;top:calc(100% + 4px);min-width:140px;background:var(--mat-sys-surface-container-high);border:1px solid var(--mat-sys-outline-variant);border-radius:10px;padding:4px;box-shadow:var(--mat-sys-level2);z-index:50;display:flex;flex-direction:column;gap:1px}.tt-pop[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;padding:8px 12px;background:transparent;border:0;border-radius:6px;text-align:left;color:var(--mat-sys-on-surface);font:500 .8125rem/1.25rem Roboto;cursor:pointer}.tt-pop[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-highest)}"],changeDetection:0})};function Be(o,e){if(o&1){let t=M();d(0,"button",13),h("click",function(){let r=b(t).$implicit,p=u(2);return _(p.setWorkspace(r))}),i(1),l()}if(o&2){let t=e.$implicit;m(),f(t)}}function ze(o,e){if(o&1){let t=M();d(0,"div",5)(1,"button",13),h("click",function(){b(t);let r=u();return _(r.setWorkspace(null))}),i(2,"All workspaces"),l(),w(3,Be,2,1,"button",14,B),l()}if(o&2){let t=u();m(3),T(t.api.workspaces())}}function $e(o,e){o&1&&(d(0,"div",15),i(1,"No profiles configured"),l())}function Ue(o,e){if(o&1){let t=M();d(0,"div",16)(1,"span",17),i(2),l(),d(3,"button",18),h("click",function(){let r=b(t).$implicit,p=u(2);return _(p.runProfile(r))}),d(4,"span",3),i(5,"rocket_launch"),l()()()}if(o&2){let t=e.$implicit;m(2),f(t)}}function We(o,e){if(o&1&&(d(0,"div",5),y(1,$e,2,0,"div",15),w(2,Ue,6,1,"div",16,B),l()),o&2){let t=u();m(),x(t.profiles().length?-1:1),m(),T(t.profiles())}}var $="daimon.workspace",Pe="daimon.profile",j=class o{api=c(N);host=c(I);workspace=g(null);profile=g(null);profiles=g([]);openMenu=g(null);filteredCount=me(()=>{let e=this.workspace();return e?this.api.apps().filter(t=>t.workspaceLabel===e).length:this.api.apps().length});ngOnInit(){this.workspace.set(localStorage.getItem($)),this.profile.set(localStorage.getItem(Pe)),this.loadProfiles()}toggle(e){this.openMenu.update(t=>t===e?null:e)}onDocClick(e){if(!this.openMenu())return;let t=e.target;this.host.nativeElement.contains(t)||this.openMenu.set(null)}async loadProfiles(){try{let e=await fetch("/api/config");if(!e.ok)return;let t=await e.json(),n=t?.config?.profiles?Object.keys(t.config.profiles):[];this.profiles.set(n)}catch{}}setWorkspace(e){this.workspace.set(e),e?localStorage.setItem($,e):localStorage.removeItem($),window.dispatchEvent(new CustomEvent("daimon:workspace",{detail:e})),this.openMenu.set(null)}toast(e,t=3e3){let n=document.getElementById("dm-toast-host");n||(n=document.createElement("div"),n.id="dm-toast-host",n.style.cssText="position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:9999;display:flex;flex-direction:column;gap:8px;pointer-events:none",document.body.appendChild(n));let r=document.createElement("div");r.textContent=e,r.style.cssText="pointer-events:auto;padding:10px 16px;background:var(--mat-sys-inverse-surface,#322f35);color:var(--mat-sys-inverse-on-surface,#f5eff4);border-radius:8px;font:500 .8125rem/1.25rem Roboto;box-shadow:var(--mat-sys-level3,0 4px 12px rgba(0,0,0,.25))",n.appendChild(r),setTimeout(()=>{try{r.remove()}catch{}},t)}async runProfile(e){this.profile.set(e),localStorage.setItem(Pe,e),this.openMenu.set(null),this.toast(`Bringing up profile "${e}"\u2026`,2e3);try{let t=await this.api.ensureUp(e),n=Array.isArray(t?.apps)?`${t.apps.length} apps ready`:"done";this.toast(`Profile "${e}": ${n}`,3e3)}catch(t){this.toast(`Profile "${e}" failed: ${t?.message??"error"}`,5e3)}}onCmdK(){window.dispatchEvent(new CustomEvent("daimon:cmdk"))}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=v({type:o,selectors:[["dm-topbar"]],hostBindings:function(t,n){t&1&&h("click",function(p){return n.onDocClick(p)},R)},decls:32,vars:12,consts:[[1,"dm-topbar"],[1,"dm-popwrap"],["type","button","aria-haspopup","true",1,"dm-chip",3,"click","title"],[1,"material-symbols-outlined"],[1,"material-symbols-outlined","dm-chip-caret"],["role","menu",1,"dm-pop"],[1,"dm-topbar-spacer"],[1,"dm-conn",3,"title"],[1,"dm-conn-dot"],[1,"dm-conn-text"],["type","button","title","Command palette",1,"dm-cmdk",3,"click"],[2,"margin","0 .5rem"],[1,"dm-kbd"],["type","button","role","menuitem",3,"click"],["type","button","role","menuitem"],[1,"dm-pop-empty"],["role","menuitem",1,"dm-pop-row"],[1,"dm-pop-label"],["type","button","title","ensure-up",1,"dm-pop-go",3,"click"]],template:function(t,n){t&1&&(d(0,"header",0)(1,"div",1)(2,"button",2),h("click",function(){return n.toggle("ws")}),d(3,"span",3),i(4,"folder_open"),l(),d(5,"span"),i(6),l(),d(7,"span",4),i(8,"expand_more"),l()(),y(9,ze,5,0,"div",5),l(),d(10,"div",1)(11,"button",2),h("click",function(){return n.toggle("profile")}),d(12,"span",3),i(13,"play_circle"),l(),d(14,"span"),i(15),l(),d(16,"span",4),i(17,"expand_more"),l()(),y(18,We,4,1,"div",5),l(),C(19,"span",6),d(20,"span",7),C(21,"span",8),d(22,"span",9),i(23),l()(),d(24,"button",10),h("click",function(){return n.onCmdK()}),d(25,"span",3),i(26,"search"),l(),d(27,"span",11),i(28,"Jump to\u2026"),l(),d(29,"kbd",12),i(30,"\u2318K"),l()(),C(31,"dm-theme-toggle"),l()),t&2&&(m(2),S("title","Filter by workspace"),k("aria-expanded",n.openMenu()==="ws"),m(4),f(n.workspace()||"All workspaces"),m(3),x(n.openMenu()==="ws"?9:-1),m(2),S("title","Run profile: ensure-up"),k("aria-expanded",n.openMenu()==="profile"),m(4),f(n.profile()||"No profile"),m(3),x(n.openMenu()==="profile"?18:-1),m(2),A("up",n.api.connected()),S("title",n.api.connected()?"Live event stream connected":"Reconnecting\u2026"),m(3),f(n.api.connected()?"live":"offline"))},dependencies:[K],styles:["[_nghost-%COMP%]{display:contents}.dm-topbar[_ngcontent-%COMP%]{grid-area:topbar;display:flex;align-items:center;gap:.5rem;padding:10px 16px;background:var(--mat-sys-surface);border-bottom:1px solid var(--mat-sys-outline-variant);min-height:56px}.dm-topbar-spacer[_ngcontent-%COMP%]{flex:1}.dm-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;padding:6px 10px;border-radius:999px;background:var(--mat-sys-surface-container);border:1px solid var(--mat-sys-outline-variant);color:var(--mat-sys-on-surface);font:500 .8125rem/1.25rem Roboto;cursor:pointer;transition:background var(--dm-motion-short) var(--dm-motion-easing)}.dm-chip[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high)}.dm-chip[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.dm-chip-caret[_ngcontent-%COMP%]{opacity:.7}.dm-cmdk[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;border-radius:12px!important}.dm-cmdk[_ngcontent-%COMP%] mat-icon[_ngcontent-%COMP%]{font-size:18px;width:18px;height:18px}.dm-kbd[_ngcontent-%COMP%]{font-family:Roboto Mono,ui-monospace,monospace;font-size:.6875rem;padding:2px 6px;border-radius:4px;background:var(--mat-sys-surface-container);border:1px solid var(--mat-sys-outline-variant);color:var(--mat-sys-on-surface-variant)}.dm-conn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;padding:4px 10px;border-radius:999px;font:500 .75rem/1rem Roboto;color:var(--mat-sys-on-surface-variant);background:var(--mat-sys-surface-container)}.dm-conn-dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:999px;background:var(--mat-sys-outline)}.dm-conn.up[_ngcontent-%COMP%] .dm-conn-dot[_ngcontent-%COMP%]{background:var(--mat-sys-primary);box-shadow:0 0 0 4px color-mix(in oklch,var(--mat-sys-primary) 25%,transparent)}.dm-conn.up[_ngcontent-%COMP%] .dm-conn-text[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.dm-popwrap[_ngcontent-%COMP%]{position:relative;display:inline-block}.dm-pop[_ngcontent-%COMP%]{position:absolute;left:0;top:calc(100% + 4px);min-width:200px;max-height:60vh;overflow-y:auto;background:var(--mat-sys-surface-container-high);border:1px solid var(--mat-sys-outline-variant);border-radius:10px;padding:4px;box-shadow:var(--mat-sys-level2);z-index:50;display:flex;flex-direction:column;gap:1px}.dm-pop[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;padding:8px 12px;background:transparent;border:0;border-radius:6px;text-align:left;color:var(--mat-sys-on-surface);font:500 .8125rem/1.25rem Roboto;cursor:pointer}.dm-pop[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-highest)}.dm-pop-empty[_ngcontent-%COMP%]{padding:.5rem 1rem;color:var(--mat-sys-on-surface-variant)}.dm-pop-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:4px 8px}.dm-pop-label[_ngcontent-%COMP%]{flex:1;font:500 .8125rem/1.25rem Roboto;color:var(--mat-sys-on-surface)}.dm-pop-go[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;background:transparent;border:0;border-radius:999px;color:var(--mat-sys-primary);cursor:pointer}.dm-pop-go[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-highest)}.dm-pop-go[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:18px}.dm-cmdk[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;padding:8px 14px;border-radius:12px;background:transparent;border:1px solid var(--mat-sys-outline);color:var(--mat-sys-on-surface);cursor:pointer}.dm-cmdk[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container)}.dm-cmdk[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:18px}"],changeDetection:0})};var U=class o{static \u0275fac=function(t){return new(t||o)};static \u0275cmp=v({type:o,selectors:[["dm-shortcuts-help"]],decls:122,vars:0,consts:[["mat-dialog-title",""],["mat-dialog-content",""],[1,"dm-keys"]],template:function(t,n){t&1&&(a(0,"h2",0),i(1,"Keyboard shortcuts"),s(),a(2,"div",1)(3,"table",2)(4,"tr")(5,"td")(6,"kbd"),i(7,"\u2318K"),s(),i(8," / "),a(9,"kbd"),i(10,"Ctrl+K"),s()(),a(11,"td"),i(12,"Command palette"),s()(),a(13,"tr")(14,"td")(15,"kbd"),i(16,"?"),s()(),a(17,"td"),i(18,"This help"),s()(),a(19,"tr")(20,"td")(21,"kbd"),i(22,"/"),s()(),a(23,"td"),i(24,"Focus filter"),s()(),a(25,"tr")(26,"td")(27,"kbd"),i(28,"g"),s(),a(29,"kbd"),i(30,"a"),s()(),a(31,"td"),i(32,"Apps"),s()(),a(33,"tr")(34,"td")(35,"kbd"),i(36,"g"),s(),a(37,"kbd"),i(38,"e"),s()(),a(39,"td"),i(40,"Errors"),s()(),a(41,"tr")(42,"td")(43,"kbd"),i(44,"g"),s(),a(45,"kbd"),i(46,"l"),s()(),a(47,"td"),i(48,"Logs"),s()(),a(49,"tr")(50,"td")(51,"kbd"),i(52,"g"),s(),a(53,"kbd"),i(54,"s"),s()(),a(55,"td"),i(56,"Settings"),s()(),a(57,"tr")(58,"td")(59,"kbd"),i(60,"g"),s(),a(61,"kbd"),i(62,"d"),s()(),a(63,"td"),i(64,"Doctor"),s()(),a(65,"tr")(66,"td")(67,"kbd"),i(68,"g"),s(),a(69,"kbd"),i(70,"v"),s()(),a(71,"td"),i(72,"Events"),s()(),a(73,"tr")(74,"td")(75,"kbd"),i(76,"g"),s(),a(77,"kbd"),i(78,"h"),s()(),a(79,"td"),i(80,"History"),s()(),a(81,"tr")(82,"td")(83,"kbd"),i(84,"g"),s(),a(85,"kbd"),i(86,"t"),s()(),a(87,"td"),i(88,"Trends"),s()(),a(89,"tr")(90,"td")(91,"kbd"),i(92,"j"),s(),i(93," / "),a(94,"kbd"),i(95,"k"),s()(),a(96,"td"),i(97,"Next / prev item"),s()(),a(98,"tr")(99,"td")(100,"kbd"),i(101,"s"),s()(),a(102,"td"),i(103,"Start focused app"),s()(),a(104,"tr")(105,"td")(106,"kbd"),i(107,"r"),s()(),a(108,"td"),i(109,"Restart focused app"),s()(),a(110,"tr")(111,"td")(112,"kbd"),i(113,"x"),s()(),a(114,"td"),i(115,"Stop focused app"),s()(),a(116,"tr")(117,"td")(118,"kbd"),i(119,"."),s()(),a(120,"td"),i(121,"Toggle list / cards"),s()()()())},styles:[".dm-keys[_ngcontent-%COMP%]{width:100%;border-collapse:collapse}.dm-keys[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:.375rem .5rem;vertical-align:middle}.dm-keys[_ngcontent-%COMP%] td[_ngcontent-%COMP%]:first-child{width:9rem}kbd[_ngcontent-%COMP%]{font-family:Roboto Mono,ui-monospace,monospace;font-size:.75rem;padding:2px 6px;border-radius:4px;background:var(--mat-sys-surface-container);border:1px solid var(--mat-sys-outline-variant)}"],changeDetection:0})},H=class o{router=c(fe);envInjector=c(X);pending=null;pendingTimer;handler=e=>this.onKey(e);async openShortcutsDialog(){let{MatDialog:e}=await import("./chunk-YNCTXEXX.js");Z(this.envInjector,()=>{c(e).open(U,{width:"420px"})})}install(){window.addEventListener("keydown",this.handler)}uninstall(){window.removeEventListener("keydown",this.handler)}onKey(e){let t=e.target;if(!(t&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable))){if((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()==="k"){e.preventDefault(),window.dispatchEvent(new CustomEvent("daimon:cmdk"));return}if(!(e.metaKey||e.ctrlKey||e.altKey)){if(this.pending==="g"){this.pending=null,this.pendingTimer&&clearTimeout(this.pendingTimer);let r={a:"/",e:"/errors",l:"/logs",s:"/config",d:"/doctor",v:"/events",h:"/history",t:"/trends",n:"/sessions",r:"/errors",c:"/config"}[e.key.toLowerCase()];r&&(e.preventDefault(),this.router.navigateByUrl(r));return}if(e.key==="?"){e.preventDefault(),this.openShortcutsDialog();return}if(e.key==="/"){e.preventDefault(),window.dispatchEvent(new CustomEvent("daimon:focus-filter"));return}if(e.key==="g"){this.pending="g",this.pendingTimer=setTimeout(()=>this.pending=null,1200);return}if(e.key==="."){e.preventDefault(),window.dispatchEvent(new CustomEvent("daimon:toggle-density"));return}["j","k","s","r","x"].includes(e.key)&&window.dispatchEvent(new CustomEvent("daimon:key",{detail:e.key}))}}}static \u0275fac=function(t){return new(t||o)};static \u0275prov=D({token:o,factory:o.\u0275fac,providedIn:"root"})};var Ye=()=>[import("./chunk-GDJOSLWM.js").then(o=>o.CommandPaletteComponent)];function qe(o,e){o&1&&C(0,"dm-command-palette")}var V=class o{api=c(N);keys=c(H);paletteActivated=g(!1);onCmdK=()=>{this.paletteActivated()||(this.paletteActivated.set(!0),setTimeout(()=>window.dispatchEvent(new CustomEvent("daimon:cmdk")),50))};ngOnInit(){this.api.start(),this.keys.install(),window.addEventListener("daimon:cmdk",this.onCmdK)}ngOnDestroy(){this.api.stop(),this.keys.uninstall(),window.removeEventListener("daimon:cmdk",this.onCmdK)}static \u0275fac=function(t){return new(t||o)};static \u0275cmp=v({type:o,selectors:[["dm-root"]],decls:8,vars:1,consts:[[1,"dm-shell"],[1,"dm-main"]],template:function(t,n){t&1&&(d(0,"div",0),C(1,"dm-nav-rail")(2,"dm-topbar"),d(3,"main",1),C(4,"router-outlet"),l()(),re(5,qe,1,0),ae(6,5,Ye)),t&2&&(m(6),se(n.paletteActivated()))},dependencies:[he,F,j],styles:['[_nghost-%COMP%]{display:block;height:100vh}.dm-shell[_ngcontent-%COMP%]{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto 1fr;grid-template-areas:"rail topbar" "rail main";height:100vh;min-height:100vh}.dm-main[_ngcontent-%COMP%]{grid-area:main;overflow-y:auto;padding:1.5rem;background:var(--mat-sys-surface)}'],changeDetection:0})};var Oe=[{path:"",loadComponent:()=>import("./chunk-J5UK77OJ.js").then(o=>o.AppsListComponent)},{path:"apps/:name",loadComponent:()=>import("./chunk-HYGMRGYR.js").then(o=>o.AppDetailComponent)},{path:"events",loadComponent:()=>import("./chunk-HYIZMKSF.js").then(o=>o.EventsFeedComponent)},{path:"logs",loadComponent:()=>import("./chunk-JI63U3KC.js").then(o=>o.LogsPageComponent)},{path:"logs/:name",loadComponent:()=>import("./chunk-JI63U3KC.js").then(o=>o.LogsPageComponent)},{path:"errors",loadComponent:()=>import("./chunk-BDYOKQF3.js").then(o=>o.ErrorsPanelComponent)},{path:"doctor",loadComponent:()=>import("./chunk-MHYQENOC.js").then(o=>o.DoctorPageComponent)},{path:"config",loadComponent:()=>import("./chunk-OUXULJ3Z.js").then(o=>o.ConfigEditorComponent)},{path:"history",loadComponent:()=>import("./chunk-6C6GHU3A.js").then(o=>o.HistoryPageComponent)},{path:"history/:name",loadComponent:()=>import("./chunk-6C6GHU3A.js").then(o=>o.HistoryPageComponent)},{path:"trends",loadComponent:()=>import("./chunk-ZDNBWNU5.js").then(o=>o.TrendsPageComponent)},{path:"sessions",loadComponent:()=>import("./chunk-UU5K6ZPO.js").then(o=>o.SessionsPageComponent)},{path:"requests/:name",loadComponent:()=>import("./chunk-L2PHC6DL.js").then(o=>o.RequestsPageComponent)},{path:"**",redirectTo:""}];ce(V,{providers:[le(),Me(),ue(ge()),xe(Oe,be()),{provide:_e,useValue:{fontSet:"material-symbols-outlined"}}]}).catch(o=>console.error(o));