scrum-skills 0.3.6 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +224 -224
  2. package/assets/board/200.html +1 -1
  3. package/assets/board/404.html +1 -1
  4. package/assets/board/_nuxt/{D1V1gysQ.js → 1XlYaCp9.js} +1 -1
  5. package/assets/board/_nuxt/{DwzGxoX2.js → BXL77dAA.js} +1 -1
  6. package/assets/board/_nuxt/BgYBC1A-.js +1 -0
  7. package/assets/board/_nuxt/{DwCE3305.js → BizDeOK5.js} +1 -1
  8. package/assets/board/_nuxt/{BGwhkDRl.js → BtzUbHO_.js} +1 -1
  9. package/assets/board/_nuxt/{NtgBvUDk.js → COK7QeK2.js} +1 -1
  10. package/assets/board/_nuxt/{BmrSh0rL.js → COecDWbb.js} +1 -1
  11. package/assets/board/_nuxt/{CoipdpDu.js → ChUHb39z.js} +1 -1
  12. package/assets/board/_nuxt/{Dh0tYNMD.js → CitsykCR.js} +4 -4
  13. package/assets/board/_nuxt/DPGo7nC4.js +3 -0
  14. package/assets/board/_nuxt/{Cajxc4Dw.js → DZ--fXuU.js} +1 -1
  15. package/assets/board/_nuxt/D_ct-Stz.js +1 -1
  16. package/assets/board/_nuxt/JybTzB-y.js +1 -0
  17. package/assets/board/_nuxt/_id_.JsxT0cgo.css +1 -0
  18. package/assets/board/_nuxt/builds/latest.json +1 -1
  19. package/assets/board/_nuxt/builds/meta/ef150044-a595-4b33-8a1a-103e86dccf28.json +1 -0
  20. package/assets/board/_nuxt/burndown.CT8fx1Ge.css +1 -0
  21. package/assets/board/_nuxt/diagrams.BWgRXpo3.css +1 -0
  22. package/assets/board/_nuxt/{entry.Birf8F5Z.css → entry.DplN301E.css} +1 -1
  23. package/assets/board/_nuxt/epics.CUeDIEa0.css +1 -0
  24. package/assets/board/_nuxt/error-404.Y9imKiDC.css +1 -0
  25. package/assets/board/_nuxt/error-500.DufSBGVC.css +1 -0
  26. package/assets/board/_nuxt/gantt.CiC2Ts1t.css +1 -0
  27. package/assets/board/_nuxt/last-change.Byf5fhdY.css +1 -0
  28. package/assets/board/_nuxt/milestones.CCdemaYm.css +1 -0
  29. package/assets/board/_nuxt/{b7xtxFRl.js → oSJF4yHw.js} +1 -1
  30. package/assets/board/_nuxt/pages.BshWbOyo.css +1 -0
  31. package/assets/board/_nuxt/tests.Ci9fBCka.css +1 -0
  32. package/assets/board/burndown/index.html +1 -1
  33. package/assets/board/diagrams/index.html +1 -1
  34. package/assets/board/epics/index.html +1 -1
  35. package/assets/board/favicon.svg +16 -16
  36. package/assets/board/gantt/index.html +1 -1
  37. package/assets/board/index.html +1 -1
  38. package/assets/board/last-change/index.html +1 -1
  39. package/assets/board/milestones/index.html +1 -1
  40. package/assets/board/tests/index.html +1 -1
  41. package/bin/scrum-skills.mjs +204 -204
  42. package/docs/ai-assistant-guide.md +1009 -1009
  43. package/package.json +1 -1
  44. package/templates/AGENTS.md +84 -84
  45. package/tools/agile-tools.mjs +510 -510
  46. package/tools/ai.mjs +508 -508
  47. package/tools/git-commit.mjs +216 -216
  48. package/tools/projects.mjs +240 -240
  49. package/tools/serve.mjs +182 -182
  50. package/assets/board/_nuxt/C-fx-vFO.js +0 -1
  51. package/assets/board/_nuxt/D5AHQ-N9.js +0 -3
  52. package/assets/board/_nuxt/_id_.B6iqDPxe.css +0 -1
  53. package/assets/board/_nuxt/builds/meta/36a46dc2-c9fd-444c-a454-4487435c77b9.json +0 -1
  54. package/assets/board/_nuxt/burndown.Do6IbM6o.css +0 -1
  55. package/assets/board/_nuxt/diagrams.pyhqNtmr.css +0 -1
  56. package/assets/board/_nuxt/epics.Dmessplu.css +0 -1
  57. package/assets/board/_nuxt/error-404.CgJNdpB5.css +0 -1
  58. package/assets/board/_nuxt/error-500.WYSoH44y.css +0 -1
  59. package/assets/board/_nuxt/gantt.Dmp00GUo.css +0 -1
  60. package/assets/board/_nuxt/last-change._l3ydJ-o.css +0 -1
  61. package/assets/board/_nuxt/milestones.Bp6jmeAm.css +0 -1
  62. package/assets/board/_nuxt/pages.Dbj2IVk8.css +0 -1
  63. package/assets/board/_nuxt/tests.dXlUX16A.css +0 -1
