@weapp-vite/dashboard 6.15.8 → 6.15.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- import{D as e,E as t,F as n,I as r,L as i,M as a,_ as o,b as s,d as c,f as l,g as u,h as d,k as f,l as p,m,p as h,u as g,v as _,w as v,z as y}from"./vue.js";import{d as b,p as x}from"./shell.js";import{m as S,o as C,s as w}from"./useDashboardWorkspace.js";var T=o({__name:`AppEmptyState`,props:{as:{},compact:{type:Boolean}},setup(t){return(n,i)=>(v(),l(f(t.as??`div`),{class:r([`rounded-xl border border-dashed border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] text-sm text-[color:var(--dashboard-text-soft)]`,t.compact?`px-3 py-4`:`p-5`])},{default:a(()=>[e(n.$slots,`default`)]),_:3},8,[`class`]))}}),E=o({__name:`AppMetaLabel`,props:{accent:{type:Boolean}},setup(t){return(n,i)=>(v(),m(`p`,{class:r([`text-[11px] uppercase tracking-[0.18em]`,t.accent?`text-[color:var(--dashboard-accent)]`:`text-[color:var(--dashboard-text-soft)]`])},[e(n.$slots,`default`)],2))}}),D=o({__name:`AppRuntimeBadge`,props:{label:{},tone:{default:`neutral`}},setup(e){return(t,i)=>(v(),m(`span`,{class:r(n(x)({tone:e.tone}))},y(e.label),3))}}),O={class:`flex items-start justify-between gap-3`},k={key:0,class:`text-[11px] uppercase tracking-[0.18em] text-[color:var(--dashboard-accent)]`},A={class:`mt-1 text-lg font-semibold tracking-tight`},j={class:`mt-3 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},M={key:0,class:`mt-3 text-[11px] uppercase tracking-[0.18em] text-[color:var(--dashboard-text-soft)]`},N={key:1,class:`mt-2 text-sm font-medium text-[color:var(--dashboard-text)]`},P=o({__name:`AppRuntimeFocusCard`,props:{event:{},eyebrow:{},emptyTitle:{},emptyDetail:{},durationText:{}},setup(t){let a=t,o=g(()=>a.event?C(a.event):null),u=g(()=>a.event?.title??a.emptyTitle??`尚无运行事件`),d=g(()=>a.event?.detail??a.emptyDetail??`当前工作区还没有推入结构化运行事件。`),f=g(()=>a.event?S(a.event):null);return(t,p)=>(v(),m(`div`,{class:r(n(b)())},[c(`div`,O,[c(`div`,null,[a.eyebrow?(v(),m(`p`,k,y(a.eyebrow),1)):h(``,!0),c(`h3`,A,y(u.value),1)]),o.value?(v(),l(D,i(s({key:0},o.value)),null,16)):h(``,!0)]),c(`p`,j,y(d.value),1),a.event?(v(),m(`p`,M,y(f.value),1)):h(``,!0),a.durationText?(v(),m(`p`,N,y(a.durationText),1)):h(``,!0),e(t.$slots,`default`)],2))}}),F={class:`flex items-start justify-between gap-3`},I={class:`min-w-0`},L={class:`truncate font-medium text-[color:var(--dashboard-text)]`},R={class:`mt-1 text-[11px] uppercase tracking-[0.16em] text-[color:var(--dashboard-text-soft)]`},z={key:0,class:`mt-3 flex flex-wrap gap-2 text-[11px] uppercase tracking-[0.14em] text-[color:var(--dashboard-text-soft)]`},B={key:1,class:`mt-3 text-sm text-[color:var(--dashboard-text-muted)]`},V=o({__name:`AppRuntimeSourceCard`,props:{source:{},count:{},errorCount:{},averageDuration:{},latestTimestamp:{},countLabel:{}},setup(e){let a=e,o=g(()=>w(a)),s=g(()=>a.latestTimestamp?`最近事件 ${a.latestTimestamp}`:`${a.count} ${a.countLabel??`条事件`}`),l=g(()=>[{key:`error-count`,label:`错误 ${a.errorCount}`},{key:`average-duration`,label:`平均耗时 ${a.averageDuration}`}]),d=g(()=>`平均耗时 ${a.averageDuration}`);return(e,f)=>(v(),m(`div`,{class:r(n(b)({padding:`sm`}))},[c(`div`,F,[c(`div`,I,[c(`p`,L,y(a.source),1),c(`p`,R,y(s.value),1)]),u(D,i(_(o.value)),null,16)]),a.latestTimestamp?(v(),m(`div`,z,[(v(!0),m(p,null,t(l.value,e=>(v(),m(`span`,{key:e.key,class:`rounded-full border border-[color:var(--dashboard-border)] px-2 py-0.5`},y(e.label),1))),128))])):(v(),m(`p`,B,y(d.value),1))],2))}}),H={class:`mt-1 text-lg font-semibold`},U=o({__name:`AppStatCard`,props:{label:{},value:{}},setup(e){let t=b({padding:`sm`});return(i,o)=>(v(),m(`div`,{class:r(n(t))},[u(E,null,{default:a(()=>[d(y(e.label),1)]),_:1}),c(`p`,H,y(e.value),1)],2))}});export{E as a,D as i,V as n,T as o,P as r,U as t};
1
+ import{D as e,E as t,F as n,I as r,L as i,M as a,_ as o,b as s,d as c,f as l,g as u,h as d,k as f,l as p,m,p as h,u as g,v as _,w as v,z as y}from"./vue.js";import{d as b,p as x}from"./shell.js";import{m as S,o as C,s as w}from"./index.js";var T=o({__name:`AppEmptyState`,props:{as:{},compact:{type:Boolean}},setup(t){return(n,i)=>(v(),l(f(t.as??`div`),{class:r([`rounded-xl border border-dashed border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] text-sm text-[color:var(--dashboard-text-soft)]`,t.compact?`px-3 py-4`:`p-5`])},{default:a(()=>[e(n.$slots,`default`)]),_:3},8,[`class`]))}}),E=o({__name:`AppMetaLabel`,props:{accent:{type:Boolean}},setup(t){return(n,i)=>(v(),m(`p`,{class:r([`text-[11px] uppercase tracking-[0.18em]`,t.accent?`text-[color:var(--dashboard-accent)]`:`text-[color:var(--dashboard-text-soft)]`])},[e(n.$slots,`default`)],2))}}),D=o({__name:`AppRuntimeBadge`,props:{label:{},tone:{default:`neutral`}},setup(e){return(t,i)=>(v(),m(`span`,{class:r(n(x)({tone:e.tone}))},y(e.label),3))}}),O={class:`flex items-start justify-between gap-3`},k={key:0,class:`text-[11px] uppercase tracking-[0.18em] text-[color:var(--dashboard-accent)]`},A={class:`mt-1 text-lg font-semibold tracking-tight`},j={class:`mt-3 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},M={key:0,class:`mt-3 text-[11px] uppercase tracking-[0.18em] text-[color:var(--dashboard-text-soft)]`},N={key:1,class:`mt-2 text-sm font-medium text-[color:var(--dashboard-text)]`},P=o({__name:`AppRuntimeFocusCard`,props:{event:{},eyebrow:{},emptyTitle:{},emptyDetail:{},durationText:{}},setup(t){let a=t,o=g(()=>a.event?C(a.event):null),u=g(()=>a.event?.title??a.emptyTitle??`尚无运行事件`),d=g(()=>a.event?.detail??a.emptyDetail??`当前工作区还没有推入结构化运行事件。`),f=g(()=>a.event?S(a.event):null);return(t,p)=>(v(),m(`div`,{class:r(n(b)())},[c(`div`,O,[c(`div`,null,[a.eyebrow?(v(),m(`p`,k,y(a.eyebrow),1)):h(``,!0),c(`h3`,A,y(u.value),1)]),o.value?(v(),l(D,i(s({key:0},o.value)),null,16)):h(``,!0)]),c(`p`,j,y(d.value),1),a.event?(v(),m(`p`,M,y(f.value),1)):h(``,!0),a.durationText?(v(),m(`p`,N,y(a.durationText),1)):h(``,!0),e(t.$slots,`default`)],2))}}),F={class:`flex items-start justify-between gap-3`},I={class:`min-w-0`},L={class:`truncate font-medium text-[color:var(--dashboard-text)]`},R={class:`mt-1 text-[11px] uppercase tracking-[0.16em] text-[color:var(--dashboard-text-soft)]`},z={key:0,class:`mt-3 flex flex-wrap gap-2 text-[11px] uppercase tracking-[0.14em] text-[color:var(--dashboard-text-soft)]`},B={key:1,class:`mt-3 text-sm text-[color:var(--dashboard-text-muted)]`},V=o({__name:`AppRuntimeSourceCard`,props:{source:{},count:{},errorCount:{},averageDuration:{},latestTimestamp:{},countLabel:{}},setup(e){let a=e,o=g(()=>w(a)),s=g(()=>a.latestTimestamp?`最近事件 ${a.latestTimestamp}`:`${a.count} ${a.countLabel??`条事件`}`),l=g(()=>[{key:`error-count`,label:`错误 ${a.errorCount}`},{key:`average-duration`,label:`平均耗时 ${a.averageDuration}`}]),d=g(()=>`平均耗时 ${a.averageDuration}`);return(e,f)=>(v(),m(`div`,{class:r(n(b)({padding:`sm`}))},[c(`div`,F,[c(`div`,I,[c(`p`,L,y(a.source),1),c(`p`,R,y(s.value),1)]),u(D,i(_(o.value)),null,16)]),a.latestTimestamp?(v(),m(`div`,z,[(v(!0),m(p,null,t(l.value,e=>(v(),m(`span`,{key:e.key,class:`rounded-full border border-[color:var(--dashboard-border)] px-2 py-0.5`},y(e.label),1))),128))])):(v(),m(`p`,B,y(d.value),1))],2))}}),H={class:`mt-1 text-lg font-semibold`},U=o({__name:`AppStatCard`,props:{label:{},value:{}},setup(e){let t=b({padding:`sm`});return(i,o)=>(v(),m(`div`,{class:r(n(t))},[u(E,null,{default:a(()=>[d(y(e.label),1)]),_:1}),c(`p`,H,y(e.value),1)],2))}});export{E as a,D as i,V as n,T as o,P as r,U as t};
@@ -1 +1 @@
1
- import{E as e,F as t,I as n,L as r,M as i,N as a,_ as o,b as s,d as c,f as l,g as u,h as d,j as f,l as p,m,p as h,u as g,v as _,w as v,z as y}from"./vue.js";import{_ as b,f as x,l as S}from"./shell.js";import{a as C,f as w,h as T,i as ee,m as E,o as D,p as O,r as k,u as A}from"./useDashboardWorkspace.js";import{a as j,i as M,n as N,o as P,r as F,t as te}from"./AppStatCard.js";import{t as I}from"./AppInsetPanel.js";import{t as L}from"./AppSectionHeading.js";var R={class:`grid gap-3`},z={for:`dashboard-event-search`},B=[`value`],V={class:`grid gap-3`},H={class:`mt-2 flex flex-wrap gap-2`},U=[`onClick`],W={class:`mt-2 text-xs leading-5 text-[color:var(--dashboard-text-soft)]`},G={class:`mt-2 flex flex-wrap gap-2`},K=[`onClick`],q={class:`mt-2 flex flex-wrap gap-2`},J=[`onClick`],Y={class:`mt-2 flex flex-wrap gap-2`},X=[`onClick`],Z=o({__name:`AppEventFilterPanel`,props:{searchQuery:{},presetDescription:{},filterPresets:{},eventKindOptions:{},eventLevelOptions:{},eventSourceOptions:{},eventKindFilter:{},eventLevelFilter:{},eventSourceFilter:{}},emits:[`update:searchQuery`,`update:eventKindFilter`,`update:eventLevelFilter`,`update:eventSourceFilter`,`applyPreset`],setup(t,{emit:r}){let a=t,o=r;function s(){return x({kind:`theme`,active:!1})}function f(e,t){return x({kind:`theme`,active:e===t})}return(r,h)=>(v(),l(I,null,{default:i(()=>[c(`div`,R,[c(`div`,null,[c(`label`,z,[u(j,null,{default:i(()=>[...h[1]||=[d(` 搜索事件 `,-1)]]),_:1})]),c(`input`,{id:`dashboard-event-search`,value:t.searchQuery,type:`text`,placeholder:`搜索标题、详情、来源或标签`,class:`mt-2 w-full rounded-2xl border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel)] px-3 py-2 text-sm text-[color:var(--dashboard-text)] outline-none transition focus:border-[color:var(--dashboard-border-strong)]`,onInput:h[0]||=e=>o(`update:searchQuery`,e.target.value)},null,40,B)]),c(`div`,V,[c(`div`,null,[u(j,null,{default:i(()=>[...h[2]||=[d(` 快速预设 `,-1)]]),_:1}),c(`div`,H,[(v(!0),m(p,null,e(t.filterPresets,e=>(v(),m(`button`,{key:e.key,class:n(s()),onClick:t=>o(`applyPreset`,e.key)},y(e.label),11,U))),128))]),c(`p`,W,y(t.presetDescription),1)]),c(`div`,null,[u(j,null,{default:i(()=>[...h[3]||=[d(` 类型过滤 `,-1)]]),_:1}),c(`div`,G,[(v(!0),m(p,null,e(t.eventKindOptions,e=>(v(),m(`button`,{key:e.value,class:n(f(a.eventKindFilter,e.value)),onClick:t=>o(`update:eventKindFilter`,e.value)},y(e.label),11,K))),128))])]),c(`div`,null,[u(j,null,{default:i(()=>[...h[4]||=[d(` 等级过滤 `,-1)]]),_:1}),c(`div`,q,[(v(!0),m(p,null,e(t.eventLevelOptions,e=>(v(),m(`button`,{key:e.value,class:n(f(a.eventLevelFilter,e.value)),onClick:t=>o(`update:eventLevelFilter`,e.value)},y(e.label),11,J))),128))])]),c(`div`,null,[u(j,null,{default:i(()=>[...h[5]||=[d(` 来源过滤 `,-1)]]),_:1}),c(`div`,Y,[(v(!0),m(p,null,e(t.eventSourceOptions,e=>(v(),m(`button`,{key:e.value,class:n(f(a.eventSourceFilter,e.value)),onClick:t=>o(`update:eventSourceFilter`,e.value)},y(e.label),11,X))),128))])])])])]),_:1}))}}),Q={class:`grid gap-2`},ne={class:`text-xs uppercase tracking-[0.16em] text-[color:var(--dashboard-text-soft)]`},re={class:`text-sm text-[color:var(--dashboard-text)]`},ie=`flex items-center justify-between gap-3 rounded-2xl border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel)] px-3 py-2.5`,ae=o({__name:`AppKeyValueList`,props:{items:{}},setup(t){let r=t,i=g(()=>r.items.map(e=>({key:e.label,label:e.label,value:e.value})));return(t,r)=>(v(),m(`ul`,Q,[(v(!0),m(p,null,e(i.value,e=>(v(),m(`li`,{key:e.key,class:n(ie)},[c(`span`,ne,y(e.label),1),c(`strong`,re,y(e.value),1)]))),128))]))}}),oe={class:`flex flex-wrap gap-1.5`},se=`rounded-full border border-[color:var(--dashboard-border)] px-2 py-0.5 text-[11px] uppercase tracking-[0.12em] text-[color:var(--dashboard-text-soft)]`,$=o({__name:`AppTagList`,props:{tags:{}},setup(t){let r=t,i=g(()=>r.tags.map(e=>({key:e,label:e})));return(t,r)=>(v(),m(`div`,oe,[(v(!0),m(p,null,e(i.value,e=>(v(),m(`span`,{key:e.key,class:n(se)},y(e.label),1))),128))]))}}),ce={class:`flex items-start justify-between gap-3`},le={class:`font-medium text-[color:var(--dashboard-text)]`},ue={class:`mt-1 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},de=o({__name:`AppRuntimeEventListItem`,props:{event:{},selected:{type:Boolean}},setup(e){let t=e,a=g(()=>D(t.event)),o=g(()=>E(t.event)),s=g(()=>t.selected?`border-[color:var(--dashboard-border-strong)] bg-[color:var(--dashboard-panel)]`:`border-[color:var(--dashboard-border)]`);return(e,f)=>(v(),m(`li`,{class:n([`rounded-[18px] border bg-[color:var(--dashboard-panel-muted)] px-4 py-3 transition`,s.value])},[c(`div`,ce,[c(`div`,null,[c(`p`,le,y(t.event.title),1),c(`p`,ue,y(t.event.detail),1),u(j,{class:`mt-2`},{default:i(()=>[d(y(o.value),1)]),_:1}),t.event.tags?.length?(v(),l($,{key:0,class:`mt-2`,tags:t.event.tags},null,8,[`tags`])):h(``,!0)]),u(M,r(_(a.value)),null,16)])],2))}}),fe={class:`grid gap-3 xl:grid-cols-[minmax(0,1.15fr)_minmax(21rem,0.85fr)]`},pe={class:`mt-5 grid gap-3`},me={class:`flex items-start gap-3`},he={class:`mt-0.5 flex h-10 w-10 items-center justify-center rounded-2xl bg-[color:var(--dashboard-accent-soft)] text-[color:var(--dashboard-accent)]`},ge={class:`h-5 w-5`},_e={class:`min-w-0`},ve={class:`flex flex-wrap items-center gap-2`},ye={class:`tracking-tight`},be={class:`rounded-full border border-[color:var(--dashboard-border)] px-2 py-0.5 text-[11px] uppercase tracking-[0.18em] text-[color:var(--dashboard-text-soft)]`},xe={class:`mt-2 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},Se={class:`grid gap-3`},Ce={class:`grid gap-2 sm:grid-cols-2`},we={class:`grid gap-2`},Te={class:`flex items-start justify-between gap-3`},Ee={class:`font-medium`},De={class:`mt-1 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},Oe={class:`grid gap-3`},ke={key:0,class:`grid gap-2 md:grid-cols-2 xl:grid-cols-3`},Ae={key:1,class:`grid gap-3 xl:grid-cols-[minmax(0,1fr)_minmax(16rem,0.78fr)]`},je={class:`grid gap-2 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},Me=o({__name:`activity`,setup(n){let{activityItems:r,diagnostics:o,eventSummary:_,runtimeEvents:x}=k(),E=a(`all`),D=a(`all`),j=a(`all`),R=a(``),z=a(null),B=[{value:`all`,label:`全部类型`},{value:`command`,label:`命令`},{value:`build`,label:`构建`},{value:`diagnostic`,label:`诊断`},{value:`hmr`,label:`HMR`},{value:`system`,label:`系统`}],V=[{value:`all`,label:`全部等级`},{value:`info`,label:`信息`},{value:`success`,label:`成功`},{value:`warning`,label:`警告`},{value:`error`,label:`错误`}],H=[{key:`all`,label:`查看全部`,description:`回到完整事件流`,apply(){E.value=`all`,D.value=`all`,j.value=`all`,R.value=``}},{key:`issues`,label:`异常优先`,description:`只看警告和错误`,apply(){E.value=`all`,D.value=`warning`,j.value=`all`,R.value=``}},{key:`commands`,label:`命令流`,description:`聚焦命令执行事件`,apply(){E.value=`command`,D.value=`all`,j.value=`all`,R.value=``}},{key:`hmr`,label:`HMR`,description:`观察热更新相关事件`,apply(){E.value=`hmr`,D.value=`all`,j.value=`all`,R.value=``}}],U=g(()=>[{value:`all`,label:`全部来源`},...[...new Set(x.value.map(e=>e.source??`dashboard`).filter(Boolean))].sort((e,t)=>e.localeCompare(t,`zh-CN`)).map(e=>({value:e,label:e}))]),W=g(()=>{let e=R.value.trim().toLowerCase();return x.value.filter(t=>E.value!==`all`&&t.kind!==E.value||D.value!==`all`&&t.level!==D.value||j.value!==`all`&&(t.source??`dashboard`)!==j.value?!1:e?[t.title,t.detail,t.kind,t.level,t.source??``,...t.tags??[]].join(` `).toLowerCase().includes(e):!0)}),G=g(()=>{let e=W.value.filter(e=>typeof e.durationMs==`number`),t=e.length>0?Math.round(e.reduce((e,t)=>e+(t.durationMs??0),0)/e.length):void 0;return[{label:`筛选后事件`,value:String(W.value.length)},{label:`当前类型`,value:E.value===`all`?`全部`:w(E.value)},{label:`当前等级`,value:D.value===`all`?`全部`:O(D.value)},{label:`当前来源`,value:j.value===`all`?`全部`:j.value},{label:`搜索关键字`,value:R.value.trim()||`未设置`},{label:`筛选平均耗时`,value:A(t)}]}),K=g(()=>ee(C(W.value))),q=g(()=>W.value.find(e=>e.id===z.value)??W.value[0]??null),J=g(()=>`${H.find(e=>e.key===`all`)?.description??``} 也可以直接组合下面的类型、等级和关键字筛选。`),Y=g(()=>q.value?[{label:`事件类型`,value:w(q.value.kind)},{label:`事件等级`,value:O(q.value.level)},{label:`事件来源`,value:T(q.value.source)},{label:`发生时间`,value:q.value.timestamp},{label:`持续时间`,value:A(q.value.durationMs)},{label:`标签数量`,value:String(q.value.tags?.length??0)}]:[]);return f(W,e=>{if(e.length===0){z.value=null;return}e.some(e=>e.id===z.value)||(z.value=e[0]?.id??null)},{immediate:!0}),(n,a)=>(v(),m(`div`,fe,[u(S,{tone:`strong`,padding:`md`},{default:i(()=>[u(L,{eyebrow:`Timeline`,title:`活动流与增强节奏`,description:`这一页先承载假数据时间线,后续最适合接入 dev server 事件、构建阶段、HMR 推送和 CLI 诊断结果。`}),c(`ol`,pe,[(v(!0),m(p,null,e(t(r),e=>(v(),m(`li`,{key:`${e.time}-${e.title}`,class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] p-4`},[c(`div`,me,[c(`span`,he,[c(`span`,ge,[u(b,{name:e.tone===`live`?`status-live`:`metric-time`},null,8,[`name`])])]),c(`div`,_e,[c(`div`,ve,[c(`strong`,ye,y(e.title),1),c(`span`,be,y(e.time),1)]),c(`p`,xe,y(e.summary),1)])])]))),128))])]),_:1}),c(`div`,Se,[u(S,{eyebrow:`Runtime`,title:`事件摘要`,description:`这组摘要来自共享工作区状态层。未来接 CLI 或 MCP 时,只需要持续往事件流里追加结构化事件。`,"icon-name":`metric-time`},{default:i(()=>[c(`div`,Ce,[(v(!0),m(p,null,e([...t(_),...G.value],e=>(v(),l(te,s({key:e.label},{ref_for:!0},e),null,16))),128))])]),_:1}),u(S,{eyebrow:`Diagnostics`,title:`当前诊断队列`,description:`这里不是产品逻辑页,而是 dashboard 未来最需要的第二层能力: 把运行状态和建议动作结构化展示。`,"icon-name":`metric-health`},{default:i(()=>[c(`ul`,we,[(v(!0),m(p,null,e(t(o),e=>(v(),m(`li`,{key:e.label,class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-4 py-3`},[c(`div`,Te,[c(`div`,null,[c(`p`,Ee,y(e.label),1),c(`p`,De,y(e.detail),1)]),u(M,{label:e.status,tone:`info`},null,8,[`label`])])]))),128))])]),_:1}),u(S,{eyebrow:`Event Feed`,title:`结构化事件控制台`,description:`当前事件已经支持按类型、等级和关键字过滤。后续即便接入主包真实事件,也可以复用这套前端交互层。`,"icon-name":`hero-commands`},{default:i(()=>[c(`div`,Oe,[u(Z,{"search-query":R.value,"preset-description":J.value,"filter-presets":H,"event-kind-options":B,"event-level-options":V,"event-source-options":U.value,"event-kind-filter":E.value,"event-level-filter":D.value,"event-source-filter":j.value,"onUpdate:searchQuery":a[0]||=e=>R.value=e,"onUpdate:eventKindFilter":a[1]||=e=>E.value=e,"onUpdate:eventLevelFilter":a[2]||=e=>D.value=e,"onUpdate:eventSourceFilter":a[3]||=e=>j.value=e,onApplyPreset:a[4]||=e=>H.find(t=>t.key===e)?.apply()},null,8,[`search-query`,`preset-description`,`event-source-options`,`event-kind-filter`,`event-level-filter`,`event-source-filter`]),K.value.length>0?(v(),m(`div`,ke,[(v(!0),m(p,null,e(K.value,e=>(v(),l(N,s({key:e.source},{ref_for:!0},e),null,16))),128))])):h(``,!0),q.value?(v(),m(`div`,Ae,[u(F,{event:q.value,eyebrow:`selected event`},{default:i(()=>[q.value.tags?.length?(v(),l($,{key:0,class:`mt-4`,tags:q.value.tags},null,8,[`tags`])):h(``,!0)]),_:1},8,[`event`]),u(I,{eyebrow:`event metadata`},{default:i(()=>[u(ae,{items:Y.value},null,8,[`items`])]),_:1})])):h(``,!0),W.value.length===0?(v(),l(P,{key:2,as:`p`},{default:i(()=>[...a[5]||=[d(` 当前过滤条件下没有匹配的事件。你可以清空关键字,或者切回“全部类型 / 全部等级”。 `,-1)]]),_:1})):h(``,!0),c(`ul`,je,[(v(!0),m(p,null,e(W.value,e=>(v(),l(de,{key:e.id,event:e,selected:q.value?.id===e.id,onClick:t=>z.value=e.id},null,8,[`event`,`selected`,`onClick`]))),128))])])]),_:1})])]))}});export{Me as default};
1
+ import{E as e,F as t,I as n,L as r,M as i,N as a,_ as o,b as s,d as c,f as l,g as u,h as d,j as f,l as p,m,p as h,u as g,v as _,w as v,z as y}from"./vue.js";import{_ as b,f as x,l as S}from"./shell.js";import{a as C,f as w,h as T,i as ee,m as E,o as D,p as O,r as k,u as A}from"./index.js";import{a as j,i as M,n as N,o as P,r as F,t as te}from"./AppStatCard.js";import{t as I}from"./AppInsetPanel.js";import{t as L}from"./AppSectionHeading.js";var R={class:`grid gap-3`},z={for:`dashboard-event-search`},B=[`value`],V={class:`grid gap-3`},H={class:`mt-2 flex flex-wrap gap-2`},U=[`onClick`],W={class:`mt-2 text-xs leading-5 text-[color:var(--dashboard-text-soft)]`},G={class:`mt-2 flex flex-wrap gap-2`},K=[`onClick`],q={class:`mt-2 flex flex-wrap gap-2`},J=[`onClick`],Y={class:`mt-2 flex flex-wrap gap-2`},X=[`onClick`],Z=o({__name:`AppEventFilterPanel`,props:{searchQuery:{},presetDescription:{},filterPresets:{},eventKindOptions:{},eventLevelOptions:{},eventSourceOptions:{},eventKindFilter:{},eventLevelFilter:{},eventSourceFilter:{}},emits:[`update:searchQuery`,`update:eventKindFilter`,`update:eventLevelFilter`,`update:eventSourceFilter`,`applyPreset`],setup(t,{emit:r}){let a=t,o=r;function s(){return x({kind:`theme`,active:!1})}function f(e,t){return x({kind:`theme`,active:e===t})}return(r,h)=>(v(),l(I,null,{default:i(()=>[c(`div`,R,[c(`div`,null,[c(`label`,z,[u(j,null,{default:i(()=>[...h[1]||=[d(` 搜索事件 `,-1)]]),_:1})]),c(`input`,{id:`dashboard-event-search`,value:t.searchQuery,type:`text`,placeholder:`搜索标题、详情、来源或标签`,class:`mt-2 w-full rounded-2xl border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel)] px-3 py-2 text-sm text-[color:var(--dashboard-text)] outline-none transition focus:border-[color:var(--dashboard-border-strong)]`,onInput:h[0]||=e=>o(`update:searchQuery`,e.target.value)},null,40,B)]),c(`div`,V,[c(`div`,null,[u(j,null,{default:i(()=>[...h[2]||=[d(` 快速预设 `,-1)]]),_:1}),c(`div`,H,[(v(!0),m(p,null,e(t.filterPresets,e=>(v(),m(`button`,{key:e.key,class:n(s()),onClick:t=>o(`applyPreset`,e.key)},y(e.label),11,U))),128))]),c(`p`,W,y(t.presetDescription),1)]),c(`div`,null,[u(j,null,{default:i(()=>[...h[3]||=[d(` 类型过滤 `,-1)]]),_:1}),c(`div`,G,[(v(!0),m(p,null,e(t.eventKindOptions,e=>(v(),m(`button`,{key:e.value,class:n(f(a.eventKindFilter,e.value)),onClick:t=>o(`update:eventKindFilter`,e.value)},y(e.label),11,K))),128))])]),c(`div`,null,[u(j,null,{default:i(()=>[...h[4]||=[d(` 等级过滤 `,-1)]]),_:1}),c(`div`,q,[(v(!0),m(p,null,e(t.eventLevelOptions,e=>(v(),m(`button`,{key:e.value,class:n(f(a.eventLevelFilter,e.value)),onClick:t=>o(`update:eventLevelFilter`,e.value)},y(e.label),11,J))),128))])]),c(`div`,null,[u(j,null,{default:i(()=>[...h[5]||=[d(` 来源过滤 `,-1)]]),_:1}),c(`div`,Y,[(v(!0),m(p,null,e(t.eventSourceOptions,e=>(v(),m(`button`,{key:e.value,class:n(f(a.eventSourceFilter,e.value)),onClick:t=>o(`update:eventSourceFilter`,e.value)},y(e.label),11,X))),128))])])])])]),_:1}))}}),Q={class:`grid gap-2`},ne={class:`text-xs uppercase tracking-[0.16em] text-[color:var(--dashboard-text-soft)]`},re={class:`text-sm text-[color:var(--dashboard-text)]`},ie=`flex items-center justify-between gap-3 rounded-2xl border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel)] px-3 py-2.5`,ae=o({__name:`AppKeyValueList`,props:{items:{}},setup(t){let r=t,i=g(()=>r.items.map(e=>({key:e.label,label:e.label,value:e.value})));return(t,r)=>(v(),m(`ul`,Q,[(v(!0),m(p,null,e(i.value,e=>(v(),m(`li`,{key:e.key,class:n(ie)},[c(`span`,ne,y(e.label),1),c(`strong`,re,y(e.value),1)]))),128))]))}}),oe={class:`flex flex-wrap gap-1.5`},se=`rounded-full border border-[color:var(--dashboard-border)] px-2 py-0.5 text-[11px] uppercase tracking-[0.12em] text-[color:var(--dashboard-text-soft)]`,$=o({__name:`AppTagList`,props:{tags:{}},setup(t){let r=t,i=g(()=>r.tags.map(e=>({key:e,label:e})));return(t,r)=>(v(),m(`div`,oe,[(v(!0),m(p,null,e(i.value,e=>(v(),m(`span`,{key:e.key,class:n(se)},y(e.label),1))),128))]))}}),ce={class:`flex items-start justify-between gap-3`},le={class:`font-medium text-[color:var(--dashboard-text)]`},ue={class:`mt-1 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},de=o({__name:`AppRuntimeEventListItem`,props:{event:{},selected:{type:Boolean}},setup(e){let t=e,a=g(()=>D(t.event)),o=g(()=>E(t.event)),s=g(()=>t.selected?`border-[color:var(--dashboard-border-strong)] bg-[color:var(--dashboard-panel)]`:`border-[color:var(--dashboard-border)]`);return(e,f)=>(v(),m(`li`,{class:n([`rounded-[18px] border bg-[color:var(--dashboard-panel-muted)] px-4 py-3 transition`,s.value])},[c(`div`,ce,[c(`div`,null,[c(`p`,le,y(t.event.title),1),c(`p`,ue,y(t.event.detail),1),u(j,{class:`mt-2`},{default:i(()=>[d(y(o.value),1)]),_:1}),t.event.tags?.length?(v(),l($,{key:0,class:`mt-2`,tags:t.event.tags},null,8,[`tags`])):h(``,!0)]),u(M,r(_(a.value)),null,16)])],2))}}),fe={class:`grid gap-3 xl:grid-cols-[minmax(0,1.15fr)_minmax(21rem,0.85fr)]`},pe={class:`mt-5 grid gap-3`},me={class:`flex items-start gap-3`},he={class:`mt-0.5 flex h-10 w-10 items-center justify-center rounded-2xl bg-[color:var(--dashboard-accent-soft)] text-[color:var(--dashboard-accent)]`},ge={class:`h-5 w-5`},_e={class:`min-w-0`},ve={class:`flex flex-wrap items-center gap-2`},ye={class:`tracking-tight`},be={class:`rounded-full border border-[color:var(--dashboard-border)] px-2 py-0.5 text-[11px] uppercase tracking-[0.18em] text-[color:var(--dashboard-text-soft)]`},xe={class:`mt-2 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},Se={class:`grid gap-3`},Ce={class:`grid gap-2 sm:grid-cols-2`},we={class:`grid gap-2`},Te={class:`flex items-start justify-between gap-3`},Ee={class:`font-medium`},De={class:`mt-1 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},Oe={class:`grid gap-3`},ke={key:0,class:`grid gap-2 md:grid-cols-2 xl:grid-cols-3`},Ae={key:1,class:`grid gap-3 xl:grid-cols-[minmax(0,1fr)_minmax(16rem,0.78fr)]`},je={class:`grid gap-2 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},Me=o({__name:`activity`,setup(n){let{activityItems:r,diagnostics:o,eventSummary:_,runtimeEvents:x}=k(),E=a(`all`),D=a(`all`),j=a(`all`),R=a(``),z=a(null),B=[{value:`all`,label:`全部类型`},{value:`command`,label:`命令`},{value:`build`,label:`构建`},{value:`diagnostic`,label:`诊断`},{value:`hmr`,label:`HMR`},{value:`system`,label:`系统`}],V=[{value:`all`,label:`全部等级`},{value:`info`,label:`信息`},{value:`success`,label:`成功`},{value:`warning`,label:`警告`},{value:`error`,label:`错误`}],H=[{key:`all`,label:`查看全部`,description:`回到完整事件流`,apply(){E.value=`all`,D.value=`all`,j.value=`all`,R.value=``}},{key:`issues`,label:`异常优先`,description:`只看警告和错误`,apply(){E.value=`all`,D.value=`warning`,j.value=`all`,R.value=``}},{key:`commands`,label:`命令流`,description:`聚焦命令执行事件`,apply(){E.value=`command`,D.value=`all`,j.value=`all`,R.value=``}},{key:`hmr`,label:`HMR`,description:`观察热更新相关事件`,apply(){E.value=`hmr`,D.value=`all`,j.value=`all`,R.value=``}}],U=g(()=>[{value:`all`,label:`全部来源`},...[...new Set(x.value.map(e=>e.source??`dashboard`).filter(Boolean))].sort((e,t)=>e.localeCompare(t,`zh-CN`)).map(e=>({value:e,label:e}))]),W=g(()=>{let e=R.value.trim().toLowerCase();return x.value.filter(t=>E.value!==`all`&&t.kind!==E.value||D.value!==`all`&&t.level!==D.value||j.value!==`all`&&(t.source??`dashboard`)!==j.value?!1:e?[t.title,t.detail,t.kind,t.level,t.source??``,...t.tags??[]].join(` `).toLowerCase().includes(e):!0)}),G=g(()=>{let e=W.value.filter(e=>typeof e.durationMs==`number`),t=e.length>0?Math.round(e.reduce((e,t)=>e+(t.durationMs??0),0)/e.length):void 0;return[{label:`筛选后事件`,value:String(W.value.length)},{label:`当前类型`,value:E.value===`all`?`全部`:w(E.value)},{label:`当前等级`,value:D.value===`all`?`全部`:O(D.value)},{label:`当前来源`,value:j.value===`all`?`全部`:j.value},{label:`搜索关键字`,value:R.value.trim()||`未设置`},{label:`筛选平均耗时`,value:A(t)}]}),K=g(()=>ee(C(W.value))),q=g(()=>W.value.find(e=>e.id===z.value)??W.value[0]??null),J=g(()=>`${H.find(e=>e.key===`all`)?.description??``} 也可以直接组合下面的类型、等级和关键字筛选。`),Y=g(()=>q.value?[{label:`事件类型`,value:w(q.value.kind)},{label:`事件等级`,value:O(q.value.level)},{label:`事件来源`,value:T(q.value.source)},{label:`发生时间`,value:q.value.timestamp},{label:`持续时间`,value:A(q.value.durationMs)},{label:`标签数量`,value:String(q.value.tags?.length??0)}]:[]);return f(W,e=>{if(e.length===0){z.value=null;return}e.some(e=>e.id===z.value)||(z.value=e[0]?.id??null)},{immediate:!0}),(n,a)=>(v(),m(`div`,fe,[u(S,{tone:`strong`,padding:`md`},{default:i(()=>[u(L,{eyebrow:`Timeline`,title:`活动流与增强节奏`,description:`这一页先承载假数据时间线,后续最适合接入 dev server 事件、构建阶段、HMR 推送和 CLI 诊断结果。`}),c(`ol`,pe,[(v(!0),m(p,null,e(t(r),e=>(v(),m(`li`,{key:`${e.time}-${e.title}`,class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] p-4`},[c(`div`,me,[c(`span`,he,[c(`span`,ge,[u(b,{name:e.tone===`live`?`status-live`:`metric-time`},null,8,[`name`])])]),c(`div`,_e,[c(`div`,ve,[c(`strong`,ye,y(e.title),1),c(`span`,be,y(e.time),1)]),c(`p`,xe,y(e.summary),1)])])]))),128))])]),_:1}),c(`div`,Se,[u(S,{eyebrow:`Runtime`,title:`事件摘要`,description:`这组摘要来自共享工作区状态层。未来接 CLI 或 MCP 时,只需要持续往事件流里追加结构化事件。`,"icon-name":`metric-time`},{default:i(()=>[c(`div`,Ce,[(v(!0),m(p,null,e([...t(_),...G.value],e=>(v(),l(te,s({key:e.label},{ref_for:!0},e),null,16))),128))])]),_:1}),u(S,{eyebrow:`Diagnostics`,title:`当前诊断队列`,description:`这里不是产品逻辑页,而是 dashboard 未来最需要的第二层能力: 把运行状态和建议动作结构化展示。`,"icon-name":`metric-health`},{default:i(()=>[c(`ul`,we,[(v(!0),m(p,null,e(t(o),e=>(v(),m(`li`,{key:e.label,class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-4 py-3`},[c(`div`,Te,[c(`div`,null,[c(`p`,Ee,y(e.label),1),c(`p`,De,y(e.detail),1)]),u(M,{label:e.status,tone:`info`},null,8,[`label`])])]))),128))])]),_:1}),u(S,{eyebrow:`Event Feed`,title:`结构化事件控制台`,description:`当前事件已经支持按类型、等级和关键字过滤。后续即便接入主包真实事件,也可以复用这套前端交互层。`,"icon-name":`hero-commands`},{default:i(()=>[c(`div`,Oe,[u(Z,{"search-query":R.value,"preset-description":J.value,"filter-presets":H,"event-kind-options":B,"event-level-options":V,"event-source-options":U.value,"event-kind-filter":E.value,"event-level-filter":D.value,"event-source-filter":j.value,"onUpdate:searchQuery":a[0]||=e=>R.value=e,"onUpdate:eventKindFilter":a[1]||=e=>E.value=e,"onUpdate:eventLevelFilter":a[2]||=e=>D.value=e,"onUpdate:eventSourceFilter":a[3]||=e=>j.value=e,onApplyPreset:a[4]||=e=>H.find(t=>t.key===e)?.apply()},null,8,[`search-query`,`preset-description`,`event-source-options`,`event-kind-filter`,`event-level-filter`,`event-source-filter`]),K.value.length>0?(v(),m(`div`,ke,[(v(!0),m(p,null,e(K.value,e=>(v(),l(N,s({key:e.source},{ref_for:!0},e),null,16))),128))])):h(``,!0),q.value?(v(),m(`div`,Ae,[u(F,{event:q.value,eyebrow:`selected event`},{default:i(()=>[q.value.tags?.length?(v(),l($,{key:0,class:`mt-4`,tags:q.value.tags},null,8,[`tags`])):h(``,!0)]),_:1},8,[`event`]),u(I,{eyebrow:`event metadata`},{default:i(()=>[u(ae,{items:Y.value},null,8,[`items`])]),_:1})])):h(``,!0),W.value.length===0?(v(),l(P,{key:2,as:`p`},{default:i(()=>[...a[5]||=[d(` 当前过滤条件下没有匹配的事件。你可以清空关键字,或者切回“全部类型 / 全部等级”。 `,-1)]]),_:1})):h(``,!0),c(`ul`,je,[(v(!0),m(p,null,e(W.value,e=>(v(),l(de,{key:e.id,event:e,selected:q.value?.id===e.id,onClick:t=>z.value=e.id},null,8,[`event`,`selected`,`onClick`]))),128))])])]),_:1})])]))}});export{Me as default};
@@ -1 +1 @@
1
- import{C as e,D as t,E as n,F as r,I as i,M as a,P as o,S as s,_ as c,a as l,b as u,d,f,g as p,h as m,j as h,l as g,m as _,o as v,p as y,t as b,u as x,w as S,x as ee,z as C}from"./vue.js";import{_ as w,f as T,h as E,l as D,m as te,u as O}from"./shell.js";import{i as ne,n as re}from"./useDashboardTheme.js";import{c as k,d as A,g as j,i as ie,l as M,r as ae,u as oe}from"./useDashboardWorkspace.js";import{n as se,t as ce}from"./view.js";import{a as le,i as ue,n as de,o as N,r as fe,t as pe}from"./AppStatCard.js";import{a as me,c as he,i as ge,n as _e,o as ve,r as ye,s as be,t as xe}from"./echarts.js";var P={class:`grid gap-2.5 md:grid-cols-2 xl:grid-cols-6`},F={class:`flex items-start justify-between gap-3`},I={class:`text-[11px] uppercase tracking-[0.22em] text-[color:var(--dashboard-text-soft)]`},L={class:`mt-2 text-2xl font-semibold md:text-[1.65rem]`},R={class:`h-5 w-5`},z={key:0,class:`mt-3 flex flex-wrap gap-1.5`},Se=c({__name:`DashboardMetricGrid`,props:{cards:{},packageTypeSummary:{}},setup(e){let t=e;function a(e){return[E({padding:`md`}),e.wide?`xl:col-span-2`:`xl:col-span-1`]}let o=x(()=>t.cards.map(e=>({...e,packageTypeTags:e.label===`总产物体积`?t.packageTypeSummary.map(e=>({label:A(e.label),value:String(e.value)})):[]})));return(e,t)=>(S(),_(`section`,P,[(S(!0),_(g,null,n(o.value,e=>(S(),_(`article`,{key:e.label,class:i(a(e))},[d(`div`,F,[d(`div`,null,[d(`p`,I,C(e.label),1),d(`p`,L,C(e.value),1)]),d(`span`,{class:i(r(O)({size:`lg`}))},[d(`span`,R,[p(w,{name:e.iconName},null,8,[`name`])])],2)]),e.packageTypeTags.length>0?(S(),_(`div`,z,[(S(!0),_(g,null,n(e.packageTypeTags,e=>(S(),_(`span`,{key:e.label,class:`rounded-full border border-[color:var(--dashboard-border-strong)] bg-[color:var(--dashboard-accent-soft)] px-3 py-1 text-xs text-[color:var(--dashboard-text)]`},C(e.label)+` `+C(e.value),1))),128))])):y(``,!0)],2))),128))]))}}),B={class:`rounded-xl border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-3 py-2.5`},V={class:`flex items-start justify-between gap-3`},H={class:`min-w-0`},U={class:`mt-1 text-xs text-[color:var(--dashboard-text-soft)]`},W={key:0,class:`whitespace-nowrap font-medium text-[color:var(--dashboard-accent)]`},G=c({__name:`AppCompactListItem`,props:{title:{},meta:{},value:{},monoTitle:{type:Boolean}},setup(e){return(t,n)=>(S(),_(`li`,B,[d(`div`,V,[d(`div`,H,[d(`p`,{class:i([`font-medium`,e.monoTitle?`truncate font-mono text-xs text-[color:var(--dashboard-text)]`:`truncate text-[color:var(--dashboard-text)]`])},C(e.title),3),d(`p`,U,C(e.meta),1)]),e.value?(S(),_(`span`,W,C(e.value),1)):y(``,!0)])]))}}),K={class:`flex items-center justify-between gap-3`},Ce={class:`flex items-center gap-2`},we={class:`h-5 w-5`},q={class:`text-lg font-semibold text-[color:var(--dashboard-text)]`},Te={key:0,class:`text-xs text-[color:var(--dashboard-text-soft)] md:text-sm`},J=c({__name:`AppPanelHeader`,props:{iconName:{},title:{},description:{}},setup(e){let n=O();return(a,o)=>(S(),_(`div`,K,[d(`div`,Ce,[d(`span`,{class:i(r(n))},[d(`span`,we,[p(w,{name:e.iconName},null,8,[`name`])])],2),d(`div`,null,[d(`h2`,q,C(e.title),1),e.description?(S(),_(`p`,Te,C(e.description),1)):y(``,!0)])]),t(a.$slots,`meta`)]))}}),Y={class:`rounded-xl border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] p-3.5`},X={class:`flex flex-wrap items-start justify-between gap-3`},Ee={class:`min-w-0`},Z={class:`mt-1 text-xs text-[color:var(--dashboard-text-soft)]`},De={key:0,class:`font-medium text-[color:var(--dashboard-accent)]`},Oe=c({__name:`AppSummaryValueCard`,props:{title:{},meta:{},value:{},breakTitle:{type:Boolean}},setup(e){return(n,r)=>(S(),_(`article`,Y,[d(`div`,X,[d(`div`,Ee,[d(`p`,{class:i([`font-medium text-[color:var(--dashboard-text)]`,e.breakTitle?`break-all`:void 0])},C(e.title),3),d(`p`,Z,C(e.meta),1)]),e.value?(S(),_(`p`,De,C(e.value),1)):y(``,!0)]),t(n.$slots,`default`)]))}}),ke={class:`grid gap-3 xl:grid-cols-[minmax(0,1.24fr)_minmax(0,0.76fr)]`},Ae={key:0,class:`mt-4 space-y-2.5`},je={class:`mt-3 space-y-1.5 text-xs text-[color:var(--dashboard-text-muted)]`},Me={class:`font-medium text-[color:var(--dashboard-text)]`},Ne={class:`flex flex-col gap-3`},Pe={class:`mt-4 space-y-2.5`},Fe={class:`mt-4 space-y-2.5 text-sm text-[color:var(--dashboard-text-muted)]`},Ie=c({__name:`ModulesPanel`,props:{visibleDuplicateModules:{},moduleSourceSummary:{},visibleLargestFiles:{}},setup(e){let t=e;function o(e){return{title:e.source,meta:`${j(e.sourceType)} · ${e.packageCount} 个包 · ${M(e.bytes)}`}}function s(e){return{title:j(e.sourceType),meta:`${e.count} 个模块`,value:M(e.bytes)}}function c(e){return{title:e.file,meta:`${e.packageLabel} · ${k(e.from)} · ${e.moduleCount} 模块`}}let l=x(()=>t.visibleDuplicateModules.map(e=>({key:e.id,packages:e.packages,...o(e)}))),h=x(()=>t.moduleSourceSummary.map(e=>({key:e.sourceType,...s(e)}))),v=x(()=>t.visibleLargestFiles.slice(0,6).map(e=>({key:`${e.packageId}:${e.file}`,...c(e)})));return(e,t)=>(S(),_(`section`,ke,[d(`div`,{class:i(r(E)({padding:`md`}))},[p(J,{"icon-name":`duplicate-modules`,title:`重复模块`,description:`优先看被多个包重复包含的源码与依赖。`}),l.value.length?(S(),_(`div`,Ae,[(S(!0),_(g,null,n(l.value,e=>(S(),f(Oe,u({key:e.key},{ref_for:!0},e,{"break-title":``}),{default:a(()=>[d(`ul`,je,[(S(!0),_(g,null,n(e.packages,n=>(S(),_(`li`,{key:`${e.key}:${n.packageId}`},[d(`span`,Me,C(n.packageLabel),1),t[0]||=d(`span`,{class:`text-[color:var(--dashboard-text-soft)]`},` · `,-1),d(`span`,null,C(n.files.join(`、`)),1)]))),128))])]),_:2},1040))),128))])):(S(),f(N,{key:1,class:`mt-4`},{default:a(()=>[...t[1]||=[m(` 当前构建未检测到跨包重复模块。 `,-1)]]),_:1}))],2),d(`div`,Ne,[d(`section`,{class:i(r(E)({padding:`md`}))},[p(J,{"icon-name":`module-sources`,title:`模块来源`}),d(`div`,Pe,[(S(!0),_(g,null,n(h.value,e=>(S(),f(Oe,u({key:e.key},{ref_for:!0},e),null,16))),128))])],2),d(`section`,{class:i(r(E)({padding:`md`}))},[p(J,{"icon-name":`file-samples`,title:`文件样本`}),d(`ul`,Fe,[(S(!0),_(g,null,n(v.value,e=>(S(),f(G,u({key:e.key},{ref_for:!0},e,{"mono-title":``}),null,16))),128))])],2)])]))}}),Le=`Treemap`,Re=`从包体到文件再到模块,直接定位体积热点。`,ze=`overview`,Be=c({__name:`TreemapCard`,props:{bindChartRef:{type:Function}},setup(e){function t(){return T({kind:`badge`})}return(n,o)=>(S(),_(`div`,{class:i(r(E)({padding:`sm`}))},[p(J,{class:`mb-2 px-2`,"icon-name":`treemap`,title:Le,description:Re},{meta:a(()=>[d(`span`,{class:i(t())},C(ze),2)]),_:1}),d(`div`,{ref:e.bindChartRef,class:`h-[min(58vh,36rem)] min-h-[21rem] rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] p-2`},null,512)],2))}}),Ve={class:`grid gap-3 xl:grid-cols-[minmax(0,1.55fr)_minmax(21rem,0.75fr)] xl:items-stretch`},He={class:`grid gap-3 xl:h-[min(58vh,36rem)] xl:grid-rows-[minmax(0,1fr)_minmax(0,0.82fr)]`},Ue={class:`mt-3 grid h-[calc(100%-3.5rem)] min-h-0 gap-2 overflow-y-auto pr-1 text-sm xl:grid-cols-1`},We={class:`mt-3 grid h-[calc(100%-3.5rem)] min-h-0 gap-2 overflow-y-auto pr-1 text-sm text-[color:var(--dashboard-text-muted)]`},Ge=c({__name:`OverviewPanel`,props:{bindChartRef:{type:Function},visibleLargestFiles:{},subPackages:{}},setup(e){let t=e;function o(e){return{title:e.file,meta:`${e.packageLabel} · ${A(e.packageType)} · ${e.type}`,value:M(e.size)}}function s(e){return{title:e.root,meta:`${e.name?`别名 ${e.name}`:`未设置别名`} · ${e.independent?`独立分包`:`普通分包`}`}}let c=x(()=>t.visibleLargestFiles.map(e=>({key:`${e.packageId}:${e.file}`,...o(e)}))),l=x(()=>t.subPackages.map(e=>({key:e.root,...s(e)}))),h=x(()=>l.value.length>0);return(t,o)=>(S(),_(`section`,Ve,[p(Be,{"bind-chart-ref":e.bindChartRef},null,8,[`bind-chart-ref`]),d(`div`,He,[d(`section`,{class:i([r(E)({padding:`md`}),`min-h-0 overflow-hidden`])},[p(J,{"icon-name":`top-files`,title:`Top Files`,description:`最大体积样本`},{meta:a(()=>[...o[0]||=[d(`span`,{class:`text-[11px] uppercase tracking-[0.2em] text-[color:var(--dashboard-text-soft)]`},`Top 10`,-1)]]),_:1}),d(`ol`,Ue,[(S(!0),_(g,null,n(c.value,e=>(S(),f(G,u({key:e.key},{ref_for:!0},e),null,16))),128))])],2),d(`section`,{class:i([r(E)({padding:`md`}),`min-h-0 overflow-hidden`])},[p(J,{"icon-name":`subpackages`,title:`Subpackages`,description:`分包根目录与模式`},{meta:a(()=>[...o[1]||=[d(`span`,{class:`text-[11px] uppercase tracking-[0.2em] text-[color:var(--dashboard-text-soft)]`},`Roots`,-1)]]),_:1}),d(`ul`,We,[h.value?y(``,!0):(S(),f(N,{key:0,as:`li`,compact:``},{default:a(()=>[...o[2]||=[m(` 当前构建没有配置分包。 `,-1)]]),_:1})),(S(!0),_(g,null,n(l.value,e=>(S(),f(G,u({key:e.key},{ref_for:!0},e),null,16))),128))])],2)])]))}}),Ke={class:`mt-1.5 text-base font-semibold text-[color:var(--dashboard-text)]`},qe=`rounded-xl border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] p-3`,Je=c({__name:`AppMetricTile`,props:{label:{},value:{}},setup(e){return(t,n)=>(S(),_(`div`,{class:i(qe)},[p(le,null,{default:a(()=>[m(C(e.label),1)]),_:1}),d(`p`,Ke,C(e.value),1)]))}}),Ye={class:`overflow-hidden rounded-xl border border-[color:var(--dashboard-border)]`},Xe={class:`min-w-full divide-y divide-[color:var(--dashboard-border)] text-left text-sm`},Ze={class:`divide-y divide-[color:var(--dashboard-border)] text-[color:var(--dashboard-text-muted)]`},Qe={class:`px-3 py-2 font-mono text-xs text-[color:var(--dashboard-text)]`},$e={class:`px-3 py-2`},et={class:`px-3 py-2`},tt={class:`px-3 py-2 font-medium text-[color:var(--dashboard-text)]`},nt=c({__name:`AppPackageFileTable`,props:{files:{}},setup(e){let t=e;function r(e){return{file:e.file,type:e.type,fromLabel:k(e.from),sizeLabel:M(e.size)}}let i=x(()=>t.files.map(e=>r(e)));return(e,t)=>(S(),_(`div`,Ye,[d(`table`,Xe,[t[0]||=d(`thead`,{class:`bg-[color:var(--dashboard-panel-muted)] text-[color:var(--dashboard-text-soft)]`},[d(`tr`,null,[d(`th`,{class:`px-3 py-2 text-[11px] font-medium uppercase tracking-[0.18em]`},` 文件 `),d(`th`,{class:`px-3 py-2 text-[11px] font-medium uppercase tracking-[0.18em]`},` 类型 `),d(`th`,{class:`px-3 py-2 text-[11px] font-medium uppercase tracking-[0.18em]`},` 来源 `),d(`th`,{class:`px-3 py-2 text-[11px] font-medium uppercase tracking-[0.18em]`},` 体积 `)])],-1),d(`tbody`,Ze,[(S(!0),_(g,null,n(i.value,e=>(S(),_(`tr`,{key:e.file},[d(`td`,Qe,C(e.file),1),d(`td`,$e,C(e.type),1),d(`td`,et,C(e.fromLabel),1),d(`td`,tt,C(e.sizeLabel),1)]))),128))])])]))}}),rt={class:`grid gap-3`},it={class:`grid gap-3 xl:grid-cols-2`},at={class:`flex flex-wrap items-start justify-between gap-4`},ot={class:`min-w-0`},st={class:`mt-2 text-sm text-[color:var(--dashboard-text-soft)]`},ct={class:`text-right`},lt={class:`text-xl font-semibold text-[color:var(--dashboard-text)]`},ut={class:`text-xs text-[color:var(--dashboard-text-soft)]`},dt={class:`mt-4 grid grid-cols-2 gap-2 text-sm md:grid-cols-4`},ft={class:`mt-4`},pt=c({__name:`PackagesPanel`,props:{packageInsights:{}},setup(e){let t=e;function a(e){return[{label:`Chunks`,value:e.chunkCount},{label:`Assets`,value:e.assetCount},{label:`模块数`,value:e.moduleCount},{label:`跨包模块`,value:e.duplicateModuleCount}]}let o=x(()=>t.packageInsights.map(e=>{let t=A(e.type);return{...e,typeLabel:t,summaryText:`${t} · ${e.fileCount} 个产物 · ${e.moduleCount} 个模块`,totalBytesLabel:M(e.totalBytes),entryCountText:`${e.entryFileCount} 个 entry`,metrics:a(e)}}));return(e,t)=>(S(),_(`section`,rt,[d(`div`,it,[(S(!0),_(g,null,n(o.value,e=>(S(),_(`article`,{key:e.id,class:i(r(E)({padding:`md`}))},[d(`div`,at,[d(`div`,ot,[p(J,{"icon-name":`tab-packages`,title:e.label,description:e.typeLabel},null,8,[`title`,`description`]),d(`p`,st,C(e.summaryText),1)]),d(`div`,ct,[d(`p`,lt,C(e.totalBytesLabel),1),d(`p`,ut,C(e.entryCountText),1)])]),d(`div`,dt,[(S(!0),_(g,null,n(e.metrics,e=>(S(),f(Je,u({key:e.label},{ref_for:!0},e),null,16))),128))]),d(`div`,ft,[p(nt,{files:e.topFiles},null,8,[`files`])])],2))),128))])]))}}),mt=c({__name:`SectionNote`,props:{text:{}},setup(e){let t=te();return(n,a)=>(S(),_(`div`,{class:i(r(t))},C(e.text),3))}});function Q(e){return e.size??0}function ht(e,t){return{label:e,value:t}}function gt(e,t){return{packageId:e.id,packageLabel:e.label,packageType:e.type,file:t.file,size:Q(t),type:t.type,from:t.from,isEntry:!!t.isEntry,moduleCount:t.modules?.length??0,source:t.source}}function _t(e){return{file:e.file,size:Q(e),type:e.type,from:e.from,isEntry:!!e.isEntry,moduleCount:e.modules?.length??0}}function vt(e,t){return{packageId:t.packageId,packageLabel:e.get(t.packageId)??t.packageId,files:t.files}}function yt(e){return{sourceType:e,count:0,bytes:0}}function bt(e){let t=x(()=>new Map((e.value?.packages??[]).map(e=>[e.id,e.label]))),n=x(()=>{let t=new Map;for(let n of e.value?.packages??[])for(let e of n.files)for(let n of e.modules??[]){let e=t.get(n.id),r=n.bytes??0,i=n.originalBytes??r;if(!e){t.set(n.id,{bytes:r,originalBytes:i,sourceType:n.sourceType});continue}t.set(n.id,{bytes:Math.max(e.bytes,r),originalBytes:Math.max(e.originalBytes,i),sourceType:e.sourceType})}return t});return{summary:x(()=>{let t=e.value;if(!t)return{packageCount:0,moduleCount:0,duplicateCount:0,totalBytes:0,subpackageCount:0,entryCount:0};let n=t.packages.flatMap(e=>e.files);return{packageCount:t.packages.length,moduleCount:t.modules.length,duplicateCount:t.modules.filter(e=>e.packages.length>1).length,totalBytes:n.reduce((e,t)=>e+Q(t),0),subpackageCount:t.subPackages.length,entryCount:n.filter(e=>e.isEntry).length}}),packageTypeSummary:x(()=>{let t=new Map;for(let n of e.value?.packages??[])t.set(n.type,(t.get(n.type)??0)+1);return Array.from(t.entries(),([e,t])=>ht(e,t)).sort((e,t)=>t.value-e.value||e.label.localeCompare(t.label))}),packageInsights:x(()=>{let t=e.value;return t?t.packages.map(e=>{let n=new Set,r=0;for(let i of t.modules)i.packages.some(t=>t.packageId===e.id)&&(n.add(i.id),i.packages.length>1&&r++);let i=e.files.map(e=>_t(e)).sort((e,t)=>t.size-e.size||e.file.localeCompare(t.file)).slice(0,5);return{id:e.id,label:e.label,type:e.type,totalBytes:e.files.reduce((e,t)=>e+Q(t),0),fileCount:e.files.length,chunkCount:e.files.filter(e=>e.type===`chunk`).length,assetCount:e.files.filter(e=>e.type===`asset`).length,moduleCount:n.size,duplicateModuleCount:r,entryFileCount:e.files.filter(e=>e.isEntry).length,topFiles:i}}).sort((e,t)=>t.totalBytes-e.totalBytes||e.label.localeCompare(t.label)):[]}),largestFiles:x(()=>{let t=[];for(let n of e.value?.packages??[])for(let e of n.files)t.push(gt(n,e));return t.sort((e,t)=>t.size-e.size||e.file.localeCompare(t.file)).slice(0,18)}),duplicateModules:x(()=>{let r=e.value;return r?r.modules.filter(e=>e.packages.length>1).map(e=>{let r=n.value.get(e.id);return{id:e.id,source:e.source,sourceType:e.sourceType,packageCount:e.packages.length,bytes:r?.bytes??r?.originalBytes??0,packages:e.packages.map(e=>vt(t.value,e))}}).sort((e,t)=>t.packageCount-e.packageCount||t.bytes-e.bytes||e.source.localeCompare(t.source)):[]}),moduleSourceSummary:x(()=>{let t=new Map;for(let r of e.value?.modules??[]){let e=n.value.get(r.id),i=t.get(r.sourceType)??yt(r.sourceType);i.count+=1,i.bytes+=e?.bytes??e?.originalBytes??0,t.set(r.sourceType,i)}return[...t.values()].sort((e,t)=>t.bytes-e.bytes||t.count-e.count||e.sourceType.localeCompare(t.sourceType))}),subPackages:x(()=>e.value?.subPackages??[])}}function $(e){return e}function xt(e){let t=l(),n=v(),r=x({get(){let e=t.query.tab;return e===`packages`||e===`modules`?e:`overview`},set(e){n.replace({query:e===`overview`?{}:{tab:e}})}}),i=x(()=>e.packageInsights.value.reduce((e,t)=>e+t.chunkCount,0)),a=x(()=>e.packageInsights.value.reduce((e,t)=>e+t.assetCount,0)),o=x(()=>e.duplicateModules.value.reduce((e,t)=>e+t.bytes,0));function s(){return[$({label:`包体数量`,value:String(e.summary.value.packageCount),iconName:`metric-packages`}),$({label:`分包配置`,value:String(e.summary.value.subpackageCount),iconName:`metric-subpackages`}),$({label:`Chunk 数量`,value:String(i.value),iconName:`metric-chunks`}),$({label:`Asset 数量`,value:String(a.value),iconName:`metric-assets`}),$({label:`总产物体积`,value:M(e.summary.value.totalBytes),wide:!0,iconName:`metric-size-outline`})]}function c(){return[$({label:`源码模块`,value:String(e.summary.value.moduleCount),iconName:`metric-modules`}),$({label:`跨包复用`,value:String(e.summary.value.duplicateCount),iconName:`metric-duplicates`}),$({label:`来源类型`,value:String(e.moduleSourceSummary.value.length),iconName:`metric-sources`}),$({label:`复用体积`,value:o.value>0?M(o.value):`0 B`,iconName:`metric-copy`}),$({label:`最近刷新`,value:e.lastUpdatedAt.value,wide:!0,iconName:`metric-time`})]}function u(){return[$({label:`包体数量`,value:String(e.summary.value.packageCount),iconName:`tab-packages`}),$({label:`源码模块`,value:String(e.summary.value.moduleCount),iconName:`metric-modules`}),$({label:`跨包复用`,value:String(e.summary.value.duplicateCount),iconName:`metric-duplicates`}),$({label:`Entry 数量`,value:String(e.summary.value.entryCount),iconName:`metric-entries`}),$({label:`总产物体积`,value:M(e.summary.value.totalBytes),wide:!0,iconName:`metric-size`})]}return{activeTab:r,topCards:x(()=>r.value===`packages`?s():r.value===`modules`?c():u()),packageTypeSummary:e.packageTypeSummary}}var St={main:{fill:`#1d4ed8`,border:`#93c5fd`},subPackage:{fill:`#047857`,border:`#6ee7b7`},independent:{fill:`#b45309`,border:`#fbbf24`},virtual:{fill:`#7c3aed`,border:`#d8b4fe`}},Ct=[{itemStyle:{borderWidth:3,gapWidth:4},upperLabel:{show:!0,height:32,color:`#f8fafc`,fontWeight:`600`}},{itemStyle:{borderWidth:2,gapWidth:2}},{itemStyle:{borderWidth:1,gapWidth:1}}];function wt(e){if(!e)return``;let t=[];return e.kind===`package`?(t.push(`<strong>${e.packageLabel}</strong>`),t.push(`类型:${e.packageType}`),t.push(`产物数量:${e.fileCount}`),e.totalBytes&&t.push(`累计体积:${M(e.totalBytes)}`)):e.kind===`file`?(t.push(`<strong>${e.fileName}</strong>`),t.push(`所属:${e.packageLabel}`),t.push(`类型:${e.type===`chunk`?`代码 chunk`:`资源`} · 来源:${e.from}`),t.push(`体积:${M(e.bytes)}`),e.childCount>0&&t.push(`模块数量:${e.childCount}`)):e.kind===`module`?(t.push(`<strong>${e.source}</strong>`),t.push(`所属:${e.packageLabel} → ${e.fileName}`),t.push(`源码类型:${j(e.sourceType)}`),t.push(`模块体积:${M(e.bytes??e.originalBytes)}`),e.packageCount>1&&t.push(`跨包复用:${e.packageCount} 次`)):e.kind===`asset`&&(t.push(`<strong>${e.source}</strong>`),t.push(`所属:${e.packageLabel} → ${e.fileName}`),t.push(`资源体积:${M(e.bytes)}`)),t.join(`<br/>`)}function Tt(e,t,n,r){return{name:r.source,value:Math.max(r.bytes??r.originalBytes??1,1),meta:{kind:`module`,packageLabel:e,fileName:t,source:r.source,sourceType:r.sourceType,bytes:r.bytes,originalBytes:r.originalBytes,packageCount:n.get(r.id)??1}}}function Et(e,t,n){return{name:n.source??t,value:Math.max(n.size??1,1),meta:{kind:`asset`,packageLabel:e,fileName:t,source:n.source??t,bytes:n.size}}}function Dt(e,t,n,r,i){return{name:r.file,value:Math.max(r.size??1,1),meta:{kind:`file`,packageLabel:n.get(t)??e,fileName:r.file,from:r.from,childCount:i.length,type:r.type,bytes:r.size},children:i.length>0?i:void 0}}function Ot(e,t,n){let r=St[e.type];return{name:e.label,value:Math.max(t,1),meta:{kind:`package`,packageLabel:e.label,packageType:e.type,fileCount:e.files.length,totalBytes:t},itemStyle:{color:r.fill,borderColor:r.border},children:n}}function kt(e,t){let n=x(()=>new Map((e.value?.packages??[]).map(e=>[e.id,e.label]))),r=x(()=>new Map((e.value?.modules??[]).map(e=>[e.id,e.packages.length]))),i=x(()=>{let t=e.value;return t?t.packages.map(e=>Ot(e,e.files.reduce((e,t)=>e+(t.size??0),0),e.files.map(t=>{let i=t.type===`chunk`?(t.modules??[]).map(n=>Tt(e.label,t.file,r.value,n)):t.source?[Et(e.label,t.file,t)]:[];return Dt(e.label,e.id,n.value,t,i)}))):[]});return{treemapOption:x(()=>({backgroundColor:`transparent`,tooltip:{formatter:e=>wt(e.data?.meta),borderColor:t.value===`dark`?`rgba(148, 163, 184, 0.16)`:`rgba(71, 85, 105, 0.14)`,backgroundColor:t.value===`dark`?`rgba(15, 23, 42, 0.92)`:`rgba(255, 255, 255, 0.96)`,textStyle:{color:t.value===`dark`?`#e2e8f0`:`#0f172a`}},series:[{type:`treemap`,nodeClick:!1,roam:!1,breadcrumb:{show:!1},visibleMin:1,label:{show:!0,color:t.value===`dark`?`#f8fafc`:`#0f172a`,formatter:`{b}`},upperLabel:{show:!0},itemStyle:{borderColor:t.value===`dark`?`rgba(15, 23, 42, 0.88)`:`rgba(255, 255, 255, 0.92)`,borderWidth:2,gapWidth:2},emphasis:{itemStyle:{borderColor:t.value===`dark`?`#f8fafc`:`#0f172a`}},colorAlpha:[.94,.72],colorSaturation:[.4,.9],levels:Ct,data:i.value}]}))}}xe();var At={class:`grid gap-3`},jt={class:`grid gap-3 xl:grid-cols-[minmax(0,1fr)_minmax(18rem,0.92fr)]`},Mt={class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] p-4`},Nt={class:`mt-4 grid gap-2`},Pt={class:`grid gap-2`},Ft={class:`flex flex-col gap-2 xl:flex-row xl:items-center xl:justify-between`},It={class:`flex flex-wrap gap-2`},Lt=[`onClick`],Rt={class:`h-4.5 w-4.5`},zt={class:`flex flex-wrap items-center gap-2`},Bt={class:`flex flex-wrap items-center gap-2`},Vt=[`onClick`],Ht={class:`h-4 w-4`},Ut={class:`grid gap-3 xl:grid-cols-[minmax(0,1.05fr)_minmax(20rem,0.95fr)]`},Wt={class:`grid gap-3 lg:grid-cols-[minmax(0,0.92fr)_minmax(0,1.08fr)]`},Gt={class:`grid gap-2 sm:grid-cols-2`},Kt={class:`grid gap-2 sm:grid-cols-2`},qt={class:`grid gap-2`},Jt={class:`flex items-start justify-between gap-3`},Yt={class:`font-medium text-[color:var(--dashboard-text)]`},Xt={class:`mt-1 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},Zt={key:0},Qt={key:1,class:`grid gap-3`},$t={key:2,class:`grid gap-3`},en=c({__name:`analyze`,setup(t){be([ve,me,ge,ye,_e]);let c=o(),l,{themePreference:v,resolvedTheme:E,setThemePreference:te}=re(),{eventSummary:O,lastUpdatedAt:k,latestRuntimeEvent:A,resultRef:j,runtimeEvents:M,runtimeSourceSummary:N,updateCount:xe}=ae(),{treemapOption:P}=kt(j,E),{summary:F,packageTypeSummary:I,packageInsights:L,largestFiles:R,duplicateModules:z,moduleSourceSummary:B,subPackages:V}=bt(j),H=x(()=>z.value.slice(0,12)),U=x(()=>R.value.slice(0,10)),W=x(()=>`${xe.value} 次数据同步`),G=x(()=>E.value===`dark`?`status-dark`:`status-light`),K=x(()=>[{iconName:G.value,label:W.value},{label:k.value}]),Ce=x(()=>M.value.slice(0,3)),we=x(()=>ie(N.value).slice(0,4)),{activeTab:q,topCards:Te,packageTypeSummary:J}=xt({summary:F,packageInsights:L,packageTypeSummary:I,duplicateModules:z,moduleSourceSummary:B,lastUpdatedAt:k});function Y(){l?.resize()}function X(){l?.dispose(),l=void 0}function Ee(e){c.value=e instanceof HTMLDivElement?e:void 0}async function Z(){if(q.value!==`overview`){X();return}await ee(),c.value&&(l||=he(c.value,E.value===`dark`?`dark`:void 0,{renderer:`canvas`}),l.setOption(P.value,!0),l.resize())}return h(P,e=>{l&&l.setOption(e,!0)},{deep:!0}),h(q,()=>{Z()}),h(E,async()=>{l&&c.value&&X(),await Z()}),e(()=>{window.addEventListener(`resize`,Y),Z()}),s(()=>{window.removeEventListener(`resize`,Y),X()}),(e,t)=>(S(),_(`div`,At,[r(j)?y(``,!0):(S(),f(D,{key:0,eyebrow:`Analyze`,title:`等待分析数据注入`,description:`当前路由已经可独立打开,但还没有接收到来自 CLI 的 analyze payload。你可以先从工作台查看壳子结构,或者通过命令启动真实数据联调。`,"icon-name":`hero-commands`,tone:`strong`,padding:`header`},{default:a(()=>[d(`div`,jt,[d(`div`,Mt,[t[0]||=d(`p`,{class:`text-[11px] uppercase tracking-[0.24em] text-[color:var(--dashboard-text-soft)]`},` recommended commands `,-1),d(`div`,Nt,[(S(),_(g,null,n([`weapp-vite analyze`,`weapp-vite build --ui`,`weapp-vite dev --ui`],e=>d(`code`,{key:e,class:`rounded-xl bg-slate-950 px-3 py-3 text-xs text-slate-100 dark:bg-slate-900`},C(e),1)),64))])]),d(`div`,Pt,[p(r(b),{class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-4 py-4 transition hover:border-[color:var(--dashboard-border-strong)] hover:bg-[color:var(--dashboard-panel)]`,to:`/`},{default:a(()=>[...t[1]||=[d(`p`,{class:`font-medium`},` 返回工作台 `,-1),d(`p`,{class:`mt-1 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},` 继续查看应用壳子、命令面板和当前增强节奏。 `,-1)]]),_:1}),p(r(b),{class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-4 py-4 transition hover:border-[color:var(--dashboard-border-strong)] hover:bg-[color:var(--dashboard-panel)]`,to:`/activity`},{default:a(()=>[...t[2]||=[d(`p`,{class:`font-medium`},` 查看活动流 `,-1),d(`p`,{class:`mt-1 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},` 后续可以在这里观察真实的构建事件和诊断状态。 `,-1)]]),_:1})])])]),_:1})),d(`section`,Ft,[d(`nav`,It,[(S(!0),_(g,null,n(r(ce),e=>(S(),_(`button`,{key:e.key,class:i(r(T)({kind:`nav`,active:r(q)===e.key})),onClick:t=>q.value=e.key},[d(`span`,Rt,[p(w,{name:e.iconName},null,8,[`name`])]),m(` `+C(e.label),1)],10,Lt))),128))]),d(`div`,zt,[d(`div`,Bt,[(S(!0),_(g,null,n(r(se),e=>(S(),_(`button`,{key:e.value,class:i(r(T)({kind:`theme`,active:r(v)===e.value})),onClick:t=>r(te)(e.value)},[d(`span`,Ht,[p(w,{name:e.iconName},null,8,[`name`])]),m(` `+C(e.label),1)],10,Vt))),128))]),(S(!0),_(g,null,n(K.value,e=>(S(),f(ne,u({key:e.label},{ref_for:!0},e,{uppercase:``}),null,16))),128))])]),r(j)?(S(),_(g,{key:1},[d(`section`,Ut,[p(D,{eyebrow:`Runtime Context`,title:`分析视图关联的运行上下文`,description:`treemap 和包体指标不再是孤立结果,这里会同步展示最近的运行事件,让你知道这份分析结果处在什么执行背景里。`,"icon-name":`metric-time`},{default:a(()=>[d(`div`,Wt,[p(fe,{event:r(A),eyebrow:`latest event`,"duration-text":r(A)?.durationMs===void 0?void 0:`最近一次耗时: ${r(oe)(r(A).durationMs)}`},{default:a(()=>[p(r(b),{class:`mt-4 inline-flex rounded-full border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel)] px-3 py-1.5 text-xs font-medium text-[color:var(--dashboard-text)] transition hover:border-[color:var(--dashboard-border-strong)]`,to:`/activity`},{default:a(()=>[...t[3]||=[m(` 打开事件控制台 `,-1)]]),_:1})]),_:1},8,[`event`,`duration-text`]),d(`div`,Gt,[(S(!0),_(g,null,n(r(O),e=>(S(),f(pe,u({key:e.label},{ref_for:!0},e),null,16))),128))])])]),_:1}),p(D,{eyebrow:`Source Signals`,title:`事件来源摘要`,description:`分析页直接按来源折叠运行事件,方便判断当前这份 payload 主要来自哪条链路。`,"icon-name":`hero-system`},{default:a(()=>[d(`div`,Kt,[(S(!0),_(g,null,n(we.value,e=>(S(),f(de,{key:e.source,source:e.source,count:e.count,"error-count":e.errorCount,"average-duration":e.averageDuration,"count-label":`条事件`},null,8,[`source`,`count`,`error-count`,`average-duration`]))),128))])]),_:1}),p(D,{eyebrow:`Recent Feed`,title:`最近事件样本`,description:`这些事件是分析页最直接的上游线索。后面如果某次 analyze 或 build 结果异常,这里会比看全量时间线更快定位。`,"icon-name":`hero-commands`},{default:a(()=>[d(`ul`,qt,[(S(!0),_(g,null,n(Ce.value,t=>(S(),_(`li`,{key:t.id,class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-4 py-3`},[d(`div`,Jt,[d(`div`,null,[d(`p`,Yt,C(t.title),1),d(`p`,Xt,C(t.detail),1),p(le,{class:`mt-2`},{default:a(()=>[m(C(e.formatRuntimeEventMeta(t)),1)]),_:2},1024)]),p(ue,{label:e.formatRuntimeEventLevel(t.level),tone:e.getRuntimeEventBadgeTone(t.level)},null,8,[`label`,`tone`])])]))),128))])]),_:1})]),p(Se,{cards:r(Te),"package-type-summary":r(J)},null,8,[`cards`,`package-type-summary`]),r(q)===`overview`?(S(),_(`section`,Zt,[p(Ge,{"bind-chart-ref":Ee,"visible-largest-files":U.value,"sub-packages":r(V)},null,8,[`visible-largest-files`,`sub-packages`])])):r(q)===`packages`?(S(),_(`section`,Qt,[p(mt,{text:`包与产物视图优先展示每个包的结构和最大文件,支持在一个屏幕内快速对比。`}),p(pt,{"package-insights":r(L)},null,8,[`package-insights`])])):(S(),_(`section`,$t,[p(mt,{text:`模块与复用视图聚焦跨包重复、来源分布与文件样本。`}),p(Ie,{"visible-duplicate-modules":H.value,"module-source-summary":r(B),"visible-largest-files":U.value},null,8,[`visible-duplicate-modules`,`module-source-summary`,`visible-largest-files`])]))],64)):y(``,!0)]))}});export{en as default};
1
+ import{C as e,D as t,E as n,F as r,I as i,M as a,P as o,S as s,_ as c,a as l,b as u,d,f,g as p,h as m,j as h,l as g,m as _,o as v,p as y,t as b,u as x,w as S,x as ee,z as C}from"./vue.js";import{_ as w,f as T,h as E,l as D,m as te,u as O}from"./shell.js";import{_ as ne,c as k,d as A,g as j,i as re,l as M,n as ie,r as ae,t as oe,u as se,v as ce}from"./index.js";import{a as le,i as ue,n as de,o as N,r as fe,t as pe}from"./AppStatCard.js";import{a as me,c as he,i as ge,n as _e,o as ve,r as ye,s as be,t as xe}from"./echarts.js";var P={class:`grid gap-2.5 md:grid-cols-2 xl:grid-cols-6`},F={class:`flex items-start justify-between gap-3`},I={class:`text-[11px] uppercase tracking-[0.22em] text-[color:var(--dashboard-text-soft)]`},L={class:`mt-2 text-2xl font-semibold md:text-[1.65rem]`},R={class:`h-5 w-5`},z={key:0,class:`mt-3 flex flex-wrap gap-1.5`},Se=c({__name:`DashboardMetricGrid`,props:{cards:{},packageTypeSummary:{}},setup(e){let t=e;function a(e){return[E({padding:`md`}),e.wide?`xl:col-span-2`:`xl:col-span-1`]}let o=x(()=>t.cards.map(e=>({...e,packageTypeTags:e.label===`总产物体积`?t.packageTypeSummary.map(e=>({label:A(e.label),value:String(e.value)})):[]})));return(e,t)=>(S(),_(`section`,P,[(S(!0),_(g,null,n(o.value,e=>(S(),_(`article`,{key:e.label,class:i(a(e))},[d(`div`,F,[d(`div`,null,[d(`p`,I,C(e.label),1),d(`p`,L,C(e.value),1)]),d(`span`,{class:i(r(O)({size:`lg`}))},[d(`span`,R,[p(w,{name:e.iconName},null,8,[`name`])])],2)]),e.packageTypeTags.length>0?(S(),_(`div`,z,[(S(!0),_(g,null,n(e.packageTypeTags,e=>(S(),_(`span`,{key:e.label,class:`rounded-full border border-[color:var(--dashboard-border-strong)] bg-[color:var(--dashboard-accent-soft)] px-3 py-1 text-xs text-[color:var(--dashboard-text)]`},C(e.label)+` `+C(e.value),1))),128))])):y(``,!0)],2))),128))]))}}),B={class:`rounded-xl border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-3 py-2.5`},V={class:`flex items-start justify-between gap-3`},H={class:`min-w-0`},U={class:`mt-1 text-xs text-[color:var(--dashboard-text-soft)]`},W={key:0,class:`whitespace-nowrap font-medium text-[color:var(--dashboard-accent)]`},G=c({__name:`AppCompactListItem`,props:{title:{},meta:{},value:{},monoTitle:{type:Boolean}},setup(e){return(t,n)=>(S(),_(`li`,B,[d(`div`,V,[d(`div`,H,[d(`p`,{class:i([`font-medium`,e.monoTitle?`truncate font-mono text-xs text-[color:var(--dashboard-text)]`:`truncate text-[color:var(--dashboard-text)]`])},C(e.title),3),d(`p`,U,C(e.meta),1)]),e.value?(S(),_(`span`,W,C(e.value),1)):y(``,!0)])]))}}),K={class:`flex items-center justify-between gap-3`},Ce={class:`flex items-center gap-2`},we={class:`h-5 w-5`},q={class:`text-lg font-semibold text-[color:var(--dashboard-text)]`},Te={key:0,class:`text-xs text-[color:var(--dashboard-text-soft)] md:text-sm`},J=c({__name:`AppPanelHeader`,props:{iconName:{},title:{},description:{}},setup(e){let n=O();return(a,o)=>(S(),_(`div`,K,[d(`div`,Ce,[d(`span`,{class:i(r(n))},[d(`span`,we,[p(w,{name:e.iconName},null,8,[`name`])])],2),d(`div`,null,[d(`h2`,q,C(e.title),1),e.description?(S(),_(`p`,Te,C(e.description),1)):y(``,!0)])]),t(a.$slots,`meta`)]))}}),Y={class:`rounded-xl border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] p-3.5`},X={class:`flex flex-wrap items-start justify-between gap-3`},Ee={class:`min-w-0`},Z={class:`mt-1 text-xs text-[color:var(--dashboard-text-soft)]`},De={key:0,class:`font-medium text-[color:var(--dashboard-accent)]`},Oe=c({__name:`AppSummaryValueCard`,props:{title:{},meta:{},value:{},breakTitle:{type:Boolean}},setup(e){return(n,r)=>(S(),_(`article`,Y,[d(`div`,X,[d(`div`,Ee,[d(`p`,{class:i([`font-medium text-[color:var(--dashboard-text)]`,e.breakTitle?`break-all`:void 0])},C(e.title),3),d(`p`,Z,C(e.meta),1)]),e.value?(S(),_(`p`,De,C(e.value),1)):y(``,!0)]),t(n.$slots,`default`)]))}}),ke={class:`grid gap-3 xl:grid-cols-[minmax(0,1.24fr)_minmax(0,0.76fr)]`},Ae={key:0,class:`mt-4 space-y-2.5`},je={class:`mt-3 space-y-1.5 text-xs text-[color:var(--dashboard-text-muted)]`},Me={class:`font-medium text-[color:var(--dashboard-text)]`},Ne={class:`flex flex-col gap-3`},Pe={class:`mt-4 space-y-2.5`},Fe={class:`mt-4 space-y-2.5 text-sm text-[color:var(--dashboard-text-muted)]`},Ie=c({__name:`ModulesPanel`,props:{visibleDuplicateModules:{},moduleSourceSummary:{},visibleLargestFiles:{}},setup(e){let t=e;function o(e){return{title:e.source,meta:`${j(e.sourceType)} · ${e.packageCount} 个包 · ${M(e.bytes)}`}}function s(e){return{title:j(e.sourceType),meta:`${e.count} 个模块`,value:M(e.bytes)}}function c(e){return{title:e.file,meta:`${e.packageLabel} · ${k(e.from)} · ${e.moduleCount} 模块`}}let l=x(()=>t.visibleDuplicateModules.map(e=>({key:e.id,packages:e.packages,...o(e)}))),h=x(()=>t.moduleSourceSummary.map(e=>({key:e.sourceType,...s(e)}))),v=x(()=>t.visibleLargestFiles.slice(0,6).map(e=>({key:`${e.packageId}:${e.file}`,...c(e)})));return(e,t)=>(S(),_(`section`,ke,[d(`div`,{class:i(r(E)({padding:`md`}))},[p(J,{"icon-name":`duplicate-modules`,title:`重复模块`,description:`优先看被多个包重复包含的源码与依赖。`}),l.value.length?(S(),_(`div`,Ae,[(S(!0),_(g,null,n(l.value,e=>(S(),f(Oe,u({key:e.key},{ref_for:!0},e,{"break-title":``}),{default:a(()=>[d(`ul`,je,[(S(!0),_(g,null,n(e.packages,n=>(S(),_(`li`,{key:`${e.key}:${n.packageId}`},[d(`span`,Me,C(n.packageLabel),1),t[0]||=d(`span`,{class:`text-[color:var(--dashboard-text-soft)]`},` · `,-1),d(`span`,null,C(n.files.join(`、`)),1)]))),128))])]),_:2},1040))),128))])):(S(),f(N,{key:1,class:`mt-4`},{default:a(()=>[...t[1]||=[m(` 当前构建未检测到跨包重复模块。 `,-1)]]),_:1}))],2),d(`div`,Ne,[d(`section`,{class:i(r(E)({padding:`md`}))},[p(J,{"icon-name":`module-sources`,title:`模块来源`}),d(`div`,Pe,[(S(!0),_(g,null,n(h.value,e=>(S(),f(Oe,u({key:e.key},{ref_for:!0},e),null,16))),128))])],2),d(`section`,{class:i(r(E)({padding:`md`}))},[p(J,{"icon-name":`file-samples`,title:`文件样本`}),d(`ul`,Fe,[(S(!0),_(g,null,n(v.value,e=>(S(),f(G,u({key:e.key},{ref_for:!0},e,{"mono-title":``}),null,16))),128))])],2)])]))}}),Le=`Treemap`,Re=`从包体到文件再到模块,直接定位体积热点。`,ze=`overview`,Be=c({__name:`TreemapCard`,props:{bindChartRef:{type:Function}},setup(e){function t(){return T({kind:`badge`})}return(n,o)=>(S(),_(`div`,{class:i(r(E)({padding:`sm`}))},[p(J,{class:`mb-2 px-2`,"icon-name":`treemap`,title:Le,description:Re},{meta:a(()=>[d(`span`,{class:i(t())},C(ze),2)]),_:1}),d(`div`,{ref:e.bindChartRef,class:`h-[min(58vh,36rem)] min-h-[21rem] rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] p-2`},null,512)],2))}}),Ve={class:`grid gap-3 xl:grid-cols-[minmax(0,1.55fr)_minmax(21rem,0.75fr)] xl:items-stretch`},He={class:`grid gap-3 xl:h-[min(58vh,36rem)] xl:grid-rows-[minmax(0,1fr)_minmax(0,0.82fr)]`},Ue={class:`mt-3 grid h-[calc(100%-3.5rem)] min-h-0 gap-2 overflow-y-auto pr-1 text-sm xl:grid-cols-1`},We={class:`mt-3 grid h-[calc(100%-3.5rem)] min-h-0 gap-2 overflow-y-auto pr-1 text-sm text-[color:var(--dashboard-text-muted)]`},Ge=c({__name:`OverviewPanel`,props:{bindChartRef:{type:Function},visibleLargestFiles:{},subPackages:{}},setup(e){let t=e;function o(e){return{title:e.file,meta:`${e.packageLabel} · ${A(e.packageType)} · ${e.type}`,value:M(e.size)}}function s(e){return{title:e.root,meta:`${e.name?`别名 ${e.name}`:`未设置别名`} · ${e.independent?`独立分包`:`普通分包`}`}}let c=x(()=>t.visibleLargestFiles.map(e=>({key:`${e.packageId}:${e.file}`,...o(e)}))),l=x(()=>t.subPackages.map(e=>({key:e.root,...s(e)}))),h=x(()=>l.value.length>0);return(t,o)=>(S(),_(`section`,Ve,[p(Be,{"bind-chart-ref":e.bindChartRef},null,8,[`bind-chart-ref`]),d(`div`,He,[d(`section`,{class:i([r(E)({padding:`md`}),`min-h-0 overflow-hidden`])},[p(J,{"icon-name":`top-files`,title:`Top Files`,description:`最大体积样本`},{meta:a(()=>[...o[0]||=[d(`span`,{class:`text-[11px] uppercase tracking-[0.2em] text-[color:var(--dashboard-text-soft)]`},`Top 10`,-1)]]),_:1}),d(`ol`,Ue,[(S(!0),_(g,null,n(c.value,e=>(S(),f(G,u({key:e.key},{ref_for:!0},e),null,16))),128))])],2),d(`section`,{class:i([r(E)({padding:`md`}),`min-h-0 overflow-hidden`])},[p(J,{"icon-name":`subpackages`,title:`Subpackages`,description:`分包根目录与模式`},{meta:a(()=>[...o[1]||=[d(`span`,{class:`text-[11px] uppercase tracking-[0.2em] text-[color:var(--dashboard-text-soft)]`},`Roots`,-1)]]),_:1}),d(`ul`,We,[h.value?y(``,!0):(S(),f(N,{key:0,as:`li`,compact:``},{default:a(()=>[...o[2]||=[m(` 当前构建没有配置分包。 `,-1)]]),_:1})),(S(!0),_(g,null,n(l.value,e=>(S(),f(G,u({key:e.key},{ref_for:!0},e),null,16))),128))])],2)])]))}}),Ke={class:`mt-1.5 text-base font-semibold text-[color:var(--dashboard-text)]`},qe=`rounded-xl border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] p-3`,Je=c({__name:`AppMetricTile`,props:{label:{},value:{}},setup(e){return(t,n)=>(S(),_(`div`,{class:i(qe)},[p(le,null,{default:a(()=>[m(C(e.label),1)]),_:1}),d(`p`,Ke,C(e.value),1)]))}}),Ye={class:`overflow-hidden rounded-xl border border-[color:var(--dashboard-border)]`},Xe={class:`min-w-full divide-y divide-[color:var(--dashboard-border)] text-left text-sm`},Ze={class:`divide-y divide-[color:var(--dashboard-border)] text-[color:var(--dashboard-text-muted)]`},Qe={class:`px-3 py-2 font-mono text-xs text-[color:var(--dashboard-text)]`},$e={class:`px-3 py-2`},et={class:`px-3 py-2`},tt={class:`px-3 py-2 font-medium text-[color:var(--dashboard-text)]`},nt=c({__name:`AppPackageFileTable`,props:{files:{}},setup(e){let t=e;function r(e){return{file:e.file,type:e.type,fromLabel:k(e.from),sizeLabel:M(e.size)}}let i=x(()=>t.files.map(e=>r(e)));return(e,t)=>(S(),_(`div`,Ye,[d(`table`,Xe,[t[0]||=d(`thead`,{class:`bg-[color:var(--dashboard-panel-muted)] text-[color:var(--dashboard-text-soft)]`},[d(`tr`,null,[d(`th`,{class:`px-3 py-2 text-[11px] font-medium uppercase tracking-[0.18em]`},` 文件 `),d(`th`,{class:`px-3 py-2 text-[11px] font-medium uppercase tracking-[0.18em]`},` 类型 `),d(`th`,{class:`px-3 py-2 text-[11px] font-medium uppercase tracking-[0.18em]`},` 来源 `),d(`th`,{class:`px-3 py-2 text-[11px] font-medium uppercase tracking-[0.18em]`},` 体积 `)])],-1),d(`tbody`,Ze,[(S(!0),_(g,null,n(i.value,e=>(S(),_(`tr`,{key:e.file},[d(`td`,Qe,C(e.file),1),d(`td`,$e,C(e.type),1),d(`td`,et,C(e.fromLabel),1),d(`td`,tt,C(e.sizeLabel),1)]))),128))])])]))}}),rt={class:`grid gap-3`},it={class:`grid gap-3 xl:grid-cols-2`},at={class:`flex flex-wrap items-start justify-between gap-4`},ot={class:`min-w-0`},st={class:`mt-2 text-sm text-[color:var(--dashboard-text-soft)]`},ct={class:`text-right`},lt={class:`text-xl font-semibold text-[color:var(--dashboard-text)]`},ut={class:`text-xs text-[color:var(--dashboard-text-soft)]`},dt={class:`mt-4 grid grid-cols-2 gap-2 text-sm md:grid-cols-4`},ft={class:`mt-4`},pt=c({__name:`PackagesPanel`,props:{packageInsights:{}},setup(e){let t=e;function a(e){return[{label:`Chunks`,value:e.chunkCount},{label:`Assets`,value:e.assetCount},{label:`模块数`,value:e.moduleCount},{label:`跨包模块`,value:e.duplicateModuleCount}]}let o=x(()=>t.packageInsights.map(e=>{let t=A(e.type);return{...e,typeLabel:t,summaryText:`${t} · ${e.fileCount} 个产物 · ${e.moduleCount} 个模块`,totalBytesLabel:M(e.totalBytes),entryCountText:`${e.entryFileCount} 个 entry`,metrics:a(e)}}));return(e,t)=>(S(),_(`section`,rt,[d(`div`,it,[(S(!0),_(g,null,n(o.value,e=>(S(),_(`article`,{key:e.id,class:i(r(E)({padding:`md`}))},[d(`div`,at,[d(`div`,ot,[p(J,{"icon-name":`tab-packages`,title:e.label,description:e.typeLabel},null,8,[`title`,`description`]),d(`p`,st,C(e.summaryText),1)]),d(`div`,ct,[d(`p`,lt,C(e.totalBytesLabel),1),d(`p`,ut,C(e.entryCountText),1)])]),d(`div`,dt,[(S(!0),_(g,null,n(e.metrics,e=>(S(),f(Je,u({key:e.label},{ref_for:!0},e),null,16))),128))]),d(`div`,ft,[p(nt,{files:e.topFiles},null,8,[`files`])])],2))),128))])]))}}),mt=c({__name:`SectionNote`,props:{text:{}},setup(e){let t=te();return(n,a)=>(S(),_(`div`,{class:i(r(t))},C(e.text),3))}});function Q(e){return e.size??0}function ht(e,t){return{label:e,value:t}}function gt(e,t){return{packageId:e.id,packageLabel:e.label,packageType:e.type,file:t.file,size:Q(t),type:t.type,from:t.from,isEntry:!!t.isEntry,moduleCount:t.modules?.length??0,source:t.source}}function _t(e){return{file:e.file,size:Q(e),type:e.type,from:e.from,isEntry:!!e.isEntry,moduleCount:e.modules?.length??0}}function vt(e,t){return{packageId:t.packageId,packageLabel:e.get(t.packageId)??t.packageId,files:t.files}}function yt(e){return{sourceType:e,count:0,bytes:0}}function bt(e){let t=x(()=>new Map((e.value?.packages??[]).map(e=>[e.id,e.label]))),n=x(()=>{let t=new Map;for(let n of e.value?.packages??[])for(let e of n.files)for(let n of e.modules??[]){let e=t.get(n.id),r=n.bytes??0,i=n.originalBytes??r;if(!e){t.set(n.id,{bytes:r,originalBytes:i,sourceType:n.sourceType});continue}t.set(n.id,{bytes:Math.max(e.bytes,r),originalBytes:Math.max(e.originalBytes,i),sourceType:e.sourceType})}return t});return{summary:x(()=>{let t=e.value;if(!t)return{packageCount:0,moduleCount:0,duplicateCount:0,totalBytes:0,subpackageCount:0,entryCount:0};let n=t.packages.flatMap(e=>e.files);return{packageCount:t.packages.length,moduleCount:t.modules.length,duplicateCount:t.modules.filter(e=>e.packages.length>1).length,totalBytes:n.reduce((e,t)=>e+Q(t),0),subpackageCount:t.subPackages.length,entryCount:n.filter(e=>e.isEntry).length}}),packageTypeSummary:x(()=>{let t=new Map;for(let n of e.value?.packages??[])t.set(n.type,(t.get(n.type)??0)+1);return Array.from(t.entries(),([e,t])=>ht(e,t)).sort((e,t)=>t.value-e.value||e.label.localeCompare(t.label))}),packageInsights:x(()=>{let t=e.value;return t?t.packages.map(e=>{let n=new Set,r=0;for(let i of t.modules)i.packages.some(t=>t.packageId===e.id)&&(n.add(i.id),i.packages.length>1&&r++);let i=e.files.map(e=>_t(e)).sort((e,t)=>t.size-e.size||e.file.localeCompare(t.file)).slice(0,5);return{id:e.id,label:e.label,type:e.type,totalBytes:e.files.reduce((e,t)=>e+Q(t),0),fileCount:e.files.length,chunkCount:e.files.filter(e=>e.type===`chunk`).length,assetCount:e.files.filter(e=>e.type===`asset`).length,moduleCount:n.size,duplicateModuleCount:r,entryFileCount:e.files.filter(e=>e.isEntry).length,topFiles:i}}).sort((e,t)=>t.totalBytes-e.totalBytes||e.label.localeCompare(t.label)):[]}),largestFiles:x(()=>{let t=[];for(let n of e.value?.packages??[])for(let e of n.files)t.push(gt(n,e));return t.sort((e,t)=>t.size-e.size||e.file.localeCompare(t.file)).slice(0,18)}),duplicateModules:x(()=>{let r=e.value;return r?r.modules.filter(e=>e.packages.length>1).map(e=>{let r=n.value.get(e.id);return{id:e.id,source:e.source,sourceType:e.sourceType,packageCount:e.packages.length,bytes:r?.bytes??r?.originalBytes??0,packages:e.packages.map(e=>vt(t.value,e))}}).sort((e,t)=>t.packageCount-e.packageCount||t.bytes-e.bytes||e.source.localeCompare(t.source)):[]}),moduleSourceSummary:x(()=>{let t=new Map;for(let r of e.value?.modules??[]){let e=n.value.get(r.id),i=t.get(r.sourceType)??yt(r.sourceType);i.count+=1,i.bytes+=e?.bytes??e?.originalBytes??0,t.set(r.sourceType,i)}return[...t.values()].sort((e,t)=>t.bytes-e.bytes||t.count-e.count||e.sourceType.localeCompare(t.sourceType))}),subPackages:x(()=>e.value?.subPackages??[])}}function $(e){return e}function xt(e){let t=l(),n=v(),r=x({get(){let e=t.query.tab;return e===`packages`||e===`modules`?e:`overview`},set(e){n.replace({query:e===`overview`?{}:{tab:e}})}}),i=x(()=>e.packageInsights.value.reduce((e,t)=>e+t.chunkCount,0)),a=x(()=>e.packageInsights.value.reduce((e,t)=>e+t.assetCount,0)),o=x(()=>e.duplicateModules.value.reduce((e,t)=>e+t.bytes,0));function s(){return[$({label:`包体数量`,value:String(e.summary.value.packageCount),iconName:`metric-packages`}),$({label:`分包配置`,value:String(e.summary.value.subpackageCount),iconName:`metric-subpackages`}),$({label:`Chunk 数量`,value:String(i.value),iconName:`metric-chunks`}),$({label:`Asset 数量`,value:String(a.value),iconName:`metric-assets`}),$({label:`总产物体积`,value:M(e.summary.value.totalBytes),wide:!0,iconName:`metric-size-outline`})]}function c(){return[$({label:`源码模块`,value:String(e.summary.value.moduleCount),iconName:`metric-modules`}),$({label:`跨包复用`,value:String(e.summary.value.duplicateCount),iconName:`metric-duplicates`}),$({label:`来源类型`,value:String(e.moduleSourceSummary.value.length),iconName:`metric-sources`}),$({label:`复用体积`,value:o.value>0?M(o.value):`0 B`,iconName:`metric-copy`}),$({label:`最近刷新`,value:e.lastUpdatedAt.value,wide:!0,iconName:`metric-time`})]}function u(){return[$({label:`包体数量`,value:String(e.summary.value.packageCount),iconName:`tab-packages`}),$({label:`源码模块`,value:String(e.summary.value.moduleCount),iconName:`metric-modules`}),$({label:`跨包复用`,value:String(e.summary.value.duplicateCount),iconName:`metric-duplicates`}),$({label:`Entry 数量`,value:String(e.summary.value.entryCount),iconName:`metric-entries`}),$({label:`总产物体积`,value:M(e.summary.value.totalBytes),wide:!0,iconName:`metric-size`})]}return{activeTab:r,topCards:x(()=>r.value===`packages`?s():r.value===`modules`?c():u()),packageTypeSummary:e.packageTypeSummary}}var St={main:{fill:`#1d4ed8`,border:`#93c5fd`},subPackage:{fill:`#047857`,border:`#6ee7b7`},independent:{fill:`#b45309`,border:`#fbbf24`},virtual:{fill:`#7c3aed`,border:`#d8b4fe`}},Ct=[{itemStyle:{borderWidth:3,gapWidth:4},upperLabel:{show:!0,height:32,color:`#f8fafc`,fontWeight:`600`}},{itemStyle:{borderWidth:2,gapWidth:2}},{itemStyle:{borderWidth:1,gapWidth:1}}];function wt(e){if(!e)return``;let t=[];return e.kind===`package`?(t.push(`<strong>${e.packageLabel}</strong>`),t.push(`类型:${e.packageType}`),t.push(`产物数量:${e.fileCount}`),e.totalBytes&&t.push(`累计体积:${M(e.totalBytes)}`)):e.kind===`file`?(t.push(`<strong>${e.fileName}</strong>`),t.push(`所属:${e.packageLabel}`),t.push(`类型:${e.type===`chunk`?`代码 chunk`:`资源`} · 来源:${e.from}`),t.push(`体积:${M(e.bytes)}`),e.childCount>0&&t.push(`模块数量:${e.childCount}`)):e.kind===`module`?(t.push(`<strong>${e.source}</strong>`),t.push(`所属:${e.packageLabel} → ${e.fileName}`),t.push(`源码类型:${j(e.sourceType)}`),t.push(`模块体积:${M(e.bytes??e.originalBytes)}`),e.packageCount>1&&t.push(`跨包复用:${e.packageCount} 次`)):e.kind===`asset`&&(t.push(`<strong>${e.source}</strong>`),t.push(`所属:${e.packageLabel} → ${e.fileName}`),t.push(`资源体积:${M(e.bytes)}`)),t.join(`<br/>`)}function Tt(e,t,n,r){return{name:r.source,value:Math.max(r.bytes??r.originalBytes??1,1),meta:{kind:`module`,packageLabel:e,fileName:t,source:r.source,sourceType:r.sourceType,bytes:r.bytes,originalBytes:r.originalBytes,packageCount:n.get(r.id)??1}}}function Et(e,t,n){return{name:n.source??t,value:Math.max(n.size??1,1),meta:{kind:`asset`,packageLabel:e,fileName:t,source:n.source??t,bytes:n.size}}}function Dt(e,t,n,r,i){return{name:r.file,value:Math.max(r.size??1,1),meta:{kind:`file`,packageLabel:n.get(t)??e,fileName:r.file,from:r.from,childCount:i.length,type:r.type,bytes:r.size},children:i.length>0?i:void 0}}function Ot(e,t,n){let r=St[e.type];return{name:e.label,value:Math.max(t,1),meta:{kind:`package`,packageLabel:e.label,packageType:e.type,fileCount:e.files.length,totalBytes:t},itemStyle:{color:r.fill,borderColor:r.border},children:n}}function kt(e,t){let n=x(()=>new Map((e.value?.packages??[]).map(e=>[e.id,e.label]))),r=x(()=>new Map((e.value?.modules??[]).map(e=>[e.id,e.packages.length]))),i=x(()=>{let t=e.value;return t?t.packages.map(e=>Ot(e,e.files.reduce((e,t)=>e+(t.size??0),0),e.files.map(t=>{let i=t.type===`chunk`?(t.modules??[]).map(n=>Tt(e.label,t.file,r.value,n)):t.source?[Et(e.label,t.file,t)]:[];return Dt(e.label,e.id,n.value,t,i)}))):[]});return{treemapOption:x(()=>({backgroundColor:`transparent`,tooltip:{formatter:e=>wt(e.data?.meta),borderColor:t.value===`dark`?`rgba(148, 163, 184, 0.16)`:`rgba(71, 85, 105, 0.14)`,backgroundColor:t.value===`dark`?`rgba(15, 23, 42, 0.92)`:`rgba(255, 255, 255, 0.96)`,textStyle:{color:t.value===`dark`?`#e2e8f0`:`#0f172a`}},series:[{type:`treemap`,nodeClick:!1,roam:!1,breadcrumb:{show:!1},visibleMin:1,label:{show:!0,color:t.value===`dark`?`#f8fafc`:`#0f172a`,formatter:`{b}`},upperLabel:{show:!0},itemStyle:{borderColor:t.value===`dark`?`rgba(15, 23, 42, 0.88)`:`rgba(255, 255, 255, 0.92)`,borderWidth:2,gapWidth:2},emphasis:{itemStyle:{borderColor:t.value===`dark`?`#f8fafc`:`#0f172a`}},colorAlpha:[.94,.72],colorSaturation:[.4,.9],levels:Ct,data:i.value}]}))}}xe();var At={class:`grid gap-3`},jt={class:`grid gap-3 xl:grid-cols-[minmax(0,1fr)_minmax(18rem,0.92fr)]`},Mt={class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] p-4`},Nt={class:`mt-4 grid gap-2`},Pt={class:`grid gap-2`},Ft={class:`flex flex-col gap-2 xl:flex-row xl:items-center xl:justify-between`},It={class:`flex flex-wrap gap-2`},Lt=[`onClick`],Rt={class:`h-4.5 w-4.5`},zt={class:`flex flex-wrap items-center gap-2`},Bt={class:`flex flex-wrap items-center gap-2`},Vt=[`onClick`],Ht={class:`h-4 w-4`},Ut={class:`grid gap-3 xl:grid-cols-[minmax(0,1.05fr)_minmax(20rem,0.95fr)]`},Wt={class:`grid gap-3 lg:grid-cols-[minmax(0,0.92fr)_minmax(0,1.08fr)]`},Gt={class:`grid gap-2 sm:grid-cols-2`},Kt={class:`grid gap-2 sm:grid-cols-2`},qt={class:`grid gap-2`},Jt={class:`flex items-start justify-between gap-3`},Yt={class:`font-medium text-[color:var(--dashboard-text)]`},Xt={class:`mt-1 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},Zt={key:0},Qt={key:1,class:`grid gap-3`},$t={key:2,class:`grid gap-3`},en=c({__name:`analyze`,setup(t){be([ve,me,ge,ye,_e]);let c=o(),l,{themePreference:v,resolvedTheme:E,setThemePreference:te}=ne(),{eventSummary:O,lastUpdatedAt:k,latestRuntimeEvent:A,resultRef:j,runtimeEvents:M,runtimeSourceSummary:N,updateCount:xe}=ae(),{treemapOption:P}=kt(j,E),{summary:F,packageTypeSummary:I,packageInsights:L,largestFiles:R,duplicateModules:z,moduleSourceSummary:B,subPackages:V}=bt(j),H=x(()=>z.value.slice(0,12)),U=x(()=>R.value.slice(0,10)),W=x(()=>`${xe.value} 次数据同步`),G=x(()=>E.value===`dark`?`status-dark`:`status-light`),K=x(()=>[{iconName:G.value,label:W.value},{label:k.value}]),Ce=x(()=>M.value.slice(0,3)),we=x(()=>re(N.value).slice(0,4)),{activeTab:q,topCards:Te,packageTypeSummary:J}=xt({summary:F,packageInsights:L,packageTypeSummary:I,duplicateModules:z,moduleSourceSummary:B,lastUpdatedAt:k});function Y(){l?.resize()}function X(){l?.dispose(),l=void 0}function Ee(e){c.value=e instanceof HTMLDivElement?e:void 0}async function Z(){if(q.value!==`overview`){X();return}await ee(),c.value&&(l||=he(c.value,E.value===`dark`?`dark`:void 0,{renderer:`canvas`}),l.setOption(P.value,!0),l.resize())}return h(P,e=>{l&&l.setOption(e,!0)},{deep:!0}),h(q,()=>{Z()}),h(E,async()=>{l&&c.value&&X(),await Z()}),e(()=>{window.addEventListener(`resize`,Y),Z()}),s(()=>{window.removeEventListener(`resize`,Y),X()}),(e,t)=>(S(),_(`div`,At,[r(j)?y(``,!0):(S(),f(D,{key:0,eyebrow:`Analyze`,title:`等待分析数据注入`,description:`当前路由已经可独立打开,但还没有接收到来自 CLI 的 analyze payload。你可以先从工作台查看壳子结构,或者通过命令启动真实数据联调。`,"icon-name":`hero-commands`,tone:`strong`,padding:`header`},{default:a(()=>[d(`div`,jt,[d(`div`,Mt,[t[0]||=d(`p`,{class:`text-[11px] uppercase tracking-[0.24em] text-[color:var(--dashboard-text-soft)]`},` recommended commands `,-1),d(`div`,Nt,[(S(),_(g,null,n([`weapp-vite analyze`,`weapp-vite build --ui`,`weapp-vite dev --ui`],e=>d(`code`,{key:e,class:`rounded-xl bg-slate-950 px-3 py-3 text-xs text-slate-100 dark:bg-slate-900`},C(e),1)),64))])]),d(`div`,Pt,[p(r(b),{class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-4 py-4 transition hover:border-[color:var(--dashboard-border-strong)] hover:bg-[color:var(--dashboard-panel)]`,to:`/`},{default:a(()=>[...t[1]||=[d(`p`,{class:`font-medium`},` 返回工作台 `,-1),d(`p`,{class:`mt-1 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},` 继续查看应用壳子、命令面板和当前增强节奏。 `,-1)]]),_:1}),p(r(b),{class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-4 py-4 transition hover:border-[color:var(--dashboard-border-strong)] hover:bg-[color:var(--dashboard-panel)]`,to:`/activity`},{default:a(()=>[...t[2]||=[d(`p`,{class:`font-medium`},` 查看活动流 `,-1),d(`p`,{class:`mt-1 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},` 后续可以在这里观察真实的构建事件和诊断状态。 `,-1)]]),_:1})])])]),_:1})),d(`section`,Ft,[d(`nav`,It,[(S(!0),_(g,null,n(r(oe),e=>(S(),_(`button`,{key:e.key,class:i(r(T)({kind:`nav`,active:r(q)===e.key})),onClick:t=>q.value=e.key},[d(`span`,Rt,[p(w,{name:e.iconName},null,8,[`name`])]),m(` `+C(e.label),1)],10,Lt))),128))]),d(`div`,zt,[d(`div`,Bt,[(S(!0),_(g,null,n(r(ie),e=>(S(),_(`button`,{key:e.value,class:i(r(T)({kind:`theme`,active:r(v)===e.value})),onClick:t=>r(te)(e.value)},[d(`span`,Ht,[p(w,{name:e.iconName},null,8,[`name`])]),m(` `+C(e.label),1)],10,Vt))),128))]),(S(!0),_(g,null,n(K.value,e=>(S(),f(ce,u({key:e.label},{ref_for:!0},e,{uppercase:``}),null,16))),128))])]),r(j)?(S(),_(g,{key:1},[d(`section`,Ut,[p(D,{eyebrow:`Runtime Context`,title:`分析视图关联的运行上下文`,description:`treemap 和包体指标不再是孤立结果,这里会同步展示最近的运行事件,让你知道这份分析结果处在什么执行背景里。`,"icon-name":`metric-time`},{default:a(()=>[d(`div`,Wt,[p(fe,{event:r(A),eyebrow:`latest event`,"duration-text":r(A)?.durationMs===void 0?void 0:`最近一次耗时: ${r(se)(r(A).durationMs)}`},{default:a(()=>[p(r(b),{class:`mt-4 inline-flex rounded-full border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel)] px-3 py-1.5 text-xs font-medium text-[color:var(--dashboard-text)] transition hover:border-[color:var(--dashboard-border-strong)]`,to:`/activity`},{default:a(()=>[...t[3]||=[m(` 打开事件控制台 `,-1)]]),_:1})]),_:1},8,[`event`,`duration-text`]),d(`div`,Gt,[(S(!0),_(g,null,n(r(O),e=>(S(),f(pe,u({key:e.label},{ref_for:!0},e),null,16))),128))])])]),_:1}),p(D,{eyebrow:`Source Signals`,title:`事件来源摘要`,description:`分析页直接按来源折叠运行事件,方便判断当前这份 payload 主要来自哪条链路。`,"icon-name":`hero-system`},{default:a(()=>[d(`div`,Kt,[(S(!0),_(g,null,n(we.value,e=>(S(),f(de,{key:e.source,source:e.source,count:e.count,"error-count":e.errorCount,"average-duration":e.averageDuration,"count-label":`条事件`},null,8,[`source`,`count`,`error-count`,`average-duration`]))),128))])]),_:1}),p(D,{eyebrow:`Recent Feed`,title:`最近事件样本`,description:`这些事件是分析页最直接的上游线索。后面如果某次 analyze 或 build 结果异常,这里会比看全量时间线更快定位。`,"icon-name":`hero-commands`},{default:a(()=>[d(`ul`,qt,[(S(!0),_(g,null,n(Ce.value,t=>(S(),_(`li`,{key:t.id,class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-4 py-3`},[d(`div`,Jt,[d(`div`,null,[d(`p`,Yt,C(t.title),1),d(`p`,Xt,C(t.detail),1),p(le,{class:`mt-2`},{default:a(()=>[m(C(e.formatRuntimeEventMeta(t)),1)]),_:2},1024)]),p(ue,{label:e.formatRuntimeEventLevel(t.level),tone:e.getRuntimeEventBadgeTone(t.level)},null,8,[`label`,`tone`])])]))),128))])]),_:1})]),p(Se,{cards:r(Te),"package-type-summary":r(J)},null,8,[`cards`,`package-type-summary`]),r(q)===`overview`?(S(),_(`section`,Zt,[p(Ge,{"bind-chart-ref":Ee,"visible-largest-files":U.value,"sub-packages":r(V)},null,8,[`visible-largest-files`,`sub-packages`])])):r(q)===`packages`?(S(),_(`section`,Qt,[p(mt,{text:`包与产物视图优先展示每个包的结构和最大文件,支持在一个屏幕内快速对比。`}),p(pt,{"package-insights":r(L)},null,8,[`package-insights`])])):(S(),_(`section`,$t,[p(mt,{text:`模块与复用视图聚焦跨包重复、来源分布与文件样本。`}),p(Ie,{"visible-duplicate-modules":H.value,"module-source-summary":r(B),"visible-largest-files":U.value},null,8,[`visible-duplicate-modules`,`module-source-summary`,`visible-largest-files`])]))],64)):y(``,!0)]))}});export{en as default};