scrum-skills 0.2.3 → 0.2.5

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 (82) hide show
  1. package/.agents/skills/scrum-planning/references/schema.md +3 -2
  2. package/README.md +17 -8
  3. package/assets/board/200.html +1 -1
  4. package/assets/board/404.html +1 -1
  5. package/assets/board/_nuxt/{C9Eg7sGC.js → -8mcJ5uq.js} +1 -1
  6. package/assets/board/_nuxt/{DA0S9GHd.js → 9qnowzZi.js} +1 -1
  7. package/assets/board/_nuxt/{BQSM1Ln0.js → BPTrRhcw.js} +1 -1
  8. package/assets/board/_nuxt/{B7foC6AH.js → BSov4ehT.js} +1 -1
  9. package/assets/board/_nuxt/{D8NAsEfE.js → Bb3Limos.js} +1 -1
  10. package/assets/board/_nuxt/Bi9Axj3V.js +1 -0
  11. package/assets/board/_nuxt/{C9lP5soO.js → BkjUg7GC.js} +1 -1
  12. package/assets/board/_nuxt/Bu400pfa.js +1 -0
  13. package/assets/board/_nuxt/{DiYBussm.js → BuuAjxsV.js} +1 -1
  14. package/assets/board/_nuxt/{DEBhVwtl.js → C9StZL3D.js} +1 -1
  15. package/assets/board/_nuxt/{B5u1XkK4.js → CBhhj6QT.js} +1 -1
  16. package/assets/board/_nuxt/{ADHYAojV.js → CD0uJuyA.js} +1 -1
  17. package/assets/board/_nuxt/{C3ssq3NT.js → CHZ_IHOa.js} +1 -1
  18. package/assets/board/_nuxt/{DVC07Kf9.js → CUnX_QKi.js} +1 -1
  19. package/assets/board/_nuxt/{BJ0EVa07.js → CdvimHoq.js} +1 -1
  20. package/assets/board/_nuxt/{DhkiugsE.js → ChJuu-Ky.js} +1 -1
  21. package/assets/board/_nuxt/{DwNOEVN_.js → CjRYYbsC.js} +1 -1
  22. package/assets/board/_nuxt/Co0ISufR.js +95 -0
  23. package/assets/board/_nuxt/CuJUHLl8.js +1 -0
  24. package/assets/board/_nuxt/{BKgQBiDB.js → CvFE1CeN.js} +1 -1
  25. package/assets/board/_nuxt/{CAJYxF-h.js → CyAQx5wv.js} +1 -1
  26. package/assets/board/_nuxt/{CviJuCa4.js → D3YCAmfu.js} +1 -1
  27. package/assets/board/_nuxt/{joIhBaO-.js → D8Bpf7sE.js} +1 -1
  28. package/assets/board/_nuxt/DDA06Sqv.js +1 -0
  29. package/assets/board/_nuxt/DFuirznt.js +1 -0
  30. package/assets/board/_nuxt/{4FVXNzN-.js → DG3IySrP.js} +1 -1
  31. package/assets/board/_nuxt/{BXQZAVYz.js → DLkAKotw.js} +1 -1
  32. package/assets/board/_nuxt/DNMF9lr0.js +1 -0
  33. package/assets/board/_nuxt/{DQRn5Z3H.js → DaqxYsbV.js} +1 -1
  34. package/assets/board/_nuxt/{jCMbKsJ3.js → DhhR1iR4.js} +1 -1
  35. package/assets/board/_nuxt/{CL3OrPP7.js → DmKZi-Wo.js} +1 -1
  36. package/assets/board/_nuxt/{DcWIG384.js → DsNkyZPc.js} +1 -1
  37. package/assets/board/_nuxt/{BCXs9rBJ.js → DwcwzwSx.js} +1 -1
  38. package/assets/board/_nuxt/Dzd1U0TD.js +1 -0
  39. package/assets/board/_nuxt/{BuVRe79A.js → HrhQecsY.js} +1 -1
  40. package/assets/board/_nuxt/{Db4IStii.js → KhBLkIKl.js} +1 -1
  41. package/assets/board/_nuxt/{bXQUY80V.js → MTucdeiW.js} +1 -1
  42. package/assets/board/_nuxt/{CZPwmwA5.js → RJtjdZeG.js} +1 -1
  43. package/assets/board/_nuxt/Vo4wMbnS.js +1 -0
  44. package/assets/board/_nuxt/Y5b2rXjB.js +1 -0
  45. package/assets/board/_nuxt/builds/latest.json +1 -1
  46. package/assets/board/_nuxt/builds/meta/a2ba436a-230e-43f9-884e-0a5d37f5ba22.json +1 -0
  47. package/assets/board/_nuxt/{CPfeOlrH.js → d-5IhxZm.js} +1 -1
  48. package/assets/board/_nuxt/entry.CTKz4ouw.css +2 -0
  49. package/assets/board/_nuxt/gRdnZpJw.js +1 -0
  50. package/assets/board/_nuxt/{-_kK9OzO.js → l05SqxhY.js} +1 -1
  51. package/assets/board/_nuxt/milestones.z-UuT44X.css +1 -0
  52. package/assets/board/_nuxt/{GzmVZqnA.js → oIa7syc0.js} +1 -1
  53. package/assets/board/_nuxt/pages.YYGvroeE.css +1 -0
  54. package/assets/board/_nuxt/{BannxgAO.js → qDn8FnYE.js} +1 -1
  55. package/assets/board/_nuxt/uGmbQYdY.js +1 -0
  56. package/assets/board/_nuxt/z9IMa9Iy.js +13 -0
  57. package/assets/board/burndown/index.html +1 -1
  58. package/assets/board/epics/index.html +1 -1
  59. package/assets/board/gantt/index.html +1 -1
  60. package/assets/board/index.html +1 -1
  61. package/assets/board/milestones/index.html +1 -1
  62. package/bin/scrum-skills.mjs +33 -10
  63. package/package.json +1 -1
  64. package/templates/AGENTS.md +1 -1
  65. package/tools/ai.mjs +24 -2
  66. package/tools/projects.mjs +46 -11
  67. package/tools/serve.mjs +1 -1
  68. package/tools/validate.mjs +21 -7
  69. package/assets/board/_nuxt/BpR5gMZX.js +0 -95
  70. package/assets/board/_nuxt/BvaAl29K.js +0 -13
  71. package/assets/board/_nuxt/CDL4GvLz.js +0 -1
  72. package/assets/board/_nuxt/CTOFhZkc.js +0 -1
  73. package/assets/board/_nuxt/CZc2Mypg.js +0 -1
  74. package/assets/board/_nuxt/Cw7Z2eHM.js +0 -1
  75. package/assets/board/_nuxt/DWxQkuvT.js +0 -1
  76. package/assets/board/_nuxt/Dpzighda.js +0 -1
  77. package/assets/board/_nuxt/DttMo5b5.js +0 -1
  78. package/assets/board/_nuxt/FCuSfyjP.js +0 -1
  79. package/assets/board/_nuxt/builds/meta/24603984-d514-4dff-badc-898a1fd5e770.json +0 -1
  80. package/assets/board/_nuxt/entry.ChOvfapw.css +0 -2
  81. package/assets/board/_nuxt/milestones.CVvAMKg4.css +0 -1
  82. package/assets/board/_nuxt/pages.DSSttn9g.css +0 -1
