@weapp-vite/dashboard 6.15.13 → 6.15.14

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{C as e,E as t,F as n,I as r,M as i,N as a,O as o,P as s,S as c,T as l,_ as u,a as d,c as f,d as p,f as m,g as h,h as g,i as _,j as v,l as y,m as b,n as ee,p as x,r as S,s as C,u as w,w as T,y as E,z as D}from"./vue.js";import{_ as O,a as te,c as k,g as A,l as j,n as ne,r as re,t as ie}from"./shell.js";var ae={key:0,class:`mr-1.5 h-4 w-4 text-[color:var(--dashboard-accent)]`},M=u({__name:`AppInfoPill`,props:{label:{},iconName:{},uppercase:{type:Boolean}},setup(e){return(t,n)=>(T(),b(`span`,{class:r([`inline-flex items-center rounded-full border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-2.5 py-1 text-xs font-medium text-[color:var(--dashboard-text-soft)]`,e.uppercase?`tracking-[0.18em] uppercase`:void 0])},[e.iconName?(T(),b(`span`,ae,[h(O,{name:e.iconName},null,8,[`name`])])):x(``,!0),g(` `+D(e.label),1)],2))}}),oe={class:`flex flex-col gap-4 rounded-[24px] border border-[color:var(--dashboard-border-strong)] bg-[color:var(--dashboard-panel-strong)] px-4 py-4 shadow-[var(--dashboard-shadow)] md:px-5`},se={class:`flex items-start justify-between gap-3`},ce={class:`flex items-start gap-3`},le={class:`h-5 w-5`},ue={class:`mt-1 text-2xl font-semibold tracking-tight md:text-[2rem]`},de={class:`mt-2 max-w-3xl text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},fe={class:`hidden items-center gap-2 rounded-full border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-3 py-2 text-xs font-medium text-[color:var(--dashboard-text-soft)] md:inline-flex`,for:`dashboard-global-theme`},pe={class:`h-4 w-4 text-[color:var(--dashboard-accent)]`},me=[`value`],he=[`value`],ge={class:`flex flex-wrap items-center gap-2 md:hidden`},_e={class:`inline-flex items-center gap-2 rounded-full border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-3 py-2 text-xs font-medium text-[color:var(--dashboard-text-soft)]`,for:`dashboard-mobile-theme`},ve={class:`h-4 w-4 text-[color:var(--dashboard-accent)]`},ye=[`value`],be=[`value`],xe=u({__name:`AppShellHeader`,props:{title:{},description:{},themeOptions:{},themePreference:{}},emits:[`menu`,`setTheme`],setup(e,{emit:n}){let r=e,i=n,a=w(()=>r.themeOptions.find(e=>e.value===r.themePreference)?.iconName??`theme-system`);function o(e){i(`setTheme`,e.target.value)}return(n,r)=>(T(),b(`header`,oe,[p(`div`,se,[p(`div`,ce,[p(`button`,{class:`inline-flex h-11 w-11 items-center justify-center rounded-2xl border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] text-[color:var(--dashboard-text)] md:hidden`,type:`button`,onClick:r[0]||=e=>i(`menu`)},[p(`span`,le,[h(O,{name:`nav-menu`})])]),p(`div`,null,[r[1]||=p(`p`,{class:`text-[11px] uppercase tracking-[0.28em] text-[color:var(--dashboard-accent)]`},` weapp-vite dashboard `,-1),p(`h1`,ue,D(e.title),1),p(`p`,de,D(e.description),1)])]),p(`label`,fe,[p(`span`,pe,[h(O,{name:a.value},null,8,[`name`])]),p(`select`,{id:`dashboard-global-theme`,class:`min-w-[8rem] bg-transparent text-[color:var(--dashboard-text)] outline-none`,value:e.themePreference,onChange:o},[(T(!0),b(y,null,t(e.themeOptions,e=>(T(),b(`option`,{key:e.value,value:e.value},D(e.label),9,he))),128))],40,me)])]),p(`div`,ge,[p(`label`,_e,[p(`span`,ve,[h(O,{name:a.value},null,8,[`name`])]),p(`select`,{id:`dashboard-mobile-theme`,class:`min-w-[8rem] bg-transparent text-[color:var(--dashboard-text)] outline-none`,value:e.themePreference,onChange:o},[(T(!0),b(y,null,t(e.themeOptions,e=>(T(),b(`option`,{key:e.value,value:e.value},D(e.label),9,be))),128))],40,ye)]),h(M,{"icon-name":`status-live`,label:`shell ready`,uppercase:``})])]))}}),N=`weapp-vite-dashboard-theme`;function Se(){if(typeof window>`u`)return`system`;let e=window.localStorage.getItem(N);return e===`light`||e===`dark`||e===`system`?e:`system`}function Ce(e,t){return e===`light`||e===`dark`?e:t?.matches?`dark`:`light`}function P(){let t=a(Se()),n=typeof window<`u`?window.matchMedia(`(prefers-color-scheme: dark)`):null,r=w(()=>Ce(t.value,n)),i=e=>{typeof document>`u`||(document.documentElement.dataset.theme=e,document.documentElement.style.colorScheme=e)},o=e=>{typeof window>`u`||window.localStorage.setItem(N,e)},s=()=>{i(r.value)};return v(t,e=>{o(e),i(r.value)},{immediate:!0}),e(()=>{n?.addEventListener(`change`,s),i(r.value)}),c(()=>{n?.removeEventListener(`change`,s)}),{themePreference:t,resolvedTheme:r,setThemePreference(e){t.value=e}}}var F=Symbol(`dashboard-theme`);function we(e){l(F,e)}function Te(){return E(F,null)||P()}function I(e){if(!e||Number.isNaN(e))return`—`;let t=1024,n=[`B`,`KB`,`MB`,`GB`],r=e,i=0;for(;r>=t&&i<n.length-1;)r/=t,i++;return`${r.toFixed(r>=100||i===0?0:2)} ${n[i]}`}function Ee(e){switch(e){case`main`:return`主包`;case`subPackage`:return`分包`;case`independent`:return`独立分包`;case`virtual`:return`虚拟包`;default:return e}}function De(e){return e===`independent`?`独立构建`:`主构建`}function Oe(e){switch(e){case`src`:return`业务源码`;case`workspace`:return`工作区包`;case`plugin`:return`插件`;case`node_modules`:return`依赖`;default:return e}}function L(e){switch(e){case`command`:return`命令`;case`build`:return`构建`;case`diagnostic`:return`诊断`;case`hmr`:return`HMR`;case`system`:return`系统`;default:return e}}function R(e){switch(e){case`info`:return`信息`;case`success`:return`成功`;case`warning`:return`警告`;case`error`:return`错误`;default:return e}}function z(e){return e??`dashboard`}function ke(e){return e}function Ae(e){return{label:R(e.level),tone:ke(e.level)}}function je(e){return e>0?`error`:`info`}function Me(e){return{label:e.latestTimestamp?`${e.count} 条`:`错误 ${e.errorCount}`,tone:je(e.errorCount)}}function B(e){return typeof e!=`number`||Number.isNaN(e)||e<0?`未记录`:e>=1e3?`${(e/1e3).toFixed(e>=1e4?1:2)} s`:`${e} ms`}function Ne(e){let t=[L(e.kind),z(e.source),e.timestamp];return typeof e.durationMs==`number`&&Number.isFinite(e.durationMs)&&e.durationMs>=0&&t.push(B(e.durationMs)),t.join(` · `)}var Pe=[`command`,`build`,`diagnostic`,`hmr`,`system`],Fe=[`info`,`success`,`warning`,`error`];function Ie(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Le(e){return typeof e==`string`&&Pe.includes(e)?e:`system`}function Re(e){return typeof e==`string`&&Fe.includes(e)?e:`info`}function V(e,t){return typeof e==`string`&&e.trim()?e:t}function ze(e){return typeof e==`number`&&Number.isFinite(e)&&e>=0?e:void 0}function Be(e){if(!Array.isArray(e))return;let t=e.filter(e=>typeof e==`string`&&e.trim()).map(e=>String(e));return t.length>0?t:void 0}function Ve(e,t){return{id:V(e.id,`dashboard-runtime-event-${t}`),kind:Le(e.kind),level:Re(e.level),title:V(e.title,`untitled event`),detail:V(e.detail,`no event detail`),timestamp:V(e.timestamp,`—`),source:V(e.source,`dashboard`),durationMs:ze(e.durationMs),tags:Be(e.tags)}}function He(e){return{count:1,errorCount:+(e.level===`error`),latestTimestamp:e.timestamp,durationTotal:e.durationMs??0,timedCount:+(typeof e.durationMs==`number`)}}function Ue(e,t){return{count:e.count+1,errorCount:e.errorCount+ +(t.level===`error`),latestTimestamp:e.latestTimestamp,durationTotal:e.durationTotal+(t.durationMs??0),timedCount:e.timedCount+ +(typeof t.durationMs==`number`)}}function We(e,t){return{source:e,count:t.count,errorCount:t.errorCount,latestTimestamp:t.latestTimestamp,averageDurationMs:t.timedCount>0?Math.round(t.durationTotal/t.timedCount):void 0}}function Ge(e){return{...e,averageDuration:B(e.averageDurationMs)}}function Ke(e,t){return Ie(e)?Ve(e,t):null}function H(e){let t=(Array.isArray(e)?e:[e]).map((e,t)=>Ke(e,t)).filter(e=>!!e),n=new Map;for(let e of t)n.set(e.id,e);return[...n.values()]}function U(e){let t=new Map;for(let n of e){let e=n.source??`dashboard`,r=t.get(e);if(!r){t.set(e,He(n));continue}t.set(e,Ue(r,n))}return Array.from(t,([e,t])=>We(e,t)).sort((e,t)=>t.count-e.count||e.source.localeCompare(t.source,`zh-CN`))}function qe(e){return e.map(e=>Ge(e))}var W=Symbol(`dashboard-workspace`);function G(){return new Date().toLocaleTimeString(`zh-CN`,{hour12:!1})}function K(e,t){return{label:e,value:t}}function q(e){return e}function J(e){return e}function Y(e){return e}function X(e){return e}function Je(){let t=s(window.__WEAPP_VITE_ANALYZE_RESULT__??null),n=s(window.__WEAPP_VITE_DASHBOARD_EVENTS__?.length?H(window.__WEAPP_VITE_DASHBOARD_EVENTS__):H(te)),r=s(0),i=s(t.value?G():`—`),a=w(()=>{let e=t.value;if(!e)return{packageCount:0,moduleCount:0,duplicateCount:0,totalBytes:0};let n=e.packages.flatMap(e=>e.files);return{packageCount:e.packages.length,moduleCount:e.modules.length,duplicateCount:e.modules.filter(e=>e.packages.length>1).length,totalBytes:n.reduce((e,t)=>e+(t.size??0),0)}}),o=w(()=>t.value?`payload ready`:`awaiting payload`),l=w(()=>t.value?`${a.value.packageCount} 个包 · ${a.value.moduleCount} 个模块`:`尚未接收到 CLI analyze 数据`),u=w(()=>n.value[0]??null),d=w(()=>{let e=n.value.filter(e=>e.level===`error`).length,t=n.value.filter(e=>e.level===`warning`).length,r=n.value.filter(e=>e.kind===`command`).length,i=n.value.filter(e=>typeof e.durationMs==`number`),a=i.length>0?Math.round(i.reduce((e,t)=>e+(t.durationMs??0),0)/i.length):void 0;return[K(`总事件数`,String(n.value.length)),K(`命令事件`,String(r)),K(`已记录耗时`,String(i.length)),K(`平均耗时`,B(a)),K(`警告事件`,String(t)),K(`错误事件`,String(e))]}),f=w(()=>U(n.value)),p=w(()=>[q({label:`页面骨架`,value:`4 个`,iconName:`metric-ready`}),q({label:`连接状态`,value:t.value?`已接入 payload`:`等待注入`,iconName:t.value?`status-live`:`metric-health`}),q({label:`数据同步`,value:`${r.value} 次`,iconName:`metric-latency`}),q({label:`产物体积`,value:t.value?I(a.value.totalBytes):`未载入`,iconName:`metric-quality`}),q({label:`运行事件`,value:`${n.value.length} 条`,iconName:u.value?.level===`error`?`metric-health`:`metric-time`})]),m=w(()=>t.value?[J({label:`重新分析当前工程`,command:`weapp-vite analyze`,note:`最近同步于 ${i.value},当前可读取 ${a.value.packageCount} 个包。`}),J({label:`进入构建联调`,command:`weapp-vite build --ui`,note:`当前产物总体积 ${I(a.value.totalBytes)},适合继续核对 chunk 结构。`}),J({label:`观察开发态更新`,command:`weapp-vite dev --ui`,note:`已记录 ${r.value} 次 payload 同步,后续可继续接入更细粒度事件。`})]:re),h=w(()=>{let e=[...ie];for(let t of n.value.slice(0,4))e.unshift(Y({time:t.timestamp,title:t.title,summary:t.detail,tone:t.level===`error`||t.level===`warning`?`default`:`live`}));return t.value&&e.unshift(Y({time:i.value,title:`workspace payload received`,summary:`已收到一份真实 analyze 结果,包含 ${a.value.packageCount} 个包和 ${a.value.moduleCount} 个模块。`,tone:`live`})),e}),g=w(()=>{let e=[...ne],n=u.value;return n&&e.unshift(X({label:`最新运行事件`,detail:`${n.title} · ${n.detail}`,status:n.level})),t.value?[X({label:`实时分析状态`,detail:`已接入 payload,当前记录 ${a.value.duplicateCount} 个跨包复用模块。`,status:`在线`}),X({label:`产物规模`,detail:`总产物体积 ${I(a.value.totalBytes)},可继续进入分析页查看 treemap 与最大文件。`,status:`可分析`}),...e]:[X({label:`CLI 注入链路`,detail:`尚未接收到 analyze payload,当前页面以空态方式工作。`,status:`待接入`}),...e]}),_=e=>{let t=H(e);if(t.length===0)return;let r=[...t,...n.value],i=new Map;for(let e of r)i.set(e.id,e);n.value=[...i.values()].slice(0,24),window.__WEAPP_VITE_DASHBOARD_EVENTS__=[...n.value]},v=()=>{window.__WEAPP_VITE_ANALYZE_RESULT__&&(t.value=window.__WEAPP_VITE_ANALYZE_RESULT__,r.value+=1,i.value=G())},y=e=>{let t=e instanceof CustomEvent?e.detail:null;_(Array.isArray(t)?t:t?[t]:null)};return e(()=>{window.addEventListener(`weapp-analyze:update`,v),window.addEventListener(`weapp-dashboard:event`,y),v(),_(window.__WEAPP_VITE_DASHBOARD_EVENTS__)}),c(()=>{window.removeEventListener(`weapp-analyze:update`,v),window.removeEventListener(`weapp-dashboard:event`,y)}),{resultRef:t,updateCount:r,lastUpdatedAt:i,statusLabel:o,statusSummary:l,commandItems:m,activityItems:h,diagnostics:g,signals:p,runtimeEvents:n,latestRuntimeEvent:u,eventSummary:d,runtimeSourceSummary:f}}function Ye(e){l(W,e)}function Xe(){let e=E(W,null);if(!e)throw Error(`[dashboard] workspace context is not available`);return e}var Z=[{value:`system`,label:`跟随系统`,iconName:`theme-system`},{value:`light`,label:`亮色`,iconName:`theme-light`},{value:`dark`,label:`暗色`,iconName:`theme-dark`}],Ze=[{key:`overview`,label:`总览`,iconName:`tab-overview`},{key:`packages`,label:`包与产物`,iconName:`tab-packages`},{key:`modules`,label:`模块与复用`,iconName:`tab-modules`}],Qe={class:`min-h-screen px-3 py-3 text-[color:var(--dashboard-text)] md:px-4 md:py-4 lg:px-5`},$e={class:`mx-auto grid max-w-[1600px] gap-3 lg:grid-cols-[18.5rem_minmax(0,1fr)]`},et={class:`hidden lg:block`},tt={class:`sticky top-4 space-y-3`},nt={class:`grid gap-2`},rt={class:`flex items-start gap-3`},it={class:`h-5 w-5`},at={class:`min-w-0`},ot={class:`font-medium text-[color:var(--dashboard-text)]`},st={class:`mt-1 text-xs leading-5 text-[color:var(--dashboard-text-soft)]`},ct={class:`min-w-0 space-y-3`},lt={key:0,class:`fixed inset-y-3 left-3 z-50 w-[min(22rem,calc(100vw-1.5rem))] lg:hidden`},ut={class:`grid gap-2`},dt={class:`flex items-start gap-3`},ft={class:`h-5 w-5`},pt={class:`min-w-0`},mt={class:`font-medium text-[color:var(--dashboard-text)]`},ht={class:`mt-1 text-xs leading-5 text-[color:var(--dashboard-text-soft)]`},gt=u({__name:`App`,setup(e){let s=d(),c=a(!1),{themePreference:l,resolvedTheme:u,setThemePreference:f}=P(),g=Je(),_=w(()=>!!g.resultRef.value);we({themePreference:l,resolvedTheme:u,setThemePreference:f}),Ye(g);let S=w(()=>s.path.startsWith(`/analyze`)?{title:`Analyze Workspace`,description:`保留现有构建分析能力,并把包、模块与分包视图收敛进可持续扩展的应用框架。`}:s.path.startsWith(`/activity`)?{title:`Activity Stream`,description:`用统一的事件、诊断和下一步动作承载未来的 dev/build/ui 运行轨迹。`}:s.path.startsWith(`/tokens`)?{title:`Design Tokens`,description:`集中验证 dashboard 的色彩、表面和排版语义,避免后续页面各自漂移。`}:{title:`Workspace Console`,description:`这是 dashboard 的新入口页,用来承载基础壳子、命令面板和后续不断增强的调试模块。`});v(()=>s.fullPath,()=>{c.value=!1});function E(e,t){return t===`/`?e===`/`:e===t||e.startsWith(`${t}/`)}return(e,a)=>{let d=o(`RouterLink`);return T(),b(`div`,Qe,[p(`div`,$e,[p(`aside`,et,[p(`div`,tt,[h(j,{eyebrow:`Shell`,title:`weapp-vite dashboard`,description:`先搭好稳定壳子,再把 analyze、诊断、日志、MCP 等能力持续挂接进来。`,"icon-name":`hero-system`,tone:`strong`},{default:i(()=>[p(`nav`,nt,[(T(!0),b(y,null,t(n(k),e=>(T(),m(d,{key:e.to,to:e.to,class:r(n(A)(`group rounded-[18px] border px-3 py-3 transition`,E(n(s).path,e.to)?`border-[color:var(--dashboard-border-strong)] bg-[color:var(--dashboard-panel-strong)] shadow-[var(--dashboard-shadow)]`:`border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] hover:border-[color:var(--dashboard-border-strong)] hover:bg-[color:var(--dashboard-panel)]`))},{default:i(()=>[p(`div`,rt,[p(`span`,{class:r(n(A)(`flex h-10 w-10 shrink-0 items-center justify-center rounded-2xl`,E(n(s).path,e.to)?`bg-[color:var(--dashboard-accent-soft)] text-[color:var(--dashboard-accent)]`:`bg-[color:var(--dashboard-panel)] text-[color:var(--dashboard-text-soft)] group-hover:text-[color:var(--dashboard-accent)]`))},[p(`span`,it,[h(O,{name:e.iconName},null,8,[`name`])])],2),p(`div`,at,[p(`p`,ot,D(e.label),1),p(`p`,st,D(e.caption),1)])])]),_:2},1032,[`to`,`class`]))),128))])]),_:1}),h(j,{eyebrow:`Theme`,title:n(g).statusLabel.value,description:n(g).statusSummary.value,"icon-name":_.value?`status-live`:n(u)===`dark`?`theme-dark`:`theme-light`,padding:`sm`},null,8,[`title`,`description`,`icon-name`])])]),p(`div`,ct,[h(xe,{title:S.value.title,description:S.value.description,"theme-options":n(Z),"theme-preference":n(l),onMenu:a[0]||=e=>c.value=!0,onSetTheme:n(f)},null,8,[`title`,`description`,`theme-options`,`theme-preference`,`onSetTheme`]),h(n(ee))])]),h(C,{"enter-active-class":`transition duration-200 ease-out`,"enter-from-class":`opacity-0`,"enter-to-class":`opacity-100`,"leave-active-class":`transition duration-150 ease-in`,"leave-from-class":`opacity-100`,"leave-to-class":`opacity-0`},{default:i(()=>[c.value?(T(),b(`div`,{key:0,class:`fixed inset-0 z-40 bg-slate-950/35 backdrop-blur-sm lg:hidden`,onClick:a[1]||=e=>c.value=!1})):x(``,!0)]),_:1}),h(C,{"enter-active-class":`transition duration-200 ease-out`,"enter-from-class":`-translate-x-6 opacity-0`,"enter-to-class":`translate-x-0 opacity-100`,"leave-active-class":`transition duration-150 ease-in`,"leave-from-class":`translate-x-0 opacity-100`,"leave-to-class":`-translate-x-6 opacity-0`},{default:i(()=>[c.value?(T(),b(`aside`,lt,[h(j,{eyebrow:`Navigation`,title:`Workspace Modules`,description:`路由已经是第一层扩展边界,后续增强优先新增页面,不再继续堆叠单页。`,"icon-name":`nav-menu`,tone:`strong`,"content-class":`h-full`},{default:i(()=>[p(`nav`,ut,[(T(!0),b(y,null,t(n(k),e=>(T(),m(d,{key:e.to,to:e.to,class:r(n(A)(`group rounded-[18px] border px-3 py-3 transition`,E(n(s).path,e.to)?`border-[color:var(--dashboard-border-strong)] bg-[color:var(--dashboard-panel-strong)] shadow-[var(--dashboard-shadow)]`:`border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] hover:border-[color:var(--dashboard-border-strong)] hover:bg-[color:var(--dashboard-panel)]`)),onClick:a[2]||=e=>c.value=!1},{default:i(()=>[p(`div`,dt,[p(`span`,{class:r(n(A)(`flex h-10 w-10 shrink-0 items-center justify-center rounded-2xl`,E(n(s).path,e.to)?`bg-[color:var(--dashboard-accent-soft)] text-[color:var(--dashboard-accent)]`:`bg-[color:var(--dashboard-panel)] text-[color:var(--dashboard-text-soft)] group-hover:text-[color:var(--dashboard-accent)]`))},[p(`span`,ft,[h(O,{name:e.iconName},null,8,[`name`])])],2),p(`div`,pt,[p(`p`,mt,D(e.label),1),p(`p`,ht,D(e.caption),1)])])]),_:2},1032,[`to`,`class`]))),128))])]),_:1})])):x(``,!0)]),_:1})])}}}),_t=(function(){let e=typeof document<`u`&&document.createElement(`link`).relList;return e&&e.supports&&e.supports(`modulepreload`)?`modulepreload`:`preload`})(),vt=function(e,t){return new URL(e,t).href},Q={},$=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=vt(t,n),t in Q)return;Q[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:_t,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},yt=S({history:_(),routes:[{path:`/`,name:`/`,component:()=>$(()=>import(`./pages.js`),[],import.meta.url)},{path:`/activity`,name:`/activity`,component:()=>$(()=>import(`./activity.js`),[],import.meta.url)},{path:`/analyze`,name:`/analyze`,component:()=>$(()=>import(`./analyze.js`),[],import.meta.url)},{path:`/tokens`,name:`/tokens`,component:()=>$(()=>import(`./tokens.js`),[],import.meta.url)}]});function bt(){let e=f(gt);e.config.errorHandler=(e,t,n)=>{},e.use(yt),e.mount(`#app`)}try{bt()}catch{}export{Te as _,U as a,De as c,Ee as d,L as f,Oe as g,z as h,qe as i,I as l,Ne as m,Z as n,Ae as o,R as p,Xe as r,Me as s,Ze as t,B as u,M as v};
1
+ import{A as e,C as t,D as n,E as r,F as i,I as a,M as o,N as s,O as c,P as l,S as u,T as d,_ as f,a as p,c as m,d as h,f as g,g as _,h as v,i as y,j as b,l as x,m as S,n as ee,p as C,r as te,s as w,u as T,w as E,y as D,z as O}from"./vue.js";import{n as ne,t as k}from"./vendor.js";var A=f({__name:`DashboardIcon`,props:{name:{}},setup(e){let t=e,n={"theme-system":`icon-[mdi--theme-light-dark]`,"theme-light":`icon-[mdi--white-balance-sunny]`,"theme-dark":`icon-[mdi--moon-waning-crescent]`,"nav-menu":`icon-[mdi--menu]`,"nav-home":`icon-[mdi--view-grid-outline]`,"nav-analyze":`icon-[mdi--chart-box-outline]`,"nav-activity":`icon-[mdi--timeline-text-outline]`,"nav-tokens":`icon-[mdi--palette-outline]`,"tab-overview":`icon-[mdi--view-dashboard-outline]`,"tab-packages":`icon-[mdi--package-variant-closed]`,"tab-modules":`icon-[mdi--vector-link]`,"status-dark":`icon-[mdi--circle-slice-8]`,"status-light":`icon-[mdi--checkbox-blank-circle]`,"status-live":`icon-[mdi--motion-play-outline]`,"metric-packages":`icon-[mdi--package-variant]`,"metric-subpackages":`icon-[mdi--layers-triple-outline]`,"metric-chunks":`icon-[mdi--chart-tree]`,"metric-assets":`icon-[mdi--file-document-multiple-outline]`,"metric-size-outline":`icon-[mdi--database-outline]`,"metric-modules":`icon-[mdi--cube-outline]`,"metric-duplicates":`icon-[mdi--vector-link]`,"metric-sources":`icon-[mdi--source-branch]`,"metric-copy":`icon-[mdi--content-copy]`,"metric-time":`icon-[mdi--clock-outline]`,"metric-entries":`icon-[mdi--export-variant]`,"metric-size":`icon-[mdi--database]`,treemap:`icon-[mdi--chart-box-outline]`,"top-files":`icon-[mdi--file-star-outline]`,subpackages:`icon-[mdi--layers-triple-outline]`,"duplicate-modules":`icon-[mdi--vector-link]`,"module-sources":`icon-[mdi--source-branch]`,"file-samples":`icon-[mdi--file-document-outline]`,"hero-workspace":`icon-[mdi--view-quilt-outline]`,"hero-commands":`icon-[mdi--console-line]`,"hero-system":`icon-[mdi--shape-outline]`,"metric-ready":`icon-[mdi--rocket-launch-outline]`,"metric-health":`icon-[mdi--heart-pulse]`,"metric-latency":`icon-[mdi--timer-sand]`,"metric-quality":`icon-[mdi--shield-check-outline]`,"token-color":`icon-[mdi--palette-outline]`,"token-surface":`icon-[mdi--card-bulleted-outline]`,"token-type":`icon-[mdi--format-letter-spacing]`},r=T(()=>n[t.name]??`icon-[mdi--file-document-multiple-outline]`);return(e,t)=>(E(),S(`span`,{class:a([`h-full w-full`,r.value])},null,2))}}),re={key:0,class:`mr-1.5 h-4 w-4 text-[color:var(--dashboard-accent)]`},j=f({__name:`AppInfoPill`,props:{label:{},iconName:{},uppercase:{type:Boolean}},setup(e){return(t,n)=>(E(),S(`span`,{class:a([`inline-flex items-center rounded-full border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-2.5 py-1 text-xs font-medium text-[color:var(--dashboard-text-soft)]`,e.uppercase?`tracking-[0.18em] uppercase`:void 0])},[e.iconName?(E(),S(`span`,re,[_(A,{name:e.iconName},null,8,[`name`])])):C(``,!0),v(` `+O(e.label),1)],2))}}),ie={class:`flex flex-col gap-4 rounded-[24px] border border-[color:var(--dashboard-border-strong)] bg-[color:var(--dashboard-panel-strong)] px-4 py-4 shadow-[var(--dashboard-shadow)] md:px-5`},ae={class:`flex items-start justify-between gap-3`},oe={class:`flex items-start gap-3`},se={class:`h-5 w-5`},ce={class:`mt-1 text-2xl font-semibold tracking-tight md:text-[2rem]`},le={class:`mt-2 max-w-3xl text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},ue={class:`hidden items-center gap-2 rounded-full border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-3 py-2 text-xs font-medium text-[color:var(--dashboard-text-soft)] md:inline-flex`,for:`dashboard-global-theme`},de={class:`h-4 w-4 text-[color:var(--dashboard-accent)]`},fe=[`value`],pe=[`value`],me={class:`flex flex-wrap items-center gap-2 md:hidden`},he={class:`inline-flex items-center gap-2 rounded-full border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-3 py-2 text-xs font-medium text-[color:var(--dashboard-text-soft)]`,for:`dashboard-mobile-theme`},ge={class:`h-4 w-4 text-[color:var(--dashboard-accent)]`},_e=[`value`],ve=[`value`],ye=f({__name:`AppShellHeader`,props:{title:{},description:{},themeOptions:{},themePreference:{}},emits:[`menu`,`setTheme`],setup(e,{emit:t}){let n=e,i=t,a=T(()=>n.themeOptions.find(e=>e.value===n.themePreference)?.iconName??`theme-system`);function o(e){i(`setTheme`,e.target.value)}return(t,n)=>(E(),S(`header`,ie,[h(`div`,ae,[h(`div`,oe,[h(`button`,{class:`inline-flex h-11 w-11 items-center justify-center rounded-2xl border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] text-[color:var(--dashboard-text)] md:hidden`,type:`button`,onClick:n[0]||=e=>i(`menu`)},[h(`span`,se,[_(A,{name:`nav-menu`})])]),h(`div`,null,[n[1]||=h(`p`,{class:`text-[11px] uppercase tracking-[0.28em] text-[color:var(--dashboard-accent)]`},` weapp-vite dashboard `,-1),h(`h1`,ce,O(e.title),1),h(`p`,le,O(e.description),1)])]),h(`label`,ue,[h(`span`,de,[_(A,{name:a.value},null,8,[`name`])]),h(`select`,{id:`dashboard-global-theme`,class:`min-w-[8rem] bg-transparent text-[color:var(--dashboard-text)] outline-none`,value:e.themePreference,onChange:o},[(E(!0),S(x,null,r(e.themeOptions,e=>(E(),S(`option`,{key:e.value,value:e.value},O(e.label),9,pe))),128))],40,fe)])]),h(`div`,me,[h(`label`,he,[h(`span`,ge,[_(A,{name:a.value},null,8,[`name`])]),h(`select`,{id:`dashboard-mobile-theme`,class:`min-w-[8rem] bg-transparent text-[color:var(--dashboard-text)] outline-none`,value:e.themePreference,onChange:o},[(E(!0),S(x,null,r(e.themeOptions,e=>(E(),S(`option`,{key:e.value,value:e.value},O(e.label),9,ve))),128))],40,_e)]),_(j,{"icon-name":`status-live`,label:`shell ready`,uppercase:``})])]))}});function M(e,t){if(e){if(Array.isArray(e)){for(let n of e)M(n,t);return}if(typeof e==`object`){for(let[n,r]of Object.entries(e))r&&t.push(n);return}t.push(String(e))}}function N(...e){let t=[];for(let n of e)M(n,t);return ne(t.join(` `))}var be=k({base:`rounded-[20px] border shadow-[var(--dashboard-shadow)]`,variants:{tone:{default:`border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel)]`,strong:`border-[color:var(--dashboard-border-strong)] bg-[color:var(--dashboard-panel-strong)]`,muted:`border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)]`},padding:{none:``,sm:`p-3`,md:`p-4`,header:`px-4 py-4 md:px-5`}},defaultVariants:{tone:`default`,padding:`md`}}),xe=k({base:`flex items-center justify-center rounded-xl bg-[color:var(--dashboard-accent-soft)] text-[color:var(--dashboard-accent)]`,variants:{size:{sm:`h-8 w-8`,md:`h-9 w-9`,lg:`h-10 w-10`}},defaultVariants:{size:`md`}}),Se=k({base:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)]`,variants:{padding:{sm:`px-4 py-3`,md:`p-4`},interactive:{true:`transition hover:border-[color:var(--dashboard-border-strong)] hover:bg-[color:var(--dashboard-panel)]`,false:``}},defaultVariants:{padding:`md`,interactive:!1}}),Ce=k({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-[color:var(--dashboard-accent)] bg-[color:var(--dashboard-accent-soft)] text-[color:var(--dashboard-text)]`,false:`border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] text-[color:var(--dashboard-text-soft)] hover:border-[color:var(--dashboard-border-strong)] hover:text-[color:var(--dashboard-text)]`}},defaultVariants:{kind:`nav`,active:!1}}),we=k({base:`rounded-full border px-2.5 py-1 text-[11px] font-medium uppercase tracking-[0.16em]`,variants:{tone:{neutral:`border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] text-[color:var(--dashboard-text-soft)]`,info:`border-[color:var(--dashboard-border-strong)] bg-[color:var(--dashboard-accent-soft)] text-[color:var(--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`}}),Te=k({base:`rounded-[20px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel)] px-4 py-3 text-[11px] uppercase tracking-[0.24em] text-[color:var(--dashboard-text-soft)] shadow-[var(--dashboard-shadow)]`}),Ee={key:0,class:`flex items-start justify-between gap-4`},De={class:`flex items-start gap-3`},Oe={class:`h-5 w-5`},ke={key:0,class:`text-[11px] uppercase tracking-[0.24em] text-[color:var(--dashboard-accent)]`},Ae={key:1,class:`text-lg font-semibold tracking-tight`},je={key:2,class:`mt-1 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},P=f({__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(t){let r=t,o=e(),s=!!(r.title||r.description||o.header);return(e,r)=>(E(),S(`section`,{class:a(i(N)(i(be)({tone:t.tone,padding:t.padding}),t.contentClass))},[i(s)?(E(),S(`header`,Ee,[h(`div`,De,[t.iconName?(E(),S(`span`,{key:0,class:a([i(xe)({size:`md`}),`shrink-0`])},[h(`span`,Oe,[_(A,{name:t.iconName},null,8,[`name`])])],2)):C(``,!0),h(`div`,null,[t.eyebrow?(E(),S(`p`,ke,O(t.eyebrow),1)):C(``,!0),t.title?(E(),S(`h2`,Ae,O(t.title),1)):C(``,!0),t.description?(E(),S(`p`,je,O(t.description),1)):C(``,!0)])]),n(e.$slots,`header`)])):C(``,!0),h(`div`,{class:a(i(s)?`mt-4`:``)},[n(e.$slots,`default`)],2)],2))}}),F=`weapp-vite-dashboard-theme`;function Me(){if(typeof window>`u`)return`system`;let e=window.localStorage.getItem(F);return e===`light`||e===`dark`||e===`system`?e:`system`}function Ne(e,t){return e===`light`||e===`dark`?e:t?.matches?`dark`:`light`}function I(){let e=s(Me()),n=typeof window<`u`?window.matchMedia(`(prefers-color-scheme: dark)`):null,r=T(()=>Ne(e.value,n)),i=e=>{typeof document>`u`||(document.documentElement.dataset.theme=e,document.documentElement.style.colorScheme=e)},a=e=>{typeof window>`u`||window.localStorage.setItem(F,e)},o=()=>{i(r.value)};return b(e,e=>{a(e),i(r.value)},{immediate:!0}),t(()=>{n?.addEventListener(`change`,o),i(r.value)}),u(()=>{n?.removeEventListener(`change`,o)}),{themePreference:e,resolvedTheme:r,setThemePreference(t){e.value=t}}}var L=Symbol(`dashboard-theme`);function Pe(e){d(L,e)}function Fe(){return D(L,null)||I()}var R=[{to:`/`,label:`工作台`,caption:`应用入口与状态总览`,iconName:`nav-home`},{to:`/analyze`,label:`分析视图`,caption:`保留现有 analyze 面板`,iconName:`nav-analyze`},{to:`/activity`,label:`活动流`,caption:`诊断、事件与后续动作`,iconName:`nav-activity`},{to:`/tokens`,label:`设计令牌`,caption:`主题、表面与组件预览`,iconName:`nav-tokens`}],Ie=[{title:`Workspace Readiness`,description:`把 dashboard 从单页分析器抬升成完整 UI 外壳,便于后续不断挂接调试能力。`,iconName:`hero-workspace`,eyebrow:`Structure`},{title:`Command Surface`,description:`为 CLI、MCP、构建分析和任务编排预留固定入口,不再把所有操作塞在一个页面里。`,iconName:`hero-commands`,eyebrow:`Action`},{title:`System Language`,description:`通过统一表面、徽标、区块标题和主题令牌,保证后续新增页面不会继续发散。`,iconName:`hero-system`,eyebrow:`Design`}],Le=[{label:`启动开发`,command:`pnpm --filter @weapp-vite/dashboard dev`,note:`本地预览完整 UI 壳子`},{label:`生产构建`,command:`pnpm --filter @weapp-vite/dashboard build`,note:`验证静态产物可发布`},{label:`主包联调`,command:`weapp-vite build --ui`,note:`从 CLI 注入真实分析数据`}],Re=["先保留 `analyze` 现有数据契约,不在第一轮改动里破坏 CLI 注入。",`新增页面全部基于假数据和通用组件,后面按模块逐步替换成真实数据源。`,`主题切换提升到应用级,避免每个页面各自维护深浅色状态。`],ze=[{time:`09:12`,title:`analyze payload synced`,summary:`CLI 已把最新构建结果注入 dashboard,全局状态已完成一次同步。`,tone:`live`},{time:`09:26`,title:`workspace shell extended`,summary:`新增工作台、活动流、设计令牌三个页面骨架,后续能力可按路由继续扩展。`,tone:`default`},{time:`10:03`,title:`theme system unified`,summary:`主题偏好收敛到应用根部,分析页和未来面板共享同一套明暗模式。`,tone:`default`}],Be=[{label:`CLI 注入链路`,detail:"保留 `window.__WEAPP_VITE_ANALYZE_RESULT__` 兼容层。",status:`兼容`},{label:`路由拓展性`,detail:`新增页面采用文件路由,后续新增面板不需要修改主路由表。`,status:`可扩展`},{label:`组件复用`,detail:`通用卡片与区块标题已独立,避免页面继续拷贝结构。`,status:`已落地`},{label:`视觉令牌`,detail:`颜色、表面、排版预览集中在 tokens 页面统一检查。`,status:`可验证`}],Ve=[{id:`evt-command-build-ui`,kind:`command`,level:`success`,title:`build --ui completed`,detail:`示例事件: dashboard 已经准备好承接来自 CLI 的真实命令生命周期事件。`,timestamp:`10:18:12`,source:`cli`,durationMs:842,tags:[`build`,`ui`]},{id:`evt-hmr-shell`,kind:`hmr`,level:`info`,title:`workspace shell hot updated`,detail:`应用壳子页面已完成一次热更新,后续可以继续细分到模块级刷新记录。`,timestamp:`10:19:44`,source:`vite-hmr`,tags:[`hmr`,`shell`]},{id:`evt-diagnostic-payload`,kind:`diagnostic`,level:`warning`,title:`analyze payload pending`,detail:`示例事件: 当前页面支持在没有 payload 时进入空态,而不是直接崩溃。`,timestamp:`10:20:07`,source:`dashboard`,tags:[`diagnostic`]}],He=[{title:`Accent`,iconName:`token-color`,tokens:[{name:`--dashboard-accent`,sample:`var(--dashboard-accent)`},{name:`--dashboard-accent-soft`,sample:`var(--dashboard-accent-soft)`},{name:`--dashboard-border-strong`,sample:`var(--dashboard-border-strong)`}]},{title:`Surfaces`,iconName:`token-surface`,tokens:[{name:`--dashboard-panel`,sample:`var(--dashboard-panel)`},{name:`--dashboard-panel-strong`,sample:`var(--dashboard-panel-strong)`},{name:`--dashboard-panel-muted`,sample:`var(--dashboard-panel-muted)`}]},{title:`Typography`,iconName:`token-type`,tokens:[{name:`--dashboard-text`,sample:`var(--dashboard-text)`},{name:`--dashboard-text-muted`,sample:`var(--dashboard-text-muted)`},{name:`--dashboard-text-soft`,sample:`var(--dashboard-text-soft)`}]}];function z(e){if(!e||Number.isNaN(e))return`—`;let t=1024,n=[`B`,`KB`,`MB`,`GB`],r=e,i=0;for(;r>=t&&i<n.length-1;)r/=t,i++;return`${r.toFixed(r>=100||i===0?0:2)} ${n[i]}`}function Ue(e){switch(e){case`main`:return`主包`;case`subPackage`:return`分包`;case`independent`:return`独立分包`;case`virtual`:return`虚拟包`;default:return e}}function We(e){return e===`independent`?`独立构建`:`主构建`}function Ge(e){switch(e){case`src`:return`业务源码`;case`workspace`:return`工作区包`;case`plugin`:return`插件`;case`node_modules`:return`依赖`;default:return e}}function B(e){switch(e){case`command`:return`命令`;case`build`:return`构建`;case`diagnostic`:return`诊断`;case`hmr`:return`HMR`;case`system`:return`系统`;default:return e}}function V(e){switch(e){case`info`:return`信息`;case`success`:return`成功`;case`warning`:return`警告`;case`error`:return`错误`;default:return e}}function H(e){return e??`dashboard`}function Ke(e){return e}function qe(e){return{label:V(e.level),tone:Ke(e.level)}}function Je(e){return e>0?`error`:`info`}function Ye(e){return{label:e.latestTimestamp?`${e.count} 条`:`错误 ${e.errorCount}`,tone:Je(e.errorCount)}}function U(e){return typeof e!=`number`||Number.isNaN(e)||e<0?`未记录`:e>=1e3?`${(e/1e3).toFixed(e>=1e4?1:2)} s`:`${e} ms`}function Xe(e){let t=[B(e.kind),H(e.source),e.timestamp];return typeof e.durationMs==`number`&&Number.isFinite(e.durationMs)&&e.durationMs>=0&&t.push(U(e.durationMs)),t.join(` · `)}var Ze=[`command`,`build`,`diagnostic`,`hmr`,`system`],Qe=[`info`,`success`,`warning`,`error`];function $e(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function et(e){return typeof e==`string`&&Ze.includes(e)?e:`system`}function tt(e){return typeof e==`string`&&Qe.includes(e)?e:`info`}function W(e,t){return typeof e==`string`&&e.trim()?e:t}function nt(e){return typeof e==`number`&&Number.isFinite(e)&&e>=0?e:void 0}function rt(e){if(!Array.isArray(e))return;let t=e.filter(e=>typeof e==`string`&&e.trim()).map(e=>String(e));return t.length>0?t:void 0}function it(e,t){return{id:W(e.id,`dashboard-runtime-event-${t}`),kind:et(e.kind),level:tt(e.level),title:W(e.title,`untitled event`),detail:W(e.detail,`no event detail`),timestamp:W(e.timestamp,`—`),source:W(e.source,`dashboard`),durationMs:nt(e.durationMs),tags:rt(e.tags)}}function at(e){return{count:1,errorCount:+(e.level===`error`),latestTimestamp:e.timestamp,durationTotal:e.durationMs??0,timedCount:+(typeof e.durationMs==`number`)}}function ot(e,t){return{count:e.count+1,errorCount:e.errorCount+ +(t.level===`error`),latestTimestamp:e.latestTimestamp,durationTotal:e.durationTotal+(t.durationMs??0),timedCount:e.timedCount+ +(typeof t.durationMs==`number`)}}function st(e,t){return{source:e,count:t.count,errorCount:t.errorCount,latestTimestamp:t.latestTimestamp,averageDurationMs:t.timedCount>0?Math.round(t.durationTotal/t.timedCount):void 0}}function ct(e){return{...e,averageDuration:U(e.averageDurationMs)}}function lt(e,t){return $e(e)?it(e,t):null}function G(e){let t=(Array.isArray(e)?e:[e]).map((e,t)=>lt(e,t)).filter(e=>!!e),n=new Map;for(let e of t)n.set(e.id,e);return[...n.values()]}function K(e){let t=new Map;for(let n of e){let e=n.source??`dashboard`,r=t.get(e);if(!r){t.set(e,at(n));continue}t.set(e,ot(r,n))}return Array.from(t,([e,t])=>st(e,t)).sort((e,t)=>t.count-e.count||e.source.localeCompare(t.source,`zh-CN`))}function ut(e){return e.map(e=>ct(e))}var q=Symbol(`dashboard-workspace`);function J(){return new Date().toLocaleTimeString(`zh-CN`,{hour12:!1})}function Y(e,t){return{label:e,value:t}}function X(e){return e}function Z(e){return e}function dt(e){return e}function Q(e){return e}function ft(){let e=l(window.__WEAPP_VITE_ANALYZE_RESULT__??null),n=l(window.__WEAPP_VITE_DASHBOARD_EVENTS__?.length?G(window.__WEAPP_VITE_DASHBOARD_EVENTS__):G(Ve)),r=l(0),i=l(e.value?J():`—`),a=T(()=>{let t=e.value;if(!t)return{packageCount:0,moduleCount:0,duplicateCount:0,totalBytes: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+(t.size??0),0)}}),o=T(()=>e.value?`payload ready`:`awaiting payload`),s=T(()=>e.value?`${a.value.packageCount} 个包 · ${a.value.moduleCount} 个模块`:`尚未接收到 CLI analyze 数据`),c=T(()=>n.value[0]??null),d=T(()=>{let e=n.value.filter(e=>e.level===`error`).length,t=n.value.filter(e=>e.level===`warning`).length,r=n.value.filter(e=>e.kind===`command`).length,i=n.value.filter(e=>typeof e.durationMs==`number`),a=i.length>0?Math.round(i.reduce((e,t)=>e+(t.durationMs??0),0)/i.length):void 0;return[Y(`总事件数`,String(n.value.length)),Y(`命令事件`,String(r)),Y(`已记录耗时`,String(i.length)),Y(`平均耗时`,U(a)),Y(`警告事件`,String(t)),Y(`错误事件`,String(e))]}),f=T(()=>K(n.value)),p=T(()=>[X({label:`页面骨架`,value:`4 个`,iconName:`metric-ready`}),X({label:`连接状态`,value:e.value?`已接入 payload`:`等待注入`,iconName:e.value?`status-live`:`metric-health`}),X({label:`数据同步`,value:`${r.value} 次`,iconName:`metric-latency`}),X({label:`产物体积`,value:e.value?z(a.value.totalBytes):`未载入`,iconName:`metric-quality`}),X({label:`运行事件`,value:`${n.value.length} 条`,iconName:c.value?.level===`error`?`metric-health`:`metric-time`})]),m=T(()=>e.value?[Z({label:`重新分析当前工程`,command:`weapp-vite analyze`,note:`最近同步于 ${i.value},当前可读取 ${a.value.packageCount} 个包。`}),Z({label:`进入构建联调`,command:`weapp-vite build --ui`,note:`当前产物总体积 ${z(a.value.totalBytes)},适合继续核对 chunk 结构。`}),Z({label:`观察开发态更新`,command:`weapp-vite dev --ui`,note:`已记录 ${r.value} 次 payload 同步,后续可继续接入更细粒度事件。`})]:Le),h=T(()=>{let t=[...ze];for(let e of n.value.slice(0,4))t.unshift(dt({time:e.timestamp,title:e.title,summary:e.detail,tone:e.level===`error`||e.level===`warning`?`default`:`live`}));return e.value&&t.unshift(dt({time:i.value,title:`workspace payload received`,summary:`已收到一份真实 analyze 结果,包含 ${a.value.packageCount} 个包和 ${a.value.moduleCount} 个模块。`,tone:`live`})),t}),g=T(()=>{let t=[...Be],n=c.value;return n&&t.unshift(Q({label:`最新运行事件`,detail:`${n.title} · ${n.detail}`,status:n.level})),e.value?[Q({label:`实时分析状态`,detail:`已接入 payload,当前记录 ${a.value.duplicateCount} 个跨包复用模块。`,status:`在线`}),Q({label:`产物规模`,detail:`总产物体积 ${z(a.value.totalBytes)},可继续进入分析页查看 treemap 与最大文件。`,status:`可分析`}),...t]:[Q({label:`CLI 注入链路`,detail:`尚未接收到 analyze payload,当前页面以空态方式工作。`,status:`待接入`}),...t]}),_=e=>{let t=G(e);if(t.length===0)return;let r=[...t,...n.value],i=new Map;for(let e of r)i.set(e.id,e);n.value=[...i.values()].slice(0,24),window.__WEAPP_VITE_DASHBOARD_EVENTS__=[...n.value]},v=()=>{window.__WEAPP_VITE_ANALYZE_RESULT__&&(e.value=window.__WEAPP_VITE_ANALYZE_RESULT__,r.value+=1,i.value=J())},y=e=>{let t=e instanceof CustomEvent?e.detail:null;_(Array.isArray(t)?t:t?[t]:null)};return t(()=>{window.addEventListener(`weapp-analyze:update`,v),window.addEventListener(`weapp-dashboard:event`,y),v(),_(window.__WEAPP_VITE_DASHBOARD_EVENTS__)}),u(()=>{window.removeEventListener(`weapp-analyze:update`,v),window.removeEventListener(`weapp-dashboard:event`,y)}),{resultRef:e,updateCount:r,lastUpdatedAt:i,statusLabel:o,statusSummary:s,commandItems:m,activityItems:h,diagnostics:g,signals:p,runtimeEvents:n,latestRuntimeEvent:c,eventSummary:d,runtimeSourceSummary:f}}function pt(e){d(q,e)}function mt(){let e=D(q,null);if(!e)throw Error(`[dashboard] workspace context is not available`);return e}var ht=[{value:`system`,label:`跟随系统`,iconName:`theme-system`},{value:`light`,label:`亮色`,iconName:`theme-light`},{value:`dark`,label:`暗色`,iconName:`theme-dark`}],gt=[{key:`overview`,label:`总览`,iconName:`tab-overview`},{key:`packages`,label:`包与产物`,iconName:`tab-packages`},{key:`modules`,label:`模块与复用`,iconName:`tab-modules`}],_t={class:`min-h-screen px-3 py-3 text-[color:var(--dashboard-text)] md:px-4 md:py-4 lg:px-5`},vt={class:`mx-auto grid max-w-[1600px] gap-3 lg:grid-cols-[18.5rem_minmax(0,1fr)]`},yt={class:`hidden lg:block`},bt={class:`sticky top-4 space-y-3`},xt={class:`grid gap-2`},St={class:`flex items-start gap-3`},Ct={class:`h-5 w-5`},wt={class:`min-w-0`},Tt={class:`font-medium text-[color:var(--dashboard-text)]`},Et={class:`mt-1 text-xs leading-5 text-[color:var(--dashboard-text-soft)]`},Dt={class:`min-w-0 space-y-3`},Ot={key:0,class:`fixed inset-y-3 left-3 z-50 w-[min(22rem,calc(100vw-1.5rem))] lg:hidden`},kt={class:`grid gap-2`},At={class:`flex items-start gap-3`},jt={class:`h-5 w-5`},Mt={class:`min-w-0`},Nt={class:`font-medium text-[color:var(--dashboard-text)]`},Pt={class:`mt-1 text-xs leading-5 text-[color:var(--dashboard-text-soft)]`},Ft=f({__name:`App`,setup(e){let t=p(),n=s(!1),{themePreference:l,resolvedTheme:u,setThemePreference:d}=I(),f=ft(),m=T(()=>!!f.resultRef.value);Pe({themePreference:l,resolvedTheme:u,setThemePreference:d}),pt(f);let v=T(()=>t.path.startsWith(`/analyze`)?{title:`Analyze Workspace`,description:`保留现有构建分析能力,并把包、模块与分包视图收敛进可持续扩展的应用框架。`}:t.path.startsWith(`/activity`)?{title:`Activity Stream`,description:`用统一的事件、诊断和下一步动作承载未来的 dev/build/ui 运行轨迹。`}:t.path.startsWith(`/tokens`)?{title:`Design Tokens`,description:`集中验证 dashboard 的色彩、表面和排版语义,避免后续页面各自漂移。`}:{title:`Workspace Console`,description:`这是 dashboard 的新入口页,用来承载基础壳子、命令面板和后续不断增强的调试模块。`});b(()=>t.fullPath,()=>{n.value=!1});function y(e,t){return t===`/`?e===`/`:e===t||e.startsWith(`${t}/`)}return(e,s)=>{let p=c(`RouterLink`);return E(),S(`div`,_t,[h(`div`,vt,[h(`aside`,yt,[h(`div`,bt,[_(P,{eyebrow:`Shell`,title:`weapp-vite dashboard`,description:`先搭好稳定壳子,再把 analyze、诊断、日志、MCP 等能力持续挂接进来。`,"icon-name":`hero-system`,tone:`strong`},{default:o(()=>[h(`nav`,xt,[(E(!0),S(x,null,r(i(R),e=>(E(),g(p,{key:e.to,to:e.to,class:a(i(N)(`group rounded-[18px] border px-3 py-3 transition`,y(i(t).path,e.to)?`border-[color:var(--dashboard-border-strong)] bg-[color:var(--dashboard-panel-strong)] shadow-[var(--dashboard-shadow)]`:`border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] hover:border-[color:var(--dashboard-border-strong)] hover:bg-[color:var(--dashboard-panel)]`))},{default:o(()=>[h(`div`,St,[h(`span`,{class:a(i(N)(`flex h-10 w-10 shrink-0 items-center justify-center rounded-2xl`,y(i(t).path,e.to)?`bg-[color:var(--dashboard-accent-soft)] text-[color:var(--dashboard-accent)]`:`bg-[color:var(--dashboard-panel)] text-[color:var(--dashboard-text-soft)] group-hover:text-[color:var(--dashboard-accent)]`))},[h(`span`,Ct,[_(A,{name:e.iconName},null,8,[`name`])])],2),h(`div`,wt,[h(`p`,Tt,O(e.label),1),h(`p`,Et,O(e.caption),1)])])]),_:2},1032,[`to`,`class`]))),128))])]),_:1}),_(P,{eyebrow:`Theme`,title:i(f).statusLabel.value,description:i(f).statusSummary.value,"icon-name":m.value?`status-live`:i(u)===`dark`?`theme-dark`:`theme-light`,padding:`sm`},null,8,[`title`,`description`,`icon-name`])])]),h(`div`,Dt,[_(ye,{title:v.value.title,description:v.value.description,"theme-options":i(ht),"theme-preference":i(l),onMenu:s[0]||=e=>n.value=!0,onSetTheme:i(d)},null,8,[`title`,`description`,`theme-options`,`theme-preference`,`onSetTheme`]),_(i(ee))])]),_(w,{"enter-active-class":`transition duration-200 ease-out`,"enter-from-class":`opacity-0`,"enter-to-class":`opacity-100`,"leave-active-class":`transition duration-150 ease-in`,"leave-from-class":`opacity-100`,"leave-to-class":`opacity-0`},{default:o(()=>[n.value?(E(),S(`div`,{key:0,class:`fixed inset-0 z-40 bg-slate-950/35 backdrop-blur-sm lg:hidden`,onClick:s[1]||=e=>n.value=!1})):C(``,!0)]),_:1}),_(w,{"enter-active-class":`transition duration-200 ease-out`,"enter-from-class":`-translate-x-6 opacity-0`,"enter-to-class":`translate-x-0 opacity-100`,"leave-active-class":`transition duration-150 ease-in`,"leave-from-class":`translate-x-0 opacity-100`,"leave-to-class":`-translate-x-6 opacity-0`},{default:o(()=>[n.value?(E(),S(`aside`,Ot,[_(P,{eyebrow:`Navigation`,title:`Workspace Modules`,description:`路由已经是第一层扩展边界,后续增强优先新增页面,不再继续堆叠单页。`,"icon-name":`nav-menu`,tone:`strong`,"content-class":`h-full`},{default:o(()=>[h(`nav`,kt,[(E(!0),S(x,null,r(i(R),e=>(E(),g(p,{key:e.to,to:e.to,class:a(i(N)(`group rounded-[18px] border px-3 py-3 transition`,y(i(t).path,e.to)?`border-[color:var(--dashboard-border-strong)] bg-[color:var(--dashboard-panel-strong)] shadow-[var(--dashboard-shadow)]`:`border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] hover:border-[color:var(--dashboard-border-strong)] hover:bg-[color:var(--dashboard-panel)]`)),onClick:s[2]||=e=>n.value=!1},{default:o(()=>[h(`div`,At,[h(`span`,{class:a(i(N)(`flex h-10 w-10 shrink-0 items-center justify-center rounded-2xl`,y(i(t).path,e.to)?`bg-[color:var(--dashboard-accent-soft)] text-[color:var(--dashboard-accent)]`:`bg-[color:var(--dashboard-panel)] text-[color:var(--dashboard-text-soft)] group-hover:text-[color:var(--dashboard-accent)]`))},[h(`span`,jt,[_(A,{name:e.iconName},null,8,[`name`])])],2),h(`div`,Mt,[h(`p`,Nt,O(e.label),1),h(`p`,Pt,O(e.caption),1)])])]),_:2},1032,[`to`,`class`]))),128))])]),_:1})])):C(``,!0)]),_:1})])}}}),It=(function(){let e=typeof document<`u`&&document.createElement(`link`).relList;return e&&e.supports&&e.supports(`modulepreload`)?`modulepreload`:`preload`})(),Lt=function(e,t){return new URL(e,t).href},Rt={},$=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=Lt(t,n),t in Rt)return;Rt[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:It,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},zt=te({history:y(),routes:[{path:`/`,name:`/`,component:()=>$(()=>import(`./pages.js`),[],import.meta.url)},{path:`/activity`,name:`/activity`,component:()=>$(()=>import(`./activity.js`),[],import.meta.url)},{path:`/analyze`,name:`/analyze`,component:()=>$(()=>import(`./analyze.js`),[],import.meta.url)},{path:`/tokens`,name:`/tokens`,component:()=>$(()=>import(`./tokens.js`),[],import.meta.url)}]});function Bt(){let e=m(Ft);e.config.errorHandler=(e,t,n)=>{},e.use(zt),e.mount(`#app`)}try{Bt()}catch{}export{A,xe as C,Te as D,we as E,be as O,P as S,Ce as T,Re as _,K as a,R as b,We as c,Ue as d,B as f,Ge as g,H as h,ut as i,j as k,z as l,Xe as m,ht as n,qe as o,V as p,mt as r,Ye as s,gt as t,U as u,He as v,Se as w,Fe as x,Ie as y};
@@ -1 +1 @@
1
- import{E as e,F as t,M as n,_ as r,b as i,d as a,f as o,g as s,h as c,l,m as u,t as d,w as f,z as p}from"./vue.js";import{_ as m,c as h,i as g,l as _,s as v}from"./shell.js";import{r as y}from"./index.js";import{t as b}from"./AppInsetPanel.js";import{t as x}from"./AppSectionHeading.js";import{t as S}from"./AppIconFeatureCard.js";var C={class:`grid gap-3`},w={class:`grid gap-3 xl:grid-cols-[minmax(0,1.35fr)_minmax(18rem,0.8fr)]`},T={class:`grid gap-3 md:grid-cols-3`},E={class:`grid gap-3`},D={class:`grid gap-2 text-sm`},O={class:`inline-flex items-center gap-2`},k={class:`h-4.5 w-4.5 text-[color:var(--dashboard-accent)]`},A={class:`text-[color:var(--dashboard-text)]`},j={class:`grid gap-3 md:grid-cols-2 xl:grid-cols-4`},M={class:`grid gap-3 xl:grid-cols-[minmax(0,1.1fr)_minmax(20rem,0.9fr)]`},N={class:`mt-4 grid gap-3`},P={class:`flex flex-col gap-2 md:flex-row md:items-center md:justify-between`},F={class:`font-medium`},I={class:`mt-1 text-sm text-[color:var(--dashboard-text-muted)]`},L={class:`rounded-xl bg-slate-950 px-3 py-2 text-xs text-slate-100 dark:bg-slate-900`},R={class:`grid gap-2 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},z=r({__name:`index`,setup(r){let{commandItems:z,signals:B}=y(),V=h.map(e=>({iconName:e.iconName,title:e.label,description:e.caption}));return(r,y)=>(f(),u(`div`,C,[s(_,{eyebrow:`Workspace`,title:`面向持续增强的 dashboard 壳子`,description:`这一版先不急着继续堆业务逻辑,而是把信息架构、导航分层、主题切换和组件基座先收住。后面要接 analyze、dev server、MCP 或任务执行状态,都可以直接沿着路由扩展。`,"icon-name":`hero-workspace`,tone:`strong`,padding:`header`},{default:n(()=>[a(`div`,w,[a(`div`,T,[(f(!0),u(l,null,e(t(v),e=>(f(),o(S,i({key:e.title},{ref_for:!0},e),null,16))),128))]),a(`div`,E,[s(b,{eyebrow:`rollout signal`},{default:n(()=>[a(`ul`,D,[(f(!0),u(l,null,e(t(B),e=>(f(),u(`li`,{key:e.label,class:`flex items-center justify-between gap-3 rounded-2xl border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel)] px-3 py-3`},[a(`span`,O,[a(`span`,k,[s(m,{name:e.iconName},null,8,[`name`])]),c(` `+p(e.label),1)]),a(`strong`,A,p(e.value),1)]))),128))])]),_:1})])])]),_:1}),s(_,{eyebrow:`Routes`,title:`页面跳转入口`,description:`工作台本身也要承担路由索引职责,后续页面越来越多时,首页需要负责把用户送到正确的功能区域。`,"icon-name":`nav-home`},{default:n(()=>[a(`div`,j,[(f(!0),u(l,null,e(t(h),(e,r)=>(f(),o(t(d),{key:e.to,to:e.to},{default:n(()=>[s(S,i({ref_for:!0},t(V)[r],{interactive:``}),null,16)]),_:2},1032,[`to`]))),128))])]),_:1}),a(`section`,M,[s(_,{tone:`default`,padding:`md`},{default:n(()=>[s(x,{eyebrow:`Commands`,title:`首轮操作面板`,description:`这里先用假数据承载常用动作。等 CLI 和 dashboard 进一步打通后,可以把这些条目替换成真实任务状态、最近运行记录和直接操作入口。`}),a(`div`,N,[(f(!0),u(l,null,e(t(z),e=>(f(),u(`article`,{key:e.command,class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] p-4`},[a(`div`,P,[a(`div`,null,[a(`h3`,F,p(e.label),1),a(`p`,I,p(e.note),1)]),a(`code`,L,p(e.command),1)])]))),128))])]),_:1}),s(_,{eyebrow:`Guardrails`,title:`第一轮增强原则`,description:`先做壳子,不急着过度抽象数据模型。所有新增页面都要能在没有真实 payload 的情况下独立预览。`,"icon-name":`metric-quality`},{default:n(()=>[a(`ol`,R,[(f(!0),u(l,null,e(t(g),e=>(f(),u(`li`,{key:e,class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-4 py-3`},p(e),1))),128))])]),_:1})])]))}});export{z as default};
1
+ import{E as e,F as t,M as n,_ as r,b as i,d as a,f as o,g as s,h as c,l,m as u,t as d,w as f,z as p}from"./vue.js";import{A as m,S as h,_ as g,b as _,r as v,y}from"./index.js";import{t as b}from"./AppInsetPanel.js";import{t as x}from"./AppSectionHeading.js";import{t as S}from"./AppIconFeatureCard.js";var C={class:`grid gap-3`},w={class:`grid gap-3 xl:grid-cols-[minmax(0,1.35fr)_minmax(18rem,0.8fr)]`},T={class:`grid gap-3 md:grid-cols-3`},E={class:`grid gap-3`},D={class:`grid gap-2 text-sm`},O={class:`inline-flex items-center gap-2`},k={class:`h-4.5 w-4.5 text-[color:var(--dashboard-accent)]`},A={class:`text-[color:var(--dashboard-text)]`},j={class:`grid gap-3 md:grid-cols-2 xl:grid-cols-4`},M={class:`grid gap-3 xl:grid-cols-[minmax(0,1.1fr)_minmax(20rem,0.9fr)]`},N={class:`mt-4 grid gap-3`},P={class:`flex flex-col gap-2 md:flex-row md:items-center md:justify-between`},F={class:`font-medium`},I={class:`mt-1 text-sm text-[color:var(--dashboard-text-muted)]`},L={class:`rounded-xl bg-slate-950 px-3 py-2 text-xs text-slate-100 dark:bg-slate-900`},R={class:`grid gap-2 text-sm leading-6 text-[color:var(--dashboard-text-muted)]`},z=r({__name:`index`,setup(r){let{commandItems:z,signals:B}=v(),V=_.map(e=>({iconName:e.iconName,title:e.label,description:e.caption}));return(r,v)=>(f(),u(`div`,C,[s(h,{eyebrow:`Workspace`,title:`面向持续增强的 dashboard 壳子`,description:`这一版先不急着继续堆业务逻辑,而是把信息架构、导航分层、主题切换和组件基座先收住。后面要接 analyze、dev server、MCP 或任务执行状态,都可以直接沿着路由扩展。`,"icon-name":`hero-workspace`,tone:`strong`,padding:`header`},{default:n(()=>[a(`div`,w,[a(`div`,T,[(f(!0),u(l,null,e(t(y),e=>(f(),o(S,i({key:e.title},{ref_for:!0},e),null,16))),128))]),a(`div`,E,[s(b,{eyebrow:`rollout signal`},{default:n(()=>[a(`ul`,D,[(f(!0),u(l,null,e(t(B),e=>(f(),u(`li`,{key:e.label,class:`flex items-center justify-between gap-3 rounded-2xl border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel)] px-3 py-3`},[a(`span`,O,[a(`span`,k,[s(m,{name:e.iconName},null,8,[`name`])]),c(` `+p(e.label),1)]),a(`strong`,A,p(e.value),1)]))),128))])]),_:1})])])]),_:1}),s(h,{eyebrow:`Routes`,title:`页面跳转入口`,description:`工作台本身也要承担路由索引职责,后续页面越来越多时,首页需要负责把用户送到正确的功能区域。`,"icon-name":`nav-home`},{default:n(()=>[a(`div`,j,[(f(!0),u(l,null,e(t(_),(e,r)=>(f(),o(t(d),{key:e.to,to:e.to},{default:n(()=>[s(S,i({ref_for:!0},t(V)[r],{interactive:``}),null,16)]),_:2},1032,[`to`]))),128))])]),_:1}),a(`section`,M,[s(h,{tone:`default`,padding:`md`},{default:n(()=>[s(x,{eyebrow:`Commands`,title:`首轮操作面板`,description:`这里先用假数据承载常用动作。等 CLI 和 dashboard 进一步打通后,可以把这些条目替换成真实任务状态、最近运行记录和直接操作入口。`}),a(`div`,N,[(f(!0),u(l,null,e(t(z),e=>(f(),u(`article`,{key:e.command,class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] p-4`},[a(`div`,P,[a(`div`,null,[a(`h3`,F,p(e.label),1),a(`p`,I,p(e.note),1)]),a(`code`,L,p(e.command),1)])]))),128))])]),_:1}),s(h,{eyebrow:`Guardrails`,title:`第一轮增强原则`,description:`先做壳子,不急着过度抽象数据模型。所有新增页面都要能在没有真实 payload 的情况下独立预览。`,"icon-name":`metric-quality`},{default:n(()=>[a(`ol`,R,[(f(!0),u(l,null,e(t(g),e=>(f(),u(`li`,{key:e,class:`rounded-[18px] border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)] px-4 py-3`},p(e),1))),128))])]),_:1})])]))}});export{z as default};
@@ -1 +1 @@
1
- import{E as e,F as t,I as n,M as r,R as i,_ as a,b as o,d as s,f as c,g as l,l as u,m as d,u as f,w as p,z as m}from"./vue.js";import{d as h,l as g,o as _}from"./shell.js";import{n as v}from"./index.js";import{t as y}from"./AppSectionHeading.js";import{t as b}from"./AppIconFeatureCard.js";var x=a({__name:`AppSurfaceSampleCard`,props:{label:{},tone:{}},setup(e){function t(e){switch(e){case`strong`:return`border border-[color:var(--dashboard-border-strong)] bg-[color:var(--dashboard-panel-strong)] shadow-[var(--dashboard-shadow)]`;case`muted`:return`border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)]`;default:return`border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel)]`}}return(r,i)=>(p(),d(`div`,{class:n([`rounded-[18px] p-4`,t(e.tone)])},m(e.label),3))}}),S={class:`flex items-center justify-between gap-3`},C={class:`text-xs text-[color:var(--dashboard-text-soft)]`},w=a({__name:`AppTokenSwatch`,props:{name:{},sample:{}},setup(e){let r=e,a=f(()=>({background:r.sample}));return(r,o)=>(p(),d(`li`,{class:n(t(h)())},[s(`div`,S,[s(`code`,C,m(e.name),1),s(`span`,{class:`h-8 w-14 rounded-xl border border-[color:var(--dashboard-border)]`,style:i(a.value)},null,4)])],2))}}),T={class:`grid gap-3`},E={class:`mt-5 grid gap-3 lg:grid-cols-3`},D={class:`grid gap-3 lg:grid-cols-3`},O={class:`grid gap-3`},k={class:`grid gap-3 xl:grid-cols-[minmax(0,1fr)_minmax(0,1fr)]`},A={class:`grid gap-3 md:grid-cols-3`},j=a({__name:`tokens`,setup(n){let i=[{label:`Default surface`,tone:`default`},{label:`Strong surface`,tone:`strong`},{label:`Muted surface`,tone:`muted`}],a=v.map(e=>({iconName:e.iconName,title:e.label,meta:e.value}));return(n,f)=>(p(),d(`div`,T,[l(g,{tone:`strong`,padding:`md`},{default:r(()=>[l(y,{eyebrow:`System`,title:`设计令牌与组件语义`,description:`这个页面不是给最终用户看的功能页,而是给 dashboard 自己看的设计控制台。后面改视觉体系时,先看这里再改其它页面。`}),s(`div`,E,[(p(!0),d(u,null,e(t(a),e=>(p(),c(b,o({key:e.meta},{ref_for:!0},e),null,16))),128))])]),_:1}),s(`section`,D,[(p(!0),d(u,null,e(t(_),t=>(p(),c(g,{key:t.title,title:t.title,"icon-name":t.iconName,padding:`md`},{default:r(()=>[s(`ul`,O,[(p(!0),d(u,null,e(t.tokens,e=>(p(),c(w,o({key:e.name},{ref_for:!0},e),null,16))),128))])]),_:2},1032,[`title`,`icon-name`]))),128))]),s(`section`,k,[l(g,{eyebrow:`Components`,title:`标准表面`,description:`统一的圆角、边框和阴影会比单独页面自由发挥更重要。`,"icon-name":`token-surface`},{default:r(()=>[s(`div`,A,[(p(),d(u,null,e(i,e=>l(x,o({key:e.label},{ref_for:!0},e),null,16)),64))])]),_:1}),l(g,{eyebrow:`Typography`,title:`文本层级`,description:`dashboard 需要明显的技术控制台语义,而不是普通后台模板样式。`,"icon-name":`token-type`},{default:r(()=>[...f[0]||=[s(`div`,{class:`space-y-3`},[s(`p`,{class:`text-3xl font-semibold tracking-tight`},` IBM Plex Sans Console `),s(`p`,{class:`text-base text-[color:var(--dashboard-text-muted)]`},` 说明文案采用偏紧凑的行高和较高的信息密度,适合后续挂载构建分析、事件流和诊断面板。 `),s(`p`,{class:`text-sm uppercase tracking-[0.24em] text-[color:var(--dashboard-text-soft)]`},` uppercased meta labels for control surfaces `)],-1)]]),_:1})])]))}});export{j as default};
1
+ import{E as e,F as t,I as n,M as r,R as i,_ as a,b as o,d as s,f as c,g as l,l as u,m as d,u as f,w as p,z as m}from"./vue.js";import{S as h,n as g,v as _,w as v}from"./index.js";import{t as y}from"./AppSectionHeading.js";import{t as b}from"./AppIconFeatureCard.js";var x=a({__name:`AppSurfaceSampleCard`,props:{label:{},tone:{}},setup(e){function t(e){switch(e){case`strong`:return`border border-[color:var(--dashboard-border-strong)] bg-[color:var(--dashboard-panel-strong)] shadow-[var(--dashboard-shadow)]`;case`muted`:return`border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel-muted)]`;default:return`border border-[color:var(--dashboard-border)] bg-[color:var(--dashboard-panel)]`}}return(r,i)=>(p(),d(`div`,{class:n([`rounded-[18px] p-4`,t(e.tone)])},m(e.label),3))}}),S={class:`flex items-center justify-between gap-3`},C={class:`text-xs text-[color:var(--dashboard-text-soft)]`},w=a({__name:`AppTokenSwatch`,props:{name:{},sample:{}},setup(e){let r=e,a=f(()=>({background:r.sample}));return(r,o)=>(p(),d(`li`,{class:n(t(v)())},[s(`div`,S,[s(`code`,C,m(e.name),1),s(`span`,{class:`h-8 w-14 rounded-xl border border-[color:var(--dashboard-border)]`,style:i(a.value)},null,4)])],2))}}),T={class:`grid gap-3`},E={class:`mt-5 grid gap-3 lg:grid-cols-3`},D={class:`grid gap-3 lg:grid-cols-3`},O={class:`grid gap-3`},k={class:`grid gap-3 xl:grid-cols-[minmax(0,1fr)_minmax(0,1fr)]`},A={class:`grid gap-3 md:grid-cols-3`},j=a({__name:`tokens`,setup(n){let i=[{label:`Default surface`,tone:`default`},{label:`Strong surface`,tone:`strong`},{label:`Muted surface`,tone:`muted`}],a=g.map(e=>({iconName:e.iconName,title:e.label,meta:e.value}));return(n,f)=>(p(),d(`div`,T,[l(h,{tone:`strong`,padding:`md`},{default:r(()=>[l(y,{eyebrow:`System`,title:`设计令牌与组件语义`,description:`这个页面不是给最终用户看的功能页,而是给 dashboard 自己看的设计控制台。后面改视觉体系时,先看这里再改其它页面。`}),s(`div`,E,[(p(!0),d(u,null,e(t(a),e=>(p(),c(b,o({key:e.meta},{ref_for:!0},e),null,16))),128))])]),_:1}),s(`section`,D,[(p(!0),d(u,null,e(t(_),t=>(p(),c(h,{key:t.title,title:t.title,"icon-name":t.iconName,padding:`md`},{default:r(()=>[s(`ul`,O,[(p(!0),d(u,null,e(t.tokens,e=>(p(),c(w,o({key:e.name},{ref_for:!0},e),null,16))),128))])]),_:2},1032,[`title`,`icon-name`]))),128))]),s(`section`,k,[l(h,{eyebrow:`Components`,title:`标准表面`,description:`统一的圆角、边框和阴影会比单独页面自由发挥更重要。`,"icon-name":`token-surface`},{default:r(()=>[s(`div`,A,[(p(),d(u,null,e(i,e=>l(x,o({key:e.label},{ref_for:!0},e),null,16)),64))])]),_:1}),l(h,{eyebrow:`Typography`,title:`文本层级`,description:`dashboard 需要明显的技术控制台语义,而不是普通后台模板样式。`,"icon-name":`token-type`},{default:r(()=>[...f[0]||=[s(`div`,{class:`space-y-3`},[s(`p`,{class:`text-3xl font-semibold tracking-tight`},` IBM Plex Sans Console `),s(`p`,{class:`text-base text-[color:var(--dashboard-text-muted)]`},` 说明文案采用偏紧凑的行高和较高的信息密度,适合后续挂载构建分析、事件流和诊断面板。 `),s(`p`,{class:`text-sm uppercase tracking-[0.24em] text-[color:var(--dashboard-text-soft)]`},` uppercased meta labels for control surfaces `)],-1)]]),_:1})])]))}});export{j as default};