dev-process-kit 0.0.17 → 0.1.0

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 (39) hide show
  1. package/README.md +1 -1
  2. package/dist/chunks/shared-B5lBiq5s.js +1 -0
  3. package/dist/chunks/shared-BDka-8DG.js +3720 -0
  4. package/dist/chunks/shared-BWk3i0ft.js +2774 -0
  5. package/dist/chunks/{shared-XCFMpX43.js → shared-BZK_cqqQ.js} +12 -12
  6. package/dist/chunks/{shared-3uutHtJD.js → shared-Bhrkz9uX.js} +22 -25
  7. package/dist/chunks/{shared-D7TEJdR2.js → shared-BqL8W-G6.js} +1 -1
  8. package/dist/chunks/shared-BqvHpTHr.js +572 -0
  9. package/dist/chunks/shared-CjW1DhGL.js +1 -0
  10. package/dist/chunks/{shared-B_MRyp8K.js → shared-CqjOqXJ3.js} +32 -50
  11. package/dist/chunks/shared-D1W4I3eq.js +4143 -0
  12. package/dist/chunks/{shared-C_Ru__JO.js → shared-D6pr-dx0.js} +1 -1
  13. package/dist/chunks/{shared-DG16QEdg.js → shared-DRzfRsiJ.js} +173 -203
  14. package/dist/chunks/{shared-Bnqz77V3.js → shared-XXW1oBnj.js} +15 -13
  15. package/dist/chunks/{shared-QJPpnJIO.js → shared-gytWODMC.js} +2 -2
  16. package/dist/chunks/shared-k9bZPE_p.js +49 -0
  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/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 -1
  28. package/package.json +1 -2
  29. package/dist/chunks/shared-B9XMvOh-.js +0 -1027
  30. package/dist/chunks/shared-BnGxP2qu.js +0 -2560
  31. package/dist/chunks/shared-CLSKGVCT.js +0 -572
  32. package/dist/chunks/shared-CjhDJ2vV.js +0 -2766
  33. package/dist/chunks/shared-CtHWU02m.js +0 -1
  34. package/dist/chunks/shared-D4K7KsfJ.js +0 -1
  35. package/dist/chunks/shared-DdefS1nG.js +0 -1
  36. package/dist/chunks/shared-DmOHk6B_.js +0 -3457
  37. package/dist/chunks/shared-OIF3QVAa.js +0 -30
  38. package/dist/chunks/shared-ml5h7U5L.js +0 -1
  39. package/dist/templates/grill.js +0 -1