@@ -0,0 +1 @@
1
+ import{D as e,E as t,On as n,Zn as r,_ as i,b as a,bt as o,er as s,g as c,k as l,mt as u,o as d,qt as f,tr as p,un as m,v as h,vn as g,y as _}from"./DZo3dYLJ.js";import{C as v,w as y}from"./51OWHj8c.js";import{t as ee}from"./BJW3UkS7.js";import{t as te}from"./DFuirznt.js";import{t as ne}from"./CjRYYbsC.js";import{E as b,a as x,i as S,n as re,r as ie}from"#entry";var ae={class:`stats`},oe={class:`stat stat-mint`},se={class:`stat-top`},ce={class:`stat-label`},le={class:`stat-pill`},ue={class:`stat-value`},de={class:`stat-sub`},fe={class:`stat-delta`},pe={class:`split`},me={class:`spark`},he=[`title`],ge={class:`stat`},_e={class:`stat-top`},ve={class:`stat-label`},ye={class:`stat-pill`},be={class:`stat-value`},xe={class:`stat-sub`},Se={class:`stat-rows`},Ce={class:`stat-row`},we={class:`v`},Te={class:`stat-row`},Ee={class:`v`},De={class:`stat-row`},Oe={class:`v`},ke={class:`stat-row`},Ae={class:`v`},je={class:`stat-foot`},Me={class:`row`},Ne={class:`bar`},Pe={class:`stat stat-lilac`},Fe={class:`stat-top`},Ie={class:`stat-label`},Le={class:`stat-value`},Re={class:`unit`},ze={class:`stat-sub`},Be={class:`stat-rows`},Ve={class:`stat-row`},He={class:`v`},Ue={class:`stat-row`},We={class:`v`},Ge={class:`stat-row`},Ke={class:`v`},qe={class:`stat-row`},Je={class:`v`},Ye={class:`stat-foot`},Xe={class:`row`},Ze={class:`bar lilac`},Qe={class:`stat stat-ink`},$e={class:`stat-top`},et={class:`stat-label`},tt={class:`stat-value`},nt={class:`stat-rows`},rt={class:`stat-row`},it={class:`v`},at={class:`stat-row`},ot={class:`v`},st={class:`stat-row`},ct={class:`v`},lt={class:`stat-row`},ut={class:`v`},dt={class:`stat-foot`},ft={class:`row`},pt={class:`bar on-dark`},mt={class:`card tb`},ht={class:`tb-l`},gt={class:`tb-r`},_t={class:`mono`},vt={class:`mono`},yt={key:0,class:`card act-error`},bt={class:`act-error-txt`},xt={class:`card board`},St={class:`lanes`},Ct=[`title`,`onClick`],wt={class:`stub-name`},Tt={class:`stub-ct`},Et={class:`stub-pts`},Dt={class:`lane-hd`},Ot={class:`lane-ct`},kt={class:`lane-pts`},At=[`aria-expanded`,`title`,`onClick`],jt={class:`lane-bd`},Mt={class:`sc-id mono`},Nt={class:`sc-c-pts`},Pt=[`title`],Ft={class:`sc-top`},It={class:`sc-id mono`},Lt={class:`dim sc-wsjf`},Rt=[`title`],zt={class:`sc-title`},Bt={class:`sc-meta`},Vt={class:`sc-tags`},Ht={class:`tag tag-ghost`},Ut={key:0,class:`tag tag-neutral mono`},Wt=[`title`],Gt=[`title`],Kt={class:`bar slim sc-bar`},qt={class:`sc-ask`},Jt=[`aria-label`,`onClick`,`onKeydown`],Yt=[`aria-label`,`onClick`,`onKeydown`],Xt=[`aria-label`,`onClick`,`onKeydown`],Zt=[`aria-label`,`onClick`,`onKeydown`],Qt={key:0,class:`lane-empty`},C=`board.foldedLanes.v1`,w=S(l({__name:`index`,setup(l){let{stories:S,epics:w,states:T,progress:E,milestoneOfStory:D,pointsOf:O,milestones:$t,refresh:en,STATE_LABEL:k,STATE_SHORT:tn,STATE_DOT:A,TYPE_LABEL:nn,TYPE_COLOR:rn,TYPE_ICON:an,PRIORITY_COLOR:on,SCOPE_LABEL:sn,wsjf:j,blockedStories:cn}=x(),M=g(`all`),N=g(`all`),P=g(`rank`),ln=c(()=>[{label:`全部史诗`,value:`all`,icon:`i-lucide-layers`},...w.value.map(e=>({label:`${e.id} ${e.title}`,value:e.id,icon:`i-lucide-layer-group`}))]),un=c(()=>[{label:`全部里程碑`,value:`all`,icon:`i-lucide-flag`},...$t.value.map(e=>({label:`${e.id} ${e.title}`,value:e.id,icon:e.kind===`mvp`?`i-lucide-star`:`i-lucide-map-pin`}))]),dn=[{label:`默认顺序`,value:`rank`,icon:`i-lucide-list-ordered`},{label:`按优先级 P0 → P3`,value:`priority`,icon:`i-lucide-alert-circle`},{label:`按 WSJF 价值/点数`,value:`wsjf`,icon:`i-lucide-scale`},{label:`按点数`,value:`points`,icon:`i-lucide-signal`}],fn={P0:0,P1:1,P2:2,P3:3},F=[`done`,`cancelled`],I=[`done`,`cancelled`],L=g((()=>{try{if(typeof localStorage>`u`)return[...I];let e=localStorage.getItem(C);if(!e)return[...I];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>F.includes(e)):[...I]}catch{return[...I]}})()),pn=e=>F.includes(e),R=e=>L.value.includes(e),mn=e=>F.includes(e),z=e=>{if(pn(e)){L.value=R(e)?L.value.filter(t=>t!==e):[...L.value,e];try{localStorage.setItem(C,JSON.stringify(L.value))}catch{}}},B=c(()=>{let e=S.value.filter(e=>!(M.value!==`all`&&e.epicId!==M.value||N.value!==`all`&&!D(e.id).some(e=>e.id===N.value)));return P.value===`priority`?[...e].sort((e,t)=>(fn[e.priority]??9)-(fn[t.priority]??9)||j(t)-j(e)):P.value===`wsjf`?[...e].sort((e,t)=>j(t)-j(e)):P.value===`points`?[...e].sort((e,t)=>t.points-e.points):e}),V=e=>B.value.filter(t=>t.status===e),H=e=>O(V(e).map(e=>e.id)),U=c(()=>{let e=B.value,t=e.filter(e=>e.status===`done`),n=e.filter(e=>e.status===`in-progress`||e.status===`review`),r=e.filter(e=>e.status===`ready`||e.status===`draft`),i=e.filter(e=>e.status===`cancelled`),a=e.filter(e=>e.status!==`cancelled`),o=e.flatMap(e=>e.tasks??[]),s=e=>o.filter(t=>t.status===e).length;return{count:e.length,points:e.reduce((e,t)=>e+t.points,0),liveCount:a.length,livePoints:a.reduce((e,t)=>e+t.points,0),donePoints:t.reduce((e,t)=>e+t.points,0),done:t.length,running:n.length,idle:r.length,cancelled:i.length,cancelledPoints:i.reduce((e,t)=>e+t.points,0),tasks:o.length,tasksDone:s(`done`),taskRed:s(`red`),taskGreen:s(`green`),taskRefactor:s(`refactored`),taskTodo:s(`todo`),bugs:e.filter(e=>e.type===`bug`).length,debt:e.filter(e=>e.type===`debt`).length,scope:e.filter(e=>e.scopeChange).length}}),W=c(()=>U.value.livePoints?Math.round(U.value.donePoints/U.value.livePoints*100):0),hn=c(()=>U.value.liveCount?Math.round(U.value.livePoints/U.value.liveCount*10)/10:0),G=c(()=>U.value.tasks?Math.round(U.value.tasksDone/U.value.tasks*100):0),gn=c(()=>cn.value.length+U.value.bugs),_n=c(()=>Math.max(1,...T.map(e=>V(e).length))),vn=e=>8+Math.round(V(e).length/_n.value*34),K=[`draft`,`ready`,`in-progress`,`review`,`done`],yn=e=>K[K.indexOf(e)+1]??null,bn=e=>K.indexOf(e)>0?K[K.indexOf(e)-1]:null,q=e=>(e.tasks??[]).filter(e=>e.status!==`done`).length,xn=e=>{let t=yn(e.status);return t?!(t===`done`&&q(e)>0):!1},Sn=e=>{let t=yn(e.status);return t?t===`done`&&q(e)?`还有 ${q(e)} 个任务没完成,先做完再收尾`:`推进到「${k[t]}」`:`已经是最后一个状态`},Cn=e=>bn(e.status)!==null,J={content:`bg-[#1b1526]! text-white! ring-0 shadow-lg`},Y=g(``),X=g(``),Z=g(``),Q=g(``);async function $(e,t){if(!X.value&&(t!==`next`||xn(e))&&(t!==`prev`||Cn(e))){X.value=e.id,Q.value=``;try{Y.value||=(await b(`/api/projects`)).token,await b(`/api/agile/story-status`,{method:`POST`,headers:{"x-project-token":Y.value},body:{id:e.id,action:t}}),Z.value=``,await en()}catch(t){Q.value=`${e.id}:${t?.data?.error??t?.message??`改状态失败`}`}finally{X.value=``}}}let wn=c(()=>{if(M.value===`all`)return`全部史诗`;let e=w.value.find(e=>e.id===M.value);return e?e.title.slice(0,6):`全部史诗`}),Tn=e=>D(e).filter(e=>e.kind===`mvp`);return(c,l)=>{let g=ie,b=ne,x=te,S=re,C=ee;return u(),a(`div`,null,[i(`div`,ae,[i(`article`,oe,[e(g,{tone:`mint`}),i(`div`,se,[i(`span`,ce,[e(b,{name:`i-lucide-gauge`,class:`size-3.5`}),l[7]||=t(`看板完成度`,-1)]),i(`span`,le,p(n(wn)),1)]),i(`div`,ue,[t(p(n(W)),1),l[8]||=i(`span`,{class:`unit`},`%`,-1)]),i(`div`,de,[i(`span`,fe,[e(b,{name:`i-lucide-check`,class:`size-3`}),t(p(n(U).donePoints)+` 点`,1)]),t(` 已交付 · 共 `+p(n(U).livePoints)+` 点 `,1)]),i(`div`,pe,[i(`div`,null,[l[9]||=i(`span`,{class:`k`},`完成故事`,-1),i(`b`,null,[t(p(n(U).done),1),i(`small`,null,`/`+p(n(U).liveCount),1)])]),i(`div`,null,[l[11]||=i(`span`,{class:`k`},`剩余点`,-1),i(`b`,null,[t(p(n(U).livePoints-n(U).donePoints),1),l[10]||=i(`small`,null,`点`,-1)])])]),i(`div`,me,[(u(!0),a(d,null,o(n(T),e=>(u(),a(`div`,{key:e,class:`spark-col`,title:`${n(k)[e]}:${V(e).length} 个`},[i(`div`,{class:r([`spark-bar`,{done:e===`done`,cancel:e===`cancelled`}]),style:s({height:vn(e)+`px`})},null,6),i(`span`,null,p(n(tn)[e]),1)],8,he))),128))])]),i(`article`,ge,[e(g,{tone:`green`}),i(`div`,_e,[i(`span`,ve,[e(b,{name:`i-lucide-book-open`,class:`size-3.5`}),l[12]||=t(`故事`,-1)]),i(`span`,ye,p(Math.round(n(hn)))+` 点/个`,1)]),i(`div`,be,[t(p(n(U).count),1),l[13]||=i(`span`,{class:`unit`},`个`,-1)]),i(`div`,xe,`共 `+p(n(U).livePoints)+` 点 · 任务 `+p(n(U).tasks)+` 个`,1),i(`div`,Se,[i(`div`,Ce,[l[14]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#6aa844`}}),t(`已完成`)],-1),i(`span`,we,p(n(U).done),1)]),i(`div`,Te,[l[15]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#3f7fd4`}}),t(`进行中`)],-1),i(`span`,Ee,p(n(U).running),1)]),i(`div`,De,[l[16]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#b6bac1`}}),t(`未开始`)],-1),i(`span`,Oe,p(n(U).idle),1)]),i(`div`,ke,[l[17]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#cf4759`}}),t(`已取消`)],-1),i(`span`,Ae,p(n(U).cancelled)+p(n(U).cancelledPoints?` · ${n(U).cancelledPoints} 点`:``),1)])]),i(`div`,je,[i(`div`,Me,[i(`span`,null,`任务完成 `+p(n(U).tasksDone)+`/`+p(n(U).tasks),1),i(`span`,null,p(n(G))+`%`,1)]),i(`div`,Ne,[i(`i`,{style:s({width:n(G)+`%`})},null,4)])])]),i(`article`,Pe,[e(g,{tone:`lilac`}),i(`div`,Fe,[i(`span`,Ie,[e(b,{name:`i-lucide-list-checks`,class:`size-3.5`}),l[18]||=t(`TDD 任务`,-1)]),l[19]||=i(`span`,{class:`stat-pill`},`红 → 绿 → 重构`,-1)]),i(`div`,Le,[t(p(n(U).tasksDone),1),i(`span`,Re,`/ `+p(n(U).tasks)+` 项`,1)]),i(`div`,ze,`已完成任务占 `+p(n(G))+`%`,1),i(`div`,Be,[i(`div`,Ve,[l[20]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#cf4759`}}),t(`红(测试失败)`)],-1),i(`span`,He,p(n(U).taskRed),1)]),i(`div`,Ue,[l[21]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#6aa844`}}),t(`绿(测试通过)`)],-1),i(`span`,We,p(n(U).taskGreen),1)]),i(`div`,Ge,[l[22]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#6d4ff0`}}),t(`已重构`)],-1),i(`span`,Ke,p(n(U).taskRefactor),1)]),i(`div`,qe,[l[23]||=i(`span`,{class:`k`},[i(`i`,{class:`dot`,style:{background:`#b6bac1`}}),t(`待办`)],-1),i(`span`,Je,p(n(U).taskTodo),1)])]),i(`div`,Ye,[i(`div`,Xe,[i(`span`,null,`已完成 `+p(n(U).tasksDone)+`/`+p(n(U).tasks),1),i(`span`,null,p(n(G))+`%`,1)]),i(`div`,Ze,[i(`i`,{style:s({width:n(G)+`%`})},null,4)])])]),i(`article`,Qe,[e(g,{tone:`ink`}),i(`div`,$e,[i(`span`,et,[e(b,{name:`i-lucide-shield-alert`,class:`size-3.5`}),l[24]||=t(`风险面`,-1)]),l[25]||=i(`span`,{class:`stat-pill`},`需处理`,-1)]),i(`div`,tt,[t(p(n(gn)),1),l[26]||=i(`span`,{class:`unit`},`项`,-1)]),l[32]||=i(`div`,{class:`stat-sub`},`阻塞故事与缺陷合计`,-1),i(`div`,nt,[i(`div`,rt,[l[27]||=i(`span`,{class:`k`},`阻塞故事`,-1),i(`span`,it,p(n(cn).length),1)]),i(`div`,at,[l[28]||=i(`span`,{class:`k`},`缺陷`,-1),i(`span`,ot,p(n(U).bugs),1)]),i(`div`,st,[l[29]||=i(`span`,{class:`k`},`技术债`,-1),i(`span`,ct,p(n(U).debt),1)]),i(`div`,lt,[l[30]||=i(`span`,{class:`k`},`范围变更`,-1),i(`span`,ut,p(n(U).scope),1)])]),i(`div`,dt,[i(`div`,ft,[l[31]||=i(`span`,null,`完成度`,-1),i(`span`,null,p(n(W))+`%`,1)]),i(`div`,pt,[i(`i`,{style:s({width:n(W)+`%`})},null,4)])])])]),i(`div`,mt,[i(`div`,ht,[l[33]||=i(`span`,{class:`lbl`},`筛选`,-1),e(x,{modelValue:n(M),"onUpdate:modelValue":l[0]||=e=>m(M)?M.value=e:null,items:n(ln),icon:`i-lucide-layers`,"aria-label":`按史诗筛选`},null,8,[`modelValue`,`items`]),e(x,{modelValue:n(N),"onUpdate:modelValue":l[1]||=e=>m(N)?N.value=e:null,items:n(un),icon:`i-lucide-flag`,"aria-label":`按里程碑筛选`},null,8,[`modelValue`,`items`]),e(x,{modelValue:n(P),"onUpdate:modelValue":l[2]||=e=>m(P)?P.value=e:null,items:dn,icon:`i-lucide-arrow-up-down`,"aria-label":`排序方式`},null,8,[`modelValue`])]),i(`div`,gt,[i(`span`,_t,p(n(B).length),1),l[34]||=t(` 个故事 `,-1),l[35]||=i(`i`,{class:`sep`},null,-1),i(`span`,vt,p(n(O)(n(B).map(e=>e.id))),1),l[36]||=t(` 点 `,-1)])]),n(Q)?(u(),a(`div`,yt,[e(b,{name:`i-lucide-circle-alert`,class:`size-4`}),i(`span`,bt,p(n(Q)),1),i(`button`,{class:`btn btn-sm`,onClick:l[3]||=e=>Q.value=``},`知道了`)])):_(``,!0),i(`div`,xt,[i(`div`,St,[(u(!0),a(d,null,o(n(T),c=>(u(),a(`section`,{key:c,class:r([`lane`,{folded:R(c)}])},[R(c)?(u(),a(`button`,{key:0,class:`lane-stub`,title:`展开${n(k)[c]}:${V(c).length} 个 · ${H(c)} 点`,onClick:e=>z(c)},[i(`i`,{class:`lane-dot`,style:s({background:n(A)[c]})},null,4),i(`span`,wt,p(n(k)[c]),1),i(`span`,Tt,p(V(c).length),1),i(`span`,Et,p(H(c))+` 点`,1),e(b,{name:`i-lucide-chevrons-right`,class:`stub-ic`})],8,Ct)):(u(),a(d,{key:1},[i(`header`,Dt,[i(`i`,{class:`lane-dot`,style:s({background:n(A)[c]})},null,4),i(`b`,null,p(n(k)[c]),1),i(`span`,Ot,p(V(c).length),1),i(`span`,kt,p(H(c))+` 点`,1),pn(c)?(u(),a(`button`,{key:0,class:`lane-fold`,"aria-expanded":!R(c),title:`收起${n(k)[c]}`,onClick:e=>z(c)},[e(b,{name:`i-lucide-chevron-left`,class:`size-3`})],8,At)):_(``,!0)]),i(`div`,jt,[(u(!0),a(d,null,o(V(c),m=>(u(),h(C,{key:m.id,to:`/story/${m.id}`,class:r([`scard`,{"scard-compact":mn(c)}])},{default:f(()=>[mn(c)?(u(),a(d,{key:0},[i(`span`,Mt,p(m.id),1),i(`span`,Nt,p(m.points)+` 点`,1),i(`span`,{class:`sc-c-title`,title:m.title},p(m.title),9,Pt)],64)):(u(),a(d,{key:1},[i(`div`,Ft,[i(`span`,It,p(m.id),1),i(`span`,{class:r([`tag`,`tag-${n(on)[m.priority]}`])},p(m.priority),3),i(`span`,Lt,`WSJF `+p(n(j)(m)),1),m.blocked?(u(),a(`span`,{key:0,class:`tag tag-error tag-dot`,title:`阻塞中:${m.blocked.reason}(自 ${m.blocked.since})`},`阻塞`,8,Rt)):_(``,!0)]),i(`p`,zt,p(m.title),1),i(`div`,Bt,[i(`span`,null,p(m.points)+` 点`,1),l[37]||=i(`span`,{class:`dim`},`·`,-1),i(`span`,null,`任务 `+p(n(E)(m).done)+`/`+p(n(E)(m).total),1)]),i(`div`,Vt,[i(`span`,{class:r([`tag`,`tag-${n(rn)[m.type]}`])},[e(b,{name:n(an)[m.type],class:`size-3`},null,8,[`name`]),t(p(n(nn)[m.type]),1)],2),i(`span`,Ht,p(m.epicId),1),m.sprintId?(u(),a(`span`,Ut,p(m.sprintId),1)):_(``,!0),(u(!0),a(d,null,o(Tn(m.id),e=>(u(),a(`span`,{key:e.id,class:`tag tag-mint`,title:`${e.id} ${e.title} · ${e.criteria}`},`MVP`,8,Wt))),128)),m.scopeChange?(u(),a(`span`,{key:1,class:`tag tag-info`,title:`${n(sn)[m.scopeChange.kind]}(${m.scopeChange.at}):${m.scopeChange.reason}`},p(n(sn)[m.scopeChange.kind]),9,Gt)):_(``,!0)]),i(`div`,Kt,[i(`i`,{style:s({width:n(E)(m).pct+`%`})},null,4)]),i(`div`,{class:`sc-actions`,style:{backdropFilter:`blur(10px) saturate(125%)`},onMouseleave:l[6]||=e=>Z.value=``},[n(Z)===m.id?(u(),a(d,{key:0},[i(`span`,qt,`取消 `+p(m.id)+`?`,1),i(`span`,{class:`sc-act danger`,role:`button`,tabindex:`0`,"data-act":`cancel-confirm`,"aria-label":`确认取消 ${m.id}`,onClick:y(e=>$(m,`cancel`),[`stop`,`prevent`]),onKeydown:v(y(e=>$(m,`cancel`),[`prevent`]),[`enter`])},`确认`,40,Jt),i(`span`,{class:`sc-act`,role:`button`,tabindex:`0`,"data-act":`cancel-abort`,onClick:l[4]||=y(e=>Z.value=``,[`stop`,`prevent`]),onKeydown:l[5]||=v(y(e=>Z.value=``,[`prevent`]),[`enter`])},`返回`,32)],64)):(u(),a(d,{key:1},[Cn(m)?(u(),h(S,{key:0,text:`退回「${n(k)[bn(m.status)??``]}」`,"delay-duration":150,ui:J},{default:f(()=>[i(`span`,{class:`sc-act`,role:`button`,tabindex:`0`,"data-act":`prev`,"aria-label":`退回 ${m.id}`,onClick:y(e=>$(m,`prev`),[`stop`,`prevent`]),onKeydown:v(y(e=>$(m,`prev`),[`prevent`]),[`enter`])},[e(b,{name:`i-lucide-arrow-left`,class:`size-3.5`})],40,Yt)]),_:2},1032,[`text`])):_(``,!0),e(S,{text:Sn(m),"delay-duration":150,ui:J},{default:f(()=>[i(`span`,{class:r([`sc-act`,{off:!xn(m)}]),role:`button`,tabindex:`0`,"data-act":`next`,"aria-label":`推进 ${m.id}`,onClick:y(e=>$(m,`next`),[`stop`,`prevent`]),onKeydown:v(y(e=>$(m,`next`),[`prevent`]),[`enter`])},[e(b,{name:`i-lucide-arrow-right`,class:`size-3.5`})],42,Xt)]),_:2},1032,[`text`]),e(S,{text:`标记 ${m.id} 已取消`,"delay-duration":150,ui:J},{default:f(()=>[i(`span`,{class:`sc-act danger`,role:`button`,tabindex:`0`,"data-act":`cancel`,"aria-label":`取消 ${m.id}`,onClick:y(e=>Z.value=m.id,[`stop`,`prevent`]),onKeydown:v(y(e=>Z.value=m.id,[`prevent`]),[`enter`])},[e(b,{name:`i-lucide-x`,class:`size-3.5`})],40,Zt)]),_:2},1032,[`text`])],64))],32)],64))]),_:2},1032,[`to`,`class`]))),128)),V(c).length?_(``,!0):(u(),a(`p`,Qt,`暂无故事`))])],64))],2))),128))])])])}}}),[[`__scopeId`,`data-v-1e047e51`]]);export{w as default};
@@ -1 +1 @@
1
- import{D as e,E as t,On as n,T as r,Zn as i,_ as a,b as o,bt as s,er as c,g as l,k as u,mt as d,o as f,qt as p,tr as m,y as h}from"./DZo3dYLJ.js";import{t as ee}from"./BJW3UkS7.js";import{t as te}from"./DwNOEVN_.js";import{a as g,i as _,r as ne}from"#entry";var re={class:`kpis`},ie={class:`kpi tint-lilac`},ae={class:`v`},oe={class:`kpi`},se={class:`v`},ce={class:`kpi`},le={class:`v`},ue={class:`kpi tint-mint`},de={class:`v`},fe={class:`kpi`},pe={class:`v mono`},me={class:`card gantt`},he={class:`ticks`},ge={class:`track`},_e={class:`label`},ve={class:`lane`},ye={class:`grid-lines`},v=[`title`],y={class:`track-hd`},b={class:`tag tag-neutral mono`},x={class:`dim`},S={class:`grow-row`},C={class:`label`},w={class:`tag tag-ghost`},T={class:`lane`},E={class:`grid-lines`},D={class:`label`},O=[`title`],k=[`title`],A={class:`pts mono dim`},j={class:`lane`},M={class:`grid-lines`},N={class:`track last`},P={class:`label`},be={class:`dim pts mono`},xe={class:`tag tag-neutral`},Se={class:`lane`},Ce={class:`grid-lines`},we={class:`extra`},Te={key:0,class:`card`},Ee={class:`card-hd`},De={class:`h2`},Oe={class:`tag tag-neutral`},ke={class:`card-bd`},F={class:`list`},Ae={class:`dep-txt`},je={class:`dep-txt dim`},Me={key:1,class:`card`},Ne={class:`card-hd`},Pe={class:`h2`},Fe={class:`tag tag-error`},Ie={class:`card-bd`},Le={class:`list`},Re={class:`dep-txt`},ze={class:`dim`},I=_(u({__name:`gantt`,setup(u){let{sprints:_,stories:I,milestones:L,storyById:R,actualRange:z,progress:B,addDays:Be,diffDays:V,md:H,now:U,MS_COLOR:Ve,MS_LABEL:He,KIND_LABEL:Ue,KIND_ICON:We,STATE_LABEL:Ge,STATE_DOT:W,dependencyPairs:G,blockedStories:K}=g(),Ke=l(()=>_.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=l(()=>I.value.filter(e=>e.schedule)),qe=l(()=>I.value.filter(e=>!e.schedule)),J=l(()=>[..._.value.map(e=>e.start),...q.value.map(e=>e.schedule.start),...L.value.map(e=>e.due)].sort()[0]??U),Je=l(()=>{let e=[..._.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=l(()=>Math.max(1,V(J.value,Je.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=l(()=>{let e=Y.value>90?14:Y.value>45?7:4,t=[];for(let n=0;n<=Y.value;n+=e)t.push({date:Be(J.value,n),x:n/Y.value*100});return t}),$=l(()=>X(U));return(l,u)=>{let g=ne,z=te,B=ee;return d(),o(`div`,null,[a(`div`,re,[a(`div`,ie,[e(g,{tone:`lilac`,size:`sm`}),u[1]||=a(`p`,{class:`k`},`迭代窗口`,-1),a(`p`,ae,[t(m(n(_).length),1),u[0]||=a(`small`,null,`个`,-1)])]),a(`div`,oe,[u[3]||=a(`p`,{class:`k`},`里程碑`,-1),a(`p`,se,[t(m(n(L).length),1),u[2]||=a(`small`,null,`个`,-1)])]),a(`div`,ce,[u[4]||=a(`p`,{class:`k`},`已排期故事`,-1),a(`p`,le,[t(m(n(q).length),1),a(`small`,null,`/ `+m(n(I).length),1)])]),a(`div`,ue,[e(g,{tone:`mint`,size:`sm`}),u[6]||=a(`p`,{class:`k`},`时间跨度`,-1),a(`p`,de,[t(m(n(Y)),1),u[5]||=a(`small`,null,`天`,-1)])]),a(`div`,fe,[u[7]||=a(`p`,{class:`k`},`今天`,-1),a(`p`,pe,m(n(U)),1)])]),a(`div`,me,[u[11]||=r(`<div class="gantt-hd" data-v-db59b624><h2 class="h2" data-v-db59b624>时间轴</h2><div class="legend" data-v-db59b624><span class="lg" data-v-db59b624><i class="sw plan" data-v-db59b624></i>计划</span><span class="lg" data-v-db59b624><i class="sw real" data-v-db59b624></i>实际</span><span class="lg" data-v-db59b624><i class="sw ms" data-v-db59b624></i>里程碑</span><span class="lg" data-v-db59b624><i class="sw mvp" data-v-db59b624></i>MVP 节点</span><span class="lg" data-v-db59b624><i class="sw today" data-v-db59b624></i>今天</span></div></div>`,1),a(`div`,he,[(d(!0),o(f,null,s(n(Q),e=>(d(),o(`div`,{key:e.date,class:`tick`,style:c({left:e.x+`%`})},[a(`span`,null,m(n(H)(e.date)),1)],4))),128)),a(`div`,{class:`today-line`,style:c({left:n($)+`%`})},null,4),a(`div`,{class:`today-flag`,style:c({left:n($)+`%`})},`今天 `+m(n(H)(n(U))),5)]),a(`section`,ge,[u[8]||=a(`header`,{class:`track-hd`},`里程碑`,-1),(d(!0),o(f,null,s(n(L),r=>(d(),o(`div`,{key:r.id,class:`grow-row`},[a(`div`,_e,[a(`span`,{class:i([`tag`,r.kind===`mvp`?`tag-mint`:`tag-primary`])},[e(z,{name:n(We)[r.kind],class:`size-3`},null,8,[`name`]),t(m(n(Ue)[r.kind]),1)],2),e(B,{to:`/milestones`,class:`lbl-txt`},{default:p(()=>[t(m(r.title),1)]),_:2},1024),a(`span`,{class:i([`tag`,`tag-${n(Ve)[r.status]}`])},m(n(He)[r.status]),3)]),a(`div`,ve,[a(`div`,ye,[(d(!0),o(f,null,s(n(Q),e=>(d(),o(`span`,{key:e.date,style:c({left:e.x+`%`})},null,4))),128))]),a(`span`,{class:i([`diamond`,{mvp:r.kind===`mvp`}]),style:c({left:X(r.due)+`%`}),title:`${r.id} · ${r.due} · ${r.criteria}`},null,14,v)])]))),128))]),(d(!0),o(f,null,s(n(Ke),r=>(d(),o(`section`,{key:r.id,class:`track`},[a(`header`,y,[a(`span`,b,m(r.id),1),t(` `+m(r.name)+` `,1),a(`span`,x,m(n(H)(r.start))+` ~ `+m(n(H)(r.end)),1)]),a(`div`,S,[a(`div`,C,[a(`span`,w,[e(z,{name:`i-lucide-calendar-range`,class:`size-3`}),u[9]||=t(`迭代窗口`,-1)])]),a(`div`,T,[a(`div`,E,[(d(!0),o(f,null,s(n(Q),e=>(d(),o(`span`,{key:e.date,style:c({left:e.x+`%`})},null,4))),128))]),a(`div`,{class:`band`,style:c(Z(r.start,r.end))},null,4)])]),(d(!0),o(f,null,s(r.rows,r=>(d(),o(`div`,{key:r.id,class:`grow-row`},[a(`div`,D,[a(`i`,{class:`sdot`,style:c({background:n(W)[r.status]})},null,4),e(B,{to:`/story/${r.id}`,class:`lbl-txt`},{default:p(()=>[t(m(r.title),1)]),_:2},1032,[`to`]),r.dependsOn?.length?(d(),o(`span`,{key:0,class:`tag tag-secondary`,title:`依赖:${r.dependsOn.join(`、`)}`},m(r.dependsOn.length),9,O)):h(``,!0),r.blocked?(d(),o(`span`,{key:1,class:`tag tag-error`,title:`阻塞:${r.blocked.reason}(自 ${r.blocked.since})`},`!`,8,k)):h(``,!0),a(`span`,A,m(r.points)+` 点 · `+m(r.prog.done)+`/`+m(r.prog.total),1)]),a(`div`,j,[a(`div`,M,[(d(!0),o(f,null,s(n(Q),e=>(d(),o(`span`,{key:e.date,style:c({left:e.x+`%`})},null,4))),128))]),r.schedule?(d(),o(`div`,{key:0,class:`plan`,style:c(Z(r.schedule.start,r.schedule.end))},null,4)):h(``,!0),r.actual?(d(),o(`div`,{key:1,class:`real`,style:c(Z(r.actual.start,r.actual.end))},null,4)):h(``,!0)])]))),128))]))),128)),a(`section`,N,[u[10]||=a(`header`,{class:`track-hd`},`未排期(backlog)`,-1),(d(!0),o(f,null,s(n(qe),r=>(d(),o(`div`,{key:r.id,class:`grow-row`},[a(`div`,P,[a(`i`,{class:`sdot`,style:c({background:n(W)[r.status]})},null,4),e(B,{to:`/story/${r.id}`,class:`lbl-txt`},{default:p(()=>[t(m(r.title),1)]),_:2},1032,[`to`]),a(`span`,be,m(r.points)+` 点`,1),a(`span`,xe,m(n(Ge)[r.status]),1)]),a(`div`,Se,[a(`div`,Ce,[(d(!0),o(f,null,s(n(Q),e=>(d(),o(`span`,{key:e.date,style:c({left:e.x+`%`})},null,4))),128))])])]))),128))])]),a(`div`,we,[n(G).length?(d(),o(`div`,Te,[a(`div`,Ee,[a(`h2`,De,[e(z,{name:`i-lucide-git-branch`,class:`size-3.5`}),u[12]||=t(`依赖链`,-1)]),a(`span`,Oe,m(n(G).length),1)]),a(`div`,ke,[a(`ul`,F,[(d(!0),o(f,null,s(n(G),r=>(d(),o(`li`,{key:`${r.from}-${r.to}`},[e(B,{to:`/story/${r.to}`,class:`mono link`},{default:p(()=>[t(m(r.to),1)]),_:2},1032,[`to`]),a(`span`,Ae,m(n(R).get(r.to)?.title),1),e(z,{name:`i-lucide-arrow-left`,class:`size-3 dim`}),u[13]||=a(`span`,{class:`dim`},`依赖`,-1),e(B,{to:`/story/${r.from}`,class:`mono link`},{default:p(()=>[t(m(r.from),1)]),_:2},1032,[`to`]),a(`span`,je,m(n(R).get(r.from)?.title),1)]))),128))])])])):h(``,!0),n(K).length?(d(),o(`div`,Me,[a(`div`,Ne,[a(`h2`,Pe,[e(z,{name:`i-lucide-octagon-alert`,class:`size-3.5`}),u[14]||=t(`阻塞中`,-1)]),a(`span`,Fe,m(n(K).length),1)]),a(`div`,Ie,[a(`ul`,Le,[(d(!0),o(f,null,s(n(K),n=>(d(),o(`li`,{key:n.id},[u[15]||=a(`span`,{class:`tag tag-error tag-dot`},`阻塞`,-1),e(B,{to:`/story/${n.id}`,class:`mono link`},{default:p(()=>[t(m(n.id),1)]),_:2},1032,[`to`]),a(`span`,Re,m(n.title),1),a(`span`,ze,`· `+m(n.blocked.reason)+`(自 `+m(n.blocked.since)+`)`,1)]))),128))])])])):h(``,!0)])])}}}),[[`__scopeId`,`data-v-db59b624`]]);export{I as default};
1
+ import{D as e,E as t,On as n,T as r,Zn as i,_ as a,b as o,bt as s,er as c,g as l,k as u,mt as d,o as f,qt as p,tr as m,y as h}from"./DZo3dYLJ.js";import{t as ee}from"./BJW3UkS7.js";import{t as te}from"./CjRYYbsC.js";import{a as g,i as _,r as ne}from"#entry";var re={class:`kpis`},ie={class:`kpi tint-lilac`},ae={class:`v`},oe={class:`kpi`},se={class:`v`},ce={class:`kpi`},le={class:`v`},ue={class:`kpi tint-mint`},de={class:`v`},fe={class:`kpi`},pe={class:`v mono`},me={class:`card gantt`},he={class:`ticks`},ge={class:`track`},_e={class:`label`},ve={class:`lane`},ye={class:`grid-lines`},v=[`title`],y={class:`track-hd`},b={class:`tag tag-neutral mono`},x={class:`dim`},S={class:`grow-row`},C={class:`label`},w={class:`tag tag-ghost`},T={class:`lane`},E={class:`grid-lines`},D={class:`label`},O=[`title`],k=[`title`],A={class:`pts mono dim`},j={class:`lane`},M={class:`grid-lines`},N={class:`track last`},P={class:`label`},be={class:`dim pts mono`},xe={class:`tag tag-neutral`},Se={class:`lane`},Ce={class:`grid-lines`},we={class:`extra`},Te={key:0,class:`card`},Ee={class:`card-hd`},De={class:`h2`},Oe={class:`tag tag-neutral`},ke={class:`card-bd`},F={class:`list`},Ae={class:`dep-txt`},je={class:`dep-txt dim`},Me={key:1,class:`card`},Ne={class:`card-hd`},Pe={class:`h2`},Fe={class:`tag tag-error`},Ie={class:`card-bd`},Le={class:`list`},Re={class:`dep-txt`},ze={class:`dim`},I=_(u({__name:`gantt`,setup(u){let{sprints:_,stories:I,milestones:L,storyById:R,actualRange:z,progress:B,addDays:Be,diffDays:V,md:H,now:U,MS_COLOR:Ve,MS_LABEL:He,KIND_LABEL:Ue,KIND_ICON:We,STATE_LABEL:Ge,STATE_DOT:W,dependencyPairs:G,blockedStories:K}=g(),Ke=l(()=>_.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=l(()=>I.value.filter(e=>e.schedule)),qe=l(()=>I.value.filter(e=>!e.schedule)),J=l(()=>[..._.value.map(e=>e.start),...q.value.map(e=>e.schedule.start),...L.value.map(e=>e.due)].sort()[0]??U),Je=l(()=>{let e=[..._.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=l(()=>Math.max(1,V(J.value,Je.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=l(()=>{let e=Y.value>90?14:Y.value>45?7:4,t=[];for(let n=0;n<=Y.value;n+=e)t.push({date:Be(J.value,n),x:n/Y.value*100});return t}),$=l(()=>X(U));return(l,u)=>{let g=ne,z=te,B=ee;return d(),o(`div`,null,[a(`div`,re,[a(`div`,ie,[e(g,{tone:`lilac`,size:`sm`}),u[1]||=a(`p`,{class:`k`},`迭代窗口`,-1),a(`p`,ae,[t(m(n(_).length),1),u[0]||=a(`small`,null,`个`,-1)])]),a(`div`,oe,[u[3]||=a(`p`,{class:`k`},`里程碑`,-1),a(`p`,se,[t(m(n(L).length),1),u[2]||=a(`small`,null,`个`,-1)])]),a(`div`,ce,[u[4]||=a(`p`,{class:`k`},`已排期故事`,-1),a(`p`,le,[t(m(n(q).length),1),a(`small`,null,`/ `+m(n(I).length),1)])]),a(`div`,ue,[e(g,{tone:`mint`,size:`sm`}),u[6]||=a(`p`,{class:`k`},`时间跨度`,-1),a(`p`,de,[t(m(n(Y)),1),u[5]||=a(`small`,null,`天`,-1)])]),a(`div`,fe,[u[7]||=a(`p`,{class:`k`},`今天`,-1),a(`p`,pe,m(n(U)),1)])]),a(`div`,me,[u[11]||=r(`<div class="gantt-hd" data-v-db59b624><h2 class="h2" data-v-db59b624>时间轴</h2><div class="legend" data-v-db59b624><span class="lg" data-v-db59b624><i class="sw plan" data-v-db59b624></i>计划</span><span class="lg" data-v-db59b624><i class="sw real" data-v-db59b624></i>实际</span><span class="lg" data-v-db59b624><i class="sw ms" data-v-db59b624></i>里程碑</span><span class="lg" data-v-db59b624><i class="sw mvp" data-v-db59b624></i>MVP 节点</span><span class="lg" data-v-db59b624><i class="sw today" data-v-db59b624></i>今天</span></div></div>`,1),a(`div`,he,[(d(!0),o(f,null,s(n(Q),e=>(d(),o(`div`,{key:e.date,class:`tick`,style:c({left:e.x+`%`})},[a(`span`,null,m(n(H)(e.date)),1)],4))),128)),a(`div`,{class:`today-line`,style:c({left:n($)+`%`})},null,4),a(`div`,{class:`today-flag`,style:c({left:n($)+`%`})},`今天 `+m(n(H)(n(U))),5)]),a(`section`,ge,[u[8]||=a(`header`,{class:`track-hd`},`里程碑`,-1),(d(!0),o(f,null,s(n(L),r=>(d(),o(`div`,{key:r.id,class:`grow-row`},[a(`div`,_e,[a(`span`,{class:i([`tag`,r.kind===`mvp`?`tag-mint`:`tag-primary`])},[e(z,{name:n(We)[r.kind],class:`size-3`},null,8,[`name`]),t(m(n(Ue)[r.kind]),1)],2),e(B,{to:`/milestones`,class:`lbl-txt`},{default:p(()=>[t(m(r.title),1)]),_:2},1024),a(`span`,{class:i([`tag`,`tag-${n(Ve)[r.status]}`])},m(n(He)[r.status]),3)]),a(`div`,ve,[a(`div`,ye,[(d(!0),o(f,null,s(n(Q),e=>(d(),o(`span`,{key:e.date,style:c({left:e.x+`%`})},null,4))),128))]),a(`span`,{class:i([`diamond`,{mvp:r.kind===`mvp`}]),style:c({left:X(r.due)+`%`}),title:`${r.id} · ${r.due} · ${r.criteria}`},null,14,v)])]))),128))]),(d(!0),o(f,null,s(n(Ke),r=>(d(),o(`section`,{key:r.id,class:`track`},[a(`header`,y,[a(`span`,b,m(r.id),1),t(` `+m(r.name)+` `,1),a(`span`,x,m(n(H)(r.start))+` ~ `+m(n(H)(r.end)),1)]),a(`div`,S,[a(`div`,C,[a(`span`,w,[e(z,{name:`i-lucide-calendar-range`,class:`size-3`}),u[9]||=t(`迭代窗口`,-1)])]),a(`div`,T,[a(`div`,E,[(d(!0),o(f,null,s(n(Q),e=>(d(),o(`span`,{key:e.date,style:c({left:e.x+`%`})},null,4))),128))]),a(`div`,{class:`band`,style:c(Z(r.start,r.end))},null,4)])]),(d(!0),o(f,null,s(r.rows,r=>(d(),o(`div`,{key:r.id,class:`grow-row`},[a(`div`,D,[a(`i`,{class:`sdot`,style:c({background:n(W)[r.status]})},null,4),e(B,{to:`/story/${r.id}`,class:`lbl-txt`},{default:p(()=>[t(m(r.title),1)]),_:2},1032,[`to`]),r.dependsOn?.length?(d(),o(`span`,{key:0,class:`tag tag-secondary`,title:`依赖:${r.dependsOn.join(`、`)}`},m(r.dependsOn.length),9,O)):h(``,!0),r.blocked?(d(),o(`span`,{key:1,class:`tag tag-error`,title:`阻塞:${r.blocked.reason}(自 ${r.blocked.since})`},`!`,8,k)):h(``,!0),a(`span`,A,m(r.points)+` 点 · `+m(r.prog.done)+`/`+m(r.prog.total),1)]),a(`div`,j,[a(`div`,M,[(d(!0),o(f,null,s(n(Q),e=>(d(),o(`span`,{key:e.date,style:c({left:e.x+`%`})},null,4))),128))]),r.schedule?(d(),o(`div`,{key:0,class:`plan`,style:c(Z(r.schedule.start,r.schedule.end))},null,4)):h(``,!0),r.actual?(d(),o(`div`,{key:1,class:`real`,style:c(Z(r.actual.start,r.actual.end))},null,4)):h(``,!0)])]))),128))]))),128)),a(`section`,N,[u[10]||=a(`header`,{class:`track-hd`},`未排期(backlog)`,-1),(d(!0),o(f,null,s(n(qe),r=>(d(),o(`div`,{key:r.id,class:`grow-row`},[a(`div`,P,[a(`i`,{class:`sdot`,style:c({background:n(W)[r.status]})},null,4),e(B,{to:`/story/${r.id}`,class:`lbl-txt`},{default:p(()=>[t(m(r.title),1)]),_:2},1032,[`to`]),a(`span`,be,m(r.points)+` 点`,1),a(`span`,xe,m(n(Ge)[r.status]),1)]),a(`div`,Se,[a(`div`,Ce,[(d(!0),o(f,null,s(n(Q),e=>(d(),o(`span`,{key:e.date,style:c({left:e.x+`%`})},null,4))),128))])])]))),128))])]),a(`div`,we,[n(G).length?(d(),o(`div`,Te,[a(`div`,Ee,[a(`h2`,De,[e(z,{name:`i-lucide-git-branch`,class:`size-3.5`}),u[12]||=t(`依赖链`,-1)]),a(`span`,Oe,m(n(G).length),1)]),a(`div`,ke,[a(`ul`,F,[(d(!0),o(f,null,s(n(G),r=>(d(),o(`li`,{key:`${r.from}-${r.to}`},[e(B,{to:`/story/${r.to}`,class:`mono link`},{default:p(()=>[t(m(r.to),1)]),_:2},1032,[`to`]),a(`span`,Ae,m(n(R).get(r.to)?.title),1),e(z,{name:`i-lucide-arrow-left`,class:`size-3 dim`}),u[13]||=a(`span`,{class:`dim`},`依赖`,-1),e(B,{to:`/story/${r.from}`,class:`mono link`},{default:p(()=>[t(m(r.from),1)]),_:2},1032,[`to`]),a(`span`,je,m(n(R).get(r.from)?.title),1)]))),128))])])])):h(``,!0),n(K).length?(d(),o(`div`,Me,[a(`div`,Ne,[a(`h2`,Pe,[e(z,{name:`i-lucide-octagon-alert`,class:`size-3.5`}),u[14]||=t(`阻塞中`,-1)]),a(`span`,Fe,m(n(K).length),1)]),a(`div`,Ie,[a(`ul`,Le,[(d(!0),o(f,null,s(n(K),n=>(d(),o(`li`,{key:n.id},[u[15]||=a(`span`,{class:`tag tag-error tag-dot`},`阻塞`,-1),e(B,{to:`/story/${n.id}`,class:`mono link`},{default:p(()=>[t(m(n.id),1)]),_:2},1032,[`to`]),a(`span`,Re,m(n.title),1),a(`span`,ze,`· `+m(n.blocked.reason)+`(自 `+m(n.blocked.since)+`)`,1)]))),128))])])])):h(``,!0)])])}}}),[[`__scopeId`,`data-v-db59b624`]]);export{I as default};
@@ -0,0 +1 @@
1
+ .tl-wrap[data-v-fb35a72e]{border-radius:var(--r-xl);overflow:hidden}.tl-hd[data-v-fb35a72e]{padding:12px 16px}.tip[data-v-fb35a72e]{font-size:11px}.legend[data-v-fb35a72e]{color:var(--ink-3);flex-wrap:wrap;gap:11px;margin-left:auto;font-size:10.5px;display:flex}.legend[data-v-fb35a72e],.lg[data-v-fb35a72e]{align-items:center}.lg[data-v-fb35a72e]{gap:4px;display:inline-flex}.sw[data-v-fb35a72e]{border:1px solid var(--line-2);border-radius:4px;width:11px;height:11px}.sw.mint[data-v-fb35a72e]{background:var(--grad-mint);border-color:var(--mint-line)}.sw.lilac[data-v-fb35a72e]{background:var(--grad-lilac);border-color:#dbcdfb}.sw.white[data-v-fb35a72e]{background:#fff}.dot[data-v-fb35a72e]{border-radius:999px;width:7px;height:7px}.dot.ok[data-v-fb35a72e]{background:#6aa844}.dot.risk[data-v-fb35a72e]{background:#e0a33a}.dot.plan[data-v-fb35a72e]{background:#fff;border:1.5px solid #c9c8c2}.sep[data-v-fb35a72e]{background:var(--line-2);width:1px;height:11px}.timeline[data-v-fb35a72e]{padding:14px 16px 18px}.tl-item[data-v-fb35a72e]{grid-template-columns:56px 26px minmax(0,1fr);align-items:start;display:grid}.when[data-v-fb35a72e]{text-align:right;padding:13px 10px 0 0}.when-date[data-v-fb35a72e]{letter-spacing:-.01em;color:var(--ink);font-size:12.2px;font-weight:660}.when-year[data-v-fb35a72e]{color:var(--ink-4);font-size:9.6px}.axis[data-v-fb35a72e]{justify-content:center;align-self:stretch;align-items:flex-start;padding-top:15px;display:flex;position:relative}.axis[data-v-fb35a72e]:before{content:"";background:#d8d5cb;width:2px;margin-left:-1px;position:absolute;top:21px;bottom:-12px;left:50%}.tl-item:last-child .axis[data-v-fb35a72e]:before{display:none}.dot-lg[data-v-fb35a72e]{z-index:1;color:#fff;background:#c9c8c2;border:2px solid #fff;border-radius:999px;place-items:center;width:13px;height:13px;display:grid;position:relative;box-shadow:0 0 0 1.5px #dedcd5}.dot-lg.ok[data-v-fb35a72e]{background:#6aa844;box-shadow:0 0 0 3px #6aa84429}.dot-lg.risk[data-v-fb35a72e]{background:#e0a33a;box-shadow:0 0 0 3px #e0a33a2e}.dot-lg.plan[data-v-fb35a72e]{background:#fff;box-shadow:0 0 0 1.5px #d6d4cd}.dot-lg.miss[data-v-fb35a72e]{background:var(--rose);box-shadow:0 0 0 3px #cf475929}.node[data-v-fb35a72e]{border-radius:var(--r-lg);border:1px solid var(--line);box-shadow:var(--shadow-1);background:#fff;margin-bottom:10px;padding:13px 15px 12px;transition:transform .16s,box-shadow .16s,border-color .16s}.node[data-v-fb35a72e]:hover{transform:translateY(-1px);box-shadow:0 14px 30px -20px #17181b59}.node-mint[data-v-fb35a72e]{border-color:var(--mint-line);background:radial-gradient(115% 150% at 0 0,#ffffffe6,#fff0 46%),radial-gradient(95% 130% at 104% 108%,#b8de76f2,#b8de7600 62%),linear-gradient(150deg,#edfcd7,#d7f3a8)}.node-lilac[data-v-fb35a72e]{background:radial-gradient(115% 150% at 0 0,#ffffffeb,#fff0 46%),radial-gradient(95% 130% at 104% 108%,#c6b2faf2,#c6b2fa00 62%),linear-gradient(150deg,#f5f0ff,#e0d3fc);border-color:#dbcdfb}.node-ink[data-v-fb35a72e]{background:radial-gradient(120% 160% at 100% 0,#f5f1ff,#f5f1ff00 52%),linear-gradient(150deg,#fff,#fbfaf6)}.node-top[data-v-fb35a72e]{flex-wrap:wrap;align-items:center;gap:5px;margin-bottom:7px;display:flex}.days[data-v-fb35a72e]{color:var(--ink-2);white-space:nowrap;background:#ffffffc7;border:1px solid #17181b12;border-radius:999px;margin-left:auto;padding:2px 8px;font-size:10.4px;font-weight:650}.days.soon[data-v-fb35a72e]{color:#8d6210;background:#fdf1d7;border-color:#f2dfae}.days.over[data-v-fb35a72e]{color:#a5382f;background:#fdeae7;border-color:#f6d2cb}.node-title[data-v-fb35a72e]{letter-spacing:-.015em;align-items:center;gap:6px;font-size:14.6px;font-weight:660;line-height:1.35;display:flex}.criteria[data-v-fb35a72e]{margin-top:5px;font-size:12px;line-height:1.55}.criteria[data-v-fb35a72e],.nums[data-v-fb35a72e]{color:var(--ink-2)}.nums[data-v-fb35a72e]{align-items:center;gap:5px;margin:10px 0 5px;font-size:11.4px;display:flex}.mpct[data-v-fb35a72e],.nums b[data-v-fb35a72e]{font-weight:660}.mpct[data-v-fb35a72e]{color:var(--ink);margin-left:auto}.bar.mint[data-v-fb35a72e]{background:#46521f24}.mss[data-v-fb35a72e]{border-top:1px dashed #17181b1f;gap:1px;margin:10px 0 0;padding:9px 0 0;list-style:none;display:grid}.srow[data-v-fb35a72e]{border-radius:8px;align-items:center;gap:6px;margin:0 -6px;padding:4px 6px;font-size:11.8px;transition:background .14s;display:flex}.srow[data-v-fb35a72e]:hover{background:#ffffffb8}.srow:hover .st-title[data-v-fb35a72e]{color:var(--violet-ink)}.sdot[data-v-fb35a72e]{border-radius:999px;flex:none;width:6px;height:6px}.st-id[data-v-fb35a72e]{color:var(--ink-4);font-size:10px}.st-title[data-v-fb35a72e]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.st-pts[data-v-fb35a72e],.st-state[data-v-fb35a72e]{white-space:nowrap;font-size:10.2px}.node-lilac .dim[data-v-fb35a72e],.node-mint .dim[data-v-fb35a72e]{color:#2226128c}.tl-today[data-v-fb35a72e]{grid-template-columns:56px 26px minmax(0,1fr);align-items:center;padding:2px 0;display:grid}.today-when[data-v-fb35a72e]{text-align:right;letter-spacing:.04em;color:var(--rose);padding-right:10px;font-size:10.8px;font-weight:700}.today-axis[data-v-fb35a72e]{justify-content:center;align-self:stretch;display:flex;position:relative}.today-axis[data-v-fb35a72e]:before{content:"";background:#cf475947;width:2px;margin-left:-1px;position:absolute;top:0;bottom:0;left:50%}.today-axis i[data-v-fb35a72e]{z-index:1;background:var(--rose);border-radius:999px;align-self:center;width:9px;height:9px;position:relative;box-shadow:0 0 0 3px #cf475929}.today-line[data-v-fb35a72e]{border-top:1px dashed #cf475959;align-self:center;height:0}@media (width<=760px){.tl-item[data-v-fb35a72e],.tl-today[data-v-fb35a72e]{grid-template-columns:44px 22px minmax(0,1fr)}.when-date[data-v-fb35a72e]{font-size:11px}.legend[data-v-fb35a72e],.st-state[data-v-fb35a72e]{display:none}}
@@ -1 +1 @@
1
- import{D as e,Ht as t,On as n,Tn as r,Wt as i,ct as a,er as o,et as s,g as c,it as l,k as u,mt as d,qt as f,v as p,vn as m,xn as h,xt as g,y as _}from"./DZo3dYLJ.js";import{C as v,w as y}from"./51OWHj8c.js";import{t as b}from"./CsyY7ot8.js";import{h as x}from"./Baq-Hrpf.js";import{c as S,f as C,p as w}from"./CZc2Mypg.js";import{t as T}from"./CK9_veoz.js";import{t as E}from"./B43-KCi6.js";import{t as D}from"./CviJuCa4.js";import{t as O}from"./DEBhVwtl.js";import{t as k}from"./BJ0EVa07.js";import{C as A}from"#entry";var[j,M]=x(`TabsRoot`),N=u({__name:`TabsRoot`,props:{defaultValue:{type:null,required:!1},orientation:{type:String,required:!1,default:`horizontal`},dir:{type:String,required:!1},activationMode:{type:String,required:!1,default:`automatic`},modelValue:{type:null,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`update:modelValue`],setup(e,{emit:t}){let i=e,a=t,{orientation:o,unmountOnHide:s,dir:c}=r(i),l=E(c);D();let u=w(i,`modelValue`,a,{defaultValue:i.defaultValue,passive:i.modelValue===void 0}),_=m(),v=h(new Set);return M({modelValue:u,changeModelValue:e=>{u.value=e},orientation:o,dir:l,unmountOnHide:s,activationMode:i.activationMode,baseId:b(void 0,`reka-tabs`),tabsList:_,contentIds:v,registerContent:e=>{v.value=new Set([...v.value,e])},unregisterContent:e=>{let t=new Set(v.value);t.delete(e),v.value=t}}),(t,r)=>(d(),p(n(T),{dir:n(l),"data-orientation":n(o),"as-child":e.asChild,as:e.as},{default:f(()=>[g(t.$slots,`default`,{modelValue:n(u)})]),_:3},8,[`dir`,`data-orientation`,`as-child`,`as`]))}});function P(e,t){return`${e}-trigger-${t}`}function F(e,t){return`${e}-content-${t}`}var I=u({__name:`TabsContent`,props:{value:{type:[String,Number],required:!0},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let r=t,{forwardRef:i}=D(),s=j(),u=c(()=>P(s.baseId,r.value)),h=c(()=>F(s.baseId,r.value)),v=c(()=>r.value===s.modelValue.value),y=m(v.value);return a(()=>{s.registerContent(r.value),requestAnimationFrame(()=>{y.value=!1})}),l(()=>{s.unregisterContent(r.value)}),(r,a)=>(d(),p(n(O),{present:t.forceMount||v.value,"force-mount":``},{default:f(({present:a})=>[e(n(T),{id:h.value,ref:n(i),"as-child":t.asChild,as:t.as,role:`tabpanel`,"data-state":v.value?`active`:`inactive`,"data-orientation":n(s).orientation.value,"aria-labelledby":u.value,hidden:!a,tabindex:`0`,style:o({animationDuration:y.value?`0s`:void 0})},{default:f(()=>[!n(s).unmountOnHide.value||a?g(r.$slots,`default`,{},void 0,void 0,0):_(`v-if`,!0)]),_:2},1032,[`id`,`as-child`,`as`,`data-state`,`data-orientation`,`aria-labelledby`,`hidden`,`style`])]),_:3},8,[`present`]))}}),L=u({__name:`TabsIndicator`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e,{expose:r}){let a=e,o=j();r({updateIndicatorStyle:v}),D();let l=S(),u=m({size:null,thickness:null,position:null}),h=m([]);t(()=>[o.modelValue.value,o?.dir.value],()=>{v()},{immediate:!0,flush:`post`}),i(()=>{h.value=Array.from(o.tabsList.value?.querySelectorAll(`[role="tab"]`)||[])}),C(c(()=>[o.tabsList.value,...h.value]),v);function v(){let e=o.tabsList.value?.querySelector(`[role="tab"][data-state="active"]`);e&&(o.orientation.value===`horizontal`?u.value={size:e.offsetWidth,thickness:e.offsetHeight,position:e.offsetLeft}:u.value={size:e.offsetHeight,thickness:e.offsetWidth,position:e.offsetTop})}return(e,t)=>n(l)&&typeof u.value.size==`number`?(d(),p(n(T),s({key:0},a,{style:{"--reka-tabs-indicator-size":`${u.value.size}px`,"--reka-tabs-indicator-thickness":`${u.value.thickness}px`,"--reka-tabs-indicator-position":`${u.value.position}px`}}),{default:f(()=>[g(e.$slots,`default`)]),_:3},16,[`style`])):_(`v-if`,!0)}}),R=u({__name:`TabsList`,props:{loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let{loop:i}=r(t),{forwardRef:a,currentElement:o}=D(),s=j();return s.tabsList=o,(r,o)=>(d(),p(n(A),{"as-child":``,orientation:n(s).orientation.value,dir:n(s).dir.value,loop:n(i)},{default:f(()=>[e(n(T),{ref:n(a),role:`tablist`,"as-child":t.asChild,as:t.as,"aria-orientation":n(s).orientation.value},{default:f(()=>[g(r.$slots,`default`)]),_:3},8,[`as-child`,`as`,`aria-orientation`])]),_:3},8,[`orientation`,`dir`,`loop`]))}}),z=u({__name:`TabsTrigger`,props:{value:{type:[String,Number],required:!0},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(t){let r=t,{forwardRef:i}=D(),a=j(),o=c(()=>P(a.baseId,r.value)),s=c(()=>a.contentIds.value.has(r.value)?F(a.baseId,r.value):void 0),l=c(()=>r.value===a.modelValue.value);return(r,c)=>(d(),p(n(k),{"as-child":``,focusable:!t.disabled,active:l.value},{default:f(()=>[e(n(T),{id:o.value,ref:n(i),role:`tab`,type:t.as===`button`?`button`:void 0,as:t.as,"as-child":t.asChild,"aria-selected":l.value?`true`:`false`,"aria-controls":s.value,"data-state":l.value?`active`:`inactive`,disabled:t.disabled,"data-disabled":t.disabled?``:void 0,"data-orientation":n(a).orientation.value,onMousedown:c[0]||=y(e=>{e.defaultPrevented||(!t.disabled&&e.ctrlKey===!1?n(a).changeModelValue(t.value):e.preventDefault())},[`left`]),onKeydown:c[1]||=v(e=>{e.defaultPrevented||n(a).changeModelValue(t.value)},[`enter`,`space`]),onFocus:c[2]||=()=>{let e=n(a).activationMode!==`manual`;!l.value&&!t.disabled&&e&&n(a).changeModelValue(t.value)}},{default:f(()=>[g(r.$slots,`default`)]),_:3},8,[`id`,`type`,`as`,`as-child`,`aria-selected`,`aria-controls`,`data-state`,`disabled`,`data-disabled`,`data-orientation`])]),_:3},8,[`focusable`,`active`]))}});export{N as a,I as i,R as n,L as r,z as t};
1
+ import{D as e,Ht as t,On as n,Tn as r,Wt as i,ct as a,er as o,et as s,g as c,it as l,k as u,mt as d,qt as f,v as p,vn as m,xn as h,xt as g,y as _}from"./DZo3dYLJ.js";import{C as v,w as y}from"./51OWHj8c.js";import{t as b}from"./CsyY7ot8.js";import{h as x}from"./Baq-Hrpf.js";import{c as S,f as C,p as w}from"./Vo4wMbnS.js";import{t as T}from"./CK9_veoz.js";import{t as E}from"./B43-KCi6.js";import{t as D}from"./D3YCAmfu.js";import{t as O}from"./C9StZL3D.js";import{t as k}from"./CdvimHoq.js";import{y as A}from"#entry";var[j,M]=x(`TabsRoot`),N=u({__name:`TabsRoot`,props:{defaultValue:{type:null,required:!1},orientation:{type:String,required:!1,default:`horizontal`},dir:{type:String,required:!1},activationMode:{type:String,required:!1,default:`automatic`},modelValue:{type:null,required:!1},unmountOnHide:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`update:modelValue`],setup(e,{emit:t}){let i=e,a=t,{orientation:o,unmountOnHide:s,dir:c}=r(i),l=E(c);D();let u=w(i,`modelValue`,a,{defaultValue:i.defaultValue,passive:i.modelValue===void 0}),_=m(),v=h(new Set);return M({modelValue:u,changeModelValue:e=>{u.value=e},orientation:o,dir:l,unmountOnHide:s,activationMode:i.activationMode,baseId:b(void 0,`reka-tabs`),tabsList:_,contentIds:v,registerContent:e=>{v.value=new Set([...v.value,e])},unregisterContent:e=>{let t=new Set(v.value);t.delete(e),v.value=t}}),(t,r)=>(d(),p(n(T),{dir:n(l),"data-orientation":n(o),"as-child":e.asChild,as:e.as},{default:f(()=>[g(t.$slots,`default`,{modelValue:n(u)})]),_:3},8,[`dir`,`data-orientation`,`as-child`,`as`]))}});function P(e,t){return`${e}-trigger-${t}`}function F(e,t){return`${e}-content-${t}`}var I=u({__name:`TabsContent`,props:{value:{type:[String,Number],required:!0},forceMount:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let r=t,{forwardRef:i}=D(),s=j(),u=c(()=>P(s.baseId,r.value)),h=c(()=>F(s.baseId,r.value)),v=c(()=>r.value===s.modelValue.value),y=m(v.value);return a(()=>{s.registerContent(r.value),requestAnimationFrame(()=>{y.value=!1})}),l(()=>{s.unregisterContent(r.value)}),(r,a)=>(d(),p(n(O),{present:t.forceMount||v.value,"force-mount":``},{default:f(({present:a})=>[e(n(T),{id:h.value,ref:n(i),"as-child":t.asChild,as:t.as,role:`tabpanel`,"data-state":v.value?`active`:`inactive`,"data-orientation":n(s).orientation.value,"aria-labelledby":u.value,hidden:!a,tabindex:`0`,style:o({animationDuration:y.value?`0s`:void 0})},{default:f(()=>[!n(s).unmountOnHide.value||a?g(r.$slots,`default`,{},void 0,void 0,0):_(`v-if`,!0)]),_:2},1032,[`id`,`as-child`,`as`,`data-state`,`data-orientation`,`aria-labelledby`,`hidden`,`style`])]),_:3},8,[`present`]))}}),L=u({__name:`TabsIndicator`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e,{expose:r}){let a=e,o=j();r({updateIndicatorStyle:v}),D();let l=S(),u=m({size:null,thickness:null,position:null}),h=m([]);t(()=>[o.modelValue.value,o?.dir.value],()=>{v()},{immediate:!0,flush:`post`}),i(()=>{h.value=Array.from(o.tabsList.value?.querySelectorAll(`[role="tab"]`)||[])}),C(c(()=>[o.tabsList.value,...h.value]),v);function v(){let e=o.tabsList.value?.querySelector(`[role="tab"][data-state="active"]`);e&&(o.orientation.value===`horizontal`?u.value={size:e.offsetWidth,thickness:e.offsetHeight,position:e.offsetLeft}:u.value={size:e.offsetHeight,thickness:e.offsetWidth,position:e.offsetTop})}return(e,t)=>n(l)&&typeof u.value.size==`number`?(d(),p(n(T),s({key:0},a,{style:{"--reka-tabs-indicator-size":`${u.value.size}px`,"--reka-tabs-indicator-thickness":`${u.value.thickness}px`,"--reka-tabs-indicator-position":`${u.value.position}px`}}),{default:f(()=>[g(e.$slots,`default`)]),_:3},16,[`style`])):_(`v-if`,!0)}}),R=u({__name:`TabsList`,props:{loop:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let{loop:i}=r(t),{forwardRef:a,currentElement:o}=D(),s=j();return s.tabsList=o,(r,o)=>(d(),p(n(A),{"as-child":``,orientation:n(s).orientation.value,dir:n(s).dir.value,loop:n(i)},{default:f(()=>[e(n(T),{ref:n(a),role:`tablist`,"as-child":t.asChild,as:t.as,"aria-orientation":n(s).orientation.value},{default:f(()=>[g(r.$slots,`default`)]),_:3},8,[`as-child`,`as`,`aria-orientation`])]),_:3},8,[`orientation`,`dir`,`loop`]))}}),z=u({__name:`TabsTrigger`,props:{value:{type:[String,Number],required:!0},disabled:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(t){let r=t,{forwardRef:i}=D(),a=j(),o=c(()=>P(a.baseId,r.value)),s=c(()=>a.contentIds.value.has(r.value)?F(a.baseId,r.value):void 0),l=c(()=>r.value===a.modelValue.value);return(r,c)=>(d(),p(n(k),{"as-child":``,focusable:!t.disabled,active:l.value},{default:f(()=>[e(n(T),{id:o.value,ref:n(i),role:`tab`,type:t.as===`button`?`button`:void 0,as:t.as,"as-child":t.asChild,"aria-selected":l.value?`true`:`false`,"aria-controls":s.value,"data-state":l.value?`active`:`inactive`,disabled:t.disabled,"data-disabled":t.disabled?``:void 0,"data-orientation":n(a).orientation.value,onMousedown:c[0]||=y(e=>{e.defaultPrevented||(!t.disabled&&e.ctrlKey===!1?n(a).changeModelValue(t.value):e.preventDefault())},[`left`]),onKeydown:c[1]||=v(e=>{e.defaultPrevented||n(a).changeModelValue(t.value)},[`enter`,`space`]),onFocus:c[2]||=()=>{let e=n(a).activationMode!==`manual`;!l.value&&!t.disabled&&e&&n(a).changeModelValue(t.value)}},{default:f(()=>[g(r.$slots,`default`)]),_:3},8,[`id`,`type`,`as`,`as-child`,`aria-selected`,`aria-controls`,`data-state`,`disabled`,`data-disabled`,`data-orientation`])]),_:3},8,[`focusable`,`active`]))}});export{N as a,I as i,R as n,L as r,z as t};
@@ -0,0 +1 @@
1
+ .split[data-v-1e047e51]{grid-template-columns:1fr 1fr;gap:10px;margin-top:auto;padding-top:12px;display:grid}.split>div[data-v-1e047e51]{gap:1px;min-width:0;display:grid}.split>div+div[data-v-1e047e51]{border-left:1px solid #17181b1a;padding-left:10px}.split .k[data-v-1e047e51]{letter-spacing:.08em;text-transform:uppercase;color:#6b6f78;font-size:9.4px;font-weight:650}.split b[data-v-1e047e51]{letter-spacing:-.025em;color:#2b3312;font-size:14.5px;font-weight:660}.split b small[data-v-1e047e51]{letter-spacing:0;color:#6b6f78;margin-left:1px;font-size:10px;font-weight:600}.dot[data-v-1e047e51]{border-radius:999px;flex:none;width:6px;height:6px;display:inline-block}.tb[data-v-1e047e51]{border-radius:var(--r-md);justify-content:space-between;gap:12px;margin-bottom:12px;padding:10px 12px 10px 16px}.tb[data-v-1e047e51],.tb-l[data-v-1e047e51]{flex-wrap:wrap;align-items:center;display:flex}.tb-l[data-v-1e047e51]{gap:8px}.tb-l[data-v-1e047e51] .skin-select{max-width:212px}.tb-r[data-v-1e047e51]{color:var(--ink-3);align-items:center;gap:6px;font-size:11.6px;display:flex}.tb-r .mono[data-v-1e047e51]{color:var(--ink);font-weight:660}.sep[data-v-1e047e51]{background:var(--line-2);width:1px;height:12px;margin:0 3px}.board[data-v-1e047e51]{border-radius:var(--r-xl);padding:12px}.lanes[data-v-1e047e51]{gap:10px;padding-bottom:2px;display:flex}.lane[data-v-1e047e51]{flex-direction:column;flex:1 1 0;min-width:0;display:flex}.lane.folded[data-v-1e047e51]{flex:0 0 46px}.lane-stub[data-v-1e047e51]{border-radius:var(--r-md);background:var(--sunken-2);border:1px dashed var(--line-2);cursor:pointer;flex-direction:column;flex:1;align-items:center;gap:7px;min-height:120px;padding:11px 4px 9px;transition:background .14s,border-color .14s;display:flex}.lane-stub[data-v-1e047e51]:hover{background:#fff;border-color:#ded4fb}.stub-name[data-v-1e047e51]{writing-mode:vertical-rl;letter-spacing:.12em;color:var(--ink-2);font-size:11.6px;font-weight:650}.stub-ct[data-v-1e047e51]{border:1px solid var(--line);min-width:16px;height:16px;color:var(--ink-3);background:#fff;border-radius:999px;place-items:center;padding:0 4px;font-size:9.6px;font-weight:700;display:grid}.stub-pts[data-v-1e047e51]{writing-mode:vertical-rl;letter-spacing:.06em;font-size:9.6px}.lane-fold[data-v-1e047e51],.stub-ic[data-v-1e047e51],.stub-pts[data-v-1e047e51]{color:var(--ink-4)}.stub-ic[data-v-1e047e51]{width:11px;height:11px}.lane-fold[data-v-1e047e51]{border-radius:6px;place-items:center;width:18px;height:18px;margin-left:2px;transition:background .14s,color .14s;display:grid}.lane-fold[data-v-1e047e51]:hover{color:var(--ink-2);background:#f1f0eb}.lane-hd[data-v-1e047e51]{align-items:center;gap:6px;padding:0 4px 9px;display:flex}.lane-dot[data-v-1e047e51]{border-radius:999px;width:6px;height:6px}.lane-hd b[data-v-1e047e51]{letter-spacing:-.01em;font-size:12.2px;font-weight:650}.lane-ct[data-v-1e047e51]{color:var(--ink-3);background:#f1f0eb;border-radius:999px;padding:0 5px;font-size:10px;font-weight:650}.lane-pts[data-v-1e047e51]{color:var(--ink-4);margin-left:auto;font-size:10.4px}.lane-bd[data-v-1e047e51]{border-radius:var(--r-md);background:var(--sunken-2);border:1px solid #f1f0ec;flex:1;grid-template-columns:minmax(0,1fr);align-content:start;gap:8px;min-height:120px;padding:8px;display:grid}.scard[data-v-1e047e51]{border:1px solid var(--line);background:#fff;border-radius:13px;min-width:0;padding:9px 10px 8px;transition:transform .16s,box-shadow .16s,border-color .16s;display:block;position:relative;box-shadow:0 1px 2px #17181b08}.scard[data-v-1e047e51]:hover{border-color:#ded4fb;transform:translateY(-1.5px);box-shadow:0 12px 24px -16px #6d4ff080}.sc-actions[data-v-1e047e51]{z-index:2;opacity:0;visibility:hidden;background:linear-gradient(#ffffff3d,#ffffff85 54%,#ffffffc7);border-radius:0 0 12px 12px;justify-content:flex-end;align-items:center;gap:2px;height:32px;padding:0 5px;transition:transform .16s,opacity .16s,visibility .16s;display:flex;position:absolute;bottom:0;left:0;right:0;transform:translateY(100%);-webkit-mask-image:linear-gradient(#0000,#000 22%);mask-image:linear-gradient(#0000,#000 22%)}.scard:focus-within .sc-actions[data-v-1e047e51],.scard:hover .sc-actions[data-v-1e047e51]{opacity:1;visibility:visible;transform:translateY(0)}.sc-act[data-v-1e047e51]{min-width:22px;height:22px;color:var(--ink-2);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:7px;place-items:center;padding:0 5px;font-size:10.4px;font-weight:650;transition:background .14s,color .14s;display:grid}.sc-act[data-v-1e047e51]:hover{color:var(--ink);background:#17181b14}.sc-act.danger[data-v-1e047e51]:hover{color:#fff;background:#e5484de6}.sc-act.off[data-v-1e047e51]{opacity:.45;cursor:not-allowed}.sc-act.off[data-v-1e047e51]:hover{color:var(--ink-2);background:0 0}.sc-ask[data-v-1e047e51]{color:var(--ink-2);margin-right:auto;font-size:10.2px;font-weight:640}.act-error[data-v-1e047e51]{border-radius:var(--r-md);background:var(--peach);color:#a5382f;border-color:#f2d3cf;align-items:center;gap:8px;margin-bottom:12px;padding:9px 12px;font-size:11.8px;display:flex}.act-error-txt[data-v-1e047e51]{flex:1;min-width:0}.scard-compact[data-v-1e047e51]{border-radius:10px;flex-wrap:wrap;align-items:center;gap:1px 6px;padding:5px 8px;display:flex}.scard-compact[data-v-1e047e51]:hover{transform:none}.scard-compact .sc-id[data-v-1e047e51]{margin-right:0}.sc-c-title[data-v-1e047e51]{white-space:nowrap;text-overflow:ellipsis;min-width:0;color:var(--ink-2);flex:1 0 100%;font-size:11.4px;font-weight:560;line-height:1.4;overflow:hidden}.sc-c-pts[data-v-1e047e51]{color:var(--ink-4);flex:none;margin-left:auto;font-size:9.6px;font-weight:660}.sc-top[data-v-1e047e51]{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.sc-id[data-v-1e047e51]{color:var(--ink-4);margin-right:2px;font-size:10px}.sc-wsjf[data-v-1e047e51]{white-space:nowrap;margin-left:auto;font-size:9.6px}.sc-title[data-v-1e047e51]{letter-spacing:-.005em;-webkit-line-clamp:3;-webkit-box-orient:vertical;margin:7px 0 5px;font-size:12.5px;font-weight:620;line-height:1.42;display:-webkit-box;overflow:hidden}.sc-meta[data-v-1e047e51]{color:var(--ink-3);margin-bottom:7px;font-size:10.4px}.sc-meta[data-v-1e047e51],.sc-tags[data-v-1e047e51]{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.sc-tags[data-v-1e047e51]{margin-bottom:8px}.sc-bar[data-v-1e047e51]{margin-top:1px}.lane-empty[data-v-1e047e51]{text-align:center;color:var(--ink-4);padding:14px 6px;font-size:10.6px}@media (width<=1180px){.lanes[data-v-1e047e51]{overflow-x:auto}.lane[data-v-1e047e51]{flex:1 0 178px}}
@@ -1 +1 @@
1
- import{D as e,E as t,On as n,T as r,Ut as ee,Yt as te,Zn as i,_ as a,b as o,bt as s,er as ne,g as c,k as l,mt as u,o as d,qt as re,tr as f,un as ie,vn as p,y as m}from"./DZo3dYLJ.js";import{S as ae}from"./51OWHj8c.js";import{t as oe}from"./BJW3UkS7.js";import{t as se}from"./Cw7Z2eHM.js";import{t as ce}from"./DwNOEVN_.js";import{a as h,i as g,r as le}from"#entry";var ue={class:`kpis`},de={class:`kpi tint-lilac`},fe={class:`v`},pe={class:`kpi`},me={class:`v`},he={class:`kpi`},ge={class:`kpi tint-mint`},_e={class:`v`},ve={class:`kpi`},ye={class:`v`},be={key:0,class:`card panel`},xe={class:`panel-hd`},Se={class:`ph-l`},_={class:`sp-name`},v={class:`sub mono`},y={class:`goal`},b={class:`chart-wrap`},x=[`viewBox`],S=[`y1`,`x2`,`y2`],C=[`x`,`y`],w=[`d`],T=[`d`],E=[`points`],D=[`cx`,`cy`],O=[`x1`,`y1`,`x2`,`y2`],k=[`x`,`y`],A=[`x`,`y`],j=[`x1`,`y1`,`x2`,`y2`],Ce=[`cx`,`cy`],we={class:`cells`},Te={class:`cd mono`},Ee={class:`ca`},De={class:`ci dim`},Oe={key:0,class:`scope`},ke={class:`h3`},Ae={class:`tag tag-info`},je={class:`dim`},Me={key:1,class:`callout soft`},Ne={class:`card`},Pe={class:`card-hd`},Fe={class:`tag tag-neutral`},Ie={class:`card-bd`},Le={class:`tbl`},Re=[`onClick`],ze={class:`mono`},Be={class:`mono dim`},Ve={class:`r`},He={class:`r mono`},Ue=980,We=300,M=42,N=g(l({__name:`burndown`,setup(l){let{sprints:g,burndown:N,sprintCommit:P,md:F,now:I,sprintById:L,storyById:Ge,SCOPE_LABEL:R}=h(),z=p(``),Ke=c(()=>[...g.value].reverse().map(e=>({label:`${e.id} · ${e.name}`,value:e.id,icon:`i-lucide-calendar-range`}))),B=c(()=>L.value.get(z.value)??g.value[g.value.length-1]),V=c(()=>B.value?N(B.value):{total:0,days:[]});ee(()=>{z.value&&!L.value.has(z.value)&&(z.value=``),!z.value&&g.value.length&&(z.value=g.value[g.value.length-1].id)});let H=c(()=>V.value.days.length||1),U=c(()=>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(` `),qe=c(()=>{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=c(()=>V.value.days.findIndex(e=>e.date===I)),J=c(()=>V.value.days.find(e=>e.date===I)??V.value.days[V.value.days.length-1]),Y=c(()=>J.value?.actual??0),X=c(()=>J.value?.ideal??0),Z=c(()=>Math.round((Y.value-X.value)*10)/10),Q=c(()=>{let e=B.value;return e?(e.stories??[]).map(e=>Ge.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):[]}),Je=c(()=>new Set(Q.value.map(e=>e.at))),$=c(()=>[...g.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(ee,c)=>{let l=le,p=se,h=ce,g=oe;return u(),o(`div`,null,[a(`div`,ue,[a(`div`,de,[e(l,{tone:`lilac`,size:`sm`}),c[1]||=a(`p`,{class:`k`},`剩余故事点`,-1),a(`p`,fe,[t(f(n(Y)),1),a(`small`,null,`/ `+f(n(V).total),1)])]),a(`div`,pe,[c[3]||=a(`p`,{class:`k`},`理想剩余(今天)`,-1),a(`p`,me,[t(f(n(X)),1),c[2]||=a(`small`,null,`点`,-1)])]),a(`div`,he,[c[5]||=a(`p`,{class:`k`},`偏差`,-1),a(`p`,{class:i([`v`,{bad:n(Z)>0,good:n(Z)<=0}])},[t(f(n(Z)>0?`+`+n(Z):n(Z)),1),c[4]||=a(`small`,null,`点`,-1)],2)]),a(`div`,ge,[e(l,{tone:`mint`,size:`sm`}),c[6]||=a(`p`,{class:`k`},`承诺 / 容量`,-1),a(`p`,_e,[t(f(n(B)?n(P)(n(B)):0),1),a(`small`,null,`/ `+f(n(B)?.capacity??0),1)])]),a(`div`,ve,[c[8]||=a(`p`,{class:`k`},`范围变更`,-1),a(`p`,ye,[t(f(n(Q).length),1),c[7]||=a(`small`,null,`次`,-1)])])]),n(B)?(u(),o(`div`,be,[a(`div`,xe,[a(`div`,Se,[a(`h2`,_,f(n(B).name),1),a(`p`,v,f(n(B).id)+` · `+f(n(F)(n(B).start))+` ~ `+f(n(F)(n(B).end)),1),a(`p`,y,f(n(B).goal),1)]),e(p,{modelValue:n(z),"onUpdate:modelValue":c[0]||=e=>ie(z)?z.value=e:null,items:n(Ke),icon:`i-lucide-calendar-range`,"aria-label":`选择迭代`,class:`bd-select`},null,8,[`modelValue`,`items`])]),a(`div`,b,[c[10]||=r(`<div class="chart-legend" data-v-4ef34f2c><span class="lg" data-v-4ef34f2c><i class="sw actual" data-v-4ef34f2c></i>实际剩余</span><span class="lg" data-v-4ef34f2c><i class="sw ideal" data-v-4ef34f2c></i>理想线</span><span class="lg" data-v-4ef34f2c><i class="sw scope" data-v-4ef34f2c></i>范围变更</span></div>`,1),(u(),o(`svg`,{viewBox:`0 0 ${Ue} ${We}`,class:`chart`,role:`img`},[c[9]||=r(`<defs data-v-4ef34f2c><linearGradient id="bd-line" x1="0" y1="0" x2="1" y2="0" data-v-4ef34f2c><stop offset="0%" stop-color="#8a63f7" data-v-4ef34f2c></stop><stop offset="100%" stop-color="#c3aefb" data-v-4ef34f2c></stop></linearGradient><linearGradient id="bd-area" x1="0" y1="0" x2="0" y2="1" data-v-4ef34f2c><stop offset="0%" stop-color="#8a63f7" stop-opacity="0.16" data-v-4ef34f2c></stop><stop offset="100%" stop-color="#8a63f7" stop-opacity="0" data-v-4ef34f2c></stop></linearGradient></defs>`,1),a(`g`,null,[(u(),o(d,null,s([0,.25,.5,.75,1],e=>a(`line`,{key:`grid`+e,x1:M,y1:G(n(U)*e),x2:938,y2:G(n(U)*e),stroke:`#f1f0ea`,"stroke-width":`1`},null,8,S)),64)),(u(),o(d,null,s([0,.25,.5,.75,1],e=>a(`text`,{key:`gl`+e,x:32,y:G(n(U)*e)+3.5,"text-anchor":`end`,"font-size":`9.5`,fill:`#b0b4ba`},f(Math.round(n(U)*e)),9,C)),64))]),a(`path`,{d:n(qe),fill:`url(#bd-area)`},null,8,w),a(`path`,{d:`M${W(0)},${G(n(U))} L${W(n(H)-1)},${G(0)}`,stroke:`#cdc9d8`,"stroke-width":`1.4`,"stroke-dasharray":`5 5`,fill:`none`},null,8,T),a(`polyline`,{points:K(`actual`),stroke:`url(#bd-line)`,"stroke-width":`2.6`,fill:`none`,"stroke-linejoin":`round`,"stroke-linecap":`round`},null,8,E),(u(!0),o(d,null,s(n(V).days,(e,t)=>(u(),o(`circle`,{key:e.date,cx:W(t),cy:G(e.actual),r:`3`,fill:`#fff`,stroke:`#8a63f7`,"stroke-width":`1.8`},null,8,D))),128)),n(q)>=0?(u(),o(`line`,{key:0,x1:W(n(q)),y1:34,x2:W(n(q)),y2:G(0),stroke:`#cf4759`,"stroke-dasharray":`3 3`,"stroke-width":`1.2`,opacity:`0.7`},null,8,O)):m(``,!0),n(q)>=0?(u(),o(`text`,{key:1,x:W(n(q)),y:28,"text-anchor":`middle`,"font-size":`9.5`,fill:`#a5382f`},`今天`,8,k)):m(``,!0),(u(!0),o(d,null,s(n(V).days,(e,t)=>te((u(),o(`text`,{key:`t`+e.date,x:W(t),y:286,"text-anchor":`middle`,"font-size":`9.5`,fill:`#b0b4ba`},f(n(F)(e.date)),9,A)),[[ae,t%Math.ceil(n(H)/10)===0]])),128)),(u(!0),o(d,null,s(n(Q),e=>(u(),o(`g`,{key:e.at+e.id},[a(`title`,null,f(e.id)+` `+f(e.title)+`:`+f(n(R)[e.kind])+`(`+f(e.at)+`,`+f(e.points)+` 点)—— `+f(e.reason),1),a(`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,j),a(`circle`,{cx:W(e.idx),cy:34,r:`3`,fill:`#3f7fd4`},null,8,Ce)]))),128))],8,x))]),a(`div`,we,[(u(!0),o(d,null,s(n(V).days,e=>(u(),o(`div`,{key:`row`+e.date,class:i([`cell`,{today:e.date===n(I),future:e.date>n(I),scope:n(Je).has(e.date)}])},[a(`span`,Te,f(n(F)(e.date)),1),a(`span`,Ee,f(e.actual),1),a(`span`,De,f(e.ideal),1),a(`i`,{class:`underline`,style:ne({width:(n(U)?e.actual/n(U)*100:0)+`%`})},null,4)],2))),128))]),c[12]||=a(`p`,{class:`foot dim`},`每格:日期 / 实际剩余 / 理想剩余`,-1),n(Q).length?(u(),o(`div`,Oe,[a(`p`,ke,[e(h,{name:`i-lucide-git-branch`,class:`size-3`}),t(`本迭代范围变更(`+f(n(Q).length)+`)`,1)]),a(`ul`,null,[(u(!0),o(d,null,s(n(Q),r=>(u(),o(`li`,{key:r.id},[a(`span`,Ae,f(n(R)[r.kind]),1),e(g,{to:`/story/${r.id}`,class:`mono link`},{default:re(()=>[t(f(r.id),1)]),_:2},1032,[`to`]),a(`span`,null,f(r.title),1),a(`span`,je,`· `+f(r.at)+` · `+f(r.points)+` 点 · `+f(r.reason),1)]))),128))]),c[11]||=a(`p`,{class:`foot dim`},`竖线标出的那几天,实际剩余没有按理想线下滑,是插了活而不是团队拖。`,-1)])):m(``,!0)])):(u(),o(`div`,Me,[e(h,{name:`i-lucide-info`,class:`size-4`}),c[13]||=t(`还没有迭代数据。 `,-1)])),a(`div`,Ne,[a(`div`,Pe,[c[14]||=a(`h2`,{class:`h2`},`迭代对照`,-1),a(`span`,Fe,f(n($).length),1),c[15]||=a(`span`,{class:`dim tip`},`点一行切换上面的燃尽图`,-1)]),a(`div`,Ie,[a(`table`,Le,[c[16]||=a(`thead`,null,[a(`tr`,null,[a(`th`,null,`迭代`),a(`th`,null,`名称`),a(`th`,null,`周期`),a(`th`,{class:`r`},`故事`),a(`th`,{class:`r`},`承诺 / 容量`),a(`th`,null,`状态`)])],-1),a(`tbody`,null,[(u(!0),o(d,null,s(n($),e=>(u(),o(`tr`,{key:e.id,class:i({on:e.id===n(z)}),onClick:t=>z.value=e.id},[a(`td`,ze,f(e.id),1),a(`td`,null,f(e.name),1),a(`td`,Be,f(e.period),1),a(`td`,Ve,f(e.stories),1),a(`td`,He,f(e.commit)+`/`+f(e.capacity),1),a(`td`,null,[a(`span`,{class:i([`tag`,e.tone])},f(e.status),3)])],10,Re))),128))])])])])])}}}),[[`__scopeId`,`data-v-4ef34f2c`]]);export{N as default};
1
+ import{D as e,E as t,On as n,T as r,Ut as ee,Yt as te,Zn as i,_ as a,b as o,bt as s,er as ne,g as c,k as l,mt as u,o as d,qt as re,tr as f,un as ie,vn as p,y as m}from"./DZo3dYLJ.js";import{S as ae}from"./51OWHj8c.js";import{t as oe}from"./BJW3UkS7.js";import{t as se}from"./DFuirznt.js";import{t as ce}from"./CjRYYbsC.js";import{a as h,i as g,r as le}from"#entry";var ue={class:`kpis`},de={class:`kpi tint-lilac`},fe={class:`v`},pe={class:`kpi`},me={class:`v`},he={class:`kpi`},ge={class:`kpi tint-mint`},_e={class:`v`},ve={class:`kpi`},ye={class:`v`},be={key:0,class:`card panel`},xe={class:`panel-hd`},Se={class:`ph-l`},_={class:`sp-name`},v={class:`sub mono`},y={class:`goal`},b={class:`chart-wrap`},x=[`viewBox`],S=[`y1`,`x2`,`y2`],C=[`x`,`y`],w=[`d`],T=[`d`],E=[`points`],D=[`cx`,`cy`],O=[`x1`,`y1`,`x2`,`y2`],k=[`x`,`y`],A=[`x`,`y`],j=[`x1`,`y1`,`x2`,`y2`],Ce=[`cx`,`cy`],we={class:`cells`},Te={class:`cd mono`},Ee={class:`ca`},De={class:`ci dim`},Oe={key:0,class:`scope`},ke={class:`h3`},Ae={class:`tag tag-info`},je={class:`dim`},Me={key:1,class:`callout soft`},Ne={class:`card`},Pe={class:`card-hd`},Fe={class:`tag tag-neutral`},Ie={class:`card-bd`},Le={class:`tbl`},Re=[`onClick`],ze={class:`mono`},Be={class:`mono dim`},Ve={class:`r`},He={class:`r mono`},Ue=980,We=300,M=42,N=g(l({__name:`burndown`,setup(l){let{sprints:g,burndown:N,sprintCommit:P,md:F,now:I,sprintById:L,storyById:Ge,SCOPE_LABEL:R}=h(),z=p(``),Ke=c(()=>[...g.value].reverse().map(e=>({label:`${e.id} · ${e.name}`,value:e.id,icon:`i-lucide-calendar-range`}))),B=c(()=>L.value.get(z.value)??g.value[g.value.length-1]),V=c(()=>B.value?N(B.value):{total:0,days:[]});ee(()=>{z.value&&!L.value.has(z.value)&&(z.value=``),!z.value&&g.value.length&&(z.value=g.value[g.value.length-1].id)});let H=c(()=>V.value.days.length||1),U=c(()=>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(` `),qe=c(()=>{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=c(()=>V.value.days.findIndex(e=>e.date===I)),J=c(()=>V.value.days.find(e=>e.date===I)??V.value.days[V.value.days.length-1]),Y=c(()=>J.value?.actual??0),X=c(()=>J.value?.ideal??0),Z=c(()=>Math.round((Y.value-X.value)*10)/10),Q=c(()=>{let e=B.value;return e?(e.stories??[]).map(e=>Ge.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):[]}),Je=c(()=>new Set(Q.value.map(e=>e.at))),$=c(()=>[...g.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(ee,c)=>{let l=le,p=se,h=ce,g=oe;return u(),o(`div`,null,[a(`div`,ue,[a(`div`,de,[e(l,{tone:`lilac`,size:`sm`}),c[1]||=a(`p`,{class:`k`},`剩余故事点`,-1),a(`p`,fe,[t(f(n(Y)),1),a(`small`,null,`/ `+f(n(V).total),1)])]),a(`div`,pe,[c[3]||=a(`p`,{class:`k`},`理想剩余(今天)`,-1),a(`p`,me,[t(f(n(X)),1),c[2]||=a(`small`,null,`点`,-1)])]),a(`div`,he,[c[5]||=a(`p`,{class:`k`},`偏差`,-1),a(`p`,{class:i([`v`,{bad:n(Z)>0,good:n(Z)<=0}])},[t(f(n(Z)>0?`+`+n(Z):n(Z)),1),c[4]||=a(`small`,null,`点`,-1)],2)]),a(`div`,ge,[e(l,{tone:`mint`,size:`sm`}),c[6]||=a(`p`,{class:`k`},`承诺 / 容量`,-1),a(`p`,_e,[t(f(n(B)?n(P)(n(B)):0),1),a(`small`,null,`/ `+f(n(B)?.capacity??0),1)])]),a(`div`,ve,[c[8]||=a(`p`,{class:`k`},`范围变更`,-1),a(`p`,ye,[t(f(n(Q).length),1),c[7]||=a(`small`,null,`次`,-1)])])]),n(B)?(u(),o(`div`,be,[a(`div`,xe,[a(`div`,Se,[a(`h2`,_,f(n(B).name),1),a(`p`,v,f(n(B).id)+` · `+f(n(F)(n(B).start))+` ~ `+f(n(F)(n(B).end)),1),a(`p`,y,f(n(B).goal),1)]),e(p,{modelValue:n(z),"onUpdate:modelValue":c[0]||=e=>ie(z)?z.value=e:null,items:n(Ke),icon:`i-lucide-calendar-range`,"aria-label":`选择迭代`,class:`bd-select`},null,8,[`modelValue`,`items`])]),a(`div`,b,[c[10]||=r(`<div class="chart-legend" data-v-4ef34f2c><span class="lg" data-v-4ef34f2c><i class="sw actual" data-v-4ef34f2c></i>实际剩余</span><span class="lg" data-v-4ef34f2c><i class="sw ideal" data-v-4ef34f2c></i>理想线</span><span class="lg" data-v-4ef34f2c><i class="sw scope" data-v-4ef34f2c></i>范围变更</span></div>`,1),(u(),o(`svg`,{viewBox:`0 0 ${Ue} ${We}`,class:`chart`,role:`img`},[c[9]||=r(`<defs data-v-4ef34f2c><linearGradient id="bd-line" x1="0" y1="0" x2="1" y2="0" data-v-4ef34f2c><stop offset="0%" stop-color="#8a63f7" data-v-4ef34f2c></stop><stop offset="100%" stop-color="#c3aefb" data-v-4ef34f2c></stop></linearGradient><linearGradient id="bd-area" x1="0" y1="0" x2="0" y2="1" data-v-4ef34f2c><stop offset="0%" stop-color="#8a63f7" stop-opacity="0.16" data-v-4ef34f2c></stop><stop offset="100%" stop-color="#8a63f7" stop-opacity="0" data-v-4ef34f2c></stop></linearGradient></defs>`,1),a(`g`,null,[(u(),o(d,null,s([0,.25,.5,.75,1],e=>a(`line`,{key:`grid`+e,x1:M,y1:G(n(U)*e),x2:938,y2:G(n(U)*e),stroke:`#f1f0ea`,"stroke-width":`1`},null,8,S)),64)),(u(),o(d,null,s([0,.25,.5,.75,1],e=>a(`text`,{key:`gl`+e,x:32,y:G(n(U)*e)+3.5,"text-anchor":`end`,"font-size":`9.5`,fill:`#b0b4ba`},f(Math.round(n(U)*e)),9,C)),64))]),a(`path`,{d:n(qe),fill:`url(#bd-area)`},null,8,w),a(`path`,{d:`M${W(0)},${G(n(U))} L${W(n(H)-1)},${G(0)}`,stroke:`#cdc9d8`,"stroke-width":`1.4`,"stroke-dasharray":`5 5`,fill:`none`},null,8,T),a(`polyline`,{points:K(`actual`),stroke:`url(#bd-line)`,"stroke-width":`2.6`,fill:`none`,"stroke-linejoin":`round`,"stroke-linecap":`round`},null,8,E),(u(!0),o(d,null,s(n(V).days,(e,t)=>(u(),o(`circle`,{key:e.date,cx:W(t),cy:G(e.actual),r:`3`,fill:`#fff`,stroke:`#8a63f7`,"stroke-width":`1.8`},null,8,D))),128)),n(q)>=0?(u(),o(`line`,{key:0,x1:W(n(q)),y1:34,x2:W(n(q)),y2:G(0),stroke:`#cf4759`,"stroke-dasharray":`3 3`,"stroke-width":`1.2`,opacity:`0.7`},null,8,O)):m(``,!0),n(q)>=0?(u(),o(`text`,{key:1,x:W(n(q)),y:28,"text-anchor":`middle`,"font-size":`9.5`,fill:`#a5382f`},`今天`,8,k)):m(``,!0),(u(!0),o(d,null,s(n(V).days,(e,t)=>te((u(),o(`text`,{key:`t`+e.date,x:W(t),y:286,"text-anchor":`middle`,"font-size":`9.5`,fill:`#b0b4ba`},f(n(F)(e.date)),9,A)),[[ae,t%Math.ceil(n(H)/10)===0]])),128)),(u(!0),o(d,null,s(n(Q),e=>(u(),o(`g`,{key:e.at+e.id},[a(`title`,null,f(e.id)+` `+f(e.title)+`:`+f(n(R)[e.kind])+`(`+f(e.at)+`,`+f(e.points)+` 点)—— `+f(e.reason),1),a(`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,j),a(`circle`,{cx:W(e.idx),cy:34,r:`3`,fill:`#3f7fd4`},null,8,Ce)]))),128))],8,x))]),a(`div`,we,[(u(!0),o(d,null,s(n(V).days,e=>(u(),o(`div`,{key:`row`+e.date,class:i([`cell`,{today:e.date===n(I),future:e.date>n(I),scope:n(Je).has(e.date)}])},[a(`span`,Te,f(n(F)(e.date)),1),a(`span`,Ee,f(e.actual),1),a(`span`,De,f(e.ideal),1),a(`i`,{class:`underline`,style:ne({width:(n(U)?e.actual/n(U)*100:0)+`%`})},null,4)],2))),128))]),c[12]||=a(`p`,{class:`foot dim`},`每格:日期 / 实际剩余 / 理想剩余`,-1),n(Q).length?(u(),o(`div`,Oe,[a(`p`,ke,[e(h,{name:`i-lucide-git-branch`,class:`size-3`}),t(`本迭代范围变更(`+f(n(Q).length)+`)`,1)]),a(`ul`,null,[(u(!0),o(d,null,s(n(Q),r=>(u(),o(`li`,{key:r.id},[a(`span`,Ae,f(n(R)[r.kind]),1),e(g,{to:`/story/${r.id}`,class:`mono link`},{default:re(()=>[t(f(r.id),1)]),_:2},1032,[`to`]),a(`span`,null,f(r.title),1),a(`span`,je,`· `+f(r.at)+` · `+f(r.points)+` 点 · `+f(r.reason),1)]))),128))]),c[11]||=a(`p`,{class:`foot dim`},`竖线标出的那几天,实际剩余没有按理想线下滑,是插了活而不是团队拖。`,-1)])):m(``,!0)])):(u(),o(`div`,Me,[e(h,{name:`i-lucide-info`,class:`size-4`}),c[13]||=t(`还没有迭代数据。 `,-1)])),a(`div`,Ne,[a(`div`,Pe,[c[14]||=a(`h2`,{class:`h2`},`迭代对照`,-1),a(`span`,Fe,f(n($).length),1),c[15]||=a(`span`,{class:`dim tip`},`点一行切换上面的燃尽图`,-1)]),a(`div`,Ie,[a(`table`,Le,[c[16]||=a(`thead`,null,[a(`tr`,null,[a(`th`,null,`迭代`),a(`th`,null,`名称`),a(`th`,null,`周期`),a(`th`,{class:`r`},`故事`),a(`th`,{class:`r`},`承诺 / 容量`),a(`th`,null,`状态`)])],-1),a(`tbody`,null,[(u(!0),o(d,null,s(n($),e=>(u(),o(`tr`,{key:e.id,class:i({on:e.id===n(z)}),onClick:t=>z.value=e.id},[a(`td`,ze,f(e.id),1),a(`td`,null,f(e.name),1),a(`td`,Be,f(e.period),1),a(`td`,Ve,f(e.stories),1),a(`td`,He,f(e.commit)+`/`+f(e.capacity),1),a(`td`,null,[a(`span`,{class:i([`tag`,e.tone])},f(e.status),3)])],10,Re))),128))])])])])])}}}),[[`__scopeId`,`data-v-4ef34f2c`]]);export{N as default};
@@ -0,0 +1 @@
1
+ import{D as e,E as t,On as n,T as r,Zn as i,_ as a,b as o,bt as s,er as c,g as l,k as u,mt as d,o as f,qt as ee,tr as p,v as te,y as m}from"./DZo3dYLJ.js";import{t as ne}from"./BJW3UkS7.js";import{t as re}from"./CjRYYbsC.js";import{a as h,i as g,r as _}from"#entry";var v={class:`kpis`},ie={class:`kpi tint-mint`},ae={class:`v`},oe={class:`kpi tint-lilac`},se={class:`v`},ce={class:`kpi`},y={class:`v`},b={class:`kpi`},x={class:`v`},S={class:`kpi`},C={class:`v`},w={class:`card tl-wrap`},T={class:`card-hd tl-hd`},E={class:`h2`},D={class:`timeline`},O={key:0,class:`tl-today`},k={class:`tl-item`},A={class:`when`},j={class:`when-date mono`},M={class:`when-year`},N={class:`axis`},P={class:`node-top`},F={class:`tag tag-ghost`},I={key:0,class:`tag tag-neutral mono`},L={class:`node-title`},R={class:`criteria`},z={class:`nums`},B={class:`dim`},V={class:`mpct`},le={class:`mss`},H={class:`st-id mono`},U={class:`st-title`},W={class:`st-state dim`},ue={class:`st-pts dim`},de={key:0,class:`tl-today`},G=g(u({__name:`milestones`,setup(u){let{milestones:g,milestoneProgress:G,now:K,md:fe,MS_LABEL:pe,MS_COLOR:me,KIND_LABEL:he,KIND_ICON:ge,STATE_DOT:_e,STATE_LABEL:ve,diffDays:q}=h(),J=l(()=>[...g.value].sort((e,t)=>e.due<t.due?-1:+(e.due>t.due))),Y=e=>q(K,e),X=e=>{let t=G(e);return t.total?Math.round(t.done/t.total*100):0},Z=e=>e===`mvp`?`mint`:e===`release`?`lilac`:`ink`,ye=e=>({reached:`ok`,"at-risk":`risk`,planned:`plan`,missed:`miss`})[e]??`plan`,be=[`日`,`一`,`二`,`三`,`四`,`五`,`六`],xe=e=>`周${be[new Date(`${e}T00:00:00Z`).getUTCDay()]}`,Se=e=>{let t=Y(e);return t>0?`还剩 ${t} 天`:t===0?`今天到期`:`已过 ${-t} 天`},Q=l(()=>{let e=J.value.findIndex(e=>e.due>=K);return e<0?J.value.length:e}),$=l(()=>({mvp:g.value.filter(e=>e.kind===`mvp`).length,release:g.value.filter(e=>e.kind===`release`).length,checkpoint:g.value.filter(e=>e.kind===`checkpoint`).length,risk:g.value.filter(e=>e.status===`at-risk`||e.status===`missed`).length,reached:g.value.filter(e=>e.status===`reached`).length}));return(l,u)=>{let h=_,K=re,q=ne;return d(),o(`div`,null,[a(`div`,v,[a(`div`,ie,[e(h,{tone:`mint`,size:`sm`}),u[1]||=a(`p`,{class:`k`},`MVP 节点`,-1),a(`p`,ae,[t(p(n($).mvp),1),u[0]||=a(`small`,null,`个`,-1)])]),a(`div`,oe,[e(h,{tone:`lilac`,size:`sm`}),u[3]||=a(`p`,{class:`k`},`发布节点`,-1),a(`p`,se,[t(p(n($).release),1),u[2]||=a(`small`,null,`个`,-1)])]),a(`div`,ce,[u[5]||=a(`p`,{class:`k`},`检查点`,-1),a(`p`,y,[t(p(n($).checkpoint),1),u[4]||=a(`small`,null,`个`,-1)])]),a(`div`,b,[u[6]||=a(`p`,{class:`k`},`已达成`,-1),a(`p`,x,[t(p(n($).reached),1),a(`small`,null,`/ `+p(n(g).length),1)])]),a(`div`,S,[u[8]||=a(`p`,{class:`k`},`有风险 / 错过`,-1),a(`p`,C,[t(p(n($).risk),1),u[7]||=a(`small`,null,`个`,-1)])])]),a(`div`,w,[a(`div`,T,[a(`h2`,E,[e(K,{name:`i-lucide-git-commit-vertical`,class:`size-3.5`}),u[9]||=t(`时间线`,-1)]),u[10]||=r(`<span class="dim tip" data-v-fb35a72e>按到期日从早到晚 · 节点达成口径是「挂的故事全部完成」</span><div class="legend" data-v-fb35a72e><span class="lg" data-v-fb35a72e><i class="sw mint" data-v-fb35a72e></i>MVP</span><span class="lg" data-v-fb35a72e><i class="sw lilac" data-v-fb35a72e></i>发布</span><span class="lg" data-v-fb35a72e><i class="sw white" data-v-fb35a72e></i>检查点</span><i class="sep" data-v-fb35a72e></i><span class="lg" data-v-fb35a72e><i class="dot ok" data-v-fb35a72e></i>已达成</span><span class="lg" data-v-fb35a72e><i class="dot risk" data-v-fb35a72e></i>有风险</span><span class="lg" data-v-fb35a72e><i class="dot plan" data-v-fb35a72e></i>计划中</span></div>`,2)]),a(`div`,D,[(d(!0),o(f,null,s(n(J),(r,l)=>(d(),o(f,{key:r.id},[l===n(Q)?(d(),o(`div`,O,[...u[11]||=[a(`span`,{class:`today-when`},`今天`,-1),a(`span`,{class:`today-axis`},[a(`i`)],-1),a(`span`,{class:`today-line`},null,-1)]])):m(``,!0),a(`article`,k,[a(`div`,A,[a(`p`,j,p(n(fe)(r.due)),1),a(`p`,M,p(xe(r.due)),1)]),a(`div`,N,[a(`span`,{class:i([`dot-lg`,ye(r.status)])},[r.status===`reached`?(d(),te(K,{key:0,name:`i-lucide-check`,class:`size-2.5`})):m(``,!0)],2)]),a(`div`,{class:i([`node`,`node-${Z(r.kind)}`])},[e(h,{tone:Z(r.kind),size:`xl`,min:3,max:5},null,8,[`tone`]),a(`div`,P,[a(`span`,F,p(r.id),1),a(`span`,{class:i([`tag`,`tag-${n(me)[r.status]}`])},p(n(pe)[r.status]),3),a(`span`,{class:i([`tag`,r.kind===`mvp`?`tag-mint`:r.kind===`release`?`tag-primary`:`tag-neutral`])},[e(K,{name:n(ge)[r.kind],class:`size-3`},null,8,[`name`]),t(p(n(he)[r.kind]),1)],2),r.sprintId?(d(),o(`span`,I,p(r.sprintId),1)):m(``,!0),a(`span`,{class:i([`days`,{over:Y(r.due)<0,soon:Y(r.due)>=0&&Y(r.due)<=7}])},p(Se(r.due)),3)]),a(`h3`,L,p(r.title),1),a(`p`,R,p(r.criteria),1),a(`div`,z,[a(`span`,null,[a(`b`,null,p(n(G)(r).done)+`/`+p(n(G)(r).total),1),u[12]||=t(` 个故事`,-1)]),n(G)(r).cancelled?(d(),o(f,{key:0},[u[13]||=a(`span`,{class:`dim`},`·`,-1),a(`span`,B,p(n(G)(r).cancelled)+` 个已取消`,1)],64)):m(``,!0),u[14]||=a(`span`,{class:`dim`},`·`,-1),a(`span`,null,p(n(G)(r).points)+` 点`,1),a(`span`,V,p(X(r))+`%`,1)]),a(`div`,{class:i([`bar`,r.kind===`checkpoint`?``:Z(r.kind)])},[a(`i`,{style:c({width:X(r)+`%`})},null,4)],2),a(`ul`,le,[(d(!0),o(f,null,s(n(G)(r).list,t=>(d(),o(`li`,{key:t.id},[e(q,{to:`/story/${t.id}`,class:`srow`},{default:ee(()=>[a(`i`,{class:`sdot`,style:c({background:n(_e)[t.status]})},null,4),a(`span`,H,p(t.id),1),a(`span`,U,p(t.title),1),a(`span`,W,p(n(ve)[t.status]),1),a(`span`,ue,p(t.points),1)]),_:2},1032,[`to`])]))),128))])],2)])],64))),128)),n(Q)===n(J).length?(d(),o(`div`,de,[...u[15]||=[a(`span`,{class:`today-when`},`今天`,-1),a(`span`,{class:`today-axis`},[a(`i`)],-1),a(`span`,{class:`today-line`},null,-1)]])):m(``,!0)])])])}}}),[[`__scopeId`,`data-v-fb35a72e`]]);export{G as default};
@@ -0,0 +1,13 @@
1
+ import{$n as e,D as t,E as n,Ht as r,Lt as i,On as a,Rt as o,Ut as s,Zn as c,_ as l,b as u,bt as d,ct as f,er as p,et as m,ft as h,g,gn as _,k as v,mt as y,o as b,pn as x,qt as S,tr as C,tt as w,u as T,v as E,vn as D,wn as O,wt as k,xn as A,xt as j,y as M}from"./DZo3dYLJ.js";import{w as N}from"./51OWHj8c.js";import{r as P}from"./oXSDGTSr.js";import{h as F,n as I,t as L}from"./Baq-Hrpf.js";import{r as ee,t as R}from"./DLkAKotw.js";import{t as z}from"./DHihWhf5.js";import{S as B,m as V,s as te}from"./CuJUHLl8.js";import{d as ne,f as re,p as H,r as ie}from"./Vo4wMbnS.js";import{t as U}from"./CK9_veoz.js";import{t as W}from"./BuOKDFiJ.js";import{t as G}from"./D3YCAmfu.js";import{t as K}from"./C9StZL3D.js";import{t as q}from"./Bi9Axj3V.js";import{t as J}from"./CjRYYbsC.js";import{n as Y}from"./D8Bpf7sE.js";import{t as X}from"./DNMF9lr0.js";import{_ as ae,c as Z,g as Q,h as oe,m as se,p as ce,v as le}from"#entry";var $=100,[ue,de]=F(`ProgressRoot`),fe=e=>typeof e==`number`;function pe(e,t){return z(e)||fe(e)&&!Number.isNaN(e)&&e<=t&&e>=0?e:(console.error(`Invalid prop \`value\` of value \`${e}\` supplied to \`ProgressRoot\`. The \`value\` prop must be:
2
+ - a positive number
3
+ - less than the value passed to \`max\` (or ${$} if no \`max\` prop is set)
4
+ - \`null\` or \`undefined\` if the progress is indeterminate.
5
+
6
+ Defaulting to \`null\`.`),null)}function me(e){return fe(e)&&!Number.isNaN(e)&&e>0?e:(console.error(`Invalid prop \`max\` of value \`${e}\` supplied to \`ProgressRoot\`. Only numbers greater than 0 are valid max values. Defaulting to \`${$}\`.`),$)}var he=v({__name:`ProgressRoot`,props:{modelValue:{type:[Number,null],required:!1},max:{type:Number,required:!1,default:$},getValueLabel:{type:Function,required:!1,default:(e,t)=>fe(e)?`${Math.round(e/t*$)}%`:void 0},getValueText:{type:Function,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:[`update:modelValue`,`update:max`],setup(e,{emit:t}){let n=e,i=t;G();let o=H(n,`modelValue`,i,{passive:n.modelValue===void 0}),s=H(n,`max`,i,{passive:n.max===void 0});r(()=>o.value,async e=>{let t=pe(e,n.max);t!==e&&(await w(),o.value=t)},{immediate:!0}),r(()=>n.max,e=>{let t=me(n.max);t!==e&&(s.value=t)},{immediate:!0});let c=g(()=>z(o.value)?`indeterminate`:o.value===s.value?`complete`:`loading`);return de({modelValue:o,max:s,progressState:c}),(t,n)=>(y(),E(a(U),{"as-child":e.asChild,as:e.as,"aria-valuemax":a(s),"aria-valuemin":0,"aria-valuenow":fe(a(o))?a(o):void 0,"aria-valuetext":e.getValueText?.(a(o),a(s)),"aria-label":e.getValueLabel(a(o),a(s)),role:`progressbar`,"data-state":c.value,"data-value":a(o)??void 0,"data-max":a(s)},{default:S(()=>[j(t.$slots,`default`,{modelValue:a(o)})]),_:3},8,[`as-child`,`as`,`aria-valuemax`,`aria-valuenow`,`aria-valuetext`,`aria-label`,`data-state`,`data-value`,`data-max`]))}}),ge=v({__name:`ProgressIndicator`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){let t=e,n=ue();return G(),(e,r)=>(y(),E(a(U),m(t,{"data-state":a(n).progressState.value,"data-value":a(n).modelValue?.value??void 0,"data-max":a(n).max.value}),{default:S(()=>[j(e.$slots,`default`)]),_:3},16,[`data-state`,`data-value`,`data-max`]))}}),_e=v({__name:`ToastAnnounceExclude`,props:{altText:{type:String,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){return(t,n)=>(y(),E(a(U),{as:e.as,"as-child":e.asChild,"data-reka-toast-announce-exclude":``,"data-reka-toast-announce-alt":e.altText||void 0},{default:S(()=>[j(t.$slots,`default`)]),_:3},8,[`as`,`as-child`,`data-reka-toast-announce-alt`]))}}),ve=v({__name:`ToastAnnounce`,setup(e){let t=le(),r=B(1e3),i=D(!1),o=0,s=0;return te&&(o=requestAnimationFrame(()=>{s=requestAnimationFrame(()=>{i.value=!0})}),x(()=>{cancelAnimationFrame(o),cancelAnimationFrame(s)})),(e,o)=>a(r)||i.value?(y(),E(a(q),{key:0,feature:`fully-hidden`},{default:S(()=>[n(C(a(t).label.value)+` `,1),j(e.$slots,`default`)]),_:3})):M(`v-if`,!0)}}),[ye,be]=F(`ToastPositioner`),[xe,Se]=F(`ToastRoot`),Ce=v({inheritAttrs:!1,__name:`ToastRootImpl`,props:{type:{type:String,required:!1},open:{type:Boolean,required:!1,default:!1},duration:{type:Number,required:!1},toast:{type:Object,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`li`}},emits:[`close`,`escapeKeyDown`,`pause`,`resume`,`swipeStart`,`swipeMove`,`swipeCancel`,`swipeEnd`],setup(e,{emit:i}){let o=e,c=i,{forwardRef:l,currentElement:p}=G(),{CollectionItem:v}=R(),x=le(),w=D(null),k=D(null),P=g(()=>typeof o.duration==`number`?o.duration:x.duration.value),F=D(0),I=D(P.value),L=D(0),z=D(P.value),B=ne(()=>{let e=Date.now()-F.value;z.value=Math.max(I.value-e,0)},{fpsLimit:60});function V(e){e<=0||e===1/0||te&&(window.clearTimeout(L.value),F.value=Date.now(),L.value=window.setTimeout(H,e))}function H(e){let t=e?.pointerType===``;p.value?.contains(ee())&&t&&x.viewport.value?.focus(),t&&(x.isClosePausedRef.value=!1),c(`close`)}let W=ye(null),K=A(null);r([p,()=>o.toast?.updateKey],([e])=>{K.value=e?oe(e):null},{flush:`post`,immediate:!0});let q=_({seq:0,height:0,open:o.open}),J=g(()=>x.getToastStack(q));function Y(){let e=p.value;if(!e)return;let t=e.style.height;e.style.height=`auto`,q.height=e.offsetHeight,e.style.height=t}if(re(p,Y),r(()=>o.toast?.updateKey,Y,{flush:`post`}),r(()=>o.open,(e,t)=>{q.open=e,e&&!t&&x.reopenToast(q)}),o.type&&![`foreground`,`background`].includes(o.type))throw Error("Invalid prop `type` supplied to `Toast`. Expected `foreground | background`.");s(e=>{let t=x.viewport.value;if(t){let n=()=>{V(I.value),B.resume(),c(`resume`)},r=()=>{let e=Date.now()-F.value;I.value-=e,window.clearTimeout(L.value),B.pause(),c(`pause`)};t.addEventListener(ce,r),t.addEventListener(se,n),e(()=>{t.removeEventListener(ce,r),t.removeEventListener(se,n)})}});let X=g(()=>o.toast?x.toastStore.getRestartKey(o.toast.id):0);r([()=>o.open,P,X],()=>{I.value=P.value,o.open&&!x.isClosePausedRef.value&&V(P.value)},{immediate:!0}),ie(`Escape`,e=>{c(`escapeKeyDown`,e),e.defaultPrevented||(x.isFocusedToastEscapeKeyDownRef.value=!0,H())});let Z;return f(()=>{x.onToastAdd(),Z=x.registerToast(q),Y()}),h(()=>{x.onToastRemove(),Z?.()}),Se({onClose:H,toast:O(o,`toast`)}),(r,i)=>(y(),u(b,null,[K.value?(y(),E(ve,{key:e.toast?.updateKey??0,role:`alert`,"aria-live":e.type===`foreground`?`assertive`:`polite`},{default:S(()=>[M(`
7
+ Render each chunk as its own text node so screen readers get the
8
+ natural pause break between nodes (see comment in utils.ts).
9
+ Interpolating the array directly with \`{{ announceTextContent }}\`
10
+ would route through Vue's \`toDisplayString\`, which JSON-stringifies
11
+ arrays — the live region would then announce literal \`[\`, quotes
12
+ and commas instead of the toast title and description.
13
+ `),(y(!0),u(b,null,d(K.value,(e,t)=>(y(),u(b,{key:t},[n(C(e),1)],64))),128))]),_:1},8,[`aria-live`])):M(`v-if`,!0),a(x).viewport.value||a(W)?(y(),E(T,{key:1,to:a(x).viewport.value??`body`,disabled:!!a(W)},[t(a(v),null,{default:S(()=>[t(a(U),m({ref:a(l),tabindex:`0`},r.$attrs,{as:e.as,"as-child":e.asChild,"data-state":e.open?`open`:`closed`,"data-swipe-direction":a(x).swipeDirection.value,"data-status":e.toast?.status,"data-expanded":a(x).expanded.value?``:void 0,"data-limited":J.value.limited?``:void 0,inert:J.value.limited||void 0,style:{...a(x).disableSwipe.value?void 0:{userSelect:`none`,touchAction:`none`},"--reka-toast-index":J.value.index,"--reka-toast-offset-y":`${J.value.offsetY}px`,"--reka-toast-height":q.height?`${q.height}px`:void 0},onPointerdown:i[0]||=N(e=>{a(x).disableSwipe.value||(w.value={x:e.clientX,y:e.clientY})},[`left`]),onPointermove:i[1]||=e=>{if(a(x).disableSwipe.value||!w.value)return;let t=e.clientX-w.value.x,n=e.clientY-w.value.y,r=!!k.value,i=[`left`,`right`].includes(a(x).swipeDirection.value),o=[`left`,`up`].includes(a(x).swipeDirection.value)?Math.min:Math.max,s=i?o(0,t):0,l=i?0:o(0,n),u=e.pointerType===`touch`?10:2,d={x:s,y:l},f={originalEvent:e,delta:d};r?(k.value=d,a(Q)(a(`toast.swipeMove`),e=>c(`swipeMove`,e),f)):a(ae)(d,a(x).swipeDirection.value,u)?(k.value=d,a(Q)(a(`toast.swipeStart`),e=>c(`swipeStart`,e),f),e.target.setPointerCapture(e.pointerId)):(Math.abs(t)>u||Math.abs(n)>u)&&(w.value=null)},onPointerup:i[2]||=e=>{if(a(x).disableSwipe.value)return;let t=k.value,n=e.target;if(n.hasPointerCapture(e.pointerId)&&n.releasePointerCapture(e.pointerId),k.value=null,w.value=null,t){let n=e.currentTarget,r={originalEvent:e,delta:t};a(ae)(t,a(x).swipeDirection.value,a(x).swipeThreshold.value)?a(Q)(a(`toast.swipeEnd`),e=>c(`swipeEnd`,e),r):a(Q)(a(`toast.swipeCancel`),e=>c(`swipeCancel`,e),r),n?.addEventListener(`click`,e=>e.preventDefault(),{once:!0})}}}),{default:S(()=>[j(r.$slots,`default`,{remaining:z.value,duration:P.value})]),_:3},16,[`as`,`as-child`,`data-state`,`data-swipe-direction`,`data-status`,`data-expanded`,`data-limited`,`inert`,`style`])]),_:3})],8,[`to`,`disabled`])):M(`v-if`,!0)],64))}}),we=v({__name:`ToastAction`,props:{altText:{type:String,required:!1},closeOnClick:{type:Boolean,required:!1,default:!0},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(e){let r=e,o=xe(),{forwardRef:s}=G(),c=i(),l=g(()=>o.toast.value?.actionProps),u=g(()=>!!c.default||!o.toast.value||!!l.value),d=g(()=>r.altText??l.value?.altText);if(u.value&&!d.value)throw Error("Missing prop `altText` expected on `ToastAction`");function f(e){l.value?.onClick?.(e),(l.value?.closeOnClick??r.closeOnClick)&&o.onClose(e)}return(r,i)=>u.value&&d.value?(y(),E(_e,{key:0,"alt-text":d.value,"as-child":``},{default:S(()=>[t(a(U),{ref:a(s),as:e.as,"as-child":e.asChild,type:e.as===`button`?`button`:void 0,onClick:f},{default:S(()=>[j(r.$slots,`default`,{},()=>[n(C(l.value?.label),1)])]),_:3},8,[`as`,`as-child`,`type`])]),_:3},8,[`alt-text`])):M(`v-if`,!0)}}),Te=v({__name:`ToastClose`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`button`}},setup(e){let n=e,r=xe(),{forwardRef:i}=G();return(o,s)=>(y(),E(_e,{"as-child":``},{default:S(()=>[t(a(U),m(n,{ref:a(i),type:e.as===`button`?`button`:void 0,onClick:a(r).onClose}),{default:S(()=>[j(o.$slots,`default`)]),_:3},16,[`type`,`onClick`])]),_:3}))}}),Ee=v({__name:`ToastDescription`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let r=t;G();let i=xe(null);return(t,o)=>t.$slots.default||!a(i)?.toast.value||a(i).toast.value.description?(y(),E(a(U),e(m({key:0},r)),{default:S(()=>[j(t.$slots,`default`,{},()=>[n(C(a(i)?.toast.value?.description),1)])]),_:3},16)):M(`v-if`,!0)}}),De=v({__name:`ToastRoot`,props:{defaultOpen:{type:Boolean,required:!1,default:!0},forceMount:{type:Boolean,required:!1},type:{type:String,required:!1,default:`foreground`},open:{type:Boolean,required:!1,default:void 0},duration:{type:Number,required:!1},toast:{type:Object,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:`li`}},emits:[`escapeKeyDown`,`pause`,`resume`,`swipeStart`,`swipeMove`,`swipeCancel`,`swipeEnd`,`update:open`],setup(e,{emit:n}){let i=e,o=n,{forwardRef:s}=G(),c=H(i,`open`,o,{defaultValue:i.defaultOpen,passive:i.open===void 0}),l=le(),u=g(()=>i.toast?i.toast.open:c.value),d=g(()=>i.toast?.type??i.type),f=g(()=>i.toast?.status===`loading`?1/0:i.toast?.duration??i.duration);function p(){i.toast?(l.toastStore.close(i.toast.id),o(`update:open`,!1)):c.value=!1}let h=D(!1);return r([()=>i.toast,h],([e,t])=>{e&&!e.open&&!t&&l.toastStore.remove(e.id)},{immediate:!0}),(n,r)=>(y(),E(a(K),{present:e.forceMount||u.value},{default:S(()=>[t(Ce,m({ref:a(s),open:u.value,type:d.value,as:e.as,"as-child":e.asChild,duration:f.value,toast:e.toast},n.$attrs,{onVnodeMounted:r[0]||=e=>h.value=!0,onVnodeUnmounted:r[1]||=e=>h.value=!1,onClose:p,onPause:r[2]||=e=>o(`pause`),onResume:r[3]||=e=>o(`resume`),onEscapeKeyDown:r[4]||=e=>o(`escapeKeyDown`,e),onSwipeStart:r[5]||=e=>{o(`swipeStart`,e),e.defaultPrevented||e.currentTarget.setAttribute(`data-swipe`,`start`)},onSwipeMove:r[6]||=e=>{if(o(`swipeMove`,e),!e.defaultPrevented){let{x:t,y:n}=e.detail.delta,r=e.currentTarget;r.setAttribute(`data-swipe`,`move`),r.style.setProperty(`--reka-toast-swipe-move-x`,`${t}px`),r.style.setProperty(`--reka-toast-swipe-move-y`,`${n}px`)}},onSwipeCancel:r[7]||=e=>{if(o(`swipeCancel`,e),!e.defaultPrevented){let t=e.currentTarget;t.setAttribute(`data-swipe`,`cancel`),t.style.removeProperty(`--reka-toast-swipe-move-x`),t.style.removeProperty(`--reka-toast-swipe-move-y`),t.style.removeProperty(`--reka-toast-swipe-end-x`),t.style.removeProperty(`--reka-toast-swipe-end-y`)}},onSwipeEnd:r[8]||=e=>{if(o(`swipeEnd`,e),!e.defaultPrevented){let{x:t,y:n}=e.detail.delta,r=e.currentTarget;r.setAttribute(`data-swipe`,`end`),r.style.removeProperty(`--reka-toast-swipe-move-x`),r.style.removeProperty(`--reka-toast-swipe-move-y`),r.style.setProperty(`--reka-toast-swipe-end-x`,`${t}px`),r.style.setProperty(`--reka-toast-swipe-end-y`,`${n}px`),p()}}}),{default:S(({remaining:e,duration:t})=>[j(n.$slots,`default`,{remaining:e,duration:t,open:u.value})]),_:3},16,[`open`,`type`,`as`,`as-child`,`duration`,`toast`])]),_:3},8,[`present`]))}}),Oe=v({__name:`ToastTitle`,props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(t){let r=t;G();let i=xe(null);return(t,o)=>t.$slots.default||!a(i)?.toast.value||a(i).toast.value.title?(y(),E(a(U),e(m({key:0},r)),{default:S(()=>[j(t.$slots,`default`,{},()=>[n(C(a(i)?.toast.value?.title),1)])]),_:3},16)):M(`v-if`,!0)}}),ke={slots:{root:`gap-2`,base:`relative overflow-hidden rounded-full bg-accented`,indicator:`rounded-full size-full transition-transform duration-200 ease-out motion-reduce:transition-none motion-reduce:data-[state=indeterminate]:animate-pulse`,status:`flex text-dimmed duration-200 ease-out motion-reduce:transition-none`,steps:`grid items-end`,step:`truncate text-end row-start-1 col-start-1 transition-opacity ease-out`},variants:{animation:{carousel:``,"carousel-inverse":``,swing:``,elastic:``},color:{primary:{indicator:`bg-primary`,steps:`text-primary`},secondary:{indicator:`bg-secondary`,steps:`text-secondary`},success:{indicator:`bg-success`,steps:`text-success`},info:{indicator:`bg-info`,steps:`text-info`},warning:{indicator:`bg-warning`,steps:`text-warning`},error:{indicator:`bg-error`,steps:`text-error`},neutral:{indicator:`bg-inverted`,steps:`text-highlighted`}},size:{"2xs":{status:`text-xs`,steps:`text-xs`},xs:{status:`text-xs`,steps:`text-xs`},sm:{status:`text-sm`,steps:`text-sm`},md:{status:`text-sm`,steps:`text-sm`},lg:{status:`text-sm`,steps:`text-sm`},xl:{status:`text-base`,steps:`text-base`},"2xl":{status:`text-base`,steps:`text-base`}},step:{active:{step:`opacity-100`},first:{step:`opacity-100 text-muted`},other:{step:`opacity-0`},last:{step:``}},orientation:{horizontal:{root:`w-full flex flex-col`,base:`w-full`,status:`flex-row items-center justify-end w-(--percent) min-w-fit transition-[width]`},vertical:{root:`h-full flex flex-row-reverse`,base:`h-full`,status:`flex-col justify-end h-(--percent) min-h-fit transition-[height]`}},inverted:{true:{status:`self-end`}}},compoundVariants:[{inverted:!0,orientation:`horizontal`,class:{step:`text-start`,status:`flex-row-reverse`}},{inverted:!0,orientation:`vertical`,class:{steps:`items-start`,status:`flex-col-reverse`}},{orientation:`horizontal`,size:`2xs`,class:`h-px`},{orientation:`horizontal`,size:`xs`,class:`h-0.5`},{orientation:`horizontal`,size:`sm`,class:`h-1`},{orientation:`horizontal`,size:`md`,class:`h-2`},{orientation:`horizontal`,size:`lg`,class:`h-3`},{orientation:`horizontal`,size:`xl`,class:`h-4`},{orientation:`horizontal`,size:`2xl`,class:`h-5`},{orientation:`vertical`,size:`2xs`,class:`w-px`},{orientation:`vertical`,size:`xs`,class:`w-0.5`},{orientation:`vertical`,size:`sm`,class:`w-1`},{orientation:`vertical`,size:`md`,class:`w-2`},{orientation:`vertical`,size:`lg`,class:`w-3`},{orientation:`vertical`,size:`xl`,class:`w-4`},{orientation:`vertical`,size:`2xl`,class:`w-5`},{orientation:`horizontal`,animation:`carousel`,class:{indicator:`motion-safe:data-[state=indeterminate]:animate-[carousel_2s_linear_infinite] motion-safe:data-[state=indeterminate]:rtl:animate-[carousel-rtl_2s_linear_infinite]`}},{orientation:`vertical`,animation:`carousel`,class:{indicator:`motion-safe:data-[state=indeterminate]:animate-[carousel-vertical_2s_linear_infinite]`}},{orientation:`horizontal`,animation:`carousel-inverse`,class:{indicator:`motion-safe:data-[state=indeterminate]:animate-[carousel-inverse_2s_linear_infinite] motion-safe:data-[state=indeterminate]:rtl:animate-[carousel-inverse-rtl_2s_linear_infinite]`}},{orientation:`vertical`,animation:`carousel-inverse`,class:{indicator:`motion-safe:data-[state=indeterminate]:animate-[carousel-inverse-vertical_2s_linear_infinite]`}},{orientation:`horizontal`,animation:`swing`,class:{indicator:`motion-safe:data-[state=indeterminate]:animate-[swing_2s_var(--ease-in-out)_infinite]`}},{orientation:`vertical`,animation:`swing`,class:{indicator:`motion-safe:data-[state=indeterminate]:animate-[swing-vertical_2s_var(--ease-in-out)_infinite]`}},{orientation:`horizontal`,animation:`elastic`,class:{indicator:`relative motion-safe:data-[state=indeterminate]:animate-[elastic_2s_var(--ease-in-out)_infinite]`}},{orientation:`vertical`,animation:`elastic`,class:{indicator:`relative motion-safe:data-[state=indeterminate]:animate-[elastic-vertical_2s_var(--ease-in-out)_infinite]`}}],defaultVariants:{animation:`carousel`,color:`primary`,size:`md`}},Ae={__name:`UProgress`,props:{as:{type:null,required:!1},max:{type:[Number,Array],required:!1},status:{type:Boolean,required:!1},inverted:{type:Boolean,required:!1,default:!1},size:{type:null,required:!1},color:{type:null,required:!1},orientation:{type:null,required:!1,default:`horizontal`},animation:{type:null,required:!1},class:{type:null,required:!1},ui:{type:Object,required:!1},getValueLabel:{type:Function,required:!1},getValueText:{type:Function,required:!1},modelValue:{type:[Number,null],required:!1,default:null}},emits:[`update:modelValue`,`update:max`],setup(e,{emit:r}){let o=e,s=r,l=i(),f=I(`progress`,o),{dir:h}=Z(),_=P(),v=W(V(f,`getValueLabel`,`getValueText`,`modelValue`),s),x=g(()=>v.value.modelValue===null),w=g(()=>Array.isArray(f.max)),T=g(()=>{if(!x.value&&f.max)return Array.isArray(f.max)?f.max.length-1:Number(f.max)}),D=g(()=>{if(!x.value)switch(!0){case v.value.modelValue<0:return 0;case v.value.modelValue>(T.value??100):return 100;default:return Math.round(v.value.modelValue/(T.value??100)*100)}}),O=g(()=>{if(D.value!==void 0)return f.orientation===`vertical`?{transform:`translateY(${f.inverted?``:`-`}${100-D.value}%)`}:h.value===`rtl`?{transform:`translateX(${f.inverted?`-`:``}${100-D.value}%)`}:{transform:`translateX(${f.inverted?``:`-`}${100-D.value}%)`}}),k=g(()=>({"--percent":`${Math.max(D.value??0,0)}%`}));function A(e){return e===Number(f.modelValue)}function N(e){return e===0}function F(e){return e===T.value}function ee(e){return e=Number(e),A(e)&&!N(e)?`active`:N(e)&&A(e)?`first`:F(e)&&A(e)?`last`:`other`}let R=g(()=>L({extend:ke,..._.ui?.progress||{}})({animation:f.animation,size:f.size,color:f.color,orientation:f.orientation,inverted:f.inverted})),z=g(()=>Object.keys({...ke.variants?.color,..._.ui?.progress?.variants?.color})),B=g(()=>f.color&&!z.value.includes(f.color)?f.color:void 0);return(e,r)=>(y(),E(a(U),{as:a(f).as,"data-orientation":a(f).orientation,"data-slot":`root`,class:c(R.value.root({class:[a(f).ui?.root,a(f).class]}))},{default:S(()=>[!x.value&&(a(f).status||l.status)?(y(),u(`div`,{key:0,"data-slot":`status`,class:c(R.value.status({class:a(f).ui?.status})),style:p(k.value)},[j(e.$slots,`status`,{percent:D.value},()=>[n(C(D.value)+`% `,1)])],6)):M(``,!0),t(a(he),m(a(v),{max:T.value,"data-slot":`base`,class:R.value.base({class:a(f).ui?.base}),style:{transform:`translateZ(0)`}}),{default:S(()=>[t(a(ge),{"data-slot":`indicator`,class:c(R.value.indicator({class:a(f).ui?.indicator})),style:p([O.value,B.value?{backgroundColor:B.value}:void 0])},null,8,[`class`,`style`])]),_:1},16,[`max`,`class`]),w.value?(y(),u(`div`,{key:1,"data-slot":`steps`,class:c(R.value.steps({class:a(f).ui?.steps})),style:p(B.value?{color:B.value}:void 0)},[(y(!0),u(b,null,d(a(f).max,(t,r)=>(y(),u(`div`,{key:r,"data-slot":`step`,class:c(R.value.step({class:a(f).ui?.step,step:ee(r)}))},[j(e.$slots,`step-${r}`,{step:t},()=>[n(C(t),1)])],2))),128))],6)):M(``,!0)]),_:3},8,[`as`,`data-orientation`,`class`]))}},je={slots:{root:`relative group overflow-hidden bg-default shadow-lg rounded-lg ring ring-default p-4 flex gap-2.5`,wrapper:`w-0 flex-1 flex flex-col`,title:`text-sm font-medium text-highlighted`,description:`text-sm text-muted`,icon:`shrink-0 size-5`,avatar:`shrink-0`,avatarSize:`2xl`,actions:`flex gap-1.5 shrink-0`,progress:`absolute inset-x-0 bottom-0`,close:`p-0`},variants:{color:{primary:{root:`outline-primary/25 focus-visible:outline-3 focus-visible:ring-primary`,icon:`text-primary`},secondary:{root:`outline-secondary/25 focus-visible:outline-3 focus-visible:ring-secondary`,icon:`text-secondary`},success:{root:`outline-success/25 focus-visible:outline-3 focus-visible:ring-success`,icon:`text-success`},info:{root:`outline-info/25 focus-visible:outline-3 focus-visible:ring-info`,icon:`text-info`},warning:{root:`outline-warning/25 focus-visible:outline-3 focus-visible:ring-warning`,icon:`text-warning`},error:{root:`outline-error/25 focus-visible:outline-3 focus-visible:ring-error`,icon:`text-error`},neutral:{root:`outline-inverted/25 focus-visible:outline-3 focus-visible:ring-inverted`,icon:`text-highlighted`}},orientation:{horizontal:{root:`items-center`,actions:`items-center`},vertical:{root:`items-start`,actions:`items-start mt-2.5`}},title:{true:{description:`mt-1`}}},defaultVariants:{color:`primary`}},Me={__name:`UToast`,props:{as:{type:null,required:!1},title:{type:[String,Object,Function],required:!1},description:{type:[String,Object,Function],required:!1},icon:{type:null,required:!1},avatar:{type:Object,required:!1},color:{type:null,required:!1},orientation:{type:null,required:!1,default:`vertical`},close:{type:[Boolean,Object],required:!1,default:!0},closeIcon:{type:null,required:!1},actions:{type:Array,required:!1},duration:{type:Number,required:!1},progress:{type:[Boolean,Object],required:!1,default:!0},class:{type:null,required:!1},ui:{type:Object,required:!1},defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1},type:{type:String,required:!1}},emits:[`escapeKeyDown`,`pause`,`resume`,`swipeStart`,`swipeMove`,`swipeCancel`,`swipeEnd`,`update:open`],setup(e,{expose:r,emit:s}){let p=e,h=s,_=i(),v=I(`toast`,p),{t:x}=Z(),w=P(),T=W(V(v,`as`,`defaultOpen`,`open`,`duration`,`type`),h),O=g(()=>L({extend:je,...w.ui?.toast||{}})({color:v.color,orientation:v.orientation,title:!!v.title||!!_.title})),A=o(`rootRef`),F=D(0);return f(()=>{A.value?.$el?.getBoundingClientRect&&(F.value=A.value.$el.getBoundingClientRect().height)}),r({height:F}),(e,r)=>(y(),E(a(De),m({ref_key:`rootRef`,ref:A},a(T),{"data-orientation":a(v).orientation,"data-slot":`root`,class:O.value.root({class:[a(v).ui?.root,a(v).class]}),style:{"--height":F.value}}),{default:S(({remaining:i,duration:o,open:s})=>[j(e.$slots,`leading`,{ui:O.value},()=>[a(v).avatar?(y(),E(Y,m({key:0,size:a(v).ui?.avatarSize||O.value.avatarSize()},a(v).avatar,{"data-slot":`avatar`,class:O.value.avatar({class:a(v).ui?.avatar})}),null,16,[`size`,`class`])):a(v).icon?(y(),E(J,{key:1,name:a(v).icon,"data-slot":`icon`,class:c(O.value.icon({class:a(v).ui?.icon}))},null,8,[`name`,`class`])):M(``,!0)]),l(`div`,{"data-slot":`wrapper`,class:c(O.value.wrapper({class:a(v).ui?.wrapper}))},[a(v).title||_.title?(y(),E(a(Oe),{key:0,"data-slot":`title`,class:c(O.value.title({class:a(v).ui?.title}))},{default:S(()=>[j(e.$slots,`title`,{},()=>[typeof a(v).title==`function`?(y(),E(k(a(v).title()),{key:0})):typeof a(v).title==`object`?(y(),E(k(a(v).title),{key:1})):(y(),u(b,{key:2},[n(C(a(v).title),1)],64))])]),_:3},8,[`class`])):M(``,!0),a(v).description||_.description?(y(),E(a(Ee),{key:1,"data-slot":`description`,class:c(O.value.description({class:a(v).ui?.description}))},{default:S(()=>[j(e.$slots,`description`,{},()=>[typeof a(v).description==`function`?(y(),E(k(a(v).description()),{key:0})):typeof a(v).description==`object`?(y(),E(k(a(v).description),{key:1})):(y(),u(b,{key:2},[n(C(a(v).description),1)],64))])]),_:3},8,[`class`])):M(``,!0),a(v).orientation===`vertical`&&(a(v).actions?.length||_.actions)?(y(),u(`div`,{key:2,"data-slot":`actions`,class:c(O.value.actions({class:a(v).ui?.actions}))},[j(e.$slots,`actions`,{},()=>[(y(!0),u(b,null,d(a(v).actions,({closeOnClick:e,...n},i)=>(y(),E(a(we),{key:i,"alt-text":n.label||`Action`,"close-on-click":e,"as-child":``,onClick:r[0]||=N(()=>{},[`stop`])},{default:S(()=>[t(X,m({size:`xs`,color:a(v).color},{ref_for:!0},n),null,16,[`color`])]),_:2},1032,[`alt-text`,`close-on-click`]))),128))])],2)):M(``,!0)],2),a(v).orientation===`horizontal`&&(a(v).actions?.length||_.actions)||a(v).close?(y(),u(`div`,{key:0,"data-slot":`actions`,class:c(O.value.actions({class:a(v).ui?.actions,orientation:`horizontal`}))},[a(v).orientation===`horizontal`&&(a(v).actions?.length||_.actions)?j(e.$slots,`actions`,{},()=>[(y(!0),u(b,null,d(a(v).actions,({closeOnClick:e,...n},i)=>(y(),E(a(we),{key:i,"alt-text":n.label||`Action`,"close-on-click":e,"as-child":``,onClick:r[1]||=N(()=>{},[`stop`])},{default:S(()=>[t(X,m({size:`xs`,color:a(v).color},{ref_for:!0},n),null,16,[`color`])]),_:2},1032,[`alt-text`,`close-on-click`]))),128))],void 0,0):M(``,!0),a(v).close||_.close?(y(),E(a(Te),{key:1,"as-child":``},{default:S(()=>[j(e.$slots,`close`,{ui:O.value},()=>[a(v).close?(y(),E(X,m({key:0,icon:a(v).closeIcon||a(w).ui.icons.close,color:`neutral`,variant:`link`,"aria-label":a(x)(`toast.close`)},typeof a(v).close==`object`?a(v).close:{},{"data-slot":`close`,class:O.value.close({class:a(v).ui?.close}),onClick:r[2]||=N(()=>{},[`stop`])}),null,16,[`icon`,`aria-label`,`class`])):M(``,!0)])]),_:3})):M(``,!0)],2)):M(``,!0),a(v).progress&&s&&i>0&&o?(y(),E(Ae,m({key:1,"model-value":i/o*100,color:a(v).color},typeof a(v).progress==`object`?a(v).progress:{},{size:`sm`,"data-slot":`progress`,class:O.value.progress({class:a(v).ui?.progress})}),null,16,[`model-value`,`color`,`class`])):M(``,!0)]),_:3},16,[`data-orientation`,`class`,`style`]))}};export{Me as default};
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/BpR5gMZX.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.ChOvfapw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BpR5gMZX.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuVRe79A.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BXQZAVYz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CZc2Mypg.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/FCuSfyjP.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D8NAsEfE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CviJuCa4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEBhVwtl.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BQSM1Ln0.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DwNOEVN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DhkiugsE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/joIhBaO-.js"><script type="module" src="/_nuxt/BpR5gMZX.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/BvaAl29K.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"24603984-d514-4dff-badc-898a1fd5e770",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1792961158551,false]</script></body></html>
1
+ <!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/Co0ISufR.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.CTKz4ouw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Co0ISufR.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/HrhQecsY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DDA06Sqv.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bi9Axj3V.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CjRYYbsC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D8Bpf7sE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DNMF9lr0.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><script type="module" src="/_nuxt/Co0ISufR.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/z9IMa9Iy.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"a2ba436a-230e-43f9-884e-0a5d37f5ba22",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793080428200,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/BpR5gMZX.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.ChOvfapw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BpR5gMZX.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuVRe79A.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BXQZAVYz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CZc2Mypg.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/FCuSfyjP.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D8NAsEfE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CviJuCa4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEBhVwtl.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BQSM1Ln0.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DwNOEVN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DhkiugsE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/joIhBaO-.js"><script type="module" src="/_nuxt/BpR5gMZX.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/BvaAl29K.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"24603984-d514-4dff-badc-898a1fd5e770",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1792961158552,false]</script></body></html>
1
+ <!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/Co0ISufR.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.CTKz4ouw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Co0ISufR.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/HrhQecsY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DDA06Sqv.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bi9Axj3V.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CjRYYbsC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D8Bpf7sE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DNMF9lr0.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><script type="module" src="/_nuxt/Co0ISufR.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/z9IMa9Iy.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"a2ba436a-230e-43f9-884e-0a5d37f5ba22",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793080428201,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/BpR5gMZX.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.ChOvfapw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BpR5gMZX.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuVRe79A.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BXQZAVYz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CZc2Mypg.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/FCuSfyjP.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D8NAsEfE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CviJuCa4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEBhVwtl.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BQSM1Ln0.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DwNOEVN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DhkiugsE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/joIhBaO-.js"><script type="module" src="/_nuxt/BpR5gMZX.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/BvaAl29K.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"24603984-d514-4dff-badc-898a1fd5e770",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1792961158552,false]</script></body></html>
1
+ <!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/Co0ISufR.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.CTKz4ouw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Co0ISufR.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/HrhQecsY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DDA06Sqv.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bi9Axj3V.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CjRYYbsC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D8Bpf7sE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DNMF9lr0.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><script type="module" src="/_nuxt/Co0ISufR.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/z9IMa9Iy.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"a2ba436a-230e-43f9-884e-0a5d37f5ba22",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793080428201,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/BpR5gMZX.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.ChOvfapw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BpR5gMZX.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuVRe79A.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BXQZAVYz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CZc2Mypg.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/FCuSfyjP.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D8NAsEfE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CviJuCa4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEBhVwtl.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BQSM1Ln0.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DwNOEVN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DhkiugsE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/joIhBaO-.js"><script type="module" src="/_nuxt/BpR5gMZX.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/BvaAl29K.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"24603984-d514-4dff-badc-898a1fd5e770",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1792961158553,false]</script></body></html>
1
+ <!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/Co0ISufR.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.CTKz4ouw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Co0ISufR.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/HrhQecsY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DDA06Sqv.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bi9Axj3V.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CjRYYbsC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D8Bpf7sE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DNMF9lr0.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><script type="module" src="/_nuxt/Co0ISufR.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/z9IMa9Iy.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"a2ba436a-230e-43f9-884e-0a5d37f5ba22",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793080428202,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/BpR5gMZX.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.ChOvfapw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BpR5gMZX.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuVRe79A.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BXQZAVYz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CZc2Mypg.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/FCuSfyjP.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D8NAsEfE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CviJuCa4.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DEBhVwtl.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BQSM1Ln0.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DwNOEVN_.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DhkiugsE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/joIhBaO-.js"><script type="module" src="/_nuxt/BpR5gMZX.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/BvaAl29K.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"24603984-d514-4dff-badc-898a1fd5e770",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1792961158552,false]</script></body></html>
1
+ <!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>敏捷看板</title><script type="importmap">{"imports":{"#entry":"/_nuxt/Co0ISufR.js"}}</script><link rel="stylesheet" href="/_nuxt/entry.CTKz4ouw.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Co0ISufR.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/u88eXCXy.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DZo3dYLJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/51OWHj8c.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CsyY7ot8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Baq-Hrpf.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSaWoFHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/oXSDGTSr.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuBpFHLu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DsF2J4jZ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BJW3UkS7.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/HrhQecsY.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DLkAKotw.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Vo4wMbnS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CuJUHLl8.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CK9_veoz.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bb3Limos.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DDA06Sqv.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B43-KCi6.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BuOKDFiJ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D3YCAmfu.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/B_SlFcWp.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bi9Axj3V.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/CjRYYbsC.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/D8Bpf7sE.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DNMF9lr0.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/ChJuu-Ky.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C9StZL3D.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/BPTrRhcw.js"><script type="module" src="/_nuxt/Co0ISufR.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/_nuxt/z9IMa9Iy.js"><link rel="prefetch" as="script" crossorigin href="/_nuxt/DHihWhf5.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-404.BFmXOnCT.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/CoPhTDCT.js"><link rel="prefetch" as="style" crossorigin href="/_nuxt/error-500.BZ-DdjQ6.css"><link rel="prefetch" as="script" crossorigin href="/_nuxt/3G_ZLrk2.js"></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/",buildId:"a2ba436a-230e-43f9-884e-0a5d37f5ba22",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1793080428201,false]</script></body></html>
@@ -12,7 +12,7 @@
12
12
  * scrum-skills validate [dir] 校验敏捷数据(默认当前目录)
13
13
  */
14
14
  import { cpSync, mkdirSync, existsSync, writeFileSync, readFileSync, readdirSync, statSync } from 'node:fs';
15
- import { join, resolve, dirname } from 'node:path';
15
+ import { join, resolve, dirname, basename } from 'node:path';
16
16
  import { spawnSync } from 'node:child_process';
17
17
  import { fileURLToPath } from 'node:url';
18
18
 
@@ -31,6 +31,20 @@ scsk 是 scrum-skills 的等价简写,如: scsk serve`;
31
31
  const [cmd, ...args] = process.argv.slice(2);
32
32
  const fail = msg => { console.error(`✘ ${msg}`); process.exit(1); };
33
33
 
34
+ /**
35
+ * 备份一个即将被覆盖的文件,返回备份路径。
36
+ * 名字带时间戳:老做法固定叫 `*.bak`,第二次 update 就把上一次的备份顶掉了,
37
+ * 而 AGENTS.md 几乎一定会被本地改过,备份互相覆盖等于没备份。
38
+ */
39
+ function backupFile(file) {
40
+ const d = new Date();
41
+ const pad = n => String(n).padStart(2, '0');
42
+ const stamp = `${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;
43
+ let target = `${file}.${stamp}.bak`;
44
+ for (let i = 2; existsSync(target); i += 1) target = `${file}.${stamp}-${i}.bak`;
45
+ cpSync(file, target);
46
+ return target;
47
+ }
34
48
  function init() {
35
49
  const force = args.includes('--force');
36
50
  const dir = resolve(args.find(a => !a.startsWith('--')) || process.cwd());
@@ -38,9 +52,9 @@ function init() {
38
52
 
39
53
  const agentsMd = join(dir, 'AGENTS.md');
40
54
  if (existsSync(agentsMd) && !force)
41
- fail(`目标目录已有 AGENTS.md。确认覆盖请加 --force(旧文件会备份为 AGENTS.md.bak)`);
42
- const backed = existsSync(agentsMd);
43
- if (backed) cpSync(agentsMd, `${agentsMd}.bak`);
55
+ fail(`目标目录已有 AGENTS.md。确认覆盖请加 --force(旧文件会先备份成 AGENTS.md.<时间戳>.bak)`);
56
+ const backed = existsSync(agentsMd) ? backupFile(agentsMd) : null;
57
+ if (backed) console.log(`· 已把现有 AGENTS.md 备份为 ${basename(backed)}`);
44
58
 
45
59
  cpSync(join(PKG_ROOT, '.agents'), join(dir, '.agents'), { recursive: true, force: true });
46
60
  writeFileSync(agentsMd, readFileSync(join(PKG_ROOT, 'templates/AGENTS.md'), 'utf8'));
@@ -65,7 +79,7 @@ function init() {
65
79
 
66
80
  console.log(`✔ 已初始化到 ${dir}
67
81
  - .agents/skills/ 四个敏捷 skill(planning / sprint / tdd / report)
68
- - AGENTS.md agent 入口纪律文件${backed ? '(旧文件已备份为 AGENTS.md.bak)' : ''}
82
+ - AGENTS.md agent 入口纪律文件${backed ? `(旧文件已备份为 ${basename(backed)})` : ''}
69
83
  - tools/validate.mjs 数据校验脚本
70
84
  - agile/ 三文件结构${created.length ? `(新建 ${created.join('、')})` : '(已存在,未覆盖)'}
71
85
 
@@ -104,6 +118,8 @@ function update() {
104
118
  fail(`${dir} 未初始化(找不到 .agents/ 与 AGENTS.md)。请先运行: scrum-skills init`);
105
119
 
106
120
  const added = [], changed = [], same = [];
121
+ // 相对路径 → 备份文件名,覆盖完统一提示怎么把本地改动捞回来
122
+ const backups = [];
107
123
  for (const { rel, src } of frameworkFiles()) {
108
124
  const dest = join(dir, rel);
109
125
  const srcText = readFileSync(src, 'utf8');
@@ -114,19 +130,26 @@ function update() {
114
130
  if (readFileSync(dest, 'utf8') === srcText) { same.push(rel); continue; }
115
131
  changed.push(rel);
116
132
  if (!dryRun) {
117
- cpSync(dest, `${dest}.bak`); // 覆盖前备份,本地自定义不丢
133
+ const bak = backupFile(dest); // 覆盖前备份,本地自定义不丢
134
+ backups.push({ rel, bak: basename(bak) });
118
135
  writeFileSync(dest, srcText);
119
136
  }
120
137
  }
121
138
 
122
139
  const verb = dryRun ? '(dry-run,未写入)' : '';
140
+ const bakLines = backups.map(b => ` - ${b.rel} 的旧版本 → ${b.bak}`).join('\n');
123
141
  console.log(`✔ skill 框架文件更新完成${verb} — ${dir}
124
142
  - 新增 ${added.length} 个${added.length ? `: ${added.join(', ')}` : ''}
125
- - 更新 ${changed.length} 个(旧文件备份为 *.bak)${changed.length ? `: ${changed.join(', ')}` : ''}
143
+ - 更新 ${changed.length} 个${changed.length ? `: ${changed.join(', ')}` : ''}
126
144
  - 未变 ${same.length} 个
127
- - agile/ 数据目录未做任何改动
128
-
129
- ${changed.length ? '提示: 更新会覆盖目标项目里对框架文件的本地修改(已备份 *.bak)。若目标项目自定义过 skill,请 diff 对比后手动合并。' : '已是最新,无需操作。'}`);
145
+ - agile/ 数据目录未做任何改动${bakLines ? `\n - 覆盖前已备份${bakLines.replace(/^ {2}/gm, '\n ')}` : ''}
146
+
147
+ ${backups.length
148
+ ? `提示: 框架文件是整篇覆盖的,你在这几个文件里的本地改动都在上面的备份里。
149
+ 让 agent 助手(CodeBuddy / Claude Code 等)合并回来即可,直接说:
150
+ 「对比 ${backups[0].rel} 与 ${backups[0].bak},把我的本地改动合并回来」${backups.length > 1 ? `\n (其余 ${backups.length - 1} 个文件同理,备份文件名见上方)` : ''}
151
+ 确认合并无误后再删掉备份。AGENTS.md 是 agent 的入口纪律文件,先合并它、再让它去改别的文件最稳。`
152
+ : '已是最新,无需操作。'}`);
130
153
  }
131
154
 
132
155
  function runTool(script, needPort) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scrum-skills",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "description": "结构化敏捷开发管理 skills + CLI:AI 对话产出结构化敏捷数据,TDD 驱动实施,Nuxt 看板可视化",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -32,7 +32,7 @@
32
32
 
33
33
  ## 状态机(摘要)
34
34
 
35
- - story: `draft → ready → in-progress → review → done`
35
+ - story: `draft → ready → in-progress → review → done`;不做就走 `cancelled`(已取消,终态,不要求验收与任务全 done)
36
36
  - task: `todo → red → green → refactored → done`(只能前进;task 状态编码了 TDD 阶段)
37
37
  - 详细规则与硬约束见 `.agents/skills/scrum-planning/references/schema.md`。
38
38