agent-canvas 0.1.40 → 0.1.42

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 (38) hide show
  1. package/README.md +18 -1
  2. package/bin/agent-canvas.ts +5 -1
  3. package/bin/lib/commands/exec.test.ts +27 -0
  4. package/bin/lib/commands/exec.ts +129 -0
  5. package/bin/lib/commands/watch.ts +8 -1
  6. package/bin/lib/config.ts +1 -0
  7. package/bin/lib/daemon-lifecycle.ts +3 -1
  8. package/bin/lib/helpers.test.ts +48 -0
  9. package/bin/lib/helpers.ts +65 -15
  10. package/bin/lib/instructions/component-secretinput.md +61 -0
  11. package/bin/lib/instructions/flow-feature.md +1 -1
  12. package/bin/lib/instructions/flow-plan.md +1 -1
  13. package/bin/lib/instructions/flow-runbook.md +77 -0
  14. package/bin/lib/instructions/overview.md +32 -12
  15. package/daemon/client/AnnotationProvider.tsx +2 -7
  16. package/daemon/client/App.tsx +12 -2
  17. package/daemon/client/annotationDraft.test.ts +16 -1
  18. package/daemon/client/annotationDraft.ts +15 -0
  19. package/daemon/client/clientApi.ts +41 -0
  20. package/daemon/client/components/SecretInput.tsx +156 -0
  21. package/daemon/client/components/index.ts +1 -0
  22. package/daemon/dist/client.css +1 -1
  23. package/daemon/dist/client.js +28 -28
  24. package/daemon/dist/components.js +42 -40
  25. package/daemon/src/compiler.test.ts +5 -0
  26. package/daemon/src/compiler.ts +2 -2
  27. package/daemon/src/handlers/api.ts +81 -0
  28. package/daemon/src/handlers/utils.ts +1 -1
  29. package/daemon/src/paths.ts +3 -0
  30. package/daemon/src/secrets-api.test.ts +123 -0
  31. package/daemon/src/server.ts +9 -5
  32. package/daemon/src/session-secrets.test.ts +83 -0
  33. package/daemon/src/session.ts +55 -11
  34. package/package.json +1 -1
  35. package/skills/canvas/SKILL.md +18 -7
  36. package/workers/canvas-share/public/assets/client.css +1 -1
  37. package/workers/canvas-share/public/assets/client.js +28 -28
  38. package/workers/canvas-share/public/assets/components.js +42 -40
@@ -1,9 +1,9 @@
1
- import f1,{useEffect as M1,useLayoutEffect as j6,useState as q1,useCallback as V0,useRef as v1,createContext as w5,useMemo as L5}from"react";import{createRoot as A6}from"react-dom/client";function U2(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var r1=U2();function e2(Z){r1=Z}var c1={exec:()=>null};function t(Z,$=""){let q=typeof Z=="string"?Z:Z.source,Q={replace:(J,Y)=>{let X=typeof Y=="string"?Y:Y.source;return X=X.replace(K1.caret,"$1"),q=q.replace(J,X),Q},getRegex:()=>new RegExp(q,$)};return Q}var I5=(()=>{try{return!!new RegExp("(?<=1)(?<!1)")}catch{return!1}})(),K1={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:(Z)=>new RegExp(`^( {0,3}${Z})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:(Z)=>new RegExp(`^ {0,${Math.min(3,Z-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:(Z)=>new RegExp(`^ {0,${Math.min(3,Z-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:(Z)=>new RegExp(`^ {0,${Math.min(3,Z-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:(Z)=>new RegExp(`^ {0,${Math.min(3,Z-1)}}#`),htmlBeginRegex:(Z)=>new RegExp(`^ {0,${Math.min(3,Z-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:(Z)=>new RegExp(`^ {0,${Math.min(3,Z-1)}}>`)},R5=/^(?:[ \t]*(?:\n|$))+/,D5=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,k5=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,O0=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,E5=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,K2=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,$3=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Z3=t($3).replace(/bull/g,K2).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),x5=t($3).replace(/bull/g,K2).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),H2=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,m5=/^[^\n]+/,W2=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,u5=t(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",W2).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),g5=t(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,K2).getRegex(),x0="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",T2=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,f5=t("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))","i").replace("comment",T2).replace("tag",x0).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),q3=t(H2).replace("hr",O0).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",x0).getRegex(),v5=t(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",q3).getRegex(),N2={blockquote:v5,code:D5,def:u5,fences:k5,heading:E5,hr:O0,html:f5,lheading:Z3,list:g5,newline:R5,paragraph:q3,table:c1,text:m5},i2=t("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",O0).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3}\t)[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",x0).getRegex(),h5={...N2,lheading:x5,table:i2,paragraph:t(H2).replace("hr",O0).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",i2).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",x0).getRegex()},p5={...N2,html:t(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",T2).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:c1,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:t(H2).replace("hr",O0).replace("heading",` *#{1,6} *[^
2
- ]`).replace("lheading",Z3).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},c5=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,d5=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,J3=/^( {2,}|\\)\n(?!\s*$)/,r5=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,J0=/[\p{P}\p{S}]/u,m0=/[\s\p{P}\p{S}]/u,O2=/[^\s\p{P}\p{S}]/u,l5=t(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,m0).getRegex(),Q3=/(?!~)[\p{P}\p{S}]/u,i5=/(?!~)[\s\p{P}\p{S}]/u,a5=/(?:[^\s\p{P}\p{S}]|~)/u,o5=t(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",I5?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),Y3=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,s5=t(Y3,"u").replace(/punct/g,J0).getRegex(),t5=t(Y3,"u").replace(/punct/g,Q3).getRegex(),X3="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",n5=t(X3,"gu").replace(/notPunctSpace/g,O2).replace(/punctSpace/g,m0).replace(/punct/g,J0).getRegex(),e5=t(X3,"gu").replace(/notPunctSpace/g,a5).replace(/punctSpace/g,i5).replace(/punct/g,Q3).getRegex(),$8=t("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,O2).replace(/punctSpace/g,m0).replace(/punct/g,J0).getRegex(),Z8=t(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,J0).getRegex(),q8="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",J8=t(q8,"gu").replace(/notPunctSpace/g,O2).replace(/punctSpace/g,m0).replace(/punct/g,J0).getRegex(),Q8=t(/\\(punct)/,"gu").replace(/punct/g,J0).getRegex(),Y8=t(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),X8=t(T2).replace("(?:-->|$)","-->").getRegex(),z8=t("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",X8).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),D0=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,_8=t(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",D0).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),z3=t(/^!?\[(label)\]\[(ref)\]/).replace("label",D0).replace("ref",W2).getRegex(),_3=t(/^!?\[(ref)\](?:\[\])?/).replace("ref",W2).getRegex(),G8=t("reflink|nolink(?!\\()","g").replace("reflink",z3).replace("nolink",_3).getRegex(),a2=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,B2={_backpedal:c1,anyPunctuation:Q8,autolink:Y8,blockSkip:o5,br:J3,code:d5,del:c1,delLDelim:c1,delRDelim:c1,emStrongLDelim:s5,emStrongRDelimAst:n5,emStrongRDelimUnd:$8,escape:c5,link:_8,nolink:_3,punctuation:l5,reflink:z3,reflinkSearch:G8,tag:z8,text:r5,url:c1},U8={...B2,link:t(/^!?\[(label)\]\((.*?)\)/).replace("label",D0).getRegex(),reflink:t(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",D0).getRegex()},G2={...B2,emStrongRDelimAst:e5,emStrongLDelim:t5,delLDelim:Z8,delRDelim:J8,url:t(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",a2).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:t(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",a2).getRegex()},K8={...G2,br:t(J3).replace("{2,}","*").getRegex(),text:t(G2.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},R0={normal:N2,gfm:h5,pedantic:p5},W0={normal:B2,gfm:G2,breaks:K8,pedantic:U8},H8={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},o2=(Z)=>H8[Z];function y1(Z,$){if($){if(K1.escapeTest.test(Z))return Z.replace(K1.escapeReplace,o2)}else if(K1.escapeTestNoEncode.test(Z))return Z.replace(K1.escapeReplaceNoEncode,o2);return Z}function s2(Z){try{Z=encodeURI(Z).replace(K1.percentDecode,"%")}catch{return null}return Z}function t2(Z,$){let q=Z.replace(K1.findPipe,(Y,X,G)=>{let z=!1,_=X;for(;--_>=0&&G[_]==="\\";)z=!z;return z?"|":" |"}),Q=q.split(K1.splitPipe),J=0;if(Q[0].trim()||Q.shift(),Q.length>0&&!Q.at(-1)?.trim()&&Q.pop(),$)if(Q.length>$)Q.splice($);else for(;Q.length<$;)Q.push("");for(;J<Q.length;J++)Q[J]=Q[J].trim().replace(K1.slashPipe,"|");return Q}function T0(Z,$,q){let Q=Z.length;if(Q===0)return"";let J=0;for(;J<Q;){let Y=Z.charAt(Q-J-1);if(Y===$&&!q)J++;else if(Y!==$&&q)J++;else break}return Z.slice(0,Q-J)}function W8(Z,$){if(Z.indexOf($[1])===-1)return-1;let q=0;for(let Q=0;Q<Z.length;Q++)if(Z[Q]==="\\")Q++;else if(Z[Q]===$[0])q++;else if(Z[Q]===$[1]&&(q--,q<0))return Q;return q>0?-2:-1}function T8(Z,$=0){let q=$,Q="";for(let J of Z)if(J==="\t"){let Y=4-q%4;Q+=" ".repeat(Y),q+=Y}else Q+=J,q++;return Q}function n2(Z,$,q,Q,J){let Y=$.href,X=$.title||null,G=Z[1].replace(J.other.outputLinkReplace,"$1");Q.state.inLink=!0;let z={type:Z[0].charAt(0)==="!"?"image":"link",raw:q,href:Y,title:X,text:G,tokens:Q.inlineTokens(G)};return Q.state.inLink=!1,z}function N8(Z,$,q){let Q=Z.match(q.other.indentCodeCompensation);if(Q===null)return $;let J=Q[1];return $.split(`
1
+ import v1,{useEffect as P1,useLayoutEffect as w6,useState as q1,useCallback as R0,useRef as h1,createContext as j5,useMemo as M5}from"react";import{createRoot as A6}from"react-dom/client";function H2(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var l1=H2();function e2(Z){l1=Z}var d1={exec:()=>null};function t(Z,$=""){let q=typeof Z=="string"?Z:Z.source,Q={replace:(J,Y)=>{let X=typeof Y=="string"?Y:Y.source;return X=X.replace(K1.caret,"$1"),q=q.replace(J,X),Q},getRegex:()=>new RegExp(q,$)};return Q}var R5=(()=>{try{return!!new RegExp("(?<=1)(?<!1)")}catch{return!1}})(),K1={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:(Z)=>new RegExp(`^( {0,3}${Z})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:(Z)=>new RegExp(`^ {0,${Math.min(3,Z-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:(Z)=>new RegExp(`^ {0,${Math.min(3,Z-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:(Z)=>new RegExp(`^ {0,${Math.min(3,Z-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:(Z)=>new RegExp(`^ {0,${Math.min(3,Z-1)}}#`),htmlBeginRegex:(Z)=>new RegExp(`^ {0,${Math.min(3,Z-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:(Z)=>new RegExp(`^ {0,${Math.min(3,Z-1)}}>`)},D5=/^(?:[ \t]*(?:\n|$))+/,k5=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,E5=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,B0=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,m5=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,W2=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,$3=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Z3=t($3).replace(/bull/g,W2).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),x5=t($3).replace(/bull/g,W2).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),T2=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,u5=/^[^\n]+/,N2=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,g5=t(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",N2).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),f5=t(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,W2).getRegex(),u0="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",O2=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,v5=t("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))","i").replace("comment",O2).replace("tag",u0).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),q3=t(T2).replace("hr",B0).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",u0).getRegex(),h5=t(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",q3).getRegex(),B2={blockquote:h5,code:k5,def:g5,fences:E5,heading:m5,hr:B0,html:v5,lheading:Z3,list:f5,newline:D5,paragraph:q3,table:d1,text:u5},i2=t("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",B0).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3}\t)[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",u0).getRegex(),p5={...B2,lheading:x5,table:i2,paragraph:t(T2).replace("hr",B0).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",i2).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",u0).getRegex()},c5={...B2,html:t(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",O2).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:d1,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:t(T2).replace("hr",B0).replace("heading",` *#{1,6} *[^
2
+ ]`).replace("lheading",Z3).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},d5=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,r5=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,J3=/^( {2,}|\\)\n(?!\s*$)/,l5=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,Q0=/[\p{P}\p{S}]/u,g0=/[\s\p{P}\p{S}]/u,F2=/[^\s\p{P}\p{S}]/u,i5=t(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,g0).getRegex(),Q3=/(?!~)[\p{P}\p{S}]/u,a5=/(?!~)[\s\p{P}\p{S}]/u,o5=/(?:[^\s\p{P}\p{S}]|~)/u,s5=t(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",R5?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),Y3=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,t5=t(Y3,"u").replace(/punct/g,Q0).getRegex(),n5=t(Y3,"u").replace(/punct/g,Q3).getRegex(),X3="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",e5=t(X3,"gu").replace(/notPunctSpace/g,F2).replace(/punctSpace/g,g0).replace(/punct/g,Q0).getRegex(),$8=t(X3,"gu").replace(/notPunctSpace/g,o5).replace(/punctSpace/g,a5).replace(/punct/g,Q3).getRegex(),Z8=t("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,F2).replace(/punctSpace/g,g0).replace(/punct/g,Q0).getRegex(),q8=t(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,Q0).getRegex(),J8="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",Q8=t(J8,"gu").replace(/notPunctSpace/g,F2).replace(/punctSpace/g,g0).replace(/punct/g,Q0).getRegex(),Y8=t(/\\(punct)/,"gu").replace(/punct/g,Q0).getRegex(),X8=t(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),z8=t(O2).replace("(?:-->|$)","-->").getRegex(),_8=t("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",z8).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),E0=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,G8=t(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",E0).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),z3=t(/^!?\[(label)\]\[(ref)\]/).replace("label",E0).replace("ref",N2).getRegex(),_3=t(/^!?\[(ref)\](?:\[\])?/).replace("ref",N2).getRegex(),U8=t("reflink|nolink(?!\\()","g").replace("reflink",z3).replace("nolink",_3).getRegex(),a2=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,L2={_backpedal:d1,anyPunctuation:Y8,autolink:X8,blockSkip:s5,br:J3,code:r5,del:d1,delLDelim:d1,delRDelim:d1,emStrongLDelim:t5,emStrongRDelimAst:e5,emStrongRDelimUnd:Z8,escape:d5,link:G8,nolink:_3,punctuation:i5,reflink:z3,reflinkSearch:U8,tag:_8,text:l5,url:d1},K8={...L2,link:t(/^!?\[(label)\]\((.*?)\)/).replace("label",E0).getRegex(),reflink:t(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",E0).getRegex()},K2={...L2,emStrongRDelimAst:$8,emStrongLDelim:n5,delLDelim:q8,delRDelim:Q8,url:t(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",a2).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:t(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",a2).getRegex()},H8={...K2,br:t(J3).replace("{2,}","*").getRegex(),text:t(K2.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},k0={normal:B2,gfm:p5,pedantic:c5},T0={normal:L2,gfm:K2,breaks:H8,pedantic:K8},W8={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},o2=(Z)=>W8[Z];function S1(Z,$){if($){if(K1.escapeTest.test(Z))return Z.replace(K1.escapeReplace,o2)}else if(K1.escapeTestNoEncode.test(Z))return Z.replace(K1.escapeReplaceNoEncode,o2);return Z}function s2(Z){try{Z=encodeURI(Z).replace(K1.percentDecode,"%")}catch{return null}return Z}function t2(Z,$){let q=Z.replace(K1.findPipe,(Y,X,G)=>{let z=!1,_=X;for(;--_>=0&&G[_]==="\\";)z=!z;return z?"|":" |"}),Q=q.split(K1.splitPipe),J=0;if(Q[0].trim()||Q.shift(),Q.length>0&&!Q.at(-1)?.trim()&&Q.pop(),$)if(Q.length>$)Q.splice($);else for(;Q.length<$;)Q.push("");for(;J<Q.length;J++)Q[J]=Q[J].trim().replace(K1.slashPipe,"|");return Q}function N0(Z,$,q){let Q=Z.length;if(Q===0)return"";let J=0;for(;J<Q;){let Y=Z.charAt(Q-J-1);if(Y===$&&!q)J++;else if(Y!==$&&q)J++;else break}return Z.slice(0,Q-J)}function T8(Z,$){if(Z.indexOf($[1])===-1)return-1;let q=0;for(let Q=0;Q<Z.length;Q++)if(Z[Q]==="\\")Q++;else if(Z[Q]===$[0])q++;else if(Z[Q]===$[1]&&(q--,q<0))return Q;return q>0?-2:-1}function N8(Z,$=0){let q=$,Q="";for(let J of Z)if(J==="\t"){let Y=4-q%4;Q+=" ".repeat(Y),q+=Y}else Q+=J,q++;return Q}function n2(Z,$,q,Q,J){let Y=$.href,X=$.title||null,G=Z[1].replace(J.other.outputLinkReplace,"$1");Q.state.inLink=!0;let z={type:Z[0].charAt(0)==="!"?"image":"link",raw:q,href:Y,title:X,text:G,tokens:Q.inlineTokens(G)};return Q.state.inLink=!1,z}function O8(Z,$,q){let Q=Z.match(q.other.indentCodeCompensation);if(Q===null)return $;let J=Q[1];return $.split(`
3
3
  `).map((Y)=>{let X=Y.match(q.other.beginningSpace);if(X===null)return Y;let[G]=X;return G.length>=J.length?Y.slice(J.length):Y}).join(`
4
- `)}var k0=class{options;rules;lexer;constructor(Z){this.options=Z||r1}space(Z){let $=this.rules.block.newline.exec(Z);if($&&$[0].length>0)return{type:"space",raw:$[0]}}code(Z){let $=this.rules.block.code.exec(Z);if($){let q=$[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:$[0],codeBlockStyle:"indented",text:this.options.pedantic?q:T0(q,`
5
- `)}}}fences(Z){let $=this.rules.block.fences.exec(Z);if($){let q=$[0],Q=N8(q,$[3]||"",this.rules);return{type:"code",raw:q,lang:$[2]?$[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):$[2],text:Q}}}heading(Z){let $=this.rules.block.heading.exec(Z);if($){let q=$[2].trim();if(this.rules.other.endingHash.test(q)){let Q=T0(q,"#");(this.options.pedantic||!Q||this.rules.other.endingSpaceChar.test(Q))&&(q=Q.trim())}return{type:"heading",raw:$[0],depth:$[1].length,text:q,tokens:this.lexer.inline(q)}}}hr(Z){let $=this.rules.block.hr.exec(Z);if($)return{type:"hr",raw:T0($[0],`
6
- `)}}blockquote(Z){let $=this.rules.block.blockquote.exec(Z);if($){let q=T0($[0],`
4
+ `)}var m0=class{options;rules;lexer;constructor(Z){this.options=Z||l1}space(Z){let $=this.rules.block.newline.exec(Z);if($&&$[0].length>0)return{type:"space",raw:$[0]}}code(Z){let $=this.rules.block.code.exec(Z);if($){let q=$[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:$[0],codeBlockStyle:"indented",text:this.options.pedantic?q:N0(q,`
5
+ `)}}}fences(Z){let $=this.rules.block.fences.exec(Z);if($){let q=$[0],Q=O8(q,$[3]||"",this.rules);return{type:"code",raw:q,lang:$[2]?$[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):$[2],text:Q}}}heading(Z){let $=this.rules.block.heading.exec(Z);if($){let q=$[2].trim();if(this.rules.other.endingHash.test(q)){let Q=N0(q,"#");(this.options.pedantic||!Q||this.rules.other.endingSpaceChar.test(Q))&&(q=Q.trim())}return{type:"heading",raw:$[0],depth:$[1].length,text:q,tokens:this.lexer.inline(q)}}}hr(Z){let $=this.rules.block.hr.exec(Z);if($)return{type:"hr",raw:N0($[0],`
6
+ `)}}blockquote(Z){let $=this.rules.block.blockquote.exec(Z);if($){let q=N0($[0],`
7
7
  `).split(`
8
8
  `),Q="",J="",Y=[];for(;q.length>0;){let X=!1,G=[],z;for(z=0;z<q.length;z++)if(this.rules.other.blockquoteStart.test(q[z]))G.push(q[z]),X=!0;else if(!X)G.push(q[z]);else break;q=q.slice(z);let _=G.join(`
9
9
  `),H=_.replace(this.rules.other.blockquoteSetextReplace,`
@@ -14,16 +14,16 @@ ${H}`:H;let U=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTo
14
14
  `),F=this.blockquote(K);Y[Y.length-1]=F,Q=Q.substring(0,Q.length-W.raw.length)+F.raw,J=J.substring(0,J.length-W.text.length)+F.text;break}else if(T?.type==="list"){let W=T,K=W.raw+`
15
15
  `+q.join(`
16
16
  `),F=this.list(K);Y[Y.length-1]=F,Q=Q.substring(0,Q.length-T.raw.length)+F.raw,J=J.substring(0,J.length-W.raw.length)+F.raw,q=K.substring(Y.at(-1).raw.length).split(`
17
- `);continue}}return{type:"blockquote",raw:Q,tokens:Y,text:J}}}list(Z){let $=this.rules.block.list.exec(Z);if($){let q=$[1].trim(),Q=q.length>1,J={type:"list",raw:"",ordered:Q,start:Q?+q.slice(0,-1):"",loose:!1,items:[]};q=Q?`\\d{1,9}\\${q.slice(-1)}`:`\\${q}`,this.options.pedantic&&(q=Q?q:"[*+-]");let Y=this.rules.other.listItemRegex(q),X=!1;for(;Z;){let z=!1,_="",H="";if(!($=Y.exec(Z))||this.rules.block.hr.test(Z))break;_=$[0],Z=Z.substring(_.length);let U=T8($[2].split(`
17
+ `);continue}}return{type:"blockquote",raw:Q,tokens:Y,text:J}}}list(Z){let $=this.rules.block.list.exec(Z);if($){let q=$[1].trim(),Q=q.length>1,J={type:"list",raw:"",ordered:Q,start:Q?+q.slice(0,-1):"",loose:!1,items:[]};q=Q?`\\d{1,9}\\${q.slice(-1)}`:`\\${q}`,this.options.pedantic&&(q=Q?q:"[*+-]");let Y=this.rules.other.listItemRegex(q),X=!1;for(;Z;){let z=!1,_="",H="";if(!($=Y.exec(Z))||this.rules.block.hr.test(Z))break;_=$[0],Z=Z.substring(_.length);let U=N8($[2].split(`
18
18
  `,1)[0],$[1].length),T=Z.split(`
19
19
  `,1)[0],W=!U.trim(),K=0;if(this.options.pedantic?(K=2,H=U.trimStart()):W?K=$[1].length+1:(K=U.search(this.rules.other.nonSpaceChar),K=K>4?1:K,H=U.slice(K),K+=$[1].length),W&&this.rules.other.blankLine.test(T)&&(_+=T+`
20
20
  `,Z=Z.substring(T.length+1),z=!0),!z){let F=this.rules.other.nextBulletRegex(K),N=this.rules.other.hrRegex(K),y=this.rules.other.fencesBeginRegex(K),O=this.rules.other.headingBeginRegex(K),D=this.rules.other.htmlBeginRegex(K),S=this.rules.other.blockquoteBeginRegex(K);for(;Z;){let M=Z.split(`
21
- `,1)[0],w;if(T=M,this.options.pedantic?(T=T.replace(this.rules.other.listReplaceNesting," "),w=T):w=T.replace(this.rules.other.tabCharGlobal," "),y.test(T)||O.test(T)||D.test(T)||S.test(T)||F.test(T)||N.test(T))break;if(w.search(this.rules.other.nonSpaceChar)>=K||!T.trim())H+=`
22
- `+w.slice(K);else{if(W||U.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||y.test(U)||O.test(U)||N.test(U))break;H+=`
21
+ `,1)[0],b;if(T=M,this.options.pedantic?(T=T.replace(this.rules.other.listReplaceNesting," "),b=T):b=T.replace(this.rules.other.tabCharGlobal," "),y.test(T)||O.test(T)||D.test(T)||S.test(T)||F.test(T)||N.test(T))break;if(b.search(this.rules.other.nonSpaceChar)>=K||!T.trim())H+=`
22
+ `+b.slice(K);else{if(W||U.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||y.test(U)||O.test(U)||N.test(U))break;H+=`
23
23
  `+T}W=!T.trim(),_+=M+`
24
- `,Z=Z.substring(M.length+1),U=w.slice(K)}}J.loose||(X?J.loose=!0:this.rules.other.doubleBlankLine.test(_)&&(X=!0)),J.items.push({type:"list_item",raw:_,task:!!this.options.gfm&&this.rules.other.listIsTask.test(H),loose:!1,text:H,tokens:[]}),J.raw+=_}let G=J.items.at(-1);if(G)G.raw=G.raw.trimEnd(),G.text=G.text.trimEnd();else return;J.raw=J.raw.trimEnd();for(let z of J.items){if(this.lexer.state.top=!1,z.tokens=this.lexer.blockTokens(z.text,[]),z.task){if(z.text=z.text.replace(this.rules.other.listReplaceTask,""),z.tokens[0]?.type==="text"||z.tokens[0]?.type==="paragraph"){z.tokens[0].raw=z.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),z.tokens[0].text=z.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let H=this.lexer.inlineQueue.length-1;H>=0;H--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[H].src)){this.lexer.inlineQueue[H].src=this.lexer.inlineQueue[H].src.replace(this.rules.other.listReplaceTask,"");break}}let _=this.rules.other.listTaskCheckbox.exec(z.raw);if(_){let H={type:"checkbox",raw:_[0]+" ",checked:_[0]!=="[ ]"};z.checked=H.checked,J.loose?z.tokens[0]&&["paragraph","text"].includes(z.tokens[0].type)&&"tokens"in z.tokens[0]&&z.tokens[0].tokens?(z.tokens[0].raw=H.raw+z.tokens[0].raw,z.tokens[0].text=H.raw+z.tokens[0].text,z.tokens[0].tokens.unshift(H)):z.tokens.unshift({type:"paragraph",raw:H.raw,text:H.raw,tokens:[H]}):z.tokens.unshift(H)}}if(!J.loose){let _=z.tokens.filter((U)=>U.type==="space"),H=_.length>0&&_.some((U)=>this.rules.other.anyLine.test(U.raw));J.loose=H}}if(J.loose)for(let z of J.items){z.loose=!0;for(let _ of z.tokens)_.type==="text"&&(_.type="paragraph")}return J}}html(Z){let $=this.rules.block.html.exec(Z);if($)return{type:"html",block:!0,raw:$[0],pre:$[1]==="pre"||$[1]==="script"||$[1]==="style",text:$[0]}}def(Z){let $=this.rules.block.def.exec(Z);if($){let q=$[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),Q=$[2]?$[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",J=$[3]?$[3].substring(1,$[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):$[3];return{type:"def",tag:q,raw:$[0],href:Q,title:J}}}table(Z){let $=this.rules.block.table.exec(Z);if(!$||!this.rules.other.tableDelimiter.test($[2]))return;let q=t2($[1]),Q=$[2].replace(this.rules.other.tableAlignChars,"").split("|"),J=$[3]?.trim()?$[3].replace(this.rules.other.tableRowBlankLine,"").split(`
24
+ `,Z=Z.substring(M.length+1),U=b.slice(K)}}J.loose||(X?J.loose=!0:this.rules.other.doubleBlankLine.test(_)&&(X=!0)),J.items.push({type:"list_item",raw:_,task:!!this.options.gfm&&this.rules.other.listIsTask.test(H),loose:!1,text:H,tokens:[]}),J.raw+=_}let G=J.items.at(-1);if(G)G.raw=G.raw.trimEnd(),G.text=G.text.trimEnd();else return;J.raw=J.raw.trimEnd();for(let z of J.items){if(this.lexer.state.top=!1,z.tokens=this.lexer.blockTokens(z.text,[]),z.task){if(z.text=z.text.replace(this.rules.other.listReplaceTask,""),z.tokens[0]?.type==="text"||z.tokens[0]?.type==="paragraph"){z.tokens[0].raw=z.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),z.tokens[0].text=z.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let H=this.lexer.inlineQueue.length-1;H>=0;H--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[H].src)){this.lexer.inlineQueue[H].src=this.lexer.inlineQueue[H].src.replace(this.rules.other.listReplaceTask,"");break}}let _=this.rules.other.listTaskCheckbox.exec(z.raw);if(_){let H={type:"checkbox",raw:_[0]+" ",checked:_[0]!=="[ ]"};z.checked=H.checked,J.loose?z.tokens[0]&&["paragraph","text"].includes(z.tokens[0].type)&&"tokens"in z.tokens[0]&&z.tokens[0].tokens?(z.tokens[0].raw=H.raw+z.tokens[0].raw,z.tokens[0].text=H.raw+z.tokens[0].text,z.tokens[0].tokens.unshift(H)):z.tokens.unshift({type:"paragraph",raw:H.raw,text:H.raw,tokens:[H]}):z.tokens.unshift(H)}}if(!J.loose){let _=z.tokens.filter((U)=>U.type==="space"),H=_.length>0&&_.some((U)=>this.rules.other.anyLine.test(U.raw));J.loose=H}}if(J.loose)for(let z of J.items){z.loose=!0;for(let _ of z.tokens)_.type==="text"&&(_.type="paragraph")}return J}}html(Z){let $=this.rules.block.html.exec(Z);if($)return{type:"html",block:!0,raw:$[0],pre:$[1]==="pre"||$[1]==="script"||$[1]==="style",text:$[0]}}def(Z){let $=this.rules.block.def.exec(Z);if($){let q=$[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),Q=$[2]?$[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",J=$[3]?$[3].substring(1,$[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):$[3];return{type:"def",tag:q,raw:$[0],href:Q,title:J}}}table(Z){let $=this.rules.block.table.exec(Z);if(!$||!this.rules.other.tableDelimiter.test($[2]))return;let q=t2($[1]),Q=$[2].replace(this.rules.other.tableAlignChars,"").split("|"),J=$[3]?.trim()?$[3].replace(this.rules.other.tableRowBlankLine,"").split(`
25
25
  `):[],Y={type:"table",raw:$[0],header:[],align:[],rows:[]};if(q.length===Q.length){for(let X of Q)this.rules.other.tableAlignRight.test(X)?Y.align.push("right"):this.rules.other.tableAlignCenter.test(X)?Y.align.push("center"):this.rules.other.tableAlignLeft.test(X)?Y.align.push("left"):Y.align.push(null);for(let X=0;X<q.length;X++)Y.header.push({text:q[X],tokens:this.lexer.inline(q[X]),header:!0,align:Y.align[X]});for(let X of J)Y.rows.push(t2(X,Y.header.length).map((G,z)=>({text:G,tokens:this.lexer.inline(G),header:!1,align:Y.align[z]})));return Y}}lheading(Z){let $=this.rules.block.lheading.exec(Z);if($){let q=$[1].trim();return{type:"heading",raw:$[0],depth:$[2].charAt(0)==="="?1:2,text:q,tokens:this.lexer.inline(q)}}}paragraph(Z){let $=this.rules.block.paragraph.exec(Z);if($){let q=$[1].charAt($[1].length-1)===`
26
- `?$[1].slice(0,-1):$[1];return{type:"paragraph",raw:$[0],text:q,tokens:this.lexer.inline(q)}}}text(Z){let $=this.rules.block.text.exec(Z);if($)return{type:"text",raw:$[0],text:$[0],tokens:this.lexer.inline($[0])}}escape(Z){let $=this.rules.inline.escape.exec(Z);if($)return{type:"escape",raw:$[0],text:$[1]}}tag(Z){let $=this.rules.inline.tag.exec(Z);if($)return!this.lexer.state.inLink&&this.rules.other.startATag.test($[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test($[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test($[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test($[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:$[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:$[0]}}link(Z){let $=this.rules.inline.link.exec(Z);if($){let q=$[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(q)){if(!this.rules.other.endAngleBracket.test(q))return;let Y=T0(q.slice(0,-1),"\\");if((q.length-Y.length)%2===0)return}else{let Y=W8($[2],"()");if(Y===-2)return;if(Y>-1){let X=($[0].indexOf("!")===0?5:4)+$[1].length+Y;$[2]=$[2].substring(0,Y),$[0]=$[0].substring(0,X).trim(),$[3]=""}}let Q=$[2],J="";if(this.options.pedantic){let Y=this.rules.other.pedanticHrefTitle.exec(Q);Y&&(Q=Y[1],J=Y[3])}else J=$[3]?$[3].slice(1,-1):"";return Q=Q.trim(),this.rules.other.startAngleBracket.test(Q)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(q)?Q=Q.slice(1):Q=Q.slice(1,-1)),n2($,{href:Q&&Q.replace(this.rules.inline.anyPunctuation,"$1"),title:J&&J.replace(this.rules.inline.anyPunctuation,"$1")},$[0],this.lexer,this.rules)}}reflink(Z,$){let q;if((q=this.rules.inline.reflink.exec(Z))||(q=this.rules.inline.nolink.exec(Z))){let Q=(q[2]||q[1]).replace(this.rules.other.multipleSpaceGlobal," "),J=$[Q.toLowerCase()];if(!J){let Y=q[0].charAt(0);return{type:"text",raw:Y,text:Y}}return n2(q,J,q[0],this.lexer,this.rules)}}emStrong(Z,$,q=""){let Q=this.rules.inline.emStrongLDelim.exec(Z);if(!Q||!Q[1]&&!Q[2]&&!Q[3]&&!Q[4]||Q[4]&&q.match(this.rules.other.unicodeAlphaNumeric))return;if(!(Q[1]||Q[3])||!q||this.rules.inline.punctuation.exec(q)){let J=[...Q[0]].length-1,Y,X,G=J,z=0,_=Q[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(_.lastIndex=0,$=$.slice(-1*Z.length+J);(Q=_.exec($))!==null;){if(Y=Q[1]||Q[2]||Q[3]||Q[4]||Q[5]||Q[6],!Y)continue;if(X=[...Y].length,Q[3]||Q[4]){G+=X;continue}else if((Q[5]||Q[6])&&J%3&&!((J+X)%3)){z+=X;continue}if(G-=X,G>0)continue;X=Math.min(X,X+G+z);let H=[...Q[0]][0].length,U=Z.slice(0,J+Q.index+H+X);if(Math.min(J,X)%2){let W=U.slice(1,-1);return{type:"em",raw:U,text:W,tokens:this.lexer.inlineTokens(W)}}let T=U.slice(2,-2);return{type:"strong",raw:U,text:T,tokens:this.lexer.inlineTokens(T)}}}}codespan(Z){let $=this.rules.inline.code.exec(Z);if($){let q=$[2].replace(this.rules.other.newLineCharGlobal," "),Q=this.rules.other.nonSpaceChar.test(q),J=this.rules.other.startingSpaceChar.test(q)&&this.rules.other.endingSpaceChar.test(q);return Q&&J&&(q=q.substring(1,q.length-1)),{type:"codespan",raw:$[0],text:q}}}br(Z){let $=this.rules.inline.br.exec(Z);if($)return{type:"br",raw:$[0]}}del(Z,$,q=""){let Q=this.rules.inline.delLDelim.exec(Z);if(!Q)return;if(!Q[1]||!q||this.rules.inline.punctuation.exec(q)){let J=[...Q[0]].length-1,Y,X,G=J,z=this.rules.inline.delRDelim;for(z.lastIndex=0,$=$.slice(-1*Z.length+J);(Q=z.exec($))!==null;){if(Y=Q[1]||Q[2]||Q[3]||Q[4]||Q[5]||Q[6],!Y||(X=[...Y].length,X!==J))continue;if(Q[3]||Q[4]){G+=X;continue}if(G-=X,G>0)continue;X=Math.min(X,X+G);let _=[...Q[0]][0].length,H=Z.slice(0,J+Q.index+_+X),U=H.slice(J,-J);return{type:"del",raw:H,text:U,tokens:this.lexer.inlineTokens(U)}}}}autolink(Z){let $=this.rules.inline.autolink.exec(Z);if($){let q,Q;return $[2]==="@"?(q=$[1],Q="mailto:"+q):(q=$[1],Q=q),{type:"link",raw:$[0],text:q,href:Q,tokens:[{type:"text",raw:q,text:q}]}}}url(Z){let $;if($=this.rules.inline.url.exec(Z)){let q,Q;if($[2]==="@")q=$[0],Q="mailto:"+q;else{let J;do J=$[0],$[0]=this.rules.inline._backpedal.exec($[0])?.[0]??"";while(J!==$[0]);q=$[0],$[1]==="www."?Q="http://"+$[0]:Q=$[0]}return{type:"link",raw:$[0],text:q,href:Q,tokens:[{type:"text",raw:q,text:q}]}}}inlineText(Z){let $=this.rules.inline.text.exec(Z);if($){let q=this.lexer.state.inRawBlock;return{type:"text",raw:$[0],text:$[0],escaped:q}}}},N1=class Z{tokens;options;state;inlineQueue;tokenizer;constructor($){this.tokens=[],this.tokens.links=Object.create(null),this.options=$||r1,this.options.tokenizer=this.options.tokenizer||new k0,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let q={other:K1,block:R0.normal,inline:W0.normal};this.options.pedantic?(q.block=R0.pedantic,q.inline=W0.pedantic):this.options.gfm&&(q.block=R0.gfm,this.options.breaks?q.inline=W0.breaks:q.inline=W0.gfm),this.tokenizer.rules=q}static get rules(){return{block:R0,inline:W0}}static lex($,q){return new Z(q).lex($)}static lexInline($,q){return new Z(q).inlineTokens($)}lex($){$=$.replace(K1.carriageReturn,`
26
+ `?$[1].slice(0,-1):$[1];return{type:"paragraph",raw:$[0],text:q,tokens:this.lexer.inline(q)}}}text(Z){let $=this.rules.block.text.exec(Z);if($)return{type:"text",raw:$[0],text:$[0],tokens:this.lexer.inline($[0])}}escape(Z){let $=this.rules.inline.escape.exec(Z);if($)return{type:"escape",raw:$[0],text:$[1]}}tag(Z){let $=this.rules.inline.tag.exec(Z);if($)return!this.lexer.state.inLink&&this.rules.other.startATag.test($[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test($[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test($[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test($[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:$[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:$[0]}}link(Z){let $=this.rules.inline.link.exec(Z);if($){let q=$[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(q)){if(!this.rules.other.endAngleBracket.test(q))return;let Y=N0(q.slice(0,-1),"\\");if((q.length-Y.length)%2===0)return}else{let Y=T8($[2],"()");if(Y===-2)return;if(Y>-1){let X=($[0].indexOf("!")===0?5:4)+$[1].length+Y;$[2]=$[2].substring(0,Y),$[0]=$[0].substring(0,X).trim(),$[3]=""}}let Q=$[2],J="";if(this.options.pedantic){let Y=this.rules.other.pedanticHrefTitle.exec(Q);Y&&(Q=Y[1],J=Y[3])}else J=$[3]?$[3].slice(1,-1):"";return Q=Q.trim(),this.rules.other.startAngleBracket.test(Q)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(q)?Q=Q.slice(1):Q=Q.slice(1,-1)),n2($,{href:Q&&Q.replace(this.rules.inline.anyPunctuation,"$1"),title:J&&J.replace(this.rules.inline.anyPunctuation,"$1")},$[0],this.lexer,this.rules)}}reflink(Z,$){let q;if((q=this.rules.inline.reflink.exec(Z))||(q=this.rules.inline.nolink.exec(Z))){let Q=(q[2]||q[1]).replace(this.rules.other.multipleSpaceGlobal," "),J=$[Q.toLowerCase()];if(!J){let Y=q[0].charAt(0);return{type:"text",raw:Y,text:Y}}return n2(q,J,q[0],this.lexer,this.rules)}}emStrong(Z,$,q=""){let Q=this.rules.inline.emStrongLDelim.exec(Z);if(!Q||!Q[1]&&!Q[2]&&!Q[3]&&!Q[4]||Q[4]&&q.match(this.rules.other.unicodeAlphaNumeric))return;if(!(Q[1]||Q[3])||!q||this.rules.inline.punctuation.exec(q)){let J=[...Q[0]].length-1,Y,X,G=J,z=0,_=Q[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(_.lastIndex=0,$=$.slice(-1*Z.length+J);(Q=_.exec($))!==null;){if(Y=Q[1]||Q[2]||Q[3]||Q[4]||Q[5]||Q[6],!Y)continue;if(X=[...Y].length,Q[3]||Q[4]){G+=X;continue}else if((Q[5]||Q[6])&&J%3&&!((J+X)%3)){z+=X;continue}if(G-=X,G>0)continue;X=Math.min(X,X+G+z);let H=[...Q[0]][0].length,U=Z.slice(0,J+Q.index+H+X);if(Math.min(J,X)%2){let W=U.slice(1,-1);return{type:"em",raw:U,text:W,tokens:this.lexer.inlineTokens(W)}}let T=U.slice(2,-2);return{type:"strong",raw:U,text:T,tokens:this.lexer.inlineTokens(T)}}}}codespan(Z){let $=this.rules.inline.code.exec(Z);if($){let q=$[2].replace(this.rules.other.newLineCharGlobal," "),Q=this.rules.other.nonSpaceChar.test(q),J=this.rules.other.startingSpaceChar.test(q)&&this.rules.other.endingSpaceChar.test(q);return Q&&J&&(q=q.substring(1,q.length-1)),{type:"codespan",raw:$[0],text:q}}}br(Z){let $=this.rules.inline.br.exec(Z);if($)return{type:"br",raw:$[0]}}del(Z,$,q=""){let Q=this.rules.inline.delLDelim.exec(Z);if(!Q)return;if(!Q[1]||!q||this.rules.inline.punctuation.exec(q)){let J=[...Q[0]].length-1,Y,X,G=J,z=this.rules.inline.delRDelim;for(z.lastIndex=0,$=$.slice(-1*Z.length+J);(Q=z.exec($))!==null;){if(Y=Q[1]||Q[2]||Q[3]||Q[4]||Q[5]||Q[6],!Y||(X=[...Y].length,X!==J))continue;if(Q[3]||Q[4]){G+=X;continue}if(G-=X,G>0)continue;X=Math.min(X,X+G);let _=[...Q[0]][0].length,H=Z.slice(0,J+Q.index+_+X),U=H.slice(J,-J);return{type:"del",raw:H,text:U,tokens:this.lexer.inlineTokens(U)}}}}autolink(Z){let $=this.rules.inline.autolink.exec(Z);if($){let q,Q;return $[2]==="@"?(q=$[1],Q="mailto:"+q):(q=$[1],Q=q),{type:"link",raw:$[0],text:q,href:Q,tokens:[{type:"text",raw:q,text:q}]}}}url(Z){let $;if($=this.rules.inline.url.exec(Z)){let q,Q;if($[2]==="@")q=$[0],Q="mailto:"+q;else{let J;do J=$[0],$[0]=this.rules.inline._backpedal.exec($[0])?.[0]??"";while(J!==$[0]);q=$[0],$[1]==="www."?Q="http://"+$[0]:Q=$[0]}return{type:"link",raw:$[0],text:q,href:Q,tokens:[{type:"text",raw:q,text:q}]}}}inlineText(Z){let $=this.rules.inline.text.exec(Z);if($){let q=this.lexer.state.inRawBlock;return{type:"text",raw:$[0],text:$[0],escaped:q}}}},O1=class Z{tokens;options;state;inlineQueue;tokenizer;constructor($){this.tokens=[],this.tokens.links=Object.create(null),this.options=$||l1,this.options.tokenizer=this.options.tokenizer||new m0,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let q={other:K1,block:k0.normal,inline:T0.normal};this.options.pedantic?(q.block=k0.pedantic,q.inline=T0.pedantic):this.options.gfm&&(q.block=k0.gfm,this.options.breaks?q.inline=T0.breaks:q.inline=T0.gfm),this.tokenizer.rules=q}static get rules(){return{block:k0,inline:T0}}static lex($,q){return new Z(q).lex($)}static lexInline($,q){return new Z(q).inlineTokens($)}lex($){$=$.replace(K1.carriageReturn,`
27
27
  `),this.blockTokens($,this.tokens);for(let q=0;q<this.inlineQueue.length;q++){let Q=this.inlineQueue[q];this.inlineTokens(Q.src,Q.tokens)}return this.inlineQueue=[],this.tokens}blockTokens($,q=[],Q=!1){for(this.tokenizer.lexer=this,this.options.pedantic&&($=$.replace(K1.tabCharGlobal," ").replace(K1.spaceLine,""));$;){let J;if(this.options.extensions?.block?.some((X)=>(J=X.call({lexer:this},$,q))?($=$.substring(J.raw.length),q.push(J),!0):!1))continue;if(J=this.tokenizer.space($)){$=$.substring(J.raw.length);let X=q.at(-1);J.raw.length===1&&X!==void 0?X.raw+=`
28
28
  `:q.push(J);continue}if(J=this.tokenizer.code($)){$=$.substring(J.raw.length);let X=q.at(-1);X?.type==="paragraph"||X?.type==="text"?(X.raw+=(X.raw.endsWith(`
29
29
  `)?"":`
@@ -37,9 +37,9 @@ ${H}`:H;let U=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTo
37
37
  `+J.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=X.text):q.push(J),Q=Y.length!==$.length,$=$.substring(J.raw.length);continue}if(J=this.tokenizer.text($)){$=$.substring(J.raw.length);let X=q.at(-1);X?.type==="text"?(X.raw+=(X.raw.endsWith(`
38
38
  `)?"":`
39
39
  `)+J.raw,X.text+=`
40
- `+J.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=X.text):q.push(J);continue}if($){let X="Infinite loop on byte: "+$.charCodeAt(0);if(this.options.silent){console.error(X);break}else throw Error(X)}}return this.state.top=!0,q}inline($,q=[]){return this.inlineQueue.push({src:$,tokens:q}),q}inlineTokens($,q=[]){this.tokenizer.lexer=this;let Q=$,J=null;if(this.tokens.links){let z=Object.keys(this.tokens.links);if(z.length>0)for(;(J=this.tokenizer.rules.inline.reflinkSearch.exec(Q))!==null;)z.includes(J[0].slice(J[0].lastIndexOf("[")+1,-1))&&(Q=Q.slice(0,J.index)+"["+"a".repeat(J[0].length-2)+"]"+Q.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(J=this.tokenizer.rules.inline.anyPunctuation.exec(Q))!==null;)Q=Q.slice(0,J.index)+"++"+Q.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let Y;for(;(J=this.tokenizer.rules.inline.blockSkip.exec(Q))!==null;)Y=J[2]?J[2].length:0,Q=Q.slice(0,J.index+Y)+"["+"a".repeat(J[0].length-Y-2)+"]"+Q.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);Q=this.options.hooks?.emStrongMask?.call({lexer:this},Q)??Q;let X=!1,G="";for(;$;){X||(G=""),X=!1;let z;if(this.options.extensions?.inline?.some((H)=>(z=H.call({lexer:this},$,q))?($=$.substring(z.raw.length),q.push(z),!0):!1))continue;if(z=this.tokenizer.escape($)){$=$.substring(z.raw.length),q.push(z);continue}if(z=this.tokenizer.tag($)){$=$.substring(z.raw.length),q.push(z);continue}if(z=this.tokenizer.link($)){$=$.substring(z.raw.length),q.push(z);continue}if(z=this.tokenizer.reflink($,this.tokens.links)){$=$.substring(z.raw.length);let H=q.at(-1);z.type==="text"&&H?.type==="text"?(H.raw+=z.raw,H.text+=z.text):q.push(z);continue}if(z=this.tokenizer.emStrong($,Q,G)){$=$.substring(z.raw.length),q.push(z);continue}if(z=this.tokenizer.codespan($)){$=$.substring(z.raw.length),q.push(z);continue}if(z=this.tokenizer.br($)){$=$.substring(z.raw.length),q.push(z);continue}if(z=this.tokenizer.del($,Q,G)){$=$.substring(z.raw.length),q.push(z);continue}if(z=this.tokenizer.autolink($)){$=$.substring(z.raw.length),q.push(z);continue}if(!this.state.inLink&&(z=this.tokenizer.url($))){$=$.substring(z.raw.length),q.push(z);continue}let _=$;if(this.options.extensions?.startInline){let H=1/0,U=$.slice(1),T;this.options.extensions.startInline.forEach((W)=>{T=W.call({lexer:this},U),typeof T=="number"&&T>=0&&(H=Math.min(H,T))}),H<1/0&&H>=0&&(_=$.substring(0,H+1))}if(z=this.tokenizer.inlineText(_)){$=$.substring(z.raw.length),z.raw.slice(-1)!=="_"&&(G=z.raw.slice(-1)),X=!0;let H=q.at(-1);H?.type==="text"?(H.raw+=z.raw,H.text+=z.text):q.push(z);continue}if($){let H="Infinite loop on byte: "+$.charCodeAt(0);if(this.options.silent){console.error(H);break}else throw Error(H)}}return q}},E0=class{options;parser;constructor(Z){this.options=Z||r1}space(Z){return""}code({text:Z,lang:$,escaped:q}){let Q=($||"").match(K1.notSpaceStart)?.[0],J=Z.replace(K1.endingNewline,"")+`
41
- `;return Q?'<pre><code class="language-'+y1(Q)+'">'+(q?J:y1(J,!0))+`</code></pre>
42
- `:"<pre><code>"+(q?J:y1(J,!0))+`</code></pre>
40
+ `+J.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=X.text):q.push(J);continue}if($){let X="Infinite loop on byte: "+$.charCodeAt(0);if(this.options.silent){console.error(X);break}else throw Error(X)}}return this.state.top=!0,q}inline($,q=[]){return this.inlineQueue.push({src:$,tokens:q}),q}inlineTokens($,q=[]){this.tokenizer.lexer=this;let Q=$,J=null;if(this.tokens.links){let z=Object.keys(this.tokens.links);if(z.length>0)for(;(J=this.tokenizer.rules.inline.reflinkSearch.exec(Q))!==null;)z.includes(J[0].slice(J[0].lastIndexOf("[")+1,-1))&&(Q=Q.slice(0,J.index)+"["+"a".repeat(J[0].length-2)+"]"+Q.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(J=this.tokenizer.rules.inline.anyPunctuation.exec(Q))!==null;)Q=Q.slice(0,J.index)+"++"+Q.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let Y;for(;(J=this.tokenizer.rules.inline.blockSkip.exec(Q))!==null;)Y=J[2]?J[2].length:0,Q=Q.slice(0,J.index+Y)+"["+"a".repeat(J[0].length-Y-2)+"]"+Q.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);Q=this.options.hooks?.emStrongMask?.call({lexer:this},Q)??Q;let X=!1,G="";for(;$;){X||(G=""),X=!1;let z;if(this.options.extensions?.inline?.some((H)=>(z=H.call({lexer:this},$,q))?($=$.substring(z.raw.length),q.push(z),!0):!1))continue;if(z=this.tokenizer.escape($)){$=$.substring(z.raw.length),q.push(z);continue}if(z=this.tokenizer.tag($)){$=$.substring(z.raw.length),q.push(z);continue}if(z=this.tokenizer.link($)){$=$.substring(z.raw.length),q.push(z);continue}if(z=this.tokenizer.reflink($,this.tokens.links)){$=$.substring(z.raw.length);let H=q.at(-1);z.type==="text"&&H?.type==="text"?(H.raw+=z.raw,H.text+=z.text):q.push(z);continue}if(z=this.tokenizer.emStrong($,Q,G)){$=$.substring(z.raw.length),q.push(z);continue}if(z=this.tokenizer.codespan($)){$=$.substring(z.raw.length),q.push(z);continue}if(z=this.tokenizer.br($)){$=$.substring(z.raw.length),q.push(z);continue}if(z=this.tokenizer.del($,Q,G)){$=$.substring(z.raw.length),q.push(z);continue}if(z=this.tokenizer.autolink($)){$=$.substring(z.raw.length),q.push(z);continue}if(!this.state.inLink&&(z=this.tokenizer.url($))){$=$.substring(z.raw.length),q.push(z);continue}let _=$;if(this.options.extensions?.startInline){let H=1/0,U=$.slice(1),T;this.options.extensions.startInline.forEach((W)=>{T=W.call({lexer:this},U),typeof T=="number"&&T>=0&&(H=Math.min(H,T))}),H<1/0&&H>=0&&(_=$.substring(0,H+1))}if(z=this.tokenizer.inlineText(_)){$=$.substring(z.raw.length),z.raw.slice(-1)!=="_"&&(G=z.raw.slice(-1)),X=!0;let H=q.at(-1);H?.type==="text"?(H.raw+=z.raw,H.text+=z.text):q.push(z);continue}if($){let H="Infinite loop on byte: "+$.charCodeAt(0);if(this.options.silent){console.error(H);break}else throw Error(H)}}return q}},x0=class{options;parser;constructor(Z){this.options=Z||l1}space(Z){return""}code({text:Z,lang:$,escaped:q}){let Q=($||"").match(K1.notSpaceStart)?.[0],J=Z.replace(K1.endingNewline,"")+`
41
+ `;return Q?'<pre><code class="language-'+S1(Q)+'">'+(q?J:S1(J,!0))+`</code></pre>
42
+ `:"<pre><code>"+(q?J:S1(J,!0))+`</code></pre>
43
43
  `}blockquote({tokens:Z}){return`<blockquote>
44
44
  ${this.parser.parse(Z)}</blockquote>
45
45
  `}html({text:Z}){return Z}def(Z){return""}heading({tokens:Z,depth:$}){return`<h${$}>${this.parser.parseInline(Z)}</h${$}>
@@ -55,37 +55,37 @@ ${this.parser.parse(Z)}</blockquote>
55
55
  `}tablerow({text:Z}){return`<tr>
56
56
  ${Z}</tr>
57
57
  `}tablecell(Z){let $=this.parser.parseInline(Z.tokens),q=Z.header?"th":"td";return(Z.align?`<${q} align="${Z.align}">`:`<${q}>`)+$+`</${q}>
58
- `}strong({tokens:Z}){return`<strong>${this.parser.parseInline(Z)}</strong>`}em({tokens:Z}){return`<em>${this.parser.parseInline(Z)}</em>`}codespan({text:Z}){return`<code>${y1(Z,!0)}</code>`}br(Z){return"<br>"}del({tokens:Z}){return`<del>${this.parser.parseInline(Z)}</del>`}link({href:Z,title:$,tokens:q}){let Q=this.parser.parseInline(q),J=s2(Z);if(J===null)return Q;Z=J;let Y='<a href="'+Z+'"';return $&&(Y+=' title="'+y1($)+'"'),Y+=">"+Q+"</a>",Y}image({href:Z,title:$,text:q,tokens:Q}){Q&&(q=this.parser.parseInline(Q,this.parser.textRenderer));let J=s2(Z);if(J===null)return y1(q);Z=J;let Y=`<img src="${Z}" alt="${y1(q)}"`;return $&&(Y+=` title="${y1($)}"`),Y+=">",Y}text(Z){return"tokens"in Z&&Z.tokens?this.parser.parseInline(Z.tokens):("escaped"in Z)&&Z.escaped?Z.text:y1(Z.text)}},F2=class{strong({text:Z}){return Z}em({text:Z}){return Z}codespan({text:Z}){return Z}del({text:Z}){return Z}html({text:Z}){return Z}text({text:Z}){return Z}link({text:Z}){return""+Z}image({text:Z}){return""+Z}br(){return""}checkbox({raw:Z}){return Z}},O1=class Z{options;renderer;textRenderer;constructor($){this.options=$||r1,this.options.renderer=this.options.renderer||new E0,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new F2}static parse($,q){return new Z(q).parse($)}static parseInline($,q){return new Z(q).parseInline($)}parse($){this.renderer.parser=this;let q="";for(let Q=0;Q<$.length;Q++){let J=$[Q];if(this.options.extensions?.renderers?.[J.type]){let X=J,G=this.options.extensions.renderers[X.type].call({parser:this},X);if(G!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(X.type)){q+=G||"";continue}}let Y=J;switch(Y.type){case"space":{q+=this.renderer.space(Y);break}case"hr":{q+=this.renderer.hr(Y);break}case"heading":{q+=this.renderer.heading(Y);break}case"code":{q+=this.renderer.code(Y);break}case"table":{q+=this.renderer.table(Y);break}case"blockquote":{q+=this.renderer.blockquote(Y);break}case"list":{q+=this.renderer.list(Y);break}case"checkbox":{q+=this.renderer.checkbox(Y);break}case"html":{q+=this.renderer.html(Y);break}case"def":{q+=this.renderer.def(Y);break}case"paragraph":{q+=this.renderer.paragraph(Y);break}case"text":{q+=this.renderer.text(Y);break}default:{let X='Token with "'+Y.type+'" type was not found.';if(this.options.silent)return console.error(X),"";throw Error(X)}}}return q}parseInline($,q=this.renderer){this.renderer.parser=this;let Q="";for(let J=0;J<$.length;J++){let Y=$[J];if(this.options.extensions?.renderers?.[Y.type]){let G=this.options.extensions.renderers[Y.type].call({parser:this},Y);if(G!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(Y.type)){Q+=G||"";continue}}let X=Y;switch(X.type){case"escape":{Q+=q.text(X);break}case"html":{Q+=q.html(X);break}case"link":{Q+=q.link(X);break}case"image":{Q+=q.image(X);break}case"checkbox":{Q+=q.checkbox(X);break}case"strong":{Q+=q.strong(X);break}case"em":{Q+=q.em(X);break}case"codespan":{Q+=q.codespan(X);break}case"br":{Q+=q.br(X);break}case"del":{Q+=q.del(X);break}case"text":{Q+=q.text(X);break}default:{let G='Token with "'+X.type+'" type was not found.';if(this.options.silent)return console.error(G),"";throw Error(G)}}}return Q}},N0=class{options;block;constructor(Z){this.options=Z||r1}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(Z){return Z}postprocess(Z){return Z}processAllTokens(Z){return Z}emStrongMask(Z){return Z}provideLexer(Z=this.block){return Z?N1.lex:N1.lexInline}provideParser(Z=this.block){return Z?O1.parse:O1.parseInline}},O8=class{defaults=U2();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=O1;Renderer=E0;TextRenderer=F2;Lexer=N1;Tokenizer=k0;Hooks=N0;constructor(...Z){this.use(...Z)}walkTokens(Z,$){let q=[];for(let Q of Z)switch(q=q.concat($.call(this,Q)),Q.type){case"table":{let J=Q;for(let Y of J.header)q=q.concat(this.walkTokens(Y.tokens,$));for(let Y of J.rows)for(let X of Y)q=q.concat(this.walkTokens(X.tokens,$));break}case"list":{let J=Q;q=q.concat(this.walkTokens(J.items,$));break}default:{let J=Q;this.defaults.extensions?.childTokens?.[J.type]?this.defaults.extensions.childTokens[J.type].forEach((Y)=>{let X=J[Y].flat(1/0);q=q.concat(this.walkTokens(X,$))}):J.tokens&&(q=q.concat(this.walkTokens(J.tokens,$)))}}return q}use(...Z){let $=this.defaults.extensions||{renderers:{},childTokens:{}};return Z.forEach((q)=>{let Q={...q};if(Q.async=this.defaults.async||Q.async||!1,q.extensions&&(q.extensions.forEach((J)=>{if(!J.name)throw Error("extension name required");if("renderer"in J){let Y=$.renderers[J.name];Y?$.renderers[J.name]=function(...X){let G=J.renderer.apply(this,X);return G===!1&&(G=Y.apply(this,X)),G}:$.renderers[J.name]=J.renderer}if("tokenizer"in J){if(!J.level||J.level!=="block"&&J.level!=="inline")throw Error("extension level must be 'block' or 'inline'");let Y=$[J.level];Y?Y.unshift(J.tokenizer):$[J.level]=[J.tokenizer],J.start&&(J.level==="block"?$.startBlock?$.startBlock.push(J.start):$.startBlock=[J.start]:J.level==="inline"&&($.startInline?$.startInline.push(J.start):$.startInline=[J.start]))}"childTokens"in J&&J.childTokens&&($.childTokens[J.name]=J.childTokens)}),Q.extensions=$),q.renderer){let J=this.defaults.renderer||new E0(this.defaults);for(let Y in q.renderer){if(!(Y in J))throw Error(`renderer '${Y}' does not exist`);if(["options","parser"].includes(Y))continue;let X=Y,G=q.renderer[X],z=J[X];J[X]=(..._)=>{let H=G.apply(J,_);return H===!1&&(H=z.apply(J,_)),H||""}}Q.renderer=J}if(q.tokenizer){let J=this.defaults.tokenizer||new k0(this.defaults);for(let Y in q.tokenizer){if(!(Y in J))throw Error(`tokenizer '${Y}' does not exist`);if(["options","rules","lexer"].includes(Y))continue;let X=Y,G=q.tokenizer[X],z=J[X];J[X]=(..._)=>{let H=G.apply(J,_);return H===!1&&(H=z.apply(J,_)),H}}Q.tokenizer=J}if(q.hooks){let J=this.defaults.hooks||new N0;for(let Y in q.hooks){if(!(Y in J))throw Error(`hook '${Y}' does not exist`);if(["options","block"].includes(Y))continue;let X=Y,G=q.hooks[X],z=J[X];N0.passThroughHooks.has(Y)?J[X]=(_)=>{if(this.defaults.async&&N0.passThroughHooksRespectAsync.has(Y))return(async()=>{let U=await G.call(J,_);return z.call(J,U)})();let H=G.call(J,_);return z.call(J,H)}:J[X]=(..._)=>{if(this.defaults.async)return(async()=>{let U=await G.apply(J,_);return U===!1&&(U=await z.apply(J,_)),U})();let H=G.apply(J,_);return H===!1&&(H=z.apply(J,_)),H}}Q.hooks=J}if(q.walkTokens){let J=this.defaults.walkTokens,Y=q.walkTokens;Q.walkTokens=function(X){let G=[];return G.push(Y.call(this,X)),J&&(G=G.concat(J.call(this,X))),G}}this.defaults={...this.defaults,...Q}}),this}setOptions(Z){return this.defaults={...this.defaults,...Z},this}lexer(Z,$){return N1.lex(Z,$??this.defaults)}parser(Z,$){return O1.parse(Z,$??this.defaults)}parseMarkdown(Z){return($,q)=>{let Q={...q},J={...this.defaults,...Q},Y=this.onError(!!J.silent,!!J.async);if(this.defaults.async===!0&&Q.async===!1)return Y(Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof $>"u"||$===null)return Y(Error("marked(): input parameter is undefined or null"));if(typeof $!="string")return Y(Error("marked(): input parameter is of type "+Object.prototype.toString.call($)+", string expected"));if(J.hooks&&(J.hooks.options=J,J.hooks.block=Z),J.async)return(async()=>{let X=J.hooks?await J.hooks.preprocess($):$,G=await(J.hooks?await J.hooks.provideLexer(Z):Z?N1.lex:N1.lexInline)(X,J),z=J.hooks?await J.hooks.processAllTokens(G):G;J.walkTokens&&await Promise.all(this.walkTokens(z,J.walkTokens));let _=await(J.hooks?await J.hooks.provideParser(Z):Z?O1.parse:O1.parseInline)(z,J);return J.hooks?await J.hooks.postprocess(_):_})().catch(Y);try{J.hooks&&($=J.hooks.preprocess($));let X=(J.hooks?J.hooks.provideLexer(Z):Z?N1.lex:N1.lexInline)($,J);J.hooks&&(X=J.hooks.processAllTokens(X)),J.walkTokens&&this.walkTokens(X,J.walkTokens);let G=(J.hooks?J.hooks.provideParser(Z):Z?O1.parse:O1.parseInline)(X,J);return J.hooks&&(G=J.hooks.postprocess(G)),G}catch(X){return Y(X)}}}onError(Z,$){return(q)=>{if(q.message+=`
59
- Please report this to https://github.com/markedjs/marked.`,Z){let Q="<p>An error occurred:</p><pre>"+y1(q.message+"",!0)+"</pre>";return $?Promise.resolve(Q):Q}if($)return Promise.reject(q);throw q}}},d1=new O8;function n(Z,$){return d1.parse(Z,$)}n.options=n.setOptions=function(Z){return d1.setOptions(Z),n.defaults=d1.defaults,e2(n.defaults),n};n.getDefaults=U2;n.defaults=r1;n.use=function(...Z){return d1.use(...Z),n.defaults=d1.defaults,e2(n.defaults),n};n.walkTokens=function(Z,$){return d1.walkTokens(Z,$)};n.parseInline=d1.parseInline;n.Parser=O1;n.parser=O1.parse;n.Renderer=E0;n.TextRenderer=F2;n.Lexer=N1;n.lexer=N1.lex;n.Tokenizer=k0;n.Hooks=N0;n.parse=n;var{options:E6,setOptions:x6,use:m6,walkTokens:u6,parseInline:g6}=n;var f6=O1.parse,v6=N1.lex;import{SessionContext as b5,ActiveViewCtx as C6}from"#canvas/runtime";import{useState as F0,useCallback as S1,useEffect as B8,useRef as F8,useMemo as L8}from"react";import{AnnotationCtx as M8}from"#canvas/runtime";var T1="__agent-response__";function B1(){return`ann-${Date.now()}-${Math.random().toString(36).slice(2,6)}`}function B0(Z,$){Z.style.height="auto",Z.style.height=($?Math.max($,Z.scrollHeight):Z.scrollHeight)+"px"}import{useAnnotations as Y1}from"#canvas/runtime";import{jsxDEV as w8}from"react/jsx-dev-runtime";function L2(Z,$){return`canvas:${Z}:rev:${$}`}function u0(Z,$){try{let q=localStorage.getItem(L2(Z,$));if(!q)return null;return JSON.parse(q)}catch{return null}}function P8(Z,$,q){try{localStorage.setItem(L2(Z,$),JSON.stringify(q))}catch{}}function y8(Z,$){try{localStorage.removeItem(L2(Z,$))}catch{}}function G3({sessionId:Z,revision:$,isReadOnly:q,remoteAnnotations:Q,children:J}){let[Y,X]=F0(()=>{return(u0(Z,$)?.annotations??[]).map((E)=>({...E,source:E.source??"local"}))}),G=L8(()=>{if(!Q||Q.length===0)return Y;let V=new Set(Y.map((g)=>g.id)),E=Q.filter((g)=>!V.has(g.id));return[...Y,...E.map((g)=>({...g,source:"remote"}))]},[Y,Q]),[z,_]=F0(()=>{return u0(Z,$)?.generalNote??""}),[H,U]=F0(null),[T,W]=F0(()=>{let V=u0(Z,$);return V?.responses?new Map(V.responses):new Map}),[K,F]=F0(()=>{let V=u0(Z,$);return V?.feedbackEntries?new Map(V.feedbackEntries):new Map}),N=F8(null);B8(()=>{if(q)return;if(N.current)clearTimeout(N.current);return N.current=setTimeout(()=>{P8(Z,$,{annotations:Y,generalNote:z,responses:Array.from(T.entries()),feedbackEntries:Array.from(K.entries())})},300),()=>{if(N.current)clearTimeout(N.current)}},[Y,z,T,K,Z,$,q]);let y=S1((V,E,g,l,b,u,h)=>{X((A)=>[...A,{id:V,snippet:E,note:g,createdAt:new Date().toISOString(),filePath:l,context:b,...u?.length?{images:u}:{},...h?{canvasFile:h}:{}}])},[]),O=S1((V,E,g)=>{y(B1(),V,E,g)},[y]),D=S1((V,E)=>{X((g)=>g.map((l)=>l.id===V?{...l,note:E}:l))},[]),S=S1((V)=>{S8(V),X((E)=>E.filter((g)=>g.id!==V)),U((E)=>E===V?null:E)},[]),M=S1((V,E)=>{X((g)=>g.map((l)=>l.id===V?{...l,images:[...l.images||[],E]}:l))},[]),w=S1((V,E)=>{X((g)=>g.map((l)=>l.id===V?{...l,images:(l.images||[]).filter((b)=>b!==E)}:l))},[]),C=S1((V,E)=>{W((g)=>{let l=new Map(g);return l.set(V,E),l})},[]),k=S1((V,E)=>{F((g)=>{let l=g.get(V);if(l&&l.markdown===E.markdown&&l.label===E.label&&l.required===E.required)return g;let b=new Map(g);return b.set(V,E),b})},[]),c=S1((V)=>{F((E)=>{if(!E.has(V))return E;let g=new Map(E);return g.delete(V),g})},[]),v=S1(()=>{for(let V of document.querySelectorAll("[data-annotation-id]"))U3(V);X([]),_(""),U(null),W(new Map),F(new Map),y8(Z,$)},[Z,$]);return w8(M8.Provider,{value:{annotations:G,addAnnotation:O,addAnnotationWithId:y,updateAnnotation:D,removeAnnotation:S,addAnnotationImage:M,removeAnnotationImage:w,generalNote:z,setGeneralNote:_,clearAll:v,activeAnnotationId:H,setActiveAnnotationId:U,responses:T,setResponse:C,feedbackEntries:K,setFeedbackEntry:k,removeFeedbackEntry:c},children:J},void 0,!1,void 0,this)}function S8(Z){let $=document.querySelectorAll(`[data-annotation-id="${Z}"]`);for(let q of $)U3(q)}function U3(Z){let $=Z.parentNode;if(!$)return;let q=document.createTextNode(Z.textContent||"");$.replaceChild(q,Z),$.normalize()}import j2,{useEffect as n1,useState as w1,useRef as l8,useContext as i8,useMemo as M0}from"react";import{createPortal as a8}from"react-dom";import{SessionContext as o8,CanvasFileCtx as s8}from"#canvas/runtime";function l1(Z,$){let q=K3(Z,"before",60),Q=K3(Z,"after",60),J=j8(Z.startContainer,$);return{before:q,after:Q,hierarchy:J}}function K3(Z,$,q){let Q=b8($==="before"?Z.startContainer:Z.endContainer);if(!Q)return"";let J="";if($==="before"){let Y=document.createTreeWalker(Q,NodeFilter.SHOW_TEXT),X;while(X=Y.nextNode()){if(X===Z.startContainer){J+=(X.textContent||"").slice(0,Z.startOffset);break}if(X.parentElement?.hasAttribute("data-annotation-id"))continue;J+=X.textContent||""}if(J.length>q){J=J.slice(-q);let G=J.indexOf(" ");if(G>0)J=J.slice(G+1)}}else{let Y=document.createTreeWalker(Q,NodeFilter.SHOW_TEXT),X=!1,G;while(G=Y.nextNode()){if(G===Z.endContainer){J+=(G.textContent||"").slice(Z.endOffset),X=!0;continue}if(X){if(G.parentElement?.hasAttribute("data-annotation-id"))continue;J+=G.textContent||""}}if(J.length>q){J=J.slice(0,q);let z=J.lastIndexOf(" ");if(z>0)J=J.slice(0,z)}}return J.trim()}function b8(Z){let $=new Set(["DIV","P","LI","PRE","BLOCKQUOTE","SECTION","ARTICLE"]),q=Z.parentElement;while(q){if($.has(q.tagName))return q;q=q.parentElement}return null}function j8(Z,$){let q=[],Q=Z instanceof Element?Z:Z.parentElement;while(Q&&Q!==$){let J=Q.getAttribute?.("data-task-id");if(J){let Y=Q.querySelector(".font-semibold");if(Y)q.unshift(Y.textContent?.trim()||J)}if(Q.tagName==="DIV"&&Q.querySelector(":scope > button .font-heading, :scope > div .font-heading")){let Y=Q.querySelector(".font-heading");if(Y)q.unshift(Y.textContent?.trim()||"")}Q=Q.parentElement}return q}function M2(Z){let $=Z.snippet.trim(),q=Z.context,Q=$.length<30;if(q&&Q&&(q.before||q.after)){let J=[];if(q.before)J.push(`...${q.before} `);if(J.push(`**${$}**`),q.after)J.push(` ${q.after}...`);return J.join("")}return $}import{useEffect as u8,useRef as v0,useState as Q0,useCallback as f0,useMemo as b3,useContext as g8}from"react";import{createPortal as f8}from"react-dom";function H3(Z,$){let J=$||document.body,Y=Z.getBoundingClientRect(),X=J.getBoundingClientRect(),G=J===document.body?window.scrollY:J.scrollTop,z=Y.bottom-X.top+G+8,_=Math.max(0,Math.min(Y.left-X.left,X.width-280-12));return J.style.position="relative",{style:{position:"absolute",top:`${z}px`,left:`${_}px`},parent:J}}import{useState as y2,useRef as S2,useCallback as C1,useEffect as x8}from"react";var W3={alg:"AES-GCM",v:1};async function T3(Z){let $=C8(Z);return crypto.subtle.importKey("raw",$,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function E1(Z,$){let q=crypto.getRandomValues(new Uint8Array(12)),Q=new TextEncoder().encode($),J=await crypto.subtle.encrypt({name:"AES-GCM",iv:q},Z,Q),Y=new Uint8Array(q.byteLength+J.byteLength);return Y.set(q,0),Y.set(new Uint8Array(J),q.byteLength),A8(Y)}async function L0(Z,$){let q=N3($);if(q.byteLength<28)throw Error("Ciphertext too short");let Q=q.subarray(0,12),J=q.subarray(12),Y=await crypto.subtle.decrypt({name:"AES-GCM",iv:Q},Z,J);return new TextDecoder().decode(Y)}function A8(Z){let $="",q=32768;for(let Q=0;Q<Z.byteLength;Q+=q)$+=String.fromCharCode.apply(null,Array.from(Z.subarray(Q,Q+q)));return btoa($)}function N3(Z){let $=atob(Z),q=new Uint8Array($.length);for(let Q=0;Q<$.length;Q++)q[Q]=$.charCodeAt(Q);return q}function C8(Z){let $=Z.replace(/-/g,"+").replace(/_/g,"/")+"===".slice((Z.length+3)%4);return N3($)}function V8(){if(typeof window>"u")return null;let Z=window.location.hash.replace(/^#/,"");if(!Z)return null;for(let $ of Z.split("&")){let[q,Q]=$.split("=");if(q==="k"&&Q)return decodeURIComponent(Q)}return null}function I8(){if(typeof window<"u"&&window.__CANVAS_SHARE__?.shareId){let $=V8();return{isShared:!0,shareId:window.__CANVAS_SHARE__.shareId,encryptionKey:$?T3($):null}}return{isShared:!1,sessionId:typeof window<"u"?window.location.pathname.replace("/s/",""):""}}var e=I8();function R8(){return e.isShared&&e.encryptionKey!==null}function D8(){if(e.isShared)return`/s/${e.shareId}/meta`;return`/api/session/${e.sessionId}/meta`}function k8(Z,$){let q=Z.replace(/\.jsx$/,".js");if(e.isShared)return`/s/${e.shareId}/canvas/${encodeURIComponent(q)}`;let Q=$?`?rev=${$}&t=${Date.now()}`:`?t=${Date.now()}`;return`/api/session/${e.sessionId}/canvas/${encodeURIComponent(q)}${Q}`}function O3(){if(e.isShared)return`/s/${e.shareId}/upload`;return`/api/session/${e.sessionId}/upload`}async function B3(){let Z=await fetch(D8());if(!Z.ok)throw Error(`meta ${Z.status}`);let $=await Z.json();if($.encryption&&e.isShared&&e.encryptionKey){let q=await e.encryptionKey;if($.origin){let J={...$.origin};if(J.sessionId)J.sessionId=await L0(q,J.sessionId);if(J.label)J.label=await L0(q,J.label);$.origin=J}let Q=$.revisions;if(Array.isArray(Q)){for(let J of Q)if(J.label)try{J.label=await L0(q,J.label)}catch{}}}return $}async function F3(Z,$){let q=k8(Z,$);if(!R8())return import(q);let Q=await fetch(q);if(!Q.ok)throw Error(`canvas ${Q.status}`);let J=await Q.text(),Y=await e.encryptionKey,X=await L0(Y,J),G=new Blob([X],{type:"application/javascript"}),z=URL.createObjectURL(G);try{return await import(z)}finally{setTimeout(()=>URL.revokeObjectURL(z),0)}}var L3="canvas-reviewer-identity";function P2(){try{let Z=localStorage.getItem(L3);if(!Z)return null;return JSON.parse(Z)}catch{return null}}function M3(Z){let $=P2();if(!$)$={id:crypto.randomUUID?.()||String(Date.now()),name:Z};else $.name=Z;return localStorage.setItem(L3,JSON.stringify($)),$}async function E8(Z,$){let q=await Promise.all(Z.annotations.map(async(Q)=>{let J={id:Q.id,createdAt:Q.createdAt,snippet:await E1($,String(Q.snippet??"")),note:await E1($,String(Q.note??""))};if(Q.filePath)J.filePath=await E1($,String(Q.filePath));if(Q.canvasFile)J.canvasFile=await E1($,String(Q.canvasFile));if(Q.context!==void 0&&Q.context!==null)J.context=await E1($,JSON.stringify(Q.context));if(Q.attachments)J.attachments=Q.attachments;return J}));return{author:{id:Z.author.id,name:await E1($,Z.author.name)},revision:Z.revision,annotations:q,...Z.generalNote?{generalNote:await E1($,Z.generalNote)}:{},encryption:W3}}async function P3(Z){if(!e.isShared)throw Error("submitSharedFeedback called outside shared mode");let $=Z;if(e.encryptionKey){let Q=await e.encryptionKey;$=await E8(Z,Q)}let q=await fetch(`/s/${e.shareId}/feedback`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify($)});if(!q.ok){let Q=await q.text().catch(()=>"");throw Error(`Feedback submission failed: ${q.status} ${Q}`)}}var F1=!e.isShared,y3=!e.isShared;import{jsxDEV as z1}from"react/jsx-dev-runtime";function S3(Z){if(Z.startsWith("/s/")||Z.startsWith("http://")||Z.startsWith("https://"))return Z;return`/api/uploads/${Z.split("/").pop()}`}async function m8(Z,$){let q=new FormData;q.append("image",$);try{let J=await(await fetch(O3(),{method:"POST",body:q})).json();if(e.isShared)return J.url||null;return J.path||null}catch{return null}}function g0({note:Z,onNoteChange:$,images:q,onAddImage:Q,onRemoveImage:J,sessionId:Y,placeholder:X="Add your note...",autoFocus:G=!1,autoResize:z=!1,readOnly:_=!1,onKeyDown:H,onTextareaClick:U,textareaRef:T,textareaClassName:W,textareaStyle:K,minHeight:F,attachButton:N="always",openFilePickerRef:y}){let[O,D]=y2(!1),[S,M]=y2(!1),[w,C]=y2(!1),k=S2(0),c=S2(null),v=S2(null),V=C1(()=>v.current?.click(),[]);if(y)y.current=V;let E=C1((m)=>{if(c.current=m,T)T.current=m;if(m&&z)B0(m,F)},[T,z,F]);x8(()=>{if(G&&c.current){let m=c.current;if(m.focus(),m.value)m.setSelectionRange(m.value.length,m.value.length)}},[G]);let g=C1(async(m)=>{if(!m.type.startsWith("image/"))return;M(!0);try{let s=await m8(Y,m);if(s)Q(s)}finally{M(!1)}},[Y,Q]),l=C1((m)=>{let s=m.clipboardData.items;for(let j of s)if(j.type.startsWith("image/")){m.preventDefault();let f=j.getAsFile();if(f)g(f);return}},[g]),b=C1((m)=>{if(m.preventDefault(),k.current++,k.current===1)D(!0)},[]),u=C1((m)=>{m.preventDefault()},[]),h=C1((m)=>{if(m.preventDefault(),k.current--,k.current===0)D(!1)},[]),A=C1((m)=>{m.preventDefault(),k.current=0,D(!1);for(let s of m.dataTransfer.files)if(s.type.startsWith("image/"))g(s)},[g]),I=C1((m)=>{if($(m.target.value),z)m.target.style.height="auto",m.target.style.height=(F?Math.max(F,m.target.scrollHeight):m.target.scrollHeight)+"px"},[$,z,F]),L="w-full bg-transparent text-[13px] font-body text-text-primary resize-none focus:outline-none leading-relaxed p-0 border-none",d={width:"100%",background:"transparent",border:"none",color:"var(--color-text-primary)",fontFamily:"'Inter', sans-serif",fontSize:"13px",lineHeight:"1.5",outline:"none",...z?{resize:"none",overflow:"hidden"}:{resize:"vertical"}},x=!_&&(N==="always"||N==="on-focus"&&w);return z1("div",{style:{position:"relative"},onDragEnter:_?void 0:b,onDragOver:_?void 0:u,onDragLeave:_?void 0:h,onDrop:_?void 0:A,children:[z1("textarea",{ref:E,value:Z,onChange:_?void 0:I,onPaste:_?void 0:l,onKeyDown:H,onClick:U,onFocus:()=>C(!0),onBlur:()=>{setTimeout(()=>C(!1),150)},readOnly:_,placeholder:X,className:W??L,style:K??d,rows:z?1:void 0},void 0,!1,void 0,this),!_&&z1("input",{ref:v,type:"file",accept:"image/*",multiple:!0,style:{display:"none"},onChange:(m)=>{let s=m.target.files;if(s)for(let j of s)g(j);m.target.value=""}},void 0,!1,void 0,this),(q.length>0||x)&&z1("div",{style:{display:"flex",gap:"6px",flexWrap:"wrap",marginTop:"6px",alignItems:"center"},children:[q.map((m)=>z1("div",{style:{position:"relative",width:"56px",height:"56px",borderRadius:"6px",overflow:"hidden",border:"1px solid var(--color-border-subtle)",flexShrink:0},children:[z1("img",{src:S3(m),alt:"",style:{width:"100%",height:"100%",objectFit:"cover",display:"block"}},void 0,!1,void 0,this),!_&&z1("button",{onClick:(s)=>{s.stopPropagation(),J(m)},style:{position:"absolute",top:"2px",right:"2px",width:"16px",height:"16px",borderRadius:"50%",background:"rgba(0,0,0,0.6)",color:"white",border:"none",cursor:"pointer",fontSize:"11px",display:"flex",alignItems:"center",justifyContent:"center",lineHeight:1,padding:0},title:"Remove image",children:"×"},void 0,!1,void 0,this)]},m,!0,void 0,this)),x&&z1(w2,{onClick:V},void 0,!1,void 0,this)]},void 0,!0,void 0,this),S&&z1("div",{style:{fontSize:"11px",color:"var(--color-text-tertiary)",fontFamily:"'Inter', sans-serif",marginTop:"4px"},children:"Uploading..."},void 0,!1,void 0,this),O&&z1("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",background:"var(--color-highlight-bg)",opacity:0.9,border:"2px dashed var(--color-highlight-border)",borderRadius:"6px",zIndex:10,pointerEvents:"none",fontSize:"12px",fontFamily:"'Inter', sans-serif",color:"var(--color-text-secondary)"},children:"Drop image"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function w2({onClick:Z,size:$=16}){return z1("button",{onClick:(q)=>{q.stopPropagation(),Z()},style:{width:`${$*2}px`,height:`${$*2}px`,borderRadius:"6px",border:"none",background:"transparent",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--color-text-tertiary)",flexShrink:0,transition:"color 0.15s"},title:"Attach image",onMouseEnter:(q)=>{q.currentTarget.style.color="var(--color-text-secondary)"},onMouseLeave:(q)=>{q.currentTarget.style.color="var(--color-text-tertiary)"},children:z1("svg",{width:$,height:$,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[z1("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"},void 0,!1,void 0,this),z1("circle",{cx:"8.5",cy:"8.5",r:"1.5"},void 0,!1,void 0,this),z1("polyline",{points:"21 15 16 10 5 21"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function w3({images:Z}){if(!Z.length)return null;return z1("div",{style:{display:"flex",gap:"6px",flexWrap:"wrap",marginTop:"6px"},children:Z.map(($)=>z1("div",{style:{width:"56px",height:"56px",borderRadius:"6px",overflow:"hidden",border:"1px solid var(--color-border-subtle)",flexShrink:0},children:z1("img",{src:S3($),alt:"",style:{width:"100%",height:"100%",objectFit:"cover",display:"block"}},void 0,!1,void 0,this)},$,!1,void 0,this))},void 0,!1,void 0,this)}import{SessionContext as v8}from"#canvas/runtime";import{jsxDEV as _1,Fragment as p8}from"react/jsx-dev-runtime";function h8({anchorEl:Z,scrollContainer:$,onClose:q,ignoreSelector:Q,zIndex:J="50",padding:Y="12px",width:X="280px",children:G}){let z=v0(null),_=v0(q);_.current=q;let{style:H,parent:U}=H3(Z,$);return u8(()=>{let T=setTimeout(()=>{let W=(K)=>{if(z.current&&!z.current.contains(K.target)){if(Q&&K.target.closest?.(Q))return;_.current(),document.removeEventListener("mousedown",W)}};return document.addEventListener("mousedown",W),()=>document.removeEventListener("mousedown",W)},0);return()=>clearTimeout(T)},[Q]),f8(_1("div",{ref:z,style:{...H,zIndex:J,width:X,background:"var(--color-bg-elevated)",border:"1px solid var(--color-border-hover)",borderRadius:"8px",boxShadow:"0 4px 12px var(--color-shadow)",padding:Y,fontFamily:"'Inter', sans-serif"},children:G},void 0,!1,void 0,this),U)}var A3=[{label:"Clarity",items:["Unclear","Why?","Needs example","Missing context"]},{label:"Scope",items:["Overkill","Out of scope","Important","Risky"]},{label:"Action",items:["Simplify","Rethink","Expand on this","Skip this"]}],j3=A3.flatMap((Z)=>Z.items);function C3({anchorEl:Z,scrollContainer:$,snippet:q,truncateAt:Q=100,header:J,initialNote:Y="",initialImages:X,onConfirm:G,onCancel:z,onDelete:_}){let H=g8(v8),U=Y!==""||!!_,[T,W]=Q0(Y),[K,F]=Q0(X||[]),[N,y]=Q0(null),[O,D]=Q0(U),[S,M]=Q0(!1),w=v0(null),C=v0(null),k=f0(()=>{if(T.trim()||K.length>0)G(T.trim(),K);else if(U&&_)_();else z()},[T,K,G,z,U,_]),c=f0(()=>{if(U){if(!T.trim()&&K.length===0&&_){_(),z();return}G(T,K);return}z()},[T,K,U,G,z,_]),v=!U,V=T.trim().length>0?j3.filter((j)=>j.toLowerCase().startsWith(T.trim().toLowerCase())):j3,E=!v||O?[]:V.length===1&&V[0].toLowerCase()===T.trim().toLowerCase()?[]:V,g=new Set(E),l=A3.map((j)=>({label:j.label,items:j.items.filter((f)=>g.has(f))})).filter((j)=>j.items.length>0),b=l.map((j)=>j.items),u=b.flat(),h=b3(()=>{if(N===null)return 0;let j=0;for(let f=0;f<b.length;f++){if(N<j+b[f].length)return f;j+=b[f].length}return 0},[N,b]),A=b3(()=>{if(N===null)return 0;let j=0;for(let f=0;f<h;f++)j+=b[f].length;return N-j},[N,h,b]),I=(j,f)=>{let Z1=0;for(let U1=0;U1<j;U1++)Z1+=b[U1].length;return Z1+f},[L,d]=Q0(T);if(T!==L)d(T),y(null),D(U);let x=f0((j)=>{W(j)},[]),m=q.length>Q?q.slice(0,Q)+"...":q,s=f0((j)=>{if(u.length>0&&(j.key==="ArrowDown"||j.key==="ArrowUp"||j.key==="ArrowLeft"||j.key==="ArrowRight")){if(j.preventDefault(),N===null){y(0);return}if(j.key==="ArrowDown"){let f=Math.min(A+1,b[h].length-1);y(I(h,f))}else if(j.key==="ArrowUp"){let f=Math.max(A-1,0);y(I(h,f))}else if(j.key==="ArrowRight"){let f=Math.min(h+1,b.length-1),Z1=Math.min(A,b[f].length-1);y(I(f,Z1))}else if(j.key==="ArrowLeft"){let f=Math.max(h-1,0),Z1=Math.min(A,b[f].length-1);y(I(f,Z1))}return}if(N!==null&&u.length>0){if(j.key==="Tab"){j.preventDefault(),x(u[N]);return}if(j.key==="Enter"&&!j.shiftKey){j.preventDefault(),G(u[N],K);return}}if(j.key==="Enter"&&!j.shiftKey){j.preventDefault(),k();return}if(j.key==="Escape")if(u.length>0&&!O)D(!0);else if(U)c();else z()},[u,N,A,h,b,I,x,G,K,k,O,U,c,z]);return _1(h8,{anchorEl:Z,scrollContainer:$,onClose:U?c:z,ignoreSelector:U?"[data-annotation-id]":void 0,zIndex:U?"60":"50",padding:U?"10px 12px":"12px",width:"420px",children:[!U&&(J??_1("div",{style:{fontSize:"11px",color:"var(--color-text-tertiary)",fontStyle:"italic",marginBottom:"8px",lineHeight:"1.4",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",overflow:"hidden"},children:["“",m,"”"]},void 0,!0,void 0,this)),_1(g0,{note:T,onNoteChange:W,images:K,onAddImage:(j)=>F((f)=>[...f,j]),onRemoveImage:(j)=>F((f)=>f.filter((Z1)=>Z1!==j)),sessionId:H,autoFocus:!0,autoResize:U,textareaRef:w,onKeyDown:s,attachButton:"none",openFilePickerRef:C,textareaStyle:U?{width:"100%",background:"transparent",border:"none",color:"var(--color-text-primary)",fontFamily:"'Inter', sans-serif",fontSize:"13px",lineHeight:"1.5",resize:"none",outline:"none",overflow:"hidden"}:{width:"100%",minHeight:"60px",background:"transparent",border:"none",color:"var(--color-text-primary)",fontFamily:"'Inter', sans-serif",fontSize:"13px",lineHeight:"1.5",resize:"vertical",outline:"none"},placeholder:"Add your note..."},void 0,!1,void 0,this),_1("div",{style:{display:"flex",alignItems:"center",gap:"8px",marginTop:U?"6px":"8px"},children:[_1(w2,{onClick:()=>C.current?.(),size:14},void 0,!1,void 0,this),_1("div",{style:{flex:1}},void 0,!1,void 0,this),U?_1("button",{onClick:()=>{if(_)_();z()},onMouseEnter:()=>M(!0),onMouseLeave:()=>M(!1),style:{fontSize:"11px",color:S?"var(--color-accent-red)":"var(--color-text-tertiary)",background:"none",border:"none",cursor:"pointer",padding:"2px 0",fontFamily:"'Inter', sans-serif"},children:"Delete"},void 0,!1,void 0,this):_1(p8,{children:[_1("button",{onClick:z,style:{fontSize:"11px",color:"var(--color-text-tertiary)",background:"none",border:"none",cursor:"pointer",padding:"4px 12px",fontFamily:"'Inter', sans-serif"},children:"Cancel"},void 0,!1,void 0,this),_1("button",{onClick:k,style:{fontSize:"11px",fontWeight:500,padding:"4px 12px",borderRadius:"6px",background:"var(--color-highlight-bg)",color:"var(--color-text-primary)",border:"1px solid var(--color-highlight-border)",cursor:"pointer",fontFamily:"'Inter', sans-serif"},children:"Add"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),u.length>0&&_1("div",{style:{marginTop:"6px",borderTop:"1px solid var(--color-border-subtle)",paddingTop:"8px",display:"flex",gap:"4px"},children:l.map((j)=>_1("div",{style:{flex:1},children:[_1("div",{style:{fontSize:"10px",fontWeight:600,color:"var(--color-text-disabled)",textTransform:"uppercase",letterSpacing:"0.05em",padding:"2px 6px",marginBottom:"2px",fontFamily:"'Inter', sans-serif"},children:j.label},void 0,!1,void 0,this),j.items.map((f)=>{let Z1=u.indexOf(f);return _1("div",{onMouseDown:(U1)=>{U1.preventDefault(),U1.stopPropagation(),x(f)},onMouseEnter:()=>y(Z1),style:{padding:"3px 6px",fontSize:"12px",borderRadius:"4px",fontFamily:"'Inter', sans-serif",color:Z1===N?"var(--color-text-primary)":"var(--color-text-secondary)",background:Z1===N?"var(--color-highlight-selected)":"transparent",cursor:"pointer"},children:[_1("span",{style:{fontWeight:500},children:f.slice(0,T.trim().length)},void 0,!1,void 0,this),f.slice(T.trim().length)]},f,!0,void 0,this)})]},j.label,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function Y0({anchorEl:Z,scrollContainer:$,snippet:q,truncateAt:Q,header:J,onAdd:Y,onCancel:X}){return _1(C3,{anchorEl:Z,scrollContainer:$,snippet:q,truncateAt:Q,header:J,onConfirm:(G,z)=>Y(G,z),onCancel:X},void 0,!1,void 0,this)}function X0({anchorEl:Z,scrollContainer:$,initialNote:q,initialImages:Q,onUpdate:J,onDelete:Y,onClose:X}){return _1(C3,{anchorEl:Z,scrollContainer:$,snippet:"",initialNote:q,initialImages:Q,onConfirm:(G,z)=>{J(G,z),X()},onDelete:Y,onCancel:X},void 0,!1,void 0,this)}import{useEffect as r0,useState as I3,useRef as o1,useCallback as R3}from"react";function a1(Z,$){let q=[],Q=c8(Z);for(let J of Q){let Y=document.createRange();if(Y.selectNodeContents(J),J===Z.startContainer)Y.setStart(J,Z.startOffset);if(J===Z.endContainer)Y.setEnd(J,Z.endOffset);let X=Y.toString();if(!X||!X.trim())continue;let G=document.createElement("mark");G.setAttribute("data-annotation-id",$);try{Y.surroundContents(G)}catch{let z=Y.extractContents();G.appendChild(z),Y.insertNode(G)}q.push(G)}return q}function c8(Z){let $=[],q=Z.commonAncestorContainer;if(q.nodeType===Node.TEXT_NODE)return $.push(q),$;let Q=document.createTreeWalker(q,NodeFilter.SHOW_TEXT),J;while(J=Q.nextNode()){let Y=J.parentElement;if(Y?.classList.contains("select-none"))continue;if(Y?.closest("[data-annotation-id]"))continue;if(Z.intersectsNode(J))$.push(J)}return $}function i1(Z,$){let q=document.querySelectorAll(`[data-annotation-id="${Z}"]`);for(let Q of q)Q.classList.toggle("mark-active",$)}function h0(Z,$){if($!=null&&$!==Z)i1($,!1);if(Z!=null)i1(Z,!0)}function p0(Z,$){let q=document.querySelectorAll(`[data-annotation-id="${Z}"]`);for(let Q of q)Q.setAttribute("data-annotation-id",$)}function c0(Z,$){for(let q of $){if(Z.querySelector(`[data-annotation-id="${q.id}"]`))continue;let Q=q.snippet;if(!Q)continue;let{fullText:J,textNodes:Y}=d8(Z),X=[],G=0;while(!0){let W=J.indexOf(Q,G);if(W===-1)break;X.push(W),G=W+1}if(X.length===0)continue;let z=X[0];if(X.length>1&&q.context){let W=-1;for(let K of X){let F=0;if(q.context.before){let N=J.slice(Math.max(0,K-80),K);if(N.includes(q.context.before))F+=2;else if(q.context.before.length>10&&N.includes(q.context.before.slice(-10)))F+=1}if(q.context.after){let N=J.slice(K+Q.length,K+Q.length+80);if(N.includes(q.context.after))F+=2;else if(q.context.after.length>10&&N.includes(q.context.after.slice(0,10)))F+=1}if(F>W)W=F,z=K}}let _=z,H=z+Q.length,U=V3(Y,_),T=V3(Y,H);if(!U||!T)continue;try{let W=document.createRange();W.setStart(U.node,U.offset),W.setEnd(T.node,T.offset),a1(W,q.id)}catch{}}}function d8(Z){let $=[],q="",Q=document.createTreeWalker(Z,NodeFilter.SHOW_TEXT),J;while(J=Q.nextNode()){let Y=J.parentElement;if(Y?.classList.contains("select-none"))continue;if(Y?.closest("[data-annotation-id]"))continue;$.push({node:J,start:q.length}),q+=J.textContent||""}return{fullText:q,textNodes:$}}function V3(Z,$){for(let q=Z.length-1;q>=0;q--)if(Z[q].start<=$){let Q=$-Z[q].start,J=Z[q].node.textContent?.length??0;if(Q<=J)return{node:Z[q].node,offset:Q}}return null}function d0(Z){let $=document.querySelectorAll(`[data-annotation-id="${Z}"]`);for(let q of $){let Q=q.parentNode;if(!Q)continue;while(q.firstChild)Q.insertBefore(q.firstChild,q);Q.removeChild(q),Q.normalize()}}import{jsxDEV as b2,Fragment as r8}from"react/jsx-dev-runtime";function s1(Z){let{containerRef:$,restoreKey:q,restoreAnnotations:Q,extractContext:J,filePath:Y,canvasFile:X,scrollContainer:G}=Z,{annotations:z,addAnnotationWithId:_,removeAnnotation:H,updateAnnotation:U,addAnnotationImage:T,removeAnnotationImage:W,activeAnnotationId:K,setActiveAnnotationId:F}=Y1(),[N,y]=I3(null),[O,D]=I3(null),S=o1(J);S.current=J;let M=o1(Y);M.current=Y;let w=o1(X);w.current=X;let C=o1(_);C.current=_;let k=o1(K);k.current=K;let c=o1(F);c.current=F;let v=Q.length;r0(()=>{if(!$.current)return;let b=setTimeout(()=>{if($.current)c0($.current,Q)},50);return()=>clearTimeout(b)},[q,v]);let V=o1(null);r0(()=>{h0(K,V.current),V.current=K},[K]),r0(()=>{let b=$.current;if(!b)return;let u=(I)=>{let L=I.target.closest("[data-annotation-id]");if(!L)return;I.stopPropagation();let d=L.getAttribute("data-annotation-id");if(d===k.current)y({anchorEl:L,annId:d});else c.current(d)},h=(I)=>{let L=I.target.closest("[data-annotation-id]");if(L)c.current(L.getAttribute("data-annotation-id"))},A=(I)=>{let L=I.target.closest("[data-annotation-id]"),d=I.relatedTarget?.closest?.("[data-annotation-id]");if(L&&!d&&!document.getElementById("ann-inline-popover"))c.current(null)};return b.addEventListener("click",u),b.addEventListener("mouseover",h),b.addEventListener("mouseout",A),()=>{b.removeEventListener("click",u),b.removeEventListener("mouseover",h),b.removeEventListener("mouseout",A)}},[q]),r0(()=>{let b=()=>E();return document.addEventListener("mouseup",b),()=>document.removeEventListener("mouseup",b)},[]);let E=R3(()=>{let b=window.getSelection();if(!b||b.isCollapsed||!b.toString().trim())return;if(!$.current)return;let u=b.getRangeAt(0);if(!$.current.contains(u.startContainer))return;if(u.startContainer.parentElement?.closest?.("[data-annotation-id]"))return;let h=b.toString().trim();if(h.length<2)return;let A=S.current(u),I=u.cloneRange(),L=`__pending_${Date.now()}`;try{a1(I,L)}catch{}window.getSelection()?.removeAllRanges();let d=document.querySelectorAll(`[data-annotation-id="${L}"]`),x=d[d.length-1];if(!x)return;D({anchorEl:x,tempId:L,snippet:h,ctx:A})},[]),g=R3((b,u,h,A)=>{D({anchorEl:b,tempId:u,snippet:h,ctx:A})},[]);return{popovers:b2(r8,{children:[N&&(()=>{let b=z.find((u)=>u.id===N.annId);if(!b)return null;return b2(X0,{anchorEl:N.anchorEl,scrollContainer:G,initialNote:b.note,initialImages:b.images,onUpdate:(u,h)=>{U(N.annId,u);let A=b.images||[];for(let I of h)if(!A.includes(I))T(N.annId,I);for(let I of A)if(!h.includes(I))W(N.annId,I)},onDelete:()=>{H(N.annId),F(null)},onClose:()=>y(null)},void 0,!1,void 0,this)})(),O&&b2(Y0,{anchorEl:O.anchorEl,scrollContainer:G,snippet:O.snippet,truncateAt:80,onAdd:(b,u)=>{let h=B1();p0(O.tempId,h),C.current(h,O.snippet,b,M.current,O.ctx,u,w.current),D(null)},onCancel:()=>{d0(O.tempId),D(null)}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),openCreatePopover:g,isPopoverOpen:!!(N||O)}}import{jsxDEV as J1,Fragment as $4}from"react/jsx-dev-runtime";var C2="[data-md='item'], [data-md='section'], [data-md='table'] tbody tr, [data-md='callout'], [data-md='note'], [data-md='checklist-item'], [data-md='choice-option'], [data-md='multichoice-option'], [data-md='userinput'], [data-md='rangeinput'], [data-md='image']",A2="[data-md='item'], [data-md='section'], [data-md='table'] tbody tr, [data-md='callout'], [data-md='note'], [data-md='checklist-item'], [data-md='image']";function P0({revision:Z,filename:$}){let q=i8(o8),[Q,J]=w1(null),[Y,X]=w1(null),[G,z]=w1(!0),_=l8(null),{annotations:H,addAnnotationWithId:U,removeAnnotation:T,updateAnnotation:W,addAnnotationImage:K,removeAnnotationImage:F,activeAnnotationId:N,setActiveAnnotationId:y}=Y1(),O=M0(()=>H.filter((A)=>!A.filePath&&(!A.canvasFile||A.canvasFile===$)),[H,$]),[D,S]=w1(null),[M,w]=w1(null),[C,k]=w1(null),[c,v]=w1(null),[V,E]=w1(!1);n1(()=>{z(!0),X(null),v(null),F3($,Z).then((A)=>{J(()=>A.default),z(!1)}).catch((A)=>{X(A.message),z(!1)})},[q,Z,$]);let g=document.getElementById("plan-scroll-container"),{popovers:l,isPopoverOpen:b}=s1({containerRef:_,restoreKey:Q,restoreAnnotations:O,extractContext:(A)=>l1(A,_.current),canvasFile:$,scrollContainer:g}),u=M0(()=>{let A=new Map;for(let I of O)if(I.snippet.startsWith("["))A.set(I.snippet,I.id);return A},[O]);n1(()=>{let A=_.current;if(!A)return;let I=(d)=>{if(C||b)return;let x=d.target;if(x.closest("[data-block-comment-btn]"))return;E(!1);let m=x.closest(C2);if(m&&A.contains(m)){let f=t1(A).indexOf(m);v(f>=0?f:null)}else v(null);let s=x.closest(A2);if(s&&A.contains(s)){w(s);let j=z0(s),f=j?u.get(j):void 0;if(f&&f!==N)y(f)}else w(null)},L=(d)=>{if(C||b)return;if(d.relatedTarget?.closest("[data-block-comment-btn]"))return;w(null),y(null)};return A.addEventListener("mousemove",I),A.addEventListener("mouseleave",L),()=>{A.removeEventListener("mousemove",I),A.removeEventListener("mouseleave",L)}},[Q,C,b,u,N]),n1(()=>{let A=(I)=>{let L=I.target.tagName;if(L==="INPUT"||L==="TEXTAREA"||I.target.isContentEditable)return;if(C||b)return;let d=_.current;if(!d)return;if(I.key==="ArrowDown"){I.preventDefault(),E(!0);let x=t1(d);if(x.length===0)return;v((m)=>{if(m===null)return 0;return Math.min(m+1,x.length-1)})}else if(I.key==="ArrowUp"){I.preventDefault(),E(!0);let x=t1(d);if(x.length===0)return;v((m)=>{if(m===null)return x.length-1;return Math.max(m-1,0)})}else if(I.key==="a"||I.key==="A"){if(c===null||!d)return;I.preventDefault();let m=t1(d)[c];if(!m)return;let s=z0(m);if(!s)return;let j=u.get(s);if(j)y(j),k({anchorEl:m,snippet:s,annId:j});else k({anchorEl:m,snippet:s})}else if(I.key===" "||I.key==="Enter"){if(c===null)return;let m=t1(d)[c];if(!m)return;let s=m.getAttribute("data-md");if(s==="choice-option"||s==="multichoice-option")I.preventDefault(),m.dispatchEvent(new CustomEvent("kb-select",{bubbles:!0}));else if(s==="userinput"){I.preventDefault();let j=m.querySelector("textarea");if(j){j.focus();let f=(Z1)=>{if(Z1.key==="Escape")Z1.preventDefault(),j.blur(),E(!0)};j.addEventListener("keydown",f),j.addEventListener("blur",()=>j.removeEventListener("keydown",f),{once:!0})}}else if(s==="rangeinput"){I.preventDefault();let j=m.querySelector("input[type='range']");if(j){j.focus();let f=(Z1)=>{if(Z1.key==="Escape"||Z1.key==="ArrowUp"||Z1.key==="ArrowDown")Z1.preventDefault(),j.blur(),E(!0)};j.addEventListener("keydown",f),j.addEventListener("blur",()=>j.removeEventListener("keydown",f),{once:!0})}}}else if(I.key==="Escape")v(null),E(!1),y(null)};return document.addEventListener("keydown",A),()=>document.removeEventListener("keydown",A)},[c,C,b,u]),n1(()=>{let A=_.current;if(!A||c===null||!V)return;let L=t1(A)[c];if(!L)return;L.style.outline="2px solid var(--color-accent-blue)",L.style.outlineOffset="-2px",L.style.borderRadius="8px",L.scrollIntoView({block:"nearest",behavior:"smooth"});let d=z0(L),x=d?u.get(d):void 0;if(x)y(x);return()=>{L.style.outline="",L.style.outlineOffset="",L.style.borderRadius=""}},[c,V,u]);let h=M0(()=>Q?J1(Q,{},void 0,!1,void 0,this):null,[Q]);if(G)return J1("div",{className:"flex items-center justify-center h-64 text-text-tertiary font-body text-body",children:"Loading canvas..."},void 0,!1,void 0,this);if(Y)return J1("div",{className:"bg-accent-red-muted rounded-lg p-5",children:[J1("h3",{className:"font-body font-semibold text-accent-red mb-2",children:"Compilation Error"},void 0,!1,void 0,this),J1("pre",{className:"text-code font-mono text-text-secondary whitespace-pre-wrap",children:Y},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(!Q)return J1("div",{className:"text-text-tertiary text-center py-8 font-body text-body",children:"No canvas loaded"},void 0,!1,void 0,this);return J1(s8.Provider,{value:$,children:[J1("div",{ref:_,className:"plan-content plan-updated",children:h},void 0,!1,void 0,this),D&&J1(e8,{note:D.note,onSave:(A)=>{W(D.id,A),S(null)},onCancel:()=>S(null)},void 0,!1,void 0,this),l,J1(t8,{containerRef:_,hoveredBlock:M,focusedBlockIndex:c,blockPopover:C,blockAnnotationMap:u,activeAnnotationId:N,onOpen:(A,I,L)=>{if(L)y(L),k({anchorEl:A,snippet:I,annId:L});else k({anchorEl:A,snippet:I})}},void 0,!1,void 0,this),C&&!C.annId&&J1(Y0,{anchorEl:C.anchorEl,scrollContainer:g,snippet:C.snippet,truncateAt:80,onAdd:(A,I)=>{let L=B1();U(L,C.snippet,A,void 0,void 0,I,$),k(null)},onCancel:()=>k(null)},void 0,!1,void 0,this),C?.annId&&(()=>{let A=O.find((I)=>I.id===C.annId);if(!A)return null;return J1(X0,{anchorEl:C.anchorEl,scrollContainer:g,initialNote:A.note,initialImages:A.images,onUpdate:(I,L)=>{W(C.annId,I);let d=A.images||[];for(let x of L)if(!d.includes(x))K(C.annId,x);for(let x of d)if(!L.includes(x))F(C.annId,x)},onDelete:()=>{T(C.annId),y(null),k(null)},onClose:()=>k(null)},void 0,!1,void 0,this)})()]},void 0,!0,void 0,this)}function t1(Z){return Array.from(Z.querySelectorAll(C2))}function z0(Z){let $=Z.getAttribute("data-md");if($==="item"){let q=Z.getAttribute("data-md-label");return q?`[Item] ${q}`:null}if($==="section"){let q=Z.getAttribute("data-md-title");return q?`[Section] ${q}`:null}if($==="callout"){let q=Z.getAttribute("data-md-type")||"info",Q=Z.textContent?.trim().slice(0,60)||"Callout";return`[Callout:${q}] ${Q}`}if($==="note")return`[Note] ${Z.textContent?.trim().slice(0,60)||"Note"}`;if(Z.tagName==="TR"){let q=Array.from(Z.querySelectorAll("td")).map((Q)=>Q.textContent?.trim()).filter(Boolean);return q.length?`[Row] ${q.join(" | ")}`:null}if($==="checklist-item"){let q=Z.getAttribute("data-md-label");return q?`[Checklist] ${q}`:null}if($==="choice-option"||$==="multichoice-option"){let q=Z.getAttribute("data-md-label");return q?`[Option] ${q}`:null}if($==="userinput"){let q=Z.getAttribute("data-md-label");return q?`[Input] ${q}`:null}if($==="rangeinput"){let q=Z.getAttribute("data-md-label");return q?`[Range] ${q}`:null}if($==="image"){let q=Z.getAttribute("data-md-src");return q?`[Image] ${q}`:null}return null}function t8({containerRef:Z,hoveredBlock:$,focusedBlockIndex:q,blockPopover:Q,blockAnnotationMap:J,activeAnnotationId:Y,onOpen:X}){let[G,z]=w1([]);n1(()=>{let W=Z.current;if(!W||J.size===0){z([]);return}let K=[];for(let F of W.querySelectorAll(A2)){let N=z0(F);if(N&&J.has(N))K.push(F)}z(K)},[J,Z.current]);let[_,H]=w1(null);n1(()=>{if(!Y||!Z.current){H(null);return}for(let W of Z.current.querySelectorAll(C2)){let K=z0(W);if(K&&J.get(K)===Y){H(W);return}}H(null)},[Y,J]),n1(()=>{if(!_)return;return _.style.boxShadow="inset 0 0 0 1.5px var(--color-highlight-bg)",_.style.borderRadius="8px",()=>{_.style.boxShadow="",_.style.borderRadius=""}},[_]);let U=M0(()=>{if(q===null||!Z.current)return null;let W=t1(Z.current)[q];if(!W)return null;return W.matches(A2)?W:null},[q,Z.current]),T=M0(()=>{let W=new Set(G);if($)W.add($);if(U)W.add(U);if(Q?.anchorEl)W.add(Q.anchorEl);return Array.from(W)},[G,$,U,Q]);return J1($4,{children:T.map((W)=>J1(n8,{block:W,isHovered:W===$||W===U||W===Q?.anchorEl,blockAnnotationMap:J,activeAnnotationId:Y,onOpen:X},W.getAttribute("data-task-id")||W.getAttribute("data-md-title")||W.textContent?.slice(0,30)||"block",!1,void 0,this))},void 0,!1,void 0,this)}function n8({block:Z,isHovered:$,blockAnnotationMap:q,activeAnnotationId:Q,onOpen:J}){let Y=z0(Z);if(!Y)return null;let X=q.get(Y),G=!!X;return a8(J1("button",{"data-block-comment-btn":!0,onClick:(_)=>{_.stopPropagation(),J(_.currentTarget,Y,X)},className:`absolute top-1 right-1 z-10 w-6 h-6 flex items-center justify-center rounded transition-all duration-150 ${G?X===Q?"text-accent-amber bg-accent-amber-muted":"text-accent-amber opacity-60 hover:opacity-100":$?"text-text-disabled hover:text-text-tertiary opacity-50 hover:opacity-100":"text-text-disabled opacity-0 group-hover/section:opacity-20 hover:!opacity-80"}`,title:G?"Edit annotation":"Add annotation",children:J1("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:G?"currentColor":"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:J1("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),Z)}function e8({note:Z,onSave:$,onCancel:q}){let[Q,J]=j2.useState(Z),Y=j2.useRef(null);return j2.useEffect(()=>{Y.current?.focus(),Y.current?.select()},[]),J1("div",{className:"fixed inset-0 z-50 bg-black/40 flex items-center justify-center",onClick:q,children:J1("div",{className:"bg-bg-elevated border border-border-hover rounded-lg shadow-md p-4 w-80",onClick:(X)=>X.stopPropagation(),children:[J1("div",{className:"text-tiny uppercase tracking-widest text-text-tertiary font-body mb-2",children:"Edit annotation"},void 0,!1,void 0,this),J1("textarea",{ref:Y,value:Q,onChange:(X)=>J(X.target.value),className:"w-full bg-transparent border-none text-body font-body text-text-primary resize-vertical focus:outline-none min-h-[60px]",onKeyDown:(X)=>{if(X.key==="Enter"&&(X.ctrlKey||X.metaKey))$(Q.trim());if(X.key==="Escape")q()}},void 0,!1,void 0,this),J1("div",{className:"flex justify-end gap-2 mt-2",children:[J1("button",{onClick:q,className:"text-meta text-text-tertiary font-body px-3 py-1",children:"Cancel"},void 0,!1,void 0,this),J1("button",{onClick:()=>$(Q.trim()),className:"text-meta font-medium font-body px-3 py-1 rounded-md bg-highlight-bg text-text-primary border border-highlight-border",children:"Save"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}import K4,{useRef as m3,useEffect as o0,useCallback as k2,useState as m1,useContext as s0,useMemo as H4}from"react";function y0(Z,$,q,Q,J){let Y=[],X=Z.filter((W)=>W.source!=="remote"||J&&J.has(W.id)),G=X.filter((W)=>W.filePath===T1),z=X.filter((W)=>!W.filePath),_=X.filter((W)=>W.filePath&&W.filePath!==T1),H=q?Array.from(q.values()).filter((W)=>I2(W)):[],U=Q?Array.from(Q.values()).filter((W)=>W.markdown.trim()):[];if(H.length>0||U.length>0){Y.push("## Responses"),Y.push("");for(let W of H)Y.push(J4(W));for(let W of U)Y.push(W.markdown.trim()),Y.push("")}if(G.length>0){Y.push("## Annotations on agent response"),Y.push("");for(let W of G)Y.push(V2(W))}if(z.length>0){Y.push("## Canvas annotations"),Y.push("");let W=new Map;for(let N of z){let y=N.canvasFile||"";if(!W.has(y))W.set(y,[]);W.get(y).push(N)}let K=[...W.keys()].sort(),F=K.length>1||K.length===1&&K[0]!=="";for(let N of K){let y=W.get(N);if(F&&N)Y.push(`### ${N.replace(/\.jsx$/,"")}`),Y.push("");let O=Q4(y);Y.push(D3(O))}}if(_.length>0){let W={};for(let K of _){let F=K.filePath;if(!W[F])W[F]=[];W[F].push(K)}Y.push("## File annotations"),Y.push("");for(let[K,F]of Object.entries(W)){Y.push(`### ${K}`),Y.push("");for(let N of F)Y.push(V2(N))}}if($.trim())Y.push("## General notes"),Y.push(""),Y.push($.trim()),Y.push("");return Y.join(`
58
+ `}strong({tokens:Z}){return`<strong>${this.parser.parseInline(Z)}</strong>`}em({tokens:Z}){return`<em>${this.parser.parseInline(Z)}</em>`}codespan({text:Z}){return`<code>${S1(Z,!0)}</code>`}br(Z){return"<br>"}del({tokens:Z}){return`<del>${this.parser.parseInline(Z)}</del>`}link({href:Z,title:$,tokens:q}){let Q=this.parser.parseInline(q),J=s2(Z);if(J===null)return Q;Z=J;let Y='<a href="'+Z+'"';return $&&(Y+=' title="'+S1($)+'"'),Y+=">"+Q+"</a>",Y}image({href:Z,title:$,text:q,tokens:Q}){Q&&(q=this.parser.parseInline(Q,this.parser.textRenderer));let J=s2(Z);if(J===null)return S1(q);Z=J;let Y=`<img src="${Z}" alt="${S1(q)}"`;return $&&(Y+=` title="${S1($)}"`),Y+=">",Y}text(Z){return"tokens"in Z&&Z.tokens?this.parser.parseInline(Z.tokens):("escaped"in Z)&&Z.escaped?Z.text:S1(Z.text)}},M2=class{strong({text:Z}){return Z}em({text:Z}){return Z}codespan({text:Z}){return Z}del({text:Z}){return Z}html({text:Z}){return Z}text({text:Z}){return Z}link({text:Z}){return""+Z}image({text:Z}){return""+Z}br(){return""}checkbox({raw:Z}){return Z}},B1=class Z{options;renderer;textRenderer;constructor($){this.options=$||l1,this.options.renderer=this.options.renderer||new x0,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new M2}static parse($,q){return new Z(q).parse($)}static parseInline($,q){return new Z(q).parseInline($)}parse($){this.renderer.parser=this;let q="";for(let Q=0;Q<$.length;Q++){let J=$[Q];if(this.options.extensions?.renderers?.[J.type]){let X=J,G=this.options.extensions.renderers[X.type].call({parser:this},X);if(G!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(X.type)){q+=G||"";continue}}let Y=J;switch(Y.type){case"space":{q+=this.renderer.space(Y);break}case"hr":{q+=this.renderer.hr(Y);break}case"heading":{q+=this.renderer.heading(Y);break}case"code":{q+=this.renderer.code(Y);break}case"table":{q+=this.renderer.table(Y);break}case"blockquote":{q+=this.renderer.blockquote(Y);break}case"list":{q+=this.renderer.list(Y);break}case"checkbox":{q+=this.renderer.checkbox(Y);break}case"html":{q+=this.renderer.html(Y);break}case"def":{q+=this.renderer.def(Y);break}case"paragraph":{q+=this.renderer.paragraph(Y);break}case"text":{q+=this.renderer.text(Y);break}default:{let X='Token with "'+Y.type+'" type was not found.';if(this.options.silent)return console.error(X),"";throw Error(X)}}}return q}parseInline($,q=this.renderer){this.renderer.parser=this;let Q="";for(let J=0;J<$.length;J++){let Y=$[J];if(this.options.extensions?.renderers?.[Y.type]){let G=this.options.extensions.renderers[Y.type].call({parser:this},Y);if(G!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(Y.type)){Q+=G||"";continue}}let X=Y;switch(X.type){case"escape":{Q+=q.text(X);break}case"html":{Q+=q.html(X);break}case"link":{Q+=q.link(X);break}case"image":{Q+=q.image(X);break}case"checkbox":{Q+=q.checkbox(X);break}case"strong":{Q+=q.strong(X);break}case"em":{Q+=q.em(X);break}case"codespan":{Q+=q.codespan(X);break}case"br":{Q+=q.br(X);break}case"del":{Q+=q.del(X);break}case"text":{Q+=q.text(X);break}default:{let G='Token with "'+X.type+'" type was not found.';if(this.options.silent)return console.error(G),"";throw Error(G)}}}return Q}},O0=class{options;block;constructor(Z){this.options=Z||l1}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(Z){return Z}postprocess(Z){return Z}processAllTokens(Z){return Z}emStrongMask(Z){return Z}provideLexer(Z=this.block){return Z?O1.lex:O1.lexInline}provideParser(Z=this.block){return Z?B1.parse:B1.parseInline}},B8=class{defaults=H2();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=B1;Renderer=x0;TextRenderer=M2;Lexer=O1;Tokenizer=m0;Hooks=O0;constructor(...Z){this.use(...Z)}walkTokens(Z,$){let q=[];for(let Q of Z)switch(q=q.concat($.call(this,Q)),Q.type){case"table":{let J=Q;for(let Y of J.header)q=q.concat(this.walkTokens(Y.tokens,$));for(let Y of J.rows)for(let X of Y)q=q.concat(this.walkTokens(X.tokens,$));break}case"list":{let J=Q;q=q.concat(this.walkTokens(J.items,$));break}default:{let J=Q;this.defaults.extensions?.childTokens?.[J.type]?this.defaults.extensions.childTokens[J.type].forEach((Y)=>{let X=J[Y].flat(1/0);q=q.concat(this.walkTokens(X,$))}):J.tokens&&(q=q.concat(this.walkTokens(J.tokens,$)))}}return q}use(...Z){let $=this.defaults.extensions||{renderers:{},childTokens:{}};return Z.forEach((q)=>{let Q={...q};if(Q.async=this.defaults.async||Q.async||!1,q.extensions&&(q.extensions.forEach((J)=>{if(!J.name)throw Error("extension name required");if("renderer"in J){let Y=$.renderers[J.name];Y?$.renderers[J.name]=function(...X){let G=J.renderer.apply(this,X);return G===!1&&(G=Y.apply(this,X)),G}:$.renderers[J.name]=J.renderer}if("tokenizer"in J){if(!J.level||J.level!=="block"&&J.level!=="inline")throw Error("extension level must be 'block' or 'inline'");let Y=$[J.level];Y?Y.unshift(J.tokenizer):$[J.level]=[J.tokenizer],J.start&&(J.level==="block"?$.startBlock?$.startBlock.push(J.start):$.startBlock=[J.start]:J.level==="inline"&&($.startInline?$.startInline.push(J.start):$.startInline=[J.start]))}"childTokens"in J&&J.childTokens&&($.childTokens[J.name]=J.childTokens)}),Q.extensions=$),q.renderer){let J=this.defaults.renderer||new x0(this.defaults);for(let Y in q.renderer){if(!(Y in J))throw Error(`renderer '${Y}' does not exist`);if(["options","parser"].includes(Y))continue;let X=Y,G=q.renderer[X],z=J[X];J[X]=(..._)=>{let H=G.apply(J,_);return H===!1&&(H=z.apply(J,_)),H||""}}Q.renderer=J}if(q.tokenizer){let J=this.defaults.tokenizer||new m0(this.defaults);for(let Y in q.tokenizer){if(!(Y in J))throw Error(`tokenizer '${Y}' does not exist`);if(["options","rules","lexer"].includes(Y))continue;let X=Y,G=q.tokenizer[X],z=J[X];J[X]=(..._)=>{let H=G.apply(J,_);return H===!1&&(H=z.apply(J,_)),H}}Q.tokenizer=J}if(q.hooks){let J=this.defaults.hooks||new O0;for(let Y in q.hooks){if(!(Y in J))throw Error(`hook '${Y}' does not exist`);if(["options","block"].includes(Y))continue;let X=Y,G=q.hooks[X],z=J[X];O0.passThroughHooks.has(Y)?J[X]=(_)=>{if(this.defaults.async&&O0.passThroughHooksRespectAsync.has(Y))return(async()=>{let U=await G.call(J,_);return z.call(J,U)})();let H=G.call(J,_);return z.call(J,H)}:J[X]=(..._)=>{if(this.defaults.async)return(async()=>{let U=await G.apply(J,_);return U===!1&&(U=await z.apply(J,_)),U})();let H=G.apply(J,_);return H===!1&&(H=z.apply(J,_)),H}}Q.hooks=J}if(q.walkTokens){let J=this.defaults.walkTokens,Y=q.walkTokens;Q.walkTokens=function(X){let G=[];return G.push(Y.call(this,X)),J&&(G=G.concat(J.call(this,X))),G}}this.defaults={...this.defaults,...Q}}),this}setOptions(Z){return this.defaults={...this.defaults,...Z},this}lexer(Z,$){return O1.lex(Z,$??this.defaults)}parser(Z,$){return B1.parse(Z,$??this.defaults)}parseMarkdown(Z){return($,q)=>{let Q={...q},J={...this.defaults,...Q},Y=this.onError(!!J.silent,!!J.async);if(this.defaults.async===!0&&Q.async===!1)return Y(Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof $>"u"||$===null)return Y(Error("marked(): input parameter is undefined or null"));if(typeof $!="string")return Y(Error("marked(): input parameter is of type "+Object.prototype.toString.call($)+", string expected"));if(J.hooks&&(J.hooks.options=J,J.hooks.block=Z),J.async)return(async()=>{let X=J.hooks?await J.hooks.preprocess($):$,G=await(J.hooks?await J.hooks.provideLexer(Z):Z?O1.lex:O1.lexInline)(X,J),z=J.hooks?await J.hooks.processAllTokens(G):G;J.walkTokens&&await Promise.all(this.walkTokens(z,J.walkTokens));let _=await(J.hooks?await J.hooks.provideParser(Z):Z?B1.parse:B1.parseInline)(z,J);return J.hooks?await J.hooks.postprocess(_):_})().catch(Y);try{J.hooks&&($=J.hooks.preprocess($));let X=(J.hooks?J.hooks.provideLexer(Z):Z?O1.lex:O1.lexInline)($,J);J.hooks&&(X=J.hooks.processAllTokens(X)),J.walkTokens&&this.walkTokens(X,J.walkTokens);let G=(J.hooks?J.hooks.provideParser(Z):Z?B1.parse:B1.parseInline)(X,J);return J.hooks&&(G=J.hooks.postprocess(G)),G}catch(X){return Y(X)}}}onError(Z,$){return(q)=>{if(q.message+=`
59
+ Please report this to https://github.com/markedjs/marked.`,Z){let Q="<p>An error occurred:</p><pre>"+S1(q.message+"",!0)+"</pre>";return $?Promise.resolve(Q):Q}if($)return Promise.reject(q);throw q}}},r1=new B8;function e(Z,$){return r1.parse(Z,$)}e.options=e.setOptions=function(Z){return r1.setOptions(Z),e.defaults=r1.defaults,e2(e.defaults),e};e.getDefaults=H2;e.defaults=l1;e.use=function(...Z){return r1.use(...Z),e.defaults=r1.defaults,e2(e.defaults),e};e.walkTokens=function(Z,$){return r1.walkTokens(Z,$)};e.parseInline=r1.parseInline;e.Parser=B1;e.parser=B1.parse;e.Renderer=x0;e.TextRenderer=M2;e.Lexer=O1;e.lexer=O1.lex;e.Tokenizer=m0;e.Hooks=O0;e.parse=e;var{options:E6,setOptions:m6,use:x6,walkTokens:u6,parseInline:g6}=e;var f6=B1.parse,v6=O1.lex;import{SessionContext as w5,ActiveViewCtx as C6}from"#canvas/runtime";import{useState as M0,useCallback as b1,useEffect as L8,useRef as M8,useMemo as P8}from"react";import{AnnotationCtx as y8}from"#canvas/runtime";function f0(Z,$){return`canvas:${Z}:rev:${$}`}function F0(Z,$){return`${f0(Z,$)}:draft-handled`}function Y0(Z,$,q){try{Z.removeItem(f0($,q)),Z.removeItem(F0($,q))}catch{}}function G3(Z){if(!Z)return null;try{let $=JSON.parse(Z);return typeof $==="object"&&$!==null&&!Array.isArray($)?$:null}catch{return null}}function F8(Z){if(!Array.isArray(Z)||Z.length<2)return!1;let $=Z[1];if(typeof $!=="object"||$===null||Array.isArray($))return!1;let q=Reflect.get($,"note");if(typeof q==="string"&&q.trim().length>0)return!0;let Q=Reflect.get($,"value");if(typeof Q==="string")return Q.trim().length>0;if(Array.isArray(Q))return Q.length>0;return Q!==null&&Q!==void 0}function U3(Z){if(!Z)return!1;let $=Reflect.get(Z,"annotations");if(Array.isArray($)&&$.length>0)return!0;let q=Reflect.get(Z,"generalNote");if(typeof q==="string"&&q.trim().length>0)return!0;let Q=Reflect.get(Z,"responses");return Array.isArray(Q)&&Q.some(F8)}function P2(Z,$,q,Q){try{let J=f0($,q);if(U3(G3(Z.getItem(J))))return Z.setItem(F0($,q),"1"),null;if(Z.getItem(F0($,q))!==null)return null;let Y=Q.filter((X)=>X.revision<q).sort((X,G)=>G.revision-X.revision);for(let X of Y){if(X.hasFeedback)return null;let G=G3(Z.getItem(f0($,X.revision)));if(!U3(G)){if(Z.getItem(F0($,X.revision))!==null)return null;continue}return Z.setItem(J,JSON.stringify({...G,feedbackEntries:[]})),Z.setItem(F0($,q),"1"),X.revision}}catch{}return null}var T1="__agent-response__";function F1(){return`ann-${Date.now()}-${Math.random().toString(36).slice(2,6)}`}function L0(Z,$){Z.style.height="auto",Z.style.height=($?Math.max($,Z.scrollHeight):Z.scrollHeight)+"px"}import{useAnnotations as Y1}from"#canvas/runtime";import{jsxDEV as j8}from"react/jsx-dev-runtime";function K3(Z,$){return`canvas:${Z}:rev:${$}`}function v0(Z,$){try{let q=localStorage.getItem(K3(Z,$));if(!q)return null;return JSON.parse(q)}catch{return null}}function S8(Z,$,q){try{localStorage.setItem(K3(Z,$),JSON.stringify(q))}catch{}}function H3({sessionId:Z,revision:$,isReadOnly:q,remoteAnnotations:Q,children:J}){let[Y,X]=M0(()=>{return(v0(Z,$)?.annotations??[]).map((E)=>({...E,source:E.source??"local"}))}),G=P8(()=>{if(!Q||Q.length===0)return Y;let V=new Set(Y.map((g)=>g.id)),E=Q.filter((g)=>!V.has(g.id));return[...Y,...E.map((g)=>({...g,source:"remote"}))]},[Y,Q]),[z,_]=M0(()=>{return v0(Z,$)?.generalNote??""}),[H,U]=M0(null),[T,W]=M0(()=>{let V=v0(Z,$);return V?.responses?new Map(V.responses):new Map}),[K,F]=M0(()=>{let V=v0(Z,$);return V?.feedbackEntries?new Map(V.feedbackEntries):new Map}),N=M8(null);L8(()=>{if(q)return;if(N.current)clearTimeout(N.current);return N.current=setTimeout(()=>{S8(Z,$,{annotations:Y,generalNote:z,responses:Array.from(T.entries()),feedbackEntries:Array.from(K.entries())})},300),()=>{if(N.current)clearTimeout(N.current)}},[Y,z,T,K,Z,$,q]);let y=b1((V,E,g,l,j,u,h)=>{X((A)=>[...A,{id:V,snippet:E,note:g,createdAt:new Date().toISOString(),filePath:l,context:j,...u?.length?{images:u}:{},...h?{canvasFile:h}:{}}])},[]),O=b1((V,E,g)=>{y(F1(),V,E,g)},[y]),D=b1((V,E)=>{X((g)=>g.map((l)=>l.id===V?{...l,note:E}:l))},[]),S=b1((V)=>{b8(V),X((E)=>E.filter((g)=>g.id!==V)),U((E)=>E===V?null:E)},[]),M=b1((V,E)=>{X((g)=>g.map((l)=>l.id===V?{...l,images:[...l.images||[],E]}:l))},[]),b=b1((V,E)=>{X((g)=>g.map((l)=>l.id===V?{...l,images:(l.images||[]).filter((j)=>j!==E)}:l))},[]),C=b1((V,E)=>{W((g)=>{let l=new Map(g);return l.set(V,E),l})},[]),k=b1((V,E)=>{F((g)=>{let l=g.get(V);if(l&&l.markdown===E.markdown&&l.label===E.label&&l.required===E.required)return g;let j=new Map(g);return j.set(V,E),j})},[]),c=b1((V)=>{F((E)=>{if(!E.has(V))return E;let g=new Map(E);return g.delete(V),g})},[]),v=b1(()=>{for(let V of document.querySelectorAll("[data-annotation-id]"))W3(V);X([]),_(""),U(null),W(new Map),F(new Map),Y0(localStorage,Z,$)},[Z,$]);return j8(y8.Provider,{value:{annotations:G,addAnnotation:O,addAnnotationWithId:y,updateAnnotation:D,removeAnnotation:S,addAnnotationImage:M,removeAnnotationImage:b,generalNote:z,setGeneralNote:_,clearAll:v,activeAnnotationId:H,setActiveAnnotationId:U,responses:T,setResponse:C,feedbackEntries:K,setFeedbackEntry:k,removeFeedbackEntry:c},children:J},void 0,!1,void 0,this)}function b8(Z){let $=document.querySelectorAll(`[data-annotation-id="${Z}"]`);for(let q of $)W3(q)}function W3(Z){let $=Z.parentNode;if(!$)return;let q=document.createTextNode(Z.textContent||"");$.replaceChild(q,Z),$.normalize()}import C2,{useEffect as e1,useState as j1,useRef as i8,useContext as a8,useMemo as y0}from"react";import{createPortal as o8}from"react-dom";import{SessionContext as s8,CanvasFileCtx as t8}from"#canvas/runtime";function i1(Z,$){let q=T3(Z,"before",60),Q=T3(Z,"after",60),J=A8(Z.startContainer,$);return{before:q,after:Q,hierarchy:J}}function T3(Z,$,q){let Q=w8($==="before"?Z.startContainer:Z.endContainer);if(!Q)return"";let J="";if($==="before"){let Y=document.createTreeWalker(Q,NodeFilter.SHOW_TEXT),X;while(X=Y.nextNode()){if(X===Z.startContainer){J+=(X.textContent||"").slice(0,Z.startOffset);break}if(X.parentElement?.hasAttribute("data-annotation-id"))continue;J+=X.textContent||""}if(J.length>q){J=J.slice(-q);let G=J.indexOf(" ");if(G>0)J=J.slice(G+1)}}else{let Y=document.createTreeWalker(Q,NodeFilter.SHOW_TEXT),X=!1,G;while(G=Y.nextNode()){if(G===Z.endContainer){J+=(G.textContent||"").slice(Z.endOffset),X=!0;continue}if(X){if(G.parentElement?.hasAttribute("data-annotation-id"))continue;J+=G.textContent||""}}if(J.length>q){J=J.slice(0,q);let z=J.lastIndexOf(" ");if(z>0)J=J.slice(0,z)}}return J.trim()}function w8(Z){let $=new Set(["DIV","P","LI","PRE","BLOCKQUOTE","SECTION","ARTICLE"]),q=Z.parentElement;while(q){if($.has(q.tagName))return q;q=q.parentElement}return null}function A8(Z,$){let q=[],Q=Z instanceof Element?Z:Z.parentElement;while(Q&&Q!==$){let J=Q.getAttribute?.("data-task-id");if(J){let Y=Q.querySelector(".font-semibold");if(Y)q.unshift(Y.textContent?.trim()||J)}if(Q.tagName==="DIV"&&Q.querySelector(":scope > button .font-heading, :scope > div .font-heading")){let Y=Q.querySelector(".font-heading");if(Y)q.unshift(Y.textContent?.trim()||"")}Q=Q.parentElement}return q}function y2(Z){let $=Z.snippet.trim(),q=Z.context,Q=$.length<30;if(q&&Q&&(q.before||q.after)){let J=[];if(q.before)J.push(`...${q.before} `);if(J.push(`**${$}**`),q.after)J.push(` ${q.after}...`);return J.join("")}return $}import{useEffect as g8,useRef as c0,useState as X0,useCallback as p0,useMemo as C3,useContext as f8}from"react";import{createPortal as v8}from"react-dom";function N3(Z,$){let J=$||document.body,Y=Z.getBoundingClientRect(),X=J.getBoundingClientRect(),G=J===document.body?window.scrollY:J.scrollTop,z=Y.bottom-X.top+G+8,_=Math.max(0,Math.min(Y.left-X.left,X.width-280-12));return J.style.position="relative",{style:{position:"absolute",top:`${z}px`,left:`${_}px`},parent:J}}import{useState as b2,useRef as j2,useCallback as V1,useEffect as x8}from"react";var O3={alg:"AES-GCM",v:1};async function B3(Z){let $=V8(Z);return crypto.subtle.importKey("raw",$,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}async function m1(Z,$){let q=crypto.getRandomValues(new Uint8Array(12)),Q=new TextEncoder().encode($),J=await crypto.subtle.encrypt({name:"AES-GCM",iv:q},Z,Q),Y=new Uint8Array(q.byteLength+J.byteLength);return Y.set(q,0),Y.set(new Uint8Array(J),q.byteLength),C8(Y)}async function P0(Z,$){let q=F3($);if(q.byteLength<28)throw Error("Ciphertext too short");let Q=q.subarray(0,12),J=q.subarray(12),Y=await crypto.subtle.decrypt({name:"AES-GCM",iv:Q},Z,J);return new TextDecoder().decode(Y)}function C8(Z){let $="",q=32768;for(let Q=0;Q<Z.byteLength;Q+=q)$+=String.fromCharCode.apply(null,Array.from(Z.subarray(Q,Q+q)));return btoa($)}function F3(Z){let $=atob(Z),q=new Uint8Array($.length);for(let Q=0;Q<$.length;Q++)q[Q]=$.charCodeAt(Q);return q}function V8(Z){let $=Z.replace(/-/g,"+").replace(/_/g,"/")+"===".slice((Z.length+3)%4);return F3($)}function I8(){if(typeof window>"u")return null;let Z=window.location.hash.replace(/^#/,"");if(!Z)return null;for(let $ of Z.split("&")){let[q,Q]=$.split("=");if(q==="k"&&Q)return decodeURIComponent(Q)}return null}function R8(){if(typeof window<"u"&&window.__CANVAS_SHARE__?.shareId){let $=I8();return{isShared:!0,shareId:window.__CANVAS_SHARE__.shareId,encryptionKey:$?B3($):null}}return{isShared:!1,sessionId:typeof window<"u"?window.location.pathname.replace("/s/",""):""}}var $1=R8();function D8(){return $1.isShared&&$1.encryptionKey!==null}function k8(){if($1.isShared)return`/s/${$1.shareId}/meta`;return`/api/session/${$1.sessionId}/meta`}function E8(Z,$){let q=Z.replace(/\.jsx$/,".js");if($1.isShared)return`/s/${$1.shareId}/canvas/${encodeURIComponent(q)}`;let Q=$?`?rev=${$}&t=${Date.now()}`:`?t=${Date.now()}`;return`/api/session/${$1.sessionId}/canvas/${encodeURIComponent(q)}${Q}`}function L3(){if($1.isShared)return`/s/${$1.shareId}/upload`;return`/api/session/${$1.sessionId}/upload`}async function M3(){let Z=await fetch(k8());if(!Z.ok)throw Error(`meta ${Z.status}`);let $=await Z.json();if($.encryption&&$1.isShared&&$1.encryptionKey){let q=await $1.encryptionKey;if($.origin){let J={...$.origin};if(J.sessionId)J.sessionId=await P0(q,J.sessionId);if(J.label)J.label=await P0(q,J.label);$.origin=J}let Q=$.revisions;if(Array.isArray(Q)){for(let J of Q)if(J.label)try{J.label=await P0(q,J.label)}catch{}}}return $}async function P3(Z,$){let q=E8(Z,$);if(!D8())return import(q);let Q=await fetch(q);if(!Q.ok)throw Error(`canvas ${Q.status}`);let J=await Q.text(),Y=await $1.encryptionKey,X=await P0(Y,J),G=new Blob([X],{type:"application/javascript"}),z=URL.createObjectURL(G);try{return await import(z)}finally{setTimeout(()=>URL.revokeObjectURL(z),0)}}var y3="canvas-reviewer-identity";function S2(){try{let Z=localStorage.getItem(y3);if(!Z)return null;return JSON.parse(Z)}catch{return null}}function S3(Z){let $=S2();if(!$)$={id:crypto.randomUUID?.()||String(Date.now()),name:Z};else $.name=Z;return localStorage.setItem(y3,JSON.stringify($)),$}async function m8(Z,$){let q=await Promise.all(Z.annotations.map(async(Q)=>{let J={id:Q.id,createdAt:Q.createdAt,snippet:await m1($,String(Q.snippet??"")),note:await m1($,String(Q.note??""))};if(Q.filePath)J.filePath=await m1($,String(Q.filePath));if(Q.canvasFile)J.canvasFile=await m1($,String(Q.canvasFile));if(Q.context!==void 0&&Q.context!==null)J.context=await m1($,JSON.stringify(Q.context));if(Q.attachments)J.attachments=Q.attachments;return J}));return{author:{id:Z.author.id,name:await m1($,Z.author.name)},revision:Z.revision,annotations:q,...Z.generalNote?{generalNote:await m1($,Z.generalNote)}:{},encryption:O3}}async function b3(Z){if(!$1.isShared)throw Error("submitSharedFeedback called outside shared mode");let $=Z;if($1.encryptionKey){let Q=await $1.encryptionKey;$=await m8(Z,Q)}let q=await fetch(`/s/${$1.shareId}/feedback`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify($)});if(!q.ok){let Q=await q.text().catch(()=>"");throw Error(`Feedback submission failed: ${q.status} ${Q}`)}}var L1=!$1.isShared,j3=!$1.isShared;import{jsxDEV as z1}from"react/jsx-dev-runtime";function w3(Z){if(Z.startsWith("/s/")||Z.startsWith("http://")||Z.startsWith("https://"))return Z;return`/api/uploads/${Z.split("/").pop()}`}async function u8(Z,$){let q=new FormData;q.append("image",$);try{let J=await(await fetch(L3(),{method:"POST",body:q})).json();if($1.isShared)return J.url||null;return J.path||null}catch{return null}}function h0({note:Z,onNoteChange:$,images:q,onAddImage:Q,onRemoveImage:J,sessionId:Y,placeholder:X="Add your note...",autoFocus:G=!1,autoResize:z=!1,readOnly:_=!1,onKeyDown:H,onTextareaClick:U,textareaRef:T,textareaClassName:W,textareaStyle:K,minHeight:F,attachButton:N="always",openFilePickerRef:y}){let[O,D]=b2(!1),[S,M]=b2(!1),[b,C]=b2(!1),k=j2(0),c=j2(null),v=j2(null),V=V1(()=>v.current?.click(),[]);if(y)y.current=V;let E=V1((x)=>{if(c.current=x,T)T.current=x;if(x&&z)L0(x,F)},[T,z,F]);x8(()=>{if(G&&c.current){let x=c.current;if(x.focus(),x.value)x.setSelectionRange(x.value.length,x.value.length)}},[G]);let g=V1(async(x)=>{if(!x.type.startsWith("image/"))return;M(!0);try{let s=await u8(Y,x);if(s)Q(s)}finally{M(!1)}},[Y,Q]),l=V1((x)=>{let s=x.clipboardData.items;for(let w of s)if(w.type.startsWith("image/")){x.preventDefault();let f=w.getAsFile();if(f)g(f);return}},[g]),j=V1((x)=>{if(x.preventDefault(),k.current++,k.current===1)D(!0)},[]),u=V1((x)=>{x.preventDefault()},[]),h=V1((x)=>{if(x.preventDefault(),k.current--,k.current===0)D(!1)},[]),A=V1((x)=>{x.preventDefault(),k.current=0,D(!1);for(let s of x.dataTransfer.files)if(s.type.startsWith("image/"))g(s)},[g]),I=V1((x)=>{if($(x.target.value),z)x.target.style.height="auto",x.target.style.height=(F?Math.max(F,x.target.scrollHeight):x.target.scrollHeight)+"px"},[$,z,F]),L="w-full bg-transparent text-[13px] font-body text-text-primary resize-none focus:outline-none leading-relaxed p-0 border-none",d={width:"100%",background:"transparent",border:"none",color:"var(--color-text-primary)",fontFamily:"'Inter', sans-serif",fontSize:"13px",lineHeight:"1.5",outline:"none",...z?{resize:"none",overflow:"hidden"}:{resize:"vertical"}},m=!_&&(N==="always"||N==="on-focus"&&b);return z1("div",{style:{position:"relative"},onDragEnter:_?void 0:j,onDragOver:_?void 0:u,onDragLeave:_?void 0:h,onDrop:_?void 0:A,children:[z1("textarea",{ref:E,value:Z,onChange:_?void 0:I,onPaste:_?void 0:l,onKeyDown:H,onClick:U,onFocus:()=>C(!0),onBlur:()=>{setTimeout(()=>C(!1),150)},readOnly:_,placeholder:X,className:W??L,style:K??d,rows:z?1:void 0},void 0,!1,void 0,this),!_&&z1("input",{ref:v,type:"file",accept:"image/*",multiple:!0,style:{display:"none"},onChange:(x)=>{let s=x.target.files;if(s)for(let w of s)g(w);x.target.value=""}},void 0,!1,void 0,this),(q.length>0||m)&&z1("div",{style:{display:"flex",gap:"6px",flexWrap:"wrap",marginTop:"6px",alignItems:"center"},children:[q.map((x)=>z1("div",{style:{position:"relative",width:"56px",height:"56px",borderRadius:"6px",overflow:"hidden",border:"1px solid var(--color-border-subtle)",flexShrink:0},children:[z1("img",{src:w3(x),alt:"",style:{width:"100%",height:"100%",objectFit:"cover",display:"block"}},void 0,!1,void 0,this),!_&&z1("button",{onClick:(s)=>{s.stopPropagation(),J(x)},style:{position:"absolute",top:"2px",right:"2px",width:"16px",height:"16px",borderRadius:"50%",background:"rgba(0,0,0,0.6)",color:"white",border:"none",cursor:"pointer",fontSize:"11px",display:"flex",alignItems:"center",justifyContent:"center",lineHeight:1,padding:0},title:"Remove image",children:"×"},void 0,!1,void 0,this)]},x,!0,void 0,this)),m&&z1(w2,{onClick:V},void 0,!1,void 0,this)]},void 0,!0,void 0,this),S&&z1("div",{style:{fontSize:"11px",color:"var(--color-text-tertiary)",fontFamily:"'Inter', sans-serif",marginTop:"4px"},children:"Uploading..."},void 0,!1,void 0,this),O&&z1("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",background:"var(--color-highlight-bg)",opacity:0.9,border:"2px dashed var(--color-highlight-border)",borderRadius:"6px",zIndex:10,pointerEvents:"none",fontSize:"12px",fontFamily:"'Inter', sans-serif",color:"var(--color-text-secondary)"},children:"Drop image"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function w2({onClick:Z,size:$=16}){return z1("button",{onClick:(q)=>{q.stopPropagation(),Z()},style:{width:`${$*2}px`,height:`${$*2}px`,borderRadius:"6px",border:"none",background:"transparent",cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",color:"var(--color-text-tertiary)",flexShrink:0,transition:"color 0.15s"},title:"Attach image",onMouseEnter:(q)=>{q.currentTarget.style.color="var(--color-text-secondary)"},onMouseLeave:(q)=>{q.currentTarget.style.color="var(--color-text-tertiary)"},children:z1("svg",{width:$,height:$,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[z1("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"},void 0,!1,void 0,this),z1("circle",{cx:"8.5",cy:"8.5",r:"1.5"},void 0,!1,void 0,this),z1("polyline",{points:"21 15 16 10 5 21"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function A3({images:Z}){if(!Z.length)return null;return z1("div",{style:{display:"flex",gap:"6px",flexWrap:"wrap",marginTop:"6px"},children:Z.map(($)=>z1("div",{style:{width:"56px",height:"56px",borderRadius:"6px",overflow:"hidden",border:"1px solid var(--color-border-subtle)",flexShrink:0},children:z1("img",{src:w3($),alt:"",style:{width:"100%",height:"100%",objectFit:"cover",display:"block"}},void 0,!1,void 0,this)},$,!1,void 0,this))},void 0,!1,void 0,this)}import{SessionContext as h8}from"#canvas/runtime";import{jsxDEV as _1,Fragment as c8}from"react/jsx-dev-runtime";function p8({anchorEl:Z,scrollContainer:$,onClose:q,ignoreSelector:Q,zIndex:J="50",padding:Y="12px",width:X="280px",children:G}){let z=c0(null),_=c0(q);_.current=q;let{style:H,parent:U}=N3(Z,$);return g8(()=>{let T=setTimeout(()=>{let W=(K)=>{if(z.current&&!z.current.contains(K.target)){if(Q&&K.target.closest?.(Q))return;_.current(),document.removeEventListener("mousedown",W)}};return document.addEventListener("mousedown",W),()=>document.removeEventListener("mousedown",W)},0);return()=>clearTimeout(T)},[Q]),v8(_1("div",{ref:z,style:{...H,zIndex:J,width:X,background:"var(--color-bg-elevated)",border:"1px solid var(--color-border-hover)",borderRadius:"8px",boxShadow:"0 4px 12px var(--color-shadow)",padding:Y,fontFamily:"'Inter', sans-serif"},children:G},void 0,!1,void 0,this),U)}var I3=[{label:"Clarity",items:["Unclear","Why?","Needs example","Missing context"]},{label:"Scope",items:["Overkill","Out of scope","Important","Risky"]},{label:"Action",items:["Simplify","Rethink","Expand on this","Skip this"]}],V3=I3.flatMap((Z)=>Z.items);function R3({anchorEl:Z,scrollContainer:$,snippet:q,truncateAt:Q=100,header:J,initialNote:Y="",initialImages:X,onConfirm:G,onCancel:z,onDelete:_}){let H=f8(h8),U=Y!==""||!!_,[T,W]=X0(Y),[K,F]=X0(X||[]),[N,y]=X0(null),[O,D]=X0(U),[S,M]=X0(!1),b=c0(null),C=c0(null),k=p0(()=>{if(T.trim()||K.length>0)G(T.trim(),K);else if(U&&_)_();else z()},[T,K,G,z,U,_]),c=p0(()=>{if(U){if(!T.trim()&&K.length===0&&_){_(),z();return}G(T,K);return}z()},[T,K,U,G,z,_]),v=!U,V=T.trim().length>0?V3.filter((w)=>w.toLowerCase().startsWith(T.trim().toLowerCase())):V3,E=!v||O?[]:V.length===1&&V[0].toLowerCase()===T.trim().toLowerCase()?[]:V,g=new Set(E),l=I3.map((w)=>({label:w.label,items:w.items.filter((f)=>g.has(f))})).filter((w)=>w.items.length>0),j=l.map((w)=>w.items),u=j.flat(),h=C3(()=>{if(N===null)return 0;let w=0;for(let f=0;f<j.length;f++){if(N<w+j[f].length)return f;w+=j[f].length}return 0},[N,j]),A=C3(()=>{if(N===null)return 0;let w=0;for(let f=0;f<h;f++)w+=j[f].length;return N-w},[N,h,j]),I=(w,f)=>{let Z1=0;for(let U1=0;U1<w;U1++)Z1+=j[U1].length;return Z1+f},[L,d]=X0(T);if(T!==L)d(T),y(null),D(U);let m=p0((w)=>{W(w)},[]),x=q.length>Q?q.slice(0,Q)+"...":q,s=p0((w)=>{if(u.length>0&&(w.key==="ArrowDown"||w.key==="ArrowUp"||w.key==="ArrowLeft"||w.key==="ArrowRight")){if(w.preventDefault(),N===null){y(0);return}if(w.key==="ArrowDown"){let f=Math.min(A+1,j[h].length-1);y(I(h,f))}else if(w.key==="ArrowUp"){let f=Math.max(A-1,0);y(I(h,f))}else if(w.key==="ArrowRight"){let f=Math.min(h+1,j.length-1),Z1=Math.min(A,j[f].length-1);y(I(f,Z1))}else if(w.key==="ArrowLeft"){let f=Math.max(h-1,0),Z1=Math.min(A,j[f].length-1);y(I(f,Z1))}return}if(N!==null&&u.length>0){if(w.key==="Tab"){w.preventDefault(),m(u[N]);return}if(w.key==="Enter"&&!w.shiftKey){w.preventDefault(),G(u[N],K);return}}if(w.key==="Enter"&&!w.shiftKey){w.preventDefault(),k();return}if(w.key==="Escape")if(u.length>0&&!O)D(!0);else if(U)c();else z()},[u,N,A,h,j,I,m,G,K,k,O,U,c,z]);return _1(p8,{anchorEl:Z,scrollContainer:$,onClose:U?c:z,ignoreSelector:U?"[data-annotation-id]":void 0,zIndex:U?"60":"50",padding:U?"10px 12px":"12px",width:"420px",children:[!U&&(J??_1("div",{style:{fontSize:"11px",color:"var(--color-text-tertiary)",fontStyle:"italic",marginBottom:"8px",lineHeight:"1.4",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",overflow:"hidden"},children:["“",x,"”"]},void 0,!0,void 0,this)),_1(h0,{note:T,onNoteChange:W,images:K,onAddImage:(w)=>F((f)=>[...f,w]),onRemoveImage:(w)=>F((f)=>f.filter((Z1)=>Z1!==w)),sessionId:H,autoFocus:!0,autoResize:U,textareaRef:b,onKeyDown:s,attachButton:"none",openFilePickerRef:C,textareaStyle:U?{width:"100%",background:"transparent",border:"none",color:"var(--color-text-primary)",fontFamily:"'Inter', sans-serif",fontSize:"13px",lineHeight:"1.5",resize:"none",outline:"none",overflow:"hidden"}:{width:"100%",minHeight:"60px",background:"transparent",border:"none",color:"var(--color-text-primary)",fontFamily:"'Inter', sans-serif",fontSize:"13px",lineHeight:"1.5",resize:"vertical",outline:"none"},placeholder:"Add your note..."},void 0,!1,void 0,this),_1("div",{style:{display:"flex",alignItems:"center",gap:"8px",marginTop:U?"6px":"8px"},children:[_1(w2,{onClick:()=>C.current?.(),size:14},void 0,!1,void 0,this),_1("div",{style:{flex:1}},void 0,!1,void 0,this),U?_1("button",{onClick:()=>{if(_)_();z()},onMouseEnter:()=>M(!0),onMouseLeave:()=>M(!1),style:{fontSize:"11px",color:S?"var(--color-accent-red)":"var(--color-text-tertiary)",background:"none",border:"none",cursor:"pointer",padding:"2px 0",fontFamily:"'Inter', sans-serif"},children:"Delete"},void 0,!1,void 0,this):_1(c8,{children:[_1("button",{onClick:z,style:{fontSize:"11px",color:"var(--color-text-tertiary)",background:"none",border:"none",cursor:"pointer",padding:"4px 12px",fontFamily:"'Inter', sans-serif"},children:"Cancel"},void 0,!1,void 0,this),_1("button",{onClick:k,style:{fontSize:"11px",fontWeight:500,padding:"4px 12px",borderRadius:"6px",background:"var(--color-highlight-bg)",color:"var(--color-text-primary)",border:"1px solid var(--color-highlight-border)",cursor:"pointer",fontFamily:"'Inter', sans-serif"},children:"Add"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),u.length>0&&_1("div",{style:{marginTop:"6px",borderTop:"1px solid var(--color-border-subtle)",paddingTop:"8px",display:"flex",gap:"4px"},children:l.map((w)=>_1("div",{style:{flex:1},children:[_1("div",{style:{fontSize:"10px",fontWeight:600,color:"var(--color-text-disabled)",textTransform:"uppercase",letterSpacing:"0.05em",padding:"2px 6px",marginBottom:"2px",fontFamily:"'Inter', sans-serif"},children:w.label},void 0,!1,void 0,this),w.items.map((f)=>{let Z1=u.indexOf(f);return _1("div",{onMouseDown:(U1)=>{U1.preventDefault(),U1.stopPropagation(),m(f)},onMouseEnter:()=>y(Z1),style:{padding:"3px 6px",fontSize:"12px",borderRadius:"4px",fontFamily:"'Inter', sans-serif",color:Z1===N?"var(--color-text-primary)":"var(--color-text-secondary)",background:Z1===N?"var(--color-highlight-selected)":"transparent",cursor:"pointer"},children:[_1("span",{style:{fontWeight:500},children:f.slice(0,T.trim().length)},void 0,!1,void 0,this),f.slice(T.trim().length)]},f,!0,void 0,this)})]},w.label,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function z0({anchorEl:Z,scrollContainer:$,snippet:q,truncateAt:Q,header:J,onAdd:Y,onCancel:X}){return _1(R3,{anchorEl:Z,scrollContainer:$,snippet:q,truncateAt:Q,header:J,onConfirm:(G,z)=>Y(G,z),onCancel:X},void 0,!1,void 0,this)}function _0({anchorEl:Z,scrollContainer:$,initialNote:q,initialImages:Q,onUpdate:J,onDelete:Y,onClose:X}){return _1(R3,{anchorEl:Z,scrollContainer:$,snippet:"",initialNote:q,initialImages:Q,onConfirm:(G,z)=>{J(G,z),X()},onDelete:Y,onCancel:X},void 0,!1,void 0,this)}import{useEffect as a0,useState as k3,useRef as s1,useCallback as E3}from"react";function o1(Z,$){let q=[],Q=d8(Z);for(let J of Q){let Y=document.createRange();if(Y.selectNodeContents(J),J===Z.startContainer)Y.setStart(J,Z.startOffset);if(J===Z.endContainer)Y.setEnd(J,Z.endOffset);let X=Y.toString();if(!X||!X.trim())continue;let G=document.createElement("mark");G.setAttribute("data-annotation-id",$);try{Y.surroundContents(G)}catch{let z=Y.extractContents();G.appendChild(z),Y.insertNode(G)}q.push(G)}return q}function d8(Z){let $=[],q=Z.commonAncestorContainer;if(q.nodeType===Node.TEXT_NODE)return $.push(q),$;let Q=document.createTreeWalker(q,NodeFilter.SHOW_TEXT),J;while(J=Q.nextNode()){let Y=J.parentElement;if(Y?.classList.contains("select-none"))continue;if(Y?.closest("[data-annotation-id]"))continue;if(Z.intersectsNode(J))$.push(J)}return $}function a1(Z,$){let q=document.querySelectorAll(`[data-annotation-id="${Z}"]`);for(let Q of q)Q.classList.toggle("mark-active",$)}function d0(Z,$){if($!=null&&$!==Z)a1($,!1);if(Z!=null)a1(Z,!0)}function r0(Z,$){let q=document.querySelectorAll(`[data-annotation-id="${Z}"]`);for(let Q of q)Q.setAttribute("data-annotation-id",$)}function l0(Z,$){for(let q of $){if(Z.querySelector(`[data-annotation-id="${q.id}"]`))continue;let Q=q.snippet;if(!Q)continue;let{fullText:J,textNodes:Y}=r8(Z),X=[],G=0;while(!0){let W=J.indexOf(Q,G);if(W===-1)break;X.push(W),G=W+1}if(X.length===0)continue;let z=X[0];if(X.length>1&&q.context){let W=-1;for(let K of X){let F=0;if(q.context.before){let N=J.slice(Math.max(0,K-80),K);if(N.includes(q.context.before))F+=2;else if(q.context.before.length>10&&N.includes(q.context.before.slice(-10)))F+=1}if(q.context.after){let N=J.slice(K+Q.length,K+Q.length+80);if(N.includes(q.context.after))F+=2;else if(q.context.after.length>10&&N.includes(q.context.after.slice(0,10)))F+=1}if(F>W)W=F,z=K}}let _=z,H=z+Q.length,U=D3(Y,_),T=D3(Y,H);if(!U||!T)continue;try{let W=document.createRange();W.setStart(U.node,U.offset),W.setEnd(T.node,T.offset),o1(W,q.id)}catch{}}}function r8(Z){let $=[],q="",Q=document.createTreeWalker(Z,NodeFilter.SHOW_TEXT),J;while(J=Q.nextNode()){let Y=J.parentElement;if(Y?.classList.contains("select-none"))continue;if(Y?.closest("[data-annotation-id]"))continue;$.push({node:J,start:q.length}),q+=J.textContent||""}return{fullText:q,textNodes:$}}function D3(Z,$){for(let q=Z.length-1;q>=0;q--)if(Z[q].start<=$){let Q=$-Z[q].start,J=Z[q].node.textContent?.length??0;if(Q<=J)return{node:Z[q].node,offset:Q}}return null}function i0(Z){let $=document.querySelectorAll(`[data-annotation-id="${Z}"]`);for(let q of $){let Q=q.parentNode;if(!Q)continue;while(q.firstChild)Q.insertBefore(q.firstChild,q);Q.removeChild(q),Q.normalize()}}import{jsxDEV as A2,Fragment as l8}from"react/jsx-dev-runtime";function t1(Z){let{containerRef:$,restoreKey:q,restoreAnnotations:Q,extractContext:J,filePath:Y,canvasFile:X,scrollContainer:G}=Z,{annotations:z,addAnnotationWithId:_,removeAnnotation:H,updateAnnotation:U,addAnnotationImage:T,removeAnnotationImage:W,activeAnnotationId:K,setActiveAnnotationId:F}=Y1(),[N,y]=k3(null),[O,D]=k3(null),S=s1(J);S.current=J;let M=s1(Y);M.current=Y;let b=s1(X);b.current=X;let C=s1(_);C.current=_;let k=s1(K);k.current=K;let c=s1(F);c.current=F;let v=Q.length;a0(()=>{if(!$.current)return;let j=setTimeout(()=>{if($.current)l0($.current,Q)},50);return()=>clearTimeout(j)},[q,v]);let V=s1(null);a0(()=>{d0(K,V.current),V.current=K},[K]),a0(()=>{let j=$.current;if(!j)return;let u=(I)=>{let L=I.target.closest("[data-annotation-id]");if(!L)return;I.stopPropagation();let d=L.getAttribute("data-annotation-id");if(d===k.current)y({anchorEl:L,annId:d});else c.current(d)},h=(I)=>{let L=I.target.closest("[data-annotation-id]");if(L)c.current(L.getAttribute("data-annotation-id"))},A=(I)=>{let L=I.target.closest("[data-annotation-id]"),d=I.relatedTarget?.closest?.("[data-annotation-id]");if(L&&!d&&!document.getElementById("ann-inline-popover"))c.current(null)};return j.addEventListener("click",u),j.addEventListener("mouseover",h),j.addEventListener("mouseout",A),()=>{j.removeEventListener("click",u),j.removeEventListener("mouseover",h),j.removeEventListener("mouseout",A)}},[q]),a0(()=>{let j=()=>E();return document.addEventListener("mouseup",j),()=>document.removeEventListener("mouseup",j)},[]);let E=E3(()=>{let j=window.getSelection();if(!j||j.isCollapsed||!j.toString().trim())return;if(!$.current)return;let u=j.getRangeAt(0);if(!$.current.contains(u.startContainer))return;if(u.startContainer.parentElement?.closest?.("[data-annotation-id]"))return;let h=j.toString().trim();if(h.length<2)return;let A=S.current(u),I=u.cloneRange(),L=`__pending_${Date.now()}`;try{o1(I,L)}catch{}window.getSelection()?.removeAllRanges();let d=document.querySelectorAll(`[data-annotation-id="${L}"]`),m=d[d.length-1];if(!m)return;D({anchorEl:m,tempId:L,snippet:h,ctx:A})},[]),g=E3((j,u,h,A)=>{D({anchorEl:j,tempId:u,snippet:h,ctx:A})},[]);return{popovers:A2(l8,{children:[N&&(()=>{let j=z.find((u)=>u.id===N.annId);if(!j)return null;return A2(_0,{anchorEl:N.anchorEl,scrollContainer:G,initialNote:j.note,initialImages:j.images,onUpdate:(u,h)=>{U(N.annId,u);let A=j.images||[];for(let I of h)if(!A.includes(I))T(N.annId,I);for(let I of A)if(!h.includes(I))W(N.annId,I)},onDelete:()=>{H(N.annId),F(null)},onClose:()=>y(null)},void 0,!1,void 0,this)})(),O&&A2(z0,{anchorEl:O.anchorEl,scrollContainer:G,snippet:O.snippet,truncateAt:80,onAdd:(j,u)=>{let h=F1();r0(O.tempId,h),C.current(h,O.snippet,j,M.current,O.ctx,u,b.current),D(null)},onCancel:()=>{i0(O.tempId),D(null)}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),openCreatePopover:g,isPopoverOpen:!!(N||O)}}import{jsxDEV as J1,Fragment as Z4}from"react/jsx-dev-runtime";var I2="[data-md='item'], [data-md='section'], [data-md='table'] tbody tr, [data-md='callout'], [data-md='note'], [data-md='checklist-item'], [data-md='choice-option'], [data-md='multichoice-option'], [data-md='userinput'], [data-md='rangeinput'], [data-md='image']",V2="[data-md='item'], [data-md='section'], [data-md='table'] tbody tr, [data-md='callout'], [data-md='note'], [data-md='checklist-item'], [data-md='image']";function S0({revision:Z,filename:$}){let q=a8(s8),[Q,J]=j1(null),[Y,X]=j1(null),[G,z]=j1(!0),_=i8(null),{annotations:H,addAnnotationWithId:U,removeAnnotation:T,updateAnnotation:W,addAnnotationImage:K,removeAnnotationImage:F,activeAnnotationId:N,setActiveAnnotationId:y}=Y1(),O=y0(()=>H.filter((A)=>!A.filePath&&(!A.canvasFile||A.canvasFile===$)),[H,$]),[D,S]=j1(null),[M,b]=j1(null),[C,k]=j1(null),[c,v]=j1(null),[V,E]=j1(!1);e1(()=>{z(!0),X(null),v(null),P3($,Z).then((A)=>{J(()=>A.default),z(!1)}).catch((A)=>{X(A.message),z(!1)})},[q,Z,$]);let g=document.getElementById("plan-scroll-container"),{popovers:l,isPopoverOpen:j}=t1({containerRef:_,restoreKey:Q,restoreAnnotations:O,extractContext:(A)=>i1(A,_.current),canvasFile:$,scrollContainer:g}),u=y0(()=>{let A=new Map;for(let I of O)if(I.snippet.startsWith("["))A.set(I.snippet,I.id);return A},[O]);e1(()=>{let A=_.current;if(!A)return;let I=(d)=>{if(C||j)return;let m=d.target;if(m.closest("[data-block-comment-btn]"))return;E(!1);let x=m.closest(I2);if(x&&A.contains(x)){let f=n1(A).indexOf(x);v(f>=0?f:null)}else v(null);let s=m.closest(V2);if(s&&A.contains(s)){b(s);let w=G0(s),f=w?u.get(w):void 0;if(f&&f!==N)y(f)}else b(null)},L=(d)=>{if(C||j)return;if(d.relatedTarget?.closest("[data-block-comment-btn]"))return;b(null),y(null)};return A.addEventListener("mousemove",I),A.addEventListener("mouseleave",L),()=>{A.removeEventListener("mousemove",I),A.removeEventListener("mouseleave",L)}},[Q,C,j,u,N]),e1(()=>{let A=(I)=>{let L=I.target.tagName;if(L==="INPUT"||L==="TEXTAREA"||I.target.isContentEditable)return;if(C||j)return;let d=_.current;if(!d)return;if(I.key==="ArrowDown"){I.preventDefault(),E(!0);let m=n1(d);if(m.length===0)return;v((x)=>{if(x===null)return 0;return Math.min(x+1,m.length-1)})}else if(I.key==="ArrowUp"){I.preventDefault(),E(!0);let m=n1(d);if(m.length===0)return;v((x)=>{if(x===null)return m.length-1;return Math.max(x-1,0)})}else if(I.key==="a"||I.key==="A"){if(c===null||!d)return;I.preventDefault();let x=n1(d)[c];if(!x)return;let s=G0(x);if(!s)return;let w=u.get(s);if(w)y(w),k({anchorEl:x,snippet:s,annId:w});else k({anchorEl:x,snippet:s})}else if(I.key===" "||I.key==="Enter"){if(c===null)return;let x=n1(d)[c];if(!x)return;let s=x.getAttribute("data-md");if(s==="choice-option"||s==="multichoice-option")I.preventDefault(),x.dispatchEvent(new CustomEvent("kb-select",{bubbles:!0}));else if(s==="userinput"){I.preventDefault();let w=x.querySelector("textarea");if(w){w.focus();let f=(Z1)=>{if(Z1.key==="Escape")Z1.preventDefault(),w.blur(),E(!0)};w.addEventListener("keydown",f),w.addEventListener("blur",()=>w.removeEventListener("keydown",f),{once:!0})}}else if(s==="rangeinput"){I.preventDefault();let w=x.querySelector("input[type='range']");if(w){w.focus();let f=(Z1)=>{if(Z1.key==="Escape"||Z1.key==="ArrowUp"||Z1.key==="ArrowDown")Z1.preventDefault(),w.blur(),E(!0)};w.addEventListener("keydown",f),w.addEventListener("blur",()=>w.removeEventListener("keydown",f),{once:!0})}}}else if(I.key==="Escape")v(null),E(!1),y(null)};return document.addEventListener("keydown",A),()=>document.removeEventListener("keydown",A)},[c,C,j,u]),e1(()=>{let A=_.current;if(!A||c===null||!V)return;let L=n1(A)[c];if(!L)return;L.style.outline="2px solid var(--color-accent-blue)",L.style.outlineOffset="-2px",L.style.borderRadius="8px",L.scrollIntoView({block:"nearest",behavior:"smooth"});let d=G0(L),m=d?u.get(d):void 0;if(m)y(m);return()=>{L.style.outline="",L.style.outlineOffset="",L.style.borderRadius=""}},[c,V,u]);let h=y0(()=>Q?J1(Q,{},void 0,!1,void 0,this):null,[Q]);if(G)return J1("div",{className:"flex items-center justify-center h-64 text-text-tertiary font-body text-body",children:"Loading canvas..."},void 0,!1,void 0,this);if(Y)return J1("div",{className:"bg-accent-red-muted rounded-lg p-5",children:[J1("h3",{className:"font-body font-semibold text-accent-red mb-2",children:"Compilation Error"},void 0,!1,void 0,this),J1("pre",{className:"text-code font-mono text-text-secondary whitespace-pre-wrap",children:Y},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(!Q)return J1("div",{className:"text-text-tertiary text-center py-8 font-body text-body",children:"No canvas loaded"},void 0,!1,void 0,this);return J1(t8.Provider,{value:$,children:[J1("div",{ref:_,className:"plan-content plan-updated",children:h},void 0,!1,void 0,this),D&&J1($4,{note:D.note,onSave:(A)=>{W(D.id,A),S(null)},onCancel:()=>S(null)},void 0,!1,void 0,this),l,J1(n8,{containerRef:_,hoveredBlock:M,focusedBlockIndex:c,blockPopover:C,blockAnnotationMap:u,activeAnnotationId:N,onOpen:(A,I,L)=>{if(L)y(L),k({anchorEl:A,snippet:I,annId:L});else k({anchorEl:A,snippet:I})}},void 0,!1,void 0,this),C&&!C.annId&&J1(z0,{anchorEl:C.anchorEl,scrollContainer:g,snippet:C.snippet,truncateAt:80,onAdd:(A,I)=>{let L=F1();U(L,C.snippet,A,void 0,void 0,I,$),k(null)},onCancel:()=>k(null)},void 0,!1,void 0,this),C?.annId&&(()=>{let A=O.find((I)=>I.id===C.annId);if(!A)return null;return J1(_0,{anchorEl:C.anchorEl,scrollContainer:g,initialNote:A.note,initialImages:A.images,onUpdate:(I,L)=>{W(C.annId,I);let d=A.images||[];for(let m of L)if(!d.includes(m))K(C.annId,m);for(let m of d)if(!L.includes(m))F(C.annId,m)},onDelete:()=>{T(C.annId),y(null),k(null)},onClose:()=>k(null)},void 0,!1,void 0,this)})()]},void 0,!0,void 0,this)}function n1(Z){return Array.from(Z.querySelectorAll(I2))}function G0(Z){let $=Z.getAttribute("data-md");if($==="item"){let q=Z.getAttribute("data-md-label");return q?`[Item] ${q}`:null}if($==="section"){let q=Z.getAttribute("data-md-title");return q?`[Section] ${q}`:null}if($==="callout"){let q=Z.getAttribute("data-md-type")||"info",Q=Z.textContent?.trim().slice(0,60)||"Callout";return`[Callout:${q}] ${Q}`}if($==="note")return`[Note] ${Z.textContent?.trim().slice(0,60)||"Note"}`;if(Z.tagName==="TR"){let q=Array.from(Z.querySelectorAll("td")).map((Q)=>Q.textContent?.trim()).filter(Boolean);return q.length?`[Row] ${q.join(" | ")}`:null}if($==="checklist-item"){let q=Z.getAttribute("data-md-label");return q?`[Checklist] ${q}`:null}if($==="choice-option"||$==="multichoice-option"){let q=Z.getAttribute("data-md-label");return q?`[Option] ${q}`:null}if($==="userinput"){let q=Z.getAttribute("data-md-label");return q?`[Input] ${q}`:null}if($==="rangeinput"){let q=Z.getAttribute("data-md-label");return q?`[Range] ${q}`:null}if($==="image"){let q=Z.getAttribute("data-md-src");return q?`[Image] ${q}`:null}return null}function n8({containerRef:Z,hoveredBlock:$,focusedBlockIndex:q,blockPopover:Q,blockAnnotationMap:J,activeAnnotationId:Y,onOpen:X}){let[G,z]=j1([]);e1(()=>{let W=Z.current;if(!W||J.size===0){z([]);return}let K=[];for(let F of W.querySelectorAll(V2)){let N=G0(F);if(N&&J.has(N))K.push(F)}z(K)},[J,Z.current]);let[_,H]=j1(null);e1(()=>{if(!Y||!Z.current){H(null);return}for(let W of Z.current.querySelectorAll(I2)){let K=G0(W);if(K&&J.get(K)===Y){H(W);return}}H(null)},[Y,J]),e1(()=>{if(!_)return;return _.style.boxShadow="inset 0 0 0 1.5px var(--color-highlight-bg)",_.style.borderRadius="8px",()=>{_.style.boxShadow="",_.style.borderRadius=""}},[_]);let U=y0(()=>{if(q===null||!Z.current)return null;let W=n1(Z.current)[q];if(!W)return null;return W.matches(V2)?W:null},[q,Z.current]),T=y0(()=>{let W=new Set(G);if($)W.add($);if(U)W.add(U);if(Q?.anchorEl)W.add(Q.anchorEl);return Array.from(W)},[G,$,U,Q]);return J1(Z4,{children:T.map((W)=>J1(e8,{block:W,isHovered:W===$||W===U||W===Q?.anchorEl,blockAnnotationMap:J,activeAnnotationId:Y,onOpen:X},W.getAttribute("data-task-id")||W.getAttribute("data-md-title")||W.textContent?.slice(0,30)||"block",!1,void 0,this))},void 0,!1,void 0,this)}function e8({block:Z,isHovered:$,blockAnnotationMap:q,activeAnnotationId:Q,onOpen:J}){let Y=G0(Z);if(!Y)return null;let X=q.get(Y),G=!!X;return o8(J1("button",{"data-block-comment-btn":!0,onClick:(_)=>{_.stopPropagation(),J(_.currentTarget,Y,X)},className:`absolute top-1 right-1 z-10 w-6 h-6 flex items-center justify-center rounded transition-all duration-150 ${G?X===Q?"text-accent-amber bg-accent-amber-muted":"text-accent-amber opacity-60 hover:opacity-100":$?"text-text-disabled hover:text-text-tertiary opacity-50 hover:opacity-100":"text-text-disabled opacity-0 group-hover/section:opacity-20 hover:!opacity-80"}`,title:G?"Edit annotation":"Add annotation",children:J1("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:G?"currentColor":"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:J1("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),Z)}function $4({note:Z,onSave:$,onCancel:q}){let[Q,J]=C2.useState(Z),Y=C2.useRef(null);return C2.useEffect(()=>{Y.current?.focus(),Y.current?.select()},[]),J1("div",{className:"fixed inset-0 z-50 bg-black/40 flex items-center justify-center",onClick:q,children:J1("div",{className:"bg-bg-elevated border border-border-hover rounded-lg shadow-md p-4 w-80",onClick:(X)=>X.stopPropagation(),children:[J1("div",{className:"text-tiny uppercase tracking-widest text-text-tertiary font-body mb-2",children:"Edit annotation"},void 0,!1,void 0,this),J1("textarea",{ref:Y,value:Q,onChange:(X)=>J(X.target.value),className:"w-full bg-transparent border-none text-body font-body text-text-primary resize-vertical focus:outline-none min-h-[60px]",onKeyDown:(X)=>{if(X.key==="Enter"&&(X.ctrlKey||X.metaKey))$(Q.trim());if(X.key==="Escape")q()}},void 0,!1,void 0,this),J1("div",{className:"flex justify-end gap-2 mt-2",children:[J1("button",{onClick:q,className:"text-meta text-text-tertiary font-body px-3 py-1",children:"Cancel"},void 0,!1,void 0,this),J1("button",{onClick:()=>$(Q.trim()),className:"text-meta font-medium font-body px-3 py-1 rounded-md bg-highlight-bg text-text-primary border border-highlight-border",children:"Save"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}import H4,{useRef as f3,useEffect as n0,useCallback as m2,useState as u1,useContext as e0,useMemo as W4}from"react";function b0(Z,$,q,Q,J){let Y=[],X=Z.filter((W)=>W.source!=="remote"||J&&J.has(W.id)),G=X.filter((W)=>W.filePath===T1),z=X.filter((W)=>!W.filePath),_=X.filter((W)=>W.filePath&&W.filePath!==T1),H=q?Array.from(q.values()).filter((W)=>D2(W)):[],U=Q?Array.from(Q.values()).filter((W)=>W.markdown.trim()):[];if(H.length>0||U.length>0){Y.push("## Responses"),Y.push("");for(let W of H)Y.push(Q4(W));for(let W of U)Y.push(W.markdown.trim()),Y.push("")}if(G.length>0){Y.push("## Annotations on agent response"),Y.push("");for(let W of G)Y.push(R2(W))}if(z.length>0){Y.push("## Canvas annotations"),Y.push("");let W=new Map;for(let N of z){let y=N.canvasFile||"";if(!W.has(y))W.set(y,[]);W.get(y).push(N)}let K=[...W.keys()].sort(),F=K.length>1||K.length===1&&K[0]!=="";for(let N of K){let y=W.get(N);if(F&&N)Y.push(`### ${N.replace(/\.jsx$/,"")}`),Y.push("");let O=Y4(y);Y.push(m3(O))}}if(_.length>0){let W={};for(let K of _){let F=K.filePath;if(!W[F])W[F]=[];W[F].push(K)}Y.push("## File annotations"),Y.push("");for(let[K,F]of Object.entries(W)){Y.push(`### ${K}`),Y.push("");for(let N of F)Y.push(R2(N))}}if($.trim())Y.push("## General notes"),Y.push(""),Y.push($.trim()),Y.push("");return Y.join(`
60
60
  `).trim()+`
61
- `}function I2(Z){if(Z.note?.trim())return!0;if(Z.value===null||Z.value===void 0)return!1;if(Z.type==="text"&&!Z.value.trim())return!1;if(Z.type==="checkbox"&&Z.value.length===0)return!1;return!0}function Z4(Z){let $=[];for(let q of Z.values()){if(!q.required)continue;if(q.value===null||q.value===void 0){$.push(q);continue}if(q.type==="text"&&!q.value.trim()){$.push(q);continue}if(q.type==="checkbox"&&q.value.length===0){$.push(q);continue}}return $}function q4(Z){let $=[];for(let q of Z.values())if(q.required&&!q.markdown.trim())$.push(q);return $}function l0(Z,$){let q=Z4(Z),Q=q4($);return[...q.map((J)=>J.label),...Q.map((J)=>J.label||J.id)]}function J4(Z){let $=[];switch($.push(`**${Z.label}**`),Z.type){case"radio":case"select":$.push(`Answer: ${Z.value}`);break;case"checkbox":for(let q of Z.value)$.push(`- [x] ${q}`);break;case"text":$.push(""),$.push(Z.value.trim());break;case"range":$.push(`Answer: ${Z.value}`);break}if(Z.note?.trim())$.push(""),$.push(`Note: ${Z.note.trim()}`);return $.push(""),$.join(`
62
- `)}function V2(Z){let $=[],q=Z.snippet.trim(),Q=Z.context,J=Q?.lineStart!=null;if(Z.filePath&&J){let Y=Q.lineStart,X=Q.lineEnd??Y,G=q.split(`
63
- `);if(q.length<30&&Y===X&&(Q.before||Q.after)){let _=M2(Z);$.push(`> L${Y}: ${_}`)}else if(G.length<=6)for(let _=0;_<G.length;_++)$.push(`> ${Y+_} | ${G[_]}`);else{for(let _=0;_<3;_++)$.push(`> ${Y+_} | ${G[_]}`);$.push(`> ... (${G.length} lines)`);for(let _=G.length-3;_<G.length;_++)$.push(`> ${Y+_} | ${G[_]}`)}}else{let Y=M2(Z);if(q.split(`
61
+ `}function D2(Z){if(Z.note?.trim())return!0;if(Z.value===null||Z.value===void 0)return!1;if(Z.type==="text"&&!Z.value.trim())return!1;if(Z.type==="checkbox"&&Z.value.length===0)return!1;return!0}function q4(Z){let $=[];for(let q of Z.values()){if(!q.required)continue;if(q.value===null||q.value===void 0){$.push(q);continue}if(q.type==="text"&&!q.value.trim()){$.push(q);continue}if(q.type==="checkbox"&&q.value.length===0){$.push(q);continue}}return $}function J4(Z){let $=[];for(let q of Z.values())if(q.required&&!q.markdown.trim())$.push(q);return $}function o0(Z,$){let q=q4(Z),Q=J4($);return[...q.map((J)=>J.label),...Q.map((J)=>J.label||J.id)]}function Q4(Z){let $=[];switch($.push(`**${Z.label}**`),Z.type){case"radio":case"select":$.push(`Answer: ${Z.value}`);break;case"checkbox":for(let q of Z.value)$.push(`- [x] ${q}`);break;case"text":$.push(""),$.push(Z.value.trim());break;case"range":$.push(`Answer: ${Z.value}`);break}if(Z.note?.trim())$.push(""),$.push(`Note: ${Z.note.trim()}`);return $.push(""),$.join(`
62
+ `)}function R2(Z){let $=[],q=Z.snippet.trim(),Q=Z.context,J=Q?.lineStart!=null;if(Z.filePath&&J){let Y=Q.lineStart,X=Q.lineEnd??Y,G=q.split(`
63
+ `);if(q.length<30&&Y===X&&(Q.before||Q.after)){let _=y2(Z);$.push(`> L${Y}: ${_}`)}else if(G.length<=6)for(let _=0;_<G.length;_++)$.push(`> ${Y+_} | ${G[_]}`);else{for(let _=0;_<3;_++)$.push(`> ${Y+_} | ${G[_]}`);$.push(`> ... (${G.length} lines)`);for(let _=G.length-3;_<G.length;_++)$.push(`> ${Y+_} | ${G[_]}`)}}else{let Y=y2(Z);if(q.split(`
64
64
  `).length<=3)$.push(`> ${Y.split(`
65
65
  `).join(`
66
66
  > `)}`);else{let X=q.split(`
67
67
  `);$.push(`> ${X[0]}`),$.push(`> ... (${X.length} lines)`),$.push(`> ${X[X.length-1]}`)}}if(Z.note.trim())$.push(""),$.push(Z.note.trim());if(Z.images?.length){$.push("");for(let Y of Z.images)$.push(`![screenshot](${Y})`)}return $.push(""),$.join(`
68
- `)}function Q4(Z){let $={label:"",annotations:[],children:new Map};for(let q of Z){let Q=q.context?.hierarchy||[],J=$;for(let Y of Q){if(!J.children.has(Y))J.children.set(Y,{label:Y,annotations:[],children:new Map});J=J.children.get(Y)}J.annotations.push(q)}return $}function D3(Z,$=0){let q=[];for(let Q of Z.annotations)q.push(V2(Q));for(let[,Q]of Z.children){let J=$===0?"###":"####";q.push(`${J} ${Q.label}`),q.push(""),q.push(D3(Q,$+1))}return q.join(`
69
- `)}import{SessionContext as u3}from"#canvas/runtime";import{useEffect as k3,useState as S0,useRef as Y4,useMemo as R2}from"react";import{jsxDEV as Q1}from"react/jsx-dev-runtime";function E3({open:Z,onClose:$,onSubmit:q,includedRemoteIds:Q,onToggleRemoteId:J}){let{annotations:Y,generalNote:X,responses:G,feedbackEntries:z}=Y1(),[_,H]=S0(""),[U,T]=S0(!1),[W,K]=S0(!1),[F,N]=S0(null),y=Y4(null),[O,D]=S0(!1),S=R2(()=>Y.filter((k)=>k.source==="remote"),[Y]);if(Z&&!O)T(!1),K(!1),N(null);if(!Z&&O)T(!1),K(!1),N(null);if(Z!==O)D(Z);let M=R2(()=>y0(Y,X,G,z,Q),[Y,X,G,z,Q]),w=U?_:M;if(k3(()=>{if(Z&&W&&y.current)y.current.focus()},[Z,W]),k3(()=>{if(!Z)return;let k=(c)=>{if(c.key==="Escape")$()};return window.addEventListener("keydown",k),()=>window.removeEventListener("keydown",k)},[Z,$]),!Z)return null;let C=w.trim().length>0;return Q1("div",{className:"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm flex items-center justify-center p-8",onClick:$,children:Q1("div",{className:"bg-bg-surface border border-border-medium rounded-xl shadow-lg w-full max-w-2xl flex flex-col",style:{height:"80vh"},onClick:(k)=>k.stopPropagation(),children:[Q1("div",{className:"flex items-center justify-between px-5 py-3 border-b border-border-subtle flex-shrink-0",children:[Q1("div",{className:"flex items-center gap-3",children:[Q1("span",{className:"text-[13px] font-medium text-text-primary font-body",children:"Response preview"},void 0,!1,void 0,this),U&&Q1("button",{onClick:()=>{T(!1),K(!1)},className:"text-[11px] text-text-tertiary hover:text-text-secondary font-body",children:"Reset"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q1("div",{className:"flex items-center gap-2",children:[Q1("div",{className:"flex items-center bg-bg-base rounded-md p-0.5",children:[Q1("button",{onClick:()=>K(!1),className:`px-2.5 py-1 rounded text-[11px] font-body font-medium transition-colors ${!W?"bg-bg-elevated text-text-primary shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:"Preview"},void 0,!1,void 0,this),Q1("button",{onClick:()=>K(!0),className:`px-2.5 py-1 rounded text-[11px] font-body font-medium transition-colors ${W?"bg-bg-elevated text-text-primary shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:"Edit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q1("button",{onClick:$,className:"text-text-tertiary hover:text-text-secondary w-7 h-7 flex items-center justify-center rounded-md hover:bg-border-subtle transition-colors",children:"✕"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),W?Q1("textarea",{ref:y,value:w,onChange:(k)=>{H(k.target.value),T(!0)},className:"flex-1 w-full bg-bg-base p-5 text-[13px] font-mono text-text-code resize-none focus:outline-none leading-relaxed placeholder:text-text-disabled",placeholder:"Your feedback will appear here..."},void 0,!1,void 0,this):Q1("div",{className:"flex-1 overflow-y-auto p-5",children:Q1(i0,{text:w},void 0,!1,void 0,this)},void 0,!1,void 0,this),S.length>0&&Q1("div",{className:"px-5 py-2 border-t border-border-subtle flex-shrink-0",children:Q1("span",{className:"text-[12px] text-text-secondary font-body",children:["Reviewer feedback: ",Q.size,"/",S.length," included"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),F&&Q1("div",{className:"px-5 py-2 text-[12px] text-accent-red font-body border-t border-border-subtle flex-shrink-0 flex items-center justify-between gap-2",children:[Q1("span",{children:F},void 0,!1,void 0,this),Q1("button",{onClick:()=>{N(null),q(w)},className:"text-[11px] text-text-tertiary hover:text-text-secondary font-body whitespace-nowrap underline",children:"Submit anyway"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q1("div",{className:"flex justify-end gap-2 px-5 py-3 border-t border-border-subtle flex-shrink-0",children:[Q1("button",{onClick:$,className:"px-4 py-2 rounded-lg text-[13px] font-body text-text-tertiary hover:text-text-secondary transition-colors",children:"Cancel"},void 0,!1,void 0,this),Q1("button",{onClick:()=>{let k=l0(G,z);if(k.length>0){N(`Please answer: ${k.join(", ")}`);return}N(null),q(w)},disabled:!C,className:`px-6 py-2 rounded-lg font-body text-[13px] font-medium transition-all ${C?"bg-btn-primary text-btn-primary-text hover:opacity-90":"bg-bg-input text-text-disabled cursor-default"}`,children:"Submit feedback"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var X4=/!\[([^\]]*)\]\((\/tmp\/agent-canvas\/uploads\/([^)]+))\)/g;function z4(Z){return Z.replace(X4,($,q,Q,J)=>`![${q}](/api/uploads/${J})`)}function i0({text:Z}){let $=R2(()=>n.parse(z4(Z),{async:!1}),[Z]);return Q1("div",{className:"prose-canvas font-body text-body text-text-primary leading-relaxed",dangerouslySetInnerHTML:{__html:$}},void 0,!1,void 0,this)}import{jsxDEV as e1}from"react/jsx-dev-runtime";var _4={ts:"#3178c6",tsx:"#3178c6",js:"#e8a32e",jsx:"#4ba0c8",html:"#e34c26",css:"#264de4",scss:"#c69",json:"#7a7568",yaml:"#cb171e",yml:"#cb171e",toml:"#9c4221",rs:"#dea584",go:"#00add8",c:"#6a6a6a",cpp:"#f34b7d",h:"#6a6a6a",py:"#3572a5",rb:"#cc342d",sh:"#5a8c3c",bash:"#5a8c3c",md:"#3573b5",txt:"#6b6560",lock:"#6b6560",gitignore:"#6b6560",svg:"#d9952e",png:"#6a9c2e",jpg:"#6a9c2e",gif:"#6a9c2e"},G4={ts:"TS",tsx:"TX",js:"JS",jsx:"JX",py:"PY",rs:"RS",go:"GO",rb:"RB",json:"{}",yaml:"YM",yml:"YM",toml:"TM",html:"<>",css:"#",scss:"#",md:"M↓",sh:"$",bash:"$",c:"C",cpp:"C+",h:"H",svg:"◇",png:"▣",jpg:"▣"};function x1({name:Z,type:$,expanded:q,className:Q=""}){if($==="dir")return e1("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",className:`flex-shrink-0 ${Q}`,children:q?e1("path",{d:"M1.5 3.5h5l1.5 1.5h6.5v8h-13z",style:{fill:"var(--color-folder-fill-active)",stroke:"var(--color-folder-stroke-active)"},strokeWidth:"1"},void 0,!1,void 0,this):e1("path",{d:"M1.5 3.5h5l1.5 1.5h6.5v8h-13z",style:{fill:"var(--color-folder-fill)",stroke:"var(--color-folder-stroke)"},strokeWidth:"1"},void 0,!1,void 0,this)},void 0,!1,void 0,this);let J=Z.includes(".")?Z.split(".").pop().toLowerCase():"",Y=_4[J]||"#6b6560",X=G4[J];return e1("svg",{width:"14",height:"14",viewBox:"0 0 16 16",className:`flex-shrink-0 ${Q}`,children:[e1("path",{d:"M2 1.5h8l3.5 3.5v9.5a1 1 0 01-1 1H3a1 1 0 01-1-1v-12a1 1 0 011-1z",fill:Y,opacity:"0.85"},void 0,!1,void 0,this),e1("path",{d:"M10 1.5v2.5a1 1 0 001 1h2.5",fill:"none",stroke:"white",strokeWidth:"0.5",opacity:"0.5"},void 0,!1,void 0,this),X&&e1("text",{x:"8",y:"11.5",textAnchor:"middle",fill:"white",fontSize:"5.5",fontFamily:"monospace",fontWeight:"600",children:X},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function U4(Z){let $=Z.getAttribute("data-md");if($==="item"){let q=Z.getAttribute("data-md-label");return q?`[Item] ${q}`:null}if($==="section"){let q=Z.getAttribute("data-md-title");return q?`[Section] ${q}`:null}if($==="callout"){let q=Z.getAttribute("data-md-type")||"info",Q=Z.textContent?.trim().slice(0,60)||"Callout";return`[Callout:${q}] ${Q}`}if($==="note")return`[Note] ${Z.textContent?.trim().slice(0,60)||"Note"}`;if(Z.tagName==="TR"){let q=Array.from(Z.querySelectorAll("td")).map((Q)=>Q.textContent?.trim()).filter(Boolean);return q.length?`[Row] ${q.join(" | ")}`:null}if($==="checklist-item"){let q=Z.getAttribute("data-md-label");return q?`[Checklist] ${q}`:null}if($==="choice-option"||$==="multichoice-option"){let q=Z.getAttribute("data-md-label");return q?`[Option] ${q}`:null}if($==="userinput"){let q=Z.getAttribute("data-md-label");return q?`[Input] ${q}`:null}if($==="rangeinput"){let q=Z.getAttribute("data-md-label");return q?`[Range] ${q}`:null}if($==="image"){let q=Z.getAttribute("data-md-src");return q?`[Image] ${q}`:null}return null}function w0(Z){let $=document.querySelector(`[data-annotation-id="${Z.id}"]`);if($)return $;if(Z.snippet.startsWith("[")){for(let q of document.querySelectorAll("[data-md='item'], [data-md='section'], [data-md='table'] tbody tr, [data-md='callout'], [data-md='note'], [data-md='checklist-item'], [data-md='image']"))if(U4(q)===Z.snippet)return q}return null}function x3(Z){Z.classList.remove("ann-flash"),Z.offsetWidth,Z.classList.add("ann-flash"),Z.addEventListener("animationend",()=>{Z.classList.remove("ann-flash")},{once:!0})}function D2(Z,$){if(Z.filePath)$({type:"file",path:Z.filePath}),setTimeout(()=>{let q=w0(Z);if(q)q.scrollIntoView({behavior:"smooth",block:"center"}),x3(q)},150);else{let q=w0(Z);if(q)q.scrollIntoView({behavior:"smooth",block:"center"}),x3(q)}}import{jsxDEV as P,Fragment as a0}from"react/jsx-dev-runtime";function E2({onSubmit:Z,collapseButton:$}){let{isReadOnly:q,selectedRevision:Q,currentRevision:J,revisions:Y,agentWatching:X}=s0(b1),G=s0(u3),z=Y.find((T)=>T.revision===Q),_=q&&Q===J,H=!!z?.feedbackConsumed,U=z?.label||`Round ${Q}`;if(q)return P(T4,{sessionId:G,revision:Q,label:U,waitingForUpdate:_,feedbackConsumed:H,agentWatching:X,collapseButton:$},void 0,!1,void 0,this);return P(B4,{onSubmit:Z,agentWatching:X,collapseButton:$},void 0,!1,void 0,this)}function W4({sessionId:Z,revision:$,label:q,waitingForUpdate:Q,feedbackConsumed:J,agentWatching:Y,collapseButton:X}){let G=e.isShared,[z,_]=m1(null),[H,U]=m1(!0);return o0(()=>{if(U(!0),!F1){_(null),U(!1);return}fetch(`/api/session/${Z}/revision/${$}/feedback`).then((T)=>T.json()).then((T)=>{_(T.feedback||null),U(!1)}).catch(()=>{_(null),U(!1)})},[Z,$]),P("div",{className:"flex flex-col h-full",children:[P("div",{className:"px-4 py-3 flex items-center justify-between flex-shrink-0",children:[P("span",{className:"text-[11px] font-medium uppercase tracking-widest text-text-tertiary font-body",children:Q?"Feedback sent":`Feedback — ${q}`},void 0,!1,void 0,this),X]},void 0,!0,void 0,this),Q&&!G&&P(g3,{feedbackConsumed:J,agentWatching:Y},void 0,!1,void 0,this),P("div",{className:"flex-1 overflow-y-auto px-4",children:H?P("p",{className:"text-[12px] text-text-tertiary font-body py-4",children:"Loading..."},void 0,!1,void 0,this):z?P(i0,{text:z},void 0,!1,void 0,this):P("p",{className:"text-[12px] text-text-tertiary font-body py-4",children:"No feedback was submitted for this revision."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function g3({feedbackConsumed:Z,agentWatching:$}){if(Z)return P("div",{className:"mx-4 mb-3 px-3 py-2.5 rounded-lg bg-accent-green-muted flex items-center gap-2 flex-shrink-0",children:[P("span",{className:"w-2 h-2 rounded-full bg-accent-green animate-pulse"},void 0,!1,void 0,this),P("span",{className:"text-[12px] font-body text-accent-green",children:"Feedback received — waiting for next revision..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if($)return P("div",{className:"mx-4 mb-3 px-3 py-2.5 rounded-lg bg-accent-blue-muted flex items-center gap-2 flex-shrink-0",children:[P("span",{className:"w-2 h-2 rounded-full bg-accent-blue animate-pulse"},void 0,!1,void 0,this),P("span",{className:"text-[12px] font-body text-accent-blue",children:"Waiting for agent to pick up feedback..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return P("div",{className:"mx-4 mb-3 px-3 py-2.5 rounded-lg bg-accent-amber-muted flex items-center gap-2 flex-shrink-0",children:[P("span",{className:"w-2 h-2 rounded-full bg-accent-amber"},void 0,!1,void 0,this),P("span",{className:"text-[12px] font-body text-accent-amber",children:"Agent disconnected — tell Claude to check feedback"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function T4({sessionId:Z,revision:$,label:q,waitingForUpdate:Q,feedbackConsumed:J,agentWatching:Y,collapseButton:X}){let{annotations:G,generalNote:z,activeAnnotationId:_,setActiveAnnotationId:H}=Y1(),{setActiveView:U}=s0(V1),T=G.length>0||z.trim().length>0,[W,K]=m1("feedback");if(!T)return P(W4,{sessionId:Z,revision:$,label:q,waitingForUpdate:Q,feedbackConsumed:J,agentWatching:Y,collapseButton:X},void 0,!1,void 0,this);return P("div",{className:"flex flex-col h-full",children:[P("div",{className:"px-4 py-3 flex items-center justify-between flex-shrink-0",children:[P("div",{className:"flex items-center gap-1 bg-bg-input rounded-md p-0.5",children:[P("button",{onClick:()=>K("feedback"),className:`px-2.5 py-1 rounded text-[11px] font-medium font-body transition-colors ${W==="feedback"?"bg-bg-elevated text-text-primary shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:"Feedback"},void 0,!1,void 0,this),P("button",{onClick:()=>K("annotations"),className:`px-2.5 py-1 rounded text-[11px] font-medium font-body transition-colors flex items-center gap-1.5 ${W==="annotations"?"bg-bg-elevated text-text-primary shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:["Annotations",P("span",{className:"inline-flex items-center justify-center min-w-[16px] h-[16px] px-1 rounded-full bg-border-subtle text-[10px] font-medium",children:G.length},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X]},void 0,!0,void 0,this),Q&&P(g3,{feedbackConsumed:J,agentWatching:Y},void 0,!1,void 0,this),W==="feedback"?P(N4,{sessionId:Z,revision:$},void 0,!1,void 0,this):P(O4,{annotations:G,generalNote:z,activeAnnotationId:_,setActiveAnnotationId:H,setActiveView:U},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function N4({sessionId:Z,revision:$}){let[q,Q]=m1(null),[J,Y]=m1(!0);return o0(()=>{if(Y(!0),!F1){Q(null),Y(!1);return}fetch(`/api/session/${Z}/revision/${$}/feedback`).then((X)=>X.json()).then((X)=>{Q(X.feedback||null),Y(!1)}).catch(()=>{Q(null),Y(!1)})},[Z,$]),P("div",{className:"flex-1 overflow-y-auto px-4",children:J?P("p",{className:"text-[12px] text-text-tertiary font-body py-4",children:"Loading..."},void 0,!1,void 0,this):q?P(i0,{text:q},void 0,!1,void 0,this):P("p",{className:"text-[12px] text-text-tertiary font-body py-4",children:"No feedback was submitted for this revision."},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function O4({annotations:Z,generalNote:$,activeAnnotationId:q,setActiveAnnotationId:Q,setActiveView:J}){let Y=Z.filter((K)=>K.filePath===T1),X=Z.filter((K)=>!K.filePath),G=Z.filter((K)=>K.filePath&&K.filePath!==T1),z={};for(let K of G){let F=K.filePath;if(!z[F])z[F]=[];z[F].push(K)}let _=(K)=>{Q(K),i1(K,!0)},H=(K)=>{Q(null),i1(K,!1)},U=(K)=>{if(K.id===q)Q(null);else if(Q(K.id),K.filePath)J({type:"file",path:K.filePath}),setTimeout(()=>{let F=w0(K);if(F)F.scrollIntoView({behavior:"smooth",block:"center"})},150)},T=(K)=>P("div",{className:`group/ann relative px-3 py-2.5 transition-colors duration-150 cursor-pointer ${q===K.id?"bg-highlight-selected":"odd:bg-bg-elevated-half hover:bg-bg-input"}`,onMouseEnter:()=>_(K.id),onMouseLeave:()=>H(K.id),onClick:()=>U(K),children:[P("div",{className:"text-[11px] text-text-tertiary italic line-clamp-2 mb-1.5 leading-snug font-body border-l-2 border-border-medium pl-2",children:K.snippet.length>80?K.snippet.slice(0,80)+"...":K.snippet},void 0,!1,void 0,this),K.note.trim()&&P("div",{className:"text-[13px] font-body text-text-primary leading-relaxed",children:K.note},void 0,!1,void 0,this),P(w3,{images:K.images||[]},void 0,!1,void 0,this),P("div",{className:"absolute top-1.5 right-1.5 opacity-0 group-hover/ann:opacity-100 transition-opacity duration-100",children:P("button",{onClick:(F)=>{F.stopPropagation(),D2(K,J)},className:"w-5 h-5 flex items-center justify-center rounded text-text-tertiary hover:text-text-secondary hover:bg-bg-input transition-colors",title:"Scroll to annotation",children:P("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[P("circle",{cx:"12",cy:"12",r:"3"},void 0,!1,void 0,this),P("path",{d:"M12 2v4M12 18v4M2 12h4M18 12h4"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},K.id,!0,void 0,this),W=[Y,X,G].filter((K)=>K.length>0).length>1;return P(a0,{children:[P("div",{className:"flex-1 overflow-y-auto",children:[Y.length>0&&P(a0,{children:[W&&P("div",{className:"text-[10px] uppercase tracking-widest text-text-tertiary font-body px-3 mb-1 mt-1",children:"Agent Response"},void 0,!1,void 0,this),Y.map(T)]},void 0,!0,void 0,this),X.length>0&&P(a0,{children:[W&&P("div",{className:"text-[10px] uppercase tracking-widest text-text-tertiary font-body px-3 mb-1 mt-1",children:"Canvas"},void 0,!1,void 0,this),X.map(T)]},void 0,!0,void 0,this),Object.entries(z).map(([K,F])=>P("div",{children:[P("button",{onClick:()=>J({type:"file",path:K}),className:"flex items-center gap-1.5 text-[10px] uppercase tracking-widest text-text-tertiary hover:text-text-secondary font-body px-3 pt-3 pb-1 truncate transition-colors w-full text-left",title:K,children:[P(x1,{name:K.split("/").pop()||K,type:"file"},void 0,!1,void 0,this),P("span",{className:"truncate",children:K},void 0,!1,void 0,this)]},void 0,!0,void 0,this),F.map(T)]},K,!0,void 0,this))]},void 0,!0,void 0,this),$.trim()&&P("div",{className:"border-t border-border-subtle px-4 py-3 flex-shrink-0",children:P("div",{className:"text-[13px] font-body text-text-primary leading-relaxed",children:$},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function B4({onSubmit:Z,agentWatching:$,collapseButton:q}){let[Q,J]=m1(!1),{annotations:Y,updateAnnotation:X,removeAnnotation:G,addAnnotationImage:z,removeAnnotationImage:_,generalNote:H,setGeneralNote:U,activeAnnotationId:T,setActiveAnnotationId:W,responses:K,feedbackEntries:F}=Y1(),N=s0(u3),{setActiveView:y}=K4.useContext(V1),O=m3(null),D=m3(new Map),S=Y.filter((L)=>L.filePath===T1),M=Y.filter((L)=>!L.filePath),w=Y.filter((L)=>L.filePath&&L.filePath!==T1),C={};for(let L of w){let d=L.filePath;if(!C[d])C[d]=[];C[d].push(L)}o0(()=>{if(!T)return;let L=D.current.get(T);if(L)L.scrollIntoView({behavior:"smooth",block:"nearest"})},[T]);let k=k2((L)=>{W(L),i1(L,!0)},[W]),c=k2((L)=>{W(null),i1(L,!1)},[T]),v=H4(()=>Y.filter((L)=>L.source==="remote"),[Y]),[V,E]=m1(()=>new Set);o0(()=>{if(v.length===0)return;E((L)=>{let d=new Set(L);for(let x of v)d.add(x.id);return d.size===L.size?L:d})},[v]);let g=k2((L)=>{E((d)=>{let x=new Set(d);if(x.has(L))x.delete(L);else x.add(L);return x})},[]),l=Array.from(K.values()).some(I2),b=F.size>0,u=Y.length>0||H.trim().length>0||l||b,[h,A]=m1(null),I=(L)=>{let d=L.source==="remote";return P("div",{ref:(x)=>{if(x)D.current.set(L.id,x);else D.current.delete(L.id)},className:`group/ann relative px-3 py-2.5 transition-colors duration-150 ${T===L.id?"bg-highlight-selected":d?"bg-accent-purple-muted/30 hover:bg-accent-purple-muted/50":"odd:bg-bg-elevated-half hover:bg-bg-input"}`,onMouseEnter:()=>k(L.id),onMouseLeave:()=>c(L.id),onClick:()=>{if(L.id===T)W(null);else if(W(L.id),L.filePath)y({type:"file",path:L.filePath}),setTimeout(()=>{let x=w0(L);if(x)x.scrollIntoView({behavior:"smooth",block:"center"})},150)},children:[d&&L.author&&P("div",{className:"flex items-center gap-1.5 mb-1.5",children:[P("input",{type:"checkbox",checked:V.has(L.id),onChange:(x)=>{x.stopPropagation(),g(L.id)},onClick:(x)=>x.stopPropagation(),className:"accent-accent-purple flex-shrink-0",title:"Include in submission"},void 0,!1,void 0,this),P("span",{className:"inline-flex items-center justify-center w-4 h-4 rounded-full bg-accent-purple text-white text-[9px] font-medium uppercase",children:L.author.name.charAt(0)},void 0,!1,void 0,this),P("span",{className:"text-[11px] font-medium text-accent-purple font-body",children:L.author.name},void 0,!1,void 0,this),P("span",{className:"text-[10px] text-text-tertiary font-body uppercase tracking-widest",children:"Remote"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),P("div",{className:"text-[11px] text-text-tertiary italic line-clamp-2 mb-1.5 leading-snug font-body border-l-2 border-border-medium pl-2",children:L.snippet.length>80?L.snippet.slice(0,80)+"...":L.snippet},void 0,!1,void 0,this),d?P("div",{className:"text-[13px] font-body text-text-primary leading-relaxed whitespace-pre-wrap",children:L.note},void 0,!1,void 0,this):P("div",{onClick:(x)=>x.stopPropagation(),children:P(g0,{note:L.note,onNoteChange:(x)=>X(L.id,x),images:L.images||[],onAddImage:(x)=>z(L.id,x),onRemoveImage:(x)=>_(L.id,x),sessionId:N,autoResize:!0,minHeight:20,textareaClassName:"w-full bg-transparent text-[13px] font-body text-text-primary resize-none focus:outline-none leading-relaxed p-0 border-none min-h-[20px]",textareaStyle:{height:"auto",overflow:"hidden"},placeholder:"Add your note...",attachButton:"on-focus"},void 0,!1,void 0,this)},void 0,!1,void 0,this),P("div",{className:"absolute top-1.5 right-1.5 opacity-0 group-hover/ann:opacity-100 transition-opacity duration-100 flex items-center gap-0.5",children:[P("button",{onClick:(x)=>{x.stopPropagation(),D2(L,y)},className:"w-5 h-5 flex items-center justify-center rounded text-text-tertiary hover:text-text-secondary hover:bg-bg-input transition-colors",title:"Scroll to annotation",children:P("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[P("circle",{cx:"12",cy:"12",r:"3"},void 0,!1,void 0,this),P("path",{d:"M12 2v4M12 18v4M2 12h4M18 12h4"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),!d&&P("button",{onClick:(x)=>{x.stopPropagation(),G(L.id)},className:"w-5 h-5 flex items-center justify-center rounded text-text-tertiary hover:text-accent-red hover:bg-accent-red-muted transition-colors",title:"Delete annotation",children:P("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[P("polyline",{points:"3 6 5 6 21 6"},void 0,!1,void 0,this),P("path",{d:"M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6m3 0V4a2 2 0 012-2h4a2 2 0 012 2v2"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},L.id,!0,void 0,this)};return P("div",{className:"flex flex-col h-full",children:[P("div",{className:"px-4 py-3 flex items-center justify-between flex-shrink-0",children:[P("span",{className:"text-[11px] font-medium uppercase tracking-widest text-text-tertiary font-body flex items-center gap-2",children:["Annotations",Y.length>0&&P("span",{className:"inline-flex items-center justify-center min-w-[18px] h-[18px] px-1 rounded-full bg-border-subtle text-[10px] font-medium text-text-secondary",children:Y.length},void 0,!1,void 0,this),!e.isShared&&P("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${$?"bg-accent-green":"bg-accent-amber"}`,title:$?"Agent connected":"Agent disconnected"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),q]},void 0,!0,void 0,this),P("div",{ref:O,className:"flex-1 overflow-y-auto",children:[Y.length===0&&P("p",{className:"text-[12px] text-text-tertiary px-3 py-4 leading-relaxed font-body",children:"Select text in the canvas or in files to add annotations."},void 0,!1,void 0,this),S.length>0&&P(a0,{children:[(M.length>0||w.length>0)&&P("div",{className:"text-[10px] uppercase tracking-widest text-text-tertiary font-body px-3 mb-1 mt-1",children:"Agent Response"},void 0,!1,void 0,this),S.map(I)]},void 0,!0,void 0,this),M.length>0&&(S.length>0||w.length>0)&&P("div",{className:"text-[10px] uppercase tracking-widest text-text-tertiary font-body px-3 mb-1 mt-1",children:"Canvas"},void 0,!1,void 0,this),M.map(I),Object.entries(C).map(([L,d])=>P("div",{children:[P("button",{onClick:()=>y({type:"file",path:L}),className:"flex items-center gap-1.5 text-[10px] uppercase tracking-widest text-text-tertiary hover:text-text-secondary font-body px-3 pt-3 pb-1 truncate transition-colors w-full text-left",title:L,children:[P(x1,{name:L.split("/").pop()||L,type:"file"},void 0,!1,void 0,this),P("span",{className:"truncate",children:L},void 0,!1,void 0,this)]},void 0,!0,void 0,this),d.map(I)]},L,!0,void 0,this))]},void 0,!0,void 0,this),P("div",{className:"border-t border-border-subtle px-4 py-3 flex-shrink-0",children:P("textarea",{value:H,onChange:(L)=>U(L.target.value),className:"w-full bg-transparent text-[13px] font-body text-text-primary resize-none leading-relaxed p-0 border-none ring-0 shadow-none outline-none focus:outline-none focus:ring-0 focus:border-none placeholder:text-text-disabled min-h-[40px]",placeholder:"General notes...",onInput:(L)=>B0(L.target,40),ref:(L)=>{if(L)B0(L,40)}},void 0,!1,void 0,this)},void 0,!1,void 0,this),h&&P("div",{className:"px-4 py-2 text-[12px] text-accent-red font-body border-t border-border-subtle flex-shrink-0 flex items-center justify-between gap-2",children:[P("span",{children:h},void 0,!1,void 0,this),P("button",{onClick:()=>{A(null);let L=y0(Y,H,K,F,V);Z(L)},className:"text-[11px] text-text-tertiary hover:text-text-secondary font-body whitespace-nowrap underline",children:"Submit anyway"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),P("div",{className:"px-4 py-3 border-t border-border-subtle flex-shrink-0",children:u?P("div",{className:"flex gap-2",children:[P("button",{onClick:()=>J(!0),className:"flex-1 py-2 rounded-lg font-body text-[13px] font-medium transition-all bg-border-subtle text-text-secondary hover:bg-border-medium hover:text-text-primary",children:"Preview"},void 0,!1,void 0,this),P("button",{onClick:()=>{let L=l0(K,F);if(L.length>0){A(`Please answer: ${L.join(", ")}`);return}A(null);let d=y0(Y,H,K,F,V);Z(d)},className:"flex-1 py-2 rounded-lg font-body text-[13px] font-medium transition-all bg-btn-primary text-btn-primary-text hover:opacity-90 hover:-translate-y-px shadow-sm",children:"Submit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):P("button",{onClick:()=>Z("No feedback — looks good."),className:"w-full py-2 rounded-lg font-body text-[13px] font-medium border border-border-medium text-text-secondary hover:text-text-primary hover:border-border-hover hover:bg-bg-input transition-all",children:"Submit without feedback"},void 0,!1,void 0,this)},void 0,!1,void 0,this),P(E3,{open:Q,onClose:()=>J(!1),onSubmit:Z,includedRemoteIds:V,onToggleRemoteId:g},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useEffect as F4,useState as f3,useContext as v3,useMemo as L4}from"react";import{SessionContext as M4}from"#canvas/runtime";import{jsxDEV as i,Fragment as x2}from"react/jsx-dev-runtime";function h3({embedded:Z}={}){let $=v3(M4),{annotations:q,addAnnotation:Q}=Y1(),{setActiveView:J}=v3(V1),[Y,X]=f3(!1),[G,z]=f3({});if(!F1)return i("div",{className:Z?"px-4 py-3":"p-4",children:[i("div",{className:"text-[11px] uppercase tracking-widest text-text-tertiary font-body mb-2",children:"Files"},void 0,!1,void 0,this),i("p",{className:"text-[11px] text-text-tertiary font-body leading-relaxed",children:"File browsing is not available in shared view. File previews embedded in the canvas still work."},void 0,!1,void 0,this)]},void 0,!0,void 0,this);let{annCountMap:_,annotatedFiles:H}=L4(()=>{let O=new Map;for(let D of q)if(D.filePath&&D.filePath!==T1)O.set(D.filePath,(O.get(D.filePath)||0)+1);return{annCountMap:O,annotatedFiles:[...O.keys()]}},[q]),U=async(O)=>{let S=await(await fetch(`/api/tree?session=${$}&path=${encodeURIComponent(O)}`)).json();if(S.entries)z((M)=>({...M,[O]:{entries:S.entries,expanded:!0,loaded:!0}}))};F4(()=>{if(!Y&&!G[""])U("")},[Y]);let T=(O)=>{if(G[O]?.loaded)z((D)=>({...D,[O]:{...D[O],expanded:!D[O].expanded}}));else U(O)},W=(O)=>{J({type:"file",path:O})},K=async(O)=>{let S=await(await fetch(`/api/file?session=${$}&path=${encodeURIComponent(O)}`)).json();if(!S.error){let M=S.content.split(`
68
+ `)}function Y4(Z){let $={label:"",annotations:[],children:new Map};for(let q of Z){let Q=q.context?.hierarchy||[],J=$;for(let Y of Q){if(!J.children.has(Y))J.children.set(Y,{label:Y,annotations:[],children:new Map});J=J.children.get(Y)}J.annotations.push(q)}return $}function m3(Z,$=0){let q=[];for(let Q of Z.annotations)q.push(R2(Q));for(let[,Q]of Z.children){let J=$===0?"###":"####";q.push(`${J} ${Q.label}`),q.push(""),q.push(m3(Q,$+1))}return q.join(`
69
+ `)}import{SessionContext as v3}from"#canvas/runtime";import{useEffect as x3,useState as j0,useRef as X4,useMemo as k2}from"react";import{jsxDEV as Q1}from"react/jsx-dev-runtime";function u3({open:Z,onClose:$,onSubmit:q,includedRemoteIds:Q,onToggleRemoteId:J}){let{annotations:Y,generalNote:X,responses:G,feedbackEntries:z}=Y1(),[_,H]=j0(""),[U,T]=j0(!1),[W,K]=j0(!1),[F,N]=j0(null),y=X4(null),[O,D]=j0(!1),S=k2(()=>Y.filter((k)=>k.source==="remote"),[Y]);if(Z&&!O)T(!1),K(!1),N(null);if(!Z&&O)T(!1),K(!1),N(null);if(Z!==O)D(Z);let M=k2(()=>b0(Y,X,G,z,Q),[Y,X,G,z,Q]),b=U?_:M;if(x3(()=>{if(Z&&W&&y.current)y.current.focus()},[Z,W]),x3(()=>{if(!Z)return;let k=(c)=>{if(c.key==="Escape")$()};return window.addEventListener("keydown",k),()=>window.removeEventListener("keydown",k)},[Z,$]),!Z)return null;let C=b.trim().length>0;return Q1("div",{className:"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm flex items-center justify-center p-8",onClick:$,children:Q1("div",{className:"bg-bg-surface border border-border-medium rounded-xl shadow-lg w-full max-w-2xl flex flex-col",style:{height:"80vh"},onClick:(k)=>k.stopPropagation(),children:[Q1("div",{className:"flex items-center justify-between px-5 py-3 border-b border-border-subtle flex-shrink-0",children:[Q1("div",{className:"flex items-center gap-3",children:[Q1("span",{className:"text-[13px] font-medium text-text-primary font-body",children:"Response preview"},void 0,!1,void 0,this),U&&Q1("button",{onClick:()=>{T(!1),K(!1)},className:"text-[11px] text-text-tertiary hover:text-text-secondary font-body",children:"Reset"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q1("div",{className:"flex items-center gap-2",children:[Q1("div",{className:"flex items-center bg-bg-base rounded-md p-0.5",children:[Q1("button",{onClick:()=>K(!1),className:`px-2.5 py-1 rounded text-[11px] font-body font-medium transition-colors ${!W?"bg-bg-elevated text-text-primary shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:"Preview"},void 0,!1,void 0,this),Q1("button",{onClick:()=>K(!0),className:`px-2.5 py-1 rounded text-[11px] font-body font-medium transition-colors ${W?"bg-bg-elevated text-text-primary shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:"Edit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q1("button",{onClick:$,className:"text-text-tertiary hover:text-text-secondary w-7 h-7 flex items-center justify-center rounded-md hover:bg-border-subtle transition-colors",children:"✕"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),W?Q1("textarea",{ref:y,value:b,onChange:(k)=>{H(k.target.value),T(!0)},className:"flex-1 w-full bg-bg-base p-5 text-[13px] font-mono text-text-code resize-none focus:outline-none leading-relaxed placeholder:text-text-disabled",placeholder:"Your feedback will appear here..."},void 0,!1,void 0,this):Q1("div",{className:"flex-1 overflow-y-auto p-5",children:Q1(s0,{text:b},void 0,!1,void 0,this)},void 0,!1,void 0,this),S.length>0&&Q1("div",{className:"px-5 py-2 border-t border-border-subtle flex-shrink-0",children:Q1("span",{className:"text-[12px] text-text-secondary font-body",children:["Reviewer feedback: ",Q.size,"/",S.length," included"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),F&&Q1("div",{className:"px-5 py-2 text-[12px] text-accent-red font-body border-t border-border-subtle flex-shrink-0 flex items-center justify-between gap-2",children:[Q1("span",{children:F},void 0,!1,void 0,this),Q1("button",{onClick:()=>{N(null),q(b)},className:"text-[11px] text-text-tertiary hover:text-text-secondary font-body whitespace-nowrap underline",children:"Submit anyway"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q1("div",{className:"flex justify-end gap-2 px-5 py-3 border-t border-border-subtle flex-shrink-0",children:[Q1("button",{onClick:$,className:"px-4 py-2 rounded-lg text-[13px] font-body text-text-tertiary hover:text-text-secondary transition-colors",children:"Cancel"},void 0,!1,void 0,this),Q1("button",{onClick:()=>{let k=o0(G,z);if(k.length>0){N(`Please answer: ${k.join(", ")}`);return}N(null),q(b)},disabled:!C,className:`px-6 py-2 rounded-lg font-body text-[13px] font-medium transition-all ${C?"bg-btn-primary text-btn-primary-text hover:opacity-90":"bg-bg-input text-text-disabled cursor-default"}`,children:"Submit feedback"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var z4=/!\[([^\]]*)\]\((\/tmp\/agent-canvas\/uploads\/([^)]+))\)/g;function _4(Z){return Z.replace(z4,($,q,Q,J)=>`![${q}](/api/uploads/${J})`)}function s0({text:Z}){let $=k2(()=>e.parse(_4(Z),{async:!1}),[Z]);return Q1("div",{className:"prose-canvas font-body text-body text-text-primary leading-relaxed",dangerouslySetInnerHTML:{__html:$}},void 0,!1,void 0,this)}import{jsxDEV as $0}from"react/jsx-dev-runtime";var G4={ts:"#3178c6",tsx:"#3178c6",js:"#e8a32e",jsx:"#4ba0c8",html:"#e34c26",css:"#264de4",scss:"#c69",json:"#7a7568",yaml:"#cb171e",yml:"#cb171e",toml:"#9c4221",rs:"#dea584",go:"#00add8",c:"#6a6a6a",cpp:"#f34b7d",h:"#6a6a6a",py:"#3572a5",rb:"#cc342d",sh:"#5a8c3c",bash:"#5a8c3c",md:"#3573b5",txt:"#6b6560",lock:"#6b6560",gitignore:"#6b6560",svg:"#d9952e",png:"#6a9c2e",jpg:"#6a9c2e",gif:"#6a9c2e"},U4={ts:"TS",tsx:"TX",js:"JS",jsx:"JX",py:"PY",rs:"RS",go:"GO",rb:"RB",json:"{}",yaml:"YM",yml:"YM",toml:"TM",html:"<>",css:"#",scss:"#",md:"M↓",sh:"$",bash:"$",c:"C",cpp:"C+",h:"H",svg:"◇",png:"▣",jpg:"▣"};function x1({name:Z,type:$,expanded:q,className:Q=""}){if($==="dir")return $0("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",className:`flex-shrink-0 ${Q}`,children:q?$0("path",{d:"M1.5 3.5h5l1.5 1.5h6.5v8h-13z",style:{fill:"var(--color-folder-fill-active)",stroke:"var(--color-folder-stroke-active)"},strokeWidth:"1"},void 0,!1,void 0,this):$0("path",{d:"M1.5 3.5h5l1.5 1.5h6.5v8h-13z",style:{fill:"var(--color-folder-fill)",stroke:"var(--color-folder-stroke)"},strokeWidth:"1"},void 0,!1,void 0,this)},void 0,!1,void 0,this);let J=Z.includes(".")?Z.split(".").pop().toLowerCase():"",Y=G4[J]||"#6b6560",X=U4[J];return $0("svg",{width:"14",height:"14",viewBox:"0 0 16 16",className:`flex-shrink-0 ${Q}`,children:[$0("path",{d:"M2 1.5h8l3.5 3.5v9.5a1 1 0 01-1 1H3a1 1 0 01-1-1v-12a1 1 0 011-1z",fill:Y,opacity:"0.85"},void 0,!1,void 0,this),$0("path",{d:"M10 1.5v2.5a1 1 0 001 1h2.5",fill:"none",stroke:"white",strokeWidth:"0.5",opacity:"0.5"},void 0,!1,void 0,this),X&&$0("text",{x:"8",y:"11.5",textAnchor:"middle",fill:"white",fontSize:"5.5",fontFamily:"monospace",fontWeight:"600",children:X},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function K4(Z){let $=Z.getAttribute("data-md");if($==="item"){let q=Z.getAttribute("data-md-label");return q?`[Item] ${q}`:null}if($==="section"){let q=Z.getAttribute("data-md-title");return q?`[Section] ${q}`:null}if($==="callout"){let q=Z.getAttribute("data-md-type")||"info",Q=Z.textContent?.trim().slice(0,60)||"Callout";return`[Callout:${q}] ${Q}`}if($==="note")return`[Note] ${Z.textContent?.trim().slice(0,60)||"Note"}`;if(Z.tagName==="TR"){let q=Array.from(Z.querySelectorAll("td")).map((Q)=>Q.textContent?.trim()).filter(Boolean);return q.length?`[Row] ${q.join(" | ")}`:null}if($==="checklist-item"){let q=Z.getAttribute("data-md-label");return q?`[Checklist] ${q}`:null}if($==="choice-option"||$==="multichoice-option"){let q=Z.getAttribute("data-md-label");return q?`[Option] ${q}`:null}if($==="userinput"){let q=Z.getAttribute("data-md-label");return q?`[Input] ${q}`:null}if($==="rangeinput"){let q=Z.getAttribute("data-md-label");return q?`[Range] ${q}`:null}if($==="image"){let q=Z.getAttribute("data-md-src");return q?`[Image] ${q}`:null}return null}function w0(Z){let $=document.querySelector(`[data-annotation-id="${Z.id}"]`);if($)return $;if(Z.snippet.startsWith("[")){for(let q of document.querySelectorAll("[data-md='item'], [data-md='section'], [data-md='table'] tbody tr, [data-md='callout'], [data-md='note'], [data-md='checklist-item'], [data-md='image']"))if(K4(q)===Z.snippet)return q}return null}function g3(Z){Z.classList.remove("ann-flash"),Z.offsetWidth,Z.classList.add("ann-flash"),Z.addEventListener("animationend",()=>{Z.classList.remove("ann-flash")},{once:!0})}function E2(Z,$){if(Z.filePath)$({type:"file",path:Z.filePath}),setTimeout(()=>{let q=w0(Z);if(q)q.scrollIntoView({behavior:"smooth",block:"center"}),g3(q)},150);else{let q=w0(Z);if(q)q.scrollIntoView({behavior:"smooth",block:"center"}),g3(q)}}import{jsxDEV as P,Fragment as t0}from"react/jsx-dev-runtime";function x2({onSubmit:Z,collapseButton:$}){let{isReadOnly:q,selectedRevision:Q,currentRevision:J,revisions:Y,agentWatching:X}=e0(w1),G=e0(v3),z=Y.find((T)=>T.revision===Q),_=q&&Q===J,H=!!z?.feedbackConsumed,U=z?.label||`Round ${Q}`;if(q)return P(N4,{sessionId:G,revision:Q,label:U,waitingForUpdate:_,feedbackConsumed:H,agentWatching:X,collapseButton:$},void 0,!1,void 0,this);return P(F4,{onSubmit:Z,agentWatching:X,collapseButton:$},void 0,!1,void 0,this)}function T4({sessionId:Z,revision:$,label:q,waitingForUpdate:Q,feedbackConsumed:J,agentWatching:Y,collapseButton:X}){let G=$1.isShared,[z,_]=u1(null),[H,U]=u1(!0);return n0(()=>{if(U(!0),!L1){_(null),U(!1);return}fetch(`/api/session/${Z}/revision/${$}/feedback`).then((T)=>T.json()).then((T)=>{_(T.feedback||null),U(!1)}).catch(()=>{_(null),U(!1)})},[Z,$]),P("div",{className:"flex flex-col h-full",children:[P("div",{className:"px-4 py-3 flex items-center justify-between flex-shrink-0",children:[P("span",{className:"text-[11px] font-medium uppercase tracking-widest text-text-tertiary font-body",children:Q?"Feedback sent":`Feedback — ${q}`},void 0,!1,void 0,this),X]},void 0,!0,void 0,this),Q&&!G&&P(h3,{feedbackConsumed:J,agentWatching:Y},void 0,!1,void 0,this),P("div",{className:"flex-1 overflow-y-auto px-4",children:H?P("p",{className:"text-[12px] text-text-tertiary font-body py-4",children:"Loading..."},void 0,!1,void 0,this):z?P(s0,{text:z},void 0,!1,void 0,this):P("p",{className:"text-[12px] text-text-tertiary font-body py-4",children:"No feedback was submitted for this revision."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function h3({feedbackConsumed:Z,agentWatching:$}){if(Z)return P("div",{className:"mx-4 mb-3 px-3 py-2.5 rounded-lg bg-accent-green-muted flex items-center gap-2 flex-shrink-0",children:[P("span",{className:"w-2 h-2 rounded-full bg-accent-green animate-pulse"},void 0,!1,void 0,this),P("span",{className:"text-[12px] font-body text-accent-green",children:"Feedback received — waiting for next revision..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if($)return P("div",{className:"mx-4 mb-3 px-3 py-2.5 rounded-lg bg-accent-blue-muted flex items-center gap-2 flex-shrink-0",children:[P("span",{className:"w-2 h-2 rounded-full bg-accent-blue animate-pulse"},void 0,!1,void 0,this),P("span",{className:"text-[12px] font-body text-accent-blue",children:"Waiting for agent to pick up feedback..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return P("div",{className:"mx-4 mb-3 px-3 py-2.5 rounded-lg bg-accent-amber-muted flex items-center gap-2 flex-shrink-0",children:[P("span",{className:"w-2 h-2 rounded-full bg-accent-amber"},void 0,!1,void 0,this),P("span",{className:"text-[12px] font-body text-accent-amber",children:"Agent disconnected — tell Claude to check feedback"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function N4({sessionId:Z,revision:$,label:q,waitingForUpdate:Q,feedbackConsumed:J,agentWatching:Y,collapseButton:X}){let{annotations:G,generalNote:z,activeAnnotationId:_,setActiveAnnotationId:H}=Y1(),{setActiveView:U}=e0(I1),T=G.length>0||z.trim().length>0,[W,K]=u1("feedback");if(!T)return P(T4,{sessionId:Z,revision:$,label:q,waitingForUpdate:Q,feedbackConsumed:J,agentWatching:Y,collapseButton:X},void 0,!1,void 0,this);return P("div",{className:"flex flex-col h-full",children:[P("div",{className:"px-4 py-3 flex items-center justify-between flex-shrink-0",children:[P("div",{className:"flex items-center gap-1 bg-bg-input rounded-md p-0.5",children:[P("button",{onClick:()=>K("feedback"),className:`px-2.5 py-1 rounded text-[11px] font-medium font-body transition-colors ${W==="feedback"?"bg-bg-elevated text-text-primary shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:"Feedback"},void 0,!1,void 0,this),P("button",{onClick:()=>K("annotations"),className:`px-2.5 py-1 rounded text-[11px] font-medium font-body transition-colors flex items-center gap-1.5 ${W==="annotations"?"bg-bg-elevated text-text-primary shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:["Annotations",P("span",{className:"inline-flex items-center justify-center min-w-[16px] h-[16px] px-1 rounded-full bg-border-subtle text-[10px] font-medium",children:G.length},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X]},void 0,!0,void 0,this),Q&&P(h3,{feedbackConsumed:J,agentWatching:Y},void 0,!1,void 0,this),W==="feedback"?P(O4,{sessionId:Z,revision:$},void 0,!1,void 0,this):P(B4,{annotations:G,generalNote:z,activeAnnotationId:_,setActiveAnnotationId:H,setActiveView:U},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function O4({sessionId:Z,revision:$}){let[q,Q]=u1(null),[J,Y]=u1(!0);return n0(()=>{if(Y(!0),!L1){Q(null),Y(!1);return}fetch(`/api/session/${Z}/revision/${$}/feedback`).then((X)=>X.json()).then((X)=>{Q(X.feedback||null),Y(!1)}).catch(()=>{Q(null),Y(!1)})},[Z,$]),P("div",{className:"flex-1 overflow-y-auto px-4",children:J?P("p",{className:"text-[12px] text-text-tertiary font-body py-4",children:"Loading..."},void 0,!1,void 0,this):q?P(s0,{text:q},void 0,!1,void 0,this):P("p",{className:"text-[12px] text-text-tertiary font-body py-4",children:"No feedback was submitted for this revision."},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function B4({annotations:Z,generalNote:$,activeAnnotationId:q,setActiveAnnotationId:Q,setActiveView:J}){let Y=Z.filter((K)=>K.filePath===T1),X=Z.filter((K)=>!K.filePath),G=Z.filter((K)=>K.filePath&&K.filePath!==T1),z={};for(let K of G){let F=K.filePath;if(!z[F])z[F]=[];z[F].push(K)}let _=(K)=>{Q(K),a1(K,!0)},H=(K)=>{Q(null),a1(K,!1)},U=(K)=>{if(K.id===q)Q(null);else if(Q(K.id),K.filePath)J({type:"file",path:K.filePath}),setTimeout(()=>{let F=w0(K);if(F)F.scrollIntoView({behavior:"smooth",block:"center"})},150)},T=(K)=>P("div",{className:`group/ann relative px-3 py-2.5 transition-colors duration-150 cursor-pointer ${q===K.id?"bg-highlight-selected":"odd:bg-bg-elevated-half hover:bg-bg-input"}`,onMouseEnter:()=>_(K.id),onMouseLeave:()=>H(K.id),onClick:()=>U(K),children:[P("div",{className:"text-[11px] text-text-tertiary italic line-clamp-2 mb-1.5 leading-snug font-body border-l-2 border-border-medium pl-2",children:K.snippet.length>80?K.snippet.slice(0,80)+"...":K.snippet},void 0,!1,void 0,this),K.note.trim()&&P("div",{className:"text-[13px] font-body text-text-primary leading-relaxed",children:K.note},void 0,!1,void 0,this),P(A3,{images:K.images||[]},void 0,!1,void 0,this),P("div",{className:"absolute top-1.5 right-1.5 opacity-0 group-hover/ann:opacity-100 transition-opacity duration-100",children:P("button",{onClick:(F)=>{F.stopPropagation(),E2(K,J)},className:"w-5 h-5 flex items-center justify-center rounded text-text-tertiary hover:text-text-secondary hover:bg-bg-input transition-colors",title:"Scroll to annotation",children:P("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[P("circle",{cx:"12",cy:"12",r:"3"},void 0,!1,void 0,this),P("path",{d:"M12 2v4M12 18v4M2 12h4M18 12h4"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},K.id,!0,void 0,this),W=[Y,X,G].filter((K)=>K.length>0).length>1;return P(t0,{children:[P("div",{className:"flex-1 overflow-y-auto",children:[Y.length>0&&P(t0,{children:[W&&P("div",{className:"text-[10px] uppercase tracking-widest text-text-tertiary font-body px-3 mb-1 mt-1",children:"Agent Response"},void 0,!1,void 0,this),Y.map(T)]},void 0,!0,void 0,this),X.length>0&&P(t0,{children:[W&&P("div",{className:"text-[10px] uppercase tracking-widest text-text-tertiary font-body px-3 mb-1 mt-1",children:"Canvas"},void 0,!1,void 0,this),X.map(T)]},void 0,!0,void 0,this),Object.entries(z).map(([K,F])=>P("div",{children:[P("button",{onClick:()=>J({type:"file",path:K}),className:"flex items-center gap-1.5 text-[10px] uppercase tracking-widest text-text-tertiary hover:text-text-secondary font-body px-3 pt-3 pb-1 truncate transition-colors w-full text-left",title:K,children:[P(x1,{name:K.split("/").pop()||K,type:"file"},void 0,!1,void 0,this),P("span",{className:"truncate",children:K},void 0,!1,void 0,this)]},void 0,!0,void 0,this),F.map(T)]},K,!0,void 0,this))]},void 0,!0,void 0,this),$.trim()&&P("div",{className:"border-t border-border-subtle px-4 py-3 flex-shrink-0",children:P("div",{className:"text-[13px] font-body text-text-primary leading-relaxed",children:$},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function F4({onSubmit:Z,agentWatching:$,collapseButton:q}){let[Q,J]=u1(!1),{annotations:Y,updateAnnotation:X,removeAnnotation:G,addAnnotationImage:z,removeAnnotationImage:_,generalNote:H,setGeneralNote:U,activeAnnotationId:T,setActiveAnnotationId:W,responses:K,feedbackEntries:F}=Y1(),N=e0(v3),{setActiveView:y}=H4.useContext(I1),O=f3(null),D=f3(new Map),S=Y.filter((L)=>L.filePath===T1),M=Y.filter((L)=>!L.filePath),b=Y.filter((L)=>L.filePath&&L.filePath!==T1),C={};for(let L of b){let d=L.filePath;if(!C[d])C[d]=[];C[d].push(L)}n0(()=>{if(!T)return;let L=D.current.get(T);if(L)L.scrollIntoView({behavior:"smooth",block:"nearest"})},[T]);let k=m2((L)=>{W(L),a1(L,!0)},[W]),c=m2((L)=>{W(null),a1(L,!1)},[T]),v=W4(()=>Y.filter((L)=>L.source==="remote"),[Y]),[V,E]=u1(()=>new Set);n0(()=>{if(v.length===0)return;E((L)=>{let d=new Set(L);for(let m of v)d.add(m.id);return d.size===L.size?L:d})},[v]);let g=m2((L)=>{E((d)=>{let m=new Set(d);if(m.has(L))m.delete(L);else m.add(L);return m})},[]),l=Array.from(K.values()).some(D2),j=F.size>0,u=Y.length>0||H.trim().length>0||l||j,[h,A]=u1(null),I=(L)=>{let d=L.source==="remote";return P("div",{ref:(m)=>{if(m)D.current.set(L.id,m);else D.current.delete(L.id)},className:`group/ann relative px-3 py-2.5 transition-colors duration-150 ${T===L.id?"bg-highlight-selected":d?"bg-accent-purple-muted/30 hover:bg-accent-purple-muted/50":"odd:bg-bg-elevated-half hover:bg-bg-input"}`,onMouseEnter:()=>k(L.id),onMouseLeave:()=>c(L.id),onClick:()=>{if(L.id===T)W(null);else if(W(L.id),L.filePath)y({type:"file",path:L.filePath}),setTimeout(()=>{let m=w0(L);if(m)m.scrollIntoView({behavior:"smooth",block:"center"})},150)},children:[d&&L.author&&P("div",{className:"flex items-center gap-1.5 mb-1.5",children:[P("input",{type:"checkbox",checked:V.has(L.id),onChange:(m)=>{m.stopPropagation(),g(L.id)},onClick:(m)=>m.stopPropagation(),className:"accent-accent-purple flex-shrink-0",title:"Include in submission"},void 0,!1,void 0,this),P("span",{className:"inline-flex items-center justify-center w-4 h-4 rounded-full bg-accent-purple text-white text-[9px] font-medium uppercase",children:L.author.name.charAt(0)},void 0,!1,void 0,this),P("span",{className:"text-[11px] font-medium text-accent-purple font-body",children:L.author.name},void 0,!1,void 0,this),P("span",{className:"text-[10px] text-text-tertiary font-body uppercase tracking-widest",children:"Remote"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),P("div",{className:"text-[11px] text-text-tertiary italic line-clamp-2 mb-1.5 leading-snug font-body border-l-2 border-border-medium pl-2",children:L.snippet.length>80?L.snippet.slice(0,80)+"...":L.snippet},void 0,!1,void 0,this),d?P("div",{className:"text-[13px] font-body text-text-primary leading-relaxed whitespace-pre-wrap",children:L.note},void 0,!1,void 0,this):P("div",{onClick:(m)=>m.stopPropagation(),children:P(h0,{note:L.note,onNoteChange:(m)=>X(L.id,m),images:L.images||[],onAddImage:(m)=>z(L.id,m),onRemoveImage:(m)=>_(L.id,m),sessionId:N,autoResize:!0,minHeight:20,textareaClassName:"w-full bg-transparent text-[13px] font-body text-text-primary resize-none focus:outline-none leading-relaxed p-0 border-none min-h-[20px]",textareaStyle:{height:"auto",overflow:"hidden"},placeholder:"Add your note...",attachButton:"on-focus"},void 0,!1,void 0,this)},void 0,!1,void 0,this),P("div",{className:"absolute top-1.5 right-1.5 opacity-0 group-hover/ann:opacity-100 transition-opacity duration-100 flex items-center gap-0.5",children:[P("button",{onClick:(m)=>{m.stopPropagation(),E2(L,y)},className:"w-5 h-5 flex items-center justify-center rounded text-text-tertiary hover:text-text-secondary hover:bg-bg-input transition-colors",title:"Scroll to annotation",children:P("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[P("circle",{cx:"12",cy:"12",r:"3"},void 0,!1,void 0,this),P("path",{d:"M12 2v4M12 18v4M2 12h4M18 12h4"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),!d&&P("button",{onClick:(m)=>{m.stopPropagation(),G(L.id)},className:"w-5 h-5 flex items-center justify-center rounded text-text-tertiary hover:text-accent-red hover:bg-accent-red-muted transition-colors",title:"Delete annotation",children:P("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[P("polyline",{points:"3 6 5 6 21 6"},void 0,!1,void 0,this),P("path",{d:"M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6m3 0V4a2 2 0 012-2h4a2 2 0 012 2v2"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},L.id,!0,void 0,this)};return P("div",{className:"flex flex-col h-full",children:[P("div",{className:"px-4 py-3 flex items-center justify-between flex-shrink-0",children:[P("span",{className:"text-[11px] font-medium uppercase tracking-widest text-text-tertiary font-body flex items-center gap-2",children:["Annotations",Y.length>0&&P("span",{className:"inline-flex items-center justify-center min-w-[18px] h-[18px] px-1 rounded-full bg-border-subtle text-[10px] font-medium text-text-secondary",children:Y.length},void 0,!1,void 0,this),!$1.isShared&&P("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${$?"bg-accent-green":"bg-accent-amber"}`,title:$?"Agent connected":"Agent disconnected"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),q]},void 0,!0,void 0,this),P("div",{ref:O,className:"flex-1 overflow-y-auto",children:[Y.length===0&&P("p",{className:"text-[12px] text-text-tertiary px-3 py-4 leading-relaxed font-body",children:"Select text in the canvas or in files to add annotations."},void 0,!1,void 0,this),S.length>0&&P(t0,{children:[(M.length>0||b.length>0)&&P("div",{className:"text-[10px] uppercase tracking-widest text-text-tertiary font-body px-3 mb-1 mt-1",children:"Agent Response"},void 0,!1,void 0,this),S.map(I)]},void 0,!0,void 0,this),M.length>0&&(S.length>0||b.length>0)&&P("div",{className:"text-[10px] uppercase tracking-widest text-text-tertiary font-body px-3 mb-1 mt-1",children:"Canvas"},void 0,!1,void 0,this),M.map(I),Object.entries(C).map(([L,d])=>P("div",{children:[P("button",{onClick:()=>y({type:"file",path:L}),className:"flex items-center gap-1.5 text-[10px] uppercase tracking-widest text-text-tertiary hover:text-text-secondary font-body px-3 pt-3 pb-1 truncate transition-colors w-full text-left",title:L,children:[P(x1,{name:L.split("/").pop()||L,type:"file"},void 0,!1,void 0,this),P("span",{className:"truncate",children:L},void 0,!1,void 0,this)]},void 0,!0,void 0,this),d.map(I)]},L,!0,void 0,this))]},void 0,!0,void 0,this),P("div",{className:"border-t border-border-subtle px-4 py-3 flex-shrink-0",children:P("textarea",{value:H,onChange:(L)=>U(L.target.value),className:"w-full bg-transparent text-[13px] font-body text-text-primary resize-none leading-relaxed p-0 border-none ring-0 shadow-none outline-none focus:outline-none focus:ring-0 focus:border-none placeholder:text-text-disabled min-h-[40px]",placeholder:"General notes...",onInput:(L)=>L0(L.target,40),ref:(L)=>{if(L)L0(L,40)}},void 0,!1,void 0,this)},void 0,!1,void 0,this),h&&P("div",{className:"px-4 py-2 text-[12px] text-accent-red font-body border-t border-border-subtle flex-shrink-0 flex items-center justify-between gap-2",children:[P("span",{children:h},void 0,!1,void 0,this),P("button",{onClick:()=>{A(null);let L=b0(Y,H,K,F,V);Z(L)},className:"text-[11px] text-text-tertiary hover:text-text-secondary font-body whitespace-nowrap underline",children:"Submit anyway"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),P("div",{className:"px-4 py-3 border-t border-border-subtle flex-shrink-0",children:u?P("div",{className:"flex gap-2",children:[P("button",{onClick:()=>J(!0),className:"flex-1 py-2 rounded-lg font-body text-[13px] font-medium transition-all bg-border-subtle text-text-secondary hover:bg-border-medium hover:text-text-primary",children:"Preview"},void 0,!1,void 0,this),P("button",{onClick:()=>{let L=o0(K,F);if(L.length>0){A(`Please answer: ${L.join(", ")}`);return}A(null);let d=b0(Y,H,K,F,V);Z(d)},className:"flex-1 py-2 rounded-lg font-body text-[13px] font-medium transition-all bg-btn-primary text-btn-primary-text hover:opacity-90 hover:-translate-y-px shadow-sm",children:"Submit"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):P("button",{onClick:()=>Z("No feedback — looks good."),className:"w-full py-2 rounded-lg font-body text-[13px] font-medium border border-border-medium text-text-secondary hover:text-text-primary hover:border-border-hover hover:bg-bg-input transition-all",children:"Submit without feedback"},void 0,!1,void 0,this)},void 0,!1,void 0,this),P(u3,{open:Q,onClose:()=>J(!1),onSubmit:Z,includedRemoteIds:V,onToggleRemoteId:g},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useEffect as L4,useState as p3,useContext as c3,useMemo as M4}from"react";import{SessionContext as P4}from"#canvas/runtime";import{jsxDEV as i,Fragment as u2}from"react/jsx-dev-runtime";function d3({embedded:Z}={}){let $=c3(P4),{annotations:q,addAnnotation:Q}=Y1(),{setActiveView:J}=c3(I1),[Y,X]=p3(!1),[G,z]=p3({});if(!L1)return i("div",{className:Z?"px-4 py-3":"p-4",children:[i("div",{className:"text-[11px] uppercase tracking-widest text-text-tertiary font-body mb-2",children:"Files"},void 0,!1,void 0,this),i("p",{className:"text-[11px] text-text-tertiary font-body leading-relaxed",children:"File browsing is not available in shared view. File previews embedded in the canvas still work."},void 0,!1,void 0,this)]},void 0,!0,void 0,this);let{annCountMap:_,annotatedFiles:H}=M4(()=>{let O=new Map;for(let D of q)if(D.filePath&&D.filePath!==T1)O.set(D.filePath,(O.get(D.filePath)||0)+1);return{annCountMap:O,annotatedFiles:[...O.keys()]}},[q]),U=async(O)=>{let S=await(await fetch(`/api/tree?session=${$}&path=${encodeURIComponent(O)}`)).json();if(S.entries)z((M)=>({...M,[O]:{entries:S.entries,expanded:!0,loaded:!0}}))};L4(()=>{if(!Y&&!G[""])U("")},[Y]);let T=(O)=>{if(G[O]?.loaded)z((D)=>({...D,[O]:{...D[O],expanded:!D[O].expanded}}));else U(O)},W=(O)=>{J({type:"file",path:O})},K=async(O)=>{let S=await(await fetch(`/api/file?session=${$}&path=${encodeURIComponent(O)}`)).json();if(!S.error){let M=S.content.split(`
70
70
  `).slice(0,3).join(`
71
71
  `)+(S.content.split(`
72
72
  `).length>3?`
73
- ...`:"");Q(M,"Include this file for context",O)}},F=async(O)=>{let D=[];if(G[O]?.loaded)D=G[O].entries;else{let M=await(await fetch(`/api/tree?session=${$}&path=${encodeURIComponent(O)}`)).json();if(M.entries)D=M.entries}await Promise.all(D.filter((S)=>S.type==="file").map((S)=>K(O?`${O}/${S.name}`:S.name)))},N=(O)=>_.get(O)||0,y=(O,D=0)=>{let S=G[O];if(!S?.expanded)return null;return S.entries.map((M)=>{let w=O?`${O}/${M.name}`:M.name,C=N(w);return i("div",{children:[i("div",{className:"group/item flex items-center py-[3px] hover:bg-bg-elevated text-[13px] font-body cursor-default transition-colors duration-100",style:{paddingLeft:`${16+D*16}px`,paddingRight:"8px"},children:M.type==="dir"?i(x2,{children:[i("span",{onClick:()=>T(w),className:"flex items-center gap-1.5 flex-1 text-text-secondary hover:text-text-primary cursor-pointer truncate",children:[i(x1,{name:M.name,type:"dir",expanded:G[w]?.expanded},void 0,!1,void 0,this),i("span",{className:"truncate",children:M.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this),i("button",{onClick:(k)=>{k.stopPropagation(),F(w)},className:"text-[11px] text-text-tertiary hover:text-text-secondary opacity-0 group-hover/item:opacity-100 transition-opacity px-1 flex-shrink-0",title:"Add all files in folder",children:"+"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):i(x2,{children:[i("span",{onClick:()=>W(w),className:`flex-1 truncate cursor-pointer flex items-center gap-1.5 ${C>0?"text-text-primary":"text-text-secondary hover:text-text-primary"}`,children:[i(x1,{name:M.name,type:"file"},void 0,!1,void 0,this),i("span",{className:"truncate",children:M.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this),i("div",{className:"flex items-center gap-1 flex-shrink-0 ml-1",children:[C>0&&i("span",{className:"text-[10px] font-medium bg-badge-bg text-accent-amber px-1.5 py-px rounded-full min-w-[18px] text-center",children:C},void 0,!1,void 0,this),i("button",{onClick:(k)=>{k.stopPropagation(),K(w)},className:"text-[11px] text-text-tertiary hover:text-text-secondary opacity-0 group-hover/item:opacity-100 transition-opacity px-1",title:"Add file to context",children:"+"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),M.type==="dir"&&y(w,D+1)]},w,!0,void 0,this)})};if(Z)return i(x2,{children:[i("div",{className:"flex items-center justify-between px-4 pt-3 pb-2 flex-shrink-0",children:i("span",{className:"text-[11px] font-medium uppercase tracking-widest text-text-tertiary font-body",children:"Files"},void 0,!1,void 0,this)},void 0,!1,void 0,this),i("div",{className:"flex-1 overflow-y-auto",children:y("")},void 0,!1,void 0,this),H.length>0&&i("div",{className:"border-t border-border-subtle px-4 py-3 flex-shrink-0",children:[i("div",{className:"text-[10px] uppercase tracking-widest text-text-tertiary font-body mb-1.5",children:"Referenced"},void 0,!1,void 0,this),H.map((O)=>i("div",{onClick:()=>W(O),className:"flex items-center justify-between text-[12px] font-body text-text-secondary hover:text-text-primary cursor-pointer py-0.5",children:[i("span",{className:"truncate",children:O.split("/").pop()},void 0,!1,void 0,this),i("span",{className:"text-[10px] font-medium bg-badge-bg text-accent-amber px-1.5 py-px rounded-full min-w-[18px] text-center flex-shrink-0 ml-1",children:N(O)},void 0,!1,void 0,this)]},O,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);if(Y)return i("div",{className:"hidden lg:flex w-8 border-r border-border-subtle bg-bg-surface flex-col items-center flex-shrink-0",children:i("button",{onClick:()=>X(!1),className:"mt-3 p-1 text-text-tertiary hover:text-text-secondary transition-colors",children:i("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:i("path",{d:"M5 3l4 4-4 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);return i("div",{className:"hidden lg:flex w-60 border-r border-border-subtle bg-bg-surface flex-col flex-shrink-0 overflow-hidden",children:[i("div",{className:"flex items-center justify-between px-4 pt-4 pb-3 flex-shrink-0",children:[i("span",{className:"text-[11px] font-medium uppercase tracking-widest text-text-tertiary font-body",children:"Files"},void 0,!1,void 0,this),i("button",{onClick:()=>X(!0),className:"text-text-tertiary hover:text-text-secondary transition-colors p-0.5",children:i("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:i("path",{d:"M9 3l-4 4 4 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),i("div",{className:"flex-1 overflow-y-auto",children:y("")},void 0,!1,void 0,this),H.length>0&&i("div",{className:"border-t border-border-subtle px-4 py-3 flex-shrink-0",children:[i("div",{className:"text-[10px] uppercase tracking-widest text-text-tertiary font-body mb-1.5",children:"Referenced"},void 0,!1,void 0,this),H.map((O)=>i("div",{onClick:()=>W(O),className:"flex items-center justify-between text-[12px] font-body text-text-secondary hover:text-text-primary cursor-pointer py-0.5",children:[i("span",{className:"truncate",children:O.split("/").pop()},void 0,!1,void 0,this),i("span",{className:"text-[10px] font-medium bg-badge-bg text-accent-amber px-1.5 py-px rounded-full min-w-[18px] text-center flex-shrink-0 ml-1",children:N(O)},void 0,!1,void 0,this)]},O,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}import{useEffect as p3,useState as _0,useContext as P4,useCallback as y4,useRef as n0,useMemo as c3}from"react";import{SessionContext as S4}from"#canvas/runtime";var t0={ts:"typescript",tsx:"typescript",js:"javascript",jsx:"javascript",py:"python",rs:"rust",go:"go",rb:"ruby",java:"java",json:"json",yaml:"yaml",yml:"yaml",md:"markdown",css:"css",html:"html",sh:"bash",bash:"bash",toml:"toml",sql:"sql",xml:"xml",c:"c",cpp:"cpp",h:"c"};import{jsxDEV as W1}from"react/jsx-dev-runtime";function d3(Z){let $=Z instanceof HTMLElement?Z:Z.parentElement;while($){if($.hasAttribute("data-line-num"))return $;$=$.parentElement}return null}function w4(Z){let $=Z.toString().trim(),q=d3(Z.startContainer),Q=d3(Z.endContainer),J=q?parseInt(q.getAttribute("data-line-num"),10):void 0,Y=Q?parseInt(Q.getAttribute("data-line-num"),10):void 0,X="",G="";if($.length<30&&q&&q===Q){let z=q.querySelector("code");if(z){let _=z.textContent||"",H=_.indexOf($);if(H>=0)X=_.slice(0,H).trimStart(),G=_.slice(H+$.length).trimEnd()}}return{before:X,after:G,hierarchy:[],lineStart:J,lineEnd:Y}}function r3({path:Z}){if(!F1)return W1("div",{className:"max-w-[720px] mx-auto px-6 pt-12 pb-32",children:W1("div",{className:"p-4 rounded-lg border border-border-subtle bg-bg-surface",children:[W1("div",{className:"text-[11px] uppercase tracking-widest text-text-tertiary font-body mb-2",children:"File not available"},void 0,!1,void 0,this),W1("p",{className:"text-[13px] text-text-secondary font-body leading-relaxed",children:["Opening ",W1("code",{className:"px-1 py-0.5 rounded bg-bg-elevated text-text-primary text-[11px]",children:Z},void 0,!1,void 0,this)," requires filesystem access, which isn't available in shared view. If the canvas author wanted this file visible, they should embed it as a ",W1("code",{className:"px-1 py-0.5 rounded bg-bg-elevated text-text-primary text-[11px]",children:"<FilePreview>"},void 0,!1,void 0,this)," in the canvas."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this);let $=P4(S4),{annotations:q,addAnnotationWithId:Q,activeAnnotationId:J,setActiveAnnotationId:Y}=Y1(),[X,G]=_0(null),[z,_]=_0("text"),[H,U]=_0(!0),[T,W]=_0(null),K=n0(null),[F,N]=_0(null),[y,O]=_0(null),D=n0(null),S=n0(null),M=n0([]),w=q.filter((b)=>b.filePath===Z),C=K.current?.closest("#plan-scroll-container"),{popovers:k,openCreatePopover:c}=s1({containerRef:K,restoreKey:`${X}:${Z}`,restoreAnnotations:w,extractContext:w4,filePath:Z,scrollContainer:C});p3(()=>{U(!0),W(null),fetch(`/api/file?session=${$}&path=${encodeURIComponent(Z)}`).then((b)=>b.json()).then((b)=>{if(b.error)W(b.error),U(!1);else G(b.content),_(b.language||"text"),U(!1)}).catch(()=>{W("Failed to fetch file"),U(!1)})},[$,Z]);let v=y4((b,u)=>{b.preventDefault(),D.current=u,S.current=u,N(u),O(u)},[]);p3(()=>{let b=(h)=>{if(D.current===null)return;let A=h.target.closest("[data-line-num]");if(A){let I=parseInt(A.getAttribute("data-line-num"),10);S.current=I,O(I)}},u=()=>{let h=D.current;if(h===null)return;D.current=null;let A=S.current??h,I=Math.min(h,A),L=Math.max(h,A),x=M.current.slice(I-1,L).join(`
74
- `);if(!x.trim()){N(null),O(null);return}let m=`__pending_${Date.now()}`,s={before:"",after:"",hierarchy:[],lineStart:I,lineEnd:L};if(K.current){let j=K.current.querySelectorAll("[data-line-num]"),f=j[I-1],Z1=j[L-1];if(f&&Z1){let h1=f.querySelector("code"),A1=Z1.querySelector("code");if(h1&&A1)try{let Z0=document.createRange();Z0.setStartBefore(h1.firstChild||h1),Z0.setEndAfter(A1.lastChild||A1),a1(Z0,m)}catch{}}let U1=j[L-1];if(U1)c(U1,m,x,s)}N(null),O(null)};return document.addEventListener("mousemove",b),document.addEventListener("mouseup",u),()=>{document.removeEventListener("mousemove",b),document.removeEventListener("mouseup",u)}},[]);let V=c3(()=>{if(!X)return null;let b=window.hljs;if(!b)return null;let u=Z.split(".").pop()||"",h=t0[u];try{return(h?b.highlight(X,{language:h}):b.highlightAuto(X)).value.split(`
73
+ ...`:"");Q(M,"Include this file for context",O)}},F=async(O)=>{let D=[];if(G[O]?.loaded)D=G[O].entries;else{let M=await(await fetch(`/api/tree?session=${$}&path=${encodeURIComponent(O)}`)).json();if(M.entries)D=M.entries}await Promise.all(D.filter((S)=>S.type==="file").map((S)=>K(O?`${O}/${S.name}`:S.name)))},N=(O)=>_.get(O)||0,y=(O,D=0)=>{let S=G[O];if(!S?.expanded)return null;return S.entries.map((M)=>{let b=O?`${O}/${M.name}`:M.name,C=N(b);return i("div",{children:[i("div",{className:"group/item flex items-center py-[3px] hover:bg-bg-elevated text-[13px] font-body cursor-default transition-colors duration-100",style:{paddingLeft:`${16+D*16}px`,paddingRight:"8px"},children:M.type==="dir"?i(u2,{children:[i("span",{onClick:()=>T(b),className:"flex items-center gap-1.5 flex-1 text-text-secondary hover:text-text-primary cursor-pointer truncate",children:[i(x1,{name:M.name,type:"dir",expanded:G[b]?.expanded},void 0,!1,void 0,this),i("span",{className:"truncate",children:M.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this),i("button",{onClick:(k)=>{k.stopPropagation(),F(b)},className:"text-[11px] text-text-tertiary hover:text-text-secondary opacity-0 group-hover/item:opacity-100 transition-opacity px-1 flex-shrink-0",title:"Add all files in folder",children:"+"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):i(u2,{children:[i("span",{onClick:()=>W(b),className:`flex-1 truncate cursor-pointer flex items-center gap-1.5 ${C>0?"text-text-primary":"text-text-secondary hover:text-text-primary"}`,children:[i(x1,{name:M.name,type:"file"},void 0,!1,void 0,this),i("span",{className:"truncate",children:M.name},void 0,!1,void 0,this)]},void 0,!0,void 0,this),i("div",{className:"flex items-center gap-1 flex-shrink-0 ml-1",children:[C>0&&i("span",{className:"text-[10px] font-medium bg-badge-bg text-accent-amber px-1.5 py-px rounded-full min-w-[18px] text-center",children:C},void 0,!1,void 0,this),i("button",{onClick:(k)=>{k.stopPropagation(),K(b)},className:"text-[11px] text-text-tertiary hover:text-text-secondary opacity-0 group-hover/item:opacity-100 transition-opacity px-1",title:"Add file to context",children:"+"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),M.type==="dir"&&y(b,D+1)]},b,!0,void 0,this)})};if(Z)return i(u2,{children:[i("div",{className:"flex items-center justify-between px-4 pt-3 pb-2 flex-shrink-0",children:i("span",{className:"text-[11px] font-medium uppercase tracking-widest text-text-tertiary font-body",children:"Files"},void 0,!1,void 0,this)},void 0,!1,void 0,this),i("div",{className:"flex-1 overflow-y-auto",children:y("")},void 0,!1,void 0,this),H.length>0&&i("div",{className:"border-t border-border-subtle px-4 py-3 flex-shrink-0",children:[i("div",{className:"text-[10px] uppercase tracking-widest text-text-tertiary font-body mb-1.5",children:"Referenced"},void 0,!1,void 0,this),H.map((O)=>i("div",{onClick:()=>W(O),className:"flex items-center justify-between text-[12px] font-body text-text-secondary hover:text-text-primary cursor-pointer py-0.5",children:[i("span",{className:"truncate",children:O.split("/").pop()},void 0,!1,void 0,this),i("span",{className:"text-[10px] font-medium bg-badge-bg text-accent-amber px-1.5 py-px rounded-full min-w-[18px] text-center flex-shrink-0 ml-1",children:N(O)},void 0,!1,void 0,this)]},O,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);if(Y)return i("div",{className:"hidden lg:flex w-8 border-r border-border-subtle bg-bg-surface flex-col items-center flex-shrink-0",children:i("button",{onClick:()=>X(!1),className:"mt-3 p-1 text-text-tertiary hover:text-text-secondary transition-colors",children:i("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:i("path",{d:"M5 3l4 4-4 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);return i("div",{className:"hidden lg:flex w-60 border-r border-border-subtle bg-bg-surface flex-col flex-shrink-0 overflow-hidden",children:[i("div",{className:"flex items-center justify-between px-4 pt-4 pb-3 flex-shrink-0",children:[i("span",{className:"text-[11px] font-medium uppercase tracking-widest text-text-tertiary font-body",children:"Files"},void 0,!1,void 0,this),i("button",{onClick:()=>X(!0),className:"text-text-tertiary hover:text-text-secondary transition-colors p-0.5",children:i("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:i("path",{d:"M9 3l-4 4 4 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),i("div",{className:"flex-1 overflow-y-auto",children:y("")},void 0,!1,void 0,this),H.length>0&&i("div",{className:"border-t border-border-subtle px-4 py-3 flex-shrink-0",children:[i("div",{className:"text-[10px] uppercase tracking-widest text-text-tertiary font-body mb-1.5",children:"Referenced"},void 0,!1,void 0,this),H.map((O)=>i("div",{onClick:()=>W(O),className:"flex items-center justify-between text-[12px] font-body text-text-secondary hover:text-text-primary cursor-pointer py-0.5",children:[i("span",{className:"truncate",children:O.split("/").pop()},void 0,!1,void 0,this),i("span",{className:"text-[10px] font-medium bg-badge-bg text-accent-amber px-1.5 py-px rounded-full min-w-[18px] text-center flex-shrink-0 ml-1",children:N(O)},void 0,!1,void 0,this)]},O,!0,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}import{useEffect as r3,useState as U0,useContext as y4,useCallback as S4,useRef as Z2,useMemo as l3}from"react";import{SessionContext as b4}from"#canvas/runtime";var $2={ts:"typescript",tsx:"typescript",js:"javascript",jsx:"javascript",py:"python",rs:"rust",go:"go",rb:"ruby",java:"java",json:"json",yaml:"yaml",yml:"yaml",md:"markdown",css:"css",html:"html",sh:"bash",bash:"bash",toml:"toml",sql:"sql",xml:"xml",c:"c",cpp:"cpp",h:"c"};import{jsxDEV as W1}from"react/jsx-dev-runtime";function i3(Z){let $=Z instanceof HTMLElement?Z:Z.parentElement;while($){if($.hasAttribute("data-line-num"))return $;$=$.parentElement}return null}function j4(Z){let $=Z.toString().trim(),q=i3(Z.startContainer),Q=i3(Z.endContainer),J=q?parseInt(q.getAttribute("data-line-num"),10):void 0,Y=Q?parseInt(Q.getAttribute("data-line-num"),10):void 0,X="",G="";if($.length<30&&q&&q===Q){let z=q.querySelector("code");if(z){let _=z.textContent||"",H=_.indexOf($);if(H>=0)X=_.slice(0,H).trimStart(),G=_.slice(H+$.length).trimEnd()}}return{before:X,after:G,hierarchy:[],lineStart:J,lineEnd:Y}}function a3({path:Z}){if(!L1)return W1("div",{className:"max-w-[720px] mx-auto px-6 pt-12 pb-32",children:W1("div",{className:"p-4 rounded-lg border border-border-subtle bg-bg-surface",children:[W1("div",{className:"text-[11px] uppercase tracking-widest text-text-tertiary font-body mb-2",children:"File not available"},void 0,!1,void 0,this),W1("p",{className:"text-[13px] text-text-secondary font-body leading-relaxed",children:["Opening ",W1("code",{className:"px-1 py-0.5 rounded bg-bg-elevated text-text-primary text-[11px]",children:Z},void 0,!1,void 0,this)," requires filesystem access, which isn't available in shared view. If the canvas author wanted this file visible, they should embed it as a ",W1("code",{className:"px-1 py-0.5 rounded bg-bg-elevated text-text-primary text-[11px]",children:"<FilePreview>"},void 0,!1,void 0,this)," in the canvas."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this);let $=y4(b4),{annotations:q,addAnnotationWithId:Q,activeAnnotationId:J,setActiveAnnotationId:Y}=Y1(),[X,G]=U0(null),[z,_]=U0("text"),[H,U]=U0(!0),[T,W]=U0(null),K=Z2(null),[F,N]=U0(null),[y,O]=U0(null),D=Z2(null),S=Z2(null),M=Z2([]),b=q.filter((j)=>j.filePath===Z),C=K.current?.closest("#plan-scroll-container"),{popovers:k,openCreatePopover:c}=t1({containerRef:K,restoreKey:`${X}:${Z}`,restoreAnnotations:b,extractContext:j4,filePath:Z,scrollContainer:C});r3(()=>{U(!0),W(null),fetch(`/api/file?session=${$}&path=${encodeURIComponent(Z)}`).then((j)=>j.json()).then((j)=>{if(j.error)W(j.error),U(!1);else G(j.content),_(j.language||"text"),U(!1)}).catch(()=>{W("Failed to fetch file"),U(!1)})},[$,Z]);let v=S4((j,u)=>{j.preventDefault(),D.current=u,S.current=u,N(u),O(u)},[]);r3(()=>{let j=(h)=>{if(D.current===null)return;let A=h.target.closest("[data-line-num]");if(A){let I=parseInt(A.getAttribute("data-line-num"),10);S.current=I,O(I)}},u=()=>{let h=D.current;if(h===null)return;D.current=null;let A=S.current??h,I=Math.min(h,A),L=Math.max(h,A),m=M.current.slice(I-1,L).join(`
74
+ `);if(!m.trim()){N(null),O(null);return}let x=`__pending_${Date.now()}`,s={before:"",after:"",hierarchy:[],lineStart:I,lineEnd:L};if(K.current){let w=K.current.querySelectorAll("[data-line-num]"),f=w[I-1],Z1=w[L-1];if(f&&Z1){let p1=f.querySelector("code"),C1=Z1.querySelector("code");if(p1&&C1)try{let q0=document.createRange();q0.setStartBefore(p1.firstChild||p1),q0.setEndAfter(C1.lastChild||C1),o1(q0,x)}catch{}}let U1=w[L-1];if(U1)c(U1,x,m,s)}N(null),O(null)};return document.addEventListener("mousemove",j),document.addEventListener("mouseup",u),()=>{document.removeEventListener("mousemove",j),document.removeEventListener("mouseup",u)}},[]);let V=l3(()=>{if(!X)return null;let j=window.hljs;if(!j)return null;let u=Z.split(".").pop()||"",h=$2[u];try{return(h?j.highlight(X,{language:h}):j.highlightAuto(X)).value.split(`
75
75
  `)}catch{return null}},[X,Z]);if(H)return W1("div",{className:"flex items-center justify-center h-64 text-text-tertiary font-body text-[13px]",children:["Loading ",Z,"..."]},void 0,!0,void 0,this);if(T)return W1("div",{className:"p-8 text-accent-red font-body text-[13px]",children:T},void 0,!1,void 0,this);if(!X)return null;let E=X.split(`
76
- `);M.current=E;let g=c3(()=>{if(F===null)return null;let b=y??F;return{start:Math.min(F,b),end:Math.max(F,b)}},[F,y]),l=()=>{let b=X.split(`
76
+ `);M.current=E;let g=l3(()=>{if(F===null)return null;let j=y??F;return{start:Math.min(F,j),end:Math.max(F,j)}},[F,y]),l=()=>{let j=X.split(`
77
77
  `).slice(0,3).join(`
78
78
  `)+(E.length>3?`
79
- ...`:""),u=B1();Q(u,b,"",Z),Y(u)};return W1("div",{children:[W1("pre",{ref:K,className:"text-code font-mono text-text-code bg-bg-base select-text cursor-text py-3 hljs",children:E.map((b,u)=>{let h=u+1,A=g&&h>=g.start&&h<=g.end;return W1("div",{"data-line-num":h,className:`flex px-5 ${A?"bg-accent-blue/10":"hover:bg-bg-elevated-half"}`,children:[W1("span",{className:"text-text-tertiary select-none w-10 text-right pr-4 shrink-0 py-px text-[12px] cursor-pointer opacity-40 hover:opacity-100 hover:text-accent-blue",onMouseDown:(I)=>v(I,h),children:h},void 0,!1,void 0,this),V?W1("code",{className:"py-px",dangerouslySetInnerHTML:{__html:V[u]||" "}},void 0,!1,void 0,this):W1("code",{className:"py-px",children:b||" "},void 0,!1,void 0,this)]},u,!0,void 0,this)})},void 0,!1,void 0,this),k]},void 0,!0,void 0,this)}import{useEffect as l3,useState as i3,useRef as b4}from"react";import{jsxDEV as j1}from"react/jsx-dev-runtime";function a3(Z,$){if($){let q=$.replace(/\/+$/,"").split("/");return q[q.length-1]||Z}return Z.length>30?Z.slice(0,30)+"...":Z}function m2({currentSessionId:Z,projectRoot:$}){let[q,Q]=i3([]),[J,Y]=i3(!1),X=b4(null);l3(()=>{if(!F1)return;let _=async()=>{try{let T=await(await fetch("/api/sessions")).json();Q((W)=>{let K=JSON.stringify(T);return JSON.stringify(W)===K?W:T})}catch{}};_();let H=setInterval(_,5000);return()=>clearInterval(H)},[]),l3(()=>{if(!J)return;let _=(H)=>{if(X.current&&!X.current.contains(H.target))Y(!1)};return document.addEventListener("mousedown",_),()=>document.removeEventListener("mousedown",_)},[J]);let G=q.filter((_)=>_.id!==Z),z=a3(Z,$);return j1("div",{className:"relative",ref:X,children:[j1("div",{className:"flex items-center gap-1.5 font-body text-body font-medium",children:[j1("a",{href:`/s/${Z}`,className:"text-text-primary hover:text-text-secondary transition-colors",children:z},void 0,!1,void 0,this),G.length>0&&j1("button",{onClick:()=>Y(!J),className:"flex items-center justify-center text-text-tertiary hover:text-text-secondary transition-colors",children:j1("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",className:`transition-transform duration-200 ${J?"rotate-180":""}`,children:j1("path",{d:"M3 5l3 3 3-3",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J&&G.length>0&&j1("div",{className:"absolute top-full left-0 mt-2 w-64 bg-bg-elevated border border-border-hover rounded-lg shadow-lg z-50 py-1 overflow-hidden",children:G.map((_)=>j1("a",{href:`/s/${_.id}`,className:"flex items-center gap-2.5 px-4 py-2.5 text-body font-body text-text-secondary hover:bg-bg-surface hover:text-text-primary transition-colors",children:[j1("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${_.currentRevision>0?"bg-accent-green":"bg-border-hover"}`},void 0,!1,void 0,this),j1("span",{className:"truncate",children:a3(_.id,_.projectRoot)},void 0,!1,void 0,this)]},_.id,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function o3(Z){let $=[];return e0(Z,$,0),$.join(`
79
+ ...`:""),u=F1();Q(u,j,"",Z),Y(u)};return W1("div",{children:[W1("pre",{ref:K,className:"text-code font-mono text-text-code bg-bg-base select-text cursor-text py-3 hljs",children:E.map((j,u)=>{let h=u+1,A=g&&h>=g.start&&h<=g.end;return W1("div",{"data-line-num":h,className:`flex px-5 ${A?"bg-accent-blue/10":"hover:bg-bg-elevated-half"}`,children:[W1("span",{className:"text-text-tertiary select-none w-10 text-right pr-4 shrink-0 py-px text-[12px] cursor-pointer opacity-40 hover:opacity-100 hover:text-accent-blue",onMouseDown:(I)=>v(I,h),children:h},void 0,!1,void 0,this),V?W1("code",{className:"py-px",dangerouslySetInnerHTML:{__html:V[u]||" "}},void 0,!1,void 0,this):W1("code",{className:"py-px",children:j||" "},void 0,!1,void 0,this)]},u,!0,void 0,this)})},void 0,!1,void 0,this),k]},void 0,!0,void 0,this)}import{useEffect as o3,useState as s3,useRef as w4}from"react";import{jsxDEV as A1}from"react/jsx-dev-runtime";function t3(Z,$){if($){let q=$.replace(/\/+$/,"").split("/");return q[q.length-1]||Z}return Z.length>30?Z.slice(0,30)+"...":Z}function g2({currentSessionId:Z,projectRoot:$}){let[q,Q]=s3([]),[J,Y]=s3(!1),X=w4(null);o3(()=>{if(!L1)return;let _=async()=>{try{let T=await(await fetch("/api/sessions")).json();Q((W)=>{let K=JSON.stringify(T);return JSON.stringify(W)===K?W:T})}catch{}};_();let H=setInterval(_,5000);return()=>clearInterval(H)},[]),o3(()=>{if(!J)return;let _=(H)=>{if(X.current&&!X.current.contains(H.target))Y(!1)};return document.addEventListener("mousedown",_),()=>document.removeEventListener("mousedown",_)},[J]);let G=q.filter((_)=>_.id!==Z),z=t3(Z,$);return A1("div",{className:"relative",ref:X,children:[A1("div",{className:"flex items-center gap-1.5 font-body text-body font-medium",children:[A1("a",{href:`/s/${Z}`,className:"text-text-primary hover:text-text-secondary transition-colors",children:z},void 0,!1,void 0,this),G.length>0&&A1("button",{onClick:()=>Y(!J),className:"flex items-center justify-center text-text-tertiary hover:text-text-secondary transition-colors",children:A1("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",className:`transition-transform duration-200 ${J?"rotate-180":""}`,children:A1("path",{d:"M3 5l3 3 3-3",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J&&G.length>0&&A1("div",{className:"absolute top-full left-0 mt-2 w-64 bg-bg-elevated border border-border-hover rounded-lg shadow-lg z-50 py-1 overflow-hidden",children:G.map((_)=>A1("a",{href:`/s/${_.id}`,className:"flex items-center gap-2.5 px-4 py-2.5 text-body font-body text-text-secondary hover:bg-bg-surface hover:text-text-primary transition-colors",children:[A1("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${_.currentRevision>0?"bg-accent-green":"bg-border-hover"}`},void 0,!1,void 0,this),A1("span",{className:"truncate",children:t3(_.id,_.projectRoot)},void 0,!1,void 0,this)]},_.id,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function n3(Z){let $=[];return q2(Z,$,0),$.join(`
80
80
  `).replace(/\n{3,}/g,`
81
81
 
82
82
  `).trim()+`
83
- `}var j4=new Set(["CODE","SPAN","STRONG","EM","A","B","I","U","SMALL","SUB","SUP","MARK","ABBR"]);function e0(Z,$,q){if(A4(Z)){let Q=C4(Z);if(Q)$.push(Q,"");return}for(let Q of Z.childNodes)if(Q.nodeType===Node.ELEMENT_NODE)V4(Q,$,q);else if(Q.nodeType===Node.TEXT_NODE){let J=Q.textContent?.trim();if(J)$.push(J,"")}}function A4(Z){for(let $ of Z.childNodes){if($.nodeType===Node.TEXT_NODE)continue;if($.nodeType===Node.ELEMENT_NODE){let q=$;if(!j4.has(q.tagName)||q.hasAttribute("data-md"))return!1}}return Z.childNodes.length>0}function C4(Z){let $="";for(let q of Z.childNodes)if(q.nodeType===Node.TEXT_NODE)$+=q.textContent||"";else if(q.nodeType===Node.ELEMENT_NODE){let Q=q;if(Q.tagName==="CODE")$+="`"+(Q.textContent||"")+"`";else $+=Q.textContent||""}return $.trim()}function V4(Z,$,q){let Q=Z.getAttribute("data-md");if(Q)switch(Q){case"section":return I4(Z,$,q);case"item":return R4(Z,$);case"codeblock":return D4(Z,$);case"callout":return k4(Z,$);case"note":return E4(Z,$);case"markdown":return f4(Z,$);case"table":return x4(Z,$);case"checklist":return m4(Z,$);case"diff":return u4(Z,$);case"mermaid":return g4(Z,$);case"choice":return v4(Z,$);case"multichoice":return h4(Z,$);case"choice-option":case"multichoice-option":return;case"userinput":return p4(Z,$);case"rangeinput":return c4(Z,$);case"checklist-item":return;case"filepreview":return d4(Z,$);case"priority":return r4(Z,$)}if(Z.querySelector("button, input, select, textarea"))return;if(Z.children.length>0)e0(Z,$,q);else{let J=Z.textContent?.trim();if(J)$.push(J,"")}}function I4(Z,$,q){let Q=Z.getAttribute("data-md-title")||"Untitled",J=q===0?"##":"###";$.push(`${J} ${Q}`,"");let Y=Z.querySelector(":scope > div:last-of-type");if(Y)e0(Y,$,q+1)}function R4(Z,$){let q=Z.getAttribute("data-md-label")||"",Q=Z.getAttribute("data-md-status"),J=Z.getAttribute("data-md-badge"),Y="-";if(Q==="done")Y="- [x]";else if(Q)Y="- [ ]";let X=`${Y} **${q}**`;if(J)X+=` \`${J}\``;$.push(X);let G=Z.querySelector(".text-text-secondary");if(G){let z=[];e0(G,z,0);for(let _ of z)$.push(_?` ${_}`:"")}$.push("")}function D4(Z,$){let q=Z.getAttribute("data-md-language")||"",J=Z.querySelector("code")?.textContent||"";$.push(`\`\`\`${q}`,J,"```","")}function k4(Z,$){let q=Z.getAttribute("data-md-type")||"info",Q={info:"Info",warning:"Warning",danger:"Danger",tip:"Tip"},J=l4(Z.querySelector(".text-text-secondary")||Z);$.push(`> **${Q[q]||q}:** ${J}`,"")}function E4(Z,$){let q=Z.textContent?.trim()||"";$.push(`> *${q}*`,"")}function x4(Z,$){let q=Z.querySelector("table");if(!q)return;let Q=[];for(let J of q.querySelectorAll("thead th"))Q.push(J.textContent?.trim()||"");if(Q.length===0)return;$.push(`| ${Q.join(" | ")} |`),$.push(`| ${Q.map(()=>"---").join(" | ")} |`);for(let J of q.querySelectorAll("tbody tr")){let Y=[];for(let X of J.querySelectorAll("td"))Y.push(X.textContent?.trim()||"");$.push(`| ${Y.join(" | ")} |`)}$.push("")}function m4(Z,$){for(let q of Z.querySelectorAll("li")){let Q=q.querySelector(".bg-accent-green")!==null,J=q.textContent?.trim()||"";$.push(`- [${Q?"x":" "}] ${J}`)}$.push("")}function u4(Z,$){let q=Z.getAttribute("data-md-language")||"";$.push(`\`\`\`diff${q?` (${q})`:""}`);for(let Q of Z.querySelectorAll("[class*='flex']")){let J=Q.querySelector(".text-accent-red")?"-":Q.querySelector(".text-accent-green")?"+":" ",Y=Q.querySelector("code");if(Y)$.push(`${J} ${Y.textContent}`)}$.push("```","")}function g4(Z,$){let q=Z.getAttribute("data-md-source")||"";if(q)$.push("```mermaid",q,"```","")}function f4(Z,$){let q=Z.getAttribute("data-md-source")||"";if(q)$.push(q,"")}function v4(Z,$){let q=Z.getAttribute("data-md-label")||"";$.push(`**${q}:**`);for(let Q of Z.querySelectorAll("[data-md='choice-option']")){let J=Q.getAttribute("data-md-label")||Q.textContent?.trim()||"",Y=Q.querySelector(".bg-accent-amber")!==null;$.push(`- ${Y?"(x)":"( )"} ${J}`)}$.push("")}function h4(Z,$){let q=Z.getAttribute("data-md-label")||"";$.push(`**${q}:**`);for(let Q of Z.querySelectorAll("[data-md='multichoice-option']")){let J=Q.getAttribute("data-md-label")||Q.textContent?.trim()||"",Y=Q.querySelector(".bg-accent-amber")!==null;$.push(`- [${Y?"x":" "}] ${J}`)}$.push("")}function p4(Z,$){let q=Z.getAttribute("data-md-label")||"",J=Z.querySelector("textarea")?.value?.trim()||"";$.push(`**${q}:** ${J||"_empty_"}`,"")}function c4(Z,$){let q=Z.getAttribute("data-md-label")||"",Q=Z.querySelector("input[type='range']"),Y=Z.querySelector(".font-mono")?.textContent?.trim()||Q?.value||"—";$.push(`**${q}:** ${Y}`,"")}function d4(Z,$){let q=Z.getAttribute("data-md-path")||"",Q=Z.getAttribute("data-md-lines")||"",Y=Z.querySelector("code")?.textContent||"",X=q.split(".").pop()||"",G=t0[X]||"",z=Q?`${q} (L${Q})`:q;$.push(z,"",`\`\`\`${G}`,Y,"```","")}function r4(Z,$){}function l4(Z){return Z?.textContent?.trim()||""}import z5,{useEffect as g1,useState as G1,useRef as I1,useCallback as _5,useMemo as J2,useContext as _6}from"react";import{useEffect as i4,useState as a4,useRef as o4,useContext as s4}from"react";import{jsxDEV as H1,Fragment as s3}from"react/jsx-dev-runtime";function t4(Z){return Z.label||`Round ${Z.revision}`}function n4(Z){let $=Date.now()-new Date(Z).getTime(),q=Math.floor($/1000);if(q<60)return"just now";let Q=Math.floor(q/60);if(Q<60)return`${Q}m ago`;let J=Math.floor(Q/60);if(J<24)return`${J}h ago`;return`${Math.floor(J/24)}d ago`}function b0({value:Z,onChange:$,accent:q="default",className:Q}){let{currentRevision:J,revisions:Y}=s4(b1),[X,G]=a4(!1),z=o4(null);i4(()=>{if(!X)return;let U=(T)=>{if(z.current&&!z.current.contains(T.target))G(!1)};return document.addEventListener("mousedown",U),()=>document.removeEventListener("mousedown",U)},[X]);let _=Y.find((U)=>U.revision===Z);return H1("div",{className:"relative",ref:z,children:[H1("button",{onClick:()=>G(!X),className:`flex items-center gap-1.5 text-[12px] font-body font-medium px-2 py-1 rounded-md transition-colors hover:bg-bg-elevated ${{default:"text-text-secondary hover:text-text-primary",red:"text-accent-red",green:"text-accent-green",amber:"text-accent-amber bg-highlight-selected"}[q]} ${Q||""}`,children:[_?t4(_):`Round ${Z}`,H1("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",className:`text-text-tertiary transition-transform duration-200 ${X?"rotate-180":""}`,children:H1("path",{d:"M2.5 4l2.5 2.5L7.5 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X&&H1("div",{className:"absolute top-full left-0 mt-1 w-64 bg-bg-elevated border border-border-hover rounded-lg shadow-lg z-50 py-1 max-h-80 overflow-y-auto",children:[...Y].reverse().map((U)=>H1("button",{onClick:()=>{$(U.revision),G(!1)},className:`w-full flex items-center gap-2 px-3 py-2 text-[12px] font-body transition-colors ${U.revision===Z?"bg-bg-surface text-text-primary":"text-text-secondary hover:bg-bg-surface hover:text-text-primary"}`,children:[H1("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${U.revision===J?"bg-accent-green":U.hasFeedback?"bg-accent-amber":"bg-border-hover"}`},void 0,!1,void 0,this),H1("span",{className:"flex-1 text-left truncate",children:U.label?H1(s3,{children:[U.label," ",H1("span",{className:"text-text-tertiary",children:["#",U.revision]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):H1(s3,{children:["Round ",U.revision]},void 0,!0,void 0,this)},void 0,!1,void 0,this),H1("span",{className:"text-[10px] text-text-tertiary flex-shrink-0 flex items-center gap-1.5",children:[(()=>{let T=U.canvasFiles?.reduce((W,K)=>{if(K.diffStats)W.added+=K.diffStats.added,W.removed+=K.diffStats.removed;return W},{added:0,removed:0});if(T&&(T.added>0||T.removed>0))return H1("span",{className:"font-mono",children:[H1("span",{className:"text-accent-green",children:["+",T.added]},void 0,!0,void 0,this)," ",H1("span",{className:"text-accent-red",children:["-",T.removed]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);return null})(),U.revision===J?"current":U.hasFeedback?"sent":n4(U.createdAt)]},void 0,!0,void 0,this)]},U.revision,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function u1(Z,$){let q=Z.length,Q=$.length;if(q===0||Q===0)return[];let J=Array.from({length:q+1},()=>Array(Q+1).fill(0));for(let z=1;z<=q;z++)for(let _=1;_<=Q;_++)J[z][_]=Z[z-1]===$[_-1]?J[z-1][_-1]+1:Math.max(J[z-1][_],J[z][_-1]);let Y=[],X=q,G=Q;while(X>0&&G>0)if(Z[X-1]===$[G-1])Y.unshift(Z[X-1]),X--,G--;else if(J[X-1][G]>J[X][G-1])X--;else G--;return Y}function t3(Z){let $=[],q=[],Q=document.createTreeWalker(Z,NodeFilter.SHOW_TEXT,{acceptNode(Y){let X=Y.parentElement;if(!X)return NodeFilter.FILTER_REJECT;if(X.closest("svg, .select-none, [data-no-diff]"))return NodeFilter.FILTER_REJECT;return NodeFilter.FILTER_ACCEPT}}),J;while(J=Q.nextNode()){let X=(J.nodeValue||"").match(/\S+|\s+/g);if(!X)continue;let G=0;for(let z of X)$.push(z),q.push({text:z,node:J,offset:G}),G+=z.length}return{words:$,map:q}}function u2(Z,$){if(Z.length>5000||$.length>5000)return e4(Z,$);return $5(Z,$)}function $5(Z,$){let q=$2(Z,$),Q=[],J=[],Y=0,X=0,G=0;while(Y<Z.length||X<$.length)if(G<q.length&&Y<Z.length&&X<$.length&&Z[Y]===q[G]&&$[X]===q[G])Q.push({type:"same",index:Y}),J.push({type:"same",index:X}),Y++,X++,G++;else if(Y<Z.length&&(G>=q.length||Z[Y]!==q[G]))Q.push({type:"removed",index:Y}),Y++;else if(X<$.length)J.push({type:"added",index:X}),X++;return{oldOps:Q,newOps:J}}function $2(Z,$){let q=Z.length,Q=$.length;if(q===0||Q===0)return[];if(q===1)return $.includes(Z[0])?[Z[0]]:[];if(Q===1)return Z.includes($[0])?[$[0]]:[];if(q*Q<=1e6)return u1(Z,$);let J=Math.floor(q/2),Y=Z.slice(0,J),X=Z.slice(J),G=n3(Y,$),z=n3([...X].reverse(),[...$].reverse()),_=0,H=0;for(let W=0;W<=Q;W++){let K=G[W]+z[Q-W];if(K>_)_=K,H=W}let U=$.slice(0,H),T=$.slice(H);return[...$2(Y,U),...$2(X,T)]}function n3(Z,$){let q=$.length,Q=Array(q+1).fill(0),J=Array(q+1).fill(0);for(let Y=0;Y<Z.length;Y++){for(let X=1;X<=q;X++)J[X]=Z[Y]===$[X-1]?Q[X-1]+1:Math.max(Q[X],J[X-1]);[Q,J]=[J,Q],J.fill(0)}return Q}function e4(Z,$){let Q=(K)=>{let F=[];for(let N=0;N<K.length;N+=200){let y=Math.min(N+200,K.length);F.push({start:N,end:y,text:K.slice(N,y).join("")})}return F},J=Q(Z),Y=Q($),X=J.map((K)=>K.text),G=Y.map((K)=>K.text),z=$2(X,G),_=[],H=[],U=0,T=0,W=0;while(U<J.length||T<Y.length)if(W<z.length&&U<J.length&&T<Y.length&&X[U]===z[W]&&G[T]===z[W]){for(let K=J[U].start;K<J[U].end;K++)_.push({type:"same",index:K});for(let K=Y[T].start;K<Y[T].end;K++)H.push({type:"same",index:K});U++,T++,W++}else if(U<J.length&&(W>=z.length||X[U]!==z[W]))if(T<Y.length&&(W>=z.length||G[T]!==z[W])){let K=$5(Z.slice(J[U].start,J[U].end),$.slice(Y[T].start,Y[T].end));for(let F of K.oldOps)_.push({type:F.type,index:F.index+J[U].start});for(let F of K.newOps)H.push({type:F.type,index:F.index+Y[T].start});U++,T++}else{for(let K=J[U].start;K<J[U].end;K++)_.push({type:"removed",index:K});U++}else if(T<Y.length){for(let K=Y[T].start;K<Y[T].end;K++)H.push({type:"added",index:K});T++}return{oldOps:_,newOps:H}}function e3(Z,$,q){let Q=new Map;for(let J of Z){if(J.type==="same")continue;let Y=$[J.index];if(!Y||!Y.node.parentNode)continue;let X=Q.get(Y.node);if(!X)X=[],Q.set(Y.node,X);X.push({offset:Y.offset,length:Y.text.length})}for(let[J,Y]of Q){if(!J.parentNode)continue;let X=J.nodeValue||"";Y.sort((U,T)=>U.offset-T.offset);let G=[];for(let U of Y){let T=G[G.length-1];if(T&&U.offset<=T.offset+T.length)T.length=Math.max(T.length,U.offset+U.length-T.offset);else G.push({...U})}let z=J.parentNode,_=document.createDocumentFragment(),H=0;for(let U of G){if(U.offset>H)_.appendChild(document.createTextNode(X.slice(H,U.offset)));let T=document.createElement("span");T.className=q,T.textContent=X.slice(U.offset,U.offset+U.length),_.appendChild(T),H=U.offset+U.length}if(H<X.length)_.appendChild(document.createTextNode(X.slice(H)));z.replaceChild(_,J)}}function Z2(Z,$){let q=$6(Z,$),Q=t3(Z),J=t3($),{oldOps:Y,newOps:X}=u2(Q.words,J.words),G=Y.some((z)=>z.type==="removed")||X.some((z)=>z.type==="added");return e3(Y,Q.map,"diff-removed"),e3(X,J.map,"diff-added"),G||q}function $6(Z,$){let q=Array.from(Z.querySelectorAll('[data-md="mermaid"]')),Q=Array.from($.querySelectorAll('[data-md="mermaid"]')),J=!1,Y=Math.max(q.length,Q.length);for(let X=0;X<Y;X++){let G=q[X],z=Q[X];if(!G&&z){z.classList.add("diff-block-added"),z.style.position="relative",J=!0;continue}if(G&&!z){G.classList.add("diff-block-removed"),G.style.position="relative",J=!0;continue}if(!G||!z)continue;let _=(G.getAttribute("data-md-source")||"").trim(),H=(z.getAttribute("data-md-source")||"").trim();if(_===H)continue;J=!0,G.style.borderLeft="3px solid var(--color-accent-red)",G.style.paddingLeft="8px",z.style.borderLeft="3px solid var(--color-accent-green)",z.style.paddingLeft="8px";let U=_.split(`
83
+ `}var A4=new Set(["CODE","SPAN","STRONG","EM","A","B","I","U","SMALL","SUB","SUP","MARK","ABBR"]);function q2(Z,$,q){if(C4(Z)){let Q=V4(Z);if(Q)$.push(Q,"");return}for(let Q of Z.childNodes)if(Q.nodeType===Node.ELEMENT_NODE)I4(Q,$,q);else if(Q.nodeType===Node.TEXT_NODE){let J=Q.textContent?.trim();if(J)$.push(J,"")}}function C4(Z){for(let $ of Z.childNodes){if($.nodeType===Node.TEXT_NODE)continue;if($.nodeType===Node.ELEMENT_NODE){let q=$;if(!A4.has(q.tagName)||q.hasAttribute("data-md"))return!1}}return Z.childNodes.length>0}function V4(Z){let $="";for(let q of Z.childNodes)if(q.nodeType===Node.TEXT_NODE)$+=q.textContent||"";else if(q.nodeType===Node.ELEMENT_NODE){let Q=q;if(Q.tagName==="CODE")$+="`"+(Q.textContent||"")+"`";else $+=Q.textContent||""}return $.trim()}function I4(Z,$,q){let Q=Z.getAttribute("data-md");if(Q)switch(Q){case"section":return R4(Z,$,q);case"item":return D4(Z,$);case"codeblock":return k4(Z,$);case"callout":return E4(Z,$);case"note":return m4(Z,$);case"markdown":return v4(Z,$);case"table":return x4(Z,$);case"checklist":return u4(Z,$);case"diff":return g4(Z,$);case"mermaid":return f4(Z,$);case"choice":return h4(Z,$);case"multichoice":return p4(Z,$);case"choice-option":case"multichoice-option":return;case"userinput":return c4(Z,$);case"rangeinput":return d4(Z,$);case"checklist-item":return;case"filepreview":return r4(Z,$);case"priority":return l4(Z,$)}if(Z.querySelector("button, input, select, textarea"))return;if(Z.children.length>0)q2(Z,$,q);else{let J=Z.textContent?.trim();if(J)$.push(J,"")}}function R4(Z,$,q){let Q=Z.getAttribute("data-md-title")||"Untitled",J=q===0?"##":"###";$.push(`${J} ${Q}`,"");let Y=Z.querySelector(":scope > div:last-of-type");if(Y)q2(Y,$,q+1)}function D4(Z,$){let q=Z.getAttribute("data-md-label")||"",Q=Z.getAttribute("data-md-status"),J=Z.getAttribute("data-md-badge"),Y="-";if(Q==="done")Y="- [x]";else if(Q)Y="- [ ]";let X=`${Y} **${q}**`;if(J)X+=` \`${J}\``;$.push(X);let G=Z.querySelector(".text-text-secondary");if(G){let z=[];q2(G,z,0);for(let _ of z)$.push(_?` ${_}`:"")}$.push("")}function k4(Z,$){let q=Z.getAttribute("data-md-language")||"",J=Z.querySelector("code")?.textContent||"";$.push(`\`\`\`${q}`,J,"```","")}function E4(Z,$){let q=Z.getAttribute("data-md-type")||"info",Q={info:"Info",warning:"Warning",danger:"Danger",tip:"Tip"},J=i4(Z.querySelector(".text-text-secondary")||Z);$.push(`> **${Q[q]||q}:** ${J}`,"")}function m4(Z,$){let q=Z.textContent?.trim()||"";$.push(`> *${q}*`,"")}function x4(Z,$){let q=Z.querySelector("table");if(!q)return;let Q=[];for(let J of q.querySelectorAll("thead th"))Q.push(J.textContent?.trim()||"");if(Q.length===0)return;$.push(`| ${Q.join(" | ")} |`),$.push(`| ${Q.map(()=>"---").join(" | ")} |`);for(let J of q.querySelectorAll("tbody tr")){let Y=[];for(let X of J.querySelectorAll("td"))Y.push(X.textContent?.trim()||"");$.push(`| ${Y.join(" | ")} |`)}$.push("")}function u4(Z,$){for(let q of Z.querySelectorAll("li")){let Q=q.querySelector(".bg-accent-green")!==null,J=q.textContent?.trim()||"";$.push(`- [${Q?"x":" "}] ${J}`)}$.push("")}function g4(Z,$){let q=Z.getAttribute("data-md-language")||"";$.push(`\`\`\`diff${q?` (${q})`:""}`);for(let Q of Z.querySelectorAll("[class*='flex']")){let J=Q.querySelector(".text-accent-red")?"-":Q.querySelector(".text-accent-green")?"+":" ",Y=Q.querySelector("code");if(Y)$.push(`${J} ${Y.textContent}`)}$.push("```","")}function f4(Z,$){let q=Z.getAttribute("data-md-source")||"";if(q)$.push("```mermaid",q,"```","")}function v4(Z,$){let q=Z.getAttribute("data-md-source")||"";if(q)$.push(q,"")}function h4(Z,$){let q=Z.getAttribute("data-md-label")||"";$.push(`**${q}:**`);for(let Q of Z.querySelectorAll("[data-md='choice-option']")){let J=Q.getAttribute("data-md-label")||Q.textContent?.trim()||"",Y=Q.querySelector(".bg-accent-amber")!==null;$.push(`- ${Y?"(x)":"( )"} ${J}`)}$.push("")}function p4(Z,$){let q=Z.getAttribute("data-md-label")||"";$.push(`**${q}:**`);for(let Q of Z.querySelectorAll("[data-md='multichoice-option']")){let J=Q.getAttribute("data-md-label")||Q.textContent?.trim()||"",Y=Q.querySelector(".bg-accent-amber")!==null;$.push(`- [${Y?"x":" "}] ${J}`)}$.push("")}function c4(Z,$){let q=Z.getAttribute("data-md-label")||"",J=Z.querySelector("textarea")?.value?.trim()||"";$.push(`**${q}:** ${J||"_empty_"}`,"")}function d4(Z,$){let q=Z.getAttribute("data-md-label")||"",Q=Z.querySelector("input[type='range']"),Y=Z.querySelector(".font-mono")?.textContent?.trim()||Q?.value||"—";$.push(`**${q}:** ${Y}`,"")}function r4(Z,$){let q=Z.getAttribute("data-md-path")||"",Q=Z.getAttribute("data-md-lines")||"",Y=Z.querySelector("code")?.textContent||"",X=q.split(".").pop()||"",G=$2[X]||"",z=Q?`${q} (L${Q})`:q;$.push(z,"",`\`\`\`${G}`,Y,"```","")}function l4(Z,$){}function i4(Z){return Z?.textContent?.trim()||""}import U5,{useEffect as f1,useState as G1,useRef as R1,useCallback as K5,useMemo as X2,useContext as G6}from"react";import{useEffect as a4,useState as o4,useRef as s4,useContext as t4}from"react";import{jsxDEV as H1,Fragment as e3}from"react/jsx-dev-runtime";function n4(Z){return Z.label||`Round ${Z.revision}`}function e4(Z){let $=Date.now()-new Date(Z).getTime(),q=Math.floor($/1000);if(q<60)return"just now";let Q=Math.floor(q/60);if(Q<60)return`${Q}m ago`;let J=Math.floor(Q/60);if(J<24)return`${J}h ago`;return`${Math.floor(J/24)}d ago`}function A0({value:Z,onChange:$,accent:q="default",className:Q}){let{currentRevision:J,revisions:Y}=t4(w1),[X,G]=o4(!1),z=s4(null);a4(()=>{if(!X)return;let U=(T)=>{if(z.current&&!z.current.contains(T.target))G(!1)};return document.addEventListener("mousedown",U),()=>document.removeEventListener("mousedown",U)},[X]);let _=Y.find((U)=>U.revision===Z);return H1("div",{className:"relative",ref:z,children:[H1("button",{onClick:()=>G(!X),className:`flex items-center gap-1.5 text-[12px] font-body font-medium px-2 py-1 rounded-md transition-colors hover:bg-bg-elevated ${{default:"text-text-secondary hover:text-text-primary",red:"text-accent-red",green:"text-accent-green",amber:"text-accent-amber bg-highlight-selected"}[q]} ${Q||""}`,children:[_?n4(_):`Round ${Z}`,H1("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",className:`text-text-tertiary transition-transform duration-200 ${X?"rotate-180":""}`,children:H1("path",{d:"M2.5 4l2.5 2.5L7.5 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X&&H1("div",{className:"absolute top-full left-0 mt-1 w-64 bg-bg-elevated border border-border-hover rounded-lg shadow-lg z-50 py-1 max-h-80 overflow-y-auto",children:[...Y].reverse().map((U)=>H1("button",{onClick:()=>{$(U.revision),G(!1)},className:`w-full flex items-center gap-2 px-3 py-2 text-[12px] font-body transition-colors ${U.revision===Z?"bg-bg-surface text-text-primary":"text-text-secondary hover:bg-bg-surface hover:text-text-primary"}`,children:[H1("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${U.revision===J?"bg-accent-green":U.hasFeedback?"bg-accent-amber":"bg-border-hover"}`},void 0,!1,void 0,this),H1("span",{className:"flex-1 text-left truncate",children:U.label?H1(e3,{children:[U.label," ",H1("span",{className:"text-text-tertiary",children:["#",U.revision]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):H1(e3,{children:["Round ",U.revision]},void 0,!0,void 0,this)},void 0,!1,void 0,this),H1("span",{className:"text-[10px] text-text-tertiary flex-shrink-0 flex items-center gap-1.5",children:[(()=>{let T=U.canvasFiles?.reduce((W,K)=>{if(K.diffStats)W.added+=K.diffStats.added,W.removed+=K.diffStats.removed;return W},{added:0,removed:0});if(T&&(T.added>0||T.removed>0))return H1("span",{className:"font-mono",children:[H1("span",{className:"text-accent-green",children:["+",T.added]},void 0,!0,void 0,this)," ",H1("span",{className:"text-accent-red",children:["-",T.removed]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);return null})(),U.revision===J?"current":U.hasFeedback?"sent":e4(U.createdAt)]},void 0,!0,void 0,this)]},U.revision,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function g1(Z,$){let q=Z.length,Q=$.length;if(q===0||Q===0)return[];let J=Array.from({length:q+1},()=>Array(Q+1).fill(0));for(let z=1;z<=q;z++)for(let _=1;_<=Q;_++)J[z][_]=Z[z-1]===$[_-1]?J[z-1][_-1]+1:Math.max(J[z-1][_],J[z][_-1]);let Y=[],X=q,G=Q;while(X>0&&G>0)if(Z[X-1]===$[G-1])Y.unshift(Z[X-1]),X--,G--;else if(J[X-1][G]>J[X][G-1])X--;else G--;return Y}function $5(Z){let $=[],q=[],Q=document.createTreeWalker(Z,NodeFilter.SHOW_TEXT,{acceptNode(Y){let X=Y.parentElement;if(!X)return NodeFilter.FILTER_REJECT;if(X.closest("svg, .select-none, [data-no-diff]"))return NodeFilter.FILTER_REJECT;return NodeFilter.FILTER_ACCEPT}}),J;while(J=Q.nextNode()){let X=(J.nodeValue||"").match(/\S+|\s+/g);if(!X)continue;let G=0;for(let z of X)$.push(z),q.push({text:z,node:J,offset:G}),G+=z.length}return{words:$,map:q}}function f2(Z,$){if(Z.length>5000||$.length>5000)return $6(Z,$);return J5(Z,$)}function J5(Z,$){let q=J2(Z,$),Q=[],J=[],Y=0,X=0,G=0;while(Y<Z.length||X<$.length)if(G<q.length&&Y<Z.length&&X<$.length&&Z[Y]===q[G]&&$[X]===q[G])Q.push({type:"same",index:Y}),J.push({type:"same",index:X}),Y++,X++,G++;else if(Y<Z.length&&(G>=q.length||Z[Y]!==q[G]))Q.push({type:"removed",index:Y}),Y++;else if(X<$.length)J.push({type:"added",index:X}),X++;return{oldOps:Q,newOps:J}}function J2(Z,$){let q=Z.length,Q=$.length;if(q===0||Q===0)return[];if(q===1)return $.includes(Z[0])?[Z[0]]:[];if(Q===1)return Z.includes($[0])?[$[0]]:[];if(q*Q<=1e6)return g1(Z,$);let J=Math.floor(q/2),Y=Z.slice(0,J),X=Z.slice(J),G=Z5(Y,$),z=Z5([...X].reverse(),[...$].reverse()),_=0,H=0;for(let W=0;W<=Q;W++){let K=G[W]+z[Q-W];if(K>_)_=K,H=W}let U=$.slice(0,H),T=$.slice(H);return[...J2(Y,U),...J2(X,T)]}function Z5(Z,$){let q=$.length,Q=Array(q+1).fill(0),J=Array(q+1).fill(0);for(let Y=0;Y<Z.length;Y++){for(let X=1;X<=q;X++)J[X]=Z[Y]===$[X-1]?Q[X-1]+1:Math.max(Q[X],J[X-1]);[Q,J]=[J,Q],J.fill(0)}return Q}function $6(Z,$){let Q=(K)=>{let F=[];for(let N=0;N<K.length;N+=200){let y=Math.min(N+200,K.length);F.push({start:N,end:y,text:K.slice(N,y).join("")})}return F},J=Q(Z),Y=Q($),X=J.map((K)=>K.text),G=Y.map((K)=>K.text),z=J2(X,G),_=[],H=[],U=0,T=0,W=0;while(U<J.length||T<Y.length)if(W<z.length&&U<J.length&&T<Y.length&&X[U]===z[W]&&G[T]===z[W]){for(let K=J[U].start;K<J[U].end;K++)_.push({type:"same",index:K});for(let K=Y[T].start;K<Y[T].end;K++)H.push({type:"same",index:K});U++,T++,W++}else if(U<J.length&&(W>=z.length||X[U]!==z[W]))if(T<Y.length&&(W>=z.length||G[T]!==z[W])){let K=J5(Z.slice(J[U].start,J[U].end),$.slice(Y[T].start,Y[T].end));for(let F of K.oldOps)_.push({type:F.type,index:F.index+J[U].start});for(let F of K.newOps)H.push({type:F.type,index:F.index+Y[T].start});U++,T++}else{for(let K=J[U].start;K<J[U].end;K++)_.push({type:"removed",index:K});U++}else if(T<Y.length){for(let K=Y[T].start;K<Y[T].end;K++)H.push({type:"added",index:K});T++}return{oldOps:_,newOps:H}}function q5(Z,$,q){let Q=new Map;for(let J of Z){if(J.type==="same")continue;let Y=$[J.index];if(!Y||!Y.node.parentNode)continue;let X=Q.get(Y.node);if(!X)X=[],Q.set(Y.node,X);X.push({offset:Y.offset,length:Y.text.length})}for(let[J,Y]of Q){if(!J.parentNode)continue;let X=J.nodeValue||"";Y.sort((U,T)=>U.offset-T.offset);let G=[];for(let U of Y){let T=G[G.length-1];if(T&&U.offset<=T.offset+T.length)T.length=Math.max(T.length,U.offset+U.length-T.offset);else G.push({...U})}let z=J.parentNode,_=document.createDocumentFragment(),H=0;for(let U of G){if(U.offset>H)_.appendChild(document.createTextNode(X.slice(H,U.offset)));let T=document.createElement("span");T.className=q,T.textContent=X.slice(U.offset,U.offset+U.length),_.appendChild(T),H=U.offset+U.length}if(H<X.length)_.appendChild(document.createTextNode(X.slice(H)));z.replaceChild(_,J)}}function Q2(Z,$){let q=Z6(Z,$),Q=$5(Z),J=$5($),{oldOps:Y,newOps:X}=f2(Q.words,J.words),G=Y.some((z)=>z.type==="removed")||X.some((z)=>z.type==="added");return q5(Y,Q.map,"diff-removed"),q5(X,J.map,"diff-added"),G||q}function Z6(Z,$){let q=Array.from(Z.querySelectorAll('[data-md="mermaid"]')),Q=Array.from($.querySelectorAll('[data-md="mermaid"]')),J=!1,Y=Math.max(q.length,Q.length);for(let X=0;X<Y;X++){let G=q[X],z=Q[X];if(!G&&z){z.classList.add("diff-block-added"),z.style.position="relative",J=!0;continue}if(G&&!z){G.classList.add("diff-block-removed"),G.style.position="relative",J=!0;continue}if(!G||!z)continue;let _=(G.getAttribute("data-md-source")||"").trim(),H=(z.getAttribute("data-md-source")||"").trim();if(_===H)continue;J=!0,G.style.borderLeft="3px solid var(--color-accent-red)",G.style.paddingLeft="8px",z.style.borderLeft="3px solid var(--color-accent-green)",z.style.paddingLeft="8px";let U=_.split(`
84
84
  `),T=H.split(`
85
- `),W=u1(U,T),K=(F,N,y)=>{let O=document.createElement("div");O.className="mt-2 bg-bg-code rounded-md overflow-hidden text-tiny font-mono",O.setAttribute("data-no-diff","true");let D=0,S=0;while(S<F.length){let M=document.createElement("div");if(M.className="px-3 py-0.5 whitespace-pre-wrap",D<N.length&&F[S]===N[D])M.textContent=" "+F[S],S++,D++;else M.classList.add(y==="old"?"diff-removed":"diff-added"),M.textContent=(y==="old"?"- ":"+ ")+F[S],S++;O.appendChild(M)}return O};G.appendChild(K(U,W,"old")),z.appendChild(K(T,W,"new"))}return J}function G0(Z){let $=[],q=Z.querySelectorAll(":scope > [data-md]");for(let Q of q)$.push(j0(Q));if($.length===0){let Q=Z.querySelectorAll("[data-md]"),J=new Set;for(let Y of Q){let X=Y.parentElement?.closest("[data-md]");if(X&&Z.contains(X))continue;if(J.has(Y))continue;J.add(Y),$.push(j0(Y))}}return $}function j0(Z){let $=Z.getAttribute("data-md")||"unknown",q=Z6(Z,$),Q=[];if($==="section"){let J=Z.querySelector(":scope > div.mt-6, :scope > div:last-child");if(J)for(let Y of J.querySelectorAll(":scope > [data-md]"))Q.push(j0(Y))}else if($==="table")for(let J of Z.querySelectorAll(":scope table > tbody > tr"))Q.push({key:"tr:"+(J.textContent||"").slice(0,80),type:"tr",element:J,children:[]});else if($==="checklist")for(let J of Z.querySelectorAll(":scope > [data-md='checklist-item']"))Q.push(j0(J));else for(let J of Z.querySelectorAll("[data-md]"))if(J.parentElement?.closest("[data-md]")===Z)Q.push(j0(J));return{key:q,type:$,element:Z,children:Q}}function Z6(Z,$){switch($){case"section":return"section:"+(Z.getAttribute("data-md-title")||"");case"item":return"item:"+(Z.getAttribute("data-task-id")||Z.getAttribute("data-md-label")||"");case"codeblock":case"diff":return $+":"+(Z.textContent||"").slice(0,80);case"checklist-item":return"checklist-item:"+(Z.getAttribute("data-md-label")||Z.textContent?.slice(0,60)||"");case"checklist":return"checklist:"+Z.querySelectorAll("[data-md='checklist-item']").length;case"markdown":return"markdown:"+(Z.getAttribute("data-md-file")||"inline");case"mermaid":return"mermaid:"+(Z.getAttribute("data-md-source")||"").slice(0,80);case"callout":return"callout:"+(Z.getAttribute("data-md-type")||"")+":"+(Z.textContent||"").slice(0,60);default:return $+":"+(Z.getAttribute("data-md-label")||Z.textContent?.slice(0,60)||"")}}function A0(Z,$){let q=Z.map((_)=>_.key),Q=$.map((_)=>_.key),J=u1(q,Q),Y=[],X=0,G=0,z=0;while(X<Z.length||G<$.length)if(z<J.length&&X<Z.length&&G<$.length&&q[X]===J[z]&&Q[G]===J[z]){let _=Z[X],H=$[G],U=_.children.length>0||H.children.length>0?A0(_.children,H.children):void 0;Y.push({kind:"matched",oldBlock:_,newBlock:H,childMatches:U}),X++,G++,z++}else if(X<Z.length&&(z>=J.length||q[X]!==J[z]))Y.push({kind:"removed",oldBlock:Z[X]}),X++;else if(G<$.length)Y.push({kind:"added",newBlock:$[G]}),G++;return Y}function q2(Z){let $=document.createDocumentFragment(),q=!1;for(let Q of Z)if(Q.kind==="removed")q=!0,$.appendChild(q5(Q.oldBlock.element));else if(Q.kind==="added")q=!0,$.appendChild(q6(Q.newBlock.element));else{let J=Q.newBlock.element.cloneNode(!0),Y=Q.newBlock.type;if(Y==="mermaid"){if(X5(Q.oldBlock.element,J))q=!0}else if(Q.childMatches&&Q.childMatches.length>0&&(Y==="table"||Y==="checklist")){if(Q5(J,Q.childMatches,Y))q=!0}else if(Q.childMatches&&Q.childMatches.length>0){if(J5(Q.oldBlock,J,Q.childMatches,Y))q=!0}else if(Y==="markdown"){if(Y5(Q.oldBlock.element,J))q=!0}else if($0(Q.oldBlock.element,J,!1))q=!0;$.appendChild(J)}return{fragment:$,hasChanges:q}}function q5(Z){let $=Z.cloneNode(!0);return $.classList.add("diff-block-removed"),$.style.position="relative",g2($,"Removed","var(--color-accent-red)"),$}function q6(Z){let $=Z.cloneNode(!0);return $.classList.add("diff-block-added"),$.style.position="relative",g2($,"Added","var(--color-accent-green)"),$}function J5(Z,$,q,Q){let J=!1,Y=J6(Z,$),X,G;if(Q==="section"){let z=Z.element.querySelector(":scope > div:first-child"),_=$.querySelector(":scope > div:first-child");if(z&&_){if($0(z,_,!1))J=!0}X=Z.element.querySelector(":scope > div.mt-6, :scope > div:last-child"),G=$.querySelector(":scope > div.mt-6, :scope > div:last-child")}else X=Z.element,G=$;if(!X||!G)return J;for(let z of q)if(z.kind==="matched"){let _=Y.newMap.get(z.newBlock.element);if(_){if(z.newBlock.type==="mermaid"){if(X5(z.oldBlock.element,_))J=!0}else if(z.childMatches&&z.childMatches.length>0&&(z.newBlock.type==="table"||z.newBlock.type==="checklist")){if(Q5(_,z.childMatches,z.newBlock.type))J=!0}else if(z.childMatches&&z.childMatches.length>0){if(J5(z.oldBlock,_,z.childMatches,z.newBlock.type))J=!0}else if(z.newBlock.type==="markdown"){if(Y5(z.oldBlock.element,_))J=!0}else if($0(z.oldBlock.element,_,!1))J=!0}}else if(z.kind==="removed"){J=!0;let _=q5(z.oldBlock.element),H=Y6(q,z,Y.newMap),U=H?X6(G,H):null;G.insertBefore(_,U)}else if(z.kind==="added"){J=!0;let _=Y.newMap.get(z.newBlock.element);if(_)_.classList.add("diff-block-added"),_.style.position="relative",g2(_,"Added","var(--color-accent-green)")}if($0(X,G,!0))J=!0;return J}function Q5(Z,$,q){let Q=q==="table"?Z.querySelector(":scope table > tbody"):Z;if(!Q)return!1;let J=!1;Q.innerHTML="";for(let Y of $)if(Y.kind==="removed"){J=!0;let X=Y.oldBlock.element.cloneNode(!0);X.classList.add(q==="table"?"diff-row-removed":"diff-item-removed"),Q.appendChild(X)}else if(Y.kind==="added"){J=!0;let X=Y.newBlock.element.cloneNode(!0);X.classList.add(q==="table"?"diff-row-added":"diff-item-added"),Q.appendChild(X)}else{let X=Y.newBlock.element.cloneNode(!0);if($0(Y.oldBlock.element,X,!1))J=!0;Q.appendChild(X)}return J}function J6(Z,$){let q=new Map,Q=Z.element.querySelectorAll("[data-md]"),J=$.querySelectorAll("[data-md]");return{newMap:{get(Y){return Q6($,Y)}}}}function Q6(Z,$){let q=$.getAttribute("data-md");if(!q)return null;let Q=$.getAttribute("data-md-label"),J=$.getAttribute("data-md-title"),Y=`[data-md="${q}"]`;if(J)Y+=`[data-md-title="${CSS.escape(J)}"]`;else if(Q)Y+=`[data-md-label="${CSS.escape(Q)}"]`;let X=Z.querySelectorAll(Y);if(X.length===1)return X[0];let G=($.textContent||"").slice(0,100),z=null,_=-1;for(let H of X){let U=(H.textContent||"").slice(0,100),T=0;for(let W=0;W<Math.min(G.length,U.length);W++)if(G[W]===U[W])T++;if(T>_)_=T,z=H}return z}function Y6(Z,$,q){let Q=Z.indexOf($);for(let J=Q+1;J<Z.length;J++){let Y=Z[J];if((Y.kind==="matched"||Y.kind==="added")&&Y.newBlock)return q.get(Y.newBlock.element)||null}return null}function X6(Z,$){let q=$;while(q&&q.parentElement!==Z)q=q.parentElement;return q}function Y5(Z,$){let q=Array.from(Z.children),Q=Array.from($.children);if(q.length===0&&Q.length===0)return $0(Z,$,!1);let J=q.map((T)=>T.tagName.toLowerCase()),Y=Q.map((T)=>T.tagName.toLowerCase()),X=u1(J,Y),G=[],z=0,_=0,H=0;while(z<q.length||_<Q.length)if(H<X.length&&z<q.length&&_<Q.length&&J[z]===X[H]&&Y[_]===X[H])G.push({kind:"matched",oldChild:q[z],newChild:Q[_]}),z++,_++,H++;else if(z<q.length&&(H>=X.length||J[z]!==X[H]))G.push({kind:"removed",oldChild:q[z]}),z++;else if(_<Q.length)G.push({kind:"added",newChild:Q[_]}),_++;let U=!1;while($.firstChild)$.removeChild($.firstChild);for(let T of G)if(T.kind==="matched"){let W=(T.oldChild.textContent||"").match(/\S+/g)||[],K=(T.newChild.textContent||"").match(/\S+/g)||[],F=u1(W,K),N=Math.max(W.length,K.length);if((N>0?1-F.length/N:0)>0.5){U=!0;let O=T.oldChild.cloneNode(!0);O.classList.add("diff-block-removed"),$.appendChild(O),T.newChild.classList.add("diff-block-added"),$.appendChild(T.newChild)}else{if($0(T.oldChild,T.newChild,!1))U=!0;$.appendChild(T.newChild)}}else if(T.kind==="removed"){U=!0;let W=T.oldChild.cloneNode(!0);W.classList.add("diff-block-removed"),$.appendChild(W)}else U=!0,T.newChild.classList.add("diff-block-added"),$.appendChild(T.newChild);return U}function Z5(Z,$){let q=$?new Set(Array.from(Z.querySelectorAll("[data-md]"))):new Set,Q=[],J=[],Y=document.createTreeWalker(Z,NodeFilter.SHOW_TEXT,{acceptNode(G){let z=G.parentElement;if(!z)return NodeFilter.FILTER_REJECT;if(z.closest("svg, .select-none, [data-no-diff]"))return NodeFilter.FILTER_REJECT;if($){for(let _ of q)if(_.contains(G))return NodeFilter.FILTER_REJECT}return NodeFilter.FILTER_ACCEPT}}),X;while(X=Y.nextNode()){let z=(X.nodeValue||"").match(/\S+|\s+/g);if(!z)continue;let _=0;for(let H of z)Q.push(H),J.push({text:H,node:X,offset:_}),_+=H.length}return{words:Q,map:J}}function $0(Z,$,q){let Q=Z5(Z,q),J=Z5($,q);if(Q.words.length===0&&J.words.length===0)return!1;let{oldOps:Y,newOps:X}=u2(Q.words,J.words),G=Y.some((N)=>N.type==="removed"),z=X.some((N)=>N.type==="added");if(!G&&!z)return!1;let _=[],H=[];for(let N of Y)if(N.type==="same")_.push(N.index);for(let N of X)if(N.type==="same")H.push(N.index);let U=new Map;for(let N=0;N<_.length&&N<H.length;N++)U.set(_[N],H[N]);let T=[];{let N=[],y=-1;for(let O of Y)if(O.type==="same"){if(N.length>0)T.push({text:N.join(""),anchorNewIdx:y>=0?U.get(y)??null:null}),N=[];y=O.index}else if(O.type==="removed")N.push(Q.words[O.index]);if(N.length>0)T.push({text:N.join(""),anchorNewIdx:y>=0?U.get(y)??null:null})}let W=new Map,K=new Map;for(let N of X){if(N.type!=="added")continue;let y=J.map[N.index];if(!y?.node.parentNode)continue;let O=W.get(y.node);if(!O)O=[],W.set(y.node,O);O.push({start:y.offset,end:y.offset+y.text.length})}for(let N of T)if(N.anchorNewIdx===null){if(J.map.length>0){let y=J.map[0].node,O=K.get(y);if(!O)O=[],K.set(y,O);O.push({offset:0,text:N.text})}}else{let y=J.map[N.anchorNewIdx];if(!y)continue;let O=K.get(y.node);if(!O)O=[],K.set(y.node,O);O.push({offset:y.offset+y.text.length,text:N.text})}let F=new Set([...W.keys(),...K.keys()]);for(let N of F)z6(N,W.get(N)||[],K.get(N)||[]);return!0}function z6(Z,$,q){if(!Z.parentNode)return;let Q=Z.nodeValue||"";$.sort((H,U)=>H.start-U.start);let J=[];for(let H of $){let U=J[J.length-1];if(U&&H.start<=U.end)U.end=Math.max(U.end,H.end);else J.push({...H})}q.sort((H,U)=>H.offset-U.offset);let Y=Z.parentNode,X=document.createDocumentFragment(),G=0,z=0,_=0;while(G<=Q.length){let H=z<J.length?J[z].start:1/0,U=_<q.length?q[_].offset:1/0,T=Math.min(H,U);if(T===1/0){if(G<Q.length)X.appendChild(document.createTextNode(Q.slice(G)));break}let W=Math.max(T,G);if(W>G)X.appendChild(document.createTextNode(Q.slice(G,W))),G=W;while(_<q.length&&q[_].offset<=G){let K=document.createElement("span");K.className="diff-removed",K.textContent=q[_].text,X.appendChild(K),_++}if(z<J.length&&J[z].start<=G){let K=J[z],F=document.createElement("span");F.className="diff-added",F.textContent=Q.slice(G,K.end),X.appendChild(F),G=K.end,z++;while(_<q.length&&q[_].offset<=G){let N=document.createElement("span");N.className="diff-removed",N.textContent=q[_].text,X.appendChild(N),_++}}}while(_<q.length){let H=document.createElement("span");H.className="diff-removed",H.textContent=q[_].text,X.appendChild(H),_++}Y.replaceChild(X,Z)}function X5(Z,$){let q=(Z.getAttribute("data-md-source")||"").trim(),Q=($.getAttribute("data-md-source")||"").trim();if(q===Q)return!1;let J=q.split(`
85
+ `),W=g1(U,T),K=(F,N,y)=>{let O=document.createElement("div");O.className="mt-2 bg-bg-code rounded-md overflow-hidden text-tiny font-mono",O.setAttribute("data-no-diff","true");let D=0,S=0;while(S<F.length){let M=document.createElement("div");if(M.className="px-3 py-0.5 whitespace-pre-wrap",D<N.length&&F[S]===N[D])M.textContent=" "+F[S],S++,D++;else M.classList.add(y==="old"?"diff-removed":"diff-added"),M.textContent=(y==="old"?"- ":"+ ")+F[S],S++;O.appendChild(M)}return O};G.appendChild(K(U,W,"old")),z.appendChild(K(T,W,"new"))}return J}function K0(Z){let $=[],q=Z.querySelectorAll(":scope > [data-md]");for(let Q of q)$.push(C0(Q));if($.length===0){let Q=Z.querySelectorAll("[data-md]"),J=new Set;for(let Y of Q){let X=Y.parentElement?.closest("[data-md]");if(X&&Z.contains(X))continue;if(J.has(Y))continue;J.add(Y),$.push(C0(Y))}}return $}function C0(Z){let $=Z.getAttribute("data-md")||"unknown",q=q6(Z,$),Q=[];if($==="section"){let J=Z.querySelector(":scope > div.mt-6, :scope > div:last-child");if(J)for(let Y of J.querySelectorAll(":scope > [data-md]"))Q.push(C0(Y))}else if($==="table")for(let J of Z.querySelectorAll(":scope table > tbody > tr"))Q.push({key:"tr:"+(J.textContent||"").slice(0,80),type:"tr",element:J,children:[]});else if($==="checklist")for(let J of Z.querySelectorAll(":scope > [data-md='checklist-item']"))Q.push(C0(J));else for(let J of Z.querySelectorAll("[data-md]"))if(J.parentElement?.closest("[data-md]")===Z)Q.push(C0(J));return{key:q,type:$,element:Z,children:Q}}function q6(Z,$){switch($){case"section":return"section:"+(Z.getAttribute("data-md-title")||"");case"item":return"item:"+(Z.getAttribute("data-task-id")||Z.getAttribute("data-md-label")||"");case"codeblock":case"diff":return $+":"+(Z.textContent||"").slice(0,80);case"checklist-item":return"checklist-item:"+(Z.getAttribute("data-md-label")||Z.textContent?.slice(0,60)||"");case"checklist":return"checklist:"+Z.querySelectorAll("[data-md='checklist-item']").length;case"markdown":return"markdown:"+(Z.getAttribute("data-md-file")||"inline");case"mermaid":return"mermaid:"+(Z.getAttribute("data-md-source")||"").slice(0,80);case"callout":return"callout:"+(Z.getAttribute("data-md-type")||"")+":"+(Z.textContent||"").slice(0,60);default:return $+":"+(Z.getAttribute("data-md-label")||Z.textContent?.slice(0,60)||"")}}function V0(Z,$){let q=Z.map((_)=>_.key),Q=$.map((_)=>_.key),J=g1(q,Q),Y=[],X=0,G=0,z=0;while(X<Z.length||G<$.length)if(z<J.length&&X<Z.length&&G<$.length&&q[X]===J[z]&&Q[G]===J[z]){let _=Z[X],H=$[G],U=_.children.length>0||H.children.length>0?V0(_.children,H.children):void 0;Y.push({kind:"matched",oldBlock:_,newBlock:H,childMatches:U}),X++,G++,z++}else if(X<Z.length&&(z>=J.length||q[X]!==J[z]))Y.push({kind:"removed",oldBlock:Z[X]}),X++;else if(G<$.length)Y.push({kind:"added",newBlock:$[G]}),G++;return Y}function Y2(Z){let $=document.createDocumentFragment(),q=!1;for(let Q of Z)if(Q.kind==="removed")q=!0,$.appendChild(Y5(Q.oldBlock.element));else if(Q.kind==="added")q=!0,$.appendChild(J6(Q.newBlock.element));else{let J=Q.newBlock.element.cloneNode(!0),Y=Q.newBlock.type;if(Y==="mermaid"){if(G5(Q.oldBlock.element,J))q=!0}else if(Q.childMatches&&Q.childMatches.length>0&&(Y==="table"||Y==="checklist")){if(z5(J,Q.childMatches,Y))q=!0}else if(Q.childMatches&&Q.childMatches.length>0){if(X5(Q.oldBlock,J,Q.childMatches,Y))q=!0}else if(Y==="markdown"){if(_5(Q.oldBlock.element,J))q=!0}else if(Z0(Q.oldBlock.element,J,!1))q=!0;$.appendChild(J)}return{fragment:$,hasChanges:q}}function Y5(Z){let $=Z.cloneNode(!0);return $.classList.add("diff-block-removed"),$.style.position="relative",v2($,"Removed","var(--color-accent-red)"),$}function J6(Z){let $=Z.cloneNode(!0);return $.classList.add("diff-block-added"),$.style.position="relative",v2($,"Added","var(--color-accent-green)"),$}function X5(Z,$,q,Q){let J=!1,Y=Q6(Z,$),X,G;if(Q==="section"){let z=Z.element.querySelector(":scope > div:first-child"),_=$.querySelector(":scope > div:first-child");if(z&&_){if(Z0(z,_,!1))J=!0}X=Z.element.querySelector(":scope > div.mt-6, :scope > div:last-child"),G=$.querySelector(":scope > div.mt-6, :scope > div:last-child")}else X=Z.element,G=$;if(!X||!G)return J;for(let z of q)if(z.kind==="matched"){let _=Y.newMap.get(z.newBlock.element);if(_){if(z.newBlock.type==="mermaid"){if(G5(z.oldBlock.element,_))J=!0}else if(z.childMatches&&z.childMatches.length>0&&(z.newBlock.type==="table"||z.newBlock.type==="checklist")){if(z5(_,z.childMatches,z.newBlock.type))J=!0}else if(z.childMatches&&z.childMatches.length>0){if(X5(z.oldBlock,_,z.childMatches,z.newBlock.type))J=!0}else if(z.newBlock.type==="markdown"){if(_5(z.oldBlock.element,_))J=!0}else if(Z0(z.oldBlock.element,_,!1))J=!0}}else if(z.kind==="removed"){J=!0;let _=Y5(z.oldBlock.element),H=X6(q,z,Y.newMap),U=H?z6(G,H):null;G.insertBefore(_,U)}else if(z.kind==="added"){J=!0;let _=Y.newMap.get(z.newBlock.element);if(_)_.classList.add("diff-block-added"),_.style.position="relative",v2(_,"Added","var(--color-accent-green)")}if(Z0(X,G,!0))J=!0;return J}function z5(Z,$,q){let Q=q==="table"?Z.querySelector(":scope table > tbody"):Z;if(!Q)return!1;let J=!1;Q.innerHTML="";for(let Y of $)if(Y.kind==="removed"){J=!0;let X=Y.oldBlock.element.cloneNode(!0);X.classList.add(q==="table"?"diff-row-removed":"diff-item-removed"),Q.appendChild(X)}else if(Y.kind==="added"){J=!0;let X=Y.newBlock.element.cloneNode(!0);X.classList.add(q==="table"?"diff-row-added":"diff-item-added"),Q.appendChild(X)}else{let X=Y.newBlock.element.cloneNode(!0);if(Z0(Y.oldBlock.element,X,!1))J=!0;Q.appendChild(X)}return J}function Q6(Z,$){let q=new Map,Q=Z.element.querySelectorAll("[data-md]"),J=$.querySelectorAll("[data-md]");return{newMap:{get(Y){return Y6($,Y)}}}}function Y6(Z,$){let q=$.getAttribute("data-md");if(!q)return null;let Q=$.getAttribute("data-md-label"),J=$.getAttribute("data-md-title"),Y=`[data-md="${q}"]`;if(J)Y+=`[data-md-title="${CSS.escape(J)}"]`;else if(Q)Y+=`[data-md-label="${CSS.escape(Q)}"]`;let X=Z.querySelectorAll(Y);if(X.length===1)return X[0];let G=($.textContent||"").slice(0,100),z=null,_=-1;for(let H of X){let U=(H.textContent||"").slice(0,100),T=0;for(let W=0;W<Math.min(G.length,U.length);W++)if(G[W]===U[W])T++;if(T>_)_=T,z=H}return z}function X6(Z,$,q){let Q=Z.indexOf($);for(let J=Q+1;J<Z.length;J++){let Y=Z[J];if((Y.kind==="matched"||Y.kind==="added")&&Y.newBlock)return q.get(Y.newBlock.element)||null}return null}function z6(Z,$){let q=$;while(q&&q.parentElement!==Z)q=q.parentElement;return q}function _5(Z,$){let q=Array.from(Z.children),Q=Array.from($.children);if(q.length===0&&Q.length===0)return Z0(Z,$,!1);let J=q.map((T)=>T.tagName.toLowerCase()),Y=Q.map((T)=>T.tagName.toLowerCase()),X=g1(J,Y),G=[],z=0,_=0,H=0;while(z<q.length||_<Q.length)if(H<X.length&&z<q.length&&_<Q.length&&J[z]===X[H]&&Y[_]===X[H])G.push({kind:"matched",oldChild:q[z],newChild:Q[_]}),z++,_++,H++;else if(z<q.length&&(H>=X.length||J[z]!==X[H]))G.push({kind:"removed",oldChild:q[z]}),z++;else if(_<Q.length)G.push({kind:"added",newChild:Q[_]}),_++;let U=!1;while($.firstChild)$.removeChild($.firstChild);for(let T of G)if(T.kind==="matched"){let W=(T.oldChild.textContent||"").match(/\S+/g)||[],K=(T.newChild.textContent||"").match(/\S+/g)||[],F=g1(W,K),N=Math.max(W.length,K.length);if((N>0?1-F.length/N:0)>0.5){U=!0;let O=T.oldChild.cloneNode(!0);O.classList.add("diff-block-removed"),$.appendChild(O),T.newChild.classList.add("diff-block-added"),$.appendChild(T.newChild)}else{if(Z0(T.oldChild,T.newChild,!1))U=!0;$.appendChild(T.newChild)}}else if(T.kind==="removed"){U=!0;let W=T.oldChild.cloneNode(!0);W.classList.add("diff-block-removed"),$.appendChild(W)}else U=!0,T.newChild.classList.add("diff-block-added"),$.appendChild(T.newChild);return U}function Q5(Z,$){let q=$?new Set(Array.from(Z.querySelectorAll("[data-md]"))):new Set,Q=[],J=[],Y=document.createTreeWalker(Z,NodeFilter.SHOW_TEXT,{acceptNode(G){let z=G.parentElement;if(!z)return NodeFilter.FILTER_REJECT;if(z.closest("svg, .select-none, [data-no-diff]"))return NodeFilter.FILTER_REJECT;if($){for(let _ of q)if(_.contains(G))return NodeFilter.FILTER_REJECT}return NodeFilter.FILTER_ACCEPT}}),X;while(X=Y.nextNode()){let z=(X.nodeValue||"").match(/\S+|\s+/g);if(!z)continue;let _=0;for(let H of z)Q.push(H),J.push({text:H,node:X,offset:_}),_+=H.length}return{words:Q,map:J}}function Z0(Z,$,q){let Q=Q5(Z,q),J=Q5($,q);if(Q.words.length===0&&J.words.length===0)return!1;let{oldOps:Y,newOps:X}=f2(Q.words,J.words),G=Y.some((N)=>N.type==="removed"),z=X.some((N)=>N.type==="added");if(!G&&!z)return!1;let _=[],H=[];for(let N of Y)if(N.type==="same")_.push(N.index);for(let N of X)if(N.type==="same")H.push(N.index);let U=new Map;for(let N=0;N<_.length&&N<H.length;N++)U.set(_[N],H[N]);let T=[];{let N=[],y=-1;for(let O of Y)if(O.type==="same"){if(N.length>0)T.push({text:N.join(""),anchorNewIdx:y>=0?U.get(y)??null:null}),N=[];y=O.index}else if(O.type==="removed")N.push(Q.words[O.index]);if(N.length>0)T.push({text:N.join(""),anchorNewIdx:y>=0?U.get(y)??null:null})}let W=new Map,K=new Map;for(let N of X){if(N.type!=="added")continue;let y=J.map[N.index];if(!y?.node.parentNode)continue;let O=W.get(y.node);if(!O)O=[],W.set(y.node,O);O.push({start:y.offset,end:y.offset+y.text.length})}for(let N of T)if(N.anchorNewIdx===null){if(J.map.length>0){let y=J.map[0].node,O=K.get(y);if(!O)O=[],K.set(y,O);O.push({offset:0,text:N.text})}}else{let y=J.map[N.anchorNewIdx];if(!y)continue;let O=K.get(y.node);if(!O)O=[],K.set(y.node,O);O.push({offset:y.offset+y.text.length,text:N.text})}let F=new Set([...W.keys(),...K.keys()]);for(let N of F)_6(N,W.get(N)||[],K.get(N)||[]);return!0}function _6(Z,$,q){if(!Z.parentNode)return;let Q=Z.nodeValue||"";$.sort((H,U)=>H.start-U.start);let J=[];for(let H of $){let U=J[J.length-1];if(U&&H.start<=U.end)U.end=Math.max(U.end,H.end);else J.push({...H})}q.sort((H,U)=>H.offset-U.offset);let Y=Z.parentNode,X=document.createDocumentFragment(),G=0,z=0,_=0;while(G<=Q.length){let H=z<J.length?J[z].start:1/0,U=_<q.length?q[_].offset:1/0,T=Math.min(H,U);if(T===1/0){if(G<Q.length)X.appendChild(document.createTextNode(Q.slice(G)));break}let W=Math.max(T,G);if(W>G)X.appendChild(document.createTextNode(Q.slice(G,W))),G=W;while(_<q.length&&q[_].offset<=G){let K=document.createElement("span");K.className="diff-removed",K.textContent=q[_].text,X.appendChild(K),_++}if(z<J.length&&J[z].start<=G){let K=J[z],F=document.createElement("span");F.className="diff-added",F.textContent=Q.slice(G,K.end),X.appendChild(F),G=K.end,z++;while(_<q.length&&q[_].offset<=G){let N=document.createElement("span");N.className="diff-removed",N.textContent=q[_].text,X.appendChild(N),_++}}}while(_<q.length){let H=document.createElement("span");H.className="diff-removed",H.textContent=q[_].text,X.appendChild(H),_++}Y.replaceChild(X,Z)}function G5(Z,$){let q=(Z.getAttribute("data-md-source")||"").trim(),Q=($.getAttribute("data-md-source")||"").trim();if(q===Q)return!1;let J=q.split(`
86
86
  `),Y=Q.split(`
87
- `),X=u1(J,Y),G=[],z=0,_=0,H=0;while(z<J.length||_<Y.length)if(H<X.length&&z<J.length&&_<Y.length&&J[z]===X[H]&&Y[_]===X[H])G.push({type:"same",line:J[z]}),z++,_++,H++;else if(z<J.length&&(H>=X.length||J[z]!==X[H]))G.push({type:"removed",line:J[z]}),z++;else if(_<Y.length)G.push({type:"added",line:Y[_]}),_++;let U=document.createElement("div");U.className="mt-2 bg-bg-code rounded-md overflow-hidden text-tiny font-mono",U.setAttribute("data-no-diff","true");for(let T of G){let W=document.createElement("div");if(W.className="px-3 py-0.5 whitespace-pre-wrap",T.type==="removed")W.classList.add("diff-removed"),W.textContent="- "+T.line;else if(T.type==="added")W.classList.add("diff-added"),W.textContent="+ "+T.line;else W.textContent=" "+T.line;U.appendChild(W)}return $.appendChild(U),!0}function g2(Z,$,q){let Q=document.createElement("span");Q.className="diff-block-label",Q.textContent=$,Q.style.color=q,Q.style.backgroundColor=`color-mix(in srgb, ${q} 12%, transparent)`,Z.appendChild(Q)}import{jsxDEV as p}from"react/jsx-dev-runtime";function G6(Z,$,q){let Q=Z.find((X)=>X.revision===$),J=Z.find((X)=>X.revision===q),Y=new Set;for(let X of Q?.canvasFiles||[])Y.add(X.filename);for(let X of J?.canvasFiles||[])Y.add(X.filename);return[...Y].sort()}function G5({initialLeft:Z,initialRight:$,sessionId:q,onExit:Q}){let[J,Y]=G1(Z),[X,G]=G1($),[z,_]=G1("unified"),[H,U]=G1(!0),[T,W]=G1(!1),{revisions:K}=_6(b1),F=J2(()=>G6(K,J,X),[K,J,X]),[N,y]=G1(()=>F[0]||"plan.jsx");g1(()=>{if(!F.includes(N))y(F[0]||"plan.jsx")},[F,N]);let O=J2(()=>{return K.find((M)=>M.revision===J)?.canvasFiles.some((M)=>M.filename===N)??!1},[K,J,N]),D=J2(()=>{return K.find((M)=>M.revision===X)?.canvasFiles.some((M)=>M.filename===N)??!1},[K,X,N]);return p("div",{className:"flex flex-col h-screen",children:[p("div",{className:"flex items-center justify-between px-6 py-3 border-b border-border-subtle bg-bg-surface flex-shrink-0",children:[p("div",{className:"flex items-center gap-3",children:[p("span",{className:"text-[13px] font-body font-medium text-text-primary",children:"Compare"},void 0,!1,void 0,this),p(b0,{value:J,onChange:Y,accent:"red"},void 0,!1,void 0,this),p("span",{className:"text-text-tertiary text-[13px]",children:"→"},void 0,!1,void 0,this),p(b0,{value:X,onChange:G,accent:"green"},void 0,!1,void 0,this),T&&!H&&p("span",{className:"text-[11px] font-body text-text-tertiary bg-bg-elevated px-2 py-0.5 rounded",children:"No changes"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),p("div",{className:"flex items-center gap-4",children:[p("div",{className:"flex items-center bg-bg-elevated rounded-md p-0.5",children:[p("button",{onClick:()=>_("unified"),className:`text-[11px] font-body px-2.5 py-1 rounded transition-colors ${z==="unified"?"bg-bg-surface text-text-primary font-medium shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:"Unified"},void 0,!1,void 0,this),p("button",{onClick:()=>_("side-by-side"),className:`text-[11px] font-body px-2.5 py-1 rounded transition-colors ${z==="side-by-side"?"bg-bg-surface text-text-primary font-medium shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:"Side-by-side"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z==="side-by-side"&&p(U6,{},void 0,!1,void 0,this),p("button",{onClick:Q,className:"text-[12px] font-body font-medium text-text-secondary hover:text-text-primary px-3 py-1.5 rounded-md hover:bg-bg-elevated transition-colors",children:"Exit Compare"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),F.length>1&&p("div",{className:"flex items-center gap-1 px-6 py-2 border-b border-border-subtle bg-bg-surface flex-shrink-0 overflow-x-auto",children:F.map((S)=>{let M=S.replace(/\.jsx$/,""),w=S===N,C=K.find((v)=>v.revision===J)?.canvasFiles.some((v)=>v.filename===S),k=K.find((v)=>v.revision===X)?.canvasFiles.some((v)=>v.filename===S),c=!C?" (added)":!k?" (removed)":"";return p("button",{onClick:()=>y(S),className:`text-[12px] font-body px-3 py-1 rounded-md transition-colors whitespace-nowrap ${w?"bg-bg-elevated text-text-primary font-medium":"text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated"}`,children:[M,c&&p("span",{className:`ml-1 text-[10px] ${!C?"text-accent-green":"text-accent-red"}`,children:c},void 0,!1,void 0,this)]},S,!0,void 0,this)})},void 0,!1,void 0,this),!O||!D?p("div",{className:"flex-1 flex items-center justify-center",children:p("div",{className:"text-center text-text-tertiary font-body",children:[p("div",{className:"text-lg mb-2",children:!O?"New file":"Removed file"},void 0,!1,void 0,this),p("div",{className:"text-[13px]",children:[N.replace(/\.jsx$/,"")," ",!O?"was added":"was removed"," in this revision"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this):z==="unified"?p(K6,{sessionId:q,leftRev:J,rightRev:X,filename:N,onDiffResult:(S,M)=>{W(S),U(M)}},`unified-${J}-${X}-${N}`,!1,void 0,this):p(H6,{sessionId:q,leftRev:J,rightRev:X,filename:N,onDiffResult:(S,M)=>{W(S),U(M)}},`sbs-${J}-${X}-${N}`,!1,void 0,this)]},void 0,!0,void 0,this)}function U6(){let[Z,$]=G1(!0);return g1(()=>{return document.documentElement.dataset.syncScroll=Z?"1":"0",()=>{delete document.documentElement.dataset.syncScroll}},[Z]),p("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[p("input",{type:"checkbox",checked:Z,onChange:(q)=>$(q.target.checked),className:"accent-accent-amber w-3.5 h-3.5"},void 0,!1,void 0,this),p("span",{className:"text-[11px] font-body text-text-secondary",children:"Sync scroll"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function K6({sessionId:Z,leftRev:$,rightRev:q,filename:Q,onDiffResult:J}){let Y=I1(null),X=I1(null),G=I1(null),[z,_]=G1(!1),[H,U]=G1(!1),[T,W]=G1(!1),[K,F]=G1(null),[N,y]=G1(!1),{annotations:O}=Y1(),D=O.filter((M)=>!M.filePath&&(!M.canvasFile||M.canvasFile===Q)),{popovers:S}=s1({containerRef:G,restoreKey:T,restoreAnnotations:D,extractContext:(M)=>l1(M,G.current)});return g1(()=>{if(T||K)return;let M=setTimeout(()=>{console.warn("[unified-diff] still loading after 10s",{leftReady:z,rightReady:H,oldRef:!!Y.current,newRef:!!X.current}),y(!0)},1e4);return()=>clearTimeout(M)},[T,K,z,H]),g1(()=>{if(!z||!H||T)return;if(!Y.current||!X.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!Y.current||!X.current||!G.current){console.warn("[unified-diff] refs lost between rAF frames",{old:!!Y.current,new:!!X.current,unified:!!G.current});return}try{let M=G0(Y.current),w=G0(X.current),C=A0(M,w),{fragment:k,hasChanges:c}=q2(C);G.current.innerHTML="",G.current.appendChild(k),W(!0),J(!0,c)}catch(M){console.error("[unified-diff] diff computation failed",M),F(M instanceof Error?M.message:String(M))}})})},[z,H,T]),p("div",{className:"flex-1 min-h-0 overflow-y-auto",children:[!T&&!K&&p("div",{style:{position:"absolute",left:-9999,visibility:"hidden",pointerEvents:"none",width:720},children:[p(R1,{ref:Y,sessionId:Z,revision:$,filename:Q,onReady:()=>_(!0),onError:(M)=>F(`Rev ${$}: ${M}`)},void 0,!1,void 0,this),p(R1,{ref:X,sessionId:Z,revision:q,filename:Q,onReady:()=>U(!0),onError:(M)=>F(`Rev ${q}: ${M}`)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),p("div",{className:"max-w-[720px] mx-auto px-6 pt-8 pb-32",children:[!T&&!K&&p("div",{className:"flex flex-col items-center justify-center h-64 text-text-tertiary font-body text-body gap-2",children:[p("span",{children:"Loading..."},void 0,!1,void 0,this),N&&p("span",{className:"text-[11px]",children:"Taking longer than expected — check Network tab for pending requests"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K&&p("div",{className:"bg-accent-red-muted rounded-lg p-5 mt-8",children:[p("h3",{className:"font-body font-semibold text-accent-red mb-2",children:"Failed to load revision"},void 0,!1,void 0,this),p("pre",{className:"text-code font-mono text-text-secondary whitespace-pre-wrap",children:K},void 0,!1,void 0,this)]},void 0,!0,void 0,this),p("div",{ref:G},void 0,!1,void 0,this)]},void 0,!0,void 0,this),S]},void 0,!0,void 0,this)}function H6({sessionId:Z,leftRev:$,rightRev:q,filename:Q,onDiffResult:J}){let Y=I1(null),X=I1(null),[G,z]=G1(!1),[_,H]=G1(!1),[U,T]=G1(!1),W=I1(null),K=I1(null),F=I1(null),N=I1(!1),y=_5(()=>z(!0),[]),O=_5(()=>H(!0),[]),{annotations:D}=Y1(),S=D.filter((w)=>!w.filePath&&(!w.canvasFile||w.canvasFile===Q)),{popovers:M}=s1({containerRef:W,restoreKey:U,restoreAnnotations:S,extractContext:(w)=>l1(w,W.current)});return g1(()=>{if(!G||!_||U)return;if(!Y.current||!X.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!Y.current||!X.current)return;let w=Z2(Y.current,X.current);T(!0),J(!0,w)})})},[G,_,U]),g1(()=>{let w=K.current,C=F.current;if(!w||!C)return;let k=(V,E)=>{if(document.documentElement.dataset.syncScroll==="0")return;if(N.current)return;N.current=!0;let g=V.scrollHeight-V.clientHeight,l=E.scrollHeight-E.clientHeight;if(g>0&&l>0)E.scrollTop=V.scrollTop/g*l;requestAnimationFrame(()=>{N.current=!1})},c=()=>k(w,C),v=()=>k(C,w);return w.addEventListener("scroll",c),C.addEventListener("scroll",v),()=>{w.removeEventListener("scroll",c),C.removeEventListener("scroll",v)}},[]),p("div",{ref:W,className:"flex flex-1 min-h-0",children:[p("div",{ref:K,className:"w-1/2 overflow-y-auto border-r border-border-subtle",children:p("div",{className:"max-w-[720px] mx-auto px-6 pt-8 pb-32",children:p(R1,{ref:Y,sessionId:Z,revision:$,filename:Q,onReady:y},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),p("div",{ref:F,className:"w-1/2 overflow-y-auto",children:p("div",{className:"max-w-[720px] mx-auto px-6 pt-8 pb-32",children:p(R1,{ref:X,sessionId:Z,revision:q,filename:Q,onReady:O},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),M]},void 0,!0,void 0,this)}var R1=z5.memo(z5.forwardRef(({sessionId:Z,revision:$,filename:q,onReady:Q,onError:J},Y)=>{let[X,G]=G1(null),[z,_]=G1(null),[H,U]=G1(!0);g1(()=>{U(!0),_(null);let W=q.replace(/\.jsx$/,".js");import(`/api/session/${Z}/canvas/${encodeURIComponent(W)}?rev=${$}&t=${Date.now()}`).then((K)=>{if(!K.default){_("Module has no default export"),U(!1),J?.("Module has no default export");return}G(()=>K.default),U(!1)}).catch((K)=>{_(K.message),U(!1),J?.(K.message)})},[Z,$,q]),g1(()=>{if(!X)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{Q()})})},[X]);let T=J2(()=>X?p(X,{},void 0,!1,void 0,this):null,[X]);if(H)return p("div",{className:"flex items-center justify-center h-64 text-text-tertiary font-body text-body",children:"Loading..."},void 0,!1,void 0,this);if(z)return p("div",{className:"bg-accent-red-muted rounded-lg p-5",children:[p("h3",{className:"font-body font-semibold text-accent-red mb-2",children:"Error"},void 0,!1,void 0,this),p("pre",{className:"text-code font-mono text-text-secondary whitespace-pre-wrap",children:z},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(!X)return p("div",{className:"text-text-tertiary text-center py-8 font-body text-body",children:"No canvas loaded"},void 0,!1,void 0,this);return p("div",{ref:Y,children:T},void 0,!1,void 0,this)}));import{useState as D1,useContext as f2,useMemo as W6,useRef as C0,useEffect as K5,useCallback as U5}from"react";import{SessionContext as T6}from"#canvas/runtime";import{jsxDEV as r}from"react/jsx-dev-runtime";function v2(Z,$){if(!Z)return[];return Z.canvasFiles.map((q)=>{if(!q.diffStats)return{filename:q.filename,status:"new"};if(q.diffStats.added===0&&q.diffStats.removed===0)return{filename:q.filename,status:"unchanged",diffStats:q.diffStats};return{filename:q.filename,status:"changed",diffStats:q.diffStats}})}function H5(Z){return Z.filter(($)=>$.status!=="unchanged").map(($)=>$.filename)}function W5({revision:Z,responseBanner:$}){let{setActiveView:q}=f2(V1),{revisions:Q}=f2(b1),J=Q.find((_)=>_.revision===Z),Y=Q.find((_)=>_.revision===Z-1),X=W6(()=>v2(J,Y),[J,Y]),G=X.filter((_)=>_.status!=="unchanged"),z=X.filter((_)=>_.status==="unchanged");return r("div",{className:"max-w-[720px] mx-auto px-6 pt-12 pb-32",children:[$,G.map((_)=>r(O6,{change:_,revision:Z,previousRevision:Y?.revision,onOpenTab:()=>q({type:"canvas",filename:_.filename})},_.filename,!1,void 0,this)),z.length>0&&r("div",{className:"mt-8 border-t border-border-subtle pt-4",children:[r("div",{className:"text-[11px] font-body font-medium uppercase tracking-widest text-text-tertiary mb-3",children:"Unchanged"},void 0,!1,void 0,this),z.map((_)=>r(M6,{change:_,revision:Z,onOpenTab:()=>q({type:"canvas",filename:_.filename})},_.filename,!1,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function N6({mode:Z,onChange:$,showDiff:q}){if(!q)return null;return r("div",{className:"flex items-center bg-bg-elevated rounded-md p-0.5",children:["rendered","unified","side-by-side"].map((Q)=>r("button",{onClick:()=>$(Q),className:`text-[10px] font-body px-2 py-0.5 rounded transition-colors ${Z===Q?"bg-bg-surface text-text-primary font-medium shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:Q==="rendered"?"Full":Q==="unified"?"Unified":"Split"},Q,!1,void 0,this))},void 0,!1,void 0,this)}function O6({change:Z,revision:$,previousRevision:q,onOpenTab:Q}){let J=Z.filename.replace(/\.jsx$/,""),Y=Z.status==="new",X=Z.diffStats,G=Z.status==="changed"&&q!=null,[z,_]=D1("rendered");return r("div",{className:"mb-8",children:[r("div",{className:"flex items-center gap-2 mb-3 pb-2 border-b border-border-subtle",children:[r("span",{className:`text-[11px] font-mono px-1.5 py-0.5 rounded ${Y?"bg-accent-green/10 text-accent-green border border-accent-green/20":"bg-accent-amber/10 text-accent-amber border border-accent-amber/20"}`,children:Y?"new":"modified"},void 0,!1,void 0,this),r("span",{className:"text-[14px] font-body font-medium text-text-primary",children:J},void 0,!1,void 0,this),X&&(X.added>0||X.removed>0)&&r("span",{className:"text-[11px] font-mono text-text-tertiary",children:[r("span",{className:"text-accent-green",children:["+",X.added]},void 0,!0,void 0,this)," ",r("span",{className:"text-accent-red",children:["-",X.removed]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),r(N6,{mode:z,onChange:_,showDiff:G},void 0,!1,void 0,this),r("button",{onClick:Q,className:`${G?"":"ml-auto"} text-[11px] font-body font-medium text-accent-blue hover:text-accent-blue/80 transition-colors`,children:"Open in tab"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z==="rendered"?r("div",{"data-canvas-file":Z.filename,children:r(P0,{revision:$,filename:Z.filename},void 0,!1,void 0,this)},void 0,!1,void 0,this):G&&q!=null?r(B6,{filename:Z.filename,leftRev:q,rightRev:$,mode:z},`${z}-${$}-${q}`,!1,void 0,this):null]},void 0,!0,void 0,this)}function B6({filename:Z,leftRev:$,rightRev:q,mode:Q}){let J=f2(T6);if(Q==="unified")return r(F6,{sessionId:J,filename:Z,leftRev:$,rightRev:q},void 0,!1,void 0,this);return r(L6,{sessionId:J,filename:Z,leftRev:$,rightRev:q},void 0,!1,void 0,this)}function F6({sessionId:Z,filename:$,leftRev:q,rightRev:Q}){let J=C0(null),Y=C0(null),X=C0(null),[G,z]=D1(!1),[_,H]=D1(!1),[U,T]=D1(!1),[W,K]=D1(null);return K5(()=>{if(!G||!_||U)return;if(!J.current||!Y.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!J.current||!Y.current||!X.current)return;try{let F=G0(J.current),N=G0(Y.current),y=A0(F,N),{fragment:O}=q2(y);X.current.innerHTML="",X.current.appendChild(O),T(!0)}catch(F){K(F instanceof Error?F.message:String(F))}})})},[G,_,U]),r("div",{children:[!U&&!W&&r("div",{style:{position:"absolute",left:-9999,visibility:"hidden",pointerEvents:"none",width:720},children:[r(R1,{ref:J,sessionId:Z,revision:q,filename:$,onReady:()=>z(!0),onError:(F)=>K(F)},void 0,!1,void 0,this),r(R1,{ref:Y,sessionId:Z,revision:Q,filename:$,onReady:()=>H(!0),onError:(F)=>K(F)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!U&&!W&&r("div",{className:"flex items-center justify-center h-24 text-text-tertiary font-body text-[13px]",children:"Computing diff..."},void 0,!1,void 0,this),W&&r("div",{className:"text-accent-red text-[13px] font-body p-3 bg-accent-red-muted rounded-lg",children:W},void 0,!1,void 0,this),r("div",{ref:X},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function L6({sessionId:Z,filename:$,leftRev:q,rightRev:Q}){let J=C0(null),Y=C0(null),[X,G]=D1(!1),[z,_]=D1(!1),[H,U]=D1(!1),T=U5(()=>G(!0),[]),W=U5(()=>_(!0),[]);return K5(()=>{if(!X||!z||H)return;if(!J.current||!Y.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!J.current||!Y.current)return;Z2(J.current,Y.current),U(!0)})})},[X,z,H]),r("div",{className:"flex gap-0 border-y border-border-subtle overflow-hidden w-screen relative left-1/2 -translate-x-1/2",children:[r("div",{className:"w-1/2 border-r border-border-subtle",children:[r("div",{className:"px-2 py-1 text-[10px] font-body font-medium text-text-tertiary bg-bg-elevated border-b border-border-subtle",children:["Rev ",q]},void 0,!0,void 0,this),r("div",{className:"px-6 py-4 max-w-[600px] mx-auto",children:r(R1,{ref:J,sessionId:Z,revision:q,filename:$,onReady:T},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),r("div",{className:"w-1/2",children:[r("div",{className:"px-2 py-1 text-[10px] font-body font-medium text-text-tertiary bg-bg-elevated border-b border-border-subtle",children:["Rev ",Q]},void 0,!0,void 0,this),r("div",{className:"px-6 py-4 max-w-[600px] mx-auto",children:r(R1,{ref:Y,sessionId:Z,revision:Q,filename:$,onReady:W},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function M6({change:Z,revision:$,onOpenTab:q}){let[Q,J]=D1(!1),Y=Z.filename.replace(/\.jsx$/,"");return r("div",{className:"mb-2",children:[r("div",{className:"flex items-center gap-2 py-1.5",children:[r("button",{onClick:()=>J(!Q),className:"text-text-tertiary hover:text-text-secondary transition-colors",children:r("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",className:`transition-transform duration-150 ${Q?"rotate-90":""}`,children:r("path",{d:"M3.5 2L6.5 5L3.5 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),r("span",{className:"text-[13px] font-body text-text-secondary",children:Y},void 0,!1,void 0,this),r("button",{onClick:q,className:"ml-auto text-[11px] font-body text-text-tertiary hover:text-accent-blue transition-colors",children:"Open in tab"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q&&r("div",{className:"ml-5 mt-1 mb-3","data-canvas-file":Z.filename,children:r(P0,{revision:$,filename:Z.filename},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useState as Q2,useEffect as P6,useCallback as h2}from"react";import{jsxDEV as o}from"react/jsx-dev-runtime";function T5({sessionId:Z,revision:$,open:q,shareEnabled:Q,existingShares:J,onClose:Y,onShareCreated:X,onShareRevoked:G}){let[z,_]=Q2(!1),[H,U]=Q2(!1),[T,W]=Q2(null),[K,F]=Q2(!1),N=J.find((S)=>S.revision===$);P6(()=>{if(!q)_(!1),U(!1),W(null),F(!1)},[q]);let y=h2(async()=>{_(!0),W(null);try{let S=await fetch(`/api/session/${Z}/revision/${$}/share`,{method:"POST"}),M=await S.json();if(!S.ok||!M.ok)throw Error(M.error||`HTTP ${S.status}`);X(M.share)}catch(S){W(S.message||String(S))}finally{_(!1)}},[Z,$,X]),O=h2(async(S)=>{if(!window.confirm("Revoke this share link? Reviewers will no longer be able to view or comment."))return;U(!0),W(null);try{let M=await fetch(`/api/session/${Z}/shares/${S}/revoke`,{method:"POST"}),w=await M.json();if(!M.ok||!w.ok)throw Error(w.error||`HTTP ${M.status}`);G(S)}catch(M){W(M.message||String(M))}finally{U(!1)}},[Z,G]),D=h2((S)=>{navigator.clipboard.writeText(S).then(()=>{F(!0),setTimeout(()=>F(!1),1500)})},[]);if(!q)return null;return o("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",onClick:Y,children:o("div",{className:"bg-bg-surface border border-border-medium rounded-lg shadow-xl w-full max-w-md mx-4 p-5",onClick:(S)=>S.stopPropagation(),children:[o("div",{className:"flex items-center justify-between mb-3",children:[o("h2",{className:"text-sm font-medium text-text-primary font-body",children:"Share this revision"},void 0,!1,void 0,this),o("button",{onClick:Y,className:"w-6 h-6 flex items-center justify-center rounded text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors",children:o("span",{className:"text-xs",children:"✕"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!Q?o("div",{className:"text-[13px] text-text-secondary font-body space-y-2",children:[o("p",{children:"Canvas sharing is not configured."},void 0,!1,void 0,this),o("p",{className:"text-text-tertiary",children:["Set ",o("code",{className:"px-1 py-0.5 rounded bg-bg-elevated text-text-primary text-[11px]",children:"CANVAS_SHARE_ENDPOINT"},void 0,!1,void 0,this)," to the URL of a deployed"," ",o("code",{className:"px-1 py-0.5 rounded bg-bg-elevated text-text-primary text-[11px]",children:"canvas-share"},void 0,!1,void 0,this)," worker and restart the daemon."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):N?o("div",{className:"space-y-3",children:[o("p",{className:"text-[13px] text-text-secondary font-body",children:"This revision is shared:"},void 0,!1,void 0,this),o("div",{className:"flex gap-2",children:[o("input",{type:"text",readOnly:!0,value:N.url,className:"flex-1 px-2 py-1.5 text-[12px] font-mono bg-bg-input border border-border-medium rounded text-text-primary",onFocus:(S)=>S.currentTarget.select()},void 0,!1,void 0,this),o("button",{onClick:()=>D(N.url),className:"px-3 py-1.5 text-[12px] font-body font-medium rounded bg-accent-blue text-white hover:opacity-90 transition-opacity whitespace-nowrap",children:K?"Copied!":"Copy"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),N.expiresAt&&o("p",{className:"text-[11px] text-text-tertiary font-body",children:["Expires ",new Date(N.expiresAt).toLocaleDateString(),"."]},void 0,!0,void 0,this),N.encryptionKey&&o("p",{className:"text-[11px] text-accent-green font-body flex items-center gap-1.5",children:[o("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[o("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"},void 0,!1,void 0,this),o("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),"End-to-end encrypted — the key is part of the link and never leaves your browser."]},void 0,!0,void 0,this),o("p",{className:"text-[11px] text-text-tertiary font-body",children:"Anyone with this link can view and leave feedback. Reviewer feedback will appear in your annotation sidebar within seconds."},void 0,!1,void 0,this),o("div",{className:"flex items-center justify-between pt-1",children:[o("button",{onClick:y,disabled:z||H,className:"text-[11px] text-text-tertiary hover:text-text-secondary font-body underline disabled:opacity-50",children:z?"Creating...":"Create a new link"},void 0,!1,void 0,this),N.ownerToken&&o("button",{onClick:()=>O(N.shareId),disabled:z||H,className:"text-[11px] text-accent-red hover:opacity-80 font-body underline disabled:opacity-50",children:H?"Revoking...":"Revoke link"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):o("div",{className:"space-y-3",children:[o("p",{className:"text-[13px] text-text-secondary font-body",children:"Create a public link to this revision. Anyone with the link can view the canvas and leave feedback. Reviewer feedback will sync back here automatically."},void 0,!1,void 0,this),o("button",{onClick:y,disabled:z,className:"w-full px-3 py-2 text-[13px] font-body font-medium rounded bg-accent-blue text-white hover:opacity-90 transition-opacity disabled:opacity-50",children:z?"Creating share link...":"Create share link"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),T&&o("div",{className:"mt-3 px-3 py-2 rounded bg-accent-red/10 border border-accent-red/20 text-[12px] text-accent-red font-body",children:T},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function N5({onClick:Z,title:$="Share this revision",hasShare:q}){return o("button",{onClick:Z,className:`group p-1.5 transition-colors ${q?"text-accent-blue hover:opacity-80":"text-text-tertiary hover:text-text-secondary"}`,title:$,children:o("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[o("circle",{cx:"18",cy:"5",r:"3"},void 0,!1,void 0,this),o("circle",{cx:"6",cy:"12",r:"3"},void 0,!1,void 0,this),o("circle",{cx:"18",cy:"19",r:"3"},void 0,!1,void 0,this),o("line",{x1:"8.59",y1:"13.51",x2:"15.42",y2:"17.49"},void 0,!1,void 0,this),o("line",{x1:"15.41",y1:"6.51",x2:"8.59",y2:"10.49"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}import{useState as y6,useEffect as S6,useRef as w6}from"react";import{jsxDEV as L1}from"react/jsx-dev-runtime";function O5({open:Z,onClose:$,onSubmit:q}){let[Q,J]=y6(""),Y=w6(null);if(S6(()=>{if(Z)J(""),setTimeout(()=>Y.current?.focus(),50)},[Z]),!Z)return null;let X=Q.trim(),G=X.length>=1&&X.length<=80,z=()=>{if(!G)return;q(X)};return L1("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",onClick:$,children:L1("div",{className:"bg-bg-surface border border-border-medium rounded-lg shadow-xl w-full max-w-md mx-4 p-5",onClick:(_)=>_.stopPropagation(),children:[L1("div",{className:"flex items-center justify-between mb-3",children:[L1("h2",{className:"text-sm font-medium text-text-primary font-body",children:"Your name"},void 0,!1,void 0,this),L1("button",{onClick:$,className:"w-6 h-6 flex items-center justify-center rounded text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors",children:L1("span",{className:"text-xs",children:"✕"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),L1("p",{className:"text-[13px] text-text-secondary font-body mb-3 leading-relaxed",children:"Before you leave feedback, please enter a name so the canvas author knows who reviewed it. This is stored locally in your browser."},void 0,!1,void 0,this),L1("input",{ref:Y,type:"text",value:Q,onChange:(_)=>J(_.target.value),onKeyDown:(_)=>{if(_.key==="Enter")z()},maxLength:80,placeholder:"e.g. Alice",className:"w-full px-3 py-2 text-[13px] font-body bg-bg-input border border-border-medium rounded text-text-primary placeholder:text-text-disabled focus:outline-none focus:border-accent-blue"},void 0,!1,void 0,this),L1("div",{className:"flex justify-end gap-2 mt-4",children:[L1("button",{onClick:$,className:"px-3 py-1.5 text-[12px] font-body font-medium rounded text-text-secondary hover:text-text-primary hover:bg-bg-elevated transition-colors",children:"Cancel"},void 0,!1,void 0,this),L1("button",{onClick:z,disabled:!G,className:"px-3 py-1.5 text-[12px] font-body font-medium rounded bg-accent-blue text-white hover:opacity-90 transition-opacity disabled:opacity-50",children:"Submit feedback"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function p2(Z,$){return`canvas:${Z}:rev:${$}`}function Y2(Z,$){return`${p2(Z,$)}:draft-handled`}function B5(Z){if(!Z)return null;try{let $=JSON.parse(Z);return typeof $==="object"&&$!==null&&!Array.isArray($)?$:null}catch{return null}}function b6(Z){if(!Array.isArray(Z)||Z.length<2)return!1;let $=Z[1];if(typeof $!=="object"||$===null||Array.isArray($))return!1;let q=Reflect.get($,"note");if(typeof q==="string"&&q.trim().length>0)return!0;let Q=Reflect.get($,"value");if(typeof Q==="string")return Q.trim().length>0;if(Array.isArray(Q))return Q.length>0;return Q!==null&&Q!==void 0}function F5(Z){if(!Z)return!1;let $=Reflect.get(Z,"annotations");if(Array.isArray($)&&$.length>0)return!0;let q=Reflect.get(Z,"generalNote");if(typeof q==="string"&&q.trim().length>0)return!0;let Q=Reflect.get(Z,"responses");return Array.isArray(Q)&&Q.some(b6)}function c2(Z,$,q,Q){try{let J=p2($,q);if(F5(B5(Z.getItem(J))))return Z.setItem(Y2($,q),"1"),null;if(Z.getItem(Y2($,q))!==null)return null;let Y=Q.filter((X)=>X.revision<q).sort((X,G)=>G.revision-X.revision);for(let X of Y){if(X.hasFeedback)return null;let G=B5(Z.getItem(p2($,X.revision)));if(!F5(G)){if(Z.getItem(Y2($,X.revision))!==null)return null;continue}return Z.setItem(J,JSON.stringify({...G,feedbackEntries:[]})),Z.setItem(Y2($,q),"1"),X.revision}}catch{}return null}import{jsxDEV as B,Fragment as I0}from"react/jsx-dev-runtime";function M5(Z){let $=[];for(let q of Z)for(let Q of q.annotations)$.push({...Q,source:"remote",author:q.author});return $}var V1=w5({activeView:{type:"overview"},setActiveView:()=>{},openFiles:[],closeFile:()=>{},canvasFiles:[]}),b1=w5({currentRevision:1,selectedRevision:1,revisions:[],setSelectedRevision:()=>{},isReadOnly:!1,compareRevision:null,setCompareRevision:()=>{},agentWatching:!1});function V6(Z){if(Z==="auto")return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";return Z}function P5(Z){document.documentElement.dataset.theme=V6(Z)}function j5(){let[Z,$]=q1(()=>{let J=localStorage.getItem("canvas-theme");if(J==="light"||J==="dark"||J==="auto")return J;return"auto"});return M1(()=>{if(P5(Z),Z!=="auto")return;let J=window.matchMedia("(prefers-color-scheme: dark)"),Y=()=>P5("auto");return J.addEventListener("change",Y),()=>J.removeEventListener("change",Y)},[Z]),B("button",{onClick:()=>{let J=Z==="auto"?"light":Z==="light"?"dark":"auto";localStorage.setItem("canvas-theme",J),$(J)},className:"w-7 h-7 flex items-center justify-center rounded-md text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors",title:{auto:"Theme: system (click for light)",light:"Theme: light (click for dark)",dark:"Theme: dark (click for system)"}[Z],children:Z==="auto"?B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[B("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"},void 0,!1,void 0,this),B("line",{x1:"8",y1:"21",x2:"16",y2:"21"},void 0,!1,void 0,this),B("line",{x1:"12",y1:"17",x2:"12",y2:"21"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):Z==="dark"?B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:B("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"},void 0,!1,void 0,this)},void 0,!1,void 0,this):B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[B("circle",{cx:"12",cy:"12",r:"5"},void 0,!1,void 0,this),B("line",{x1:"12",y1:"1",x2:"12",y2:"3"},void 0,!1,void 0,this),B("line",{x1:"12",y1:"21",x2:"12",y2:"23"},void 0,!1,void 0,this),B("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"},void 0,!1,void 0,this),B("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"},void 0,!1,void 0,this),B("line",{x1:"1",y1:"12",x2:"3",y2:"12"},void 0,!1,void 0,this),B("line",{x1:"21",y1:"12",x2:"23",y2:"12"},void 0,!1,void 0,this),B("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"},void 0,!1,void 0,this),B("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function A5(){let{currentRevision:Z,selectedRevision:$,revisions:q,setSelectedRevision:Q,setCompareRevision:J}=f1.useContext(b1);if(q.length<=1){let G=q[0]?.label||`Round ${Z}`;return B("span",{className:"text-[11px] text-text-tertiary font-body",children:G},void 0,!1,void 0,this)}return B("div",{className:"flex flex-col gap-1",children:[B(b0,{value:$,onChange:Q,accent:$===Z?"default":"amber"},void 0,!1,void 0,this),B("button",{onClick:()=>{let X;if($===Z)X=[...q].reverse().find((z)=>z.revision<Z)?.revision??Math.max(1,Z-1);else X=$;J({left:X,right:Z})},className:"text-[11px] font-body font-medium px-2 py-0.5 rounded-md text-accent-blue hover:bg-accent-blue-muted transition-colors self-start",children:"Compare"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function I6(){let Z=e.isShared?e.shareId:e.sessionId,$=e.isShared,[q,Q]=q1(1),[J,Y]=q1(1),[X,G]=q1([]),[z,_]=q1(null),[H,U]=q1(!1),[T,W]=q1(!1),[K,F]=q1(!1),[N,y]=q1([]),[O,D]=q1({type:"overview"}),[S,M]=q1([]),w=v1(null),[C,k]=q1(),[c,v]=q1(!1),[V,E]=q1(!1),[g,l]=q1(!1),[b,u]=q1(!1),[h,A]=q1([]),[I,L]=q1(!1),[d,x]=q1(new Map),[m,s]=q1(!1),[j,f]=q1(null),[Z1,U1]=q1(null);M1(()=>{if(!Z1)return;let R=setTimeout(()=>U1(null),4000);return()=>clearTimeout(R)},[Z1]),M1(()=>{let R=["Agent Canvas"];if(C){let a=C.replace(/\/+$/,"").split("/");R.push(a[a.length-1]||Z)}else if(Z)R.push(Z);if(O.type==="file")R.push(O.path.split("/").pop()||O.path);else if(O.type==="overview")R.push("Overview");else if(O.type==="canvas"&&N.length>1&&O.filename)R.push(O.filename.replace(/\.jsx$/,""));else if(z)R.push("Compare");document.title=R.join(" — ")},[Z,C,O,z]);let h1=v1(new Map),A1=X.find((R)=>R.revision===J),Z0=J!==q||!!A1?.hasFeedback||T,d2=V0((R)=>{let a=O.type==="overview"?"overview":O.type==="canvas"?`canvas:${O.filename}`:`file:${O.path}`;if(h1.current.set(a,window.scrollY),D(R),R.type==="file")M(($1)=>$1.includes(R.path)?$1:[...$1,R.path])},[O]),C5=V0((R)=>{h1.current.delete(`file:${R}`),M((a)=>a.filter(($1)=>$1!==R)),D((a)=>{if(a.type==="file"&&a.path===R)return N.length>1?{type:"overview"}:{type:"canvas",filename:N[0]||""};return a})},[N]);j6(()=>{let R=O.type==="overview"?"overview":O.type==="canvas"?`canvas:${O.filename}`:`file:${O.path}`;window.scrollTo(0,h1.current.get(R)||0)},[O]),M1(()=>{if(!Z)return;B3().then((R)=>{if(R.currentRevision){let a=R.revisions||[];c2(localStorage,Z,R.currentRevision,a),Q(R.currentRevision),Y(R.currentRevision),G(a)}if(R.canvasFiles){let a=R.canvasFiles.sort();y(a),D(($1)=>{if($1.type==="overview")return a.length>1?$1:{type:"canvas",filename:a[0]||""};if($1.type==="canvas"&&(!$1.filename||!a.includes($1.filename)))return{type:"canvas",filename:a[0]||""};return $1})}if(R.projectRoot)k(R.projectRoot);if(Array.isArray(R.shares))A(R.shares);L(!!R.shareEnabled)}).catch(()=>{})},[Z]),M1(()=>{if(!Z||!J||$)return;fetch(`/api/session/${Z}/revision/${J}/remote-feedback`).then((R)=>R.json()).then((R)=>{if(!Array.isArray(R.entries))return;let a=M5(R.entries);x(($1)=>{let P1=new Map($1);return P1.set(J,a),P1})}).catch(()=>{})},[Z,J,$]),M1(()=>{if(!Z)return;if(!y3){U(!0);return}let R=null,a=()=>{let $1=window.location.protocol==="https:"?"wss:":"ws:",P1=new WebSocket(`${$1}//${window.location.host}/ws/session/${Z}`);w.current=P1,P1.onopen=()=>U(!0),P1.onclose=()=>{U(!1),R=setTimeout(a,2000)},P1.onmessage=(l2)=>{try{let X1=JSON.parse(l2.data);if(X1.type==="plan-updated"){let k1=Array.isArray(X1.revisions)?X1.revisions:[];if(c2(localStorage,Z,X1.currentRevision,k1),Q(X1.currentRevision),Y(X1.currentRevision),_(null),k1.length>0){G(k1);let U0=k1.find((p1)=>p1.revision===X1.currentRevision);if(U0?.canvasFiles){let p1=U0.canvasFiles.map((H0)=>H0.filename).sort();y(p1);let z2=k1.find((H0)=>H0.revision===X1.currentRevision-1),K0=v2(U0,z2),q0=H5(K0);if(q0.length===1)D({type:"canvas",filename:q0[0]});else if(q0.length>1||p1.length>1)D({type:"overview"});else D({type:"canvas",filename:p1[0]||""})}}}if(X1.type==="revision-updated"){if(X1.revisions)G(X1.revisions)}if(X1.type==="watcher-status")F(!!X1.watching);if(X1.type==="remote-feedback"){let k1=X1.revision,U0=X1.entries||[],p1=M5(U0);x((z2)=>{let K0=new Map(z2),q0=K0.get(k1)||[],H0=new Set(q0.map((_2)=>_2.id)),V5=[...q0,...p1.filter((_2)=>!H0.has(_2.id))];return K0.set(k1,V5),K0})}}catch{}}};return a(),()=>{if(R)clearTimeout(R);w.current?.close()}},[Z]);let X2=V0(async(R,a)=>{try{let $1=localStorage.getItem(`canvas:${Z}:rev:${J}`),P1=[];if($1)try{P1=(JSON.parse($1).annotations||[]).filter((X1)=>X1.source!=="remote")}catch{}await P3({author:a,revision:J,annotations:P1,generalNote:R}),W(!0),U1({kind:"success",message:"Feedback submitted. The canvas author will see it shortly."})}catch($1){U1({kind:"error",message:`Failed to submit feedback: ${$1.message||$1}`})}},[Z,J]),r2=V0(async(R)=>{if($){let a=P2();if(!a){f(R),s(!0);return}await X2(R,a);return}if(w.current?.readyState===WebSocket.OPEN)w.current.send(JSON.stringify({type:"submit",feedback:R}))},[$,X2]);if(!Z)return B("div",{className:"flex items-center justify-center h-screen text-text-tertiary font-body",children:"No session selected."},void 0,!1,void 0,this);return B(b5.Provider,{value:Z,children:B(b1.Provider,{value:{currentRevision:q,selectedRevision:J,revisions:X,setSelectedRevision:Y,isReadOnly:Z0,compareRevision:z,setCompareRevision:_,agentWatching:K},children:B(G3,{sessionId:Z,revision:J,isReadOnly:Z0,remoteAnnotations:d.get(J),children:B(V1.Provider,{value:{activeView:O,setActiveView:d2,openFiles:S,closeFile:C5,canvasFiles:N},children:B(C6.Provider,{value:{setActiveView:d2},children:B("div",{className:"min-h-screen bg-bg-base",children:[B(R6,{sessionId:Z,projectRoot:C,connected:H,onMobileSidebar:()=>v(!c),collapsed:V,onToggle:()=>E((R)=>!R)},void 0,!1,void 0,this),B(D6,{collapsed:g,onToggle:()=>l((R)=>!R),children:B(E2,{onSubmit:r2},void 0,!1,void 0,this)},void 0,!1,void 0,this),z!==null?B("div",{className:`${V?"lg:ml-0":"lg:ml-60"} ${g?"lg:mr-0":"lg:mr-[var(--sidebar-width,320px)]"} transition-[margin] duration-200`,children:B(G5,{initialLeft:z.left,initialRight:z.right,sessionId:Z,onExit:()=>_(null)},void 0,!1,void 0,this)},void 0,!1,void 0,this):B("div",{className:`relative ${V?"lg:ml-0":"lg:ml-60"} ${g?"lg:mr-0":"lg:mr-[var(--sidebar-width,320px)]"} transition-[margin] duration-200`,id:"plan-scroll-container",children:[B("div",{className:"lg:hidden sticky top-0 z-20 flex items-center justify-between px-4 py-2 border-b border-border-subtle bg-bg-surface",children:[B("div",{className:"flex items-center gap-2",children:[!$&&B(m2,{currentSessionId:Z,projectRoot:C},void 0,!1,void 0,this),$&&B("span",{className:"text-[11px] text-text-tertiary font-body",children:"Shared canvas"},void 0,!1,void 0,this),!$&&B("span",{className:`w-1.5 h-1.5 rounded-full ${H?"bg-accent-green":"bg-accent-red"}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("div",{className:"flex items-center gap-1",children:[B(A5,{},void 0,!1,void 0,this),B("button",{onClick:()=>v(!c),className:"w-7 h-7 flex items-center justify-center rounded-md text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors",title:"Annotations",children:B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:B("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),B(j5,{},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),B(k6,{},void 0,!1,void 0,this),O.type==="overview"&&B(W5,{revision:J,responseBanner:A1?.response?B(y5,{markdown:A1.response},void 0,!1,void 0,this):void 0},void 0,!1,void 0,this),O.type==="canvas"&&N.includes(O.filename)&&B("div",{className:"relative max-w-[720px] mx-auto px-6 pt-12 pb-32",children:[I&&B("div",{className:"absolute top-3 right-12 z-10",children:B(N5,{onClick:()=>u(!0),hasShare:h.some((R)=>R.revision===J),title:h.some((R)=>R.revision===J)?"Manage share link":"Share this revision"},void 0,!1,void 0,this)},void 0,!1,void 0,this),B("button",{onClick:()=>{let R=document.querySelector(`[data-canvas-file="${O.filename}"] .plan-content`);if(!R)return;let a=o3(R);navigator.clipboard.writeText(a).then(()=>{let $1=document.getElementById("export-md-btn");if($1)$1.setAttribute("data-copied","true"),setTimeout(()=>{$1.removeAttribute("data-copied")},1500)})},id:"export-md-btn",className:"group absolute top-3 right-6 p-1.5 text-text-tertiary hover:text-text-secondary transition-colors z-10",title:"Copy as Markdown",children:[B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"group-[[data-copied=true]]:hidden",children:[B("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"},void 0,!1,void 0,this),B("path",{d:"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"hidden group-[[data-copied=true]]:block text-green-500",children:B("polyline",{points:"20 6 9 17 4 12"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),N.length<=1&&A1?.response&&B(y5,{markdown:A1.response},void 0,!1,void 0,this),B("div",{"data-canvas-file":O.filename,children:B(P0,{revision:J,filename:O.filename},O.filename,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),S.map((R)=>B("div",{style:{display:O.type==="file"&&O.path===R?void 0:"none"},children:B(r3,{path:R},void 0,!1,void 0,this)},R,!1,void 0,this))]},void 0,!0,void 0,this),c&&B("div",{className:"lg:hidden fixed inset-0 z-40 flex",children:[B("div",{className:"flex-1",onClick:()=>v(!1)},void 0,!1,void 0,this),B("div",{className:"w-80 max-w-[85vw] bg-bg-surface border-l border-border-subtle flex flex-col shadow-lg",children:[B("div",{className:"flex items-center justify-between px-4 py-2 border-b border-border-subtle flex-shrink-0",children:[B("span",{className:"text-[11px] font-medium uppercase tracking-widest text-text-tertiary font-body",children:"Sidebar"},void 0,!1,void 0,this),B("button",{onClick:()=>v(!1),className:"text-text-tertiary hover:text-text-secondary w-7 h-7 flex items-center justify-center",children:"✕"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("div",{className:"flex-1 overflow-hidden",children:B(E2,{onSubmit:r2},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),B(T5,{sessionId:Z,revision:J,open:b,shareEnabled:I,existingShares:h,onClose:()=>u(!1),onShareCreated:(R)=>{A((a)=>[...a.filter(($1)=>$1.shareId!==R.shareId),R]),U1({kind:"success",message:"Share link created. Copy and send it to reviewers."})},onShareRevoked:(R)=>{A((a)=>a.filter(($1)=>$1.shareId!==R)),U1({kind:"success",message:"Share link revoked."})}},void 0,!1,void 0,this),B(O5,{open:m,onClose:()=>{s(!1),f(null)},onSubmit:async(R)=>{let a=M3(R);if(s(!1),j!==null)await X2(j,a),f(null)}},void 0,!1,void 0,this),Z1&&B("div",{className:`fixed bottom-4 left-1/2 -translate-x-1/2 z-50 px-4 py-2.5 rounded-lg shadow-lg text-[13px] font-body font-medium flex items-center gap-2 ${Z1.kind==="error"?"bg-accent-red text-white":"bg-accent-green text-white"}`,children:[Z1.message,B("button",{onClick:()=>U1(null),className:"ml-2 opacity-70 hover:opacity-100",children:"✕"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},`${Z}:${J}`,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function R6({sessionId:Z,projectRoot:$,connected:q,onMobileSidebar:Q,collapsed:J,onToggle:Y}){let X=e.isShared;return B(I0,{children:[J&&B("button",{onClick:Y,className:"hidden lg:flex fixed top-3 left-3 z-20 w-7 h-7 items-center justify-center rounded-md text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors bg-bg-surface border border-border-subtle",title:"Show sidebar",children:B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[B("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"},void 0,!1,void 0,this),B("line",{x1:"9",y1:"3",x2:"9",y2:"21"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),B("div",{className:`hidden lg:flex w-60 flex-col fixed top-0 left-0 bottom-0 bg-bg-surface border-r border-border-subtle z-10 transition-transform duration-200 ${J?"-translate-x-full":""}`,children:[B("div",{className:"px-4 pt-4 pb-3 flex-shrink-0 border-b border-border-subtle",children:[B("div",{className:"flex items-center gap-2 mb-2",children:[B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",className:"text-text-tertiary flex-shrink-0",children:B("path",{d:"M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,void 0,this)},void 0,!1,void 0,this),X?B("span",{className:"text-[12px] font-body text-text-secondary truncate flex-1",children:"Shared canvas"},void 0,!1,void 0,this):B(I0,{children:[B(m2,{currentSessionId:Z,projectRoot:$},void 0,!1,void 0,this),B("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${q?"bg-accent-green":"bg-accent-red"}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("button",{onClick:Y,className:"ml-auto w-6 h-6 flex items-center justify-center rounded text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors",title:"Hide sidebar",children:B("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[B("polyline",{points:"11 17 6 12 11 7"},void 0,!1,void 0,this),B("polyline",{points:"18 17 13 12 18 7"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B(A5,{},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("div",{className:"flex-1 flex flex-col overflow-hidden",children:B(h3,{embedded:!0},void 0,!1,void 0,this)},void 0,!1,void 0,this),B("div",{className:"px-4 py-3 border-t border-border-subtle flex items-center justify-between flex-shrink-0",children:[B("span",{className:"text-[10px] text-text-tertiary font-body uppercase tracking-widest",children:"Theme"},void 0,!1,void 0,this),B(j5,{},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function D6({children:Z,collapsed:$,onToggle:q}){let[Q,J]=q1(()=>{let H=localStorage.getItem("canvas-sidebar-width");return H?parseInt(H,10):320}),Y=v1(!1),X=v1(0),G=v1(0),z=v1(Q);z.current=Q;let _=V0((H)=>{H.preventDefault(),Y.current=!0,X.current=H.clientX,G.current=z.current;let U=(W)=>{if(!Y.current)return;let K=X.current-W.clientX,F=Math.max(240,Math.min(600,G.current+K));J(F),z.current=F},T=()=>{Y.current=!1,localStorage.setItem("canvas-sidebar-width",String(z.current)),document.removeEventListener("mousemove",U),document.removeEventListener("mouseup",T),document.body.style.cursor="",document.body.style.userSelect=""};document.addEventListener("mousemove",U),document.addEventListener("mouseup",T),document.body.style.cursor="col-resize",document.body.style.userSelect="none"},[]);return M1(()=>{return document.documentElement.style.setProperty("--sidebar-width",`${Q}px`),()=>{document.documentElement.style.removeProperty("--sidebar-width")}},[Q]),B(I0,{children:[$&&B("button",{onClick:q,className:"hidden lg:flex fixed top-3 right-3 z-20 w-7 h-7 items-center justify-center rounded-md text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors bg-bg-surface border border-border-subtle",title:"Show annotations",children:B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:B("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),B("div",{className:`hidden lg:flex flex-col fixed top-0 right-0 bottom-0 bg-bg-surface border-l border-border-subtle z-10 transition-transform duration-200 ${$?"translate-x-full":""}`,style:{width:Q},children:[B("div",{onMouseDown:_,className:"absolute left-0 top-0 bottom-0 w-1 cursor-col-resize hover:bg-accent-blue/30 transition-colors z-20",style:{marginLeft:"-2px"}},void 0,!1,void 0,this),f1.Children.map(Z,(H)=>f1.isValidElement(H)?f1.cloneElement(H,{collapseButton:B("button",{onClick:q,className:"w-6 h-6 flex items-center justify-center rounded text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors",title:"Hide annotations",children:B("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[B("polyline",{points:"13 17 18 12 13 7"},void 0,!1,void 0,this),B("polyline",{points:"6 17 11 12 6 7"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}):H)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function y5({markdown:Z}){let[$,q]=q1(!1),Q=L5(()=>n.parse(Z,{async:!1}),[Z]),J=v1(null),{annotations:Y,addAnnotationWithId:X,removeAnnotation:G,updateAnnotation:z,addAnnotationImage:_,removeAnnotationImage:H,activeAnnotationId:U,setActiveAnnotationId:T}=Y1(),[W,K]=q1(null),[F,N]=q1(null),y=L5(()=>Y.filter((w)=>w.filePath===T1),[Y]),[O,D]=q1(Z);if(Z!==O)D(Z),q(!1);M1(()=>{if(!J.current||y.length===0)return;let w=setTimeout(()=>{if(J.current)c0(J.current,y)},50);return()=>clearTimeout(w)},[Q,y.length]);let S=v1(null);if(M1(()=>{h0(U,S.current),S.current=U},[U]),M1(()=>{let w=J.current;if(!w)return;let C=(v)=>{let V=v.target.closest("[data-annotation-id]");if(!V)return;v.stopPropagation();let E=V.getAttribute("data-annotation-id");if(E===U)N({anchorEl:V,annId:E});else T(E)},k=(v)=>{let V=v.target.closest("[data-annotation-id]");if(V)T(V.getAttribute("data-annotation-id"))},c=(v)=>{let V=v.target.closest("[data-annotation-id]"),E=v.relatedTarget?.closest?.("[data-annotation-id]");if(V&&!E)T(null)};return w.addEventListener("click",C),w.addEventListener("mouseover",k),w.addEventListener("mouseout",c),()=>{w.removeEventListener("click",C),w.removeEventListener("mouseover",k),w.removeEventListener("mouseout",c)}},[Q,U]),M1(()=>{let w=()=>{let C=window.getSelection();if(!C||C.isCollapsed||!C.toString().trim())return;if(!J.current)return;let k=C.getRangeAt(0);if(!J.current.contains(k.startContainer))return;if(k.startContainer.parentElement?.closest?.("[data-annotation-id]"))return;let c=C.toString().trim();if(c.length<2)return;let v=k.cloneRange(),V=l1(k,J.current),E=`__pending_${Date.now()}`;try{a1(v,E)}catch{}window.getSelection()?.removeAllRanges();let g=document.querySelectorAll(`[data-annotation-id="${E}"]`),l=g[g.length-1];if(!l)return;K({anchorEl:l,tempId:E,snippet:c,ctx:V})};return document.addEventListener("mouseup",w),()=>document.removeEventListener("mouseup",w)},[]),$)return null;let M=document.getElementById("plan-scroll-container");return B("div",{className:"mb-6 rounded-lg border border-accent-blue/20 bg-accent-blue/5 relative",children:[B("button",{onClick:()=>q(!0),className:"absolute top-2 right-2 w-6 h-6 flex items-center justify-center rounded text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors",children:B("span",{className:"text-xs",children:"✕"},void 0,!1,void 0,this)},void 0,!1,void 0,this),B("div",{className:"px-4 py-3 pr-10",children:[B("div",{className:"flex items-center gap-2 mb-1.5",children:[B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-accent-blue flex-shrink-0",children:B("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"},void 0,!1,void 0,this)},void 0,!1,void 0,this),B("span",{className:"text-[11px] font-medium uppercase tracking-widest text-accent-blue font-body",children:"Agent Response"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("div",{ref:J,className:"prose-canvas text-sm",dangerouslySetInnerHTML:{__html:Q}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),W&&B(Y0,{anchorEl:W.anchorEl,scrollContainer:M,snippet:W.snippet,truncateAt:80,onAdd:(w,C)=>{let k=B1();p0(W.tempId,k),X(k,W.snippet,w,T1,W.ctx,C),K(null)},onCancel:()=>{d0(W.tempId),K(null)}},void 0,!1,void 0,this),F&&(()=>{let w=Y.find((C)=>C.id===F.annId);if(!w)return null;return B(X0,{anchorEl:F.anchorEl,scrollContainer:M,initialNote:w.note,initialImages:w.images,onUpdate:(C,k)=>{z(F.annId,C);let c=w.images||[];for(let v of k)if(!c.includes(v))_(F.annId,v);for(let v of c)if(!k.includes(v))H(F.annId,v)},onDelete:()=>{G(F.annId),T(null)},onClose:()=>N(null)},void 0,!1,void 0,this)})()]},void 0,!0,void 0,this)}function k6(){let{activeView:Z,setActiveView:$,openFiles:q,closeFile:Q,canvasFiles:J}=f1.useContext(V1),Y=f1.useContext(b5),{addAnnotationWithId:X,setActiveAnnotationId:G}=Y1();if(!(J.length>1||q.length>0))return null;return B("div",{className:"flex items-center border-b border-border-medium bg-bg-surface overflow-x-auto sticky top-0 z-10",children:[J.length>1&&B(I0,{children:[B("button",{onClick:()=>$({type:"overview"}),className:`flex items-center gap-1.5 px-4 py-2.5 text-[13px] font-body whitespace-nowrap transition-colors relative ${Z.type==="overview"?"text-text-primary":"text-text-tertiary hover:text-text-secondary"}`,children:[B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",className:"opacity-60",children:B("path",{d:"M12 7L2 12l10 5 10-5-10-5z",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,void 0,this)},void 0,!1,void 0,this),"Overview",Z.type==="overview"&&B("span",{className:"absolute bottom-0 left-3 right-3 h-[2px] bg-text-primary rounded-full"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("span",{className:"w-px h-4 bg-border-medium flex-shrink-0"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J.map((_,H)=>{let U=_.replace(/\.jsx$/,""),T=Z.type==="canvas"&&Z.filename===_;return B(f1.Fragment,{children:[B("button",{onClick:()=>$({type:"canvas",filename:_}),className:`flex items-center gap-1.5 px-4 py-2.5 text-[13px] font-body whitespace-nowrap transition-colors relative ${T?"text-text-primary":"text-text-tertiary hover:text-text-secondary"}`,children:[U,T&&B("span",{className:"absolute bottom-0 left-3 right-3 h-[2px] bg-text-primary rounded-full"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H<J.length-1&&B("span",{className:"w-px h-4 bg-border-medium flex-shrink-0"},void 0,!1,void 0,this)]},_,!0,void 0,this)}),q.length>0&&B(I0,{children:[B("span",{className:"w-px h-4 bg-border-medium flex-shrink-0"},void 0,!1,void 0,this),q.map((_,H)=>{let U=_.split("/").pop()||_,T=Z.type==="file"&&Z.path===_;return B(f1.Fragment,{children:[B("div",{className:"flex items-center",children:[B("button",{onClick:()=>$({type:"file",path:_}),className:`flex items-center gap-1.5 pl-3 pr-1 py-2.5 text-[13px] font-body whitespace-nowrap transition-colors relative ${T?"text-text-primary":"text-text-tertiary hover:text-text-secondary"}`,children:[B(x1,{name:U,type:"file"},void 0,!1,void 0,this),U,T&&B("span",{className:"absolute bottom-0 left-3 right-1 h-[2px] bg-text-primary rounded-full"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("button",{onClick:(W)=>{W.stopPropagation(),Q(_)},className:"text-text-tertiary hover:text-text-secondary px-1.5 py-1 text-[10px] transition-colors rounded hover:bg-bg-input",children:"✕"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H<q.length-1&&B("span",{className:"w-px h-4 bg-border-medium flex-shrink-0"},void 0,!1,void 0,this)]},_,!0,void 0,this)})]},void 0,!0,void 0,this),B("div",{className:"ml-auto flex items-center gap-1 flex-shrink-0",children:Z.type==="file"&&F1&&B("button",{onClick:async()=>{let _=Z.path;try{let U=await(await fetch(`/api/file?session=${Y}&path=${encodeURIComponent(_)}`)).json();if(!U.error){let T=U.content.split(`
87
+ `),X=g1(J,Y),G=[],z=0,_=0,H=0;while(z<J.length||_<Y.length)if(H<X.length&&z<J.length&&_<Y.length&&J[z]===X[H]&&Y[_]===X[H])G.push({type:"same",line:J[z]}),z++,_++,H++;else if(z<J.length&&(H>=X.length||J[z]!==X[H]))G.push({type:"removed",line:J[z]}),z++;else if(_<Y.length)G.push({type:"added",line:Y[_]}),_++;let U=document.createElement("div");U.className="mt-2 bg-bg-code rounded-md overflow-hidden text-tiny font-mono",U.setAttribute("data-no-diff","true");for(let T of G){let W=document.createElement("div");if(W.className="px-3 py-0.5 whitespace-pre-wrap",T.type==="removed")W.classList.add("diff-removed"),W.textContent="- "+T.line;else if(T.type==="added")W.classList.add("diff-added"),W.textContent="+ "+T.line;else W.textContent=" "+T.line;U.appendChild(W)}return $.appendChild(U),!0}function v2(Z,$,q){let Q=document.createElement("span");Q.className="diff-block-label",Q.textContent=$,Q.style.color=q,Q.style.backgroundColor=`color-mix(in srgb, ${q} 12%, transparent)`,Z.appendChild(Q)}import{jsxDEV as p}from"react/jsx-dev-runtime";function U6(Z,$,q){let Q=Z.find((X)=>X.revision===$),J=Z.find((X)=>X.revision===q),Y=new Set;for(let X of Q?.canvasFiles||[])Y.add(X.filename);for(let X of J?.canvasFiles||[])Y.add(X.filename);return[...Y].sort()}function H5({initialLeft:Z,initialRight:$,sessionId:q,onExit:Q}){let[J,Y]=G1(Z),[X,G]=G1($),[z,_]=G1("unified"),[H,U]=G1(!0),[T,W]=G1(!1),{revisions:K}=G6(w1),F=X2(()=>U6(K,J,X),[K,J,X]),[N,y]=G1(()=>F[0]||"plan.jsx");f1(()=>{if(!F.includes(N))y(F[0]||"plan.jsx")},[F,N]);let O=X2(()=>{return K.find((M)=>M.revision===J)?.canvasFiles.some((M)=>M.filename===N)??!1},[K,J,N]),D=X2(()=>{return K.find((M)=>M.revision===X)?.canvasFiles.some((M)=>M.filename===N)??!1},[K,X,N]);return p("div",{className:"flex flex-col h-screen",children:[p("div",{className:"flex items-center justify-between px-6 py-3 border-b border-border-subtle bg-bg-surface flex-shrink-0",children:[p("div",{className:"flex items-center gap-3",children:[p("span",{className:"text-[13px] font-body font-medium text-text-primary",children:"Compare"},void 0,!1,void 0,this),p(A0,{value:J,onChange:Y,accent:"red"},void 0,!1,void 0,this),p("span",{className:"text-text-tertiary text-[13px]",children:"→"},void 0,!1,void 0,this),p(A0,{value:X,onChange:G,accent:"green"},void 0,!1,void 0,this),T&&!H&&p("span",{className:"text-[11px] font-body text-text-tertiary bg-bg-elevated px-2 py-0.5 rounded",children:"No changes"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),p("div",{className:"flex items-center gap-4",children:[p("div",{className:"flex items-center bg-bg-elevated rounded-md p-0.5",children:[p("button",{onClick:()=>_("unified"),className:`text-[11px] font-body px-2.5 py-1 rounded transition-colors ${z==="unified"?"bg-bg-surface text-text-primary font-medium shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:"Unified"},void 0,!1,void 0,this),p("button",{onClick:()=>_("side-by-side"),className:`text-[11px] font-body px-2.5 py-1 rounded transition-colors ${z==="side-by-side"?"bg-bg-surface text-text-primary font-medium shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:"Side-by-side"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z==="side-by-side"&&p(K6,{},void 0,!1,void 0,this),p("button",{onClick:Q,className:"text-[12px] font-body font-medium text-text-secondary hover:text-text-primary px-3 py-1.5 rounded-md hover:bg-bg-elevated transition-colors",children:"Exit Compare"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),F.length>1&&p("div",{className:"flex items-center gap-1 px-6 py-2 border-b border-border-subtle bg-bg-surface flex-shrink-0 overflow-x-auto",children:F.map((S)=>{let M=S.replace(/\.jsx$/,""),b=S===N,C=K.find((v)=>v.revision===J)?.canvasFiles.some((v)=>v.filename===S),k=K.find((v)=>v.revision===X)?.canvasFiles.some((v)=>v.filename===S),c=!C?" (added)":!k?" (removed)":"";return p("button",{onClick:()=>y(S),className:`text-[12px] font-body px-3 py-1 rounded-md transition-colors whitespace-nowrap ${b?"bg-bg-elevated text-text-primary font-medium":"text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated"}`,children:[M,c&&p("span",{className:`ml-1 text-[10px] ${!C?"text-accent-green":"text-accent-red"}`,children:c},void 0,!1,void 0,this)]},S,!0,void 0,this)})},void 0,!1,void 0,this),!O||!D?p("div",{className:"flex-1 flex items-center justify-center",children:p("div",{className:"text-center text-text-tertiary font-body",children:[p("div",{className:"text-lg mb-2",children:!O?"New file":"Removed file"},void 0,!1,void 0,this),p("div",{className:"text-[13px]",children:[N.replace(/\.jsx$/,"")," ",!O?"was added":"was removed"," in this revision"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this):z==="unified"?p(H6,{sessionId:q,leftRev:J,rightRev:X,filename:N,onDiffResult:(S,M)=>{W(S),U(M)}},`unified-${J}-${X}-${N}`,!1,void 0,this):p(W6,{sessionId:q,leftRev:J,rightRev:X,filename:N,onDiffResult:(S,M)=>{W(S),U(M)}},`sbs-${J}-${X}-${N}`,!1,void 0,this)]},void 0,!0,void 0,this)}function K6(){let[Z,$]=G1(!0);return f1(()=>{return document.documentElement.dataset.syncScroll=Z?"1":"0",()=>{delete document.documentElement.dataset.syncScroll}},[Z]),p("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[p("input",{type:"checkbox",checked:Z,onChange:(q)=>$(q.target.checked),className:"accent-accent-amber w-3.5 h-3.5"},void 0,!1,void 0,this),p("span",{className:"text-[11px] font-body text-text-secondary",children:"Sync scroll"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function H6({sessionId:Z,leftRev:$,rightRev:q,filename:Q,onDiffResult:J}){let Y=R1(null),X=R1(null),G=R1(null),[z,_]=G1(!1),[H,U]=G1(!1),[T,W]=G1(!1),[K,F]=G1(null),[N,y]=G1(!1),{annotations:O}=Y1(),D=O.filter((M)=>!M.filePath&&(!M.canvasFile||M.canvasFile===Q)),{popovers:S}=t1({containerRef:G,restoreKey:T,restoreAnnotations:D,extractContext:(M)=>i1(M,G.current)});return f1(()=>{if(T||K)return;let M=setTimeout(()=>{console.warn("[unified-diff] still loading after 10s",{leftReady:z,rightReady:H,oldRef:!!Y.current,newRef:!!X.current}),y(!0)},1e4);return()=>clearTimeout(M)},[T,K,z,H]),f1(()=>{if(!z||!H||T)return;if(!Y.current||!X.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!Y.current||!X.current||!G.current){console.warn("[unified-diff] refs lost between rAF frames",{old:!!Y.current,new:!!X.current,unified:!!G.current});return}try{let M=K0(Y.current),b=K0(X.current),C=V0(M,b),{fragment:k,hasChanges:c}=Y2(C);G.current.innerHTML="",G.current.appendChild(k),W(!0),J(!0,c)}catch(M){console.error("[unified-diff] diff computation failed",M),F(M instanceof Error?M.message:String(M))}})})},[z,H,T]),p("div",{className:"flex-1 min-h-0 overflow-y-auto",children:[!T&&!K&&p("div",{style:{position:"absolute",left:-9999,visibility:"hidden",pointerEvents:"none",width:720},children:[p(D1,{ref:Y,sessionId:Z,revision:$,filename:Q,onReady:()=>_(!0),onError:(M)=>F(`Rev ${$}: ${M}`)},void 0,!1,void 0,this),p(D1,{ref:X,sessionId:Z,revision:q,filename:Q,onReady:()=>U(!0),onError:(M)=>F(`Rev ${q}: ${M}`)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),p("div",{className:"max-w-[720px] mx-auto px-6 pt-8 pb-32",children:[!T&&!K&&p("div",{className:"flex flex-col items-center justify-center h-64 text-text-tertiary font-body text-body gap-2",children:[p("span",{children:"Loading..."},void 0,!1,void 0,this),N&&p("span",{className:"text-[11px]",children:"Taking longer than expected — check Network tab for pending requests"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K&&p("div",{className:"bg-accent-red-muted rounded-lg p-5 mt-8",children:[p("h3",{className:"font-body font-semibold text-accent-red mb-2",children:"Failed to load revision"},void 0,!1,void 0,this),p("pre",{className:"text-code font-mono text-text-secondary whitespace-pre-wrap",children:K},void 0,!1,void 0,this)]},void 0,!0,void 0,this),p("div",{ref:G},void 0,!1,void 0,this)]},void 0,!0,void 0,this),S]},void 0,!0,void 0,this)}function W6({sessionId:Z,leftRev:$,rightRev:q,filename:Q,onDiffResult:J}){let Y=R1(null),X=R1(null),[G,z]=G1(!1),[_,H]=G1(!1),[U,T]=G1(!1),W=R1(null),K=R1(null),F=R1(null),N=R1(!1),y=K5(()=>z(!0),[]),O=K5(()=>H(!0),[]),{annotations:D}=Y1(),S=D.filter((b)=>!b.filePath&&(!b.canvasFile||b.canvasFile===Q)),{popovers:M}=t1({containerRef:W,restoreKey:U,restoreAnnotations:S,extractContext:(b)=>i1(b,W.current)});return f1(()=>{if(!G||!_||U)return;if(!Y.current||!X.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!Y.current||!X.current)return;let b=Q2(Y.current,X.current);T(!0),J(!0,b)})})},[G,_,U]),f1(()=>{let b=K.current,C=F.current;if(!b||!C)return;let k=(V,E)=>{if(document.documentElement.dataset.syncScroll==="0")return;if(N.current)return;N.current=!0;let g=V.scrollHeight-V.clientHeight,l=E.scrollHeight-E.clientHeight;if(g>0&&l>0)E.scrollTop=V.scrollTop/g*l;requestAnimationFrame(()=>{N.current=!1})},c=()=>k(b,C),v=()=>k(C,b);return b.addEventListener("scroll",c),C.addEventListener("scroll",v),()=>{b.removeEventListener("scroll",c),C.removeEventListener("scroll",v)}},[]),p("div",{ref:W,className:"flex flex-1 min-h-0",children:[p("div",{ref:K,className:"w-1/2 overflow-y-auto border-r border-border-subtle",children:p("div",{className:"max-w-[720px] mx-auto px-6 pt-8 pb-32",children:p(D1,{ref:Y,sessionId:Z,revision:$,filename:Q,onReady:y},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),p("div",{ref:F,className:"w-1/2 overflow-y-auto",children:p("div",{className:"max-w-[720px] mx-auto px-6 pt-8 pb-32",children:p(D1,{ref:X,sessionId:Z,revision:q,filename:Q,onReady:O},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),M]},void 0,!0,void 0,this)}var D1=U5.memo(U5.forwardRef(({sessionId:Z,revision:$,filename:q,onReady:Q,onError:J},Y)=>{let[X,G]=G1(null),[z,_]=G1(null),[H,U]=G1(!0);f1(()=>{U(!0),_(null);let W=q.replace(/\.jsx$/,".js");import(`/api/session/${Z}/canvas/${encodeURIComponent(W)}?rev=${$}&t=${Date.now()}`).then((K)=>{if(!K.default){_("Module has no default export"),U(!1),J?.("Module has no default export");return}G(()=>K.default),U(!1)}).catch((K)=>{_(K.message),U(!1),J?.(K.message)})},[Z,$,q]),f1(()=>{if(!X)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{Q()})})},[X]);let T=X2(()=>X?p(X,{},void 0,!1,void 0,this):null,[X]);if(H)return p("div",{className:"flex items-center justify-center h-64 text-text-tertiary font-body text-body",children:"Loading..."},void 0,!1,void 0,this);if(z)return p("div",{className:"bg-accent-red-muted rounded-lg p-5",children:[p("h3",{className:"font-body font-semibold text-accent-red mb-2",children:"Error"},void 0,!1,void 0,this),p("pre",{className:"text-code font-mono text-text-secondary whitespace-pre-wrap",children:z},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(!X)return p("div",{className:"text-text-tertiary text-center py-8 font-body text-body",children:"No canvas loaded"},void 0,!1,void 0,this);return p("div",{ref:Y,children:T},void 0,!1,void 0,this)}));import{useState as k1,useContext as h2,useMemo as T6,useRef as I0,useEffect as T5,useCallback as W5}from"react";import{SessionContext as N6}from"#canvas/runtime";import{jsxDEV as r}from"react/jsx-dev-runtime";function p2(Z,$){if(!Z)return[];return Z.canvasFiles.map((q)=>{if(!q.diffStats)return{filename:q.filename,status:"new"};if(q.diffStats.added===0&&q.diffStats.removed===0)return{filename:q.filename,status:"unchanged",diffStats:q.diffStats};return{filename:q.filename,status:"changed",diffStats:q.diffStats}})}function N5(Z){return Z.filter(($)=>$.status!=="unchanged").map(($)=>$.filename)}function O5({revision:Z,responseBanner:$}){let{setActiveView:q}=h2(I1),{revisions:Q}=h2(w1),J=Q.find((_)=>_.revision===Z),Y=Q.find((_)=>_.revision===Z-1),X=T6(()=>p2(J,Y),[J,Y]),G=X.filter((_)=>_.status!=="unchanged"),z=X.filter((_)=>_.status==="unchanged");return r("div",{className:"max-w-[720px] mx-auto px-6 pt-12 pb-32",children:[$,G.map((_)=>r(B6,{change:_,revision:Z,previousRevision:Y?.revision,onOpenTab:()=>q({type:"canvas",filename:_.filename})},_.filename,!1,void 0,this)),z.length>0&&r("div",{className:"mt-8 border-t border-border-subtle pt-4",children:[r("div",{className:"text-[11px] font-body font-medium uppercase tracking-widest text-text-tertiary mb-3",children:"Unchanged"},void 0,!1,void 0,this),z.map((_)=>r(P6,{change:_,revision:Z,onOpenTab:()=>q({type:"canvas",filename:_.filename})},_.filename,!1,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function O6({mode:Z,onChange:$,showDiff:q}){if(!q)return null;return r("div",{className:"flex items-center bg-bg-elevated rounded-md p-0.5",children:["rendered","unified","side-by-side"].map((Q)=>r("button",{onClick:()=>$(Q),className:`text-[10px] font-body px-2 py-0.5 rounded transition-colors ${Z===Q?"bg-bg-surface text-text-primary font-medium shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:Q==="rendered"?"Full":Q==="unified"?"Unified":"Split"},Q,!1,void 0,this))},void 0,!1,void 0,this)}function B6({change:Z,revision:$,previousRevision:q,onOpenTab:Q}){let J=Z.filename.replace(/\.jsx$/,""),Y=Z.status==="new",X=Z.diffStats,G=Z.status==="changed"&&q!=null,[z,_]=k1("rendered");return r("div",{className:"mb-8",children:[r("div",{className:"flex items-center gap-2 mb-3 pb-2 border-b border-border-subtle",children:[r("span",{className:`text-[11px] font-mono px-1.5 py-0.5 rounded ${Y?"bg-accent-green/10 text-accent-green border border-accent-green/20":"bg-accent-amber/10 text-accent-amber border border-accent-amber/20"}`,children:Y?"new":"modified"},void 0,!1,void 0,this),r("span",{className:"text-[14px] font-body font-medium text-text-primary",children:J},void 0,!1,void 0,this),X&&(X.added>0||X.removed>0)&&r("span",{className:"text-[11px] font-mono text-text-tertiary",children:[r("span",{className:"text-accent-green",children:["+",X.added]},void 0,!0,void 0,this)," ",r("span",{className:"text-accent-red",children:["-",X.removed]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),r(O6,{mode:z,onChange:_,showDiff:G},void 0,!1,void 0,this),r("button",{onClick:Q,className:`${G?"":"ml-auto"} text-[11px] font-body font-medium text-accent-blue hover:text-accent-blue/80 transition-colors`,children:"Open in tab"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),z==="rendered"?r("div",{"data-canvas-file":Z.filename,children:r(S0,{revision:$,filename:Z.filename},void 0,!1,void 0,this)},void 0,!1,void 0,this):G&&q!=null?r(F6,{filename:Z.filename,leftRev:q,rightRev:$,mode:z},`${z}-${$}-${q}`,!1,void 0,this):null]},void 0,!0,void 0,this)}function F6({filename:Z,leftRev:$,rightRev:q,mode:Q}){let J=h2(N6);if(Q==="unified")return r(L6,{sessionId:J,filename:Z,leftRev:$,rightRev:q},void 0,!1,void 0,this);return r(M6,{sessionId:J,filename:Z,leftRev:$,rightRev:q},void 0,!1,void 0,this)}function L6({sessionId:Z,filename:$,leftRev:q,rightRev:Q}){let J=I0(null),Y=I0(null),X=I0(null),[G,z]=k1(!1),[_,H]=k1(!1),[U,T]=k1(!1),[W,K]=k1(null);return T5(()=>{if(!G||!_||U)return;if(!J.current||!Y.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!J.current||!Y.current||!X.current)return;try{let F=K0(J.current),N=K0(Y.current),y=V0(F,N),{fragment:O}=Y2(y);X.current.innerHTML="",X.current.appendChild(O),T(!0)}catch(F){K(F instanceof Error?F.message:String(F))}})})},[G,_,U]),r("div",{children:[!U&&!W&&r("div",{style:{position:"absolute",left:-9999,visibility:"hidden",pointerEvents:"none",width:720},children:[r(D1,{ref:J,sessionId:Z,revision:q,filename:$,onReady:()=>z(!0),onError:(F)=>K(F)},void 0,!1,void 0,this),r(D1,{ref:Y,sessionId:Z,revision:Q,filename:$,onReady:()=>H(!0),onError:(F)=>K(F)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!U&&!W&&r("div",{className:"flex items-center justify-center h-24 text-text-tertiary font-body text-[13px]",children:"Computing diff..."},void 0,!1,void 0,this),W&&r("div",{className:"text-accent-red text-[13px] font-body p-3 bg-accent-red-muted rounded-lg",children:W},void 0,!1,void 0,this),r("div",{ref:X},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function M6({sessionId:Z,filename:$,leftRev:q,rightRev:Q}){let J=I0(null),Y=I0(null),[X,G]=k1(!1),[z,_]=k1(!1),[H,U]=k1(!1),T=W5(()=>G(!0),[]),W=W5(()=>_(!0),[]);return T5(()=>{if(!X||!z||H)return;if(!J.current||!Y.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!J.current||!Y.current)return;Q2(J.current,Y.current),U(!0)})})},[X,z,H]),r("div",{className:"flex gap-0 border-y border-border-subtle overflow-hidden w-screen relative left-1/2 -translate-x-1/2",children:[r("div",{className:"w-1/2 border-r border-border-subtle",children:[r("div",{className:"px-2 py-1 text-[10px] font-body font-medium text-text-tertiary bg-bg-elevated border-b border-border-subtle",children:["Rev ",q]},void 0,!0,void 0,this),r("div",{className:"px-6 py-4 max-w-[600px] mx-auto",children:r(D1,{ref:J,sessionId:Z,revision:q,filename:$,onReady:T},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),r("div",{className:"w-1/2",children:[r("div",{className:"px-2 py-1 text-[10px] font-body font-medium text-text-tertiary bg-bg-elevated border-b border-border-subtle",children:["Rev ",Q]},void 0,!0,void 0,this),r("div",{className:"px-6 py-4 max-w-[600px] mx-auto",children:r(D1,{ref:Y,sessionId:Z,revision:Q,filename:$,onReady:W},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function P6({change:Z,revision:$,onOpenTab:q}){let[Q,J]=k1(!1),Y=Z.filename.replace(/\.jsx$/,"");return r("div",{className:"mb-2",children:[r("div",{className:"flex items-center gap-2 py-1.5",children:[r("button",{onClick:()=>J(!Q),className:"text-text-tertiary hover:text-text-secondary transition-colors",children:r("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",className:`transition-transform duration-150 ${Q?"rotate-90":""}`,children:r("path",{d:"M3.5 2L6.5 5L3.5 8",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),r("span",{className:"text-[13px] font-body text-text-secondary",children:Y},void 0,!1,void 0,this),r("button",{onClick:q,className:"ml-auto text-[11px] font-body text-text-tertiary hover:text-accent-blue transition-colors",children:"Open in tab"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),Q&&r("div",{className:"ml-5 mt-1 mb-3","data-canvas-file":Z.filename,children:r(S0,{revision:$,filename:Z.filename},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}import{useState as z2,useEffect as y6,useCallback as c2}from"react";import{jsxDEV as o}from"react/jsx-dev-runtime";function B5({sessionId:Z,revision:$,open:q,shareEnabled:Q,existingShares:J,onClose:Y,onShareCreated:X,onShareRevoked:G}){let[z,_]=z2(!1),[H,U]=z2(!1),[T,W]=z2(null),[K,F]=z2(!1),N=J.find((S)=>S.revision===$);y6(()=>{if(!q)_(!1),U(!1),W(null),F(!1)},[q]);let y=c2(async()=>{_(!0),W(null);try{let S=await fetch(`/api/session/${Z}/revision/${$}/share`,{method:"POST"}),M=await S.json();if(!S.ok||!M.ok)throw Error(M.error||`HTTP ${S.status}`);X(M.share)}catch(S){W(S.message||String(S))}finally{_(!1)}},[Z,$,X]),O=c2(async(S)=>{if(!window.confirm("Revoke this share link? Reviewers will no longer be able to view or comment."))return;U(!0),W(null);try{let M=await fetch(`/api/session/${Z}/shares/${S}/revoke`,{method:"POST"}),b=await M.json();if(!M.ok||!b.ok)throw Error(b.error||`HTTP ${M.status}`);G(S)}catch(M){W(M.message||String(M))}finally{U(!1)}},[Z,G]),D=c2((S)=>{navigator.clipboard.writeText(S).then(()=>{F(!0),setTimeout(()=>F(!1),1500)})},[]);if(!q)return null;return o("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",onClick:Y,children:o("div",{className:"bg-bg-surface border border-border-medium rounded-lg shadow-xl w-full max-w-md mx-4 p-5",onClick:(S)=>S.stopPropagation(),children:[o("div",{className:"flex items-center justify-between mb-3",children:[o("h2",{className:"text-sm font-medium text-text-primary font-body",children:"Share this revision"},void 0,!1,void 0,this),o("button",{onClick:Y,className:"w-6 h-6 flex items-center justify-center rounded text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors",children:o("span",{className:"text-xs",children:"✕"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!Q?o("div",{className:"text-[13px] text-text-secondary font-body space-y-2",children:[o("p",{children:"Canvas sharing is not configured."},void 0,!1,void 0,this),o("p",{className:"text-text-tertiary",children:["Set ",o("code",{className:"px-1 py-0.5 rounded bg-bg-elevated text-text-primary text-[11px]",children:"CANVAS_SHARE_ENDPOINT"},void 0,!1,void 0,this)," to the URL of a deployed"," ",o("code",{className:"px-1 py-0.5 rounded bg-bg-elevated text-text-primary text-[11px]",children:"canvas-share"},void 0,!1,void 0,this)," worker and restart the daemon."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):N?o("div",{className:"space-y-3",children:[o("p",{className:"text-[13px] text-text-secondary font-body",children:"This revision is shared:"},void 0,!1,void 0,this),o("div",{className:"flex gap-2",children:[o("input",{type:"text",readOnly:!0,value:N.url,className:"flex-1 px-2 py-1.5 text-[12px] font-mono bg-bg-input border border-border-medium rounded text-text-primary",onFocus:(S)=>S.currentTarget.select()},void 0,!1,void 0,this),o("button",{onClick:()=>D(N.url),className:"px-3 py-1.5 text-[12px] font-body font-medium rounded bg-accent-blue text-white hover:opacity-90 transition-opacity whitespace-nowrap",children:K?"Copied!":"Copy"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),N.expiresAt&&o("p",{className:"text-[11px] text-text-tertiary font-body",children:["Expires ",new Date(N.expiresAt).toLocaleDateString(),"."]},void 0,!0,void 0,this),N.encryptionKey&&o("p",{className:"text-[11px] text-accent-green font-body flex items-center gap-1.5",children:[o("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[o("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"},void 0,!1,void 0,this),o("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),"End-to-end encrypted — the key is part of the link and never leaves your browser."]},void 0,!0,void 0,this),o("p",{className:"text-[11px] text-text-tertiary font-body",children:"Anyone with this link can view and leave feedback. Reviewer feedback will appear in your annotation sidebar within seconds."},void 0,!1,void 0,this),o("div",{className:"flex items-center justify-between pt-1",children:[o("button",{onClick:y,disabled:z||H,className:"text-[11px] text-text-tertiary hover:text-text-secondary font-body underline disabled:opacity-50",children:z?"Creating...":"Create a new link"},void 0,!1,void 0,this),N.ownerToken&&o("button",{onClick:()=>O(N.shareId),disabled:z||H,className:"text-[11px] text-accent-red hover:opacity-80 font-body underline disabled:opacity-50",children:H?"Revoking...":"Revoke link"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):o("div",{className:"space-y-3",children:[o("p",{className:"text-[13px] text-text-secondary font-body",children:"Create a public link to this revision. Anyone with the link can view the canvas and leave feedback. Reviewer feedback will sync back here automatically."},void 0,!1,void 0,this),o("button",{onClick:y,disabled:z,className:"w-full px-3 py-2 text-[13px] font-body font-medium rounded bg-accent-blue text-white hover:opacity-90 transition-opacity disabled:opacity-50",children:z?"Creating share link...":"Create share link"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),T&&o("div",{className:"mt-3 px-3 py-2 rounded bg-accent-red/10 border border-accent-red/20 text-[12px] text-accent-red font-body",children:T},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function F5({onClick:Z,title:$="Share this revision",hasShare:q}){return o("button",{onClick:Z,className:`group p-1.5 transition-colors ${q?"text-accent-blue hover:opacity-80":"text-text-tertiary hover:text-text-secondary"}`,title:$,children:o("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[o("circle",{cx:"18",cy:"5",r:"3"},void 0,!1,void 0,this),o("circle",{cx:"6",cy:"12",r:"3"},void 0,!1,void 0,this),o("circle",{cx:"18",cy:"19",r:"3"},void 0,!1,void 0,this),o("line",{x1:"8.59",y1:"13.51",x2:"15.42",y2:"17.49"},void 0,!1,void 0,this),o("line",{x1:"15.41",y1:"6.51",x2:"8.59",y2:"10.49"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}import{useState as S6,useEffect as b6,useRef as j6}from"react";import{jsxDEV as M1}from"react/jsx-dev-runtime";function L5({open:Z,onClose:$,onSubmit:q}){let[Q,J]=S6(""),Y=j6(null);if(b6(()=>{if(Z)J(""),setTimeout(()=>Y.current?.focus(),50)},[Z]),!Z)return null;let X=Q.trim(),G=X.length>=1&&X.length<=80,z=()=>{if(!G)return;q(X)};return M1("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",onClick:$,children:M1("div",{className:"bg-bg-surface border border-border-medium rounded-lg shadow-xl w-full max-w-md mx-4 p-5",onClick:(_)=>_.stopPropagation(),children:[M1("div",{className:"flex items-center justify-between mb-3",children:[M1("h2",{className:"text-sm font-medium text-text-primary font-body",children:"Your name"},void 0,!1,void 0,this),M1("button",{onClick:$,className:"w-6 h-6 flex items-center justify-center rounded text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors",children:M1("span",{className:"text-xs",children:"✕"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),M1("p",{className:"text-[13px] text-text-secondary font-body mb-3 leading-relaxed",children:"Before you leave feedback, please enter a name so the canvas author knows who reviewed it. This is stored locally in your browser."},void 0,!1,void 0,this),M1("input",{ref:Y,type:"text",value:Q,onChange:(_)=>J(_.target.value),onKeyDown:(_)=>{if(_.key==="Enter")z()},maxLength:80,placeholder:"e.g. Alice",className:"w-full px-3 py-2 text-[13px] font-body bg-bg-input border border-border-medium rounded text-text-primary placeholder:text-text-disabled focus:outline-none focus:border-accent-blue"},void 0,!1,void 0,this),M1("div",{className:"flex justify-end gap-2 mt-4",children:[M1("button",{onClick:$,className:"px-3 py-1.5 text-[12px] font-body font-medium rounded text-text-secondary hover:text-text-primary hover:bg-bg-elevated transition-colors",children:"Cancel"},void 0,!1,void 0,this),M1("button",{onClick:z,disabled:!G,className:"px-3 py-1.5 text-[12px] font-body font-medium rounded bg-accent-blue text-white hover:opacity-90 transition-opacity disabled:opacity-50",children:"Submit feedback"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}import{jsxDEV as B,Fragment as D0}from"react/jsx-dev-runtime";function P5(Z){let $=[];for(let q of Z)for(let Q of q.annotations)$.push({...Q,source:"remote",author:q.author});return $}var I1=j5({activeView:{type:"overview"},setActiveView:()=>{},openFiles:[],closeFile:()=>{},canvasFiles:[]}),w1=j5({currentRevision:1,selectedRevision:1,revisions:[],setSelectedRevision:()=>{},isReadOnly:!1,compareRevision:null,setCompareRevision:()=>{},agentWatching:!1});function V6(Z){if(Z==="auto")return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";return Z}function y5(Z){document.documentElement.dataset.theme=V6(Z)}function A5(){let[Z,$]=q1(()=>{let J=localStorage.getItem("canvas-theme");if(J==="light"||J==="dark"||J==="auto")return J;return"auto"});return P1(()=>{if(y5(Z),Z!=="auto")return;let J=window.matchMedia("(prefers-color-scheme: dark)"),Y=()=>y5("auto");return J.addEventListener("change",Y),()=>J.removeEventListener("change",Y)},[Z]),B("button",{onClick:()=>{let J=Z==="auto"?"light":Z==="light"?"dark":"auto";localStorage.setItem("canvas-theme",J),$(J)},className:"w-7 h-7 flex items-center justify-center rounded-md text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors",title:{auto:"Theme: system (click for light)",light:"Theme: light (click for dark)",dark:"Theme: dark (click for system)"}[Z],children:Z==="auto"?B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[B("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"},void 0,!1,void 0,this),B("line",{x1:"8",y1:"21",x2:"16",y2:"21"},void 0,!1,void 0,this),B("line",{x1:"12",y1:"17",x2:"12",y2:"21"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):Z==="dark"?B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:B("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"},void 0,!1,void 0,this)},void 0,!1,void 0,this):B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[B("circle",{cx:"12",cy:"12",r:"5"},void 0,!1,void 0,this),B("line",{x1:"12",y1:"1",x2:"12",y2:"3"},void 0,!1,void 0,this),B("line",{x1:"12",y1:"21",x2:"12",y2:"23"},void 0,!1,void 0,this),B("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"},void 0,!1,void 0,this),B("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"},void 0,!1,void 0,this),B("line",{x1:"1",y1:"12",x2:"3",y2:"12"},void 0,!1,void 0,this),B("line",{x1:"21",y1:"12",x2:"23",y2:"12"},void 0,!1,void 0,this),B("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"},void 0,!1,void 0,this),B("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function C5(){let{currentRevision:Z,selectedRevision:$,revisions:q,setSelectedRevision:Q,setCompareRevision:J}=v1.useContext(w1);if(q.length<=1){let G=q[0]?.label||`Round ${Z}`;return B("span",{className:"text-[11px] text-text-tertiary font-body",children:G},void 0,!1,void 0,this)}return B("div",{className:"flex flex-col gap-1",children:[B(A0,{value:$,onChange:Q,accent:$===Z?"default":"amber"},void 0,!1,void 0,this),B("button",{onClick:()=>{let X;if($===Z)X=[...q].reverse().find((z)=>z.revision<Z)?.revision??Math.max(1,Z-1);else X=$;J({left:X,right:Z})},className:"text-[11px] font-body font-medium px-2 py-0.5 rounded-md text-accent-blue hover:bg-accent-blue-muted transition-colors self-start",children:"Compare"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function I6(){let Z=$1.isShared?$1.shareId:$1.sessionId,$=$1.isShared,[q,Q]=q1(1),[J,Y]=q1(1),[X,G]=q1([]),[z,_]=q1(null),[H,U]=q1(!1),[T,W]=q1(!1),[K,F]=q1(!1),[N,y]=q1([]),[O,D]=q1({type:"overview"}),[S,M]=q1([]),b=h1(null),[C,k]=q1(),[c,v]=q1(!1),[V,E]=q1(!1),[g,l]=q1(!1),[j,u]=q1(!1),[h,A]=q1([]),[I,L]=q1(!1),[d,m]=q1(new Map),[x,s]=q1(!1),[w,f]=q1(null),[Z1,U1]=q1(null);P1(()=>{if(!Z1)return;let R=setTimeout(()=>U1(null),4000);return()=>clearTimeout(R)},[Z1]),P1(()=>{let R=["Agent Canvas"];if(C){let a=C.replace(/\/+$/,"").split("/");R.push(a[a.length-1]||Z)}else if(Z)R.push(Z);if(O.type==="file")R.push(O.path.split("/").pop()||O.path);else if(O.type==="overview")R.push("Overview");else if(O.type==="canvas"&&N.length>1&&O.filename)R.push(O.filename.replace(/\.jsx$/,""));else if(z)R.push("Compare");document.title=R.join(" — ")},[Z,C,O,z]);let p1=h1(new Map),C1=X.find((R)=>R.revision===J),q0=J!==q||!!C1?.hasFeedback||T,d2=R0((R)=>{let a=O.type==="overview"?"overview":O.type==="canvas"?`canvas:${O.filename}`:`file:${O.path}`;if(p1.current.set(a,window.scrollY),D(R),R.type==="file")M((n)=>n.includes(R.path)?n:[...n,R.path])},[O]),V5=R0((R)=>{p1.current.delete(`file:${R}`),M((a)=>a.filter((n)=>n!==R)),D((a)=>{if(a.type==="file"&&a.path===R)return N.length>1?{type:"overview"}:{type:"canvas",filename:N[0]||""};return a})},[N]);w6(()=>{let R=O.type==="overview"?"overview":O.type==="canvas"?`canvas:${O.filename}`:`file:${O.path}`;window.scrollTo(0,p1.current.get(R)||0)},[O]),P1(()=>{if(!Z)return;M3().then((R)=>{if(R.currentRevision){let a=R.revisions||[];for(let n of a)if(n.hasFeedback)Y0(localStorage,Z,n.revision);P2(localStorage,Z,R.currentRevision,a),Q(R.currentRevision),Y(R.currentRevision),G(a)}if(R.canvasFiles){let a=R.canvasFiles.sort();y(a),D((n)=>{if(n.type==="overview")return a.length>1?n:{type:"canvas",filename:a[0]||""};if(n.type==="canvas"&&(!n.filename||!a.includes(n.filename)))return{type:"canvas",filename:a[0]||""};return n})}if(R.projectRoot)k(R.projectRoot);if(Array.isArray(R.shares))A(R.shares);L(!!R.shareEnabled)}).catch(()=>{})},[Z]),P1(()=>{if(!Z||!J||$)return;fetch(`/api/session/${Z}/revision/${J}/remote-feedback`).then((R)=>R.json()).then((R)=>{if(!Array.isArray(R.entries))return;let a=P5(R.entries);m((n)=>{let y1=new Map(n);return y1.set(J,a),y1})}).catch(()=>{})},[Z,J,$]),P1(()=>{if(!Z)return;if(!j3){U(!0);return}let R=null,a=()=>{let n=window.location.protocol==="https:"?"wss:":"ws:",y1=new WebSocket(`${n}//${window.location.host}/ws/session/${Z}`);b.current=y1,y1.onopen=()=>U(!0),y1.onclose=()=>{U(!1),R=setTimeout(a,2000)},y1.onmessage=(l2)=>{try{let X1=JSON.parse(l2.data);if(X1.type==="plan-updated"){let N1=Array.isArray(X1.revisions)?X1.revisions:[];if(P2(localStorage,Z,X1.currentRevision,N1),Q(X1.currentRevision),Y(X1.currentRevision),_(null),N1.length>0){G(N1);let E1=N1.find((c1)=>c1.revision===X1.currentRevision);if(E1?.canvasFiles){let c1=E1.canvasFiles.map((W0)=>W0.filename).sort();y(c1);let G2=N1.find((W0)=>W0.revision===X1.currentRevision-1),H0=p2(E1,G2),J0=N5(H0);if(J0.length===1)D({type:"canvas",filename:J0[0]});else if(J0.length>1||c1.length>1)D({type:"overview"});else D({type:"canvas",filename:c1[0]||""})}}}if(X1.type==="revision-updated"){if(Array.isArray(X1.revisions)){let N1=X1.revisions;for(let E1 of N1)if(E1.hasFeedback)Y0(localStorage,Z,E1.revision);G(N1)}}if(X1.type==="watcher-status")F(!!X1.watching);if(X1.type==="remote-feedback"){let N1=X1.revision,E1=X1.entries||[],c1=P5(E1);m((G2)=>{let H0=new Map(G2),J0=H0.get(N1)||[],W0=new Set(J0.map((U2)=>U2.id)),I5=[...J0,...c1.filter((U2)=>!W0.has(U2.id))];return H0.set(N1,I5),H0})}}catch{}}};return a(),()=>{if(R)clearTimeout(R);b.current?.close()}},[Z]);let _2=R0(async(R,a)=>{try{let n=localStorage.getItem(`canvas:${Z}:rev:${J}`),y1=[];if(n)try{y1=(JSON.parse(n).annotations||[]).filter((X1)=>X1.source!=="remote")}catch{}await b3({author:a,revision:J,annotations:y1,generalNote:R}),Y0(localStorage,Z,J),W(!0),U1({kind:"success",message:"Feedback submitted. The canvas author will see it shortly."})}catch(n){U1({kind:"error",message:`Failed to submit feedback: ${n.message||n}`})}},[Z,J]),r2=R0(async(R)=>{if($){let a=S2();if(!a){f(R),s(!0);return}await _2(R,a);return}if(b.current?.readyState===WebSocket.OPEN)b.current.send(JSON.stringify({type:"submit",feedback:R}))},[$,_2]);if(!Z)return B("div",{className:"flex items-center justify-center h-screen text-text-tertiary font-body",children:"No session selected."},void 0,!1,void 0,this);return B(w5.Provider,{value:Z,children:B(w1.Provider,{value:{currentRevision:q,selectedRevision:J,revisions:X,setSelectedRevision:Y,isReadOnly:q0,compareRevision:z,setCompareRevision:_,agentWatching:K},children:B(H3,{sessionId:Z,revision:J,isReadOnly:q0,remoteAnnotations:d.get(J),children:B(I1.Provider,{value:{activeView:O,setActiveView:d2,openFiles:S,closeFile:V5,canvasFiles:N},children:B(C6.Provider,{value:{setActiveView:d2},children:B("div",{className:"min-h-screen bg-bg-base",children:[B(R6,{sessionId:Z,projectRoot:C,connected:H,onMobileSidebar:()=>v(!c),collapsed:V,onToggle:()=>E((R)=>!R)},void 0,!1,void 0,this),B(D6,{collapsed:g,onToggle:()=>l((R)=>!R),children:B(x2,{onSubmit:r2},void 0,!1,void 0,this)},void 0,!1,void 0,this),z!==null?B("div",{className:`${V?"lg:ml-0":"lg:ml-60"} ${g?"lg:mr-0":"lg:mr-[var(--sidebar-width,320px)]"} transition-[margin] duration-200`,children:B(H5,{initialLeft:z.left,initialRight:z.right,sessionId:Z,onExit:()=>_(null)},void 0,!1,void 0,this)},void 0,!1,void 0,this):B("div",{className:`relative ${V?"lg:ml-0":"lg:ml-60"} ${g?"lg:mr-0":"lg:mr-[var(--sidebar-width,320px)]"} transition-[margin] duration-200`,id:"plan-scroll-container",children:[B("div",{className:"lg:hidden sticky top-0 z-20 flex items-center justify-between px-4 py-2 border-b border-border-subtle bg-bg-surface",children:[B("div",{className:"flex items-center gap-2",children:[!$&&B(g2,{currentSessionId:Z,projectRoot:C},void 0,!1,void 0,this),$&&B("span",{className:"text-[11px] text-text-tertiary font-body",children:"Shared canvas"},void 0,!1,void 0,this),!$&&B("span",{className:`w-1.5 h-1.5 rounded-full ${H?"bg-accent-green":"bg-accent-red"}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("div",{className:"flex items-center gap-1",children:[B(C5,{},void 0,!1,void 0,this),B("button",{onClick:()=>v(!c),className:"w-7 h-7 flex items-center justify-center rounded-md text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors",title:"Annotations",children:B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:B("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),B(A5,{},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),B(k6,{},void 0,!1,void 0,this),O.type==="overview"&&B(O5,{revision:J,responseBanner:C1?.response?B(S5,{markdown:C1.response},void 0,!1,void 0,this):void 0},void 0,!1,void 0,this),O.type==="canvas"&&N.includes(O.filename)&&B("div",{className:"relative max-w-[720px] mx-auto px-6 pt-12 pb-32",children:[I&&B("div",{className:"absolute top-3 right-12 z-10",children:B(F5,{onClick:()=>u(!0),hasShare:h.some((R)=>R.revision===J),title:h.some((R)=>R.revision===J)?"Manage share link":"Share this revision"},void 0,!1,void 0,this)},void 0,!1,void 0,this),B("button",{onClick:()=>{let R=document.querySelector(`[data-canvas-file="${O.filename}"] .plan-content`);if(!R)return;let a=n3(R);navigator.clipboard.writeText(a).then(()=>{let n=document.getElementById("export-md-btn");if(n)n.setAttribute("data-copied","true"),setTimeout(()=>{n.removeAttribute("data-copied")},1500)})},id:"export-md-btn",className:"group absolute top-3 right-6 p-1.5 text-text-tertiary hover:text-text-secondary transition-colors z-10",title:"Copy as Markdown",children:[B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"group-[[data-copied=true]]:hidden",children:[B("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"},void 0,!1,void 0,this),B("path",{d:"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"hidden group-[[data-copied=true]]:block text-green-500",children:B("polyline",{points:"20 6 9 17 4 12"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),N.length<=1&&C1?.response&&B(S5,{markdown:C1.response},void 0,!1,void 0,this),B("div",{"data-canvas-file":O.filename,children:B(S0,{revision:J,filename:O.filename},O.filename,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),S.map((R)=>B("div",{style:{display:O.type==="file"&&O.path===R?void 0:"none"},children:B(a3,{path:R},void 0,!1,void 0,this)},R,!1,void 0,this))]},void 0,!0,void 0,this),c&&B("div",{className:"lg:hidden fixed inset-0 z-40 flex",children:[B("div",{className:"flex-1",onClick:()=>v(!1)},void 0,!1,void 0,this),B("div",{className:"w-80 max-w-[85vw] bg-bg-surface border-l border-border-subtle flex flex-col shadow-lg",children:[B("div",{className:"flex items-center justify-between px-4 py-2 border-b border-border-subtle flex-shrink-0",children:[B("span",{className:"text-[11px] font-medium uppercase tracking-widest text-text-tertiary font-body",children:"Sidebar"},void 0,!1,void 0,this),B("button",{onClick:()=>v(!1),className:"text-text-tertiary hover:text-text-secondary w-7 h-7 flex items-center justify-center",children:"✕"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("div",{className:"flex-1 overflow-hidden",children:B(x2,{onSubmit:r2},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),B(B5,{sessionId:Z,revision:J,open:j,shareEnabled:I,existingShares:h,onClose:()=>u(!1),onShareCreated:(R)=>{A((a)=>[...a.filter((n)=>n.shareId!==R.shareId),R]),U1({kind:"success",message:"Share link created. Copy and send it to reviewers."})},onShareRevoked:(R)=>{A((a)=>a.filter((n)=>n.shareId!==R)),U1({kind:"success",message:"Share link revoked."})}},void 0,!1,void 0,this),B(L5,{open:x,onClose:()=>{s(!1),f(null)},onSubmit:async(R)=>{let a=S3(R);if(s(!1),w!==null)await _2(w,a),f(null)}},void 0,!1,void 0,this),Z1&&B("div",{className:`fixed bottom-4 left-1/2 -translate-x-1/2 z-50 px-4 py-2.5 rounded-lg shadow-lg text-[13px] font-body font-medium flex items-center gap-2 ${Z1.kind==="error"?"bg-accent-red text-white":"bg-accent-green text-white"}`,children:[Z1.message,B("button",{onClick:()=>U1(null),className:"ml-2 opacity-70 hover:opacity-100",children:"✕"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},`${Z}:${J}`,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function R6({sessionId:Z,projectRoot:$,connected:q,onMobileSidebar:Q,collapsed:J,onToggle:Y}){let X=$1.isShared;return B(D0,{children:[J&&B("button",{onClick:Y,className:"hidden lg:flex fixed top-3 left-3 z-20 w-7 h-7 items-center justify-center rounded-md text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors bg-bg-surface border border-border-subtle",title:"Show sidebar",children:B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[B("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"},void 0,!1,void 0,this),B("line",{x1:"9",y1:"3",x2:"9",y2:"21"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),B("div",{className:`hidden lg:flex w-60 flex-col fixed top-0 left-0 bottom-0 bg-bg-surface border-r border-border-subtle z-10 transition-transform duration-200 ${J?"-translate-x-full":""}`,children:[B("div",{className:"px-4 pt-4 pb-3 flex-shrink-0 border-b border-border-subtle",children:[B("div",{className:"flex items-center gap-2 mb-2",children:[B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",className:"text-text-tertiary flex-shrink-0",children:B("path",{d:"M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,void 0,this)},void 0,!1,void 0,this),X?B("span",{className:"text-[12px] font-body text-text-secondary truncate flex-1",children:"Shared canvas"},void 0,!1,void 0,this):B(D0,{children:[B(g2,{currentSessionId:Z,projectRoot:$},void 0,!1,void 0,this),B("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${q?"bg-accent-green":"bg-accent-red"}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("button",{onClick:Y,className:"ml-auto w-6 h-6 flex items-center justify-center rounded text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors",title:"Hide sidebar",children:B("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[B("polyline",{points:"11 17 6 12 11 7"},void 0,!1,void 0,this),B("polyline",{points:"18 17 13 12 18 7"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B(C5,{},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("div",{className:"flex-1 flex flex-col overflow-hidden",children:B(d3,{embedded:!0},void 0,!1,void 0,this)},void 0,!1,void 0,this),B("div",{className:"px-4 py-3 border-t border-border-subtle flex items-center justify-between flex-shrink-0",children:[B("span",{className:"text-[10px] text-text-tertiary font-body uppercase tracking-widest",children:"Theme"},void 0,!1,void 0,this),B(A5,{},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function D6({children:Z,collapsed:$,onToggle:q}){let[Q,J]=q1(()=>{let H=localStorage.getItem("canvas-sidebar-width");return H?parseInt(H,10):320}),Y=h1(!1),X=h1(0),G=h1(0),z=h1(Q);z.current=Q;let _=R0((H)=>{H.preventDefault(),Y.current=!0,X.current=H.clientX,G.current=z.current;let U=(W)=>{if(!Y.current)return;let K=X.current-W.clientX,F=Math.max(240,Math.min(600,G.current+K));J(F),z.current=F},T=()=>{Y.current=!1,localStorage.setItem("canvas-sidebar-width",String(z.current)),document.removeEventListener("mousemove",U),document.removeEventListener("mouseup",T),document.body.style.cursor="",document.body.style.userSelect=""};document.addEventListener("mousemove",U),document.addEventListener("mouseup",T),document.body.style.cursor="col-resize",document.body.style.userSelect="none"},[]);return P1(()=>{return document.documentElement.style.setProperty("--sidebar-width",`${Q}px`),()=>{document.documentElement.style.removeProperty("--sidebar-width")}},[Q]),B(D0,{children:[$&&B("button",{onClick:q,className:"hidden lg:flex fixed top-3 right-3 z-20 w-7 h-7 items-center justify-center rounded-md text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors bg-bg-surface border border-border-subtle",title:"Show annotations",children:B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:B("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),B("div",{className:`hidden lg:flex flex-col fixed top-0 right-0 bottom-0 bg-bg-surface border-l border-border-subtle z-10 transition-transform duration-200 ${$?"translate-x-full":""}`,style:{width:Q},children:[B("div",{onMouseDown:_,className:"absolute left-0 top-0 bottom-0 w-1 cursor-col-resize hover:bg-accent-blue/30 transition-colors z-20",style:{marginLeft:"-2px"}},void 0,!1,void 0,this),v1.Children.map(Z,(H)=>v1.isValidElement(H)?v1.cloneElement(H,{collapseButton:B("button",{onClick:q,className:"w-6 h-6 flex items-center justify-center rounded text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors",title:"Hide annotations",children:B("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[B("polyline",{points:"13 17 18 12 13 7"},void 0,!1,void 0,this),B("polyline",{points:"6 17 11 12 6 7"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}):H)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function S5({markdown:Z}){let[$,q]=q1(!1),Q=M5(()=>e.parse(Z,{async:!1}),[Z]),J=h1(null),{annotations:Y,addAnnotationWithId:X,removeAnnotation:G,updateAnnotation:z,addAnnotationImage:_,removeAnnotationImage:H,activeAnnotationId:U,setActiveAnnotationId:T}=Y1(),[W,K]=q1(null),[F,N]=q1(null),y=M5(()=>Y.filter((b)=>b.filePath===T1),[Y]),[O,D]=q1(Z);if(Z!==O)D(Z),q(!1);P1(()=>{if(!J.current||y.length===0)return;let b=setTimeout(()=>{if(J.current)l0(J.current,y)},50);return()=>clearTimeout(b)},[Q,y.length]);let S=h1(null);if(P1(()=>{d0(U,S.current),S.current=U},[U]),P1(()=>{let b=J.current;if(!b)return;let C=(v)=>{let V=v.target.closest("[data-annotation-id]");if(!V)return;v.stopPropagation();let E=V.getAttribute("data-annotation-id");if(E===U)N({anchorEl:V,annId:E});else T(E)},k=(v)=>{let V=v.target.closest("[data-annotation-id]");if(V)T(V.getAttribute("data-annotation-id"))},c=(v)=>{let V=v.target.closest("[data-annotation-id]"),E=v.relatedTarget?.closest?.("[data-annotation-id]");if(V&&!E)T(null)};return b.addEventListener("click",C),b.addEventListener("mouseover",k),b.addEventListener("mouseout",c),()=>{b.removeEventListener("click",C),b.removeEventListener("mouseover",k),b.removeEventListener("mouseout",c)}},[Q,U]),P1(()=>{let b=()=>{let C=window.getSelection();if(!C||C.isCollapsed||!C.toString().trim())return;if(!J.current)return;let k=C.getRangeAt(0);if(!J.current.contains(k.startContainer))return;if(k.startContainer.parentElement?.closest?.("[data-annotation-id]"))return;let c=C.toString().trim();if(c.length<2)return;let v=k.cloneRange(),V=i1(k,J.current),E=`__pending_${Date.now()}`;try{o1(v,E)}catch{}window.getSelection()?.removeAllRanges();let g=document.querySelectorAll(`[data-annotation-id="${E}"]`),l=g[g.length-1];if(!l)return;K({anchorEl:l,tempId:E,snippet:c,ctx:V})};return document.addEventListener("mouseup",b),()=>document.removeEventListener("mouseup",b)},[]),$)return null;let M=document.getElementById("plan-scroll-container");return B("div",{className:"mb-6 rounded-lg border border-accent-blue/20 bg-accent-blue/5 relative",children:[B("button",{onClick:()=>q(!0),className:"absolute top-2 right-2 w-6 h-6 flex items-center justify-center rounded text-text-tertiary hover:text-text-secondary hover:bg-bg-elevated transition-colors",children:B("span",{className:"text-xs",children:"✕"},void 0,!1,void 0,this)},void 0,!1,void 0,this),B("div",{className:"px-4 py-3 pr-10",children:[B("div",{className:"flex items-center gap-2 mb-1.5",children:[B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"text-accent-blue flex-shrink-0",children:B("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"},void 0,!1,void 0,this)},void 0,!1,void 0,this),B("span",{className:"text-[11px] font-medium uppercase tracking-widest text-accent-blue font-body",children:"Agent Response"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("div",{ref:J,className:"prose-canvas text-sm",dangerouslySetInnerHTML:{__html:Q}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),W&&B(z0,{anchorEl:W.anchorEl,scrollContainer:M,snippet:W.snippet,truncateAt:80,onAdd:(b,C)=>{let k=F1();r0(W.tempId,k),X(k,W.snippet,b,T1,W.ctx,C),K(null)},onCancel:()=>{i0(W.tempId),K(null)}},void 0,!1,void 0,this),F&&(()=>{let b=Y.find((C)=>C.id===F.annId);if(!b)return null;return B(_0,{anchorEl:F.anchorEl,scrollContainer:M,initialNote:b.note,initialImages:b.images,onUpdate:(C,k)=>{z(F.annId,C);let c=b.images||[];for(let v of k)if(!c.includes(v))_(F.annId,v);for(let v of c)if(!k.includes(v))H(F.annId,v)},onDelete:()=>{G(F.annId),T(null)},onClose:()=>N(null)},void 0,!1,void 0,this)})()]},void 0,!0,void 0,this)}function k6(){let{activeView:Z,setActiveView:$,openFiles:q,closeFile:Q,canvasFiles:J}=v1.useContext(I1),Y=v1.useContext(w5),{addAnnotationWithId:X,setActiveAnnotationId:G}=Y1();if(!(J.length>1||q.length>0))return null;return B("div",{className:"flex items-center border-b border-border-medium bg-bg-surface overflow-x-auto sticky top-0 z-10",children:[J.length>1&&B(D0,{children:[B("button",{onClick:()=>$({type:"overview"}),className:`flex items-center gap-1.5 px-4 py-2.5 text-[13px] font-body whitespace-nowrap transition-colors relative ${Z.type==="overview"?"text-text-primary":"text-text-tertiary hover:text-text-secondary"}`,children:[B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",className:"opacity-60",children:B("path",{d:"M12 7L2 12l10 5 10-5-10-5z",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},void 0,!1,void 0,this)},void 0,!1,void 0,this),"Overview",Z.type==="overview"&&B("span",{className:"absolute bottom-0 left-3 right-3 h-[2px] bg-text-primary rounded-full"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("span",{className:"w-px h-4 bg-border-medium flex-shrink-0"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),J.map((_,H)=>{let U=_.replace(/\.jsx$/,""),T=Z.type==="canvas"&&Z.filename===_;return B(v1.Fragment,{children:[B("button",{onClick:()=>$({type:"canvas",filename:_}),className:`flex items-center gap-1.5 px-4 py-2.5 text-[13px] font-body whitespace-nowrap transition-colors relative ${T?"text-text-primary":"text-text-tertiary hover:text-text-secondary"}`,children:[U,T&&B("span",{className:"absolute bottom-0 left-3 right-3 h-[2px] bg-text-primary rounded-full"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H<J.length-1&&B("span",{className:"w-px h-4 bg-border-medium flex-shrink-0"},void 0,!1,void 0,this)]},_,!0,void 0,this)}),q.length>0&&B(D0,{children:[B("span",{className:"w-px h-4 bg-border-medium flex-shrink-0"},void 0,!1,void 0,this),q.map((_,H)=>{let U=_.split("/").pop()||_,T=Z.type==="file"&&Z.path===_;return B(v1.Fragment,{children:[B("div",{className:"flex items-center",children:[B("button",{onClick:()=>$({type:"file",path:_}),className:`flex items-center gap-1.5 pl-3 pr-1 py-2.5 text-[13px] font-body whitespace-nowrap transition-colors relative ${T?"text-text-primary":"text-text-tertiary hover:text-text-secondary"}`,children:[B(x1,{name:U,type:"file"},void 0,!1,void 0,this),U,T&&B("span",{className:"absolute bottom-0 left-3 right-1 h-[2px] bg-text-primary rounded-full"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B("button",{onClick:(W)=>{W.stopPropagation(),Q(_)},className:"text-text-tertiary hover:text-text-secondary px-1.5 py-1 text-[10px] transition-colors rounded hover:bg-bg-input",children:"✕"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),H<q.length-1&&B("span",{className:"w-px h-4 bg-border-medium flex-shrink-0"},void 0,!1,void 0,this)]},_,!0,void 0,this)})]},void 0,!0,void 0,this),B("div",{className:"ml-auto flex items-center gap-1 flex-shrink-0",children:Z.type==="file"&&L1&&B("button",{onClick:async()=>{let _=Z.path;try{let U=await(await fetch(`/api/file?session=${Y}&path=${encodeURIComponent(_)}`)).json();if(!U.error){let T=U.content.split(`
88
88
  `).slice(0,3).join(`
89
89
  `)+(U.content.split(`
90
90
  `).length>3?`
91
- ...`:""),W=B1();X(W,T,"",_),G(W)}}catch{}},className:"flex items-center gap-1 px-3 py-1.5 text-[11px] font-medium font-body text-text-tertiary hover:text-text-secondary whitespace-nowrap transition-colors",children:[B("span",{className:"text-[13px] leading-none",children:"+"},void 0,!1,void 0,this),"Add to context"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var S5=document.getElementById("root");if(S5)A6(S5).render(B(I6,{},void 0,!1,void 0,this));export{b1 as RevisionContext,V1 as ActiveViewContext};
91
+ ...`:""),W=F1();X(W,T,"",_),G(W)}}catch{}},className:"flex items-center gap-1 px-3 py-1.5 text-[11px] font-medium font-body text-text-tertiary hover:text-text-secondary whitespace-nowrap transition-colors",children:[B("span",{className:"text-[13px] leading-none",children:"+"},void 0,!1,void 0,this),"Add to context"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var b5=document.getElementById("root");if(b5)A6(b5).render(B(I6,{},void 0,!1,void 0,this));export{w1 as RevisionContext,I1 as ActiveViewContext};