dev-process-kit 0.0.8 → 0.0.9

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/README.md +1 -0
  2. package/dist/chunks/shared-7qenhU4J.js +2173 -0
  3. package/dist/chunks/{shared-Dn4XK7mS.js → shared-8lYUcRvS.js} +25 -15
  4. package/dist/chunks/shared-BHGClRU3.js +29 -0
  5. package/dist/chunks/{shared-DNk3phV5.js → shared-BIdQ89rB.js} +1 -1
  6. package/dist/chunks/{shared-BTlCV660.js → shared-BOFIcKZe.js} +8 -8
  7. package/dist/chunks/shared-Cia5FdOF.js +1112 -0
  8. package/dist/chunks/shared-D4czF1TI.js +1252 -0
  9. package/dist/chunks/{shared-DEdm-PCj.js → shared-D6Yx-euS.js} +2 -2
  10. package/dist/chunks/{shared-CwwZhA40.js → shared-Dkx_2Lbf.js} +336 -268
  11. package/dist/chunks/shared-Dn5j0MCU.js +1 -0
  12. package/dist/chunks/{shared-CupreHTH.js → shared-SGSKyTNs.js} +7 -7
  13. package/dist/chunks/shared-U2T3astJ.js +1094 -0
  14. package/dist/chunks/shared-nW8tfMgg.js +556 -0
  15. package/dist/chunks/{shared-CaLe76va.js → shared-p8037r6P.js} +2 -2
  16. package/dist/components.js +1 -1
  17. package/dist/index.js +1 -1
  18. package/dist/templates/delegation-poker.js +1 -1
  19. package/dist/templates/event-storming.js +1 -1
  20. package/dist/templates/example-mapping.js +1 -1
  21. package/dist/templates/grill.js +1 -1
  22. package/dist/templates/plain.js +1 -1
  23. package/dist/templates/prototype.js +1 -1
  24. package/dist/templates/slides.js +1 -1
  25. package/dist/templates/task-board.js +1 -1
  26. package/dist/templates/usm.js +1 -1
  27. package/dist/templates/whiteboard.js +1 -0
  28. package/package.json +3 -2
  29. package/dist/chunks/shared-1AA-0t4O.js +0 -29
  30. package/dist/chunks/shared-BAePwoKi.js +0 -679
  31. package/dist/chunks/shared-BYZoeQ97.js +0 -1963
  32. package/dist/chunks/shared-CSV1HkB2.js +0 -1
  33. package/dist/chunks/shared-Csmm_KdH.js +0 -761
  34. package/dist/chunks/shared-VNSWugEg.js +0 -556
