@mindexec/cli 0.2.380 → 0.2.381

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.
@@ -0,0 +1,49 @@
1
+ var Xm=Object.defineProperty;var qm=(e,t,n)=>t in e?Xm(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Pl=(e,t,n)=>qm(e,typeof t!="symbol"?t+"":t,n);import{r as g,j as o,a as Jm}from"./vendor-react-BXzpOyCS.js";import{l as Zm,a as St,s as Xt,b as Qm,d as ep,r as tp,c as ap,e as np,i as El}from"./storage-RP5Dyxmq.js";import{r as pi,g as Ds,w as op,a as hr,d as _l,b as sp,t as gi,n as hi,c as Hr,e as rp,p as ic,v as ip,R as lp,f as dp,u as cp,h as up,i as Bl,s as at,j as io,l as fr,k as lo,m as ss,o as co,q as uo,x as rs,y as qt,z as Dl,A as Ua,B as mp,C as Ol,D as pp,E as gp,F as hp,G as fp,H as bp,I as yp,J as xp,K as Zt,L as lc,T as Cp,M as kp,N as $l,O as mo,P as dc,Q as Wr,S as Vr,U as cc,V as is,W as xs,X as xo,Y as Fl,Z as Y,_ as br,$ as Co,a0 as Sp,a1 as wp,a2 as Ul,a3 as zl,a4 as yr,a5 as vp,a6 as jp,a7 as Ip,a8 as Np,a9 as Ap,aa as Mp,ab as Tp,ac as Rp,ad as Lp,ae as Pp,af as Ep}from"./canvas-runtime-D3amtMwe.js";import{e as _p,d as Bp}from"./vendor-msgpack-BE8aAsr3.js";import{R as f}from"./app-runtime-xD2Z3NdN.js";import{g as xr,A as Hl,a as Cs}from"./index-DlyqQyXw.js";import{r as uc}from"./productionAdapterConfig-C5jfk6oG.js";import{getSupabaseBrowserClient as Os}from"./supabaseAuthAdapter-CuJuASQT.js";import{c as Dp,a as Op,r as Wl}from"./toolHandoff-D5e5f7t5.js";import{a as Vl,s as $p}from"./executionModeSettings-NJqurj-o.js";import{a as Yl,p as Fp}from"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";import{A as Up,D as zp,E as vn,w as jn,I as In,V as Nn,l as Ms,F as wt,J as Hp,N as Yr,O as Ts,Q as An,W as mc,Y as Wp,Z as pc,_ as Vp,i as wo,$ as gc,a0 as Yp,a1 as Gl,a2 as Gp,a3 as Ca,a4 as Kl,T as Rs,a5 as Xl,a6 as Io,a7 as Kp,R as Mn,a8 as ks,a9 as hc,aa as Gr,X as Et,o as fc,ab as Xp,ac as qp,f as Jp,ad as ql,ae as Zp,h as ko,x as Qp,af as eg,ag as tg,ah as Jl,ai as Zl,aj as Ql,g as ed,ak as ls,H as po,al as ds,s as Cr,am as td,an as Jt,c as ag,ao as ng,ap as kr,aq as ad,ar as og,as as cs,at as Sr,au as nd,av as od,aw as sd,ax as sg,ay as rg,az as ig,aA as lg,n as dg,aB as cg,aC as ug,aD as mg,aE as pg,aF as gg,aG as hg,aH as fg,aI as bg}from"./vendor-icons-DE3gIReG.js";const yg=1200,Ka="LocalBridgeOriginalNodeId";function vt(e){return typeof e=="object"&&e!==null}function ya(e,t){const n=Number(e);return Number.isFinite(n)?n:t}function Z(e){return typeof e=="string"?e:""}function bc(){return typeof window<"u"?{width:window.innerWidth||1280,height:window.innerHeight||720}:{width:1280,height:720}}function Kr(e,t,n){const r=Number(e),d=Number(t),c=Number(n);if(!Number.isFinite(r)||!Number.isFinite(d)||!Number.isFinite(c)||c<=0)return null;const m=1400/c,y=bc();return{x:y.width/2-r*m,y:y.height/2-d*m,scale:m}}function xg(e){return vt(e)?Kr(e.x??e.X,e.y??e.Y,e.z??e.Z):null}function Cg(e){if(!vt(e))return null;const t=Number(e.x),n=Number(e.y),r=Number(e.scale);if(!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(r)||r<=0)return null;const d=bc();return{x:(d.width/2-t)/r,y:(d.height/2-n)/r,z:1400/r}}function kg(e){const t=String(e||"").trim();if(t)try{const n=JSON.parse(t);if(!vt(n))return;const r={};for(const[d,c]of Object.entries(n)){const m=xg(c);m&&(r[d]=m)}return Object.keys(r).length>0?r:void 0}catch{return}}function Sg(e){if(!e||Object.keys(e).length===0)return null;const t={};for(const[n,r]of Object.entries(e)){const d=Cg(r);d&&(t[n]=d)}return Object.keys(t).length>0?JSON.stringify(t):null}function Ls(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(e)}function $s(){return crypto.randomUUID()}function fi(e){return vt(e)?"ContentType"in e||"Prompt"in e||"Response"in e||"PositionX"in e||"PositionY"in e||"SourceFilePath"in e||"ImageStack"in e:!1}function rd(e){const t=Z(e).trim();if(!t)return null;try{return JSON.parse(t)}catch{return null}}function Xr(e){if(Array.isArray(e))return e;if(!vt(e))return[];for(const t of["Nodes","nodes","Items","items","Content","content","Upserts","upserts"])if(t in e){const n=e[t];if(Array.isArray(n))return n;const r=rd(n);if(r)return Xr(r)}for(const t of["ContentJson","contentJson","content_json"])if(t in e){const n=rd(e[t]);if(n)return Xr(n)}return fi(e)?[e]:[]}function bi(e){return vt(e)?"BoardId"in e&&("Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e):!1}function yc(e){if(!vt(e))return 0;for(const t of["Deletes","deletes"]){const n=e[t];if(Array.isArray(n))return n.length}return 0}function Ps(e){return Xr(e).filter(fi)}function xc(e){return Ps(e).length}function wg(e,t){var c;const n=[...Ps(e)];if(!bi(t))return n;const r=new Set;for(const m of["Deletes","deletes"]){const y=t[m];if(Array.isArray(y))for(const p of y){const b=Z(p).trim();b&&r.add(b)}}if(r.size>0)for(let m=n.length-1;m>=0;m-=1){const y=Z((c=n[m])==null?void 0:c.Id).trim();y&&r.has(y)&&n.splice(m,1)}const d=new Map;n.forEach((m,y)=>{const p=Z(m.Id).trim();p&&d.set(p,y)});for(const m of Ps(t)){const y=Z(m.Id).trim(),p=y?d.get(y):void 0;if(p!==void 0){n[p]=m;continue}y&&d.set(y,n.length),n.push(m)}return n}function Cc(e){const t=Array.isArray(e)?e.filter(vt):[];return new Map(t.filter(n=>n.NodeId).map(n=>[String(n.NodeId),n]))}async function qr(e,t){for(const n of e)try{const r=await pi(n,t);return{payload:JSON.parse(r.content),path:n}}catch{}return null}async function vg(e,t){const n=`.mindexec/boards/${e}.msgpack`,r=`boards/${e}.msgpack`;for(const y of[n,r])try{const p=await sp(y,t);return{payload:Bp(p),format:y===n?"msgpack":"legacy-msgpack",path:y}}catch{}const d=`.mindexec/boards/${e}.json`,c=`boards/${e}.json`,m=await qr([d,c],t);if(m)return{payload:m.payload,format:m.path===d?"json":"legacy-json",path:m.path};throw new Error(`LocalBridge board file not found: ${n}, ${r}, ${d}, ${c}`)}function Jr(e){const t=Z(e.Id).trim()||Z(e.BoardId).trim();return t?{Id:t,Title:Z(e.Title)||null,Description:Z(e.Description)||null,ThumbnailUrl:Z(e.ThumbnailUrl)||null,CreatedAt:Z(e.CreatedAt)||null,UpdatedAt:Z(e.UpdatedAt)||null,LastCameraX:Number.isFinite(Number(e.LastCameraX))?Number(e.LastCameraX):null,LastCameraY:Number.isFinite(Number(e.LastCameraY))?Number(e.LastCameraY):null,LastCameraZ:Number.isFinite(Number(e.LastCameraZ))?Number(e.LastCameraZ):null,LastCursorX:Number.isFinite(Number(e.LastCursorX))?Number(e.LastCursorX):null,LastCursorY:Number.isFinite(Number(e.LastCursorY))?Number(e.LastCursorY):null,CameraBookmarks:Z(e.CameraBookmarks)||null}:null}function id(e){return!vt(e)||fi(e)?!1:"Title"in e||"Description"in e||"ThumbnailUrl"in e||"IsPublic"in e||"LastCameraX"in e||"LastCameraY"in e||"LastCameraZ"in e||"CameraBookmarks"in e||"BoardId"in e||"Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e||"ContentJson"in e||"content_json"in e}function yi(e){if(Array.isArray(e))return e.filter(id).map(t=>Jr(t)).filter(t=>!!t);if(id(e)){const t=Jr(e);return t?[t]:[]}return[]}function jg(e){const t=e.toLowerCase();return Ig(t)?"remote-control":Ng(t)?"remote-monitor":t==="templatelauncher"||t==="template-launcher"||t.includes("template launcher")?"template-launcher":t.includes("directory")?"directory":t.includes("pdf")?"pdf":t.includes("file")?"file":t.includes("mask")?"mask":t.includes("image")?"image":t.includes("video")?"video":t.includes("embed")?"embed":t==="csv-table"||t.includes("csv-table")||t.includes("csv table")?"csv-table":t.includes("markdown")?"markdown":t.includes("code")?"code":t==="text"||t==="text/plain"||t.includes("plain-text")||t.includes("plain text")?"text":t.includes("ai")||t.includes("task")?"ai-task":t.includes("memo")?"memo":"note"}function Ig(e){const t=e.trim().toLowerCase();if(!t)return!1;if(["remote-control","remote.control","remotecontrol","remote-device","remote.device","remotedevice","remote-fleet-device","remotefleet.device"].includes(t))return!0;const n=t.replace(/[^a-z0-9]+/g,"");return n.includes("remotecontrol")||n.includes("remotedevice")||n.includes("remotefleetdevice")}function Ng(e){const t=e.trim().toLowerCase();if(!t)return!1;if(["remote-monitor","remote.monitor","remotemonitor","remote-hub-monitor","remotehub.monitor","remotehub-monitor","multi-desktop-monitor","multidesktop.monitor","smartview.monitor"].includes(t))return!0;const n=t.replace(/[^a-z0-9]+/g,"");return n.includes("remotemonitor")||n.includes("remotehubmonitor")||n.includes("multidesktopmonitor")||n.includes("smartviewmonitor")}function Ag(e,t){const n=e.Metadata||{},r=n.ThumbnailUrl,d=n.OriginalUrl,c=n.OriginalPath;return gi(Z(r)||Z(d)||Z(c)||Z(e.Response),t)}function Mg(e,t,n){const r=e.ImageStack,d=Array.isArray(r==null?void 0:r.Variants)?r.Variants:[];if(d.length===0)return;const c=d.map((y,p)=>{const b=Z(y.AssetId).trim(),w=gi(b,n)||t;return w?{variantId:Z(y.VariantId)||`variant-${Z(e.Id)||p}`,imageUrl:w,assetId:b||void 0,caption:Z(y.Caption)||void 0,sourceNodeId:Z(e.Id)||void 0,createdAtUtc:Z(y.CreatedAtUtc)||void 0}:null}).filter(y=>!!y);if(c.length===0)return;const m=Z(r==null?void 0:r.ActiveVariantId);return{activeVariantId:c.some(y=>y.variantId===m)?m:c[0].variantId,variants:c,kind:Z(r==null?void 0:r.Kind)||"versions",title:Z(r==null?void 0:r.Title)||void 0,updatedAtUtc:Z(r==null?void 0:r.UpdatedAtUtc)||void 0}}function Tg(e,t){return!e||e.variants.length===0?t:(e.variants.find(r=>r.variantId===e.activeVariantId)??e.variants[0]).imageUrl||t}function Rg(e,t,n){var m,y,p,b,w,P;const r=(y=(m=e.imageStack)==null?void 0:m.variants)!=null&&y.length?e.imageStack.variants:e.imageUrl?[{variantId:`${e.id}:image`,imageUrl:e.imageUrl,assetId:No(e.imageUrl,t)||e.imageUrl,title:e.title,sourceNodeId:e.id,createdAtUtc:n}]:[];if(r.length===0)return null;const d=r.map(N=>({VariantId:N.variantId||$s(),AssetId:N.assetId||No(N.imageUrl,t)||N.imageUrl,CreatedAtUtc:N.createdAtUtc||n,Caption:N.caption||N.title||null}));return{ActiveVariantId:(p=e.imageStack)!=null&&p.activeVariantId&&d.some(N=>{var _;return N.VariantId===((_=e.imageStack)==null?void 0:_.activeVariantId)})?e.imageStack.activeVariantId:d[0].VariantId||"",Variants:d,Kind:((b=e.imageStack)==null?void 0:b.kind)||(d.length>1?"pile":"versions"),Title:((w=e.imageStack)==null?void 0:w.title)||e.title||null,UpdatedAtUtc:((P=e.imageStack)==null?void 0:P.updatedAtUtc)||n}}function Lg(e,t){const n=e.Metadata||{};return gi(Z(n.OriginalUrl)||Z(n.OriginalPath)||Z(n.SourceFilePath)||Z(e.SourceFilePath)||Z(e.Response),t)}function Pg(e){const t={};for(const[n,r]of Object.entries(e??{}))typeof r=="string"?t[n]=r:r!=null&&(t[n]=String(r));return t}function Eg(e){switch(e){case"remote-monitor":return"remote-monitor";case"remote-control":return"remote-control";case"template-launcher":return"templateLauncher";case"directory":return"directory";case"pdf":return"pdf";case"file":return"file";case"image":return"image";case"mask":return"mask";case"video":return"video";case"embed":return"embed";case"code":return"code";case"markdown":return"markdown";case"csv-table":return"csv-table";case"memo":return"memo";case"text":return"text";case"ai-task":return"note";default:return"note"}}function No(e,t){const n=String(e||"").trim();if(!n)return"";const r=t.replace(/\/+$/,"");return n.startsWith(`${r}/`)?n.slice(r.length+1):n.replace(/^\/+/,"")}function _g(e,t){const n=new Map;for(const r of e){const d=t.get(r.from),c=t.get(r.to);!d||!c||n.has(c)||n.set(c,d)}return n}function Bg(e){const t=new Set;return e.map(n=>{var p,b;const r=((p=n.metadata)==null?void 0:p[Ka])||"",d=Ls(r)?r:Ls(n.id)?n.id:"",c=!!(d&&t.has(d)),m=d&&!c?d:$s(),y=((b=n.metadata)==null?void 0:b[Ka])!==m;return t.add(m),{node:y?{...n,metadata:{...n.metadata??{},[Ka]:m}}:n,originalId:m,assignedNodeId:!d||c,metadataStamped:y,duplicateOriginalId:c}})}function Dg(e,t,n,r,d){var b,w,P;const c=Eg(e.kind),m=c==="image"||c==="mask"?No(e.imageUrl,d):"",y=["video","pdf","file","directory","embed"].includes(c)?No(e.assetUrl||e.sourceFilePath||e.body,d):"",p={...e.metadata??{},[Ka]:t,ReactNodeId:e.id,ReactKind:e.kind};if(e.kind==="remote-monitor"&&(p.RemoteHub??(p.RemoteHub="Gated"),p.RemoteRoute??(p.RemoteRoute="Gated"),p.RemoteConnected??(p.RemoteConnected="0"),p.RemoteTotal??(p.RemoteTotal="30"),p.RemotePage??(p.RemotePage="1/1"),p.AdapterState??(p.AdapterState="adapter-gated")),e.kind==="remote-control"&&(p.SemanticType??(p.SemanticType="RemoteFleetDevice"),p.RemoteFleetSchemaVersion??(p.RemoteFleetSchemaVersion="remote-fleet-device@1"),p.RemoteRoute??(p.RemoteRoute="Gated"),p.RemoteInput??(p.RemoteInput="Off"),p.AdapterState??(p.AdapterState="adapter-gated")),e.kind==="mask"&&(p.ImageRouterMask??(p.ImageRouterMask="true"),p.SemanticType??(p.SemanticType="ImageEditMask")),e.kind==="embed"){const N=e.assetUrl||e.body||e.sourceFilePath||"";p.source??(p.source="embed"),p.renderMode??(p.renderMode="card"),p.provider??(p.provider="web"),p.sourceUrl??(p.sourceUrl=N),p.url??(p.url=N),p.AdapterState??(p.AdapterState="local-reference")}return e.kind==="video"&&(p.assetKind??(p.assetKind="video"),p.videoMode??(p.videoMode=(b=e.assetUrl)!=null&&b.startsWith(d)?"local_bridge":"local_reference"),p.AdapterState??(p.AdapterState=((w=e.metadata)==null?void 0:w.PromptOnly)==="true"?"adapter-gated":"local-reference")),(P=e.tags)!=null&&P.length&&(p.ReactTags=JSON.stringify(e.tags)),m&&(p.OriginalUrl=m,p.ThumbnailUrl=m),y&&(p.OriginalPath=y,p.SourceFilePath=y),{Id:t,ContentType:c,Prompt:e.title||c,Response:c==="image"||c==="mask"?m||e.body||null:c==="remote-monitor"?e.body||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":c==="remote-control"?e.body||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":y||e.body||null,PositionX:e.x,PositionY:e.y,PositionZ:0,IsLoading:e.status==="running",Width:Math.round(e.width),Height:Math.round(e.height),Children:[],ParentId:n||null,IsExpanded:!!e.isExpanded,OriginalHeight:Math.round(e.originalHeight??0),IsAiEnabled:e.aiEnabled!==!1,IsChunkedText:!!e.isChunkedText,TotalLineCount:Math.round(e.totalLineCount??0),SourceFilePath:e.sourceFilePath||y||null,ScrollOffset:e.scrollOffset??0,MaxScroll:e.maxScroll??0,CreatedAt:r,UpdatedAt:r,IsWordWrap:e.wordWrap??e.kind!=="code",Metadata:p,ImageStack:c==="image"?Rg(e,d,r):null}}function Og(e,t){return{NodeId:t,PositionX:e.x,PositionY:e.y,PositionZ:0,Width:Math.round(e.width),Height:Math.round(e.height),IsExpanded:!!e.isExpanded,OriginalHeight:Math.round(e.originalHeight??0)}}function $g(e,t,n){const r=Z(e.ContentType)||"note",d=Z(e.Prompt).trim(),c=Z(e.Response).trim(),m=Pg(e.Metadata),y=Z(e.Id).trim();y&&(m[Ka]??(m[Ka]=y));const b=["true","1","yes"].includes(String(m.ImageRouterMask||m.IsMask||"").trim().toLowerCase())?"mask":jg(r),w=b==="memo"&&["mindcanvasagent","agentcommand"].includes(String(m.SemanticType||m.semanticType||"").trim().toLowerCase()),P=b==="memo"&&["codenote","code-note"].includes(String(m.SemanticType||m.semanticType||"").trim().toLowerCase()),N=Z(e.SourceFilePath)||m.OriginalPath||m.SourceFilePath||"",_=b==="video"||b==="pdf"||b==="file"||b==="directory"||b==="embed"?Lg(e,n):void 0,B=d||e.SourceFilePath||r||"LocalBridge node",F=b==="image"?c||d||"Image asset":b==="mask"?c||d||"Image mask asset":b==="remote-monitor"?c||d||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":b==="remote-control"?c||d||N||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":b==="pdf"||b==="file"||b==="directory"||b==="embed"?c||N||d||r:c||d||N||"",$=w?500:P?400:b==="remote-monitor"?860:b==="remote-control"||b==="template-launcher"?560:b==="csv-table"?720:b==="embed"?460:b==="video"?420:b==="markdown"?380:b==="text"||b==="image"||b==="mask"?360:320,H=w||P?300:b==="remote-monitor"?640:b==="remote-control"?390:b==="template-launcher"?620:b==="csv-table"?420:b==="embed"?260:b==="video"?236:b==="markdown"?240:b==="text"?210:b==="image"||b==="mask"?260:180,W=b==="image"||b==="mask"?Ag(e,n):void 0,re=b==="image"?Mg(e,W,n):void 0,se=!!(e.IsChunkedText||m.IsChunkedText==="true"),Ie=ya(e.TotalLineCount??m.TotalLineCount,0),fe=ya(e.ScrollOffset,0),He=ya(e.MaxScroll,0);return{id:String(e.Id||crypto.randomUUID()),kind:b,title:b==="remote-monitor"?d||"Multi Desktop Monitor":b==="remote-control"?d||m.RemoteFleetDeviceName||"Remote Device":b==="template-launcher"?d||"Template Launcher":B,body:F,x:ya((t==null?void 0:t.PositionX)??e.PositionX,0),y:ya((t==null?void 0:t.PositionY)??e.PositionY,0),width:Math.max(160,Math.min(900,ya((t==null?void 0:t.Width)??e.Width,$))),height:Math.max(120,Math.min(900,ya((t==null?void 0:t.Height)??e.Height,H))),status:e.IsLoading?"running":b==="ai-task"?"idle":void 0,imageUrl:Tg(re,W),imageStack:re,assetUrl:_,sourceFilePath:N||void 0,isChunkedText:se||void 0,totalLineCount:se?Ie:void 0,scrollOffset:se?fe:void 0,maxScroll:se?He:void 0,isExpanded:typeof e.IsExpanded=="boolean"?e.IsExpanded:void 0,originalHeight:ya(e.OriginalHeight,0)||void 0,tags:w?["Agent Command",m.AgentCommandRequestedRole||"Researcher",m.AgentCommandStatus||"Draft"]:P?["Code Note",m.CodeNoteStatus||"Draft",m.CodeNoteSyncState||"Unlinked"]:b==="remote-monitor"?["Remote","Monitor","LocalBridge"]:b==="remote-control"?["Remote","Control","LocalBridge"]:["LocalBridge",r],metadata:b==="remote-monitor"?Fg(m):b==="remote-control"?Ug(m):m,role:e.IsAiEnabled?"ai-enabled":void 0,aiEnabled:typeof e.IsAiEnabled=="boolean"?e.IsAiEnabled:void 0,wordWrap:typeof e.IsWordWrap=="boolean"?e.IsWordWrap:void 0}}function Fg(e){return{RemoteHub:"Gated",RemoteRoute:"Gated",RemoteConnected:"0",RemoteTotal:"30",RemotePage:"1/1",AdapterState:"adapter-gated",...e}}function Ug(e){return{SemanticType:"RemoteFleetDevice",RemoteFleetSchemaVersion:"remote-fleet-device@1",RemoteFleetDeviceId:"",RemoteFleetDeviceName:"Remote Device",RemoteFleetDevicePlatform:"unknown",RemoteFleetDeviceConnected:"false",RemoteInput:"Off",RemoteHub:"Gated",RemoteRoute:"Gated",RemoteBaseUrl:"http://127.0.0.1:5147",AdapterState:"adapter-gated",...e}}function zg(e,t){const n=[];for(const r of e){const d=String(r.Id||""),c=String(r.ParentId||"");!d||!c||!t.has(d)||!t.has(c)||n.push({id:`edge-local-${c}-${d}`,from:c,to:d,kind:"context"})}return n}async function Hg(e=Ds()){const t=await pi(".mindexec/boards/_metadata.json",e),n=JSON.parse(t.content);return(Array.isArray(n)?n.filter(vt):[]).map(c=>Jr(c)).filter(c=>!!c).sort((c,m)=>String(m.UpdatedAt||"").localeCompare(String(c.UpdatedAt||"")))}async function Wg(e){try{const t=await pi(".mindexec/boards/_metadata.json",e),n=JSON.parse(t.content);return Array.isArray(n)?n.filter(vt):[]}catch{return[]}}async function Vg(e,t,n,r=Ds(),d=null){var It,Ze,_e,$e,Me,Bt;if((It=e.source)!=null&&It.partialImport)throw new Error("This board was imported from a partial original payload. Export is blocked to avoid data loss.");if((Ze=e.source)!=null&&Ze.truncated)throw new Error("This board was truncated during import. Export is blocked to avoid data loss.");const c=(_e=e.source)!=null&&_e.exportedByReact?String(e.source.boardId||""):"",m=Ls(c),y=Ls(c)?c:$s(),p=new Date().toISOString(),b=Bg(e.nodes),w=b.map(U=>U.node),P=new Map(b.map(U=>[U.node.id,U.originalId])),N=_g(e.edges,P),_=b.map(({node:U,originalId:Be})=>Dg(U,Be,N.get(Be),p,r)),B=b.map(({node:U,originalId:Be})=>Og(U,Be)),F=t.scale>0?t.scale:1,$=(window.innerWidth/2-t.x)/F,H=(window.innerHeight/2-t.y)/F,W=1400/F,re=Number((d==null?void 0:d.x)??(($e=e.viewState)==null?void 0:$e.cursorX)??0),se=Number((d==null?void 0:d.y)??((Me=e.viewState)==null?void 0:Me.cursorY)??0),Ie=(Bt=e.nodes.find(U=>U.kind==="image"&&U.imageUrl))==null?void 0:Bt.imageUrl,fe={Id:y,UserId:"00000000-0000-0000-0000-000000000000",Title:e.name||"Untitled Board",Description:"Exported from MindExec React",ThumbnailUrl:No(Ie,r)||"",IsPublic:!1,CreatedAt:p,SyncedCloudBoardId:null,LastSyncedAt:null,LastCloudCopyStatus:null,UpdatedAt:p,LastCameraX:$,LastCameraY:H,LastCameraZ:W,LastCursorX:Number.isFinite(re)?re:0,LastCursorY:Number.isFinite(se)?se:0,CameraBookmarks:Sg(e.settings.cameraBookmarks)},He=`.mindexec/boards/${y}.msgpack`,jt=`.mindexec/boards/${y}.json`,ot=`.mindexec/boards/${y}.layout.json`,V=`.mindexec/boards/${y}.delta.json`,G=`boards/${y}.delta.json`,ie=await Wg(r),ae=[fe,...ie.filter(U=>Z(U.Id)!==y)],mt=_p(_);await op(He,mt,n,r),await hr(jt,JSON.stringify(_,null,2),n,r),await hr(ot,JSON.stringify(B,null,2),n,r),await hr(".mindexec/boards/_metadata.json",JSON.stringify(ae,null,2),n,r);const z=await Promise.allSettled([_l(V,n,r),_l(G,n,r)]);return f.emit("localBridge.board.exported",{boardId:y,nodes:_.length,edges:e.edges.length,snapshotFormat:"msgpack",msgpackBytes:mt.byteLength,jsonMirror:!0,deltaCleared:z.some(U=>U.status==="fulfilled"&&U.value.success),reusedBoardId:m,stableNodeIds:b.length,assignedNodeIds:b.filter(U=>U.assignedNodeId).length,metadataStampedNodeIds:b.filter(U=>U.metadataStamped).length,duplicateOriginalNodeIds:b.filter(U=>U.duplicateOriginalId).length}),{metadata:fe,source:{kind:"localBridge",boardId:y,loadedAt:p,originalNodeCount:_.length,renderedNodeCount:_.length,truncated:!1,exportedByReact:!0,snapshotFormat:"msgpack"},nodes:w,msgpackPath:He,boardPath:jt,layoutPath:ot}}async function Yg(e,t,n=Ds()){const r=await vg(e.Id,n);let d=new Map;const c=await qr([`.mindexec/boards/${e.Id}.layout.json`,`boards/${e.Id}.layout.json`],n);c&&(d=Cc(c.payload));let m=null;const y=await qr([`.mindexec/boards/${e.Id}.delta.json`,`boards/${e.Id}.delta.json`],n);y&&(m=y.payload);const p=m?yi(m)[0]:null,b=!!(m&&bi(m)),w=b?wg(r.payload,m):r.payload;return kc(w,t,{boardId:(p==null?void 0:p.Id)??e.Id,title:(p==null?void 0:p.Title)||e.Title||"LocalBridge Board",updatedAt:(p==null?void 0:p.UpdatedAt)??e.UpdatedAt,layoutPayload:Array.from(d.values()),baseUrl:n,cameraBookmarks:(p==null?void 0:p.CameraBookmarks)??e.CameraBookmarks,lastCursorX:(p==null?void 0:p.LastCursorX)??e.LastCursorX,lastCursorY:(p==null?void 0:p.LastCursorY)??e.LastCursorY,deltaApplied:b,deltaUpserts:m?xc(m):0,deltaDeletes:m?yc(m):0,snapshotFormat:r.format})}function kc(e,t,n={}){const r=Ps(e),d=bi(e),c=n.deltaUpserts??(d?r.length:0),m=n.deltaDeletes??(d?yc(e):0),y=n.layoutPayload?Cc(n.layoutPayload):new Map,p=r.slice(0,yg),b=p.map(se=>$g(se,y.get(String(se.Id||"")),n.baseUrl??Ds())),w=new Set(b.map(se=>se.id)),P=zg(p,w),N=r.length>b.length,_=d,B=n.deltaApplied===!0,F=n.boardId||$s(),$=n.updatedAt||new Date().toISOString(),H=Number(n.lastCursorX),W=Number(n.lastCursorY),re=Number.isFinite(H)&&Number.isFinite(W);return f.emit("localBridge.board.loaded",{boardId:F,nodes:b.length,originalNodes:r.length,truncated:N,snapshotFormat:n.snapshotFormat,partialImport:_,deltaImport:d,deltaApplied:B,deltaUpserts:c,deltaDeletes:m}),{id:`localBridge:${F}`,name:n.title||"LocalBridge Board",nodes:b,edges:P,settings:{...t,cameraBookmarks:kg(n.cameraBookmarks)},viewState:re?{cursorX:H,cursorY:W}:void 0,updatedAt:$,source:{kind:"localBridge",boardId:F,loadedAt:new Date().toISOString(),snapshotFormat:n.snapshotFormat,originalNodeCount:r.length,renderedNodeCount:b.length,truncated:N,partialImport:_,deltaImport:d,deltaApplied:B}}}const Sc=new Set(["research","web-search","analyze","summarize","create","decision","human-review","image-generate","video-generate","output","ai-task"]);function xi(e,t){const n=hi(e);return n!=="auto"?n:Ic(t)?"ko":Nc(t)?"ja":Ac(t)?"zh":"en"}function Gg(e,t){const n=xi(t,e),r=[...Sc].join(", ");return["Create a simple MindExec business execution flow for this objective:",e,"",Hr(n),`User-facing node "title" and "instruction" values MUST use ${rp(n)} unless the objective explicitly asks for another language.`,'JSON property names, internal "kind" values, and pin IDs MUST remain in English exactly as specified.',"","MindExec is not an n8n/Zapier-style automation grammar.","The user should feel they are arranging work sentences and business thinking, not triggers, apps, fields, JSON, webhooks, API steps, or low-level automation blocks.","","Most nodes will be rendered to the user as AI Task nodes.",'The "kind" field is primarily an internal execution intent hint that the user does not need to learn.',"Use image-generate or video-generate only when the graph truly needs an explicit media generation block.","",`Available internal intent hints: ${r}`,"","Return only JSON:","{",' "nodes": [',' { "kind": "research", "title": "Investigate market evidence", "instruction": "..." }'," ],",' "edges": [',' { "from": 0, "fromPin": "result", "to": 1, "toPin": "input" }'," ]","}","","Rules:","- 4 to 7 nodes.","- Use large business-language tasks, not low-level n8n/zapier steps.","- Think in this user model: AI Task = work sentence, Line = pass the previous result, Context = background thought/document.","- Do not create nodes for Trigger, Action, Webhook, HTTP request, app event, JSON parsing, iterator, filter, credential, or field mapping.","- Prefer a practical sequence for a solo global SaaS/business builder.","- Use only the available internal intent hints.","- Keep titles short and task-like, not category names such as Research, Analyze, Create, Web Search, or Output.","- Instructions should be natural-language work requests that a business owner would write.","- Preserve evidence/trust needs in the instruction when the task depends on current facts or source URLs.",'- Prefer "result" -> "input" edges unless a stronger pin contract is needed.'].join(`
2
+ `)}function Kg(e){const t=Zg(e);if(!t)return null;let n;try{n=JSON.parse(t)}catch{return null}if(!wr(n)||!Array.isArray(n.nodes))return null;const r=n.nodes.slice(0,8).map(c=>{if(!wr(c))return null;const m=Jg(go(c.kind));if(!Sc.has(m))return null;const y=go(c.title).trim(),p=go(c.instruction).trim();return!y||!p?null:{kind:m,title:y.slice(0,90),instruction:p}}).filter(c=>!!c);if(r.length<2)return null;const d=Array.isArray(n.edges)?n.edges.slice(0,14).map(c=>{if(!wr(c))return null;const m=dd(c.from),y=dd(c.to);return m<0||y<0||m>=r.length||y>=r.length||m===y?null:{from:m,fromPin:go(c.fromPin).trim()||vc(r[m].kind),to:y,toPin:go(c.toPin).trim()||jc(r[y].kind)}}).filter(c=>!!c):[];return{nodes:r,edges:d.length>0?d:wc(r)}}function Xg(e,t){if(t==="en")return!0;const n=e.nodes.map(r=>`${r.title} ${r.instruction}`).join(" ");return t==="ko"?Ic(n):t==="ja"?Qg(n):t==="zh"?Ac(n):!0}function ld(e,t){const n=e.trim()||"the selected note",r=qg(n,t);return{nodes:r,edges:wc(r)}}function qg(e,t){return t==="ko"?[{kind:"research",title:"비즈니스 맥락 정리",instruction:`이 목표의 시장, 고객, 경쟁, 가격, 채널 맥락을 정리하세요: ${e}`},{kind:"web-search",title:"근거 있는 사실 수집",instruction:`이 목표에 중요한 최신 근거와 URL을 찾고, 링크와 불확실성을 함께 남기세요: ${e}`},{kind:"analyze",title:"핵심 기회 분석",instruction:`앞선 결과를 바탕으로 ${e}의 리스크, 차별점, 가장 빠른 매출 경로를 분석하세요.`},{kind:"create",title:"제안 초안 작성",instruction:`분석을 바탕으로 바로 테스트할 수 있는 오퍼, 랜딩 카피, 실험안, 실행 브리프를 작성하세요: ${e}`},{kind:"output",title:"다음 행동 정리",instruction:`${e} 실행 리포트를 정리하세요. 근거, 가정, 결정, 리스크, 다음 행동, 후속 flow 제안을 포함하세요.`}]:t==="ja"?[{kind:"research",title:"事業文脈を整理",instruction:`この目標の市場、顧客、競合、価格、チャネルを整理してください: ${e}`},{kind:"web-search",title:"根拠を集める",instruction:`この目標に重要な最新の根拠とURLを探し、リンクと不確実性を残してください: ${e}`},{kind:"analyze",title:"重要な機会を分析",instruction:`前の結果を使って、${e} のリスク、差別化、最短の収益化ルートを分析してください。`},{kind:"create",title:"提案を下書き",instruction:`分析をもとに、すぐ試せるオファー、ランディングコピー、実験案、実行ブリーフを作成してください: ${e}`},{kind:"output",title:"次の行動にまとめる",instruction:`${e} の実行レポートを作成し、根拠、仮説、判断、リスク、次の行動、後続flow案を含めてください。`}]:t==="zh"?[{kind:"research",title:"梳理业务背景",instruction:`梳理这个目标的市场、客户、竞争、价格和渠道背景: ${e}`},{kind:"web-search",title:"收集可信证据",instruction:`为这个目标寻找重要的最新证据和URL,并保留链接与不确定性: ${e}`},{kind:"analyze",title:"分析关键机会",instruction:`基于前面的结果,分析 ${e} 的风险、差异化和最快收入路径。`},{kind:"create",title:"起草商业提案",instruction:`把分析转成可以马上测试的报价、落地页文案、实验方案或执行简报: ${e}`},{kind:"output",title:"整理下一步行动",instruction:`整理 ${e} 的执行报告,包含证据、假设、决策、风险、下一步行动和后续flow建议。`}]:[{kind:"research",title:"Map the business context",instruction:`Map the market, customer, competitor, pricing, and channel context for this objective: ${e}`},{kind:"web-search",title:"Collect source-backed facts",instruction:`Find current source-backed facts and URLs that matter for this objective: ${e}. Preserve links and note uncertainty.`},{kind:"analyze",title:"Extract what matters",instruction:`Using the previous results, identify the important changes, risks, differentiation, and fastest path to revenue for: ${e}`},{kind:"create",title:"Draft the response",instruction:`Turn the analysis into a practical launch asset, offer, copy, experiment, or execution brief for: ${e}`},{kind:"output",title:"Turn it into next actions",instruction:`Compile the execution report for ${e}: source-backed evidence, assumptions, decision, risks, next actions, and a suggested follow-up flow.`}]}function Jg(e){const t=e.trim().toLowerCase();return t==="websearch"||t==="search"?"web-search":t==="image"?"image-generate":t==="video"?"video-generate":t==="task"?"ai-task":t||"ai-task"}function wc(e){return e.slice(0,-1).map((t,n)=>({from:n,fromPin:vc(t.kind),to:n+1,toPin:jc(e[n+1].kind)}))}function vc(e){switch(e){case"research":return"brief";case"web-search":return"summary";case"analyze":return"analysis";case"summarize":return"summary";case"create":return"draft";case"decision":return"decision";case"image-generate":return"image";case"video-generate":return"video";case"output":return"report";default:return"result"}}function jc(e){switch(e){case"research":return"goal";case"web-search":return"query";case"analyze":return"source";case"summarize":return"source";case"create":return"brief";case"decision":return"options";case"human-review":return"proposal";case"image-generate":return"prompt";case"video-generate":return"prompt";case"output":return"asset";default:return"input"}}function Zg(e){const t=e==null?void 0:e.trim();if(!t)return null;const n=t.indexOf("{"),r=t.lastIndexOf("}");return n>=0&&r>n?t.slice(n,r+1):null}function wr(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function go(e){return typeof e=="string"?e:""}function dd(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"){const t=Number.parseInt(e,10);return Number.isInteger(t)?t:-1}return-1}function Ic(e){return!!(e&&/[\u1100-\u11ff\u3130-\u318f\uac00-\ud7af]/.test(e))}function Nc(e){return!!(e&&/[\u3040-\u30ff]/.test(e))}function Qg(e){return Nc(e)||!!(e&&/[\u4e00-\u9fff]/.test(e))}function Ac(e){return!!(e&&/[\u4e00-\u9fff]/.test(e))}const Ci=["id","user_id","title","description","content_json","thumbnail_url","is_public","created_at","updated_at","last_camera_x","last_camera_y","last_camera_z","last_cursor_x","last_cursor_y","camera_bookmarks"].join(","),eh=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function th(e){if(eh.test(e))return e;if(typeof crypto<"u"&&"randomUUID"in crypto)return crypto.randomUUID();throw new Error("A browser crypto.randomUUID implementation is required to create cloud boards.")}function Mc(e){if(!e)return{};if(Array.isArray(e))return{nodes:e};if(typeof e=="object")return e;if(typeof e!="string"||!e.trim())return{};try{const t=JSON.parse(e);if(Array.isArray(t))return{nodes:t};if(t&&typeof t=="object")return t}catch{return{}}return{}}function ah(e){return JSON.stringify({id:e.id,name:e.name,nodes:e.nodes,edges:e.edges,settings:e.settings,viewState:e.viewState,updatedAt:e.updatedAt})}function Zr(e,t=new Date().toISOString()){return e&&!Number.isNaN(Date.parse(e))?e:t}function ki(e){return(e==null?void 0:e.trim().slice(0,90))||"Untitled Board"}function Tc(e){const t=Mc(e.content_json),n=Zr(e.updated_at??t.updatedAt);return{id:e.id,name:ki(e.title??t.name),updatedAt:n,createdAt:Zr(e.created_at,n),nodeCount:Array.isArray(t.nodes)?t.nodes.length:0,edgeCount:Array.isArray(t.edges)?t.edges.length:0,sourceKind:"cloud"}}function nh(e,t){var w,P;const n=Mc(e.content_json),r=Zr(e.updated_at??n.updatedAt),d=Number((w=n.viewState)==null?void 0:w.cursorX),c=Number((P=n.viewState)==null?void 0:P.cursorY),m=Number(e.last_cursor_x),y=Number(e.last_cursor_y),p=Number.isFinite(d)&&Number.isFinite(c),b=Number.isFinite(m)&&Number.isFinite(y);return{id:e.id,name:ki(e.title??n.name),nodes:Array.isArray(n.nodes)?n.nodes:[],edges:Array.isArray(n.edges)?n.edges:[],settings:n.settings??t,viewState:p?{cursorX:d,cursorY:c}:b?{cursorX:m,cursorY:y}:void 0,updatedAt:r,source:{kind:"cloud",boardId:e.id,loadedAt:new Date().toISOString(),snapshotFormat:"supabase.boards.content_json",originalNodeCount:Array.isArray(n.nodes)?n.nodes.length:0,renderedNodeCount:Array.isArray(n.nodes)?n.nodes.length:0}}}async function Si(e){var p;const t=uc(e);if(!t.cloudBoards.canAttempt)return f.emit("projectStorage.cloud.provider.skipped",{mode:t.cloudBoards.mode}),{userId:null,config:t,reason:t.cloudBoards.mode};const n=Os(e);if(!n)return f.emit("projectStorage.cloud.provider.skipped",{mode:"config-missing"}),{userId:null,config:t,reason:"missing-client"};const{data:r,error:d}=await n.auth.getSession();if(d||!r.session)return f.emit("projectStorage.cloud.provider.sessionMissing",{message:(d==null?void 0:d.message)??"missing-session"}),{userId:null,config:t,reason:"missing-session"};const{data:c,error:m}=await n.auth.getUser(),y=((p=c.user)==null?void 0:p.id)??null;return m||!y?(f.emit("projectStorage.cloud.provider.sessionMissing",{message:(m==null?void 0:m.message)??"missing-user"}),{userId:null,config:t,reason:"missing-user"}):{userId:y,config:t,reason:"provider-ready"}}async function oh(e){const t=await Si(e);if(!t.userId)return[];const n=Os(e);if(!n)return[];f.emit("projectStorage.cloud.list.requested");const{data:r,error:d}=await n.from("boards").select(Ci).eq("user_id",t.userId).order("updated_at",{ascending:!1}).limit(50);if(d)throw f.emit("projectStorage.cloud.provider.failed",{operation:"list",message:d.message}),d;const c=(r??[]).map(Tc);return f.emit("projectStorage.cloud.list.loaded",{count:c.length}),c}async function sh(e,t,n){const r=await Si(e);if(!r.userId)return null;const d=Os(e);if(!d)return null;f.emit("projectStorage.cloud.load.requested",{boardId:t});const{data:c,error:m}=await d.from("boards").select(Ci).eq("user_id",r.userId).eq("id",t).maybeSingle();if(m)throw f.emit("projectStorage.cloud.provider.failed",{operation:"load",boardId:t,message:m.message}),m;if(!c)return null;const y=nh(c,n);return f.emit("projectStorage.cloud.load.loaded",{boardId:t,nodes:y.nodes.length,edges:y.edges.length}),y}async function rh(e,t,n,r=null){var re,se;const d=await Si(e);if(!d.userId)return null;const c=Os(e);if(!c)return null;const m=th(t.id),y=new Date().toISOString(),p=ki(t.name),b=Number((r==null?void 0:r.x)??((re=t.viewState)==null?void 0:re.cursorX)??0),w=Number((r==null?void 0:r.y)??((se=t.viewState)==null?void 0:se.cursorY)??0),P={...t.viewState??{},cursorX:Number.isFinite(b)?b:0,cursorY:Number.isFinite(w)?w:0},N={...t,id:m,name:p,viewState:P,updatedAt:y},_={p_board_id:m,p_title:p,p_description:null,p_thumbnail_url:null,p_is_public:!1,p_created_at:null,p_updated_at:y,p_last_camera_x:n.x,p_last_camera_y:n.y,p_last_camera_z:n.scale,p_last_cursor_x:P.cursorX,p_last_cursor_y:P.cursorY,p_camera_bookmarks:JSON.stringify(t.settings.cameraBookmarks??{}),p_nodes:[],p_include_json_mirror:!0};f.emit("projectStorage.cloud.save.requested",{boardId:m,sourceBoardId:t.id,nodes:t.nodes.length,edges:t.edges.length});const{error:B}=await c.rpc("save_board_snapshot",_);if(B)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-rpc",boardId:m,message:B.message}),B;const F={content_json:ah(N),updated_at:y},{data:$,error:H}=await c.from("boards").update(F).eq("id",m).eq("user_id",d.userId).select(Ci).maybeSingle();if(H)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-json-mirror",boardId:m,message:H.message}),H;const W=$?Tc($):{id:m,name:p,updatedAt:y,createdAt:y,nodeCount:t.nodes.length,edgeCount:t.edges.length,sourceKind:"cloud"};return f.emit("projectStorage.cloud.save.saved",{boardId:W.id,nodes:W.nodeCount,edges:W.edgeCount}),W}function Qr(e){return e.length===0?{minX:0,minY:0,maxX:0,maxY:0}:e.reduce((t,n)=>({minX:Math.min(t.minX,n.x),minY:Math.min(t.minY,n.y),maxX:Math.max(t.maxX,n.x+n.width),maxY:Math.max(t.maxY,n.y+n.height)}),{minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY})}function ih(e,t={},n=Qr(e),r){if(e.length===0)return{after:new Map,boundsAfter:n};const d=vh(t.mode),c=jh(t.order),m=Ih(t.anchor),y=Nh(t.sizeMode),p=Math.max(0,t.gapX??24),b=Math.max(0,t.gapY??24),w=Math.max(1,t.maxColumns??12),P=ei(t.quantile??.75,.05,.95),N=e.map(lh),_=xh(N,c),B=_.map(fe=>fe.width),F=_.map(fe=>fe.height),$=Math.max(1,t.cellWidth??ud(B,P)),H=Math.max(1,t.cellHeight??ud(F,P)),W=Math.max(1,t.targetWidth??$),re=Math.max(1,t.targetHeight??H),se=yh(m,n);if(d==="grid"){gh(_,y,W,re,$,H);const fe=cd(t.columns,w,n.maxX-n.minX,$,p);ch(_,se.x,se.y,fe,$,H,p,b)}else if(d==="masonry"){hh(_,y==="preserve"?"uniformWidth":y,W);const He=cd(t.columns,w,n.maxX-n.minX,W,p);uh(_,se.x,se.y,He,W,p,b)}else d==="stripHorizontal"?(fh(_,y==="preserve"?"uniformHeight":y,re),mh(_,se.x,se.y,p,re)):(bh(_,y==="preserve"?"uniformWidth":y,W),ph(_,se.x,se.y,b,W));let Ie=new Map(_.map(fe=>[fe.id,dh(fe)]));return m==="selectionBoundsCenter"&&(Ie=kh(n,Ie)),t.snapToGrid&&(Ie=Sh(Ie,Math.max(1,t.gridSize??8))),{after:Ie,boundsAfter:Qr(Array.from(Ie.values()))}}function lh(e){return{...e,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function dh(e){return{x:e.x,y:e.y,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function ch(e,t,n,r,d,c,m,y){e.forEach((p,b)=>{const w=Math.floor(b/r),P=b%r,N=t+P*(d+m),_=n+w*(c+y);p.x=N+(d-p.width)/2,p.y=_+(c-p.height)/2})}function uh(e,t,n,r,d,c,m){const y=Array.from({length:r},()=>0);for(const p of e){const b=wh(y),w=t+b*(d+c);p.x=w+(d-p.width)/2,p.y=n+y[b],y[b]+=p.height+m}}function mh(e,t,n,r,d){let c=t;for(const m of e)m.x=c,m.y=n+(d-m.height)/2,c+=m.width+r}function ph(e,t,n,r,d){let c=n;for(const m of e)m.x=t+(d-m.width)/2,m.y=c,c+=m.height+r}function gh(e,t,n,r,d,c){if(t==="fitCellDownOnly")for(const m of e){const y=Math.min(1,d/m.width,c/m.height);m.width*=y,m.height*=y}else t==="uniformWidth"?wi(e,n):t==="uniformHeight"&&Rc(e,r)}function hh(e,t,n){if(t==="fitCellDownOnly"){for(const r of e){const d=Math.min(1,n/r.width);r.width*=d,r.height*=d}return}wi(e,n)}function fh(e,t,n){if(t==="fitCellDownOnly"){for(const r of e){const d=Math.min(1,n/r.height);r.width*=d,r.height*=d}return}Rc(e,n)}function bh(e,t,n){if(t==="fitCellDownOnly"){for(const r of e){const d=Math.min(1,n/r.width);r.width*=d,r.height*=d}return}wi(e,n)}function wi(e,t){for(const n of e){if(n.width<=0)continue;const r=t/n.width;n.width=t,n.height=Math.max(1,n.height*r)}}function Rc(e,t){for(const n of e){if(n.height<=0)continue;const r=t/n.height;n.height=t,n.width=Math.max(1,n.width*r)}}function cd(e,t,n,r,d){if(typeof e=="number"&&e>0)return Math.round(ei(e,1,t));if(n<=1||r<=1)return 1;const c=Math.floor((n+d)/(r+d));return!Number.isFinite(c)||c<1?1:Math.round(ei(c,1,t))}function yh(e,t,n){return{x:t.minX,y:t.minY}}function xh(e,t){return t==="selectionOrder"?[...e].sort((n,r)=>n.selectionIndex-r.selectionIndex):Ch(e)}function Ch(e){const t=[...e].sort((p,b)=>p.y-b.y||p.x-b.x);if(t.length<=2)return t;const n=t.map(p=>p.height).sort((p,b)=>p-b),r=n[Math.floor(n.length/2)]??1,d=Math.max(16,r*.35),c=[];let m=[],y=Number.NaN;for(const p of t)m.length===0?(m=[p],y=p.y):Math.abs(p.y-y)<=d?(m.push(p),y=(y*(m.length-1)+p.y)/m.length):(c.push([...m].sort((b,w)=>b.x-w.x)),m=[p],y=p.y);return m.length>0&&c.push([...m].sort((p,b)=>p.x-b.x)),c.flat()}function kh(e,t){if(t.size===0)return t;const n=Qr(Array.from(t.values())),r=e.minX+(e.maxX-e.minX)/2,d=e.minY+(e.maxY-e.minY)/2,c=n.minX+(n.maxX-n.minX)/2,m=n.minY+(n.maxY-n.minY)/2,y=r-c,p=d-m;return new Map(Array.from(t.entries()).map(([b,w])=>[b,{...w,x:w.x+y,y:w.y+p}]))}function Sh(e,t){return new Map(Array.from(e.entries()).map(([n,r])=>[n,{...r,x:md(r.x,t),y:md(r.y,t)}]))}function ud(e,t){if(e.length===0)return 1;const n=[...e].sort((y,p)=>y-p),r=(n.length-1)*t,d=Math.floor(r),c=Math.min(n.length-1,d+1),m=r-d;return n[d]*(1-m)+n[c]*m}function wh(e){let t=0;for(let n=1;n<e.length;n+=1)e[n]<e[t]&&(t=n);return t}function md(e,t){return Math.round(e/t)*t}function vh(e){const t=Fs(e);return t==="grid"?"grid":t==="striphorizontal"||t==="striph"?"stripHorizontal":t==="stripvertical"||t==="stripv"?"stripVertical":"masonry"}function jh(e){return Fs(e)==="selectionorder"?"selectionOrder":"spatialReading"}function Ih(e){const t=Fs(e);return t==="selectionboundscenter"?"selectionBoundsCenter":t==="viewporttopleft"?"viewportTopLeft":"selectionBoundsTopLeft"}function Nh(e){const t=Fs(e);return t==="fitcelldownonly"?"fitCellDownOnly":t==="uniformwidth"?"uniformWidth":t==="uniformheight"?"uniformHeight":"preserve"}function Fs(e){return String(e??"").trim().toLowerCase().replace(/[^a-z0-9]/g,"")}function ei(e,t,n){return Math.min(n,Math.max(t,e))}const Lc=300,Pc=50*1024*1024,Ah=800;function ke(e){return typeof e=="string"?e.length*2:0}function Mh(e){let t=256;if(t+=ke(e.id),t+=ke(e.kind),t+=ke(e.title),t+=ke(e.body),t+=ke(e.result),t+=ke(e.imageUrl),t+=ke(e.assetUrl),t+=ke(e.sourceFilePath),t+=(e.tags??[]).reduce((n,r)=>n+ke(r),0),e.metadata)for(const[n,r]of Object.entries(e.metadata))t+=ke(n)+ke(r);return e.imageStack&&(t+=128+ke(e.imageStack.title),t+=e.imageStack.variants.reduce((n,r)=>n+96+ke(r.variantId)+ke(r.imageUrl)+ke(r.assetId)+ke(r.title)+ke(r.caption),0)),t}function Th(e){let t=1024+ke(e.id)+ke(e.name)+ke(e.updatedAt);return t+=e.nodes.reduce((n,r)=>n+Mh(r),0),t+=e.edges.length*128,t+=Object.entries(e.settings).reduce((n,[r,d])=>n+ke(r)+ke(typeof d=="string"?d:JSON.stringify(d)),0),t}function Ec(e,t={}){var n,r;return{board:e,description:((n=t.description)==null?void 0:n.trim())||"Board change",mergeKey:((r=t.mergeKey)==null?void 0:r.trim())||null,timestampMs:t.timestampMs??Date.now(),estimatedBytes:Th(e)}}function pd(e,t={}){const n=t.maxEntries??Lc,r=t.maxBytes??Pc;let d=e.slice(Math.max(0,e.length-n)),c=d.reduce((m,y)=>m+y.estimatedBytes,0);for(;d.length>1&&c>r;){const[m,...y]=d;c-=(m==null?void 0:m.estimatedBytes)??0,d=y}return d}function za(e,t,n={}){const r=Ec(t,n),d=n.mergeWindowMs??Ah,c=e.slice(),m=c.at(-1);return m&&r.mergeKey&&m.mergeKey===r.mergeKey&&r.timestampMs-m.timestampMs<d?(c[c.length-1]={...m,description:r.description,timestampMs:r.timestampMs,estimatedBytes:Math.max(m.estimatedBytes,r.estimatedBytes)},pd(c,n)):(c.push(r),pd(c,n))}function Rh(e,t,n={}){const r=Ec(t,n),d=n.maxEntries??Lc,c=n.maxBytes??Pc;let m=[r,...e].slice(0,d),y=m.reduce((p,b)=>p+b.estimatedBytes,0);for(;m.length>1&&y>c;){const p=m.at(-1);y-=(p==null?void 0:p.estimatedBytes)??0,m=m.slice(0,-1)}return m}function Us(e,...t){const n=e==null?void 0:e.metadata;if(!n)return"";for(const r of t){const d=n[r];if(typeof d=="string"&&d.trim())return d.trim()}return""}function ho(e,t){return!!Us(e,t)}function _c(e){if(!e||!e.trim())return!1;const t=e.trim();return/^(https?:|blob:|data:|file:)/i.test(t)}function Bc(e){if(!e)return"";const t=Us(e,"OriginalPath");if(t)return t;const n=String(e.body||"").trim();return _c(n)?"":n}function Dc(e){return e?Bc(e)||String(e.sourceFilePath||"").trim()||String(e.assetUrl||"").trim()||String(e.imageUrl||"").trim()||String(e.body||"").trim():""}function Oc(e){return Us(e,"ThumbnailUrl","thumbnailUrl")}function Lh(e){if(!e||e.kind!=="image")return!1;if(ho(e,"ImageGenerationProvider")||ho(e,"GeneratedImageSourceWidth")||ho(e,"GeneratedImageSourceHeight")||ho(e,"CodexImageQuality")||ho(e,"ImageRouterRevisedPrompt"))return!0;const t=Us(e,"RequestedMediaOperation");return["text2image","image2image","inpaint"].includes(t.toLowerCase())}function vi(e){if(!e)return"";if(e.kind==="image"||e.kind==="mask"){const t=Lh(e)?Bc(e):"",n=Oc(e),r=String(e.body||"").trim();return t||n||String(e.imageUrl||"").trim()||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()||(_c(r)?r:"")}return Dc(e)||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()}function $c(e){if(!e)return"";const t=Dc(e)||e.title||e.kind;return String(t||"").replace(/\\/g,"/").replace(/\/+$/,"").split("/").filter(Boolean).pop()||e.title||e.kind}const Ph=2048,Eh=16e3,vr=1024,jr=64,_h=2048,Ir=3,Bh=16,Dh=256,Oh=new Set(["text","note","memo","markdown","code","directory"]),$h=/[\p{L}\p{M}\p{N}]{2,}/gu,gd=4,Fh=8,hd=1.35;function Uh(e){return Oh.has(String(e||"").trim().toLowerCase())}function zh(e){const t=e.map(Wh),n=new Map,r=new Map,d=new Map,c=new Map;for(const m of t){n.set(m.id,m);for(const y of m.tokens)Nr(r,y,m.id);for(const y of m.prefixes)Nr(d,y,m.id);for(const y of m.ngrams)Nr(c,y,m.id)}return{documents:t,documentById:n,tokenIndex:r,prefixIndex:d,ngramIndex:c}}function Hh(e,t,n={}){const r=Math.max(1,Math.trunc(Number(n.limit||30))),d=Sn(t),c=fd(e,0,0,n.viewport,0);if(!d)return{hits:[],profile:c};const m=Array.from(Fc(d)),y=Array.from(Uc(m)),p=Hc(d),b=Array.from(zc(p)),w=new Map;for(const F of m)Ar(e.tokenIndex,F,w,8);for(const F of y)Ar(e.prefixIndex,F,w,F.length<=3?4:2);for(const F of b)Ar(e.ngramIndex,F,w,1.15);const P=Kh(e,w,r),N=Xh(n.allowedContentTypes),_=[];for(const F of P){const $=e.documentById.get(F);if(!$||N&&!N.has($.contentType))continue;const H=Yh($,d,m,b);if(H<=0)continue;const W=Gh($,n.viewport??null);_.push({nodeId:$.id,score:H+W,textScore:H,viewportBoost:W})}_.sort((F,$)=>$.score-F.score||F.nodeId.localeCompare($.nodeId));const B=_.slice(0,r);return{hits:B,profile:fd(e,P.length,B.length,n.viewport,B.filter(F=>F.viewportBoost>0).length)}}function Sn(e){const t=String(e??"");if(!t.trim())return"";let n=t;try{n=t.normalize("NFKC")}catch{n=t}n=n.toLowerCase();let r="",d=!1;for(const c of n){if(/\s/u.test(c)){d||(r+=" ",d=!0);continue}qh(c)||(r+=c,d=!1)}return r.trim()}function Fc(e){return new Set(e.match($h)??[])}function Uc(e){const t=new Set;for(const n of e){if(!n.trim())continue;const r=Math.min(8,n.length);for(let d=2;d<=r;d+=1)t.add(n.slice(0,d))}return t}function zc(e){const t=new Set;if(!e.trim())return t;if(e.length<=Ir)return t.add(e),t;for(let n=0;n<=e.length-Ir;n+=1)t.add(e.slice(n,n+Ir));return t}function Wh(e){const t=String(e.kind??"").trim().toLowerCase(),n=Ya(e.prompt??e.title,Ph),r=Uh(t)?Ya(e.response??e.body,Eh):"",d=Vh(e.metadata,e.tags,e.metadataText),c=Ya(e.sourceFilePath||e.assetUrl,_h),m=Sn(n),y=Sn(r),p=Sn(d),b=Sn(c),w=Sn(t),P=[m,p,b,y,w].filter(Boolean).join(" "),N=Fc(P);return{id:String(e.id),contentType:t,normalizedPrompt:m,normalizedResponse:y,normalizedMetadata:p,normalizedSourcePath:b,normalizedContentType:w,tokens:N,prefixes:Uc(N),ngrams:zc(Hc(P)),x:Number.isFinite(e.x)?e.x:0,y:Number.isFinite(e.y)?e.y:0,width:Number.isFinite(e.width)?e.width:1,height:Number.isFinite(e.height)?e.height:1}}function Vh(e,t,n){const r=[];let d=0;if(e)for(const[c,m]of Object.entries(e)){if(d>=jr)break;!String(c??"").trim()&&!String(m??"").trim()||(r.push(Ya(c,128)),String(m??"").trim()&&r.push(Ya(m,vr)),d+=1)}return d<jr&&(t!=null&&t.length)&&(r.push("tags",Ya(t.join(" "),vr)),d+=1),d<jr&&(n!=null&&n.trim())&&r.push("metadata",Ya(n,vr)),r.join(" ")}function Yh(e,t,n,r){let d=0;e.normalizedPrompt===t?d+=120:fo(e.normalizedPrompt,t)&&(d+=54),fo(e.normalizedMetadata,t)&&(d+=26),fo(e.normalizedSourcePath,t)&&(d+=18),fo(e.normalizedResponse,t)&&(d+=14),fo(e.normalizedContentType,t)&&(d+=8);for(const c of n)e.tokens.has(c)&&(d+=7),e.normalizedPrompt.startsWith(c)&&(d+=10);for(const c of r)e.ngrams.has(c)&&(d+=.85);return d}function Gh(e,t){if(!t)return 0;const n=e.x+Math.max(1,e.width)/2,r=e.y+Math.max(1,e.height)/2,d=Math.abs(n-t.centerX)/Math.max(1,t.halfWidth),c=Math.abs(r-t.centerY)/Math.max(1,t.halfHeight),m=Math.sqrt(d*d+c*c);if(m<=1)return gd+(1-m)*Fh;if(m<=hd){const y=1-(m-1)/Math.max(.001,hd-1);return Math.max(0,y)*(gd*.75)}return 0}function Kh(e,t,n){return t.size===0?e.documents.map(r=>r.id):Array.from(t.entries()).sort((r,d)=>d[1]-r[1]||r[0].localeCompare(d[0])).slice(0,Math.max(n*Bh,Dh)).map(([r])=>r)}function Xh(e){if(!e)return null;const t=new Set(Array.from(e,n=>String(n||"").trim().toLowerCase()).filter(Boolean));return t.size>0?t:null}function fd(e,t,n,r,d){return{documentCount:e.documents.length,candidateCount:t,rankedCount:n,viewportBoosted:!!r,boostedCount:d,indexedTokenCount:e.tokenIndex.size,indexedPrefixCount:e.prefixIndex.size,indexedNGramCount:e.ngramIndex.size}}function Nr(e,t,n){const r=e.get(t);if(r){r.add(n);return}e.set(t,new Set([n]))}function Ar(e,t,n,r){const d=e.get(t);if(d)for(const c of d)n.set(c,(n.get(c)??0)+r)}function Hc(e){let t="";for(const n of e)/\s/u.test(n)||(t+=n);return t}function Ya(e,t){const n=String(e??"");return n.length<=t?n:n.slice(0,t)}function fo(e,t){return!!(e&&t&&e.includes(t))}function qh(e){const t=e.codePointAt(0)??0;return t<=31||t>=127&&t<=159}const Jh=2147483647,Zh="LocalBridge access is enabled, but the bridge is not reachable. Restart LocalBridge, allow Chrome local-network access, then reload MindCanvas.",Qh="Local storage is unavailable in the hosted app until browser local storage or LocalBridge access is available.",ef="Local storage is unavailable. Check the browser-local storage state or LocalBridge connection.",tf="Cloud projects are unavailable until Supabase and Cloudflare R2 are configured.",af="Login is required before cloud projects can be used.",nf="Cloud projects are unavailable.";function of(e){return e.bridgeProviderConfigured||e.browserProviderConfigured||e.embeddedProviderConfigured}function ti(e,t=!0){const n={isAvailable:!1,bridgeReachable:!1,browserLocalAvailable:!1,embeddedLocalAvailable:!1,providerKind:"none",canBrowseWorkspace:!1};return e.bridgeProviderConfigured&&e.bridgeReachable?{...n,isAvailable:!0,bridgeReachable:!0,providerKind:"bridge",canBrowseWorkspace:!0}:e.hostedWebApp&&e.hostedLocalBridgeAccessEnabled&&e.bridgeProviderConfigured?{...n,providerKind:"bridge"}:e.browserProviderConfigured&&(e.browserLocalAvailable||t&&e.browserLocalAvailableWhenEmpty===!0)?{...n,isAvailable:!0,browserLocalAvailable:!0,providerKind:"browser"}:e.embeddedProviderConfigured&&e.supportsEmbeddedLocal?{...n,isAvailable:!0,embeddedLocalAvailable:!0,providerKind:"embedded"}:n}function sf(e){return ti(e,!1).isAvailable?"local":ji(e)?"cloud":ti(e,!0).isAvailable?"local":e.cloudConfigured?"cloud":"local"}function ji(e){return e.cloudConfigured&&e.cloudSessionAvailable}function rf(e,t){return t.providerKind==="bridge"&&!t.bridgeReachable?Zh:e.hostedWebApp?Qh:ef}function lf(e){return e.cloudConfigured?ji(e)?nf:af:tf}function df(e){var w,P,N;const t=ji(e),n=ti(e,!0),r=of(e),d=e.cloudConfigured,c=n.isAvailable,m=t;let y=e.storedMode??sf(e);y==="cloud"&&(!d||!m&&c)?y=c?"local":"cloud":y==="local"&&(!r&&d||!c&&m)&&(y="cloud");const p=e.cloudAccess,b=((w=p==null?void 0:p.denialReason)==null?void 0:w.trim())||void 0;return{currentMode:y,showLocalTab:r,showCloudTab:d,isLocalAvailable:n.isAvailable,isCloudAvailable:t,requiresCloudSignIn:e.cloudConfigured&&!t,canUseLocalProjects:c,canBrowseLocalWorkspace:n.canBrowseWorkspace,localProviderKind:n.providerKind,canUseCloudProjects:m,canSyncLocalToCloud:c&&m,cloudPlanKey:((P=p==null?void 0:p.planKey)==null?void 0:P.trim())||"free",cloudEntitlementStatus:((N=p==null?void 0:p.entitlementStatus)==null?void 0:N.trim())||(p?"active":"inactive"),currentCloudBoardCount:(p==null?void 0:p.currentBoardCount)??0,cloudBoardLimit:(p==null?void 0:p.cloudBoardLimit)??Jh,lockedCloudBoardCount:(p==null?void 0:p.lockedBoardCount)??0,canCreateCloudBoards:(p==null?void 0:p.canCreateBoard)??m,canUseManagedAi:(p==null?void 0:p.canUseManagedAi)??!1,canGenerateImage:(p==null?void 0:p.canGenerateImage)??!1,canUseContextPack:(p==null?void 0:p.canUseContextPack)??!1,cloudLimitMessage:b,localStatusMessage:n.isAvailable?void 0:rf(e,n),cloudStatusMessage:m?void 0:lf(e)}}function cf(){const e=new Error("Queued operation was cancelled before it started.");return e.name="AbortError",e}class uf{constructor(){Pl(this,"tails",new Map)}isBusy(t){return this.tails.has(t)}enqueue(t,n,r){if(typeof n!="function")throw new TypeError("KeyedAsyncQueue operation is required.");const d=this.tails.get(t)??Promise.resolve();let c;return c=(async()=>{try{try{await d}catch{}if(r!=null&&r.aborted)throw cf();return await n(r)}finally{this.tails.get(t)===c&&this.tails.delete(t)}})(),this.tails.set(t,c),c}clear(t){if(typeof t>"u"){this.tails.clear();return}this.tails.delete(t)}}const mf=/^data:image\//i;function pf(e){const t=String(e||"").trim();if(!t)return{src:null,reason:"empty",urlKind:"empty"};const n=t.toLowerCase();return mf.test(t)?{src:t,reason:null,urlKind:"data"}:n.startsWith("blob:")?{src:t,reason:null,urlKind:"blob"}:n.startsWith("https://")?{src:t,reason:null,urlKind:"https"}:n.startsWith("http://")?{src:t,reason:null,urlKind:"http"}:t.startsWith("//")?{src:t,reason:null,urlKind:"protocol-relative"}:t.startsWith("/")||t.startsWith("./")||t.startsWith("../")?{src:t,reason:null,urlKind:"relative"}:/^[a-z][a-z0-9+.-]*:/i.test(t)?{src:null,reason:"unsupported-protocol",urlKind:t.split(":",1)[0].toLowerCase()}:{src:t,reason:null,urlKind:"relative"}}function Mr({src:e,alt:t="",className:n="",testId:r="secure-image",traceId:d,kind:c="image",title:m}){const y=g.useMemo(()=>pf(e),[e]),[p,b]=g.useState(y.src?"loading":"blocked");g.useEffect(()=>{const _=y.src?"loading":"blocked";b(_),y.src||f.emit("secureImage.blocked",{id:d,kind:c,reason:y.reason,urlKind:y.urlKind})},[c,y.reason,y.src,y.urlKind,d]);const w=()=>{b("loaded"),f.emit("secureImage.loaded",{id:d,kind:c,urlKind:y.urlKind})},P=()=>{b("error"),f.emit("secureImage.error",{id:d,kind:c,urlKind:y.urlKind})},N=p==="blocked"?`Image blocked: ${y.reason||"unsupported source"}`:"Image failed to load";return o.jsxs("div",{className:`secure-image secure-image--${p} ${n}`.trim(),"data-testid":r,"data-secure-image-state":p,"data-secure-image-kind":c,title:p==="loaded"?m:N,children:[y.src&&o.jsx("img",{src:y.src,alt:t,loading:"lazy",decoding:"async",draggable:!1,onLoad:w,onError:P}),p==="loading"&&o.jsx("span",{className:"secure-image__loading","aria-hidden":"true",children:o.jsx("span",{})}),(p==="blocked"||p==="error")&&o.jsx("span",{className:"secure-image__fallback",role:"img","aria-label":N,children:p==="blocked"?o.jsx(Up,{size:18}):o.jsx(zp,{size:18})})]})}const gf={note:Ts,text:wt,"ai-task":vn,image:In,mask:In,video:Nn,embed:An,code:jn,markdown:wt,"csv-table":wt,memo:Ts,pdf:wt,file:Yr,directory:Hp,"template-launcher":wt,"remote-monitor":Ms,"remote-control":Ms},Tr=[{key:"Auto",label:"Auto Detect",description:"Infer whether this note is growth, revenue, build, or research work."},{key:"GeneralCompany",label:"General AI Company",description:"Balanced planning, practical work, and artifact production."},{key:"GrowthValidation",label:"Growth Validation",description:"Marketing loops, signals, messaging, distribution, and experiments."},{key:"RevenueAffiliate",label:"Revenue / Affiliate",description:"Affiliate discovery, keywords, content assets, and revenue experiments."},{key:"ProductBuild",label:"Product Build",description:"Specs, implementation-oriented work, artifacts, and approval gates."},{key:"ResearchOnly",label:"Research Only",description:"Evidence gathering, risks, synthesis, and recommendations."}],bd=500,hf=48,ff=new Set(["mindcanvasagent","agentcommand"]),bf=new Set(["codenote","code-note"]),yf=["multidesktopmonitor","remotehubmonitor","remotefleetmonitor","smartviewmonitor"],xf=["remotedevice","remotefleetdevice","remotecontrol"],Cf=["top","right","bottom","left"];function kf(e){const t=Tn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),n=Tn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=Tn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-monitor"||t==="remotefleetmonitor"||n==="fleet-monitor"||r==="remote-fleet@1"||Vc(e,["RemoteFleetViewMode","RemoteFleetHubStatus","RemoteFleetDevicesJson","RemoteFleetDeviceCount","RemoteFleetConnectedDeviceCount","RemoteFleetProjectionMode","RemoteFleetCanvasPagination","RemoteHub","RemoteRoute","RemotePage","RemoteVisibleBudget"])||Wc(e,yf,["remote","monitor"])}function Sf(e){const t=Tn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),n=Tn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=Tn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-control"||t==="remotefleetdevice"||n==="fleet-device"||r==="remote-fleet-device@1"||Vc(e,["RemoteFleetDeviceId","RemoteFleetDeviceName","RemoteFleetDevicePlatform","RemoteFleetDeviceConnected","RemoteFleetDeviceCanControl","RemoteFleetSourceMonitorNodeId"])||Wc(e,xf,["remote","control"])}function Wc(e,t,n){const r=(e.tags??[]).map(y=>y.trim().toLowerCase()).filter(Boolean),d=n.every(y=>r.includes(y)),m=[e.title,e.body,e.sourceFilePath,e.assetUrl,...r].join(" ").toLowerCase().replace(/[^a-z0-9]+/g,"");return d||t.some(y=>m.includes(y))}function Tn(e,...t){const n=e.metadata??{};for(const d of t){const c=n[d];if(c!=null)return String(c)}const r=new Set(t.map(d=>d.toLowerCase()));for(const[d,c]of Object.entries(n))if(r.has(d.toLowerCase())&&c!==void 0&&c!==null)return String(c);return""}function Vc(e,t){const n=e.metadata??{},r=new Set(t.map(d=>d.toLowerCase()));return Object.entries(n).some(([d,c])=>r.has(d.toLowerCase())&&c!==void 0&&c!==null&&String(c).trim()!=="")}const ai=[{key:"coral",label:"Coral",swatch:"#ff8052",ring:"rgba(255, 128, 82, 0.22)",surface:"#fff2eb",border:"rgba(255, 128, 82, 0.42)",ink:"#7c2d12"},{key:"amber",label:"Amber",swatch:"#f59e0b",ring:"rgba(245, 158, 11, 0.22)",surface:"#fffbeb",border:"rgba(245, 158, 11, 0.42)",ink:"#78350f"},{key:"sun",label:"Sun",swatch:"#ca8a04",ring:"rgba(202, 138, 4, 0.22)",surface:"#fef9c3",border:"rgba(202, 138, 4, 0.38)",ink:"#713f12"},{key:"sage",label:"Sage",swatch:"#65a30d",ring:"rgba(101, 163, 13, 0.22)",surface:"#f7fee7",border:"rgba(101, 163, 13, 0.38)",ink:"#365314"},{key:"mint",label:"Mint",swatch:"#10b981",ring:"rgba(16, 185, 129, 0.22)",surface:"#ecfdf5",border:"rgba(16, 185, 129, 0.36)",ink:"#064e3b"},{key:"sky",label:"Sky",swatch:"#3b82f6",ring:"rgba(59, 130, 246, 0.22)",surface:"#eff6ff",border:"rgba(59, 130, 246, 0.36)",ink:"#1e3a8a"},{key:"indigo",label:"Indigo",swatch:"#6366f1",ring:"rgba(99, 102, 241, 0.22)",surface:"#eef2ff",border:"rgba(99, 102, 241, 0.36)",ink:"#312e81"},{key:"violet",label:"Violet",swatch:"#8b5cf6",ring:"rgba(139, 92, 246, 0.22)",surface:"#f5f3ff",border:"rgba(139, 92, 246, 0.36)",ink:"#4c1d95"},{key:"rose",label:"Rose",swatch:"#f43f5e",ring:"rgba(244, 63, 94, 0.22)",surface:"#fff1f2",border:"rgba(244, 63, 94, 0.36)",ink:"#881337"},{key:"gray",label:"Gray",swatch:"#6b7280",ring:"rgba(107, 114, 128, 0.22)",surface:"#f9fafb",border:"rgba(107, 114, 128, 0.32)",ink:"#374151"},{key:"slate",label:"Slate",swatch:"#64748b",ring:"rgba(100, 116, 139, 0.22)",surface:"#f8fafc",border:"rgba(100, 116, 139, 0.32)",ink:"#334155"}],wf=g.memo(function({node:t,selected:n,selectionCount:r,pulsing:d,connectionDraft:c,onSelect:m,onDragStart:y,onResizeStart:p,onPatch:b,onDelete:w,onDuplicate:P,onRun:N,onPin:_,onConnectorDragStart:B,onOpenResult:F,onToggleAiReference:$,onCopyNode:H,onCopyEmbedReference:W,onFitNodeHeight:re,onToggleNodeExpanded:se,onToggleWordWrap:Ie,onStageCompany:fe,onOpenCompanyGraph:He,onSyncCompanyGoal:jt,onRefreshCompany:ot,onSetCompanyStatus:V,onRemoveCompany:G,onOpenAsset:ie,onOpenDirectorySettings:ae,onScanDirectory:mt,onCreateRemoteControl:z,onGenerateTemplateCard:It}){var Vn,Do,lt,Ht,Ra,rn,ua,ln,ne,Xe,dn,Yn,v,K,oe,Oo,ze,Wt,Vt,cn,un,Gn,Kn,mn,Xn,La,qn,pn,Pa,ma,Oe,Ee,Ea,_a,gn,Jn;const Ze=String(((Vn=t.metadata)==null?void 0:Vn.AutomationNodeKind)||((Do=t.metadata)==null?void 0:Do.AutomationTemplateKey)||((lt=t.metadata)==null?void 0:lt.AutomationInferredKind)||"").trim().toLowerCase(),_e=String(((Ht=t.metadata)==null?void 0:Ht.SemanticType)||((Ra=t.metadata)==null?void 0:Ra.semanticType)||"").trim().toLowerCase(),$e=t.kind==="memo"&&ff.has(_e),Me=t.kind==="memo"&&bf.has(_e),Bt=String(((rn=t.metadata)==null?void 0:rn.AgentCommandStatus)||"Draft"),U=String(((ua=t.metadata)==null?void 0:ua.AgentCommandMode)||"Task"),Be=String(((ln=t.metadata)==null?void 0:ln.AgentCommandRequestedRole)||"Researcher"),ea=String(((ne=t.metadata)==null?void 0:ne.CodeNoteStatus)||"Draft"),Xa=String(((Xe=t.metadata)==null?void 0:Xe.CodeNoteSyncState)||"Unlinked"),ta=String(((dn=t.metadata)==null?void 0:dn.CodeNoteKind)||"Feature"),qa=$e?vn:Me?jn:Ze==="image-generate"?In:Ze==="video-generate"?Nn:gf[t.kind],En=c&&c.from!==t.id,_n=t.kind==="ai-task",Te=t.kind==="pdf"||t.kind==="file"||t.kind==="directory",Ja=kf(t),aa=Sf(t),De=Ja||aa,Re=Ja?"monitor":aa?"control":"",pe=r>1,zs=_n?"result":"context",We=((Yn=c==null?void 0:c.target)==null?void 0:Yn.id)===t.id?c.target.side:null,na=(c==null?void 0:c.from)===t.id,Qe=t.kind==="template-launcher"||String(((v=t.metadata)==null?void 0:v.semanticType)||((K=t.metadata)==null?void 0:K.SemanticType)||"").toLowerCase()==="templatelauncher",pt=t.kind==="video",de=t.kind==="embed",Le=t.kind==="mask",Ve=t.kind==="memo",Ao=t.kind==="markdown",be=t.kind==="csv-table",Fe=Ve?Lf(t):null,oa=g.useRef(null),Dt=pt?Yc(t):"",Ne=pt?Ef(t):"",gt=de?_f(t):"",Ue=de?Bf(t):"",Mo=de?Df(t,gt):"",Za=de?Of(t):"",Ae=(((oe=t.imageStack)==null?void 0:oe.variants)??[]).filter(x=>!!x.imageUrl),Ye=Ae.find(x=>{var D;return x.variantId===((D=t.imageStack)==null?void 0:D.activeVariantId)})??Ae[0]??null,Sa=t.kind==="image"||Le?(Ye==null?void 0:Ye.imageUrl)||vi(t):"",To=Ye?Ae.findIndex(x=>x.variantId===Ye.variantId):-1,Bn=!Sa&&!Te&&!De&&!Qe&&!pt&&!de,Ro=Bn&&!Ve,st=t.isExpanded===!1&&Number(t.originalHeight??0)>t.height+1,Dn=!De&&!["image","mask","video","embed","pdf","file","directory","template-launcher","remote-monitor","remote-control"].includes(t.kind),rt=t.aiEnabled!==!1,Ge=Pf(t),et=!!(t.isChunkedText||((Oo=t.metadata)==null?void 0:Oo.IsChunkedText)==="true"),wa=Number(t.totalLineCount??((ze=t.metadata)==null?void 0:ze.TotalLineCount)??0),Lo=t.sourceFilePath||((Wt=t.metadata)==null?void 0:Wt.FileName)||t.title,ye=et?o.jsxs("div",{className:"node-chunked-text-state","data-testid":"node-chunked-text-state",title:Lo,children:[o.jsx(wt,{size:12}),o.jsx("strong",{children:"Chunked text"}),Number.isFinite(wa)&&wa>0&&o.jsxs("span",{children:[wa.toLocaleString()," lines"]})]}):null,sa=t.kind==="directory"?(Vt=t.metadata)==null?void 0:Vt.Include:null,Qa=t.kind==="directory"?(cn=t.metadata)==null?void 0:cn.Exclude:null,On=t.kind==="directory"?(un=t.metadata)==null?void 0:un.DirectoryFileCount:null,Pe=t.kind==="directory"?(Gn=t.metadata)==null?void 0:Gn.DirectoryDirCount:null,Nt=t.kind==="directory"?(Kn=t.metadata)==null?void 0:Kn.DirectoryLastScanUtc:null,[en,tn]=g.useState(!1),[an,Ke]=g.useState(null),[Hs,$n]=g.useState(((mn=t.metadata)==null?void 0:mn.CompanyExecutionMode)||"Auto"),[va,nn]=g.useState(((Xn=t.metadata)==null?void 0:Xn.CompanySubAgents)!=="false"),[ra,ja]=g.useState(!1),[At,on]=g.useState(null),Ia=g.useMemo(()=>be?Nf(t.body,At):null,[At,be,t.body]),ce=g.useMemo(()=>Qe?ic(t.body):null,[Qe,t.body]),ht=(ce==null?void 0:ce.options.find(x=>x.id===ce.selectedOptionId))??(ce==null?void 0:ce.options[0])??null,ia=ip(ce),Ot=Tr.find(x=>x.key===Hs)||Tr[0],$t=String(((La=t.metadata)==null?void 0:La.CompanyStatus)||(t.companyMode?"Staged":"")).trim(),Ft=$t.toLowerCase(),la=Ft==="paused",ft=Ft==="archived",Ws=x=>{x.stopPropagation();const D=x.currentTarget.getBoundingClientRect();Ke(jf(D)),tn(le=>!le)},Vs=x=>{x.stopPropagation(),fe(t.id,{executionMode:Ot.key,enableSubAgents:va}),tn(!1)},Po=x=>{x.stopPropagation(),He(t.id)},Na=(x,D)=>{D.stopPropagation();const le=Ae.find(Yt=>Yt.variantId===x);!le||!t.imageStack||le.variantId===t.imageStack.activeVariantId||(f.emit("node.imageStack.variant",{nodeId:t.id,variantId:le.variantId,variantCount:Ae.length}),b(t.id,{imageUrl:le.imageUrl,imageStack:{...t.imageStack,activeVariantId:le.variantId,variants:Ae,updatedAtUtc:new Date().toISOString()},metadata:{...t.metadata??{},ImageStackActiveVariantId:le.variantId}}))},Ys=(x,D)=>{if(D.stopPropagation(),!!Ve){if((Fe==null?void 0:Fe.key)===x){ja(!1);return}f.emit("node.memoColor.changed",{id:t.id,colorKey:x}),b(t.id,{metadata:{...t.metadata??{},memoColor:x,memoColorIsCustom:"true"}}),ja(!1)}},Fn=x=>{var xt,hn;if(x.stopPropagation(),!$e)return;const D=(t.body||t.title||"Agent command objective").trim(),le=["Clarify the objective and constraints.","Collect linked canvas context or code notes.","Draft an execution plan before external adapter use."],Yt=["canvas-context","agent-command-planning","adapter-gated-execution"],yt=["Canvas.ListAgentCommands","Canvas.UpdateAgentCommand","Canvas.PlanAgentCommand","Canvas.SetAgentCommandState"],dt=["MindCanvasAgent",U,Be],pa=["Local React plan staged for this Agent Command.",`Role: ${Be}`,`Mode: ${U}`,`Objective: ${D.slice(0,220)}`,"External execution remains adapter-gated until LocalBridge/agent runtime is available."].join(`
3
+ `);f.emit("mindcanvas.agentCommand.planned",{id:t.id,mode:U,requestedRole:Be,adapterState:((xt=t.metadata)==null?void 0:xt.AdapterState)??"adapter-gated"}),b(t.id,{tags:["Agent Command",Be,"Planned"],metadata:{...t.metadata??{},AgentCommandStatus:"Planned",AgentCommandPlannerSummary:pa,AgentCommandPlanSteps:JSON.stringify(le),AgentCommandPlannedSkills:JSON.stringify(Yt),AgentCommandPlannedTools:JSON.stringify(yt),AgentCommandPlannedConcepts:JSON.stringify(dt),AgentCommandLastExplorationPhase:"planned-local",AdapterState:((hn=t.metadata)==null?void 0:hn.AdapterState)??"adapter-gated"}})},Aa=x=>{var yt,dt;if(x.stopPropagation(),!$e)return;const D=new Date().toISOString(),le=[`Agent Command: ${t.title||"Agent"}`,`Status: Completed locally at ${D}`,"","This React MindCanvas node preserves the original Agent Command workflow shape.","No external agent runtime was invoked; execution remains adapter-gated.","","Next action:","Connect LocalBridge/agent runtime or move this command into CodeMaster for a deeper implementation run."].join(`
4
+ `),Yt=[`${D} Local React execution staged.`,`${D} Adapter gated; no external tools invoked.`];f.emit("mindcanvas.agentCommand.executed.local",{id:t.id,mode:U,requestedRole:Be,adapterState:((yt=t.metadata)==null?void 0:yt.AdapterState)??"adapter-gated"}),b(t.id,{status:"done",result:le,tags:["Agent Command",Be,"Completed"],metadata:{...t.metadata??{},AgentCommandStatus:"Completed",AgentCommandLastExecutedAtUtc:D,AgentCommandConsoleLogs:JSON.stringify(Yt),AgentCommandResultLinks:JSON.stringify([]),AdapterState:((dt=t.metadata)==null?void 0:dt.AdapterState)??"adapter-gated"}})},Ma=(x,D,le,Yt)=>{var dt,pa,xt;if(x.stopPropagation(),!Me)return;const yt=D==="Implemented"?JSON.stringify([`local-code-note://${t.id}/implementation-handoff.md`]):((dt=t.metadata)==null?void 0:dt.CodeNoteOutputArtifacts)||"[]";f.emit("mindcanvas.codeNote.state",{id:t.id,status:D,syncState:le,reason:Yt,adapterState:((pa=t.metadata)==null?void 0:pa.AdapterState)??"local-canvas-only"}),b(t.id,{tags:["Code Note",D,le],metadata:{...t.metadata??{},CodeNoteStatus:D,CodeNoteSyncState:le,CodeNoteOutputArtifacts:yt,...D==="Implemented"||D==="Reviewed"?{CodeNoteLastAppliedAtUtc:new Date().toISOString()}:{},AdapterState:((xt=t.metadata)==null?void 0:xt.AdapterState)??"local-canvas-only"}})},Ut=()=>{nn(x=>!x)},Eo=async x=>{if(x.stopPropagation(),!Ne||!oa.current){f.emit("node.video.unavailable",{id:t.id,reason:Ne?"element-missing":"source-missing"});return}try{await oa.current.play(),f.emit("node.video.play",{id:t.id,sourceKind:xd(Ne)})}catch(D){f.emit("node.video.unavailable",{id:t.id,reason:D instanceof Error?D.message:String(D)})}},Ta=x=>{if(x.stopPropagation(),!Ne||!oa.current){f.emit("node.video.unavailable",{id:t.id,reason:Ne?"element-missing":"source-missing"});return}oa.current.pause(),f.emit("node.video.pause",{id:t.id,sourceKind:xd(Ne)})},da=x=>{x.stopPropagation(),gt&&W(t.id,gt)},Un=x=>{b(t.id,{body:JSON.stringify(x),metadata:{...t.metadata??{},templateLauncherSelectedOptionId:x.selectedOptionId??""}})},it=(x,D)=>{if(D.stopPropagation(),!ce)return;const le=cp(ce,x);Un(le),f.emit("templateCard.option.select",{nodeId:t.id,optionId:le.selectedOptionId??null})},zn=(x,D)=>{if(!ce)return;const le=up(ce,x,D);Un(le),f.emit("templateCard.input.patch",{nodeId:t.id,key:x})},zt=x=>{x.stopPropagation(),!(!ce||ia)&&It(t.id,ce.selectedOptionId??null,ce.inputValues)},ca=Dn&&en?o.jsxs("div",{className:"node-company-launcher","data-testid":"node-company-launcher",style:an?{left:an.left,top:an.top}:void 0,onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[o.jsx("div",{className:"node-company-launcher__eyebrow",children:"Run As Company"}),o.jsx("h4",{children:"Turn this note into a background AI company"}),o.jsx("p",{children:"Pick the operating mode to stage on this node. External CompanyCore execution stays adapter-gated."}),o.jsx("div",{className:"node-company-mode-list",children:Tr.map(x=>o.jsxs("button",{type:"button",className:x.key===Ot.key?"is-selected":"","data-company-mode":x.key,onClick:()=>$n(x.key),children:[o.jsx("strong",{children:x.label}),o.jsx("span",{children:x.description})]},x.key))}),o.jsxs("button",{type:"button",className:"node-company-subagents","aria-pressed":va,onClick:x=>{x.stopPropagation(),Ut()},children:[o.jsx("span",{className:"node-company-toggle-indicator","aria-hidden":"true",children:va?"On":"Off"}),o.jsxs("span",{children:[o.jsx(mc,{size:13}),"Enable sub-agents for exploration waves and specialist handoff"]})]}),o.jsxs("div",{className:"node-company-launcher__actions",children:[o.jsx("button",{type:"button",className:"btn btn-ghost",onClick:()=>tn(!1),children:"Cancel"}),o.jsx("button",{type:"button",className:"btn btn-primary","data-testid":"node-company-run-confirm",onClick:Vs,children:"Stage Company"})]})]}):null,Hn={width:t.width,height:t.height,transform:`translate3d(${t.x}px, ${t.y}px, 0)`,...Fe?{"--memo-bg":Fe.surface,"--memo-border":Fe.border,"--memo-ink":Fe.ink,"--memo-ring":Fe.ring,"--memo-accent":Fe.swatch}:{}},bt=o.jsxs(o.Fragment,{children:[Ro&&o.jsx("button",{type:"button",title:rt?"Disable AI reference":"Enable AI reference","aria-label":rt?"Disable AI reference":"Enable AI reference",className:rt?"is-active-ai":"is-inactive-ai",onPointerDown:x=>x.stopPropagation(),onClick:()=>$(t.id),children:o.jsx(Wp,{size:13})}),Ve&&o.jsx("button",{type:"button",title:"Change memo color","aria-label":"Change memo color","aria-pressed":ra,className:"is-memo-color-action","data-testid":"node-memo-color-open",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),ja(D=>!D)},children:o.jsx(pc,{size:13})}),t.kind==="code"&&o.jsx("button",{type:"button",title:t.wordWrap===!1?"Enable word wrap":"Disable word wrap","aria-label":t.wordWrap===!1?"Enable word wrap":"Disable word wrap",onPointerDown:x=>x.stopPropagation(),onClick:()=>Ie(t.id),children:o.jsx(Vp,{size:13})}),o.jsx("button",{type:"button",title:Sa?"Copy image to clipboard":"Copy content","aria-label":Sa?"Copy image to clipboard":"Copy content",onPointerDown:x=>x.stopPropagation(),onClick:()=>H(t.id),children:o.jsx(wo,{size:13})}),o.jsx("button",{type:"button",title:"Duplicate node","aria-label":"Duplicate node","data-testid":"node-duplicate",onPointerDown:x=>x.stopPropagation(),onClick:()=>P(t.id),children:o.jsx(gc,{size:13})}),Bn&&o.jsx("button",{type:"button",title:"Fit text height","aria-label":"Fit text height",onPointerDown:x=>x.stopPropagation(),onClick:()=>re(t.id),children:o.jsx(Yp,{size:13})}),Bn&&o.jsx("button",{type:"button",title:st?"Expand node":"Collapse node","aria-label":st?"Expand node":"Collapse node","aria-pressed":st,onPointerDown:x=>x.stopPropagation(),onClick:()=>se(t.id),children:st?o.jsx(Gl,{size:13}):o.jsx(Gp,{size:13})}),_n&&o.jsx("button",{type:"button",title:"Run node",onPointerDown:x=>x.stopPropagation(),onClick:()=>N(t.id),children:o.jsx(Ca,{size:13})}),Dn&&o.jsx("button",{type:"button",title:t.companyMode?"Open Company graph":"Run this note as Company","aria-label":t.companyMode?"Open Company graph":"Run this note as Company",className:t.companyMode?"is-company-action":"","data-testid":t.companyMode?"node-company-graph-open":"node-company-run-open",onPointerDown:x=>x.stopPropagation(),onClick:t.companyMode?Po:Ws,children:o.jsx(Kl,{size:13})}),o.jsx("button",{type:"button",title:"Delete node","aria-label":"Delete node","data-testid":"node-delete",onPointerDown:x=>x.stopPropagation(),onClick:()=>w(t.id),children:o.jsx(Rs,{size:13})})]});_n?(Xl,t.result,Gl):Xl;const sn=De?null:o.jsx("div",{className:"node-connector-handles","data-testid":"node-connector-handles","aria-hidden":!1,children:Cf.map(x=>o.jsx("button",{type:"button",className:`node-connector-handle node-connector-handle--${x} ${na&&(c==null?void 0:c.fromSide)===x?"is-source":""} ${We===x?"is-target":""}`,title:`Drag from ${x} to connect`,"aria-label":`Drag ${x} connector`,"data-testid":"node-connector-handle","data-node-connector":"true","data-connector-node-id":t.id,"data-connector-side":x,"data-connector-kind":zs,onPointerDown:D=>B(t.id,x,zs,D)},x))}),we=Le||Ae.length>1||de||pt?o.jsxs("div",{className:"node-surface-badges","data-testid":"node-surface-badges",children:[Le&&o.jsx("span",{className:"node-mask-badge",title:"Image edit mask reference",children:"Mask"}),Ae.length>1&&o.jsxs("span",{className:"node-image-stack-badge",title:"Image stack variants",children:[Math.max(1,To+1),"/",Ae.length]}),de&&o.jsx("span",{className:"node-embed-badge",children:Ue==="youtube"?"YouTube":"Embed"}),pt&&o.jsx("span",{className:"node-video-badge",children:((qn=t.metadata)==null?void 0:qn.MediaModel)||((pn=t.metadata)==null?void 0:pn.MediaProvider)||"Video"})]}):null,ge=Ae.length>1||de||pt||Te?o.jsxs("div",{className:"node-surface-actions","data-testid":"node-surface-actions",children:[Ae.length>1&&o.jsx("div",{className:"node-image-stack-rail","aria-label":"Image stack variants",children:Ae.map((x,D)=>o.jsx("button",{type:"button",className:x.variantId===(Ye==null?void 0:Ye.variantId)?"is-active":"",title:x.title||x.caption||`Variant ${D+1}`,"aria-label":`Show image variant ${D+1}`,onPointerDown:le=>le.stopPropagation(),onClick:le=>Na(x.variantId,le),children:o.jsx(Mr,{src:x.imageUrl,traceId:`${t.id}:${x.variantId||D}`,kind:"image-stack-variant",testId:"node-image-stack-thumb"})},x.variantId||`${x.imageUrl}-${D}`))}),de&&o.jsxs("div",{className:"node-embed-actions",children:[o.jsxs("button",{type:"button",title:"Open embed","aria-label":"Open embed",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),gt&&ie(t,"external")},children:[o.jsx(An,{size:13}),o.jsx("span",{children:"Open"})]}),o.jsxs("button",{type:"button",title:"Copy URL","aria-label":"Copy URL",onPointerDown:x=>x.stopPropagation(),onClick:da,children:[o.jsx(wo,{size:13}),o.jsx("span",{children:"Copy URL"})]})]}),pt&&o.jsxs("div",{className:"node-video-actions",children:[o.jsxs("button",{type:"button",title:"Play video","aria-label":"Play video","data-testid":"node-video-play",onPointerDown:x=>x.stopPropagation(),onClick:Eo,children:[o.jsx(Ca,{size:13}),o.jsx("span",{children:"Play"})]}),o.jsxs("button",{type:"button",title:"Pause video","aria-label":"Pause video","data-testid":"node-video-pause",onPointerDown:x=>x.stopPropagation(),onClick:Ta,children:[o.jsx(Io,{size:13}),o.jsx("span",{children:"Pause"})]})]}),Te&&o.jsxs("div",{className:"node-asset-actions",children:[t.kind==="pdf"&&o.jsxs("button",{type:"button",title:"Preview PDF","data-testid":"node-pdf-preview",onPointerDown:x=>x.stopPropagation(),onClick:()=>ie(t,"preview"),children:[o.jsx(Kp,{size:13}),o.jsx("span",{children:"Preview"})]}),t.kind!=="directory"&&o.jsxs("button",{type:"button",title:"Open in new tab",onPointerDown:x=>x.stopPropagation(),onClick:()=>ie(t,"external"),children:[o.jsx(An,{size:13}),o.jsx("span",{children:"Open"})]}),t.kind==="directory"&&o.jsxs("button",{type:"button",title:"Scan folder","data-testid":"directory-scan",onPointerDown:x=>x.stopPropagation(),onClick:()=>mt(t.id),children:[o.jsx(Mn,{size:13}),o.jsx("span",{children:"Scan"})]}),t.kind==="directory"&&o.jsxs("button",{type:"button",title:"Folder scan settings","data-testid":"directory-settings-open",onPointerDown:x=>x.stopPropagation(),onClick:()=>ae(t.id),children:[o.jsx(ks,{size:13}),o.jsx("span",{children:"Settings"})]})]})]}):null,tt=!De&&!pe?o.jsxs("div",{className:"node-external-action-rail","data-testid":"node-external-action-rail",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[ge,o.jsx("div",{className:"node-external-rail__pins",children:null}),o.jsx("div",{className:"node-actions","data-testid":"node-actions",children:bt}),$e&&o.jsxs("div",{className:"node-agent-command-actions","data-testid":"node-agent-command-actions",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[o.jsx("button",{type:"button","data-testid":"node-agent-command-plan","data-agent-command-action":"plan",onClick:Fn,children:"Plan"}),o.jsx("button",{type:"button","data-testid":"node-agent-command-execute","data-agent-command-action":"execute",disabled:Bt==="Running",onClick:Aa,children:"Execute"})]}),Me&&o.jsxs("div",{className:"node-code-note-actions","data-testid":"node-code-note-actions",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[o.jsx("button",{type:"button","data-testid":"node-code-note-approve","data-code-note-action":"approve",onClick:x=>Ma(x,"Approved","Planned","approve-local"),children:"Approve"}),o.jsx("button",{type:"button","data-testid":"node-code-note-review","data-code-note-action":"review",onClick:x=>Ma(x,"Reviewed","InSync","review-local"),children:"Review"}),o.jsx("button",{type:"button","data-testid":"node-code-note-out-of-sync","data-code-note-action":"out-of-sync",onClick:x=>Ma(x,ea,"OutOfSync","mark-out-of-sync-local"),children:"Out of sync"})]}),t.companyMode&&o.jsxs("div",{className:"node-company-quick-actions","data-testid":"node-company-quick-actions","data-company-status":$t||"Staged",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[o.jsx("button",{type:"button",title:"Update Company goal from this note","aria-label":"Update Company goal from this note","data-testid":"node-company-sync-goal",disabled:ft,onClick:()=>jt(t.id),children:o.jsx(hc,{size:12})}),o.jsx("button",{type:"button",title:"Refresh Company status","aria-label":"Refresh Company status","data-testid":"node-company-refresh",onClick:()=>ot(t.id),children:o.jsx(Mn,{size:12})}),ft?o.jsx("button",{type:"button",title:"Company is archived","aria-label":"Company is archived","data-testid":"node-company-archived",disabled:!0,children:o.jsx(Gr,{size:12})}):la?o.jsx("button",{type:"button",title:"Resume Company","aria-label":"Resume Company","data-testid":"node-company-resume",onClick:()=>V(t.id,"Staged"),children:o.jsx(Ca,{size:12})}):o.jsx("button",{type:"button",title:"Pause Company","aria-label":"Pause Company","data-testid":"node-company-pause",onClick:()=>V(t.id,"Paused"),children:o.jsx(Io,{size:12})}),!ft&&o.jsx("button",{type:"button",title:"Archive Company","aria-label":"Archive Company","data-testid":"node-company-archive",onClick:()=>V(t.id,"Archived"),children:o.jsx(Gr,{size:12})}),o.jsx("button",{type:"button",title:"Remove Company from this note","aria-label":"Remove Company from this note","data-testid":"node-company-remove",onClick:()=>G(t.id),children:o.jsx(Et,{size:12})})]})]}):null,Bo=!De&&!pe?o.jsx("div",{className:"node-external-rail","data-testid":"node-external-rail",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:o.jsxs("div",{className:"node-external-rail__meta",children:[o.jsxs("div",{className:"node-tags","data-testid":"node-external-tags",children:[(t.tags??[t.kind]).slice(0,3).map(x=>o.jsx("span",{children:x},x)),t.status&&o.jsx("span",{className:`node-status node-status--${t.status}`,children:t.status})]}),we,ye,$e&&o.jsxs("div",{className:"node-agent-command-state","data-testid":"node-agent-command-state","data-agent-command-status":Bt,"data-agent-command-mode":U,"data-agent-command-role":Be,"data-agent-command-adapter-state":((Pa=t.metadata)==null?void 0:Pa.AdapterState)||"adapter-gated",children:[o.jsx(vn,{size:12}),o.jsx("strong",{children:"AC"}),o.jsx("span",{children:Bt}),o.jsx("span",{children:U}),o.jsx("span",{children:Be})]}),Me&&o.jsxs("div",{className:"node-code-note-state","data-testid":"node-code-note-state","data-code-note-status":ea,"data-code-note-sync-state":Xa,"data-code-note-kind":ta,"data-code-note-adapter-state":((ma=t.metadata)==null?void 0:ma.AdapterState)||"local-canvas-only",children:[o.jsx(jn,{size:12}),o.jsx("strong",{children:"CN"}),o.jsx("span",{children:ea}),o.jsx("span",{children:Xa}),o.jsx("span",{children:ta})]}),t.companyMode&&o.jsxs("div",{className:"node-company-state","data-testid":"node-company-state",children:[o.jsx(Kl,{size:12}),o.jsx("strong",{children:((Oe=t.metadata)==null?void 0:Oe.CompanyExecutionModeLabel)||"Company staged"}),o.jsx("span",{children:((Ee=t.metadata)==null?void 0:Ee.CompanySubAgents)==="false"?"single-agent":"sub-agents"})]})]})}):null;return o.jsxs("article",{className:`canvas-node canvas-node--${t.kind} ${De?"canvas-node--remote-surface":""} ${Ja?"canvas-node--remote-monitor-surface":""} ${aa?"canvas-node--remote-control-surface":""} ${Ze?`canvas-node--automation-${Ze}`:""} ${$e?"canvas-node--agent-command":""} ${Me?"canvas-node--code-note":""} ${n?"is-selected":""} ${d?"is-pulsing":""} ${rt?"":"is-ai-disabled"} ${t.wordWrap===!1?"is-nowrap":""} ${st?"is-collapsed":""} ${t.companyMode?`is-company-${t.companyMode}`:""}`,style:Hn,"data-node-id":t.id,"data-automation-node-kind":Ze||void 0,"data-automation-external-policy":((Ea=t.metadata)==null?void 0:Ea.AutomationExternalActionPolicy)||void 0,"data-media-generation-contract":((_a=t.metadata)==null?void 0:_a.MediaGenerationContract)||void 0,"data-agent-command-node":$e?"true":void 0,"data-agent-command-status":$e?Bt:void 0,"data-agent-command-mode":$e?U:void 0,"data-agent-command-role":$e?Be:void 0,"data-code-note-node":Me?"true":void 0,"data-code-note-status":Me?ea:void 0,"data-code-note-sync-state":Me?Xa:void 0,"data-code-note-kind":Me?ta:void 0,"data-node-status":t.status||void 0,"data-selection-count":r,"data-node-chrome-suppressed":pe?"multi-selection":void 0,"data-remote-surface-chrome":De?"self-contained":void 0,"data-remote-surface-kind":Re||void 0,"data-remote-surface-title-owner":De?"inner-remote-view":void 0,"data-remote-surface-scroll-owner":De?"remote-page-rail":void 0,onPointerDown:x=>{m(t.id,x.shiftKey||x.metaKey||x.ctrlKey),y(t.id,x)},onDoubleClick:x=>{if(t.kind!=="directory")return;const D=x.target instanceof HTMLElement?x.target:null;D!=null&&D.closest('button,input,textarea,select,[contenteditable="true"],[contenteditable=""]')||(x.stopPropagation(),mt(t.id))},children:[!De&&o.jsxs("div",{className:"node-header",children:[o.jsx("span",{className:"node-kind",children:o.jsx(qa,{size:14})}),o.jsx("input",{value:t.title,"aria-label":"Node title",readOnly:Qe,onPointerDown:x=>x.stopPropagation(),onChange:x=>{Qe||b(t.id,{title:x.target.value})}}),t.status==="running"&&o.jsxs("span",{className:"node-run-state node-run-state--running","data-testid":"node-running-state",children:[o.jsx(Mn,{size:12}),o.jsx("span",{children:"Running"})]})]}),ca&&typeof document<"u"?Jm.createPortal(ca,document.body):ca,Ve&&ra&&Fe&&o.jsx("div",{className:"node-memo-palette","data-testid":"node-memo-palette",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:ai.map(x=>o.jsx("button",{type:"button",className:x.key===Fe.key?"is-active":"",title:`${x.label} memo color`,"aria-label":`${x.label} memo color`,"aria-pressed":x.key===Fe.key,"data-memo-color":x.key,style:{"--memo-swatch":x.swatch,"--memo-swatch-ring":x.ring},onPointerDown:D=>D.stopPropagation(),onClick:D=>Ys(x.key,D)},x.key))}),Sa?o.jsx("div",{className:`node-image-wrap ${Ae.length>1?"node-image-wrap--stack":""} ${Le?"node-image-wrap--mask":""}`,"data-testid":Le?"node-mask-preview":Ae.length>1?"node-image-stack":void 0,children:o.jsx(Mr,{src:Sa,traceId:t.id,kind:Le?"mask":"node-image",testId:"node-secure-image"})}):Ja?o.jsx(lp,{node:t,onPatch:b,onCreateRemoteControl:z}):aa?o.jsx(dp,{node:t,onPatch:b}):Qe?o.jsx("div",{className:"node-template-card","data-testid":"node-template-card",children:ce&&ht?o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:"node-template-card__summary",children:[o.jsx("strong",{children:ce.prompt||ce.description}),o.jsx("span",{children:ht.description||ce.description})]}),o.jsx("div",{className:"node-template-card__options","data-testid":"node-template-card-options",children:ce.options.map(x=>o.jsxs("button",{type:"button",className:x.id===ht.id?"is-active":"","data-testid":"node-template-card-option","data-option-id":x.id,onPointerDown:D=>D.stopPropagation(),onClick:D=>it(x.id,D),children:[o.jsx("strong",{children:x.label}),o.jsx("span",{children:x.description})]},x.id||x.templateId))}),o.jsxs("div",{className:"node-template-card__inputs","data-testid":"node-template-card-inputs",children:[ht.inputs.map(x=>o.jsx(vf,{input:x,value:ce.inputValues[x.key]??"",onChange:D=>zn(x.key,D)},x.key)),ht.inputs.length===0&&o.jsx("p",{className:"node-template-card__empty",children:ce.noInputsLabel||"No inputs needed."})]}),ia&&o.jsx("div",{className:"node-template-card__validation",children:ia}),o.jsxs("button",{type:"button",className:"node-template-card__generate","data-testid":"node-template-card-generate",disabled:!!ia,onPointerDown:zt,onClick:x=>x.stopPropagation(),children:[o.jsx(Ca,{size:13}),o.jsx("span",{children:ce.generateLabel||ce.actionLabel||"Generate"})]})]}):o.jsx("div",{className:"node-template-card__missing",children:"Template card payload is unavailable."})}):de?o.jsxs("div",{className:`node-embed-card ${Za?"has-embed-thumbnail":"is-embed-link"}`,"data-testid":"node-embed-card",children:[o.jsx("div",{className:"node-embed-preview",children:Za?o.jsx(Mr,{src:Za,traceId:t.id,kind:"embed-thumbnail",testId:"node-embed-thumbnail"}):o.jsxs("div",{className:"node-embed-placeholder",children:[o.jsx(An,{size:24}),o.jsx("strong",{children:Ue==="youtube"?"YouTube":"Web embed"}),o.jsx("span",{children:Mo||gt||"External link"})]})}),o.jsx("textarea",{value:t.body,"aria-label":"Embed URL or description",spellCheck:!1,onPointerDown:x=>x.stopPropagation(),onChange:x=>{const D=x.target.value;b(t.id,{body:D,assetUrl:D,metadata:{...t.metadata??{},sourceUrl:D,url:D}})}}),gt&&o.jsx("span",{className:"node-embed-source",title:gt,children:gt})]}):pt?o.jsxs("div",{className:`node-video-card ${Ne?"has-video-source":"is-video-prompt"}`,"data-testid":"node-video-card",children:[Ne?o.jsx("video",{ref:oa,src:Ne,className:"node-video-player","data-testid":"node-video-player",controls:!0,preload:"metadata",onPointerDown:x=>x.stopPropagation()}):o.jsxs("div",{className:"node-video-placeholder",children:[o.jsx(Nn,{size:24}),o.jsx("strong",{children:"Video prompt"}),o.jsx("span",{children:((gn=t.metadata)==null?void 0:gn.MediaModel)||((Jn=t.metadata)==null?void 0:Jn.MediaProvider)||"Adapter gated"})]}),o.jsx("textarea",{value:t.body,"aria-label":"Video prompt or source",spellCheck:!1,onPointerDown:x=>x.stopPropagation(),onChange:x=>b(t.id,{body:x.target.value})}),Ne&&o.jsx("span",{className:"node-video-source",title:Dt,children:Dt})]}):Te?o.jsxs("div",{className:`node-asset-card node-asset-card--${t.kind}`,"data-testid":"node-asset-card",children:[o.jsx("div",{className:"node-asset-icon",children:o.jsx(qa,{size:28})}),o.jsxs("div",{className:"node-asset-copy",children:[o.jsx("strong",{title:Ge,children:Ge}),o.jsx("span",{children:t.kind==="directory"?"Directory reference":t.kind==="pdf"?"PDF document":"File reference"}),t.kind==="directory"&&(sa||Qa||On||Pe||Nt)&&o.jsxs("dl",{className:"node-asset-meta","data-testid":"node-directory-meta",children:[(On||Pe)&&o.jsxs(o.Fragment,{children:[o.jsx("dt",{children:"Scanned"}),o.jsxs("dd",{children:[Number(On??0).toLocaleString()," files / ",Number(Pe??0).toLocaleString()," folders"]})]}),sa&&o.jsxs(o.Fragment,{children:[o.jsx("dt",{children:"Include"}),o.jsx("dd",{children:sa})]}),Qa&&o.jsxs(o.Fragment,{children:[o.jsx("dt",{children:"Exclude"}),o.jsx("dd",{children:Qa})]}),Nt&&o.jsxs(o.Fragment,{children:[o.jsx("dt",{children:"Updated"}),o.jsx("dd",{children:new Date(Nt).toLocaleString()})]})]})]})]}):be?o.jsxs("div",{className:"node-csv-card","data-testid":"node-csv-card",children:[o.jsx(If,{preview:Ia,sort:At,onSort:x=>{const D=(At==null?void 0:At.columnIndex)===x&&At.direction==="asc"?"desc":"asc";on({columnIndex:x,direction:D}),f.emit("node.csvTable.sort",{id:t.id,columnIndex:x,direction:D})}}),o.jsx("textarea",{value:t.body,"aria-label":"CSV source",spellCheck:!1,wrap:"off",onPointerDown:x=>x.stopPropagation(),onChange:x=>b(t.id,{body:x.target.value})})]}):Ao?o.jsxs("div",{className:"node-markdown-card","data-testid":"node-markdown-card",children:[o.jsx("div",{className:"node-markdown-preview mindcanvas-text-scrollable-view","data-testid":"node-markdown-preview","aria-label":"Markdown preview",children:o.jsx(Tf,{value:t.body})}),o.jsx("textarea",{value:t.body,"aria-label":"Markdown source",spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:x=>x.stopPropagation(),onChange:x=>b(t.id,{body:x.target.value})})]}):o.jsx(o.Fragment,{children:o.jsx("textarea",{value:t.body,"aria-label":"Node body",spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:x=>x.stopPropagation(),onChange:x=>b(t.id,{body:x.target.value})})}),Bo,tt,sn,o.jsx("button",{type:"button",className:"node-resize-handle",title:"Resize node","aria-label":"Resize node",onPointerDown:x=>p(t.id,x)})]})});function vf({input:e,value:t,onChange:n}){return o.jsxs("label",{className:"node-template-card__field",children:[o.jsxs("span",{children:[o.jsx("strong",{children:e.label}),e.description&&o.jsx("small",{children:e.description})]}),e.type==="textarea"?o.jsx("textarea",{value:t,placeholder:e.placeholder,onPointerDown:r=>r.stopPropagation(),onChange:r=>n(r.target.value)}):e.type==="select"?o.jsx("select",{value:t,onPointerDown:r=>r.stopPropagation(),onChange:r=>n(r.target.value),children:(e.options??[]).map(r=>o.jsx("option",{value:r.value,children:r.label},r.value))}):o.jsx("input",{type:"text",value:t,placeholder:e.placeholder,onPointerDown:r=>r.stopPropagation(),onChange:r=>n(r.target.value)})]})}function jf(e){const r=Math.min(430,window.innerHeight-24),d=Math.max(12,window.innerWidth-332-12),c=Math.min(Math.max(e.right-332,12),d),m=e.bottom+8,y=e.top-r-8,p=Math.max(12,window.innerHeight-r-12),b=m<=p?m:Math.max(12,y);return{left:c,top:Math.min(b,p)}}function If({preview:e,sort:t,onSort:n}){return!e||e.headers.length===0?o.jsx("div",{className:"csv-table-scroll mindcanvas-text-scrollable-view","data-testid":"csv-table-preview","aria-label":"CSV table preview",children:o.jsx("p",{className:"node-md-empty",children:"Paste CSV source to preview a table."})}):o.jsxs("div",{className:"csv-table-scroll mindcanvas-text-scrollable-view","data-testid":"csv-table-preview","data-sort-column":(t==null?void 0:t.columnIndex)??"","data-sort-direction":(t==null?void 0:t.direction)??"","data-total-rows":e.totalRows,"data-rendered-rows":e.renderedRows,"aria-label":"CSV table preview",onPointerDown:r=>r.stopPropagation(),children:[o.jsxs("table",{className:"csv-table",children:[o.jsx("thead",{children:o.jsx("tr",{children:e.headers.map((r,d)=>{const c=(t==null?void 0:t.columnIndex)===d,m=c&&t.direction==="asc"?"descending":"ascending";return o.jsx("th",{"aria-sort":c?t.direction==="asc"?"ascending":"descending":"none",children:o.jsxs("button",{type:"button",className:`csv-table-header-button ${c?"is-active":""}`,"data-testid":`csv-table-sort-${d}`,"aria-label":`Sort CSV by ${r||`Column ${d+1}`} ${m}`,onClick:()=>n(d),children:[o.jsx("span",{children:r||`Column ${d+1}`}),c&&o.jsx("small",{children:t.direction==="asc"?"Asc":"Desc"})]})},`${r}-${d}`)})})}),o.jsx("tbody",{children:e.rows.map((r,d)=>o.jsx("tr",{children:e.headers.map((c,m)=>o.jsx("td",{className:"csv-table-cell",children:r[m]??""},`csv-cell-${d}-${m}`))},`csv-row-${d}`))})]}),o.jsxs("div",{className:"csv-table-status",children:[o.jsxs("span",{children:[e.totalRows.toLocaleString()," rows"]}),o.jsxs("span",{children:[e.columnCount.toLocaleString()," columns"]}),e.truncated&&o.jsxs("span",{children:["showing ",e.renderedRows.toLocaleString()]})]})]})}function Nf(e,t){const n=Af(e,bd+1);if(n.length===0)return null;const r=Math.min(hf,Math.max(...n.map(p=>p.length),1)),d=yd(n[0],r).map((p,b)=>p.trim()||`Column ${b+1}`),c=n.slice(1,bd+1).map(p=>yd(p,r)),m=t?[...c].sort((p,b)=>Mf(p[t.columnIndex]??"",b[t.columnIndex]??"",t.direction)):c,y=Math.max(0,String(e||"").split(/\r\n|\n|\r/).filter(p=>p.length>0).length-1);return{headers:d,rows:m,totalRows:y,columnCount:r,renderedRows:m.length,truncated:y>m.length}}function Af(e,t){const n=[];let r=[],d="",c=!1;const m=String(e||"").replace(/\r\n/g,`
5
+ `).replace(/\r/g,`
6
+ `);for(let y=0;y<m.length;y+=1){const p=m[y],b=m[y+1];if(p==='"'){c&&b==='"'?(d+='"',y+=1):c=!c;continue}if(p===","&&!c){r.push(d),d="";continue}if(p===`
7
+ `&&!c){if(r.push(d),r.some(w=>w.trim().length>0)&&n.push(r),r=[],d="",n.length>=t)break;continue}d+=p}return n.length<t&&(d.length>0||r.length>0)&&(r.push(d),r.some(y=>y.trim().length>0)&&n.push(r)),n}function yd(e,t){return Array.from({length:t},(n,r)=>String(e[r]??"").trim())}function Mf(e,t,n){const r=Number(e.replace(/,/g,"")),d=Number(t.replace(/,/g,"")),m=Number.isFinite(r)&&Number.isFinite(d)&&e.trim()!==""&&t.trim()!==""?r-d:e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"});return n==="asc"?m:-m}function Tf({value:e}){const t=Rf(e);return t.length===0?o.jsx("p",{className:"node-md-empty",children:"Nothing to preview yet."}):o.jsx(o.Fragment,{children:t.map((n,r)=>{const d=`${n.kind}-${r}-${n.text}`;switch(n.kind){case"heading":return o.jsx("strong",{className:`node-md-heading node-md-heading--${n.level}`,children:n.text},d);case"quote":return o.jsx("blockquote",{className:"node-md-quote",children:n.text},d);case"list":return o.jsxs("div",{className:"node-md-list-item",children:[o.jsx("span",{"aria-hidden":"true",children:"-"}),o.jsx("p",{children:n.text})]},d);case"code":return o.jsx("code",{className:"node-md-code",children:n.text},d);case"table":return o.jsx("p",{className:"node-md-table-row",children:n.text},d);default:return o.jsx("p",{children:n.text},d)}})})}function Rf(e){const t=[];for(const n of String(e||"").replace(/\r\n/g,`
8
+ `).split(`
9
+ `)){const r=n.trim();if(!r)continue;const d=/^(#{1,6})\s+(.+)$/.exec(r);if(d?t.push({kind:"heading",level:d[1].length,text:us(d[2])}):/^>\s?/.test(r)?t.push({kind:"quote",text:us(r.replace(/^>\s?/,""))}):/^([-*+]|\d+\.)\s+/.test(r)?t.push({kind:"list",text:us(r.replace(/^([-*+]|\d+\.)\s+/,""))}):/^```/.test(r)||/^`[^`]+`$/.test(r)?t.push({kind:"code",text:r.replace(/^```[a-z0-9_-]*\s*/i,"").replace(/```$/,"").replace(/^`|`$/g,"")||"code block"}):/^\|.+\|$/.test(r)?t.push({kind:"table",text:r}):t.push({kind:"paragraph",text:us(r)}),t.length>=12)break}return t}function us(e){return e.replace(/!\[([^\]]*)\]\([^)]+\)/g,"$1").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/(\*\*|__)(.*?)\1/g,"$2").replace(/(\*|_)(.*?)\1/g,"$2").replace(/`([^`]+)`/g,"$1").trim()}function Lf(e){var n,r;const t=String(((n=e.metadata)==null?void 0:n.memoColor)||((r=e.metadata)==null?void 0:r.MemoColor)||"coral").toLowerCase();return ai.find(d=>d.key===t)??ai[0]}function Pf(e){return $c(e)}function Yc(e){return String(e.assetUrl||e.sourceFilePath||e.body||"").trim()}function Ef(e){const t=Yc(e);if(!t)return"";const n=t.toLowerCase();return n.startsWith("blob:")||n.startsWith("data:video/")||/^https?:\/\//i.test(t)&&/\.(mp4|webm|ogg|ogv|mov|m4v)(?:[?#].*)?$/i.test(t)?t:""}function _f(e){var t,n,r,d,c,m;return String(((t=e.metadata)==null?void 0:t.sourceUrl)||((n=e.metadata)==null?void 0:n.SourceUrl)||((r=e.metadata)==null?void 0:r.url)||((d=e.metadata)==null?void 0:d.Url)||((c=e.metadata)==null?void 0:c.embedUrl)||((m=e.metadata)==null?void 0:m.EmbedUrl)||e.assetUrl||e.sourceFilePath||e.body||"").trim()}function Bf(e){var t,n;return String(((t=e.metadata)==null?void 0:t.embedType)||((n=e.metadata)==null?void 0:n.EmbedType)||"").trim().toLowerCase()}function Df(e,t){var r,d;const n=String(((r=e.metadata)==null?void 0:r.domain)||((d=e.metadata)==null?void 0:d.Domain)||"").trim();if(n)return n;try{return new URL(t).hostname.replace(/^www\./,"")}catch{return""}}function Of(e){return Oc(e)}function xd(e){const t=e.indexOf(":");return t>0?e.slice(0,t):"relative"}function ms({value:e,options:t,onChange:n,ariaLabel:r,className:d="",menuClassName:c="",disabled:m=!1,emptyLabel:y="Select",testId:p}){const[b,w]=g.useState(!1),P=g.useRef(null),N=t.find(B=>B.value.toLowerCase()===e.toLowerCase()),_=(N==null?void 0:N.label)||e||y;return g.useEffect(()=>{if(!b)return;const B=$=>{var W;const H=$.target instanceof Node?$.target:null;H&&((W=P.current)!=null&&W.contains(H))||w(!1)},F=$=>{$.key==="Escape"&&w(!1)};return document.addEventListener("pointerdown",B,!0),document.addEventListener("keydown",F,!0),()=>{document.removeEventListener("pointerdown",B,!0),document.removeEventListener("keydown",F,!0)}},[b]),o.jsxs("div",{ref:P,className:`catalog-pill ${d}`,"data-open":b?"true":"false",children:[o.jsxs("button",{type:"button",className:"catalog-pill__button","aria-haspopup":"listbox","aria-expanded":b,"aria-label":r,title:(N==null?void 0:N.title)||_,disabled:m,"data-testid":p,onClick:()=>{m||w(B=>!B)},children:[o.jsxs("span",{className:"catalog-pill__content",children:[(N==null?void 0:N.groupLabel)&&o.jsx("span",{className:"catalog-pill__provider",children:N.groupLabel}),(N==null?void 0:N.showAspectIcon)&&o.jsx(Cd,{option:N,compact:!0}),o.jsx("span",{className:"catalog-pill__label",children:_})]}),(N==null?void 0:N.trailingLabel)&&o.jsx("span",{className:"catalog-pill__trailing",children:N.trailingLabel}),o.jsx("span",{className:"catalog-pill__chevron",children:o.jsx(fc,{size:15})})]}),b&&!m&&o.jsx("div",{className:`catalog-pill__menu ${c}`,role:"listbox","aria-label":r,children:o.jsx("div",{className:"catalog-pill__scroll",children:t.map(B=>{var $;const F=B.value.toLowerCase()===e.toLowerCase();return o.jsxs("div",{children:[B.showGroupHeader&&o.jsxs("div",{className:`catalog-pill__group ${B.showSeparatorBefore?"catalog-pill__group--separated":""}`,children:[o.jsx("span",{children:B.groupLabel||B.groupKey||"Other"}),o.jsx("i",{})]}),o.jsxs("button",{type:"button",className:`catalog-pill__option ${F?"is-selected":""}`,role:"option","aria-selected":F,title:B.title||B.label,onClick:()=>{w(!1),B.value!==e&&n(B.value)},children:[o.jsxs("span",{className:"catalog-pill__option-main",children:[o.jsxs("span",{className:"catalog-pill__option-title",children:[B.showAspectIcon&&o.jsx(Cd,{option:B}),o.jsx("span",{children:B.label})]}),(B.detail||B.badges&&B.badges.length>0)&&o.jsxs("span",{className:"catalog-pill__option-detail",children:[B.detail&&o.jsx("span",{children:B.detail}),($=B.badges)==null?void 0:$.map(H=>o.jsx("em",{children:H},H))]})]}),B.trailingLabel&&o.jsx("span",{className:"catalog-pill__option-trailing",children:B.trailingLabel})]})]},`${B.groupKey||"group"}:${B.value}`)})})})]})}function Cd({option:e,compact:t=!1}){const n=Math.max(1,e.aspectIconWidth??1),r=Math.max(1,e.aspectIconHeight??1),d=t?22:26,c=t?16:18,m=Math.min(d/n,c/r),y=Math.max(9,Math.round(n*m)),p=Math.max(9,Math.round(r*m));return o.jsx("span",{className:"catalog-pill__aspect","aria-hidden":"true",children:o.jsx("span",{style:{width:y,height:p}})})}function $f(e){var t;return((t=e.metadata)==null?void 0:t.CompanyStatus)||e.status||(e.companyMode?"Staged":"Ready")}function Ff(e){switch(e.toLowerCase()){case"done":case"approved":case"completed":return 1;case"running":return .62;case"paused":return .38;case"archived":case"rejected":return .18;default:return .28}}function ni(e){var t;return(e.result||e.body||((t=e.metadata)==null?void 0:t.CompanyLastMessage)||"").trim()||"No local artifact content yet."}function ps(e,t){const n=t.edges.filter(c=>c.to===e.id).map(c=>{var m;return(m=t.nodes.find(y=>y.id===c.from))==null?void 0:m.title}).filter(Boolean),r=t.edges.filter(c=>c.from===e.id).map(c=>{var m;return(m=t.nodes.find(y=>y.id===c.to))==null?void 0:m.title}).filter(Boolean),d=$f(e);return{id:e.id,title:e.title,type:e.kind,subtitle:ni(e).slice(0,160),status:d,progress:Ff(d),incoming:n,outgoing:r}}function Uf(e,t){const n=new Set(t.edges.filter(b=>b.from===e.id||b.to===e.id).flatMap(b=>[b.from,b.to]).filter(b=>b!==e.id)),r=t.nodes.filter(b=>n.has(b.id)),d=t.nodes.filter(b=>{var w;return b.id!==e.id&&(b.companyMode||((w=b.tags)==null?void 0:w.some(P=>P.toLowerCase().includes("company"))))}),c=[...r,...d].filter((b,w,P)=>P.findIndex(N=>N.id===b.id)===w),m=c.filter(b=>b.kind!=="ai-task"&&!b.result).slice(0,6),y=c.filter(b=>b.kind==="ai-task").slice(0,6),p=c.filter(b=>b.result||b.kind!=="ai-task").slice(0,6);return[{key:"root",label:"Root",nodes:[ps(e,t)]},{key:"context",label:"Context",nodes:m.map(b=>ps(b,t))},{key:"tasks",label:"Missions",nodes:y.map(b=>ps(b,t))},{key:"artifacts",label:"Artifacts",nodes:p.map(b=>ps(b,t))}].map(b=>({...b,nodes:b.nodes.length>0?b.nodes:[zf(b.key)]}))}function zf(e){return{id:`empty-${e}`,title:"No local nodes yet",type:"empty",subtitle:"Stage a follow-up task or connect context nodes to fill this lane.",status:"Empty",progress:0,incoming:[],outgoing:[]}}function Hf(e,t){const n=new Set(t.edges.filter(d=>d.from===e.id||d.to===e.id).flatMap(d=>[d.from,d.to]));return t.nodes.filter(d=>{var c;return d.id===e.id||n.has(d.id)||((c=d.tags)==null?void 0:c.includes("Company follow-up"))}).filter(d=>ni(d).trim().length>0).slice(0,8).map(d=>({id:`artifact-${d.id}`,type:d.kind==="ai-task"?"Mission Result":d.id===e.id?"Root Brief":"Context Artifact",title:d.title,content:ni(d),sourceNodeId:d.id}))}function Wf({board:e,rootNode:t,onClose:n,onStatus:r,onRemove:d,onSubmitFollowUp:c,onApproval:m,onAddArtifact:y}){var fe,He,jt,ot,V;const[p,b]=g.useState(""),[w,P]=g.useState(null),N=g.useMemo(()=>Uf(t,e),[e,t]),_=g.useMemo(()=>Hf(t,e),[e,t]),B=_.find(G=>G.id===w)??_[0]??null,F=((fe=t.metadata)==null?void 0:fe.CompanyStatus)||"Staged",$=((He=t.metadata)==null?void 0:He.CompanyExecutionModeLabel)||"Auto / General",H=((jt=t.metadata)==null?void 0:jt.CompanySubAgents)==="false"?"single-agent":"sub-agents",W=((ot=t.metadata)==null?void 0:ot.CompanyApprovalStatus)||"Pending",re=!["Approved","Rejected"].includes(W),se=e.nodes.filter(G=>{var ie;return G.kind==="ai-task"&&(((ie=G.tags)==null?void 0:ie.includes("Company follow-up"))||N.some(ae=>ae.nodes.some(mt=>mt.id===G.id)))}).length,Ie=()=>{const G=p.trim();G&&(b(""),c(t.id,G))};return o.jsx("div",{className:"company-focus-backdrop","data-testid":"company-graph-focus",onMouseDown:n,children:o.jsxs("section",{className:"company-focus-dialog","aria-label":"Company graph focus","data-disable-mindcanvas-hotkeys":"true",onMouseDown:G=>G.stopPropagation(),children:[o.jsxs("header",{className:"company-focus-head",children:[o.jsx("button",{type:"button",title:"Back to Canvas",onClick:n,children:o.jsx(Xp,{size:16})}),o.jsxs("div",{children:[o.jsx("span",{children:"Company Graph Focus"}),o.jsx("strong",{children:t.title}),o.jsx("small",{children:t.body||((V=t.metadata)==null?void 0:V.CompanyLastMessage)||"Local company root staged from MindCanvas."})]}),o.jsxs("div",{className:"company-focus-head__actions",children:[o.jsx("span",{children:F}),o.jsx("span",{children:$}),o.jsxs("span",{children:[o.jsx(mc,{size:12}),H]}),F==="Paused"?o.jsxs("button",{type:"button",onClick:()=>r(t.id,"Staged"),children:[o.jsx(Ca,{size:13}),"Resume"]}):o.jsxs("button",{type:"button",onClick:()=>r(t.id,"Paused"),children:[o.jsx(Io,{size:13}),"Pause"]}),o.jsxs("button",{type:"button",onClick:()=>r(t.id,"Archived"),children:[o.jsx(Gr,{size:13}),"Archive"]}),o.jsxs("button",{type:"button",className:"is-danger",onClick:()=>d(t.id),children:[o.jsx(Rs,{size:13}),"Remove"]})]})]}),o.jsxs("div",{className:"company-focus-main",children:[o.jsxs("main",{children:[o.jsxs("div",{className:"company-focus-metrics",children:[o.jsx(gs,{label:"Missions",value:se||1,tone:"blue"}),o.jsx(gs,{label:"Population",value:H==="sub-agents"?4:1,tone:"slate"}),o.jsx(gs,{label:"Approvals",value:re?1:0,tone:"amber"}),o.jsx(gs,{label:"Artifacts",value:_.length,tone:"teal"})]}),o.jsxs("section",{className:"company-focus-graph",children:[o.jsxs("div",{className:"company-focus-section-head",children:[o.jsxs("div",{children:[o.jsx(qp,{size:15}),o.jsx("strong",{children:"Virtual Flow Graph"})]}),o.jsxs("span",{children:[e.edges.length," board edges"]})]}),o.jsx("div",{className:"company-focus-lanes",children:N.map(G=>o.jsxs("section",{className:"company-focus-lane",children:[o.jsxs("header",{children:[o.jsx("strong",{children:G.label}),o.jsxs("span",{children:[G.nodes.filter(ie=>ie.type!=="empty").length," nodes"]})]}),o.jsx("div",{className:"company-focus-node-list",children:G.nodes.map(ie=>o.jsxs("article",{className:`company-focus-node ${ie.type==="empty"?"is-empty":""}`,children:[o.jsxs("div",{children:[o.jsx("span",{children:ie.type}),o.jsx("b",{children:ie.status})]}),o.jsx("strong",{children:ie.title}),o.jsx("p",{children:ie.subtitle}),o.jsx("div",{className:"company-focus-progress",children:o.jsx("i",{style:{width:`${Math.round(ie.progress*100)}%`}})}),ie.incoming.length>0&&o.jsxs("small",{children:["From: ",ie.incoming.slice(0,2).join(", ")]}),ie.outgoing.length>0&&o.jsxs("small",{children:["Next: ",ie.outgoing.slice(0,2).join(", ")]})]},ie.id))})]},G.key))})]})]}),o.jsxs("aside",{className:"company-focus-side",children:[o.jsxs("section",{children:[o.jsx("div",{className:"company-focus-section-head",children:o.jsxs("div",{children:[o.jsx(hc,{size:15}),o.jsx("strong",{children:"Next Task"})]})}),o.jsx("p",{children:"Stage a follow-up AI Task from this company root. It stays local until an adapter runs it."}),o.jsx("textarea",{value:p,onChange:G=>b(G.target.value),placeholder:"Generate the next practical revenue validation task."}),o.jsxs("button",{type:"button",className:"company-focus-primary",disabled:!p.trim(),onClick:Ie,children:[o.jsx(Jp,{size:13}),"Stage Task"]})]}),o.jsxs("section",{children:[o.jsxs("div",{className:"company-focus-section-head",children:[o.jsxs("div",{children:[o.jsx(ql,{size:15}),o.jsx("strong",{children:"Approvals"})]}),o.jsx("span",{children:W})]}),o.jsxs("article",{className:`company-focus-approval company-focus-approval--${W.toLowerCase()}`,children:[o.jsx("span",{children:$}),o.jsx("strong",{children:"Run staged company work locally"}),o.jsx("p",{children:"External execution, publishing, money movement, and destructive tool calls remain blocked until an adapter confirms them."}),re&&o.jsxs("div",{children:[o.jsxs("button",{type:"button",onClick:()=>m(t.id,"Approved"),children:[o.jsx(ql,{size:13}),"Approve locally"]}),o.jsxs("button",{type:"button",onClick:()=>m(t.id,"Rejected"),children:[o.jsx(Zp,{size:13}),"Reject"]})]})]})]}),o.jsxs("section",{children:[o.jsxs("div",{className:"company-focus-section-head",children:[o.jsxs("div",{children:[o.jsx(wt,{size:15}),o.jsx("strong",{children:"Artifacts"})]}),o.jsx("span",{children:_.length})]}),o.jsx("div",{className:"company-focus-artifacts",children:_.map(G=>o.jsxs("button",{type:"button",className:(B==null?void 0:B.id)===G.id?"is-selected":"",onClick:()=>P(G.id),children:[o.jsx("span",{children:G.type}),o.jsx("strong",{children:G.title})]},G.id))}),B&&o.jsxs("div",{className:"company-focus-preview",children:[o.jsx("span",{children:B.type}),o.jsx("strong",{children:B.title}),o.jsx("pre",{children:B.content}),o.jsxs("button",{type:"button",onClick:()=>y(t.id,B),children:[o.jsx(ko,{size:13}),"Add to Canvas"]})]})]})]})]})]})})}function gs({label:e,value:t,tone:n}){return o.jsxs("article",{className:`company-focus-metric company-focus-metric--${n}`,children:[o.jsx("span",{children:e}),o.jsx("strong",{children:t})]})}function Vf({url:e,fileName:t,onClose:n}){return o.jsx("div",{className:"pdf-viewer-backdrop","data-testid":"pdf-viewer-dialog",onMouseDown:n,children:o.jsxs("section",{className:"pdf-viewer-dialog","aria-label":"PDF viewer",onMouseDown:r=>r.stopPropagation(),children:[o.jsxs("header",{className:"pdf-viewer-head",children:[o.jsxs("div",{children:[o.jsx("span",{children:"PDF Viewer"}),o.jsx("strong",{title:t,children:t})]}),o.jsxs("div",{className:"pdf-viewer-actions",children:[o.jsx("button",{type:"button",title:"Open PDF in new tab","data-testid":"pdf-viewer-open-external",onClick:()=>window.open(e,"_blank","noopener,noreferrer"),children:o.jsx(An,{size:16})}),o.jsx("button",{type:"button",title:"Close PDF viewer","data-testid":"pdf-viewer-close",onClick:n,children:o.jsx(Et,{size:16})})]})]}),o.jsx("iframe",{src:e,title:t,className:"pdf-viewer-frame","data-testid":"pdf-viewer-frame"})]})})}const Ss=.28,ws=2.8,Yf=96,Gf=140,vs=188,js=126,wn=10,Kf=720,Xf=.8,Ha={x:540,y:210,scale:1},kd=8,Gc=["dot","line","particles","spirit"],xa="n",Rr=["0","1","2","3","4","5","6","7","8","9"],Qt=24,Sd=900,qf=3e3,wd="mindexec-react-project-gallery-startup-v1",Kc="mindexec-react-function-toolbar-mode-v1",Xc="mindexec-react-project-workspace-history-v1",qc=5,Is="__MINDEXEC_REACT_NODES__",hs=34,vd=30,xn=1280,Cn=960,Jf=154,oi=4e4,Zf=50,Es=100,Jc=50*1024,Lr=Jc,Pr=12e4,jd=64*1024,Qf=5e3,Ii=2500,Rn=36,si="Select a LocalBridge directory",Zc="mindexec.react.templateStudioDraft.v1.",Ni="BusinessAutomationNode",eb="MindCanvasAgent",tb="CodeNote";function ab(){return uc(Cs())}const nb=["Body:","Describe the implementation slice this note controls.","","Why:","Explain why this change should exist before writing code.","","Related files:","- src/features/canvas/MindCanvas.tsx","","Acceptance criteria:","- The intended change is visible on the canvas.","- The note can be approved, reviewed, or marked out of sync locally."].join(`
10
+ `),Ai={"image-generate":{kind:"image-generate",mode:"Image",title:"Image Generation Spec",body:["Prepare an image generation prompt/spec.","","Subject:","Visual style:","Composition:","Constraints:","Business use case:"].join(`
11
+ `),tag:"Image Spec",toolHint:"Media.ImagePrompt",outputType:"image-prompt",width:380,height:228},"video-generate":{kind:"video-generate",mode:"Video",title:"Video Generation Spec",body:["Prepare a video generation prompt/spec.","","Subject:","Motion:","Scene/composition:","Duration/format:","Business use case:"].join(`
12
+ `),tag:"Video Spec",toolHint:"Media.VideoPrompt",outputType:"video-prompt",width:420,height:236}},ob=["Objective:","","Constraints:","","Expected output:"].join(`
13
+ `),sb=new Set(["note","text","ai-task","image","mask","video","embed","code","csv-table","memo","pdf","file","directory","template-launcher","remote-monitor","remote-control","markdown"]);function Id(e,t){try{const n=window.localStorage.getItem(`${Zc}${e}`);if(!n)return xs(t);const r=JSON.parse(n);return{...xs(t),...r,templateId:xo(r.templateId||r.templateTitle||t)}}catch{return xs(t)}}function Nd(e,t){window.localStorage.setItem(`${Zc}${e}`,JSON.stringify(t))}function Ad(e){return{id:`studio-${e.templateId||"template-studio-draft"}`,label:e.templateTitle||"Template Studio Test",description:"Template Studio test create",iconClass:"template-studio-test",prompt:"Use test inputs to create a real local board from the compiled template.",options:[]}}function _s(e){return String(e||"").split(",").map(t=>t.trim().toLowerCase()).filter(Boolean)}function Qc(e,t,n){const r=e.toLowerCase(),d=t.toLowerCase();return n.some(c=>r.includes(c)||d.includes(c))}function eu(e,t){if(t.length===0)return!0;const n=e.toLowerCase(),r=n.includes(".")?`.${n.split(".").pop()??""}`:"";return t.some(d=>d.startsWith(".")?d===r:n.includes(d))}async function rb(e,t){const n=_s(t==null?void 0:t.Include),r=_s(t==null?void 0:t.Exclude),d=[];let c=0,m=0,y=0,p=!1;async function b(w,P=""){for await(const N of w.values()){if(y>=Ii){p=!0;return}const _=P?`${P}/${N.name}`:N.name;if(!Qc(_,N.name,r)){if(N.kind==="file"){if(!eu(N.name,n))continue;c+=1,y+=1,d.length<Rn&&d.push({name:N.name,path:_,kind:"file"});continue}if(N.kind==="directory"&&(m+=1,y+=1,d.length<Rn&&d.push({name:N.name,path:_,kind:"directory"}),await b(N,_),p))return}}}return await b(e),{fileCount:c,directoryCount:m,preview:d,truncated:p}}function Ln(e){return typeof e=="string"?e.trim():""}function ib(e){return!e||e===si?!1:!/^(https?:|data:|blob:|file:)/i.test(e)}function lb(e){var d;const t=Ln((d=e.metadata)==null?void 0:d.DirectoryPath),n=Ln(e.sourceFilePath),r=t||n;return ib(r)?r:""}function db(e,t){const n=Ln(t.path);if(n)return n;const r=Ln(t.name);if(!e)return r;const d=e.includes("\\")?"\\":"/";return`${e.replace(/[\\/]+$/,"")}${d}${r}`}async function cb(e,t,n,r){const d=_s(t==null?void 0:t.Include),c=_s(t==null?void 0:t.Exclude),m=[],y=[{bridgePath:e,relativePath:""}];let p=0,b=0,w=0,P=!1;for(;y.length>0;){const N=y.shift();if(!N)break;const _=await Tp(N.bridgePath,n,r),B=Array.isArray(_.items)?_.items:[];for(const F of B){if(w>=Ii){P=!0;break}const $=Ln(F.name);if(!$)continue;const H=N.relativePath?`${N.relativePath}/${$}`:$;if(Qc(H,$,c))continue;const W=F.isDirectory===!0,re=F.isFile===!0||F.isDirectory!==!0;if(W){b+=1,w+=1,m.length<Rn&&m.push({name:$,path:H,kind:"directory"}),y.push({bridgePath:db(N.bridgePath,F),relativePath:H});continue}if(re){if(!eu($,d))continue;p+=1,w+=1,m.length<Rn&&m.push({name:$,path:H,kind:"file"})}}if(P)break}return{fileCount:p,directoryCount:b,preview:m,truncated:P}}function Md(e,t){const n=t.preview.map(r=>`${r.kind==="directory"?"dir":"file"}:${r.path}`).join(`
14
+ `);return[`Directory: ${e}`,`Files: ${t.fileCount}`,`Folders: ${t.directoryCount}`,t.truncated?`Preview capped at ${Ii} entries.`:"Scan completed.","",n||"(empty or filtered)"].join(`
15
+ `)}const ub=new Set(["astro","bash","bat","c","cc","cpp","cs","css","fs","go","h","hpp","html","java","js","json","jsx","kt","lua","mjs","php","ps1","py","razor","rs","scss","sh","sql","svelte","swift","ts","tsx","vue","xml","yaml","yml"]),mb=new Set(["csv","log","md","markdown","rtf","text","txt"]);function Td(e){const t=e;return Number.isFinite(t==null?void 0:t.x)&&Number.isFinite(t==null?void 0:t.y)}function ri(e){return e==="top"||e==="right"||e==="bottom"||e==="left"}function pb(e){switch(e){case"top":return"bottom";case"right":return"left";case"bottom":return"top";case"left":return"right";default:return"left"}}function Rd(e){switch(e){case"top":return{x:0,y:-1};case"right":return{x:1,y:0};case"bottom":return{x:0,y:1};case"left":return{x:-1,y:0};default:return{x:1,y:0}}}function _t(e,t){switch(t){case"top":return{x:e.x+e.width/2,y:e.y};case"right":return{x:e.x+e.width,y:e.y+e.height/2};case"bottom":return{x:e.x+e.width/2,y:e.y+e.height};case"left":return{x:e.x,y:e.y+e.height/2};default:return{x:e.x+e.width,y:e.y+e.height/2}}}function gb(e,t){const n=[{side:"top",point:_t(e,"top")},{side:"right",point:_t(e,"right")},{side:"bottom",point:_t(e,"bottom")},{side:"left",point:_t(e,"left")}];let r=n[0],d=Number.POSITIVE_INFINITY;for(const c of n){const m=c.point.x-t.x,y=c.point.y-t.y,p=m*m+y*y;p<d&&(r=c,d=p)}return r.side}function hb(e,t){return e.x>=t.x&&e.x<=t.x+t.width&&e.y>=t.y&&e.y<=t.y+t.height}function Ld(e,t,n,r){const d=Math.hypot(n.x-e.x,n.y-e.y),c=me(d*.38,54,220),m=Rd(t),y=Rd(r);return[`M ${e.x} ${e.y}`,`C ${e.x+m.x*c} ${e.y+m.y*c},`,`${n.x+y.x*c} ${n.y+y.y*c},`,`${n.x} ${n.y}`].join(" ")}function Er(e){var r,d;const t=Number((r=e.viewState)==null?void 0:r.cursorX),n=Number((d=e.viewState)==null?void 0:d.cursorY);return Number.isFinite(t)&&Number.isFinite(n)?{x:t,y:n}:null}function Wa(e,t){return{...e,viewState:{...e.viewState??{},cursorX:t.x,cursorY:t.y}}}function fb(e,t){return t?{x:Math.round(e.x/Qt)*Qt,y:Math.round(e.y/Qt)*Qt}:e}function J(e){return`${e}-${Math.random().toString(36).slice(2,9)}`}function bb(e){switch(e){case"GeneralCompany":return"General AI Company";case"GrowthValidation":return"Growth Validation";case"RevenueAffiliate":return"Revenue / Affiliate";case"ProductBuild":return"Product Build";case"ResearchOnly":return"Research Only";default:return"Auto Detect"}}function me(e,t,n){return Math.min(n,Math.max(t,e))}const yb=112,xb=80;function Pd(e,t){const n=t/2,r=yb+e/2,d=Math.max(r,t-xb);return me(Math.max(n,r),0,d)}function _r(e){return{x:e.x+e.width/2,y:e.y+e.height/2}}function ii(e){if(!e)return"No date";const t=new Date(e);return Number.isNaN(t.getTime())?"No date":t.toLocaleDateString(void 0,{month:"short",day:"2-digit",year:"numeric"})}function bo(e){return!!(e&&!["image","video","pdf","file","directory","remote-monitor","remote-control"].includes(e.kind))}function Va(e){var t,n;return!!(e&&(e.kind==="remote-monitor"||((t=e.metadata)==null?void 0:t.SemanticType)==="RemoteFleetMonitor"||((n=e.metadata)==null?void 0:n.RemoteFleetNodeRole)==="fleet-monitor"))}function Cb(e){return e.isExpanded===!1&&Number(e.originalHeight??0)>e.height+1}function kb(e){return vi(e)}function Sb(e){return $c(e)}function So(e){var n;const t=(((n=e.imageStack)==null?void 0:n.variants)??[]).filter(r=>!!r.imageUrl).map((r,d)=>({...r,variantId:r.variantId||`${e.id}:variant-${d+1}`,title:r.title||e.title,sourceNodeId:r.sourceNodeId||e.id}));return t.length>0?t:e.imageUrl?[{variantId:`${e.id}:image`,imageUrl:e.imageUrl,assetId:e.assetUrl,title:e.title,sourceNodeId:e.id}]:[]}function Ed(e,t,n,r){let d=e.variantId||J("image-variant");for(;n.has(d);)d=J("image-variant");return n.add(d),{...e,variantId:d,imageUrl:e.imageUrl,assetId:e.assetId||t.assetUrl,title:e.title||t.title,sourceNodeId:e.sourceNodeId||t.id,createdAtUtc:e.createdAtUtc||r}}function wb(e){return[e.title,"",e.result?`Result:
16
+ ${e.result}`:e.body,e.imageUrl?`
17
+ Image: ${e.imageUrl}`:"",e.assetUrl?`
18
+ Asset: ${e.assetUrl}`:"",e.sourceFilePath?`
19
+ Source: ${e.sourceFilePath}`:""].filter(Boolean).join(`
20
+ `)}function vb(e){if(e.kind!=="image")return"";const t=So(e).find(n=>{var r;return n.variantId===((r=e.imageStack)==null?void 0:r.activeVariantId)});return String((t==null?void 0:t.imageUrl)||vi(e)).trim()}async function jb(e){const t=navigator.clipboard;if(t&&typeof ClipboardItem<"u"&&typeof t.write=="function")try{const r=await(await fetch(e)).blob();if(r.type.startsWith("image/"))return await t.write([new ClipboardItem({[r.type]:r})]),"image"}catch{}return await Co(e),"text"}function Br(e){var r;const n=(e.result||e.body||"").split(/\r?\n/).reduce((d,c)=>d+Math.max(1,Math.ceil(c.length/54)),0);return me(112+n*21+((r=e.tags)!=null&&r.length?28:0),150,620)}function Ib(e){switch(e.kind){case"remote-monitor":return{minWidth:520,minHeight:360,maxWidth:1400,maxHeight:980};case"remote-control":return{minWidth:420,minHeight:300,maxWidth:1400,maxHeight:980};case"video":return{minWidth:300,minHeight:190,maxWidth:xn,maxHeight:Cn};case"image":return{minWidth:220,minHeight:160,maxWidth:xn,maxHeight:Cn};case"pdf":case"file":case"directory":return{minWidth:240,minHeight:128,maxWidth:860,maxHeight:720};case"code":return{minWidth:260,minHeight:160,maxWidth:xn,maxHeight:Cn};case"csv-table":return{minWidth:320,minHeight:180,maxWidth:xn,maxHeight:Cn};case"ai-task":return{minWidth:260,minHeight:154,maxWidth:xn,maxHeight:Cn};default:return{minWidth:220,minHeight:132,maxWidth:xn,maxHeight:Cn}}}function nt(e){return String(e||"").trim()||"Untitled"}const tu="Multi Desktop Monitor";function _d(e){return nt(e).toLowerCase()===tu.toLowerCase()}function Nb(e,t,n){const r=nt(e.name);return!n||!_d(r)?r:t.nodes.some(c=>Va(c)&&_d(c.title||tu))?"MindCanvas":r}function ka(e){return typeof e=="object"&&e!==null}function li(e){const t=e.toLowerCase(),n=t.lastIndexOf(".");return n>=0?t.slice(n+1):""}function Ab(e){if(!ka(e))return;const t=Object.entries(e).filter(([n])=>n.trim().length>0).map(([n,r])=>[n,String(r??"")]);return t.length>0?Object.fromEntries(t):void 0}function Mb(e){if(!Array.isArray(e))return;const t=e.map(n=>String(n??"").trim()).filter(Boolean).slice(0,24);return t.length>0?t:void 0}function fs(e,t=0,n=Number.MAX_SAFE_INTEGER){const r=Number(e);if(Number.isFinite(r))return me(r,t,n)}function Dr(e){return e&&Gc.includes(e)?e:"dot"}function Bd(e){return Math.round(e/Qt)*Qt}function Tb(e){if(!ka(e))return null;const t=typeof e.variantId=="string"?e.variantId.trim():"",n=typeof e.imageUrl=="string"?e.imageUrl.trim():"";return!t||!n?null:{variantId:t,imageUrl:n,assetId:typeof e.assetId=="string"?e.assetId:void 0,title:typeof e.title=="string"?e.title:void 0,caption:typeof e.caption=="string"?e.caption:void 0,sourceNodeId:typeof e.sourceNodeId=="string"?e.sourceNodeId:void 0,createdAtUtc:typeof e.createdAtUtc=="string"?e.createdAtUtc:void 0}}function Rb(e){if(!ka(e)||!Array.isArray(e.variants))return;const t=e.variants.map(d=>Tb(d)).filter(d=>!!d).slice(0,128);if(t.length===0)return;const n=typeof e.activeVariantId=="string"?e.activeVariantId:"";return{activeVariantId:t.some(d=>d.variantId===n)?n:t[0].variantId,variants:t,kind:typeof e.kind=="string"&&e.kind.trim()?e.kind:"versions",title:typeof e.title=="string"?e.title:void 0,updatedAtUtc:typeof e.updatedAtUtc=="string"?e.updatedAtUtc:void 0}}function di(e,t,n){if(!(!e||e.variants.length===0))return{...e,variants:e.variants.map(r=>({...r,sourceNodeId:t&&n&&r.sourceNodeId===t?n:r.sourceNodeId}))}}function Lb(e){if(!ka(e))return null;const t=e.kind,n=Number(e.x),r=Number(e.y),d=Number(e.width),c=Number(e.height);if(typeof e.id!="string"||typeof t!="string"||!sb.has(t)||typeof e.title!="string"||typeof e.body!="string"||!Number.isFinite(n)||!Number.isFinite(r)||!Number.isFinite(d)||!Number.isFinite(c))return null;const m=Rb(e.imageStack),y=(m==null?void 0:m.variants.find(p=>p.variantId===m.activeVariantId))??(m==null?void 0:m.variants[0]);return{id:e.id,kind:t,title:e.title,body:e.body,x:n,y:r,width:me(d,120,1280),height:me(c,96,920),status:["idle","running","paused","done","blocked"].includes(String(e.status))?e.status:void 0,result:typeof e.result=="string"?e.result:void 0,imageUrl:typeof e.imageUrl=="string"?e.imageUrl:y==null?void 0:y.imageUrl,imageStack:m,assetUrl:typeof e.assetUrl=="string"?e.assetUrl:void 0,sourceFilePath:typeof e.sourceFilePath=="string"?e.sourceFilePath:void 0,isChunkedText:typeof e.isChunkedText=="boolean"?e.isChunkedText:void 0,totalLineCount:fs(e.totalLineCount),scrollOffset:fs(e.scrollOffset),maxScroll:fs(e.maxScroll),isExpanded:typeof e.isExpanded=="boolean"?e.isExpanded:void 0,originalHeight:fs(e.originalHeight),tags:Mb(e.tags),role:typeof e.role=="string"?e.role:void 0,metadata:Ab(e.metadata),aiEnabled:typeof e.aiEnabled=="boolean"?e.aiEnabled:void 0,wordWrap:typeof e.wordWrap=="boolean"?e.wordWrap:void 0,companyMode:e.companyMode==="candidate"||e.companyMode==="bound"?e.companyMode:void 0}}function Pb(e){return!ka(e)||typeof e.id!="string"||typeof e.from!="string"||typeof e.to!="string"||e.kind!=="context"&&e.kind!=="result"?null:{id:e.id,from:e.from,to:e.to,kind:e.kind,fromSide:ri(e.fromSide)?e.fromSide:void 0,toSide:ri(e.toSide)?e.toSide:void 0}}function Dd(e){if(!e.includes(Is))return null;try{const t=JSON.parse(e);if(!ka(t)||t.__type!==Is||!Array.isArray(t.nodes))return null;const n=t.nodes.map(d=>Lb(d)).filter(d=>!!d);if(n.length===0)return null;const r=Array.isArray(t.edges)?t.edges.map(d=>Pb(d)).filter(d=>!!d):[];return{__type:Is,source:"MindExecReact",copiedAt:typeof t.copiedAt=="string"?t.copiedAt:new Date().toISOString(),nodes:n,edges:r}}catch{return null}}function Eb(e,t){return{__type:Is,source:"MindExecReact",copiedAt:new Date().toISOString(),nodes:e.map(n=>({...n,metadata:n.metadata?{...n.metadata}:void 0,tags:n.tags?[...n.tags]:void 0,imageStack:di(n.imageStack)})),edges:t.map(n=>({...n}))}}const _b=/^\s*\[[^\]]+\]\((https?:\/\/[^)\s]+)\)\s*$/i,Bb=/<iframe[^>]+src\s*=\s*(?:"|\x27)(?<url>https?:\/\/[^"\x27]+)(?:"|\x27)/i,Db=/https?:\/\/[^\s<>()"\x27]+/i,Ob=/^[A-Za-z0-9_-]{6,}$/,$b=new Set(["avi","m4v","mov","mp4","mpeg","ogv","webm"]);function Or(e){return e.trim().replace(/[.,;:!?\])}]+$/g,"")}function Fb(e){var c;const t=e.trim();if(!t)return"";const n=Bb.exec(t);if((c=n==null?void 0:n.groups)!=null&&c.url)return Or(n.groups.url);const r=_b.exec(t);if(r!=null&&r[1])return Or(r[1]);const d=t.split(/\r?\n/).map(m=>m.trim()).filter(Boolean);if(d.length===1){const m=Db.exec(d[0]);if(m&&m[0]===d[0])return Or(m[0])}return""}function Mi(e){const t=e.trim(),n=Fb(t);if(n)return n;if(!t||/\s/.test(t))return"";try{const r=new URL(t);return r.protocol==="data:"||r.protocol==="blob:"?t:""}catch{return""}}function Ub(e){try{const t=new URL(e);return li(t.pathname)}catch{return li(e)}}function zb(e){const t=e.hostname.toLowerCase();if(!t||t==="localhost"||t.endsWith(".localhost"))return!0;const n=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(t);if(n){const d=n.slice(1).map(Number);if(d.some(y=>!Number.isInteger(y)||y<0||y>255))return!0;const[c,m]=d;return c===0||c===10||c===127||c===169&&m===254||c===172&&m>=16&&m<=31||c===192&&m===168}const r=t.replace(/^\[|\]$/g,"").toLowerCase();return r==="::1"||r==="0:0:0:0:0:0:0:1"||r.startsWith("fc")||r.startsWith("fd")?!0:/^fe[89ab]/i.test(r.replace(/:/g,""))}function Pn(e){const t=Mi(e);if(!t)return null;try{const n=new URL(t);return n.protocol!=="http:"&&n.protocol!=="https:"||zb(n)?null:n}catch{return null}}function $r(e){return Ob.test(e)}function Hb(e){const t=Pn(e);if(!t)return"";const n=t.hostname.toLowerCase().replace(/^www\./,"");if(n==="youtu.be"){const y=t.pathname.split("/").filter(Boolean)[0]??"";return $r(y)?y:""}if(!n.endsWith("youtube.com")&&!n.endsWith("youtube-nocookie.com"))return"";const r=t.searchParams.get("v")??"";if($r(r))return r;const d=t.pathname.split("/").filter(Boolean),c=d.findIndex(y=>["embed","shorts","live","v"].includes(y)),m=c>=0?d[c+1]??"":"";return $r(m)?m:""}function Wb(e){const t=e.toLowerCase(),n=Ub(e);return t.startsWith("data:image/")||["avif","gif","jpeg","jpg","png","svg","webp"].includes(n)?"image":$b.has(n)?"video":n==="pdf"?"pdf":Pn(e)?"embed":"file"}function Vb(e){try{const t=new URL(e),n=t.pathname.split("/").filter(Boolean).pop();return decodeURIComponent(n||t.hostname||e).slice(0,90)}catch{return e.slice(0,90)}}function Yb(e,t,n="clipboard-url"){const r=Wb(e),d=Vb(e),c=r==="embed"?Pn(e):null,m=r==="embed"?Hb(e):"",y=m?"youtube":"webpage",p=(c==null?void 0:c.hostname.replace(/^www\./,""))??"",b=m?`https://www.youtube.com/watch?v=${m}`:e,w=m?`https://www.youtube-nocookie.com/embed/${m}`:"",P=r==="image"?`Image: ${d}`:r==="video"?`Video: ${d}`:r==="embed"?m?"YouTube Video":`Embed: ${p||d}`:r==="pdf"?`PDF: ${d}`:`URL: ${d}`;return{id:J("node"),kind:r,title:P,body:b,x:t.x,y:t.y,width:r==="embed"?460:r==="video"?420:r==="image"?360:300,height:r==="embed"?260:r==="video"?236:r==="image"?240:154,imageUrl:r==="image"?e:void 0,assetUrl:r==="image"?void 0:b,tags:r==="embed"?["Embed",m?"YouTube":"Web"]:r==="file"?["URL","File"]:[r.toUpperCase()],metadata:{Source:n,AdapterState:"local-reference",Durable:"false",...r==="embed"?{source:"embed",embedType:y,provider:m?"youtube":"web",renderMode:m?"card":"snapshot",aspectRatio:m?"16:9":"auto",sourceUrl:b,url:b,originalInputUrl:e,embedUrl:w,videoId:m,thumbnailUrl:m?`https://img.youtube.com/vi/${m}/hqdefault.jpg`:"",title:P,domain:p,faviconUrl:!m&&c?`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(b)}`:"",description:m?"":"Capture a visual snapshot or open this page in a new tab.",iframeAllowed:"false",iframeBlockedReason:m?"react-card-shell":"unknown",captureStatus:"idle",captureProvider:m?"":"cloudflare-browser-run"}:{}}}}function Od(e,t,n="clipboard-url"){const r=Mi(e);return!r||/^https?:\/\//i.test(r)&&!Pn(r)?null:Yb(r,t,n)}function $d(e,t,n){const r=e.split(/\r?\n/).map(d=>d.trim()).find(Boolean)??"Pasted text";return{id:J("node"),kind:"note",title:r.slice(0,90),body:e.slice(0,4e4),x:t.x,y:t.y,width:340,height:me(156+Math.ceil(Math.min(e.length,2200)/72)*20,176,540),tags:[n.startsWith("global-input")?"Input":"Pasted"],metadata:{Source:n,TextTruncated:String(e.length>4e4)}}}function Gb(e,t,n){const r=e.split(/\r?\n/).map(y=>y.trim()).find(Boolean)??"AI question",d=Zt(n.model),c=lc(d),m=c?Rp(c.provider):n.aiProvider||"OpenAI Codex";return{id:J("node"),kind:"ai-task",title:r.slice(0,90),body:e.slice(0,4e4),x:t.x,y:t.y,width:360,height:me(176+Math.ceil(Math.min(e.length,2200)/84)*18,196,520),status:"idle",tags:["AI Task","Input",m],metadata:{Source:"global-input-ai",AdapterState:"localbridge-codex",AiProvider:n.aiProvider||"OpenAI Codex",TextModel:d,TextModelProvider:m,Effort:n.effort,TextTruncated:String(e.length>4e4)}}}function Kb(e,t,n,r,d="global-input-media",c){const m=r==="Image"?"image":"video",y=e.split(/\r?\n/).map(b=>b.trim()).find(Boolean)??`${r} prompt`,p={...Li(n,r,c)??{},Source:d,PromptOnly:"true"};return{id:J("node"),kind:m,title:`${r}: ${y.slice(0,72)}`,body:e.slice(0,4e4),x:t.x,y:t.y,width:m==="image"?360:420,height:m==="image"?240:236,tags:[r,p.MediaProvider||"Adapter gated"],metadata:p}}function Fd(e){if(!e.trim())return"";if(typeof DOMParser>"u")return e.replace(/<br\s*\/?>/gi,`
21
+ `).replace(/<[^>]+>/g," ").replace(/\s+\n/g,`
22
+ `).trim();const t=new DOMParser().parseFromString(e,"text/html");return(t.body.innerText||t.body.textContent||"").replace(/\n{3,}/g,`
23
+
24
+ `).trim()}function Xb(e){const t=li(e.name);return e.type.startsWith("image/")?"image":e.type.startsWith("video/")?"video":e.type==="application/pdf"||t==="pdf"?"pdf":t==="csv"||e.type==="text/csv"?"csv-table":t==="md"||t==="markdown"?"markdown":ub.has(t)?"code":e.type.startsWith("text/")||mb.has(t)?"text":"file"}function qb(e){return typeof URL<"u"&&URL.createObjectURL?URL.createObjectURL(e):e.name}function Ud(e){return e?e.split(/\r?\n/).length:0}function zd(e){return String(e||"").replace(/\r\n/g,`
25
+ `).replace(/\r/g,`
26
+ `).split(`
27
+ `).slice(0,Es).join(`
28
+ `).slice(0,Qf)}function Hd(e){return{IsChunkedText:"true",TotalLineCount:String(e),TotalLineCountIsPreview:"true",ChunkedPreviewOnly:"true",ChunkedPreviewChars:"",ChunkedLineCount:String(Es),ChunkCacheEntryLimit:String(Zf),LargeFileThresholdBytes:String(Jc),OriginalIngestMode:"browser-preview",TextTruncated:"true"}}function Jb(e){const t=String(e||"").replace(/\r\n/g,`
29
+ `).replace(/\r/g,`
30
+ `).split(`
31
+ `).filter(r=>r.trim().length>0),n=t.slice(0,40).reduce((r,d)=>Math.max(r,Zb(d)),0);return{rowCount:Math.max(0,t.length-1),columnCount:n}}function Zb(e){let t=1,n=!1;for(let r=0;r<e.length;r+=1){const d=e[r],c=e[r+1];d==='"'?n&&c==='"'?r+=1:n=!n:d===","&&!n&&(t+=1)}return e.trim()?t:0}function Wd(e,t){const n=`
32
+
33
+ ... (UI truncated; source file ${t.toLocaleString()} bytes) ...`;return e.endsWith(`
34
+ `)?`${e}${n.trimStart()}`:`${e}${n}`}async function Qb(e,t,n){const r=Xb(e),d=(r==="note"||r==="text"||r==="code"||r==="markdown")&&e.size<=Lr,c=r==="image"||r==="video"||r==="pdf"||r==="file"?qb(e):void 0,m={Source:`browser-${n}`,FileName:e.name,FileType:e.type||"unknown",FileSize:String(e.size),Durable:"false"};if(r==="csv-table"){const p=e.size<=Lr,b=p?await e.text():await e.slice(0,jd).text(),w=p?b.slice(0,Pr):zd(b),P=Jb(w),N=p?0:Ud(w);return p||f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:n,previewChars:w.length,previewLines:N,chunkLineCount:Es}),{id:J("node"),kind:"csv-table",title:e.name.slice(0,90)||"CSV table",body:p?w:Wd(w,e.size),x:t.x,y:t.y,width:720,height:420,sourceFilePath:e.name,isChunkedText:!p||void 0,totalLineCount:p?void 0:N,scrollOffset:p?void 0:0,maxScroll:p?void 0:0,tags:["CSV","Table",n],metadata:{...m,CsvRowCount:String(P.rowCount),CsvColumnCount:String(P.columnCount),IsChunkedText:String(!p),...p?{}:{...Hd(N),ChunkedPreviewChars:String(w.length)},ChunkedPreviewOnly:String(!p),OriginalIngestMode:p?"browser-inline":"browser-preview",TextTruncated:String(!p||b.length>w.length)},wordWrap:!1}}if(d){const p=(await e.text()).slice(0,Pr);return{id:J("node"),kind:r,title:e.name.slice(0,90)||(r==="code"?"Code file":r==="markdown"?"Markdown file":"Text file"),body:p,x:t.x,y:t.y,width:r==="code"?420:r==="markdown"?400:360,height:me(168+Math.ceil(Math.min(p.length,2600)/72)*20,196,640),sourceFilePath:e.name,tags:[r==="code"?"Code":r==="markdown"?"Markdown":"Text",n],metadata:{...m,TextTruncated:String(e.size>Lr||p.length>=Pr)},wordWrap:r==="code"?!0:void 0}}if(r==="note"||r==="text"||r==="code"||r==="markdown"){const p=await e.slice(0,jd).text(),b=zd(p),w=Ud(b);return f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:n,previewChars:b.length,previewLines:w,chunkLineCount:Es}),{id:J("node"),kind:r,title:e.name.slice(0,90)||(r==="code"?"Code file":r==="markdown"?"Markdown file":"Text file"),body:Wd(b,e.size),x:t.x,y:t.y,width:r==="code"?480:r==="markdown"?430:390,height:540,sourceFilePath:e.name,isChunkedText:!0,totalLineCount:w,scrollOffset:0,maxScroll:0,isExpanded:!1,originalHeight:0,tags:[r==="code"?"Code":r==="markdown"?"Markdown":"Text","Chunked",n],metadata:{...m,...Hd(w),ChunkedPreviewChars:String(b.length)},wordWrap:r==="code"?!0:void 0}}const y=r;return{id:J("node"),kind:y,title:e.name.slice(0,90)||(y==="image"?"Image":y==="video"?"Video":y==="pdf"?"PDF Document":"File"),body:c||e.name,x:t.x,y:t.y,width:y==="video"?420:y==="image"?360:300,height:y==="video"?236:y==="image"?240:154,imageUrl:y==="image"?c:void 0,assetUrl:y==="image"?void 0:c,sourceFilePath:e.name,tags:[y==="file"?"File":y.toUpperCase(),n],metadata:{...m,EphemeralObjectUrl:String(!!c)}}}function Vd(e,t){const n=Array.from(e??[]),r=Array.from(t??[]).map(c=>c.kind==="file"?c.getAsFile():null).filter(c=>!!c),d=new Set;return[...n,...r].filter(c=>{const m=`${c.name}:${c.size}:${c.type}:${c.lastModified}`;return d.has(m)?!1:(d.add(m),!0)})}function Ns(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('input,textarea,select,[contenteditable="true"],[contenteditable=""],.top-tabbar,.tab-shell,.floating-panel,.canvas-toolbar,.global-input-shell,.runtime-status-cluster'):!1}function Yd(e){const t=e instanceof HTMLElement?e:null;return t?!!(t.closest(".canvas-node,.edge-path")||Ns(e)):!1}function Fr(e){return ka(e)?typeof e.id=="string"&&Array.isArray(e.nodes)&&Array.isArray(e.edges)&&ka(e.settings):!1}function Bs(e){return e.replace(/\.layout\.json$/i,"").replace(/\.json$/i,"").trim()}function ey(e,t){var r,d;const n=new Date().toISOString();return{...e,id:J("imported-board"),name:nt(e.name||Bs(t)),updatedAt:n,source:{...e.source??{},kind:((r=e.source)==null?void 0:r.kind)??"localStorage",boardId:((d=e.source)==null?void 0:d.boardId)||e.id,loadedAt:n}}}function Ur(e){return/\.layout\.json$/i.test(e.file.name)}function ty(e){return e.flatMap(t=>yi(t.payload).map(n=>({fileName:t.file.name,metadata:n})))}function ay(e,t){const n=Bs(e.file.name);return t.find(r=>r.metadata.Id===n)??yi(e.payload).map(r=>({fileName:e.file.name,metadata:r}))[0]??null}function As(e){return e.length===0?null:e.reduce((t,n)=>({minX:Math.min(t.minX,n.x),minY:Math.min(t.minY,n.y),maxX:Math.max(t.maxX,n.x+n.width),maxY:Math.max(t.maxY,n.y+n.height)}),{minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY})}function ny(e){const t=[...e].sort((p,b)=>p.y-b.y||p.x-b.x);if(t.length<=2)return t;const n=t.map(p=>p.height).sort((p,b)=>p-b),r=n[Math.floor(n.length/2)]??1,d=Math.max(16,r*.35),c=[];let m=[],y=Number.NaN;for(const p of t){if(m.length===0){m=[p],y=p.y;continue}Math.abs(p.y-y)<=d?(m.push(p),y=(y*(m.length-1)+p.y)/m.length):(c.push(m.sort((b,w)=>b.x-w.x)),m=[p],y=p.y)}return m.length>0&&c.push(m.sort((p,b)=>p.x-b.x)),c.flat()}function oy(e,t,n){const r=As(e);if(!r)return null;const d={minX:r.minX-220,minY:r.minY-180,maxX:r.maxX+220,maxY:r.maxY+180},c=Math.max(1,d.maxX-d.minX),m=Math.max(1,d.maxY-d.minY),y=Math.min((vs-wn*2)/c,(js-wn*2)/m),p=(N,_)=>({x:wn+(N-d.minX)*y,y:wn+(_-d.minY)*y}),b={left:(0-t.x)/t.scale,top:(0-t.y)/t.scale,right:(n.width-t.x)/t.scale,bottom:(n.height-t.y)/t.scale},w=p(b.left,b.top),P=p(b.right,b.bottom);return{bounds:d,scale:y,project:p,nodes:e.map(N=>{const _=p(N.x,N.y);return{id:N.id,kind:N.kind,x:_.x,y:_.y,width:Math.max(2,N.width*y),height:Math.max(2,N.height*y),selected:!1}}),viewport:{x:me(w.x,0,vs),y:me(w.y,0,js),width:me(P.x-w.x,4,vs),height:me(P.y-w.y,4,js)}}}function sy(e,t){const n=Math.max(.01,e.scale),r=t.width/n,d=t.height/n,c=Math.max(Kf,Math.max(r,d)*Xf);return{left:(0-e.x)/n-c,top:(0-e.y)/n-c,right:(t.width-e.x)/n+c,bottom:(t.height-e.y)/n+c}}function Gd(e,t){return e.x+e.width>=t.left&&e.x<=t.right&&e.y+e.height>=t.top&&e.y<=t.bottom}function Kd(e){const t=Math.min(e.startX,e.currentX),n=Math.min(e.startY,e.currentY),r=Math.max(e.startX,e.currentX),d=Math.max(e.startY,e.currentY);return{left:t,top:n,right:r,bottom:d,width:r-t,height:d-n}}function ry(e,t){const n=Math.max(.01,t.scale);return{left:(e.left-t.x)/n,top:(e.top-t.y)/n,right:(e.right-t.x)/n,bottom:(e.bottom-t.y)/n}}function Xd(e){const t=new Date().toISOString(),n=J("board"),r=J("node");return{id:n,name:"Untitled Workspace",updatedAt:t,settings:e,source:{kind:"localStorage",loadedAt:t},nodes:[{id:r,kind:"note",title:"New note",body:"Start here.",x:0,y:0,width:320,height:168,tags:["Local"]}],edges:[]}}function iy(e){const t=new Date().toISOString();return{id:J("board"),name:`Template Studio ${ly(new Date)}`,updatedAt:t,settings:e,source:{kind:"localStorage",loadedAt:t},nodes:[],edges:[]}}function ly(e){const t=`${e.getMonth()+1}`.padStart(2,"0"),n=`${e.getDate()}`.padStart(2,"0"),r=`${e.getHours()}`.padStart(2,"0"),d=`${e.getMinutes()}`.padStart(2,"0");return`${t}.${n} ${r}:${d}`}function dy(e){return`${e.sourceKind==="localBridge"?"LocalBridge copy":"React board"} / ${e.nodeCount} nodes / ${ii(e.updatedAt)}`}function vo(e,t){const n=e.trim();return n.length<=t?n:`${n.slice(0,t)}...`}function qd(e){return e==="Fast"?"low":e==="Deep"?"high":"medium"}function au(e){return(e.body||e.result||e.title||"").trim()||"Selected MindCanvas node"}function Jd(e,t,n,r){const d=au(e),c=xi(n.appLanguage,d),m=n.aiNodeDefaultWidth??340,y=Math.max(n.aiNodeDefaultHeight??196,206),p=e.x+e.width+160,b=e.y,w=96,P=t.nodes.map((_,B)=>({id:J("node"),kind:"ai-task",title:_.title,body:_.instruction,x:p+B*(m+w),y:b,width:m,height:y,tags:[],metadata:{Source:"generate-flow",SemanticType:Ni,AutomationNodeKind:_.kind,AutomationNodeLabel:_.title,AutomationPlannerSourceMode:r,AutomationPlannerLanguage:c,AutomationPlannerObjective:d.slice(0,2e3),AdapterState:r==="ai-generated"?"localbridge-ai-planned":"language-aware-fallback"}})),N=[{id:J("edge"),from:e.id,to:P[0].id,kind:"context"},...t.edges.filter(_=>P[_.from]&&P[_.to]).map(_=>({id:J("edge"),from:P[_.from].id,to:P[_.to].id,kind:"result"}))];return{nodes:P,edges:N,language:c}}function Ti(e){var t,n,r;return String(((t=e.metadata)==null?void 0:t.AutomationNodeKind)||((n=e.metadata)==null?void 0:n.AutomationTemplateKey)||((r=e.metadata)==null?void 0:r.AutomationInferredKind)||"").trim().toLowerCase()}function Ri(e){return e==="image-generate"||e==="video-generate"?Ai[e]:null}function nu(e){var t;return String(((t=e.metadata)==null?void 0:t.SemanticType)||"").trim()===Ni}function cy(e,t){const n=Ai[t],r=jo(e,n.mode);return{...Li(e,n.mode)??{},Source:"toolbar-business-automation",SemanticType:Ni,AutomationNodeKind:n.kind,AutomationNodeLabel:n.title,AutomationNodeDescription:`${n.tag} prepared as a spec-only, review-gated media automation node.`,AutomationGraphSchemaVersion:"react-media-spec@1",AutomationTemplateKey:n.kind,AutomationInferredKind:n.kind,AutomationInferredRole:"Media Spec",AutomationToolPolicy:"spec-only",AutomationToolHints:`AI.LLM, ${n.toolHint}, HumanReview.Gate`,AutomationOutputType:n.outputType,AutomationApprovalPolicy:"review-before-generate",AutomationRequiredEvidence:"false",AutomationExternalActionPolicy:"spec-only-until-review",AutomationResultPolicy:"snapshot-per-run",AutomationRunState:"idle",AutomationRunCount:"0",AutomationInstruction:n.body,AutomationLastOutput:"",AutomationLastRunError:"",AutomationLastRunStatus:"not-run",AutomationLastRunStatusLabel:"Not run",AutomationLastRunSourceMode:"",AutomationLastRunEvidenceCount:"0",AutomationLastRunIsFallback:"false",AutomationLastRunIsPartial:"false",AutomationLastRunToolsUsed:"",AutomationLastRunToolWarnings:"",MediaGenerationContract:"spec-only-until-review",MediaGenerationMedium:n.mode.toLowerCase(),MediaModel:r.model.id,MediaProvider:r.model.provider,AspectPresetId:r.aspect.id,AspectLabel:r.aspect.label,RequestedSize:r.requestedSize,AdapterState:"adapter-gated"}}function uy(e,t){var r,d,c,m,y;if(!nu(e))return;const n=t.runState==="completed"?String((Number((r=e.metadata)==null?void 0:r.AutomationRunCount)||0)+1):((d=e.metadata)==null?void 0:d.AutomationRunCount)||"0";return{...e.metadata??{},AutomationRunState:t.runState,AutomationInstruction:t.instruction,AutomationLastOutput:t.output??((c=e.metadata)==null?void 0:c.AutomationLastOutput)??"",AutomationLastRunError:t.error??"",AutomationLastRunStatus:t.status,AutomationLastRunStatusLabel:t.statusLabel,AutomationLastRunSourceMode:t.sourceMode??"",AutomationLastRunEvidenceCount:((m=e.metadata)==null?void 0:m.AutomationLastRunEvidenceCount)??"0",AutomationLastRunIsFallback:String(!!t.fallback),AutomationLastRunIsPartial:String(!!t.partial),AutomationLastRunToolsUsed:t.toolsUsed??((y=e.metadata)==null?void 0:y.AutomationToolHints)??"",AutomationLastRunToolWarnings:t.toolWarnings??"",AutomationRunCount:n,...t.runState==="completed"?{AutomationLastRunAtUtc:new Date().toISOString()}:{}}}function my(){return{Source:"toolbar-agent-command",SemanticType:eb,AgentCommandId:J("agent-command"),AgentCommandStatus:"Draft",AgentCommandMode:"Task",AgentCommandRequestedRole:"Researcher",AgentCommandConstraints:"",AgentCommandPlannerSummary:"",AgentCommandPlanSteps:"[]",AgentCommandPlannedSkills:"[]",AgentCommandPlannedTools:"[]",AgentCommandPlannedConcepts:"[]",AgentCommandLinkedCodeNotes:"[]",AgentCommandWorkItems:"[]",AgentCommandConsoleLogs:"[]",AgentCommandResultLinks:"[]",AgentCommandContinuationPending:"false",AgentCommandTrancheIndex:"0",memoColor:"gray",memoIcon:"robot",AdapterState:"adapter-gated"}}function py(){return{Source:"toolbar-code-note",SemanticType:tb,CodeNoteId:J("code-note"),CodeNoteKind:"Feature",CodeNoteStatus:"Draft",CodeNoteSyncState:"Unlinked",CodeNoteWhy:"Keep the reason and implementation boundary visible before code changes.",CodeNoteRelatedFiles:JSON.stringify(["src/features/canvas/MindCanvas.tsx"]),CodeNoteRelatedNamespaces:"[]",CodeNoteRelatedSymbols:"[]",CodeNoteAcceptanceCriteria:JSON.stringify(["The intended change is represented as a canvas note.","Local status actions update CodeNote metadata without external adapters."]),CodeNoteOutputArtifacts:"[]",memoColor:"sky",memoIcon:"code",AdapterState:"local-canvas-only"}}function gy(e,t,n="LocalBridge AI path was unavailable"){var d,c,m,y;const r=t?Ri(Ti(t)):null;if(r){const p=r.mode.toLowerCase();return[`Task: ${e}`,"",`Run Result: ${r.title}`,`Node: ${r.kind}`,"Status: Spec only","Source mode: media-prompt-only","AI used: no",`Fallback reason: ${n}`,"","Generation is not executed here. External media generation stays adapter-gated until human review.","","Spec:",`- Medium: ${p}`,`- Model: ${((d=t==null?void 0:t.metadata)==null?void 0:d.MediaModel)||"adapter-gated"}`,`- Aspect: ${((c=t==null?void 0:t.metadata)==null?void 0:c.AspectLabel)||((m=t==null?void 0:t.metadata)==null?void 0:m.AspectPresetId)||"auto"}`,`- Requested size: ${((y=t==null?void 0:t.metadata)==null?void 0:y.RequestedSize)||"auto"}`,"","Prompt draft:",e].join(`
35
+ `)}return[`Task: ${e}`,"","Source: Local fallback","AI used: no",`Fallback reason: ${n}`,"","Local draft:","1. Clarify the paid offer in one sentence.","2. Pick one English-first channel and publish proof there.","3. Create a MindCanvas board that keeps source context, AI output, and next actions together.","4. Reuse the result as context for the next task."].join(`
36
+ `)}function yo(e,t){return{...nu(e)?uy(e,t):e.metadata??{},AiTaskLastRunState:t.runState,AiTaskLastRunStatus:t.status,AiTaskLastRunStatusLabel:t.statusLabel,AiTaskLastRunSourceMode:t.sourceMode??"",AiTaskLastRunIsFallback:String(!!t.fallback),AiTaskLastRunIsPartial:String(!!t.partial),AiTaskLastRunToolsUsed:t.toolsUsed??"",AiTaskLastRunToolWarnings:t.toolWarnings??"",AiTaskLastRunModel:t.model??"",AiTaskLastRunReasoningEffort:t.reasoningEffort??"",AiTaskLastRunProviderKind:t.providerKind??"",AiTaskLastRunThreadId:t.threadId??"",AiTaskLastRunTurnId:t.turnId??"",AiTaskLastRunError:t.error??"",...t.runState!=="running"?{AiTaskLastRunAtUtc:new Date().toISOString()}:{}}}function hy(e){var w;const t=e.metadata??{},n=t.AiTaskLastRunSourceMode||t.AutomationLastRunSourceMode||"",r=t.AiTaskLastRunStatusLabel||t.AutomationLastRunStatusLabel||e.status||"",d=t.AiTaskLastRunIsFallback==="true"||t.AutomationLastRunIsFallback==="true"||n==="local-draft"||((w=e.result)==null?void 0:w.includes("Source: Local fallback")),c=t.AiTaskLastRunModel||"",m=t.AiTaskLastRunReasoningEffort||"",y=t.AiTaskLastRunProviderKind||"",p=t.AiTaskLastRunThreadId||"",b=t.AiTaskLastRunError||t.AutomationLastRunError||"";return n==="media-prompt-only"?{tone:"fallback",label:"Spec only",detail:"External media generation was not executed."}:d?{tone:"fallback",label:"Local fallback",detail:b?`AI not used. ${b}`:"AI not used."}:e.status==="running"?{tone:"running",label:"Running",detail:[c||"Codex",m].filter(Boolean).join(" · ")||"AI request in progress."}:n==="ai-generated"||y||p?{tone:"ai",label:"AI result",detail:[y||"LocalBridge Codex",c,m,p?`thread ${p.slice(0,8)}`:""].filter(Boolean).join(" · ")}:{tone:e.status==="blocked"?"fallback":"neutral",label:r||"Result",detail:n||"Run metadata unavailable."}}function fy(e,t){const n=e.result||"",r=n.slice(0,oi),d=`${e.title||"AI Task"} result`;return{id:J("node"),kind:"markdown",title:d.slice(0,90),body:r,x:t.x,y:t.y,width:440,height:me(220+Math.ceil(Math.min(r.length,3600)/88)*20,260,680),tags:["AI Result","Markdown"],metadata:{Source:"ai-result-popover",AiResultSourceNodeId:e.id,AiResultSourceTitle:e.title,AiResultArchivedAtUtc:new Date().toISOString(),TextTruncated:String(n.length>oi),AdapterState:"local-reference"}}}function by(e,t){const n=vo(e.result||"",900);return{id:J("node"),kind:"ai-task",title:`Follow up: ${e.title||"AI result"}`.slice(0,90),body:["Continue from the linked AI result.","","Use the result as context and propose the next concrete action.","","Result preview:",n||"(No result preview available.)"].join(`
37
+ `),x:t.x,y:t.y,width:360,height:220,status:"idle",tags:["AI Task","Follow-up"],metadata:{Source:"ai-result-popover",FollowUpSourceNodeId:e.id,FollowUpSourceTitle:e.title,AdapterState:"local-draft"}}}function Zd(e,t,n){var y,p,b,w,P;const r=Ri(Ti(t)),d=new Set(e.edges.filter(N=>N.to===t.id||N.from===t.id).flatMap(N=>[N.from,N.to]).filter(N=>N!==t.id)),c=e.nodes.filter(N=>d.has(N.id)).slice(0,8),m=c.length>0?c.map(N=>[`### ${N.title||N.kind}`,`Type: ${N.kind}`,vo(N.result||N.body||"",1200)].join(`
38
+ `)).join(`
39
+
40
+ `):"No linked context nodes.";return r?["You are running inside MindExec React MindCanvas.",`Return a concise, practical Markdown media generation spec for the selected ${r.mode.toLowerCase()} automation node.`,"Do not claim the asset was generated. This node prepares the prompt/spec only.","External media generation must remain gated until human review.",Hr(e.settings.appLanguage),"",`Board: ${e.name}`,`Task node: ${t.title}`,`Automation kind: ${r.kind}`,`External action policy: ${((y=t.metadata)==null?void 0:y.AutomationExternalActionPolicy)||"spec-only-until-review"}`,`Media model: ${((p=t.metadata)==null?void 0:p.MediaModel)||"adapter-gated"}`,`Aspect: ${((b=t.metadata)==null?void 0:b.AspectLabel)||((w=t.metadata)==null?void 0:w.AspectPresetId)||"auto"}`,`Requested size: ${((P=t.metadata)==null?void 0:P.RequestedSize)||"auto"}`,"","Instruction:",vo(n,4e3),"","Linked context:",m,"","Required sections:","- Subject","- Visual style","- Composition or scene","- Constraints","- Business use case","- Final generation prompt"].join(`
41
+ `):["You are running inside MindExec React MindCanvas.","Return a concise, practical Markdown result for the selected AI Task.","Do not modify files. Do not ask follow-up questions unless the task is impossible.",Hr(e.settings.appLanguage),"",`Board: ${e.name}`,`Task node: ${t.title}`,"","Instruction:",vo(n,4e3),"","Linked context:",m].join(`
42
+ `)}function ou(e,t){const n=e.x-t.x;if(Math.abs(n)>1)return n;const r=e.y-t.y;return Math.abs(r)>1?r:String(e.title||e.id).localeCompare(String(t.title||t.id))}function ci(e){return[...e].sort(ou)}function yy(e,t){const n=new Map(e.nodes.filter(w=>w.kind==="ai-task").map(w=>[w.id,w])),r=new Set([...t].filter(w=>n.has(w))),d=new Map,c=new Map;for(const w of r)d.set(w,new Set),c.set(w,0);for(const w of e.edges){if(!r.has(w.from)||!r.has(w.to)||w.from===w.to)continue;const P=d.get(w.from);!P||P.has(w.to)||(P.add(w.to),c.set(w.to,(c.get(w.to)??0)+1))}const m=[],y=new Set,p=ci([...r].filter(w=>(c.get(w)??0)===0).map(w=>n.get(w)));for(;p.length>0;){const w=p.shift();if(y.has(w.id))continue;y.add(w.id),m.push(w);const P=[...d.get(w.id)??[]].map(N=>n.get(N)).filter(N=>!!N);for(const N of P)c.set(N.id,Math.max(0,(c.get(N.id)??0)-1)),(c.get(N.id)??0)===0&&p.push(N);p.sort(ou)}const b=ci([...r].filter(w=>!y.has(w)).map(w=>n.get(w)).filter(Boolean));return[...m,...b]}function ui(e,t){var m,y;const n=new Set(e.nodes.filter(p=>p.kind==="ai-task").map(p=>p.id));if(!n.has(t))return[];const r=new Map;for(const p of n)r.set(p,new Set);for(const p of e.edges)!n.has(p.from)||!n.has(p.to)||((m=r.get(p.from))==null||m.add(p.to),(y=r.get(p.to))==null||y.add(p.from));const d=new Set,c=[t];for(;c.length>0;){const p=c.pop();if(!d.has(p)){d.add(p);for(const b of r.get(p)??[])d.has(b)||c.push(b)}}return yy(e,d)}function xy(e){const t=new Set(e.nodes.filter(d=>d.kind==="ai-task").map(d=>d.id)),n=new Set(t),r=[];for(const d of ci(e.nodes.filter(c=>c.kind==="ai-task"))){if(!n.has(d.id))continue;const c=ui(e,d.id);for(const m of c)n.delete(m.id);r.push(c)}return r}function jo(e,t,n){const r=cc(t,e,n),d=t==="Image"?e.imageRouterImageAspectPresetId:e.imageRouterVideoAspectPresetId,c=Wr(t,r,d);return{mode:t,model:r,aspect:c,aspectOptions:Ap(r,t),requestedSize:Vr(c)}}function Li(e,t,n){const r=jo(e,t,n);return{InputMode:t,AppLanguage:hi(e.appLanguage),MediaPromptLanguageInstruction:Mp(e.appLanguage),AdapterState:"adapter-gated",MediaModel:r.model.id,MediaProvider:r.model.provider,AspectPresetId:r.aspect.id,AspectLabel:r.aspect.label,RequestedSize:r.requestedSize}}function Cy(e){const t=Zt(e.id);if(!t)return null;const n=ky(e.provider,t);return{id:t,label:e.displayName||e.label||t,displayName:e.displayName||e.label||t,description:e.description,provider:n,supportsReasoning:e.supportsReasoning,isFallback:e.isFallback,vendorPricing:su(e.vendorPricing),source:e.source}}function Qd(e,t){const n=dc(t,e.id);if(!n)return null;const r=Array.isArray(e.supportedSizes)&&e.supportedSizes.length>0?e.supportedSizes:t==="Image"?["custom"]:[];return{id:n,label:e.displayName||e.label||n,displayName:e.displayName||e.label||n,description:e.description,provider:Sy(e.provider,n),mode:t,supportedSizes:r,supportedSeconds:e.supportedSeconds??[],supportsReasoning:e.supportsReasoning,isFallback:e.isFallback,vendorPricing:su(e.vendorPricing),source:e.source}}function su(e){if(!e)return null;const t=String(e.source||"").trim()||"catalog";return{promptUsdPerToken:kn(e.promptUsdPerToken),completionUsdPerToken:kn(e.completionUsdPerToken),requestUsd:kn(e.requestUsd),minUsd:kn(e.minUsd),averageUsd:kn(e.averageUsd),maxUsd:kn(e.maxUsd),source:t}}function kn(e){const t=Number(e);return Number.isFinite(t)?t:void 0}function ky(e,t){const n=String(e||"").trim().toLowerCase();return n==="codex"?"codex":n==="ollama"?"ollama":n==="gemini-cli"||t.startsWith("gemini-")?"gemini-cli":t.startsWith("llama")?"ollama":"openrouter"}function Sy(e,t){const n=String(e||"").trim().toLowerCase();return n==="codex"||t.startsWith("codex-image:")?"OpenAI Codex":n==="openai"?"OpenAI":n==="imagerouter"?"ImageRouter":e||mi(t,"Saved")}function wy(e){return e.filter(n=>n.provider==="codex"&&!n.id.includes("/")&&!n.id.includes(":")).filter((n,r,d)=>d.findIndex(c=>c.id.toLowerCase()===n.id.toLowerCase())===r).slice(0,8).flatMap(n=>[{quality:"low",label:"Low"},{quality:"medium",label:"Mid"},{quality:"high",label:"High"}].map(({quality:r,label:d})=>({id:`codex-image:${n.id}:${r}`,label:`${n.displayName||n.label} Image - ${d}`,displayName:`${n.displayName||n.label} Image - ${d}`,provider:"OpenAI Codex",mode:"Image",supportedSizes:["1024x1024","1536x1024","1024x1536"],source:n.source||"codex"})))}function zr(e,t,n){return e.map(r=>{const d=Ny(r),c=jy(r,t,n),m=My(r,d);return{value:r.id,label:m,title:r.label||r.displayName||r.id,trailingLabel:c.displayLabel}})}function ec(e){return e.map(t=>({value:t.id,label:t.label,title:t.note,detail:t.resolvedSize?`Size hint: ${t.resolvedSize}`:t.note,showAspectIcon:!!(t.width&&t.height),aspectIconWidth:t.width,aspectIconHeight:t.height}))}function vy(){return[{value:"Fast",label:"Fast",detail:"Lower reasoning effort"},{value:"Normal",label:"Normal",detail:"Balanced reasoning effort"},{value:"Deep",label:"Deep",detail:"Higher reasoning effort"}]}function jy(e,t,n){const r=Iy(e,t,n),d=e.vendorPricing??Lp(e.id);return Pp({mode:t,provider:r,modelId:e.id,reasoningEffort:n.effort,vendorPricing:d})}function Iy(e,t,n){const r=String(e.provider||"").trim().toLowerCase();return t==="Text"?r==="codex"?"openai-codex":r==="ollama"?"local-ollama":r==="gemini-cli"?"google-gemini-cli":n.aiProvider==="BYOK"?"byok":"managed-cloud":t==="Image"&&(r==="openai codex"||e.id.startsWith("codex-image:"))?"openai-codex":Ep(n)}function Ny(e){const t=String(e.provider||"").trim().toLowerCase();return t==="codex"||t==="openai codex"?"openai-codex-exec":t==="gemini-cli"?"google":t==="ollama"?"ollama":t==="openrouter"||t==="imagerouter"||t==="imagerouter"?mi(e.id,t):mi(e.id,t||"other")}function mi(e,t){const n=String(e||"").trim();if(!n)return t;if(n.startsWith("codex-image:"))return"openai";const r=n.indexOf("/");if(r>0)return n.slice(0,r).toLowerCase();const d=n.indexOf(":");return d>0?n.slice(0,d).toLowerCase():t||n.toLowerCase()}function Ay(e){switch(e){case"openai-codex-exec":return"OpenAI Codex";case"openai":return"OpenAI";case"google":return"Google";case"ollama":return"Ollama";case"imagerouter":return"ImageRouter";default:return e.replace(/[-_]+/g," ").replace(/\b\w/g,t=>t.toUpperCase())}}function My(e,t){const n=String(e.displayName||e.label||e.id||"").trim(),r=n.toLowerCase()===e.id.toLowerCase()?tc(e.id):n;return Ty(r,t)||tc(e.id)}function tc(e){const t=String(e||"").trim();if(t.startsWith("codex-image:"))return t.slice(12);const n=t.indexOf("/");return n>0&&n<t.length-1?t.slice(n+1):t}function Ty(e,t){const n=Ry(t);for(const r of n)for(const d of[" · ",": "," - "," - "," | "," / "," "]){const c=`${r}${d}`;if(e.toLowerCase().startsWith(c.toLowerCase()))return e.slice(c.length).trim()}return e}function Ry(e){switch(e){case"openai-codex-exec":return["OpenAI Codex","OpenAI"];case"openai":return["OpenAI"];case"google":return["Google"];case"anthropic":return["Anthropic"];case"runway":return["Runway"];default:return[Ay(e)]}}function Ly(e){return{textModels:((e==null?void 0:e.textModels)??[]).map(Cy).filter(t=>!!t),imageModels:((e==null?void 0:e.imageModels)??[]).map(t=>Qd(t,"Image")).filter(t=>!!t),videoModels:((e==null?void 0:e.videoModels)??[]).map(t=>Qd(t,"Video")).filter(t=>!!t)}}function Py(e){var r;const t=((r=e==null?void 0:e.exec)==null?void 0:r.availableModels)??[],n=[];return t.forEach((d,c)=>{var p,b;if(typeof d=="string"){const w=Zt(d);if(!w)return;const P=ac(w);n.push({id:w,label:P,displayName:P,provider:"codex",supportsReasoning:!0,source:((p=e==null?void 0:e.exec)==null?void 0:p.modelCatalogSource)||"localbridge-status",priority:c});return}const m=Zt(d.id);if(!m)return;const y=String(d.displayName||"").trim()||ac(m);n.push({id:m,label:y,displayName:y,description:d.description,provider:"codex",supportsReasoning:!0,isFallback:!1,source:((b=e==null?void 0:e.exec)==null?void 0:b.modelCatalogSource)||"localbridge-status",priority:Number.isFinite(Number(d.priority))?Number(d.priority):c})}),n.sort((d,c)=>d.priority-c.priority||d.id.localeCompare(c.id)).map(({priority:d,...c})=>c)}function ac(e){return e.startsWith("gpt-")?`GPT-${e.slice(4).toUpperCase()}`:e}function ru(e){return e.map(t=>({id:t.id,kind:t.kind,title:t.title,body:t.body,response:t.result||t.body,tags:t.tags??[],metadata:t.metadata??{},sourceFilePath:t.sourceFilePath,assetUrl:t.assetUrl,x:t.x,y:t.y,width:t.width,height:t.height}))}function Ey(e,t){const n=Math.max(.01,e.scale),r=Math.max(1,t.width/n/2),d=Math.max(1,t.height/n/2);return{centerX:(t.width/2-e.x)/n,centerY:(t.height/2-e.y)/n,halfWidth:r,halfHeight:d}}function _y(e,t,n,r=8){if(!t.trim())return[];const d=zh(ru(e)),c=new Map(e.map(m=>[m.id,m]));return Hh(d,t,{limit:r,viewport:n}).hits.map(m=>c.get(m.nodeId)).filter(m=>!!m)}function nc(e,t,n="none"){const r=new Set(t.nodes.map(c=>c.id)),d=e.filter((c,m)=>r.has(c)&&e.indexOf(c)===m);return d.length>0||n==="none"?d:t.nodes[0]?[t.nodes[0].id]:[]}function oc(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('input,textarea,select,[contenteditable="true"],[contenteditable=""]'):!1}function By(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('button,a,[role="button"],[role="tab"],summary'):!1}function bs(e){const t=e;if(!t)return null;const n=Number(t.x),r=Number(t.y),d=Number(t.scale);return!Number.isFinite(n)||!Number.isFinite(r)||!Number.isFinite(d)?null:{x:n,y:r,scale:me(d,Ss,ws)}}function Ga(e){return typeof e=="string"?e.trim():""}function ys(e,t=34){const n=Ga(e);if(!n)return"workspace";const c=n.replace(/\\/g,"/").split("/").filter(Boolean).slice(-2).join("/")||n;return c.length<=t?c:`...${c.slice(-(t-3))}`}function Dy(){try{const e=window.localStorage.getItem(Xc),t=e?JSON.parse(e):[];return Array.isArray(t)?t.map(Ga).filter(Boolean).filter((n,r,d)=>d.findIndex(c=>c.toLowerCase()===n.toLowerCase())===r).slice(0,qc):[]}catch{return[]}}function Oy(e){const t=e.map(Ga).filter(Boolean).filter((n,r,d)=>d.findIndex(c=>c.toLowerCase()===n.toLowerCase())===r).slice(0,qc);try{window.localStorage.setItem(Xc,JSON.stringify(t))}catch{}return t}function $y(){try{return window.localStorage.getItem(Kc)==="full"?"full":"curated"}catch{return"curated"}}function Fy(e){try{window.localStorage.setItem(Kc,e)}catch{}}function sc(e,t){return Oy([e,...t.filter(n=>n.toLowerCase()!==e.toLowerCase())])}function ex({navigate:e,onSidebarActionsChange:t}){var gl,hl,fl,bl,yl,xl,Cl,kl,Sl,wl,vl,jl,Il,Nl,Al;const[n,r]=g.useState(()=>Vl(Bl(Yl(Zm(El))))),[d,c]=g.useState([]),[m,y]=g.useState([]),[p,b]=g.useState(["node-agent-command"]),[w,P]=g.useState(""),[N,_]=g.useState(""),[B,F]=g.useState(0),[$,H]=g.useState([]),[W,re]=g.useState(0),[se,Ie]=g.useState("idle"),[fe,He]=g.useState("booting"),[jt,ot]=g.useState(null),[V,G]=g.useState(null),[ie,ae]=g.useState(null),[mt,z]=g.useState(null),[It,Ze]=g.useState(null),[_e,$e]=g.useState({...Ha}),[Me,Bt]=g.useState({...Ha}),[U,Be]=g.useState(()=>({width:window.innerWidth,height:window.innerHeight})),[ea,Xa]=g.useState(()=>Er(n)??{x:0,y:0}),[ta,qa]=g.useState(!1),[En,_n]=g.useState(()=>localStorage.getItem(wd)==="true"),[Te,Ja]=g.useState("local"),[aa,De]=g.useState([]),[Re,pe]=g.useState(at()?"idle":"blocked"),[zs,We]=g.useState(null),[na,Qe]=g.useState({status:"idle",textModels:[],imageModels:[],videoModels:[]}),[pt,de]=g.useState(at()?null:"Hosted LocalBridge access is off."),[Le,Ve]=g.useState(null),[Ao,be]=g.useState(null),[Fe,oa]=g.useState(()=>Dy()),[Dt,Ne]=g.useState(!1),[gt,Ue]=g.useState(null),[Mo,Za]=g.useState(null),[Ae,Ye]=g.useState(!1),[Sa,To]=g.useState("ready"),[Bn,Ro]=g.useState("Saved in this browser."),[st,Dn]=g.useState(!1),[rt,Ge]=g.useState(()=>St()),et=g.useMemo(()=>ab(),[]),[wa,Lo]=g.useState(()=>xr()),ye=et.cloudBoards.canAttempt&&(wa==null?void 0:wa.source)==="supabase-provider-session",[sa,Qa]=g.useState([]),[On,Pe]=g.useState(null),[Nt,en]=g.useState(!1),[tn,an]=g.useState(null),Ke=g.useMemo(()=>df({storedMode:Te,cloudConfigured:!0,cloudSessionAvailable:ye,cloudAccess:ye?{planKey:"provider",entitlementStatus:"active",currentBoardCount:sa.length,cloudBoardLimit:Number.MAX_SAFE_INTEGER,lockedBoardCount:0,canCreateBoard:!0}:null,bridgeProviderConfigured:!0,bridgeReachable:Re==="connected",hostedWebApp:!at()&&!io(),hostedLocalBridgeAccessEnabled:io(),browserProviderConfigured:!0,browserLocalAvailable:!0,browserLocalAvailableWhenEmpty:!0,embeddedProviderConfigured:!1,supportsEmbeddedLocal:!1}),[ye,sa.length,Re,Te]),[Hs,$n]=g.useState(null),[va,nn]=g.useState(""),[ra,ja]=g.useState(null),[At,on]=g.useState(null),[Ia,ce]=g.useState(!1),[ht,ia]=g.useState(!1),[Ot,$t]=g.useState(null),[Ft,la]=g.useState(null),[ft,Ws]=g.useState(!1),[Vs,Po]=g.useState(!1),[Na,Ys]=g.useState($y),Fn=g.useRef(new Map),Aa=g.useMemo(()=>fr(n.settings.appLanguage),[n.settings.appLanguage]),[Ma,Ut]=g.useState(!1),[Eo,Ta]=g.useState(!1),[da,Un]=g.useState("business"),[it,zn]=g.useState(()=>{var s;const a=lo("business",n.settings.appLanguage)??fr(n.settings.appLanguage)[0];return((s=ss(a))==null?void 0:s.id)??null}),[zt,ca]=g.useState(()=>{const a=lo("business",n.settings.appLanguage)??fr(n.settings.appLanguage)[0],s=ss(a);return co(uo(a,s==null?void 0:s.id,n.settings.appLanguage))}),[Hn,bt]=g.useState(null),[sn,Wn]=g.useState(!1),[we,_o]=g.useState(()=>Id(n.id,n.name)),[ge,tt]=g.useState(null),[Bo,Vn]=g.useState(null),[Do,lt]=g.useState(!1),[Ht,Ra]=g.useState({}),[rn,ua]=g.useState(null),ln=g.useMemo(()=>{var l,u;const a=rt.find(h=>h.id===n.id),s={id:n.id,name:n.name,updatedAt:n.updatedAt,nodeCount:n.nodes.length,edgeCount:n.edges.length,sourceKind:(l=n.source)==null?void 0:l.kind,sourceBoardId:(u=n.source)==null?void 0:u.boardId,order:(a==null?void 0:a.order)??-1},i=new Map(rt.map(h=>[h.id,h]));return i.set(n.id,{...a,...s}),Array.from(i.values()).sort((h,k)=>{const C=typeof h.order=="number"?h.order:Number.MAX_SAFE_INTEGER,j=typeof k.order=="number"?k.order:Number.MAX_SAFE_INTEGER;return C!==j?C-j:String(k.updatedAt||"").localeCompare(String(h.updatedAt||""))}).slice(0,7)},[n,rt]),ne=g.useMemo(()=>lo(da,n.settings.appLanguage)??Aa[0],[da,n.settings.appLanguage,Aa]),Xe=g.useMemo(()=>ne?uo(ne,it,n.settings.appLanguage):null,[ne,n.settings.appLanguage,it]),dn=!!(ne&&(ne.options.length>0||!ne.quickCreateTemplateId)),Yn=g.useMemo(()=>rs(Xe,zt),[Xe,zt]),v=g.useRef(n),K=g.useRef(p),oe=g.useRef({...Ha}),Oo=g.useRef(U),ze=g.useRef(ea),Wt=g.useRef(null),Vt=g.useRef(null),cn=g.useRef(null),un=g.useRef(null),Gn=g.useRef(null),Kn=g.useRef(null),mn=g.useRef(new Map),Xn=g.useRef(new uf),La=g.useRef(0),qn=g.useRef(null),pn=g.useRef(0),Pa=g.useRef(null),ma=g.useRef(!1),Oe=g.useRef(0),Ee=g.useRef(0),Ea=g.useRef(0),_a=g.useRef(0),gn=g.useRef(!1),Jn=g.useRef(0),x=g.useRef({}),D=g.useRef(),le=g.useRef(),Yt=g.useRef(null),yt=g.useRef(null),dt=g.useRef(0),pa=g.useRef(null),xt=g.useRef(0),hn=g.useRef(!1),Mt=g.useCallback(()=>{var s;const a=(s=Wt.current)==null?void 0:s.getBoundingClientRect();return{width:Math.max(1,(a==null?void 0:a.width)??window.innerWidth),height:Math.max(1,(a==null?void 0:a.height)??window.innerHeight)}},[]),ga=g.useCallback((a,s)=>{var l;const i=(l=Wt.current)==null?void 0:l.getBoundingClientRect();return i?{x:a-i.left,y:s-i.top}:{x:a,y:s}},[]),ha=g.useCallback(a=>{hn.current=a,Ws(a)},[]),Pi=g.useCallback((a="keyboard")=>{Ys(s=>{const i=s==="curated"?"full":"curated";return Fy(i),f.emit("canvas.functionToolbar.toggle",{mode:i,source:a}),i})},[]);g.useEffect(()=>(f.transitionTo("board-file-loading","mindcanvas-mount"),f.transitionTo("interactive-fullres","react-board-ready"),()=>f.transitionTo("disposed","mindcanvas-unmount")),[]),g.useEffect(()=>{const a=()=>Lo(xr());return window.addEventListener(Hl,a),window.addEventListener("storage",a),window.addEventListener("focus",a),()=>{window.removeEventListener(Hl,a),window.removeEventListener("storage",a),window.removeEventListener("focus",a)}},[]),g.useEffect(()=>{const a=()=>{const s=!!document.fullscreenElement;ha(s),f.emit("canvas.fullscreen.changed",{active:s})};return document.addEventListener("fullscreenchange",a),()=>document.removeEventListener("fullscreenchange",a)},[ha]),g.useEffect(()=>{const a=new Worker(new URL("/assets/mindCanvasSearchWorker-BzPMsHOB.js",import.meta.url),{type:"module"});return Pa.current=a,a.onmessage=s=>{var h,k,C,j,S,I,L,E,T;const i=s.data;if(i.type==="READY"){ma.current=!0,He("ready"),f.emit("search.worker.ready");return}if(i.type!=="SEARCH_RESULT")return;if(i.seq!==pn.current){f.emit("async.staleIgnored",{path:"search.worker",seq:i.seq});return}const l=new Map(v.current.nodes.map(M=>[M.id,M])),u=i.hits.map(M=>l.get(M.nodeId)).filter(M=>!!M);H(u),re(0),Ie("worker"),f.emit("search.completed",{query:i.query,count:u.length,engine:"worker",durationMs:(h=i.profile)==null?void 0:h.durationMs,documentCount:(k=i.profile)==null?void 0:k.documentCount,candidateCount:(C=i.profile)==null?void 0:C.candidateCount,rankedCount:(j=i.profile)==null?void 0:j.rankedCount,viewportBoosted:(S=i.profile)==null?void 0:S.viewportBoosted,boostedCount:(I=i.profile)==null?void 0:I.boostedCount,indexedTokenCount:(L=i.profile)==null?void 0:L.indexedTokenCount,indexedPrefixCount:(E=i.profile)==null?void 0:E.indexedPrefixCount,indexedNGramCount:(T=i.profile)==null?void 0:T.indexedNGramCount})},a.onerror=s=>{ma.current=!1,He("failed"),f.emit("search.worker.failed",{message:s.message})},()=>{a.terminate(),Pa.current=null,ma.current=!1}},[]),g.useEffect(()=>{const a=()=>{const l=Mt();Oo.current=l,Be(u=>Math.abs(u.width-l.width)<.5&&Math.abs(u.height-l.height)<.5?u:l)};a();const s=typeof ResizeObserver>"u"?null:new ResizeObserver(a),i=Wt.current;return s&&i&&s.observe(i),window.addEventListener("resize",a),()=>{s==null||s.disconnect(),window.removeEventListener("resize",a)}},[Mt]),g.useEffect(()=>(v.current=n,To("syncing"),Ro("Saving board state to this browser."),window.clearTimeout(D.current),D.current=window.setTimeout(()=>{const a=Xt(Wa(v.current,ze.current));Ge(St()),To(a?"ready":"error"),Ro(a?"Saved in this browser.":"Local browser storage failed.")},280),()=>window.clearTimeout(D.current)),[n]),g.useEffect(()=>{const a=Pa.current;if(!a)return;const s=window.setTimeout(()=>{a.postMessage({type:"REBUILD_BOARD",boardId:n.id,nodes:ru(n.nodes)}),f.emit("search.worker.synced",{boardId:n.id,count:n.nodes.length})},160);return()=>window.clearTimeout(s)},[n.id,n.nodes]),g.useEffect(()=>{K.current=p},[p]),g.useEffect(()=>{const a=Er(v.current)??{x:0,y:0};ze.current=a,Xa(a),f.emit("canvas.cursor.restore",{boardId:v.current.id,x:Math.round(a.x),y:Math.round(a.y),source:v.current.viewState?"board-view-state":"default"})},[n.id]),g.useEffect(()=>{f.emit("canvas.gridMode.applied",{boardId:n.id,gridType:Dr(n.settings.gridType),gridSnap:n.settings.gridSnap??!0})},[n.id,n.settings.gridSnap,n.settings.gridType]),g.useEffect(()=>()=>{document.body.classList.remove("is-selecting"),document.body.classList.remove("is-panning"),window.clearTimeout(le.current)},[]);const Q=g.useCallback((a,s=!0)=>{oe.current=a,$e(a),cn.current&&(cn.current.style.transform=`translate3d(${a.x}px, ${a.y}px, 0) scale(${a.scale})`),Vt.current&&(Vt.current.style.setProperty("--grid-x",`${a.x}px`),Vt.current.style.setProperty("--grid-y",`${a.y}px`),Vt.current.style.setProperty("--grid-small",`${24*a.scale}px`),Vt.current.style.setProperty("--grid-large",`${144*a.scale}px`)),window.clearTimeout(le.current),le.current=window.setTimeout(()=>Bt(a),Gf),s&&f.emit("camera.patch",{...a})},[]),Gt=g.useCallback(async()=>{var i;const a=++Oe.current;if(pe("checking"),We(null),de(null),f.emit("runtimeStatus.bridge.refresh.requested",{source:"mindcanvas"}),!at()){pe("blocked"),We(null),De([]),de("Hosted LocalBridge access is off."),Ve(null),be("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:"refresh",reason:"hosted-access-off"});return}const s=await qt();if(a===Oe.current){if(We(s.status??null),s.state!=="connected"){pe(s.state),De([]),de(s.message||"LocalBridge is unavailable."),Ve(null),be(s.message||"LocalBridge is unavailable.");return}try{const[l,u]=await Promise.all([Dl(s.baseUrl),Hg(s.baseUrl)]);if(a!==Oe.current)return;const h=Ga(l.rootPath||((i=s.status)==null?void 0:i.workspace));Ve(h||null),be(h?null:"LocalBridge workspace path is unavailable."),h&&oa(k=>sc(h,k)),pe("connected"),De(u),de(u.length>0?null:"No local boards found."),f.emit("projectStorage.workspace.refresh",{source:"board-list",path:h||null}),f.emit("localBridge.boards.listed",{count:u.length})}catch(l){if(a!==Oe.current)return;pe("unavailable"),De([]);const u=l instanceof Error?l.message:String(l);de(u),be(u)}}},[]),Zn=g.useCallback(async(a="auto",s=!1)=>{var u,h,k,C;const i=Date.now();if(!s&&i-Jn.current<qf)return;Jn.current=i;const l=++Ea.current;if(!at()){Qe(j=>({...j,status:"blocked",message:"Hosted LocalBridge access is off."})),f.emit("modelCatalog.refresh.blocked",{source:a,reason:"hosted-access-off"});return}Qe(j=>({...j,status:"loading",message:void 0})),f.emit("modelCatalog.refresh.requested",{source:a,force:s});try{const j=await qt();if(l!==Ea.current)return;if(We(j.status??null),j.state!=="connected"){Qe(M=>({...M,status:"error",message:j.message||"LocalBridge is unavailable."})),f.emit("modelCatalog.refresh.unavailable",{source:a,state:j.state,message:j.message});return}const S=Ua(j.status),I=Py(j.status);let L=null;try{L=await mp(S,j.baseUrl)}catch(M){const R=M instanceof Error?M.message:String(M);if(I.length>0){Qe({status:"ready",textModels:I,imageModels:[],videoModels:[],source:((h=(u=j.status)==null?void 0:u.exec)==null?void 0:h.modelCatalogSource)||"localbridge-status",updatedAt:(C=(k=j.status)==null?void 0:k.exec)==null?void 0:C.modelCatalogUpdatedAt,message:R}),f.emit("modelCatalog.refresh.statusFallback",{source:a,textModels:I.length,message:R});return}throw M}if(l!==Ea.current)return;const E=Ly(L);E.textModels=Ol(I,E.textModels);const T=L.errors&&L.errors.length>0?L.errors.join(" | "):void 0;Qe({status:"ready",...E,source:L.source,updatedAt:L.updatedAt,message:T}),f.emit("modelCatalog.refresh.completed",{source:a,textModels:E.textModels.length,imageModels:E.imageModels.length,videoModels:E.videoModels.length,hasWarnings:!!T})}catch(j){if(l!==Ea.current)return;const S=j instanceof Error?j.message:String(j);Qe(I=>({...I,status:"error",message:S})),f.emit("modelCatalog.refresh.failed",{source:a,message:S})}},[]);g.useEffect(()=>{at()&&(Gt(),Zn("mount",!0))},[Zn,Gt]),g.useEffect(()=>{En&&(qa(!0),f.emit("mindcanvas.projectGallery.opened",{source:"startup"}))},[En]);const iu=g.useCallback(()=>{qa(a=>{const s=!a;return s&&aa.length===0&&Re!=="checking"&&Gt(),f.emit(s?"mindcanvas.projectGallery.opened":"mindcanvas.projectGallery.closed",{source:"top-tab"}),s})},[aa.length,Re,Gt]),Tt=g.useCallback(a=>{qa(s=>(s&&f.emit("mindcanvas.projectGallery.closed",{source:a}),!1))},[]),lu=g.useCallback(a=>{_n(a),localStorage.setItem(wd,String(a)),f.emit("mindcanvas.projectGallery.startupPreference",{enabled:a})},[]),Gs=g.useCallback(async(a="manual")=>{if(Lo(xr()),!ye){const s=et.cloudBoards.canAttempt?"sign-in-required":et.cloudBoards.mode;Pe(s==="sign-in-required"?"Login with Supabase is required before cloud boards can be listed.":"Cloud board adapter is not configured."),f.emit("projectStorage.cloud.unavailable",{reason:s,source:a});return}en(!0),Pe(null);try{const s=await oh(Cs());Qa(s),Pe(s.length>0?`Loaded ${s.length} cloud board${s.length===1?"":"s"}.`:"No cloud boards yet.")}catch(s){Pe(s instanceof Error?s.message:String(s))}finally{en(!1)}},[ye,et.cloudBoards.canAttempt,et.cloudBoards.mode]),Ei=g.useCallback(a=>{Ja(a),f.emit("projectStorage.tab",{tab:a}),a==="cloud"&&Gs("tab")},[Gs]),du=g.useCallback(()=>{pp(!0),f.emit("runtimeStatus.bridge.hostedAccess.enabled"),Gt()},[Gt]),$o=g.useCallback(a=>{Ve(a),oa(s=>sc(a,s))},[]),cu=g.useCallback(async(a="manual")=>{var i;const s=++Ee.current;if(be(null),f.emit("projectStorage.workspace.refresh.requested",{source:a}),!at()){Ve(null),be("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:a,reason:"hosted-access-off"});return}try{const l=await qt();if(s!==Ee.current)return;if(We(l.status??null),l.state!=="connected"){pe(l.state),Ve(null),be(l.message||"LocalBridge is unavailable.");return}const u=await Dl(l.baseUrl);if(s!==Ee.current)return;const h=Ga(u.rootPath||((i=l.status)==null?void 0:i.workspace));be(h?null:"LocalBridge workspace path is unavailable."),h&&$o(h),f.emit("projectStorage.workspace.refresh",{source:a,path:h||null})}catch(l){if(s!==Ee.current)return;be(l instanceof Error?l.message:String(l))}},[$o]),Ks=g.useCallback(async(a,s)=>{const i=Ga(a);if(!i||Dt)return;const l=++Ee.current;if(Ne(!0),be("Switching LocalBridge workspace..."),f.emit("projectStorage.workspace.set.requested",{source:s,path:i}),!at()){Ve(null),be("Hosted LocalBridge access is off."),Ne(!1),f.emit("projectStorage.workspace.blocked",{source:s,reason:"hosted-access-off"});return}try{const u=await qt();if(l!==Ee.current)return;if(We(u.status??null),u.state!=="connected"){pe(u.state),be(u.message||"LocalBridge is unavailable.");return}const h=Ua(u.status);if(!h){pe("unavailable"),be("LocalBridge write token is unavailable.");return}const k=await gp(i,h,u.baseUrl);if(l!==Ee.current)return;const C=Ga(k.workspace||i);$o(C),pe("connected"),be(`Local workspace set to ${ys(C)}.`),f.emit("projectStorage.workspace.set",{source:s,path:C}),Gt()}catch(u){if(l!==Ee.current)return;pe("unavailable"),be(u instanceof Error?u.message:String(u))}finally{l===Ee.current&&Ne(!1)}},[Dt,Gt,$o]),uu=g.useCallback(async()=>{const a=++Ee.current;if(Ne(!0),be("Opening folder picker..."),f.emit("projectStorage.workspace.browse.requested",{path:Le||null}),!at()){Ve(null),be("Hosted LocalBridge access is off."),Ne(!1),f.emit("projectStorage.workspace.blocked",{source:"browse",reason:"hosted-access-off"});return}try{const s=await qt();if(a!==Ee.current)return;if(We(s.status??null),s.state!=="connected"){pe(s.state),be(s.message||"LocalBridge is unavailable.");return}const i=Ua(s.status),l=await hp(Le,i,s.baseUrl);if(a!==Ee.current)return;if(l.canceled||!l.success||!l.path){be("Workspace selection cancelled."),f.emit("projectStorage.workspace.browse.cancelled");return}f.emit("projectStorage.workspace.browse",{path:l.path}),Ne(!1),await Ks(l.path,"browse")}catch(s){if(a!==Ee.current)return;be(s instanceof Error?s.message:String(s))}finally{a===Ee.current&&Ne(!1)}},[Ks,Le]),mu=g.useCallback(async()=>{var s,i;const a=++Oe.current;if(Ye(!0),de(null),(s=v.current.source)!=null&&s.partialImport){de("This imported board came from a partial original payload, so export is blocked to avoid data loss."),Ye(!1);return}if((i=v.current.source)!=null&&i.truncated){de("This imported board was truncated, so export is blocked to avoid data loss."),Ye(!1);return}if(!at()){pe("blocked"),We(null),de("Hosted LocalBridge access is off."),Ye(!1);return}try{const l=await qt();if(a!==Oe.current)return;if(We(l.status??null),l.state!=="connected"){pe(l.state),de(l.message||"LocalBridge is unavailable.");return}const u=Ua(l.status);if(!u){pe("unavailable"),de("LocalBridge write token is unavailable.");return}const h=await Vg(v.current,oe.current,u,l.baseUrl,ze.current);if(a!==Oe.current)return;const k=Wa({...v.current,nodes:h.nodes,source:h.source,updatedAt:h.metadata.UpdatedAt||new Date().toISOString()},ze.current);r(k),Xt(k),Ge(St()),pe("connected"),De(C=>[h.metadata,...C.filter(j=>j.Id!==h.metadata.Id)]),de(`Exported "${nt(h.metadata.Title)}" to LocalBridge.`)}catch(l){if(a!==Oe.current)return;pe("unavailable"),de(l instanceof Error?l.message:String(l))}finally{a===Oe.current&&Ye(!1)}},[]),qe=g.useCallback((a,s,i={})=>{const l=Yl(a),u=Bl(l),h=Vl(u);c(k=>za(k,v.current,{description:"Activate board"})),y([]),r(h),b(h.nodes[0]?[h.nodes[0].id]:[]),ae(null),Ze(null),G(null),Tt("board-activate"),f.emit(s,{boardId:h.id,...i})},[Tt]),_i=g.useCallback(()=>{const a=Xd(v.current.settings);qe(a,"board.local.create"),Q({x:540,y:210,scale:1})},[qe,Q]),pu=g.useCallback(async a=>{if(!ye){Pe("Login with Supabase is required before cloud boards can be opened."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:"load-board"});return}an(a.id),Pe(null);try{const s=await sh(Cs(),a.id,v.current.settings);if(!s){Pe("Cloud board was not found or is not available to this user.");return}qe(s,"board.cloud.switch",{sourceBoardId:a.id}),Q({x:540,y:210,scale:1})}catch(s){Pe(s instanceof Error?s.message:String(s))}finally{an(null)}},[qe,Q,ye]),Fo=g.useCallback(async(a,s)=>{if(!ye){Pe("Login with Supabase is required before cloud boards can be saved."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:s});return}en(!0),Pe(null);try{const i=await rh(Cs(),a,oe.current,ze.current);if(!i){Pe("Cloud board save did not return a board.");return}const l=new Date().toISOString(),u=Wa({...a,id:i.id,name:i.name,updatedAt:i.updatedAt,source:{kind:"cloud",boardId:i.id,loadedAt:l,snapshotFormat:"supabase.boards.content_json",originalNodeCount:a.nodes.length,renderedNodeCount:a.nodes.length}},ze.current);r(u),Xt(u),Ge(St()),Qa(h=>[i,...h.filter(k=>k.id!==i.id)]),Pe(`Saved "${nt(i.name)}" to cloud.`)}catch(i){Pe(i instanceof Error?i.message:String(i))}finally{en(!1)}},[ye]),gu=g.useCallback(()=>{Fo(v.current,"save-current")},[Fo]),hu=g.useCallback(()=>{const a=Xd(v.current.settings);Fo(a,"new-cloud-board")},[Fo]),fu=g.useCallback(()=>{var l;if(!ne)return;if(ne.options.length>0||!ne.quickCreateTemplateId){const u=oe.current,h=Mt(),k={x:(h.width/2-u.x)/u.scale,y:(h.height/2-u.y)/u.scale},C=v.current.nodes,j=C.length?Math.max(...C.map(M=>M.x+M.width)):k.x-280-hs,S=C.length?Math.min(...C.map(M=>M.y)):k.y-310,I=fp(ne,it,j+hs,S,zt,v.current.settings.appLanguage);r(M=>{var R;return c(X=>za(X,M,{description:"Create template card"})),y([]),f.emit("templateCard.node.create",{id:I.id,launcherId:ne.id,optionId:((R=I.metadata)==null?void 0:R.templateLauncherSelectedOptionId)??null,source:"launcher-panel"}),{...M,nodes:[...M.nodes,I],updatedAt:new Date().toISOString()}}),b([I.id]);const L=Math.min(oe.current.scale,me((h.height-190)/I.height,.72,1)),E=Math.max(320,h.height-180);Q({...oe.current,scale:L,x:h.width/2-(I.x+I.width/2)*L,y:48+E/2-(I.y+I.height/2)*L}),z(I.id),window.setTimeout(()=>z(M=>M===I.id?null:M),1e3),Ut(!1),bt(null);const T="Template card added to the current canvas.";Ue(T),window.setTimeout(()=>{Ue(M=>M===T?null:M)},2200),f.emit("templateCard.node.focus",{nodeId:I.id,launcherId:ne.id});return}const s=rs(Xe,zt);if(s){bt(s),f.emit("template.validation.failed",{launcherId:ne.id,optionId:it,templateId:(Xe==null?void 0:Xe.id)??null,message:s});return}const i=bp(ne,it,zt,v.current.settings);if(!i){const u="Template could not be created.";bt(u),f.emit("template.validation.failed",{launcherId:ne.id,optionId:it,templateId:(Xe==null?void 0:Xe.id)??null,message:u});return}qe(i.board,"template.board.create",{launcherId:i.launcher.id,optionId:((l=i.option)==null?void 0:l.id)??null,templateId:i.template.id,nodes:i.board.nodes.length}),Q({x:540,y:210,scale:1}),Ut(!1),bt(null)},[qe,Xe,ne,Q,Mt,it,zt]),Bi=g.useCallback(a=>{if(a===v.current.id){Tt("stored-board-current");return}const s=Qm(a);s&&(qe(s,"board.local.switch"),Q({x:540,y:210,scale:1}))},[qe,Q,Tt]),Xs=g.useCallback((a,s="unknown")=>{if(a===v.current.id){f.emit("board.tabs.closeIgnored",{boardId:a,source:s,reason:"active-board"});return}f.emit("board.tabs.close",{boardId:a,source:s}),ep(a),Ge(St())},[]),bu=g.useCallback((a,s)=>{if(!a||!s||a===s)return;Xt(Wa(v.current,ze.current));const i=St(),l=ln.map(I=>I.id),u=l.indexOf(a),h=l.indexOf(s);if(u<0||h<0)return;const k=[...l],C=k.splice(u,1)[0];if(!C)return;k.splice(h,0,C);const j=i.map(I=>I.id).filter(I=>!k.includes(I)),S=tp([...k,...j]);Ge(S),f.emit("board.tabs.drop",{sourceId:a,targetId:s,visibleIds:k})},[ln]),yu=g.useCallback(async a=>{const s=++Oe.current;Za(a.Id),de(null);try{const i=await Yg(a,v.current.settings);if(s!==Oe.current)return;qe(i,"board.localBridge.switch",{sourceBoardId:a.Id});const l=Kr(a.LastCameraX,a.LastCameraY,a.LastCameraZ);Q(l?{...l,scale:me(l.scale,Ss,ws)}:{x:540,y:210,scale:1})}catch(i){if(s!==Oe.current)return;de(i instanceof Error?i.message:String(i))}finally{s===Oe.current&&Za(null)}},[qe,Q]),xu=g.useCallback(()=>{var a;(a=Kn.current)==null||a.click()},[]),Cu=g.useCallback(async a=>{var i;const s=Array.from(a??[]).filter(l=>/\.json$/i.test(l.name));if(s.length===0){Ue("Choose a React or MindExec board JSON file."),window.setTimeout(()=>Ue(null),1800);return}try{const l=await Promise.all(s.map(async I=>({file:I,payload:JSON.parse(await I.text())}))),u=l.find(Ur),h=ty(l),k=l.find(I=>!Ur(I)&&Fr(I.payload))??l.find(I=>!Ur(I)&&xc(I.payload)>0);if(!k)throw new Error("No board JSON file was found.");const C=Fr(k.payload)?null:ay(k,h),j=C?Kr(C.metadata.LastCameraX,C.metadata.LastCameraY,C.metadata.LastCameraZ):null,S=Fr(k.payload)?ey(k.payload,k.file.name):kc(k.payload,v.current.settings,{boardId:(C==null?void 0:C.metadata.Id)??Bs(k.file.name),title:(C==null?void 0:C.metadata.Title)||Bs(k.file.name),updatedAt:C==null?void 0:C.metadata.UpdatedAt,layoutPayload:u==null?void 0:u.payload,cameraBookmarks:C==null?void 0:C.metadata.CameraBookmarks,lastCursorX:C==null?void 0:C.metadata.LastCursorX,lastCursorY:C==null?void 0:C.metadata.LastCursorY});if(S.nodes.length===0)throw new Error("The selected file did not contain any importable board nodes.");qe(S,"board.import.file",{fileName:k.file.name,layoutFileName:(u==null?void 0:u.file.name)??null,metadataFileName:(C==null?void 0:C.fileName)??null,nodes:S.nodes.length,edges:S.edges.length,sourceKind:((i=S.source)==null?void 0:i.kind)??null,originalBoardId:(C==null?void 0:C.metadata.Id)??null,cameraRestored:!!j}),Xt(S),Ge(St()),Q(j?{...j,scale:me(j.scale,Ss,ws)}:{x:540,y:210,scale:1}),Ue(`Imported "${nt(S.name)}".`),window.setTimeout(()=>Ue(null),2200)}catch(l){const u=l instanceof Error?l.message:String(l);Ue(`Import failed: ${u}`),f.emit("board.import.failed",{message:u}),window.setTimeout(()=>Ue(null),3200)}},[qe,Q]);g.useEffect(()=>{Q(oe.current,!1)},[Q]);const Ct=g.useCallback((a,s)=>{const i=oe.current,l=ga(a,s);return{x:(l.x-i.x)/i.scale,y:(l.y-i.y)/i.scale}},[ga]),Uo=g.useCallback((a,s,i={})=>{if(!Td(a))return null;const l=i.snap??v.current.settings.gridSnap??!0,u=fb(a,l);if(ze.current=u,Xa(u),r(h=>{const k=Er(h);return k&&k.x===u.x&&k.y===u.y?h:{...Wa(h,u),updatedAt:new Date().toISOString()}}),f.emit("canvas.cursor.update",{reason:s,x:Math.round(u.x),y:Math.round(u.y),snapped:l,cameraTraceMode:v.current.settings.cameraTraceMode??"none"}),i.moveCamera&&i.cameraTarget&&Td(i.cameraTarget)){const h=oe.current.scale,k=Mt();Q({...oe.current,x:k.width/2-i.cameraTarget.x*h,y:k.height/2-i.cameraTarget.y*h}),f.emit("canvas.cursor.cameraTrace",{reason:s,targetX:Math.round(i.cameraTarget.x),targetY:Math.round(i.cameraTarget.y)})}return u},[Q,Mt]),zo=g.useCallback((a,s,i)=>{const l=Ct(a,s);return!!Uo(l,i,{snap:v.current.settings.gridSnap??!0})},[Ct,Uo]),Se=g.useCallback((a,s,i={})=>{var I;const l=i.width??300,u=i.height??160,h=Number.isFinite(a)&&Number.isFinite(s);if(!h&&(i.preferCursor??!0)&&v.current.settings.cursorMode==="lastNode")return{...ze.current};const k=(I=Wt.current)==null?void 0:I.getBoundingClientRect(),C=k?k.left+k.width/2:window.innerWidth/2,j=i.centerClientY??(k?k.top+k.height/2:window.innerHeight/2),S=h?Ct(a,s):Ct(C,j);return{x:S.x-l/2,y:S.y-u/2}},[Ct]),xe=g.useCallback((a,s)=>{const i=v.current.settings.cursorDirection==="down"?"down":"right",l=i==="down"?{x:a.x,y:a.y+a.height+vd}:{x:a.x+a.width+vd,y:a.y};Uo(l,s,{cameraTarget:_r(a),moveCamera:v.current.settings.cameraTraceMode==="cursor",snap:v.current.settings.gridSnap??!0}),f.emit("canvas.cursor.moveAfterNodePlacement",{reason:s,nodeId:a.id,direction:i,nextX:Math.round(l.x),nextY:Math.round(l.y)})},[Uo]),ku=g.useCallback(a=>{Ns(a.target)||(Yt.current={clientX:a.clientX,clientY:a.clientY})},[]),O=g.useCallback((a,s,i={})=>{r(l=>{c(h=>za(h,l,{description:s,mergeKey:typeof i.mergeKey=="string"?i.mergeKey:null})),y([]);const u=a(l);return f.emit(s,i),{...u,updatedAt:new Date().toISOString()}})},[]);g.useEffect(()=>{const a=Dp();if(!a)return;const{sourceNode:s,itemNodes:i,taskNode:l,edges:u}=Op(a,{...Se(void 0,void 0,{width:780,height:290})});if(v.current.nodes.some(h=>{var k;return((k=h.metadata)==null?void 0:k.ToolHandoffId)===a.id})){Wl(a.id),f.emit("tool.handoff.duplicateIgnored",{handoffId:a.id,toolKey:a.toolKey});return}O(h=>({...h,nodes:[...h.nodes,s,...i,l],edges:[...h.edges,...u]}),"tool.handoff.consumed",{handoffId:a.id,toolKey:a.toolKey,createdNodes:2+i.length,resultItems:i.length}),Wl(a.id),b([l.id]),z(l.id),xe(l,"tool.handoff.consumed"),window.setTimeout(()=>z(h=>h===l.id?null:h),1400)},[O,Se,xe]);const fn=g.useCallback((a,s,i={})=>{r(l=>{const u=a(l);return f.emit(s,i),{...u,updatedAt:new Date().toISOString()}})},[]),qs=g.useCallback(a=>{const s=a.slice(0,90);fn(i=>({...i,name:s}),"board.rename",{boardId:v.current.id})},[fn]),ve=g.useCallback((a,s="inline")=>{const i=typeof a.appLanguage=="string"?{...a,appLanguage:hi(a.appLanguage)}:a;if(fn(l=>{const u={...l.settings,...i};if(typeof i.appLanguage=="string"){const h=yp(l.nodes,u.appLanguage);return h.changed&&f.emit("template.localization.relocalized",{appLanguage:h.language,nodeCount:h.nodes.length,source:s}),{...l,settings:u,nodes:h.nodes}}return{...l,settings:u}},"settings.patch",{keys:Object.keys(i),source:s}),typeof i.appLanguage=="string"){const l=xp(i.appLanguage);f.emit("appLanguage.select",{appLanguage:l,source:s})}if(typeof i.model=="string"){const l=Zt(i.model),u=lc(l);f.emit("textModel.select",{model:l,provider:(u==null?void 0:u.provider)??"custom",source:s})}if(typeof i.executionMode=="string"||typeof i.directInstructionQueueMode=="string"){const l={...v.current.settings,...i};$p(l,s)}Fp({...v.current.settings,...i})},[fn]),Di=g.useCallback((a,s)=>{ve({[a]:s},`inline.${String(a)}`)},[ve]),Ho=g.useMemo(()=>Ol(Cp,na.textModels),[na.textModels]),Oi=g.useMemo(()=>kp(n.settings,Ho),[n.settings,Ho]),Rt=g.useMemo(()=>{const a=wy(Ho);return{Image:$l("Image",mo("Image"),a,na.imageModels),Video:$l("Video",mo("Video"),na.videoModels)}},[na.imageModels,na.videoModels,Ho]);g.useEffect(()=>{x.current=Rt},[Rt]);const Js=g.useMemo(()=>jo(n.settings,"Image",Rt),[n.settings,Rt]),Zs=g.useMemo(()=>jo(n.settings,"Video",Rt),[n.settings,Rt]),Su=Zt(n.settings.model),wu=g.useMemo(()=>zr(Oi,"Text",n.settings),[n.settings,Oi]),vu=g.useMemo(()=>zr(mo("Image",Rt),"Image",n.settings),[n.settings,Rt]),ju=g.useMemo(()=>zr(mo("Video",Rt),"Video",n.settings),[n.settings,Rt]),Iu=g.useMemo(()=>ec(Js.aspectOptions),[Js.aspectOptions]),Nu=g.useMemo(()=>ec(Zs.aspectOptions),[Zs.aspectOptions]),Au=g.useMemo(()=>vy(),[]),Mu=g.useCallback((a,s="bottom-input")=>{const i=Zt(a);ve({model:i},`connection.model.${s}`)},[ve]),Tu=g.useCallback((a,s)=>{const i=dc(a,s),l=mo(a,x.current).find(j=>j.id===i);if(!l)return;const u=v.current.settings,h=a==="Image"?u.imageRouterImageAspectPresetId:u.imageRouterVideoAspectPresetId,k=Wr(a,l,h),C=a==="Image"?{imageRouterImageModel:l.id,imageRouterImageAspectPresetId:k.id}:{imageRouterVideoModel:l.id,imageRouterVideoAspectPresetId:k.id};ve(C,`inline.${a.toLowerCase()}Model`),f.emit("media.model.select",{mode:a,model:l.id,aspectPresetId:k.id,requestedSize:Vr(k)})},[ve]),Ru=g.useCallback((a,s)=>{const i=cc(a,v.current.settings,x.current),l=Wr(a,i,s),u=a==="Image"?{imageRouterImageAspectPresetId:l.id}:{imageRouterVideoAspectPresetId:l.id};ve(u,`inline.${a.toLowerCase()}Aspect`),f.emit("media.aspect.select",{mode:a,model:i.id,aspectPresetId:l.id,requestedSize:Vr(l)})},[ve]),Lu=g.useCallback(()=>{ce(!0),f.emit("settings.dialog.open",{boardId:v.current.id})},[]),Pu=g.useCallback(()=>{ce(!1),f.emit("settings.dialog.close",{boardId:v.current.id})},[]),$i=g.useCallback(()=>{ia(!0),f.emit("promptDebug.open",{boardId:v.current.id})},[]),Eu=g.useCallback(()=>{ia(!1),f.emit("promptDebug.close",{boardId:v.current.id})},[]);g.useEffect(()=>()=>{t==null||t([])},[t]),g.useEffect(()=>{t&&t([{id:"mindcanvas-prompt-debug",label:"Prompt Debugger",description:"Inspect prompt and local diagnostics",icon:Qp,onClick:$i,active:ht,testId:"prompt-debug-open"}])},[t,$i,ht]);const _u=g.useCallback(a=>{const s=v.current.settings.appLanguage,i=lo(a,s);if(!i)return;const l=ss(i),u=uo(i,l==null?void 0:l.id,s);Un(i.id),zn((l==null?void 0:l.id)??null),ca(co(u)),bt(null),f.emit("template.launcher.select",{launcherId:i.id,optionId:(l==null?void 0:l.id)??null,templateId:(u==null?void 0:u.id)??null})},[]),Bu=g.useCallback(()=>{const a=v.current.settings.appLanguage,s=lo(da,a)??Aa[0];if(!s)return;const i=ss(s,it),l=uo(s,i==null?void 0:i.id,a);Un(s.id),zn((i==null?void 0:i.id)??null),ca(u=>Object.keys(u).length>0?u:co(l)),bt(null),Wn(!1),lt(!1),Ut(!0),f.emit("template.launcher.open",{launcherId:s.id,optionId:(i==null?void 0:i.id)??null,templateId:(l==null?void 0:l.id)??null})},[da,it,Aa]),Du=g.useCallback(()=>{Ut(!1),bt(null),f.emit("template.launcher.close",{launcherId:da})},[da]),Ou=g.useCallback(a=>{if(!ne)return;const s=uo(ne,a,v.current.settings.appLanguage);zn(a),ca(co(s)),bt(null),f.emit("template.option.select",{launcherId:ne.id,optionId:a,templateId:(s==null?void 0:s.id)??null})},[ne]),$u=g.useCallback((a,s)=>{ca(i=>({...i,[a]:s})),Hn&&bt(null),f.emit("template.input.patch",{launcherId:ne==null?void 0:ne.id,key:a})},[ne==null?void 0:ne.id,Hn]),Je=g.useCallback(a=>{Vn(a),window.setTimeout(()=>{Vn(s=>s===a?null:s)},2600)},[]),Fu=g.useCallback(()=>{Ut(!1),lt(!1),Ta(a=>{const s=!a;return f.emit(s?"templateStudio.chooser.open":"templateStudio.chooser.close",{boardId:v.current.id,studioOpen:sn}),s})},[sn]),Fi=g.useCallback(()=>{Ta(!1),f.emit("templateStudio.chooser.close",{boardId:v.current.id})},[]),Ui=g.useCallback(()=>{const a=v.current;Ut(!1),lt(!1),Ta(!1),_o(Id(a.id,a.name)),tt(null),Wn(!0),f.emit("templateStudio.open",{boardId:a.id,nodeCount:a.nodes.length})},[]),Wo=g.useCallback(a=>{const s=v.current,i=is(we,s.nodes);tt(i),Nd(s.id,we);const l=Xt(Wa(s,ze.current));return Ge(St()),f.emit(a==="exit"?"templateStudio.draft.exitSave":"templateStudio.draft.save",{boardId:s.id,templateId:i.template.id,issues:i.issues.length,nodes:i.template.nodes.length,saved:l}),i},[we]),zi=g.useCallback(()=>{Wo("exit"),Wn(!1),Ta(!1),lt(!1),tt(null),f.emit("templateStudio.close",{boardId:v.current.id})},[Wo]),Uu=g.useCallback(()=>{const a=iy(v.current.settings),s=xs(a.name);Ta(!1),lt(!1),_o(s),tt(null),Wn(!0),Nd(a.id,s),Xt(a),Ge(St()),qe(a,"templateStudio.board.create",{templateId:s.templateId,source:"template-studio-chooser"}),Q({x:540,y:210,scale:1}),f.emit("templateStudio.chooser.startNew",{boardId:a.id,templateId:s.templateId}),Je("New Template Studio draft board opened.")},[qe,Q,Je]),zu=g.useCallback(()=>{Ui(),f.emit("templateStudio.chooser.convertCurrent",{boardId:v.current.id,nodes:v.current.nodes.length}),Je("Current board is now in Template Studio mode.")},[Ui,Je]),Vo=g.useCallback((a,s)=>{_o(i=>{const l={...i,[a]:a==="templateId"?xo(s):s};return f.emit("templateStudio.draft.patch",{key:a}),l}),tt(null)},[]),Hu=g.useCallback(()=>{const a=Wo("save");Je(a.issues.length>0?"Template draft saved with manifest issues.":"Template draft and board saved locally.")},[Wo,Je]),Wu=g.useCallback(a=>{const s=J("node"),i=Fl(a),l=`${a.replace("template.","")}-${Date.now().toString(36)}`,u=a==="template.input",h=u?300:a==="template.prompt"?360:340,k=u?178:a==="template.prompt"?214:190,C=Se(void 0,void 0,{width:h,height:k}),j={[Y.studioNodeType]:a,[Y.templateNodeId]:l,[Y.templateRole]:a.replace(/^template\./,""),[Y.compileTarget]:i,Source:"template-studio"};u&&(j[Y.inputKey]=l,j[Y.inputType]="text",j[Y.inputRequired]="true");const S={id:s,kind:a==="template.prompt"?"ai-task":a==="template.section"?"markdown":"note",title:br(a),body:u?"Defines a value requested before template board creation.":a==="template.prompt"?"Write the prompt instruction. Use {{input_key}} placeholders for Template Studio inputs.":"Write the reusable canvas content for this template node.",x:C.x,y:C.y,width:h,height:k,status:a==="template.prompt"?"idle":void 0,tags:["Template Studio",br(a)],metadata:j};O(I=>({...I,nodes:[...I.nodes,S]}),"templateStudio.node.add",{id:S.id,studioNodeType:a,compileTarget:i}),b([S.id]),tt(null),xe(S,"templateStudio.node.add")},[O,Se,xe]),Qs=g.useCallback(()=>{const a=is(we,v.current.nodes);return tt(a),f.emit("templateStudio.compile",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length,issues:a.issues.length}),Je(a.issues.length>0?"Template manifest has issues.":"Template manifest compiled."),a},[Je,we]),Vu=g.useCallback(async()=>{const a=ge??is(we,v.current.nodes);ge||tt(a);const s=await Co(a.manifestJson);f.emit("templateStudio.manifest.copy",{templateId:a.template.id,chars:a.manifestJson.length,method:s}),Je("Template manifest copied.")},[Je,we,ge]),Yu=g.useCallback(()=>{const a=Qs();if(a.issues.length>0){lt(!1),f.emit("templateStudio.test.open.blocked",{templateId:a.template.id,issues:a.issues.length}),Je("Fix manifest issues before test create.");return}Ra(co(a.template)),ua(null),lt(!0),f.emit("templateStudio.test.open",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length})},[Qs,Je]),Gu=g.useCallback(()=>{lt(!1),Ra({}),ua(null),f.emit("templateStudio.test.close",{templateId:(ge==null?void 0:ge.template.id)??null})},[ge==null?void 0:ge.template.id]),Ku=g.useCallback((a,s)=>{Ra(i=>({...i,[a]:s})),rn&&ua(null),f.emit("templateStudio.test.input.patch",{key:a})},[rn]),Xu=g.useCallback(()=>{const a=(ge==null?void 0:ge.issues.length)===0?ge:is(we,v.current.nodes);if(tt(a),a.issues.length>0){ua("Fix manifest issues before creating a test board."),f.emit("templateStudio.test.board.blocked",{templateId:a.template.id,issues:a.issues.length});return}const s=rs(a.template,Ht);if(s){ua(s),f.emit("templateStudio.test.board.blocked",{templateId:a.template.id,message:s});return}const i=Ad(we),l=Sp(i,void 0,a.template,Ht,v.current.settings);Xt(l.board),Xt(Wa(v.current,ze.current)),Ge(St()),lt(!1),Ra({}),Je(`Created test board: ${l.board.name}`),f.emit("templateStudio.test.board.create",{templateId:a.template.id,boardId:l.board.id,nodes:l.board.nodes.length})},[Je,we,ge,Ht]),qu=g.useCallback((a,s)=>{b(i=>s?i.includes(a)?i.filter(l=>l!==a):[...i,a]:[a]),ae(null)},[]),Ju=g.useCallback(()=>{var u,h,k,C,j,S,I,L;const i=Se(void 0,void 0,{width:500,height:300,centerClientY:me(window.innerHeight*.58,182,Math.max(182,window.innerHeight-150-96))}),l={id:J("node"),kind:"memo",title:"Agent",body:ob,x:i.x,y:i.y,width:500,height:300,tags:["Agent Command","Researcher","Draft"],metadata:my()};O(E=>({...E,nodes:[...E.nodes,l]}),"agentCommand.node.add",{id:l.id,semanticType:(u=l.metadata)==null?void 0:u.SemanticType,status:(h=l.metadata)==null?void 0:h.AgentCommandStatus,requestedRole:(k=l.metadata)==null?void 0:k.AgentCommandRequestedRole,adapterState:(C=l.metadata)==null?void 0:C.AdapterState}),f.emit("mindcanvas.agentCommand.add",{id:l.id,semanticType:(j=l.metadata)==null?void 0:j.SemanticType,status:(S=l.metadata)==null?void 0:S.AgentCommandStatus,requestedRole:(I=l.metadata)==null?void 0:I.AgentCommandRequestedRole,adapterState:(L=l.metadata)==null?void 0:L.AdapterState}),b([l.id]),ae(null),z(l.id),xe(l,"agentCommand.node.add"),window.setTimeout(()=>z(E=>E===l.id?null:E),1200)},[O,Se,xe]),Zu=g.useCallback(()=>{var u,h,k,C,j,S,I,L;const i=Se(void 0,void 0,{width:400,height:300,centerClientY:me(window.innerHeight*.56,182,Math.max(182,window.innerHeight-150-96))}),l={id:J("node"),kind:"memo",title:"Code Note",body:nb,x:i.x,y:i.y,width:400,height:300,tags:["Code Note","Draft","Unlinked"],metadata:py()};O(E=>({...E,nodes:[...E.nodes,l]}),"codeNote.node.add",{id:l.id,semanticType:(u=l.metadata)==null?void 0:u.SemanticType,status:(h=l.metadata)==null?void 0:h.CodeNoteStatus,syncState:(k=l.metadata)==null?void 0:k.CodeNoteSyncState,adapterState:(C=l.metadata)==null?void 0:C.AdapterState}),f.emit("mindcanvas.codeNote.add",{id:l.id,semanticType:(j=l.metadata)==null?void 0:j.SemanticType,status:(S=l.metadata)==null?void 0:S.CodeNoteStatus,syncState:(I=l.metadata)==null?void 0:I.CodeNoteSyncState,adapterState:(L=l.metadata)==null?void 0:L.AdapterState}),b([l.id]),ae(null),z(l.id),xe(l,"codeNote.node.add"),window.setTimeout(()=>z(E=>E===l.id?null:E),1200)},[O,Se,xe]),Ce=g.useCallback((a,s)=>{var I,L,E,T,M,R,X,je,he;if(a==="remote-monitor"){const q=v.current.nodes.find(Va);if(q){const yn=_r(q),Fa=oe.current.scale,ns=Mt(),os=Pd(q.height,window.innerHeight);Q({...oe.current,x:ns.width/2-yn.x*Fa,y:os-yn.y*Fa}),b([q.id]),z(q.id),window.setTimeout(()=>z(ba=>ba===q.id?null:ba),1e3);const ro="Remote monitor already exists on this board. Focused existing node.";Ue(ro),window.setTimeout(()=>{Ue(ba=>ba===ro?null:ba)},2200),f.emit("remoteMonitor.node.duplicateIgnored",{action:"toolbar-add",nodeId:q.id,surface:"mindcanvas-node"});return}}const i=s?Ai[s]:null,l=(i==null?void 0:i.mode)??(a==="image"?"Image":a==="video"?"Video":null),u=l?jo(v.current.settings,l):null,h=i?i.width:a==="remote-monitor"?860:a==="remote-control"?560:a==="csv-table"?720:a==="embed"?460:a==="markdown"?400:a==="image"||a==="mask"?360:a==="ai-task"?340:a==="pdf"||a==="file"||a==="directory"?300:320,k=i?i.height:a==="remote-monitor"?640:a==="remote-control"?390:a==="csv-table"?420:a==="embed"||a==="markdown"||a==="image"||a==="mask"?260:a==="ai-task"?196:a==="pdf"||a==="file"||a==="directory"?154:176,C=a==="remote-monitor"?Pd(k,window.innerHeight):window.innerHeight/2,j=Se(void 0,void 0,{width:h,height:k,centerClientY:C}),S={id:J("node"),kind:a,title:i?i.title:a==="ai-task"?"AI Task":a==="remote-monitor"?"Multi Desktop Monitor":a==="remote-control"?"Remote Device":a==="image"?"Image":a==="mask"?"Image Mask":a==="video"?"Video":a==="embed"?"Web Embed":a==="csv-table"?"CSV Table":a==="pdf"?"PDF Document":a==="file"?"File":a==="directory"?"Directory":a==="memo"?"Memo":a==="markdown"?"Markdown":a==="code"?"Code Note":"Note",body:i?i.body:a==="ai-task"?"Describe the work this task should perform.":a==="remote-monitor"?"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":a==="remote-control"?"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":a==="image"?"Describe the image to generate or attach the visual reference here.":a==="mask"?"Image edit mask reference. Attach or paste a mask image here.":a==="video"?"Describe the video shot, motion, and duration target here.":a==="embed"?"https://example.com/":a==="csv-table"?`Metric,Value,Stage
43
+ Leads,42,Validation
44
+ Trials,7,Launch
45
+ Revenue,120,Learning`:a==="pdf"?"https://example.com/document.pdf":a==="file"?"https://example.com/file":a==="directory"?"LocalBridge directory reference. Include and exclude patterns are stored with this node.":a==="memo"?"Capture a quick thought, reminder, or visual note here.":a==="markdown"?`# Markdown note
46
+
47
+ Write structured notes, docs, or prompt context here.`:"Write the thought, evidence, or reusable context here.",x:j.x,y:j.y,width:h,height:k,status:a==="ai-task"?"idle":void 0,tags:i?["AI Task",i.tag,"Spec only"]:a==="ai-task"?["AI Task"]:a==="remote-monitor"?["Remote","Monitor","LocalBridge"]:a==="remote-control"?["Remote","Control","LocalBridge"]:a==="mask"?["Mask","ImageRouter"]:a==="csv-table"?["CSV","Table"]:a==="embed"?["Embed","Web"]:a==="memo"?["Memo"]:a==="markdown"?["Markdown"]:a==="text"?["Text"]:[a],imageUrl:a==="image"||a==="mask"?"/assets/mindexecution-mindcanvas.png":void 0,assetUrl:a==="embed"?"https://example.com/":a==="pdf"?"https://example.com/document.pdf":a==="file"?"https://example.com/file":void 0,sourceFilePath:a==="directory"?si:void 0,metadata:i?cy(v.current.settings,i.kind):a==="csv-table"?{CsvRowCount:"3",CsvColumnCount:"3",Source:"toolbar"}:a==="memo"?{memoColor:"coral"}:a==="mask"?{ImageRouterMask:"true",SemanticType:"ImageEditMask",AdapterState:"adapter-gated",Source:"toolbar"}:a==="directory"?{Include:".cs,.js,.razor,.css,.html,.json",Exclude:"bin,obj,.git,node_modules,.vs"}:a==="remote-monitor"?{SemanticType:"RemoteFleetMonitor",RemoteFleetSchemaVersion:"remote-fleet@1",RemoteFleetNodeRole:"fleet-monitor",RemoteFleetSurface:"mindcanvas-node",RemoteFleetPrimaryRoute:"/mindcanvas",RemoteFleetViewMode:"all-devices",RemoteFleetHubStatus:"gated",RemoteFleetHubEndpoint:"127.0.0.1:5197",RemoteFleetManagerPackage:"@mindexec/cli",RemoteFleetManagerVersion:"",RemoteFleetAgentPackage:"@mindexec/remote",RemoteFleetPairTokenPreview:"<pair-token>",RemoteFleetConnectCommand:"npx @mindexec/remote connect --manager 127.0.0.1:5197 --pair <pair-token>",RemoteFleetDeviceCount:"30",RemoteFleetConnectedDeviceCount:"0",RemoteFleetCanvasPagination:"node-window:1/1",RemoteFleetHostTargetState:"inactive",RemoteFleetLastError:"Hosted LocalBridge access is gated.",RemoteHub:"Gated",RemoteRoute:"Gated",RemoteConnected:"0",RemoteTotal:"30",RemotePage:"1/1",RemotePageStart:"0",RemoteVisibleBudget:"30",RemoteSelectedDeviceId:"",RemoteInput:"Off",RemoteTasksQueued:"0",RemoteAiDevices:"0",RemoteBaseUrl:"http://127.0.0.1:5147",AdapterState:"adapter-gated"}:a==="remote-control"?{SemanticType:"RemoteFleetDevice",RemoteFleetSchemaVersion:"remote-fleet-device@1",RemoteFleetDeviceId:"",RemoteFleetDeviceName:"Remote Device",RemoteFleetDevicePlatform:"unknown",RemoteFleetDeviceConnected:"false",RemoteInput:"Off",RemoteBaseUrl:"http://127.0.0.1:5147",AdapterState:"adapter-gated"}:a==="embed"?{source:"embed",embedType:"webpage",provider:"web",renderMode:"card",aspectRatio:"auto",sourceUrl:"https://example.com/",url:"https://example.com/",iframeAllowed:"false",iframeBlockedReason:"react-card-shell",captureStatus:"idle",captureProvider:"cloudflare-browser-run",AdapterState:"local-reference"}:l?Li(v.current.settings,l):void 0};O(q=>({...q,nodes:[...q.nodes,S]}),"node.add",{id:S.id,kind:a,automationKind:i==null?void 0:i.kind,...u?{mode:u.mode,model:u.model.id,aspectPresetId:u.aspect.id,requestedSize:u.requestedSize}:{}}),i&&f.emit("automation.mediaNode.add",{id:S.id,kind:i.kind,mode:i.mode,model:(I=S.metadata)==null?void 0:I.MediaModel,aspectPresetId:(L=S.metadata)==null?void 0:L.AspectPresetId,requestedSize:(E=S.metadata)==null?void 0:E.RequestedSize,adapterState:((T=S.metadata)==null?void 0:T.AdapterState)??"adapter-gated",externalActionPolicy:((M=S.metadata)==null?void 0:M.AutomationExternalActionPolicy)??"spec-only-until-review"}),a==="remote-monitor"&&f.emit("remoteMonitor.node.add",{id:S.id,surface:"mindcanvas-node",width:S.width,height:S.height,adapterState:((R=S.metadata)==null?void 0:R.AdapterState)??"adapter-gated"}),a==="mask"&&f.emit("node.mask.add",{id:S.id,hasImage:!!S.imageUrl,imageRouterMask:((X=S.metadata)==null?void 0:X.ImageRouterMask)??"true",semanticType:((je=S.metadata)==null?void 0:je.SemanticType)??"ImageEditMask",adapterState:((he=S.metadata)==null?void 0:he.AdapterState)??"adapter-gated"}),b([S.id]),xe(S,"node.add")},[Q,O,Se,xe]),te=g.useCallback((a,s)=>{fn(i=>({...i,nodes:i.nodes.map(l=>l.id===a?{...l,...s}:l)}),"node.patch",{id:a,keys:Object.keys(s)})},[fn]),Kt=g.useCallback((a,s)=>{const i=K.current[0],l=v.current.nodes.find(u=>u.id===i);l&&(te(i,{metadata:{...l.metadata??{},[a]:a===Y.templateNodeId||a===Y.inputKey?xo(s):s}}),tt(null),f.emit("templateStudio.node.metadata.patch",{id:i,key:a}))},[te]),Hi=g.useCallback(a=>{var h;const s=K.current[0],i=v.current.nodes.find(k=>k.id===s);if(!i)return;const l=((h=i.metadata)==null?void 0:h[Y.templateNodeId])||xo(i.title),u={...i.metadata??{},[Y.studioNodeType]:a,[Y.templateNodeId]:l,[Y.templateRole]:a.replace(/^template\./,""),[Y.compileTarget]:Fl(a,i)};a==="template.input"&&(u[Y.inputKey]=u[Y.inputKey]||xo(i.title),u[Y.inputType]=u[Y.inputType]||"text",u[Y.inputRequired]=u[Y.inputRequired]||"true"),te(s,{metadata:u}),tt(null),f.emit("templateStudio.node.role.assign",{id:s,studioNodeType:a})},[te]),A=g.useCallback(a=>{Ue(a),window.setTimeout(()=>{Ue(s=>s===a?null:s)},2200)},[]),Qu=g.useCallback((a,s,i)=>{var S;const l=v.current.nodes.find(I=>I.id===a);if(!l)return;const u=ic(l.body),h=wp(l,s,i,v.current.settings);if(!h||h.nodes.length===0){A("Template card could not generate nodes."),f.emit("templateCard.generate.blocked",{nodeId:a,optionId:s});return}O(I=>({...I,nodes:[...I.nodes,...h.nodes]}),"templateCard.generate",{nodeId:a,launcherId:h.launcher.id,optionId:((S=h.option)==null?void 0:S.id)??null,templateId:h.template.id,runId:h.runId,generatedCount:h.nodes.length});const k=h.nodes.map(I=>I.id);b(k),z(k[0]??null);const C=h.nodes[h.nodes.length-1];C&&xe(C,"templateCard.generate"),window.setTimeout(()=>z(I=>I===k[0]?null:I),1200);const j=u!=null&&u.generatedMessageFormat?u.generatedMessageFormat.replace("{0}",String(h.nodes.length)):`${h.nodes.length} template node${h.nodes.length===1?"":"s"} generated below the card.`;A(j)},[O,xe,A]),em=g.useCallback(a=>{const s=v.current.nodes.find(I=>I.id===a.sourceNodeId),i=560,l=390,u=Se(void 0,void 0,{width:i,height:l}),h=J("node"),k=s?s.x+s.width+hs:u.x,C=s?s.y:u.y,j={SemanticType:"RemoteFleetDevice",RemoteFleetSchemaVersion:"remote-fleet-device@1",RemoteFleetSourceMonitorNodeId:a.sourceNodeId,RemoteFleetDeviceId:a.deviceId,RemoteFleetDeviceName:a.deviceName,RemoteFleetDevicePlatform:a.platform||"unknown",RemoteFleetDeviceConnected:String(a.connected===!0),RemoteFleetDeviceCanControl:String(a.connected===!0),RemoteFleetDeviceCanDispatchTask:String(a.connected===!0),RemoteInput:"Off",RemoteHub:a.connected?"Online":"Preview",RemoteRoute:a.baseUrl?"Local":"Preview",RemoteBaseUrl:a.baseUrl||"http://127.0.0.1:5147",AdapterState:a.baseUrl?"localbridge-connected":"adapter-gated"};a.framePath&&(j.RemoteFleetLatestFramePath=a.framePath),a.frameUrl&&(j.RemoteFleetLatestFrameUrl=a.frameUrl),a.dataUrl&&(j.RemoteFleetLatestFrameDataUrl=a.dataUrl),a.frameSeq&&(j.RemoteFleetLatestFrameSeq=String(a.frameSeq));const S={id:h,kind:"remote-control",title:a.deviceName||"Remote Device",body:`Remote device control: ${a.deviceId}`,x:k,y:C,width:i,height:l,tags:["Remote","Control","LocalBridge"],metadata:j};O(I=>({...I,nodes:[...I.nodes,S]}),"remoteControl.node.add",{id:S.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId}),b([S.id]),xe(S,"remoteControl.node.add"),A(`Remote control node created for ${a.deviceName||a.deviceId}.`),f.emit("remoteControl.node.add",{nodeId:S.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId,connected:a.connected===!0})},[O,Se,xe,Mt,A]),Ba=g.useCallback(a=>{const s=bs(oe.current)??{...Ha};ve({cameraBookmarks:{...v.current.settings.cameraBookmarks??{},[a]:s}},"camera.bookmark.save"),f.emit("camera.bookmark.save",{slot:a,...s}),A(`Camera slot ${a} saved.`)},[ve,A]),Qn=g.useCallback(a=>{var l;const s=bs((l=v.current.settings.cameraBookmarks)==null?void 0:l[a]),i=s??{...Ha};Q(i),f.emit("camera.bookmark.goto",{slot:a,saved:!!s,...i}),A(s?`Camera slot ${a}.`:`Camera slot ${a} empty. Home view.`)},[Q,A]),er=g.useCallback(()=>{Q({...Ha}),f.emit("camera.bookmark.goto",{slot:"home",saved:!1,...Ha}),A("Home view.")},[Q,A]),Wi=g.useCallback(a=>{const s=oe.current,i=Yf,l={...s,x:a==="left"?s.x+i:a==="right"?s.x-i:s.x,y:a==="up"?s.y+i:a==="down"?s.y-i:s.y};Q(l),f.emit("camera.keyboard.pan",{direction:a,...l})},[Q]),Vi=g.useCallback(()=>{const a=Gn.current;return a?(a.focus(),a.select(),f.emit("globalInput.focus",{source:"keyboard"}),!0):!1},[]),tr=g.useCallback((a="keyboard")=>{const s=!(v.current.settings.wheelMode??!1);ve({wheelMode:s},`${a}.wheelMode.toggle`),f.emit("canvas.wheelMode.toggle",{source:a,wheelMode:s}),A(s?"Mouse wheel mode.":"Trackpad pan mode.")},[ve,A]),ar=g.useCallback((a="keyboard")=>{const i=(v.current.settings.cursorDirection==="down"?"down":"right")==="down"?"right":"down";ve({cursorDirection:i},`${a}.cursorDirection.toggle`),f.emit("canvas.cursorDirection.toggle",{source:a,cursorDirection:i}),A(i==="down"?"Cursor direction down.":"Cursor direction right.")},[ve,A]),Yo=g.useCallback(async(a,s="api")=>{const i=a===!0;try{if(i){if(document.fullscreenElement)return ha(!0),f.emit("canvas.fullscreen.toggle",{source:s,active:!0,fallback:!1}),!0;if(document.documentElement.requestFullscreen){await document.documentElement.requestFullscreen();const l=!!document.fullscreenElement;return ha(l),f.emit("canvas.fullscreen.toggle",{source:s,active:l,fallback:!1}),l}return ha(!0),f.emit("canvas.fullscreen.toggle",{source:s,active:!0,fallback:!0}),!0}return document.fullscreenElement&&document.exitFullscreen&&await document.exitFullscreen(),ha(!1),f.emit("canvas.fullscreen.toggle",{source:s,active:!1,fallback:!1}),!1}catch(l){return ha(i),f.emit("canvas.fullscreen.toggle.failed",{source:s,active:i,fallback:!0,error:l instanceof Error?l.message:String(l)}),f.emit("canvas.fullscreen.toggle",{source:s,active:i,fallback:!0}),A(i?"Read mode fallback.":"Read mode off."),i}},[ha,A]),eo=g.useCallback((a="keyboard")=>Yo(!hn.current,a),[Yo]);g.useEffect(()=>{const a=window,s={getMindCanvasFullscreenState:a.getMindCanvasFullscreenState,setMindCanvasFullscreen:a.setMindCanvasFullscreen,getMindCanvasReadModeState:a.getMindCanvasReadModeState,setMindCanvasReadMode:a.setMindCanvasReadMode,toggleMindCanvasReadMode:a.toggleMindCanvasReadMode},i=()=>hn.current,l=h=>Yo(h,"api"),u=()=>eo("api");return a.getMindCanvasFullscreenState=i,a.setMindCanvasFullscreen=l,a.getMindCanvasReadModeState=i,a.setMindCanvasReadMode=l,a.toggleMindCanvasReadMode=u,Po(!0),f.emit("canvas.readMode.api.bound"),()=>{Po(!1),s.getMindCanvasFullscreenState?a.getMindCanvasFullscreenState=s.getMindCanvasFullscreenState:delete a.getMindCanvasFullscreenState,s.setMindCanvasFullscreen?a.setMindCanvasFullscreen=s.setMindCanvasFullscreen:delete a.setMindCanvasFullscreen,s.getMindCanvasReadModeState?a.getMindCanvasReadModeState=s.getMindCanvasReadModeState:delete a.getMindCanvasReadModeState,s.setMindCanvasReadMode?a.setMindCanvasReadMode=s.setMindCanvasReadMode:delete a.setMindCanvasReadMode,s.toggleMindCanvasReadMode?a.toggleMindCanvasReadMode=s.toggleMindCanvasReadMode:delete a.toggleMindCanvasReadMode,f.emit("canvas.readMode.api.unbound")}},[Yo,eo]);const tm=g.useCallback(()=>{const a=v.current.settings.cameraBookmarks??{},s=Rr.find(i=>!a[i])??Rr[0];Ba(s)},[Ba]),am=g.useCallback(a=>{Dr(v.current.settings.gridType)!==a&&ve({gridType:a},`canvas.gridMode.${a}`)},[ve]),nm=g.useCallback(()=>{ve({gridSnap:!(v.current.settings.gridSnap??!0)},"canvas.gridSnap.toggle")},[ve]),om=g.useCallback(a=>{const s=v.current.nodes.find(i=>i.id===a);!s||s.kind!=="directory"||(la(a),f.emit("node.directorySettings.open",{id:a}))},[]),sm=g.useCallback(()=>{la(a=>(a&&f.emit("node.directorySettings.close",{id:a}),null))},[]),rm=g.useCallback((a,s)=>{const i=v.current.nodes.find(h=>h.id===a);if(!i||i.kind!=="directory")return;const l=Ln(s.DirectoryPath),u={...i.metadata??{},DirectoryPath:l,Include:s.Include??"",Exclude:s.Exclude??""};te(a,{sourceFilePath:l||si,metadata:u}),la(null),f.emit("node.directorySettings.patch",{id:a,keys:["DirectoryPath","Include","Exclude"]}),A("Folder scan settings saved.")},[te,A]),im=g.useCallback(async a=>{const s=v.current.nodes.find(u=>u.id===a);if(!s||s.kind!=="directory")return;const i=lb(s);if(f.emit("node.directory.scan.requested",{id:a,hasBridgePath:!!i,hasHandle:Fn.current.has(a)}),i){if(!at()){pe("blocked"),f.emit("node.directory.scan.bridge.blocked",{id:a,reason:"hosted-access-off"}),A("Hosted LocalBridge access is off.");return}try{const u=await qt();if(We(u.status??null),pe(u.state),u.state!=="connected"){f.emit("node.directory.scan.bridge.unavailable",{id:a,message:u.message||"LocalBridge is unavailable."}),A(u.message||"LocalBridge is unavailable.");return}const h=Ua(u.status);if(!h){pe("unavailable"),f.emit("node.directory.scan.bridge.failed",{id:a,reason:"missing-token"}),A("LocalBridge read token is unavailable.");return}const k=ys(i,48);A(`Scanning ${k}...`),f.emit("node.directory.scan.bridge.requested",{id:a,path:i});const C=await cb(i,s.metadata,h,u.baseUrl),j=new Date().toISOString();te(a,{title:s.title==="Directory"||s.title==="New Folder"?k:s.title,body:Md(k,C),sourceFilePath:i,metadata:{...s.metadata??{},DirectoryPath:i,DirectoryName:k,DirectoryScanSource:"localbridge",DirectoryFileCount:String(C.fileCount),DirectoryDirCount:String(C.directoryCount),DirectoryLastScanUtc:j,DirectoryScanTruncated:String(C.truncated),DirectoryPreview:JSON.stringify(C.preview.slice(0,Rn))}}),f.emit("node.directory.scan.bridge.completed",{id:a,path:i,fileCount:C.fileCount,directoryCount:C.directoryCount,truncated:C.truncated}),f.emit("node.directory.scan.completed",{id:a,source:"localbridge",directoryName:k,fileCount:C.fileCount,directoryCount:C.directoryCount,truncated:C.truncated}),A(`Scanned ${k}: ${C.fileCount} files, ${C.directoryCount} folders.`)}catch(u){const h=u instanceof Error?u.message:String(u);f.emit("node.directory.scan.bridge.failed",{id:a,message:h}),f.emit("node.directory.scan.failed",{id:a,source:"localbridge",message:h}),A("LocalBridge folder scan failed.")}return}const l=window;if(!l.showDirectoryPicker){f.emit("node.directory.scan.unsupported",{id:a}),A("Folder scan needs a Chromium browser with File System Access enabled.");return}try{let u=Fn.current.get(a);u||(u=await l.showDirectoryPicker(),Fn.current.set(a,u));const h={mode:"read"},k=u.queryPermission?await u.queryPermission(h):"granted";if((k==="granted"||!u.requestPermission?k:await u.requestPermission(h))!=="granted"){f.emit("node.directory.scan.denied",{id:a,directoryName:u.name}),A("Folder permission was not granted.");return}A(`Scanning ${u.name}...`);const j=await rb(u,s.metadata),S=new Date().toISOString();te(a,{title:s.title==="Directory"||s.title==="New Folder"?u.name:s.title,body:Md(u.name,j),sourceFilePath:u.name,metadata:{...s.metadata??{},DirectoryName:u.name,DirectoryScanSource:"browser-picker",DirectoryFileCount:String(j.fileCount),DirectoryDirCount:String(j.directoryCount),DirectoryLastScanUtc:S,DirectoryScanTruncated:String(j.truncated),DirectoryPreview:JSON.stringify(j.preview.slice(0,Rn))}}),f.emit("node.directory.scan.completed",{id:a,source:"browser-picker",directoryName:u.name,fileCount:j.fileCount,directoryCount:j.directoryCount,truncated:j.truncated}),A(`Scanned ${u.name}: ${j.fileCount} files, ${j.directoryCount} folders.`)}catch(u){if((u&&typeof u=="object"&&"name"in u?String(u.name):"")==="AbortError"){f.emit("node.directory.scan.cancelled",{id:a}),A("Folder scan cancelled.");return}f.emit("node.directory.scan.failed",{id:a,message:u instanceof Error?u.message:String(u)}),A("Folder scan failed in this browser context.")}},[te,A]),Yi=g.useCallback(a=>{$n(a.id),nn(nt(a.name))},[]),nr=g.useCallback(()=>{$n(null),nn("")},[]),or=g.useCallback(a=>{const s=nt(va).slice(0,90);a===v.current.id?(qs(s),A("Board renamed.")):ap(a,s)?(Ge(St()),A("Saved board renamed.")):(f.emit("board.rename.failed",{boardId:a,scope:"stored"}),A("Board rename failed.")),$n(null),nn("")},[qs,A,va]),lm=g.useCallback((a,s)=>{s.key==="Enter"?(s.preventDefault(),or(a)):s.key==="Escape"&&(s.preventDefault(),nr())},[nr,or]),dm=g.useCallback(a=>{const s=v.current.nodes.find(l=>l.id===a);if(!bo(s))return;const i=s.aiEnabled===!1;te(a,{aiEnabled:i}),f.emit("node.aiReference.toggled",{id:a,enabled:i}),A(i?"AI reference enabled.":"AI reference disabled.")},[te,A]),Go=g.useCallback(async(a,s,i,l,u)=>{pa.current=a;try{const h=await Co(a);return xt.current=0,f.emit(s,{...i,ok:!0,method:h}),A(l),h}catch(h){return xt.current=Date.now()+15e3,f.emit(s,{...i,ok:!0,method:"react-local",clipboardUnavailable:!0,message:h instanceof Error?h.message:String(h)}),A(u),"react-local"}},[A]),cm=g.useCallback(async a=>{const s=v.current.nodes.find(l=>l.id===a);if(!s)return;const i=vb(s);if(i)try{const l=await jb(i);f.emit("node.copyImage",{id:a,ok:!0,mode:l,urlKind:i.split(":",1)[0]||"relative"}),A(l==="image"?"Image copied to clipboard.":"Image reference copied.");return}catch(l){pa.current=i,xt.current=Date.now()+15e3,f.emit("node.copyImage",{id:a,ok:!0,mode:"react-local",urlKind:i.split(":",1)[0]||"relative",clipboardUnavailable:!0,message:l instanceof Error?l.message:String(l)}),A("Image reference copied inside this canvas.");return}await Go(wb(s),"node.copy",{id:a},"Node content copied.","Node content copied inside this canvas.")},[Go,A]),um=g.useCallback(async(a,s)=>{await Go(s,"node.embed.copyUrl",{id:a,sourceKind:s.split(":",1)[0]||"relative"},"Embed URL copied.","Embed URL copied inside this canvas.")},[Go]),mm=g.useCallback(a=>{const s=v.current.nodes.find(l=>l.id===a);if(!bo(s))return;const i=Br(s);te(a,{height:i}),f.emit("node.fitHeight",{id:a,height:i}),A("Node height fitted to text.")},[te,A]),pm=g.useCallback(a=>{const s=v.current.nodes.find(k=>k.id===a);if(!bo(s))return;const i=Cb(s),l=i?Math.max(120,Math.round(s.originalHeight||Br(s))):Math.max(120,Math.min(s.height,Jf)),u=i?0:Math.round(s.height),h=i;O(k=>({...k,nodes:k.nodes.map(C=>C.id===a?{...C,height:l,isExpanded:h,originalHeight:u}:C)}),"node.expandCollapse",{id:a,expanded:h,height:l,originalHeight:u}),A(h?"Node expanded.":"Node collapsed.")},[O,A]),gm=g.useCallback(a=>{const s=v.current.nodes.find(l=>l.id===a);if(!s||s.kind!=="code")return;const i=s.wordWrap===!1;te(a,{wordWrap:i}),f.emit("node.wordWrap.toggled",{id:a,enabled:i}),A(i?"Word wrap enabled.":"Word wrap disabled.")},[te,A]),hm=g.useCallback((a,s)=>{const i=v.current.nodes.find(h=>h.id===a);if(!bo(i))return;const l=bb(s.executionMode),u=Array.from(new Set([...i.tags??[],"Company root",l,s.enableSubAgents?"sub-agents":"single-agent","adapter-gated"]));te(a,{companyMode:"candidate",role:"Company root",tags:u,metadata:{...i.metadata??{},CompanyExecutionMode:s.executionMode,CompanyExecutionModeLabel:l,CompanySubAgents:String(s.enableSubAgents),CompanyStatus:"Staged",CompanyRootTitle:i.title,CompanyLastMessage:"Company staged locally. External CompanyCore execution requires an adapter.",CompanyStagedAt:new Date().toISOString()}}),f.emit("node.company.staged",{id:a,executionMode:s.executionMode,enableSubAgents:s.enableSubAgents}),A(`Company root staged locally as ${l}. Open CompanyCore to run it with an adapter later.`)},[te,A]),fm=g.useCallback(a=>{var i;const s=v.current.nodes.find(l=>l.id===a);if(!(s!=null&&s.companyMode)){A("Stage this node as a Company root first.");return}$t(a),f.emit("companyGraph.open",{id:a,status:((i=s.metadata)==null?void 0:i.CompanyStatus)??"Staged"})},[A]),bm=g.useCallback(a=>{const s=v.current.nodes.find(i=>i.id===a);s!=null&&s.companyMode&&(te(a,{metadata:{...s.metadata??{},CompanyRootTitle:s.title,CompanyGoalSnapshot:s.body.slice(0,4e3),CompanyLastMessage:"Company goal synced from this note locally. External execution remains adapter-gated.",CompanyUpdatedAt:new Date().toISOString()}}),f.emit("node.company.goalSynced",{id:a,titleLength:s.title.length,bodyLength:s.body.length}),A("Company goal synced from this note locally."))},[te,A]),ym=g.useCallback(a=>{var l;const s=v.current.nodes.find(u=>u.id===a);if(!(s!=null&&s.companyMode))return;const i=((l=s.metadata)==null?void 0:l.CompanyStatus)||"Staged";te(a,{metadata:{...s.metadata??{},CompanyStatus:i,CompanyLastMessage:`Company status refreshed locally as ${i.toLowerCase()}. Adapter execution remains gated.`,CompanyRefreshedAt:new Date().toISOString()}}),f.emit("node.company.refreshed",{id:a,status:i}),A(`Company status refreshed locally: ${i}.`)},[te,A]),xm=g.useCallback(()=>{$t(a=>(a&&f.emit("companyGraph.close",{id:a}),null))},[]),Gi=g.useCallback((a,s)=>{const i=v.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(te(a,{metadata:{...i.metadata??{},CompanyStatus:s,CompanyLastMessage:`Company marked ${s.toLowerCase()} locally. External execution remains adapter-gated.`,CompanyUpdatedAt:new Date().toISOString()}}),f.emit("companyGraph.status",{id:a,status:s}),A(`Company marked ${s.toLowerCase()} locally.`))},[te,A]),Ki=g.useCallback(a=>{var l;const s=v.current.nodes.find(u=>u.id===a);if(!(s!=null&&s.companyMode))return;const i=new Set(["Company root","adapter-gated","sub-agents","single-agent",((l=s.metadata)==null?void 0:l.CompanyExecutionModeLabel)??""]);te(a,{companyMode:void 0,role:void 0,tags:(s.tags??[]).filter(u=>!i.has(u)),metadata:{...s.metadata??{},CompanyStatus:"Removed",CompanyLastMessage:"Company staging removed locally.",CompanyRemovedAt:new Date().toISOString()}}),$t(null),f.emit("companyGraph.remove",{id:a}),A("Company staging removed from this node.")},[te,A]),Cm=g.useCallback((a,s)=>{const i=v.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(te(a,{metadata:{...i.metadata??{},CompanyApprovalStatus:s,CompanyLastMessage:s==="Approved"?"Company work approved locally. Adapter execution is still gated.":"Company work rejected locally.",CompanyUpdatedAt:new Date().toISOString()}}),f.emit("companyGraph.approval",{id:a,status:s}),A(`Company approval ${s.toLowerCase()} locally.`))},[te,A]),km=g.useCallback((a,s)=>{const i=s.trim();if(!i)return;const l=J("node"),u=J("edge");O(h=>{var j,S;const k=h.nodes.find(I=>I.id===a);if(!k)return h;const C={id:l,kind:"ai-task",title:"Company follow-up task",body:i,x:k.x+k.width+120,y:k.y+52,width:350,height:190,status:"idle",tags:["Company follow-up",((j=k.metadata)==null?void 0:j.CompanyExecutionModeLabel)??"Company"],metadata:{CompanyRootNodeId:k.id,CompanyExecutionMode:((S=k.metadata)==null?void 0:S.CompanyExecutionMode)??"Auto",CompanyTaskStatus:"Staged",CompanyStagedAt:new Date().toISOString()}};return{...h,nodes:[...h.nodes,C],edges:[...h.edges,{id:u,from:k.id,to:l,kind:"context"}]}},"companyGraph.followUp.staged",{rootId:a,taskId:l,chars:i.length}),b([l]),z(l),window.setTimeout(()=>z(h=>h===l?null:h),1400),A("Company follow-up task staged locally.")},[O,A]),Sm=g.useCallback((a,s)=>{const i=J("node"),l=J("edge");O(u=>{const h=u.nodes.find(C=>C.id===a);if(!h)return u;const k={id:i,kind:"note",title:`Artifact: ${s.title}`.slice(0,90),body:s.content,x:h.x+h.width+120,y:h.y+290,width:360,height:220,tags:["Company artifact",s.type],metadata:{CompanyRootNodeId:h.id,CompanyArtifactType:s.type,CompanyArtifactSourceNodeId:s.sourceNodeId,CompanyAddedAt:new Date().toISOString()}};return{...u,nodes:[...u.nodes,k],edges:[...u.edges,{id:l,from:h.id,to:i,kind:"result"}]}},"companyGraph.artifact.added",{rootId:a,artifactNodeId:i,artifactType:s.type}),b([i]),z(i),window.setTimeout(()=>z(u=>u===i?null:u),1400),A("Company artifact added to the canvas.")},[O,A]),wm=g.useCallback((a,s="preview")=>{const i=kb(a);if(!i){A("No asset URL is available for this node."),f.emit("node.asset.open.failed",{id:a.id,kind:a.kind,reason:"missing-url"});return}if(a.kind==="pdf"&&s!=="external"){Ze({url:i,fileName:Sb(a)}),f.emit("node.pdf.preview.open",{id:a.id,urlKind:i.startsWith("http")?"url":"path"});return}if(a.kind==="embed"&&!Pn(i)){A("This embed URL is blocked for safety."),f.emit("node.asset.open.failed",{id:a.id,kind:a.kind,reason:"unsafe-url"});return}window.open(i,"_blank","noopener,noreferrer"),f.emit("node.asset.open",{id:a.id,kind:a.kind,mode:s})},[A]),vm=g.useCallback(a=>{const s=K.current;O(i=>({...i,nodes:i.nodes.filter(l=>l.id!==a),edges:i.edges.filter(l=>l.from!==a&&l.to!==a)}),"node.delete",{id:a}),b(i=>{const l=i.filter(u=>u!==a);return f.emit("selection.repaired",{reason:"delete-node",beforeCount:s.length,afterCount:l.length,removedCount:i.length-l.length}),l}),ae(i=>i===a?null:i)},[O]),sr=g.useCallback(a=>{const s=Array.from(new Set(K.current));if(s.length===0)return;const i=new Set(s);O(l=>({...l,nodes:l.nodes.filter(u=>!i.has(u.id)),edges:l.edges.filter(u=>!i.has(u.from)&&!i.has(u.to))}),"node.delete",{ids:s,count:s.length,source:a}),b([]),f.emit("selection.repaired",{reason:"delete-selected",source:a,beforeCount:s.length,afterCount:0,removedCount:s.length}),ae(l=>l&&i.has(l)?null:l),$t(l=>l&&i.has(l)?null:l),la(l=>l&&i.has(l)?null:l),A(`Deleted ${s.length} selected node${s.length===1?"":"s"}.`)},[O,A]),Ko=g.useCallback((a,s)=>{var E;const i=Array.from(new Set(a));if(i.length===0)return;const l=v.current,u=new Set(i),h=l.nodes.filter(T=>u.has(T.id));if(h.length===0)return;const k=h.filter(Va),C=h.filter(T=>!Va(T));if(k.length>0&&f.emit("remoteMonitor.node.duplicateIgnored",{action:"duplicate",source:s,skippedCount:k.length,nodeId:(E=k[0])==null?void 0:E.id}),C.length===0){const T=k[0]??l.nodes.find(Va);T&&(b([T.id]),z(T.id),window.setTimeout(()=>z(M=>M===T.id?null:M),1e3)),A("Remote monitor is single-instance per board. Focused existing monitor.");return}const j=new Map(C.map(T=>[T.id,J("node")])),S=C.map(T=>({...T,id:j.get(T.id),x:T.x+50,y:T.y-50,status:T.status==="running"?"idle":T.status,metadata:T.metadata?{...T.metadata}:void 0,tags:T.tags?[...T.tags]:void 0,imageStack:di(T.imageStack,T.id,j.get(T.id))})),I=l.edges.filter(T=>j.has(T.from)&&j.has(T.to)).map(T=>({...T,id:J("edge"),from:j.get(T.from),to:j.get(T.to)}));O(T=>({...T,nodes:[...T.nodes,...S],edges:[...T.edges,...I]}),"node.duplicate",{source:s,count:S.length,edgeCount:I.length,sourceIds:i,duplicateIds:S.map(T=>T.id),skippedRemoteMonitorCount:k.length});const L=S.map(T=>T.id);b(L),z(L[0]??null),window.setTimeout(()=>z(T=>T===L[0]?null:T),1e3),A(k.length>0?`Duplicated ${S.length} node${S.length===1?"":"s"}; remote monitor stays single-instance.`:`Duplicated ${S.length} node${S.length===1?"":"s"}.`)},[O,A]),rr=g.useCallback(a=>{Ko(K.current,a)},[Ko]),to=g.useCallback((a,s)=>{const i=Array.from(new Set(K.current));if(i.length===0)return;const l=new Set(i),u=v.current.nodes,h=u.filter(S=>l.has(S.id));if(h.length===0)return;const k=u.filter(S=>!l.has(S.id)),C=a==="front"?[...k,...h]:[...h,...k];if(!C.some((S,I)=>{var L;return S.id!==((L=u[I])==null?void 0:L.id)})){A(a==="front"?"Selected nodes are already in front.":"Selected nodes are already in back."),f.emit("node.layerOrder.noop",{direction:a,source:s,count:h.length,ids:i});return}O(S=>({...S,nodes:C}),"node.layerOrder",{direction:a,source:s,count:h.length,ids:i}),A(a==="front"?`Brought ${i.length} selected node${i.length===1?"":"s"} to front.`:`Sent ${i.length} selected node${i.length===1?"":"s"} to back.`)},[O,A]),ir=g.useCallback(async()=>{const a=new Set(K.current),s=v.current.nodes.filter(u=>a.has(u.id));if(s.length===0)return;const i=v.current.edges.filter(u=>a.has(u.from)&&a.has(u.to)),l=Eb(s,i);yt.current=l;try{const u=await Co(JSON.stringify(l));dt.current=0,f.emit("multiSelection.copy",{count:s.length,edgeCount:i.length,ok:!0,method:u}),A(`Copied ${s.length} selected node${s.length===1?"":"s"} for canvas paste.`)}catch(u){dt.current=Date.now()+15e3,f.emit("multiSelection.copy",{count:s.length,edgeCount:i.length,ok:!0,method:"react-local",clipboardUnavailable:!0,message:u instanceof Error?u.message:String(u)}),A(`Copied ${s.length} selected node${s.length===1?"":"s"} inside this canvas.`)}},[A]),Da=g.useCallback((a,s,i)=>{const l=v.current.nodes.find(Va),u=[],h=[];let k=!!l;for(const R of a.nodes){if(Va(R)){if(k){u.push(R);continue}k=!0}h.push(R)}if(u.length>0&&f.emit("remoteMonitor.node.duplicateIgnored",{action:i,skippedCount:u.length,nodeId:l==null?void 0:l.id}),h.length===0){l&&(b([l.id]),z(l.id),window.setTimeout(()=>z(R=>R===l.id?null:R),1e3)),A("Remote monitor is single-instance per board. Focused existing monitor.");return}const C=As(h);if(!C)return;const j=new Map(h.map(R=>[R.id,J("node")])),S=s.x-C.minX,I=s.y-C.minY,L=h.map(R=>({...R,id:j.get(R.id),x:R.x+S,y:R.y+I,status:R.status==="running"?"idle":R.status,tags:R.tags?[...R.tags]:void 0,metadata:R.metadata?{...R.metadata}:void 0,imageStack:di(R.imageStack,R.id,j.get(R.id))})),E=a.edges.filter(R=>j.has(R.from)&&j.has(R.to)).map(R=>({...R,id:J("edge"),from:j.get(R.from),to:j.get(R.to)})),T=L.map(R=>R.id);O(R=>({...R,nodes:[...R.nodes,...L],edges:[...R.edges,...E]}),"clipboard.nodes.paste",{source:i,count:L.length,edgeCount:E.length,originX:Math.round(s.x),originY:Math.round(s.y),skippedRemoteMonitorCount:u.length}),b(T),ae(null),z(T[0]??null);const M=L[L.length-1];M&&xe(M,`clipboard.nodes.${i}`),window.setTimeout(()=>z(R=>R===T[0]?null:R),1200),A(u.length>0?`Pasted ${L.length} canvas node${L.length===1?"":"s"}; remote monitor stays single-instance.`:`Pasted ${L.length} canvas node${L.length===1?"":"s"}.`)},[O,xe,A]),ao=g.useCallback((a,s,i)=>{const l=a.trim();if(!l)return;const u=Od(l,s,`${i}-url`),h=u??$d(l,s,i);O(k=>({...k,nodes:[...k.nodes,h]}),u?"clipboard.url.paste":"clipboard.text.paste",{source:i,id:h.id,kind:h.kind,chars:l.length}),b([h.id]),ae(null),z(h.id),xe(h,`clipboard.${i}.${h.kind}`),window.setTimeout(()=>z(k=>k===h.id?null:k),1200),A(`${i==="drop"?"Dropped":"Pasted"} ${h.kind==="file"?"URL reference":h.kind} node.`)},[O,xe,A]),Xo=g.useCallback(async(a,s,i)=>{const l=a.filter(h=>h.name||h.size>0);if(l.length===0)return;const u=v.current.id;try{const h=[];let k=s.x;for(const S of l){const I=await Qb(S,{x:k,y:s.y},i);h.push(I),k+=I.width+hs}if(v.current.id!==u){f.emit("async.staleIgnored",{path:"canvas.fileIngest",source:i,boardId:u,currentBoardId:v.current.id,count:l.length});return}const C=h.map(S=>S.id);O(S=>({...S,nodes:[...S.nodes,...h]}),"canvas.files.ingested",{source:i,count:h.length,kinds:h.map(S=>S.kind)}),b(C),ae(null),z(C[0]??null);const j=h[h.length-1];j&&xe(j,`canvas.files.${i}`),window.setTimeout(()=>z(S=>S===C[0]?null:S),1200),A(`${i==="drop"?"Dropped":"Pasted"} ${h.length} file node${h.length===1?"":"s"} locally.`)}catch(h){f.emit("canvas.files.ingestFailed",{source:i,message:h instanceof Error?h.message:String(h)}),A("File ingest failed in this browser context.")}},[O,xe,A]);g.useEffect(()=>{const a=s=>{if(s.defaultPrevented||oc(s.target))return;const i=s.clipboardData;if(!i)return;const l=Se(),u=Vd(i.files,i.items);if(u.length>0){s.preventDefault(),Xo(u,l,"paste");return}const h=dt.current>Date.now()?yt.current:null;if(h){s.preventDefault(),Da(h,l,"paste"),f.emit("clipboard.nodes.pasteLocalFallback",{count:h.nodes.length});return}const k=xt.current>Date.now()?pa.current:null;if(k){s.preventDefault(),ao(k,l,"paste"),f.emit("clipboard.text.pasteLocalFallback",{chars:k.length}),xt.current=0;return}const C=i.getData("text/plain"),j=Dd(C);if(j){s.preventDefault(),Da(j,l,"paste");return}const S=C.trim()?C:Fd(i.getData("text/html"));S.trim()&&(s.preventDefault(),ao(S,l,"paste"))};return document.addEventListener("paste",a),()=>document.removeEventListener("paste",a)},[Se,Xo,ao,Da]);const jm=g.useCallback(a=>{Ns(a.target)||!Array.from(a.dataTransfer.types??[]).some(i=>["Files","text/plain","text/uri-list","text/html"].includes(i))||(a.preventDefault(),a.dataTransfer.dropEffect="copy")},[]),Im=g.useCallback(a=>{if(Ns(a.target))return;const s=Vd(a.dataTransfer.files,a.dataTransfer.items),i=a.dataTransfer.getData("text/uri-list"),l=a.dataTransfer.getData("text/plain"),u=Fd(a.dataTransfer.getData("text/html")),h=Se(a.clientX,a.clientY);if(s.length>0){a.preventDefault(),Xo(s,h,"drop");return}const k=(i||l||u).trim(),C=Dd(l);if(C){a.preventDefault(),Da(C,h,"drop");return}k&&(a.preventDefault(),ao(k,h,"drop"))},[Se,Xo,ao,Da]),Nm=g.useCallback(()=>{const a=new Set(K.current),s=new Set(v.current.nodes.filter(i=>a.has(i.id)&&bo(i)).map(i=>i.id));if(s.size===0){A("No text nodes in this selection.");return}O(i=>({...i,nodes:i.nodes.map(l=>s.has(l.id)?{...l,height:Br(l)}:l)}),"multiSelection.fitHeight",{count:s.size}),f.emit("multiSelection.fitHeight",{count:s.size}),A(`Fitted ${s.size} text node${s.size===1?"":"s"}.`)},[O,A]),lr=g.useCallback(a=>{const s=new Set(K.current),i=v.current.nodes.filter(E=>s.has(E.id)).sort((E,T)=>K.current.indexOf(E.id)-K.current.indexOf(T.id));if(i.length<2)return;const l=As(i);if(!l)return;const u=a==="tidy"?ny(i):i,h=28,k=Math.max(...u.map(E=>E.width)),C=Math.max(...u.map(E=>E.height)),j=u.map((E,T)=>({id:E.id,x:E.x,y:E.y,width:E.width,height:E.height,selectionIndex:T})),S=v.current.settings.gridSnap??!0;let I;a==="grid"?I={mode:"grid",order:"selectionOrder",columns:Math.max(2,Math.ceil(Math.sqrt(u.length))),cellWidth:k,cellHeight:C,gapX:h,gapY:h,sizeMode:"preserve",snapToGrid:S,gridSize:Qt}:a==="strip"?I={mode:"stripHorizontal",order:"selectionOrder",targetHeight:C,gapX:h,sizeMode:"preserve",snapToGrid:S,gridSize:Qt}:I={mode:"masonry",order:"spatialReading",anchor:"selectionBoundsTopLeft",maxColumns:12,gapX:24,gapY:24,quantile:.75,sizeMode:"preserve",snapToGrid:S,gridSize:Qt};const L=ih(j,I,l);O(E=>({...E,nodes:E.nodes.map(T=>{const M=L.after.get(T.id);return M?{...T,x:M.x,y:M.y,width:M.width,height:M.height}:T})}),"multiSelection.arrange",{mode:a,count:i.length,layoutMode:I.mode,snapToGrid:S}),f.emit("multiSelection.arrange",{mode:a,count:i.length,layoutMode:I.mode,snapToGrid:S,boundsAfter:L.boundsAfter}),A(a==="tidy"?`Tidied ${i.length} selected nodes.`:`Arranged ${i.length} selected nodes as ${a}.`)},[O,A]),Am=g.useCallback(()=>{const a=Array.from(new Set(K.current)),s=v.current,i=new Map(s.nodes.map(M=>[M.id,M])),l=a.map(M=>i.get(M)).filter(M=>!!(M&&M.kind==="image"&&So(M).length>0));if(l.length<2){A("Select at least two image nodes to stack."),f.emit("multiSelection.mergeImageStacks.skipped",{reason:"not-enough-image-nodes",selectedCount:a.length});return}const u=l[0],h=l.slice(1),k=new Date().toISOString(),C=new Set,j=So(u),S=[];for(const M of j)S.push(Ed(M,u,C,k));for(const M of h)for(const R of So(M))S.push(Ed(R,M,C,k));if(S.length<2){A("No stackable image variants found."),f.emit("multiSelection.mergeImageStacks.skipped",{reason:"not-enough-variants",selectedCount:a.length});return}const I=S.some(M=>{var R;return M.variantId===((R=u.imageStack)==null?void 0:R.activeVariantId)})?u.imageStack.activeVariantId:S[0].variantId,L=S.find(M=>M.variantId===I)??S[0],E=h.map(M=>M.id),T=new Set(E);O(M=>({...M,nodes:M.nodes.filter(R=>!T.has(R.id)).map(R=>{var X;return R.id===u.id?{...R,kind:"image",imageUrl:L.imageUrl,imageStack:{activeVariantId:I,variants:S,kind:"pile",title:((X=R.imageStack)==null?void 0:X.title)||R.title,updatedAtUtc:k},metadata:{...R.metadata??{},ImageStackKind:"pile",ImageStackPrimaryNodeId:u.id,ImageStackVariantCount:String(S.length),ImageStackMergedAtUtc:k,ImageStackRemovedNodeIds:E.join(","),ImageStackActiveVariantId:I},tags:Array.from(new Set([...R.tags??["image"],"Stack"])).slice(0,4)}:R}),edges:M.edges.filter(R=>!T.has(R.from)&&!T.has(R.to))}),"multiSelection.mergeImageStacks",{primaryNodeId:u.id,removedNodeIds:E,addedVariants:S.length-j.length,variantCount:S.length}),b([u.id]),ae(M=>M&&T.has(M)?null:M),$t(M=>M&&T.has(M)?null:M),la(M=>M&&T.has(M)?null:M),z(u.id),window.setTimeout(()=>z(M=>M===u.id?null:M),1200),A(`Stacked ${l.length} image nodes into ${S.length} variants.`)},[O,A]),Mm=g.useCallback(a=>{const s=K.current.includes(a)?K.current:[a];Ko(s,"node-action")},[Ko]),fa=g.useCallback(async(a,s)=>{const i=Xn.current.isBusy(a);return i&&f.emit("automation.run.queued",{id:a,key:a}),Xn.current.enqueue(a,async()=>{var E,T,M;const l=v.current.nodes.find(R=>R.id===a);if(!l||l.kind!=="ai-task")return;f.emit("automation.run.dequeued",{id:a,key:a,queuedBehindRunning:i});const u=(mn.current.get(a)??0)+1;mn.current.set(a,u);const h=La.current,k=(s==null?void 0:s.trim())||l.body,C=Ri(Ti(l)),j=Zt(v.current.settings.model),S=qd(v.current.settings.effort);te(a,{status:"running",body:k,metadata:yo(l,{instruction:k,runState:"running",status:"running",statusLabel:"Running",sourceMode:C?"media-prompt-only":"ai-task",model:j,reasoningEffort:S})}),f.emit("automation.run",{id:a,mode:"single",seq:u,automationKind:C==null?void 0:C.kind});const I=()=>mn.current.get(a)===u&&La.current===h,L=R=>{if(!I()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}f.emit("localBridge.codex.fallback",{id:a,reason:R});const X=gy(k,l,R);te(a,{status:"done",result:X,metadata:yo(l,{instruction:k,output:X,runState:"completed",status:C?"prepared":"done",statusLabel:C?"Spec only":"Done",sourceMode:C?"media-prompt-only":"local-draft",error:C?`External ${C.mode.toLowerCase()} generation was not executed.`:R,fallback:!0,partial:!!C,toolsUsed:C?`${C.toolHint}, Deterministic.Fallback, HumanReview.Gate`:"Deterministic.Fallback",toolWarnings:C?`External ${C.mode.toLowerCase()} generator was not invoked; this run prepared a spec only.`:"Local deterministic fallback was used; AI was not called.",model:j,reasoningEffort:S})}),ae(a)};if(!at()){L("hosted-access-gated");return}try{const R=await qt();if(!I()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}if(pe(R.state),We(R.status??null),R.state!=="connected"){de(R.message||"LocalBridge is unavailable."),L(R.message||"LocalBridge unavailable");return}const X=Ua(R.status);if(!X){L("LocalBridge token unavailable");return}const je=Zd(v.current,l,k);f.emit("localBridge.codex.run",{id:a,boardId:v.current.id});const he=await Ul({instruction:je,workingDirectory:((T=(E=R.status)==null?void 0:E.project)==null?void 0:T.rootPath)||((M=R.status)==null?void 0:M.workspace)||void 0,sandbox:"read_only",model:j,reasoningEffort:S,approvalPolicy:"on-request",intent:"mindcanvas-ai-task",nodeKind:l.kind,webSearchMode:"disabled",networkAccessEnabled:!1},X,R.baseUrl);if(!I()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}if(!he.success||!he.finalResponse){const q=he.error||"LocalBridge Codex returned no response.";f.emit("localBridge.codex.failed",{id:a,message:q,status:he.status}),te(a,{status:"blocked",result:q,metadata:yo(l,{instruction:k,output:q,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:C?"media-prompt-only":"ai-task",error:q,fallback:!1,partial:!0,model:j,reasoningEffort:S})}),ae(a);return}te(a,{status:"done",result:he.finalResponse,metadata:yo(l,{instruction:k,output:he.finalResponse,runState:"completed",status:C?"prepared":"done",statusLabel:C?"Spec only":"Done",sourceMode:C?"media-prompt-only":"ai-generated",error:C?`External ${C.mode.toLowerCase()} generation was not executed.`:"",fallback:!1,partial:!!C,toolsUsed:C?`AI.LLM, ${C.toolHint}, HumanReview.Gate`:"AI.LLM",toolWarnings:C?`External ${C.mode.toLowerCase()} generator was not invoked; this run prepared a spec only.`:"",model:j,reasoningEffort:S,providerKind:he.providerKind,threadId:he.threadId,turnId:he.turnId})}),f.emit("localBridge.codex.completed",{id:a,providerKind:he.providerKind,threadId:he.threadId,turnId:he.turnId}),ae(a)}catch(R){if(!I()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}const X=R instanceof Error?R.message:String(R);f.emit("localBridge.codex.failed",{id:a,message:X}),te(a,{status:"blocked",result:X,metadata:yo(l,{instruction:k,output:X,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:C?"media-prompt-only":"ai-task",error:X,fallback:!1,partial:!0,model:j,reasoningEffort:S})}),ae(a)}})},[te]),Xi=g.useCallback(async()=>{const a=K.current[0];if(!a){A("Select an AI Task to run its graph.");return}const s=ui(v.current,a);if(s.length===0){A("Select an AI Task to run its graph.");return}const i=s.filter(l=>l.status!=="running");if(f.emit("automation.run",{id:a,mode:"selected-graph",count:i.length,graphSize:s.length,skippedRunning:s.length-i.length,order:s.map(l=>l.id)}),i.length===0){A("The selected AI Task graph is already running.");return}A(`Running selected graph: ${i.length} AI task${i.length===1?"":"s"}.`);for(const[l,u]of i.entries())z(u.id),f.emit("automation.graph.currentNode",{id:u.id,title:u.title,index:l+1,count:i.length}),A(`Running ${l+1}/${i.length}: ${u.title}`),await fa(u.id);z(null),A(`Graph run complete: ${i.length} AI task${i.length===1?"":"s"}.`)},[fa,A]),Tm=g.useCallback(async a=>{if(a.result)try{const s=await Co(a.result);f.emit("aiTask.result.copy",{id:a.id,chars:a.result.length,ok:!0,method:s}),A("AI result copied.")}catch(s){f.emit("aiTask.result.copy",{id:a.id,chars:a.result.length,ok:!1,message:s instanceof Error?s.message:String(s)}),A("AI result copy unavailable in this browser context.")}},[A]),Rm=g.useCallback(a=>{if(!a.result)return;const s=fy(a,{x:a.x+a.width+78,y:a.y}),i={id:J("edge"),from:a.id,to:s.id,kind:"result"};O(l=>l.nodes.some(h=>h.id===a.id&&h.result)?{...l,nodes:[...l.nodes,s],edges:[...l.edges,i]}:l,"aiTask.result.note.create",{sourceNodeId:a.id,createdNodeId:s.id,chars:a.result.length,truncated:a.result.length>oi}),b([s.id]),ae(null),z(s.id),window.setTimeout(()=>z(l=>l===s.id?null:l),1200),A("AI result archived as a Markdown node.")},[O,A]),Lm=g.useCallback(a=>{if(!a.result)return;const s=by(a,{x:a.x+a.width+78,y:a.y+Math.min(a.height+44,360)}),i={id:J("edge"),from:a.id,to:s.id,kind:"result"};O(l=>l.nodes.some(h=>h.id===a.id&&h.result)?{...l,nodes:[...l.nodes,s],edges:[...l.edges,i]}:l,"aiTask.result.followUp.create",{sourceNodeId:a.id,createdNodeId:s.id,chars:a.result.length}),b([s.id]),ae(null),z(s.id),window.setTimeout(()=>z(l=>l===s.id?null:l),1200),A("Follow-up AI Task staged from the result.")},[O,A]),qi=g.useCallback(()=>{var os,ro,ba,Ml,Tl,Rl,Ll;const a=w.trim(),s=v.current.settings.inputMode,i=[...K.current],l=v.current.nodes.find(ue=>ue.id===i[0]),u=(l==null?void 0:l.kind)==="ai-task"?(a||l.body).trim():a;if(!u)return;const h=u.replace(/\s+/g," ").trim().toLowerCase(),k=window.location.pathname||"/mindcanvas",C=`${k}|${s}|${h}`,j=Date.now(),S=qn.current;if((S==null?void 0:S.signature)===C&&j-S.at<=Sd){f.emit("globalInput.duplicateIgnored",{routePath:k,inputMode:s,chars:u.length,windowMs:Sd});return}qn.current={signature:C,at:j};const I={routePath:k,inputMode:s,selectedNodeIds:i,chars:u.length};f.emit("globalInput.submit.snapshot",{...I,source:(l==null?void 0:l.kind)==="ai-task"?"selected-ai-task":"input",hasTypedPrompt:a.length>0}),(l==null?void 0:l.kind)==="ai-task"&&P(""),F(ue=>ue+1),f.emit("globalInput.submit.started",I);const L=ue=>{F(Pt=>Math.max(0,Pt-1)),f.emit("globalInput.submit.completed",{...I,status:ue})};if((l==null?void 0:l.kind)==="ai-task"){fa(l.id,a).then(()=>L("ai-task")).catch(ue=>{f.emit("globalInput.submit.completed",{...I,status:"ai-task-error",message:ue instanceof Error?ue.message:String(ue)}),F(Pt=>Math.max(0,Pt-1))});return}const E=Se(void 0,void 0,{width:360,height:196}),T=Od(u,E,"global-input-url"),M=T?null:Mi(u),R=!!(M&&/^https?:\/\//i.test(M)&&!Pn(M)),X=!T&&!R&&(s==="Image"||s==="Video")?s:null,je=T??(R?$d(u,E,"global-input-rejected-url"):null)??(X?Kb(u,E,v.current.settings,X,"global-input-media",x.current):Gb(u,E,v.current.settings)),he=Se(void 0,void 0,{width:je.width,height:je.height}),q={...je,x:he.x,y:he.y},yn=q.kind==="ai-task",Fa=T?"globalInput.url.add":R?"globalInput.rejectedUrl.add":X?"globalInput.media.add":"globalInput.aiTask.add",ns={id:q.id,kind:q.kind,chars:u.length,inputMode:s,...yn?{model:(os=q.metadata)==null?void 0:os.TextModel,provider:(ro=q.metadata)==null?void 0:ro.AiProvider,effort:(ba=q.metadata)==null?void 0:ba.Effort}:{},...X?{mediaMode:X,mediaModel:(Ml=q.metadata)==null?void 0:Ml.MediaModel,aspectPresetId:(Tl=q.metadata)==null?void 0:Tl.AspectPresetId,requestedSize:(Rl=q.metadata)==null?void 0:Rl.RequestedSize}:{}};if(yn){const ue=v.current,Pt={...ue,nodes:ue.nodes.some(gr=>gr.id===q.id)?ue.nodes:[...ue.nodes,q],updatedAt:new Date().toISOString()};c(gr=>za(gr,ue,{description:Fa,mergeKey:null})),y([]),v.current=Pt,f.emit(Fa,ns),r(Pt)}else O(ue=>({...ue,nodes:ue.nodes.some(Pt=>Pt.id===q.id)?ue.nodes:[...ue.nodes,q]}),Fa,ns);if(P(""),b([q.id]),ae(null),z(q.id),xe(q,Fa),window.setTimeout(()=>z(ue=>ue===q.id?null:ue),1200),yn){f.emit("globalInput.aiTask.runRequested",{id:q.id,chars:u.length,model:(Ll=q.metadata)==null?void 0:Ll.TextModel}),A("AI task created from input and running."),fa(q.id,u).then(()=>L("ai-task-created")).catch(ue=>{f.emit("globalInput.submit.completed",{...I,status:"ai-task-created-error",message:ue instanceof Error?ue.message:String(ue)}),F(Pt=>Math.max(0,Pt-1))});return}A(`Added ${q.kind==="file"?"URL reference":q.kind} node from input.`),L(T?"url-node":R?"rejected-url-node":X?"media-node":"text-node")},[O,Se,w,xe,fa,A]),Ji=g.useCallback(async()=>{const a=xy(v.current),s=a.flat(),i=a.map(h=>h.filter(k=>k.status!=="running")).filter(h=>h.length>0),l=i.flat();if(f.emit("automation.run",{mode:"all",count:l.length,graphCount:i.length,skippedRunning:s.length-l.length,order:l.map(h=>h.id)}),l.length===0){A(s.length>0?"All AI task graphs are already running.":"No AI tasks on this board.");return}A(`Running ${i.length} graph${i.length===1?"":"s"} / ${l.length} AI task${l.length===1?"":"s"}.`);let u=0;for(const[h,k]of i.entries())for(const C of k)u+=1,z(C.id),f.emit("automation.graph.currentNode",{id:C.id,title:C.title,index:u,count:l.length,graphIndex:h+1,graphCount:i.length}),A(`Running ${u}/${l.length}: ${C.title}`),await fa(C.id);z(null),A(`All graphs complete: ${l.length} AI task${l.length===1?"":"s"}.`)},[fa,A]),Zi=g.useCallback(()=>{const a=v.current.nodes.filter(s=>s.kind==="ai-task"&&s.status==="running");if(a.length===0){A("No running AI tasks to pause."),f.emit("automation.pause",{count:0});return}La.current+=1,O(s=>({...s,nodes:s.nodes.map(i=>i.kind==="ai-task"&&i.status==="running"?{...i,status:"paused",result:i.result||"Paused locally. Run the task again to continue with a fresh execution."}:i)}),"automation.pause",{count:a.length}),A(`Paused ${a.length} running task${a.length===1?"":"s"}.`)},[O,A]),Qi=g.useCallback(()=>{const a=v.current.nodes.filter(s=>s.kind==="ai-task"&&(s.status==="running"||s.status==="paused"));if(a.length===0){A("No active AI tasks to stop."),f.emit("automation.stop",{count:0});return}La.current+=1,O(s=>({...s,nodes:s.nodes.map(i=>i.kind==="ai-task"&&(i.status==="running"||i.status==="paused")?{...i,status:"blocked",result:"Stopped locally. Any late adapter callback from the previous execution will be ignored."}:i)}),"automation.stop",{count:a.length}),ae(null),A(`Stopped ${a.length} active task${a.length===1?"":"s"}.`)},[O,A]),el=g.useCallback(async()=>{var C,j,S;if(gn.current)return;const a=v.current.nodes.find(I=>I.id===K.current[0]);if(!a)return;gn.current=!0;const s=++_a.current;Dn(!0),A("Generating flow with AI planner...");const i=au(a),l=xi(v.current.settings.appLanguage,i);let u="language-fallback",h=null,k="";try{if(!at())k="hosted-access-gated";else{const L=await qt();if(s!==_a.current){f.emit("async.staleIgnored",{path:"automation.generateFlow",seq:s});return}if(pe(L.state),We(L.status??null),L.state!=="connected")k=L.message||"LocalBridge unavailable",de(k);else{const E=Ua(L.status);if(!E)k="LocalBridge token unavailable";else{const T=Gg(i,v.current.settings.appLanguage);f.emit("localBridge.codex.run",{id:a.id,boardId:v.current.id,intent:"mindcanvas-generate-flow",appLanguage:l});const M=await Ul({instruction:T,workingDirectory:((j=(C=L.status)==null?void 0:C.project)==null?void 0:j.rootPath)||((S=L.status)==null?void 0:S.workspace)||void 0,sandbox:"read_only",model:Zt(v.current.settings.model),reasoningEffort:qd(v.current.settings.effort),approvalPolicy:"on-request",intent:"mindcanvas-generate-flow",nodeKind:a.kind,webSearchMode:"disabled",networkAccessEnabled:!1},E,L.baseUrl);if(s!==_a.current){f.emit("async.staleIgnored",{path:"automation.generateFlow",seq:s});return}const R=M.success?Kg(M.finalResponse):null;R&&Xg(R,l)?(h=R,u="ai-generated",f.emit("automation.generateFlow.ai.completed",{id:a.id,count:R.nodes.length,appLanguage:l,providerKind:M.providerKind,threadId:M.threadId,turnId:M.turnId})):(k=M.success?"AI planner returned invalid or wrong-language JSON.":M.error||"LocalBridge Codex returned no flow response.",f.emit("automation.generateFlow.ai.failed",{id:a.id,appLanguage:l,reason:k,success:M.success,status:M.status}))}}}h||(h=ld(i,l),u="language-fallback",f.emit("automation.generateFlow.fallback",{id:a.id,count:h.nodes.length,appLanguage:l,reason:k||"planner-unavailable"}));const I=Jd(a,h,v.current.settings,u);O(L=>({...L,nodes:[...L.nodes,...I.nodes],edges:[...L.edges,...I.edges]}),"node.add",{reason:"generate-flow",count:I.nodes.length,sourceMode:u,appLanguage:I.language}),b(I.nodes.map(L=>L.id)),A(u==="ai-generated"?`Generated ${I.nodes.length} AI-planned flow nodes.`:`Generated ${I.nodes.length} local fallback flow nodes.`)}catch(I){const L=I instanceof Error?I.message:String(I),E=ld(i,l),T=Jd(a,E,v.current.settings,"language-fallback");f.emit("automation.generateFlow.failed",{id:a.id,appLanguage:l,message:L,fallbackCount:T.nodes.length}),O(M=>({...M,nodes:[...M.nodes,...T.nodes],edges:[...M.edges,...T.edges]}),"node.add",{reason:"generate-flow",count:T.nodes.length,sourceMode:"language-fallback",appLanguage:T.language,error:L}),b(T.nodes.map(M=>M.id)),A(`Generated ${T.nodes.length} fallback flow nodes.`)}finally{s===_a.current&&(gn.current=!1,Dn(!1))}},[O,A]),tl=g.useCallback((a,s,i)=>{const l=typeof document<"u"?document.elementFromPoint(a,s):null,u=l instanceof HTMLElement?l.closest('[data-node-connector="true"]'):null,h=(u==null?void 0:u.dataset.connectorNodeId)??"",k=u==null?void 0:u.dataset.connectorSide;if(h&&h!==i&&ri(k)&&v.current.nodes.some(S=>S.id===h))return{id:h,side:k};const C=Ct(a,s),j=[...v.current.nodes].reverse().find(S=>S.id!==i&&hb(C,S));return j?{id:j.id,side:gb(j,C)}:null},[Ct]),Pm=g.useCallback((a,s,i,l)=>{if(l.button!==0)return;l.preventDefault(),l.stopPropagation();const u=v.current.nodes.find(T=>T.id===a);if(!u)return;const h=_t(u,s);let k=h,C=null;const j=(T,M)=>{k=Ct(T,M),C=tl(T,M,a),G(R=>!R||R.from!==a?R:{...R,pointer:k,target:C,dragging:!0})},S=()=>{document.body.classList.remove("is-connecting-node"),window.removeEventListener("pointermove",I),window.removeEventListener("pointerup",L),window.removeEventListener("pointercancel",E)},I=T=>{j(T.clientX,T.clientY)},L=T=>{if(j(T.clientX,T.clientY),S(),!C||C.id===a){G(null),f.emit("edge.drag.cancelled",{from:a,fromSide:s,kind:i});return}const M={id:J("edge"),from:a,to:C.id,kind:i,fromSide:s,toSide:C.side};O(R=>({...R,edges:[...R.edges,M]}),"edge.add",{...M,source:"connector-drag"}),G(null),b([a,C.id]),ae(null),f.emit("edge.drag.completed",{...M})},E=()=>{S(),G(null),f.emit("edge.drag.cancelled",{from:a,fromSide:s,kind:i,reason:"pointer-cancelled"})};b(T=>T.includes(a)?T:[a]),ae(null),G({from:a,kind:i,fromSide:s,pointer:h,target:null,dragging:!0}),document.body.classList.add("is-connecting-node"),f.emit("edge.drag.started",{from:a,fromSide:s,kind:i}),window.addEventListener("pointermove",I),window.addEventListener("pointerup",L,{once:!0}),window.addEventListener("pointercancel",E,{once:!0})},[O,tl,Ct]),Em=g.useCallback((a,s,i="right")=>{if(V&&V.from!==a){const u={id:J("edge"),from:V.from,to:a,kind:V.kind==="context"?"context":s,fromSide:V.fromSide,toSide:i};O(h=>({...h,edges:[...h.edges,u]}),"edge.add",{...u}),G(null);return}const l=v.current.nodes.find(u=>u.id===a);G({from:a,kind:s,fromSide:i,pointer:l?_t(l,i):ze.current,target:null,dragging:!1})},[O,V]),qo=g.useCallback(()=>{c(a=>{const s=a.at(-1);if(!s)return a;const i=s.board,l=K.current,u=nc(l,i);return y(h=>Rh(h,v.current,{description:s.description})),r(i),b(u),f.emit("history.undo",{boardId:i.id,selectedBefore:l.length,selectedAfter:u.length,selectionRepaired:u.length!==l.length||u.some((h,k)=>h!==l[k])}),f.emit("selection.repaired",{reason:"undo",beforeCount:l.length,afterCount:u.length}),a.slice(0,-1)})},[]),Jo=g.useCallback(()=>{y(a=>{const s=a[0];if(!s)return a;const i=s.board,l=K.current,u=nc(l,i);return c(h=>za(h,v.current,{description:s.description})),r(i),b(u),f.emit("history.redo",{boardId:i.id,selectedBefore:l.length,selectedAfter:u.length,selectionRepaired:u.length!==l.length||u.some((h,k)=>h!==l[k])}),f.emit("selection.repaired",{reason:"redo",beforeCount:l.length,afterCount:u.length}),a.slice(1)})},[]);g.useEffect(()=>{const a=s=>{var j,S;if(!s.defaultPrevented&&s.ctrlKey&&!s.shiftKey&&!s.altKey&&!s.metaKey&&s.key==="Home"&&!s.repeat){s.preventDefault(),Pi("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-function-toolbar"});return}if(s.defaultPrevented||oc(s.target))return;const i=s.key.toLowerCase(),l=s.ctrlKey||s.metaKey,u=!l&&!s.altKey&&!s.shiftKey,h=By(s.target);if(s.key==="Tab"&&u&&!s.repeat&&!h){s.preventDefault(),tr("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-wheel-mode",wheelMode:!(v.current.settings.wheelMode??!1)});return}if(s.key==="Enter"&&u&&!s.repeat&&!h&&Vi()){s.preventDefault(),f.emit("keyboard.shortcut",{action:"focus-global-input"});return}if(i==="f"&&u&&!s.repeat&&!h){s.preventDefault(),eo("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-fullscreen"});return}if(i==="d"&&u&&!s.repeat){s.preventDefault(),ar("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-cursor-direction"});return}if(i==="h"&&u&&!s.repeat){s.preventDefault(),er(),f.emit("keyboard.shortcut",{action:"camera-home"});return}const k=s.key==="ArrowUp"?"up":s.key==="ArrowDown"?"down":s.key==="ArrowLeft"?"left":s.key==="ArrowRight"?"right":null;if(k&&u){s.preventDefault(),Wi(k),f.emit("keyboard.shortcut",{action:"camera-pan",direction:k});return}if(i===xa&&!s.altKey&&!s.shiftKey){s.preventDefault(),l?(Ba(xa),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:xa})):(Qn(xa),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:xa}));return}if(/^[0-9]$/.test(s.key)&&!s.altKey){if(l&&!s.shiftKey){s.preventDefault(),Ba(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:s.key});return}if(!l&&!s.shiftKey){s.preventDefault(),Qn(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:s.key});return}}if(l&&i==="z"&&!s.shiftKey){s.preventDefault(),qo(),f.emit("keyboard.shortcut",{action:"undo"});return}if(l&&i==="y"||l&&s.shiftKey&&i==="z"){s.preventDefault(),Jo(),f.emit("keyboard.shortcut",{action:"redo"});return}if(l&&i==="f"&&!s.altKey){s.preventDefault(),(j=un.current)==null||j.focus(),(S=un.current)==null||S.select(),f.emit("keyboard.shortcut",{action:"focus-search"});return}if(l&&i==="c"&&K.current.length>0){s.preventDefault(),ir(),f.emit("keyboard.shortcut",{action:"copy",count:K.current.length});return}if(l&&i==="v"&&yt.current&&dt.current>Date.now()){const I=yt.current;s.preventDefault(),Da(I,Se(),"paste"),f.emit("keyboard.shortcut",{action:"paste-local",count:I.nodes.length});return}if(l&&i==="d"){s.preventDefault(),rr("keyboard"),f.emit("keyboard.shortcut",{action:"duplicate",count:K.current.length});return}if(l&&s.key==="]"){s.preventDefault(),to("front","keyboard"),f.emit("keyboard.shortcut",{action:"bring-front",count:K.current.length});return}if(l&&s.key==="["){s.preventDefault(),to("back","keyboard"),f.emit("keyboard.shortcut",{action:"send-back",count:K.current.length});return}if(s.key==="Delete"||s.key==="Backspace"){if(K.current.length===0)return;s.preventDefault(),sr("keyboard"),f.emit("keyboard.shortcut",{action:"delete",count:K.current.length});return}if(s.key!=="Escape")return;let C=!1;ht&&(ia(!1),C=!0),Ia&&(ce(!1),C=!0),Ma&&(Ut(!1),C=!0),ta&&(Tt("keyboard"),C=!0),It&&(Ze(null),C=!0),Ot&&($t(null),C=!0),Ft&&(la(null),C=!0),V&&(G(null),C=!0),ie&&(ae(null),C=!0),N.trim()&&(_(""),H([]),re(0),C=!0),K.current.length>0&&(b([]),C=!0),C&&(s.preventDefault(),f.emit("keyboard.shortcut",{action:"escape"}))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[Ot,Tt,V,ir,sr,Ft,rr,Vi,Se,Qn,er,ta,Wi,Da,It,ht,N,Jo,to,ie,Ba,Ia,Ma,ar,Pi,eo,tr,qo]);const _m=g.useCallback(()=>{np(),O(()=>({...El,updatedAt:new Date().toISOString()}),"board.restore",{source:"fixture-reset"}),b(["node-agent-command"]),Ge([]),Tt("fixture-reset")},[Tt,O]),dr=g.useCallback((a,s="result-click")=>{const i=_r(a),l=Mt(),u={...oe.current,x:l.width/2-i.x*oe.current.scale,y:l.height/2-i.y*oe.current.scale};Q(u),b([a.id]),z(a.id),f.emit("search.focused",{query:N.trim(),nodeId:a.id,source:s}),window.setTimeout(()=>z(null),900)},[Q,N,Mt]);g.useEffect(()=>{const a=++pn.current,s=Ey(oe.current,U);f.emit("search.started",{query:N,engine:ma.current?"worker":"local",viewportCenterX:Number(s.centerX.toFixed(2)),viewportCenterY:Number(s.centerY.toFixed(2))});const i=window.setTimeout(()=>{if(a!==pn.current){f.emit("async.staleIgnored",{path:"search",seq:a});return}if(!N.trim()){H([]),re(0),Ie("none"),f.emit("search.completed",{query:N,count:0,engine:"none"});return}const u=Pa.current;if(u&&ma.current){u.postMessage({type:"SEARCH_QUERY",boardId:v.current.id,seq:a,query:N,limit:8,viewport:s});return}const h=performance.now(),k=_y(v.current.nodes,N,s,8);H(k),re(0),Ie("local"),f.emit("search.completed",{query:N,count:k.length,engine:"local",durationMs:Number((performance.now()-h).toFixed(2)),viewportBoosted:!0})},120);return()=>window.clearTimeout(i)},[N,U,fe]);const no=g.useCallback(a=>{re(s=>{const i=$.length;if(i===0)return 0;const l=(s+a+i)%i;return f.emit("search.activeChanged",{query:N.trim(),index:l,count:i}),l})},[N,$.length]),cr=g.useCallback(a=>{const s=$[W];s&&dr(s,a)},[dr,W,$]),Bm=g.useCallback(a=>{if(a.key==="ArrowDown"){a.preventDefault(),no(1);return}if(a.key==="ArrowUp"){a.preventDefault(),no(-1);return}if(a.key==="Enter"){a.preventDefault(),cr("keyboard-enter");return}a.key==="Escape"&&(_(""),H([]),re(0),f.emit("search.cleared"))},[cr,no]),Dm=g.useCallback((a,s)=>{if(s.target.closest("button,input,textarea,select"))return;s.preventDefault(),s.stopPropagation();const i={x:s.clientX,y:s.clientY},l=v.current.nodes.find(I=>I.id===a);if(!l)return;c(I=>za(I,v.current,{description:"Move nodes",mergeKey:null})),y([]);const u=K.current.includes(a)?K.current:[a],h=new Map(v.current.nodes.filter(I=>u.includes(I.id)).map(I=>[I.id,{x:I.x,y:I.y}])),k=h.get(a)??{x:l.x,y:l.y},C=v.current.settings.gridSnap??!0,j=I=>{const L=(I.clientX-i.x)/oe.current.scale,E=(I.clientY-i.y)/oe.current.scale,T=C?Bd(k.x+L)-k.x:L,M=C?Bd(k.y+E)-k.y:E;r(R=>({...R,nodes:R.nodes.map(X=>{const je=h.get(X.id);return je?{...X,x:je.x+T,y:je.y+M}:X}),updatedAt:new Date().toISOString()}))},S=()=>{window.removeEventListener("pointermove",j),window.removeEventListener("pointerup",S),f.emit("node.patch",{id:a,reason:"drag",gridSnap:C})};window.addEventListener("pointermove",j),window.addEventListener("pointerup",S,{once:!0})},[]),Om=g.useCallback((a,s)=>{if(s.button!==0)return;s.preventDefault(),s.stopPropagation();const i=v.current.nodes.find(L=>L.id===a);if(!i)return;const l={x:s.clientX,y:s.clientY},u=Ib(i);let h={width:i.width,height:i.height};c(L=>za(L,v.current,{description:"Resize node",mergeKey:null})),y([]),b(L=>L.includes(a)?L:[a]),ae(null),f.emit("node.resize.started",{id:a,width:Math.round(i.width),height:Math.round(i.height)});const k=()=>{document.body.classList.remove("is-resizing-node"),window.removeEventListener("pointermove",j),window.removeEventListener("pointerup",S),window.removeEventListener("pointercancel",I)},C=L=>{const E=(L.clientX-l.x)/oe.current.scale,T=(L.clientY-l.y)/oe.current.scale;let M=i.width+E,R=i.height+T;if(L.shiftKey&&i.width>0&&i.height>0){const X=Math.max(M/i.width,R/i.height);M=i.width*X,R=i.height*X}h={width:Math.round(me(M,u.minWidth,u.maxWidth)),height:Math.round(me(R,u.minHeight,u.maxHeight))},r(X=>({...X,nodes:X.nodes.map(je=>je.id===a?{...je,...h}:je),updatedAt:new Date().toISOString()}))},j=L=>{C(L)},S=L=>{C(L),k(),f.emit("node.resize.completed",{id:a,width:h.width,height:h.height})},I=()=>{k(),f.emit("node.resize.cancelled",{id:a})};document.body.classList.add("is-resizing-node"),window.addEventListener("pointermove",j),window.addEventListener("pointerup",S,{once:!0}),window.addEventListener("pointercancel",I,{once:!0})},[]),$m=g.useCallback(a=>{if(a.button!==0&&a.button!==1&&a.button!==2||Yd(a.target))return;if(a.button===0&&a.ctrlKey&&!a.shiftKey){a.preventDefault(),a.stopPropagation(),zo(a.clientX,a.clientY,"ctrl-grid-click");return}a.preventDefault();const s={x:a.clientX,y:a.clientY},i=ga(a.clientX,a.clientY),l=a.shiftKey;if(a.button===0){const C=new Set(K.current);ae(null),ot({startX:i.x,startY:i.y,currentX:i.x,currentY:i.y}),f.emit("selection.box.started",{x:Math.round(i.x),y:Math.round(i.y),additive:l});const j=()=>{document.body.classList.remove("is-selecting"),window.removeEventListener("pointermove",S),window.removeEventListener("pointerup",I),window.removeEventListener("pointercancel",L)},S=E=>{const T=ga(E.clientX,E.clientY);ot({startX:i.x,startY:i.y,currentX:T.x,currentY:T.y})},I=E=>{const T=ga(E.clientX,E.clientY),M=Kd({startX:i.x,startY:i.y,currentX:T.x,currentY:T.y});if(j(),ot(null),M.width<kd&&M.height<kd){const he=K.current.length;!l&&he>0&&(b([]),ae(null),f.emit("selection.cleared",{source:"canvas-background-click",beforeCount:he})),f.emit("selection.box.cancelled",{reason:"too-small",width:Math.round(M.width),height:Math.round(M.height)});return}const R=ry(M,oe.current),X=v.current.nodes.filter(he=>Gd(he,R)).map(he=>he.id),je=l?Array.from(new Set([...C,...X])):X;b(je),f.emit("selection.box.completed",{count:je.length,additive:l,width:Math.round(M.width),height:Math.round(M.height)})},L=()=>{j(),ot(null),f.emit("selection.box.cancelled",{reason:"pointer-cancelled"})};document.body.classList.add("is-selecting"),window.addEventListener("pointermove",S),window.addEventListener("pointerup",I,{once:!0}),window.addEventListener("pointercancel",L,{once:!0});return}const u={...oe.current},h=C=>{Q({...u,x:u.x+C.clientX-s.x,y:u.y+C.clientY-s.y})},k=()=>{document.body.classList.remove("is-panning"),window.removeEventListener("pointermove",h),window.removeEventListener("pointerup",k)};document.body.classList.add("is-panning"),window.addEventListener("pointermove",h),window.addEventListener("pointerup",k,{once:!0})},[Q,ga,zo]),Fm=g.useCallback(a=>{a.button===0&&(Yd(a.target)||(a.preventDefault(),a.stopPropagation(),zo(a.clientX,a.clientY,"double-click")))},[zo]),ur=g.useCallback(a=>{const s=a.target instanceof Element?a.target:null;if(s!=null&&s.closest('[data-disable-mindcanvas-wheel="true"]'))return;const i=s==null?void 0:s.closest("textarea,.result-popover__body,.mindcanvas-text-scrollable-view"),l=a.ctrlKey||a.metaKey;if(i&&!l)return;const u=v.current.settings.wheelMode?l:!l;a.preventDefault();const h=oe.current;if(u){const k=Math.exp(-a.deltaY*.0012),C=me(h.scale*k,Ss,ws),j=Ct(a.clientX,a.clientY),S=ga(a.clientX,a.clientY);Q({x:S.x-j.x*C,y:S.y-j.y*C,scale:C});return}Q({...h,x:h.x-a.deltaX,y:h.y-a.deltaY})},[Q,ga,Ct]);g.useEffect(()=>{const a=Wt.current;if(a)return a.addEventListener("wheel",ur,{passive:!1}),()=>a.removeEventListener("wheel",ur)},[ur]);const ee=n.nodes.find(a=>a.id===p[0]),bn=g.useMemo(()=>{const a=new Set(p);return n.nodes.filter(s=>a.has(s.id))},[n.nodes,p]),oo=((gl=ee==null?void 0:ee.metadata)==null?void 0:gl[Y.studioNodeType])??"",Um=oo?br(oo):"Unassigned",zm=oo==="template.input",al=g.useMemo(()=>Ad(we),[we]),Zo=ge&&ge.issues.length===0?ge.template:null,nl=g.useMemo(()=>rs(Zo,Ht),[Ht,Zo]),Hm=g.useMemo(()=>bn.filter(a=>a.kind==="image"&&So(a).length>0).length,[bn]),ct=g.useMemo(()=>{const a=n.nodes.filter(l=>l.kind==="ai-task"),s=a.filter(l=>l.status==="running").length,i=a.filter(l=>l.status==="paused").length;return{total:a.length,runnable:a.filter(l=>l.status!=="running").length,running:s,paused:i,active:s+i}},[n.nodes]),Qo=g.useMemo(()=>{if(!ee||ee.kind!=="ai-task")return{size:0,runnable:0};const a=ui(n,ee.id);return{size:a.length,runnable:a.filter(s=>s.status!=="running").length}},[n,ee]),Oa=g.useMemo(()=>{if(bn.length<2)return null;const a=As(bn);if(!a)return null;const s=Math.max(.01,_e.scale),i=a.minX*s+_e.x-10,l=a.minY*s+_e.y-10,u=a.maxX*s+_e.x+10,h=a.maxY*s+_e.y+10,k=(i+u)/2,C=l>112?l-52:h+12;return{left:i,top:l,width:Math.max(0,u-i),height:Math.max(0,h-l),toolbarLeft:me(k,168,Math.max(168,U.width-168)),toolbarTop:me(C,42,Math.max(42,U.height-58))}},[bn,U.height,U.width,_e]),Lt=ie?n.nodes.find(a=>a.id===ie):null,es=Lt?hy(Lt):null,ol=Ot?n.nodes.find(a=>a.id===Ot&&!!a.companyMode):null,sl=Ft?n.nodes.find(a=>a.id===Ft&&a.kind==="directory"):null,rl=g.useMemo(()=>new Set([...p,...$.map(a=>a.id),mt,ie,Ot,Ft,V==null?void 0:V.from].filter(a=>!!a)),[Ot,V==null?void 0:V.from,Ft,mt,ie,$,p]),$a=g.useMemo(()=>{const a=sy(Me,U);return n.nodes.filter(s=>rl.has(s.id)||Gd(s,a))},[rl,n.nodes,U,Me]),mr=g.useMemo(()=>new Set($a.map(a=>a.id)),[$a]);g.useEffect(()=>{f.emit("visibility.culled",{visible:$a.length,total:n.nodes.length,scale:Number(Me.scale.toFixed(3))})},[n.nodes.length,Me.scale,$a.length]);const Wm=g.useCallback(()=>{const a=v.current,s=K.current.map(l=>a.nodes.find(u=>u.id===l)).find(Boolean),i=(s==null?void 0:s.kind)==="ai-task"?s:a.nodes.find(l=>K.current.includes(l.id)&&l.kind==="ai-task")??a.nodes.find(l=>l.kind==="ai-task");return i?Zd(a,i,w.trim()||i.body||i.title):["You are running inside MindExec React MindCanvas.","No AI Task is selected. This is a local prompt-debug preview for the current board.","",`Board: ${a.name}`,`Nodes: ${a.nodes.length}`,`Edges: ${a.edges.length}`,s?`Selected node: ${s.title} (${s.kind})`:"Selected node: none","","Draft input:",vo(w||(s==null?void 0:s.body)||"No prompt input.",4e3)].join(`
48
+ `)},[w]),il=g.useMemo(()=>{const a=new Map(n.nodes.map(s=>[s.id,s]));return n.edges.map(s=>{const i=a.get(s.from),l=a.get(s.to);if(!i||!l)return null;const u=s.fromSide??"right",h=s.toSide??"left",k=_t(i,u),C=_t(l,h);return{...s,path:Ld(k,u,C,h)}}).filter(Boolean)},[n.edges,n.nodes]),ts=g.useMemo(()=>{var k,C;if(!V)return null;const a=new Map(n.nodes.map(j=>[j.id,j])),s=a.get(V.from);if(!s)return null;const i=_t(s,V.fromSide),l=V.target?a.get(V.target.id):null,u=((k=V.target)==null?void 0:k.side)??pb(V.fromSide),h=l?_t(l,u):V.pointer;return{kind:V.kind,targetId:((C=V.target)==null?void 0:C.id)??null,path:Ld(i,V.fromSide,h,u)}},[n.nodes,V]),ll=g.useMemo(()=>il.filter(a=>mr.has(a.from)||mr.has(a.to)),[il,mr]),ut=g.useMemo(()=>oy(n.nodes,_e,U),[n.nodes,_e,U]),Vm=g.useCallback(a=>{if(!ut)return;const s=a.currentTarget.getBoundingClientRect(),i=me(a.clientX-s.left,0,vs),l=me(a.clientY-s.top,0,js),u=ut.bounds.minX+(i-wn)/ut.scale,h=ut.bounds.minY+(l-wn)/ut.scale;Q({...oe.current,x:U.width/2-u*oe.current.scale,y:U.height/2-h*oe.current.scale}),f.emit("minimap.navigate",{worldX:Math.round(u),worldY:Math.round(h)})},[Q,ut,U.height,U.width]),kt=n.settings.inputMode==="Image"?"Image":n.settings.inputMode==="Video"?"Video":null,pr=kt==="Image"?Js:kt==="Video"?Zs:null,Ym=w.trim().length>0||(ee==null?void 0:ee.kind)==="ai-task",dl=N.trim().length>0,cl=$[W]??null,Gm=dl?`${$.length} result${$.length===1?"":"s"}`:`${n.nodes.length} nodes`,so=jt?Kd(jt):null,as=Dr(n.settings.gridType),ul=n.settings.gridSnap??!0,ml=n.settings.cameraBookmarks??{},pl=ta,Km=Na==="full";return o.jsxs("div",{ref:Wt,className:`mindcanvas ${ft?"mindcanvas--read-mode":""} mindcanvas--function-toolbar-${Na}`,"data-function-toolbar-mode":Na,"data-read-mode":ft?"true":"false","data-read-mode-api":Vs?"bound":"unbound","data-cursor-mode":n.settings.cursorMode??"center","data-cursor-direction":n.settings.cursorDirection==="down"?"down":"right",onPointerMove:ku,onDragOver:jm,onDrop:Im,children:[o.jsx("div",{ref:Vt,className:`canvas-plane canvas-plane--grid-${as}`,"data-grid-type":as,"data-grid-snap":n.settings.gridSnap??!0?"on":"off",onPointerDown:$m,onDoubleClick:Fm,onContextMenu:a=>a.preventDefault(),children:o.jsxs("div",{ref:cn,className:"canvas-world","data-visible-nodes":$a.length,"data-total-nodes":n.nodes.length,"data-visible-edges":ll.length,children:[o.jsxs("svg",{className:"edge-layer",width:"4000",height:"3000",viewBox:"-1200 -900 4000 3000","aria-hidden":"true",children:[ll.map(a=>o.jsx("path",{className:`edge-path edge-path--${a.kind}`,d:a.path,onClick:()=>O(s=>({...s,edges:s.edges.filter(i=>i.id!==a.id)}),"edge.delete",{id:a.id})},a.id)),ts&&o.jsx("path",{className:`edge-path edge-path--${ts.kind} edge-path--draft ${ts.targetId?"has-target":""}`,d:ts.path,"data-testid":"edge-connection-preview"})]}),o.jsx("div",{className:"canvas-cursor-marker","data-testid":"canvas-cursor-marker","data-cursor-mode":n.settings.cursorMode??"center","data-cursor-direction":n.settings.cursorDirection==="down"?"down":"right",style:{left:`${ea.x}px`,top:`${ea.y}px`},"aria-hidden":"true"}),$a.map(a=>o.jsx(wf,{node:a,selected:p.includes(a.id),selectionCount:p.length,pulsing:mt===a.id,connectionDraft:V,onSelect:qu,onDragStart:Dm,onResizeStart:Om,onPatch:te,onDelete:vm,onDuplicate:Mm,onRun:fa,onPin:Em,onConnectorDragStart:Pm,onOpenResult:ae,onToggleAiReference:dm,onCopyNode:cm,onCopyEmbedReference:um,onFitNodeHeight:mm,onToggleNodeExpanded:pm,onToggleWordWrap:gm,onStageCompany:hm,onOpenCompanyGraph:fm,onSyncCompanyGoal:bm,onRefreshCompany:ym,onSetCompanyStatus:Gi,onRemoveCompany:Ki,onOpenAsset:wm,onOpenDirectorySettings:om,onScanDirectory:im,onCreateRemoteControl:em,onGenerateTemplateCard:Qu},a.id))]})}),so?o.jsx("div",{className:"canvas-selection-box",style:{left:so.left,top:so.top,width:so.width,height:so.height}}):null,Oa?o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"canvas-multi-selection-bounds",style:{left:Oa.left,top:Oa.top,width:Oa.width,height:Oa.height}}),o.jsxs("div",{className:"multi-selection-toolbar floating-panel",role:"toolbar","aria-label":"Multi selection actions",style:{left:Oa.toolbarLeft,top:Oa.toolbarTop},children:[o.jsx("span",{className:"multi-selection-toolbar__count",children:bn.length}),o.jsx("button",{type:"button",title:"Copy selected nodes","data-testid":"multi-selection-copy",onClick:()=>void ir(),children:o.jsx(wo,{size:15})}),o.jsx("button",{type:"button",title:"Duplicate selected nodes",onClick:()=>rr("multi-toolbar"),children:o.jsx(gc,{size:15})}),o.jsx("button",{type:"button",title:"Bring selected nodes to front","data-testid":"multi-selection-bring-front",onClick:()=>to("front","multi-toolbar"),children:o.jsx(eg,{size:15})}),o.jsx("button",{type:"button",title:"Send selected nodes to back","data-testid":"multi-selection-send-back",onClick:()=>to("back","multi-toolbar"),children:o.jsx(tg,{size:15})}),o.jsx("button",{type:"button",title:"Fit selected text heights",onClick:Nm,children:o.jsx(Jl,{size:15})}),o.jsx("span",{className:"multi-selection-toolbar__separator"}),o.jsx("button",{type:"button",title:"Arrange selected nodes as grid",onClick:()=>lr("grid"),children:o.jsx(Zl,{size:15})}),o.jsx("button",{type:"button",title:"Arrange selected nodes as strip",onClick:()=>lr("strip"),children:o.jsx(Ql,{size:15})}),o.jsx("button",{type:"button",title:"Tidy selected nodes","data-testid":"multi-selection-tidy",onClick:()=>lr("tidy"),children:o.jsx(ed,{size:15})}),Hm>=2&&o.jsx("button",{type:"button",title:"Stack selected image nodes","data-testid":"multi-selection-merge-images",onClick:Am,children:o.jsx(ls,{size:15})}),o.jsx("span",{className:"multi-selection-toolbar__separator"}),o.jsx("button",{type:"button",title:"Delete selected nodes",className:"is-danger","data-testid":"multi-selection-delete",onClick:()=>sr("multi-toolbar"),children:o.jsx(Rs,{size:15})}),o.jsx("button",{type:"button",title:"Clear selection","data-testid":"multi-selection-clear",onClick:()=>{const a=K.current.length;b([]),f.emit("selection.cleared",{source:"multi-toolbar",beforeCount:a})},children:o.jsx(Et,{size:15})})]})]}):null,gt&&o.jsx("div",{className:"node-action-toast floating-panel",role:"status",children:gt}),o.jsxs("div",{className:"top-tabbar",role:"tablist","aria-label":"MindCanvas boards",children:[ln.map(a=>{const s=a.id===n.id,i=nt(a.name),l=Nb(a,n,s);return o.jsxs("div",{className:`tab-shell ${s?"is-active":""} ${ra===a.id?"is-dragging":""} ${At===a.id?"is-drag-over":""}`,"data-testid":"board-tab-shell",draggable:!0,"data-board-id":a.id,"data-board-tab-active":s?"true":"false","data-board-tab-drag-state":ra===a.id?"dragging":At===a.id?"over":"idle",onDragStart:u=>{u.dataTransfer.effectAllowed="move",u.dataTransfer.setData("text/plain",a.id),ja(a.id),f.emit("board.tabs.dragStart",{boardId:a.id})},onDragOver:u=>{!ra||ra===a.id||(u.preventDefault(),u.dataTransfer.dropEffect="move",on(a.id))},onDragLeave:()=>{on(u=>u===a.id?null:u)},onDrop:u=>{u.preventDefault();const h=ra||u.dataTransfer.getData("text/plain");bu(h,a.id),ja(null),on(null)},onDragEnd:()=>{ja(null),on(null)},onMouseDown:u=>{u.button===1&&(u.preventDefault(),Xs(a.id,"middle-click"))},children:[o.jsxs("button",{type:"button",role:"tab","aria-selected":s,className:`tab-button ${s?"tab-button--current":""}`,title:s?`Boards / ${i}`:i,"aria-label":l===i?i:`${l} board, ${i}`,"data-testid":"board-tab","data-board-id":a.id,"data-board-tab-title":i,"data-board-tab-display-title":l,onClick:()=>s?iu():Bi(a.id),children:[a.sourceKind==="localBridge"?o.jsx(po,{size:15}):o.jsx(ls,{size:15}),o.jsx("span",{children:l})]}),!s&&o.jsx("button",{type:"button",className:"tab-close",title:"Close tab","data-testid":"board-tab-close",onClick:u=>{u.stopPropagation(),Xs(a.id,"close-button")},children:o.jsx(Et,{size:13})})]},a.id)}),o.jsx("button",{type:"button",className:"tab-button tab-button--plain",title:"New board","data-testid":"board-create",onClick:_i,children:o.jsx(ko,{size:16})})]}),ta&&o.jsxs(o.Fragment,{children:[o.jsx("button",{type:"button",className:"local-board-backdrop project-gallery-backdrop","aria-label":"Close project gallery","data-testid":"project-gallery-backdrop","data-project-gallery-backdrop":"true",onClick:()=>Tt("backdrop")}),o.jsx("div",{className:"project-gallery-shell","data-project-gallery-shell":"true",children:o.jsx("div",{className:"project-gallery-positioner","data-project-gallery-positioner":"true",children:o.jsxs("section",{className:"local-board-panel project-gallery-panel floating-panel","aria-label":"Project Gallery","data-testid":"project-gallery-panel","data-project-gallery-panel":"true","data-project-storage-current-mode":Ke.currentMode,"data-project-storage-selected-tab":Te,"data-project-storage-local-provider":Ke.localProviderKind,"data-project-storage-cloud-available":Ke.isCloudAvailable?"true":"false","data-project-storage-can-sync-cloud":Ke.canSyncLocalToCloud?"true":"false",children:[o.jsxs("header",{className:"local-board-panel__head project-gallery-panel__head",children:[o.jsxs("div",{className:"project-gallery-title",children:[o.jsxs("span",{className:"project-gallery-title__eyebrow",children:[o.jsx(Zl,{size:15}),"Project Gallery"]}),o.jsx("strong",{children:"Projects"}),o.jsx("p",{children:"Select a canvas snapshot to focus an open tab or load it in a new tab."})]}),o.jsxs("div",{className:"local-board-panel__actions project-gallery-panel__actions",children:[o.jsx("button",{type:"button",title:"New board",onClick:_i,children:o.jsx(ko,{size:15})}),o.jsx("button",{type:"button",title:"Close Project Gallery",onClick:()=>Tt("close-button"),children:o.jsx(Et,{size:15})})]})]}),o.jsxs("div",{className:"project-gallery-body",children:[o.jsxs("aside",{className:"project-gallery-folder-rail","data-project-gallery-folder-rail":"true",children:[o.jsxs("div",{className:"project-storage-tabs",role:"tablist","aria-label":"Project storage mode","data-project-storage-show-local":Ke.showLocalTab?"true":"false","data-project-storage-show-cloud":Ke.showCloudTab?"true":"false",children:[o.jsxs("button",{type:"button",role:"tab","aria-selected":Te==="local",className:Te==="local"?"is-active":"","data-testid":"project-storage-tab-local",onClick:()=>Ei("local"),children:[o.jsx(po,{size:14}),"Local"]}),o.jsxs("button",{type:"button",role:"tab","aria-selected":Te==="cloud",className:Te==="cloud"?"is-active":"","data-testid":"project-storage-tab-cloud",onClick:()=>Ei("cloud"),children:[o.jsx(ds,{size:14}),"Cloud"]})]}),o.jsxs("label",{className:"project-gallery-current-name",children:[o.jsx("span",{children:"Current canvas"}),o.jsx("input",{"aria-label":"Board name",className:"board-name-input",maxLength:90,value:n.name,onChange:a=>qs(a.target.value)})]}),o.jsxs("div",{className:"project-gallery-rail-card",children:[o.jsx("span",{children:"Storage"}),o.jsx("strong",{children:Te==="local"?`${rt.length} local boards`:"Cloud gated"}),o.jsx("small",{children:Te==="local"?`${Ke.localProviderKind} provider / browser catalog and LocalBridge boards`:Ke.cloudStatusMessage??"Auth adapter required"})]}),o.jsxs("div",{className:"project-gallery-rail-card project-gallery-workspace-summary","data-testid":"project-gallery-workspace-summary",children:[o.jsx("span",{children:"Local Workspace"}),o.jsx("strong",{title:Le||void 0,children:Te==="local"?Le?ys(Le):rc(Re):"Cloud gated"}),o.jsx("small",{children:Te==="local"?Le||Ao||"Connect LocalBridge to choose storage.":"Workspace selection is local only."})]}),o.jsxs("label",{className:"project-gallery-startup-toggle","data-testid":"project-gallery-show-at-startup",children:[o.jsx("input",{type:"checkbox",checked:En,onChange:a=>lu(a.target.checked)}),o.jsx("span",{children:"Show at startup"})]})]}),o.jsx("section",{className:"project-gallery-board-area",children:Te==="local"?o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:"local-board-section project-gallery-board-section",children:[o.jsxs("div",{className:"local-board-section__title",children:[o.jsx("span",{children:"Workspace"}),o.jsxs("small",{children:[rt.length," saved"]})]}),o.jsxs("div",{className:"local-board-list local-board-list--stored project-gallery-board-grid","data-project-gallery-board-grid":"true",children:[rt.map(a=>{const s=Hs===a.id,i=a.id===n.id;return o.jsx("div",{"data-testid":"stored-board-row","data-board-id":a.id,className:`local-board-row local-board-row--compound project-gallery-board-card ${i?"is-active":""} ${s?"is-editing":""}`,children:s?o.jsxs("div",{className:"stored-board-rename",children:[o.jsx("input",{"aria-label":"Rename saved board",maxLength:90,value:va,onChange:l=>nn(l.target.value),onKeyDown:l=>lm(a.id,l),onPointerDown:l=>l.stopPropagation(),autoFocus:!0}),o.jsx("button",{type:"button",title:"Save board name","data-testid":"stored-board-rename-save",onClick:()=>or(a.id),children:o.jsx(Cr,{size:13})}),o.jsx("button",{type:"button",title:"Cancel rename","data-testid":"stored-board-rename-cancel",onClick:nr,children:o.jsx(Et,{size:13})})]}):o.jsxs(o.Fragment,{children:[o.jsxs("button",{type:"button",className:"local-board-row__main","data-testid":"stored-board-open","data-project-gallery-open-board":"true",onClick:()=>Bi(a.id),onDoubleClick:l=>{l.stopPropagation(),Yi(a)},children:[a.sourceKind==="localBridge"?o.jsx(po,{size:15}):o.jsx(wt,{size:15}),o.jsxs("span",{children:[o.jsx("strong",{children:nt(a.name)}),o.jsx("small",{children:dy(a)}),i&&o.jsx("small",{className:"project-gallery-open-tab-badge",children:"Open tab"})]})]}),o.jsx("button",{type:"button",className:"local-board-row__action",title:"Rename board","data-testid":"stored-board-rename",onClick:()=>Yi(a),children:o.jsx(td,{size:14})}),o.jsx("button",{type:"button",className:"local-board-row__action",title:"Delete board","data-testid":"stored-board-delete",disabled:i,onClick:()=>Xs(a.id,"project-gallery"),children:o.jsx(Rs,{size:14})})]})},a.id)}),rt.length===0&&o.jsx("p",{className:"local-board-message",children:"No saved React boards yet."})]})]}),o.jsxs("div",{className:"local-board-section project-gallery-bridge-section",children:[o.jsxs("div",{className:"local-board-section__title",children:[o.jsx("span",{children:"LocalBridge"}),o.jsx("button",{type:"button",title:"Refresh local boards",onClick:Gt,disabled:Re==="checking",children:Re==="checking"?o.jsx(Jt,{size:15,className:"spin-icon"}):o.jsx(Mn,{size:15})})]}),o.jsxs("div",{className:`local-board-state local-board-state--${Re}`,children:[Re==="blocked"?o.jsx(ag,{size:15}):Re==="unavailable"?o.jsx(ng,{size:15}):o.jsx(po,{size:15}),o.jsx("span",{children:rc(Re)}),Re==="blocked"&&!io()&&o.jsx("button",{type:"button",onClick:du,children:"Enable"})]}),pt&&o.jsx("p",{className:"local-board-message",children:pt}),o.jsxs("div",{className:"project-gallery-workspace-panel","data-testid":"project-gallery-workspace-panel","data-project-gallery-workspace-panel":"true",children:[o.jsxs("div",{className:"project-gallery-workspace-panel__main",children:[o.jsx(kr,{size:16}),o.jsxs("span",{children:[o.jsx("strong",{children:"Local Workspace"}),o.jsx("small",{title:Le||void 0,children:Le||Ao||"LocalBridge workspace not connected."})]})]}),o.jsxs("div",{className:"project-gallery-workspace-panel__actions",children:[o.jsxs("button",{type:"button","data-testid":"project-gallery-workspace-refresh",title:"Refresh workspace",disabled:Dt,onClick:()=>void cu("workspace-panel"),children:[o.jsx(Mn,{size:14}),o.jsx("span",{children:"Refresh"})]}),o.jsxs("button",{type:"button","data-testid":"project-gallery-workspace-browse",title:"Select Local Storage",disabled:Dt||Re==="blocked"&&!io(),onClick:()=>void uu(),children:[Dt?o.jsx(Jt,{size:14,className:"spin-icon"}):o.jsx(kr,{size:14}),o.jsx("span",{children:"Select Local Storage"})]})]}),Fe.length>0&&o.jsx("div",{className:"project-gallery-workspace-history","data-testid":"project-gallery-workspace-history",children:Fe.map(a=>o.jsx("button",{type:"button",title:a,disabled:Dt||a===Le,onClick:()=>void Ks(a,"history"),children:ys(a,40)},a))})]}),o.jsxs("button",{type:"button",className:"local-board-export","data-testid":"localbridge-export",disabled:Ae||!!((hl=n.source)!=null&&hl.partialImport)||!!((fl=n.source)!=null&&fl.truncated)||Re==="blocked"&&!io(),title:(bl=n.source)!=null&&bl.partialImport?"Export blocked for partial original imports":(yl=n.source)!=null&&yl.truncated?"Export blocked for truncated imported boards":"Export current board to LocalBridge",onClick:()=>void mu(),children:[Ae?o.jsx(Jt,{size:15,className:"spin-icon"}):o.jsx(ad,{size:15}),o.jsx("span",{children:Ae?"Exporting":"Export current"})]}),o.jsx("div",{className:"local-board-list project-gallery-bridge-list",children:aa.slice(0,14).map(a=>o.jsxs("button",{type:"button","data-testid":"localbridge-board-row","data-board-id":a.Id,className:"local-board-row",disabled:!!Mo,onClick:()=>void yu(a),children:[o.jsx(po,{size:15}),o.jsxs("span",{children:[o.jsx("strong",{children:nt(a.Title)}),o.jsx("small",{children:ii(a.UpdatedAt)})]}),Mo===a.Id&&o.jsx(Jt,{size:15,className:"spin-icon"})]},a.Id))})]})]}):o.jsxs("div",{className:"project-cloud-shell","data-testid":"project-cloud-shell","data-project-cloud-status":Ke.isCloudAvailable?"available":"gated","data-project-cloud-plan":Ke.cloudPlanKey,"data-project-cloud-entitlement":Ke.cloudEntitlementStatus,"data-production-adapter-state":et.overallState,"data-project-cloud-database-mode":et.cloudBoards.mode,"data-project-cloud-database-ready":et.cloudBoards.canAttempt?"true":"false","data-project-cloud-asset-upload-mode":et.cloudAssetUpload.mode,"data-project-cloud-asset-upload-ready":et.cloudAssetUpload.canAttempt?"true":"false","data-client-secret-blocked":et.forbiddenClientSecretKeys.length>0?"true":"false",children:[o.jsx("div",{className:"project-cloud-shell__icon",children:ye?o.jsx(ds,{size:22}):o.jsx(og,{size:22})}),o.jsx("strong",{children:ye?"Cloud boards are provider-ready":"Cloud projects are adapter-gated"}),o.jsx("p",{children:ye?"Supabase auth and board storage are connected for this browser session. Cloud actions call the provider adapter only from this tab.":"The original project popup had a Cloud tab for authenticated boards. This React port keeps that navigation habit visible, but cloud sync is disabled until auth and database adapters are connected."}),o.jsxs("div",{className:"project-cloud-shell__current",children:[o.jsxs("span",{children:["Current: ",ye?"Cloud ready":"Local"]}),o.jsxs("small",{children:[nt(n.name)," / ",On??Ke.cloudStatusMessage??"saved in this browser"]})]}),o.jsxs("button",{type:"button","data-testid":"project-cloud-new-board",disabled:!ye||Nt,title:ye?"Create and save a cloud board":"Cloud board creation requires the cloud adapter",onClick:hu,children:[Nt?o.jsx(Jt,{size:14,className:"spin-icon"}):o.jsx(ko,{size:14}),Nt?"Saving":"New cloud board"]}),o.jsxs("button",{type:"button","data-testid":"project-cloud-save-current",disabled:!ye||Nt,title:ye?"Save current board to Supabase":"Cloud save requires Supabase login",onClick:gu,children:[o.jsx(ad,{size:14}),"Save current"]}),o.jsxs("button",{type:"button","data-testid":"project-cloud-refresh",disabled:!ye||Nt,title:ye?"Refresh cloud boards":"Cloud refresh requires Supabase login",onClick:()=>void Gs("refresh-button"),children:[Nt?o.jsx(Jt,{size:14,className:"spin-icon"}):o.jsx(Mn,{size:14}),"Refresh cloud"]}),o.jsxs("button",{type:"button","data-testid":"project-cloud-login-shell",onClick:()=>e("/login"),children:[o.jsx(ds,{size:14}),"Open login shell"]}),ye&&o.jsxs("div",{className:"local-board-list project-gallery-cloud-list","data-testid":"project-cloud-board-list",children:[sa.map(a=>o.jsxs("button",{type:"button","data-testid":"project-cloud-board-row","data-board-id":a.id,className:"local-board-row",disabled:!!tn,onClick:()=>void pu(a),children:[o.jsx(ds,{size:15}),o.jsxs("span",{children:[o.jsx("strong",{children:nt(a.name)}),o.jsxs("small",{children:[ii(a.updatedAt)," / ",a.nodeCount," nodes"]})]}),tn===a.id&&o.jsx(Jt,{size:15,className:"spin-icon"})]},a.id)),sa.length===0&&o.jsx("p",{className:"local-board-message",children:"No cloud boards loaded."})]})]})})]})]})})})]}),Ma&&ne&&o.jsx(zl,{launchers:Aa,activeLauncher:ne,template:Xe,selectedOptionId:it,values:zt,validationMessage:Hn??(dn?null:Yn),canCreate:dn||!Yn,primaryLabel:dn?"Add template card":"Create board",onLauncherSelected:_u,onOptionSelected:Ou,onInputChanged:$u,onCreate:fu,onClose:Du}),Eo&&o.jsx("div",{className:"template-studio-chooser-backdrop","data-testid":"template-studio-chooser",onMouseDown:Fi,children:o.jsxs("section",{className:"template-studio-chooser floating-panel",onMouseDown:a=>a.stopPropagation(),children:[o.jsxs("header",{className:"template-studio-chooser__head",children:[o.jsxs("div",{children:[o.jsx("span",{children:"Template Studio"}),o.jsx("strong",{children:"Current Canvas Authoring Mode"})]}),o.jsx("button",{type:"button",title:"Close Template Studio chooser","data-testid":"template-studio-chooser-close",onClick:Fi,children:o.jsx(Et,{size:15})})]}),o.jsx("p",{className:"template-studio-chooser__description",children:"Use the existing canvas and node UI, then attach template roles and input variables before compiling a manifest."}),o.jsxs("div",{className:"template-studio-chooser__actions",children:[o.jsxs("button",{type:"button","data-testid":"template-studio-start-new",className:"template-studio-chooser__action",onClick:Uu,children:[o.jsx("span",{className:"template-studio-chooser__icon",children:o.jsx(ko,{size:17})}),o.jsxs("span",{children:[o.jsx("strong",{children:"New template board"}),o.jsx("small",{children:"Start a blank Studio draft on a new local board."})]})]}),o.jsxs("button",{type:"button","data-testid":"template-studio-convert-current",className:"template-studio-chooser__action",onClick:zu,children:[o.jsx("span",{className:"template-studio-chooser__icon",children:o.jsx(cs,{size:17})}),o.jsxs("span",{children:[o.jsx("strong",{children:"Convert current board"}),o.jsx("small",{children:"Keep this board and assign roles to existing nodes."})]})]})]})]})}),sn&&o.jsxs(o.Fragment,{children:[o.jsxs("section",{className:"template-studio-toolbar-stack","data-testid":"template-studio-toolbar",onMouseDown:a=>a.stopPropagation(),children:[o.jsxs("div",{className:"template-studio-toolbar floating-panel",children:[o.jsxs("div",{className:"template-studio-toolbar__badge",children:[o.jsx(ls,{size:15}),o.jsx("span",{children:"Template Studio"})]}),o.jsxs("div",{className:"template-studio-toolbar__meta",children:["Editing ",we.templateId]}),o.jsx("button",{type:"button",title:"Compile manifest","data-testid":"template-studio-compile",onClick:Qs,children:o.jsx(jn,{size:15})}),o.jsx("button",{type:"button",title:"Test create board","data-testid":"template-studio-test-create",onClick:Yu,children:o.jsx(Ca,{size:15})}),o.jsx("button",{type:"button",title:"Copy manifest JSON","data-testid":"template-studio-copy",onClick:()=>void Vu(),children:o.jsx(wo,{size:15})}),o.jsx("button",{type:"button",title:"Save template draft","data-testid":"template-studio-save",onClick:Hu,children:o.jsx(Cr,{size:15})}),o.jsx("button",{type:"button",title:"Exit Template Studio","data-testid":"template-studio-close",onClick:zi,children:o.jsx(Et,{size:15})})]}),o.jsx("div",{className:"template-studio-toolbar template-studio-toolbar--roles floating-panel",children:yr.filter(a=>a.studioNodeType!=="template.note").map(a=>o.jsx("button",{type:"button",title:`Add ${a.label}`,"data-testid":"template-studio-add-node","data-studio-node-type":a.studioNodeType,onClick:()=>Wu(a.studioNodeType),children:o.jsx("span",{children:a.shortLabel})},a.studioNodeType))}),ee&&o.jsxs("div",{className:"template-studio-toolbar template-studio-toolbar--selected floating-panel",children:[o.jsxs("div",{className:"template-studio-toolbar__meta template-studio-toolbar__meta--selected",children:["Selected: ",ee.title||ee.kind]}),yr.map(a=>o.jsx("button",{type:"button",title:a.label,className:oo===a.studioNodeType?"is-active":"","data-testid":"template-studio-role","data-studio-node-type":a.studioNodeType,onClick:()=>Hi(a.studioNodeType),children:o.jsx("span",{children:a.shortLabel})},a.studioNodeType))]})]}),o.jsxs("aside",{className:"template-studio-panel floating-panel","data-testid":"template-studio-panel",onMouseDown:a=>a.stopPropagation(),children:[o.jsxs("header",{className:"template-studio-panel__head",children:[o.jsxs("div",{children:[o.jsx("span",{children:"Template Meta"}),o.jsx("strong",{children:we.templateTitle})]}),o.jsx("button",{type:"button",title:"Close Template Studio",onClick:zi,children:o.jsx(Et,{size:15})})]}),o.jsxs("div",{className:"template-studio-panel__body",children:[o.jsxs("section",{className:"template-studio-panel__section",children:[o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Template Id"}),o.jsx("input",{type:"text","data-testid":"template-studio-template-id",value:we.templateId,onChange:a=>Vo("templateId",a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Template Title"}),o.jsx("input",{type:"text",value:we.templateTitle,onChange:a=>Vo("templateTitle",a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Category"}),o.jsx("input",{type:"text",value:we.category,onChange:a=>Vo("category",a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Generated Board Title"}),o.jsx("input",{type:"text",value:we.boardTitle,onChange:a=>Vo("boardTitle",a.target.value)})]})]}),ee?o.jsxs("section",{className:"template-studio-panel__section","data-testid":"template-studio-selected-node",children:[o.jsxs("div",{className:"template-studio-panel__node-summary",children:[o.jsx("strong",{children:ee.title||ee.kind}),o.jsx("span",{children:Um})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Template Role"}),o.jsxs("select",{value:oo,onChange:a=>Hi(a.target.value),children:[o.jsx("option",{value:"",children:"Unassigned"}),yr.map(a=>o.jsx("option",{value:a.studioNodeType,children:a.label},a.studioNodeType))]})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Template Node Id"}),o.jsx("input",{type:"text",value:((xl=ee.metadata)==null?void 0:xl[Y.templateNodeId])??"",onChange:a=>Kt(Y.templateNodeId,a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Compile Target"}),o.jsxs("select",{value:((Cl=ee.metadata)==null?void 0:Cl[Y.compileTarget])??"",onChange:a=>Kt(Y.compileTarget,a.target.value),children:[o.jsx("option",{value:"",children:"Auto"}),vp.map(a=>o.jsx("option",{value:a,children:a},a))]})]}),zm?o.jsxs(o.Fragment,{children:[o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Input Key"}),o.jsx("input",{type:"text",value:((kl=ee.metadata)==null?void 0:kl[Y.inputKey])??"",onChange:a=>Kt(Y.inputKey,a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Input Type"}),o.jsxs("select",{value:((Sl=ee.metadata)==null?void 0:Sl[Y.inputType])??"text",onChange:a=>Kt(Y.inputType,a.target.value),children:[o.jsx("option",{value:"text",children:"Text"}),o.jsx("option",{value:"textarea",children:"Textarea"}),o.jsx("option",{value:"select",children:"Select"})]})]}),o.jsxs("label",{className:"template-studio-panel__checkbox",children:[o.jsx("input",{type:"checkbox",checked:(((wl=ee.metadata)==null?void 0:wl[Y.inputRequired])??"").toLowerCase()==="true",onChange:a=>Kt(Y.inputRequired,String(a.target.checked))}),o.jsx("span",{children:"Required input"})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Placeholder"}),o.jsx("input",{type:"text",value:((vl=ee.metadata)==null?void 0:vl[Y.inputPlaceholder])??"",onChange:a=>Kt(Y.inputPlaceholder,a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Default Value"}),o.jsx("input",{type:"text",value:((jl=ee.metadata)==null?void 0:jl[Y.inputDefaultValue])??"",onChange:a=>Kt(Y.inputDefaultValue,a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Description"}),o.jsx("textarea",{value:((Il=ee.metadata)==null?void 0:Il[Y.inputDescription])??"",onChange:a=>Kt(Y.inputDescription,a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Select Options"}),o.jsx("textarea",{placeholder:`value|label
49
+ value2|label2`,value:((Nl=ee.metadata)==null?void 0:Nl[Y.inputOptions])??"",onChange:a=>Kt(Y.inputOptions,a.target.value)})]})]}):o.jsx("p",{className:"template-studio-panel__hint",children:"Edit title and body directly on the canvas. This panel controls the template role and compile target."})]}):o.jsx("section",{className:"template-studio-panel__section",children:o.jsx("p",{className:"template-studio-panel__hint",children:"Select a canvas node to assign a template role."})}),o.jsxs("section",{className:"template-studio-panel__section",children:[o.jsxs("div",{className:"template-studio-panel__section-head",children:[o.jsx("span",{children:"Compiled Manifest"}),Bo&&o.jsx("small",{children:Bo})]}),ge!=null&&ge.issues.length?o.jsx("div",{className:"template-studio-panel__issues","data-testid":"template-studio-issues",children:ge.issues.map(a=>o.jsxs("div",{className:"template-studio-panel__issue",children:[o.jsx("strong",{children:a.code}),o.jsx("span",{children:a.message})]},`${a.code}-${a.message}`))}):null,ge?o.jsx("pre",{className:"template-studio-panel__manifest","data-testid":"template-studio-manifest",children:ge.manifestJson}):o.jsx("p",{className:"template-studio-panel__hint",children:"Compile to preview the JSON manifest for the selected Studio nodes."})]})]})]})]}),Do&&Zo&&o.jsx(zl,{launchers:[al],activeLauncher:al,template:Zo,selectedOptionId:null,values:Ht,validationMessage:rn??nl,canCreate:!nl,onLauncherSelected:()=>{},onOptionSelected:()=>{},onInputChanged:Ku,onCreate:Xu,onClose:Gu}),o.jsx("input",{ref:Kn,type:"file",accept:"application/json,.json",multiple:!0,hidden:!0,"data-testid":"board-import-input",onChange:a=>{Cu(a.currentTarget.files),a.currentTarget.value=""}}),!pl&&o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"canvas-toolbar",role:"toolbar","aria-label":Km?"MindCanvas all tools":"MindCanvas curated tools","data-testid":"canvas-function-toolbar","data-function-toolbar-mode":Na,children:Na==="curated"?o.jsxs(o.Fragment,{children:[o.jsx("button",{type:"button",title:"Add note","data-testid":"note-node-add",onClick:()=>Ce("note"),children:o.jsx(Ts,{size:17})}),o.jsx("button",{type:"button",title:"Add image","data-testid":"image-node-add",onClick:()=>Ce("image"),children:o.jsx(In,{size:17})}),o.jsx("button",{type:"button",title:"Add video","data-testid":"video-node-add",onClick:()=>Ce("video"),children:o.jsx(Nn,{size:17})}),o.jsx("button",{type:"button",title:"Add remote monitor","data-testid":"remote-monitor-node-add",onClick:()=>Ce("remote-monitor"),children:o.jsx(Ms,{size:17})}),o.jsx("button",{type:"button",title:"Add AI Task","data-testid":"ai-task-node-add",onClick:()=>Ce("ai-task"),children:o.jsx(vn,{size:17})}),o.jsx("button",{type:"button",title:"Add file reference","data-testid":"file-node-add",onClick:()=>Ce("file"),children:o.jsx(Yr,{size:17})}),o.jsx("button",{type:"button",title:"Tools",onClick:()=>e("/tools"),children:o.jsx(ks,{size:17})}),o.jsx("span",{className:"toolbar-separator"}),o.jsx("button",{type:"button",title:"Run all graphs","data-testid":"automation-run-all","data-ai-task-total":ct.total,"data-ai-task-runnable":ct.runnable,"data-ai-task-running":ct.running,onClick:Ji,children:o.jsx(Ca,{size:17})}),o.jsx("button",{type:"button",title:"Run selected graph","data-testid":"automation-run-selected","data-selected-graph-size":Qo.size,"data-selected-graph-runnable":Qo.runnable,disabled:!ee||ee.kind!=="ai-task",onClick:Xi,children:o.jsx(Sr,{size:17})}),o.jsx("button",{type:"button",title:"Pause running AI tasks","data-testid":"automation-pause","data-running-ai-tasks":ct.running,onClick:Zi,children:o.jsx(Io,{size:17})}),o.jsx("button",{type:"button",title:"Stop active AI tasks","data-testid":"automation-stop","data-active-ai-tasks":ct.active,"data-paused-ai-tasks":ct.paused,onClick:Qi,children:o.jsx(nd,{size:15})}),o.jsx("button",{type:"button",title:st?"Generating flow":"Generate flow",disabled:!ee||st,onClick:()=>void el(),children:st?o.jsx(Jt,{size:17,className:"spin-icon"}):o.jsx(cs,{size:17})}),o.jsx("span",{className:"toolbar-separator"}),o.jsx("button",{type:"button",title:"Undo","data-testid":"history-undo",disabled:d.length===0,onClick:qo,children:o.jsx(od,{size:17})}),o.jsx("button",{type:"button",title:"Redo","data-testid":"history-redo",disabled:m.length===0,onClick:Jo,children:o.jsx(sd,{size:17})})]}):o.jsxs(o.Fragment,{children:[o.jsx("button",{type:"button",title:"Add note","data-testid":"note-node-add",onClick:()=>Ce("note"),children:o.jsx(Ts,{size:17})}),o.jsx("button",{type:"button",title:"Add memo","data-testid":"memo-node-add",onClick:()=>Ce("memo"),children:o.jsx(pc,{size:17})}),o.jsx("button",{type:"button",title:"Add markdown","data-testid":"markdown-node-add",onClick:()=>Ce("markdown"),children:o.jsx(wt,{size:17})}),o.jsx("button",{type:"button",title:"Add CSV table","data-testid":"csv-table-node-add",onClick:()=>Ce("csv-table"),children:o.jsx(Ql,{size:17})}),o.jsx("button",{type:"button",title:"Add code","data-testid":"code-node-add",onClick:()=>Ce("code"),children:o.jsx(jn,{size:17})}),o.jsx("button",{type:"button",title:"Add AI Task","data-testid":"ai-task-node-add",onClick:()=>Ce("ai-task"),children:o.jsx(vn,{size:17})}),o.jsx("button",{type:"button",title:"Add Code Note","data-testid":"code-note-node-add",onClick:Zu,children:o.jsx(jn,{size:17})}),o.jsx("button",{type:"button",title:"Add Agent Command","data-testid":"agent-command-node-add",onClick:Ju,children:o.jsx(sg,{size:17})}),o.jsx("button",{type:"button",title:"Add image generation spec","data-testid":"image-generate-node-add",onClick:()=>Ce("ai-task","image-generate"),children:o.jsx(In,{size:17})}),o.jsx("button",{type:"button",title:"Add video generation spec","data-testid":"video-generate-node-add",onClick:()=>Ce("ai-task","video-generate"),children:o.jsx(Nn,{size:17})}),o.jsx("button",{type:"button",title:"Add image","data-testid":"image-node-add",onClick:()=>Ce("image"),children:o.jsx(In,{size:17})}),o.jsx("button",{type:"button",title:"Add image mask","data-testid":"mask-node-add",onClick:()=>Ce("mask"),children:o.jsx(rg,{size:17})}),o.jsx("button",{type:"button",title:"Add video","data-testid":"video-node-add",onClick:()=>Ce("video"),children:o.jsx(Nn,{size:17})}),o.jsx("button",{type:"button",title:"Add embed","data-testid":"embed-node-add",onClick:()=>Ce("embed"),children:o.jsx(An,{size:17})}),o.jsx("button",{type:"button",title:"Add remote monitor","data-testid":"remote-monitor-node-add",onClick:()=>Ce("remote-monitor"),children:o.jsx(Ms,{size:17})}),o.jsx("button",{type:"button",title:"Add PDF","data-testid":"pdf-node-add",onClick:()=>Ce("pdf"),children:o.jsx(wt,{size:17})}),o.jsx("button",{type:"button",title:"Add file reference","data-testid":"file-node-add",onClick:()=>Ce("file"),children:o.jsx(Yr,{size:17})}),o.jsx("button",{type:"button",title:"Add directory reference","data-testid":"directory-node-add",onClick:()=>Ce("directory"),children:o.jsx(kr,{size:17})}),o.jsx("button",{type:"button",title:"Templates","data-testid":"template-launcher-open",onClick:Bu,children:o.jsx(ls,{size:17})}),o.jsx("button",{type:"button",title:"Template Studio",className:sn||Eo?"is-active":"","data-testid":"template-studio-open",onClick:Fu,children:o.jsx(td,{size:17})}),o.jsx("button",{type:"button",title:"Import board JSON","data-testid":"board-import-open",onClick:xu,children:o.jsx(ig,{size:17})}),o.jsx("button",{type:"button",title:"Tools",onClick:()=>e("/tools"),children:o.jsx(ks,{size:17})}),o.jsx("span",{className:"toolbar-separator"}),o.jsx("button",{type:"button",title:"Run all graphs","data-testid":"automation-run-all","data-ai-task-total":ct.total,"data-ai-task-runnable":ct.runnable,"data-ai-task-running":ct.running,onClick:Ji,children:o.jsx(Ca,{size:17})}),o.jsx("button",{type:"button",title:"Run selected graph","data-testid":"automation-run-selected","data-selected-graph-size":Qo.size,"data-selected-graph-runnable":Qo.runnable,disabled:!ee||ee.kind!=="ai-task",onClick:Xi,children:o.jsx(Sr,{size:17})}),o.jsx("button",{type:"button",title:"Pause running AI tasks","data-testid":"automation-pause","data-running-ai-tasks":ct.running,onClick:Zi,children:o.jsx(Io,{size:17})}),o.jsx("button",{type:"button",title:"Stop active AI tasks","data-testid":"automation-stop","data-active-ai-tasks":ct.active,"data-paused-ai-tasks":ct.paused,onClick:Qi,children:o.jsx(nd,{size:15})}),o.jsx("button",{type:"button",title:st?"Generating flow":"Generate flow",disabled:!ee||st,onClick:()=>void el(),children:st?o.jsx(Jt,{size:17,className:"spin-icon"}):o.jsx(cs,{size:17})}),o.jsx("span",{className:"toolbar-separator"}),o.jsx("button",{type:"button",title:"Undo","data-testid":"history-undo",disabled:d.length===0,onClick:qo,children:o.jsx(od,{size:17})}),o.jsx("button",{type:"button",title:"Redo","data-testid":"history-redo",disabled:m.length===0,onClick:Jo,children:o.jsx(sd,{size:17})})]})}),o.jsxs("div",{className:"search-panel floating-panel","data-testid":"mindcanvas-search-panel","data-search-engine":se,"data-search-worker-state":fe,children:[o.jsxs("div",{className:"search-input-row",children:[o.jsx(lg,{size:16}),o.jsx("input",{ref:un,"data-testid":"mindcanvas-search-input","aria-label":"Search text",value:N,onChange:a=>_(a.target.value),onKeyDown:Bm,placeholder:"Search text ..."}),o.jsx("span",{className:"search-count","data-testid":"mindcanvas-search-count","aria-live":"polite",children:Gm}),o.jsx("button",{type:"button",title:"Previous search result","data-testid":"mindcanvas-search-prev",disabled:$.length===0,onClick:()=>no(-1),children:o.jsx(dg,{size:14})}),o.jsx("button",{type:"button",title:"Next search result","data-testid":"mindcanvas-search-next",disabled:$.length===0,onClick:()=>no(1),children:o.jsx(fc,{size:14})})]}),dl&&o.jsx("div",{className:"search-current","data-testid":"mindcanvas-search-current","aria-live":"polite",children:cl?o.jsxs(o.Fragment,{children:[o.jsxs("span",{children:[W+1," / ",$.length]}),o.jsxs("button",{type:"button","data-testid":"mindcanvas-search-focus",onClick:()=>cr("current-button"),children:["Focus ",cl.title]})]}):o.jsx("span",{children:"No matches"})}),$.length>0&&o.jsx("div",{className:"search-results","data-testid":"mindcanvas-search-results",children:$.map((a,s)=>o.jsxs("button",{type:"button","data-testid":"mindcanvas-search-result",className:s===W?"is-active":"","aria-current":s===W?"true":void 0,onMouseEnter:()=>re(s),onClick:()=>dr(a,"result-click"),children:[o.jsx("strong",{children:a.title}),o.jsx("span",{children:a.body.slice(0,84)})]},a.id))})]})]}),V&&o.jsxs("div",{className:"connection-toast floating-panel",children:[o.jsx(Cr,{size:14}),V.dragging?`Release over another node connector to create a ${V.kind} line.`:`Drag from a connector, or select another node connector, to create a ${V.kind} line.`,o.jsx("button",{type:"button",onClick:()=>G(null),children:"Cancel"})]}),(Lt==null?void 0:Lt.result)&&o.jsxs("section",{className:"result-popover floating-panel","data-testid":"ai-result-popover",children:[o.jsxs("div",{className:"result-popover__header",children:[o.jsxs("strong",{children:[Lt.title," Result"]}),o.jsx("button",{type:"button",title:"Close",onClick:()=>ae(null),children:o.jsx(Et,{size:14})})]}),es&&o.jsxs("div",{className:"result-popover__meta","data-result-source-tone":es.tone,"data-testid":"ai-result-source",children:[o.jsx("span",{children:es.label}),o.jsx("small",{children:es.detail})]}),o.jsxs("div",{className:"result-popover__actions","data-testid":"ai-result-popover-actions",children:[o.jsxs("button",{type:"button",title:"Copy result",onClick:()=>void Tm(Lt),children:[o.jsx(wo,{size:14}),o.jsx("span",{children:"Copy"})]}),o.jsxs("button",{type:"button",title:"Archive result as a Markdown node",onClick:()=>Rm(Lt),children:[o.jsx(wt,{size:14}),o.jsx("span",{children:"Archive"})]}),o.jsxs("button",{type:"button",title:"Stage a follow-up AI Task from this result",onClick:()=>Lm(Lt),children:[o.jsx(vn,{size:14}),o.jsx("span",{children:"Follow-up"})]})]}),o.jsx("pre",{className:"result-popover__body",children:Lt.result})]}),It&&o.jsx(Vf,{url:It.url,fileName:It.fileName,onClose:()=>{Ze(null),f.emit("node.pdf.preview.close")}}),sl&&o.jsx(jp,{node:sl,onSave:rm,onClose:sm}),Ia&&o.jsx(Ip,{settings:n.settings,onPatchSettings:ve,onClose:Pu}),ol&&o.jsx(Wf,{board:n,rootNode:ol,onClose:xm,onStatus:Gi,onRemove:Ki,onSubmitFollowUp:km,onApproval:Cm,onAddArtifact:Sm}),ht&&o.jsx(Np,{board:n,selectedNode:ee??null,selectedCount:p.length,input:w,viewport:_e,viewportSize:U,localBridgeState:Re,syncStatus:Sa,syncMessage:Bn,buildPrompt:Wm,navigate:e,onClose:Eu}),!pl&&o.jsxs("div",{className:"global-input-shell","data-active-submits":B,"data-submit-state":B>0?"active":"idle",onFocusCapture:()=>void Zn("input-focus"),onPointerDown:()=>void Zn("input-pointer"),children:[o.jsx("textarea",{ref:Gn,"data-testid":"global-input-textarea",value:w,placeholder:(ee==null?void 0:ee.kind)==="ai-task"?"Run selected AI Task...":"Talk with AI...",onChange:a=>P(a.target.value),onKeyDown:a=>{a.repeat||a.nativeEvent.isComposing||a.keyCode===229||(a.ctrlKey||a.metaKey)&&a.key==="Enter"&&(a.preventDefault(),qi())}}),o.jsxs("div",{className:"input-controls",children:[o.jsx("button",{className:`input-settings-button ${Ia?"is-active":""}`,type:"button",title:"AI Settings","aria-label":"AI Settings","aria-pressed":Ia?"true":void 0,"data-testid":"ai-settings-open",onClick:Lu,children:o.jsx(ks,{size:16})}),["Text","Image","Video"].map(a=>o.jsx("button",{className:n.settings.inputMode===a?"is-active":"",type:"button","data-testid":`global-input-mode-${a.toLowerCase()}`,onClick:()=>{Di("inputMode",a),Zn(`mode-${a.toLowerCase()}`)},children:a},a)),n.settings.inputMode==="Text"&&o.jsxs(o.Fragment,{children:[o.jsx(ms,{value:Su,options:wu,onChange:a=>Mu(a),ariaLabel:"Text model",className:"catalog-pill--model",menuClassName:"catalog-pill__menu--model",testId:"text-model-select"}),o.jsx(ms,{value:n.settings.effort,options:Au,onChange:a=>Di("effort",a),ariaLabel:"Reasoning effort",className:"catalog-pill--effort",testId:"reasoning-effort-select"})]}),kt&&pr&&o.jsxs(o.Fragment,{children:[o.jsx(ms,{value:pr.model.id,options:kt==="Image"?vu:ju,onChange:a=>Tu(kt,a),ariaLabel:`${kt} model`,className:"catalog-pill--model",menuClassName:"catalog-pill__menu--model",testId:`${kt.toLowerCase()}-model-select`}),o.jsx(ms,{value:pr.aspect.id,options:kt==="Image"?Iu:Nu,onChange:a=>Ru(kt,a),ariaLabel:`${kt} aspect ratio`,className:"catalog-pill--aspect",testId:`${kt.toLowerCase()}-aspect-select`})]}),o.jsx("span",{className:"input-controls__spacer"}),o.jsx("span",{className:"global-submit-count","aria-live":"polite",children:B}),o.jsx("button",{className:"send-button",type:"button",title:"Submit","data-testid":"global-input-submit",disabled:!Ym,onClick:qi,children:o.jsx(Sr,{size:18})})]})]}),o.jsxs("div",{className:"canvas-view-control-stack","data-testid":"canvas-view-controls",children:[o.jsxs("section",{className:"canvas-view-panel floating-panel","aria-label":"Canvas grid controls","data-testid":"canvas-grid-controls",children:[Gc.map(a=>o.jsx("button",{type:"button",title:`Use ${a} grid`,"aria-label":`Use ${a} grid`,"aria-pressed":as===a,className:as===a?"is-active":"","data-testid":`canvas-grid-mode-${a}`,onClick:()=>am(a),children:a==="dot"?o.jsx(cg,{size:15}):a==="line"?o.jsx(ug,{size:15}):a==="particles"?o.jsx(ed,{size:15}):o.jsx(cs,{size:15})},a)),o.jsx("span",{className:"canvas-view-panel__separator"}),o.jsx("button",{type:"button",title:"Toggle grid snap","aria-label":"Toggle grid snap","aria-pressed":ul,className:ul?"is-active":"","data-testid":"canvas-grid-snap-toggle",onClick:nm,children:o.jsx(mg,{size:15})})]}),o.jsxs("section",{className:"canvas-bookmark-strip floating-panel","aria-label":"Camera bookmarks","data-testid":"camera-bookmark-strip",children:[o.jsx("button",{type:"button",title:"Go to home view","aria-label":"Go to home view","data-testid":"camera-bookmark-home",onClick:er,children:o.jsx(pg,{size:15})}),(()=>{const a=!!bs(ml[xa]);return o.jsx("button",{type:"button",title:a?"Go to camera slot N. Shift-click to save.":"Slot N empty. Click for Home, shift-click to save.","aria-label":a?"Go to camera slot N":"Empty camera slot N","data-testid":"camera-bookmark-slot-n","data-slot-saved":a?"true":"false",className:`canvas-bookmark-slot ${a?"is-saved":""}`,onClick:s=>{s.shiftKey||s.altKey?Ba(xa):Qn(xa)},children:o.jsx("span",{"aria-hidden":"true",children:"N"})})})(),Rr.map(a=>{const s=!!bs(ml[a]);return o.jsx("button",{type:"button",title:s?`Go to camera slot ${a}. Shift-click to save.`:`Slot ${a} empty. Click for Home, shift-click to save.`,"aria-label":s?`Go to camera slot ${a}`:`Empty camera slot ${a}`,"data-testid":`camera-bookmark-slot-${a}`,"data-slot-saved":s?"true":"false",className:`canvas-bookmark-slot ${s?"is-saved":""}`,onClick:i=>{i.shiftKey||i.altKey?Ba(a):Qn(a)},children:o.jsx("span",{"aria-hidden":"true",children:a})},a)}),o.jsx("button",{type:"button",title:"Save current camera to the next empty slot","aria-label":"Save current camera to the next empty slot","data-testid":"camera-bookmark-save-next",onClick:tm,children:o.jsx(gg,{size:15})})]})]}),o.jsxs("div",{className:"bottom-controls",children:[o.jsx("button",{type:"button",title:"Mouse wheel mode","aria-label":"Toggle mouse wheel mode","aria-pressed":n.settings.wheelMode,className:n.settings.wheelMode?"is-active":"","data-testid":"canvas-wheel-mode-toggle","data-wheel-mode":n.settings.wheelMode?"mouse":"trackpad",onClick:()=>tr("button"),children:o.jsx(hg,{size:17})}),o.jsx("button",{type:"button",title:`Cursor direction ${n.settings.cursorDirection==="down"?"down":"right"}`,"aria-label":"Toggle cursor direction","aria-pressed":n.settings.cursorDirection==="down",className:n.settings.cursorDirection==="down"?"is-active":"","data-testid":"canvas-cursor-direction-toggle","data-cursor-direction":n.settings.cursorDirection==="down"?"down":"right",onClick:()=>ar("button"),children:o.jsx(fg,{size:17})}),o.jsx("button",{type:"button",title:"Reset fixture",onClick:_m,children:o.jsx(bg,{size:17})}),o.jsx("button",{type:"button",title:ft?"Exit read mode":"Fullscreen","aria-label":ft?"Exit read mode":"Fullscreen","aria-pressed":ft,className:ft?"is-active":"","data-testid":"canvas-read-mode-toggle","data-read-mode":ft?"true":"false",onClick:()=>{eo("button")},children:o.jsx(Jl,{size:17})})]}),n.settings.minimapEnabled&&ut&&o.jsxs("section",{className:"canvas-minimap floating-panel","aria-label":"Canvas minimap","data-testid":"canvas-minimap",children:[o.jsxs("div",{className:"canvas-minimap__head",children:[o.jsx("span",{children:"Minimap"}),o.jsx("small",{children:n.nodes.length})]}),o.jsxs("button",{type:"button",className:"canvas-minimap__stage","aria-label":"Navigate canvas minimap","data-testid":"canvas-minimap-stage",onPointerDown:Vm,children:[ut.nodes.map(a=>o.jsx("span",{className:`canvas-minimap__node canvas-minimap__node--${a.kind} ${p.includes(a.id)?"is-selected":""}`,style:{left:`${a.x}px`,top:`${a.y}px`,width:`${a.width}px`,height:`${a.height}px`}},a.id)),o.jsx("span",{className:"canvas-minimap__viewport",style:{left:`${ut.viewport.x}px`,top:`${ut.viewport.y}px`,width:`${ut.viewport.width}px`,height:`${ut.viewport.height}px`}})]})]}),o.jsxs("div",{className:"canvas-status",children:[n.nodes.length," nodes / ",$a.length," rendered / ",n.edges.length," edges / ",Math.round(_e.scale*100),"%",((Al=n.source)==null?void 0:Al.kind)==="localBridge"&&o.jsxs(o.Fragment,{children:[" ","/ LocalBridge",n.source.partialImport?" partial":"",n.source.truncated?` ${n.source.renderedNodeCount}/${n.source.originalNodeCount}`:""]})]})]})}function rc(e){switch(e){case"checking":return"Checking";case"connected":return"Connected";case"blocked":return"Access gated";case"unavailable":return"Unavailable";default:return"Idle"}}export{ex as MindCanvas};