@@ -0,0 +1,3 @@
1
+ import{t as e}from"./DJM7u8P3.js";import{t}from"./CI0scS-N.js";import{I as n,i as r,s as i}from"#entry";import{At as a,B as o,I as ee,K as s,N as te,S as ne,U as c,Xt as l,Yt as re,at as ie,b as u,d,f,i as p,lt as ae,m,p as h,qt as g,s as _,u as v,v as oe,xt as y,y as b}from"./BxuBMtk_.js";import{c as x}from"./BygIGL69.js";import{t as se}from"./BgYBC1A-.js";var ce={added:`新增`,updated:`状态变更`,removed:`移除`},le=`更新交付记录`,S=`变更`,C=e=>typeof e==`string`?e.replace(/\s+/g,` `).trim():``;function ue(e){let t=Array.isArray(e?.changes)?e.changes:[],n=C(e?.title)||le,r=t.some(e=>e?.action===`added`)?`feat`:`chore`,i=[];for(let e of t){let t=C(e?.id);if(!t)continue;let n=C(e.title)||C(e.note),r=ce[e.action]||C(e.action)||S;e.action===`updated`&&(C(e.from)||C(e.to))&&(r+=` ${C(e.from)||`—`} → ${C(e.to)||`—`}`),i.push(`- ${t}${n?` ${n}`:``}(${r})`)}return i.length?`${r}: ${n}\n\n${i.join(`
2
+ `)}`:`${r}: ${n}`}var de={class:`rule-top`},fe={class:`rule-ic`},pe={class:`rule-state`},me={class:`mono`},he={key:0},ge={class:`rule-cases`},_e={class:`case-when`},ve={class:`case-then`},ye={key:1,class:`lc-hist-bar`},be={class:`hist-badge`},xe={class:`hist-readonly mono`},Se=[`title`,`disabled`,`onClick`],Ce={key:2,class:`card lc-empty`},we={class:`em-ic`},Te={key:3,class:`lc`},Ee={class:`lc-hero`},De={class:`hero-body`},Oe={class:`hero-kicker`},ke={class:`k-date mono`},Ae={key:0,class:`k-time mono`},je={key:1,class:`k-today`},Me=[`title`],Ne={class:`hero-title`},Pe={key:0,class:`hero-points`},Fe={key:1,class:`hero-sum`},Ie={class:`hero-meta`},Le={class:`hero-aside`},Re={class:`ring-in`},ze={class:`lc-nav`,"aria-label":`分区导航`},Be=[`href`,`onClick`],Ve={class:`lc-nav-lb`},He={class:`lc-nav-ct`},Ue={id:`lc-scenarios`,class:`lc-sc-sec`},We={class:`s-hd solo`},Ge={class:`s-ic tone-mint`},Ke={class:`s-count`},qe={key:0,class:`dim sec-empty`},Je={key:1,class:`lc-sc-grid`},Ye={class:`sc-hd`},Xe={class:`sc-id mono`},Ze={class:`sc-title`},Qe={key:0,class:`sc-body`},$e={class:`lc-sc-steps`},et={class:`sc-acc`},tt={class:`sc-acc-h`},nt={class:`sc-acc-t`},rt={key:0,class:`sc-foot`},it={key:0},at={key:1,class:`sc-ids`},ot={key:0,id:`lc-access`,class:`card sec lc-access`},st={class:`s-hd`},ct={class:`s-ic tone-sky`},lt={class:`s-count`},ut={class:`sec-bd acc-grid`},dt={key:0,class:`acc-col`},ft={class:`u-head`},pt=[`href`],mt={class:`u-label`},ht=[`onClick`],gt={class:`u-url mono`},_t={key:0,class:`u-note`},vt={key:1,class:`acc-col`},yt={class:`a-head`},bt={key:0,class:`a-role`},xt={class:`a-user mono`},St=[`onClick`],Ct={class:`a-line`},wt={key:0,class:`a-pass mono`},Tt={key:1,class:`a-none dim`},Et={key:0,class:`a-note`},Dt={key:1,id:`lc-prep`,class:`card sec lc-prep`},Ot={class:`s-hd`},kt={class:`s-ic tone-amber`},At={class:`s-count`},jt={class:`steps`},Mt={class:`step-bd`},Nt={class:`step-text`},Pt={key:0,class:`cmd-row`},Ft={class:`cmd mono`},It=[`onClick`],Lt={key:1,class:`step-note`},Rt={id:`lc-changes`,class:`card sec`},zt={class:`s-hd`},Bt={class:`s-ic`},Vt={class:`s-count`},Ht={key:0,class:`sec-empty dim`},Ut={key:1,class:`tbl-wrap`},Wt={class:`tbl lc-tbl`},Gt={class:`ent`},Kt={class:`ent-top`},qt={key:0,class:`ent-title`},Jt={key:0,class:`flow mono`},Yt={class:`fl`},Xt={class:`fl`},Zt={class:`cell-note`},Qt={class:`chips`},$t=[`title`],en={key:0,class:`dim`},tn={class:`two`},nn={id:`lc-extras`,class:`card sec`},rn={class:`s-hd`},an={class:`s-ic`},on={class:`s-count`},sn={class:`sec-bd lc-extras`},cn={key:0,class:`dim`},ln={class:`x-body`},un={class:`x-title`},dn={key:0,class:`x-detail`},fn={key:1,class:`chips x-files`},pn=[`title`],mn={id:`lc-checks`,class:`card sec`},hn={class:`s-hd`},gn={class:`s-ic tone-mint`},_n={class:`s-count`},vn={class:`sec-bd lc-checks`},yn={key:0,class:`dim`},bn={class:`v-body`},xn={class:`v-what`},Sn={key:0,class:`v-detail`},Cn={class:`two`},wn={id:`lc-notes`,class:`card sec`},Tn={class:`s-hd`},En={class:`s-ic`},Dn={class:`s-count`},On={class:`sec-bd`},kn={key:0,class:`dim`},An={key:1,class:`lc-notes`},jn={key:0,id:`lc-open`,class:`card sec sec-warn`},Mn={class:`s-hd`},Nn={class:`s-ic`},Pn={class:`s-count`},Fn={class:`sec-bd`},In={class:`lc-notes warn`},Ln={class:`lc-hist`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`lc-hist-title`},Rn={class:`lc-hist-hd`},zn={class:`lc-hist-hd-txt`},Bn={class:`lc-hist-sub`},Vn={key:0,class:`lc-hist-err`},Hn={key:1,class:`lc-hist-hint dim`},Un={key:2,class:`lc-hist-list`},Wn=[`disabled`,`onClick`],Gn={class:`hist-item-main`},Kn={class:`mono`},qn={class:`mono hist-item-hash`},Jn={key:0,class:`lc-hist-hint dim`},Yn={class:`lc-hist-ft`},Xn={class:`lc-hist lc-commit`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`lc-commit-title`},Zn={class:`lc-hist-hd`},Qn=[`disabled`],$n={key:0,class:`cm-done`},er={class:`cm-done-ic`},tr={class:`cm-done-bd`},nr={class:`cm-done-t`},rr={class:`mono`},ir={class:`cm-done-s`},ar={class:`cm-done-n`},or={key:1,class:`cm-body`},sr={class:`cm-msg mono`},cr={class:`micro`},lr={key:0,class:`cm-hint dim`},ur={key:1,class:`cm-hint warn`},dr={key:2,class:`cm-hint warn`},fr={key:3,class:`cm-hint dim`},pr={key:4,class:`cm-files`},mr=[`title`],hr={key:2,class:`lc-hist-err`},gr={class:`lc-hist-ft`},_r={class:`dim`},vr={class:`cm-acts`},yr=[`disabled`],br=[`disabled`],w=r(ne({__name:`last-change`,setup(r){let{lastChange:ne,lastChangeGit:ce,refresh:le}=i(),S=y(null),C=v(()=>S.value?.doc?.lastChange??ne.value),w=v(()=>ce.value),T=y([]),E=y(!1),D=y(!1),O=y(``),k=y(!1),xr=v(()=>S.value?[S.value]:[]);async function Sr(){if(!D.value){D.value=!0,O.value=``;try{let e=await n(`/api/agile/last-change/history`);T.value=e.entries??[]}catch(e){O.value=e?.data?.error||e?.message||`读不到 git 历史`}finally{D.value=!1}}}async function A(){E.value=!0,T.value.length||await Sr()}async function Cr(e){if(!k.value){k.value=!0,O.value=``;try{S.value=await n(`/api/agile/last-change/revision`,{query:{hash:e.hash}}),E.value=!1,window.scrollTo({top:0,behavior:`smooth`})}catch(e){O.value=e?.data?.error||e?.message||`取不到这个版本`}finally{k.value=!1}}}function wr(){S.value=null,window.scrollTo({top:0,behavior:`smooth`})}let Tr=y(null);ie(S,async()=>{await te(),Tr.value?.querySelector(`.hist-tab.on`)?.scrollIntoView({inline:`nearest`,block:`nearest`})});function Er(e){e.key===`Escape`&&(J.value?$():E.value&&=!1)}o(()=>window.addEventListener(`keydown`,Er)),ee(()=>window.removeEventListener(`keydown`,Er));let Dr={committed:{text:`已提交`,tone:`ok`},dirty:{text:`未提交改动`,tone:`warn`},untracked:{text:`未纳入版本库`,tone:`warn`},"no-git":{text:`非 git 仓库`,tone:`neutral`},missing:{text:`尚未生成`,tone:`neutral`}},j=v(()=>Dr[w.value?.state??`missing`]??Dr.missing),Or=[{key:`committed`,when:`已提交`,then:`下次写入整份覆盖;上一版留在 git 历史里,点「查看历史」随时翻回来`},{key:`pending`,when:`未提交`,then:`下次写入合并:新交付接在旧记录后面,不冲掉还没入库的内容`}],kr=v(()=>{let e=w.value?.state;return e===`committed`?`committed`:e===`dirty`||e===`untracked`||e===`no-git`?`pending`:``}),M=v(()=>se(C.value?.summary)),Ar=v(()=>(C.value?.mergedFrom?.length??0)+1),jr=v(()=>(C.value?.mergedFrom??[]).map(e=>`${e.at??``} ${e.title??``}`.trim()).filter(Boolean).join(`
3
+ `)),Mr={added:`新增`,updated:`状态变更`,removed:`移除`},Nr={story:`故事`,task:`任务`},Pr={pass:`通过`,fail:`失败`,partial:`部分`,skipped:`未跑`},Fr={pass:`i-lucide-check`,fail:`i-lucide-x`,partial:`i-lucide-minus`,skipped:`i-lucide-minus`},N=v(()=>C.value?.changes??[]),P=v(()=>ue(C.value??{})),F=v(()=>C.value?.extras??[]),I=v(()=>C.value?.verification??[]),L=v(()=>C.value?.scenarios??[]),R=v(()=>C.value?.preparation??[]),z=v(()=>C.value?.notes??[]),B=v(()=>C.value?.open??[]),V=v(()=>C.value?.access?.urls??[]),H=v(()=>C.value?.access?.accounts??[]),U=v(()=>I.value.filter(e=>e.result===`pass`).length),Ir=v(()=>I.value.length>0&&U.value===I.value.length),Lr=v(()=>I.value.length?Math.round(U.value/I.value.length*100):0),Rr=v(()=>[...new Set([...N.value.flatMap(e=>e.files??[]),...F.value.flatMap(e=>e.files??[])])]),zr=e=>e.kind===`story`?e.id:e.id.replace(/-T\d+$/,``),Br=v(()=>[{id:`lc-scenarios`,label:`测试场景`,icon:`i-lucide-flask-conical`,count:`${L.value.length}`,tone:`teal`},...V.value.length||H.value.length?[{id:`lc-access`,label:`调试入口与账号`,icon:`i-lucide-key-round`,count:`${V.value.length+H.value.length}`,tone:`sky`}]:[],...R.value.length?[{id:`lc-prep`,label:`测试前准备`,icon:`i-lucide-terminal-square`,count:`${R.value.length}`,tone:`amber`}]:[],{id:`lc-changes`,label:`变更清单`,icon:`i-lucide-git-commit-horizontal`,count:`${N.value.length}`,tone:`violet`},{id:`lc-extras`,label:`额外做的事`,icon:`i-lucide-sparkles`,count:`${F.value.length}`,tone:`peach`},{id:`lc-checks`,label:`验证结果`,icon:`i-lucide-badge-check`,count:`${U.value}/${I.value.length}`,tone:`mint`},{id:`lc-notes`,label:`说明`,icon:`i-lucide-message-square-more`,count:`${z.value.length}`,tone:`slate`},...B.value.length?[{id:`lc-open`,label:`还没做的`,icon:`i-lucide-list-todo`,count:`${B.value.length}`,tone:`rose`}]:[]]);function Vr(e){let t=document.getElementById(e);t&&(t.scrollIntoView({behavior:`smooth`,block:`start`}),history.replaceState(null,``,`#${e}`))}let W=new Date,Hr=`${W.getFullYear()}-${String(W.getMonth()+1).padStart(2,`0`)}-${String(W.getDate()).padStart(2,`0`)}`,G=v(()=>(C.value?.at??``).slice(0,10)),Ur=v(()=>{let e=(C.value?.at??``).slice(10).replace(/^[T ]/,``);return/^\d{2}:\d{2}/.test(e)?e:``}),Wr=v(()=>!!G.value&&G.value===Hr),K=y(``);async function q(e,t){try{await navigator.clipboard.writeText(e),K.value=t,setTimeout(()=>{K.value===t&&(K.value=``)},1600)}catch{K.value=``}}let J=y(!1),Y=y(!1),X=y(``),Z=y(null),Q=y(null),Gr=v(()=>!!Z.value?.isRepo&&!Z.value?.blocked&&(Z.value?.files.length??0)>0&&!Y.value);async function Kr(){if(!Y.value){J.value=!0,X.value=``,Q.value=null,Z.value=null;try{Z.value=await n(`/api/agile/git/status`)}catch(e){X.value=e?.data?.error||e?.message||`读不到 git 状态`}}}function $(){Y.value||(J.value=!1,X.value=``,Q.value=null,Z.value=null)}async function qr(){if(Gr.value){Y.value=!0,X.value=``;try{let{token:e}=await n(`/api/projects`);Q.value=await n(`/api/agile/git/commit`,{method:`POST`,headers:{"x-project-token":e},body:{message:P.value}}),await le()}catch(e){X.value=e?.data?.error||e?.message||`提交失败`}finally{Y.value=!1}}}return(n,r)=>{let i=e,o=t;return c(),m(p,null,[a(S)?(c(),m(`div`,ye,[d(`span`,be,[u(i,{name:`i-lucide-history`,class:`hist-badge-ic`}),r[8]||=b(`历史版本`,-1)]),d(`span`,xe,[b(`只读 · `+l(a(S).short),1),a(S).date?(c(),m(p,{key:0},[b(` · `+l(a(S).date),1)],64)):h(``,!0)]),d(`div`,{ref_key:`tabsRef`,ref:Tr,class:`lc-hist-tabs`},[d(`button`,{class:`hist-tab`,onClick:wr},`最新`),(c(!0),m(p,null,s(a(xr),e=>(c(),m(`button`,{key:e.hash,class:g([`hist-tab`,{on:a(S)?.hash===e.hash}]),title:`${e.date} ${e.subject??``}`,disabled:a(k),onClick:t=>Cr(e)},[b(l(e.short),1),d(`i`,null,l(e.date.slice(5,16)),1)],10,Se))),128))],512),d(`button`,{class:`rule-btn`,onClick:A},[u(i,{name:`i-lucide-list`,class:`rule-btn-ic`}),r[9]||=b(`选择历史…`,-1)])])):(c(),m(`div`,{key:0,class:g([`lc-rule`,`is-${a(j).tone}`])},[d(`div`,de,[d(`span`,fe,[u(i,{name:`i-lucide-git-branch`,class:`rule-svg`})]),r[6]||=d(`b`,{class:`rule-title`},`写入规则`,-1),r[7]||=d(`span`,{class:`rule-file mono`},`agile/last-change.json`,-1),d(`span`,pe,[d(`i`,{class:g([`rule-dot`,`tone-${a(j).tone}`])},null,2),b(` 当前 `+l(a(j).text),1),a(w)?.state===`committed`&&a(w).hash?(c(),m(p,{key:0},[r[4]||=b(` · `,-1),d(`span`,me,l(a(w).hash),1)],64)):h(``,!0)]),d(`button`,{class:`rule-btn`,onClick:A},[u(i,{name:`i-lucide-history`,class:`rule-btn-ic`}),r[5]||=b(`查看历史 `,-1),a(T).length?(c(),m(`i`,he,l(a(T).length),1)):h(``,!0)])]),d(`ul`,ge,[(c(),m(p,null,s(Or,e=>d(`li`,{key:e.key,class:g([`rule-case`,{on:a(kr)===e.key}])},[d(`span`,_e,l(e.when),1),u(i,{name:`i-lucide-arrow-right`,class:`case-arrow`}),d(`span`,ve,l(e.then),1)],2)),64))])],2)),a(C)?(c(),m(`div`,Te,[d(`header`,Ee,[d(`div`,De,[d(`p`,Oe,[r[11]||=d(`span`,{class:`k-dot`},null,-1),r[12]||=b(`最近一次交付 `,-1),r[13]||=d(`span`,{class:`k-sep`},null,-1),d(`span`,ke,l(a(G)),1),a(Ur)?(c(),m(`span`,Ae,l(a(Ur)),1)):h(``,!0),a(Wr)?(c(),m(`span`,je,`今天`)):h(``,!0),a(C).merged?(c(),m(`span`,{key:2,class:`k-merged`,title:a(jr)},`合并记录 · `+l(a(Ar))+` 次交付`,9,Me)):h(``,!0)]),d(`h2`,Ne,l(a(C).title),1),a(M).length>1?(c(),m(`ol`,Pe,[(c(!0),m(p,null,s(a(M),(e,t)=>(c(),m(`li`,{key:t},l(e),1))),128))])):a(M).length?(c(),m(`p`,Fe,l(a(M)[0]),1)):h(``,!0),d(`div`,Ie,[d(`span`,null,[d(`b`,null,l(a(N).length),1),r[14]||=b(` 处变更`,-1)]),r[19]||=d(`i`,{class:`meta-sep`},null,-1),d(`span`,null,[d(`b`,null,l(a(Rr).length),1),r[15]||=b(` 个文件`,-1)]),r[20]||=d(`i`,{class:`meta-sep`},null,-1),d(`span`,null,[d(`b`,null,l(a(L).length),1),r[16]||=b(` 条测试场景`,-1)]),a(F).length?(c(),m(p,{key:0},[r[18]||=d(`i`,{class:`meta-sep`},null,-1),d(`span`,null,[d(`b`,null,l(a(F).length),1),r[17]||=b(` 项额外工作`,-1)])],64)):h(``,!0)])]),d(`div`,Le,[d(`div`,{class:g([`ring`,{warn:a(I).length&&!a(Ir)}]),style:re({"--pct":a(Lr)})},[d(`div`,Re,[d(`b`,null,[b(l(a(U)),1),d(`small`,null,`/`+l(a(I).length||0),1)]),d(`span`,null,l(a(I).length?a(Ir)?`验证全通过`:`有未通过项`:`无验证记录`),1)])],6)])]),d(`nav`,ze,[(c(!0),m(p,null,s(a(Br),e=>(c(),m(`a`,{key:e.id,class:g([`lc-nav-link`,`tone-${e.tone}`]),href:`#${e.id}`,onClick:x(t=>Vr(e.id),[`prevent`])},[u(i,{name:e.icon,class:`lc-nav-ic`},null,8,[`name`]),d(`span`,Ve,l(e.label),1),d(`b`,He,l(e.count),1)],10,Be))),128))]),d(`section`,Ue,[d(`div`,We,[d(`span`,Ge,[u(i,{name:`i-lucide-flask-conical`,class:`s-svg`})]),r[21]||=d(`h2`,{class:`s-title`},`测试场景`,-1),d(`span`,Ke,l(a(L).length),1),r[22]||=d(`span`,{class:`s-hint`},`一条一段:照着步骤走,末尾那句就是验收标准`,-1)]),a(L).length?(c(),m(`div`,Je,[(c(!0),m(p,null,s(a(L),(e,t)=>(c(),m(`article`,{key:e.id??t,class:`sc lc-sc`},[d(`header`,Ye,[d(`span`,Xe,l(e.id??`TC-${t+1}`),1),d(`h3`,Ze,l(e.title),1)]),e.steps?.length?(c(),m(`div`,Qe,[r[23]||=d(`p`,{class:`micro`},`测试步骤`,-1),d(`ol`,$e,[(c(!0),m(p,null,s(e.steps,(e,t)=>(c(),m(`li`,{key:t},l(e),1))),128))])])):h(``,!0),d(`div`,et,[d(`p`,tt,[u(i,{name:`i-lucide-badge-check`,class:`sc-acc-ic`}),r[24]||=b(`验收标准`,-1)]),d(`p`,nt,l(e.expect),1),e.acceptance||e.storyIds?.length?(c(),m(`div`,rt,[e.acceptance?(c(),m(`span`,it,`对应验收:`+l(e.acceptance),1)):h(``,!0),e.storyIds?.length?(c(),m(`span`,at,[(c(!0),m(p,null,s(e.storyIds,e=>(c(),f(o,{key:e,to:`/story/${e}`,class:`ent-id mono`},{default:ae(()=>[b(l(e),1)]),_:2},1032,[`to`]))),128))])):h(``,!0)])):h(``,!0)])]))),128))])):(c(),m(`p`,qe,`这次没有单独列测试场景。`))]),a(V).length||a(H).length?(c(),m(`section`,ot,[d(`div`,st,[d(`span`,ct,[u(i,{name:`i-lucide-key-round`,class:`s-svg`})]),r[25]||=d(`h2`,{class:`s-title`},`调试入口与账号`,-1),d(`span`,lt,l(a(V).length+a(H).length),1),r[26]||=d(`span`,{class:`s-hint`},`照着这一栏就能自己跑起来点一遍`,-1)]),d(`div`,ut,[a(V).length?(c(),m(`div`,dt,[r[27]||=d(`p`,{class:`micro`},`访问地址`,-1),(c(!0),m(p,null,s(a(V),(e,t)=>(c(),m(`div`,{key:t,class:`u-item`},[d(`div`,ft,[d(`a`,{href:e.url,target:`_blank`,rel:`noreferrer`,class:`u-link`},[d(`span`,mt,l(e.label??`入口`),1),u(i,{name:`i-lucide-arrow-up-right`,class:`u-go`})],8,pt),d(`button`,{class:g([`cpy`,{ok:a(K)===`url-${t}`}]),onClick:n=>q(e.url,`url-${t}`)},[u(i,{name:a(K)===`url-${t}`?`i-lucide-check`:`i-lucide-copy`,class:`cpy-ic`},null,8,[`name`]),b(` `+l(a(K)===`url-${t}`?`已复制`:`复制`),1)],10,ht)]),d(`p`,gt,l(e.url),1),e.note?(c(),m(`p`,_t,l(e.note),1)):h(``,!0)]))),128))])):h(``,!0),a(H).length?(c(),m(`div`,vt,[r[29]||=d(`p`,{class:`micro`},`账号密码`,-1),(c(!0),m(p,null,s(a(H),(e,t)=>(c(),m(`div`,{key:t,class:`a-item`},[d(`div`,yt,[e.role?(c(),m(`span`,bt,l(e.role),1)):h(``,!0),d(`span`,xt,l(e.username),1),d(`button`,{class:g([`cpy`,{ok:a(K)===`acc-${t}`}]),onClick:n=>q(e.password?`账号:${e.username}\n密码:${e.password}`:e.username,`acc-${t}`)},[u(i,{name:a(K)===`acc-${t}`?`i-lucide-check`:`i-lucide-copy`,class:`cpy-ic`},null,8,[`name`]),b(` `+l(a(K)===`acc-${t}`?`已复制`:`复制`),1)],10,St)]),d(`div`,Ct,[r[28]||=d(`span`,{class:`a-key`},`密码`,-1),e.password?(c(),m(`span`,wt,l(e.password),1)):(c(),m(`span`,Tt,`无密码 / 走单点登录`))]),e.note?(c(),m(`p`,Et,l(e.note),1)):h(``,!0)]))),128))])):h(``,!0)])])):h(``,!0),a(R).length?(c(),m(`section`,Dt,[d(`div`,Ot,[d(`span`,kt,[u(i,{name:`i-lucide-terminal-square`,class:`s-svg`})]),r[30]||=d(`h2`,{class:`s-title`},`测试前准备`,-1),d(`span`,At,l(a(R).length),1),r[31]||=d(`span`,{class:`s-hint`},`按顺序做完这些再开始点,命令可直接复制`,-1)]),d(`ol`,jt,[(c(!0),m(p,null,s(a(R),(e,t)=>(c(),m(`li`,{key:t},[d(`div`,Mt,[d(`p`,Nt,l(e.step),1),e.command?(c(),m(`div`,Pt,[d(`code`,Ft,l(e.command),1),d(`button`,{class:g([`cpy`,{ok:a(K)===`cmd-${t}`}]),onClick:n=>q(e.command??``,`cmd-${t}`)},[u(i,{name:a(K)===`cmd-${t}`?`i-lucide-check`:`i-lucide-copy`,class:`cpy-ic`},null,8,[`name`]),b(` `+l(a(K)===`cmd-${t}`?`已复制`:`复制`),1)],10,It)])):h(``,!0),e.note?(c(),m(`p`,Lt,l(e.note),1)):h(``,!0)])]))),128))])])):h(``,!0),d(`section`,Rt,[d(`div`,zt,[d(`span`,Bt,[u(i,{name:`i-lucide-git-commit-horizontal`,class:`s-svg`})]),r[33]||=d(`h2`,{class:`s-title`},`变更清单`,-1),d(`span`,Vt,l(a(N).length),1),r[34]||=d(`span`,{class:`s-hint`},`故事与任务各自是新增还是状态变更、动过哪些文件`,-1),a(N).length?(c(),m(`button`,{key:0,class:g([`rule-btn s-copy`,{ok:a(K)===`commit`}]),title:`按 Conventional Commits 生成:首行是标题,正文每条变更带编号与名称`,onClick:r[0]||=e=>q(a(P),`commit`)},[u(i,{name:a(K)===`commit`?`i-lucide-check`:`i-lucide-clipboard-copy`,class:`rule-btn-ic`},null,8,[`name`]),b(` `+l(a(K)===`commit`?`已复制`:`复制变更信息`),1)],2)):h(``,!0),!a(S)&&a(N).length?(c(),m(`button`,{key:1,class:`rule-btn s-commit`,title:`把这次交付整份提交进本地仓库:git add -A + git commit,不 push`,onClick:Kr},[u(i,{name:`i-lucide-git-commit-vertical`,class:`rule-btn-ic`}),r[32]||=b(`自动提交 `,-1)])):h(``,!0)]),a(N).length?(c(),m(`div`,Ut,[d(`table`,Wt,[r[36]||=d(`colgroup`,null,[d(`col`,{class:`c-ent`}),d(`col`,{class:`c-act`}),d(`col`),d(`col`,{class:`c-file`})],-1),r[37]||=d(`thead`,null,[d(`tr`,null,[d(`th`,null,`条目`),d(`th`,null,`变更`),d(`th`,null,`变更内容`),d(`th`,null,`涉及文件`)])],-1),d(`tbody`,null,[(c(!0),m(p,null,s(a(N),(e,t)=>(c(),m(`tr`,{key:`${e.kind}-${e.id}-${t}`},[d(`td`,null,[d(`div`,Gt,[d(`div`,Kt,[d(`span`,{class:g([`kind`,`kind-${e.kind}`])},l(Nr[e.kind]??e.kind),3),u(o,{to:`/story/${zr(e)}`,class:`ent-id mono`},{default:ae(()=>[b(l(e.id),1)]),_:2},1032,[`to`])]),e.title?(c(),m(`p`,qt,l(e.title),1)):h(``,!0)])]),d(`td`,null,[d(`span`,{class:g([`act`,`act-${e.action}`])},l(Mr[e.action]??e.action),3),e.from||e.to?(c(),m(`p`,Jt,[d(`span`,Yt,l(e.from??`—`),1),r[35]||=d(`i`,null,`→`,-1),d(`span`,Xt,l(e.to??`—`),1)])):h(``,!0)]),d(`td`,Zt,l(e.note??`—`),1),d(`td`,null,[d(`div`,Qt,[(c(!0),m(p,null,s(e.files,e=>(c(),m(`span`,{key:e,class:`fchip mono`,title:e},l(e),9,$t))),128)),e.files?.length?h(``,!0):(c(),m(`span`,en,`—`))])])]))),128))])])])):(c(),m(`p`,Ht,`这次没有涉及任何故事或任务。`))]),d(`div`,tn,[d(`section`,nn,[d(`div`,rn,[d(`span`,an,[u(i,{name:`i-lucide-sparkles`,class:`s-svg`})]),r[38]||=d(`h2`,{class:`s-title`},`额外做的事`,-1),d(`span`,on,l(a(F).length),1)]),d(`div`,sn,[a(F).length?h(``,!0):(c(),m(`p`,cn,`没有计划外的改动。`)),(c(!0),m(p,null,s(a(F),(e,t)=>(c(),m(`article`,{key:t,class:`x-item`},[r[39]||=d(`span`,{class:`x-mark`},null,-1),d(`div`,ln,[d(`p`,un,l(e.title),1),e.detail?(c(),m(`p`,dn,l(e.detail),1)):h(``,!0),e.files?.length?(c(),m(`div`,fn,[(c(!0),m(p,null,s(e.files,e=>(c(),m(`span`,{key:e,class:`fchip mono`,title:e},l(e),9,pn))),128))])):h(``,!0)])]))),128))])]),d(`section`,mn,[d(`div`,hn,[d(`span`,gn,[u(i,{name:`i-lucide-badge-check`,class:`s-svg`})]),r[40]||=d(`h2`,{class:`s-title`},`验证结果`,-1),d(`span`,_n,l(a(U))+`/`+l(a(I).length),1)]),d(`div`,vn,[a(I).length?h(``,!0):(c(),m(`p`,yn,`这次没有留下验证记录。`)),(c(!0),m(p,null,s(a(I),(e,t)=>(c(),m(`div`,{key:t,class:`v-item`},[d(`span`,{class:g([`v-ic`,`v-${e.result}`])},[u(i,{name:Fr[e.result]??`i-lucide-circle`,class:`v-svg`},null,8,[`name`])],2),d(`div`,bn,[d(`p`,xn,l(e.what),1),e.detail?(c(),m(`p`,Sn,l(e.detail),1)):h(``,!0)]),d(`span`,{class:g([`v-res`,`v-${e.result}`])},l(Pr[e.result]??e.result),3)]))),128))])])]),d(`div`,Cn,[d(`section`,wn,[d(`div`,Tn,[d(`span`,En,[u(i,{name:`i-lucide-message-square-more`,class:`s-svg`})]),r[41]||=d(`h2`,{class:`s-title`},`说明`,-1),d(`span`,Dn,l(a(z).length),1)]),d(`div`,On,[a(z).length?(c(),m(`ul`,An,[(c(!0),m(p,null,s(a(z),(e,t)=>(c(),m(`li`,{key:t},l(e),1))),128))])):(c(),m(`p`,kn,`没有额外说明。`))])]),a(B).length?(c(),m(`section`,jn,[d(`div`,Mn,[d(`span`,Nn,[u(i,{name:`i-lucide-list-todo`,class:`s-svg`})]),r[42]||=d(`h2`,{class:`s-title`},`还没做的`,-1),d(`span`,Pn,l(a(B).length),1)]),d(`div`,Fn,[d(`ul`,In,[(c(!0),m(p,null,s(a(B),(e,t)=>(c(),m(`li`,{key:t},l(e),1))),128))])])])):h(``,!0)])])):(c(),m(`div`,Ce,[d(`span`,we,[u(i,{name:`i-lucide-clipboard-list`,class:`em-svg`})]),r[10]||=oe(`<h2 class="em-title" data-v-0de58a93>还没有交付记录</h2><p class="em-sub" data-v-0de58a93> 每完成一项功能,AI 都要把「改了哪些故事与任务、额外做了什么、验了什么、怎么测」 写进下面这个文件,这一页就会自动排出来。 </p><p class="em-path mono" data-v-0de58a93>agile/last-change.json</p><p class="em-note" data-v-0de58a93> 每次只保留最近一次(覆盖写,不追加)· 格式见 <span class="mono" data-v-0de58a93>.agents/skills/scrum-planning/references/schema.md</span> 第 4 节 </p>`,4)])),(c(),f(_,{to:`body`},[a(E)?(c(),m(`div`,{key:0,class:`lc-hist-mask`,onClick:r[3]||=x(e=>E.value=!1,[`self`])},[d(`div`,Ln,[d(`header`,Rn,[d(`div`,zn,[r[46]||=d(`h3`,{id:`lc-hist-title`,class:`lc-hist-title`},`历史版本`,-1),d(`p`,Bn,[r[43]||=b(` 从 git 里读 `,-1),r[44]||=d(`span`,{class:`mono`},`agile/last-change.json`,-1),r[45]||=b(` 的提交记录 `,-1),a(T).length?(c(),m(p,{key:0},[b(`· 共 `+l(a(T).length)+` 版`,1)],64)):h(``,!0)])]),d(`button`,{class:`lc-hist-x`,"aria-label":`关闭`,onClick:r[1]||=e=>E.value=!1},[u(i,{name:`i-lucide-x`,class:`lc-hist-x-ic`})])]),a(O)?(c(),m(`p`,Vn,l(a(O)),1)):a(D)?(c(),m(`div`,Hn,`正在读 git 历史…`)):(c(),m(`div`,Un,[(c(!0),m(p,null,s(a(T),(e,t)=>(c(),m(`button`,{key:e.hash,class:g([`hist-item`,{on:a(S)?.hash===e.hash}]),disabled:a(k),onClick:t=>Cr(e)},[d(`span`,{class:g([`hist-item-dot`,{live:t===0}])},null,2),d(`span`,Gn,[d(`b`,null,l(e.subject||`(没有提交说明)`),1),d(`i`,Kn,l(e.date),1)]),d(`span`,qn,l(e.short),1)],10,Wn))),128)),a(T).length?h(``,!0):(c(),m(`p`,Jn,` 这个文件还没有提交记录 —— 先 commit 一次,历史里才会出现版本。 `))])),d(`footer`,Yn,[r[47]||=d(`span`,{class:`dim`},`选一个版本即可在页面上只读查看,不会改动文件。`,-1),d(`button`,{class:`hist-close`,onClick:r[2]||=e=>E.value=!1},`关闭`)])])])):h(``,!0)])),(c(),f(_,{to:`body`},[a(J)?(c(),m(`div`,{key:0,class:`lc-hist-mask`,onClick:x($,[`self`])},[d(`div`,Xn,[d(`header`,Zn,[r[48]||=d(`div`,{class:`lc-hist-hd-txt`},[d(`h3`,{id:`lc-commit-title`,class:`lc-hist-title`},`提交这次交付`),d(`p`,{class:`lc-hist-sub`},[b(` 将执行 `),d(`span`,{class:`mono`},`git add -A`),b(` + `),d(`span`,{class:`mono`},`git commit`),b(`,只提交到本地,不 push `)])],-1),d(`button`,{class:`lc-hist-x`,"aria-label":`关闭`,disabled:a(Y),onClick:$},[u(i,{name:`i-lucide-x`,class:`lc-hist-x-ic`})],8,Qn)]),a(Q)?(c(),m(`div`,$n,[d(`span`,er,[u(i,{name:`i-lucide-check`,class:`cm-done-svg`})]),d(`div`,tr,[d(`p`,nr,[r[49]||=b(`已提交 `,-1),d(`span`,rr,l(a(Q).hash),1)]),d(`p`,ir,l(a(Q).subject),1),d(`p`,ar,l(a(Q).files)+` 个文件 · 分支 `+l(a(Q).branch??`分离头指针`),1)])])):(c(),m(`div`,or,[r[51]||=d(`p`,{class:`micro`},`提交信息`,-1),d(`pre`,sr,l(a(P)),1),d(`p`,cr,[r[50]||=b(` 将提交的文件`,-1),a(Z)?(c(),m(p,{key:0},[b(` · `+l(a(Z).files.length),1)],64)):h(``,!0)]),!a(Z)&&!a(X)?(c(),m(`p`,lr,`正在读 git 状态…`)):a(Z)&&!a(Z).isRepo?(c(),m(`p`,ur,`这个目录不是 git 仓库,没法自动提交。`)):a(Z)?.blocked?(c(),m(`p`,dr,l(a(Z).blocked),1)):a(Z)?.files.length?(c(),m(`ul`,pr,[(c(!0),m(p,null,s(a(Z).files,e=>(c(),m(`li`,{key:e.path,class:`cm-file`},[d(`span`,{class:g([`cm-code`,e.code===`??`?`cm-new`:`cm-mod`])},l(e.code),3),d(`span`,{class:`mono cm-path`,title:e.path},l(e.path),9,mr)]))),128))])):(c(),m(`p`,fr,`没有未提交的改动,不需要提交。`))])),a(X)?(c(),m(`p`,hr,l(a(X)),1)):h(``,!0),d(`footer`,gr,[d(`span`,_r,l(a(Z)?.branch?`当前分支 ${a(Z).branch}`:`提交后工作区应当是干净的`),1),d(`span`,vr,[d(`button`,{class:`hist-close`,disabled:a(Y),onClick:$},l(a(Q)?`关闭`:`取消`),9,yr),a(Q)?h(``,!0):(c(),m(`button`,{key:0,class:`cm-go`,disabled:!a(Gr),onClick:qr},l(a(Y)?`提交中…`:`确认提交`),9,br))])])])])):h(``,!0)]))],64)}}}),[[`__scopeId`,`data-v-0de58a93`]]);export{w as default};
@@ -1 +1 @@
1
- import{a as e,i as t,o as n,r as ee,s as r}from"#entry";import{t as te}from"./DJM7u8P3.js";import{t as ne}from"./CI0scS-N.js";import{At as i,K as a,S as o,U as s,Xt as c,Yt as l,b as u,d,i as f,lt as p,m,p as h,qt as g,u as _,v as re,y as v}from"./BxuBMtk_.js";var ie={class:`kpis`},ae={class:`v`},oe={class:`v`},se={class:`v`},ce={class:`v`},le={class:`v mono`},ue={class:`card gantt`},de={class:`ticks`},fe={class:`track`},pe={class:`label`},me={class:`lane`},he={class:`grid-lines`},ge=[`title`],_e={class:`track-hd`},ve={class:`tag tag-neutral mono`},ye={class:`dim`},y={class:`grow-row`},b={class:`label`},x={class:`tag tag-ghost`},S={class:`lane`},C={class:`grid-lines`},w={class:`label`},T=[`title`],E=[`title`],D={class:`pts mono dim`},O={class:`lane`},k={class:`grid-lines`},A={class:`track last`},j={class:`label`},M={class:`dim pts mono`},N={class:`tag tag-neutral`},P={class:`lane`},be={class:`grid-lines`},xe={class:`extra`},Se={key:0,class:`card`},Ce={class:`card-hd`},we={class:`h2`},Te={class:`tag tag-neutral`},Ee={class:`card-bd`},De={class:`list`},Oe={class:`dep-txt`},ke={class:`dep-txt dim`},Ae={key:1,class:`card`},je={class:`card-hd`},Me={class:`h2`},F={class:`tag tag-error`},Ne={class:`card-bd`},Pe={class:`list`},Fe={class:`dep-txt`},Ie={class:`dim`},I=t(o({__name:`gantt`,setup(t){let{sprints:o,stories:I,milestones:L,storyById:R,actualRange:z,progress:B,addDays:Le,diffDays:V,md:H,now:U,MS_COLOR:Re,MS_LABEL:ze,KIND_LABEL:Be,KIND_ICON:Ve,STATE_LABEL:He,STATE_DOT:W,dependencyPairs:G,blockedStories:K}=r(),Ue=_(()=>o.value.map(e=>({id:e.id,name:e.name,start:e.start,end:e.end,rows:(e.stories??[]).map(e=>R.value.get(e)).filter(Boolean).map(e=>({...e,actual:z(e),prog:B(e)}))}))),q=_(()=>I.value.filter(e=>e.schedule)),We=_(()=>I.value.filter(e=>!e.schedule)),J=_(()=>[...o.value.map(e=>e.start),...q.value.map(e=>e.schedule.start),...L.value.map(e=>e.due)].sort()[0]??U),Ge=_(()=>{let e=[...o.value.map(e=>e.end),...q.value.map(e=>e.schedule.end),...L.value.map(e=>e.due)].sort();return e[e.length-1]??U}),Y=_(()=>Math.max(1,V(J.value,Ge.value)+1)),X=e=>V(J.value,e)/Y.value*100,Z=(e,t)=>({left:`${X(e)}%`,width:`${Math.max(1.1,(V(e,t)+1)/Y.value*100)}%`}),Q=_(()=>{let e=Y.value>90?14:Y.value>45?7:4,t=[];for(let n=0;n<=Y.value;n+=e)t.push({date:Le(J.value,n),x:n/Y.value*100});return t}),$=_(()=>X(U));return(t,r)=>{let _=ee,z=te,B=ne;return s(),m(`div`,null,[d(`div`,ie,[d(`div`,{class:g([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(0)])},[u(_,{tone:(`cardTone`in t?t.cardTone:i(e))(0),size:`sm`},null,8,[`tone`]),r[1]||=d(`p`,{class:`k`},`迭代窗口`,-1),d(`p`,ae,[v(c(i(o).length),1),r[0]||=d(`small`,null,`个`,-1)])],2),d(`div`,{class:g([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(1)])},[u(_,{tone:(`cardTone`in t?t.cardTone:i(e))(1),size:`sm`},null,8,[`tone`]),r[3]||=d(`p`,{class:`k`},`里程碑`,-1),d(`p`,oe,[v(c(i(L).length),1),r[2]||=d(`small`,null,`个`,-1)])],2),d(`div`,{class:g([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(2)])},[u(_,{tone:(`cardTone`in t?t.cardTone:i(e))(2),size:`sm`},null,8,[`tone`]),r[4]||=d(`p`,{class:`k`},`已排期故事`,-1),d(`p`,se,[v(c(i(q).length),1),d(`small`,null,`/ `+c(i(I).length),1)])],2),d(`div`,{class:g([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(3)])},[u(_,{tone:(`cardTone`in t?t.cardTone:i(e))(3),size:`sm`},null,8,[`tone`]),r[6]||=d(`p`,{class:`k`},`时间跨度`,-1),d(`p`,ce,[v(c(i(Y)),1),r[5]||=d(`small`,null,`天`,-1)])],2),d(`div`,{class:g([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(4)])},[u(_,{tone:(`cardTone`in t?t.cardTone:i(e))(4),size:`sm`},null,8,[`tone`]),r[7]||=d(`p`,{class:`k`},`今天`,-1),d(`p`,le,c(i(U)),1)],2)]),d(`div`,ue,[r[11]||=re(`<div class="gantt-hd" data-v-719eb5d7><h2 class="h2" data-v-719eb5d7>时间轴</h2><div class="legend" data-v-719eb5d7><span class="lg" data-v-719eb5d7><i class="sw plan" data-v-719eb5d7></i>计划</span><span class="lg" data-v-719eb5d7><i class="sw real" data-v-719eb5d7></i>实际</span><span class="lg" data-v-719eb5d7><i class="sw ms" data-v-719eb5d7></i>里程碑</span><span class="lg" data-v-719eb5d7><i class="sw mvp" data-v-719eb5d7></i>MVP 节点</span><span class="lg" data-v-719eb5d7><i class="sw today" data-v-719eb5d7></i>今天</span></div></div>`,1),d(`div`,de,[(s(!0),m(f,null,a(i(Q),e=>(s(),m(`div`,{key:e.date,class:`tick`,style:l({left:e.x+`%`})},[d(`span`,null,c(i(H)(e.date)),1)],4))),128)),d(`div`,{class:`today-line`,style:l({left:i($)+`%`})},null,4),d(`div`,{class:`today-flag`,style:l({left:i($)+`%`})},`今天 `+c(i(H)(i(U))),5)]),d(`section`,fe,[r[8]||=d(`header`,{class:`track-hd`},`里程碑`,-1),(s(!0),m(f,null,a(i(L),e=>(s(),m(`div`,{key:e.id,class:`grow-row`},[d(`div`,pe,[d(`span`,{class:g([`tag`,e.kind===`mvp`?`tag-mint`:`tag-primary`])},[u(z,{name:i(Ve)[e.kind],class:`size-3`},null,8,[`name`]),v(c(i(Be)[e.kind]),1)],2),u(B,{to:`/milestones`,class:`lbl-txt`},{default:p(()=>[v(c(e.title),1)]),_:2},1024),d(`span`,{class:g([`tag`,`tag-${i(Re)[e.status]}`])},c(i(ze)[e.status]),3)]),d(`div`,me,[d(`div`,he,[(s(!0),m(f,null,a(i(Q),e=>(s(),m(`span`,{key:e.date,style:l({left:e.x+`%`})},null,4))),128))]),d(`span`,{class:g([`diamond`,{mvp:e.kind===`mvp`}]),style:l({left:X(e.due)+`%`}),title:`${e.id} · ${e.due} · ${e.criteria}`},null,14,ge)])]))),128))]),(s(!0),m(f,null,a(i(Ue),e=>(s(),m(`section`,{key:e.id,class:`track`},[d(`header`,_e,[d(`span`,ve,c(e.id),1),v(` `+c(e.name)+` `,1),d(`span`,ye,c(i(H)(e.start))+` ~ `+c(i(H)(e.end)),1)]),d(`div`,y,[d(`div`,b,[d(`span`,x,[u(z,{name:`i-lucide-calendar-range`,class:`size-3`}),r[9]||=v(`迭代窗口`,-1)])]),d(`div`,S,[d(`div`,C,[(s(!0),m(f,null,a(i(Q),e=>(s(),m(`span`,{key:e.date,style:l({left:e.x+`%`})},null,4))),128))]),d(`div`,{class:`band`,style:l(Z(e.start,e.end))},null,4)])]),(s(!0),m(f,null,a(e.rows,e=>(s(),m(`div`,{key:e.id,class:`grow-row`},[d(`div`,w,[d(`i`,{class:`sdot`,style:l({background:i(W)[e.status]})},null,4),u(B,{to:`/story/${e.id}`,class:`lbl-txt`},{default:p(()=>[v(c(e.title),1)]),_:2},1032,[`to`]),e.dependsOn?.length?(s(),m(`span`,{key:0,class:`tag tag-secondary`,title:`依赖:${e.dependsOn.join(`、`)}`},c(e.dependsOn.length),9,T)):h(``,!0),e.blocked?(s(),m(`span`,{key:1,class:`tag tag-error`,title:`阻塞:${e.blocked.reason}(自 ${e.blocked.since})`},`!`,8,E)):h(``,!0),d(`span`,D,c(e.points)+` 点 · `+c(e.prog.done)+`/`+c(e.prog.total),1)]),d(`div`,O,[d(`div`,k,[(s(!0),m(f,null,a(i(Q),e=>(s(),m(`span`,{key:e.date,style:l({left:e.x+`%`})},null,4))),128))]),e.schedule?(s(),m(`div`,{key:0,class:`g-plan`,style:l(Z(e.schedule.start,e.schedule.end))},null,4)):h(``,!0),e.actual?(s(),m(`div`,{key:1,class:`g-real`,style:l(Z(e.actual.start,e.actual.end))},null,4)):h(``,!0)])]))),128))]))),128)),d(`section`,A,[r[10]||=d(`header`,{class:`track-hd`},`未排期(backlog)`,-1),(s(!0),m(f,null,a(i(We),e=>(s(),m(`div`,{key:e.id,class:`grow-row`},[d(`div`,j,[d(`i`,{class:`sdot`,style:l({background:i(W)[e.status]})},null,4),u(B,{to:`/story/${e.id}`,class:`lbl-txt`},{default:p(()=>[v(c(e.title),1)]),_:2},1032,[`to`]),d(`span`,M,c(e.points)+` 点`,1),d(`span`,N,c(i(He)[e.status]),1)]),d(`div`,P,[d(`div`,be,[(s(!0),m(f,null,a(i(Q),e=>(s(),m(`span`,{key:e.date,style:l({left:e.x+`%`})},null,4))),128))])])]))),128))])]),d(`div`,xe,[i(G).length?(s(),m(`div`,Se,[d(`div`,Ce,[d(`h2`,we,[u(z,{name:`i-lucide-git-branch`,class:`size-3.5`}),r[12]||=v(`依赖链`,-1)]),d(`span`,Te,c(i(G).length),1)]),d(`div`,Ee,[d(`ul`,De,[(s(!0),m(f,null,a(i(G),e=>(s(),m(`li`,{key:`${e.from}-${e.to}`},[u(B,{to:`/story/${e.to}`,class:`mono link`},{default:p(()=>[v(c(e.to),1)]),_:2},1032,[`to`]),d(`span`,Oe,c(i(R).get(e.to)?.title),1),u(z,{name:`i-lucide-arrow-left`,class:`size-3 dim`}),r[13]||=d(`span`,{class:`dim`},`依赖`,-1),u(B,{to:`/story/${e.from}`,class:`mono link`},{default:p(()=>[v(c(e.from),1)]),_:2},1032,[`to`]),d(`span`,ke,c(i(R).get(e.from)?.title),1)]))),128))])])])):h(``,!0),i(K).length?(s(),m(`div`,Ae,[d(`div`,je,[d(`h2`,Me,[u(z,{name:`i-lucide-octagon-alert`,class:`size-3.5`}),r[14]||=v(`阻塞中`,-1)]),d(`span`,F,c(i(K).length),1)]),d(`div`,Ne,[d(`ul`,Pe,[(s(!0),m(f,null,a(i(K),e=>(s(),m(`li`,{key:e.id},[r[15]||=d(`span`,{class:`tag tag-error tag-dot`},`阻塞`,-1),u(B,{to:`/story/${e.id}`,class:`mono link`},{default:p(()=>[v(c(e.id),1)]),_:2},1032,[`to`]),d(`span`,Fe,c(e.title),1),d(`span`,Ie,`· `+c(e.blocked.reason)+`(自 `+c(e.blocked.since)+`)`,1)]))),128))])])])):h(``,!0)])])}}}),[[`__scopeId`,`data-v-719eb5d7`]]);export{I as default};
1
+ import{a as e,i as t,o as n,r as ee,s as r}from"#entry";import{t as te}from"./DJM7u8P3.js";import{t as ne}from"./CI0scS-N.js";import{At as i,K as a,S as o,U as s,Xt as c,Yt as l,b as u,d,i as f,lt as p,m,p as h,qt as g,u as _,v as re,y as v}from"./BxuBMtk_.js";var ie={class:`kpis`},ae={class:`v`},oe={class:`v`},se={class:`v`},ce={class:`v`},le={class:`v mono`},ue={class:`card gantt`},de={class:`ticks`},fe={class:`track`},pe={class:`label`},me={class:`lane`},he={class:`grid-lines`},ge=[`title`],_e={class:`track-hd`},ve={class:`tag tag-neutral mono`},ye={class:`dim`},y={class:`grow-row`},b={class:`label`},x={class:`tag tag-ghost`},S={class:`lane`},C={class:`grid-lines`},w={class:`label`},T=[`title`],E=[`title`],D={class:`pts mono dim`},O={class:`lane`},k={class:`grid-lines`},A={class:`track last`},j={class:`label`},M={class:`dim pts mono`},N={class:`tag tag-neutral`},P={class:`lane`},be={class:`grid-lines`},xe={class:`extra`},Se={key:0,class:`card`},Ce={class:`card-hd`},we={class:`h2`},Te={class:`tag tag-neutral`},Ee={class:`card-bd`},De={class:`list`},Oe={class:`dep-txt`},ke={class:`dep-txt dim`},Ae={key:1,class:`card`},je={class:`card-hd`},Me={class:`h2`},F={class:`tag tag-error`},Ne={class:`card-bd`},Pe={class:`list`},Fe={class:`dep-txt`},Ie={class:`dim`},I=t(o({__name:`gantt`,setup(t){let{sprints:o,stories:I,milestones:L,storyById:R,actualRange:z,progress:B,addDays:Le,diffDays:V,md:H,now:U,MS_COLOR:Re,MS_LABEL:ze,KIND_LABEL:Be,KIND_ICON:Ve,STATE_LABEL:He,STATE_DOT:W,dependencyPairs:G,blockedStories:K}=r(),Ue=_(()=>o.value.map(e=>({id:e.id,name:e.name,start:e.start,end:e.end,rows:(e.stories??[]).map(e=>R.value.get(e)).filter(Boolean).map(e=>({...e,actual:z(e),prog:B(e)}))}))),q=_(()=>I.value.filter(e=>e.schedule)),We=_(()=>I.value.filter(e=>!e.schedule)),J=_(()=>[...o.value.map(e=>e.start),...q.value.map(e=>e.schedule.start),...L.value.map(e=>e.due)].sort()[0]??U),Ge=_(()=>{let e=[...o.value.map(e=>e.end),...q.value.map(e=>e.schedule.end),...L.value.map(e=>e.due)].sort();return e[e.length-1]??U}),Y=_(()=>Math.max(1,V(J.value,Ge.value)+1)),X=e=>V(J.value,e)/Y.value*100,Z=(e,t)=>({left:`${X(e)}%`,width:`${Math.max(1.1,(V(e,t)+1)/Y.value*100)}%`}),Q=_(()=>{let e=Y.value>90?14:Y.value>45?7:4,t=[];for(let n=0;n<=Y.value;n+=e)t.push({date:Le(J.value,n),x:n/Y.value*100});return t}),$=_(()=>X(U));return(t,r)=>{let _=ee,z=te,B=ne;return s(),m(`div`,null,[d(`div`,ie,[d(`div`,{class:g([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(0)])},[u(_,{tone:(`cardTone`in t?t.cardTone:i(e))(0),size:`sm`},null,8,[`tone`]),r[1]||=d(`p`,{class:`k`},`迭代窗口`,-1),d(`p`,ae,[v(c(i(o).length),1),r[0]||=d(`small`,null,`个`,-1)])],2),d(`div`,{class:g([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(1)])},[u(_,{tone:(`cardTone`in t?t.cardTone:i(e))(1),size:`sm`},null,8,[`tone`]),r[3]||=d(`p`,{class:`k`},`里程碑`,-1),d(`p`,oe,[v(c(i(L).length),1),r[2]||=d(`small`,null,`个`,-1)])],2),d(`div`,{class:g([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(2)])},[u(_,{tone:(`cardTone`in t?t.cardTone:i(e))(2),size:`sm`},null,8,[`tone`]),r[4]||=d(`p`,{class:`k`},`已排期故事`,-1),d(`p`,se,[v(c(i(q).length),1),d(`small`,null,`/ `+c(i(I).length),1)])],2),d(`div`,{class:g([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(3)])},[u(_,{tone:(`cardTone`in t?t.cardTone:i(e))(3),size:`sm`},null,8,[`tone`]),r[6]||=d(`p`,{class:`k`},`时间跨度`,-1),d(`p`,ce,[v(c(i(Y)),1),r[5]||=d(`small`,null,`天`,-1)])],2),d(`div`,{class:g([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(4)])},[u(_,{tone:(`cardTone`in t?t.cardTone:i(e))(4),size:`sm`},null,8,[`tone`]),r[7]||=d(`p`,{class:`k`},`今天`,-1),d(`p`,le,c(i(U)),1)],2)]),d(`div`,ue,[r[11]||=re(`<div class="gantt-hd" data-v-7bf72906><h2 class="h2" data-v-7bf72906>时间轴</h2><div class="legend" data-v-7bf72906><span class="lg" data-v-7bf72906><i class="sw plan" data-v-7bf72906></i>计划</span><span class="lg" data-v-7bf72906><i class="sw real" data-v-7bf72906></i>实际</span><span class="lg" data-v-7bf72906><i class="sw ms" data-v-7bf72906></i>里程碑</span><span class="lg" data-v-7bf72906><i class="sw mvp" data-v-7bf72906></i>MVP 节点</span><span class="lg" data-v-7bf72906><i class="sw today" data-v-7bf72906></i>今天</span></div></div>`,1),d(`div`,de,[(s(!0),m(f,null,a(i(Q),e=>(s(),m(`div`,{key:e.date,class:`tick`,style:l({left:e.x+`%`})},[d(`span`,null,c(i(H)(e.date)),1)],4))),128)),d(`div`,{class:`today-line`,style:l({left:i($)+`%`})},null,4),d(`div`,{class:`today-flag`,style:l({left:i($)+`%`})},`今天 `+c(i(H)(i(U))),5)]),d(`section`,fe,[r[8]||=d(`header`,{class:`track-hd`},`里程碑`,-1),(s(!0),m(f,null,a(i(L),e=>(s(),m(`div`,{key:e.id,class:`grow-row`},[d(`div`,pe,[d(`span`,{class:g([`tag`,e.kind===`mvp`?`tag-mint`:`tag-primary`])},[u(z,{name:i(Ve)[e.kind],class:`size-3`},null,8,[`name`]),v(c(i(Be)[e.kind]),1)],2),u(B,{to:`/milestones`,class:`lbl-txt`},{default:p(()=>[v(c(e.title),1)]),_:2},1024),d(`span`,{class:g([`tag`,`tag-${i(Re)[e.status]}`])},c(i(ze)[e.status]),3)]),d(`div`,me,[d(`div`,he,[(s(!0),m(f,null,a(i(Q),e=>(s(),m(`span`,{key:e.date,style:l({left:e.x+`%`})},null,4))),128))]),d(`span`,{class:g([`diamond`,{mvp:e.kind===`mvp`}]),style:l({left:X(e.due)+`%`}),title:`${e.id} · ${e.due} · ${e.criteria}`},null,14,ge)])]))),128))]),(s(!0),m(f,null,a(i(Ue),e=>(s(),m(`section`,{key:e.id,class:`track`},[d(`header`,_e,[d(`span`,ve,c(e.id),1),v(` `+c(e.name)+` `,1),d(`span`,ye,c(i(H)(e.start))+` ~ `+c(i(H)(e.end)),1)]),d(`div`,y,[d(`div`,b,[d(`span`,x,[u(z,{name:`i-lucide-calendar-range`,class:`size-3`}),r[9]||=v(`迭代窗口`,-1)])]),d(`div`,S,[d(`div`,C,[(s(!0),m(f,null,a(i(Q),e=>(s(),m(`span`,{key:e.date,style:l({left:e.x+`%`})},null,4))),128))]),d(`div`,{class:`band`,style:l(Z(e.start,e.end))},null,4)])]),(s(!0),m(f,null,a(e.rows,e=>(s(),m(`div`,{key:e.id,class:`grow-row`},[d(`div`,w,[d(`i`,{class:`sdot`,style:l({background:i(W)[e.status]})},null,4),u(B,{to:`/story/${e.id}`,class:`lbl-txt`},{default:p(()=>[v(c(e.title),1)]),_:2},1032,[`to`]),e.dependsOn?.length?(s(),m(`span`,{key:0,class:`tag tag-secondary`,title:`依赖:${e.dependsOn.join(`、`)}`},c(e.dependsOn.length),9,T)):h(``,!0),e.blocked?(s(),m(`span`,{key:1,class:`tag tag-error`,title:`阻塞:${e.blocked.reason}(自 ${e.blocked.since})`},`!`,8,E)):h(``,!0),d(`span`,D,c(e.points)+` 点 · `+c(e.prog.done)+`/`+c(e.prog.total),1)]),d(`div`,O,[d(`div`,k,[(s(!0),m(f,null,a(i(Q),e=>(s(),m(`span`,{key:e.date,style:l({left:e.x+`%`})},null,4))),128))]),e.schedule?(s(),m(`div`,{key:0,class:`g-plan`,style:l(Z(e.schedule.start,e.schedule.end))},null,4)):h(``,!0),e.actual?(s(),m(`div`,{key:1,class:`g-real`,style:l(Z(e.actual.start,e.actual.end))},null,4)):h(``,!0)])]))),128))]))),128)),d(`section`,A,[r[10]||=d(`header`,{class:`track-hd`},`未排期(backlog)`,-1),(s(!0),m(f,null,a(i(We),e=>(s(),m(`div`,{key:e.id,class:`grow-row`},[d(`div`,j,[d(`i`,{class:`sdot`,style:l({background:i(W)[e.status]})},null,4),u(B,{to:`/story/${e.id}`,class:`lbl-txt`},{default:p(()=>[v(c(e.title),1)]),_:2},1032,[`to`]),d(`span`,M,c(e.points)+` 点`,1),d(`span`,N,c(i(He)[e.status]),1)]),d(`div`,P,[d(`div`,be,[(s(!0),m(f,null,a(i(Q),e=>(s(),m(`span`,{key:e.date,style:l({left:e.x+`%`})},null,4))),128))])])]))),128))])]),d(`div`,xe,[i(G).length?(s(),m(`div`,Se,[d(`div`,Ce,[d(`h2`,we,[u(z,{name:`i-lucide-git-branch`,class:`size-3.5`}),r[12]||=v(`依赖链`,-1)]),d(`span`,Te,c(i(G).length),1)]),d(`div`,Ee,[d(`ul`,De,[(s(!0),m(f,null,a(i(G),e=>(s(),m(`li`,{key:`${e.from}-${e.to}`},[u(B,{to:`/story/${e.to}`,class:`mono link`},{default:p(()=>[v(c(e.to),1)]),_:2},1032,[`to`]),d(`span`,Oe,c(i(R).get(e.to)?.title),1),u(z,{name:`i-lucide-arrow-left`,class:`size-3 dim`}),r[13]||=d(`span`,{class:`dim`},`依赖`,-1),u(B,{to:`/story/${e.from}`,class:`mono link`},{default:p(()=>[v(c(e.from),1)]),_:2},1032,[`to`]),d(`span`,ke,c(i(R).get(e.from)?.title),1)]))),128))])])])):h(``,!0),i(K).length?(s(),m(`div`,Ae,[d(`div`,je,[d(`h2`,Me,[u(z,{name:`i-lucide-octagon-alert`,class:`size-3.5`}),r[14]||=v(`阻塞中`,-1)]),d(`span`,F,c(i(K).length),1)]),d(`div`,Ne,[d(`ul`,Pe,[(s(!0),m(f,null,a(i(K),e=>(s(),m(`li`,{key:e.id},[r[15]||=d(`span`,{class:`tag tag-error tag-dot`},`阻塞`,-1),u(B,{to:`/story/${e.id}`,class:`mono link`},{default:p(()=>[v(c(e.id),1)]),_:2},1032,[`to`]),d(`span`,Fe,c(e.title),1),d(`span`,Ie,`· `+c(e.blocked.reason)+`(自 `+c(e.blocked.since)+`)`,1)]))),128))])])])):h(``,!0)])])}}}),[[`__scopeId`,`data-v-7bf72906`]]);export{I as default};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./I-sGtDIB.js","./BuBzMkFZ.js","./BxuBMtk_.js","./DK3Fl9T5.js","./CFCM18fF.js","./DxBwVNyP.js","./BygIGL69.js","./SywdkA98.js","./BW3xJdEx.js","./SrNUvNwO.js","./CI0scS-N.js","./P6qlvBHA.js","./CdPGFZyy.js","./DJM7u8P3.js","./DUgGsde6.js","./BrWE0up6.js","./BE6t7Q2m.js","./DqUSsCJ2.js","./q_8bxRMt.js","./DFQDFspC.js","./C9MgRdhu.js","./BQgzP7ur.js","./CgQ30j_6.js","./DzmVW5-D.js","./B0C2jsdk.js","./CYGiZn-X.js","./C3SpAhCW.js","./Cdf_T8Xa.js","./DV4ti-Pq.js","./CXG7GZes.js","./Dki9VkAL.js","./DLr85ebo.js","./Bubk0xn-.js","./entry.Birf8F5Z.css","./C1iO5KH3.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./I-sGtDIB.js","./BuBzMkFZ.js","./BxuBMtk_.js","./DK3Fl9T5.js","./CFCM18fF.js","./DxBwVNyP.js","./BygIGL69.js","./SywdkA98.js","./BW3xJdEx.js","./SrNUvNwO.js","./CI0scS-N.js","./P6qlvBHA.js","./CdPGFZyy.js","./DJM7u8P3.js","./DUgGsde6.js","./BrWE0up6.js","./BE6t7Q2m.js","./DqUSsCJ2.js","./q_8bxRMt.js","./DFQDFspC.js","./C9MgRdhu.js","./BQgzP7ur.js","./CgQ30j_6.js","./DzmVW5-D.js","./B0C2jsdk.js","./CYGiZn-X.js","./C3SpAhCW.js","./Cdf_T8Xa.js","./DV4ti-Pq.js","./CXG7GZes.js","./Dki9VkAL.js","./DLr85ebo.js","./Bubk0xn-.js","./entry.DplN301E.css","./C1iO5KH3.js"])))=>i.map(i=>d[i]);
2
2
  import{t as e}from"./DK3Fl9T5.js";import{t}from"./P6qlvBHA.js";import{b as n,o as r,v as i,y as a}from"./CFCM18fF.js";import{C as o,E as s,Et as c,S as l,at as u,et as d,gt as f,u as p,x as m}from"./BxuBMtk_.js";import{t as h}from"./CdPGFZyy.js";import"./SrNUvNwO.js";import{n as g,t as _}from"./Bubk0xn-.js";var v=`modulepreload`,y=function(e,t){return new URL(e,t).href},b={},x=function(e){return e.pathname.endsWith(`.css`)},S=function(e,t,n){if(t in e)return e[t];let r=n();if(!r){e[t]=void 0;return}let i=r.then(()=>{e[t]=void 0},n=>{throw e[t]=void 0,n});return e[t]=i,i},C=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e,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}))))}function s(e){return import.meta.resolve?new URL(import.meta.resolve(e)):new URL(e,import.meta.url)}r=o(t.map(t=>{t=y(t,n);let r=s(t),i=x(r);return S(b,r.href,()=>{if(e===void 0){e={all:new Set,styles:new Set};let t=document.getElementsByTagName(`link`);for(let n=t.length-1;n>=0;n--){let r=t[n];e.all.add(r.href),r.rel===`stylesheet`&&e.styles.add(r.href)}}if((i?e.styles:e.all).has(r.href))return;let t=document.createElement(`link`);if(t.rel=i?`stylesheet`:v,i||(t.as=`script`),t.crossOrigin=``,t.href=r.href,a&&t.setAttribute(`nonce`,a),document.head.appendChild(t),i)return new Promise((e,n)=>{t.addEventListener(`load`,e),t.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${r}`)))})})}).filter(e=>e!==void 0))}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)})},w=n({docsBase:i,reporters:a}),T=`$s`;function E(...e){let t=typeof e[e.length-1]==`string`?e.pop():void 0;typeof e[0]!=`string`&&e.unshift(t);let[n,i]=e;if(!n||typeof n!=`string`)throw w.NUXT_E7009({key:n});if(i!==void 0&&typeof i!=`function`)throw w.NUXT_E7007({type:typeof i});let a=T+n,o=r(),s=c(o.payload.state,a);if(i&&(o._state[a]??={_default:i}),s.value===void 0&&i){let e=i();if(f(e))return o.payload.state[a]=e,s;s.value=e}return s}function D(e){let t=e.length,n=0,r=0,i=8997,a=0,o=33826,s=0,c=40164,l=0,u=52210;for(;n<t;)i^=e.charCodeAt(n++),r=i*435,a=o*435,s=c*435,l=u*435,s+=i<<8,l+=o<<8,a+=r>>>16,i=r&65535,s+=a>>>16,o=a&65535,u=l+(s>>>16)&65535,c=s&65535;return{high:(u<<16|c)>>>0,low:(o<<16|i)>>>0}}function O(e){let{high:t,low:n}=D(e);return BigInt(t)<<32n|BigInt(n)}var k=`0123456789abcdef`;Array.from({length:256},(e,t)=>k.charAt(t>>4)+k.charAt(t&15));function A(e){return O(e).toString(36)}var j=new Map;function M(e){let t=e();if(typeof t==`function`){let e=d(),n=E(`nuxt-icon-customize`,()=>({})),r=A(t.toString());o()?.vnode.el&&n.value[e]&&j.set(r,n.value[e])}return p(()=>{let t=e();if(typeof t!=`function`)return;let n=A(t.toString());return j.get(n)||n})}function N(e){return e.replace(/([^\w-])/g,`\\$1`)}function P(e){return e.replace(/[\\^$.*+?()[\]{}|]/g,`\\$&`)}function F(e,t,n){let r=`\\.${P(N(t))}(?:[\\w-]|\\\\.)*`,i=RegExp(`(?:^|[{};])\\s*(?::where\\((${r})\\)|(${r}))\\s*\\{`,`g`);for(let t of e.querySelectorAll(`style`)){let e=(t.textContent||``).replace(/\/\*[\s\S]*?\*\//g,``);for(let t of e.matchAll(i))n.add(t[1]||t[2])}}function I(e,t){let n=e=>{if(e=e.replace(/^:where\((.*)\)$/,`$1`).trim(),e.startsWith(`.`))return e},r=e=>{if(e?.length)for(let i of e){i?.cssRules&&r(i.cssRules);let e=i?.selectorText;if(typeof e==`string`){let r=n(e);r&&t.add(r)}}};for(let t of e.styleSheets)try{r(t.cssRules||t.rules)}catch{}}function L(e,t=globalThis.document){let n=new Set,r;return t&&F(t,e,n),{has(e){return n.has(e)?!0:(r||(r=new Set,t&&I(t,r)),r.has(e))},add(e){n.add(e)}}}function R(e,t,n){if(n){t.appendChild(e);return}let r=t.querySelector(`style, link[rel="stylesheet"]`);r?t.insertBefore(e,r):t.appendChild(e)}var z;function B(){return z?Promise.resolve(z):C(()=>import(`./I-sGtDIB.js`).then(e=>z=e),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]),import.meta.url)}var V,H=l({name:`NuxtIconCss`,props:{name:{type:String,required:!0},customize:{type:[Function,Boolean,null],default:null,required:!1}},setup(e){let n=r(),i=t().icon,a=M(()=>e.customize),o=p(()=>{if(!e.name)return``;let t=i.cssSelectorPrefix+e.name;return a.value?t+`--customized-`+a.value:t});function c(e,t){if(!t)return;let r=e.getIcon(t);if(r)return r;let i=n.payload?.data?.[t];if(i)return e.addIcon(t,i),i}let l=p(()=>`.`+N(o.value));function d(t,n,r=!0,a=l.value){i.cssWherePseudo&&(a=`:where(${a})`);let o=t.getCachedIconCSS(n,a,_(e.customize,i.customize));return i.cssLayer&&r?`@layer ${i.cssLayer} { ${o} }`:o}{let t=V||=L(i.cssSelectorPrefix);async function n(e,n,r,a){if(t.has(a)||typeof document>`u`)return;let o=document.createElement(`style`);o.textContent=d(e,n,!0,a),R(o,document.head,i.cssLayer),t.add(a)}u(()=>e.name,e=>{let r=l.value;if(t.has(r))return;let i=t=>{let i=c(t,e);i?n(t,i,e,r):t.loadIcon(e,-1).then(i=>{i&&n(t,i,e,r)}).catch(()=>null)};z?i(z):B().then(i).catch(()=>null)},{immediate:!0})}return h(),()=>s(`span`,{class:[`iconify`,o.value]})}}),U=m(()=>C(()=>import(`./C1iO5KH3.js`).then(e=>e.NuxtIconSvg),__vite__mapDeps([34,12,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,1,33]),import.meta.url)),W=e({default:()=>G}),G=l({name:`NuxtIcon`,props:{name:{type:String,required:!0},mode:{type:String,required:!1,default:null},size:{type:[Number,String],required:!1,default:null},customize:{type:[Function,Boolean,null],default:null,required:!1}},setup(e,{slots:n}){let i=r(),a=t().icon,o=g(()=>e.name),c=p(()=>i.vueApp?.component(o.value)||((e.mode||a.mode)===`svg`?U:H)),l=p(()=>{let t=e.size||a.size;return t?{fontSize:Number.isNaN(+t)?t:t+`px`}:null});return()=>s(c.value,{...a.attrs,name:o.value,class:a.class,style:l.value,customize:e.customize},n)}});export{C as a,E as i,W as n,A as r,G as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./DJM7u8P3.js";import{t}from"./CI0scS-N.js";import{i as ee,s as n,t as r}from"#entry";import{At as i,K as a,S as o,U as s,Xt as c,Yt as l,b as u,d,f,i as p,lt as m,m as h,p as g,qt as _,u as v,y}from"./BxuBMtk_.js";import{t as te}from"./BgYBC1A-.js";var ne={class:`card hero`},re={class:`chips`},ie={class:`tag tag-ghost`},ae=[`title`],oe=[`title`],se={class:`tag tag-neutral`},ce={key:3,class:`tag tag-primary mono`},le=[`title`],ue={class:`story-title`},de={key:0,class:`narrative-list`},fe={key:1,class:`narrative`},pe={class:`facts`},me={class:`fact`},he={class:`fact`},ge={class:`fact`},_e={class:`fact`},b={class:`fact`},x={class:`mono`},S={class:`fact`},C={class:`mono`},w={class:`dim`},T={class:`fact`},E={class:`mono`},D={key:0,class:`fact`},O={class:`hero-foot`},k={class:`dim`},A={class:`bar`},j={class:`cols`},M={key:0,class:`card block`},N={class:`card-hd`},P={class:`h2`},F={class:`card-bd bug`},I={class:`steps`},ve={key:1,class:`card block`},ye={class:`card-hd`},be={class:`h2`},xe={class:`card-bd`},Se={key:0,class:`callout`},Ce={key:1,class:`dep-row`},we={key:2,class:`dep-row`},Te={class:`card block`},Ee={class:`card-hd`},De={class:`h2`},Oe={class:`tag tag-neutral`},ke={class:`card-bd`},Ae={key:0,class:`ac`},je={class:`ac-row`},Me={class:`ac-row`},Ne={class:`ac-row`},Pe={key:0,class:`ac-row verify`},Fe={key:1,class:`dim`},Ie={key:0,class:`card block`},Le={class:`card-hd`},Re={class:`h2`},ze={class:`tag tag-neutral`},Be={class:`card-bd dg-links`},Ve={class:`tag tag-neutral`},He={key:0,class:`tag tag-warning`},Ue={class:`mono dim`},We={class:`card-hd task-hd`},Ge={class:`tag tag-ghost`},Ke={class:`tag tag-neutral`},qe={class:`task-title`},Je={class:`dim entries-ct`},Ye={key:0,class:`files mono dim`},Xe={class:`card-bd`},Ze={key:0,class:`entries`},L={class:`entry-hd`},Qe={class:`date mono dim`},$e={class:`tag tag-neutral mono result`},et={class:`note`},tt={key:0,class:`cmd mono`},nt={key:1,class:`efiles dim mono`},rt={key:1,class:`dim`},it={class:`pager`},at={class:`pg-k`},ot={class:`pg-t`},st={key:1,class:`pg-empty`},ct={class:`pg-k`},lt={class:`pg-t`},ut={key:1,class:`callout warn`},R=ee(o({__name:`[id]`,setup(ee){let o=r(),{storyById:R,stories:z,epicById:dt,sprintById:ft,journalByTask:pt,actualRange:B,progress:V,milestoneOfStory:mt,STATE_LABEL:ht,STATE_COLOR:gt,TASK_LABEL:_t,TASK_COLOR:vt,KIND_LABEL:yt,MS_LABEL:bt,md:H,diffDays:xt,wsjf:St,dependentsOf:U,TYPE_LABEL:Ct,TYPE_COLOR:wt,TYPE_ICON:Tt,PRIORITY_COLOR:Et,SEVERITY_LABEL:W,SEVERITY_COLOR:G,SCOPE_LABEL:K,storyDiagrams:q,staleDiagrams:Dt,DIAGRAM_KIND_LABEL:Ot,DIAGRAM_KIND_ICON:kt,DIAGRAM_KIND_DOT:At}=n(),J=v(()=>R.value.get(String(o.value?.params?.id))),Y=v(()=>z.value.findIndex(e=>e.id===J.value?.id)),X=v(()=>Y.value>0?z.value[Y.value-1]:null),Z=v(()=>Y.value>=0&&Y.value<z.value.length-1?z.value[Y.value+1]:null),Q=e=>pt.value.get(e)?.entries??[],$=v(()=>te(J.value?.narrative)),jt={red:`RED 失败测试`,green:`GREEN 让测试通过`,refactor:`REFACTOR 重构`},Mt={red:`tag-error`,green:`tag-success`,refactor:`tag-primary`};return(ee,n)=>{let r=e,o=t;return s(),h(`div`,null,[i(J)?(s(),h(p,{key:0},[u(o,{to:`/`,class:`btn btn-quiet btn-sm back`},{default:m(()=>[u(r,{name:`i-lucide-arrow-left`,class:`size-3.5`}),n[0]||=y(`返回看板 `,-1)]),_:1}),d(`article`,ne,[d(`div`,re,[d(`span`,ie,c(i(J).id),1),d(`span`,{class:_([`tag`,`tag-${i(gt)[i(J).status]}`])},c(i(ht)[i(J).status]??i(J).status),3),d(`span`,{class:_([`tag`,`tag-${i(wt)[i(J).type]}`])},[u(r,{name:i(Tt)[i(J).type],class:`size-3`},null,8,[`name`]),y(c(i(Ct)[i(J).type]),1)],2),d(`span`,{class:_([`tag`,`tag-${i(Et)[i(J).priority]}`])},c(i(J).priority),3),i(J).bug?(s(),h(`span`,{key:0,class:_([`tag`,`tag-${i(G)[i(J).bug.severity]}`])},[u(r,{name:`i-lucide-bug`,class:`size-3`}),y(c(i(W)[i(J).bug.severity]),1)],2)):g(``,!0),i(J).blocked?(s(),h(`span`,{key:1,class:`tag tag-error tag-dot`,title:i(J).blocked.reason},`阻塞`,8,ae)):g(``,!0),i(J).scopeChange?(s(),h(`span`,{key:2,class:`tag tag-info`,title:`${i(K)[i(J).scopeChange.kind]}(${i(J).scopeChange.at}):${i(J).scopeChange.reason}`},c(i(K)[i(J).scopeChange.kind])+` · `+c(i(J).scopeChange.at),9,oe)):g(``,!0),d(`span`,se,[u(r,{name:`i-lucide-layers`,class:`size-3`}),y(c(i(J).epicId)+` `+c(i(dt).get(i(J).epicId)?.title),1)]),i(J).sprintId?(s(),h(`span`,ce,[u(r,{name:`i-lucide-calendar-range`,class:`size-3`}),y(c(i(J).sprintId),1)])):g(``,!0),(s(!0),h(p,null,a(i(mt)(i(J).id),e=>(s(),h(`span`,{key:e.id,class:_([`tag`,e.kind===`mvp`?`tag-mint`:`tag-neutral`]),title:`${e.id} · ${e.criteria}`},c(i(yt)[e.kind])+` `+c(e.id)+` · `+c(i(bt)[e.status]),11,le))),128))]),d(`h1`,ue,c(i(J).title),1),i($).length>1?(s(),h(`ol`,de,[(s(!0),h(p,null,a(i($),(e,t)=>(s(),h(`li`,{key:t},c(e),1))),128))])):i($).length?(s(),h(`p`,fe,c(i($)[0]),1)):g(``,!0),d(`div`,pe,[d(`div`,me,[n[1]||=d(`span`,{class:`k`},`点数`,-1),d(`b`,null,c(i(J).points),1)]),d(`div`,he,[n[2]||=d(`span`,{class:`k`},`价值`,-1),d(`b`,null,c(i(J).value),1)]),d(`div`,ge,[n[3]||=d(`span`,{class:`k`},`WSJF`,-1),d(`b`,null,c(i(St)(i(J))),1)]),d(`div`,_e,[n[4]||=d(`span`,{class:`k`},`任务`,-1),d(`b`,null,c(i(V)(i(J)).done)+`/`+c(i(V)(i(J)).total),1)]),d(`div`,b,[n[5]||=d(`span`,{class:`k`},`计划`,-1),d(`b`,x,c(i(J).schedule?`${i(H)(i(J).schedule.start)} ~ ${i(H)(i(J).schedule.end)}`:`未排期`),1)]),d(`div`,S,[n[6]||=d(`span`,{class:`k`},`实际`,-1),d(`b`,C,[i(B)(i(J))?(s(),h(p,{key:0},[y(c(i(H)(i(B)(i(J)).start))+` ~ `+c(i(H)(i(B)(i(J)).end))+` `,1),d(`small`,w,`(`+c(i(xt)(i(B)(i(J)).start,i(B)(i(J)).end)+1)+` 天)`,1)],64)):(s(),h(p,{key:1},[y(`—`)],64))])]),d(`div`,T,[n[7]||=d(`span`,{class:`k`},`创建`,-1),d(`b`,E,c(i(J).created),1)]),i(J).sprintId?(s(),h(`div`,D,[n[8]||=d(`span`,{class:`k`},`所属迭代`,-1),d(`b`,null,c(i(ft).get(i(J).sprintId)?.name),1)])):g(``,!0)]),d(`div`,O,[d(`span`,k,`任务完成度 `+c(i(V)(i(J)).pct)+`%`,1),d(`div`,A,[d(`i`,{style:l({width:i(V)(i(J)).pct+`%`})},null,4)])])]),d(`div`,j,[i(J).bug?(s(),h(`article`,M,[d(`div`,N,[d(`h2`,P,[u(r,{name:`i-lucide-bug`,class:`size-3.5`}),n[9]||=y(`缺陷详情`,-1)]),d(`span`,{class:_([`tag`,`tag-${i(G)[i(J).bug.severity]}`])},c(i(W)[i(J).bug.severity]),3)]),d(`div`,F,[d(`div`,null,[n[10]||=d(`span`,{class:`lbl`},`影响环境`,-1),d(`p`,null,c(i(J).bug.environment),1)]),d(`div`,null,[n[11]||=d(`span`,{class:`lbl`},`复现步骤`,-1),d(`p`,I,c(i(J).bug.steps),1)])])])):g(``,!0),i(J).blocked||i(J).dependsOn?.length||i(U)(i(J).id).length?(s(),h(`article`,ve,[d(`div`,ye,[d(`h2`,be,[u(r,{name:`i-lucide-git-branch`,class:`size-3.5`}),n[12]||=y(`依赖与阻塞`,-1)])]),d(`div`,xe,[i(J).blocked?(s(),h(`div`,Se,[u(r,{name:`i-lucide-octagon-alert`,class:`size-4`}),d(`div`,null,[n[13]||=d(`b`,null,`当前被阻塞`,-1),d(`p`,null,c(i(J).blocked.reason)+`(自 `+c(i(J).blocked.since)+` 起)`,1)])])):g(``,!0),i(J).dependsOn?.length?(s(),h(`div`,Ce,[n[14]||=d(`span`,{class:`lbl`},`依赖`,-1),(s(!0),h(p,null,a(i(J).dependsOn,e=>(s(),f(o,{key:e,to:`/story/${e}`,class:`dep`},{default:m(()=>[u(r,{name:`i-lucide-arrow-left`,class:`size-3`}),y(c(e)+` `+c(i(R).get(e)?.title??``),1)]),_:2},1032,[`to`]))),128))])):g(``,!0),i(U)(i(J).id).length?(s(),h(`div`,we,[n[15]||=d(`span`,{class:`lbl`},`被依赖`,-1),(s(!0),h(p,null,a(i(U)(i(J).id),e=>(s(),f(o,{key:e.id,to:`/story/${e.id}`,class:`dep ghost`},{default:m(()=>[y(c(e.id)+` `+c(e.title),1),u(r,{name:`i-lucide-arrow-right`,class:`size-3`})]),_:2},1032,[`to`]))),128))])):g(``,!0)])])):g(``,!0)]),d(`article`,Te,[d(`div`,Ee,[d(`h2`,De,[u(r,{name:`i-lucide-list-checks`,class:`size-3.5`}),n[16]||=y(`验收标准`,-1)]),d(`span`,Oe,c(i(J).acceptance?.length??0)+` 条`,1)]),d(`div`,ke,[i(J).acceptance?.length?(s(),h(`ol`,Ae,[(s(!0),h(p,null,a(i(J).acceptance,(e,t)=>(s(),h(`li`,{key:t},[d(`div`,je,[n[17]||=d(`span`,{class:`tag tag-neutral gw`},`Given`,-1),d(`span`,null,c(e.given),1)]),d(`div`,Me,[n[18]||=d(`span`,{class:`tag tag-info gw`},`When`,-1),d(`span`,null,c(e.when),1)]),d(`div`,Ne,[n[19]||=d(`span`,{class:`tag tag-success gw`},`Then`,-1),d(`span`,null,c(e.then),1)]),e.verifyBy?.length?(s(),h(`div`,Pe,[n[20]||=d(`span`,{class:`dim`},`由谁验证`,-1),(s(!0),h(p,null,a(e.verifyBy,e=>(s(),h(`span`,{key:e,class:`tag tag-ghost`},c(e),1))),128))])):g(``,!0)]))),128))])):(s(),h(`p`,Fe,`还没有验收标准(草稿阶段允许为空,进迭代前必须补)。`))])]),(i(q).get(i(J).id)??[]).length?(s(),h(`article`,Ie,[d(`div`,Le,[d(`h2`,Re,[u(r,{name:`i-lucide-network`,class:`size-3.5`}),n[21]||=y(`架构图例`,-1)]),d(`span`,ze,c((i(q).get(i(J).id)??[]).length)+` 张`,1),n[22]||=d(`span`,{class:`dim tip`},`点开在看板里预览`,-1)]),d(`div`,Be,[(s(!0),h(p,null,a(i(q).get(i(J).id),e=>(s(),f(o,{key:e.id,to:`/diagrams?focus=${e.id}`,class:`dg-link`},{default:m(()=>[u(r,{name:i(kt)[e.kind],class:`size-3.5`,style:l({color:i(At)[e.kind]})},null,8,[`name`,`style`]),d(`b`,null,c(e.title),1),d(`span`,Ve,c(i(Ot)[e.kind]),1),i(Dt).has(e.id)?(s(),h(`span`,He,`可能过期`)):g(``,!0),d(`span`,Ue,c(e.id)+` · `+c(i(H)(e.updatedAt)),1)]),_:2},1032,[`to`]))),128))])])):g(``,!0),(s(!0),h(p,null,a(i(J).tasks,e=>(s(),h(`article`,{key:e.id,class:`card block`},[d(`div`,We,[d(`span`,Ge,c(e.id),1),d(`span`,Ke,c(e.type),1),d(`span`,{class:_([`tag`,`tag-${i(vt)[e.status]}`])},c(i(_t)[e.status]),3),d(`b`,qe,c(e.title),1),d(`span`,Je,c(Q(e.id).length)+` 条记录`,1)]),e.files?.length?(s(),h(`p`,Ye,c(e.files.join(` · `)),1)):g(``,!0),d(`div`,Xe,[Q(e.id).length?(s(),h(`div`,Ze,[(s(!0),h(p,null,a(Q(e.id),(e,t)=>(s(),h(`div`,{key:t,class:_([`entry`,e.phase])},[d(`div`,L,[d(`span`,{class:_([`tag`,Mt[e.phase]])},c(jt[e.phase]),3),d(`span`,Qe,c(i(H)(e.date)),1),d(`span`,$e,c(e.result),1)]),d(`p`,et,c(e.note),1),e.testCommand?(s(),h(`p`,tt,[u(r,{name:`i-lucide-terminal`,class:`size-3`}),y(c(e.testCommand),1)])):g(``,!0),e.files?.length?(s(),h(`p`,nt,c(e.files.join(`, `)),1)):g(``,!0)],2))),128))])):(s(),h(`p`,rt,`还没有实施记录(未开工)。`))])]))),128)),d(`div`,it,[i(X)?(s(),f(o,{key:0,to:`/story/${i(X).id}`,class:`pg`},{default:m(()=>[d(`span`,at,[u(r,{name:`i-lucide-arrow-left`,class:`size-3.5`}),n[23]||=y(`上一个`,-1)]),d(`span`,ot,c(i(X).id)+` `+c(i(X).title),1)]),_:1},8,[`to`])):(s(),h(`span`,st)),i(Z)?(s(),f(o,{key:2,to:`/story/${i(Z).id}`,class:`pg right`},{default:m(()=>[d(`span`,ct,[n[24]||=y(`下一个`,-1),u(r,{name:`i-lucide-arrow-right`,class:`size-3.5`})]),d(`span`,lt,c(i(Z).id)+` `+c(i(Z).title),1)]),_:1},8,[`to`])):g(``,!0)])],64)):(s(),h(`div`,ut,[u(r,{name:`i-lucide-search-x`,class:`size-4`}),n[25]||=y(`没找到这个故事,可能 id 写错了。 `,-1)]))])}}}),[[`__scopeId`,`data-v-6619d60f`]]);export{R as default};
@@ -0,0 +1 @@
1
+ .back[data-v-6619d60f]{margin-bottom:8px;margin-left:-8px}.hero[data-v-6619d60f]{border-radius:var(--r-xl);margin-bottom:12px;padding:15px 17px 14px}.chips[data-v-6619d60f]{flex-wrap:wrap;gap:5px;margin-bottom:10px;display:flex}.story-title[data-v-6619d60f]{letter-spacing:-.028em;font-size:21px;font-weight:680;line-height:1.3}.narrative[data-v-6619d60f],.narrative-list[data-v-6619d60f]{color:var(--ink-2);max-width:88ch;margin:7px 0 13px;font-size:12.8px;line-height:1.6}.narrative-list[data-v-6619d60f]{counter-reset:nv;gap:4px;padding:0;list-style:none;display:grid}.narrative-list>li[data-v-6619d60f]{counter-increment:nv;padding-left:20px;position:relative}.narrative-list>li[data-v-6619d60f]:before{content:counter(nv) ".";text-align:right;font-variant-numeric:tabular-nums;width:14px;color:var(--violet-ink);font-weight:700;position:absolute;top:0;left:0}.facts[data-v-6619d60f]{grid-template-columns:repeat(auto-fit,minmax(122px,1fr));gap:7px;margin-bottom:12px;display:grid}.fact[data-v-6619d60f]{background:var(--sunken-2);border:1px solid var(--line);border-radius:11px;flex-direction:column;gap:2px;min-width:0;padding:8px 11px;display:flex}.fact .k[data-v-6619d60f]{letter-spacing:.07em;text-transform:uppercase;color:var(--ink-4);font-size:9.6px;font-weight:650}.fact b[data-v-6619d60f]{letter-spacing:-.01em;flex-wrap:wrap;align-items:baseline;gap:3px;font-size:12.4px;font-weight:650;line-height:1.4;display:flex}.fact b small[data-v-6619d60f]{white-space:nowrap;font-size:10px;font-weight:500}.hero-foot[data-v-6619d60f]{align-items:center;gap:10px;display:flex}.hero-foot .dim[data-v-6619d60f]{white-space:nowrap;font-size:10.8px}.hero-foot .bar[data-v-6619d60f]{flex:1;max-width:320px}.cols[data-v-6619d60f]{grid-template-columns:repeat(auto-fit,minmax(380px,1fr));gap:12px;display:grid}.block[data-v-6619d60f]{border-radius:var(--r-lg);margin-bottom:12px;overflow:hidden}.bug[data-v-6619d60f]{gap:11px;display:grid}.bug p[data-v-6619d60f]{margin-top:3px;font-size:12.4px;line-height:1.6}.steps[data-v-6619d60f]{background:var(--sunken);border:1px solid var(--line);border-radius:10px;padding:9px 11px}.dep-row[data-v-6619d60f]{flex-wrap:wrap;gap:6px;margin-top:9px;display:flex}.dep[data-v-6619d60f],.dep-row[data-v-6619d60f]{align-items:center}.dep[data-v-6619d60f]{border:1px solid var(--violet-line);background:var(--violet-soft);color:var(--violet-ink);text-overflow:ellipsis;white-space:nowrap;border-radius:999px;gap:4px;max-width:100%;padding:3px 10px;font-size:11.4px;font-weight:600;display:inline-flex;overflow:hidden}.dep.ghost[data-v-6619d60f]{border-color:var(--line-2);color:var(--ink-2);background:#fff}.dep[data-v-6619d60f]:hover{border-color:#c7b6f9}.ac[data-v-6619d60f]{counter-reset:ac;gap:10px;margin:0;padding:0;list-style:none;display:grid}.ac li[data-v-6619d60f]{counter-increment:ac;background:var(--sunken-2);border:1px solid var(--line);border-radius:12px;padding:11px 13px 11px 42px;position:relative}.ac li[data-v-6619d60f]:before{content:counter(ac);border:1px solid var(--violet-line);width:20px;height:20px;color:var(--violet-ink);background:#fff;border-radius:999px;place-items:center;font-size:10.4px;font-weight:700;display:grid;position:absolute;top:12px;left:12px}.ac-row[data-v-6619d60f]{align-items:baseline;gap:8px;margin-top:3px;font-size:12.3px;line-height:1.6;display:flex}.ac-row[data-v-6619d60f]:first-child{margin-top:0}.ac-row.verify[data-v-6619d60f]{align-items:center;margin-top:8px;font-size:10.8px}.gw[data-v-6619d60f]{flex:none;justify-content:center;width:46px}.task-hd[data-v-6619d60f]{padding-bottom:10px}.task-title[data-v-6619d60f]{min-width:0;font-size:12.8px;font-weight:650}.entries-ct[data-v-6619d60f]{margin-left:auto;font-size:10.4px}.files[data-v-6619d60f]{padding:7px 16px 0;font-size:10.4px}.entries[data-v-6619d60f]{gap:8px;display:grid}.entry[data-v-6619d60f]{background:var(--sunken-2);border:1px solid var(--line);border-left:3px solid var(--line-2);border-radius:12px;padding:10px 12px}.entry.red[data-v-6619d60f]{border-left-color:#e08585}.entry.green[data-v-6619d60f]{border-left-color:#8dc46a}.entry.refactor[data-v-6619d60f]{border-left-color:var(--lilac-deep)}.entry-hd[data-v-6619d60f]{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.date[data-v-6619d60f]{font-size:10.4px}.dg-link .mono[data-v-6619d60f],.result[data-v-6619d60f]{margin-left:auto}.note[data-v-6619d60f]{color:var(--ink-2);margin-top:6px;font-size:12.2px;line-height:1.6}.cmd[data-v-6619d60f]{color:var(--violet-ink);background:#f4f0fe;border:1px solid #e5dbfd;border-radius:7px;align-items:center;gap:5px;margin-top:7px;padding:2px 8px;font-size:10.6px;display:inline-flex}.efiles[data-v-6619d60f]{margin-top:6px;font-size:10.2px}.pager[data-v-6619d60f]{grid-template-columns:1fr 1fr;gap:10px;margin-top:4px;display:grid}.pg[data-v-6619d60f]{border-radius:var(--r-md);border:1px solid var(--line);box-shadow:var(--shadow-1);background:#fff;flex-direction:column;gap:3px;min-width:0;padding:10px 13px;transition:border-color .16s,transform .16s;display:flex}.pg[data-v-6619d60f]:hover{border-color:#ded4fb;transform:translateY(-1px)}.pg.right[data-v-6619d60f]{text-align:right;align-items:flex-end}.pg-k[data-v-6619d60f]{letter-spacing:.05em;text-transform:uppercase;color:var(--ink-4);align-items:center;gap:4px;font-size:10.2px;font-weight:650;display:inline-flex}.pg-t[data-v-6619d60f]{text-overflow:ellipsis;white-space:nowrap;max-width:100%;font-size:12.2px;font-weight:600;overflow:hidden}.dg-links[data-v-6619d60f]{gap:4px;display:grid}.dg-link[data-v-6619d60f]{color:var(--ink-2);border:1px solid #0000;border-radius:10px;align-items:center;gap:8px;padding:7px 9px;font-size:12px;display:flex}.dg-link[data-v-6619d60f]:hover{background:var(--violet-soft);border-color:var(--violet-line);color:var(--violet-ink)}.dg-link .mono[data-v-6619d60f]{font-size:10.4px}
@@ -1 +1 @@
1
- {"id":"36a46dc2-c9fd-444c-a454-4487435c77b9","timestamp":1794057688952}
1
+ {"id":"ef150044-a595-4b33-8a1a-103e86dccf28","timestamp":1794120045701}
@@ -0,0 +1 @@
1
+ {"id":"ef150044-a595-4b33-8a1a-103e86dccf28","timestamp":1794120045701,"prerendered":[]}
@@ -0,0 +1 @@
1
+ .kpi .v.bad[data-v-8a03a4f8]{color:var(--rose)}.kpi .v.good[data-v-8a03a4f8]{color:var(--green)}.panel[data-v-8a03a4f8]{border-radius:var(--r-xl);margin-bottom:12px;overflow:hidden}.panel-hd[data-v-8a03a4f8]{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:14px;padding:14px 16px;display:flex}.sp-name[data-v-8a03a4f8]{letter-spacing:-.015em;font-size:15px;font-weight:660}.ph-l .sub[data-v-8a03a4f8]{margin-top:3px;font-size:11.2px}.goal[data-v-8a03a4f8]{color:var(--ink-2);max-width:80ch;margin-top:7px;font-size:12px;line-height:1.55}.bd-select[data-v-8a03a4f8]{max-width:300px}.chart-wrap[data-v-8a03a4f8]{padding:10px 16px 0;position:relative}.chart-legend[data-v-8a03a4f8]{color:var(--ink-3);gap:12px;margin-bottom:2px;font-size:10.8px;display:flex}.lg[data-v-8a03a4f8]{align-items:center;gap:5px;display:inline-flex}.sw[data-v-8a03a4f8]{border-radius:999px;width:14px;height:3px;display:inline-block}.sw.actual[data-v-8a03a4f8]{background:var(--grad)}.sw.ideal[data-v-8a03a4f8]{background:repeating-linear-gradient(90deg,#cdc9d8 0 4px,#0000 0 7px)}.sw.scope[data-v-8a03a4f8]{background:#3f7fd4;width:2px;height:11px}.chart[data-v-8a03a4f8]{width:100%;max-width:980px;display:block}.cells[data-v-8a03a4f8]{gap:5px;padding:10px 16px 2px;display:flex;overflow-x:auto}.cell[data-v-8a03a4f8]{background:var(--sunken-2);border:1px solid var(--line);border-radius:10px;flex:1 1 0;grid-template-columns:1fr auto;gap:0 5px;min-width:62px;padding:6px 8px 8px;display:grid;position:relative;overflow:hidden}.cell.today[data-v-8a03a4f8]{background:#fdf1ef;border-color:#f3cec6}.cell.future[data-v-8a03a4f8]{opacity:.62}.cell.scope[data-v-8a03a4f8]{background:#eff5fd;border-color:#d5e6fa}.cd[data-v-8a03a4f8]{color:var(--ink-4);grid-column:1/-1;font-size:9.6px}.ca[data-v-8a03a4f8]{letter-spacing:-.02em;font-size:12.4px;font-weight:680}.ci[data-v-8a03a4f8]{align-self:center;font-size:10.2px}.underline[data-v-8a03a4f8]{background:var(--grad);height:2px;position:absolute;bottom:0;left:0}.foot[data-v-8a03a4f8]{margin-top:7px;padding:0 16px;font-size:10.6px}.scope[data-v-8a03a4f8]{border-top:1px dashed var(--line-2);margin:12px 16px 16px;padding:12px 0 0}.scope ul[data-v-8a03a4f8]{gap:6px;margin:8px 0 0;padding:0;font-size:11.8px;list-style:none;display:grid}.scope li[data-v-8a03a4f8]{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.scope .foot[data-v-8a03a4f8]{margin-top:8px;padding:0}.link[data-v-8a03a4f8]{font-weight:640}.link[data-v-8a03a4f8]:hover{color:var(--violet-ink)}.tip[data-v-8a03a4f8]{margin-left:auto;font-size:10.8px}
@@ -0,0 +1 @@
1
+ .diagrams-page>.callout[data-v-2415570b]{margin-bottom:12px}.diagrams-page[data-v-2415570b]{flex-direction:column;height:calc(100vh - 112px);min-height:480px;display:flex}.dg-layout[data-v-2415570b]{flex:1;grid-template-rows:minmax(0,1fr);grid-template-columns:272px minmax(0,1fr);gap:0;min-height:0;display:grid}.dg-list[data-v-2415570b]{border-right:1px solid var(--line);flex-direction:column;min-height:0;padding:2px 0 6px 2px;display:flex;overflow:hidden}.dg-head[data-v-2415570b]{align-items:baseline;gap:7px;padding:2px 12px 8px 0;display:flex}.dg-title[data-v-2415570b]{letter-spacing:-.015em;font-size:14px;font-weight:680}.dg-total[data-v-2415570b]{color:var(--ink-4);font-size:10.5px}.dg-head-link[data-v-2415570b]{margin-left:auto;font-size:11px}.dg-filter[data-v-2415570b]{gap:6px;margin-bottom:8px;padding-right:12px;display:flex}.dg-filter .input[data-v-2415570b]{box-sizing:border-box;background:var(--sunken);min-width:0;height:27px;color:var(--ink);border:1px solid #0000;border-radius:999px;outline:none;flex:1;padding:0 11px;font-family:inherit;font-size:11.4px;transition:background .14s,border-color .14s,box-shadow .14s}.dg-filter .input[data-v-2415570b]::placeholder{color:var(--ink-4)}.dg-filter .input[data-v-2415570b]:hover{background:#f1f1ec}.dg-filter .input[data-v-2415570b]:focus,.dg-filter .input[data-v-2415570b]:focus-visible{border-color:var(--violet-line);background:#fff;outline:none;box-shadow:0 0 0 3px #6d4ff024}.dg-filter .chip[data-v-2415570b],.dot[data-v-2415570b]{flex:none}.chip[data-v-2415570b]{box-sizing:border-box;background:var(--sunken);height:27px;color:var(--ink-2);border:1px solid #0000;border-radius:999px;align-items:center;gap:5px;padding:0 9px;font-size:11px;display:inline-flex}.chip[data-v-2415570b]:hover{background:var(--line)}.chip.on[data-v-2415570b]{background:var(--violet-soft);border-color:var(--violet-line);color:var(--violet-ink);font-weight:650}.dot[data-v-2415570b]{border-radius:999px;width:7px;height:7px}.dg-tree[data-v-2415570b]{overscroll-behavior:contain;scrollbar-width:auto;scrollbar-color:auto;scrollbar-gutter:stable;flex:1;align-content:start;gap:4px;min-height:0;padding:0 12px 2px 0;display:grid;overflow-y:auto}.dg-tree[data-v-2415570b]::-webkit-scrollbar{width:5px}.dg-tree[data-v-2415570b]::-webkit-scrollbar-track{background:0 0;margin:4px 0}.dg-tree[data-v-2415570b]::-webkit-scrollbar-thumb{background:#dedcd5;border:0;border-radius:999px;min-height:36px}.dg-tree[data-v-2415570b]::-webkit-scrollbar-thumb:hover{background:#c9c6bd}.dg-tree[data-v-2415570b]::-webkit-scrollbar-thumb:active{background:#b8b4a9}.dg-group-hd[data-v-2415570b]{width:100%;color:var(--ink-2);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:8px;align-items:center;gap:6px;padding:4px 6px 4px 3px;font-size:11.6px;font-weight:660;display:flex}.dg-group-hd[data-v-2415570b]:hover{background:var(--sunken-2);color:var(--ink)}.dg-group-lb[data-v-2415570b]{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.dg-group-n[data-v-2415570b]{color:var(--ink-4);margin-left:auto;font-size:10px}.dg-chev[data-v-2415570b]{width:13px;height:13px;color:var(--ink-4);flex:none;transition:transform .16s}.dg-chev.fold[data-v-2415570b]{transform:rotate(-90deg)}.dg-items[data-v-2415570b]{gap:1px;margin:1px 0 2px;padding:0 0 2px 15px;list-style:none;display:grid;position:relative}.dg-items[data-v-2415570b]:before{content:"";background:var(--line-2);width:1px;position:absolute;top:1px;bottom:3px;left:5px}.dg-item[data-v-2415570b]{cursor:pointer;border-radius:8px;align-items:flex-start;gap:7px;padding:5px 6px 5px 5px;transition:background .14s;display:flex;position:relative}.dg-item[data-v-2415570b]:hover{background:var(--sunken-2)}.dg-item.on[data-v-2415570b]:before{content:"";background:var(--violet);border-radius:2px;width:2px;position:absolute;top:2px;bottom:2px;left:-10px}.dg-ic[data-v-2415570b]{width:14px;height:14px;color:var(--ink-4);flex:none;margin-top:1px}.dg-item:hover .dg-ic[data-v-2415570b]{color:var(--ink-3)}.dg-item.on .dg-ic[data-v-2415570b]{color:var(--violet)}.dg-name[data-v-2415570b]{flex-direction:column;min-width:0;line-height:1.35;display:flex}.dg-name b[data-v-2415570b]{color:var(--ink-2);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:560;overflow:hidden}.dg-item:hover .dg-name b[data-v-2415570b]{color:var(--ink)}.dg-item.on .dg-name b[data-v-2415570b]{color:var(--violet-ink);font-weight:680}.dg-name small[data-v-2415570b]{color:var(--ink-4);font-size:9.6px}.dg-item .tag[data-v-2415570b]{flex:none;margin-left:auto}.dg-main[data-v-2415570b]{flex-direction:column;min-width:0;min-height:0;padding:0 2px 10px 16px;display:flex;overflow:hidden}.dg-main-hd[data-v-2415570b]{flex-wrap:wrap;align-items:center;gap:8px;padding:0 0 9px;display:flex}.dg-h2[data-v-2415570b]{letter-spacing:-.02em;font-size:15px;font-weight:680}.dg-open[data-v-2415570b]{margin-left:auto}.dg-frame[data-v-2415570b]{border:1px solid var(--line);touch-action:none;-webkit-user-select:none;user-select:none;background:#fff;border-radius:10px;flex:1;width:100%;min-height:0;margin:0 0 10px;position:relative;overflow:hidden}.dg-frame.has-canvas[data-v-2415570b]{cursor:grab}.dg-frame.dragging[data-v-2415570b]{cursor:grabbing}.dg-frame iframe[data-v-2415570b]{border:0;width:100%;height:100%;position:absolute;inset:0}.dg-canvas-img[data-v-2415570b]{-webkit-user-drag:none;pointer-events:none;max-width:none;position:absolute}.dg-canvas-hint[data-v-2415570b]{place-items:center;font-size:12px;display:grid;position:absolute;inset:0}.dg-zoom[data-v-2415570b]{border:1px solid var(--line-2);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);opacity:.6;background:#ffffffeb;border-radius:999px;align-items:center;gap:2px;padding:3px;transition:opacity .15s;display:flex;position:absolute;bottom:10px;right:10px;box-shadow:0 6px 18px -10px #1c1b1973}.dg-frame:focus-within .dg-zoom[data-v-2415570b],.dg-frame:hover .dg-zoom[data-v-2415570b]{opacity:1}.dg-zbtn[data-v-2415570b]{min-width:26px;height:22px;color:var(--ink-2);cursor:pointer;background:0 0;border:0;border-radius:999px;padding:0 7px;font-size:11px;line-height:22px}.dg-zbtn[data-v-2415570b]:hover{background:var(--sunken-2);color:var(--violet-ink)}.dg-zval[data-v-2415570b]{text-align:center;min-width:40px;color:var(--ink-3);font-size:10.5px}.dg-hint[data-v-2415570b]{color:var(--ink-4);pointer-events:none;font-size:10px;position:absolute;bottom:14px;left:10px}.dg-meta[data-v-2415570b]{color:var(--ink-2);flex-wrap:wrap;align-items:center;gap:6px 14px;margin:0 0 9px;font-size:11.8px;line-height:1.6;display:flex}.dg-meta>p[data-v-2415570b]{flex:260px;min-width:0}.dg-tags[data-v-2415570b]{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.sep[data-v-2415570b]{background:var(--line-2);width:1px;height:14px}.dl[data-v-2415570b]{font-weight:620}.dl[data-v-2415570b]:hover{color:var(--violet-ink)}.dg-path[data-v-2415570b]{margin-left:auto;font-size:10.2px}.dg-meta button.dl[data-v-2415570b]{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}.dg-meta button.dl[data-v-2415570b]:disabled{color:var(--ink-4);cursor:progress}.dg-meta button.dl[data-v-2415570b]:hover:not(:disabled){color:var(--violet-ink)}@media (width<=1080px){.diagrams-page[data-v-2415570b]{height:auto;min-height:0;display:block}.dg-layout[data-v-2415570b]{grid-template-rows:none;grid-template-columns:minmax(0,1fr)}.dg-list[data-v-2415570b]{border-right:0;border-bottom:1px solid var(--line);padding:2px 0 8px;display:block;overflow:visible}.dg-tree[data-v-2415570b]{scrollbar-width:thin;scrollbar-color:#dcdad4 transparent;overflow-y:visible}.dg-main[data-v-2415570b]{padding:12px 2px 8px 0;overflow:visible}.dg-frame[data-v-2415570b]{min-height:0;aspect-ratio:var(--dg-ratio,3/2);flex:none;margin-bottom:0}.dg-items[data-v-2415570b]{max-height:none}}