daimon 0.6.0 → 0.7.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.
- package/CHANGELOG.md +52 -0
- package/README.md +43 -29
- package/dist/cli.js +78 -69
- package/dist/dashboard/browser/{chunk-7L4DWDGL.js → chunk-25VLDASM.js} +1 -1
- package/dist/dashboard/browser/{chunk-ESDYJ3BP.js → chunk-5PAHWCG5.js} +1 -1
- package/dist/dashboard/browser/chunk-6BDWIJ3G.js +3 -0
- package/dist/dashboard/browser/chunk-6C6GHU3A.js +1 -0
- package/dist/dashboard/browser/{chunk-L63FHXGH.js → chunk-7NRE3SNA.js} +3 -3
- package/dist/dashboard/browser/chunk-BDYOKQF3.js +1 -0
- package/dist/dashboard/browser/{chunk-UNT27XFJ.js → chunk-CILFSVSP.js} +1 -1
- package/dist/dashboard/browser/{chunk-4ZR4NTJW.js → chunk-GDJOSLWM.js} +1 -1
- package/dist/dashboard/browser/chunk-HYGMRGYR.js +4 -0
- package/dist/dashboard/browser/chunk-HYIZMKSF.js +1 -0
- package/dist/dashboard/browser/chunk-IQZZO5IM.js +3 -0
- package/dist/dashboard/browser/chunk-J5UK77OJ.js +1 -0
- package/dist/dashboard/browser/chunk-JI63U3KC.js +2 -0
- package/dist/dashboard/browser/chunk-KLH6B22T.js +1 -0
- package/dist/dashboard/browser/chunk-L2PHC6DL.js +1 -0
- package/dist/dashboard/browser/chunk-MHYQENOC.js +1 -0
- package/dist/dashboard/browser/chunk-OHX55ZU4.js +2 -0
- package/dist/dashboard/browser/chunk-OUXULJ3Z.js +3 -0
- package/dist/dashboard/browser/chunk-P5IU57TV.js +2 -0
- package/dist/dashboard/browser/{chunk-U6AY7XZK.js → chunk-Q3N4MMWW.js} +3 -3
- package/dist/dashboard/browser/chunk-RIDV4B55.js +5 -0
- package/dist/dashboard/browser/{chunk-VZ6E4VQY.js → chunk-SR5JAOLW.js} +1 -1
- package/dist/dashboard/browser/chunk-UU5K6ZPO.js +1 -0
- package/dist/dashboard/browser/chunk-XXIJQBCQ.js +2 -0
- package/dist/dashboard/browser/chunk-YA4AZONZ.js +5 -0
- package/dist/dashboard/browser/{chunk-NN2YNLGP.js → chunk-YNCTXEXX.js} +1 -1
- package/dist/dashboard/browser/chunk-ZDNBWNU5.js +1 -0
- package/dist/dashboard/browser/chunk-ZEO5YLWG.js +3 -0
- package/dist/dashboard/browser/chunk-ZVUH3ISD.js +2 -0
- package/dist/dashboard/browser/index.html +1 -1
- package/dist/dashboard/browser/main-IDF27PFI.js +1 -0
- package/dist/main.js +58 -49
- package/dist/mcp.js +3 -3
- package/package.json +2 -2
- package/dist/dashboard/browser/chunk-4VNZXWQZ.js +0 -3
- package/dist/dashboard/browser/chunk-BLNPJ4WD.js +0 -4
- package/dist/dashboard/browser/chunk-E3HUMJ6S.js +0 -6
- package/dist/dashboard/browser/chunk-EBOHC6KX.js +0 -1
- package/dist/dashboard/browser/chunk-JUZHAE4L.js +0 -2
- package/dist/dashboard/browser/chunk-K46KCL6L.js +0 -1
- package/dist/dashboard/browser/chunk-KDCKLTCZ.js +0 -1
- package/dist/dashboard/browser/chunk-MHOSWLRR.js +0 -3
- package/dist/dashboard/browser/chunk-N5GRSTMJ.js +0 -6
- package/dist/dashboard/browser/chunk-R6J2WYUD.js +0 -1
- package/dist/dashboard/browser/chunk-T2YKGOEM.js +0 -3
- package/dist/dashboard/browser/chunk-V2CQL6W5.js +0 -1
- package/dist/dashboard/browser/chunk-WJUGRIIZ.js +0 -1
- package/dist/dashboard/browser/chunk-WRBP4DQN.js +0 -4
- package/dist/dashboard/browser/chunk-XUU4AY4M.js +0 -2
- package/dist/dashboard/browser/chunk-XYVF5I5T.js +0 -1
- package/dist/dashboard/browser/main-ZADV4SOC.js +0 -1
package/dist/mcp.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{McpServer as Z}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as tt}from"@modelcontextprotocol/sdk/server/stdio.js";import{z as
|
|
2
|
-
`,"utf8"),{kind:"stub-created",path:
|
|
3
|
-
`);
|
|
1
|
+
import{McpServer as Z}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as tt}from"@modelcontextprotocol/sdk/server/stdio.js";import{z as i}from"zod";import y from"node:fs";import g from"node:path";import w from"node:os";import{fileURLToPath as q}from"node:url";var J=q(import.meta.url),_=g.dirname(J);function O(){return{searchRoots:[],portRange:[4200,4299],apiPort:4999,overrides:{},autoStart:[],profiles:{},tags:{},autoRestart:{enabled:!1,maxAttempts:5,windowMs:3e5},healthProbe:{enabled:!0,intervalMs:3e4,timeoutMs:2e3,path:"/",host:null,scheme:null,rejectUnauthorized:!1,fallbackHosts:["127.0.0.1","::1"]},logs:{enabled:!1,dir:g.join(w.homedir(),".daimon","logs"),maxFiles:5,maxBytesPerFile:1e7},depends:{},cascadeRestart:!1,history:{enabled:!0,path:g.join(w.homedir(),".daimon","history.db"),retentionDays:30},notifications:{enabled:!0,onError:!0,onUnhealthy:!0,tray:!1},staleDetect:{enabled:!0,silentMs:3e4},headless:!1,envFiles:{},requestLog:{enabled:!1,portOffset:1e3},metrics:{enabled:!1},editor:{scheme:"vscode"},apiToken:null,output:{format:"compact",ndjson:!1},doctor:{autoFix:{onInit:!1,permitted:["orphan-daemon","stale-lock","missing-search-root","corrupt-history-db","port-conflict-pred","node-version-mismatch","orphan-node-modules","orphan-venv","orphan-bundler-cache","orphan-cargo-target","dead-search-root"]}},dashboard:{theme:"auto",density:"comfortable"}}}function C(n){return n.startsWith("~/")||n.startsWith("~\\")?g.join(w.homedir(),n.slice(2)):n==="~"?w.homedir():n}function j(n,a){if(!n||typeof n!="object")throw new Error(`Config at ${a} is not a JSON object`);let t=n,e=O();if(t.searchRoots!==void 0){if(!Array.isArray(t.searchRoots)||!t.searchRoots.every(r=>typeof r=="string"||r&&typeof r=="object"&&typeof r.path=="string"))throw new Error(`Config "searchRoots" must be an array of strings or { path, viteSubfolders? } objects (${a})`);e.searchRoots=t.searchRoots}if(t.portRange!==void 0){if(!Array.isArray(t.portRange)||t.portRange.length!==2||typeof t.portRange[0]!="number"||typeof t.portRange[1]!="number"||t.portRange[0]>t.portRange[1])throw new Error(`Config "portRange" must be [min, max] numbers (${a})`);e.portRange=[t.portRange[0],t.portRange[1]]}if(t.apiPort!==void 0){if(typeof t.apiPort!="number")throw new Error(`Config "apiPort" must be a number (${a})`);e.apiPort=t.apiPort}if(t.overrides!==void 0){if(typeof t.overrides!="object"||t.overrides===null||Array.isArray(t.overrides))throw new Error(`Config "overrides" must be an object (${a})`);e.overrides=t.overrides}if(t.autoStart!==void 0){if(!Array.isArray(t.autoStart)||!t.autoStart.every(r=>typeof r=="string"))throw new Error(`Config "autoStart" must be an array of strings (${a})`);e.autoStart=t.autoStart}if(t.profiles!==void 0){if(typeof t.profiles!="object"||t.profiles===null||Array.isArray(t.profiles))throw new Error(`Config "profiles" must be an object (${a})`);for(let[r,s]of Object.entries(t.profiles))if(!Array.isArray(s)||!s.every(o=>typeof o=="string"))throw new Error(`Config "profiles.${r}" must be an array of strings (${a})`);e.profiles=t.profiles}if(t.tags!==void 0){if(typeof t.tags!="object"||t.tags===null||Array.isArray(t.tags))throw new Error(`Config "tags" must be an object (${a})`);e.tags=t.tags}if(t.autoRestart&&typeof t.autoRestart=="object"&&(e.autoRestart={...e.autoRestart,...t.autoRestart}),t.healthProbe&&typeof t.healthProbe=="object"&&(e.healthProbe={...e.healthProbe,...t.healthProbe}),t.logs&&typeof t.logs=="object"&&(e.logs={...e.logs,...t.logs},e.logs.dir=C(e.logs.dir)),t.depends&&typeof t.depends=="object"&&!Array.isArray(t.depends)){for(let[r,s]of Object.entries(t.depends))if(!Array.isArray(s)||!s.every(o=>typeof o=="string"))throw new Error(`Config "depends.${r}" must be an array of strings (${a})`);e.depends=t.depends}if(typeof t.cascadeRestart=="boolean"&&(e.cascadeRestart=t.cascadeRestart),t.history&&typeof t.history=="object"&&(e.history={...e.history,...t.history},e.history.path=C(e.history.path)),t.notifications&&typeof t.notifications=="object"&&(e.notifications={...e.notifications,...t.notifications}),t.staleDetect&&typeof t.staleDetect=="object"&&(e.staleDetect={...e.staleDetect,...t.staleDetect}),typeof t.headless=="boolean"&&(e.headless=t.headless),t.envFiles&&typeof t.envFiles=="object"&&!Array.isArray(t.envFiles)&&(e.envFiles=t.envFiles),t.requestLog&&typeof t.requestLog=="object"&&(e.requestLog={...e.requestLog,...t.requestLog}),t.metrics&&typeof t.metrics=="object"&&(e.metrics={...e.metrics,...t.metrics}),t.editor&&typeof t.editor=="object"){let r=t.editor.scheme;typeof r=="string"&&r.trim()&&(e.editor={scheme:r.trim()})}if((typeof t.apiToken=="string"||t.apiToken===null)&&(e.apiToken=t.apiToken),t.output&&typeof t.output=="object"){let r=t.output;(r.format==="compact"||r.format==="full")&&(e.output.format=r.format),typeof r.ndjson=="boolean"&&(e.output.ndjson=r.ndjson)}if(t.doctor&&typeof t.doctor=="object"){let r=t.doctor.autoFix;r&&typeof r=="object"&&(typeof r.onInit=="boolean"&&(e.doctor.autoFix.onInit=r.onInit),Array.isArray(r.permitted)&&(e.doctor.autoFix.permitted=r.permitted.filter(s=>typeof s=="string")))}if(t.dashboard&&typeof t.dashboard=="object"){let r=t.dashboard;(r.theme==="auto"||r.theme==="light"||r.theme==="dark")&&(e.dashboard.theme=r.theme),(r.density==="comfortable"||r.density==="compact")&&(e.dashboard.density=r.density)}return e}function H(){return{local:g.join(process.cwd(),"daimon.config.json"),user:g.join(w.homedir(),".daimon","config.json")}}function T(){let{local:n,user:a}=H();if(y.existsSync(n)){let r=JSON.parse(y.readFileSync(n,"utf8"));return{kind:"loaded",config:j(r,n),path:n}}if(y.existsSync(a)){let r=JSON.parse(y.readFileSync(a,"utf8"));return{kind:"loaded",config:j(r,a),path:a}}let e=[g.resolve(_,"..","daimon.config.example.json"),g.resolve(_,"..","..","daimon.config.example.json")].find(r=>y.existsSync(r));return y.mkdirSync(g.dirname(a),{recursive:!0}),e?y.copyFileSync(e,a):y.writeFileSync(a,JSON.stringify(O(),null,2)+`
|
|
2
|
+
`,"utf8"),{kind:"stub-created",path:a}}import I from"node:fs";import v from"node:path";import z from"node:os";import{spawn as W}from"node:child_process";import{fileURLToPath as K}from"node:url";import B from"node:fs";import k from"node:path";import{fileURLToPath as G}from"node:url";var M=k.dirname(G(import.meta.url));function V(){let n=[k.resolve(M,"..","package.json"),k.resolve(M,"..","..","package.json")];for(let a of n)try{return JSON.parse(B.readFileSync(a,"utf8"))}catch{}return{}}var P=V().version||"0.0.0";var Q=v.join(z.homedir(),".daimon"),L=v.join(Q,"daemon.lock");function X(n){try{return process.kill(n,0),!0}catch(a){return a&&a.code==="EPERM"}}function S(){try{let n=I.readFileSync(L,"utf8"),a=JSON.parse(n);if(!a||typeof a.pid!="number")return null;if(!X(a.pid)){try{I.unlinkSync(L)}catch{}return null}return a}catch{return null}}function Y(){let n=v.dirname(K(import.meta.url));return v.join(n,"main.js")}async function $(n={}){let a={...process.env};n.port&&(a.DAIMON_PORT=String(n.port)),W(process.execPath,[Y(),"--headless"],{detached:!0,stdio:"ignore",env:a,windowsHide:!0}).unref();let e=Date.now();for(;Date.now()-e<5e3;){let r=S();if(r&&(!n.port||r.apiPort===n.port))return r;await new Promise(s=>setTimeout(s,100))}throw new Error("daemon failed to start within 5s")}function et(){if(process.env.DAIMON_PORT){let a=Number(process.env.DAIMON_PORT);if(Number.isFinite(a)&&a>0)return a}let n=S();if(n)return n.apiPort;try{let a=T();if(a.kind==="loaded")return a.config.apiPort}catch{}return 4999}var U=()=>`http://127.0.0.1:${et()}`,N=!1;async function D(){if(!N&&(N=!0,process.env.DAIMON_NO_SPAWN!=="1"&&!S()))try{let n=process.env.DAIMON_PORT?Number(process.env.DAIMON_PORT):void 0;await $({port:Number.isFinite(n)&&n>0?n:void 0})}catch{}}async function f(n,a="GET"){await D();try{let t=await fetch(U()+n,{method:a}),e=await t.text();try{return{status:t.status,body:JSON.parse(e)}}catch{return{status:t.status,body:e}}}catch{return{status:0,body:{error:"daimon is not running \u2014 start it with: daimon daemon start --detach"}}}}function u(n){return{content:[{type:"text",text:JSON.stringify(n)}]}}function p(n){return{content:[{type:"text",text:JSON.stringify({error:n})}],isError:!0}}async function rt(){let n=new Z({name:"daimon",version:P});n.registerTool("list_apps",{description:"List apps in compact form: name, status, port, health, errCount, lastChangeMs. Use list_apps_full for the verbose v0.4 shape.",inputSchema:{}},async()=>{let t=await f("/api/apps?format=compact");return t.status===0?p(t.body?.error||"unknown"):u(t.body)}),n.registerTool("list_apps_full",{description:"List apps in the verbose v0.4 form (uptimeMs, lastCompileMs, metrics, etc.). Heavier \u2014 prefer list_apps unless you need extra fields.",inputSchema:{}},async()=>{let t=await f("/api/apps?format=full");return t.status===0?p(t.body?.error||"unknown"):u(t.body)}),n.registerTool("get_status",{description:"Compact status: name, status, port, url, health, errCount, lastChangeMs, uptime. Use get_status_full for the verbose v0.4 shape.",inputSchema:{name:i.string()}},async({name:t})=>{let e=await f(`/api/apps/${encodeURIComponent(t)}?format=compact`);return e.status===0?p(e.body?.error||"unknown"):e.status===404?p("unknown app"):u(e.body)}),n.registerTool("get_status_full",{description:"Verbose v0.4 status form including events, compile history, metrics. Prefer get_status unless you need extra fields.",inputSchema:{name:i.string()}},async({name:t})=>{let e=await f(`/api/apps/${encodeURIComponent(t)}?format=full`);return e.status===0?p(e.body?.error||"unknown"):e.status===404?p("unknown app"):u(e.body)}),n.registerTool("get_errors",{description:"Get errors for an app. Supports --since duration, --since-last cursor, optional structured form.",inputSchema:{name:i.string(),since:i.string().optional(),sinceLast:i.boolean().optional(),client:i.string().optional(),structured:i.boolean().optional()}},async({name:t,since:e,sinceLast:r,client:s,structured:o})=>{let c=`/api/apps/${encodeURIComponent(t)}/errors`,l=new URLSearchParams;r?(c+="/since-last",s&&l.set("client",s)):e&&l.set("since",e);let b=l.toString(),h=await f(c+(b?"?"+b:""));if(h.status===0)return p(h.body?.error||"unknown");if(h.status===404)return p("unknown app");let d=h.body;return o&&Array.isArray(d)&&(d=d.map(m=>m.parsed??{message:m.message})),u(d)}),n.registerTool("get_logs",{description:"Get recent log lines for an app.",inputSchema:{name:i.string(),tail:i.number().int().positive().optional(),since:i.string().optional()}},async({name:t,tail:e,since:r})=>{let s=new URLSearchParams;e&&s.set("tail",String(e)),r&&s.set("since",r);let o=s.toString(),c=await f(`/api/apps/${encodeURIComponent(t)}/logs${o?"?"+o:""}`);return c.status===0?p(c.body?.error||"unknown"):c.status===404?p("unknown app"):u(c.body)});for(let t of["start","stop","restart"])n.registerTool(`${t}_app`,{description:`${t} an app.`,inputSchema:{name:i.string()}},async({name:e})=>{let r=await f(`/api/apps/${encodeURIComponent(e)}/${t}`,"POST");return r.status===0?p(r.body?.error||"unknown"):u(r.body)});n.registerTool("overview",{description:'Decision-ready snapshot of the workspace: totals, byStatus, needsAttention (with first parsed error per failing app), recentlyChanged. The recommended first call in a session \u2014 answers "what is going on right now?" in one round-trip. Pass `budget` (tokens) to cap response size; overflow collapses to _meta.omitted.',inputSchema:{workspace:i.string().optional(),profile:i.string().optional(),budget:i.number().int().positive().max(5e4).optional()}},async({workspace:t,profile:e,budget:r})=>{let s=new URLSearchParams;t&&s.set("workspace",t),e&&s.set("profile",e),r&&s.set("budget",String(r));let o=s.toString(),c=await f("/api/overview"+(o?"?"+o:""));return c.status===0?p(c.body?.error||"unknown"):u(c.body)}),n.registerTool("diff_errors",{description:'Errors that appeared since the last call by this client. Compact list of {file,line,col,code,message,tool}; bounded by `budget` tokens \u2014 overflow collapses to {omitted:N}. Use this as the "did my last change introduce new errors?" round-trip.',inputSchema:{name:i.string(),client:i.string().optional(),budget:i.number().int().positive().max(5e4).optional()}},async({name:t,client:e,budget:r})=>{let s=new URLSearchParams;s.set("client",e||"mcp-default");let o=await f(`/api/apps/${encodeURIComponent(t)}/errors/since-last?${s.toString()}`);if(o.status===0)return p(o.body?.error||"unknown");if(o.status===404)return p("unknown app");let l=(Array.isArray(o.body)?o.body:[]).map(m=>({file:m.file??null,line:m.line??null,col:m.col??null,code:m.code??null,tool:m.tool??null,message:m.message??""})),b=(r??800)*4,h=0,d=l;for(;JSON.stringify(d).length>b&&d.length>0;)d.pop(),h++;return u({errors:d,_meta:{omitted:h,total:l.length,budget:r??800}})}),n.registerTool("try_fix",{description:"Composite remediation: run doctor --auto-fix for permitted rules, restart the named app, wait for the target state, return {before, after, fixed:[ruleName], stillFailing:[\u2026parsed first 5]}. Never edits user source code, only daemon state. Pair with `focus` for narration; use this for the action.",inputSchema:{name:i.string(),until:i.enum(["serving","healthy"]).optional(),timeoutMs:i.number().int().positive().max(6e5).optional()}},async({name:t,until:e,timeoutMs:r})=>{let s=new URLSearchParams;s.set("until",e||"healthy"),s.set("timeoutMs",String(Math.min(r??18e4,6e5)));let o=await f(`/api/apps/${encodeURIComponent(t)}/try-fix?${s.toString()}`,"POST");return o.status===0?p(o.body?.error||"unknown"):o.status===404?p("unknown app"):u(o.body)}),n.registerTool("focus",{description:'Single round-trip "subscribe-then-act" snapshot for one app: starts the app if stopped, then narrates status/error/health events until target state (serving|healthy|stable) or timeout. Returns the captured event list plus final state. Use as a coherent narrative instead of polling.',inputSchema:{name:i.string(),until:i.enum(["serving","healthy","stable"]).optional(),timeoutMs:i.number().int().positive().max(6e5).optional()}},async({name:t,until:e,timeoutMs:r})=>{let s=new URLSearchParams;s.set("until",e||"healthy"),s.set("timeoutMs",String(Math.min(r??18e4,6e5))),await D();try{let o=await fetch(U()+`/api/apps/${encodeURIComponent(t)}/focus?${s.toString()}`,{method:"POST"});if(o.status===404)return p("unknown app");if(!o.body)return p("no response body");let c=o.body.getReader(),l=new TextDecoder,b=[],h=null,d="";for(;;){let{done:m,value:F}=await c.read();if(m)break;d+=l.decode(F,{stream:!0});let x=d.split(`
|
|
3
|
+
`);d=x.pop()??"";for(let E of x){let A=E.trim();if(A)try{let R=JSON.parse(A);R.kind==="done"?h=R:b.push(R)}catch{}}}return u({events:b,final:h})}catch(o){return p(o?.message||String(o))}}),n.registerTool("ensure",{description:'One-call lifecycle: if the app is stopped/crashed/error, start it; then block until it reaches the target state. Idempotent \u2014 returns immediately on already-terminal apps. Replaces the list\u2192status\u2192start\u2192wait\u2192status sequence. Returns compact AppSummary plus _meta.startedFromState / waitedMs. On timeout the body is { error: "timeout", state, _meta: { timedOut: true } } \u2014 treat as exit 2 equivalent.',inputSchema:{name:i.string(),until:i.enum(["serving","healthy"]).optional(),timeoutMs:i.number().int().positive().max(6e5).optional()}},async({name:t,until:e,timeoutMs:r})=>{let s=new URLSearchParams;s.set("until",e||"healthy"),s.set("timeoutMs",String(Math.min(r??18e4,6e5)));let o=await f(`/api/apps/${encodeURIComponent(t)}/ensure?${s.toString()}`,"POST");return o.status===0?p(o.body?.error||"unknown"):o.status===404?p("unknown app"):u(o.body)}),n.registerTool("orchestrate",{description:'Bring up an entire profile in one MCP call: cascade-start every app via depends-order, wait until each reaches the goal, and run ONE round of try-fix on stragglers. Returns { profile, goal, perApp:[{name, reached, tries, fixed?, stillFailing?}], totalMs, allReached }. goal=stable means serving+healthy+5s idle. Honors --budget (drops stillFailing first when over-budget). --dryRun reports planned order + currently-unhealthy apps without starting anything. Recommended way to "bring up my whole workspace" in one call.',inputSchema:{profile:i.string(),goal:i.enum(["serving","healthy","stable"]).optional(),timeoutMs:i.number().int().positive().max(12e5).optional(),dryRun:i.boolean().optional(),budget:i.number().int().positive().optional()}},async({profile:t,goal:e,timeoutMs:r,dryRun:s,budget:o})=>{let c=new URLSearchParams;c.set("profile",t),c.set("goal",e||"healthy"),c.set("timeoutMs",String(Math.min(r??3e5,12e5))),s&&c.set("dryRun","true"),typeof o=="number"&&c.set("budget",String(o));let l=await f(`/api/orchestrate?${c.toString()}`,"POST");return l.status===0?p(l.body?.error||"unknown"):l.status===404?p(l.body?.error||"unknown profile"):u(l.body)}),n.registerTool("ensure_up",{description:"One-call profile bring-up: cascade-start every app in the profile (resolving deps) and block until each reaches the target. Returns per-app terminal state plus _meta.totalMs. Use this instead of daimon up + per-app waits.",inputSchema:{profile:i.string(),until:i.enum(["serving","healthy"]).optional(),timeoutMs:i.number().int().positive().max(12e5).optional()}},async({profile:t,until:e,timeoutMs:r})=>{let s=new URLSearchParams;s.set("until",e||"healthy"),s.set("timeoutMs",String(Math.min(r??3e5,12e5)));let o=await f(`/api/profiles/${encodeURIComponent(t)}/ensure-up?${s.toString()}`,"POST");return o.status===0?p(o.body?.error||"unknown"):o.status===404?p("unknown profile"):u(o.body)}),n.registerTool("wait_for_app",{description:"Block until app reaches the given state or timeout (max 600s).",inputSchema:{name:i.string(),until:i.enum(["serving","healthy","stopped","error"]).optional(),timeout:i.number().int().positive().max(600).optional()}},async({name:t,until:e,timeout:r})=>{let s=new URLSearchParams;s.set("until",e||"serving"),s.set("timeout",String(Math.min(r??120,600)));let o=await f(`/api/apps/${encodeURIComponent(t)}/wait?${s.toString()}`);return o.status===0?p(o.body?.error||"unknown"):o.status===404?p("unknown app"):u(o.body)});let a=new tt;await n.connect(a)}rt().catch(n=>{process.stderr.write(`[daimon-mcp] fatal: ${n?.stack||n}
|
|
4
4
|
`),process.exit(1)});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "daimon",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Local dev-server manager for Angular/Nx/Vite/Storybook — TUI, loopback HTTP API, JSON CLI, and MCP server for Claude Code",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"author": "Yosi Azulay (https://flycotech.com)",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"start": "npm run build && node dist/main.js",
|
|
42
42
|
"cli": "node dist/cli.js",
|
|
43
43
|
"mcp": "node dist/mcp.js",
|
|
44
|
-
"test": "node --test test/depends.test.mjs test/bundle.test.mjs test/notifier.test.mjs test/regression.test.mjs test/parser-corpus.test.mjs test/overview-budget.test.mjs test/autofix-rules.test.mjs",
|
|
44
|
+
"test": "node --test test/depends.test.mjs test/bundle.test.mjs test/notifier.test.mjs test/regression.test.mjs test/parser-corpus.test.mjs test/overview-budget.test.mjs test/autofix-rules.test.mjs test/history-trends.test.mjs test/orchestrate.test.mjs test/polyglot-discovery.test.mjs test/tui-ribbon.test.mjs",
|
|
45
45
|
"clean:dist": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
|
|
46
46
|
"build:bundle": "npm run clean:dist && esbuild src/cli.ts src/main.ts src/mcp.ts --bundle --platform=node --target=node20 --format=esm --minify --legal-comments=none --outdir=dist --packages=external",
|
|
47
47
|
"build:dashboard": "node -e \"const fs=require('fs');if(fs.existsSync('dashboard/node_modules')){require('child_process').execSync('npm run build',{cwd:'dashboard',stdio:'inherit'});}else{console.log('[daimon] dashboard/node_modules missing — skipping ng build. Run: (cd dashboard && npm install) to enable the Angular SPA bundle.');}\"",
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{a as M}from"./chunk-NDSAQ2HK.js";import{a as ce}from"./chunk-VZ6E4VQY.js";import{C as pe,k as re,n as de,o as le}from"./chunk-MHOSWLRR.js";import{G as C,H as oe,P as se,t as ae,v as ie}from"./chunk-Y6B6X4Y6.js";import{$b as y,B as F,C as c,Ca as P,Db as f,Eb as K,Ec as E,Fb as X,Hc as h,I as R,Ic as ne,Kb as k,Lb as G,Mb as I,Ob as b,Pb as H,Qb as Y,T as z,Ub as J,Xb as S,Yb as d,Zb as $,_a as m,_b as O,aa as u,ac as _,ca as l,d as g,db as r,ea as i,eb as V,fc as ee,gb as B,gc as v,i as A,ib as q,la as j,lb as U,m as N,oa as L,pb as T,qb as x,rb as p,rc as w,sb as W,ta as Q,ub as Z,za as D,zc as te}from"./chunk-K43KW4K2.js";var me=new l("CdkAccordion");var he=(()=>{class n{accordion=i(me,{optional:!0,skipSelf:!0});_changeDetectorRef=i(E);_expansionDispatcher=i(M);_openCloseAllSubscription=g.EMPTY;closed=new r;opened=new r;destroyed=new r;expandedChange=new r;id=i(C).getId("cdk-accordion-child-");get expanded(){return this._expanded}set expanded(e){if(this._expanded!==e){if(this._expanded=e,this.expandedChange.emit(e),e){this.opened.emit();let t=this.accordion?this.accordion.id:this.id;this._expansionDispatcher.notify(this.id,t)}else this.closed.emit();this._changeDetectorRef.markForCheck()}}_expanded=!1;get disabled(){return this._disabled()}set disabled(e){this._disabled.set(e)}_disabled=Q(!1);_removeUniqueSelectionListener=()=>{};constructor(){}ngOnInit(){this._removeUniqueSelectionListener=this._expansionDispatcher.listen((e,t)=>{this.accordion&&!this.accordion.multi&&this.accordion.id===t&&this.id!==e&&(this.expanded=!1)}),this.accordion&&(this._openCloseAllSubscription=this._subscribeToOpenCloseAllActions())}ngOnDestroy(){this.opened.complete(),this.closed.complete(),this.destroyed.emit(),this.destroyed.complete(),this._removeUniqueSelectionListener(),this._openCloseAllSubscription.unsubscribe()}toggle(){this.disabled||(this.expanded=!this.expanded)}close(){this.disabled||(this.expanded=!1)}open(){this.disabled||(this.expanded=!0)}_subscribeToOpenCloseAllActions(){return this.accordion._openCloseAllActions.subscribe(e=>{this.disabled||(this.expanded=e)})}static \u0275fac=function(t){return new(t||n)};static \u0275dir=p({type:n,selectors:[["cdk-accordion-item"],["","cdkAccordionItem",""]],inputs:{expanded:[2,"expanded","expanded",h],disabled:[2,"disabled","disabled",h]},outputs:{closed:"closed",opened:"opened",destroyed:"destroyed",expandedChange:"expandedChange"},exportAs:["cdkAccordionItem"],features:[w([{provide:me,useValue:void 0}])]})}return n})(),ge=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=x({type:n});static \u0275inj=u({})}return n})();var we=["body"],Ee=["bodyWrapper"],Ce=[[["mat-expansion-panel-header"]],"*",[["mat-action-row"]]],Me=["mat-expansion-panel-header","*","mat-action-row"];function Ae(n,be){}var De=[[["mat-panel-title"]],[["mat-panel-description"]],"*"],Pe=["mat-panel-title","mat-panel-description","*"];function Te(n,be){n&1&&(b(0,"span",1),j(),b(1,"svg",2),Y(2,"path",3),H()())}var ue=new l("MAT_ACCORDION"),xe=new l("MAT_EXPANSION_PANEL"),ke=(()=>{class n{_template=i(B);_expansionPanel=i(xe,{optional:!0});constructor(){}static \u0275fac=function(t){return new(t||n)};static \u0275dir=p({type:n,selectors:[["ng-template","matExpansionPanelContent",""]]})}return n})(),fe=new l("MAT_EXPANSION_PANEL_DEFAULT_OPTIONS"),Ie=(()=>{class n extends he{_viewContainerRef=i(U);_animationsDisabled=pe();_document=i(L);_ngZone=i(V);_elementRef=i(P);_renderer=i(q);_cleanupTransitionEnd;get hideToggle(){return this._hideToggle||this.accordion&&this.accordion.hideToggle}set hideToggle(e){this._hideToggle=e}_hideToggle=!1;get togglePosition(){return this._togglePosition||this.accordion&&this.accordion.togglePosition}set togglePosition(e){this._togglePosition=e}_togglePosition;afterExpand=new r;afterCollapse=new r;_inputChanges=new A;accordion=i(ue,{optional:!0,skipSelf:!0});_lazyContent;_body;_bodyWrapper;_portal;_headerId=i(C).getId("mat-expansion-panel-header-");constructor(){super();let e=i(fe,{optional:!0});this._expansionDispatcher=i(M),e&&(this.hideToggle=e.hideToggle)}_hasSpacing(){return this.accordion?this.expanded&&this.accordion.displayMode==="default":!1}_getExpandedState(){return this.expanded?"expanded":"collapsed"}toggle(){this.expanded=!this.expanded}close(){this.expanded=!1}open(){this.expanded=!0}ngAfterContentInit(){this._lazyContent&&this._lazyContent._expansionPanel===this&&this.opened.pipe(z(null),c(()=>this.expanded&&!this._portal),R(1)).subscribe(()=>{this._portal=new re(this._lazyContent._template,this._viewContainerRef)}),this._setupAnimationEvents()}ngOnChanges(e){this._inputChanges.next(e)}ngOnDestroy(){super.ngOnDestroy(),this._cleanupTransitionEnd?.(),this._inputChanges.complete()}_containsFocus(){if(this._body){let e=this._document.activeElement,t=this._body.nativeElement;return e===t||t.contains(e)}return!1}_transitionEndListener=({target:e,propertyName:t})=>{e===this._bodyWrapper?.nativeElement&&t==="grid-template-rows"&&this._ngZone.run(()=>{this.expanded?this.afterExpand.emit():this.afterCollapse.emit()})};_setupAnimationEvents(){this._ngZone.runOutsideAngular(()=>{this._animationsDisabled?(this.opened.subscribe(()=>this._ngZone.run(()=>this.afterExpand.emit())),this.closed.subscribe(()=>this._ngZone.run(()=>this.afterCollapse.emit()))):setTimeout(()=>{let e=this._elementRef.nativeElement;this._cleanupTransitionEnd=this._renderer.listen(e,"transitionend",this._transitionEndListener),e.classList.add("mat-expansion-panel-animations-enabled")},200)})}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=T({type:n,selectors:[["mat-expansion-panel"]],contentQueries:function(t,a,s){if(t&1&&$(s,ke,5),t&2){let o;y(o=_())&&(a._lazyContent=o.first)}},viewQuery:function(t,a){if(t&1&&(O(we,5),O(Ee,5)),t&2){let s;y(s=_())&&(a._body=s.first),y(s=_())&&(a._bodyWrapper=s.first)}},hostAttrs:[1,"mat-expansion-panel"],hostVars:4,hostBindings:function(t,a){t&2&&v("mat-expanded",a.expanded)("mat-expansion-panel-spacing",a._hasSpacing())},inputs:{hideToggle:[2,"hideToggle","hideToggle",h],togglePosition:"togglePosition"},outputs:{afterExpand:"afterExpand",afterCollapse:"afterCollapse"},exportAs:["matExpansionPanel"],features:[w([{provide:ue,useValue:void 0},{provide:xe,useExisting:n}]),W,D],ngContentSelectors:Me,decls:9,vars:4,consts:[["bodyWrapper",""],["body",""],[1,"mat-expansion-panel-content-wrapper"],["role","region",1,"mat-expansion-panel-content",3,"id"],[1,"mat-expansion-panel-body"],[3,"cdkPortalOutlet"]],template:function(t,a){t&1&&(S(Ce),d(0),G(1,"div",2,0)(3,"div",3,1)(5,"div",4),d(6,1),Z(7,Ae,0,0,"ng-template",5),I(),d(8,2),I()()),t&2&&(m(),f("inert",a.expanded?null:""),m(2),k("id",a.id),f("aria-labelledby",a._headerId),m(4),k("cdkPortalOutlet",a._portal))},dependencies:[de],styles:[`.mat-expansion-panel{box-sizing:content-box;display:block;margin:0;overflow:hidden;position:relative;background:var(--mat-expansion-container-background-color, var(--mat-sys-surface));color:var(--mat-expansion-container-text-color, var(--mat-sys-on-surface));border-radius:var(--mat-expansion-container-shape, 12px)}.mat-expansion-panel.mat-expansion-panel-animations-enabled{transition:margin 225ms cubic-bezier(0.4, 0, 0.2, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:var(--mat-expansion-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mat-accordion .mat-expansion-panel:not(.mat-expanded),.mat-accordion .mat-expansion-panel:not(.mat-expansion-panel-spacing){border-radius:0}.mat-accordion .mat-expansion-panel:first-of-type{border-top-right-radius:var(--mat-expansion-container-shape, 12px);border-top-left-radius:var(--mat-expansion-container-shape, 12px)}.mat-accordion .mat-expansion-panel:last-of-type{border-bottom-right-radius:var(--mat-expansion-container-shape, 12px);border-bottom-left-radius:var(--mat-expansion-container-shape, 12px)}@media(forced-colors: active){.mat-expansion-panel{outline:solid 1px}}.mat-expansion-panel-content-wrapper{display:grid;grid-template-rows:0fr;grid-template-columns:100%}.mat-expansion-panel-animations-enabled .mat-expansion-panel-content-wrapper{transition:grid-template-rows 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper{grid-template-rows:1fr}@supports not (grid-template-rows: 0fr){.mat-expansion-panel-content-wrapper{height:0}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper{height:auto}}.mat-expansion-panel-content{display:flex;flex-direction:column;overflow:visible;min-height:0;visibility:hidden;font-family:var(--mat-expansion-container-text-font, var(--mat-sys-body-large-font));font-size:var(--mat-expansion-container-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-expansion-container-text-weight, var(--mat-sys-body-large-weight));line-height:var(--mat-expansion-container-text-line-height, var(--mat-sys-body-large-line-height));letter-spacing:var(--mat-expansion-container-text-tracking, var(--mat-sys-body-large-tracking))}.mat-expansion-panel-animations-enabled .mat-expansion-panel-content{transition:visibility 190ms linear}.mat-expansion-panel.mat-expanded>.mat-expansion-panel-content-wrapper>.mat-expansion-panel-content{visibility:visible}.mat-expansion-panel-body{padding:0 24px 16px}.mat-expansion-panel-spacing{margin:16px 0}.mat-accordion>.mat-expansion-panel-spacing:first-child,.mat-accordion>*:first-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-top:0}.mat-accordion>.mat-expansion-panel-spacing:last-child,.mat-accordion>*:last-child:not(.mat-expansion-panel) .mat-expansion-panel-spacing{margin-bottom:0}.mat-action-row{border-top-style:solid;border-top-width:1px;display:flex;flex-direction:row;justify-content:flex-end;padding:16px 8px 16px 24px;border-top-color:var(--mat-expansion-actions-divider-color, var(--mat-sys-outline))}.mat-action-row .mat-button-base,.mat-action-row .mat-mdc-button-base{margin-left:8px}[dir=rtl] .mat-action-row .mat-button-base,[dir=rtl] .mat-action-row .mat-mdc-button-base{margin-left:0;margin-right:8px}
|
|
2
|
-
`],encapsulation:2,changeDetection:0})}return n})();var ht=(()=>{class n{panel=i(Ie,{host:!0});_element=i(P);_focusMonitor=i(ae);_changeDetectorRef=i(E);_parentChangeSubscription=g.EMPTY;constructor(){i(ie).load(ce);let e=this.panel,t=i(fe,{optional:!0}),a=i(new te("tabindex"),{optional:!0}),s=e.accordion?e.accordion._stateChanges.pipe(c(o=>!!(o.hideToggle||o.togglePosition))):N;this.tabIndex=parseInt(a||"")||0,this._parentChangeSubscription=F(e.opened,e.closed,s,e._inputChanges.pipe(c(o=>!!(o.hideToggle||o.disabled||o.togglePosition)))).subscribe(()=>this._changeDetectorRef.markForCheck()),e.closed.pipe(c(()=>e._containsFocus())).subscribe(()=>this._focusMonitor.focusVia(this._element,"program")),t&&(this.expandedHeight=t.expandedHeight,this.collapsedHeight=t.collapsedHeight)}expandedHeight;collapsedHeight;tabIndex=0;get disabled(){return this.panel.disabled}_toggle(){this.disabled||this.panel.toggle()}_isExpanded(){return this.panel.expanded}_getExpandedState(){return this.panel._getExpandedState()}_getPanelId(){return this.panel.id}_getTogglePosition(){return this.panel.togglePosition}_showToggle(){return!this.panel.hideToggle&&!this.panel.disabled}_getHeaderHeight(){let e=this._isExpanded();return e&&this.expandedHeight?this.expandedHeight:!e&&this.collapsedHeight?this.collapsedHeight:null}_keydown(e){switch(e.keyCode){case 32:case 13:oe(e)||(e.preventDefault(),this._toggle());break;default:this.panel.accordion&&this.panel.accordion._handleHeaderKeydown(e);return}}focus(e,t){e?this._focusMonitor.focusVia(this._element,e,t):this._element.nativeElement.focus(t)}ngAfterViewInit(){this._focusMonitor.monitor(this._element).subscribe(e=>{e&&this.panel.accordion&&this.panel.accordion._handleHeaderFocus(this)})}ngOnDestroy(){this._parentChangeSubscription.unsubscribe(),this._focusMonitor.stopMonitoring(this._element)}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=T({type:n,selectors:[["mat-expansion-panel-header"]],hostAttrs:["role","button",1,"mat-expansion-panel-header","mat-focus-indicator"],hostVars:13,hostBindings:function(t,a){t&1&&J("click",function(){return a._toggle()})("keydown",function(o){return a._keydown(o)}),t&2&&(f("id",a.panel._headerId)("tabindex",a.disabled?-1:a.tabIndex)("aria-controls",a._getPanelId())("aria-expanded",a._isExpanded())("aria-disabled",a.panel.disabled),ee("height",a._getHeaderHeight()),v("mat-expanded",a._isExpanded())("mat-expansion-toggle-indicator-after",a._getTogglePosition()==="after")("mat-expansion-toggle-indicator-before",a._getTogglePosition()==="before"))},inputs:{expandedHeight:"expandedHeight",collapsedHeight:"collapsedHeight",tabIndex:[2,"tabIndex","tabIndex",e=>e==null?0:ne(e)]},ngContentSelectors:Pe,decls:5,vars:3,consts:[[1,"mat-content"],[1,"mat-expansion-indicator"],["xmlns","http://www.w3.org/2000/svg","viewBox","0 -960 960 960","aria-hidden","true","focusable","false"],["d","M480-345 240-585l56-56 184 184 184-184 56 56-240 240Z"]],template:function(t,a){t&1&&(S(De),b(0,"span",0),d(1),d(2,1),d(3,2),H(),K(4,Te,3,0,"span",1)),t&2&&(v("mat-content-hide-toggle",!a._showToggle()),m(4),X(a._showToggle()?4:-1))},styles:[`.mat-expansion-panel-header{display:flex;flex-direction:row;align-items:center;padding:0 24px;border-radius:inherit;height:var(--mat-expansion-header-collapsed-state-height, 48px);font-family:var(--mat-expansion-header-text-font, var(--mat-sys-title-medium-font));font-size:var(--mat-expansion-header-text-size, var(--mat-sys-title-medium-size));font-weight:var(--mat-expansion-header-text-weight, var(--mat-sys-title-medium-weight));line-height:var(--mat-expansion-header-text-line-height, var(--mat-sys-title-medium-line-height));letter-spacing:var(--mat-expansion-header-text-tracking, var(--mat-sys-title-medium-tracking))}.mat-expansion-panel-animations-enabled .mat-expansion-panel-header{transition:height 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header::before{border-radius:inherit}.mat-expansion-panel-header.mat-expanded{height:var(--mat-expansion-header-expanded-state-height, 64px)}.mat-expansion-panel-header[aria-disabled=true]{color:var(--mat-expansion-header-disabled-state-text-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}.mat-expansion-panel-header:not([aria-disabled=true]){cursor:pointer}.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:var(--mat-expansion-header-hover-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-hover-state-layer-opacity) * 100%), transparent))}@media(hover: none){.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled=true]):hover{background:var(--mat-expansion-container-background-color, var(--mat-sys-surface))}}.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-keyboard-focused,.mat-expansion-panel .mat-expansion-panel-header:not([aria-disabled=true]).cdk-program-focused{background:var(--mat-expansion-header-focus-state-layer-color, color-mix(in srgb, var(--mat-sys-on-surface) calc(var(--mat-sys-focus-state-layer-opacity) * 100%), transparent))}.mat-expansion-panel-header._mat-animation-noopable{transition:none}.mat-expansion-panel-header:focus,.mat-expansion-panel-header:hover{outline:none}.mat-expansion-panel-header.mat-expanded:focus,.mat-expansion-panel-header.mat-expanded:hover{background:inherit}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before{flex-direction:row-reverse}.mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 16px 0 0}[dir=rtl] .mat-expansion-panel-header.mat-expansion-toggle-indicator-before .mat-expansion-indicator{margin:0 0 0 16px}.mat-content{display:flex;flex:1;flex-direction:row;overflow:hidden}.mat-content.mat-content-hide-toggle{margin-right:8px}[dir=rtl] .mat-content.mat-content-hide-toggle{margin-right:0;margin-left:8px}.mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-left:24px;margin-right:0}[dir=rtl] .mat-expansion-toggle-indicator-before .mat-content.mat-content-hide-toggle{margin-right:24px;margin-left:0}.mat-expansion-panel-header-title{color:var(--mat-expansion-header-text-color, var(--mat-sys-on-surface))}.mat-expansion-panel-header-title,.mat-expansion-panel-header-description{display:flex;flex-grow:1;flex-basis:0;margin-right:16px;align-items:center}[dir=rtl] .mat-expansion-panel-header-title,[dir=rtl] .mat-expansion-panel-header-description{margin-right:0;margin-left:16px}.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled=true] .mat-expansion-panel-header-description{color:inherit}.mat-expansion-panel-header-description{flex-grow:2;color:var(--mat-expansion-header-description-color, var(--mat-sys-on-surface-variant))}.mat-expansion-panel-animations-enabled .mat-expansion-indicator{transition:transform 225ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-expansion-panel-header.mat-expanded .mat-expansion-indicator{transform:rotate(180deg)}.mat-expansion-indicator::after{border-style:solid;border-width:0 2px 2px 0;content:"";padding:3px;transform:rotate(45deg);vertical-align:middle;color:var(--mat-expansion-header-indicator-color, var(--mat-sys-on-surface-variant));display:var(--mat-expansion-legacy-header-indicator-display, none)}.mat-expansion-indicator svg{width:24px;height:24px;margin:0 -8px;vertical-align:middle;fill:var(--mat-expansion-header-indicator-color, var(--mat-sys-on-surface-variant));display:var(--mat-expansion-header-indicator-display, inline-block)}@media(forced-colors: active){.mat-expansion-panel-content{border-top:1px solid;border-top-left-radius:0;border-top-right-radius:0}}
|
|
3
|
-
`],encapsulation:2,changeDetection:0})}return n})(),gt=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275dir=p({type:n,selectors:[["mat-panel-description"]],hostAttrs:[1,"mat-expansion-panel-header-description"]})}return n})(),ut=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275dir=p({type:n,selectors:[["mat-panel-title"]],hostAttrs:[1,"mat-expansion-panel-header-title"]})}return n})();var xt=(()=>{class n{static \u0275fac=function(t){return new(t||n)};static \u0275mod=x({type:n});static \u0275inj=u({imports:[se,ge,le]})}return n})();export{Ie as a,ht as b,gt as c,ut as d,xt as e};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{a as W,b as mt}from"./chunk-LBRCWYRN.js";import{a as we}from"./chunk-WAN7TQQW.js";import{a as ue,b as he}from"./chunk-UNT27XFJ.js";import{a as ve,b as ye}from"./chunk-7L4DWDGL.js";import{a as Me}from"./chunk-PJPGLT4T.js";import{b as wt,g as ge}from"./chunk-N5GRSTMJ.js";import{a as fe,b as Ce,c as xe,d as ke,e as Te}from"./chunk-VZ6E4VQY.js";import{a as pe,b as be}from"./chunk-JUZHAE4L.js";import"./chunk-YNQPX5G6.js";import{C as ct,d as le,e as de,k as ce,m as me,n as Tt}from"./chunk-MHOSWLRR.js";import{c as te}from"./chunk-ESDYJ3BP.js";import{c as dt,i as se,j as _e}from"./chunk-U6AY7XZK.js";import{A as ie,G as ae,H as oe,J as re,N as xt,P as kt,p as Ct,u as ee,v as ne}from"./chunk-Y6B6X4Y6.js";import{$b as v,A as Ft,Aa as J,B as Y,C as Vt,Ca as Q,Cb as Ut,Da as jt,Db as O,Eb as b,Ec as st,Fb as _,G as Nt,Gb as nt,Hb as $,Hc as I,Ib as E,Ic as lt,Jb as S,Kb as g,Lb as o,Mb as r,Nb as x,Ob as Zt,Pb as Yt,Qb as Xt,S as Ht,Sb as P,T as X,U as zt,Ub as k,V as j,Wa as ft,Wb as c,Xb as it,Yb as at,Zb as K,_a as d,_b as T,a as _t,aa as Qt,ac as y,b as ut,ca as z,d as V,db as D,ea as m,eb as G,ec as vt,f as Bt,fb as tt,fc as ot,gb as et,gc as w,hc as rt,i as Z,ib as gt,ic as l,ja as u,jc as f,ka as h,kc as L,lb as Gt,m as Lt,na as ht,o as Ot,pa as $t,pb as A,qb as qt,rb as H,rc as U,s as N,sb as q,sc as Jt,ta as R,ub as B,vb as Kt,xc as M,yc as yt,za as Wt}from"./chunk-K43KW4K2.js";var Et=["*"];function Ne(n,a){n&1&&at(0)}var He=["tabListContainer"],ze=["tabList"],Qe=["tabListInner"],$e=["nextPaginator"],We=["previousPaginator"],je=["content"];function Ge(n,a){}var qe=["tabBodyWrapper"],Ke=["tabHeader"];function Ue(n,a){}function Ze(n,a){if(n&1&&B(0,Ue,0,0,"ng-template",12),n&2){let t=c().$implicit;g("cdkPortalOutlet",t.templateLabel)}}function Ye(n,a){if(n&1&&l(0),n&2){let t=c().$implicit;f(t.textLabel)}}function Xe(n,a){if(n&1){let t=P();o(0,"div",7,2),k("click",function(){let i=u(t),s=i.$implicit,p=i.$index,C=c(),F=vt(1);return h(C._handleClick(s,F,p))})("cdkFocusChange",function(i){let s=u(t).$index,p=c();return h(p._tabFocusChanged(i,s))}),x(2,"span",8)(3,"div",9),o(4,"span",10)(5,"span",11),b(6,Ze,1,1,null,12)(7,Ye,1,1),r()()()}if(n&2){let t=a.$implicit,e=a.$index,i=vt(1),s=c();rt(t.labelClass),w("mdc-tab--active",s.selectedIndex===e),g("id",s._getTabLabelId(t,e))("disabled",t.disabled)("fitInkBarToContent",s.fitInkBarToContent),O("tabIndex",s._getTabIndex(e))("aria-posinset",e+1)("aria-setsize",s._tabs.length)("aria-controls",s._getTabContentId(e))("aria-selected",s.selectedIndex===e)("aria-label",t.ariaLabel||null)("aria-labelledby",!t.ariaLabel&&t.ariaLabelledby?t.ariaLabelledby:null),d(3),g("matRippleTrigger",i)("matRippleDisabled",t.disabled||s.disableRipple),d(3),_(t.templateLabel?6:7)}}function Je(n,a){n&1&&at(0)}function tn(n,a){if(n&1){let t=P();o(0,"mat-tab-body",13),k("_onCentered",function(){u(t);let i=c();return h(i._removeTabBodyWrapperHeight())})("_onCentering",function(i){u(t);let s=c();return h(s._setTabBodyWrapperHeight(i))})("_beforeCentering",function(i){u(t);let s=c();return h(s._bodyCentered(i))}),r()}if(n&2){let t=a.$implicit,e=a.$index,i=c();rt(t.bodyClass),g("id",i._getTabContentId(e))("content",t.content)("position",t.position)("animationDuration",i.animationDuration)("preserveContent",i.preserveContent),O("tabindex",i.contentTabIndex!=null&&i.selectedIndex===e?i.contentTabIndex:null)("aria-labelledby",i._getTabLabelId(t,e))("aria-hidden",i.selectedIndex!==e)}}var en=new z("MatTabContent"),nn=(()=>{class n{template=m(et);constructor(){}static \u0275fac=function(e){return new(e||n)};static \u0275dir=H({type:n,selectors:[["","matTabContent",""]],features:[U([{provide:en,useExisting:n}])]})}return n})(),an=new z("MatTabLabel"),Se=new z("MAT_TAB"),St=(()=>{class n extends me{_closestTab=m(Se,{optional:!0});static \u0275fac=(()=>{let t;return function(i){return(t||(t=J(n)))(i||n)}})();static \u0275dir=H({type:n,selectors:[["","mat-tab-label",""],["","matTabLabel",""]],features:[U([{provide:an,useExisting:n}]),q]})}return n})(),Re=new z("MAT_TAB_GROUP"),Rt=(()=>{class n{_viewContainerRef=m(Gt);_closestTabGroup=m(Re,{optional:!0});disabled=!1;get templateLabel(){return this._templateLabel}set templateLabel(t){this._setTemplateLabelInput(t)}_templateLabel;_explicitContent=void 0;_implicitContent;textLabel="";ariaLabel;ariaLabelledby;labelClass;bodyClass;id=null;_contentPortal=null;get content(){return this._contentPortal}_stateChanges=new Z;position=null;origin=null;isActive=!1;constructor(){m(ne).load(fe)}ngOnChanges(t){(t.hasOwnProperty("textLabel")||t.hasOwnProperty("disabled"))&&this._stateChanges.next()}ngOnDestroy(){this._stateChanges.complete()}ngOnInit(){this._contentPortal=new ce(this._explicitContent||this._implicitContent,this._viewContainerRef)}_setTemplateLabelInput(t){t&&t._closestTab===this&&(this._templateLabel=t)}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=A({type:n,selectors:[["mat-tab"]],contentQueries:function(e,i,s){if(e&1&&(K(s,St,5),K(s,nn,7,et)),e&2){let p;v(p=y())&&(i.templateLabel=p.first),v(p=y())&&(i._explicitContent=p.first)}},viewQuery:function(e,i){if(e&1&&T(et,7),e&2){let s;v(s=y())&&(i._implicitContent=s.first)}},hostAttrs:["hidden",""],hostVars:1,hostBindings:function(e,i){e&2&&O("id",null)},inputs:{disabled:[2,"disabled","disabled",I],textLabel:[0,"label","textLabel"],ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],labelClass:"labelClass",bodyClass:"bodyClass",id:"id"},exportAs:["matTab"],features:[U([{provide:Se,useExisting:n}]),Wt],ngContentSelectors:Et,decls:1,vars:0,template:function(e,i){e&1&&(it(),Kt(0,Ne,1,0,"ng-template"))},encapsulation:2})}return n})(),Mt="mdc-tab-indicator--active",Ie="mdc-tab-indicator--no-transition",It=class{_items;_currentItem;constructor(a){this._items=a}hide(){this._items.forEach(a=>a.deactivateInkBar()),this._currentItem=void 0}alignToElement(a){let t=this._items.find(i=>i.elementRef.nativeElement===a),e=this._currentItem;if(t!==e&&(e?.deactivateInkBar(),t)){let i=e?.elementRef.nativeElement.getBoundingClientRect?.();t.activateInkBar(i),this._currentItem=t}}},on=(()=>{class n{_elementRef=m(Q);_inkBarElement;_inkBarContentElement;_fitToContent=!1;get fitInkBarToContent(){return this._fitToContent}set fitInkBarToContent(t){this._fitToContent!==t&&(this._fitToContent=t,this._inkBarElement&&this._appendInkBarElement())}activateInkBar(t){let e=this._elementRef.nativeElement;if(!t||!e.getBoundingClientRect||!this._inkBarContentElement){e.classList.add(Mt);return}let i=e.getBoundingClientRect(),s=t.width/i.width,p=t.left-i.left;e.classList.add(Ie),this._inkBarContentElement.style.setProperty("transform",`translateX(${p}px) scaleX(${s})`),e.getBoundingClientRect(),e.classList.remove(Ie),e.classList.add(Mt),this._inkBarContentElement.style.setProperty("transform","")}deactivateInkBar(){this._elementRef.nativeElement.classList.remove(Mt)}ngOnInit(){this._createInkBarElement()}ngOnDestroy(){this._inkBarElement?.remove(),this._inkBarElement=this._inkBarContentElement=null}_createInkBarElement(){let t=this._elementRef.nativeElement.ownerDocument||document,e=this._inkBarElement=t.createElement("span"),i=this._inkBarContentElement=t.createElement("span");e.className="mdc-tab-indicator",i.className="mdc-tab-indicator__content mdc-tab-indicator__content--underline",e.appendChild(this._inkBarContentElement),this._appendInkBarElement()}_appendInkBarElement(){this._inkBarElement;let t=this._fitToContent?this._elementRef.nativeElement.querySelector(".mdc-tab__content"):this._elementRef.nativeElement;t.appendChild(this._inkBarElement)}static \u0275fac=function(e){return new(e||n)};static \u0275dir=H({type:n,inputs:{fitInkBarToContent:[2,"fitInkBarToContent","fitInkBarToContent",I]}})}return n})();var Ae=(()=>{class n extends on{elementRef=m(Q);disabled=!1;focus(){this.elementRef.nativeElement.focus()}getOffsetLeft(){return this.elementRef.nativeElement.offsetLeft}getOffsetWidth(){return this.elementRef.nativeElement.offsetWidth}static \u0275fac=(()=>{let t;return function(i){return(t||(t=J(n)))(i||n)}})();static \u0275dir=H({type:n,selectors:[["","matTabLabelWrapper",""]],hostVars:3,hostBindings:function(e,i){e&2&&(O("aria-disabled",!!i.disabled),w("mat-mdc-tab-disabled",i.disabled))},inputs:{disabled:[2,"disabled","disabled",I]},features:[q]})}return n})(),De={passive:!0},rn=650,sn=100,ln=(()=>{class n{_elementRef=m(Q);_changeDetectorRef=m(st);_viewportRuler=m(de);_dir=m(xt,{optional:!0});_ngZone=m(G);_platform=m(Ct);_sharedResizeObserver=m(Me);_injector=m(ht);_renderer=m(gt);_animationsDisabled=ct();_eventCleanups;_scrollDistance=0;_selectedIndexChanged=!1;_destroyed=new Z;_showPaginationControls=!1;_disableScrollAfter=!0;_disableScrollBefore=!0;_tabLabelCount;_scrollDistanceChanged;_keyManager;_currentTextContent;_stopScrolling=new Z;disablePagination=!1;get selectedIndex(){return this._selectedIndex}set selectedIndex(t){let e=isNaN(t)?0:t;this._selectedIndex!=e&&(this._selectedIndexChanged=!0,this._selectedIndex=e,this._keyManager&&this._keyManager.updateActiveItem(e))}_selectedIndex=0;selectFocusedIndex=new D;indexFocused=new D;constructor(){this._eventCleanups=this._ngZone.runOutsideAngular(()=>[this._renderer.listen(this._elementRef.nativeElement,"mouseleave",()=>this._stopInterval())])}ngAfterViewInit(){this._eventCleanups.push(this._renderer.listen(this._previousPaginator.nativeElement,"touchstart",()=>this._handlePaginatorPress("before"),De),this._renderer.listen(this._nextPaginator.nativeElement,"touchstart",()=>this._handlePaginatorPress("after"),De))}ngAfterContentInit(){let t=this._dir?this._dir.change:Ot("ltr"),e=this._sharedResizeObserver.observe(this._elementRef.nativeElement).pipe(Nt(32),j(this._destroyed)),i=this._viewportRuler.change(150).pipe(j(this._destroyed)),s=()=>{this.updatePagination(),this._alignInkBarToSelectedTab()};this._keyManager=new re(this._items).withHorizontalOrientation(this._getLayoutDirection()).withHomeAndEnd().withWrap().skipPredicate(()=>!1),this._keyManager.updateActiveItem(Math.max(this._selectedIndex,0)),tt(s,{injector:this._injector}),Y(t,i,e,this._items.changes,this._itemsResized()).pipe(j(this._destroyed)).subscribe(()=>{this._ngZone.run(()=>{Promise.resolve().then(()=>{this._scrollDistance=Math.max(0,Math.min(this._getMaxScrollDistance(),this._scrollDistance)),s()})}),this._keyManager?.withHorizontalOrientation(this._getLayoutDirection())}),this._keyManager.change.subscribe(p=>{this.indexFocused.emit(p),this._setTabFocus(p)})}_itemsResized(){return typeof ResizeObserver!="function"?Lt:this._items.changes.pipe(X(this._items),zt(t=>new Bt(e=>this._ngZone.runOutsideAngular(()=>{let i=new ResizeObserver(s=>e.next(s));return t.forEach(s=>i.observe(s.elementRef.nativeElement)),()=>{i.disconnect()}}))),Ht(1),Vt(t=>t.some(e=>e.contentRect.width>0&&e.contentRect.height>0)))}ngAfterContentChecked(){this._tabLabelCount!=this._items.length&&(this.updatePagination(),this._tabLabelCount=this._items.length,this._changeDetectorRef.markForCheck()),this._selectedIndexChanged&&(this._scrollToLabel(this._selectedIndex),this._checkScrollingControls(),this._alignInkBarToSelectedTab(),this._selectedIndexChanged=!1,this._changeDetectorRef.markForCheck()),this._scrollDistanceChanged&&(this._updateTabScrollPosition(),this._scrollDistanceChanged=!1,this._changeDetectorRef.markForCheck())}ngOnDestroy(){this._eventCleanups.forEach(t=>t()),this._keyManager?.destroy(),this._destroyed.next(),this._destroyed.complete(),this._stopScrolling.complete()}_handleKeydown(t){if(!oe(t))switch(t.keyCode){case 13:case 32:if(this.focusIndex!==this.selectedIndex){let e=this._items.get(this.focusIndex);e&&!e.disabled&&(this.selectFocusedIndex.emit(this.focusIndex),this._itemSelected(t))}break;default:this._keyManager?.onKeydown(t)}}_onContentChanges(){let t=this._elementRef.nativeElement.textContent;t!==this._currentTextContent&&(this._currentTextContent=t||"",this._ngZone.run(()=>{this.updatePagination(),this._alignInkBarToSelectedTab(),this._changeDetectorRef.markForCheck()}))}updatePagination(){this._checkPaginationEnabled(),this._checkScrollingControls(),this._updateTabScrollPosition()}get focusIndex(){return this._keyManager?this._keyManager.activeItemIndex:0}set focusIndex(t){!this._isValidIndex(t)||this.focusIndex===t||!this._keyManager||this._keyManager.setActiveItem(t)}_isValidIndex(t){return this._items?!!this._items.toArray()[t]:!0}_setTabFocus(t){if(this._showPaginationControls&&this._scrollToLabel(t),this._items&&this._items.length){this._items.toArray()[t].focus();let e=this._tabListContainer.nativeElement;this._getLayoutDirection()=="ltr"?e.scrollLeft=0:e.scrollLeft=e.scrollWidth-e.offsetWidth}}_getLayoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_updateTabScrollPosition(){if(this.disablePagination)return;let t=this.scrollDistance,e=this._getLayoutDirection()==="ltr"?-t:t;this._tabList.nativeElement.style.transform=`translateX(${Math.round(e)}px)`,(this._platform.TRIDENT||this._platform.EDGE)&&(this._tabListContainer.nativeElement.scrollLeft=0)}get scrollDistance(){return this._scrollDistance}set scrollDistance(t){this._scrollTo(t)}_scrollHeader(t){let e=this._tabListContainer.nativeElement.offsetWidth,i=(t=="before"?-1:1)*e/3;return this._scrollTo(this._scrollDistance+i)}_handlePaginatorClick(t){this._stopInterval(),this._scrollHeader(t)}_scrollToLabel(t){if(this.disablePagination)return;let e=this._items?this._items.toArray()[t]:null;if(!e)return;let i=this._tabListContainer.nativeElement.offsetWidth,{offsetLeft:s,offsetWidth:p}=e.elementRef.nativeElement,C,F;this._getLayoutDirection()=="ltr"?(C=s,F=C+p):(F=this._tabListInner.nativeElement.offsetWidth-s,C=F-p);let bt=this.scrollDistance,At=this.scrollDistance+i;C<bt?this.scrollDistance-=bt-C:F>At&&(this.scrollDistance+=Math.min(F-At,C-bt))}_checkPaginationEnabled(){if(this.disablePagination)this._showPaginationControls=!1;else{let t=this._tabListInner.nativeElement.scrollWidth,e=this._elementRef.nativeElement.offsetWidth,i=t-e>=5;i||(this.scrollDistance=0),i!==this._showPaginationControls&&(this._showPaginationControls=i,this._changeDetectorRef.markForCheck())}}_checkScrollingControls(){this.disablePagination?this._disableScrollAfter=this._disableScrollBefore=!0:(this._disableScrollBefore=this.scrollDistance==0,this._disableScrollAfter=this.scrollDistance==this._getMaxScrollDistance(),this._changeDetectorRef.markForCheck())}_getMaxScrollDistance(){let t=this._tabListInner.nativeElement.scrollWidth,e=this._tabListContainer.nativeElement.offsetWidth;return t-e||0}_alignInkBarToSelectedTab(){let t=this._items&&this._items.length?this._items.toArray()[this.selectedIndex]:null,e=t?t.elementRef.nativeElement:null;e?this._inkBar.alignToElement(e):this._inkBar.hide()}_stopInterval(){this._stopScrolling.next()}_handlePaginatorPress(t,e){e&&e.button!=null&&e.button!==0||(this._stopInterval(),Ft(rn,sn).pipe(j(Y(this._stopScrolling,this._destroyed))).subscribe(()=>{let{maxScrollDistance:i,distance:s}=this._scrollHeader(t);(s===0||s>=i)&&this._stopInterval()}))}_scrollTo(t){if(this.disablePagination)return{maxScrollDistance:0,distance:0};let e=this._getMaxScrollDistance();return this._scrollDistance=Math.max(0,Math.min(e,t)),this._scrollDistanceChanged=!0,this._checkScrollingControls(),{maxScrollDistance:e,distance:this._scrollDistance}}static \u0275fac=function(e){return new(e||n)};static \u0275dir=H({type:n,inputs:{disablePagination:[2,"disablePagination","disablePagination",I],selectedIndex:[2,"selectedIndex","selectedIndex",lt]},outputs:{selectFocusedIndex:"selectFocusedIndex",indexFocused:"indexFocused"}})}return n})(),dn=(()=>{class n extends ln{_items;_tabListContainer;_tabList;_tabListInner;_nextPaginator;_previousPaginator;_inkBar;ariaLabel;ariaLabelledby;disableRipple=!1;ngAfterContentInit(){this._inkBar=new It(this._items),super.ngAfterContentInit()}_itemSelected(t){t.preventDefault()}static \u0275fac=(()=>{let t;return function(i){return(t||(t=J(n)))(i||n)}})();static \u0275cmp=A({type:n,selectors:[["mat-tab-header"]],contentQueries:function(e,i,s){if(e&1&&K(s,Ae,4),e&2){let p;v(p=y())&&(i._items=p)}},viewQuery:function(e,i){if(e&1&&(T(He,7),T(ze,7),T(Qe,7),T($e,5),T(We,5)),e&2){let s;v(s=y())&&(i._tabListContainer=s.first),v(s=y())&&(i._tabList=s.first),v(s=y())&&(i._tabListInner=s.first),v(s=y())&&(i._nextPaginator=s.first),v(s=y())&&(i._previousPaginator=s.first)}},hostAttrs:[1,"mat-mdc-tab-header"],hostVars:4,hostBindings:function(e,i){e&2&&w("mat-mdc-tab-header-pagination-controls-enabled",i._showPaginationControls)("mat-mdc-tab-header-rtl",i._getLayoutDirection()=="rtl")},inputs:{ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"],disableRipple:[2,"disableRipple","disableRipple",I]},features:[q],ngContentSelectors:Et,decls:13,vars:10,consts:[["previousPaginator",""],["tabListContainer",""],["tabList",""],["tabListInner",""],["nextPaginator",""],["mat-ripple","",1,"mat-mdc-tab-header-pagination","mat-mdc-tab-header-pagination-before",3,"click","mousedown","touchend","matRippleDisabled"],[1,"mat-mdc-tab-header-pagination-chevron"],[1,"mat-mdc-tab-label-container",3,"keydown"],["role","tablist",1,"mat-mdc-tab-list",3,"cdkObserveContent"],[1,"mat-mdc-tab-labels"],["mat-ripple","",1,"mat-mdc-tab-header-pagination","mat-mdc-tab-header-pagination-after",3,"mousedown","click","touchend","matRippleDisabled"]],template:function(e,i){if(e&1){let s=P();it(),o(0,"div",5,0),k("click",function(){return u(s),h(i._handlePaginatorClick("before"))})("mousedown",function(C){return u(s),h(i._handlePaginatorPress("before",C))})("touchend",function(){return u(s),h(i._stopInterval())}),x(2,"div",6),r(),o(3,"div",7,1),k("keydown",function(C){return u(s),h(i._handleKeydown(C))}),o(5,"div",8,2),k("cdkObserveContent",function(){return u(s),h(i._onContentChanges())}),o(7,"div",9,3),at(9),r()()(),o(10,"div",10,4),k("mousedown",function(C){return u(s),h(i._handlePaginatorPress("after",C))})("click",function(){return u(s),h(i._handlePaginatorClick("after"))})("touchend",function(){return u(s),h(i._stopInterval())}),x(12,"div",6),r()}e&2&&(w("mat-mdc-tab-header-pagination-disabled",i._disableScrollBefore),g("matRippleDisabled",i._disableScrollBefore||i.disableRipple),d(3),w("_mat-animation-noopable",i._animationsDisabled),d(2),O("aria-label",i.ariaLabel||null)("aria-labelledby",i.ariaLabelledby||null),d(5),w("mat-mdc-tab-header-pagination-disabled",i._disableScrollAfter),g("matRippleDisabled",i._disableScrollAfter||i.disableRipple))},dependencies:[wt,ie],styles:[`.mat-mdc-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.mdc-tab-indicator .mdc-tab-indicator__content{transition-duration:var(--mat-tab-animation-duration, 250ms)}.mat-mdc-tab-header-pagination{-webkit-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;min-width:32px;cursor:pointer;z-index:2;-webkit-tap-highlight-color:rgba(0,0,0,0);touch-action:none;box-sizing:content-box;outline:0}.mat-mdc-tab-header-pagination::-moz-focus-inner{border:0}.mat-mdc-tab-header-pagination .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab-header-pagination-controls-enabled .mat-mdc-tab-header-pagination{display:flex}.mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after{padding-left:4px}.mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(-135deg)}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before,.mat-mdc-tab-header-pagination-after{padding-right:4px}.mat-mdc-tab-header-rtl .mat-mdc-tab-header-pagination-before .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-header-pagination-after .mat-mdc-tab-header-pagination-chevron{transform:rotate(45deg)}.mat-mdc-tab-header-pagination-chevron{border-style:solid;border-width:2px 2px 0 0;height:8px;width:8px;border-color:var(--mat-tab-pagination-icon-color, var(--mat-sys-on-surface))}.mat-mdc-tab-header-pagination-disabled{box-shadow:none;cursor:default;pointer-events:none}.mat-mdc-tab-header-pagination-disabled .mat-mdc-tab-header-pagination-chevron{opacity:.4}.mat-mdc-tab-list{flex-grow:1;position:relative;transition:transform 500ms cubic-bezier(0.35, 0, 0.25, 1)}._mat-animation-noopable .mat-mdc-tab-list{transition:none}.mat-mdc-tab-label-container{display:flex;flex-grow:1;overflow:hidden;z-index:1;border-bottom-style:solid;border-bottom-width:var(--mat-tab-divider-height, 1px);border-bottom-color:var(--mat-tab-divider-color, var(--mat-sys-surface-variant))}.mat-mdc-tab-group-inverted-header .mat-mdc-tab-label-container{border-bottom:none;border-top-style:solid;border-top-width:var(--mat-tab-divider-height, 1px);border-top-color:var(--mat-tab-divider-color, var(--mat-sys-surface-variant))}.mat-mdc-tab-labels{display:flex;flex:1 0 auto}[mat-align-tabs=center]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:center}[mat-align-tabs=end]>.mat-mdc-tab-header .mat-mdc-tab-labels{justify-content:flex-end}.cdk-drop-list .mat-mdc-tab-labels,.mat-mdc-tab-labels.cdk-drop-list{min-height:var(--mat-tab-container-height, 48px)}.mat-mdc-tab::before{margin:5px}@media(forced-colors: active){.mat-mdc-tab[aria-disabled=true]{color:GrayText}}
|
|
2
|
-
`],encapsulation:2})}return n})(),cn=new z("MAT_TABS_CONFIG"),Pe=(()=>{class n extends Tt{_host=m(Dt);_ngZone=m(G);_centeringSub=V.EMPTY;_leavingSub=V.EMPTY;constructor(){super()}ngOnInit(){super.ngOnInit(),this._centeringSub=this._host._beforeCentering.pipe(X(this._host._isCenterPosition())).subscribe(t=>{this._host._content&&t&&!this.hasAttached()&&this._ngZone.run(()=>{Promise.resolve().then(),this.attach(this._host._content)})}),this._leavingSub=this._host._afterLeavingCenter.subscribe(()=>{this._host.preserveContent||this._ngZone.run(()=>this.detach())})}ngOnDestroy(){super.ngOnDestroy(),this._centeringSub.unsubscribe(),this._leavingSub.unsubscribe()}static \u0275fac=function(e){return new(e||n)};static \u0275dir=H({type:n,selectors:[["","matTabBodyHost",""]],features:[q]})}return n})(),Dt=(()=>{class n{_elementRef=m(Q);_dir=m(xt,{optional:!0});_ngZone=m(G);_injector=m(ht);_renderer=m(gt);_diAnimationsDisabled=ct();_eventCleanups;_initialized;_fallbackTimer;_positionIndex;_dirChangeSubscription=V.EMPTY;_position;_previousPosition;_onCentering=new D;_beforeCentering=new D;_afterLeavingCenter=new D;_onCentered=new D(!0);_portalHost;_contentElement;_content;animationDuration="500ms";preserveContent=!1;set position(t){this._positionIndex=t,this._computePositionAnimationState()}constructor(){if(this._dir){let t=m(st);this._dirChangeSubscription=this._dir.change.subscribe(e=>{this._computePositionAnimationState(e),t.markForCheck()})}}ngOnInit(){this._bindTransitionEvents(),this._position==="center"&&(this._setActiveClass(!0),tt(()=>this._onCentering.emit(this._elementRef.nativeElement.clientHeight),{injector:this._injector})),this._initialized=!0}ngOnDestroy(){clearTimeout(this._fallbackTimer),this._eventCleanups?.forEach(t=>t()),this._dirChangeSubscription.unsubscribe()}_bindTransitionEvents(){this._ngZone.runOutsideAngular(()=>{let t=this._elementRef.nativeElement,e=i=>{i.target===this._contentElement?.nativeElement&&(this._elementRef.nativeElement.classList.remove("mat-tab-body-animating"),i.type==="transitionend"&&this._transitionDone())};this._eventCleanups=[this._renderer.listen(t,"transitionstart",i=>{i.target===this._contentElement?.nativeElement&&(this._elementRef.nativeElement.classList.add("mat-tab-body-animating"),this._transitionStarted())}),this._renderer.listen(t,"transitionend",e),this._renderer.listen(t,"transitioncancel",e)]})}_transitionStarted(){clearTimeout(this._fallbackTimer);let t=this._position==="center";this._beforeCentering.emit(t),t&&this._onCentering.emit(this._elementRef.nativeElement.clientHeight)}_transitionDone(){this._position==="center"?this._onCentered.emit():this._previousPosition==="center"&&this._afterLeavingCenter.emit()}_setActiveClass(t){this._elementRef.nativeElement.classList.toggle("mat-mdc-tab-body-active",t)}_getLayoutDirection(){return this._dir&&this._dir.value==="rtl"?"rtl":"ltr"}_isCenterPosition(){return this._positionIndex===0}_computePositionAnimationState(t=this._getLayoutDirection()){this._previousPosition=this._position,this._positionIndex<0?this._position=t=="ltr"?"left":"right":this._positionIndex>0?this._position=t=="ltr"?"right":"left":this._position="center",this._animationsDisabled()?this._simulateTransitionEvents():this._initialized&&(this._position==="center"||this._previousPosition==="center")&&(clearTimeout(this._fallbackTimer),this._fallbackTimer=this._ngZone.runOutsideAngular(()=>setTimeout(()=>this._simulateTransitionEvents(),100)))}_simulateTransitionEvents(){this._transitionStarted(),tt(()=>this._transitionDone(),{injector:this._injector})}_animationsDisabled(){return this._diAnimationsDisabled||this.animationDuration==="0ms"||this.animationDuration==="0s"}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=A({type:n,selectors:[["mat-tab-body"]],viewQuery:function(e,i){if(e&1&&(T(Pe,5),T(je,5)),e&2){let s;v(s=y())&&(i._portalHost=s.first),v(s=y())&&(i._contentElement=s.first)}},hostAttrs:[1,"mat-mdc-tab-body"],hostVars:1,hostBindings:function(e,i){e&2&&O("inert",i._position==="center"?null:"")},inputs:{_content:[0,"content","_content"],animationDuration:"animationDuration",preserveContent:"preserveContent",position:"position"},outputs:{_onCentering:"_onCentering",_beforeCentering:"_beforeCentering",_onCentered:"_onCentered"},decls:3,vars:6,consts:[["content",""],["cdkScrollable","",1,"mat-mdc-tab-body-content"],["matTabBodyHost",""]],template:function(e,i){e&1&&(o(0,"div",1,0),B(2,Ge,0,0,"ng-template",2),r()),e&2&&w("mat-tab-body-content-left",i._position==="left")("mat-tab-body-content-right",i._position==="right")("mat-tab-body-content-can-animate",i._position==="center"||i._previousPosition==="center")},dependencies:[Pe,le],styles:[`.mat-mdc-tab-body{top:0;left:0;right:0;bottom:0;position:absolute;display:block;overflow:hidden;outline:0;flex-basis:100%}.mat-mdc-tab-body.mat-mdc-tab-body-active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.mat-mdc-tab-group.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body.mat-mdc-tab-body-active{overflow-y:hidden}.mat-mdc-tab-body-content{height:100%;overflow:auto;transform:none;visibility:hidden}.mat-tab-body-animating>.mat-mdc-tab-body-content,.mat-mdc-tab-body-active>.mat-mdc-tab-body-content{visibility:visible}.mat-tab-body-animating>.mat-mdc-tab-body-content{min-height:1px}.mat-mdc-tab-group-dynamic-height .mat-mdc-tab-body-content{overflow:hidden}.mat-tab-body-content-can-animate{transition:transform var(--mat-tab-animation-duration) 1ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable .mat-tab-body-content-can-animate{transition:none}.mat-tab-body-content-left{transform:translate3d(-100%, 0, 0)}.mat-tab-body-content-right{transform:translate3d(100%, 0, 0)}
|
|
3
|
-
`],encapsulation:2})}return n})(),Be=(()=>{class n{_elementRef=m(Q);_changeDetectorRef=m(st);_ngZone=m(G);_tabsSubscription=V.EMPTY;_tabLabelSubscription=V.EMPTY;_tabBodySubscription=V.EMPTY;_diAnimationsDisabled=ct();_allTabs;_tabBodies;_tabBodyWrapper;_tabHeader;_tabs=new jt;_indexToSelect=0;_lastFocusedTabIndex=null;_tabBodyWrapperHeight=0;color;get fitInkBarToContent(){return this._fitInkBarToContent}set fitInkBarToContent(t){this._fitInkBarToContent=t,this._changeDetectorRef.markForCheck()}_fitInkBarToContent=!1;stretchTabs=!0;alignTabs=null;dynamicHeight=!1;get selectedIndex(){return this._selectedIndex}set selectedIndex(t){this._indexToSelect=isNaN(t)?null:t}_selectedIndex=null;headerPosition="above";get animationDuration(){return this._animationDuration}set animationDuration(t){let e=t+"";this._animationDuration=/^\d+$/.test(e)?t+"ms":e}_animationDuration;get contentTabIndex(){return this._contentTabIndex}set contentTabIndex(t){this._contentTabIndex=isNaN(t)?null:t}_contentTabIndex;disablePagination=!1;disableRipple=!1;preserveContent=!1;get backgroundColor(){return this._backgroundColor}set backgroundColor(t){let e=this._elementRef.nativeElement.classList;e.remove("mat-tabs-with-background",`mat-background-${this.backgroundColor}`),t&&e.add("mat-tabs-with-background",`mat-background-${t}`),this._backgroundColor=t}_backgroundColor;ariaLabel;ariaLabelledby;selectedIndexChange=new D;focusChange=new D;animationDone=new D;selectedTabChange=new D(!0);_groupId;_isServer=!m(Ct).isBrowser;constructor(){let t=m(cn,{optional:!0});this._groupId=m(ae).getId("mat-tab-group-"),this.animationDuration=t&&t.animationDuration?t.animationDuration:"500ms",this.disablePagination=t&&t.disablePagination!=null?t.disablePagination:!1,this.dynamicHeight=t&&t.dynamicHeight!=null?t.dynamicHeight:!1,t?.contentTabIndex!=null&&(this.contentTabIndex=t.contentTabIndex),this.preserveContent=!!t?.preserveContent,this.fitInkBarToContent=t&&t.fitInkBarToContent!=null?t.fitInkBarToContent:!1,this.stretchTabs=t&&t.stretchTabs!=null?t.stretchTabs:!0,this.alignTabs=t&&t.alignTabs!=null?t.alignTabs:null}ngAfterContentChecked(){let t=this._indexToSelect=this._clampTabIndex(this._indexToSelect);if(this._selectedIndex!=t){let e=this._selectedIndex==null;if(!e){this.selectedTabChange.emit(this._createChangeEvent(t));let i=this._tabBodyWrapper.nativeElement;i.style.minHeight=i.clientHeight+"px"}Promise.resolve().then(()=>{this._tabs.forEach((i,s)=>i.isActive=s===t),e||(this.selectedIndexChange.emit(t),this._tabBodyWrapper.nativeElement.style.minHeight="")})}this._tabs.forEach((e,i)=>{e.position=i-t,this._selectedIndex!=null&&e.position==0&&!e.origin&&(e.origin=t-this._selectedIndex)}),this._selectedIndex!==t&&(this._selectedIndex=t,this._lastFocusedTabIndex=null,this._changeDetectorRef.markForCheck())}ngAfterContentInit(){this._subscribeToAllTabChanges(),this._subscribeToTabLabels(),this._tabsSubscription=this._tabs.changes.subscribe(()=>{let t=this._clampTabIndex(this._indexToSelect);if(t===this._selectedIndex){let e=this._tabs.toArray(),i;for(let s=0;s<e.length;s++)if(e[s].isActive){this._indexToSelect=this._selectedIndex=s,this._lastFocusedTabIndex=null,i=e[s];break}!i&&e[t]&&Promise.resolve().then(()=>{e[t].isActive=!0,this.selectedTabChange.emit(this._createChangeEvent(t))})}this._changeDetectorRef.markForCheck()})}ngAfterViewInit(){this._tabBodySubscription=this._tabBodies.changes.subscribe(()=>this._bodyCentered(!0))}_subscribeToAllTabChanges(){this._allTabs.changes.pipe(X(this._allTabs)).subscribe(t=>{this._tabs.reset(t.filter(e=>e._closestTabGroup===this||!e._closestTabGroup)),this._tabs.notifyOnChanges()})}ngOnDestroy(){this._tabs.destroy(),this._tabsSubscription.unsubscribe(),this._tabLabelSubscription.unsubscribe(),this._tabBodySubscription.unsubscribe()}realignInkBar(){this._tabHeader&&this._tabHeader._alignInkBarToSelectedTab()}updatePagination(){this._tabHeader&&this._tabHeader.updatePagination()}focusTab(t){let e=this._tabHeader;e&&(e.focusIndex=t)}_focusChanged(t){this._lastFocusedTabIndex=t,this.focusChange.emit(this._createChangeEvent(t))}_createChangeEvent(t){let e=new Pt;return e.index=t,this._tabs&&this._tabs.length&&(e.tab=this._tabs.toArray()[t]),e}_subscribeToTabLabels(){this._tabLabelSubscription&&this._tabLabelSubscription.unsubscribe(),this._tabLabelSubscription=Y(...this._tabs.map(t=>t._stateChanges)).subscribe(()=>this._changeDetectorRef.markForCheck())}_clampTabIndex(t){return Math.min(this._tabs.length-1,Math.max(t||0,0))}_getTabLabelId(t,e){return t.id||`${this._groupId}-label-${e}`}_getTabContentId(t){return`${this._groupId}-content-${t}`}_setTabBodyWrapperHeight(t){if(!this.dynamicHeight||!this._tabBodyWrapperHeight){this._tabBodyWrapperHeight=t;return}let e=this._tabBodyWrapper.nativeElement;e.style.height=this._tabBodyWrapperHeight+"px",this._tabBodyWrapper.nativeElement.offsetHeight&&(e.style.height=t+"px")}_removeTabBodyWrapperHeight(){let t=this._tabBodyWrapper.nativeElement;this._tabBodyWrapperHeight=t.clientHeight,t.style.height="",this._ngZone.run(()=>this.animationDone.emit())}_handleClick(t,e,i){e.focusIndex=i,t.disabled||(this.selectedIndex=i)}_getTabIndex(t){let e=this._lastFocusedTabIndex??this.selectedIndex;return t===e?0:-1}_tabFocusChanged(t,e){t&&t!=="mouse"&&t!=="touch"&&(this._tabHeader.focusIndex=e)}_bodyCentered(t){t&&this._tabBodies?.forEach((e,i)=>e._setActiveClass(i===this._selectedIndex))}_animationsDisabled(){return this._diAnimationsDisabled||this.animationDuration==="0"||this.animationDuration==="0ms"}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=A({type:n,selectors:[["mat-tab-group"]],contentQueries:function(e,i,s){if(e&1&&K(s,Rt,5),e&2){let p;v(p=y())&&(i._allTabs=p)}},viewQuery:function(e,i){if(e&1&&(T(qe,5),T(Ke,5),T(Dt,5)),e&2){let s;v(s=y())&&(i._tabBodyWrapper=s.first),v(s=y())&&(i._tabHeader=s.first),v(s=y())&&(i._tabBodies=s)}},hostAttrs:[1,"mat-mdc-tab-group"],hostVars:11,hostBindings:function(e,i){e&2&&(O("mat-align-tabs",i.alignTabs),rt("mat-"+(i.color||"primary")),ot("--mat-tab-animation-duration",i.animationDuration),w("mat-mdc-tab-group-dynamic-height",i.dynamicHeight)("mat-mdc-tab-group-inverted-header",i.headerPosition==="below")("mat-mdc-tab-group-stretch-tabs",i.stretchTabs))},inputs:{color:"color",fitInkBarToContent:[2,"fitInkBarToContent","fitInkBarToContent",I],stretchTabs:[2,"mat-stretch-tabs","stretchTabs",I],alignTabs:[0,"mat-align-tabs","alignTabs"],dynamicHeight:[2,"dynamicHeight","dynamicHeight",I],selectedIndex:[2,"selectedIndex","selectedIndex",lt],headerPosition:"headerPosition",animationDuration:"animationDuration",contentTabIndex:[2,"contentTabIndex","contentTabIndex",lt],disablePagination:[2,"disablePagination","disablePagination",I],disableRipple:[2,"disableRipple","disableRipple",I],preserveContent:[2,"preserveContent","preserveContent",I],backgroundColor:"backgroundColor",ariaLabel:[0,"aria-label","ariaLabel"],ariaLabelledby:[0,"aria-labelledby","ariaLabelledby"]},outputs:{selectedIndexChange:"selectedIndexChange",focusChange:"focusChange",animationDone:"animationDone",selectedTabChange:"selectedTabChange"},exportAs:["matTabGroup"],features:[U([{provide:Re,useExisting:n}])],ngContentSelectors:Et,decls:9,vars:8,consts:[["tabHeader",""],["tabBodyWrapper",""],["tabNode",""],[3,"indexFocused","selectFocusedIndex","selectedIndex","disableRipple","disablePagination","aria-label","aria-labelledby"],["role","tab","matTabLabelWrapper","","cdkMonitorElementFocus","",1,"mdc-tab","mat-mdc-tab","mat-focus-indicator",3,"id","mdc-tab--active","class","disabled","fitInkBarToContent"],[1,"mat-mdc-tab-body-wrapper"],["role","tabpanel",3,"id","class","content","position","animationDuration","preserveContent"],["role","tab","matTabLabelWrapper","","cdkMonitorElementFocus","",1,"mdc-tab","mat-mdc-tab","mat-focus-indicator",3,"click","cdkFocusChange","id","disabled","fitInkBarToContent"],[1,"mdc-tab__ripple"],["mat-ripple","",1,"mat-mdc-tab-ripple",3,"matRippleTrigger","matRippleDisabled"],[1,"mdc-tab__content"],[1,"mdc-tab__text-label"],[3,"cdkPortalOutlet"],["role","tabpanel",3,"_onCentered","_onCentering","_beforeCentering","id","content","position","animationDuration","preserveContent"]],template:function(e,i){if(e&1){let s=P();it(),o(0,"mat-tab-header",3,0),k("indexFocused",function(C){return u(s),h(i._focusChanged(C))})("selectFocusedIndex",function(C){return u(s),h(i.selectedIndex=C)}),E(2,Xe,8,17,"div",4,$),r(),b(4,Je,1,0),o(5,"div",5,1),E(7,tn,1,10,"mat-tab-body",6,$),r()}e&2&&(g("selectedIndex",i.selectedIndex||0)("disableRipple",i.disableRipple)("disablePagination",i.disablePagination),Ut("aria-label",i.ariaLabel)("aria-labelledby",i.ariaLabelledby),d(2),S(i._tabs),d(2),_(i._isServer?4:-1),d(),w("_mat-animation-noopable",i._animationsDisabled()),d(2),S(i._tabs))},dependencies:[dn,Ae,ee,wt,Tt,Dt],styles:[`.mdc-tab{min-width:90px;padding:0 24px;display:flex;flex:1 0 auto;justify-content:center;box-sizing:border-box;border:none;outline:none;text-align:center;white-space:nowrap;cursor:pointer;z-index:1;touch-action:manipulation}.mdc-tab__content{display:flex;align-items:center;justify-content:center;height:inherit;pointer-events:none}.mdc-tab__text-label{transition:150ms color linear;display:inline-block;line-height:1;z-index:2}.mdc-tab--active .mdc-tab__text-label{transition-delay:100ms}._mat-animation-noopable .mdc-tab__text-label{transition:none}.mdc-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.mdc-tab-indicator__content{transition:var(--mat-tab-animation-duration, 250ms) transform cubic-bezier(0.4, 0, 0.2, 1);transform-origin:left;opacity:0}.mdc-tab-indicator__content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.mdc-tab-indicator--active .mdc-tab-indicator__content{opacity:1}._mat-animation-noopable .mdc-tab-indicator__content,.mdc-tab-indicator--no-transition .mdc-tab-indicator__content{transition:none}.mat-mdc-tab-ripple.mat-mdc-tab-ripple{position:absolute;top:0;left:0;bottom:0;right:0;pointer-events:none}.mat-mdc-tab{-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none;background:none;height:var(--mat-tab-container-height, 48px);font-family:var(--mat-tab-label-text-font, var(--mat-sys-title-small-font));font-size:var(--mat-tab-label-text-size, var(--mat-sys-title-small-size));letter-spacing:var(--mat-tab-label-text-tracking, var(--mat-sys-title-small-tracking));line-height:var(--mat-tab-label-text-line-height, var(--mat-sys-title-small-line-height));font-weight:var(--mat-tab-label-text-weight, var(--mat-sys-title-small-weight))}.mat-mdc-tab.mdc-tab{flex-grow:0}.mat-mdc-tab .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-indicator-color, var(--mat-sys-primary));border-top-width:var(--mat-tab-active-indicator-height, 2px);border-radius:var(--mat-tab-active-indicator-shape, 0)}.mat-mdc-tab:hover .mdc-tab__text-label{color:var(--mat-tab-inactive-hover-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab:focus .mdc-tab__text-label{color:var(--mat-tab-inactive-focus-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__text-label{color:var(--mat-tab-active-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active .mdc-tab__ripple::before,.mat-mdc-tab.mdc-tab--active .mat-ripple-element{background-color:var(--mat-tab-active-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab__text-label{color:var(--mat-tab-active-hover-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:hover .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-hover-indicator-color, var(--mat-sys-primary))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab__text-label{color:var(--mat-tab-active-focus-label-text-color, var(--mat-sys-on-surface))}.mat-mdc-tab.mdc-tab--active:focus .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-active-focus-indicator-color, var(--mat-sys-primary))}.mat-mdc-tab.mat-mdc-tab-disabled{opacity:.4;pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__content{pointer-events:none}.mat-mdc-tab.mat-mdc-tab-disabled .mdc-tab__ripple::before,.mat-mdc-tab.mat-mdc-tab-disabled .mat-ripple-element{background-color:var(--mat-tab-disabled-ripple-color, var(--mat-sys-on-surface-variant))}.mat-mdc-tab .mdc-tab__ripple::before{content:"";display:block;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;pointer-events:none;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-inactive-label-text-color, var(--mat-sys-on-surface));display:inline-flex;align-items:center}.mat-mdc-tab .mdc-tab__content{position:relative;pointer-events:auto}.mat-mdc-tab:hover .mdc-tab__ripple::before{opacity:.04}.mat-mdc-tab.cdk-program-focused .mdc-tab__ripple::before,.mat-mdc-tab.cdk-keyboard-focused .mdc-tab__ripple::before{opacity:.12}.mat-mdc-tab .mat-ripple-element{opacity:.12;background-color:var(--mat-tab-inactive-ripple-color, var(--mat-sys-on-surface))}.mat-mdc-tab-group.mat-mdc-tab-group-stretch-tabs>.mat-mdc-tab-header .mat-mdc-tab{flex-grow:1}.mat-mdc-tab-group{display:flex;flex-direction:column;max-width:100%}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination{background-color:var(--mat-tab-background-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mat-mdc-tab .mdc-tab__text-label{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background.mat-primary>.mat-mdc-tab-header .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab__text-label{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background:not(.mat-primary)>.mat-mdc-tab-header .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab-indicator__content--underline{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-focus-indicator::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-focus-indicator::before{border-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mdc-tab__ripple::before,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-ripple-element,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mdc-tab__ripple::before{background-color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header .mat-mdc-tab-header-pagination-chevron,.mat-mdc-tab-group.mat-tabs-with-background>.mat-mdc-tab-header-pagination .mat-mdc-tab-header-pagination-chevron{color:var(--mat-tab-foreground-color)}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header{flex-direction:column-reverse}.mat-mdc-tab-group.mat-mdc-tab-group-inverted-header .mdc-tab-indicator__content--underline{align-self:flex-start}.mat-mdc-tab-body-wrapper{position:relative;overflow:hidden;display:flex;transition:height 500ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-mdc-tab-body-wrapper._mat-animation-noopable{transition:none !important;animation:none !important}
|
|
4
|
-
`],encapsulation:2})}return n})(),Pt=class{index;tab};var Le=(()=>{class n{static \u0275fac=function(e){return new(e||n)};static \u0275mod=qt({type:n});static \u0275inj=Qt({imports:[kt,kt]})}return n})();var bn=["canvas"];W.register(...mt);var pt=class n{name="";canvasRef;chart;samples=[];timer;http=m(dt);ngAfterViewInit(){let a=matchMedia("(prefers-reduced-motion: reduce)").matches,t={type:"line",data:{labels:[],datasets:[{label:"CPU %",data:[],yAxisID:"y1",borderColor:"rgb(96, 165, 250)",backgroundColor:"rgba(96, 165, 250, 0.12)",tension:.25,pointRadius:0,fill:!0},{label:"Mem MB",data:[],yAxisID:"y2",borderColor:"rgb(168, 85, 247)",backgroundColor:"rgba(168, 85, 247, 0.10)",tension:.25,pointRadius:0,fill:!0}]},options:{responsive:!0,maintainAspectRatio:!1,animation:a?!1:{duration:200},plugins:{legend:{position:"bottom",labels:{boxWidth:12}}},scales:{x:{ticks:{maxTicksLimit:6,autoSkip:!0}},y1:{position:"left",beginAtZero:!0,title:{display:!0,text:"CPU %"}},y2:{position:"right",beginAtZero:!0,title:{display:!0,text:"Mem MB"},grid:{display:!1}}}}};this.chart=new W(this.canvasRef.nativeElement,t),this.tick(),this.timer=setInterval(()=>{this.tick()},5e3)}ngOnDestroy(){this.timer&&clearInterval(this.timer),this.chart?.destroy()}async tick(){if(!(!this.name||!this.chart))try{let a=await N(this.http.get(`/api/apps/${encodeURIComponent(this.name)}?format=full`));this.samples.push({ts:Date.now(),cpu:Number(a?.cpu??0),memMB:Number(a?.memMB??0)}),this.samples.length>60&&this.samples.shift(),this.chart.data.labels=this.samples.map(t=>new Date(t.ts).toLocaleTimeString()),this.chart.data.datasets[0].data=this.samples.map(t=>t.cpu),this.chart.data.datasets[1].data=this.samples.map(t=>t.memMB),this.chart.update("none")}catch{}}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=A({type:n,selectors:[["dm-metrics-chart"]],viewQuery:function(t,e){if(t&1&&T(bn,7),t&2){let i;v(i=y())&&(e.canvasRef=i.first)}},inputs:{name:"name"},decls:3,vars:0,consts:[["canvas",""],[2,"position","relative","height","220px"]],template:function(t,e){t&1&&(Zt(0,"div",1),Xt(1,"canvas",null,0),Yt())},encapsulation:2,changeDetection:0})};var _n=["logBox"],un=["spark"],hn=n=>["/apps",n],fn=(n,a)=>a.file;function gn(n,a){if(n&1&&(o(0,"span",20),x(1,"span",21),o(2,"span"),l(3),r()()),n&2){let t=c(),e=c();ot("--dm-tone",e.tone(t.workspaceLabel)),d(3),f(t.workspaceLabel)}}function vn(n,a){n&1&&x(0,"mat-spinner",16)}function yn(n,a){n&1&&(o(0,"span",5),l(1,"play_arrow"),r())}function Cn(n,a){if(n&1){let t=P();o(0,"button",22),k("click",function(){u(t);let i=c(2);return h(i.act("start"))}),b(1,vn,1,0,"mat-spinner",16)(2,yn,2,0,"span",5),o(3,"span"),l(4,"Start"),r()()}if(n&2){let t=c(2);g("disabled",t.busy("start")),d(),_(t.busy("start")?1:2)}}function xn(n,a){n&1&&x(0,"mat-spinner",16)}function kn(n,a){n&1&&(o(0,"span",5),l(1,"stop"),r())}function Tn(n,a){if(n&1){let t=P();o(0,"button",15),k("click",function(){u(t);let i=c(2);return h(i.act("stop"))}),b(1,xn,1,0,"mat-spinner",16)(2,kn,2,0,"span",5),o(3,"span"),l(4,"Stop"),r()()}if(n&2){let t=c(2);g("disabled",t.busy("stop")),d(),_(t.busy("stop")?1:2)}}function wn(n,a){n&1&&x(0,"mat-spinner",16)}function Mn(n,a){n&1&&(o(0,"span",5),l(1,"restart_alt"),r())}function In(n,a){n&1&&x(0,"mat-spinner",16)}function Dn(n,a){n&1&&(o(0,"span",5),l(1,"cleaning_services"),r())}function Pn(n,a){n&1&&x(0,"mat-spinner",16)}function En(n,a){n&1&&(o(0,"span",5),l(1,"photo_camera"),r())}function Sn(n,a){if(n&1&&(o(0,"a",19)(1,"span",5),l(2,"open_in_new"),r(),o(3,"span"),l(4,"Open"),r()()),n&2){let t=c();g("href",t.url,ft)}}function Rn(n,a){if(n&1){let t=P();o(0,"div",6)(1,"h1",9)(2,"dm-mono"),l(3),r()(),x(4,"dm-status-pill",10),b(5,gn,4,3,"span",11),r(),o(6,"div",12),b(7,Cn,5,2,"button",13)(8,Tn,5,2,"button",14),o(9,"button",15),k("click",function(){u(t);let i=c();return h(i.act("restart"))}),b(10,wn,1,0,"mat-spinner",16)(11,Mn,2,0,"span",5),o(12,"span"),l(13,"Restart"),r()(),o(14,"button",17),k("click",function(){u(t);let i=c();return h(i.onClean())}),b(15,In,1,0,"mat-spinner",16)(16,Dn,2,0,"span",5),o(17,"span"),l(18,"Clean"),r()(),o(19,"button",18),k("click",function(){u(t);let i=c();return h(i.onSnapshot())}),b(20,Pn,1,0,"mat-spinner",16)(21,En,2,0,"span",5),o(22,"span"),l(23,"Snapshot"),r()(),b(24,Sn,5,1,"a",19),r()}if(n&2){let t=a,e=c();d(3),f(t.name),d(),g("status",t.status)("health",t.health),d(),_(t.workspaceLabel?5:-1),d(2),_(t.status==="stopped"||t.status==="error"?7:8),d(2),g("disabled",e.busy("restart")),d(),_(e.busy("restart")?10:11),d(4),g("disabled",e.busy("clean")),d(),_(e.busy("clean")?15:16),d(4),g("disabled",e.busy("snapshot")),d(),_(e.busy("snapshot")?20:21),d(4),_(t.url?24:-1)}}function An(n,a){n&1&&(o(0,"div",6),x(1,"dm-skeleton",23),r())}function Bn(n,a){n&1&&(o(0,"span",46),l(1,"info"),r(),l(2," Overview "))}function Ln(n,a){if(n&1&&(o(0,"a",30)(1,"dm-mono"),l(2),r()()),n&2){let t=c();g("href",t.url,ft),d(2),f(t.url)}}function On(n,a){n&1&&l(0," \u2014 ")}function Fn(n,a){if(n&1&&(o(0,"dt"),l(1,"Health"),r(),o(2,"dd",47)(3,"dm-mono"),l(4),r()()),n&2){let t=c();d(4),f(t.lastHealthError)}}function Vn(n,a){if(n&1&&(o(0,"tr")(1,"td")(2,"dm-mono"),l(3),r()(),o(4,"td",48)(5,"dm-mono"),l(6),r()()()),n&2){let t=a.$implicit,e=c(3);d(3),f(t.path||t.name),d(3),f(e.fmtKb(t.sizeKb??t.kb??e.toKb(t.size)))}}function Nn(n,a){if(n&1&&(o(0,"table",33)(1,"thead")(2,"tr")(3,"th"),l(4,"file"),r(),o(5,"th",48),l(6,"size"),r()()(),o(7,"tbody"),E(8,Vn,7,2,"tr",null,nt),r()()),n&2){let t=c(2);d(8),S(t.bundleFiles())}}function Hn(n,a){n&1&&(o(0,"div",34),l(1,"No bundle information."),r())}function zn(n,a){if(n&1&&(o(0,"a",49)(1,"span",5),l(2,"link"),r(),o(3,"dm-mono"),l(4),r()()),n&2){let t=a.$implicit;g("routerLink",Jt(2,hn,t)),d(4),f(t)}}function Qn(n,a){if(n&1&&(o(0,"div",35),E(1,zn,5,4,"a",49,$),r()),n&2){let t=c(2);d(),S(t.dependsOn())}}function $n(n,a){n&1&&(o(0,"div",34),l(1,"No dependencies."),r())}function Wn(n,a){if(n&1&&(o(0,"span",50),l(1),r()),n&2){let t=c(3);d(),f(t.errors().length)}}function jn(n,a){if(n&1&&(o(0,"span",46),l(1,"error"),r(),l(2," Errors "),b(3,Wn,2,1,"span",50)),n&2){let t=c(2);d(3),_(t.errors().length?3:-1)}}function Gn(n,a){if(n&1&&(o(0,"span"),l(1),r()),n&2){let t=c(2).$implicit;d(),L(":",t.parsed==null?null:t.parsed.col)}}function qn(n,a){if(n&1&&(o(0,"dm-mono"),l(1),b(2,Gn,2,1,"span"),r()),n&2){let t=c().$implicit;d(),L(":",t.parsed==null?null:t.parsed.line),d(),_((t.parsed==null?null:t.parsed.col)!=null?2:-1)}}function Kn(n,a){if(n&1&&(o(0,"span",56)(1,"dm-mono"),l(2),r()()),n&2){let t=c().$implicit;d(2),f(t.parsed==null?null:t.parsed.code)}}function Un(n,a){if(n&1&&(o(0,"span",57),l(1),r()),n&2){let t=c().$implicit;d(),L("\xD7",t.count)}}function Zn(n,a){if(n&1&&(o(0,"li",54)(1,"div",55),b(2,qn,3,2,"dm-mono"),b(3,Kn,3,1,"span",56),b(4,Un,2,1,"span",57),r(),o(5,"dm-mono")(6,"span",58),l(7),r()()()),n&2){let t=a.$implicit;d(2),_((t.parsed==null?null:t.parsed.line)!=null?2:-1),d(),_(t.parsed!=null&&t.parsed.code?3:-1),d(),_(t.count>1?4:-1),d(3),f((t.parsed==null?null:t.parsed.message)??t.message)}}function Yn(n,a){if(n&1&&(o(0,"section",51)(1,"header",52)(2,"dm-mono")(3,"strong"),l(4),r()(),o(5,"span",50),l(6),r()(),o(7,"ul",53),E(8,Zn,8,4,"li",54,nt),r()()),n&2){let t=a.$implicit;d(4),f(t.file),d(2),f(t.items.length),d(2),S(t.items)}}function Xn(n,a){if(n&1&&E(0,Yn,10,2,"section",51,fn),n&2){let t=c(2);S(t.errorsByFile())}}function Jn(n,a){n&1&&x(0,"dm-empty",36)}function ti(n,a){n&1&&(o(0,"span",46),l(1,"terminal"),r(),l(2," Logs "))}function ei(n,a){if(n&1&&(o(0,"div",43)(1,"dm-mono"),l(2),r()()),n&2){let t=a.$implicit;d(2),f(t)}}function ni(n,a){n&1&&(o(0,"div",44),l(1,"Waiting for log lines\u2026"),r())}function ii(n,a){n&1&&(o(0,"span",46),l(1,"timeline"),r(),l(2," History "))}function ai(n,a){if(n&1&&(o(0,"div",59)(1,"div",60)(2,"span",61),l(3,"samples"),r(),o(4,"span",62),l(5),r()(),o(6,"div",60)(7,"span",61),l(8,"p50"),r(),o(9,"span",62),l(10),r()(),o(11,"div",60)(12,"span",61),l(13,"p95"),r(),o(14,"span",62),l(15),r()(),o(16,"div",60)(17,"span",61),l(18,"max"),r(),o(19,"span",62),l(20),r()()(),o(21,"div",63),x(22,"canvas",null,1),r()),n&2){let t=c(2);d(5),f(t.compileTimes().length),d(5),L("",t.p50()," ms"),d(5),L("",t.p95()," ms"),d(5),L("",t.pMax()," ms")}}function oi(n,a){n&1&&(o(0,"div",34),l(1,"No compile history yet."),r())}function ri(n,a){n&1&&(o(0,"span",46),l(1,"tune"),r(),l(2," Env "))}function si(n,a){n&1&&(o(0,"span",67),l(1,"active"),r())}function li(n,a){if(n&1){let t=P();o(0,"label",64)(1,"input",65),k("change",function(){let i=u(t).$implicit,s=c(3);return h(s.onEnvSwitch(i))}),r(),x(2,"span",66),o(3,"dm-mono"),l(4),r(),b(5,si,2,0,"span",67),r()}if(n&2){let t=a.$implicit,e=c(3);d(),g("value",t)("checked",e.envActive()===t)("disabled",e.busy("env")),d(3),f(t),d(),_(e.envActive()===t?5:-1)}}function di(n,a){if(n&1&&(o(0,"div",45),E(1,li,6,5,"label",64,$),r()),n&2){let t=c(2);d(),S(t.envFiles())}}function ci(n,a){n&1&&(o(0,"div",34),l(1,"No env files available."),r())}function mi(n,a){if(n&1){let t=P();o(0,"mat-tab-group",7)(1,"mat-tab"),B(2,Bn,3,0,"ng-template",24),o(3,"div",25)(4,"div",26)(5,"section",27)(6,"h3",28),l(7,"Runtime"),r(),o(8,"dl",29)(9,"dt"),l(10,"Port"),r(),o(11,"dd")(12,"dm-mono"),l(13),r()(),o(14,"dt"),l(15,"URL"),r(),o(16,"dd"),b(17,Ln,3,2,"a",30)(18,On,1,0),r(),o(19,"dt"),l(20,"Uptime"),r(),o(21,"dd")(22,"dm-mono"),l(23),r()(),o(24,"dt"),l(25,"Last compile"),r(),o(26,"dd")(27,"dm-mono"),l(28),r()(),o(29,"dt"),l(30,"CPU"),r(),o(31,"dd")(32,"dm-mono"),l(33),r()(),o(34,"dt"),l(35,"Mem"),r(),o(36,"dd")(37,"dm-mono"),l(38),r()(),b(39,Fn,5,1),r()(),o(40,"section",31)(41,"h3",28),l(42,"Resources"),r(),x(43,"dm-metrics-chart",32),r()(),o(44,"div",26)(45,"section",27)(46,"h3",28),l(47,"Bundle"),r(),b(48,Nn,10,0,"table",33)(49,Hn,2,0,"div",34),r(),o(50,"section",27)(51,"h3",28),l(52,"Depends on"),r(),b(53,Qn,3,0,"div",35)(54,$n,2,0,"div",34),r()()()(),o(55,"mat-tab"),B(56,jn,4,1,"ng-template",24),o(57,"div",25),b(58,Xn,2,0)(59,Jn,1,0,"dm-empty",36),r()(),o(60,"mat-tab"),B(61,ti,3,0,"ng-template",24),o(62,"div",37)(63,"div",38)(64,"span",34),l(65),r(),x(66,"span",39),o(67,"button",40),k("click",function(){u(t);let i=c();return h(i.clearLogs())}),o(68,"span",5),l(69,"delete_sweep"),r()(),o(70,"button",41),k("click",function(){u(t);let i=c();return h(i.autoScroll.set(!i.autoScroll()))}),o(71,"span",5),l(72,"vertical_align_bottom"),r()()(),o(73,"div",42,0),k("scroll",function(i){u(t);let s=c();return h(s.onLogScroll(i))}),E(75,ei,3,1,"div",43,nt,!1,ni,2,0,"div",44),r()()(),o(78,"mat-tab"),B(79,ii,3,0,"ng-template",24),o(80,"div",25)(81,"section",27)(82,"h3",28),l(83,"Compile times"),r(),b(84,ai,24,4)(85,oi,2,0,"div",34),r()()(),o(86,"mat-tab"),B(87,ri,3,0,"ng-template",24),o(88,"div",25)(89,"section",27)(90,"h3",28),l(91,"Environment file"),r(),b(92,di,3,0,"div",45)(93,ci,2,0,"div",34),r()()()()}if(n&2){let t=a,e=c();g("animationDuration","200ms"),d(13),f(t.port??"\u2014"),d(4),_(t.url?17:18),d(6),f(e.fmtUptime(t.uptimeMs)),d(5),L("",t.lastCompileMs??0," ms"),d(5),f(e.fmtPct(t.cpu)),d(5),f(e.fmtMem(t.memMB)),d(),_(t.lastHealthError?39:-1),d(4),g("name",t.name),d(5),_(e.bundleFiles().length?48:49),d(5),_(e.dependsOn().length?53:54),d(5),_(e.errorsByFile().length?58:59),d(7),L("Live tail \u2014 last ",e.logLines().length," lines"),d(5),w("active",e.autoScroll()),d(5),S(e.logLines()),d(9),_(e.compileTimes().length?84:85),d(8),_(e.envFiles().length?92:93)}}function pi(n,a){n&1&&(o(0,"div",8),x(1,"dm-skeleton",68),r())}W.register(...mt);var Oe=class n{name="";api=m(_e);http=m(dt);snack=m(ve);destroyRef=m($t);logBox;sparkRef;state=R(null);errs=R([]);logLines=R([]);autoScroll=R(!0);compileTimes=R([]);envInfo=R(null);busyMap=R({});logStop;pollTimer;spark;tone=we;summary=M(()=>this.state());errors=M(()=>this.errs());errorsByFile=M(()=>{let a=new Map;for(let t of this.errs()){let e=t.parsed?.file??"(no file)",i=a.get(e)??[];i.push(t),a.set(e,i)}return Array.from(a.entries()).map(([t,e])=>({file:t,items:e}))});bundleFiles=M(()=>{let t=this.state()?.bundle?.files??[];if(!Array.isArray(t))return[];let e=i=>i.sizeKb??i.kb??(i.size?i.size/1024:0)??0;return[...t].sort((i,s)=>e(s)-e(i)).slice(0,8)});dependsOn=M(()=>{let a=this.state(),t=a?.dependsOn??a?.depends_on??[];return Array.isArray(t)?t:[]});envFiles=M(()=>{let a=this.envInfo();return a?a.files??a.available??[]:[]});envActive=M(()=>{let a=this.envInfo();return a?a.active??a.current??a.use??null:null});p50=M(()=>this.percentile(.5));p95=M(()=>this.percentile(.95));pMax=M(()=>{let a=this.compileTimes();return a.length?Math.max(...a.map(t=>t.ms)):0});constructor(){yt(()=>{let a=this.logLines();!this.autoScroll()||!this.logBox||a.length===0||queueMicrotask(()=>{let t=this.logBox.nativeElement;t.scrollTop=t.scrollHeight})}),yt(()=>{let a=this.compileTimes();!this.spark||!a.length||this.updateSpark(a)})}async ngOnInit(){await this.refresh(),this.pollTimer=setInterval(()=>{this.refresh()},4e3),this.logStop=this.api.openLogStream(this.name,a=>{let t=`${this.fmtTs(a.ts)} ${a.line}`;this.logLines.update(e=>{let i=e.length>=500?e.slice(e.length-499):e.slice();return i.push(t),i})}),this.loadCompile(),this.loadEnv()}ngAfterViewInit(){if(!this.sparkRef)return;let a=matchMedia("(prefers-reduced-motion: reduce)").matches,t={type:"line",data:{labels:[],datasets:[]},options:{responsive:!0,maintainAspectRatio:!1,animation:a?!1:{duration:200},plugins:{legend:{position:"bottom",labels:{boxWidth:12}}},scales:{x:{ticks:{maxTicksLimit:6,autoSkip:!0}},y:{beginAtZero:!0,title:{display:!0,text:"ms"}}}}};this.spark=new W(this.sparkRef.nativeElement,t);let e=this.compileTimes();e.length&&this.updateSpark(e)}ngOnDestroy(){this.pollTimer&&clearInterval(this.pollTimer),this.logStop?.(),this.spark?.destroy()}async refresh(){let[a,t]=await Promise.all([this.api.appDetail(this.name),this.api.appErrors(this.name)]);a&&this.state.set(a),this.errs.set(Array.isArray(t)?t:[])}async loadCompile(){let a=await this.api.getCompileTimes(this.name,100);this.compileTimes.set(a)}async loadEnv(){try{let a=await N(this.http.get(`/api/apps/${encodeURIComponent(this.name)}/env`));this.envInfo.set(a??null)}catch{this.envInfo.set(null)}}busy(a){return!!this.busyMap()[a]}setBusy(a,t){this.busyMap.update(e=>ut(_t({},e),{[a]:t}))}async act(a){if(!this.busy(a)){this.setBusy(a,!0);try{a==="start"?await this.api.startApp(this.name):a==="stop"?await this.api.stopApp(this.name):await this.api.restartApp(this.name),this.snack.open(`${a}: ok`,"",{duration:1500}),await this.refresh()}catch(t){this.snack.open(`${a} failed: ${t?.message??"error"}`,"Dismiss",{duration:4e3})}finally{this.setBusy(a,!1)}}}async onClean(){if(!this.busy("clean")&&window.confirm(`Clean caches for "${this.name}"? This may remove build artifacts.`)){this.setBusy("clean",!0);try{await N(this.http.post(`/api/apps/${encodeURIComponent(this.name)}/clean`,{})),this.snack.open(`Cleaned ${this.name}`,"",{duration:2e3}),await this.refresh()}catch(a){this.snack.open(`Clean failed: ${a?.message??"error"}`,"Dismiss",{duration:4e3})}finally{this.setBusy("clean",!1)}}}async onSnapshot(){if(!this.busy("snapshot")){this.setBusy("snapshot",!0);try{let a=await N(this.http.post(`/api/apps/${encodeURIComponent(this.name)}/snapshot?write=1`,{})),t=a?.path??a?.file??a?.snapshot??"";this.snack.open(t?`Snapshot: ${t}`:"Snapshot written","OK",{duration:5e3})}catch(a){this.snack.open(`Snapshot failed: ${a?.message??"error"}`,"Dismiss",{duration:4e3})}finally{this.setBusy("snapshot",!1)}}}async onEnvSwitch(a){if(this.busy("env"))return;this.setBusy("env",!0);let t=this.envInfo();this.envInfo.update(e=>e&&ut(_t({},e),{active:a,current:a}));try{await N(this.http.post(`/api/apps/${encodeURIComponent(this.name)}/env`,{use:a})),this.snack.open(`Env set to ${a}`,"",{duration:2e3}),await this.loadEnv()}catch(e){this.envInfo.set(t),this.snack.open(`Env switch failed: ${e?.message??"error"}`,"Dismiss",{duration:4e3})}finally{this.setBusy("env",!1)}}onLogScroll(a){let t=a.target,e=t.scrollHeight-t.scrollTop-t.clientHeight<20;this.autoScroll.set(e)}clearLogs(){this.logLines.set([])}updateSpark(a){if(!this.spark)return;let t=a.map((p,C)=>C+1),e=a.map(p=>p.ms),i=this.percentile(.5),s=this.percentile(.95);this.spark.data.labels=t,this.spark.data.datasets=[{label:"compile ms",data:e,borderColor:"rgb(96, 165, 250)",backgroundColor:"rgba(96, 165, 250, 0.15)",tension:.25,pointRadius:0,fill:!0},{label:"p50",data:t.map(()=>i),borderColor:"rgba(132, 204, 22, 0.85)",borderDash:[4,4],pointRadius:0,fill:!1},{label:"p95",data:t.map(()=>s),borderColor:"rgba(251, 146, 60, 0.85)",borderDash:[4,4],pointRadius:0,fill:!1}],this.spark.update("none")}percentile(a){let t=this.compileTimes().map(i=>i.ms).slice().sort((i,s)=>i-s);if(!t.length)return 0;let e=Math.min(t.length-1,Math.max(0,Math.floor(a*(t.length-1))));return Math.round(t[e])}fmtUptime(a){if(!a||a<0)return"\u2014";let t=Math.floor(a/1e3);return t<60?t+"s":t<3600?Math.floor(t/60)+"m "+t%60+"s":Math.floor(t/3600)+"h "+Math.floor(t%3600/60)+"m"}fmtPct(a){return a==null||isNaN(a)?"\u2014":a.toFixed(0)+"%"}fmtMem(a){return a==null||isNaN(a)?"\u2014":a>=1024?(a/1024).toFixed(1)+" GB":Math.round(a)+" MB"}fmtKb(a){return a==null||isNaN(a)?"\u2014":a>=1024?(a/1024).toFixed(2)+" MB":a.toFixed(1)+" KB"}toKb(a){if(a!=null)return a/1024}fmtTs(a){if(!a)return"";let t=new Date(a);return`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}`}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=A({type:n,selectors:[["dm-app-detail"]],viewQuery:function(t,e){if(t&1&&(T(_n,5),T(un,5)),t&2){let i;v(i=y())&&(e.logBox=i.first),v(i=y())&&(e.sparkRef=i.first)}},inputs:{name:"name"},decls:11,vars:2,consts:[["logBox",""],["spark",""],[1,"dm-detail"],[1,"dm-detail-header"],["routerLink","/","matTooltip","Back to apps",1,"dm-back"],[1,"material-symbols-outlined"],[1,"dm-title-row"],[1,"dm-tabs",3,"animationDuration"],[1,"dm-loading"],[1,"dm-title"],[3,"status","health"],[1,"dm-ws-chip",3,"--dm-tone"],[1,"dm-action-bar"],[1,"dm-action-btn","dm-action-primary",3,"disabled"],[1,"dm-action-btn",3,"disabled"],[1,"dm-action-btn",3,"click","disabled"],["diameter","14"],["matTooltip","Clean caches (confirms)",1,"dm-action-btn",3,"click","disabled"],["matTooltip","Write a snapshot of the current state",1,"dm-action-btn",3,"click","disabled"],["target","_blank","rel","noopener",1,"dm-action-btn",3,"href"],[1,"dm-ws-chip"],[1,"dm-ws-dot"],[1,"dm-action-btn","dm-action-primary",3,"click","disabled"],["width","220px","height","2rem"],["mat-tab-label",""],[1,"dm-tab-body"],[1,"dm-cards-row"],[1,"dm-panel"],[1,"dm-panel-title"],[1,"dm-kv"],["target","_blank","rel","noopener",3,"href"],[1,"dm-panel","dm-panel-wide"],[3,"name"],[1,"dm-bundle"],[1,"dm-dim"],[1,"dm-chips-row"],["icon","check_circle","title","No errors","hint","Nothing to fix right now."],[1,"dm-tab-body","dm-tab-logs"],[1,"dm-logs-toolbar"],[1,"dm-spacer"],["matTooltip","Clear",1,"dm-iconbtn",3,"click"],["matTooltip","Auto-scroll",1,"dm-iconbtn",3,"click"],[1,"dm-logbox",3,"scroll"],[1,"dm-logline"],[1,"dm-dim",2,"padding","1rem"],[1,"dm-radios"],[1,"material-symbols-outlined","dm-tab-icon"],[1,"dm-err-text"],[1,"dm-right"],[1,"dm-dep-chip",3,"routerLink"],[1,"dm-tab-count"],[1,"dm-panel","dm-err-group"],[1,"dm-err-group-head"],[1,"dm-err-list"],[1,"dm-err-item"],[1,"dm-err-meta"],[1,"dm-err-code"],[1,"dm-err-count"],[1,"dm-err-msg"],[1,"dm-history-stats"],[1,"dm-stat"],[1,"dm-stat-label"],[1,"dm-stat-num"],[1,"dm-spark-wrap"],[1,"dm-radio"],["type","radio","name","env-file",3,"change","value","checked","disabled"],[1,"dm-radio-mark"],[1,"dm-env-active"],["width","100%","height","200px"]],template:function(t,e){if(t&1&&(o(0,"div",2)(1,"header",3)(2,"a",4)(3,"span",5),l(4,"arrow_back"),r(),o(5,"span"),l(6,"Apps"),r()(),b(7,Rn,25,12)(8,An,2,0,"div",6),r(),b(9,mi,94,18,"mat-tab-group",7)(10,pi,2,0,"div",8),r()),t&2){let i,s;d(7),_((i=e.summary())?7:8,i),d(2),_((s=e.summary())?9:10,s)}},dependencies:[te,ge,se,Le,St,Rt,Be,be,pe,he,ue,ye,pt,Ce,ke,Te,xe],styles:['[_nghost-%COMP%]{display:block}.dm-detail[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem}.dm-detail-header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem;padding-bottom:.5rem}.dm-back[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;width:max-content;color:var(--mat-sys-on-surface-variant);text-decoration:none;font:500 .8125rem/1.25rem Roboto;padding:4px 8px;border-radius:8px;transition:background var(--dm-motion-short) var(--dm-motion-easing)}.dm-back[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container);color:var(--mat-sys-on-surface)}.dm-back[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:18px}.dm-title-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.dm-title[_ngcontent-%COMP%]{margin:0;font:400 1.625rem/2rem Roboto}.dm-title[_ngcontent-%COMP%] .dm-mono[_ngcontent-%COMP%]{font-size:1.625rem;font-weight:500}.dm-ws-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;padding:4px 10px;border-radius:999px;background:var(--mat-sys-surface-container);border:1px solid var(--mat-sys-outline-variant);font:500 .75rem/1rem Roboto;color:var(--mat-sys-on-surface-variant)}.dm-ws-dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:999px;background:var(--dm-tone, var(--mat-sys-primary))}.dm-action-bar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.375rem}.dm-action-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;padding:6px 12px;border-radius:10px;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;text-decoration:none;transition:background var(--dm-motion-short) var(--dm-motion-easing)}.dm-action-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--mat-sys-surface-container-high)}.dm-action-btn[_ngcontent-%COMP%]:disabled{opacity:.55;cursor:not-allowed}.dm-action-btn[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:18px}.dm-action-primary[_ngcontent-%COMP%]{background:var(--mat-sys-primary);color:var(--mat-sys-on-primary);border-color:transparent}.dm-action-primary[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in oklch,var(--mat-sys-primary) 88%,black)}.dm-tabs[_ngcontent-%COMP%]{background:transparent}.dm-tab-icon[_ngcontent-%COMP%]{font-size:18px;margin-right:.375rem;vertical-align:middle}.dm-tab-count[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;min-width:18px;padding:0 6px;margin-left:.375rem;border-radius:999px;background:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface-variant);font:600 .6875rem/1rem Roboto Mono,ui-monospace,monospace}.dm-tab-body[_ngcontent-%COMP%]{padding-top:1rem;display:flex;flex-direction:column;gap:1rem}.dm-cards-row[_ngcontent-%COMP%]{display:grid;gap:1rem;grid-template-columns:minmax(260px,1fr) minmax(0,1.5fr)}@media(max-width:880px){.dm-cards-row[_ngcontent-%COMP%]{grid-template-columns:1fr}}.dm-panel[_ngcontent-%COMP%]{padding:1rem 1.125rem;border-radius:14px;background:var(--mat-sys-surface-container-low);border:1px solid var(--mat-sys-outline-variant)}.dm-panel-wide[_ngcontent-%COMP%]{min-width:0}.dm-panel-title[_ngcontent-%COMP%]{margin:0 0 .5rem;font:500 .8125rem/1.25rem Roboto;text-transform:uppercase;letter-spacing:.04rem;color:var(--mat-sys-on-surface-variant)}.dm-kv[_ngcontent-%COMP%]{display:grid;grid-template-columns:max-content 1fr;gap:.25rem .75rem;margin:0}.dm-kv[_ngcontent-%COMP%] dt[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font:400 .8125rem/1.25rem Roboto}.dm-kv[_ngcontent-%COMP%] dd[_ngcontent-%COMP%]{margin:0;color:var(--mat-sys-on-surface)}.dm-kv[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:var(--mat-sys-primary);text-decoration:none}.dm-kv[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{text-decoration:underline}.dm-err-text[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.dm-bundle[_ngcontent-%COMP%]{width:100%;border-collapse:collapse}.dm-bundle[_ngcontent-%COMP%] th[_ngcontent-%COMP%], .dm-bundle[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{text-align:left;padding:.375rem .5rem;font-size:.8125rem}.dm-bundle[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{font-weight:500;color:var(--mat-sys-on-surface-variant);border-bottom:1px solid var(--mat-sys-outline-variant)}.dm-bundle[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]{border-bottom:1px solid color-mix(in oklch,var(--mat-sys-outline-variant) 50%,transparent)}.dm-bundle[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child{border-bottom:0}.dm-right[_ngcontent-%COMP%]{text-align:right}.dm-chips-row[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.375rem}.dm-dep-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;padding:4px 10px;border-radius:999px;background:var(--mat-sys-surface-container);border:1px solid var(--mat-sys-outline-variant);color:var(--mat-sys-on-surface);text-decoration:none;font:500 .8125rem/1rem Roboto;transition:background var(--dm-motion-short) var(--dm-motion-easing)}.dm-dep-chip[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high)}.dm-dep-chip[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:14px;color:var(--mat-sys-on-surface-variant)}.dm-err-group[_ngcontent-%COMP%]{padding:0;overflow:hidden}.dm-err-group-head[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:.625rem .875rem;background:var(--mat-sys-surface-container);border-bottom:1px solid var(--mat-sys-outline-variant)}.dm-err-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0}.dm-err-item[_ngcontent-%COMP%]{padding:.5rem .875rem;border-bottom:1px solid color-mix(in oklch,var(--mat-sys-outline-variant) 60%,transparent);display:flex;flex-direction:column;gap:.25rem}.dm-err-item[_ngcontent-%COMP%]:last-child{border-bottom:0}.dm-err-meta[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;color:var(--mat-sys-on-surface-variant);font-size:.75rem}.dm-err-code[_ngcontent-%COMP%]{color:var(--mat-sys-error)}.dm-err-count[_ngcontent-%COMP%]{padding:0 6px;border-radius:999px;background:color-mix(in oklch,var(--mat-sys-error) 12%,transparent);color:var(--mat-sys-error);font:600 .6875rem/1rem Roboto Mono,ui-monospace,monospace}.dm-err-msg[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface);white-space:pre-wrap;word-break:break-word}.dm-tab-logs[_ngcontent-%COMP%]{gap:0}.dm-logs-toolbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.375rem;padding:.375rem .5rem;background:var(--mat-sys-surface-container);border:1px solid var(--mat-sys-outline-variant);border-bottom:0;border-radius:12px 12px 0 0}.dm-spacer[_ngcontent-%COMP%]{flex:1}.dm-iconbtn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:6px;background:transparent;border:0;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)}.dm-iconbtn[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container-high);color:var(--mat-sys-on-surface)}.dm-iconbtn.active[_ngcontent-%COMP%]{color:var(--mat-sys-primary)}.dm-iconbtn[_ngcontent-%COMP%] .material-symbols-outlined[_ngcontent-%COMP%]{font-size:18px}.dm-logbox[_ngcontent-%COMP%]{height:480px;overflow:auto;padding:.5rem .75rem;background:var(--mat-sys-surface);border:1px solid var(--mat-sys-outline-variant);border-radius:0 0 12px 12px;font-family:var(--dm-mono)}.dm-logline[_ngcontent-%COMP%]{white-space:pre-wrap;word-break:break-word;padding:1px 0;color:var(--mat-sys-on-surface)}.dm-logline[_ngcontent-%COMP%] .dm-mono[_ngcontent-%COMP%]{font-size:.8125rem}.dm-history-stats[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.75rem;margin-bottom:.75rem}.dm-stat[_ngcontent-%COMP%]{display:flex;flex-direction:column;padding:.5rem .75rem;border-radius:10px;background:var(--mat-sys-surface-container);min-width:70px}.dm-stat-label[_ngcontent-%COMP%]{font:500 .6875rem/1rem Roboto;text-transform:uppercase;letter-spacing:.04rem;color:var(--mat-sys-on-surface-variant)}.dm-stat-num[_ngcontent-%COMP%]{font:600 1.125rem/1.5rem Roboto Mono,ui-monospace,monospace;color:var(--mat-sys-on-surface)}.dm-spark-wrap[_ngcontent-%COMP%]{position:relative;height:200px}.dm-radios[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem}.dm-radio[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;padding:.375rem .5rem;border-radius:8px;cursor:pointer;transition:background var(--dm-motion-short) var(--dm-motion-easing)}.dm-radio[_ngcontent-%COMP%]:hover{background:var(--mat-sys-surface-container)}.dm-radio[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{position:absolute;opacity:0;pointer-events:none}.dm-radio-mark[_ngcontent-%COMP%]{display:inline-block;width:16px;height:16px;border-radius:999px;border:2px solid var(--mat-sys-outline);position:relative;flex-shrink:0}.dm-radio[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .dm-radio-mark[_ngcontent-%COMP%]{border-color:var(--mat-sys-primary)}.dm-radio[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .dm-radio-mark[_ngcontent-%COMP%]:after{content:"";position:absolute;inset:3px;border-radius:999px;background:var(--mat-sys-primary)}.dm-env-active[_ngcontent-%COMP%]{margin-left:auto;padding:2px 8px;border-radius:999px;font:500 .6875rem/1rem Roboto;background:color-mix(in oklch,var(--mat-sys-primary) 14%,transparent);color:var(--mat-sys-primary)}.dm-dim[_ngcontent-%COMP%]{color:var(--mat-sys-on-surface-variant);font-size:.875rem}.dm-loading[_ngcontent-%COMP%]{padding:2rem 0}'],changeDetection:0})};export{Oe as AppDetailComponent};
|