@weapp-vite/dashboard 7.1.4 → 7.2.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/README.md CHANGED
@@ -49,7 +49,48 @@ weapp-vite build --analyze
49
49
  weapp-vite dev --analyze
50
50
  ```
51
51
 
52
- `weapp-vite` 会在运行时检查当前项目中是否安装了 `@weapp-vite/dashboard`。如果存在,就读取本包 `dist/` 中的静态资源并启动本地分析页面。
52
+ `weapp-vite` 会在运行时检查当前项目中是否安装了 `@weapp-vite/dashboard`。如果存在,就读取本包 `dist/` 中的静态资源并启动本地 DevTools 页面。
53
+
54
+ Dashboard 通过挂载在 `/__weapp-vite/` 下的 Devframe 1.0 bridge 连接 CLI([上游迁移说明](https://github.com/devframes/devframe/blob/v1.0.0/docs/content/7.migrations/1.migration-0.10.md)):
55
+
56
+ - Analyze 数据通过带 revision、SHA-256 描述符和固定页上限的只读 RPC 分页获取
57
+ - revision 与最近运行事件通过服务端单向通知同步;WebSocket 断开后会重连并重新查询权威状态
58
+ - Dashboard 不创建可由客户端回写的业务 shared state,并拒绝通用 shared-state set/patch
59
+ - 源码读取保留当前报告 allowlist、符号链接和读取竞态防护;产物文本来自当前分析 revision 的只读快照,不回退到实时 `dist`
60
+ - 单文件上限为 2 MiB,当前 revision 的产物保留预算按原始字节计为 32 MiB;超限明确报错,不读取其他 revision 或磁盘上的替代内容
61
+ - Devframe 显式启用 OTP 与 loopback Origin 门禁;终端会输出可直接打开的 magic link
62
+ - 页面不再依赖 HTML 全局变量、业务 SSE 或 Vite HMR 作为业务数据通道
63
+ - bridge 保持 `mcp: false`,不加载可选的 `@devframes/agentic`;仓库现有 MCP 服务不经由这个 bridge 提供
64
+
65
+ 微信开发者工具继续负责模拟器、原生调试和真机能力;Dashboard 是构建、HMR、包体、诊断和自动化状态的伴随 DevTools。
66
+
67
+ ## 面向 App 与小程序的演进边界
68
+
69
+ 当前页面仍是单项目构建工作台,不是跨设备调试器。`runtimeEvents` 记录的是 CLI/build/HMR/diagnostic 事件,不是被调试应用的 console 或 network 流;前后端也尚未建立 target identity、能力协商和多会话生命周期协议。
70
+
71
+ 源码对比使用与当前报告同一次生成过程采集的产物文本。完整分析从 `analyzeSubpackages` 的 `write: false` 构建输出捕获 chunk/asset;开发模式 fallback 则在扫描 `dist` 生成报告时保存本次读到的同一份字节,并丢弃失败分析的部分捕获。静态 `analyze`、`build --ui`、`dev --ui` 和 fallback 都随报告提交对应快照,不会为界面补写 bundle。
72
+
73
+ 文件请求携带当前显示的 revision,报告更新会拒绝旧请求与过期异步响应;即使文件路径未变,对比面板也会重新读取。产物只保留当前报告对应的快照,不写入历史 JSON,也不证明目标设备正在运行的构建版本;源码仍读取工作区当前文件,不承诺历史源码快照。这条一致性链路不替代下述 target identity 和运行时 adapter。
74
+
75
+ | 目标 | 当前可复用部分 | 尚缺的边界 |
76
+ | --- | --- | --- |
77
+ | 真实微信 IDE | `@weapp-vite/devtools-runtime` 与 MCP 中的 automator 会话、页面数据/WXML 和 console 读取 | Dashboard 只读 adapter、按 target 隔离的日志、显式 detach |
78
+ | Node headless / browser simulator | `mpcore` 的逻辑快照、页面操作和浏览器预览 | 各 provider 的能力声明与事件适配;不能把模拟结果当作真实 IDE 布局或宿主行为 |
79
+ | 桌面 DevTools App 外壳 | 当前 Web Dashboard 与本地 CLI bridge | 桌面打包、进程所有权、安全 IPC、导航及权限隔离 |
80
+ | 原生 iOS/Android App | Dashboard 展示层与 Devframe 连接层 | 原生 runtime/debugger adapter、设备发现、会话管理和平台能力协议 |
81
+
82
+ Web/H5 backend 和 Donut 的多端小程序配置不等于已有通用原生 App 调试目标。桌面外壳也不会自动获得原生调试能力。
83
+
84
+ 如果“App/小程序版本”指工作台本身运行在手机或小程序中,当前依赖浏览器 DOM 的 Dashboard 不能直接作为小程序原生页面运行。需要另行设计 WebView 或原生 UI 容器,以及设备到开发机的连接和鉴权;当前 loopback-only bridge 不提供远程设备接入,不能靠放开监听地址替代安全设计。
85
+
86
+ 推荐先落地一条只读链路:**真实微信 IDE attach → 当前页 route/data/WXML → 按会话隔离的 console → detach**。由 `packages/devtools-runtime` 持有窄的 target contract 和 adapter,Dashboard 只消费能力声明和结构化结果;随后再分别接入 headless、browser 和原生 App adapter。不在第一步暴露 `setData`、任意宿主 API、页面方法调用或任意路径写入。
87
+
88
+ 多 target/Hub 化之前需要明确以下边界:
89
+
90
+ - 协议携带 target identity、协议版本、capabilities 和会话状态;构建 revision 与运行时事件序列分开,文件读取继续受 target/project allowlist 约束。
91
+ - 当前独立 bridge 覆盖了 Devframe 通用 shared-state set/patch 并拒绝写入。这是单工具的只读策略,不能原样放进共享 Hub,否则会阻止其他 Devframe 的 shared-state 写入;需要隔离 bridge 或改为本工具范围内的权限边界。
92
+ - 工作台直接依赖已升级至 Devframe 1.0;`@vitejs/devtools-kit` 的传递依赖仍使用自己的 Devframe/Hub 0.8。当前 bridge 独立运行,不强制覆盖上游 peer 版本;未来接入其 Hub 前需要先统一兼容契约。
93
+ - 复用 automator 时区分释放引用与真正断开连接;日志订阅、缓存和清理必须归属具体 target。当前 MCP 日志池不是多 target 隔离协议,不能直接用作统一事件流。
53
94
 
54
95
  ## 项目结构
55
96
 
@@ -91,6 +132,7 @@ packages/dashboard
91
132
  - `echarts`
92
133
  - `tailwindcss`
93
134
  - `weapp-tailwindcss`(Web generator)
135
+ - `devframe`
94
136
 
95
137
  ## 开发
96
138
 
@@ -102,6 +144,12 @@ packages/dashboard
102
144
  pnpm --filter @weapp-vite/dashboard dev
103
145
  ```
104
146
 
147
+ 该命令只适合检查空态和组件。验证真实 Devframe、Analyze 和运行事件链路时使用:
148
+
149
+ ```bash
150
+ pnpm --filter dashboard-ui-lab dev:ui
151
+ ```
152
+
105
153
  生产构建:
106
154
 
