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,1027 +0,0 @@
1
- import{p as ve,am as N,ae as f,aj as x,ak as m,ah as c,ao as T,af as k,ap as xe,ag as A,ad as me,R as O,a0 as we,V as F,a4 as s,a5 as P,a3 as p,aq as G,a2 as ye,T as B,aL as $e,aM as Te,aN as Se}from"./shared-CjhDJ2vV.js";import{s as Re}from"./shared-D4K7KsfJ.js";import{c as H}from"./shared-ml5h7U5L.js";const qe=N("kind",[f({kind:T("option"),optionId:x(c(),m(1))}),f({kind:T("free"),text:c()}),f({kind:T("clear")})]),C={ANSWER_QUESTION:ve("ANSWER_QUESTION","question",qe)},M=(t,e)=>({type:"ANSWER_QUESTION",target:{type:"question",id:t},payload:e}),Ae=f({id:x(c(),m(1)),label:x(c(),m(1))}),_=f({id:x(c(),m(1)),ref:k(x(c(),m(1))),title:x(c(),m(1)),description:k(c()),note:k(c()),options:k(A(Ae),[]),freeText:k(xe(),!0)}),Ce=N("kind",[f({kind:T("option"),optionId:x(c(),m(1))}),f({kind:T("free"),text:c()})]),Ee=f({..._.entries,answer:k(Ce)}),Ie=f({label:k(x(c(),m(1))),questions:A(Ee)}),U=f({title:k(c(),""),questions:A(_),history:k(A(Ie),[])}),W=t=>{const e=new Set;return t.map((r,i)=>{if(e.has(r.id))throw new Error(`duplicate question id: ${r.id}`);e.add(r.id);const n=new Set;for(const a of r.options){if(n.has(a.id))throw new Error(`duplicate option id: ${a.id} in question ${r.id}`);n.add(a.id)}return{...r,ref:r.ref??`Q${i+1}`,description:r.description??null,note:r.note??null}})},j=t=>({id:t.id,ref:t.ref,title:t.title,description:t.description,note:t.note,options:t.options,freeText:t.freeText}),Qe=t=>{const e=t.answer??null;if(e?.kind==="option"&&!t.options.some(r=>r.id===e.optionId))throw new Error(`unknown option id: ${e.optionId} in question ${t.id}`);return{...j(t),answer:e}},D=t=>{const e=me(U,t);return{title:e.title,questions:W(e.questions).map(j),answers:{},pastRounds:e.history.map((r,i)=>({label:r.label??`v${i+1}`,questions:W(r.questions).map(Qe)}))}},Y=()=>({title:"",questions:[],answers:{},pastRounds:[]}),v=(t,e)=>t.questions.find(r=>r.id===e),ze=(t,e)=>v(t,e)?.ref??e,z=(t,e)=>{const r=v(t,e);return r?`${r.ref} \xB7 ${r.title}`:e},S=(t,e)=>e?e.kind==="option"?t.options.find(r=>r.id===e.optionId)?.label??"":e.text.trim():"",E=(t,e)=>S(t,e)!=="",V=t=>{let e="";for(let r=t+1;r>0;r=Math.floor((r-1)/26))e=String.fromCharCode(97+(r-1)%26)+e;return e},K=t=>({total:t.questions.length,answered:t.questions.filter(e=>E(e,t.answers[e.id])).length}),I=(t,e,r)=>{const i=t.answers[e];if(r===null){if(i===void 0)return t;const n={...t.answers};return delete n[e],{...t,answers:n}}return i?.kind===r.kind&&(i.kind==="option"&&r.kind==="option"&&i.optionId===r.optionId||i.kind==="free"&&r.kind==="free"&&i.text===r.text)?t:{...t,answers:{...t.answers,[e]:r}}},J=(t,e)=>{if(e.type!=="ANSWER_QUESTION")return null;const r=v(t,e.target.id);if(!r)return null;const i=O(C.ANSWER_QUESTION,e);return i.kind==="clear"?I(t,r.id,null):i.kind==="option"?r.options.some(n=>n.id===i.optionId)?I(t,r.id,{kind:"option",optionId:i.optionId}):null:I(t,r.id,{kind:"free",text:i.text})},R=we({en:{wholePage:"Whole page",questionGroup:"Question",answerCleared:"Clear answer",answered:"Answer",answeredFreely:"Answer in your own words",quoted:t=>`\u2192 \u201C${t}\u201D`,progress:(t,e)=>`${t} of ${e} answered`,openPanel:"Show questions / review",closePanel:"Hide questions / review",toggleLabel:(t,e)=>`${t} (${e})`,tabs:"Questions / review",questionsTab:"Questions",reviewTab:"Review",copied:"Copied",copyFailed:"Could not copy",copyAll:"Copy answers and review",sending:"Sending\u2026",sent:"Sent to Claude",sendFailed:"Could not send",sendAll:"Send answers and review to Claude",copyDone:"Copied",copy:"Copy",noQuestions:"No matching questions.",freeText:"Your own answer",freeTextOf:t=>`Your own answer to ${t}`,freeTextPlaceholder:"Type an answer\u2026 (\u2318/Ctrl+Enter for next)",clearAnswer:"Clear answer",roundSelect:"Question round",currentRound:"Current questions",roundOption:(t,e)=>`${t} (${e})`,pastRound:t=>`${t}: earlier questions, read-only`,unanswered:"Not answered"},ja:{wholePage:"\u30DA\u30FC\u30B8\u5168\u4F53",questionGroup:"\u8CEA\u554F",answerCleared:"\u56DE\u7B54\u3092\u30AF\u30EA\u30A2",answered:"\u56DE\u7B54",answeredFreely:"\u81EA\u7531\u8A18\u8FF0\u3067\u56DE\u7B54",quoted:t=>`\u2192 \u300C${t}\u300D`,progress:(t,e)=>`\u56DE\u7B54\u6E08\u307F ${t} / ${e}`,openPanel:"\u8CEA\u554F / Review \u3092\u3072\u3089\u304F",closePanel:"\u8CEA\u554F / Review \u3092\u305F\u305F\u3080",toggleLabel:(t,e)=>`${t}\uFF08${e}\uFF09`,tabs:"\u8CEA\u554F / Review",questionsTab:"\u8CEA\u554F",reviewTab:"Review",copied:"\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F",copyFailed:"\u30B3\u30D4\u30FC\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F",copyAll:"\u56DE\u7B54\u30FBReview \u3092\u307E\u3068\u3081\u3066\u30B3\u30D4\u30FC",sending:"\u9001\u4FE1\u4E2D\u2026",sent:"Claude \u306B\u9001\u308A\u307E\u3057\u305F",sendFailed:"\u9001\u308C\u307E\u305B\u3093\u3067\u3057\u305F",sendAll:"\u56DE\u7B54\u30FBReview \u3092 Claude \u306B\u9001\u308B",copyDone:"\u30B3\u30D4\u30FC\u6E08\u307F",copy:"\u30B3\u30D4\u30FC",noQuestions:"\u8A72\u5F53\u3059\u308B\u8CEA\u554F\u306F\u3042\u308A\u307E\u305B\u3093\u3002",freeText:"\u81EA\u7531\u8A18\u8FF0",freeTextOf:t=>`${t} \u306E\u81EA\u7531\u8A18\u8FF0`,freeTextPlaceholder:"\u56DE\u7B54\u3092\u5165\u529B\u2026\uFF08\u2318/Ctrl+Enter \u3067\u6B21\u3078\uFF09",clearAnswer:"\u56DE\u7B54\u3092\u30AF\u30EA\u30A2",roundSelect:"\u8CEA\u554F\u306E\u30E9\u30A6\u30F3\u30C9",currentRound:"\u73FE\u5728\u306E\u8CEA\u554F",roundOption:(t,e)=>`${t}\uFF08${e} \u554F\uFF09`,pastRound:t=>`${t}: \u904E\u53BB\u306E\u8CEA\u554F\uFF08\u95B2\u89A7\u306E\u307F\uFF09`,unanswered:"\u672A\u56DE\u7B54"}}),X=t=>t.title===""?"Visually Grill":t.title,Z=(t,e,r)=>{switch(r.type){case"question":return z(e,r.id);case"page":return t.wholePage;default:return r.id}},Le=(t,e,r)=>{const i=O(C.ANSWER_QUESTION,r);if(i.kind==="clear")return{title:t.answerCleared,tone:"delete"};if(i.kind==="option"){const n=v(e,r.target.id)?.options.find(a=>a.id===i.optionId);return{title:t.answered,tone:"update",body:t.quoted(n?.label??i.optionId)}}return{title:t.answeredFreely,tone:"update",body:t.quoted(i.text.slice(0,120))}},ee=(t,e,r,i)=>{let n;try{n=Le(t,i??r,e)}catch{n={title:e.type,tone:"meta"}}return{title:n.title,targetLabel:Z(t,r,e.target),tone:n.tone,...n.body===void 0?{}:{summary:n.body}}},te=t=>`${t.type} ${F(t.target)} ${JSON.stringify(t.payload)}`,re=(t,e)=>e.questions.map(r=>({value:`question:${r.id}`,label:z(e,r.id),group:t.questionGroup})),ie=(t,e)=>{const r=e.question;if(r!==void 0&&v(t,r))return e;const i=t.questions[0];return i===void 0?e:{...e,question:i.id}},ne=(t,e)=>{const r=e.question;return r!==void 0&&v(t,r)?r:t.questions[0]?.id??null},Ne=(t,e)=>{const r=t.questions,i=r.findIndex(a=>a.id===e);return(i===-1?r:[...r.slice(i+1),...r.slice(0,i)]).find(a=>!E(a,t.answers[a.id]))?.id??null},ae=(t,e)=>t.options.map((r,i)=>({id:r.id,letter:V(i),label:r.label,checked:e?.kind==="option"&&e.optionId===r.id})),Oe=(t,e,r)=>{const i=e.answers[t.id];return{id:t.id,ref:t.ref,title:t.title,description:t.description,note:t.note,open:t.id===r,answered:S(t,i)!=="",summary:S(t,i),choices:ae(t,i),draft:i?.kind==="free"?i.text:"",freeSelected:i?.kind==="free",allowFreeText:t.freeText}},oe=(t,e)=>{const r=ne(t,e);return{questions:t.questions.map(i=>Oe(i,t,r))}},se=(t,e)=>{const r=K(e);return{progress:t.progress(r.answered,r.total),answered:r.answered,total:r.total}},le=(t,e)=>e!=="current"&&t.pastRounds[e]!==void 0?e:"current",Fe=(t,e,r)=>{if(e.pastRounds.length===0)return[];const i=le(e,r),n=e.pastRounds.map((a,o)=>({value:String(o),label:t.roundOption(a.label,a.questions.length),selected:i===o}));return[{value:"current",label:t.roundOption(t.currentRound,e.questions.length),selected:i==="current"},...[...n].reverse()]},Pe=(t,e,r)=>{const i=e.pastRounds[r];return i===void 0?null:{label:i.label,questions:i.questions.map(n=>{const a=n.answer??void 0,o=S(n,a);return{id:n.id,ref:n.ref,title:n.title,description:n.description,note:n.note,answered:o!=="",summary:o===""?t.unanswered:o,choices:ae(n,a),freeText:a?.kind==="free"?a.text:null}})}},de=(t,e)=>{switch(e.type){case"question":return v(t,e.id)!==void 0;case"page":return!0;default:return!1}},pe=t=>{const e=R(t);return{name:"grill",label:"Visually Grill",parseBase:D,emptyBase:Y,actions:C,apply:J,hasTarget:de,describe:(r,i,n)=>ee(e,r,i,n),serialize:te,resolveNavigation:ie,navigationFor:(r,i)=>i.type==="question"&&v(r,i.id)?{question:i.id}:null,commentTargets:r=>re(e,r),title:X}},Ge=5,L=4,ce=8,Be=(t,e)=>{const r=e.badgeHeight,i=t.target.right+ce,n=t.target.left-ce,a=[];let o=0,l=i;for(let u=t.widths.length-1;u>=0;u-=1){const g=t.widths[u]??0;l!==i&&l-g<n&&(o+=1,l=i),a[u]={x:l-g,y:t.target.top-r/2-o*(r+L)},l-=g+Ge}return a},ge=(t,e)=>{const r=t.map(()=>[]),i=Re(t.map((a,o)=>({group:a,index:o})).filter(({group:a})=>a.gutter),[({group:a})=>a.target.top]);let n=Number.NEGATIVE_INFINITY;for(const{group:a,index:o}of i){let l=Math.max(a.target.top,n);r[o]=a.widths.map(u=>{const g={x:e.width-u,y:l};return l+=e.badgeHeight+L,g}),n=l}return{points:r,bottom:n-L}},He=(t,e)=>Math.max(0,ge(t,e).bottom),Me=(t,e)=>{const r=ge(t,e),i=Math.max(e.height,r.bottom);return t.map((n,a)=>(n.gutter?r.points[a]??[]:Be(n,e)).map((o,l)=>({x:H(o.x,0,Math.max(0,e.width-(n.widths[l]??0))),y:H(o.y,0,Math.max(0,i-e.badgeHeight))})))},q="data-grill-questions",_e=t=>{const e=[t];for(const r of t.querySelectorAll("*"))r.shadowRoot&&e.push(r.shadowRoot);return e},ue=(t,e,r)=>{const i=r.question??e.questions[0]?.id??null,n=new Map(e.questions.map(o=>[o.ref,o])),a=[];for(const o of _e(t))for(const l of o.querySelectorAll(`[${q}]`)){const u=l.getAttribute(q)??"";for(const g of u.split(/\s+/)){if(g==="")continue;const h=n.get(g);h&&a.push({index:a.length,target:l,questionId:h.id,ref:h.ref,title:h.title,answered:E(h,e.answers[h.id]),open:h.id===i})}}return a},he=(t,e)=>{const r=t.getBoundingClientRect(),i=t.getRootNode(),n=i instanceof ShadowRoot?i.host:null,a=new Map;e.forEach((b,w)=>{const d=t.querySelector(`[data-label="${w}"]`);if(!d)return;const y=a.get(b.target)??[];y.push(d),a.set(b.target,y)});const o=[];for(const[b,w]of a){const d=b.getBoundingClientRect(),y=Ue(b,t),$=(d.width>0||d.height>0)&&d.bottom>r.top&&d.top<r.bottom&&d.right>r.left&&d.left<r.right&&d.bottom>y.top&&d.top<y.bottom;for(const Q of w)Q.dataset.visible=String($);$&&o.push({buttons:w,group:{target:{left:d.left-r.left,top:d.top-r.top,right:d.right-r.left,bottom:d.bottom-r.top},widths:w.map(Q=>Q.offsetWidth),gutter:n?.contains(b)===!0}})}const l=o[0]?.buttons[0]?.offsetHeight??0,u=o.map(({group:b})=>b),g={width:t.clientWidth,height:t.clientHeight,badgeHeight:l},h=He(u,g);t.parentElement&&(t.parentElement.style.minHeight=h>0?`${Math.ceil(h)}px`:"");const ke=Me(u,{...g,height:Math.max(g.height,h)});o.forEach(({buttons:b},w)=>{b.forEach((d,y)=>{const $=ke[w]?.[y];$&&(d.style.transform=`translate(${$.x}px, ${$.y}px)`)})})},Ue=(t,e)=>{const r=t.getRootNode(),i=r instanceof ShadowRoot?r.host:null,n=i?.shadowRoot?.querySelector(".diagram-canvas")??null;return n instanceof Element?n.getBoundingClientRect():i instanceof Element?i.getBoundingClientRect():e.getBoundingClientRect()},We=(t,e,r)=>s`
2
- <div class="grill-list">
3
- ${e.questions.length===0?s`<p class="grill-empty">${t.noQuestions}</p>`:P(e.questions,i=>i.id,i=>je(t,i,r))}
4
- </div>
5
- `,je=(t,e,r)=>s`
6
- <section
7
- class="grill-question"
8
- data-question=${e.id}
9
- data-answered=${String(e.answered)}
10
- data-dpk-target=${F({type:"question",id:e.id})}
11
- >
12
- <button
13
- class="grill-heading"
14
- type="button"
15
- aria-expanded=${e.open?"true":"false"}
16
- aria-controls=${`grill-body-${e.id}`}
17
- @click=${()=>r.open(e.id)}
18
- >
19
- <span class="grill-ref">${e.ref}</span>
20
- <span class="grill-heading-text">
21
- <strong>${e.title}</strong>
22
- ${!e.open&&e.answered?s`<span class="grill-summary">${e.summary}</span>`:p}
23
- </span>
24
- <span class="grill-chevron" aria-hidden="true">${G()}</span>
25
- </button>
26
- ${e.open?s`<div class="grill-body" id=${`grill-body-${e.id}`}>
27
- ${e.description?s`<p class="grill-description">${e.description}</p>`:p}
28
- ${e.note?s`<p class="grill-note">${e.note}</p>`:p}
29
- <div class="grill-choices" role="radiogroup" aria-label=${e.title}>
30
- ${e.choices.map(i=>De(e.id,i,r))}
31
- ${e.allowFreeText?s`<label class="grill-choice grill-choice--free" data-free=${String(e.freeSelected)}>
32
- <input
33
- type="radio"
34
- name=${`grill-${e.id}`}
35
- value="__free"
36
- .checked=${e.freeSelected}
37
- @change=${()=>r.answer(e.id,{kind:"free",text:""})}
38
- />
39
- <span class="grill-choice-text">${t.freeText}</span>
40
- </label>`:p}
41
- </div>
42
- ${e.allowFreeText?s`<textarea
43
- class="dpk-textarea grill-free"
44
- data-free-text=${e.id}
45
- aria-label=${t.freeTextOf(e.ref)}
46
- placeholder=${t.freeTextPlaceholder}
47
- .value=${e.draft}
48
- ?hidden=${!e.freeSelected}
49
- @input=${i=>{const n=i.currentTarget;n instanceof HTMLTextAreaElement&&r.answer(e.id,{kind:"free",text:n.value})}}
50
- @keydown=${i=>{i.isComposing||!(i.metaKey||i.ctrlKey)||i.key!=="Enter"||(i.preventDefault(),r.next(e.id))}}
51
- ></textarea>`:p}
52
- ${e.answered?s`<button
53
- type="button"
54
- class="grill-clear"
55
- @click=${()=>r.answer(e.id,{kind:"clear"})}
56
- >
57
- ${t.clearAnswer}
58
- </button>`:p}
59
- </div>`:p}
60
- </section>
61
- `,De=(t,e,r)=>s`
62
- <label class="grill-choice" data-choice=${e.id}>
63
- <input
64
- type="radio"
65
- name=${`grill-${t}`}
66
- value=${e.id}
67
- .checked=${e.checked}
68
- @change=${()=>r.answer(t,{kind:"option",optionId:e.id})}
69
- />
70
- <span class="grill-choice-text">
71
- <span class="grill-letter">(${e.letter})</span>
72
- <span>${e.label}</span>
73
- </span>
74
- </label>
75
- `,Ye=(t,e)=>s`
76
- <div class="grill-list">
77
- <p class="grill-round-note">${t.pastRound(e.label)}</p>
78
- ${e.questions.length===0?s`<p class="grill-empty">${t.noQuestions}</p>`:P(e.questions,r=>r.id,r=>Ve(r))}
79
- </div>
80
- `,Ve=t=>s`
81
- <details
82
- class="grill-question grill-question--past"
83
- data-question=${t.id}
84
- data-answered=${String(t.answered)}
85
- >
86
- <summary class="grill-heading">
87
- <span class="grill-ref">${t.ref}</span>
88
- <span class="grill-heading-text">
89
- <strong>${t.title}</strong>
90
- <span class="grill-summary">${t.summary}</span>
91
- </span>
92
- <span class="grill-chevron" aria-hidden="true">${G()}</span>
93
- </summary>
94
- <div class="grill-body">
95
- ${t.description?s`<p class="grill-description">${t.description}</p>`:p}
96
- ${t.note?s`<p class="grill-note">${t.note}</p>`:p}
97
- ${t.choices.length===0?p:s`<ul class="grill-past-choices">
98
- ${t.choices.map(e=>s`<li class="grill-past-choice" data-checked=${String(e.checked)}>
99
- <span class="grill-letter">(${e.letter})</span>
100
- <span>${e.label}</span>
101
- </li>`)}
102
- </ul>`}
103
- ${t.freeText===null?p:s`<p class="grill-past-choice grill-past-free" data-checked="true">${t.freeText}</p>`}
104
- </div>
105
- </details>
106
- `,Ke=ye`
107
- /* The shell's sidebar is a right-hand rail (see \`sidebarLayout\`), keeping its scroll. */
108
- .dpk-sidebar {
109
- display: flex;
110
- flex-direction: column;
111
- gap: 0;
112
- padding: 0;
113
- }
114
-
115
- /* The header reserves room for the corner button, exactly like the review
116
- button in the other templates. */
117
- .grill-panel {
118
- display: flex;
119
- flex-direction: column;
120
- flex: 1;
121
- min-height: 0;
122
- }
123
-
124
- .grill-tab-panel {
125
- display: flex;
126
- flex-direction: column;
127
- flex: 1;
128
- min-height: 0;
129
- overflow: auto;
130
- }
131
-
132
- .grill-tab-panel[hidden],
133
- .dpk-sidebar[hidden] {
134
- display: none;
135
- }
136
-
137
- /* A phone has no room for the main area beside the questions: they open
138
- over it, and the corner control folds them away to show it. */
139
- @media (max-width: 760px) {
140
- .dpk-sidebar {
141
- position: absolute;
142
- inset: 0;
143
- z-index: 25;
144
- width: auto;
145
- max-width: none;
146
- border-left: 0;
147
- }
148
-
149
- .dpk-sidebar-resizer {
150
- display: none;
151
- }
152
- }
153
-
154
- .grill-tab-panel dpk-component-comment-panel {
155
- flex: 1;
156
- }
157
-
158
- /* ------------------------------------------------------- header control */
159
-
160
- /*
161
- * The one control the reader always needs: the questions. It sits where the
162
- * other templates put their review button, and folds the question column away
163
- * so the diagrams get the width back.
164
- */
165
- .grill-toggle {
166
- position: fixed;
167
- top: 10px;
168
- right: 16px;
169
- z-index: 60;
170
- display: inline-flex;
171
- align-items: center;
172
- justify-content: center;
173
- width: 38px;
174
- height: 38px;
175
- padding: 0;
176
- border: 1px solid var(--dpk-rule-strong);
177
- border-radius: 999px;
178
- background: var(--dpk-glass);
179
- backdrop-filter: blur(12px);
180
- color: var(--dpk-ink-soft);
181
- font-size: 16.5px;
182
- font-weight: 650;
183
- line-height: 1;
184
- box-shadow: var(--dpk-bevel), var(--dpk-shadow);
185
- cursor: pointer;
186
- transition:
187
- color 160ms var(--dpk-ease),
188
- background 160ms var(--dpk-ease),
189
- border-color 160ms var(--dpk-ease),
190
- box-shadow 160ms var(--dpk-ease),
191
- transform 160ms var(--dpk-ease-spring);
192
- }
193
-
194
- .grill-toggle:hover {
195
- color: var(--dpk-ink);
196
- transform: translateY(-2px) scale(1.05);
197
- box-shadow: var(--dpk-bevel), var(--dpk-shadow-lg);
198
- }
199
-
200
- .grill-toggle:active {
201
- transform: translateY(0) scale(0.97);
202
- box-shadow: var(--dpk-shadow-xs);
203
- }
204
-
205
- .grill-toggle:focus-visible {
206
- outline: none;
207
- box-shadow: var(--dpk-focus);
208
- }
209
-
210
- .grill-toggle[aria-expanded='true'] {
211
- color: var(--dpk-accent-ink);
212
- border-color: transparent;
213
- background: linear-gradient(135deg, var(--dpk-accent-bright), var(--dpk-accent-strong));
214
- box-shadow:
215
- inset 0 1px 0 rgba(255, 255, 255, 0.24),
216
- 0 2px 8px color-mix(in srgb, var(--dpk-accent) 40%, transparent);
217
- }
218
-
219
- .grill-toggle-glyph {
220
- display: block;
221
- }
222
-
223
- .grill-toggle-badge {
224
- position: absolute;
225
- top: -5px;
226
- right: -5px;
227
- min-width: 22px;
228
- height: 18px;
229
- padding: 0 5px;
230
- border: 2px solid var(--dpk-paper-raised);
231
- border-radius: 999px;
232
- background: linear-gradient(180deg, var(--dpk-paper-raised), var(--dpk-paper-inset));
233
- color: var(--dpk-ink-soft);
234
- font-family: var(--dpk-mono);
235
- font-size: 9px;
236
- font-weight: 650;
237
- font-variant-numeric: tabular-nums;
238
- line-height: 14px;
239
- /* The widest value is wider than the button it sits on: keep it on one line. */
240
- white-space: nowrap;
241
- text-align: center;
242
- box-shadow: var(--dpk-bevel), var(--dpk-shadow-xs);
243
- }
244
-
245
- .grill-toggle[aria-expanded='true'] .grill-toggle-badge {
246
- background: var(--dpk-paper-raised);
247
- color: var(--dpk-accent);
248
- }
249
-
250
- /* ------------------------------------------------------------- the list */
251
-
252
- /* A segmented control: a sunken track with the active tab raised out of it. */
253
- .grill-tabs {
254
- display: flex;
255
- align-items: center;
256
- gap: 3px;
257
- flex-shrink: 0;
258
- margin: 10px;
259
- padding: 3px;
260
- border: 1px solid var(--dpk-rule);
261
- border-radius: var(--dpk-radius);
262
- background: var(--dpk-paper-sunken);
263
- box-shadow: inset 0 1px 2px var(--dpk-shade-1);
264
- }
265
-
266
- .grill-tabs button {
267
- flex: 1 1 0;
268
- display: inline-flex;
269
- align-items: center;
270
- justify-content: center;
271
- gap: 5px;
272
- padding: 6px 9px;
273
- border: 1px solid transparent;
274
- border-radius: var(--dpk-radius-sm);
275
- background: transparent;
276
- color: var(--dpk-ink-faint);
277
- font-size: 11.5px;
278
- cursor: pointer;
279
- transition:
280
- background 140ms var(--dpk-ease),
281
- color 140ms var(--dpk-ease),
282
- box-shadow 140ms var(--dpk-ease);
283
- }
284
-
285
- .grill-tabs button:hover {
286
- color: var(--dpk-ink);
287
- }
288
-
289
- .grill-tabs button[aria-selected='true'] {
290
- background: var(--dpk-paper-raised);
291
- color: var(--dpk-ink);
292
- font-weight: 600;
293
- box-shadow: var(--dpk-bevel), var(--dpk-shadow-xs);
294
- }
295
-
296
- .grill-count {
297
- font-family: var(--dpk-mono);
298
- font-size: 10px;
299
- font-variant-numeric: tabular-nums;
300
- color: var(--dpk-ink-faint);
301
- }
302
-
303
- .grill-tabs button[aria-selected='true'] .grill-count {
304
- color: var(--dpk-accent);
305
- }
306
-
307
- /* With earlier rounds, the questions tab is a select of rounds: the same
308
- segment, with a chevron drawn from the text color. */
309
- .grill-round-tab {
310
- position: relative;
311
- flex: 1 1 0;
312
- display: flex;
313
- min-width: 0;
314
- }
315
-
316
- .grill-round {
317
- flex: 1;
318
- min-width: 0;
319
- padding: 6px 22px 6px 9px;
320
- border: 1px solid transparent;
321
- border-radius: var(--dpk-radius-sm);
322
- appearance: none;
323
- background-color: transparent;
324
- background-image:
325
- linear-gradient(45deg, transparent 50%, currentColor 50%),
326
- linear-gradient(135deg, currentColor 50%, transparent 50%);
327
- background-position:
328
- calc(100% - 12px) 52%,
329
- calc(100% - 8px) 52%;
330
- background-size: 4px 4px;
331
- background-repeat: no-repeat;
332
- color: var(--dpk-ink-faint);
333
- font: inherit;
334
- font-size: 11.5px;
335
- text-align: center;
336
- text-align-last: center;
337
- text-overflow: ellipsis;
338
- cursor: pointer;
339
- transition:
340
- background-color 140ms var(--dpk-ease),
341
- color 140ms var(--dpk-ease),
342
- box-shadow 140ms var(--dpk-ease);
343
- }
344
-
345
- .grill-round-tab:hover .grill-round {
346
- color: var(--dpk-ink);
347
- }
348
-
349
- /* From Review the select is disabled and only looks like the other tab. */
350
- .grill-round:disabled {
351
- opacity: 1;
352
- }
353
-
354
- .grill-tabs .grill-round-switch {
355
- position: absolute;
356
- inset: 0;
357
- padding: 0;
358
- }
359
-
360
- .grill-round-tab[data-selected='true'] .grill-round {
361
- background-color: var(--dpk-paper-raised);
362
- color: var(--dpk-ink);
363
- font-weight: 600;
364
- box-shadow: var(--dpk-bevel), var(--dpk-shadow-xs);
365
- }
366
-
367
- .grill-round option {
368
- color: var(--dpk-ink);
369
- background: var(--dpk-paper-raised);
370
- font-weight: 400;
371
- }
372
-
373
- .grill-round-note {
374
- margin: 4px 0 2px;
375
- padding: 0 8px;
376
- font-size: 10.5px;
377
- line-height: 1.6;
378
- color: var(--dpk-ink-faint);
379
- }
380
-
381
- .grill-list {
382
- flex: 1;
383
- min-height: 0;
384
- overflow: auto;
385
- overscroll-behavior: contain;
386
- padding: 2px 10px 12px;
387
- }
388
-
389
- .grill-empty {
390
- margin: 0;
391
- padding: 22px 8px;
392
- text-align: center;
393
- font-size: 12px;
394
- color: var(--dpk-ink-faint);
395
- }
396
-
397
- .grill-question {
398
- margin: 6px 0;
399
- border: 1px solid transparent;
400
- border-radius: var(--dpk-radius);
401
- transition:
402
- background 140ms var(--dpk-ease),
403
- border-color 140ms var(--dpk-ease);
404
- }
405
-
406
- .grill-question:has(.grill-heading[aria-expanded='true']) {
407
- border-color: var(--dpk-rule);
408
- background: var(--dpk-paper-raised);
409
- box-shadow: var(--dpk-bevel), var(--dpk-shadow-xs);
410
- }
411
-
412
- .grill-heading {
413
- display: flex;
414
- align-items: flex-start;
415
- gap: 9px;
416
- width: 100%;
417
- padding: 10px 8px;
418
- border: 0;
419
- border-radius: var(--dpk-radius-sm);
420
- background: none;
421
- text-align: left;
422
- cursor: pointer;
423
- }
424
-
425
- .grill-heading:hover {
426
- background: var(--dpk-paper-sunken);
427
- }
428
-
429
- .grill-question:has(.grill-heading[aria-expanded='true']) .grill-heading:hover {
430
- background: none;
431
- }
432
-
433
- .grill-ref {
434
- flex: 0 0 auto;
435
- display: grid;
436
- place-items: center;
437
- min-width: 30px;
438
- height: 22px;
439
- padding: 0 6px;
440
- border: 1px solid var(--dpk-rule-strong);
441
- border-radius: 999px;
442
- background: var(--dpk-paper-sunken);
443
- font-family: var(--dpk-mono);
444
- font-size: 10px;
445
- font-weight: 600;
446
- font-variant-numeric: tabular-nums;
447
- color: var(--dpk-ink-faint);
448
- box-shadow: inset 0 1px 2px var(--dpk-shade-1);
449
- transition:
450
- background 140ms var(--dpk-ease),
451
- color 140ms var(--dpk-ease),
452
- border-color 140ms var(--dpk-ease),
453
- box-shadow 140ms var(--dpk-ease);
454
- }
455
-
456
- .grill-question[data-answered='true'] .grill-ref {
457
- border-color: transparent;
458
- background: linear-gradient(180deg, var(--dpk-green-soft), color-mix(in srgb, var(--dpk-green) 16%, transparent));
459
- color: var(--dpk-green);
460
- box-shadow: var(--dpk-bevel);
461
- }
462
-
463
- .grill-question:has(.grill-heading[aria-expanded='true']) .grill-ref {
464
- border-color: transparent;
465
- background: linear-gradient(180deg, var(--dpk-accent-bright), var(--dpk-accent));
466
- color: var(--dpk-accent-ink);
467
- box-shadow:
468
- inset 0 1px 0 rgba(255, 255, 255, 0.24),
469
- 0 2px 6px -2px color-mix(in srgb, var(--dpk-accent) 55%, transparent);
470
- }
471
-
472
- .grill-heading-text {
473
- flex: 1;
474
- min-width: 0;
475
- }
476
-
477
- .grill-heading-text strong {
478
- display: block;
479
- font-size: 12.5px;
480
- font-weight: 620;
481
- line-height: 1.6;
482
- letter-spacing: -0.005em;
483
- }
484
-
485
- .grill-summary {
486
- display: block;
487
- margin-top: 4px;
488
- font-size: 10.5px;
489
- line-height: 1.6;
490
- color: var(--dpk-green);
491
- white-space: nowrap;
492
- overflow: hidden;
493
- text-overflow: ellipsis;
494
- }
495
-
496
- .grill-chevron {
497
- flex: 0 0 auto;
498
- width: 16px;
499
- color: var(--dpk-ink-faint);
500
- line-height: 22px;
501
- text-align: center;
502
- }
503
-
504
- .grill-chevron svg {
505
- display: block;
506
- width: 13px;
507
- height: 13px;
508
- margin: 4.5px auto 0;
509
- transition: transform 180ms var(--dpk-ease);
510
- }
511
-
512
- .grill-heading[aria-expanded='true'] .grill-chevron svg {
513
- transform: rotate(90deg);
514
- color: var(--dpk-accent);
515
- }
516
-
517
- .grill-body {
518
- padding: 2px 8px 14px 47px;
519
- animation: dpk-grill-open 180ms var(--dpk-ease) backwards;
520
- }
521
-
522
- @keyframes dpk-grill-open {
523
- from {
524
- opacity: 0;
525
- transform: translateY(-4px);
526
- }
527
- }
528
-
529
- .grill-description {
530
- margin: 0 0 8px;
531
- font-size: 11.5px;
532
- line-height: 1.85;
533
- color: var(--dpk-ink-soft);
534
- }
535
-
536
- .grill-note {
537
- margin: 0 0 10px;
538
- padding: 7px 10px;
539
- border-left: 2px solid var(--dpk-amber);
540
- border-radius: 0 var(--dpk-radius-xs) var(--dpk-radius-xs) 0;
541
- background: linear-gradient(90deg, var(--dpk-amber-soft), transparent);
542
- font-size: 11px;
543
- line-height: 1.7;
544
- color: var(--dpk-ink-soft);
545
- }
546
-
547
- .grill-choices {
548
- display: grid;
549
- gap: 6px;
550
- }
551
-
552
- .grill-choice {
553
- position: relative;
554
- display: flex;
555
- align-items: flex-start;
556
- gap: 8px;
557
- padding: 8px 9px 8px 12px;
558
- border: 1px solid var(--dpk-rule);
559
- border-radius: var(--dpk-radius-sm);
560
- background: var(--dpk-paper);
561
- font-size: 11.5px;
562
- line-height: 1.7;
563
- cursor: pointer;
564
- overflow: hidden;
565
- transition:
566
- border-color 140ms var(--dpk-ease),
567
- background 140ms var(--dpk-ease),
568
- box-shadow 140ms var(--dpk-ease),
569
- transform 140ms var(--dpk-ease);
570
- }
571
-
572
- /* Selection indicator: a colored bar on the leading edge, like the rail's
573
- comment cards — quiet until a choice is actually picked. */
574
- .grill-choice::before {
575
- content: '';
576
- position: absolute;
577
- left: 0;
578
- top: 0;
579
- bottom: 0;
580
- width: 3px;
581
- background: transparent;
582
- transition: background 140ms var(--dpk-ease);
583
- }
584
-
585
- .grill-choice:hover {
586
- border-color: var(--dpk-rule-hover);
587
- background: var(--dpk-paper-inset);
588
- }
589
-
590
- .grill-choice:has(input:checked) {
591
- border-color: color-mix(in srgb, var(--dpk-green) 45%, transparent);
592
- background: var(--dpk-green-soft);
593
- box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--dpk-green) 30%, transparent);
594
- }
595
-
596
- .grill-choice:has(input:checked)::before {
597
- background: var(--dpk-green);
598
- }
599
-
600
- .grill-choice--free {
601
- border-style: dashed;
602
- }
603
-
604
- .grill-choice--free[data-free='true'] {
605
- border-style: solid;
606
- }
607
-
608
- .grill-choice input {
609
- flex: 0 0 auto;
610
- margin: 3px 0 0;
611
- accent-color: var(--dpk-green);
612
- }
613
-
614
- .grill-choice-text {
615
- display: flex;
616
- gap: 7px;
617
- min-width: 0;
618
- }
619
-
620
- .grill-letter {
621
- flex: 0 0 auto;
622
- font-family: var(--dpk-mono);
623
- font-size: 10px;
624
- font-weight: 600;
625
- line-height: 1.9;
626
- color: var(--dpk-green);
627
- }
628
-
629
- /* An earlier round: a disclosure per question, nothing to answer with. */
630
- .grill-question--past > summary {
631
- list-style: none;
632
- }
633
-
634
- .grill-question--past > summary::-webkit-details-marker {
635
- display: none;
636
- }
637
-
638
- .grill-question--past[open] {
639
- border-color: var(--dpk-rule);
640
- background: var(--dpk-paper-raised);
641
- box-shadow: var(--dpk-bevel), var(--dpk-shadow-xs);
642
- }
643
-
644
- .grill-question--past[open] .grill-heading:hover {
645
- background: none;
646
- }
647
-
648
- .grill-question--past[open] .grill-chevron svg {
649
- transform: rotate(90deg);
650
- }
651
-
652
- .grill-question--past[open] .grill-summary {
653
- display: none;
654
- }
655
-
656
- .grill-question--past[data-answered='false'] .grill-summary {
657
- color: var(--dpk-ink-faint);
658
- }
659
-
660
- .grill-past-choices {
661
- display: grid;
662
- gap: 6px;
663
- margin: 0;
664
- padding: 0;
665
- list-style: none;
666
- }
667
-
668
- .grill-past-choice {
669
- display: flex;
670
- gap: 7px;
671
- margin: 0;
672
- padding: 7px 9px;
673
- border: 1px solid var(--dpk-rule);
674
- border-radius: var(--dpk-radius-sm);
675
- font-size: 11.5px;
676
- line-height: 1.7;
677
- color: var(--dpk-ink-faint);
678
- }
679
-
680
- .grill-past-choice[data-checked='true'] {
681
- border-color: color-mix(in srgb, var(--dpk-green) 45%, transparent);
682
- background: var(--dpk-green-soft);
683
- color: var(--dpk-ink);
684
- }
685
-
686
- .grill-past-free {
687
- margin-top: 6px;
688
- white-space: pre-wrap;
689
- }
690
-
691
- .grill-free {
692
- margin-top: 7px;
693
- min-height: 76px;
694
- max-height: 240px;
695
- }
696
-
697
- .grill-clear {
698
- margin-top: 10px;
699
- padding: 0;
700
- border: 0;
701
- background: none;
702
- color: var(--dpk-ink-faint);
703
- font-size: 10.5px;
704
- text-decoration: underline;
705
- text-underline-offset: 3px;
706
- cursor: pointer;
707
- }
708
-
709
- .grill-clear:hover {
710
- color: var(--dpk-ink);
711
- }
712
-
713
- .grill-footer {
714
- flex-shrink: 0;
715
- padding: 10px 12px;
716
- border-top: 1px solid var(--dpk-rule);
717
- background: var(--dpk-paper-raised);
718
- box-shadow: 0 -6px 12px -10px var(--dpk-shade-2);
719
- }
720
-
721
- .grill-copy {
722
- width: 100%;
723
- }
724
-
725
- /* Inside a Claude Artifact: send is the way, copy the fallback beside it. */
726
- .grill-footer-actions {
727
- display: flex;
728
- gap: 6px;
729
- }
730
-
731
- .grill-send {
732
- flex: 1;
733
- min-width: 0;
734
- }
735
-
736
- .grill-footer-actions .grill-copy {
737
- width: auto;
738
- flex-shrink: 0;
739
- }
740
-
741
- .grill-send[data-status='sent'] {
742
- border-color: transparent;
743
- background: var(--dpk-green);
744
- color: var(--dpk-accent-ink);
745
- }
746
-
747
- .grill-send[data-status='failed'] {
748
- border-color: transparent;
749
- background: var(--dpk-amber);
750
- color: var(--dpk-accent-ink);
751
- }
752
-
753
- .grill-footer-note {
754
- margin: 8px 0 0;
755
- color: var(--dpk-ink-soft);
756
- font-size: 11.5px;
757
- line-height: 1.5;
758
- }
759
-
760
- /* The copy button reports the outcome, so a click is never silent. */
761
- .grill-copy[data-status='copied'] {
762
- border-color: transparent;
763
- background: var(--dpk-green);
764
- color: var(--dpk-accent-ink);
765
- }
766
-
767
- .grill-copy[data-status='copied']:hover:not([disabled]) {
768
- border-color: transparent;
769
- background: color-mix(in srgb, var(--dpk-green) 85%, #000);
770
- }
771
-
772
- .grill-copy[data-status='failed'] {
773
- border-color: transparent;
774
- background: var(--dpk-amber);
775
- color: var(--dpk-accent-ink);
776
- }
777
-
778
- .grill-copy[data-status='failed']:hover:not([disabled]) {
779
- border-color: transparent;
780
- background: color-mix(in srgb, var(--dpk-amber) 85%, #000);
781
- }
782
-
783
- /* Announced to assistive tech; the button label change alone is easy to miss. */
784
- .grill-sr {
785
- position: absolute;
786
- width: 1px;
787
- height: 1px;
788
- margin: -1px;
789
- padding: 0;
790
- overflow: hidden;
791
- clip-path: inset(50%);
792
- white-space: nowrap;
793
- border: 0;
794
- }
795
-
796
- /* -------------------------------------------------- main area and badges */
797
-
798
- .grill-stage {
799
- position: relative;
800
- min-width: 0;
801
- }
802
-
803
- /* Badges on the author's own markup stand in a column of their own on the
804
- right, beside the line they mark, so they never cover its words. */
805
- .grill-stage[data-gutter] {
806
- padding-right: 48px;
807
- }
808
-
809
- /* The author's own markup lands in slot="main": nudge its prose toward the
810
- kit's own type scale, so the diagrams it wraps don't feel bolted on. */
811
- .grill-stage ::slotted(h1),
812
- .grill-stage ::slotted(h2),
813
- .grill-stage ::slotted(h3) {
814
- font-family: var(--dpk-display);
815
- font-weight: 660;
816
- letter-spacing: -0.015em;
817
- color: var(--dpk-ink);
818
- }
819
-
820
- .grill-stage ::slotted(p) {
821
- line-height: 1.75;
822
- color: var(--dpk-ink-soft);
823
- }
824
-
825
- .grill-labels {
826
- position: absolute;
827
- inset: 0;
828
- z-index: 3;
829
- overflow: hidden;
830
- pointer-events: none;
831
- }
832
-
833
- .grill-label {
834
- position: absolute;
835
- display: inline-flex;
836
- align-items: center;
837
- justify-content: center;
838
- min-width: 30px;
839
- height: 22px;
840
- padding: 0 7px;
841
- border: 2px solid var(--dpk-paper-raised);
842
- border-radius: 999px;
843
- background: linear-gradient(180deg, var(--dpk-accent-bright), var(--dpk-accent));
844
- color: var(--dpk-accent-ink);
845
- font-family: var(--dpk-mono);
846
- font-size: 10px;
847
- font-weight: 650;
848
- font-variant-numeric: tabular-nums;
849
- box-shadow:
850
- inset 0 1px 0 rgba(255, 255, 255, 0.28),
851
- 0 2px 6px -2px color-mix(in srgb, var(--dpk-accent) 55%, transparent);
852
- cursor: pointer;
853
- pointer-events: auto;
854
- transition:
855
- transform 160ms var(--dpk-ease-spring),
856
- box-shadow 160ms var(--dpk-ease),
857
- background 160ms var(--dpk-ease);
858
- }
859
-
860
- .grill-label[data-visible='false'] {
861
- visibility: hidden;
862
- }
863
-
864
- .grill-label:hover {
865
- transform: translateY(-1px) scale(1.06);
866
- box-shadow:
867
- inset 0 1px 0 rgba(255, 255, 255, 0.3),
868
- 0 4px 10px -2px color-mix(in srgb, var(--dpk-accent) 60%, transparent);
869
- }
870
-
871
- .grill-label[data-answered='true'] {
872
- background: linear-gradient(180deg, color-mix(in srgb, var(--dpk-green) 85%, white), var(--dpk-green));
873
- }
874
-
875
- .grill-label[aria-pressed='true'] {
876
- box-shadow:
877
- 0 0 0 2px color-mix(in srgb, var(--dpk-accent) 45%, transparent),
878
- var(--dpk-shadow-sm);
879
- }
880
-
881
- .grill-label:focus-visible {
882
- outline: none;
883
- box-shadow: var(--dpk-focus);
884
- }
885
- `;class be extends B{static{this.styles=[B.styles,Ke]}get sidebarLayout(){return{side:"right",defaultWidth:336,collapsible:!1}}definitionFor(e){return pe(e)}static{this.properties={tab:{state:!0},folded:{state:!0},round:{state:!0}}}#o=[];#s=!1;#a=null;#l=null;#r=null;#e="idle";#i=null;#n={kind:"idle"};constructor(){super(),this.tab="questions",this.folded=!1,this.round="current"}connectedCallback(){super.connectedCallback(),document.addEventListener("scroll",this.#t,!0),window.addEventListener("resize",this.#t),this.addEventListener("dpk-diagram-view",this.#t)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("scroll",this.#t,!0),window.removeEventListener("resize",this.#t),this.removeEventListener("dpk-diagram-view",this.#t),this.#r?.disconnect(),this.#r=null,this.#d()}renderRegions(e){return this.#o=ue(this,e.state,e.navigation),{header:this.#b(e),main:this.#m(e,this.#o),sidebar:this.#f(e),sidebarHidden:this.folded}}updated(){super.updated(),this.#T(),this.#t(),this.#S();const e=this.#l;e!==null&&(this.#l=null,this.renderRoot.querySelector(`[data-free-text="${e}"]`)?.focus())}get integratedReview(){return!0}requestComment(e){this.tab="review",this.folded=!1,super.requestComment(e)}showTarget(e){e.type==="question"&&(this.tab="questions",this.folded=!1,this.round="current")}#p(e,r){this.tab="questions",this.folded=!1,this.round="current",this.#a=null,e.navigate({question:r})}#b(e){const r=R(this.locale),i=se(r,e.state),n=r.toggleLabel(this.folded?r.openPanel:r.closePanel,i.progress);return s`
886
- <button
887
- type="button"
888
- class="grill-toggle"
889
- aria-expanded=${this.folded?"false":"true"}
890
- aria-label=${n}
891
- title=${n}
892
- @click=${()=>this.folded=!this.folded}
893
- >
894
- <span class="grill-toggle-glyph" aria-hidden="true">?</span>
895
- <span class="grill-toggle-badge" aria-hidden="true">${i.answered} / ${i.total}</span>
896
- </button>
897
- `}#f(e){const r=R(this.locale),i=le(e.state,this.round),n=Fe(r,e.state,i),a=i==="current"?null:Pe(r,e.state,i);return s`
898
- <div class="grill-panel">
899
- <div class="grill-tabs" role="tablist" aria-label=${r.tabs}>
900
- ${["questions","review"].map(o=>o==="questions"&&n.length>0?this.#v(r,n):s`
901
- <button
902
- type="button"
903
- role="tab"
904
- id=${`grill-tab-${o}`}
905
- data-tab=${o}
906
- aria-controls=${`grill-panel-${o}`}
907
- aria-selected=${String(this.tab===o)}
908
- tabindex=${this.tab===o?0:-1}
909
- @click=${()=>this.tab=o}
910
- @keydown=${l=>this.#c(l)}
911
- >
912
- ${o==="questions"?r.questionsTab:r.reviewTab}<span class="grill-count"
913
- >${o==="questions"?e.state.questions.length:e.actions.length}</span
914
- >
915
- </button>
916
- `)}
917
- </div>
918
- <div
919
- class="grill-tab-panel"
920
- id="grill-panel-questions"
921
- role="tabpanel"
922
- aria-labelledby="grill-tab-questions"
923
- ?hidden=${this.tab!=="questions"}
924
- >
925
- ${a===null?We(r,oe(e.state,e.navigation),{open:o=>this.#p(e,o),answer:(o,l)=>this.#w(o,l),next:o=>this.#g(o)}):Ye(r,a)}
926
- </div>
927
- <div
928
- class="grill-tab-panel"
929
- id="grill-panel-review"
930
- role="tabpanel"
931
- aria-labelledby="grill-tab-review"
932
- ?hidden=${this.tab!=="review"}
933
- >
934
- ${this.renderReviewPanel(e)}
935
- </div>
936
- ${this.#k(e.actions.length===0)}
937
- </div>
938
- `}#k(e){const r=R(this.locale),i=this.#e==="copied"?r.copied:this.#e==="failed"?r.copyFailed:r.copyAll;if(!this.canSendToClaude)return s`
939
- <div class="grill-footer">
940
- <button
941
- class="dpk-btn dpk-btn--accent grill-copy"
942
- type="button"
943
- data-status=${this.#e}
944
- ?disabled=${e}
945
- @click=${()=>{this.#u()}}
946
- >
947
- ${i}
948
- </button>
949
- <span class="grill-sr" role="status">${this.#e==="idle"?"":i}</span>
950
- </div>
951
- `;const n=this.#n,a=n.kind==="pending"?r.sending:n.kind==="sent"?r.sent:n.kind==="failed"?r.sendFailed:r.sendAll,o=n.kind==="failed"?$e(n.reason,this.locale):null,l=o??(n.kind==="sent"?a:this.#e==="idle"?"":i);return s`
952
- <div class="grill-footer">
953
- <div class="grill-footer-actions">
954
- <button
955
- class="dpk-btn dpk-btn--accent grill-send"
956
- type="button"
957
- data-status=${n.kind}
958
- ?disabled=${e||n.kind==="pending"}
959
- @click=${()=>{this.#y()}}
960
- >
961
- ${a}
962
- </button>
963
- <button
964
- class="dpk-btn dpk-btn--ghost grill-copy"
965
- type="button"
966
- data-status=${this.#e}
967
- title=${r.copyAll}
968
- ?disabled=${e}
969
- @click=${()=>{this.#u()}}
970
- >
971
- ${this.#e==="copied"?r.copyDone:r.copy}
972
- </button>
973
- </div>
974
- ${o===null?null:s`<p class="grill-footer-note">${o}</p>`}
975
- <span class="grill-sr" role="status">${l}</span>
976
- </div>
977
- `}#v(e,r){const i=this.tab==="questions",n=s`
978
- <select
979
- class="grill-round"
980
- id=${i?"grill-tab-questions":p}
981
- data-tab=${i?"questions":p}
982
- aria-label=${e.roundSelect}
983
- aria-controls="grill-panel-questions"
984
- ?disabled=${!i}
985
- @change=${a=>this.#x(a)}
986
- >
987
- ${r.map(a=>s`<option value=${a.value} ?selected=${a.selected}>${a.label}</option>`)}
988
- </select>
989
- `;return s`
990
- <div class="grill-round-tab" data-selected=${String(i)}>
991
- ${n}
992
- ${i?p:s`<button
993
- type="button"
994
- role="tab"
995
- class="grill-round-switch"
996
- id="grill-tab-questions"
997
- data-tab="questions"
998
- aria-controls="grill-panel-questions"
999
- aria-selected="false"
1000
- aria-label=${r.find(a=>a.selected)?.label??e.questionsTab}
1001
- tabindex="-1"
1002
- @click=${()=>this.tab="questions"}
1003
- @keydown=${a=>this.#c(a)}
1004
- ></button>`}
1005
- </div>
1006
- `}#x(e){const r=e.currentTarget;r instanceof HTMLSelectElement&&(this.tab="questions",this.round=r.value==="current"?"current":Number(r.value),this.#a=null)}#c(e){if(!["ArrowLeft","ArrowRight","Home","End"].includes(e.key))return;e.preventDefault(),this.tab=e.key==="Home"?"questions":e.key==="End"||this.tab==="questions"?"review":"questions";const r=this.tab;this.updateComplete.then(()=>this.renderRoot.querySelector(`[data-tab="${r}"]`)?.focus())}#m(e,r){return s`
1007
- <div class="grill-stage" ?data-gutter=${r.some(i=>this.contains(i.target))}>
1008
- <slot name="main"></slot>
1009
- <div class="grill-labels">
1010
- ${r.map(i=>s`
1011
- <button
1012
- type="button"
1013
- class="grill-label"
1014
- data-label=${i.index}
1015
- data-answered=${String(i.answered)}
1016
- data-visible="false"
1017
- aria-pressed=${i.open?"true":"false"}
1018
- aria-label=${`${i.ref} \xB7 ${i.title}`}
1019
- title=${`${i.ref} \xB7 ${i.title}`}
1020
- @click=${()=>this.#p(e,i.questionId)}
1021
- >
1022
- ${i.ref}
1023
- </button>
1024
- `)}
1025
- </div>
1026
- </div>
1027
- `}#w(e,r){if(this.dispatch(M(e,r)).ok){if(r.kind==="option"){this.#g(e);return}r.kind==="free"&&r.text===""&&(this.#l=e)}}#g(e){const r=Ne(this.derivation.state,e);r!==null&&this.navigate({question:r})}async#u(){const e=this.api.exportBrief(),r=await Te(e);this.#d(),this.#e=r?"copied":"failed",this.#h()}async#y(){this.#d(),this.#n={kind:"pending"},this.requestUpdate();const e=await this.sendToClaude();this.#n=e.ok?{kind:"sent"}:{kind:"failed",reason:e.reason},e.ok?this.#h():this.requestUpdate()}#h(){this.requestUpdate(),this.#i=setTimeout(()=>{this.#i=null,this.#e="idle",this.#n={kind:"idle"},this.requestUpdate()},2400)}#d(){this.#i!==null&&clearTimeout(this.#i),this.#i=null,this.#e="idle",this.#n={kind:"idle"}}#$(){this.requestUpdate()}#T(){this.#r?.disconnect(),this.#r??=new MutationObserver(()=>{this.#$(),this.#t()}),this.#r.observe(this,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[q]});for(const e of this.querySelectorAll("*"))e===this||!e.shadowRoot||this.#r.observe(e.shadowRoot,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[q]})}#t=()=>{this.#s||(this.#s=!0,requestAnimationFrame(()=>{this.#s=!1;const e=this.renderRoot.querySelector(".grill-labels");e&&he(e,this.#o)}))};#S(){const e=this.navigation.question??null;if(this.tab!=="questions"||this.round!=="current"||this.folded||e===null||e===this.#a)return;this.#a=e;const r=this.renderRoot.querySelector(`[data-question="${e}"]`),i=r?.closest(".grill-list");r&&i&&Se(i,r)}}const fe=()=>{customElements.get("dpk-template-grill")||customElements.define("dpk-template-grill",be)},Je=Object.freeze(Object.defineProperty({__proto__:null,DpkTemplateGrill:be,GRILL_QUESTIONS_ATTRIBUTE:q,answerCounts:K,answerQuestion:M,answerText:S,applyGrillAction:J,collectLabelBindings:ue,defineGrillElement:fe,describeGrillAction:ee,emptyGrillBase:Y,findQuestion:v,grillActions:C,grillBaseSchema:U,grillCommentTargets:re,grillDefinitionFor:pe,grillHasTarget:de,grillMessages:R,grillTargetLabel:Z,grillTitle:X,isAnswered:E,openQuestionId:ne,optionLetter:V,parseGrillBase:D,positionLabels:he,presentGrillHeader:se,presentGrillPanel:oe,questionLabel:z,questionRef:ze,resolveGrillNavigation:ie,serializeGrillAction:te,withAnswer:I},Symbol.toStringTag,{value:"Module"}));export{fe as d,Je as i};