dev-process-kit 0.0.11 → 0.0.12

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 (34) hide show
  1. package/dist/THIRD_PARTY_LICENSES.md +46 -0
  2. package/dist/chunks/{shared-B_MMP97h.js → shared-BC5MlWBY.js} +155 -348
  3. package/dist/chunks/{shared-BgCDocVX.js → shared-BvuW5NtY.js} +8 -8
  4. package/dist/chunks/{shared-DGI_sFo5.js → shared-BwaDMwUS.js} +8 -8
  5. package/dist/chunks/{shared-DZfXwU7f.js → shared-CLnfjHCQ.js} +1 -1
  6. package/dist/chunks/{shared-BSFZSMH5.js → shared-C__W71Hw.js} +1 -1
  7. package/dist/chunks/shared-CcrRNZCH.js +30 -0
  8. package/dist/chunks/shared-CoDXb-Yj.js +556 -0
  9. package/dist/chunks/shared-D7CMQLaX.js +2323 -0
  10. package/dist/chunks/{shared-CrE-y5oF.js → shared-DBJaP5gF.js} +65 -48
  11. package/dist/chunks/shared-DUq2-pM9.js +2023 -0
  12. package/dist/chunks/{shared-TW6kWbUL.js → shared-DYe0OZr-.js} +4 -4
  13. package/dist/chunks/shared-DhwK_dh_.js +1093 -0
  14. package/dist/chunks/{shared-CHaHI5X3.js → shared-DkkBQzIf.js} +14 -14
  15. package/dist/chunks/shared-aDPp8Vry.js +1 -0
  16. package/dist/chunks/{shared-OGH3pSVq.js → shared-y3FwoRgh.js} +8 -8
  17. package/dist/components.js +1 -1
  18. package/dist/index.js +1 -1
  19. package/dist/templates/delegation-poker.js +1 -1
  20. package/dist/templates/event-storming.js +1 -1
  21. package/dist/templates/example-mapping.js +1 -1
  22. package/dist/templates/grill.js +1 -1
  23. package/dist/templates/plain.js +1 -1
  24. package/dist/templates/prototype.js +1 -1
  25. package/dist/templates/slides.js +1 -1
  26. package/dist/templates/task-board.js +1 -1
  27. package/dist/templates/usm.js +1 -1
  28. package/dist/templates/whiteboard.js +1 -1
  29. package/package.json +1 -1
  30. package/dist/chunks/shared-B4ewpBuM.js +0 -30
  31. package/dist/chunks/shared-B9OVJ7XA.js +0 -556
  32. package/dist/chunks/shared-BHRhwgui.js +0 -1252
  33. package/dist/chunks/shared-CxFItadP.js +0 -1094
  34. package/dist/chunks/shared-DIJgMVpY.js +0 -2239