107
155
  ```bash
@@ -1 +1 @@
1
- import{C as e,F as t,G as n,P as r,_ as i,j as a,z as o}from"./vue.js";import{k as s}from"./index.js";function c(e){let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,`true`),t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);if(document.body.removeChild(t),!n)throw Error(`copy text failed`)}async function l(e){let t=null;try{await Promise.race([navigator.clipboard.writeText(e),new Promise((e,n)=>{t=setTimeout(()=>{n(Error(`clipboard write timeout`))},800)})])}finally{t&&clearTimeout(t)}}async function u(e){try{c(e);return}catch{if(navigator.clipboard&&window.isSecureContext){await l(e);return}}throw Error(`copy text failed`)}var d=e({__name:`AppEmptyState`,props:{as:{},compact:{type:Boolean}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function f(e,s,c,l,u,d){return a(),i(t(c.as??`div`),{class:n([`rounded-xl border border-dashed border-(--dashboard-border) bg-(--dashboard-panel-muted) text-sm text-(--dashboard-text-soft)`,c.compact?`px-3 py-4`:`p-5`])},{default:o(()=>[r(e.$slots,`default`)]),_:3},8,[`class`])}var p=s(d,[[`render`,f]]);export{u as n,p as t};
1
+ import{B as e,C as t,F as n,P as r,R as i,X as a,_ as o,g as s,j as c,q as l,v as u,x as d,y as f}from"./vue.js";import{t as p}from"./vendor.js";import{D as m,E as h,T as g}from"./index.js";function _(e){let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,`true`),t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);if(document.body.removeChild(t),!n)throw Error(`copy text failed`)}async function v(e){let t=null;try{await Promise.race([navigator.clipboard.writeText(e),new Promise((e,n)=>{t=setTimeout(()=>{n(Error(`clipboard write timeout`))},800)})])}finally{t&&clearTimeout(t)}}async function y(e){try{_(e);return}catch{if(navigator.clipboard&&window.isSecureContext){await v(e);return}}throw Error(`copy text failed`)}var b=p({base:`flex flex-col rounded-lg border shadow-(--dashboard-shadow)`,variants:{tone:{default:`border-(--dashboard-border) bg-(--dashboard-panel)`,strong:`border-(--dashboard-border-strong) bg-(--dashboard-panel-strong)`,muted:`border-(--dashboard-border) bg-(--dashboard-panel-muted)`},padding:{none:``,sm:`p-3`,md:`p-4`,header:`px-4 py-4 md:px-5`}},defaultVariants:{tone:`default`,padding:`md`}}),x=p({base:`flex items-center justify-center rounded-md bg-(--dashboard-accent-soft) text-(--dashboard-accent)`,variants:{size:{sm:`h-8 w-8`,md:`h-9 w-9`,lg:`h-10 w-10`}},defaultVariants:{size:`md`}}),S=p({base:`rounded-md border border-(--dashboard-border) bg-(--dashboard-panel-muted)`,variants:{padding:{sm:`px-4 py-3`,md:`p-4`},interactive:{true:`transition hover:border-(--dashboard-border-strong) hover:bg-(--dashboard-panel)`,false:``}},defaultVariants:{padding:`md`,interactive:!1}}),C=p({base:`inline-flex items-center gap-2 rounded-full border transition`,variants:{kind:{nav:`px-3.5 py-1.5 text-sm`,theme:`px-3 py-1.5 text-xs font-medium`,badge:`px-2.5 py-1 text-[11px] uppercase tracking-[0.18em]`},active:{true:`border-(--dashboard-accent) bg-(--dashboard-accent-soft) text-(--dashboard-text)`,false:`border-(--dashboard-border) bg-(--dashboard-panel-muted) text-(--dashboard-text-soft) hover:border-(--dashboard-border-strong) hover:text-(--dashboard-text)`}},defaultVariants:{kind:`nav`,active:!1}}),w=p({base:`inline-flex shrink-0 items-center whitespace-nowrap rounded-full border px-2.5 py-1 text-[11px] font-medium uppercase tracking-[0.12em]`,variants:{tone:{neutral:`border-(--dashboard-border) bg-(--dashboard-panel-muted) text-(--dashboard-text-soft)`,info:`border-(--dashboard-border-strong) bg-(--dashboard-accent-soft) text-(--dashboard-accent)`,success:`border-emerald-200 bg-emerald-100 text-emerald-700 dark:border-emerald-500/30 dark:bg-emerald-500/12 dark:text-emerald-300`,warning:`border-amber-200 bg-amber-100 text-amber-700 dark:border-amber-500/30 dark:bg-amber-500/12 dark:text-amber-300`,error:`border-rose-200 bg-rose-100 text-rose-700 dark:border-rose-500/30 dark:bg-rose-500/12 dark:text-rose-300`}},defaultVariants:{tone:`neutral`}});p({base:`rounded-lg border border-(--dashboard-border) bg-(--dashboard-panel) px-4 py-3 text-[11px] uppercase tracking-[0.24em] text-(--dashboard-text-soft) shadow-(--dashboard-shadow)`});var T=t({__name:`AppSurfaceCard`,props:{title:{default:void 0},description:{default:void 0},eyebrow:{default:void 0},iconName:{default:void 0},tone:{default:`default`},padding:{default:`md`},contentClass:{default:``}},setup(e,{expose:t}){t();let n=e,r=i(),a={props:n,slots:r,hasHeader:!!(n.title||n.description||r.header),get cn(){return m},get iconFrameStyles(){return x},get surfaceStyles(){return b},DashboardIcon:g};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),E={key:0,class:`flex items-start justify-between gap-4`},D={class:`flex min-w-0 items-start gap-3`},O={class:`h-5 w-5`},k={class:`min-w-0 sm:flex sm:flex-wrap sm:items-baseline sm:gap-x-2.5`},A={key:0,class:`text-[11px] uppercase tracking-[0.24em] text-(--dashboard-accent)`},j=[`title`],M={key:2,class:`mt-1 w-full text-sm leading-6 text-(--dashboard-text-muted)`};function N(e,t,n,i,o,p){return c(),f(`section`,{class:l(i.cn(i.surfaceStyles({tone:n.tone,padding:n.padding}),n.contentClass))},[i.hasHeader?(c(),f(`header`,E,[s(`div`,D,[n.iconName?(c(),f(`span`,{key:0,class:l([i.iconFrameStyles({size:`md`}),`shrink-0`])},[s(`span`,O,[d(i.DashboardIcon,{name:n.iconName},null,8,[`name`])])],2)):u(``,!0),s(`div`,k,[n.eyebrow?(c(),f(`p`,A,a(n.eyebrow),1)):u(``,!0),n.title?(c(),f(`h2`,{key:1,class:`truncate text-lg font-semibold tracking-tight`,title:n.title},a(n.title),9,j)):u(``,!0),n.description?(c(),f(`p`,M,a(n.description),1)):u(``,!0)])]),r(e.$slots,`header`)])):u(``,!0),s(`div`,{class:l(i.cn(`min-h-0 flex-1`,i.hasHeader?`mt-4`:``))},[r(e.$slots,`default`)],2)],2)}var P=h(T,[[`render`,N]]),F=t({__name:`AppEmptyState`,props:{as:{},compact:{type:Boolean}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function I(t,i,a,s,u,d){return c(),o(n(a.as??`div`),{class:l([`rounded-xl border border-dashed border-(--dashboard-border) bg-(--dashboard-panel-muted) text-sm text-(--dashboard-text-soft)`,a.compact?`px-3 py-4`:`p-5`])},{default:e(()=>[r(t.$slots,`default`)]),_:3},8,[`class`])}var L=h(F,[[`render`,I]]);export{C as a,y as c,S as i,P as n,w as o,x as r,b as s,L as t};
@@ -1 +1 @@
1
- import{C as e,G as t,J as n,P as r,S as i,g as a,j as o,x as s,y as c,z as l}from"./vue.js";import{k as u}from"./index.js";var d=e({__name:`AppMetaLabel`,props:{accent:{type:Boolean}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function f(e,n,i,a,s,l){return o(),c(`p`,{class:t([`text-[11px] uppercase tracking-[0.18em]`,i.accent?`text-(--dashboard-accent)`:`text-(--dashboard-text-soft)`])},[r(e.$slots,`default`)],2)}var p=u(d,[[`render`,f]]),m=`rounded-xl border border-(--dashboard-border) bg-(--dashboard-panel-muted) p-3`,h=e({__name:`AppMetricTile`,props:{label:{},value:{}},setup(e,{expose:t}){t();let n={panelClassName:m,AppMetaLabel:p};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),g={class:`mt-1.5 text-base font-semibold text-(--dashboard-text)`};function _(e,r,u,d,f,p){return o(),c(`div`,{class:t(d.panelClassName)},[i(d.AppMetaLabel,null,{default:l(()=>[s(n(u.label),1)]),_:1}),a(`p`,g,n(u.value),1)])}var v=u(h,[[`render`,_]]);export{p as n,v as t};
1
+ import{B as e,C as t,P as n,X as r,b as i,g as a,j as o,q as s,x as c,y as l}from"./vue.js";import{E as u}from"./index.js";var d=t({__name:`AppMetaLabel`,props:{accent:{type:Boolean}},setup(e,{expose:t}){t();let n={};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function f(e,t,r,i,a,c){return o(),l(`p`,{class:s([`text-[11px] uppercase tracking-[0.18em]`,r.accent?`text-(--dashboard-accent)`:`text-(--dashboard-text-soft)`])},[n(e.$slots,`default`)],2)}var p=u(d,[[`render`,f]]),m=`rounded-xl border border-(--dashboard-border) bg-(--dashboard-panel-muted) p-3`,h=t({__name:`AppMetricTile`,props:{label:{},value:{}},setup(e,{expose:t}){t();let n={panelClassName:m,AppMetaLabel:p};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),g={class:`mt-1.5 text-base font-semibold text-(--dashboard-text)`};function _(t,n,u,d,f,p){return o(),l(`div`,{class:s(d.panelClassName)},[c(d.AppMetaLabel,null,{default:e(()=>[i(r(u.label),1)]),_:1}),a(`p`,g,r(u.value),1)])}var v=u(h,[[`render`,_]]);export{p as n,v as t};
@@ -1 +1 @@
1
- import{C as e,G as t,J as n,j as r,y as i}from"./vue.js";import{T as a,k as o}from"./index.js";var s=e({__name:`AppRuntimeBadge`,props:{label:{},tone:{default:`neutral`}},setup(e,{expose:t}){t();let n={get runtimeBadgeStyles(){return a}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function c(e,a,o,s,c,l){return r(),i(`span`,{class:t(s.runtimeBadgeStyles({tone:o.tone}))},n(o.label),3)}var l=o(s,[[`render`,c]]);export{l as t};
1
+ import{C as e,X as t,j as n,q as r,y as i}from"./vue.js";import{E as a}from"./index.js";import{o}from"./AppEmptyState.js";var s=e({__name:`AppRuntimeBadge`,props:{label:{},tone:{default:`neutral`}},setup(e,{expose:t}){t();let n={get runtimeBadgeStyles(){return o}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}});function c(e,a,o,s,c,l){return n(),i(`span`,{class:r(s.runtimeBadgeStyles({tone:o.tone}))},t(o.label),3)}var l=a(s,[[`render`,c]]);export{l as t};
@@ -0,0 +1 @@
1
+ import{A as e,C as t,N as n,O as r,U as i,V as a,W as o,X as s,b as c,g as l,h as u,j as d,k as f,l as p,p as m,u as h,v as g,x as _,y as v,z as y}from"./vue.js";import{E as b,f as x,x as ee}from"./index.js";import{a as te,c as S,i as C,l as w,n as T,o as E,r as D,s as O,t as k,u as A}from"./d3.js";function j(e){return e.replaceAll(`\\`,`/`).replace(/^\.\//,``).replace(/^\//,``).split(/[?#]/,1)[0]??``}function M(e,t){let n=j(t);if(!t.startsWith(`.`))return n;let r=[...j(e).split(`/`).slice(0,-1),...n.split(`/`)],i=[];for(let e of r)if(e&&e!==`.`){if(e===`..`){i.pop();continue}i.push(e)}return i.join(`/`)}function N(e,t,n){return{id:`chunk:${n.file}`,kind:`chunk`,label:n.file,packageId:e,packageLabel:t,size:n.size??0,isEntry:n.isEntry,moduleCount:n.modules?.length??0}}function P(e){let t=[],n=new Map,r=new Map,i=[];for(let a of e.packages){let e=a.files.filter(e=>e.type===`chunk`),o={id:`package:${a.id}`,kind:`package`,label:a.label,packageId:a.id,packageLabel:a.label,size:a.files.reduce((e,t)=>e+(t.size??0),0),fileCount:a.files.length};t.push(o);for(let s of e){let e=N(a.id,a.label,s);t.push(e),i.push({file:s,node:e}),r.set(j(s.file),e.id);let c={id:`${o.id}->${e.id}:contains`,kind:`contains`,source:o.id,target:e.id};n.set(c.id,c)}}let a=0,o=0,s=0;for(let{file:e,node:t}of i){let i=[...(e.imports??[]).map(e=>({file:e,kind:`static-import`})),...(e.dynamicImports??[]).map(e=>({file:e,kind:`dynamic-import`}))];for(let c of i){let i=r.get(M(e.file,c.file));if(!i){a+=1;continue}let l={id:`${t.id}->${i}:${c.kind}`,kind:c.kind,source:t.id,target:i};n.has(l.id)||(n.set(l.id,l),c.kind===`dynamic-import`?s+=1:o+=1)}}return{dynamicImportCount:s,edges:[...n.values()],nodes:t,staticImportCount:o,unresolvedImportCount:a}}function F(e,t){let n=e.nodes.filter(e=>e.kind===`package`),r=e.nodes.filter(e=>e.kind===`chunk`),i=t.query.trim().toLowerCase(),a=r.filter(e=>t.packageId===`all`||e.packageId===t.packageId).filter(e=>!i||e.label.toLowerCase().includes(i)).sort((e,t)=>t.size-e.size),o=new Set(a.map(e=>e.id)),s=new Set;for(let t of e.edges){if(t.kind===`contains`)continue;let e=o.has(t.source),n=o.has(t.target);e&&!n?s.add(t.target):n&&!e&&s.add(t.source)}let c=r.filter(e=>s.has(e.id)).sort((e,t)=>t.size-e.size),l=[...new Map([...a,...c].map(e=>[e.id,e])).values()],u=new Set(n.map(e=>e.packageId)),d=[],f=new Set,p=t.maxNodes;for(let e of l){let t=u.has(e.packageId)&&!f.has(e.packageId),n=t?2:1;n>p||(d.push(e),t&&f.add(e.packageId),p-=n)}let m=[...n.filter(e=>f.has(e.packageId)),...d],h=new Set(m.map(e=>e.id)),g=new Set(l.map(e=>e.packageId)),_=new Set([...l.map(e=>e.id),...n.filter(e=>g.has(e.packageId)).map(e=>e.id)]),v=e.edges.filter(e=>_.has(e.source)&&_.has(e.target)),y=e.edges.filter(e=>h.has(e.source)&&h.has(e.target)).sort((e,t)=>Number(e.kind===`contains`)-Number(t.kind===`contains`)).slice(0,t.maxEdges);return{edges:y,nodes:m,truncatedEdgeCount:Math.max(0,v.length-y.length),truncatedNodeCount:Math.max(0,_.size-m.length)}}var I=220,L=900,R=80,z=t({__name:`ChunkGraphPanel`,props:{result:{},theme:{}},setup(t,{expose:n}){n();let a=t,s=o(),c=i(`all`),l=i(``),d=i(null),p,m,h,g=u(()=>P(a.result)),_=u(()=>g.value.nodes.filter(e=>e.kind===`package`)),v=u(()=>[{label:`全部 package`,value:`all`},..._.value.map(e=>({label:e.packageLabel,value:e.packageId}))]),b=u(()=>F(g.value,{maxEdges:l.value.trim()?320:L,maxNodes:l.value.trim()?R:I,packageId:c.value,query:l.value})),j=u(()=>b.value.nodes.find(e=>e.id===d.value)??null),M=u(()=>new Map(b.value.nodes.map(e=>[e.id,e]))),N=u(()=>{let e=j.value;return e?b.value.edges.filter(t=>t.kind!==`contains`&&(t.source===e.id||t.target===e.id)).map(t=>{let n=t.source===e.id,r=M.value.get(n?t.target:t.source);return{id:t.id,kind:t.kind===`dynamic-import`?`动态`:`静态`,label:r?.label??(n?t.target:t.source),relation:n?`导入`:`被导入`}}):[]}),z=u(()=>{let e=a.theme===`dark`?[`#5eead4`,`#a78bfa`,`#60a5fa`,`#fbbf24`,`#fb7185`,`#34d399`,`#f472b6`,`#c4b5fd`]:[`#0f766e`,`#7c3aed`,`#2563eb`,`#b45309`,`#be123c`,`#047857`,`#be185d`,`#6d28d9`];return new Map(_.value.map((t,n)=>[t.packageId,e[n%e.length]??`#64748b`]))});function B(e){return e.length>20?`${e.slice(0,19)}…`:e}function V(e,t){return typeof e==`string`?t.get(e):e}function H(e){return e.graphNode.kind===`package`?3:e.graphNode.isEntry?2.5:1.5}function U(e){d.value=e.id}function W(e,t,n){if(n===`start`){e.active||m?.alphaTarget(.18).restart(),t.fx=t.x,t.fy=t.y;return}if(n===`update`){t.fx=e.x,t.fy=e.y;return}e.active||m?.alphaTarget(0),t.fx=null,t.fy=null}function G(e){s.value&&h&&A(s.value).call(h.scaleBy,e)}function K(e,t){s.value&&h&&A(s.value).call(h.translateBy,e,t)}function q(){d.value=null,s.value&&h&&A(s.value).call(h.transform,T)}async function J(){await r();let e=s.value;if(!e||e.clientWidth===0||e.clientHeight===0)return;m?.stop();let t=A(e);t.selectAll(`*`).remove();let n=e.clientWidth,i=e.clientHeight;t.attr(`viewBox`,`0 0 ${n} ${i}`);let o=t.append(`defs`);for(let e of[{id:`chunk-graph-arrow-static`,color:a.theme===`dark`?`#60a5fa`:`#2563eb`},{id:`chunk-graph-arrow-dynamic`,color:`#f59e0b`}])o.append(`marker`).attr(`id`,e.id).attr(`viewBox`,`0 -5 10 10`).attr(`refX`,16).attr(`refY`,0).attr(`markerWidth`,5).attr(`markerHeight`,5).attr(`orient`,`auto`).append(`path`).attr(`d`,`M0,-5L10,0L0,5`).attr(`fill`,e.color);let c=t.append(`g`);h=k().scaleExtent([.2,5]).on(`zoom`,e=>c.attr(`transform`,e.transform.toString())),t.call(h),c.attr(`transform`,D(e).toString());let l=b.value.nodes.map(e=>{let t=e.kind===`package`?18:Math.max(5,Math.min(14,5+Math.log2(Math.max(e.size,1))*.65));return{id:e.id,graphNode:e,color:z.value.get(e.packageId)??`#64748b`,radius:t}}),u=new Map(l.map(e=>[e.id,e])),d=b.value.edges.map(e=>({graphEdge:e,source:e.source,target:e.target})),f=c.append(`g`).attr(`fill`,`none`).selectAll(`line`).data(d).join(`line`).attr(`stroke`,e=>e.graphEdge.kind===`dynamic-import`?`#f59e0b`:e.graphEdge.kind===`static-import`?a.theme===`dark`?`#60a5fa`:`#2563eb`:a.theme===`dark`?`#292f3a`:`#d9dee7`).attr(`stroke-width`,e=>e.graphEdge.kind===`contains`?1:1.4).attr(`stroke-opacity`,e=>e.graphEdge.kind===`contains`?.26:.68).attr(`stroke-dasharray`,e=>e.graphEdge.kind===`dynamic-import`?`5 4`:null).attr(`marker-end`,e=>e.graphEdge.kind===`dynamic-import`?`url(#chunk-graph-arrow-dynamic)`:e.graphEdge.kind===`static-import`?`url(#chunk-graph-arrow-static)`:null),p=c.append(`g`).selectAll(`g`).data(l,e=>e.id).join(`g`).attr(`cursor`,`pointer`).on(`click`,(e,t)=>U(t)).call(w().on(`start`,(e,t)=>W(e,t,`start`)).on(`drag`,(e,t)=>W(e,t,`update`)).on(`end`,(e,t)=>W(e,t,`end`)));p.append(`circle`).attr(`r`,e=>e.radius).attr(`fill`,e=>e.graphNode.kind===`package`?e.color:`${e.color}cc`).attr(`stroke`,e=>e.graphNode.kind===`package`?e.color:a.theme===`dark`?`#11141a`:`#ffffff`).attr(`stroke-width`,e=>H(e)),p.append(`title`).text(e=>`${e.graphNode.label}\n${e.graphNode.packageLabel}\n${x(e.graphNode.size)}`),p.filter(e=>e.graphNode.kind===`package`).append(`text`).attr(`x`,0).attr(`y`,e=>e.radius+15).attr(`text-anchor`,`middle`).attr(`font-size`,11).attr(`font-weight`,600).attr(`fill`,a.theme===`dark`?`#d7dce5`:`#334155`).text(e=>B(e.graphNode.label)),m=te(l).force(`link`,E(d).id(e=>e.id).distance(e=>e.graphEdge.kind===`contains`?68:e.graphEdge.kind===`dynamic-import`?120:92).strength(e=>e.graphEdge.kind===`contains`?.2:.5)).force(`charge`,C().strength(l.length>180?-78:-120)).force(`collision`,O().radius(e=>e.graphNode.kind===`package`?52:e.radius+6).strength(.95)).force(`center`,S(n/2,i/2)).alphaDecay(.035).on(`tick`,()=>{for(let e of l){let t=e.graphNode.kind===`package`?58:e.radius+4;e.x=Math.max(t,Math.min(n-t,e.x??n/2)),e.y=Math.max(t,Math.min(i-t,e.y??i/2))}f.attr(`x1`,e=>V(e.source,u)?.x??0).attr(`y1`,e=>V(e.source,u)?.y??0).attr(`x2`,e=>V(e.target,u)?.x??0).attr(`y2`,e=>V(e.target,u)?.y??0),p.attr(`transform`,e=>`translate(${e.x??0},${e.y??0})`)})}e(()=>{s.value&&(p=new ResizeObserver(()=>void J()),p.observe(s.value)),J()}),f(()=>{p?.disconnect(),m?.stop(),m=void 0}),y(_,e=>{c.value!==`all`&&!e.some(e=>e.packageId===c.value)&&(c.value=`all`)}),y([b,z],([e])=>{d.value&&!e.nodes.some(e=>e.id===d.value)&&(d.value=null),J()},{deep:!0}),y(()=>a.theme,()=>void J());let Y={props:a,MAX_VISIBLE_NODES:I,MAX_VISIBLE_EDGES:L,MAX_SEARCH_NODES:R,svgRef:s,packageFilter:c,searchQuery:l,selectedNodeId:d,get resizeObserver(){return p},set resizeObserver(e){p=e},get simulation(){return m},set simulation(e){m=e},get zoomBehavior(){return h},set zoomBehavior(e){h=e},graph:g,packageOptions:_,packageFilterOptions:v,visibleGraph:b,selectedNode:j,visibleNodeById:M,selectedImportEdges:N,packageColorById:z,formatPackageLabel:B,resolveLinkNode:V,resolveNodeStrokeWidth:H,selectNode:U,bindNodeDrag:W,zoomGraph:G,panGraph:K,resetGraphView:q,renderGraph:J,get formatBytes(){return x},AppSelect:ee};return Object.defineProperty(Y,"__isScriptSetup",{enumerable:!1,value:!0}),Y}}),B={class:`grid min-h-[calc(100dvh-9rem)] min-w-0 overflow-hidden rounded-md border border-(--dashboard-border) bg-(--dashboard-panel) xl:grid-cols-[minmax(0,1fr)_18rem]`},V={class:`grid min-h-0 min-w-0 grid-rows-[auto_minmax(30rem,1fr)]`},H={class:`grid min-w-0 grid-cols-1 gap-2 border-b border-(--dashboard-border) px-3 py-2 sm:grid-cols-[minmax(0,1fr)_minmax(10rem,14rem)_auto]`},U={class:`relative min-w-0`},W={class:`flex items-center gap-1`,role:`group`,"aria-label":`依赖图视图控制`},G={ref:`svgRef`,class:`block h-full min-h-0 w-full min-w-0 max-w-full touch-none overflow-hidden`,"aria-hidden":`true`,focusable:`false`},K={class:`grid min-w-0 overflow-hidden border-t border-(--dashboard-border) bg-(--dashboard-panel-muted) sm:grid-cols-2 xl:block xl:border-t-0 xl:border-l`},q={class:`border-b border-(--dashboard-border) px-3 py-3`},J={class:`mt-2 grid grid-cols-2 gap-2 text-xs`},Y={class:`font-mono`},X={class:`font-mono`},Z={class:`font-mono text-blue-500`},Q={class:`font-mono text-amber-500`},ne={class:`mt-3 grid min-w-0 gap-1.5 text-[10px] font-medium uppercase tracking-[0.12em] text-(--dashboard-text-soft)`},re=[`value`],$={class:`mt-3 grid grid-cols-3 gap-1`,role:`group`,"aria-label":`依赖图平移控制`},ie={key:0,class:`min-w-0 border-l-0 border-(--dashboard-border) px-3 py-3 sm:border-l xl:border-l-0`},ae=[`title`],oe={class:`mt-3 grid min-w-0 gap-2 text-xs`},se={class:`grid min-w-0 grid-cols-[4.5rem_minmax(0,1fr)] gap-2`},ce={class:`min-w-0 truncate text-right`},le={class:`grid min-w-0 grid-cols-[4.5rem_minmax(0,1fr)] gap-2`},ue=[`title`],de={class:`grid min-w-0 grid-cols-[4.5rem_minmax(0,1fr)] gap-2`},fe={class:`min-w-0 truncate text-right font-mono`},pe={key:0,class:`grid min-w-0 grid-cols-[4.5rem_minmax(0,1fr)] gap-2`},me={class:`min-w-0 truncate text-right font-mono`},he={key:1,class:`grid min-w-0 grid-cols-[4.5rem_minmax(0,1fr)] gap-2`},ge={class:`min-w-0 truncate text-right font-mono`},_e={class:`mt-3 min-w-0`},ve={key:0,class:`mt-1 text-xs text-(--dashboard-text-soft)`},ye={key:1,class:`mt-1 grid max-h-32 gap-1 overflow-y-auto text-xs`},be={class:`font-medium`},xe={class:`ml-1 break-all text-(--dashboard-text-soft)`},Se={key:1,class:`min-w-0 border-l-0 border-(--dashboard-border) px-3 py-5 text-xs leading-5 text-(--dashboard-text-soft) sm:border-l xl:border-l-0`},Ce={key:2,class:`border-t border-(--dashboard-border) px-3 py-3 text-[11px] text-amber-500 sm:col-span-2 xl:col-auto`},we={key:3,class:`border-t border-(--dashboard-border) px-3 py-3 text-[11px] text-(--dashboard-text-soft) sm:col-span-2 xl:col-auto`};function Te(e,t,r,i,o,u){return d(),v(`section`,B,[l(`div`,V,[l(`header`,H,[l(`label`,U,[t[9]||=l(`span`,{class:`sr-only`},`搜索 chunk`,-1),a(l(`input`,{"onUpdate:modelValue":t[0]||=e=>i.searchQuery=e,class:`h-8 w-full min-w-0 rounded border border-(--dashboard-border) bg-(--dashboard-panel-muted) px-2.5 text-xs outline-none focus:border-(--dashboard-accent)`,placeholder:`搜索 chunk 文件`,type:`search`},null,512),[[h,i.searchQuery]])]),_(i.AppSelect,{modelValue:i.packageFilter,"onUpdate:modelValue":t[1]||=e=>i.packageFilter=e,class:`min-w-0`,label:`筛选依赖图 package`,options:i.packageFilterOptions,size:`sm`},null,8,[`modelValue`,`options`]),l(`div`,W,[l(`button`,{class:`h-8 w-8 rounded border border-(--dashboard-border) text-sm hover:bg-(--dashboard-panel-muted) focus-visible:ring-2 focus-visible:ring-(--dashboard-accent)`,type:`button`,"aria-label":`缩小依赖图`,title:`缩小(-)`,onClick:t[2]||=e=>i.zoomGraph(.8)},` − `),l(`button`,{class:`h-8 w-8 rounded border border-(--dashboard-border) text-sm hover:bg-(--dashboard-panel-muted) focus-visible:ring-2 focus-visible:ring-(--dashboard-accent)`,type:`button`,"aria-label":`放大依赖图`,title:`放大(+)`,onClick:t[3]||=e=>i.zoomGraph(1.25)},` + `),l(`button`,{class:`h-8 whitespace-nowrap rounded border border-(--dashboard-border) px-2 text-xs hover:bg-(--dashboard-panel-muted) focus-visible:ring-2 focus-visible:ring-(--dashboard-accent)`,type:`button`,"aria-label":`适配依赖图视图`,title:`适配视图(0)`,onClick:i.resetGraphView},` 适配 `)])]),(d(),v(`svg`,G,null,512))]),l(`aside`,K,[l(`div`,q,[t[17]||=l(`p`,{class:`text-[10px] font-medium uppercase tracking-[0.12em] text-(--dashboard-text-soft)`},`Graph summary`,-1),l(`dl`,J,[l(`div`,null,[t[10]||=l(`dt`,{class:`text-(--dashboard-text-soft)`},`Nodes`,-1),l(`dd`,Y,s(i.visibleGraph.nodes.length),1)]),l(`div`,null,[t[11]||=l(`dt`,{class:`text-(--dashboard-text-soft)`},`Edges`,-1),l(`dd`,X,s(i.visibleGraph.edges.length),1)]),l(`div`,null,[t[12]||=l(`dt`,{class:`text-(--dashboard-text-soft)`},`Static`,-1),l(`dd`,Z,s(i.graph.staticImportCount),1)]),l(`div`,null,[t[13]||=l(`dt`,{class:`text-(--dashboard-text-soft)`},`Dynamic`,-1),l(`dd`,Q,s(i.graph.dynamicImportCount),1)])]),l(`label`,ne,[t[14]||=c(` 节点选择 `,-1),a(l(`select`,{"onUpdate:modelValue":t[4]||=e=>i.selectedNodeId=e,class:`min-h-32 w-full min-w-0 rounded border border-(--dashboard-border) bg-(--dashboard-panel) p-1.5 text-xs normal-case tracking-normal text-(--dashboard-text)`,size:`6`},[(d(!0),v(m,null,n(i.visibleGraph.nodes,e=>(d(),v(`option`,{key:e.id,value:e.id},s(e.label)+` · `+s(e.packageLabel),9,re))),128))],512),[[p,i.selectedNodeId]])]),l(`div`,$,[t[15]||=l(`span`,{"aria-hidden":`true`},null,-1),l(`button`,{class:`h-7 rounded border border-(--dashboard-border) text-xs hover:bg-(--dashboard-panel)`,type:`button`,"aria-label":`向上平移依赖图`,onClick:t[5]||=e=>i.panGraph(0,-40)},`↑`),t[16]||=l(`span`,{"aria-hidden":`true`},null,-1),l(`button`,{class:`h-7 rounded border border-(--dashboard-border) text-xs hover:bg-(--dashboard-panel)`,type:`button`,"aria-label":`向左平移依赖图`,onClick:t[6]||=e=>i.panGraph(-40,0)},`←`),l(`button`,{class:`h-7 rounded border border-(--dashboard-border) text-xs hover:bg-(--dashboard-panel)`,type:`button`,"aria-label":`向下平移依赖图`,onClick:t[7]||=e=>i.panGraph(0,40)},`↓`),l(`button`,{class:`h-7 rounded border border-(--dashboard-border) text-xs hover:bg-(--dashboard-panel)`,type:`button`,"aria-label":`向右平移依赖图`,onClick:t[8]||=e=>i.panGraph(40,0)},`→`)])]),i.selectedNode?(d(),v(`div`,ie,[t[24]||=l(`p`,{class:`text-[10px] font-medium uppercase tracking-[0.12em] text-(--dashboard-text-soft)`},`Selected`,-1),l(`h3`,{class:`mt-2 overflow-hidden text-ellipsis whitespace-nowrap font-mono text-xs font-semibold text-(--dashboard-text)`,title:i.selectedNode.label},s(i.selectedNode.label),9,ae),l(`dl`,oe,[l(`div`,se,[t[18]||=l(`dt`,{class:`text-(--dashboard-text-soft)`},`Kind`,-1),l(`dd`,ce,s(i.selectedNode.kind),1)]),l(`div`,le,[t[19]||=l(`dt`,{class:`text-(--dashboard-text-soft)`},`Package`,-1),l(`dd`,{class:`min-w-0 truncate text-right`,title:i.selectedNode.packageLabel},s(i.selectedNode.packageLabel),9,ue)]),l(`div`,de,[t[20]||=l(`dt`,{class:`text-(--dashboard-text-soft)`},`Size`,-1),l(`dd`,fe,s(i.formatBytes(i.selectedNode.size)),1)]),i.selectedNode.moduleCount===void 0?g(``,!0):(d(),v(`div`,pe,[t[21]||=l(`dt`,{class:`text-(--dashboard-text-soft)`},`Modules`,-1),l(`dd`,me,s(i.selectedNode.moduleCount),1)])),i.selectedNode.fileCount===void 0?g(``,!0):(d(),v(`div`,he,[t[22]||=l(`dt`,{class:`text-(--dashboard-text-soft)`},`Files`,-1),l(`dd`,ge,s(i.selectedNode.fileCount),1)]))]),l(`div`,_e,[t[23]||=l(`h4`,{class:`text-[10px] font-medium uppercase tracking-[0.12em] text-(--dashboard-text-soft)`},` Import edges `,-1),i.selectedImportEdges.length?(d(),v(`ul`,ye,[(d(!0),v(m,null,n(i.selectedImportEdges,e=>(d(),v(`li`,{key:e.id,class:`min-w-0`},[l(`span`,be,s(e.relation)+` · `+s(e.kind),1),l(`span`,xe,s(e.label),1)]))),128))])):(d(),v(`p`,ve,` 当前节点没有可见的静态或动态 import。 `))])])):(d(),v(`div`,Se,` 使用节点选择器查看 package、体积和模块数;图中仍可滚轮缩放与拖动画布。蓝色实线是静态 import,橙色虚线是动态 import。 `)),i.graph.unresolvedImportCount?(d(),v(`div`,Ce,s(i.graph.unresolvedImportCount)+` 条 import 指向未输出或外部 chunk。 `,1)):g(``,!0),i.visibleGraph.truncatedNodeCount||i.visibleGraph.truncatedEdgeCount?(d(),v(`div`,we,` 为保持交互流畅,当前隐藏 `+s(i.visibleGraph.truncatedNodeCount)+` 个节点与 `+s(i.visibleGraph.truncatedEdgeCount)+` 条边。 `,1)):g(``,!0)])])}var Ee=b(z,[[`render`,Te]]);export{Ee as default};
@@ -1,5 +1,5 @@
1
- import{B as e,C as t,D as n,E as r,G as i,H as a,I as o,J as s,K as c,N as l,P as u,R as d,S as f,_ as p,g as m,h,j as g,k as _,l as v,p as y,v as b,w as x,x as S,y as C,z as w}from"./vue.js";import{C as T,O as ee,a as te,d as E,f as D,i as O,k,l as A,n as ne,p as j,r as re,t as ie,w as M,x as N}from"./index.js";import{n as P,t as F}from"./AppEmptyState.js";import{t as I}from"./AppRuntimeBadge.js";import{n as L,t as ae}from"./AppMetricTile.js";import{t as R}from"./AppInsetPanel.js";var z=t({__name:`ActivityEventSortBar`,props:r({events:{},filteredCount:{},totalCount:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e,{expose:t}){t();let n=e,r=o(e,`modelValue`),i=a(``),s=null;function c(e){return e.replaceAll(`|`,`\\|`).replaceAll(`
2
- `,` `)}let l=h(()=>[`# dashboard 事件流`,``,`事件数量:${n.events.length}`,``,`| 时间 | 等级 | 类型 | 来源 | 标题 | 耗时 | 标签 |`,`| --- | --- | --- | --- | --- | ---: | --- |`,...n.events.map(e=>[e.timestamp,D(e.level),E(e.kind),e.source??`dashboard`,e.title,A(e.durationMs),e.tags?.join(`, `)||`-`].map(c).join(` | `)).map(e=>`| ${e} |`),``].join(`
3
- `));function u(e){i.value=e,s&&clearTimeout(s),s=setTimeout(()=>{i.value=``,s=null},1800)}async function d(){try{await P(l.value),u(`已复制`)}catch{u(`复制失败`)}}function f(){let e=new Blob([`${JSON.stringify(n.events,null,2)}\n`],{type:`application/json`}),t=URL.createObjectURL(e),r=document.createElement(`a`);r.href=t,r.download=`weapp-vite-dashboard-events.json`,r.click(),URL.revokeObjectURL(t),u(`已导出`)}_(()=>{s&&clearTimeout(s)});let p={props:n,sortMode:r,actionStatus:i,get actionStatusTimer(){return s},set actionStatusTimer(e){s=e},escapeMarkdownCell:c,reportText:l,setActionStatus:u,copyEventReport:d,exportEventJson:f};return Object.defineProperty(p,"__isScriptSetup",{enumerable:!1,value:!0}),p}}),B={class:`flex flex-wrap items-center justify-between gap-2 rounded-md border border-(--dashboard-border) bg-(--dashboard-panel-muted) px-3 py-2`},V={class:`text-xs text-(--dashboard-text-soft)`},H={class:`flex flex-wrap items-center gap-2`},U={key:0,class:`text-xs font-medium text-(--dashboard-accent)`},W=[`disabled`],G=[`disabled`];function K(t,n,r,i,a,o){return g(),C(`div`,B,[m(`p`,V,` 匹配 `+s(r.filteredCount)+` / `+s(r.totalCount)+` 条事件 `,1),m(`div`,H,[i.actionStatus?(g(),C(`span`,U,s(i.actionStatus),1)):b(``,!0),m(`button`,{type:`button`,class:`h-9 rounded-md border border-(--dashboard-border) bg-(--dashboard-panel) px-3 text-sm text-(--dashboard-text-soft) transition hover:border-(--dashboard-border-strong) hover:text-(--dashboard-accent) focus:border-(--dashboard-border-strong) focus:outline-none disabled:opacity-50`,disabled:r.events.length===0,onClick:i.copyEventReport},` 复制事件 `,8,W),m(`button`,{type:`button`,class:`h-9 rounded-md border border-(--dashboard-border) bg-(--dashboard-panel) px-3 text-sm text-(--dashboard-text-soft) transition hover:border-(--dashboard-border-strong) hover:text-(--dashboard-accent) focus:border-(--dashboard-border-strong) focus:outline-none disabled:opacity-50`,disabled:r.events.length===0,onClick:i.exportEventJson},` 导出 JSON `,8,G),e(m(`select`,{"onUpdate:modelValue":n[0]||=e=>i.sortMode=e,class:`h-9 rounded-md border border-(--dashboard-border) bg-(--dashboard-panel) px-2.5 text-sm text-(--dashboard-text) outline-none transition focus:border-(--dashboard-accent)`},[...n[1]||=[m(`option`,{value:`time`},` 按时间 `,-1),m(`option`,{value:`duration`},` 按耗时 `,-1),m(`option`,{value:`severity`},` 按等级 `,-1),m(`option`,{value:`source`},` 按来源 `,-1)]],512),[[v,i.sortMode]])])])}var q=k(z,[[`render`,K]]),J=t({__name:`AppRuntimeFocusCard`,props:{event:{},eyebrow:{},emptyTitle:{},emptyDetail:{},durationText:{}},setup(e,{expose:t}){t();let n=e,r={props:n,badge:h(()=>n.event?O(n.event):null),titleText:h(()=>n.event?.title??n.emptyTitle??`尚无运行事件`),detailText:h(()=>n.event?.detail??n.emptyDetail??`当前工作区还没有推入结构化运行事件。`),eventMeta:h(()=>n.event?j(n.event):null),get mutedPanelStyles(){return T},AppRuntimeBadge:I};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),oe={class:`flex items-start justify-between gap-3`},se={key:0,class:`text-[11px] uppercase tracking-[0.18em] text-(--dashboard-accent)`},ce={class:`mt-1 text-lg font-semibold tracking-tight`},le={class:`mt-3 text-sm leading-6 text-(--dashboard-text-muted)`},ue={key:0,class:`mt-3 text-[11px] uppercase tracking-[0.18em] text-(--dashboard-text-soft)`},de={key:1,class:`mt-2 text-sm font-medium text-(--dashboard-text)`};function fe(e,t,r,a,o,l){return g(),C(`div`,{class:i(a.mutedPanelStyles())},[m(`div`,oe,[m(`div`,null,[a.props.eyebrow?(g(),C(`p`,se,s(a.props.eyebrow),1)):b(``,!0),m(`h3`,ce,s(a.titleText),1)]),a.badge?(g(),p(a.AppRuntimeBadge,c(n({key:0},a.badge)),null,16)):b(``,!0)]),m(`p`,le,s(a.detailText),1),a.props.event?(g(),C(`p`,ue,s(a.eventMeta),1)):b(``,!0),a.props.durationText?(g(),C(`p`,de,s(a.props.durationText),1)):b(``,!0),u(e.$slots,`default`)],2)}var pe=k(J,[[`render`,fe]]),me=t({__name:`ActivitySelectedEventPanel`,props:{event:{}},setup(e,{expose:t}){t();let n=e,r={props:n,durationText:h(()=>n.event?.durationMs===void 0?void 0:`耗时 ${A(n.event.durationMs)}`),profileMetrics:h(()=>{let e=n.event?.profile;return e?[{label:`总耗时`,value:A(e.totalMs)},{label:`构建核心`,value:A(e.buildCoreMs)},{label:`转换`,value:A(e.transformMs)},{label:`写入`,value:A(e.writeMs)},{label:`监听到脏标记`,value:A(e.watchToDirtyMs)},{label:`产物发射`,value:A(e.emitMs)},{label:`共享 chunk`,value:A(e.sharedChunkResolveMs)}].filter(e=>e.value!==`未记录`):[]}),profileCounts:h(()=>{let e=n.event?.profile;return e?[{label:`脏入口`,value:e.dirtyCount},{label:`待处理`,value:e.pendingCount},{label:`已发射`,value:e.emittedCount}].filter(e=>typeof e.value==`number`):[]}),profileFile:h(()=>n.event?.profile?.sourceRootFile??n.event?.profile?.relativeFile??n.event?.profile?.file),AppRuntimeBadge:I,AppRuntimeFocusCard:pe,AppSurfaceCard:N};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),he={key:0,class:`mt-3 flex flex-wrap gap-1.5`},ge={key:1,class:`mt-4 grid gap-3 rounded-md border border-(--dashboard-border) bg-(--dashboard-panel-muted) p-3`},_e={class:`flex min-w-0 items-start justify-between gap-3`},ve={class:`min-w-0`},ye={key:0,class:`mt-1 truncate font-mono text-xs text-(--dashboard-text-soft)`},be={key:0,class:`grid gap-2 sm:grid-cols-2`},xe={class:`text-[11px] text-(--dashboard-text-soft)`},Se={class:`mt-1 text-sm font-semibold text-(--dashboard-text)`},Ce={key:1,class:`flex flex-wrap gap-1.5`},we={key:2,class:`grid gap-2 text-xs leading-5 text-(--dashboard-text-muted)`},Te={key:0},Ee={key:1};function De(e,t,n,r,i,a){return g(),p(r.AppSurfaceCard,{eyebrow:`Selected`,title:`当前事件`,"icon-name":`metric-search`},{default:w(()=>[f(r.AppRuntimeFocusCard,{event:n.event,eyebrow:`focus`,"empty-title":`未选择事件`,"empty-detail":`选择左侧事件后查看详情。`,"duration-text":r.durationText},{default:w(()=>[n.event?.tags?.length?(g(),C(`div`,he,[(g(!0),C(y,null,l(n.event.tags,e=>(g(),p(r.AppRuntimeBadge,{key:e,label:e,tone:`neutral`},null,8,[`label`]))),128))])):b(``,!0),n.event?.profile?(g(),C(`div`,ge,[m(`div`,_e,[m(`div`,ve,[t[0]||=m(`p`,{class:`text-sm font-semibold text-(--dashboard-text)`},` HMR 阶段明细 `,-1),r.profileFile?(g(),C(`p`,ye,s(r.profileFile),1)):b(``,!0)]),n.event.profile.event?(g(),p(r.AppRuntimeBadge,{key:0,label:n.event.profile.event,tone:`info`},null,8,[`label`])):b(``,!0)]),r.profileMetrics.length>0?(g(),C(`dl`,be,[(g(!0),C(y,null,l(r.profileMetrics,e=>(g(),C(`div`,{key:e.label,class:`rounded-md border border-(--dashboard-border) bg-(--dashboard-panel) px-3 py-2`},[m(`dt`,xe,s(e.label),1),m(`dd`,Se,s(e.value),1)]))),128))])):b(``,!0),r.profileCounts.length>0?(g(),C(`div`,Ce,[(g(!0),C(y,null,l(r.profileCounts,e=>(g(),p(r.AppRuntimeBadge,{key:e.label,label:`${e.label} ${e.value}`,tone:`neutral`},null,8,[`label`]))),128))])):b(``,!0),n.event.profile.dirtyReasonSummary?.length||n.event.profile.pendingReasonSummary?.length?(g(),C(`div`,we,[n.event.profile.dirtyReasonSummary?.length?(g(),C(`p`,Te,` 脏标记:`+s(n.event.profile.dirtyReasonSummary.join(`、`)),1)):b(``,!0),n.event.profile.pendingReasonSummary?.length?(g(),C(`p`,Ee,` 待处理:`+s(n.event.profile.pendingReasonSummary.join(`、`)),1)):b(``,!0)])):b(``,!0)])):b(``,!0)]),_:1},8,[`event`,`duration-text`])]),_:1})}var Oe=k(me,[[`render`,De]]),ke=t({__name:`AppRuntimeSourceCard`,props:{source:{},count:{},errorCount:{},averageDuration:{},latestTimestamp:{},countLabel:{}},setup(e,{expose:t}){t();let n=e,r={props:n,badge:h(()=>te(n)),subtitle:h(()=>n.latestTimestamp?`最近事件 ${n.latestTimestamp}`:`${n.count} ${n.countLabel??`条事件`}`),detailItems:h(()=>[{key:`error-count`,label:`错误 ${n.errorCount}`},{key:`average-duration`,label:`平均耗时 ${n.averageDuration}`}]),summaryText:h(()=>`平均耗时 ${n.averageDuration}`),get mutedPanelStyles(){return T},AppRuntimeBadge:I};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),Ae={class:`flex items-start justify-between gap-3`},je={class:`min-w-0`},Me={class:`truncate font-medium text-(--dashboard-text)`},Ne={class:`mt-1 text-[11px] uppercase tracking-[0.16em] text-(--dashboard-text-soft)`},Pe={key:0,class:`mt-3 flex flex-wrap gap-2 text-[11px] uppercase tracking-[0.14em] text-(--dashboard-text-soft)`},Fe={key:1,class:`mt-3 text-sm text-(--dashboard-text-muted)`};function Ie(e,t,n,r,a,o){return g(),C(`div`,{class:i(r.mutedPanelStyles({padding:`sm`}))},[m(`div`,Ae,[m(`div`,je,[m(`p`,Me,s(r.props.source),1),m(`p`,Ne,s(r.subtitle),1)]),f(r.AppRuntimeBadge,c(x(r.badge)),null,16)]),r.props.latestTimestamp?(g(),C(`div`,Pe,[(g(!0),C(y,null,l(r.detailItems,e=>(g(),C(`span`,{key:e.key,class:`rounded-full border border-(--dashboard-border) px-2 py-0.5`},s(e.label),1))),128))])):(g(),C(`p`,Fe,s(r.summaryText),1))],2)}var Le=k(ke,[[`render`,Ie]]),Re=t({__name:`AppStatCard`,props:{label:{},value:{}},setup(e,{expose:t}){t();let n={panelClassName:T({padding:`sm`}),AppMetaLabel:L};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),ze={class:`mt-1 text-lg font-semibold`};function Be(e,t,n,r,a,o){return g(),C(`div`,{class:i(r.panelClassName)},[f(r.AppMetaLabel,null,{default:w(()=>[S(s(n.label),1)]),_:1}),m(`p`,ze,s(n.value),1)],2)}var Ve=k(Re,[[`render`,Be]]),He=t({__name:`RuntimeIncidentDigestPanel`,props:{digest:{}},setup(e,{expose:t}){t();let n=e,r=a(``),i=null,o=h(()=>n.digest.status===`critical`?`error`:n.digest.status===`warning`?`warning`:`success`);function s(e){return e===`error`?`text-rose-600 dark:text-rose-300`:e===`warning`?`text-amber-600 dark:text-amber-300`:`text-(--dashboard-accent)`}function c(e){return e===`critical`?`border-rose-400/60 bg-(--dashboard-panel-muted)`:e===`warning`?`border-amber-400/60 bg-(--dashboard-panel-muted)`:`border-emerald-400/60 bg-(--dashboard-panel-muted)`}function l(e){r.value=e,i&&clearTimeout(i),i=setTimeout(()=>{r.value=``,i=null},1800)}async function u(){try{await P(n.digest.report),l(`摘要已复制`)}catch{l(`复制失败`)}}_(()=>{i&&clearTimeout(i)});let d={props:n,copyStatus:r,get copyStatusTimer(){return i},set copyStatusTimer(e){i=e},badgeTone:o,getLevelClassName:s,getStatusAccentClassName:c,setCopyStatus:l,copyDigestReport:u,AppEmptyState:F,AppMetricTile:ae,AppRuntimeBadge:I,AppSurfaceCard:N,DashboardIcon:ee};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}}),Ue={class:`flex shrink-0 items-center gap-2`},We={key:0,class:`text-xs font-medium text-(--dashboard-accent)`},Ge={class:`h-3.5 w-3.5`},Ke={class:`grid gap-3`},qe={class:`flex items-start justify-between gap-3`},Je={class:`min-w-0`},Ye={class:`text-sm font-semibold text-(--dashboard-text)`},Xe={class:`mt-1 text-xs leading-5 text-(--dashboard-text-muted)`},Ze={class:`grid grid-cols-2 gap-2 sm:grid-cols-5 xl:grid-cols-2 2xl:grid-cols-5`},Qe={key:0,class:`grid max-h-52 gap-2 overflow-y-auto pr-1`},$e={class:`flex items-start justify-between gap-3`},et={class:`min-w-0`},tt={class:`truncate text-sm font-medium text-(--dashboard-text)`},nt={class:`mt-1 truncate text-xs text-(--dashboard-text-soft)`},rt={class:`mt-2 line-clamp-2 text-xs leading-5 text-(--dashboard-text-muted)`};function it(e,t,n,r,a,o){return g(),p(r.AppSurfaceCard,{eyebrow:`Incident`,title:`事故摘要`,"icon-name":`metric-quality`},{header:w(()=>[m(`div`,Ue,[r.copyStatus?(g(),C(`span`,We,s(r.copyStatus),1)):b(``,!0),m(`button`,{type:`button`,class:`inline-flex h-8 items-center gap-1.5 rounded-md border border-(--dashboard-border) bg-(--dashboard-panel-muted) px-3 text-xs text-(--dashboard-text-soft) transition hover:border-(--dashboard-border-strong) hover:text-(--dashboard-accent) focus:border-(--dashboard-border-strong) focus:outline-none`,onClick:r.copyDigestReport},[m(`span`,Ge,[f(r.DashboardIcon,{name:`metric-copy`})]),t[0]||=S(` 复制 `,-1)])])]),default:w(()=>[m(`div`,Ke,[m(`div`,{class:i([`rounded-md border px-3 py-2.5`,r.getStatusAccentClassName(n.digest.status)])},[m(`div`,qe,[m(`div`,Je,[m(`p`,Ye,s(n.digest.statusLabel),1),m(`p`,Xe,s(n.digest.statusDetail),1)]),f(r.AppRuntimeBadge,{label:n.digest.statusLabel,tone:r.badgeTone},null,8,[`label`,`tone`])])],2),m(`div`,Ze,[(g(!0),C(y,null,l(n.digest.metrics,e=>(g(),p(r.AppMetricTile,{key:e.label,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),n.digest.incidents.length>0?(g(),C(`div`,Qe,[(g(!0),C(y,null,l(n.digest.incidents,e=>(g(),C(`article`,{key:e.id,class:`rounded-md border border-(--dashboard-border) bg-(--dashboard-panel-muted) px-3 py-2.5`},[m(`div`,$e,[m(`div`,et,[m(`p`,tt,s(e.title),1),m(`p`,nt,s(e.source)+` · `+s(e.kindLabel)+` · `+s(e.timestamp)+` · `+s(e.duration),1)]),m(`span`,{class:i([`shrink-0 text-xs font-semibold`,r.getLevelClassName(e.level)])},s(e.levelLabel),3)]),m(`p`,rt,s(e.reason)+` · `+s(e.detail),1)]))),128))])):(g(),p(r.AppEmptyState,{key:1,compact:``},{default:w(()=>[...t[1]||=[S(` 当前筛选范围内没有需要处理的运行时事件。 `,-1)]]),_:1}))])]),_:1})}var at=k(He,[[`render`,it]]),ot=t({__name:`ActivityInsightPanel`,props:{selectedEvent:{},incidentDigest:{},eventSummary:{},filteredEventSummary:{},diagnostics:{},sourceBreakdown:{}},setup(e,{expose:t}){t();let n={ActivitySelectedEventPanel:Oe,AppRuntimeBadge:I,AppRuntimeSourceCard:Le,AppStatCard:Ve,AppSurfaceCard:N,RuntimeIncidentDigestPanel:at};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),st={class:`grid min-h-0 content-start gap-3 overflow-y-auto pr-1`},ct={class:`grid gap-2 sm:grid-cols-2`},lt={class:`grid max-h-44 gap-2 overflow-y-auto pr-1`},ut={class:`flex items-start justify-between gap-3`},dt={class:`font-medium`},ft={class:`mt-1 text-sm leading-6 text-(--dashboard-text-muted)`},pt={key:0,class:`grid max-h-full gap-2 overflow-y-auto pr-1`};function mt(e,t,r,i,a,o){return g(),C(`div`,st,[f(i.ActivitySelectedEventPanel,{event:r.selectedEvent},null,8,[`event`]),f(i.RuntimeIncidentDigestPanel,{digest:r.incidentDigest},null,8,[`digest`]),f(i.AppSurfaceCard,{eyebrow:`Runtime`,title:`事件摘要`,"icon-name":`metric-time`},{default:w(()=>[m(`div`,ct,[(g(!0),C(y,null,l([...r.eventSummary,...r.filteredEventSummary],e=>(g(),p(i.AppStatCard,n({key:e.label},{ref_for:!0},e),null,16))),128))])]),_:1}),f(i.AppSurfaceCard,{eyebrow:`Diagnostics`,title:`当前诊断队列`,"icon-name":`metric-health`,"content-class":`min-h-0 overflow-hidden`},{default:w(()=>[m(`ul`,lt,[(g(!0),C(y,null,l(r.diagnostics,e=>(g(),C(`li`,{key:e.label,class:`rounded-md border border-(--dashboard-border) bg-(--dashboard-panel-muted) px-4 py-3`},[m(`div`,ut,[m(`div`,null,[m(`p`,dt,s(e.label),1),m(`p`,ft,s(e.detail),1)]),f(i.AppRuntimeBadge,{label:e.status,tone:`info`},null,8,[`label`])])]))),128))])]),_:1}),f(i.AppSurfaceCard,{eyebrow:`Sources`,title:`事件来源`,"icon-name":`hero-system`,"content-class":`min-h-0 overflow-hidden`},{default:w(()=>[r.sourceBreakdown.length>0?(g(),C(`div`,pt,[(g(!0),C(y,null,l(r.sourceBreakdown,e=>(g(),p(i.AppRuntimeSourceCard,n({key:e.source},{ref_for:!0},e),null,16))),128))])):b(``,!0)]),_:1})])}var ht=k(ot,[[`render`,mt]]),gt=t({__name:`AppEventFilterPanel`,props:{searchQuery:{},presetDescription:{},filterPresets:{},eventKindOptions:{},eventLevelOptions:{},eventSourceOptions:{},eventKindFilter:{},eventLevelFilter:{},eventSourceFilter:{}},emits:[`update:searchQuery`,`update:eventKindFilter`,`update:eventLevelFilter`,`update:eventSourceFilter`,`applyPreset`],setup(e,{expose:t,emit:n}){t();let r=e,i=n;function a(){return M({kind:`theme`,active:!1})}function o(e,t){return M({kind:`theme`,active:e===t})}let s={props:r,emit:i,getPresetClassName:a,getOptionClassName:o,AppInsetPanel:R,AppMetaLabel:L};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),_t={class:`grid gap-3 xl:grid-cols-[minmax(14rem,0.85fr)_minmax(0,1.15fr)]`},vt={for:`dashboard-event-search`},yt=[`value`],bt={class:`grid gap-3`},xt={class:`mt-2 flex flex-wrap gap-2`},St=[`onClick`],Ct={key:0,class:`mt-2 text-xs leading-5 text-(--dashboard-text-soft)`},wt={class:`grid gap-3 md:grid-cols-3`},Tt={class:`mt-2 flex flex-wrap gap-2`},Et=[`onClick`],Dt={class:`mt-2 flex flex-wrap gap-2`},Ot=[`onClick`],kt={class:`mt-2 flex flex-wrap gap-2`},At=[`onClick`];function jt(e,t,n,r,a,o){return g(),p(r.AppInsetPanel,null,{default:w(()=>[m(`div`,_t,[m(`div`,null,[m(`label`,vt,[f(r.AppMetaLabel,null,{default:w(()=>[...t[1]||=[S(` 搜索事件 `,-1)]]),_:1})]),m(`input`,{id:`dashboard-event-search`,value:n.searchQuery,type:`text`,placeholder:`搜索标题、详情、来源或标签`,class:`mt-2 w-full rounded-md border border-(--dashboard-border) bg-(--dashboard-panel) px-3 py-2 text-sm text-(--dashboard-text) outline-none transition focus:border-(--dashboard-border-strong)`,onInput:t[0]||=e=>r.emit(`update:searchQuery`,e.target.value)},null,40,yt)]),m(`div`,bt,[m(`div`,null,[f(r.AppMetaLabel,null,{default:w(()=>[...t[2]||=[S(` 快速预设 `,-1)]]),_:1}),m(`div`,xt,[(g(!0),C(y,null,l(n.filterPresets,e=>(g(),C(`button`,{key:e.key,class:i(r.getPresetClassName()),onClick:t=>r.emit(`applyPreset`,e.key)},s(e.label),11,St))),128))]),n.presetDescription?(g(),C(`p`,Ct,s(n.presetDescription),1)):b(``,!0)]),m(`div`,wt,[m(`div`,null,[f(r.AppMetaLabel,null,{default:w(()=>[...t[3]||=[S(` 类型过滤 `,-1)]]),_:1}),m(`div`,Tt,[(g(!0),C(y,null,l(n.eventKindOptions,e=>(g(),C(`button`,{key:e.value,class:i(r.getOptionClassName(r.props.eventKindFilter,e.value)),onClick:t=>r.emit(`update:eventKindFilter`,e.value)},s(e.label),11,Et))),128))])]),m(`div`,null,[f(r.AppMetaLabel,null,{default:w(()=>[...t[4]||=[S(` 等级过滤 `,-1)]]),_:1}),m(`div`,Dt,[(g(!0),C(y,null,l(n.eventLevelOptions,e=>(g(),C(`button`,{key:e.value,class:i(r.getOptionClassName(r.props.eventLevelFilter,e.value)),onClick:t=>r.emit(`update:eventLevelFilter`,e.value)},s(e.label),11,Ot))),128))])]),m(`div`,null,[f(r.AppMetaLabel,null,{default:w(()=>[...t[5]||=[S(` 来源过滤 `,-1)]]),_:1}),m(`div`,kt,[(g(!0),C(y,null,l(n.eventSourceOptions,e=>(g(),C(`button`,{key:e.value,class:i(r.getOptionClassName(r.props.eventSourceFilter,e.value)),onClick:t=>r.emit(`update:eventSourceFilter`,e.value)},s(e.label),11,At))),128))])])])])])]),_:1})}var Mt=k(gt,[[`render`,jt]]),Nt=t({__name:`AppRuntimeEventListItem`,props:{event:{},selected:{type:Boolean}},setup(e,{expose:t}){t();let n=e,r={props:n,badge:h(()=>O(n.event)),eventMeta:h(()=>j(n.event)),panelClassName:h(()=>n.selected?`border-(--dashboard-border-strong) bg-(--dashboard-panel)`:`border-(--dashboard-border)`),AppMetaLabel:L,AppRuntimeBadge:I};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),Pt={class:`flex items-start justify-between gap-3`},Ft={class:`font-medium text-(--dashboard-text)`};function It(e,t,n,r,a,o){return g(),C(`li`,{class:i([`rounded-md border bg-(--dashboard-panel-muted) px-4 py-3 transition`,r.panelClassName])},[m(`div`,Pt,[m(`div`,null,[m(`p`,Ft,s(r.props.event.title),1),f(r.AppMetaLabel,{class:`mt-1`},{default:w(()=>[S(s(r.eventMeta),1)]),_:1})]),f(r.AppRuntimeBadge,c(x(r.badge)),null,16)])],2)}var Lt=k(Nt,[[`render`,It]]),Rt=1e3,zt=5,Y={error:4,warning:3,success:2,info:1};function X(e){let t=Date.parse(e.timestamp);return Number.isFinite(t)?t:0}function Z(e,t){return typeof e.durationMs==`number`&&e.durationMs>=t}function Bt(e,t){return e.level===`error`||e.level===`warning`||Z(e,t)}function Vt(e,t){let n=[];return e.level===`error`?n.push(`错误事件`):e.level===`warning`&&n.push(`警告事件`),Z(e,t)&&n.push(`耗时 ${A(e.durationMs)}`),n.join(` · `)||`需要关注`}function Q(e,t){return{id:e.id,title:e.title,detail:e.detail,level:e.level,levelLabel:D(e.level),kindLabel:E(e.kind),source:e.source??`dashboard`,timestamp:e.timestamp,duration:A(e.durationMs),reason:Vt(e,t)}}function Ht(e,t,n){return e>0?`critical`:t>0||n>0?`warning`:`healthy`}function Ut(e){return e===`critical`?`需要立即处理`:e===`warning`?`需要关注`:`运行平稳`}function Wt(e,t,n,r){return e===`critical`?`检测到 ${t} 个错误事件,优先排查失败来源。`:e===`warning`?`检测到 ${n} 个警告和 ${r} 个慢事件,建议跟进。`:`当前筛选范围内没有错误、警告或慢事件。`}function Gt(e){let t=e.incidents.length>0?e.incidents.map(e=>`- [${e.levelLabel}] ${e.title}(${e.source} · ${e.kindLabel} · ${e.timestamp} · ${e.duration}):${e.detail}`):[`- 当前筛选范围内没有需要处理的事件。`];return[`# dashboard 运行时事故摘要`,``,`状态:${e.statusLabel}`,`说明:${e.statusDetail}`,``,`## 指标`,...e.metrics.map(e=>`- ${e.label}:${e.value}`),``,`## 影响来源`,e.affectedSources.length>0?e.affectedSources.map(e=>`- ${e}`).join(`
1
+ import{B as e,C as t,D as n,E as r,J as i,L as a,N as o,P as s,U as c,X as l,_ as u,b as d,g as f,h as p,j as m,k as h,p as g,q as _,v,w as y,x as b,y as x,z as ee}from"./vue.js";import{E as S,T as te,_ as C,c as w,g as T,l as ne,o as re,p as E,s as ie,t as ae,v as D,x as O}from"./index.js";import{a as k,c as A,i as j,n as M,t as N}from"./AppEmptyState.js";import{t as P}from"./AppRuntimeBadge.js";import{n as F,t as I}from"./AppMetricTile.js";var L=t({__name:`ActivityEventSortBar`,props:r({events:{},filteredCount:{},totalCount:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e,{expose:t}){t();let n=e,r=a(e,`modelValue`),i=[{label:`按时间`,value:`time`},{label:`按耗时`,value:`duration`},{label:`按等级`,value:`severity`},{label:`按来源`,value:`source`}],o=c(``),s=null;function l(e){return e.replaceAll(`|`,`\\|`).replaceAll(`
2
+ `,` `)}let u=p(()=>[`# dashboard 事件流`,``,`事件数量:${n.events.length}`,``,`| 时间 | 等级 | 类型 | 来源 | 标题 | 耗时 | 标签 |`,`| --- | --- | --- | --- | --- | ---: | --- |`,...n.events.map(e=>[e.timestamp,C(e.level),T(e.kind),e.source??`dashboard`,e.title,E(e.durationMs),e.tags?.join(`, `)||`-`].map(l).join(` | `)).map(e=>`| ${e} |`),``].join(`
3
+ `));function d(e){o.value=e,s&&clearTimeout(s),s=setTimeout(()=>{o.value=``,s=null},1800)}async function f(){try{await A(u.value),d(`已复制`)}catch{d(`复制失败`)}}function m(){let e=new Blob([`${JSON.stringify(n.events,null,2)}\n`],{type:`application/json`}),t=URL.createObjectURL(e),r=document.createElement(`a`);r.href=t,r.download=`weapp-vite-dashboard-events.json`,r.click(),URL.revokeObjectURL(t),d(`已导出`)}h(()=>{s&&clearTimeout(s)});let g={props:n,sortMode:r,sortOptions:i,actionStatus:o,get actionStatusTimer(){return s},set actionStatusTimer(e){s=e},escapeMarkdownCell:l,reportText:u,setActionStatus:d,copyEventReport:f,exportEventJson:m,AppSelect:O};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}}),R={class:`flex flex-wrap items-center justify-between gap-2 rounded-md border border-(--dashboard-border) bg-(--dashboard-panel-muted) px-3 py-2`},z={class:`text-xs text-(--dashboard-text-soft)`},B={class:`flex flex-wrap items-center gap-2`},V={key:0,class:`text-xs font-medium text-(--dashboard-accent)`},H=[`disabled`],U=[`disabled`];function W(e,t,n,r,i,a){return m(),x(`div`,R,[f(`p`,z,` 匹配 `+l(n.filteredCount)+` / `+l(n.totalCount)+` 条事件 `,1),f(`div`,B,[r.actionStatus?(m(),x(`span`,V,l(r.actionStatus),1)):v(``,!0),f(`button`,{type:`button`,class:`h-9 rounded-md border border-(--dashboard-border) bg-(--dashboard-panel) px-3 text-sm text-(--dashboard-text-soft) transition hover:border-(--dashboard-border-strong) hover:text-(--dashboard-accent) focus:border-(--dashboard-border-strong) focus:outline-none disabled:opacity-50`,disabled:n.events.length===0,onClick:r.copyEventReport},` 复制事件 `,8,H),f(`button`,{type:`button`,class:`h-9 rounded-md border border-(--dashboard-border) bg-(--dashboard-panel) px-3 text-sm text-(--dashboard-text-soft) transition hover:border-(--dashboard-border-strong) hover:text-(--dashboard-accent) focus:border-(--dashboard-border-strong) focus:outline-none disabled:opacity-50`,disabled:n.events.length===0,onClick:r.exportEventJson},` 导出 JSON `,8,U),b(r.AppSelect,{modelValue:r.sortMode,"onUpdate:modelValue":t[0]||=e=>r.sortMode=e,class:`w-28`,label:`排序运行事件`,options:r.sortOptions},null,8,[`modelValue`])])])}var G=S(L,[[`render`,W]]),K=t({__name:`AppRuntimeFocusCard`,props:{event:{},eyebrow:{},emptyTitle:{},emptyDetail:{},durationText:{}},setup(e,{expose:t}){t();let n=e,r={props:n,badge:p(()=>n.event?w(n.event):null),titleText:p(()=>n.event?.title??n.emptyTitle??`尚无运行事件`),detailText:p(()=>n.event?.detail??n.emptyDetail??`当前工作区还没有推入结构化运行事件。`),eventMeta:p(()=>n.event?D(n.event):null),get mutedPanelStyles(){return j},AppRuntimeBadge:P};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),q={class:`flex items-start justify-between gap-3`},J={key:0,class:`text-[11px] uppercase tracking-[0.18em] text-(--dashboard-accent)`},oe={class:`mt-1 text-lg font-semibold tracking-tight`},se={class:`mt-3 text-sm leading-6 text-(--dashboard-text-muted)`},ce={key:0,class:`mt-3 text-[11px] uppercase tracking-[0.18em] text-(--dashboard-text-soft)`},le={key:1,class:`mt-2 text-sm font-medium text-(--dashboard-text)`};function ue(e,t,r,a,o,c){return m(),x(`div`,{class:_(a.mutedPanelStyles())},[f(`div`,q,[f(`div`,null,[a.props.eyebrow?(m(),x(`p`,J,l(a.props.eyebrow),1)):v(``,!0),f(`h3`,oe,l(a.titleText),1)]),a.badge?(m(),u(a.AppRuntimeBadge,i(n({key:0},a.badge)),null,16)):v(``,!0)]),f(`p`,se,l(a.detailText),1),a.props.event?(m(),x(`p`,ce,l(a.eventMeta),1)):v(``,!0),a.props.durationText?(m(),x(`p`,le,l(a.props.durationText),1)):v(``,!0),s(e.$slots,`default`)],2)}var de=S(K,[[`render`,ue]]),fe=t({__name:`ActivitySelectedEventPanel`,props:{event:{}},setup(e,{expose:t}){t();let n=e,r={props:n,durationText:p(()=>n.event?.durationMs===void 0?void 0:`耗时 ${E(n.event.durationMs)}`),profileMetrics:p(()=>{let e=n.event?.profile;return e?[{label:`总耗时`,value:E(e.totalMs)},{label:`构建核心`,value:E(e.buildCoreMs)},{label:`转换`,value:E(e.transformMs)},{label:`写入`,value:E(e.writeMs)},{label:`监听到脏标记`,value:E(e.watchToDirtyMs)},{label:`产物发射`,value:E(e.emitMs)},{label:`共享 chunk`,value:E(e.sharedChunkResolveMs)}].filter(e=>e.value!==`未记录`):[]}),profileCounts:p(()=>{let e=n.event?.profile;return e?[{label:`脏入口`,value:e.dirtyCount},{label:`待处理`,value:e.pendingCount},{label:`已发射`,value:e.emittedCount}].filter(e=>typeof e.value==`number`):[]}),profileFile:p(()=>n.event?.profile?.sourceRootFile??n.event?.profile?.relativeFile??n.event?.profile?.file),AppRuntimeBadge:P,AppRuntimeFocusCard:de,AppSurfaceCard:M};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),pe={key:0,class:`mt-3 flex flex-wrap gap-1.5`},me={key:1,class:`mt-4 grid gap-3 rounded-md border border-(--dashboard-border) bg-(--dashboard-panel-muted) p-3`},he={class:`flex min-w-0 items-start justify-between gap-3`},ge={class:`min-w-0`},_e={key:0,class:`mt-1 truncate font-mono text-xs text-(--dashboard-text-soft)`},ve={key:0,class:`grid gap-2 sm:grid-cols-2`},ye={class:`text-[11px] text-(--dashboard-text-soft)`},be={class:`mt-1 text-sm font-semibold text-(--dashboard-text)`},xe={key:1,class:`flex flex-wrap gap-1.5`},Se={key:2,class:`grid gap-2 text-xs leading-5 text-(--dashboard-text-muted)`},Ce={key:0},we={key:1};function Te(t,n,r,i,a,s){return m(),u(i.AppSurfaceCard,{eyebrow:`Selected`,title:`当前事件`,"icon-name":`metric-search`},{default:e(()=>[b(i.AppRuntimeFocusCard,{event:r.event,eyebrow:`focus`,"empty-title":`未选择事件`,"empty-detail":`选择左侧事件后查看详情。`,"duration-text":i.durationText},{default:e(()=>[r.event?.tags?.length?(m(),x(`div`,pe,[(m(!0),x(g,null,o(r.event.tags,e=>(m(),u(i.AppRuntimeBadge,{key:e,label:e,tone:`neutral`},null,8,[`label`]))),128))])):v(``,!0),r.event?.profile?(m(),x(`div`,me,[f(`div`,he,[f(`div`,ge,[n[0]||=f(`p`,{class:`text-sm font-semibold text-(--dashboard-text)`},` HMR 阶段明细 `,-1),i.profileFile?(m(),x(`p`,_e,l(i.profileFile),1)):v(``,!0)]),r.event.profile.event?(m(),u(i.AppRuntimeBadge,{key:0,label:r.event.profile.event,tone:`info`},null,8,[`label`])):v(``,!0)]),i.profileMetrics.length>0?(m(),x(`dl`,ve,[(m(!0),x(g,null,o(i.profileMetrics,e=>(m(),x(`div`,{key:e.label,class:`rounded-md border border-(--dashboard-border) bg-(--dashboard-panel) px-3 py-2`},[f(`dt`,ye,l(e.label),1),f(`dd`,be,l(e.value),1)]))),128))])):v(``,!0),i.profileCounts.length>0?(m(),x(`div`,xe,[(m(!0),x(g,null,o(i.profileCounts,e=>(m(),u(i.AppRuntimeBadge,{key:e.label,label:`${e.label} ${e.value}`,tone:`neutral`},null,8,[`label`]))),128))])):v(``,!0),r.event.profile.dirtyReasonSummary?.length||r.event.profile.pendingReasonSummary?.length?(m(),x(`div`,Se,[r.event.profile.dirtyReasonSummary?.length?(m(),x(`p`,Ce,` 脏标记:`+l(r.event.profile.dirtyReasonSummary.join(`、`)),1)):v(``,!0),r.event.profile.pendingReasonSummary?.length?(m(),x(`p`,we,` 待处理:`+l(r.event.profile.pendingReasonSummary.join(`、`)),1)):v(``,!0)])):v(``,!0)])):v(``,!0)]),_:1},8,[`event`,`duration-text`])]),_:1})}var Ee=S(fe,[[`render`,Te]]),De=t({__name:`AppRuntimeSourceCard`,props:{source:{},count:{},errorCount:{},averageDuration:{},latestTimestamp:{},countLabel:{}},setup(e,{expose:t}){t();let n=e,r={props:n,badge:p(()=>ne(n)),subtitle:p(()=>n.latestTimestamp?`最近事件 ${n.latestTimestamp}`:`${n.count} ${n.countLabel??`条事件`}`),detailItems:p(()=>[{key:`error-count`,label:`错误 ${n.errorCount}`},{key:`average-duration`,label:`平均耗时 ${n.averageDuration}`}]),summaryText:p(()=>`平均耗时 ${n.averageDuration}`),get mutedPanelStyles(){return j},AppRuntimeBadge:P};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),Oe={class:`flex items-start justify-between gap-3`},ke={class:`min-w-0`},Ae={class:`truncate font-medium text-(--dashboard-text)`},je={class:`mt-1 text-[11px] uppercase tracking-[0.16em] text-(--dashboard-text-soft)`},Me={key:0,class:`mt-3 flex flex-wrap gap-2 text-[11px] uppercase tracking-[0.14em] text-(--dashboard-text-soft)`},Ne={key:1,class:`mt-3 text-sm text-(--dashboard-text-muted)`};function Pe(e,t,n,r,a,s){return m(),x(`div`,{class:_(r.mutedPanelStyles({padding:`sm`}))},[f(`div`,Oe,[f(`div`,ke,[f(`p`,Ae,l(r.props.source),1),f(`p`,je,l(r.subtitle),1)]),b(r.AppRuntimeBadge,i(y(r.badge)),null,16)]),r.props.latestTimestamp?(m(),x(`div`,Me,[(m(!0),x(g,null,o(r.detailItems,e=>(m(),x(`span`,{key:e.key,class:`rounded-full border border-(--dashboard-border) px-2 py-0.5`},l(e.label),1))),128))])):(m(),x(`p`,Ne,l(r.summaryText),1))],2)}var Fe=S(De,[[`render`,Pe]]),Ie=t({__name:`AppStatCard`,props:{label:{},value:{}},setup(e,{expose:t}){t();let n={panelClassName:j({padding:`sm`}),AppMetaLabel:F};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),Le={class:`mt-1 text-lg font-semibold`};function Re(t,n,r,i,a,o){return m(),x(`div`,{class:_(i.panelClassName)},[b(i.AppMetaLabel,null,{default:e(()=>[d(l(r.label),1)]),_:1}),f(`p`,Le,l(r.value),1)],2)}var ze=S(Ie,[[`render`,Re]]),Be=t({__name:`RuntimeIncidentDigestPanel`,props:{digest:{}},setup(e,{expose:t}){t();let n=e,r=c(``),i=null,a=p(()=>n.digest.status===`critical`?`error`:n.digest.status===`warning`?`warning`:`success`);function o(e){return e===`error`?`text-rose-600 dark:text-rose-300`:e===`warning`?`text-amber-600 dark:text-amber-300`:`text-(--dashboard-accent)`}function s(e){return e===`critical`?`border-rose-400/60 bg-(--dashboard-panel-muted)`:e===`warning`?`border-amber-400/60 bg-(--dashboard-panel-muted)`:`border-emerald-400/60 bg-(--dashboard-panel-muted)`}function l(e){r.value=e,i&&clearTimeout(i),i=setTimeout(()=>{r.value=``,i=null},1800)}async function u(){try{await A(n.digest.report),l(`摘要已复制`)}catch{l(`复制失败`)}}h(()=>{i&&clearTimeout(i)});let d={props:n,copyStatus:r,get copyStatusTimer(){return i},set copyStatusTimer(e){i=e},badgeTone:a,getLevelClassName:o,getStatusAccentClassName:s,setCopyStatus:l,copyDigestReport:u,AppEmptyState:N,AppMetricTile:I,AppRuntimeBadge:P,AppSurfaceCard:M,DashboardIcon:te};return Object.defineProperty(d,"__isScriptSetup",{enumerable:!1,value:!0}),d}}),Ve={class:`flex shrink-0 items-center gap-2`},He={key:0,class:`text-xs font-medium text-(--dashboard-accent)`},Ue={class:`h-3.5 w-3.5`},We={class:`grid gap-3`},Ge={class:`flex items-start justify-between gap-3`},Ke={class:`min-w-0`},qe={class:`text-sm font-semibold text-(--dashboard-text)`},Je={class:`mt-1 text-xs leading-5 text-(--dashboard-text-muted)`},Ye={class:`grid grid-cols-2 gap-2 sm:grid-cols-5 xl:grid-cols-2 2xl:grid-cols-5`},Xe={key:0,class:`grid max-h-52 gap-2 overflow-y-auto pr-1`},Ze={class:`flex items-start justify-between gap-3`},Qe={class:`min-w-0`},$e={class:`truncate text-sm font-medium text-(--dashboard-text)`},et={class:`mt-1 truncate text-xs text-(--dashboard-text-soft)`},tt={class:`mt-2 line-clamp-2 text-xs leading-5 text-(--dashboard-text-muted)`};function nt(t,n,r,i,a,s){return m(),u(i.AppSurfaceCard,{eyebrow:`Incident`,title:`事故摘要`,"icon-name":`metric-quality`},{header:e(()=>[f(`div`,Ve,[i.copyStatus?(m(),x(`span`,He,l(i.copyStatus),1)):v(``,!0),f(`button`,{type:`button`,class:`inline-flex h-8 items-center gap-1.5 rounded-md border border-(--dashboard-border) bg-(--dashboard-panel-muted) px-3 text-xs text-(--dashboard-text-soft) transition hover:border-(--dashboard-border-strong) hover:text-(--dashboard-accent) focus:border-(--dashboard-border-strong) focus:outline-none`,onClick:i.copyDigestReport},[f(`span`,Ue,[b(i.DashboardIcon,{name:`metric-copy`})]),n[0]||=d(` 复制 `,-1)])])]),default:e(()=>[f(`div`,We,[f(`div`,{class:_([`rounded-md border px-3 py-2.5`,i.getStatusAccentClassName(r.digest.status)])},[f(`div`,Ge,[f(`div`,Ke,[f(`p`,qe,l(r.digest.statusLabel),1),f(`p`,Je,l(r.digest.statusDetail),1)]),b(i.AppRuntimeBadge,{label:r.digest.statusLabel,tone:i.badgeTone},null,8,[`label`,`tone`])])],2),f(`div`,Ye,[(m(!0),x(g,null,o(r.digest.metrics,e=>(m(),u(i.AppMetricTile,{key:e.label,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),r.digest.incidents.length>0?(m(),x(`div`,Xe,[(m(!0),x(g,null,o(r.digest.incidents,e=>(m(),x(`article`,{key:e.id,class:`rounded-md border border-(--dashboard-border) bg-(--dashboard-panel-muted) px-3 py-2.5`},[f(`div`,Ze,[f(`div`,Qe,[f(`p`,$e,l(e.title),1),f(`p`,et,l(e.source)+` · `+l(e.kindLabel)+` · `+l(e.timestamp)+` · `+l(e.duration),1)]),f(`span`,{class:_([`shrink-0 text-xs font-semibold`,i.getLevelClassName(e.level)])},l(e.levelLabel),3)]),f(`p`,tt,l(e.reason)+` · `+l(e.detail),1)]))),128))])):(m(),u(i.AppEmptyState,{key:1,compact:``},{default:e(()=>[...n[1]||=[d(` 当前筛选范围内没有需要处理的运行时事件。 `,-1)]]),_:1}))])]),_:1})}var rt=S(Be,[[`render`,nt]]),it=t({__name:`ActivityInsightPanel`,props:{selectedEvent:{},incidentDigest:{},eventSummary:{},filteredEventSummary:{},diagnostics:{},sourceBreakdown:{}},setup(e,{expose:t}){t();let n={ActivitySelectedEventPanel:Ee,AppRuntimeBadge:P,AppRuntimeSourceCard:Fe,AppStatCard:ze,AppSurfaceCard:M,RuntimeIncidentDigestPanel:rt};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),at={class:`grid min-h-0 content-start gap-3 overflow-y-auto pr-1`},ot={class:`grid gap-2 sm:grid-cols-2`},st={class:`grid max-h-44 gap-2 overflow-y-auto pr-1`},ct={class:`flex items-start justify-between gap-3`},lt={class:`font-medium`},ut={class:`mt-1 text-sm leading-6 text-(--dashboard-text-muted)`},dt={key:0,class:`grid max-h-full gap-2 overflow-y-auto pr-1`};function ft(t,r,i,a,s,c){return m(),x(`div`,at,[b(a.ActivitySelectedEventPanel,{event:i.selectedEvent},null,8,[`event`]),b(a.RuntimeIncidentDigestPanel,{digest:i.incidentDigest},null,8,[`digest`]),b(a.AppSurfaceCard,{eyebrow:`Runtime`,title:`事件摘要`,"icon-name":`metric-time`},{default:e(()=>[f(`div`,ot,[(m(!0),x(g,null,o([...i.eventSummary,...i.filteredEventSummary],e=>(m(),u(a.AppStatCard,n({key:e.label},{ref_for:!0},e),null,16))),128))])]),_:1}),b(a.AppSurfaceCard,{eyebrow:`Diagnostics`,title:`当前诊断队列`,"icon-name":`metric-health`,"content-class":`min-h-0 overflow-hidden`},{default:e(()=>[f(`ul`,st,[(m(!0),x(g,null,o(i.diagnostics,e=>(m(),x(`li`,{key:e.label,class:`rounded-md border border-(--dashboard-border) bg-(--dashboard-panel-muted) px-4 py-3`},[f(`div`,ct,[f(`div`,null,[f(`p`,lt,l(e.label),1),f(`p`,ut,l(e.detail),1)]),b(a.AppRuntimeBadge,{label:e.status,tone:`info`},null,8,[`label`])])]))),128))])]),_:1}),b(a.AppSurfaceCard,{eyebrow:`Sources`,title:`事件来源`,"icon-name":`hero-system`,"content-class":`min-h-0 overflow-hidden`},{default:e(()=>[i.sourceBreakdown.length>0?(m(),x(`div`,dt,[(m(!0),x(g,null,o(i.sourceBreakdown,e=>(m(),u(a.AppRuntimeSourceCard,n({key:e.source},{ref_for:!0},e),null,16))),128))])):v(``,!0)]),_:1})])}var pt=S(it,[[`render`,ft]]),mt=t({__name:`AppInsetPanel`,props:{eyebrow:{}},setup(e,{expose:t}){t();let n={get mutedPanelStyles(){return j}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),ht={key:0,class:`text-[11px] uppercase tracking-[0.18em] text-(--dashboard-text-soft)`};function gt(e,t,n,r,i,a){return m(),x(`div`,{class:_(r.mutedPanelStyles())},[n.eyebrow?(m(),x(`p`,ht,l(n.eyebrow),1)):v(``,!0),f(`div`,{class:_(n.eyebrow?`mt-3`:void 0)},[s(e.$slots,`default`)],2)],2)}var _t=S(mt,[[`render`,gt]]),vt=t({__name:`AppEventFilterPanel`,props:{searchQuery:{},presetDescription:{},filterPresets:{},eventKindOptions:{},eventLevelOptions:{},eventSourceOptions:{},eventKindFilter:{},eventLevelFilter:{},eventSourceFilter:{}},emits:[`update:searchQuery`,`update:eventKindFilter`,`update:eventLevelFilter`,`update:eventSourceFilter`,`applyPreset`],setup(e,{expose:t,emit:n}){t();let r=e,i=n;function a(){return k({kind:`theme`,active:!1})}function o(e,t){return k({kind:`theme`,active:e===t})}let s={props:r,emit:i,getPresetClassName:a,getOptionClassName:o,AppInsetPanel:_t,AppMetaLabel:F};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),yt={class:`grid gap-3 xl:grid-cols-[minmax(14rem,0.85fr)_minmax(0,1.15fr)]`},bt={for:`dashboard-event-search`},xt=[`value`],St={class:`grid gap-3`},Ct={class:`mt-2 flex flex-wrap gap-2`},wt=[`onClick`],Tt={key:0,class:`mt-2 text-xs leading-5 text-(--dashboard-text-soft)`},Et={class:`grid gap-3 md:grid-cols-3`},Dt={class:`mt-2 flex flex-wrap gap-2`},Ot=[`onClick`],kt={class:`mt-2 flex flex-wrap gap-2`},At=[`onClick`],jt={class:`mt-2 flex flex-wrap gap-2`},Mt=[`onClick`];function Nt(t,n,r,i,a,s){return m(),u(i.AppInsetPanel,null,{default:e(()=>[f(`div`,yt,[f(`div`,null,[f(`label`,bt,[b(i.AppMetaLabel,null,{default:e(()=>[...n[1]||=[d(` 搜索事件 `,-1)]]),_:1})]),f(`input`,{id:`dashboard-event-search`,value:r.searchQuery,type:`text`,placeholder:`搜索标题、详情、来源或标签`,class:`mt-2 w-full rounded-md border border-(--dashboard-border) bg-(--dashboard-panel) px-3 py-2 text-sm text-(--dashboard-text) outline-none transition focus:border-(--dashboard-border-strong)`,onInput:n[0]||=e=>i.emit(`update:searchQuery`,e.target.value)},null,40,xt)]),f(`div`,St,[f(`div`,null,[b(i.AppMetaLabel,null,{default:e(()=>[...n[2]||=[d(` 快速预设 `,-1)]]),_:1}),f(`div`,Ct,[(m(!0),x(g,null,o(r.filterPresets,e=>(m(),x(`button`,{key:e.key,class:_(i.getPresetClassName()),onClick:t=>i.emit(`applyPreset`,e.key)},l(e.label),11,wt))),128))]),r.presetDescription?(m(),x(`p`,Tt,l(r.presetDescription),1)):v(``,!0)]),f(`div`,Et,[f(`div`,null,[b(i.AppMetaLabel,null,{default:e(()=>[...n[3]||=[d(` 类型过滤 `,-1)]]),_:1}),f(`div`,Dt,[(m(!0),x(g,null,o(r.eventKindOptions,e=>(m(),x(`button`,{key:e.value,class:_(i.getOptionClassName(i.props.eventKindFilter,e.value)),onClick:t=>i.emit(`update:eventKindFilter`,e.value)},l(e.label),11,Ot))),128))])]),f(`div`,null,[b(i.AppMetaLabel,null,{default:e(()=>[...n[4]||=[d(` 等级过滤 `,-1)]]),_:1}),f(`div`,kt,[(m(!0),x(g,null,o(r.eventLevelOptions,e=>(m(),x(`button`,{key:e.value,class:_(i.getOptionClassName(i.props.eventLevelFilter,e.value)),onClick:t=>i.emit(`update:eventLevelFilter`,e.value)},l(e.label),11,At))),128))])]),f(`div`,null,[b(i.AppMetaLabel,null,{default:e(()=>[...n[5]||=[d(` 来源过滤 `,-1)]]),_:1}),f(`div`,jt,[(m(!0),x(g,null,o(r.eventSourceOptions,e=>(m(),x(`button`,{key:e.value,class:_(i.getOptionClassName(i.props.eventSourceFilter,e.value)),onClick:t=>i.emit(`update:eventSourceFilter`,e.value)},l(e.label),11,Mt))),128))])])])])])]),_:1})}var Pt=S(vt,[[`render`,Nt]]),Ft=t({__name:`AppRuntimeEventListItem`,props:{event:{},selected:{type:Boolean}},setup(e,{expose:t}){t();let n=e,r={props:n,badge:p(()=>w(n.event)),eventMeta:p(()=>D(n.event)),panelClassName:p(()=>n.selected?`border-(--dashboard-border-strong) bg-(--dashboard-panel)`:`border-(--dashboard-border)`),AppMetaLabel:F,AppRuntimeBadge:P};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),It={class:`flex min-w-0 items-start justify-between gap-3`},Lt={class:`min-w-0`},Rt=[`title`];function zt(t,r,i,a,o,s){return m(),x(`li`,{class:_([`rounded-md border bg-(--dashboard-panel-muted) px-4 py-3 transition`,a.panelClassName])},[f(`div`,It,[f(`div`,Lt,[f(`p`,{class:`truncate font-medium text-(--dashboard-text)`,title:a.props.event.title},l(a.props.event.title),9,Rt),b(a.AppMetaLabel,{class:`mt-1`},{default:e(()=>[d(l(a.eventMeta),1)]),_:1})]),b(a.AppRuntimeBadge,n({class:`shrink-0`},a.badge),null,16)])],2)}var Bt=S(Ft,[[`render`,zt]]),Vt=1e3,Ht=5,Y={error:4,warning:3,success:2,info:1};function X(e){let t=Date.parse(e.timestamp);return Number.isFinite(t)?t:0}function Z(e,t){return typeof e.durationMs==`number`&&e.durationMs>=t}function Ut(e,t){return e.level===`error`||e.level===`warning`||Z(e,t)}function Wt(e,t){let n=[];return e.level===`error`?n.push(`错误事件`):e.level===`warning`&&n.push(`警告事件`),Z(e,t)&&n.push(`耗时 ${E(e.durationMs)}`),n.join(` · `)||`需要关注`}function Gt(e,t){return{id:e.id,title:e.title,detail:e.detail,level:e.level,levelLabel:C(e.level),kindLabel:T(e.kind),source:e.source??`dashboard`,timestamp:e.timestamp,duration:E(e.durationMs),reason:Wt(e,t)}}function Kt(e,t,n){return e>0?`critical`:t>0||n>0?`warning`:`healthy`}function qt(e){return e===`critical`?`需要立即处理`:e===`warning`?`需要关注`:`运行平稳`}function Jt(e,t,n,r){return e===`critical`?`检测到 ${t} 个错误事件,优先排查失败来源。`:e===`warning`?`检测到 ${n} 个警告和 ${r} 个慢事件,建议跟进。`:`当前筛选范围内没有错误、警告或慢事件。`}function Yt(e){let t=e.incidents.length>0?e.incidents.map(e=>`- [${e.levelLabel}] ${e.title}(${e.source} · ${e.kindLabel} · ${e.timestamp} · ${e.duration}):${e.detail}`):[`- 当前筛选范围内没有需要处理的事件。`];return[`# dashboard 运行时事故摘要`,``,`状态:${e.statusLabel}`,`说明:${e.statusDetail}`,``,`## 指标`,...e.metrics.map(e=>`- ${e.label}:${e.value}`),``,`## 影响来源`,e.affectedSources.length>0?e.affectedSources.map(e=>`- ${e}`).join(`
4
4
  `):`- 无`,``,`## 优先处理`,...t,``].join(`
5
- `)}function Kt(e,t={}){let n=t.slowEventThresholdMs??Rt,r=e.filter(e=>e.level===`error`).length,i=e.filter(e=>e.level===`warning`).length,a=e.filter(e=>Z(e,n)).length,o=e.filter(e=>Bt(e,n)),s=[...new Set(o.map(e=>e.source??`dashboard`))].sort((e,t)=>e.localeCompare(t,`zh-CN`)),c=Ht(r,i,a),l=o.toSorted((e,t)=>Y[t.level]-Y[e.level]||(t.durationMs??-1)-(e.durationMs??-1)||X(t)-X(e)).slice(0,zt).map(e=>Q(e,n)),u={status:c,statusLabel:Ut(c),statusDetail:Wt(c,r,i,a),metrics:[{label:`事件总数`,value:e.length},{label:`错误`,value:r},{label:`警告`,value:i},{label:`慢事件`,value:a},{label:`影响来源`,value:s.length}],affectedSources:s,incidents:l};return{...u,report:Gt(u)}}var $={error:4,warning:3,success:2,info:1},qt=[{value:`all`,label:`全部类型`},{value:`command`,label:`命令`},{value:`build`,label:`构建`},{value:`diagnostic`,label:`诊断`},{value:`hmr`,label:`HMR`},{value:`system`,label:`系统`}],Jt=[{value:`all`,label:`全部等级`},{value:`info`,label:`信息`},{value:`success`,label:`成功`},{value:`warning`,label:`警告`},{value:`error`,label:`错误`}];function Yt(e,t){return[e.title,e.detail,e.kind,e.level,e.source??``,...e.tags??[]].join(` `).toLowerCase().includes(t)}function Xt(e,t){return[...e].sort((e,n)=>t===`duration`?(n.durationMs??-1)-(e.durationMs??-1)||Date.parse(n.timestamp)-Date.parse(e.timestamp):t===`severity`?$[n.level]-$[e.level]||Date.parse(n.timestamp)-Date.parse(e.timestamp):t===`source`&&(e.source??`dashboard`).localeCompare(n.source??`dashboard`)||Date.parse(n.timestamp)-Date.parse(e.timestamp))}function Zt(e){let t=a(`all`),n=a(`all`),r=a(`all`),i=a(`time`),o=a(``),s=a(null),c=[{key:`all`,label:`查看全部`,description:`回到完整事件流`,apply(){t.value=`all`,n.value=`all`,r.value=`all`,o.value=``}},{key:`issues`,label:`异常优先`,description:`只看警告和错误`,apply(){t.value=`all`,n.value=`warning`,r.value=`all`,o.value=``}},{key:`commands`,label:`命令流`,description:`聚焦命令执行事件`,apply(){t.value=`command`,n.value=`all`,r.value=`all`,o.value=``}},{key:`hmr`,label:`HMR`,description:`观察热更新相关事件`,apply(){t.value=`hmr`,n.value=`all`,r.value=`all`,o.value=``}}],l=h(()=>[{value:`all`,label:`全部来源`},...[...new Set(e.value.map(e=>e.source??`dashboard`).filter(Boolean))].sort((e,t)=>e.localeCompare(t,`zh-CN`)).map(e=>({value:e,label:e}))]),u=h(()=>{let a=o.value.trim().toLowerCase();return Xt(e.value.filter(e=>t.value!==`all`&&e.kind!==t.value||n.value!==`all`&&e.level!==n.value||r.value!==`all`&&(e.source??`dashboard`)!==r.value?!1:!a||Yt(e,a)),i.value)}),f=h(()=>{let e=u.value.filter(e=>typeof e.durationMs==`number`),i=e.length>0?Math.round(e.reduce((e,t)=>e+(t.durationMs??0),0)/e.length):void 0;return[{label:`筛选后事件`,value:String(u.value.length)},{label:`当前类型`,value:t.value===`all`?`全部`:E(t.value)},{label:`当前等级`,value:n.value===`all`?`全部`:D(n.value)},{label:`当前来源`,value:r.value===`all`?`全部`:r.value},{label:`搜索关键字`,value:o.value.trim()||`未设置`},{label:`筛选平均耗时`,value:A(i)}]}),p=h(()=>ne(re(u.value))),m=h(()=>Kt(u.value)),g=h(()=>u.value.find(e=>e.id===s.value)??u.value[0]??null),_=h(()=>c.find(e=>e.key===`issues`?t.value===`all`&&n.value===`warning`&&r.value===`all`&&o.value===``:e.key===`commands`?t.value===`command`&&n.value===`all`&&r.value===`all`&&o.value===``:e.key===`hmr`?t.value===`hmr`&&n.value===`all`&&r.value===`all`&&o.value===``:t.value===`all`&&n.value===`all`&&r.value===`all`&&o.value===``)?.description??``);return d(u,e=>{if(e.length===0){s.value=null;return}e.some(e=>e.id===s.value)||(s.value=e[0]?.id??null)},{immediate:!0}),{eventKindFilter:t,eventKindOptions:qt,eventLevelFilter:n,eventLevelOptions:Jt,eventSortMode:i,eventSourceFilter:r,eventSourceOptions:l,filteredEventSummary:f,filteredRuntimeEvents:u,filterPresets:c,incidentDigest:m,presetDescription:_,searchQuery:o,selectedEvent:g,selectedEventId:s,sourceBreakdown:p}}var Qt=t({__name:`activity`,setup(e,{expose:t}){t();let{diagnostics:n,eventSummary:r,runtimeEvents:i}=ie(),{eventKindFilter:a,eventKindOptions:o,eventLevelFilter:s,eventLevelOptions:c,eventSortMode:l,eventSourceFilter:u,eventSourceOptions:d,filteredEventSummary:f,filteredRuntimeEvents:p,filterPresets:m,incidentDigest:h,presetDescription:g,searchQuery:_,selectedEvent:v,selectedEventId:y,sourceBreakdown:b}=Zt(i),x={diagnostics:n,eventSummary:r,runtimeEvents:i,eventKindFilter:a,eventKindOptions:o,eventLevelFilter:s,eventLevelOptions:c,eventSortMode:l,eventSourceFilter:u,eventSourceOptions:d,filteredEventSummary:f,filteredRuntimeEvents:p,filterPresets:m,incidentDigest:h,presetDescription:g,searchQuery:_,selectedEvent:v,selectedEventId:y,sourceBreakdown:b,ActivityEventSortBar:q,ActivityInsightPanel:ht,AppEmptyState:F,AppEventFilterPanel:Mt,AppRuntimeEventListItem:Lt,AppSurfaceCard:N};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}}),$t={class:`grid min-h-[46rem] items-start gap-3 xl:grid-cols-[minmax(0,1.25fr)_minmax(22rem,0.75fr)] xl:items-stretch`},en={class:`grid h-full min-h-0 grid-rows-[minmax(0,9rem)_auto_minmax(6rem,1fr)] gap-3 overflow-hidden`},tn={class:`grid min-h-0 gap-2 overflow-y-auto pr-1 text-sm leading-6 text-(--dashboard-text-muted)`};function nn(e,t,n,r,i,a){return g(),C(`div`,$t,[f(r.AppSurfaceCard,{eyebrow:`Event Feed`,title:`事件控制台`,"icon-name":`hero-commands`,"content-class":`min-h-[42rem] overflow-hidden`},{default:w(()=>[m(`div`,en,[f(r.AppEventFilterPanel,{class:`min-h-0 overflow-y-auto`,"search-query":r.searchQuery,"preset-description":r.presetDescription,"filter-presets":r.filterPresets,"event-kind-options":r.eventKindOptions,"event-level-options":r.eventLevelOptions,"event-source-options":r.eventSourceOptions,"event-kind-filter":r.eventKindFilter,"event-level-filter":r.eventLevelFilter,"event-source-filter":r.eventSourceFilter,"onUpdate:searchQuery":t[0]||=e=>r.searchQuery=e,"onUpdate:eventKindFilter":t[1]||=e=>r.eventKindFilter=e,"onUpdate:eventLevelFilter":t[2]||=e=>r.eventLevelFilter=e,"onUpdate:eventSourceFilter":t[3]||=e=>r.eventSourceFilter=e,onApplyPreset:t[4]||=e=>r.filterPresets.find(t=>t.key===e)?.apply()},null,8,[`search-query`,`preset-description`,`filter-presets`,`event-kind-options`,`event-level-options`,`event-source-options`,`event-kind-filter`,`event-level-filter`,`event-source-filter`]),f(r.ActivityEventSortBar,{modelValue:r.eventSortMode,"onUpdate:modelValue":t[5]||=e=>r.eventSortMode=e,events:r.filteredRuntimeEvents,"filtered-count":r.filteredRuntimeEvents.length,"total-count":r.runtimeEvents.length},null,8,[`modelValue`,`events`,`filtered-count`,`total-count`]),r.filteredRuntimeEvents.length===0?(g(),p(r.AppEmptyState,{key:0,as:`p`},{default:w(()=>[...t[6]||=[S(` 当前过滤条件下没有匹配事件。 `,-1)]]),_:1})):b(``,!0),m(`ul`,tn,[(g(!0),C(y,null,l(r.filteredRuntimeEvents,e=>(g(),p(r.AppRuntimeEventListItem,{key:e.id,event:e,selected:r.selectedEvent?.id===e.id,onClick:t=>r.selectedEventId=e.id},null,8,[`event`,`selected`,`onClick`]))),128))])])]),_:1}),f(r.ActivityInsightPanel,{"selected-event":r.selectedEvent,"incident-digest":r.incidentDigest,"event-summary":r.eventSummary,"filtered-event-summary":r.filteredEventSummary,diagnostics:r.diagnostics,"source-breakdown":r.sourceBreakdown},null,8,[`selected-event`,`incident-digest`,`event-summary`,`filtered-event-summary`,`diagnostics`,`source-breakdown`])])}var rn=k(Qt,[[`render`,nn]]);export{rn as default};
5
+ `)}function Xt(e,t={}){let n=t.slowEventThresholdMs??Vt,r=e.filter(e=>e.level===`error`).length,i=e.filter(e=>e.level===`warning`).length,a=e.filter(e=>Z(e,n)).length,o=e.filter(e=>Ut(e,n)),s=[...new Set(o.map(e=>e.source??`dashboard`))].sort((e,t)=>e.localeCompare(t,`zh-CN`)),c=Kt(r,i,a),l=o.toSorted((e,t)=>Y[t.level]-Y[e.level]||(t.durationMs??-1)-(e.durationMs??-1)||X(t)-X(e)).slice(0,Ht).map(e=>Gt(e,n)),u={status:c,statusLabel:qt(c),statusDetail:Jt(c,r,i,a),metrics:[{label:`事件总数`,value:e.length},{label:`错误`,value:r},{label:`警告`,value:i},{label:`慢事件`,value:a},{label:`影响来源`,value:s.length}],affectedSources:s,incidents:l};return{...u,report:Yt(u)}}var Q={error:4,warning:3,success:2,info:1},Zt=[{value:`all`,label:`全部类型`},{value:`command`,label:`命令`},{value:`build`,label:`构建`},{value:`diagnostic`,label:`诊断`},{value:`hmr`,label:`HMR`},{value:`system`,label:`系统`}],Qt=[{value:`all`,label:`全部等级`},{value:`info`,label:`信息`},{value:`success`,label:`成功`},{value:`warning`,label:`警告`},{value:`error`,label:`错误`}];function $t(e,t){return[e.title,e.detail,e.kind,e.level,e.source??``,...e.tags??[]].join(` `).toLowerCase().includes(t)}function $(e,t){return[...e].sort((e,n)=>t===`duration`?(n.durationMs??-1)-(e.durationMs??-1)||Date.parse(n.timestamp)-Date.parse(e.timestamp):t===`severity`?Q[n.level]-Q[e.level]||Date.parse(n.timestamp)-Date.parse(e.timestamp):t===`source`&&(e.source??`dashboard`).localeCompare(n.source??`dashboard`)||Date.parse(n.timestamp)-Date.parse(e.timestamp))}function en(e){let t=c(`all`),n=c(`all`),r=c(`all`),i=c(`time`),a=c(``),o=c(null),s=[{key:`all`,label:`查看全部`,description:`回到完整事件流`,apply(){t.value=`all`,n.value=`all`,r.value=`all`,a.value=``}},{key:`issues`,label:`异常优先`,description:`只看警告和错误`,apply(){t.value=`all`,n.value=`warning`,r.value=`all`,a.value=``}},{key:`commands`,label:`命令流`,description:`聚焦命令执行事件`,apply(){t.value=`command`,n.value=`all`,r.value=`all`,a.value=``}},{key:`hmr`,label:`HMR`,description:`观察热更新相关事件`,apply(){t.value=`hmr`,n.value=`all`,r.value=`all`,a.value=``}}],l=p(()=>[{value:`all`,label:`全部来源`},...[...new Set(e.value.map(e=>e.source??`dashboard`).filter(Boolean))].sort((e,t)=>e.localeCompare(t,`zh-CN`)).map(e=>({value:e,label:e}))]),u=p(()=>{let o=a.value.trim().toLowerCase();return $(e.value.filter(e=>t.value!==`all`&&e.kind!==t.value||n.value!==`all`&&e.level!==n.value||r.value!==`all`&&(e.source??`dashboard`)!==r.value?!1:!o||$t(e,o)),i.value)}),d=p(()=>{let e=u.value.filter(e=>typeof e.durationMs==`number`),i=e.length>0?Math.round(e.reduce((e,t)=>e+(t.durationMs??0),0)/e.length):void 0;return[{label:`筛选后事件`,value:String(u.value.length)},{label:`当前类型`,value:t.value===`all`?`全部`:T(t.value)},{label:`当前等级`,value:n.value===`all`?`全部`:C(n.value)},{label:`当前来源`,value:r.value===`all`?`全部`:r.value},{label:`搜索关键字`,value:a.value.trim()||`未设置`},{label:`筛选平均耗时`,value:E(i)}]}),f=p(()=>re(ie(u.value))),m=p(()=>Xt(u.value)),h=p(()=>u.value.find(e=>e.id===o.value)??u.value[0]??null),g=p(()=>s.find(e=>e.key===`issues`?t.value===`all`&&n.value===`warning`&&r.value===`all`&&a.value===``:e.key===`commands`?t.value===`command`&&n.value===`all`&&r.value===`all`&&a.value===``:e.key===`hmr`?t.value===`hmr`&&n.value===`all`&&r.value===`all`&&a.value===``:t.value===`all`&&n.value===`all`&&r.value===`all`&&a.value===``)?.description??``);return ee(u,e=>{if(e.length===0){o.value=null;return}e.some(e=>e.id===o.value)||(o.value=e[0]?.id??null)},{immediate:!0}),{eventKindFilter:t,eventKindOptions:Zt,eventLevelFilter:n,eventLevelOptions:Qt,eventSortMode:i,eventSourceFilter:r,eventSourceOptions:l,filteredEventSummary:d,filteredRuntimeEvents:u,filterPresets:s,incidentDigest:m,presetDescription:g,searchQuery:a,selectedEvent:h,selectedEventId:o,sourceBreakdown:f}}var tn=t({__name:`activity`,setup(e,{expose:t}){t();let{diagnostics:n,eventSummary:r,runtimeEvents:i}=ae(),{eventKindFilter:a,eventKindOptions:o,eventLevelFilter:s,eventLevelOptions:c,eventSortMode:l,eventSourceFilter:u,eventSourceOptions:d,filteredEventSummary:f,filteredRuntimeEvents:p,filterPresets:m,incidentDigest:h,presetDescription:g,searchQuery:_,selectedEvent:v,selectedEventId:y,sourceBreakdown:b}=en(i),x={diagnostics:n,eventSummary:r,runtimeEvents:i,eventKindFilter:a,eventKindOptions:o,eventLevelFilter:s,eventLevelOptions:c,eventSortMode:l,eventSourceFilter:u,eventSourceOptions:d,filteredEventSummary:f,filteredRuntimeEvents:p,filterPresets:m,incidentDigest:h,presetDescription:g,searchQuery:_,selectedEvent:v,selectedEventId:y,sourceBreakdown:b,ActivityEventSortBar:G,ActivityInsightPanel:pt,AppEmptyState:N,AppEventFilterPanel:Pt,AppRuntimeEventListItem:Bt,AppSurfaceCard:M};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}}),nn={class:`grid min-h-[40rem] min-w-0 items-start gap-3 xl:grid-cols-[minmax(0,1.25fr)_minmax(18rem,0.75fr)] xl:items-stretch`},rn={class:`grid min-h-0 min-w-0 grid-rows-[auto_auto_minmax(14rem,1fr)] gap-3 overflow-visible xl:h-full xl:grid-rows-[auto_auto_minmax(6rem,1fr)] xl:overflow-hidden`},an={class:`grid min-h-0 gap-2 overflow-y-auto pr-1 text-sm leading-6 text-(--dashboard-text-muted)`};function on(t,n,r,i,a,s){return m(),x(`div`,nn,[b(i.AppSurfaceCard,{eyebrow:`Event Feed`,title:`事件控制台`,"icon-name":`hero-commands`,"content-class":`min-h-[36rem] min-w-0`},{default:e(()=>[f(`div`,rn,[b(i.AppEventFilterPanel,{class:`min-h-0 min-w-0`,"search-query":i.searchQuery,"preset-description":i.presetDescription,"filter-presets":i.filterPresets,"event-kind-options":i.eventKindOptions,"event-level-options":i.eventLevelOptions,"event-source-options":i.eventSourceOptions,"event-kind-filter":i.eventKindFilter,"event-level-filter":i.eventLevelFilter,"event-source-filter":i.eventSourceFilter,"onUpdate:searchQuery":n[0]||=e=>i.searchQuery=e,"onUpdate:eventKindFilter":n[1]||=e=>i.eventKindFilter=e,"onUpdate:eventLevelFilter":n[2]||=e=>i.eventLevelFilter=e,"onUpdate:eventSourceFilter":n[3]||=e=>i.eventSourceFilter=e,onApplyPreset:n[4]||=e=>i.filterPresets.find(t=>t.key===e)?.apply()},null,8,[`search-query`,`preset-description`,`filter-presets`,`event-kind-options`,`event-level-options`,`event-source-options`,`event-kind-filter`,`event-level-filter`,`event-source-filter`]),b(i.ActivityEventSortBar,{modelValue:i.eventSortMode,"onUpdate:modelValue":n[5]||=e=>i.eventSortMode=e,events:i.filteredRuntimeEvents,"filtered-count":i.filteredRuntimeEvents.length,"total-count":i.runtimeEvents.length},null,8,[`modelValue`,`events`,`filtered-count`,`total-count`]),i.filteredRuntimeEvents.length===0?(m(),u(i.AppEmptyState,{key:0,as:`p`},{default:e(()=>[...n[6]||=[d(` 当前过滤条件下没有匹配事件。 `,-1)]]),_:1})):v(``,!0),f(`ul`,an,[(m(!0),x(g,null,o(i.filteredRuntimeEvents,e=>(m(),u(i.AppRuntimeEventListItem,{key:e.id,event:e,selected:i.selectedEvent?.id===e.id,onClick:t=>i.selectedEventId=e.id},null,8,[`event`,`selected`,`onClick`]))),128))])])]),_:1}),b(i.ActivityInsightPanel,{"selected-event":i.selectedEvent,"incident-digest":i.incidentDigest,"event-summary":i.eventSummary,"filtered-event-summary":i.filteredEventSummary,diagnostics:i.diagnostics,"source-breakdown":i.sourceBreakdown},null,8,[`selected-event`,`incident-digest`,`event-summary`,`filtered-event-summary`,`diagnostics`,`source-breakdown`])])}var sn=S(tn,[[`render`,on]]);export{sn as default};
@@ -0,0 +1 @@
1
+ .diagnostics-split[data-v-a5f11dba]{align-items:start;gap:.5rem;min-width:0;min-height:0;display:grid;overflow:visible}@media (width>=1280px){.diagnostics-split[data-v-a5f11dba]{grid-template-columns:minmax(32rem, var(--diagnostics-primary)) .75rem minmax(20rem, 1fr);align-items:stretch;height:100%;overflow:hidden}}