scrum-skills 0.3.5 → 0.3.6

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 (64) hide show
  1. package/.agents/skills/scrum-planning/references/schema.md +3 -2
  2. package/.agents/skills/scrum-sprint/SKILL.md +1 -0
  3. package/README.md +224 -224
  4. package/assets/board/200.html +1 -1
  5. package/assets/board/404.html +1 -1
  6. package/assets/board/_nuxt/{BtzUbHO_.js → BGwhkDRl.js} +1 -1
  7. package/assets/board/_nuxt/{COecDWbb.js → BmrSh0rL.js} +1 -1
  8. package/assets/board/_nuxt/{CtFknnHZ.js → C-fx-vFO.js} +1 -1
  9. package/assets/board/_nuxt/{DZ--fXuU.js → Cajxc4Dw.js} +1 -1
  10. package/assets/board/_nuxt/{ChUHb39z.js → CoipdpDu.js} +1 -1
  11. package/assets/board/_nuxt/{1XlYaCp9.js → D1V1gysQ.js} +1 -1
  12. package/assets/board/_nuxt/{BKrRful0.js → D5AHQ-N9.js} +1 -1
  13. package/assets/board/_nuxt/D_ct-Stz.js +1 -1
  14. package/assets/board/_nuxt/{DKRYKLGF.js → Dh0tYNMD.js} +4 -4
  15. package/assets/board/_nuxt/{BizDeOK5.js → DwCE3305.js} +1 -1
  16. package/assets/board/_nuxt/{BXL77dAA.js → DwzGxoX2.js} +1 -1
  17. package/assets/board/_nuxt/NtgBvUDk.js +1 -0
  18. package/assets/board/_nuxt/_id_.B6iqDPxe.css +1 -0
  19. package/assets/board/_nuxt/{oSJF4yHw.js → b7xtxFRl.js} +1 -1
  20. package/assets/board/_nuxt/builds/latest.json +1 -1
  21. package/assets/board/_nuxt/builds/meta/36a46dc2-c9fd-444c-a454-4487435c77b9.json +1 -0
  22. package/assets/board/_nuxt/burndown.Do6IbM6o.css +1 -0
  23. package/assets/board/_nuxt/diagrams.pyhqNtmr.css +1 -0
  24. package/assets/board/_nuxt/{entry.DplN301E.css → entry.Birf8F5Z.css} +1 -1
  25. package/assets/board/_nuxt/epics.Dmessplu.css +1 -0
  26. package/assets/board/_nuxt/error-404.CgJNdpB5.css +1 -0
  27. package/assets/board/_nuxt/error-500.WYSoH44y.css +1 -0
  28. package/assets/board/_nuxt/gantt.Dmp00GUo.css +1 -0
  29. package/assets/board/_nuxt/last-change._l3ydJ-o.css +1 -0
  30. package/assets/board/_nuxt/milestones.Bp6jmeAm.css +1 -0
  31. package/assets/board/_nuxt/pages.Dbj2IVk8.css +1 -0
  32. package/assets/board/_nuxt/tests.dXlUX16A.css +1 -0
  33. package/assets/board/burndown/index.html +1 -1
  34. package/assets/board/diagrams/index.html +1 -1
  35. package/assets/board/epics/index.html +1 -1
  36. package/assets/board/favicon.svg +16 -16
  37. package/assets/board/gantt/index.html +1 -1
  38. package/assets/board/index.html +1 -1
  39. package/assets/board/last-change/index.html +1 -1
  40. package/assets/board/milestones/index.html +1 -1
  41. package/assets/board/tests/index.html +1 -1
  42. package/bin/scrum-skills.mjs +204 -204
  43. package/docs/ai-assistant-guide.md +1009 -1009
  44. package/package.json +1 -1
  45. package/templates/AGENTS.md +84 -84
  46. package/tools/agile-tools.mjs +510 -510
  47. package/tools/ai.mjs +508 -508
  48. package/tools/git-commit.mjs +216 -216
  49. package/tools/projects.mjs +240 -240
  50. package/tools/serve.mjs +182 -180
  51. package/tools/validate.mjs +4 -2
  52. package/assets/board/_nuxt/BbxmvdIF.js +0 -1
  53. package/assets/board/_nuxt/_id_.ItzoSaBL.css +0 -1
  54. package/assets/board/_nuxt/builds/meta/205ddf7c-da58-4213-ac80-82930a216157.json +0 -1
  55. package/assets/board/_nuxt/burndown.CT8fx1Ge.css +0 -1
  56. package/assets/board/_nuxt/diagrams.BWgRXpo3.css +0 -1
  57. package/assets/board/_nuxt/epics.CUeDIEa0.css +0 -1
  58. package/assets/board/_nuxt/error-404.Y9imKiDC.css +0 -1
  59. package/assets/board/_nuxt/error-500.DufSBGVC.css +0 -1
  60. package/assets/board/_nuxt/gantt.CiC2Ts1t.css +0 -1
  61. package/assets/board/_nuxt/last-change.Byf5fhdY.css +0 -1
  62. package/assets/board/_nuxt/milestones.Civ3sMiQ.css +0 -1
  63. package/assets/board/_nuxt/pages.BshWbOyo.css +0 -1
  64. package/assets/board/_nuxt/tests.Ci9fBCka.css +0 -1
