@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.
@@ -0,0 +1,48 @@
1
+ var Tu=Object.defineProperty;var Ru=(e,t,o)=>t in e?Tu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var Yi=(e,t,o)=>Ru(e,typeof t!="symbol"?t+"":t,o);import{j as n,r as g,a as Lu}from"./vendor-react-BXzpOyCS.js";import{l as Eu,a as ut,s as Lt,b as Pu,d as _u,r as Du,c as Bu,e as Ou,i as Gi}from"./storage-BxbRfn9F.js";import{r as Pr,g as os,w as $u,a as _s,d as Ki,b as Fu,t as _r,p as ad,v as Uu,R as zu,c as Wu,u as Hu,e as Vu,f as Xi,s as mt,i as Ka,l as Ds,h as $n,j as Lo,k as Fn,m as Un,n as Eo,o as fa,q as qi,x as Yu,y as zn,z as Gu,A as Ku,B as Xu,C as qu,D as nd,E as Ju,F as Zu,G as Xn,H as ir,I as Qu,J as em,K as Ji,L as lr,M as dr,N as od,O as Po,P as Ho,Q as qn,S as Zi,T as F,U as Bs,V as Jn,W as tm,X as am,Y as nm,Z as Qi,_ as Os,$ as om,a0 as sm,a1 as rm,a2 as im,a3 as cr,a4 as lm,a5 as dm,a6 as cm,a7 as um,a8 as el}from"./canvas-runtime-NLX25Qv6.js";import{e as mm,d as pm}from"./vendor-msgpack-BE8aAsr3.js";import{R as f}from"./app-runtime-xD2Z3NdN.js";import{g as $s}from"./index-DRrvtt94.js";import{g as ss,r as sd}from"./supabaseAuthAdapter-C3z334Qw.js";import{c as gm,a as hm,r as tl}from"./toolHandoff-D5e5f7t5.js";import{a as al,s as fm}from"./executionModeSettings-NJqurj-o.js";import{a as nl,p as bm}from"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";import{A as Et,W as ym,c as rd,D as xm,E as Dr,R as tn,J as Br,X as pt,N as ur,O as Cm,Q as oo,w as an,I as so,V as ro,l as mr,F as gt,Y as Sm,Z as id,_ as pr,$ as nn,a0 as ld,a1 as km,a2 as dd,a3 as wm,i as eo,a4 as cd,a5 as vm,a6 as ol,a7 as jm,a8 as xa,a9 as sl,T as Jo,aa as rl,ab as Zo,ac as Im,ad as gr,ae as ud,af as hr,ag as Nm,ah as Am,f as Mm,ai as Tm,h as Zn,x as Rm,aj as Lm,ak as Em,al as il,am as ll,an as dl,g as cl,ao as _o,H as Wn,ap as Do,s as Fs,aq as ul,ar as Pm,as as Us,at as ml,au as zs,av as _m,aw as Dm,ax as Bm,ay as pl,az as Om,aA as $m,aB as Fm,aC as Um,n as zm,o as Hn,aD as Wm,aE as Hm,aF as Vm,aG as Ym,aH as Gm,aI as Km,aJ as Xm,aK as qm}from"./vendor-icons-oiW_NVNO.js";const Jm=1200,ka="LocalBridgeOriginalNodeId";function ht(e){return typeof e=="object"&&e!==null}function qt(e,t){const o=Number(e);return Number.isFinite(o)?o:t}function W(e){return typeof e=="string"?e:""}function md(){return typeof window<"u"?{width:window.innerWidth||1280,height:window.innerHeight||720}:{width:1280,height:720}}function fr(e,t,o){const r=Number(e),d=Number(t),m=Number(o);if(!Number.isFinite(r)||!Number.isFinite(d)||!Number.isFinite(m)||m<=0)return null;const p=1400/m,y=md();return{x:y.width/2-r*p,y:y.height/2-d*p,scale:p}}function Zm(e){return ht(e)?fr(e.x??e.X,e.y??e.Y,e.z??e.Z):null}function Qm(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=md();return{x:(d.width/2-t)/r,y:(d.height/2-o)/r,z:1400/r}}function ep(e){const t=String(e||"").trim();if(t)try{const o=JSON.parse(t);if(!ht(o))return;const r={};for(const[d,m]of Object.entries(o)){const p=Zm(m);p&&(r[d]=p)}return Object.keys(r).length>0?r:void 0}catch{return}}function tp(e){if(!e||Object.keys(e).length===0)return null;const t={};for(const[o,r]of Object.entries(e)){const d=Qm(r);d&&(t[o]=d)}return Object.keys(t).length>0?JSON.stringify(t):null}function Qo(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 rs(){return crypto.randomUUID()}function Or(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 gl(e){const t=W(e).trim();if(!t)return null;try{return JSON.parse(t)}catch{return null}}function br(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=gl(o);if(r)return br(r)}for(const t of["ContentJson","contentJson","content_json"])if(t in e){const o=gl(e[t]);if(o)return br(o)}return Or(e)?[e]:[]}function $r(e){return ht(e)?"BoardId"in e&&("Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e):!1}function pd(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 es(e){return br(e).filter(Or)}function gd(e){return es(e).length}function ap(e,t){var m;const o=[...es(e)];if(!$r(t))return o;const r=new Set;for(const p of["Deletes","deletes"]){const y=t[p];if(Array.isArray(y))for(const c of y){const x=W(c).trim();x&&r.add(x)}}if(r.size>0)for(let p=o.length-1;p>=0;p-=1){const y=W((m=o[p])==null?void 0:m.Id).trim();y&&r.has(y)&&o.splice(p,1)}const d=new Map;o.forEach((p,y)=>{const c=W(p.Id).trim();c&&d.set(c,y)});for(const p of es(t)){const y=W(p.Id).trim(),c=y?d.get(y):void 0;if(c!==void 0){o[c]=p;continue}y&&d.set(y,o.length),o.push(p)}return o}function hd(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 yr(e,t){for(const o of e)try{const r=await Pr(o,t);return{payload:JSON.parse(r.content),path:o}}catch{}return null}async function np(e,t){const o=`.mindexec/boards/${e}.msgpack`,r=`boards/${e}.msgpack`;for(const y of[o,r])try{const c=await Fu(y,t);return{payload:pm(c),format:y===o?"msgpack":"legacy-msgpack",path:y}}catch{}const d=`.mindexec/boards/${e}.json`,m=`boards/${e}.json`,p=await yr([d,m],t);if(p)return{payload:p.payload,format:p.path===d?"json":"legacy-json",path:p.path};throw new Error(`LocalBridge board file not found: ${o}, ${r}, ${d}, ${m}`)}function xr(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 hl(e){return!ht(e)||Or(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 Fr(e){if(Array.isArray(e))return e.filter(hl).map(t=>xr(t)).filter(t=>!!t);if(hl(e)){const t=xr(e);return t?[t]:[]}return[]}function op(e){const t=e.toLowerCase();return sp(t)?"remote-control":rp(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 sp(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 rp(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 ip(e,t){const o=e.Metadata||{},r=o.ThumbnailUrl,d=o.OriginalUrl,m=o.OriginalPath;return _r(W(r)||W(d)||W(m)||W(e.Response),t)}function lp(e,t,o){const r=e.ImageStack,d=Array.isArray(r==null?void 0:r.Variants)?r.Variants:[];if(d.length===0)return;const m=d.map((y,c)=>{const x=W(y.AssetId).trim(),v=_r(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(m.length===0)return;const p=W(r==null?void 0:r.ActiveVariantId);return{activeVariantId:m.some(y=>y.variantId===p)?p:m[0].variantId,variants:m,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 dp(e,t){return!e||e.variants.length===0?t:(e.variants.find(r=>r.variantId===e.activeVariantId)??e.variants[0]).imageUrl||t}function cp(e,t,o){var p,y,c,x,v,L;const r=(y=(p=e.imageStack)==null?void 0:p.variants)!=null&&y.length?e.imageStack.variants:e.imageUrl?[{variantId:`${e.id}:image`,imageUrl:e.imageUrl,assetId:io(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||rs(),AssetId:j.assetId||io(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 up(e,t){const o=e.Metadata||{};return _r(W(o.OriginalUrl)||W(o.OriginalPath)||W(o.SourceFilePath)||W(e.SourceFilePath)||W(e.Response),t)}function mp(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 pp(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 io(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 gp(e,t){const o=new Map;for(const r of e){const d=t.get(r.from),m=t.get(r.to);!d||!m||o.has(m)||o.set(m,d)}return o}function hp(e){const t=new Set;return e.map(o=>{var c,x;const r=((c=o.metadata)==null?void 0:c[ka])||"",d=Qo(r)?r:Qo(o.id)?o.id:"",m=!!(d&&t.has(d)),p=d&&!m?d:rs(),y=((x=o.metadata)==null?void 0:x[ka])!==p;return t.add(p),{node:y?{...o,metadata:{...o.metadata??{},[ka]:p}}:o,originalId:p,assignedNodeId:!d||m,metadataStamped:y,duplicateOriginalId:m}})}function fp(e,t,o,r,d){var x,v,L;const m=pp(e.kind),p=m==="image"||m==="mask"?io(e.imageUrl,d):"",y=["video","pdf","file","directory","embed"].includes(m)?io(e.assetUrl||e.sourceFilePath||e.body,d):"",c={...e.metadata??{},[ka]: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)),p&&(c.OriginalUrl=p,c.ThumbnailUrl=p),y&&(c.OriginalPath=y,c.SourceFilePath=y),{Id:t,ContentType:m,Prompt:e.title||m,Response:m==="image"||m==="mask"?p||e.body||null:m==="remote-monitor"?e.body||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":m==="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:m==="image"?cp(e,d,r):null}}function bp(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 yp(e,t,o){const r=W(e.ContentType)||"note",d=W(e.Prompt).trim(),m=W(e.Response).trim(),p=mp(e.Metadata),y=W(e.Id).trim();y&&(p[ka]??(p[ka]=y));const x=["true","1","yes"].includes(String(p.ImageRouterMask||p.IsMask||"").trim().toLowerCase())?"mask":op(r),v=x==="memo"&&["mindcanvasagent","agentcommand"].includes(String(p.SemanticType||p.semanticType||"").trim().toLowerCase()),L=x==="memo"&&["codenote","code-note"].includes(String(p.SemanticType||p.semanticType||"").trim().toLowerCase()),j=W(e.SourceFilePath)||p.OriginalPath||p.SourceFilePath||"",P=x==="video"||x==="pdf"||x==="file"||x==="directory"||x==="embed"?up(e,o):void 0,H=d||e.SourceFilePath||r||"LocalBridge node",$=x==="image"?m||d||"Image asset":x==="mask"?m||d||"Image mask asset":x==="remote-monitor"?m||d||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":x==="remote-control"?m||d||j||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":x==="pdf"||x==="file"||x==="directory"||x==="embed"?m||j||d||r:m||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,ae=x==="image"||x==="mask"?ip(e,o):void 0,pe=x==="image"?lp(e,ae,o):void 0,ye=!!(e.IsChunkedText||p.IsChunkedText==="true"),we=qt(e.TotalLineCount??p.TotalLineCount,0),ge=qt(e.ScrollOffset,0),Ye=qt(e.MaxScroll,0);return{id:String(e.Id||crypto.randomUUID()),kind:x,title:x==="remote-monitor"?d||"Multi Desktop Monitor":x==="remote-control"?d||p.RemoteFleetDeviceName||"Remote Device":x==="template-launcher"?d||"Template Launcher":H,body:$,x:qt((t==null?void 0:t.PositionX)??e.PositionX,0),y:qt((t==null?void 0:t.PositionY)??e.PositionY,0),width:Math.max(160,Math.min(900,qt((t==null?void 0:t.Width)??e.Width,B))),height:Math.max(120,Math.min(900,qt((t==null?void 0:t.Height)??e.Height,X))),status:e.IsLoading?"running":x==="ai-task"?"idle":void 0,imageUrl:dp(pe,ae),imageStack:pe,assetUrl:P,sourceFilePath:j||void 0,isChunkedText:ye||void 0,totalLineCount:ye?we:void 0,scrollOffset:ye?ge:void 0,maxScroll:ye?Ye:void 0,isExpanded:typeof e.IsExpanded=="boolean"?e.IsExpanded:void 0,originalHeight:qt(e.OriginalHeight,0)||void 0,tags:v?["Agent Command",p.AgentCommandRequestedRole||"Researcher",p.AgentCommandStatus||"Draft"]:L?["Code Note",p.CodeNoteStatus||"Draft",p.CodeNoteSyncState||"Unlinked"]:x==="remote-monitor"?["Remote","Monitor","LocalBridge"]:x==="remote-control"?["Remote","Control","LocalBridge"]:["LocalBridge",r],metadata:x==="remote-monitor"?xp(p):x==="remote-control"?Cp(p):p,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 xp(e){return{RemoteHub:"Gated",RemoteRoute:"Gated",RemoteConnected:"0",RemoteTotal:"30",RemotePage:"1/1",AdapterState:"adapter-gated",...e}}function Cp(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 Sp(e,t){const o=[];for(const r of e){const d=String(r.Id||""),m=String(r.ParentId||"");!d||!m||!t.has(d)||!t.has(m)||o.push({id:`edge-local-${m}-${d}`,from:m,to:d,kind:"context"})}return o}async function kp(e=os()){const t=await Pr(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return(Array.isArray(o)?o.filter(ht):[]).map(m=>xr(m)).filter(m=>!!m).sort((m,p)=>String(p.UpdatedAt||"").localeCompare(String(m.UpdatedAt||"")))}async function wp(e){try{const t=await Pr(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return Array.isArray(o)?o.filter(ht):[]}catch{return[]}}async function vp(e,t,o,r=os()){var Z,ft,O,nt;if((Z=e.source)!=null&&Z.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||""):"",m=Qo(d),p=Qo(d)?d:rs(),y=new Date().toISOString(),c=hp(e.nodes),x=c.map(U=>U.node),v=new Map(c.map(U=>[U.node.id,U.originalId])),L=gp(e.edges,v),j=c.map(({node:U,originalId:ne})=>fp(U,ne,L.get(ne),y,r)),P=c.map(({node:U,originalId:ne})=>bp(U,ne)),H=t.scale>0?t.scale:1,$=(window.innerWidth/2-t.x)/H,B=(window.innerHeight/2-t.y)/H,X=1400/H,ae=(nt=e.nodes.find(U=>U.kind==="image"&&U.imageUrl))==null?void 0:nt.imageUrl,pe={Id:p,UserId:"00000000-0000-0000-0000-000000000000",Title:e.name||"Untitled Board",Description:"Exported from MindExec React",ThumbnailUrl:io(ae,r)||"",IsPublic:!1,CreatedAt:y,SyncedCloudBoardId:null,LastSyncedAt:null,LastCloudCopyStatus:null,UpdatedAt:y,LastCameraX:$,LastCameraY:B,LastCameraZ:X,LastCursorX:0,LastCursorY:0,CameraBookmarks:tp(e.settings.cameraBookmarks)},ye=`.mindexec/boards/${p}.msgpack`,we=`.mindexec/boards/${p}.json`,ge=`.mindexec/boards/${p}.layout.json`,Ye=`.mindexec/boards/${p}.delta.json`,tt=`boards/${p}.delta.json`,at=await wp(r),ue=[pe,...at.filter(U=>W(U.Id)!==p)],G=mm(j);await $u(ye,G,o,r),await _s(we,JSON.stringify(j,null,2),o,r),await _s(ge,JSON.stringify(P,null,2),o,r),await _s(".mindexec/boards/_metadata.json",JSON.stringify(ue,null,2),o,r);const se=await Promise.allSettled([Ki(Ye,o,r),Ki(tt,o,r)]);return f.emit("localBridge.board.exported",{boardId:p,nodes:j.length,edges:e.edges.length,snapshotFormat:"msgpack",msgpackBytes:G.byteLength,jsonMirror:!0,deltaCleared:se.some(U=>U.status==="fulfilled"&&U.value.success),reusedBoardId:m,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:pe,source:{kind:"localBridge",boardId:p,loadedAt:y,originalNodeCount:j.length,renderedNodeCount:j.length,truncated:!1,exportedByReact:!0,snapshotFormat:"msgpack"},nodes:x,msgpackPath:ye,boardPath:we,layoutPath:ge}}async function jp(e,t,o=os()){const r=await np(e.Id,o);let d=new Map;const m=await yr([`.mindexec/boards/${e.Id}.layout.json`,`boards/${e.Id}.layout.json`],o);m&&(d=hd(m.payload));let p=null;const y=await yr([`.mindexec/boards/${e.Id}.delta.json`,`boards/${e.Id}.delta.json`],o);y&&(p=y.payload);const c=p?Fr(p)[0]:null,x=!!(p&&$r(p)),v=x?ap(r.payload,p):r.payload;return fd(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:p?gd(p):0,deltaDeletes:p?pd(p):0,snapshotFormat:r.format})}function fd(e,t,o={}){const r=es(e),d=$r(e),m=o.deltaUpserts??(d?r.length:0),p=o.deltaDeletes??(d?pd(e):0),y=o.layoutPayload?hd(o.layoutPayload):new Map,c=r.slice(0,Jm),x=c.map(X=>yp(X,y.get(String(X.Id||"")),o.baseUrl??os())),v=new Set(x.map(X=>X.id)),L=Sp(c,v),j=r.length>x.length,P=d,H=o.deltaApplied===!0,$=o.boardId||rs(),B=o.updatedAt||new Date().toISOString();return f.emit("localBridge.board.loaded",{boardId:$,nodes:x.length,originalNodes:r.length,truncated:j,snapshotFormat:o.snapshotFormat,partialImport:P,deltaImport:d,deltaApplied:H,deltaUpserts:m,deltaDeletes:p}),{id:`localBridge:${$}`,name:o.title||"LocalBridge Board",nodes:x,edges:L,settings:{...t,cameraBookmarks:ep(o.cameraBookmarks)},updatedAt:B,source:{kind:"localBridge",boardId:$,loadedAt:new Date().toISOString(),snapshotFormat:o.snapshotFormat,originalNodeCount:r.length,renderedNodeCount:x.length,truncated:j,partialImport:P,deltaImport:d,deltaApplied:H}}}const Ur=["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(","),Ip=/^[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 Np(e){if(Ip.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 bd(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 Ap(e){return JSON.stringify({id:e.id,name:e.name,nodes:e.nodes,edges:e.edges,settings:e.settings,updatedAt:e.updatedAt})}function Cr(e,t=new Date().toISOString()){return e&&!Number.isNaN(Date.parse(e))?e:t}function zr(e){return(e==null?void 0:e.trim().slice(0,90))||"Untitled Board"}function yd(e){const t=bd(e.content_json),o=Cr(e.updated_at??t.updatedAt);return{id:e.id,name:zr(e.title??t.name),updatedAt:o,createdAt:Cr(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 Mp(e,t){const o=bd(e.content_json),r=Cr(e.updated_at??o.updatedAt);return{id:e.id,name:zr(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 Wr(e){var c;const t=sd(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=ss(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:m,error:p}=await o.auth.getUser(),y=((c=m.user)==null?void 0:c.id)??null;return p||!y?(f.emit("projectStorage.cloud.provider.sessionMissing",{message:(p==null?void 0:p.message)??"missing-user"}),{userId:null,config:t,reason:"missing-user"}):{userId:y,config:t,reason:"provider-ready"}}async function Tp(e){const t=await Wr(e);if(!t.userId)return[];const o=ss(e);if(!o)return[];f.emit("projectStorage.cloud.list.requested");const{data:r,error:d}=await o.from("boards").select(Ur).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 m=(r??[]).map(yd);return f.emit("projectStorage.cloud.list.loaded",{count:m.length}),m}async function Rp(e,t,o){const r=await Wr(e);if(!r.userId)return null;const d=ss(e);if(!d)return null;f.emit("projectStorage.cloud.load.requested",{boardId:t});const{data:m,error:p}=await d.from("boards").select(Ur).eq("user_id",r.userId).eq("id",t).maybeSingle();if(p)throw f.emit("projectStorage.cloud.provider.failed",{operation:"load",boardId:t,message:p.message}),p;if(!m)return null;const y=Mp(m,o);return f.emit("projectStorage.cloud.load.loaded",{boardId:t,nodes:y.nodes.length,edges:y.edges.length}),y}async function Lp(e,t,o){const r=await Wr(e);if(!r.userId)return null;const d=ss(e);if(!d)return null;const m=Np(t.id),p=new Date().toISOString(),y=zr(t.name),c={...t,id:m,name:y,updatedAt:p},x={p_board_id:m,p_title:y,p_description:null,p_thumbnail_url:null,p_is_public:!1,p_created_at:null,p_updated_at:p,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:m,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:m,message:v.message}),v;const L={content_json:Ap(c),updated_at:p},{data:j,error:P}=await d.from("boards").update(L).eq("id",m).eq("user_id",r.userId).select(Ur).maybeSingle();if(P)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-json-mirror",boardId:m,message:P.message}),P;const H=j?yd(j):{id:m,name:y,updatedAt:p,createdAt:p,nodeCount:t.nodes.length,edgeCount:t.edges.length,sourceKind:"cloud"};return f.emit("projectStorage.cloud.save.saved",{boardId:H.id,nodes:H.nodeCount,edges:H.edgeCount}),H}function Sr(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 Ep(e,t={},o=Sr(e),r){if(e.length===0)return{after:new Map,boundsAfter:o};const d=qp(t.mode),m=Jp(t.order),p=Zp(t.anchor),y=Qp(t.sizeMode),c=Math.max(0,t.gapX??24),x=Math.max(0,t.gapY??24),v=Math.max(1,t.maxColumns??12),L=kr(t.quantile??.75,.05,.95),j=e.map(Pp),P=Vp(j,m),H=P.map(ge=>ge.width),$=P.map(ge=>ge.height),B=Math.max(1,t.cellWidth??bl(H,L)),X=Math.max(1,t.cellHeight??bl($,L)),ae=Math.max(1,t.targetWidth??B),pe=Math.max(1,t.targetHeight??X),ye=Hp(p,o);if(d==="grid"){Fp(P,y,ae,pe,B,X);const ge=fl(t.columns,v,o.maxX-o.minX,B,c);Dp(P,ye.x,ye.y,ge,B,X,c,x)}else if(d==="masonry"){Up(P,y==="preserve"?"uniformWidth":y,ae);const Ye=fl(t.columns,v,o.maxX-o.minX,ae,c);Bp(P,ye.x,ye.y,Ye,ae,c,x)}else d==="stripHorizontal"?(zp(P,y==="preserve"?"uniformHeight":y,pe),Op(P,ye.x,ye.y,c,pe)):(Wp(P,y==="preserve"?"uniformWidth":y,ae),$p(P,ye.x,ye.y,x,ae));let we=new Map(P.map(ge=>[ge.id,_p(ge)]));return p==="selectionBoundsCenter"&&(we=Gp(o,we)),t.snapToGrid&&(we=Kp(we,Math.max(1,t.gridSize??8))),{after:we,boundsAfter:Sr(Array.from(we.values()))}}function Pp(e){return{...e,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function _p(e){return{x:e.x,y:e.y,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function Dp(e,t,o,r,d,m,p,y){e.forEach((c,x)=>{const v=Math.floor(x/r),L=x%r,j=t+L*(d+p),P=o+v*(m+y);c.x=j+(d-c.width)/2,c.y=P+(m-c.height)/2})}function Bp(e,t,o,r,d,m,p){const y=Array.from({length:r},()=>0);for(const c of e){const x=Xp(y),v=t+x*(d+m);c.x=v+(d-c.width)/2,c.y=o+y[x],y[x]+=c.height+p}}function Op(e,t,o,r,d){let m=t;for(const p of e)p.x=m,p.y=o+(d-p.height)/2,m+=p.width+r}function $p(e,t,o,r,d){let m=o;for(const p of e)p.x=t+(d-p.width)/2,p.y=m,m+=p.height+r}function Fp(e,t,o,r,d,m){if(t==="fitCellDownOnly")for(const p of e){const y=Math.min(1,d/p.width,m/p.height);p.width*=y,p.height*=y}else t==="uniformWidth"?Hr(e,o):t==="uniformHeight"&&xd(e,r)}function Up(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}Hr(e,o)}function zp(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}xd(e,o)}function Wp(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}Hr(e,o)}function Hr(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 xd(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 fl(e,t,o,r,d){if(typeof e=="number"&&e>0)return Math.round(kr(e,1,t));if(o<=1||r<=1)return 1;const m=Math.floor((o+d)/(r+d));return!Number.isFinite(m)||m<1?1:Math.round(kr(m,1,t))}function Hp(e,t,o){return{x:t.minX,y:t.minY}}function Vp(e,t){return t==="selectionOrder"?[...e].sort((o,r)=>o.selectionIndex-r.selectionIndex):Yp(e)}function Yp(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),m=[];let p=[],y=Number.NaN;for(const c of t)p.length===0?(p=[c],y=c.y):Math.abs(c.y-y)<=d?(p.push(c),y=(y*(p.length-1)+c.y)/p.length):(m.push([...p].sort((x,v)=>x.x-v.x)),p=[c],y=c.y);return p.length>0&&m.push([...p].sort((c,x)=>c.x-x.x)),m.flat()}function Gp(e,t){if(t.size===0)return t;const o=Sr(Array.from(t.values())),r=e.minX+(e.maxX-e.minX)/2,d=e.minY+(e.maxY-e.minY)/2,m=o.minX+(o.maxX-o.minX)/2,p=o.minY+(o.maxY-o.minY)/2,y=r-m,c=d-p;return new Map(Array.from(t.entries()).map(([x,v])=>[x,{...v,x:v.x+y,y:v.y+c}]))}function Kp(e,t){return new Map(Array.from(e.entries()).map(([o,r])=>[o,{...r,x:yl(r.x,t),y:yl(r.y,t)}]))}function bl(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),m=Math.min(o.length-1,d+1),p=r-d;return o[d]*(1-p)+o[m]*p}function Xp(e){let t=0;for(let o=1;o<e.length;o+=1)e[o]<e[t]&&(t=o);return t}function yl(e,t){return Math.round(e/t)*t}function qp(e){const t=is(e);return t==="grid"?"grid":t==="striphorizontal"||t==="striph"?"stripHorizontal":t==="stripvertical"||t==="stripv"?"stripVertical":"masonry"}function Jp(e){return is(e)==="selectionorder"?"selectionOrder":"spatialReading"}function Zp(e){const t=is(e);return t==="selectionboundscenter"?"selectionBoundsCenter":t==="viewporttopleft"?"viewportTopLeft":"selectionBoundsTopLeft"}function Qp(e){const t=is(e);return t==="fitcelldownonly"?"fitCellDownOnly":t==="uniformwidth"?"uniformWidth":t==="uniformheight"?"uniformHeight":"preserve"}function is(e){return String(e??"").trim().toLowerCase().replace(/[^a-z0-9]/g,"")}function kr(e,t,o){return Math.min(o,Math.max(t,e))}const Cd=300,Sd=50*1024*1024,eg=800;function Ce(e){return typeof e=="string"?e.length*2:0}function tg(e){let t=256;if(t+=Ce(e.id),t+=Ce(e.kind),t+=Ce(e.title),t+=Ce(e.body),t+=Ce(e.result),t+=Ce(e.imageUrl),t+=Ce(e.assetUrl),t+=Ce(e.sourceFilePath),t+=(e.tags??[]).reduce((o,r)=>o+Ce(r),0),e.metadata)for(const[o,r]of Object.entries(e.metadata))t+=Ce(o)+Ce(r);return e.imageStack&&(t+=128+Ce(e.imageStack.title),t+=e.imageStack.variants.reduce((o,r)=>o+96+Ce(r.variantId)+Ce(r.imageUrl)+Ce(r.assetId)+Ce(r.title)+Ce(r.caption),0)),t}function ag(e){let t=1024+Ce(e.id)+Ce(e.name)+Ce(e.updatedAt);return t+=e.nodes.reduce((o,r)=>o+tg(r),0),t+=e.edges.length*128,t+=Object.entries(e.settings).reduce((o,[r,d])=>o+Ce(r)+Ce(typeof d=="string"?d:JSON.stringify(d)),0),t}function kd(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:ag(e)}}function xl(e,t={}){const o=t.maxEntries??Cd,r=t.maxBytes??Sd;let d=e.slice(Math.max(0,e.length-o)),m=d.reduce((p,y)=>p+y.estimatedBytes,0);for(;d.length>1&&m>r;){const[p,...y]=d;m-=(p==null?void 0:p.estimatedBytes)??0,d=y}return d}function ba(e,t,o={}){const r=kd(t,o),d=o.mergeWindowMs??eg,m=e.slice(),p=m.at(-1);return p&&r.mergeKey&&p.mergeKey===r.mergeKey&&r.timestampMs-p.timestampMs<d?(m[m.length-1]={...p,description:r.description,timestampMs:r.timestampMs,estimatedBytes:Math.max(p.estimatedBytes,r.estimatedBytes)},xl(m,o)):(m.push(r),xl(m,o))}function ng(e,t,o={}){const r=kd(t,o),d=o.maxEntries??Cd,m=o.maxBytes??Sd;let p=[r,...e].slice(0,d),y=p.reduce((c,x)=>c+x.estimatedBytes,0);for(;p.length>1&&y>m;){const c=p.at(-1);y-=(c==null?void 0:c.estimatedBytes)??0,p=p.slice(0,-1)}return p}function ls(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 Vn(e,t){return!!ls(e,t)}function wd(e){if(!e||!e.trim())return!1;const t=e.trim();return/^(https?:|blob:|data:|file:)/i.test(t)}function vd(e){if(!e)return"";const t=ls(e,"OriginalPath");if(t)return t;const o=String(e.body||"").trim();return wd(o)?"":o}function jd(e){return e?vd(e)||String(e.sourceFilePath||"").trim()||String(e.assetUrl||"").trim()||String(e.imageUrl||"").trim()||String(e.body||"").trim():""}function Id(e){return ls(e,"ThumbnailUrl","thumbnailUrl")}function og(e){if(!e||e.kind!=="image")return!1;if(Vn(e,"ImageGenerationProvider")||Vn(e,"GeneratedImageSourceWidth")||Vn(e,"GeneratedImageSourceHeight")||Vn(e,"CodexImageQuality")||Vn(e,"ImageRouterRevisedPrompt"))return!0;const t=ls(e,"RequestedMediaOperation");return["text2image","image2image","inpaint"].includes(t.toLowerCase())}function Vr(e){if(!e)return"";if(e.kind==="image"||e.kind==="mask"){const t=og(e)?vd(e):"",o=Id(e),r=String(e.body||"").trim();return t||o||String(e.imageUrl||"").trim()||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()||(wd(r)?r:"")}return jd(e)||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()}function Nd(e){if(!e)return"";const t=jd(e)||e.title||e.kind;return String(t||"").replace(/\\/g,"/").replace(/\/+$/,"").split("/").filter(Boolean).pop()||e.title||e.kind}const sg=2048,rg=16e3,Ws=1024,Hs=64,ig=2048,Vs=3,lg=16,dg=256,cg=new Set(["text","note","memo","markdown","code","directory"]),ug=/[\p{L}\p{M}\p{N}]{2,}/gu,Cl=4,mg=8,Sl=1.35;function pg(e){return cg.has(String(e||"").trim().toLowerCase())}function gg(e){const t=e.map(fg),o=new Map,r=new Map,d=new Map,m=new Map;for(const p of t){o.set(p.id,p);for(const y of p.tokens)Ys(r,y,p.id);for(const y of p.prefixes)Ys(d,y,p.id);for(const y of p.ngrams)Ys(m,y,p.id)}return{documents:t,documentById:o,tokenIndex:r,prefixIndex:d,ngramIndex:m}}function hg(e,t,o={}){const r=Math.max(1,Math.trunc(Number(o.limit||30))),d=Za(t),m=kl(e,0,0,o.viewport,0);if(!d)return{hits:[],profile:m};const p=Array.from(Ad(d)),y=Array.from(Md(p)),c=Rd(d),x=Array.from(Td(c)),v=new Map;for(const $ of p)Gs(e.tokenIndex,$,v,8);for(const $ of y)Gs(e.prefixIndex,$,v,$.length<=3?4:2);for(const $ of x)Gs(e.ngramIndex,$,v,1.15);const L=Cg(e,v,r),j=Sg(o.allowedContentTypes),P=[];for(const $ of L){const B=e.documentById.get($);if(!B||j&&!j.has(B.contentType))continue;const X=yg(B,d,p,x);if(X<=0)continue;const ae=xg(B,o.viewport??null);P.push({nodeId:B.id,score:X+ae,textScore:X,viewportBoost:ae})}P.sort(($,B)=>B.score-$.score||$.nodeId.localeCompare(B.nodeId));const H=P.slice(0,r);return{hits:H,profile:kl(e,L.length,H.length,o.viewport,H.filter($=>$.viewportBoost>0).length)}}function Za(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 m of o){if(/\s/u.test(m)){d||(r+=" ",d=!0);continue}kg(m)||(r+=m,d=!1)}return r.trim()}function Ad(e){return new Set(e.match(ug)??[])}function Md(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 Td(e){const t=new Set;if(!e.trim())return t;if(e.length<=Vs)return t.add(e),t;for(let o=0;o<=e.length-Vs;o+=1)t.add(e.slice(o,o+Vs));return t}function fg(e){const t=String(e.kind??"").trim().toLowerCase(),o=Ca(e.prompt??e.title,sg),r=pg(t)?Ca(e.response??e.body,rg):"",d=bg(e.metadata,e.tags,e.metadataText),m=Ca(e.sourceFilePath||e.assetUrl,ig),p=Za(o),y=Za(r),c=Za(d),x=Za(m),v=Za(t),L=[p,c,x,y,v].filter(Boolean).join(" "),j=Ad(L);return{id:String(e.id),contentType:t,normalizedPrompt:p,normalizedResponse:y,normalizedMetadata:c,normalizedSourcePath:x,normalizedContentType:v,tokens:j,prefixes:Md(j),ngrams:Td(Rd(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 bg(e,t,o){const r=[];let d=0;if(e)for(const[m,p]of Object.entries(e)){if(d>=Hs)break;!String(m??"").trim()&&!String(p??"").trim()||(r.push(Ca(m,128)),String(p??"").trim()&&r.push(Ca(p,Ws)),d+=1)}return d<Hs&&(t!=null&&t.length)&&(r.push("tags",Ca(t.join(" "),Ws)),d+=1),d<Hs&&(o!=null&&o.trim())&&r.push("metadata",Ca(o,Ws)),r.join(" ")}function yg(e,t,o,r){let d=0;e.normalizedPrompt===t?d+=120:Yn(e.normalizedPrompt,t)&&(d+=54),Yn(e.normalizedMetadata,t)&&(d+=26),Yn(e.normalizedSourcePath,t)&&(d+=18),Yn(e.normalizedResponse,t)&&(d+=14),Yn(e.normalizedContentType,t)&&(d+=8);for(const m of o)e.tokens.has(m)&&(d+=7),e.normalizedPrompt.startsWith(m)&&(d+=10);for(const m of r)e.ngrams.has(m)&&(d+=.85);return d}function xg(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),m=Math.abs(r-t.centerY)/Math.max(1,t.halfHeight),p=Math.sqrt(d*d+m*m);if(p<=1)return Cl+(1-p)*mg;if(p<=Sl){const y=1-(p-1)/Math.max(.001,Sl-1);return Math.max(0,y)*(Cl*.75)}return 0}function Cg(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*lg,dg)).map(([r])=>r)}function Sg(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 kl(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 Ys(e,t,o){const r=e.get(t);if(r){r.add(o);return}e.set(t,new Set([o]))}function Gs(e,t,o,r){const d=e.get(t);if(d)for(const m of d)o.set(m,(o.get(m)??0)+r)}function Rd(e){let t="";for(const o of e)/\s/u.test(o)||(t+=o);return t}function Ca(e,t){const o=String(e??"");return o.length<=t?o:o.slice(0,t)}function Yn(e,t){return!!(e&&t&&e.includes(t))}function kg(e){const t=e.codePointAt(0)??0;return t<=31||t>=127&&t<=159}const wg=2147483647,vg="LocalBridge access is enabled, but the bridge is not reachable. Restart LocalBridge, allow Chrome local-network access, then reload MindCanvas.",jg="Local storage is unavailable in the hosted app until browser local storage or LocalBridge access is available.",Ig="Local storage is unavailable. Check the browser-local storage state or LocalBridge connection.",Ng="Cloud projects are unavailable until Supabase and Cloudflare R2 are configured.",Ag="Login is required before cloud projects can be used.",Mg="Cloud projects are unavailable.";function Tg(e){return e.bridgeProviderConfigured||e.browserProviderConfigured||e.embeddedProviderConfigured}function wr(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 Rg(e){return wr(e,!1).isAvailable?"local":Yr(e)?"cloud":wr(e,!0).isAvailable?"local":e.cloudConfigured?"cloud":"local"}function Yr(e){return e.cloudConfigured&&e.cloudSessionAvailable}function Lg(e,t){return t.providerKind==="bridge"&&!t.bridgeReachable?vg:e.hostedWebApp?jg:Ig}function Eg(e){return e.cloudConfigured?Yr(e)?Mg:Ag:Ng}function Pg(e){var v,L,j;const t=Yr(e),o=wr(e,!0),r=Tg(e),d=e.cloudConfigured,m=o.isAvailable,p=t;let y=e.storedMode??Rg(e);y==="cloud"&&(!d||!p&&m)?y=m?"local":"cloud":y==="local"&&(!r&&d||!m&&p)&&(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:m,canBrowseLocalWorkspace:o.canBrowseWorkspace,localProviderKind:o.providerKind,canUseCloudProjects:p,canSyncLocalToCloud:m&&p,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)??wg,lockedCloudBoardCount:(c==null?void 0:c.lockedBoardCount)??0,canCreateCloudBoards:(c==null?void 0:c.canCreateBoard)??p,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:Lg(e,o),cloudStatusMessage:p?void 0:Eg(e)}}function _g(){const e=new Error("Queued operation was cancelled before it started.");return e.name="AbortError",e}class Dg{constructor(){Yi(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 m;return m=(async()=>{try{try{await d}catch{}if(r!=null&&r.aborted)throw _g();return await o(r)}finally{this.tails.get(t)===m&&this.tails.delete(t)}})(),this.tails.set(t,m),m}clear(t){if(typeof t>"u"){this.tails.clear();return}this.tails.delete(t)}}const vr="mindexec-local-mode-warning-dismissed-v1";function Bg(){try{return window.localStorage.getItem(vr)==="true"}catch{return!1}}function Ld(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 Og(e,t,o){var d,m,p,y,c;if(e!=="connected")return t||Ld(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,(m=o==null?void 0:o.exec)!=null&&m.reasoningEffort?`reasoning ${o.exec.reasoningEffort}`:null,(p=o==null?void 0:o.exec)!=null&&p.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 $g({state:e,message:t,status:o,hostedBridgeAccessEnabled:r,onRefresh:d,onEnableHostedBridge:m}){const p=g.useMemo(()=>e==="checking"?n.jsx(Et,{size:14,className:"spin-icon"}):e==="connected"?n.jsx(ym,{size:14}):e==="blocked"?n.jsx(rd,{size:14}):e==="unavailable"?n.jsx(xm,{size:14}):n.jsx(Dr,{size:14}),[e]);return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--${e}`,title:Og(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:p}),n.jsx("span",{children:Ld(e,o)}),e==="blocked"&&!r&&n.jsx("button",{type:"button",className:"runtime-status-pill__action",onClick:m,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(tn,{size:13})})]})}function Fg({status:e,message:t}){const r={ready:{icon:n.jsx(ur,{size:14}),label:"Saved locally",title:"Board state is saved in this browser."},syncing:{icon:n.jsx(Et,{size:14,className:"spin-icon"}),label:"Saving",title:"Saving board state to this browser."},error:{icon:n.jsx(Br,{size:14}),label:"Save error",title:"Board state could not be saved locally."},offline:{icon:n.jsx(Dr,{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 Ug({visible:e}){const[t,o]=g.useState(Bg);if(!e||t)return null;const r=()=>{o(!0);try{window.localStorage.setItem(vr,"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":vr,children:[n.jsx("div",{className:"runtime-local-warning__icon","aria-hidden":"true",children:n.jsx(Br,{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 zg({bridgeState:e,bridgeMessage:t,bridgeStatus:o,syncStatus:r,syncMessage:d,hostedBridgeAccessEnabled:m,onRefreshBridge:p,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($g,{state:e,message:t,status:o,hostedBridgeAccessEnabled:m,onRefresh:p,onEnableHostedBridge:y}),n.jsx(Fg,{status:r,message:d})]}),n.jsx(Ug,{visible:c})]})}const Wg=/^data:image\//i;function Hg(e){const t=String(e||"").trim();if(!t)return{src:null,reason:"empty",urlKind:"empty"};const o=t.toLowerCase();return Wg.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 Ks({src:e,alt:t="",className:o="",testId:r="secure-image",traceId:d,kind:m="image",title:p}){const y=g.useMemo(()=>Hg(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:m,reason:y.reason,urlKind:y.urlKind})},[m,y.reason,y.src,y.urlKind,d]);const v=()=>{x("loaded"),f.emit("secureImage.loaded",{id:d,kind:m,urlKind:y.urlKind})},L=()=>{x("error"),f.emit("secureImage.error",{id:d,kind:m,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":m,title:c==="loaded"?p: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(Cm,{size:18}):n.jsx(Br,{size:18})})]})}const Vg={note:pr,text:gt,"ai-task":oo,image:so,mask:so,video:ro,embed:nn,code:an,markdown:gt,"csv-table":gt,memo:pr,pdf:gt,file:id,directory:Sm,"template-launcher":gt,"remote-monitor":mr,"remote-control":mr},Xs=[{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."}],wl=500,Yg=48,Gg=new Set(["mindcanvasagent","agentcommand"]),Kg=new Set(["codenote","code-note"]),Xg=["multidesktopmonitor","remotehubmonitor","remotefleetmonitor","smartviewmonitor"],qg=["remotedevice","remotefleetdevice","remotecontrol"];function Jg(e){const t=on(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=on(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=on(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-monitor"||t==="remotefleetmonitor"||o==="fleet-monitor"||r==="remote-fleet@1"||Pd(e,["RemoteFleetViewMode","RemoteFleetHubStatus","RemoteFleetDevicesJson","RemoteFleetDeviceCount","RemoteFleetConnectedDeviceCount","RemoteFleetProjectionMode","RemoteFleetCanvasPagination","RemoteHub","RemoteRoute","RemotePage","RemoteVisibleBudget"])||Ed(e,Xg,["remote","monitor"])}function Zg(e){const t=on(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=on(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=on(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-control"||t==="remotefleetdevice"||o==="fleet-device"||r==="remote-fleet-device@1"||Pd(e,["RemoteFleetDeviceId","RemoteFleetDeviceName","RemoteFleetDevicePlatform","RemoteFleetDeviceConnected","RemoteFleetDeviceCanControl","RemoteFleetSourceMonitorNodeId"])||Ed(e,qg,["remote","control"])}function Ed(e,t,o){const r=(e.tags??[]).map(y=>y.trim().toLowerCase()).filter(Boolean),d=o.every(y=>r.includes(y)),p=[e.title,e.body,e.sourceFilePath,e.assetUrl,...r].join(" ").toLowerCase().replace(/[^a-z0-9]+/g,"");return d||t.some(y=>p.includes(y))}function on(e,...t){const o=e.metadata??{};for(const d of t){const m=o[d];if(m!=null)return String(m)}const r=new Set(t.map(d=>d.toLowerCase()));for(const[d,m]of Object.entries(o))if(r.has(d.toLowerCase())&&m!==void 0&&m!==null)return String(m);return""}function Pd(e,t){const o=e.metadata??{},r=new Set(t.map(d=>d.toLowerCase()));return Object.entries(o).some(([d,m])=>r.has(d.toLowerCase())&&m!==void 0&&m!==null&&String(m).trim()!=="")}const jr=[{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"}],Qg=g.memo(function({node:t,selected:o,pulsing:r,connectionDraft:d,onSelect:m,onDragStart:p,onResizeStart:y,onPatch:c,onDelete:x,onDuplicate:v,onRun:L,onPin:j,onOpenResult:P,onToggleAiReference:H,onCopyNode:$,onCopyEmbedReference:B,onFitNodeHeight:X,onToggleNodeExpanded:ae,onToggleWordWrap:pe,onStageCompany:ye,onOpenCompanyGraph:we,onSyncCompanyGoal:ge,onRefreshCompany:Ye,onSetCompanyStatus:tt,onRemoveCompany:at,onOpenAsset:ue,onOpenDirectorySettings:G,onScanDirectory:se,onCreateRemoteControl:Z,onGenerateTemplateCard:ft}){var sa,Ra,Ut,La,Q,We,Ea,kn,I,V,oe,wn,Mt,Pa,_a,vn,jn,Da,In,ra,Nn,Ba,ia,zt,_e,Le,Oa,An,Mn,la,da,$a,Wt,Fa,dt;const O=String(((sa=t.metadata)==null?void 0:sa.AutomationNodeKind)||((Ra=t.metadata)==null?void 0:Ra.AutomationTemplateKey)||((Ut=t.metadata)==null?void 0:Ut.AutomationInferredKind)||"").trim().toLowerCase(),nt=String(((La=t.metadata)==null?void 0:La.SemanticType)||((Q=t.metadata)==null?void 0:Q.semanticType)||"").trim().toLowerCase(),U=t.kind==="memo"&&Gg.has(nt),ne=t.kind==="memo"&&Kg.has(nt),wa=String(((We=t.metadata)==null?void 0:We.AgentCommandStatus)||"Draft"),be=String(((Ea=t.metadata)==null?void 0:Ea.AgentCommandMode)||"Task"),ot=String(((kn=t.metadata)==null?void 0:kn.AgentCommandRequestedRole)||"Researcher"),kt=String(((I=t.metadata)==null?void 0:I.CodeNoteStatus)||"Draft"),Qt=String(((V=t.metadata)==null?void 0:V.CodeNoteSyncState)||"Unlinked"),ea=String(((oe=t.metadata)==null?void 0:oe.CodeNoteKind)||"Feature"),lo=U?oo:ne?an:O==="image-generate"?so:O==="video-generate"?ro:Vg[t.kind],$e=d&&d.from!==t.id,co=t.kind==="ai-task",Pt=t.kind==="pdf"||t.kind==="file"||t.kind==="directory",bt=Jg(t),Se=Zg(t),ee=bt||Se,ds=bt?"monitor":Se?"control":"",Me=t.kind==="template-launcher"||String(((wn=t.metadata)==null?void 0:wn.semanticType)||((Mt=t.metadata)==null?void 0:Mt.SemanticType)||"").toLowerCase()==="templatelauncher",qe=t.kind==="video",le=t.kind==="embed",Te=t.kind==="mask",Fe=t.kind==="memo",uo=t.kind==="markdown",he=t.kind==="csv-table",Be=Fe?lh(t):null,_t=g.useRef(null),wt=qe?_d(t):"",je=qe?ch(t):"",st=le?uh(t):"",Oe=le?mh(t):"",mo=le?ph(t,st):"",va=le?gh(t):"",Ie=(((Pa=t.imageStack)==null?void 0:Pa.variants)??[]).filter(b=>!!b.imageUrl),Ue=Ie.find(b=>{var R;return b.variantId===((R=t.imageStack)==null?void 0:R.activeVariantId)})??Ie[0]??null,Dt=t.kind==="image"||Te?(Ue==null?void 0:Ue.imageUrl)||Vr(t):"",po=Ue?Ie.findIndex(b=>b.variantId===Ue.variantId):-1,ja=!Dt&&!Pt&&!ee&&!Me&&!qe&&!le,go=ja&&!Fe,Ge=t.isExpanded===!1&&Number(t.originalHeight??0)>t.height+1,ze=!ee&&!["image","mask","video","embed","pdf","file","directory","template-launcher","remote-monitor","remote-control"].includes(t.kind),Ee=t.aiEnabled!==!1,Ia=dh(t),ho=!!(t.isChunkedText||((_a=t.metadata)==null?void 0:_a.IsChunkedText)==="true"),fe=Number(t.totalLineCount??((vn=t.metadata)==null?void 0:vn.TotalLineCount)??0),Na=t.sourceFilePath||((jn=t.metadata)==null?void 0:jn.FileName)||t.title,fo=ho?n.jsxs("div",{className:"node-chunked-text-state","data-testid":"node-chunked-text-state",title:Na,children:[n.jsx(gt,{size:12}),n.jsx("strong",{children:"Chunked text"}),Number.isFinite(fe)&&fe>0&&n.jsxs("span",{children:[fe.toLocaleString()," lines"]})]}):null,dn=t.kind==="directory"?(Da=t.metadata)==null?void 0:Da.Include:null,Re=t.kind==="directory"?(In=t.metadata)==null?void 0:In.Exclude:null,yt=t.kind==="directory"?(ra=t.metadata)==null?void 0:ra.DirectoryFileCount:null,Bt=t.kind==="directory"?(Nn=t.metadata)==null?void 0:Nn.DirectoryDirCount:null,Aa=t.kind==="directory"?(Ba=t.metadata)==null?void 0:Ba.DirectoryLastScanUtc:null,[bo,Pe]=g.useState(!1),[cn,un]=g.useState(null),[mn,Ma]=g.useState(((ia=t.metadata)==null?void 0:ia.CompanyExecutionMode)||"Auto"),[vt,pn]=g.useState(((zt=t.metadata)==null?void 0:zt.CompanySubAgents)!=="false"),[gn,Ot]=g.useState(!1),[Ke,hn]=g.useState(null),ta=g.useMemo(()=>he?nh(t.body,Ke):null,[Ke,he,t.body]),re=g.useMemo(()=>Me?ad(t.body):null,[Me,t.body]),Je=(re==null?void 0:re.options.find(b=>b.id===re.selectedOptionId))??(re==null?void 0:re.options[0])??null,rt=Uu(re),jt=Xs.find(b=>b.key===mn)||Xs[0],It=String(((_e=t.metadata)==null?void 0:_e.CompanyStatus)||(t.companyMode?"Staged":"")).trim(),xt=It.toLowerCase(),cs=xt==="paused",fn=xt==="archived",yo=b=>{b.stopPropagation();const R=b.currentTarget.getBoundingClientRect();un(th(R)),Pe(de=>!de)},bn=b=>{b.stopPropagation(),ye(t.id,{executionMode:jt.key,enableSubAgents:vt}),Pe(!1)},aa=b=>{b.stopPropagation(),we(t.id)},yn=(b,R)=>{R.stopPropagation();const de=Ie.find(Ne=>Ne.variantId===b);!de||!t.imageStack||de.variantId===t.imageStack.activeVariantId||(f.emit("node.imageStack.variant",{nodeId:t.id,variantId:de.variantId,variantCount:Ie.length}),c(t.id,{imageUrl:de.imageUrl,imageStack:{...t.imageStack,activeVariantId:de.variantId,variants:Ie,updatedAtUtc:new Date().toISOString()},metadata:{...t.metadata??{},ImageStackActiveVariantId:de.variantId}}))},Nt=(b,R)=>{if(R.stopPropagation(),!!Fe){if((Be==null?void 0:Be.key)===b){Ot(!1);return}f.emit("node.memoColor.changed",{id:t.id,colorKey:b}),c(t.id,{metadata:{...t.metadata??{},memoColor:b,memoColorIsCustom:"true"}}),Ot(!1)}},xo=b=>{var Vt,ua;if(b.stopPropagation(),!U)return;const R=(t.body||t.title||"Agent command objective").trim(),de=["Clarify the objective and constraints.","Collect linked canvas context or code notes.","Draft an execution plan before external adapter use."],Ne=["canvas-context","agent-command-planning","adapter-gated-execution"],Ht=["Canvas.ListAgentCommands","Canvas.UpdateAgentCommand","Canvas.PlanAgentCommand","Canvas.SetAgentCommandState"],ct=["MindCanvasAgent",be,ot],ca=["Local React plan staged for this Agent Command.",`Role: ${ot}`,`Mode: ${be}`,`Objective: ${R.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:be,requestedRole:ot,adapterState:((Vt=t.metadata)==null?void 0:Vt.AdapterState)??"adapter-gated"}),c(t.id,{tags:["Agent Command",ot,"Planned"],metadata:{...t.metadata??{},AgentCommandStatus:"Planned",AgentCommandPlannerSummary:ca,AgentCommandPlanSteps:JSON.stringify(de),AgentCommandPlannedSkills:JSON.stringify(Ne),AgentCommandPlannedTools:JSON.stringify(Ht),AgentCommandPlannedConcepts:JSON.stringify(ct),AgentCommandLastExplorationPhase:"planned-local",AdapterState:((ua=t.metadata)==null?void 0:ua.AdapterState)??"adapter-gated"}})},na=b=>{var Ht,ct;if(b.stopPropagation(),!U)return;const R=new Date().toISOString(),de=[`Agent Command: ${t.title||"Agent"}`,`Status: Completed locally at ${R}`,"","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
+ `),Ne=[`${R} Local React execution staged.`,`${R} Adapter gated; no external tools invoked.`];f.emit("mindcanvas.agentCommand.executed.local",{id:t.id,mode:be,requestedRole:ot,adapterState:((Ht=t.metadata)==null?void 0:Ht.AdapterState)??"adapter-gated"}),c(t.id,{status:"done",result:de,tags:["Agent Command",ot,"Completed"],metadata:{...t.metadata??{},AgentCommandStatus:"Completed",AgentCommandLastExecutedAtUtc:R,AgentCommandConsoleLogs:JSON.stringify(Ne),AgentCommandResultLinks:JSON.stringify([]),AdapterState:((ct=t.metadata)==null?void 0:ct.AdapterState)??"adapter-gated"}})},Ct=(b,R,de,Ne)=>{var ct,ca,Vt;if(b.stopPropagation(),!ne)return;const Ht=R==="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:R,syncState:de,reason:Ne,adapterState:((ca=t.metadata)==null?void 0:ca.AdapterState)??"local-canvas-only"}),c(t.id,{tags:["Code Note",R,de],metadata:{...t.metadata??{},CodeNoteStatus:R,CodeNoteSyncState:de,CodeNoteOutputArtifacts:Ht,...R==="Implemented"||R==="Reviewed"?{CodeNoteLastAppliedAtUtc:new Date().toISOString()}:{},AdapterState:((Vt=t.metadata)==null?void 0:Vt.AdapterState)??"local-canvas-only"}})},Co=()=>{pn(b=>!b)},Ze=async b=>{if(b.stopPropagation(),!je||!_t.current){f.emit("node.video.unavailable",{id:t.id,reason:je?"element-missing":"source-missing"});return}try{await _t.current.play(),f.emit("node.video.play",{id:t.id,sourceKind:jl(je)})}catch(R){f.emit("node.video.unavailable",{id:t.id,reason:R instanceof Error?R.message:String(R)})}},xn=b=>{if(b.stopPropagation(),!je||!_t.current){f.emit("node.video.unavailable",{id:t.id,reason:je?"element-missing":"source-missing"});return}_t.current.pause(),f.emit("node.video.pause",{id:t.id,sourceKind:jl(je)})},At=b=>{b.stopPropagation(),st&&B(t.id,st)},oa=b=>{c(t.id,{body:JSON.stringify(b),metadata:{...t.metadata??{},templateLauncherSelectedOptionId:b.selectedOptionId??""}})},Cn=(b,R)=>{if(R.stopPropagation(),!re)return;const de=Hu(re,b);oa(de),f.emit("templateCard.option.select",{nodeId:t.id,optionId:de.selectedOptionId??null})},it=(b,R)=>{if(!re)return;const de=Vu(re,b,R);oa(de),f.emit("templateCard.input.patch",{nodeId:t.id,key:b})},Ta=b=>{b.stopPropagation(),!(!re||rt)&&ft(t.id,re.selectedOptionId??null,re.inputValues)},$t=ze&&bo?n.jsxs("div",{className:"node-company-launcher","data-testid":"node-company-launcher",style:cn?{left:cn.left,top:cn.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:Xs.map(b=>n.jsxs("button",{type:"button",className:b.key===jt.key?"is-selected":"","data-company-mode":b.key,onClick:()=>Ma(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":vt,onClick:b=>{b.stopPropagation(),Co()},children:[n.jsx("span",{className:"node-company-toggle-indicator","aria-hidden":"true",children:vt?"On":"Off"}),n.jsxs("span",{children:[n.jsx(ld,{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:()=>Pe(!1),children:"Cancel"}),n.jsx("button",{type:"button",className:"btn btn-primary","data-testid":"node-company-run-confirm",onClick:bn,children:"Stage Company"})]})]}):null,ke={width:t.width,height:t.height,transform:`translate3d(${t.x}px, ${t.y}px, 0)`,...Be?{"--memo-bg":Be.surface,"--memo-border":Be.border,"--memo-ink":Be.ink,"--memo-ring":Be.ring,"--memo-accent":Be.swatch}:{}},Sn=n.jsxs(n.Fragment,{children:[go&&n.jsx("button",{type:"button",title:Ee?"Disable AI reference":"Enable AI reference","aria-label":Ee?"Disable AI reference":"Enable AI reference",className:Ee?"is-active-ai":"is-inactive-ai",onPointerDown:b=>b.stopPropagation(),onClick:()=>H(t.id),children:n.jsx(km,{size:13})}),Fe&&n.jsx("button",{type:"button",title:"Change memo color","aria-label":"Change memo color","aria-pressed":gn,className:"is-memo-color-action","data-testid":"node-memo-color-open",onPointerDown:b=>b.stopPropagation(),onClick:b=>{b.stopPropagation(),Ot(R=>!R)},children:n.jsx(dd,{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:()=>pe(t.id),children:n.jsx(wm,{size:13})}),n.jsx("button",{type:"button",title:Dt?"Copy image to clipboard":"Copy content","aria-label":Dt?"Copy image to clipboard":"Copy content",onPointerDown:b=>b.stopPropagation(),onClick:()=>$(t.id),children:n.jsx(eo,{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(cd,{size:13})}),ja&&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(vm,{size:13})}),ja&&n.jsx("button",{type:"button",title:Ge?"Expand node":"Collapse node","aria-label":Ge?"Expand node":"Collapse node","aria-pressed":Ge,onPointerDown:b=>b.stopPropagation(),onClick:()=>ae(t.id),children:Ge?n.jsx(ol,{size:13}):n.jsx(jm,{size:13})}),co&&n.jsx("button",{type:"button",title:"Run node",onPointerDown:b=>b.stopPropagation(),onClick:()=>L(t.id),children:n.jsx(xa,{size:13})}),ze&&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?aa:yo,children:n.jsx(sl,{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(Jo,{size:13})})]}),me=co?n.jsxs("div",{className:"node-result-row","data-testid":"node-external-pins",children:[n.jsxs("button",{className:`node-pin node-pin--context ${$e?"can-receive":""}`,type:"button",title:"Context input",onPointerDown:b=>b.stopPropagation(),onClick:b=>{b.stopPropagation(),j(t.id,"context")},children:[n.jsx(rl,{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(ol,{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(rl,{size:10}),n.jsx("span",{children:"Context"})]}),So=Te||Ie.length>1||le||qe?n.jsxs("div",{className:"node-surface-badges","data-testid":"node-surface-badges",children:[Te&&n.jsx("span",{className:"node-mask-badge",title:"Image edit mask reference",children:"Mask"}),Ie.length>1&&n.jsxs("span",{className:"node-image-stack-badge",title:"Image stack variants",children:[Math.max(1,po+1),"/",Ie.length]}),le&&n.jsx("span",{className:"node-embed-badge",children:Oe==="youtube"?"YouTube":"Embed"}),qe&&n.jsx("span",{className:"node-video-badge",children:((Le=t.metadata)==null?void 0:Le.MediaModel)||((Oa=t.metadata)==null?void 0:Oa.MediaProvider)||"Video"})]}):null,ms=Ie.length>1||le||qe||Pt?n.jsxs("div",{className:"node-surface-actions","data-testid":"node-surface-actions",children:[Ie.length>1&&n.jsx("div",{className:"node-image-stack-rail","aria-label":"Image stack variants",children:Ie.map((b,R)=>n.jsx("button",{type:"button",className:b.variantId===(Ue==null?void 0:Ue.variantId)?"is-active":"",title:b.title||b.caption||`Variant ${R+1}`,"aria-label":`Show image variant ${R+1}`,onPointerDown:de=>de.stopPropagation(),onClick:de=>yn(b.variantId,de),children:n.jsx(Ks,{src:b.imageUrl,traceId:`${t.id}:${b.variantId||R}`,kind:"image-stack-variant",testId:"node-image-stack-thumb"})},b.variantId||`${b.imageUrl}-${R}`))}),le&&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&&ue(t,"external")},children:[n.jsx(nn,{size:13}),n.jsx("span",{children:"Open"})]}),n.jsxs("button",{type:"button",title:"Copy URL","aria-label":"Copy URL",onPointerDown:b=>b.stopPropagation(),onClick:At,children:[n.jsx(eo,{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(xa,{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:xn,children:[n.jsx(Zo,{size:13}),n.jsx("span",{children:"Pause"})]})]}),Pt&&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:()=>ue(t,"preview"),children:[n.jsx(Im,{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:()=>ue(t,"external"),children:[n.jsx(nn,{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:()=>se(t.id),children:[n.jsx(tn,{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(gr,{size:13}),n.jsx("span",{children:"Settings"})]})]})]}):null,lt=ee?null:n.jsxs("div",{className:"node-external-action-rail","data-testid":"node-external-action-rail",onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:[ms,n.jsx("div",{className:"node-external-rail__pins",children:me}),n.jsx("div",{className:"node-actions","data-testid":"node-actions",children:Sn}),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:xo,children:"Plan"}),n.jsx("button",{type:"button","data-testid":"node-agent-command-execute","data-agent-command-action":"execute",disabled:wa==="Running",onClick:na,children:"Execute"})]}),ne&&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,kt,"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":It||"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:fn,onClick:()=>ge(t.id),children:n.jsx(ud,{size:12})}),n.jsx("button",{type:"button",title:"Refresh Company status","aria-label":"Refresh Company status","data-testid":"node-company-refresh",onClick:()=>Ye(t.id),children:n.jsx(tn,{size:12})}),fn?n.jsx("button",{type:"button",title:"Company is archived","aria-label":"Company is archived","data-testid":"node-company-archived",disabled:!0,children:n.jsx(hr,{size:12})}):cs?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(xa,{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(Zo,{size:12})}),!fn&&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(hr,{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})})]})]}),Ft=ee?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})]}),So,fo,U&&n.jsxs("div",{className:"node-agent-command-state","data-testid":"node-agent-command-state","data-agent-command-status":wa,"data-agent-command-mode":be,"data-agent-command-role":ot,"data-agent-command-adapter-state":((An=t.metadata)==null?void 0:An.AdapterState)||"adapter-gated",children:[n.jsx(oo,{size:12}),n.jsx("strong",{children:"AC"}),n.jsx("span",{children:wa}),n.jsx("span",{children:be}),n.jsx("span",{children:ot})]}),ne&&n.jsxs("div",{className:"node-code-note-state","data-testid":"node-code-note-state","data-code-note-status":kt,"data-code-note-sync-state":Qt,"data-code-note-kind":ea,"data-code-note-adapter-state":((Mn=t.metadata)==null?void 0:Mn.AdapterState)||"local-canvas-only",children:[n.jsx(an,{size:12}),n.jsx("strong",{children:"CN"}),n.jsx("span",{children:kt}),n.jsx("span",{children:Qt}),n.jsx("span",{children:ea})]}),t.companyMode&&n.jsxs("div",{className:"node-company-state","data-testid":"node-company-state",children:[n.jsx(sl,{size:12}),n.jsx("strong",{children:((la=t.metadata)==null?void 0:la.CompanyExecutionModeLabel)||"Company staged"}),n.jsx("span",{children:((da=t.metadata)==null?void 0:da.CompanySubAgents)==="false"?"single-agent":"sub-agents"})]})]})});return n.jsxs("article",{className:`canvas-node canvas-node--${t.kind} ${ee?"canvas-node--remote-surface":""} ${bt?"canvas-node--remote-monitor-surface":""} ${Se?"canvas-node--remote-control-surface":""} ${O?`canvas-node--automation-${O}`:""} ${U?"canvas-node--agent-command":""} ${ne?"canvas-node--code-note":""} ${o?"is-selected":""} ${r?"is-pulsing":""} ${Ee?"":"is-ai-disabled"} ${t.wordWrap===!1?"is-nowrap":""} ${Ge?"is-collapsed":""} ${t.companyMode?`is-company-${t.companyMode}`:""}`,style:ke,"data-node-id":t.id,"data-automation-node-kind":O||void 0,"data-automation-external-policy":(($a=t.metadata)==null?void 0:$a.AutomationExternalActionPolicy)||void 0,"data-media-generation-contract":((Wt=t.metadata)==null?void 0:Wt.MediaGenerationContract)||void 0,"data-agent-command-node":U?"true":void 0,"data-agent-command-status":U?wa:void 0,"data-agent-command-mode":U?be:void 0,"data-agent-command-role":U?ot:void 0,"data-code-note-node":ne?"true":void 0,"data-code-note-status":ne?kt:void 0,"data-code-note-sync-state":ne?Qt:void 0,"data-code-note-kind":ne?ea:void 0,"data-remote-surface-chrome":ee?"self-contained":void 0,"data-remote-surface-kind":ds||void 0,"data-remote-surface-title-owner":ee?"inner-remote-view":void 0,"data-remote-surface-scroll-owner":ee?"remote-page-rail":void 0,onPointerDown:b=>{m(t.id,b.shiftKey||b.metaKey||b.ctrlKey),p(t.id,b)},onDoubleClick:b=>{if(t.kind!=="directory")return;const R=b.target instanceof HTMLElement?b.target:null;R!=null&&R.closest('button,input,textarea,select,[contenteditable="true"],[contenteditable=""]')||(b.stopPropagation(),se(t.id))},children:[!ee&&n.jsxs("div",{className:"node-header",children:[n.jsx("span",{className:"node-kind",children:n.jsx(lo,{size:14})}),n.jsx("input",{value:t.title,"aria-label":"Node title",readOnly:Me,onPointerDown:b=>b.stopPropagation(),onChange:b=>{Me||c(t.id,{title:b.target.value})}})]}),$t&&typeof document<"u"?Lu.createPortal($t,document.body):$t,Fe&&gn&&Be&&n.jsx("div",{className:"node-memo-palette","data-testid":"node-memo-palette",onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:jr.map(b=>n.jsx("button",{type:"button",className:b.key===Be.key?"is-active":"",title:`${b.label} memo color`,"aria-label":`${b.label} memo color`,"aria-pressed":b.key===Be.key,"data-memo-color":b.key,style:{"--memo-swatch":b.swatch,"--memo-swatch-ring":b.ring},onPointerDown:R=>R.stopPropagation(),onClick:R=>Nt(b.key,R)},b.key))}),Dt?n.jsx("div",{className:`node-image-wrap ${Ie.length>1?"node-image-wrap--stack":""} ${Te?"node-image-wrap--mask":""}`,"data-testid":Te?"node-mask-preview":Ie.length>1?"node-image-stack":void 0,children:n.jsx(Ks,{src:Dt,traceId:t.id,kind:Te?"mask":"node-image",testId:"node-secure-image"})}):bt?n.jsx(zu,{node:t,onPatch:c,onCreateRemoteControl:Z}):Se?n.jsx(Wu,{node:t,onPatch:c}):Me?n.jsx("div",{className:"node-template-card","data-testid":"node-template-card",children:re&&Je?n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"node-template-card__summary",children:[n.jsx("strong",{children:re.prompt||re.description}),n.jsx("span",{children:Je.description||re.description})]}),n.jsx("div",{className:"node-template-card__options","data-testid":"node-template-card-options",children:re.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:R=>R.stopPropagation(),onClick:R=>Cn(b.id,R),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(eh,{input:b,value:re.inputValues[b.key]??"",onChange:R=>it(b.key,R)},b.key)),Je.inputs.length===0&&n.jsx("p",{className:"node-template-card__empty",children:re.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:Ta,onClick:b=>b.stopPropagation(),children:[n.jsx(xa,{size:13}),n.jsx("span",{children:re.generateLabel||re.actionLabel||"Generate"})]})]}):n.jsx("div",{className:"node-template-card__missing",children:"Template card payload is unavailable."})}):le?n.jsxs("div",{className:`node-embed-card ${va?"has-embed-thumbnail":"is-embed-link"}`,"data-testid":"node-embed-card",children:[n.jsx("div",{className:"node-embed-preview",children:va?n.jsx(Ks,{src:va,traceId:t.id,kind:"embed-thumbnail",testId:"node-embed-thumbnail"}):n.jsxs("div",{className:"node-embed-placeholder",children:[n.jsx(nn,{size:24}),n.jsx("strong",{children:Oe==="youtube"?"YouTube":"Web embed"}),n.jsx("span",{children:mo||st||"External link"})]})}),n.jsx("textarea",{value:t.body,"aria-label":"Embed URL or description",spellCheck:!1,onPointerDown:b=>b.stopPropagation(),onChange:b=>{const R=b.target.value;c(t.id,{body:R,assetUrl:R,metadata:{...t.metadata??{},sourceUrl:R,url:R}})}}),st&&n.jsx("span",{className:"node-embed-source",title:st,children:st})]}):qe?n.jsxs("div",{className:`node-video-card ${je?"has-video-source":"is-video-prompt"}`,"data-testid":"node-video-card",children:[je?n.jsx("video",{ref:_t,src:je,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(ro,{size:24}),n.jsx("strong",{children:"Video prompt"}),n.jsx("span",{children:((Fa=t.metadata)==null?void 0:Fa.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})}),je&&n.jsx("span",{className:"node-video-source",title:wt,children:wt})]}):Pt?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(lo,{size:28})}),n.jsxs("div",{className:"node-asset-copy",children:[n.jsx("strong",{title:Ia,children:Ia}),n.jsx("span",{children:t.kind==="directory"?"Directory reference":t.kind==="pdf"?"PDF document":"File reference"}),t.kind==="directory"&&(dn||Re||yt||Bt||Aa)&&n.jsxs("dl",{className:"node-asset-meta","data-testid":"node-directory-meta",children:[(yt||Bt)&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Scanned"}),n.jsxs("dd",{children:[Number(yt??0).toLocaleString()," files / ",Number(Bt??0).toLocaleString()," folders"]})]}),dn&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Include"}),n.jsx("dd",{children:dn})]}),Re&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Exclude"}),n.jsx("dd",{children:Re})]}),Aa&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Updated"}),n.jsx("dd",{children:new Date(Aa).toLocaleString()})]})]})]})]}):he?n.jsxs("div",{className:"node-csv-card","data-testid":"node-csv-card",children:[n.jsx(ah,{preview:ta,sort:Ke,onSort:b=>{const R=(Ke==null?void 0:Ke.columnIndex)===b&&Ke.direction==="asc"?"desc":"asc";hn({columnIndex:b,direction:R}),f.emit("node.csvTable.sort",{id:t.id,columnIndex:b,direction:R})}}),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})})]}):uo?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(rh,{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})})}),Ft,lt,n.jsx("button",{type:"button",className:"node-resize-handle",title:"Resize node","aria-label":"Resize node",onPointerDown:b=>y(t.id,b)})]})});function eh({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 th(e){const r=Math.min(430,window.innerHeight-24),d=Math.max(12,window.innerWidth-332-12),m=Math.min(Math.max(e.right-332,12),d),p=e.bottom+8,y=e.top-r-8,c=Math.max(12,window.innerHeight-r-12),x=p<=c?p:Math.max(12,y);return{left:m,top:Math.min(x,c)}}function ah({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 m=(t==null?void 0:t.columnIndex)===d,p=m&&t.direction==="asc"?"descending":"ascending";return n.jsx("th",{"aria-sort":m?t.direction==="asc"?"ascending":"descending":"none",children:n.jsxs("button",{type:"button",className:`csv-table-header-button ${m?"is-active":""}`,"data-testid":`csv-table-sort-${d}`,"aria-label":`Sort CSV by ${r||`Column ${d+1}`} ${p}`,onClick:()=>o(d),children:[n.jsx("span",{children:r||`Column ${d+1}`}),m&&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((m,p)=>n.jsx("td",{className:"csv-table-cell",children:r[p]??""},`csv-cell-${d}-${p}`))},`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 nh(e,t){const o=oh(e,wl+1);if(o.length===0)return null;const r=Math.min(Yg,Math.max(...o.map(c=>c.length),1)),d=vl(o[0],r).map((c,x)=>c.trim()||`Column ${x+1}`),m=o.slice(1,wl+1).map(c=>vl(c,r)),p=t?[...m].sort((c,x)=>sh(c[t.columnIndex]??"",x[t.columnIndex]??"",t.direction)):m,y=Math.max(0,String(e||"").split(/\r\n|\n|\r/).filter(c=>c.length>0).length-1);return{headers:d,rows:p,totalRows:y,columnCount:r,renderedRows:p.length,truncated:y>p.length}}function oh(e,t){const o=[];let r=[],d="",m=!1;const p=String(e||"").replace(/\r\n/g,`
4
+ `).replace(/\r/g,`
5
+ `);for(let y=0;y<p.length;y+=1){const c=p[y],x=p[y+1];if(c==='"'){m&&x==='"'?(d+='"',y+=1):m=!m;continue}if(c===","&&!m){r.push(d),d="";continue}if(c===`
6
+ `&&!m){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 vl(e,t){return Array.from({length:t},(o,r)=>String(e[r]??"").trim())}function sh(e,t,o){const r=Number(e.replace(/,/g,"")),d=Number(t.replace(/,/g,"")),p=Number.isFinite(r)&&Number.isFinite(d)&&e.trim()!==""&&t.trim()!==""?r-d:e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"});return o==="asc"?p:-p}function rh({value:e}){const t=ih(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 ih(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:Bo(d[2])}):/^>\s?/.test(r)?t.push({kind:"quote",text:Bo(r.replace(/^>\s?/,""))}):/^([-*+]|\d+\.)\s+/.test(r)?t.push({kind:"list",text:Bo(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:Bo(r)}),t.length>=12)break}return t}function Bo(e){return e.replace(/!\[([^\]]*)\]\([^)]+\)/g,"$1").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/(\*\*|__)(.*?)\1/g,"$2").replace(/(\*|_)(.*?)\1/g,"$2").replace(/`([^`]+)`/g,"$1").trim()}function lh(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 jr.find(d=>d.key===t)??jr[0]}function dh(e){return Nd(e)}function _d(e){return String(e.assetUrl||e.sourceFilePath||e.body||"").trim()}function ch(e){const t=_d(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 uh(e){var t,o,r,d,m,p;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)||((m=e.metadata)==null?void 0:m.embedUrl)||((p=e.metadata)==null?void 0:p.EmbedUrl)||e.assetUrl||e.sourceFilePath||e.body||"").trim()}function mh(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 ph(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 gh(e){return Id(e)}function jl(e){const t=e.indexOf(":");return t>0?e.slice(0,t):"relative"}function hh(e){var t;return((t=e.metadata)==null?void 0:t.CompanyStatus)||e.status||(e.companyMode?"Staged":"Ready")}function fh(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 Ir(e){var t;return(e.result||e.body||((t=e.metadata)==null?void 0:t.CompanyLastMessage)||"").trim()||"No local artifact content yet."}function Oo(e,t){const o=t.edges.filter(m=>m.to===e.id).map(m=>{var p;return(p=t.nodes.find(y=>y.id===m.from))==null?void 0:p.title}).filter(Boolean),r=t.edges.filter(m=>m.from===e.id).map(m=>{var p;return(p=t.nodes.find(y=>y.id===m.to))==null?void 0:p.title}).filter(Boolean),d=hh(e);return{id:e.id,title:e.title,type:e.kind,subtitle:Ir(e).slice(0,160),status:d,progress:fh(d),incoming:o,outgoing:r}}function bh(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"))))}),m=[...r,...d].filter((x,v,L)=>L.findIndex(j=>j.id===x.id)===v),p=m.filter(x=>x.kind!=="ai-task"&&!x.result).slice(0,6),y=m.filter(x=>x.kind==="ai-task").slice(0,6),c=m.filter(x=>x.result||x.kind!=="ai-task").slice(0,6);return[{key:"root",label:"Root",nodes:[Oo(e,t)]},{key:"context",label:"Context",nodes:p.map(x=>Oo(x,t))},{key:"tasks",label:"Missions",nodes:y.map(x=>Oo(x,t))},{key:"artifacts",label:"Artifacts",nodes:c.map(x=>Oo(x,t))}].map(x=>({...x,nodes:x.nodes.length>0?x.nodes:[yh(x.key)]}))}function yh(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 xh(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 m;return d.id===e.id||o.has(d.id)||((m=d.tags)==null?void 0:m.includes("Company follow-up"))}).filter(d=>Ir(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:Ir(d),sourceNodeId:d.id}))}function Ch({board:e,rootNode:t,onClose:o,onStatus:r,onRemove:d,onSubmitFollowUp:m,onApproval:p,onAddArtifact:y}){var ge,Ye,tt,at,ue;const[c,x]=g.useState(""),[v,L]=g.useState(null),j=g.useMemo(()=>bh(t,e),[e,t]),P=g.useMemo(()=>xh(t,e),[e,t]),H=P.find(G=>G.id===v)??P[0]??null,$=((ge=t.metadata)==null?void 0:ge.CompanyStatus)||"Staged",B=((Ye=t.metadata)==null?void 0:Ye.CompanyExecutionModeLabel)||"Auto / General",X=((tt=t.metadata)==null?void 0:tt.CompanySubAgents)==="false"?"single-agent":"sub-agents",ae=((at=t.metadata)==null?void 0:at.CompanyApprovalStatus)||"Pending",pe=!["Approved","Rejected"].includes(ae),ye=e.nodes.filter(G=>{var se;return G.kind==="ai-task"&&(((se=G.tags)==null?void 0:se.includes("Company follow-up"))||j.some(Z=>Z.nodes.some(ft=>ft.id===G.id)))}).length,we=()=>{const G=c.trim();G&&(x(""),m(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(Nm,{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||((ue=t.metadata)==null?void 0:ue.CompanyLastMessage)||"Local company root staged from MindCanvas."})]}),n.jsxs("div",{className:"company-focus-head__actions",children:[n.jsx("span",{children:$}),n.jsx("span",{children:B}),n.jsxs("span",{children:[n.jsx(ld,{size:12}),X]}),$==="Paused"?n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Staged"),children:[n.jsx(xa,{size:13}),"Resume"]}):n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Paused"),children:[n.jsx(Zo,{size:13}),"Pause"]}),n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Archived"),children:[n.jsx(hr,{size:13}),"Archive"]}),n.jsxs("button",{type:"button",className:"is-danger",onClick:()=>d(t.id),children:[n.jsx(Jo,{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:ye||1,tone:"blue"}),n.jsx($o,{label:"Population",value:X==="sub-agents"?4:1,tone:"slate"}),n.jsx($o,{label:"Approvals",value:pe?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(Am,{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(se=>se.type!=="empty").length," nodes"]})]}),n.jsx("div",{className:"company-focus-node-list",children:G.nodes.map(se=>n.jsxs("article",{className:`company-focus-node ${se.type==="empty"?"is-empty":""}`,children:[n.jsxs("div",{children:[n.jsx("span",{children:se.type}),n.jsx("b",{children:se.status})]}),n.jsx("strong",{children:se.title}),n.jsx("p",{children:se.subtitle}),n.jsx("div",{className:"company-focus-progress",children:n.jsx("i",{style:{width:`${Math.round(se.progress*100)}%`}})}),se.incoming.length>0&&n.jsxs("small",{children:["From: ",se.incoming.slice(0,2).join(", ")]}),se.outgoing.length>0&&n.jsxs("small",{children:["Next: ",se.outgoing.slice(0,2).join(", ")]})]},se.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(ud,{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:we,children:[n.jsx(Mm,{size:13}),"Stage Task"]})]}),n.jsxs("section",{children:[n.jsxs("div",{className:"company-focus-section-head",children:[n.jsxs("div",{children:[n.jsx(ur,{size:15}),n.jsx("strong",{children:"Approvals"})]}),n.jsx("span",{children:ae})]}),n.jsxs("article",{className:`company-focus-approval company-focus-approval--${ae.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."}),pe&&n.jsxs("div",{children:[n.jsxs("button",{type:"button",onClick:()=>p(t.id,"Approved"),children:[n.jsx(ur,{size:13}),"Approve locally"]}),n.jsxs("button",{type:"button",onClick:()=>p(t.id,"Rejected"),children:[n.jsx(Tm,{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:(H==null?void 0:H.id)===G.id?"is-selected":"",onClick:()=>L(G.id),children:[n.jsx("span",{children:G.type}),n.jsx("strong",{children:G.title})]},G.id))}),H&&n.jsxs("div",{className:"company-focus-preview",children:[n.jsx("span",{children:H.type}),n.jsx("strong",{children:H.title}),n.jsx("pre",{children:H.content}),n.jsxs("button",{type:"button",onClick:()=>y(t.id,H),children:[n.jsx(Zn,{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 Sh({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(nn,{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 Dd={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},Vo=.28,Yo=2.8,kh=96,wh=140,Go=188,Ko=126,en=10,vh=720,jh=.8,Xa={x:540,y:210,scale:1},Il=8,Bd=["dot","line","particles","spirit"],Jt="n",qs=["0","1","2","3","4","5","6","7","8","9"],to=24,Nl=900,Al="mindexec-react-project-gallery-startup-v1",Od="mindexec-react-project-workspace-history-v1",$d=5,Xo="__MINDEXEC_REACT_NODES__",Fo=34,qa=1280,Ja=960,Ih=154,Nr=4e4,Nh=50,ts=100,Fd=50*1024,Js=Fd,Zs=12e4,Ml=64*1024,Ah=5e3,Gr=2500,sn=36,Ar="Select a LocalBridge directory",Ud="mindexec.react.templateStudioDraft.v1.",zd="BusinessAutomationNode",Mh="MindCanvasAgent",Th="CodeNote";function Rh(){return sd(Dd??{})}function Qs(){return Dd??{}}const Lh=["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
+ `),Kr={"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}},Eh=["Objective:","","Constraints:","","Expected output:"].join(`
12
+ `),Ph=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 Tl(e,t){try{const o=window.localStorage.getItem(`${Ud}${e}`);if(!o)return Ho(t);const r=JSON.parse(o);return{...Ho(t),...r,templateId:qn(r.templateId||r.templateTitle||t)}}catch{return Ho(t)}}function Rl(e,t){window.localStorage.setItem(`${Ud}${e}`,JSON.stringify(t))}function Ll(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 as(e){return String(e||"").split(",").map(t=>t.trim().toLowerCase()).filter(Boolean)}function Wd(e,t,o){const r=e.toLowerCase(),d=t.toLowerCase();return o.some(m=>r.includes(m)||d.includes(m))}function Hd(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 _h(e,t){const o=as(t==null?void 0:t.Include),r=as(t==null?void 0:t.Exclude),d=[];let m=0,p=0,y=0,c=!1;async function x(v,L=""){for await(const j of v.values()){if(y>=Gr){c=!0;return}const P=L?`${L}/${j.name}`:j.name;if(!Wd(P,j.name,r)){if(j.kind==="file"){if(!Hd(j.name,o))continue;m+=1,y+=1,d.length<sn&&d.push({name:j.name,path:P,kind:"file"});continue}if(j.kind==="directory"&&(p+=1,y+=1,d.length<sn&&d.push({name:j.name,path:P,kind:"directory"}),await x(j,P),c))return}}}return await x(e),{fileCount:m,directoryCount:p,preview:d,truncated:c}}function rn(e){return typeof e=="string"?e.trim():""}function Dh(e){return!e||e===Ar?!1:!/^(https?:|data:|blob:|file:)/i.test(e)}function Bh(e){var d;const t=rn((d=e.metadata)==null?void 0:d.DirectoryPath),o=rn(e.sourceFilePath),r=t||o;return Dh(r)?r:""}function Oh(e,t){const o=rn(t.path);if(o)return o;const r=rn(t.name);if(!e)return r;const d=e.includes("\\")?"\\":"/";return`${e.replace(/[\\/]+$/,"")}${d}${r}`}async function $h(e,t,o,r){const d=as(t==null?void 0:t.Include),m=as(t==null?void 0:t.Exclude),p=[],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 um(j.bridgePath,o,r),H=Array.isArray(P.items)?P.items:[];for(const $ of H){if(v>=Gr){L=!0;break}const B=rn($.name);if(!B)continue;const X=j.relativePath?`${j.relativePath}/${B}`:B;if(Wd(X,B,m))continue;const ae=$.isDirectory===!0,pe=$.isFile===!0||$.isDirectory!==!0;if(ae){x+=1,v+=1,p.length<sn&&p.push({name:B,path:X,kind:"directory"}),y.push({bridgePath:Oh(j.bridgePath,$),relativePath:X});continue}if(pe){if(!Hd(B,d))continue;c+=1,v+=1,p.length<sn&&p.push({name:B,path:X,kind:"file"})}}if(L)break}return{fileCount:c,directoryCount:x,preview:p,truncated:L}}function El(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 ${Gr} entries.`:"Scan completed.","",o||"(empty or filtered)"].join(`
14
+ `)}const Fh=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"]),Uh=new Set(["csv","log","md","markdown","rtf","text","txt"]);function z(e){return`${e}-${Math.random().toString(36).slice(2,9)}`}function zh(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 ie(e,t,o){return Math.min(o,Math.max(t,e))}const Wh=112,Hh=80;function Pl(e,t){const o=t/2,r=Wh+e/2,d=Math.max(r,t-Hh);return ie(Math.max(o,r),0,d)}function _l(e){return{x:e.x+e.width/2,y:e.y+e.height/2}}function Mr(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 Gn(e){return!!(e&&!["image","video","pdf","file","directory","remote-monitor","remote-control"].includes(e.kind))}function ya(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 Vh(e){return e.isExpanded===!1&&Number(e.originalHeight??0)>e.height+1}function Yh(e){return Vr(e)}function Gh(e){return Nd(e)}function Qn(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 Dl(e,t,o,r){let d=e.variantId||z("image-variant");for(;o.has(d);)d=z("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 Kh(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 Xh(e){if(e.kind!=="image")return"";const t=Qn(e).find(o=>{var r;return o.variantId===((r=e.imageStack)==null?void 0:r.activeVariantId)});return String((t==null?void 0:t.imageUrl)||Vr(e)).trim()}async function qh(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 Jn(e),"text"}function er(e){var r;const o=(e.result||e.body||"").split(/\r?\n/).reduce((d,m)=>d+Math.max(1,Math.ceil(m.length/54)),0);return ie(112+o*21+((r=e.tags)!=null&&r.length?28:0),150,620)}function Jh(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:qa,maxHeight:Ja};case"image":return{minWidth:220,minHeight:160,maxWidth:qa,maxHeight:Ja};case"pdf":case"file":case"directory":return{minWidth:240,minHeight:128,maxWidth:860,maxHeight:720};case"code":return{minWidth:260,minHeight:160,maxWidth:qa,maxHeight:Ja};case"csv-table":return{minWidth:320,minHeight:180,maxWidth:qa,maxHeight:Ja};case"ai-task":return{minWidth:260,minHeight:154,maxWidth:qa,maxHeight:Ja};default:return{minWidth:220,minHeight:132,maxWidth:qa,maxHeight:Ja}}}function Xe(e){return String(e||"").trim()||"Untitled"}const Vd="Multi Desktop Monitor";function Bl(e){return Xe(e).toLowerCase()===Vd.toLowerCase()}function Zh(e,t,o){const r=Xe(e.name);return!o||!Bl(r)?r:t.nodes.some(m=>ya(m)&&Bl(m.title||Vd))?"MindCanvas":r}function Zt(e){return typeof e=="object"&&e!==null}function Tr(e){const t=e.toLowerCase(),o=t.lastIndexOf(".");return o>=0?t.slice(o+1):""}function Qh(e){if(!Zt(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 ef(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 Uo(e,t=0,o=Number.MAX_SAFE_INTEGER){const r=Number(e);if(Number.isFinite(r))return ie(r,t,o)}function tr(e){return e&&Bd.includes(e)?e:"dot"}function Ol(e){return Math.round(e/to)*to}function tf(e){if(!Zt(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 af(e){if(!Zt(e)||!Array.isArray(e.variants))return;const t=e.variants.map(d=>tf(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 Rr(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 nf(e){if(!Zt(e))return null;const t=e.kind,o=Number(e.x),r=Number(e.y),d=Number(e.width),m=Number(e.height);if(typeof e.id!="string"||typeof t!="string"||!Ph.has(t)||typeof e.title!="string"||typeof e.body!="string"||!Number.isFinite(o)||!Number.isFinite(r)||!Number.isFinite(d)||!Number.isFinite(m))return null;const p=af(e.imageStack),y=(p==null?void 0:p.variants.find(c=>c.variantId===p.activeVariantId))??(p==null?void 0:p.variants[0]);return{id:e.id,kind:t,title:e.title,body:e.body,x:o,y:r,width:ie(d,120,1280),height:ie(m,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:p,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:Uo(e.totalLineCount),scrollOffset:Uo(e.scrollOffset),maxScroll:Uo(e.maxScroll),isExpanded:typeof e.isExpanded=="boolean"?e.isExpanded:void 0,originalHeight:Uo(e.originalHeight),tags:ef(e.tags),role:typeof e.role=="string"?e.role:void 0,metadata:Qh(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 of(e){return!Zt(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 $l(e){if(!e.includes(Xo))return null;try{const t=JSON.parse(e);if(!Zt(t)||t.__type!==Xo||!Array.isArray(t.nodes))return null;const o=t.nodes.map(d=>nf(d)).filter(d=>!!d);if(o.length===0)return null;const r=Array.isArray(t.edges)?t.edges.map(d=>of(d)).filter(d=>!!d):[];return{__type:Xo,source:"MindExecReact",copiedAt:typeof t.copiedAt=="string"?t.copiedAt:new Date().toISOString(),nodes:o,edges:r}}catch{return null}}function sf(e,t){return{__type:Xo,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:Rr(o.imageStack)})),edges:t.map(o=>({...o}))}}const rf=/^\s*\[[^\]]+\]\((https?:\/\/[^)\s]+)\)\s*$/i,lf=/<iframe[^>]+src\s*=\s*(?:"|\x27)(?<url>https?:\/\/[^"\x27]+)(?:"|\x27)/i,df=/https?:\/\/[^\s<>()"\x27]+/i,cf=/^[A-Za-z0-9_-]{6,}$/,uf=new Set(["avi","m4v","mov","mp4","mpeg","ogv","webm"]);function ar(e){return e.trim().replace(/[.,;:!?\])}]+$/g,"")}function mf(e){var m;const t=e.trim();if(!t)return"";const o=lf.exec(t);if((m=o==null?void 0:o.groups)!=null&&m.url)return ar(o.groups.url);const r=rf.exec(t);if(r!=null&&r[1])return ar(r[1]);const d=t.split(/\r?\n/).map(p=>p.trim()).filter(Boolean);if(d.length===1){const p=df.exec(d[0]);if(p&&p[0]===d[0])return ar(p[0])}return""}function Xr(e){const t=e.trim(),o=mf(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 pf(e){try{const t=new URL(e);return Tr(t.pathname)}catch{return Tr(e)}}function gf(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[m,p]=d;return m===0||m===10||m===127||m===169&&p===254||m===172&&p>=16&&p<=31||m===192&&p===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 ln(e){const t=Xr(e);if(!t)return null;try{const o=new URL(t);return o.protocol!=="http:"&&o.protocol!=="https:"||gf(o)?null:o}catch{return null}}function nr(e){return cf.test(e)}function hf(e){const t=ln(e);if(!t)return"";const o=t.hostname.toLowerCase().replace(/^www\./,"");if(o==="youtu.be"){const y=t.pathname.split("/").filter(Boolean)[0]??"";return nr(y)?y:""}if(!o.endsWith("youtube.com")&&!o.endsWith("youtube-nocookie.com"))return"";const r=t.searchParams.get("v")??"";if(nr(r))return r;const d=t.pathname.split("/").filter(Boolean),m=d.findIndex(y=>["embed","shorts","live","v"].includes(y)),p=m>=0?d[m+1]??"":"";return nr(p)?p:""}function ff(e){const t=e.toLowerCase(),o=pf(e);return t.startsWith("data:image/")||["avif","gif","jpeg","jpg","png","svg","webp"].includes(o)?"image":uf.has(o)?"video":o==="pdf"?"pdf":ln(e)?"embed":"file"}function bf(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 yf(e,t,o="clipboard-url"){const r=ff(e),d=bf(e),m=r==="embed"?ln(e):null,p=r==="embed"?hf(e):"",y=p?"youtube":"webpage",c=(m==null?void 0:m.hostname.replace(/^www\./,""))??"",x=p?`https://www.youtube.com/watch?v=${p}`:e,v=p?`https://www.youtube-nocookie.com/embed/${p}`:"",L=r==="image"?`Image: ${d}`:r==="video"?`Video: ${d}`:r==="embed"?p?"YouTube Video":`Embed: ${c||d}`:r==="pdf"?`PDF: ${d}`:`URL: ${d}`;return{id:z("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",p?"YouTube":"Web"]:r==="file"?["URL","File"]:[r.toUpperCase()],metadata:{Source:o,AdapterState:"local-reference",Durable:"false",...r==="embed"?{source:"embed",embedType:y,provider:p?"youtube":"web",renderMode:p?"card":"snapshot",aspectRatio:p?"16:9":"auto",sourceUrl:x,url:x,originalInputUrl:e,embedUrl:v,videoId:p,thumbnailUrl:p?`https://img.youtube.com/vi/${p}/hqdefault.jpg`:"",title:L,domain:c,faviconUrl:!p&&m?`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(x)}`:"",description:p?"":"Capture a visual snapshot or open this page in a new tab.",iframeAllowed:"false",iframeBlockedReason:p?"react-card-shell":"unknown",captureStatus:"idle",captureProvider:p?"":"cloudflare-browser-run"}:{}}}}function Fl(e,t,o="clipboard-url"){const r=Xr(e);return!r||/^https?:\/\//i.test(r)&&!ln(r)?null:yf(r,t,o)}function Ul(e,t,o){const r=e.split(/\r?\n/).map(d=>d.trim()).find(Boolean)??"Pasted text";return{id:z("node"),kind:"note",title:r.slice(0,90),body:e.slice(0,4e4),x:t.x,y:t.y,width:340,height:ie(156+Math.ceil(Math.min(e.length,2200)/72)*20,176,540),tags:[o.startsWith("global-input")?"Input":"Pasted"],metadata:{Source:o,TextTruncated:String(e.length>4e4)}}}function xf(e,t,o){const r=e.split(/\r?\n/).map(y=>y.trim()).find(Boolean)??"AI question",d=Xn(o.model),m=ir(d),p=m?cr(m.provider):o.aiProvider||"OpenAI Codex";return{id:z("node"),kind:"ai-task",title:r.slice(0,90),body:e.slice(0,4e4),x:t.x,y:t.y,width:360,height:ie(176+Math.ceil(Math.min(e.length,2200)/84)*18,196,520),status:"idle",tags:["AI Task","Input",p],metadata:{Source:"global-input-ai",AdapterState:"localbridge-codex",AiProvider:o.aiProvider||"OpenAI Codex",TextModel:d,TextModelProvider:p,Effort:o.effort,TextTruncated:String(e.length>4e4)}}}function Cf(e,t,o,r,d="global-input-media"){const m=r==="Image"?"image":"video",p=e.split(/\r?\n/).map(c=>c.trim()).find(Boolean)??`${r} prompt`,y={...Zr(o,r)??{},Source:d,PromptOnly:"true"};return{id:z("node"),kind:m,title:`${r}: ${p.slice(0,72)}`,body:e.slice(0,4e4),x:t.x,y:t.y,width:m==="image"?360:420,height:m==="image"?240:236,tags:[r,y.MediaProvider||"Adapter gated"],metadata:y}}function zl(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 Sf(e){const t=Tr(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":Fh.has(t)?"code":e.type.startsWith("text/")||Uh.has(t)?"text":"file"}function kf(e){return typeof URL<"u"&&URL.createObjectURL?URL.createObjectURL(e):e.name}function Wl(e){return e?e.split(/\r?\n/).length:0}function Hl(e){return String(e||"").replace(/\r\n/g,`
24
+ `).replace(/\r/g,`
25
+ `).split(`
26
+ `).slice(0,ts).join(`
27
+ `).slice(0,Ah)}function Vl(e){return{IsChunkedText:"true",TotalLineCount:String(e),TotalLineCountIsPreview:"true",ChunkedPreviewOnly:"true",ChunkedPreviewChars:"",ChunkedLineCount:String(ts),ChunkCacheEntryLimit:String(Nh),LargeFileThresholdBytes:String(Fd),OriginalIngestMode:"browser-preview",TextTruncated:"true"}}function wf(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,vf(d)),0);return{rowCount:Math.max(0,t.length-1),columnCount:o}}function vf(e){let t=1,o=!1;for(let r=0;r<e.length;r+=1){const d=e[r],m=e[r+1];d==='"'?o&&m==='"'?r+=1:o=!o:d===","&&!o&&(t+=1)}return e.trim()?t:0}function Yl(e,t){const o=`
31
+
32
+ ... (UI truncated; source file ${t.toLocaleString()} bytes) ...`;return e.endsWith(`
33
+ `)?`${e}${o.trimStart()}`:`${e}${o}`}async function jf(e,t,o){const r=Sf(e),d=(r==="note"||r==="text"||r==="code"||r==="markdown")&&e.size<=Js,m=r==="image"||r==="video"||r==="pdf"||r==="file"?kf(e):void 0,p={Source:`browser-${o}`,FileName:e.name,FileType:e.type||"unknown",FileSize:String(e.size),Durable:"false"};if(r==="csv-table"){const c=e.size<=Js,x=c?await e.text():await e.slice(0,Ml).text(),v=c?x.slice(0,Zs):Hl(x),L=wf(v),j=c?0:Wl(v);return c||f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:o,previewChars:v.length,previewLines:j,chunkLineCount:ts}),{id:z("node"),kind:"csv-table",title:e.name.slice(0,90)||"CSV table",body:c?v:Yl(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:{...p,CsvRowCount:String(L.rowCount),CsvColumnCount:String(L.columnCount),IsChunkedText:String(!c),...c?{}:{...Vl(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,Zs);return{id:z("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:ie(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:{...p,TextTruncated:String(e.size>Js||c.length>=Zs)},wordWrap:r==="code"?!0:void 0}}if(r==="note"||r==="text"||r==="code"||r==="markdown"){const c=await e.slice(0,Ml).text(),x=Hl(c),v=Wl(x);return f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:o,previewChars:x.length,previewLines:v,chunkLineCount:ts}),{id:z("node"),kind:r,title:e.name.slice(0,90)||(r==="code"?"Code file":r==="markdown"?"Markdown file":"Text file"),body:Yl(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:{...p,...Vl(v),ChunkedPreviewChars:String(x.length)},wordWrap:r==="code"?!0:void 0}}const y=r;return{id:z("node"),kind:y,title:e.name.slice(0,90)||(y==="image"?"Image":y==="video"?"Video":y==="pdf"?"PDF Document":"File"),body:m||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"?m:void 0,assetUrl:y==="image"?void 0:m,sourceFilePath:e.name,tags:[y==="file"?"File":y.toUpperCase(),o],metadata:{...p,EphemeralObjectUrl:String(!!m)}}}function Gl(e,t){const o=Array.from(e??[]),r=Array.from(t??[]).map(m=>m.kind==="file"?m.getAsFile():null).filter(m=>!!m),d=new Set;return[...o,...r].filter(m=>{const p=`${m.name}:${m.size}:${m.type}:${m.lastModified}`;return d.has(p)?!1:(d.add(p),!0)})}function or(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 sr(e){return Zt(e)?typeof e.id=="string"&&Array.isArray(e.nodes)&&Array.isArray(e.edges)&&Zt(e.settings):!1}function ns(e){return e.replace(/\.layout\.json$/i,"").replace(/\.json$/i,"").trim()}function If(e,t){var r,d;const o=new Date().toISOString();return{...e,id:z("imported-board"),name:Xe(e.name||ns(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 rr(e){return/\.layout\.json$/i.test(e.file.name)}function Nf(e){return e.flatMap(t=>Fr(t.payload).map(o=>({fileName:t.file.name,metadata:o})))}function Af(e,t){const o=ns(e.file.name);return t.find(r=>r.metadata.Id===o)??Fr(e.payload).map(r=>({fileName:e.file.name,metadata:r}))[0]??null}function qo(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 Mf(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),m=[];let p=[],y=Number.NaN;for(const c of t){if(p.length===0){p=[c],y=c.y;continue}Math.abs(c.y-y)<=d?(p.push(c),y=(y*(p.length-1)+c.y)/p.length):(m.push(p.sort((x,v)=>x.x-v.x)),p=[c],y=c.y)}return p.length>0&&m.push(p.sort((c,x)=>c.x-x.x)),m.flat()}function Tf(e,t,o){const r=qo(e);if(!r)return null;const d={minX:r.minX-220,minY:r.minY-180,maxX:r.maxX+220,maxY:r.maxY+180},m=Math.max(1,d.maxX-d.minX),p=Math.max(1,d.maxY-d.minY),y=Math.min((Go-en*2)/m,(Ko-en*2)/p),c=(j,P)=>({x:en+(j-d.minX)*y,y:en+(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:ie(v.x,0,Go),y:ie(v.y,0,Ko),width:ie(L.x-v.x,4,Go),height:ie(L.y-v.y,4,Ko)}}}function Rf(e,t){const o=Math.max(.01,e.scale),r=t.width/o,d=t.height/o,m=Math.max(vh,Math.max(r,d)*jh);return{left:(0-e.x)/o-m,top:(0-e.y)/o-m,right:(t.width-e.x)/o+m,bottom:(t.height-e.y)/o+m}}function Kl(e,t){return e.x+e.width>=t.left&&e.x<=t.right&&e.y+e.height>=t.top&&e.y<=t.bottom}function Xl(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 Lf(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 ql(e){const t=new Date().toISOString(),o=z("board"),r=z("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 Ef(e){const t=new Date().toISOString();return{id:z("board"),name:`Template Studio ${Pf(new Date)}`,updatedAt:t,settings:e,source:{kind:"localStorage",loadedAt:t},nodes:[],edges:[]}}function Pf(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 _f(e){return`${e.sourceKind==="localBridge"?"LocalBridge copy":"React board"} / ${e.nodeCount} nodes / ${Mr(e.updatedAt)}`}function ao(e,t){const o=e.trim();return o.length<=t?o:`${o.slice(0,t)}...`}function Df(e){return e==="Fast"?"low":e==="Deep"?"high":"medium"}function qr(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 Jr(e){return e==="image-generate"||e==="video-generate"?Kr[e]:null}function Qa(e){var t;return String(((t=e.metadata)==null?void 0:t.SemanticType)||"").trim()===zd}function Bf(e,t){const o=Kr[t],r=no(e,o.mode);return{...Zr(e,o.mode)??{},Source:"toolbar-business-automation",SemanticType:zd,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 Kn(e,t){var r,d,m,p,y;if(!Qa(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??((m=e.metadata)==null?void 0:m.AutomationLastOutput)??"",AutomationLastRunError:t.error??"",AutomationLastRunStatus:t.status,AutomationLastRunStatusLabel:t.statusLabel,AutomationLastRunSourceMode:t.sourceMode??"",AutomationLastRunEvidenceCount:((p=e.metadata)==null?void 0:p.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 Of(){return{Source:"toolbar-agent-command",SemanticType:Mh,AgentCommandId:z("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 $f(){return{Source:"toolbar-code-note",SemanticType:Th,CodeNoteId:z("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 Ff(e,t){var r,d,m,p;const o=t?Jr(qr(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)||((m=t==null?void 0:t.metadata)==null?void 0:m.AspectPresetId)||"auto"}`,`- Requested size: ${((p=t==null?void 0:t.metadata)==null?void 0:p.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 Uf(e,t){const o=e.result||"",r=o.slice(0,Nr),d=`${e.title||"AI Task"} result`;return{id:z("node"),kind:"markdown",title:d.slice(0,90),body:r,x:t.x,y:t.y,width:440,height:ie(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>Nr),AdapterState:"local-reference"}}}function zf(e,t){const o=ao(e.result||"",900);return{id:z("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 Jl(e,t,o){var y,c,x,v,L;const r=Jr(qr(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)),m=e.nodes.filter(j=>d.has(j.id)).slice(0,8),p=m.length>0?m.map(j=>[`### ${j.title||j.kind}`,`Type: ${j.kind}`,ao(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.",el(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:",ao(o,4e3),"","Linked context:",p,"","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.",el(e.settings.appLanguage),"",`Board: ${e.name}`,`Task node: ${t.title}`,"","Instruction:",ao(o,4e3),"","Linked context:",p].join(`
41
+ `)}function Yd(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 Lr(e){return[...e].sort(Yd)}function Wf(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,m=new Map;for(const v of r)d.set(v,new Set),m.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),m.set(v.to,(m.get(v.to)??0)+1))}const p=[],y=new Set,c=Lr([...r].filter(v=>(m.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),p.push(v);const L=[...d.get(v.id)??[]].map(j=>o.get(j)).filter(j=>!!j);for(const j of L)m.set(j.id,Math.max(0,(m.get(j.id)??0)-1)),(m.get(j.id)??0)===0&&c.push(j);c.sort(Yd)}const x=Lr([...r].filter(v=>!y.has(v)).map(v=>o.get(v)).filter(Boolean));return[...p,...x]}function Er(e,t){var p,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)||((p=r.get(c.from))==null||p.add(c.to),(y=r.get(c.to))==null||y.add(c.from));const d=new Set,m=[t];for(;m.length>0;){const c=m.pop();if(!d.has(c)){d.add(c);for(const x of r.get(c)??[])d.has(x)||m.push(x)}}return Wf(e,d)}function Hf(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 Lr(e.nodes.filter(m=>m.kind==="ai-task"))){if(!o.has(d.id))continue;const m=Er(e,d.id);for(const p of m)o.delete(p.id);r.push(m)}return r}function no(e,t){const o=od(t,e),r=t==="Image"?e.imageRouterImageAspectPresetId:e.imageRouterVideoAspectPresetId,d=lr(t,o,r);return{mode:t,model:o,aspect:d,aspectOptions:dm(o,t),requestedSize:dr(d)}}function Zr(e,t){const o=no(e,t);return{InputMode:t,AppLanguage:nd(e.appLanguage),MediaPromptLanguageInstruction:cm(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 Gd(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 Vf(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 Yf(e,t,o,r=8){if(!t.trim())return[];const d=gg(Gd(e)),m=new Map(e.map(p=>[p.id,p]));return hg(d,t,{limit:r,viewport:o}).hits.map(p=>m.get(p.nodeId)).filter(p=>!!p)}function Zl(e,t,o="none"){const r=new Set(t.nodes.map(m=>m.id)),d=e.filter((m,p)=>r.has(m)&&e.indexOf(m)===p);return d.length>0||o==="none"?d:t.nodes[0]?[t.nodes[0].id]:[]}function Ql(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('input,textarea,select,[contenteditable="true"],[contenteditable=""]'):!1}function Gf(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('button,a,[role="button"],[role="tab"],summary'):!1}function zo(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:ie(d,Vo,Yo)}}function Sa(e){return typeof e=="string"?e.trim():""}function Wo(e,t=34){const o=Sa(e);if(!o)return"workspace";const m=o.replace(/\\/g,"/").split("/").filter(Boolean).slice(-2).join("/")||o;return m.length<=t?m:`...${m.slice(-(t-3))}`}function Kf(){try{const e=window.localStorage.getItem(Od),t=e?JSON.parse(e):[];return Array.isArray(t)?t.map(Sa).filter(Boolean).filter((o,r,d)=>d.findIndex(m=>m.toLowerCase()===o.toLowerCase())===r).slice(0,$d):[]}catch{return[]}}function Xf(e){const t=e.map(Sa).filter(Boolean).filter((o,r,d)=>d.findIndex(m=>m.toLowerCase()===o.toLowerCase())===r).slice(0,$d);try{window.localStorage.setItem(Od,JSON.stringify(t))}catch{}return t}function ed(e,t){return Xf([e,...t.filter(o=>o.toLowerCase()!==e.toLowerCase())])}function lb({navigate:e,onSidebarActionsChange:t}){var Ii,Ni,Ai,Mi,Ti,Ri,Li,Ei,Pi,_i,Di,Bi,Oi,$i,Fi;const[o,r]=g.useState(()=>al(Xi(nl(Eu(Gi))))),[d,m]=g.useState([]),[p,y]=g.useState([]),[c,x]=g.useState(["node-agent-command"]),[v,L]=g.useState(""),[j,P]=g.useState(""),[H,$]=g.useState(0),[B,X]=g.useState([]),[ae,pe]=g.useState(0),[ye,we]=g.useState("idle"),[ge,Ye]=g.useState("booting"),[tt,at]=g.useState(null),[ue,G]=g.useState(null),[se,Z]=g.useState(null),[ft,O]=g.useState(null),[nt,U]=g.useState(null),[ne,wa]=g.useState({...Xa}),[be,ot]=g.useState(()=>({width:window.innerWidth,height:window.innerHeight})),[kt,Qt]=g.useState(!1),[ea,lo]=g.useState(()=>localStorage.getItem(Al)==="true"),[$e,co]=g.useState("local"),[Pt,bt]=g.useState([]),[Se,ee]=g.useState(mt()?"idle":"blocked"),[ds,Me]=g.useState(null),[qe,le]=g.useState(mt()?null:"Hosted LocalBridge access is off."),[Te,Fe]=g.useState(null),[uo,he]=g.useState(null),[Be,_t]=g.useState(()=>Kf()),[wt,je]=g.useState(!1),[st,Oe]=g.useState(null),[mo,va]=g.useState(null),[Ie,Ue]=g.useState(!1),[Dt,po]=g.useState("ready"),[ja,go]=g.useState("Saved in this browser."),[Ge,ze]=g.useState(()=>ut()),Ee=g.useMemo(()=>Rh(),[]),[Ia,ho]=g.useState(()=>$s()),fe=Ee.cloudBoards.canAttempt&&(Ia==null?void 0:Ia.source)==="supabase-provider-session",[Na,fo]=g.useState([]),[dn,Re]=g.useState(null),[yt,Bt]=g.useState(!1),[Aa,bo]=g.useState(null),Pe=g.useMemo(()=>Pg({storedMode:$e,cloudConfigured:!0,cloudSessionAvailable:fe,cloudAccess:fe?{planKey:"provider",entitlementStatus:"active",currentBoardCount:Na.length,cloudBoardLimit:Number.MAX_SAFE_INTEGER,lockedBoardCount:0,canCreateBoard:!0}:null,bridgeProviderConfigured:!0,bridgeReachable:Se==="connected",hostedWebApp:!mt()&&!Ka(),hostedLocalBridgeAccessEnabled:Ka(),browserProviderConfigured:!0,browserLocalAvailable:!0,browserLocalAvailableWhenEmpty:!0,embeddedProviderConfigured:!1,supportsEmbeddedLocal:!1}),[fe,Na.length,Se,$e]),[cn,un]=g.useState(null),[mn,Ma]=g.useState(""),[vt,pn]=g.useState(null),[gn,Ot]=g.useState(null),[Ke,hn]=g.useState(!1),[ta,re]=g.useState(!1),[Je,rt]=g.useState(null),[jt,It]=g.useState(null),[xt,cs]=g.useState(!1),[fn,yo]=g.useState(!1),bn=g.useRef(new Map),aa=g.useMemo(()=>Ds(o.settings.appLanguage),[o.settings.appLanguage]),[yn,Nt]=g.useState(!1),[xo,na]=g.useState(!1),[Ct,Co]=g.useState("business"),[Ze,xn]=g.useState(()=>{var s;const a=$n("business",o.settings.appLanguage)??Ds(o.settings.appLanguage)[0];return((s=Lo(a))==null?void 0:s.id)??null}),[At,oa]=g.useState(()=>{const a=$n("business",o.settings.appLanguage)??Ds(o.settings.appLanguage)[0],s=Lo(a);return Fn(Un(a,s==null?void 0:s.id,o.settings.appLanguage))}),[Cn,it]=g.useState(null),[Ta,$t]=g.useState(!1),[ke,Sn]=g.useState(()=>Tl(o.id,o.name)),[me,Qe]=g.useState(null),[So,us]=g.useState(null),[ms,lt]=g.useState(!1),[Ft,sa]=g.useState({}),[Ra,Ut]=g.useState(null),La=g.useMemo(()=>{var l,u;const a=Ge.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(Ge.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,Ge]),Q=g.useMemo(()=>$n(Ct,o.settings.appLanguage)??aa[0],[Ct,o.settings.appLanguage,aa]),We=g.useMemo(()=>Q?Un(Q,Ze,o.settings.appLanguage):null,[Q,o.settings.appLanguage,Ze]),Ea=!!(Q&&(Q.options.length>0||!Q.quickCreateTemplateId)),kn=g.useMemo(()=>Eo(We,At),[We,At]),I=g.useRef(o),V=g.useRef(c),oe=g.useRef({...Xa}),wn=g.useRef(null),Mt=g.useRef(null),Pa=g.useRef(null),_a=g.useRef(null),vn=g.useRef(null),jn=g.useRef(null),Da=g.useRef(new Map),In=g.useRef(new Dg),ra=g.useRef(0),Nn=g.useRef(null),Ba=g.useRef(0),ia=g.useRef(null),zt=g.useRef(!1),_e=g.useRef(0),Le=g.useRef(0),Oa=g.useRef(),An=g.useRef(),Mn=g.useRef(null),la=g.useRef(null),da=g.useRef(0),$a=g.useRef(null),Wt=g.useRef(0),Fa=g.useRef(!1),dt=g.useCallback(a=>{Fa.current=a,cs(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=()=>ho($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 ia.current=a,a.onmessage=s=>{var h,C,S,M,k,T,E,_,A;const i=s.data;if(i.type==="READY"){zt.current=!0,Ye("ready"),f.emit("search.worker.ready");return}if(i.type!=="SEARCH_RESULT")return;if(i.seq!==Ba.current){f.emit("async.staleIgnored",{path:"search.worker",seq:i.seq});return}const l=new Map(I.current.nodes.map(w=>[w.id,w])),u=i.hits.map(w=>l.get(w.nodeId)).filter(w=>!!w);X(u),pe(0),we("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:(T=i.profile)==null?void 0:T.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=>{zt.current=!1,Ye("failed"),f.emit("search.worker.failed",{message:s.message})},()=>{a.terminate(),ia.current=null,zt.current=!1}},[]),g.useEffect(()=>{const a=()=>ot({width:window.innerWidth,height:window.innerHeight});return window.addEventListener("resize",a),()=>window.removeEventListener("resize",a)},[]),g.useEffect(()=>(I.current=o,po("syncing"),go("Saving board state to this browser."),window.clearTimeout(Oa.current),Oa.current=window.setTimeout(()=>{const a=Lt(I.current);ze(ut()),po(a?"ready":"error"),go(a?"Saved in this browser.":"Local browser storage failed.")},280),()=>window.clearTimeout(Oa.current)),[o]),g.useEffect(()=>{const a=ia.current;if(!a)return;const s=window.setTimeout(()=>{a.postMessage({type:"REBUILD_BOARD",boardId:o.id,nodes:Gd(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(()=>{V.current=c},[c]),g.useEffect(()=>{f.emit("canvas.gridMode.applied",{boardId:o.id,gridType:tr(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)=>{oe.current=a,Pa.current&&(Pa.current.style.transform=`translate3d(${a.x}px, ${a.y}px, 0) scale(${a.scale})`),Mt.current&&(Mt.current.style.setProperty("--grid-x",`${a.x}px`),Mt.current.style.setProperty("--grid-y",`${a.y}px`),Mt.current.style.setProperty("--grid-small",`${24*a.scale}px`),Mt.current.style.setProperty("--grid-large",`${144*a.scale}px`)),window.clearTimeout(An.current),An.current=window.setTimeout(()=>wa(a),wh),s&&f.emit("camera.patch",{...a})},[]),R=g.useCallback(async()=>{var i;const a=++_e.current;if(ee("checking"),Me(null),le(null),f.emit("runtimeStatus.bridge.refresh.requested",{source:"mindcanvas"}),!mt()){ee("blocked"),Me(null),bt([]),le("Hosted LocalBridge access is off."),Fe(null),he("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:"refresh",reason:"hosted-access-off"});return}const s=await fa();if(a===_e.current){if(Me(s.status??null),s.state!=="connected"){ee(s.state),bt([]),le(s.message||"LocalBridge is unavailable."),Fe(null),he(s.message||"LocalBridge is unavailable.");return}try{const[l,u]=await Promise.all([qi(s.baseUrl),kp(s.baseUrl)]);if(a!==_e.current)return;const h=Sa(l.rootPath||((i=s.status)==null?void 0:i.workspace));Fe(h||null),he(h?null:"LocalBridge workspace path is unavailable."),h&&_t(C=>ed(h,C)),ee("connected"),bt(u),le(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!==_e.current)return;ee("unavailable"),bt([]);const u=l instanceof Error?l.message:String(l);le(u),he(u)}}},[]);g.useEffect(()=>{mt()&&R()},[R]),g.useEffect(()=>{ea&&(Qt(!0),f.emit("mindcanvas.projectGallery.opened",{source:"startup"}))},[ea]);const de=g.useCallback(()=>{Qt(a=>{const s=!a;return s&&Pt.length===0&&Se!=="checking"&&R(),f.emit(s?"mindcanvas.projectGallery.opened":"mindcanvas.projectGallery.closed",{source:"top-tab"}),s})},[Pt.length,Se,R]),Ne=g.useCallback(a=>{Qt(s=>(s&&f.emit("mindcanvas.projectGallery.closed",{source:a}),!1))},[]),Ht=g.useCallback(a=>{lo(a),localStorage.setItem(Al,String(a)),f.emit("mindcanvas.projectGallery.startupPreference",{enabled:a})},[]),ct=g.useCallback(async(a="manual")=>{if(ho($s()),!fe){const s=Ee.cloudBoards.canAttempt?"sign-in-required":Ee.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}Bt(!0),Re(null);try{const s=await Tp(Qs());fo(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{Bt(!1)}},[fe,Ee.cloudBoards.canAttempt,Ee.cloudBoards.mode]),ca=g.useCallback(a=>{co(a),f.emit("projectStorage.tab",{tab:a}),a==="cloud"&&ct("tab")},[ct]),Vt=g.useCallback(()=>{Yu(!0),f.emit("runtimeStatus.bridge.hostedAccess.enabled"),R()},[R]),ua=g.useCallback(a=>{Fe(a),_t(s=>ed(a,s))},[]),Kd=g.useCallback(async(a="manual")=>{var i;const s=++Le.current;if(he(null),f.emit("projectStorage.workspace.refresh.requested",{source:a}),!mt()){Fe(null),he("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:a,reason:"hosted-access-off"});return}try{const l=await fa();if(s!==Le.current)return;if(Me(l.status??null),l.state!=="connected"){ee(l.state),Fe(null),he(l.message||"LocalBridge is unavailable.");return}const u=await qi(l.baseUrl);if(s!==Le.current)return;const h=Sa(u.rootPath||((i=l.status)==null?void 0:i.workspace));he(h?null:"LocalBridge workspace path is unavailable."),h&&ua(h),f.emit("projectStorage.workspace.refresh",{source:a,path:h||null})}catch(l){if(s!==Le.current)return;he(l instanceof Error?l.message:String(l))}},[ua]),ps=g.useCallback(async(a,s)=>{const i=Sa(a);if(!i||wt)return;const l=++Le.current;if(je(!0),he("Switching LocalBridge workspace..."),f.emit("projectStorage.workspace.set.requested",{source:s,path:i}),!mt()){Fe(null),he("Hosted LocalBridge access is off."),je(!1),f.emit("projectStorage.workspace.blocked",{source:s,reason:"hosted-access-off"});return}try{const u=await fa();if(l!==Le.current)return;if(Me(u.status??null),u.state!=="connected"){ee(u.state),he(u.message||"LocalBridge is unavailable.");return}const h=zn(u.status);if(!h){ee("unavailable"),he("LocalBridge write token is unavailable.");return}const C=await Gu(i,h,u.baseUrl);if(l!==Le.current)return;const S=Sa(C.workspace||i);ua(S),ee("connected"),he(`Local workspace set to ${Wo(S)}.`),f.emit("projectStorage.workspace.set",{source:s,path:S}),R()}catch(u){if(l!==Le.current)return;ee("unavailable"),he(u instanceof Error?u.message:String(u))}finally{l===Le.current&&je(!1)}},[wt,R,ua]),Xd=g.useCallback(async()=>{const a=++Le.current;if(je(!0),he("Opening folder picker..."),f.emit("projectStorage.workspace.browse.requested",{path:Te||null}),!mt()){Fe(null),he("Hosted LocalBridge access is off."),je(!1),f.emit("projectStorage.workspace.blocked",{source:"browse",reason:"hosted-access-off"});return}try{const s=await fa();if(a!==Le.current)return;if(Me(s.status??null),s.state!=="connected"){ee(s.state),he(s.message||"LocalBridge is unavailable.");return}const i=zn(s.status),l=await Ku(Te,i,s.baseUrl);if(a!==Le.current)return;if(l.canceled||!l.success||!l.path){he("Workspace selection cancelled."),f.emit("projectStorage.workspace.browse.cancelled");return}f.emit("projectStorage.workspace.browse",{path:l.path}),je(!1),await ps(l.path,"browse")}catch(s){if(a!==Le.current)return;he(s instanceof Error?s.message:String(s))}finally{a===Le.current&&je(!1)}},[ps,Te]),qd=g.useCallback(async()=>{var s,i;const a=++_e.current;if(Ue(!0),le(null),(s=I.current.source)!=null&&s.partialImport){le("This imported board came from a partial original payload, so export is blocked to avoid data loss."),Ue(!1);return}if((i=I.current.source)!=null&&i.truncated){le("This imported board was truncated, so export is blocked to avoid data loss."),Ue(!1);return}if(!mt()){ee("blocked"),Me(null),le("Hosted LocalBridge access is off."),Ue(!1);return}try{const l=await fa();if(a!==_e.current)return;if(Me(l.status??null),l.state!=="connected"){ee(l.state),le(l.message||"LocalBridge is unavailable.");return}const u=zn(l.status);if(!u){ee("unavailable"),le("LocalBridge write token is unavailable.");return}const h=await vp(I.current,oe.current,u,l.baseUrl);if(a!==_e.current)return;const C={...I.current,nodes:h.nodes,source:h.source,updatedAt:h.metadata.UpdatedAt||new Date().toISOString()};r(C),Lt(C),ze(ut()),ee("connected"),bt(S=>[h.metadata,...S.filter(M=>M.Id!==h.metadata.Id)]),le(`Exported "${Xe(h.metadata.Title)}" to LocalBridge.`)}catch(l){if(a!==_e.current)return;ee("unavailable"),le(l instanceof Error?l.message:String(l))}finally{a===_e.current&&Ue(!1)}},[]),He=g.useCallback((a,s,i={})=>{const l=nl(a),u=Xi(l),h=al(u);m(C=>ba(C,I.current,{description:"Activate board"})),y([]),r(h),x(h.nodes[0]?[h.nodes[0].id]:[]),Z(null),U(null),G(null),Ne("board-activate"),f.emit(s,{boardId:h.id,...i})},[Ne]),Qr=g.useCallback(()=>{const a=ql(I.current.settings);He(a,"board.local.create"),b({x:540,y:210,scale:1})},[He,b]),Jd=g.useCallback(async a=>{if(!fe){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}bo(a.id),Re(null);try{const s=await Rp(Qs(),a.id,I.current.settings);if(!s){Re("Cloud board was not found or is not available to this user.");return}He(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{bo(null)}},[He,b,fe]),ko=g.useCallback(async(a,s)=>{if(!fe){Re("Login with Supabase is required before cloud boards can be saved."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:s});return}Bt(!0),Re(null);try{const i=await Lp(Qs(),a,oe.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),Lt(u),ze(ut()),fo(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{Bt(!1)}},[fe]),Zd=g.useCallback(()=>{ko(I.current,"save-current")},[ko]),Qd=g.useCallback(()=>{const a=ql(I.current.settings);ko(a,"new-cloud-board")},[ko]),ec=g.useCallback(()=>{var l;if(!Q)return;if(Q.options.length>0||!Q.quickCreateTemplateId){const u=oe.current,h={x:(window.innerWidth/2-u.x)/u.scale,y:(window.innerHeight/2-u.y)/u.scale},C=I.current.nodes,S=C.length?Math.max(...C.map(A=>A.x+A.width)):h.x-280-Fo,M=C.length?Math.min(...C.map(A=>A.y)):h.y-310,k=Xu(Q,Ze,S+Fo,M,At,I.current.settings.appLanguage);r(A=>{var w;return m(Y=>ba(Y,A,{description:"Create template card"})),y([]),f.emit("templateCard.node.create",{id:k.id,launcherId:Q.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 T=Math.min(oe.current.scale,ie((window.innerHeight-190)/k.height,.72,1)),E=Math.max(320,window.innerHeight-180);b({...oe.current,scale:T,x:window.innerWidth/2-(k.x+k.width/2)*T,y:48+E/2-(k.y+k.height/2)*T}),O(k.id),window.setTimeout(()=>O(A=>A===k.id?null:A),1e3),Nt(!1),it(null);const _="Template card added to the current canvas.";Oe(_),window.setTimeout(()=>{Oe(A=>A===_?null:A)},2200),f.emit("templateCard.node.focus",{nodeId:k.id,launcherId:Q.id});return}const s=Eo(We,At);if(s){it(s),f.emit("template.validation.failed",{launcherId:Q.id,optionId:Ze,templateId:(We==null?void 0:We.id)??null,message:s});return}const i=qu(Q,Ze,At,I.current.settings);if(!i){const u="Template could not be created.";it(u),f.emit("template.validation.failed",{launcherId:Q.id,optionId:Ze,templateId:(We==null?void 0:We.id)??null,message:u});return}He(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}),Nt(!1),it(null)},[He,We,Q,b,Ze,At]),ei=g.useCallback(a=>{if(a===I.current.id){Ne("stored-board-current");return}const s=Pu(a);s&&(He(s,"board.local.switch"),b({x:540,y:210,scale:1}))},[He,b,Ne]),gs=g.useCallback((a,s="unknown")=>{if(a===I.current.id){f.emit("board.tabs.closeIgnored",{boardId:a,source:s,reason:"active-board"});return}f.emit("board.tabs.close",{boardId:a,source:s}),_u(a),ze(ut())},[]),tc=g.useCallback((a,s)=>{if(!a||!s||a===s)return;Lt(I.current);const i=ut(),l=La.map(T=>T.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(T=>T.id).filter(T=>!C.includes(T)),k=Du([...C,...M]);ze(k),f.emit("board.tabs.drop",{sourceId:a,targetId:s,visibleIds:C})},[La]),ac=g.useCallback(async a=>{const s=++_e.current;va(a.Id),le(null);try{const i=await jp(a,I.current.settings);if(s!==_e.current)return;He(i,"board.localBridge.switch",{sourceBoardId:a.Id});const l=fr(a.LastCameraX,a.LastCameraY,a.LastCameraZ);b(l?{...l,scale:ie(l.scale,Vo,Yo)}:{x:540,y:210,scale:1})}catch(i){if(s!==_e.current)return;le(i instanceof Error?i.message:String(i))}finally{s===_e.current&&va(null)}},[He,b]),nc=g.useCallback(()=>{var a;(a=jn.current)==null||a.click()},[]),oc=g.useCallback(async a=>{var i;const s=Array.from(a??[]).filter(l=>/\.json$/i.test(l.name));if(s.length===0){Oe("Choose a React or MindExec board JSON file."),window.setTimeout(()=>Oe(null),1800);return}try{const l=await Promise.all(s.map(async T=>({file:T,payload:JSON.parse(await T.text())}))),u=l.find(rr),h=Nf(l),C=l.find(T=>!rr(T)&&sr(T.payload))??l.find(T=>!rr(T)&&gd(T.payload)>0);if(!C)throw new Error("No board JSON file was found.");const S=sr(C.payload)?null:Af(C,h),M=S?fr(S.metadata.LastCameraX,S.metadata.LastCameraY,S.metadata.LastCameraZ):null,k=sr(C.payload)?If(C.payload,C.file.name):fd(C.payload,I.current.settings,{boardId:(S==null?void 0:S.metadata.Id)??ns(C.file.name),title:(S==null?void 0:S.metadata.Title)||ns(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.");He(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}),Lt(k),ze(ut()),b(M?{...M,scale:ie(M.scale,Vo,Yo)}:{x:540,y:210,scale:1}),Oe(`Imported "${Xe(k.name)}".`),window.setTimeout(()=>Oe(null),2200)}catch(l){const u=l instanceof Error?l.message:String(l);Oe(`Import failed: ${u}`),f.emit("board.import.failed",{message:u}),window.setTimeout(()=>Oe(null),3200)}},[He,b]);g.useEffect(()=>{b(oe.current,!1)},[b]);const Ae=g.useCallback((a,s)=>{const i=oe.current;return{x:(a-i.x)/i.scale,y:(s-i.y)/i.scale}},[]),Ua=g.useCallback((a,s)=>{const i=Number.isFinite(a)&&Number.isFinite(s)?{clientX:a,clientY:s}:Mn.current??{clientX:window.innerWidth/2,clientY:window.innerHeight/2},l=Ae(i.clientX,i.clientY);return{x:l.x-150,y:l.y-80}},[Ae]),sc=g.useCallback(a=>{or(a.target)||(Mn.current={clientX:a.clientX,clientY:a.clientY})},[]),D=g.useCallback((a,s,i={})=>{r(l=>{m(h=>ba(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=gm();if(!a)return;const s=Ae(window.innerWidth/2,window.innerHeight/2),{sourceNode:i,itemNodes:l,taskNode:u,edges:h}=hm(a,{x:s.x-390,y:s.y-145});if(I.current.nodes.some(C=>{var S;return((S=C.metadata)==null?void 0:S.ToolHandoffId)===a.id})){tl(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}),tl(a.id),x([u.id]),O(u.id),window.setTimeout(()=>O(C=>C===u.id?null:C),1400)},[D,Ae]);const za=g.useCallback((a,s,i={})=>{r(l=>{const u=a(l);return f.emit(s,i),{...u,updatedAt:new Date().toISOString()}})},[]),hs=g.useCallback(a=>{const s=a.slice(0,90);za(i=>({...i,name:s}),"board.rename",{boardId:I.current.id})},[za]),ve=g.useCallback((a,s="inline")=>{const i=typeof a.appLanguage=="string"?{...a,appLanguage:nd(a.appLanguage)}:a;if(za(l=>{const u={...l.settings,...i};if(typeof i.appLanguage=="string"){const h=Ju(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=Zu(i.appLanguage);f.emit("appLanguage.select",{appLanguage:l,source:s})}if(typeof i.model=="string"){const l=Xn(i.model),u=ir(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={...I.current.settings,...i};fm(l,s)}bm({...I.current.settings,...i})},[za]),ti=g.useCallback((a,s)=>{ve({[a]:s},`inline.${String(a)}`)},[ve]),rc=g.useMemo(()=>no(o.settings,"Image"),[o.settings]),ic=g.useMemo(()=>no(o.settings,"Video"),[o.settings]),lc=g.useMemo(()=>Qu(o.settings),[o.settings]),fs=Xn(o.settings.model),Tn=ir(fs),dc=g.useCallback((a,s="bottom-input")=>{const i=Xn(a);ve({model:i},`connection.model.${s}`)},[ve]),cc=g.useCallback((a,s)=>{const i=em(a,s),l=Ji(a).find(M=>M.id===i);if(!l)return;const u=I.current.settings,h=a==="Image"?u.imageRouterImageAspectPresetId:u.imageRouterVideoAspectPresetId,C=lr(a,l,h),S=a==="Image"?{imageRouterImageModel:l.id,imageRouterImageAspectPresetId:C.id}:{imageRouterVideoModel:l.id,imageRouterVideoAspectPresetId:C.id};ve(S,`inline.${a.toLowerCase()}Model`),f.emit("media.model.select",{mode:a,model:l.id,aspectPresetId:C.id,requestedSize:dr(C)})},[ve]),uc=g.useCallback((a,s)=>{const i=od(a,I.current.settings),l=lr(a,i,s),u=a==="Image"?{imageRouterImageAspectPresetId:l.id}:{imageRouterVideoAspectPresetId:l.id};ve(u,`inline.${a.toLowerCase()}Aspect`),f.emit("media.aspect.select",{mode:a,model:i.id,aspectPresetId:l.id,requestedSize:dr(l)})},[ve]),ai=g.useCallback(()=>{hn(!0),f.emit("settings.dialog.open",{boardId:I.current.id})},[]),mc=g.useCallback(()=>{hn(!1),f.emit("settings.dialog.close",{boardId:I.current.id})},[]),ni=g.useCallback(()=>{re(!0),f.emit("promptDebug.open",{boardId:I.current.id})},[]),pc=g.useCallback(()=>{re(!1),f.emit("promptDebug.close",{boardId:I.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:gr,onClick:ai,active:Ke,testId:"ai-settings-open"},{id:"mindcanvas-prompt-debug",label:"Prompt Debugger",description:"Inspect prompt and local diagnostics",icon:Rm,onClick:ni,active:ta,testId:"prompt-debug-open"}])},[t,ni,ai,ta,Ke]);const gc=g.useCallback(a=>{const s=I.current.settings.appLanguage,i=$n(a,s);if(!i)return;const l=Lo(i),u=Un(i,l==null?void 0:l.id,s);Co(i.id),xn((l==null?void 0:l.id)??null),oa(Fn(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})},[]),hc=g.useCallback(()=>{const a=I.current.settings.appLanguage,s=$n(Ct,a)??aa[0];if(!s)return;const i=Lo(s,Ze),l=Un(s,i==null?void 0:i.id,a);Co(s.id),xn((i==null?void 0:i.id)??null),oa(u=>Object.keys(u).length>0?u:Fn(l)),it(null),$t(!1),lt(!1),Nt(!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,aa]),fc=g.useCallback(()=>{Nt(!1),it(null),f.emit("template.launcher.close",{launcherId:Ct})},[Ct]),bc=g.useCallback(a=>{if(!Q)return;const s=Un(Q,a,I.current.settings.appLanguage);xn(a),oa(Fn(s)),it(null),f.emit("template.option.select",{launcherId:Q.id,optionId:a,templateId:(s==null?void 0:s.id)??null})},[Q]),yc=g.useCallback((a,s)=>{oa(i=>({...i,[a]:s})),Cn&&it(null),f.emit("template.input.patch",{launcherId:Q==null?void 0:Q.id,key:a})},[Q==null?void 0:Q.id,Cn]),Ve=g.useCallback(a=>{us(a),window.setTimeout(()=>{us(s=>s===a?null:s)},2600)},[]),xc=g.useCallback(()=>{Nt(!1),lt(!1),na(a=>{const s=!a;return f.emit(s?"templateStudio.chooser.open":"templateStudio.chooser.close",{boardId:I.current.id,studioOpen:Ta}),s})},[Ta]),oi=g.useCallback(()=>{na(!1),f.emit("templateStudio.chooser.close",{boardId:I.current.id})},[]),si=g.useCallback(()=>{const a=I.current;Nt(!1),lt(!1),na(!1),Sn(Tl(a.id,a.name)),Qe(null),$t(!0),f.emit("templateStudio.open",{boardId:a.id,nodeCount:a.nodes.length})},[]),wo=g.useCallback(a=>{const s=I.current,i=Po(ke,s.nodes);Qe(i),Rl(s.id,ke);const l=Lt(s);return ze(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},[ke]),ri=g.useCallback(()=>{wo("exit"),$t(!1),na(!1),lt(!1),Qe(null),f.emit("templateStudio.close",{boardId:I.current.id})},[wo]),Cc=g.useCallback(()=>{const a=Ef(I.current.settings),s=Ho(a.name);na(!1),lt(!1),Sn(s),Qe(null),$t(!0),Rl(a.id,s),Lt(a),ze(ut()),He(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}),Ve("New Template Studio draft board opened.")},[He,b,Ve]),Sc=g.useCallback(()=>{si(),f.emit("templateStudio.chooser.convertCurrent",{boardId:I.current.id,nodes:I.current.nodes.length}),Ve("Current board is now in Template Studio mode.")},[si,Ve]),vo=g.useCallback((a,s)=>{Sn(i=>{const l={...i,[a]:a==="templateId"?qn(s):s};return f.emit("templateStudio.draft.patch",{key:a}),l}),Qe(null)},[]),kc=g.useCallback(()=>{const a=wo("save");Ve(a.issues.length>0?"Template draft saved with manifest issues.":"Template draft and board saved locally.")},[wo,Ve]),wc=g.useCallback(a=>{const s=Ae(window.innerWidth/2,window.innerHeight/2),i=z("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={[F.studioNodeType]:a,[F.templateNodeId]:u,[F.templateRole]:a.replace(/^template\./,""),[F.compileTarget]:l,Source:"template-studio"};h&&(M[F.inputKey]=u,M[F.inputType]="text",M[F.inputRequired]="true");const k={id:i,kind:a==="template.prompt"?"ai-task":a==="template.section"?"markdown":"note",title:Bs(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",Bs(a)],metadata:M};D(T=>({...T,nodes:[...T.nodes,k]}),"templateStudio.node.add",{id:k.id,studioNodeType:a,compileTarget:l}),x([k.id]),Qe(null)},[D,Ae]),bs=g.useCallback(()=>{const a=Po(ke,I.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}),Ve(a.issues.length>0?"Template manifest has issues.":"Template manifest compiled."),a},[Ve,ke]),vc=g.useCallback(async()=>{const a=me??Po(ke,I.current.nodes);me||Qe(a);const s=await Jn(a.manifestJson);f.emit("templateStudio.manifest.copy",{templateId:a.template.id,chars:a.manifestJson.length,method:s}),Ve("Template manifest copied.")},[Ve,ke,me]),jc=g.useCallback(()=>{const a=bs();if(a.issues.length>0){lt(!1),f.emit("templateStudio.test.open.blocked",{templateId:a.template.id,issues:a.issues.length}),Ve("Fix manifest issues before test create.");return}sa(Fn(a.template)),Ut(null),lt(!0),f.emit("templateStudio.test.open",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length})},[bs,Ve]),Ic=g.useCallback(()=>{lt(!1),sa({}),Ut(null),f.emit("templateStudio.test.close",{templateId:(me==null?void 0:me.template.id)??null})},[me==null?void 0:me.template.id]),Nc=g.useCallback((a,s)=>{sa(i=>({...i,[a]:s})),Ra&&Ut(null),f.emit("templateStudio.test.input.patch",{key:a})},[Ra]),Ac=g.useCallback(()=>{const a=(me==null?void 0:me.issues.length)===0?me:Po(ke,I.current.nodes);if(Qe(a),a.issues.length>0){Ut("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=Eo(a.template,Ft);if(s){Ut(s),f.emit("templateStudio.test.board.blocked",{templateId:a.template.id,message:s});return}const i=Ll(ke),l=tm(i,void 0,a.template,Ft,I.current.settings);Lt(l.board),Lt(I.current),ze(ut()),lt(!1),sa({}),Ve(`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})},[Ve,ke,me,Ft]),Mc=g.useCallback((a,s)=>{x(i=>s?i.includes(a)?i.filter(l=>l!==a):[...i,a]:[a]),Z(null)},[]),Tc=g.useCallback(()=>{var C,S,M,k,T,E,_,A;const i=ie(window.innerWidth*.62,282,Math.max(282,window.innerWidth-250-32)),l=ie(window.innerHeight*.58,300/2+32,Math.max(300/2+32,window.innerHeight-300/2-96)),u=Ae(i,l),h={id:z("node"),kind:"memo",title:"Agent",body:Eh,x:u.x-500/2,y:u.y-300/2,width:500,height:300,tags:["Agent Command","Researcher","Draft"],metadata:Of()};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:(T=h.metadata)==null?void 0:T.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]),Z(null),O(h.id),window.setTimeout(()=>O(w=>w===h.id?null:w),1200)},[D,Ae]),Rc=g.useCallback(()=>{var C,S,M,k,T,E,_,A;const i=ie(window.innerWidth*.6,232,Math.max(232,window.innerWidth-200-32)),l=ie(window.innerHeight*.56,300/2+32,Math.max(300/2+32,window.innerHeight-300/2-96)),u=Ae(i,l),h={id:z("node"),kind:"memo",title:"Code Note",body:Lh,x:u.x-400/2,y:u.y-300/2,width:400,height:300,tags:["Code Note","Draft","Unlinked"],metadata:$f()};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:(T=h.metadata)==null?void 0:T.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]),Z(null),O(h.id),window.setTimeout(()=>O(w=>w===h.id?null:w),1200)},[D,Ae]),De=g.useCallback((a,s)=>{var T,E,_,A,w,Y,te,xe,Va;if(a==="remote-monitor"){const J=I.current.nodes.find(ya);if(J){const Ya=_l(J),Ga=oe.current.scale,Ro=Pl(J.height,window.innerHeight);b({...oe.current,x:window.innerWidth/2-Ya.x*Ga,y:Ro-Ya.y*Ga}),x([J.id]),O(J.id),window.setTimeout(()=>O(Xt=>Xt===J.id?null:Xt),1e3);const On="Remote monitor already exists on this board. Focused existing node.";Oe(On),window.setTimeout(()=>{Oe(Xt=>Xt===On?null:Xt)},2200),f.emit("remoteMonitor.node.duplicateIgnored",{action:"toolbar-add",nodeId:J.id,surface:"mindcanvas-node"});return}}const i=s?Kr[s]:null,l=(i==null?void 0:i.mode)??(a==="image"?"Image":a==="video"?"Video":null),u=l?no(I.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"?Pl(C,window.innerHeight):window.innerHeight/2,M=Ae(window.innerWidth/2,S),k={id:z("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"?Ar:void 0,metadata:i?Bf(I.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?Zr(I.current.settings,l):void 0};D(J=>({...J,nodes:[...J.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:(T=k.metadata)==null?void 0:T.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:((Y=k.metadata)==null?void 0:Y.AdapterState)??"adapter-gated"}),a==="mask"&&f.emit("node.mask.add",{id:k.id,hasImage:!!k.imageUrl,imageRouterMask:((te=k.metadata)==null?void 0:te.ImageRouterMask)??"true",semanticType:((xe=k.metadata)==null?void 0:xe.SemanticType)??"ImageEditMask",adapterState:((Va=k.metadata)==null?void 0:Va.AdapterState)??"adapter-gated"}),x([k.id])},[b,D,Ae]),K=g.useCallback((a,s)=>{za(i=>({...i,nodes:i.nodes.map(l=>l.id===a?{...l,...s}:l)}),"node.patch",{id:a,keys:Object.keys(s)})},[za]),Tt=g.useCallback((a,s)=>{const i=V.current[0],l=I.current.nodes.find(u=>u.id===i);l&&(K(i,{metadata:{...l.metadata??{},[a]:a===F.templateNodeId||a===F.inputKey?qn(s):s}}),Qe(null),f.emit("templateStudio.node.metadata.patch",{id:i,key:a}))},[K]),ii=g.useCallback(a=>{var h;const s=V.current[0],i=I.current.nodes.find(C=>C.id===s);if(!i)return;const l=((h=i.metadata)==null?void 0:h[F.templateNodeId])||qn(i.title),u={...i.metadata??{},[F.studioNodeType]:a,[F.templateNodeId]:l,[F.templateRole]:a.replace(/^template\./,""),[F.compileTarget]:Zi(a,i)};a==="template.input"&&(u[F.inputKey]=u[F.inputKey]||qn(i.title),u[F.inputType]=u[F.inputType]||"text",u[F.inputRequired]=u[F.inputRequired]||"true"),K(s,{metadata:u}),Qe(null),f.emit("templateStudio.node.role.assign",{id:s,studioNodeType:a})},[K]),N=g.useCallback(a=>{Oe(a),window.setTimeout(()=>{Oe(s=>s===a?null:s)},2200)},[]),Lc=g.useCallback((a,s,i)=>{var M;const l=I.current.nodes.find(k=>k.id===a);if(!l)return;const u=ad(l.body),h=am(l,s,i,I.current.settings);if(!h||h.nodes.length===0){N("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.`;N(S)},[D,N]),Ec=g.useCallback(a=>{const s=I.current.nodes.find(T=>T.id===a.sourceNodeId),i=Ae(window.innerWidth/2,window.innerHeight/2),l=560,u=390,h=z("node"),C=s?s.x+s.width+Fo: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(T=>({...T,nodes:[...T.nodes,k]}),"remoteControl.node.add",{id:k.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId}),x([k.id]),N(`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,Ae,N]),ma=g.useCallback(a=>{const s=zo(oe.current)??{...Xa};ve({cameraBookmarks:{...I.current.settings.cameraBookmarks??{},[a]:s}},"camera.bookmark.save"),f.emit("camera.bookmark.save",{slot:a,...s}),N(`Camera slot ${a} saved.`)},[ve,N]),Rn=g.useCallback(a=>{var l;const s=zo((l=I.current.settings.cameraBookmarks)==null?void 0:l[a]),i=s??{...Xa};b(i),f.emit("camera.bookmark.goto",{slot:a,saved:!!s,...i}),N(s?`Camera slot ${a}.`:`Camera slot ${a} empty. Home view.`)},[b,N]),ys=g.useCallback(()=>{b({...Xa}),f.emit("camera.bookmark.goto",{slot:"home",saved:!1,...Xa}),N("Home view.")},[b,N]),li=g.useCallback(a=>{const s=oe.current,i=kh,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]),di=g.useCallback(()=>{const a=vn.current;return a?(a.focus(),a.select(),f.emit("globalInput.focus",{source:"keyboard"}),!0):!1},[]),xs=g.useCallback((a="keyboard")=>{const s=!(I.current.settings.wheelMode??!1);ve({wheelMode:s},`${a}.wheelMode.toggle`),f.emit("canvas.wheelMode.toggle",{source:a,wheelMode:s}),N(s?"Mouse wheel mode.":"Trackpad pan mode.")},[ve,N]),Cs=g.useCallback((a="keyboard")=>{const i=(I.current.settings.cursorDirection==="down"?"down":"right")==="down"?"right":"down";ve({cursorDirection:i},`${a}.cursorDirection.toggle`),f.emit("canvas.cursorDirection.toggle",{source:a,cursorDirection:i}),N(i==="down"?"Cursor direction down.":"Cursor direction right.")},[ve,N]),jo=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}),N(i?"Read mode fallback.":"Read mode off."),i}},[dt,N]),Ln=g.useCallback((a="keyboard")=>jo(!Fa.current,a),[jo]);g.useEffect(()=>{const a=window,s={getMindCanvasFullscreenState:a.getMindCanvasFullscreenState,setMindCanvasFullscreen:a.setMindCanvasFullscreen,getMindCanvasReadModeState:a.getMindCanvasReadModeState,setMindCanvasReadMode:a.setMindCanvasReadMode,toggleMindCanvasReadMode:a.toggleMindCanvasReadMode},i=()=>Fa.current,l=h=>jo(h,"api"),u=()=>Ln("api");return a.getMindCanvasFullscreenState=i,a.setMindCanvasFullscreen=l,a.getMindCanvasReadModeState=i,a.setMindCanvasReadMode=l,a.toggleMindCanvasReadMode=u,yo(!0),f.emit("canvas.readMode.api.bound"),()=>{yo(!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")}},[jo,Ln]);const Pc=g.useCallback(()=>{const a=I.current.settings.cameraBookmarks??{},s=qs.find(i=>!a[i])??qs[0];ma(s)},[ma]),_c=g.useCallback(a=>{tr(I.current.settings.gridType)!==a&&ve({gridType:a},`canvas.gridMode.${a}`)},[ve]),Dc=g.useCallback(()=>{ve({gridSnap:!(I.current.settings.gridSnap??!0)},"canvas.gridSnap.toggle")},[ve]),Bc=g.useCallback(a=>{const s=I.current.nodes.find(i=>i.id===a);!s||s.kind!=="directory"||(It(a),f.emit("node.directorySettings.open",{id:a}))},[]),Oc=g.useCallback(()=>{It(a=>(a&&f.emit("node.directorySettings.close",{id:a}),null))},[]),$c=g.useCallback((a,s)=>{const i=I.current.nodes.find(h=>h.id===a);if(!i||i.kind!=="directory")return;const l=rn(s.DirectoryPath),u={...i.metadata??{},DirectoryPath:l,Include:s.Include??"",Exclude:s.Exclude??""};K(a,{sourceFilePath:l||Ar,metadata:u}),It(null),f.emit("node.directorySettings.patch",{id:a,keys:["DirectoryPath","Include","Exclude"]}),N("Folder scan settings saved.")},[K,N]),Fc=g.useCallback(async a=>{const s=I.current.nodes.find(u=>u.id===a);if(!s||s.kind!=="directory")return;const i=Bh(s);if(f.emit("node.directory.scan.requested",{id:a,hasBridgePath:!!i,hasHandle:bn.current.has(a)}),i){if(!mt()){ee("blocked"),f.emit("node.directory.scan.bridge.blocked",{id:a,reason:"hosted-access-off"}),N("Hosted LocalBridge access is off.");return}try{const u=await fa();if(Me(u.status??null),ee(u.state),u.state!=="connected"){f.emit("node.directory.scan.bridge.unavailable",{id:a,message:u.message||"LocalBridge is unavailable."}),N(u.message||"LocalBridge is unavailable.");return}const h=zn(u.status);if(!h){ee("unavailable"),f.emit("node.directory.scan.bridge.failed",{id:a,reason:"missing-token"}),N("LocalBridge read token is unavailable.");return}const C=Wo(i,48);N(`Scanning ${C}...`),f.emit("node.directory.scan.bridge.requested",{id:a,path:i});const S=await $h(i,s.metadata,h,u.baseUrl),M=new Date().toISOString();K(a,{title:s.title==="Directory"||s.title==="New Folder"?C:s.title,body:El(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,sn))}}),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}),N(`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}),N("LocalBridge folder scan failed.")}return}const l=window;if(!l.showDirectoryPicker){f.emit("node.directory.scan.unsupported",{id:a}),N("Folder scan needs a Chromium browser with File System Access enabled.");return}try{let u=bn.current.get(a);u||(u=await l.showDirectoryPicker(),bn.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}),N("Folder permission was not granted.");return}N(`Scanning ${u.name}...`);const M=await _h(u,s.metadata),k=new Date().toISOString();K(a,{title:s.title==="Directory"||s.title==="New Folder"?u.name:s.title,body:El(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,sn))}}),f.emit("node.directory.scan.completed",{id:a,source:"browser-picker",directoryName:u.name,fileCount:M.fileCount,directoryCount:M.directoryCount,truncated:M.truncated}),N(`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}),N("Folder scan cancelled.");return}f.emit("node.directory.scan.failed",{id:a,message:u instanceof Error?u.message:String(u)}),N("Folder scan failed in this browser context.")}},[K,N]),ci=g.useCallback(a=>{un(a.id),Ma(Xe(a.name))},[]),Ss=g.useCallback(()=>{un(null),Ma("")},[]),ks=g.useCallback(a=>{const s=Xe(mn).slice(0,90);a===I.current.id?(hs(s),N("Board renamed.")):Bu(a,s)?(ze(ut()),N("Saved board renamed.")):(f.emit("board.rename.failed",{boardId:a,scope:"stored"}),N("Board rename failed.")),un(null),Ma("")},[hs,N,mn]),Uc=g.useCallback((a,s)=>{s.key==="Enter"?(s.preventDefault(),ks(a)):s.key==="Escape"&&(s.preventDefault(),Ss())},[Ss,ks]),zc=g.useCallback(a=>{const s=I.current.nodes.find(l=>l.id===a);if(!Gn(s))return;const i=s.aiEnabled===!1;K(a,{aiEnabled:i}),f.emit("node.aiReference.toggled",{id:a,enabled:i}),N(i?"AI reference enabled.":"AI reference disabled.")},[K,N]),Io=g.useCallback(async(a,s,i,l,u)=>{$a.current=a;try{const h=await Jn(a);return Wt.current=0,f.emit(s,{...i,ok:!0,method:h}),N(l),h}catch(h){return Wt.current=Date.now()+15e3,f.emit(s,{...i,ok:!0,method:"react-local",clipboardUnavailable:!0,message:h instanceof Error?h.message:String(h)}),N(u),"react-local"}},[N]),Wc=g.useCallback(async a=>{const s=I.current.nodes.find(l=>l.id===a);if(!s)return;const i=Xh(s);if(i)try{const l=await qh(i);f.emit("node.copyImage",{id:a,ok:!0,mode:l,urlKind:i.split(":",1)[0]||"relative"}),N(l==="image"?"Image copied to clipboard.":"Image reference copied.");return}catch(l){$a.current=i,Wt.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)}),N("Image reference copied inside this canvas.");return}await Io(Kh(s),"node.copy",{id:a},"Node content copied.","Node content copied inside this canvas.")},[Io,N]),Hc=g.useCallback(async(a,s)=>{await Io(s,"node.embed.copyUrl",{id:a,sourceKind:s.split(":",1)[0]||"relative"},"Embed URL copied.","Embed URL copied inside this canvas.")},[Io]),Vc=g.useCallback(a=>{const s=I.current.nodes.find(l=>l.id===a);if(!Gn(s))return;const i=er(s);K(a,{height:i}),f.emit("node.fitHeight",{id:a,height:i}),N("Node height fitted to text.")},[K,N]),Yc=g.useCallback(a=>{const s=I.current.nodes.find(C=>C.id===a);if(!Gn(s))return;const i=Vh(s),l=i?Math.max(120,Math.round(s.originalHeight||er(s))):Math.max(120,Math.min(s.height,Ih)),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}),N(h?"Node expanded.":"Node collapsed.")},[D,N]),Gc=g.useCallback(a=>{const s=I.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}),N(i?"Word wrap enabled.":"Word wrap disabled.")},[K,N]),Kc=g.useCallback((a,s)=>{const i=I.current.nodes.find(h=>h.id===a);if(!Gn(i))return;const l=zh(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}),N(`Company root staged locally as ${l}. Open CompanyCore to run it with an adapter later.`)},[K,N]),Xc=g.useCallback(a=>{var i;const s=I.current.nodes.find(l=>l.id===a);if(!(s!=null&&s.companyMode)){N("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"})},[N]),qc=g.useCallback(a=>{const s=I.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}),N("Company goal synced from this note locally."))},[K,N]),Jc=g.useCallback(a=>{var l;const s=I.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}),N(`Company status refreshed locally: ${i}.`)},[K,N]),Zc=g.useCallback(()=>{rt(a=>(a&&f.emit("companyGraph.close",{id:a}),null))},[]),ui=g.useCallback((a,s)=>{const i=I.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}),N(`Company marked ${s.toLowerCase()} locally.`))},[K,N]),mi=g.useCallback(a=>{var l;const s=I.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}),N("Company staging removed from this node.")},[K,N]),Qc=g.useCallback((a,s)=>{const i=I.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}),N(`Company approval ${s.toLowerCase()} locally.`))},[K,N]),eu=g.useCallback((a,s)=>{const i=s.trim();if(!i)return;const l=z("node"),u=z("edge");D(h=>{var M,k;const C=h.nodes.find(T=>T.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),N("Company follow-up task staged locally.")},[D,N]),tu=g.useCallback((a,s)=>{const i=z("node"),l=z("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),N("Company artifact added to the canvas.")},[D,N]),au=g.useCallback((a,s="preview")=>{const i=Yh(a);if(!i){N("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:Gh(a)}),f.emit("node.pdf.preview.open",{id:a.id,urlKind:i.startsWith("http")?"url":"path"});return}if(a.kind==="embed"&&!ln(i)){N("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})},[N]),nu=g.useCallback(a=>{const s=V.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}),Z(i=>i===a?null:i)},[D]),ws=g.useCallback(a=>{const s=Array.from(new Set(V.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}),Z(l=>l&&i.has(l)?null:l),rt(l=>l&&i.has(l)?null:l),It(l=>l&&i.has(l)?null:l),N(`Deleted ${s.length} selected node${s.length===1?"":"s"}.`)},[D,N]),No=g.useCallback((a,s)=>{var _;const i=Array.from(new Set(a));if(i.length===0)return;const l=I.current,u=new Set(i),h=l.nodes.filter(A=>u.has(A.id));if(h.length===0)return;const C=h.filter(ya),S=h.filter(A=>!ya(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(ya);A&&(x([A.id]),O(A.id),window.setTimeout(()=>O(w=>w===A.id?null:w),1e3)),N("Remote monitor is single-instance per board. Focused existing monitor.");return}const M=new Map(S.map(A=>[A.id,z("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:Rr(A.imageStack,A.id,M.get(A.id))})),T=l.edges.filter(A=>M.has(A.from)&&M.has(A.to)).map(A=>({...A,id:z("edge"),from:M.get(A.from),to:M.get(A.to)}));D(A=>({...A,nodes:[...A.nodes,...k],edges:[...A.edges,...T]}),"node.duplicate",{source:s,count:k.length,edgeCount:T.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),N(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,N]),vs=g.useCallback(a=>{No(V.current,a)},[No]),En=g.useCallback((a,s)=>{const i=Array.from(new Set(V.current));if(i.length===0)return;const l=new Set(i),u=I.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,T)=>{var E;return k.id!==((E=u[T])==null?void 0:E.id)})){N(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}),N(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,N]),js=g.useCallback(async()=>{const a=new Set(V.current),s=I.current.nodes.filter(u=>a.has(u.id));if(s.length===0)return;const i=I.current.edges.filter(u=>a.has(u.from)&&a.has(u.to)),l=sf(s,i);la.current=l;try{const u=await Jn(JSON.stringify(l));da.current=0,f.emit("multiSelection.copy",{count:s.length,edgeCount:i.length,ok:!0,method:u}),N(`Copied ${s.length} selected node${s.length===1?"":"s"} for canvas paste.`)}catch(u){da.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)}),N(`Copied ${s.length} selected node${s.length===1?"":"s"} inside this canvas.`)}},[N]),pa=g.useCallback((a,s,i)=>{const l=I.current.nodes.find(ya),u=[],h=[];let C=!!l;for(const w of a.nodes){if(ya(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)),N("Remote monitor is single-instance per board. Focused existing monitor.");return}const S=qo(h);if(!S)return;const M=new Map(h.map(w=>[w.id,z("node")])),k=s.x-S.minX,T=s.y-S.minY,E=h.map(w=>({...w,id:M.get(w.id),x:w.x+k,y:w.y+T,status:w.status==="running"?"idle":w.status,tags:w.tags?[...w.tags]:void 0,metadata:w.metadata?{...w.metadata}:void 0,imageStack:Rr(w.imageStack,w.id,M.get(w.id))})),_=a.edges.filter(w=>M.has(w.from)&&M.has(w.to)).map(w=>({...w,id:z("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),Z(null),O(A[0]??null),window.setTimeout(()=>O(w=>w===A[0]?null:w),1200),N(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,N]),Pn=g.useCallback((a,s,i)=>{const l=a.trim();if(!l)return;const u=Fl(l,s,`${i}-url`),h=u??Ul(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]),Z(null),O(h.id),window.setTimeout(()=>O(C=>C===h.id?null:C),1200),N(`${i==="drop"?"Dropped":"Pasted"} ${h.kind==="file"?"URL reference":h.kind} node.`)},[D,N]),Ao=g.useCallback(async(a,s,i)=>{const l=a.filter(h=>h.name||h.size>0);if(l.length===0)return;const u=I.current.id;try{const h=[];let C=s.x;for(const M of l){const k=await jf(M,{x:C,y:s.y},i);h.push(k),C+=k.width+Fo}if(I.current.id!==u){f.emit("async.staleIgnored",{path:"canvas.fileIngest",source:i,boardId:u,currentBoardId:I.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),Z(null),O(S[0]??null),window.setTimeout(()=>O(M=>M===S[0]?null:M),1200),N(`${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)}),N("File ingest failed in this browser context.")}},[D,N]);g.useEffect(()=>{const a=s=>{if(s.defaultPrevented||Ql(s.target))return;const i=s.clipboardData;if(!i)return;const l=Ua(),u=Gl(i.files,i.items);if(u.length>0){s.preventDefault(),Ao(u,l,"paste");return}const h=da.current>Date.now()?la.current:null;if(h){s.preventDefault(),pa(h,l,"paste"),f.emit("clipboard.nodes.pasteLocalFallback",{count:h.nodes.length});return}const C=Wt.current>Date.now()?$a.current:null;if(C){s.preventDefault(),Pn(C,l,"paste"),f.emit("clipboard.text.pasteLocalFallback",{chars:C.length}),Wt.current=0;return}const S=i.getData("text/plain"),M=$l(S);if(M){s.preventDefault(),pa(M,l,"paste");return}const k=S.trim()?S:zl(i.getData("text/html"));k.trim()&&(s.preventDefault(),Pn(k,l,"paste"))};return document.addEventListener("paste",a),()=>document.removeEventListener("paste",a)},[Ua,Ao,Pn,pa]);const ou=g.useCallback(a=>{or(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")},[]),su=g.useCallback(a=>{if(or(a.target))return;const s=Gl(a.dataTransfer.files,a.dataTransfer.items),i=a.dataTransfer.getData("text/uri-list"),l=a.dataTransfer.getData("text/plain"),u=zl(a.dataTransfer.getData("text/html")),h=Ua(a.clientX,a.clientY);if(s.length>0){a.preventDefault(),Ao(s,h,"drop");return}const C=(i||l||u).trim(),S=$l(l);if(S){a.preventDefault(),pa(S,h,"drop");return}C&&(a.preventDefault(),Pn(C,h,"drop"))},[Ua,Ao,Pn,pa]),ru=g.useCallback(()=>{const a=new Set(V.current),s=new Set(I.current.nodes.filter(i=>a.has(i.id)&&Gn(i)).map(i=>i.id));if(s.size===0){N("No text nodes in this selection.");return}D(i=>({...i,nodes:i.nodes.map(l=>s.has(l.id)?{...l,height:er(l)}:l)}),"multiSelection.fitHeight",{count:s.size}),f.emit("multiSelection.fitHeight",{count:s.size}),N(`Fitted ${s.size} text node${s.size===1?"":"s"}.`)},[D,N]),Is=g.useCallback(a=>{const s=new Set(V.current),i=I.current.nodes.filter(_=>s.has(_.id)).sort((_,A)=>V.current.indexOf(_.id)-V.current.indexOf(A.id));if(i.length<2)return;const l=qo(i);if(!l)return;const u=a==="tidy"?Mf(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=I.current.settings.gridSnap??!0;let T;a==="grid"?T={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:to}:a==="strip"?T={mode:"stripHorizontal",order:"selectionOrder",targetHeight:S,gapX:h,sizeMode:"preserve",snapToGrid:k,gridSize:to}:T={mode:"masonry",order:"spatialReading",anchor:"selectionBoundsTopLeft",maxColumns:12,gapX:24,gapY:24,quantile:.75,sizeMode:"preserve",snapToGrid:k,gridSize:to};const E=Ep(M,T,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:T.mode,snapToGrid:k}),f.emit("multiSelection.arrange",{mode:a,count:i.length,layoutMode:T.mode,snapToGrid:k,boundsAfter:E.boundsAfter}),N(a==="tidy"?`Tidied ${i.length} selected nodes.`:`Arranged ${i.length} selected nodes as ${a}.`)},[D,N]),iu=g.useCallback(()=>{const a=Array.from(new Set(V.current)),s=I.current,i=new Map(s.nodes.map(w=>[w.id,w])),l=a.map(w=>i.get(w)).filter(w=>!!(w&&w.kind==="image"&&Qn(w).length>0));if(l.length<2){N("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=Qn(u),k=[];for(const w of M)k.push(Dl(w,u,S,C));for(const w of h)for(const Y of Qn(w))k.push(Dl(Y,w,S,C));if(k.length<2){N("No stackable image variants found."),f.emit("multiSelection.mergeImageStacks.skipped",{reason:"not-enough-variants",selectedCount:a.length});return}const T=k.some(w=>{var Y;return w.variantId===((Y=u.imageStack)==null?void 0:Y.activeVariantId)})?u.imageStack.activeVariantId:k[0].variantId,E=k.find(w=>w.variantId===T)??k[0],_=h.map(w=>w.id),A=new Set(_);D(w=>({...w,nodes:w.nodes.filter(Y=>!A.has(Y.id)).map(Y=>{var te;return Y.id===u.id?{...Y,kind:"image",imageUrl:E.imageUrl,imageStack:{activeVariantId:T,variants:k,kind:"pile",title:((te=Y.imageStack)==null?void 0:te.title)||Y.title,updatedAtUtc:C},metadata:{...Y.metadata??{},ImageStackKind:"pile",ImageStackPrimaryNodeId:u.id,ImageStackVariantCount:String(k.length),ImageStackMergedAtUtc:C,ImageStackRemovedNodeIds:_.join(","),ImageStackActiveVariantId:T},tags:Array.from(new Set([...Y.tags??["image"],"Stack"])).slice(0,4)}:Y}),edges:w.edges.filter(Y=>!A.has(Y.from)&&!A.has(Y.to))}),"multiSelection.mergeImageStacks",{primaryNodeId:u.id,removedNodeIds:_,addedVariants:k.length-M.length,variantCount:k.length}),x([u.id]),Z(w=>w&&A.has(w)?null:w),rt(w=>w&&A.has(w)?null:w),It(w=>w&&A.has(w)?null:w),O(u.id),window.setTimeout(()=>O(w=>w===u.id?null:w),1200),N(`Stacked ${l.length} image nodes into ${k.length} variants.`)},[D,N]),lu=g.useCallback(a=>{const s=V.current.includes(a)?V.current:[a];No(s,"node-action")},[No]),Yt=g.useCallback(async(a,s)=>{const i=In.current.isBusy(a);return i&&f.emit("automation.run.queued",{id:a,key:a}),In.current.enqueue(a,async()=>{var T,E,_;const l=I.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=(Da.current.get(a)??0)+1;Da.current.set(a,u);const h=ra.current,C=(s==null?void 0:s.trim())||l.body,S=Jr(qr(l));K(a,{status:"running",body:C,...Qa(l)?{metadata:Kn(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=()=>Da.current.get(a)===u&&ra.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=Ff(C,l);K(a,{status:"done",result:w,...Qa(l)?{metadata:Kn(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.`:""})}:{}}),Z(a)};if(!mt()){k("hosted-access-gated");return}try{const A=await fa();if(!M()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}if(ee(A.state),Me(A.status??null),A.state!=="connected"){le(A.message||"LocalBridge is unavailable."),k(A.message||"LocalBridge unavailable");return}const w=zn(A.status);if(!w){k("LocalBridge token unavailable");return}const Y=Jl(I.current,l,C);f.emit("localBridge.codex.run",{id:a,boardId:I.current.id});const te=await nm({instruction:Y,workingDirectory:((E=(T=A.status)==null?void 0:T.project)==null?void 0:E.rootPath)||((_=A.status)==null?void 0:_.workspace)||void 0,sandbox:"read_only",model:Xn(I.current.settings.model),reasoningEffort:Df(I.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(!te.success||!te.finalResponse){const xe=te.error||"LocalBridge Codex returned no response.";f.emit("localBridge.codex.failed",{id:a,message:xe,status:te.status}),K(a,{status:"blocked",result:xe,...Qa(l)?{metadata:Kn(l,{instruction:C,output:xe,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:S?"media-prompt-only":"ai-task",error:xe,fallback:!1,partial:!0})}:{}}),Z(a);return}K(a,{status:"done",result:te.finalResponse,...Qa(l)?{metadata:Kn(l,{instruction:C,output:te.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:te.providerKind,threadId:te.threadId,turnId:te.turnId}),Z(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,...Qa(l)?{metadata:Kn(l,{instruction:C,output:w,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:S?"media-prompt-only":"ai-task",error:w,fallback:!1,partial:!0})}:{}}),Z(a)}})},[K]),du=g.useCallback(async()=>{const a=V.current[0];if(!a){N("Select an AI Task to run its graph.");return}const s=Er(I.current,a);if(s.length===0){N("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){N("The selected AI Task graph is already running.");return}N(`Running selected graph: ${i.length} AI task${i.length===1?"":"s"}.`);for(const l of i)await Yt(l.id)},[Yt,N]),cu=g.useCallback(async a=>{if(a.result)try{const s=await Jn(a.result);f.emit("aiTask.result.copy",{id:a.id,chars:a.result.length,ok:!0,method:s}),N("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)}),N("AI result copy unavailable in this browser context.")}},[N]),uu=g.useCallback(a=>{if(!a.result)return;const s=Uf(a,{x:a.x+a.width+78,y:a.y}),i={id:z("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>Nr}),x([s.id]),Z(null),O(s.id),window.setTimeout(()=>O(l=>l===s.id?null:l),1200),N("AI result archived as a Markdown node.")},[D,N]),mu=g.useCallback(a=>{if(!a.result)return;const s=zf(a,{x:a.x+a.width+78,y:a.y+Math.min(a.height+44,360)}),i={id:z("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]),Z(null),O(s.id),window.setTimeout(()=>O(l=>l===s.id?null:l),1200),N("Follow-up AI Task staged from the result.")},[D,N]),pi=g.useCallback(()=>{var On,Xt,Ui,zi,Wi,Hi,Vi;const a=v.trim(),s=I.current.settings.inputMode,i=[...V.current],l=I.current.nodes.find(ce=>ce.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=Nn.current;if((k==null?void 0:k.signature)===S&&M-k.at<=Nl){f.emit("globalInput.duplicateIgnored",{routePath:C,inputMode:s,chars:u.length,windowMs:Nl});return}Nn.current={signature:S,at:M};const T={routePath:C,inputMode:s,selectedNodeIds:i,chars:u.length};f.emit("globalInput.submit.snapshot",{...T,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(""),$(ce=>ce+1),f.emit("globalInput.submit.started",T);const E=ce=>{$(St=>Math.max(0,St-1)),f.emit("globalInput.submit.completed",{...T,status:ce})};if((l==null?void 0:l.kind)==="ai-task"){Yt(l.id,a).then(()=>E("ai-task")).catch(ce=>{f.emit("globalInput.submit.completed",{...T,status:"ai-task-error",message:ce instanceof Error?ce.message:String(ce)}),$(St=>Math.max(0,St-1))});return}const _=Ae(window.innerWidth/2,window.innerHeight/2),A={x:_.x,y:_.y},w=Fl(u,A,"global-input-url"),Y=w?null:Xr(u),te=!!(Y&&/^https?:\/\//i.test(Y)&&!ln(Y)),xe=!w&&!te&&(s==="Image"||s==="Video")?s:null,Va=w??(te?Ul(u,A,"global-input-rejected-url"):null)??(xe?Cf(u,A,I.current.settings,xe):xf(u,A,I.current.settings)),J={...Va,x:_.x-Va.width/2,y:_.y-Va.height/2},Ya=J.kind==="ai-task",Ga=w?"globalInput.url.add":te?"globalInput.rejectedUrl.add":xe?"globalInput.media.add":"globalInput.aiTask.add",Ro={id:J.id,kind:J.kind,chars:u.length,inputMode:s,...Ya?{model:(On=J.metadata)==null?void 0:On.TextModel,provider:(Xt=J.metadata)==null?void 0:Xt.AiProvider,effort:(Ui=J.metadata)==null?void 0:Ui.Effort}:{},...xe?{mediaMode:xe,mediaModel:(zi=J.metadata)==null?void 0:zi.MediaModel,aspectPresetId:(Wi=J.metadata)==null?void 0:Wi.AspectPresetId,requestedSize:(Hi=J.metadata)==null?void 0:Hi.RequestedSize}:{}};if(Ya){const ce=I.current,St={...ce,nodes:ce.nodes.some(Ps=>Ps.id===J.id)?ce.nodes:[...ce.nodes,J],updatedAt:new Date().toISOString()};m(Ps=>ba(Ps,ce,{description:Ga,mergeKey:null})),y([]),I.current=St,f.emit(Ga,Ro),r(St)}else D(ce=>({...ce,nodes:ce.nodes.some(St=>St.id===J.id)?ce.nodes:[...ce.nodes,J]}),Ga,Ro);if(L(""),x([J.id]),Z(null),O(J.id),window.setTimeout(()=>O(ce=>ce===J.id?null:ce),1200),Ya){f.emit("globalInput.aiTask.runRequested",{id:J.id,chars:u.length,model:(Vi=J.metadata)==null?void 0:Vi.TextModel}),N("AI task created from input and running."),Yt(J.id,u).then(()=>E("ai-task-created")).catch(ce=>{f.emit("globalInput.submit.completed",{...T,status:"ai-task-created-error",message:ce instanceof Error?ce.message:String(ce)}),$(St=>Math.max(0,St-1))});return}N(`Added ${J.kind==="file"?"URL reference":J.kind} node from input.`),E(w?"url-node":te?"rejected-url-node":xe?"media-node":"text-node")},[D,v,Yt,Ae,N]),pu=g.useCallback(async()=>{const a=Hf(I.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){N(s.length>0?"All AI task graphs are already running.":"No AI tasks on this board.");return}N(`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 Yt(h.id)},[Yt,N]),gu=g.useCallback(()=>{const a=I.current.nodes.filter(s=>s.kind==="ai-task"&&s.status==="running");if(a.length===0){N("No running AI tasks to pause."),f.emit("automation.pause",{count:0});return}ra.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}),N(`Paused ${a.length} running task${a.length===1?"":"s"}.`)},[D,N]),hu=g.useCallback(()=>{const a=I.current.nodes.filter(s=>s.kind==="ai-task"&&(s.status==="running"||s.status==="paused"));if(a.length===0){N("No active AI tasks to stop."),f.emit("automation.stop",{count:0});return}ra.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}),Z(null),N(`Stopped ${a.length} active task${a.length===1?"":"s"}.`)},[D,N]),fu=g.useCallback(()=>{const a=I.current.nodes.find(C=>C.id===V.current[0]);if(!a)return;const s=a.x+a.width+80,i=a.y,l={id:z("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:z("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:z("edge"),from:a.id,to:l.id,kind:"context"},{id:z("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]),bu=g.useCallback((a,s)=>{if(ue&&ue.from!==a){const i={id:z("edge"),from:ue.from,to:a,kind:ue.kind==="context"?"context":s};D(l=>({...l,edges:[...l.edges,i]}),"edge.add",{...i}),G(null);return}G({from:a,kind:s})},[D,ue]),Ns=g.useCallback(()=>{m(a=>{const s=a.at(-1);if(!s)return a;const i=s.board,l=V.current,u=Zl(l,i);return y(h=>ng(h,I.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)})},[]),As=g.useCallback(()=>{y(a=>{const s=a[0];if(!s)return a;const i=s.board,l=V.current,u=Zl(l,i);return m(h=>ba(h,I.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||Ql(s.target))return;const i=s.key.toLowerCase(),l=s.ctrlKey||s.metaKey,u=!l&&!s.altKey&&!s.shiftKey,h=Gf(s.target);if(s.key==="Tab"&&u&&!s.repeat&&!h){s.preventDefault(),xs("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-wheel-mode",wheelMode:!(I.current.settings.wheelMode??!1)});return}if(s.key==="Enter"&&u&&!s.repeat&&!h&&di()){s.preventDefault(),f.emit("keyboard.shortcut",{action:"focus-global-input"});return}if(i==="f"&&u&&!s.repeat&&!h){s.preventDefault(),Ln("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-fullscreen"});return}if(i==="d"&&u&&!s.repeat){s.preventDefault(),Cs("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-cursor-direction"});return}if(i==="h"&&u&&!s.repeat){s.preventDefault(),ys(),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(),li(C),f.emit("keyboard.shortcut",{action:"camera-pan",direction:C});return}if(i===Jt&&!s.altKey&&!s.shiftKey){s.preventDefault(),l?(ma(Jt),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:Jt})):(Rn(Jt),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:Jt}));return}if(/^[0-9]$/.test(s.key)&&!s.altKey){if(l&&!s.shiftKey){s.preventDefault(),ma(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:s.key});return}if(!l&&!s.shiftKey){s.preventDefault(),Rn(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:s.key});return}}if(l&&i==="z"&&!s.shiftKey){s.preventDefault(),Ns(),f.emit("keyboard.shortcut",{action:"undo"});return}if(l&&i==="y"||l&&s.shiftKey&&i==="z"){s.preventDefault(),As(),f.emit("keyboard.shortcut",{action:"redo"});return}if(l&&i==="f"&&!s.altKey){s.preventDefault(),(M=_a.current)==null||M.focus(),(k=_a.current)==null||k.select(),f.emit("keyboard.shortcut",{action:"focus-search"});return}if(l&&i==="c"&&V.current.length>0){s.preventDefault(),js(),f.emit("keyboard.shortcut",{action:"copy",count:V.current.length});return}if(l&&i==="v"&&la.current&&da.current>Date.now()){const T=la.current;s.preventDefault(),pa(T,Ua(),"paste"),f.emit("keyboard.shortcut",{action:"paste-local",count:T.nodes.length});return}if(l&&i==="d"){s.preventDefault(),vs("keyboard"),f.emit("keyboard.shortcut",{action:"duplicate",count:V.current.length});return}if(l&&s.key==="]"){s.preventDefault(),En("front","keyboard"),f.emit("keyboard.shortcut",{action:"bring-front",count:V.current.length});return}if(l&&s.key==="["){s.preventDefault(),En("back","keyboard"),f.emit("keyboard.shortcut",{action:"send-back",count:V.current.length});return}if(s.key==="Delete"||s.key==="Backspace"){if(V.current.length===0)return;s.preventDefault(),ws("keyboard"),f.emit("keyboard.shortcut",{action:"delete",count:V.current.length});return}if(s.key!=="Escape")return;let S=!1;ta&&(re(!1),S=!0),Ke&&(hn(!1),S=!0),yn&&(Nt(!1),S=!0),kt&&(Ne("keyboard"),S=!0),nt&&(U(null),S=!0),Je&&(rt(null),S=!0),jt&&(It(null),S=!0),ue&&(G(null),S=!0),se&&(Z(null),S=!0),j.trim()&&(P(""),X([]),pe(0),S=!0),V.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,Ne,ue,js,ws,jt,vs,di,Ua,Rn,ys,kt,li,pa,nt,ta,j,As,En,se,ma,Ke,yn,Cs,Ln,xs,Ns]);const yu=g.useCallback(()=>{Ou(),D(()=>({...Gi,updatedAt:new Date().toISOString()}),"board.restore",{source:"fixture-reset"}),x(["node-agent-command"]),ze([]),Ne("fixture-reset")},[Ne,D]),Ms=g.useCallback((a,s="result-click")=>{const i=_l(a),l={...oe.current,x:window.innerWidth/2-i.x*oe.current.scale,y:window.innerHeight/2-i.y*oe.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=++Ba.current,s=Vf(oe.current,be);f.emit("search.started",{query:j,engine:zt.current?"worker":"local",viewportCenterX:Number(s.centerX.toFixed(2)),viewportCenterY:Number(s.centerY.toFixed(2))});const i=window.setTimeout(()=>{if(a!==Ba.current){f.emit("async.staleIgnored",{path:"search",seq:a});return}if(!j.trim()){X([]),pe(0),we("none"),f.emit("search.completed",{query:j,count:0,engine:"none"});return}const u=ia.current;if(u&&zt.current){u.postMessage({type:"SEARCH_QUERY",boardId:I.current.id,seq:a,query:j,limit:8,viewport:s});return}const h=performance.now(),C=Yf(I.current.nodes,j,s,8);X(C),pe(0),we("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,be,ge]);const _n=g.useCallback(a=>{pe(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]),Ts=g.useCallback(a=>{const s=B[ae];s&&Ms(s,a)},[Ms,ae,B]),xu=g.useCallback(a=>{if(a.key==="ArrowDown"){a.preventDefault(),_n(1);return}if(a.key==="ArrowUp"){a.preventDefault(),_n(-1);return}if(a.key==="Enter"){a.preventDefault(),Ts("keyboard-enter");return}a.key==="Escape"&&(P(""),X([]),pe(0),f.emit("search.cleared"))},[Ts,_n]),Cu=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=I.current.nodes.find(T=>T.id===a);if(!l)return;m(T=>ba(T,I.current,{description:"Move nodes",mergeKey:null})),y([]);const u=V.current.includes(a)?V.current:[a],h=new Map(I.current.nodes.filter(T=>u.includes(T.id)).map(T=>[T.id,{x:T.x,y:T.y}])),C=h.get(a)??{x:l.x,y:l.y},S=I.current.settings.gridSnap??!0,M=T=>{const E=(T.clientX-i.x)/oe.current.scale,_=(T.clientY-i.y)/oe.current.scale,A=S?Ol(C.x+E)-C.x:E,w=S?Ol(C.y+_)-C.y:_;r(Y=>({...Y,nodes:Y.nodes.map(te=>{const xe=h.get(te.id);return xe?{...te,x:xe.x+A,y:xe.y+w}:te}),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})},[]),Su=g.useCallback((a,s)=>{if(s.button!==0)return;s.preventDefault(),s.stopPropagation();const i=I.current.nodes.find(E=>E.id===a);if(!i)return;const l={x:s.clientX,y:s.clientY},u=Jh(i);let h={width:i.width,height:i.height};m(E=>ba(E,I.current,{description:"Resize node",mergeKey:null})),y([]),x(E=>E.includes(a)?E:[a]),Z(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",T)},S=E=>{const _=(E.clientX-l.x)/oe.current.scale,A=(E.clientY-l.y)/oe.current.scale;let w=i.width+_,Y=i.height+A;if(E.shiftKey&&i.width>0&&i.height>0){const te=Math.max(w/i.width,Y/i.height);w=i.width*te,Y=i.height*te}h={width:Math.round(ie(w,u.minWidth,u.maxWidth)),height:Math.round(ie(Y,u.minHeight,u.maxHeight))},r(te=>({...te,nodes:te.nodes.map(xe=>xe.id===a?{...xe,...h}:xe),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})},T=()=>{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",T,{once:!0})},[]),ku=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){Z(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 T=Xl({startX:s.x,startY:s.y,currentX:k.clientX,currentY:k.clientY});if(h(),at(null),T.width<Il&&T.height<Il){f.emit("selection.box.cancelled",{reason:"too-small",width:Math.round(T.width),height:Math.round(T.height)});return}const E=Lf(T,oe.current),_=I.current.nodes.filter(A=>Kl(A,E)).map(A=>A.id);x(_),f.emit("selection.box.completed",{count:_.length,width:Math.round(T.width),height:Math.round(T.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([]),Z(null);const i={...oe.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]),Rs=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=I.current.settings.wheelMode?i:!i;a.preventDefault();const u=oe.current;if(l){const h=Math.exp(-a.deltaY*.0012),C=ie(u.scale*h,Vo,Yo),S=Ae(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,Ae]);g.useEffect(()=>{const a=wn.current;if(a)return a.addEventListener("wheel",Rs,{passive:!1}),()=>a.removeEventListener("wheel",Rs)},[Rs]);const q=o.nodes.find(a=>a.id===c[0]),Wa=g.useMemo(()=>{const a=new Set(c);return o.nodes.filter(s=>a.has(s.id))},[o.nodes,c]),Dn=((Ii=q==null?void 0:q.metadata)==null?void 0:Ii[F.studioNodeType])??"",wu=Dn?Bs(Dn):"Unassigned",vu=Dn==="template.input",gi=g.useMemo(()=>Ll(ke),[ke]),Mo=me&&me.issues.length===0?me.template:null,hi=g.useMemo(()=>Eo(Mo,Ft),[Ft,Mo]),ju=g.useMemo(()=>Wa.filter(a=>a.kind==="image"&&Qn(a).length>0).length,[Wa]),Ha=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]),fi=g.useMemo(()=>{if(!q||q.kind!=="ai-task")return{size:0,runnable:0};const a=Er(o,q.id);return{size:a.length,runnable:a.filter(s=>s.status!=="running").length}},[o,q]),ga=g.useMemo(()=>{if(Wa.length<2)return null;const a=qo(Wa);if(!a)return null;const s=Math.max(.01,ne.scale),i=a.minX*s+ne.x-10,l=a.minY*s+ne.y-10,u=a.maxX*s+ne.x+10,h=a.maxY*s+ne.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:ie(C,168,Math.max(168,be.width-168)),toolbarTop:ie(S,42,Math.max(42,be.height-58))}},[Wa,be.height,be.width,ne]),Gt=se?o.nodes.find(a=>a.id===se):null,bi=Je?o.nodes.find(a=>a.id===Je&&!!a.companyMode):null,yi=jt?o.nodes.find(a=>a.id===jt&&a.kind==="directory"):null,xi=g.useMemo(()=>new Set([...c,...B.map(a=>a.id),ft,se,Je,jt,ue==null?void 0:ue.from].filter(a=>!!a)),[Je,ue==null?void 0:ue.from,jt,ft,se,B,c]),ha=g.useMemo(()=>{const a=Rf(ne,be);return o.nodes.filter(s=>xi.has(s.id)||Kl(s,a))},[xi,o.nodes,be,ne]),Ls=g.useMemo(()=>new Set(ha.map(a=>a.id)),[ha]);g.useEffect(()=>{f.emit("visibility.culled",{visible:ha.length,total:o.nodes.length,scale:Number(ne.scale.toFixed(3))})},[o.nodes.length,ne.scale,ha.length]);const Iu=g.useCallback(()=>{const a=I.current,s=V.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=>V.current.includes(l.id)&&l.kind==="ai-task")??a.nodes.find(l=>l.kind==="ai-task");return i?Jl(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:",ao(v||(s==null?void 0:s.body)||"No prompt input.",4e3)].join(`
47
+ `)},[v]),Ci=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]),Si=g.useMemo(()=>Ci.filter(a=>Ls.has(a.from)||Ls.has(a.to)),[Ci,Ls]),et=g.useMemo(()=>Tf(o.nodes,ne,be),[o.nodes,ne,be]),Nu=g.useCallback(a=>{if(!et)return;const s=a.currentTarget.getBoundingClientRect(),i=ie(a.clientX-s.left,0,Go),l=ie(a.clientY-s.top,0,Ko),u=et.bounds.minX+(i-en)/et.scale,h=et.bounds.minY+(l-en)/et.scale;b({...oe.current,x:be.width/2-u*oe.current.scale,y:be.height/2-h*oe.current.scale}),f.emit("minimap.navigate",{worldX:Math.round(u),worldY:Math.round(h)})},[b,et,be.height,be.width]),Kt=o.settings.inputMode==="Image"?"Image":o.settings.inputMode==="Video"?"Video":null,Rt=Kt==="Image"?rc:Kt==="Video"?ic:null,Au=v.trim().length>0||(q==null?void 0:q.kind)==="ai-task",ki=j.trim().length>0,wi=B[ae]??null,Mu=ki?`${B.length} result${B.length===1?"":"s"}`:`${o.nodes.length} nodes`,Bn=tt?Xl(tt):null,To=tr(o.settings.gridType),vi=o.settings.gridSnap??!0,ji=o.settings.cameraBookmarks??{},Es=kt;return n.jsxs("div",{ref:wn,className:`mindcanvas ${xt?"mindcanvas--read-mode":""}`,"data-read-mode":xt?"true":"false","data-read-mode-api":fn?"bound":"unbound",onPointerMove:sc,onDragOver:ou,onDrop:su,children:[n.jsx("div",{ref:Mt,className:`canvas-plane canvas-plane--grid-${To}`,"data-grid-type":To,"data-grid-snap":o.settings.gridSnap??!0?"on":"off",onPointerDown:ku,onContextMenu:a=>a.preventDefault(),children:n.jsxs("div",{ref:Pa,className:"canvas-world","data-visible-nodes":ha.length,"data-total-nodes":o.nodes.length,"data-visible-edges":Si.length,children:[n.jsx("svg",{className:"edge-layer",width:"4000",height:"3000",viewBox:"-1200 -900 4000 3000","aria-hidden":"true",children:Si.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))}),ha.map(a=>n.jsx(Qg,{node:a,selected:c.includes(a.id),pulsing:ft===a.id,connectionDraft:ue,onSelect:Mc,onDragStart:Cu,onResizeStart:Su,onPatch:K,onDelete:nu,onDuplicate:lu,onRun:Yt,onPin:bu,onOpenResult:Z,onToggleAiReference:zc,onCopyNode:Wc,onCopyEmbedReference:Hc,onFitNodeHeight:Vc,onToggleNodeExpanded:Yc,onToggleWordWrap:Gc,onStageCompany:Kc,onOpenCompanyGraph:Xc,onSyncCompanyGoal:qc,onRefreshCompany:Jc,onSetCompanyStatus:ui,onRemoveCompany:mi,onOpenAsset:au,onOpenDirectorySettings:Bc,onScanDirectory:Fc,onCreateRemoteControl:Ec,onGenerateTemplateCard:Lc},a.id))]})}),Bn?n.jsx("div",{className:"canvas-selection-box",style:{left:Bn.left,top:Bn.top,width:Bn.width,height:Bn.height}}):null,ga?n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"canvas-multi-selection-bounds",style:{left:ga.left,top:ga.top,width:ga.width,height:ga.height}}),n.jsxs("div",{className:"multi-selection-toolbar floating-panel",role:"toolbar","aria-label":"Multi selection actions",style:{left:ga.toolbarLeft,top:ga.toolbarTop},children:[n.jsx("span",{className:"multi-selection-toolbar__count",children:Wa.length}),n.jsx("button",{type:"button",title:"Copy selected nodes","data-testid":"multi-selection-copy",onClick:()=>void js(),children:n.jsx(eo,{size:15})}),n.jsx("button",{type:"button",title:"Duplicate selected nodes",onClick:()=>vs("multi-toolbar"),children:n.jsx(cd,{size:15})}),n.jsx("button",{type:"button",title:"Bring selected nodes to front","data-testid":"multi-selection-bring-front",onClick:()=>En("front","multi-toolbar"),children:n.jsx(Lm,{size:15})}),n.jsx("button",{type:"button",title:"Send selected nodes to back","data-testid":"multi-selection-send-back",onClick:()=>En("back","multi-toolbar"),children:n.jsx(Em,{size:15})}),n.jsx("button",{type:"button",title:"Fit selected text heights",onClick:ru,children:n.jsx(il,{size:15})}),n.jsx("span",{className:"multi-selection-toolbar__separator"}),n.jsx("button",{type:"button",title:"Arrange selected nodes as grid",onClick:()=>Is("grid"),children:n.jsx(ll,{size:15})}),n.jsx("button",{type:"button",title:"Arrange selected nodes as strip",onClick:()=>Is("strip"),children:n.jsx(dl,{size:15})}),n.jsx("button",{type:"button",title:"Tidy selected nodes","data-testid":"multi-selection-tidy",onClick:()=>Is("tidy"),children:n.jsx(cl,{size:15})}),ju>=2&&n.jsx("button",{type:"button",title:"Stack selected image nodes","data-testid":"multi-selection-merge-images",onClick:iu,children:n.jsx(_o,{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:()=>ws("multi-toolbar"),children:n.jsx(Jo,{size:15})}),n.jsx("button",{type:"button",title:"Clear selection","data-testid":"multi-selection-clear",onClick:()=>{const a=V.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:[La.map(a=>{const s=a.id===o.id,i=Xe(a.name),l=Zh(a,o,s);return n.jsxs("div",{className:`tab-shell ${s?"is-active":""} ${vt===a.id?"is-dragging":""} ${gn===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":vt===a.id?"dragging":gn===a.id?"over":"idle",onDragStart:u=>{u.dataTransfer.effectAllowed="move",u.dataTransfer.setData("text/plain",a.id),pn(a.id),f.emit("board.tabs.dragStart",{boardId:a.id})},onDragOver:u=>{!vt||vt===a.id||(u.preventDefault(),u.dataTransfer.dropEffect="move",Ot(a.id))},onDragLeave:()=>{Ot(u=>u===a.id?null:u)},onDrop:u=>{u.preventDefault();const h=vt||u.dataTransfer.getData("text/plain");tc(h,a.id),pn(null),Ot(null)},onDragEnd:()=>{pn(null),Ot(null)},onMouseDown:u=>{u.button===1&&(u.preventDefault(),gs(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?de():ei(a.id),children:[a.sourceKind==="localBridge"?n.jsx(Wn,{size:15}):n.jsx(_o,{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(),gs(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:Qr,children:n.jsx(Zn,{size:16})})]}),kt&&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:()=>Ne("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":Pe.currentMode,"data-project-storage-selected-tab":$e,"data-project-storage-local-provider":Pe.localProviderKind,"data-project-storage-cloud-available":Pe.isCloudAvailable?"true":"false","data-project-storage-can-sync-cloud":Pe.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(ll,{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:Qr,children:n.jsx(Zn,{size:15})}),n.jsx("button",{type:"button",title:"Close Project Gallery",onClick:()=>Ne("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":Pe.showLocalTab?"true":"false","data-project-storage-show-cloud":Pe.showCloudTab?"true":"false",children:[n.jsxs("button",{type:"button",role:"tab","aria-selected":$e==="local",className:$e==="local"?"is-active":"","data-testid":"project-storage-tab-local",onClick:()=>ca("local"),children:[n.jsx(Wn,{size:14}),"Local"]}),n.jsxs("button",{type:"button",role:"tab","aria-selected":$e==="cloud",className:$e==="cloud"?"is-active":"","data-testid":"project-storage-tab-cloud",onClick:()=>ca("cloud"),children:[n.jsx(Do,{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=>hs(a.target.value)})]}),n.jsxs("div",{className:"project-gallery-rail-card",children:[n.jsx("span",{children:"Storage"}),n.jsx("strong",{children:$e==="local"?`${Ge.length} local boards`:"Cloud gated"}),n.jsx("small",{children:$e==="local"?`${Pe.localProviderKind} provider / browser catalog and LocalBridge boards`:Pe.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:Te||void 0,children:$e==="local"?Te?Wo(Te):td(Se):"Cloud gated"}),n.jsx("small",{children:$e==="local"?Te||uo||"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:ea,onChange:a=>Ht(a.target.checked)}),n.jsx("span",{children:"Show at startup"})]})]}),n.jsx("section",{className:"project-gallery-board-area",children:$e==="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:[Ge.length," saved"]})]}),n.jsxs("div",{className:"local-board-list local-board-list--stored project-gallery-board-grid","data-project-gallery-board-grid":"true",children:[Ge.map(a=>{const s=cn===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:mn,onChange:l=>Ma(l.target.value),onKeyDown:l=>Uc(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:()=>ks(a.id),children:n.jsx(Fs,{size:13})}),n.jsx("button",{type:"button",title:"Cancel rename","data-testid":"stored-board-rename-cancel",onClick:Ss,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:()=>ei(a.id),onDoubleClick:l=>{l.stopPropagation(),ci(a)},children:[a.sourceKind==="localBridge"?n.jsx(Wn,{size:15}):n.jsx(gt,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Xe(a.name)}),n.jsx("small",{children:_f(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:()=>ci(a),children:n.jsx(ul,{size:14})}),n.jsx("button",{type:"button",className:"local-board-row__action",title:"Delete board","data-testid":"stored-board-delete",disabled:i,onClick:()=>gs(a.id,"project-gallery"),children:n.jsx(Jo,{size:14})})]})},a.id)}),Ge.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:R,disabled:Se==="checking",children:Se==="checking"?n.jsx(Et,{size:15,className:"spin-icon"}):n.jsx(tn,{size:15})})]}),n.jsxs("div",{className:`local-board-state local-board-state--${Se}`,children:[Se==="blocked"?n.jsx(rd,{size:15}):Se==="unavailable"?n.jsx(Pm,{size:15}):n.jsx(Wn,{size:15}),n.jsx("span",{children:td(Se)}),Se==="blocked"&&!Ka()&&n.jsx("button",{type:"button",onClick:Vt,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(Us,{size:16}),n.jsxs("span",{children:[n.jsx("strong",{children:"Local Workspace"}),n.jsx("small",{title:Te||void 0,children:Te||uo||"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:wt,onClick:()=>void Kd("workspace-panel"),children:[n.jsx(tn,{size:14}),n.jsx("span",{children:"Refresh"})]}),n.jsxs("button",{type:"button","data-testid":"project-gallery-workspace-browse",title:"Select Local Storage",disabled:wt||Se==="blocked"&&!Ka(),onClick:()=>void Xd(),children:[wt?n.jsx(Et,{size:14,className:"spin-icon"}):n.jsx(Us,{size:14}),n.jsx("span",{children:"Select Local Storage"})]})]}),Be.length>0&&n.jsx("div",{className:"project-gallery-workspace-history","data-testid":"project-gallery-workspace-history",children:Be.map(a=>n.jsx("button",{type:"button",title:a,disabled:wt||a===Te,onClick:()=>void ps(a,"history"),children:Wo(a,40)},a))})]}),n.jsxs("button",{type:"button",className:"local-board-export","data-testid":"localbridge-export",disabled:Ie||!!((Ni=o.source)!=null&&Ni.partialImport)||!!((Ai=o.source)!=null&&Ai.truncated)||Se==="blocked"&&!Ka(),title:(Mi=o.source)!=null&&Mi.partialImport?"Export blocked for partial original imports":(Ti=o.source)!=null&&Ti.truncated?"Export blocked for truncated imported boards":"Export current board to LocalBridge",onClick:()=>void qd(),children:[Ie?n.jsx(Et,{size:15,className:"spin-icon"}):n.jsx(ml,{size:15}),n.jsx("span",{children:Ie?"Exporting":"Export current"})]}),n.jsx("div",{className:"local-board-list project-gallery-bridge-list",children:Pt.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:!!mo,onClick:()=>void ac(a),children:[n.jsx(Wn,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Xe(a.Title)}),n.jsx("small",{children:Mr(a.UpdatedAt)})]}),mo===a.Id&&n.jsx(Et,{size:15,className:"spin-icon"})]},a.Id))})]})]}):n.jsxs("div",{className:"project-cloud-shell","data-testid":"project-cloud-shell","data-project-cloud-status":Pe.isCloudAvailable?"available":"gated","data-project-cloud-plan":Pe.cloudPlanKey,"data-project-cloud-entitlement":Pe.cloudEntitlementStatus,"data-production-adapter-state":Ee.overallState,"data-project-cloud-database-mode":Ee.cloudBoards.mode,"data-project-cloud-database-ready":Ee.cloudBoards.canAttempt?"true":"false","data-project-cloud-asset-upload-mode":Ee.cloudAssetUpload.mode,"data-project-cloud-asset-upload-ready":Ee.cloudAssetUpload.canAttempt?"true":"false","data-client-secret-blocked":Ee.forbiddenClientSecretKeys.length>0?"true":"false",children:[n.jsx("div",{className:"project-cloud-shell__icon",children:fe?n.jsx(Do,{size:22}):n.jsx(Dr,{size:22})}),n.jsx("strong",{children:fe?"Cloud boards are provider-ready":"Cloud projects are adapter-gated"}),n.jsx("p",{children:fe?"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: ",fe?"Cloud ready":"Local"]}),n.jsxs("small",{children:[Xe(o.name)," / ",dn??Pe.cloudStatusMessage??"saved in this browser"]})]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-new-board",disabled:!fe||yt,title:fe?"Create and save a cloud board":"Cloud board creation requires the cloud adapter",onClick:Qd,children:[yt?n.jsx(Et,{size:14,className:"spin-icon"}):n.jsx(Zn,{size:14}),yt?"Saving":"New cloud board"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-save-current",disabled:!fe||yt,title:fe?"Save current board to Supabase":"Cloud save requires Supabase login",onClick:Zd,children:[n.jsx(ml,{size:14}),"Save current"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-refresh",disabled:!fe||yt,title:fe?"Refresh cloud boards":"Cloud refresh requires Supabase login",onClick:()=>void ct("refresh-button"),children:[yt?n.jsx(Et,{size:14,className:"spin-icon"}):n.jsx(tn,{size:14}),"Refresh cloud"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-login-shell",onClick:()=>e("/login"),children:[n.jsx(Do,{size:14}),"Open login shell"]}),fe&&n.jsxs("div",{className:"local-board-list project-gallery-cloud-list","data-testid":"project-cloud-board-list",children:[Na.map(a=>n.jsxs("button",{type:"button","data-testid":"project-cloud-board-row","data-board-id":a.id,className:"local-board-row",disabled:!!Aa,onClick:()=>void Jd(a),children:[n.jsx(Do,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Xe(a.name)}),n.jsxs("small",{children:[Mr(a.updatedAt)," / ",a.nodeCount," nodes"]})]}),Aa===a.id&&n.jsx(Et,{size:15,className:"spin-icon"})]},a.id)),Na.length===0&&n.jsx("p",{className:"local-board-message",children:"No cloud boards loaded."})]})]})})]})]})})})]}),!Es&&n.jsx(zg,{bridgeState:Se,bridgeMessage:qe,bridgeStatus:ds,syncStatus:Dt,syncMessage:ja,hostedBridgeAccessEnabled:Ka(),onRefreshBridge:R,onEnableHostedBridge:Vt}),yn&&Q&&n.jsx(Qi,{launchers:aa,activeLauncher:Q,template:We,selectedOptionId:Ze,values:At,validationMessage:Cn??(Ea?null:kn),canCreate:Ea||!kn,primaryLabel:Ea?"Add template card":"Create board",onLauncherSelected:gc,onOptionSelected:bc,onInputChanged:yc,onCreate:ec,onClose:fc}),xo&&n.jsx("div",{className:"template-studio-chooser-backdrop","data-testid":"template-studio-chooser",onMouseDown:oi,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:oi,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:Cc,children:[n.jsx("span",{className:"template-studio-chooser__icon",children:n.jsx(Zn,{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:Sc,children:[n.jsx("span",{className:"template-studio-chooser__icon",children:n.jsx(zs,{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."})]})]})]})]})}),Ta&&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(_o,{size:15}),n.jsx("span",{children:"Template Studio"})]}),n.jsxs("div",{className:"template-studio-toolbar__meta",children:["Editing ",ke.templateId]}),n.jsx("button",{type:"button",title:"Compile manifest","data-testid":"template-studio-compile",onClick:bs,children:n.jsx(an,{size:15})}),n.jsx("button",{type:"button",title:"Test create board","data-testid":"template-studio-test-create",onClick:jc,children:n.jsx(xa,{size:15})}),n.jsx("button",{type:"button",title:"Copy manifest JSON","data-testid":"template-studio-copy",onClick:()=>void vc(),children:n.jsx(eo,{size:15})}),n.jsx("button",{type:"button",title:"Save template draft","data-testid":"template-studio-save",onClick:kc,children:n.jsx(Fs,{size:15})}),n.jsx("button",{type:"button",title:"Exit Template Studio","data-testid":"template-studio-close",onClick:ri,children:n.jsx(pt,{size:15})})]}),n.jsx("div",{className:"template-studio-toolbar template-studio-toolbar--roles floating-panel",children:Os.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:()=>wc(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]}),Os.map(a=>n.jsx("button",{type:"button",title:a.label,className:Dn===a.studioNodeType?"is-active":"","data-testid":"template-studio-role","data-studio-node-type":a.studioNodeType,onClick:()=>ii(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:ke.templateTitle})]}),n.jsx("button",{type:"button",title:"Close Template Studio",onClick:ri,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:ke.templateId,onChange:a=>vo("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:ke.templateTitle,onChange:a=>vo("templateTitle",a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Category"}),n.jsx("input",{type:"text",value:ke.category,onChange:a=>vo("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:ke.boardTitle,onChange:a=>vo("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:wu})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Template Role"}),n.jsxs("select",{value:Dn,onChange:a=>ii(a.target.value),children:[n.jsx("option",{value:"",children:"Unassigned"}),Os.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:((Ri=q.metadata)==null?void 0:Ri[F.templateNodeId])??"",onChange:a=>Tt(F.templateNodeId,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Compile Target"}),n.jsxs("select",{value:((Li=q.metadata)==null?void 0:Li[F.compileTarget])??"",onChange:a=>Tt(F.compileTarget,a.target.value),children:[n.jsx("option",{value:"",children:"Auto"}),om.map(a=>n.jsx("option",{value:a,children:a},a))]})]}),vu?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:((Ei=q.metadata)==null?void 0:Ei[F.inputKey])??"",onChange:a=>Tt(F.inputKey,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Input Type"}),n.jsxs("select",{value:((Pi=q.metadata)==null?void 0:Pi[F.inputType])??"text",onChange:a=>Tt(F.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:(((_i=q.metadata)==null?void 0:_i[F.inputRequired])??"").toLowerCase()==="true",onChange:a=>Tt(F.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:((Di=q.metadata)==null?void 0:Di[F.inputPlaceholder])??"",onChange:a=>Tt(F.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:((Bi=q.metadata)==null?void 0:Bi[F.inputDefaultValue])??"",onChange:a=>Tt(F.inputDefaultValue,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Description"}),n.jsx("textarea",{value:((Oi=q.metadata)==null?void 0:Oi[F.inputDescription])??"",onChange:a=>Tt(F.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:(($i=q.metadata)==null?void 0:$i[F.inputOptions])??"",onChange:a=>Tt(F.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"}),So&&n.jsx("small",{children:So})]}),me!=null&&me.issues.length?n.jsx("div",{className:"template-studio-panel__issues","data-testid":"template-studio-issues",children:me.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,me?n.jsx("pre",{className:"template-studio-panel__manifest","data-testid":"template-studio-manifest",children:me.manifestJson}):n.jsx("p",{className:"template-studio-panel__hint",children:"Compile to preview the JSON manifest for the selected Studio nodes."})]})]})]})]}),ms&&Mo&&n.jsx(Qi,{launchers:[gi],activeLauncher:gi,template:Mo,selectedOptionId:null,values:Ft,validationMessage:Ra??hi,canCreate:!hi,onLauncherSelected:()=>{},onOptionSelected:()=>{},onInputChanged:Nc,onCreate:Ac,onClose:Ic}),n.jsx("input",{ref:jn,type:"file",accept:"application/json,.json",multiple:!0,hidden:!0,"data-testid":"board-import-input",onChange:a=>{oc(a.currentTarget.files),a.currentTarget.value=""}}),!Es&&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:()=>De("note"),children:n.jsx(pr,{size:17})}),n.jsx("button",{type:"button",title:"Add memo","data-testid":"memo-node-add",onClick:()=>De("memo"),children:n.jsx(dd,{size:17})}),n.jsx("button",{type:"button",title:"Add markdown","data-testid":"markdown-node-add",onClick:()=>De("markdown"),children:n.jsx(gt,{size:17})}),n.jsx("button",{type:"button",title:"Add CSV table","data-testid":"csv-table-node-add",onClick:()=>De("csv-table"),children:n.jsx(dl,{size:17})}),n.jsx("button",{type:"button",title:"Add code","data-testid":"code-node-add",onClick:()=>De("code"),children:n.jsx(an,{size:17})}),n.jsx("button",{type:"button",title:"Add AI Task","data-testid":"ai-task-node-add",onClick:()=>De("ai-task"),children:n.jsx(oo,{size:17})}),n.jsx("button",{type:"button",title:"Add Code Note","data-testid":"code-note-node-add",onClick:Rc,children:n.jsx(an,{size:17})}),n.jsx("button",{type:"button",title:"Add Agent Command","data-testid":"agent-command-node-add",onClick:Tc,children:n.jsx(_m,{size:17})}),n.jsx("button",{type:"button",title:"Add image generation spec","data-testid":"image-generate-node-add",onClick:()=>De("ai-task","image-generate"),children:n.jsx(so,{size:17})}),n.jsx("button",{type:"button",title:"Add video generation spec","data-testid":"video-generate-node-add",onClick:()=>De("ai-task","video-generate"),children:n.jsx(ro,{size:17})}),n.jsx("button",{type:"button",title:"Add image","data-testid":"image-node-add",onClick:()=>De("image"),children:n.jsx(so,{size:17})}),n.jsx("button",{type:"button",title:"Add image mask","data-testid":"mask-node-add",onClick:()=>De("mask"),children:n.jsx(Dm,{size:17})}),n.jsx("button",{type:"button",title:"Add video","data-testid":"video-node-add",onClick:()=>De("video"),children:n.jsx(ro,{size:17})}),n.jsx("button",{type:"button",title:"Add embed","data-testid":"embed-node-add",onClick:()=>De("embed"),children:n.jsx(nn,{size:17})}),n.jsx("button",{type:"button",title:"Add remote monitor","data-testid":"remote-monitor-node-add",onClick:()=>De("remote-monitor"),children:n.jsx(mr,{size:17})}),n.jsx("button",{type:"button",title:"Add PDF","data-testid":"pdf-node-add",onClick:()=>De("pdf"),children:n.jsx(gt,{size:17})}),n.jsx("button",{type:"button",title:"Add file reference","data-testid":"file-node-add",onClick:()=>De("file"),children:n.jsx(id,{size:17})}),n.jsx("button",{type:"button",title:"Add directory reference","data-testid":"directory-node-add",onClick:()=>De("directory"),children:n.jsx(Us,{size:17})}),n.jsx("button",{type:"button",title:"Templates","data-testid":"template-launcher-open",onClick:hc,children:n.jsx(_o,{size:17})}),n.jsx("button",{type:"button",title:"Template Studio",className:Ta||xo?"is-active":"","data-testid":"template-studio-open",onClick:xc,children:n.jsx(ul,{size:17})}),n.jsx("button",{type:"button",title:"Import board JSON","data-testid":"board-import-open",onClick:nc,children:n.jsx(Bm,{size:17})}),n.jsx("button",{type:"button",title:"Tools",onClick:()=>e("/tools"),children:n.jsx(gr,{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":Ha.total,"data-ai-task-runnable":Ha.runnable,"data-ai-task-running":Ha.running,onClick:pu,children:n.jsx(xa,{size:17})}),n.jsx("button",{type:"button",title:"Run selected graph","data-testid":"automation-run-selected","data-selected-graph-size":fi.size,"data-selected-graph-runnable":fi.runnable,disabled:!q||q.kind!=="ai-task",onClick:du,children:n.jsx(pl,{size:17})}),n.jsx("button",{type:"button",title:"Pause running AI tasks","data-testid":"automation-pause","data-running-ai-tasks":Ha.running,onClick:gu,children:n.jsx(Zo,{size:17})}),n.jsx("button",{type:"button",title:"Stop active AI tasks","data-testid":"automation-stop","data-active-ai-tasks":Ha.active,"data-paused-ai-tasks":Ha.paused,onClick:hu,children:n.jsx(Om,{size:15})}),n.jsx("button",{type:"button",title:"Generate flow",disabled:!q,onClick:fu,children:n.jsx(zs,{size:17})}),n.jsx("span",{className:"toolbar-separator"}),n.jsx("button",{type:"button",title:"Undo","data-testid":"history-undo",disabled:d.length===0,onClick:Ns,children:n.jsx($m,{size:17})}),n.jsx("button",{type:"button",title:"Redo","data-testid":"history-redo",disabled:p.length===0,onClick:As,children:n.jsx(Fm,{size:17})})]}),n.jsxs("div",{className:"search-panel floating-panel","data-testid":"mindcanvas-search-panel","data-search-engine":ye,"data-search-worker-state":ge,children:[n.jsxs("div",{className:"search-input-row",children:[n.jsx(Um,{size:16}),n.jsx("input",{ref:_a,"data-testid":"mindcanvas-search-input","aria-label":"Search text",value:j,onChange:a=>P(a.target.value),onKeyDown:xu,placeholder:"Search text ..."}),n.jsx("span",{className:"search-count","data-testid":"mindcanvas-search-count","aria-live":"polite",children:Mu}),n.jsx("button",{type:"button",title:"Previous search result","data-testid":"mindcanvas-search-prev",disabled:B.length===0,onClick:()=>_n(-1),children:n.jsx(zm,{size:14})}),n.jsx("button",{type:"button",title:"Next search result","data-testid":"mindcanvas-search-next",disabled:B.length===0,onClick:()=>_n(1),children:n.jsx(Hn,{size:14})})]}),ki&&n.jsx("div",{className:"search-current","data-testid":"mindcanvas-search-current","aria-live":"polite",children:wi?n.jsxs(n.Fragment,{children:[n.jsxs("span",{children:[ae+1," / ",B.length]}),n.jsxs("button",{type:"button","data-testid":"mindcanvas-search-focus",onClick:()=>Ts("current-button"),children:["Focus ",wi.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===ae?"is-active":"","aria-current":s===ae?"true":void 0,onMouseEnter:()=>pe(s),onClick:()=>Ms(a,"result-click"),children:[n.jsx("strong",{children:a.title}),n.jsx("span",{children:a.body.slice(0,84)})]},a.id))})]})]}),ue&&n.jsxs("div",{className:"connection-toast floating-panel",children:[n.jsx(Fs,{size:14}),"Select a compatible node pin to create a ",ue.kind," line.",n.jsx("button",{type:"button",onClick:()=>G(null),children:"Cancel"})]}),(Gt==null?void 0:Gt.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:[Gt.title," Result"]}),n.jsx("button",{type:"button",title:"Close",onClick:()=>Z(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 cu(Gt),children:[n.jsx(eo,{size:14}),n.jsx("span",{children:"Copy"})]}),n.jsxs("button",{type:"button",title:"Archive result as a Markdown node",onClick:()=>uu(Gt),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:()=>mu(Gt),children:[n.jsx(oo,{size:14}),n.jsx("span",{children:"Follow-up"})]})]}),n.jsx("pre",{className:"result-popover__body",children:Gt.result})]}),nt&&n.jsx(Sh,{url:nt.url,fileName:nt.fileName,onClose:()=>{U(null),f.emit("node.pdf.preview.close")}}),yi&&n.jsx(sm,{node:yi,onSave:$c,onClose:Oc}),Ke&&n.jsx(rm,{settings:o.settings,onPatchSettings:ve,onClose:mc}),bi&&n.jsx(Ch,{board:o,rootNode:bi,onClose:Zc,onStatus:ui,onRemove:mi,onSubmitFollowUp:eu,onApproval:Qc,onAddArtifact:tu}),ta&&n.jsx(im,{board:o,selectedNode:q??null,selectedCount:c.length,input:v,viewport:ne,viewportSize:be,localBridgeState:Se,syncStatus:Dt,syncMessage:ja,buildPrompt:Iu,navigate:e,onClose:pc}),!Es&&n.jsxs("div",{className:"global-input-shell","data-active-submits":H,"data-submit-state":H>0?"active":"idle",children:[n.jsx("textarea",{ref:vn,"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(),pi())}}),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:()=>ti("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:Tn?`${cr(Tn.provider)}: ${Tn.id}`:fs,children:[n.jsx("span",{className:"input-select-provider",children:Tn?cr(Tn.provider):"Custom"}),n.jsx("select",{"aria-label":"Text model","data-testid":"text-model-select",value:fs,onChange:a=>dc(a.target.value),children:lc.map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Hn,{size:15})]}),n.jsxs("button",{className:"select-button",type:"button",title:"Effort",onClick:()=>ti("effort",o.settings.effort==="Normal"?"Deep":"Normal"),children:[o.settings.effort,n.jsx(Hn,{size:15})]})]}),Kt&&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":`${Kt} model`,value:Rt.model.id,onChange:a=>cc(Kt,a.target.value),children:Ji(Kt).map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Hn,{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 ${lm(Rt.aspect.id)}`}),n.jsx("select",{"aria-label":`${Kt} aspect ratio`,value:Rt.aspect.id,onChange:a=>uc(Kt,a.target.value),children:Rt.aspectOptions.map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Hn,{size:15})]})]}),n.jsx("span",{className:"global-submit-count","aria-live":"polite",children:H}),n.jsx("button",{className:"send-button",type:"button",title:"Submit","data-testid":"global-input-submit",disabled:!Au,onClick:pi,children:n.jsx(pl,{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:[Bd.map(a=>n.jsx("button",{type:"button",title:`Use ${a} grid`,"aria-label":`Use ${a} grid`,"aria-pressed":To===a,className:To===a?"is-active":"","data-testid":`canvas-grid-mode-${a}`,onClick:()=>_c(a),children:a==="dot"?n.jsx(Wm,{size:15}):a==="line"?n.jsx(Hm,{size:15}):a==="particles"?n.jsx(cl,{size:15}):n.jsx(zs,{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":vi,className:vi?"is-active":"","data-testid":"canvas-grid-snap-toggle",onClick:Dc,children:n.jsx(Vm,{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:ys,children:n.jsx(Ym,{size:15})}),(()=>{const a=!!zo(ji[Jt]);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?ma(Jt):Rn(Jt)},children:n.jsx("span",{"aria-hidden":"true",children:"N"})})})(),qs.map(a=>{const s=!!zo(ji[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?ma(a):Rn(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:Pc,children:n.jsx(Gm,{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:()=>xs("button"),children:n.jsx(Km,{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:()=>Cs("button"),children:n.jsx(Xm,{size:17})}),n.jsx("button",{type:"button",title:"Reset fixture",onClick:yu,children:n.jsx(qm,{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:()=>{Ln("button")},children:n.jsx(il,{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:Nu,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 / ",ha.length," rendered / ",o.edges.length," edges / ",Math.round(ne.scale*100),"%",((Fi=o.source)==null?void 0:Fi.kind)==="localBridge"&&n.jsxs(n.Fragment,{children:[" ","/ LocalBridge",o.source.partialImport?" partial":"",o.source.truncated?` ${o.source.renderedNodeCount}/${o.source.originalNodeCount}`:""]})]})]})}function td(e){switch(e){case"checking":return"Checking";case"connected":return"Connected";case"blocked":return"Access gated";case"unavailable":return"Unavailable";default:return"Idle"}}export{lb as MindCanvas};