@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.
@@ -1,49 +0,0 @@
1
- var Km=Object.defineProperty;var Xm=(e,t,n)=>t in e?Km(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Pl=(e,t,n)=>Xm(e,typeof t!="symbol"?t+"":t,n);import{r as g,j as o,a as qm}from"./vendor-react-BXzpOyCS.js";import{l as Jm,a as St,s as Kt,b as Zm,d as Qm,r as ep,c as tp,e as ap,i as El}from"./storage-RP5Dyxmq.js";import{r as pi,g as Ds,w as np,a as hr,d as _l,b as op,t as gi,n as hi,c as Hr,e as sp,p as ic,v as rp,R as ip,f as lp,u as dp,h as cp,i as Bl,s as tt,j as io,l as fr,k as lo,m as ss,o as co,q as uo,x as rs,y as Xt,z as Dl,A as Ua,B as up,C as Ol,D as mp,E as pp,F as gp,G as hp,H as fp,I as bp,J as yp,K as Jt,L as lc,T as xp,M as Cp,N as Fl,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 $l,Z as Y,_ as br,$ as Co,a0 as kp,a1 as Sp,a2 as Ul,a3 as zl,a4 as yr,a5 as wp,a6 as vp,a7 as jp,a8 as Ip,a9 as Np,aa as Ap,ab as Mp,ac as Tp,ad as Rp,ae as Lp,af as Pp}from"./canvas-runtime-D3amtMwe.js";import{e as Ep,d as _p}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-CRFVvbLN.js";import{r as uc}from"./productionAdapterConfig-C5jfk6oG.js";import{getSupabaseBrowserClient as Os}from"./supabaseAuthAdapter-CuJuASQT.js";import{c as Bp,a as Dp,r as Wl}from"./toolHandoff-D5e5f7t5.js";import{a as Vl,s as Op}from"./executionModeSettings-NJqurj-o.js";import{a as Yl,p as Fp}from"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";import{A as $p,D as Up,E as jn,w as In,I as Nn,V as An,l as Ms,F as wt,J as zp,N as Yr,O as Ts,Q as Mn,W as mc,Y as Hp,Z as pc,_ as Wp,i as wo,$ as gc,a0 as Vp,a1 as Gl,a2 as Yp,a3 as Ca,a4 as Kl,T as Rs,a5 as Xl,a6 as No,a7 as Gp,R as vo,a8 as ks,a9 as hc,aa as Gr,X as Pt,o as fc,ab as Kp,ac as Xp,f as qp,ad as ql,ae as Jp,h as ko,x as Zp,af as Qp,ag as eg,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 qt,c as tg,ao as ag,ap as kr,aq as ad,ar as ng,as as cs,at as Sr,au as nd,av as od,aw as sd,ax as og,ay as sg,az as rg,aA as ig,n as lg,aB as dg,aC as cg,aD as ug,aE as mg,aF as pg,aG as gg,aH as hg,aI as fg}from"./vendor-icons-DE3gIReG.js";const bg=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 q(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 yg(e){return vt(e)?Kr(e.x??e.X,e.y??e.Y,e.z??e.Z):null}function xg(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 Cg(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=yg(c);m&&(r[d]=m)}return Object.keys(r).length>0?r:void 0}catch{return}}function kg(e){if(!e||Object.keys(e).length===0)return null;const t={};for(const[n,r]of Object.entries(e)){const d=xg(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 Fs(){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=q(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 Sg(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=q(p).trim();b&&r.add(b)}}if(r.size>0)for(let m=n.length-1;m>=0;m-=1){const y=q((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=q(m.Id).trim();p&&d.set(p,y)});for(const m of Ps(t)){const y=q(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 wg(e,t){const n=`.mindexec/boards/${e}.msgpack`,r=`boards/${e}.msgpack`;for(const y of[n,r])try{const p=await op(y,t);return{payload:_p(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=q(e.Id).trim()||q(e.BoardId).trim();return t?{Id:t,Title:q(e.Title)||null,Description:q(e.Description)||null,ThumbnailUrl:q(e.ThumbnailUrl)||null,CreatedAt:q(e.CreatedAt)||null,UpdatedAt:q(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:q(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 vg(e){const t=e.toLowerCase();return jg(t)?"remote-control":Ig(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 jg(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 Ig(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 Ng(e,t){const n=e.Metadata||{},r=n.ThumbnailUrl,d=n.OriginalUrl,c=n.OriginalPath;return gi(q(r)||q(d)||q(c)||q(e.Response),t)}function Ag(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=q(y.AssetId).trim(),w=gi(b,n)||t;return w?{variantId:q(y.VariantId)||`variant-${q(e.Id)||p}`,imageUrl:w,assetId:b||void 0,caption:q(y.Caption)||void 0,sourceNodeId:q(e.Id)||void 0,createdAtUtc:q(y.CreatedAtUtc)||void 0}:null}).filter(y=>!!y);if(c.length===0)return;const m=q(r==null?void 0:r.ActiveVariantId);return{activeVariantId:c.some(y=>y.variantId===m)?m:c[0].variantId,variants:c,kind:q(r==null?void 0:r.Kind)||"versions",title:q(r==null?void 0:r.Title)||void 0,updatedAtUtc:q(r==null?void 0:r.UpdatedAtUtc)||void 0}}function Mg(e,t){return!e||e.variants.length===0?t:(e.variants.find(r=>r.variantId===e.activeVariantId)??e.variants[0]).imageUrl||t}function Tg(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:Ao(e.imageUrl,t)||e.imageUrl,title:e.title,sourceNodeId:e.id,createdAtUtc:n}]:[];if(r.length===0)return null;const d=r.map(I=>({VariantId:I.variantId||Fs(),AssetId:I.assetId||Ao(I.imageUrl,t)||I.imageUrl,CreatedAtUtc:I.createdAtUtc||n,Caption:I.caption||I.title||null}));return{ActiveVariantId:(p=e.imageStack)!=null&&p.activeVariantId&&d.some(I=>{var _;return I.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 Rg(e,t){const n=e.Metadata||{};return gi(q(n.OriginalUrl)||q(n.OriginalPath)||q(n.SourceFilePath)||q(e.SourceFilePath)||q(e.Response),t)}function Lg(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 Pg(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 Ao(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 Eg(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 _g(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:Fs(),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 Bg(e,t,n,r,d){var b,w,P;const c=Pg(e.kind),m=c==="image"||c==="mask"?Ao(e.imageUrl,d):"",y=["video","pdf","file","directory","embed"].includes(c)?Ao(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 I=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=I),p.url??(p.url=I),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"?Tg(e,d,r):null}}function Dg(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 Og(e,t,n){const r=q(e.ContentType)||"note",d=q(e.Prompt).trim(),c=q(e.Response).trim(),m=Lg(e.Metadata),y=q(e.Id).trim();y&&(m[Ka]??(m[Ka]=y));const b=["true","1","yes"].includes(String(m.ImageRouterMask||m.IsMask||"").trim().toLowerCase())?"mask":vg(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()),I=q(e.SourceFilePath)||m.OriginalPath||m.SourceFilePath||"",_=b==="video"||b==="pdf"||b==="file"||b==="directory"||b==="embed"?Rg(e,n):void 0,B=d||e.SourceFilePath||r||"LocalBridge node",$=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||I||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":b==="pdf"||b==="file"||b==="directory"||b==="embed"?c||I||d||r:c||d||I||"",F=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"?Ng(e,n):void 0,re=b==="image"?Ag(e,W,n):void 0,se=!!(e.IsChunkedText||m.IsChunkedText==="true"),je=ya(e.TotalLineCount??m.TotalLineCount,0),he=ya(e.ScrollOffset,0),ze=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:$,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,F))),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:Mg(re,W),imageStack:re,assetUrl:_,sourceFilePath:I||void 0,isChunkedText:se||void 0,totalLineCount:se?je:void 0,scrollOffset:se?he:void 0,maxScroll:se?ze: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"?$g(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 $g(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 Ug(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 zg(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 Hg(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 Wg(e,t,n,r=Ds(),d=null){var It,Je,Ee,Oe,Ae,_t;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((Je=e.source)!=null&&Je.truncated)throw new Error("This board was truncated during import. Export is blocked to avoid data loss.");const c=(Ee=e.source)!=null&&Ee.exportedByReact?String(e.source.boardId||""):"",m=Ls(c),y=Ls(c)?c:Fs(),p=new Date().toISOString(),b=_g(e.nodes),w=b.map(U=>U.node),P=new Map(b.map(U=>[U.node.id,U.originalId])),I=Eg(e.edges,P),_=b.map(({node:U,originalId:_e})=>Bg(U,_e,I.get(_e),p,r)),B=b.map(({node:U,originalId:_e})=>Dg(U,_e)),$=t.scale>0?t.scale:1,F=(window.innerWidth/2-t.x)/$,H=(window.innerHeight/2-t.y)/$,W=1400/$,re=Number((d==null?void 0:d.x)??((Oe=e.viewState)==null?void 0:Oe.cursorX)??0),se=Number((d==null?void 0:d.y)??((Ae=e.viewState)==null?void 0:Ae.cursorY)??0),je=(_t=e.nodes.find(U=>U.kind==="image"&&U.imageUrl))==null?void 0:_t.imageUrl,he={Id:y,UserId:"00000000-0000-0000-0000-000000000000",Title:e.name||"Untitled Board",Description:"Exported from MindExec React",ThumbnailUrl:Ao(je,r)||"",IsPublic:!1,CreatedAt:p,SyncedCloudBoardId:null,LastSyncedAt:null,LastCloudCopyStatus:null,UpdatedAt:p,LastCameraX:F,LastCameraY:H,LastCameraZ:W,LastCursorX:Number.isFinite(re)?re:0,LastCursorY:Number.isFinite(se)?se:0,CameraBookmarks:kg(e.settings.cameraBookmarks)},ze=`.mindexec/boards/${y}.msgpack`,jt=`.mindexec/boards/${y}.json`,nt=`.mindexec/boards/${y}.layout.json`,V=`.mindexec/boards/${y}.delta.json`,G=`boards/${y}.delta.json`,ie=await Hg(r),ae=[he,...ie.filter(U=>q(U.Id)!==y)],mt=Ep(_);await np(ze,mt,n,r),await hr(jt,JSON.stringify(_,null,2),n,r),await hr(nt,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:he,source:{kind:"localBridge",boardId:y,loadedAt:p,originalNodeCount:_.length,renderedNodeCount:_.length,truncated:!1,exportedByReact:!0,snapshotFormat:"msgpack"},nodes:w,msgpackPath:ze,boardPath:jt,layoutPath:nt}}async function Vg(e,t,n=Ds()){const r=await wg(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?Sg(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,bg),b=p.map(se=>Og(se,y.get(String(se.Id||"")),n.baseUrl??Ds())),w=new Set(b.map(se=>se.id)),P=Ug(p,w),I=r.length>b.length,_=d,B=n.deltaApplied===!0,$=n.boardId||Fs(),F=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:$,nodes:b.length,originalNodes:r.length,truncated:I,snapshotFormat:n.snapshotFormat,partialImport:_,deltaImport:d,deltaApplied:B,deltaUpserts:c,deltaDeletes:m}),{id:`localBridge:${$}`,name:n.title||"LocalBridge Board",nodes:b,edges:P,settings:{...t,cameraBookmarks:Cg(n.cameraBookmarks)},viewState:re?{cursorX:H,cursorY:W}:void 0,updatedAt:F,source:{kind:"localBridge",boardId:$,loadedAt:new Date().toISOString(),snapshotFormat:n.snapshotFormat,originalNodeCount:r.length,renderedNodeCount:b.length,truncated:I,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 Yg(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 ${sp(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 Gg(e){const t=Jg(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=qg(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 Kg(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"?Zg(n):t==="zh"?Ac(n):!0}function ld(e,t){const n=e.trim()||"the selected note",r=Xg(n,t);return{nodes:r,edges:wc(r)}}function Xg(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 qg(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 Jg(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 Zg(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(","),Qg=/^[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 eh(e){if(Qg.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 th(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 ah(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 nh(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 oh(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=ah(c,n);return f.emit("projectStorage.cloud.load.loaded",{boardId:t,nodes:y.nodes.length,edges:y.edges.length}),y}async function sh(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=eh(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},I={...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 $={content_json:th(I),updated_at:y},{data:F,error:H}=await c.from("boards").update($).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=F?Tc(F):{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 rh(e,t={},n=Qr(e),r){if(e.length===0)return{after:new Map,boundsAfter:n};const d=wh(t.mode),c=vh(t.order),m=jh(t.anchor),y=Ih(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),I=e.map(ih),_=yh(I,c),B=_.map(he=>he.width),$=_.map(he=>he.height),F=Math.max(1,t.cellWidth??ud(B,P)),H=Math.max(1,t.cellHeight??ud($,P)),W=Math.max(1,t.targetWidth??F),re=Math.max(1,t.targetHeight??H),se=bh(m,n);if(d==="grid"){ph(_,y,W,re,F,H);const he=cd(t.columns,w,n.maxX-n.minX,F,p);dh(_,se.x,se.y,he,F,H,p,b)}else if(d==="masonry"){gh(_,y==="preserve"?"uniformWidth":y,W);const ze=cd(t.columns,w,n.maxX-n.minX,W,p);ch(_,se.x,se.y,ze,W,p,b)}else d==="stripHorizontal"?(hh(_,y==="preserve"?"uniformHeight":y,re),uh(_,se.x,se.y,p,re)):(fh(_,y==="preserve"?"uniformWidth":y,W),mh(_,se.x,se.y,b,W));let je=new Map(_.map(he=>[he.id,lh(he)]));return m==="selectionBoundsCenter"&&(je=Ch(n,je)),t.snapToGrid&&(je=kh(je,Math.max(1,t.gridSize??8))),{after:je,boundsAfter:Qr(Array.from(je.values()))}}function ih(e){return{...e,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function lh(e){return{x:e.x,y:e.y,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function dh(e,t,n,r,d,c,m,y){e.forEach((p,b)=>{const w=Math.floor(b/r),P=b%r,I=t+P*(d+m),_=n+w*(c+y);p.x=I+(d-p.width)/2,p.y=_+(c-p.height)/2})}function ch(e,t,n,r,d,c,m){const y=Array.from({length:r},()=>0);for(const p of e){const b=Sh(y),w=t+b*(d+c);p.x=w+(d-p.width)/2,p.y=n+y[b],y[b]+=p.height+m}}function uh(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 mh(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 ph(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 gh(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 hh(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 fh(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 bh(e,t,n){return{x:t.minX,y:t.minY}}function yh(e,t){return t==="selectionOrder"?[...e].sort((n,r)=>n.selectionIndex-r.selectionIndex):xh(e)}function xh(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 Ch(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 kh(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 Sh(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 wh(e){const t=$s(e);return t==="grid"?"grid":t==="striphorizontal"||t==="striph"?"stripHorizontal":t==="stripvertical"||t==="stripv"?"stripVertical":"masonry"}function vh(e){return $s(e)==="selectionorder"?"selectionOrder":"spatialReading"}function jh(e){const t=$s(e);return t==="selectionboundscenter"?"selectionBoundsCenter":t==="viewporttopleft"?"viewportTopLeft":"selectionBoundsTopLeft"}function Ih(e){const t=$s(e);return t==="fitcelldownonly"?"fitCellDownOnly":t==="uniformwidth"?"uniformWidth":t==="uniformheight"?"uniformHeight":"preserve"}function $s(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,Nh=800;function ke(e){return typeof e=="string"?e.length*2:0}function Ah(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 Mh(e){let t=1024+ke(e.id)+ke(e.name)+ke(e.updatedAt);return t+=e.nodes.reduce((n,r)=>n+Ah(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:Mh(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??Nh,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 Th(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 Rh(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=Rh(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 Fc(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 Lh=2048,Ph=16e3,vr=1024,jr=64,Eh=2048,Ir=3,_h=16,Bh=256,Dh=new Set(["text","note","memo","markdown","code","directory"]),Oh=/[\p{L}\p{M}\p{N}]{2,}/gu,gd=4,Fh=8,hd=1.35;function $h(e){return Dh.has(String(e||"").trim().toLowerCase())}function Uh(e){const t=e.map(Hh),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 zh(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($c(d)),y=Array.from(Uc(m)),p=Hc(d),b=Array.from(zc(p)),w=new Map;for(const $ of m)Ar(e.tokenIndex,$,w,8);for(const $ of y)Ar(e.prefixIndex,$,w,$.length<=3?4:2);for(const $ of b)Ar(e.ngramIndex,$,w,1.15);const P=Gh(e,w,r),I=Kh(n.allowedContentTypes),_=[];for(const $ of P){const F=e.documentById.get($);if(!F||I&&!I.has(F.contentType))continue;const H=Vh(F,d,m,b);if(H<=0)continue;const W=Yh(F,n.viewport??null);_.push({nodeId:F.id,score:H+W,textScore:H,viewportBoost:W})}_.sort(($,F)=>F.score-$.score||$.nodeId.localeCompare(F.nodeId));const B=_.slice(0,r);return{hits:B,profile:fd(e,P.length,B.length,n.viewport,B.filter($=>$.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}Xh(c)||(r+=c,d=!1)}return r.trim()}function $c(e){return new Set(e.match(Oh)??[])}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 Hh(e){const t=String(e.kind??"").trim().toLowerCase(),n=Ya(e.prompt??e.title,Lh),r=$h(t)?Ya(e.response??e.body,Ph):"",d=Wh(e.metadata,e.tags,e.metadataText),c=Ya(e.sourceFilePath||e.assetUrl,Eh),m=Sn(n),y=Sn(r),p=Sn(d),b=Sn(c),w=Sn(t),P=[m,p,b,y,w].filter(Boolean).join(" "),I=$c(P);return{id:String(e.id),contentType:t,normalizedPrompt:m,normalizedResponse:y,normalizedMetadata:p,normalizedSourcePath:b,normalizedContentType:w,tokens:I,prefixes:Uc(I),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 Wh(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 Vh(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 Yh(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 Gh(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*_h,Bh)).map(([r])=>r)}function Kh(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 Xh(e){const t=e.codePointAt(0)??0;return t<=31||t>=127&&t<=159}const qh=2147483647,Jh="LocalBridge access is enabled, but the bridge is not reachable. Restart LocalBridge, allow Chrome local-network access, then reload MindCanvas.",Zh="Local storage is unavailable in the hosted app until browser local storage or LocalBridge access is available.",Qh="Local storage is unavailable. Check the browser-local storage state or LocalBridge connection.",ef="Cloud projects are unavailable until Supabase and Cloudflare R2 are configured.",tf="Login is required before cloud projects can be used.",af="Cloud projects are unavailable.";function nf(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 of(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 sf(e,t){return t.providerKind==="bridge"&&!t.bridgeReachable?Jh:e.hostedWebApp?Zh:Qh}function rf(e){return e.cloudConfigured?ji(e)?af:tf:ef}function lf(e){var w,P,I;const t=ji(e),n=ti(e,!0),r=nf(e),d=e.cloudConfigured,c=n.isAvailable,m=t;let y=e.storedMode??of(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:((I=p==null?void 0:p.entitlementStatus)==null?void 0:I.trim())||(p?"active":"inactive"),currentCloudBoardCount:(p==null?void 0:p.currentBoardCount)??0,cloudBoardLimit:(p==null?void 0:p.cloudBoardLimit)??qh,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:sf(e,n),cloudStatusMessage:m?void 0:rf(e)}}function df(){const e=new Error("Queued operation was cancelled before it started.");return e.name="AbortError",e}class cf{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 df();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 uf=/^data:image\//i;function mf(e){const t=String(e||"").trim();if(!t)return{src:null,reason:"empty",urlKind:"empty"};const n=t.toLowerCase();return uf.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(()=>mf(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})},I=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:I,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":I,children:p==="blocked"?o.jsx($p,{size:18}):o.jsx(Up,{size:18})})]})}const pf={note:Ts,text:wt,"ai-task":jn,image:Nn,mask:Nn,video:An,embed:Mn,code:In,markdown:wt,"csv-table":wt,memo:Ts,pdf:wt,file:Yr,directory:zp,"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,gf=48,hf=new Set(["mindcanvasagent","agentcommand"]),ff=new Set(["codenote","code-note"]),bf=["multidesktopmonitor","remotehubmonitor","remotefleetmonitor","smartviewmonitor"],yf=["remotedevice","remotefleetdevice","remotecontrol"],xf=["top","right","bottom","left"];function Cf(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,bf,["remote","monitor"])}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-control"||t==="remotefleetdevice"||n==="fleet-device"||r==="remote-fleet-device@1"||Vc(e,["RemoteFleetDeviceId","RemoteFleetDeviceName","RemoteFleetDevicePlatform","RemoteFleetDeviceConnected","RemoteFleetDeviceCanControl","RemoteFleetSourceMonitorNodeId"])||Wc(e,yf,["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"}],Sf=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:I,onPin:_,onConnectorDragStart:B,onOpenResult:$,onToggleAiReference:F,onCopyNode:H,onCopyEmbedReference:W,onFitNodeHeight:re,onToggleNodeExpanded:se,onToggleWordWrap:je,onStageCompany:he,onOpenCompanyGraph:ze,onSyncCompanyGoal:jt,onRefreshCompany:nt,onSetCompanyStatus:V,onRemoveCompany:G,onOpenAsset:ie,onOpenDirectorySettings:ae,onScanDirectory:mt,onCreateRemoteControl:z,onGenerateTemplateCard:It}){var Vn,Oo,it,zt,Ra,rn,ca,ln,ne,Ke,dn,Yn,v,K,oe,Fo,Ue,Ht,Wt,cn,un,Gn,Kn,mn,Xn,La,qn,pn,Pa,ua,De,Pe,Ea,_a,gn,Jn;const Je=String(((Vn=t.metadata)==null?void 0:Vn.AutomationNodeKind)||((Oo=t.metadata)==null?void 0:Oo.AutomationTemplateKey)||((it=t.metadata)==null?void 0:it.AutomationInferredKind)||"").trim().toLowerCase(),Ee=String(((zt=t.metadata)==null?void 0:zt.SemanticType)||((Ra=t.metadata)==null?void 0:Ra.semanticType)||"").trim().toLowerCase(),Oe=t.kind==="memo"&&hf.has(Ee),Ae=t.kind==="memo"&&ff.has(Ee),_t=String(((rn=t.metadata)==null?void 0:rn.AgentCommandStatus)||"Draft"),U=String(((ca=t.metadata)==null?void 0:ca.AgentCommandMode)||"Task"),_e=String(((ln=t.metadata)==null?void 0:ln.AgentCommandRequestedRole)||"Researcher"),Qt=String(((ne=t.metadata)==null?void 0:ne.CodeNoteStatus)||"Draft"),Xa=String(((Ke=t.metadata)==null?void 0:Ke.CodeNoteSyncState)||"Unlinked"),ea=String(((dn=t.metadata)==null?void 0:dn.CodeNoteKind)||"Feature"),qa=Oe?jn:Ae?In:Je==="image-generate"?Nn:Je==="video-generate"?An:pf[t.kind],En=c&&c.from!==t.id,_n=t.kind==="ai-task",Me=t.kind==="pdf"||t.kind==="file"||t.kind==="directory",Ja=Cf(t),ta=kf(t),Be=Ja||ta,Te=Ja?"monitor":ta?"control":"",pe=r>1,zs=_n?"result":"context",He=((Yn=c==null?void 0:c.target)==null?void 0:Yn.id)===t.id?c.target.side:null,aa=(c==null?void 0:c.from)===t.id,Ze=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",Re=t.kind==="mask",We=t.kind==="memo",Mo=t.kind==="markdown",fe=t.kind==="csv-table",Fe=We?Rf(t):null,na=g.useRef(null),Bt=pt?Yc(t):"",Ie=pt?Pf(t):"",gt=de?Ef(t):"",$e=de?_f(t):"",To=de?Bf(t,gt):"",Za=de?Df(t):"",Ne=(((oe=t.imageStack)==null?void 0:oe.variants)??[]).filter(x=>!!x.imageUrl),Ve=Ne.find(x=>{var D;return x.variantId===((D=t.imageStack)==null?void 0:D.activeVariantId)})??Ne[0]??null,Sa=t.kind==="image"||Re?(Ve==null?void 0:Ve.imageUrl)||vi(t):"",Ro=Ve?Ne.findIndex(x=>x.variantId===Ve.variantId):-1,Bn=!Sa&&!Me&&!Be&&!Ze&&!pt&&!de,Lo=Bn&&!We,ot=t.isExpanded===!1&&Number(t.originalHeight??0)>t.height+1,Dn=!Be&&!["image","mask","video","embed","pdf","file","directory","template-launcher","remote-monitor","remote-control"].includes(t.kind),st=t.aiEnabled!==!1,Ye=Lf(t),Qe=!!(t.isChunkedText||((Fo=t.metadata)==null?void 0:Fo.IsChunkedText)==="true"),wa=Number(t.totalLineCount??((Ue=t.metadata)==null?void 0:Ue.TotalLineCount)??0),Po=t.sourceFilePath||((Ht=t.metadata)==null?void 0:Ht.FileName)||t.title,be=Qe?o.jsxs("div",{className:"node-chunked-text-state","data-testid":"node-chunked-text-state",title:Po,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,oa=t.kind==="directory"?(Wt=t.metadata)==null?void 0:Wt.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,Le=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,Ge]=g.useState(null),[Hs,Fn]=g.useState(((mn=t.metadata)==null?void 0:mn.CompanyExecutionMode)||"Auto"),[va,nn]=g.useState(((Xn=t.metadata)==null?void 0:Xn.CompanySubAgents)!=="false"),[sa,ja]=g.useState(!1),[At,on]=g.useState(null),Ia=g.useMemo(()=>fe?If(t.body,At):null,[At,fe,t.body]),ce=g.useMemo(()=>Ze?ic(t.body):null,[Ze,t.body]),ht=(ce==null?void 0:ce.options.find(x=>x.id===ce.selectedOptionId))??(ce==null?void 0:ce.options[0])??null,ra=rp(ce),Dt=Tr.find(x=>x.key===Hs)||Tr[0],Ot=String(((La=t.metadata)==null?void 0:La.CompanyStatus)||(t.companyMode?"Staged":"")).trim(),Ft=Ot.toLowerCase(),ia=Ft==="paused",ft=Ft==="archived",Ws=x=>{x.stopPropagation();const D=x.currentTarget.getBoundingClientRect();Ge(vf(D)),tn(le=>!le)},Vs=x=>{x.stopPropagation(),he(t.id,{executionMode:Dt.key,enableSubAgents:va}),tn(!1)},Eo=x=>{x.stopPropagation(),ze(t.id)},Na=(x,D)=>{D.stopPropagation();const le=Ne.find(Vt=>Vt.variantId===x);!le||!t.imageStack||le.variantId===t.imageStack.activeVariantId||(f.emit("node.imageStack.variant",{nodeId:t.id,variantId:le.variantId,variantCount:Ne.length}),b(t.id,{imageUrl:le.imageUrl,imageStack:{...t.imageStack,activeVariantId:le.variantId,variants:Ne,updatedAtUtc:new Date().toISOString()},metadata:{...t.metadata??{},ImageStackActiveVariantId:le.variantId}}))},Ys=(x,D)=>{if(D.stopPropagation(),!!We){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)}},$n=x=>{var xt,hn;if(x.stopPropagation(),!Oe)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."],Vt=["canvas-context","agent-command-planning","adapter-gated-execution"],yt=["Canvas.ListAgentCommands","Canvas.UpdateAgentCommand","Canvas.PlanAgentCommand","Canvas.SetAgentCommandState"],lt=["MindCanvasAgent",U,_e],ma=["Local React plan staged for this Agent Command.",`Role: ${_e}`,`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:_e,adapterState:((xt=t.metadata)==null?void 0:xt.AdapterState)??"adapter-gated"}),b(t.id,{tags:["Agent Command",_e,"Planned"],metadata:{...t.metadata??{},AgentCommandStatus:"Planned",AgentCommandPlannerSummary:ma,AgentCommandPlanSteps:JSON.stringify(le),AgentCommandPlannedSkills:JSON.stringify(Vt),AgentCommandPlannedTools:JSON.stringify(yt),AgentCommandPlannedConcepts:JSON.stringify(lt),AgentCommandLastExplorationPhase:"planned-local",AdapterState:((hn=t.metadata)==null?void 0:hn.AdapterState)??"adapter-gated"}})},Aa=x=>{var yt,lt;if(x.stopPropagation(),!Oe)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
- `),Vt=[`${D} Local React execution staged.`,`${D} Adapter gated; no external tools invoked.`];f.emit("mindcanvas.agentCommand.executed.local",{id:t.id,mode:U,requestedRole:_e,adapterState:((yt=t.metadata)==null?void 0:yt.AdapterState)??"adapter-gated"}),b(t.id,{status:"done",result:le,tags:["Agent Command",_e,"Completed"],metadata:{...t.metadata??{},AgentCommandStatus:"Completed",AgentCommandLastExecutedAtUtc:D,AgentCommandConsoleLogs:JSON.stringify(Vt),AgentCommandResultLinks:JSON.stringify([]),AdapterState:((lt=t.metadata)==null?void 0:lt.AdapterState)??"adapter-gated"}})},Ma=(x,D,le,Vt)=>{var lt,ma,xt;if(x.stopPropagation(),!Ae)return;const yt=D==="Implemented"?JSON.stringify([`local-code-note://${t.id}/implementation-handoff.md`]):((lt=t.metadata)==null?void 0:lt.CodeNoteOutputArtifacts)||"[]";f.emit("mindcanvas.codeNote.state",{id:t.id,status:D,syncState:le,reason:Vt,adapterState:((ma=t.metadata)==null?void 0:ma.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"}})},$t=()=>{nn(x=>!x)},_o=async x=>{if(x.stopPropagation(),!Ie||!na.current){f.emit("node.video.unavailable",{id:t.id,reason:Ie?"element-missing":"source-missing"});return}try{await na.current.play(),f.emit("node.video.play",{id:t.id,sourceKind:xd(Ie)})}catch(D){f.emit("node.video.unavailable",{id:t.id,reason:D instanceof Error?D.message:String(D)})}},Ta=x=>{if(x.stopPropagation(),!Ie||!na.current){f.emit("node.video.unavailable",{id:t.id,reason:Ie?"element-missing":"source-missing"});return}na.current.pause(),f.emit("node.video.pause",{id:t.id,sourceKind:xd(Ie)})},la=x=>{x.stopPropagation(),gt&&W(t.id,gt)},Un=x=>{b(t.id,{body:JSON.stringify(x),metadata:{...t.metadata??{},templateLauncherSelectedOptionId:x.selectedOptionId??""}})},rt=(x,D)=>{if(D.stopPropagation(),!ce)return;const le=dp(ce,x);Un(le),f.emit("templateCard.option.select",{nodeId:t.id,optionId:le.selectedOptionId??null})},zn=(x,D)=>{if(!ce)return;const le=cp(ce,x,D);Un(le),f.emit("templateCard.input.patch",{nodeId:t.id,key:x})},Ut=x=>{x.stopPropagation(),!(!ce||ra)&&It(t.id,ce.selectedOptionId??null,ce.inputValues)},da=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===Dt.key?"is-selected":"","data-company-mode":x.key,onClick:()=>Fn(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(),$t()},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:[Lo&&o.jsx("button",{type:"button",title:st?"Disable AI reference":"Enable AI reference","aria-label":st?"Disable AI reference":"Enable AI reference",className:st?"is-active-ai":"is-inactive-ai",onPointerDown:x=>x.stopPropagation(),onClick:()=>F(t.id),children:o.jsx(Hp,{size:13})}),We&&o.jsx("button",{type:"button",title:"Change memo color","aria-label":"Change memo color","aria-pressed":sa,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:()=>je(t.id),children:o.jsx(Wp,{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(Vp,{size:13})}),Bn&&o.jsx("button",{type:"button",title:ot?"Expand node":"Collapse node","aria-label":ot?"Expand node":"Collapse node","aria-pressed":ot,onPointerDown:x=>x.stopPropagation(),onClick:()=>se(t.id),children:ot?o.jsx(Gl,{size:13}):o.jsx(Yp,{size:13})}),_n&&o.jsx("button",{type:"button",title:"Run node",onPointerDown:x=>x.stopPropagation(),onClick:()=>I(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?Eo: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=Be?null:o.jsx("div",{className:"node-connector-handles","data-testid":"node-connector-handles","aria-hidden":!1,children:xf.map(x=>o.jsx("button",{type:"button",className:`node-connector-handle node-connector-handle--${x} ${aa&&(c==null?void 0:c.fromSide)===x?"is-source":""} ${He===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=Re||Ne.length>1||de||pt?o.jsxs("div",{className:"node-surface-badges","data-testid":"node-surface-badges",children:[Re&&o.jsx("span",{className:"node-mask-badge",title:"Image edit mask reference",children:"Mask"}),Ne.length>1&&o.jsxs("span",{className:"node-image-stack-badge",title:"Image stack variants",children:[Math.max(1,Ro+1),"/",Ne.length]}),de&&o.jsx("span",{className:"node-embed-badge",children:$e==="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=Ne.length>1||de||pt||Me?o.jsxs("div",{className:"node-surface-actions","data-testid":"node-surface-actions",children:[Ne.length>1&&o.jsx("div",{className:"node-image-stack-rail","aria-label":"Image stack variants",children:Ne.map((x,D)=>o.jsx("button",{type:"button",className:x.variantId===(Ve==null?void 0:Ve.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(Mn,{size:13}),o.jsx("span",{children:"Open"})]}),o.jsxs("button",{type:"button",title:"Copy URL","aria-label":"Copy URL",onPointerDown:x=>x.stopPropagation(),onClick:la,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:_o,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(No,{size:13}),o.jsx("span",{children:"Pause"})]})]}),Me&&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(Gp,{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(Mn,{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(vo,{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,et=!Be&&!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}),Oe&&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:$n,children:"Plan"}),o.jsx("button",{type:"button","data-testid":"node-agent-command-execute","data-agent-command-action":"execute",disabled:_t==="Running",onClick:Aa,children:"Execute"})]}),Ae&&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,Qt,"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":Ot||"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:()=>nt(t.id),children:o.jsx(vo,{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})}):ia?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(No,{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(Pt,{size:12})})]})]}):null,Do=!Be&&!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,be,Oe&&o.jsxs("div",{className:"node-agent-command-state","data-testid":"node-agent-command-state","data-agent-command-status":_t,"data-agent-command-mode":U,"data-agent-command-role":_e,"data-agent-command-adapter-state":((Pa=t.metadata)==null?void 0:Pa.AdapterState)||"adapter-gated",children:[o.jsx(jn,{size:12}),o.jsx("strong",{children:"AC"}),o.jsx("span",{children:_t}),o.jsx("span",{children:U}),o.jsx("span",{children:_e})]}),Ae&&o.jsxs("div",{className:"node-code-note-state","data-testid":"node-code-note-state","data-code-note-status":Qt,"data-code-note-sync-state":Xa,"data-code-note-kind":ea,"data-code-note-adapter-state":((ua=t.metadata)==null?void 0:ua.AdapterState)||"local-canvas-only",children:[o.jsx(In,{size:12}),o.jsx("strong",{children:"CN"}),o.jsx("span",{children:Qt}),o.jsx("span",{children:Xa}),o.jsx("span",{children:ea})]}),t.companyMode&&o.jsxs("div",{className:"node-company-state","data-testid":"node-company-state",children:[o.jsx(Kl,{size:12}),o.jsx("strong",{children:((De=t.metadata)==null?void 0:De.CompanyExecutionModeLabel)||"Company staged"}),o.jsx("span",{children:((Pe=t.metadata)==null?void 0:Pe.CompanySubAgents)==="false"?"single-agent":"sub-agents"})]})]})}):null;return o.jsxs("article",{className:`canvas-node canvas-node--${t.kind} ${Be?"canvas-node--remote-surface":""} ${Ja?"canvas-node--remote-monitor-surface":""} ${ta?"canvas-node--remote-control-surface":""} ${Je?`canvas-node--automation-${Je}`:""} ${Oe?"canvas-node--agent-command":""} ${Ae?"canvas-node--code-note":""} ${n?"is-selected":""} ${d?"is-pulsing":""} ${st?"":"is-ai-disabled"} ${t.wordWrap===!1?"is-nowrap":""} ${ot?"is-collapsed":""} ${t.companyMode?`is-company-${t.companyMode}`:""}`,style:Hn,"data-node-id":t.id,"data-automation-node-kind":Je||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":Oe?"true":void 0,"data-agent-command-status":Oe?_t:void 0,"data-agent-command-mode":Oe?U:void 0,"data-agent-command-role":Oe?_e:void 0,"data-code-note-node":Ae?"true":void 0,"data-code-note-status":Ae?Qt:void 0,"data-code-note-sync-state":Ae?Xa:void 0,"data-code-note-kind":Ae?ea:void 0,"data-selection-count":r,"data-node-chrome-suppressed":pe?"multi-selection":void 0,"data-remote-surface-chrome":Be?"self-contained":void 0,"data-remote-surface-kind":Te||void 0,"data-remote-surface-title-owner":Be?"inner-remote-view":void 0,"data-remote-surface-scroll-owner":Be?"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:[!Be&&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:Ze,onPointerDown:x=>x.stopPropagation(),onChange:x=>{Ze||b(t.id,{title:x.target.value})}})]}),da&&typeof document<"u"?qm.createPortal(da,document.body):da,We&&sa&&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 ${Ne.length>1?"node-image-wrap--stack":""} ${Re?"node-image-wrap--mask":""}`,"data-testid":Re?"node-mask-preview":Ne.length>1?"node-image-stack":void 0,children:o.jsx(Mr,{src:Sa,traceId:t.id,kind:Re?"mask":"node-image",testId:"node-secure-image"})}):Ja?o.jsx(ip,{node:t,onPatch:b,onCreateRemoteControl:z}):ta?o.jsx(lp,{node:t,onPatch:b}):Ze?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=>rt(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(wf,{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."})]}),ra&&o.jsx("div",{className:"node-template-card__validation",children:ra}),o.jsxs("button",{type:"button",className:"node-template-card__generate","data-testid":"node-template-card-generate",disabled:!!ra,onPointerDown:Ut,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(Mn,{size:24}),o.jsx("strong",{children:$e==="youtube"?"YouTube":"Web embed"}),o.jsx("span",{children:To||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 ${Ie?"has-video-source":"is-video-prompt"}`,"data-testid":"node-video-card",children:[Ie?o.jsx("video",{ref:na,src:Ie,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(An,{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})}),Ie&&o.jsx("span",{className:"node-video-source",title:Bt,children:Bt})]}):Me?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:Ye,children:Ye}),o.jsx("span",{children:t.kind==="directory"?"Directory reference":t.kind==="pdf"?"PDF document":"File reference"}),t.kind==="directory"&&(oa||Qa||On||Le||Nt)&&o.jsxs("dl",{className:"node-asset-meta","data-testid":"node-directory-meta",children:[(On||Le)&&o.jsxs(o.Fragment,{children:[o.jsx("dt",{children:"Scanned"}),o.jsxs("dd",{children:[Number(On??0).toLocaleString()," files / ",Number(Le??0).toLocaleString()," folders"]})]}),oa&&o.jsxs(o.Fragment,{children:[o.jsx("dt",{children:"Include"}),o.jsx("dd",{children:oa})]}),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()})]})]})]})]}):fe?o.jsxs("div",{className:"node-csv-card","data-testid":"node-csv-card",children:[o.jsx(jf,{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})})]}):Mo?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(Mf,{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})})}),Do,et,sn,o.jsx("button",{type:"button",className:"node-resize-handle",title:"Resize node","aria-label":"Resize node",onPointerDown:x=>p(t.id,x)})]})});function wf({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 vf(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 jf({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 If(e,t){const n=Nf(e,bd+1);if(n.length===0)return null;const r=Math.min(gf,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)=>Af(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 Nf(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 Af(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 Mf({value:e}){const t=Tf(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 Tf(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 Rf(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 Lf(e){return Fc(e)}function Yc(e){return String(e.assetUrl||e.sourceFilePath||e.body||"").trim()}function Pf(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 Ef(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 _f(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 Bf(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 Df(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),I=t.find(B=>B.value.toLowerCase()===e.toLowerCase()),_=(I==null?void 0:I.label)||e||y;return g.useEffect(()=>{if(!b)return;const B=F=>{var W;const H=F.target instanceof Node?F.target:null;H&&((W=P.current)!=null&&W.contains(H))||w(!1)},$=F=>{F.key==="Escape"&&w(!1)};return document.addEventListener("pointerdown",B,!0),document.addEventListener("keydown",$,!0),()=>{document.removeEventListener("pointerdown",B,!0),document.removeEventListener("keydown",$,!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:(I==null?void 0:I.title)||_,disabled:m,"data-testid":p,onClick:()=>{m||w(B=>!B)},children:[o.jsxs("span",{className:"catalog-pill__content",children:[(I==null?void 0:I.groupLabel)&&o.jsx("span",{className:"catalog-pill__provider",children:I.groupLabel}),(I==null?void 0:I.showAspectIcon)&&o.jsx(Cd,{option:I,compact:!0}),o.jsx("span",{className:"catalog-pill__label",children:_})]}),(I==null?void 0:I.trailingLabel)&&o.jsx("span",{className:"catalog-pill__trailing",children:I.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 F;const $=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 ${$?"is-selected":""}`,role:"option","aria-selected":$,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}),(F=B.badges)==null?void 0:F.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 Of(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=Of(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 $f(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(I=>I.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:[Uf(b.key)]}))}function Uf(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 zf(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 Hf({board:e,rootNode:t,onClose:n,onStatus:r,onRemove:d,onSubmitFollowUp:c,onApproval:m,onAddArtifact:y}){var he,ze,jt,nt,V;const[p,b]=g.useState(""),[w,P]=g.useState(null),I=g.useMemo(()=>$f(t,e),[e,t]),_=g.useMemo(()=>zf(t,e),[e,t]),B=_.find(G=>G.id===w)??_[0]??null,$=((he=t.metadata)==null?void 0:he.CompanyStatus)||"Staged",F=((ze=t.metadata)==null?void 0:ze.CompanyExecutionModeLabel)||"Auto / General",H=((jt=t.metadata)==null?void 0:jt.CompanySubAgents)==="false"?"single-agent":"sub-agents",W=((nt=t.metadata)==null?void 0:nt.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"))||I.some(ae=>ae.nodes.some(mt=>mt.id===G.id)))}).length,je=()=>{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(Kp,{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:$}),o.jsx("span",{children:F}),o.jsxs("span",{children:[o.jsx(mc,{size:12}),H]}),$==="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(No,{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(Xp,{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:I.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:je,children:[o.jsx(qp,{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:F}),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(Jp,{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 Wf({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(Mn,{size:16})}),o.jsx("button",{type:"button",title:"Close PDF viewer","data-testid":"pdf-viewer-close",onClick:n,children:o.jsx(Pt,{size:16})})]})]}),o.jsx("iframe",{src:e,title:t,className:"pdf-viewer-frame","data-testid":"pdf-viewer-frame"})]})})}const Ss=.28,ws=2.8,Vf=96,Yf=140,vs=188,js=126,vn=10,Gf=720,Kf=.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"],Zt=24,Sd=900,Xf=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,qf=154,oi=4e4,Jf=50,Es=100,Jc=50*1024,Lr=Jc,Pr=12e4,jd=64*1024,Zf=5e3,Ii=2500,Rn=36,si="Select a LocalBridge directory",Zc="mindexec.react.templateStudioDraft.v1.",Ni="BusinessAutomationNode",Qf="MindCanvasAgent",eb="CodeNote";function tb(){return uc(Cs())}const ab=["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}},nb=["Objective:","","Constraints:","","Expected output:"].join(`
13
- `),ob=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 sb(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 I of w.values()){if(y>=Ii){p=!0;return}const _=P?`${P}/${I.name}`:I.name;if(!Qc(_,I.name,r)){if(I.kind==="file"){if(!eu(I.name,n))continue;c+=1,y+=1,d.length<Rn&&d.push({name:I.name,path:_,kind:"file"});continue}if(I.kind==="directory"&&(m+=1,y+=1,d.length<Rn&&d.push({name:I.name,path:_,kind:"directory"}),await b(I,_),p))return}}}return await b(e),{fileCount:c,directoryCount:m,preview:d,truncated:p}}function Ln(e){return typeof e=="string"?e.trim():""}function rb(e){return!e||e===si?!1:!/^(https?:|data:|blob:|file:)/i.test(e)}function ib(e){var d;const t=Ln((d=e.metadata)==null?void 0:d.DirectoryPath),n=Ln(e.sourceFilePath),r=t||n;return rb(r)?r:""}function lb(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 db(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 I=y.shift();if(!I)break;const _=await Mp(I.bridgePath,n,r),B=Array.isArray(_.items)?_.items:[];for(const $ of B){if(w>=Ii){P=!0;break}const F=Ln($.name);if(!F)continue;const H=I.relativePath?`${I.relativePath}/${F}`:F;if(Qc(H,F,c))continue;const W=$.isDirectory===!0,re=$.isFile===!0||$.isDirectory!==!0;if(W){b+=1,w+=1,m.length<Rn&&m.push({name:F,path:H,kind:"directory"}),y.push({bridgePath:lb(I.bridgePath,$),relativePath:H});continue}if(re){if(!eu(F,d))continue;p+=1,w+=1,m.length<Rn&&m.push({name:F,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 cb=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"]),ub=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 mb(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 Et(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 pb(e,t){const n=[{side:"top",point:Et(e,"top")},{side:"right",point:Et(e,"right")},{side:"bottom",point:Et(e,"bottom")},{side:"left",point:Et(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 gb(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 hb(e,t){return t?{x:Math.round(e.x/Zt)*Zt,y:Math.round(e.y/Zt)*Zt}:e}function X(e){return`${e}-${Math.random().toString(36).slice(2,9)}`}function fb(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 bb=112,yb=80;function Pd(e,t){const n=t/2,r=bb+e/2,d=Math.max(r,t-yb);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 xb(e){return e.isExpanded===!1&&Number(e.originalHeight??0)>e.height+1}function Cb(e){return vi(e)}function kb(e){return Fc(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||X("image-variant");for(;n.has(d);)d=X("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 Sb(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 wb(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 vb(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 jb(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 at(e){return String(e||"").trim()||"Untitled"}const tu="Multi Desktop Monitor";function _d(e){return at(e).toLowerCase()===tu.toLowerCase()}function Ib(e,t,n){const r=at(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 Nb(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 Ab(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/Zt)*Zt}function Mb(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 Tb(e){if(!ka(e)||!Array.isArray(e.variants))return;const t=e.variants.map(d=>Mb(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 Rb(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"||!ob.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=Tb(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:Ab(e.tags),role:typeof e.role=="string"?e.role:void 0,metadata:Nb(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 Lb(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=>Rb(d)).filter(d=>!!d);if(n.length===0)return null;const r=Array.isArray(t.edges)?t.edges.map(d=>Lb(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 Pb(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 Eb=/^\s*\[[^\]]+\]\((https?:\/\/[^)\s]+)\)\s*$/i,_b=/<iframe[^>]+src\s*=\s*(?:"|\x27)(?<url>https?:\/\/[^"\x27]+)(?:"|\x27)/i,Bb=/https?:\/\/[^\s<>()"\x27]+/i,Db=/^[A-Za-z0-9_-]{6,}$/,Ob=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=_b.exec(t);if((c=n==null?void 0:n.groups)!=null&&c.url)return Or(n.groups.url);const r=Eb.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=Bb.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 $b(e){try{const t=new URL(e);return li(t.pathname)}catch{return li(e)}}function Ub(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:"||Ub(n)?null:n}catch{return null}}function Fr(e){return Db.test(e)}function zb(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 Fr(y)?y:""}if(!n.endsWith("youtube.com")&&!n.endsWith("youtube-nocookie.com"))return"";const r=t.searchParams.get("v")??"";if(Fr(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 Fr(m)?m:""}function Hb(e){const t=e.toLowerCase(),n=$b(e);return t.startsWith("data:image/")||["avif","gif","jpeg","jpg","png","svg","webp"].includes(n)?"image":Ob.has(n)?"video":n==="pdf"?"pdf":Pn(e)?"embed":"file"}function Wb(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 Vb(e,t,n="clipboard-url"){const r=Hb(e),d=Wb(e),c=r==="embed"?Pn(e):null,m=r==="embed"?zb(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:X("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:Vb(r,t,n)}function Fd(e,t,n){const r=e.split(/\r?\n/).map(d=>d.trim()).find(Boolean)??"Pasted text";return{id:X("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 Yb(e,t,n){const r=e.split(/\r?\n/).map(y=>y.trim()).find(Boolean)??"AI question",d=Jt(n.model),c=lc(d),m=c?Tp(c.provider):n.aiProvider||"OpenAI Codex";return{id:X("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 Gb(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:X("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 $d(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 Kb(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":cb.has(t)?"code":e.type.startsWith("text/")||ub.has(t)?"text":"file"}function Xb(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,Zf)}function Hd(e){return{IsChunkedText:"true",TotalLineCount:String(e),TotalLineCountIsPreview:"true",ChunkedPreviewOnly:"true",ChunkedPreviewChars:"",ChunkedLineCount:String(Es),ChunkCacheEntryLimit:String(Jf),LargeFileThresholdBytes:String(Jc),OriginalIngestMode:"browser-preview",TextTruncated:"true"}}function qb(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,Jb(d)),0);return{rowCount:Math.max(0,t.length-1),columnCount:n}}function Jb(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 Zb(e,t,n){const r=Kb(e),d=(r==="note"||r==="text"||r==="code"||r==="markdown")&&e.size<=Lr,c=r==="image"||r==="video"||r==="pdf"||r==="file"?Xb(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=qb(w),I=p?0:Ud(w);return p||f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:n,previewChars:w.length,previewLines:I,chunkLineCount:Es}),{id:X("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:I,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(I),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:X("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:X("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:X("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 $r(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 Qb(e,t){var r,d;const n=new Date().toISOString();return{...e,id:X("imported-board"),name:at(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 ey(e){return e.flatMap(t=>yi(t.payload).map(n=>({fileName:t.file.name,metadata:n})))}function ty(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 ay(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 ny(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-vn*2)/c,(js-vn*2)/m),p=(I,_)=>({x:vn+(I-d.minX)*y,y:vn+(_-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(I=>{const _=p(I.x,I.y);return{id:I.id,kind:I.kind,x:_.x,y:_.y,width:Math.max(2,I.width*y),height:Math.max(2,I.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 oy(e,t){const n=Math.max(.01,e.scale),r=t.width/n,d=t.height/n,c=Math.max(Gf,Math.max(r,d)*Kf);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 sy(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=X("board"),r=X("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 ry(e){const t=new Date().toISOString();return{id:X("board"),name:`Template Studio ${iy(new Date)}`,updatedAt:t,settings:e,source:{kind:"localStorage",loadedAt:t},nodes:[],edges:[]}}function iy(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 ly(e){return`${e.sourceKind==="localBridge"?"LocalBridge copy":"React board"} / ${e.nodeCount} nodes / ${ii(e.updatedAt)}`}function jo(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=150,P=t.nodes.map((_,B)=>({id:X("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"}})),I=[{id:X("edge"),from:e.id,to:P[0].id,kind:"context"},...t.edges.filter(_=>P[_.from]&&P[_.to]).map(_=>({id:X("edge"),from:P[_.from].id,to:P[_.to].id,kind:"result"}))];return{nodes:P,edges:I,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 wn(e){var t;return String(((t=e.metadata)==null?void 0:t.SemanticType)||"").trim()===Ni}function dy(e,t){const n=Ai[t],r=Io(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 yo(e,t){var r,d,c,m,y;if(!wn(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 cy(){return{Source:"toolbar-agent-command",SemanticType:Qf,AgentCommandId:X("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 uy(){return{Source:"toolbar-code-note",SemanticType:eb,CodeNoteId:X("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 my(e,t){var r,d,c,m;const n=t?Ri(Ti(t)):null;if(n){const y=n.mode.toLowerCase();return[`Task: ${e}`,"",`Run Result: ${n.title}`,`Node: ${n.kind}`,"Status: Spec only","Source mode: media-prompt-only","","Generation is not executed here. External media generation stays adapter-gated until human review.","","Spec:",`- Medium: ${y}`,`- Model: ${((r=t==null?void 0:t.metadata)==null?void 0:r.MediaModel)||"adapter-gated"}`,`- Aspect: ${((d=t==null?void 0:t.metadata)==null?void 0:d.AspectLabel)||((c=t==null?void 0:t.metadata)==null?void 0:c.AspectPresetId)||"auto"}`,`- Requested size: ${((m=t==null?void 0:t.metadata)==null?void 0:m.RequestedSize)||"auto"}`,"","Prompt draft:",e].join(`
35
- `)}return[`Task: ${e}`,"","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 py(e,t){const n=e.result||"",r=n.slice(0,oi),d=`${e.title||"AI Task"} result`;return{id:X("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 gy(e,t){const n=jo(e.result||"",900);return{id:X("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(I=>I.to===t.id||I.from===t.id).flatMap(I=>[I.from,I.to]).filter(I=>I!==t.id)),c=e.nodes.filter(I=>d.has(I.id)).slice(0,8),m=c.length>0?c.map(I=>[`### ${I.title||I.kind}`,`Type: ${I.kind}`,jo(I.result||I.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:",jo(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:",jo(n,4e3),"","Linked context:",m].join(`
42
- `)}function nu(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(nu)}function hy(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(I=>n.get(I)).filter(I=>!!I);for(const I of P)c.set(I.id,Math.max(0,(c.get(I.id)??0)-1)),(c.get(I.id)??0)===0&&p.push(I);p.sort(nu)}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 hy(e,d)}function fy(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 Io(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:Np(r,t),requestedSize:Vr(c)}}function Li(e,t,n){const r=Io(e,t,n);return{InputMode:t,AppLanguage:hi(e.appLanguage),MediaPromptLanguageInstruction:Ap(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 by(e){const t=Jt(e.id);if(!t)return null;const n=yy(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:ou(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:xy(e.provider,n),mode:t,supportedSizes:r,supportedSeconds:e.supportedSeconds??[],supportsReasoning:e.supportsReasoning,isFallback:e.isFallback,vendorPricing:ou(e.vendorPricing),source:e.source}}function ou(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 yy(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 xy(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 Cy(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=vy(r),c=Sy(r,t,n),m=Iy(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 ky(){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 Sy(e,t,n){const r=wy(e,t,n),d=e.vendorPricing??Rp(e.id);return Lp({mode:t,provider:r,modelId:e.id,reasoningEffort:n.effort,vendorPricing:d})}function wy(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":Pp(n)}function vy(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 jy(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 Iy(e,t){const n=String(e.displayName||e.label||e.id||"").trim(),r=n.toLowerCase()===e.id.toLowerCase()?tc(e.id):n;return Ny(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 Ny(e,t){const n=Ay(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 Ay(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[jy(e)]}}function My(e){return{textModels:((e==null?void 0:e.textModels)??[]).map(by).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 Ty(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=Jt(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=Jt(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 su(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 Ry(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 Ly(e,t,n,r=8){if(!t.trim())return[];const d=Uh(su(e)),c=new Map(e.map(m=>[m.id,m]));return zh(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 Py(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 Ey(){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 _y(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 By(){try{return window.localStorage.getItem(Kc)==="full"?"full":"curated"}catch{return"curated"}}function Dy(e){try{window.localStorage.setItem(Kc,e)}catch{}}function sc(e,t){return _y([e,...t.filter(n=>n.toLowerCase()!==e.toLowerCase())])}function Jy({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(Jm(El))))),[d,c]=g.useState([]),[m,y]=g.useState([]),[p,b]=g.useState(["node-agent-command"]),[w,P]=g.useState(""),[I,_]=g.useState(""),[B,$]=g.useState(0),[F,H]=g.useState([]),[W,re]=g.useState(0),[se,je]=g.useState("idle"),[he,ze]=g.useState("booting"),[jt,nt]=g.useState(null),[V,G]=g.useState(null),[ie,ae]=g.useState(null),[mt,z]=g.useState(null),[It,Je]=g.useState(null),[Ee,Oe]=g.useState({...Ha}),[Ae,_t]=g.useState({...Ha}),[U,_e]=g.useState(()=>({width:window.innerWidth,height:window.innerHeight})),[Qt,Xa]=g.useState(()=>Er(n)??{x:0,y:0}),[ea,qa]=g.useState(!1),[En,_n]=g.useState(()=>localStorage.getItem(wd)==="true"),[Me,Ja]=g.useState("local"),[ta,Be]=g.useState([]),[Te,pe]=g.useState(tt()?"idle":"blocked"),[zs,He]=g.useState(null),[aa,Ze]=g.useState({status:"idle",textModels:[],imageModels:[],videoModels:[]}),[pt,de]=g.useState(tt()?null:"Hosted LocalBridge access is off."),[Re,We]=g.useState(null),[Mo,fe]=g.useState(null),[Fe,na]=g.useState(()=>Ey()),[Bt,Ie]=g.useState(!1),[gt,$e]=g.useState(null),[To,Za]=g.useState(null),[Ne,Ve]=g.useState(!1),[Sa,Ro]=g.useState("ready"),[Bn,Lo]=g.useState("Saved in this browser."),[ot,Dn]=g.useState(!1),[st,Ye]=g.useState(()=>St()),Qe=g.useMemo(()=>tb(),[]),[wa,Po]=g.useState(()=>xr()),be=Qe.cloudBoards.canAttempt&&(wa==null?void 0:wa.source)==="supabase-provider-session",[oa,Qa]=g.useState([]),[On,Le]=g.useState(null),[Nt,en]=g.useState(!1),[tn,an]=g.useState(null),Ge=g.useMemo(()=>lf({storedMode:Me,cloudConfigured:!0,cloudSessionAvailable:be,cloudAccess:be?{planKey:"provider",entitlementStatus:"active",currentBoardCount:oa.length,cloudBoardLimit:Number.MAX_SAFE_INTEGER,lockedBoardCount:0,canCreateBoard:!0}:null,bridgeProviderConfigured:!0,bridgeReachable:Te==="connected",hostedWebApp:!tt()&&!io(),hostedLocalBridgeAccessEnabled:io(),browserProviderConfigured:!0,browserLocalAvailable:!0,browserLocalAvailableWhenEmpty:!0,embeddedProviderConfigured:!1,supportsEmbeddedLocal:!1}),[be,oa.length,Te,Me]),[Hs,Fn]=g.useState(null),[va,nn]=g.useState(""),[sa,ja]=g.useState(null),[At,on]=g.useState(null),[Ia,ce]=g.useState(!1),[ht,ra]=g.useState(!1),[Dt,Ot]=g.useState(null),[Ft,ia]=g.useState(null),[ft,Ws]=g.useState(!1),[Vs,Eo]=g.useState(!1),[Na,Ys]=g.useState(By),$n=g.useRef(new Map),Aa=g.useMemo(()=>fr(n.settings.appLanguage),[n.settings.appLanguage]),[Ma,$t]=g.useState(!1),[_o,Ta]=g.useState(!1),[la,Un]=g.useState("business"),[rt,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}),[Ut,da]=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,Bo]=g.useState(()=>Id(n.id,n.name)),[ge,et]=g.useState(null),[Do,Vn]=g.useState(null),[Oo,it]=g.useState(!1),[zt,Ra]=g.useState({}),[rn,ca]=g.useState(null),ln=g.useMemo(()=>{var l,u;const a=st.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(st.map(h=>[h.id,h]));return i.set(n.id,{...a,...s}),Array.from(i.values()).sort((h,C)=>{const k=typeof h.order=="number"?h.order:Number.MAX_SAFE_INTEGER,j=typeof C.order=="number"?C.order:Number.MAX_SAFE_INTEGER;return k!==j?k-j:String(C.updatedAt||"").localeCompare(String(h.updatedAt||""))}).slice(0,7)},[n,st]),ne=g.useMemo(()=>lo(la,n.settings.appLanguage)??Aa[0],[la,n.settings.appLanguage,Aa]),Ke=g.useMemo(()=>ne?uo(ne,rt,n.settings.appLanguage):null,[ne,n.settings.appLanguage,rt]),dn=!!(ne&&(ne.options.length>0||!ne.quickCreateTemplateId)),Yn=g.useMemo(()=>rs(Ke,Ut),[Ke,Ut]),v=g.useRef(n),K=g.useRef(p),oe=g.useRef({...Ha}),Fo=g.useRef(U),Ue=g.useRef(Qt),Ht=g.useRef(null),Wt=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 cf),La=g.useRef(0),qn=g.useRef(null),pn=g.useRef(0),Pa=g.useRef(null),ua=g.useRef(!1),De=g.useRef(0),Pe=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(),Vt=g.useRef(null),yt=g.useRef(null),lt=g.useRef(0),ma=g.useRef(null),xt=g.useRef(0),hn=g.useRef(!1),Mt=g.useCallback(()=>{var s;const a=(s=Ht.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)}},[]),pa=g.useCallback((a,s)=>{var l;const i=(l=Ht.current)==null?void 0:l.getBoundingClientRect();return i?{x:a-i.left,y:s-i.top}:{x:a,y:s}},[]),ga=g.useCallback(a=>{hn.current=a,Ws(a)},[]),Pi=g.useCallback((a="keyboard")=>{Ys(s=>{const i=s==="curated"?"full":"curated";return Dy(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=()=>Po(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;ga(s),f.emit("canvas.fullscreen.changed",{active:s})};return document.addEventListener("fullscreenchange",a),()=>document.removeEventListener("fullscreenchange",a)},[ga]),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,C,k,j,S,N,R,E,M;const i=s.data;if(i.type==="READY"){ua.current=!0,ze("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(A=>[A.id,A])),u=i.hits.map(A=>l.get(A.nodeId)).filter(A=>!!A);H(u),re(0),je("worker"),f.emit("search.completed",{query:i.query,count:u.length,engine:"worker",durationMs:(h=i.profile)==null?void 0:h.durationMs,documentCount:(C=i.profile)==null?void 0:C.documentCount,candidateCount:(k=i.profile)==null?void 0:k.candidateCount,rankedCount:(j=i.profile)==null?void 0:j.rankedCount,viewportBoosted:(S=i.profile)==null?void 0:S.viewportBoosted,boostedCount:(N=i.profile)==null?void 0:N.boostedCount,indexedTokenCount:(R=i.profile)==null?void 0:R.indexedTokenCount,indexedPrefixCount:(E=i.profile)==null?void 0:E.indexedPrefixCount,indexedNGramCount:(M=i.profile)==null?void 0:M.indexedNGramCount})},a.onerror=s=>{ua.current=!1,ze("failed"),f.emit("search.worker.failed",{message:s.message})},()=>{a.terminate(),Pa.current=null,ua.current=!1}},[]),g.useEffect(()=>{const a=()=>{const l=Mt();Fo.current=l,_e(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=Ht.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,Ro("syncing"),Lo("Saving board state to this browser."),window.clearTimeout(D.current),D.current=window.setTimeout(()=>{const a=Kt(Wa(v.current,Ue.current));Ye(St()),Ro(a?"ready":"error"),Lo(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:su(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};Ue.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 Z=g.useCallback((a,s=!0)=>{oe.current=a,Oe(a),cn.current&&(cn.current.style.transform=`translate3d(${a.x}px, ${a.y}px, 0) scale(${a.scale})`),Wt.current&&(Wt.current.style.setProperty("--grid-x",`${a.x}px`),Wt.current.style.setProperty("--grid-y",`${a.y}px`),Wt.current.style.setProperty("--grid-small",`${24*a.scale}px`),Wt.current.style.setProperty("--grid-large",`${144*a.scale}px`)),window.clearTimeout(le.current),le.current=window.setTimeout(()=>_t(a),Yf),s&&f.emit("camera.patch",{...a})},[]),Yt=g.useCallback(async()=>{var i;const a=++De.current;if(pe("checking"),He(null),de(null),f.emit("runtimeStatus.bridge.refresh.requested",{source:"mindcanvas"}),!tt()){pe("blocked"),He(null),Be([]),de("Hosted LocalBridge access is off."),We(null),fe("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:"refresh",reason:"hosted-access-off"});return}const s=await Xt();if(a===De.current){if(He(s.status??null),s.state!=="connected"){pe(s.state),Be([]),de(s.message||"LocalBridge is unavailable."),We(null),fe(s.message||"LocalBridge is unavailable.");return}try{const[l,u]=await Promise.all([Dl(s.baseUrl),zg(s.baseUrl)]);if(a!==De.current)return;const h=Ga(l.rootPath||((i=s.status)==null?void 0:i.workspace));We(h||null),fe(h?null:"LocalBridge workspace path is unavailable."),h&&na(C=>sc(h,C)),pe("connected"),Be(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!==De.current)return;pe("unavailable"),Be([]);const u=l instanceof Error?l.message:String(l);de(u),fe(u)}}},[]),Zn=g.useCallback(async(a="auto",s=!1)=>{var u,h,C,k;const i=Date.now();if(!s&&i-Jn.current<Xf)return;Jn.current=i;const l=++Ea.current;if(!tt()){Ze(j=>({...j,status:"blocked",message:"Hosted LocalBridge access is off."})),f.emit("modelCatalog.refresh.blocked",{source:a,reason:"hosted-access-off"});return}Ze(j=>({...j,status:"loading",message:void 0})),f.emit("modelCatalog.refresh.requested",{source:a,force:s});try{const j=await Xt();if(l!==Ea.current)return;if(He(j.status??null),j.state!=="connected"){Ze(A=>({...A,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),N=Ty(j.status);let R=null;try{R=await up(S,j.baseUrl)}catch(A){const L=A instanceof Error?A.message:String(A);if(N.length>0){Ze({status:"ready",textModels:N,imageModels:[],videoModels:[],source:((h=(u=j.status)==null?void 0:u.exec)==null?void 0:h.modelCatalogSource)||"localbridge-status",updatedAt:(k=(C=j.status)==null?void 0:C.exec)==null?void 0:k.modelCatalogUpdatedAt,message:L}),f.emit("modelCatalog.refresh.statusFallback",{source:a,textModels:N.length,message:L});return}throw A}if(l!==Ea.current)return;const E=My(R);E.textModels=Ol(N,E.textModels);const M=R.errors&&R.errors.length>0?R.errors.join(" | "):void 0;Ze({status:"ready",...E,source:R.source,updatedAt:R.updatedAt,message:M}),f.emit("modelCatalog.refresh.completed",{source:a,textModels:E.textModels.length,imageModels:E.imageModels.length,videoModels:E.videoModels.length,hasWarnings:!!M})}catch(j){if(l!==Ea.current)return;const S=j instanceof Error?j.message:String(j);Ze(N=>({...N,status:"error",message:S})),f.emit("modelCatalog.refresh.failed",{source:a,message:S})}},[]);g.useEffect(()=>{tt()&&(Yt(),Zn("mount",!0))},[Zn,Yt]),g.useEffect(()=>{En&&(qa(!0),f.emit("mindcanvas.projectGallery.opened",{source:"startup"}))},[En]);const ru=g.useCallback(()=>{qa(a=>{const s=!a;return s&&ta.length===0&&Te!=="checking"&&Yt(),f.emit(s?"mindcanvas.projectGallery.opened":"mindcanvas.projectGallery.closed",{source:"top-tab"}),s})},[ta.length,Te,Yt]),Tt=g.useCallback(a=>{qa(s=>(s&&f.emit("mindcanvas.projectGallery.closed",{source:a}),!1))},[]),iu=g.useCallback(a=>{_n(a),localStorage.setItem(wd,String(a)),f.emit("mindcanvas.projectGallery.startupPreference",{enabled:a})},[]),Gs=g.useCallback(async(a="manual")=>{if(Po(xr()),!be){const s=Qe.cloudBoards.canAttempt?"sign-in-required":Qe.cloudBoards.mode;Le(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),Le(null);try{const s=await nh(Cs());Qa(s),Le(s.length>0?`Loaded ${s.length} cloud board${s.length===1?"":"s"}.`:"No cloud boards yet.")}catch(s){Le(s instanceof Error?s.message:String(s))}finally{en(!1)}},[be,Qe.cloudBoards.canAttempt,Qe.cloudBoards.mode]),Ei=g.useCallback(a=>{Ja(a),f.emit("projectStorage.tab",{tab:a}),a==="cloud"&&Gs("tab")},[Gs]),lu=g.useCallback(()=>{mp(!0),f.emit("runtimeStatus.bridge.hostedAccess.enabled"),Yt()},[Yt]),$o=g.useCallback(a=>{We(a),na(s=>sc(a,s))},[]),du=g.useCallback(async(a="manual")=>{var i;const s=++Pe.current;if(fe(null),f.emit("projectStorage.workspace.refresh.requested",{source:a}),!tt()){We(null),fe("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:a,reason:"hosted-access-off"});return}try{const l=await Xt();if(s!==Pe.current)return;if(He(l.status??null),l.state!=="connected"){pe(l.state),We(null),fe(l.message||"LocalBridge is unavailable.");return}const u=await Dl(l.baseUrl);if(s!==Pe.current)return;const h=Ga(u.rootPath||((i=l.status)==null?void 0:i.workspace));fe(h?null:"LocalBridge workspace path is unavailable."),h&&$o(h),f.emit("projectStorage.workspace.refresh",{source:a,path:h||null})}catch(l){if(s!==Pe.current)return;fe(l instanceof Error?l.message:String(l))}},[$o]),Ks=g.useCallback(async(a,s)=>{const i=Ga(a);if(!i||Bt)return;const l=++Pe.current;if(Ie(!0),fe("Switching LocalBridge workspace..."),f.emit("projectStorage.workspace.set.requested",{source:s,path:i}),!tt()){We(null),fe("Hosted LocalBridge access is off."),Ie(!1),f.emit("projectStorage.workspace.blocked",{source:s,reason:"hosted-access-off"});return}try{const u=await Xt();if(l!==Pe.current)return;if(He(u.status??null),u.state!=="connected"){pe(u.state),fe(u.message||"LocalBridge is unavailable.");return}const h=Ua(u.status);if(!h){pe("unavailable"),fe("LocalBridge write token is unavailable.");return}const C=await pp(i,h,u.baseUrl);if(l!==Pe.current)return;const k=Ga(C.workspace||i);$o(k),pe("connected"),fe(`Local workspace set to ${ys(k)}.`),f.emit("projectStorage.workspace.set",{source:s,path:k}),Yt()}catch(u){if(l!==Pe.current)return;pe("unavailable"),fe(u instanceof Error?u.message:String(u))}finally{l===Pe.current&&Ie(!1)}},[Bt,Yt,$o]),cu=g.useCallback(async()=>{const a=++Pe.current;if(Ie(!0),fe("Opening folder picker..."),f.emit("projectStorage.workspace.browse.requested",{path:Re||null}),!tt()){We(null),fe("Hosted LocalBridge access is off."),Ie(!1),f.emit("projectStorage.workspace.blocked",{source:"browse",reason:"hosted-access-off"});return}try{const s=await Xt();if(a!==Pe.current)return;if(He(s.status??null),s.state!=="connected"){pe(s.state),fe(s.message||"LocalBridge is unavailable.");return}const i=Ua(s.status),l=await gp(Re,i,s.baseUrl);if(a!==Pe.current)return;if(l.canceled||!l.success||!l.path){fe("Workspace selection cancelled."),f.emit("projectStorage.workspace.browse.cancelled");return}f.emit("projectStorage.workspace.browse",{path:l.path}),Ie(!1),await Ks(l.path,"browse")}catch(s){if(a!==Pe.current)return;fe(s instanceof Error?s.message:String(s))}finally{a===Pe.current&&Ie(!1)}},[Ks,Re]),uu=g.useCallback(async()=>{var s,i;const a=++De.current;if(Ve(!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."),Ve(!1);return}if((i=v.current.source)!=null&&i.truncated){de("This imported board was truncated, so export is blocked to avoid data loss."),Ve(!1);return}if(!tt()){pe("blocked"),He(null),de("Hosted LocalBridge access is off."),Ve(!1);return}try{const l=await Xt();if(a!==De.current)return;if(He(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 Wg(v.current,oe.current,u,l.baseUrl,Ue.current);if(a!==De.current)return;const C=Wa({...v.current,nodes:h.nodes,source:h.source,updatedAt:h.metadata.UpdatedAt||new Date().toISOString()},Ue.current);r(C),Kt(C),Ye(St()),pe("connected"),Be(k=>[h.metadata,...k.filter(j=>j.Id!==h.metadata.Id)]),de(`Exported "${at(h.metadata.Title)}" to LocalBridge.`)}catch(l){if(a!==De.current)return;pe("unavailable"),de(l instanceof Error?l.message:String(l))}finally{a===De.current&&Ve(!1)}},[]),Xe=g.useCallback((a,s,i={})=>{const l=Yl(a),u=Bl(l),h=Vl(u);c(C=>za(C,v.current,{description:"Activate board"})),y([]),r(h),b(h.nodes[0]?[h.nodes[0].id]:[]),ae(null),Je(null),G(null),Tt("board-activate"),f.emit(s,{boardId:h.id,...i})},[Tt]),_i=g.useCallback(()=>{const a=Xd(v.current.settings);Xe(a,"board.local.create"),Z({x:540,y:210,scale:1})},[Xe,Z]),mu=g.useCallback(async a=>{if(!be){Le("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),Le(null);try{const s=await oh(Cs(),a.id,v.current.settings);if(!s){Le("Cloud board was not found or is not available to this user.");return}Xe(s,"board.cloud.switch",{sourceBoardId:a.id}),Z({x:540,y:210,scale:1})}catch(s){Le(s instanceof Error?s.message:String(s))}finally{an(null)}},[Xe,Z,be]),Uo=g.useCallback(async(a,s)=>{if(!be){Le("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),Le(null);try{const i=await sh(Cs(),a,oe.current,Ue.current);if(!i){Le("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}},Ue.current);r(u),Kt(u),Ye(St()),Qa(h=>[i,...h.filter(C=>C.id!==i.id)]),Le(`Saved "${at(i.name)}" to cloud.`)}catch(i){Le(i instanceof Error?i.message:String(i))}finally{en(!1)}},[be]),pu=g.useCallback(()=>{Uo(v.current,"save-current")},[Uo]),gu=g.useCallback(()=>{const a=Xd(v.current.settings);Uo(a,"new-cloud-board")},[Uo]),hu=g.useCallback(()=>{var l;if(!ne)return;if(ne.options.length>0||!ne.quickCreateTemplateId){const u=oe.current,h=Mt(),C={x:(h.width/2-u.x)/u.scale,y:(h.height/2-u.y)/u.scale},k=v.current.nodes,j=k.length?Math.max(...k.map(A=>A.x+A.width)):C.x-280-hs,S=k.length?Math.min(...k.map(A=>A.y)):C.y-310,N=hp(ne,rt,j+hs,S,Ut,v.current.settings.appLanguage);r(A=>{var L;return c(J=>za(J,A,{description:"Create template card"})),y([]),f.emit("templateCard.node.create",{id:N.id,launcherId:ne.id,optionId:((L=N.metadata)==null?void 0:L.templateLauncherSelectedOptionId)??null,source:"launcher-panel"}),{...A,nodes:[...A.nodes,N],updatedAt:new Date().toISOString()}}),b([N.id]);const R=Math.min(oe.current.scale,me((h.height-190)/N.height,.72,1)),E=Math.max(320,h.height-180);Z({...oe.current,scale:R,x:h.width/2-(N.x+N.width/2)*R,y:48+E/2-(N.y+N.height/2)*R}),z(N.id),window.setTimeout(()=>z(A=>A===N.id?null:A),1e3),$t(!1),bt(null);const M="Template card added to the current canvas.";$e(M),window.setTimeout(()=>{$e(A=>A===M?null:A)},2200),f.emit("templateCard.node.focus",{nodeId:N.id,launcherId:ne.id});return}const s=rs(Ke,Ut);if(s){bt(s),f.emit("template.validation.failed",{launcherId:ne.id,optionId:rt,templateId:(Ke==null?void 0:Ke.id)??null,message:s});return}const i=fp(ne,rt,Ut,v.current.settings);if(!i){const u="Template could not be created.";bt(u),f.emit("template.validation.failed",{launcherId:ne.id,optionId:rt,templateId:(Ke==null?void 0:Ke.id)??null,message:u});return}Xe(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}),Z({x:540,y:210,scale:1}),$t(!1),bt(null)},[Xe,Ke,ne,Z,Mt,rt,Ut]),Bi=g.useCallback(a=>{if(a===v.current.id){Tt("stored-board-current");return}const s=Zm(a);s&&(Xe(s,"board.local.switch"),Z({x:540,y:210,scale:1}))},[Xe,Z,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}),Qm(a),Ye(St())},[]),fu=g.useCallback((a,s)=>{if(!a||!s||a===s)return;Kt(Wa(v.current,Ue.current));const i=St(),l=ln.map(N=>N.id),u=l.indexOf(a),h=l.indexOf(s);if(u<0||h<0)return;const C=[...l],k=C.splice(u,1)[0];if(!k)return;C.splice(h,0,k);const j=i.map(N=>N.id).filter(N=>!C.includes(N)),S=ep([...C,...j]);Ye(S),f.emit("board.tabs.drop",{sourceId:a,targetId:s,visibleIds:C})},[ln]),bu=g.useCallback(async a=>{const s=++De.current;Za(a.Id),de(null);try{const i=await Vg(a,v.current.settings);if(s!==De.current)return;Xe(i,"board.localBridge.switch",{sourceBoardId:a.Id});const l=Kr(a.LastCameraX,a.LastCameraY,a.LastCameraZ);Z(l?{...l,scale:me(l.scale,Ss,ws)}:{x:540,y:210,scale:1})}catch(i){if(s!==De.current)return;de(i instanceof Error?i.message:String(i))}finally{s===De.current&&Za(null)}},[Xe,Z]),yu=g.useCallback(()=>{var a;(a=Kn.current)==null||a.click()},[]),xu=g.useCallback(async a=>{var i;const s=Array.from(a??[]).filter(l=>/\.json$/i.test(l.name));if(s.length===0){$e("Choose a React or MindExec board JSON file."),window.setTimeout(()=>$e(null),1800);return}try{const l=await Promise.all(s.map(async N=>({file:N,payload:JSON.parse(await N.text())}))),u=l.find(Ur),h=ey(l),C=l.find(N=>!Ur(N)&&$r(N.payload))??l.find(N=>!Ur(N)&&xc(N.payload)>0);if(!C)throw new Error("No board JSON file was found.");const k=$r(C.payload)?null:ty(C,h),j=k?Kr(k.metadata.LastCameraX,k.metadata.LastCameraY,k.metadata.LastCameraZ):null,S=$r(C.payload)?Qb(C.payload,C.file.name):kc(C.payload,v.current.settings,{boardId:(k==null?void 0:k.metadata.Id)??Bs(C.file.name),title:(k==null?void 0:k.metadata.Title)||Bs(C.file.name),updatedAt:k==null?void 0:k.metadata.UpdatedAt,layoutPayload:u==null?void 0:u.payload,cameraBookmarks:k==null?void 0:k.metadata.CameraBookmarks,lastCursorX:k==null?void 0:k.metadata.LastCursorX,lastCursorY:k==null?void 0:k.metadata.LastCursorY});if(S.nodes.length===0)throw new Error("The selected file did not contain any importable board nodes.");Xe(S,"board.import.file",{fileName:C.file.name,layoutFileName:(u==null?void 0:u.file.name)??null,metadataFileName:(k==null?void 0:k.fileName)??null,nodes:S.nodes.length,edges:S.edges.length,sourceKind:((i=S.source)==null?void 0:i.kind)??null,originalBoardId:(k==null?void 0:k.metadata.Id)??null,cameraRestored:!!j}),Kt(S),Ye(St()),Z(j?{...j,scale:me(j.scale,Ss,ws)}:{x:540,y:210,scale:1}),$e(`Imported "${at(S.name)}".`),window.setTimeout(()=>$e(null),2200)}catch(l){const u=l instanceof Error?l.message:String(l);$e(`Import failed: ${u}`),f.emit("board.import.failed",{message:u}),window.setTimeout(()=>$e(null),3200)}},[Xe,Z]);g.useEffect(()=>{Z(oe.current,!1)},[Z]);const Ct=g.useCallback((a,s)=>{const i=oe.current,l=pa(a,s);return{x:(l.x-i.x)/i.scale,y:(l.y-i.y)/i.scale}},[pa]),zo=g.useCallback((a,s,i={})=>{if(!Td(a))return null;const l=i.snap??v.current.settings.gridSnap??!0,u=hb(a,l);if(Ue.current=u,Xa(u),r(h=>{const C=Er(h);return C&&C.x===u.x&&C.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,C=Mt();Z({...oe.current,x:C.width/2-i.cameraTarget.x*h,y:C.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},[Z,Mt]),Ho=g.useCallback((a,s,i)=>{const l=Ct(a,s);return!!zo(l,i,{snap:v.current.settings.gridSnap??!0})},[Ct,zo]),Se=g.useCallback((a,s,i={})=>{var N;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{...Ue.current};const C=(N=Ht.current)==null?void 0:N.getBoundingClientRect(),k=C?C.left+C.width/2:window.innerWidth/2,j=i.centerClientY??(C?C.top+C.height/2:window.innerHeight/2),S=h?Ct(a,s):Ct(k,j);return{x:S.x-l/2,y:S.y-u/2}},[Ct]),ye=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};zo(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)})},[zo]),Cu=g.useCallback(a=>{Ns(a.target)||(Vt.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=Bp();if(!a)return;const{sourceNode:s,itemNodes:i,taskNode:l,edges:u}=Dp(a,{...Se(void 0,void 0,{width:780,height:290})});if(v.current.nodes.some(h=>{var C;return((C=h.metadata)==null?void 0:C.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),ye(l,"tool.handoff.consumed"),window.setTimeout(()=>z(h=>h===l.id?null:h),1400)},[O,Se,ye]);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=bp(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=yp(i.appLanguage);f.emit("appLanguage.select",{appLanguage:l,source:s})}if(typeof i.model=="string"){const l=Jt(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};Op(l,s)}Fp({...v.current.settings,...i})},[fn]),Di=g.useCallback((a,s)=>{ve({[a]:s},`inline.${String(a)}`)},[ve]),Wo=g.useMemo(()=>Ol(xp,aa.textModels),[aa.textModels]),Oi=g.useMemo(()=>Cp(n.settings,Wo),[n.settings,Wo]),Rt=g.useMemo(()=>{const a=Cy(Wo);return{Image:Fl("Image",mo("Image"),a,aa.imageModels),Video:Fl("Video",mo("Video"),aa.videoModels)}},[aa.imageModels,aa.videoModels,Wo]);g.useEffect(()=>{x.current=Rt},[Rt]);const Js=g.useMemo(()=>Io(n.settings,"Image",Rt),[n.settings,Rt]),Zs=g.useMemo(()=>Io(n.settings,"Video",Rt),[n.settings,Rt]),ku=Jt(n.settings.model),Su=g.useMemo(()=>zr(Oi,"Text",n.settings),[n.settings,Oi]),wu=g.useMemo(()=>zr(mo("Image",Rt),"Image",n.settings),[n.settings,Rt]),vu=g.useMemo(()=>zr(mo("Video",Rt),"Video",n.settings),[n.settings,Rt]),ju=g.useMemo(()=>ec(Js.aspectOptions),[Js.aspectOptions]),Iu=g.useMemo(()=>ec(Zs.aspectOptions),[Zs.aspectOptions]),Nu=g.useMemo(()=>ky(),[]),Au=g.useCallback((a,s="bottom-input")=>{const i=Jt(a);ve({model:i},`connection.model.${s}`)},[ve]),Mu=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,C=Wr(a,l,h),k=a==="Image"?{imageRouterImageModel:l.id,imageRouterImageAspectPresetId:C.id}:{imageRouterVideoModel:l.id,imageRouterVideoAspectPresetId:C.id};ve(k,`inline.${a.toLowerCase()}Model`),f.emit("media.model.select",{mode:a,model:l.id,aspectPresetId:C.id,requestedSize:Vr(C)})},[ve]),Tu=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]),Ru=g.useCallback(()=>{ce(!0),f.emit("settings.dialog.open",{boardId:v.current.id})},[]),Lu=g.useCallback(()=>{ce(!1),f.emit("settings.dialog.close",{boardId:v.current.id})},[]),Fi=g.useCallback(()=>{ra(!0),f.emit("promptDebug.open",{boardId:v.current.id})},[]),Pu=g.useCallback(()=>{ra(!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:Zp,onClick:Fi,active:ht,testId:"prompt-debug-open"}])},[t,Fi,ht]);const Eu=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),da(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})},[]),_u=g.useCallback(()=>{const a=v.current.settings.appLanguage,s=lo(la,a)??Aa[0];if(!s)return;const i=ss(s,rt),l=uo(s,i==null?void 0:i.id,a);Un(s.id),zn((i==null?void 0:i.id)??null),da(u=>Object.keys(u).length>0?u:co(l)),bt(null),Wn(!1),it(!1),$t(!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})},[la,rt,Aa]),Bu=g.useCallback(()=>{$t(!1),bt(null),f.emit("template.launcher.close",{launcherId:la})},[la]),Du=g.useCallback(a=>{if(!ne)return;const s=uo(ne,a,v.current.settings.appLanguage);zn(a),da(co(s)),bt(null),f.emit("template.option.select",{launcherId:ne.id,optionId:a,templateId:(s==null?void 0:s.id)??null})},[ne]),Ou=g.useCallback((a,s)=>{da(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]),qe=g.useCallback(a=>{Vn(a),window.setTimeout(()=>{Vn(s=>s===a?null:s)},2600)},[]),Fu=g.useCallback(()=>{$t(!1),it(!1),Ta(a=>{const s=!a;return f.emit(s?"templateStudio.chooser.open":"templateStudio.chooser.close",{boardId:v.current.id,studioOpen:sn}),s})},[sn]),$i=g.useCallback(()=>{Ta(!1),f.emit("templateStudio.chooser.close",{boardId:v.current.id})},[]),Ui=g.useCallback(()=>{const a=v.current;$t(!1),it(!1),Ta(!1),Bo(Id(a.id,a.name)),et(null),Wn(!0),f.emit("templateStudio.open",{boardId:a.id,nodeCount:a.nodes.length})},[]),Vo=g.useCallback(a=>{const s=v.current,i=is(we,s.nodes);et(i),Nd(s.id,we);const l=Kt(Wa(s,Ue.current));return Ye(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(()=>{Vo("exit"),Wn(!1),Ta(!1),it(!1),et(null),f.emit("templateStudio.close",{boardId:v.current.id})},[Vo]),$u=g.useCallback(()=>{const a=ry(v.current.settings),s=xs(a.name);Ta(!1),it(!1),Bo(s),et(null),Wn(!0),Nd(a.id,s),Kt(a),Ye(St()),Xe(a,"templateStudio.board.create",{templateId:s.templateId,source:"template-studio-chooser"}),Z({x:540,y:210,scale:1}),f.emit("templateStudio.chooser.startNew",{boardId:a.id,templateId:s.templateId}),qe("New Template Studio draft board opened.")},[Xe,Z,qe]),Uu=g.useCallback(()=>{Ui(),f.emit("templateStudio.chooser.convertCurrent",{boardId:v.current.id,nodes:v.current.nodes.length}),qe("Current board is now in Template Studio mode.")},[Ui,qe]),Yo=g.useCallback((a,s)=>{Bo(i=>{const l={...i,[a]:a==="templateId"?xo(s):s};return f.emit("templateStudio.draft.patch",{key:a}),l}),et(null)},[]),zu=g.useCallback(()=>{const a=Vo("save");qe(a.issues.length>0?"Template draft saved with manifest issues.":"Template draft and board saved locally.")},[Vo,qe]),Hu=g.useCallback(a=>{const s=X("node"),i=$l(a),l=`${a.replace("template.","")}-${Date.now().toString(36)}`,u=a==="template.input",h=u?300:a==="template.prompt"?360:340,C=u?178:a==="template.prompt"?214:190,k=Se(void 0,void 0,{width:h,height:C}),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:k.x,y:k.y,width:h,height:C,status:a==="template.prompt"?"idle":void 0,tags:["Template Studio",br(a)],metadata:j};O(N=>({...N,nodes:[...N.nodes,S]}),"templateStudio.node.add",{id:S.id,studioNodeType:a,compileTarget:i}),b([S.id]),et(null),ye(S,"templateStudio.node.add")},[O,Se,ye]),Qs=g.useCallback(()=>{const a=is(we,v.current.nodes);return et(a),f.emit("templateStudio.compile",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length,issues:a.issues.length}),qe(a.issues.length>0?"Template manifest has issues.":"Template manifest compiled."),a},[qe,we]),Wu=g.useCallback(async()=>{const a=ge??is(we,v.current.nodes);ge||et(a);const s=await Co(a.manifestJson);f.emit("templateStudio.manifest.copy",{templateId:a.template.id,chars:a.manifestJson.length,method:s}),qe("Template manifest copied.")},[qe,we,ge]),Vu=g.useCallback(()=>{const a=Qs();if(a.issues.length>0){it(!1),f.emit("templateStudio.test.open.blocked",{templateId:a.template.id,issues:a.issues.length}),qe("Fix manifest issues before test create.");return}Ra(co(a.template)),ca(null),it(!0),f.emit("templateStudio.test.open",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length})},[Qs,qe]),Yu=g.useCallback(()=>{it(!1),Ra({}),ca(null),f.emit("templateStudio.test.close",{templateId:(ge==null?void 0:ge.template.id)??null})},[ge==null?void 0:ge.template.id]),Gu=g.useCallback((a,s)=>{Ra(i=>({...i,[a]:s})),rn&&ca(null),f.emit("templateStudio.test.input.patch",{key:a})},[rn]),Ku=g.useCallback(()=>{const a=(ge==null?void 0:ge.issues.length)===0?ge:is(we,v.current.nodes);if(et(a),a.issues.length>0){ca("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,zt);if(s){ca(s),f.emit("templateStudio.test.board.blocked",{templateId:a.template.id,message:s});return}const i=Ad(we),l=kp(i,void 0,a.template,zt,v.current.settings);Kt(l.board),Kt(Wa(v.current,Ue.current)),Ye(St()),it(!1),Ra({}),qe(`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})},[qe,we,ge,zt]),Xu=g.useCallback((a,s)=>{b(i=>s?i.includes(a)?i.filter(l=>l!==a):[...i,a]:[a]),ae(null)},[]),qu=g.useCallback(()=>{var u,h,C,k,j,S,N,R;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:X("node"),kind:"memo",title:"Agent",body:nb,x:i.x,y:i.y,width:500,height:300,tags:["Agent Command","Researcher","Draft"],metadata:cy()};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:(C=l.metadata)==null?void 0:C.AgentCommandRequestedRole,adapterState:(k=l.metadata)==null?void 0:k.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:(N=l.metadata)==null?void 0:N.AgentCommandRequestedRole,adapterState:(R=l.metadata)==null?void 0:R.AdapterState}),b([l.id]),ae(null),z(l.id),ye(l,"agentCommand.node.add"),window.setTimeout(()=>z(E=>E===l.id?null:E),1200)},[O,Se,ye]),Ju=g.useCallback(()=>{var u,h,C,k,j,S,N,R;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:X("node"),kind:"memo",title:"Code Note",body:ab,x:i.x,y:i.y,width:400,height:300,tags:["Code Note","Draft","Unlinked"],metadata:uy()};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:(C=l.metadata)==null?void 0:C.CodeNoteSyncState,adapterState:(k=l.metadata)==null?void 0:k.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:(N=l.metadata)==null?void 0:N.CodeNoteSyncState,adapterState:(R=l.metadata)==null?void 0:R.AdapterState}),b([l.id]),ae(null),z(l.id),ye(l,"codeNote.node.add"),window.setTimeout(()=>z(E=>E===l.id?null:E),1200)},[O,Se,ye]),xe=g.useCallback((a,s)=>{var N,R,E,M,A,L,J,Ce,ut;if(a==="remote-monitor"){const te=v.current.nodes.find(Va);if(te){const yn=_r(te),$a=oe.current.scale,ns=Mt(),os=Pd(te.height,window.innerHeight);Z({...oe.current,x:ns.width/2-yn.x*$a,y:os-yn.y*$a}),b([te.id]),z(te.id),window.setTimeout(()=>z(ba=>ba===te.id?null:ba),1e3);const ro="Remote monitor already exists on this board. Focused existing node.";$e(ro),window.setTimeout(()=>{$e(ba=>ba===ro?null:ba)},2200),f.emit("remoteMonitor.node.duplicateIgnored",{action:"toolbar-add",nodeId:te.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?Io(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,C=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,k=a==="remote-monitor"?Pd(C,window.innerHeight):window.innerHeight/2,j=Se(void 0,void 0,{width:h,height:C,centerClientY:k}),S={id:X("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:C,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?dy(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(te=>({...te,nodes:[...te.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:(N=S.metadata)==null?void 0:N.MediaModel,aspectPresetId:(R=S.metadata)==null?void 0:R.AspectPresetId,requestedSize:(E=S.metadata)==null?void 0:E.RequestedSize,adapterState:((M=S.metadata)==null?void 0:M.AdapterState)??"adapter-gated",externalActionPolicy:((A=S.metadata)==null?void 0:A.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:((L=S.metadata)==null?void 0:L.AdapterState)??"adapter-gated"}),a==="mask"&&f.emit("node.mask.add",{id:S.id,hasImage:!!S.imageUrl,imageRouterMask:((J=S.metadata)==null?void 0:J.ImageRouterMask)??"true",semanticType:((Ce=S.metadata)==null?void 0:Ce.SemanticType)??"ImageEditMask",adapterState:((ut=S.metadata)==null?void 0:ut.AdapterState)??"adapter-gated"}),b([S.id]),ye(S,"node.add")},[Z,O,Se,ye]),ee=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]),Gt=g.useCallback((a,s)=>{const i=K.current[0],l=v.current.nodes.find(u=>u.id===i);l&&(ee(i,{metadata:{...l.metadata??{},[a]:a===Y.templateNodeId||a===Y.inputKey?xo(s):s}}),et(null),f.emit("templateStudio.node.metadata.patch",{id:i,key:a}))},[ee]),Hi=g.useCallback(a=>{var h;const s=K.current[0],i=v.current.nodes.find(C=>C.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]:$l(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"),ee(s,{metadata:u}),et(null),f.emit("templateStudio.node.role.assign",{id:s,studioNodeType:a})},[ee]),T=g.useCallback(a=>{$e(a),window.setTimeout(()=>{$e(s=>s===a?null:s)},2200)},[]),Zu=g.useCallback((a,s,i)=>{var S;const l=v.current.nodes.find(N=>N.id===a);if(!l)return;const u=ic(l.body),h=Sp(l,s,i,v.current.settings);if(!h||h.nodes.length===0){T("Template card could not generate nodes."),f.emit("templateCard.generate.blocked",{nodeId:a,optionId:s});return}O(N=>({...N,nodes:[...N.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 C=h.nodes.map(N=>N.id);b(C),z(C[0]??null);const k=h.nodes[h.nodes.length-1];k&&ye(k,"templateCard.generate"),window.setTimeout(()=>z(N=>N===C[0]?null:N),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.`;T(j)},[O,ye,T]),Qu=g.useCallback(a=>{const s=v.current.nodes.find(N=>N.id===a.sourceNodeId),i=560,l=390,u=Se(void 0,void 0,{width:i,height:l}),h=X("node"),C=s?s.x+s.width+hs:u.x,k=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:C,y:k,width:i,height:l,tags:["Remote","Control","LocalBridge"],metadata:j};O(N=>({...N,nodes:[...N.nodes,S]}),"remoteControl.node.add",{id:S.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId}),b([S.id]),ye(S,"remoteControl.node.add"),T(`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,ye,Mt,T]),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}),T(`Camera slot ${a} saved.`)},[ve,T]),Qn=g.useCallback(a=>{var l;const s=bs((l=v.current.settings.cameraBookmarks)==null?void 0:l[a]),i=s??{...Ha};Z(i),f.emit("camera.bookmark.goto",{slot:a,saved:!!s,...i}),T(s?`Camera slot ${a}.`:`Camera slot ${a} empty. Home view.`)},[Z,T]),er=g.useCallback(()=>{Z({...Ha}),f.emit("camera.bookmark.goto",{slot:"home",saved:!1,...Ha}),T("Home view.")},[Z,T]),Wi=g.useCallback(a=>{const s=oe.current,i=Vf,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};Z(l),f.emit("camera.keyboard.pan",{direction:a,...l})},[Z]),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}),T(s?"Mouse wheel mode.":"Trackpad pan mode.")},[ve,T]),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}),T(i==="down"?"Cursor direction down.":"Cursor direction right.")},[ve,T]),Go=g.useCallback(async(a,s="api")=>{const i=a===!0;try{if(i){if(document.fullscreenElement)return ga(!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 ga(l),f.emit("canvas.fullscreen.toggle",{source:s,active:l,fallback:!1}),l}return ga(!0),f.emit("canvas.fullscreen.toggle",{source:s,active:!0,fallback:!0}),!0}return document.fullscreenElement&&document.exitFullscreen&&await document.exitFullscreen(),ga(!1),f.emit("canvas.fullscreen.toggle",{source:s,active:!1,fallback:!1}),!1}catch(l){return ga(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}),T(i?"Read mode fallback.":"Read mode off."),i}},[ga,T]),eo=g.useCallback((a="keyboard")=>Go(!hn.current,a),[Go]);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=>Go(h,"api"),u=()=>eo("api");return a.getMindCanvasFullscreenState=i,a.setMindCanvasFullscreen=l,a.getMindCanvasReadModeState=i,a.setMindCanvasReadMode=l,a.toggleMindCanvasReadMode=u,Eo(!0),f.emit("canvas.readMode.api.bound"),()=>{Eo(!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")}},[Go,eo]);const em=g.useCallback(()=>{const a=v.current.settings.cameraBookmarks??{},s=Rr.find(i=>!a[i])??Rr[0];Ba(s)},[Ba]),tm=g.useCallback(a=>{Dr(v.current.settings.gridType)!==a&&ve({gridType:a},`canvas.gridMode.${a}`)},[ve]),am=g.useCallback(()=>{ve({gridSnap:!(v.current.settings.gridSnap??!0)},"canvas.gridSnap.toggle")},[ve]),nm=g.useCallback(a=>{const s=v.current.nodes.find(i=>i.id===a);!s||s.kind!=="directory"||(ia(a),f.emit("node.directorySettings.open",{id:a}))},[]),om=g.useCallback(()=>{ia(a=>(a&&f.emit("node.directorySettings.close",{id:a}),null))},[]),sm=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??""};ee(a,{sourceFilePath:l||si,metadata:u}),ia(null),f.emit("node.directorySettings.patch",{id:a,keys:["DirectoryPath","Include","Exclude"]}),T("Folder scan settings saved.")},[ee,T]),rm=g.useCallback(async a=>{const s=v.current.nodes.find(u=>u.id===a);if(!s||s.kind!=="directory")return;const i=ib(s);if(f.emit("node.directory.scan.requested",{id:a,hasBridgePath:!!i,hasHandle:$n.current.has(a)}),i){if(!tt()){pe("blocked"),f.emit("node.directory.scan.bridge.blocked",{id:a,reason:"hosted-access-off"}),T("Hosted LocalBridge access is off.");return}try{const u=await Xt();if(He(u.status??null),pe(u.state),u.state!=="connected"){f.emit("node.directory.scan.bridge.unavailable",{id:a,message:u.message||"LocalBridge is unavailable."}),T(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"}),T("LocalBridge read token is unavailable.");return}const C=ys(i,48);T(`Scanning ${C}...`),f.emit("node.directory.scan.bridge.requested",{id:a,path:i});const k=await db(i,s.metadata,h,u.baseUrl),j=new Date().toISOString();ee(a,{title:s.title==="Directory"||s.title==="New Folder"?C:s.title,body:Md(C,k),sourceFilePath:i,metadata:{...s.metadata??{},DirectoryPath:i,DirectoryName:C,DirectoryScanSource:"localbridge",DirectoryFileCount:String(k.fileCount),DirectoryDirCount:String(k.directoryCount),DirectoryLastScanUtc:j,DirectoryScanTruncated:String(k.truncated),DirectoryPreview:JSON.stringify(k.preview.slice(0,Rn))}}),f.emit("node.directory.scan.bridge.completed",{id:a,path:i,fileCount:k.fileCount,directoryCount:k.directoryCount,truncated:k.truncated}),f.emit("node.directory.scan.completed",{id:a,source:"localbridge",directoryName:C,fileCount:k.fileCount,directoryCount:k.directoryCount,truncated:k.truncated}),T(`Scanned ${C}: ${k.fileCount} files, ${k.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}),T("LocalBridge folder scan failed.")}return}const l=window;if(!l.showDirectoryPicker){f.emit("node.directory.scan.unsupported",{id:a}),T("Folder scan needs a Chromium browser with File System Access enabled.");return}try{let u=$n.current.get(a);u||(u=await l.showDirectoryPicker(),$n.current.set(a,u));const h={mode:"read"},C=u.queryPermission?await u.queryPermission(h):"granted";if((C==="granted"||!u.requestPermission?C:await u.requestPermission(h))!=="granted"){f.emit("node.directory.scan.denied",{id:a,directoryName:u.name}),T("Folder permission was not granted.");return}T(`Scanning ${u.name}...`);const j=await sb(u,s.metadata),S=new Date().toISOString();ee(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}),T(`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}),T("Folder scan cancelled.");return}f.emit("node.directory.scan.failed",{id:a,message:u instanceof Error?u.message:String(u)}),T("Folder scan failed in this browser context.")}},[ee,T]),Yi=g.useCallback(a=>{Fn(a.id),nn(at(a.name))},[]),nr=g.useCallback(()=>{Fn(null),nn("")},[]),or=g.useCallback(a=>{const s=at(va).slice(0,90);a===v.current.id?(qs(s),T("Board renamed.")):tp(a,s)?(Ye(St()),T("Saved board renamed.")):(f.emit("board.rename.failed",{boardId:a,scope:"stored"}),T("Board rename failed.")),Fn(null),nn("")},[qs,T,va]),im=g.useCallback((a,s)=>{s.key==="Enter"?(s.preventDefault(),or(a)):s.key==="Escape"&&(s.preventDefault(),nr())},[nr,or]),lm=g.useCallback(a=>{const s=v.current.nodes.find(l=>l.id===a);if(!bo(s))return;const i=s.aiEnabled===!1;ee(a,{aiEnabled:i}),f.emit("node.aiReference.toggled",{id:a,enabled:i}),T(i?"AI reference enabled.":"AI reference disabled.")},[ee,T]),Ko=g.useCallback(async(a,s,i,l,u)=>{ma.current=a;try{const h=await Co(a);return xt.current=0,f.emit(s,{...i,ok:!0,method:h}),T(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)}),T(u),"react-local"}},[T]),dm=g.useCallback(async a=>{const s=v.current.nodes.find(l=>l.id===a);if(!s)return;const i=wb(s);if(i)try{const l=await vb(i);f.emit("node.copyImage",{id:a,ok:!0,mode:l,urlKind:i.split(":",1)[0]||"relative"}),T(l==="image"?"Image copied to clipboard.":"Image reference copied.");return}catch(l){ma.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)}),T("Image reference copied inside this canvas.");return}await Ko(Sb(s),"node.copy",{id:a},"Node content copied.","Node content copied inside this canvas.")},[Ko,T]),cm=g.useCallback(async(a,s)=>{await Ko(s,"node.embed.copyUrl",{id:a,sourceKind:s.split(":",1)[0]||"relative"},"Embed URL copied.","Embed URL copied inside this canvas.")},[Ko]),um=g.useCallback(a=>{const s=v.current.nodes.find(l=>l.id===a);if(!bo(s))return;const i=Br(s);ee(a,{height:i}),f.emit("node.fitHeight",{id:a,height:i}),T("Node height fitted to text.")},[ee,T]),mm=g.useCallback(a=>{const s=v.current.nodes.find(C=>C.id===a);if(!bo(s))return;const i=xb(s),l=i?Math.max(120,Math.round(s.originalHeight||Br(s))):Math.max(120,Math.min(s.height,qf)),u=i?0:Math.round(s.height),h=i;O(C=>({...C,nodes:C.nodes.map(k=>k.id===a?{...k,height:l,isExpanded:h,originalHeight:u}:k)}),"node.expandCollapse",{id:a,expanded:h,height:l,originalHeight:u}),T(h?"Node expanded.":"Node collapsed.")},[O,T]),pm=g.useCallback(a=>{const s=v.current.nodes.find(l=>l.id===a);if(!s||s.kind!=="code")return;const i=s.wordWrap===!1;ee(a,{wordWrap:i}),f.emit("node.wordWrap.toggled",{id:a,enabled:i}),T(i?"Word wrap enabled.":"Word wrap disabled.")},[ee,T]),gm=g.useCallback((a,s)=>{const i=v.current.nodes.find(h=>h.id===a);if(!bo(i))return;const l=fb(s.executionMode),u=Array.from(new Set([...i.tags??[],"Company root",l,s.enableSubAgents?"sub-agents":"single-agent","adapter-gated"]));ee(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}),T(`Company root staged locally as ${l}. Open CompanyCore to run it with an adapter later.`)},[ee,T]),hm=g.useCallback(a=>{var i;const s=v.current.nodes.find(l=>l.id===a);if(!(s!=null&&s.companyMode)){T("Stage this node as a Company root first.");return}Ot(a),f.emit("companyGraph.open",{id:a,status:((i=s.metadata)==null?void 0:i.CompanyStatus)??"Staged"})},[T]),fm=g.useCallback(a=>{const s=v.current.nodes.find(i=>i.id===a);s!=null&&s.companyMode&&(ee(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}),T("Company goal synced from this note locally."))},[ee,T]),bm=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";ee(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}),T(`Company status refreshed locally: ${i}.`)},[ee,T]),ym=g.useCallback(()=>{Ot(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&&(ee(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}),T(`Company marked ${s.toLowerCase()} locally.`))},[ee,T]),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)??""]);ee(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()}}),Ot(null),f.emit("companyGraph.remove",{id:a}),T("Company staging removed from this node.")},[ee,T]),xm=g.useCallback((a,s)=>{const i=v.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(ee(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}),T(`Company approval ${s.toLowerCase()} locally.`))},[ee,T]),Cm=g.useCallback((a,s)=>{const i=s.trim();if(!i)return;const l=X("node"),u=X("edge");O(h=>{var j,S;const C=h.nodes.find(N=>N.id===a);if(!C)return h;const k={id:l,kind:"ai-task",title:"Company follow-up task",body:i,x:C.x+C.width+120,y:C.y+52,width:350,height:190,status:"idle",tags:["Company follow-up",((j=C.metadata)==null?void 0:j.CompanyExecutionModeLabel)??"Company"],metadata:{CompanyRootNodeId:C.id,CompanyExecutionMode:((S=C.metadata)==null?void 0:S.CompanyExecutionMode)??"Auto",CompanyTaskStatus:"Staged",CompanyStagedAt:new Date().toISOString()}};return{...h,nodes:[...h.nodes,k],edges:[...h.edges,{id:u,from:C.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),T("Company follow-up task staged locally.")},[O,T]),km=g.useCallback((a,s)=>{const i=X("node"),l=X("edge");O(u=>{const h=u.nodes.find(k=>k.id===a);if(!h)return u;const C={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,C],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),T("Company artifact added to the canvas.")},[O,T]),Sm=g.useCallback((a,s="preview")=>{const i=Cb(a);if(!i){T("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"){Je({url:i,fileName:kb(a)}),f.emit("node.pdf.preview.open",{id:a.id,urlKind:i.startsWith("http")?"url":"path"});return}if(a.kind==="embed"&&!Pn(i)){T("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})},[T]),wm=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),Ot(l=>l&&i.has(l)?null:l),ia(l=>l&&i.has(l)?null:l),T(`Deleted ${s.length} selected node${s.length===1?"":"s"}.`)},[O,T]),Xo=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(M=>u.has(M.id));if(h.length===0)return;const C=h.filter(Va),k=h.filter(M=>!Va(M));if(C.length>0&&f.emit("remoteMonitor.node.duplicateIgnored",{action:"duplicate",source:s,skippedCount:C.length,nodeId:(E=C[0])==null?void 0:E.id}),k.length===0){const M=C[0]??l.nodes.find(Va);M&&(b([M.id]),z(M.id),window.setTimeout(()=>z(A=>A===M.id?null:A),1e3)),T("Remote monitor is single-instance per board. Focused existing monitor.");return}const j=new Map(k.map(M=>[M.id,X("node")])),S=k.map(M=>({...M,id:j.get(M.id),x:M.x+50,y:M.y-50,status:M.status==="running"?"idle":M.status,metadata:M.metadata?{...M.metadata}:void 0,tags:M.tags?[...M.tags]:void 0,imageStack:di(M.imageStack,M.id,j.get(M.id))})),N=l.edges.filter(M=>j.has(M.from)&&j.has(M.to)).map(M=>({...M,id:X("edge"),from:j.get(M.from),to:j.get(M.to)}));O(M=>({...M,nodes:[...M.nodes,...S],edges:[...M.edges,...N]}),"node.duplicate",{source:s,count:S.length,edgeCount:N.length,sourceIds:i,duplicateIds:S.map(M=>M.id),skippedRemoteMonitorCount:C.length});const R=S.map(M=>M.id);b(R),z(R[0]??null),window.setTimeout(()=>z(M=>M===R[0]?null:M),1e3),T(C.length>0?`Duplicated ${S.length} node${S.length===1?"":"s"}; remote monitor stays single-instance.`:`Duplicated ${S.length} node${S.length===1?"":"s"}.`)},[O,T]),rr=g.useCallback(a=>{Xo(K.current,a)},[Xo]),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 C=u.filter(S=>!l.has(S.id)),k=a==="front"?[...C,...h]:[...h,...C];if(!k.some((S,N)=>{var R;return S.id!==((R=u[N])==null?void 0:R.id)})){T(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:k}),"node.layerOrder",{direction:a,source:s,count:h.length,ids:i}),T(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,T]),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=Pb(s,i);yt.current=l;try{const u=await Co(JSON.stringify(l));lt.current=0,f.emit("multiSelection.copy",{count:s.length,edgeCount:i.length,ok:!0,method:u}),T(`Copied ${s.length} selected node${s.length===1?"":"s"} for canvas paste.`)}catch(u){lt.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)}),T(`Copied ${s.length} selected node${s.length===1?"":"s"} inside this canvas.`)}},[T]),Da=g.useCallback((a,s,i)=>{const l=v.current.nodes.find(Va),u=[],h=[];let C=!!l;for(const L of a.nodes){if(Va(L)){if(C){u.push(L);continue}C=!0}h.push(L)}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(L=>L===l.id?null:L),1e3)),T("Remote monitor is single-instance per board. Focused existing monitor.");return}const k=As(h);if(!k)return;const j=new Map(h.map(L=>[L.id,X("node")])),S=s.x-k.minX,N=s.y-k.minY,R=h.map(L=>({...L,id:j.get(L.id),x:L.x+S,y:L.y+N,status:L.status==="running"?"idle":L.status,tags:L.tags?[...L.tags]:void 0,metadata:L.metadata?{...L.metadata}:void 0,imageStack:di(L.imageStack,L.id,j.get(L.id))})),E=a.edges.filter(L=>j.has(L.from)&&j.has(L.to)).map(L=>({...L,id:X("edge"),from:j.get(L.from),to:j.get(L.to)})),M=R.map(L=>L.id);O(L=>({...L,nodes:[...L.nodes,...R],edges:[...L.edges,...E]}),"clipboard.nodes.paste",{source:i,count:R.length,edgeCount:E.length,originX:Math.round(s.x),originY:Math.round(s.y),skippedRemoteMonitorCount:u.length}),b(M),ae(null),z(M[0]??null);const A=R[R.length-1];A&&ye(A,`clipboard.nodes.${i}`),window.setTimeout(()=>z(L=>L===M[0]?null:L),1200),T(u.length>0?`Pasted ${R.length} canvas node${R.length===1?"":"s"}; remote monitor stays single-instance.`:`Pasted ${R.length} canvas node${R.length===1?"":"s"}.`)},[O,ye,T]),ao=g.useCallback((a,s,i)=>{const l=a.trim();if(!l)return;const u=Od(l,s,`${i}-url`),h=u??Fd(l,s,i);O(C=>({...C,nodes:[...C.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),ye(h,`clipboard.${i}.${h.kind}`),window.setTimeout(()=>z(C=>C===h.id?null:C),1200),T(`${i==="drop"?"Dropped":"Pasted"} ${h.kind==="file"?"URL reference":h.kind} node.`)},[O,ye,T]),qo=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 C=s.x;for(const S of l){const N=await Zb(S,{x:C,y:s.y},i);h.push(N),C+=N.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 k=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(k),ae(null),z(k[0]??null);const j=h[h.length-1];j&&ye(j,`canvas.files.${i}`),window.setTimeout(()=>z(S=>S===k[0]?null:S),1200),T(`${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)}),T("File ingest failed in this browser context.")}},[O,ye,T]);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(),qo(u,l,"paste");return}const h=lt.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 C=xt.current>Date.now()?ma.current:null;if(C){s.preventDefault(),ao(C,l,"paste"),f.emit("clipboard.text.pasteLocalFallback",{chars:C.length}),xt.current=0;return}const k=i.getData("text/plain"),j=Dd(k);if(j){s.preventDefault(),Da(j,l,"paste");return}const S=k.trim()?k:$d(i.getData("text/html"));S.trim()&&(s.preventDefault(),ao(S,l,"paste"))};return document.addEventListener("paste",a),()=>document.removeEventListener("paste",a)},[Se,qo,ao,Da]);const vm=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")},[]),jm=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=$d(a.dataTransfer.getData("text/html")),h=Se(a.clientX,a.clientY);if(s.length>0){a.preventDefault(),qo(s,h,"drop");return}const C=(i||l||u).trim(),k=Dd(l);if(k){a.preventDefault(),Da(k,h,"drop");return}C&&(a.preventDefault(),ao(C,h,"drop"))},[Se,qo,ao,Da]),Im=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){T("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}),T(`Fitted ${s.size} text node${s.size===1?"":"s"}.`)},[O,T]),lr=g.useCallback(a=>{const s=new Set(K.current),i=v.current.nodes.filter(E=>s.has(E.id)).sort((E,M)=>K.current.indexOf(E.id)-K.current.indexOf(M.id));if(i.length<2)return;const l=As(i);if(!l)return;const u=a==="tidy"?ay(i):i,h=28,C=Math.max(...u.map(E=>E.width)),k=Math.max(...u.map(E=>E.height)),j=u.map((E,M)=>({id:E.id,x:E.x,y:E.y,width:E.width,height:E.height,selectionIndex:M})),S=v.current.settings.gridSnap??!0;let N;a==="grid"?N={mode:"grid",order:"selectionOrder",columns:Math.max(2,Math.ceil(Math.sqrt(u.length))),cellWidth:C,cellHeight:k,gapX:h,gapY:h,sizeMode:"preserve",snapToGrid:S,gridSize:Zt}:a==="strip"?N={mode:"stripHorizontal",order:"selectionOrder",targetHeight:k,gapX:h,sizeMode:"preserve",snapToGrid:S,gridSize:Zt}:N={mode:"masonry",order:"spatialReading",anchor:"selectionBoundsTopLeft",maxColumns:12,gapX:24,gapY:24,quantile:.75,sizeMode:"preserve",snapToGrid:S,gridSize:Zt};const R=rh(j,N,l);O(E=>({...E,nodes:E.nodes.map(M=>{const A=R.after.get(M.id);return A?{...M,x:A.x,y:A.y,width:A.width,height:A.height}:M})}),"multiSelection.arrange",{mode:a,count:i.length,layoutMode:N.mode,snapToGrid:S}),f.emit("multiSelection.arrange",{mode:a,count:i.length,layoutMode:N.mode,snapToGrid:S,boundsAfter:R.boundsAfter}),T(a==="tidy"?`Tidied ${i.length} selected nodes.`:`Arranged ${i.length} selected nodes as ${a}.`)},[O,T]),Nm=g.useCallback(()=>{const a=Array.from(new Set(K.current)),s=v.current,i=new Map(s.nodes.map(A=>[A.id,A])),l=a.map(A=>i.get(A)).filter(A=>!!(A&&A.kind==="image"&&So(A).length>0));if(l.length<2){T("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),C=new Date().toISOString(),k=new Set,j=So(u),S=[];for(const A of j)S.push(Ed(A,u,k,C));for(const A of h)for(const L of So(A))S.push(Ed(L,A,k,C));if(S.length<2){T("No stackable image variants found."),f.emit("multiSelection.mergeImageStacks.skipped",{reason:"not-enough-variants",selectedCount:a.length});return}const N=S.some(A=>{var L;return A.variantId===((L=u.imageStack)==null?void 0:L.activeVariantId)})?u.imageStack.activeVariantId:S[0].variantId,R=S.find(A=>A.variantId===N)??S[0],E=h.map(A=>A.id),M=new Set(E);O(A=>({...A,nodes:A.nodes.filter(L=>!M.has(L.id)).map(L=>{var J;return L.id===u.id?{...L,kind:"image",imageUrl:R.imageUrl,imageStack:{activeVariantId:N,variants:S,kind:"pile",title:((J=L.imageStack)==null?void 0:J.title)||L.title,updatedAtUtc:C},metadata:{...L.metadata??{},ImageStackKind:"pile",ImageStackPrimaryNodeId:u.id,ImageStackVariantCount:String(S.length),ImageStackMergedAtUtc:C,ImageStackRemovedNodeIds:E.join(","),ImageStackActiveVariantId:N},tags:Array.from(new Set([...L.tags??["image"],"Stack"])).slice(0,4)}:L}),edges:A.edges.filter(L=>!M.has(L.from)&&!M.has(L.to))}),"multiSelection.mergeImageStacks",{primaryNodeId:u.id,removedNodeIds:E,addedVariants:S.length-j.length,variantCount:S.length}),b([u.id]),ae(A=>A&&M.has(A)?null:A),Ot(A=>A&&M.has(A)?null:A),ia(A=>A&&M.has(A)?null:A),z(u.id),window.setTimeout(()=>z(A=>A===u.id?null:A),1200),T(`Stacked ${l.length} image nodes into ${S.length} variants.`)},[O,T]),Am=g.useCallback(a=>{const s=K.current.includes(a)?K.current:[a];Xo(s,"node-action")},[Xo]),ha=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 N,R,E;const l=v.current.nodes.find(M=>M.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,C=(s==null?void 0:s.trim())||l.body,k=Ri(Ti(l));ee(a,{status:"running",body:C,...wn(l)?{metadata:yo(l,{instruction:C,runState:"running",status:"running",statusLabel:"Running",sourceMode:k?"media-prompt-only":"ai-task"})}:{}}),f.emit("automation.run",{id:a,mode:"single",seq:u,automationKind:k==null?void 0:k.kind});const j=()=>mn.current.get(a)===u&&La.current===h,S=M=>{if(!j()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}f.emit("localBridge.codex.fallback",{id:a,reason:M});const A=my(C,l);ee(a,{status:"done",result:A,...wn(l)?{metadata:yo(l,{instruction:C,output:A,runState:"completed",status:k?"prepared":"done",statusLabel:k?"Spec only":"Done",sourceMode:k?"media-prompt-only":"local-draft",error:k?`External ${k.mode.toLowerCase()} generation was not executed.`:"",fallback:!0,partial:!!k,toolsUsed:k?`${k.toolHint}, Deterministic.Fallback, HumanReview.Gate`:"Deterministic.Fallback",toolWarnings:k?`External ${k.mode.toLowerCase()} generator was not invoked; this run prepared a spec only.`:""})}:{}}),ae(a)};if(!tt()){S("hosted-access-gated");return}try{const M=await Xt();if(!j()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}if(pe(M.state),He(M.status??null),M.state!=="connected"){de(M.message||"LocalBridge is unavailable."),S(M.message||"LocalBridge unavailable");return}const A=Ua(M.status);if(!A){S("LocalBridge token unavailable");return}const L=Zd(v.current,l,C);f.emit("localBridge.codex.run",{id:a,boardId:v.current.id});const J=await Ul({instruction:L,workingDirectory:((R=(N=M.status)==null?void 0:N.project)==null?void 0:R.rootPath)||((E=M.status)==null?void 0:E.workspace)||void 0,sandbox:"read_only",model:Jt(v.current.settings.model),reasoningEffort:qd(v.current.settings.effort),approvalPolicy:"on-request",intent:"mindcanvas-ai-task",nodeKind:l.kind,webSearchMode:"disabled",networkAccessEnabled:!1},A,M.baseUrl);if(!j()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}if(!J.success||!J.finalResponse){const Ce=J.error||"LocalBridge Codex returned no response.";f.emit("localBridge.codex.failed",{id:a,message:Ce,status:J.status}),ee(a,{status:"blocked",result:Ce,...wn(l)?{metadata:yo(l,{instruction:C,output:Ce,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:k?"media-prompt-only":"ai-task",error:Ce,fallback:!1,partial:!0})}:{}}),ae(a);return}ee(a,{status:"done",result:J.finalResponse,...wn(l)?{metadata:yo(l,{instruction:C,output:J.finalResponse,runState:"completed",status:k?"prepared":"done",statusLabel:k?"Spec only":"Done",sourceMode:k?"media-prompt-only":"ai-generated",error:k?`External ${k.mode.toLowerCase()} generation was not executed.`:"",fallback:!1,partial:!!k,toolsUsed:k?`AI.LLM, ${k.toolHint}, HumanReview.Gate`:"AI.LLM",toolWarnings:k?`External ${k.mode.toLowerCase()} generator was not invoked; this run prepared a spec only.`:""})}:{}}),f.emit("localBridge.codex.completed",{id:a,providerKind:J.providerKind,threadId:J.threadId,turnId:J.turnId}),ae(a)}catch(M){if(!j()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}const A=M instanceof Error?M.message:String(M);f.emit("localBridge.codex.failed",{id:a,message:A}),ee(a,{status:"blocked",result:A,...wn(l)?{metadata:yo(l,{instruction:C,output:A,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:k?"media-prompt-only":"ai-task",error:A,fallback:!1,partial:!0})}:{}}),ae(a)}})},[ee]),Xi=g.useCallback(async()=>{const a=K.current[0];if(!a){T("Select an AI Task to run its graph.");return}const s=ui(v.current,a);if(s.length===0){T("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){T("The selected AI Task graph is already running.");return}T(`Running selected graph: ${i.length} AI task${i.length===1?"":"s"}.`);for(const l of i)await ha(l.id)},[ha,T]),Mm=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}),T("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)}),T("AI result copy unavailable in this browser context.")}},[T]),Tm=g.useCallback(a=>{if(!a.result)return;const s=py(a,{x:a.x+a.width+78,y:a.y}),i={id:X("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),T("AI result archived as a Markdown node.")},[O,T]),Rm=g.useCallback(a=>{if(!a.result)return;const s=gy(a,{x:a.x+a.width+78,y:a.y+Math.min(a.height+44,360)}),i={id:X("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),T("Follow-up AI Task staged from the result.")},[O,T]),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(),C=window.location.pathname||"/mindcanvas",k=`${C}|${s}|${h}`,j=Date.now(),S=qn.current;if((S==null?void 0:S.signature)===k&&j-S.at<=Sd){f.emit("globalInput.duplicateIgnored",{routePath:C,inputMode:s,chars:u.length,windowMs:Sd});return}qn.current={signature:k,at:j};const N={routePath:C,inputMode:s,selectedNodeIds:i,chars:u.length};f.emit("globalInput.submit.snapshot",{...N,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(""),$(ue=>ue+1),f.emit("globalInput.submit.started",N);const R=ue=>{$(Lt=>Math.max(0,Lt-1)),f.emit("globalInput.submit.completed",{...N,status:ue})};if((l==null?void 0:l.kind)==="ai-task"){ha(l.id,a).then(()=>R("ai-task")).catch(ue=>{f.emit("globalInput.submit.completed",{...N,status:"ai-task-error",message:ue instanceof Error?ue.message:String(ue)}),$(Lt=>Math.max(0,Lt-1))});return}const E=Se(void 0,void 0,{width:360,height:196}),M=Od(u,E,"global-input-url"),A=M?null:Mi(u),L=!!(A&&/^https?:\/\//i.test(A)&&!Pn(A)),J=!M&&!L&&(s==="Image"||s==="Video")?s:null,Ce=M??(L?Fd(u,E,"global-input-rejected-url"):null)??(J?Gb(u,E,v.current.settings,J,"global-input-media",x.current):Yb(u,E,v.current.settings)),ut=Se(void 0,void 0,{width:Ce.width,height:Ce.height}),te={...Ce,x:ut.x,y:ut.y},yn=te.kind==="ai-task",$a=M?"globalInput.url.add":L?"globalInput.rejectedUrl.add":J?"globalInput.media.add":"globalInput.aiTask.add",ns={id:te.id,kind:te.kind,chars:u.length,inputMode:s,...yn?{model:(os=te.metadata)==null?void 0:os.TextModel,provider:(ro=te.metadata)==null?void 0:ro.AiProvider,effort:(ba=te.metadata)==null?void 0:ba.Effort}:{},...J?{mediaMode:J,mediaModel:(Ml=te.metadata)==null?void 0:Ml.MediaModel,aspectPresetId:(Tl=te.metadata)==null?void 0:Tl.AspectPresetId,requestedSize:(Rl=te.metadata)==null?void 0:Rl.RequestedSize}:{}};if(yn){const ue=v.current,Lt={...ue,nodes:ue.nodes.some(gr=>gr.id===te.id)?ue.nodes:[...ue.nodes,te],updatedAt:new Date().toISOString()};c(gr=>za(gr,ue,{description:$a,mergeKey:null})),y([]),v.current=Lt,f.emit($a,ns),r(Lt)}else O(ue=>({...ue,nodes:ue.nodes.some(Lt=>Lt.id===te.id)?ue.nodes:[...ue.nodes,te]}),$a,ns);if(P(""),b([te.id]),ae(null),z(te.id),ye(te,$a),window.setTimeout(()=>z(ue=>ue===te.id?null:ue),1200),yn){f.emit("globalInput.aiTask.runRequested",{id:te.id,chars:u.length,model:(Ll=te.metadata)==null?void 0:Ll.TextModel}),T("AI task created from input and running."),ha(te.id,u).then(()=>R("ai-task-created")).catch(ue=>{f.emit("globalInput.submit.completed",{...N,status:"ai-task-created-error",message:ue instanceof Error?ue.message:String(ue)}),$(Lt=>Math.max(0,Lt-1))});return}T(`Added ${te.kind==="file"?"URL reference":te.kind} node from input.`),R(M?"url-node":L?"rejected-url-node":J?"media-node":"text-node")},[O,Se,w,ye,ha,T]),Ji=g.useCallback(async()=>{const a=fy(v.current),s=a.flat(),i=a.map(u=>u.filter(h=>h.status!=="running")).filter(u=>u.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(u=>u.id)}),l.length===0){T(s.length>0?"All AI task graphs are already running.":"No AI tasks on this board.");return}T(`Running ${i.length} graph${i.length===1?"":"s"} / ${l.length} AI task${l.length===1?"":"s"}.`);for(const u of i)for(const h of u)await ha(h.id)},[ha,T]),Zi=g.useCallback(()=>{const a=v.current.nodes.filter(s=>s.kind==="ai-task"&&s.status==="running");if(a.length===0){T("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}),T(`Paused ${a.length} running task${a.length===1?"":"s"}.`)},[O,T]),Qi=g.useCallback(()=>{const a=v.current.nodes.filter(s=>s.kind==="ai-task"&&(s.status==="running"||s.status==="paused"));if(a.length===0){T("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),T(`Stopped ${a.length} active task${a.length===1?"":"s"}.`)},[O,T]),el=g.useCallback(async()=>{var k,j,S;if(gn.current)return;const a=v.current.nodes.find(N=>N.id===K.current[0]);if(!a)return;gn.current=!0;const s=++_a.current;Dn(!0),T("Generating flow with AI planner...");const i=au(a),l=xi(v.current.settings.appLanguage,i);let u="language-fallback",h=null,C="";try{if(!tt())C="hosted-access-gated";else{const R=await Xt();if(s!==_a.current){f.emit("async.staleIgnored",{path:"automation.generateFlow",seq:s});return}if(pe(R.state),He(R.status??null),R.state!=="connected")C=R.message||"LocalBridge unavailable",de(C);else{const E=Ua(R.status);if(!E)C="LocalBridge token unavailable";else{const M=Yg(i,v.current.settings.appLanguage);f.emit("localBridge.codex.run",{id:a.id,boardId:v.current.id,intent:"mindcanvas-generate-flow",appLanguage:l});const A=await Ul({instruction:M,workingDirectory:((j=(k=R.status)==null?void 0:k.project)==null?void 0:j.rootPath)||((S=R.status)==null?void 0:S.workspace)||void 0,sandbox:"read_only",model:Jt(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,R.baseUrl);if(s!==_a.current){f.emit("async.staleIgnored",{path:"automation.generateFlow",seq:s});return}const L=A.success?Gg(A.finalResponse):null;L&&Kg(L,l)?(h=L,u="ai-generated",f.emit("automation.generateFlow.ai.completed",{id:a.id,count:L.nodes.length,appLanguage:l,providerKind:A.providerKind,threadId:A.threadId,turnId:A.turnId})):(C=A.success?"AI planner returned invalid or wrong-language JSON.":A.error||"LocalBridge Codex returned no flow response.",f.emit("automation.generateFlow.ai.failed",{id:a.id,appLanguage:l,reason:C,success:A.success,status:A.status}))}}}h||(h=ld(i,l),u="language-fallback",f.emit("automation.generateFlow.fallback",{id:a.id,count:h.nodes.length,appLanguage:l,reason:C||"planner-unavailable"}));const N=Jd(a,h,v.current.settings,u);O(R=>({...R,nodes:[...R.nodes,...N.nodes],edges:[...R.edges,...N.edges]}),"node.add",{reason:"generate-flow",count:N.nodes.length,sourceMode:u,appLanguage:N.language}),b(N.nodes.map(R=>R.id)),T(u==="ai-generated"?`Generated ${N.nodes.length} AI-planned flow nodes.`:`Generated ${N.nodes.length} local fallback flow nodes.`)}catch(N){const R=N instanceof Error?N.message:String(N),E=ld(i,l),M=Jd(a,E,v.current.settings,"language-fallback");f.emit("automation.generateFlow.failed",{id:a.id,appLanguage:l,message:R,fallbackCount:M.nodes.length}),O(A=>({...A,nodes:[...A.nodes,...M.nodes],edges:[...A.edges,...M.edges]}),"node.add",{reason:"generate-flow",count:M.nodes.length,sourceMode:"language-fallback",appLanguage:M.language,error:R}),b(M.nodes.map(A=>A.id)),T(`Generated ${M.nodes.length} fallback flow nodes.`)}finally{s===_a.current&&(gn.current=!1,Dn(!1))}},[O,T]),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)??"",C=u==null?void 0:u.dataset.connectorSide;if(h&&h!==i&&ri(C)&&v.current.nodes.some(S=>S.id===h))return{id:h,side:C};const k=Ct(a,s),j=[...v.current.nodes].reverse().find(S=>S.id!==i&&gb(k,S));return j?{id:j.id,side:pb(j,k)}:null},[Ct]),Lm=g.useCallback((a,s,i,l)=>{if(l.button!==0)return;l.preventDefault(),l.stopPropagation();const u=v.current.nodes.find(M=>M.id===a);if(!u)return;const h=Et(u,s);let C=h,k=null;const j=(M,A)=>{C=Ct(M,A),k=tl(M,A,a),G(L=>!L||L.from!==a?L:{...L,pointer:C,target:k,dragging:!0})},S=()=>{document.body.classList.remove("is-connecting-node"),window.removeEventListener("pointermove",N),window.removeEventListener("pointerup",R),window.removeEventListener("pointercancel",E)},N=M=>{j(M.clientX,M.clientY)},R=M=>{if(j(M.clientX,M.clientY),S(),!k||k.id===a){G(null),f.emit("edge.drag.cancelled",{from:a,fromSide:s,kind:i});return}const A={id:X("edge"),from:a,to:k.id,kind:i,fromSide:s,toSide:k.side};O(L=>({...L,edges:[...L.edges,A]}),"edge.add",{...A,source:"connector-drag"}),G(null),b([a,k.id]),ae(null),f.emit("edge.drag.completed",{...A})},E=()=>{S(),G(null),f.emit("edge.drag.cancelled",{from:a,fromSide:s,kind:i,reason:"pointer-cancelled"})};b(M=>M.includes(a)?M:[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",N),window.addEventListener("pointerup",R,{once:!0}),window.addEventListener("pointercancel",E,{once:!0})},[O,tl,Ct]),Pm=g.useCallback((a,s,i="right")=>{if(V&&V.from!==a){const u={id:X("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?Et(l,i):Ue.current,target:null,dragging:!1})},[O,V]),Jo=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=>Th(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,C)=>h!==l[C])}),f.emit("selection.repaired",{reason:"undo",beforeCount:l.length,afterCount:u.length}),a.slice(0,-1)})},[]),Zo=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,C)=>h!==l[C])}),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=Py(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 C=s.key==="ArrowUp"?"up":s.key==="ArrowDown"?"down":s.key==="ArrowLeft"?"left":s.key==="ArrowRight"?"right":null;if(C&&u){s.preventDefault(),Wi(C),f.emit("keyboard.shortcut",{action:"camera-pan",direction:C});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(),Jo(),f.emit("keyboard.shortcut",{action:"undo"});return}if(l&&i==="y"||l&&s.shiftKey&&i==="z"){s.preventDefault(),Zo(),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&&lt.current>Date.now()){const N=yt.current;s.preventDefault(),Da(N,Se(),"paste"),f.emit("keyboard.shortcut",{action:"paste-local",count:N.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 k=!1;ht&&(ra(!1),k=!0),Ia&&(ce(!1),k=!0),Ma&&($t(!1),k=!0),ea&&(Tt("keyboard"),k=!0),It&&(Je(null),k=!0),Dt&&(Ot(null),k=!0),Ft&&(ia(null),k=!0),V&&(G(null),k=!0),ie&&(ae(null),k=!0),I.trim()&&(_(""),H([]),re(0),k=!0),K.current.length>0&&(b([]),k=!0),k&&(s.preventDefault(),f.emit("keyboard.shortcut",{action:"escape"}))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[Dt,Tt,V,ir,sr,Ft,rr,Vi,Se,Qn,er,ea,Wi,Da,It,ht,I,Zo,to,ie,Ba,Ia,Ma,ar,Pi,eo,tr,Jo]);const Em=g.useCallback(()=>{ap(),O(()=>({...El,updatedAt:new Date().toISOString()}),"board.restore",{source:"fixture-reset"}),b(["node-agent-command"]),Ye([]),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};Z(u),b([a.id]),z(a.id),f.emit("search.focused",{query:I.trim(),nodeId:a.id,source:s}),window.setTimeout(()=>z(null),900)},[Z,I,Mt]);g.useEffect(()=>{const a=++pn.current,s=Ry(oe.current,U);f.emit("search.started",{query:I,engine:ua.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(!I.trim()){H([]),re(0),je("none"),f.emit("search.completed",{query:I,count:0,engine:"none"});return}const u=Pa.current;if(u&&ua.current){u.postMessage({type:"SEARCH_QUERY",boardId:v.current.id,seq:a,query:I,limit:8,viewport:s});return}const h=performance.now(),C=Ly(v.current.nodes,I,s,8);H(C),re(0),je("local"),f.emit("search.completed",{query:I,count:C.length,engine:"local",durationMs:Number((performance.now()-h).toFixed(2)),viewportBoosted:!0})},120);return()=>window.clearTimeout(i)},[I,U,he]);const no=g.useCallback(a=>{re(s=>{const i=F.length;if(i===0)return 0;const l=(s+a+i)%i;return f.emit("search.activeChanged",{query:I.trim(),index:l,count:i}),l})},[I,F.length]),cr=g.useCallback(a=>{const s=F[W];s&&dr(s,a)},[dr,W,F]),_m=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]),Bm=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(N=>N.id===a);if(!l)return;c(N=>za(N,v.current,{description:"Move nodes",mergeKey:null})),y([]);const u=K.current.includes(a)?K.current:[a],h=new Map(v.current.nodes.filter(N=>u.includes(N.id)).map(N=>[N.id,{x:N.x,y:N.y}])),C=h.get(a)??{x:l.x,y:l.y},k=v.current.settings.gridSnap??!0,j=N=>{const R=(N.clientX-i.x)/oe.current.scale,E=(N.clientY-i.y)/oe.current.scale,M=k?Bd(C.x+R)-C.x:R,A=k?Bd(C.y+E)-C.y:E;r(L=>({...L,nodes:L.nodes.map(J=>{const Ce=h.get(J.id);return Ce?{...J,x:Ce.x+M,y:Ce.y+A}:J}),updatedAt:new Date().toISOString()}))},S=()=>{window.removeEventListener("pointermove",j),window.removeEventListener("pointerup",S),f.emit("node.patch",{id:a,reason:"drag",gridSnap:k})};window.addEventListener("pointermove",j),window.addEventListener("pointerup",S,{once:!0})},[]),Dm=g.useCallback((a,s)=>{if(s.button!==0)return;s.preventDefault(),s.stopPropagation();const i=v.current.nodes.find(R=>R.id===a);if(!i)return;const l={x:s.clientX,y:s.clientY},u=jb(i);let h={width:i.width,height:i.height};c(R=>za(R,v.current,{description:"Resize node",mergeKey:null})),y([]),b(R=>R.includes(a)?R:[a]),ae(null),f.emit("node.resize.started",{id:a,width:Math.round(i.width),height:Math.round(i.height)});const C=()=>{document.body.classList.remove("is-resizing-node"),window.removeEventListener("pointermove",j),window.removeEventListener("pointerup",S),window.removeEventListener("pointercancel",N)},k=R=>{const E=(R.clientX-l.x)/oe.current.scale,M=(R.clientY-l.y)/oe.current.scale;let A=i.width+E,L=i.height+M;if(R.shiftKey&&i.width>0&&i.height>0){const J=Math.max(A/i.width,L/i.height);A=i.width*J,L=i.height*J}h={width:Math.round(me(A,u.minWidth,u.maxWidth)),height:Math.round(me(L,u.minHeight,u.maxHeight))},r(J=>({...J,nodes:J.nodes.map(Ce=>Ce.id===a?{...Ce,...h}:Ce),updatedAt:new Date().toISOString()}))},j=R=>{k(R)},S=R=>{k(R),C(),f.emit("node.resize.completed",{id:a,width:h.width,height:h.height})},N=()=>{C(),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",N,{once:!0})},[]),Om=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(),Ho(a.clientX,a.clientY,"ctrl-grid-click");return}a.preventDefault();const s={x:a.clientX,y:a.clientY},i=pa(a.clientX,a.clientY),l=a.shiftKey;if(a.button===0){const k=new Set(K.current);ae(null),nt({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",N),window.removeEventListener("pointercancel",R)},S=E=>{const M=pa(E.clientX,E.clientY);nt({startX:i.x,startY:i.y,currentX:M.x,currentY:M.y})},N=E=>{const M=pa(E.clientX,E.clientY),A=Kd({startX:i.x,startY:i.y,currentX:M.x,currentY:M.y});if(j(),nt(null),A.width<kd&&A.height<kd){const ut=K.current.length;!l&&ut>0&&(b([]),ae(null),f.emit("selection.cleared",{source:"canvas-background-click",beforeCount:ut})),f.emit("selection.box.cancelled",{reason:"too-small",width:Math.round(A.width),height:Math.round(A.height)});return}const L=sy(A,oe.current),J=v.current.nodes.filter(ut=>Gd(ut,L)).map(ut=>ut.id),Ce=l?Array.from(new Set([...k,...J])):J;b(Ce),f.emit("selection.box.completed",{count:Ce.length,additive:l,width:Math.round(A.width),height:Math.round(A.height)})},R=()=>{j(),nt(null),f.emit("selection.box.cancelled",{reason:"pointer-cancelled"})};document.body.classList.add("is-selecting"),window.addEventListener("pointermove",S),window.addEventListener("pointerup",N,{once:!0}),window.addEventListener("pointercancel",R,{once:!0});return}const u={...oe.current},h=k=>{Z({...u,x:u.x+k.clientX-s.x,y:u.y+k.clientY-s.y})},C=()=>{document.body.classList.remove("is-panning"),window.removeEventListener("pointermove",h),window.removeEventListener("pointerup",C)};document.body.classList.add("is-panning"),window.addEventListener("pointermove",h),window.addEventListener("pointerup",C,{once:!0})},[Z,pa,Ho]),Fm=g.useCallback(a=>{a.button===0&&(Yd(a.target)||(a.preventDefault(),a.stopPropagation(),Ho(a.clientX,a.clientY,"double-click")))},[Ho]),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 C=Math.exp(-a.deltaY*.0012),k=me(h.scale*C,Ss,ws),j=Ct(a.clientX,a.clientY),S=pa(a.clientX,a.clientY);Z({x:S.x-j.x*k,y:S.y-j.y*k,scale:k});return}Z({...h,x:h.x-a.deltaX,y:h.y-a.deltaY})},[Z,pa,Ct]);g.useEffect(()=>{const a=Ht.current;if(a)return a.addEventListener("wheel",ur,{passive:!1}),()=>a.removeEventListener("wheel",ur)},[ur]);const Q=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=Q==null?void 0:Q.metadata)==null?void 0:gl[Y.studioNodeType])??"",$m=oo?br(oo):"Unassigned",Um=oo==="template.input",al=g.useMemo(()=>Ad(we),[we]),Qo=ge&&ge.issues.length===0?ge.template:null,nl=g.useMemo(()=>rs(Qo,zt),[zt,Qo]),zm=g.useMemo(()=>bn.filter(a=>a.kind==="image"&&So(a).length>0).length,[bn]),dt=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]),es=g.useMemo(()=>{if(!Q||Q.kind!=="ai-task")return{size:0,runnable:0};const a=ui(n,Q.id);return{size:a.length,runnable:a.filter(s=>s.status!=="running").length}},[n,Q]),Oa=g.useMemo(()=>{if(bn.length<2)return null;const a=As(bn);if(!a)return null;const s=Math.max(.01,Ee.scale),i=a.minX*s+Ee.x-10,l=a.minY*s+Ee.y-10,u=a.maxX*s+Ee.x+10,h=a.maxY*s+Ee.y+10,C=(i+u)/2,k=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(C,168,Math.max(168,U.width-168)),toolbarTop:me(k,42,Math.max(42,U.height-58))}},[bn,U.height,U.width,Ee]),fa=ie?n.nodes.find(a=>a.id===ie):null,ol=Dt?n.nodes.find(a=>a.id===Dt&&!!a.companyMode):null,sl=Ft?n.nodes.find(a=>a.id===Ft&&a.kind==="directory"):null,rl=g.useMemo(()=>new Set([...p,...F.map(a=>a.id),mt,ie,Dt,Ft,V==null?void 0:V.from].filter(a=>!!a)),[Dt,V==null?void 0:V.from,Ft,mt,ie,F,p]),Fa=g.useMemo(()=>{const a=oy(Ae,U);return n.nodes.filter(s=>rl.has(s.id)||Gd(s,a))},[rl,n.nodes,U,Ae]),mr=g.useMemo(()=>new Set(Fa.map(a=>a.id)),[Fa]);g.useEffect(()=>{f.emit("visibility.culled",{visible:Fa.length,total:n.nodes.length,scale:Number(Ae.scale.toFixed(3))})},[n.nodes.length,Ae.scale,Fa.length]);const Hm=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:",jo(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",C=Et(i,u),k=Et(l,h);return{...s,path:Ld(C,u,k,h)}}).filter(Boolean)},[n.edges,n.nodes]),ts=g.useMemo(()=>{var C,k;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=Et(s,V.fromSide),l=V.target?a.get(V.target.id):null,u=((C=V.target)==null?void 0:C.side)??mb(V.fromSide),h=l?Et(l,u):V.pointer;return{kind:V.kind,targetId:((k=V.target)==null?void 0:k.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]),ct=g.useMemo(()=>ny(n.nodes,Ee,U),[n.nodes,Ee,U]),Wm=g.useCallback(a=>{if(!ct)return;const s=a.currentTarget.getBoundingClientRect(),i=me(a.clientX-s.left,0,vs),l=me(a.clientY-s.top,0,js),u=ct.bounds.minX+(i-vn)/ct.scale,h=ct.bounds.minY+(l-vn)/ct.scale;Z({...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)})},[Z,ct,U.height,U.width]),kt=n.settings.inputMode==="Image"?"Image":n.settings.inputMode==="Video"?"Video":null,pr=kt==="Image"?Js:kt==="Video"?Zs:null,Vm=w.trim().length>0||(Q==null?void 0:Q.kind)==="ai-task",dl=I.trim().length>0,cl=F[W]??null,Ym=dl?`${F.length} result${F.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=ea,Gm=Na==="full";return o.jsxs("div",{ref:Ht,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:Cu,onDragOver:vm,onDrop:jm,children:[o.jsx("div",{ref:Wt,className:`canvas-plane canvas-plane--grid-${as}`,"data-grid-type":as,"data-grid-snap":n.settings.gridSnap??!0?"on":"off",onPointerDown:Om,onDoubleClick:Fm,onContextMenu:a=>a.preventDefault(),children:o.jsxs("div",{ref:cn,className:"canvas-world","data-visible-nodes":Fa.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:`${Qt.x}px`,top:`${Qt.y}px`},"aria-hidden":"true"}),Fa.map(a=>o.jsx(Sf,{node:a,selected:p.includes(a.id),selectionCount:p.length,pulsing:mt===a.id,connectionDraft:V,onSelect:Xu,onDragStart:Bm,onResizeStart:Dm,onPatch:ee,onDelete:wm,onDuplicate:Am,onRun:ha,onPin:Pm,onConnectorDragStart:Lm,onOpenResult:ae,onToggleAiReference:lm,onCopyNode:dm,onCopyEmbedReference:cm,onFitNodeHeight:um,onToggleNodeExpanded:mm,onToggleWordWrap:pm,onStageCompany:gm,onOpenCompanyGraph:hm,onSyncCompanyGoal:fm,onRefreshCompany:bm,onSetCompanyStatus:Gi,onRemoveCompany:Ki,onOpenAsset:Sm,onOpenDirectorySettings:nm,onScanDirectory:rm,onCreateRemoteControl:Qu,onGenerateTemplateCard:Zu},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(Qp,{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(eg,{size:15})}),o.jsx("button",{type:"button",title:"Fit selected text heights",onClick:Im,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})}),zm>=2&&o.jsx("button",{type:"button",title:"Stack selected image nodes","data-testid":"multi-selection-merge-images",onClick:Nm,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(Pt,{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=at(a.name),l=Ib(a,n,s);return o.jsxs("div",{className:`tab-shell ${s?"is-active":""} ${sa===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":sa===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=>{!sa||sa===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=sa||u.dataTransfer.getData("text/plain");fu(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?ru():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(Pt,{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})})]}),ea&&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":Ge.currentMode,"data-project-storage-selected-tab":Me,"data-project-storage-local-provider":Ge.localProviderKind,"data-project-storage-cloud-available":Ge.isCloudAvailable?"true":"false","data-project-storage-can-sync-cloud":Ge.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(Pt,{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":Ge.showLocalTab?"true":"false","data-project-storage-show-cloud":Ge.showCloudTab?"true":"false",children:[o.jsxs("button",{type:"button",role:"tab","aria-selected":Me==="local",className:Me==="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":Me==="cloud",className:Me==="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:Me==="local"?`${st.length} local boards`:"Cloud gated"}),o.jsx("small",{children:Me==="local"?`${Ge.localProviderKind} provider / browser catalog and LocalBridge boards`:Ge.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:Re||void 0,children:Me==="local"?Re?ys(Re):rc(Te):"Cloud gated"}),o.jsx("small",{children:Me==="local"?Re||Mo||"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=>iu(a.target.checked)}),o.jsx("span",{children:"Show at startup"})]})]}),o.jsx("section",{className:"project-gallery-board-area",children:Me==="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:[st.length," saved"]})]}),o.jsxs("div",{className:"local-board-list local-board-list--stored project-gallery-board-grid","data-project-gallery-board-grid":"true",children:[st.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=>im(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(Pt,{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:at(a.name)}),o.jsx("small",{children:ly(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)}),st.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:Yt,disabled:Te==="checking",children:Te==="checking"?o.jsx(qt,{size:15,className:"spin-icon"}):o.jsx(vo,{size:15})})]}),o.jsxs("div",{className:`local-board-state local-board-state--${Te}`,children:[Te==="blocked"?o.jsx(tg,{size:15}):Te==="unavailable"?o.jsx(ag,{size:15}):o.jsx(po,{size:15}),o.jsx("span",{children:rc(Te)}),Te==="blocked"&&!io()&&o.jsx("button",{type:"button",onClick:lu,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:Re||void 0,children:Re||Mo||"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:Bt,onClick:()=>void du("workspace-panel"),children:[o.jsx(vo,{size:14}),o.jsx("span",{children:"Refresh"})]}),o.jsxs("button",{type:"button","data-testid":"project-gallery-workspace-browse",title:"Select Local Storage",disabled:Bt||Te==="blocked"&&!io(),onClick:()=>void cu(),children:[Bt?o.jsx(qt,{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:Bt||a===Re,onClick:()=>void Ks(a,"history"),children:ys(a,40)},a))})]}),o.jsxs("button",{type:"button",className:"local-board-export","data-testid":"localbridge-export",disabled:Ne||!!((hl=n.source)!=null&&hl.partialImport)||!!((fl=n.source)!=null&&fl.truncated)||Te==="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 uu(),children:[Ne?o.jsx(qt,{size:15,className:"spin-icon"}):o.jsx(ad,{size:15}),o.jsx("span",{children:Ne?"Exporting":"Export current"})]}),o.jsx("div",{className:"local-board-list project-gallery-bridge-list",children:ta.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:!!To,onClick:()=>void bu(a),children:[o.jsx(po,{size:15}),o.jsxs("span",{children:[o.jsx("strong",{children:at(a.Title)}),o.jsx("small",{children:ii(a.UpdatedAt)})]}),To===a.Id&&o.jsx(qt,{size:15,className:"spin-icon"})]},a.Id))})]})]}):o.jsxs("div",{className:"project-cloud-shell","data-testid":"project-cloud-shell","data-project-cloud-status":Ge.isCloudAvailable?"available":"gated","data-project-cloud-plan":Ge.cloudPlanKey,"data-project-cloud-entitlement":Ge.cloudEntitlementStatus,"data-production-adapter-state":Qe.overallState,"data-project-cloud-database-mode":Qe.cloudBoards.mode,"data-project-cloud-database-ready":Qe.cloudBoards.canAttempt?"true":"false","data-project-cloud-asset-upload-mode":Qe.cloudAssetUpload.mode,"data-project-cloud-asset-upload-ready":Qe.cloudAssetUpload.canAttempt?"true":"false","data-client-secret-blocked":Qe.forbiddenClientSecretKeys.length>0?"true":"false",children:[o.jsx("div",{className:"project-cloud-shell__icon",children:be?o.jsx(ds,{size:22}):o.jsx(ng,{size:22})}),o.jsx("strong",{children:be?"Cloud boards are provider-ready":"Cloud projects are adapter-gated"}),o.jsx("p",{children:be?"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: ",be?"Cloud ready":"Local"]}),o.jsxs("small",{children:[at(n.name)," / ",On??Ge.cloudStatusMessage??"saved in this browser"]})]}),o.jsxs("button",{type:"button","data-testid":"project-cloud-new-board",disabled:!be||Nt,title:be?"Create and save a cloud board":"Cloud board creation requires the cloud adapter",onClick:gu,children:[Nt?o.jsx(qt,{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:!be||Nt,title:be?"Save current board to Supabase":"Cloud save requires Supabase login",onClick:pu,children:[o.jsx(ad,{size:14}),"Save current"]}),o.jsxs("button",{type:"button","data-testid":"project-cloud-refresh",disabled:!be||Nt,title:be?"Refresh cloud boards":"Cloud refresh requires Supabase login",onClick:()=>void Gs("refresh-button"),children:[Nt?o.jsx(qt,{size:14,className:"spin-icon"}):o.jsx(vo,{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"]}),be&&o.jsxs("div",{className:"local-board-list project-gallery-cloud-list","data-testid":"project-cloud-board-list",children:[oa.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 mu(a),children:[o.jsx(ds,{size:15}),o.jsxs("span",{children:[o.jsx("strong",{children:at(a.name)}),o.jsxs("small",{children:[ii(a.updatedAt)," / ",a.nodeCount," nodes"]})]}),tn===a.id&&o.jsx(qt,{size:15,className:"spin-icon"})]},a.id)),oa.length===0&&o.jsx("p",{className:"local-board-message",children:"No cloud boards loaded."})]})]})})]})]})})})]}),Ma&&ne&&o.jsx(zl,{launchers:Aa,activeLauncher:ne,template:Ke,selectedOptionId:rt,values:Ut,validationMessage:Hn??(dn?null:Yn),canCreate:dn||!Yn,primaryLabel:dn?"Add template card":"Create board",onLauncherSelected:Eu,onOptionSelected:Du,onInputChanged:Ou,onCreate:hu,onClose:Bu}),_o&&o.jsx("div",{className:"template-studio-chooser-backdrop","data-testid":"template-studio-chooser",onMouseDown:$i,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:$i,children:o.jsx(Pt,{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:$u,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:Uu,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(In,{size:15})}),o.jsx("button",{type:"button",title:"Test create board","data-testid":"template-studio-test-create",onClick:Vu,children:o.jsx(Ca,{size:15})}),o.jsx("button",{type:"button",title:"Copy manifest JSON","data-testid":"template-studio-copy",onClick:()=>void Wu(),children:o.jsx(wo,{size:15})}),o.jsx("button",{type:"button",title:"Save template draft","data-testid":"template-studio-save",onClick:zu,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(Pt,{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:()=>Hu(a.studioNodeType),children:o.jsx("span",{children:a.shortLabel})},a.studioNodeType))}),Q&&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: ",Q.title||Q.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(Pt,{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=>Yo("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=>Yo("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=>Yo("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=>Yo("boardTitle",a.target.value)})]})]}),Q?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:Q.title||Q.kind}),o.jsx("span",{children:$m})]}),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=Q.metadata)==null?void 0:xl[Y.templateNodeId])??"",onChange:a=>Gt(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=Q.metadata)==null?void 0:Cl[Y.compileTarget])??"",onChange:a=>Gt(Y.compileTarget,a.target.value),children:[o.jsx("option",{value:"",children:"Auto"}),wp.map(a=>o.jsx("option",{value:a,children:a},a))]})]}),Um?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=Q.metadata)==null?void 0:kl[Y.inputKey])??"",onChange:a=>Gt(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=Q.metadata)==null?void 0:Sl[Y.inputType])??"text",onChange:a=>Gt(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=Q.metadata)==null?void 0:wl[Y.inputRequired])??"").toLowerCase()==="true",onChange:a=>Gt(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=Q.metadata)==null?void 0:vl[Y.inputPlaceholder])??"",onChange:a=>Gt(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=Q.metadata)==null?void 0:jl[Y.inputDefaultValue])??"",onChange:a=>Gt(Y.inputDefaultValue,a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Description"}),o.jsx("textarea",{value:((Il=Q.metadata)==null?void 0:Il[Y.inputDescription])??"",onChange:a=>Gt(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=Q.metadata)==null?void 0:Nl[Y.inputOptions])??"",onChange:a=>Gt(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"}),Do&&o.jsx("small",{children:Do})]}),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."})]})]})]})]}),Oo&&Qo&&o.jsx(zl,{launchers:[al],activeLauncher:al,template:Qo,selectedOptionId:null,values:zt,validationMessage:rn??nl,canCreate:!nl,onLauncherSelected:()=>{},onOptionSelected:()=>{},onInputChanged:Gu,onCreate:Ku,onClose:Yu}),o.jsx("input",{ref:Kn,type:"file",accept:"application/json,.json",multiple:!0,hidden:!0,"data-testid":"board-import-input",onChange:a=>{xu(a.currentTarget.files),a.currentTarget.value=""}}),!pl&&o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"canvas-toolbar",role:"toolbar","aria-label":Gm?"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:()=>xe("note"),children:o.jsx(Ts,{size:17})}),o.jsx("button",{type:"button",title:"Add image","data-testid":"image-node-add",onClick:()=>xe("image"),children:o.jsx(Nn,{size:17})}),o.jsx("button",{type:"button",title:"Add video","data-testid":"video-node-add",onClick:()=>xe("video"),children:o.jsx(An,{size:17})}),o.jsx("button",{type:"button",title:"Add remote monitor","data-testid":"remote-monitor-node-add",onClick:()=>xe("remote-monitor"),children:o.jsx(Ms,{size:17})}),o.jsx("button",{type:"button",title:"Add AI Task","data-testid":"ai-task-node-add",onClick:()=>xe("ai-task"),children:o.jsx(jn,{size:17})}),o.jsx("button",{type:"button",title:"Add file reference","data-testid":"file-node-add",onClick:()=>xe("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":dt.total,"data-ai-task-runnable":dt.runnable,"data-ai-task-running":dt.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":es.size,"data-selected-graph-runnable":es.runnable,disabled:!Q||Q.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":dt.running,onClick:Zi,children:o.jsx(No,{size:17})}),o.jsx("button",{type:"button",title:"Stop active AI tasks","data-testid":"automation-stop","data-active-ai-tasks":dt.active,"data-paused-ai-tasks":dt.paused,onClick:Qi,children:o.jsx(nd,{size:15})}),o.jsx("button",{type:"button",title:ot?"Generating flow":"Generate flow",disabled:!Q||ot,onClick:()=>void el(),children:ot?o.jsx(qt,{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:Jo,children:o.jsx(od,{size:17})}),o.jsx("button",{type:"button",title:"Redo","data-testid":"history-redo",disabled:m.length===0,onClick:Zo,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:()=>xe("note"),children:o.jsx(Ts,{size:17})}),o.jsx("button",{type:"button",title:"Add memo","data-testid":"memo-node-add",onClick:()=>xe("memo"),children:o.jsx(pc,{size:17})}),o.jsx("button",{type:"button",title:"Add markdown","data-testid":"markdown-node-add",onClick:()=>xe("markdown"),children:o.jsx(wt,{size:17})}),o.jsx("button",{type:"button",title:"Add CSV table","data-testid":"csv-table-node-add",onClick:()=>xe("csv-table"),children:o.jsx(Ql,{size:17})}),o.jsx("button",{type:"button",title:"Add code","data-testid":"code-node-add",onClick:()=>xe("code"),children:o.jsx(In,{size:17})}),o.jsx("button",{type:"button",title:"Add AI Task","data-testid":"ai-task-node-add",onClick:()=>xe("ai-task"),children:o.jsx(jn,{size:17})}),o.jsx("button",{type:"button",title:"Add Code Note","data-testid":"code-note-node-add",onClick:Ju,children:o.jsx(In,{size:17})}),o.jsx("button",{type:"button",title:"Add Agent Command","data-testid":"agent-command-node-add",onClick:qu,children:o.jsx(og,{size:17})}),o.jsx("button",{type:"button",title:"Add image generation spec","data-testid":"image-generate-node-add",onClick:()=>xe("ai-task","image-generate"),children:o.jsx(Nn,{size:17})}),o.jsx("button",{type:"button",title:"Add video generation spec","data-testid":"video-generate-node-add",onClick:()=>xe("ai-task","video-generate"),children:o.jsx(An,{size:17})}),o.jsx("button",{type:"button",title:"Add image","data-testid":"image-node-add",onClick:()=>xe("image"),children:o.jsx(Nn,{size:17})}),o.jsx("button",{type:"button",title:"Add image mask","data-testid":"mask-node-add",onClick:()=>xe("mask"),children:o.jsx(sg,{size:17})}),o.jsx("button",{type:"button",title:"Add video","data-testid":"video-node-add",onClick:()=>xe("video"),children:o.jsx(An,{size:17})}),o.jsx("button",{type:"button",title:"Add embed","data-testid":"embed-node-add",onClick:()=>xe("embed"),children:o.jsx(Mn,{size:17})}),o.jsx("button",{type:"button",title:"Add remote monitor","data-testid":"remote-monitor-node-add",onClick:()=>xe("remote-monitor"),children:o.jsx(Ms,{size:17})}),o.jsx("button",{type:"button",title:"Add PDF","data-testid":"pdf-node-add",onClick:()=>xe("pdf"),children:o.jsx(wt,{size:17})}),o.jsx("button",{type:"button",title:"Add file reference","data-testid":"file-node-add",onClick:()=>xe("file"),children:o.jsx(Yr,{size:17})}),o.jsx("button",{type:"button",title:"Add directory reference","data-testid":"directory-node-add",onClick:()=>xe("directory"),children:o.jsx(kr,{size:17})}),o.jsx("button",{type:"button",title:"Templates","data-testid":"template-launcher-open",onClick:_u,children:o.jsx(ls,{size:17})}),o.jsx("button",{type:"button",title:"Template Studio",className:sn||_o?"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:yu,children:o.jsx(rg,{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":dt.total,"data-ai-task-runnable":dt.runnable,"data-ai-task-running":dt.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":es.size,"data-selected-graph-runnable":es.runnable,disabled:!Q||Q.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":dt.running,onClick:Zi,children:o.jsx(No,{size:17})}),o.jsx("button",{type:"button",title:"Stop active AI tasks","data-testid":"automation-stop","data-active-ai-tasks":dt.active,"data-paused-ai-tasks":dt.paused,onClick:Qi,children:o.jsx(nd,{size:15})}),o.jsx("button",{type:"button",title:ot?"Generating flow":"Generate flow",disabled:!Q||ot,onClick:()=>void el(),children:ot?o.jsx(qt,{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:Jo,children:o.jsx(od,{size:17})}),o.jsx("button",{type:"button",title:"Redo","data-testid":"history-redo",disabled:m.length===0,onClick:Zo,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":he,children:[o.jsxs("div",{className:"search-input-row",children:[o.jsx(ig,{size:16}),o.jsx("input",{ref:un,"data-testid":"mindcanvas-search-input","aria-label":"Search text",value:I,onChange:a=>_(a.target.value),onKeyDown:_m,placeholder:"Search text ..."}),o.jsx("span",{className:"search-count","data-testid":"mindcanvas-search-count","aria-live":"polite",children:Ym}),o.jsx("button",{type:"button",title:"Previous search result","data-testid":"mindcanvas-search-prev",disabled:F.length===0,onClick:()=>no(-1),children:o.jsx(lg,{size:14})}),o.jsx("button",{type:"button",title:"Next search result","data-testid":"mindcanvas-search-next",disabled:F.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," / ",F.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"})}),F.length>0&&o.jsx("div",{className:"search-results","data-testid":"mindcanvas-search-results",children:F.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"})]}),(fa==null?void 0:fa.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:[fa.title," Result"]}),o.jsx("button",{type:"button",title:"Close",onClick:()=>ae(null),children:o.jsx(Pt,{size:14})})]}),o.jsxs("div",{className:"result-popover__actions","data-testid":"ai-result-popover-actions",children:[o.jsxs("button",{type:"button",title:"Copy result",onClick:()=>void Mm(fa),children:[o.jsx(wo,{size:14}),o.jsx("span",{children:"Copy"})]}),o.jsxs("button",{type:"button",title:"Archive result as a Markdown node",onClick:()=>Tm(fa),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:()=>Rm(fa),children:[o.jsx(jn,{size:14}),o.jsx("span",{children:"Follow-up"})]})]}),o.jsx("pre",{className:"result-popover__body",children:fa.result})]}),It&&o.jsx(Wf,{url:It.url,fileName:It.fileName,onClose:()=>{Je(null),f.emit("node.pdf.preview.close")}}),sl&&o.jsx(vp,{node:sl,onSave:sm,onClose:om}),Ia&&o.jsx(jp,{settings:n.settings,onPatchSettings:ve,onClose:Lu}),ol&&o.jsx(Hf,{board:n,rootNode:ol,onClose:ym,onStatus:Gi,onRemove:Ki,onSubmitFollowUp:Cm,onApproval:xm,onAddArtifact:km}),ht&&o.jsx(Ip,{board:n,selectedNode:Q??null,selectedCount:p.length,input:w,viewport:Ee,viewportSize:U,localBridgeState:Te,syncStatus:Sa,syncMessage:Bn,buildPrompt:Hm,navigate:e,onClose:Pu}),!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:(Q==null?void 0:Q.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:Ru,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:ku,options:Su,onChange:a=>Au(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:Nu,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"?wu:vu,onChange:a=>Mu(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"?ju:Iu,onChange:a=>Tu(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:!Vm,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:()=>tm(a),children:a==="dot"?o.jsx(dg,{size:15}):a==="line"?o.jsx(cg,{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:am,children:o.jsx(ug,{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(mg,{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:em,children:o.jsx(pg,{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(gg,{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(hg,{size:17})}),o.jsx("button",{type:"button",title:"Reset fixture",onClick:Em,children:o.jsx(fg,{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&&ct&&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:Wm,children:[ct.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:`${ct.viewport.x}px`,top:`${ct.viewport.y}px`,width:`${ct.viewport.width}px`,height:`${ct.viewport.height}px`}})]})]}),o.jsxs("div",{className:"canvas-status",children:[n.nodes.length," nodes / ",Fa.length," rendered / ",n.edges.length," edges / ",Math.round(Ee.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{Jy as MindCanvas};