@@ -1,126 +1,126 @@
1
- import{ad as Ne,ae as b,af as i,ag as f,ah as c,ai as w,aA as h,ap as X,aj as J,ak as V,p as $,v as Re,az as qe,aw as Ie,am as Qe,ao as B,P as Ue,e as He,a0 as Me,V as Ke,R as S,a3 as s,a4 as n,A as Fe,a5 as y,b3 as Z,b4 as je,aI as P,K as Ye,aF as Xe,a2 as Je,T as ee,l as Ve,aM as Ze}from"./shared-CjhDJ2vV.js";const oe=["working","waiting","blocked","done"],D=["todo","doing","blocked","done"],ae=["agent","human"],E=["why","what","goals","nonGoals"],T=J(c(),V(1)),eo=b({id:h,name:T,kind:i(w(ae),"agent")}),oo=b({id:h,title:T,status:i(w(D),"todo"),assignee:i(h),note:i(c()),proposed:i(X(),!1),reason:i(c())}),ao=b({id:h,label:i(c()),href:T,kind:i(c()),description:i(c())}),to=b({why:i(c()),what:i(c()),goals:i(f(c()),[]),nonGoals:i(f(c()),[])}),ro=b({id:h,from:i(h),at:i(c()),title:i(c()),body:i(c()),points:i(f(c()),[])}),no=b({id:h,ref:i(T),title:T,description:i(c()),blocking:i(X(),!1),assumption:i(c())}),te=b({title:i(c(),""),status:i(w(oe)),updatedAt:i(c()),context:i(to,{}),members:i(f(eo),[]),todos:i(f(oo),[]),outputs:i(f(ao),[]),log:i(f(ro),[]),questions:i(f(no),[])}),A=(o,e)=>{const a=new Set;for(const t of e){if(a.has(t))throw new Error(`duplicate ${o} id: ${t}`);a.add(t)}},u=o=>o===void 0||o.trim()===""?null:o,W=o=>o.filter(e=>e.trim()!==""),re=o=>{const e=Ne(te,o);A("member",e.members.map(t=>t.id)),A("todo",e.todos.map(t=>t.id)),A("output",e.outputs.map(t=>t.id)),A("log",e.log.map(t=>t.id)),A("question",e.questions.map(t=>t.id));const a=new Set(e.members.map(t=>t.id));for(const t of e.todos)if(t.assignee!==void 0&&!a.has(t.assignee))throw new Error(`todo ${t.id} is assigned to ${t.assignee}, which is not in members`);for(const t of e.log){if(t.from!==void 0&&!a.has(t.from))throw new Error(`log entry ${t.id} is from ${t.from}, which is not in members`);if(u(t.title)===null&&u(t.body)===null)throw new Error(`log entry ${t.id} needs a title or a body`)}for(const t of e.questions)if(!t.blocking&&u(t.assumption)===null)throw new Error(`question ${t.id} does not block, so it needs the assumption the agent works on`);return{title:e.title,status:e.status??null,updatedAt:u(e.updatedAt),context:{why:u(e.context.why),what:u(e.context.what),goals:W(e.context.goals),nonGoals:W(e.context.nonGoals)},members:e.members,todos:e.todos.map(t=>({id:t.id,title:t.title,status:t.status,assignee:t.assignee??null,note:u(t.note),proposed:t.proposed,reason:u(t.reason),added:!1})),outputs:e.outputs.map(t=>({id:t.id,label:u(t.label),href:t.href,kind:u(t.kind),description:u(t.description)})),log:e.log.map(t=>({id:t.id,from:t.from??null,at:u(t.at),title:u(t.title),body:u(t.body),points:W(t.points)})),questions:e.questions.map((t,r)=>({id:t.id,ref:t.ref??`Q${r+1}`,title:t.title,description:u(t.description),blocking:t.blocking,assumption:u(t.assumption)})),answers:{},decisions:{}}},ne=()=>({title:"",status:null,updatedAt:null,context:{why:null,what:null,goals:[],nonGoals:[]},members:[],todos:[],outputs:[],log:[],questions:[],answers:{},decisions:{}}),O=(o,e)=>e===null?void 0:o.members.find(a=>a.id===e),k=(o,e)=>o.todos.find(a=>a.id===e),de=(o,e)=>o.log.find(a=>a.id===e),se=o=>E.includes(o),N=(o,e)=>{const a=o.context[e];return typeof a=="string"||a!==null&&a.length>0},z=(o,e)=>o.questions.find(a=>a.id===e),ie=(o,e)=>{const a=o.answers[e.id];return a===void 0?!1:a.kind==="approve"||a.text.trim()!==""},R=(o,e)=>!e.proposed||o.decisions[e.id]==="accept",q=(o,e)=>R(o,e)&&O(o,e.assignee)?.kind==="human",le=(o,e,a)=>{const t={...o};return a===null?delete t[e]:t[e]=a,t},I=(o,e,a)=>({...o,answers:le(o.answers,e,a)}),so=(o,e,a)=>({...o,decisions:le(o.decisions,e,a)}),io=(o,e,a)=>({...o,todos:o.todos.map(t=>t.id===e?a(t):t)}),m={ANSWER_QUESTION:$("ANSWER_QUESTION","question",Qe("kind",[b({kind:B("approve")}),b({kind:B("answer"),text:c()}),b({kind:B("clear")})])),DECIDE_PROPOSAL:$("DECIDE_PROPOSAL","todo",b({decision:w(["accept","decline","clear"])})),SET_TODO_STATUS:$("SET_TODO_STATUS","todo",b({status:w(D)})),ADD_TODO:$("ADD_TODO","page",b({id:h,title:J(c(),Ie(),V(1)),assignee:qe(h)}),{dedupeKey:Re}),DELETE_TODO:$("DELETE_TODO","todo",b({}))},pe={type:"page",id:"task-board"},Q=(o,e)=>({type:"ANSWER_QUESTION",target:{type:"question",id:o},payload:e}),ce=(o,e)=>({type:"DECIDE_PROPOSAL",target:{type:"todo",id:o},payload:{decision:e}}),ue=(o,e)=>({type:"SET_TODO_STATUS",target:{type:"todo",id:o},payload:{status:e}}),be=(o,e,a)=>({type:"ADD_TODO",target:pe,payload:{id:o,title:e,assignee:a}}),ge=o=>({type:"DELETE_TODO",target:{type:"todo",id:o},payload:{}}),he=(o,e)=>{const a=Ue(m,e);if(a===null)return null;const t=a.target.id;switch(a.type){case"ANSWER_QUESTION":{const r=z(o,t);if(r===void 0)return null;const d=a.payload;return d.kind==="clear"?I(o,t,null):d.kind==="approve"?r.assumption===null?null:I(o,t,{kind:"approve"}):I(o,t,{kind:"answer",text:d.text})}case"DECIDE_PROPOSAL":{if(k(o,t)?.proposed!==!0)return null;const{decision:r}=a.payload;return so(o,t,r==="clear"?null:r)}case"SET_TODO_STATUS":{const r=k(o,t);if(r===void 0||!q(o,r))return null;const{status:d}=a.payload;return io(o,t,l=>({...l,status:d}))}case"ADD_TODO":{const{payload:r}=a;return k(o,r.id)!==void 0||r.assignee!==null&&O(o,r.assignee)===void 0?null:{...o,todos:[...o.todos,{id:r.id,title:r.title,status:"todo",assignee:r.assignee,note:null,proposed:!1,reason:null,added:!0}]}}case"DELETE_TODO":return k(o,t)?.added!==!0?null:{...o,todos:o.todos.filter(r=>r.id!==t)};default:return He(a)}},U=Me({en:{wholeBoard:"Whole board",statusWorking:"Working",statusWaiting:"Waiting on you",statusBlocked:"Blocked",statusDone:"Done",todoTodo:"To do",todoDoing:"In progress",todoBlocked:"Blocked",todoDone:"Done",kindAgent:"Agent",kindHuman:"Human",updatedAt:o=>`Updated ${o}`,context:"What this task is about",contextWhy:"Why",contextWhat:"What",contextGoals:"Goals",contextNonGoals:"Non-goals",noContext:"The agent has not written down why and what yet.",tabs:"Board sections",tabContext:"Context",tabLog:"Work log",tabQuestions:"Questions",openCount:o=>`${o} open`,noQuestions:"The agent has nothing to ask right now.",questions:"Questions from the agent",questionsProgress:(o,e)=>`${o} of ${e} replied`,blockingGroup:"Blocking \u2014 the agent waits for your decision",provisionalGroup:"Going ahead on an assumption \u2014 the agent adjusts if you answer otherwise",blockingTag:"Blocking",assumption:"Assumption",recommendation:"Agent recommends",approveAssumption:"OK, go with this",approveRecommendation:"OK, go with the recommendation",answerOther:"Answer differently",answerOf:o=>`Your answer to ${o}`,answerPlaceholder:"What you expect instead\u2026",blockingPlaceholder:"Your decision\u2026",approvedTag:"Approved",answeredTag:"Answered",todos:"Todo",progress:(o,e)=>`${o} of ${e} done`,noTodosYet:"No todos yet",assignee:"Assignee",unassigned:"Unassigned",memberOption:(o,e)=>`${o} (${e})`,statusOf:o=>`Status of \u201C${o}\u201D`,filterTodos:"Show todos",filterAll:"All",filterHuman:"People",doneGroup:o=>`Done (${o})`,noHumanTodos:"Nobody but the agent has a todo.",addedTag:"Added by you",changedTag:"Changed",removeAdded:"Remove this todo you added",noTodos:"There are no todos yet.",newTodo:"New todo",newTodoPlaceholder:"Add a todo for the agent\u2026",newTodoAssignee:"Assignee of the new todo",addTodo:"Add",proposedMark:"Proposed by the agent",reason:"Why",accept:"Accept",decline:"Decline",decisionOf:o=>`Decision on \u201C${o}\u201D`,acceptedTag:"Accepted",declinedTag:"Declined",undoDecision:"Undo",outputs:"Outputs",noOutputs:"Nothing has been produced yet.",copy:o=>`Copy ${o}`,copied:"Copied",log:"Conversation with the agent",logLede:"Newest first",noLog:"Nothing has been exchanged yet.",fromAgent:"Agent",latestTag:"Latest",commentOn:o=>`Comment on ${o}`,todoGroup:"Todo",logGroup:"Log",contextGroup:"Context",proposalGroup:"Proposal",questionGroup:"Question",approved:"Approve the assumption",answered:"Answer",answerCleared:"Clear the reply",accepted:"Accept the proposal",declined:"Decline the proposal",decisionCleared:"Clear the decision",statusChanged:"Change the status",todoAdded:"Add a todo",todoRemoved:"Remove the added todo",quoted:o=>`\u2192 \u201C${o}\u201D`,change:(o,e)=>`${o} \u2192 ${e}`},ja:{wholeBoard:"\u30DC\u30FC\u30C9\u5168\u4F53",statusWorking:"\u4F5C\u696D\u4E2D",statusWaiting:"\u3042\u306A\u305F\u306E\u8FD4\u7B54\u5F85\u3061",statusBlocked:"\u30D6\u30ED\u30C3\u30AF\u4E2D",statusDone:"\u5B8C\u4E86",todoTodo:"\u672A\u7740\u624B",todoDoing:"\u9032\u884C\u4E2D",todoBlocked:"\u30D6\u30ED\u30C3\u30AF",todoDone:"\u5B8C\u4E86",kindAgent:"Agent",kindHuman:"\u4EBA\u9593",updatedAt:o=>`\u66F4\u65B0 ${o}`,context:"\u3053\u306E\u30BF\u30B9\u30AF\u306E\u524D\u63D0",contextWhy:"Why \u2014 \u306A\u305C\u3084\u308B\u304B",contextWhat:"What \u2014 \u4F55\u3092\u3084\u308B\u304B",contextGoals:"\u30B4\u30FC\u30EB",contextNonGoals:"\u3084\u3089\u306A\u3044\u3053\u3068",noContext:"Agent \u306F\u307E\u3060 Why / What \u3092\u66F8\u3044\u3066\u3044\u307E\u305B\u3093\u3002",tabs:"\u30DC\u30FC\u30C9\u306E\u533A\u5206",tabContext:"Context",tabLog:"\u4F5C\u696D\u30ED\u30B0",tabQuestions:"\u8CEA\u554F",openCount:o=>`\u672A\u56DE\u7B54 ${o} \u4EF6`,noQuestions:"\u4ECA Agent \u304B\u3089\u805E\u304D\u305F\u3044\u3053\u3068\u306F\u3042\u308A\u307E\u305B\u3093\u3002",questions:"Agent \u304B\u3089\u306E\u8CEA\u554F",questionsProgress:(o,e)=>`\u8FD4\u7B54\u6E08\u307F ${o} / ${e}`,blockingGroup:"\u30D6\u30ED\u30C3\u30AB\u30FC \u2014 \u6C7A\u3081\u3066\u3082\u3089\u3046\u307E\u3067\u5148\u306B\u9032\u3081\u306A\u3044",provisionalGroup:"\u4EEE\u306E\u524D\u63D0\u3067\u9032\u884C\u4E2D \u2014 \u9055\u3048\u3070\u65B9\u91DD\u3092\u76F4\u3059",blockingTag:"\u30D6\u30ED\u30C3\u30AB\u30FC",assumption:"\u4EEE\u56DE\u7B54",recommendation:"Agent \u306E\u63A8\u5968",approveAssumption:"\u3053\u306E\u524D\u63D0\u3067 OK",approveRecommendation:"\u63A8\u5968\u3069\u304A\u308A\u3067 OK",answerOther:"\u5225\u306E\u56DE\u7B54\u3092\u3059\u308B",answerOf:o=>`${o} \u3078\u306E\u56DE\u7B54`,answerPlaceholder:"\u671F\u5F85\u3059\u308B\u56DE\u7B54\u3092\u5165\u529B\u2026",blockingPlaceholder:"\u3069\u3046\u3059\u308B\u304B\u3092\u5165\u529B\u2026",approvedTag:"\u627F\u8A8D\u6E08\u307F",answeredTag:"\u56DE\u7B54\u6E08\u307F",todos:"Todo",progress:(o,e)=>`${e} \u4EF6\u4E2D ${o} \u4EF6\u5B8C\u4E86`,noTodosYet:"Todo \u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093",assignee:"\u62C5\u5F53",unassigned:"\u672A\u5272\u308A\u5F53\u3066",memberOption:(o,e)=>`${o}\uFF08${e}\uFF09`,statusOf:o=>`\u300C${o}\u300D\u306E\u72B6\u614B`,filterTodos:"\u8868\u793A\u3059\u308B Todo",filterAll:"\u3059\u3079\u3066",filterHuman:"\u4EBA\u9593\u306E\u62C5\u5F53",doneGroup:o=>`\u5B8C\u4E86 ${o} \u4EF6`,noHumanTodos:"\u4EBA\u9593\u304C\u62C5\u5F53\u3059\u308B Todo \u306F\u3042\u308A\u307E\u305B\u3093\u3002",addedTag:"\u3042\u306A\u305F\u304C\u8FFD\u52A0",changedTag:"\u5909\u66F4\u3042\u308A",removeAdded:"\u8FFD\u52A0\u3057\u305F Todo \u3092\u53D6\u308A\u6D88\u3059",noTodos:"Todo \u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002",newTodo:"\u65B0\u3057\u3044 Todo",newTodoPlaceholder:"Agent \u306B\u983C\u3080 Todo \u3092\u8FFD\u52A0\u2026",newTodoAssignee:"\u65B0\u3057\u3044 Todo \u306E\u62C5\u5F53",addTodo:"\u8FFD\u52A0",proposedMark:"Agent \u304B\u3089\u306E\u63D0\u6848",reason:"\u306A\u305C",accept:"\u627F\u8A8D",decline:"\u898B\u9001\u308A",decisionOf:o=>`\u300C${o}\u300D\u306E\u5224\u65AD`,acceptedTag:"\u627F\u8A8D\u6E08\u307F",declinedTag:"\u898B\u9001\u308A",undoDecision:"\u53D6\u308A\u6D88\u3059",outputs:"\u6210\u679C\u7269",noOutputs:"\u307E\u3060\u6210\u679C\u7269\u306F\u3042\u308A\u307E\u305B\u3093\u3002",copy:o=>`${o} \u3092\u30B3\u30D4\u30FC`,copied:"\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F",log:"Agent \u3068\u306E\u3084\u308A\u3068\u308A",logLede:"\u65B0\u3057\u3044\u9806",noLog:"\u307E\u3060\u3084\u308A\u3068\u308A\u306F\u3042\u308A\u307E\u305B\u3093\u3002",fromAgent:"Agent",latestTag:"\u6700\u65B0",commentOn:o=>`${o} \u306B\u30B3\u30E1\u30F3\u30C8`,todoGroup:"Todo",logGroup:"\u4F5C\u696D\u30ED\u30B0",contextGroup:"Context",proposalGroup:"\u63D0\u6848",questionGroup:"\u8CEA\u554F",approved:"\u524D\u63D0\u3092\u627F\u8A8D",answered:"\u56DE\u7B54",answerCleared:"\u8FD4\u7B54\u3092\u30AF\u30EA\u30A2",accepted:"\u63D0\u6848\u3092\u627F\u8A8D",declined:"\u63D0\u6848\u3092\u898B\u9001\u308A",decisionCleared:"\u63D0\u6848\u306E\u5224\u65AD\u3092\u30AF\u30EA\u30A2",statusChanged:"\u72B6\u614B\u3092\u5909\u66F4",todoAdded:"Todo \u3092\u8FFD\u52A0",todoRemoved:"\u8FFD\u52A0\u3057\u305F Todo \u3092\u53D6\u308A\u6D88\u3057",quoted:o=>`\u2192 \u300C${o}\u300D`,change:(o,e)=>`${o} \u2192 ${e}`}}),ke=(o,e)=>{switch(e){case"working":return o.statusWorking;case"waiting":return o.statusWaiting;case"blocked":return o.statusBlocked;case"done":return o.statusDone}},C=(o,e)=>{switch(e){case"todo":return o.todoTodo;case"doing":return o.todoDoing;case"blocked":return o.todoBlocked;case"done":return o.todoDone}},lo=(o,e)=>e==="agent"?o.kindAgent:o.kindHuman,L=(o,e)=>{switch(e){case"why":return o.contextWhy;case"what":return o.contextWhat;case"goals":return o.contextGoals;case"nonGoals":return o.contextNonGoals}},xe=48,H=o=>{const e=o.title??o.body??o.id;return e.length<=xe?e:`${e.slice(0,xe-1)}\u2026`},po=(o,e,a)=>a===null?o.unassigned:O(e,a)?.name??a,fe=o=>o.title===""?"Task Context Board":o.title,me=(o,e,a)=>{switch(a.type){case"todo":{const t=k(e,a.id);return`${t?.proposed===!0?o.proposalGroup:o.todoGroup} \xB7 ${t?.title??a.id}`}case"log":{const t=de(e,a.id);return`${o.logGroup} \xB7 ${t===void 0?a.id:H(t)}`}case"context":return`${o.contextGroup} \xB7 ${se(a.id)?L(o,a.id):a.id}`;case"question":{const t=z(e,a.id);return t===void 0?a.id:`${t.ref} \xB7 ${t.title}`}case"page":return o.wholeBoard;default:return a.id}},co=(o,e)=>{switch(e){case"accept":return{title:o.accepted,tone:"update"};case"decline":return{title:o.declined,tone:"update"};case"clear":return{title:o.decisionCleared,tone:"delete"}}},uo=(o,e,a)=>{switch(a.type){case"ANSWER_QUESTION":{const t=S(m.ANSWER_QUESTION,a);if(t.kind==="clear")return{title:o.answerCleared,tone:"delete"};if(t.kind==="approve"){const r=z(e,a.target.id)?.assumption??null;return{title:o.approved,tone:"update",...r===null?{}:{body:o.quoted(r)}}}return{title:o.answered,tone:"update",body:o.quoted(t.text.slice(0,120))}}case"DECIDE_PROPOSAL":return co(o,S(m.DECIDE_PROPOSAL,a).decision);case"SET_TODO_STATUS":{const{status:t}=S(m.SET_TODO_STATUS,a),r=k(e,a.target.id)?.status,d=C(o,t);return{title:o.statusChanged,tone:"update",body:r===void 0?d:o.change(C(o,r),d)}}case"ADD_TODO":{const t=S(m.ADD_TODO,a);return{title:o.todoAdded,tone:"create",targetLabel:`${o.todoGroup} \xB7 ${t.title}`,...t.assignee===null?{}:{body:`${o.assignee}: ${po(o,e,t.assignee)}`}}}case"DELETE_TODO":return{title:o.todoRemoved,tone:"delete"};default:return{title:a.type,tone:"meta"}}},ve=(o,e,a,t)=>{let r;try{r=uo(o,t??a,e)}catch{r={title:e.type,tone:"meta"}}return{title:r.title,targetLabel:r.targetLabel??me(o,a,e.target),tone:r.tone,...r.body===void 0?{}:{summary:r.body}}},we=o=>`${o.type} ${Ke(o.target)} ${JSON.stringify(o.payload)}`,$e=(o,e)=>[...e.questions.map(a=>({value:`question:${a.id}`,label:`${a.ref} \xB7 ${a.title}`,group:o.questionGroup})),...e.todos.map(a=>({value:`todo:${a.id}`,label:a.title,group:a.proposed?o.proposalGroup:o.todoGroup})),...e.log.map(a=>({value:`log:${a.id}`,label:H(a),group:o.logGroup})),...E.filter(a=>N(e,a)).map(a=>({value:`context:${a}`,label:L(o,a),group:o.contextGroup}))],ye=(o,e)=>e,Te=(o,e,a)=>({parts:E.filter(t=>N(e,t)).map(t=>{const r=e.context[t];return{id:t,title:L(o,t),text:typeof r=="string"?r:null,items:typeof r=="string"||r===null?[]:r,comments:a(`context:${t}`)}})}),bo=(o,e,a)=>{const t=o.answers[e.id];return{id:e.id,ref:e.ref,title:e.title,description:e.description,blocking:e.blocking,assumption:e.assumption,reply:t?.kind??"none",resolved:ie(o,e),draft:t?.kind==="answer"?t.text:"",comments:a(`question:${e.id}`)}},Ae=(o,e)=>{const a=o.questions.map(r=>bo(o,r,e)),t=a.filter(r=>r.resolved).length;return{blocking:a.filter(r=>r.blocking),provisional:a.filter(r=>!r.blocking),resolved:t,total:a.length,open:a.length-t,blockingOpen:a.filter(r=>r.blocking&&!r.resolved).length}},go=(o,e,a,t,r)=>{const d=k(a,t.id),l=O(e,t.assignee);return{id:t.id,title:t.title,note:t.note,reason:t.reason,status:t.status,statusLabel:C(o,t.status),assignee:t.assignee,assigneeName:l?.name??null,assigneeKind:l?.kind??null,editable:q(e,t),proposal:t.proposed?e.decisions[t.id]??"pending":null,added:t.added,changed:d!==void 0&&d.status!==t.status,comments:r(`todo:${t.id}`)}},Oe=(o,e,a,t,r="all")=>{const d=e.todos.filter(p=>R(e,p)),l=d.filter(p=>p.status==="done").length,g=e.members.some(p=>p.kind==="human"),x=g?r:"all",F=p=>p.assigneeKind==="human",G=e.todos.map(p=>go(o,e,a,p,t)),j=x==="human"?G.filter(F):G,Y=p=>p.status==="done"&&k(a,p.id)?.status==="done";return{todos:j.filter(p=>!Y(p)),done:j.filter(Y),filter:x,canFilter:g,humanCount:G.filter(F).length,progress:{done:l,total:d.length,label:d.length===0?o.noTodosYet:o.progress(l,d.length)},statuses:D.map(p=>({value:p,label:C(o,p)})),members:e.members.map(p=>({id:p.id,label:o.memberOption(p.name,lo(o,p.kind))}))}},Se=o=>{if(!/^[a-z][a-z\d+.-]*:\/\//i.test(o))return{kind:"path"};try{return{kind:"url",host:new URL(o).host}}catch{return{kind:"path"}}},De=o=>o.outputs.map(e=>({id:e.id,title:e.label??e.href,labelled:e.label!==null,href:e.href,kind:e.kind,description:e.description,place:Se(e.href)})),Ee=(o,e,a)=>({entries:e.log.map((t,r)=>{const d=O(e,t.from);return{id:t.id,author:d===void 0?null:{name:d.name,kind:d.kind},at:t.at,title:t.title,body:t.body,points:t.points,label:H(t),latest:r===e.log.length-1,comments:a(`log:${t.id}`)}}).reverse(),status:e.status===null&&e.updatedAt===null?null:{status:e.status,label:e.status===null?null:ke(o,e.status),updatedAt:e.updatedAt}}),ze=(o,e)=>{switch(e.type){case"todo":return k(o,e.id)!==void 0;case"log":return de(o,e.id)!==void 0;case"context":return se(e.id)&&N(o,e.id);case"question":return z(o,e.id)!==void 0;case"page":return!0;default:return!1}},Ce=o=>{const e=U(o);return{name:"task-board",label:"Task Context Board",parseBase:re,emptyBase:ne,actions:m,apply:he,hasTarget:ze,describe:(a,t,r)=>ve(e,a,t,r),serialize:we,resolveNavigation:ye,commentTargets:a=>$e(e,a),title:fe}},_=(o,e,a,t)=>n`
1
+ import{ae as Ro,af as b,ag as i,ah as f,ai as c,aj as $,aB as h,aq as J,ak as X,al as V,p as w,v as qo,an as Io,ay as Qo,aw as Uo,ap as B,P as Ho,e as Mo,a0 as Ko,V as jo,R as S,a3 as s,a4 as n,A as Fo,a5 as y,b5 as Z,b6 as Yo,aJ as P,K as Jo,aG as Xo,a2 as Vo,T as oo,l as Zo,b7 as oe}from"./shared-BDka-8DG.js";const eo=["working","waiting","blocked","done"],D=["todo","doing","blocked","done"],ao=["agent","human"],E=["why","what","goals","nonGoals"],T=X(c(),V(1)),ee=b({id:h,name:T,kind:i($(ao),"agent")}),ae=b({id:h,title:T,status:i($(D),"todo"),assignee:i(h),note:i(c()),proposed:i(J(),!1),reason:i(c())}),te=b({id:h,label:i(c()),href:T,kind:i(c()),description:i(c())}),re=b({why:i(c()),what:i(c()),goals:i(f(c()),[]),nonGoals:i(f(c()),[])}),ne=b({id:h,from:i(h),at:i(c()),title:i(c()),body:i(c()),points:i(f(c()),[])}),de=b({id:h,ref:i(T),title:T,description:i(c()),blocking:i(J(),!1),assumption:i(c())}),to=b({title:i(c(),""),status:i($(eo)),updatedAt:i(c()),context:i(re,{}),members:i(f(ee),[]),todos:i(f(ae),[]),outputs:i(f(te),[]),log:i(f(ne),[]),questions:i(f(de),[])}),A=(e,o)=>{const a=new Set;for(const t of o){if(a.has(t))throw new Error(`duplicate ${e} id: ${t}`);a.add(t)}},u=e=>e===void 0||e.trim()===""?null:e,W=e=>e.filter(o=>o.trim()!==""),ro=e=>{const o=Ro(to,e);A("member",o.members.map(t=>t.id)),A("todo",o.todos.map(t=>t.id)),A("output",o.outputs.map(t=>t.id)),A("log",o.log.map(t=>t.id)),A("question",o.questions.map(t=>t.id));const a=new Set(o.members.map(t=>t.id));for(const t of o.todos)if(t.assignee!==void 0&&!a.has(t.assignee))throw new Error(`todo ${t.id} is assigned to ${t.assignee}, which is not in members`);for(const t of o.log){if(t.from!==void 0&&!a.has(t.from))throw new Error(`log entry ${t.id} is from ${t.from}, which is not in members`);if(u(t.title)===null&&u(t.body)===null)throw new Error(`log entry ${t.id} needs a title or a body`)}for(const t of o.questions)if(!t.blocking&&u(t.assumption)===null)throw new Error(`question ${t.id} does not block, so it needs the assumption the agent works on`);return{title:o.title,status:o.status??null,updatedAt:u(o.updatedAt),context:{why:u(o.context.why),what:u(o.context.what),goals:W(o.context.goals),nonGoals:W(o.context.nonGoals)},members:o.members,todos:o.todos.map(t=>({id:t.id,title:t.title,status:t.status,assignee:t.assignee??null,note:u(t.note),proposed:t.proposed,reason:u(t.reason),added:!1})),outputs:o.outputs.map(t=>({id:t.id,label:u(t.label),href:t.href,kind:u(t.kind),description:u(t.description)})),log:o.log.map(t=>({id:t.id,from:t.from??null,at:u(t.at),title:u(t.title),body:u(t.body),points:W(t.points)})),questions:o.questions.map((t,r)=>({id:t.id,ref:t.ref??`Q${r+1}`,title:t.title,description:u(t.description),blocking:t.blocking,assumption:u(t.assumption)})),answers:{},decisions:{}}},no=()=>({title:"",status:null,updatedAt:null,context:{why:null,what:null,goals:[],nonGoals:[]},members:[],todos:[],outputs:[],log:[],questions:[],answers:{},decisions:{}}),O=(e,o)=>o===null?void 0:e.members.find(a=>a.id===o),k=(e,o)=>e.todos.find(a=>a.id===o),so=(e,o)=>e.log.find(a=>a.id===o),io=e=>E.includes(e),N=(e,o)=>{const a=e.context[o];return typeof a=="string"||a!==null&&a.length>0},C=(e,o)=>e.questions.find(a=>a.id===o),lo=(e,o)=>{const a=e.answers[o.id];return a===void 0?!1:a.kind==="approve"||a.text.trim()!==""},R=(e,o)=>!o.proposed||e.decisions[o.id]==="accept",q=(e,o)=>R(e,o)&&O(e,o.assignee)?.kind==="human",po=(e,o,a)=>{const t={...e};return a===null?delete t[o]:t[o]=a,t},I=(e,o,a)=>({...e,answers:po(e.answers,o,a)}),se=(e,o,a)=>({...e,decisions:po(e.decisions,o,a)}),ie=(e,o,a)=>({...e,todos:e.todos.map(t=>t.id===o?a(t):t)}),m={ANSWER_QUESTION:w("ANSWER_QUESTION","question",Io("kind",[b({kind:B("approve")}),b({kind:B("answer"),text:c()}),b({kind:B("clear")})])),DECIDE_PROPOSAL:w("DECIDE_PROPOSAL","todo",b({decision:$(["accept","decline","clear"])})),SET_TODO_STATUS:w("SET_TODO_STATUS","todo",b({status:$(D)})),ADD_TODO:w("ADD_TODO","page",b({id:h,title:X(c(),Uo(),V(1)),assignee:Qo(h)}),{dedupeKey:qo}),DELETE_TODO:w("DELETE_TODO","todo",b({}))},co={type:"page",id:"task-board"},Q=(e,o)=>({type:"ANSWER_QUESTION",target:{type:"question",id:e},payload:o}),uo=(e,o)=>({type:"DECIDE_PROPOSAL",target:{type:"todo",id:e},payload:{decision:o}}),bo=(e,o)=>({type:"SET_TODO_STATUS",target:{type:"todo",id:e},payload:{status:o}}),go=(e,o,a)=>({type:"ADD_TODO",target:co,payload:{id:e,title:o,assignee:a}}),ho=e=>({type:"DELETE_TODO",target:{type:"todo",id:e},payload:{}}),ko=(e,o)=>{const a=Ho(m,o);if(a===null)return null;const t=a.target.id;switch(a.type){case"ANSWER_QUESTION":{const r=C(e,t);if(r===void 0)return null;const d=a.payload;return d.kind==="clear"?I(e,t,null):d.kind==="approve"?r.assumption===null?null:I(e,t,{kind:"approve"}):I(e,t,{kind:"answer",text:d.text})}case"DECIDE_PROPOSAL":{if(k(e,t)?.proposed!==!0)return null;const{decision:r}=a.payload;return se(e,t,r==="clear"?null:r)}case"SET_TODO_STATUS":{const r=k(e,t);if(r===void 0||!q(e,r))return null;const{status:d}=a.payload;return ie(e,t,l=>({...l,status:d}))}case"ADD_TODO":{const{payload:r}=a;return k(e,r.id)!==void 0||r.assignee!==null&&O(e,r.assignee)===void 0?null:{...e,todos:[...e.todos,{id:r.id,title:r.title,status:"todo",assignee:r.assignee,note:null,proposed:!1,reason:null,added:!0}]}}case"DELETE_TODO":return k(e,t)?.added!==!0?null:{...e,todos:e.todos.filter(r=>r.id!==t)};default:return Mo(a)}},U=Ko({en:{wholeBoard:"Whole board",statusWorking:"Working",statusWaiting:"Waiting on you",statusBlocked:"Blocked",statusDone:"Done",todoTodo:"To do",todoDoing:"In progress",todoBlocked:"Blocked",todoDone:"Done",kindAgent:"Agent",kindHuman:"Human",updatedAt:e=>`Updated ${e}`,context:"What this task is about",contextWhy:"Why",contextWhat:"What",contextGoals:"Goals",contextNonGoals:"Non-goals",noContext:"The agent has not written down why and what yet.",tabs:"Board sections",tabContext:"Context",tabLog:"Work log",tabQuestions:"Questions",openCount:e=>`${e} open`,noQuestions:"The agent has nothing to ask right now.",questions:"Questions from the agent",questionsProgress:(e,o)=>`${e} of ${o} replied`,blockingGroup:"Blocking \u2014 the agent waits for your decision",provisionalGroup:"Going ahead on an assumption \u2014 the agent adjusts if you answer otherwise",blockingTag:"Blocking",assumption:"Assumption",recommendation:"Agent recommends",approveAssumption:"OK, go with this",approveRecommendation:"OK, go with the recommendation",answerOther:"Answer differently",answerOf:e=>`Your answer to ${e}`,answerPlaceholder:"What you expect instead\u2026",blockingPlaceholder:"Your decision\u2026",approvedTag:"Approved",answeredTag:"Answered",todos:"Todo",progress:(e,o)=>`${e} of ${o} done`,noTodosYet:"No todos yet",assignee:"Assignee",unassigned:"Unassigned",memberOption:(e,o)=>`${e} (${o})`,statusOf:e=>`Status of \u201C${e}\u201D`,filterTodos:"Show todos",filterAll:"All",filterHuman:"People",doneGroup:e=>`Done (${e})`,noHumanTodos:"Nobody but the agent has a todo.",addedTag:"Added by you",changedTag:"Changed",removeAdded:"Remove this todo you added",noTodos:"There are no todos yet.",newTodo:"New todo",newTodoPlaceholder:"Add a todo for the agent\u2026",newTodoAssignee:"Assignee of the new todo",addTodo:"Add",proposedMark:"Proposed by the agent",reason:"Why",accept:"Accept",decline:"Decline",decisionOf:e=>`Decision on \u201C${e}\u201D`,acceptedTag:"Accepted",declinedTag:"Declined",undoDecision:"Undo",outputs:"Outputs",noOutputs:"Nothing has been produced yet.",copy:e=>`Copy ${e}`,copied:"Copied",log:"Conversation with the agent",logLede:"Newest first",noLog:"Nothing has been exchanged yet.",fromAgent:"Agent",latestTag:"Latest",commentOn:e=>`Comment on ${e}`,todoGroup:"Todo",logGroup:"Log",contextGroup:"Context",proposalGroup:"Proposal",questionGroup:"Question",approved:"Approve the assumption",answered:"Answer",answerCleared:"Clear the reply",accepted:"Accept the proposal",declined:"Decline the proposal",decisionCleared:"Clear the decision",statusChanged:"Change the status",todoAdded:"Add a todo",todoRemoved:"Remove the added todo",quoted:e=>`\u2192 \u201C${e}\u201D`,change:(e,o)=>`${e} \u2192 ${o}`},ja:{wholeBoard:"\u30DC\u30FC\u30C9\u5168\u4F53",statusWorking:"\u4F5C\u696D\u4E2D",statusWaiting:"\u3042\u306A\u305F\u306E\u8FD4\u7B54\u5F85\u3061",statusBlocked:"\u30D6\u30ED\u30C3\u30AF\u4E2D",statusDone:"\u5B8C\u4E86",todoTodo:"\u672A\u7740\u624B",todoDoing:"\u9032\u884C\u4E2D",todoBlocked:"\u30D6\u30ED\u30C3\u30AF",todoDone:"\u5B8C\u4E86",kindAgent:"Agent",kindHuman:"\u4EBA\u9593",updatedAt:e=>`\u66F4\u65B0 ${e}`,context:"\u3053\u306E\u30BF\u30B9\u30AF\u306E\u524D\u63D0",contextWhy:"Why \u2014 \u306A\u305C\u3084\u308B\u304B",contextWhat:"What \u2014 \u4F55\u3092\u3084\u308B\u304B",contextGoals:"\u30B4\u30FC\u30EB",contextNonGoals:"\u3084\u3089\u306A\u3044\u3053\u3068",noContext:"Agent \u306F\u307E\u3060 Why / What \u3092\u66F8\u3044\u3066\u3044\u307E\u305B\u3093\u3002",tabs:"\u30DC\u30FC\u30C9\u306E\u533A\u5206",tabContext:"Context",tabLog:"\u4F5C\u696D\u30ED\u30B0",tabQuestions:"\u8CEA\u554F",openCount:e=>`\u672A\u56DE\u7B54 ${e} \u4EF6`,noQuestions:"\u4ECA Agent \u304B\u3089\u805E\u304D\u305F\u3044\u3053\u3068\u306F\u3042\u308A\u307E\u305B\u3093\u3002",questions:"Agent \u304B\u3089\u306E\u8CEA\u554F",questionsProgress:(e,o)=>`\u8FD4\u7B54\u6E08\u307F ${e} / ${o}`,blockingGroup:"\u30D6\u30ED\u30C3\u30AB\u30FC \u2014 \u6C7A\u3081\u3066\u3082\u3089\u3046\u307E\u3067\u5148\u306B\u9032\u3081\u306A\u3044",provisionalGroup:"\u4EEE\u306E\u524D\u63D0\u3067\u9032\u884C\u4E2D \u2014 \u9055\u3048\u3070\u65B9\u91DD\u3092\u76F4\u3059",blockingTag:"\u30D6\u30ED\u30C3\u30AB\u30FC",assumption:"\u4EEE\u56DE\u7B54",recommendation:"Agent \u306E\u63A8\u5968",approveAssumption:"\u3053\u306E\u524D\u63D0\u3067 OK",approveRecommendation:"\u63A8\u5968\u3069\u304A\u308A\u3067 OK",answerOther:"\u5225\u306E\u56DE\u7B54\u3092\u3059\u308B",answerOf:e=>`${e} \u3078\u306E\u56DE\u7B54`,answerPlaceholder:"\u671F\u5F85\u3059\u308B\u56DE\u7B54\u3092\u5165\u529B\u2026",blockingPlaceholder:"\u3069\u3046\u3059\u308B\u304B\u3092\u5165\u529B\u2026",approvedTag:"\u627F\u8A8D\u6E08\u307F",answeredTag:"\u56DE\u7B54\u6E08\u307F",todos:"Todo",progress:(e,o)=>`${o} \u4EF6\u4E2D ${e} \u4EF6\u5B8C\u4E86`,noTodosYet:"Todo \u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093",assignee:"\u62C5\u5F53",unassigned:"\u672A\u5272\u308A\u5F53\u3066",memberOption:(e,o)=>`${e}\uFF08${o}\uFF09`,statusOf:e=>`\u300C${e}\u300D\u306E\u72B6\u614B`,filterTodos:"\u8868\u793A\u3059\u308B Todo",filterAll:"\u3059\u3079\u3066",filterHuman:"\u4EBA\u9593\u306E\u62C5\u5F53",doneGroup:e=>`\u5B8C\u4E86 ${e} \u4EF6`,noHumanTodos:"\u4EBA\u9593\u304C\u62C5\u5F53\u3059\u308B Todo \u306F\u3042\u308A\u307E\u305B\u3093\u3002",addedTag:"\u3042\u306A\u305F\u304C\u8FFD\u52A0",changedTag:"\u5909\u66F4\u3042\u308A",removeAdded:"\u8FFD\u52A0\u3057\u305F Todo \u3092\u53D6\u308A\u6D88\u3059",noTodos:"Todo \u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002",newTodo:"\u65B0\u3057\u3044 Todo",newTodoPlaceholder:"Agent \u306B\u983C\u3080 Todo \u3092\u8FFD\u52A0\u2026",newTodoAssignee:"\u65B0\u3057\u3044 Todo \u306E\u62C5\u5F53",addTodo:"\u8FFD\u52A0",proposedMark:"Agent \u304B\u3089\u306E\u63D0\u6848",reason:"\u306A\u305C",accept:"\u627F\u8A8D",decline:"\u898B\u9001\u308A",decisionOf:e=>`\u300C${e}\u300D\u306E\u5224\u65AD`,acceptedTag:"\u627F\u8A8D\u6E08\u307F",declinedTag:"\u898B\u9001\u308A",undoDecision:"\u53D6\u308A\u6D88\u3059",outputs:"\u6210\u679C\u7269",noOutputs:"\u307E\u3060\u6210\u679C\u7269\u306F\u3042\u308A\u307E\u305B\u3093\u3002",copy:e=>`${e} \u3092\u30B3\u30D4\u30FC`,copied:"\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F",log:"Agent \u3068\u306E\u3084\u308A\u3068\u308A",logLede:"\u65B0\u3057\u3044\u9806",noLog:"\u307E\u3060\u3084\u308A\u3068\u308A\u306F\u3042\u308A\u307E\u305B\u3093\u3002",fromAgent:"Agent",latestTag:"\u6700\u65B0",commentOn:e=>`${e} \u306B\u30B3\u30E1\u30F3\u30C8`,todoGroup:"Todo",logGroup:"\u4F5C\u696D\u30ED\u30B0",contextGroup:"Context",proposalGroup:"\u63D0\u6848",questionGroup:"\u8CEA\u554F",approved:"\u524D\u63D0\u3092\u627F\u8A8D",answered:"\u56DE\u7B54",answerCleared:"\u8FD4\u7B54\u3092\u30AF\u30EA\u30A2",accepted:"\u63D0\u6848\u3092\u627F\u8A8D",declined:"\u63D0\u6848\u3092\u898B\u9001\u308A",decisionCleared:"\u63D0\u6848\u306E\u5224\u65AD\u3092\u30AF\u30EA\u30A2",statusChanged:"\u72B6\u614B\u3092\u5909\u66F4",todoAdded:"Todo \u3092\u8FFD\u52A0",todoRemoved:"\u8FFD\u52A0\u3057\u305F Todo \u3092\u53D6\u308A\u6D88\u3057",quoted:e=>`\u2192 \u300C${e}\u300D`,change:(e,o)=>`${e} \u2192 ${o}`}}),xo=(e,o)=>{switch(o){case"working":return e.statusWorking;case"waiting":return e.statusWaiting;case"blocked":return e.statusBlocked;case"done":return e.statusDone}},z=(e,o)=>{switch(o){case"todo":return e.todoTodo;case"doing":return e.todoDoing;case"blocked":return e.todoBlocked;case"done":return e.todoDone}},le=(e,o)=>o==="agent"?e.kindAgent:e.kindHuman,G=(e,o)=>{switch(o){case"why":return e.contextWhy;case"what":return e.contextWhat;case"goals":return e.contextGoals;case"nonGoals":return e.contextNonGoals}},fo=48,H=e=>{const o=e.title??e.body??e.id;return o.length<=fo?o:`${o.slice(0,fo-1)}\u2026`},pe=(e,o,a)=>a===null?e.unassigned:O(o,a)?.name??a,mo=e=>e.title===""?"Task Context Board":e.title,vo=(e,o,a)=>{switch(a.type){case"todo":{const t=k(o,a.id);return`${t?.proposed===!0?e.proposalGroup:e.todoGroup} \xB7 ${t?.title??a.id}`}case"log":{const t=so(o,a.id);return`${e.logGroup} \xB7 ${t===void 0?a.id:H(t)}`}case"context":return`${e.contextGroup} \xB7 ${io(a.id)?G(e,a.id):a.id}`;case"question":{const t=C(o,a.id);return t===void 0?a.id:`${t.ref} \xB7 ${t.title}`}case"page":return e.wholeBoard;default:return a.id}},ce=(e,o)=>{switch(o){case"accept":return{title:e.accepted,tone:"update"};case"decline":return{title:e.declined,tone:"update"};case"clear":return{title:e.decisionCleared,tone:"delete"}}},ue=(e,o,a)=>{switch(a.type){case"ANSWER_QUESTION":{const t=S(m.ANSWER_QUESTION,a);if(t.kind==="clear")return{title:e.answerCleared,tone:"delete"};if(t.kind==="approve"){const r=C(o,a.target.id)?.assumption??null;return{title:e.approved,tone:"update",...r===null?{}:{body:e.quoted(r)}}}return{title:e.answered,tone:"update",body:e.quoted(t.text.slice(0,120))}}case"DECIDE_PROPOSAL":return ce(e,S(m.DECIDE_PROPOSAL,a).decision);case"SET_TODO_STATUS":{const{status:t}=S(m.SET_TODO_STATUS,a),r=k(o,a.target.id)?.status,d=z(e,t);return{title:e.statusChanged,tone:"update",body:r===void 0?d:e.change(z(e,r),d)}}case"ADD_TODO":{const t=S(m.ADD_TODO,a);return{title:e.todoAdded,tone:"create",targetLabel:`${e.todoGroup} \xB7 ${t.title}`,...t.assignee===null?{}:{body:`${e.assignee}: ${pe(e,o,t.assignee)}`}}}case"DELETE_TODO":return{title:e.todoRemoved,tone:"delete"};default:return{title:a.type,tone:"meta"}}},$o=(e,o,a,t)=>{let r;try{r=ue(e,t??a,o)}catch{r={title:o.type,tone:"meta"}}return{title:r.title,targetLabel:r.targetLabel??vo(e,a,o.target),tone:r.tone,...r.body===void 0?{}:{summary:r.body}}},wo=e=>`${e.type} ${jo(e.target)} ${JSON.stringify(e.payload)}`,yo=(e,o)=>[...o.questions.map(a=>({value:`question:${a.id}`,label:`${a.ref} \xB7 ${a.title}`,group:e.questionGroup})),...o.todos.map(a=>({value:`todo:${a.id}`,label:a.title,group:a.proposed?e.proposalGroup:e.todoGroup})),...o.log.map(a=>({value:`log:${a.id}`,label:H(a),group:e.logGroup})),...E.filter(a=>N(o,a)).map(a=>({value:`context:${a}`,label:G(e,a),group:e.contextGroup}))],To=(e,o)=>o,Ao=(e,o,a)=>({parts:E.filter(t=>N(o,t)).map(t=>{const r=o.context[t];return{id:t,title:G(e,t),text:typeof r=="string"?r:null,items:typeof r=="string"||r===null?[]:r,comments:a(`context:${t}`)}})}),be=(e,o,a)=>{const t=e.answers[o.id];return{id:o.id,ref:o.ref,title:o.title,description:o.description,blocking:o.blocking,assumption:o.assumption,reply:t?.kind??"none",resolved:lo(e,o),draft:t?.kind==="answer"?t.text:"",comments:a(`question:${o.id}`)}},Oo=(e,o)=>{const a=e.questions.map(r=>be(e,r,o)),t=a.filter(r=>r.resolved).length;return{blocking:a.filter(r=>r.blocking),provisional:a.filter(r=>!r.blocking),resolved:t,total:a.length,open:a.length-t,blockingOpen:a.filter(r=>r.blocking&&!r.resolved).length}},ge=(e,o,a,t,r)=>{const d=k(a,t.id),l=O(o,t.assignee);return{id:t.id,title:t.title,note:t.note,reason:t.reason,status:t.status,statusLabel:z(e,t.status),assignee:t.assignee,assigneeName:l?.name??null,assigneeKind:l?.kind??null,editable:q(o,t),proposal:t.proposed?o.decisions[t.id]??"pending":null,added:t.added,changed:d!==void 0&&d.status!==t.status,comments:r(`todo:${t.id}`)}},So=(e,o,a,t,r="all")=>{const d=o.todos.filter(p=>R(o,p)),l=d.filter(p=>p.status==="done").length,g=o.members.some(p=>p.kind==="human"),x=g?r:"all",j=p=>p.assigneeKind==="human",_=o.todos.map(p=>ge(e,o,a,p,t)),F=x==="human"?_.filter(j):_,Y=p=>p.status==="done"&&k(a,p.id)?.status==="done";return{todos:F.filter(p=>!Y(p)),done:F.filter(Y),filter:x,canFilter:g,humanCount:_.filter(j).length,progress:{done:l,total:d.length,label:d.length===0?e.noTodosYet:e.progress(l,d.length)},statuses:D.map(p=>({value:p,label:z(e,p)})),members:o.members.map(p=>({id:p.id,label:e.memberOption(p.name,le(e,p.kind))}))}},Do=e=>{if(!/^[a-z][a-z\d+.-]*:\/\//i.test(e))return{kind:"path"};try{return{kind:"url",host:new URL(e).host}}catch{return{kind:"path"}}},Eo=e=>e.outputs.map(o=>({id:o.id,title:o.label??o.href,labelled:o.label!==null,href:o.href,kind:o.kind,description:o.description,place:Do(o.href)})),Co=(e,o,a)=>({entries:o.log.map((t,r)=>{const d=O(o,t.from);return{id:t.id,author:d===void 0?null:{name:d.name,kind:d.kind},at:t.at,title:t.title,body:t.body,points:t.points,label:H(t),latest:r===o.log.length-1,comments:a(`log:${t.id}`)}}).reverse(),status:o.status===null&&o.updatedAt===null?null:{status:o.status,label:o.status===null?null:xo(e,o.status),updatedAt:o.updatedAt}}),zo=(e,o)=>{switch(o.type){case"todo":return k(e,o.id)!==void 0;case"log":return so(e,o.id)!==void 0;case"context":return io(o.id)&&N(e,o.id);case"question":return C(e,o.id)!==void 0;case"page":return!0;default:return!1}},Go=e=>{const o=U(e);return{name:"task-board",label:"Task Context Board",parseBase:ro,emptyBase:no,actions:m,apply:ko,hasTarget:zo,describe:(a,t,r)=>$o(o,a,t,r),serialize:wo,resolveNavigation:To,commentTargets:a=>yo(o,a),title:mo}},L=(e,o,a,t)=>n`
2
2
  <button
3
3
  class="dpk-icon-btn board-comment"
4
4
  type="button"
5
- data-comment=${o}
6
- aria-label=${e}
7
- title=${e}
8
- @click=${()=>t.comment(o)}
5
+ data-comment=${e}
6
+ aria-label=${o}
7
+ title=${o}
8
+ @click=${()=>t.comment(e)}
9
9
  >
10
- ${Fe()} ${a>0?n`<span class="dpk-icon-badge">${a}</span>`:s}
10
+ ${Fo()} ${a>0?n`<span class="dpk-icon-badge">${a}</span>`:s}
11
11
  </button>
12
- `,M=(o,e,a,t=null)=>n`
12
+ `,M=(e,o,a,t=null)=>n`
13
13
  <header class="board-section-head">
14
- <h2 id=${o}>${e}</h2>
14
+ <h2 id=${e}>${o}</h2>
15
15
  ${a===null?s:n`<span class="board-section-meta">${a}</span>`}
16
16
  </header>
17
17
  ${t===null?s:n`<p class="board-lede">${t}</p>`}
18
- `,ho=(o,e,a,t)=>n`
19
- <section class="board-context" aria-label=${o.context}>
20
- ${e.parts.length===0&&!a?n`<p class="board-empty">${o.noContext}</p>`:s}
21
- ${e.parts.length===0?s:n`<div class="board-context-parts">
22
- ${y(e.parts,r=>r.id,r=>ko(o,r,t))}
18
+ `,he=(e,o,a,t)=>n`
19
+ <section class="board-context" aria-label=${e.context}>
20
+ ${o.parts.length===0&&!a?n`<p class="board-empty">${e.noContext}</p>`:s}
21
+ ${o.parts.length===0?s:n`<div class="board-context-parts">
22
+ ${y(o.parts,r=>r.id,r=>ke(e,r,t))}
23
23
  </div>`}
24
24
  <div class="board-figures"><slot name="main"></slot></div>
25
25
  </section>
26
- `,ko=(o,e,a)=>n`
26
+ `,ke=(e,o,a)=>n`
27
27
  <article
28
28
  class="board-context-part"
29
- data-context=${e.id}
30
- data-dpk-target=${`context:${e.id}`}
31
- aria-labelledby=${`board-context-${e.id}`}
29
+ data-context=${o.id}
30
+ data-dpk-target=${`context:${o.id}`}
31
+ aria-labelledby=${`board-context-${o.id}`}
32
32
  >
33
33
  <header class="board-context-head">
34
- <h3 class="board-context-title" id=${`board-context-${e.id}`}>${e.title}</h3>
35
- ${_(`context:${e.id}`,o.commentOn(e.title),e.comments,a)}
34
+ <h3 class="board-context-title" id=${`board-context-${o.id}`}>${o.title}</h3>
35
+ ${L(`context:${o.id}`,e.commentOn(o.title),o.comments,a)}
36
36
  </header>
37
- ${e.text===null?s:n`<p class="board-context-text">${e.text}</p>`}
38
- ${e.items.length===0?s:n`<ul class="board-context-items">
39
- ${e.items.map(t=>n`<li>${t}</li>`)}
37
+ ${o.text===null?s:n`<p class="board-context-text">${o.text}</p>`}
38
+ ${o.items.length===0?s:n`<ul class="board-context-items">
39
+ ${o.items.map(t=>n`<li>${t}</li>`)}
40
40
  </ul>`}
41
41
  </article>
42
- `,xo=(o,e,a)=>e.total===0?s:n`
42
+ `,xe=(e,o,a)=>o.total===0?s:n`
43
43
  <section class="board-section" data-section="questions" aria-labelledby="board-questions">
44
- ${M("board-questions",o.questions,o.questionsProgress(e.resolved,e.total))}
45
- ${Le(o,"blocking",o.blockingGroup,e.blocking,a)}
46
- ${Le(o,"provisional",o.provisionalGroup,e.provisional,a)}
44
+ ${M("board-questions",e.questions,e.questionsProgress(o.resolved,o.total))}
45
+ ${Lo(e,"blocking",e.blockingGroup,o.blocking,a)}
46
+ ${Lo(e,"provisional",e.provisionalGroup,o.provisional,a)}
47
47
  </section>
48
- `,Le=(o,e,a,t,r)=>t.length===0?s:n`<div class="board-group" data-group=${e}>
48
+ `,Lo=(e,o,a,t,r)=>t.length===0?s:n`<div class="board-group" data-group=${o}>
49
49
  <h3 class="board-group-title">${a}</h3>
50
50
  <ol class="board-questions">
51
- ${y(t,d=>d.id,d=>fo(o,d,r))}
51
+ ${y(t,d=>d.id,d=>fe(e,d,r))}
52
52
  </ol>
53
- </div>`,fo=(o,e,a)=>{const t=e.assumption!==null;return n`
53
+ </div>`,fe=(e,o,a)=>{const t=o.assumption!==null;return n`
54
54
  <li
55
55
  class="board-card board-question"
56
- data-question=${e.id}
57
- data-dpk-target=${`question:${e.id}`}
58
- data-blocking=${String(e.blocking)}
59
- data-reply=${e.reply}
60
- data-resolved=${String(e.resolved)}
56
+ data-question=${o.id}
57
+ data-dpk-target=${`question:${o.id}`}
58
+ data-blocking=${String(o.blocking)}
59
+ data-reply=${o.reply}
60
+ data-resolved=${String(o.resolved)}
61
61
  >
62
62
  <div class="board-card-head">
63
- <span class="board-ref">${e.ref}</span>
64
- <h4 class="board-card-title">${e.title}</h4>
65
- ${e.resolved?n`<span class="board-tag" data-tone="done">
66
- ${e.reply==="approve"?o.approvedTag:o.answeredTag}
63
+ <span class="board-ref">${o.ref}</span>
64
+ <h4 class="board-card-title">${o.title}</h4>
65
+ ${o.resolved?n`<span class="board-tag" data-tone="done">
66
+ ${o.reply==="approve"?e.approvedTag:e.answeredTag}
67
67
  </span>`:s}
68
- ${_(`question:${e.id}`,o.commentOn(e.ref),e.comments,a)}
68
+ ${L(`question:${o.id}`,e.commentOn(o.ref),o.comments,a)}
69
69
  </div>
70
- ${e.description===null?s:n`<p class="board-card-text">${e.description}</p>`}
71
- ${t?mo(o,e,a):s}
70
+ ${o.description===null?s:n`<p class="board-card-text">${o.description}</p>`}
71
+ ${t?me(e,o,a):s}
72
72
  <textarea
73
73
  class="dpk-textarea board-answer"
74
- data-answer-text=${e.id}
74
+ data-answer-text=${o.id}
75
75
  rows="2"
76
- aria-label=${o.answerOf(e.ref)}
77
- placeholder=${t?o.answerPlaceholder:o.blockingPlaceholder}
78
- .value=${e.draft}
79
- ?hidden=${t&&e.reply!=="answer"}
80
- @input=${r=>{const d=r.currentTarget;d instanceof HTMLTextAreaElement&&a.answer(e.id,!t&&d.value===""?{kind:"clear"}:{kind:"answer",text:d.value})}}
76
+ aria-label=${e.answerOf(o.ref)}
77
+ placeholder=${t?e.answerPlaceholder:e.blockingPlaceholder}
78
+ .value=${o.draft}
79
+ ?hidden=${t&&o.reply!=="answer"}
80
+ @input=${r=>{const d=r.currentTarget;d instanceof HTMLTextAreaElement&&a.answer(o.id,!t&&d.value===""?{kind:"clear"}:{kind:"answer",text:d.value})}}
81
81
  ></textarea>
82
82
  </li>
83
- `},mo=(o,e,a)=>n`
83
+ `},me=(e,o,a)=>n`
84
84
  <div class="board-assumption">
85
- <span class="board-assumption-label">${e.blocking?o.recommendation:o.assumption}</span>
86
- <p class="board-assumption-text">${e.assumption}</p>
85
+ <span class="board-assumption-label">${o.blocking?e.recommendation:e.assumption}</span>
86
+ <p class="board-assumption-text">${o.assumption}</p>
87
87
  </div>
88
- <div class="board-reply" role="group" aria-label=${o.answerOf(e.ref)}>
88
+ <div class="board-reply" role="group" aria-label=${e.answerOf(o.ref)}>
89
89
  <button
90
90
  type="button"
91
91
  class="dpk-btn board-approve"
92
- aria-pressed=${e.reply==="approve"?"true":"false"}
93
- @click=${()=>a.answer(e.id,e.reply==="approve"?{kind:"clear"}:{kind:"approve"})}
92
+ aria-pressed=${o.reply==="approve"?"true":"false"}
93
+ @click=${()=>a.answer(o.id,o.reply==="approve"?{kind:"clear"}:{kind:"approve"})}
94
94
  >
95
- ${Z()} ${e.blocking?o.approveRecommendation:o.approveAssumption}
95
+ ${Z()} ${o.blocking?e.approveRecommendation:e.approveAssumption}
96
96
  </button>
97
97
  <button
98
98
  type="button"
99
99
  class="dpk-btn dpk-btn--ghost board-other"
100
- aria-pressed=${e.reply==="answer"?"true":"false"}
101
- @click=${()=>e.reply==="answer"?a.answer(e.id,{kind:"clear"}):a.answerOther(e.id)}
100
+ aria-pressed=${o.reply==="answer"?"true":"false"}
101
+ @click=${()=>o.reply==="answer"?a.answer(o.id,{kind:"clear"}):a.answerOther(o.id)}
102
102
  >
103
- ${o.answerOther}
103
+ ${e.answerOther}
104
104
  </button>
105
105
  </div>
106
- `,vo=(o,e,a,t)=>n`
106
+ `,ve=(e,o,a,t)=>n`
107
107
  <section class="board-section board-rail-section" data-section="outputs" aria-labelledby="board-outputs">
108
- ${M("board-outputs",o.outputs,e.length===0?null:String(e.length))}
109
- ${e.length===0?n`<p class="board-empty">${o.noOutputs}</p>`:n`<ul class="board-outputs">
110
- ${y(e,r=>r.id,r=>wo(o,r,a===r.id,t))}
108
+ ${M("board-outputs",e.outputs,o.length===0?null:String(o.length))}
109
+ ${o.length===0?n`<p class="board-empty">${e.noOutputs}</p>`:n`<ul class="board-outputs">
110
+ ${y(o,r=>r.id,r=>$e(e,r,a===r.id,t))}
111
111
  </ul>`}
112
112
  </section>
113
- `,wo=(o,e,a,t)=>{const r=e.place,d=a?o.copied:o.copy(e.href);return n`
114
- <li class="board-output" data-output=${e.id} data-place=${r.kind}>
113
+ `,$e=(e,o,a,t)=>{const r=o.place,d=a?e.copied:e.copy(o.href);return n`
114
+ <li class="board-output" data-output=${o.id} data-place=${r.kind}>
115
115
  <div class="board-output-body">
116
116
  <div class="board-output-head">
117
- ${e.kind===null?s:n`<span class="board-kind">${e.kind}</span>`}
118
- ${r.kind==="url"?n`<a class="board-output-link" href=${e.href} target="_blank" rel="noopener noreferrer"
119
- >${e.title}</a
120
- >`:e.labelled?n`<span class="board-output-label">${e.title}</span>`:n`<code class="board-output-path">${e.href}</code>`}
117
+ ${o.kind===null?s:n`<span class="board-kind">${o.kind}</span>`}
118
+ ${r.kind==="url"?n`<a class="board-output-link" href=${o.href} target="_blank" rel="noopener noreferrer"
119
+ >${o.title}</a
120
+ >`:o.labelled?n`<span class="board-output-label">${o.title}</span>`:n`<code class="board-output-path">${o.href}</code>`}
121
121
  </div>
122
- ${r.kind==="url"?n`<span class="board-output-sub">${r.host}</span>`:e.labelled?n`<code class="board-output-path board-output-sub">${e.href}</code>`:s}
123
- ${e.description===null?s:n`<p class="board-output-text">${e.description}</p>`}
122
+ ${r.kind==="url"?n`<span class="board-output-sub">${r.host}</span>`:o.labelled?n`<code class="board-output-path board-output-sub">${o.href}</code>`:s}
123
+ ${o.description===null?s:n`<p class="board-output-text">${o.description}</p>`}
124
124
  </div>
125
125
  <button
126
126
  class="dpk-icon-btn board-copy"
@@ -128,133 +128,133 @@ import{ad as Ne,ae as b,af as i,ag as f,ah as c,ai as w,aA as h,ap as X,aj as J,
128
128
  data-copied=${String(a)}
129
129
  aria-label=${d}
130
130
  title=${d}
131
- @click=${()=>t.copy(e.id,e.href)}
131
+ @click=${()=>t.copy(o.id,o.href)}
132
132
  >
133
- ${a?Z():je()}
133
+ ${a?Z():Yo()}
134
134
  </button>
135
135
  </li>
136
- `},_e=(o,e)=>n`
136
+ `},_o=(e,o)=>n`
137
137
  <div class="board-log-now">
138
- ${e.status===null?s:n`<span class="board-status" data-status=${e.status}>
139
- <span class="board-status-dot" aria-hidden="true"></span>${e.label}
138
+ ${o.status===null?s:n`<span class="board-status" data-status=${o.status}>
139
+ <span class="board-status-dot" aria-hidden="true"></span>${o.label}
140
140
  </span>`}
141
- ${e.updatedAt===null?s:n`<span class="board-updated">${o.updatedAt(e.updatedAt)}</span>`}
141
+ ${o.updatedAt===null?s:n`<span class="board-updated">${e.updatedAt(o.updatedAt)}</span>`}
142
142
  </div>
143
- `,$o=(o,e,a)=>n`
143
+ `,we=(e,o,a)=>n`
144
144
  <section class="board-section" data-section="log" aria-labelledby="board-log">
145
- ${M("board-log",o.log,e.entries.length===0?null:o.logLede)}
146
- ${e.entries.length===0?n`${e.status===null?s:_e(o,e.status)}
147
- <p class="board-empty">${o.noLog}</p>`:n`<ol class="board-log">
148
- ${y(e.entries,t=>t.id,t=>yo(o,t,t.latest?e.status:null,a))}
145
+ ${M("board-log",e.log,o.entries.length===0?null:e.logLede)}
146
+ ${o.entries.length===0?n`${o.status===null?s:_o(e,o.status)}
147
+ <p class="board-empty">${e.noLog}</p>`:n`<ol class="board-log">
148
+ ${y(o.entries,t=>t.id,t=>ye(e,t,t.latest?o.status:null,a))}
149
149
  </ol>`}
150
150
  </section>
151
- `,yo=(o,e,a,t)=>{const r=e.author?.name??o.fromAgent;return n`
151
+ `,ye=(e,o,a,t)=>{const r=o.author?.name??e.fromAgent;return n`
152
152
  <li
153
153
  class="board-log-entry"
154
- data-log=${e.id}
155
- data-dpk-target=${`log:${e.id}`}
156
- data-from=${e.author?.kind??"agent"}
157
- data-latest=${String(e.latest)}
154
+ data-log=${o.id}
155
+ data-dpk-target=${`log:${o.id}`}
156
+ data-from=${o.author?.kind??"agent"}
157
+ data-latest=${String(o.latest)}
158
158
  >
159
159
  <span class="board-log-avatar" aria-hidden="true">${r.slice(0,1)}</span>
160
160
  <div class="board-log-body">
161
- ${a===null?s:_e(o,a)}
161
+ ${a===null?s:_o(e,a)}
162
162
  <div class="board-log-head">
163
163
  <span class="board-log-author">${r}</span>
164
- ${e.at===null?s:n`<time class="board-log-at">${e.at}</time>`}
165
- ${e.latest?n`<span class="board-log-latest">${o.latestTag}</span>`:s}
166
- ${_(`log:${e.id}`,o.commentOn(e.label),e.comments,t)}
164
+ ${o.at===null?s:n`<time class="board-log-at">${o.at}</time>`}
165
+ ${o.latest?n`<span class="board-log-latest">${e.latestTag}</span>`:s}
166
+ ${L(`log:${o.id}`,e.commentOn(o.label),o.comments,t)}
167
167
  </div>
168
- ${e.title===null?s:n`<h3 class="board-log-title">${e.title}</h3>`}
169
- ${e.body===null?s:n`<p class="board-log-text">${e.body}</p>`}
170
- ${e.points.length===0?s:n`<ul class="board-log-points">
171
- ${e.points.map(d=>n`<li>${d}</li>`)}
168
+ ${o.title===null?s:n`<h3 class="board-log-title">${o.title}</h3>`}
169
+ ${o.body===null?s:n`<p class="board-log-text">${o.body}</p>`}
170
+ ${o.points.length===0?s:n`<ul class="board-log-points">
171
+ ${o.points.map(d=>n`<li>${d}</li>`)}
172
172
  </ul>`}
173
173
  </div>
174
174
  </li>
175
- `},v=["context","log","questions"],To=(o,e)=>{const a=v.indexOf(o),t=v.length-1;switch(e){case"ArrowRight":return v[a===t?0:a+1]??null;case"ArrowLeft":return v[a===0?t:a-1]??null;case"Home":return v[0];case"End":return v[t]??null;default:return null}},Ao=(o,e)=>{switch(e){case"context":return o.tabContext;case"log":return o.tabLog;case"questions":return o.tabQuestions}},Oo=(o,e)=>{switch(o){case"context":return null;case"log":return e.log;case"questions":return e.questions}},So=(o,e,a,t,r)=>n`
176
- <div class="board-tabs" role="tablist" aria-label=${o.tabs}>
177
- ${v.map(d=>{const l=Oo(d,a);return n`<button
175
+ `},v=["context","log","questions"],Te=(e,o)=>{const a=v.indexOf(e),t=v.length-1;switch(o){case"ArrowRight":return v[a===t?0:a+1]??null;case"ArrowLeft":return v[a===0?t:a-1]??null;case"Home":return v[0];case"End":return v[t]??null;default:return null}},Ae=(e,o)=>{switch(o){case"context":return e.tabContext;case"log":return e.tabLog;case"questions":return e.tabQuestions}},Oe=(e,o)=>{switch(e){case"context":return null;case"log":return o.log;case"questions":return o.questions}},Se=(e,o,a,t,r)=>n`
176
+ <div class="board-tabs" role="tablist" aria-label=${e.tabs}>
177
+ ${v.map(d=>{const l=Oe(d,a);return n`<button
178
178
  type="button"
179
179
  role="tab"
180
180
  id=${`board-tab-${d}`}
181
181
  data-tab=${d}
182
182
  data-alert=${d==="questions"?String(a.alert):s}
183
183
  aria-controls=${`board-panel-${d}`}
184
- aria-selected=${String(e===d)}
185
- tabindex=${e===d?0:-1}
186
- title=${d==="questions"&&a.questions>0?o.openCount(a.questions):s}
184
+ aria-selected=${String(o===d)}
185
+ tabindex=${o===d?0:-1}
186
+ title=${d==="questions"&&a.questions>0?e.openCount(a.questions):s}
187
187
  @click=${()=>t(d)}
188
188
  @keydown=${r}
189
189
  >
190
- <span class="board-tab-label">${Ao(o,d)}</span
190
+ <span class="board-tab-label">${Ae(e,d)}</span
191
191
  >${l===null||l===0?s:n`<span class="board-tab-count">${l}</span>`}
192
192
  </button>`})}
193
193
  </div>
194
- `,K=(o,e,a)=>n`
194
+ `,K=(e,o,a)=>n`
195
195
  <div
196
196
  class="board-panel"
197
- id=${`board-panel-${o}`}
197
+ id=${`board-panel-${e}`}
198
198
  role="tabpanel"
199
- aria-labelledby=${`board-tab-${o}`}
200
- ?hidden=${e!==o}
199
+ aria-labelledby=${`board-tab-${e}`}
200
+ ?hidden=${o!==e}
201
201
  >
202
202
  ${a}
203
203
  </div>
204
- `,Ge="",Do=(o,e)=>e.statuses.some(a=>a.value===o),Eo=(o,e,a)=>n`
204
+ `,Bo="",De=(e,o)=>o.statuses.some(a=>a.value===e),Ee=(e,o,a)=>n`
205
205
  <section class="board-section board-rail-section" data-section="todos" aria-labelledby="board-todos">
206
206
  <header class="board-section-head">
207
- <h2 id="board-todos">${o.todos}</h2>
208
- <span class="board-section-meta">${e.progress.label}</span>
207
+ <h2 id="board-todos">${e.todos}</h2>
208
+ <span class="board-section-meta">${o.progress.label}</span>
209
209
  </header>
210
- ${e.progress.total===0?s:n`<div
210
+ ${o.progress.total===0?s:n`<div
211
211
  class="board-progress"
212
212
  role="progressbar"
213
- aria-label=${e.progress.label}
213
+ aria-label=${o.progress.label}
214
214
  aria-valuemin="0"
215
- aria-valuemax=${e.progress.total}
216
- aria-valuenow=${e.progress.done}
215
+ aria-valuemax=${o.progress.total}
216
+ aria-valuenow=${o.progress.done}
217
217
  >
218
- <span class="board-progress-fill" style=${`width: ${e.progress.done/e.progress.total*100}%`}></span>
218
+ <span class="board-progress-fill" style=${`width: ${o.progress.done/o.progress.total*100}%`}></span>
219
219
  </div>`}
220
- ${e.canFilter?zo(o,e,a):s}
221
- ${e.todos.length===0&&e.done.length===0?n`<p class="board-empty">${e.filter==="human"?o.noHumanTodos:o.noTodos}</p>`:s}
222
- ${e.done.length===0?s:n`<details class="board-done">
220
+ ${o.canFilter?Ce(e,o,a):s}
221
+ ${o.todos.length===0&&o.done.length===0?n`<p class="board-empty">${o.filter==="human"?e.noHumanTodos:e.noTodos}</p>`:s}
222
+ ${o.done.length===0?s:n`<details class="board-done">
223
223
  <summary class="board-done-summary">
224
- <span class="board-done-chevron" aria-hidden="true"></span>${o.doneGroup(e.done.length)}
224
+ <span class="board-done-chevron" aria-hidden="true"></span>${e.doneGroup(o.done.length)}
225
225
  </summary>
226
- ${Be(o,e,e.done,a)}
226
+ ${Po(e,o,o.done,a)}
227
227
  </details>`}
228
- ${e.todos.length===0?s:Be(o,e,e.todos,a)} ${Po(o,e,a)}
228
+ ${o.todos.length===0?s:Po(e,o,o.todos,a)} ${Pe(e,o,a)}
229
229
  </section>
230
- `,Be=(o,e,a,t)=>n`
230
+ `,Po=(e,o,a,t)=>n`
231
231
  <ul class="board-todos">
232
- ${y(a,r=>r.id,r=>_o(o,e,r,t))}
232
+ ${y(a,r=>r.id,r=>Le(e,o,r,t))}
233
233
  </ul>
234
- `,zo=(o,e,a)=>{const t=(r,d,l)=>n`
234
+ `,Ce=(e,o,a)=>{const t=(r,d,l)=>n`
235
235
  <button
236
236
  type="button"
237
237
  class="board-filter-option"
238
238
  data-filter=${r}
239
- aria-pressed=${e.filter===r?"true":"false"}
239
+ aria-pressed=${o.filter===r?"true":"false"}
240
240
  @click=${()=>a.filterTodos(r)}
241
241
  >
242
242
  ${d}${l===null?s:n`<span class="board-filter-count">${l}</span>`}
243
243
  </button>
244
- `;return n`<div class="board-filter" role="group" aria-label=${o.filterTodos}>
245
- ${t("all",o.filterAll,null)} ${t("human",o.filterHuman,e.humanCount)}
246
- </div>`},Co=(o,e)=>e.proposal==="pending"||e.proposal==="decline"?n`<span
244
+ `;return n`<div class="board-filter" role="group" aria-label=${e.filterTodos}>
245
+ ${t("all",e.filterAll,null)} ${t("human",e.filterHuman,o.humanCount)}
246
+ </div>`},ze=(e,o)=>o.proposal==="pending"||o.proposal==="decline"?n`<span
247
247
  class="board-todo-mark board-todo-mark--proposal"
248
248
  role="img"
249
- aria-label=${o.proposedMark}
250
- title=${o.proposedMark}
249
+ aria-label=${e.proposedMark}
250
+ title=${e.proposedMark}
251
251
  >?</span
252
- >`:n`<span class="board-todo-mark" data-status=${e.status} aria-hidden="true"></span>`,Lo=(o,e)=>n`
253
- ${e.proposal==="accept"?n`<span class="board-tag" data-tone="done">${o.acceptedTag}</span>`:s}
254
- ${e.proposal==="decline"?n`<span class="board-tag" data-tone="muted">${o.declinedTag}</span>`:s}
255
- ${e.added?n`<span class="board-tag" data-tone="new">${o.addedTag}</span>`:s}
256
- ${e.changed?n`<span class="board-tag" data-tone="changed">${o.changedTag}</span>`:s}
257
- `,_o=(o,e,a,t)=>n`
252
+ >`:n`<span class="board-todo-mark" data-status=${o.status} aria-hidden="true"></span>`,Ge=(e,o)=>n`
253
+ ${o.proposal==="accept"?n`<span class="board-tag" data-tone="done">${e.acceptedTag}</span>`:s}
254
+ ${o.proposal==="decline"?n`<span class="board-tag" data-tone="muted">${e.declinedTag}</span>`:s}
255
+ ${o.added?n`<span class="board-tag" data-tone="new">${e.addedTag}</span>`:s}
256
+ ${o.changed?n`<span class="board-tag" data-tone="changed">${e.changedTag}</span>`:s}
257
+ `,Le=(e,o,a,t)=>n`
258
258
  <li
259
259
  class="board-todo"
260
260
  data-todo=${a.id}
@@ -264,14 +264,14 @@ import{ad as Ne,ae as b,af as i,ag as f,ah as c,ai as w,aA as h,ap as X,aj as J,
264
264
  data-added=${String(a.added)}
265
265
  data-changed=${String(a.changed)}
266
266
  >
267
- ${Co(o,a)}
267
+ ${ze(e,a)}
268
268
  <div class="board-todo-body">
269
- <div class="board-todo-title"><span class="board-todo-text">${a.title}</span>${Lo(o,a)}</div>
269
+ <div class="board-todo-title"><span class="board-todo-text">${a.title}</span>${Ge(e,a)}</div>
270
270
  ${a.note===null?s:n`<p class="board-todo-note">${a.note}</p>`}
271
- ${a.reason===null||a.proposal==="accept"?s:n`<p class="board-reason"><span class="board-reason-label">${o.reason}</span>${a.reason}</p>`}
271
+ ${a.reason===null||a.proposal==="accept"?s:n`<p class="board-reason"><span class="board-reason-label">${e.reason}</span>${a.reason}</p>`}
272
272
  <div class="board-todo-controls">
273
- ${a.proposal==="pending"?Go(o,a,t):a.proposal==="decline"?s:Bo(o,e,a,t)}
274
- ${a.assigneeName===null?s:n`<span class="board-assignee" data-kind=${a.assigneeKind??"agent"} title=${o.assignee}
273
+ ${a.proposal==="pending"?_e(e,a,t):a.proposal==="decline"?s:Be(e,o,a,t)}
274
+ ${a.assigneeName===null?s:n`<span class="board-assignee" data-kind=${a.assigneeKind??"agent"} title=${e.assignee}
275
275
  >${a.assigneeName}</span
276
276
  >`}
277
277
  ${a.proposal==="accept"||a.proposal==="decline"?n`<button
@@ -279,69 +279,69 @@ import{ad as Ne,ae as b,af as i,ag as f,ah as c,ai as w,aA as h,ap as X,aj as J,
279
279
  class="dpk-btn dpk-btn--ghost board-undo"
280
280
  @click=${()=>t.decide(a.id,"clear")}
281
281
  >
282
- ${o.undoDecision}
282
+ ${e.undoDecision}
283
283
  </button>`:s}
284
- ${_(`todo:${a.id}`,o.commentOn(a.title),a.comments,t)}
284
+ ${L(`todo:${a.id}`,e.commentOn(a.title),a.comments,t)}
285
285
  ${a.added?n`<button
286
286
  class="dpk-icon-btn board-todo-remove"
287
287
  type="button"
288
- aria-label=${o.removeAdded}
289
- title=${o.removeAdded}
288
+ aria-label=${e.removeAdded}
289
+ title=${e.removeAdded}
290
290
  @click=${()=>t.deleteTodo(a.id)}
291
291
  >
292
- ${Ye()}
292
+ ${Jo()}
293
293
  </button>`:s}
294
294
  </div>
295
295
  </div>
296
296
  </li>
297
- `,Go=(o,e,a)=>n`
298
- <div class="board-decision" role="group" aria-label=${o.decisionOf(e.title)}>
297
+ `,_e=(e,o,a)=>n`
298
+ <div class="board-decision" role="group" aria-label=${e.decisionOf(o.title)}>
299
299
  <button
300
300
  type="button"
301
301
  class="dpk-btn board-decide"
302
302
  data-decision="accept"
303
- @click=${()=>a.decide(e.id,"accept")}
303
+ @click=${()=>a.decide(o.id,"accept")}
304
304
  >
305
- ${o.accept}
305
+ ${e.accept}
306
306
  </button>
307
307
  <button
308
308
  type="button"
309
309
  class="dpk-btn dpk-btn--ghost board-decide"
310
310
  data-decision="decline"
311
- @click=${()=>a.decide(e.id,"decline")}
311
+ @click=${()=>a.decide(o.id,"decline")}
312
312
  >
313
- ${o.decline}
313
+ ${e.decline}
314
314
  </button>
315
315
  </div>
316
- `,Bo=(o,e,a,t)=>a.editable?n`<select
316
+ `,Be=(e,o,a,t)=>a.editable?n`<select
317
317
  class="dpk-select board-todo-status"
318
318
  data-status=${a.status}
319
- aria-label=${o.statusOf(a.title)}
320
- @change=${Xe(r=>{Do(r,e)&&r!==a.status&&t.setStatus(a.id,r)})}
319
+ aria-label=${e.statusOf(a.title)}
320
+ @change=${Xo(r=>{De(r,o)&&r!==a.status&&t.setStatus(a.id,r)})}
321
321
  >
322
- ${e.statuses.map(r=>n`<option value=${r.value} ?selected=${r.value===a.status}>${r.label}</option>`)}
323
- </select>`:n`<span class="board-todo-state" data-status=${a.status}>${a.statusLabel}</span>`,Po=(o,e,a)=>n`
322
+ ${o.statuses.map(r=>n`<option value=${r.value} ?selected=${r.value===a.status}>${r.label}</option>`)}
323
+ </select>`:n`<span class="board-todo-state" data-status=${a.status}>${a.statusLabel}</span>`,Pe=(e,o,a)=>n`
324
324
  <form
325
325
  class="board-add-todo"
326
- @submit=${t=>{t.preventDefault();const r=P(t.currentTarget,HTMLFormElement);if(r===null)return;const d=P(r.elements.namedItem("title"),HTMLInputElement),l=P(r.elements.namedItem("assignee"),HTMLSelectElement),g=d?.value.trim()??"";d===null||g===""||(a.addTodo(g,l===null||l.value===Ge?null:l.value),d.value="")}}
326
+ @submit=${t=>{t.preventDefault();const r=P(t.currentTarget,HTMLFormElement);if(r===null)return;const d=P(r.elements.namedItem("title"),HTMLInputElement),l=P(r.elements.namedItem("assignee"),HTMLSelectElement),g=d?.value.trim()??"";d===null||g===""||(a.addTodo(g,l===null||l.value===Bo?null:l.value),d.value="")}}
327
327
  >
328
328
  <input
329
329
  class="dpk-input board-add-title"
330
330
  name="title"
331
331
  type="text"
332
332
  autocomplete="off"
333
- aria-label=${o.newTodo}
334
- placeholder=${o.newTodoPlaceholder}
333
+ aria-label=${e.newTodo}
334
+ placeholder=${e.newTodoPlaceholder}
335
335
  />
336
336
  <div class="board-add-row">
337
- ${e.members.length===0?s:n`<select class="dpk-select board-add-assignee" name="assignee" aria-label=${o.newTodoAssignee}>
338
- <option value=${Ge}>${o.unassigned}</option>
339
- ${e.members.map(t=>n`<option value=${t.id}>${t.label}</option>`)}
337
+ ${o.members.length===0?s:n`<select class="dpk-select board-add-assignee" name="assignee" aria-label=${e.newTodoAssignee}>
338
+ <option value=${Bo}>${e.unassigned}</option>
339
+ ${o.members.map(t=>n`<option value=${t.id}>${t.label}</option>`)}
340
340
  </select>`}
341
- <button class="dpk-btn board-add-submit" type="submit">${o.addTodo}</button>
341
+ <button class="dpk-btn board-add-submit" type="submit">${e.addTodo}</button>
342
342
  </div>
343
343
  </form>
344
- `,Wo=Je`
344
+ `,We=Vo`
345
345
  /* The shell's sidebar is a right-hand rail (see \`sidebarLayout\`). */
346
346
  .dpk-sidebar {
347
347
  padding: 10px 14px 20px;
@@ -352,24 +352,6 @@ import{ad as Ne,ae as b,af as i,ag as f,ah as c,ai as w,aA as h,ap as X,aj as J,
352
352
  gap: 14px;
353
353
  }
354
354
 
355
- /* The review opens where it always does, on the right, but over the rail:
356
- a third column would squeeze the board, and the shell's order would put
357
- it on the left of the main area. */
358
- .dpk-body {
359
- position: relative;
360
- }
361
-
362
- .dpk-notes {
363
- position: absolute;
364
- top: 0;
365
- right: 0;
366
- bottom: 0;
367
- z-index: 30;
368
- width: 360px;
369
- max-width: 100%;
370
- box-shadow: var(--dpk-shadow-lg);
371
- }
372
-
373
355
  .board {
374
356
  display: grid;
375
357
  gap: 18px;
@@ -419,17 +401,6 @@ import{ad as Ne,ae as b,af as i,ag as f,ah as c,ai as w,aA as h,ap as X,aj as J,
419
401
  border-left: 0;
420
402
  border-top: 1px solid var(--dpk-rule);
421
403
  }
422
-
423
- /* The body scrolls here, so an absolute panel would scroll away with it:
424
- the review takes the screen instead, below the floating button. */
425
- .dpk-notes {
426
- position: fixed;
427
- inset: 0;
428
- z-index: 50;
429
- width: auto;
430
- padding-top: 60px;
431
- border-left: 0;
432
- }
433
404
  }
434
405
 
435
406
  [data-status='working'],
@@ -871,7 +842,6 @@ import{ad as Ne,ae as b,af as i,ag as f,ah as c,ai as w,aA as h,ap as X,aj as J,
871
842
  gap: 10px;
872
843
  padding: 14px 16px;
873
844
  border: 1px solid var(--dpk-rule);
874
- border-left: 3px solid var(--board-group-tone);
875
845
  border-radius: var(--dpk-radius);
876
846
  background: var(--dpk-paper-raised);
877
847
  box-shadow: var(--dpk-shadow-xs);
@@ -881,7 +851,7 @@ import{ad as Ne,ae as b,af as i,ag as f,ah as c,ai as w,aA as h,ap as X,aj as J,
881
851
  }
882
852
 
883
853
  .board-question[data-resolved='true'] {
884
- border-left-color: var(--dpk-green);
854
+ border-color: color-mix(in srgb, var(--dpk-green) 35%, var(--dpk-rule));
885
855
  }
886
856
 
887
857
  .board-card-head {
@@ -1622,18 +1592,18 @@ import{ad as Ne,ae as b,af as i,ag as f,ah as c,ai as w,aA as h,ap as X,aj as J,
1622
1592
  animation: none;
1623
1593
  }
1624
1594
  }
1625
- `,No=1500;class Pe extends ee{static{this.styles=[ee.styles,Wo]}static{this.properties={tab:{state:!0},todoFilter:{state:!0}}}#e=null;#o=null;#a;constructor(){super(),this.tab="context",this.todoFilter="all"}get sidebarLayout(){return{side:"right",defaultWidth:360,narrow:"stack"}}definitionFor(e){return Ce(e)}showTarget(e){switch(e.type){case"context":case"log":this.tab=e.type;return;case"question":this.tab="questions";return;case"todo":this.todoFilter="all";return}}disconnectedCallback(){super.disconnectedCallback(),clearTimeout(this.#a)}renderRegions(e){const a=U(this.locale),t=x=>e.commentCount(x),r=Ae(e.state,t),d=Ee(a,e.state,t),l=this.#d(),g=this.tab;return{header:this.#r(a,e.state),sidebar:n`
1595
+ `,Ne=1500;class Wo extends oo{static{this.styles=[oo.styles,We]}static{this.properties={tab:{state:!0},todoFilter:{state:!0}}}#o=null;#e=null;#a;constructor(){super(),this.tab="context",this.todoFilter="all"}get sidebarLayout(){return{side:"right",defaultWidth:360,narrow:"stack"}}definitionFor(o){return Go(o)}showTarget(o){switch(o.type){case"context":case"log":this.tab=o.type;return;case"question":this.tab="questions";return;case"todo":this.todoFilter="all";return}}disconnectedCallback(){super.disconnectedCallback(),clearTimeout(this.#a)}renderRegions(o){const a=U(this.locale),t=x=>o.commentCount(x),r=Oo(o.state,t),d=Co(a,o.state,t),l=this.#d(),g=this.tab;return{header:this.#r(a,o.state),sidebar:n`
1626
1596
  <div class="board-rail">
1627
- ${vo(a,De(e.state),this.#o,l)}
1628
- ${Eo(a,Oe(a,e.state,e.base,t,this.todoFilter),l)}
1597
+ ${ve(a,Eo(o.state),this.#e,l)}
1598
+ ${Ee(a,So(a,o.state,o.base,t,this.todoFilter),l)}
1629
1599
  </div>
1630
1600
  `,main:n`
1631
1601
  <div class="board">
1632
- ${So(a,g,{log:d.entries.length,questions:r.open,alert:r.blockingOpen>0},x=>{this.tab=x},x=>this.#t(x))}
1633
- ${K("context",g,ho(a,Te(a,e.state,t),this.#n(),l))}
1634
- ${K("log",g,$o(a,d,l))}
1635
- ${K("questions",g,r.total===0?n`<p class="board-empty">${a.noQuestions}</p>`:xo(a,r,l))}
1602
+ ${Se(a,g,{log:d.entries.length,questions:r.open,alert:r.blockingOpen>0},x=>{this.tab=x},x=>this.#t(x))}
1603
+ ${K("context",g,he(a,Ao(a,o.state,t),this.#n(),l))}
1604
+ ${K("log",g,we(a,d,l))}
1605
+ ${K("questions",g,r.total===0?n`<p class="board-empty">${a.noQuestions}</p>`:xe(a,r,l))}
1636
1606
  </div>
1637
- `}}updated(){super.updated();const e=this.#e;e!==null&&(this.#e=null,this.renderRoot.querySelector(`[data-answer-text="${e}"]`)?.focus())}#t(e){const a=To(this.tab,e.key);a!==null&&(e.preventDefault(),this.tab=a,this.updateComplete.then(()=>this.renderRoot.querySelector(`[data-tab="${a}"]`)?.focus()))}#r(e,a){return a.status===null?s:n`<span class="board-status board-status--header" data-status=${a.status}>
1638
- <span class="board-status-dot" aria-hidden="true"></span>${ke(e,a.status)}
1639
- </span>`}#n(){return this.querySelector(':scope > [slot="main"]')!==null}#d(){return{answer:(e,a)=>this.#s(e,a),answerOther:e=>this.#i(e),decide:(e,a)=>this.dispatch(ce(e,a)),setStatus:(e,a)=>this.dispatch(ue(e,a)),filterTodos:e=>{this.todoFilter=e},addTodo:(e,a)=>this.#l(e,a),deleteTodo:e=>this.dispatch(ge(e)),copy:(e,a)=>{this.#p(e,a)},comment:e=>this.requestComment(e)}}#s(e,a){this.dispatch(Q(e,a))}#i(e){this.dispatch(Q(e,{kind:"answer",text:""})).ok&&(this.#e=e)}#l(e,a){const{base:t,state:r}=this.derivation,d=[...t.todos,...r.todos].map(l=>l.id);this.dispatch(be(Ve(e,d),e,a))}async#p(e,a){await Ze(a)&&(clearTimeout(this.#a),this.#o=e,this.requestUpdate(),this.#a=setTimeout(()=>{this.#o=null,this.requestUpdate()},No))}}const We=()=>{customElements.get("dpk-template-task-board")||customElements.define("dpk-template-task-board",Pe)},Ro=Object.freeze(Object.defineProperty({__proto__:null,CONTEXT_PARTS:E,DpkTemplateTaskBoard:Pe,MEMBER_KINDS:ae,TASK_BOARD_PAGE:pe,TASK_STATUSES:oe,TODO_STATUSES:D,addTodo:be,answerQuestion:Q,applyTaskBoardAction:he,contextPartTitle:L,decideProposal:ce,defineTaskBoardElement:We,deleteTodo:ge,describeTaskBoardAction:ve,emptyTaskBoardBase:ne,isAnswered:ie,isHumanTodo:q,isPlanned:R,outputLocation:Se,parseTaskBoardBase:re,presentContext:Te,presentLog:Ee,presentOutputs:De,presentQuestions:Ae,presentTodos:Oe,resolveTaskBoardNavigation:ye,serializeTaskBoardAction:we,setTodoStatus:ue,taskBoardActions:m,taskBoardBaseSchema:te,taskBoardCommentTargets:$e,taskBoardDefinitionFor:Ce,taskBoardHasTarget:ze,taskBoardMessages:U,taskBoardTargetLabel:me,taskBoardTitle:fe},Symbol.toStringTag,{value:"Module"}));export{We as d,Ro as i};
1607
+ `}}updated(){super.updated();const o=this.#o;o!==null&&(this.#o=null,this.renderRoot.querySelector(`[data-answer-text="${o}"]`)?.focus())}#t(o){const a=Te(this.tab,o.key);a!==null&&(o.preventDefault(),this.tab=a,this.updateComplete.then(()=>this.renderRoot.querySelector(`[data-tab="${a}"]`)?.focus()))}#r(o,a){return a.status===null?s:n`<span class="board-status board-status--header" data-status=${a.status}>
1608
+ <span class="board-status-dot" aria-hidden="true"></span>${xo(o,a.status)}
1609
+ </span>`}#n(){return this.querySelector(':scope > [slot="main"]')!==null}#d(){return{answer:(o,a)=>this.#s(o,a),answerOther:o=>this.#i(o),decide:(o,a)=>this.dispatch(uo(o,a)),setStatus:(o,a)=>this.dispatch(bo(o,a)),filterTodos:o=>{this.todoFilter=o},addTodo:(o,a)=>this.#l(o,a),deleteTodo:o=>this.dispatch(ho(o)),copy:(o,a)=>{this.#p(o,a)},comment:o=>this.requestComment(o)}}#s(o,a){this.dispatch(Q(o,a))}#i(o){this.dispatch(Q(o,{kind:"answer",text:""})).ok&&(this.#o=o)}#l(o,a){const{base:t,state:r}=this.derivation,d=[...t.todos,...r.todos].map(l=>l.id);this.dispatch(go(Zo(o,d),o,a))}async#p(o,a){await oe(a)&&(clearTimeout(this.#a),this.#e=o,this.requestUpdate(),this.#a=setTimeout(()=>{this.#e=null,this.requestUpdate()},Ne))}}const No=()=>{customElements.get("dpk-template-task-board")||customElements.define("dpk-template-task-board",Wo)},Re=Object.freeze(Object.defineProperty({__proto__:null,CONTEXT_PARTS:E,DpkTemplateTaskBoard:Wo,MEMBER_KINDS:ao,TASK_BOARD_PAGE:co,TASK_STATUSES:eo,TODO_STATUSES:D,addTodo:go,answerQuestion:Q,applyTaskBoardAction:ko,contextPartTitle:G,decideProposal:uo,defineTaskBoardElement:No,deleteTodo:ho,describeTaskBoardAction:$o,emptyTaskBoardBase:no,isAnswered:lo,isHumanTodo:q,isPlanned:R,outputLocation:Do,parseTaskBoardBase:ro,presentContext:Ao,presentLog:Co,presentOutputs:Eo,presentQuestions:Oo,presentTodos:So,resolveTaskBoardNavigation:To,serializeTaskBoardAction:wo,setTodoStatus:bo,taskBoardActions:m,taskBoardBaseSchema:to,taskBoardCommentTargets:yo,taskBoardDefinitionFor:Go,taskBoardHasTarget:zo,taskBoardMessages:U,taskBoardTargetLabel:vo,taskBoardTitle:mo},Symbol.toStringTag,{value:"Module"}));export{No as d,Re as i};