@@ -0,0 +1,2023 @@
1
+ import{ac as mt,aL as gt,ad as U,ae as z,af as G,aA as $,ag as c,az as D,ai as f,aj as b,aK as ht,a_ as vt,ah as ge,p as g,at as h,v as q,ay as P,P as ft,e as bt,a0 as yt,V as R,R as y,a7 as V,a2 as W,G as kt,a4 as l,aP as M,a3 as m,a8 as xt,j as St,a9 as Tt,aN as $t,aO as wt,A as Et,l as F,a5 as A,aD as N,J as At,B as It,aH as _t,K as he,z as ve,h as Mt,as as Lt,T as fe,a1 as Ot}from"./shared-BC5MlWBY.js";import{s as Dt,r as se,D as Rt}from"./shared-xrCdgpNS.js";import{P as Nt,p as Ct}from"./shared-aDPp8Vry.js";const Yt=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"m16 9-5.5 5.5L8 12"}]],Ut=[["path",{d:"M10.1 2.182a10 10 0 0 1 3.8 0"}],["path",{d:"M13.9 21.818a10 10 0 0 1-3.8 0"}],["path",{d:"M17.609 3.721a10 10 0 0 1 2.69 2.7"}],["path",{d:"M2.182 13.9a10 10 0 0 1 0-3.8"}],["path",{d:"M20.279 17.609a10 10 0 0 1-2.7 2.69"}],["path",{d:"M21.818 10.1a10 10 0 0 1 0 3.8"}],["path",{d:"M3.721 6.391a10 10 0 0 1 2.7-2.69"}],["path",{d:"M6.391 20.279a10 10 0 0 1-2.69-2.7"}]],zt=[["circle",{cx:"12",cy:"12",r:"10"}],["line",{x1:"10",x2:"10",y1:"15",y2:"9"}],["line",{x1:"14",x2:"14",y1:"15",y2:"9"}]],Pt=[["path",{d:"M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z"}],["circle",{cx:"12",cy:"12",r:"10"}]],Vt=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"m15 9-6 6"}],["path",{d:"m9 9 6 6"}]],Bt=[["circle",{cx:"12",cy:"12",r:"10"}]],Gt=[["circle",{cx:"12",cy:"12",r:"10"}],["path",{d:"M12 6v6l4 2"}]],Ft=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"}],["circle",{cx:"12",cy:"12",r:"3"}]],Kt=[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528"}]],jt=[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"}],["path",{d:"M9 18h6"}],["path",{d:"M10 22h4"}]],X=["gray","blue","violet","green","amber","accent"],be=["progress","circle","lightbulb","flag","play","clock","eye","pause","check","x"],Ht=U({id:f(c(),b(1)),name:f(c(),b(1))}),qt=U({id:D,name:f(c(),b(1)),actor:$(c()),steps:z(G(Ht),[])}),Wt=U({id:f(c(),b(1)),name:f(c(),b(1)),timeframe:$(c()),description:$(c())}),ie=ge(X),ne=ge(be),re=f(c(),vt(),ht(e=>/^https?:\/\//i.test(e),"a link must be an http(s) URL")),Xt=U({url:re,label:$(f(c(),b(1)))}),Zt=U({id:D,name:f(c(),b(1)),tone:z(ie),icon:z(ne)}),Jt=U({id:D,name:f(c(),b(1)),description:$(c()),activityId:f(c(),b(1)),stepId:f(c(),b(1)),milestoneId:$(c()),statusId:$(c()),links:$(G(Xt))}),Qt=U({title:$(c()),activities:z(G(qt),[]),milestones:z(G(Wt),[]),statuses:z(G(Zt),[]),stories:z(G(Jt),[])}),ye=e=>X[e%X.length]??"gray",ke=e=>{const t=mt(Qt,e),a=t.statuses[0]?.id,s={...t,stories:a===void 0?t.stories:t.stories.map(d=>d.statusId===void 0?{...d,statusId:a}:d),statuses:t.statuses.map((d,u)=>({...d,tone:d.tone??ye(u),icon:d.icon??"progress"}))},i=new Map;for(const d of s.activities)for(const u of d.steps)i.set(u.id,d.id);const n=new Set(s.milestones.map(d=>d.id)),r=new Set(s.statuses.map(d=>d.id)),o=new Set,p=(d,u)=>{if(o.has(u))throw new Error(`duplicate id "${u}" in ${d}`);o.add(u)};for(const d of s.activities){p("activities",d.id);for(const u of d.steps)p("steps",u.id)}for(const d of s.milestones)p("milestones",d.id);for(const d of s.statuses)p("statuses",d.id);for(const d of s.stories){p("stories",d.id);const u=i.get(d.stepId);if(u===void 0||u!==d.activityId)throw new Error(`story "${d.id}" references unknown activityId/stepId`);if(d.milestoneId!==void 0&&!n.has(d.milestoneId))throw new Error(`story "${d.id}" references unknown milestoneId "${d.milestoneId}"`);const E=(d.links??[]).map(I=>I.url);if(new Set(E).size!==E.length)throw new Error(`story "${d.id}" links the same URL twice`);if(d.statusId!==void 0&&!r.has(d.statusId))throw new Error(`story "${d.id}" references unknown statusId "${d.statusId}"`)}return s},xe=()=>({activities:[],milestones:[],statuses:[],stories:[]}),O=(e,t)=>{if(t!==void 0)return e.activities.find(a=>a.id===t)},oe=(e,t)=>`${e}.${t}`,S=(e,t)=>{if(t===void 0)return;const a=gt(t,2);if(a){const[s,i]=a;if(s===void 0||i===void 0)return;const n=e.activities.find(o=>o.id===s),r=n?.steps.find(o=>o.id===i);return n&&r?{activity:n,step:r}:void 0}if(!t.includes("."))for(const s of e.activities){const i=s.steps.find(n=>n.id===t);if(i)return{activity:s,step:i}}},L=(e,t)=>{if(t!==void 0)return e.milestones.find(a=>a.id===t)},w=(e,t)=>{if(t!==void 0)return e.statuses.find(a=>a.id===t)},x=(e,t)=>{if(t!==void 0)return e.stories.find(a=>a.id===t)},de=e=>e.activities.flatMap(t=>t.steps.map(a=>({activity:t,step:a}))),ea=e=>({...e,stories:Dt(e.stories,[t=>`${t.activityId}/${t.stepId}/${t.milestoneId??""}`])}),Z=(e,t,a)=>e.stories.filter(s=>s.stepId===t&&(s.milestoneId??void 0)===a),Se=(e,t,a)=>e.stories.filter(s=>s.activityId===t&&(s.milestoneId??void 0)===a),B=e=>[...e.activities.map(t=>t.id),...e.activities.flatMap(t=>t.steps.map(a=>a.id)),...e.milestones.map(t=>t.id),...e.statuses.map(t=>t.id),...e.stories.map(t=>t.id)],Te=(e,t)=>e.stories.filter(a=>a.stepId===t).length,v={SET_ACTIVITY_NAME:g("SET_ACTIVITY_NAME","activity",h({name:f(c(),b(1))})),SET_ACTIVITY_ACTOR:g("SET_ACTIVITY_ACTOR","activity",h({actor:c()})),SET_STEP_NAME:g("SET_STEP_NAME","step",h({name:f(c(),b(1))})),REORDER_STEP:g("REORDER_STEP","step",h({after:P(c())}),{mode:"sequence"}),ADD_ACTIVITY:g("ADD_ACTIVITY","page",h({id:D,name:f(c(),b(1))}),{dedupeKey:q}),ADD_STEP:g("ADD_STEP","activity",h({id:D,name:f(c(),b(1))}),{dedupeKey:q}),DELETE_ACTIVITY:g("DELETE_ACTIVITY","activity",h({})),DELETE_STEP:g("DELETE_STEP","step",h({})),SET_STORY_NAME:g("SET_STORY_NAME","story",h({name:f(c(),b(1))})),SET_STORY_DESCRIPTION:g("SET_STORY_DESCRIPTION","story",h({description:c()})),SET_STORY_MILESTONE:g("SET_STORY_MILESTONE","story",h({milestoneId:P(c())})),MOVE_STORY:g("MOVE_STORY","story",h({activityId:f(c(),b(1)),stepId:f(c(),b(1)),milestoneId:P(c()),after:P(c())}),{mode:"sequence"}),REORDER_STORY:g("REORDER_STORY","story",h({after:P(c())}),{mode:"sequence"}),ADD_STORY:g("ADD_STORY","step",h({id:D,name:f(c(),b(1)),activityId:f(c(),b(1)),milestoneId:$(c())}),{dedupeKey:q}),DELETE_STORY:g("DELETE_STORY","story",h({})),ADD_STORY_LINK:g("ADD_STORY_LINK","story",h({url:re,label:$(f(c(),b(1)))})),REMOVE_STORY_LINK:g("REMOVE_STORY_LINK","story",h({url:c()})),SET_STORY_STATUS:g("SET_STORY_STATUS","story",h({statusId:f(c(),b(1))})),SET_MILESTONE_NAME:g("SET_MILESTONE_NAME","milestone",h({name:f(c(),b(1))})),ADD_MILESTONE:g("ADD_MILESTONE","page",h({id:D,name:f(c(),b(1))}),{dedupeKey:q}),DELETE_MILESTONE:g("DELETE_MILESTONE","milestone",h({})),REORDER_MILESTONE:g("REORDER_MILESTONE","milestone",h({after:P(c())}),{mode:"sequence"}),ADD_STATUS:g("ADD_STATUS","page",h({id:D,name:f(c(),b(1)),tone:ie,icon:$(ne)}),{dedupeKey:q}),SET_STATUS_NAME:g("SET_STATUS_NAME","status",h({name:f(c(),b(1))})),SET_STATUS_TONE:g("SET_STATUS_TONE","status",h({tone:ie})),SET_STATUS_ICON:g("SET_STATUS_ICON","status",h({icon:ne})),DELETE_STATUS:g("DELETE_STATUS","status",h({})),REORDER_STATUS:g("REORDER_STATUS","status",h({after:P(c())}),{mode:"sequence"})},ta={setActivityName:(e,t)=>({type:"SET_ACTIVITY_NAME",target:{type:"activity",id:e},payload:{name:t}}),setStepName:(e,t)=>({type:"SET_STEP_NAME",target:{type:"step",id:e},payload:{name:t}})},$e=(e,t)=>{const a=ft(v,t);if(a===null)return null;const s=a.target.id;switch(a.type){case"SET_ACTIVITY_NAME":{const{name:i}=a.payload;return e.activities.some(n=>n.id===s)?{...e,activities:e.activities.map(n=>n.id===s?{...n,name:i}:n)}:null}case"SET_ACTIVITY_ACTOR":{const i=a.payload.actor.trim();return e.activities.some(n=>n.id===s)?{...e,activities:e.activities.map(n=>{if(n.id!==s)return n;const{actor:r,...o}=n;return i===""?o:{...o,actor:i}})}:null}case"SET_STEP_NAME":{const{name:i}=a.payload,n=S(e,s);return n?{...e,activities:e.activities.map(r=>r.id===n.activity.id?{...r,steps:r.steps.map(o=>o.id===n.step.id?{...o,name:i}:o)}:r)}:null}case"REORDER_STEP":{const{after:i}=a.payload,n=S(e,s);if(!n)return null;const r=i===null?null:S(e,i);if(i!==null&&(!r||r.activity.id!==n.activity.id))return null;const o=pe(n.activity.steps,n.step.id,r?.step.id??null);return o===null?null:{...e,activities:e.activities.map(p=>p.id===n.activity.id?{...p,steps:o}:p)}}case"ADD_ACTIVITY":{const i=a.payload;return e.activities.some(n=>n.id===i.id)?e:{...e,activities:[...e.activities,{id:i.id,name:i.name,steps:[]}]}}case"ADD_STEP":{const i=a.payload,n=e.activities.find(r=>r.id===s);return n?n.steps.some(r=>r.id===i.id)?e:{...e,activities:e.activities.map(r=>r.id===s?{...r,steps:[...r.steps,{id:i.id,name:i.name}]}:r)}:null}case"DELETE_ACTIVITY":{const i=e.activities.find(r=>r.id===s);if(!i)return null;const n=new Set(i.steps.map(r=>r.id));return{...e,activities:e.activities.filter(r=>r.id!==s),stories:e.stories.filter(r=>r.activityId!==s&&!n.has(r.stepId))}}case"DELETE_STEP":{const i=S(e,s);return i?{...e,activities:e.activities.map(n=>n.id===i.activity.id?{...n,steps:n.steps.filter(r=>r.id!==i.step.id)}:n),stories:e.stories.filter(n=>n.activityId!==i.activity.id||n.stepId!==i.step.id)}:null}case"SET_STORY_NAME":{const{name:i}=a.payload;return K(e,s,n=>({...n,name:i}))}case"SET_STORY_DESCRIPTION":{const{description:i}=a.payload;return K(e,s,n=>({...n,description:i}))}case"SET_STORY_MILESTONE":{const{milestoneId:i}=a.payload;return i!==null&&!L(e,i)?null:K(e,s,n=>i===null?le(n):{...n,milestoneId:i})}case"MOVE_STORY":{const i=a.payload,n=x(e,s);if(!n)return null;const r=S(e,i.stepId);if(!r||r.activity.id!==i.activityId||i.milestoneId!==null&&!L(e,i.milestoneId))return null;const o=i.milestoneId??void 0,p=o===void 0?{...le(n),activityId:r.activity.id,stepId:r.step.id}:{...n,activityId:r.activity.id,stepId:r.step.id,milestoneId:o};return we(e,p,i.after)}case"REORDER_STORY":{const{after:i}=a.payload,n=x(e,s);return n?we(e,n,i,!0):null}case"ADD_STORY":{const i=a.payload,n=S(e,t.target.id);if(!n||n.activity.id!==i.activityId||i.milestoneId!==void 0&&!L(e,i.milestoneId))return null;if(e.stories.some(o=>o.id===i.id))return e;const r={id:i.id,name:i.name,activityId:i.activityId,stepId:n.step.id,...i.milestoneId===void 0?{}:{milestoneId:i.milestoneId},...e.statuses[0]===void 0?{}:{statusId:e.statuses[0].id}};return{...e,stories:[...e.stories,r]}}case"DELETE_STORY":return e.stories.some(i=>i.id===s)?{...e,stories:e.stories.filter(i=>i.id!==s)}:null;case"ADD_STORY_LINK":{const{url:i,label:n}=a.payload,r=x(e,s);if(!r)return null;if(r.links?.some(p=>p.url===i))return e;const o=n===void 0?{url:i}:{url:i,label:n};return K(e,s,p=>({...p,links:[...p.links??[],o]}))}case"REMOVE_STORY_LINK":{const{url:i}=a.payload;return x(e,s)?.links?.some(r=>r.url===i)?K(e,s,r=>{const o=(r.links??[]).filter(u=>u.url!==i),{links:p,...d}=r;return o.length===0?d:{...d,links:o}}):null}case"SET_STORY_STATUS":{const{statusId:i}=a.payload;return w(e,i)?K(e,s,n=>({...n,statusId:i})):null}case"SET_MILESTONE_NAME":{const{name:i}=a.payload;return e.milestones.some(n=>n.id===s)?{...e,milestones:e.milestones.map(n=>n.id===s?{...n,name:i}:n)}:null}case"ADD_MILESTONE":{const i=a.payload;return e.milestones.some(n=>n.id===i.id)?e:{...e,milestones:[...e.milestones,{id:i.id,name:i.name}]}}case"DELETE_MILESTONE":return e.milestones.some(i=>i.id===s)?{...e,milestones:e.milestones.filter(i=>i.id!==s),stories:e.stories.map(i=>i.milestoneId===s?le(i):i)}:null;case"REORDER_MILESTONE":{const{after:i}=a.payload,n=pe(e.milestones,s,i);return n===null?null:{...e,milestones:n}}case"ADD_STATUS":{const{id:i,name:n,tone:r,icon:o}=a.payload;if(e.statuses.some(d=>d.id===i))return e;const p=[...e.statuses,{id:i,name:n,tone:r,icon:o??"progress"}];return e.statuses.length===0?{...e,statuses:p,stories:e.stories.map(d=>({...d,statusId:i}))}:{...e,statuses:p}}case"SET_STATUS_NAME":{const{name:i}=a.payload;return w(e,s)?{...e,statuses:e.statuses.map(n=>n.id===s?{...n,name:i}:n)}:null}case"SET_STATUS_TONE":{const{tone:i}=a.payload;return w(e,s)?{...e,statuses:e.statuses.map(n=>n.id===s?{...n,tone:i}:n)}:null}case"SET_STATUS_ICON":{const{icon:i}=a.payload;return w(e,s)?{...e,statuses:e.statuses.map(n=>n.id===s?{...n,icon:i}:n)}:null}case"DELETE_STATUS":{if(!w(e,s))return null;const i=e.statuses.filter(r=>r.id!==s),n=i[0]?.id;return{...e,statuses:i,stories:e.stories.map(r=>r.statusId!==s?r:n===void 0?aa(r):{...r,statusId:n})}}case"REORDER_STATUS":{const{after:i}=a.payload,n=pe(e.statuses,s,i);return n===null?null:{...e,statuses:n}}default:return bt(a)}},K=(e,t,a)=>e.stories.some(s=>s.id===t)?{...e,stories:e.stories.map(s=>s.id===t?a(s):s)}:null,le=e=>{const{milestoneId:t,...a}=e;return a},aa=e=>{const{statusId:t,...a}=e;return a},we=(e,t,a,s=!1)=>{const i=t.milestoneId??void 0,n=e.stories.filter(k=>k.id!==t.id),r=n.filter(k=>k.stepId===t.stepId&&(k.milestoneId??void 0)===i);if(a!==null){const k=n.find(_=>_.id===a);if(!k||k.stepId!==t.stepId||(k.milestoneId??void 0)!==i)return null;if(s){const _=x(e,t.id);if(!_||k.stepId!==_.stepId||(k.milestoneId??void 0)!==(_.milestoneId??void 0))return null}}const o=a===null?[t,...r]:Ee(r,t,a),p=n.findIndex(k=>k.stepId===t.stepId&&(k.milestoneId??void 0)===i),d=new Set(r.map(k=>k.id)),u=n.filter(k=>!d.has(k.id)),E=p<0?u.length:Math.min(p,u.length),I=[...u.slice(0,E),...o,...u.slice(E)];return{...e,stories:I}},pe=(e,t,a)=>{if(!e.some(n=>n.id===t)||a!==null&&!e.some(n=>n.id===a))return null;if(a===t)return[...e];const s=e.find(n=>n.id===t);if(s===void 0)return null;const i=e.filter(n=>n.id!==t);return Ee(i,s,a)},Ee=(e,t,a)=>{const s=[...e],i=a===null?-1:s.findIndex(n=>n.id===a);return s.splice(i+1,0,t),s},J=yt({en:{renameActivity:"Rename activity",changeActivityActor:"Change whose experience",renameStep:"Rename step",reorderStep:"Reorder step",addActivity:"Add activity",addStep:"Add step",deleteActivity:"Delete activity",deleteStep:"Delete step",renameStory:"Rename story",updateStoryDescription:"Update story description",changeMilestone:"Change milestone",moveStory:"Move story",reorderStory:"Reorder story",addStory:"Add story",deleteStory:"Delete story",renameMilestone:"Rename milestone",addMilestone:"Add milestone",deleteMilestone:"Delete milestone",reorderMilestone:"Reorder milestone",changeStoryStatus:"Change story status",addStatus:"Add status",renameStatus:"Rename status",changeStatusTone:"Change status color",changeStatusIcon:"Change status icon",addStoryLink:"Link to story",removeStoryLink:"Unlink from story",deleteStatus:"Delete status",reorderStatus:"Reorder status",toValue:e=>`\u2192 \u201C${e}\u201D`,fromTo:(e,t)=>`\u201C${e}\u201D \u2192 \u201C${t}\u201D`,added:e=>`+ \u201C${e}\u201D`,removed:e=>`\u2212 \u201C${e}\u201D`,toFront:"\u2192 To the front",afterName:e=>`\u2192 Right after \u201C${e}\u201D`,toUnassigned:"\u2192 Unassigned",toName:e=>`\u2192 ${e}`,activityGroup:"Activity",stepGroup:"Step",storyGroup:"Story",milestoneGroup:"Milestone",statusGroup:"Status",mapGroup:"Map",targetLabel:(e,t)=>`${e} \xB7 ${t}`,targetMissing:(e,t)=>`${e} \xB7 ${t} (missing)`,wholeMap:"Whole map",unassigned:"Unassigned",emptyTitle:"No backbone yet",emptyBody:"Add activities and steps, and the story map appears here.",firstActivityButton:"+ First activity",groupingLabel:"Group by",groupViewTab:"Activity group",groupAxisHeader:"Activity group \u2192",activityAxis:"Activity \u2192",milestoneAxis:"Milestone \u2193",stepNameLabel:"Step name",activityNameLabel:"Activity name",milestoneNameLabel:"Milestone name",addStepAria:"Add a step to this activity",newActivityButton:"+ Activity",newMilestoneButton:"+ Milestone",addCellButton:"+ Add",addStoryCellAria:"Add a story to this cell",storyCount:e=>e===1?"1 story":`${e} stories`,pageTabsLabel:"Page",mapTab:"User Story Mapping",milestonesTab:"Milestones",statusesTab:"Statuses",shareOfStories:e=>`${e}% of all stories`,coverageLabel:"Backbone coverage",coverage:(e,t)=>`${e} / ${t} steps`,storiesLabel:"Stories",timeframeUnset:"Timing not set",milestoneNoDescription:"No description yet.",noMilestonesTitle:"No milestones yet",noMilestonesBody:"Add a milestone to slice the map into releases.",commentCountAria:e=>e===1?"1 comment":`${e} comments`,statusNameLabel:"Status name",statusToneLabel:"Color",toneName:e=>({gray:"Gray",blue:"Blue",violet:"Violet",green:"Green",amber:"Amber",accent:"Orange"})[e],statusIconLabel:"Icon",iconName:e=>({progress:"Progress ring",circle:"Circle",lightbulb:"Light bulb",flag:"Flag",play:"Play",clock:"Clock",eye:"Eye",pause:"Pause",check:"Check",x:"Cross"})[e],statusShare:(e,t)=>`${e===1?"1 story":`${e} stories`} \xB7 ${t}%`,statusFilterLabel:"Status",clearFilter:"Clear",progressAria:e=>`Progress: ${e}`,activityActorLabel:"Who",noStatusesTitle:"No statuses yet",noStatusesBody:"Add statuses such as Idea / Ready / Done, and the map colors each story by where it stands.",newStatusButton:"+ Status",moveUpAria:"Move up",moveDownAria:"Move down",deleteStatusAria:"Delete this status",moveDialogLabel:"Step to move to",moveDialogSelectLabel:"Destination",moveConfirm:"Move",moveCancel:"Cancel",storyStatusLabel:"Status",panelLabel:e=>`Story: ${e}`,closePanelAria:"Close",storyTitleLabel:"Title",storyDescriptionLabel:"Description",storyLinksLabel:"Links",linkUrlLabel:"URL",addLinkButton:"Add",removeLinkAria:e=>`Remove ${e}`,deleteStoryButton:"Delete story",storyCommentsLabel:"Comments",commentSubmit:"Comment",storyStatusAria:e=>`Status: ${e}`,newActivityName:"New activity",newStepName:"New step",newMilestoneName:"New milestone",newStoryName:"New story",newStatusName:"New status"},ja:{renameActivity:"\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u540D\u3092\u5909\u66F4",changeActivityActor:"\u4F53\u9A13\u3059\u308B\u4EBA\u3092\u5909\u66F4",renameStep:"\u30B9\u30C6\u30C3\u30D7\u540D\u3092\u5909\u66F4",reorderStep:"\u30B9\u30C6\u30C3\u30D7\u306E\u9806\u5E8F\u3092\u5909\u66F4",addActivity:"\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u3092\u8FFD\u52A0",addStep:"\u30B9\u30C6\u30C3\u30D7\u3092\u8FFD\u52A0",deleteActivity:"\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u3092\u524A\u9664",deleteStep:"\u30B9\u30C6\u30C3\u30D7\u3092\u524A\u9664",renameStory:"\u30B9\u30C8\u30FC\u30EA\u30FC\u540D\u3092\u5909\u66F4",updateStoryDescription:"\u30B9\u30C8\u30FC\u30EA\u30FC\u306E\u8AAC\u660E\u3092\u66F4\u65B0",changeMilestone:"\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3\u3092\u5909\u66F4",moveStory:"\u30B9\u30C8\u30FC\u30EA\u30FC\u3092\u79FB\u52D5",reorderStory:"\u30B9\u30C8\u30FC\u30EA\u30FC\u306E\u9806\u5E8F\u3092\u5909\u66F4",addStory:"\u30B9\u30C8\u30FC\u30EA\u30FC\u3092\u8FFD\u52A0",deleteStory:"\u30B9\u30C8\u30FC\u30EA\u30FC\u3092\u524A\u9664",renameMilestone:"\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3\u540D\u3092\u5909\u66F4",addMilestone:"\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3\u3092\u8FFD\u52A0",deleteMilestone:"\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3\u3092\u524A\u9664",reorderMilestone:"\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3\u306E\u9806\u5E8F\u3092\u5909\u66F4",changeStoryStatus:"\u30B9\u30C8\u30FC\u30EA\u30FC\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u5909\u66F4",addStatus:"\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u8FFD\u52A0",renameStatus:"\u30B9\u30C6\u30FC\u30BF\u30B9\u540D\u3092\u5909\u66F4",changeStatusTone:"\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u8272\u3092\u5909\u66F4",changeStatusIcon:"\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u30A2\u30A4\u30B3\u30F3\u3092\u5909\u66F4",addStoryLink:"\u30B9\u30C8\u30FC\u30EA\u30FC\u306B\u30EA\u30F3\u30AF\u3092\u8FFD\u52A0",removeStoryLink:"\u30B9\u30C8\u30FC\u30EA\u30FC\u306E\u30EA\u30F3\u30AF\u3092\u524A\u9664",deleteStatus:"\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u524A\u9664",reorderStatus:"\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u9806\u5E8F\u3092\u5909\u66F4",toValue:e=>`\u2192 \u300C${e}\u300D`,fromTo:(e,t)=>`\u300C${e}\u300D\u2192\u300C${t}\u300D`,added:e=>`+ \u300C${e}\u300D`,removed:e=>`\u2212 \u300C${e}\u300D`,toFront:"\u2192 \u5148\u982D\u3078",afterName:e=>`\u2192 \u300C${e}\u300D\u306E\u76F4\u5F8C\u3078`,toUnassigned:"\u2192 \u672A\u5272\u5F53\u3078",toName:e=>`\u2192 ${e}`,activityGroup:"\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3",stepGroup:"\u30B9\u30C6\u30C3\u30D7",storyGroup:"\u30B9\u30C8\u30FC\u30EA\u30FC",milestoneGroup:"\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3",statusGroup:"\u30B9\u30C6\u30FC\u30BF\u30B9",mapGroup:"\u30DE\u30C3\u30D7",targetLabel:(e,t)=>`${e} \xB7 ${t}`,targetMissing:(e,t)=>`${e} \xB7 ${t} (missing)`,wholeMap:"\u30DE\u30C3\u30D7\u5168\u4F53",unassigned:"\u672A\u5272\u5F53",emptyTitle:"\u30D0\u30C3\u30AF\u30DC\u30FC\u30F3\u304C\u307E\u3060\u3042\u308A\u307E\u305B\u3093",emptyBody:"\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u3068\u30B9\u30C6\u30C3\u30D7\u3092\u8FFD\u52A0\u3059\u308B\u3068\u3001\u3053\u3053\u306B\u30B9\u30C8\u30FC\u30EA\u30FC\u30DE\u30C3\u30D7\u304C\u73FE\u308C\u307E\u3059\u3002",firstActivityButton:"+ \u6700\u521D\u306E\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3",groupingLabel:"\u307E\u3068\u3081\u308B\u5358\u4F4D",groupViewTab:"\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u30B0\u30EB\u30FC\u30D7",groupAxisHeader:"\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u30B0\u30EB\u30FC\u30D7 \u2192",activityAxis:"\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3 \u2192",milestoneAxis:"\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3 \u2193",stepNameLabel:"\u30B9\u30C6\u30C3\u30D7\u540D",activityNameLabel:"\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u540D",milestoneNameLabel:"\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3\u540D",addStepAria:"\u3053\u306E\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u306B\u30B9\u30C6\u30C3\u30D7\u3092\u8FFD\u52A0",newActivityButton:"+ \u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3",newMilestoneButton:"+ \u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3",addCellButton:"+ \u8FFD\u52A0",addStoryCellAria:"\u3053\u306E\u30DE\u30B9\u306B\u30B9\u30C8\u30FC\u30EA\u30FC\u3092\u8FFD\u52A0",storyCount:e=>`${e} \u30B9\u30C8\u30FC\u30EA\u30FC`,pageTabsLabel:"\u30DA\u30FC\u30B8",mapTab:"User Story Mapping",milestonesTab:"\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3",statusesTab:"\u30B9\u30C6\u30FC\u30BF\u30B9",shareOfStories:e=>`\u5168\u30B9\u30C8\u30FC\u30EA\u30FC\u306E ${e}%`,coverageLabel:"\u30D0\u30C3\u30AF\u30DC\u30FC\u30F3\u306E\u7DB2\u7F85",coverage:(e,t)=>`${e} / ${t} \u30B9\u30C6\u30C3\u30D7`,storiesLabel:"\u30B9\u30C8\u30FC\u30EA\u30FC",timeframeUnset:"\u6642\u671F\u672A\u5B9A",milestoneNoDescription:"\u8AAC\u660E\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002",noMilestonesTitle:"\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3\u304C\u307E\u3060\u3042\u308A\u307E\u305B\u3093",noMilestonesBody:"\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3\u3092\u8FFD\u52A0\u3059\u308B\u3068\u3001\u30DE\u30C3\u30D7\u3092\u30EA\u30EA\u30FC\u30B9\u3054\u3068\u306B\u533A\u5207\u308C\u307E\u3059\u3002",commentCountAria:e=>`\u30B3\u30E1\u30F3\u30C8 ${e} \u4EF6`,statusNameLabel:"\u30B9\u30C6\u30FC\u30BF\u30B9\u540D",statusToneLabel:"\u8272",toneName:e=>({gray:"\u30B0\u30EC\u30FC",blue:"\u9752",violet:"\u7D2B",green:"\u7DD1",amber:"\u9EC4",accent:"\u30AA\u30EC\u30F3\u30B8"})[e],statusIconLabel:"\u30A2\u30A4\u30B3\u30F3",iconName:e=>({progress:"\u9032\u6357\u30EA\u30F3\u30B0",circle:"\u5186",lightbulb:"\u96FB\u7403",flag:"\u65D7",play:"\u518D\u751F",clock:"\u6642\u8A08",eye:"\u76EE",pause:"\u4E00\u6642\u505C\u6B62",check:"\u30C1\u30A7\u30C3\u30AF",x:"\u30D0\u30C4"})[e],statusShare:(e,t)=>`${e} \u30B9\u30C8\u30FC\u30EA\u30FC \xB7 ${t}%`,statusFilterLabel:"\u30B9\u30C6\u30FC\u30BF\u30B9",clearFilter:"\u30AF\u30EA\u30A2",progressAria:e=>`\u9032\u307F\u5177\u5408: ${e}`,activityActorLabel:"\u8AB0\u306E\u4F53\u9A13",noStatusesTitle:"\u30B9\u30C6\u30FC\u30BF\u30B9\u304C\u307E\u3060\u3042\u308A\u307E\u305B\u3093",noStatusesBody:"Idea / Ready / Done \u306E\u3088\u3046\u306A\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u8FFD\u52A0\u3059\u308B\u3068\u3001\u30DE\u30C3\u30D7\u306E\u30AB\u30FC\u30C9\u304C\u9032\u307F\u5177\u5408\u3067\u8272\u5206\u3051\u3055\u308C\u307E\u3059\u3002",newStatusButton:"+ \u30B9\u30C6\u30FC\u30BF\u30B9",moveUpAria:"\u4E0A\u3078\u79FB\u52D5",moveDownAria:"\u4E0B\u3078\u79FB\u52D5",deleteStatusAria:"\u3053\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u524A\u9664",moveDialogLabel:"\u79FB\u52D5\u5148\u306E\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3",moveDialogSelectLabel:"\u79FB\u52D5\u5148",moveConfirm:"\u79FB\u52D5\u3059\u308B",moveCancel:"\u30AD\u30E3\u30F3\u30BB\u30EB",storyStatusLabel:"\u30B9\u30C6\u30FC\u30BF\u30B9",panelLabel:e=>`\u30B9\u30C8\u30FC\u30EA\u30FC: ${e}`,closePanelAria:"\u9589\u3058\u308B",storyTitleLabel:"\u30BF\u30A4\u30C8\u30EB",storyDescriptionLabel:"\u8AAC\u660E",storyLinksLabel:"\u30EA\u30F3\u30AF",linkUrlLabel:"URL",addLinkButton:"\u8FFD\u52A0",removeLinkAria:e=>`${e} \u3092\u5916\u3059`,deleteStoryButton:"\u30B9\u30C8\u30FC\u30EA\u30FC\u3092\u524A\u9664",storyCommentsLabel:"\u30B3\u30E1\u30F3\u30C8",commentSubmit:"\u30B3\u30E1\u30F3\u30C8\u3059\u308B",storyStatusAria:e=>`\u30B9\u30C6\u30FC\u30BF\u30B9: ${e}`,newActivityName:"\u65B0\u3057\u3044\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3",newStepName:"\u65B0\u3057\u3044\u30B9\u30C6\u30C3\u30D7",newMilestoneName:"\u65B0\u3057\u3044\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3",newStoryName:"\u65B0\u3057\u3044\u30B9\u30C8\u30FC\u30EA\u30FC",newStatusName:"\u65B0\u3057\u3044\u30B9\u30C6\u30FC\u30BF\u30B9"}}),ce=/^[A-Z][A-Z0-9]+-\d+$/,Ae=e=>{let t=e;try{t=decodeURIComponent(e)}catch{}return t.replace(/[-_+]+/g," ").trim()},sa=(e,t)=>{if(e!=="github.com")return null;const[a,s,i,n]=t;if(a===void 0)return{kind:"github",text:"GitHub",title:"github.com"};if(s===void 0)return{kind:"github",text:a,title:a};const r=`${a}/${s}`;return(i==="issues"||i==="pull"||i==="discussions")&&n&&/^\d+$/.test(n)?{kind:"github",text:`#${n}`,title:`${r}#${n}`}:i==="commit"&&n?{kind:"github",text:n.slice(0,7),title:`${r}@${n}`}:{kind:"github",text:r,title:r}},ia=(e,t)=>{if(e!=="gitlab.com")return null;const a=t.indexOf("-"),s=(a<0?t:t.slice(0,a)).join("/"),i=a<0?void 0:t[a+1],n=a<0?void 0:t[a+2];if(n&&/^\d+$/.test(n)){if(i==="issues")return{kind:"gitlab",text:`#${n}`,title:`${s}#${n}`};if(i==="merge_requests")return{kind:"gitlab",text:`!${n}`,title:`${s}!${n}`}}return{kind:"gitlab",text:s||"GitLab",title:s||e}},na=(e,t,a)=>{if(!t.endsWith(".atlassian.net")&&!t.startsWith("jira."))return null;const s=(a[0]==="browse"?a[1]:void 0)??e.searchParams.get("selectedIssue")??a.find(i=>ce.test(i));return s&&ce.test(s)?{kind:"jira",text:s,title:`${t} ${s}`}:{kind:"jira",text:"Jira",title:t}},ra=(e,t)=>{if(e!=="linear.app")return null;const a=t[1]==="issue"?t[2]?.toUpperCase():void 0;return a&&ce.test(a)?{kind:"linear",text:a,title:a}:{kind:"linear",text:"Linear",title:e}},oa=(e,t)=>{if(e!=="figma.com")return null;const[a,,s]=t;if((a==="file"||a==="design"||a==="proto"||a==="board")&&s){const i=Ae(s);return{kind:"figma",text:i,title:i}}return{kind:"figma",text:"Figma",title:e}},da=(e,t)=>{if(e!=="notion.so"&&!e.endsWith(".notion.site"))return null;const s=(t.at(-1)??"").replace(/-?[0-9a-f]{32}$/i,""),i=s===""?"Notion":Ae(s);return{kind:"notion",text:i,title:i}},Q=e=>{let t;try{t=new URL(e)}catch{return{kind:"web",text:e,title:e}}const a=t.hostname.replace(/^www\./,""),s=t.pathname.split("/").filter(i=>i!=="");return sa(a,s)??ia(a,s)??na(t,a,s)??ra(a,s)??oa(a,s)??da(a,s)??{kind:"web",text:a,title:e}},Ie=e=>{const t=e.tab;return t==="milestones"||t==="statuses"?t:"map"},ee=e=>{const t=e.statuses.length-1;return e.statuses.map((a,s)=>({id:a.id,name:a.name,tone:a.tone,icon:a.icon,progress:t<=0?1:s/t}))},_e=(e,t)=>e.find(a=>a.id===t.statusId),Me=(e,t)=>ee(e).map(a=>({...a,count:t.filter(s=>s.statusId===a.id).length})).filter(a=>a.count>0),te=(e,t)=>{const a=t.status;if(a===void 0||a==="")return new Set;const s=new Set(a.split(","));return new Set(e.statuses.map(i=>i.id).filter(i=>s.has(i)))},Le=(e,t)=>{const a=e.statuses.map(s=>s.id).filter(s=>t.has(s));return a.length===0?null:a.join(",")},la=(e,t)=>{const a=new Set(e);return a.has(t)?a.delete(t):a.add(t),a},Oe=(e,t)=>e.size===0?!0:t.statusId!==void 0&&e.has(t.statusId),C=(e,t,a)=>{const s=typeof a=="string"?a:"",i=typeof t=="string"?t:void 0;return i===void 0?e.toValue(s):e.fromTo(i,s)},ae=(e,t)=>typeof t=="string"?e.afterName(t):e.toFront,pa={SET_ACTIVITY_NAME:(e,t,a)=>({title:e.renameActivity,tone:"update",body:C(e,O(a,t.target.id)?.name,y(v.SET_ACTIVITY_NAME,t).name??"")}),SET_ACTIVITY_ACTOR:(e,t,a)=>{const s=y(v.SET_ACTIVITY_ACTOR,t).actor.trim();return{title:e.changeActivityActor,tone:"update",body:s===""?e.removed(O(a,t.target.id)?.actor??""):C(e,O(a,t.target.id)?.actor,s)}},SET_STEP_NAME:(e,t,a)=>({title:e.renameStep,tone:"update",body:C(e,S(a,t.target.id)?.step.name,y(v.SET_STEP_NAME,t).name??"")}),REORDER_STEP:(e,t)=>({title:e.reorderStep,tone:"move",body:ae(e,y(v.REORDER_STEP,t).after)}),ADD_ACTIVITY:(e,t)=>({title:e.addActivity,tone:"create",body:e.added(String(y(v.ADD_ACTIVITY,t).name??""))}),ADD_STEP:(e,t)=>({title:e.addStep,tone:"create",body:e.added(String(y(v.ADD_STEP,t).name??""))}),DELETE_ACTIVITY:(e,t,a)=>({title:e.deleteActivity,tone:"delete",body:e.removed(O(a,t.target.id)?.name??t.target.id)}),DELETE_STEP:(e,t,a)=>({title:e.deleteStep,tone:"delete",body:e.removed(S(a,t.target.id)?.step.name??t.target.id)}),SET_STORY_NAME:(e,t,a)=>({title:e.renameStory,tone:"update",body:C(e,x(a,t.target.id)?.name,y(v.SET_STORY_NAME,t).name??"")}),SET_STORY_DESCRIPTION:(e,t)=>({title:e.updateStoryDescription,tone:"update",body:e.toValue(String(y(v.SET_STORY_DESCRIPTION,t).description??"").slice(0,90))}),SET_STORY_MILESTONE:(e,t,a)=>{const s=y(v.SET_STORY_MILESTONE,t).milestoneId;return{title:e.changeMilestone,tone:"move",body:s==null?e.toUnassigned:e.toName(L(a,String(s))?.name??String(s))}},MOVE_STORY:(e,t,a)=>({title:e.moveStory,tone:"move",body:e.toName(S(a,String(y(v.MOVE_STORY,t).stepId))?.step.name??String(y(v.MOVE_STORY,t).stepId??""))}),REORDER_STORY:(e,t)=>({title:e.reorderStory,tone:"move",body:ae(e,y(v.REORDER_STORY,t).after)}),ADD_STORY:(e,t)=>({title:e.addStory,tone:"create",body:e.added(String(y(v.ADD_STORY,t).name??""))}),DELETE_STORY:(e,t,a)=>({title:e.deleteStory,tone:"delete",body:e.removed(x(a,t.target.id)?.name??t.target.id)}),SET_MILESTONE_NAME:(e,t,a)=>({title:e.renameMilestone,tone:"update",body:C(e,L(a,t.target.id)?.name,y(v.SET_MILESTONE_NAME,t).name??"")}),ADD_MILESTONE:(e,t)=>({title:e.addMilestone,tone:"create",body:e.added(String(y(v.ADD_MILESTONE,t).name??""))}),DELETE_MILESTONE:(e,t,a)=>({title:e.deleteMilestone,tone:"delete",body:e.removed(L(a,t.target.id)?.name??t.target.id)}),REORDER_MILESTONE:(e,t)=>({title:e.reorderMilestone,tone:"move",body:ae(e,y(v.REORDER_MILESTONE,t).after)}),ADD_STORY_LINK:(e,t)=>{const{url:a,label:s}=y(v.ADD_STORY_LINK,t);return{title:e.addStoryLink,tone:"create",body:e.added(s??Q(a).title)}},REMOVE_STORY_LINK:(e,t,a)=>{const{url:s}=y(v.REMOVE_STORY_LINK,t),i=x(a,t.target.id)?.links?.find(n=>n.url===s);return{title:e.removeStoryLink,tone:"delete",body:e.removed(i?.label??Q(s).title)}},SET_STORY_STATUS:(e,t,a)=>{const s=y(v.SET_STORY_STATUS,t).statusId;return{title:e.changeStoryStatus,tone:"update",body:e.toName(w(a,s)?.name??s)}},ADD_STATUS:(e,t)=>({title:e.addStatus,tone:"create",body:e.added(y(v.ADD_STATUS,t).name)}),SET_STATUS_NAME:(e,t,a)=>({title:e.renameStatus,tone:"update",body:C(e,w(a,t.target.id)?.name,y(v.SET_STATUS_NAME,t).name)}),SET_STATUS_TONE:(e,t,a)=>{const s=w(a,t.target.id)?.tone,i=y(v.SET_STATUS_TONE,t).tone;return{title:e.changeStatusTone,tone:"update",body:C(e,s===void 0?void 0:e.toneName(s),e.toneName(i))}},SET_STATUS_ICON:(e,t,a)=>{const s=w(a,t.target.id)?.icon,i=y(v.SET_STATUS_ICON,t).icon;return{title:e.changeStatusIcon,tone:"update",body:C(e,s===void 0?void 0:e.iconName(s),e.iconName(i))}},DELETE_STATUS:(e,t,a)=>({title:e.deleteStatus,tone:"delete",body:e.removed(w(a,t.target.id)?.name??t.target.id)}),REORDER_STATUS:(e,t)=>({title:e.reorderStatus,tone:"move",body:ae(e,y(v.REORDER_STATUS,t).after)})},De=(e,t,a,s)=>{let i;try{const n=pa[t.type];i=n?n(e,t,s??a):{title:t.type,tone:"meta"}}catch{i={title:t.type,tone:"meta"}}return{title:i.title,targetLabel:Ne(e,a,t.target),tone:i.tone,...i.body===void 0?{}:{summary:i.body}}},Re=e=>`${e.type} ${R(e.target)} ${JSON.stringify(e.payload)}`,Ne=(e,t,a)=>{try{switch(a.type){case"activity":{const s=O(t,a.id);return s?e.targetLabel(e.activityGroup,s.name):e.targetMissing(e.activityGroup,a.id)}case"step":{const s=S(t,a.id)?.step;return s?e.targetLabel(e.stepGroup,s.name):e.targetMissing(e.stepGroup,a.id)}case"story":{const s=x(t,a.id);return s?e.targetLabel(e.storyGroup,s.name):e.targetMissing(e.storyGroup,a.id)}case"milestone":{const s=L(t,a.id);return s?e.targetLabel(e.milestoneGroup,s.name):e.targetMissing(e.milestoneGroup,a.id)}case"status":{const s=w(t,a.id);return s?e.targetLabel(e.statusGroup,s.name):e.targetMissing(e.statusGroup,a.id)}case"page":return e.targetLabel(e.mapGroup,ue(t));default:return`${a.type} \xB7 ${a.id}`}}catch{return`${a.type} \xB7 ${a.id}`}},Ce=(e,t,a)=>{const s=[{value:"page:usm",label:e.wholeMap,group:e.mapGroup}];for(const i of t.activities){s.push({value:R({type:"activity",id:i.id}),label:i.name,group:e.activityGroup});for(const n of i.steps)s.push({value:R({type:"step",id:oe(i.id,n.id)}),label:`${i.name} \u203A ${n.name}`,group:e.stepGroup})}for(const i of t.milestones)s.push({value:R({type:"milestone",id:i.id}),label:i.name,group:e.milestoneGroup});for(const i of t.statuses)s.push({value:R({type:"status",id:i.id}),label:i.name,group:e.statusGroup});for(const i of t.stories)s.push({value:R({type:"story",id:i.id}),label:i.name,group:e.storyGroup});return s},Ye=(e,t,a)=>{const s=t.stories.find(i=>i.id===a.story);if(s)return{value:R({type:"story",id:s.id}),label:s.name,group:e.storyGroup};for(const i of t.activities){const n=i.steps.find(r=>r.id===a.step);if(n)return{value:R({type:"step",id:oe(i.id,n.id)}),label:n.name,group:e.stepGroup}}return null},ue=e=>e.title??"User Story Mapping",Ue=(e,t)=>{const a=S(e,t.step),s=a?.activity??O(e,t.activity)??e.activities[0],i=a?.step??s?.steps.find(d=>d.id===t.step)??s?.steps[0],n=x(e,t.story),r={...t};s?r.activity=s.id:delete r.activity,i?r.step=i.id:delete r.step,n?r.story=n.id:delete r.story,r.view=t.view==="group"?"group":"activity";const o=Le(e,te(e,t));o===null?delete r.status:r.status=o;const p=Ie(t);return p==="map"?delete r.tab:r.tab=p,r},ze=(e,t)=>{switch(t.type){case"activity":return O(e,t.id)!==void 0;case"step":return S(e,t.id)!==void 0;case"story":return x(e,t.id)!==void 0;case"milestone":return L(e,t.id)!==void 0;case"status":return w(e,t.id)!==void 0;case"page":return!0;default:return!1}},Pe=e=>{const t=J(e);return{name:"usm",label:"User Story Mapping",parseBase:ke,emptyBase:xe,actions:v,apply:$e,canonicalState:ea,hasTarget:ze,canonicalTarget:(a,s)=>{if(s.type!=="step")return s;const i=S(a,s.id);return i?{...s,id:oe(i.activity.id,i.step.id)}:s},describe:(a,s,i)=>De(t,a,s,i),serialize:Re,resolveNavigation:Ue,commentTargets:(a,s)=>Ce(t,a),currentTarget:(a,s)=>Ye(t,a,s),title:ue}},ca={github:V`<path fill-rule="evenodd" d="M8 0c4.42 0 8 3.58 8 8a8.013 8.013 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27-.68 0-1.36.09-2 .27-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8Z"></path>`,gitlab:V`<path d="M8 15 1.2 9.9a.7.7 0 0 1-.25-.78L2.7 2.6a.35.35 0 0 1 .66 0L5.1 7.6h5.8l1.74-5a.35.35 0 0 1 .66 0l1.75 6.52a.7.7 0 0 1-.25.78z"></path>`,jira:V`<path d="M14.6 7.4 8.6 1.4 8 .8 3.5 5.3 1.4 7.4a.85.85 0 0 0 0 1.2l4.1 4.1L8 15.2l4.5-4.5.07-.07 2.03-2.03a.85.85 0 0 0 0-1.2zM8 9.9 5.9 8 8 5.9 10.1 8z"></path>`,linear:V`<path d="M1.2 9.4a6.9 6.9 0 0 0 5.4 5.4zM1 7.3l7.7 7.7a7 7 0 0 0 1.9-.5L1.5 5.4a7 7 0 0 0-.5 1.9zm1.2-3.1 9.6 9.6a7 7 0 0 0 1.2-1.1L3.3 3a7 7 0 0 0-1.1 1.2zM4.3 2.3a7 7 0 1 1 9.4 9.4z"></path>`,figma:V`<path d="M5.5 1h2.3v4.6H5.5a2.3 2.3 0 1 1 0-4.6zm2.3 0h2.3a2.3 2.3 0 1 1 0 4.6H7.8zm2.3 4.6a2.3 2.3 0 1 1 0 4.6 2.3 2.3 0 0 1 0-4.6zM5.5 5.6h2.3v4.6H5.5a2.3 2.3 0 1 1 0-4.6zm0 4.6h2.3v2.3a2.3 2.3 0 1 1-2.3-2.3z"></path>`,notion:V`<path fill-rule="evenodd" d="M2.5 1.6 11 1c1 0 1.3.1 2 .6l2.1 1.5c.4.3.5.4.5.7v9.6c0 .7-.3 1.1-1.1 1.2l-9.4.6c-.6 0-.9-.1-1.2-.5L1.9 12c-.3-.5-.5-.8-.5-1.3V2.8c0-.6.3-1.1 1.1-1.2zM5 4.4v8.9l8.6-.5V4zm1 1.2 2.9-.2 3 4.7V5.6l-.8-.1v-.5l2-.1v.6l-.6.1v6.1l-.9.1-3.5-5.4v4.9l.8.2v.5l-2.3.1v-.5l.6-.2V6.4l-.8-.1z"></path>`},Ve=e=>e==="web"?kt():l`<svg class="link-mark" viewBox="0 0 16 16" aria-hidden="true">${ca[e]}</svg>`,Be=W`
2
+ .link-mark {
3
+ fill: currentColor;
4
+ }
5
+ .link-chip {
6
+ display: inline-flex;
7
+ align-items: center;
8
+ gap: 5px;
9
+ min-width: 0;
10
+ max-width: 100%;
11
+ padding: 1px 8px 1px 6px;
12
+ border: 1px solid var(--dpk-rule-strong);
13
+ border-radius: 999px;
14
+ background: var(--dpk-paper-raised);
15
+ color: var(--dpk-ink-soft);
16
+ font-family: var(--dpk-mono);
17
+ font-size: 10.5px;
18
+ font-weight: 600;
19
+ line-height: 18px;
20
+ text-decoration: none;
21
+ transition:
22
+ color 140ms var(--dpk-ease),
23
+ border-color 140ms var(--dpk-ease);
24
+ }
25
+ .link-chip:hover {
26
+ border-color: var(--dpk-ink-faint);
27
+ color: var(--dpk-ink);
28
+ }
29
+ .link-chip:focus-visible {
30
+ outline: none;
31
+ box-shadow: var(--dpk-focus);
32
+ }
33
+ .link-chip svg {
34
+ flex: none;
35
+ width: 12px;
36
+ height: 12px;
37
+ }
38
+ .link-chip span {
39
+ overflow: hidden;
40
+ text-overflow: ellipsis;
41
+ white-space: nowrap;
42
+ }
43
+ `,Y=e=>`--usm-tone: var(--dpk-${e==null||e==="gray"?"ink-faint":e})`,Ge={circle:M(Bt),lightbulb:M(jt),flag:M(Kt),play:M(Pt),clock:M(Gt),eye:M(Ft),pause:M(zt),check:M(Yt),x:M(Vt)},ua=M(Ut),ma=e=>{if(e>=1)return Ge.check();const t=2*Math.PI*4.5;return l`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true">
44
+ <circle cx="12" cy="12" r="10"></circle>
45
+ ${e>0?V`<circle
46
+ class="si-pie"
47
+ cx="12"
48
+ cy="12"
49
+ r="4.5"
50
+ stroke-dasharray=${`${e*t} ${t}`}
51
+ transform="rotate(-90 12 12)"
52
+ ></circle>`:m}
53
+ </svg>`},j=e=>{const t=e===void 0?ua():e.icon==="progress"?ma(e.progress??1):Ge[e.icon]();return l`<span class="status-icon">${t}</span>`},Fe=(e,t)=>e.length===0?m:l`<span class="status-bar" role="img" aria-label=${t}>
54
+ ${e.map(a=>l`<span
55
+ class="status-bar-part"
56
+ data-status=${a.id}
57
+ title=${`${a.name}: ${a.count}`}
58
+ style=${`${Y(a.tone)};flex-grow:${a.count}`}
59
+ ></span>`)}
60
+ </span>`,Ke=W`
61
+ .status-icon {
62
+ display: block;
63
+ flex: none;
64
+ width: 16px;
65
+ height: 16px;
66
+ color: var(--usm-tone);
67
+ }
68
+ .status-icon svg {
69
+ display: block;
70
+ width: 100%;
71
+ height: 100%;
72
+ }
73
+ .status-icon .si-pie {
74
+ stroke-width: 9;
75
+ }
76
+ .status-bar {
77
+ display: flex;
78
+ gap: 2px;
79
+ height: 6px;
80
+ min-width: 0;
81
+ }
82
+ .status-bar-part {
83
+ min-width: 4px;
84
+ border-radius: 3px;
85
+ background: var(--usm-tone);
86
+ }
87
+ .status-bar-part[data-status=''] {
88
+ background: color-mix(in srgb, var(--dpk-ink-faint) 30%, transparent);
89
+ }
90
+ `,ga=3,ha=W`
91
+ /*
92
+ * The card wears its status's color the way a modern board does: a flat,
93
+ * barely tinted face and a hairline edge in that hue, with a neutral, soft
94
+ * elevation. Tints are mixed in OKLab so every hue stays clean instead of
95
+ * turning muddy.
96
+ */
97
+ :host {
98
+ --card-tone: var(--usm-tone, var(--dpk-ink-faint));
99
+ position: relative;
100
+ display: grid;
101
+ gap: 8px;
102
+ padding: 12px 13px;
103
+ border: 1px solid color-mix(in oklab, var(--card-tone) 24%, var(--dpk-rule));
104
+ border-radius: 12px;
105
+ background: color-mix(in oklab, var(--card-tone) 6%, var(--dpk-paper-raised));
106
+ box-shadow:
107
+ 0 1px 1px var(--dpk-shade-1),
108
+ 0 2px 6px -3px var(--dpk-shade-2);
109
+ cursor: pointer;
110
+ transition:
111
+ box-shadow 180ms var(--dpk-ease),
112
+ transform 180ms var(--dpk-ease),
113
+ border-color 180ms var(--dpk-ease);
114
+ }
115
+
116
+ :host(:hover) {
117
+ border-color: color-mix(in oklab, var(--card-tone) 45%, var(--dpk-rule));
118
+ box-shadow:
119
+ 0 1px 2px var(--dpk-shade-1),
120
+ 0 8px 20px -10px var(--dpk-shade-3);
121
+ transform: translateY(-1px);
122
+ }
123
+
124
+ :host([focused]) {
125
+ border-color: var(--dpk-blue);
126
+ box-shadow:
127
+ 0 0 0 3px color-mix(in oklab, var(--dpk-blue) 20%, transparent),
128
+ 0 8px 20px -10px var(--dpk-shade-3);
129
+ }
130
+
131
+ :host([dragging]) {
132
+ opacity: 0.45;
133
+ transform: none;
134
+ }
135
+
136
+ .card-head {
137
+ display: flex;
138
+ align-items: flex-start;
139
+ gap: 8px;
140
+ min-width: 0;
141
+ }
142
+
143
+ .card-status {
144
+ flex: none;
145
+ display: inline-flex;
146
+ margin-top: 1.5px;
147
+ }
148
+
149
+ .card-name {
150
+ flex: 1 1 auto;
151
+ min-width: 0;
152
+ color: var(--dpk-ink);
153
+ font-size: 13px;
154
+ font-weight: 600;
155
+ letter-spacing: -0.01em;
156
+ line-height: 1.45;
157
+ overflow-wrap: anywhere;
158
+ }
159
+
160
+ /* The description, rendered from Markdown and cut after three lines. */
161
+ .card-text {
162
+ display: -webkit-box;
163
+ -webkit-box-orient: vertical;
164
+ -webkit-line-clamp: 3;
165
+ overflow: hidden;
166
+ color: var(--dpk-ink-soft);
167
+ font-size: 12px;
168
+ line-height: 1.55;
169
+ overflow-wrap: anywhere;
170
+ }
171
+
172
+ .card-text > * {
173
+ margin: 0;
174
+ }
175
+
176
+ .card-text ul,
177
+ .card-text ol {
178
+ padding-left: 1.2em;
179
+ }
180
+
181
+ .card-text code {
182
+ padding: 0 3px;
183
+ border-radius: 4px;
184
+ background: var(--dpk-paper-inset);
185
+ font-family: var(--dpk-mono);
186
+ font-size: 0.92em;
187
+ }
188
+
189
+ .card-text a {
190
+ color: var(--dpk-blue);
191
+ }
192
+
193
+ /* Where the story sits and what was said about it. */
194
+ .card-foot {
195
+ display: flex;
196
+ align-items: center;
197
+ gap: 6px;
198
+ min-width: 0;
199
+ }
200
+
201
+ .card-chip {
202
+ display: inline-flex;
203
+ align-items: center;
204
+ gap: 4px;
205
+ min-width: 0;
206
+ padding: 1px 7px;
207
+ border-radius: 6px;
208
+ background: color-mix(in oklab, var(--card-tone) 10%, var(--dpk-paper-sunken));
209
+ color: var(--dpk-ink-soft);
210
+ font-size: 10.5px;
211
+ font-weight: 600;
212
+ line-height: 18px;
213
+ }
214
+
215
+ .card-chip span {
216
+ overflow: hidden;
217
+ text-overflow: ellipsis;
218
+ white-space: nowrap;
219
+ }
220
+
221
+ .card-chip[data-kind='comments'] {
222
+ margin-left: auto;
223
+ background: transparent;
224
+ color: var(--dpk-ink-faint);
225
+ font-family: var(--dpk-mono);
226
+ font-variant-numeric: tabular-nums;
227
+ }
228
+
229
+ .card-chip svg {
230
+ flex: none;
231
+ width: 12px;
232
+ height: 12px;
233
+ }
234
+
235
+ .card-links {
236
+ display: flex;
237
+ flex-wrap: wrap;
238
+ gap: 4px;
239
+ min-width: 0;
240
+ }
241
+
242
+ .card-links .link-chip {
243
+ border-color: color-mix(in oklab, var(--card-tone) 16%, var(--dpk-rule));
244
+ background: var(--dpk-paper-raised);
245
+ }
246
+ `;class va extends xt{static{this.styles=[St,Ke,Be,ha]}static{this.properties={story:{attribute:!1},stepName:{attribute:!1},statuses:{attribute:!1},notes:{attribute:!1},focused:{type:Boolean,reflect:!0},dragging:{type:Boolean,reflect:!0}}}#t=new Tt(this);constructor(){super(),this.story=null,this.stepName="",this.statuses=[],this.notes=[],this.focused=!1,this.dragging=!1}render(){const t=this.story;if(!t)return m;const a=J(this.#t.locale),s=this.stepName!==""||this.notes.length>0;return l`
247
+ <div class="card-head">
248
+ ${this.statuses.length===0?m:this.#e(a,t)}
249
+ <div class="card-name"><span>${t.name}</span></div>
250
+ </div>
251
+ ${t.description?l`<div class="card-text" @click=${fa}>${$t(wt(t.description))}</div>`:m}
252
+ ${t.links&&t.links.length>0?this.#a(t.links):m}
253
+ ${s?l`<div class="card-foot">
254
+ ${this.stepName===""?m:l`<span class="card-chip" data-kind="step"><span>${this.stepName}</span></span>`}
255
+ ${this.notes.length>0?l`<span
256
+ class="card-chip"
257
+ data-kind="comments"
258
+ aria-label=${a.commentCountAria(this.notes.length)}
259
+ >
260
+ ${Et()}<span>${this.notes.length}</span>
261
+ </span>`:m}
262
+ </div>`:m}
263
+ `}#e(t,a){const s=_e(this.statuses,a);if(!s)return m;const i=s.name;return l`<span class="card-status" role="img" aria-label=${t.storyStatusAria(i)} title=${i}>
264
+ ${j(s)}
265
+ </span>`}#a(t){const a=t.slice(0,ga);return l`<div class="card-links">
266
+ ${a.map(s=>{const i=Q(s.url);return l`<a
267
+ class="link-chip"
268
+ data-kind=${i.kind}
269
+ href=${s.url}
270
+ target="_blank"
271
+ rel="noopener noreferrer"
272
+ title=${s.label??i.title}
273
+ draggable="false"
274
+ @click=${n=>n.stopPropagation()}
275
+ >${Ve(i.kind)}<span>${s.label??i.text}</span></a
276
+ >`})}
277
+ ${t.length>a.length?l`<span class="link-chip">+${t.length-a.length}</span>`:m}
278
+ </div>`}}const fa=e=>{e.target instanceof Element&&e.target.closest("a")&&e.stopPropagation()},ba=()=>{customElements.get("dpk-internal-usm-story-card")||customElements.define("dpk-internal-usm-story-card",va)},ya=(e,t,a)=>{const s=e.at(-1)??null;if(t===null||a==="end")return s;const i=e.indexOf(t);return i<0?s:a==="after"?t:i===0?null:e.at(i-1)??null},je=(e,t,a,s,i)=>{const n=Z(e,t.stepId,t.milestoneId).map(r=>r.id);return{type:"MOVE_STORY",target:{type:"story",id:a},payload:{activityId:t.activityId,stepId:t.stepId,milestoneId:t.milestoneId??null,after:se(n,a,s,i)}}},He=(e,t,a,s,i,n)=>{const r=x(e,s);if(!r||r.activityId!==t)return null;const o=Se(e,t,a).map(p=>p.id);return{type:"MOVE_STORY",target:{type:"story",id:s},payload:{activityId:t,stepId:r.stepId,milestoneId:a??null,after:se(o,s,i,n)}}},qe=(e,t,a,s,i)=>{const n=Z(e,s,i).filter(r=>r.id!==t);return{type:"MOVE_STORY",target:{type:"story",id:t},payload:{activityId:a,stepId:s,milestoneId:i??null,after:n.at(-1)?.id??null}}},We=(e,t,a,s)=>e.includes(t)?{type:"REORDER_MILESTONE",target:{type:"milestone",id:t},payload:{after:se(e,t,a,s)}}:null,ka=e=>{const t=e.stories.length,a=de(e);return e.milestones.map((s,i)=>{const n=e.stories.filter(o=>o.milestoneId===s.id),r=new Set(n.map(o=>o.stepId));return{id:s.id,ordinal:i+1,name:s.name,timeframe:s.timeframe?.trim()??"",description:s.description?.trim()??"",storyCount:n.length,share:t===0?0:n.length/t,coverage:{covered:a.filter(({step:o})=>r.has(o.id)).length,total:a.length},progress:Me(e,n)}})},Xe=(e,t)=>{const a=F("new-activity",B(t.state));if(!t.dispatch({type:"ADD_ACTIVITY",target:{type:"page",id:"usm"},payload:{id:a,name:e.newActivityName}}).ok)return;const i=F("new-step",[...B(t.state),a]);t.dispatch({type:"ADD_STEP",target:{type:"activity",id:a},payload:{id:i,name:e.newStepName}}),t.navigate({activity:a,step:null,story:null})},xa=(e,t,a)=>{const s=F("new-step",B(t.state));t.dispatch({type:"ADD_STEP",target:{type:"activity",id:a},payload:{id:s,name:e.newStepName}})},Ze=(e,t)=>{const a=F("new-milestone",B(t.state));t.dispatch({type:"ADD_MILESTONE",target:{type:"page",id:"usm"},payload:{id:a,name:e.newMilestoneName}})},Je=(e,t,a,s,i)=>{const n=F("new-story",B(t.state));t.dispatch({type:"ADD_STORY",target:{type:"step",id:s},payload:{id:n,name:e.newStoryName,activityId:a,...i===void 0?{}:{milestoneId:i}}}).ok&&t.navigate({activity:a,step:s,story:n})},Sa=(e,t)=>{const a=F("new-status",B(t.state));t.dispatch({type:"ADD_STATUS",target:{type:"page",id:"usm"},payload:{id:a,name:e.newStatusName,tone:ye(t.state.statuses.length)}})},Qe=(e,t)=>{const a=s=>t.stories.filter(i=>i.milestoneId===s).length;return[...t.milestones.map(({id:s,name:i,timeframe:n})=>({id:s,name:i,timeframe:n?.trim()??"",storyCount:a(s)})),{id:void 0,name:e.unassigned,timeframe:"",storyCount:a(void 0)}]},Ta=(e,t)=>l`
279
+ <div class="empty">
280
+ <h2>${e.emptyTitle}</h2>
281
+ <p>${e.emptyBody}</p>
282
+ <button class="dpk-btn dpk-btn--accent" type="button" @click=${()=>Xe(e,t)}>
283
+ ${e.firstActivityButton}
284
+ </button>
285
+ </div>
286
+ `,$a=e=>{const{m:t,context:a}=e,s=de(a.state);return s.length===0?Ta(t,a):l`${wa(t,a)}
287
+ ${et(a)==="activity"?Aa(e,s):Ia(e)}`},wa=(e,t)=>{const{state:a}=t;if(a.statuses.length===0)return m;const s=te(a,t.navigation),i=ee(a),n=o=>a.stories.filter(p=>p.statusId===o).length,r=o=>{const p=o.id,d=s.has(p);return l`<a
288
+ class="filter-chip"
289
+ role="checkbox"
290
+ data-status=${p}
291
+ aria-checked=${String(d)}
292
+ style=${Y(o.tone)}
293
+ href=${t.hashFor({status:Le(a,la(s,p))})}
294
+ >${j(o)}<span>${o.name}</span><span class="filter-count">${n(p)}</span></a
295
+ >`};return l`<div class="map-toolbar" role="group" aria-label=${e.statusFilterLabel} data-testid="usm-status-filter">
296
+ <span class="filter-label">${e.statusFilterLabel}</span>
297
+ ${i.map(r)}
298
+ ${s.size===0?m:l`<a class="filter-clear" href=${t.hashFor({status:null})}>${e.clearFilter}</a>`}
299
+ </div>`},et=e=>e.navigation.view==="group"?"group":"activity",Ea=(e,t)=>{const a=et(t);return l`<div class="segmented view-tabs" role="tablist" aria-label=${e.groupingLabel}>
300
+ ${tt(t,"activity",a,e.activityGroup)}
301
+ ${tt(t,"group",a,e.groupViewTab)}
302
+ </div>`},tt=(e,t,a,s)=>{const i=t===a;return l`<a
303
+ class="tab"
304
+ role="tab"
305
+ data-current=${String(i)}
306
+ aria-selected=${i?"true":"false"}
307
+ href=${e.hashFor({view:t})}
308
+ >${s}</a
309
+ >`},Aa=(e,t)=>{const{m:a,context:s}=e,{state:i}=s,n=Qe(a,i);return l`
310
+ <div class="map-scroll">
311
+ <div class="map" style=${`--cols:${t.length+1}`} data-testid="usm-map">
312
+ <div class="map-head">
313
+ <div class="map-row">
314
+ <div class="corner">
315
+ <span class="dpk-label">${a.groupAxisHeader}</span>
316
+ </div>
317
+ ${A(i.activities,r=>r.id,r=>st(a,s,r.id,`grid-column: span ${Math.max(r.steps.length,1)}`))}
318
+ ${it(a,s)}
319
+ </div>
320
+ <div class="map-row">
321
+ ${at(a)}
322
+ ${A(t,({activity:r,step:o})=>`${r.id}.${o.id}`,({step:r})=>l`
323
+ <div class="col-head" data-current=${String(s.navigation.step===r.id)}>
324
+ <h4>
325
+ <dpk-component-inline-edit
326
+ .value=${r.name}
327
+ .label=${a.stepNameLabel}
328
+ @dpk-commit=${N(o=>s.dispatch({type:"SET_STEP_NAME",target:{type:"step",id:r.id},payload:{name:o}}))}
329
+ @click=${o=>o.stopPropagation()}
330
+ ></dpk-component-inline-edit>
331
+ </h4>
332
+ <span class="count">${Te(i,r.id)}</span>
333
+ </div>
334
+ `)}
335
+ <div class="corner"><span class="dpk-label">—</span></div>
336
+ </div>
337
+ </div>
338
+ ${A(n,r=>r.id,r=>rt(e,r,l`${A(t,({activity:o,step:p})=>`${o.id}.${p.id}`,({activity:o,step:p})=>Ma(e,{activityId:o.id,stepId:p.id,milestoneId:r.id}))}`))}
339
+ ${nt(a,s,t.length)}
340
+ </div>
341
+ </div>
342
+ `},Ia=e=>{const{m:t,context:a}=e,{state:s}=a,i=Qe(t,s);return l`
343
+ <div class="map-scroll">
344
+ <div class="map" style=${`--cols:${s.activities.length+1}`} data-testid="usm-map-group">
345
+ <div class="map-head">
346
+ <div class="map-row">
347
+ ${at(t)}
348
+ ${A(s.activities,n=>n.id,n=>st(t,a,n.id,void 0,!0))}
349
+ ${it(t,a)}
350
+ </div>
351
+ </div>
352
+ ${A(i,n=>n.id,n=>rt(e,n,l`${A(s.activities,r=>r.id,r=>La(e,r.id,n.id))}`))}
353
+ ${nt(t,a,s.activities.length)}
354
+ </div>
355
+ </div>
356
+ `},at=e=>l`<div class="corner">
357
+ <span class="dpk-label">${e.activityAxis}</span>
358
+ <span class="dpk-label">${e.milestoneAxis}</span>
359
+ </div>`,st=(e,t,a,s,i=!1)=>{const{state:n}=t,r=n.activities.find(d=>d.id===a);if(!r)return l`<div class="act-head"></div>`;const o=n.stories.filter(d=>d.activityId===r.id),p=Me(n,o);return l`
360
+ <div class="act-head" style=${s??""} data-activity=${r.id}>
361
+ <div class="act-title">
362
+ <dpk-component-inline-edit
363
+ .value=${r.name}
364
+ .label=${e.activityNameLabel}
365
+ @dpk-commit=${N(d=>t.dispatch({type:"SET_ACTIVITY_NAME",target:{type:"activity",id:r.id},payload:{name:d}}))}
366
+ ></dpk-component-inline-edit>
367
+ <span class="count">${o.length}</span>
368
+ <button
369
+ class="dpk-icon-btn"
370
+ type="button"
371
+ aria-label=${e.addStepAria}
372
+ @click=${()=>xa(e,t,r.id)}
373
+ >
374
+ ${At()}
375
+ </button>
376
+ </div>
377
+ <div class="act-meta">
378
+ <span class="act-actor" data-empty=${String(r.actor===void 0)}>
379
+ <dpk-component-inline-edit
380
+ .value=${r.actor??""}
381
+ .label=${e.activityActorLabel}
382
+ .placeholder=${e.activityActorLabel}
383
+ @dpk-commit=${N(d=>t.dispatch({type:"SET_ACTIVITY_ACTOR",target:{type:"activity",id:r.id},payload:{actor:d}}))}
384
+ ></dpk-component-inline-edit>
385
+ </span>
386
+ ${Fe(p,e.progressAria(p.map(d=>`${d.name} ${d.count}`).join(", ")))}
387
+ </div>
388
+ ${i&&r.steps.length>0?l`<ol class="act-steps">
389
+ ${r.steps.map(d=>l`<li>${d.name}</li>`)}
390
+ </ol>`:m}
391
+ </div>
392
+ `},it=(e,t)=>l`<div class="act-head">
393
+ <button class="dpk-btn dpk-btn--ghost" type="button" @click=${()=>Xe(e,t)}>
394
+ ${e.newActivityButton}
395
+ </button>
396
+ </div>`,nt=(e,t,a)=>l`<div class="map-row">
397
+ <div class="row-lead">
398
+ <div class="row-head">
399
+ <button class="dpk-btn dpk-btn--ghost" type="button" @click=${()=>Ze(e,t)}>
400
+ ${e.newMilestoneButton}
401
+ </button>
402
+ </div>
403
+ </div>
404
+ ${Array.from({length:a+1},()=>l`<div class="cell"></div>`)}
405
+ </div>`,rt=(e,t,a)=>{const{m:s,context:i,drag:n,handlers:r}=e,o=t.id;if(o===void 0)return l`<div
406
+ class="map-row"
407
+ data-unassigned="true"
408
+ data-draggable="false"
409
+ data-row-dragging="false"
410
+ data-row-drop="false"
411
+ >
412
+ <div class="row-lead">
413
+ <div class="row-head" data-milestone="" draggable="false"><span>${t.name}</span></div>
414
+ ${ot(s,t)}
415
+ </div>
416
+ ${a}
417
+ <div class="cell"></div>
418
+ </div>`;const p=_a(s,i,o,t.name),d=`row:${o}`,u=n.target({key:d,accepts:"milestone",hovered:Da,onDrop:I=>r.dropOnMilestoneRow(o,I)}),E=n.source({type:"milestone",id:o});return l`
419
+ <div
420
+ class="map-row"
421
+ data-draggable="true"
422
+ data-row-dragging=${String(n.isDragging("milestone",o))}
423
+ data-row-drop=${String(n.isOver(d))}
424
+ @dragenter=${u.dragenter}
425
+ @dragover=${u.dragover}
426
+ @dragleave=${u.dragleave}
427
+ @drop=${u.drop}
428
+ >
429
+ <div class="row-lead">
430
+ <div
431
+ class="row-head"
432
+ data-milestone=${o}
433
+ draggable="true"
434
+ @dragstart=${I=>{Oa(I),E.dragstart(I)}}
435
+ @dragend=${E.dragend}
436
+ >
437
+ <span class="row-grip" aria-hidden="true">${It()}</span>${p}
438
+ </div>
439
+ ${ot(s,t)}
440
+ </div>
441
+ ${a}
442
+ <div class="cell"></div>
443
+ </div>
444
+ `},ot=(e,t)=>l`<div class="row-meta">
445
+ ${t.timeframe===""?m:l`<span class="row-timeframe">${t.timeframe}</span>`}
446
+ <span class="row-count">${e.storyCount(t.storyCount)}</span>
447
+ </div>`,_a=(e,t,a,s)=>l`<dpk-component-inline-edit
448
+ draggable="false"
449
+ .value=${s}
450
+ .label=${e.milestoneNameLabel}
451
+ @dpk-commit=${N(i=>t.dispatch({type:"SET_MILESTONE_NAME",target:{type:"milestone",id:a},payload:{name:i}}))}
452
+ ></dpk-component-inline-edit>`,Ma=(e,t)=>{const{m:a,context:s,drag:i,handlers:n}=e,r=te(s.state,s.navigation),o=Z(s.state,t.stepId,t.milestoneId).filter(u=>Oe(r,u)),p=`cell:${t.stepId}:${t.milestoneId??""}`,d=i.target({key:p,accepts:"story",hovered:lt,onDrop:u=>n.dropOnCell(t,u)});return l`
453
+ <div
454
+ class="cell"
455
+ data-step=${t.stepId}
456
+ data-milestone=${t.milestoneId??""}
457
+ data-drop=${String(i.isOver(p))}
458
+ @dragenter=${d.dragenter}
459
+ @dragover=${d.dragover}
460
+ @dragleave=${d.dragleave}
461
+ @drop=${d.drop}
462
+ >
463
+ <div class="card-list" data-testid=${`cell-${t.stepId}-${t.milestoneId??"unassigned"}`}>
464
+ ${A(o,u=>u.id,u=>dt(e,u,""))}
465
+ </div>
466
+ <button
467
+ class="dpk-btn dpk-btn--ghost add-cell"
468
+ type="button"
469
+ title=${a.addStoryCellAria}
470
+ @click=${()=>Je(a,s,t.activityId,t.stepId,t.milestoneId)}
471
+ >
472
+ ${a.addCellButton}
473
+ </button>
474
+ </div>
475
+ `},La=(e,t,a)=>{const{m:s,context:i,drag:n,handlers:r}=e,{state:o}=i,p=te(o,i.navigation),d=Se(o,t,a).filter(T=>Oe(p,T)),u=o.activities.find(T=>T.id===t)?.steps??[],E=u[0],I=T=>u.find(ut=>ut.id===T)?.name??"",k=`group:${t}:${a??""}`,_=n.target({key:k,accepts:"story",hovered:lt,onDrop:T=>r.dropOnGroupCell(t,a,T)});return l`
476
+ <div
477
+ class="cell"
478
+ data-activity=${t}
479
+ data-milestone=${a??""}
480
+ data-drop=${String(n.isOver(k))}
481
+ @dragenter=${_.dragenter}
482
+ @dragover=${_.dragover}
483
+ @dragleave=${_.dragleave}
484
+ @drop=${_.drop}
485
+ >
486
+ <div class="card-list" data-testid=${`group-cell-${t}-${a??"unassigned"}`}>
487
+ ${A(d,T=>T.id,T=>dt(e,T,I(T.stepId)))}
488
+ </div>
489
+ ${E?l`<button
490
+ class="dpk-btn dpk-btn--ghost add-cell"
491
+ type="button"
492
+ aria-label=${s.addStoryCellAria}
493
+ @click=${()=>Je(s,i,t,E.id,a)}
494
+ >
495
+ ${s.addCellButton}
496
+ </button>`:m}
497
+ </div>
498
+ `},dt=(e,t,a)=>{const{context:s,drag:i,handlers:n}=e,r=ee(s.state),o=s.comments.filter(d=>d.target.type==="story"&&d.target.id===t.id),p=i.source({type:"story",id:t.id});return l`<dpk-internal-usm-story-card
499
+ data-story=${t.id}
500
+ data-status=${t.statusId??""}
501
+ draggable="true"
502
+ style=${Y(_e(r,t)?.tone)}
503
+ .story=${t}
504
+ .stepName=${a}
505
+ .statuses=${r}
506
+ .notes=${o}
507
+ @click=${()=>n.selectStory(t.id)}
508
+ ?focused=${s.navigation.story===t.id}
509
+ ?dragging=${i.isDragging("story",t.id)}
510
+ @dragstart=${p.dragstart}
511
+ @dragend=${p.dragend}
512
+ ></dpk-internal-usm-story-card>`},lt=e=>{const t=e.target instanceof Element?e.target.closest("dpk-internal-usm-story-card"):null;return t?{id:t.getAttribute("data-story"),element:t}:null},Oa=e=>{const a=(e.currentTarget instanceof Element?e.currentTarget:null)?.closest(".map-row");if(!a||!e.dataTransfer)return;const s=a.getBoundingClientRect();e.dataTransfer.setDragImage(a,e.clientX-s.left,e.clientY-s.top)},Da=e=>{const t=e.target instanceof Element?e.target.closest(".map-row"):null,a=t?.querySelector(".row-head[data-milestone]");if(!t||!a)return null;const s=a.getAttribute("data-milestone");return{id:s===""?null:s,element:t}},Ra=(e,t,a)=>l`
513
+ <section class="ms-overview" data-testid="usm-milestones">
514
+ ${a.length===0?l`<div class="empty">
515
+ <h2>${e.noMilestonesTitle}</h2>
516
+ <p>${e.noMilestonesBody}</p>
517
+ </div>`:m}
518
+ <ol class="ms-timeline">
519
+ ${A(a,s=>s.id,s=>Na(e,t,s))}
520
+ <li class="ms-add">
521
+ <span class="ms-when" aria-hidden="true"></span>
522
+ <span class="ms-rail" aria-hidden="true"><span class="ms-node ms-node--add"></span></span>
523
+ <div class="ms-body">
524
+ <button class="dpk-btn dpk-btn--ghost" type="button" @click=${()=>Ze(e,t)}>
525
+ ${e.newMilestoneButton}
526
+ </button>
527
+ </div>
528
+ </li>
529
+ </ol>
530
+ </section>
531
+ `,Na=(e,t,a)=>{const s=a.id;return l`
532
+ <li class="ms-entry" data-milestone-card=${s}>
533
+ <div class="ms-when">
534
+ ${a.timeframe===""?l`<span class="ms-timeframe" data-empty="true">${e.timeframeUnset}</span>`:l`<span class="ms-timeframe">${a.timeframe}</span>`}
535
+ </div>
536
+ <span class="ms-rail" aria-hidden="true"><span class="ms-node">${a.ordinal}</span></span>
537
+ <article class="ms-body">
538
+ <h3 class="ms-name">
539
+ <dpk-component-inline-edit
540
+ .value=${a.name}
541
+ .label=${e.milestoneNameLabel}
542
+ @dpk-commit=${N(i=>t.dispatch({type:"SET_MILESTONE_NAME",target:{type:"milestone",id:s},payload:{name:i}}))}
543
+ ></dpk-component-inline-edit>
544
+ </h3>
545
+ ${a.description===""?l`<p class="ms-description" data-empty="true">${e.milestoneNoDescription}</p>`:l`<p class="ms-description">${a.description}</p>`}
546
+ <dl class="ms-facts">
547
+ <div>
548
+ <dt>${e.storiesLabel}</dt>
549
+ <dd>
550
+ <strong>${a.storyCount}</strong>
551
+ <span>${e.shareOfStories(Math.round(a.share*100))}</span>
552
+ </dd>
553
+ </div>
554
+ <div>
555
+ <dt>${e.coverageLabel}</dt>
556
+ <dd>
557
+ <strong>${e.coverage(a.coverage.covered,a.coverage.total)}</strong>
558
+ <span class="ms-meter" aria-hidden="true">
559
+ <span
560
+ style=${`width:${a.coverage.total===0?0:a.coverage.covered/a.coverage.total*100}%`}
561
+ ></span>
562
+ </span>
563
+ </dd>
564
+ </div>
565
+ </dl>
566
+ ${a.progress.length===0?m:Ca(e,a)}
567
+ </article>
568
+ </li>
569
+ `},Ca=(e,t)=>l`
570
+ <div class="ms-breakdown">
571
+ ${Fe(t.progress,e.progressAria(t.progress.map(a=>`${a.name} ${a.count}`).join(", ")))}
572
+ <ul class="ms-legend" aria-hidden="true">
573
+ ${t.progress.map(a=>l`<li data-status=${a.id} style=${Y(a.tone)}>
574
+ ${j(a)}
575
+ <span class="ms-breakdown-name">${a.name}</span>
576
+ <span class="ms-breakdown-count">${a.count}</span>
577
+ </li>`)}
578
+ </ul>
579
+ </div>
580
+ `,Ya=(e,t,a,s)=>{if(a.kind!=="picking-step")return m;const i=x(t.state,a.storyId),n=O(t.state,a.activityId);if(!i||!n)return m;const r=n.steps[0]?.id;return l`<div class="comment-pop move-dialog" id="move-dialog" popover="manual">
581
+ <span class="dpk-label">${e.moveDialogLabel}</span>
582
+ <select class="dpk-select" aria-label=${e.moveDialogSelectLabel} data-move-dialog>
583
+ ${n.steps.map(o=>l`<option value=${o.id} ?selected=${o.id===r}>${o.name}</option>`)}
584
+ </select>
585
+ <div class="pop-actions">
586
+ <button
587
+ class="dpk-btn dpk-btn--accent"
588
+ type="button"
589
+ @click=${o=>{const d=(_t(o.currentTarget,HTMLElement)?.closest("#move-dialog")??null)?.querySelector("select")?.value??r;d?s.confirm(d):s.cancel()}}
590
+ >
591
+ ${e.moveConfirm}
592
+ </button>
593
+ <button class="dpk-btn" type="button" @click=${s.cancel}>${e.moveCancel}</button>
594
+ </div>
595
+ </div>`},Ua=(e,t,a)=>{const{state:s}=t;return l`
596
+ <div class="board-bar">
597
+ <div class="page-tabs" role="tablist" aria-label=${e.pageTabsLabel}>
598
+ ${me(t,"map",a,e.mapTab,s.stories.length)}
599
+ ${me(t,"milestones",a,e.milestonesTab,s.milestones.length)}
600
+ ${me(t,"statuses",a,e.statusesTab,s.statuses.length)}
601
+ </div>
602
+ ${a==="map"&&s.activities.some(i=>i.steps.length>0)?Ea(e,t):m}
603
+ </div>
604
+ `},me=(e,t,a,s,i)=>l`<a
605
+ role="tab"
606
+ data-tab=${t}
607
+ aria-selected=${t===a?"true":"false"}
608
+ href=${e.hashFor({tab:t==="map"?null:t})}
609
+ >${s}<span class="page-tab-count">${i}</span></a
610
+ >`,za=(e,t,a,s)=>l`
611
+ <section class="st-overview" data-testid="usm-statuses">
612
+ ${a.rows.length===0?l`<div class="empty">
613
+ <h2>${e.noStatusesTitle}</h2>
614
+ <p>${e.noStatusesBody}</p>
615
+ </div>`:m}
616
+ <ol class="st-list">
617
+ ${A(a.rows,i=>i.id,i=>Pa(e,t,i,s))}
618
+ </ol>
619
+ <div>
620
+ <button class="dpk-btn dpk-btn--ghost" type="button" @click=${()=>Sa(e,t)}>
621
+ ${e.newStatusButton}
622
+ </button>
623
+ </div>
624
+ </section>
625
+ `,Pa=(e,t,a,s)=>{const i=s.openFor===a.id,n={type:"status",id:a.id},r=o=>{t.dispatch({type:"REORDER_STATUS",target:n,payload:{after:o}})};return l`
626
+ <li class="st-row" data-status=${a.id} style=${Y(a.tone)}>
627
+ <button
628
+ class="st-icon-trigger"
629
+ type="button"
630
+ data-icon-trigger=${a.id}
631
+ aria-haspopup="menu"
632
+ aria-expanded=${String(i)}
633
+ aria-label=${`${e.statusIconLabel}: ${e.iconName(a.icon)}`}
634
+ title=${e.iconName(a.icon)}
635
+ @click=${()=>s.toggle(a.id)}
636
+ >
637
+ ${j(a)}
638
+ </button>
639
+ ${i?Va(e,t,a,s):m}
640
+ <span class="st-name">
641
+ <dpk-component-inline-edit
642
+ .value=${a.name}
643
+ .label=${e.statusNameLabel}
644
+ @dpk-commit=${N(o=>t.dispatch({type:"SET_STATUS_NAME",target:n,payload:{name:o}}))}
645
+ ></dpk-component-inline-edit>
646
+ </span>
647
+ ${Ga(e,a.storyCount,a.share)}
648
+ <span class="st-tones" role="radiogroup" aria-label=${e.statusToneLabel}>
649
+ ${X.map(o=>l`<button
650
+ class="st-tone"
651
+ type="button"
652
+ role="radio"
653
+ data-tone=${o}
654
+ style=${Y(o)}
655
+ title=${e.toneName(o)}
656
+ aria-label=${e.toneName(o)}
657
+ aria-checked=${o===a.tone?"true":"false"}
658
+ @click=${()=>{o!==a.tone&&t.dispatch({type:"SET_STATUS_TONE",target:n,payload:{tone:o}})}}
659
+ ></button>`)}
660
+ </span>
661
+ <span class="st-tools">
662
+ <button
663
+ class="dpk-icon-btn"
664
+ type="button"
665
+ aria-label=${e.moveUpAria}
666
+ ?disabled=${a.previousId===null}
667
+ @click=${()=>r(Ba(t.state,a))}
668
+ >
669
+ ↑
670
+ </button>
671
+ <button
672
+ class="dpk-icon-btn"
673
+ type="button"
674
+ aria-label=${e.moveDownAria}
675
+ ?disabled=${a.nextId===null}
676
+ @click=${()=>r(a.nextId)}
677
+ >
678
+ ↓
679
+ </button>
680
+ <button
681
+ class="dpk-icon-btn"
682
+ type="button"
683
+ data-role="delete"
684
+ aria-label=${e.deleteStatusAria}
685
+ @click=${()=>t.dispatch({type:"DELETE_STATUS",target:n,payload:{}})}
686
+ >
687
+ ${he()}
688
+ </button>
689
+ </span>
690
+ </li>
691
+ `},Va=(e,t,a,s)=>l`<div
692
+ id="icon-menu"
693
+ class="comment-pop icon-menu"
694
+ popover="manual"
695
+ role="menu"
696
+ aria-label=${e.statusIconLabel}
697
+ style=${Y(a.tone)}
698
+ @keydown=${i=>{i.key==="Escape"&&(i.preventDefault(),s.close())}}
699
+ >
700
+ ${be.map(i=>l`<button
701
+ class="icon-option"
702
+ type="button"
703
+ role="menuitemradio"
704
+ data-icon=${i}
705
+ title=${e.iconName(i)}
706
+ aria-label=${e.iconName(i)}
707
+ aria-checked=${String(i===a.icon)}
708
+ @click=${()=>{i!==a.icon&&t.dispatch({type:"SET_STATUS_ICON",target:{type:"status",id:a.id},payload:{icon:i}}),s.close()}}
709
+ >
710
+ ${j({icon:i,progress:a.progress})}
711
+ </button>`)}
712
+ </div>`,Ba=(e,t)=>{const a=e.statuses.findIndex(s=>s.id===t.previousId);return a<=0?null:e.statuses[a-1]?.id??null},Ga=(e,t,a)=>l`
713
+ <span class="st-share">
714
+ <span class="st-share-text">${e.statusShare(t,Math.round(a*100))}</span>
715
+ <span class="st-meter" aria-hidden="true"><span style=${`width:${a*100}%`}></span></span>
716
+ </span>
717
+ `,Fa=e=>x(e.state,e.navigation.story),Ka=(e,t,a)=>{const{state:s}=t,i={type:"story",id:a.id},n=()=>t.navigate({story:null}),r=S(s,`${a.activityId}.${a.stepId}`),o=L(s,a.milestoneId);return l`<aside
718
+ class="story-panel"
719
+ role="dialog"
720
+ aria-label=${e.panelLabel(a.name)}
721
+ data-testid="usm-story-panel"
722
+ data-story=${a.id}
723
+ @keydown=${p=>{p.key!=="Escape"||p.isComposing||p.defaultPrevented||(p.preventDefault(),n())}}
724
+ >
725
+ <header class="sp-head">
726
+ <span class="sp-where">
727
+ ${r?l`<span>${r.activity.name}</span><span>${r.step.name}</span>`:m}
728
+ <span>${o?.name??e.unassigned}</span>
729
+ </span>
730
+ <button class="dpk-icon-btn" type="button" data-role="close" aria-label=${e.closePanelAria} @click=${n}>
731
+ ${ve()}
732
+ </button>
733
+ </header>
734
+ <div class="sp-body">
735
+ <h2 class="sp-title">
736
+ <dpk-component-inline-edit
737
+ wrap
738
+ .value=${a.name}
739
+ .label=${e.storyTitleLabel}
740
+ @dpk-commit=${N(p=>t.dispatch({type:"SET_STORY_NAME",target:i,payload:{name:p}}))}
741
+ ></dpk-component-inline-edit>
742
+ </h2>
743
+ ${s.statuses.length===0?m:ja(e,t,a)}
744
+ <section class="sp-field">
745
+ <h3>${e.storyDescriptionLabel}</h3>
746
+ <dpk-component-inline-edit
747
+ multiline
748
+ markdown
749
+ class="sp-description"
750
+ .value=${a.description??""}
751
+ .label=${e.storyDescriptionLabel}
752
+ @dpk-commit=${N(p=>t.dispatch({type:"SET_STORY_DESCRIPTION",target:i,payload:{description:p}}))}
753
+ ></dpk-component-inline-edit>
754
+ </section>
755
+ ${Ha(e,t,a)} ${qa(e,t,a)}
756
+ </div>
757
+ <footer class="sp-foot">
758
+ <button
759
+ class="dpk-btn dpk-btn--ghost sp-delete"
760
+ type="button"
761
+ @click=${()=>{t.dispatch({type:"DELETE_STORY",target:i,payload:{}}).ok&&n()}}
762
+ >
763
+ ${he()}<span>${e.deleteStoryButton}</span>
764
+ </button>
765
+ </footer>
766
+ </aside>`},ja=(e,t,a)=>{const s=ee(t.state),i=a.statusId;return l`<section class="sp-field">
767
+ <h3 id="sp-status-label">${e.storyStatusLabel}</h3>
768
+ <div class="sp-statuses" role="radiogroup" aria-labelledby="sp-status-label">
769
+ ${s.map(n=>l`<button
770
+ class="sp-status"
771
+ type="button"
772
+ role="radio"
773
+ data-status=${n.id}
774
+ aria-checked=${String(n.id===i)}
775
+ style=${Y(n.tone)}
776
+ @click=${()=>{n.id!==i&&t.dispatch({type:"SET_STORY_STATUS",target:{type:"story",id:a.id},payload:{statusId:n.id}})}}
777
+ >
778
+ ${j(n)}<span>${n.name}</span>
779
+ </button>`)}
780
+ </div>
781
+ </section>`},Ha=(e,t,a)=>{const s={type:"story",id:a.id},i=a.links??[],n=r=>{r.preventDefault();const o=r.currentTarget instanceof HTMLFormElement?r.currentTarget:null,p=o?.querySelector("input");if(!o||!p)return;const d=p.value.trim();if(!Lt(re,d).success){p.setAttribute("aria-invalid","true");return}t.dispatch({type:"ADD_STORY_LINK",target:s,payload:{url:d}}).ok&&(p.removeAttribute("aria-invalid"),o.reset())};return l`<section class="sp-field">
782
+ <h3>${e.storyLinksLabel}</h3>
783
+ ${i.length===0?m:l`<ul class="sp-links">
784
+ ${i.map(r=>{const o=Q(r.url),p=r.label??o.text;return l`<li data-kind=${o.kind}>
785
+ <a class="sp-link" href=${r.url} target="_blank" rel="noopener noreferrer" title=${r.url}>
786
+ ${Ve(o.kind)}
787
+ <span class="sp-link-text">${p}</span>
788
+ <span class="sp-link-url">${o.title===p?r.url:o.title}</span>
789
+ </a>
790
+ <button
791
+ class="dpk-icon-btn"
792
+ type="button"
793
+ aria-label=${e.removeLinkAria(p)}
794
+ @click=${()=>t.dispatch({type:"REMOVE_STORY_LINK",target:s,payload:{url:r.url}})}
795
+ >
796
+ ${ve()}
797
+ </button>
798
+ </li>`})}
799
+ </ul>`}
800
+ <form class="sp-add-link" @submit=${n}>
801
+ <input
802
+ class="dpk-input"
803
+ type="url"
804
+ inputmode="url"
805
+ placeholder="https://"
806
+ aria-label=${e.linkUrlLabel}
807
+ @input=${r=>{r.currentTarget instanceof HTMLInputElement&&r.currentTarget.removeAttribute("aria-invalid")}}
808
+ />
809
+ <button class="dpk-btn" type="submit">${e.addLinkButton}</button>
810
+ </form>
811
+ </section>`},qa=(e,t,a)=>{const s=t.comments.filter(n=>n.target.type==="story"&&n.target.id===a.id),i=n=>{const r=n.querySelector("textarea"),o=r?.value.trim()??"";if(!r||o==="")return;t.dispatch({type:"comment",target:`story:${a.id}`,payload:{body:o}}).ok&&(r.value="")};return l`<section class="sp-field sp-comments">
812
+ <h3>${e.storyCommentsLabel}${s.length>0?l`<span class="sp-count">${s.length}</span>`:m}</h3>
813
+ ${s.length===0?m:l`<ol class="sp-comment-list">
814
+ ${s.map(n=>l`<li>${Mt(n)}</li>`)}
815
+ </ol>`}
816
+ <form
817
+ class="sp-comment-form"
818
+ @submit=${n=>{n.preventDefault(),n.currentTarget instanceof HTMLFormElement&&i(n.currentTarget)}}
819
+ >
820
+ <textarea
821
+ class="dpk-textarea"
822
+ rows="3"
823
+ aria-label=${e.storyCommentsLabel}
824
+ data-dpk-text-key=${`story:${a.id}`}
825
+ @keydown=${n=>{if(n.isComposing||n.key!=="Enter"||!(n.ctrlKey||n.metaKey))return;n.preventDefault();const r=n.currentTarget instanceof HTMLElement?n.currentTarget.closest("form"):null;r&&i(r)}}
826
+ ></textarea>
827
+ <div class="sp-comment-actions">
828
+ <button class="dpk-btn dpk-btn--accent" type="submit">${e.commentSubmit}</button>
829
+ </div>
830
+ </form>
831
+ </section>`},Wa=W`
832
+ .story-panel {
833
+ position: fixed;
834
+ top: 0;
835
+ right: 0;
836
+ bottom: 0;
837
+ z-index: 20;
838
+ display: grid;
839
+ grid-template-rows: auto minmax(0, 1fr) auto;
840
+ width: min(420px, 100vw);
841
+ border-left: 1px solid var(--dpk-rule-strong);
842
+ background: var(--dpk-paper-raised);
843
+ box-shadow: var(--dpk-shadow-lg);
844
+ animation: sp-slide-in 220ms var(--dpk-ease);
845
+ }
846
+ @keyframes sp-slide-in {
847
+ from {
848
+ opacity: 0;
849
+ transform: translateX(24px);
850
+ }
851
+ }
852
+ .sp-head {
853
+ display: flex;
854
+ align-items: center;
855
+ gap: 10px;
856
+ /* Like the shell header, stay clear of the fixed review button. */
857
+ padding: 14px 72px 12px 22px;
858
+ min-height: 60px;
859
+ box-sizing: border-box;
860
+ border-bottom: 1px solid var(--dpk-rule);
861
+ }
862
+ .sp-where {
863
+ display: flex;
864
+ flex-wrap: wrap;
865
+ gap: 2px 0;
866
+ flex: 1 1 auto;
867
+ min-width: 0;
868
+ color: var(--dpk-ink-faint);
869
+ font-size: 11.5px;
870
+ font-weight: 600;
871
+ }
872
+ .sp-where > span + span::before {
873
+ content: '›';
874
+ margin: 0 6px;
875
+ color: var(--dpk-rule-strong);
876
+ }
877
+ .sp-body {
878
+ display: grid;
879
+ align-content: start;
880
+ gap: 22px;
881
+ overflow: auto;
882
+ padding: 18px 22px 24px;
883
+ }
884
+ .sp-title {
885
+ margin: 0;
886
+ font-size: 19px;
887
+ font-weight: 700;
888
+ letter-spacing: -0.015em;
889
+ line-height: 1.35;
890
+ }
891
+ .sp-title dpk-component-inline-edit {
892
+ display: block;
893
+ margin: 0 -4px;
894
+ }
895
+ .sp-field {
896
+ display: grid;
897
+ gap: 8px;
898
+ }
899
+ .sp-field h3 {
900
+ margin: 0;
901
+ color: var(--dpk-ink-faint);
902
+ font-size: 11px;
903
+ font-weight: 650;
904
+ letter-spacing: 0.04em;
905
+ text-transform: uppercase;
906
+ }
907
+ .sp-statuses {
908
+ display: flex;
909
+ flex-wrap: wrap;
910
+ gap: 6px;
911
+ }
912
+ .sp-status {
913
+ display: inline-flex;
914
+ align-items: center;
915
+ gap: 7px;
916
+ padding: 5px 12px 5px 9px;
917
+ border: 1px solid var(--dpk-rule-strong);
918
+ border-radius: 999px;
919
+ background: var(--dpk-paper-raised);
920
+ color: var(--dpk-ink);
921
+ font: inherit;
922
+ font-size: 12.5px;
923
+ font-weight: 600;
924
+ cursor: pointer;
925
+ transition:
926
+ background 140ms var(--dpk-ease),
927
+ border-color 140ms var(--dpk-ease);
928
+ }
929
+ .sp-status:hover {
930
+ border-color: color-mix(in oklab, var(--usm-tone) 60%, var(--dpk-rule-strong));
931
+ }
932
+ .sp-status:focus-visible {
933
+ outline: none;
934
+ box-shadow: var(--dpk-focus);
935
+ }
936
+ .sp-status[aria-checked='true'] {
937
+ border-color: var(--usm-tone);
938
+ background: color-mix(in oklab, var(--usm-tone) 14%, var(--dpk-paper-raised));
939
+ box-shadow: inset 0 0 0 1px var(--usm-tone);
940
+ }
941
+ .sp-description {
942
+ display: block;
943
+ margin: 0 -4px;
944
+ color: var(--dpk-ink-soft);
945
+ font-size: 13px;
946
+ line-height: 1.65;
947
+ }
948
+ .sp-links {
949
+ display: grid;
950
+ gap: 4px;
951
+ margin: 0;
952
+ padding: 0;
953
+ list-style: none;
954
+ }
955
+ .sp-links li {
956
+ display: flex;
957
+ align-items: center;
958
+ gap: 4px;
959
+ border: 1px solid var(--dpk-rule);
960
+ border-radius: var(--dpk-radius-sm);
961
+ background: var(--dpk-paper-sunken);
962
+ }
963
+ .sp-link {
964
+ display: grid;
965
+ grid-template-columns: 16px minmax(0, 1fr);
966
+ column-gap: 9px;
967
+ align-items: center;
968
+ flex: 1 1 auto;
969
+ min-width: 0;
970
+ padding: 7px 4px 7px 10px;
971
+ color: var(--dpk-ink);
972
+ text-decoration: none;
973
+ }
974
+ .sp-link:hover .sp-link-text {
975
+ text-decoration: underline;
976
+ }
977
+ .sp-link svg {
978
+ grid-row: span 2;
979
+ width: 16px;
980
+ height: 16px;
981
+ color: var(--dpk-ink-soft);
982
+ }
983
+ .sp-link-text {
984
+ overflow: hidden;
985
+ font-family: var(--dpk-mono);
986
+ font-size: 12.5px;
987
+ font-weight: 650;
988
+ text-overflow: ellipsis;
989
+ white-space: nowrap;
990
+ }
991
+ .sp-link-url {
992
+ overflow: hidden;
993
+ color: var(--dpk-ink-faint);
994
+ font-size: 11px;
995
+ text-overflow: ellipsis;
996
+ white-space: nowrap;
997
+ }
998
+ .sp-add-link {
999
+ display: flex;
1000
+ gap: 6px;
1001
+ }
1002
+ .sp-add-link input {
1003
+ flex: 1 1 auto;
1004
+ min-width: 0;
1005
+ }
1006
+ .sp-add-link input[aria-invalid='true'] {
1007
+ border-color: var(--dpk-accent);
1008
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--dpk-accent) 22%, transparent);
1009
+ }
1010
+ /* The handoff dock floats at the bottom right, so the footer keeps left. */
1011
+ .sp-field h3 .sp-count {
1012
+ margin-left: 6px;
1013
+ font-family: var(--dpk-mono);
1014
+ letter-spacing: 0;
1015
+ }
1016
+ .sp-comment-list {
1017
+ display: grid;
1018
+ gap: 6px;
1019
+ margin: 0;
1020
+ padding: 0;
1021
+ list-style: none;
1022
+ }
1023
+ .sp-comment-list li {
1024
+ padding: 8px 11px;
1025
+ border-radius: var(--dpk-radius-sm);
1026
+ background: var(--dpk-paper-sunken);
1027
+ color: var(--dpk-ink);
1028
+ font-size: 12.5px;
1029
+ line-height: 1.6;
1030
+ white-space: pre-wrap;
1031
+ overflow-wrap: anywhere;
1032
+ }
1033
+ .sp-comment-form {
1034
+ display: grid;
1035
+ gap: 6px;
1036
+ }
1037
+ .sp-comment-form textarea {
1038
+ resize: vertical;
1039
+ min-height: 64px;
1040
+ }
1041
+ .sp-comment-actions {
1042
+ display: flex;
1043
+ justify-content: flex-end;
1044
+ }
1045
+ .sp-foot {
1046
+ display: flex;
1047
+ justify-content: flex-start;
1048
+ padding: 12px 22px;
1049
+ border-top: 1px solid var(--dpk-rule);
1050
+ }
1051
+ .sp-delete {
1052
+ display: inline-flex;
1053
+ align-items: center;
1054
+ gap: 6px;
1055
+ color: var(--dpk-ink-soft);
1056
+ }
1057
+ .sp-delete svg {
1058
+ width: 14px;
1059
+ height: 14px;
1060
+ }
1061
+ `,Xa=e=>{const t=e.stories.length,a=n=>t===0?0:n/t,s=n=>e.stories.filter(r=>r.statusId===n).length;return{rows:e.statuses.map((n,r)=>{const o=s(n.id);return{id:n.id,name:n.name,tone:n.tone,icon:n.icon,progress:e.statuses.length<=1?1:r/(e.statuses.length-1),previousId:e.statuses[r-1]?.id??null,nextId:e.statuses[r+1]?.id??null,storyCount:o,share:a(o)}})}},Za=W`
1062
+ :host {
1063
+ --dpk-usm-accent: var(--dpk-blue);
1064
+ }
1065
+ /*
1066
+ * A wide table must scroll inside itself and never widen the template shell.
1067
+ * It scrolls both ways so the backbone can stick to its top and the
1068
+ * milestone column to its left: a box that scrolls only sideways still
1069
+ * becomes the sticky ancestor, and its top would never move. Capped near the
1070
+ * viewport height, it fits under the tab bar once the page brings it up.
1071
+ */
1072
+ .map-scroll {
1073
+ min-width: 0;
1074
+ max-width: 100%;
1075
+ max-height: max(320px, calc(100dvh - 170px));
1076
+ overflow: auto;
1077
+ overscroll-behavior-x: contain;
1078
+ border: 1px solid var(--dpk-rule);
1079
+ border-radius: var(--dpk-radius-lg);
1080
+ background: var(--dpk-paper-sunken);
1081
+ box-shadow: var(--dpk-shadow);
1082
+ }
1083
+ .map {
1084
+ display: grid;
1085
+ gap: 0;
1086
+ min-width: max-content;
1087
+ }
1088
+ .map-row {
1089
+ display: grid;
1090
+ grid-template-columns: 140px repeat(var(--cols), minmax(180px, 240px));
1091
+ }
1092
+ .map-row + .map-row {
1093
+ border-top: 1px solid var(--dpk-rule);
1094
+ }
1095
+
1096
+ /* The backbone (activities and steps) stays at the top while the rows scroll. */
1097
+ .map-head {
1098
+ position: sticky;
1099
+ top: 0;
1100
+ z-index: 3;
1101
+ border-bottom: 1px solid var(--dpk-rule-strong);
1102
+ box-shadow: 0 8px 14px -12px var(--dpk-shade-3);
1103
+ }
1104
+
1105
+ /* The leading column (axis corners and milestone labels) stays at the left
1106
+ while the steps scroll sideways; it is opaque so cards pass under it. */
1107
+ .corner:first-child,
1108
+ .row-lead {
1109
+ position: sticky;
1110
+ left: 0;
1111
+ z-index: 2;
1112
+ box-shadow: 1px 0 0 var(--dpk-rule);
1113
+ }
1114
+ .row-lead {
1115
+ display: flex;
1116
+ flex-direction: column;
1117
+ align-items: flex-start;
1118
+ justify-content: center;
1119
+ gap: 2px;
1120
+ min-width: 0;
1121
+ padding: 8px 6px 8px 4px;
1122
+ background: var(--dpk-paper-sunken);
1123
+ }
1124
+ /* Row names and their meta line share one column: past the grip (15px), its
1125
+ gap (6px) and the inline edit's own padding (4px). */
1126
+ .row-lead {
1127
+ --usm-row-indent: 25px;
1128
+ }
1129
+ .row-meta {
1130
+ display: flex;
1131
+ flex-wrap: wrap;
1132
+ gap: 2px 8px;
1133
+ padding-left: var(--usm-row-indent);
1134
+ font-size: 10.5px;
1135
+ color: var(--dpk-ink-faint);
1136
+ }
1137
+ .row-timeframe {
1138
+ color: var(--dpk-ink-soft);
1139
+ font-weight: 600;
1140
+ }
1141
+ .row-count {
1142
+ font-family: var(--dpk-mono);
1143
+ font-variant-numeric: tabular-nums;
1144
+ }
1145
+ .corner,
1146
+ .act-head,
1147
+ .col-head,
1148
+ .row-head,
1149
+ .cell {
1150
+ padding: 10px;
1151
+ }
1152
+ .corner {
1153
+ background: var(--dpk-paper-sunken);
1154
+ display: grid;
1155
+ gap: 3px;
1156
+ align-content: start;
1157
+ }
1158
+
1159
+ /* Above the content: the page tabs (map / milestones) and, on the map, the
1160
+ unit toggle (group band vs one column per activity). */
1161
+ /* The grid's status filter: one toggle per status, which also reads as the
1162
+ legend of the card colors. */
1163
+ .map-toolbar {
1164
+ display: flex;
1165
+ flex-wrap: wrap;
1166
+ align-items: center;
1167
+ gap: 6px;
1168
+ margin: 16px 0 12px;
1169
+ }
1170
+ .filter-label {
1171
+ margin-right: 4px;
1172
+ color: var(--dpk-ink-faint);
1173
+ font-size: 11px;
1174
+ font-weight: 650;
1175
+ letter-spacing: 0.04em;
1176
+ text-transform: uppercase;
1177
+ }
1178
+ .filter-chip {
1179
+ display: inline-flex;
1180
+ align-items: center;
1181
+ gap: 6px;
1182
+ padding: 3px 9px 3px 7px;
1183
+ border: 1px solid var(--dpk-rule-strong);
1184
+ border-radius: 999px;
1185
+ background: var(--dpk-paper-raised);
1186
+ box-shadow: var(--dpk-bevel), var(--dpk-shadow-xs);
1187
+ color: var(--dpk-ink);
1188
+ font-size: 12px;
1189
+ font-weight: 600;
1190
+ text-decoration: none;
1191
+ transition:
1192
+ background 140ms var(--dpk-ease),
1193
+ border-color 140ms var(--dpk-ease);
1194
+ }
1195
+ .filter-chip:hover {
1196
+ border-color: color-mix(in oklab, var(--usm-tone) 60%, var(--dpk-rule-strong));
1197
+ }
1198
+ .filter-chip:focus-visible {
1199
+ outline: none;
1200
+ box-shadow: var(--dpk-focus);
1201
+ }
1202
+ .filter-chip[aria-checked='true'] {
1203
+ border-color: var(--usm-tone);
1204
+ background: color-mix(in oklab, var(--usm-tone) 14%, var(--dpk-paper-raised));
1205
+ box-shadow: inset 0 0 0 1px var(--usm-tone);
1206
+ }
1207
+ .filter-count {
1208
+ line-height: 1;
1209
+ color: var(--dpk-ink-faint);
1210
+ font-family: var(--dpk-mono);
1211
+ font-size: 10.5px;
1212
+ font-variant-numeric: tabular-nums;
1213
+ }
1214
+ .filter-clear {
1215
+ margin-left: 4px;
1216
+ color: var(--dpk-blue);
1217
+ font-size: 12px;
1218
+ font-weight: 600;
1219
+ text-decoration: none;
1220
+ }
1221
+ .filter-clear:hover {
1222
+ text-decoration: underline;
1223
+ }
1224
+
1225
+ .board-bar {
1226
+ border-bottom: 1px solid var(--dpk-rule);
1227
+ /* Stays on top while a long milestone list scrolls under it. */
1228
+ position: sticky;
1229
+ top: 0;
1230
+ z-index: 5;
1231
+ margin: -24px -24px 0;
1232
+ padding: 12px 24px;
1233
+ background: var(--dpk-glass);
1234
+ backdrop-filter: saturate(1.6) blur(14px);
1235
+ display: flex;
1236
+ flex-wrap: wrap;
1237
+ align-items: center;
1238
+ gap: 10px 14px;
1239
+ min-width: 0;
1240
+ }
1241
+
1242
+ /* The two pages: an underlined tab strip, heavier than the view toggle. */
1243
+ .page-tabs {
1244
+ display: inline-flex;
1245
+ gap: 4px;
1246
+ margin-right: auto;
1247
+ }
1248
+ .page-tabs [role='tab'] {
1249
+ position: relative;
1250
+ display: inline-flex;
1251
+ align-items: center;
1252
+ gap: 8px;
1253
+ padding: 7px 12px;
1254
+ border-radius: var(--dpk-radius-sm);
1255
+ color: var(--dpk-ink-soft);
1256
+ font-size: 13.5px;
1257
+ font-weight: 600;
1258
+ letter-spacing: -0.005em;
1259
+ text-decoration: none;
1260
+ white-space: nowrap;
1261
+ transition:
1262
+ color 160ms var(--dpk-ease),
1263
+ background 160ms var(--dpk-ease);
1264
+ }
1265
+ .page-tabs [role='tab']:hover {
1266
+ color: var(--dpk-ink);
1267
+ background: var(--dpk-paper-inset);
1268
+ }
1269
+ .page-tabs [role='tab']:focus-visible {
1270
+ outline: none;
1271
+ box-shadow: var(--dpk-focus);
1272
+ }
1273
+ .page-tabs [role='tab'][aria-selected='true'] {
1274
+ color: var(--dpk-ink);
1275
+ font-weight: 700;
1276
+ }
1277
+ .page-tabs [role='tab'][aria-selected='true']::after {
1278
+ content: '';
1279
+ position: absolute;
1280
+ left: 12px;
1281
+ right: 12px;
1282
+ bottom: -13px;
1283
+ height: 2px;
1284
+ border-radius: 2px;
1285
+ background: var(--dpk-usm-accent);
1286
+ }
1287
+ .page-tab-count {
1288
+ min-width: 18px;
1289
+ padding: 0 6px;
1290
+ border-radius: 999px;
1291
+ background: var(--dpk-rule);
1292
+ color: var(--dpk-ink-soft);
1293
+ font-family: var(--dpk-mono);
1294
+ font-size: 10.5px;
1295
+ font-weight: 650;
1296
+ font-variant-numeric: tabular-nums;
1297
+ line-height: 17px;
1298
+ text-align: center;
1299
+ }
1300
+ [role='tab'][aria-selected='true'] .page-tab-count {
1301
+ background: var(--dpk-blue-soft);
1302
+ color: var(--dpk-blue);
1303
+ }
1304
+
1305
+ /* A sunken track with the selected segment raised on top of it. */
1306
+ .segmented {
1307
+ display: inline-flex;
1308
+ gap: 2px;
1309
+ padding: 3px;
1310
+ max-width: 100%;
1311
+ overflow-x: auto;
1312
+ scrollbar-width: none;
1313
+ border: 1px solid var(--dpk-rule);
1314
+ border-radius: 999px;
1315
+ background: var(--dpk-paper-sunken);
1316
+ box-shadow: inset 0 1px 3px var(--dpk-shade-1);
1317
+ }
1318
+
1319
+ .tab {
1320
+ padding: 5px 14px;
1321
+ border-radius: 999px;
1322
+ font-size: 12px;
1323
+ font-weight: 550;
1324
+ text-decoration: none;
1325
+ color: var(--dpk-ink-soft);
1326
+ white-space: nowrap;
1327
+ transition:
1328
+ background 160ms var(--dpk-ease),
1329
+ color 160ms var(--dpk-ease),
1330
+ box-shadow 160ms var(--dpk-ease);
1331
+ }
1332
+
1333
+ .tab:hover {
1334
+ color: var(--dpk-ink);
1335
+ background: var(--dpk-paper-inset);
1336
+ }
1337
+
1338
+ .tab[data-current='true'] {
1339
+ background: var(--dpk-paper-raised);
1340
+ color: var(--dpk-ink);
1341
+ font-weight: 650;
1342
+ box-shadow: var(--dpk-bevel), var(--dpk-shadow-xs);
1343
+ }
1344
+
1345
+ /* Activity band: raised above the working canvas. A head spans its steps,
1346
+ so its contents stay in view beside the sticky column while the map
1347
+ scrolls sideways. */
1348
+ .act-head {
1349
+ position: relative;
1350
+ display: grid;
1351
+ align-content: start;
1352
+ gap: 7px;
1353
+ border-left: 1px solid var(--dpk-rule);
1354
+ background: var(--dpk-paper-raised);
1355
+ box-shadow:
1356
+ var(--dpk-bevel),
1357
+ inset 0 -1px 0 var(--dpk-rule-strong);
1358
+ font-size: 13px;
1359
+ font-weight: 650;
1360
+ letter-spacing: -0.005em;
1361
+ }
1362
+ .act-title,
1363
+ .act-meta,
1364
+ .act-steps {
1365
+ position: sticky;
1366
+ left: 150px;
1367
+ width: min(100%, 340px);
1368
+ min-width: 0;
1369
+ }
1370
+ .act-title {
1371
+ display: flex;
1372
+ align-items: center;
1373
+ gap: 8px;
1374
+ }
1375
+ .act-title > dpk-component-inline-edit {
1376
+ flex: 1 1 auto;
1377
+ min-width: 0;
1378
+ }
1379
+ .act-meta {
1380
+ display: flex;
1381
+ align-items: center;
1382
+ gap: 10px;
1383
+ }
1384
+ .act-meta .status-bar {
1385
+ flex: 1 1 auto;
1386
+ }
1387
+ /* Whose experience the activity is: a label, editable in place. */
1388
+ .act-actor {
1389
+ flex: none;
1390
+ max-width: 60%;
1391
+ padding: 0 4px;
1392
+ border-radius: 999px;
1393
+ background: var(--dpk-blue-soft);
1394
+ color: var(--dpk-blue);
1395
+ font-size: 11px;
1396
+ font-weight: 650;
1397
+ line-height: 20px;
1398
+ }
1399
+ .act-actor[data-empty='true'] {
1400
+ background: transparent;
1401
+ opacity: 0;
1402
+ transition: opacity 150ms ease;
1403
+ }
1404
+ .act-head:hover .act-actor[data-empty='true'],
1405
+ .act-actor[data-empty='true']:focus-within {
1406
+ opacity: 1;
1407
+ }
1408
+ /* The group view gives the steps no columns; the head lists them instead. */
1409
+ .act-steps {
1410
+ display: grid;
1411
+ gap: 3px;
1412
+ margin: 0;
1413
+ padding: 0 0 0 18px;
1414
+ color: var(--dpk-ink-soft);
1415
+ font-size: 11.5px;
1416
+ font-weight: 500;
1417
+ line-height: 1.45;
1418
+ }
1419
+ .act-steps li::marker {
1420
+ color: var(--dpk-ink-faint);
1421
+ font-family: var(--dpk-mono);
1422
+ font-size: 10px;
1423
+ }
1424
+ .act-head .count,
1425
+ .col-head .count {
1426
+ flex: 0 0 auto;
1427
+ padding: 0 6px;
1428
+ border-radius: 999px;
1429
+ background: var(--dpk-rule);
1430
+ line-height: 16px;
1431
+ }
1432
+ .col-head {
1433
+ display: flex;
1434
+ align-items: center;
1435
+ gap: 6px;
1436
+ border-left: 1px solid var(--dpk-rule);
1437
+ background: var(--dpk-paper-sunken);
1438
+ transition: background 160ms var(--dpk-ease);
1439
+ }
1440
+ .col-head h4 {
1441
+ flex: 1 1 auto;
1442
+ min-width: 0;
1443
+ }
1444
+ .col-head[data-current='true'] {
1445
+ background: color-mix(in srgb, var(--dpk-usm-accent) 8%, var(--dpk-paper-sunken));
1446
+ }
1447
+ .col-head h4 {
1448
+ font-size: 13px;
1449
+ font-weight: 600;
1450
+ margin: 0;
1451
+ }
1452
+
1453
+ .row-head {
1454
+ display: flex;
1455
+ align-items: center;
1456
+ gap: 6px;
1457
+ }
1458
+
1459
+ /* Milestone row label: plain text with a grip, not a chip. The "add
1460
+ milestone" row reuses \`.row-head\` for its ghost button. */
1461
+ .row-head[data-milestone] {
1462
+ align-self: stretch;
1463
+ margin: 0;
1464
+ padding: 0 6px 0 0;
1465
+ color: var(--dpk-ink);
1466
+ font-size: 12.5px;
1467
+ font-weight: 650;
1468
+ max-width: 100%;
1469
+ }
1470
+
1471
+ .row-head[draggable='true'] {
1472
+ cursor: grab;
1473
+ -webkit-user-select: none;
1474
+ user-select: none;
1475
+ }
1476
+
1477
+ .row-head[draggable='true'] dpk-component-inline-edit {
1478
+ -webkit-user-drag: none;
1479
+ }
1480
+
1481
+ .row-head[draggable='true']:active {
1482
+ cursor: grabbing;
1483
+ }
1484
+
1485
+ .row-grip {
1486
+ flex: 0 0 auto;
1487
+ display: inline-flex;
1488
+ color: var(--dpk-ink-faint);
1489
+ }
1490
+
1491
+ .row-grip svg {
1492
+ display: block;
1493
+ width: 15px;
1494
+ height: 15px;
1495
+ }
1496
+
1497
+ /* Row-level drag affordance: only the grip answers the hover. */
1498
+ .map-row[data-draggable='true']:hover .row-grip {
1499
+ color: var(--dpk-blue);
1500
+ }
1501
+ .map-row[data-draggable='true'] {
1502
+ cursor: grab;
1503
+ }
1504
+ .map-row[data-draggable='true']:active {
1505
+ cursor: grabbing;
1506
+ }
1507
+
1508
+ /*
1509
+ * Dragging state: entire row fades. Never disable pointer events on the
1510
+ * source here: Lit applies this state in the microtask right after
1511
+ * \`dragstart\`, and Blink then re-hit-tests the pointer and aborts the drag
1512
+ * when the source is no longer under it.
1513
+ */
1514
+ .map-row[data-row-dragging='true'] {
1515
+ opacity: 0.45;
1516
+ }
1517
+
1518
+ /* Drop target: entire row highlights. */
1519
+ .map-row[data-row-drop='true'] {
1520
+ outline: 2px dashed var(--dpk-blue);
1521
+ outline-offset: -2px;
1522
+ }
1523
+
1524
+ /* Unassigned is a holding area, not a release: its label is quieter. */
1525
+ .map-row[data-unassigned='true'] .row-head {
1526
+ padding-left: var(--usm-row-indent);
1527
+ color: var(--dpk-ink-soft);
1528
+ }
1529
+
1530
+ /* Cells are the working canvas: sunken, with a quiet dot lattice, so raised
1531
+ story cards read as things placed on the board. */
1532
+ .cell {
1533
+ border-left: 1px solid var(--dpk-rule);
1534
+ border-top: 1px solid var(--dpk-rule);
1535
+ display: flex;
1536
+ flex-direction: column;
1537
+ gap: 8px;
1538
+ min-height: 100px;
1539
+ background: var(--dpk-dots), var(--dpk-paper-sunken);
1540
+ transition: background 160ms var(--dpk-ease);
1541
+ }
1542
+ .cell[data-drop='true'] {
1543
+ outline: 2px dashed var(--dpk-blue);
1544
+ outline-offset: -2px;
1545
+ }
1546
+ .card-list {
1547
+ display: grid;
1548
+ gap: 10px;
1549
+ align-content: start;
1550
+ flex: 1 1 auto;
1551
+ }
1552
+ .add-cell {
1553
+ margin-top: auto;
1554
+ opacity: 0;
1555
+ transition:
1556
+ opacity 180ms var(--dpk-ease),
1557
+ background 160ms var(--dpk-ease),
1558
+ border-color 160ms var(--dpk-ease),
1559
+ color 160ms var(--dpk-ease);
1560
+ border: 1px dashed var(--dpk-rule-strong);
1561
+ border-radius: var(--dpk-radius-sm);
1562
+ background: transparent;
1563
+ color: var(--dpk-ink-faint);
1564
+ padding: 4px 8px;
1565
+ font-size: 11.5px;
1566
+ }
1567
+ .add-cell:hover {
1568
+ background: var(--dpk-blue-soft);
1569
+ border-color: var(--dpk-blue);
1570
+ color: var(--dpk-blue);
1571
+ }
1572
+ .cell:hover .add-cell {
1573
+ opacity: 1;
1574
+ }
1575
+ .empty {
1576
+ border: 1px dashed var(--dpk-rule-strong);
1577
+ border-radius: var(--dpk-radius-lg);
1578
+ padding: 28px 24px;
1579
+ background: var(--dpk-dots), var(--dpk-paper-sunken);
1580
+ max-width: 620px;
1581
+ display: grid;
1582
+ gap: 10px;
1583
+ }
1584
+ .count {
1585
+ font-family: var(--dpk-mono);
1586
+ font-variant-numeric: tabular-nums;
1587
+ font-size: 10px;
1588
+ color: var(--dpk-ink-faint);
1589
+ }
1590
+
1591
+ /* ------------------------------------------------------ milestones tab */
1592
+
1593
+ /* The release slices as a timeline, like the experience section of a
1594
+ portfolio: when on the left, one node per slice on a single rail, what
1595
+ and how big on the right. Nothing is boxed; the rail carries the order. */
1596
+ .ms-overview {
1597
+ --ms-node: 30px;
1598
+ --ms-when: 132px;
1599
+ --ms-gap: 44px;
1600
+ display: grid;
1601
+ gap: 28px;
1602
+ max-width: 920px;
1603
+ padding: 28px 0 40px;
1604
+ }
1605
+ .ms-timeline {
1606
+ margin: 0;
1607
+ padding: 0;
1608
+ list-style: none;
1609
+ }
1610
+ .ms-entry,
1611
+ .ms-add {
1612
+ display: grid;
1613
+ grid-template-columns: var(--ms-when) var(--ms-node) minmax(0, 1fr);
1614
+ grid-template-areas: 'when rail body';
1615
+ column-gap: 24px;
1616
+ }
1617
+ .ms-entry {
1618
+ padding-bottom: var(--ms-gap);
1619
+ }
1620
+ .ms-when {
1621
+ grid-area: when;
1622
+ display: flex;
1623
+ justify-content: flex-end;
1624
+ padding-top: 5px;
1625
+ }
1626
+ .ms-timeframe {
1627
+ color: var(--dpk-ink);
1628
+ font-size: 13px;
1629
+ font-weight: 650;
1630
+ font-variant-numeric: tabular-nums;
1631
+ letter-spacing: 0.01em;
1632
+ text-align: right;
1633
+ }
1634
+ .ms-timeframe[data-empty='true'] {
1635
+ color: var(--dpk-ink-faint);
1636
+ font-weight: 500;
1637
+ }
1638
+
1639
+ /* The rail runs through every entry's padding, so the nodes read as one line;
1640
+ it starts at the first node and fades out into the add node. */
1641
+ .ms-rail {
1642
+ grid-area: rail;
1643
+ position: relative;
1644
+ display: flex;
1645
+ justify-content: center;
1646
+ }
1647
+ .ms-rail::before {
1648
+ content: '';
1649
+ position: absolute;
1650
+ top: 0;
1651
+ bottom: calc(-1 * var(--ms-gap));
1652
+ left: calc(50% - 1px);
1653
+ width: 2px;
1654
+ border-radius: 1px;
1655
+ background: var(--dpk-rule-strong);
1656
+ }
1657
+ .ms-entry:first-child .ms-rail::before {
1658
+ top: calc(var(--ms-node) / 2);
1659
+ }
1660
+ .ms-add .ms-rail::before {
1661
+ bottom: auto;
1662
+ height: calc(var(--ms-node) / 2);
1663
+ background: repeating-linear-gradient(to bottom, var(--dpk-rule-strong) 0 3px, transparent 3px 7px);
1664
+ }
1665
+ .ms-node {
1666
+ position: relative;
1667
+ display: grid;
1668
+ place-items: center;
1669
+ width: var(--ms-node);
1670
+ height: var(--ms-node);
1671
+ box-sizing: border-box;
1672
+ border: 1px solid var(--dpk-rule-strong);
1673
+ border-radius: 50%;
1674
+ background: var(--dpk-paper-raised);
1675
+ color: var(--dpk-ink);
1676
+ font-family: var(--dpk-mono);
1677
+ font-size: 12px;
1678
+ font-weight: 700;
1679
+ font-variant-numeric: tabular-nums;
1680
+ /* A ring of page color cuts the rail around the node. */
1681
+ box-shadow:
1682
+ 0 0 0 5px var(--dpk-paper),
1683
+ var(--dpk-bevel),
1684
+ var(--dpk-shadow-xs);
1685
+ transition:
1686
+ border-color 160ms var(--dpk-ease),
1687
+ color 160ms var(--dpk-ease);
1688
+ }
1689
+ .ms-entry:hover .ms-node,
1690
+ .ms-entry:focus-within .ms-node {
1691
+ border-color: var(--dpk-blue);
1692
+ color: var(--dpk-blue-strong);
1693
+ }
1694
+ .ms-node--add {
1695
+ border-style: dashed;
1696
+ background: var(--dpk-paper);
1697
+ box-shadow: 0 0 0 5px var(--dpk-paper);
1698
+ }
1699
+ .ms-node--add::before,
1700
+ .ms-node--add::after {
1701
+ content: '';
1702
+ position: absolute;
1703
+ left: 50%;
1704
+ top: 50%;
1705
+ width: 10px;
1706
+ height: 1.5px;
1707
+ border-radius: 1px;
1708
+ background: var(--dpk-ink-faint);
1709
+ transform: translate(-50%, -50%);
1710
+ }
1711
+ .ms-node--add::after {
1712
+ transform: translate(-50%, -50%) rotate(90deg);
1713
+ }
1714
+ .ms-add .ms-body {
1715
+ display: flex;
1716
+ align-items: center;
1717
+ min-height: var(--ms-node);
1718
+ }
1719
+ /* The label lines up with the names above; the button's padding hangs out. */
1720
+ .ms-add .dpk-btn {
1721
+ margin-left: -12px;
1722
+ }
1723
+
1724
+ .ms-body {
1725
+ grid-area: body;
1726
+ display: grid;
1727
+ gap: 10px;
1728
+ min-width: 0;
1729
+ justify-items: start;
1730
+ }
1731
+ .ms-name {
1732
+ justify-self: stretch;
1733
+ min-width: 0;
1734
+ margin: 0;
1735
+ padding-top: 1px;
1736
+ font-size: 19px;
1737
+ font-weight: 700;
1738
+ line-height: 1.4;
1739
+ letter-spacing: -0.015em;
1740
+ }
1741
+ /* The field pads its text by 4px; pull it out by as much so the name lines
1742
+ up with the description and keeps its place when editing starts. */
1743
+ .ms-name dpk-component-inline-edit {
1744
+ display: block;
1745
+ margin: 0 -4px;
1746
+ }
1747
+ .ms-description {
1748
+ margin: 0;
1749
+ max-width: 64ch;
1750
+ color: var(--dpk-ink-soft);
1751
+ font-size: 14px;
1752
+ line-height: 1.75;
1753
+ white-space: pre-wrap;
1754
+ }
1755
+ .ms-description[data-empty='true'] {
1756
+ color: var(--dpk-ink-faint);
1757
+ font-size: 13px;
1758
+ }
1759
+ .ms-facts {
1760
+ display: flex;
1761
+ flex-wrap: wrap;
1762
+ gap: 10px 36px;
1763
+ margin: 6px 0 0;
1764
+ }
1765
+ .ms-facts dt {
1766
+ margin-bottom: 3px;
1767
+ color: var(--dpk-ink-faint);
1768
+ font-size: 11px;
1769
+ font-weight: 600;
1770
+ letter-spacing: 0.02em;
1771
+ }
1772
+ .ms-facts dd {
1773
+ display: flex;
1774
+ align-items: center;
1775
+ gap: 10px;
1776
+ margin: 0;
1777
+ color: var(--dpk-ink-faint);
1778
+ font-size: 12px;
1779
+ }
1780
+ .ms-facts strong {
1781
+ color: var(--dpk-ink);
1782
+ font-size: 15px;
1783
+ font-weight: 650;
1784
+ font-variant-numeric: tabular-nums;
1785
+ }
1786
+ .ms-meter {
1787
+ display: block;
1788
+ width: 72px;
1789
+ height: 4px;
1790
+ border-radius: 2px;
1791
+ background: var(--dpk-paper-inset);
1792
+ overflow: hidden;
1793
+ }
1794
+ .ms-meter > span {
1795
+ display: block;
1796
+ height: 100%;
1797
+ border-radius: inherit;
1798
+ background: var(--dpk-blue);
1799
+ }
1800
+
1801
+ /* Where the slice's stories sit across the backbone, in activity tones. */
1802
+ .ms-breakdown {
1803
+ display: grid;
1804
+ gap: 10px;
1805
+ width: min(100%, 460px);
1806
+ margin-top: 4px;
1807
+ }
1808
+ .ms-breakdown .status-bar {
1809
+ height: 8px;
1810
+ }
1811
+ .ms-legend {
1812
+ display: flex;
1813
+ flex-wrap: wrap;
1814
+ gap: 6px 16px;
1815
+ margin: 0;
1816
+ padding: 0;
1817
+ list-style: none;
1818
+ }
1819
+ .ms-legend li {
1820
+ display: inline-flex;
1821
+ align-items: center;
1822
+ gap: 6px;
1823
+ color: var(--dpk-ink-soft);
1824
+ font-size: 12px;
1825
+ }
1826
+ .ms-breakdown-count {
1827
+ color: var(--dpk-ink-faint);
1828
+ font-family: var(--dpk-mono);
1829
+ font-size: 11px;
1830
+ font-variant-numeric: tabular-nums;
1831
+ }
1832
+
1833
+ /* Narrow: the date moves above the name, the rail stays on the left. */
1834
+ @media (max-width: 640px) {
1835
+ .ms-overview {
1836
+ --ms-node: 26px;
1837
+ }
1838
+ .ms-entry,
1839
+ .ms-add {
1840
+ grid-template-columns: var(--ms-node) minmax(0, 1fr);
1841
+ grid-template-areas:
1842
+ 'rail when'
1843
+ 'rail body';
1844
+ column-gap: 16px;
1845
+ }
1846
+ .ms-add {
1847
+ grid-template-areas: 'rail body';
1848
+ }
1849
+ .ms-add .ms-when {
1850
+ display: none;
1851
+ }
1852
+ .ms-when {
1853
+ justify-content: flex-start;
1854
+ padding: 4px 0 2px;
1855
+ }
1856
+ .ms-timeframe {
1857
+ text-align: left;
1858
+ }
1859
+ }
1860
+
1861
+ /* ------------------------------------------------------- statuses tab */
1862
+
1863
+ /* The statuses in order, one row each: color, name, how many stories stand
1864
+ there, the palette to recolor it, and the order / delete tools. */
1865
+ .st-overview {
1866
+ display: grid;
1867
+ gap: 20px;
1868
+ max-width: 1040px;
1869
+ padding: 28px 0 40px;
1870
+ }
1871
+ .st-list {
1872
+ display: grid;
1873
+ margin: 0;
1874
+ padding: 0;
1875
+ list-style: none;
1876
+ border: 1px solid var(--dpk-rule);
1877
+ border-radius: var(--dpk-radius-lg);
1878
+ background: var(--dpk-paper-raised);
1879
+ box-shadow: var(--dpk-shadow-xs);
1880
+ }
1881
+ .st-row {
1882
+ display: grid;
1883
+ /* Fixed tool columns keep the unset row, which has no tools, in line. */
1884
+ grid-template-columns: 16px minmax(120px, 1fr) minmax(140px, 200px) 150px 84px;
1885
+ align-items: center;
1886
+ gap: 14px;
1887
+ padding: 12px 16px;
1888
+ }
1889
+ .st-row + .st-row {
1890
+ border-top: 1px solid var(--dpk-rule);
1891
+ }
1892
+ .st-name {
1893
+ min-width: 0;
1894
+ font-size: 14px;
1895
+ font-weight: 650;
1896
+ }
1897
+ .st-share {
1898
+ display: grid;
1899
+ gap: 5px;
1900
+ }
1901
+ .st-share-text {
1902
+ color: var(--dpk-ink-faint);
1903
+ font-family: var(--dpk-mono);
1904
+ font-size: 11px;
1905
+ font-variant-numeric: tabular-nums;
1906
+ }
1907
+ .st-meter {
1908
+ height: 5px;
1909
+ border-radius: 3px;
1910
+ background: var(--dpk-paper-sunken);
1911
+ overflow: hidden;
1912
+ }
1913
+ .st-meter > span {
1914
+ display: block;
1915
+ height: 100%;
1916
+ border-radius: 3px;
1917
+ background: var(--usm-tone);
1918
+ }
1919
+ .st-tones {
1920
+ display: inline-flex;
1921
+ flex-wrap: wrap;
1922
+ gap: 5px;
1923
+ }
1924
+ /* The status's own icon opens the menu of icons. */
1925
+ .st-icon-trigger {
1926
+ display: inline-grid;
1927
+ place-items: center;
1928
+ width: 30px;
1929
+ height: 30px;
1930
+ margin: -7px;
1931
+ padding: 0;
1932
+ border: 1px solid transparent;
1933
+ border-radius: var(--dpk-radius-sm);
1934
+ background: transparent;
1935
+ cursor: pointer;
1936
+ transition:
1937
+ background 140ms var(--dpk-ease),
1938
+ border-color 140ms var(--dpk-ease);
1939
+ }
1940
+ .st-icon-trigger:hover,
1941
+ .st-icon-trigger[aria-expanded='true'] {
1942
+ border-color: var(--dpk-rule-strong);
1943
+ background: var(--dpk-paper-raised);
1944
+ box-shadow: var(--dpk-shadow-xs);
1945
+ }
1946
+ .st-icon-trigger:focus-visible {
1947
+ outline: none;
1948
+ box-shadow: var(--dpk-focus);
1949
+ }
1950
+ .comment-pop.icon-menu {
1951
+ grid-template-columns: repeat(5, 36px);
1952
+ gap: 4px;
1953
+ padding: 8px;
1954
+ }
1955
+ .icon-option {
1956
+ display: inline-grid;
1957
+ place-items: center;
1958
+ width: 36px;
1959
+ height: 36px;
1960
+ padding: 0;
1961
+ border: 1px solid transparent;
1962
+ border-radius: var(--dpk-radius-sm);
1963
+ background: transparent;
1964
+ cursor: pointer;
1965
+ }
1966
+ .icon-option .status-icon {
1967
+ width: 18px;
1968
+ height: 18px;
1969
+ }
1970
+ .icon-option:hover,
1971
+ .icon-option:focus-visible {
1972
+ outline: none;
1973
+ background: var(--dpk-paper-inset);
1974
+ }
1975
+ .icon-option[aria-checked='true'] {
1976
+ border-color: color-mix(in oklab, var(--usm-tone) 55%, transparent);
1977
+ background: color-mix(in oklab, var(--usm-tone) 12%, transparent);
1978
+ }
1979
+ .st-tone {
1980
+ width: 18px;
1981
+ height: 18px;
1982
+ padding: 0;
1983
+ border: 2px solid var(--dpk-paper-raised);
1984
+ border-radius: 50%;
1985
+ background: var(--usm-tone);
1986
+ box-shadow: 0 0 0 1px var(--dpk-rule-strong);
1987
+ cursor: pointer;
1988
+ transition: box-shadow 150ms ease;
1989
+ }
1990
+ .st-tone:hover {
1991
+ box-shadow: 0 0 0 1px var(--usm-tone);
1992
+ }
1993
+ .st-tone[aria-checked='true'] {
1994
+ box-shadow: 0 0 0 2px var(--usm-tone);
1995
+ }
1996
+ .st-tone:focus-visible {
1997
+ outline: none;
1998
+ box-shadow: var(--dpk-focus);
1999
+ }
2000
+ .st-tools {
2001
+ display: inline-flex;
2002
+ gap: 2px;
2003
+ }
2004
+ .st-tools .dpk-icon-btn {
2005
+ width: 26px;
2006
+ height: 26px;
2007
+ font-size: 13px;
2008
+ }
2009
+ @media (max-width: 640px) {
2010
+ .st-row {
2011
+ grid-template-columns: 16px minmax(0, 1fr) auto;
2012
+ row-gap: 8px;
2013
+ }
2014
+ .st-share,
2015
+
2016
+ /* Step picker shown after a cross-activity drop. */
2017
+ .move-dialog {
2018
+ min-width: 220px;
2019
+ }
2020
+ `,H={kind:"idle"},Ja={width:300,height:240},Qa={width:228,height:116};class pt extends fe{static{this.styles=[fe.styles,Za,Ke,Be,Wa,Ot]}definitionFor(t){return Pe(t)}static{this.properties={mode:{state:!0}}}#t=new Rt(this);#e=new Nt(this);constructor(){super(),this.mode=H}renderRegions(t){return{main:this.#a(t)}}updated(){if(super.updated(),this.mode.kind==="picking-icon"){const a=this.renderRoot.querySelector("#icon-menu"),s=this.renderRoot.querySelector(`[data-icon-trigger="${CSS.escape(this.mode.statusId)}"]`);a&&s&&this.#e.open(a,s,Qa);return}if(this.mode.kind!=="picking-step")return;const t=this.renderRoot.querySelector("#move-dialog");t&&this.#e.open(t,Ct(this.mode.point.x,this.mode.point.y),Ja)}#a(t){const a=J(this.locale),s=Ie(t.navigation);return l`
2021
+ ${Ua(a,t,s)} ${this.#i(a,t,s)} ${this.#s(a,t,s)}
2022
+ ${Ya(a,t,this.mode,{confirm:i=>this.#p(i),cancel:()=>this.mode=H})}
2023
+ `}#s(t,a,s){if(s!=="map")return m;const i=Fa(a);return i?Ka(t,a,i):m}#i(t,a,s){switch(s){case"milestones":return Ra(t,a,ka(a.state));case"statuses":return za(t,a,Xa(a.state),{openFor:this.mode.kind==="picking-icon"?this.mode.statusId:null,toggle:i=>{const n=this.mode.kind==="picking-icon"&&this.mode.statusId===i;this.mode=n?H:{kind:"picking-icon",statusId:i}},close:()=>this.mode=H});case"map":return this.#n(t,a)}}#n(t,a){return $a({m:t,context:a,drag:this.#t,handlers:{selectStory:s=>this.#r(s),dropOnCell:(s,i)=>this.#o(s,i),dropOnGroupCell:(s,i,n)=>this.#d(s,i,n),dropOnMilestoneRow:(s,i)=>this.#l(s,i)}})}#r(t){const a=this.context(),s=x(a.state,t);s&&a.navigate({step:s.stepId,story:s.id})}#o(t,a){const s=this.context();s.dispatch(je(s.state,t,a.item.id,a.hoveredId,a.place))}#d(t,a,s){const i=this.context(),n=x(i.state,s.item.id);if(!n)return;if(n.activityId!==t){this.mode={kind:"picking-step",storyId:n.id,activityId:t,milestoneId:a,point:{x:s.event.clientX,y:s.event.clientY}};return}const r=He(i.state,t,a,n.id,s.hoveredId,s.place);r&&i.dispatch(r)}#l(t,a){const s=this.context(),i=s.state.milestones.map(r=>r.id),n=We(i,a.item.id,a.hoveredId,a.place);n&&s.dispatch(n)}#p(t){const a=this.mode;if(a.kind!=="picking-step")return;const s=this.context();s.dispatch(qe(s.state,a.storyId,a.activityId,t,a.milestoneId)),this.mode=H}}const ct=()=>{ba(),customElements.get("dpk-template-usm")||customElements.define("dpk-template-usm",pt)},es=Object.freeze(Object.defineProperty({__proto__:null,DpkTemplateUsm:pt,IDLE_MODE:H,allUsmIds:B,applyUsmAction:$e,defineUsmElement:ct,describeUsmAction:De,dropAfter:ya,emptyUsmBase:xe,findActivity:O,findMilestone:L,findStep:S,findStory:x,flatSteps:de,parseUsmBase:ke,resolveCellDrop:je,resolveGroupDrop:He,resolveMilestoneDrop:We,resolvePickedStepMove:qe,resolveUsmNavigation:Ue,serializeUsmAction:Re,storiesInCell:Z,storyCountForStep:Te,usmAction:ta,usmActions:v,usmCommentTargets:Ce,usmCurrentTarget:Ye,usmDefinitionFor:Pe,usmHasTarget:ze,usmMessages:J,usmTargetLabel:Ne,usmTitle:ue},Symbol.toStringTag,{value:"Module"}));export{ct as d,es as i};