@@ -1 +1 @@
1
- import{a as e,i as t,o as n,r,s as i}from"#entry";import{t as a}from"./DJM7u8P3.js";import{t as o}from"./CI0scS-N.js";import{At as s,K as c,S as l,U as u,Xt as d,Yt as f,b as p,d as m,i as h,lt as g,m as _,p as v,qt as y,u as b,y as x}from"./BxuBMtk_.js";var ee={class:`kpis`},te={class:`v`},S={class:`v`},C={class:`v`},w={class:`v`},T={class:`v`},E={class:`grid`},D={class:`hero`},O={class:`hero-top`},k={class:`tag tag-ghost`},A={class:`tag tag-neutral`},j={key:0,class:`tag tag-error`},M={key:1,class:`tag tag-warning`},N={class:`hero-pct`},P={class:`epic-title`},F={class:`goal`},I={class:`bar ink hero-bar`},L={class:`hero-foot`},ne={class:`bd`},R={class:`h3`},z={key:0,class:`dim empty`},B={class:`kr-top`},V={class:`kr-text`},H={class:`kr-num mono`},U={class:`h3 stories-hd`},W={class:`stlist`},G={class:`st-id mono`},K={class:`st-title`},q={class:`st-pts dim`},J={class:`st-state dim`},Y=t(l({__name:`epics`,setup(t){let{epics:l,storyById:Y,STATE_LABEL:X,STATE_DOT:Z,TYPE_LABEL:re,TYPE_COLOR:ie,TYPE_ICON:ae,PRIORITY_COLOR:oe}=i(),se={draft:`neutral`,active:`primary`,done:`success`,cancelled:`error`},ce={draft:`草稿`,active:`进行中`,done:`已完成`,cancelled:`已取消`},Q=b(()=>l.value.map(e=>{let t=(e.stories??[]).map(e=>Y.value.get(e)).filter(Boolean),n=t.filter(e=>e.status===`done`),r=t.reduce((e,t)=>e+t.points,0),i=n.reduce((e,t)=>e+t.points,0),a=(e.keyResults??[]).map(e=>{let t=e.target>0?Math.min(100,Math.round((e.current??0)/e.target*100)):(e.current??0)<=0?100:0;return{...e,pct:t,ok:t>=100}});return{...e,list:t,done:n,points:r,donePoints:i,pct:r?Math.round(i/r*100):0,krs:a,krOk:a.filter(e=>e.ok).length,blocked:t.filter(e=>e.blocked),bugs:t.filter(e=>e.type===`bug`)}})),$=b(()=>({epics:Q.value.length,stories:Q.value.reduce((e,t)=>e+t.list.length,0),points:Q.value.reduce((e,t)=>e+t.points,0),donePoints:Q.value.reduce((e,t)=>e+t.donePoints,0),kr:Q.value.reduce((e,t)=>e+t.krs.length,0),krOk:Q.value.reduce((e,t)=>e+t.krOk,0),blocked:Q.value.reduce((e,t)=>e+t.blocked.length,0)}));return(t,i)=>{let l=r,b=a,Y=o;return u(),_(`div`,null,[m(`div`,ee,[m(`div`,{class:y([`kpi`,(`cardToneClass`in t?t.cardToneClass:s(n))(0)])},[p(l,{tone:(`cardTone`in t?t.cardTone:s(e))(0),size:`sm`},null,8,[`tone`]),i[1]||=m(`p`,{class:`k`},`史诗`,-1),m(`p`,te,[x(d(s($).epics),1),i[0]||=m(`small`,null,`个`,-1)])],2),m(`div`,{class:y([`kpi`,(`cardToneClass`in t?t.cardToneClass:s(n))(1)])},[p(l,{tone:(`cardTone`in t?t.cardTone:s(e))(1),size:`sm`},null,8,[`tone`]),i[2]||=m(`p`,{class:`k`},`关键结果达成`,-1),m(`p`,S,[x(d(s($).krOk),1),m(`small`,null,`/ `+d(s($).kr),1)])],2),m(`div`,{class:y([`kpi`,(`cardToneClass`in t?t.cardToneClass:s(n))(2)])},[p(l,{tone:(`cardTone`in t?t.cardTone:s(e))(2),size:`sm`},null,8,[`tone`]),i[3]||=m(`p`,{class:`k`},`故事点交付`,-1),m(`p`,C,[x(d(s($).donePoints),1),m(`small`,null,`/ `+d(s($).points),1)])],2),m(`div`,{class:y([`kpi`,(`cardToneClass`in t?t.cardToneClass:s(n))(3)])},[p(l,{tone:(`cardTone`in t?t.cardTone:s(e))(3),size:`sm`},null,8,[`tone`]),i[5]||=m(`p`,{class:`k`},`覆盖故事`,-1),m(`p`,w,[x(d(s($).stories),1),i[4]||=m(`small`,null,`个`,-1)])],2),m(`div`,{class:y([`kpi`,(`cardToneClass`in t?t.cardToneClass:s(n))(4)])},[p(l,{tone:(`cardTone`in t?t.cardTone:s(e))(4),size:`sm`},null,8,[`tone`]),i[7]||=m(`p`,{class:`k`},`阻塞`,-1),m(`p`,T,[x(d(s($).blocked),1),i[6]||=m(`small`,null,`个故事`,-1)])],2)]),m(`div`,E,[(u(!0),_(h,null,c(s(Q),e=>(u(),_(`article`,{key:e.id,class:`card epic`},[m(`div`,D,[m(`div`,O,[m(`span`,k,d(e.id),1),m(`span`,{class:y([`tag`,`tag-${se[e.status]}`])},d(ce[e.status]),3),m(`span`,A,d(e.list.length)+` 个故事`,1),e.bugs.length?(u(),_(`span`,j,[p(b,{name:`i-lucide-bug`,class:`size-3`}),x(d(e.bugs.length),1)])):v(``,!0),e.blocked.length?(u(),_(`span`,M,[p(b,{name:`i-lucide-octagon-alert`,class:`size-3`}),x(d(e.blocked.length),1)])):v(``,!0),m(`span`,N,[x(d(e.pct),1),i[8]||=m(`small`,null,`%`,-1)])]),m(`h2`,P,d(e.title),1),m(`p`,F,d(e.goal),1),m(`div`,I,[m(`i`,{style:f({width:e.pct+`%`})},null,4)]),m(`div`,L,[m(`span`,null,[m(`b`,null,d(e.donePoints),1),x(`/`+d(e.points)+` 点`,1)]),i[9]||=m(`i`,{class:`sep`},null,-1),m(`span`,null,`关键结果 `+d(e.krOk)+`/`+d(e.krs.length)+` 达成`,1),i[10]||=m(`i`,{class:`sep`},null,-1),m(`span`,null,d(e.done.length)+`/`+d(e.list.length)+` 个故事完成`,1)])]),m(`div`,ne,[m(`p`,R,[p(b,{name:`i-lucide-target`,class:`size-3`}),i[11]||=x(`关键结果`,-1)]),e.krs.length?v(``,!0):(u(),_(`p`,z,`这个史诗还没写 keyResults。`)),(u(!0),_(h,null,c(e.krs,e=>(u(),_(`div`,{key:e.id,class:`kr`},[m(`div`,B,[m(`span`,V,d(e.text),1),m(`span`,H,d(e.current??`—`)+` / `+d(e.target)+` `+d(e.unit??``),1),m(`span`,{class:y([`tag`,e.ok?`tag-success`:`tag-warning`])},d(e.pct)+`%`,3)]),m(`div`,{class:y([`bar slim`,e.ok?`mint`:`lilac`])},[m(`i`,{style:f({width:e.pct+`%`})},null,4)],2)]))),128)),m(`p`,U,[p(b,{name:`i-lucide-list-checks`,class:`size-3`}),i[12]||=x(`故事`,-1)]),m(`ul`,W,[(u(!0),_(h,null,c(e.list,e=>(u(),_(`li`,{key:e.id},[p(Y,{to:`/story/${e.id}`,class:`strow`},{default:g(()=>[m(`i`,{class:`sdot`,style:f({background:s(Z)[e.status]})},null,4),m(`span`,G,d(e.id),1),m(`span`,K,d(e.title),1),m(`span`,{class:y([`tag`,`tag-${s(ie)[e.type]}`])},[p(b,{name:s(ae)[e.type],class:`size-3`},null,8,[`name`]),x(d(s(re)[e.type]),1)],2),m(`span`,{class:y([`tag`,`tag-${s(oe)[e.priority]}`])},d(e.priority),3),m(`span`,q,d(e.points)+` 点`,1),m(`span`,J,d(s(X)[e.status]),1),p(b,{name:`i-lucide-chevron-right`,class:`st-chev`})]),_:2},1032,[`to`])]))),128))])])]))),128))])])}}}),[[`__scopeId`,`data-v-6cff08c9`]]);export{Y as default};
1
+ import{a as e,i as t,o as n,r,s as i}from"#entry";import{t as a}from"./DJM7u8P3.js";import{t as o}from"./CI0scS-N.js";import{At as s,K as c,S as l,U as u,Xt as d,Yt as f,b as p,d as m,i as h,lt as g,m as _,p as v,qt as y,u as b,y as x}from"./BxuBMtk_.js";var ee={class:`kpis`},te={class:`v`},S={class:`v`},C={class:`v`},w={class:`v`},T={class:`v`},E={class:`grid`},D={class:`hero`},O={class:`hero-top`},k={class:`tag tag-ghost`},A={class:`tag tag-neutral`},j={key:0,class:`tag tag-error`},M={key:1,class:`tag tag-warning`},N={class:`hero-pct`},P={class:`epic-title`},F={class:`goal`},I={class:`bar ink hero-bar`},L={class:`hero-foot`},ne={class:`bd`},R={class:`h3`},z={key:0,class:`dim empty`},B={class:`kr-top`},V={class:`kr-text`},H={class:`kr-num mono`},U={class:`h3 stories-hd`},W={class:`stlist`},G={class:`st-id mono`},K={class:`st-title`},q={class:`st-pts dim`},J={class:`st-state dim`},Y=t(l({__name:`epics`,setup(t){let{epics:l,storyById:Y,STATE_LABEL:X,STATE_DOT:Z,TYPE_LABEL:re,TYPE_COLOR:ie,TYPE_ICON:ae,PRIORITY_COLOR:oe}=i(),se={draft:`neutral`,active:`primary`,done:`success`,cancelled:`error`},ce={draft:`草稿`,active:`进行中`,done:`已完成`,cancelled:`已取消`},Q=b(()=>l.value.map(e=>{let t=(e.stories??[]).map(e=>Y.value.get(e)).filter(Boolean),n=t.filter(e=>e.status===`done`),r=t.reduce((e,t)=>e+t.points,0),i=n.reduce((e,t)=>e+t.points,0),a=(e.keyResults??[]).map(e=>{let t=e.target>0?Math.min(100,Math.round((e.current??0)/e.target*100)):(e.current??0)<=0?100:0;return{...e,pct:t,ok:t>=100}});return{...e,list:t,done:n,points:r,donePoints:i,pct:r?Math.round(i/r*100):0,krs:a,krOk:a.filter(e=>e.ok).length,blocked:t.filter(e=>e.blocked),bugs:t.filter(e=>e.type===`bug`)}})),$=b(()=>({epics:Q.value.length,stories:Q.value.reduce((e,t)=>e+t.list.length,0),points:Q.value.reduce((e,t)=>e+t.points,0),donePoints:Q.value.reduce((e,t)=>e+t.donePoints,0),kr:Q.value.reduce((e,t)=>e+t.krs.length,0),krOk:Q.value.reduce((e,t)=>e+t.krOk,0),blocked:Q.value.reduce((e,t)=>e+t.blocked.length,0)}));return(t,i)=>{let l=r,b=a,Y=o;return u(),_(`div`,null,[m(`div`,ee,[m(`div`,{class:y([`kpi`,(`cardToneClass`in t?t.cardToneClass:s(n))(0)])},[p(l,{tone:(`cardTone`in t?t.cardTone:s(e))(0),size:`sm`},null,8,[`tone`]),i[1]||=m(`p`,{class:`k`},`史诗`,-1),m(`p`,te,[x(d(s($).epics),1),i[0]||=m(`small`,null,`个`,-1)])],2),m(`div`,{class:y([`kpi`,(`cardToneClass`in t?t.cardToneClass:s(n))(1)])},[p(l,{tone:(`cardTone`in t?t.cardTone:s(e))(1),size:`sm`},null,8,[`tone`]),i[2]||=m(`p`,{class:`k`},`关键结果达成`,-1),m(`p`,S,[x(d(s($).krOk),1),m(`small`,null,`/ `+d(s($).kr),1)])],2),m(`div`,{class:y([`kpi`,(`cardToneClass`in t?t.cardToneClass:s(n))(2)])},[p(l,{tone:(`cardTone`in t?t.cardTone:s(e))(2),size:`sm`},null,8,[`tone`]),i[3]||=m(`p`,{class:`k`},`故事点交付`,-1),m(`p`,C,[x(d(s($).donePoints),1),m(`small`,null,`/ `+d(s($).points),1)])],2),m(`div`,{class:y([`kpi`,(`cardToneClass`in t?t.cardToneClass:s(n))(3)])},[p(l,{tone:(`cardTone`in t?t.cardTone:s(e))(3),size:`sm`},null,8,[`tone`]),i[5]||=m(`p`,{class:`k`},`覆盖故事`,-1),m(`p`,w,[x(d(s($).stories),1),i[4]||=m(`small`,null,`个`,-1)])],2),m(`div`,{class:y([`kpi`,(`cardToneClass`in t?t.cardToneClass:s(n))(4)])},[p(l,{tone:(`cardTone`in t?t.cardTone:s(e))(4),size:`sm`},null,8,[`tone`]),i[7]||=m(`p`,{class:`k`},`阻塞`,-1),m(`p`,T,[x(d(s($).blocked),1),i[6]||=m(`small`,null,`个故事`,-1)])],2)]),m(`div`,E,[(u(!0),_(h,null,c(s(Q),e=>(u(),_(`article`,{key:e.id,class:`card epic`},[m(`div`,D,[m(`div`,O,[m(`span`,k,d(e.id),1),m(`span`,{class:y([`tag`,`tag-${se[e.status]}`])},d(ce[e.status]),3),m(`span`,A,d(e.list.length)+` 个故事`,1),e.bugs.length?(u(),_(`span`,j,[p(b,{name:`i-lucide-bug`,class:`size-3`}),x(d(e.bugs.length),1)])):v(``,!0),e.blocked.length?(u(),_(`span`,M,[p(b,{name:`i-lucide-octagon-alert`,class:`size-3`}),x(d(e.blocked.length),1)])):v(``,!0),m(`span`,N,[x(d(e.pct),1),i[8]||=m(`small`,null,`%`,-1)])]),m(`h2`,P,d(e.title),1),m(`p`,F,d(e.goal),1),m(`div`,I,[m(`i`,{style:f({width:e.pct+`%`})},null,4)]),m(`div`,L,[m(`span`,null,[m(`b`,null,d(e.donePoints),1),x(`/`+d(e.points)+` 点`,1)]),i[9]||=m(`i`,{class:`sep`},null,-1),m(`span`,null,`关键结果 `+d(e.krOk)+`/`+d(e.krs.length)+` 达成`,1),i[10]||=m(`i`,{class:`sep`},null,-1),m(`span`,null,d(e.done.length)+`/`+d(e.list.length)+` 个故事完成`,1)])]),m(`div`,ne,[m(`p`,R,[p(b,{name:`i-lucide-target`,class:`size-3`}),i[11]||=x(`关键结果`,-1)]),e.krs.length?v(``,!0):(u(),_(`p`,z,`这个史诗还没写 keyResults。`)),(u(!0),_(h,null,c(e.krs,e=>(u(),_(`div`,{key:e.id,class:`kr`},[m(`div`,B,[m(`span`,V,d(e.text),1),m(`span`,H,d(e.current??`—`)+` / `+d(e.target)+` `+d(e.unit??``),1),m(`span`,{class:y([`tag`,e.ok?`tag-success`:`tag-warning`])},d(e.pct)+`%`,3)]),m(`div`,{class:y([`bar slim`,e.ok?`mint`:`lilac`])},[m(`i`,{style:f({width:e.pct+`%`})},null,4)],2)]))),128)),m(`p`,U,[p(b,{name:`i-lucide-list-checks`,class:`size-3`}),i[12]||=x(`故事`,-1)]),m(`ul`,W,[(u(!0),_(h,null,c(e.list,e=>(u(),_(`li`,{key:e.id},[p(Y,{to:`/story/${e.id}`,class:`strow`},{default:g(()=>[m(`i`,{class:`sdot`,style:f({background:s(Z)[e.status]})},null,4),m(`span`,G,d(e.id),1),m(`span`,K,d(e.title),1),m(`span`,{class:y([`tag`,`tag-${s(ie)[e.type]}`])},[p(b,{name:s(ae)[e.type],class:`size-3`},null,8,[`name`]),x(d(s(re)[e.type]),1)],2),m(`span`,{class:y([`tag`,`tag-${s(oe)[e.priority]}`])},d(e.priority),3),m(`span`,q,d(e.points)+` 点`,1),m(`span`,J,d(s(X)[e.status]),1),p(b,{name:`i-lucide-chevron-right`,class:`st-chev`})]),_:2},1032,[`to`])]))),128))])])]))),128))])])}}}),[[`__scopeId`,`data-v-4bf98db6`]]);export{Y as default};
@@ -1 +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";var te={class:`card hero`},ne={class:`chips`},re={class:`tag tag-ghost`},ie=[`title`],ae=[`title`],oe={class:`tag tag-neutral`},se={key:3,class:`tag tag-primary mono`},ce=[`title`],le={class:`story-title`},ue={class:`narrative`},de={class:`facts`},fe={class:`fact`},pe={class:`fact`},me={class:`fact`},he={class:`fact`},ge={class:`fact`},b={class:`mono`},x={class:`fact`},S={class:`mono`},C={class:`dim`},w={class:`fact`},T={class:`mono`},E={key:0,class:`fact`},D={class:`hero-foot`},O={class:`dim`},k={class:`bar`},A={class:`cols`},j={key:0,class:`card block`},M={class:`card-hd`},N={class:`h2`},P={class:`card-bd bug`},F={class:`steps`},I={key:1,class:`card block`},L={class:`card-hd`},_e={class:`h2`},ve={class:`card-bd`},ye={key:0,class:`callout`},be={key:1,class:`dep-row`},xe={key:2,class:`dep-row`},Se={class:`card block`},Ce={class:`card-hd`},we={class:`h2`},Te={class:`tag tag-neutral`},Ee={class:`card-bd`},De={key:0,class:`ac`},Oe={class:`ac-row`},ke={class:`ac-row`},Ae={class:`ac-row`},je={key:0,class:`ac-row verify`},Me={key:1,class:`dim`},Ne={key:0,class:`card block`},Pe={class:`card-hd`},Fe={class:`h2`},Ie={class:`tag tag-neutral`},Le={class:`card-bd dg-links`},Re={class:`tag tag-neutral`},ze={key:0,class:`tag tag-warning`},Be={class:`mono dim`},Ve={class:`card-hd task-hd`},He={class:`tag tag-ghost`},Ue={class:`tag tag-neutral`},We={class:`task-title`},Ge={class:`dim entries-ct`},Ke={key:0,class:`files mono dim`},qe={class:`card-bd`},Je={key:0,class:`entries`},Ye={class:`entry-hd`},Xe={class:`date mono dim`},Ze={class:`tag tag-neutral mono result`},Qe={class:`note`},$e={key:0,class:`cmd mono`},et={key:1,class:`efiles dim mono`},tt={key:1,class:`dim`},nt={class:`pager`},rt={class:`pg-k`},it={class:`pg-t`},at={key:1,class:`pg-empty`},ot={class:`pg-k`},st={class:`pg-t`},ct={key:1,class:`callout warn`},R=ee(o({__name:`[id]`,setup(ee){let o=r(),{storyById:R,stories:z,epicById:lt,sprintById:ut,journalByTask:dt,actualRange:B,progress:V,milestoneOfStory:ft,STATE_LABEL:pt,STATE_COLOR:mt,TASK_LABEL:ht,TASK_COLOR:gt,KIND_LABEL:_t,MS_LABEL:vt,md:H,diffDays:yt,wsjf:bt,dependentsOf:U,TYPE_LABEL:xt,TYPE_COLOR:St,TYPE_ICON:Ct,PRIORITY_COLOR:wt,SEVERITY_LABEL:W,SEVERITY_COLOR:G,SCOPE_LABEL:K,storyDiagrams:q,staleDiagrams:J,DIAGRAM_KIND_LABEL:Tt,DIAGRAM_KIND_ICON:Et,DIAGRAM_KIND_DOT:Dt}=n(),Y=v(()=>R.value.get(String(o.value?.params?.id))),X=v(()=>z.value.findIndex(e=>e.id===Y.value?.id)),Z=v(()=>X.value>0?z.value[X.value-1]:null),Q=v(()=>X.value>=0&&X.value<z.value.length-1?z.value[X.value+1]:null),$=e=>dt.value.get(e)?.entries??[],Ot={red:`RED 失败测试`,green:`GREEN 让测试通过`,refactor:`REFACTOR 重构`},kt={red:`tag-error`,green:`tag-success`,refactor:`tag-primary`};return(ee,n)=>{let r=e,o=t;return s(),h(`div`,null,[i(Y)?(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`,te,[d(`div`,ne,[d(`span`,re,c(i(Y).id),1),d(`span`,{class:_([`tag`,`tag-${i(mt)[i(Y).status]}`])},c(i(pt)[i(Y).status]??i(Y).status),3),d(`span`,{class:_([`tag`,`tag-${i(St)[i(Y).type]}`])},[u(r,{name:i(Ct)[i(Y).type],class:`size-3`},null,8,[`name`]),y(c(i(xt)[i(Y).type]),1)],2),d(`span`,{class:_([`tag`,`tag-${i(wt)[i(Y).priority]}`])},c(i(Y).priority),3),i(Y).bug?(s(),h(`span`,{key:0,class:_([`tag`,`tag-${i(G)[i(Y).bug.severity]}`])},[u(r,{name:`i-lucide-bug`,class:`size-3`}),y(c(i(W)[i(Y).bug.severity]),1)],2)):g(``,!0),i(Y).blocked?(s(),h(`span`,{key:1,class:`tag tag-error tag-dot`,title:i(Y).blocked.reason},`阻塞`,8,ie)):g(``,!0),i(Y).scopeChange?(s(),h(`span`,{key:2,class:`tag tag-info`,title:`${i(K)[i(Y).scopeChange.kind]}(${i(Y).scopeChange.at}):${i(Y).scopeChange.reason}`},c(i(K)[i(Y).scopeChange.kind])+` · `+c(i(Y).scopeChange.at),9,ae)):g(``,!0),d(`span`,oe,[u(r,{name:`i-lucide-layers`,class:`size-3`}),y(c(i(Y).epicId)+` `+c(i(lt).get(i(Y).epicId)?.title),1)]),i(Y).sprintId?(s(),h(`span`,se,[u(r,{name:`i-lucide-calendar-range`,class:`size-3`}),y(c(i(Y).sprintId),1)])):g(``,!0),(s(!0),h(p,null,a(i(ft)(i(Y).id),e=>(s(),h(`span`,{key:e.id,class:_([`tag`,e.kind===`mvp`?`tag-mint`:`tag-neutral`]),title:`${e.id} · ${e.criteria}`},c(i(_t)[e.kind])+` `+c(e.id)+` · `+c(i(vt)[e.status]),11,ce))),128))]),d(`h1`,le,c(i(Y).title),1),d(`p`,ue,c(i(Y).narrative),1),d(`div`,de,[d(`div`,fe,[n[1]||=d(`span`,{class:`k`},`点数`,-1),d(`b`,null,c(i(Y).points),1)]),d(`div`,pe,[n[2]||=d(`span`,{class:`k`},`价值`,-1),d(`b`,null,c(i(Y).value),1)]),d(`div`,me,[n[3]||=d(`span`,{class:`k`},`WSJF`,-1),d(`b`,null,c(i(bt)(i(Y))),1)]),d(`div`,he,[n[4]||=d(`span`,{class:`k`},`任务`,-1),d(`b`,null,c(i(V)(i(Y)).done)+`/`+c(i(V)(i(Y)).total),1)]),d(`div`,ge,[n[5]||=d(`span`,{class:`k`},`计划`,-1),d(`b`,b,c(i(Y).schedule?`${i(H)(i(Y).schedule.start)} ~ ${i(H)(i(Y).schedule.end)}`:`未排期`),1)]),d(`div`,x,[n[6]||=d(`span`,{class:`k`},`实际`,-1),d(`b`,S,[i(B)(i(Y))?(s(),h(p,{key:0},[y(c(i(H)(i(B)(i(Y)).start))+` ~ `+c(i(H)(i(B)(i(Y)).end))+` `,1),d(`small`,C,`(`+c(i(yt)(i(B)(i(Y)).start,i(B)(i(Y)).end)+1)+` 天)`,1)],64)):(s(),h(p,{key:1},[y(`—`)],64))])]),d(`div`,w,[n[7]||=d(`span`,{class:`k`},`创建`,-1),d(`b`,T,c(i(Y).created),1)]),i(Y).sprintId?(s(),h(`div`,E,[n[8]||=d(`span`,{class:`k`},`所属迭代`,-1),d(`b`,null,c(i(ut).get(i(Y).sprintId)?.name),1)])):g(``,!0)]),d(`div`,D,[d(`span`,O,`任务完成度 `+c(i(V)(i(Y)).pct)+`%`,1),d(`div`,k,[d(`i`,{style:l({width:i(V)(i(Y)).pct+`%`})},null,4)])])]),d(`div`,A,[i(Y).bug?(s(),h(`article`,j,[d(`div`,M,[d(`h2`,N,[u(r,{name:`i-lucide-bug`,class:`size-3.5`}),n[9]||=y(`缺陷详情`,-1)]),d(`span`,{class:_([`tag`,`tag-${i(G)[i(Y).bug.severity]}`])},c(i(W)[i(Y).bug.severity]),3)]),d(`div`,P,[d(`div`,null,[n[10]||=d(`span`,{class:`lbl`},`影响环境`,-1),d(`p`,null,c(i(Y).bug.environment),1)]),d(`div`,null,[n[11]||=d(`span`,{class:`lbl`},`复现步骤`,-1),d(`p`,F,c(i(Y).bug.steps),1)])])])):g(``,!0),i(Y).blocked||i(Y).dependsOn?.length||i(U)(i(Y).id).length?(s(),h(`article`,I,[d(`div`,L,[d(`h2`,_e,[u(r,{name:`i-lucide-git-branch`,class:`size-3.5`}),n[12]||=y(`依赖与阻塞`,-1)])]),d(`div`,ve,[i(Y).blocked?(s(),h(`div`,ye,[u(r,{name:`i-lucide-octagon-alert`,class:`size-4`}),d(`div`,null,[n[13]||=d(`b`,null,`当前被阻塞`,-1),d(`p`,null,c(i(Y).blocked.reason)+`(自 `+c(i(Y).blocked.since)+` 起)`,1)])])):g(``,!0),i(Y).dependsOn?.length?(s(),h(`div`,be,[n[14]||=d(`span`,{class:`lbl`},`依赖`,-1),(s(!0),h(p,null,a(i(Y).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(Y).id).length?(s(),h(`div`,xe,[n[15]||=d(`span`,{class:`lbl`},`被依赖`,-1),(s(!0),h(p,null,a(i(U)(i(Y).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`,Se,[d(`div`,Ce,[d(`h2`,we,[u(r,{name:`i-lucide-list-checks`,class:`size-3.5`}),n[16]||=y(`验收标准`,-1)]),d(`span`,Te,c(i(Y).acceptance?.length??0)+` 条`,1)]),d(`div`,Ee,[i(Y).acceptance?.length?(s(),h(`ol`,De,[(s(!0),h(p,null,a(i(Y).acceptance,(e,t)=>(s(),h(`li`,{key:t},[d(`div`,Oe,[n[17]||=d(`span`,{class:`tag tag-neutral gw`},`Given`,-1),d(`span`,null,c(e.given),1)]),d(`div`,ke,[n[18]||=d(`span`,{class:`tag tag-info gw`},`When`,-1),d(`span`,null,c(e.when),1)]),d(`div`,Ae,[n[19]||=d(`span`,{class:`tag tag-success gw`},`Then`,-1),d(`span`,null,c(e.then),1)]),e.verifyBy?.length?(s(),h(`div`,je,[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`,Me,`还没有验收标准(草稿阶段允许为空,进迭代前必须补)。`))])]),(i(q).get(i(Y).id)??[]).length?(s(),h(`article`,Ne,[d(`div`,Pe,[d(`h2`,Fe,[u(r,{name:`i-lucide-network`,class:`size-3.5`}),n[21]||=y(`架构图例`,-1)]),d(`span`,Ie,c((i(q).get(i(Y).id)??[]).length)+` 张`,1),n[22]||=d(`span`,{class:`dim tip`},`点开在看板里预览`,-1)]),d(`div`,Le,[(s(!0),h(p,null,a(i(q).get(i(Y).id),e=>(s(),f(o,{key:e.id,to:`/diagrams?focus=${e.id}`,class:`dg-link`},{default:m(()=>[u(r,{name:i(Et)[e.kind],class:`size-3.5`,style:l({color:i(Dt)[e.kind]})},null,8,[`name`,`style`]),d(`b`,null,c(e.title),1),d(`span`,Re,c(i(Tt)[e.kind]),1),i(J).has(e.id)?(s(),h(`span`,ze,`可能过期`)):g(``,!0),d(`span`,Be,c(e.id)+` · `+c(i(H)(e.updatedAt)),1)]),_:2},1032,[`to`]))),128))])])):g(``,!0),(s(!0),h(p,null,a(i(Y).tasks,e=>(s(),h(`article`,{key:e.id,class:`card block`},[d(`div`,Ve,[d(`span`,He,c(e.id),1),d(`span`,Ue,c(e.type),1),d(`span`,{class:_([`tag`,`tag-${i(gt)[e.status]}`])},c(i(ht)[e.status]),3),d(`b`,We,c(e.title),1),d(`span`,Ge,c($(e.id).length)+` 条记录`,1)]),e.files?.length?(s(),h(`p`,Ke,c(e.files.join(` · `)),1)):g(``,!0),d(`div`,qe,[$(e.id).length?(s(),h(`div`,Je,[(s(!0),h(p,null,a($(e.id),(e,t)=>(s(),h(`div`,{key:t,class:_([`entry`,e.phase])},[d(`div`,Ye,[d(`span`,{class:_([`tag`,kt[e.phase]])},c(Ot[e.phase]),3),d(`span`,Xe,c(i(H)(e.date)),1),d(`span`,Ze,c(e.result),1)]),d(`p`,Qe,c(e.note),1),e.testCommand?(s(),h(`p`,$e,[u(r,{name:`i-lucide-terminal`,class:`size-3`}),y(c(e.testCommand),1)])):g(``,!0),e.files?.length?(s(),h(`p`,et,c(e.files.join(`, `)),1)):g(``,!0)],2))),128))])):(s(),h(`p`,tt,`还没有实施记录(未开工)。`))])]))),128)),d(`div`,nt,[i(Z)?(s(),f(o,{key:0,to:`/story/${i(Z).id}`,class:`pg`},{default:m(()=>[d(`span`,rt,[u(r,{name:`i-lucide-arrow-left`,class:`size-3.5`}),n[23]||=y(`上一个`,-1)]),d(`span`,it,c(i(Z).id)+` `+c(i(Z).title),1)]),_:1},8,[`to`])):(s(),h(`span`,at)),i(Q)?(s(),f(o,{key:2,to:`/story/${i(Q).id}`,class:`pg right`},{default:m(()=>[d(`span`,ot,[n[24]||=y(`下一个`,-1),u(r,{name:`i-lucide-arrow-right`,class:`size-3.5`})]),d(`span`,st,c(i(Q).id)+` `+c(i(Q).title),1)]),_:1},8,[`to`])):g(``,!0)])],64)):(s(),h(`div`,ct,[u(r,{name:`i-lucide-search-x`,class:`size-4`}),n[25]||=y(`没找到这个故事,可能 id 写错了。 `,-1)]))])}}}),[[`__scopeId`,`data-v-8602d523`]]);export{R as default};
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";var te={class:`card hero`},ne={class:`chips`},re={class:`tag tag-ghost`},ie=[`title`],ae=[`title`],oe={class:`tag tag-neutral`},se={key:3,class:`tag tag-primary mono`},ce=[`title`],le={class:`story-title`},ue={class:`narrative`},de={class:`facts`},fe={class:`fact`},pe={class:`fact`},me={class:`fact`},he={class:`fact`},ge={class:`fact`},b={class:`mono`},x={class:`fact`},S={class:`mono`},C={class:`dim`},w={class:`fact`},T={class:`mono`},E={key:0,class:`fact`},D={class:`hero-foot`},O={class:`dim`},k={class:`bar`},A={class:`cols`},j={key:0,class:`card block`},M={class:`card-hd`},N={class:`h2`},P={class:`card-bd bug`},F={class:`steps`},I={key:1,class:`card block`},L={class:`card-hd`},_e={class:`h2`},ve={class:`card-bd`},ye={key:0,class:`callout`},be={key:1,class:`dep-row`},xe={key:2,class:`dep-row`},Se={class:`card block`},Ce={class:`card-hd`},we={class:`h2`},Te={class:`tag tag-neutral`},Ee={class:`card-bd`},De={key:0,class:`ac`},Oe={class:`ac-row`},ke={class:`ac-row`},Ae={class:`ac-row`},je={key:0,class:`ac-row verify`},Me={key:1,class:`dim`},Ne={key:0,class:`card block`},Pe={class:`card-hd`},Fe={class:`h2`},Ie={class:`tag tag-neutral`},Le={class:`card-bd dg-links`},Re={class:`tag tag-neutral`},ze={key:0,class:`tag tag-warning`},Be={class:`mono dim`},Ve={class:`card-hd task-hd`},He={class:`tag tag-ghost`},Ue={class:`tag tag-neutral`},We={class:`task-title`},Ge={class:`dim entries-ct`},Ke={key:0,class:`files mono dim`},qe={class:`card-bd`},Je={key:0,class:`entries`},Ye={class:`entry-hd`},Xe={class:`date mono dim`},Ze={class:`tag tag-neutral mono result`},Qe={class:`note`},$e={key:0,class:`cmd mono`},et={key:1,class:`efiles dim mono`},tt={key:1,class:`dim`},nt={class:`pager`},rt={class:`pg-k`},it={class:`pg-t`},at={key:1,class:`pg-empty`},ot={class:`pg-k`},st={class:`pg-t`},ct={key:1,class:`callout warn`},R=ee(o({__name:`[id]`,setup(ee){let o=r(),{storyById:R,stories:z,epicById:lt,sprintById:ut,journalByTask:dt,actualRange:B,progress:V,milestoneOfStory:ft,STATE_LABEL:pt,STATE_COLOR:mt,TASK_LABEL:ht,TASK_COLOR:gt,KIND_LABEL:_t,MS_LABEL:vt,md:H,diffDays:yt,wsjf:bt,dependentsOf:U,TYPE_LABEL:xt,TYPE_COLOR:St,TYPE_ICON:Ct,PRIORITY_COLOR:wt,SEVERITY_LABEL:W,SEVERITY_COLOR:G,SCOPE_LABEL:K,storyDiagrams:q,staleDiagrams:J,DIAGRAM_KIND_LABEL:Tt,DIAGRAM_KIND_ICON:Et,DIAGRAM_KIND_DOT:Dt}=n(),Y=v(()=>R.value.get(String(o.value?.params?.id))),X=v(()=>z.value.findIndex(e=>e.id===Y.value?.id)),Z=v(()=>X.value>0?z.value[X.value-1]:null),Q=v(()=>X.value>=0&&X.value<z.value.length-1?z.value[X.value+1]:null),$=e=>dt.value.get(e)?.entries??[],Ot={red:`RED 失败测试`,green:`GREEN 让测试通过`,refactor:`REFACTOR 重构`},kt={red:`tag-error`,green:`tag-success`,refactor:`tag-primary`};return(ee,n)=>{let r=e,o=t;return s(),h(`div`,null,[i(Y)?(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`,te,[d(`div`,ne,[d(`span`,re,c(i(Y).id),1),d(`span`,{class:_([`tag`,`tag-${i(mt)[i(Y).status]}`])},c(i(pt)[i(Y).status]??i(Y).status),3),d(`span`,{class:_([`tag`,`tag-${i(St)[i(Y).type]}`])},[u(r,{name:i(Ct)[i(Y).type],class:`size-3`},null,8,[`name`]),y(c(i(xt)[i(Y).type]),1)],2),d(`span`,{class:_([`tag`,`tag-${i(wt)[i(Y).priority]}`])},c(i(Y).priority),3),i(Y).bug?(s(),h(`span`,{key:0,class:_([`tag`,`tag-${i(G)[i(Y).bug.severity]}`])},[u(r,{name:`i-lucide-bug`,class:`size-3`}),y(c(i(W)[i(Y).bug.severity]),1)],2)):g(``,!0),i(Y).blocked?(s(),h(`span`,{key:1,class:`tag tag-error tag-dot`,title:i(Y).blocked.reason},`阻塞`,8,ie)):g(``,!0),i(Y).scopeChange?(s(),h(`span`,{key:2,class:`tag tag-info`,title:`${i(K)[i(Y).scopeChange.kind]}(${i(Y).scopeChange.at}):${i(Y).scopeChange.reason}`},c(i(K)[i(Y).scopeChange.kind])+` · `+c(i(Y).scopeChange.at),9,ae)):g(``,!0),d(`span`,oe,[u(r,{name:`i-lucide-layers`,class:`size-3`}),y(c(i(Y).epicId)+` `+c(i(lt).get(i(Y).epicId)?.title),1)]),i(Y).sprintId?(s(),h(`span`,se,[u(r,{name:`i-lucide-calendar-range`,class:`size-3`}),y(c(i(Y).sprintId),1)])):g(``,!0),(s(!0),h(p,null,a(i(ft)(i(Y).id),e=>(s(),h(`span`,{key:e.id,class:_([`tag`,e.kind===`mvp`?`tag-mint`:`tag-neutral`]),title:`${e.id} · ${e.criteria}`},c(i(_t)[e.kind])+` `+c(e.id)+` · `+c(i(vt)[e.status]),11,ce))),128))]),d(`h1`,le,c(i(Y).title),1),d(`p`,ue,c(i(Y).narrative),1),d(`div`,de,[d(`div`,fe,[n[1]||=d(`span`,{class:`k`},`点数`,-1),d(`b`,null,c(i(Y).points),1)]),d(`div`,pe,[n[2]||=d(`span`,{class:`k`},`价值`,-1),d(`b`,null,c(i(Y).value),1)]),d(`div`,me,[n[3]||=d(`span`,{class:`k`},`WSJF`,-1),d(`b`,null,c(i(bt)(i(Y))),1)]),d(`div`,he,[n[4]||=d(`span`,{class:`k`},`任务`,-1),d(`b`,null,c(i(V)(i(Y)).done)+`/`+c(i(V)(i(Y)).total),1)]),d(`div`,ge,[n[5]||=d(`span`,{class:`k`},`计划`,-1),d(`b`,b,c(i(Y).schedule?`${i(H)(i(Y).schedule.start)} ~ ${i(H)(i(Y).schedule.end)}`:`未排期`),1)]),d(`div`,x,[n[6]||=d(`span`,{class:`k`},`实际`,-1),d(`b`,S,[i(B)(i(Y))?(s(),h(p,{key:0},[y(c(i(H)(i(B)(i(Y)).start))+` ~ `+c(i(H)(i(B)(i(Y)).end))+` `,1),d(`small`,C,`(`+c(i(yt)(i(B)(i(Y)).start,i(B)(i(Y)).end)+1)+` 天)`,1)],64)):(s(),h(p,{key:1},[y(`—`)],64))])]),d(`div`,w,[n[7]||=d(`span`,{class:`k`},`创建`,-1),d(`b`,T,c(i(Y).created),1)]),i(Y).sprintId?(s(),h(`div`,E,[n[8]||=d(`span`,{class:`k`},`所属迭代`,-1),d(`b`,null,c(i(ut).get(i(Y).sprintId)?.name),1)])):g(``,!0)]),d(`div`,D,[d(`span`,O,`任务完成度 `+c(i(V)(i(Y)).pct)+`%`,1),d(`div`,k,[d(`i`,{style:l({width:i(V)(i(Y)).pct+`%`})},null,4)])])]),d(`div`,A,[i(Y).bug?(s(),h(`article`,j,[d(`div`,M,[d(`h2`,N,[u(r,{name:`i-lucide-bug`,class:`size-3.5`}),n[9]||=y(`缺陷详情`,-1)]),d(`span`,{class:_([`tag`,`tag-${i(G)[i(Y).bug.severity]}`])},c(i(W)[i(Y).bug.severity]),3)]),d(`div`,P,[d(`div`,null,[n[10]||=d(`span`,{class:`lbl`},`影响环境`,-1),d(`p`,null,c(i(Y).bug.environment),1)]),d(`div`,null,[n[11]||=d(`span`,{class:`lbl`},`复现步骤`,-1),d(`p`,F,c(i(Y).bug.steps),1)])])])):g(``,!0),i(Y).blocked||i(Y).dependsOn?.length||i(U)(i(Y).id).length?(s(),h(`article`,I,[d(`div`,L,[d(`h2`,_e,[u(r,{name:`i-lucide-git-branch`,class:`size-3.5`}),n[12]||=y(`依赖与阻塞`,-1)])]),d(`div`,ve,[i(Y).blocked?(s(),h(`div`,ye,[u(r,{name:`i-lucide-octagon-alert`,class:`size-4`}),d(`div`,null,[n[13]||=d(`b`,null,`当前被阻塞`,-1),d(`p`,null,c(i(Y).blocked.reason)+`(自 `+c(i(Y).blocked.since)+` 起)`,1)])])):g(``,!0),i(Y).dependsOn?.length?(s(),h(`div`,be,[n[14]||=d(`span`,{class:`lbl`},`依赖`,-1),(s(!0),h(p,null,a(i(Y).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(Y).id).length?(s(),h(`div`,xe,[n[15]||=d(`span`,{class:`lbl`},`被依赖`,-1),(s(!0),h(p,null,a(i(U)(i(Y).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`,Se,[d(`div`,Ce,[d(`h2`,we,[u(r,{name:`i-lucide-list-checks`,class:`size-3.5`}),n[16]||=y(`验收标准`,-1)]),d(`span`,Te,c(i(Y).acceptance?.length??0)+` 条`,1)]),d(`div`,Ee,[i(Y).acceptance?.length?(s(),h(`ol`,De,[(s(!0),h(p,null,a(i(Y).acceptance,(e,t)=>(s(),h(`li`,{key:t},[d(`div`,Oe,[n[17]||=d(`span`,{class:`tag tag-neutral gw`},`Given`,-1),d(`span`,null,c(e.given),1)]),d(`div`,ke,[n[18]||=d(`span`,{class:`tag tag-info gw`},`When`,-1),d(`span`,null,c(e.when),1)]),d(`div`,Ae,[n[19]||=d(`span`,{class:`tag tag-success gw`},`Then`,-1),d(`span`,null,c(e.then),1)]),e.verifyBy?.length?(s(),h(`div`,je,[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`,Me,`还没有验收标准(草稿阶段允许为空,进迭代前必须补)。`))])]),(i(q).get(i(Y).id)??[]).length?(s(),h(`article`,Ne,[d(`div`,Pe,[d(`h2`,Fe,[u(r,{name:`i-lucide-network`,class:`size-3.5`}),n[21]||=y(`架构图例`,-1)]),d(`span`,Ie,c((i(q).get(i(Y).id)??[]).length)+` 张`,1),n[22]||=d(`span`,{class:`dim tip`},`点开在看板里预览`,-1)]),d(`div`,Le,[(s(!0),h(p,null,a(i(q).get(i(Y).id),e=>(s(),f(o,{key:e.id,to:`/diagrams?focus=${e.id}`,class:`dg-link`},{default:m(()=>[u(r,{name:i(Et)[e.kind],class:`size-3.5`,style:l({color:i(Dt)[e.kind]})},null,8,[`name`,`style`]),d(`b`,null,c(e.title),1),d(`span`,Re,c(i(Tt)[e.kind]),1),i(J).has(e.id)?(s(),h(`span`,ze,`可能过期`)):g(``,!0),d(`span`,Be,c(e.id)+` · `+c(i(H)(e.updatedAt)),1)]),_:2},1032,[`to`]))),128))])])):g(``,!0),(s(!0),h(p,null,a(i(Y).tasks,e=>(s(),h(`article`,{key:e.id,class:`card block`},[d(`div`,Ve,[d(`span`,He,c(e.id),1),d(`span`,Ue,c(e.type),1),d(`span`,{class:_([`tag`,`tag-${i(gt)[e.status]}`])},c(i(ht)[e.status]),3),d(`b`,We,c(e.title),1),d(`span`,Ge,c($(e.id).length)+` 条记录`,1)]),e.files?.length?(s(),h(`p`,Ke,c(e.files.join(` · `)),1)):g(``,!0),d(`div`,qe,[$(e.id).length?(s(),h(`div`,Je,[(s(!0),h(p,null,a($(e.id),(e,t)=>(s(),h(`div`,{key:t,class:_([`entry`,e.phase])},[d(`div`,Ye,[d(`span`,{class:_([`tag`,kt[e.phase]])},c(Ot[e.phase]),3),d(`span`,Xe,c(i(H)(e.date)),1),d(`span`,Ze,c(e.result),1)]),d(`p`,Qe,c(e.note),1),e.testCommand?(s(),h(`p`,$e,[u(r,{name:`i-lucide-terminal`,class:`size-3`}),y(c(e.testCommand),1)])):g(``,!0),e.files?.length?(s(),h(`p`,et,c(e.files.join(`, `)),1)):g(``,!0)],2))),128))])):(s(),h(`p`,tt,`还没有实施记录(未开工)。`))])]))),128)),d(`div`,nt,[i(Z)?(s(),f(o,{key:0,to:`/story/${i(Z).id}`,class:`pg`},{default:m(()=>[d(`span`,rt,[u(r,{name:`i-lucide-arrow-left`,class:`size-3.5`}),n[23]||=y(`上一个`,-1)]),d(`span`,it,c(i(Z).id)+` `+c(i(Z).title),1)]),_:1},8,[`to`])):(s(),h(`span`,at)),i(Q)?(s(),f(o,{key:2,to:`/story/${i(Q).id}`,class:`pg right`},{default:m(()=>[d(`span`,ot,[n[24]||=y(`下一个`,-1),u(r,{name:`i-lucide-arrow-right`,class:`size-3.5`})]),d(`span`,st,c(i(Q).id)+` `+c(i(Q).title),1)]),_:1},8,[`to`])):g(``,!0)])],64)):(s(),h(`div`,ct,[u(r,{name:`i-lucide-search-x`,class:`size-4`}),n[25]||=y(`没找到这个故事,可能 id 写错了。 `,-1)]))])}}}),[[`__scopeId`,`data-v-a4bac36b`]]);export{R 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-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
+ 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 +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"./OKKaKILz.js";import{t as ne}from"./DJM7u8P3.js";import{t as re}from"./CI0scS-N.js";import{At as i,K as a,S as o,U as s,Xt as c,Yt as ie,b as l,d as u,gt as ae,i as d,lt as oe,m as f,ot as p,p as m,qt as h,u as g,ut as se,v as _,xt as v,y}from"./BxuBMtk_.js";import{o as ce}from"./BygIGL69.js";var le={class:`kpis`},ue={class:`v`},de={class:`v`},fe={class:`v`},pe={class:`v`},me={key:0,class:`card panel`},he={class:`panel-hd`},ge={class:`ph-l`},_e={class:`sp-name`},ve={class:`sub mono`},ye={class:`goal`},be={class:`chart-wrap`},xe=[`viewBox`],Se=[`y1`,`x2`,`y2`],b=[`x`,`y`],x=[`d`],S=[`d`],C=[`points`],w=[`cx`,`cy`],T=[`x1`,`y1`,`x2`,`y2`],E=[`x`,`y`],D=[`x`,`y`],O=[`x1`,`y1`,`x2`,`y2`],k=[`cx`,`cy`],A={class:`cells`},j={class:`cd mono`},Ce={class:`ca`},we={class:`ci dim`},Te={key:0,class:`scope`},Ee={class:`h3`},De={class:`tag tag-info`},Oe={class:`dim`},ke={key:1,class:`callout soft`},Ae={class:`card`},je={class:`card-hd`},Me={class:`tag tag-neutral`},Ne={class:`card-bd`},Pe={class:`tbl`},Fe=[`onClick`],Ie={class:`mono`},Le={class:`mono dim`},Re={class:`r`},ze={class:`r mono`},Be=980,Ve=300,M=42,N=t(o({__name:`burndown`,setup(t){let{sprints:o,burndown:N,sprintCommit:P,md:F,now:I,sprintById:L,storyById:He,SCOPE_LABEL:R}=r(),z=v(``),Ue=g(()=>[...o.value].reverse().map(e=>({label:`${e.id} · ${e.name}`,value:e.id,icon:`i-lucide-calendar-range`}))),B=g(()=>L.value.get(z.value)??o.value[o.value.length-1]),V=g(()=>B.value?N(B.value):{total:0,days:[]});p(()=>{z.value&&!L.value.has(z.value)&&(z.value=``),!z.value&&o.value.length&&(z.value=o.value[o.value.length-1].id)});let H=g(()=>V.value.days.length||1),U=g(()=>V.value.total||1),W=e=>M+e*896/(H.value-1||1),G=e=>258-e*216/U.value,K=e=>V.value.days.map((t,n)=>`${W(n)},${G(t[e])}`).join(` `),We=g(()=>{let e=V.value.days.map((e,t)=>`${W(t)},${G(e.actual)}`).join(` `),t=V.value.days.length-1;return`M${W(0)},${G(0)} L${e.replaceAll(` `,` L`)} L${W(t)},${G(0)} Z`}),q=g(()=>V.value.days.findIndex(e=>e.date===I)),J=g(()=>V.value.days.find(e=>e.date===I)??V.value.days[V.value.days.length-1]),Y=g(()=>J.value?.actual??0),X=g(()=>J.value?.ideal??0),Z=g(()=>Math.round((Y.value-X.value)*10)/10),Q=g(()=>{let e=B.value;return e?(e.stories??[]).map(e=>He.value.get(e)).filter(Boolean).filter(t=>t.scopeChange&&t.scopeChange.at>=e.start&&t.scopeChange.at<=e.end).map(e=>({id:e.id,title:e.title,at:e.scopeChange.at,kind:e.scopeChange.kind,reason:e.scopeChange.reason,points:e.points,idx:V.value.days.findIndex(t=>t.date===e.scopeChange.at)})).filter(e=>e.idx>=0):[]}),Ge=g(()=>new Set(Q.value.map(e=>e.at))),$=g(()=>[...o.value].reverse().map(e=>{let t=e.start<=I&&e.end>=I;return{id:e.id,name:e.name,period:`${F(e.start)} ~ ${F(e.end)}`,stories:(e.stories??[]).length,commit:P(e),capacity:e.capacity,status:t?`进行中`:e.end<I?`已结束`:`未开始`,tone:t?`tag-primary`:e.end<I?`tag-neutral`:`tag-info`}}));return(t,r)=>{let o=ee,p=te,g=ne,v=re;return s(),f(`div`,null,[u(`div`,le,[u(`div`,{class:h([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(0)])},[l(o,{tone:(`cardTone`in t?t.cardTone:i(e))(0),size:`sm`},null,8,[`tone`]),r[1]||=u(`p`,{class:`k`},`剩余故事点`,-1),u(`p`,ue,[y(c(i(Y)),1),u(`small`,null,`/ `+c(i(V).total),1)])],2),u(`div`,{class:h([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(1)])},[l(o,{tone:(`cardTone`in t?t.cardTone:i(e))(1),size:`sm`},null,8,[`tone`]),r[3]||=u(`p`,{class:`k`},`理想剩余(今天)`,-1),u(`p`,de,[y(c(i(X)),1),r[2]||=u(`small`,null,`点`,-1)])],2),u(`div`,{class:h([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(2)])},[l(o,{tone:(`cardTone`in t?t.cardTone:i(e))(2),size:`sm`},null,8,[`tone`]),r[5]||=u(`p`,{class:`k`},`偏差`,-1),u(`p`,{class:h([`v`,{bad:i(Z)>0,good:i(Z)<=0}])},[y(c(i(Z)>0?`+`+i(Z):i(Z)),1),r[4]||=u(`small`,null,`点`,-1)],2)],2),u(`div`,{class:h([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(3)])},[l(o,{tone:(`cardTone`in t?t.cardTone:i(e))(3),size:`sm`},null,8,[`tone`]),r[6]||=u(`p`,{class:`k`},`承诺 / 容量`,-1),u(`p`,fe,[y(c(i(B)?i(P)(i(B)):0),1),u(`small`,null,`/ `+c(i(B)?.capacity??0),1)])],2),u(`div`,{class:h([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(4)])},[l(o,{tone:(`cardTone`in t?t.cardTone:i(e))(4),size:`sm`},null,8,[`tone`]),r[8]||=u(`p`,{class:`k`},`范围变更`,-1),u(`p`,pe,[y(c(i(Q).length),1),r[7]||=u(`small`,null,`次`,-1)])],2)]),i(B)?(s(),f(`div`,me,[u(`div`,he,[u(`div`,ge,[u(`h2`,_e,c(i(B).name),1),u(`p`,ve,c(i(B).id)+` · `+c(i(F)(i(B).start))+` ~ `+c(i(F)(i(B).end)),1),u(`p`,ye,c(i(B).goal),1)]),l(p,{modelValue:i(z),"onUpdate:modelValue":r[0]||=e=>ae(z)?z.value=e:null,items:i(Ue),icon:`i-lucide-calendar-range`,"aria-label":`选择迭代`,class:`bd-select`},null,8,[`modelValue`,`items`])]),u(`div`,be,[r[10]||=_(`<div class="chart-legend" data-v-8a03a4f8><span class="lg" data-v-8a03a4f8><i class="sw actual" data-v-8a03a4f8></i>实际剩余</span><span class="lg" data-v-8a03a4f8><i class="sw ideal" data-v-8a03a4f8></i>理想线</span><span class="lg" data-v-8a03a4f8><i class="sw scope" data-v-8a03a4f8></i>范围变更</span></div>`,1),(s(),f(`svg`,{viewBox:`0 0 ${Be} ${Ve}`,class:`chart`,role:`img`},[r[9]||=_(`<defs data-v-8a03a4f8><linearGradient id="bd-line" x1="0" y1="0" x2="1" y2="0" data-v-8a03a4f8><stop offset="0%" stop-color="#8a63f7" data-v-8a03a4f8></stop><stop offset="100%" stop-color="#c3aefb" data-v-8a03a4f8></stop></linearGradient><linearGradient id="bd-area" x1="0" y1="0" x2="0" y2="1" data-v-8a03a4f8><stop offset="0%" stop-color="#8a63f7" stop-opacity="0.16" data-v-8a03a4f8></stop><stop offset="100%" stop-color="#8a63f7" stop-opacity="0" data-v-8a03a4f8></stop></linearGradient></defs>`,1),u(`g`,null,[(s(),f(d,null,a([0,.25,.5,.75,1],e=>u(`line`,{key:`grid`+e,x1:M,y1:G(i(U)*e),x2:938,y2:G(i(U)*e),stroke:`#f1f0ea`,"stroke-width":`1`},null,8,Se)),64)),(s(),f(d,null,a([0,.25,.5,.75,1],e=>u(`text`,{key:`gl`+e,x:32,y:G(i(U)*e)+3.5,"text-anchor":`end`,"font-size":`9.5`,fill:`#b0b4ba`},c(Math.round(i(U)*e)),9,b)),64))]),u(`path`,{d:i(We),fill:`url(#bd-area)`},null,8,x),u(`path`,{d:`M${W(0)},${G(i(U))} L${W(i(H)-1)},${G(0)}`,stroke:`#cdc9d8`,"stroke-width":`1.4`,"stroke-dasharray":`5 5`,fill:`none`},null,8,S),u(`polyline`,{points:K(`actual`),stroke:`url(#bd-line)`,"stroke-width":`2.6`,fill:`none`,"stroke-linejoin":`round`,"stroke-linecap":`round`},null,8,C),(s(!0),f(d,null,a(i(V).days,(e,t)=>(s(),f(`circle`,{key:e.date,cx:W(t),cy:G(e.actual),r:`3`,fill:`#fff`,stroke:`#8a63f7`,"stroke-width":`1.8`},null,8,w))),128)),i(q)>=0?(s(),f(`line`,{key:0,x1:W(i(q)),y1:34,x2:W(i(q)),y2:G(0),stroke:`#cf4759`,"stroke-dasharray":`3 3`,"stroke-width":`1.2`,opacity:`0.7`},null,8,T)):m(``,!0),i(q)>=0?(s(),f(`text`,{key:1,x:W(i(q)),y:28,"text-anchor":`middle`,"font-size":`9.5`,fill:`#a5382f`},`今天`,8,E)):m(``,!0),(s(!0),f(d,null,a(i(V).days,(e,t)=>se((s(),f(`text`,{key:`t`+e.date,x:W(t),y:286,"text-anchor":`middle`,"font-size":`9.5`,fill:`#b0b4ba`},c(i(F)(e.date)),9,D)),[[ce,t%Math.ceil(i(H)/10)===0]])),128)),(s(!0),f(d,null,a(i(Q),e=>(s(),f(`g`,{key:e.at+e.id},[u(`title`,null,c(e.id)+` `+c(e.title)+`:`+c(i(R)[e.kind])+`(`+c(e.at)+`,`+c(e.points)+` 点)—— `+c(e.reason),1),u(`line`,{x1:W(e.idx),y1:36,x2:W(e.idx),y2:G(0),stroke:`#3f7fd4`,"stroke-dasharray":`4 3`,"stroke-width":`1.2`,opacity:`0.8`},null,8,O),u(`circle`,{cx:W(e.idx),cy:34,r:`3`,fill:`#3f7fd4`},null,8,k)]))),128))],8,xe))]),u(`div`,A,[(s(!0),f(d,null,a(i(V).days,e=>(s(),f(`div`,{key:`row`+e.date,class:h([`cell`,{today:e.date===i(I),future:e.date>i(I),scope:i(Ge).has(e.date)}])},[u(`span`,j,c(i(F)(e.date)),1),u(`span`,Ce,c(e.actual),1),u(`span`,we,c(e.ideal),1),u(`i`,{class:`underline`,style:ie({width:(i(U)?e.actual/i(U)*100:0)+`%`})},null,4)],2))),128))]),r[12]||=u(`p`,{class:`foot dim`},`每格:日期 / 实际剩余 / 理想剩余`,-1),i(Q).length?(s(),f(`div`,Te,[u(`p`,Ee,[l(g,{name:`i-lucide-git-branch`,class:`size-3`}),y(`本迭代范围变更(`+c(i(Q).length)+`)`,1)]),u(`ul`,null,[(s(!0),f(d,null,a(i(Q),e=>(s(),f(`li`,{key:e.id},[u(`span`,De,c(i(R)[e.kind]),1),l(v,{to:`/story/${e.id}`,class:`mono link`},{default:oe(()=>[y(c(e.id),1)]),_:2},1032,[`to`]),u(`span`,null,c(e.title),1),u(`span`,Oe,`· `+c(e.at)+` · `+c(e.points)+` 点 · `+c(e.reason),1)]))),128))]),r[11]||=u(`p`,{class:`foot dim`},`竖线标出的那几天,实际剩余没有按理想线下滑,是插了活而不是团队拖。`,-1)])):m(``,!0)])):(s(),f(`div`,ke,[l(g,{name:`i-lucide-info`,class:`size-4`}),r[13]||=y(`还没有迭代数据。 `,-1)])),u(`div`,Ae,[u(`div`,je,[r[14]||=u(`h2`,{class:`h2`},`迭代对照`,-1),u(`span`,Me,c(i($).length),1),r[15]||=u(`span`,{class:`dim tip`},`点一行切换上面的燃尽图`,-1)]),u(`div`,Ne,[u(`table`,Pe,[r[16]||=u(`thead`,null,[u(`tr`,null,[u(`th`,null,`迭代`),u(`th`,null,`名称`),u(`th`,null,`周期`),u(`th`,{class:`r`},`故事`),u(`th`,{class:`r`},`承诺 / 容量`),u(`th`,null,`状态`)])],-1),u(`tbody`,null,[(s(!0),f(d,null,a(i($),e=>(s(),f(`tr`,{key:e.id,class:h({on:e.id===i(z)}),onClick:t=>z.value=e.id},[u(`td`,Ie,c(e.id),1),u(`td`,null,c(e.name),1),u(`td`,Le,c(e.period),1),u(`td`,Re,c(e.stories),1),u(`td`,ze,c(e.commit)+`/`+c(e.capacity),1),u(`td`,null,[u(`span`,{class:h([`tag`,e.tone])},c(e.status),3)])],10,Fe))),128))])])])])])}}}),[[`__scopeId`,`data-v-8a03a4f8`]]);export{N 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"./OKKaKILz.js";import{t as ne}from"./DJM7u8P3.js";import{t as re}from"./CI0scS-N.js";import{At as i,K as a,S as o,U as s,Xt as c,Yt as ie,b as l,d as u,gt as ae,i as d,lt as oe,m as f,ot as p,p as m,qt as h,u as g,ut as se,v as _,xt as v,y}from"./BxuBMtk_.js";import{o as ce}from"./BygIGL69.js";var le={class:`kpis`},ue={class:`v`},de={class:`v`},fe={class:`v`},pe={class:`v`},me={key:0,class:`card panel`},he={class:`panel-hd`},ge={class:`ph-l`},_e={class:`sp-name`},ve={class:`sub mono`},ye={class:`goal`},be={class:`chart-wrap`},xe=[`viewBox`],Se=[`y1`,`x2`,`y2`],b=[`x`,`y`],x=[`d`],S=[`d`],C=[`points`],w=[`cx`,`cy`],T=[`x1`,`y1`,`x2`,`y2`],E=[`x`,`y`],D=[`x`,`y`],O=[`x1`,`y1`,`x2`,`y2`],k=[`cx`,`cy`],A={class:`cells`},j={class:`cd mono`},Ce={class:`ca`},we={class:`ci dim`},Te={key:0,class:`scope`},Ee={class:`h3`},De={class:`tag tag-info`},Oe={class:`dim`},ke={key:1,class:`callout soft`},Ae={class:`card`},je={class:`card-hd`},Me={class:`tag tag-neutral`},Ne={class:`card-bd`},Pe={class:`tbl`},Fe=[`onClick`],Ie={class:`mono`},Le={class:`mono dim`},Re={class:`r`},ze={class:`r mono`},Be=980,Ve=300,M=42,N=t(o({__name:`burndown`,setup(t){let{sprints:o,burndown:N,sprintCommit:P,md:F,now:I,sprintById:L,storyById:He,SCOPE_LABEL:R}=r(),z=v(``),Ue=g(()=>[...o.value].reverse().map(e=>({label:`${e.id} · ${e.name}`,value:e.id,icon:`i-lucide-calendar-range`}))),B=g(()=>L.value.get(z.value)??o.value[o.value.length-1]),V=g(()=>B.value?N(B.value):{total:0,days:[]});p(()=>{z.value&&!L.value.has(z.value)&&(z.value=``),!z.value&&o.value.length&&(z.value=o.value[o.value.length-1].id)});let H=g(()=>V.value.days.length||1),U=g(()=>V.value.total||1),W=e=>M+e*896/(H.value-1||1),G=e=>258-e*216/U.value,K=e=>V.value.days.map((t,n)=>`${W(n)},${G(t[e])}`).join(` `),We=g(()=>{let e=V.value.days.map((e,t)=>`${W(t)},${G(e.actual)}`).join(` `),t=V.value.days.length-1;return`M${W(0)},${G(0)} L${e.replaceAll(` `,` L`)} L${W(t)},${G(0)} Z`}),q=g(()=>V.value.days.findIndex(e=>e.date===I)),J=g(()=>V.value.days.find(e=>e.date===I)??V.value.days[V.value.days.length-1]),Y=g(()=>J.value?.actual??0),X=g(()=>J.value?.ideal??0),Z=g(()=>Math.round((Y.value-X.value)*10)/10),Q=g(()=>{let e=B.value;return e?(e.stories??[]).map(e=>He.value.get(e)).filter(Boolean).filter(t=>t.scopeChange&&t.scopeChange.at>=e.start&&t.scopeChange.at<=e.end).map(e=>({id:e.id,title:e.title,at:e.scopeChange.at,kind:e.scopeChange.kind,reason:e.scopeChange.reason,points:e.points,idx:V.value.days.findIndex(t=>t.date===e.scopeChange.at)})).filter(e=>e.idx>=0):[]}),Ge=g(()=>new Set(Q.value.map(e=>e.at))),$=g(()=>[...o.value].reverse().map(e=>{let t=e.start<=I&&e.end>=I;return{id:e.id,name:e.name,period:`${F(e.start)} ~ ${F(e.end)}`,stories:(e.stories??[]).length,commit:P(e),capacity:e.capacity,status:t?`进行中`:e.end<I?`已结束`:`未开始`,tone:t?`tag-primary`:e.end<I?`tag-neutral`:`tag-info`}}));return(t,r)=>{let o=ee,p=te,g=ne,v=re;return s(),f(`div`,null,[u(`div`,le,[u(`div`,{class:h([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(0)])},[l(o,{tone:(`cardTone`in t?t.cardTone:i(e))(0),size:`sm`},null,8,[`tone`]),r[1]||=u(`p`,{class:`k`},`剩余故事点`,-1),u(`p`,ue,[y(c(i(Y)),1),u(`small`,null,`/ `+c(i(V).total),1)])],2),u(`div`,{class:h([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(1)])},[l(o,{tone:(`cardTone`in t?t.cardTone:i(e))(1),size:`sm`},null,8,[`tone`]),r[3]||=u(`p`,{class:`k`},`理想剩余(今天)`,-1),u(`p`,de,[y(c(i(X)),1),r[2]||=u(`small`,null,`点`,-1)])],2),u(`div`,{class:h([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(2)])},[l(o,{tone:(`cardTone`in t?t.cardTone:i(e))(2),size:`sm`},null,8,[`tone`]),r[5]||=u(`p`,{class:`k`},`偏差`,-1),u(`p`,{class:h([`v`,{bad:i(Z)>0,good:i(Z)<=0}])},[y(c(i(Z)>0?`+`+i(Z):i(Z)),1),r[4]||=u(`small`,null,`点`,-1)],2)],2),u(`div`,{class:h([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(3)])},[l(o,{tone:(`cardTone`in t?t.cardTone:i(e))(3),size:`sm`},null,8,[`tone`]),r[6]||=u(`p`,{class:`k`},`承诺 / 容量`,-1),u(`p`,fe,[y(c(i(B)?i(P)(i(B)):0),1),u(`small`,null,`/ `+c(i(B)?.capacity??0),1)])],2),u(`div`,{class:h([`kpi`,(`cardToneClass`in t?t.cardToneClass:i(n))(4)])},[l(o,{tone:(`cardTone`in t?t.cardTone:i(e))(4),size:`sm`},null,8,[`tone`]),r[8]||=u(`p`,{class:`k`},`范围变更`,-1),u(`p`,pe,[y(c(i(Q).length),1),r[7]||=u(`small`,null,`次`,-1)])],2)]),i(B)?(s(),f(`div`,me,[u(`div`,he,[u(`div`,ge,[u(`h2`,_e,c(i(B).name),1),u(`p`,ve,c(i(B).id)+` · `+c(i(F)(i(B).start))+` ~ `+c(i(F)(i(B).end)),1),u(`p`,ye,c(i(B).goal),1)]),l(p,{modelValue:i(z),"onUpdate:modelValue":r[0]||=e=>ae(z)?z.value=e:null,items:i(Ue),icon:`i-lucide-calendar-range`,"aria-label":`选择迭代`,class:`bd-select`},null,8,[`modelValue`,`items`])]),u(`div`,be,[r[10]||=_(`<div class="chart-legend" data-v-d8ba9a67><span class="lg" data-v-d8ba9a67><i class="sw actual" data-v-d8ba9a67></i>实际剩余</span><span class="lg" data-v-d8ba9a67><i class="sw ideal" data-v-d8ba9a67></i>理想线</span><span class="lg" data-v-d8ba9a67><i class="sw scope" data-v-d8ba9a67></i>范围变更</span></div>`,1),(s(),f(`svg`,{viewBox:`0 0 ${Be} ${Ve}`,class:`chart`,role:`img`},[r[9]||=_(`<defs data-v-d8ba9a67><linearGradient id="bd-line" x1="0" y1="0" x2="1" y2="0" data-v-d8ba9a67><stop offset="0%" stop-color="#8a63f7" data-v-d8ba9a67></stop><stop offset="100%" stop-color="#c3aefb" data-v-d8ba9a67></stop></linearGradient><linearGradient id="bd-area" x1="0" y1="0" x2="0" y2="1" data-v-d8ba9a67><stop offset="0%" stop-color="#8a63f7" stop-opacity="0.16" data-v-d8ba9a67></stop><stop offset="100%" stop-color="#8a63f7" stop-opacity="0" data-v-d8ba9a67></stop></linearGradient></defs>`,1),u(`g`,null,[(s(),f(d,null,a([0,.25,.5,.75,1],e=>u(`line`,{key:`grid`+e,x1:M,y1:G(i(U)*e),x2:938,y2:G(i(U)*e),stroke:`#f1f0ea`,"stroke-width":`1`},null,8,Se)),64)),(s(),f(d,null,a([0,.25,.5,.75,1],e=>u(`text`,{key:`gl`+e,x:32,y:G(i(U)*e)+3.5,"text-anchor":`end`,"font-size":`9.5`,fill:`#b0b4ba`},c(Math.round(i(U)*e)),9,b)),64))]),u(`path`,{d:i(We),fill:`url(#bd-area)`},null,8,x),u(`path`,{d:`M${W(0)},${G(i(U))} L${W(i(H)-1)},${G(0)}`,stroke:`#cdc9d8`,"stroke-width":`1.4`,"stroke-dasharray":`5 5`,fill:`none`},null,8,S),u(`polyline`,{points:K(`actual`),stroke:`url(#bd-line)`,"stroke-width":`2.6`,fill:`none`,"stroke-linejoin":`round`,"stroke-linecap":`round`},null,8,C),(s(!0),f(d,null,a(i(V).days,(e,t)=>(s(),f(`circle`,{key:e.date,cx:W(t),cy:G(e.actual),r:`3`,fill:`#fff`,stroke:`#8a63f7`,"stroke-width":`1.8`},null,8,w))),128)),i(q)>=0?(s(),f(`line`,{key:0,x1:W(i(q)),y1:34,x2:W(i(q)),y2:G(0),stroke:`#cf4759`,"stroke-dasharray":`3 3`,"stroke-width":`1.2`,opacity:`0.7`},null,8,T)):m(``,!0),i(q)>=0?(s(),f(`text`,{key:1,x:W(i(q)),y:28,"text-anchor":`middle`,"font-size":`9.5`,fill:`#a5382f`},`今天`,8,E)):m(``,!0),(s(!0),f(d,null,a(i(V).days,(e,t)=>se((s(),f(`text`,{key:`t`+e.date,x:W(t),y:286,"text-anchor":`middle`,"font-size":`9.5`,fill:`#b0b4ba`},c(i(F)(e.date)),9,D)),[[ce,t%Math.ceil(i(H)/10)===0]])),128)),(s(!0),f(d,null,a(i(Q),e=>(s(),f(`g`,{key:e.at+e.id},[u(`title`,null,c(e.id)+` `+c(e.title)+`:`+c(i(R)[e.kind])+`(`+c(e.at)+`,`+c(e.points)+` 点)—— `+c(e.reason),1),u(`line`,{x1:W(e.idx),y1:36,x2:W(e.idx),y2:G(0),stroke:`#3f7fd4`,"stroke-dasharray":`4 3`,"stroke-width":`1.2`,opacity:`0.8`},null,8,O),u(`circle`,{cx:W(e.idx),cy:34,r:`3`,fill:`#3f7fd4`},null,8,k)]))),128))],8,xe))]),u(`div`,A,[(s(!0),f(d,null,a(i(V).days,e=>(s(),f(`div`,{key:`row`+e.date,class:h([`cell`,{today:e.date===i(I),future:e.date>i(I),scope:i(Ge).has(e.date)}])},[u(`span`,j,c(i(F)(e.date)),1),u(`span`,Ce,c(e.actual),1),u(`span`,we,c(e.ideal),1),u(`i`,{class:`underline`,style:ie({width:(i(U)?e.actual/i(U)*100:0)+`%`})},null,4)],2))),128))]),r[12]||=u(`p`,{class:`foot dim`},`每格:日期 / 实际剩余 / 理想剩余`,-1),i(Q).length?(s(),f(`div`,Te,[u(`p`,Ee,[l(g,{name:`i-lucide-git-branch`,class:`size-3`}),y(`本迭代范围变更(`+c(i(Q).length)+`)`,1)]),u(`ul`,null,[(s(!0),f(d,null,a(i(Q),e=>(s(),f(`li`,{key:e.id},[u(`span`,De,c(i(R)[e.kind]),1),l(v,{to:`/story/${e.id}`,class:`mono link`},{default:oe(()=>[y(c(e.id),1)]),_:2},1032,[`to`]),u(`span`,null,c(e.title),1),u(`span`,Oe,`· `+c(e.at)+` · `+c(e.points)+` 点 · `+c(e.reason),1)]))),128))]),r[11]||=u(`p`,{class:`foot dim`},`竖线标出的那几天,实际剩余没有按理想线下滑,是插了活而不是团队拖。`,-1)])):m(``,!0)])):(s(),f(`div`,ke,[l(g,{name:`i-lucide-info`,class:`size-4`}),r[13]||=y(`还没有迭代数据。 `,-1)])),u(`div`,Ae,[u(`div`,je,[r[14]||=u(`h2`,{class:`h2`},`迭代对照`,-1),u(`span`,Me,c(i($).length),1),r[15]||=u(`span`,{class:`dim tip`},`点一行切换上面的燃尽图`,-1)]),u(`div`,Ne,[u(`table`,Pe,[r[16]||=u(`thead`,null,[u(`tr`,null,[u(`th`,null,`迭代`),u(`th`,null,`名称`),u(`th`,null,`周期`),u(`th`,{class:`r`},`故事`),u(`th`,{class:`r`},`承诺 / 容量`),u(`th`,null,`状态`)])],-1),u(`tbody`,null,[(s(!0),f(d,null,a(i($),e=>(s(),f(`tr`,{key:e.id,class:h({on:e.id===i(z)}),onClick:t=>z.value=e.id},[u(`td`,Ie,c(e.id),1),u(`td`,null,c(e.name),1),u(`td`,Le,c(e.period),1),u(`td`,Re,c(e.stories),1),u(`td`,ze,c(e.commit)+`/`+c(e.capacity),1),u(`td`,null,[u(`span`,{class:h([`tag`,e.tone])},c(e.status),3)])],10,Fe))),128))])])])])])}}}),[[`__scopeId`,`data-v-d8ba9a67`]]);export{N as default};
@@ -1 +1 @@
1
- import{t as e}from"./CI0scS-N.js";import{n as t}from"./SrNUvNwO.js";import{U as n,Xt as r,b as i,d as a,lt as o,m as s,y as c}from"./BxuBMtk_.js";import{i as l}from"#entry";var u={class:`antialiased bg-white dark:bg-neutral-950 dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-neutral-950 tracking-wide`},d={class:`max-w-520px text-center`},f=[`textContent`],p=[`textContent`],m=[`textContent`],h={class:`flex items-center justify-center w-full`},g=[`textContent`],_=l({__name:`error-404`,props:{appName:{type:String,default:`Nuxt`},status:{type:Number,default:404},statusText:{type:String,default:`Page not found`},description:{type:String,default:`Sorry, the page you are looking for could not be found.`},backHome:{type:String,default:`Go back home`},backToPrevious:{type:String,default:`Go back`}},setup(l){let _=l;return t({title:`${_.status} - ${_.statusText} | ${_.appName}`,script:[{innerHTML:`(()=>{if(!(window.history.state&&window.history.state.back||document.referrer.startsWith(window.location.origin+"/")))return;const t=document.querySelector("[data-back-home]"),e=document.querySelector("[data-back-previous]");t&&e&&(e.onclick=()=>window.history.back(),t.hidden=!0,e.hidden=!1)})();`,tagPosition:`bodyClose`}],style:[{innerHTML:`*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb);--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }:after,:before{--un-content:""}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body,button{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}a{-webkit-text-decoration:inherit;text-decoration:inherit}a,button{color:inherit}button{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;padding:0;text-transform:none;cursor:pointer}[type=button],button{-webkit-appearance:button;background-color:#0000;background-image:none}h1,h2,p{margin:0}[hidden]:where(:not([hidden=until-found])){display:none}`}]}),(t,_)=>{let v=e;return n(),s(`div`,u,[a(`div`,d,[a(`h1`,{class:`font-medium leading-none mb-4 sm:text-[72px] tabular-nums text-[56px]`,textContent:r(l.status)},null,8,f),a(`h2`,{class:`font-semibold mb-2 sm:text-3xl text-2xl`,textContent:r(l.statusText)},null,8,p),a(`p`,{class:`mb-4 px-2 text-md text-neutral-500`,textContent:r(l.description)},null,8,m),a(`div`,h,[i(v,{to:`/`,"data-back-home":``,class:`font-medium hover:text-[#00DC82] text-sm underline underline-offset-3`},{default:o(()=>[c(r(l.backHome),1)]),_:1}),_[0]||=c(),a(`button`,{type:`button`,"data-back-previous":``,hidden:``,class:`appearance-none bg-transparent border-0 cursor-pointer font-medium font-sans hover:text-[#00DC82] p-0 text-inherit text-sm underline underline-offset-3`,textContent:r(l.backToPrevious)},null,8,g)])])])}}},[[`__scopeId`,`data-v-a27dea0c`]]);export{_ as default};
1
+ import{t as e}from"./CI0scS-N.js";import{n as t}from"./SrNUvNwO.js";import{U as n,Xt as r,b as i,d as a,lt as o,m as s,y as c}from"./BxuBMtk_.js";import{i as l}from"#entry";var u={class:`antialiased bg-white dark:bg-neutral-950 dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-neutral-950 tracking-wide`},d={class:`max-w-520px text-center`},f=[`textContent`],p=[`textContent`],m=[`textContent`],h={class:`flex items-center justify-center w-full`},g=[`textContent`],_=l({__name:`error-404`,props:{appName:{type:String,default:`Nuxt`},status:{type:Number,default:404},statusText:{type:String,default:`Page not found`},description:{type:String,default:`Sorry, the page you are looking for could not be found.`},backHome:{type:String,default:`Go back home`},backToPrevious:{type:String,default:`Go back`}},setup(l){let _=l;return t({title:`${_.status} - ${_.statusText} | ${_.appName}`,script:[{innerHTML:`(()=>{if(!(window.history.state&&window.history.state.back||document.referrer.startsWith(window.location.origin+"/")))return;const t=document.querySelector("[data-back-home]"),e=document.querySelector("[data-back-previous]");t&&e&&(e.onclick=()=>window.history.back(),t.hidden=!0,e.hidden=!1)})();`,tagPosition:`bodyClose`}],style:[{innerHTML:`*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb);--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }:after,:before{--un-content:""}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body,button{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}a{-webkit-text-decoration:inherit;text-decoration:inherit}a,button{color:inherit}button{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;padding:0;text-transform:none;cursor:pointer}[type=button],button{-webkit-appearance:button;background-color:#0000;background-image:none}h1,h2,p{margin:0}[hidden]:where(:not([hidden=until-found])){display:none}`}]}),(t,_)=>{let v=e;return n(),s(`div`,u,[a(`div`,d,[a(`h1`,{class:`font-medium leading-none mb-4 sm:text-[72px] tabular-nums text-[56px]`,textContent:r(l.status)},null,8,f),a(`h2`,{class:`font-semibold mb-2 sm:text-3xl text-2xl`,textContent:r(l.statusText)},null,8,p),a(`p`,{class:`mb-4 px-2 text-md text-neutral-500`,textContent:r(l.description)},null,8,m),a(`div`,h,[i(v,{to:`/`,"data-back-home":``,class:`font-medium hover:text-[#00DC82] text-sm underline underline-offset-3`},{default:o(()=>[c(r(l.backHome),1)]),_:1}),_[0]||=c(),a(`button`,{type:`button`,"data-back-previous":``,hidden:``,class:`appearance-none bg-transparent border-0 cursor-pointer font-medium font-sans hover:text-[#00DC82] p-0 text-inherit text-sm underline underline-offset-3`,textContent:r(l.backToPrevious)},null,8,g)])])])}}},[[`__scopeId`,`data-v-8e352ff6`]]);export{_ as default};
@@ -1,3 +1,3 @@
1
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 ee,I as te,K as o,N as ne,S as re,U as s,Xt as c,Yt as ie,at as ae,b as l,d as u,f as d,i as f,lt as oe,m as p,p as m,qt as h,s as se,u as g,v as ce,xt as _,y as v}from"./BxuBMtk_.js";import{c as y}from"./BygIGL69.js";var le={added:`新增`,updated:`状态变更`,removed:`移除`},ue=`更新交付记录`,b=`变更`,x=e=>typeof e==`string`?e.replace(/\s+/g,` `).trim():``;function de(e){let t=Array.isArray(e?.changes)?e.changes:[],n=x(e?.title)||ue,r=t.some(e=>e?.action===`added`)?`feat`:`chore`,i=[];for(let e of t){let t=x(e?.id);if(!t)continue;let n=x(e.title)||x(e.note),r=le[e.action]||x(e.action)||b;e.action===`updated`&&(x(e.from)||x(e.to))&&(r+=` ${x(e.from)||`—`} → ${x(e.to)||`—`}`),i.push(`- ${t}${n?` ${n}`:``}(${r})`)}return i.length?`${r}: ${n}\n\n${i.join(`
2
2
  `)}`:`${r}: ${n}`}var S=/(?:^|(?<=[\s。;;::,,))]))(?:\d{1,2}[.)、]|[((]\d{1,2}[))]|[①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳]|[-*•·])\s+/gm,C=/(?<=[。;;])/,w=e=>typeof e==`string`?e.replace(/[\r\n]+/g,` `).replace(/\s{2,}/g,` `).trim():``,T=e=>e.match(S)?.length??0,E=20,D=e=>e.replace(/[;;,,]+$/,``).trim(),O=e=>e.length>1?e.map(D).filter(Boolean):e;function k(e){if(T(e)<2)return[];let t=e.split(S).map(w).filter(Boolean);return t.length>1&&t[0].length<=E&&/[::]$/.test(t[0])&&t.splice(0,2,`${t[0]}${t[1]}`),O(t)}function fe(e){if(Array.isArray(e))return O(e.map(w).filter(Boolean));let t=w(e);if(!t)return[];let n=String(e).split(/\r?\n/).map(w).filter(Boolean);if(n.length>1)return O(n.flatMap(e=>{let t=k(e);return t.length?t:[e]}).filter(Boolean));let r=k(t);if(r.length>1)return r;let i=O(t.split(C).map(w).filter(Boolean));return i.length>1?i:[t]}var pe={class:`rule-top`},me={class:`rule-ic`},he={class:`rule-state`},ge={class:`mono`},_e={key:0},ve={class:`rule-cases`},ye={class:`case-when`},be={class:`case-then`},xe={key:1,class:`lc-hist-bar`},Se={class:`hist-badge`},Ce={class:`hist-readonly mono`},we=[`title`,`disabled`,`onClick`],Te={key:2,class:`card lc-empty`},Ee={class:`em-ic`},De={key:3,class:`lc`},Oe={class:`lc-hero`},ke={class:`hero-body`},Ae={class:`hero-kicker`},je={class:`k-date mono`},Me={key:0,class:`k-time mono`},Ne={key:1,class:`k-today`},Pe=[`title`],Fe={class:`hero-title`},Ie={key:0,class:`hero-points`},Le={key:1,class:`hero-sum`},Re={class:`hero-meta`},ze={class:`hero-aside`},Be={class:`ring-in`},Ve={class:`lc-nav`,"aria-label":`分区导航`},He=[`href`,`onClick`],Ue={class:`lc-nav-lb`},We={class:`lc-nav-ct`},Ge={id:`lc-scenarios`,class:`lc-sc-sec`},Ke={class:`s-hd solo`},qe={class:`s-ic tone-mint`},Je={class:`s-count`},Ye={key:0,class:`dim sec-empty`},Xe={key:1,class:`lc-sc-grid`},Ze={class:`sc-hd`},Qe={class:`sc-id mono`},$e={class:`sc-title`},et={key:0,class:`sc-body`},tt={class:`lc-sc-steps`},nt={class:`sc-acc`},rt={class:`sc-acc-h`},it={class:`sc-acc-t`},at={key:0,class:`sc-foot`},ot={key:0},st={key:1,class:`sc-ids`},ct={key:0,id:`lc-access`,class:`card sec lc-access`},lt={class:`s-hd`},ut={class:`s-ic tone-sky`},dt={class:`s-count`},ft={class:`sec-bd acc-grid`},pt={key:0,class:`acc-col`},mt={class:`u-head`},ht=[`href`],gt={class:`u-label`},_t=[`onClick`],vt={class:`u-url mono`},yt={key:0,class:`u-note`},bt={key:1,class:`acc-col`},xt={class:`a-head`},St={key:0,class:`a-role`},Ct={class:`a-user mono`},wt=[`onClick`],Tt={class:`a-line`},Et={key:0,class:`a-pass mono`},Dt={key:1,class:`a-none dim`},Ot={key:0,class:`a-note`},kt={key:1,id:`lc-prep`,class:`card sec lc-prep`},At={class:`s-hd`},jt={class:`s-ic tone-amber`},Mt={class:`s-count`},Nt={class:`steps`},Pt={class:`step-bd`},Ft={class:`step-text`},It={key:0,class:`cmd-row`},Lt={class:`cmd mono`},Rt=[`onClick`],zt={key:1,class:`step-note`},Bt={id:`lc-changes`,class:`card sec`},Vt={class:`s-hd`},Ht={class:`s-ic`},Ut={class:`s-count`},Wt={key:0,class:`sec-empty dim`},Gt={key:1,class:`tbl-wrap`},Kt={class:`tbl lc-tbl`},qt={class:`ent`},Jt={class:`ent-top`},Yt={key:0,class:`ent-title`},Xt={key:0,class:`flow mono`},Zt={class:`fl`},Qt={class:`fl`},$t={class:`cell-note`},en={class:`chips`},tn=[`title`],nn={key:0,class:`dim`},rn={class:`two`},an={id:`lc-extras`,class:`card sec`},on={class:`s-hd`},sn={class:`s-ic`},cn={class:`s-count`},ln={class:`sec-bd lc-extras`},un={key:0,class:`dim`},dn={class:`x-body`},fn={class:`x-title`},pn={key:0,class:`x-detail`},mn={key:1,class:`chips x-files`},hn=[`title`],gn={id:`lc-checks`,class:`card sec`},_n={class:`s-hd`},vn={class:`s-ic tone-mint`},yn={class:`s-count`},bn={class:`sec-bd lc-checks`},xn={key:0,class:`dim`},Sn={class:`v-body`},Cn={class:`v-what`},wn={key:0,class:`v-detail`},Tn={class:`two`},En={id:`lc-notes`,class:`card sec`},Dn={class:`s-hd`},On={class:`s-ic`},kn={class:`s-count`},An={class:`sec-bd`},jn={key:0,class:`dim`},Mn={key:1,class:`lc-notes`},Nn={key:0,id:`lc-open`,class:`card sec sec-warn`},Pn={class:`s-hd`},Fn={class:`s-ic`},In={class:`s-count`},Ln={class:`sec-bd`},Rn={class:`lc-notes warn`},zn={class:`lc-hist`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`lc-hist-title`},Bn={class:`lc-hist-hd`},Vn={class:`lc-hist-hd-txt`},Hn={class:`lc-hist-sub`},Un={key:0,class:`lc-hist-err`},Wn={key:1,class:`lc-hist-hint dim`},Gn={key:2,class:`lc-hist-list`},Kn=[`disabled`,`onClick`],qn={class:`hist-item-main`},Jn={class:`mono`},Yn={class:`mono hist-item-hash`},Xn={key:0,class:`lc-hist-hint dim`},Zn={class:`lc-hist-ft`},Qn={class:`lc-hist lc-commit`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`lc-commit-title`},$n={class:`lc-hist-hd`},er=[`disabled`],tr={key:0,class:`cm-done`},nr={class:`cm-done-ic`},rr={class:`cm-done-bd`},ir={class:`cm-done-t`},ar={class:`mono`},or={class:`cm-done-s`},sr={class:`cm-done-n`},cr={key:1,class:`cm-body`},lr={class:`cm-msg mono`},ur={class:`micro`},dr={key:0,class:`cm-hint dim`},fr={key:1,class:`cm-hint warn`},pr={key:2,class:`cm-hint warn`},mr={key:3,class:`cm-hint dim`},hr={key:4,class:`cm-files`},gr=[`title`],_r={key:2,class:`lc-hist-err`},vr={class:`lc-hist-ft`},yr={class:`dim`},br={class:`cm-acts`},xr=[`disabled`],Sr=[`disabled`],A=r(re({__name:`last-change`,setup(r){let{lastChange:re,lastChangeGit:le,refresh:ue}=i(),b=_(null),x=g(()=>b.value?.doc?.lastChange??re.value),S=g(()=>le.value),C=_([]),w=_(!1),T=_(!1),E=_(``),D=_(!1),O=g(()=>b.value?[b.value]:[]);async function k(){if(!T.value){T.value=!0,E.value=``;try{let e=await n(`/api/agile/last-change/history`);C.value=e.entries??[]}catch(e){E.value=e?.data?.error||e?.message||`读不到 git 历史`}finally{T.value=!1}}}async function A(){w.value=!0,C.value.length||await k()}async function Cr(e){if(!D.value){D.value=!0,E.value=``;try{b.value=await n(`/api/agile/last-change/revision`,{query:{hash:e.hash}}),w.value=!1,window.scrollTo({top:0,behavior:`smooth`})}catch(e){E.value=e?.data?.error||e?.message||`取不到这个版本`}finally{D.value=!1}}}function wr(){b.value=null,window.scrollTo({top:0,behavior:`smooth`})}let Tr=_(null);ae(b,async()=>{await ne(),Tr.value?.querySelector(`.hist-tab.on`)?.scrollIntoView({inline:`nearest`,block:`nearest`})});function Er(e){e.key===`Escape`&&(J.value?$():w.value&&=!1)}ee(()=>window.addEventListener(`keydown`,Er)),te(()=>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=g(()=>Dr[S.value?.state??`missing`]??Dr.missing),Or=[{key:`committed`,when:`已提交`,then:`下次写入整份覆盖;上一版留在 git 历史里,点「查看历史」随时翻回来`},{key:`pending`,when:`未提交`,then:`下次写入合并:新交付接在旧记录后面,不冲掉还没入库的内容`}],kr=g(()=>{let e=S.value?.state;return e===`committed`?`committed`:e===`dirty`||e===`untracked`||e===`no-git`?`pending`:``}),M=g(()=>fe(x.value?.summary)),Ar=g(()=>(x.value?.mergedFrom?.length??0)+1),jr=g(()=>(x.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=g(()=>x.value?.changes??[]),P=g(()=>de(x.value??{})),F=g(()=>x.value?.extras??[]),I=g(()=>x.value?.verification??[]),L=g(()=>x.value?.scenarios??[]),R=g(()=>x.value?.preparation??[]),z=g(()=>x.value?.notes??[]),B=g(()=>x.value?.open??[]),V=g(()=>x.value?.access?.urls??[]),H=g(()=>x.value?.access?.accounts??[]),U=g(()=>I.value.filter(e=>e.result===`pass`).length),Ir=g(()=>I.value.length>0&&U.value===I.value.length),Lr=g(()=>I.value.length?Math.round(U.value/I.value.length*100):0),Rr=g(()=>[...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=g(()=>[{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=g(()=>(x.value?.at??``).slice(0,10)),Ur=g(()=>{let e=(x.value?.at??``).slice(10).replace(/^[T ]/,``);return/^\d{2}:\d{2}/.test(e)?e:``}),Wr=g(()=>!!G.value&&G.value===Hr),K=_(``);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=_(!1),Y=_(!1),X=_(``),Z=_(null),Q=_(null),Gr=g(()=>!!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 ue()}catch(e){X.value=e?.data?.error||e?.message||`提交失败`}finally{Y.value=!1}}}return(n,r)=>{let i=e,ee=t;return s(),p(f,null,[a(b)?(s(),p(`div`,xe,[u(`span`,Se,[l(i,{name:`i-lucide-history`,class:`hist-badge-ic`}),r[8]||=v(`历史版本`,-1)]),u(`span`,Ce,[v(`只读 · `+c(a(b).short),1),a(b).date?(s(),p(f,{key:0},[v(` · `+c(a(b).date),1)],64)):m(``,!0)]),u(`div`,{ref_key:`tabsRef`,ref:Tr,class:`lc-hist-tabs`},[u(`button`,{class:`hist-tab`,onClick:wr},`最新`),(s(!0),p(f,null,o(a(O),e=>(s(),p(`button`,{key:e.hash,class:h([`hist-tab`,{on:a(b)?.hash===e.hash}]),title:`${e.date} ${e.subject??``}`,disabled:a(D),onClick:t=>Cr(e)},[v(c(e.short),1),u(`i`,null,c(e.date.slice(5,16)),1)],10,we))),128))],512),u(`button`,{class:`rule-btn`,onClick:A},[l(i,{name:`i-lucide-list`,class:`rule-btn-ic`}),r[9]||=v(`选择历史…`,-1)])])):(s(),p(`div`,{key:0,class:h([`lc-rule`,`is-${a(j).tone}`])},[u(`div`,pe,[u(`span`,me,[l(i,{name:`i-lucide-git-branch`,class:`rule-svg`})]),r[6]||=u(`b`,{class:`rule-title`},`写入规则`,-1),r[7]||=u(`span`,{class:`rule-file mono`},`agile/last-change.json`,-1),u(`span`,he,[u(`i`,{class:h([`rule-dot`,`tone-${a(j).tone}`])},null,2),v(` 当前 `+c(a(j).text),1),a(S)?.state===`committed`&&a(S).hash?(s(),p(f,{key:0},[r[4]||=v(` · `,-1),u(`span`,ge,c(a(S).hash),1)],64)):m(``,!0)]),u(`button`,{class:`rule-btn`,onClick:A},[l(i,{name:`i-lucide-history`,class:`rule-btn-ic`}),r[5]||=v(`查看历史 `,-1),a(C).length?(s(),p(`i`,_e,c(a(C).length),1)):m(``,!0)])]),u(`ul`,ve,[(s(),p(f,null,o(Or,e=>u(`li`,{key:e.key,class:h([`rule-case`,{on:a(kr)===e.key}])},[u(`span`,ye,c(e.when),1),l(i,{name:`i-lucide-arrow-right`,class:`case-arrow`}),u(`span`,be,c(e.then),1)],2)),64))])],2)),a(x)?(s(),p(`div`,De,[u(`header`,Oe,[u(`div`,ke,[u(`p`,Ae,[r[11]||=u(`span`,{class:`k-dot`},null,-1),r[12]||=v(`最近一次交付 `,-1),r[13]||=u(`span`,{class:`k-sep`},null,-1),u(`span`,je,c(a(G)),1),a(Ur)?(s(),p(`span`,Me,c(a(Ur)),1)):m(``,!0),a(Wr)?(s(),p(`span`,Ne,`今天`)):m(``,!0),a(x).merged?(s(),p(`span`,{key:2,class:`k-merged`,title:a(jr)},`合并记录 · `+c(a(Ar))+` 次交付`,9,Pe)):m(``,!0)]),u(`h2`,Fe,c(a(x).title),1),a(M).length>1?(s(),p(`ol`,Ie,[(s(!0),p(f,null,o(a(M),(e,t)=>(s(),p(`li`,{key:t},c(e),1))),128))])):a(M).length?(s(),p(`p`,Le,c(a(M)[0]),1)):m(``,!0),u(`div`,Re,[u(`span`,null,[u(`b`,null,c(a(N).length),1),r[14]||=v(` 处变更`,-1)]),r[19]||=u(`i`,{class:`meta-sep`},null,-1),u(`span`,null,[u(`b`,null,c(a(Rr).length),1),r[15]||=v(` 个文件`,-1)]),r[20]||=u(`i`,{class:`meta-sep`},null,-1),u(`span`,null,[u(`b`,null,c(a(L).length),1),r[16]||=v(` 条测试场景`,-1)]),a(F).length?(s(),p(f,{key:0},[r[18]||=u(`i`,{class:`meta-sep`},null,-1),u(`span`,null,[u(`b`,null,c(a(F).length),1),r[17]||=v(` 项额外工作`,-1)])],64)):m(``,!0)])]),u(`div`,ze,[u(`div`,{class:h([`ring`,{warn:a(I).length&&!a(Ir)}]),style:ie({"--pct":a(Lr)})},[u(`div`,Be,[u(`b`,null,[v(c(a(U)),1),u(`small`,null,`/`+c(a(I).length||0),1)]),u(`span`,null,c(a(I).length?a(Ir)?`验证全通过`:`有未通过项`:`无验证记录`),1)])],6)])]),u(`nav`,Ve,[(s(!0),p(f,null,o(a(Br),e=>(s(),p(`a`,{key:e.id,class:h([`lc-nav-link`,`tone-${e.tone}`]),href:`#${e.id}`,onClick:y(t=>Vr(e.id),[`prevent`])},[l(i,{name:e.icon,class:`lc-nav-ic`},null,8,[`name`]),u(`span`,Ue,c(e.label),1),u(`b`,We,c(e.count),1)],10,He))),128))]),u(`section`,Ge,[u(`div`,Ke,[u(`span`,qe,[l(i,{name:`i-lucide-flask-conical`,class:`s-svg`})]),r[21]||=u(`h2`,{class:`s-title`},`测试场景`,-1),u(`span`,Je,c(a(L).length),1),r[22]||=u(`span`,{class:`s-hint`},`一条一段:照着步骤走,末尾那句就是验收标准`,-1)]),a(L).length?(s(),p(`div`,Xe,[(s(!0),p(f,null,o(a(L),(e,t)=>(s(),p(`article`,{key:e.id??t,class:`sc lc-sc`},[u(`header`,Ze,[u(`span`,Qe,c(e.id??`TC-${t+1}`),1),u(`h3`,$e,c(e.title),1)]),e.steps?.length?(s(),p(`div`,et,[r[23]||=u(`p`,{class:`micro`},`测试步骤`,-1),u(`ol`,tt,[(s(!0),p(f,null,o(e.steps,(e,t)=>(s(),p(`li`,{key:t},c(e),1))),128))])])):m(``,!0),u(`div`,nt,[u(`p`,rt,[l(i,{name:`i-lucide-badge-check`,class:`sc-acc-ic`}),r[24]||=v(`验收标准`,-1)]),u(`p`,it,c(e.expect),1),e.acceptance||e.storyIds?.length?(s(),p(`div`,at,[e.acceptance?(s(),p(`span`,ot,`对应验收:`+c(e.acceptance),1)):m(``,!0),e.storyIds?.length?(s(),p(`span`,st,[(s(!0),p(f,null,o(e.storyIds,e=>(s(),d(ee,{key:e,to:`/story/${e}`,class:`ent-id mono`},{default:oe(()=>[v(c(e),1)]),_:2},1032,[`to`]))),128))])):m(``,!0)])):m(``,!0)])]))),128))])):(s(),p(`p`,Ye,`这次没有单独列测试场景。`))]),a(V).length||a(H).length?(s(),p(`section`,ct,[u(`div`,lt,[u(`span`,ut,[l(i,{name:`i-lucide-key-round`,class:`s-svg`})]),r[25]||=u(`h2`,{class:`s-title`},`调试入口与账号`,-1),u(`span`,dt,c(a(V).length+a(H).length),1),r[26]||=u(`span`,{class:`s-hint`},`照着这一栏就能自己跑起来点一遍`,-1)]),u(`div`,ft,[a(V).length?(s(),p(`div`,pt,[r[27]||=u(`p`,{class:`micro`},`访问地址`,-1),(s(!0),p(f,null,o(a(V),(e,t)=>(s(),p(`div`,{key:t,class:`u-item`},[u(`div`,mt,[u(`a`,{href:e.url,target:`_blank`,rel:`noreferrer`,class:`u-link`},[u(`span`,gt,c(e.label??`入口`),1),l(i,{name:`i-lucide-arrow-up-right`,class:`u-go`})],8,ht),u(`button`,{class:h([`cpy`,{ok:a(K)===`url-${t}`}]),onClick:n=>q(e.url,`url-${t}`)},[l(i,{name:a(K)===`url-${t}`?`i-lucide-check`:`i-lucide-copy`,class:`cpy-ic`},null,8,[`name`]),v(` `+c(a(K)===`url-${t}`?`已复制`:`复制`),1)],10,_t)]),u(`p`,vt,c(e.url),1),e.note?(s(),p(`p`,yt,c(e.note),1)):m(``,!0)]))),128))])):m(``,!0),a(H).length?(s(),p(`div`,bt,[r[29]||=u(`p`,{class:`micro`},`账号密码`,-1),(s(!0),p(f,null,o(a(H),(e,t)=>(s(),p(`div`,{key:t,class:`a-item`},[u(`div`,xt,[e.role?(s(),p(`span`,St,c(e.role),1)):m(``,!0),u(`span`,Ct,c(e.username),1),u(`button`,{class:h([`cpy`,{ok:a(K)===`acc-${t}`}]),onClick:n=>q(e.password?`账号:${e.username}\n密码:${e.password}`:e.username,`acc-${t}`)},[l(i,{name:a(K)===`acc-${t}`?`i-lucide-check`:`i-lucide-copy`,class:`cpy-ic`},null,8,[`name`]),v(` `+c(a(K)===`acc-${t}`?`已复制`:`复制`),1)],10,wt)]),u(`div`,Tt,[r[28]||=u(`span`,{class:`a-key`},`密码`,-1),e.password?(s(),p(`span`,Et,c(e.password),1)):(s(),p(`span`,Dt,`无密码 / 走单点登录`))]),e.note?(s(),p(`p`,Ot,c(e.note),1)):m(``,!0)]))),128))])):m(``,!0)])])):m(``,!0),a(R).length?(s(),p(`section`,kt,[u(`div`,At,[u(`span`,jt,[l(i,{name:`i-lucide-terminal-square`,class:`s-svg`})]),r[30]||=u(`h2`,{class:`s-title`},`测试前准备`,-1),u(`span`,Mt,c(a(R).length),1),r[31]||=u(`span`,{class:`s-hint`},`按顺序做完这些再开始点,命令可直接复制`,-1)]),u(`ol`,Nt,[(s(!0),p(f,null,o(a(R),(e,t)=>(s(),p(`li`,{key:t},[u(`div`,Pt,[u(`p`,Ft,c(e.step),1),e.command?(s(),p(`div`,It,[u(`code`,Lt,c(e.command),1),u(`button`,{class:h([`cpy`,{ok:a(K)===`cmd-${t}`}]),onClick:n=>q(e.command??``,`cmd-${t}`)},[l(i,{name:a(K)===`cmd-${t}`?`i-lucide-check`:`i-lucide-copy`,class:`cpy-ic`},null,8,[`name`]),v(` `+c(a(K)===`cmd-${t}`?`已复制`:`复制`),1)],10,Rt)])):m(``,!0),e.note?(s(),p(`p`,zt,c(e.note),1)):m(``,!0)])]))),128))])])):m(``,!0),u(`section`,Bt,[u(`div`,Vt,[u(`span`,Ht,[l(i,{name:`i-lucide-git-commit-horizontal`,class:`s-svg`})]),r[33]||=u(`h2`,{class:`s-title`},`变更清单`,-1),u(`span`,Ut,c(a(N).length),1),r[34]||=u(`span`,{class:`s-hint`},`故事与任务各自是新增还是状态变更、动过哪些文件`,-1),a(N).length?(s(),p(`button`,{key:0,class:h([`rule-btn s-copy`,{ok:a(K)===`commit`}]),title:`按 Conventional Commits 生成:首行是标题,正文每条变更带编号与名称`,onClick:r[0]||=e=>q(a(P),`commit`)},[l(i,{name:a(K)===`commit`?`i-lucide-check`:`i-lucide-clipboard-copy`,class:`rule-btn-ic`},null,8,[`name`]),v(` `+c(a(K)===`commit`?`已复制`:`复制变更信息`),1)],2)):m(``,!0),!a(b)&&a(N).length?(s(),p(`button`,{key:1,class:`rule-btn s-commit`,title:`把这次交付整份提交进本地仓库:git add -A + git commit,不 push`,onClick:Kr},[l(i,{name:`i-lucide-git-commit-vertical`,class:`rule-btn-ic`}),r[32]||=v(`自动提交 `,-1)])):m(``,!0)]),a(N).length?(s(),p(`div`,Gt,[u(`table`,Kt,[r[36]||=u(`colgroup`,null,[u(`col`,{class:`c-ent`}),u(`col`,{class:`c-act`}),u(`col`),u(`col`,{class:`c-file`})],-1),r[37]||=u(`thead`,null,[u(`tr`,null,[u(`th`,null,`条目`),u(`th`,null,`变更`),u(`th`,null,`变更内容`),u(`th`,null,`涉及文件`)])],-1),u(`tbody`,null,[(s(!0),p(f,null,o(a(N),(e,t)=>(s(),p(`tr`,{key:`${e.kind}-${e.id}-${t}`},[u(`td`,null,[u(`div`,qt,[u(`div`,Jt,[u(`span`,{class:h([`kind`,`kind-${e.kind}`])},c(Nr[e.kind]??e.kind),3),l(ee,{to:`/story/${zr(e)}`,class:`ent-id mono`},{default:oe(()=>[v(c(e.id),1)]),_:2},1032,[`to`])]),e.title?(s(),p(`p`,Yt,c(e.title),1)):m(``,!0)])]),u(`td`,null,[u(`span`,{class:h([`act`,`act-${e.action}`])},c(Mr[e.action]??e.action),3),e.from||e.to?(s(),p(`p`,Xt,[u(`span`,Zt,c(e.from??`—`),1),r[35]||=u(`i`,null,`→`,-1),u(`span`,Qt,c(e.to??`—`),1)])):m(``,!0)]),u(`td`,$t,c(e.note??`—`),1),u(`td`,null,[u(`div`,en,[(s(!0),p(f,null,o(e.files,e=>(s(),p(`span`,{key:e,class:`fchip mono`,title:e},c(e),9,tn))),128)),e.files?.length?m(``,!0):(s(),p(`span`,nn,`—`))])])]))),128))])])])):(s(),p(`p`,Wt,`这次没有涉及任何故事或任务。`))]),u(`div`,rn,[u(`section`,an,[u(`div`,on,[u(`span`,sn,[l(i,{name:`i-lucide-sparkles`,class:`s-svg`})]),r[38]||=u(`h2`,{class:`s-title`},`额外做的事`,-1),u(`span`,cn,c(a(F).length),1)]),u(`div`,ln,[a(F).length?m(``,!0):(s(),p(`p`,un,`没有计划外的改动。`)),(s(!0),p(f,null,o(a(F),(e,t)=>(s(),p(`article`,{key:t,class:`x-item`},[r[39]||=u(`span`,{class:`x-mark`},null,-1),u(`div`,dn,[u(`p`,fn,c(e.title),1),e.detail?(s(),p(`p`,pn,c(e.detail),1)):m(``,!0),e.files?.length?(s(),p(`div`,mn,[(s(!0),p(f,null,o(e.files,e=>(s(),p(`span`,{key:e,class:`fchip mono`,title:e},c(e),9,hn))),128))])):m(``,!0)])]))),128))])]),u(`section`,gn,[u(`div`,_n,[u(`span`,vn,[l(i,{name:`i-lucide-badge-check`,class:`s-svg`})]),r[40]||=u(`h2`,{class:`s-title`},`验证结果`,-1),u(`span`,yn,c(a(U))+`/`+c(a(I).length),1)]),u(`div`,bn,[a(I).length?m(``,!0):(s(),p(`p`,xn,`这次没有留下验证记录。`)),(s(!0),p(f,null,o(a(I),(e,t)=>(s(),p(`div`,{key:t,class:`v-item`},[u(`span`,{class:h([`v-ic`,`v-${e.result}`])},[l(i,{name:Fr[e.result]??`i-lucide-circle`,class:`v-svg`},null,8,[`name`])],2),u(`div`,Sn,[u(`p`,Cn,c(e.what),1),e.detail?(s(),p(`p`,wn,c(e.detail),1)):m(``,!0)]),u(`span`,{class:h([`v-res`,`v-${e.result}`])},c(Pr[e.result]??e.result),3)]))),128))])])]),u(`div`,Tn,[u(`section`,En,[u(`div`,Dn,[u(`span`,On,[l(i,{name:`i-lucide-message-square-more`,class:`s-svg`})]),r[41]||=u(`h2`,{class:`s-title`},`说明`,-1),u(`span`,kn,c(a(z).length),1)]),u(`div`,An,[a(z).length?(s(),p(`ul`,Mn,[(s(!0),p(f,null,o(a(z),(e,t)=>(s(),p(`li`,{key:t},c(e),1))),128))])):(s(),p(`p`,jn,`没有额外说明。`))])]),a(B).length?(s(),p(`section`,Nn,[u(`div`,Pn,[u(`span`,Fn,[l(i,{name:`i-lucide-list-todo`,class:`s-svg`})]),r[42]||=u(`h2`,{class:`s-title`},`还没做的`,-1),u(`span`,In,c(a(B).length),1)]),u(`div`,Ln,[u(`ul`,Rn,[(s(!0),p(f,null,o(a(B),(e,t)=>(s(),p(`li`,{key:t},c(e),1))),128))])])])):m(``,!0)])])):(s(),p(`div`,Te,[u(`span`,Ee,[l(i,{name:`i-lucide-clipboard-list`,class:`em-svg`})]),r[10]||=ce(`<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)])),(s(),d(se,{to:`body`},[a(w)?(s(),p(`div`,{key:0,class:`lc-hist-mask`,onClick:r[3]||=y(e=>w.value=!1,[`self`])},[u(`div`,zn,[u(`header`,Bn,[u(`div`,Vn,[r[46]||=u(`h3`,{id:`lc-hist-title`,class:`lc-hist-title`},`历史版本`,-1),u(`p`,Hn,[r[43]||=v(` 从 git 里读 `,-1),r[44]||=u(`span`,{class:`mono`},`agile/last-change.json`,-1),r[45]||=v(` 的提交记录 `,-1),a(C).length?(s(),p(f,{key:0},[v(`· 共 `+c(a(C).length)+` 版`,1)],64)):m(``,!0)])]),u(`button`,{class:`lc-hist-x`,"aria-label":`关闭`,onClick:r[1]||=e=>w.value=!1},[l(i,{name:`i-lucide-x`,class:`lc-hist-x-ic`})])]),a(E)?(s(),p(`p`,Un,c(a(E)),1)):a(T)?(s(),p(`div`,Wn,`正在读 git 历史…`)):(s(),p(`div`,Gn,[(s(!0),p(f,null,o(a(C),(e,t)=>(s(),p(`button`,{key:e.hash,class:h([`hist-item`,{on:a(b)?.hash===e.hash}]),disabled:a(D),onClick:t=>Cr(e)},[u(`span`,{class:h([`hist-item-dot`,{live:t===0}])},null,2),u(`span`,qn,[u(`b`,null,c(e.subject||`(没有提交说明)`),1),u(`i`,Jn,c(e.date),1)]),u(`span`,Yn,c(e.short),1)],10,Kn))),128)),a(C).length?m(``,!0):(s(),p(`p`,Xn,` 这个文件还没有提交记录 —— 先 commit 一次,历史里才会出现版本。 `))])),u(`footer`,Zn,[r[47]||=u(`span`,{class:`dim`},`选一个版本即可在页面上只读查看,不会改动文件。`,-1),u(`button`,{class:`hist-close`,onClick:r[2]||=e=>w.value=!1},`关闭`)])])])):m(``,!0)])),(s(),d(se,{to:`body`},[a(J)?(s(),p(`div`,{key:0,class:`lc-hist-mask`,onClick:y($,[`self`])},[u(`div`,Qn,[u(`header`,$n,[r[48]||=u(`div`,{class:`lc-hist-hd-txt`},[u(`h3`,{id:`lc-commit-title`,class:`lc-hist-title`},`提交这次交付`),u(`p`,{class:`lc-hist-sub`},[v(` 将执行 `),u(`span`,{class:`mono`},`git add -A`),v(` + `),u(`span`,{class:`mono`},`git commit`),v(`,只提交到本地,不 push `)])],-1),u(`button`,{class:`lc-hist-x`,"aria-label":`关闭`,disabled:a(Y),onClick:$},[l(i,{name:`i-lucide-x`,class:`lc-hist-x-ic`})],8,er)]),a(Q)?(s(),p(`div`,tr,[u(`span`,nr,[l(i,{name:`i-lucide-check`,class:`cm-done-svg`})]),u(`div`,rr,[u(`p`,ir,[r[49]||=v(`已提交 `,-1),u(`span`,ar,c(a(Q).hash),1)]),u(`p`,or,c(a(Q).subject),1),u(`p`,sr,c(a(Q).files)+` 个文件 · 分支 `+c(a(Q).branch??`分离头指针`),1)])])):(s(),p(`div`,cr,[r[51]||=u(`p`,{class:`micro`},`提交信息`,-1),u(`pre`,lr,c(a(P)),1),u(`p`,ur,[r[50]||=v(` 将提交的文件`,-1),a(Z)?(s(),p(f,{key:0},[v(` · `+c(a(Z).files.length),1)],64)):m(``,!0)]),!a(Z)&&!a(X)?(s(),p(`p`,dr,`正在读 git 状态…`)):a(Z)&&!a(Z).isRepo?(s(),p(`p`,fr,`这个目录不是 git 仓库,没法自动提交。`)):a(Z)?.blocked?(s(),p(`p`,pr,c(a(Z).blocked),1)):a(Z)?.files.length?(s(),p(`ul`,hr,[(s(!0),p(f,null,o(a(Z).files,e=>(s(),p(`li`,{key:e.path,class:`cm-file`},[u(`span`,{class:h([`cm-code`,e.code===`??`?`cm-new`:`cm-mod`])},c(e.code),3),u(`span`,{class:`mono cm-path`,title:e.path},c(e.path),9,gr)]))),128))])):(s(),p(`p`,mr,`没有未提交的改动,不需要提交。`))])),a(X)?(s(),p(`p`,_r,c(a(X)),1)):m(``,!0),u(`footer`,vr,[u(`span`,yr,c(a(Z)?.branch?`当前分支 ${a(Z).branch}`:`提交后工作区应当是干净的`),1),u(`span`,br,[u(`button`,{class:`hist-close`,disabled:a(Y),onClick:$},c(a(Q)?`关闭`:`取消`),9,xr),a(Q)?m(``,!0):(s(),p(`button`,{key:0,class:`cm-go`,disabled:!a(Gr),onClick:qr},c(a(Y)?`提交中…`:`确认提交`),9,Sr))])])])])):m(``,!0)]))],64)}}}),[[`__scopeId`,`data-v-0de58a93`]]);export{A as default};
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=g(()=>x.value?.changes??[]),P=g(()=>de(x.value??{})),F=g(()=>x.value?.extras??[]),I=g(()=>x.value?.verification??[]),L=g(()=>x.value?.scenarios??[]),R=g(()=>x.value?.preparation??[]),z=g(()=>x.value?.notes??[]),B=g(()=>x.value?.open??[]),V=g(()=>x.value?.access?.urls??[]),H=g(()=>x.value?.access?.accounts??[]),U=g(()=>I.value.filter(e=>e.result===`pass`).length),Ir=g(()=>I.value.length>0&&U.value===I.value.length),Lr=g(()=>I.value.length?Math.round(U.value/I.value.length*100):0),Rr=g(()=>[...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=g(()=>[{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=g(()=>(x.value?.at??``).slice(0,10)),Ur=g(()=>{let e=(x.value?.at??``).slice(10).replace(/^[T ]/,``);return/^\d{2}:\d{2}/.test(e)?e:``}),Wr=g(()=>!!G.value&&G.value===Hr),K=_(``);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=_(!1),Y=_(!1),X=_(``),Z=_(null),Q=_(null),Gr=g(()=>!!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 ue()}catch(e){X.value=e?.data?.error||e?.message||`提交失败`}finally{Y.value=!1}}}return(n,r)=>{let i=e,ee=t;return s(),p(f,null,[a(b)?(s(),p(`div`,xe,[u(`span`,Se,[l(i,{name:`i-lucide-history`,class:`hist-badge-ic`}),r[8]||=v(`历史版本`,-1)]),u(`span`,Ce,[v(`只读 · `+c(a(b).short),1),a(b).date?(s(),p(f,{key:0},[v(` · `+c(a(b).date),1)],64)):m(``,!0)]),u(`div`,{ref_key:`tabsRef`,ref:Tr,class:`lc-hist-tabs`},[u(`button`,{class:`hist-tab`,onClick:wr},`最新`),(s(!0),p(f,null,o(a(O),e=>(s(),p(`button`,{key:e.hash,class:h([`hist-tab`,{on:a(b)?.hash===e.hash}]),title:`${e.date} ${e.subject??``}`,disabled:a(D),onClick:t=>Cr(e)},[v(c(e.short),1),u(`i`,null,c(e.date.slice(5,16)),1)],10,we))),128))],512),u(`button`,{class:`rule-btn`,onClick:A},[l(i,{name:`i-lucide-list`,class:`rule-btn-ic`}),r[9]||=v(`选择历史…`,-1)])])):(s(),p(`div`,{key:0,class:h([`lc-rule`,`is-${a(j).tone}`])},[u(`div`,pe,[u(`span`,me,[l(i,{name:`i-lucide-git-branch`,class:`rule-svg`})]),r[6]||=u(`b`,{class:`rule-title`},`写入规则`,-1),r[7]||=u(`span`,{class:`rule-file mono`},`agile/last-change.json`,-1),u(`span`,he,[u(`i`,{class:h([`rule-dot`,`tone-${a(j).tone}`])},null,2),v(` 当前 `+c(a(j).text),1),a(S)?.state===`committed`&&a(S).hash?(s(),p(f,{key:0},[r[4]||=v(` · `,-1),u(`span`,ge,c(a(S).hash),1)],64)):m(``,!0)]),u(`button`,{class:`rule-btn`,onClick:A},[l(i,{name:`i-lucide-history`,class:`rule-btn-ic`}),r[5]||=v(`查看历史 `,-1),a(C).length?(s(),p(`i`,_e,c(a(C).length),1)):m(``,!0)])]),u(`ul`,ve,[(s(),p(f,null,o(Or,e=>u(`li`,{key:e.key,class:h([`rule-case`,{on:a(kr)===e.key}])},[u(`span`,ye,c(e.when),1),l(i,{name:`i-lucide-arrow-right`,class:`case-arrow`}),u(`span`,be,c(e.then),1)],2)),64))])],2)),a(x)?(s(),p(`div`,De,[u(`header`,Oe,[u(`div`,ke,[u(`p`,Ae,[r[11]||=u(`span`,{class:`k-dot`},null,-1),r[12]||=v(`最近一次交付 `,-1),r[13]||=u(`span`,{class:`k-sep`},null,-1),u(`span`,je,c(a(G)),1),a(Ur)?(s(),p(`span`,Me,c(a(Ur)),1)):m(``,!0),a(Wr)?(s(),p(`span`,Ne,`今天`)):m(``,!0),a(x).merged?(s(),p(`span`,{key:2,class:`k-merged`,title:a(jr)},`合并记录 · `+c(a(Ar))+` 次交付`,9,Pe)):m(``,!0)]),u(`h2`,Fe,c(a(x).title),1),a(M).length>1?(s(),p(`ol`,Ie,[(s(!0),p(f,null,o(a(M),(e,t)=>(s(),p(`li`,{key:t},c(e),1))),128))])):a(M).length?(s(),p(`p`,Le,c(a(M)[0]),1)):m(``,!0),u(`div`,Re,[u(`span`,null,[u(`b`,null,c(a(N).length),1),r[14]||=v(` 处变更`,-1)]),r[19]||=u(`i`,{class:`meta-sep`},null,-1),u(`span`,null,[u(`b`,null,c(a(Rr).length),1),r[15]||=v(` 个文件`,-1)]),r[20]||=u(`i`,{class:`meta-sep`},null,-1),u(`span`,null,[u(`b`,null,c(a(L).length),1),r[16]||=v(` 条测试场景`,-1)]),a(F).length?(s(),p(f,{key:0},[r[18]||=u(`i`,{class:`meta-sep`},null,-1),u(`span`,null,[u(`b`,null,c(a(F).length),1),r[17]||=v(` 项额外工作`,-1)])],64)):m(``,!0)])]),u(`div`,ze,[u(`div`,{class:h([`ring`,{warn:a(I).length&&!a(Ir)}]),style:ie({"--pct":a(Lr)})},[u(`div`,Be,[u(`b`,null,[v(c(a(U)),1),u(`small`,null,`/`+c(a(I).length||0),1)]),u(`span`,null,c(a(I).length?a(Ir)?`验证全通过`:`有未通过项`:`无验证记录`),1)])],6)])]),u(`nav`,Ve,[(s(!0),p(f,null,o(a(Br),e=>(s(),p(`a`,{key:e.id,class:h([`lc-nav-link`,`tone-${e.tone}`]),href:`#${e.id}`,onClick:y(t=>Vr(e.id),[`prevent`])},[l(i,{name:e.icon,class:`lc-nav-ic`},null,8,[`name`]),u(`span`,Ue,c(e.label),1),u(`b`,We,c(e.count),1)],10,He))),128))]),u(`section`,Ge,[u(`div`,Ke,[u(`span`,qe,[l(i,{name:`i-lucide-flask-conical`,class:`s-svg`})]),r[21]||=u(`h2`,{class:`s-title`},`测试场景`,-1),u(`span`,Je,c(a(L).length),1),r[22]||=u(`span`,{class:`s-hint`},`一条一段:照着步骤走,末尾那句就是验收标准`,-1)]),a(L).length?(s(),p(`div`,Xe,[(s(!0),p(f,null,o(a(L),(e,t)=>(s(),p(`article`,{key:e.id??t,class:`sc lc-sc`},[u(`header`,Ze,[u(`span`,Qe,c(e.id??`TC-${t+1}`),1),u(`h3`,$e,c(e.title),1)]),e.steps?.length?(s(),p(`div`,et,[r[23]||=u(`p`,{class:`micro`},`测试步骤`,-1),u(`ol`,tt,[(s(!0),p(f,null,o(e.steps,(e,t)=>(s(),p(`li`,{key:t},c(e),1))),128))])])):m(``,!0),u(`div`,nt,[u(`p`,rt,[l(i,{name:`i-lucide-badge-check`,class:`sc-acc-ic`}),r[24]||=v(`验收标准`,-1)]),u(`p`,it,c(e.expect),1),e.acceptance||e.storyIds?.length?(s(),p(`div`,at,[e.acceptance?(s(),p(`span`,ot,`对应验收:`+c(e.acceptance),1)):m(``,!0),e.storyIds?.length?(s(),p(`span`,st,[(s(!0),p(f,null,o(e.storyIds,e=>(s(),d(ee,{key:e,to:`/story/${e}`,class:`ent-id mono`},{default:oe(()=>[v(c(e),1)]),_:2},1032,[`to`]))),128))])):m(``,!0)])):m(``,!0)])]))),128))])):(s(),p(`p`,Ye,`这次没有单独列测试场景。`))]),a(V).length||a(H).length?(s(),p(`section`,ct,[u(`div`,lt,[u(`span`,ut,[l(i,{name:`i-lucide-key-round`,class:`s-svg`})]),r[25]||=u(`h2`,{class:`s-title`},`调试入口与账号`,-1),u(`span`,dt,c(a(V).length+a(H).length),1),r[26]||=u(`span`,{class:`s-hint`},`照着这一栏就能自己跑起来点一遍`,-1)]),u(`div`,ft,[a(V).length?(s(),p(`div`,pt,[r[27]||=u(`p`,{class:`micro`},`访问地址`,-1),(s(!0),p(f,null,o(a(V),(e,t)=>(s(),p(`div`,{key:t,class:`u-item`},[u(`div`,mt,[u(`a`,{href:e.url,target:`_blank`,rel:`noreferrer`,class:`u-link`},[u(`span`,gt,c(e.label??`入口`),1),l(i,{name:`i-lucide-arrow-up-right`,class:`u-go`})],8,ht),u(`button`,{class:h([`cpy`,{ok:a(K)===`url-${t}`}]),onClick:n=>q(e.url,`url-${t}`)},[l(i,{name:a(K)===`url-${t}`?`i-lucide-check`:`i-lucide-copy`,class:`cpy-ic`},null,8,[`name`]),v(` `+c(a(K)===`url-${t}`?`已复制`:`复制`),1)],10,_t)]),u(`p`,vt,c(e.url),1),e.note?(s(),p(`p`,yt,c(e.note),1)):m(``,!0)]))),128))])):m(``,!0),a(H).length?(s(),p(`div`,bt,[r[29]||=u(`p`,{class:`micro`},`账号密码`,-1),(s(!0),p(f,null,o(a(H),(e,t)=>(s(),p(`div`,{key:t,class:`a-item`},[u(`div`,xt,[e.role?(s(),p(`span`,St,c(e.role),1)):m(``,!0),u(`span`,Ct,c(e.username),1),u(`button`,{class:h([`cpy`,{ok:a(K)===`acc-${t}`}]),onClick:n=>q(e.password?`账号:${e.username}\n密码:${e.password}`:e.username,`acc-${t}`)},[l(i,{name:a(K)===`acc-${t}`?`i-lucide-check`:`i-lucide-copy`,class:`cpy-ic`},null,8,[`name`]),v(` `+c(a(K)===`acc-${t}`?`已复制`:`复制`),1)],10,wt)]),u(`div`,Tt,[r[28]||=u(`span`,{class:`a-key`},`密码`,-1),e.password?(s(),p(`span`,Et,c(e.password),1)):(s(),p(`span`,Dt,`无密码 / 走单点登录`))]),e.note?(s(),p(`p`,Ot,c(e.note),1)):m(``,!0)]))),128))])):m(``,!0)])])):m(``,!0),a(R).length?(s(),p(`section`,kt,[u(`div`,At,[u(`span`,jt,[l(i,{name:`i-lucide-terminal-square`,class:`s-svg`})]),r[30]||=u(`h2`,{class:`s-title`},`测试前准备`,-1),u(`span`,Mt,c(a(R).length),1),r[31]||=u(`span`,{class:`s-hint`},`按顺序做完这些再开始点,命令可直接复制`,-1)]),u(`ol`,Nt,[(s(!0),p(f,null,o(a(R),(e,t)=>(s(),p(`li`,{key:t},[u(`div`,Pt,[u(`p`,Ft,c(e.step),1),e.command?(s(),p(`div`,It,[u(`code`,Lt,c(e.command),1),u(`button`,{class:h([`cpy`,{ok:a(K)===`cmd-${t}`}]),onClick:n=>q(e.command??``,`cmd-${t}`)},[l(i,{name:a(K)===`cmd-${t}`?`i-lucide-check`:`i-lucide-copy`,class:`cpy-ic`},null,8,[`name`]),v(` `+c(a(K)===`cmd-${t}`?`已复制`:`复制`),1)],10,Rt)])):m(``,!0),e.note?(s(),p(`p`,zt,c(e.note),1)):m(``,!0)])]))),128))])])):m(``,!0),u(`section`,Bt,[u(`div`,Vt,[u(`span`,Ht,[l(i,{name:`i-lucide-git-commit-horizontal`,class:`s-svg`})]),r[33]||=u(`h2`,{class:`s-title`},`变更清单`,-1),u(`span`,Ut,c(a(N).length),1),r[34]||=u(`span`,{class:`s-hint`},`故事与任务各自是新增还是状态变更、动过哪些文件`,-1),a(N).length?(s(),p(`button`,{key:0,class:h([`rule-btn s-copy`,{ok:a(K)===`commit`}]),title:`按 Conventional Commits 生成:首行是标题,正文每条变更带编号与名称`,onClick:r[0]||=e=>q(a(P),`commit`)},[l(i,{name:a(K)===`commit`?`i-lucide-check`:`i-lucide-clipboard-copy`,class:`rule-btn-ic`},null,8,[`name`]),v(` `+c(a(K)===`commit`?`已复制`:`复制变更信息`),1)],2)):m(``,!0),!a(b)&&a(N).length?(s(),p(`button`,{key:1,class:`rule-btn s-commit`,title:`把这次交付整份提交进本地仓库:git add -A + git commit,不 push`,onClick:Kr},[l(i,{name:`i-lucide-git-commit-vertical`,class:`rule-btn-ic`}),r[32]||=v(`自动提交 `,-1)])):m(``,!0)]),a(N).length?(s(),p(`div`,Gt,[u(`table`,Kt,[r[36]||=u(`colgroup`,null,[u(`col`,{class:`c-ent`}),u(`col`,{class:`c-act`}),u(`col`),u(`col`,{class:`c-file`})],-1),r[37]||=u(`thead`,null,[u(`tr`,null,[u(`th`,null,`条目`),u(`th`,null,`变更`),u(`th`,null,`变更内容`),u(`th`,null,`涉及文件`)])],-1),u(`tbody`,null,[(s(!0),p(f,null,o(a(N),(e,t)=>(s(),p(`tr`,{key:`${e.kind}-${e.id}-${t}`},[u(`td`,null,[u(`div`,qt,[u(`div`,Jt,[u(`span`,{class:h([`kind`,`kind-${e.kind}`])},c(Nr[e.kind]??e.kind),3),l(ee,{to:`/story/${zr(e)}`,class:`ent-id mono`},{default:oe(()=>[v(c(e.id),1)]),_:2},1032,[`to`])]),e.title?(s(),p(`p`,Yt,c(e.title),1)):m(``,!0)])]),u(`td`,null,[u(`span`,{class:h([`act`,`act-${e.action}`])},c(Mr[e.action]??e.action),3),e.from||e.to?(s(),p(`p`,Xt,[u(`span`,Zt,c(e.from??`—`),1),r[35]||=u(`i`,null,`→`,-1),u(`span`,Qt,c(e.to??`—`),1)])):m(``,!0)]),u(`td`,$t,c(e.note??`—`),1),u(`td`,null,[u(`div`,en,[(s(!0),p(f,null,o(e.files,e=>(s(),p(`span`,{key:e,class:`fchip mono`,title:e},c(e),9,tn))),128)),e.files?.length?m(``,!0):(s(),p(`span`,nn,`—`))])])]))),128))])])])):(s(),p(`p`,Wt,`这次没有涉及任何故事或任务。`))]),u(`div`,rn,[u(`section`,an,[u(`div`,on,[u(`span`,sn,[l(i,{name:`i-lucide-sparkles`,class:`s-svg`})]),r[38]||=u(`h2`,{class:`s-title`},`额外做的事`,-1),u(`span`,cn,c(a(F).length),1)]),u(`div`,ln,[a(F).length?m(``,!0):(s(),p(`p`,un,`没有计划外的改动。`)),(s(!0),p(f,null,o(a(F),(e,t)=>(s(),p(`article`,{key:t,class:`x-item`},[r[39]||=u(`span`,{class:`x-mark`},null,-1),u(`div`,dn,[u(`p`,fn,c(e.title),1),e.detail?(s(),p(`p`,pn,c(e.detail),1)):m(``,!0),e.files?.length?(s(),p(`div`,mn,[(s(!0),p(f,null,o(e.files,e=>(s(),p(`span`,{key:e,class:`fchip mono`,title:e},c(e),9,hn))),128))])):m(``,!0)])]))),128))])]),u(`section`,gn,[u(`div`,_n,[u(`span`,vn,[l(i,{name:`i-lucide-badge-check`,class:`s-svg`})]),r[40]||=u(`h2`,{class:`s-title`},`验证结果`,-1),u(`span`,yn,c(a(U))+`/`+c(a(I).length),1)]),u(`div`,bn,[a(I).length?m(``,!0):(s(),p(`p`,xn,`这次没有留下验证记录。`)),(s(!0),p(f,null,o(a(I),(e,t)=>(s(),p(`div`,{key:t,class:`v-item`},[u(`span`,{class:h([`v-ic`,`v-${e.result}`])},[l(i,{name:Fr[e.result]??`i-lucide-circle`,class:`v-svg`},null,8,[`name`])],2),u(`div`,Sn,[u(`p`,Cn,c(e.what),1),e.detail?(s(),p(`p`,wn,c(e.detail),1)):m(``,!0)]),u(`span`,{class:h([`v-res`,`v-${e.result}`])},c(Pr[e.result]??e.result),3)]))),128))])])]),u(`div`,Tn,[u(`section`,En,[u(`div`,Dn,[u(`span`,On,[l(i,{name:`i-lucide-message-square-more`,class:`s-svg`})]),r[41]||=u(`h2`,{class:`s-title`},`说明`,-1),u(`span`,kn,c(a(z).length),1)]),u(`div`,An,[a(z).length?(s(),p(`ul`,Mn,[(s(!0),p(f,null,o(a(z),(e,t)=>(s(),p(`li`,{key:t},c(e),1))),128))])):(s(),p(`p`,jn,`没有额外说明。`))])]),a(B).length?(s(),p(`section`,Nn,[u(`div`,Pn,[u(`span`,Fn,[l(i,{name:`i-lucide-list-todo`,class:`s-svg`})]),r[42]||=u(`h2`,{class:`s-title`},`还没做的`,-1),u(`span`,In,c(a(B).length),1)]),u(`div`,Ln,[u(`ul`,Rn,[(s(!0),p(f,null,o(a(B),(e,t)=>(s(),p(`li`,{key:t},c(e),1))),128))])])])):m(``,!0)])])):(s(),p(`div`,Te,[u(`span`,Ee,[l(i,{name:`i-lucide-clipboard-list`,class:`em-svg`})]),r[10]||=ce(`<h2 class="em-title" data-v-b54cd3a2>还没有交付记录</h2><p class="em-sub" data-v-b54cd3a2> 每完成一项功能,AI 都要把「改了哪些故事与任务、额外做了什么、验了什么、怎么测」 写进下面这个文件,这一页就会自动排出来。 </p><p class="em-path mono" data-v-b54cd3a2>agile/last-change.json</p><p class="em-note" data-v-b54cd3a2> 每次只保留最近一次(覆盖写,不追加)· 格式见 <span class="mono" data-v-b54cd3a2>.agents/skills/scrum-planning/references/schema.md</span> 第 4 节 </p>`,4)])),(s(),d(se,{to:`body`},[a(w)?(s(),p(`div`,{key:0,class:`lc-hist-mask`,onClick:r[3]||=y(e=>w.value=!1,[`self`])},[u(`div`,zn,[u(`header`,Bn,[u(`div`,Vn,[r[46]||=u(`h3`,{id:`lc-hist-title`,class:`lc-hist-title`},`历史版本`,-1),u(`p`,Hn,[r[43]||=v(` 从 git 里读 `,-1),r[44]||=u(`span`,{class:`mono`},`agile/last-change.json`,-1),r[45]||=v(` 的提交记录 `,-1),a(C).length?(s(),p(f,{key:0},[v(`· 共 `+c(a(C).length)+` 版`,1)],64)):m(``,!0)])]),u(`button`,{class:`lc-hist-x`,"aria-label":`关闭`,onClick:r[1]||=e=>w.value=!1},[l(i,{name:`i-lucide-x`,class:`lc-hist-x-ic`})])]),a(E)?(s(),p(`p`,Un,c(a(E)),1)):a(T)?(s(),p(`div`,Wn,`正在读 git 历史…`)):(s(),p(`div`,Gn,[(s(!0),p(f,null,o(a(C),(e,t)=>(s(),p(`button`,{key:e.hash,class:h([`hist-item`,{on:a(b)?.hash===e.hash}]),disabled:a(D),onClick:t=>Cr(e)},[u(`span`,{class:h([`hist-item-dot`,{live:t===0}])},null,2),u(`span`,qn,[u(`b`,null,c(e.subject||`(没有提交说明)`),1),u(`i`,Jn,c(e.date),1)]),u(`span`,Yn,c(e.short),1)],10,Kn))),128)),a(C).length?m(``,!0):(s(),p(`p`,Xn,` 这个文件还没有提交记录 —— 先 commit 一次,历史里才会出现版本。 `))])),u(`footer`,Zn,[r[47]||=u(`span`,{class:`dim`},`选一个版本即可在页面上只读查看,不会改动文件。`,-1),u(`button`,{class:`hist-close`,onClick:r[2]||=e=>w.value=!1},`关闭`)])])])):m(``,!0)])),(s(),d(se,{to:`body`},[a(J)?(s(),p(`div`,{key:0,class:`lc-hist-mask`,onClick:y($,[`self`])},[u(`div`,Qn,[u(`header`,$n,[r[48]||=u(`div`,{class:`lc-hist-hd-txt`},[u(`h3`,{id:`lc-commit-title`,class:`lc-hist-title`},`提交这次交付`),u(`p`,{class:`lc-hist-sub`},[v(` 将执行 `),u(`span`,{class:`mono`},`git add -A`),v(` + `),u(`span`,{class:`mono`},`git commit`),v(`,只提交到本地,不 push `)])],-1),u(`button`,{class:`lc-hist-x`,"aria-label":`关闭`,disabled:a(Y),onClick:$},[l(i,{name:`i-lucide-x`,class:`lc-hist-x-ic`})],8,er)]),a(Q)?(s(),p(`div`,tr,[u(`span`,nr,[l(i,{name:`i-lucide-check`,class:`cm-done-svg`})]),u(`div`,rr,[u(`p`,ir,[r[49]||=v(`已提交 `,-1),u(`span`,ar,c(a(Q).hash),1)]),u(`p`,or,c(a(Q).subject),1),u(`p`,sr,c(a(Q).files)+` 个文件 · 分支 `+c(a(Q).branch??`分离头指针`),1)])])):(s(),p(`div`,cr,[r[51]||=u(`p`,{class:`micro`},`提交信息`,-1),u(`pre`,lr,c(a(P)),1),u(`p`,ur,[r[50]||=v(` 将提交的文件`,-1),a(Z)?(s(),p(f,{key:0},[v(` · `+c(a(Z).files.length),1)],64)):m(``,!0)]),!a(Z)&&!a(X)?(s(),p(`p`,dr,`正在读 git 状态…`)):a(Z)&&!a(Z).isRepo?(s(),p(`p`,fr,`这个目录不是 git 仓库,没法自动提交。`)):a(Z)?.blocked?(s(),p(`p`,pr,c(a(Z).blocked),1)):a(Z)?.files.length?(s(),p(`ul`,hr,[(s(!0),p(f,null,o(a(Z).files,e=>(s(),p(`li`,{key:e.path,class:`cm-file`},[u(`span`,{class:h([`cm-code`,e.code===`??`?`cm-new`:`cm-mod`])},c(e.code),3),u(`span`,{class:`mono cm-path`,title:e.path},c(e.path),9,gr)]))),128))])):(s(),p(`p`,mr,`没有未提交的改动,不需要提交。`))])),a(X)?(s(),p(`p`,_r,c(a(X)),1)):m(``,!0),u(`footer`,vr,[u(`span`,yr,c(a(Z)?.branch?`当前分支 ${a(Z).branch}`:`提交后工作区应当是干净的`),1),u(`span`,br,[u(`button`,{class:`hist-close`,disabled:a(Y),onClick:$},c(a(Q)?`关闭`:`取消`),9,xr),a(Q)?m(``,!0):(s(),p(`button`,{key:0,class:`cm-go`,disabled:!a(Gr),onClick:qr},c(a(Y)?`提交中…`:`确认提交`),9,Sr))])])])])):m(``,!0)]))],64)}}}),[[`__scopeId`,`data-v-b54cd3a2`]]);export{A 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.DplN301E.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.Birf8F5Z.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};