import{b as Ue}from"./vendor-syntax-DuHI9Ok6.js";import{r as a,j as e,R as Ye}from"./vendor-react-96lCPsRK.js";import{P as Z,Q as q,R as Ce,S as Ke,T as Ge,U as Je,V as Xe,W as Ze,X as qe,Y as Qe,Z as et,_ as tt,$ as nt,a0 as ot}from"./vendor-canvas-D39yWul6.js";import{M as st,a as rt}from"./vendor-markdown-CimbIo6Y.js";import{b as Q,u as at}from"./index-C5ptjuTl.js";import"./vendor-mermaid-CH7SGc99.js";import"./vendor-icons-BaD0x9SL.js";import"./vendor-i18n-DCFGyhQR.js";function it({onAddNote:o,onAddPdf:c,onRun:l,onStop:t,onClearAi:x,onAutoLayout:m,onExport:i,isRunning:b}){const h=a.useRef(null),s=a.useCallback(p=>{var y;const n=(y=p.target.files)==null?void 0:y[0];n&&n.type==="application/pdf"&&c(n),h.current&&(h.current.value="")},[c]),u=[{label:"Add Note",icon:e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 4v16m8-8H4"})}),onClick:o,color:"hover:bg-blue-50 hover:text-blue-600"},{label:"Add PDF",icon:e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z"})}),onClick:()=>{var p;return(p=h.current)==null?void 0:p.click()},color:"hover:bg-red-50 hover:text-red-600"},{type:"divider"},{label:b?"Stop AI":"Run AI",icon:b?e.jsx("div",{className:"w-3 h-3 bg-red-500 rounded-sm"}):e.jsx("svg",{className:"w-4 h-4",fill:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{d:"M8 5v14l11-7z"})}),onClick:b?t:l,color:b?"bg-red-50 text-red-600 hover:bg-red-100":"hover:bg-green-50 hover:text-green-600"},{label:"Clear AI",icon:e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})}),onClick:x,color:"hover:bg-gray-100 hover:text-gray-600"},{type:"divider"},{label:"Auto Layout",icon:e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 6h16M4 10h16M4 14h16M4 18h16"})}),onClick:m,color:"hover:bg-indigo-50 hover:text-indigo-600"},{label:"Export",icon:e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"})}),onClick:i,color:"hover:bg-emerald-50 hover:text-emerald-600"}];return e.jsxs("div",{className:"absolute top-1/2 left-3 -translate-y-1/2 z-20",children:[e.jsx("div",{className:"bg-white/90 backdrop-blur-sm border border-gray-200 rounded-xl shadow-lg p-1.5 flex flex-col gap-1",children:u.map((p,n)=>{if("type"in p&&p.type==="divider")return e.jsx("div",{className:"h-px bg-gray-200 mx-1 my-0.5"},n);const y=p;return e.jsx("button",{onClick:y.onClick,className:`w-8 h-8 rounded-lg flex items-center justify-center text-gray-500 transition-colors ${y.color}`,title:y.label,children:y.icon},y.label)})}),e.jsx("input",{ref:h,type:"file",accept:".pdf",onChange:s,className:"hidden"})]})}const lt=a.memo(it),ae={note:{bg:"bg-blue-50",border:"border-blue-300",accent:"text-blue-600",icon:"📝"},prompt:{bg:"bg-blue-50",border:"border-blue-400",accent:"text-blue-700",icon:"💬"},response:{bg:"bg-purple-50",border:"border-purple-300",accent:"text-purple-700",icon:"🤖"},research:{bg:"bg-teal-50",border:"border-teal-300",accent:"text-teal-700",icon:"🔍"},suggestion:{bg:"bg-amber-50",border:"border-amber-300",accent:"text-amber-700",icon:"💡"},pdf:{bg:"bg-red-50",border:"border-red-300",accent:"text-red-600",icon:"📄"},summary:{bg:"bg-green-50",border:"border-green-300",accent:"text-green-700",icon:"📋"},webpage:{bg:"bg-indigo-50",border:"border-indigo-300",accent:"text-indigo-700",icon:"🌐"}};function ct({id:o,nodeType:c,data:l,selected:t,children:x,actions:m}){const i=ae[c]||ae.note;if(l.compact===!0){const h=l.status==="completed"?"bg-emerald-400":l.status==="running"?"bg-amber-400 animate-pulse":"bg-gray-300";return e.jsxs("div",{className:`
          rounded-xl border-2 shadow-sm w-[220px] transition-shadow cursor-pointer
          ${i.bg} ${i.border}
          ${t?"ring-2 ring-primary/40 shadow-md":"hover:shadow-md"}
        `,onClick:()=>{var s;return(s=l.onNodeClick)==null?void 0:s.call(l,o)},children:[e.jsx(Z,{type:"target",position:q.Top,className:"!w-2 !h-2 !bg-gray-400 !border-gray-300"}),e.jsxs("div",{className:"px-3 py-2",children:[e.jsxs("div",{className:"flex items-center gap-1.5 mb-1",children:[e.jsx("span",{className:"text-sm",children:i.icon}),e.jsx("span",{className:`text-[11px] font-semibold ${i.accent} uppercase tracking-wide truncate`,children:l.label||c})]}),e.jsx("p",{className:"text-[11px] text-gray-500 truncate leading-tight",children:l.summary||(l.content||"").slice(0,60)}),e.jsxs("div",{className:"flex items-center justify-between mt-1.5",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:`w-1.5 h-1.5 rounded-full ${h}`}),e.jsx("span",{className:"text-[10px] text-gray-400 capitalize",children:l.status||"done"})]}),e.jsx("span",{className:"text-[10px] text-gray-400 hover:text-gray-600",children:"Click to expand"})]})]}),e.jsx(Z,{type:"source",position:q.Bottom,className:"!w-2 !h-2 !bg-gray-400 !border-gray-300"})]})}return e.jsxs("div",{className:`
        rounded-xl border-2 shadow-sm min-w-[240px] max-w-[360px] transition-shadow
        ${i.bg} ${i.border}
        ${t?"ring-2 ring-primary/40 shadow-md":"hover:shadow-md"}
      `,children:[e.jsx(Z,{type:"target",position:q.Top,className:"!w-2 !h-2 !bg-gray-400 !border-gray-300"}),e.jsxs("div",{className:`flex items-center justify-between px-3 py-2 border-b ${i.border}/30`,children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"text-sm",children:i.icon}),e.jsx("span",{className:`text-xs font-semibold ${i.accent} uppercase tracking-wide`,children:l.label||c})]}),m&&e.jsx("div",{className:"flex items-center gap-1",children:m})]}),e.jsx("div",{className:"px-3 py-2 text-xs text-gray-700 leading-relaxed whitespace-pre-wrap break-words max-h-[300px] overflow-y-auto",children:x||l.content||""}),e.jsx(Z,{type:"source",position:q.Bottom,className:"!w-2 !h-2 !bg-gray-400 !border-gray-300"})]})}const G=a.memo(ct);function dt({node:o,onClose:c,onPin:l,onDelete:t}){var s,u,p;a.useEffect(()=>{if(!o)return;const n=y=>{y.key==="Escape"&&c()};return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)},[o,c]);const x=a.useCallback(()=>{var y,v;if(!o)return;const n=String(((y=o.data)==null?void 0:y.fullContent)||((v=o.data)==null?void 0:v.content)||"");navigator.clipboard.writeText(n).catch(()=>{})},[o]);if(!o)return null;const m=o.type||"response",i=ae[m]||ae.note,b=String(((s=o.data)==null?void 0:s.fullContent)||((u=o.data)==null?void 0:u.content)||""),h=String(((p=o.data)==null?void 0:p.label)||m);return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 bg-black/20 z-40",onClick:c}),e.jsxs("div",{className:"fixed top-0 right-0 h-full w-[420px] max-w-[90vw] bg-white shadow-2xl z-50 flex flex-col animate-in slide-in-from-right duration-200",children:[e.jsxs("div",{className:`flex items-center justify-between px-4 py-3 border-b ${i.bg}`,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-base",children:i.icon}),e.jsx("span",{className:`text-sm font-semibold ${i.accent} uppercase tracking-wide`,children:h})]}),e.jsx("button",{onClick:c,className:"p-1 rounded-lg hover:bg-black/10 text-gray-500 transition-colors",title:"Close (Esc)",children:e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),e.jsx("div",{className:"flex-1 overflow-y-auto px-4 py-4",children:e.jsx("div",{className:"prose prose-sm max-w-none text-gray-700",children:e.jsx(st,{remarkPlugins:[rt],children:b})})}),e.jsxs("div",{className:"border-t px-4 py-3 flex items-center gap-2",children:[e.jsxs("button",{onClick:()=>{l(o.id),c()},className:"flex-1 flex items-center justify-center gap-1.5 px-3 py-2 rounded-lg bg-primary/10 text-primary text-xs font-medium hover:bg-primary/20 transition-colors",children:[e.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 5a2 2 0 012-2h10a2 2 0 012 2v16l-7-3.5L5 21V5z"})}),"Pin to Canvas"]}),e.jsxs("button",{onClick:x,className:"flex items-center justify-center gap-1.5 px-3 py-2 rounded-lg bg-gray-100 text-gray-600 text-xs font-medium hover:bg-gray-200 transition-colors",children:[e.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})}),"Copy"]}),e.jsxs("button",{onClick:()=>{t(o.id),c()},className:"flex items-center justify-center gap-1.5 px-3 py-2 rounded-lg bg-red-50 text-red-500 text-xs font-medium hover:bg-red-100 transition-colors",children:[e.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})}),"Delete"]})]})]})]})}const ut=a.memo(dt),pt=`
(function() {
  let selectedEl = null;
  let hoverEl = null;

  const highlight = document.createElement('style');
  highlight.textContent = \`
    .__upfyn-hover { outline: 2px dashed #6366f1 !important; outline-offset: 2px; cursor: pointer; }
    .__upfyn-selected { outline: 2px solid #6366f1 !important; outline-offset: 2px; }
  \`;
  document.head.appendChild(highlight);

  document.addEventListener('mouseover', function(e) {
    if (hoverEl && hoverEl !== selectedEl) hoverEl.classList.remove('__upfyn-hover');
    if (e.target === document.body || e.target === document.documentElement) return;
    hoverEl = e.target;
    if (hoverEl !== selectedEl) hoverEl.classList.add('__upfyn-hover');
  }, true);

  document.addEventListener('mouseout', function(e) {
    if (hoverEl && hoverEl !== selectedEl) hoverEl.classList.remove('__upfyn-hover');
  }, true);

  document.addEventListener('click', function(e) {
    e.preventDefault();
    e.stopPropagation();

    if (selectedEl) selectedEl.classList.remove('__upfyn-selected');
    selectedEl = e.target;
    selectedEl.classList.add('__upfyn-selected');

    // Build CSS selector path
    function getSelector(el) {
      if (el.id) return '#' + el.id;
      let path = el.tagName.toLowerCase();
      if (el.className && typeof el.className === 'string') {
        const classes = el.className.split(' ').filter(c => !c.startsWith('__upfyn')).slice(0, 2).join('.');
        if (classes) path += '.' + classes;
      }
      return path;
    }

    const rect = selectedEl.getBoundingClientRect();
    window.parent.postMessage({
      type: 'upfyn-element-selected',
      outerHTML: selectedEl.outerHTML,
      tagName: selectedEl.tagName,
      selector: getSelector(selectedEl),
      rect: { top: rect.top, left: rect.left, width: rect.width, height: rect.height }
    }, '*');
  }, true);

  // Listen for HTML replacement from parent
  window.addEventListener('message', function(e) {
    if (e.data?.type === 'upfyn-replace-element' && selectedEl) {
      const temp = document.createElement('div');
      temp.innerHTML = e.data.newHTML;
      const newEl = temp.firstElementChild || temp.firstChild;
      if (newEl) {
        selectedEl.classList.remove('__upfyn-selected');
        selectedEl.replaceWith(newEl);
        selectedEl = newEl;
        selectedEl.classList.add('__upfyn-selected');

        // Send updated full HTML back
        window.parent.postMessage({
          type: 'upfyn-html-updated',
          fullHTML: document.documentElement.outerHTML
        }, '*');
      }
    }

    if (e.data?.type === 'upfyn-deselect' && selectedEl) {
      selectedEl.classList.remove('__upfyn-selected');
      selectedEl = null;
    }
  });
})();
`;function mt({html:o,pageName:c,nodeId:l,onClose:t,onHtmlChange:x,sendMessage:m,latestMessage:i}){const b=a.useRef(null),[h,s]=a.useState(!1),[u,p]=a.useState(o),[n,y]=a.useState(null),[v,S]=a.useState(""),[_,M]=a.useState(!1),P=a.useRef(null),H=a.useRef(""),A=a.useCallback(N=>{const $=b.current;if(!$)return;const w=$.contentDocument;if(!w)return;const L=N.replace("</body>",`<script>${pt}<\/script></body>`);w.open(),w.write(L),w.close(),p(N)},[]);a.useEffect(()=>{const N=setTimeout(()=>A(o),100);return()=>clearTimeout(N)},[o]),a.useEffect(()=>{const N=$=>{var w,L;if(((w=$.data)==null?void 0:w.type)==="upfyn-element-selected"&&(y({outerHTML:$.data.outerHTML,tagName:$.data.tagName,selector:$.data.selector,rect:$.data.rect}),S(""),setTimeout(()=>{var j;return(j=P.current)==null?void 0:j.focus()},100)),((L=$.data)==null?void 0:L.type)==="upfyn-html-updated"){let j=$.data.fullHTML;j=j.replace(/<style>[^<]*__upfyn[^<]*<\/style>/g,""),j=j.replace(/<script>[^]*?<\/script>\s*<\/body>/,"</body>"),j=j.replace(/ class="__upfyn-[^"]*"/g,""),j=j.replace(/ class=""/g,""),p(j),x(l,j)}};return window.addEventListener("message",N),()=>window.removeEventListener("message",N)},[l,x]),a.useEffect(()=>{var N,$;if(!(!i||!_)){if(i.type==="claude-response"||i.type==="assistant"){const w=i.content||i.text||i.message||"";w&&(H.current+=w)}if(i.type==="claude-complete"||i.type==="message_stop"){const w=H.current.trim();if(w){let L=w;const j=w.match(/```html?\s*\n([\s\S]*?)```/);j&&(L=j[1].trim()),($=(N=b.current)==null?void 0:N.contentWindow)==null||$.postMessage({type:"upfyn-replace-element",newHTML:L},"*")}M(!1),H.current=""}}},[i,_]);const J=a.useCallback(()=>{const N=v.trim();if(!N||!m||!n||_)return;const $=`You are editing an HTML element inline on a web page. Return ONLY the updated HTML element — no explanation, no markdown, just the raw HTML.

Current element (${n.tagName}):
\`\`\`html
${n.outerHTML}
\`\`\`

User instruction: ${N}

Return the updated HTML element:`;H.current="",M(!0),m({type:"claude-command",command:$,options:{canvasMode:!0}})},[v,m,n,_]);a.useEffect(()=>{const N=$=>{var w,L;$.key==="Escape"&&(n?((L=(w=b.current)==null?void 0:w.contentWindow)==null||L.postMessage({type:"upfyn-deselect"},"*"),y(null)):t())};return document.addEventListener("keydown",N),()=>document.removeEventListener("keydown",N)},[n,t]);const V=a.useCallback(()=>{A(u),x(l,u),s(!1)},[u,l,x,A]);return e.jsxs("div",{className:"fixed inset-0 z-50 bg-white flex flex-col",children:[e.jsxs("div",{className:"flex items-center justify-between px-4 py-2 border-b bg-gray-50",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("button",{onClick:t,className:"flex items-center gap-1.5 px-3 py-1.5 rounded-lg hover:bg-gray-200 text-sm text-gray-600 transition-colors",children:[e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M10 19l-7-7m0 0l7-7m-7 7h18"})}),"Back to Canvas"]}),e.jsx("span",{className:"text-sm font-medium text-gray-800",children:c})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{onClick:()=>s(!h),className:`px-3 py-1.5 rounded-lg text-xs font-medium transition-colors ${h?"bg-indigo-100 text-indigo-700":"bg-gray-100 text-gray-600 hover:bg-gray-200"}`,children:h?"</> Code":"</> View Code"}),n&&e.jsxs("span",{className:"text-xs text-indigo-500 bg-indigo-50 px-2 py-1 rounded",children:["Selected: <",n.tagName.toLowerCase(),">"]})]})]}),e.jsxs("div",{className:"flex-1 flex min-h-0",children:[e.jsxs("div",{className:`relative ${h?"w-1/2":"w-full"}`,children:[e.jsx("iframe",{ref:b,className:"w-full h-full border-none",sandbox:"allow-scripts allow-same-origin",title:c}),n&&e.jsx("div",{className:"absolute z-30 animate-in fade-in duration-150",style:{top:Math.min(n.rect.top+n.rect.height+8,window.innerHeight-120),left:Math.max(8,Math.min(n.rect.left,window.innerWidth-360))},children:e.jsxs("div",{className:"bg-white rounded-xl shadow-2xl border border-indigo-200 p-2 w-[340px]",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{ref:P,type:"text",value:v,onChange:N=>S(N.target.value),onKeyDown:N=>{N.key==="Enter"&&(N.preventDefault(),J())},placeholder:`Change this ${n.tagName.toLowerCase()}...`,className:"flex-1 text-sm border border-gray-200 rounded-lg px-3 py-2 outline-none focus:border-indigo-400",disabled:_}),e.jsx("button",{onClick:J,disabled:!v.trim()||_,className:"shrink-0 w-8 h-8 rounded-lg bg-indigo-500 text-white flex items-center justify-center disabled:opacity-40 hover:bg-indigo-600 transition-colors",children:_?e.jsx("div",{className:"w-3 h-3 border-2 border-white/30 border-t-white rounded-full animate-spin"}):e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 7l5 5m0 0l-5 5m5-5H6"})})})]}),_&&e.jsx("p",{className:"text-[10px] text-indigo-400 mt-1 px-1",children:"AI is editing this element..."})]})})]}),h&&e.jsxs("div",{className:"w-1/2 border-l flex flex-col",children:[e.jsxs("div",{className:"px-3 py-2 border-b bg-gray-800 flex items-center justify-between",children:[e.jsx("span",{className:"text-xs text-gray-300 font-mono",children:"HTML Source"}),e.jsx("button",{onClick:V,className:"px-3 py-1 rounded text-xs font-medium bg-indigo-500 text-white hover:bg-indigo-600 transition-colors",children:"Apply Changes"})]}),e.jsx("textarea",{value:u,onChange:N=>p(N.target.value),className:"flex-1 bg-gray-900 text-green-300 font-mono text-xs p-4 resize-none outline-none leading-relaxed",spellCheck:!1})]})]}),e.jsx("div",{className:"px-4 py-1.5 border-t bg-gray-50 text-[10px] text-gray-400",children:"Click any element to select it, then type your change. Press Esc to deselect or close."})]})}const ht=a.memo(mt);function xt({nodes:o,projectName:c,onClose:l}){const[t,x]=a.useState("website"),[m,i]=a.useState("exported-site"),[b,h]=a.useState(!1),[s,u]=a.useState(null),[p,n]=a.useState(!1),y=o.filter(P=>P.selected),v=(p&&y.length>0?y:o).filter(P=>P.type==="webpage"),S=(p&&y.length>0?y:o).filter(P=>P.type&&["response","research","suggestion","note","summary"].includes(P.type)),_=t==="website"?v.length:S.length,M=a.useCallback(async()=>{var P,H,A,J,V,N,$;h(!0),u(null);try{if(t==="website"){const w=[];for(let j=0;j<v.length;j++){const B=v[j],te=String(((P=B.data)==null?void 0:P.pageName)||((H=B.data)==null?void 0:H.label)||`page-${j+1}`).toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")+".html",ie=String(((A=B.data)==null?void 0:A.html)||((J=B.data)==null?void 0:J.content)||"");w.push({name:te,content:ie})}let L=0;for(const j of w)try{const B=`${m}/${j.name}`;await Q.saveFile(c,B,j.content),L++}catch{}if(w.length>1&&!w.some(j=>j.name==="index.html")){const j=`<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Site Index</title>
  <style>
    body { font-family: system-ui, sans-serif; max-width: 600px; margin: 40px auto; padding: 0 20px; }
    h1 { color: #1f2937; }
    ul { list-style: none; padding: 0; }
    li { margin: 8px 0; }
    a { color: #4f46e5; text-decoration: none; padding: 8px 16px; border: 1px solid #e5e7eb; border-radius: 8px; display: inline-block; }
    a:hover { background: #eef2ff; }
  </style>
</head>
<body>
  <h1>Pages</h1>
  <ul>
    ${w.map(B=>`<li><a href="${B.name}">${B.name.replace(".html","")}</a></li>`).join(`
    `)}
  </ul>
</body>
</html>`;try{await Q.saveFile(c,`${m}/index.html`,j),L++}catch{}}u({ok:L>0,message:L>0?`Exported ${L} file(s) to ${m}/`:"Export failed — make sure a machine is connected"})}else{let w=0;for(let L=0;L<S.length;L++){const j=S[L],B=String(((V=j.data)==null?void 0:V.label)||j.type||`note-${L+1}`),ee=B.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-]/g,"")+".md",te=String(((N=j.data)==null?void 0:N.fullContent)||(($=j.data)==null?void 0:$.content)||"");try{await Q.saveFile(c,`${m}/${ee}`,`# ${B}

${te}`),w++}catch{}}u({ok:w>0,message:w>0?`Exported ${w} file(s) to ${m}/`:"Export failed — make sure a machine is connected"})}}catch{u({ok:!1,message:"Export failed — check your connection"})}finally{h(!1)}},[t,v,S,m,c]);return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 bg-black/30 z-40",onClick:l}),e.jsxs("div",{className:"fixed top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 z-50 w-[400px] max-w-[90vw] bg-white rounded-2xl shadow-2xl",children:[e.jsxs("div",{className:"flex items-center justify-between px-5 py-4 border-b",children:[e.jsx("h3",{className:"text-sm font-semibold text-gray-800",children:"Export Canvas"}),e.jsx("button",{onClick:l,className:"p-1 rounded hover:bg-gray-100 text-gray-400",children:e.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),e.jsxs("div",{className:"px-5 py-4 space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-medium text-gray-600 block mb-1.5",children:"Scope"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("button",{onClick:()=>n(!1),className:`flex-1 px-3 py-2 rounded-lg text-xs font-medium border transition-colors ${p?"border-gray-200 text-gray-500 hover:bg-gray-50":"bg-indigo-50 border-indigo-300 text-indigo-700"}`,children:"All nodes"}),e.jsxs("button",{onClick:()=>n(!0),disabled:y.length===0,className:`flex-1 px-3 py-2 rounded-lg text-xs font-medium border transition-colors disabled:opacity-40 ${p?"bg-indigo-50 border-indigo-300 text-indigo-700":"border-gray-200 text-gray-500 hover:bg-gray-50"}`,children:["Selected (",y.length,")"]})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-medium text-gray-600 block mb-1.5",children:"Format"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("button",{onClick:()=>x("website"),className:`flex-1 px-3 py-2 rounded-lg text-xs font-medium border transition-colors ${t==="website"?"bg-indigo-50 border-indigo-300 text-indigo-700":"border-gray-200 text-gray-500 hover:bg-gray-50"}`,children:["Website (",v.length," pages)"]}),e.jsxs("button",{onClick:()=>x("markdown"),className:`flex-1 px-3 py-2 rounded-lg text-xs font-medium border transition-colors ${t==="markdown"?"bg-indigo-50 border-indigo-300 text-indigo-700":"border-gray-200 text-gray-500 hover:bg-gray-50"}`,children:["Markdown (",S.length," notes)"]})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-medium text-gray-600 block mb-1.5",children:"Target folder"}),e.jsx("input",{type:"text",value:m,onChange:P=>i(P.target.value),className:"w-full px-3 py-2 border border-gray-200 rounded-lg text-sm outline-none focus:border-indigo-400",placeholder:"exported-site"}),e.jsx("p",{className:"text-[10px] text-gray-400 mt-1",children:"Relative to project root on connected machine"})]}),s&&e.jsx("div",{className:`px-3 py-2 rounded-lg text-xs ${s.ok?"bg-emerald-50 text-emerald-700":"bg-red-50 text-red-600"}`,children:s.message})]}),e.jsxs("div",{className:"px-5 py-3 border-t flex items-center justify-between",children:[e.jsxs("span",{className:"text-[10px] text-gray-400",children:[_," item(s) will be exported"]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("button",{onClick:l,className:"px-4 py-2 rounded-lg text-xs font-medium text-gray-500 hover:bg-gray-100 transition-colors",children:"Cancel"}),e.jsx("button",{onClick:M,disabled:b||_===0,className:"px-4 py-2 rounded-lg text-xs font-medium bg-indigo-500 text-white hover:bg-indigo-600 disabled:opacity-40 transition-colors flex items-center gap-1.5",children:b?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"w-3 h-3 border-2 border-white/30 border-t-white rounded-full animate-spin"}),"Exporting..."]}):e.jsxs(e.Fragment,{children:[e.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"})}),"Export"]})})]})]})]})]})}const gt=a.memo(xt);function ft({id:o,data:c,selected:l}){const t=c,[x,m]=a.useState(!1),[i,b]=a.useState(String(t.content||"")),h=a.useCallback(()=>{var u;m(!1),(u=t.onEdit)==null||u.call(t,o)},[o,t]),s=e.jsxs(e.Fragment,{children:[!x&&e.jsx("button",{onClick:()=>m(!0),className:"p-0.5 rounded hover:bg-blue-100 text-blue-500 transition-colors",title:"Edit",children:e.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"})})}),t.onDelete&&e.jsx("button",{onClick:()=>t.onDelete(o),className:"p-0.5 rounded hover:bg-red-100 text-red-400 transition-colors",title:"Delete",children:e.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]});return e.jsx(G,{id:o,nodeType:"note",data:t,selected:l,actions:s,children:x?e.jsx("textarea",{autoFocus:!0,value:i,onChange:u=>b(u.target.value),onBlur:h,onKeyDown:u=>{u.key==="Escape"&&h()},className:"w-full bg-white/70 border border-blue-200 rounded px-2 py-1 text-xs resize-none min-h-[60px] outline-none focus:border-blue-400",rows:4}):e.jsx("div",{className:"cursor-text",onDoubleClick:()=>m(!0),children:i||e.jsx("span",{className:"text-gray-400 italic",children:"Double-click to edit..."})})})}const bt=a.memo(ft);function yt({id:o,data:c,selected:l}){const t=c,x=e.jsxs(e.Fragment,{children:[t.onRun&&e.jsx("button",{onClick:()=>t.onRun(o,String(t.content||"")),className:"p-0.5 rounded hover:bg-blue-100 text-blue-600 transition-colors",title:"Run this prompt",children:e.jsx("svg",{className:"w-3.5 h-3.5",fill:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{d:"M8 5v14l11-7z"})})}),t.onRerun&&e.jsx("button",{onClick:()=>t.onRerun(o,String(t.content||"")),className:"p-0.5 rounded hover:bg-green-100 text-green-600 transition-colors",title:"Rerun — send this prompt again",children:e.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"})})}),t.onDelete&&e.jsx("button",{onClick:()=>t.onDelete(o),className:"p-0.5 rounded hover:bg-red-100 text-red-400 transition-colors",title:"Delete",children:e.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]});return e.jsx(G,{id:o,nodeType:"prompt",data:t,selected:l,actions:x})}const vt=a.memo(yt);function wt({id:o,data:c,selected:l}){const t=c,x=a.useCallback(()=>{const i=String(t.fullContent||t.content||"");navigator.clipboard.writeText(i).catch(()=>{})},[t.fullContent,t.content]);if(t.compact)return e.jsx(G,{id:o,nodeType:"response",data:t,selected:l});const m=e.jsxs(e.Fragment,{children:[t.onBranch&&e.jsx("button",{onClick:()=>t.onBranch(o),className:"p-0.5 rounded hover:bg-purple-100 text-purple-500 transition-colors",title:"Branch — create new prompt from this",children:e.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M13 5l7 7-7 7M5 5l7 7-7 7"})})}),e.jsx("button",{onClick:x,className:"p-0.5 rounded hover:bg-purple-100 text-purple-400 transition-colors",title:"Copy content",children:e.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})})})]});return e.jsx(G,{id:o,nodeType:"response",data:t,selected:l,actions:m})}const jt=a.memo(wt);function kt({id:o,data:c,selected:l}){const t=c,x=a.useCallback(()=>{const i=t.extractedText||t.content||"";navigator.clipboard.writeText(String(i)).catch(()=>{})},[t]),m=e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:x,className:"p-0.5 rounded hover:bg-red-100 text-red-400 transition-colors",title:"Copy extracted text",children:e.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})})}),t.onDelete&&e.jsx("button",{onClick:()=>t.onDelete(o),className:"p-0.5 rounded hover:bg-red-100 text-red-400 transition-colors",title:"Delete",children:e.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]});return e.jsx(G,{id:o,nodeType:"pdf",data:{...t,label:t.fileName||"PDF"},selected:l,actions:m,children:e.jsxs("div",{className:"space-y-2",children:[t.thumbnail&&e.jsx("img",{src:t.thumbnail,alt:"PDF preview",className:"w-full rounded border border-red-200"}),t.pageCount&&e.jsxs("div",{className:"text-[10px] text-red-400",children:[t.pageCount," page",t.pageCount>1?"s":""]}),e.jsxs("div",{className:"text-xs text-gray-600 max-h-[200px] overflow-y-auto",children:[(t.extractedText||t.content||"").toString().slice(0,500),(t.extractedText||t.content||"").toString().length>500&&"..."]})]})})}const Nt=a.memo(kt);function Ct({id:o,data:c,selected:l}){const t=c,x=a.useRef(null),[m,i]=a.useState(!1),b=ae.webpage;return a.useEffect(()=>{const h=x.current;if(!h||!t.html)return;const s=()=>i(!0);h.addEventListener("load",s);const u=h.contentDocument;return u&&(u.open(),u.write(t.html),u.close(),i(!0)),()=>h.removeEventListener("load",s)},[t.html]),e.jsxs("div",{className:`
        rounded-xl border-2 shadow-sm w-[240px] transition-shadow cursor-pointer
        ${b.bg} ${b.border}
        ${l?"ring-2 ring-primary/40 shadow-md":"hover:shadow-md"}
      `,onClick:()=>{var h;return(h=t.onWebPageClick)==null?void 0:h.call(t,o)},children:[e.jsx(Z,{type:"target",position:q.Left,className:"!w-2 !h-2 !bg-indigo-400 !border-indigo-300"}),t.pageIndex&&e.jsx("div",{className:"absolute -top-2 -left-2 w-5 h-5 rounded-full bg-indigo-500 text-white text-[10px] font-bold flex items-center justify-center shadow",children:t.pageIndex}),e.jsx("div",{className:"w-full h-[150px] overflow-hidden rounded-t-lg bg-white relative",children:t.html?e.jsx("div",{className:"w-[960px] h-[600px] origin-top-left",style:{transform:"scale(0.25)"},children:e.jsx("iframe",{ref:x,className:"w-full h-full border-none pointer-events-none",sandbox:"allow-same-origin",title:t.pageName||"Page preview"})}):e.jsx("div",{className:"flex items-center justify-center h-full text-gray-300",children:e.jsx("svg",{className:"w-8 h-8",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9"})})})}),e.jsxs("div",{className:"px-3 py-2 border-t border-indigo-200/50",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"text-sm",children:b.icon}),e.jsx("span",{className:"text-[11px] font-semibold text-indigo-700 truncate",children:t.pageName||t.label||"Page"})]}),e.jsx("p",{className:"text-[10px] text-gray-400 mt-0.5",children:"Click to edit"})]}),e.jsx(Z,{type:"source",position:q.Right,className:"!w-2 !h-2 !bg-indigo-400 !border-indigo-300"})]})}const Et=a.memo(Ct),xe=280,Ee=150;function Lt(o,c,l="TB"){var x,m;if(o.length===0)return o;const t=new Ce.graphlib.Graph;t.setGraph({rankdir:l,nodesep:60,ranksep:100,marginx:40,marginy:40}),t.setDefaultEdgeLabel(()=>({}));for(const i of o)t.setNode(i.id,{width:((x=i.measured)==null?void 0:x.width)||i.width||xe,height:((m=i.measured)==null?void 0:m.height)||i.height||Ee});for(const i of c)t.setEdge(i.source,i.target);return Ce.layout(t),o.map(i=>{var u,p;const b=t.node(i.id);if(!b)return i;const h=((u=i.measured)==null?void 0:u.width)||i.width||xe,s=((p=i.measured)==null?void 0:p.height)||i.height||Ee;return{...i,position:{x:b.x-h/2,y:b.y-s/2}}})}new Ke;function U(o,c,l={dx:320,dy:0}){var m;if(c){const i=o.find(b=>b.id===c);if(i)return{x:i.position.x+l.dx,y:i.position.y+l.dy}}if(o.length===0)return{x:100,y:100};let t=-1/0,x=1/0;for(const i of o){const b=((m=i.measured)==null?void 0:m.width)||i.width||xe,h=i.position.x+b;h>t&&(t=h),i.position.y<x&&(x=i.position.y)}return{x:t+80,y:x}}function K(o,c){return o.length<=c?o:o.slice(0,c)+"..."}function ue(o,c){var x,m,i,b,h,s;if(o.length===0)return"Canvas is empty.";const l=[`## Canvas Context
`],t=new Map;for(const u of o){const p=u.type||"note";t.has(p)||t.set(p,[]),t.get(p).push(u)}l.push("### Blocks:");for(const u of o){const p=u.type||"note",n=((x=u.data)==null?void 0:x.content)||((m=u.data)==null?void 0:m.label)||"",y=K(String(n),120);l.push(`- [${p} at (${Math.round(u.position.x)}, ${Math.round(u.position.y)})]: "${y}"`)}if(l.push(""),c.length>0){l.push("### Connections:");for(const u of c){const p=o.find(S=>S.id===u.source),n=o.find(S=>S.id===u.target),y=K(String(((i=p==null?void 0:p.data)==null?void 0:i.content)||(p==null?void 0:p.type)||"unknown"),40),v=K(String(((b=n==null?void 0:n.data)==null?void 0:b.content)||(n==null?void 0:n.type)||"unknown"),40);l.push(`- "${y}" → "${v}"`)}l.push("")}if(o.length>1){const u=[...o].sort((y,v)=>y.position.x-v.position.x||y.position.y-v.position.y),p=u[0],n=u[u.length-1];l.push("### Spatial Layout:"),l.push(`- Leftmost: ${p.type} ("${K(String(((h=p.data)==null?void 0:h.content)||""),30)}")`),l.push(`- Rightmost: ${n.type} ("${K(String(((s=n.data)==null?void 0:s.content)||""),30)}")`),l.push(`- Total nodes: ${o.length}`),l.push("")}return l.join(`
`)}function Le(o,c,l){var i,b,h,s;if(c.size===0)return null;const t=o.filter(u=>c.has(u.id));if(t.length===0)return null;const x=[`## Selected Items Context
`];for(const u of t){const p=((i=u.data)==null?void 0:i.content)||((b=u.data)==null?void 0:b.label)||"";x.push(`- [${u.type}]: "${K(String(p),150)}"`)}const m=l.filter(u=>c.has(u.source)&&c.has(u.target));if(m.length>0){x.push(`
### Connections:`);for(const u of m){const p=t.find(y=>y.id===u.source),n=t.find(y=>y.id===u.target);x.push(`- "${K(String(((h=p==null?void 0:p.data)==null?void 0:h.content)||""),40)}" → "${K(String(((s=n==null?void 0:n.data)==null?void 0:s.content)||""),40)}"`)}}return x.join(`
`)}function St(o){const c=[],l=o.split(`
`);let t="response",x="",m=[],i=!1,b="";const h=[];let s=null,u="";const p=()=>{const n=m.join(`
`).trim();n&&c.push({type:t,heading:x,content:n}),m=[]};for(const n of l){if(n.trim().startsWith("```")){if(i){if(s!==null){h.push({heading:u,html:s.join(`
`)}),s=null,i=!1,b="";continue}i=!1,b=""}else if(i=!0,b=n.trim().slice(3).trim().toLowerCase(),b==="html"||b==="htm"){s=[],u=x||`Page ${h.length+1}`;continue}m.push(n);continue}if(s!==null){s.push(n);continue}if(i){m.push(n);continue}if(n.startsWith("## ")||n.startsWith("### ")){p();const y=n.replace(/^#{2,3}\s+/,"").trim();x=y;const v=y.toLowerCase();v.includes("research")||v.includes("analysis")||v.includes("finding")?t="research":v.includes("suggestion")||v.includes("idea")||v.includes("recommendation")?t="suggestion":t="response";continue}if(n.startsWith("> ")){t!=="suggestion"&&(p(),t="suggestion",x=x||"Suggestion"),m.push(n.slice(2));continue}m.push(n)}p();for(const n of h)c.push({type:"webpage",heading:n.heading,content:n.html});return c}let $t=0;function Se(){return`canvas_${Date.now()}_${++$t}`}function Tt(o,c,l,t){const x=St(o),m=[],i=[],b=x.filter(n=>n.type!=="webpage"),h=x.filter(n=>n.type==="webpage");let s=l;const u=15;for(const n of b){const y=Se(),v=n.content.split(`
`)[0].slice(0,60);m.push({id:y,type:n.type,position:{x:c,y:s},data:{label:n.heading||n.type,content:n.content.length>800?n.content.slice(0,800)+`
...`:n.content,fullContent:n.content,summary:v,compact:!0,status:"completed"}}),s+=100+u}if(h.length>0){let n=c;const y=b.length>0?s+60:l,v=40;let S=null;for(let _=0;_<h.length;_++){const M=h[_],P=Se(),H=M.content.match(/<title[^>]*>([^<]+)<\/title>/i),A=H?H[1]:M.heading;m.push({id:P,type:"webpage",position:{x:n,y},data:{label:A,content:M.content,html:M.content,pageName:A,pageIndex:_+1}}),S&&i.push({id:`e_${S}_${P}`,source:S,target:P,type:"smoothstep",style:{strokeDasharray:"5,5"}}),S=P,n+=280+v}}t&&m.length>0&&i.push({id:`e_${t}_${m[0].id}`,source:t,target:m[0].id,animated:!0});const p=m.filter(n=>n.type!=="webpage");for(let n=0;n<p.length-1;n++)i.push({id:`e_${p[n].id}_${p[n+1].id}`,source:p[n].id,target:p[n+1].id});if(p.length>0&&h.length>0){const n=m.filter(y=>y.type==="webpage");n.length>0&&i.push({id:`e_${p[p.length-1].id}_${n[0].id}`,source:p[p.length-1].id,target:n[0].id,style:{strokeDasharray:"5,5"}})}return{nodes:m,edges:i}}const pe=`You are a visual AI assistant working on an infinite canvas. The user has drawn elements on the canvas and is asking you to analyze and respond.

IMPORTANT: Structure your response using markdown headings so it can be rendered as visual blocks:
- Use ## headings to separate major sections
- Use ### Research: or ### Analysis: for research/analysis sections
- Use ### Suggestions: or ### Ideas: for suggestion sections
- Use > blockquotes for key insights or recommendations
- Keep each section concise (2-4 sentences or bullet points)
- Be visual and structured — your response will appear as blocks on the canvas
- If asked to create web pages/websites, output each page as a separate \`\`\`html code block with a heading for the page name

Here is the current canvas context:

`,Dt=2e3;function Rt(o){return e.jsx(G,{id:o.id,nodeType:"research",data:o.data,selected:o.selected})}function _t(o){return e.jsx(G,{id:o.id,nodeType:"suggestion",data:o.data,selected:o.selected})}function Pt(o){return e.jsx(G,{id:o.id,nodeType:"summary",data:o.data,selected:o.selected})}const Mt={note:bt,prompt:vt,response:jt,research:Rt,suggestion:_t,pdf:Nt,summary:Pt,webpage:Et};let Wt=0;function Y(){return`n_${Date.now()}_${++Wt}`}function Bt(o){var t,x,m,i,b,h;const c=[],l=[];if(!Array.isArray(o)||o.length===0)return{nodes:c,edges:l};if(((x=(t=o[0])==null?void 0:t.position)==null?void 0:x.x)!==void 0)return{nodes:o.filter(s=>!s.source),edges:o.filter(s=>s.source)};if(o.length===1&&((m=o[0])!=null&&m.nodes)&&((i=o[0])!=null&&i.edges))return{nodes:o[0].nodes,edges:o[0].edges};for(const s of o)if(((b=s.customData)==null?void 0:b.blockType)==="context-link")l.push({id:`e_${s.customData.sourceId}_${s.customData.targetId}`,source:s.customData.sourceId,target:s.customData.targetId});else if((h=s.customData)!=null&&h.blockType&&s.type==="rectangle"){const u=s.customData.blockType,p=["note","prompt","response","research","suggestion","pdf","summary","webpage"];c.push({id:s.id,type:p.includes(u)?u:"note",position:{x:s.x||0,y:s.y||0},data:{label:s.customData.fileName||u,content:s.customData.content||s.customData.extractedText||s.customData.generatedContent||"",...s.customData.fileName&&{fileName:s.customData.fileName},...s.customData.pageCount&&{pageCount:s.customData.pageCount},...s.customData.extractedText&&{extractedText:s.customData.extractedText},...s.customData.thumbnail&&{thumbnail:s.customData.thumbnail}}})}return{nodes:c,edges:l}}function At({projectName:o,sendMessage:c,latestMessage:l,isFullScreen:t}){var we,je,ke,Ne;const{connectionState:x}=at(),{fitView:m,getViewport:i,setViewport:b}=Je(),[h,s,u]=Xe([]),[p,n,y]=Ze([]),[v,S]=a.useState(!1),[_,M]=a.useState("saved"),[P,H]=a.useState(!0),[A,J]=a.useState(!1),[V,N]=a.useState(""),[$,w]=a.useState([]),[L,j]=a.useState(null),[B,ee]=a.useState(null),[te,ie]=a.useState(!1),ne=a.useRef(null),le=a.useRef(""),oe=a.useRef(null),me=a.useRef(o);me.current=o;const O=a.useRef(""),z=a.useRef(null),ge=a.useRef(null),ce=a.useRef(null),T=a.useRef([]),F=a.useRef([]);T.current=h,F.current=p;const $e=a.useMemo(()=>L&&T.current.find(r=>r.id===L)||null,[L,h]),fe=a.useCallback(r=>{j(r)},[]),be=a.useCallback(r=>{ee(r)},[]),Te=a.useCallback((r,d)=>{s(f=>f.map(g=>g.id===r?{...g,data:{...g.data,html:d,content:d}}:g))},[s]),X=a.useMemo(()=>B&&T.current.find(r=>r.id===B)||null,[B,h]),De=a.useCallback(r=>{var E,k,D,I,R;const d=T.current.find(W=>W.id===r);if(!d)return;const f=Y(),g={id:f,type:d.type||"response",position:{x:(((E=d.position)==null?void 0:E.x)||0)+260,y:((k=d.position)==null?void 0:k.y)||0},data:{...d.data,label:`${((D=d.data)==null?void 0:D.label)||"Response"} (pinned)`,content:String(((I=d.data)==null?void 0:I.fullContent)||((R=d.data)==null?void 0:R.content)||""),compact:!1,summary:void 0,fullContent:void 0}},C={id:`e_pin_${r}_${f}`,source:r,target:f,style:{strokeDasharray:"5,5",stroke:"#a78bfa"},type:"smoothstep"};s(W=>[...W,g]),n(W=>[...W,C])},[s,n]),Re=a.useCallback(r=>{s(d=>d.filter(f=>f.id!==r)),n(d=>d.filter(f=>f.source!==r&&f.target!==r))},[s,n]),ye=a.useCallback((r,d)=>{if(!c||v)return;const f=F.current.filter(k=>k.source===r),g=new Set(f.map(k=>k.target));s(k=>k.filter(D=>!g.has(D.id))),n(k=>k.filter(D=>D.source!==r||!g.has(D.target))),z.current=r;const C=ue(T.current,F.current),E=pe+C+`

User prompt: `+d;O.current="",S(!0),w(k=>[...k,{role:"user",text:`(rerun) ${d}`}]),c({type:"claude-command",command:E,options:{canvasMode:!0,blockId:r}})},[c,v,s,n]),_e=a.useMemo(()=>h.map(r=>({...r,data:{...r.data,onDelete:d=>s(f=>f.filter(g=>g.id!==d)),onRun:(d,f)=>he(f,d),onRerun:(d,f)=>ye(d,f),onBranch:d=>Ve(d),onNodeClick:fe,onWebPageClick:be,onEdit:d=>{}}})),[h,fe,be,ye]);a.useEffect(()=>{let r=!1;return H(!0),Q.canvas.load(o).then(async d=>{var f;if(!r){try{const g=await d.json(),C=g.elements||[],E=g.appState||{},{nodes:k,edges:D}=Bt(C);s(k),n(D),E.x!==void 0?b({x:E.x,y:E.y,zoom:E.zoom||1}):E.scrollX!==void 0&&b({x:E.scrollX||0,y:E.scrollY||0,zoom:((f=E.zoom)==null?void 0:f.value)||1}),le.current=JSON.stringify({nodes:k,edges:D})}catch{s([]),n([])}H(!1)}}).catch(()=>{r||(s([]),n([]),H(!1))}),()=>{r=!0}},[o]);const Pe=a.useCallback(()=>{ne.current&&clearTimeout(ne.current),M("unsaved"),ne.current=setTimeout(()=>{const r=T.current,d=F.current,f=JSON.stringify({nodes:r,edges:d});if(f===le.current){M("saved");return}if(!navigator.onLine){oe.current={nodes:r,edges:d,viewport:i()},M("unsaved");return}M("saving");const g=i();Q.canvas.save(me.current,[{nodes:r,edges:d}],g).then(()=>{le.current=f,oe.current=null,M("saved")}).catch(()=>{oe.current={nodes:r,edges:d,viewport:g},M("unsaved")})},Dt)},[i]);a.useEffect(()=>{Pe()},[h,p]),a.useEffect(()=>{if(x!=="connected")return;const r=oe.current;r&&(M("saving"),Q.canvas.save(me.current,[{nodes:r.nodes,edges:r.edges}],r.viewport).then(()=>{le.current=JSON.stringify({nodes:r.nodes,edges:r.edges}),oe.current=null,M("saved")}).catch(()=>M("unsaved")))},[x]),a.useEffect(()=>()=>{ne.current&&clearTimeout(ne.current)},[]);const Me=a.useCallback(r=>{n(d=>qe(r,d))},[n]),se=a.useRef(null);a.useEffect(()=>{if(!(!l||!v)){if(l.type==="claude-response"||l.type==="assistant"){const r=l.content||l.text||l.message||"";if(r){O.current+=r;const d=O.current,f=d.length>600?`...
`+d.slice(-500):d;if(se.current)s(g=>g.map(C=>C.id===se.current?{...C,data:{...C.data,content:f,label:"AI Streaming..."}}:C));else{const g=Y();se.current=g;const C=U(T.current,z.current||void 0),E={id:g,type:"response",position:C,data:{label:"AI Streaming...",content:f,compact:!1,status:"running"}},k=[];z.current&&k.push({id:`e_${z.current}_${g}`,source:z.current,target:g,animated:!0}),s(D=>[...D,E]),n(D=>[...D,...k])}}}if(l.type==="claude-complete"||l.type==="message_stop"){const r=O.current.trim(),d=se.current;r&&(d&&(s(f=>f.filter(g=>g.id!==d)),n(f=>f.filter(g=>g.source!==d&&g.target!==d))),We(r),w(f=>[...f,{role:"ai",text:r.slice(0,200)+(r.length>200?"...":"")}])),S(!1),O.current="",se.current=null}}},[l,v]);const We=a.useCallback(r=>{const d=U(T.current,z.current||void 0),{nodes:f,edges:g}=Tt(r,d.x,d.y,z.current||void 0);s(C=>[...C,...f]),n(C=>[...C,...g]),setTimeout(()=>m({padding:.2,duration:400}),100)},[m,s,n]),Be=a.useCallback(()=>{const r=U(T.current),d={id:Y(),type:"note",position:r,data:{label:"Note",content:""}};s(f=>[...f,d])},[s]),Ae=a.useCallback(async r=>{try{const d=await Ue(()=>import("./pdf-CE_K4jFx.js"),[]);d.GlobalWorkerOptions.workerSrc=`https://cdnjs.cloudflare.com/ajax/libs/pdf.js/${d.version}/pdf.worker.min.mjs`;const f=await r.arrayBuffer(),g=await d.getDocument({data:f}).promise,C=Math.min(g.numPages,10);let E="";for(let R=1;R<=C;R++){const de=(await(await g.getPage(R)).getTextContent()).items.map(Oe=>Oe.str).join(" ");E+=`[Page ${R}]
${de}

`}let k="";try{const R=await g.getPage(1),W=R.getViewport({scale:.5}),re=document.createElement("canvas");re.width=W.width,re.height=W.height;const de=re.getContext("2d");de&&(await R.render({canvasContext:de,viewport:W}).promise,k=re.toDataURL("image/jpeg",.6))}catch{}const D=U(T.current),I={id:Y(),type:"pdf",position:D,data:{label:r.name,content:E.slice(0,500),fileName:r.name,pageCount:g.numPages,extractedText:E,thumbnail:k}};s(R=>[...R,I])}catch{const d=U(T.current);s(f=>[...f,{id:Y(),type:"note",position:d,data:{label:r.name,content:`Failed to process PDF: ${r.name}`}}])}},[s]),He=a.useCallback(()=>{if(!c||v)return;const r=new Set(T.current.filter(W=>W.selected).map(W=>W.id)),d=Le(T.current,r,F.current),f=d||ue(T.current,F.current),g=!!d,C=g?"Analyzing selected elements...":"Analyzing canvas...",E=U(T.current),k=Y(),D={id:k,type:"prompt",position:E,data:{label:"Prompt",content:C}};s(W=>[...W,D]),z.current=k;const R=pe+`[${g?"Selected items context":"Full canvas context"}]
`+f+`

Analyze the canvas and provide a structured visual response.`;O.current="",S(!0),w(W=>[...W,{role:"user",text:C}]),c({type:"claude-command",command:R,options:{canvasMode:!0,blockId:k}})},[c,v,s]),Ie=a.useCallback(()=>{c&&c({type:"cancel-command"}),S(!1),O.current=""},[c]),ze=a.useCallback(()=>{const r=new Set(["response","research","suggestion","prompt","webpage"]);s(d=>d.filter(f=>!r.has(f.type||""))),n(d=>{const f=new Set(T.current.filter(g=>!r.has(g.type||"")).map(g=>g.id));return d.filter(g=>f.has(g.source)&&f.has(g.target))}),w([])},[s,n]),Fe=a.useCallback(()=>{const r=Lt(T.current,F.current);s(r),setTimeout(()=>m({padding:.2,duration:400}),50)},[s,m]),he=a.useCallback((r,d)=>{if(!c||v)return;const f=U(T.current,d),g=Y(),C={id:g,type:"prompt",position:f,data:{label:"Prompt",content:r}},E=[];d&&E.push({id:`e_${d}_${g}`,source:d,target:g}),s(I=>[...I,C]),n(I=>[...I,...E]),z.current=g;const k=ue(T.current,F.current),D=pe+k+`

User prompt: `+r;O.current="",S(!0),w(I=>[...I,{role:"user",text:r}]),c({type:"claude-command",command:D,options:{canvasMode:!0,blockId:g}})},[c,v,s,n]),Ve=a.useCallback(r=>{var C;const d=T.current.find(E=>E.id===r);if(!d)return;const g=`Continue from: "${String(((C=d.data)==null?void 0:C.content)||"").slice(0,100)}"

Provide more detail or explore a different angle.`;he(g,r)},[he]),ve=a.useCallback(()=>{const r=V.trim();if(!r||!c||v)return;const d=new Set(T.current.filter(R=>R.selected).map(R=>R.id)),f=Le(T.current,d,F.current),g=f||ue(T.current,F.current),C=f?"Selected items context":"Full canvas context",E=U(T.current),k=Y(),D={id:k,type:"prompt",position:E,data:{label:"Prompt",content:r}};s(R=>[...R,D]),z.current=k;const I=pe+`[${C}]
`+g+`

User message: `+r;O.current="",S(!0),w(R=>[...R,{role:"user",text:r}]),N(""),c({type:"claude-command",command:I,options:{canvasMode:!0,blockId:k}})},[V,c,v,s]);return a.useEffect(()=>{ce.current&&(ce.current.scrollTop=ce.current.scrollHeight)},[$]),P?e.jsx("div",{className:"flex items-center justify-center h-full text-muted-foreground text-sm",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"w-4 h-4 border-2 border-muted-foreground/30 border-t-muted-foreground rounded-full animate-spin"}),"Loading canvas..."]})}):e.jsxs("div",{className:"h-full w-full relative",children:[e.jsx(lt,{onAddNote:Be,onAddPdf:Ae,onRun:He,onStop:Ie,onClearAi:ze,onAutoLayout:Fe,onExport:()=>ie(!0),isRunning:v}),e.jsxs(Qe,{nodes:_e,edges:p,onNodesChange:u,onEdgesChange:y,onConnect:Me,nodeTypes:Mt,fitView:!0,fitViewOptions:{padding:.2},minZoom:.1,maxZoom:3,defaultEdgeOptions:{type:"smoothstep",animated:!1},proOptions:{hideAttribution:!0},children:[e.jsx(et,{variant:tt.Dots,gap:20,size:1,color:"#e5e7eb"}),e.jsx(nt,{position:"bottom-right",showInteractive:!1}),e.jsx(ot,{position:"bottom-right",style:{marginBottom:50},nodeStrokeWidth:3,pannable:!0,zoomable:!0})]}),e.jsx(ut,{node:$e,onClose:()=>j(null),onPin:De,onDelete:Re}),X&&e.jsx(ht,{html:String(((we=X.data)==null?void 0:we.html)||((je=X.data)==null?void 0:je.content)||""),pageName:String(((ke=X.data)==null?void 0:ke.pageName)||((Ne=X.data)==null?void 0:Ne.label)||"Page"),nodeId:X.id,onClose:()=>ee(null),onHtmlChange:Te,sendMessage:c,latestMessage:l}),te&&e.jsx(gt,{nodes:h,projectName:o,onClose:()=>ie(!1)}),e.jsxs("div",{className:"absolute top-4 right-4 z-20 flex items-center gap-2",children:[x!=="connected"&&e.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] px-2 py-1 rounded-full border border-amber-500/20 bg-amber-500/5 text-amber-400",children:[e.jsx("div",{className:"w-1.5 h-1.5 bg-amber-400 rounded-full animate-pulse"}),x==="reconnecting"?"Reconnecting...":"Offline"]}),e.jsx("div",{className:`text-[10px] px-2 py-1 rounded-full border ${_==="saved"?"text-emerald-500 border-emerald-500/20 bg-emerald-500/5":_==="saving"?"text-amber-500 border-amber-500/20 bg-amber-500/5":"text-muted-foreground border-border/50 bg-muted/50"}`,children:_==="saved"?"Saved":_==="saving"?"Saving...":"Unsaved"})]}),v&&e.jsx("div",{className:"absolute top-4 left-1/2 -translate-x-1/2 z-20",children:e.jsxs("div",{className:"flex items-center gap-2 px-3 py-1.5 bg-primary/10 border border-primary/20 rounded-full text-xs text-primary font-medium",children:[e.jsx("div",{className:"w-2 h-2 bg-primary rounded-full animate-pulse"}),"AI is analyzing canvas..."]})}),e.jsx("button",{onClick:()=>{J(!A),A||setTimeout(()=>{var r;return(r=ge.current)==null?void 0:r.focus()},100)},className:"absolute bottom-4 right-4 z-20 w-10 h-10 rounded-full bg-primary text-primary-foreground shadow-lg flex items-center justify-center hover:bg-primary/90 transition-colors",title:A?"Hide chat":"Chat with canvas",children:e.jsx("svg",{className:"w-5 h-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:A?e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"}):e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"})})}),A&&e.jsx("div",{className:"absolute bottom-16 right-4 z-20 w-80 max-h-[50vh]",children:e.jsxs("div",{className:"bg-card/95 backdrop-blur-md border border-border/50 rounded-2xl shadow-xl flex flex-col overflow-hidden",children:[e.jsxs("div",{className:"px-3 py-2 border-b border-border/30 flex items-center justify-between",children:[e.jsx("span",{className:"text-xs font-medium text-foreground",children:"Canvas Chat"}),e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded text-muted-foreground bg-muted/50",children:h.filter(r=>r.selected).length>0?`${h.filter(r=>r.selected).length} selected`:"full canvas"})]}),e.jsxs("div",{ref:ce,className:"flex-1 overflow-y-auto max-h-48 px-3 py-2 space-y-2",children:[$.length===0&&e.jsx("p",{className:"text-xs text-muted-foreground/60 text-center py-4",children:"Ask AI about your canvas. Context is auto-attached."}),$.map((r,d)=>e.jsxs("div",{className:`text-xs px-2 py-1.5 rounded-lg ${r.role==="user"?"bg-primary/10 text-foreground ml-6":"bg-muted/50 text-foreground mr-6"}`,children:[e.jsx("span",{className:"font-medium text-[10px] text-muted-foreground block mb-0.5",children:r.role==="user"?"You":"AI"}),r.text]},d)),v&&e.jsxs("div",{className:"text-xs text-muted-foreground flex items-center gap-1 px-2",children:[e.jsx("div",{className:"w-1.5 h-1.5 bg-primary rounded-full animate-pulse"}),"Thinking..."]})]}),e.jsx("div",{className:"p-2 border-t border-border/30",children:e.jsxs("div",{className:"flex items-end gap-2",children:[e.jsx("textarea",{ref:ge,value:V,onChange:r=>N(r.target.value),onKeyDown:r=>{r.key==="Enter"&&!r.shiftKey&&(r.preventDefault(),ve())},placeholder:"Ask about your canvas...",rows:1,className:"flex-1 bg-muted/30 text-foreground text-xs placeholder-muted-foreground/50 resize-none outline-none px-3 py-2 rounded-lg max-h-16 overflow-y-auto border border-border/30 focus:border-primary/30"}),e.jsx("button",{onClick:ve,disabled:!V.trim()||v,className:"shrink-0 w-8 h-8 rounded-lg bg-primary text-primary-foreground flex items-center justify-center disabled:opacity-40 hover:bg-primary/90 transition-colors",children:v?e.jsx("div",{className:"w-3 h-3 border-2 border-primary-foreground/30 border-t-primary-foreground rounded-full animate-spin"}):e.jsx("svg",{className:"w-3.5 h-3.5 rotate-90",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2.2,d:"M12 19l9 2-9-18-9 18 9-2zm0 0v-8"})})})]})})]})})]})}function Ht(o){return e.jsx(Ge,{children:e.jsx(At,{...o})})}const Gt=Ye.memo(Ht);export{Gt as default};
