agent-canvas 0.1.33 → 0.1.34
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.
- package/daemon/client/components/Callout.tsx +2 -1
- package/daemon/client/components/Choice.tsx +45 -29
- package/daemon/client/components/Note.tsx +2 -1
- package/daemon/client/components/Section.tsx +2 -1
- package/daemon/client/components/Task.tsx +2 -1
- package/daemon/client/components/renderMarkdownChildren.tsx +52 -0
- package/daemon/client/exportMarkdown.ts +6 -0
- package/daemon/dist/client.js +6 -6
- package/daemon/dist/components.js +56 -56
- package/package.json +1 -1
- package/workers/canvas-share/public/assets/client.js +6 -6
- package/workers/canvas-share/public/assets/components.js +56 -56
package/daemon/dist/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import u1,{useEffect as M1,useLayoutEffect as
|
|
1
|
+
import u1,{useEffect as M1,useLayoutEffect as z4,useState as Y1,useCallback as A0,useRef as g1,createContext as T3,useMemo as G3}from"react";import{createRoot as _4}from"react-dom/client";function z2(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var c1=z2();function a2(Y){c1=Y}var h1={exec:()=>null};function s(Y,$=""){let Z=typeof Y=="string"?Y:Y.source,J={replace:(q,Q)=>{let X=typeof Q=="string"?Q:Q.source;return X=X.replace(U1.caret,"$1"),Z=Z.replace(q,X),J},getRegex:()=>new RegExp(Z,$)};return J}var M3=(()=>{try{return!!new RegExp("(?<=1)(?<!1)")}catch{return!1}})(),U1={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:(Y)=>new RegExp(`^( {0,3}${Y})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:(Y)=>new RegExp(`^ {0,${Math.min(3,Y-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:(Y)=>new RegExp(`^ {0,${Math.min(3,Y-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:(Y)=>new RegExp(`^ {0,${Math.min(3,Y-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:(Y)=>new RegExp(`^ {0,${Math.min(3,Y-1)}}#`),htmlBeginRegex:(Y)=>new RegExp(`^ {0,${Math.min(3,Y-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:(Y)=>new RegExp(`^ {0,${Math.min(3,Y-1)}}>`)},y3=/^(?:[ \t]*(?:\n|$))+/,P3=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,S3=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,N0=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,b3=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,_2=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,o2=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,s2=s(o2).replace(/bull/g,_2).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(),w3=s(o2).replace(/bull/g,_2).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(),G2=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,j3=/^[^\n]+/,K2=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,A3=s(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",K2).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),C3=s(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,_2).getRegex(),k0="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",U2=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,I3=s("^ {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",U2).replace("tag",k0).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),t2=s(G2).replace("hr",N0).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",k0).getRegex(),V3=s(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",t2).getRegex(),H2={blockquote:V3,code:P3,def:A3,fences:S3,heading:b3,hr:N0,html:I3,lheading:s2,list:C3,newline:y3,paragraph:t2,table:h1,text:j3},p2=s("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",N0).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",k0).getRegex(),R3={...H2,lheading:w3,table:p2,paragraph:s(G2).replace("hr",N0).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",p2).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",k0).getRegex()},D3={...H2,html:s(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",U2).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:h1,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:s(G2).replace("hr",N0).replace("heading",` *#{1,6} *[^
|
|
2
2
|
]`).replace("lheading",s2).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},k3=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,E3=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,n2=/^( {2,}|\\)\n(?!\s*$)/,x3=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,Z0=/[\p{P}\p{S}]/u,E0=/[\s\p{P}\p{S}]/u,W2=/[^\s\p{P}\p{S}]/u,m3=s(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,E0).getRegex(),e2=/(?!~)[\p{P}\p{S}]/u,u3=/(?!~)[\s\p{P}\p{S}]/u,g3=/(?:[^\s\p{P}\p{S}]|~)/u,v3=s(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",M3?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),$5=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,f3=s($5,"u").replace(/punct/g,Z0).getRegex(),h3=s($5,"u").replace(/punct/g,e2).getRegex(),Y5="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",p3=s(Y5,"gu").replace(/notPunctSpace/g,W2).replace(/punctSpace/g,E0).replace(/punct/g,Z0).getRegex(),c3=s(Y5,"gu").replace(/notPunctSpace/g,g3).replace(/punctSpace/g,u3).replace(/punct/g,e2).getRegex(),d3=s("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,W2).replace(/punctSpace/g,E0).replace(/punct/g,Z0).getRegex(),r3=s(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,Z0).getRegex(),l3="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",i3=s(l3,"gu").replace(/notPunctSpace/g,W2).replace(/punctSpace/g,E0).replace(/punct/g,Z0).getRegex(),a3=s(/\\(punct)/,"gu").replace(/punct/g,Z0).getRegex(),o3=s(/^<(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(),s3=s(U2).replace("(?:-->|$)","-->").getRegex(),t3=s("^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",s3).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),V0=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,n3=s(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",V0).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Z5=s(/^!?\[(label)\]\[(ref)\]/).replace("label",V0).replace("ref",K2).getRegex(),q5=s(/^!?\[(ref)\](?:\[\])?/).replace("ref",K2).getRegex(),e3=s("reflink|nolink(?!\\()","g").replace("reflink",Z5).replace("nolink",q5).getRegex(),c2=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,T2={_backpedal:h1,anyPunctuation:a3,autolink:o3,blockSkip:v3,br:n2,code:E3,del:h1,delLDelim:h1,delRDelim:h1,emStrongLDelim:f3,emStrongRDelimAst:p3,emStrongRDelimUnd:d3,escape:k3,link:n3,nolink:q5,punctuation:m3,reflink:Z5,reflinkSearch:e3,tag:t3,text:x3,url:h1},$7={...T2,link:s(/^!?\[(label)\]\((.*?)\)/).replace("label",V0).getRegex(),reflink:s(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",V0).getRegex()},X2={...T2,emStrongRDelimAst:c3,emStrongLDelim:h3,delLDelim:r3,delRDelim:i3,url:s(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",c2).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:s(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",c2).getRegex()},Y7={...X2,br:s(n2).replace("{2,}","*").getRegex(),text:s(X2.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},I0={normal:H2,gfm:R3,pedantic:D3},H0={normal:T2,gfm:X2,breaks:Y7,pedantic:$7},Z7={"&":"&","<":"<",">":">",'"':""","'":"'"},d2=(Y)=>Z7[Y];function P1(Y,$){if($){if(U1.escapeTest.test(Y))return Y.replace(U1.escapeReplace,d2)}else if(U1.escapeTestNoEncode.test(Y))return Y.replace(U1.escapeReplaceNoEncode,d2);return Y}function r2(Y){try{Y=encodeURI(Y).replace(U1.percentDecode,"%")}catch{return null}return Y}function l2(Y,$){let Z=Y.replace(U1.findPipe,(Q,X,G)=>{let z=!1,_=X;for(;--_>=0&&G[_]==="\\";)z=!z;return z?"|":" |"}),J=Z.split(U1.splitPipe),q=0;if(J[0].trim()||J.shift(),J.length>0&&!J.at(-1)?.trim()&&J.pop(),$)if(J.length>$)J.splice($);else for(;J.length<$;)J.push("");for(;q<J.length;q++)J[q]=J[q].trim().replace(U1.slashPipe,"|");return J}function W0(Y,$,Z){let J=Y.length;if(J===0)return"";let q=0;for(;q<J;){let Q=Y.charAt(J-q-1);if(Q===$&&!Z)q++;else if(Q!==$&&Z)q++;else break}return Y.slice(0,J-q)}function q7(Y,$){if(Y.indexOf($[1])===-1)return-1;let Z=0;for(let J=0;J<Y.length;J++)if(Y[J]==="\\")J++;else if(Y[J]===$[0])Z++;else if(Y[J]===$[1]&&(Z--,Z<0))return J;return Z>0?-2:-1}function J7(Y,$=0){let Z=$,J="";for(let q of Y)if(q==="\t"){let Q=4-Z%4;J+=" ".repeat(Q),Z+=Q}else J+=q,Z++;return J}function i2(Y,$,Z,J,q){let Q=$.href,X=$.title||null,G=Y[1].replace(q.other.outputLinkReplace,"$1");J.state.inLink=!0;let z={type:Y[0].charAt(0)==="!"?"image":"link",raw:Z,href:Q,title:X,text:G,tokens:J.inlineTokens(G)};return J.state.inLink=!1,z}function Q7(Y,$,Z){let J=Y.match(Z.other.indentCodeCompensation);if(J===null)return $;let q=J[1];return $.split(`
|
|
3
3
|
`).map((Q)=>{let X=Q.match(Z.other.beginningSpace);if(X===null)return Q;let[G]=X;return G.length>=q.length?Q.slice(q.length):Q}).join(`
|
|
4
4
|
`)}var R0=class{options;rules;lexer;constructor(Y){this.options=Y||c1}space(Y){let $=this.rules.block.newline.exec(Y);if($&&$[0].length>0)return{type:"space",raw:$[0]}}code(Y){let $=this.rules.block.code.exec(Y);if($){let Z=$[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:$[0],codeBlockStyle:"indented",text:this.options.pedantic?Z:W0(Z,`
|
|
@@ -56,7 +56,7 @@ ${this.parser.parse(Y)}</blockquote>
|
|
|
56
56
|
${Y}</tr>
|
|
57
57
|
`}tablecell(Y){let $=this.parser.parseInline(Y.tokens),Z=Y.header?"th":"td";return(Y.align?`<${Z} align="${Y.align}">`:`<${Z}>`)+$+`</${Z}>
|
|
58
58
|
`}strong({tokens:Y}){return`<strong>${this.parser.parseInline(Y)}</strong>`}em({tokens:Y}){return`<em>${this.parser.parseInline(Y)}</em>`}codespan({text:Y}){return`<code>${P1(Y,!0)}</code>`}br(Y){return"<br>"}del({tokens:Y}){return`<del>${this.parser.parseInline(Y)}</del>`}link({href:Y,title:$,tokens:Z}){let J=this.parser.parseInline(Z),q=r2(Y);if(q===null)return J;Y=q;let Q='<a href="'+Y+'"';return $&&(Q+=' title="'+P1($)+'"'),Q+=">"+J+"</a>",Q}image({href:Y,title:$,text:Z,tokens:J}){J&&(Z=this.parser.parseInline(J,this.parser.textRenderer));let q=r2(Y);if(q===null)return P1(Z);Y=q;let Q=`<img src="${Y}" alt="${P1(Z)}"`;return $&&(Q+=` title="${P1($)}"`),Q+=">",Q}text(Y){return"tokens"in Y&&Y.tokens?this.parser.parseInline(Y.tokens):("escaped"in Y)&&Y.escaped?Y.text:P1(Y.text)}},N2=class{strong({text:Y}){return Y}em({text:Y}){return Y}codespan({text:Y}){return Y}del({text:Y}){return Y}html({text:Y}){return Y}text({text:Y}){return Y}link({text:Y}){return""+Y}image({text:Y}){return""+Y}br(){return""}checkbox({raw:Y}){return Y}},O1=class Y{options;renderer;textRenderer;constructor($){this.options=$||c1,this.options.renderer=this.options.renderer||new D0,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new N2}static parse($,Z){return new Y(Z).parse($)}static parseInline($,Z){return new Y(Z).parseInline($)}parse($){this.renderer.parser=this;let Z="";for(let J=0;J<$.length;J++){let q=$[J];if(this.options.extensions?.renderers?.[q.type]){let X=q,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)){Z+=G||"";continue}}let Q=q;switch(Q.type){case"space":{Z+=this.renderer.space(Q);break}case"hr":{Z+=this.renderer.hr(Q);break}case"heading":{Z+=this.renderer.heading(Q);break}case"code":{Z+=this.renderer.code(Q);break}case"table":{Z+=this.renderer.table(Q);break}case"blockquote":{Z+=this.renderer.blockquote(Q);break}case"list":{Z+=this.renderer.list(Q);break}case"checkbox":{Z+=this.renderer.checkbox(Q);break}case"html":{Z+=this.renderer.html(Q);break}case"def":{Z+=this.renderer.def(Q);break}case"paragraph":{Z+=this.renderer.paragraph(Q);break}case"text":{Z+=this.renderer.text(Q);break}default:{let X='Token with "'+Q.type+'" type was not found.';if(this.options.silent)return console.error(X),"";throw Error(X)}}}return Z}parseInline($,Z=this.renderer){this.renderer.parser=this;let J="";for(let q=0;q<$.length;q++){let Q=$[q];if(this.options.extensions?.renderers?.[Q.type]){let G=this.options.extensions.renderers[Q.type].call({parser:this},Q);if(G!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(Q.type)){J+=G||"";continue}}let X=Q;switch(X.type){case"escape":{J+=Z.text(X);break}case"html":{J+=Z.html(X);break}case"link":{J+=Z.link(X);break}case"image":{J+=Z.image(X);break}case"checkbox":{J+=Z.checkbox(X);break}case"strong":{J+=Z.strong(X);break}case"em":{J+=Z.em(X);break}case"codespan":{J+=Z.codespan(X);break}case"br":{J+=Z.br(X);break}case"del":{J+=Z.del(X);break}case"text":{J+=Z.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 J}},T0=class{options;block;constructor(Y){this.options=Y||c1}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(Y){return Y}postprocess(Y){return Y}processAllTokens(Y){return Y}emStrongMask(Y){return Y}provideLexer(Y=this.block){return Y?N1.lex:N1.lexInline}provideParser(Y=this.block){return Y?O1.parse:O1.parseInline}},X7=class{defaults=z2();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=O1;Renderer=D0;TextRenderer=N2;Lexer=N1;Tokenizer=R0;Hooks=T0;constructor(...Y){this.use(...Y)}walkTokens(Y,$){let Z=[];for(let J of Y)switch(Z=Z.concat($.call(this,J)),J.type){case"table":{let q=J;for(let Q of q.header)Z=Z.concat(this.walkTokens(Q.tokens,$));for(let Q of q.rows)for(let X of Q)Z=Z.concat(this.walkTokens(X.tokens,$));break}case"list":{let q=J;Z=Z.concat(this.walkTokens(q.items,$));break}default:{let q=J;this.defaults.extensions?.childTokens?.[q.type]?this.defaults.extensions.childTokens[q.type].forEach((Q)=>{let X=q[Q].flat(1/0);Z=Z.concat(this.walkTokens(X,$))}):q.tokens&&(Z=Z.concat(this.walkTokens(q.tokens,$)))}}return Z}use(...Y){let $=this.defaults.extensions||{renderers:{},childTokens:{}};return Y.forEach((Z)=>{let J={...Z};if(J.async=this.defaults.async||J.async||!1,Z.extensions&&(Z.extensions.forEach((q)=>{if(!q.name)throw Error("extension name required");if("renderer"in q){let Q=$.renderers[q.name];Q?$.renderers[q.name]=function(...X){let G=q.renderer.apply(this,X);return G===!1&&(G=Q.apply(this,X)),G}:$.renderers[q.name]=q.renderer}if("tokenizer"in q){if(!q.level||q.level!=="block"&&q.level!=="inline")throw Error("extension level must be 'block' or 'inline'");let Q=$[q.level];Q?Q.unshift(q.tokenizer):$[q.level]=[q.tokenizer],q.start&&(q.level==="block"?$.startBlock?$.startBlock.push(q.start):$.startBlock=[q.start]:q.level==="inline"&&($.startInline?$.startInline.push(q.start):$.startInline=[q.start]))}"childTokens"in q&&q.childTokens&&($.childTokens[q.name]=q.childTokens)}),J.extensions=$),Z.renderer){let q=this.defaults.renderer||new D0(this.defaults);for(let Q in Z.renderer){if(!(Q in q))throw Error(`renderer '${Q}' does not exist`);if(["options","parser"].includes(Q))continue;let X=Q,G=Z.renderer[X],z=q[X];q[X]=(..._)=>{let H=G.apply(q,_);return H===!1&&(H=z.apply(q,_)),H||""}}J.renderer=q}if(Z.tokenizer){let q=this.defaults.tokenizer||new R0(this.defaults);for(let Q in Z.tokenizer){if(!(Q in q))throw Error(`tokenizer '${Q}' does not exist`);if(["options","rules","lexer"].includes(Q))continue;let X=Q,G=Z.tokenizer[X],z=q[X];q[X]=(..._)=>{let H=G.apply(q,_);return H===!1&&(H=z.apply(q,_)),H}}J.tokenizer=q}if(Z.hooks){let q=this.defaults.hooks||new T0;for(let Q in Z.hooks){if(!(Q in q))throw Error(`hook '${Q}' does not exist`);if(["options","block"].includes(Q))continue;let X=Q,G=Z.hooks[X],z=q[X];T0.passThroughHooks.has(Q)?q[X]=(_)=>{if(this.defaults.async&&T0.passThroughHooksRespectAsync.has(Q))return(async()=>{let K=await G.call(q,_);return z.call(q,K)})();let H=G.call(q,_);return z.call(q,H)}:q[X]=(..._)=>{if(this.defaults.async)return(async()=>{let K=await G.apply(q,_);return K===!1&&(K=await z.apply(q,_)),K})();let H=G.apply(q,_);return H===!1&&(H=z.apply(q,_)),H}}J.hooks=q}if(Z.walkTokens){let q=this.defaults.walkTokens,Q=Z.walkTokens;J.walkTokens=function(X){let G=[];return G.push(Q.call(this,X)),q&&(G=G.concat(q.call(this,X))),G}}this.defaults={...this.defaults,...J}}),this}setOptions(Y){return this.defaults={...this.defaults,...Y},this}lexer(Y,$){return N1.lex(Y,$??this.defaults)}parser(Y,$){return O1.parse(Y,$??this.defaults)}parseMarkdown(Y){return($,Z)=>{let J={...Z},q={...this.defaults,...J},Q=this.onError(!!q.silent,!!q.async);if(this.defaults.async===!0&&J.async===!1)return Q(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 Q(Error("marked(): input parameter is undefined or null"));if(typeof $!="string")return Q(Error("marked(): input parameter is of type "+Object.prototype.toString.call($)+", string expected"));if(q.hooks&&(q.hooks.options=q,q.hooks.block=Y),q.async)return(async()=>{let X=q.hooks?await q.hooks.preprocess($):$,G=await(q.hooks?await q.hooks.provideLexer(Y):Y?N1.lex:N1.lexInline)(X,q),z=q.hooks?await q.hooks.processAllTokens(G):G;q.walkTokens&&await Promise.all(this.walkTokens(z,q.walkTokens));let _=await(q.hooks?await q.hooks.provideParser(Y):Y?O1.parse:O1.parseInline)(z,q);return q.hooks?await q.hooks.postprocess(_):_})().catch(Q);try{q.hooks&&($=q.hooks.preprocess($));let X=(q.hooks?q.hooks.provideLexer(Y):Y?N1.lex:N1.lexInline)($,q);q.hooks&&(X=q.hooks.processAllTokens(X)),q.walkTokens&&this.walkTokens(X,q.walkTokens);let G=(q.hooks?q.hooks.provideParser(Y):Y?O1.parse:O1.parseInline)(X,q);return q.hooks&&(G=q.hooks.postprocess(G)),G}catch(X){return Q(X)}}}onError(Y,$){return(Z)=>{if(Z.message+=`
|
|
59
|
-
Please report this to https://github.com/markedjs/marked.`,Y){let J="<p>An error occurred:</p><pre>"+P1(Z.message+"",!0)+"</pre>";return $?Promise.resolve(J):J}if($)return Promise.reject(Z);throw Z}}},p1=new X7;function t(Y,$){return p1.parse(Y,$)}t.options=t.setOptions=function(Y){return p1.setOptions(Y),t.defaults=p1.defaults,a2(t.defaults),t};t.getDefaults=z2;t.defaults=c1;t.use=function(...Y){return p1.use(...Y),t.defaults=p1.defaults,a2(t.defaults),t};t.walkTokens=function(Y,$){return p1.walkTokens(Y,$)};t.parseInline=p1.parseInline;t.Parser=O1;t.parser=O1.parse;t.Renderer=D0;t.TextRenderer=N2;t.Lexer=N1;t.lexer=N1.lex;t.Tokenizer=R0;t.Hooks=T0;t.parse=t;var{options:T4,setOptions:N4,use:O4,walkTokens:F4,parseInline:B4}=t;var L4=O1.parse,M4=N1.lex;import{SessionContext as N3,ActiveViewCtx as _4}from"#canvas/runtime";import{useState as F0,useCallback as S1,useEffect as z7,useRef as _7,useMemo as G7}from"react";import{AnnotationCtx as K7}from"#canvas/runtime";var T1="__agent-response__";function F1(){return`ann-${Date.now()}-${Math.random().toString(36).slice(2,6)}`}function O0(Y,$){Y.style.height="auto",Y.style.height=($?Math.max($,Y.scrollHeight):Y.scrollHeight)+"px"}import{useAnnotations as Q1}from"#canvas/runtime";import{jsxDEV as T7}from"react/jsx-dev-runtime";function O2(Y,$){return`canvas:${Y}:rev:${$}`}function x0(Y,$){try{let Z=localStorage.getItem(O2(Y,$));if(!Z)return null;return JSON.parse(Z)}catch{return null}}function U7(Y,$,Z){try{localStorage.setItem(O2(Y,$),JSON.stringify(Z))}catch{}}function H7(Y,$){try{localStorage.removeItem(O2(Y,$))}catch{}}function J5({sessionId:Y,revision:$,isReadOnly:Z,remoteAnnotations:J,children:q}){let[Q,X]=F0(()=>{return(x0(Y,$)?.annotations??[]).map((E)=>({...E,source:E.source??"local"}))}),G=G7(()=>{if(!J||J.length===0)return Q;let V=new Set(Q.map((g)=>g.id)),E=J.filter((g)=>!V.has(g.id));return[...Q,...E.map((g)=>({...g,source:"remote"}))]},[Q,J]),[z,_]=F0(()=>{return x0(Y,$)?.generalNote??""}),[H,K]=F0(null),[W,T]=F0(()=>{let V=x0(Y,$);return V?.responses?new Map(V.responses):new Map}),[U,B]=F0(()=>{let V=x0(Y,$);return V?.feedbackEntries?new Map(V.feedbackEntries):new Map}),N=_7(null);z7(()=>{if(Z)return;if(N.current)clearTimeout(N.current);return N.current=setTimeout(()=>{U7(Y,$,{annotations:Q,generalNote:z,responses:Array.from(W.entries()),feedbackEntries:Array.from(U.entries())})},300),()=>{if(N.current)clearTimeout(N.current)}},[Q,z,W,U,Y,$,Z]);let M=S1((V,E,g,l,w,u,h)=>{X((A)=>[...A,{id:V,snippet:E,note:g,createdAt:new Date().toISOString(),filePath:l,context:w,...u?.length?{images:u}:{},...h?{canvasFile:h}:{}}])},[]),O=S1((V,E,g)=>{M(F1(),V,E,g)},[M]),C=S1((V,E)=>{X((g)=>g.map((l)=>l.id===V?{...l,note:E}:l))},[]),S=S1((V)=>{W7(V),X((E)=>E.filter((g)=>g.id!==V)),K((E)=>E===V?null:E)},[]),y=S1((V,E)=>{X((g)=>g.map((l)=>l.id===V?{...l,images:[...l.images||[],E]}:l))},[]),b=S1((V,E)=>{X((g)=>g.map((l)=>l.id===V?{...l,images:(l.images||[]).filter((w)=>w!==E)}:l))},[]),I=S1((V,E)=>{T((g)=>{let l=new Map(g);return l.set(V,E),l})},[]),k=S1((V,E)=>{B((g)=>{let l=g.get(V);if(l&&l.markdown===E.markdown&&l.label===E.label&&l.required===E.required)return g;let w=new Map(g);return w.set(V,E),w})},[]),c=S1((V)=>{B((E)=>{if(!E.has(V))return E;let g=new Map(E);return g.delete(V),g})},[]),f=S1(()=>{for(let V of document.querySelectorAll("[data-annotation-id]"))Q5(V);X([]),_(""),K(null),T(new Map),B(new Map),H7(Y,$)},[Y,$]);return T7(K7.Provider,{value:{annotations:G,addAnnotation:O,addAnnotationWithId:M,updateAnnotation:C,removeAnnotation:S,addAnnotationImage:y,removeAnnotationImage:b,generalNote:z,setGeneralNote:_,clearAll:f,activeAnnotationId:H,setActiveAnnotationId:K,responses:W,setResponse:I,feedbackEntries:U,setFeedbackEntry:k,removeFeedbackEntry:c},children:q},void 0,!1,void 0,this)}function W7(Y){let $=document.querySelectorAll(`[data-annotation-id="${Y}"]`);for(let Z of $)Q5(Z)}function Q5(Y){let $=Y.parentNode;if(!$)return;let Z=document.createTextNode(Y.textContent||"");$.replaceChild(Z,Y),$.normalize()}import S2,{useEffect as s1,useState as b1,useRef as C7,useContext as I7,useMemo as B0}from"react";import{createPortal as V7}from"react-dom";import{SessionContext as R7,CanvasFileCtx as D7}from"#canvas/runtime";function d1(Y,$){let Z=X5(Y,"before",60),J=X5(Y,"after",60),q=O7(Y.startContainer,$);return{before:Z,after:J,hierarchy:q}}function X5(Y,$,Z){let J=N7($==="before"?Y.startContainer:Y.endContainer);if(!J)return"";let q="";if($==="before"){let Q=document.createTreeWalker(J,NodeFilter.SHOW_TEXT),X;while(X=Q.nextNode()){if(X===Y.startContainer){q+=(X.textContent||"").slice(0,Y.startOffset);break}if(X.parentElement?.hasAttribute("data-annotation-id"))continue;q+=X.textContent||""}if(q.length>Z){q=q.slice(-Z);let G=q.indexOf(" ");if(G>0)q=q.slice(G+1)}}else{let Q=document.createTreeWalker(J,NodeFilter.SHOW_TEXT),X=!1,G;while(G=Q.nextNode()){if(G===Y.endContainer){q+=(G.textContent||"").slice(Y.endOffset),X=!0;continue}if(X){if(G.parentElement?.hasAttribute("data-annotation-id"))continue;q+=G.textContent||""}}if(q.length>Z){q=q.slice(0,Z);let z=q.lastIndexOf(" ");if(z>0)q=q.slice(0,z)}}return q.trim()}function N7(Y){let $=new Set(["DIV","P","LI","PRE","BLOCKQUOTE","SECTION","ARTICLE"]),Z=Y.parentElement;while(Z){if($.has(Z.tagName))return Z;Z=Z.parentElement}return null}function O7(Y,$){let Z=[],J=Y instanceof Element?Y:Y.parentElement;while(J&&J!==$){let q=J.getAttribute?.("data-task-id");if(q){let Q=J.querySelector(".font-semibold");if(Q)Z.unshift(Q.textContent?.trim()||q)}if(J.tagName==="DIV"&&J.querySelector(":scope > button .font-heading, :scope > div .font-heading")){let Q=J.querySelector(".font-heading");if(Q)Z.unshift(Q.textContent?.trim()||"")}J=J.parentElement}return Z}function F2(Y){let $=Y.snippet.trim(),Z=Y.context,J=$.length<30;if(Z&&J&&(Z.before||Z.after)){let q=[];if(Z.before)q.push(`...${Z.before} `);if(q.push(`**${$}**`),Z.after)q.push(` ${Z.after}...`);return q.join("")}return $}import{useEffect as M7,useRef as g0,useState as q0,useCallback as u0,useMemo as F5,useContext as y7}from"react";import{createPortal as P7}from"react-dom";function z5(Y,$){let q=$||document.body,Q=Y.getBoundingClientRect(),X=q.getBoundingClientRect(),G=q===document.body?window.scrollY:q.scrollTop,z=Q.bottom-X.top+G+8,_=Math.max(0,Math.min(Q.left-X.left,X.width-280-12));return q.style.position="relative",{style:{position:"absolute",top:`${z}px`,left:`${_}px`},parent:q}}import{useState as L2,useRef as M2,useCallback as C1,useEffect as B7}from"react";function F7(){if(typeof window<"u"&&window.__CANVAS_SHARE__?.shareId)return{isShared:!0,shareId:window.__CANVAS_SHARE__.shareId};return{isShared:!1,sessionId:typeof window<"u"?window.location.pathname.replace("/s/",""):""}}var Z1=F7();function _5(){if(Z1.isShared)return`/s/${Z1.shareId}/meta`;return`/api/session/${Z1.sessionId}/meta`}function G5(Y,$){let Z=Y.replace(/\.jsx$/,".js");if(Z1.isShared)return`/s/${Z1.shareId}/canvas/${encodeURIComponent(Z)}`;let J=$?`?rev=${$}&t=${Date.now()}`:`?t=${Date.now()}`;return`/api/session/${Z1.sessionId}/canvas/${encodeURIComponent(Z)}${J}`}function K5(){if(Z1.isShared)return`/s/${Z1.shareId}/upload`;return`/api/session/${Z1.sessionId}/upload`}var U5="canvas-reviewer-identity";function B2(){try{let Y=localStorage.getItem(U5);if(!Y)return null;return JSON.parse(Y)}catch{return null}}function H5(Y){let $=B2();if(!$)$={id:crypto.randomUUID?.()||String(Date.now()),name:Y};else $.name=Y;return localStorage.setItem(U5,JSON.stringify($)),$}async function W5(Y){if(!Z1.isShared)throw Error("submitSharedFeedback called outside shared mode");let $=await fetch(`/s/${Z1.shareId}/feedback`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Y)});if(!$.ok){let Z=await $.text().catch(()=>"");throw Error(`Feedback submission failed: ${$.status} ${Z}`)}}var B1=!Z1.isShared,T5=!Z1.isShared;import{jsxDEV as X1}from"react/jsx-dev-runtime";function N5(Y){if(Y.startsWith("/s/")||Y.startsWith("http://")||Y.startsWith("https://"))return Y;return`/api/uploads/${Y.split("/").pop()}`}async function L7(Y,$){let Z=new FormData;Z.append("image",$);try{let q=await(await fetch(K5(),{method:"POST",body:Z})).json();if(Z1.isShared)return q.url||null;return q.path||null}catch{return null}}function m0({note:Y,onNoteChange:$,images:Z,onAddImage:J,onRemoveImage:q,sessionId:Q,placeholder:X="Add your note...",autoFocus:G=!1,autoResize:z=!1,readOnly:_=!1,onKeyDown:H,onTextareaClick:K,textareaRef:W,textareaClassName:T,textareaStyle:U,minHeight:B,attachButton:N="always",openFilePickerRef:M}){let[O,C]=L2(!1),[S,y]=L2(!1),[b,I]=L2(!1),k=M2(0),c=M2(null),f=M2(null),V=C1(()=>f.current?.click(),[]);if(M)M.current=V;let E=C1((m)=>{if(c.current=m,W)W.current=m;if(m&&z)O0(m,B)},[W,z,B]);B7(()=>{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;y(!0);try{let a=await L7(Q,m);if(a)J(a)}finally{y(!1)}},[Q,J]),l=C1((m)=>{let a=m.clipboardData.items;for(let j of a)if(j.type.startsWith("image/")){m.preventDefault();let v=j.getAsFile();if(v)g(v);return}},[g]),w=C1((m)=>{if(m.preventDefault(),k.current++,k.current===1)C(!0)},[]),u=C1((m)=>{m.preventDefault()},[]),h=C1((m)=>{if(m.preventDefault(),k.current--,k.current===0)C(!1)},[]),A=C1((m)=>{m.preventDefault(),k.current=0,C(!1);for(let a of m.dataTransfer.files)if(a.type.startsWith("image/"))g(a)},[g]),D=C1((m)=>{if($(m.target.value),z)m.target.style.height="auto",m.target.style.height=(B?Math.max(B,m.target.scrollHeight):m.target.scrollHeight)+"px"},[$,z,B]),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"&&b);return X1("div",{style:{position:"relative"},onDragEnter:_?void 0:w,onDragOver:_?void 0:u,onDragLeave:_?void 0:h,onDrop:_?void 0:A,children:[X1("textarea",{ref:E,value:Y,onChange:_?void 0:D,onPaste:_?void 0:l,onKeyDown:H,onClick:K,onFocus:()=>I(!0),onBlur:()=>{setTimeout(()=>I(!1),150)},readOnly:_,placeholder:X,className:T??L,style:U??d,rows:z?1:void 0},void 0,!1,void 0,this),!_&&X1("input",{ref:f,type:"file",accept:"image/*",multiple:!0,style:{display:"none"},onChange:(m)=>{let a=m.target.files;if(a)for(let j of a)g(j);m.target.value=""}},void 0,!1,void 0,this),(Z.length>0||x)&&X1("div",{style:{display:"flex",gap:"6px",flexWrap:"wrap",marginTop:"6px",alignItems:"center"},children:[Z.map((m)=>X1("div",{style:{position:"relative",width:"56px",height:"56px",borderRadius:"6px",overflow:"hidden",border:"1px solid var(--color-border-subtle)",flexShrink:0},children:[X1("img",{src:N5(m),alt:"",style:{width:"100%",height:"100%",objectFit:"cover",display:"block"}},void 0,!1,void 0,this),!_&&X1("button",{onClick:(a)=>{a.stopPropagation(),q(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&&X1(y2,{onClick:V},void 0,!1,void 0,this)]},void 0,!0,void 0,this),S&&X1("div",{style:{fontSize:"11px",color:"var(--color-text-tertiary)",fontFamily:"'Inter', sans-serif",marginTop:"4px"},children:"Uploading..."},void 0,!1,void 0,this),O&&X1("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 y2({onClick:Y,size:$=16}){return X1("button",{onClick:(Z)=>{Z.stopPropagation(),Y()},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:(Z)=>{Z.currentTarget.style.color="var(--color-text-secondary)"},onMouseLeave:(Z)=>{Z.currentTarget.style.color="var(--color-text-tertiary)"},children:X1("svg",{width:$,height:$,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[X1("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"},void 0,!1,void 0,this),X1("circle",{cx:"8.5",cy:"8.5",r:"1.5"},void 0,!1,void 0,this),X1("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 O5({images:Y}){if(!Y.length)return null;return X1("div",{style:{display:"flex",gap:"6px",flexWrap:"wrap",marginTop:"6px"},children:Y.map(($)=>X1("div",{style:{width:"56px",height:"56px",borderRadius:"6px",overflow:"hidden",border:"1px solid var(--color-border-subtle)",flexShrink:0},children:X1("img",{src:N5($),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 S7}from"#canvas/runtime";import{jsxDEV as z1,Fragment as w7}from"react/jsx-dev-runtime";function b7({anchorEl:Y,scrollContainer:$,onClose:Z,ignoreSelector:J,zIndex:q="50",padding:Q="12px",width:X="280px",children:G}){let z=g0(null),_=g0(Z);_.current=Z;let{style:H,parent:K}=z5(Y,$);return M7(()=>{let W=setTimeout(()=>{let T=(U)=>{if(z.current&&!z.current.contains(U.target)){if(J&&U.target.closest?.(J))return;_.current(),document.removeEventListener("mousedown",T)}};return document.addEventListener("mousedown",T),()=>document.removeEventListener("mousedown",T)},0);return()=>clearTimeout(W)},[J]),P7(z1("div",{ref:z,style:{...H,zIndex:q,width:X,background:"var(--color-bg-elevated)",border:"1px solid var(--color-border-hover)",borderRadius:"8px",boxShadow:"0 4px 12px var(--color-shadow)",padding:Q,fontFamily:"'Inter', sans-serif"},children:G},void 0,!1,void 0,this),K)}var L5=[{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"]}],B5=L5.flatMap((Y)=>Y.items);function M5({anchorEl:Y,scrollContainer:$,snippet:Z,truncateAt:J=100,header:q,initialNote:Q="",initialImages:X,onConfirm:G,onCancel:z,onDelete:_}){let H=y7(S7),K=Q!==""||!!_,[W,T]=q0(Q),[U,B]=q0(X||[]),[N,M]=q0(null),[O,C]=q0(K),[S,y]=q0(!1),b=g0(null),I=g0(null),k=u0(()=>{if(W.trim()||U.length>0)G(W.trim(),U);else if(K&&_)_();else z()},[W,U,G,z,K,_]),c=u0(()=>{if(K){if(!W.trim()&&U.length===0&&_){_(),z();return}G(W,U);return}z()},[W,U,K,G,z,_]),f=!K,V=W.trim().length>0?B5.filter((j)=>j.toLowerCase().startsWith(W.trim().toLowerCase())):B5,E=!f||O?[]:V.length===1&&V[0].toLowerCase()===W.trim().toLowerCase()?[]:V,g=new Set(E),l=L5.map((j)=>({label:j.label,items:j.items.filter((v)=>g.has(v))})).filter((j)=>j.items.length>0),w=l.map((j)=>j.items),u=w.flat(),h=F5(()=>{if(N===null)return 0;let j=0;for(let v=0;v<w.length;v++){if(N<j+w[v].length)return v;j+=w[v].length}return 0},[N,w]),A=F5(()=>{if(N===null)return 0;let j=0;for(let v=0;v<h;v++)j+=w[v].length;return N-j},[N,h,w]),D=(j,v)=>{let $1=0;for(let K1=0;K1<j;K1++)$1+=w[K1].length;return $1+v},[L,d]=q0(W);if(W!==L)d(W),M(null),C(K);let x=u0((j)=>{T(j)},[]),m=Z.length>J?Z.slice(0,J)+"...":Z,a=u0((j)=>{if(u.length>0&&(j.key==="ArrowDown"||j.key==="ArrowUp"||j.key==="ArrowLeft"||j.key==="ArrowRight")){if(j.preventDefault(),N===null){M(0);return}if(j.key==="ArrowDown"){let v=Math.min(A+1,w[h].length-1);M(D(h,v))}else if(j.key==="ArrowUp"){let v=Math.max(A-1,0);M(D(h,v))}else if(j.key==="ArrowRight"){let v=Math.min(h+1,w.length-1),$1=Math.min(A,w[v].length-1);M(D(v,$1))}else if(j.key==="ArrowLeft"){let v=Math.max(h-1,0),$1=Math.min(A,w[v].length-1);M(D(v,$1))}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],U);return}}if(j.key==="Enter"&&!j.shiftKey){j.preventDefault(),k();return}if(j.key==="Escape")if(u.length>0&&!O)C(!0);else if(K)c();else z()},[u,N,A,h,w,D,x,G,U,k,O,K,c,z]);return z1(b7,{anchorEl:Y,scrollContainer:$,onClose:K?c:z,ignoreSelector:K?"[data-annotation-id]":void 0,zIndex:K?"60":"50",padding:K?"10px 12px":"12px",width:"420px",children:[!K&&(q??z1("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)),z1(m0,{note:W,onNoteChange:T,images:U,onAddImage:(j)=>B((v)=>[...v,j]),onRemoveImage:(j)=>B((v)=>v.filter(($1)=>$1!==j)),sessionId:H,autoFocus:!0,autoResize:K,textareaRef:b,onKeyDown:a,attachButton:"none",openFilePickerRef:I,textareaStyle:K?{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),z1("div",{style:{display:"flex",alignItems:"center",gap:"8px",marginTop:K?"6px":"8px"},children:[z1(y2,{onClick:()=>I.current?.(),size:14},void 0,!1,void 0,this),z1("div",{style:{flex:1}},void 0,!1,void 0,this),K?z1("button",{onClick:()=>{if(_)_();z()},onMouseEnter:()=>y(!0),onMouseLeave:()=>y(!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):z1(w7,{children:[z1("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),z1("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&&z1("div",{style:{marginTop:"6px",borderTop:"1px solid var(--color-border-subtle)",paddingTop:"8px",display:"flex",gap:"4px"},children:l.map((j)=>z1("div",{style:{flex:1},children:[z1("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((v)=>{let $1=u.indexOf(v);return z1("div",{onMouseDown:(K1)=>{K1.preventDefault(),K1.stopPropagation(),x(v)},onMouseEnter:()=>M($1),style:{padding:"3px 6px",fontSize:"12px",borderRadius:"4px",fontFamily:"'Inter', sans-serif",color:$1===N?"var(--color-text-primary)":"var(--color-text-secondary)",background:$1===N?"var(--color-highlight-selected)":"transparent",cursor:"pointer"},children:[z1("span",{style:{fontWeight:500},children:v.slice(0,W.trim().length)},void 0,!1,void 0,this),v.slice(W.trim().length)]},v,!0,void 0,this)})]},j.label,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function J0({anchorEl:Y,scrollContainer:$,snippet:Z,truncateAt:J,header:q,onAdd:Q,onCancel:X}){return z1(M5,{anchorEl:Y,scrollContainer:$,snippet:Z,truncateAt:J,header:q,onConfirm:(G,z)=>Q(G,z),onCancel:X},void 0,!1,void 0,this)}function Q0({anchorEl:Y,scrollContainer:$,initialNote:Z,initialImages:J,onUpdate:q,onDelete:Q,onClose:X}){return z1(M5,{anchorEl:Y,scrollContainer:$,snippet:"",initialNote:Z,initialImages:J,onConfirm:(G,z)=>{q(G,z),X()},onDelete:Q,onCancel:X},void 0,!1,void 0,this)}import{useEffect as c0,useState as P5,useRef as i1,useCallback as S5}from"react";function l1(Y,$){let Z=[],J=j7(Y);for(let q of J){let Q=document.createRange();if(Q.selectNodeContents(q),q===Y.startContainer)Q.setStart(q,Y.startOffset);if(q===Y.endContainer)Q.setEnd(q,Y.endOffset);let X=Q.toString();if(!X||!X.trim())continue;let G=document.createElement("mark");G.setAttribute("data-annotation-id",$);try{Q.surroundContents(G)}catch{let z=Q.extractContents();G.appendChild(z),Q.insertNode(G)}Z.push(G)}return Z}function j7(Y){let $=[],Z=Y.commonAncestorContainer;if(Z.nodeType===Node.TEXT_NODE)return $.push(Z),$;let J=document.createTreeWalker(Z,NodeFilter.SHOW_TEXT),q;while(q=J.nextNode()){if(q.parentElement?.classList.contains("select-none"))continue;if(Y.intersectsNode(q))$.push(q)}return $}function r1(Y,$){let Z=document.querySelectorAll(`[data-annotation-id="${Y}"]`);for(let J of Z)J.classList.toggle("mark-active",$)}function v0(Y,$){if($!=null&&$!==Y)r1($,!1);if(Y!=null)r1(Y,!0)}function f0(Y,$){let Z=document.querySelectorAll(`[data-annotation-id="${Y}"]`);for(let J of Z)J.setAttribute("data-annotation-id",$)}function h0(Y,$){let Z=$.filter((G)=>!document.querySelector(`[data-annotation-id="${G.id}"]`));if(!Z.length)return;let J=[],q="",Q=document.createTreeWalker(Y,NodeFilter.SHOW_TEXT),X;while(X=Q.nextNode()){if(X.parentElement?.classList.contains("select-none"))continue;J.push({node:X,start:q.length}),q+=X.textContent||""}for(let G of Z){let z=G.snippet;if(!z)continue;let _=[],H=0;while(!0){let N=q.indexOf(z,H);if(N===-1)break;_.push(N),H=N+1}if(_.length===0)continue;let K=_[0];if(_.length>1&&G.context){let N=-1;for(let M of _){let O=0;if(G.context.before){let C=q.slice(Math.max(0,M-80),M);if(C.includes(G.context.before))O+=2;else if(G.context.before.length>10&&C.includes(G.context.before.slice(-10)))O+=1}if(G.context.after){let C=q.slice(M+z.length,M+z.length+80);if(C.includes(G.context.after))O+=2;else if(G.context.after.length>10&&C.includes(G.context.after.slice(0,10)))O+=1}if(O>N)N=O,K=M}}let W=K,T=K+z.length,U=y5(J,W),B=y5(J,T);if(!U||!B)continue;try{let N=document.createRange();N.setStart(U.node,U.offset),N.setEnd(B.node,B.offset),l1(N,G.id)}catch{}}}function y5(Y,$){for(let Z=Y.length-1;Z>=0;Z--)if(Y[Z].start<=$){let J=$-Y[Z].start,q=Y[Z].node.textContent?.length??0;if(J<=q)return{node:Y[Z].node,offset:J}}return null}function p0(Y){let $=document.querySelectorAll(`[data-annotation-id="${Y}"]`);for(let Z of $){let J=Z.parentNode;if(!J)continue;while(Z.firstChild)J.insertBefore(Z.firstChild,Z);J.removeChild(Z),J.normalize()}}import{jsxDEV as P2,Fragment as A7}from"react/jsx-dev-runtime";function a1(Y){let{containerRef:$,restoreKey:Z,restoreAnnotations:J,extractContext:q,filePath:Q,canvasFile:X,scrollContainer:G}=Y,{annotations:z,addAnnotationWithId:_,removeAnnotation:H,updateAnnotation:K,addAnnotationImage:W,removeAnnotationImage:T,activeAnnotationId:U,setActiveAnnotationId:B}=Q1(),[N,M]=P5(null),[O,C]=P5(null),S=i1(q);S.current=q;let y=i1(Q);y.current=Q;let b=i1(X);b.current=X;let I=i1(_);I.current=_;let k=i1(U);k.current=U;let c=i1(B);c.current=B;let f=J.length;c0(()=>{if(!$.current)return;let w=setTimeout(()=>{if($.current)h0($.current,J)},50);return()=>clearTimeout(w)},[Z,f]);let V=i1(null);c0(()=>{v0(U,V.current),V.current=U},[U]),c0(()=>{let w=$.current;if(!w)return;let u=(D)=>{let L=D.target.closest("[data-annotation-id]");if(!L)return;D.stopPropagation();let d=L.getAttribute("data-annotation-id");if(d===k.current)M({anchorEl:L,annId:d});else c.current(d)},h=(D)=>{let L=D.target.closest("[data-annotation-id]");if(L)c.current(L.getAttribute("data-annotation-id"))},A=(D)=>{let L=D.target.closest("[data-annotation-id]"),d=D.relatedTarget?.closest?.("[data-annotation-id]");if(L&&!d&&!document.getElementById("ann-inline-popover"))c.current(null)};return w.addEventListener("click",u),w.addEventListener("mouseover",h),w.addEventListener("mouseout",A),()=>{w.removeEventListener("click",u),w.removeEventListener("mouseover",h),w.removeEventListener("mouseout",A)}},[Z]),c0(()=>{let w=()=>E();return document.addEventListener("mouseup",w),()=>document.removeEventListener("mouseup",w)},[]);let E=S5(()=>{let w=window.getSelection();if(!w||w.isCollapsed||!w.toString().trim())return;if(!$.current)return;let u=w.getRangeAt(0);if(!$.current.contains(u.startContainer))return;if(u.startContainer.parentElement?.closest?.("[data-annotation-id]"))return;let h=w.toString().trim();if(h.length<2)return;let A=S.current(u),D=u.cloneRange(),L=`__pending_${Date.now()}`;try{l1(D,L)}catch{}window.getSelection()?.removeAllRanges();let d=document.querySelectorAll(`[data-annotation-id="${L}"]`),x=d[d.length-1];if(!x)return;C({anchorEl:x,tempId:L,snippet:h,ctx:A})},[]),g=S5((w,u,h,A)=>{C({anchorEl:w,tempId:u,snippet:h,ctx:A})},[]);return{popovers:P2(A7,{children:[N&&(()=>{let w=z.find((u)=>u.id===N.annId);if(!w)return null;return P2(Q0,{anchorEl:N.anchorEl,scrollContainer:G,initialNote:w.note,initialImages:w.images,onUpdate:(u,h)=>{K(N.annId,u);let A=w.images||[];for(let D of h)if(!A.includes(D))W(N.annId,D);for(let D of A)if(!h.includes(D))T(N.annId,D)},onDelete:()=>{H(N.annId),B(null)},onClose:()=>M(null)},void 0,!1,void 0,this)})(),O&&P2(J0,{anchorEl:O.anchorEl,scrollContainer:G,snippet:O.snippet,truncateAt:80,onAdd:(w,u)=>{let h=F1();f0(O.tempId,h),I.current(h,O.snippet,w,y.current,O.ctx,u,b.current),C(null)},onCancel:()=>{p0(O.tempId),C(null)}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),openCreatePopover:g,isPopoverOpen:!!(N||O)}}import{jsxDEV as q1,Fragment as m7}from"react/jsx-dev-runtime";var w2="[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']",b2="[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 L0({revision:Y,filename:$}){let Z=I7(R7),[J,q]=b1(null),[Q,X]=b1(null),[G,z]=b1(!0),_=C7(null),{annotations:H,addAnnotationWithId:K,removeAnnotation:W,updateAnnotation:T,addAnnotationImage:U,removeAnnotationImage:B,activeAnnotationId:N,setActiveAnnotationId:M}=Q1(),O=B0(()=>H.filter((A)=>!A.filePath&&(!A.canvasFile||A.canvasFile===$)),[H,$]),[C,S]=b1(null),[y,b]=b1(null),[I,k]=b1(null),[c,f]=b1(null),[V,E]=b1(!1);s1(()=>{z(!0),X(null),f(null),import(G5($,Y)).then((A)=>{q(()=>A.default),z(!1)}).catch((A)=>{X(A.message),z(!1)})},[Z,Y,$]);let g=document.getElementById("plan-scroll-container"),{popovers:l,isPopoverOpen:w}=a1({containerRef:_,restoreKey:J,restoreAnnotations:O,extractContext:(A)=>d1(A,_.current),canvasFile:$,scrollContainer:g}),u=B0(()=>{let A=new Map;for(let D of O)if(D.snippet.startsWith("["))A.set(D.snippet,D.id);return A},[O]);s1(()=>{let A=_.current;if(!A)return;let D=(d)=>{if(I||w)return;let x=d.target;if(x.closest("[data-block-comment-btn]"))return;E(!1);let m=x.closest(w2);if(m&&A.contains(m)){let v=o1(A).indexOf(m);f(v>=0?v:null)}else f(null);let a=x.closest(b2);if(a&&A.contains(a)){b(a);let j=X0(a),v=j?u.get(j):void 0;if(v&&v!==N)M(v)}else b(null)},L=(d)=>{if(I||w)return;if(d.relatedTarget?.closest("[data-block-comment-btn]"))return;b(null),M(null)};return A.addEventListener("mousemove",D),A.addEventListener("mouseleave",L),()=>{A.removeEventListener("mousemove",D),A.removeEventListener("mouseleave",L)}},[J,I,w,u,N]),s1(()=>{let A=(D)=>{let L=D.target.tagName;if(L==="INPUT"||L==="TEXTAREA"||D.target.isContentEditable)return;if(I||w)return;let d=_.current;if(!d)return;if(D.key==="ArrowDown"){D.preventDefault(),E(!0);let x=o1(d);if(x.length===0)return;f((m)=>{if(m===null)return 0;return Math.min(m+1,x.length-1)})}else if(D.key==="ArrowUp"){D.preventDefault(),E(!0);let x=o1(d);if(x.length===0)return;f((m)=>{if(m===null)return x.length-1;return Math.max(m-1,0)})}else if(D.key==="a"||D.key==="A"){if(c===null||!d)return;D.preventDefault();let m=o1(d)[c];if(!m)return;let a=X0(m);if(!a)return;let j=u.get(a);if(j)M(j),k({anchorEl:m,snippet:a,annId:j});else k({anchorEl:m,snippet:a})}else if(D.key===" "||D.key==="Enter"){if(c===null)return;let m=o1(d)[c];if(!m)return;let a=m.getAttribute("data-md");if(a==="choice-option"||a==="multichoice-option")D.preventDefault(),m.dispatchEvent(new CustomEvent("kb-select",{bubbles:!0}));else if(a==="userinput"){D.preventDefault();let j=m.querySelector("textarea");if(j){j.focus();let v=($1)=>{if($1.key==="Escape")$1.preventDefault(),j.blur(),E(!0)};j.addEventListener("keydown",v),j.addEventListener("blur",()=>j.removeEventListener("keydown",v),{once:!0})}}else if(a==="rangeinput"){D.preventDefault();let j=m.querySelector("input[type='range']");if(j){j.focus();let v=($1)=>{if($1.key==="Escape"||$1.key==="ArrowUp"||$1.key==="ArrowDown")$1.preventDefault(),j.blur(),E(!0)};j.addEventListener("keydown",v),j.addEventListener("blur",()=>j.removeEventListener("keydown",v),{once:!0})}}}else if(D.key==="Escape")f(null),E(!1),M(null)};return document.addEventListener("keydown",A),()=>document.removeEventListener("keydown",A)},[c,I,w,u]),s1(()=>{let A=_.current;if(!A||c===null||!V)return;let L=o1(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=X0(L),x=d?u.get(d):void 0;if(x)M(x);return()=>{L.style.outline="",L.style.outlineOffset="",L.style.borderRadius=""}},[c,V,u]);let h=B0(()=>J?q1(J,{},void 0,!1,void 0,this):null,[J]);if(G)return q1("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(Q)return q1("div",{className:"bg-accent-red-muted rounded-lg p-5",children:[q1("h3",{className:"font-body font-semibold text-accent-red mb-2",children:"Compilation Error"},void 0,!1,void 0,this),q1("pre",{className:"text-code font-mono text-text-secondary whitespace-pre-wrap",children:Q},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(!J)return q1("div",{className:"text-text-tertiary text-center py-8 font-body text-body",children:"No canvas loaded"},void 0,!1,void 0,this);return q1(D7.Provider,{value:$,children:[q1("div",{ref:_,className:"plan-content plan-updated",children:h},void 0,!1,void 0,this),C&&q1(x7,{note:C.note,onSave:(A)=>{T(C.id,A),S(null)},onCancel:()=>S(null)},void 0,!1,void 0,this),l,q1(k7,{containerRef:_,hoveredBlock:y,focusedBlockIndex:c,blockPopover:I,blockAnnotationMap:u,activeAnnotationId:N,onOpen:(A,D,L)=>{if(L)M(L),k({anchorEl:A,snippet:D,annId:L});else k({anchorEl:A,snippet:D})}},void 0,!1,void 0,this),I&&!I.annId&&q1(J0,{anchorEl:I.anchorEl,scrollContainer:g,snippet:I.snippet,truncateAt:80,onAdd:(A,D)=>{let L=F1();K(L,I.snippet,A,void 0,void 0,D,$),k(null)},onCancel:()=>k(null)},void 0,!1,void 0,this),I?.annId&&(()=>{let A=O.find((D)=>D.id===I.annId);if(!A)return null;return q1(Q0,{anchorEl:I.anchorEl,scrollContainer:g,initialNote:A.note,initialImages:A.images,onUpdate:(D,L)=>{T(I.annId,D);let d=A.images||[];for(let x of L)if(!d.includes(x))U(I.annId,x);for(let x of d)if(!L.includes(x))B(I.annId,x)},onDelete:()=>{W(I.annId),M(null),k(null)},onClose:()=>k(null)},void 0,!1,void 0,this)})()]},void 0,!0,void 0,this)}function o1(Y){return Array.from(Y.querySelectorAll(w2))}function X0(Y){let $=Y.getAttribute("data-md");if($==="item"){let Z=Y.getAttribute("data-md-label");return Z?`[Item] ${Z}`:null}if($==="section"){let Z=Y.getAttribute("data-md-title");return Z?`[Section] ${Z}`:null}if($==="callout"){let Z=Y.getAttribute("data-md-type")||"info",J=Y.textContent?.trim().slice(0,60)||"Callout";return`[Callout:${Z}] ${J}`}if($==="note")return`[Note] ${Y.textContent?.trim().slice(0,60)||"Note"}`;if(Y.tagName==="TR"){let Z=Array.from(Y.querySelectorAll("td")).map((J)=>J.textContent?.trim()).filter(Boolean);return Z.length?`[Row] ${Z.join(" | ")}`:null}if($==="checklist-item"){let Z=Y.getAttribute("data-md-label");return Z?`[Checklist] ${Z}`:null}if($==="choice-option"||$==="multichoice-option"){let Z=Y.getAttribute("data-md-label");return Z?`[Option] ${Z}`:null}if($==="userinput"){let Z=Y.getAttribute("data-md-label");return Z?`[Input] ${Z}`:null}if($==="rangeinput"){let Z=Y.getAttribute("data-md-label");return Z?`[Range] ${Z}`:null}if($==="image"){let Z=Y.getAttribute("data-md-src");return Z?`[Image] ${Z}`:null}return null}function k7({containerRef:Y,hoveredBlock:$,focusedBlockIndex:Z,blockPopover:J,blockAnnotationMap:q,activeAnnotationId:Q,onOpen:X}){let[G,z]=b1([]);s1(()=>{let T=Y.current;if(!T||q.size===0){z([]);return}let U=[];for(let B of T.querySelectorAll(b2)){let N=X0(B);if(N&&q.has(N))U.push(B)}z(U)},[q,Y.current]);let[_,H]=b1(null);s1(()=>{if(!Q||!Y.current){H(null);return}for(let T of Y.current.querySelectorAll(w2)){let U=X0(T);if(U&&q.get(U)===Q){H(T);return}}H(null)},[Q,q]),s1(()=>{if(!_)return;return _.style.boxShadow="inset 0 0 0 1.5px var(--color-highlight-bg)",_.style.borderRadius="8px",()=>{_.style.boxShadow="",_.style.borderRadius=""}},[_]);let K=B0(()=>{if(Z===null||!Y.current)return null;let T=o1(Y.current)[Z];if(!T)return null;return T.matches(b2)?T:null},[Z,Y.current]),W=B0(()=>{let T=new Set(G);if($)T.add($);if(K)T.add(K);if(J?.anchorEl)T.add(J.anchorEl);return Array.from(T)},[G,$,K,J]);return q1(m7,{children:W.map((T)=>q1(E7,{block:T,isHovered:T===$||T===K||T===J?.anchorEl,blockAnnotationMap:q,activeAnnotationId:Q,onOpen:X},T.getAttribute("data-task-id")||T.getAttribute("data-md-title")||T.textContent?.slice(0,30)||"block",!1,void 0,this))},void 0,!1,void 0,this)}function E7({block:Y,isHovered:$,blockAnnotationMap:Z,activeAnnotationId:J,onOpen:q}){let Q=X0(Y);if(!Q)return null;let X=Z.get(Q),G=!!X;return V7(q1("button",{"data-block-comment-btn":!0,onClick:(_)=>{_.stopPropagation(),q(_.currentTarget,Q,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===J?"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:q1("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:G?"currentColor":"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:q1("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),Y)}function x7({note:Y,onSave:$,onCancel:Z}){let[J,q]=S2.useState(Y),Q=S2.useRef(null);return S2.useEffect(()=>{Q.current?.focus(),Q.current?.select()},[]),q1("div",{className:"fixed inset-0 z-50 bg-black/40 flex items-center justify-center",onClick:Z,children:q1("div",{className:"bg-bg-elevated border border-border-hover rounded-lg shadow-md p-4 w-80",onClick:(X)=>X.stopPropagation(),children:[q1("div",{className:"text-tiny uppercase tracking-widest text-text-tertiary font-body mb-2",children:"Edit annotation"},void 0,!1,void 0,this),q1("textarea",{ref:Q,value:J,onChange:(X)=>q(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))$(J.trim());if(X.key==="Escape")Z()}},void 0,!1,void 0,this),q1("div",{className:"flex justify-end gap-2 mt-2",children:[q1("button",{onClick:Z,className:"text-meta text-text-tertiary font-body px-3 py-1",children:"Cancel"},void 0,!1,void 0,this),q1("button",{onClick:()=>$(J.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 i7,{useRef as C5,useEffect as i0,useCallback as V2,useState as E1,useContext as a0,useMemo as a7}from"react";function M0(Y,$,Z,J,q){let Q=[],X=Y.filter((T)=>T.source!=="remote"||q&&q.has(T.id)),G=X.filter((T)=>T.filePath===T1),z=X.filter((T)=>!T.filePath),_=X.filter((T)=>T.filePath&&T.filePath!==T1),H=Z?Array.from(Z.values()).filter((T)=>A2(T)):[],K=J?Array.from(J.values()).filter((T)=>T.markdown.trim()):[];if(H.length>0||K.length>0){Q.push("## Responses"),Q.push("");for(let T of H)Q.push(v7(T));for(let T of K)Q.push(T.markdown.trim()),Q.push("")}if(G.length>0){Q.push("## Annotations on agent response"),Q.push("");for(let T of G)Q.push(j2(T))}if(z.length>0){Q.push("## Canvas annotations"),Q.push("");let T=new Map;for(let N of z){let M=N.canvasFile||"";if(!T.has(M))T.set(M,[]);T.get(M).push(N)}let U=[...T.keys()].sort(),B=U.length>1||U.length===1&&U[0]!=="";for(let N of U){let M=T.get(N);if(B&&N)Q.push(`### ${N.replace(/\.jsx$/,"")}`),Q.push("");let O=f7(M);Q.push(b5(O))}}if(_.length>0){let T={};for(let U of _){let B=U.filePath;if(!T[B])T[B]=[];T[B].push(U)}Q.push("## File annotations"),Q.push("");for(let[U,B]of Object.entries(T)){Q.push(`### ${U}`),Q.push("");for(let N of B)Q.push(j2(N))}}if($.trim())Q.push("## General notes"),Q.push(""),Q.push($.trim()),Q.push("");return Q.join(`
|
|
59
|
+
Please report this to https://github.com/markedjs/marked.`,Y){let J="<p>An error occurred:</p><pre>"+P1(Z.message+"",!0)+"</pre>";return $?Promise.resolve(J):J}if($)return Promise.reject(Z);throw Z}}},p1=new X7;function t(Y,$){return p1.parse(Y,$)}t.options=t.setOptions=function(Y){return p1.setOptions(Y),t.defaults=p1.defaults,a2(t.defaults),t};t.getDefaults=z2;t.defaults=c1;t.use=function(...Y){return p1.use(...Y),t.defaults=p1.defaults,a2(t.defaults),t};t.walkTokens=function(Y,$){return p1.walkTokens(Y,$)};t.parseInline=p1.parseInline;t.Parser=O1;t.parser=O1.parse;t.Renderer=D0;t.TextRenderer=N2;t.Lexer=N1;t.lexer=N1.lex;t.Tokenizer=R0;t.Hooks=T0;t.parse=t;var{options:N4,setOptions:O4,use:F4,walkTokens:B4,parseInline:L4}=t;var M4=O1.parse,y4=N1.lex;import{SessionContext as N3,ActiveViewCtx as G4}from"#canvas/runtime";import{useState as F0,useCallback as S1,useEffect as z7,useRef as _7,useMemo as G7}from"react";import{AnnotationCtx as K7}from"#canvas/runtime";var T1="__agent-response__";function F1(){return`ann-${Date.now()}-${Math.random().toString(36).slice(2,6)}`}function O0(Y,$){Y.style.height="auto",Y.style.height=($?Math.max($,Y.scrollHeight):Y.scrollHeight)+"px"}import{useAnnotations as Q1}from"#canvas/runtime";import{jsxDEV as T7}from"react/jsx-dev-runtime";function O2(Y,$){return`canvas:${Y}:rev:${$}`}function x0(Y,$){try{let Z=localStorage.getItem(O2(Y,$));if(!Z)return null;return JSON.parse(Z)}catch{return null}}function U7(Y,$,Z){try{localStorage.setItem(O2(Y,$),JSON.stringify(Z))}catch{}}function H7(Y,$){try{localStorage.removeItem(O2(Y,$))}catch{}}function J5({sessionId:Y,revision:$,isReadOnly:Z,remoteAnnotations:J,children:q}){let[Q,X]=F0(()=>{return(x0(Y,$)?.annotations??[]).map((E)=>({...E,source:E.source??"local"}))}),G=G7(()=>{if(!J||J.length===0)return Q;let V=new Set(Q.map((g)=>g.id)),E=J.filter((g)=>!V.has(g.id));return[...Q,...E.map((g)=>({...g,source:"remote"}))]},[Q,J]),[z,_]=F0(()=>{return x0(Y,$)?.generalNote??""}),[H,K]=F0(null),[W,T]=F0(()=>{let V=x0(Y,$);return V?.responses?new Map(V.responses):new Map}),[U,B]=F0(()=>{let V=x0(Y,$);return V?.feedbackEntries?new Map(V.feedbackEntries):new Map}),N=_7(null);z7(()=>{if(Z)return;if(N.current)clearTimeout(N.current);return N.current=setTimeout(()=>{U7(Y,$,{annotations:Q,generalNote:z,responses:Array.from(W.entries()),feedbackEntries:Array.from(U.entries())})},300),()=>{if(N.current)clearTimeout(N.current)}},[Q,z,W,U,Y,$,Z]);let M=S1((V,E,g,l,w,u,h)=>{X((A)=>[...A,{id:V,snippet:E,note:g,createdAt:new Date().toISOString(),filePath:l,context:w,...u?.length?{images:u}:{},...h?{canvasFile:h}:{}}])},[]),O=S1((V,E,g)=>{M(F1(),V,E,g)},[M]),C=S1((V,E)=>{X((g)=>g.map((l)=>l.id===V?{...l,note:E}:l))},[]),S=S1((V)=>{W7(V),X((E)=>E.filter((g)=>g.id!==V)),K((E)=>E===V?null:E)},[]),y=S1((V,E)=>{X((g)=>g.map((l)=>l.id===V?{...l,images:[...l.images||[],E]}:l))},[]),b=S1((V,E)=>{X((g)=>g.map((l)=>l.id===V?{...l,images:(l.images||[]).filter((w)=>w!==E)}:l))},[]),I=S1((V,E)=>{T((g)=>{let l=new Map(g);return l.set(V,E),l})},[]),k=S1((V,E)=>{B((g)=>{let l=g.get(V);if(l&&l.markdown===E.markdown&&l.label===E.label&&l.required===E.required)return g;let w=new Map(g);return w.set(V,E),w})},[]),c=S1((V)=>{B((E)=>{if(!E.has(V))return E;let g=new Map(E);return g.delete(V),g})},[]),f=S1(()=>{for(let V of document.querySelectorAll("[data-annotation-id]"))Q5(V);X([]),_(""),K(null),T(new Map),B(new Map),H7(Y,$)},[Y,$]);return T7(K7.Provider,{value:{annotations:G,addAnnotation:O,addAnnotationWithId:M,updateAnnotation:C,removeAnnotation:S,addAnnotationImage:y,removeAnnotationImage:b,generalNote:z,setGeneralNote:_,clearAll:f,activeAnnotationId:H,setActiveAnnotationId:K,responses:W,setResponse:I,feedbackEntries:U,setFeedbackEntry:k,removeFeedbackEntry:c},children:q},void 0,!1,void 0,this)}function W7(Y){let $=document.querySelectorAll(`[data-annotation-id="${Y}"]`);for(let Z of $)Q5(Z)}function Q5(Y){let $=Y.parentNode;if(!$)return;let Z=document.createTextNode(Y.textContent||"");$.replaceChild(Z,Y),$.normalize()}import S2,{useEffect as s1,useState as b1,useRef as C7,useContext as I7,useMemo as B0}from"react";import{createPortal as V7}from"react-dom";import{SessionContext as R7,CanvasFileCtx as D7}from"#canvas/runtime";function d1(Y,$){let Z=X5(Y,"before",60),J=X5(Y,"after",60),q=O7(Y.startContainer,$);return{before:Z,after:J,hierarchy:q}}function X5(Y,$,Z){let J=N7($==="before"?Y.startContainer:Y.endContainer);if(!J)return"";let q="";if($==="before"){let Q=document.createTreeWalker(J,NodeFilter.SHOW_TEXT),X;while(X=Q.nextNode()){if(X===Y.startContainer){q+=(X.textContent||"").slice(0,Y.startOffset);break}if(X.parentElement?.hasAttribute("data-annotation-id"))continue;q+=X.textContent||""}if(q.length>Z){q=q.slice(-Z);let G=q.indexOf(" ");if(G>0)q=q.slice(G+1)}}else{let Q=document.createTreeWalker(J,NodeFilter.SHOW_TEXT),X=!1,G;while(G=Q.nextNode()){if(G===Y.endContainer){q+=(G.textContent||"").slice(Y.endOffset),X=!0;continue}if(X){if(G.parentElement?.hasAttribute("data-annotation-id"))continue;q+=G.textContent||""}}if(q.length>Z){q=q.slice(0,Z);let z=q.lastIndexOf(" ");if(z>0)q=q.slice(0,z)}}return q.trim()}function N7(Y){let $=new Set(["DIV","P","LI","PRE","BLOCKQUOTE","SECTION","ARTICLE"]),Z=Y.parentElement;while(Z){if($.has(Z.tagName))return Z;Z=Z.parentElement}return null}function O7(Y,$){let Z=[],J=Y instanceof Element?Y:Y.parentElement;while(J&&J!==$){let q=J.getAttribute?.("data-task-id");if(q){let Q=J.querySelector(".font-semibold");if(Q)Z.unshift(Q.textContent?.trim()||q)}if(J.tagName==="DIV"&&J.querySelector(":scope > button .font-heading, :scope > div .font-heading")){let Q=J.querySelector(".font-heading");if(Q)Z.unshift(Q.textContent?.trim()||"")}J=J.parentElement}return Z}function F2(Y){let $=Y.snippet.trim(),Z=Y.context,J=$.length<30;if(Z&&J&&(Z.before||Z.after)){let q=[];if(Z.before)q.push(`...${Z.before} `);if(q.push(`**${$}**`),Z.after)q.push(` ${Z.after}...`);return q.join("")}return $}import{useEffect as M7,useRef as g0,useState as q0,useCallback as u0,useMemo as F5,useContext as y7}from"react";import{createPortal as P7}from"react-dom";function z5(Y,$){let q=$||document.body,Q=Y.getBoundingClientRect(),X=q.getBoundingClientRect(),G=q===document.body?window.scrollY:q.scrollTop,z=Q.bottom-X.top+G+8,_=Math.max(0,Math.min(Q.left-X.left,X.width-280-12));return q.style.position="relative",{style:{position:"absolute",top:`${z}px`,left:`${_}px`},parent:q}}import{useState as L2,useRef as M2,useCallback as C1,useEffect as B7}from"react";function F7(){if(typeof window<"u"&&window.__CANVAS_SHARE__?.shareId)return{isShared:!0,shareId:window.__CANVAS_SHARE__.shareId};return{isShared:!1,sessionId:typeof window<"u"?window.location.pathname.replace("/s/",""):""}}var Z1=F7();function _5(){if(Z1.isShared)return`/s/${Z1.shareId}/meta`;return`/api/session/${Z1.sessionId}/meta`}function G5(Y,$){let Z=Y.replace(/\.jsx$/,".js");if(Z1.isShared)return`/s/${Z1.shareId}/canvas/${encodeURIComponent(Z)}`;let J=$?`?rev=${$}&t=${Date.now()}`:`?t=${Date.now()}`;return`/api/session/${Z1.sessionId}/canvas/${encodeURIComponent(Z)}${J}`}function K5(){if(Z1.isShared)return`/s/${Z1.shareId}/upload`;return`/api/session/${Z1.sessionId}/upload`}var U5="canvas-reviewer-identity";function B2(){try{let Y=localStorage.getItem(U5);if(!Y)return null;return JSON.parse(Y)}catch{return null}}function H5(Y){let $=B2();if(!$)$={id:crypto.randomUUID?.()||String(Date.now()),name:Y};else $.name=Y;return localStorage.setItem(U5,JSON.stringify($)),$}async function W5(Y){if(!Z1.isShared)throw Error("submitSharedFeedback called outside shared mode");let $=await fetch(`/s/${Z1.shareId}/feedback`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Y)});if(!$.ok){let Z=await $.text().catch(()=>"");throw Error(`Feedback submission failed: ${$.status} ${Z}`)}}var B1=!Z1.isShared,T5=!Z1.isShared;import{jsxDEV as X1}from"react/jsx-dev-runtime";function N5(Y){if(Y.startsWith("/s/")||Y.startsWith("http://")||Y.startsWith("https://"))return Y;return`/api/uploads/${Y.split("/").pop()}`}async function L7(Y,$){let Z=new FormData;Z.append("image",$);try{let q=await(await fetch(K5(),{method:"POST",body:Z})).json();if(Z1.isShared)return q.url||null;return q.path||null}catch{return null}}function m0({note:Y,onNoteChange:$,images:Z,onAddImage:J,onRemoveImage:q,sessionId:Q,placeholder:X="Add your note...",autoFocus:G=!1,autoResize:z=!1,readOnly:_=!1,onKeyDown:H,onTextareaClick:K,textareaRef:W,textareaClassName:T,textareaStyle:U,minHeight:B,attachButton:N="always",openFilePickerRef:M}){let[O,C]=L2(!1),[S,y]=L2(!1),[b,I]=L2(!1),k=M2(0),c=M2(null),f=M2(null),V=C1(()=>f.current?.click(),[]);if(M)M.current=V;let E=C1((m)=>{if(c.current=m,W)W.current=m;if(m&&z)O0(m,B)},[W,z,B]);B7(()=>{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;y(!0);try{let a=await L7(Q,m);if(a)J(a)}finally{y(!1)}},[Q,J]),l=C1((m)=>{let a=m.clipboardData.items;for(let j of a)if(j.type.startsWith("image/")){m.preventDefault();let v=j.getAsFile();if(v)g(v);return}},[g]),w=C1((m)=>{if(m.preventDefault(),k.current++,k.current===1)C(!0)},[]),u=C1((m)=>{m.preventDefault()},[]),h=C1((m)=>{if(m.preventDefault(),k.current--,k.current===0)C(!1)},[]),A=C1((m)=>{m.preventDefault(),k.current=0,C(!1);for(let a of m.dataTransfer.files)if(a.type.startsWith("image/"))g(a)},[g]),D=C1((m)=>{if($(m.target.value),z)m.target.style.height="auto",m.target.style.height=(B?Math.max(B,m.target.scrollHeight):m.target.scrollHeight)+"px"},[$,z,B]),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"&&b);return X1("div",{style:{position:"relative"},onDragEnter:_?void 0:w,onDragOver:_?void 0:u,onDragLeave:_?void 0:h,onDrop:_?void 0:A,children:[X1("textarea",{ref:E,value:Y,onChange:_?void 0:D,onPaste:_?void 0:l,onKeyDown:H,onClick:K,onFocus:()=>I(!0),onBlur:()=>{setTimeout(()=>I(!1),150)},readOnly:_,placeholder:X,className:T??L,style:U??d,rows:z?1:void 0},void 0,!1,void 0,this),!_&&X1("input",{ref:f,type:"file",accept:"image/*",multiple:!0,style:{display:"none"},onChange:(m)=>{let a=m.target.files;if(a)for(let j of a)g(j);m.target.value=""}},void 0,!1,void 0,this),(Z.length>0||x)&&X1("div",{style:{display:"flex",gap:"6px",flexWrap:"wrap",marginTop:"6px",alignItems:"center"},children:[Z.map((m)=>X1("div",{style:{position:"relative",width:"56px",height:"56px",borderRadius:"6px",overflow:"hidden",border:"1px solid var(--color-border-subtle)",flexShrink:0},children:[X1("img",{src:N5(m),alt:"",style:{width:"100%",height:"100%",objectFit:"cover",display:"block"}},void 0,!1,void 0,this),!_&&X1("button",{onClick:(a)=>{a.stopPropagation(),q(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&&X1(y2,{onClick:V},void 0,!1,void 0,this)]},void 0,!0,void 0,this),S&&X1("div",{style:{fontSize:"11px",color:"var(--color-text-tertiary)",fontFamily:"'Inter', sans-serif",marginTop:"4px"},children:"Uploading..."},void 0,!1,void 0,this),O&&X1("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 y2({onClick:Y,size:$=16}){return X1("button",{onClick:(Z)=>{Z.stopPropagation(),Y()},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:(Z)=>{Z.currentTarget.style.color="var(--color-text-secondary)"},onMouseLeave:(Z)=>{Z.currentTarget.style.color="var(--color-text-tertiary)"},children:X1("svg",{width:$,height:$,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:[X1("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"},void 0,!1,void 0,this),X1("circle",{cx:"8.5",cy:"8.5",r:"1.5"},void 0,!1,void 0,this),X1("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 O5({images:Y}){if(!Y.length)return null;return X1("div",{style:{display:"flex",gap:"6px",flexWrap:"wrap",marginTop:"6px"},children:Y.map(($)=>X1("div",{style:{width:"56px",height:"56px",borderRadius:"6px",overflow:"hidden",border:"1px solid var(--color-border-subtle)",flexShrink:0},children:X1("img",{src:N5($),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 S7}from"#canvas/runtime";import{jsxDEV as z1,Fragment as w7}from"react/jsx-dev-runtime";function b7({anchorEl:Y,scrollContainer:$,onClose:Z,ignoreSelector:J,zIndex:q="50",padding:Q="12px",width:X="280px",children:G}){let z=g0(null),_=g0(Z);_.current=Z;let{style:H,parent:K}=z5(Y,$);return M7(()=>{let W=setTimeout(()=>{let T=(U)=>{if(z.current&&!z.current.contains(U.target)){if(J&&U.target.closest?.(J))return;_.current(),document.removeEventListener("mousedown",T)}};return document.addEventListener("mousedown",T),()=>document.removeEventListener("mousedown",T)},0);return()=>clearTimeout(W)},[J]),P7(z1("div",{ref:z,style:{...H,zIndex:q,width:X,background:"var(--color-bg-elevated)",border:"1px solid var(--color-border-hover)",borderRadius:"8px",boxShadow:"0 4px 12px var(--color-shadow)",padding:Q,fontFamily:"'Inter', sans-serif"},children:G},void 0,!1,void 0,this),K)}var L5=[{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"]}],B5=L5.flatMap((Y)=>Y.items);function M5({anchorEl:Y,scrollContainer:$,snippet:Z,truncateAt:J=100,header:q,initialNote:Q="",initialImages:X,onConfirm:G,onCancel:z,onDelete:_}){let H=y7(S7),K=Q!==""||!!_,[W,T]=q0(Q),[U,B]=q0(X||[]),[N,M]=q0(null),[O,C]=q0(K),[S,y]=q0(!1),b=g0(null),I=g0(null),k=u0(()=>{if(W.trim()||U.length>0)G(W.trim(),U);else if(K&&_)_();else z()},[W,U,G,z,K,_]),c=u0(()=>{if(K){if(!W.trim()&&U.length===0&&_){_(),z();return}G(W,U);return}z()},[W,U,K,G,z,_]),f=!K,V=W.trim().length>0?B5.filter((j)=>j.toLowerCase().startsWith(W.trim().toLowerCase())):B5,E=!f||O?[]:V.length===1&&V[0].toLowerCase()===W.trim().toLowerCase()?[]:V,g=new Set(E),l=L5.map((j)=>({label:j.label,items:j.items.filter((v)=>g.has(v))})).filter((j)=>j.items.length>0),w=l.map((j)=>j.items),u=w.flat(),h=F5(()=>{if(N===null)return 0;let j=0;for(let v=0;v<w.length;v++){if(N<j+w[v].length)return v;j+=w[v].length}return 0},[N,w]),A=F5(()=>{if(N===null)return 0;let j=0;for(let v=0;v<h;v++)j+=w[v].length;return N-j},[N,h,w]),D=(j,v)=>{let $1=0;for(let K1=0;K1<j;K1++)$1+=w[K1].length;return $1+v},[L,d]=q0(W);if(W!==L)d(W),M(null),C(K);let x=u0((j)=>{T(j)},[]),m=Z.length>J?Z.slice(0,J)+"...":Z,a=u0((j)=>{if(u.length>0&&(j.key==="ArrowDown"||j.key==="ArrowUp"||j.key==="ArrowLeft"||j.key==="ArrowRight")){if(j.preventDefault(),N===null){M(0);return}if(j.key==="ArrowDown"){let v=Math.min(A+1,w[h].length-1);M(D(h,v))}else if(j.key==="ArrowUp"){let v=Math.max(A-1,0);M(D(h,v))}else if(j.key==="ArrowRight"){let v=Math.min(h+1,w.length-1),$1=Math.min(A,w[v].length-1);M(D(v,$1))}else if(j.key==="ArrowLeft"){let v=Math.max(h-1,0),$1=Math.min(A,w[v].length-1);M(D(v,$1))}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],U);return}}if(j.key==="Enter"&&!j.shiftKey){j.preventDefault(),k();return}if(j.key==="Escape")if(u.length>0&&!O)C(!0);else if(K)c();else z()},[u,N,A,h,w,D,x,G,U,k,O,K,c,z]);return z1(b7,{anchorEl:Y,scrollContainer:$,onClose:K?c:z,ignoreSelector:K?"[data-annotation-id]":void 0,zIndex:K?"60":"50",padding:K?"10px 12px":"12px",width:"420px",children:[!K&&(q??z1("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)),z1(m0,{note:W,onNoteChange:T,images:U,onAddImage:(j)=>B((v)=>[...v,j]),onRemoveImage:(j)=>B((v)=>v.filter(($1)=>$1!==j)),sessionId:H,autoFocus:!0,autoResize:K,textareaRef:b,onKeyDown:a,attachButton:"none",openFilePickerRef:I,textareaStyle:K?{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),z1("div",{style:{display:"flex",alignItems:"center",gap:"8px",marginTop:K?"6px":"8px"},children:[z1(y2,{onClick:()=>I.current?.(),size:14},void 0,!1,void 0,this),z1("div",{style:{flex:1}},void 0,!1,void 0,this),K?z1("button",{onClick:()=>{if(_)_();z()},onMouseEnter:()=>y(!0),onMouseLeave:()=>y(!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):z1(w7,{children:[z1("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),z1("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&&z1("div",{style:{marginTop:"6px",borderTop:"1px solid var(--color-border-subtle)",paddingTop:"8px",display:"flex",gap:"4px"},children:l.map((j)=>z1("div",{style:{flex:1},children:[z1("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((v)=>{let $1=u.indexOf(v);return z1("div",{onMouseDown:(K1)=>{K1.preventDefault(),K1.stopPropagation(),x(v)},onMouseEnter:()=>M($1),style:{padding:"3px 6px",fontSize:"12px",borderRadius:"4px",fontFamily:"'Inter', sans-serif",color:$1===N?"var(--color-text-primary)":"var(--color-text-secondary)",background:$1===N?"var(--color-highlight-selected)":"transparent",cursor:"pointer"},children:[z1("span",{style:{fontWeight:500},children:v.slice(0,W.trim().length)},void 0,!1,void 0,this),v.slice(W.trim().length)]},v,!0,void 0,this)})]},j.label,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function J0({anchorEl:Y,scrollContainer:$,snippet:Z,truncateAt:J,header:q,onAdd:Q,onCancel:X}){return z1(M5,{anchorEl:Y,scrollContainer:$,snippet:Z,truncateAt:J,header:q,onConfirm:(G,z)=>Q(G,z),onCancel:X},void 0,!1,void 0,this)}function Q0({anchorEl:Y,scrollContainer:$,initialNote:Z,initialImages:J,onUpdate:q,onDelete:Q,onClose:X}){return z1(M5,{anchorEl:Y,scrollContainer:$,snippet:"",initialNote:Z,initialImages:J,onConfirm:(G,z)=>{q(G,z),X()},onDelete:Q,onCancel:X},void 0,!1,void 0,this)}import{useEffect as c0,useState as P5,useRef as i1,useCallback as S5}from"react";function l1(Y,$){let Z=[],J=j7(Y);for(let q of J){let Q=document.createRange();if(Q.selectNodeContents(q),q===Y.startContainer)Q.setStart(q,Y.startOffset);if(q===Y.endContainer)Q.setEnd(q,Y.endOffset);let X=Q.toString();if(!X||!X.trim())continue;let G=document.createElement("mark");G.setAttribute("data-annotation-id",$);try{Q.surroundContents(G)}catch{let z=Q.extractContents();G.appendChild(z),Q.insertNode(G)}Z.push(G)}return Z}function j7(Y){let $=[],Z=Y.commonAncestorContainer;if(Z.nodeType===Node.TEXT_NODE)return $.push(Z),$;let J=document.createTreeWalker(Z,NodeFilter.SHOW_TEXT),q;while(q=J.nextNode()){if(q.parentElement?.classList.contains("select-none"))continue;if(Y.intersectsNode(q))$.push(q)}return $}function r1(Y,$){let Z=document.querySelectorAll(`[data-annotation-id="${Y}"]`);for(let J of Z)J.classList.toggle("mark-active",$)}function v0(Y,$){if($!=null&&$!==Y)r1($,!1);if(Y!=null)r1(Y,!0)}function f0(Y,$){let Z=document.querySelectorAll(`[data-annotation-id="${Y}"]`);for(let J of Z)J.setAttribute("data-annotation-id",$)}function h0(Y,$){let Z=$.filter((G)=>!document.querySelector(`[data-annotation-id="${G.id}"]`));if(!Z.length)return;let J=[],q="",Q=document.createTreeWalker(Y,NodeFilter.SHOW_TEXT),X;while(X=Q.nextNode()){if(X.parentElement?.classList.contains("select-none"))continue;J.push({node:X,start:q.length}),q+=X.textContent||""}for(let G of Z){let z=G.snippet;if(!z)continue;let _=[],H=0;while(!0){let N=q.indexOf(z,H);if(N===-1)break;_.push(N),H=N+1}if(_.length===0)continue;let K=_[0];if(_.length>1&&G.context){let N=-1;for(let M of _){let O=0;if(G.context.before){let C=q.slice(Math.max(0,M-80),M);if(C.includes(G.context.before))O+=2;else if(G.context.before.length>10&&C.includes(G.context.before.slice(-10)))O+=1}if(G.context.after){let C=q.slice(M+z.length,M+z.length+80);if(C.includes(G.context.after))O+=2;else if(G.context.after.length>10&&C.includes(G.context.after.slice(0,10)))O+=1}if(O>N)N=O,K=M}}let W=K,T=K+z.length,U=y5(J,W),B=y5(J,T);if(!U||!B)continue;try{let N=document.createRange();N.setStart(U.node,U.offset),N.setEnd(B.node,B.offset),l1(N,G.id)}catch{}}}function y5(Y,$){for(let Z=Y.length-1;Z>=0;Z--)if(Y[Z].start<=$){let J=$-Y[Z].start,q=Y[Z].node.textContent?.length??0;if(J<=q)return{node:Y[Z].node,offset:J}}return null}function p0(Y){let $=document.querySelectorAll(`[data-annotation-id="${Y}"]`);for(let Z of $){let J=Z.parentNode;if(!J)continue;while(Z.firstChild)J.insertBefore(Z.firstChild,Z);J.removeChild(Z),J.normalize()}}import{jsxDEV as P2,Fragment as A7}from"react/jsx-dev-runtime";function a1(Y){let{containerRef:$,restoreKey:Z,restoreAnnotations:J,extractContext:q,filePath:Q,canvasFile:X,scrollContainer:G}=Y,{annotations:z,addAnnotationWithId:_,removeAnnotation:H,updateAnnotation:K,addAnnotationImage:W,removeAnnotationImage:T,activeAnnotationId:U,setActiveAnnotationId:B}=Q1(),[N,M]=P5(null),[O,C]=P5(null),S=i1(q);S.current=q;let y=i1(Q);y.current=Q;let b=i1(X);b.current=X;let I=i1(_);I.current=_;let k=i1(U);k.current=U;let c=i1(B);c.current=B;let f=J.length;c0(()=>{if(!$.current)return;let w=setTimeout(()=>{if($.current)h0($.current,J)},50);return()=>clearTimeout(w)},[Z,f]);let V=i1(null);c0(()=>{v0(U,V.current),V.current=U},[U]),c0(()=>{let w=$.current;if(!w)return;let u=(D)=>{let L=D.target.closest("[data-annotation-id]");if(!L)return;D.stopPropagation();let d=L.getAttribute("data-annotation-id");if(d===k.current)M({anchorEl:L,annId:d});else c.current(d)},h=(D)=>{let L=D.target.closest("[data-annotation-id]");if(L)c.current(L.getAttribute("data-annotation-id"))},A=(D)=>{let L=D.target.closest("[data-annotation-id]"),d=D.relatedTarget?.closest?.("[data-annotation-id]");if(L&&!d&&!document.getElementById("ann-inline-popover"))c.current(null)};return w.addEventListener("click",u),w.addEventListener("mouseover",h),w.addEventListener("mouseout",A),()=>{w.removeEventListener("click",u),w.removeEventListener("mouseover",h),w.removeEventListener("mouseout",A)}},[Z]),c0(()=>{let w=()=>E();return document.addEventListener("mouseup",w),()=>document.removeEventListener("mouseup",w)},[]);let E=S5(()=>{let w=window.getSelection();if(!w||w.isCollapsed||!w.toString().trim())return;if(!$.current)return;let u=w.getRangeAt(0);if(!$.current.contains(u.startContainer))return;if(u.startContainer.parentElement?.closest?.("[data-annotation-id]"))return;let h=w.toString().trim();if(h.length<2)return;let A=S.current(u),D=u.cloneRange(),L=`__pending_${Date.now()}`;try{l1(D,L)}catch{}window.getSelection()?.removeAllRanges();let d=document.querySelectorAll(`[data-annotation-id="${L}"]`),x=d[d.length-1];if(!x)return;C({anchorEl:x,tempId:L,snippet:h,ctx:A})},[]),g=S5((w,u,h,A)=>{C({anchorEl:w,tempId:u,snippet:h,ctx:A})},[]);return{popovers:P2(A7,{children:[N&&(()=>{let w=z.find((u)=>u.id===N.annId);if(!w)return null;return P2(Q0,{anchorEl:N.anchorEl,scrollContainer:G,initialNote:w.note,initialImages:w.images,onUpdate:(u,h)=>{K(N.annId,u);let A=w.images||[];for(let D of h)if(!A.includes(D))W(N.annId,D);for(let D of A)if(!h.includes(D))T(N.annId,D)},onDelete:()=>{H(N.annId),B(null)},onClose:()=>M(null)},void 0,!1,void 0,this)})(),O&&P2(J0,{anchorEl:O.anchorEl,scrollContainer:G,snippet:O.snippet,truncateAt:80,onAdd:(w,u)=>{let h=F1();f0(O.tempId,h),I.current(h,O.snippet,w,y.current,O.ctx,u,b.current),C(null)},onCancel:()=>{p0(O.tempId),C(null)}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),openCreatePopover:g,isPopoverOpen:!!(N||O)}}import{jsxDEV as q1,Fragment as m7}from"react/jsx-dev-runtime";var w2="[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']",b2="[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 L0({revision:Y,filename:$}){let Z=I7(R7),[J,q]=b1(null),[Q,X]=b1(null),[G,z]=b1(!0),_=C7(null),{annotations:H,addAnnotationWithId:K,removeAnnotation:W,updateAnnotation:T,addAnnotationImage:U,removeAnnotationImage:B,activeAnnotationId:N,setActiveAnnotationId:M}=Q1(),O=B0(()=>H.filter((A)=>!A.filePath&&(!A.canvasFile||A.canvasFile===$)),[H,$]),[C,S]=b1(null),[y,b]=b1(null),[I,k]=b1(null),[c,f]=b1(null),[V,E]=b1(!1);s1(()=>{z(!0),X(null),f(null),import(G5($,Y)).then((A)=>{q(()=>A.default),z(!1)}).catch((A)=>{X(A.message),z(!1)})},[Z,Y,$]);let g=document.getElementById("plan-scroll-container"),{popovers:l,isPopoverOpen:w}=a1({containerRef:_,restoreKey:J,restoreAnnotations:O,extractContext:(A)=>d1(A,_.current),canvasFile:$,scrollContainer:g}),u=B0(()=>{let A=new Map;for(let D of O)if(D.snippet.startsWith("["))A.set(D.snippet,D.id);return A},[O]);s1(()=>{let A=_.current;if(!A)return;let D=(d)=>{if(I||w)return;let x=d.target;if(x.closest("[data-block-comment-btn]"))return;E(!1);let m=x.closest(w2);if(m&&A.contains(m)){let v=o1(A).indexOf(m);f(v>=0?v:null)}else f(null);let a=x.closest(b2);if(a&&A.contains(a)){b(a);let j=X0(a),v=j?u.get(j):void 0;if(v&&v!==N)M(v)}else b(null)},L=(d)=>{if(I||w)return;if(d.relatedTarget?.closest("[data-block-comment-btn]"))return;b(null),M(null)};return A.addEventListener("mousemove",D),A.addEventListener("mouseleave",L),()=>{A.removeEventListener("mousemove",D),A.removeEventListener("mouseleave",L)}},[J,I,w,u,N]),s1(()=>{let A=(D)=>{let L=D.target.tagName;if(L==="INPUT"||L==="TEXTAREA"||D.target.isContentEditable)return;if(I||w)return;let d=_.current;if(!d)return;if(D.key==="ArrowDown"){D.preventDefault(),E(!0);let x=o1(d);if(x.length===0)return;f((m)=>{if(m===null)return 0;return Math.min(m+1,x.length-1)})}else if(D.key==="ArrowUp"){D.preventDefault(),E(!0);let x=o1(d);if(x.length===0)return;f((m)=>{if(m===null)return x.length-1;return Math.max(m-1,0)})}else if(D.key==="a"||D.key==="A"){if(c===null||!d)return;D.preventDefault();let m=o1(d)[c];if(!m)return;let a=X0(m);if(!a)return;let j=u.get(a);if(j)M(j),k({anchorEl:m,snippet:a,annId:j});else k({anchorEl:m,snippet:a})}else if(D.key===" "||D.key==="Enter"){if(c===null)return;let m=o1(d)[c];if(!m)return;let a=m.getAttribute("data-md");if(a==="choice-option"||a==="multichoice-option")D.preventDefault(),m.dispatchEvent(new CustomEvent("kb-select",{bubbles:!0}));else if(a==="userinput"){D.preventDefault();let j=m.querySelector("textarea");if(j){j.focus();let v=($1)=>{if($1.key==="Escape")$1.preventDefault(),j.blur(),E(!0)};j.addEventListener("keydown",v),j.addEventListener("blur",()=>j.removeEventListener("keydown",v),{once:!0})}}else if(a==="rangeinput"){D.preventDefault();let j=m.querySelector("input[type='range']");if(j){j.focus();let v=($1)=>{if($1.key==="Escape"||$1.key==="ArrowUp"||$1.key==="ArrowDown")$1.preventDefault(),j.blur(),E(!0)};j.addEventListener("keydown",v),j.addEventListener("blur",()=>j.removeEventListener("keydown",v),{once:!0})}}}else if(D.key==="Escape")f(null),E(!1),M(null)};return document.addEventListener("keydown",A),()=>document.removeEventListener("keydown",A)},[c,I,w,u]),s1(()=>{let A=_.current;if(!A||c===null||!V)return;let L=o1(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=X0(L),x=d?u.get(d):void 0;if(x)M(x);return()=>{L.style.outline="",L.style.outlineOffset="",L.style.borderRadius=""}},[c,V,u]);let h=B0(()=>J?q1(J,{},void 0,!1,void 0,this):null,[J]);if(G)return q1("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(Q)return q1("div",{className:"bg-accent-red-muted rounded-lg p-5",children:[q1("h3",{className:"font-body font-semibold text-accent-red mb-2",children:"Compilation Error"},void 0,!1,void 0,this),q1("pre",{className:"text-code font-mono text-text-secondary whitespace-pre-wrap",children:Q},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(!J)return q1("div",{className:"text-text-tertiary text-center py-8 font-body text-body",children:"No canvas loaded"},void 0,!1,void 0,this);return q1(D7.Provider,{value:$,children:[q1("div",{ref:_,className:"plan-content plan-updated",children:h},void 0,!1,void 0,this),C&&q1(x7,{note:C.note,onSave:(A)=>{T(C.id,A),S(null)},onCancel:()=>S(null)},void 0,!1,void 0,this),l,q1(k7,{containerRef:_,hoveredBlock:y,focusedBlockIndex:c,blockPopover:I,blockAnnotationMap:u,activeAnnotationId:N,onOpen:(A,D,L)=>{if(L)M(L),k({anchorEl:A,snippet:D,annId:L});else k({anchorEl:A,snippet:D})}},void 0,!1,void 0,this),I&&!I.annId&&q1(J0,{anchorEl:I.anchorEl,scrollContainer:g,snippet:I.snippet,truncateAt:80,onAdd:(A,D)=>{let L=F1();K(L,I.snippet,A,void 0,void 0,D,$),k(null)},onCancel:()=>k(null)},void 0,!1,void 0,this),I?.annId&&(()=>{let A=O.find((D)=>D.id===I.annId);if(!A)return null;return q1(Q0,{anchorEl:I.anchorEl,scrollContainer:g,initialNote:A.note,initialImages:A.images,onUpdate:(D,L)=>{T(I.annId,D);let d=A.images||[];for(let x of L)if(!d.includes(x))U(I.annId,x);for(let x of d)if(!L.includes(x))B(I.annId,x)},onDelete:()=>{W(I.annId),M(null),k(null)},onClose:()=>k(null)},void 0,!1,void 0,this)})()]},void 0,!0,void 0,this)}function o1(Y){return Array.from(Y.querySelectorAll(w2))}function X0(Y){let $=Y.getAttribute("data-md");if($==="item"){let Z=Y.getAttribute("data-md-label");return Z?`[Item] ${Z}`:null}if($==="section"){let Z=Y.getAttribute("data-md-title");return Z?`[Section] ${Z}`:null}if($==="callout"){let Z=Y.getAttribute("data-md-type")||"info",J=Y.textContent?.trim().slice(0,60)||"Callout";return`[Callout:${Z}] ${J}`}if($==="note")return`[Note] ${Y.textContent?.trim().slice(0,60)||"Note"}`;if(Y.tagName==="TR"){let Z=Array.from(Y.querySelectorAll("td")).map((J)=>J.textContent?.trim()).filter(Boolean);return Z.length?`[Row] ${Z.join(" | ")}`:null}if($==="checklist-item"){let Z=Y.getAttribute("data-md-label");return Z?`[Checklist] ${Z}`:null}if($==="choice-option"||$==="multichoice-option"){let Z=Y.getAttribute("data-md-label");return Z?`[Option] ${Z}`:null}if($==="userinput"){let Z=Y.getAttribute("data-md-label");return Z?`[Input] ${Z}`:null}if($==="rangeinput"){let Z=Y.getAttribute("data-md-label");return Z?`[Range] ${Z}`:null}if($==="image"){let Z=Y.getAttribute("data-md-src");return Z?`[Image] ${Z}`:null}return null}function k7({containerRef:Y,hoveredBlock:$,focusedBlockIndex:Z,blockPopover:J,blockAnnotationMap:q,activeAnnotationId:Q,onOpen:X}){let[G,z]=b1([]);s1(()=>{let T=Y.current;if(!T||q.size===0){z([]);return}let U=[];for(let B of T.querySelectorAll(b2)){let N=X0(B);if(N&&q.has(N))U.push(B)}z(U)},[q,Y.current]);let[_,H]=b1(null);s1(()=>{if(!Q||!Y.current){H(null);return}for(let T of Y.current.querySelectorAll(w2)){let U=X0(T);if(U&&q.get(U)===Q){H(T);return}}H(null)},[Q,q]),s1(()=>{if(!_)return;return _.style.boxShadow="inset 0 0 0 1.5px var(--color-highlight-bg)",_.style.borderRadius="8px",()=>{_.style.boxShadow="",_.style.borderRadius=""}},[_]);let K=B0(()=>{if(Z===null||!Y.current)return null;let T=o1(Y.current)[Z];if(!T)return null;return T.matches(b2)?T:null},[Z,Y.current]),W=B0(()=>{let T=new Set(G);if($)T.add($);if(K)T.add(K);if(J?.anchorEl)T.add(J.anchorEl);return Array.from(T)},[G,$,K,J]);return q1(m7,{children:W.map((T)=>q1(E7,{block:T,isHovered:T===$||T===K||T===J?.anchorEl,blockAnnotationMap:q,activeAnnotationId:Q,onOpen:X},T.getAttribute("data-task-id")||T.getAttribute("data-md-title")||T.textContent?.slice(0,30)||"block",!1,void 0,this))},void 0,!1,void 0,this)}function E7({block:Y,isHovered:$,blockAnnotationMap:Z,activeAnnotationId:J,onOpen:q}){let Q=X0(Y);if(!Q)return null;let X=Z.get(Q),G=!!X;return V7(q1("button",{"data-block-comment-btn":!0,onClick:(_)=>{_.stopPropagation(),q(_.currentTarget,Q,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===J?"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:q1("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:G?"currentColor":"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:q1("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),Y)}function x7({note:Y,onSave:$,onCancel:Z}){let[J,q]=S2.useState(Y),Q=S2.useRef(null);return S2.useEffect(()=>{Q.current?.focus(),Q.current?.select()},[]),q1("div",{className:"fixed inset-0 z-50 bg-black/40 flex items-center justify-center",onClick:Z,children:q1("div",{className:"bg-bg-elevated border border-border-hover rounded-lg shadow-md p-4 w-80",onClick:(X)=>X.stopPropagation(),children:[q1("div",{className:"text-tiny uppercase tracking-widest text-text-tertiary font-body mb-2",children:"Edit annotation"},void 0,!1,void 0,this),q1("textarea",{ref:Q,value:J,onChange:(X)=>q(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))$(J.trim());if(X.key==="Escape")Z()}},void 0,!1,void 0,this),q1("div",{className:"flex justify-end gap-2 mt-2",children:[q1("button",{onClick:Z,className:"text-meta text-text-tertiary font-body px-3 py-1",children:"Cancel"},void 0,!1,void 0,this),q1("button",{onClick:()=>$(J.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 i7,{useRef as C5,useEffect as i0,useCallback as V2,useState as E1,useContext as a0,useMemo as a7}from"react";function M0(Y,$,Z,J,q){let Q=[],X=Y.filter((T)=>T.source!=="remote"||q&&q.has(T.id)),G=X.filter((T)=>T.filePath===T1),z=X.filter((T)=>!T.filePath),_=X.filter((T)=>T.filePath&&T.filePath!==T1),H=Z?Array.from(Z.values()).filter((T)=>A2(T)):[],K=J?Array.from(J.values()).filter((T)=>T.markdown.trim()):[];if(H.length>0||K.length>0){Q.push("## Responses"),Q.push("");for(let T of H)Q.push(v7(T));for(let T of K)Q.push(T.markdown.trim()),Q.push("")}if(G.length>0){Q.push("## Annotations on agent response"),Q.push("");for(let T of G)Q.push(j2(T))}if(z.length>0){Q.push("## Canvas annotations"),Q.push("");let T=new Map;for(let N of z){let M=N.canvasFile||"";if(!T.has(M))T.set(M,[]);T.get(M).push(N)}let U=[...T.keys()].sort(),B=U.length>1||U.length===1&&U[0]!=="";for(let N of U){let M=T.get(N);if(B&&N)Q.push(`### ${N.replace(/\.jsx$/,"")}`),Q.push("");let O=f7(M);Q.push(b5(O))}}if(_.length>0){let T={};for(let U of _){let B=U.filePath;if(!T[B])T[B]=[];T[B].push(U)}Q.push("## File annotations"),Q.push("");for(let[U,B]of Object.entries(T)){Q.push(`### ${U}`),Q.push("");for(let N of B)Q.push(j2(N))}}if($.trim())Q.push("## General notes"),Q.push(""),Q.push($.trim()),Q.push("");return Q.join(`
|
|
60
60
|
`).trim()+`
|
|
61
61
|
`}function A2(Y){if(Y.note?.trim())return!0;if(Y.value===null||Y.value===void 0)return!1;if(Y.type==="text"&&!Y.value.trim())return!1;if(Y.type==="checkbox"&&Y.value.length===0)return!1;return!0}function u7(Y){let $=[];for(let Z of Y.values()){if(!Z.required)continue;if(Z.value===null||Z.value===void 0){$.push(Z);continue}if(Z.type==="text"&&!Z.value.trim()){$.push(Z);continue}if(Z.type==="checkbox"&&Z.value.length===0){$.push(Z);continue}}return $}function g7(Y){let $=[];for(let Z of Y.values())if(Z.required&&!Z.markdown.trim())$.push(Z);return $}function d0(Y,$){let Z=u7(Y),J=g7($);return[...Z.map((q)=>q.label),...J.map((q)=>q.label||q.id)]}function v7(Y){let $=[];switch($.push(`**${Y.label}**`),Y.type){case"radio":case"select":$.push(`Answer: ${Y.value}`);break;case"checkbox":for(let Z of Y.value)$.push(`- [x] ${Z}`);break;case"text":$.push(""),$.push(Y.value.trim());break;case"range":$.push(`Answer: ${Y.value}`);break}if(Y.note?.trim())$.push(""),$.push(`Note: ${Y.note.trim()}`);return $.push(""),$.join(`
|
|
62
62
|
`)}function j2(Y){let $=[],Z=Y.snippet.trim(),J=Y.context,q=J?.lineStart!=null;if(Y.filePath&&q){let Q=J.lineStart,X=J.lineEnd??Q,G=Z.split(`
|
|
@@ -80,12 +80,12 @@ Please report this to https://github.com/markedjs/marked.`,Y){let J="<p>An error
|
|
|
80
80
|
`).replace(/\n{3,}/g,`
|
|
81
81
|
|
|
82
82
|
`).trim()+`
|
|
83
|
-
`}var _8=new Set(["CODE","SPAN","STRONG","EM","A","B","I","U","SMALL","SUB","SUP","MARK","ABBR"]);function t0(Y,$,Z){if(G8(Y)){let J=K8(Y);if(J)$.push(J,"");return}for(let J of Y.childNodes)if(J.nodeType===Node.ELEMENT_NODE)U8(J,$,Z);else if(J.nodeType===Node.TEXT_NODE){let q=J.textContent?.trim();if(q)$.push(q,"")}}function G8(Y){for(let $ of Y.childNodes){if($.nodeType===Node.TEXT_NODE)continue;if($.nodeType===Node.ELEMENT_NODE){let Z=$;if(!_8.has(Z.tagName)||Z.hasAttribute("data-md"))return!1}}return Y.childNodes.length>0}function K8(Y){let $="";for(let Z of Y.childNodes)if(Z.nodeType===Node.TEXT_NODE)$+=Z.textContent||"";else if(Z.nodeType===Node.ELEMENT_NODE){let J=Z;if(J.tagName==="CODE")$+="`"+(J.textContent||"")+"`";else $+=J.textContent||""}return $.trim()}function U8(Y,$,Z){let J=Y.getAttribute("data-md");if(J)switch(J){case"section":return H8(Y,$,Z);case"item":return W8(Y,$);case"codeblock":return T8(Y,$);case"callout":return N8(Y,$);case"note":return O8(Y,$);case"table":return F8(Y,$);case"checklist":return B8(Y,$);case"diff":return L8(Y,$);case"mermaid":return M8(Y,$);case"choice":return y8(Y,$);case"multichoice":return P8(Y,$);case"choice-option":case"multichoice-option":return;case"userinput":return S8(Y,$);case"rangeinput":return b8(Y,$);case"checklist-item":return;case"filepreview":return w8(Y,$);case"priority":return j8(Y,$)}if(Y.querySelector("button, input, select, textarea"))return;if(Y.children.length>0)t0(Y,$,Z);else{let q=Y.textContent?.trim();if(q)$.push(q,"")}}function H8(Y,$,Z){let J=Y.getAttribute("data-md-title")||"Untitled",q=Z===0?"##":"###";$.push(`${q} ${J}`,"");let Q=Y.querySelector(":scope > div:last-of-type");if(Q)t0(Q,$,Z+1)}function W8(Y,$){let Z=Y.getAttribute("data-md-label")||"",J=Y.getAttribute("data-md-status"),q=Y.getAttribute("data-md-badge"),Q="-";if(J==="done")Q="- [x]";else if(J)Q="- [ ]";let X=`${Q} **${Z}**`;if(q)X+=` \`${q}\``;$.push(X);let G=Y.querySelector(".text-text-secondary");if(G){let z=[];t0(G,z,0);for(let _ of z)$.push(_?` ${_}`:"")}$.push("")}function T8(Y,$){let Z=Y.getAttribute("data-md-language")||"",q=Y.querySelector("code")?.textContent||"";$.push(`\`\`\`${Z}`,q,"```","")}function N8(Y,$){let Z=Y.getAttribute("data-md-type")||"info",J={info:"Info",warning:"Warning",danger:"Danger",tip:"Tip"},q=A8(Y.querySelector(".text-text-secondary")||Y);$.push(`> **${J[Z]||Z}:** ${q}`,"")}function O8(Y,$){let Z=Y.textContent?.trim()||"";$.push(`> *${Z}*`,"")}function F8(Y,$){let Z=Y.querySelector("table");if(!Z)return;let J=[];for(let q of Z.querySelectorAll("thead th"))J.push(q.textContent?.trim()||"");if(J.length===0)return;$.push(`| ${J.join(" | ")} |`),$.push(`| ${J.map(()=>"---").join(" | ")} |`);for(let q of Z.querySelectorAll("tbody tr")){let Q=[];for(let X of q.querySelectorAll("td"))Q.push(X.textContent?.trim()||"");$.push(`| ${Q.join(" | ")} |`)}$.push("")}function B8(Y,$){for(let Z of Y.querySelectorAll("li")){let J=Z.querySelector(".bg-accent-green")!==null,q=Z.textContent?.trim()||"";$.push(`- [${J?"x":" "}] ${q}`)}$.push("")}function L8(Y,$){let Z=Y.getAttribute("data-md-language")||"";$.push(`\`\`\`diff${Z?` (${Z})`:""}`);for(let J of Y.querySelectorAll("[class*='flex']")){let q=J.querySelector(".text-accent-red")?"-":J.querySelector(".text-accent-green")?"+":" ",Q=J.querySelector("code");if(Q)$.push(`${q} ${Q.textContent}`)}$.push("```","")}function M8(Y,$){let Z=Y.getAttribute("data-md-source")||"";if(Z)$.push("```mermaid",Z,"```","")}function y8(Y,$){let Z=Y.getAttribute("data-md-label")||"";$.push(`**${Z}:**`);for(let J of Y.querySelectorAll("[data-md='choice-option']")){let q=J.getAttribute("data-md-label")||J.textContent?.trim()||"",Q=J.querySelector(".bg-accent-amber")!==null;$.push(`- ${Q?"(x)":"( )"} ${q}`)}$.push("")}function P8(Y,$){let Z=Y.getAttribute("data-md-label")||"";$.push(`**${Z}:**`);for(let J of Y.querySelectorAll("[data-md='multichoice-option']")){let q=J.getAttribute("data-md-label")||J.textContent?.trim()||"",Q=J.querySelector(".bg-accent-amber")!==null;$.push(`- [${Q?"x":" "}] ${q}`)}$.push("")}function S8(Y,$){let Z=Y.getAttribute("data-md-label")||"",q=Y.querySelector("textarea")?.value?.trim()||"";$.push(`**${Z}:** ${q||"_empty_"}`,"")}function b8(Y,$){let Z=Y.getAttribute("data-md-label")||"",J=Y.querySelector("input[type='range']"),Q=Y.querySelector(".font-mono")?.textContent?.trim()||J?.value||"—";$.push(`**${Z}:** ${Q}`,"")}function w8(Y,$){let Z=Y.getAttribute("data-md-path")||"",J=Y.getAttribute("data-md-lines")||"",Q=Y.querySelector("code")?.textContent||"",X=Z.split(".").pop()||"",G=o0[X]||"",z=J?`${Z} (L${J})`:Z;$.push(z,"",`\`\`\`${G}`,Q,"```","")}function j8(Y,$){}function A8(Y){return Y?.textContent?.trim()||""}import e5,{useEffect as m1,useState as _1,useRef as V1,useCallback as $3,useMemo as Y2,useContext as c8}from"react";import{useEffect as C8,useState as I8,useRef as V8,useContext as R8}from"react";import{jsxDEV as H1,Fragment as p5}from"react/jsx-dev-runtime";function D8(Y){return Y.label||`Round ${Y.revision}`}function k8(Y){let $=Date.now()-new Date(Y).getTime(),Z=Math.floor($/1000);if(Z<60)return"just now";let J=Math.floor(Z/60);if(J<60)return`${J}m ago`;let q=Math.floor(J/60);if(q<24)return`${q}h ago`;return`${Math.floor(q/24)}d ago`}function S0({value:Y,onChange:$,accent:Z="default",className:J}){let{currentRevision:q,revisions:Q}=R8(w1),[X,G]=I8(!1),z=V8(null);C8(()=>{if(!X)return;let K=(W)=>{if(z.current&&!z.current.contains(W.target))G(!1)};return document.addEventListener("mousedown",K),()=>document.removeEventListener("mousedown",K)},[X]);let _=Q.find((K)=>K.revision===Y);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"}[Z]} ${J||""}`,children:[_?D8(_):`Round ${Y}`,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:[...Q].reverse().map((K)=>H1("button",{onClick:()=>{$(K.revision),G(!1)},className:`w-full flex items-center gap-2 px-3 py-2 text-[12px] font-body transition-colors ${K.revision===Y?"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 ${K.revision===q?"bg-accent-green":K.hasFeedback?"bg-accent-amber":"bg-border-hover"}`},void 0,!1,void 0,this),H1("span",{className:"flex-1 text-left truncate",children:K.label?H1(p5,{children:[K.label," ",H1("span",{className:"text-text-tertiary",children:["#",K.revision]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):H1(p5,{children:["Round ",K.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 W=K.canvasFiles?.reduce((T,U)=>{if(U.diffStats)T.added+=U.diffStats.added,T.removed+=U.diffStats.removed;return T},{added:0,removed:0});if(W&&(W.added>0||W.removed>0))return H1("span",{className:"font-mono",children:[H1("span",{className:"text-accent-green",children:["+",W.added]},void 0,!0,void 0,this)," ",H1("span",{className:"text-accent-red",children:["-",W.removed]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);return null})(),K.revision===q?"current":K.hasFeedback?"sent":k8(K.createdAt)]},void 0,!0,void 0,this)]},K.revision,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function x1(Y,$){let Z=Y.length,J=$.length;if(Z===0||J===0)return[];let q=Array.from({length:Z+1},()=>Array(J+1).fill(0));for(let z=1;z<=Z;z++)for(let _=1;_<=J;_++)q[z][_]=Y[z-1]===$[_-1]?q[z-1][_-1]+1:Math.max(q[z-1][_],q[z][_-1]);let Q=[],X=Z,G=J;while(X>0&&G>0)if(Y[X-1]===$[G-1])Q.unshift(Y[X-1]),X--,G--;else if(q[X-1][G]>q[X][G-1])X--;else G--;return Q}function c5(Y){let $=[],Z=[],J=document.createTreeWalker(Y,NodeFilter.SHOW_TEXT,{acceptNode(Q){let X=Q.parentElement;if(!X)return NodeFilter.FILTER_REJECT;if(X.closest("svg, .select-none, [data-no-diff]"))return NodeFilter.FILTER_REJECT;return NodeFilter.FILTER_ACCEPT}}),q;while(q=J.nextNode()){let X=(q.nodeValue||"").match(/\S+|\s+/g);if(!X)continue;let G=0;for(let z of X)$.push(z),Z.push({text:z,node:q,offset:G}),G+=z.length}return{words:$,map:Z}}function E2(Y,$){if(Y.length>5000||$.length>5000)return E8(Y,$);return l5(Y,$)}function l5(Y,$){let Z=n0(Y,$),J=[],q=[],Q=0,X=0,G=0;while(Q<Y.length||X<$.length)if(G<Z.length&&Q<Y.length&&X<$.length&&Y[Q]===Z[G]&&$[X]===Z[G])J.push({type:"same",index:Q}),q.push({type:"same",index:X}),Q++,X++,G++;else if(Q<Y.length&&(G>=Z.length||Y[Q]!==Z[G]))J.push({type:"removed",index:Q}),Q++;else if(X<$.length)q.push({type:"added",index:X}),X++;return{oldOps:J,newOps:q}}function n0(Y,$){let Z=Y.length,J=$.length;if(Z===0||J===0)return[];if(Z===1)return $.includes(Y[0])?[Y[0]]:[];if(J===1)return Y.includes($[0])?[$[0]]:[];if(Z*J<=1e6)return x1(Y,$);let q=Math.floor(Z/2),Q=Y.slice(0,q),X=Y.slice(q),G=d5(Q,$),z=d5([...X].reverse(),[...$].reverse()),_=0,H=0;for(let T=0;T<=J;T++){let U=G[T]+z[J-T];if(U>_)_=U,H=T}let K=$.slice(0,H),W=$.slice(H);return[...n0(Q,K),...n0(X,W)]}function d5(Y,$){let Z=$.length,J=Array(Z+1).fill(0),q=Array(Z+1).fill(0);for(let Q=0;Q<Y.length;Q++){for(let X=1;X<=Z;X++)q[X]=Y[Q]===$[X-1]?J[X-1]+1:Math.max(J[X],q[X-1]);[J,q]=[q,J],q.fill(0)}return J}function E8(Y,$){let J=(U)=>{let B=[];for(let N=0;N<U.length;N+=200){let M=Math.min(N+200,U.length);B.push({start:N,end:M,text:U.slice(N,M).join("")})}return B},q=J(Y),Q=J($),X=q.map((U)=>U.text),G=Q.map((U)=>U.text),z=n0(X,G),_=[],H=[],K=0,W=0,T=0;while(K<q.length||W<Q.length)if(T<z.length&&K<q.length&&W<Q.length&&X[K]===z[T]&&G[W]===z[T]){for(let U=q[K].start;U<q[K].end;U++)_.push({type:"same",index:U});for(let U=Q[W].start;U<Q[W].end;U++)H.push({type:"same",index:U});K++,W++,T++}else if(K<q.length&&(T>=z.length||X[K]!==z[T]))if(W<Q.length&&(T>=z.length||G[W]!==z[T])){let U=l5(Y.slice(q[K].start,q[K].end),$.slice(Q[W].start,Q[W].end));for(let B of U.oldOps)_.push({type:B.type,index:B.index+q[K].start});for(let B of U.newOps)H.push({type:B.type,index:B.index+Q[W].start});K++,W++}else{for(let U=q[K].start;U<q[K].end;U++)_.push({type:"removed",index:U});K++}else if(W<Q.length){for(let U=Q[W].start;U<Q[W].end;U++)H.push({type:"added",index:U});W++}return{oldOps:_,newOps:H}}function r5(Y,$,Z){let J=new Map;for(let q of Y){if(q.type==="same")continue;let Q=$[q.index];if(!Q||!Q.node.parentNode)continue;let X=J.get(Q.node);if(!X)X=[],J.set(Q.node,X);X.push({offset:Q.offset,length:Q.text.length})}for(let[q,Q]of J){if(!q.parentNode)continue;let X=q.nodeValue||"";Q.sort((K,W)=>K.offset-W.offset);let G=[];for(let K of Q){let W=G[G.length-1];if(W&&K.offset<=W.offset+W.length)W.length=Math.max(W.length,K.offset+K.length-W.offset);else G.push({...K})}let z=q.parentNode,_=document.createDocumentFragment(),H=0;for(let K of G){if(K.offset>H)_.appendChild(document.createTextNode(X.slice(H,K.offset)));let W=document.createElement("span");W.className=Z,W.textContent=X.slice(K.offset,K.offset+K.length),_.appendChild(W),H=K.offset+K.length}if(H<X.length)_.appendChild(document.createTextNode(X.slice(H)));z.replaceChild(_,q)}}function e0(Y,$){let Z=x8(Y,$),J=c5(Y),q=c5($),{oldOps:Q,newOps:X}=E2(J.words,q.words),G=Q.some((z)=>z.type==="removed")||X.some((z)=>z.type==="added");return r5(Q,J.map,"diff-removed"),r5(X,q.map,"diff-added"),G||Z}function x8(Y,$){let Z=Array.from(Y.querySelectorAll('[data-md="mermaid"]')),J=Array.from($.querySelectorAll('[data-md="mermaid"]')),q=!1,Q=Math.max(Z.length,J.length);for(let X=0;X<Q;X++){let G=Z[X],z=J[X];if(!G&&z){z.classList.add("diff-block-added"),z.style.position="relative",q=!0;continue}if(G&&!z){G.classList.add("diff-block-removed"),G.style.position="relative",q=!0;continue}if(!G||!z)continue;let _=(G.getAttribute("data-md-source")||"").trim(),H=(z.getAttribute("data-md-source")||"").trim();if(_===H)continue;q=!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 K=_.split(`
|
|
83
|
+
`}var _8=new Set(["CODE","SPAN","STRONG","EM","A","B","I","U","SMALL","SUB","SUP","MARK","ABBR"]);function t0(Y,$,Z){if(G8(Y)){let J=K8(Y);if(J)$.push(J,"");return}for(let J of Y.childNodes)if(J.nodeType===Node.ELEMENT_NODE)U8(J,$,Z);else if(J.nodeType===Node.TEXT_NODE){let q=J.textContent?.trim();if(q)$.push(q,"")}}function G8(Y){for(let $ of Y.childNodes){if($.nodeType===Node.TEXT_NODE)continue;if($.nodeType===Node.ELEMENT_NODE){let Z=$;if(!_8.has(Z.tagName)||Z.hasAttribute("data-md"))return!1}}return Y.childNodes.length>0}function K8(Y){let $="";for(let Z of Y.childNodes)if(Z.nodeType===Node.TEXT_NODE)$+=Z.textContent||"";else if(Z.nodeType===Node.ELEMENT_NODE){let J=Z;if(J.tagName==="CODE")$+="`"+(J.textContent||"")+"`";else $+=J.textContent||""}return $.trim()}function U8(Y,$,Z){let J=Y.getAttribute("data-md");if(J)switch(J){case"section":return H8(Y,$,Z);case"item":return W8(Y,$);case"codeblock":return T8(Y,$);case"callout":return N8(Y,$);case"note":return O8(Y,$);case"markdown":return y8(Y,$);case"table":return F8(Y,$);case"checklist":return B8(Y,$);case"diff":return L8(Y,$);case"mermaid":return M8(Y,$);case"choice":return P8(Y,$);case"multichoice":return S8(Y,$);case"choice-option":case"multichoice-option":return;case"userinput":return b8(Y,$);case"rangeinput":return w8(Y,$);case"checklist-item":return;case"filepreview":return j8(Y,$);case"priority":return A8(Y,$)}if(Y.querySelector("button, input, select, textarea"))return;if(Y.children.length>0)t0(Y,$,Z);else{let q=Y.textContent?.trim();if(q)$.push(q,"")}}function H8(Y,$,Z){let J=Y.getAttribute("data-md-title")||"Untitled",q=Z===0?"##":"###";$.push(`${q} ${J}`,"");let Q=Y.querySelector(":scope > div:last-of-type");if(Q)t0(Q,$,Z+1)}function W8(Y,$){let Z=Y.getAttribute("data-md-label")||"",J=Y.getAttribute("data-md-status"),q=Y.getAttribute("data-md-badge"),Q="-";if(J==="done")Q="- [x]";else if(J)Q="- [ ]";let X=`${Q} **${Z}**`;if(q)X+=` \`${q}\``;$.push(X);let G=Y.querySelector(".text-text-secondary");if(G){let z=[];t0(G,z,0);for(let _ of z)$.push(_?` ${_}`:"")}$.push("")}function T8(Y,$){let Z=Y.getAttribute("data-md-language")||"",q=Y.querySelector("code")?.textContent||"";$.push(`\`\`\`${Z}`,q,"```","")}function N8(Y,$){let Z=Y.getAttribute("data-md-type")||"info",J={info:"Info",warning:"Warning",danger:"Danger",tip:"Tip"},q=C8(Y.querySelector(".text-text-secondary")||Y);$.push(`> **${J[Z]||Z}:** ${q}`,"")}function O8(Y,$){let Z=Y.textContent?.trim()||"";$.push(`> *${Z}*`,"")}function F8(Y,$){let Z=Y.querySelector("table");if(!Z)return;let J=[];for(let q of Z.querySelectorAll("thead th"))J.push(q.textContent?.trim()||"");if(J.length===0)return;$.push(`| ${J.join(" | ")} |`),$.push(`| ${J.map(()=>"---").join(" | ")} |`);for(let q of Z.querySelectorAll("tbody tr")){let Q=[];for(let X of q.querySelectorAll("td"))Q.push(X.textContent?.trim()||"");$.push(`| ${Q.join(" | ")} |`)}$.push("")}function B8(Y,$){for(let Z of Y.querySelectorAll("li")){let J=Z.querySelector(".bg-accent-green")!==null,q=Z.textContent?.trim()||"";$.push(`- [${J?"x":" "}] ${q}`)}$.push("")}function L8(Y,$){let Z=Y.getAttribute("data-md-language")||"";$.push(`\`\`\`diff${Z?` (${Z})`:""}`);for(let J of Y.querySelectorAll("[class*='flex']")){let q=J.querySelector(".text-accent-red")?"-":J.querySelector(".text-accent-green")?"+":" ",Q=J.querySelector("code");if(Q)$.push(`${q} ${Q.textContent}`)}$.push("```","")}function M8(Y,$){let Z=Y.getAttribute("data-md-source")||"";if(Z)$.push("```mermaid",Z,"```","")}function y8(Y,$){let Z=Y.getAttribute("data-md-source")||"";if(Z)$.push(Z,"")}function P8(Y,$){let Z=Y.getAttribute("data-md-label")||"";$.push(`**${Z}:**`);for(let J of Y.querySelectorAll("[data-md='choice-option']")){let q=J.getAttribute("data-md-label")||J.textContent?.trim()||"",Q=J.querySelector(".bg-accent-amber")!==null;$.push(`- ${Q?"(x)":"( )"} ${q}`)}$.push("")}function S8(Y,$){let Z=Y.getAttribute("data-md-label")||"";$.push(`**${Z}:**`);for(let J of Y.querySelectorAll("[data-md='multichoice-option']")){let q=J.getAttribute("data-md-label")||J.textContent?.trim()||"",Q=J.querySelector(".bg-accent-amber")!==null;$.push(`- [${Q?"x":" "}] ${q}`)}$.push("")}function b8(Y,$){let Z=Y.getAttribute("data-md-label")||"",q=Y.querySelector("textarea")?.value?.trim()||"";$.push(`**${Z}:** ${q||"_empty_"}`,"")}function w8(Y,$){let Z=Y.getAttribute("data-md-label")||"",J=Y.querySelector("input[type='range']"),Q=Y.querySelector(".font-mono")?.textContent?.trim()||J?.value||"—";$.push(`**${Z}:** ${Q}`,"")}function j8(Y,$){let Z=Y.getAttribute("data-md-path")||"",J=Y.getAttribute("data-md-lines")||"",Q=Y.querySelector("code")?.textContent||"",X=Z.split(".").pop()||"",G=o0[X]||"",z=J?`${Z} (L${J})`:Z;$.push(z,"",`\`\`\`${G}`,Q,"```","")}function A8(Y,$){}function C8(Y){return Y?.textContent?.trim()||""}import e5,{useEffect as m1,useState as _1,useRef as V1,useCallback as $3,useMemo as Y2,useContext as d8}from"react";import{useEffect as I8,useState as V8,useRef as R8,useContext as D8}from"react";import{jsxDEV as H1,Fragment as p5}from"react/jsx-dev-runtime";function k8(Y){return Y.label||`Round ${Y.revision}`}function E8(Y){let $=Date.now()-new Date(Y).getTime(),Z=Math.floor($/1000);if(Z<60)return"just now";let J=Math.floor(Z/60);if(J<60)return`${J}m ago`;let q=Math.floor(J/60);if(q<24)return`${q}h ago`;return`${Math.floor(q/24)}d ago`}function S0({value:Y,onChange:$,accent:Z="default",className:J}){let{currentRevision:q,revisions:Q}=D8(w1),[X,G]=V8(!1),z=R8(null);I8(()=>{if(!X)return;let K=(W)=>{if(z.current&&!z.current.contains(W.target))G(!1)};return document.addEventListener("mousedown",K),()=>document.removeEventListener("mousedown",K)},[X]);let _=Q.find((K)=>K.revision===Y);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"}[Z]} ${J||""}`,children:[_?k8(_):`Round ${Y}`,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:[...Q].reverse().map((K)=>H1("button",{onClick:()=>{$(K.revision),G(!1)},className:`w-full flex items-center gap-2 px-3 py-2 text-[12px] font-body transition-colors ${K.revision===Y?"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 ${K.revision===q?"bg-accent-green":K.hasFeedback?"bg-accent-amber":"bg-border-hover"}`},void 0,!1,void 0,this),H1("span",{className:"flex-1 text-left truncate",children:K.label?H1(p5,{children:[K.label," ",H1("span",{className:"text-text-tertiary",children:["#",K.revision]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):H1(p5,{children:["Round ",K.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 W=K.canvasFiles?.reduce((T,U)=>{if(U.diffStats)T.added+=U.diffStats.added,T.removed+=U.diffStats.removed;return T},{added:0,removed:0});if(W&&(W.added>0||W.removed>0))return H1("span",{className:"font-mono",children:[H1("span",{className:"text-accent-green",children:["+",W.added]},void 0,!0,void 0,this)," ",H1("span",{className:"text-accent-red",children:["-",W.removed]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);return null})(),K.revision===q?"current":K.hasFeedback?"sent":E8(K.createdAt)]},void 0,!0,void 0,this)]},K.revision,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function x1(Y,$){let Z=Y.length,J=$.length;if(Z===0||J===0)return[];let q=Array.from({length:Z+1},()=>Array(J+1).fill(0));for(let z=1;z<=Z;z++)for(let _=1;_<=J;_++)q[z][_]=Y[z-1]===$[_-1]?q[z-1][_-1]+1:Math.max(q[z-1][_],q[z][_-1]);let Q=[],X=Z,G=J;while(X>0&&G>0)if(Y[X-1]===$[G-1])Q.unshift(Y[X-1]),X--,G--;else if(q[X-1][G]>q[X][G-1])X--;else G--;return Q}function c5(Y){let $=[],Z=[],J=document.createTreeWalker(Y,NodeFilter.SHOW_TEXT,{acceptNode(Q){let X=Q.parentElement;if(!X)return NodeFilter.FILTER_REJECT;if(X.closest("svg, .select-none, [data-no-diff]"))return NodeFilter.FILTER_REJECT;return NodeFilter.FILTER_ACCEPT}}),q;while(q=J.nextNode()){let X=(q.nodeValue||"").match(/\S+|\s+/g);if(!X)continue;let G=0;for(let z of X)$.push(z),Z.push({text:z,node:q,offset:G}),G+=z.length}return{words:$,map:Z}}function E2(Y,$){if(Y.length>5000||$.length>5000)return x8(Y,$);return l5(Y,$)}function l5(Y,$){let Z=n0(Y,$),J=[],q=[],Q=0,X=0,G=0;while(Q<Y.length||X<$.length)if(G<Z.length&&Q<Y.length&&X<$.length&&Y[Q]===Z[G]&&$[X]===Z[G])J.push({type:"same",index:Q}),q.push({type:"same",index:X}),Q++,X++,G++;else if(Q<Y.length&&(G>=Z.length||Y[Q]!==Z[G]))J.push({type:"removed",index:Q}),Q++;else if(X<$.length)q.push({type:"added",index:X}),X++;return{oldOps:J,newOps:q}}function n0(Y,$){let Z=Y.length,J=$.length;if(Z===0||J===0)return[];if(Z===1)return $.includes(Y[0])?[Y[0]]:[];if(J===1)return Y.includes($[0])?[$[0]]:[];if(Z*J<=1e6)return x1(Y,$);let q=Math.floor(Z/2),Q=Y.slice(0,q),X=Y.slice(q),G=d5(Q,$),z=d5([...X].reverse(),[...$].reverse()),_=0,H=0;for(let T=0;T<=J;T++){let U=G[T]+z[J-T];if(U>_)_=U,H=T}let K=$.slice(0,H),W=$.slice(H);return[...n0(Q,K),...n0(X,W)]}function d5(Y,$){let Z=$.length,J=Array(Z+1).fill(0),q=Array(Z+1).fill(0);for(let Q=0;Q<Y.length;Q++){for(let X=1;X<=Z;X++)q[X]=Y[Q]===$[X-1]?J[X-1]+1:Math.max(J[X],q[X-1]);[J,q]=[q,J],q.fill(0)}return J}function x8(Y,$){let J=(U)=>{let B=[];for(let N=0;N<U.length;N+=200){let M=Math.min(N+200,U.length);B.push({start:N,end:M,text:U.slice(N,M).join("")})}return B},q=J(Y),Q=J($),X=q.map((U)=>U.text),G=Q.map((U)=>U.text),z=n0(X,G),_=[],H=[],K=0,W=0,T=0;while(K<q.length||W<Q.length)if(T<z.length&&K<q.length&&W<Q.length&&X[K]===z[T]&&G[W]===z[T]){for(let U=q[K].start;U<q[K].end;U++)_.push({type:"same",index:U});for(let U=Q[W].start;U<Q[W].end;U++)H.push({type:"same",index:U});K++,W++,T++}else if(K<q.length&&(T>=z.length||X[K]!==z[T]))if(W<Q.length&&(T>=z.length||G[W]!==z[T])){let U=l5(Y.slice(q[K].start,q[K].end),$.slice(Q[W].start,Q[W].end));for(let B of U.oldOps)_.push({type:B.type,index:B.index+q[K].start});for(let B of U.newOps)H.push({type:B.type,index:B.index+Q[W].start});K++,W++}else{for(let U=q[K].start;U<q[K].end;U++)_.push({type:"removed",index:U});K++}else if(W<Q.length){for(let U=Q[W].start;U<Q[W].end;U++)H.push({type:"added",index:U});W++}return{oldOps:_,newOps:H}}function r5(Y,$,Z){let J=new Map;for(let q of Y){if(q.type==="same")continue;let Q=$[q.index];if(!Q||!Q.node.parentNode)continue;let X=J.get(Q.node);if(!X)X=[],J.set(Q.node,X);X.push({offset:Q.offset,length:Q.text.length})}for(let[q,Q]of J){if(!q.parentNode)continue;let X=q.nodeValue||"";Q.sort((K,W)=>K.offset-W.offset);let G=[];for(let K of Q){let W=G[G.length-1];if(W&&K.offset<=W.offset+W.length)W.length=Math.max(W.length,K.offset+K.length-W.offset);else G.push({...K})}let z=q.parentNode,_=document.createDocumentFragment(),H=0;for(let K of G){if(K.offset>H)_.appendChild(document.createTextNode(X.slice(H,K.offset)));let W=document.createElement("span");W.className=Z,W.textContent=X.slice(K.offset,K.offset+K.length),_.appendChild(W),H=K.offset+K.length}if(H<X.length)_.appendChild(document.createTextNode(X.slice(H)));z.replaceChild(_,q)}}function e0(Y,$){let Z=m8(Y,$),J=c5(Y),q=c5($),{oldOps:Q,newOps:X}=E2(J.words,q.words),G=Q.some((z)=>z.type==="removed")||X.some((z)=>z.type==="added");return r5(Q,J.map,"diff-removed"),r5(X,q.map,"diff-added"),G||Z}function m8(Y,$){let Z=Array.from(Y.querySelectorAll('[data-md="mermaid"]')),J=Array.from($.querySelectorAll('[data-md="mermaid"]')),q=!1,Q=Math.max(Z.length,J.length);for(let X=0;X<Q;X++){let G=Z[X],z=J[X];if(!G&&z){z.classList.add("diff-block-added"),z.style.position="relative",q=!0;continue}if(G&&!z){G.classList.add("diff-block-removed"),G.style.position="relative",q=!0;continue}if(!G||!z)continue;let _=(G.getAttribute("data-md-source")||"").trim(),H=(z.getAttribute("data-md-source")||"").trim();if(_===H)continue;q=!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 K=_.split(`
|
|
84
84
|
`),W=H.split(`
|
|
85
|
-
`),T=x1(K,W),U=(B,N,M)=>{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 C=0,S=0;while(S<B.length){let y=document.createElement("div");if(y.className="px-3 py-0.5 whitespace-pre-wrap",C<N.length&&B[S]===N[C])y.textContent=" "+B[S],S++,C++;else y.classList.add(M==="old"?"diff-removed":"diff-added"),y.textContent=(M==="old"?"- ":"+ ")+B[S],S++;O.appendChild(y)}return O};G.appendChild(U(K,T,"old")),z.appendChild(U(W,T,"new"))}return q}function _0(Y){let $=[],Z=Y.querySelectorAll(":scope > [data-md]");for(let J of Z)$.push(b0(J));if($.length===0){let J=Y.querySelectorAll("[data-md]"),q=new Set;for(let Q of J){let X=Q.parentElement?.closest("[data-md]");if(X&&Y.contains(X))continue;if(q.has(Q))continue;q.add(Q),$.push(b0(Q))}}return $}function b0(Y){let $=Y.getAttribute("data-md")||"unknown",Z=m8(Y,$),J=[];if($==="section"){let q=Y.querySelector(":scope > div.mt-6, :scope > div:last-child");if(q)for(let Q of q.querySelectorAll(":scope > [data-md]"))J.push(b0(Q))}else if($==="table")for(let q of Y.querySelectorAll(":scope table > tbody > tr"))J.push({key:"tr:"+(q.textContent||"").slice(0,80),type:"tr",element:q,children:[]});else if($==="checklist")for(let q of Y.querySelectorAll(":scope > [data-md='checklist-item']"))J.push(b0(q));else for(let q of Y.querySelectorAll("[data-md]"))if(q.parentElement?.closest("[data-md]")===Y)J.push(b0(q));return{key:Z,type:$,element:Y,children:J}}function m8(Y,$){switch($){case"section":return"section:"+(Y.getAttribute("data-md-title")||"");case"item":return"item:"+(Y.getAttribute("data-task-id")||Y.getAttribute("data-md-label")||"");case"codeblock":case"diff":return $+":"+(Y.textContent||"").slice(0,80);case"checklist-item":return"checklist-item:"+(Y.getAttribute("data-md-label")||Y.textContent?.slice(0,60)||"");case"checklist":return"checklist:"+Y.querySelectorAll("[data-md='checklist-item']").length;case"markdown":return"markdown:"+(Y.getAttribute("data-md-file")||"inline");case"mermaid":return"mermaid:"+(Y.getAttribute("data-md-source")||"").slice(0,80);case"callout":return"callout:"+(Y.getAttribute("data-md-type")||"")+":"+(Y.textContent||"").slice(0,60);default:return $+":"+(Y.getAttribute("data-md-label")||Y.textContent?.slice(0,60)||"")}}function w0(Y,$){let Z=Y.map((_)=>_.key),J=$.map((_)=>_.key),q=x1(Z,J),Q=[],X=0,G=0,z=0;while(X<Y.length||G<$.length)if(z<q.length&&X<Y.length&&G<$.length&&Z[X]===q[z]&&J[G]===q[z]){let _=Y[X],H=$[G],K=_.children.length>0||H.children.length>0?w0(_.children,H.children):void 0;Q.push({kind:"matched",oldBlock:_,newBlock:H,childMatches:K}),X++,G++,z++}else if(X<Y.length&&(z>=q.length||Z[X]!==q[z]))Q.push({kind:"removed",oldBlock:Y[X]}),X++;else if(G<$.length)Q.push({kind:"added",newBlock:$[G]}),G++;return Q}function $2(Y){let $=document.createDocumentFragment(),Z=!1;for(let J of Y)if(J.kind==="removed")Z=!0,$.appendChild(a5(J.oldBlock.element));else if(J.kind==="added")Z=!0,$.appendChild(u8(J.newBlock.element));else{let q=J.newBlock.element.cloneNode(!0),Q=J.newBlock.type;if(Q==="mermaid"){if(n5(J.oldBlock.element,q))Z=!0}else if(J.childMatches&&J.childMatches.length>0&&(Q==="table"||Q==="checklist")){if(s5(q,J.childMatches,Q))Z=!0}else if(J.childMatches&&J.childMatches.length>0){if(o5(J.oldBlock,q,J.childMatches,Q))Z=!0}else if(Q==="markdown"){if(t5(J.oldBlock.element,q))Z=!0}else if(n1(J.oldBlock.element,q,!1))Z=!0;$.appendChild(q)}return{fragment:$,hasChanges:Z}}function a5(Y){let $=Y.cloneNode(!0);return $.classList.add("diff-block-removed"),$.style.position="relative",x2($,"Removed","var(--color-accent-red)"),$}function u8(Y){let $=Y.cloneNode(!0);return $.classList.add("diff-block-added"),$.style.position="relative",x2($,"Added","var(--color-accent-green)"),$}function o5(Y,$,Z,J){let q=!1,Q=g8(Y,$),X,G;if(J==="section"){let z=Y.element.querySelector(":scope > div:first-child"),_=$.querySelector(":scope > div:first-child");if(z&&_){if(n1(z,_,!1))q=!0}X=Y.element.querySelector(":scope > div.mt-6, :scope > div:last-child"),G=$.querySelector(":scope > div.mt-6, :scope > div:last-child")}else X=Y.element,G=$;if(!X||!G)return q;for(let z of Z)if(z.kind==="matched"){let _=Q.newMap.get(z.newBlock.element);if(_){if(z.newBlock.type==="mermaid"){if(n5(z.oldBlock.element,_))q=!0}else if(z.childMatches&&z.childMatches.length>0&&(z.newBlock.type==="table"||z.newBlock.type==="checklist")){if(s5(_,z.childMatches,z.newBlock.type))q=!0}else if(z.childMatches&&z.childMatches.length>0){if(o5(z.oldBlock,_,z.childMatches,z.newBlock.type))q=!0}else if(z.newBlock.type==="markdown"){if(t5(z.oldBlock.element,_))q=!0}else if(n1(z.oldBlock.element,_,!1))q=!0}}else if(z.kind==="removed"){q=!0;let _=a5(z.oldBlock.element),H=f8(Z,z,Q.newMap),K=H?h8(G,H):null;G.insertBefore(_,K)}else if(z.kind==="added"){q=!0;let _=Q.newMap.get(z.newBlock.element);if(_)_.classList.add("diff-block-added"),_.style.position="relative",x2(_,"Added","var(--color-accent-green)")}if(n1(X,G,!0))q=!0;return q}function s5(Y,$,Z){let J=Z==="table"?Y.querySelector(":scope table > tbody"):Y;if(!J)return!1;let q=!1;J.innerHTML="";for(let Q of $)if(Q.kind==="removed"){q=!0;let X=Q.oldBlock.element.cloneNode(!0);X.classList.add(Z==="table"?"diff-row-removed":"diff-item-removed"),J.appendChild(X)}else if(Q.kind==="added"){q=!0;let X=Q.newBlock.element.cloneNode(!0);X.classList.add(Z==="table"?"diff-row-added":"diff-item-added"),J.appendChild(X)}else{let X=Q.newBlock.element.cloneNode(!0);if(n1(Q.oldBlock.element,X,!1))q=!0;J.appendChild(X)}return q}function g8(Y,$){let Z=new Map,J=Y.element.querySelectorAll("[data-md]"),q=$.querySelectorAll("[data-md]");return{newMap:{get(Q){return v8($,Q)}}}}function v8(Y,$){let Z=$.getAttribute("data-md");if(!Z)return null;let J=$.getAttribute("data-md-label"),q=$.getAttribute("data-md-title"),Q=`[data-md="${Z}"]`;if(q)Q+=`[data-md-title="${CSS.escape(q)}"]`;else if(J)Q+=`[data-md-label="${CSS.escape(J)}"]`;let X=Y.querySelectorAll(Q);if(X.length===1)return X[0];let G=($.textContent||"").slice(0,100),z=null,_=-1;for(let H of X){let K=(H.textContent||"").slice(0,100),W=0;for(let T=0;T<Math.min(G.length,K.length);T++)if(G[T]===K[T])W++;if(W>_)_=W,z=H}return z}function f8(Y,$,Z){let J=Y.indexOf($);for(let q=J+1;q<Y.length;q++){let Q=Y[q];if((Q.kind==="matched"||Q.kind==="added")&&Q.newBlock)return Z.get(Q.newBlock.element)||null}return null}function h8(Y,$){let Z=$;while(Z&&Z.parentElement!==Y)Z=Z.parentElement;return Z}function t5(Y,$){let Z=Array.from(Y.children),J=Array.from($.children);if(Z.length===0&&J.length===0)return n1(Y,$,!1);let q=Z.map((W)=>W.tagName.toLowerCase()),Q=J.map((W)=>W.tagName.toLowerCase()),X=x1(q,Q),G=[],z=0,_=0,H=0;while(z<Z.length||_<J.length)if(H<X.length&&z<Z.length&&_<J.length&&q[z]===X[H]&&Q[_]===X[H])G.push({kind:"matched",oldChild:Z[z],newChild:J[_]}),z++,_++,H++;else if(z<Z.length&&(H>=X.length||q[z]!==X[H]))G.push({kind:"removed",oldChild:Z[z]}),z++;else if(_<J.length)G.push({kind:"added",newChild:J[_]}),_++;let K=!1;while($.firstChild)$.removeChild($.firstChild);for(let W of G)if(W.kind==="matched"){let T=(W.oldChild.textContent||"").match(/\S+/g)||[],U=(W.newChild.textContent||"").match(/\S+/g)||[],B=x1(T,U),N=Math.max(T.length,U.length);if((N>0?1-B.length/N:0)>0.5){K=!0;let O=W.oldChild.cloneNode(!0);O.classList.add("diff-block-removed"),$.appendChild(O),W.newChild.classList.add("diff-block-added"),$.appendChild(W.newChild)}else{if(n1(W.oldChild,W.newChild,!1))K=!0;$.appendChild(W.newChild)}}else if(W.kind==="removed"){K=!0;let T=W.oldChild.cloneNode(!0);T.classList.add("diff-block-removed"),$.appendChild(T)}else K=!0,W.newChild.classList.add("diff-block-added"),$.appendChild(W.newChild);return K}function i5(Y,$){let Z=$?new Set(Array.from(Y.querySelectorAll("[data-md]"))):new Set,J=[],q=[],Q=document.createTreeWalker(Y,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 Z)if(_.contains(G))return NodeFilter.FILTER_REJECT}return NodeFilter.FILTER_ACCEPT}}),X;while(X=Q.nextNode()){let z=(X.nodeValue||"").match(/\S+|\s+/g);if(!z)continue;let _=0;for(let H of z)J.push(H),q.push({text:H,node:X,offset:_}),_+=H.length}return{words:J,map:q}}function n1(Y,$,Z){let J=i5(Y,Z),q=i5($,Z);if(J.words.length===0&&q.words.length===0)return!1;let{oldOps:Q,newOps:X}=E2(J.words,q.words),G=Q.some((N)=>N.type==="removed"),z=X.some((N)=>N.type==="added");if(!G&&!z)return!1;let _=[],H=[];for(let N of Q)if(N.type==="same")_.push(N.index);for(let N of X)if(N.type==="same")H.push(N.index);let K=new Map;for(let N=0;N<_.length&&N<H.length;N++)K.set(_[N],H[N]);let W=[];{let N=[],M=-1;for(let O of Q)if(O.type==="same"){if(N.length>0)W.push({text:N.join(""),anchorNewIdx:M>=0?K.get(M)??null:null}),N=[];M=O.index}else if(O.type==="removed")N.push(J.words[O.index]);if(N.length>0)W.push({text:N.join(""),anchorNewIdx:M>=0?K.get(M)??null:null})}let T=new Map,U=new Map;for(let N of X){if(N.type!=="added")continue;let M=q.map[N.index];if(!M?.node.parentNode)continue;let O=T.get(M.node);if(!O)O=[],T.set(M.node,O);O.push({start:M.offset,end:M.offset+M.text.length})}for(let N of W)if(N.anchorNewIdx===null){if(q.map.length>0){let M=q.map[0].node,O=U.get(M);if(!O)O=[],U.set(M,O);O.push({offset:0,text:N.text})}}else{let M=q.map[N.anchorNewIdx];if(!M)continue;let O=U.get(M.node);if(!O)O=[],U.set(M.node,O);O.push({offset:M.offset+M.text.length,text:N.text})}let B=new Set([...T.keys(),...U.keys()]);for(let N of B)p8(N,T.get(N)||[],U.get(N)||[]);return!0}function p8(Y,$,Z){if(!Y.parentNode)return;let J=Y.nodeValue||"";$.sort((H,K)=>H.start-K.start);let q=[];for(let H of $){let K=q[q.length-1];if(K&&H.start<=K.end)K.end=Math.max(K.end,H.end);else q.push({...H})}Z.sort((H,K)=>H.offset-K.offset);let Q=Y.parentNode,X=document.createDocumentFragment(),G=0,z=0,_=0;while(G<=J.length){let H=z<q.length?q[z].start:1/0,K=_<Z.length?Z[_].offset:1/0,W=Math.min(H,K);if(W===1/0){if(G<J.length)X.appendChild(document.createTextNode(J.slice(G)));break}let T=Math.max(W,G);if(T>G)X.appendChild(document.createTextNode(J.slice(G,T))),G=T;while(_<Z.length&&Z[_].offset<=G){let U=document.createElement("span");U.className="diff-removed",U.textContent=Z[_].text,X.appendChild(U),_++}if(z<q.length&&q[z].start<=G){let U=q[z],B=document.createElement("span");B.className="diff-added",B.textContent=J.slice(G,U.end),X.appendChild(B),G=U.end,z++;while(_<Z.length&&Z[_].offset<=G){let N=document.createElement("span");N.className="diff-removed",N.textContent=Z[_].text,X.appendChild(N),_++}}}while(_<Z.length){let H=document.createElement("span");H.className="diff-removed",H.textContent=Z[_].text,X.appendChild(H),_++}Q.replaceChild(X,Y)}function n5(Y,$){let Z=(Y.getAttribute("data-md-source")||"").trim(),J=($.getAttribute("data-md-source")||"").trim();if(Z===J)return!1;let q=Z.split(`
|
|
85
|
+
`),T=x1(K,W),U=(B,N,M)=>{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 C=0,S=0;while(S<B.length){let y=document.createElement("div");if(y.className="px-3 py-0.5 whitespace-pre-wrap",C<N.length&&B[S]===N[C])y.textContent=" "+B[S],S++,C++;else y.classList.add(M==="old"?"diff-removed":"diff-added"),y.textContent=(M==="old"?"- ":"+ ")+B[S],S++;O.appendChild(y)}return O};G.appendChild(U(K,T,"old")),z.appendChild(U(W,T,"new"))}return q}function _0(Y){let $=[],Z=Y.querySelectorAll(":scope > [data-md]");for(let J of Z)$.push(b0(J));if($.length===0){let J=Y.querySelectorAll("[data-md]"),q=new Set;for(let Q of J){let X=Q.parentElement?.closest("[data-md]");if(X&&Y.contains(X))continue;if(q.has(Q))continue;q.add(Q),$.push(b0(Q))}}return $}function b0(Y){let $=Y.getAttribute("data-md")||"unknown",Z=u8(Y,$),J=[];if($==="section"){let q=Y.querySelector(":scope > div.mt-6, :scope > div:last-child");if(q)for(let Q of q.querySelectorAll(":scope > [data-md]"))J.push(b0(Q))}else if($==="table")for(let q of Y.querySelectorAll(":scope table > tbody > tr"))J.push({key:"tr:"+(q.textContent||"").slice(0,80),type:"tr",element:q,children:[]});else if($==="checklist")for(let q of Y.querySelectorAll(":scope > [data-md='checklist-item']"))J.push(b0(q));else for(let q of Y.querySelectorAll("[data-md]"))if(q.parentElement?.closest("[data-md]")===Y)J.push(b0(q));return{key:Z,type:$,element:Y,children:J}}function u8(Y,$){switch($){case"section":return"section:"+(Y.getAttribute("data-md-title")||"");case"item":return"item:"+(Y.getAttribute("data-task-id")||Y.getAttribute("data-md-label")||"");case"codeblock":case"diff":return $+":"+(Y.textContent||"").slice(0,80);case"checklist-item":return"checklist-item:"+(Y.getAttribute("data-md-label")||Y.textContent?.slice(0,60)||"");case"checklist":return"checklist:"+Y.querySelectorAll("[data-md='checklist-item']").length;case"markdown":return"markdown:"+(Y.getAttribute("data-md-file")||"inline");case"mermaid":return"mermaid:"+(Y.getAttribute("data-md-source")||"").slice(0,80);case"callout":return"callout:"+(Y.getAttribute("data-md-type")||"")+":"+(Y.textContent||"").slice(0,60);default:return $+":"+(Y.getAttribute("data-md-label")||Y.textContent?.slice(0,60)||"")}}function w0(Y,$){let Z=Y.map((_)=>_.key),J=$.map((_)=>_.key),q=x1(Z,J),Q=[],X=0,G=0,z=0;while(X<Y.length||G<$.length)if(z<q.length&&X<Y.length&&G<$.length&&Z[X]===q[z]&&J[G]===q[z]){let _=Y[X],H=$[G],K=_.children.length>0||H.children.length>0?w0(_.children,H.children):void 0;Q.push({kind:"matched",oldBlock:_,newBlock:H,childMatches:K}),X++,G++,z++}else if(X<Y.length&&(z>=q.length||Z[X]!==q[z]))Q.push({kind:"removed",oldBlock:Y[X]}),X++;else if(G<$.length)Q.push({kind:"added",newBlock:$[G]}),G++;return Q}function $2(Y){let $=document.createDocumentFragment(),Z=!1;for(let J of Y)if(J.kind==="removed")Z=!0,$.appendChild(a5(J.oldBlock.element));else if(J.kind==="added")Z=!0,$.appendChild(g8(J.newBlock.element));else{let q=J.newBlock.element.cloneNode(!0),Q=J.newBlock.type;if(Q==="mermaid"){if(n5(J.oldBlock.element,q))Z=!0}else if(J.childMatches&&J.childMatches.length>0&&(Q==="table"||Q==="checklist")){if(s5(q,J.childMatches,Q))Z=!0}else if(J.childMatches&&J.childMatches.length>0){if(o5(J.oldBlock,q,J.childMatches,Q))Z=!0}else if(Q==="markdown"){if(t5(J.oldBlock.element,q))Z=!0}else if(n1(J.oldBlock.element,q,!1))Z=!0;$.appendChild(q)}return{fragment:$,hasChanges:Z}}function a5(Y){let $=Y.cloneNode(!0);return $.classList.add("diff-block-removed"),$.style.position="relative",x2($,"Removed","var(--color-accent-red)"),$}function g8(Y){let $=Y.cloneNode(!0);return $.classList.add("diff-block-added"),$.style.position="relative",x2($,"Added","var(--color-accent-green)"),$}function o5(Y,$,Z,J){let q=!1,Q=v8(Y,$),X,G;if(J==="section"){let z=Y.element.querySelector(":scope > div:first-child"),_=$.querySelector(":scope > div:first-child");if(z&&_){if(n1(z,_,!1))q=!0}X=Y.element.querySelector(":scope > div.mt-6, :scope > div:last-child"),G=$.querySelector(":scope > div.mt-6, :scope > div:last-child")}else X=Y.element,G=$;if(!X||!G)return q;for(let z of Z)if(z.kind==="matched"){let _=Q.newMap.get(z.newBlock.element);if(_){if(z.newBlock.type==="mermaid"){if(n5(z.oldBlock.element,_))q=!0}else if(z.childMatches&&z.childMatches.length>0&&(z.newBlock.type==="table"||z.newBlock.type==="checklist")){if(s5(_,z.childMatches,z.newBlock.type))q=!0}else if(z.childMatches&&z.childMatches.length>0){if(o5(z.oldBlock,_,z.childMatches,z.newBlock.type))q=!0}else if(z.newBlock.type==="markdown"){if(t5(z.oldBlock.element,_))q=!0}else if(n1(z.oldBlock.element,_,!1))q=!0}}else if(z.kind==="removed"){q=!0;let _=a5(z.oldBlock.element),H=h8(Z,z,Q.newMap),K=H?p8(G,H):null;G.insertBefore(_,K)}else if(z.kind==="added"){q=!0;let _=Q.newMap.get(z.newBlock.element);if(_)_.classList.add("diff-block-added"),_.style.position="relative",x2(_,"Added","var(--color-accent-green)")}if(n1(X,G,!0))q=!0;return q}function s5(Y,$,Z){let J=Z==="table"?Y.querySelector(":scope table > tbody"):Y;if(!J)return!1;let q=!1;J.innerHTML="";for(let Q of $)if(Q.kind==="removed"){q=!0;let X=Q.oldBlock.element.cloneNode(!0);X.classList.add(Z==="table"?"diff-row-removed":"diff-item-removed"),J.appendChild(X)}else if(Q.kind==="added"){q=!0;let X=Q.newBlock.element.cloneNode(!0);X.classList.add(Z==="table"?"diff-row-added":"diff-item-added"),J.appendChild(X)}else{let X=Q.newBlock.element.cloneNode(!0);if(n1(Q.oldBlock.element,X,!1))q=!0;J.appendChild(X)}return q}function v8(Y,$){let Z=new Map,J=Y.element.querySelectorAll("[data-md]"),q=$.querySelectorAll("[data-md]");return{newMap:{get(Q){return f8($,Q)}}}}function f8(Y,$){let Z=$.getAttribute("data-md");if(!Z)return null;let J=$.getAttribute("data-md-label"),q=$.getAttribute("data-md-title"),Q=`[data-md="${Z}"]`;if(q)Q+=`[data-md-title="${CSS.escape(q)}"]`;else if(J)Q+=`[data-md-label="${CSS.escape(J)}"]`;let X=Y.querySelectorAll(Q);if(X.length===1)return X[0];let G=($.textContent||"").slice(0,100),z=null,_=-1;for(let H of X){let K=(H.textContent||"").slice(0,100),W=0;for(let T=0;T<Math.min(G.length,K.length);T++)if(G[T]===K[T])W++;if(W>_)_=W,z=H}return z}function h8(Y,$,Z){let J=Y.indexOf($);for(let q=J+1;q<Y.length;q++){let Q=Y[q];if((Q.kind==="matched"||Q.kind==="added")&&Q.newBlock)return Z.get(Q.newBlock.element)||null}return null}function p8(Y,$){let Z=$;while(Z&&Z.parentElement!==Y)Z=Z.parentElement;return Z}function t5(Y,$){let Z=Array.from(Y.children),J=Array.from($.children);if(Z.length===0&&J.length===0)return n1(Y,$,!1);let q=Z.map((W)=>W.tagName.toLowerCase()),Q=J.map((W)=>W.tagName.toLowerCase()),X=x1(q,Q),G=[],z=0,_=0,H=0;while(z<Z.length||_<J.length)if(H<X.length&&z<Z.length&&_<J.length&&q[z]===X[H]&&Q[_]===X[H])G.push({kind:"matched",oldChild:Z[z],newChild:J[_]}),z++,_++,H++;else if(z<Z.length&&(H>=X.length||q[z]!==X[H]))G.push({kind:"removed",oldChild:Z[z]}),z++;else if(_<J.length)G.push({kind:"added",newChild:J[_]}),_++;let K=!1;while($.firstChild)$.removeChild($.firstChild);for(let W of G)if(W.kind==="matched"){let T=(W.oldChild.textContent||"").match(/\S+/g)||[],U=(W.newChild.textContent||"").match(/\S+/g)||[],B=x1(T,U),N=Math.max(T.length,U.length);if((N>0?1-B.length/N:0)>0.5){K=!0;let O=W.oldChild.cloneNode(!0);O.classList.add("diff-block-removed"),$.appendChild(O),W.newChild.classList.add("diff-block-added"),$.appendChild(W.newChild)}else{if(n1(W.oldChild,W.newChild,!1))K=!0;$.appendChild(W.newChild)}}else if(W.kind==="removed"){K=!0;let T=W.oldChild.cloneNode(!0);T.classList.add("diff-block-removed"),$.appendChild(T)}else K=!0,W.newChild.classList.add("diff-block-added"),$.appendChild(W.newChild);return K}function i5(Y,$){let Z=$?new Set(Array.from(Y.querySelectorAll("[data-md]"))):new Set,J=[],q=[],Q=document.createTreeWalker(Y,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 Z)if(_.contains(G))return NodeFilter.FILTER_REJECT}return NodeFilter.FILTER_ACCEPT}}),X;while(X=Q.nextNode()){let z=(X.nodeValue||"").match(/\S+|\s+/g);if(!z)continue;let _=0;for(let H of z)J.push(H),q.push({text:H,node:X,offset:_}),_+=H.length}return{words:J,map:q}}function n1(Y,$,Z){let J=i5(Y,Z),q=i5($,Z);if(J.words.length===0&&q.words.length===0)return!1;let{oldOps:Q,newOps:X}=E2(J.words,q.words),G=Q.some((N)=>N.type==="removed"),z=X.some((N)=>N.type==="added");if(!G&&!z)return!1;let _=[],H=[];for(let N of Q)if(N.type==="same")_.push(N.index);for(let N of X)if(N.type==="same")H.push(N.index);let K=new Map;for(let N=0;N<_.length&&N<H.length;N++)K.set(_[N],H[N]);let W=[];{let N=[],M=-1;for(let O of Q)if(O.type==="same"){if(N.length>0)W.push({text:N.join(""),anchorNewIdx:M>=0?K.get(M)??null:null}),N=[];M=O.index}else if(O.type==="removed")N.push(J.words[O.index]);if(N.length>0)W.push({text:N.join(""),anchorNewIdx:M>=0?K.get(M)??null:null})}let T=new Map,U=new Map;for(let N of X){if(N.type!=="added")continue;let M=q.map[N.index];if(!M?.node.parentNode)continue;let O=T.get(M.node);if(!O)O=[],T.set(M.node,O);O.push({start:M.offset,end:M.offset+M.text.length})}for(let N of W)if(N.anchorNewIdx===null){if(q.map.length>0){let M=q.map[0].node,O=U.get(M);if(!O)O=[],U.set(M,O);O.push({offset:0,text:N.text})}}else{let M=q.map[N.anchorNewIdx];if(!M)continue;let O=U.get(M.node);if(!O)O=[],U.set(M.node,O);O.push({offset:M.offset+M.text.length,text:N.text})}let B=new Set([...T.keys(),...U.keys()]);for(let N of B)c8(N,T.get(N)||[],U.get(N)||[]);return!0}function c8(Y,$,Z){if(!Y.parentNode)return;let J=Y.nodeValue||"";$.sort((H,K)=>H.start-K.start);let q=[];for(let H of $){let K=q[q.length-1];if(K&&H.start<=K.end)K.end=Math.max(K.end,H.end);else q.push({...H})}Z.sort((H,K)=>H.offset-K.offset);let Q=Y.parentNode,X=document.createDocumentFragment(),G=0,z=0,_=0;while(G<=J.length){let H=z<q.length?q[z].start:1/0,K=_<Z.length?Z[_].offset:1/0,W=Math.min(H,K);if(W===1/0){if(G<J.length)X.appendChild(document.createTextNode(J.slice(G)));break}let T=Math.max(W,G);if(T>G)X.appendChild(document.createTextNode(J.slice(G,T))),G=T;while(_<Z.length&&Z[_].offset<=G){let U=document.createElement("span");U.className="diff-removed",U.textContent=Z[_].text,X.appendChild(U),_++}if(z<q.length&&q[z].start<=G){let U=q[z],B=document.createElement("span");B.className="diff-added",B.textContent=J.slice(G,U.end),X.appendChild(B),G=U.end,z++;while(_<Z.length&&Z[_].offset<=G){let N=document.createElement("span");N.className="diff-removed",N.textContent=Z[_].text,X.appendChild(N),_++}}}while(_<Z.length){let H=document.createElement("span");H.className="diff-removed",H.textContent=Z[_].text,X.appendChild(H),_++}Q.replaceChild(X,Y)}function n5(Y,$){let Z=(Y.getAttribute("data-md-source")||"").trim(),J=($.getAttribute("data-md-source")||"").trim();if(Z===J)return!1;let q=Z.split(`
|
|
86
86
|
`),Q=J.split(`
|
|
87
|
-
`),X=x1(q,Q),G=[],z=0,_=0,H=0;while(z<q.length||_<Q.length)if(H<X.length&&z<q.length&&_<Q.length&&q[z]===X[H]&&Q[_]===X[H])G.push({type:"same",line:q[z]}),z++,_++,H++;else if(z<q.length&&(H>=X.length||q[z]!==X[H]))G.push({type:"removed",line:q[z]}),z++;else if(_<Q.length)G.push({type:"added",line:Q[_]}),_++;let K=document.createElement("div");K.className="mt-2 bg-bg-code rounded-md overflow-hidden text-tiny font-mono",K.setAttribute("data-no-diff","true");for(let W of G){let T=document.createElement("div");if(T.className="px-3 py-0.5 whitespace-pre-wrap",W.type==="removed")T.classList.add("diff-removed"),T.textContent="- "+W.line;else if(W.type==="added")T.classList.add("diff-added"),T.textContent="+ "+W.line;else T.textContent=" "+W.line;K.appendChild(T)}return $.appendChild(K),!0}function x2(Y,$,Z){let J=document.createElement("span");J.className="diff-block-label",J.textContent=$,J.style.color=Z,J.style.backgroundColor=`color-mix(in srgb, ${Z} 12%, transparent)`,Y.appendChild(J)}import{jsxDEV as p}from"react/jsx-dev-runtime";function d8(Y,$,Z){let J=Y.find((X)=>X.revision===$),q=Y.find((X)=>X.revision===Z),Q=new Set;for(let X of J?.canvasFiles||[])Q.add(X.filename);for(let X of q?.canvasFiles||[])Q.add(X.filename);return[...Q].sort()}function Y3({initialLeft:Y,initialRight:$,sessionId:Z,onExit:J}){let[q,Q]=_1(Y),[X,G]=_1($),[z,_]=_1("unified"),[H,K]=_1(!0),[W,T]=_1(!1),{revisions:U}=c8(w1),B=Y2(()=>d8(U,q,X),[U,q,X]),[N,M]=_1(()=>B[0]||"plan.jsx");m1(()=>{if(!B.includes(N))M(B[0]||"plan.jsx")},[B,N]);let O=Y2(()=>{return U.find((y)=>y.revision===q)?.canvasFiles.some((y)=>y.filename===N)??!1},[U,q,N]),C=Y2(()=>{return U.find((y)=>y.revision===X)?.canvasFiles.some((y)=>y.filename===N)??!1},[U,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(S0,{value:q,onChange:Q,accent:"red"},void 0,!1,void 0,this),p("span",{className:"text-text-tertiary text-[13px]",children:"→"},void 0,!1,void 0,this),p(S0,{value:X,onChange:G,accent:"green"},void 0,!1,void 0,this),W&&!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(r8,{},void 0,!1,void 0,this),p("button",{onClick:J,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),B.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:B.map((S)=>{let y=S.replace(/\.jsx$/,""),b=S===N,I=U.find((f)=>f.revision===q)?.canvasFiles.some((f)=>f.filename===S),k=U.find((f)=>f.revision===X)?.canvasFiles.some((f)=>f.filename===S),c=!I?" (added)":!k?" (removed)":"";return p("button",{onClick:()=>M(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:[y,c&&p("span",{className:`ml-1 text-[10px] ${!I?"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||!C?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(l8,{sessionId:Z,leftRev:q,rightRev:X,filename:N,onDiffResult:(S,y)=>{T(S),K(y)}},`unified-${q}-${X}-${N}`,!1,void 0,this):p(i8,{sessionId:Z,leftRev:q,rightRev:X,filename:N,onDiffResult:(S,y)=>{T(S),K(y)}},`sbs-${q}-${X}-${N}`,!1,void 0,this)]},void 0,!0,void 0,this)}function r8(){let[Y,$]=_1(!0);return m1(()=>{return document.documentElement.dataset.syncScroll=Y?"1":"0",()=>{delete document.documentElement.dataset.syncScroll}},[Y]),p("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[p("input",{type:"checkbox",checked:Y,onChange:(Z)=>$(Z.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 l8({sessionId:Y,leftRev:$,rightRev:Z,filename:J,onDiffResult:q}){let Q=V1(null),X=V1(null),G=V1(null),[z,_]=_1(!1),[H,K]=_1(!1),[W,T]=_1(!1),[U,B]=_1(null),[N,M]=_1(!1),{annotations:O}=Q1(),C=O.filter((y)=>!y.filePath&&(!y.canvasFile||y.canvasFile===J)),{popovers:S}=a1({containerRef:G,restoreKey:W,restoreAnnotations:C,extractContext:(y)=>d1(y,G.current)});return m1(()=>{if(W||U)return;let y=setTimeout(()=>{console.warn("[unified-diff] still loading after 10s",{leftReady:z,rightReady:H,oldRef:!!Q.current,newRef:!!X.current}),M(!0)},1e4);return()=>clearTimeout(y)},[W,U,z,H]),m1(()=>{if(!z||!H||W)return;if(!Q.current||!X.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!Q.current||!X.current||!G.current){console.warn("[unified-diff] refs lost between rAF frames",{old:!!Q.current,new:!!X.current,unified:!!G.current});return}try{let y=_0(Q.current),b=_0(X.current),I=w0(y,b),{fragment:k,hasChanges:c}=$2(I);G.current.innerHTML="",G.current.appendChild(k),T(!0),q(!0,c)}catch(y){console.error("[unified-diff] diff computation failed",y),B(y instanceof Error?y.message:String(y))}})})},[z,H,W]),p("div",{className:"flex-1 min-h-0 overflow-y-auto",children:[!W&&!U&&p("div",{style:{position:"absolute",left:-9999,visibility:"hidden",pointerEvents:"none",width:720},children:[p(R1,{ref:Q,sessionId:Y,revision:$,filename:J,onReady:()=>_(!0),onError:(y)=>B(`Rev ${$}: ${y}`)},void 0,!1,void 0,this),p(R1,{ref:X,sessionId:Y,revision:Z,filename:J,onReady:()=>K(!0),onError:(y)=>B(`Rev ${Z}: ${y}`)},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:[!W&&!U&&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),U&&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:U},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 i8({sessionId:Y,leftRev:$,rightRev:Z,filename:J,onDiffResult:q}){let Q=V1(null),X=V1(null),[G,z]=_1(!1),[_,H]=_1(!1),[K,W]=_1(!1),T=V1(null),U=V1(null),B=V1(null),N=V1(!1),M=$3(()=>z(!0),[]),O=$3(()=>H(!0),[]),{annotations:C}=Q1(),S=C.filter((b)=>!b.filePath&&(!b.canvasFile||b.canvasFile===J)),{popovers:y}=a1({containerRef:T,restoreKey:K,restoreAnnotations:S,extractContext:(b)=>d1(b,T.current)});return m1(()=>{if(!G||!_||K)return;if(!Q.current||!X.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!Q.current||!X.current)return;let b=e0(Q.current,X.current);W(!0),q(!0,b)})})},[G,_,K]),m1(()=>{let b=U.current,I=B.current;if(!b||!I)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,I),f=()=>k(I,b);return b.addEventListener("scroll",c),I.addEventListener("scroll",f),()=>{b.removeEventListener("scroll",c),I.removeEventListener("scroll",f)}},[]),p("div",{ref:T,className:"flex flex-1 min-h-0",children:[p("div",{ref:U,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:Q,sessionId:Y,revision:$,filename:J,onReady:M},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),p("div",{ref:B,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:Y,revision:Z,filename:J,onReady:O},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),y]},void 0,!0,void 0,this)}var R1=e5.memo(e5.forwardRef(({sessionId:Y,revision:$,filename:Z,onReady:J,onError:q},Q)=>{let[X,G]=_1(null),[z,_]=_1(null),[H,K]=_1(!0);m1(()=>{K(!0),_(null);let T=Z.replace(/\.jsx$/,".js");import(`/api/session/${Y}/canvas/${encodeURIComponent(T)}?rev=${$}&t=${Date.now()}`).then((U)=>{if(!U.default){_("Module has no default export"),K(!1),q?.("Module has no default export");return}G(()=>U.default),K(!1)}).catch((U)=>{_(U.message),K(!1),q?.(U.message)})},[Y,$,Z]),m1(()=>{if(!X)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{J()})})},[X]);let W=Y2(()=>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:Q,children:W},void 0,!1,void 0,this)}));import{useState as D1,useContext as m2,useMemo as a8,useRef as j0,useEffect as q3,useCallback as Z3}from"react";import{SessionContext as o8}from"#canvas/runtime";import{jsxDEV as r}from"react/jsx-dev-runtime";function u2(Y,$){if(!Y)return[];return Y.canvasFiles.map((Z)=>{if(!Z.diffStats)return{filename:Z.filename,status:"new"};if(Z.diffStats.added===0&&Z.diffStats.removed===0)return{filename:Z.filename,status:"unchanged",diffStats:Z.diffStats};return{filename:Z.filename,status:"changed",diffStats:Z.diffStats}})}function J3(Y){return Y.filter(($)=>$.status!=="unchanged").map(($)=>$.filename)}function Q3({revision:Y,responseBanner:$}){let{setActiveView:Z}=m2(I1),{revisions:J}=m2(w1),q=J.find((_)=>_.revision===Y),Q=J.find((_)=>_.revision===Y-1),X=a8(()=>u2(q,Q),[q,Q]),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(t8,{change:_,revision:Y,previousRevision:Q?.revision,onOpenTab:()=>Z({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(Y4,{change:_,revision:Y,onOpenTab:()=>Z({type:"canvas",filename:_.filename})},_.filename,!1,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function s8({mode:Y,onChange:$,showDiff:Z}){if(!Z)return null;return r("div",{className:"flex items-center bg-bg-elevated rounded-md p-0.5",children:["rendered","unified","side-by-side"].map((J)=>r("button",{onClick:()=>$(J),className:`text-[10px] font-body px-2 py-0.5 rounded transition-colors ${Y===J?"bg-bg-surface text-text-primary font-medium shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:J==="rendered"?"Full":J==="unified"?"Unified":"Split"},J,!1,void 0,this))},void 0,!1,void 0,this)}function t8({change:Y,revision:$,previousRevision:Z,onOpenTab:J}){let q=Y.filename.replace(/\.jsx$/,""),Q=Y.status==="new",X=Y.diffStats,G=Y.status==="changed"&&Z!=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 ${Q?"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:Q?"new":"modified"},void 0,!1,void 0,this),r("span",{className:"text-[14px] font-body font-medium text-text-primary",children:q},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(s8,{mode:z,onChange:_,showDiff:G},void 0,!1,void 0,this),r("button",{onClick:J,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":Y.filename,children:r(L0,{revision:$,filename:Y.filename},void 0,!1,void 0,this)},void 0,!1,void 0,this):G&&Z!=null?r(n8,{filename:Y.filename,leftRev:Z,rightRev:$,mode:z},`${z}-${$}-${Z}`,!1,void 0,this):null]},void 0,!0,void 0,this)}function n8({filename:Y,leftRev:$,rightRev:Z,mode:J}){let q=m2(o8);if(J==="unified")return r(e8,{sessionId:q,filename:Y,leftRev:$,rightRev:Z},void 0,!1,void 0,this);return r($4,{sessionId:q,filename:Y,leftRev:$,rightRev:Z},void 0,!1,void 0,this)}function e8({sessionId:Y,filename:$,leftRev:Z,rightRev:J}){let q=j0(null),Q=j0(null),X=j0(null),[G,z]=D1(!1),[_,H]=D1(!1),[K,W]=D1(!1),[T,U]=D1(null);return q3(()=>{if(!G||!_||K)return;if(!q.current||!Q.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!q.current||!Q.current||!X.current)return;try{let B=_0(q.current),N=_0(Q.current),M=w0(B,N),{fragment:O}=$2(M);X.current.innerHTML="",X.current.appendChild(O),W(!0)}catch(B){U(B instanceof Error?B.message:String(B))}})})},[G,_,K]),r("div",{children:[!K&&!T&&r("div",{style:{position:"absolute",left:-9999,visibility:"hidden",pointerEvents:"none",width:720},children:[r(R1,{ref:q,sessionId:Y,revision:Z,filename:$,onReady:()=>z(!0),onError:(B)=>U(B)},void 0,!1,void 0,this),r(R1,{ref:Q,sessionId:Y,revision:J,filename:$,onReady:()=>H(!0),onError:(B)=>U(B)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!K&&!T&&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),T&&r("div",{className:"text-accent-red text-[13px] font-body p-3 bg-accent-red-muted rounded-lg",children:T},void 0,!1,void 0,this),r("div",{ref:X},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function $4({sessionId:Y,filename:$,leftRev:Z,rightRev:J}){let q=j0(null),Q=j0(null),[X,G]=D1(!1),[z,_]=D1(!1),[H,K]=D1(!1),W=Z3(()=>G(!0),[]),T=Z3(()=>_(!0),[]);return q3(()=>{if(!X||!z||H)return;if(!q.current||!Q.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!q.current||!Q.current)return;e0(q.current,Q.current),K(!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 ",Z]},void 0,!0,void 0,this),r("div",{className:"px-6 py-4 max-w-[600px] mx-auto",children:r(R1,{ref:q,sessionId:Y,revision:Z,filename:$,onReady:W},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 ",J]},void 0,!0,void 0,this),r("div",{className:"px-6 py-4 max-w-[600px] mx-auto",children:r(R1,{ref:Q,sessionId:Y,revision:J,filename:$,onReady:T},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 Y4({change:Y,revision:$,onOpenTab:Z}){let[J,q]=D1(!1),Q=Y.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:()=>q(!J),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 ${J?"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:Q},void 0,!1,void 0,this),r("button",{onClick:Z,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),J&&r("div",{className:"ml-5 mt-1 mb-3","data-canvas-file":Y.filename,children:r(L0,{revision:$,filename:Y.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 Z4,useCallback as g2}from"react";import{jsxDEV as n}from"react/jsx-dev-runtime";function X3({sessionId:Y,revision:$,open:Z,shareEnabled:J,existingShares:q,onClose:Q,onShareCreated:X,onShareRevoked:G}){let[z,_]=Z2(!1),[H,K]=Z2(!1),[W,T]=Z2(null),[U,B]=Z2(!1),N=q.find((S)=>S.revision===$);Z4(()=>{if(!Z)_(!1),K(!1),T(null),B(!1)},[Z]);let M=g2(async()=>{_(!0),T(null);try{let S=await fetch(`/api/session/${Y}/revision/${$}/share`,{method:"POST"}),y=await S.json();if(!S.ok||!y.ok)throw Error(y.error||`HTTP ${S.status}`);X(y.share)}catch(S){T(S.message||String(S))}finally{_(!1)}},[Y,$,X]),O=g2(async(S)=>{if(!window.confirm("Revoke this share link? Reviewers will no longer be able to view or comment."))return;K(!0),T(null);try{let y=await fetch(`/api/session/${Y}/shares/${S}/revoke`,{method:"POST"}),b=await y.json();if(!y.ok||!b.ok)throw Error(b.error||`HTTP ${y.status}`);G(S)}catch(y){T(y.message||String(y))}finally{K(!1)}},[Y,G]),C=g2((S)=>{navigator.clipboard.writeText(S).then(()=>{B(!0),setTimeout(()=>B(!1),1500)})},[]);if(!Z)return null;return n("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",onClick:Q,children:n("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:[n("div",{className:"flex items-center justify-between mb-3",children:[n("h2",{className:"text-sm font-medium text-text-primary font-body",children:"Share this revision"},void 0,!1,void 0,this),n("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",children:n("span",{className:"text-xs",children:"✕"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!J?n("div",{className:"text-[13px] text-text-secondary font-body space-y-2",children:[n("p",{children:"Canvas sharing is not configured."},void 0,!1,void 0,this),n("p",{className:"text-text-tertiary",children:["Set ",n("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"," ",n("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?n("div",{className:"space-y-3",children:[n("p",{className:"text-[13px] text-text-secondary font-body",children:"This revision is shared:"},void 0,!1,void 0,this),n("div",{className:"flex gap-2",children:[n("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),n("button",{onClick:()=>C(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:U?"Copied!":"Copy"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),N.expiresAt&&n("p",{className:"text-[11px] text-text-tertiary font-body",children:["Expires ",new Date(N.expiresAt).toLocaleDateString(),"."]},void 0,!0,void 0,this),n("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),n("div",{className:"flex items-center justify-between pt-1",children:[n("button",{onClick:M,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&&n("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):n("div",{className:"space-y-3",children:[n("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),n("button",{onClick:M,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),W&&n("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:W},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function z3({onClick:Y,title:$="Share this revision",hasShare:Z}){return n("button",{onClick:Y,className:`group p-1.5 transition-colors ${Z?"text-accent-blue hover:opacity-80":"text-text-tertiary hover:text-text-secondary"}`,title:$,children:n("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[n("circle",{cx:"18",cy:"5",r:"3"},void 0,!1,void 0,this),n("circle",{cx:"6",cy:"12",r:"3"},void 0,!1,void 0,this),n("circle",{cx:"18",cy:"19",r:"3"},void 0,!1,void 0,this),n("line",{x1:"8.59",y1:"13.51",x2:"15.42",y2:"17.49"},void 0,!1,void 0,this),n("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 q4,useEffect as J4,useRef as Q4}from"react";import{jsxDEV as L1}from"react/jsx-dev-runtime";function _3({open:Y,onClose:$,onSubmit:Z}){let[J,q]=q4(""),Q=Q4(null);if(J4(()=>{if(Y)q(""),setTimeout(()=>Q.current?.focus(),50)},[Y]),!Y)return null;let X=J.trim(),G=X.length>=1&&X.length<=80,z=()=>{if(!G)return;Z(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:Q,type:"text",value:J,onChange:(_)=>q(_.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)}import{jsxDEV as F,Fragment as C0}from"react/jsx-dev-runtime";function K3(Y){let $=[];for(let Z of Y)for(let J of Z.annotations)$.push({...J,source:"remote",author:Z.author});return $}var I1=T3({activeView:{type:"overview"},setActiveView:()=>{},openFiles:[],closeFile:()=>{},canvasFiles:[]}),w1=T3({currentRevision:1,selectedRevision:1,revisions:[],setSelectedRevision:()=>{},isReadOnly:!1,compareRevision:null,setCompareRevision:()=>{},agentWatching:!1});function G4(Y){if(Y==="auto")return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";return Y}function U3(Y){document.documentElement.dataset.theme=G4(Y)}function O3(){let[Y,$]=Y1(()=>{let q=localStorage.getItem("canvas-theme");if(q==="light"||q==="dark"||q==="auto")return q;return"auto"});return M1(()=>{if(U3(Y),Y!=="auto")return;let q=window.matchMedia("(prefers-color-scheme: dark)"),Q=()=>U3("auto");return q.addEventListener("change",Q),()=>q.removeEventListener("change",Q)},[Y]),F("button",{onClick:()=>{let q=Y==="auto"?"light":Y==="light"?"dark":"auto";localStorage.setItem("canvas-theme",q),$(q)},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)"}[Y],children:Y==="auto"?F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[F("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"},void 0,!1,void 0,this),F("line",{x1:"8",y1:"21",x2:"16",y2:"21"},void 0,!1,void 0,this),F("line",{x1:"12",y1:"17",x2:"12",y2:"21"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):Y==="dark"?F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:F("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):F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[F("circle",{cx:"12",cy:"12",r:"5"},void 0,!1,void 0,this),F("line",{x1:"12",y1:"1",x2:"12",y2:"3"},void 0,!1,void 0,this),F("line",{x1:"12",y1:"21",x2:"12",y2:"23"},void 0,!1,void 0,this),F("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"},void 0,!1,void 0,this),F("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"},void 0,!1,void 0,this),F("line",{x1:"1",y1:"12",x2:"3",y2:"12"},void 0,!1,void 0,this),F("line",{x1:"21",y1:"12",x2:"23",y2:"12"},void 0,!1,void 0,this),F("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"},void 0,!1,void 0,this),F("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 F3(){let{currentRevision:Y,selectedRevision:$,revisions:Z,setSelectedRevision:J,setCompareRevision:q}=u1.useContext(w1);if(Z.length<=1){let G=Z[0]?.label||`Round ${Y}`;return F("span",{className:"text-[11px] text-text-tertiary font-body",children:G},void 0,!1,void 0,this)}return F("div",{className:"flex flex-col gap-1",children:[F(S0,{value:$,onChange:J,accent:$===Y?"default":"amber"},void 0,!1,void 0,this),F("button",{onClick:()=>{let X;if($===Y)X=[...Z].reverse().find((z)=>z.revision<Y)?.revision??Math.max(1,Y-1);else X=$;q({left:X,right:Y})},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 K4(){let Y=Z1.isShared?Z1.shareId:Z1.sessionId,$=Z1.isShared,[Z,J]=Y1(1),[q,Q]=Y1(1),[X,G]=Y1([]),[z,_]=Y1(null),[H,K]=Y1(!1),[W,T]=Y1(!1),[U,B]=Y1(!1),[N,M]=Y1([]),[O,C]=Y1({type:"overview"}),[S,y]=Y1([]),b=g1(null),[I,k]=Y1(),[c,f]=Y1(!1),[V,E]=Y1(!1),[g,l]=Y1(!1),[w,u]=Y1(!1),[h,A]=Y1([]),[D,L]=Y1(!1),[d,x]=Y1(new Map),[m,a]=Y1(!1),[j,v]=Y1(null),[$1,K1]=Y1(null);M1(()=>{if(!$1)return;let R=setTimeout(()=>K1(null),4000);return()=>clearTimeout(R)},[$1]),M1(()=>{let R=["Agent Canvas"];if(I){let o=I.replace(/\/+$/,"").split("/");R.push(o[o.length-1]||Y)}else if(Y)R.push(Y);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(" — ")},[Y,I,O,z]);let v1=g1(new Map),A1=X.find((R)=>R.revision===q),e1=q!==Z||!!A1?.hasFeedback||W,v2=A0((R)=>{let o=O.type==="overview"?"overview":O.type==="canvas"?`canvas:${O.filename}`:`file:${O.path}`;if(v1.current.set(o,window.scrollY),C(R),R.type==="file")y((e)=>e.includes(R.path)?e:[...e,R.path])},[O]),B3=A0((R)=>{v1.current.delete(`file:${R}`),y((o)=>o.filter((e)=>e!==R)),C((o)=>{if(o.type==="file"&&o.path===R)return N.length>1?{type:"overview"}:{type:"canvas",filename:N[0]||""};return o})},[N]);X4(()=>{let R=O.type==="overview"?"overview":O.type==="canvas"?`canvas:${O.filename}`:`file:${O.path}`;window.scrollTo(0,v1.current.get(R)||0)},[O]),M1(()=>{if(!Y)return;fetch(_5()).then((R)=>R.json()).then((R)=>{if(R.currentRevision)J(R.currentRevision),Q(R.currentRevision),G(R.revisions||[]);if(R.canvasFiles){let o=R.canvasFiles.sort();M(o),C((e)=>{if(e.type==="overview")return o.length>1?e:{type:"canvas",filename:o[0]||""};if(e.type==="canvas"&&(!e.filename||!o.includes(e.filename)))return{type:"canvas",filename:o[0]||""};return e})}if(R.projectRoot)k(R.projectRoot);if(Array.isArray(R.shares))A(R.shares);L(!!R.shareEnabled)}).catch(()=>{})},[Y]),M1(()=>{if(!Y||!q||$)return;fetch(`/api/session/${Y}/revision/${q}/remote-feedback`).then((R)=>R.json()).then((R)=>{if(!Array.isArray(R.entries))return;let o=K3(R.entries);x((e)=>{let y1=new Map(e);return y1.set(q,o),y1})}).catch(()=>{})},[Y,q,$]),M1(()=>{if(!Y)return;if(!T5){K(!0);return}let R=null,o=()=>{let e=window.location.protocol==="https:"?"wss:":"ws:",y1=new WebSocket(`${e}//${window.location.host}/ws/session/${Y}`);b.current=y1,y1.onopen=()=>K(!0),y1.onclose=()=>{K(!1),R=setTimeout(o,2000)},y1.onmessage=(h2)=>{try{let G1=JSON.parse(h2.data);if(G1.type==="plan-updated"){if(J(G1.currentRevision),Q(G1.currentRevision),_(null),G1.revisions){let $0=G1.revisions;G($0);let G0=$0.find((f1)=>f1.revision===G1.currentRevision);if(G0?.canvasFiles){let f1=G0.canvasFiles.map((U0)=>U0.filename).sort();M(f1);let J2=$0.find((U0)=>U0.revision===G1.currentRevision-1),K0=u2(G0,J2),Y0=J3(K0);if(Y0.length===1)C({type:"canvas",filename:Y0[0]});else if(Y0.length>1||f1.length>1)C({type:"overview"});else C({type:"canvas",filename:f1[0]||""})}}}if(G1.type==="revision-updated"){if(G1.revisions)G(G1.revisions)}if(G1.type==="watcher-status")B(!!G1.watching);if(G1.type==="remote-feedback"){let $0=G1.revision,G0=G1.entries||[],f1=K3(G0);x((J2)=>{let K0=new Map(J2),Y0=K0.get($0)||[],U0=new Set(Y0.map((Q2)=>Q2.id)),L3=[...Y0,...f1.filter((Q2)=>!U0.has(Q2.id))];return K0.set($0,L3),K0})}}catch{}}};return o(),()=>{if(R)clearTimeout(R);b.current?.close()}},[Y]);let q2=A0(async(R,o)=>{try{let e=localStorage.getItem(`canvas:${Y}:rev:${q}`),y1=[];if(e)try{y1=(JSON.parse(e).annotations||[]).filter((G1)=>G1.source!=="remote")}catch{}await W5({author:o,revision:q,annotations:y1,generalNote:R}),T(!0),K1({kind:"success",message:"Feedback submitted. The canvas author will see it shortly."})}catch(e){K1({kind:"error",message:`Failed to submit feedback: ${e.message||e}`})}},[Y,q]),f2=A0(async(R)=>{if($){let o=B2();if(!o){v(R),a(!0);return}await q2(R,o);return}if(b.current?.readyState===WebSocket.OPEN)b.current.send(JSON.stringify({type:"submit",feedback:R}))},[$,q2]);if(!Y)return F("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 F(N3.Provider,{value:Y,children:F(w1.Provider,{value:{currentRevision:Z,selectedRevision:q,revisions:X,setSelectedRevision:Q,isReadOnly:e1,compareRevision:z,setCompareRevision:_,agentWatching:U},children:F(J5,{sessionId:Y,revision:q,isReadOnly:e1,remoteAnnotations:d.get(q),children:F(I1.Provider,{value:{activeView:O,setActiveView:v2,openFiles:S,closeFile:B3,canvasFiles:N},children:F(_4.Provider,{value:{setActiveView:v2},children:F("div",{className:"min-h-screen bg-bg-base",children:[F(U4,{sessionId:Y,projectRoot:I,connected:H,onMobileSidebar:()=>f(!c),collapsed:V,onToggle:()=>E((R)=>!R)},void 0,!1,void 0,this),F(H4,{collapsed:g,onToggle:()=>l((R)=>!R),children:F(R2,{onSubmit:f2},void 0,!1,void 0,this)},void 0,!1,void 0,this),z!==null?F("div",{className:`${V?"lg:ml-0":"lg:ml-60"} ${g?"lg:mr-0":"lg:mr-[var(--sidebar-width,320px)]"} transition-[margin] duration-200`,children:F(Y3,{initialLeft:z.left,initialRight:z.right,sessionId:Y,onExit:()=>_(null)},void 0,!1,void 0,this)},void 0,!1,void 0,this):F("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:[F("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:[F("div",{className:"flex items-center gap-2",children:[!$&&F(k2,{currentSessionId:Y,projectRoot:I},void 0,!1,void 0,this),$&&F("span",{className:"text-[11px] text-text-tertiary font-body",children:"Shared canvas"},void 0,!1,void 0,this),!$&&F("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),F("div",{className:"flex items-center gap-1",children:[F(F3,{},void 0,!1,void 0,this),F("button",{onClick:()=>f(!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:F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:F("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),F(O3,{},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),F(W4,{},void 0,!1,void 0,this),O.type==="overview"&&F(Q3,{revision:q,responseBanner:A1?.response?F(H3,{markdown:A1.response},void 0,!1,void 0,this):void 0},void 0,!1,void 0,this),O.type==="canvas"&&N.includes(O.filename)&&F("div",{className:"relative max-w-[720px] mx-auto px-6 pt-12 pb-32",children:[D&&F("div",{className:"absolute top-3 right-12 z-10",children:F(z3,{onClick:()=>u(!0),hasShare:h.some((R)=>R.revision===q),title:h.some((R)=>R.revision===q)?"Manage share link":"Share this revision"},void 0,!1,void 0,this)},void 0,!1,void 0,this),F("button",{onClick:()=>{let R=document.querySelector(`[data-canvas-file="${O.filename}"] .plan-content`);if(!R)return;let o=h5(R);navigator.clipboard.writeText(o).then(()=>{let e=document.getElementById("export-md-btn");if(e)e.setAttribute("data-copied","true"),setTimeout(()=>{e.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:[F("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:[F("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"},void 0,!1,void 0,this),F("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),F("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:F("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&&F(H3,{markdown:A1.response},void 0,!1,void 0,this),F("div",{"data-canvas-file":O.filename,children:F(L0,{revision:q,filename:O.filename},O.filename,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),S.map((R)=>F("div",{style:{display:O.type==="file"&&O.path===R?void 0:"none"},children:F(u5,{path:R},void 0,!1,void 0,this)},R,!1,void 0,this))]},void 0,!0,void 0,this),c&&F("div",{className:"lg:hidden fixed inset-0 z-40 flex",children:[F("div",{className:"flex-1",onClick:()=>f(!1)},void 0,!1,void 0,this),F("div",{className:"w-80 max-w-[85vw] bg-bg-surface border-l border-border-subtle flex flex-col shadow-lg",children:[F("div",{className:"flex items-center justify-between px-4 py-2 border-b border-border-subtle flex-shrink-0",children:[F("span",{className:"text-[11px] font-medium uppercase tracking-widest text-text-tertiary font-body",children:"Sidebar"},void 0,!1,void 0,this),F("button",{onClick:()=>f(!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),F("div",{className:"flex-1 overflow-hidden",children:F(R2,{onSubmit:f2},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),F(X3,{sessionId:Y,revision:q,open:w,shareEnabled:D,existingShares:h,onClose:()=>u(!1),onShareCreated:(R)=>{A((o)=>[...o.filter((e)=>e.shareId!==R.shareId),R]),K1({kind:"success",message:"Share link created. Copy and send it to reviewers."})},onShareRevoked:(R)=>{A((o)=>o.filter((e)=>e.shareId!==R)),K1({kind:"success",message:"Share link revoked."})}},void 0,!1,void 0,this),F(_3,{open:m,onClose:()=>{a(!1),v(null)},onSubmit:async(R)=>{let o=H5(R);if(a(!1),j!==null)await q2(j,o),v(null)}},void 0,!1,void 0,this),$1&&F("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 ${$1.kind==="error"?"bg-accent-red text-white":"bg-accent-green text-white"}`,children:[$1.message,F("button",{onClick:()=>K1(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)},`${Y}:${q}`,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function U4({sessionId:Y,projectRoot:$,connected:Z,onMobileSidebar:J,collapsed:q,onToggle:Q}){let X=Z1.isShared;return F(C0,{children:[q&&F("button",{onClick:Q,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:F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[F("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"},void 0,!1,void 0,this),F("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),F("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 ${q?"-translate-x-full":""}`,children:[F("div",{className:"px-4 pt-4 pb-3 flex-shrink-0 border-b border-border-subtle",children:[F("div",{className:"flex items-center gap-2 mb-2",children:[F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",className:"text-text-tertiary flex-shrink-0",children:F("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?F("span",{className:"text-[12px] font-body text-text-secondary truncate flex-1",children:"Shared canvas"},void 0,!1,void 0,this):F(C0,{children:[F(k2,{currentSessionId:Y,projectRoot:$},void 0,!1,void 0,this),F("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${Z?"bg-accent-green":"bg-accent-red"}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this),F("button",{onClick:Q,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:F("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[F("polyline",{points:"11 17 6 12 11 7"},void 0,!1,void 0,this),F("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),F(F3,{},void 0,!1,void 0,this)]},void 0,!0,void 0,this),F("div",{className:"flex-1 flex flex-col overflow-hidden",children:F(k5,{embedded:!0},void 0,!1,void 0,this)},void 0,!1,void 0,this),F("div",{className:"px-4 py-3 border-t border-border-subtle flex items-center justify-between flex-shrink-0",children:[F("span",{className:"text-[10px] text-text-tertiary font-body uppercase tracking-widest",children:"Theme"},void 0,!1,void 0,this),F(O3,{},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 H4({children:Y,collapsed:$,onToggle:Z}){let[J,q]=Y1(()=>{let H=localStorage.getItem("canvas-sidebar-width");return H?parseInt(H,10):320}),Q=g1(!1),X=g1(0),G=g1(0),z=g1(J);z.current=J;let _=A0((H)=>{H.preventDefault(),Q.current=!0,X.current=H.clientX,G.current=z.current;let K=(T)=>{if(!Q.current)return;let U=X.current-T.clientX,B=Math.max(240,Math.min(600,G.current+U));q(B),z.current=B},W=()=>{Q.current=!1,localStorage.setItem("canvas-sidebar-width",String(z.current)),document.removeEventListener("mousemove",K),document.removeEventListener("mouseup",W),document.body.style.cursor="",document.body.style.userSelect=""};document.addEventListener("mousemove",K),document.addEventListener("mouseup",W),document.body.style.cursor="col-resize",document.body.style.userSelect="none"},[]);return M1(()=>{return document.documentElement.style.setProperty("--sidebar-width",`${J}px`),()=>{document.documentElement.style.removeProperty("--sidebar-width")}},[J]),F(C0,{children:[$&&F("button",{onClick:Z,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:F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:F("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),F("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:J},children:[F("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),u1.Children.map(Y,(H)=>u1.isValidElement(H)?u1.cloneElement(H,{collapseButton:F("button",{onClick:Z,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:F("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[F("polyline",{points:"13 17 18 12 13 7"},void 0,!1,void 0,this),F("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 H3({markdown:Y}){let[$,Z]=Y1(!1),J=G3(()=>t.parse(Y,{async:!1}),[Y]),q=g1(null),{annotations:Q,addAnnotationWithId:X,removeAnnotation:G,updateAnnotation:z,addAnnotationImage:_,removeAnnotationImage:H,activeAnnotationId:K,setActiveAnnotationId:W}=Q1(),[T,U]=Y1(null),[B,N]=Y1(null),M=G3(()=>Q.filter((b)=>b.filePath===T1),[Q]),[O,C]=Y1(Y);if(Y!==O)C(Y),Z(!1);M1(()=>{if(!q.current||M.length===0)return;let b=setTimeout(()=>{if(q.current)h0(q.current,M)},50);return()=>clearTimeout(b)},[J,M.length]);let S=g1(null);if(M1(()=>{v0(K,S.current),S.current=K},[K]),M1(()=>{let b=q.current;if(!b)return;let I=(f)=>{let V=f.target.closest("[data-annotation-id]");if(!V)return;f.stopPropagation();let E=V.getAttribute("data-annotation-id");if(E===K)N({anchorEl:V,annId:E});else W(E)},k=(f)=>{let V=f.target.closest("[data-annotation-id]");if(V)W(V.getAttribute("data-annotation-id"))},c=(f)=>{let V=f.target.closest("[data-annotation-id]"),E=f.relatedTarget?.closest?.("[data-annotation-id]");if(V&&!E)W(null)};return b.addEventListener("click",I),b.addEventListener("mouseover",k),b.addEventListener("mouseout",c),()=>{b.removeEventListener("click",I),b.removeEventListener("mouseover",k),b.removeEventListener("mouseout",c)}},[J,K]),M1(()=>{let b=()=>{let I=window.getSelection();if(!I||I.isCollapsed||!I.toString().trim())return;if(!q.current)return;let k=I.getRangeAt(0);if(!q.current.contains(k.startContainer))return;if(k.startContainer.parentElement?.closest?.("[data-annotation-id]"))return;let c=I.toString().trim();if(c.length<2)return;let f=k.cloneRange(),V=d1(k,q.current),E=`__pending_${Date.now()}`;try{l1(f,E)}catch{}window.getSelection()?.removeAllRanges();let g=document.querySelectorAll(`[data-annotation-id="${E}"]`),l=g[g.length-1];if(!l)return;U({anchorEl:l,tempId:E,snippet:c,ctx:V})};return document.addEventListener("mouseup",b),()=>document.removeEventListener("mouseup",b)},[]),$)return null;let y=document.getElementById("plan-scroll-container");return F("div",{className:"mb-6 rounded-lg border border-accent-blue/20 bg-accent-blue/5 relative",children:[F("button",{onClick:()=>Z(!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:F("span",{className:"text-xs",children:"✕"},void 0,!1,void 0,this)},void 0,!1,void 0,this),F("div",{className:"px-4 py-3 pr-10",children:[F("div",{className:"flex items-center gap-2 mb-1.5",children:[F("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:F("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),F("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),F("div",{ref:q,className:"prose-canvas text-sm",dangerouslySetInnerHTML:{__html:J}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),T&&F(J0,{anchorEl:T.anchorEl,scrollContainer:y,snippet:T.snippet,truncateAt:80,onAdd:(b,I)=>{let k=F1();f0(T.tempId,k),X(k,T.snippet,b,T1,T.ctx,I),U(null)},onCancel:()=>{p0(T.tempId),U(null)}},void 0,!1,void 0,this),B&&(()=>{let b=Q.find((I)=>I.id===B.annId);if(!b)return null;return F(Q0,{anchorEl:B.anchorEl,scrollContainer:y,initialNote:b.note,initialImages:b.images,onUpdate:(I,k)=>{z(B.annId,I);let c=b.images||[];for(let f of k)if(!c.includes(f))_(B.annId,f);for(let f of c)if(!k.includes(f))H(B.annId,f)},onDelete:()=>{G(B.annId),W(null)},onClose:()=>N(null)},void 0,!1,void 0,this)})()]},void 0,!0,void 0,this)}function W4(){let{activeView:Y,setActiveView:$,openFiles:Z,closeFile:J,canvasFiles:q}=u1.useContext(I1),Q=u1.useContext(N3),{addAnnotationWithId:X,setActiveAnnotationId:G}=Q1();if(!(q.length>1||Z.length>0))return null;return F("div",{className:"flex items-center border-b border-border-medium bg-bg-surface overflow-x-auto sticky top-0 z-10",children:[q.length>1&&F(C0,{children:[F("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 ${Y.type==="overview"?"text-text-primary":"text-text-tertiary hover:text-text-secondary"}`,children:[F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",className:"opacity-60",children:F("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",Y.type==="overview"&&F("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),F("span",{className:"w-px h-4 bg-border-medium flex-shrink-0"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),q.map((_,H)=>{let K=_.replace(/\.jsx$/,""),W=Y.type==="canvas"&&Y.filename===_;return F(u1.Fragment,{children:[F("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 ${W?"text-text-primary":"text-text-tertiary hover:text-text-secondary"}`,children:[K,W&&F("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<q.length-1&&F("span",{className:"w-px h-4 bg-border-medium flex-shrink-0"},void 0,!1,void 0,this)]},_,!0,void 0,this)}),Z.length>0&&F(C0,{children:[F("span",{className:"w-px h-4 bg-border-medium flex-shrink-0"},void 0,!1,void 0,this),Z.map((_,H)=>{let K=_.split("/").pop()||_,W=Y.type==="file"&&Y.path===_;return F(u1.Fragment,{children:[F("div",{className:"flex items-center",children:[F("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 ${W?"text-text-primary":"text-text-tertiary hover:text-text-secondary"}`,children:[F(k1,{name:K,type:"file"},void 0,!1,void 0,this),K,W&&F("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),F("button",{onClick:(T)=>{T.stopPropagation(),J(_)},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<Z.length-1&&F("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),F("div",{className:"ml-auto flex items-center gap-1 flex-shrink-0",children:Y.type==="file"&&B1&&F("button",{onClick:async()=>{let _=Y.path;try{let K=await(await fetch(`/api/file?session=${Q}&path=${encodeURIComponent(_)}`)).json();if(!K.error){let W=K.content.split(`
|
|
87
|
+
`),X=x1(q,Q),G=[],z=0,_=0,H=0;while(z<q.length||_<Q.length)if(H<X.length&&z<q.length&&_<Q.length&&q[z]===X[H]&&Q[_]===X[H])G.push({type:"same",line:q[z]}),z++,_++,H++;else if(z<q.length&&(H>=X.length||q[z]!==X[H]))G.push({type:"removed",line:q[z]}),z++;else if(_<Q.length)G.push({type:"added",line:Q[_]}),_++;let K=document.createElement("div");K.className="mt-2 bg-bg-code rounded-md overflow-hidden text-tiny font-mono",K.setAttribute("data-no-diff","true");for(let W of G){let T=document.createElement("div");if(T.className="px-3 py-0.5 whitespace-pre-wrap",W.type==="removed")T.classList.add("diff-removed"),T.textContent="- "+W.line;else if(W.type==="added")T.classList.add("diff-added"),T.textContent="+ "+W.line;else T.textContent=" "+W.line;K.appendChild(T)}return $.appendChild(K),!0}function x2(Y,$,Z){let J=document.createElement("span");J.className="diff-block-label",J.textContent=$,J.style.color=Z,J.style.backgroundColor=`color-mix(in srgb, ${Z} 12%, transparent)`,Y.appendChild(J)}import{jsxDEV as p}from"react/jsx-dev-runtime";function r8(Y,$,Z){let J=Y.find((X)=>X.revision===$),q=Y.find((X)=>X.revision===Z),Q=new Set;for(let X of J?.canvasFiles||[])Q.add(X.filename);for(let X of q?.canvasFiles||[])Q.add(X.filename);return[...Q].sort()}function Y3({initialLeft:Y,initialRight:$,sessionId:Z,onExit:J}){let[q,Q]=_1(Y),[X,G]=_1($),[z,_]=_1("unified"),[H,K]=_1(!0),[W,T]=_1(!1),{revisions:U}=d8(w1),B=Y2(()=>r8(U,q,X),[U,q,X]),[N,M]=_1(()=>B[0]||"plan.jsx");m1(()=>{if(!B.includes(N))M(B[0]||"plan.jsx")},[B,N]);let O=Y2(()=>{return U.find((y)=>y.revision===q)?.canvasFiles.some((y)=>y.filename===N)??!1},[U,q,N]),C=Y2(()=>{return U.find((y)=>y.revision===X)?.canvasFiles.some((y)=>y.filename===N)??!1},[U,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(S0,{value:q,onChange:Q,accent:"red"},void 0,!1,void 0,this),p("span",{className:"text-text-tertiary text-[13px]",children:"→"},void 0,!1,void 0,this),p(S0,{value:X,onChange:G,accent:"green"},void 0,!1,void 0,this),W&&!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(l8,{},void 0,!1,void 0,this),p("button",{onClick:J,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),B.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:B.map((S)=>{let y=S.replace(/\.jsx$/,""),b=S===N,I=U.find((f)=>f.revision===q)?.canvasFiles.some((f)=>f.filename===S),k=U.find((f)=>f.revision===X)?.canvasFiles.some((f)=>f.filename===S),c=!I?" (added)":!k?" (removed)":"";return p("button",{onClick:()=>M(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:[y,c&&p("span",{className:`ml-1 text-[10px] ${!I?"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||!C?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(i8,{sessionId:Z,leftRev:q,rightRev:X,filename:N,onDiffResult:(S,y)=>{T(S),K(y)}},`unified-${q}-${X}-${N}`,!1,void 0,this):p(a8,{sessionId:Z,leftRev:q,rightRev:X,filename:N,onDiffResult:(S,y)=>{T(S),K(y)}},`sbs-${q}-${X}-${N}`,!1,void 0,this)]},void 0,!0,void 0,this)}function l8(){let[Y,$]=_1(!0);return m1(()=>{return document.documentElement.dataset.syncScroll=Y?"1":"0",()=>{delete document.documentElement.dataset.syncScroll}},[Y]),p("label",{className:"flex items-center gap-1.5 cursor-pointer select-none",children:[p("input",{type:"checkbox",checked:Y,onChange:(Z)=>$(Z.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 i8({sessionId:Y,leftRev:$,rightRev:Z,filename:J,onDiffResult:q}){let Q=V1(null),X=V1(null),G=V1(null),[z,_]=_1(!1),[H,K]=_1(!1),[W,T]=_1(!1),[U,B]=_1(null),[N,M]=_1(!1),{annotations:O}=Q1(),C=O.filter((y)=>!y.filePath&&(!y.canvasFile||y.canvasFile===J)),{popovers:S}=a1({containerRef:G,restoreKey:W,restoreAnnotations:C,extractContext:(y)=>d1(y,G.current)});return m1(()=>{if(W||U)return;let y=setTimeout(()=>{console.warn("[unified-diff] still loading after 10s",{leftReady:z,rightReady:H,oldRef:!!Q.current,newRef:!!X.current}),M(!0)},1e4);return()=>clearTimeout(y)},[W,U,z,H]),m1(()=>{if(!z||!H||W)return;if(!Q.current||!X.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!Q.current||!X.current||!G.current){console.warn("[unified-diff] refs lost between rAF frames",{old:!!Q.current,new:!!X.current,unified:!!G.current});return}try{let y=_0(Q.current),b=_0(X.current),I=w0(y,b),{fragment:k,hasChanges:c}=$2(I);G.current.innerHTML="",G.current.appendChild(k),T(!0),q(!0,c)}catch(y){console.error("[unified-diff] diff computation failed",y),B(y instanceof Error?y.message:String(y))}})})},[z,H,W]),p("div",{className:"flex-1 min-h-0 overflow-y-auto",children:[!W&&!U&&p("div",{style:{position:"absolute",left:-9999,visibility:"hidden",pointerEvents:"none",width:720},children:[p(R1,{ref:Q,sessionId:Y,revision:$,filename:J,onReady:()=>_(!0),onError:(y)=>B(`Rev ${$}: ${y}`)},void 0,!1,void 0,this),p(R1,{ref:X,sessionId:Y,revision:Z,filename:J,onReady:()=>K(!0),onError:(y)=>B(`Rev ${Z}: ${y}`)},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:[!W&&!U&&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),U&&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:U},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 a8({sessionId:Y,leftRev:$,rightRev:Z,filename:J,onDiffResult:q}){let Q=V1(null),X=V1(null),[G,z]=_1(!1),[_,H]=_1(!1),[K,W]=_1(!1),T=V1(null),U=V1(null),B=V1(null),N=V1(!1),M=$3(()=>z(!0),[]),O=$3(()=>H(!0),[]),{annotations:C}=Q1(),S=C.filter((b)=>!b.filePath&&(!b.canvasFile||b.canvasFile===J)),{popovers:y}=a1({containerRef:T,restoreKey:K,restoreAnnotations:S,extractContext:(b)=>d1(b,T.current)});return m1(()=>{if(!G||!_||K)return;if(!Q.current||!X.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!Q.current||!X.current)return;let b=e0(Q.current,X.current);W(!0),q(!0,b)})})},[G,_,K]),m1(()=>{let b=U.current,I=B.current;if(!b||!I)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,I),f=()=>k(I,b);return b.addEventListener("scroll",c),I.addEventListener("scroll",f),()=>{b.removeEventListener("scroll",c),I.removeEventListener("scroll",f)}},[]),p("div",{ref:T,className:"flex flex-1 min-h-0",children:[p("div",{ref:U,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:Q,sessionId:Y,revision:$,filename:J,onReady:M},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),p("div",{ref:B,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:Y,revision:Z,filename:J,onReady:O},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this),y]},void 0,!0,void 0,this)}var R1=e5.memo(e5.forwardRef(({sessionId:Y,revision:$,filename:Z,onReady:J,onError:q},Q)=>{let[X,G]=_1(null),[z,_]=_1(null),[H,K]=_1(!0);m1(()=>{K(!0),_(null);let T=Z.replace(/\.jsx$/,".js");import(`/api/session/${Y}/canvas/${encodeURIComponent(T)}?rev=${$}&t=${Date.now()}`).then((U)=>{if(!U.default){_("Module has no default export"),K(!1),q?.("Module has no default export");return}G(()=>U.default),K(!1)}).catch((U)=>{_(U.message),K(!1),q?.(U.message)})},[Y,$,Z]),m1(()=>{if(!X)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{J()})})},[X]);let W=Y2(()=>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:Q,children:W},void 0,!1,void 0,this)}));import{useState as D1,useContext as m2,useMemo as o8,useRef as j0,useEffect as q3,useCallback as Z3}from"react";import{SessionContext as s8}from"#canvas/runtime";import{jsxDEV as r}from"react/jsx-dev-runtime";function u2(Y,$){if(!Y)return[];return Y.canvasFiles.map((Z)=>{if(!Z.diffStats)return{filename:Z.filename,status:"new"};if(Z.diffStats.added===0&&Z.diffStats.removed===0)return{filename:Z.filename,status:"unchanged",diffStats:Z.diffStats};return{filename:Z.filename,status:"changed",diffStats:Z.diffStats}})}function J3(Y){return Y.filter(($)=>$.status!=="unchanged").map(($)=>$.filename)}function Q3({revision:Y,responseBanner:$}){let{setActiveView:Z}=m2(I1),{revisions:J}=m2(w1),q=J.find((_)=>_.revision===Y),Q=J.find((_)=>_.revision===Y-1),X=o8(()=>u2(q,Q),[q,Q]),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(n8,{change:_,revision:Y,previousRevision:Q?.revision,onOpenTab:()=>Z({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(Z4,{change:_,revision:Y,onOpenTab:()=>Z({type:"canvas",filename:_.filename})},_.filename,!1,void 0,this))]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function t8({mode:Y,onChange:$,showDiff:Z}){if(!Z)return null;return r("div",{className:"flex items-center bg-bg-elevated rounded-md p-0.5",children:["rendered","unified","side-by-side"].map((J)=>r("button",{onClick:()=>$(J),className:`text-[10px] font-body px-2 py-0.5 rounded transition-colors ${Y===J?"bg-bg-surface text-text-primary font-medium shadow-sm":"text-text-tertiary hover:text-text-secondary"}`,children:J==="rendered"?"Full":J==="unified"?"Unified":"Split"},J,!1,void 0,this))},void 0,!1,void 0,this)}function n8({change:Y,revision:$,previousRevision:Z,onOpenTab:J}){let q=Y.filename.replace(/\.jsx$/,""),Q=Y.status==="new",X=Y.diffStats,G=Y.status==="changed"&&Z!=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 ${Q?"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:Q?"new":"modified"},void 0,!1,void 0,this),r("span",{className:"text-[14px] font-body font-medium text-text-primary",children:q},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(t8,{mode:z,onChange:_,showDiff:G},void 0,!1,void 0,this),r("button",{onClick:J,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":Y.filename,children:r(L0,{revision:$,filename:Y.filename},void 0,!1,void 0,this)},void 0,!1,void 0,this):G&&Z!=null?r(e8,{filename:Y.filename,leftRev:Z,rightRev:$,mode:z},`${z}-${$}-${Z}`,!1,void 0,this):null]},void 0,!0,void 0,this)}function e8({filename:Y,leftRev:$,rightRev:Z,mode:J}){let q=m2(s8);if(J==="unified")return r($4,{sessionId:q,filename:Y,leftRev:$,rightRev:Z},void 0,!1,void 0,this);return r(Y4,{sessionId:q,filename:Y,leftRev:$,rightRev:Z},void 0,!1,void 0,this)}function $4({sessionId:Y,filename:$,leftRev:Z,rightRev:J}){let q=j0(null),Q=j0(null),X=j0(null),[G,z]=D1(!1),[_,H]=D1(!1),[K,W]=D1(!1),[T,U]=D1(null);return q3(()=>{if(!G||!_||K)return;if(!q.current||!Q.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!q.current||!Q.current||!X.current)return;try{let B=_0(q.current),N=_0(Q.current),M=w0(B,N),{fragment:O}=$2(M);X.current.innerHTML="",X.current.appendChild(O),W(!0)}catch(B){U(B instanceof Error?B.message:String(B))}})})},[G,_,K]),r("div",{children:[!K&&!T&&r("div",{style:{position:"absolute",left:-9999,visibility:"hidden",pointerEvents:"none",width:720},children:[r(R1,{ref:q,sessionId:Y,revision:Z,filename:$,onReady:()=>z(!0),onError:(B)=>U(B)},void 0,!1,void 0,this),r(R1,{ref:Q,sessionId:Y,revision:J,filename:$,onReady:()=>H(!0),onError:(B)=>U(B)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!K&&!T&&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),T&&r("div",{className:"text-accent-red text-[13px] font-body p-3 bg-accent-red-muted rounded-lg",children:T},void 0,!1,void 0,this),r("div",{ref:X},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function Y4({sessionId:Y,filename:$,leftRev:Z,rightRev:J}){let q=j0(null),Q=j0(null),[X,G]=D1(!1),[z,_]=D1(!1),[H,K]=D1(!1),W=Z3(()=>G(!0),[]),T=Z3(()=>_(!0),[]);return q3(()=>{if(!X||!z||H)return;if(!q.current||!Q.current)return;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!q.current||!Q.current)return;e0(q.current,Q.current),K(!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 ",Z]},void 0,!0,void 0,this),r("div",{className:"px-6 py-4 max-w-[600px] mx-auto",children:r(R1,{ref:q,sessionId:Y,revision:Z,filename:$,onReady:W},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 ",J]},void 0,!0,void 0,this),r("div",{className:"px-6 py-4 max-w-[600px] mx-auto",children:r(R1,{ref:Q,sessionId:Y,revision:J,filename:$,onReady:T},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 Z4({change:Y,revision:$,onOpenTab:Z}){let[J,q]=D1(!1),Q=Y.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:()=>q(!J),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 ${J?"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:Q},void 0,!1,void 0,this),r("button",{onClick:Z,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),J&&r("div",{className:"ml-5 mt-1 mb-3","data-canvas-file":Y.filename,children:r(L0,{revision:$,filename:Y.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 q4,useCallback as g2}from"react";import{jsxDEV as n}from"react/jsx-dev-runtime";function X3({sessionId:Y,revision:$,open:Z,shareEnabled:J,existingShares:q,onClose:Q,onShareCreated:X,onShareRevoked:G}){let[z,_]=Z2(!1),[H,K]=Z2(!1),[W,T]=Z2(null),[U,B]=Z2(!1),N=q.find((S)=>S.revision===$);q4(()=>{if(!Z)_(!1),K(!1),T(null),B(!1)},[Z]);let M=g2(async()=>{_(!0),T(null);try{let S=await fetch(`/api/session/${Y}/revision/${$}/share`,{method:"POST"}),y=await S.json();if(!S.ok||!y.ok)throw Error(y.error||`HTTP ${S.status}`);X(y.share)}catch(S){T(S.message||String(S))}finally{_(!1)}},[Y,$,X]),O=g2(async(S)=>{if(!window.confirm("Revoke this share link? Reviewers will no longer be able to view or comment."))return;K(!0),T(null);try{let y=await fetch(`/api/session/${Y}/shares/${S}/revoke`,{method:"POST"}),b=await y.json();if(!y.ok||!b.ok)throw Error(b.error||`HTTP ${y.status}`);G(S)}catch(y){T(y.message||String(y))}finally{K(!1)}},[Y,G]),C=g2((S)=>{navigator.clipboard.writeText(S).then(()=>{B(!0),setTimeout(()=>B(!1),1500)})},[]);if(!Z)return null;return n("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",onClick:Q,children:n("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:[n("div",{className:"flex items-center justify-between mb-3",children:[n("h2",{className:"text-sm font-medium text-text-primary font-body",children:"Share this revision"},void 0,!1,void 0,this),n("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",children:n("span",{className:"text-xs",children:"✕"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!J?n("div",{className:"text-[13px] text-text-secondary font-body space-y-2",children:[n("p",{children:"Canvas sharing is not configured."},void 0,!1,void 0,this),n("p",{className:"text-text-tertiary",children:["Set ",n("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"," ",n("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?n("div",{className:"space-y-3",children:[n("p",{className:"text-[13px] text-text-secondary font-body",children:"This revision is shared:"},void 0,!1,void 0,this),n("div",{className:"flex gap-2",children:[n("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),n("button",{onClick:()=>C(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:U?"Copied!":"Copy"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),N.expiresAt&&n("p",{className:"text-[11px] text-text-tertiary font-body",children:["Expires ",new Date(N.expiresAt).toLocaleDateString(),"."]},void 0,!0,void 0,this),n("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),n("div",{className:"flex items-center justify-between pt-1",children:[n("button",{onClick:M,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&&n("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):n("div",{className:"space-y-3",children:[n("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),n("button",{onClick:M,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),W&&n("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:W},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function z3({onClick:Y,title:$="Share this revision",hasShare:Z}){return n("button",{onClick:Y,className:`group p-1.5 transition-colors ${Z?"text-accent-blue hover:opacity-80":"text-text-tertiary hover:text-text-secondary"}`,title:$,children:n("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[n("circle",{cx:"18",cy:"5",r:"3"},void 0,!1,void 0,this),n("circle",{cx:"6",cy:"12",r:"3"},void 0,!1,void 0,this),n("circle",{cx:"18",cy:"19",r:"3"},void 0,!1,void 0,this),n("line",{x1:"8.59",y1:"13.51",x2:"15.42",y2:"17.49"},void 0,!1,void 0,this),n("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 J4,useEffect as Q4,useRef as X4}from"react";import{jsxDEV as L1}from"react/jsx-dev-runtime";function _3({open:Y,onClose:$,onSubmit:Z}){let[J,q]=J4(""),Q=X4(null);if(Q4(()=>{if(Y)q(""),setTimeout(()=>Q.current?.focus(),50)},[Y]),!Y)return null;let X=J.trim(),G=X.length>=1&&X.length<=80,z=()=>{if(!G)return;Z(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:Q,type:"text",value:J,onChange:(_)=>q(_.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)}import{jsxDEV as F,Fragment as C0}from"react/jsx-dev-runtime";function K3(Y){let $=[];for(let Z of Y)for(let J of Z.annotations)$.push({...J,source:"remote",author:Z.author});return $}var I1=T3({activeView:{type:"overview"},setActiveView:()=>{},openFiles:[],closeFile:()=>{},canvasFiles:[]}),w1=T3({currentRevision:1,selectedRevision:1,revisions:[],setSelectedRevision:()=>{},isReadOnly:!1,compareRevision:null,setCompareRevision:()=>{},agentWatching:!1});function K4(Y){if(Y==="auto")return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";return Y}function U3(Y){document.documentElement.dataset.theme=K4(Y)}function O3(){let[Y,$]=Y1(()=>{let q=localStorage.getItem("canvas-theme");if(q==="light"||q==="dark"||q==="auto")return q;return"auto"});return M1(()=>{if(U3(Y),Y!=="auto")return;let q=window.matchMedia("(prefers-color-scheme: dark)"),Q=()=>U3("auto");return q.addEventListener("change",Q),()=>q.removeEventListener("change",Q)},[Y]),F("button",{onClick:()=>{let q=Y==="auto"?"light":Y==="light"?"dark":"auto";localStorage.setItem("canvas-theme",q),$(q)},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)"}[Y],children:Y==="auto"?F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[F("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"},void 0,!1,void 0,this),F("line",{x1:"8",y1:"21",x2:"16",y2:"21"},void 0,!1,void 0,this),F("line",{x1:"12",y1:"17",x2:"12",y2:"21"},void 0,!1,void 0,this)]},void 0,!0,void 0,this):Y==="dark"?F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:F("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):F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[F("circle",{cx:"12",cy:"12",r:"5"},void 0,!1,void 0,this),F("line",{x1:"12",y1:"1",x2:"12",y2:"3"},void 0,!1,void 0,this),F("line",{x1:"12",y1:"21",x2:"12",y2:"23"},void 0,!1,void 0,this),F("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"},void 0,!1,void 0,this),F("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"},void 0,!1,void 0,this),F("line",{x1:"1",y1:"12",x2:"3",y2:"12"},void 0,!1,void 0,this),F("line",{x1:"21",y1:"12",x2:"23",y2:"12"},void 0,!1,void 0,this),F("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"},void 0,!1,void 0,this),F("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 F3(){let{currentRevision:Y,selectedRevision:$,revisions:Z,setSelectedRevision:J,setCompareRevision:q}=u1.useContext(w1);if(Z.length<=1){let G=Z[0]?.label||`Round ${Y}`;return F("span",{className:"text-[11px] text-text-tertiary font-body",children:G},void 0,!1,void 0,this)}return F("div",{className:"flex flex-col gap-1",children:[F(S0,{value:$,onChange:J,accent:$===Y?"default":"amber"},void 0,!1,void 0,this),F("button",{onClick:()=>{let X;if($===Y)X=[...Z].reverse().find((z)=>z.revision<Y)?.revision??Math.max(1,Y-1);else X=$;q({left:X,right:Y})},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 U4(){let Y=Z1.isShared?Z1.shareId:Z1.sessionId,$=Z1.isShared,[Z,J]=Y1(1),[q,Q]=Y1(1),[X,G]=Y1([]),[z,_]=Y1(null),[H,K]=Y1(!1),[W,T]=Y1(!1),[U,B]=Y1(!1),[N,M]=Y1([]),[O,C]=Y1({type:"overview"}),[S,y]=Y1([]),b=g1(null),[I,k]=Y1(),[c,f]=Y1(!1),[V,E]=Y1(!1),[g,l]=Y1(!1),[w,u]=Y1(!1),[h,A]=Y1([]),[D,L]=Y1(!1),[d,x]=Y1(new Map),[m,a]=Y1(!1),[j,v]=Y1(null),[$1,K1]=Y1(null);M1(()=>{if(!$1)return;let R=setTimeout(()=>K1(null),4000);return()=>clearTimeout(R)},[$1]),M1(()=>{let R=["Agent Canvas"];if(I){let o=I.replace(/\/+$/,"").split("/");R.push(o[o.length-1]||Y)}else if(Y)R.push(Y);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(" — ")},[Y,I,O,z]);let v1=g1(new Map),A1=X.find((R)=>R.revision===q),e1=q!==Z||!!A1?.hasFeedback||W,v2=A0((R)=>{let o=O.type==="overview"?"overview":O.type==="canvas"?`canvas:${O.filename}`:`file:${O.path}`;if(v1.current.set(o,window.scrollY),C(R),R.type==="file")y((e)=>e.includes(R.path)?e:[...e,R.path])},[O]),B3=A0((R)=>{v1.current.delete(`file:${R}`),y((o)=>o.filter((e)=>e!==R)),C((o)=>{if(o.type==="file"&&o.path===R)return N.length>1?{type:"overview"}:{type:"canvas",filename:N[0]||""};return o})},[N]);z4(()=>{let R=O.type==="overview"?"overview":O.type==="canvas"?`canvas:${O.filename}`:`file:${O.path}`;window.scrollTo(0,v1.current.get(R)||0)},[O]),M1(()=>{if(!Y)return;fetch(_5()).then((R)=>R.json()).then((R)=>{if(R.currentRevision)J(R.currentRevision),Q(R.currentRevision),G(R.revisions||[]);if(R.canvasFiles){let o=R.canvasFiles.sort();M(o),C((e)=>{if(e.type==="overview")return o.length>1?e:{type:"canvas",filename:o[0]||""};if(e.type==="canvas"&&(!e.filename||!o.includes(e.filename)))return{type:"canvas",filename:o[0]||""};return e})}if(R.projectRoot)k(R.projectRoot);if(Array.isArray(R.shares))A(R.shares);L(!!R.shareEnabled)}).catch(()=>{})},[Y]),M1(()=>{if(!Y||!q||$)return;fetch(`/api/session/${Y}/revision/${q}/remote-feedback`).then((R)=>R.json()).then((R)=>{if(!Array.isArray(R.entries))return;let o=K3(R.entries);x((e)=>{let y1=new Map(e);return y1.set(q,o),y1})}).catch(()=>{})},[Y,q,$]),M1(()=>{if(!Y)return;if(!T5){K(!0);return}let R=null,o=()=>{let e=window.location.protocol==="https:"?"wss:":"ws:",y1=new WebSocket(`${e}//${window.location.host}/ws/session/${Y}`);b.current=y1,y1.onopen=()=>K(!0),y1.onclose=()=>{K(!1),R=setTimeout(o,2000)},y1.onmessage=(h2)=>{try{let G1=JSON.parse(h2.data);if(G1.type==="plan-updated"){if(J(G1.currentRevision),Q(G1.currentRevision),_(null),G1.revisions){let $0=G1.revisions;G($0);let G0=$0.find((f1)=>f1.revision===G1.currentRevision);if(G0?.canvasFiles){let f1=G0.canvasFiles.map((U0)=>U0.filename).sort();M(f1);let J2=$0.find((U0)=>U0.revision===G1.currentRevision-1),K0=u2(G0,J2),Y0=J3(K0);if(Y0.length===1)C({type:"canvas",filename:Y0[0]});else if(Y0.length>1||f1.length>1)C({type:"overview"});else C({type:"canvas",filename:f1[0]||""})}}}if(G1.type==="revision-updated"){if(G1.revisions)G(G1.revisions)}if(G1.type==="watcher-status")B(!!G1.watching);if(G1.type==="remote-feedback"){let $0=G1.revision,G0=G1.entries||[],f1=K3(G0);x((J2)=>{let K0=new Map(J2),Y0=K0.get($0)||[],U0=new Set(Y0.map((Q2)=>Q2.id)),L3=[...Y0,...f1.filter((Q2)=>!U0.has(Q2.id))];return K0.set($0,L3),K0})}}catch{}}};return o(),()=>{if(R)clearTimeout(R);b.current?.close()}},[Y]);let q2=A0(async(R,o)=>{try{let e=localStorage.getItem(`canvas:${Y}:rev:${q}`),y1=[];if(e)try{y1=(JSON.parse(e).annotations||[]).filter((G1)=>G1.source!=="remote")}catch{}await W5({author:o,revision:q,annotations:y1,generalNote:R}),T(!0),K1({kind:"success",message:"Feedback submitted. The canvas author will see it shortly."})}catch(e){K1({kind:"error",message:`Failed to submit feedback: ${e.message||e}`})}},[Y,q]),f2=A0(async(R)=>{if($){let o=B2();if(!o){v(R),a(!0);return}await q2(R,o);return}if(b.current?.readyState===WebSocket.OPEN)b.current.send(JSON.stringify({type:"submit",feedback:R}))},[$,q2]);if(!Y)return F("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 F(N3.Provider,{value:Y,children:F(w1.Provider,{value:{currentRevision:Z,selectedRevision:q,revisions:X,setSelectedRevision:Q,isReadOnly:e1,compareRevision:z,setCompareRevision:_,agentWatching:U},children:F(J5,{sessionId:Y,revision:q,isReadOnly:e1,remoteAnnotations:d.get(q),children:F(I1.Provider,{value:{activeView:O,setActiveView:v2,openFiles:S,closeFile:B3,canvasFiles:N},children:F(G4.Provider,{value:{setActiveView:v2},children:F("div",{className:"min-h-screen bg-bg-base",children:[F(H4,{sessionId:Y,projectRoot:I,connected:H,onMobileSidebar:()=>f(!c),collapsed:V,onToggle:()=>E((R)=>!R)},void 0,!1,void 0,this),F(W4,{collapsed:g,onToggle:()=>l((R)=>!R),children:F(R2,{onSubmit:f2},void 0,!1,void 0,this)},void 0,!1,void 0,this),z!==null?F("div",{className:`${V?"lg:ml-0":"lg:ml-60"} ${g?"lg:mr-0":"lg:mr-[var(--sidebar-width,320px)]"} transition-[margin] duration-200`,children:F(Y3,{initialLeft:z.left,initialRight:z.right,sessionId:Y,onExit:()=>_(null)},void 0,!1,void 0,this)},void 0,!1,void 0,this):F("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:[F("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:[F("div",{className:"flex items-center gap-2",children:[!$&&F(k2,{currentSessionId:Y,projectRoot:I},void 0,!1,void 0,this),$&&F("span",{className:"text-[11px] text-text-tertiary font-body",children:"Shared canvas"},void 0,!1,void 0,this),!$&&F("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),F("div",{className:"flex items-center gap-1",children:[F(F3,{},void 0,!1,void 0,this),F("button",{onClick:()=>f(!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:F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:F("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),F(O3,{},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),F(T4,{},void 0,!1,void 0,this),O.type==="overview"&&F(Q3,{revision:q,responseBanner:A1?.response?F(H3,{markdown:A1.response},void 0,!1,void 0,this):void 0},void 0,!1,void 0,this),O.type==="canvas"&&N.includes(O.filename)&&F("div",{className:"relative max-w-[720px] mx-auto px-6 pt-12 pb-32",children:[D&&F("div",{className:"absolute top-3 right-12 z-10",children:F(z3,{onClick:()=>u(!0),hasShare:h.some((R)=>R.revision===q),title:h.some((R)=>R.revision===q)?"Manage share link":"Share this revision"},void 0,!1,void 0,this)},void 0,!1,void 0,this),F("button",{onClick:()=>{let R=document.querySelector(`[data-canvas-file="${O.filename}"] .plan-content`);if(!R)return;let o=h5(R);navigator.clipboard.writeText(o).then(()=>{let e=document.getElementById("export-md-btn");if(e)e.setAttribute("data-copied","true"),setTimeout(()=>{e.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:[F("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:[F("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"},void 0,!1,void 0,this),F("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),F("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:F("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&&F(H3,{markdown:A1.response},void 0,!1,void 0,this),F("div",{"data-canvas-file":O.filename,children:F(L0,{revision:q,filename:O.filename},O.filename,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),S.map((R)=>F("div",{style:{display:O.type==="file"&&O.path===R?void 0:"none"},children:F(u5,{path:R},void 0,!1,void 0,this)},R,!1,void 0,this))]},void 0,!0,void 0,this),c&&F("div",{className:"lg:hidden fixed inset-0 z-40 flex",children:[F("div",{className:"flex-1",onClick:()=>f(!1)},void 0,!1,void 0,this),F("div",{className:"w-80 max-w-[85vw] bg-bg-surface border-l border-border-subtle flex flex-col shadow-lg",children:[F("div",{className:"flex items-center justify-between px-4 py-2 border-b border-border-subtle flex-shrink-0",children:[F("span",{className:"text-[11px] font-medium uppercase tracking-widest text-text-tertiary font-body",children:"Sidebar"},void 0,!1,void 0,this),F("button",{onClick:()=>f(!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),F("div",{className:"flex-1 overflow-hidden",children:F(R2,{onSubmit:f2},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),F(X3,{sessionId:Y,revision:q,open:w,shareEnabled:D,existingShares:h,onClose:()=>u(!1),onShareCreated:(R)=>{A((o)=>[...o.filter((e)=>e.shareId!==R.shareId),R]),K1({kind:"success",message:"Share link created. Copy and send it to reviewers."})},onShareRevoked:(R)=>{A((o)=>o.filter((e)=>e.shareId!==R)),K1({kind:"success",message:"Share link revoked."})}},void 0,!1,void 0,this),F(_3,{open:m,onClose:()=>{a(!1),v(null)},onSubmit:async(R)=>{let o=H5(R);if(a(!1),j!==null)await q2(j,o),v(null)}},void 0,!1,void 0,this),$1&&F("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 ${$1.kind==="error"?"bg-accent-red text-white":"bg-accent-green text-white"}`,children:[$1.message,F("button",{onClick:()=>K1(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)},`${Y}:${q}`,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function H4({sessionId:Y,projectRoot:$,connected:Z,onMobileSidebar:J,collapsed:q,onToggle:Q}){let X=Z1.isShared;return F(C0,{children:[q&&F("button",{onClick:Q,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:F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[F("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"},void 0,!1,void 0,this),F("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),F("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 ${q?"-translate-x-full":""}`,children:[F("div",{className:"px-4 pt-4 pb-3 flex-shrink-0 border-b border-border-subtle",children:[F("div",{className:"flex items-center gap-2 mb-2",children:[F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",className:"text-text-tertiary flex-shrink-0",children:F("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?F("span",{className:"text-[12px] font-body text-text-secondary truncate flex-1",children:"Shared canvas"},void 0,!1,void 0,this):F(C0,{children:[F(k2,{currentSessionId:Y,projectRoot:$},void 0,!1,void 0,this),F("span",{className:`w-1.5 h-1.5 rounded-full flex-shrink-0 ${Z?"bg-accent-green":"bg-accent-red"}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this),F("button",{onClick:Q,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:F("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[F("polyline",{points:"11 17 6 12 11 7"},void 0,!1,void 0,this),F("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),F(F3,{},void 0,!1,void 0,this)]},void 0,!0,void 0,this),F("div",{className:"flex-1 flex flex-col overflow-hidden",children:F(k5,{embedded:!0},void 0,!1,void 0,this)},void 0,!1,void 0,this),F("div",{className:"px-4 py-3 border-t border-border-subtle flex items-center justify-between flex-shrink-0",children:[F("span",{className:"text-[10px] text-text-tertiary font-body uppercase tracking-widest",children:"Theme"},void 0,!1,void 0,this),F(O3,{},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 W4({children:Y,collapsed:$,onToggle:Z}){let[J,q]=Y1(()=>{let H=localStorage.getItem("canvas-sidebar-width");return H?parseInt(H,10):320}),Q=g1(!1),X=g1(0),G=g1(0),z=g1(J);z.current=J;let _=A0((H)=>{H.preventDefault(),Q.current=!0,X.current=H.clientX,G.current=z.current;let K=(T)=>{if(!Q.current)return;let U=X.current-T.clientX,B=Math.max(240,Math.min(600,G.current+U));q(B),z.current=B},W=()=>{Q.current=!1,localStorage.setItem("canvas-sidebar-width",String(z.current)),document.removeEventListener("mousemove",K),document.removeEventListener("mouseup",W),document.body.style.cursor="",document.body.style.userSelect=""};document.addEventListener("mousemove",K),document.addEventListener("mouseup",W),document.body.style.cursor="col-resize",document.body.style.userSelect="none"},[]);return M1(()=>{return document.documentElement.style.setProperty("--sidebar-width",`${J}px`),()=>{document.documentElement.style.removeProperty("--sidebar-width")}},[J]),F(C0,{children:[$&&F("button",{onClick:Z,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:F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:F("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),F("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:J},children:[F("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),u1.Children.map(Y,(H)=>u1.isValidElement(H)?u1.cloneElement(H,{collapseButton:F("button",{onClick:Z,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:F("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[F("polyline",{points:"13 17 18 12 13 7"},void 0,!1,void 0,this),F("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 H3({markdown:Y}){let[$,Z]=Y1(!1),J=G3(()=>t.parse(Y,{async:!1}),[Y]),q=g1(null),{annotations:Q,addAnnotationWithId:X,removeAnnotation:G,updateAnnotation:z,addAnnotationImage:_,removeAnnotationImage:H,activeAnnotationId:K,setActiveAnnotationId:W}=Q1(),[T,U]=Y1(null),[B,N]=Y1(null),M=G3(()=>Q.filter((b)=>b.filePath===T1),[Q]),[O,C]=Y1(Y);if(Y!==O)C(Y),Z(!1);M1(()=>{if(!q.current||M.length===0)return;let b=setTimeout(()=>{if(q.current)h0(q.current,M)},50);return()=>clearTimeout(b)},[J,M.length]);let S=g1(null);if(M1(()=>{v0(K,S.current),S.current=K},[K]),M1(()=>{let b=q.current;if(!b)return;let I=(f)=>{let V=f.target.closest("[data-annotation-id]");if(!V)return;f.stopPropagation();let E=V.getAttribute("data-annotation-id");if(E===K)N({anchorEl:V,annId:E});else W(E)},k=(f)=>{let V=f.target.closest("[data-annotation-id]");if(V)W(V.getAttribute("data-annotation-id"))},c=(f)=>{let V=f.target.closest("[data-annotation-id]"),E=f.relatedTarget?.closest?.("[data-annotation-id]");if(V&&!E)W(null)};return b.addEventListener("click",I),b.addEventListener("mouseover",k),b.addEventListener("mouseout",c),()=>{b.removeEventListener("click",I),b.removeEventListener("mouseover",k),b.removeEventListener("mouseout",c)}},[J,K]),M1(()=>{let b=()=>{let I=window.getSelection();if(!I||I.isCollapsed||!I.toString().trim())return;if(!q.current)return;let k=I.getRangeAt(0);if(!q.current.contains(k.startContainer))return;if(k.startContainer.parentElement?.closest?.("[data-annotation-id]"))return;let c=I.toString().trim();if(c.length<2)return;let f=k.cloneRange(),V=d1(k,q.current),E=`__pending_${Date.now()}`;try{l1(f,E)}catch{}window.getSelection()?.removeAllRanges();let g=document.querySelectorAll(`[data-annotation-id="${E}"]`),l=g[g.length-1];if(!l)return;U({anchorEl:l,tempId:E,snippet:c,ctx:V})};return document.addEventListener("mouseup",b),()=>document.removeEventListener("mouseup",b)},[]),$)return null;let y=document.getElementById("plan-scroll-container");return F("div",{className:"mb-6 rounded-lg border border-accent-blue/20 bg-accent-blue/5 relative",children:[F("button",{onClick:()=>Z(!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:F("span",{className:"text-xs",children:"✕"},void 0,!1,void 0,this)},void 0,!1,void 0,this),F("div",{className:"px-4 py-3 pr-10",children:[F("div",{className:"flex items-center gap-2 mb-1.5",children:[F("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:F("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),F("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),F("div",{ref:q,className:"prose-canvas text-sm",dangerouslySetInnerHTML:{__html:J}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),T&&F(J0,{anchorEl:T.anchorEl,scrollContainer:y,snippet:T.snippet,truncateAt:80,onAdd:(b,I)=>{let k=F1();f0(T.tempId,k),X(k,T.snippet,b,T1,T.ctx,I),U(null)},onCancel:()=>{p0(T.tempId),U(null)}},void 0,!1,void 0,this),B&&(()=>{let b=Q.find((I)=>I.id===B.annId);if(!b)return null;return F(Q0,{anchorEl:B.anchorEl,scrollContainer:y,initialNote:b.note,initialImages:b.images,onUpdate:(I,k)=>{z(B.annId,I);let c=b.images||[];for(let f of k)if(!c.includes(f))_(B.annId,f);for(let f of c)if(!k.includes(f))H(B.annId,f)},onDelete:()=>{G(B.annId),W(null)},onClose:()=>N(null)},void 0,!1,void 0,this)})()]},void 0,!0,void 0,this)}function T4(){let{activeView:Y,setActiveView:$,openFiles:Z,closeFile:J,canvasFiles:q}=u1.useContext(I1),Q=u1.useContext(N3),{addAnnotationWithId:X,setActiveAnnotationId:G}=Q1();if(!(q.length>1||Z.length>0))return null;return F("div",{className:"flex items-center border-b border-border-medium bg-bg-surface overflow-x-auto sticky top-0 z-10",children:[q.length>1&&F(C0,{children:[F("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 ${Y.type==="overview"?"text-text-primary":"text-text-tertiary hover:text-text-secondary"}`,children:[F("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",className:"opacity-60",children:F("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",Y.type==="overview"&&F("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),F("span",{className:"w-px h-4 bg-border-medium flex-shrink-0"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),q.map((_,H)=>{let K=_.replace(/\.jsx$/,""),W=Y.type==="canvas"&&Y.filename===_;return F(u1.Fragment,{children:[F("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 ${W?"text-text-primary":"text-text-tertiary hover:text-text-secondary"}`,children:[K,W&&F("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<q.length-1&&F("span",{className:"w-px h-4 bg-border-medium flex-shrink-0"},void 0,!1,void 0,this)]},_,!0,void 0,this)}),Z.length>0&&F(C0,{children:[F("span",{className:"w-px h-4 bg-border-medium flex-shrink-0"},void 0,!1,void 0,this),Z.map((_,H)=>{let K=_.split("/").pop()||_,W=Y.type==="file"&&Y.path===_;return F(u1.Fragment,{children:[F("div",{className:"flex items-center",children:[F("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 ${W?"text-text-primary":"text-text-tertiary hover:text-text-secondary"}`,children:[F(k1,{name:K,type:"file"},void 0,!1,void 0,this),K,W&&F("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),F("button",{onClick:(T)=>{T.stopPropagation(),J(_)},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<Z.length-1&&F("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),F("div",{className:"ml-auto flex items-center gap-1 flex-shrink-0",children:Y.type==="file"&&B1&&F("button",{onClick:async()=>{let _=Y.path;try{let K=await(await fetch(`/api/file?session=${Q}&path=${encodeURIComponent(_)}`)).json();if(!K.error){let W=K.content.split(`
|
|
88
88
|
`).slice(0,3).join(`
|
|
89
89
|
`)+(K.content.split(`
|
|
90
90
|
`).length>3?`
|
|
91
|
-
...`:""),T=F1();X(T,W,"",_),G(T)}}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:[F("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 W3=document.getElementById("root");if(W3)
|
|
91
|
+
...`:""),T=F1();X(T,W,"",_),G(T)}}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:[F("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 W3=document.getElementById("root");if(W3)_4(W3).render(F(U4,{},void 0,!1,void 0,this));export{w1 as RevisionContext,I1 as ActiveViewContext};
|