@mindexec/cli 0.2.346 → 0.2.347

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,48 +0,0 @@
1
- var ku=Object.defineProperty;var wu=(e,t,o)=>t in e?ku(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var _i=(e,t,o)=>wu(e,typeof t!="symbol"?t+"":t,o);import{j as n,r as g,a as vu}from"./vendor-react-BXzpOyCS.js";import{l as ju,a as ut,s as Tt,b as Iu,d as Nu,r as Au,c as Mu,e as Ru,i as Di}from"./storage-BxbRfn9F.js";import{r as Ar,g as es,w as Tu,a as Rs,d as Bi,b as Lu,t as Mr,p as Gl,v as Eu,R as Pu,c as _u,u as Du,e as Bu,f as Oi,s as mt,i as za,l as Ts,h as Dn,j as Ao,k as Bn,m as On,n as Mo,o as ga,q as $i,x as Ou,y as $n,z as $u,A as Fu,B as Uu,C as zu,D as Kl,E as Wu,F as Hu,G as Ls,H as Fi,I as Vu,J as Yu,K as Ui,L as nr,M as or,N as Xl,O as Ro,P as Fo,Q as Yn,S as zi,T as $,U as Es,V as Gn,W as Gu,X as Ku,Y as Xu,Z as Wi,_ as Ps,$ as qu,a0 as Ju,a1 as Zu,a2 as Qu,a3 as Hi,a4 as em,a5 as tm,a6 as am,a7 as nm,a8 as Vi}from"./canvas-runtime-NLX25Qv6.js";import{e as om,d as sm}from"./vendor-msgpack-BE8aAsr3.js";import{R as f}from"./app-runtime-xD2Z3NdN.js";import{g as _s}from"./index-CUMzsqat.js";import{g as ts,r as ql}from"./supabaseAuthAdapter-C3z334Qw.js";import{c as rm,a as im,r as Yi}from"./toolHandoff-D5e5f7t5.js";import{a as Gi,s as lm}from"./executionModeSettings-NJqurj-o.js";import{a as Ki,p as dm}from"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";import{A as Lt,W as cm,c as Jl,D as um,E as Rr,R as qa,J as Tr,X as pt,N as sr,O as mm,Q as eo,w as Ja,I as to,V as ao,l as rr,F as gt,Y as pm,Z as Zl,_ as ir,$ as Za,a0 as Ql,a1 as gm,a2 as ed,a3 as hm,i as qn,a4 as td,a5 as fm,a6 as Xi,a7 as bm,a8 as fa,a9 as qi,T as Go,aa as Ji,ab as Ko,ac as ym,ad as lr,ae as ad,af as dr,ag as xm,ah as Cm,f as Sm,ai as km,h as Kn,x as wm,aj as vm,ak as jm,al as Zi,am as Qi,an as el,g as tl,ao as To,H as Fn,ap as Lo,s as Ds,aq as al,ar as Im,as as Bs,at as nl,au as Os,av as Nm,aw as Am,ax as Mm,ay as ol,az as Rm,aA as Tm,aB as Lm,aC as Em,n as Pm,o as Un,aD as _m,aE as Dm,aF as Bm,aG as Om,aH as $m,aI as Fm,aJ as Um,aK as zm}from"./vendor-icons-oiW_NVNO.js";const Wm=1200,xa="LocalBridgeOriginalNodeId";function ht(e){return typeof e=="object"&&e!==null}function Gt(e,t){const o=Number(e);return Number.isFinite(o)?o:t}function W(e){return typeof e=="string"?e:""}function nd(){return typeof window<"u"?{width:window.innerWidth||1280,height:window.innerHeight||720}:{width:1280,height:720}}function cr(e,t,o){const r=Number(e),d=Number(t),p=Number(o);if(!Number.isFinite(r)||!Number.isFinite(d)||!Number.isFinite(p)||p<=0)return null;const m=1400/p,y=nd();return{x:y.width/2-r*m,y:y.height/2-d*m,scale:m}}function Hm(e){return ht(e)?cr(e.x??e.X,e.y??e.Y,e.z??e.Z):null}function Vm(e){if(!ht(e))return null;const t=Number(e.x),o=Number(e.y),r=Number(e.scale);if(!Number.isFinite(t)||!Number.isFinite(o)||!Number.isFinite(r)||r<=0)return null;const d=nd();return{x:(d.width/2-t)/r,y:(d.height/2-o)/r,z:1400/r}}function Ym(e){const t=String(e||"").trim();if(t)try{const o=JSON.parse(t);if(!ht(o))return;const r={};for(const[d,p]of Object.entries(o)){const m=Hm(p);m&&(r[d]=m)}return Object.keys(r).length>0?r:void 0}catch{return}}function Gm(e){if(!e||Object.keys(e).length===0)return null;const t={};for(const[o,r]of Object.entries(e)){const d=Vm(r);d&&(t[o]=d)}return Object.keys(t).length>0?JSON.stringify(t):null}function Xo(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 as(){return crypto.randomUUID()}function Lr(e){return ht(e)?"ContentType"in e||"Prompt"in e||"Response"in e||"PositionX"in e||"PositionY"in e||"SourceFilePath"in e||"ImageStack"in e:!1}function sl(e){const t=W(e).trim();if(!t)return null;try{return JSON.parse(t)}catch{return null}}function ur(e){if(Array.isArray(e))return e;if(!ht(e))return[];for(const t of["Nodes","nodes","Items","items","Content","content","Upserts","upserts"])if(t in e){const o=e[t];if(Array.isArray(o))return o;const r=sl(o);if(r)return ur(r)}for(const t of["ContentJson","contentJson","content_json"])if(t in e){const o=sl(e[t]);if(o)return ur(o)}return Lr(e)?[e]:[]}function Er(e){return ht(e)?"BoardId"in e&&("Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e):!1}function od(e){if(!ht(e))return 0;for(const t of["Deletes","deletes"]){const o=e[t];if(Array.isArray(o))return o.length}return 0}function qo(e){return ur(e).filter(Lr)}function sd(e){return qo(e).length}function Km(e,t){var p;const o=[...qo(e)];if(!Er(t))return o;const r=new Set;for(const m of["Deletes","deletes"]){const y=t[m];if(Array.isArray(y))for(const c of y){const x=W(c).trim();x&&r.add(x)}}if(r.size>0)for(let m=o.length-1;m>=0;m-=1){const y=W((p=o[m])==null?void 0:p.Id).trim();y&&r.has(y)&&o.splice(m,1)}const d=new Map;o.forEach((m,y)=>{const c=W(m.Id).trim();c&&d.set(c,y)});for(const m of qo(t)){const y=W(m.Id).trim(),c=y?d.get(y):void 0;if(c!==void 0){o[c]=m;continue}y&&d.set(y,o.length),o.push(m)}return o}function rd(e){const t=Array.isArray(e)?e.filter(ht):[];return new Map(t.filter(o=>o.NodeId).map(o=>[String(o.NodeId),o]))}async function mr(e,t){for(const o of e)try{const r=await Ar(o,t);return{payload:JSON.parse(r.content),path:o}}catch{}return null}async function Xm(e,t){const o=`.mindexec/boards/${e}.msgpack`,r=`boards/${e}.msgpack`;for(const y of[o,r])try{const c=await Lu(y,t);return{payload:sm(c),format:y===o?"msgpack":"legacy-msgpack",path:y}}catch{}const d=`.mindexec/boards/${e}.json`,p=`boards/${e}.json`,m=await mr([d,p],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: ${o}, ${r}, ${d}, ${p}`)}function pr(e){const t=W(e.Id).trim()||W(e.BoardId).trim();return t?{Id:t,Title:W(e.Title)||null,Description:W(e.Description)||null,ThumbnailUrl:W(e.ThumbnailUrl)||null,CreatedAt:W(e.CreatedAt)||null,UpdatedAt:W(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:W(e.CameraBookmarks)||null}:null}function rl(e){return!ht(e)||Lr(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 Pr(e){if(Array.isArray(e))return e.filter(rl).map(t=>pr(t)).filter(t=>!!t);if(rl(e)){const t=pr(e);return t?[t]:[]}return[]}function qm(e){const t=e.toLowerCase();return Jm(t)?"remote-control":Zm(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 Jm(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 o=t.replace(/[^a-z0-9]+/g,"");return o.includes("remotecontrol")||o.includes("remotedevice")||o.includes("remotefleetdevice")}function Zm(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 o=t.replace(/[^a-z0-9]+/g,"");return o.includes("remotemonitor")||o.includes("remotehubmonitor")||o.includes("multidesktopmonitor")||o.includes("smartviewmonitor")}function Qm(e,t){const o=e.Metadata||{},r=o.ThumbnailUrl,d=o.OriginalUrl,p=o.OriginalPath;return Mr(W(r)||W(d)||W(p)||W(e.Response),t)}function ep(e,t,o){const r=e.ImageStack,d=Array.isArray(r==null?void 0:r.Variants)?r.Variants:[];if(d.length===0)return;const p=d.map((y,c)=>{const x=W(y.AssetId).trim(),v=Mr(x,o)||t;return v?{variantId:W(y.VariantId)||`variant-${W(e.Id)||c}`,imageUrl:v,assetId:x||void 0,caption:W(y.Caption)||void 0,sourceNodeId:W(e.Id)||void 0,createdAtUtc:W(y.CreatedAtUtc)||void 0}:null}).filter(y=>!!y);if(p.length===0)return;const m=W(r==null?void 0:r.ActiveVariantId);return{activeVariantId:p.some(y=>y.variantId===m)?m:p[0].variantId,variants:p,kind:W(r==null?void 0:r.Kind)||"versions",title:W(r==null?void 0:r.Title)||void 0,updatedAtUtc:W(r==null?void 0:r.UpdatedAtUtc)||void 0}}function tp(e,t){return!e||e.variants.length===0?t:(e.variants.find(r=>r.variantId===e.activeVariantId)??e.variants[0]).imageUrl||t}function ap(e,t,o){var m,y,c,x,v,L;const r=(y=(m=e.imageStack)==null?void 0:m.variants)!=null&&y.length?e.imageStack.variants:e.imageUrl?[{variantId:`${e.id}:image`,imageUrl:e.imageUrl,assetId:no(e.imageUrl,t)||e.imageUrl,title:e.title,sourceNodeId:e.id,createdAtUtc:o}]:[];if(r.length===0)return null;const d=r.map(j=>({VariantId:j.variantId||as(),AssetId:j.assetId||no(j.imageUrl,t)||j.imageUrl,CreatedAtUtc:j.createdAtUtc||o,Caption:j.caption||j.title||null}));return{ActiveVariantId:(c=e.imageStack)!=null&&c.activeVariantId&&d.some(j=>{var P;return j.VariantId===((P=e.imageStack)==null?void 0:P.activeVariantId)})?e.imageStack.activeVariantId:d[0].VariantId||"",Variants:d,Kind:((x=e.imageStack)==null?void 0:x.kind)||(d.length>1?"pile":"versions"),Title:((v=e.imageStack)==null?void 0:v.title)||e.title||null,UpdatedAtUtc:((L=e.imageStack)==null?void 0:L.updatedAtUtc)||o}}function np(e,t){const o=e.Metadata||{};return Mr(W(o.OriginalUrl)||W(o.OriginalPath)||W(o.SourceFilePath)||W(e.SourceFilePath)||W(e.Response),t)}function op(e){const t={};for(const[o,r]of Object.entries(e??{}))typeof r=="string"?t[o]=r:r!=null&&(t[o]=String(r));return t}function sp(e){switch(e){case"remote-monitor":return"remote-monitor";case"remote-control":return"remote-control";case"template-launcher":return"templateLauncher";case"directory":return"directory";case"pdf":return"pdf";case"file":return"file";case"image":return"image";case"mask":return"mask";case"video":return"video";case"embed":return"embed";case"code":return"code";case"markdown":return"markdown";case"csv-table":return"csv-table";case"memo":return"memo";case"text":return"text";case"ai-task":return"note";default:return"note"}}function no(e,t){const o=String(e||"").trim();if(!o)return"";const r=t.replace(/\/+$/,"");return o.startsWith(`${r}/`)?o.slice(r.length+1):o.replace(/^\/+/,"")}function rp(e,t){const o=new Map;for(const r of e){const d=t.get(r.from),p=t.get(r.to);!d||!p||o.has(p)||o.set(p,d)}return o}function ip(e){const t=new Set;return e.map(o=>{var c,x;const r=((c=o.metadata)==null?void 0:c[xa])||"",d=Xo(r)?r:Xo(o.id)?o.id:"",p=!!(d&&t.has(d)),m=d&&!p?d:as(),y=((x=o.metadata)==null?void 0:x[xa])!==m;return t.add(m),{node:y?{...o,metadata:{...o.metadata??{},[xa]:m}}:o,originalId:m,assignedNodeId:!d||p,metadataStamped:y,duplicateOriginalId:p}})}function lp(e,t,o,r,d){var x,v,L;const p=sp(e.kind),m=p==="image"||p==="mask"?no(e.imageUrl,d):"",y=["video","pdf","file","directory","embed"].includes(p)?no(e.assetUrl||e.sourceFilePath||e.body,d):"",c={...e.metadata??{},[xa]:t,ReactNodeId:e.id,ReactKind:e.kind};if(e.kind==="remote-monitor"&&(c.RemoteHub??(c.RemoteHub="Gated"),c.RemoteRoute??(c.RemoteRoute="Gated"),c.RemoteConnected??(c.RemoteConnected="0"),c.RemoteTotal??(c.RemoteTotal="30"),c.RemotePage??(c.RemotePage="1/1"),c.AdapterState??(c.AdapterState="adapter-gated")),e.kind==="remote-control"&&(c.SemanticType??(c.SemanticType="RemoteFleetDevice"),c.RemoteFleetSchemaVersion??(c.RemoteFleetSchemaVersion="remote-fleet-device@1"),c.RemoteRoute??(c.RemoteRoute="Gated"),c.RemoteInput??(c.RemoteInput="Off"),c.AdapterState??(c.AdapterState="adapter-gated")),e.kind==="mask"&&(c.ImageRouterMask??(c.ImageRouterMask="true"),c.SemanticType??(c.SemanticType="ImageEditMask")),e.kind==="embed"){const j=e.assetUrl||e.body||e.sourceFilePath||"";c.source??(c.source="embed"),c.renderMode??(c.renderMode="card"),c.provider??(c.provider="web"),c.sourceUrl??(c.sourceUrl=j),c.url??(c.url=j),c.AdapterState??(c.AdapterState="local-reference")}return e.kind==="video"&&(c.assetKind??(c.assetKind="video"),c.videoMode??(c.videoMode=(x=e.assetUrl)!=null&&x.startsWith(d)?"local_bridge":"local_reference"),c.AdapterState??(c.AdapterState=((v=e.metadata)==null?void 0:v.PromptOnly)==="true"?"adapter-gated":"local-reference")),(L=e.tags)!=null&&L.length&&(c.ReactTags=JSON.stringify(e.tags)),m&&(c.OriginalUrl=m,c.ThumbnailUrl=m),y&&(c.OriginalPath=y,c.SourceFilePath=y),{Id:t,ContentType:p,Prompt:e.title||p,Response:p==="image"||p==="mask"?m||e.body||null:p==="remote-monitor"?e.body||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":p==="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:o||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:c,ImageStack:p==="image"?ap(e,d,r):null}}function dp(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 cp(e,t,o){const r=W(e.ContentType)||"note",d=W(e.Prompt).trim(),p=W(e.Response).trim(),m=op(e.Metadata),y=W(e.Id).trim();y&&(m[xa]??(m[xa]=y));const x=["true","1","yes"].includes(String(m.ImageRouterMask||m.IsMask||"").trim().toLowerCase())?"mask":qm(r),v=x==="memo"&&["mindcanvasagent","agentcommand"].includes(String(m.SemanticType||m.semanticType||"").trim().toLowerCase()),L=x==="memo"&&["codenote","code-note"].includes(String(m.SemanticType||m.semanticType||"").trim().toLowerCase()),j=W(e.SourceFilePath)||m.OriginalPath||m.SourceFilePath||"",P=x==="video"||x==="pdf"||x==="file"||x==="directory"||x==="embed"?np(e,o):void 0,V=d||e.SourceFilePath||r||"LocalBridge node",F=x==="image"?p||d||"Image asset":x==="mask"?p||d||"Image mask asset":x==="remote-monitor"?p||d||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":x==="remote-control"?p||d||j||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":x==="pdf"||x==="file"||x==="directory"||x==="embed"?p||j||d||r:p||d||j||"",B=v?500:L?400:x==="remote-monitor"?860:x==="remote-control"||x==="template-launcher"?560:x==="csv-table"?720:x==="embed"?460:x==="video"?420:x==="markdown"?380:x==="text"||x==="image"||x==="mask"?360:320,X=v||L?300:x==="remote-monitor"?640:x==="remote-control"?390:x==="template-launcher"?620:x==="csv-table"?420:x==="embed"?260:x==="video"?236:x==="markdown"?240:x==="text"?210:x==="image"||x==="mask"?260:180,ee=x==="image"||x==="mask"?Qm(e,o):void 0,me=x==="image"?ep(e,ee,o):void 0,be=!!(e.IsChunkedText||m.IsChunkedText==="true"),Se=Gt(e.TotalLineCount??m.TotalLineCount,0),pe=Gt(e.ScrollOffset,0),Ve=Gt(e.MaxScroll,0);return{id:String(e.Id||crypto.randomUUID()),kind:x,title:x==="remote-monitor"?d||"Multi Desktop Monitor":x==="remote-control"?d||m.RemoteFleetDeviceName||"Remote Device":x==="template-launcher"?d||"Template Launcher":V,body:F,x:Gt((t==null?void 0:t.PositionX)??e.PositionX,0),y:Gt((t==null?void 0:t.PositionY)??e.PositionY,0),width:Math.max(160,Math.min(900,Gt((t==null?void 0:t.Width)??e.Width,B))),height:Math.max(120,Math.min(900,Gt((t==null?void 0:t.Height)??e.Height,X))),status:e.IsLoading?"running":x==="ai-task"?"idle":void 0,imageUrl:tp(me,ee),imageStack:me,assetUrl:P,sourceFilePath:j||void 0,isChunkedText:be||void 0,totalLineCount:be?Se:void 0,scrollOffset:be?pe:void 0,maxScroll:be?Ve:void 0,isExpanded:typeof e.IsExpanded=="boolean"?e.IsExpanded:void 0,originalHeight:Gt(e.OriginalHeight,0)||void 0,tags:v?["Agent Command",m.AgentCommandRequestedRole||"Researcher",m.AgentCommandStatus||"Draft"]:L?["Code Note",m.CodeNoteStatus||"Draft",m.CodeNoteSyncState||"Unlinked"]:x==="remote-monitor"?["Remote","Monitor","LocalBridge"]:x==="remote-control"?["Remote","Control","LocalBridge"]:["LocalBridge",r],metadata:x==="remote-monitor"?up(m):x==="remote-control"?mp(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 up(e){return{RemoteHub:"Gated",RemoteRoute:"Gated",RemoteConnected:"0",RemoteTotal:"30",RemotePage:"1/1",AdapterState:"adapter-gated",...e}}function mp(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 pp(e,t){const o=[];for(const r of e){const d=String(r.Id||""),p=String(r.ParentId||"");!d||!p||!t.has(d)||!t.has(p)||o.push({id:`edge-local-${p}-${d}`,from:p,to:d,kind:"context"})}return o}async function gp(e=es()){const t=await Ar(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return(Array.isArray(o)?o.filter(ht):[]).map(p=>pr(p)).filter(p=>!!p).sort((p,m)=>String(m.UpdatedAt||"").localeCompare(String(p.UpdatedAt||"")))}async function hp(e){try{const t=await Ar(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return Array.isArray(o)?o.filter(ht):[]}catch{return[]}}async function fp(e,t,o,r=es()){var J,ft,O,nt;if((J=e.source)!=null&&J.partialImport)throw new Error("This board was imported from a partial original payload. Export is blocked to avoid data loss.");if((ft=e.source)!=null&&ft.truncated)throw new Error("This board was truncated during import. Export is blocked to avoid data loss.");const d=(O=e.source)!=null&&O.exportedByReact?String(e.source.boardId||""):"",p=Xo(d),m=Xo(d)?d:as(),y=new Date().toISOString(),c=ip(e.nodes),x=c.map(U=>U.node),v=new Map(c.map(U=>[U.node.id,U.originalId])),L=rp(e.edges,v),j=c.map(({node:U,originalId:te})=>lp(U,te,L.get(te),y,r)),P=c.map(({node:U,originalId:te})=>dp(U,te)),V=t.scale>0?t.scale:1,F=(window.innerWidth/2-t.x)/V,B=(window.innerHeight/2-t.y)/V,X=1400/V,ee=(nt=e.nodes.find(U=>U.kind==="image"&&U.imageUrl))==null?void 0:nt.imageUrl,me={Id:m,UserId:"00000000-0000-0000-0000-000000000000",Title:e.name||"Untitled Board",Description:"Exported from MindExec React",ThumbnailUrl:no(ee,r)||"",IsPublic:!1,CreatedAt:y,SyncedCloudBoardId:null,LastSyncedAt:null,LastCloudCopyStatus:null,UpdatedAt:y,LastCameraX:F,LastCameraY:B,LastCameraZ:X,LastCursorX:0,LastCursorY:0,CameraBookmarks:Gm(e.settings.cameraBookmarks)},be=`.mindexec/boards/${m}.msgpack`,Se=`.mindexec/boards/${m}.json`,pe=`.mindexec/boards/${m}.layout.json`,Ve=`.mindexec/boards/${m}.delta.json`,tt=`boards/${m}.delta.json`,at=await hp(r),ce=[me,...at.filter(U=>W(U.Id)!==m)],G=om(j);await Tu(be,G,o,r),await Rs(Se,JSON.stringify(j,null,2),o,r),await Rs(pe,JSON.stringify(P,null,2),o,r),await Rs(".mindexec/boards/_metadata.json",JSON.stringify(ce,null,2),o,r);const oe=await Promise.allSettled([Bi(Ve,o,r),Bi(tt,o,r)]);return f.emit("localBridge.board.exported",{boardId:m,nodes:j.length,edges:e.edges.length,snapshotFormat:"msgpack",msgpackBytes:G.byteLength,jsonMirror:!0,deltaCleared:oe.some(U=>U.status==="fulfilled"&&U.value.success),reusedBoardId:p,stableNodeIds:c.length,assignedNodeIds:c.filter(U=>U.assignedNodeId).length,metadataStampedNodeIds:c.filter(U=>U.metadataStamped).length,duplicateOriginalNodeIds:c.filter(U=>U.duplicateOriginalId).length}),{metadata:me,source:{kind:"localBridge",boardId:m,loadedAt:y,originalNodeCount:j.length,renderedNodeCount:j.length,truncated:!1,exportedByReact:!0,snapshotFormat:"msgpack"},nodes:x,msgpackPath:be,boardPath:Se,layoutPath:pe}}async function bp(e,t,o=es()){const r=await Xm(e.Id,o);let d=new Map;const p=await mr([`.mindexec/boards/${e.Id}.layout.json`,`boards/${e.Id}.layout.json`],o);p&&(d=rd(p.payload));let m=null;const y=await mr([`.mindexec/boards/${e.Id}.delta.json`,`boards/${e.Id}.delta.json`],o);y&&(m=y.payload);const c=m?Pr(m)[0]:null,x=!!(m&&Er(m)),v=x?Km(r.payload,m):r.payload;return id(v,t,{boardId:(c==null?void 0:c.Id)??e.Id,title:(c==null?void 0:c.Title)||e.Title||"LocalBridge Board",updatedAt:(c==null?void 0:c.UpdatedAt)??e.UpdatedAt,layoutPayload:Array.from(d.values()),baseUrl:o,cameraBookmarks:(c==null?void 0:c.CameraBookmarks)??e.CameraBookmarks,deltaApplied:x,deltaUpserts:m?sd(m):0,deltaDeletes:m?od(m):0,snapshotFormat:r.format})}function id(e,t,o={}){const r=qo(e),d=Er(e),p=o.deltaUpserts??(d?r.length:0),m=o.deltaDeletes??(d?od(e):0),y=o.layoutPayload?rd(o.layoutPayload):new Map,c=r.slice(0,Wm),x=c.map(X=>cp(X,y.get(String(X.Id||"")),o.baseUrl??es())),v=new Set(x.map(X=>X.id)),L=pp(c,v),j=r.length>x.length,P=d,V=o.deltaApplied===!0,F=o.boardId||as(),B=o.updatedAt||new Date().toISOString();return f.emit("localBridge.board.loaded",{boardId:F,nodes:x.length,originalNodes:r.length,truncated:j,snapshotFormat:o.snapshotFormat,partialImport:P,deltaImport:d,deltaApplied:V,deltaUpserts:p,deltaDeletes:m}),{id:`localBridge:${F}`,name:o.title||"LocalBridge Board",nodes:x,edges:L,settings:{...t,cameraBookmarks:Ym(o.cameraBookmarks)},updatedAt:B,source:{kind:"localBridge",boardId:F,loadedAt:new Date().toISOString(),snapshotFormat:o.snapshotFormat,originalNodeCount:r.length,renderedNodeCount:x.length,truncated:j,partialImport:P,deltaImport:d,deltaApplied:V}}}const _r=["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(","),yp=/^[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 xp(e){if(yp.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 ld(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 Cp(e){return JSON.stringify({id:e.id,name:e.name,nodes:e.nodes,edges:e.edges,settings:e.settings,updatedAt:e.updatedAt})}function gr(e,t=new Date().toISOString()){return e&&!Number.isNaN(Date.parse(e))?e:t}function Dr(e){return(e==null?void 0:e.trim().slice(0,90))||"Untitled Board"}function dd(e){const t=ld(e.content_json),o=gr(e.updated_at??t.updatedAt);return{id:e.id,name:Dr(e.title??t.name),updatedAt:o,createdAt:gr(e.created_at,o),nodeCount:Array.isArray(t.nodes)?t.nodes.length:0,edgeCount:Array.isArray(t.edges)?t.edges.length:0,sourceKind:"cloud"}}function Sp(e,t){const o=ld(e.content_json),r=gr(e.updated_at??o.updatedAt);return{id:e.id,name:Dr(e.title??o.name),nodes:Array.isArray(o.nodes)?o.nodes:[],edges:Array.isArray(o.edges)?o.edges:[],settings:o.settings??t,updatedAt:r,source:{kind:"cloud",boardId:e.id,loadedAt:new Date().toISOString(),snapshotFormat:"supabase.boards.content_json",originalNodeCount:Array.isArray(o.nodes)?o.nodes.length:0,renderedNodeCount:Array.isArray(o.nodes)?o.nodes.length:0}}}async function Br(e){var c;const t=ql(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 o=ts(e);if(!o)return f.emit("projectStorage.cloud.provider.skipped",{mode:"config-missing"}),{userId:null,config:t,reason:"missing-client"};const{data:r,error:d}=await o.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:p,error:m}=await o.auth.getUser(),y=((c=p.user)==null?void 0:c.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 kp(e){const t=await Br(e);if(!t.userId)return[];const o=ts(e);if(!o)return[];f.emit("projectStorage.cloud.list.requested");const{data:r,error:d}=await o.from("boards").select(_r).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 p=(r??[]).map(dd);return f.emit("projectStorage.cloud.list.loaded",{count:p.length}),p}async function wp(e,t,o){const r=await Br(e);if(!r.userId)return null;const d=ts(e);if(!d)return null;f.emit("projectStorage.cloud.load.requested",{boardId:t});const{data:p,error:m}=await d.from("boards").select(_r).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(!p)return null;const y=Sp(p,o);return f.emit("projectStorage.cloud.load.loaded",{boardId:t,nodes:y.nodes.length,edges:y.edges.length}),y}async function vp(e,t,o){const r=await Br(e);if(!r.userId)return null;const d=ts(e);if(!d)return null;const p=xp(t.id),m=new Date().toISOString(),y=Dr(t.name),c={...t,id:p,name:y,updatedAt:m},x={p_board_id:p,p_title:y,p_description:null,p_thumbnail_url:null,p_is_public:!1,p_created_at:null,p_updated_at:m,p_last_camera_x:o.x,p_last_camera_y:o.y,p_last_camera_z:o.scale,p_last_cursor_x:0,p_last_cursor_y:0,p_camera_bookmarks:JSON.stringify(t.settings.cameraBookmarks??{}),p_nodes:[],p_include_json_mirror:!0};f.emit("projectStorage.cloud.save.requested",{boardId:p,sourceBoardId:t.id,nodes:t.nodes.length,edges:t.edges.length});const{error:v}=await d.rpc("save_board_snapshot",x);if(v)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-rpc",boardId:p,message:v.message}),v;const L={content_json:Cp(c),updated_at:m},{data:j,error:P}=await d.from("boards").update(L).eq("id",p).eq("user_id",r.userId).select(_r).maybeSingle();if(P)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-json-mirror",boardId:p,message:P.message}),P;const V=j?dd(j):{id:p,name:y,updatedAt:m,createdAt:m,nodeCount:t.nodes.length,edgeCount:t.edges.length,sourceKind:"cloud"};return f.emit("projectStorage.cloud.save.saved",{boardId:V.id,nodes:V.nodeCount,edges:V.edgeCount}),V}function hr(e){return e.length===0?{minX:0,minY:0,maxX:0,maxY:0}:e.reduce((t,o)=>({minX:Math.min(t.minX,o.x),minY:Math.min(t.minY,o.y),maxX:Math.max(t.maxX,o.x+o.width),maxY:Math.max(t.maxY,o.y+o.height)}),{minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY})}function jp(e,t={},o=hr(e),r){if(e.length===0)return{after:new Map,boundsAfter:o};const d=zp(t.mode),p=Wp(t.order),m=Hp(t.anchor),y=Vp(t.sizeMode),c=Math.max(0,t.gapX??24),x=Math.max(0,t.gapY??24),v=Math.max(1,t.maxColumns??12),L=fr(t.quantile??.75,.05,.95),j=e.map(Ip),P=Bp(j,p),V=P.map(pe=>pe.width),F=P.map(pe=>pe.height),B=Math.max(1,t.cellWidth??ll(V,L)),X=Math.max(1,t.cellHeight??ll(F,L)),ee=Math.max(1,t.targetWidth??B),me=Math.max(1,t.targetHeight??X),be=Dp(m,o);if(d==="grid"){Lp(P,y,ee,me,B,X);const pe=il(t.columns,v,o.maxX-o.minX,B,c);Ap(P,be.x,be.y,pe,B,X,c,x)}else if(d==="masonry"){Ep(P,y==="preserve"?"uniformWidth":y,ee);const Ve=il(t.columns,v,o.maxX-o.minX,ee,c);Mp(P,be.x,be.y,Ve,ee,c,x)}else d==="stripHorizontal"?(Pp(P,y==="preserve"?"uniformHeight":y,me),Rp(P,be.x,be.y,c,me)):(_p(P,y==="preserve"?"uniformWidth":y,ee),Tp(P,be.x,be.y,x,ee));let Se=new Map(P.map(pe=>[pe.id,Np(pe)]));return m==="selectionBoundsCenter"&&(Se=$p(o,Se)),t.snapToGrid&&(Se=Fp(Se,Math.max(1,t.gridSize??8))),{after:Se,boundsAfter:hr(Array.from(Se.values()))}}function Ip(e){return{...e,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function Np(e){return{x:e.x,y:e.y,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function Ap(e,t,o,r,d,p,m,y){e.forEach((c,x)=>{const v=Math.floor(x/r),L=x%r,j=t+L*(d+m),P=o+v*(p+y);c.x=j+(d-c.width)/2,c.y=P+(p-c.height)/2})}function Mp(e,t,o,r,d,p,m){const y=Array.from({length:r},()=>0);for(const c of e){const x=Up(y),v=t+x*(d+p);c.x=v+(d-c.width)/2,c.y=o+y[x],y[x]+=c.height+m}}function Rp(e,t,o,r,d){let p=t;for(const m of e)m.x=p,m.y=o+(d-m.height)/2,p+=m.width+r}function Tp(e,t,o,r,d){let p=o;for(const m of e)m.x=t+(d-m.width)/2,m.y=p,p+=m.height+r}function Lp(e,t,o,r,d,p){if(t==="fitCellDownOnly")for(const m of e){const y=Math.min(1,d/m.width,p/m.height);m.width*=y,m.height*=y}else t==="uniformWidth"?Or(e,o):t==="uniformHeight"&&cd(e,r)}function Ep(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const d=Math.min(1,o/r.width);r.width*=d,r.height*=d}return}Or(e,o)}function Pp(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const d=Math.min(1,o/r.height);r.width*=d,r.height*=d}return}cd(e,o)}function _p(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const d=Math.min(1,o/r.width);r.width*=d,r.height*=d}return}Or(e,o)}function Or(e,t){for(const o of e){if(o.width<=0)continue;const r=t/o.width;o.width=t,o.height=Math.max(1,o.height*r)}}function cd(e,t){for(const o of e){if(o.height<=0)continue;const r=t/o.height;o.height=t,o.width=Math.max(1,o.width*r)}}function il(e,t,o,r,d){if(typeof e=="number"&&e>0)return Math.round(fr(e,1,t));if(o<=1||r<=1)return 1;const p=Math.floor((o+d)/(r+d));return!Number.isFinite(p)||p<1?1:Math.round(fr(p,1,t))}function Dp(e,t,o){return{x:t.minX,y:t.minY}}function Bp(e,t){return t==="selectionOrder"?[...e].sort((o,r)=>o.selectionIndex-r.selectionIndex):Op(e)}function Op(e){const t=[...e].sort((c,x)=>c.y-x.y||c.x-x.x);if(t.length<=2)return t;const o=t.map(c=>c.height).sort((c,x)=>c-x),r=o[Math.floor(o.length/2)]??1,d=Math.max(16,r*.35),p=[];let m=[],y=Number.NaN;for(const c of t)m.length===0?(m=[c],y=c.y):Math.abs(c.y-y)<=d?(m.push(c),y=(y*(m.length-1)+c.y)/m.length):(p.push([...m].sort((x,v)=>x.x-v.x)),m=[c],y=c.y);return m.length>0&&p.push([...m].sort((c,x)=>c.x-x.x)),p.flat()}function $p(e,t){if(t.size===0)return t;const o=hr(Array.from(t.values())),r=e.minX+(e.maxX-e.minX)/2,d=e.minY+(e.maxY-e.minY)/2,p=o.minX+(o.maxX-o.minX)/2,m=o.minY+(o.maxY-o.minY)/2,y=r-p,c=d-m;return new Map(Array.from(t.entries()).map(([x,v])=>[x,{...v,x:v.x+y,y:v.y+c}]))}function Fp(e,t){return new Map(Array.from(e.entries()).map(([o,r])=>[o,{...r,x:dl(r.x,t),y:dl(r.y,t)}]))}function ll(e,t){if(e.length===0)return 1;const o=[...e].sort((y,c)=>y-c),r=(o.length-1)*t,d=Math.floor(r),p=Math.min(o.length-1,d+1),m=r-d;return o[d]*(1-m)+o[p]*m}function Up(e){let t=0;for(let o=1;o<e.length;o+=1)e[o]<e[t]&&(t=o);return t}function dl(e,t){return Math.round(e/t)*t}function zp(e){const t=ns(e);return t==="grid"?"grid":t==="striphorizontal"||t==="striph"?"stripHorizontal":t==="stripvertical"||t==="stripv"?"stripVertical":"masonry"}function Wp(e){return ns(e)==="selectionorder"?"selectionOrder":"spatialReading"}function Hp(e){const t=ns(e);return t==="selectionboundscenter"?"selectionBoundsCenter":t==="viewporttopleft"?"viewportTopLeft":"selectionBoundsTopLeft"}function Vp(e){const t=ns(e);return t==="fitcelldownonly"?"fitCellDownOnly":t==="uniformwidth"?"uniformWidth":t==="uniformheight"?"uniformHeight":"preserve"}function ns(e){return String(e??"").trim().toLowerCase().replace(/[^a-z0-9]/g,"")}function fr(e,t,o){return Math.min(o,Math.max(t,e))}const ud=300,md=50*1024*1024,Yp=800;function ye(e){return typeof e=="string"?e.length*2:0}function Gp(e){let t=256;if(t+=ye(e.id),t+=ye(e.kind),t+=ye(e.title),t+=ye(e.body),t+=ye(e.result),t+=ye(e.imageUrl),t+=ye(e.assetUrl),t+=ye(e.sourceFilePath),t+=(e.tags??[]).reduce((o,r)=>o+ye(r),0),e.metadata)for(const[o,r]of Object.entries(e.metadata))t+=ye(o)+ye(r);return e.imageStack&&(t+=128+ye(e.imageStack.title),t+=e.imageStack.variants.reduce((o,r)=>o+96+ye(r.variantId)+ye(r.imageUrl)+ye(r.assetId)+ye(r.title)+ye(r.caption),0)),t}function Kp(e){let t=1024+ye(e.id)+ye(e.name)+ye(e.updatedAt);return t+=e.nodes.reduce((o,r)=>o+Gp(r),0),t+=e.edges.length*128,t+=Object.entries(e.settings).reduce((o,[r,d])=>o+ye(r)+ye(typeof d=="string"?d:JSON.stringify(d)),0),t}function pd(e,t={}){var o,r;return{board:e,description:((o=t.description)==null?void 0:o.trim())||"Board change",mergeKey:((r=t.mergeKey)==null?void 0:r.trim())||null,timestampMs:t.timestampMs??Date.now(),estimatedBytes:Kp(e)}}function cl(e,t={}){const o=t.maxEntries??ud,r=t.maxBytes??md;let d=e.slice(Math.max(0,e.length-o)),p=d.reduce((m,y)=>m+y.estimatedBytes,0);for(;d.length>1&&p>r;){const[m,...y]=d;p-=(m==null?void 0:m.estimatedBytes)??0,d=y}return d}function Wa(e,t,o={}){const r=pd(t,o),d=o.mergeWindowMs??Yp,p=e.slice(),m=p.at(-1);return m&&r.mergeKey&&m.mergeKey===r.mergeKey&&r.timestampMs-m.timestampMs<d?(p[p.length-1]={...m,description:r.description,timestampMs:r.timestampMs,estimatedBytes:Math.max(m.estimatedBytes,r.estimatedBytes)},cl(p,o)):(p.push(r),cl(p,o))}function Xp(e,t,o={}){const r=pd(t,o),d=o.maxEntries??ud,p=o.maxBytes??md;let m=[r,...e].slice(0,d),y=m.reduce((c,x)=>c+x.estimatedBytes,0);for(;m.length>1&&y>p;){const c=m.at(-1);y-=(c==null?void 0:c.estimatedBytes)??0,m=m.slice(0,-1)}return m}function os(e,...t){const o=e==null?void 0:e.metadata;if(!o)return"";for(const r of t){const d=o[r];if(typeof d=="string"&&d.trim())return d.trim()}return""}function zn(e,t){return!!os(e,t)}function gd(e){if(!e||!e.trim())return!1;const t=e.trim();return/^(https?:|blob:|data:|file:)/i.test(t)}function hd(e){if(!e)return"";const t=os(e,"OriginalPath");if(t)return t;const o=String(e.body||"").trim();return gd(o)?"":o}function fd(e){return e?hd(e)||String(e.sourceFilePath||"").trim()||String(e.assetUrl||"").trim()||String(e.imageUrl||"").trim()||String(e.body||"").trim():""}function bd(e){return os(e,"ThumbnailUrl","thumbnailUrl")}function qp(e){if(!e||e.kind!=="image")return!1;if(zn(e,"ImageGenerationProvider")||zn(e,"GeneratedImageSourceWidth")||zn(e,"GeneratedImageSourceHeight")||zn(e,"CodexImageQuality")||zn(e,"ImageRouterRevisedPrompt"))return!0;const t=os(e,"RequestedMediaOperation");return["text2image","image2image","inpaint"].includes(t.toLowerCase())}function $r(e){if(!e)return"";if(e.kind==="image"||e.kind==="mask"){const t=qp(e)?hd(e):"",o=bd(e),r=String(e.body||"").trim();return t||o||String(e.imageUrl||"").trim()||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()||(gd(r)?r:"")}return fd(e)||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()}function yd(e){if(!e)return"";const t=fd(e)||e.title||e.kind;return String(t||"").replace(/\\/g,"/").replace(/\/+$/,"").split("/").filter(Boolean).pop()||e.title||e.kind}const Jp=2048,Zp=16e3,$s=1024,Fs=64,Qp=2048,Us=3,eg=16,tg=256,ag=new Set(["text","note","memo","markdown","code","directory"]),ng=/[\p{L}\p{M}\p{N}]{2,}/gu,ul=4,og=8,ml=1.35;function sg(e){return ag.has(String(e||"").trim().toLowerCase())}function rg(e){const t=e.map(lg),o=new Map,r=new Map,d=new Map,p=new Map;for(const m of t){o.set(m.id,m);for(const y of m.tokens)zs(r,y,m.id);for(const y of m.prefixes)zs(d,y,m.id);for(const y of m.ngrams)zs(p,y,m.id)}return{documents:t,documentById:o,tokenIndex:r,prefixIndex:d,ngramIndex:p}}function ig(e,t,o={}){const r=Math.max(1,Math.trunc(Number(o.limit||30))),d=Ga(t),p=pl(e,0,0,o.viewport,0);if(!d)return{hits:[],profile:p};const m=Array.from(xd(d)),y=Array.from(Cd(m)),c=kd(d),x=Array.from(Sd(c)),v=new Map;for(const F of m)Ws(e.tokenIndex,F,v,8);for(const F of y)Ws(e.prefixIndex,F,v,F.length<=3?4:2);for(const F of x)Ws(e.ngramIndex,F,v,1.15);const L=mg(e,v,r),j=pg(o.allowedContentTypes),P=[];for(const F of L){const B=e.documentById.get(F);if(!B||j&&!j.has(B.contentType))continue;const X=cg(B,d,m,x);if(X<=0)continue;const ee=ug(B,o.viewport??null);P.push({nodeId:B.id,score:X+ee,textScore:X,viewportBoost:ee})}P.sort((F,B)=>B.score-F.score||F.nodeId.localeCompare(B.nodeId));const V=P.slice(0,r);return{hits:V,profile:pl(e,L.length,V.length,o.viewport,V.filter(F=>F.viewportBoost>0).length)}}function Ga(e){const t=String(e??"");if(!t.trim())return"";let o=t;try{o=t.normalize("NFKC")}catch{o=t}o=o.toLowerCase();let r="",d=!1;for(const p of o){if(/\s/u.test(p)){d||(r+=" ",d=!0);continue}gg(p)||(r+=p,d=!1)}return r.trim()}function xd(e){return new Set(e.match(ng)??[])}function Cd(e){const t=new Set;for(const o of e){if(!o.trim())continue;const r=Math.min(8,o.length);for(let d=2;d<=r;d+=1)t.add(o.slice(0,d))}return t}function Sd(e){const t=new Set;if(!e.trim())return t;if(e.length<=Us)return t.add(e),t;for(let o=0;o<=e.length-Us;o+=1)t.add(e.slice(o,o+Us));return t}function lg(e){const t=String(e.kind??"").trim().toLowerCase(),o=ba(e.prompt??e.title,Jp),r=sg(t)?ba(e.response??e.body,Zp):"",d=dg(e.metadata,e.tags,e.metadataText),p=ba(e.sourceFilePath||e.assetUrl,Qp),m=Ga(o),y=Ga(r),c=Ga(d),x=Ga(p),v=Ga(t),L=[m,c,x,y,v].filter(Boolean).join(" "),j=xd(L);return{id:String(e.id),contentType:t,normalizedPrompt:m,normalizedResponse:y,normalizedMetadata:c,normalizedSourcePath:x,normalizedContentType:v,tokens:j,prefixes:Cd(j),ngrams:Sd(kd(L)),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 dg(e,t,o){const r=[];let d=0;if(e)for(const[p,m]of Object.entries(e)){if(d>=Fs)break;!String(p??"").trim()&&!String(m??"").trim()||(r.push(ba(p,128)),String(m??"").trim()&&r.push(ba(m,$s)),d+=1)}return d<Fs&&(t!=null&&t.length)&&(r.push("tags",ba(t.join(" "),$s)),d+=1),d<Fs&&(o!=null&&o.trim())&&r.push("metadata",ba(o,$s)),r.join(" ")}function cg(e,t,o,r){let d=0;e.normalizedPrompt===t?d+=120:Wn(e.normalizedPrompt,t)&&(d+=54),Wn(e.normalizedMetadata,t)&&(d+=26),Wn(e.normalizedSourcePath,t)&&(d+=18),Wn(e.normalizedResponse,t)&&(d+=14),Wn(e.normalizedContentType,t)&&(d+=8);for(const p of o)e.tokens.has(p)&&(d+=7),e.normalizedPrompt.startsWith(p)&&(d+=10);for(const p of r)e.ngrams.has(p)&&(d+=.85);return d}function ug(e,t){if(!t)return 0;const o=e.x+Math.max(1,e.width)/2,r=e.y+Math.max(1,e.height)/2,d=Math.abs(o-t.centerX)/Math.max(1,t.halfWidth),p=Math.abs(r-t.centerY)/Math.max(1,t.halfHeight),m=Math.sqrt(d*d+p*p);if(m<=1)return ul+(1-m)*og;if(m<=ml){const y=1-(m-1)/Math.max(.001,ml-1);return Math.max(0,y)*(ul*.75)}return 0}function mg(e,t,o){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(o*eg,tg)).map(([r])=>r)}function pg(e){if(!e)return null;const t=new Set(Array.from(e,o=>String(o||"").trim().toLowerCase()).filter(Boolean));return t.size>0?t:null}function pl(e,t,o,r,d){return{documentCount:e.documents.length,candidateCount:t,rankedCount:o,viewportBoosted:!!r,boostedCount:d,indexedTokenCount:e.tokenIndex.size,indexedPrefixCount:e.prefixIndex.size,indexedNGramCount:e.ngramIndex.size}}function zs(e,t,o){const r=e.get(t);if(r){r.add(o);return}e.set(t,new Set([o]))}function Ws(e,t,o,r){const d=e.get(t);if(d)for(const p of d)o.set(p,(o.get(p)??0)+r)}function kd(e){let t="";for(const o of e)/\s/u.test(o)||(t+=o);return t}function ba(e,t){const o=String(e??"");return o.length<=t?o:o.slice(0,t)}function Wn(e,t){return!!(e&&t&&e.includes(t))}function gg(e){const t=e.codePointAt(0)??0;return t<=31||t>=127&&t<=159}const hg=2147483647,fg="LocalBridge access is enabled, but the bridge is not reachable. Restart LocalBridge, allow Chrome local-network access, then reload MindCanvas.",bg="Local storage is unavailable in the hosted app until browser local storage or LocalBridge access is available.",yg="Local storage is unavailable. Check the browser-local storage state or LocalBridge connection.",xg="Cloud projects are unavailable until Supabase and Cloudflare R2 are configured.",Cg="Login is required before cloud projects can be used.",Sg="Cloud projects are unavailable.";function kg(e){return e.bridgeProviderConfigured||e.browserProviderConfigured||e.embeddedProviderConfigured}function br(e,t=!0){const o={isAvailable:!1,bridgeReachable:!1,browserLocalAvailable:!1,embeddedLocalAvailable:!1,providerKind:"none",canBrowseWorkspace:!1};return e.bridgeProviderConfigured&&e.bridgeReachable?{...o,isAvailable:!0,bridgeReachable:!0,providerKind:"bridge",canBrowseWorkspace:!0}:e.hostedWebApp&&e.hostedLocalBridgeAccessEnabled&&e.bridgeProviderConfigured?{...o,providerKind:"bridge"}:e.browserProviderConfigured&&(e.browserLocalAvailable||t&&e.browserLocalAvailableWhenEmpty===!0)?{...o,isAvailable:!0,browserLocalAvailable:!0,providerKind:"browser"}:e.embeddedProviderConfigured&&e.supportsEmbeddedLocal?{...o,isAvailable:!0,embeddedLocalAvailable:!0,providerKind:"embedded"}:o}function wg(e){return br(e,!1).isAvailable?"local":Fr(e)?"cloud":br(e,!0).isAvailable?"local":e.cloudConfigured?"cloud":"local"}function Fr(e){return e.cloudConfigured&&e.cloudSessionAvailable}function vg(e,t){return t.providerKind==="bridge"&&!t.bridgeReachable?fg:e.hostedWebApp?bg:yg}function jg(e){return e.cloudConfigured?Fr(e)?Sg:Cg:xg}function Ig(e){var v,L,j;const t=Fr(e),o=br(e,!0),r=kg(e),d=e.cloudConfigured,p=o.isAvailable,m=t;let y=e.storedMode??wg(e);y==="cloud"&&(!d||!m&&p)?y=p?"local":"cloud":y==="local"&&(!r&&d||!p&&m)&&(y="cloud");const c=e.cloudAccess,x=((v=c==null?void 0:c.denialReason)==null?void 0:v.trim())||void 0;return{currentMode:y,showLocalTab:r,showCloudTab:d,isLocalAvailable:o.isAvailable,isCloudAvailable:t,requiresCloudSignIn:e.cloudConfigured&&!t,canUseLocalProjects:p,canBrowseLocalWorkspace:o.canBrowseWorkspace,localProviderKind:o.providerKind,canUseCloudProjects:m,canSyncLocalToCloud:p&&m,cloudPlanKey:((L=c==null?void 0:c.planKey)==null?void 0:L.trim())||"free",cloudEntitlementStatus:((j=c==null?void 0:c.entitlementStatus)==null?void 0:j.trim())||(c?"active":"inactive"),currentCloudBoardCount:(c==null?void 0:c.currentBoardCount)??0,cloudBoardLimit:(c==null?void 0:c.cloudBoardLimit)??hg,lockedCloudBoardCount:(c==null?void 0:c.lockedBoardCount)??0,canCreateCloudBoards:(c==null?void 0:c.canCreateBoard)??m,canUseManagedAi:(c==null?void 0:c.canUseManagedAi)??!1,canGenerateImage:(c==null?void 0:c.canGenerateImage)??!1,canUseContextPack:(c==null?void 0:c.canUseContextPack)??!1,cloudLimitMessage:x,localStatusMessage:o.isAvailable?void 0:vg(e,o),cloudStatusMessage:m?void 0:jg(e)}}function Ng(){const e=new Error("Queued operation was cancelled before it started.");return e.name="AbortError",e}class Ag{constructor(){_i(this,"tails",new Map)}isBusy(t){return this.tails.has(t)}enqueue(t,o,r){if(typeof o!="function")throw new TypeError("KeyedAsyncQueue operation is required.");const d=this.tails.get(t)??Promise.resolve();let p;return p=(async()=>{try{try{await d}catch{}if(r!=null&&r.aborted)throw Ng();return await o(r)}finally{this.tails.get(t)===p&&this.tails.delete(t)}})(),this.tails.set(t,p),p}clear(t){if(typeof t>"u"){this.tails.clear();return}this.tails.delete(t)}}const yr="mindexec-local-mode-warning-dismissed-v1";function Mg(){try{return window.localStorage.getItem(yr)==="true"}catch{return!1}}function wd(e,t){var o,r;if(e==="checking")return"Checking bridge";if(e==="connected"){const d=(r=(o=t==null?void 0:t.exec)==null?void 0:o.model)==null?void 0:r.trim();return d?`Bridge / ${d}`:"Bridge connected"}return e==="blocked"?"Bridge gated":e==="unavailable"?"Bridge unavailable":"Bridge idle"}function Rg(e,t,o){var d,p,m,y,c;if(e!=="connected")return t||wd(e,o);const r=[o!=null&&o.version?`version ${o.version}`:null,(d=o==null?void 0:o.exec)!=null&&d.model?`model ${o.exec.model}`:null,(p=o==null?void 0:o.exec)!=null&&p.reasoningEffort?`reasoning ${o.exec.reasoningEffort}`:null,(m=o==null?void 0:o.exec)!=null&&m.serviceTier?`tier ${o.exec.serviceTier}`:null,(y=o==null?void 0:o.exec)!=null&&y.preferredProviderKind?`codex ${o.exec.preferredProviderKind}`:null,(c=o==null?void 0:o.project)!=null&&c.isOpen?"project open":null].filter(Boolean);return r.length>0?`LocalBridge connected. ${r.join(" / ")}`:"LocalBridge connected."}function Tg({state:e,message:t,status:o,hostedBridgeAccessEnabled:r,onRefresh:d,onEnableHostedBridge:p}){const m=g.useMemo(()=>e==="checking"?n.jsx(Lt,{size:14,className:"spin-icon"}):e==="connected"?n.jsx(cm,{size:14}):e==="blocked"?n.jsx(Jl,{size:14}):e==="unavailable"?n.jsx(um,{size:14}):n.jsx(Rr,{size:14}),[e]);return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--${e}`,title:Rg(e,t,o),"data-testid":"bridge-status-pill","data-bridge-state":e,"data-bridge-access":r?"enabled":"gated",children:[n.jsx("span",{className:"runtime-status-pill__icon","aria-hidden":"true",children:m}),n.jsx("span",{children:wd(e,o)}),e==="blocked"&&!r&&n.jsx("button",{type:"button",className:"runtime-status-pill__action",onClick:p,children:"Enable"}),n.jsx("button",{type:"button",className:"runtime-status-pill__button",title:"Refresh LocalBridge","data-testid":"bridge-status-refresh",onClick:()=>void d(),disabled:e==="checking",children:n.jsx(qa,{size:13})})]})}function Lg({status:e,message:t}){const r={ready:{icon:n.jsx(sr,{size:14}),label:"Saved locally",title:"Board state is saved in this browser."},syncing:{icon:n.jsx(Lt,{size:14,className:"spin-icon"}),label:"Saving",title:"Saving board state to this browser."},error:{icon:n.jsx(Tr,{size:14}),label:"Save error",title:"Board state could not be saved locally."},offline:{icon:n.jsx(Rr,{size:14}),label:"Offline",title:"No sync adapter is connected."}}[e];return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--sync-${e}`,title:t||r.title,"data-testid":"sync-status-indicator","data-sync-status":e,children:[n.jsx("span",{className:"runtime-status-pill__icon","aria-hidden":"true",children:r.icon}),n.jsx("span",{children:r.label})]})}function Eg({visible:e}){const[t,o]=g.useState(Mg);if(!e||t)return null;const r=()=>{o(!0);try{window.localStorage.setItem(yr,"true")}catch{}f.emit("runtimeStatus.localMode.dismissed")};return n.jsxs("section",{className:"runtime-local-warning",role:"status","data-testid":"local-mode-warning","data-local-mode-dismissed-key":yr,children:[n.jsx("div",{className:"runtime-local-warning__icon","aria-hidden":"true",children:n.jsx(Tr,{size:16})}),n.jsxs("div",{className:"runtime-local-warning__copy",children:[n.jsx("strong",{children:"Local Mode"}),n.jsx("span",{children:"Boards are saved in this browser. LocalBridge export creates a file-backed copy."})]}),n.jsx("button",{type:"button",title:"Dismiss local mode warning","data-testid":"local-mode-dismiss",onClick:r,children:n.jsx(pt,{size:14})})]})}function Pg({bridgeState:e,bridgeMessage:t,bridgeStatus:o,syncStatus:r,syncMessage:d,hostedBridgeAccessEnabled:p,onRefreshBridge:m,onEnableHostedBridge:y,showLocalModeWarning:c=!0}){return n.jsxs("aside",{className:"runtime-status-cluster","aria-label":"Runtime status","data-testid":"runtime-status-cluster","data-local-mode-visible":c?"true":"false",children:[n.jsxs("div",{className:"runtime-status-row",children:[n.jsx(Tg,{state:e,message:t,status:o,hostedBridgeAccessEnabled:p,onRefresh:m,onEnableHostedBridge:y}),n.jsx(Lg,{status:r,message:d})]}),n.jsx(Eg,{visible:c})]})}const _g=/^data:image\//i;function Dg(e){const t=String(e||"").trim();if(!t)return{src:null,reason:"empty",urlKind:"empty"};const o=t.toLowerCase();return _g.test(t)?{src:t,reason:null,urlKind:"data"}:o.startsWith("blob:")?{src:t,reason:null,urlKind:"blob"}:o.startsWith("https://")?{src:t,reason:null,urlKind:"https"}:o.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 Hs({src:e,alt:t="",className:o="",testId:r="secure-image",traceId:d,kind:p="image",title:m}){const y=g.useMemo(()=>Dg(e),[e]),[c,x]=g.useState(y.src?"loading":"blocked");g.useEffect(()=>{const P=y.src?"loading":"blocked";x(P),y.src||f.emit("secureImage.blocked",{id:d,kind:p,reason:y.reason,urlKind:y.urlKind})},[p,y.reason,y.src,y.urlKind,d]);const v=()=>{x("loaded"),f.emit("secureImage.loaded",{id:d,kind:p,urlKind:y.urlKind})},L=()=>{x("error"),f.emit("secureImage.error",{id:d,kind:p,urlKind:y.urlKind})},j=c==="blocked"?`Image blocked: ${y.reason||"unsupported source"}`:"Image failed to load";return n.jsxs("div",{className:`secure-image secure-image--${c} ${o}`.trim(),"data-testid":r,"data-secure-image-state":c,"data-secure-image-kind":p,title:c==="loaded"?m:j,children:[y.src&&n.jsx("img",{src:y.src,alt:t,loading:"lazy",decoding:"async",draggable:!1,onLoad:v,onError:L}),c==="loading"&&n.jsx("span",{className:"secure-image__loading","aria-hidden":"true",children:n.jsx("span",{})}),(c==="blocked"||c==="error")&&n.jsx("span",{className:"secure-image__fallback",role:"img","aria-label":j,children:c==="blocked"?n.jsx(mm,{size:18}):n.jsx(Tr,{size:18})})]})}const Bg={note:ir,text:gt,"ai-task":eo,image:to,mask:to,video:ao,embed:Za,code:Ja,markdown:gt,"csv-table":gt,memo:ir,pdf:gt,file:Zl,directory:pm,"template-launcher":gt,"remote-monitor":rr,"remote-control":rr},Vs=[{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."}],gl=500,Og=48,$g=new Set(["mindcanvasagent","agentcommand"]),Fg=new Set(["codenote","code-note"]),Ug=["multidesktopmonitor","remotehubmonitor","remotefleetmonitor","smartviewmonitor"],zg=["remotedevice","remotefleetdevice","remotecontrol"];function Wg(e){const t=Qa(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=Qa(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=Qa(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-monitor"||t==="remotefleetmonitor"||o==="fleet-monitor"||r==="remote-fleet@1"||jd(e,["RemoteFleetViewMode","RemoteFleetHubStatus","RemoteFleetDevicesJson","RemoteFleetDeviceCount","RemoteFleetConnectedDeviceCount","RemoteFleetProjectionMode","RemoteFleetCanvasPagination","RemoteHub","RemoteRoute","RemotePage","RemoteVisibleBudget"])||vd(e,Ug,["remote","monitor"])}function Hg(e){const t=Qa(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=Qa(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=Qa(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-control"||t==="remotefleetdevice"||o==="fleet-device"||r==="remote-fleet-device@1"||jd(e,["RemoteFleetDeviceId","RemoteFleetDeviceName","RemoteFleetDevicePlatform","RemoteFleetDeviceConnected","RemoteFleetDeviceCanControl","RemoteFleetSourceMonitorNodeId"])||vd(e,zg,["remote","control"])}function vd(e,t,o){const r=(e.tags??[]).map(y=>y.trim().toLowerCase()).filter(Boolean),d=o.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 Qa(e,...t){const o=e.metadata??{};for(const d of t){const p=o[d];if(p!=null)return String(p)}const r=new Set(t.map(d=>d.toLowerCase()));for(const[d,p]of Object.entries(o))if(r.has(d.toLowerCase())&&p!==void 0&&p!==null)return String(p);return""}function jd(e,t){const o=e.metadata??{},r=new Set(t.map(d=>d.toLowerCase()));return Object.entries(o).some(([d,p])=>r.has(d.toLowerCase())&&p!==void 0&&p!==null&&String(p).trim()!=="")}const xr=[{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"}],Vg=g.memo(function({node:t,selected:o,pulsing:r,connectionDraft:d,onSelect:p,onDragStart:m,onResizeStart:y,onPatch:c,onDelete:x,onDuplicate:v,onRun:L,onPin:j,onOpenResult:P,onToggleAiReference:V,onCopyNode:F,onCopyEmbedReference:B,onFitNodeHeight:X,onToggleNodeExpanded:ee,onToggleWordWrap:me,onStageCompany:be,onOpenCompanyGraph:Se,onSyncCompanyGoal:pe,onRefreshCompany:Ve,onSetCompanyStatus:tt,onRemoveCompany:at,onOpenAsset:ce,onOpenDirectorySettings:G,onScanDirectory:oe,onCreateRemoteControl:J,onGenerateTemplateCard:ft}){var aa,Aa,Ft,Ma,Z,ze,Ra,fn,N,Y,ae,bn,At,Ta,La,yn,xn,Ea,Cn,na,Sn,Pa,oa,Ut,Pe,Te,_a,kn,wn,sa,ra,Da,zt,Ba,dt;const O=String(((aa=t.metadata)==null?void 0:aa.AutomationNodeKind)||((Aa=t.metadata)==null?void 0:Aa.AutomationTemplateKey)||((Ft=t.metadata)==null?void 0:Ft.AutomationInferredKind)||"").trim().toLowerCase(),nt=String(((Ma=t.metadata)==null?void 0:Ma.SemanticType)||((Z=t.metadata)==null?void 0:Z.semanticType)||"").trim().toLowerCase(),U=t.kind==="memo"&&$g.has(nt),te=t.kind==="memo"&&Fg.has(nt),Ca=String(((ze=t.metadata)==null?void 0:ze.AgentCommandStatus)||"Draft"),fe=String(((Ra=t.metadata)==null?void 0:Ra.AgentCommandMode)||"Task"),ot=String(((fn=t.metadata)==null?void 0:fn.AgentCommandRequestedRole)||"Researcher"),St=String(((N=t.metadata)==null?void 0:N.CodeNoteStatus)||"Draft"),qt=String(((Y=t.metadata)==null?void 0:Y.CodeNoteSyncState)||"Unlinked"),Jt=String(((ae=t.metadata)==null?void 0:ae.CodeNoteKind)||"Feature"),so=U?eo:te?Ja:O==="image-generate"?to:O==="video-generate"?ao:Bg[t.kind],Oe=d&&d.from!==t.id,ro=t.kind==="ai-task",Et=t.kind==="pdf"||t.kind==="file"||t.kind==="directory",bt=Wg(t),xe=Hg(t),Q=bt||xe,ss=bt?"monitor":xe?"control":"",Ae=t.kind==="template-launcher"||String(((bn=t.metadata)==null?void 0:bn.semanticType)||((At=t.metadata)==null?void 0:At.SemanticType)||"").toLowerCase()==="templatelauncher",qe=t.kind==="video",re=t.kind==="embed",Me=t.kind==="mask",$e=t.kind==="memo",io=t.kind==="markdown",ge=t.kind==="csv-table",De=$e?eh(t):null,Pt=g.useRef(null),kt=qe?Id(t):"",we=qe?ah(t):"",st=re?nh(t):"",Be=re?oh(t):"",lo=re?sh(t,st):"",Sa=re?rh(t):"",ve=(((Ta=t.imageStack)==null?void 0:Ta.variants)??[]).filter(b=>!!b.imageUrl),Fe=ve.find(b=>{var T;return b.variantId===((T=t.imageStack)==null?void 0:T.activeVariantId)})??ve[0]??null,_t=t.kind==="image"||Me?(Fe==null?void 0:Fe.imageUrl)||$r(t):"",co=Fe?ve.findIndex(b=>b.variantId===Fe.variantId):-1,ka=!_t&&!Et&&!Q&&!Ae&&!qe&&!re,uo=ka&&!$e,Ye=t.isExpanded===!1&&Number(t.originalHeight??0)>t.height+1,Ue=!Q&&!["image","mask","video","embed","pdf","file","directory","template-launcher","remote-monitor","remote-control"].includes(t.kind),Le=t.aiEnabled!==!1,wa=th(t),mo=!!(t.isChunkedText||((La=t.metadata)==null?void 0:La.IsChunkedText)==="true"),he=Number(t.totalLineCount??((yn=t.metadata)==null?void 0:yn.TotalLineCount)??0),va=t.sourceFilePath||((xn=t.metadata)==null?void 0:xn.FileName)||t.title,po=mo?n.jsxs("div",{className:"node-chunked-text-state","data-testid":"node-chunked-text-state",title:va,children:[n.jsx(gt,{size:12}),n.jsx("strong",{children:"Chunked text"}),Number.isFinite(he)&&he>0&&n.jsxs("span",{children:[he.toLocaleString()," lines"]})]}):null,an=t.kind==="directory"?(Ea=t.metadata)==null?void 0:Ea.Include:null,Re=t.kind==="directory"?(Cn=t.metadata)==null?void 0:Cn.Exclude:null,yt=t.kind==="directory"?(na=t.metadata)==null?void 0:na.DirectoryFileCount:null,Dt=t.kind==="directory"?(Sn=t.metadata)==null?void 0:Sn.DirectoryDirCount:null,ja=t.kind==="directory"?(Pa=t.metadata)==null?void 0:Pa.DirectoryLastScanUtc:null,[go,Ee]=g.useState(!1),[nn,on]=g.useState(null),[sn,Ia]=g.useState(((oa=t.metadata)==null?void 0:oa.CompanyExecutionMode)||"Auto"),[wt,rn]=g.useState(((Ut=t.metadata)==null?void 0:Ut.CompanySubAgents)!=="false"),[ln,Bt]=g.useState(!1),[Ge,dn]=g.useState(null),Zt=g.useMemo(()=>ge?Xg(t.body,Ge):null,[Ge,ge,t.body]),se=g.useMemo(()=>Ae?Gl(t.body):null,[Ae,t.body]),Je=(se==null?void 0:se.options.find(b=>b.id===se.selectedOptionId))??(se==null?void 0:se.options[0])??null,rt=Eu(se),vt=Vs.find(b=>b.key===sn)||Vs[0],jt=String(((Pe=t.metadata)==null?void 0:Pe.CompanyStatus)||(t.companyMode?"Staged":"")).trim(),xt=jt.toLowerCase(),rs=xt==="paused",cn=xt==="archived",ho=b=>{b.stopPropagation();const T=b.currentTarget.getBoundingClientRect();on(Gg(T)),Ee(ie=>!ie)},un=b=>{b.stopPropagation(),be(t.id,{executionMode:vt.key,enableSubAgents:wt}),Ee(!1)},Qt=b=>{b.stopPropagation(),Se(t.id)},mn=(b,T)=>{T.stopPropagation();const ie=ve.find(je=>je.variantId===b);!ie||!t.imageStack||ie.variantId===t.imageStack.activeVariantId||(f.emit("node.imageStack.variant",{nodeId:t.id,variantId:ie.variantId,variantCount:ve.length}),c(t.id,{imageUrl:ie.imageUrl,imageStack:{...t.imageStack,activeVariantId:ie.variantId,variants:ve,updatedAtUtc:new Date().toISOString()},metadata:{...t.metadata??{},ImageStackActiveVariantId:ie.variantId}}))},It=(b,T)=>{if(T.stopPropagation(),!!$e){if((De==null?void 0:De.key)===b){Bt(!1);return}f.emit("node.memoColor.changed",{id:t.id,colorKey:b}),c(t.id,{metadata:{...t.metadata??{},memoColor:b,memoColorIsCustom:"true"}}),Bt(!1)}},fo=b=>{var Ht,la;if(b.stopPropagation(),!U)return;const T=(t.body||t.title||"Agent command objective").trim(),ie=["Clarify the objective and constraints.","Collect linked canvas context or code notes.","Draft an execution plan before external adapter use."],je=["canvas-context","agent-command-planning","adapter-gated-execution"],Wt=["Canvas.ListAgentCommands","Canvas.UpdateAgentCommand","Canvas.PlanAgentCommand","Canvas.SetAgentCommandState"],ct=["MindCanvasAgent",fe,ot],ia=["Local React plan staged for this Agent Command.",`Role: ${ot}`,`Mode: ${fe}`,`Objective: ${T.slice(0,220)}`,"External execution remains adapter-gated until LocalBridge/agent runtime is available."].join(`
2
- `);f.emit("mindcanvas.agentCommand.planned",{id:t.id,mode:fe,requestedRole:ot,adapterState:((Ht=t.metadata)==null?void 0:Ht.AdapterState)??"adapter-gated"}),c(t.id,{tags:["Agent Command",ot,"Planned"],metadata:{...t.metadata??{},AgentCommandStatus:"Planned",AgentCommandPlannerSummary:ia,AgentCommandPlanSteps:JSON.stringify(ie),AgentCommandPlannedSkills:JSON.stringify(je),AgentCommandPlannedTools:JSON.stringify(Wt),AgentCommandPlannedConcepts:JSON.stringify(ct),AgentCommandLastExplorationPhase:"planned-local",AdapterState:((la=t.metadata)==null?void 0:la.AdapterState)??"adapter-gated"}})},ea=b=>{var Wt,ct;if(b.stopPropagation(),!U)return;const T=new Date().toISOString(),ie=[`Agent Command: ${t.title||"Agent"}`,`Status: Completed locally at ${T}`,"","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(`
3
- `),je=[`${T} Local React execution staged.`,`${T} Adapter gated; no external tools invoked.`];f.emit("mindcanvas.agentCommand.executed.local",{id:t.id,mode:fe,requestedRole:ot,adapterState:((Wt=t.metadata)==null?void 0:Wt.AdapterState)??"adapter-gated"}),c(t.id,{status:"done",result:ie,tags:["Agent Command",ot,"Completed"],metadata:{...t.metadata??{},AgentCommandStatus:"Completed",AgentCommandLastExecutedAtUtc:T,AgentCommandConsoleLogs:JSON.stringify(je),AgentCommandResultLinks:JSON.stringify([]),AdapterState:((ct=t.metadata)==null?void 0:ct.AdapterState)??"adapter-gated"}})},Ct=(b,T,ie,je)=>{var ct,ia,Ht;if(b.stopPropagation(),!te)return;const Wt=T==="Implemented"?JSON.stringify([`local-code-note://${t.id}/implementation-handoff.md`]):((ct=t.metadata)==null?void 0:ct.CodeNoteOutputArtifacts)||"[]";f.emit("mindcanvas.codeNote.state",{id:t.id,status:T,syncState:ie,reason:je,adapterState:((ia=t.metadata)==null?void 0:ia.AdapterState)??"local-canvas-only"}),c(t.id,{tags:["Code Note",T,ie],metadata:{...t.metadata??{},CodeNoteStatus:T,CodeNoteSyncState:ie,CodeNoteOutputArtifacts:Wt,...T==="Implemented"||T==="Reviewed"?{CodeNoteLastAppliedAtUtc:new Date().toISOString()}:{},AdapterState:((Ht=t.metadata)==null?void 0:Ht.AdapterState)??"local-canvas-only"}})},bo=()=>{rn(b=>!b)},Ze=async b=>{if(b.stopPropagation(),!we||!Pt.current){f.emit("node.video.unavailable",{id:t.id,reason:we?"element-missing":"source-missing"});return}try{await Pt.current.play(),f.emit("node.video.play",{id:t.id,sourceKind:fl(we)})}catch(T){f.emit("node.video.unavailable",{id:t.id,reason:T instanceof Error?T.message:String(T)})}},pn=b=>{if(b.stopPropagation(),!we||!Pt.current){f.emit("node.video.unavailable",{id:t.id,reason:we?"element-missing":"source-missing"});return}Pt.current.pause(),f.emit("node.video.pause",{id:t.id,sourceKind:fl(we)})},Nt=b=>{b.stopPropagation(),st&&B(t.id,st)},ta=b=>{c(t.id,{body:JSON.stringify(b),metadata:{...t.metadata??{},templateLauncherSelectedOptionId:b.selectedOptionId??""}})},gn=(b,T)=>{if(T.stopPropagation(),!se)return;const ie=Du(se,b);ta(ie),f.emit("templateCard.option.select",{nodeId:t.id,optionId:ie.selectedOptionId??null})},it=(b,T)=>{if(!se)return;const ie=Bu(se,b,T);ta(ie),f.emit("templateCard.input.patch",{nodeId:t.id,key:b})},Na=b=>{b.stopPropagation(),!(!se||rt)&&ft(t.id,se.selectedOptionId??null,se.inputValues)},Ot=Ue&&go?n.jsxs("div",{className:"node-company-launcher","data-testid":"node-company-launcher",style:nn?{left:nn.left,top:nn.top}:void 0,onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:[n.jsx("div",{className:"node-company-launcher__eyebrow",children:"Run As Company"}),n.jsx("h4",{children:"Turn this note into a background AI company"}),n.jsx("p",{children:"Pick the operating mode to stage on this node. External CompanyCore execution stays adapter-gated."}),n.jsx("div",{className:"node-company-mode-list",children:Vs.map(b=>n.jsxs("button",{type:"button",className:b.key===vt.key?"is-selected":"","data-company-mode":b.key,onClick:()=>Ia(b.key),children:[n.jsx("strong",{children:b.label}),n.jsx("span",{children:b.description})]},b.key))}),n.jsxs("button",{type:"button",className:"node-company-subagents","aria-pressed":wt,onClick:b=>{b.stopPropagation(),bo()},children:[n.jsx("span",{className:"node-company-toggle-indicator","aria-hidden":"true",children:wt?"On":"Off"}),n.jsxs("span",{children:[n.jsx(Ql,{size:13}),"Enable sub-agents for exploration waves and specialist handoff"]})]}),n.jsxs("div",{className:"node-company-launcher__actions",children:[n.jsx("button",{type:"button",className:"btn btn-ghost",onClick:()=>Ee(!1),children:"Cancel"}),n.jsx("button",{type:"button",className:"btn btn-primary","data-testid":"node-company-run-confirm",onClick:un,children:"Stage Company"})]})]}):null,Ce={width:t.width,height:t.height,transform:`translate3d(${t.x}px, ${t.y}px, 0)`,...De?{"--memo-bg":De.surface,"--memo-border":De.border,"--memo-ink":De.ink,"--memo-ring":De.ring,"--memo-accent":De.swatch}:{}},hn=n.jsxs(n.Fragment,{children:[uo&&n.jsx("button",{type:"button",title:Le?"Disable AI reference":"Enable AI reference","aria-label":Le?"Disable AI reference":"Enable AI reference",className:Le?"is-active-ai":"is-inactive-ai",onPointerDown:b=>b.stopPropagation(),onClick:()=>V(t.id),children:n.jsx(gm,{size:13})}),$e&&n.jsx("button",{type:"button",title:"Change memo color","aria-label":"Change memo color","aria-pressed":ln,className:"is-memo-color-action","data-testid":"node-memo-color-open",onPointerDown:b=>b.stopPropagation(),onClick:b=>{b.stopPropagation(),Bt(T=>!T)},children:n.jsx(ed,{size:13})}),t.kind==="code"&&n.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:b=>b.stopPropagation(),onClick:()=>me(t.id),children:n.jsx(hm,{size:13})}),n.jsx("button",{type:"button",title:_t?"Copy image to clipboard":"Copy content","aria-label":_t?"Copy image to clipboard":"Copy content",onPointerDown:b=>b.stopPropagation(),onClick:()=>F(t.id),children:n.jsx(qn,{size:13})}),n.jsx("button",{type:"button",title:"Duplicate node","aria-label":"Duplicate node","data-testid":"node-duplicate",onPointerDown:b=>b.stopPropagation(),onClick:()=>v(t.id),children:n.jsx(td,{size:13})}),ka&&n.jsx("button",{type:"button",title:"Fit text height","aria-label":"Fit text height",onPointerDown:b=>b.stopPropagation(),onClick:()=>X(t.id),children:n.jsx(fm,{size:13})}),ka&&n.jsx("button",{type:"button",title:Ye?"Expand node":"Collapse node","aria-label":Ye?"Expand node":"Collapse node","aria-pressed":Ye,onPointerDown:b=>b.stopPropagation(),onClick:()=>ee(t.id),children:Ye?n.jsx(Xi,{size:13}):n.jsx(bm,{size:13})}),ro&&n.jsx("button",{type:"button",title:"Run node",onPointerDown:b=>b.stopPropagation(),onClick:()=>L(t.id),children:n.jsx(fa,{size:13})}),Ue&&n.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:b=>b.stopPropagation(),onClick:t.companyMode?Qt:ho,children:n.jsx(qi,{size:13})}),n.jsx("button",{type:"button",title:"Delete node","aria-label":"Delete node","data-testid":"node-delete",onPointerDown:b=>b.stopPropagation(),onClick:()=>x(t.id),children:n.jsx(Go,{size:13})})]}),ue=ro?n.jsxs("div",{className:"node-result-row","data-testid":"node-external-pins",children:[n.jsxs("button",{className:`node-pin node-pin--context ${Oe?"can-receive":""}`,type:"button",title:"Context input",onPointerDown:b=>b.stopPropagation(),onClick:b=>{b.stopPropagation(),j(t.id,"context")},children:[n.jsx(Ji,{size:10}),"Context"]}),n.jsxs("button",{className:`node-pin node-pin--result ${t.result?"has-result":""}`,type:"button",title:"Drag to connect this result to an input pin. Click to view the result.","data-testid":"node-result-open",onPointerDown:b=>b.stopPropagation(),onClick:b=>{b.stopPropagation(),t.result?P(t.id):j(t.id,"result")},children:[n.jsx(Xi,{size:11}),"Result"]})]}):n.jsxs("button",{className:`node-context-source ${d?"can-receive":""}`,type:"button",title:"Use this node as AI Task context",onPointerDown:b=>b.stopPropagation(),onClick:b=>{b.stopPropagation(),j(t.id,"context")},children:[n.jsx(Ji,{size:10}),n.jsx("span",{children:"Context"})]}),yo=Me||ve.length>1||re||qe?n.jsxs("div",{className:"node-surface-badges","data-testid":"node-surface-badges",children:[Me&&n.jsx("span",{className:"node-mask-badge",title:"Image edit mask reference",children:"Mask"}),ve.length>1&&n.jsxs("span",{className:"node-image-stack-badge",title:"Image stack variants",children:[Math.max(1,co+1),"/",ve.length]}),re&&n.jsx("span",{className:"node-embed-badge",children:Be==="youtube"?"YouTube":"Embed"}),qe&&n.jsx("span",{className:"node-video-badge",children:((Te=t.metadata)==null?void 0:Te.MediaModel)||((_a=t.metadata)==null?void 0:_a.MediaProvider)||"Video"})]}):null,ls=ve.length>1||re||qe||Et?n.jsxs("div",{className:"node-surface-actions","data-testid":"node-surface-actions",children:[ve.length>1&&n.jsx("div",{className:"node-image-stack-rail","aria-label":"Image stack variants",children:ve.map((b,T)=>n.jsx("button",{type:"button",className:b.variantId===(Fe==null?void 0:Fe.variantId)?"is-active":"",title:b.title||b.caption||`Variant ${T+1}`,"aria-label":`Show image variant ${T+1}`,onPointerDown:ie=>ie.stopPropagation(),onClick:ie=>mn(b.variantId,ie),children:n.jsx(Hs,{src:b.imageUrl,traceId:`${t.id}:${b.variantId||T}`,kind:"image-stack-variant",testId:"node-image-stack-thumb"})},b.variantId||`${b.imageUrl}-${T}`))}),re&&n.jsxs("div",{className:"node-embed-actions",children:[n.jsxs("button",{type:"button",title:"Open embed","aria-label":"Open embed",onPointerDown:b=>b.stopPropagation(),onClick:b=>{b.stopPropagation(),st&&ce(t,"external")},children:[n.jsx(Za,{size:13}),n.jsx("span",{children:"Open"})]}),n.jsxs("button",{type:"button",title:"Copy URL","aria-label":"Copy URL",onPointerDown:b=>b.stopPropagation(),onClick:Nt,children:[n.jsx(qn,{size:13}),n.jsx("span",{children:"Copy URL"})]})]}),qe&&n.jsxs("div",{className:"node-video-actions",children:[n.jsxs("button",{type:"button",title:"Play video","aria-label":"Play video","data-testid":"node-video-play",onPointerDown:b=>b.stopPropagation(),onClick:Ze,children:[n.jsx(fa,{size:13}),n.jsx("span",{children:"Play"})]}),n.jsxs("button",{type:"button",title:"Pause video","aria-label":"Pause video","data-testid":"node-video-pause",onPointerDown:b=>b.stopPropagation(),onClick:pn,children:[n.jsx(Ko,{size:13}),n.jsx("span",{children:"Pause"})]})]}),Et&&n.jsxs("div",{className:"node-asset-actions",children:[t.kind==="pdf"&&n.jsxs("button",{type:"button",title:"Preview PDF","data-testid":"node-pdf-preview",onPointerDown:b=>b.stopPropagation(),onClick:()=>ce(t,"preview"),children:[n.jsx(ym,{size:13}),n.jsx("span",{children:"Preview"})]}),t.kind!=="directory"&&n.jsxs("button",{type:"button",title:"Open in new tab",onPointerDown:b=>b.stopPropagation(),onClick:()=>ce(t,"external"),children:[n.jsx(Za,{size:13}),n.jsx("span",{children:"Open"})]}),t.kind==="directory"&&n.jsxs("button",{type:"button",title:"Scan folder","data-testid":"directory-scan",onPointerDown:b=>b.stopPropagation(),onClick:()=>oe(t.id),children:[n.jsx(qa,{size:13}),n.jsx("span",{children:"Scan"})]}),t.kind==="directory"&&n.jsxs("button",{type:"button",title:"Folder scan settings","data-testid":"directory-settings-open",onPointerDown:b=>b.stopPropagation(),onClick:()=>G(t.id),children:[n.jsx(lr,{size:13}),n.jsx("span",{children:"Settings"})]})]})]}):null,lt=Q?null:n.jsxs("div",{className:"node-external-action-rail","data-testid":"node-external-action-rail",onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:[ls,n.jsx("div",{className:"node-external-rail__pins",children:ue}),n.jsx("div",{className:"node-actions","data-testid":"node-actions",children:hn}),U&&n.jsxs("div",{className:"node-agent-command-actions","data-testid":"node-agent-command-actions",onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:[n.jsx("button",{type:"button","data-testid":"node-agent-command-plan","data-agent-command-action":"plan",onClick:fo,children:"Plan"}),n.jsx("button",{type:"button","data-testid":"node-agent-command-execute","data-agent-command-action":"execute",disabled:Ca==="Running",onClick:ea,children:"Execute"})]}),te&&n.jsxs("div",{className:"node-code-note-actions","data-testid":"node-code-note-actions",onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:[n.jsx("button",{type:"button","data-testid":"node-code-note-approve","data-code-note-action":"approve",onClick:b=>Ct(b,"Approved","Planned","approve-local"),children:"Approve"}),n.jsx("button",{type:"button","data-testid":"node-code-note-review","data-code-note-action":"review",onClick:b=>Ct(b,"Reviewed","InSync","review-local"),children:"Review"}),n.jsx("button",{type:"button","data-testid":"node-code-note-out-of-sync","data-code-note-action":"out-of-sync",onClick:b=>Ct(b,St,"OutOfSync","mark-out-of-sync-local"),children:"Out of sync"})]}),t.companyMode&&n.jsxs("div",{className:"node-company-quick-actions","data-testid":"node-company-quick-actions","data-company-status":jt||"Staged",onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:[n.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:cn,onClick:()=>pe(t.id),children:n.jsx(ad,{size:12})}),n.jsx("button",{type:"button",title:"Refresh Company status","aria-label":"Refresh Company status","data-testid":"node-company-refresh",onClick:()=>Ve(t.id),children:n.jsx(qa,{size:12})}),cn?n.jsx("button",{type:"button",title:"Company is archived","aria-label":"Company is archived","data-testid":"node-company-archived",disabled:!0,children:n.jsx(dr,{size:12})}):rs?n.jsx("button",{type:"button",title:"Resume Company","aria-label":"Resume Company","data-testid":"node-company-resume",onClick:()=>tt(t.id,"Staged"),children:n.jsx(fa,{size:12})}):n.jsx("button",{type:"button",title:"Pause Company","aria-label":"Pause Company","data-testid":"node-company-pause",onClick:()=>tt(t.id,"Paused"),children:n.jsx(Ko,{size:12})}),!cn&&n.jsx("button",{type:"button",title:"Archive Company","aria-label":"Archive Company","data-testid":"node-company-archive",onClick:()=>tt(t.id,"Archived"),children:n.jsx(dr,{size:12})}),n.jsx("button",{type:"button",title:"Remove Company from this note","aria-label":"Remove Company from this note","data-testid":"node-company-remove",onClick:()=>at(t.id),children:n.jsx(pt,{size:12})})]})]}),$t=Q?null:n.jsx("div",{className:"node-external-rail","data-testid":"node-external-rail",onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:n.jsxs("div",{className:"node-external-rail__meta",children:[n.jsxs("div",{className:"node-tags","data-testid":"node-external-tags",children:[(t.tags??[t.kind]).slice(0,3).map(b=>n.jsx("span",{children:b},b)),t.status&&n.jsx("span",{className:`node-status node-status--${t.status}`,children:t.status})]}),yo,po,U&&n.jsxs("div",{className:"node-agent-command-state","data-testid":"node-agent-command-state","data-agent-command-status":Ca,"data-agent-command-mode":fe,"data-agent-command-role":ot,"data-agent-command-adapter-state":((kn=t.metadata)==null?void 0:kn.AdapterState)||"adapter-gated",children:[n.jsx(eo,{size:12}),n.jsx("strong",{children:"AC"}),n.jsx("span",{children:Ca}),n.jsx("span",{children:fe}),n.jsx("span",{children:ot})]}),te&&n.jsxs("div",{className:"node-code-note-state","data-testid":"node-code-note-state","data-code-note-status":St,"data-code-note-sync-state":qt,"data-code-note-kind":Jt,"data-code-note-adapter-state":((wn=t.metadata)==null?void 0:wn.AdapterState)||"local-canvas-only",children:[n.jsx(Ja,{size:12}),n.jsx("strong",{children:"CN"}),n.jsx("span",{children:St}),n.jsx("span",{children:qt}),n.jsx("span",{children:Jt})]}),t.companyMode&&n.jsxs("div",{className:"node-company-state","data-testid":"node-company-state",children:[n.jsx(qi,{size:12}),n.jsx("strong",{children:((sa=t.metadata)==null?void 0:sa.CompanyExecutionModeLabel)||"Company staged"}),n.jsx("span",{children:((ra=t.metadata)==null?void 0:ra.CompanySubAgents)==="false"?"single-agent":"sub-agents"})]})]})});return n.jsxs("article",{className:`canvas-node canvas-node--${t.kind} ${Q?"canvas-node--remote-surface":""} ${bt?"canvas-node--remote-monitor-surface":""} ${xe?"canvas-node--remote-control-surface":""} ${O?`canvas-node--automation-${O}`:""} ${U?"canvas-node--agent-command":""} ${te?"canvas-node--code-note":""} ${o?"is-selected":""} ${r?"is-pulsing":""} ${Le?"":"is-ai-disabled"} ${t.wordWrap===!1?"is-nowrap":""} ${Ye?"is-collapsed":""} ${t.companyMode?`is-company-${t.companyMode}`:""}`,style:Ce,"data-node-id":t.id,"data-automation-node-kind":O||void 0,"data-automation-external-policy":((Da=t.metadata)==null?void 0:Da.AutomationExternalActionPolicy)||void 0,"data-media-generation-contract":((zt=t.metadata)==null?void 0:zt.MediaGenerationContract)||void 0,"data-agent-command-node":U?"true":void 0,"data-agent-command-status":U?Ca:void 0,"data-agent-command-mode":U?fe:void 0,"data-agent-command-role":U?ot:void 0,"data-code-note-node":te?"true":void 0,"data-code-note-status":te?St:void 0,"data-code-note-sync-state":te?qt:void 0,"data-code-note-kind":te?Jt:void 0,"data-remote-surface-chrome":Q?"self-contained":void 0,"data-remote-surface-kind":ss||void 0,"data-remote-surface-title-owner":Q?"inner-remote-view":void 0,"data-remote-surface-scroll-owner":Q?"remote-page-rail":void 0,onPointerDown:b=>{p(t.id,b.shiftKey||b.metaKey||b.ctrlKey),m(t.id,b)},onDoubleClick:b=>{if(t.kind!=="directory")return;const T=b.target instanceof HTMLElement?b.target:null;T!=null&&T.closest('button,input,textarea,select,[contenteditable="true"],[contenteditable=""]')||(b.stopPropagation(),oe(t.id))},children:[!Q&&n.jsxs("div",{className:"node-header",children:[n.jsx("span",{className:"node-kind",children:n.jsx(so,{size:14})}),n.jsx("input",{value:t.title,"aria-label":"Node title",readOnly:Ae,onPointerDown:b=>b.stopPropagation(),onChange:b=>{Ae||c(t.id,{title:b.target.value})}})]}),Ot&&typeof document<"u"?vu.createPortal(Ot,document.body):Ot,$e&&ln&&De&&n.jsx("div",{className:"node-memo-palette","data-testid":"node-memo-palette",onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:xr.map(b=>n.jsx("button",{type:"button",className:b.key===De.key?"is-active":"",title:`${b.label} memo color`,"aria-label":`${b.label} memo color`,"aria-pressed":b.key===De.key,"data-memo-color":b.key,style:{"--memo-swatch":b.swatch,"--memo-swatch-ring":b.ring},onPointerDown:T=>T.stopPropagation(),onClick:T=>It(b.key,T)},b.key))}),_t?n.jsx("div",{className:`node-image-wrap ${ve.length>1?"node-image-wrap--stack":""} ${Me?"node-image-wrap--mask":""}`,"data-testid":Me?"node-mask-preview":ve.length>1?"node-image-stack":void 0,children:n.jsx(Hs,{src:_t,traceId:t.id,kind:Me?"mask":"node-image",testId:"node-secure-image"})}):bt?n.jsx(Pu,{node:t,onPatch:c,onCreateRemoteControl:J}):xe?n.jsx(_u,{node:t,onPatch:c}):Ae?n.jsx("div",{className:"node-template-card","data-testid":"node-template-card",children:se&&Je?n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"node-template-card__summary",children:[n.jsx("strong",{children:se.prompt||se.description}),n.jsx("span",{children:Je.description||se.description})]}),n.jsx("div",{className:"node-template-card__options","data-testid":"node-template-card-options",children:se.options.map(b=>n.jsxs("button",{type:"button",className:b.id===Je.id?"is-active":"","data-testid":"node-template-card-option","data-option-id":b.id,onPointerDown:T=>T.stopPropagation(),onClick:T=>gn(b.id,T),children:[n.jsx("strong",{children:b.label}),n.jsx("span",{children:b.description})]},b.id||b.templateId))}),n.jsxs("div",{className:"node-template-card__inputs","data-testid":"node-template-card-inputs",children:[Je.inputs.map(b=>n.jsx(Yg,{input:b,value:se.inputValues[b.key]??"",onChange:T=>it(b.key,T)},b.key)),Je.inputs.length===0&&n.jsx("p",{className:"node-template-card__empty",children:se.noInputsLabel||"No inputs needed."})]}),rt&&n.jsx("div",{className:"node-template-card__validation",children:rt}),n.jsxs("button",{type:"button",className:"node-template-card__generate","data-testid":"node-template-card-generate",disabled:!!rt,onPointerDown:Na,onClick:b=>b.stopPropagation(),children:[n.jsx(fa,{size:13}),n.jsx("span",{children:se.generateLabel||se.actionLabel||"Generate"})]})]}):n.jsx("div",{className:"node-template-card__missing",children:"Template card payload is unavailable."})}):re?n.jsxs("div",{className:`node-embed-card ${Sa?"has-embed-thumbnail":"is-embed-link"}`,"data-testid":"node-embed-card",children:[n.jsx("div",{className:"node-embed-preview",children:Sa?n.jsx(Hs,{src:Sa,traceId:t.id,kind:"embed-thumbnail",testId:"node-embed-thumbnail"}):n.jsxs("div",{className:"node-embed-placeholder",children:[n.jsx(Za,{size:24}),n.jsx("strong",{children:Be==="youtube"?"YouTube":"Web embed"}),n.jsx("span",{children:lo||st||"External link"})]})}),n.jsx("textarea",{value:t.body,"aria-label":"Embed URL or description",spellCheck:!1,onPointerDown:b=>b.stopPropagation(),onChange:b=>{const T=b.target.value;c(t.id,{body:T,assetUrl:T,metadata:{...t.metadata??{},sourceUrl:T,url:T}})}}),st&&n.jsx("span",{className:"node-embed-source",title:st,children:st})]}):qe?n.jsxs("div",{className:`node-video-card ${we?"has-video-source":"is-video-prompt"}`,"data-testid":"node-video-card",children:[we?n.jsx("video",{ref:Pt,src:we,className:"node-video-player","data-testid":"node-video-player",controls:!0,preload:"metadata",onPointerDown:b=>b.stopPropagation()}):n.jsxs("div",{className:"node-video-placeholder",children:[n.jsx(ao,{size:24}),n.jsx("strong",{children:"Video prompt"}),n.jsx("span",{children:((Ba=t.metadata)==null?void 0:Ba.MediaModel)||((dt=t.metadata)==null?void 0:dt.MediaProvider)||"Adapter gated"})]}),n.jsx("textarea",{value:t.body,"aria-label":"Video prompt or source",spellCheck:!1,onPointerDown:b=>b.stopPropagation(),onChange:b=>c(t.id,{body:b.target.value})}),we&&n.jsx("span",{className:"node-video-source",title:kt,children:kt})]}):Et?n.jsxs("div",{className:`node-asset-card node-asset-card--${t.kind}`,"data-testid":"node-asset-card",children:[n.jsx("div",{className:"node-asset-icon",children:n.jsx(so,{size:28})}),n.jsxs("div",{className:"node-asset-copy",children:[n.jsx("strong",{title:wa,children:wa}),n.jsx("span",{children:t.kind==="directory"?"Directory reference":t.kind==="pdf"?"PDF document":"File reference"}),t.kind==="directory"&&(an||Re||yt||Dt||ja)&&n.jsxs("dl",{className:"node-asset-meta","data-testid":"node-directory-meta",children:[(yt||Dt)&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Scanned"}),n.jsxs("dd",{children:[Number(yt??0).toLocaleString()," files / ",Number(Dt??0).toLocaleString()," folders"]})]}),an&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Include"}),n.jsx("dd",{children:an})]}),Re&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Exclude"}),n.jsx("dd",{children:Re})]}),ja&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Updated"}),n.jsx("dd",{children:new Date(ja).toLocaleString()})]})]})]})]}):ge?n.jsxs("div",{className:"node-csv-card","data-testid":"node-csv-card",children:[n.jsx(Kg,{preview:Zt,sort:Ge,onSort:b=>{const T=(Ge==null?void 0:Ge.columnIndex)===b&&Ge.direction==="asc"?"desc":"asc";dn({columnIndex:b,direction:T}),f.emit("node.csvTable.sort",{id:t.id,columnIndex:b,direction:T})}}),n.jsx("textarea",{value:t.body,"aria-label":"CSV source",spellCheck:!1,wrap:"off",onPointerDown:b=>b.stopPropagation(),onChange:b=>c(t.id,{body:b.target.value})})]}):io?n.jsxs("div",{className:"node-markdown-card","data-testid":"node-markdown-card",children:[n.jsx("div",{className:"node-markdown-preview mindcanvas-text-scrollable-view","data-testid":"node-markdown-preview","aria-label":"Markdown preview",children:n.jsx(Zg,{value:t.body})}),n.jsx("textarea",{value:t.body,"aria-label":"Markdown source",spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:b=>b.stopPropagation(),onChange:b=>c(t.id,{body:b.target.value})})]}):n.jsx(n.Fragment,{children:n.jsx("textarea",{value:t.body,"aria-label":"Node body",spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:b=>b.stopPropagation(),onChange:b=>c(t.id,{body:b.target.value})})}),$t,lt,n.jsx("button",{type:"button",className:"node-resize-handle",title:"Resize node","aria-label":"Resize node",onPointerDown:b=>y(t.id,b)})]})});function Yg({input:e,value:t,onChange:o}){return n.jsxs("label",{className:"node-template-card__field",children:[n.jsxs("span",{children:[n.jsx("strong",{children:e.label}),e.description&&n.jsx("small",{children:e.description})]}),e.type==="textarea"?n.jsx("textarea",{value:t,placeholder:e.placeholder,onPointerDown:r=>r.stopPropagation(),onChange:r=>o(r.target.value)}):e.type==="select"?n.jsx("select",{value:t,onPointerDown:r=>r.stopPropagation(),onChange:r=>o(r.target.value),children:(e.options??[]).map(r=>n.jsx("option",{value:r.value,children:r.label},r.value))}):n.jsx("input",{type:"text",value:t,placeholder:e.placeholder,onPointerDown:r=>r.stopPropagation(),onChange:r=>o(r.target.value)})]})}function Gg(e){const r=Math.min(430,window.innerHeight-24),d=Math.max(12,window.innerWidth-332-12),p=Math.min(Math.max(e.right-332,12),d),m=e.bottom+8,y=e.top-r-8,c=Math.max(12,window.innerHeight-r-12),x=m<=c?m:Math.max(12,y);return{left:p,top:Math.min(x,c)}}function Kg({preview:e,sort:t,onSort:o}){return!e||e.headers.length===0?n.jsx("div",{className:"csv-table-scroll mindcanvas-text-scrollable-view","data-testid":"csv-table-preview","aria-label":"CSV table preview",children:n.jsx("p",{className:"node-md-empty",children:"Paste CSV source to preview a table."})}):n.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:[n.jsxs("table",{className:"csv-table",children:[n.jsx("thead",{children:n.jsx("tr",{children:e.headers.map((r,d)=>{const p=(t==null?void 0:t.columnIndex)===d,m=p&&t.direction==="asc"?"descending":"ascending";return n.jsx("th",{"aria-sort":p?t.direction==="asc"?"ascending":"descending":"none",children:n.jsxs("button",{type:"button",className:`csv-table-header-button ${p?"is-active":""}`,"data-testid":`csv-table-sort-${d}`,"aria-label":`Sort CSV by ${r||`Column ${d+1}`} ${m}`,onClick:()=>o(d),children:[n.jsx("span",{children:r||`Column ${d+1}`}),p&&n.jsx("small",{children:t.direction==="asc"?"Asc":"Desc"})]})},`${r}-${d}`)})})}),n.jsx("tbody",{children:e.rows.map((r,d)=>n.jsx("tr",{children:e.headers.map((p,m)=>n.jsx("td",{className:"csv-table-cell",children:r[m]??""},`csv-cell-${d}-${m}`))},`csv-row-${d}`))})]}),n.jsxs("div",{className:"csv-table-status",children:[n.jsxs("span",{children:[e.totalRows.toLocaleString()," rows"]}),n.jsxs("span",{children:[e.columnCount.toLocaleString()," columns"]}),e.truncated&&n.jsxs("span",{children:["showing ",e.renderedRows.toLocaleString()]})]})]})}function Xg(e,t){const o=qg(e,gl+1);if(o.length===0)return null;const r=Math.min(Og,Math.max(...o.map(c=>c.length),1)),d=hl(o[0],r).map((c,x)=>c.trim()||`Column ${x+1}`),p=o.slice(1,gl+1).map(c=>hl(c,r)),m=t?[...p].sort((c,x)=>Jg(c[t.columnIndex]??"",x[t.columnIndex]??"",t.direction)):p,y=Math.max(0,String(e||"").split(/\r\n|\n|\r/).filter(c=>c.length>0).length-1);return{headers:d,rows:m,totalRows:y,columnCount:r,renderedRows:m.length,truncated:y>m.length}}function qg(e,t){const o=[];let r=[],d="",p=!1;const m=String(e||"").replace(/\r\n/g,`
4
- `).replace(/\r/g,`
5
- `);for(let y=0;y<m.length;y+=1){const c=m[y],x=m[y+1];if(c==='"'){p&&x==='"'?(d+='"',y+=1):p=!p;continue}if(c===","&&!p){r.push(d),d="";continue}if(c===`
6
- `&&!p){if(r.push(d),r.some(v=>v.trim().length>0)&&o.push(r),r=[],d="",o.length>=t)break;continue}d+=c}return o.length<t&&(d.length>0||r.length>0)&&(r.push(d),r.some(y=>y.trim().length>0)&&o.push(r)),o}function hl(e,t){return Array.from({length:t},(o,r)=>String(e[r]??"").trim())}function Jg(e,t,o){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 o==="asc"?m:-m}function Zg({value:e}){const t=Qg(e);return t.length===0?n.jsx("p",{className:"node-md-empty",children:"Nothing to preview yet."}):n.jsx(n.Fragment,{children:t.map((o,r)=>{const d=`${o.kind}-${r}-${o.text}`;switch(o.kind){case"heading":return n.jsx("strong",{className:`node-md-heading node-md-heading--${o.level}`,children:o.text},d);case"quote":return n.jsx("blockquote",{className:"node-md-quote",children:o.text},d);case"list":return n.jsxs("div",{className:"node-md-list-item",children:[n.jsx("span",{"aria-hidden":"true",children:"-"}),n.jsx("p",{children:o.text})]},d);case"code":return n.jsx("code",{className:"node-md-code",children:o.text},d);case"table":return n.jsx("p",{className:"node-md-table-row",children:o.text},d);default:return n.jsx("p",{children:o.text},d)}})})}function Qg(e){const t=[];for(const o of String(e||"").replace(/\r\n/g,`
7
- `).split(`
8
- `)){const r=o.trim();if(!r)continue;const d=/^(#{1,6})\s+(.+)$/.exec(r);if(d?t.push({kind:"heading",level:d[1].length,text:Eo(d[2])}):/^>\s?/.test(r)?t.push({kind:"quote",text:Eo(r.replace(/^>\s?/,""))}):/^([-*+]|\d+\.)\s+/.test(r)?t.push({kind:"list",text:Eo(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:Eo(r)}),t.length>=12)break}return t}function Eo(e){return e.replace(/!\[([^\]]*)\]\([^)]+\)/g,"$1").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/(\*\*|__)(.*?)\1/g,"$2").replace(/(\*|_)(.*?)\1/g,"$2").replace(/`([^`]+)`/g,"$1").trim()}function eh(e){var o,r;const t=String(((o=e.metadata)==null?void 0:o.memoColor)||((r=e.metadata)==null?void 0:r.MemoColor)||"coral").toLowerCase();return xr.find(d=>d.key===t)??xr[0]}function th(e){return yd(e)}function Id(e){return String(e.assetUrl||e.sourceFilePath||e.body||"").trim()}function ah(e){const t=Id(e);if(!t)return"";const o=t.toLowerCase();return o.startsWith("blob:")||o.startsWith("data:video/")||/^https?:\/\//i.test(t)&&/\.(mp4|webm|ogg|ogv|mov|m4v)(?:[?#].*)?$/i.test(t)?t:""}function nh(e){var t,o,r,d,p,m;return String(((t=e.metadata)==null?void 0:t.sourceUrl)||((o=e.metadata)==null?void 0:o.SourceUrl)||((r=e.metadata)==null?void 0:r.url)||((d=e.metadata)==null?void 0:d.Url)||((p=e.metadata)==null?void 0:p.embedUrl)||((m=e.metadata)==null?void 0:m.EmbedUrl)||e.assetUrl||e.sourceFilePath||e.body||"").trim()}function oh(e){var t,o;return String(((t=e.metadata)==null?void 0:t.embedType)||((o=e.metadata)==null?void 0:o.EmbedType)||"").trim().toLowerCase()}function sh(e,t){var r,d;const o=String(((r=e.metadata)==null?void 0:r.domain)||((d=e.metadata)==null?void 0:d.Domain)||"").trim();if(o)return o;try{return new URL(t).hostname.replace(/^www\./,"")}catch{return""}}function rh(e){return bd(e)}function fl(e){const t=e.indexOf(":");return t>0?e.slice(0,t):"relative"}function ih(e){var t;return((t=e.metadata)==null?void 0:t.CompanyStatus)||e.status||(e.companyMode?"Staged":"Ready")}function lh(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 Cr(e){var t;return(e.result||e.body||((t=e.metadata)==null?void 0:t.CompanyLastMessage)||"").trim()||"No local artifact content yet."}function Po(e,t){const o=t.edges.filter(p=>p.to===e.id).map(p=>{var m;return(m=t.nodes.find(y=>y.id===p.from))==null?void 0:m.title}).filter(Boolean),r=t.edges.filter(p=>p.from===e.id).map(p=>{var m;return(m=t.nodes.find(y=>y.id===p.to))==null?void 0:m.title}).filter(Boolean),d=ih(e);return{id:e.id,title:e.title,type:e.kind,subtitle:Cr(e).slice(0,160),status:d,progress:lh(d),incoming:o,outgoing:r}}function dh(e,t){const o=new Set(t.edges.filter(x=>x.from===e.id||x.to===e.id).flatMap(x=>[x.from,x.to]).filter(x=>x!==e.id)),r=t.nodes.filter(x=>o.has(x.id)),d=t.nodes.filter(x=>{var v;return x.id!==e.id&&(x.companyMode||((v=x.tags)==null?void 0:v.some(L=>L.toLowerCase().includes("company"))))}),p=[...r,...d].filter((x,v,L)=>L.findIndex(j=>j.id===x.id)===v),m=p.filter(x=>x.kind!=="ai-task"&&!x.result).slice(0,6),y=p.filter(x=>x.kind==="ai-task").slice(0,6),c=p.filter(x=>x.result||x.kind!=="ai-task").slice(0,6);return[{key:"root",label:"Root",nodes:[Po(e,t)]},{key:"context",label:"Context",nodes:m.map(x=>Po(x,t))},{key:"tasks",label:"Missions",nodes:y.map(x=>Po(x,t))},{key:"artifacts",label:"Artifacts",nodes:c.map(x=>Po(x,t))}].map(x=>({...x,nodes:x.nodes.length>0?x.nodes:[ch(x.key)]}))}function ch(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 uh(e,t){const o=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 p;return d.id===e.id||o.has(d.id)||((p=d.tags)==null?void 0:p.includes("Company follow-up"))}).filter(d=>Cr(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:Cr(d),sourceNodeId:d.id}))}function mh({board:e,rootNode:t,onClose:o,onStatus:r,onRemove:d,onSubmitFollowUp:p,onApproval:m,onAddArtifact:y}){var pe,Ve,tt,at,ce;const[c,x]=g.useState(""),[v,L]=g.useState(null),j=g.useMemo(()=>dh(t,e),[e,t]),P=g.useMemo(()=>uh(t,e),[e,t]),V=P.find(G=>G.id===v)??P[0]??null,F=((pe=t.metadata)==null?void 0:pe.CompanyStatus)||"Staged",B=((Ve=t.metadata)==null?void 0:Ve.CompanyExecutionModeLabel)||"Auto / General",X=((tt=t.metadata)==null?void 0:tt.CompanySubAgents)==="false"?"single-agent":"sub-agents",ee=((at=t.metadata)==null?void 0:at.CompanyApprovalStatus)||"Pending",me=!["Approved","Rejected"].includes(ee),be=e.nodes.filter(G=>{var oe;return G.kind==="ai-task"&&(((oe=G.tags)==null?void 0:oe.includes("Company follow-up"))||j.some(J=>J.nodes.some(ft=>ft.id===G.id)))}).length,Se=()=>{const G=c.trim();G&&(x(""),p(t.id,G))};return n.jsx("div",{className:"company-focus-backdrop","data-testid":"company-graph-focus",onMouseDown:o,children:n.jsxs("section",{className:"company-focus-dialog","aria-label":"Company graph focus","data-disable-mindcanvas-hotkeys":"true",onMouseDown:G=>G.stopPropagation(),children:[n.jsxs("header",{className:"company-focus-head",children:[n.jsx("button",{type:"button",title:"Back to Canvas",onClick:o,children:n.jsx(xm,{size:16})}),n.jsxs("div",{children:[n.jsx("span",{children:"Company Graph Focus"}),n.jsx("strong",{children:t.title}),n.jsx("small",{children:t.body||((ce=t.metadata)==null?void 0:ce.CompanyLastMessage)||"Local company root staged from MindCanvas."})]}),n.jsxs("div",{className:"company-focus-head__actions",children:[n.jsx("span",{children:F}),n.jsx("span",{children:B}),n.jsxs("span",{children:[n.jsx(Ql,{size:12}),X]}),F==="Paused"?n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Staged"),children:[n.jsx(fa,{size:13}),"Resume"]}):n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Paused"),children:[n.jsx(Ko,{size:13}),"Pause"]}),n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Archived"),children:[n.jsx(dr,{size:13}),"Archive"]}),n.jsxs("button",{type:"button",className:"is-danger",onClick:()=>d(t.id),children:[n.jsx(Go,{size:13}),"Remove"]})]})]}),n.jsxs("div",{className:"company-focus-main",children:[n.jsxs("main",{children:[n.jsxs("div",{className:"company-focus-metrics",children:[n.jsx(_o,{label:"Missions",value:be||1,tone:"blue"}),n.jsx(_o,{label:"Population",value:X==="sub-agents"?4:1,tone:"slate"}),n.jsx(_o,{label:"Approvals",value:me?1:0,tone:"amber"}),n.jsx(_o,{label:"Artifacts",value:P.length,tone:"teal"})]}),n.jsxs("section",{className:"company-focus-graph",children:[n.jsxs("div",{className:"company-focus-section-head",children:[n.jsxs("div",{children:[n.jsx(Cm,{size:15}),n.jsx("strong",{children:"Virtual Flow Graph"})]}),n.jsxs("span",{children:[e.edges.length," board edges"]})]}),n.jsx("div",{className:"company-focus-lanes",children:j.map(G=>n.jsxs("section",{className:"company-focus-lane",children:[n.jsxs("header",{children:[n.jsx("strong",{children:G.label}),n.jsxs("span",{children:[G.nodes.filter(oe=>oe.type!=="empty").length," nodes"]})]}),n.jsx("div",{className:"company-focus-node-list",children:G.nodes.map(oe=>n.jsxs("article",{className:`company-focus-node ${oe.type==="empty"?"is-empty":""}`,children:[n.jsxs("div",{children:[n.jsx("span",{children:oe.type}),n.jsx("b",{children:oe.status})]}),n.jsx("strong",{children:oe.title}),n.jsx("p",{children:oe.subtitle}),n.jsx("div",{className:"company-focus-progress",children:n.jsx("i",{style:{width:`${Math.round(oe.progress*100)}%`}})}),oe.incoming.length>0&&n.jsxs("small",{children:["From: ",oe.incoming.slice(0,2).join(", ")]}),oe.outgoing.length>0&&n.jsxs("small",{children:["Next: ",oe.outgoing.slice(0,2).join(", ")]})]},oe.id))})]},G.key))})]})]}),n.jsxs("aside",{className:"company-focus-side",children:[n.jsxs("section",{children:[n.jsx("div",{className:"company-focus-section-head",children:n.jsxs("div",{children:[n.jsx(ad,{size:15}),n.jsx("strong",{children:"Next Task"})]})}),n.jsx("p",{children:"Stage a follow-up AI Task from this company root. It stays local until an adapter runs it."}),n.jsx("textarea",{value:c,onChange:G=>x(G.target.value),placeholder:"Generate the next practical revenue validation task."}),n.jsxs("button",{type:"button",className:"company-focus-primary",disabled:!c.trim(),onClick:Se,children:[n.jsx(Sm,{size:13}),"Stage Task"]})]}),n.jsxs("section",{children:[n.jsxs("div",{className:"company-focus-section-head",children:[n.jsxs("div",{children:[n.jsx(sr,{size:15}),n.jsx("strong",{children:"Approvals"})]}),n.jsx("span",{children:ee})]}),n.jsxs("article",{className:`company-focus-approval company-focus-approval--${ee.toLowerCase()}`,children:[n.jsx("span",{children:B}),n.jsx("strong",{children:"Run staged company work locally"}),n.jsx("p",{children:"External execution, publishing, money movement, and destructive tool calls remain blocked until an adapter confirms them."}),me&&n.jsxs("div",{children:[n.jsxs("button",{type:"button",onClick:()=>m(t.id,"Approved"),children:[n.jsx(sr,{size:13}),"Approve locally"]}),n.jsxs("button",{type:"button",onClick:()=>m(t.id,"Rejected"),children:[n.jsx(km,{size:13}),"Reject"]})]})]})]}),n.jsxs("section",{children:[n.jsxs("div",{className:"company-focus-section-head",children:[n.jsxs("div",{children:[n.jsx(gt,{size:15}),n.jsx("strong",{children:"Artifacts"})]}),n.jsx("span",{children:P.length})]}),n.jsx("div",{className:"company-focus-artifacts",children:P.map(G=>n.jsxs("button",{type:"button",className:(V==null?void 0:V.id)===G.id?"is-selected":"",onClick:()=>L(G.id),children:[n.jsx("span",{children:G.type}),n.jsx("strong",{children:G.title})]},G.id))}),V&&n.jsxs("div",{className:"company-focus-preview",children:[n.jsx("span",{children:V.type}),n.jsx("strong",{children:V.title}),n.jsx("pre",{children:V.content}),n.jsxs("button",{type:"button",onClick:()=>y(t.id,V),children:[n.jsx(Kn,{size:13}),"Add to Canvas"]})]})]})]})]})]})})}function _o({label:e,value:t,tone:o}){return n.jsxs("article",{className:`company-focus-metric company-focus-metric--${o}`,children:[n.jsx("span",{children:e}),n.jsx("strong",{children:t})]})}function ph({url:e,fileName:t,onClose:o}){return n.jsx("div",{className:"pdf-viewer-backdrop","data-testid":"pdf-viewer-dialog",onMouseDown:o,children:n.jsxs("section",{className:"pdf-viewer-dialog","aria-label":"PDF viewer",onMouseDown:r=>r.stopPropagation(),children:[n.jsxs("header",{className:"pdf-viewer-head",children:[n.jsxs("div",{children:[n.jsx("span",{children:"PDF Viewer"}),n.jsx("strong",{title:t,children:t})]}),n.jsxs("div",{className:"pdf-viewer-actions",children:[n.jsx("button",{type:"button",title:"Open PDF in new tab","data-testid":"pdf-viewer-open-external",onClick:()=>window.open(e,"_blank","noopener,noreferrer"),children:n.jsx(Za,{size:16})}),n.jsx("button",{type:"button",title:"Close PDF viewer","data-testid":"pdf-viewer-close",onClick:o,children:n.jsx(pt,{size:16})})]})]}),n.jsx("iframe",{src:e,title:t,className:"pdf-viewer-frame","data-testid":"pdf-viewer-frame"})]})})}const Nd={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},Uo=.28,zo=2.8,gh=96,hh=140,Wo=188,Ho=126,Xa=10,fh=720,bh=.8,Ha={x:540,y:210,scale:1},bl=8,Ad=["dot","line","particles","spirit"],Kt="n",Ys=["0","1","2","3","4","5","6","7","8","9"],Jn=24,yl=900,xl="mindexec-react-project-gallery-startup-v1",Md="mindexec-react-project-workspace-history-v1",Rd=5,Vo="__MINDEXEC_REACT_NODES__",Do=34,Va=1280,Ya=960,yh=154,Sr=4e4,xh=50,Jo=100,Td=50*1024,Gs=Td,Ks=12e4,Cl=64*1024,Ch=5e3,Ur=2500,en=36,kr="Select a LocalBridge directory",Ld="mindexec.react.templateStudioDraft.v1.",Ed="BusinessAutomationNode",Sh="MindCanvasAgent",kh="CodeNote";function wh(){return ql(Nd??{})}function Xs(){return Nd??{}}const vh=["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(`
9
- `),zr={"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(`
10
- `),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(`
11
- `),tag:"Video Spec",toolHint:"Media.VideoPrompt",outputType:"video-prompt",width:420,height:236}},jh=["Objective:","","Constraints:","","Expected output:"].join(`
12
- `),Ih=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 Sl(e,t){try{const o=window.localStorage.getItem(`${Ld}${e}`);if(!o)return Fo(t);const r=JSON.parse(o);return{...Fo(t),...r,templateId:Yn(r.templateId||r.templateTitle||t)}}catch{return Fo(t)}}function kl(e,t){window.localStorage.setItem(`${Ld}${e}`,JSON.stringify(t))}function wl(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 Zo(e){return String(e||"").split(",").map(t=>t.trim().toLowerCase()).filter(Boolean)}function Pd(e,t,o){const r=e.toLowerCase(),d=t.toLowerCase();return o.some(p=>r.includes(p)||d.includes(p))}function _d(e,t){if(t.length===0)return!0;const o=e.toLowerCase(),r=o.includes(".")?`.${o.split(".").pop()??""}`:"";return t.some(d=>d.startsWith(".")?d===r:o.includes(d))}async function Nh(e,t){const o=Zo(t==null?void 0:t.Include),r=Zo(t==null?void 0:t.Exclude),d=[];let p=0,m=0,y=0,c=!1;async function x(v,L=""){for await(const j of v.values()){if(y>=Ur){c=!0;return}const P=L?`${L}/${j.name}`:j.name;if(!Pd(P,j.name,r)){if(j.kind==="file"){if(!_d(j.name,o))continue;p+=1,y+=1,d.length<en&&d.push({name:j.name,path:P,kind:"file"});continue}if(j.kind==="directory"&&(m+=1,y+=1,d.length<en&&d.push({name:j.name,path:P,kind:"directory"}),await x(j,P),c))return}}}return await x(e),{fileCount:p,directoryCount:m,preview:d,truncated:c}}function tn(e){return typeof e=="string"?e.trim():""}function Ah(e){return!e||e===kr?!1:!/^(https?:|data:|blob:|file:)/i.test(e)}function Mh(e){var d;const t=tn((d=e.metadata)==null?void 0:d.DirectoryPath),o=tn(e.sourceFilePath),r=t||o;return Ah(r)?r:""}function Rh(e,t){const o=tn(t.path);if(o)return o;const r=tn(t.name);if(!e)return r;const d=e.includes("\\")?"\\":"/";return`${e.replace(/[\\/]+$/,"")}${d}${r}`}async function Th(e,t,o,r){const d=Zo(t==null?void 0:t.Include),p=Zo(t==null?void 0:t.Exclude),m=[],y=[{bridgePath:e,relativePath:""}];let c=0,x=0,v=0,L=!1;for(;y.length>0;){const j=y.shift();if(!j)break;const P=await nm(j.bridgePath,o,r),V=Array.isArray(P.items)?P.items:[];for(const F of V){if(v>=Ur){L=!0;break}const B=tn(F.name);if(!B)continue;const X=j.relativePath?`${j.relativePath}/${B}`:B;if(Pd(X,B,p))continue;const ee=F.isDirectory===!0,me=F.isFile===!0||F.isDirectory!==!0;if(ee){x+=1,v+=1,m.length<en&&m.push({name:B,path:X,kind:"directory"}),y.push({bridgePath:Rh(j.bridgePath,F),relativePath:X});continue}if(me){if(!_d(B,d))continue;c+=1,v+=1,m.length<en&&m.push({name:B,path:X,kind:"file"})}}if(L)break}return{fileCount:c,directoryCount:x,preview:m,truncated:L}}function vl(e,t){const o=t.preview.map(r=>`${r.kind==="directory"?"dir":"file"}:${r.path}`).join(`
13
- `);return[`Directory: ${e}`,`Files: ${t.fileCount}`,`Folders: ${t.directoryCount}`,t.truncated?`Preview capped at ${Ur} entries.`:"Scan completed.","",o||"(empty or filtered)"].join(`
14
- `)}const Lh=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"]),Eh=new Set(["csv","log","md","markdown","rtf","text","txt"]);function H(e){return`${e}-${Math.random().toString(36).slice(2,9)}`}function Ph(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 de(e,t,o){return Math.min(o,Math.max(t,e))}const _h=112,Dh=80;function jl(e,t){const o=t/2,r=_h+e/2,d=Math.max(r,t-Dh);return de(Math.max(o,r),0,d)}function Il(e){return{x:e.x+e.width/2,y:e.y+e.height/2}}function wr(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 Hn(e){return!!(e&&!["image","video","pdf","file","directory","remote-monitor","remote-control"].includes(e.kind))}function ha(e){var t,o;return!!(e&&(e.kind==="remote-monitor"||((t=e.metadata)==null?void 0:t.SemanticType)==="RemoteFleetMonitor"||((o=e.metadata)==null?void 0:o.RemoteFleetNodeRole)==="fleet-monitor"))}function Bh(e){return e.isExpanded===!1&&Number(e.originalHeight??0)>e.height+1}function Oh(e){return $r(e)}function $h(e){return yd(e)}function Xn(e){var o;const t=(((o=e.imageStack)==null?void 0:o.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 Nl(e,t,o,r){let d=e.variantId||H("image-variant");for(;o.has(d);)d=H("image-variant");return o.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 Fh(e){return[e.title,"",e.result?`Result:
15
- ${e.result}`:e.body,e.imageUrl?`
16
- Image: ${e.imageUrl}`:"",e.assetUrl?`
17
- Asset: ${e.assetUrl}`:"",e.sourceFilePath?`
18
- Source: ${e.sourceFilePath}`:""].filter(Boolean).join(`
19
- `)}function Uh(e){if(e.kind!=="image")return"";const t=Xn(e).find(o=>{var r;return o.variantId===((r=e.imageStack)==null?void 0:r.activeVariantId)});return String((t==null?void 0:t.imageUrl)||$r(e)).trim()}async function zh(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 Gn(e),"text"}function qs(e){var r;const o=(e.result||e.body||"").split(/\r?\n/).reduce((d,p)=>d+Math.max(1,Math.ceil(p.length/54)),0);return de(112+o*21+((r=e.tags)!=null&&r.length?28:0),150,620)}function Wh(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:Va,maxHeight:Ya};case"image":return{minWidth:220,minHeight:160,maxWidth:Va,maxHeight:Ya};case"pdf":case"file":case"directory":return{minWidth:240,minHeight:128,maxWidth:860,maxHeight:720};case"code":return{minWidth:260,minHeight:160,maxWidth:Va,maxHeight:Ya};case"csv-table":return{minWidth:320,minHeight:180,maxWidth:Va,maxHeight:Ya};case"ai-task":return{minWidth:260,minHeight:154,maxWidth:Va,maxHeight:Ya};default:return{minWidth:220,minHeight:132,maxWidth:Va,maxHeight:Ya}}}function Xe(e){return String(e||"").trim()||"Untitled"}const Dd="Multi Desktop Monitor";function Al(e){return Xe(e).toLowerCase()===Dd.toLowerCase()}function Hh(e,t,o){const r=Xe(e.name);return!o||!Al(r)?r:t.nodes.some(p=>ha(p)&&Al(p.title||Dd))?"MindCanvas":r}function Xt(e){return typeof e=="object"&&e!==null}function vr(e){const t=e.toLowerCase(),o=t.lastIndexOf(".");return o>=0?t.slice(o+1):""}function Vh(e){if(!Xt(e))return;const t=Object.entries(e).filter(([o])=>o.trim().length>0).map(([o,r])=>[o,String(r??"")]);return t.length>0?Object.fromEntries(t):void 0}function Yh(e){if(!Array.isArray(e))return;const t=e.map(o=>String(o??"").trim()).filter(Boolean).slice(0,24);return t.length>0?t:void 0}function Bo(e,t=0,o=Number.MAX_SAFE_INTEGER){const r=Number(e);if(Number.isFinite(r))return de(r,t,o)}function Js(e){return e&&Ad.includes(e)?e:"dot"}function Ml(e){return Math.round(e/Jn)*Jn}function Gh(e){if(!Xt(e))return null;const t=typeof e.variantId=="string"?e.variantId.trim():"",o=typeof e.imageUrl=="string"?e.imageUrl.trim():"";return!t||!o?null:{variantId:t,imageUrl:o,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 Kh(e){if(!Xt(e)||!Array.isArray(e.variants))return;const t=e.variants.map(d=>Gh(d)).filter(d=>!!d).slice(0,128);if(t.length===0)return;const o=typeof e.activeVariantId=="string"?e.activeVariantId:"";return{activeVariantId:t.some(d=>d.variantId===o)?o: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 jr(e,t,o){if(!(!e||e.variants.length===0))return{...e,variants:e.variants.map(r=>({...r,sourceNodeId:t&&o&&r.sourceNodeId===t?o:r.sourceNodeId}))}}function Xh(e){if(!Xt(e))return null;const t=e.kind,o=Number(e.x),r=Number(e.y),d=Number(e.width),p=Number(e.height);if(typeof e.id!="string"||typeof t!="string"||!Ih.has(t)||typeof e.title!="string"||typeof e.body!="string"||!Number.isFinite(o)||!Number.isFinite(r)||!Number.isFinite(d)||!Number.isFinite(p))return null;const m=Kh(e.imageStack),y=(m==null?void 0:m.variants.find(c=>c.variantId===m.activeVariantId))??(m==null?void 0:m.variants[0]);return{id:e.id,kind:t,title:e.title,body:e.body,x:o,y:r,width:de(d,120,1280),height:de(p,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:Bo(e.totalLineCount),scrollOffset:Bo(e.scrollOffset),maxScroll:Bo(e.maxScroll),isExpanded:typeof e.isExpanded=="boolean"?e.isExpanded:void 0,originalHeight:Bo(e.originalHeight),tags:Yh(e.tags),role:typeof e.role=="string"?e.role:void 0,metadata:Vh(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 qh(e){return!Xt(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}}function Rl(e){if(!e.includes(Vo))return null;try{const t=JSON.parse(e);if(!Xt(t)||t.__type!==Vo||!Array.isArray(t.nodes))return null;const o=t.nodes.map(d=>Xh(d)).filter(d=>!!d);if(o.length===0)return null;const r=Array.isArray(t.edges)?t.edges.map(d=>qh(d)).filter(d=>!!d):[];return{__type:Vo,source:"MindExecReact",copiedAt:typeof t.copiedAt=="string"?t.copiedAt:new Date().toISOString(),nodes:o,edges:r}}catch{return null}}function Jh(e,t){return{__type:Vo,source:"MindExecReact",copiedAt:new Date().toISOString(),nodes:e.map(o=>({...o,metadata:o.metadata?{...o.metadata}:void 0,tags:o.tags?[...o.tags]:void 0,imageStack:jr(o.imageStack)})),edges:t.map(o=>({...o}))}}const Zh=/^\s*\[[^\]]+\]\((https?:\/\/[^)\s]+)\)\s*$/i,Qh=/<iframe[^>]+src\s*=\s*(?:"|\x27)(?<url>https?:\/\/[^"\x27]+)(?:"|\x27)/i,ef=/https?:\/\/[^\s<>()"\x27]+/i,tf=/^[A-Za-z0-9_-]{6,}$/,af=new Set(["avi","m4v","mov","mp4","mpeg","ogv","webm"]);function Zs(e){return e.trim().replace(/[.,;:!?\])}]+$/g,"")}function nf(e){var p;const t=e.trim();if(!t)return"";const o=Qh.exec(t);if((p=o==null?void 0:o.groups)!=null&&p.url)return Zs(o.groups.url);const r=Zh.exec(t);if(r!=null&&r[1])return Zs(r[1]);const d=t.split(/\r?\n/).map(m=>m.trim()).filter(Boolean);if(d.length===1){const m=ef.exec(d[0]);if(m&&m[0]===d[0])return Zs(m[0])}return""}function Bd(e){const t=e.trim(),o=nf(t);if(o)return o;if(!t||/\s/.test(t))return"";try{const r=new URL(t);return r.protocol==="data:"||r.protocol==="blob:"?t:""}catch{return""}}function of(e){try{const t=new URL(e);return vr(t.pathname)}catch{return vr(e)}}function sf(e){const t=e.hostname.toLowerCase();if(!t||t==="localhost"||t.endsWith(".localhost"))return!0;const o=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(t);if(o){const d=o.slice(1).map(Number);if(d.some(y=>!Number.isInteger(y)||y<0||y>255))return!0;const[p,m]=d;return p===0||p===10||p===127||p===169&&m===254||p===172&&m>=16&&m<=31||p===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 oo(e){const t=Bd(e);if(!t)return null;try{const o=new URL(t);return o.protocol!=="http:"&&o.protocol!=="https:"||sf(o)?null:o}catch{return null}}function Qs(e){return tf.test(e)}function rf(e){const t=oo(e);if(!t)return"";const o=t.hostname.toLowerCase().replace(/^www\./,"");if(o==="youtu.be"){const y=t.pathname.split("/").filter(Boolean)[0]??"";return Qs(y)?y:""}if(!o.endsWith("youtube.com")&&!o.endsWith("youtube-nocookie.com"))return"";const r=t.searchParams.get("v")??"";if(Qs(r))return r;const d=t.pathname.split("/").filter(Boolean),p=d.findIndex(y=>["embed","shorts","live","v"].includes(y)),m=p>=0?d[p+1]??"":"";return Qs(m)?m:""}function lf(e){const t=e.toLowerCase(),o=of(e);return t.startsWith("data:image/")||["avif","gif","jpeg","jpg","png","svg","webp"].includes(o)?"image":af.has(o)?"video":o==="pdf"?"pdf":oo(e)?"embed":"file"}function df(e){try{const t=new URL(e),o=t.pathname.split("/").filter(Boolean).pop();return decodeURIComponent(o||t.hostname||e).slice(0,90)}catch{return e.slice(0,90)}}function cf(e,t,o="clipboard-url"){const r=lf(e),d=df(e),p=r==="embed"?oo(e):null,m=r==="embed"?rf(e):"",y=m?"youtube":"webpage",c=(p==null?void 0:p.hostname.replace(/^www\./,""))??"",x=m?`https://www.youtube.com/watch?v=${m}`:e,v=m?`https://www.youtube-nocookie.com/embed/${m}`:"",L=r==="image"?`Image: ${d}`:r==="video"?`Video: ${d}`:r==="embed"?m?"YouTube Video":`Embed: ${c||d}`:r==="pdf"?`PDF: ${d}`:`URL: ${d}`;return{id:H("node"),kind:r,title:L,body:x,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:x,tags:r==="embed"?["Embed",m?"YouTube":"Web"]:r==="file"?["URL","File"]:[r.toUpperCase()],metadata:{Source:o,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:x,url:x,originalInputUrl:e,embedUrl:v,videoId:m,thumbnailUrl:m?`https://img.youtube.com/vi/${m}/hqdefault.jpg`:"",title:L,domain:c,faviconUrl:!m&&p?`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(x)}`:"",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 Tl(e,t,o="clipboard-url"){const r=Bd(e);return!r||/^https?:\/\//i.test(r)&&!oo(r)?null:cf(r,t,o)}function Ll(e,t,o){const r=e.split(/\r?\n/).map(d=>d.trim()).find(Boolean)??"Pasted text";return{id:H("node"),kind:"note",title:r.slice(0,90),body:e.slice(0,4e4),x:t.x,y:t.y,width:340,height:de(156+Math.ceil(Math.min(e.length,2200)/72)*20,176,540),tags:[o==="global-input"?"Input":"Pasted"],metadata:{Source:o,TextTruncated:String(e.length>4e4)}}}function uf(e,t,o,r,d="global-input-media"){const p=r==="Image"?"image":"video",m=e.split(/\r?\n/).map(c=>c.trim()).find(Boolean)??`${r} prompt`,y={...Vr(o,r)??{},Source:d,PromptOnly:"true"};return{id:H("node"),kind:p,title:`${r}: ${m.slice(0,72)}`,body:e.slice(0,4e4),x:t.x,y:t.y,width:p==="image"?360:420,height:p==="image"?240:236,tags:[r,y.MediaProvider||"Adapter gated"],metadata:y}}function El(e){if(!e.trim())return"";if(typeof DOMParser>"u")return e.replace(/<br\s*\/?>/gi,`
20
- `).replace(/<[^>]+>/g," ").replace(/\s+\n/g,`
21
- `).trim();const t=new DOMParser().parseFromString(e,"text/html");return(t.body.innerText||t.body.textContent||"").replace(/\n{3,}/g,`
22
-
23
- `).trim()}function mf(e){const t=vr(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":Lh.has(t)?"code":e.type.startsWith("text/")||Eh.has(t)?"text":"file"}function pf(e){return typeof URL<"u"&&URL.createObjectURL?URL.createObjectURL(e):e.name}function Pl(e){return e?e.split(/\r?\n/).length:0}function _l(e){return String(e||"").replace(/\r\n/g,`
24
- `).replace(/\r/g,`
25
- `).split(`
26
- `).slice(0,Jo).join(`
27
- `).slice(0,Ch)}function Dl(e){return{IsChunkedText:"true",TotalLineCount:String(e),TotalLineCountIsPreview:"true",ChunkedPreviewOnly:"true",ChunkedPreviewChars:"",ChunkedLineCount:String(Jo),ChunkCacheEntryLimit:String(xh),LargeFileThresholdBytes:String(Td),OriginalIngestMode:"browser-preview",TextTruncated:"true"}}function gf(e){const t=String(e||"").replace(/\r\n/g,`
28
- `).replace(/\r/g,`
29
- `).split(`
30
- `).filter(r=>r.trim().length>0),o=t.slice(0,40).reduce((r,d)=>Math.max(r,hf(d)),0);return{rowCount:Math.max(0,t.length-1),columnCount:o}}function hf(e){let t=1,o=!1;for(let r=0;r<e.length;r+=1){const d=e[r],p=e[r+1];d==='"'?o&&p==='"'?r+=1:o=!o:d===","&&!o&&(t+=1)}return e.trim()?t:0}function Bl(e,t){const o=`
31
-
32
- ... (UI truncated; source file ${t.toLocaleString()} bytes) ...`;return e.endsWith(`
33
- `)?`${e}${o.trimStart()}`:`${e}${o}`}async function ff(e,t,o){const r=mf(e),d=(r==="note"||r==="text"||r==="code"||r==="markdown")&&e.size<=Gs,p=r==="image"||r==="video"||r==="pdf"||r==="file"?pf(e):void 0,m={Source:`browser-${o}`,FileName:e.name,FileType:e.type||"unknown",FileSize:String(e.size),Durable:"false"};if(r==="csv-table"){const c=e.size<=Gs,x=c?await e.text():await e.slice(0,Cl).text(),v=c?x.slice(0,Ks):_l(x),L=gf(v),j=c?0:Pl(v);return c||f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:o,previewChars:v.length,previewLines:j,chunkLineCount:Jo}),{id:H("node"),kind:"csv-table",title:e.name.slice(0,90)||"CSV table",body:c?v:Bl(v,e.size),x:t.x,y:t.y,width:720,height:420,sourceFilePath:e.name,isChunkedText:!c||void 0,totalLineCount:c?void 0:j,scrollOffset:c?void 0:0,maxScroll:c?void 0:0,tags:["CSV","Table",o],metadata:{...m,CsvRowCount:String(L.rowCount),CsvColumnCount:String(L.columnCount),IsChunkedText:String(!c),...c?{}:{...Dl(j),ChunkedPreviewChars:String(v.length)},ChunkedPreviewOnly:String(!c),OriginalIngestMode:c?"browser-inline":"browser-preview",TextTruncated:String(!c||x.length>v.length)},wordWrap:!1}}if(d){const c=(await e.text()).slice(0,Ks);return{id:H("node"),kind:r,title:e.name.slice(0,90)||(r==="code"?"Code file":r==="markdown"?"Markdown file":"Text file"),body:c,x:t.x,y:t.y,width:r==="code"?420:r==="markdown"?400:360,height:de(168+Math.ceil(Math.min(c.length,2600)/72)*20,196,640),sourceFilePath:e.name,tags:[r==="code"?"Code":r==="markdown"?"Markdown":"Text",o],metadata:{...m,TextTruncated:String(e.size>Gs||c.length>=Ks)},wordWrap:r==="code"?!0:void 0}}if(r==="note"||r==="text"||r==="code"||r==="markdown"){const c=await e.slice(0,Cl).text(),x=_l(c),v=Pl(x);return f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:o,previewChars:x.length,previewLines:v,chunkLineCount:Jo}),{id:H("node"),kind:r,title:e.name.slice(0,90)||(r==="code"?"Code file":r==="markdown"?"Markdown file":"Text file"),body:Bl(x,e.size),x:t.x,y:t.y,width:r==="code"?480:r==="markdown"?430:390,height:540,sourceFilePath:e.name,isChunkedText:!0,totalLineCount:v,scrollOffset:0,maxScroll:0,isExpanded:!1,originalHeight:0,tags:[r==="code"?"Code":r==="markdown"?"Markdown":"Text","Chunked",o],metadata:{...m,...Dl(v),ChunkedPreviewChars:String(x.length)},wordWrap:r==="code"?!0:void 0}}const y=r;return{id:H("node"),kind:y,title:e.name.slice(0,90)||(y==="image"?"Image":y==="video"?"Video":y==="pdf"?"PDF Document":"File"),body:p||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"?p:void 0,assetUrl:y==="image"?void 0:p,sourceFilePath:e.name,tags:[y==="file"?"File":y.toUpperCase(),o],metadata:{...m,EphemeralObjectUrl:String(!!p)}}}function Ol(e,t){const o=Array.from(e??[]),r=Array.from(t??[]).map(p=>p.kind==="file"?p.getAsFile():null).filter(p=>!!p),d=new Set;return[...o,...r].filter(p=>{const m=`${p.name}:${p.size}:${p.type}:${p.lastModified}`;return d.has(m)?!1:(d.add(m),!0)})}function er(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 tr(e){return Xt(e)?typeof e.id=="string"&&Array.isArray(e.nodes)&&Array.isArray(e.edges)&&Xt(e.settings):!1}function Qo(e){return e.replace(/\.layout\.json$/i,"").replace(/\.json$/i,"").trim()}function bf(e,t){var r,d;const o=new Date().toISOString();return{...e,id:H("imported-board"),name:Xe(e.name||Qo(t)),updatedAt:o,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:o}}}function ar(e){return/\.layout\.json$/i.test(e.file.name)}function yf(e){return e.flatMap(t=>Pr(t.payload).map(o=>({fileName:t.file.name,metadata:o})))}function xf(e,t){const o=Qo(e.file.name);return t.find(r=>r.metadata.Id===o)??Pr(e.payload).map(r=>({fileName:e.file.name,metadata:r}))[0]??null}function Yo(e){return e.length===0?null:e.reduce((t,o)=>({minX:Math.min(t.minX,o.x),minY:Math.min(t.minY,o.y),maxX:Math.max(t.maxX,o.x+o.width),maxY:Math.max(t.maxY,o.y+o.height)}),{minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY})}function Cf(e){const t=[...e].sort((c,x)=>c.y-x.y||c.x-x.x);if(t.length<=2)return t;const o=t.map(c=>c.height).sort((c,x)=>c-x),r=o[Math.floor(o.length/2)]??1,d=Math.max(16,r*.35),p=[];let m=[],y=Number.NaN;for(const c of t){if(m.length===0){m=[c],y=c.y;continue}Math.abs(c.y-y)<=d?(m.push(c),y=(y*(m.length-1)+c.y)/m.length):(p.push(m.sort((x,v)=>x.x-v.x)),m=[c],y=c.y)}return m.length>0&&p.push(m.sort((c,x)=>c.x-x.x)),p.flat()}function Sf(e,t,o){const r=Yo(e);if(!r)return null;const d={minX:r.minX-220,minY:r.minY-180,maxX:r.maxX+220,maxY:r.maxY+180},p=Math.max(1,d.maxX-d.minX),m=Math.max(1,d.maxY-d.minY),y=Math.min((Wo-Xa*2)/p,(Ho-Xa*2)/m),c=(j,P)=>({x:Xa+(j-d.minX)*y,y:Xa+(P-d.minY)*y}),x={left:(0-t.x)/t.scale,top:(0-t.y)/t.scale,right:(o.width-t.x)/t.scale,bottom:(o.height-t.y)/t.scale},v=c(x.left,x.top),L=c(x.right,x.bottom);return{bounds:d,scale:y,project:c,nodes:e.map(j=>{const P=c(j.x,j.y);return{id:j.id,kind:j.kind,x:P.x,y:P.y,width:Math.max(2,j.width*y),height:Math.max(2,j.height*y),selected:!1}}),viewport:{x:de(v.x,0,Wo),y:de(v.y,0,Ho),width:de(L.x-v.x,4,Wo),height:de(L.y-v.y,4,Ho)}}}function kf(e,t){const o=Math.max(.01,e.scale),r=t.width/o,d=t.height/o,p=Math.max(fh,Math.max(r,d)*bh);return{left:(0-e.x)/o-p,top:(0-e.y)/o-p,right:(t.width-e.x)/o+p,bottom:(t.height-e.y)/o+p}}function $l(e,t){return e.x+e.width>=t.left&&e.x<=t.right&&e.y+e.height>=t.top&&e.y<=t.bottom}function Fl(e){const t=Math.min(e.startX,e.currentX),o=Math.min(e.startY,e.currentY),r=Math.max(e.startX,e.currentX),d=Math.max(e.startY,e.currentY);return{left:t,top:o,right:r,bottom:d,width:r-t,height:d-o}}function wf(e,t){const o=Math.max(.01,t.scale);return{left:(e.left-t.x)/o,top:(e.top-t.y)/o,right:(e.right-t.x)/o,bottom:(e.bottom-t.y)/o}}function Ul(e){const t=new Date().toISOString(),o=H("board"),r=H("node");return{id:o,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 vf(e){const t=new Date().toISOString();return{id:H("board"),name:`Template Studio ${jf(new Date)}`,updatedAt:t,settings:e,source:{kind:"localStorage",loadedAt:t},nodes:[],edges:[]}}function jf(e){const t=`${e.getMonth()+1}`.padStart(2,"0"),o=`${e.getDate()}`.padStart(2,"0"),r=`${e.getHours()}`.padStart(2,"0"),d=`${e.getMinutes()}`.padStart(2,"0");return`${t}.${o} ${r}:${d}`}function If(e){return`${e.sourceKind==="localBridge"?"LocalBridge copy":"React board"} / ${e.nodeCount} nodes / ${wr(e.updatedAt)}`}function Zn(e,t){const o=e.trim();return o.length<=t?o:`${o.slice(0,t)}...`}function Nf(e){return e==="Fast"?"low":e==="Deep"?"high":"medium"}function Wr(e){var t,o,r;return String(((t=e.metadata)==null?void 0:t.AutomationNodeKind)||((o=e.metadata)==null?void 0:o.AutomationTemplateKey)||((r=e.metadata)==null?void 0:r.AutomationInferredKind)||"").trim().toLowerCase()}function Hr(e){return e==="image-generate"||e==="video-generate"?zr[e]:null}function Ka(e){var t;return String(((t=e.metadata)==null?void 0:t.SemanticType)||"").trim()===Ed}function Af(e,t){const o=zr[t],r=Qn(e,o.mode);return{...Vr(e,o.mode)??{},Source:"toolbar-business-automation",SemanticType:Ed,AutomationNodeKind:o.kind,AutomationNodeLabel:o.title,AutomationNodeDescription:`${o.tag} prepared as a spec-only, review-gated media automation node.`,AutomationGraphSchemaVersion:"react-media-spec@1",AutomationTemplateKey:o.kind,AutomationInferredKind:o.kind,AutomationInferredRole:"Media Spec",AutomationToolPolicy:"spec-only",AutomationToolHints:`AI.LLM, ${o.toolHint}, HumanReview.Gate`,AutomationOutputType:o.outputType,AutomationApprovalPolicy:"review-before-generate",AutomationRequiredEvidence:"false",AutomationExternalActionPolicy:"spec-only-until-review",AutomationResultPolicy:"snapshot-per-run",AutomationRunState:"idle",AutomationRunCount:"0",AutomationInstruction:o.body,AutomationLastOutput:"",AutomationLastRunError:"",AutomationLastRunStatus:"not-run",AutomationLastRunStatusLabel:"Not run",AutomationLastRunSourceMode:"",AutomationLastRunEvidenceCount:"0",AutomationLastRunIsFallback:"false",AutomationLastRunIsPartial:"false",AutomationLastRunToolsUsed:"",AutomationLastRunToolWarnings:"",MediaGenerationContract:"spec-only-until-review",MediaGenerationMedium:o.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 Vn(e,t){var r,d,p,m,y;if(!Ka(e))return;const o=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??((p=e.metadata)==null?void 0:p.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:o,...t.runState==="completed"?{AutomationLastRunAtUtc:new Date().toISOString()}:{}}}function Mf(){return{Source:"toolbar-agent-command",SemanticType:Sh,AgentCommandId:H("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 Rf(){return{Source:"toolbar-code-note",SemanticType:kh,CodeNoteId:H("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 Tf(e,t){var r,d,p,m;const o=t?Hr(Wr(t)):null;if(o){const y=o.mode.toLowerCase();return[`Task: ${e}`,"",`Run Result: ${o.title}`,`Node: ${o.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)||((p=t==null?void 0:t.metadata)==null?void 0:p.AspectPresetId)||"auto"}`,`- Requested size: ${((m=t==null?void 0:t.metadata)==null?void 0:m.RequestedSize)||"auto"}`,"","Prompt draft:",e].join(`
34
- `)}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(`
35
- `)}function Lf(e,t){const o=e.result||"",r=o.slice(0,Sr),d=`${e.title||"AI Task"} result`;return{id:H("node"),kind:"markdown",title:d.slice(0,90),body:r,x:t.x,y:t.y,width:440,height:de(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(o.length>Sr),AdapterState:"local-reference"}}}function Ef(e,t){const o=Zn(e.result||"",900);return{id:H("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:",o||"(No result preview available.)"].join(`
36
- `),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 zl(e,t,o){var y,c,x,v,L;const r=Hr(Wr(t)),d=new Set(e.edges.filter(j=>j.to===t.id||j.from===t.id).flatMap(j=>[j.from,j.to]).filter(j=>j!==t.id)),p=e.nodes.filter(j=>d.has(j.id)).slice(0,8),m=p.length>0?p.map(j=>[`### ${j.title||j.kind}`,`Type: ${j.kind}`,Zn(j.result||j.body||"",1200)].join(`
37
- `)).join(`
38
-
39
- `):"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.",Vi(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: ${((c=t.metadata)==null?void 0:c.MediaModel)||"adapter-gated"}`,`Aspect: ${((x=t.metadata)==null?void 0:x.AspectLabel)||((v=t.metadata)==null?void 0:v.AspectPresetId)||"auto"}`,`Requested size: ${((L=t.metadata)==null?void 0:L.RequestedSize)||"auto"}`,"","Instruction:",Zn(o,4e3),"","Linked context:",m,"","Required sections:","- Subject","- Visual style","- Composition or scene","- Constraints","- Business use case","- Final generation prompt"].join(`
40
- `):["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.",Vi(e.settings.appLanguage),"",`Board: ${e.name}`,`Task node: ${t.title}`,"","Instruction:",Zn(o,4e3),"","Linked context:",m].join(`
41
- `)}function Od(e,t){const o=e.x-t.x;if(Math.abs(o)>1)return o;const r=e.y-t.y;return Math.abs(r)>1?r:String(e.title||e.id).localeCompare(String(t.title||t.id))}function Ir(e){return[...e].sort(Od)}function Pf(e,t){const o=new Map(e.nodes.filter(v=>v.kind==="ai-task").map(v=>[v.id,v])),r=new Set([...t].filter(v=>o.has(v))),d=new Map,p=new Map;for(const v of r)d.set(v,new Set),p.set(v,0);for(const v of e.edges){if(!r.has(v.from)||!r.has(v.to)||v.from===v.to)continue;const L=d.get(v.from);!L||L.has(v.to)||(L.add(v.to),p.set(v.to,(p.get(v.to)??0)+1))}const m=[],y=new Set,c=Ir([...r].filter(v=>(p.get(v)??0)===0).map(v=>o.get(v)));for(;c.length>0;){const v=c.shift();if(y.has(v.id))continue;y.add(v.id),m.push(v);const L=[...d.get(v.id)??[]].map(j=>o.get(j)).filter(j=>!!j);for(const j of L)p.set(j.id,Math.max(0,(p.get(j.id)??0)-1)),(p.get(j.id)??0)===0&&c.push(j);c.sort(Od)}const x=Ir([...r].filter(v=>!y.has(v)).map(v=>o.get(v)).filter(Boolean));return[...m,...x]}function Nr(e,t){var m,y;const o=new Set(e.nodes.filter(c=>c.kind==="ai-task").map(c=>c.id));if(!o.has(t))return[];const r=new Map;for(const c of o)r.set(c,new Set);for(const c of e.edges)!o.has(c.from)||!o.has(c.to)||((m=r.get(c.from))==null||m.add(c.to),(y=r.get(c.to))==null||y.add(c.from));const d=new Set,p=[t];for(;p.length>0;){const c=p.pop();if(!d.has(c)){d.add(c);for(const x of r.get(c)??[])d.has(x)||p.push(x)}}return Pf(e,d)}function _f(e){const t=new Set(e.nodes.filter(d=>d.kind==="ai-task").map(d=>d.id)),o=new Set(t),r=[];for(const d of Ir(e.nodes.filter(p=>p.kind==="ai-task"))){if(!o.has(d.id))continue;const p=Nr(e,d.id);for(const m of p)o.delete(m.id);r.push(p)}return r}function Qn(e,t){const o=Xl(t,e),r=t==="Image"?e.imageRouterImageAspectPresetId:e.imageRouterVideoAspectPresetId,d=nr(t,o,r);return{mode:t,model:o,aspect:d,aspectOptions:tm(o,t),requestedSize:or(d)}}function Vr(e,t){const o=Qn(e,t);return{InputMode:t,AppLanguage:Kl(e.appLanguage),MediaPromptLanguageInstruction:am(e.appLanguage),AdapterState:"adapter-gated",MediaModel:o.model.id,MediaProvider:o.model.provider,AspectPresetId:o.aspect.id,AspectLabel:o.aspect.label,RequestedSize:o.requestedSize}}function $d(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 Df(e,t){const o=Math.max(.01,e.scale),r=Math.max(1,t.width/o/2),d=Math.max(1,t.height/o/2);return{centerX:(t.width/2-e.x)/o,centerY:(t.height/2-e.y)/o,halfWidth:r,halfHeight:d}}function Bf(e,t,o,r=8){if(!t.trim())return[];const d=rg($d(e)),p=new Map(e.map(m=>[m.id,m]));return ig(d,t,{limit:r,viewport:o}).hits.map(m=>p.get(m.nodeId)).filter(m=>!!m)}function Wl(e,t,o="none"){const r=new Set(t.nodes.map(p=>p.id)),d=e.filter((p,m)=>r.has(p)&&e.indexOf(p)===m);return d.length>0||o==="none"?d:t.nodes[0]?[t.nodes[0].id]:[]}function Hl(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('input,textarea,select,[contenteditable="true"],[contenteditable=""]'):!1}function Of(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('button,a,[role="button"],[role="tab"],summary'):!1}function Oo(e){const t=e;if(!t)return null;const o=Number(t.x),r=Number(t.y),d=Number(t.scale);return!Number.isFinite(o)||!Number.isFinite(r)||!Number.isFinite(d)?null:{x:o,y:r,scale:de(d,Uo,zo)}}function ya(e){return typeof e=="string"?e.trim():""}function $o(e,t=34){const o=ya(e);if(!o)return"workspace";const p=o.replace(/\\/g,"/").split("/").filter(Boolean).slice(-2).join("/")||o;return p.length<=t?p:`...${p.slice(-(t-3))}`}function $f(){try{const e=window.localStorage.getItem(Md),t=e?JSON.parse(e):[];return Array.isArray(t)?t.map(ya).filter(Boolean).filter((o,r,d)=>d.findIndex(p=>p.toLowerCase()===o.toLowerCase())===r).slice(0,Rd):[]}catch{return[]}}function Ff(e){const t=e.map(ya).filter(Boolean).filter((o,r,d)=>d.findIndex(p=>p.toLowerCase()===o.toLowerCase())===r).slice(0,Rd);try{window.localStorage.setItem(Md,JSON.stringify(t))}catch{}return t}function Vl(e,t){return Ff([e,...t.filter(o=>o.toLowerCase()!==e.toLowerCase())])}function Qf({navigate:e,onSidebarActionsChange:t}){var xi,Ci,Si,ki,wi,vi,ji,Ii,Ni,Ai,Mi,Ri,Ti,Li,Ei;const[o,r]=g.useState(()=>Gi(Oi(Ki(ju(Di))))),[d,p]=g.useState([]),[m,y]=g.useState([]),[c,x]=g.useState(["node-agent-command"]),[v,L]=g.useState(""),[j,P]=g.useState(""),[V,F]=g.useState(0),[B,X]=g.useState([]),[ee,me]=g.useState(0),[be,Se]=g.useState("idle"),[pe,Ve]=g.useState("booting"),[tt,at]=g.useState(null),[ce,G]=g.useState(null),[oe,J]=g.useState(null),[ft,O]=g.useState(null),[nt,U]=g.useState(null),[te,Ca]=g.useState({...Ha}),[fe,ot]=g.useState(()=>({width:window.innerWidth,height:window.innerHeight})),[St,qt]=g.useState(!1),[Jt,so]=g.useState(()=>localStorage.getItem(xl)==="true"),[Oe,ro]=g.useState("local"),[Et,bt]=g.useState([]),[xe,Q]=g.useState(mt()?"idle":"blocked"),[ss,Ae]=g.useState(null),[qe,re]=g.useState(mt()?null:"Hosted LocalBridge access is off."),[Me,$e]=g.useState(null),[io,ge]=g.useState(null),[De,Pt]=g.useState(()=>$f()),[kt,we]=g.useState(!1),[st,Be]=g.useState(null),[lo,Sa]=g.useState(null),[ve,Fe]=g.useState(!1),[_t,co]=g.useState("ready"),[ka,uo]=g.useState("Saved in this browser."),[Ye,Ue]=g.useState(()=>ut()),Le=g.useMemo(()=>wh(),[]),[wa,mo]=g.useState(()=>_s()),he=Le.cloudBoards.canAttempt&&(wa==null?void 0:wa.source)==="supabase-provider-session",[va,po]=g.useState([]),[an,Re]=g.useState(null),[yt,Dt]=g.useState(!1),[ja,go]=g.useState(null),Ee=g.useMemo(()=>Ig({storedMode:Oe,cloudConfigured:!0,cloudSessionAvailable:he,cloudAccess:he?{planKey:"provider",entitlementStatus:"active",currentBoardCount:va.length,cloudBoardLimit:Number.MAX_SAFE_INTEGER,lockedBoardCount:0,canCreateBoard:!0}:null,bridgeProviderConfigured:!0,bridgeReachable:xe==="connected",hostedWebApp:!mt()&&!za(),hostedLocalBridgeAccessEnabled:za(),browserProviderConfigured:!0,browserLocalAvailable:!0,browserLocalAvailableWhenEmpty:!0,embeddedProviderConfigured:!1,supportsEmbeddedLocal:!1}),[he,va.length,xe,Oe]),[nn,on]=g.useState(null),[sn,Ia]=g.useState(""),[wt,rn]=g.useState(null),[ln,Bt]=g.useState(null),[Ge,dn]=g.useState(!1),[Zt,se]=g.useState(!1),[Je,rt]=g.useState(null),[vt,jt]=g.useState(null),[xt,rs]=g.useState(!1),[cn,ho]=g.useState(!1),un=g.useRef(new Map),Qt=g.useMemo(()=>Ts(o.settings.appLanguage),[o.settings.appLanguage]),[mn,It]=g.useState(!1),[fo,ea]=g.useState(!1),[Ct,bo]=g.useState("business"),[Ze,pn]=g.useState(()=>{var s;const a=Dn("business",o.settings.appLanguage)??Ts(o.settings.appLanguage)[0];return((s=Ao(a))==null?void 0:s.id)??null}),[Nt,ta]=g.useState(()=>{const a=Dn("business",o.settings.appLanguage)??Ts(o.settings.appLanguage)[0],s=Ao(a);return Bn(On(a,s==null?void 0:s.id,o.settings.appLanguage))}),[gn,it]=g.useState(null),[Na,Ot]=g.useState(!1),[Ce,hn]=g.useState(()=>Sl(o.id,o.name)),[ue,Qe]=g.useState(null),[yo,is]=g.useState(null),[ls,lt]=g.useState(!1),[$t,aa]=g.useState({}),[Aa,Ft]=g.useState(null),Ma=g.useMemo(()=>{var l,u;const a=Ye.find(h=>h.id===o.id),s={id:o.id,name:o.name,updatedAt:o.updatedAt,nodeCount:o.nodes.length,edgeCount:o.edges.length,sourceKind:(l=o.source)==null?void 0:l.kind,sourceBoardId:(u=o.source)==null?void 0:u.boardId,order:(a==null?void 0:a.order)??-1},i=new Map(Ye.map(h=>[h.id,h]));return i.set(o.id,{...a,...s}),Array.from(i.values()).sort((h,C)=>{const S=typeof h.order=="number"?h.order:Number.MAX_SAFE_INTEGER,M=typeof C.order=="number"?C.order:Number.MAX_SAFE_INTEGER;return S!==M?S-M:String(C.updatedAt||"").localeCompare(String(h.updatedAt||""))}).slice(0,7)},[o,Ye]),Z=g.useMemo(()=>Dn(Ct,o.settings.appLanguage)??Qt[0],[Ct,o.settings.appLanguage,Qt]),ze=g.useMemo(()=>Z?On(Z,Ze,o.settings.appLanguage):null,[Z,o.settings.appLanguage,Ze]),Ra=!!(Z&&(Z.options.length>0||!Z.quickCreateTemplateId)),fn=g.useMemo(()=>Mo(ze,Nt),[ze,Nt]),N=g.useRef(o),Y=g.useRef(c),ae=g.useRef({...Ha}),bn=g.useRef(null),At=g.useRef(null),Ta=g.useRef(null),La=g.useRef(null),yn=g.useRef(null),xn=g.useRef(null),Ea=g.useRef(new Map),Cn=g.useRef(new Ag),na=g.useRef(0),Sn=g.useRef(null),Pa=g.useRef(0),oa=g.useRef(null),Ut=g.useRef(!1),Pe=g.useRef(0),Te=g.useRef(0),_a=g.useRef(),kn=g.useRef(),wn=g.useRef(null),sa=g.useRef(null),ra=g.useRef(0),Da=g.useRef(null),zt=g.useRef(0),Ba=g.useRef(!1),dt=g.useCallback(a=>{Ba.current=a,rs(a)},[]);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=()=>mo(_s());return window.addEventListener("storage",a),window.addEventListener("focus",a),()=>{window.removeEventListener("storage",a),window.removeEventListener("focus",a)}},[]),g.useEffect(()=>{const a=()=>{const s=!!document.fullscreenElement;dt(s),f.emit("canvas.fullscreen.changed",{active:s})};return document.addEventListener("fullscreenchange",a),()=>document.removeEventListener("fullscreenchange",a)},[dt]),g.useEffect(()=>{const a=new Worker(new URL("/assets/mindCanvasSearchWorker-BzPMsHOB.js",import.meta.url),{type:"module"});return oa.current=a,a.onmessage=s=>{var h,C,S,M,k,R,E,_,A;const i=s.data;if(i.type==="READY"){Ut.current=!0,Ve("ready"),f.emit("search.worker.ready");return}if(i.type!=="SEARCH_RESULT")return;if(i.seq!==Pa.current){f.emit("async.staleIgnored",{path:"search.worker",seq:i.seq});return}const l=new Map(N.current.nodes.map(w=>[w.id,w])),u=i.hits.map(w=>l.get(w.nodeId)).filter(w=>!!w);X(u),me(0),Se("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:(S=i.profile)==null?void 0:S.candidateCount,rankedCount:(M=i.profile)==null?void 0:M.rankedCount,viewportBoosted:(k=i.profile)==null?void 0:k.viewportBoosted,boostedCount:(R=i.profile)==null?void 0:R.boostedCount,indexedTokenCount:(E=i.profile)==null?void 0:E.indexedTokenCount,indexedPrefixCount:(_=i.profile)==null?void 0:_.indexedPrefixCount,indexedNGramCount:(A=i.profile)==null?void 0:A.indexedNGramCount})},a.onerror=s=>{Ut.current=!1,Ve("failed"),f.emit("search.worker.failed",{message:s.message})},()=>{a.terminate(),oa.current=null,Ut.current=!1}},[]),g.useEffect(()=>{const a=()=>ot({width:window.innerWidth,height:window.innerHeight});return window.addEventListener("resize",a),()=>window.removeEventListener("resize",a)},[]),g.useEffect(()=>(N.current=o,co("syncing"),uo("Saving board state to this browser."),window.clearTimeout(_a.current),_a.current=window.setTimeout(()=>{const a=Tt(N.current);Ue(ut()),co(a?"ready":"error"),uo(a?"Saved in this browser.":"Local browser storage failed.")},280),()=>window.clearTimeout(_a.current)),[o]),g.useEffect(()=>{const a=oa.current;if(!a)return;const s=window.setTimeout(()=>{a.postMessage({type:"REBUILD_BOARD",boardId:o.id,nodes:$d(o.nodes)}),f.emit("search.worker.synced",{boardId:o.id,count:o.nodes.length})},160);return()=>window.clearTimeout(s)},[o.id,o.nodes]),g.useEffect(()=>{Y.current=c},[c]),g.useEffect(()=>{f.emit("canvas.gridMode.applied",{boardId:o.id,gridType:Js(o.settings.gridType),gridSnap:o.settings.gridSnap??!0})},[o.id,o.settings.gridSnap,o.settings.gridType]),g.useEffect(()=>()=>{document.body.classList.remove("is-selecting")},[]);const b=g.useCallback((a,s=!0)=>{ae.current=a,Ta.current&&(Ta.current.style.transform=`translate3d(${a.x}px, ${a.y}px, 0) scale(${a.scale})`),At.current&&(At.current.style.setProperty("--grid-x",`${a.x}px`),At.current.style.setProperty("--grid-y",`${a.y}px`),At.current.style.setProperty("--grid-small",`${24*a.scale}px`),At.current.style.setProperty("--grid-large",`${144*a.scale}px`)),window.clearTimeout(kn.current),kn.current=window.setTimeout(()=>Ca(a),hh),s&&f.emit("camera.patch",{...a})},[]),T=g.useCallback(async()=>{var i;const a=++Pe.current;if(Q("checking"),Ae(null),re(null),f.emit("runtimeStatus.bridge.refresh.requested",{source:"mindcanvas"}),!mt()){Q("blocked"),Ae(null),bt([]),re("Hosted LocalBridge access is off."),$e(null),ge("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:"refresh",reason:"hosted-access-off"});return}const s=await ga();if(a===Pe.current){if(Ae(s.status??null),s.state!=="connected"){Q(s.state),bt([]),re(s.message||"LocalBridge is unavailable."),$e(null),ge(s.message||"LocalBridge is unavailable.");return}try{const[l,u]=await Promise.all([$i(s.baseUrl),gp(s.baseUrl)]);if(a!==Pe.current)return;const h=ya(l.rootPath||((i=s.status)==null?void 0:i.workspace));$e(h||null),ge(h?null:"LocalBridge workspace path is unavailable."),h&&Pt(C=>Vl(h,C)),Q("connected"),bt(u),re(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!==Pe.current)return;Q("unavailable"),bt([]);const u=l instanceof Error?l.message:String(l);re(u),ge(u)}}},[]);g.useEffect(()=>{mt()&&T()},[T]),g.useEffect(()=>{Jt&&(qt(!0),f.emit("mindcanvas.projectGallery.opened",{source:"startup"}))},[Jt]);const ie=g.useCallback(()=>{qt(a=>{const s=!a;return s&&Et.length===0&&xe!=="checking"&&T(),f.emit(s?"mindcanvas.projectGallery.opened":"mindcanvas.projectGallery.closed",{source:"top-tab"}),s})},[Et.length,xe,T]),je=g.useCallback(a=>{qt(s=>(s&&f.emit("mindcanvas.projectGallery.closed",{source:a}),!1))},[]),Wt=g.useCallback(a=>{so(a),localStorage.setItem(xl,String(a)),f.emit("mindcanvas.projectGallery.startupPreference",{enabled:a})},[]),ct=g.useCallback(async(a="manual")=>{if(mo(_s()),!he){const s=Le.cloudBoards.canAttempt?"sign-in-required":Le.cloudBoards.mode;Re(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}Dt(!0),Re(null);try{const s=await kp(Xs());po(s),Re(s.length>0?`Loaded ${s.length} cloud board${s.length===1?"":"s"}.`:"No cloud boards yet.")}catch(s){Re(s instanceof Error?s.message:String(s))}finally{Dt(!1)}},[he,Le.cloudBoards.canAttempt,Le.cloudBoards.mode]),ia=g.useCallback(a=>{ro(a),f.emit("projectStorage.tab",{tab:a}),a==="cloud"&&ct("tab")},[ct]),Ht=g.useCallback(()=>{Ou(!0),f.emit("runtimeStatus.bridge.hostedAccess.enabled"),T()},[T]),la=g.useCallback(a=>{$e(a),Pt(s=>Vl(a,s))},[]),Fd=g.useCallback(async(a="manual")=>{var i;const s=++Te.current;if(ge(null),f.emit("projectStorage.workspace.refresh.requested",{source:a}),!mt()){$e(null),ge("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:a,reason:"hosted-access-off"});return}try{const l=await ga();if(s!==Te.current)return;if(Ae(l.status??null),l.state!=="connected"){Q(l.state),$e(null),ge(l.message||"LocalBridge is unavailable.");return}const u=await $i(l.baseUrl);if(s!==Te.current)return;const h=ya(u.rootPath||((i=l.status)==null?void 0:i.workspace));ge(h?null:"LocalBridge workspace path is unavailable."),h&&la(h),f.emit("projectStorage.workspace.refresh",{source:a,path:h||null})}catch(l){if(s!==Te.current)return;ge(l instanceof Error?l.message:String(l))}},[la]),ds=g.useCallback(async(a,s)=>{const i=ya(a);if(!i||kt)return;const l=++Te.current;if(we(!0),ge("Switching LocalBridge workspace..."),f.emit("projectStorage.workspace.set.requested",{source:s,path:i}),!mt()){$e(null),ge("Hosted LocalBridge access is off."),we(!1),f.emit("projectStorage.workspace.blocked",{source:s,reason:"hosted-access-off"});return}try{const u=await ga();if(l!==Te.current)return;if(Ae(u.status??null),u.state!=="connected"){Q(u.state),ge(u.message||"LocalBridge is unavailable.");return}const h=$n(u.status);if(!h){Q("unavailable"),ge("LocalBridge write token is unavailable.");return}const C=await $u(i,h,u.baseUrl);if(l!==Te.current)return;const S=ya(C.workspace||i);la(S),Q("connected"),ge(`Local workspace set to ${$o(S)}.`),f.emit("projectStorage.workspace.set",{source:s,path:S}),T()}catch(u){if(l!==Te.current)return;Q("unavailable"),ge(u instanceof Error?u.message:String(u))}finally{l===Te.current&&we(!1)}},[kt,T,la]),Ud=g.useCallback(async()=>{const a=++Te.current;if(we(!0),ge("Opening folder picker..."),f.emit("projectStorage.workspace.browse.requested",{path:Me||null}),!mt()){$e(null),ge("Hosted LocalBridge access is off."),we(!1),f.emit("projectStorage.workspace.blocked",{source:"browse",reason:"hosted-access-off"});return}try{const s=await ga();if(a!==Te.current)return;if(Ae(s.status??null),s.state!=="connected"){Q(s.state),ge(s.message||"LocalBridge is unavailable.");return}const i=$n(s.status),l=await Fu(Me,i,s.baseUrl);if(a!==Te.current)return;if(l.canceled||!l.success||!l.path){ge("Workspace selection cancelled."),f.emit("projectStorage.workspace.browse.cancelled");return}f.emit("projectStorage.workspace.browse",{path:l.path}),we(!1),await ds(l.path,"browse")}catch(s){if(a!==Te.current)return;ge(s instanceof Error?s.message:String(s))}finally{a===Te.current&&we(!1)}},[ds,Me]),zd=g.useCallback(async()=>{var s,i;const a=++Pe.current;if(Fe(!0),re(null),(s=N.current.source)!=null&&s.partialImport){re("This imported board came from a partial original payload, so export is blocked to avoid data loss."),Fe(!1);return}if((i=N.current.source)!=null&&i.truncated){re("This imported board was truncated, so export is blocked to avoid data loss."),Fe(!1);return}if(!mt()){Q("blocked"),Ae(null),re("Hosted LocalBridge access is off."),Fe(!1);return}try{const l=await ga();if(a!==Pe.current)return;if(Ae(l.status??null),l.state!=="connected"){Q(l.state),re(l.message||"LocalBridge is unavailable.");return}const u=$n(l.status);if(!u){Q("unavailable"),re("LocalBridge write token is unavailable.");return}const h=await fp(N.current,ae.current,u,l.baseUrl);if(a!==Pe.current)return;const C={...N.current,nodes:h.nodes,source:h.source,updatedAt:h.metadata.UpdatedAt||new Date().toISOString()};r(C),Tt(C),Ue(ut()),Q("connected"),bt(S=>[h.metadata,...S.filter(M=>M.Id!==h.metadata.Id)]),re(`Exported "${Xe(h.metadata.Title)}" to LocalBridge.`)}catch(l){if(a!==Pe.current)return;Q("unavailable"),re(l instanceof Error?l.message:String(l))}finally{a===Pe.current&&Fe(!1)}},[]),We=g.useCallback((a,s,i={})=>{const l=Ki(a),u=Oi(l),h=Gi(u);p(C=>Wa(C,N.current,{description:"Activate board"})),y([]),r(h),x(h.nodes[0]?[h.nodes[0].id]:[]),J(null),U(null),G(null),je("board-activate"),f.emit(s,{boardId:h.id,...i})},[je]),Yr=g.useCallback(()=>{const a=Ul(N.current.settings);We(a,"board.local.create"),b({x:540,y:210,scale:1})},[We,b]),Wd=g.useCallback(async a=>{if(!he){Re("Login with Supabase is required before cloud boards can be opened."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:"load-board"});return}go(a.id),Re(null);try{const s=await wp(Xs(),a.id,N.current.settings);if(!s){Re("Cloud board was not found or is not available to this user.");return}We(s,"board.cloud.switch",{sourceBoardId:a.id}),b({x:540,y:210,scale:1})}catch(s){Re(s instanceof Error?s.message:String(s))}finally{go(null)}},[We,b,he]),xo=g.useCallback(async(a,s)=>{if(!he){Re("Login with Supabase is required before cloud boards can be saved."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:s});return}Dt(!0),Re(null);try{const i=await vp(Xs(),a,ae.current);if(!i){Re("Cloud board save did not return a board.");return}const l=new Date().toISOString(),u={...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}};r(u),Tt(u),Ue(ut()),po(h=>[i,...h.filter(C=>C.id!==i.id)]),Re(`Saved "${Xe(i.name)}" to cloud.`)}catch(i){Re(i instanceof Error?i.message:String(i))}finally{Dt(!1)}},[he]),Hd=g.useCallback(()=>{xo(N.current,"save-current")},[xo]),Vd=g.useCallback(()=>{const a=Ul(N.current.settings);xo(a,"new-cloud-board")},[xo]),Yd=g.useCallback(()=>{var l;if(!Z)return;if(Z.options.length>0||!Z.quickCreateTemplateId){const u=ae.current,h={x:(window.innerWidth/2-u.x)/u.scale,y:(window.innerHeight/2-u.y)/u.scale},C=N.current.nodes,S=C.length?Math.max(...C.map(A=>A.x+A.width)):h.x-280-Do,M=C.length?Math.min(...C.map(A=>A.y)):h.y-310,k=Uu(Z,Ze,S+Do,M,Nt,N.current.settings.appLanguage);r(A=>{var w;return p(z=>Wa(z,A,{description:"Create template card"})),y([]),f.emit("templateCard.node.create",{id:k.id,launcherId:Z.id,optionId:((w=k.metadata)==null?void 0:w.templateLauncherSelectedOptionId)??null,source:"launcher-panel"}),{...A,nodes:[...A.nodes,k],updatedAt:new Date().toISOString()}}),x([k.id]);const R=Math.min(ae.current.scale,de((window.innerHeight-190)/k.height,.72,1)),E=Math.max(320,window.innerHeight-180);b({...ae.current,scale:R,x:window.innerWidth/2-(k.x+k.width/2)*R,y:48+E/2-(k.y+k.height/2)*R}),O(k.id),window.setTimeout(()=>O(A=>A===k.id?null:A),1e3),It(!1),it(null);const _="Template card added to the current canvas.";Be(_),window.setTimeout(()=>{Be(A=>A===_?null:A)},2200),f.emit("templateCard.node.focus",{nodeId:k.id,launcherId:Z.id});return}const s=Mo(ze,Nt);if(s){it(s),f.emit("template.validation.failed",{launcherId:Z.id,optionId:Ze,templateId:(ze==null?void 0:ze.id)??null,message:s});return}const i=zu(Z,Ze,Nt,N.current.settings);if(!i){const u="Template could not be created.";it(u),f.emit("template.validation.failed",{launcherId:Z.id,optionId:Ze,templateId:(ze==null?void 0:ze.id)??null,message:u});return}We(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}),b({x:540,y:210,scale:1}),It(!1),it(null)},[We,ze,Z,b,Ze,Nt]),Gr=g.useCallback(a=>{if(a===N.current.id){je("stored-board-current");return}const s=Iu(a);s&&(We(s,"board.local.switch"),b({x:540,y:210,scale:1}))},[We,b,je]),cs=g.useCallback((a,s="unknown")=>{if(a===N.current.id){f.emit("board.tabs.closeIgnored",{boardId:a,source:s,reason:"active-board"});return}f.emit("board.tabs.close",{boardId:a,source:s}),Nu(a),Ue(ut())},[]),Gd=g.useCallback((a,s)=>{if(!a||!s||a===s)return;Tt(N.current);const i=ut(),l=Ma.map(R=>R.id),u=l.indexOf(a),h=l.indexOf(s);if(u<0||h<0)return;const C=[...l],S=C.splice(u,1)[0];if(!S)return;C.splice(h,0,S);const M=i.map(R=>R.id).filter(R=>!C.includes(R)),k=Au([...C,...M]);Ue(k),f.emit("board.tabs.drop",{sourceId:a,targetId:s,visibleIds:C})},[Ma]),Kd=g.useCallback(async a=>{const s=++Pe.current;Sa(a.Id),re(null);try{const i=await bp(a,N.current.settings);if(s!==Pe.current)return;We(i,"board.localBridge.switch",{sourceBoardId:a.Id});const l=cr(a.LastCameraX,a.LastCameraY,a.LastCameraZ);b(l?{...l,scale:de(l.scale,Uo,zo)}:{x:540,y:210,scale:1})}catch(i){if(s!==Pe.current)return;re(i instanceof Error?i.message:String(i))}finally{s===Pe.current&&Sa(null)}},[We,b]),Xd=g.useCallback(()=>{var a;(a=xn.current)==null||a.click()},[]),qd=g.useCallback(async a=>{var i;const s=Array.from(a??[]).filter(l=>/\.json$/i.test(l.name));if(s.length===0){Be("Choose a React or MindExec board JSON file."),window.setTimeout(()=>Be(null),1800);return}try{const l=await Promise.all(s.map(async R=>({file:R,payload:JSON.parse(await R.text())}))),u=l.find(ar),h=yf(l),C=l.find(R=>!ar(R)&&tr(R.payload))??l.find(R=>!ar(R)&&sd(R.payload)>0);if(!C)throw new Error("No board JSON file was found.");const S=tr(C.payload)?null:xf(C,h),M=S?cr(S.metadata.LastCameraX,S.metadata.LastCameraY,S.metadata.LastCameraZ):null,k=tr(C.payload)?bf(C.payload,C.file.name):id(C.payload,N.current.settings,{boardId:(S==null?void 0:S.metadata.Id)??Qo(C.file.name),title:(S==null?void 0:S.metadata.Title)||Qo(C.file.name),updatedAt:S==null?void 0:S.metadata.UpdatedAt,layoutPayload:u==null?void 0:u.payload,cameraBookmarks:S==null?void 0:S.metadata.CameraBookmarks});if(k.nodes.length===0)throw new Error("The selected file did not contain any importable board nodes.");We(k,"board.import.file",{fileName:C.file.name,layoutFileName:(u==null?void 0:u.file.name)??null,metadataFileName:(S==null?void 0:S.fileName)??null,nodes:k.nodes.length,edges:k.edges.length,sourceKind:((i=k.source)==null?void 0:i.kind)??null,originalBoardId:(S==null?void 0:S.metadata.Id)??null,cameraRestored:!!M}),Tt(k),Ue(ut()),b(M?{...M,scale:de(M.scale,Uo,zo)}:{x:540,y:210,scale:1}),Be(`Imported "${Xe(k.name)}".`),window.setTimeout(()=>Be(null),2200)}catch(l){const u=l instanceof Error?l.message:String(l);Be(`Import failed: ${u}`),f.emit("board.import.failed",{message:u}),window.setTimeout(()=>Be(null),3200)}},[We,b]);g.useEffect(()=>{b(ae.current,!1)},[b]);const Ie=g.useCallback((a,s)=>{const i=ae.current;return{x:(a-i.x)/i.scale,y:(s-i.y)/i.scale}},[]),Oa=g.useCallback((a,s)=>{const i=Number.isFinite(a)&&Number.isFinite(s)?{clientX:a,clientY:s}:wn.current??{clientX:window.innerWidth/2,clientY:window.innerHeight/2},l=Ie(i.clientX,i.clientY);return{x:l.x-150,y:l.y-80}},[Ie]),Jd=g.useCallback(a=>{er(a.target)||(wn.current={clientX:a.clientX,clientY:a.clientY})},[]),D=g.useCallback((a,s,i={})=>{r(l=>{p(h=>Wa(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=rm();if(!a)return;const s=Ie(window.innerWidth/2,window.innerHeight/2),{sourceNode:i,itemNodes:l,taskNode:u,edges:h}=im(a,{x:s.x-390,y:s.y-145});if(N.current.nodes.some(C=>{var S;return((S=C.metadata)==null?void 0:S.ToolHandoffId)===a.id})){Yi(a.id),f.emit("tool.handoff.duplicateIgnored",{handoffId:a.id,toolKey:a.toolKey});return}D(C=>({...C,nodes:[...C.nodes,i,...l,u],edges:[...C.edges,...h]}),"tool.handoff.consumed",{handoffId:a.id,toolKey:a.toolKey,createdNodes:2+l.length,resultItems:l.length}),Yi(a.id),x([u.id]),O(u.id),window.setTimeout(()=>O(C=>C===u.id?null:C),1400)},[D,Ie]);const $a=g.useCallback((a,s,i={})=>{r(l=>{const u=a(l);return f.emit(s,i),{...u,updatedAt:new Date().toISOString()}})},[]),us=g.useCallback(a=>{const s=a.slice(0,90);$a(i=>({...i,name:s}),"board.rename",{boardId:N.current.id})},[$a]),ke=g.useCallback((a,s="inline")=>{const i=typeof a.appLanguage=="string"?{...a,appLanguage:Kl(a.appLanguage)}:a;if($a(l=>{const u={...l.settings,...i};if(typeof i.appLanguage=="string"){const h=Wu(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=Hu(i.appLanguage);f.emit("appLanguage.select",{appLanguage:l,source:s})}if(typeof i.model=="string"){const l=Ls(i.model),u=Fi(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={...N.current.settings,...i};lm(l,s)}dm({...N.current.settings,...i})},[$a]),Kr=g.useCallback((a,s)=>{ke({[a]:s},`inline.${String(a)}`)},[ke]),Zd=g.useMemo(()=>Qn(o.settings,"Image"),[o.settings]),Qd=g.useMemo(()=>Qn(o.settings,"Video"),[o.settings]),ec=g.useMemo(()=>Vu(o.settings),[o.settings]),ms=Ls(o.settings.model),vn=Fi(ms),tc=g.useCallback((a,s="bottom-input")=>{const i=Ls(a);ke({model:i},`connection.model.${s}`)},[ke]),ac=g.useCallback((a,s)=>{const i=Yu(a,s),l=Ui(a).find(M=>M.id===i);if(!l)return;const u=N.current.settings,h=a==="Image"?u.imageRouterImageAspectPresetId:u.imageRouterVideoAspectPresetId,C=nr(a,l,h),S=a==="Image"?{imageRouterImageModel:l.id,imageRouterImageAspectPresetId:C.id}:{imageRouterVideoModel:l.id,imageRouterVideoAspectPresetId:C.id};ke(S,`inline.${a.toLowerCase()}Model`),f.emit("media.model.select",{mode:a,model:l.id,aspectPresetId:C.id,requestedSize:or(C)})},[ke]),nc=g.useCallback((a,s)=>{const i=Xl(a,N.current.settings),l=nr(a,i,s),u=a==="Image"?{imageRouterImageAspectPresetId:l.id}:{imageRouterVideoAspectPresetId:l.id};ke(u,`inline.${a.toLowerCase()}Aspect`),f.emit("media.aspect.select",{mode:a,model:i.id,aspectPresetId:l.id,requestedSize:or(l)})},[ke]),Xr=g.useCallback(()=>{dn(!0),f.emit("settings.dialog.open",{boardId:N.current.id})},[]),oc=g.useCallback(()=>{dn(!1),f.emit("settings.dialog.close",{boardId:N.current.id})},[]),qr=g.useCallback(()=>{se(!0),f.emit("promptDebug.open",{boardId:N.current.id})},[]),sc=g.useCallback(()=>{se(!1),f.emit("promptDebug.close",{boardId:N.current.id})},[]);g.useEffect(()=>()=>{t==null||t([])},[t]),g.useEffect(()=>{t&&t([{id:"mindcanvas-ai-settings",label:"AI Settings",description:"Open canvas AI and runtime settings",icon:lr,onClick:Xr,active:Ge,testId:"ai-settings-open"},{id:"mindcanvas-prompt-debug",label:"Prompt Debugger",description:"Inspect prompt and local diagnostics",icon:wm,onClick:qr,active:Zt,testId:"prompt-debug-open"}])},[t,qr,Xr,Zt,Ge]);const rc=g.useCallback(a=>{const s=N.current.settings.appLanguage,i=Dn(a,s);if(!i)return;const l=Ao(i),u=On(i,l==null?void 0:l.id,s);bo(i.id),pn((l==null?void 0:l.id)??null),ta(Bn(u)),it(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})},[]),ic=g.useCallback(()=>{const a=N.current.settings.appLanguage,s=Dn(Ct,a)??Qt[0];if(!s)return;const i=Ao(s,Ze),l=On(s,i==null?void 0:i.id,a);bo(s.id),pn((i==null?void 0:i.id)??null),ta(u=>Object.keys(u).length>0?u:Bn(l)),it(null),Ot(!1),lt(!1),It(!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})},[Ct,Ze,Qt]),lc=g.useCallback(()=>{It(!1),it(null),f.emit("template.launcher.close",{launcherId:Ct})},[Ct]),dc=g.useCallback(a=>{if(!Z)return;const s=On(Z,a,N.current.settings.appLanguage);pn(a),ta(Bn(s)),it(null),f.emit("template.option.select",{launcherId:Z.id,optionId:a,templateId:(s==null?void 0:s.id)??null})},[Z]),cc=g.useCallback((a,s)=>{ta(i=>({...i,[a]:s})),gn&&it(null),f.emit("template.input.patch",{launcherId:Z==null?void 0:Z.id,key:a})},[Z==null?void 0:Z.id,gn]),He=g.useCallback(a=>{is(a),window.setTimeout(()=>{is(s=>s===a?null:s)},2600)},[]),uc=g.useCallback(()=>{It(!1),lt(!1),ea(a=>{const s=!a;return f.emit(s?"templateStudio.chooser.open":"templateStudio.chooser.close",{boardId:N.current.id,studioOpen:Na}),s})},[Na]),Jr=g.useCallback(()=>{ea(!1),f.emit("templateStudio.chooser.close",{boardId:N.current.id})},[]),Zr=g.useCallback(()=>{const a=N.current;It(!1),lt(!1),ea(!1),hn(Sl(a.id,a.name)),Qe(null),Ot(!0),f.emit("templateStudio.open",{boardId:a.id,nodeCount:a.nodes.length})},[]),Co=g.useCallback(a=>{const s=N.current,i=Ro(Ce,s.nodes);Qe(i),kl(s.id,Ce);const l=Tt(s);return Ue(ut()),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},[Ce]),Qr=g.useCallback(()=>{Co("exit"),Ot(!1),ea(!1),lt(!1),Qe(null),f.emit("templateStudio.close",{boardId:N.current.id})},[Co]),mc=g.useCallback(()=>{const a=vf(N.current.settings),s=Fo(a.name);ea(!1),lt(!1),hn(s),Qe(null),Ot(!0),kl(a.id,s),Tt(a),Ue(ut()),We(a,"templateStudio.board.create",{templateId:s.templateId,source:"template-studio-chooser"}),b({x:540,y:210,scale:1}),f.emit("templateStudio.chooser.startNew",{boardId:a.id,templateId:s.templateId}),He("New Template Studio draft board opened.")},[We,b,He]),pc=g.useCallback(()=>{Zr(),f.emit("templateStudio.chooser.convertCurrent",{boardId:N.current.id,nodes:N.current.nodes.length}),He("Current board is now in Template Studio mode.")},[Zr,He]),So=g.useCallback((a,s)=>{hn(i=>{const l={...i,[a]:a==="templateId"?Yn(s):s};return f.emit("templateStudio.draft.patch",{key:a}),l}),Qe(null)},[]),gc=g.useCallback(()=>{const a=Co("save");He(a.issues.length>0?"Template draft saved with manifest issues.":"Template draft and board saved locally.")},[Co,He]),hc=g.useCallback(a=>{const s=Ie(window.innerWidth/2,window.innerHeight/2),i=H("node"),l=zi(a),u=`${a.replace("template.","")}-${Date.now().toString(36)}`,h=a==="template.input",C=h?300:a==="template.prompt"?360:340,S=h?178:a==="template.prompt"?214:190,M={[$.studioNodeType]:a,[$.templateNodeId]:u,[$.templateRole]:a.replace(/^template\./,""),[$.compileTarget]:l,Source:"template-studio"};h&&(M[$.inputKey]=u,M[$.inputType]="text",M[$.inputRequired]="true");const k={id:i,kind:a==="template.prompt"?"ai-task":a==="template.section"?"markdown":"note",title:Es(a),body:h?"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:s.x-C/2,y:s.y-S/2,width:C,height:S,status:a==="template.prompt"?"idle":void 0,tags:["Template Studio",Es(a)],metadata:M};D(R=>({...R,nodes:[...R.nodes,k]}),"templateStudio.node.add",{id:k.id,studioNodeType:a,compileTarget:l}),x([k.id]),Qe(null)},[D,Ie]),ps=g.useCallback(()=>{const a=Ro(Ce,N.current.nodes);return Qe(a),f.emit("templateStudio.compile",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length,issues:a.issues.length}),He(a.issues.length>0?"Template manifest has issues.":"Template manifest compiled."),a},[He,Ce]),fc=g.useCallback(async()=>{const a=ue??Ro(Ce,N.current.nodes);ue||Qe(a);const s=await Gn(a.manifestJson);f.emit("templateStudio.manifest.copy",{templateId:a.template.id,chars:a.manifestJson.length,method:s}),He("Template manifest copied.")},[He,Ce,ue]),bc=g.useCallback(()=>{const a=ps();if(a.issues.length>0){lt(!1),f.emit("templateStudio.test.open.blocked",{templateId:a.template.id,issues:a.issues.length}),He("Fix manifest issues before test create.");return}aa(Bn(a.template)),Ft(null),lt(!0),f.emit("templateStudio.test.open",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length})},[ps,He]),yc=g.useCallback(()=>{lt(!1),aa({}),Ft(null),f.emit("templateStudio.test.close",{templateId:(ue==null?void 0:ue.template.id)??null})},[ue==null?void 0:ue.template.id]),xc=g.useCallback((a,s)=>{aa(i=>({...i,[a]:s})),Aa&&Ft(null),f.emit("templateStudio.test.input.patch",{key:a})},[Aa]),Cc=g.useCallback(()=>{const a=(ue==null?void 0:ue.issues.length)===0?ue:Ro(Ce,N.current.nodes);if(Qe(a),a.issues.length>0){Ft("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=Mo(a.template,$t);if(s){Ft(s),f.emit("templateStudio.test.board.blocked",{templateId:a.template.id,message:s});return}const i=wl(Ce),l=Gu(i,void 0,a.template,$t,N.current.settings);Tt(l.board),Tt(N.current),Ue(ut()),lt(!1),aa({}),He(`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})},[He,Ce,ue,$t]),Sc=g.useCallback((a,s)=>{x(i=>s?i.includes(a)?i.filter(l=>l!==a):[...i,a]:[a]),J(null)},[]),kc=g.useCallback(()=>{var C,S,M,k,R,E,_,A;const i=de(window.innerWidth*.62,282,Math.max(282,window.innerWidth-250-32)),l=de(window.innerHeight*.58,300/2+32,Math.max(300/2+32,window.innerHeight-300/2-96)),u=Ie(i,l),h={id:H("node"),kind:"memo",title:"Agent",body:jh,x:u.x-500/2,y:u.y-300/2,width:500,height:300,tags:["Agent Command","Researcher","Draft"],metadata:Mf()};D(w=>({...w,nodes:[...w.nodes,h]}),"agentCommand.node.add",{id:h.id,semanticType:(C=h.metadata)==null?void 0:C.SemanticType,status:(S=h.metadata)==null?void 0:S.AgentCommandStatus,requestedRole:(M=h.metadata)==null?void 0:M.AgentCommandRequestedRole,adapterState:(k=h.metadata)==null?void 0:k.AdapterState}),f.emit("mindcanvas.agentCommand.add",{id:h.id,semanticType:(R=h.metadata)==null?void 0:R.SemanticType,status:(E=h.metadata)==null?void 0:E.AgentCommandStatus,requestedRole:(_=h.metadata)==null?void 0:_.AgentCommandRequestedRole,adapterState:(A=h.metadata)==null?void 0:A.AdapterState}),x([h.id]),J(null),O(h.id),window.setTimeout(()=>O(w=>w===h.id?null:w),1200)},[D,Ie]),wc=g.useCallback(()=>{var C,S,M,k,R,E,_,A;const i=de(window.innerWidth*.6,232,Math.max(232,window.innerWidth-200-32)),l=de(window.innerHeight*.56,300/2+32,Math.max(300/2+32,window.innerHeight-300/2-96)),u=Ie(i,l),h={id:H("node"),kind:"memo",title:"Code Note",body:vh,x:u.x-400/2,y:u.y-300/2,width:400,height:300,tags:["Code Note","Draft","Unlinked"],metadata:Rf()};D(w=>({...w,nodes:[...w.nodes,h]}),"codeNote.node.add",{id:h.id,semanticType:(C=h.metadata)==null?void 0:C.SemanticType,status:(S=h.metadata)==null?void 0:S.CodeNoteStatus,syncState:(M=h.metadata)==null?void 0:M.CodeNoteSyncState,adapterState:(k=h.metadata)==null?void 0:k.AdapterState}),f.emit("mindcanvas.codeNote.add",{id:h.id,semanticType:(R=h.metadata)==null?void 0:R.SemanticType,status:(E=h.metadata)==null?void 0:E.CodeNoteStatus,syncState:(_=h.metadata)==null?void 0:_.CodeNoteSyncState,adapterState:(A=h.metadata)==null?void 0:A.AdapterState}),x([h.id]),J(null),O(h.id),window.setTimeout(()=>O(w=>w===h.id?null:w),1200)},[D,Ie]),_e=g.useCallback((a,s)=>{var R,E,_,A,w,z,ne,le,Ln;if(a==="remote-monitor"){const Ke=N.current.nodes.find(ha);if(Ke){const En=Il(Ke),Ne=ae.current.scale,Pn=jl(Ke.height,window.innerHeight);b({...ae.current,x:window.innerWidth/2-En.x*Ne,y:Pn-En.y*Ne}),x([Ke.id]),O(Ke.id),window.setTimeout(()=>O(_n=>_n===Ke.id?null:_n),1e3);const Pi="Remote monitor already exists on this board. Focused existing node.";Be(Pi),window.setTimeout(()=>{Be(_n=>_n===Pi?null:_n)},2200),f.emit("remoteMonitor.node.duplicateIgnored",{action:"toolbar-add",nodeId:Ke.id,surface:"mindcanvas-node"});return}}const i=s?zr[s]:null,l=(i==null?void 0:i.mode)??(a==="image"?"Image":a==="video"?"Video":null),u=l?Qn(N.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,S=a==="remote-monitor"?jl(C,window.innerHeight):window.innerHeight/2,M=Ie(window.innerWidth/2,S),k={id:H("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
42
- Leads,42,Validation
43
- Trials,7,Launch
44
- 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
45
-
46
- Write structured notes, docs, or prompt context here.`:"Write the thought, evidence, or reusable context here.",x:M.x-h/2,y:M.y-C/2,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"?kr:void 0,metadata:i?Af(N.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?Vr(N.current.settings,l):void 0};D(Ke=>({...Ke,nodes:[...Ke.nodes,k]}),"node.add",{id:k.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:k.id,kind:i.kind,mode:i.mode,model:(R=k.metadata)==null?void 0:R.MediaModel,aspectPresetId:(E=k.metadata)==null?void 0:E.AspectPresetId,requestedSize:(_=k.metadata)==null?void 0:_.RequestedSize,adapterState:((A=k.metadata)==null?void 0:A.AdapterState)??"adapter-gated",externalActionPolicy:((w=k.metadata)==null?void 0:w.AutomationExternalActionPolicy)??"spec-only-until-review"}),a==="remote-monitor"&&f.emit("remoteMonitor.node.add",{id:k.id,surface:"mindcanvas-node",width:k.width,height:k.height,adapterState:((z=k.metadata)==null?void 0:z.AdapterState)??"adapter-gated"}),a==="mask"&&f.emit("node.mask.add",{id:k.id,hasImage:!!k.imageUrl,imageRouterMask:((ne=k.metadata)==null?void 0:ne.ImageRouterMask)??"true",semanticType:((le=k.metadata)==null?void 0:le.SemanticType)??"ImageEditMask",adapterState:((Ln=k.metadata)==null?void 0:Ln.AdapterState)??"adapter-gated"}),x([k.id])},[b,D,Ie]),K=g.useCallback((a,s)=>{$a(i=>({...i,nodes:i.nodes.map(l=>l.id===a?{...l,...s}:l)}),"node.patch",{id:a,keys:Object.keys(s)})},[$a]),Mt=g.useCallback((a,s)=>{const i=Y.current[0],l=N.current.nodes.find(u=>u.id===i);l&&(K(i,{metadata:{...l.metadata??{},[a]:a===$.templateNodeId||a===$.inputKey?Yn(s):s}}),Qe(null),f.emit("templateStudio.node.metadata.patch",{id:i,key:a}))},[K]),ei=g.useCallback(a=>{var h;const s=Y.current[0],i=N.current.nodes.find(C=>C.id===s);if(!i)return;const l=((h=i.metadata)==null?void 0:h[$.templateNodeId])||Yn(i.title),u={...i.metadata??{},[$.studioNodeType]:a,[$.templateNodeId]:l,[$.templateRole]:a.replace(/^template\./,""),[$.compileTarget]:zi(a,i)};a==="template.input"&&(u[$.inputKey]=u[$.inputKey]||Yn(i.title),u[$.inputType]=u[$.inputType]||"text",u[$.inputRequired]=u[$.inputRequired]||"true"),K(s,{metadata:u}),Qe(null),f.emit("templateStudio.node.role.assign",{id:s,studioNodeType:a})},[K]),I=g.useCallback(a=>{Be(a),window.setTimeout(()=>{Be(s=>s===a?null:s)},2200)},[]),vc=g.useCallback((a,s,i)=>{var M;const l=N.current.nodes.find(k=>k.id===a);if(!l)return;const u=Gl(l.body),h=Ku(l,s,i,N.current.settings);if(!h||h.nodes.length===0){I("Template card could not generate nodes."),f.emit("templateCard.generate.blocked",{nodeId:a,optionId:s});return}D(k=>({...k,nodes:[...k.nodes,...h.nodes]}),"templateCard.generate",{nodeId:a,launcherId:h.launcher.id,optionId:((M=h.option)==null?void 0:M.id)??null,templateId:h.template.id,runId:h.runId,generatedCount:h.nodes.length});const C=h.nodes.map(k=>k.id);x(C),O(C[0]??null),window.setTimeout(()=>O(k=>k===C[0]?null:k),1200);const S=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.`;I(S)},[D,I]),jc=g.useCallback(a=>{const s=N.current.nodes.find(R=>R.id===a.sourceNodeId),i=Ie(window.innerWidth/2,window.innerHeight/2),l=560,u=390,h=H("node"),C=s?s.x+s.width+Do:i.x-l/2,S=s?s.y:i.y-u/2,M={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&&(M.RemoteFleetLatestFramePath=a.framePath),a.frameUrl&&(M.RemoteFleetLatestFrameUrl=a.frameUrl),a.dataUrl&&(M.RemoteFleetLatestFrameDataUrl=a.dataUrl),a.frameSeq&&(M.RemoteFleetLatestFrameSeq=String(a.frameSeq));const k={id:h,kind:"remote-control",title:a.deviceName||"Remote Device",body:`Remote device control: ${a.deviceId}`,x:C,y:S,width:l,height:u,tags:["Remote","Control","LocalBridge"],metadata:M};D(R=>({...R,nodes:[...R.nodes,k]}),"remoteControl.node.add",{id:k.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId}),x([k.id]),I(`Remote control node created for ${a.deviceName||a.deviceId}.`),f.emit("remoteControl.node.add",{nodeId:k.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId,connected:a.connected===!0})},[D,Ie,I]),da=g.useCallback(a=>{const s=Oo(ae.current)??{...Ha};ke({cameraBookmarks:{...N.current.settings.cameraBookmarks??{},[a]:s}},"camera.bookmark.save"),f.emit("camera.bookmark.save",{slot:a,...s}),I(`Camera slot ${a} saved.`)},[ke,I]),jn=g.useCallback(a=>{var l;const s=Oo((l=N.current.settings.cameraBookmarks)==null?void 0:l[a]),i=s??{...Ha};b(i),f.emit("camera.bookmark.goto",{slot:a,saved:!!s,...i}),I(s?`Camera slot ${a}.`:`Camera slot ${a} empty. Home view.`)},[b,I]),gs=g.useCallback(()=>{b({...Ha}),f.emit("camera.bookmark.goto",{slot:"home",saved:!1,...Ha}),I("Home view.")},[b,I]),ti=g.useCallback(a=>{const s=ae.current,i=gh,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};b(l),f.emit("camera.keyboard.pan",{direction:a,...l})},[b]),ai=g.useCallback(()=>{const a=yn.current;return a?(a.focus(),a.select(),f.emit("globalInput.focus",{source:"keyboard"}),!0):!1},[]),hs=g.useCallback((a="keyboard")=>{const s=!(N.current.settings.wheelMode??!1);ke({wheelMode:s},`${a}.wheelMode.toggle`),f.emit("canvas.wheelMode.toggle",{source:a,wheelMode:s}),I(s?"Mouse wheel mode.":"Trackpad pan mode.")},[ke,I]),fs=g.useCallback((a="keyboard")=>{const i=(N.current.settings.cursorDirection==="down"?"down":"right")==="down"?"right":"down";ke({cursorDirection:i},`${a}.cursorDirection.toggle`),f.emit("canvas.cursorDirection.toggle",{source:a,cursorDirection:i}),I(i==="down"?"Cursor direction down.":"Cursor direction right.")},[ke,I]),ko=g.useCallback(async(a,s="api")=>{const i=a===!0;try{if(i){if(document.fullscreenElement)return dt(!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 dt(l),f.emit("canvas.fullscreen.toggle",{source:s,active:l,fallback:!1}),l}return dt(!0),f.emit("canvas.fullscreen.toggle",{source:s,active:!0,fallback:!0}),!0}return document.fullscreenElement&&document.exitFullscreen&&await document.exitFullscreen(),dt(!1),f.emit("canvas.fullscreen.toggle",{source:s,active:!1,fallback:!1}),!1}catch(l){return dt(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}),I(i?"Read mode fallback.":"Read mode off."),i}},[dt,I]),In=g.useCallback((a="keyboard")=>ko(!Ba.current,a),[ko]);g.useEffect(()=>{const a=window,s={getMindCanvasFullscreenState:a.getMindCanvasFullscreenState,setMindCanvasFullscreen:a.setMindCanvasFullscreen,getMindCanvasReadModeState:a.getMindCanvasReadModeState,setMindCanvasReadMode:a.setMindCanvasReadMode,toggleMindCanvasReadMode:a.toggleMindCanvasReadMode},i=()=>Ba.current,l=h=>ko(h,"api"),u=()=>In("api");return a.getMindCanvasFullscreenState=i,a.setMindCanvasFullscreen=l,a.getMindCanvasReadModeState=i,a.setMindCanvasReadMode=l,a.toggleMindCanvasReadMode=u,ho(!0),f.emit("canvas.readMode.api.bound"),()=>{ho(!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")}},[ko,In]);const Ic=g.useCallback(()=>{const a=N.current.settings.cameraBookmarks??{},s=Ys.find(i=>!a[i])??Ys[0];da(s)},[da]),Nc=g.useCallback(a=>{Js(N.current.settings.gridType)!==a&&ke({gridType:a},`canvas.gridMode.${a}`)},[ke]),Ac=g.useCallback(()=>{ke({gridSnap:!(N.current.settings.gridSnap??!0)},"canvas.gridSnap.toggle")},[ke]),Mc=g.useCallback(a=>{const s=N.current.nodes.find(i=>i.id===a);!s||s.kind!=="directory"||(jt(a),f.emit("node.directorySettings.open",{id:a}))},[]),Rc=g.useCallback(()=>{jt(a=>(a&&f.emit("node.directorySettings.close",{id:a}),null))},[]),Tc=g.useCallback((a,s)=>{const i=N.current.nodes.find(h=>h.id===a);if(!i||i.kind!=="directory")return;const l=tn(s.DirectoryPath),u={...i.metadata??{},DirectoryPath:l,Include:s.Include??"",Exclude:s.Exclude??""};K(a,{sourceFilePath:l||kr,metadata:u}),jt(null),f.emit("node.directorySettings.patch",{id:a,keys:["DirectoryPath","Include","Exclude"]}),I("Folder scan settings saved.")},[K,I]),Lc=g.useCallback(async a=>{const s=N.current.nodes.find(u=>u.id===a);if(!s||s.kind!=="directory")return;const i=Mh(s);if(f.emit("node.directory.scan.requested",{id:a,hasBridgePath:!!i,hasHandle:un.current.has(a)}),i){if(!mt()){Q("blocked"),f.emit("node.directory.scan.bridge.blocked",{id:a,reason:"hosted-access-off"}),I("Hosted LocalBridge access is off.");return}try{const u=await ga();if(Ae(u.status??null),Q(u.state),u.state!=="connected"){f.emit("node.directory.scan.bridge.unavailable",{id:a,message:u.message||"LocalBridge is unavailable."}),I(u.message||"LocalBridge is unavailable.");return}const h=$n(u.status);if(!h){Q("unavailable"),f.emit("node.directory.scan.bridge.failed",{id:a,reason:"missing-token"}),I("LocalBridge read token is unavailable.");return}const C=$o(i,48);I(`Scanning ${C}...`),f.emit("node.directory.scan.bridge.requested",{id:a,path:i});const S=await Th(i,s.metadata,h,u.baseUrl),M=new Date().toISOString();K(a,{title:s.title==="Directory"||s.title==="New Folder"?C:s.title,body:vl(C,S),sourceFilePath:i,metadata:{...s.metadata??{},DirectoryPath:i,DirectoryName:C,DirectoryScanSource:"localbridge",DirectoryFileCount:String(S.fileCount),DirectoryDirCount:String(S.directoryCount),DirectoryLastScanUtc:M,DirectoryScanTruncated:String(S.truncated),DirectoryPreview:JSON.stringify(S.preview.slice(0,en))}}),f.emit("node.directory.scan.bridge.completed",{id:a,path:i,fileCount:S.fileCount,directoryCount:S.directoryCount,truncated:S.truncated}),f.emit("node.directory.scan.completed",{id:a,source:"localbridge",directoryName:C,fileCount:S.fileCount,directoryCount:S.directoryCount,truncated:S.truncated}),I(`Scanned ${C}: ${S.fileCount} files, ${S.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}),I("LocalBridge folder scan failed.")}return}const l=window;if(!l.showDirectoryPicker){f.emit("node.directory.scan.unsupported",{id:a}),I("Folder scan needs a Chromium browser with File System Access enabled.");return}try{let u=un.current.get(a);u||(u=await l.showDirectoryPicker(),un.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}),I("Folder permission was not granted.");return}I(`Scanning ${u.name}...`);const M=await Nh(u,s.metadata),k=new Date().toISOString();K(a,{title:s.title==="Directory"||s.title==="New Folder"?u.name:s.title,body:vl(u.name,M),sourceFilePath:u.name,metadata:{...s.metadata??{},DirectoryName:u.name,DirectoryScanSource:"browser-picker",DirectoryFileCount:String(M.fileCount),DirectoryDirCount:String(M.directoryCount),DirectoryLastScanUtc:k,DirectoryScanTruncated:String(M.truncated),DirectoryPreview:JSON.stringify(M.preview.slice(0,en))}}),f.emit("node.directory.scan.completed",{id:a,source:"browser-picker",directoryName:u.name,fileCount:M.fileCount,directoryCount:M.directoryCount,truncated:M.truncated}),I(`Scanned ${u.name}: ${M.fileCount} files, ${M.directoryCount} folders.`)}catch(u){if((u&&typeof u=="object"&&"name"in u?String(u.name):"")==="AbortError"){f.emit("node.directory.scan.cancelled",{id:a}),I("Folder scan cancelled.");return}f.emit("node.directory.scan.failed",{id:a,message:u instanceof Error?u.message:String(u)}),I("Folder scan failed in this browser context.")}},[K,I]),ni=g.useCallback(a=>{on(a.id),Ia(Xe(a.name))},[]),bs=g.useCallback(()=>{on(null),Ia("")},[]),ys=g.useCallback(a=>{const s=Xe(sn).slice(0,90);a===N.current.id?(us(s),I("Board renamed.")):Mu(a,s)?(Ue(ut()),I("Saved board renamed.")):(f.emit("board.rename.failed",{boardId:a,scope:"stored"}),I("Board rename failed.")),on(null),Ia("")},[us,I,sn]),Ec=g.useCallback((a,s)=>{s.key==="Enter"?(s.preventDefault(),ys(a)):s.key==="Escape"&&(s.preventDefault(),bs())},[bs,ys]),Pc=g.useCallback(a=>{const s=N.current.nodes.find(l=>l.id===a);if(!Hn(s))return;const i=s.aiEnabled===!1;K(a,{aiEnabled:i}),f.emit("node.aiReference.toggled",{id:a,enabled:i}),I(i?"AI reference enabled.":"AI reference disabled.")},[K,I]),wo=g.useCallback(async(a,s,i,l,u)=>{Da.current=a;try{const h=await Gn(a);return zt.current=0,f.emit(s,{...i,ok:!0,method:h}),I(l),h}catch(h){return zt.current=Date.now()+15e3,f.emit(s,{...i,ok:!0,method:"react-local",clipboardUnavailable:!0,message:h instanceof Error?h.message:String(h)}),I(u),"react-local"}},[I]),_c=g.useCallback(async a=>{const s=N.current.nodes.find(l=>l.id===a);if(!s)return;const i=Uh(s);if(i)try{const l=await zh(i);f.emit("node.copyImage",{id:a,ok:!0,mode:l,urlKind:i.split(":",1)[0]||"relative"}),I(l==="image"?"Image copied to clipboard.":"Image reference copied.");return}catch(l){Da.current=i,zt.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)}),I("Image reference copied inside this canvas.");return}await wo(Fh(s),"node.copy",{id:a},"Node content copied.","Node content copied inside this canvas.")},[wo,I]),Dc=g.useCallback(async(a,s)=>{await wo(s,"node.embed.copyUrl",{id:a,sourceKind:s.split(":",1)[0]||"relative"},"Embed URL copied.","Embed URL copied inside this canvas.")},[wo]),Bc=g.useCallback(a=>{const s=N.current.nodes.find(l=>l.id===a);if(!Hn(s))return;const i=qs(s);K(a,{height:i}),f.emit("node.fitHeight",{id:a,height:i}),I("Node height fitted to text.")},[K,I]),Oc=g.useCallback(a=>{const s=N.current.nodes.find(C=>C.id===a);if(!Hn(s))return;const i=Bh(s),l=i?Math.max(120,Math.round(s.originalHeight||qs(s))):Math.max(120,Math.min(s.height,yh)),u=i?0:Math.round(s.height),h=i;D(C=>({...C,nodes:C.nodes.map(S=>S.id===a?{...S,height:l,isExpanded:h,originalHeight:u}:S)}),"node.expandCollapse",{id:a,expanded:h,height:l,originalHeight:u}),I(h?"Node expanded.":"Node collapsed.")},[D,I]),$c=g.useCallback(a=>{const s=N.current.nodes.find(l=>l.id===a);if(!s||s.kind!=="code")return;const i=s.wordWrap===!1;K(a,{wordWrap:i}),f.emit("node.wordWrap.toggled",{id:a,enabled:i}),I(i?"Word wrap enabled.":"Word wrap disabled.")},[K,I]),Fc=g.useCallback((a,s)=>{const i=N.current.nodes.find(h=>h.id===a);if(!Hn(i))return;const l=Ph(s.executionMode),u=Array.from(new Set([...i.tags??[],"Company root",l,s.enableSubAgents?"sub-agents":"single-agent","adapter-gated"]));K(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}),I(`Company root staged locally as ${l}. Open CompanyCore to run it with an adapter later.`)},[K,I]),Uc=g.useCallback(a=>{var i;const s=N.current.nodes.find(l=>l.id===a);if(!(s!=null&&s.companyMode)){I("Stage this node as a Company root first.");return}rt(a),f.emit("companyGraph.open",{id:a,status:((i=s.metadata)==null?void 0:i.CompanyStatus)??"Staged"})},[I]),zc=g.useCallback(a=>{const s=N.current.nodes.find(i=>i.id===a);s!=null&&s.companyMode&&(K(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}),I("Company goal synced from this note locally."))},[K,I]),Wc=g.useCallback(a=>{var l;const s=N.current.nodes.find(u=>u.id===a);if(!(s!=null&&s.companyMode))return;const i=((l=s.metadata)==null?void 0:l.CompanyStatus)||"Staged";K(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}),I(`Company status refreshed locally: ${i}.`)},[K,I]),Hc=g.useCallback(()=>{rt(a=>(a&&f.emit("companyGraph.close",{id:a}),null))},[]),oi=g.useCallback((a,s)=>{const i=N.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(K(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}),I(`Company marked ${s.toLowerCase()} locally.`))},[K,I]),si=g.useCallback(a=>{var l;const s=N.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)??""]);K(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()}}),rt(null),f.emit("companyGraph.remove",{id:a}),I("Company staging removed from this node.")},[K,I]),Vc=g.useCallback((a,s)=>{const i=N.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(K(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}),I(`Company approval ${s.toLowerCase()} locally.`))},[K,I]),Yc=g.useCallback((a,s)=>{const i=s.trim();if(!i)return;const l=H("node"),u=H("edge");D(h=>{var M,k;const C=h.nodes.find(R=>R.id===a);if(!C)return h;const S={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",((M=C.metadata)==null?void 0:M.CompanyExecutionModeLabel)??"Company"],metadata:{CompanyRootNodeId:C.id,CompanyExecutionMode:((k=C.metadata)==null?void 0:k.CompanyExecutionMode)??"Auto",CompanyTaskStatus:"Staged",CompanyStagedAt:new Date().toISOString()}};return{...h,nodes:[...h.nodes,S],edges:[...h.edges,{id:u,from:C.id,to:l,kind:"context"}]}},"companyGraph.followUp.staged",{rootId:a,taskId:l,chars:i.length}),x([l]),O(l),window.setTimeout(()=>O(h=>h===l?null:h),1400),I("Company follow-up task staged locally.")},[D,I]),Gc=g.useCallback((a,s)=>{const i=H("node"),l=H("edge");D(u=>{const h=u.nodes.find(S=>S.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}),x([i]),O(i),window.setTimeout(()=>O(u=>u===i?null:u),1400),I("Company artifact added to the canvas.")},[D,I]),Kc=g.useCallback((a,s="preview")=>{const i=Oh(a);if(!i){I("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"){U({url:i,fileName:$h(a)}),f.emit("node.pdf.preview.open",{id:a.id,urlKind:i.startsWith("http")?"url":"path"});return}if(a.kind==="embed"&&!oo(i)){I("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})},[I]),Xc=g.useCallback(a=>{const s=Y.current;D(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}),x(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}),J(i=>i===a?null:i)},[D]),xs=g.useCallback(a=>{const s=Array.from(new Set(Y.current));if(s.length===0)return;const i=new Set(s);D(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}),x([]),f.emit("selection.repaired",{reason:"delete-selected",source:a,beforeCount:s.length,afterCount:0,removedCount:s.length}),J(l=>l&&i.has(l)?null:l),rt(l=>l&&i.has(l)?null:l),jt(l=>l&&i.has(l)?null:l),I(`Deleted ${s.length} selected node${s.length===1?"":"s"}.`)},[D,I]),vo=g.useCallback((a,s)=>{var _;const i=Array.from(new Set(a));if(i.length===0)return;const l=N.current,u=new Set(i),h=l.nodes.filter(A=>u.has(A.id));if(h.length===0)return;const C=h.filter(ha),S=h.filter(A=>!ha(A));if(C.length>0&&f.emit("remoteMonitor.node.duplicateIgnored",{action:"duplicate",source:s,skippedCount:C.length,nodeId:(_=C[0])==null?void 0:_.id}),S.length===0){const A=C[0]??l.nodes.find(ha);A&&(x([A.id]),O(A.id),window.setTimeout(()=>O(w=>w===A.id?null:w),1e3)),I("Remote monitor is single-instance per board. Focused existing monitor.");return}const M=new Map(S.map(A=>[A.id,H("node")])),k=S.map(A=>({...A,id:M.get(A.id),x:A.x+50,y:A.y-50,status:A.status==="running"?"idle":A.status,metadata:A.metadata?{...A.metadata}:void 0,tags:A.tags?[...A.tags]:void 0,imageStack:jr(A.imageStack,A.id,M.get(A.id))})),R=l.edges.filter(A=>M.has(A.from)&&M.has(A.to)).map(A=>({...A,id:H("edge"),from:M.get(A.from),to:M.get(A.to)}));D(A=>({...A,nodes:[...A.nodes,...k],edges:[...A.edges,...R]}),"node.duplicate",{source:s,count:k.length,edgeCount:R.length,sourceIds:i,duplicateIds:k.map(A=>A.id),skippedRemoteMonitorCount:C.length});const E=k.map(A=>A.id);x(E),O(E[0]??null),window.setTimeout(()=>O(A=>A===E[0]?null:A),1e3),I(C.length>0?`Duplicated ${k.length} node${k.length===1?"":"s"}; remote monitor stays single-instance.`:`Duplicated ${k.length} node${k.length===1?"":"s"}.`)},[D,I]),Cs=g.useCallback(a=>{vo(Y.current,a)},[vo]),Nn=g.useCallback((a,s)=>{const i=Array.from(new Set(Y.current));if(i.length===0)return;const l=new Set(i),u=N.current.nodes,h=u.filter(k=>l.has(k.id));if(h.length===0)return;const C=u.filter(k=>!l.has(k.id)),S=a==="front"?[...C,...h]:[...h,...C];if(!S.some((k,R)=>{var E;return k.id!==((E=u[R])==null?void 0:E.id)})){I(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}D(k=>({...k,nodes:S}),"node.layerOrder",{direction:a,source:s,count:h.length,ids:i}),I(a==="front"?`Brought ${i.length} selected node${i.length===1?"":"s"} to front.`:`Sent ${i.length} selected node${i.length===1?"":"s"} to back.`)},[D,I]),Ss=g.useCallback(async()=>{const a=new Set(Y.current),s=N.current.nodes.filter(u=>a.has(u.id));if(s.length===0)return;const i=N.current.edges.filter(u=>a.has(u.from)&&a.has(u.to)),l=Jh(s,i);sa.current=l;try{const u=await Gn(JSON.stringify(l));ra.current=0,f.emit("multiSelection.copy",{count:s.length,edgeCount:i.length,ok:!0,method:u}),I(`Copied ${s.length} selected node${s.length===1?"":"s"} for canvas paste.`)}catch(u){ra.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)}),I(`Copied ${s.length} selected node${s.length===1?"":"s"} inside this canvas.`)}},[I]),ca=g.useCallback((a,s,i)=>{const l=N.current.nodes.find(ha),u=[],h=[];let C=!!l;for(const w of a.nodes){if(ha(w)){if(C){u.push(w);continue}C=!0}h.push(w)}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&&(x([l.id]),O(l.id),window.setTimeout(()=>O(w=>w===l.id?null:w),1e3)),I("Remote monitor is single-instance per board. Focused existing monitor.");return}const S=Yo(h);if(!S)return;const M=new Map(h.map(w=>[w.id,H("node")])),k=s.x-S.minX,R=s.y-S.minY,E=h.map(w=>({...w,id:M.get(w.id),x:w.x+k,y:w.y+R,status:w.status==="running"?"idle":w.status,tags:w.tags?[...w.tags]:void 0,metadata:w.metadata?{...w.metadata}:void 0,imageStack:jr(w.imageStack,w.id,M.get(w.id))})),_=a.edges.filter(w=>M.has(w.from)&&M.has(w.to)).map(w=>({...w,id:H("edge"),from:M.get(w.from),to:M.get(w.to)})),A=E.map(w=>w.id);D(w=>({...w,nodes:[...w.nodes,...E],edges:[...w.edges,..._]}),"clipboard.nodes.paste",{source:i,count:E.length,edgeCount:_.length,originX:Math.round(s.x),originY:Math.round(s.y),skippedRemoteMonitorCount:u.length}),x(A),J(null),O(A[0]??null),window.setTimeout(()=>O(w=>w===A[0]?null:w),1200),I(u.length>0?`Pasted ${E.length} canvas node${E.length===1?"":"s"}; remote monitor stays single-instance.`:`Pasted ${E.length} canvas node${E.length===1?"":"s"}.`)},[D,I]),An=g.useCallback((a,s,i)=>{const l=a.trim();if(!l)return;const u=Tl(l,s,`${i}-url`),h=u??Ll(l,s,i);D(C=>({...C,nodes:[...C.nodes,h]}),u?"clipboard.url.paste":"clipboard.text.paste",{source:i,id:h.id,kind:h.kind,chars:l.length}),x([h.id]),J(null),O(h.id),window.setTimeout(()=>O(C=>C===h.id?null:C),1200),I(`${i==="drop"?"Dropped":"Pasted"} ${h.kind==="file"?"URL reference":h.kind} node.`)},[D,I]),jo=g.useCallback(async(a,s,i)=>{const l=a.filter(h=>h.name||h.size>0);if(l.length===0)return;const u=N.current.id;try{const h=[];let C=s.x;for(const M of l){const k=await ff(M,{x:C,y:s.y},i);h.push(k),C+=k.width+Do}if(N.current.id!==u){f.emit("async.staleIgnored",{path:"canvas.fileIngest",source:i,boardId:u,currentBoardId:N.current.id,count:l.length});return}const S=h.map(M=>M.id);D(M=>({...M,nodes:[...M.nodes,...h]}),"canvas.files.ingested",{source:i,count:h.length,kinds:h.map(M=>M.kind)}),x(S),J(null),O(S[0]??null),window.setTimeout(()=>O(M=>M===S[0]?null:M),1200),I(`${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)}),I("File ingest failed in this browser context.")}},[D,I]);g.useEffect(()=>{const a=s=>{if(s.defaultPrevented||Hl(s.target))return;const i=s.clipboardData;if(!i)return;const l=Oa(),u=Ol(i.files,i.items);if(u.length>0){s.preventDefault(),jo(u,l,"paste");return}const h=ra.current>Date.now()?sa.current:null;if(h){s.preventDefault(),ca(h,l,"paste"),f.emit("clipboard.nodes.pasteLocalFallback",{count:h.nodes.length});return}const C=zt.current>Date.now()?Da.current:null;if(C){s.preventDefault(),An(C,l,"paste"),f.emit("clipboard.text.pasteLocalFallback",{chars:C.length}),zt.current=0;return}const S=i.getData("text/plain"),M=Rl(S);if(M){s.preventDefault(),ca(M,l,"paste");return}const k=S.trim()?S:El(i.getData("text/html"));k.trim()&&(s.preventDefault(),An(k,l,"paste"))};return document.addEventListener("paste",a),()=>document.removeEventListener("paste",a)},[Oa,jo,An,ca]);const qc=g.useCallback(a=>{er(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")},[]),Jc=g.useCallback(a=>{if(er(a.target))return;const s=Ol(a.dataTransfer.files,a.dataTransfer.items),i=a.dataTransfer.getData("text/uri-list"),l=a.dataTransfer.getData("text/plain"),u=El(a.dataTransfer.getData("text/html")),h=Oa(a.clientX,a.clientY);if(s.length>0){a.preventDefault(),jo(s,h,"drop");return}const C=(i||l||u).trim(),S=Rl(l);if(S){a.preventDefault(),ca(S,h,"drop");return}C&&(a.preventDefault(),An(C,h,"drop"))},[Oa,jo,An,ca]),Zc=g.useCallback(()=>{const a=new Set(Y.current),s=new Set(N.current.nodes.filter(i=>a.has(i.id)&&Hn(i)).map(i=>i.id));if(s.size===0){I("No text nodes in this selection.");return}D(i=>({...i,nodes:i.nodes.map(l=>s.has(l.id)?{...l,height:qs(l)}:l)}),"multiSelection.fitHeight",{count:s.size}),f.emit("multiSelection.fitHeight",{count:s.size}),I(`Fitted ${s.size} text node${s.size===1?"":"s"}.`)},[D,I]),ks=g.useCallback(a=>{const s=new Set(Y.current),i=N.current.nodes.filter(_=>s.has(_.id)).sort((_,A)=>Y.current.indexOf(_.id)-Y.current.indexOf(A.id));if(i.length<2)return;const l=Yo(i);if(!l)return;const u=a==="tidy"?Cf(i):i,h=28,C=Math.max(...u.map(_=>_.width)),S=Math.max(...u.map(_=>_.height)),M=u.map((_,A)=>({id:_.id,x:_.x,y:_.y,width:_.width,height:_.height,selectionIndex:A})),k=N.current.settings.gridSnap??!0;let R;a==="grid"?R={mode:"grid",order:"selectionOrder",columns:Math.max(2,Math.ceil(Math.sqrt(u.length))),cellWidth:C,cellHeight:S,gapX:h,gapY:h,sizeMode:"preserve",snapToGrid:k,gridSize:Jn}:a==="strip"?R={mode:"stripHorizontal",order:"selectionOrder",targetHeight:S,gapX:h,sizeMode:"preserve",snapToGrid:k,gridSize:Jn}:R={mode:"masonry",order:"spatialReading",anchor:"selectionBoundsTopLeft",maxColumns:12,gapX:24,gapY:24,quantile:.75,sizeMode:"preserve",snapToGrid:k,gridSize:Jn};const E=jp(M,R,l);D(_=>({..._,nodes:_.nodes.map(A=>{const w=E.after.get(A.id);return w?{...A,x:w.x,y:w.y,width:w.width,height:w.height}:A})}),"multiSelection.arrange",{mode:a,count:i.length,layoutMode:R.mode,snapToGrid:k}),f.emit("multiSelection.arrange",{mode:a,count:i.length,layoutMode:R.mode,snapToGrid:k,boundsAfter:E.boundsAfter}),I(a==="tidy"?`Tidied ${i.length} selected nodes.`:`Arranged ${i.length} selected nodes as ${a}.`)},[D,I]),Qc=g.useCallback(()=>{const a=Array.from(new Set(Y.current)),s=N.current,i=new Map(s.nodes.map(w=>[w.id,w])),l=a.map(w=>i.get(w)).filter(w=>!!(w&&w.kind==="image"&&Xn(w).length>0));if(l.length<2){I("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(),S=new Set,M=Xn(u),k=[];for(const w of M)k.push(Nl(w,u,S,C));for(const w of h)for(const z of Xn(w))k.push(Nl(z,w,S,C));if(k.length<2){I("No stackable image variants found."),f.emit("multiSelection.mergeImageStacks.skipped",{reason:"not-enough-variants",selectedCount:a.length});return}const R=k.some(w=>{var z;return w.variantId===((z=u.imageStack)==null?void 0:z.activeVariantId)})?u.imageStack.activeVariantId:k[0].variantId,E=k.find(w=>w.variantId===R)??k[0],_=h.map(w=>w.id),A=new Set(_);D(w=>({...w,nodes:w.nodes.filter(z=>!A.has(z.id)).map(z=>{var ne;return z.id===u.id?{...z,kind:"image",imageUrl:E.imageUrl,imageStack:{activeVariantId:R,variants:k,kind:"pile",title:((ne=z.imageStack)==null?void 0:ne.title)||z.title,updatedAtUtc:C},metadata:{...z.metadata??{},ImageStackKind:"pile",ImageStackPrimaryNodeId:u.id,ImageStackVariantCount:String(k.length),ImageStackMergedAtUtc:C,ImageStackRemovedNodeIds:_.join(","),ImageStackActiveVariantId:R},tags:Array.from(new Set([...z.tags??["image"],"Stack"])).slice(0,4)}:z}),edges:w.edges.filter(z=>!A.has(z.from)&&!A.has(z.to))}),"multiSelection.mergeImageStacks",{primaryNodeId:u.id,removedNodeIds:_,addedVariants:k.length-M.length,variantCount:k.length}),x([u.id]),J(w=>w&&A.has(w)?null:w),rt(w=>w&&A.has(w)?null:w),jt(w=>w&&A.has(w)?null:w),O(u.id),window.setTimeout(()=>O(w=>w===u.id?null:w),1200),I(`Stacked ${l.length} image nodes into ${k.length} variants.`)},[D,I]),eu=g.useCallback(a=>{const s=Y.current.includes(a)?Y.current:[a];vo(s,"node-action")},[vo]),ua=g.useCallback(async(a,s)=>{const i=Cn.current.isBusy(a);return i&&f.emit("automation.run.queued",{id:a,key:a}),Cn.current.enqueue(a,async()=>{var R,E,_;const l=N.current.nodes.find(A=>A.id===a);if(!l||l.kind!=="ai-task")return;f.emit("automation.run.dequeued",{id:a,key:a,queuedBehindRunning:i});const u=(Ea.current.get(a)??0)+1;Ea.current.set(a,u);const h=na.current,C=(s==null?void 0:s.trim())||l.body,S=Hr(Wr(l));K(a,{status:"running",body:C,...Ka(l)?{metadata:Vn(l,{instruction:C,runState:"running",status:"running",statusLabel:"Running",sourceMode:S?"media-prompt-only":"ai-task"})}:{}}),f.emit("automation.run",{id:a,mode:"single",seq:u,automationKind:S==null?void 0:S.kind});const M=()=>Ea.current.get(a)===u&&na.current===h,k=A=>{if(!M()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}f.emit("localBridge.codex.fallback",{id:a,reason:A});const w=Tf(C,l);K(a,{status:"done",result:w,...Ka(l)?{metadata:Vn(l,{instruction:C,output:w,runState:"completed",status:S?"prepared":"done",statusLabel:S?"Spec only":"Done",sourceMode:S?"media-prompt-only":"local-draft",error:S?`External ${S.mode.toLowerCase()} generation was not executed.`:"",fallback:!0,partial:!!S,toolsUsed:S?`${S.toolHint}, Deterministic.Fallback, HumanReview.Gate`:"Deterministic.Fallback",toolWarnings:S?`External ${S.mode.toLowerCase()} generator was not invoked; this run prepared a spec only.`:""})}:{}}),J(a)};if(!mt()){k("hosted-access-gated");return}try{const A=await ga();if(!M()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}if(Q(A.state),Ae(A.status??null),A.state!=="connected"){re(A.message||"LocalBridge is unavailable."),k(A.message||"LocalBridge unavailable");return}const w=$n(A.status);if(!w){k("LocalBridge token unavailable");return}const z=zl(N.current,l,C);f.emit("localBridge.codex.run",{id:a,boardId:N.current.id});const ne=await Xu({instruction:z,workingDirectory:((E=(R=A.status)==null?void 0:R.project)==null?void 0:E.rootPath)||((_=A.status)==null?void 0:_.workspace)||void 0,sandbox:"read_only",reasoningEffort:Nf(N.current.settings.effort),approvalPolicy:"on-request",intent:"mindcanvas-ai-task",nodeKind:l.kind,webSearchMode:"disabled",networkAccessEnabled:!1},w,A.baseUrl);if(!M()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}if(!ne.success||!ne.finalResponse){const le=ne.error||"LocalBridge Codex returned no response.";f.emit("localBridge.codex.failed",{id:a,message:le,status:ne.status}),K(a,{status:"blocked",result:le,...Ka(l)?{metadata:Vn(l,{instruction:C,output:le,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:S?"media-prompt-only":"ai-task",error:le,fallback:!1,partial:!0})}:{}}),J(a);return}K(a,{status:"done",result:ne.finalResponse,...Ka(l)?{metadata:Vn(l,{instruction:C,output:ne.finalResponse,runState:"completed",status:S?"prepared":"done",statusLabel:S?"Spec only":"Done",sourceMode:S?"media-prompt-only":"ai-generated",error:S?`External ${S.mode.toLowerCase()} generation was not executed.`:"",fallback:!1,partial:!!S,toolsUsed:S?`AI.LLM, ${S.toolHint}, HumanReview.Gate`:"AI.LLM",toolWarnings:S?`External ${S.mode.toLowerCase()} generator was not invoked; this run prepared a spec only.`:""})}:{}}),f.emit("localBridge.codex.completed",{id:a,providerKind:ne.providerKind,threadId:ne.threadId,turnId:ne.turnId}),J(a)}catch(A){if(!M()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}const w=A instanceof Error?A.message:String(A);f.emit("localBridge.codex.failed",{id:a,message:w}),K(a,{status:"blocked",result:w,...Ka(l)?{metadata:Vn(l,{instruction:C,output:w,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:S?"media-prompt-only":"ai-task",error:w,fallback:!1,partial:!0})}:{}}),J(a)}})},[K]),tu=g.useCallback(async()=>{const a=Y.current[0];if(!a){I("Select an AI Task to run its graph.");return}const s=Nr(N.current,a);if(s.length===0){I("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){I("The selected AI Task graph is already running.");return}I(`Running selected graph: ${i.length} AI task${i.length===1?"":"s"}.`);for(const l of i)await ua(l.id)},[ua,I]),au=g.useCallback(async a=>{if(a.result)try{const s=await Gn(a.result);f.emit("aiTask.result.copy",{id:a.id,chars:a.result.length,ok:!0,method:s}),I("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)}),I("AI result copy unavailable in this browser context.")}},[I]),nu=g.useCallback(a=>{if(!a.result)return;const s=Lf(a,{x:a.x+a.width+78,y:a.y}),i={id:H("edge"),from:a.id,to:s.id,kind:"result"};D(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>Sr}),x([s.id]),J(null),O(s.id),window.setTimeout(()=>O(l=>l===s.id?null:l),1200),I("AI result archived as a Markdown node.")},[D,I]),ou=g.useCallback(a=>{if(!a.result)return;const s=Ef(a,{x:a.x+a.width+78,y:a.y+Math.min(a.height+44,360)}),i={id:H("edge"),from:a.id,to:s.id,kind:"result"};D(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}),x([s.id]),J(null),O(s.id),window.setTimeout(()=>O(l=>l===s.id?null:l),1200),I("Follow-up AI Task staged from the result.")},[D,I]),ri=g.useCallback(()=>{var Ln,Ke,En;const a=v.trim(),s=N.current.settings.inputMode,i=[...Y.current],l=N.current.nodes.find(Ne=>Ne.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",S=`${C}|${s}|${h}`,M=Date.now(),k=Sn.current;if((k==null?void 0:k.signature)===S&&M-k.at<=yl){f.emit("globalInput.duplicateIgnored",{routePath:C,inputMode:s,chars:u.length,windowMs:yl});return}Sn.current={signature:S,at:M};const R={routePath:C,inputMode:s,selectedNodeIds:i,chars:u.length};f.emit("globalInput.submit.snapshot",{...R,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"&&L(""),F(Ne=>Ne+1),f.emit("globalInput.submit.started",R);const E=Ne=>{F(Pn=>Math.max(0,Pn-1)),f.emit("globalInput.submit.completed",{...R,status:Ne})};if((l==null?void 0:l.kind)==="ai-task"){ua(l.id,a).then(()=>E("ai-task")).catch(Ne=>{f.emit("globalInput.submit.completed",{...R,status:"ai-task-error",message:Ne instanceof Error?Ne.message:String(Ne)}),F(Pn=>Math.max(0,Pn-1))});return}const _=Ie(window.innerWidth/2,window.innerHeight/2),A={x:_.x,y:_.y},w=Tl(u,A,"global-input-url"),z=!w&&(s==="Image"||s==="Video")?s:null,ne=w??(z?uf(u,A,N.current.settings,z):Ll(u,A,"global-input")),le={...ne,x:_.x-ne.width/2,y:_.y-ne.height/2};D(Ne=>({...Ne,nodes:[...Ne.nodes,le]}),w?"globalInput.url.add":z?"globalInput.media.add":"globalInput.text.add",{id:le.id,kind:le.kind,chars:u.length,inputMode:s,...z?{mediaMode:z,mediaModel:(Ln=le.metadata)==null?void 0:Ln.MediaModel,aspectPresetId:(Ke=le.metadata)==null?void 0:Ke.AspectPresetId,requestedSize:(En=le.metadata)==null?void 0:En.RequestedSize}:{}}),L(""),x([le.id]),J(null),O(le.id),window.setTimeout(()=>O(Ne=>Ne===le.id?null:Ne),1200),I(`Added ${le.kind==="file"?"URL reference":le.kind} node from input.`),E(w?"url-node":z?"media-node":"text-node")},[D,v,ua,Ie,I]),su=g.useCallback(async()=>{const a=_f(N.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){I(s.length>0?"All AI task graphs are already running.":"No AI tasks on this board.");return}I(`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 ua(h.id)},[ua,I]),ru=g.useCallback(()=>{const a=N.current.nodes.filter(s=>s.kind==="ai-task"&&s.status==="running");if(a.length===0){I("No running AI tasks to pause."),f.emit("automation.pause",{count:0});return}na.current+=1,D(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}),I(`Paused ${a.length} running task${a.length===1?"":"s"}.`)},[D,I]),iu=g.useCallback(()=>{const a=N.current.nodes.filter(s=>s.kind==="ai-task"&&(s.status==="running"||s.status==="paused"));if(a.length===0){I("No active AI tasks to stop."),f.emit("automation.stop",{count:0});return}na.current+=1,D(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}),J(null),I(`Stopped ${a.length} active task${a.length===1?"":"s"}.`)},[D,I]),lu=g.useCallback(()=>{const a=N.current.nodes.find(C=>C.id===Y.current[0]);if(!a)return;const s=a.x+a.width+80,i=a.y,l={id:H("node"),kind:"ai-task",title:"Research demand",body:`Find buyer pain and proof for: ${a.title}`,x:s,y:i,width:330,height:188,status:"idle",tags:["AI Task","Research"]},u={...l,id:H("node"),title:"Write offer",body:"Turn the research into a one-sentence USD offer and a first landing-page promise.",x:s+390,tags:["AI Task","Offer"]},h=[{id:H("edge"),from:a.id,to:l.id,kind:"context"},{id:H("edge"),from:l.id,to:u.id,kind:"result"}];D(C=>({...C,nodes:[...C.nodes,l,u],edges:[...C.edges,...h]}),"node.add",{reason:"generate-flow",count:2}),x([l.id,u.id])},[D]),du=g.useCallback((a,s)=>{if(ce&&ce.from!==a){const i={id:H("edge"),from:ce.from,to:a,kind:ce.kind==="context"?"context":s};D(l=>({...l,edges:[...l.edges,i]}),"edge.add",{...i}),G(null);return}G({from:a,kind:s})},[D,ce]),ws=g.useCallback(()=>{p(a=>{const s=a.at(-1);if(!s)return a;const i=s.board,l=Y.current,u=Wl(l,i);return y(h=>Xp(h,N.current,{description:s.description})),r(i),x(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)})},[]),vs=g.useCallback(()=>{y(a=>{const s=a[0];if(!s)return a;const i=s.board,l=Y.current,u=Wl(l,i);return p(h=>Wa(h,N.current,{description:s.description})),r(i),x(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 M,k;if(s.defaultPrevented||Hl(s.target))return;const i=s.key.toLowerCase(),l=s.ctrlKey||s.metaKey,u=!l&&!s.altKey&&!s.shiftKey,h=Of(s.target);if(s.key==="Tab"&&u&&!s.repeat&&!h){s.preventDefault(),hs("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-wheel-mode",wheelMode:!(N.current.settings.wheelMode??!1)});return}if(s.key==="Enter"&&u&&!s.repeat&&!h&&ai()){s.preventDefault(),f.emit("keyboard.shortcut",{action:"focus-global-input"});return}if(i==="f"&&u&&!s.repeat&&!h){s.preventDefault(),In("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-fullscreen"});return}if(i==="d"&&u&&!s.repeat){s.preventDefault(),fs("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-cursor-direction"});return}if(i==="h"&&u&&!s.repeat){s.preventDefault(),gs(),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(),ti(C),f.emit("keyboard.shortcut",{action:"camera-pan",direction:C});return}if(i===Kt&&!s.altKey&&!s.shiftKey){s.preventDefault(),l?(da(Kt),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:Kt})):(jn(Kt),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:Kt}));return}if(/^[0-9]$/.test(s.key)&&!s.altKey){if(l&&!s.shiftKey){s.preventDefault(),da(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:s.key});return}if(!l&&!s.shiftKey){s.preventDefault(),jn(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:s.key});return}}if(l&&i==="z"&&!s.shiftKey){s.preventDefault(),ws(),f.emit("keyboard.shortcut",{action:"undo"});return}if(l&&i==="y"||l&&s.shiftKey&&i==="z"){s.preventDefault(),vs(),f.emit("keyboard.shortcut",{action:"redo"});return}if(l&&i==="f"&&!s.altKey){s.preventDefault(),(M=La.current)==null||M.focus(),(k=La.current)==null||k.select(),f.emit("keyboard.shortcut",{action:"focus-search"});return}if(l&&i==="c"&&Y.current.length>0){s.preventDefault(),Ss(),f.emit("keyboard.shortcut",{action:"copy",count:Y.current.length});return}if(l&&i==="v"&&sa.current&&ra.current>Date.now()){const R=sa.current;s.preventDefault(),ca(R,Oa(),"paste"),f.emit("keyboard.shortcut",{action:"paste-local",count:R.nodes.length});return}if(l&&i==="d"){s.preventDefault(),Cs("keyboard"),f.emit("keyboard.shortcut",{action:"duplicate",count:Y.current.length});return}if(l&&s.key==="]"){s.preventDefault(),Nn("front","keyboard"),f.emit("keyboard.shortcut",{action:"bring-front",count:Y.current.length});return}if(l&&s.key==="["){s.preventDefault(),Nn("back","keyboard"),f.emit("keyboard.shortcut",{action:"send-back",count:Y.current.length});return}if(s.key==="Delete"||s.key==="Backspace"){if(Y.current.length===0)return;s.preventDefault(),xs("keyboard"),f.emit("keyboard.shortcut",{action:"delete",count:Y.current.length});return}if(s.key!=="Escape")return;let S=!1;Zt&&(se(!1),S=!0),Ge&&(dn(!1),S=!0),mn&&(It(!1),S=!0),St&&(je("keyboard"),S=!0),nt&&(U(null),S=!0),Je&&(rt(null),S=!0),vt&&(jt(null),S=!0),ce&&(G(null),S=!0),oe&&(J(null),S=!0),j.trim()&&(P(""),X([]),me(0),S=!0),Y.current.length>0&&(x([]),S=!0),S&&(s.preventDefault(),f.emit("keyboard.shortcut",{action:"escape"}))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[Je,je,ce,Ss,xs,vt,Cs,ai,Oa,jn,gs,St,ti,ca,nt,Zt,j,vs,Nn,oe,da,Ge,mn,fs,In,hs,ws]);const cu=g.useCallback(()=>{Ru(),D(()=>({...Di,updatedAt:new Date().toISOString()}),"board.restore",{source:"fixture-reset"}),x(["node-agent-command"]),Ue([]),je("fixture-reset")},[je,D]),js=g.useCallback((a,s="result-click")=>{const i=Il(a),l={...ae.current,x:window.innerWidth/2-i.x*ae.current.scale,y:window.innerHeight/2-i.y*ae.current.scale};b(l),x([a.id]),O(a.id),f.emit("search.focused",{query:j.trim(),nodeId:a.id,source:s}),window.setTimeout(()=>O(null),900)},[b,j]);g.useEffect(()=>{const a=++Pa.current,s=Df(ae.current,fe);f.emit("search.started",{query:j,engine:Ut.current?"worker":"local",viewportCenterX:Number(s.centerX.toFixed(2)),viewportCenterY:Number(s.centerY.toFixed(2))});const i=window.setTimeout(()=>{if(a!==Pa.current){f.emit("async.staleIgnored",{path:"search",seq:a});return}if(!j.trim()){X([]),me(0),Se("none"),f.emit("search.completed",{query:j,count:0,engine:"none"});return}const u=oa.current;if(u&&Ut.current){u.postMessage({type:"SEARCH_QUERY",boardId:N.current.id,seq:a,query:j,limit:8,viewport:s});return}const h=performance.now(),C=Bf(N.current.nodes,j,s,8);X(C),me(0),Se("local"),f.emit("search.completed",{query:j,count:C.length,engine:"local",durationMs:Number((performance.now()-h).toFixed(2)),viewportBoosted:!0})},120);return()=>window.clearTimeout(i)},[j,fe,pe]);const Mn=g.useCallback(a=>{me(s=>{const i=B.length;if(i===0)return 0;const l=(s+a+i)%i;return f.emit("search.activeChanged",{query:j.trim(),index:l,count:i}),l})},[j,B.length]),Is=g.useCallback(a=>{const s=B[ee];s&&js(s,a)},[js,ee,B]),uu=g.useCallback(a=>{if(a.key==="ArrowDown"){a.preventDefault(),Mn(1);return}if(a.key==="ArrowUp"){a.preventDefault(),Mn(-1);return}if(a.key==="Enter"){a.preventDefault(),Is("keyboard-enter");return}a.key==="Escape"&&(P(""),X([]),me(0),f.emit("search.cleared"))},[Is,Mn]),mu=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=N.current.nodes.find(R=>R.id===a);if(!l)return;p(R=>Wa(R,N.current,{description:"Move nodes",mergeKey:null})),y([]);const u=Y.current.includes(a)?Y.current:[a],h=new Map(N.current.nodes.filter(R=>u.includes(R.id)).map(R=>[R.id,{x:R.x,y:R.y}])),C=h.get(a)??{x:l.x,y:l.y},S=N.current.settings.gridSnap??!0,M=R=>{const E=(R.clientX-i.x)/ae.current.scale,_=(R.clientY-i.y)/ae.current.scale,A=S?Ml(C.x+E)-C.x:E,w=S?Ml(C.y+_)-C.y:_;r(z=>({...z,nodes:z.nodes.map(ne=>{const le=h.get(ne.id);return le?{...ne,x:le.x+A,y:le.y+w}:ne}),updatedAt:new Date().toISOString()}))},k=()=>{window.removeEventListener("pointermove",M),window.removeEventListener("pointerup",k),f.emit("node.patch",{id:a,reason:"drag",gridSnap:S})};window.addEventListener("pointermove",M),window.addEventListener("pointerup",k,{once:!0})},[]),pu=g.useCallback((a,s)=>{if(s.button!==0)return;s.preventDefault(),s.stopPropagation();const i=N.current.nodes.find(E=>E.id===a);if(!i)return;const l={x:s.clientX,y:s.clientY},u=Wh(i);let h={width:i.width,height:i.height};p(E=>Wa(E,N.current,{description:"Resize node",mergeKey:null})),y([]),x(E=>E.includes(a)?E:[a]),J(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",M),window.removeEventListener("pointerup",k),window.removeEventListener("pointercancel",R)},S=E=>{const _=(E.clientX-l.x)/ae.current.scale,A=(E.clientY-l.y)/ae.current.scale;let w=i.width+_,z=i.height+A;if(E.shiftKey&&i.width>0&&i.height>0){const ne=Math.max(w/i.width,z/i.height);w=i.width*ne,z=i.height*ne}h={width:Math.round(de(w,u.minWidth,u.maxWidth)),height:Math.round(de(z,u.minHeight,u.maxHeight))},r(ne=>({...ne,nodes:ne.nodes.map(le=>le.id===a?{...le,...h}:le),updatedAt:new Date().toISOString()}))},M=E=>{S(E)},k=E=>{S(E),C(),f.emit("node.resize.completed",{id:a,width:h.width,height:h.height})},R=()=>{C(),f.emit("node.resize.cancelled",{id:a})};document.body.classList.add("is-resizing-node"),window.addEventListener("pointermove",M),window.addEventListener("pointerup",k,{once:!0}),window.addEventListener("pointercancel",R,{once:!0})},[]),gu=g.useCallback(a=>{if(a.button!==0&&a.button!==1&&a.button!==2||a.target.closest(".canvas-node,.floating-panel,.canvas-toolbar,.global-input-shell,.runtime-status-cluster"))return;a.preventDefault();const s={x:a.clientX,y:a.clientY};if(a.shiftKey&&a.button===0){J(null),at({startX:s.x,startY:s.y,currentX:s.x,currentY:s.y}),f.emit("selection.box.started",{x:Math.round(s.x),y:Math.round(s.y)});const h=()=>{document.body.classList.remove("is-selecting"),window.removeEventListener("pointermove",C),window.removeEventListener("pointerup",S),window.removeEventListener("pointercancel",M)},C=k=>{at({startX:s.x,startY:s.y,currentX:k.clientX,currentY:k.clientY})},S=k=>{const R=Fl({startX:s.x,startY:s.y,currentX:k.clientX,currentY:k.clientY});if(h(),at(null),R.width<bl&&R.height<bl){f.emit("selection.box.cancelled",{reason:"too-small",width:Math.round(R.width),height:Math.round(R.height)});return}const E=wf(R,ae.current),_=N.current.nodes.filter(A=>$l(A,E)).map(A=>A.id);x(_),f.emit("selection.box.completed",{count:_.length,width:Math.round(R.width),height:Math.round(R.height)})},M=()=>{h(),at(null),f.emit("selection.box.cancelled",{reason:"pointer-cancelled"})};document.body.classList.add("is-selecting"),window.addEventListener("pointermove",C),window.addEventListener("pointerup",S,{once:!0}),window.addEventListener("pointercancel",M,{once:!0});return}x([]),J(null);const i={...ae.current},l=h=>{b({...i,x:i.x+h.clientX-s.x,y:i.y+h.clientY-s.y})},u=()=>{document.body.classList.remove("is-panning"),window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",u)};document.body.classList.add("is-panning"),window.addEventListener("pointermove",l),window.addEventListener("pointerup",u,{once:!0})},[b]),Ns=g.useCallback(a=>{const s=a.target.closest("textarea,.result-popover__body,.mindcanvas-text-scrollable-view"),i=a.ctrlKey||a.metaKey;if(s&&!i)return;const l=N.current.settings.wheelMode?i:!i;a.preventDefault();const u=ae.current;if(l){const h=Math.exp(-a.deltaY*.0012),C=de(u.scale*h,Uo,zo),S=Ie(a.clientX,a.clientY);b({x:a.clientX-S.x*C,y:a.clientY-S.y*C,scale:C});return}b({...u,x:u.x-a.deltaX,y:u.y-a.deltaY})},[b,Ie]);g.useEffect(()=>{const a=bn.current;if(a)return a.addEventListener("wheel",Ns,{passive:!1}),()=>a.removeEventListener("wheel",Ns)},[Ns]);const q=o.nodes.find(a=>a.id===c[0]),Fa=g.useMemo(()=>{const a=new Set(c);return o.nodes.filter(s=>a.has(s.id))},[o.nodes,c]),Rn=((xi=q==null?void 0:q.metadata)==null?void 0:xi[$.studioNodeType])??"",hu=Rn?Es(Rn):"Unassigned",fu=Rn==="template.input",ii=g.useMemo(()=>wl(Ce),[Ce]),Io=ue&&ue.issues.length===0?ue.template:null,li=g.useMemo(()=>Mo(Io,$t),[$t,Io]),bu=g.useMemo(()=>Fa.filter(a=>a.kind==="image"&&Xn(a).length>0).length,[Fa]),Ua=g.useMemo(()=>{const a=o.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}},[o.nodes]),di=g.useMemo(()=>{if(!q||q.kind!=="ai-task")return{size:0,runnable:0};const a=Nr(o,q.id);return{size:a.length,runnable:a.filter(s=>s.status!=="running").length}},[o,q]),ma=g.useMemo(()=>{if(Fa.length<2)return null;const a=Yo(Fa);if(!a)return null;const s=Math.max(.01,te.scale),i=a.minX*s+te.x-10,l=a.minY*s+te.y-10,u=a.maxX*s+te.x+10,h=a.maxY*s+te.y+10,C=(i+u)/2,S=l>112?l-52:h+12;return{left:i,top:l,width:Math.max(0,u-i),height:Math.max(0,h-l),toolbarLeft:de(C,168,Math.max(168,fe.width-168)),toolbarTop:de(S,42,Math.max(42,fe.height-58))}},[Fa,fe.height,fe.width,te]),Vt=oe?o.nodes.find(a=>a.id===oe):null,ci=Je?o.nodes.find(a=>a.id===Je&&!!a.companyMode):null,ui=vt?o.nodes.find(a=>a.id===vt&&a.kind==="directory"):null,mi=g.useMemo(()=>new Set([...c,...B.map(a=>a.id),ft,oe,Je,vt,ce==null?void 0:ce.from].filter(a=>!!a)),[Je,ce==null?void 0:ce.from,vt,ft,oe,B,c]),pa=g.useMemo(()=>{const a=kf(te,fe);return o.nodes.filter(s=>mi.has(s.id)||$l(s,a))},[mi,o.nodes,fe,te]),As=g.useMemo(()=>new Set(pa.map(a=>a.id)),[pa]);g.useEffect(()=>{f.emit("visibility.culled",{visible:pa.length,total:o.nodes.length,scale:Number(te.scale.toFixed(3))})},[o.nodes.length,te.scale,pa.length]);const yu=g.useCallback(()=>{const a=N.current,s=Y.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=>Y.current.includes(l.id)&&l.kind==="ai-task")??a.nodes.find(l=>l.kind==="ai-task");return i?zl(a,i,v.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:",Zn(v||(s==null?void 0:s.body)||"No prompt input.",4e3)].join(`
47
- `)},[v]),pi=g.useMemo(()=>{const a=new Map(o.nodes.map(s=>[s.id,s]));return o.edges.map(s=>{const i=a.get(s.from),l=a.get(s.to);if(!i||!l)return null;const u={x:i.x+i.width,y:i.y+i.height/2},h={x:l.x,y:l.y+l.height/2},C=Math.max(70,Math.abs(h.x-u.x)*.42);return{...s,path:`M ${u.x} ${u.y} C ${u.x+C} ${u.y}, ${h.x-C} ${h.y}, ${h.x} ${h.y}`}}).filter(Boolean)},[o.edges,o.nodes]),gi=g.useMemo(()=>pi.filter(a=>As.has(a.from)||As.has(a.to)),[pi,As]),et=g.useMemo(()=>Sf(o.nodes,te,fe),[o.nodes,te,fe]),xu=g.useCallback(a=>{if(!et)return;const s=a.currentTarget.getBoundingClientRect(),i=de(a.clientX-s.left,0,Wo),l=de(a.clientY-s.top,0,Ho),u=et.bounds.minX+(i-Xa)/et.scale,h=et.bounds.minY+(l-Xa)/et.scale;b({...ae.current,x:fe.width/2-u*ae.current.scale,y:fe.height/2-h*ae.current.scale}),f.emit("minimap.navigate",{worldX:Math.round(u),worldY:Math.round(h)})},[b,et,fe.height,fe.width]),Yt=o.settings.inputMode==="Image"?"Image":o.settings.inputMode==="Video"?"Video":null,Rt=Yt==="Image"?Zd:Yt==="Video"?Qd:null,Cu=v.trim().length>0||(q==null?void 0:q.kind)==="ai-task",hi=j.trim().length>0,fi=B[ee]??null,Su=hi?`${B.length} result${B.length===1?"":"s"}`:`${o.nodes.length} nodes`,Tn=tt?Fl(tt):null,No=Js(o.settings.gridType),bi=o.settings.gridSnap??!0,yi=o.settings.cameraBookmarks??{},Ms=St;return n.jsxs("div",{ref:bn,className:`mindcanvas ${xt?"mindcanvas--read-mode":""}`,"data-read-mode":xt?"true":"false","data-read-mode-api":cn?"bound":"unbound",onPointerMove:Jd,onDragOver:qc,onDrop:Jc,children:[n.jsx("div",{ref:At,className:`canvas-plane canvas-plane--grid-${No}`,"data-grid-type":No,"data-grid-snap":o.settings.gridSnap??!0?"on":"off",onPointerDown:gu,onContextMenu:a=>a.preventDefault(),children:n.jsxs("div",{ref:Ta,className:"canvas-world","data-visible-nodes":pa.length,"data-total-nodes":o.nodes.length,"data-visible-edges":gi.length,children:[n.jsx("svg",{className:"edge-layer",width:"4000",height:"3000",viewBox:"-1200 -900 4000 3000","aria-hidden":"true",children:gi.map(a=>n.jsx("path",{className:`edge-path edge-path--${a.kind}`,d:a.path,onClick:()=>D(s=>({...s,edges:s.edges.filter(i=>i.id!==a.id)}),"edge.delete",{id:a.id})},a.id))}),pa.map(a=>n.jsx(Vg,{node:a,selected:c.includes(a.id),pulsing:ft===a.id,connectionDraft:ce,onSelect:Sc,onDragStart:mu,onResizeStart:pu,onPatch:K,onDelete:Xc,onDuplicate:eu,onRun:ua,onPin:du,onOpenResult:J,onToggleAiReference:Pc,onCopyNode:_c,onCopyEmbedReference:Dc,onFitNodeHeight:Bc,onToggleNodeExpanded:Oc,onToggleWordWrap:$c,onStageCompany:Fc,onOpenCompanyGraph:Uc,onSyncCompanyGoal:zc,onRefreshCompany:Wc,onSetCompanyStatus:oi,onRemoveCompany:si,onOpenAsset:Kc,onOpenDirectorySettings:Mc,onScanDirectory:Lc,onCreateRemoteControl:jc,onGenerateTemplateCard:vc},a.id))]})}),Tn?n.jsx("div",{className:"canvas-selection-box",style:{left:Tn.left,top:Tn.top,width:Tn.width,height:Tn.height}}):null,ma?n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"canvas-multi-selection-bounds",style:{left:ma.left,top:ma.top,width:ma.width,height:ma.height}}),n.jsxs("div",{className:"multi-selection-toolbar floating-panel",role:"toolbar","aria-label":"Multi selection actions",style:{left:ma.toolbarLeft,top:ma.toolbarTop},children:[n.jsx("span",{className:"multi-selection-toolbar__count",children:Fa.length}),n.jsx("button",{type:"button",title:"Copy selected nodes","data-testid":"multi-selection-copy",onClick:()=>void Ss(),children:n.jsx(qn,{size:15})}),n.jsx("button",{type:"button",title:"Duplicate selected nodes",onClick:()=>Cs("multi-toolbar"),children:n.jsx(td,{size:15})}),n.jsx("button",{type:"button",title:"Bring selected nodes to front","data-testid":"multi-selection-bring-front",onClick:()=>Nn("front","multi-toolbar"),children:n.jsx(vm,{size:15})}),n.jsx("button",{type:"button",title:"Send selected nodes to back","data-testid":"multi-selection-send-back",onClick:()=>Nn("back","multi-toolbar"),children:n.jsx(jm,{size:15})}),n.jsx("button",{type:"button",title:"Fit selected text heights",onClick:Zc,children:n.jsx(Zi,{size:15})}),n.jsx("span",{className:"multi-selection-toolbar__separator"}),n.jsx("button",{type:"button",title:"Arrange selected nodes as grid",onClick:()=>ks("grid"),children:n.jsx(Qi,{size:15})}),n.jsx("button",{type:"button",title:"Arrange selected nodes as strip",onClick:()=>ks("strip"),children:n.jsx(el,{size:15})}),n.jsx("button",{type:"button",title:"Tidy selected nodes","data-testid":"multi-selection-tidy",onClick:()=>ks("tidy"),children:n.jsx(tl,{size:15})}),bu>=2&&n.jsx("button",{type:"button",title:"Stack selected image nodes","data-testid":"multi-selection-merge-images",onClick:Qc,children:n.jsx(To,{size:15})}),n.jsx("span",{className:"multi-selection-toolbar__separator"}),n.jsx("button",{type:"button",title:"Delete selected nodes",className:"is-danger","data-testid":"multi-selection-delete",onClick:()=>xs("multi-toolbar"),children:n.jsx(Go,{size:15})}),n.jsx("button",{type:"button",title:"Clear selection","data-testid":"multi-selection-clear",onClick:()=>{const a=Y.current.length;x([]),f.emit("selection.cleared",{source:"multi-toolbar",beforeCount:a})},children:n.jsx(pt,{size:15})})]})]}):null,st&&n.jsx("div",{className:"node-action-toast floating-panel",role:"status",children:st}),n.jsxs("div",{className:"top-tabbar",role:"tablist","aria-label":"MindCanvas boards",children:[Ma.map(a=>{const s=a.id===o.id,i=Xe(a.name),l=Hh(a,o,s);return n.jsxs("div",{className:`tab-shell ${s?"is-active":""} ${wt===a.id?"is-dragging":""} ${ln===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":wt===a.id?"dragging":ln===a.id?"over":"idle",onDragStart:u=>{u.dataTransfer.effectAllowed="move",u.dataTransfer.setData("text/plain",a.id),rn(a.id),f.emit("board.tabs.dragStart",{boardId:a.id})},onDragOver:u=>{!wt||wt===a.id||(u.preventDefault(),u.dataTransfer.dropEffect="move",Bt(a.id))},onDragLeave:()=>{Bt(u=>u===a.id?null:u)},onDrop:u=>{u.preventDefault();const h=wt||u.dataTransfer.getData("text/plain");Gd(h,a.id),rn(null),Bt(null)},onDragEnd:()=>{rn(null),Bt(null)},onMouseDown:u=>{u.button===1&&(u.preventDefault(),cs(a.id,"middle-click"))},children:[n.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?ie():Gr(a.id),children:[a.sourceKind==="localBridge"?n.jsx(Fn,{size:15}):n.jsx(To,{size:15}),n.jsx("span",{children:l})]}),!s&&n.jsx("button",{type:"button",className:"tab-close",title:"Close tab","data-testid":"board-tab-close",onClick:u=>{u.stopPropagation(),cs(a.id,"close-button")},children:n.jsx(pt,{size:13})})]},a.id)}),n.jsx("button",{type:"button",className:"tab-button tab-button--plain",title:"New board","data-testid":"board-create",onClick:Yr,children:n.jsx(Kn,{size:16})})]}),St&&n.jsxs(n.Fragment,{children:[n.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:()=>je("backdrop")}),n.jsx("div",{className:"project-gallery-shell","data-project-gallery-shell":"true",children:n.jsx("div",{className:"project-gallery-positioner","data-project-gallery-positioner":"true",children:n.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":Ee.currentMode,"data-project-storage-selected-tab":Oe,"data-project-storage-local-provider":Ee.localProviderKind,"data-project-storage-cloud-available":Ee.isCloudAvailable?"true":"false","data-project-storage-can-sync-cloud":Ee.canSyncLocalToCloud?"true":"false",children:[n.jsxs("header",{className:"local-board-panel__head project-gallery-panel__head",children:[n.jsxs("div",{className:"project-gallery-title",children:[n.jsxs("span",{className:"project-gallery-title__eyebrow",children:[n.jsx(Qi,{size:15}),"Project Gallery"]}),n.jsx("strong",{children:"Projects"}),n.jsx("p",{children:"Select a canvas snapshot to focus an open tab or load it in a new tab."})]}),n.jsxs("div",{className:"local-board-panel__actions project-gallery-panel__actions",children:[n.jsx("button",{type:"button",title:"New board",onClick:Yr,children:n.jsx(Kn,{size:15})}),n.jsx("button",{type:"button",title:"Close Project Gallery",onClick:()=>je("close-button"),children:n.jsx(pt,{size:15})})]})]}),n.jsxs("div",{className:"project-gallery-body",children:[n.jsxs("aside",{className:"project-gallery-folder-rail","data-project-gallery-folder-rail":"true",children:[n.jsxs("div",{className:"project-storage-tabs",role:"tablist","aria-label":"Project storage mode","data-project-storage-show-local":Ee.showLocalTab?"true":"false","data-project-storage-show-cloud":Ee.showCloudTab?"true":"false",children:[n.jsxs("button",{type:"button",role:"tab","aria-selected":Oe==="local",className:Oe==="local"?"is-active":"","data-testid":"project-storage-tab-local",onClick:()=>ia("local"),children:[n.jsx(Fn,{size:14}),"Local"]}),n.jsxs("button",{type:"button",role:"tab","aria-selected":Oe==="cloud",className:Oe==="cloud"?"is-active":"","data-testid":"project-storage-tab-cloud",onClick:()=>ia("cloud"),children:[n.jsx(Lo,{size:14}),"Cloud"]})]}),n.jsxs("label",{className:"project-gallery-current-name",children:[n.jsx("span",{children:"Current canvas"}),n.jsx("input",{"aria-label":"Board name",className:"board-name-input",maxLength:90,value:o.name,onChange:a=>us(a.target.value)})]}),n.jsxs("div",{className:"project-gallery-rail-card",children:[n.jsx("span",{children:"Storage"}),n.jsx("strong",{children:Oe==="local"?`${Ye.length} local boards`:"Cloud gated"}),n.jsx("small",{children:Oe==="local"?`${Ee.localProviderKind} provider / browser catalog and LocalBridge boards`:Ee.cloudStatusMessage??"Auth adapter required"})]}),n.jsxs("div",{className:"project-gallery-rail-card project-gallery-workspace-summary","data-testid":"project-gallery-workspace-summary",children:[n.jsx("span",{children:"Local Workspace"}),n.jsx("strong",{title:Me||void 0,children:Oe==="local"?Me?$o(Me):Yl(xe):"Cloud gated"}),n.jsx("small",{children:Oe==="local"?Me||io||"Connect LocalBridge to choose storage.":"Workspace selection is local only."})]}),n.jsxs("label",{className:"project-gallery-startup-toggle","data-testid":"project-gallery-show-at-startup",children:[n.jsx("input",{type:"checkbox",checked:Jt,onChange:a=>Wt(a.target.checked)}),n.jsx("span",{children:"Show at startup"})]})]}),n.jsx("section",{className:"project-gallery-board-area",children:Oe==="local"?n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"local-board-section project-gallery-board-section",children:[n.jsxs("div",{className:"local-board-section__title",children:[n.jsx("span",{children:"Workspace"}),n.jsxs("small",{children:[Ye.length," saved"]})]}),n.jsxs("div",{className:"local-board-list local-board-list--stored project-gallery-board-grid","data-project-gallery-board-grid":"true",children:[Ye.map(a=>{const s=nn===a.id,i=a.id===o.id;return n.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?n.jsxs("div",{className:"stored-board-rename",children:[n.jsx("input",{"aria-label":"Rename saved board",maxLength:90,value:sn,onChange:l=>Ia(l.target.value),onKeyDown:l=>Ec(a.id,l),onPointerDown:l=>l.stopPropagation(),autoFocus:!0}),n.jsx("button",{type:"button",title:"Save board name","data-testid":"stored-board-rename-save",onClick:()=>ys(a.id),children:n.jsx(Ds,{size:13})}),n.jsx("button",{type:"button",title:"Cancel rename","data-testid":"stored-board-rename-cancel",onClick:bs,children:n.jsx(pt,{size:13})})]}):n.jsxs(n.Fragment,{children:[n.jsxs("button",{type:"button",className:"local-board-row__main","data-testid":"stored-board-open","data-project-gallery-open-board":"true",onClick:()=>Gr(a.id),onDoubleClick:l=>{l.stopPropagation(),ni(a)},children:[a.sourceKind==="localBridge"?n.jsx(Fn,{size:15}):n.jsx(gt,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Xe(a.name)}),n.jsx("small",{children:If(a)}),i&&n.jsx("small",{className:"project-gallery-open-tab-badge",children:"Open tab"})]})]}),n.jsx("button",{type:"button",className:"local-board-row__action",title:"Rename board","data-testid":"stored-board-rename",onClick:()=>ni(a),children:n.jsx(al,{size:14})}),n.jsx("button",{type:"button",className:"local-board-row__action",title:"Delete board","data-testid":"stored-board-delete",disabled:i,onClick:()=>cs(a.id,"project-gallery"),children:n.jsx(Go,{size:14})})]})},a.id)}),Ye.length===0&&n.jsx("p",{className:"local-board-message",children:"No saved React boards yet."})]})]}),n.jsxs("div",{className:"local-board-section project-gallery-bridge-section",children:[n.jsxs("div",{className:"local-board-section__title",children:[n.jsx("span",{children:"LocalBridge"}),n.jsx("button",{type:"button",title:"Refresh local boards",onClick:T,disabled:xe==="checking",children:xe==="checking"?n.jsx(Lt,{size:15,className:"spin-icon"}):n.jsx(qa,{size:15})})]}),n.jsxs("div",{className:`local-board-state local-board-state--${xe}`,children:[xe==="blocked"?n.jsx(Jl,{size:15}):xe==="unavailable"?n.jsx(Im,{size:15}):n.jsx(Fn,{size:15}),n.jsx("span",{children:Yl(xe)}),xe==="blocked"&&!za()&&n.jsx("button",{type:"button",onClick:Ht,children:"Enable"})]}),qe&&n.jsx("p",{className:"local-board-message",children:qe}),n.jsxs("div",{className:"project-gallery-workspace-panel","data-testid":"project-gallery-workspace-panel","data-project-gallery-workspace-panel":"true",children:[n.jsxs("div",{className:"project-gallery-workspace-panel__main",children:[n.jsx(Bs,{size:16}),n.jsxs("span",{children:[n.jsx("strong",{children:"Local Workspace"}),n.jsx("small",{title:Me||void 0,children:Me||io||"LocalBridge workspace not connected."})]})]}),n.jsxs("div",{className:"project-gallery-workspace-panel__actions",children:[n.jsxs("button",{type:"button","data-testid":"project-gallery-workspace-refresh",title:"Refresh workspace",disabled:kt,onClick:()=>void Fd("workspace-panel"),children:[n.jsx(qa,{size:14}),n.jsx("span",{children:"Refresh"})]}),n.jsxs("button",{type:"button","data-testid":"project-gallery-workspace-browse",title:"Select Local Storage",disabled:kt||xe==="blocked"&&!za(),onClick:()=>void Ud(),children:[kt?n.jsx(Lt,{size:14,className:"spin-icon"}):n.jsx(Bs,{size:14}),n.jsx("span",{children:"Select Local Storage"})]})]}),De.length>0&&n.jsx("div",{className:"project-gallery-workspace-history","data-testid":"project-gallery-workspace-history",children:De.map(a=>n.jsx("button",{type:"button",title:a,disabled:kt||a===Me,onClick:()=>void ds(a,"history"),children:$o(a,40)},a))})]}),n.jsxs("button",{type:"button",className:"local-board-export","data-testid":"localbridge-export",disabled:ve||!!((Ci=o.source)!=null&&Ci.partialImport)||!!((Si=o.source)!=null&&Si.truncated)||xe==="blocked"&&!za(),title:(ki=o.source)!=null&&ki.partialImport?"Export blocked for partial original imports":(wi=o.source)!=null&&wi.truncated?"Export blocked for truncated imported boards":"Export current board to LocalBridge",onClick:()=>void zd(),children:[ve?n.jsx(Lt,{size:15,className:"spin-icon"}):n.jsx(nl,{size:15}),n.jsx("span",{children:ve?"Exporting":"Export current"})]}),n.jsx("div",{className:"local-board-list project-gallery-bridge-list",children:Et.slice(0,14).map(a=>n.jsxs("button",{type:"button","data-testid":"localbridge-board-row","data-board-id":a.Id,className:"local-board-row",disabled:!!lo,onClick:()=>void Kd(a),children:[n.jsx(Fn,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Xe(a.Title)}),n.jsx("small",{children:wr(a.UpdatedAt)})]}),lo===a.Id&&n.jsx(Lt,{size:15,className:"spin-icon"})]},a.Id))})]})]}):n.jsxs("div",{className:"project-cloud-shell","data-testid":"project-cloud-shell","data-project-cloud-status":Ee.isCloudAvailable?"available":"gated","data-project-cloud-plan":Ee.cloudPlanKey,"data-project-cloud-entitlement":Ee.cloudEntitlementStatus,"data-production-adapter-state":Le.overallState,"data-project-cloud-database-mode":Le.cloudBoards.mode,"data-project-cloud-database-ready":Le.cloudBoards.canAttempt?"true":"false","data-project-cloud-asset-upload-mode":Le.cloudAssetUpload.mode,"data-project-cloud-asset-upload-ready":Le.cloudAssetUpload.canAttempt?"true":"false","data-client-secret-blocked":Le.forbiddenClientSecretKeys.length>0?"true":"false",children:[n.jsx("div",{className:"project-cloud-shell__icon",children:he?n.jsx(Lo,{size:22}):n.jsx(Rr,{size:22})}),n.jsx("strong",{children:he?"Cloud boards are provider-ready":"Cloud projects are adapter-gated"}),n.jsx("p",{children:he?"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."}),n.jsxs("div",{className:"project-cloud-shell__current",children:[n.jsxs("span",{children:["Current: ",he?"Cloud ready":"Local"]}),n.jsxs("small",{children:[Xe(o.name)," / ",an??Ee.cloudStatusMessage??"saved in this browser"]})]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-new-board",disabled:!he||yt,title:he?"Create and save a cloud board":"Cloud board creation requires the cloud adapter",onClick:Vd,children:[yt?n.jsx(Lt,{size:14,className:"spin-icon"}):n.jsx(Kn,{size:14}),yt?"Saving":"New cloud board"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-save-current",disabled:!he||yt,title:he?"Save current board to Supabase":"Cloud save requires Supabase login",onClick:Hd,children:[n.jsx(nl,{size:14}),"Save current"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-refresh",disabled:!he||yt,title:he?"Refresh cloud boards":"Cloud refresh requires Supabase login",onClick:()=>void ct("refresh-button"),children:[yt?n.jsx(Lt,{size:14,className:"spin-icon"}):n.jsx(qa,{size:14}),"Refresh cloud"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-login-shell",onClick:()=>e("/login"),children:[n.jsx(Lo,{size:14}),"Open login shell"]}),he&&n.jsxs("div",{className:"local-board-list project-gallery-cloud-list","data-testid":"project-cloud-board-list",children:[va.map(a=>n.jsxs("button",{type:"button","data-testid":"project-cloud-board-row","data-board-id":a.id,className:"local-board-row",disabled:!!ja,onClick:()=>void Wd(a),children:[n.jsx(Lo,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Xe(a.name)}),n.jsxs("small",{children:[wr(a.updatedAt)," / ",a.nodeCount," nodes"]})]}),ja===a.id&&n.jsx(Lt,{size:15,className:"spin-icon"})]},a.id)),va.length===0&&n.jsx("p",{className:"local-board-message",children:"No cloud boards loaded."})]})]})})]})]})})})]}),!Ms&&n.jsx(Pg,{bridgeState:xe,bridgeMessage:qe,bridgeStatus:ss,syncStatus:_t,syncMessage:ka,hostedBridgeAccessEnabled:za(),onRefreshBridge:T,onEnableHostedBridge:Ht}),mn&&Z&&n.jsx(Wi,{launchers:Qt,activeLauncher:Z,template:ze,selectedOptionId:Ze,values:Nt,validationMessage:gn??(Ra?null:fn),canCreate:Ra||!fn,primaryLabel:Ra?"Add template card":"Create board",onLauncherSelected:rc,onOptionSelected:dc,onInputChanged:cc,onCreate:Yd,onClose:lc}),fo&&n.jsx("div",{className:"template-studio-chooser-backdrop","data-testid":"template-studio-chooser",onMouseDown:Jr,children:n.jsxs("section",{className:"template-studio-chooser floating-panel",onMouseDown:a=>a.stopPropagation(),children:[n.jsxs("header",{className:"template-studio-chooser__head",children:[n.jsxs("div",{children:[n.jsx("span",{children:"Template Studio"}),n.jsx("strong",{children:"Current Canvas Authoring Mode"})]}),n.jsx("button",{type:"button",title:"Close Template Studio chooser","data-testid":"template-studio-chooser-close",onClick:Jr,children:n.jsx(pt,{size:15})})]}),n.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."}),n.jsxs("div",{className:"template-studio-chooser__actions",children:[n.jsxs("button",{type:"button","data-testid":"template-studio-start-new",className:"template-studio-chooser__action",onClick:mc,children:[n.jsx("span",{className:"template-studio-chooser__icon",children:n.jsx(Kn,{size:17})}),n.jsxs("span",{children:[n.jsx("strong",{children:"New template board"}),n.jsx("small",{children:"Start a blank Studio draft on a new local board."})]})]}),n.jsxs("button",{type:"button","data-testid":"template-studio-convert-current",className:"template-studio-chooser__action",onClick:pc,children:[n.jsx("span",{className:"template-studio-chooser__icon",children:n.jsx(Os,{size:17})}),n.jsxs("span",{children:[n.jsx("strong",{children:"Convert current board"}),n.jsx("small",{children:"Keep this board and assign roles to existing nodes."})]})]})]})]})}),Na&&n.jsxs(n.Fragment,{children:[n.jsxs("section",{className:"template-studio-toolbar-stack","data-testid":"template-studio-toolbar",onMouseDown:a=>a.stopPropagation(),children:[n.jsxs("div",{className:"template-studio-toolbar floating-panel",children:[n.jsxs("div",{className:"template-studio-toolbar__badge",children:[n.jsx(To,{size:15}),n.jsx("span",{children:"Template Studio"})]}),n.jsxs("div",{className:"template-studio-toolbar__meta",children:["Editing ",Ce.templateId]}),n.jsx("button",{type:"button",title:"Compile manifest","data-testid":"template-studio-compile",onClick:ps,children:n.jsx(Ja,{size:15})}),n.jsx("button",{type:"button",title:"Test create board","data-testid":"template-studio-test-create",onClick:bc,children:n.jsx(fa,{size:15})}),n.jsx("button",{type:"button",title:"Copy manifest JSON","data-testid":"template-studio-copy",onClick:()=>void fc(),children:n.jsx(qn,{size:15})}),n.jsx("button",{type:"button",title:"Save template draft","data-testid":"template-studio-save",onClick:gc,children:n.jsx(Ds,{size:15})}),n.jsx("button",{type:"button",title:"Exit Template Studio","data-testid":"template-studio-close",onClick:Qr,children:n.jsx(pt,{size:15})})]}),n.jsx("div",{className:"template-studio-toolbar template-studio-toolbar--roles floating-panel",children:Ps.filter(a=>a.studioNodeType!=="template.note").map(a=>n.jsx("button",{type:"button",title:`Add ${a.label}`,"data-testid":"template-studio-add-node","data-studio-node-type":a.studioNodeType,onClick:()=>hc(a.studioNodeType),children:n.jsx("span",{children:a.shortLabel})},a.studioNodeType))}),q&&n.jsxs("div",{className:"template-studio-toolbar template-studio-toolbar--selected floating-panel",children:[n.jsxs("div",{className:"template-studio-toolbar__meta template-studio-toolbar__meta--selected",children:["Selected: ",q.title||q.kind]}),Ps.map(a=>n.jsx("button",{type:"button",title:a.label,className:Rn===a.studioNodeType?"is-active":"","data-testid":"template-studio-role","data-studio-node-type":a.studioNodeType,onClick:()=>ei(a.studioNodeType),children:n.jsx("span",{children:a.shortLabel})},a.studioNodeType))]})]}),n.jsxs("aside",{className:"template-studio-panel floating-panel","data-testid":"template-studio-panel",onMouseDown:a=>a.stopPropagation(),children:[n.jsxs("header",{className:"template-studio-panel__head",children:[n.jsxs("div",{children:[n.jsx("span",{children:"Template Meta"}),n.jsx("strong",{children:Ce.templateTitle})]}),n.jsx("button",{type:"button",title:"Close Template Studio",onClick:Qr,children:n.jsx(pt,{size:15})})]}),n.jsxs("div",{className:"template-studio-panel__body",children:[n.jsxs("section",{className:"template-studio-panel__section",children:[n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Template Id"}),n.jsx("input",{type:"text","data-testid":"template-studio-template-id",value:Ce.templateId,onChange:a=>So("templateId",a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Template Title"}),n.jsx("input",{type:"text",value:Ce.templateTitle,onChange:a=>So("templateTitle",a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Category"}),n.jsx("input",{type:"text",value:Ce.category,onChange:a=>So("category",a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Generated Board Title"}),n.jsx("input",{type:"text",value:Ce.boardTitle,onChange:a=>So("boardTitle",a.target.value)})]})]}),q?n.jsxs("section",{className:"template-studio-panel__section","data-testid":"template-studio-selected-node",children:[n.jsxs("div",{className:"template-studio-panel__node-summary",children:[n.jsx("strong",{children:q.title||q.kind}),n.jsx("span",{children:hu})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Template Role"}),n.jsxs("select",{value:Rn,onChange:a=>ei(a.target.value),children:[n.jsx("option",{value:"",children:"Unassigned"}),Ps.map(a=>n.jsx("option",{value:a.studioNodeType,children:a.label},a.studioNodeType))]})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Template Node Id"}),n.jsx("input",{type:"text",value:((vi=q.metadata)==null?void 0:vi[$.templateNodeId])??"",onChange:a=>Mt($.templateNodeId,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Compile Target"}),n.jsxs("select",{value:((ji=q.metadata)==null?void 0:ji[$.compileTarget])??"",onChange:a=>Mt($.compileTarget,a.target.value),children:[n.jsx("option",{value:"",children:"Auto"}),qu.map(a=>n.jsx("option",{value:a,children:a},a))]})]}),fu?n.jsxs(n.Fragment,{children:[n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Input Key"}),n.jsx("input",{type:"text",value:((Ii=q.metadata)==null?void 0:Ii[$.inputKey])??"",onChange:a=>Mt($.inputKey,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Input Type"}),n.jsxs("select",{value:((Ni=q.metadata)==null?void 0:Ni[$.inputType])??"text",onChange:a=>Mt($.inputType,a.target.value),children:[n.jsx("option",{value:"text",children:"Text"}),n.jsx("option",{value:"textarea",children:"Textarea"}),n.jsx("option",{value:"select",children:"Select"})]})]}),n.jsxs("label",{className:"template-studio-panel__checkbox",children:[n.jsx("input",{type:"checkbox",checked:(((Ai=q.metadata)==null?void 0:Ai[$.inputRequired])??"").toLowerCase()==="true",onChange:a=>Mt($.inputRequired,String(a.target.checked))}),n.jsx("span",{children:"Required input"})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Placeholder"}),n.jsx("input",{type:"text",value:((Mi=q.metadata)==null?void 0:Mi[$.inputPlaceholder])??"",onChange:a=>Mt($.inputPlaceholder,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Default Value"}),n.jsx("input",{type:"text",value:((Ri=q.metadata)==null?void 0:Ri[$.inputDefaultValue])??"",onChange:a=>Mt($.inputDefaultValue,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Description"}),n.jsx("textarea",{value:((Ti=q.metadata)==null?void 0:Ti[$.inputDescription])??"",onChange:a=>Mt($.inputDescription,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Select Options"}),n.jsx("textarea",{placeholder:`value|label
48
- value2|label2`,value:((Li=q.metadata)==null?void 0:Li[$.inputOptions])??"",onChange:a=>Mt($.inputOptions,a.target.value)})]})]}):n.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."})]}):n.jsx("section",{className:"template-studio-panel__section",children:n.jsx("p",{className:"template-studio-panel__hint",children:"Select a canvas node to assign a template role."})}),n.jsxs("section",{className:"template-studio-panel__section",children:[n.jsxs("div",{className:"template-studio-panel__section-head",children:[n.jsx("span",{children:"Compiled Manifest"}),yo&&n.jsx("small",{children:yo})]}),ue!=null&&ue.issues.length?n.jsx("div",{className:"template-studio-panel__issues","data-testid":"template-studio-issues",children:ue.issues.map(a=>n.jsxs("div",{className:"template-studio-panel__issue",children:[n.jsx("strong",{children:a.code}),n.jsx("span",{children:a.message})]},`${a.code}-${a.message}`))}):null,ue?n.jsx("pre",{className:"template-studio-panel__manifest","data-testid":"template-studio-manifest",children:ue.manifestJson}):n.jsx("p",{className:"template-studio-panel__hint",children:"Compile to preview the JSON manifest for the selected Studio nodes."})]})]})]})]}),ls&&Io&&n.jsx(Wi,{launchers:[ii],activeLauncher:ii,template:Io,selectedOptionId:null,values:$t,validationMessage:Aa??li,canCreate:!li,onLauncherSelected:()=>{},onOptionSelected:()=>{},onInputChanged:xc,onCreate:Cc,onClose:yc}),n.jsx("input",{ref:xn,type:"file",accept:"application/json,.json",multiple:!0,hidden:!0,"data-testid":"board-import-input",onChange:a=>{qd(a.currentTarget.files),a.currentTarget.value=""}}),!Ms&&n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"canvas-toolbar",role:"toolbar","aria-label":"MindCanvas tools",children:[n.jsx("button",{type:"button",title:"Add note","data-testid":"note-node-add",onClick:()=>_e("note"),children:n.jsx(ir,{size:17})}),n.jsx("button",{type:"button",title:"Add memo","data-testid":"memo-node-add",onClick:()=>_e("memo"),children:n.jsx(ed,{size:17})}),n.jsx("button",{type:"button",title:"Add markdown","data-testid":"markdown-node-add",onClick:()=>_e("markdown"),children:n.jsx(gt,{size:17})}),n.jsx("button",{type:"button",title:"Add CSV table","data-testid":"csv-table-node-add",onClick:()=>_e("csv-table"),children:n.jsx(el,{size:17})}),n.jsx("button",{type:"button",title:"Add code","data-testid":"code-node-add",onClick:()=>_e("code"),children:n.jsx(Ja,{size:17})}),n.jsx("button",{type:"button",title:"Add AI Task","data-testid":"ai-task-node-add",onClick:()=>_e("ai-task"),children:n.jsx(eo,{size:17})}),n.jsx("button",{type:"button",title:"Add Code Note","data-testid":"code-note-node-add",onClick:wc,children:n.jsx(Ja,{size:17})}),n.jsx("button",{type:"button",title:"Add Agent Command","data-testid":"agent-command-node-add",onClick:kc,children:n.jsx(Nm,{size:17})}),n.jsx("button",{type:"button",title:"Add image generation spec","data-testid":"image-generate-node-add",onClick:()=>_e("ai-task","image-generate"),children:n.jsx(to,{size:17})}),n.jsx("button",{type:"button",title:"Add video generation spec","data-testid":"video-generate-node-add",onClick:()=>_e("ai-task","video-generate"),children:n.jsx(ao,{size:17})}),n.jsx("button",{type:"button",title:"Add image","data-testid":"image-node-add",onClick:()=>_e("image"),children:n.jsx(to,{size:17})}),n.jsx("button",{type:"button",title:"Add image mask","data-testid":"mask-node-add",onClick:()=>_e("mask"),children:n.jsx(Am,{size:17})}),n.jsx("button",{type:"button",title:"Add video","data-testid":"video-node-add",onClick:()=>_e("video"),children:n.jsx(ao,{size:17})}),n.jsx("button",{type:"button",title:"Add embed","data-testid":"embed-node-add",onClick:()=>_e("embed"),children:n.jsx(Za,{size:17})}),n.jsx("button",{type:"button",title:"Add remote monitor","data-testid":"remote-monitor-node-add",onClick:()=>_e("remote-monitor"),children:n.jsx(rr,{size:17})}),n.jsx("button",{type:"button",title:"Add PDF","data-testid":"pdf-node-add",onClick:()=>_e("pdf"),children:n.jsx(gt,{size:17})}),n.jsx("button",{type:"button",title:"Add file reference","data-testid":"file-node-add",onClick:()=>_e("file"),children:n.jsx(Zl,{size:17})}),n.jsx("button",{type:"button",title:"Add directory reference","data-testid":"directory-node-add",onClick:()=>_e("directory"),children:n.jsx(Bs,{size:17})}),n.jsx("button",{type:"button",title:"Templates","data-testid":"template-launcher-open",onClick:ic,children:n.jsx(To,{size:17})}),n.jsx("button",{type:"button",title:"Template Studio",className:Na||fo?"is-active":"","data-testid":"template-studio-open",onClick:uc,children:n.jsx(al,{size:17})}),n.jsx("button",{type:"button",title:"Import board JSON","data-testid":"board-import-open",onClick:Xd,children:n.jsx(Mm,{size:17})}),n.jsx("button",{type:"button",title:"Tools",onClick:()=>e("/tools"),children:n.jsx(lr,{size:17})}),n.jsx("span",{className:"toolbar-separator"}),n.jsx("button",{type:"button",title:"Run all graphs","data-testid":"automation-run-all","data-ai-task-total":Ua.total,"data-ai-task-runnable":Ua.runnable,"data-ai-task-running":Ua.running,onClick:su,children:n.jsx(fa,{size:17})}),n.jsx("button",{type:"button",title:"Run selected graph","data-testid":"automation-run-selected","data-selected-graph-size":di.size,"data-selected-graph-runnable":di.runnable,disabled:!q||q.kind!=="ai-task",onClick:tu,children:n.jsx(ol,{size:17})}),n.jsx("button",{type:"button",title:"Pause running AI tasks","data-testid":"automation-pause","data-running-ai-tasks":Ua.running,onClick:ru,children:n.jsx(Ko,{size:17})}),n.jsx("button",{type:"button",title:"Stop active AI tasks","data-testid":"automation-stop","data-active-ai-tasks":Ua.active,"data-paused-ai-tasks":Ua.paused,onClick:iu,children:n.jsx(Rm,{size:15})}),n.jsx("button",{type:"button",title:"Generate flow",disabled:!q,onClick:lu,children:n.jsx(Os,{size:17})}),n.jsx("span",{className:"toolbar-separator"}),n.jsx("button",{type:"button",title:"Undo","data-testid":"history-undo",disabled:d.length===0,onClick:ws,children:n.jsx(Tm,{size:17})}),n.jsx("button",{type:"button",title:"Redo","data-testid":"history-redo",disabled:m.length===0,onClick:vs,children:n.jsx(Lm,{size:17})})]}),n.jsxs("div",{className:"search-panel floating-panel","data-testid":"mindcanvas-search-panel","data-search-engine":be,"data-search-worker-state":pe,children:[n.jsxs("div",{className:"search-input-row",children:[n.jsx(Em,{size:16}),n.jsx("input",{ref:La,"data-testid":"mindcanvas-search-input","aria-label":"Search text",value:j,onChange:a=>P(a.target.value),onKeyDown:uu,placeholder:"Search text ..."}),n.jsx("span",{className:"search-count","data-testid":"mindcanvas-search-count","aria-live":"polite",children:Su}),n.jsx("button",{type:"button",title:"Previous search result","data-testid":"mindcanvas-search-prev",disabled:B.length===0,onClick:()=>Mn(-1),children:n.jsx(Pm,{size:14})}),n.jsx("button",{type:"button",title:"Next search result","data-testid":"mindcanvas-search-next",disabled:B.length===0,onClick:()=>Mn(1),children:n.jsx(Un,{size:14})})]}),hi&&n.jsx("div",{className:"search-current","data-testid":"mindcanvas-search-current","aria-live":"polite",children:fi?n.jsxs(n.Fragment,{children:[n.jsxs("span",{children:[ee+1," / ",B.length]}),n.jsxs("button",{type:"button","data-testid":"mindcanvas-search-focus",onClick:()=>Is("current-button"),children:["Focus ",fi.title]})]}):n.jsx("span",{children:"No matches"})}),B.length>0&&n.jsx("div",{className:"search-results","data-testid":"mindcanvas-search-results",children:B.map((a,s)=>n.jsxs("button",{type:"button","data-testid":"mindcanvas-search-result",className:s===ee?"is-active":"","aria-current":s===ee?"true":void 0,onMouseEnter:()=>me(s),onClick:()=>js(a,"result-click"),children:[n.jsx("strong",{children:a.title}),n.jsx("span",{children:a.body.slice(0,84)})]},a.id))})]})]}),ce&&n.jsxs("div",{className:"connection-toast floating-panel",children:[n.jsx(Ds,{size:14}),"Select a compatible node pin to create a ",ce.kind," line.",n.jsx("button",{type:"button",onClick:()=>G(null),children:"Cancel"})]}),(Vt==null?void 0:Vt.result)&&n.jsxs("section",{className:"result-popover floating-panel","data-testid":"ai-result-popover",children:[n.jsxs("div",{className:"result-popover__header",children:[n.jsxs("strong",{children:[Vt.title," Result"]}),n.jsx("button",{type:"button",title:"Close",onClick:()=>J(null),children:n.jsx(pt,{size:14})})]}),n.jsxs("div",{className:"result-popover__actions","data-testid":"ai-result-popover-actions",children:[n.jsxs("button",{type:"button",title:"Copy result",onClick:()=>void au(Vt),children:[n.jsx(qn,{size:14}),n.jsx("span",{children:"Copy"})]}),n.jsxs("button",{type:"button",title:"Archive result as a Markdown node",onClick:()=>nu(Vt),children:[n.jsx(gt,{size:14}),n.jsx("span",{children:"Archive"})]}),n.jsxs("button",{type:"button",title:"Stage a follow-up AI Task from this result",onClick:()=>ou(Vt),children:[n.jsx(eo,{size:14}),n.jsx("span",{children:"Follow-up"})]})]}),n.jsx("pre",{className:"result-popover__body",children:Vt.result})]}),nt&&n.jsx(ph,{url:nt.url,fileName:nt.fileName,onClose:()=>{U(null),f.emit("node.pdf.preview.close")}}),ui&&n.jsx(Ju,{node:ui,onSave:Tc,onClose:Rc}),Ge&&n.jsx(Zu,{settings:o.settings,onPatchSettings:ke,onClose:oc}),ci&&n.jsx(mh,{board:o,rootNode:ci,onClose:Hc,onStatus:oi,onRemove:si,onSubmitFollowUp:Yc,onApproval:Vc,onAddArtifact:Gc}),Zt&&n.jsx(Qu,{board:o,selectedNode:q??null,selectedCount:c.length,input:v,viewport:te,viewportSize:fe,localBridgeState:xe,syncStatus:_t,syncMessage:ka,buildPrompt:yu,navigate:e,onClose:sc}),!Ms&&n.jsxs("div",{className:"global-input-shell","data-active-submits":V,"data-submit-state":V>0?"active":"idle",children:[n.jsx("textarea",{ref:yn,"data-testid":"global-input-textarea",value:v,placeholder:(q==null?void 0:q.kind)==="ai-task"?"Run selected AI Task...":"Talk with AI...",onChange:a=>L(a.target.value),onKeyDown:a=>{a.repeat||a.nativeEvent.isComposing||a.keyCode===229||(a.ctrlKey||a.metaKey)&&a.key==="Enter"&&(a.preventDefault(),ri())}}),n.jsxs("div",{className:"input-controls",children:[["Text","Image","Video"].map(a=>n.jsx("button",{className:o.settings.inputMode===a?"is-active":"",type:"button","data-testid":`global-input-mode-${a.toLowerCase()}`,onClick:()=>Kr("inputMode",a),children:a},a)),o.settings.inputMode==="Text"&&n.jsxs(n.Fragment,{children:[n.jsxs("label",{className:"input-select-wrap input-select-wrap--text-model",title:vn?`${Hi(vn.provider)}: ${vn.id}`:ms,children:[n.jsx("span",{className:"input-select-provider",children:vn?Hi(vn.provider):"Custom"}),n.jsx("select",{"aria-label":"Text model","data-testid":"text-model-select",value:ms,onChange:a=>tc(a.target.value),children:ec.map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Un,{size:15})]}),n.jsxs("button",{className:"select-button",type:"button",title:"Effort",onClick:()=>Kr("effort",o.settings.effort==="Normal"?"Deep":"Normal"),children:[o.settings.effort,n.jsx(Un,{size:15})]})]}),Yt&&Rt&&n.jsxs(n.Fragment,{children:[n.jsxs("label",{className:"input-select-wrap input-select-wrap--model",title:`${Rt.model.provider}: ${Rt.model.id}`,children:[n.jsx("span",{className:"input-select-provider",children:Rt.model.provider}),n.jsx("select",{"aria-label":`${Yt} model`,value:Rt.model.id,onChange:a=>ac(Yt,a.target.value),children:Ui(Yt).map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Un,{size:15})]}),n.jsxs("label",{className:"input-select-wrap input-select-wrap--aspect",title:Rt.aspect.note,children:[n.jsx("span",{className:`aspect-select__swatch ${em(Rt.aspect.id)}`}),n.jsx("select",{"aria-label":`${Yt} aspect ratio`,value:Rt.aspect.id,onChange:a=>nc(Yt,a.target.value),children:Rt.aspectOptions.map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Un,{size:15})]})]}),n.jsx("span",{className:"global-submit-count","aria-live":"polite",children:V}),n.jsx("button",{className:"send-button",type:"button",title:"Submit","data-testid":"global-input-submit",disabled:!Cu,onClick:ri,children:n.jsx(ol,{size:18})})]})]}),n.jsxs("div",{className:"canvas-view-control-stack","data-testid":"canvas-view-controls",children:[n.jsxs("section",{className:"canvas-view-panel floating-panel","aria-label":"Canvas grid controls","data-testid":"canvas-grid-controls",children:[Ad.map(a=>n.jsx("button",{type:"button",title:`Use ${a} grid`,"aria-label":`Use ${a} grid`,"aria-pressed":No===a,className:No===a?"is-active":"","data-testid":`canvas-grid-mode-${a}`,onClick:()=>Nc(a),children:a==="dot"?n.jsx(_m,{size:15}):a==="line"?n.jsx(Dm,{size:15}):a==="particles"?n.jsx(tl,{size:15}):n.jsx(Os,{size:15})},a)),n.jsx("span",{className:"canvas-view-panel__separator"}),n.jsx("button",{type:"button",title:"Toggle grid snap","aria-label":"Toggle grid snap","aria-pressed":bi,className:bi?"is-active":"","data-testid":"canvas-grid-snap-toggle",onClick:Ac,children:n.jsx(Bm,{size:15})})]}),n.jsxs("section",{className:"canvas-bookmark-strip floating-panel","aria-label":"Camera bookmarks","data-testid":"camera-bookmark-strip",children:[n.jsx("button",{type:"button",title:"Go to home view","aria-label":"Go to home view","data-testid":"camera-bookmark-home",onClick:gs,children:n.jsx(Om,{size:15})}),(()=>{const a=!!Oo(yi[Kt]);return n.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?da(Kt):jn(Kt)},children:n.jsx("span",{"aria-hidden":"true",children:"N"})})})(),Ys.map(a=>{const s=!!Oo(yi[a]);return n.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?da(a):jn(a)},children:n.jsx("span",{"aria-hidden":"true",children:a})},a)}),n.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:Ic,children:n.jsx($m,{size:15})})]})]}),n.jsxs("div",{className:"bottom-controls",children:[n.jsx("button",{type:"button",title:"Mouse wheel mode","aria-label":"Toggle mouse wheel mode","aria-pressed":o.settings.wheelMode,className:o.settings.wheelMode?"is-active":"","data-testid":"canvas-wheel-mode-toggle","data-wheel-mode":o.settings.wheelMode?"mouse":"trackpad",onClick:()=>hs("button"),children:n.jsx(Fm,{size:17})}),n.jsx("button",{type:"button",title:`Cursor direction ${o.settings.cursorDirection==="down"?"down":"right"}`,"aria-label":"Toggle cursor direction","aria-pressed":o.settings.cursorDirection==="down",className:o.settings.cursorDirection==="down"?"is-active":"","data-testid":"canvas-cursor-direction-toggle","data-cursor-direction":o.settings.cursorDirection==="down"?"down":"right",onClick:()=>fs("button"),children:n.jsx(Um,{size:17})}),n.jsx("button",{type:"button",title:"Reset fixture",onClick:cu,children:n.jsx(zm,{size:17})}),n.jsx("button",{type:"button",title:xt?"Exit read mode":"Fullscreen","aria-label":xt?"Exit read mode":"Fullscreen","aria-pressed":xt,className:xt?"is-active":"","data-testid":"canvas-read-mode-toggle","data-read-mode":xt?"true":"false",onClick:()=>{In("button")},children:n.jsx(Zi,{size:17})})]}),o.settings.minimapEnabled&&et&&n.jsxs("section",{className:"canvas-minimap floating-panel","aria-label":"Canvas minimap","data-testid":"canvas-minimap",children:[n.jsxs("div",{className:"canvas-minimap__head",children:[n.jsx("span",{children:"Minimap"}),n.jsx("small",{children:o.nodes.length})]}),n.jsxs("button",{type:"button",className:"canvas-minimap__stage","aria-label":"Navigate canvas minimap","data-testid":"canvas-minimap-stage",onPointerDown:xu,children:[et.nodes.map(a=>n.jsx("span",{className:`canvas-minimap__node canvas-minimap__node--${a.kind} ${c.includes(a.id)?"is-selected":""}`,style:{left:`${a.x}px`,top:`${a.y}px`,width:`${a.width}px`,height:`${a.height}px`}},a.id)),n.jsx("span",{className:"canvas-minimap__viewport",style:{left:`${et.viewport.x}px`,top:`${et.viewport.y}px`,width:`${et.viewport.width}px`,height:`${et.viewport.height}px`}})]})]}),n.jsxs("div",{className:"canvas-status",children:[o.nodes.length," nodes / ",pa.length," rendered / ",o.edges.length," edges / ",Math.round(te.scale*100),"%",((Ei=o.source)==null?void 0:Ei.kind)==="localBridge"&&n.jsxs(n.Fragment,{children:[" ","/ LocalBridge",o.source.partialImport?" partial":"",o.source.truncated?` ${o.source.renderedNodeCount}/${o.source.originalNodeCount}`:""]})]})]})}function Yl(e){switch(e){case"checking":return"Checking";case"connected":return"Connected";case"blocked":return"Access gated";case"unavailable":return"Unavailable";default:return"Idle"}}export{Qf as MindCanvas};