@@ -1,679 +0,0 @@
1
- import{q as v,an as g,v as Y,as as D,ad as l,at as M,af as c,ag as u,av as R,a9 as Ce,aF as Ye,aa as L,ab as P,ac as V,P as Pe,f as Ve,_ as Ge,V as x,R as f,a0 as Z,a5 as Be,k as Ue,$ as W,a6 as qe,a1 as E,ay as G,a2 as d,I as ze,A as Fe,K as je,i as He,m as C,a3 as $,J as Ke,B as Je,aC as Xe,T as Q}from"./shared-BYZoeQ97.js";import{s as Ze,r as z,D as We}from"./shared-xrCdgpNS.js";import{P as ee,r as Qe,p as et,c as tt,a as it}from"./shared-1AA-0t4O.js";const y={SET_ACTIVITY_NAME:v("SET_ACTIVITY_NAME","activity",g({name:c(l(),u(1))})),SET_STEP_NAME:v("SET_STEP_NAME","step",g({name:c(l(),u(1))})),REORDER_STEP:v("REORDER_STEP","step",g({after:D(l())}),{mode:"sequence"}),ADD_ACTIVITY:v("ADD_ACTIVITY","page",g({id:M,name:c(l(),u(1))}),{dedupeKey:Y}),ADD_STEP:v("ADD_STEP","activity",g({id:M,name:c(l(),u(1))}),{dedupeKey:Y}),DELETE_ACTIVITY:v("DELETE_ACTIVITY","activity",g({})),DELETE_STEP:v("DELETE_STEP","step",g({})),SET_STORY_NAME:v("SET_STORY_NAME","story",g({name:c(l(),u(1))})),SET_STORY_DESCRIPTION:v("SET_STORY_DESCRIPTION","story",g({description:l()})),SET_STORY_MILESTONE:v("SET_STORY_MILESTONE","story",g({milestoneId:D(l())})),MOVE_STORY:v("MOVE_STORY","story",g({activityId:c(l(),u(1)),stepId:c(l(),u(1)),milestoneId:D(l()),after:D(l())}),{mode:"sequence"}),REORDER_STORY:v("REORDER_STORY","story",g({after:D(l())}),{mode:"sequence"}),ADD_STORY:v("ADD_STORY","step",g({id:M,name:c(l(),u(1)),activityId:c(l(),u(1)),milestoneId:R(l())}),{dedupeKey:Y}),DELETE_STORY:v("DELETE_STORY","story",g({})),SET_MILESTONE_NAME:v("SET_MILESTONE_NAME","milestone",g({name:c(l(),u(1))})),ADD_MILESTONE:v("ADD_MILESTONE","page",g({id:M,name:c(l(),u(1))}),{dedupeKey:Y}),DELETE_MILESTONE:v("DELETE_MILESTONE","milestone",g({})),REORDER_MILESTONE:v("REORDER_MILESTONE","milestone",g({after:D(l())}),{mode:"sequence"})},ot={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}})},rt=L({id:c(l(),u(1)),name:c(l(),u(1))}),nt=L({id:M,name:c(l(),u(1)),steps:P(V(rt),[])}),at=L({id:c(l(),u(1)),name:c(l(),u(1)),timeframe:R(l()),description:R(l())}),st=L({id:M,name:c(l(),u(1)),description:R(l()),activityId:c(l(),u(1)),stepId:c(l(),u(1)),milestoneId:R(l())}),dt=L({title:R(l()),activities:P(V(nt),[]),milestones:P(V(at),[]),stories:P(V(st),[])}),te=e=>{const t=Ce(dt,e),i=new Map;for(const a of t.activities)for(const s of a.steps)i.set(s.id,a.id);const o=new Set(t.milestones.map(a=>a.id)),r=new Set,n=(a,s)=>{if(r.has(s))throw new Error(`duplicate id "${s}" in ${a}`);r.add(s)};for(const a of t.activities){n("activities",a.id);for(const s of a.steps)n("steps",s.id)}for(const a of t.milestones)n("milestones",a.id);for(const a of t.stories){n("stories",a.id);const s=i.get(a.stepId);if(s===void 0||s!==a.activityId)throw new Error(`story "${a.id}" references unknown activityId/stepId`);if(a.milestoneId!==void 0&&!o.has(a.milestoneId))throw new Error(`story "${a.id}" references unknown milestoneId "${a.milestoneId}"`)}return t},ie=()=>({activities:[],milestones:[],stories:[]}),A=(e,t)=>{if(t!==void 0)return e.activities.find(i=>i.id===t)},F=(e,t)=>`${e}.${t}`,k=(e,t)=>{if(t===void 0)return;const i=Ye(t,2);if(i){const[o,r]=i;if(o===void 0||r===void 0)return;const n=e.activities.find(s=>s.id===o),a=n?.steps.find(s=>s.id===r);return n&&a?{activity:n,step:a}:void 0}if(!t.includes("."))for(const o of e.activities){const r=o.steps.find(n=>n.id===t);if(r)return{activity:o,step:r}}},I=(e,t)=>{if(t!==void 0)return e.milestones.find(i=>i.id===t)},S=(e,t)=>{if(t!==void 0)return e.stories.find(i=>i.id===t)},oe=e=>e.activities.flatMap(t=>t.steps.map(i=>({activity:t,step:i}))),lt=e=>({...e,stories:Ze(e.stories,[t=>`${t.activityId}/${t.stepId}/${t.milestoneId??""}`])}),B=(e,t,i)=>e.stories.filter(o=>o.stepId===t&&(o.milestoneId??void 0)===i),re=(e,t,i)=>e.stories.filter(o=>o.activityId===t&&(o.milestoneId??void 0)===i),O=e=>[...e.activities.map(t=>t.id),...e.activities.flatMap(t=>t.steps.map(i=>i.id)),...e.milestones.map(t=>t.id),...e.stories.map(t=>t.id)],pt=(e,t)=>e.stories.filter(i=>i.stepId===t).length,ne=(e,t)=>{const i=Pe(y,t);if(i===null)return null;const o=i.target.id;switch(i.type){case"SET_ACTIVITY_NAME":{const{name:r}=i.payload;return e.activities.some(n=>n.id===o)?{...e,activities:e.activities.map(n=>n.id===o?{...n,name:r}:n)}:null}case"SET_STEP_NAME":{const{name:r}=i.payload,n=k(e,o);return n?{...e,activities:e.activities.map(a=>a.id===n.activity.id?{...a,steps:a.steps.map(s=>s.id===n.step.id?{...s,name:r}:s)}:a)}:null}case"REORDER_STEP":{const{after:r}=i.payload,n=k(e,o);if(!n)return null;const a=r===null?null:k(e,r);if(r!==null&&(!a||a.activity.id!==n.activity.id))return null;const s=se(n.activity.steps,n.step.id,a?.step.id??null);return s===null?null:{...e,activities:e.activities.map(p=>p.id===n.activity.id?{...p,steps:s}:p)}}case"ADD_ACTIVITY":{const r=i.payload;return e.activities.some(n=>n.id===r.id)?e:{...e,activities:[...e.activities,{id:r.id,name:r.name,steps:[]}]}}case"ADD_STEP":{const r=i.payload,n=e.activities.find(a=>a.id===o);return n?n.steps.some(a=>a.id===r.id)?e:{...e,activities:e.activities.map(a=>a.id===o?{...a,steps:[...a.steps,{id:r.id,name:r.name}]}:a)}:null}case"DELETE_ACTIVITY":{const r=e.activities.find(a=>a.id===o);if(!r)return null;const n=new Set(r.steps.map(a=>a.id));return{...e,activities:e.activities.filter(a=>a.id!==o),stories:e.stories.filter(a=>a.activityId!==o&&!n.has(a.stepId))}}case"DELETE_STEP":{const r=k(e,o);return r?{...e,activities:e.activities.map(n=>n.id===r.activity.id?{...n,steps:n.steps.filter(a=>a.id!==r.step.id)}:n),stories:e.stories.filter(n=>n.activityId!==r.activity.id||n.stepId!==r.step.id)}:null}case"SET_STORY_NAME":{const{name:r}=i.payload;return j(e,o,n=>({...n,name:r}))}case"SET_STORY_DESCRIPTION":{const{description:r}=i.payload;return j(e,o,n=>({...n,description:r}))}case"SET_STORY_MILESTONE":{const{milestoneId:r}=i.payload;return r!==null&&!I(e,r)?null:j(e,o,n=>r===null?H(n):{...n,milestoneId:r})}case"MOVE_STORY":{const r=i.payload,n=S(e,o);if(!n)return null;const a=k(e,r.stepId);if(!a||a.activity.id!==r.activityId||r.milestoneId!==null&&!I(e,r.milestoneId))return null;const s=r.milestoneId??void 0,p=s===void 0?{...H(n),activityId:a.activity.id,stepId:a.step.id}:{...n,activityId:a.activity.id,stepId:a.step.id,milestoneId:s};return ae(e,p,r.after)}case"REORDER_STORY":{const{after:r}=i.payload,n=S(e,o);return n?ae(e,n,r,!0):null}case"ADD_STORY":{const r=i.payload,n=k(e,t.target.id);if(!n||n.activity.id!==r.activityId||r.milestoneId!==void 0&&!I(e,r.milestoneId))return null;if(e.stories.some(s=>s.id===r.id))return e;const a={id:r.id,name:r.name,activityId:r.activityId,stepId:n.step.id,...r.milestoneId===void 0?{}:{milestoneId:r.milestoneId}};return{...e,stories:[...e.stories,a]}}case"DELETE_STORY":return e.stories.some(r=>r.id===o)?{...e,stories:e.stories.filter(r=>r.id!==o)}:null;case"SET_MILESTONE_NAME":{const{name:r}=i.payload;return e.milestones.some(n=>n.id===o)?{...e,milestones:e.milestones.map(n=>n.id===o?{...n,name:r}:n)}:null}case"ADD_MILESTONE":{const r=i.payload;return e.milestones.some(n=>n.id===r.id)?e:{...e,milestones:[...e.milestones,{id:r.id,name:r.name}]}}case"DELETE_MILESTONE":return e.milestones.some(r=>r.id===o)?{...e,milestones:e.milestones.filter(r=>r.id!==o),stories:e.stories.map(r=>r.milestoneId===o?H(r):r)}:null;case"REORDER_MILESTONE":{const{after:r}=i.payload,n=se(e.milestones,o,r);return n===null?null:{...e,milestones:n}}default:return Ve(i)}},j=(e,t,i)=>e.stories.some(o=>o.id===t)?{...e,stories:e.stories.map(o=>o.id===t?i(o):o)}:null,H=e=>{const{milestoneId:t,...i}=e;return i},ae=(e,t,i,o=!1)=>{const r=t.milestoneId??void 0,n=e.stories.filter(h=>h.id!==t.id),a=n.filter(h=>h.stepId===t.stepId&&(h.milestoneId??void 0)===r);if(i!==null){const h=n.find(N=>N.id===i);if(!h||h.stepId!==t.stepId||(h.milestoneId??void 0)!==r)return null;if(o){const N=S(e,t.id);if(!N||h.stepId!==N.stepId||(h.milestoneId??void 0)!==(N.milestoneId??void 0))return null}}const s=i===null?[t,...a]:de(a,t,i),p=n.findIndex(h=>h.stepId===t.stepId&&(h.milestoneId??void 0)===r),m=new Set(a.map(h=>h.id)),T=n.filter(h=>!m.has(h.id)),b=p<0?T.length:Math.min(p,T.length),w=[...T.slice(0,b),...s,...T.slice(b)];return{...e,stories:w}},se=(e,t,i)=>{if(!e.some(n=>n.id===t)||i!==null&&!e.some(n=>n.id===i))return null;if(i===t)return[...e];const o=e.find(n=>n.id===t);if(o===void 0)return null;const r=e.filter(n=>n.id!==t);return de(r,o,i)},de=(e,t,i)=>{const o=[...e],r=i===null?-1:o.findIndex(n=>n.id===i);return o.splice(r+1,0,t),o},U=Ge({en:{renameActivity:"Rename activity",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",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",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",milestoneDefinitionsTitle:"Milestones",timeframeColumn:"Timeframe",descriptionColumn:"Description",moveDialogLabel:"Step to move to",moveDialogSelectLabel:"Destination",moveConfirm:"Move",moveCancel:"Cancel",storyNameLabel:"Story name",editTitleAria:"Edit title",commentAria:"Comment",deleteAria:"Delete",newActivityName:"New activity",newStepName:"New step",newMilestoneName:"New milestone",newStoryName:"New story"},ja:{renameActivity:"\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u540D\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",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",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",milestoneDefinitionsTitle:"\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3",timeframeColumn:"\u6642\u671F",descriptionColumn:"\u8AAC\u660E",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",storyNameLabel:"\u30B9\u30C8\u30FC\u30EA\u30FC\u540D",editTitleAria:"\u30BF\u30A4\u30C8\u30EB\u3092\u7DE8\u96C6",commentAria:"\u30B3\u30E1\u30F3\u30C8",deleteAria:"\u524A\u9664",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"}}),q=(e,t,i)=>{const o=typeof i=="string"?i:"",r=typeof t=="string"?t:void 0;return r===void 0?e.toValue(o):e.fromTo(r,o)},K=(e,t)=>typeof t=="string"?e.afterName(t):e.toFront,ct={SET_ACTIVITY_NAME:(e,t,i)=>({title:e.renameActivity,tone:"update",body:q(e,A(i,t.target.id)?.name,f(y.SET_ACTIVITY_NAME,t).name??"")}),SET_STEP_NAME:(e,t,i)=>({title:e.renameStep,tone:"update",body:q(e,k(i,t.target.id)?.step.name,f(y.SET_STEP_NAME,t).name??"")}),REORDER_STEP:(e,t)=>({title:e.reorderStep,tone:"move",body:K(e,f(y.REORDER_STEP,t).after)}),ADD_ACTIVITY:(e,t)=>({title:e.addActivity,tone:"create",body:e.added(String(f(y.ADD_ACTIVITY,t).name??""))}),ADD_STEP:(e,t)=>({title:e.addStep,tone:"create",body:e.added(String(f(y.ADD_STEP,t).name??""))}),DELETE_ACTIVITY:(e,t,i)=>({title:e.deleteActivity,tone:"delete",body:e.removed(A(i,t.target.id)?.name??t.target.id)}),DELETE_STEP:(e,t,i)=>({title:e.deleteStep,tone:"delete",body:e.removed(k(i,t.target.id)?.step.name??t.target.id)}),SET_STORY_NAME:(e,t,i)=>({title:e.renameStory,tone:"update",body:q(e,S(i,t.target.id)?.name,f(y.SET_STORY_NAME,t).name??"")}),SET_STORY_DESCRIPTION:(e,t)=>({title:e.updateStoryDescription,tone:"update",body:e.toValue(String(f(y.SET_STORY_DESCRIPTION,t).description??"").slice(0,90))}),SET_STORY_MILESTONE:(e,t,i)=>{const o=f(y.SET_STORY_MILESTONE,t).milestoneId;return{title:e.changeMilestone,tone:"move",body:o==null?e.toUnassigned:e.toName(I(i,String(o))?.name??String(o))}},MOVE_STORY:(e,t,i)=>({title:e.moveStory,tone:"move",body:e.toName(k(i,String(f(y.MOVE_STORY,t).stepId))?.step.name??String(f(y.MOVE_STORY,t).stepId??""))}),REORDER_STORY:(e,t)=>({title:e.reorderStory,tone:"move",body:K(e,f(y.REORDER_STORY,t).after)}),ADD_STORY:(e,t)=>({title:e.addStory,tone:"create",body:e.added(String(f(y.ADD_STORY,t).name??""))}),DELETE_STORY:(e,t,i)=>({title:e.deleteStory,tone:"delete",body:e.removed(S(i,t.target.id)?.name??t.target.id)}),SET_MILESTONE_NAME:(e,t,i)=>({title:e.renameMilestone,tone:"update",body:q(e,I(i,t.target.id)?.name,f(y.SET_MILESTONE_NAME,t).name??"")}),ADD_MILESTONE:(e,t)=>({title:e.addMilestone,tone:"create",body:e.added(String(f(y.ADD_MILESTONE,t).name??""))}),DELETE_MILESTONE:(e,t,i)=>({title:e.deleteMilestone,tone:"delete",body:e.removed(I(i,t.target.id)?.name??t.target.id)}),REORDER_MILESTONE:(e,t)=>({title:e.reorderMilestone,tone:"move",body:K(e,f(y.REORDER_MILESTONE,t).after)})},le=(e,t,i,o)=>{let r;try{const n=ct[t.type];r=n?n(e,t,o??i):{title:t.type,tone:"meta"}}catch{r={title:t.type,tone:"meta"}}return{title:r.title,targetLabel:ce(e,i,t.target),tone:r.tone,...r.body===void 0?{}:{summary:r.body}}},pe=e=>`${e.type} ${x(e.target)} ${JSON.stringify(e.payload)}`,ce=(e,t,i)=>{try{switch(i.type){case"activity":{const o=A(t,i.id);return o?e.targetLabel(e.activityGroup,o.name):e.targetMissing(e.activityGroup,i.id)}case"step":{const o=k(t,i.id)?.step;return o?e.targetLabel(e.stepGroup,o.name):e.targetMissing(e.stepGroup,i.id)}case"story":{const o=S(t,i.id);return o?e.targetLabel(e.storyGroup,o.name):e.targetMissing(e.storyGroup,i.id)}case"milestone":{const o=I(t,i.id);return o?e.targetLabel(e.milestoneGroup,o.name):e.targetMissing(e.milestoneGroup,i.id)}case"page":return e.targetLabel(e.mapGroup,J(t));default:return`${i.type} \xB7 ${i.id}`}}catch{return`${i.type} \xB7 ${i.id}`}},ue=(e,t,i)=>{const o=[{value:"page:usm",label:e.wholeMap,group:e.mapGroup}];for(const r of t.activities){o.push({value:x({type:"activity",id:r.id}),label:r.name,group:e.activityGroup});for(const n of r.steps)o.push({value:x({type:"step",id:F(r.id,n.id)}),label:`${r.name} \u203A ${n.name}`,group:e.stepGroup})}for(const r of t.milestones)o.push({value:x({type:"milestone",id:r.id}),label:r.name,group:e.milestoneGroup});for(const r of t.stories)o.push({value:x({type:"story",id:r.id}),label:r.name,group:e.storyGroup});return o},me=(e,t,i)=>{const o=t.stories.find(r=>r.id===i.story);if(o)return{value:x({type:"story",id:o.id}),label:o.name,group:e.storyGroup};for(const r of t.activities){const n=r.steps.find(a=>a.id===i.step);if(n)return{value:x({type:"step",id:F(r.id,n.id)}),label:n.name,group:e.stepGroup}}return null},J=e=>e.title??"User Story Mapping",ve=(e,t)=>{const i=k(e,t.step),o=i?.activity??A(e,t.activity)??e.activities[0],r=i?.step??o?.steps.find(s=>s.id===t.step)??o?.steps[0],n=S(e,t.story),a={...t};return o?a.activity=o.id:delete a.activity,r?a.step=r.id:delete a.step,n?a.story=n.id:delete a.story,a.view=t.view==="group"?"group":"activity",a},ge=(e,t)=>{switch(t.type){case"activity":return A(e,t.id)!==void 0;case"step":return k(e,t.id)!==void 0;case"story":return S(e,t.id)!==void 0;case"milestone":return I(e,t.id)!==void 0;case"page":return!0;default:return!1}},ye=e=>{const t=U(e);return{name:"usm",label:"User Story Mapping",parseBase:te,emptyBase:ie,actions:y,apply:ne,canonicalState:lt,hasTarget:ge,canonicalTarget:(i,o)=>{if(o.type!=="step")return o;const r=k(i,o.id);return r?{...o,id:F(r.activity.id,r.step.id)}:o},describe:(i,o,r)=>le(t,i,o,r),serialize:pe,resolveNavigation:ve,commentTargets:(i,o)=>ue(t,i),currentTarget:(i,o)=>me(t,i,o),title:J}},ut={width:300,height:260},mt=Z`
2
- :host {
3
- position: relative;
4
- display: grid;
5
- gap: 5px;
6
- background: var(--dpk-paper-raised);
7
- border: 1px solid var(--dpk-rule);
8
- border-radius: var(--dpk-radius);
9
- box-shadow: var(--dpk-bevel), var(--dpk-shadow-xs);
10
- padding: 10px 12px 8px 14px;
11
- cursor: pointer;
12
- transition:
13
- box-shadow 200ms var(--dpk-ease),
14
- transform 200ms var(--dpk-ease),
15
- border-color 200ms var(--dpk-ease);
16
- }
17
-
18
- /* Left accent: a quiet claim that this card belongs to the board's story
19
- lane, without a hard border changing the card's shape. */
20
- :host::before {
21
- content: '';
22
- position: absolute;
23
- inset: 0;
24
- border-radius: inherit;
25
- box-shadow: inset 3px 0 0 color-mix(in srgb, var(--dpk-usm-accent) 65%, transparent);
26
- pointer-events: none;
27
- }
28
-
29
- :host(:hover) {
30
- border-color: var(--dpk-rule-strong);
31
- box-shadow: var(--dpk-bevel), var(--dpk-shadow-sm);
32
- transform: translateY(-2px);
33
- }
34
-
35
- :host([focused]) {
36
- border-color: var(--dpk-blue);
37
- box-shadow:
38
- var(--dpk-bevel),
39
- var(--dpk-shadow),
40
- 0 0 0 2px color-mix(in srgb, var(--dpk-blue) 22%, transparent);
41
- }
42
-
43
- :host([dragging]) {
44
- opacity: 0.45;
45
- transform: none;
46
- }
47
-
48
- .card-name {
49
- font-size: 13px;
50
- font-weight: 620;
51
- letter-spacing: -0.01em;
52
- line-height: 1.3;
53
- }
54
-
55
- .card-text {
56
- font-size: 11.5px;
57
- line-height: 1.5;
58
- color: var(--dpk-ink-soft);
59
- white-space: pre-wrap;
60
- }
61
-
62
- .card-tools {
63
- display: flex;
64
- gap: 2px;
65
- align-items: center;
66
- justify-content: flex-end;
67
- margin-top: 2px;
68
- padding-top: 5px;
69
- border-top: 1px solid var(--dpk-rule);
70
- opacity: 0;
71
- transition: opacity 150ms ease;
72
- }
73
-
74
- :host(:hover) .card-tools,
75
- :host([focused]) .card-tools,
76
- :host([data-mode='editing']) .card-tools,
77
- :host([data-mode='commenting']) .card-tools {
78
- opacity: 1;
79
- }
80
- `;class vt extends Be{static{this.styles=[Ue,mt,W]}static{this.properties={story:{attribute:!1},notes:{attribute:!1},mode:{type:String,reflect:!0,attribute:"data-mode"},focused:{type:Boolean,reflect:!0},dragging:{type:Boolean,reflect:!0},onIntent:{attribute:!1}}}#t="";#r=new ee(this);#o=new qe(this);constructor(){super(),this.story=null,this.notes=[],this.mode="view",this.focused=!1,this.dragging=!1,this.onIntent=null,this.addEventListener("click",()=>this.#e({kind:"select"}))}updated(t){if(t.has("mode")&&(this.mode!=="commenting"&&(this.#t=""),this.mode==="editing"&&this.renderRoot.querySelector("dpk-component-inline-edit")?.startEditing()),this.mode!=="commenting")return;const i=this.renderRoot.querySelector(".comment-pop"),o=this.renderRoot.querySelector('[data-role="comment"]');i&&o&&this.#r.open(i,o,ut)}render(){const t=this.story;if(!t)return E;const i=U(this.#o.locale),o=this.mode==="editing",r=this.mode==="commenting";return d`
81
- <div class="card-name">
82
- ${o?d`<dpk-component-inline-edit
83
- .value=${t.name}
84
- .label=${i.storyNameLabel}
85
- @dpk-commit=${G(n=>this.#e({kind:"rename",name:n}))}
86
- ></dpk-component-inline-edit>`:d`<span>${t.name}</span>`}
87
- </div>
88
- ${t.description?d`<div class="card-text">${t.description}</div>`:E}
89
- <div class="card-tools">
90
- <button
91
- class="dpk-icon-btn"
92
- type="button"
93
- data-role="edit"
94
- aria-label=${i.editTitleAria}
95
- data-active=${String(o)}
96
- @click=${this.#i({kind:"toggle-edit"})}
97
- >
98
- ${ze()}
99
- </button>
100
- <button
101
- class="dpk-icon-btn"
102
- type="button"
103
- data-role="comment"
104
- aria-label=${i.commentAria}
105
- data-active=${String(r)}
106
- @click=${this.#i({kind:"toggle-comment"})}
107
- >
108
- ${Fe()}
109
- ${this.notes.length>0?d`<span class="dpk-icon-badge">${this.notes.length}</span>`:E}
110
- </button>
111
- <button
112
- class="dpk-icon-btn"
113
- type="button"
114
- data-role="delete"
115
- aria-label=${i.deleteAria}
116
- @click=${this.#i({kind:"delete"})}
117
- >
118
- ${je()}
119
- </button>
120
- </div>
121
- ${r?this.#n():E}
122
- `}#n(){return Qe(tt(this.#o.locale),et(this.#t,this.notes.map(He)),t=>{t.kind==="input"?(this.#t=t.body,this.requestUpdate()):this.#e(t)})}#i(t){return i=>{i.stopPropagation(),this.#e(t)}}#e(t){this.onIntent?.(t)}}const gt=()=>{customElements.get("dpk-internal-usm-story-card")||customElements.define("dpk-internal-usm-story-card",vt)},yt=(e,t,i)=>{const o=e.at(-1)??null;if(t===null||i==="end")return o;const r=e.indexOf(t);return r<0?o:i==="after"?t:r===0?null:e.at(r-1)??null},he=(e,t,i,o,r)=>{const n=B(e,t.stepId,t.milestoneId).map(a=>a.id);return{type:"MOVE_STORY",target:{type:"story",id:i},payload:{activityId:t.activityId,stepId:t.stepId,milestoneId:t.milestoneId??null,after:z(n,i,o,r)}}},fe=(e,t,i,o,r,n)=>{const a=S(e,o);if(!a||a.activityId!==t)return null;const s=re(e,t,i).map(p=>p.id);return{type:"MOVE_STORY",target:{type:"story",id:o},payload:{activityId:t,stepId:a.stepId,milestoneId:i??null,after:z(s,o,r,n)}}},be=(e,t,i,o,r)=>{const n=B(e,o,r).filter(a=>a.id!==t);return{type:"MOVE_STORY",target:{type:"story",id:t},payload:{activityId:i,stepId:o,milestoneId:r??null,after:n.at(-1)?.id??null}}},ke=(e,t,i,o)=>e.includes(t)?{type:"REORDER_MILESTONE",target:{type:"milestone",id:t},payload:{after:z(e,t,i,o)}}:null,ht=e=>{const t=e.milestones.map(o=>({id:o.id,name:o.name,timeframe:o.timeframe?.trim()??"",description:o.description?.trim()??""})),i={timeframe:t.some(o=>o.timeframe!==""),description:t.some(o=>o.description!=="")};return i.timeframe||i.description?{columns:i,rows:t}:null},Ee=(e,t)=>{const i=C("new-activity",O(t.state));if(!t.dispatch({type:"ADD_ACTIVITY",target:{type:"page",id:"usm"},payload:{id:i,name:e.newActivityName}}).ok)return;const r=C("new-step",[...O(t.state),i]);t.dispatch({type:"ADD_STEP",target:{type:"activity",id:i},payload:{id:r,name:e.newStepName}}),t.navigate({activity:i,step:null,story:null})},ft=(e,t,i)=>{const o=C("new-step",O(t.state));t.dispatch({type:"ADD_STEP",target:{type:"activity",id:i},payload:{id:o,name:e.newStepName}})},bt=(e,t)=>{const i=C("new-milestone",O(t.state));t.dispatch({type:"ADD_MILESTONE",target:{type:"page",id:"usm"},payload:{id:i,name:e.newMilestoneName}})},Se=(e,t,i,o,r)=>{const n=C("new-story",O(t.state));t.dispatch({type:"ADD_STORY",target:{type:"step",id:o},payload:{id:n,name:e.newStoryName,activityId:i,...r===void 0?{}:{milestoneId:r}}}).ok&&t.navigate({activity:i,step:o,story:n})},_={kind:"idle"},X=(e,t)=>e.kind!=="idle"&&e.storyId===t,Te=(e,t)=>X(e,t)&&(e.kind==="editing"||e.kind==="commenting")?e.kind:"view",$e=(e,t,i)=>{switch(i.kind){case"toggle-edit":return e.kind==="editing"&&e.storyId===t?_:{kind:"editing",storyId:t};case"toggle-comment":return e.kind==="commenting"&&e.storyId===t?_:{kind:"commenting",storyId:t};case"rename":case"comment":case"dismiss":case"delete":return X(e,t)?_:e;case"select":return e}},we=(e,t)=>[...t.milestones.map(({id:i,name:o})=>({id:i,name:o})),{id:void 0,name:e.unassigned}],kt=(e,t)=>d`
123
- <div class="empty">
124
- <h2>${e.emptyTitle}</h2>
125
- <p>${e.emptyBody}</p>
126
- <button class="dpk-btn dpk-btn--accent" type="button" @click=${()=>Ee(e,t)}>
127
- ${e.firstActivityButton}
128
- </button>
129
- </div>
130
- `,Et=e=>{const{m:t,context:i}=e,o=oe(i.state);if(o.length===0)return kt(t,i);const r=i.navigation.view==="group"?"group":"activity";return d`
131
- <div class="view-tabs" role="tablist" aria-label=${t.groupingLabel}>
132
- ${Ie(i,"activity",r,t.activityGroup)}
133
- ${Ie(i,"group",r,t.groupViewTab)}
134
- </div>
135
- ${r==="activity"?St(e,o):Tt(e)}
136
- `},Ie=(e,t,i,o)=>{const r=t===i;return d`<a
137
- class="tab"
138
- role="tab"
139
- data-current=${String(r)}
140
- aria-selected=${r?"true":"false"}
141
- href=${e.hashFor({view:t})}
142
- >${o}</a
143
- >`},St=(e,t)=>{const{m:i,context:o}=e,{state:r}=o,n=we(i,r);return d`
144
- <div class="map-scroll">
145
- <div class="map" style=${`--cols:${t.length+1}`} data-testid="usm-map">
146
- <div class="map-row">
147
- <div class="corner">
148
- <span class="dpk-label">${i.groupAxisHeader}</span>
149
- </div>
150
- ${$(r.activities,a=>a.id,a=>Ae(i,o,a.id,`grid-column: span ${Math.max(a.steps.length,1)}`))}
151
- ${_e(i,o)}
152
- </div>
153
- <div class="map-row">
154
- ${xe(i)}
155
- ${$(t,({activity:a,step:s})=>`${a.id}.${s.id}`,({step:a})=>d`
156
- <div class="col-head" data-current=${String(o.navigation.step===a.id)}>
157
- <h4>
158
- <dpk-component-inline-edit
159
- .value=${a.name}
160
- .label=${i.stepNameLabel}
161
- @dpk-commit=${G(s=>o.dispatch({type:"SET_STEP_NAME",target:{type:"step",id:a.id},payload:{name:s}}))}
162
- @click=${s=>s.stopPropagation()}
163
- ></dpk-component-inline-edit>
164
- </h4>
165
- </div>
166
- `)}
167
- <div class="corner"><span class="dpk-label">—</span></div>
168
- </div>
169
- ${$(n,a=>a.id,a=>Me(e,a,d`${$(t,({activity:s,step:p})=>`${s.id}.${p.id}`,({activity:s,step:p})=>$t(e,{activityId:s.id,stepId:p.id,milestoneId:a.id}))}`))}
170
- ${De(i,o,t.length)}
171
- </div>
172
- </div>
173
- `},Tt=e=>{const{m:t,context:i}=e,{state:o}=i,r=we(t,o);return d`
174
- <div class="map-scroll">
175
- <div class="map" style=${`--cols:${o.activities.length+1}`} data-testid="usm-map-group">
176
- <div class="map-row">
177
- ${xe(t)}
178
- ${$(o.activities,n=>n.id,n=>Ae(t,i,n.id))}
179
- ${_e(t,i)}
180
- </div>
181
- ${$(r,n=>n.id,n=>Me(e,n,d`${$(o.activities,a=>a.id,a=>wt(e,a.id,n.id))}`))}
182
- ${De(t,i,o.activities.length)}
183
- </div>
184
- </div>
185
- `},xe=e=>d`<div class="corner">
186
- <span class="dpk-label">${e.activityAxis}</span>
187
- <span class="dpk-label">${e.milestoneAxis}</span>
188
- </div>`,Ae=(e,t,i,o)=>{const r=t.state.activities.find(n=>n.id===i);return r?d`
189
- <div class="act-head" style=${o??E}>
190
- <dpk-component-inline-edit
191
- .value=${r.name}
192
- .label=${e.activityNameLabel}
193
- @dpk-commit=${G(n=>t.dispatch({type:"SET_ACTIVITY_NAME",target:{type:"activity",id:r.id},payload:{name:n}}))}
194
- ></dpk-component-inline-edit>
195
- <button
196
- class="dpk-icon-btn"
197
- type="button"
198
- aria-label=${e.addStepAria}
199
- @click=${()=>ft(e,t,r.id)}
200
- >
201
- ${Ke()}
202
- </button>
203
- </div>
204
- `:d`<div class="act-head"></div>`},_e=(e,t)=>d`<div class="act-head">
205
- <button class="dpk-btn dpk-btn--ghost" type="button" @click=${()=>Ee(e,t)}>
206
- ${e.newActivityButton}
207
- </button>
208
- </div>`,De=(e,t,i)=>d`<div class="map-row">
209
- <div class="row-head">
210
- <button class="dpk-btn dpk-btn--ghost" type="button" @click=${()=>bt(e,t)}>
211
- ${e.newMilestoneButton}
212
- </button>
213
- </div>
214
- ${Array.from({length:i+1},()=>d`<div class="cell"></div>`)}
215
- </div>`,Me=(e,t,i)=>{const{m:o,context:r,drag:n,handlers:a}=e,s=t.id;if(s===void 0)return d`<div class="map-row" data-draggable="false" data-row-dragging="false" data-row-drop="false">
216
- <div class="row-head" data-milestone="" draggable="false"><span>${t.name}</span></div>
217
- ${i}
218
- <div class="cell"></div>
219
- </div>`;const p=`row:${s}`,m=n.target({key:p,accepts:"milestone",hovered:xt,onDrop:b=>a.dropOnMilestoneRow(s,b)}),T=n.source({type:"milestone",id:s});return d`
220
- <div
221
- class="map-row"
222
- data-draggable="true"
223
- data-row-dragging=${String(n.isDragging("milestone",s))}
224
- data-row-drop=${String(n.isOver(p))}
225
- @dragenter=${m.dragenter}
226
- @dragover=${m.dragover}
227
- @dragleave=${m.dragleave}
228
- @drop=${m.drop}
229
- >
230
- <div
231
- class="row-head"
232
- data-milestone=${s}
233
- draggable="true"
234
- @dragstart=${b=>{It(b),T.dragstart(b)}}
235
- @dragend=${T.dragend}
236
- >
237
- <span class="row-grip" aria-hidden="true">${Je()}</span
238
- ><dpk-component-inline-edit
239
- draggable="false"
240
- .value=${t.name}
241
- .label=${o.milestoneNameLabel}
242
- @dpk-commit=${G(b=>r.dispatch({type:"SET_MILESTONE_NAME",target:{type:"milestone",id:s},payload:{name:b}}))}
243
- ></dpk-component-inline-edit>
244
- </div>
245
- ${i}
246
- <div class="cell"></div>
247
- </div>
248
- `},$t=(e,t)=>{const{m:i,context:o,drag:r,handlers:n}=e,a=B(o.state,t.stepId,t.milestoneId),s=`cell:${t.stepId}:${t.milestoneId??""}`,p=r.target({key:s,accepts:"story",hovered:Oe,onDrop:m=>n.dropOnCell(t,m)});return d`
249
- <div
250
- class="cell"
251
- data-step=${t.stepId}
252
- data-milestone=${t.milestoneId??""}
253
- data-drop=${String(r.isOver(s))}
254
- @dragenter=${p.dragenter}
255
- @dragover=${p.dragover}
256
- @dragleave=${p.dragleave}
257
- @drop=${p.drop}
258
- >
259
- <div class="card-list" data-testid=${`cell-${t.stepId}-${t.milestoneId??"unassigned"}`}>
260
- ${$(a,m=>m.id,m=>Re(e,m))}
261
- </div>
262
- <button
263
- class="dpk-btn dpk-btn--ghost add-cell"
264
- type="button"
265
- title=${i.addStoryCellAria}
266
- @click=${()=>Se(i,o,t.activityId,t.stepId,t.milestoneId)}
267
- >
268
- ${i.addCellButton}
269
- </button>
270
- </div>
271
- `},wt=(e,t,i)=>{const{m:o,context:r,drag:n,handlers:a}=e,{state:s}=r,p=re(s,t,i),m=s.activities.find(w=>w.id===t)?.steps[0],T=`group:${t}:${i??""}`,b=n.target({key:T,accepts:"story",hovered:Oe,onDrop:w=>a.dropOnGroupCell(t,i,w)});return d`
272
- <div
273
- class="cell"
274
- data-activity=${t}
275
- data-milestone=${i??""}
276
- data-drop=${String(n.isOver(T))}
277
- @dragenter=${b.dragenter}
278
- @dragover=${b.dragover}
279
- @dragleave=${b.dragleave}
280
- @drop=${b.drop}
281
- >
282
- <div class="card-list" data-testid=${`group-cell-${t}-${i??"unassigned"}`}>
283
- ${$(p,w=>w.id,w=>Re(e,w))}
284
- </div>
285
- ${m?d`<button
286
- class="dpk-btn dpk-btn--ghost add-cell"
287
- type="button"
288
- aria-label=${o.addStoryCellAria}
289
- @click=${()=>Se(o,r,t,m.id,i)}
290
- >
291
- ${o.addCellButton}
292
- </button>`:E}
293
- </div>
294
- `},Re=(e,t)=>{const{context:i,mode:o,drag:r,handlers:n}=e,a=i.comments.filter(p=>p.target.type==="story"&&p.target.id===t.id),s=r.source({type:"story",id:t.id});return d`<dpk-internal-usm-story-card
295
- data-story=${t.id}
296
- draggable="true"
297
- .story=${t}
298
- .notes=${a}
299
- .mode=${Te(o,t.id)}
300
- .onIntent=${p=>n.cardIntent(t.id,p)}
301
- ?focused=${i.navigation.story===t.id}
302
- ?dragging=${r.isDragging("story",t.id)}
303
- @dragstart=${s.dragstart}
304
- @dragend=${s.dragend}
305
- ></dpk-internal-usm-story-card>`},Oe=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},It=e=>{const i=(e.currentTarget instanceof Element?e.currentTarget:null)?.closest(".map-row");if(!i||!e.dataTransfer)return;const o=i.getBoundingClientRect();e.dataTransfer.setDragImage(i,e.clientX-o.left,e.clientY-o.top)},xt=e=>{const t=e.target instanceof Element?e.target.closest(".map-row"):null,i=t?.querySelector(".row-head[data-milestone]");if(!t||!i)return null;const o=i.getAttribute("data-milestone");return{id:o===""?null:o,element:t}},At=(e,t)=>{if(t===null)return E;const{columns:i,rows:o}=t;return d`
306
- <section class="milestone-defs" data-testid="usm-milestone-definitions">
307
- <h2 class="dpk-label">${e.milestoneDefinitionsTitle}</h2>
308
- <table>
309
- <thead>
310
- <tr>
311
- <th scope="col">${e.milestoneGroup}</th>
312
- ${i.timeframe?d`<th scope="col">${e.timeframeColumn}</th>`:E}
313
- ${i.description?d`<th scope="col">${e.descriptionColumn}</th>`:E}
314
- </tr>
315
- </thead>
316
- <tbody>
317
- ${$(o,r=>r.id,r=>d`
318
- <tr>
319
- <th scope="row">${r.name}</th>
320
- ${i.timeframe?d`<td class="timeframe">${r.timeframe}</td>`:E}
321
- ${i.description?d`<td class="description">${r.description}</td>`:E}
322
- </tr>
323
- `)}
324
- </tbody>
325
- </table>
326
- </section>
327
- `},_t=(e,t,i,o)=>{if(i.kind!=="picking-step")return E;const r=S(t.state,i.storyId),n=A(t.state,i.activityId);if(!r||!n)return E;const a=n.steps[0]?.id;return d`<div class="comment-pop move-dialog" id="move-dialog" popover="manual">
328
- <span class="dpk-label">${e.moveDialogLabel}</span>
329
- <select class="dpk-select" aria-label=${e.moveDialogSelectLabel} data-move-dialog>
330
- ${n.steps.map(s=>d`<option value=${s.id} ?selected=${s.id===a}>${s.name}</option>`)}
331
- </select>
332
- <div class="pop-actions">
333
- <button
334
- class="dpk-btn dpk-btn--accent"
335
- type="button"
336
- @click=${s=>{const m=(Xe(s.currentTarget,HTMLElement)?.closest("#move-dialog")??null)?.querySelector("select")?.value??a;m?o.confirm(m):o.cancel()}}
337
- >
338
- ${e.moveConfirm}
339
- </button>
340
- <button class="dpk-btn" type="button" @click=${o.cancel}>${e.moveCancel}</button>
341
- </div>
342
- </div>`},Dt=Z`
343
- :host {
344
- --dpk-usm-accent: var(--dpk-blue);
345
- }
346
- .map-scroll {
347
- /* A wide table must scroll inside itself and never widen the template shell. */
348
- min-width: 0;
349
- max-width: 100%;
350
- overflow-x: auto;
351
- padding-bottom: 12px;
352
- }
353
- .map {
354
- display: grid;
355
- gap: 0;
356
- min-width: max-content;
357
- border: 1px solid var(--dpk-rule);
358
- border-radius: var(--dpk-radius-lg);
359
- background: var(--dpk-paper-sunken);
360
- box-shadow: var(--dpk-shadow);
361
- overflow: hidden;
362
- }
363
- .map-row {
364
- display: grid;
365
- grid-template-columns: 140px repeat(var(--cols), minmax(180px, 240px));
366
- }
367
- .map-row + .map-row {
368
- border-top: 1px solid var(--dpk-rule);
369
- }
370
- .corner,
371
- .act-head,
372
- .col-head,
373
- .row-head,
374
- .cell {
375
- padding: 10px;
376
- }
377
- .corner {
378
- background: var(--dpk-paper-sunken);
379
- display: grid;
380
- gap: 3px;
381
- align-content: start;
382
- }
383
-
384
- /* Unit toggle above the table (group band vs one column per activity): a
385
- sunken track with the selected segment raised on top of it. */
386
- .view-tabs {
387
- display: inline-flex;
388
- justify-self: start;
389
- gap: 2px;
390
- padding: 3px;
391
- margin-bottom: 14px;
392
- border: 1px solid var(--dpk-rule);
393
- border-radius: 999px;
394
- background: var(--dpk-paper-sunken);
395
- box-shadow: inset 0 1px 3px var(--dpk-shade-1);
396
- }
397
-
398
- .tab {
399
- padding: 5px 14px;
400
- border-radius: 999px;
401
- font-size: 12px;
402
- font-weight: 550;
403
- text-decoration: none;
404
- color: var(--dpk-ink-soft);
405
- white-space: nowrap;
406
- transition:
407
- background 160ms var(--dpk-ease),
408
- color 160ms var(--dpk-ease),
409
- box-shadow 160ms var(--dpk-ease);
410
- }
411
-
412
- .tab:hover {
413
- color: var(--dpk-ink);
414
- background: var(--dpk-paper-inset);
415
- }
416
-
417
- .tab[data-current='true'] {
418
- background: var(--dpk-paper-raised);
419
- color: var(--dpk-ink);
420
- font-weight: 650;
421
- box-shadow: var(--dpk-bevel), var(--dpk-shadow-xs);
422
- }
423
-
424
- /* Activity band: raised above the working canvas and marked with a quiet
425
- accent edge so the grouping reads at a glance. */
426
- .act-head {
427
- position: relative;
428
- border-left: 1px solid var(--dpk-rule);
429
- background: var(--dpk-paper-raised);
430
- box-shadow:
431
- var(--dpk-bevel),
432
- inset 0 -1px 0 var(--dpk-rule-strong);
433
- display: flex;
434
- align-items: center;
435
- justify-content: space-between;
436
- gap: 4px;
437
- font-size: 13px;
438
- font-weight: 650;
439
- letter-spacing: -0.005em;
440
- }
441
- .act-head::before {
442
- content: '';
443
- position: absolute;
444
- top: 0;
445
- left: 0;
446
- right: 0;
447
- height: 2px;
448
- background: color-mix(in srgb, var(--dpk-usm-accent) 55%, transparent);
449
- }
450
- .col-head {
451
- border-left: 1px solid var(--dpk-rule);
452
- background: var(--dpk-paper-sunken);
453
- transition: background 160ms var(--dpk-ease);
454
- }
455
- .col-head[data-current='true'] {
456
- background: color-mix(in srgb, var(--dpk-usm-accent) 7%, var(--dpk-paper-sunken));
457
- box-shadow: inset 0 2px 0 var(--dpk-usm-accent);
458
- }
459
- .col-head h4 {
460
- font-size: 13px;
461
- font-weight: 600;
462
- margin: 0;
463
- }
464
-
465
- .row-head {
466
- display: flex;
467
- align-items: center;
468
- gap: 6px;
469
- }
470
-
471
- /* Milestone row label: a floating release chip in the sunken rail, not a
472
- flat table cell. The "add milestone" row reuses \`.row-head\` for its
473
- ghost button and stays a plain cell. */
474
- .row-head[data-milestone] {
475
- display: inline-flex;
476
- justify-self: start;
477
- align-self: center;
478
- margin: 6px 4px;
479
- padding: 6px 12px;
480
- border: 1px solid var(--dpk-rule);
481
- border-radius: 999px;
482
- background: var(--dpk-paper-raised);
483
- box-shadow: var(--dpk-bevel), var(--dpk-shadow-xs);
484
- color: var(--dpk-ink);
485
- font-size: 11.5px;
486
- font-weight: 650;
487
- letter-spacing: 0.01em;
488
- max-width: 100%;
489
- transition:
490
- background 160ms var(--dpk-ease),
491
- box-shadow 160ms var(--dpk-ease),
492
- border-color 160ms var(--dpk-ease);
493
- }
494
-
495
- .row-head[draggable='true'] {
496
- cursor: grab;
497
- -webkit-user-select: none;
498
- user-select: none;
499
- }
500
-
501
- .row-head[draggable='true'] dpk-component-inline-edit {
502
- -webkit-user-drag: none;
503
- }
504
-
505
- .row-head[draggable='true']:active {
506
- cursor: grabbing;
507
- }
508
-
509
- .row-grip {
510
- flex: 0 0 auto;
511
- display: inline-flex;
512
- color: var(--dpk-ink-faint);
513
- }
514
-
515
- .row-grip svg {
516
- display: block;
517
- width: 15px;
518
- height: 15px;
519
- }
520
-
521
- /* Row-level drag affordance: hover highlights the entire .map-row. */
522
- .map-row[data-draggable='true']:hover > .row-head {
523
- border-color: color-mix(in srgb, var(--dpk-blue) 45%, var(--dpk-rule));
524
- box-shadow: var(--dpk-bevel), var(--dpk-shadow-sm);
525
- }
526
- .map-row[data-draggable='true']:hover > .cell {
527
- background: var(--dpk-dots), color-mix(in srgb, var(--dpk-blue) 3%, var(--dpk-paper-sunken));
528
- }
529
- .map-row[data-draggable='true']:hover .row-grip {
530
- color: var(--dpk-blue);
531
- }
532
- .map-row[data-draggable='true'] {
533
- cursor: grab;
534
- }
535
- .map-row[data-draggable='true']:active {
536
- cursor: grabbing;
537
- }
538
-
539
- /*
540
- * Dragging state: entire row fades. Never disable pointer events on the
541
- * source here: Lit applies this state in the microtask right after
542
- * \`dragstart\`, and Blink then re-hit-tests the pointer and aborts the drag
543
- * when the source is no longer under it.
544
- */
545
- .map-row[data-row-dragging='true'] {
546
- opacity: 0.45;
547
- }
548
-
549
- /* Drop target: entire row highlights. */
550
- .map-row[data-row-drop='true'] {
551
- outline: 2px dashed var(--dpk-blue);
552
- outline-offset: -2px;
553
- }
554
- .map-row[data-row-drop='true'] > .row-head {
555
- border-color: var(--dpk-blue);
556
- background: var(--dpk-blue-soft);
557
- }
558
- .map-row[data-row-drop='true'] > .cell {
559
- background: var(--dpk-dots), color-mix(in srgb, var(--dpk-blue) 6%, var(--dpk-paper-sunken));
560
- }
561
-
562
- /* Cells are the working canvas: sunken, with a quiet dot lattice, so raised
563
- story cards read as things placed on the board. */
564
- .cell {
565
- border-left: 1px solid var(--dpk-rule);
566
- border-top: 1px solid var(--dpk-rule);
567
- display: flex;
568
- flex-direction: column;
569
- gap: 8px;
570
- min-height: 100px;
571
- background: var(--dpk-dots), var(--dpk-paper-sunken);
572
- transition: background 160ms var(--dpk-ease);
573
- }
574
- .cell[data-drop='true'] {
575
- background: var(--dpk-dots), color-mix(in srgb, var(--dpk-blue) 8%, var(--dpk-paper-sunken));
576
- outline: 2px dashed var(--dpk-blue);
577
- outline-offset: -2px;
578
- }
579
- .card-list {
580
- display: grid;
581
- gap: 8px;
582
- align-content: start;
583
- flex: 1 1 auto;
584
- }
585
- .add-cell {
586
- margin-top: auto;
587
- opacity: 0;
588
- transition:
589
- opacity 180ms var(--dpk-ease),
590
- background 160ms var(--dpk-ease),
591
- border-color 160ms var(--dpk-ease),
592
- color 160ms var(--dpk-ease);
593
- border: 1px dashed var(--dpk-rule-strong);
594
- border-radius: var(--dpk-radius-sm);
595
- background: transparent;
596
- color: var(--dpk-ink-faint);
597
- padding: 4px 8px;
598
- font-size: 11.5px;
599
- }
600
- .add-cell:hover {
601
- background: var(--dpk-blue-soft);
602
- border-color: var(--dpk-blue);
603
- color: var(--dpk-blue);
604
- }
605
- .cell:hover .add-cell {
606
- opacity: 1;
607
- }
608
- .empty {
609
- border: 1px dashed var(--dpk-rule-strong);
610
- border-radius: var(--dpk-radius-lg);
611
- padding: 28px 24px;
612
- background: var(--dpk-dots), var(--dpk-paper-sunken);
613
- max-width: 620px;
614
- display: grid;
615
- gap: 10px;
616
- }
617
- .count {
618
- font-family: var(--dpk-mono);
619
- font-variant-numeric: tabular-nums;
620
- font-size: 10px;
621
- color: var(--dpk-ink-faint);
622
- }
623
-
624
- /* Milestone legend under the map: a plain reference table, not a board. */
625
- .milestone-defs {
626
- display: grid;
627
- gap: 8px;
628
- margin-top: 20px;
629
- max-width: 880px;
630
- }
631
- .milestone-defs h2 {
632
- margin: 0;
633
- }
634
- .milestone-defs table {
635
- width: 100%;
636
- border-collapse: separate;
637
- border-spacing: 0;
638
- overflow: hidden;
639
- border: 1px solid var(--dpk-rule);
640
- border-radius: var(--dpk-radius-lg);
641
- background: var(--dpk-paper-raised);
642
- font-size: 13px;
643
- }
644
- .milestone-defs th,
645
- .milestone-defs td {
646
- padding: 8px 12px;
647
- text-align: left;
648
- vertical-align: top;
649
- border-top: 1px solid var(--dpk-rule);
650
- }
651
- .milestone-defs thead th {
652
- border-top: 0;
653
- background: var(--dpk-paper-sunken);
654
- color: var(--dpk-ink-soft);
655
- font-size: 11.5px;
656
- font-weight: 600;
657
- white-space: nowrap;
658
- }
659
- .milestone-defs tbody th {
660
- font-weight: 650;
661
- white-space: nowrap;
662
- }
663
- .milestone-defs .timeframe {
664
- white-space: nowrap;
665
- font-variant-numeric: tabular-nums;
666
- }
667
- .milestone-defs .description {
668
- white-space: pre-line;
669
- }
670
-
671
- /* Step picker shown after a cross-activity drop. */
672
- .move-dialog {
673
- min-width: 220px;
674
- }
675
- `,Mt={width:300,height:240};class Ne extends Q{static{this.styles=[Q.styles,Dt,W]}definitionFor(t){return ye(t)}static{this.properties={mode:{state:!0}}}#t=new We(this);#r=new ee(this);constructor(){super(),this.mode=_}renderRegions(t){return{main:this.#o(t)}}updated(){if(super.updated(),this.mode.kind!=="picking-step")return;const t=this.renderRoot.querySelector("#move-dialog");t&&this.#r.open(t,it(this.mode.point.x,this.mode.point.y),Mt)}#o(t){const i=U(this.locale);return d`
676
- ${Et({m:i,context:t,mode:this.mode,drag:this.#t,handlers:{cardIntent:(o,r)=>this.#n(o,r),dropOnCell:(o,r)=>this.#i(o,r),dropOnGroupCell:(o,r,n)=>this.#e(o,r,n),dropOnMilestoneRow:(o,r)=>this.#a(o,r)}})}
677
- ${At(i,ht(t.state))}
678
- ${_t(i,t,this.mode,{confirm:o=>this.#s(o),cancel:()=>this.mode=_})}
679
- `}#n(t,i){const o=this.context();switch(i.kind){case"select":{const r=S(o.state,t);r&&o.navigate({step:r.stepId,story:r.id});break}case"rename":o.dispatch({type:"SET_STORY_NAME",target:{type:"story",id:t},payload:{name:i.name}});break;case"comment":o.dispatch({type:"comment",target:`story:${t}`,payload:{body:i.body}});break;case"delete":o.dispatch({type:"DELETE_STORY",target:{type:"story",id:t},payload:{}});break}this.mode=$e(this.mode,t,i)}#i(t,i){const o=this.context();o.dispatch(he(o.state,t,i.item.id,i.hoveredId,i.place))}#e(t,i,o){const r=this.context(),n=S(r.state,o.item.id);if(!n)return;if(n.activityId!==t){this.mode={kind:"picking-step",storyId:n.id,activityId:t,milestoneId:i,point:{x:o.event.clientX,y:o.event.clientY}};return}const a=fe(r.state,t,i,n.id,o.hoveredId,o.place);a&&r.dispatch(a)}#a(t,i){const o=this.context(),r=o.state.milestones.map(a=>a.id),n=ke(r,i.item.id,i.hoveredId,i.place);n&&o.dispatch(n)}#s(t){const i=this.mode;if(i.kind!=="picking-step")return;const o=this.context();o.dispatch(be(o.state,i.storyId,i.activityId,t,i.milestoneId)),this.mode=_}}const Le=()=>{gt(),customElements.get("dpk-template-usm")||customElements.define("dpk-template-usm",Ne)},Rt=Object.freeze(Object.defineProperty({__proto__:null,DpkTemplateUsm:Ne,IDLE_MODE:_,allUsmIds:O,applyUsmAction:ne,cardModeOf:Te,defineUsmElement:Le,describeUsmAction:le,dropAfter:yt,emptyUsmBase:ie,findActivity:A,findMilestone:I,findStep:k,findStory:S,flatSteps:oe,modeConcerns:X,parseUsmBase:te,reduceCardIntent:$e,resolveCellDrop:he,resolveGroupDrop:fe,resolveMilestoneDrop:ke,resolvePickedStepMove:be,resolveUsmNavigation:ve,serializeUsmAction:pe,storiesInCell:B,storyCountForStep:pt,usmAction:ot,usmActions:y,usmCommentTargets:ue,usmCurrentTarget:me,usmDefinitionFor:ye,usmHasTarget:ge,usmMessages:U,usmTargetLabel:ce,usmTitle:J},Symbol.toStringTag,{value:"Module"}));export{Le as d,Rt as i};