@mindexec/cli 0.2.353 → 0.2.355

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,48 +1,48 @@
1
- var Ou=Object.defineProperty;var $u=(e,t,o)=>t in e?Ou(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var tl=(e,t,o)=>$u(e,typeof t!="symbol"?t+"":t,o);import{j as n,r as g,a as Fu}from"./vendor-react-BXzpOyCS.js";import{l as zu,a as mt,s as Pt,b as Uu,d as Wu,r as Hu,c as Vu,e as Ku,i as al}from"./storage-nB8ArxiV.js";import{r as Or,g as ms,w as Yu,a as zs,d as nl,b as Gu,t as $r,p as pd,v as Xu,R as qu,c as Ju,u as Zu,e as Qu,f as ol,s as pt,i as Xa,l as Us,h as zn,j as Bo,k as Un,m as Wn,n as Oo,o as ha,q as sl,x as em,y as Hn,z as tm,A as am,B as nm,C as om,D as gd,E as sm,F as rm,G as Jn,H as pr,I as im,J as lm,K as rl,L as gr,M as hr,N as hd,O as $o,P as qo,Q as Zn,S as il,T as z,U as Ws,V as Qn,W as dm,X as cm,Y as um,Z as ll,_ as Hs,$ as mm,a0 as pm,a1 as gm,a2 as hm,a3 as fr,a4 as fm,a5 as bm,a6 as ym,a7 as xm,a8 as dl}from"./canvas-runtime-mGIIaYcF.js";import{e as Cm,d as km}from"./vendor-msgpack-BE8aAsr3.js";import{R as f}from"./app-runtime-xD2Z3NdN.js";import{g as Vs}from"./index-IPREDbCv.js";import{g as ps,r as fd}from"./supabaseAuthAdapter-C3z334Qw.js";import{c as Sm,a as wm,r as cl}from"./toolHandoff-D5e5f7t5.js";import{a as ul,s as vm}from"./executionModeSettings-NJqurj-o.js";import{a as ml,p as jm}from"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";import{A as _t,W as Im,c as bd,D as Nm,E as Fr,R as an,J as zr,X as gt,N as br,O as Am,Q as nn,w as on,I as sn,V as rn,l as os,F as ht,Y as Mm,Z as yr,_ as ss,$ as ln,a0 as yd,a1 as Tm,a2 as xd,a3 as Rm,i as ao,a4 as Cd,a5 as Lm,a6 as pl,a7 as Em,a8 as Jt,a9 as gl,T as rs,aa as hl,ab as ro,ac as Pm,ad as Jo,ae as kd,af as xr,ag as _m,ah as Dm,f as Bm,ai as Om,h as eo,x as $m,aj as Fm,ak as zm,al as fl,am as bl,an as yl,g as xl,ao as Fo,H as Vn,ap as zo,s as Ks,aq as Cl,ar as Um,as as Ys,at as kl,au as Uo,av as Gs,aw as Sl,ax as wl,ay as vl,az as Wm,aA as Hm,aB as Vm,aC as Km,n as Ym,o as Kn,aD as Gm,aE as Xm,aF as qm,aG as Jm,aH as Zm,aI as Qm,aJ as ep,aK as tp}from"./vendor-icons-Ckw7YAP6.js";const ap=1200,Ca="LocalBridgeOriginalNodeId";function ft(e){return typeof e=="object"&&e!==null}function Xt(e,t){const o=Number(e);return Number.isFinite(o)?o:t}function H(e){return typeof e=="string"?e:""}function Sd(){return typeof window<"u"?{width:window.innerWidth||1280,height:window.innerHeight||720}:{width:1280,height:720}}function Cr(e,t,o){const r=Number(e),d=Number(t),p=Number(o);if(!Number.isFinite(r)||!Number.isFinite(d)||!Number.isFinite(p)||p<=0)return null;const m=1400/p,b=Sd();return{x:b.width/2-r*m,y:b.height/2-d*m,scale:m}}function np(e){return ft(e)?Cr(e.x??e.X,e.y??e.Y,e.z??e.Z):null}function op(e){if(!ft(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=Sd();return{x:(d.width/2-t)/r,y:(d.height/2-o)/r,z:1400/r}}function sp(e){const t=String(e||"").trim();if(t)try{const o=JSON.parse(t);if(!ft(o))return;const r={};for(const[d,p]of Object.entries(o)){const m=np(p);m&&(r[d]=m)}return Object.keys(r).length>0?r:void 0}catch{return}}function rp(e){if(!e||Object.keys(e).length===0)return null;const t={};for(const[o,r]of Object.entries(e)){const d=op(r);d&&(t[o]=d)}return Object.keys(t).length>0?JSON.stringify(t):null}function is(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 gs(){return crypto.randomUUID()}function Ur(e){return ft(e)?"ContentType"in e||"Prompt"in e||"Response"in e||"PositionX"in e||"PositionY"in e||"SourceFilePath"in e||"ImageStack"in e:!1}function jl(e){const t=H(e).trim();if(!t)return null;try{return JSON.parse(t)}catch{return null}}function kr(e){if(Array.isArray(e))return e;if(!ft(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=jl(o);if(r)return kr(r)}for(const t of["ContentJson","contentJson","content_json"])if(t in e){const o=jl(e[t]);if(o)return kr(o)}return Ur(e)?[e]:[]}function Wr(e){return ft(e)?"BoardId"in e&&("Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e):!1}function wd(e){if(!ft(e))return 0;for(const t of["Deletes","deletes"]){const o=e[t];if(Array.isArray(o))return o.length}return 0}function ls(e){return kr(e).filter(Ur)}function vd(e){return ls(e).length}function ip(e,t){var p;const o=[...ls(e)];if(!Wr(t))return o;const r=new Set;for(const m of["Deletes","deletes"]){const b=t[m];if(Array.isArray(b))for(const c of b){const y=H(c).trim();y&&r.add(y)}}if(r.size>0)for(let m=o.length-1;m>=0;m-=1){const b=H((p=o[m])==null?void 0:p.Id).trim();b&&r.has(b)&&o.splice(m,1)}const d=new Map;o.forEach((m,b)=>{const c=H(m.Id).trim();c&&d.set(c,b)});for(const m of ls(t)){const b=H(m.Id).trim(),c=b?d.get(b):void 0;if(c!==void 0){o[c]=m;continue}b&&d.set(b,o.length),o.push(m)}return o}function jd(e){const t=Array.isArray(e)?e.filter(ft):[];return new Map(t.filter(o=>o.NodeId).map(o=>[String(o.NodeId),o]))}async function Sr(e,t){for(const o of e)try{const r=await Or(o,t);return{payload:JSON.parse(r.content),path:o}}catch{}return null}async function lp(e,t){const o=`.mindexec/boards/${e}.msgpack`,r=`boards/${e}.msgpack`;for(const b of[o,r])try{const c=await Gu(b,t);return{payload:km(c),format:b===o?"msgpack":"legacy-msgpack",path:b}}catch{}const d=`.mindexec/boards/${e}.json`,p=`boards/${e}.json`,m=await Sr([d,p],t);if(m)return{payload:m.payload,format:m.path===d?"json":"legacy-json",path:m.path};throw new Error(`LocalBridge board file not found: ${o}, ${r}, ${d}, ${p}`)}function wr(e){const t=H(e.Id).trim()||H(e.BoardId).trim();return t?{Id:t,Title:H(e.Title)||null,Description:H(e.Description)||null,ThumbnailUrl:H(e.ThumbnailUrl)||null,CreatedAt:H(e.CreatedAt)||null,UpdatedAt:H(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:H(e.CameraBookmarks)||null}:null}function Il(e){return!ft(e)||Ur(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 Hr(e){if(Array.isArray(e))return e.filter(Il).map(t=>wr(t)).filter(t=>!!t);if(Il(e)){const t=wr(e);return t?[t]:[]}return[]}function dp(e){const t=e.toLowerCase();return cp(t)?"remote-control":up(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 cp(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 up(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 mp(e,t){const o=e.Metadata||{},r=o.ThumbnailUrl,d=o.OriginalUrl,p=o.OriginalPath;return $r(H(r)||H(d)||H(p)||H(e.Response),t)}function pp(e,t,o){const r=e.ImageStack,d=Array.isArray(r==null?void 0:r.Variants)?r.Variants:[];if(d.length===0)return;const p=d.map((b,c)=>{const y=H(b.AssetId).trim(),v=$r(y,o)||t;return v?{variantId:H(b.VariantId)||`variant-${H(e.Id)||c}`,imageUrl:v,assetId:y||void 0,caption:H(b.Caption)||void 0,sourceNodeId:H(e.Id)||void 0,createdAtUtc:H(b.CreatedAtUtc)||void 0}:null}).filter(b=>!!b);if(p.length===0)return;const m=H(r==null?void 0:r.ActiveVariantId);return{activeVariantId:p.some(b=>b.variantId===m)?m:p[0].variantId,variants:p,kind:H(r==null?void 0:r.Kind)||"versions",title:H(r==null?void 0:r.Title)||void 0,updatedAtUtc:H(r==null?void 0:r.UpdatedAtUtc)||void 0}}function gp(e,t){return!e||e.variants.length===0?t:(e.variants.find(r=>r.variantId===e.activeVariantId)??e.variants[0]).imageUrl||t}function hp(e,t,o){var m,b,c,y,v,R;const r=(b=(m=e.imageStack)==null?void 0:m.variants)!=null&&b.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||gs(),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:((y=e.imageStack)==null?void 0:y.kind)||(d.length>1?"pile":"versions"),Title:((v=e.imageStack)==null?void 0:v.title)||e.title||null,UpdatedAtUtc:((R=e.imageStack)==null?void 0:R.updatedAtUtc)||o}}function fp(e,t){const o=e.Metadata||{};return $r(H(o.OriginalUrl)||H(o.OriginalPath)||H(o.SourceFilePath)||H(e.SourceFilePath)||H(e.Response),t)}function bp(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 yp(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 xp(e,t){const o=new Map;for(const r of e){const d=t.get(r.from),p=t.get(r.to);!d||!p||o.has(p)||o.set(p,d)}return o}function Cp(e){const t=new Set;return e.map(o=>{var c,y;const r=((c=o.metadata)==null?void 0:c[Ca])||"",d=is(r)?r:is(o.id)?o.id:"",p=!!(d&&t.has(d)),m=d&&!p?d:gs(),b=((y=o.metadata)==null?void 0:y[Ca])!==m;return t.add(m),{node:b?{...o,metadata:{...o.metadata??{},[Ca]:m}}:o,originalId:m,assignedNodeId:!d||p,metadataStamped:b,duplicateOriginalId:p}})}function kp(e,t,o,r,d){var y,v,R;const p=yp(e.kind),m=p==="image"||p==="mask"?io(e.imageUrl,d):"",b=["video","pdf","file","directory","embed"].includes(p)?io(e.assetUrl||e.sourceFilePath||e.body,d):"",c={...e.metadata??{},[Ca]: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=(y=e.assetUrl)!=null&&y.startsWith(d)?"local_bridge":"local_reference"),c.AdapterState??(c.AdapterState=((v=e.metadata)==null?void 0:v.PromptOnly)==="true"?"adapter-gated":"local-reference")),(R=e.tags)!=null&&R.length&&(c.ReactTags=JSON.stringify(e.tags)),m&&(c.OriginalUrl=m,c.ThumbnailUrl=m),b&&(c.OriginalPath=b,c.SourceFilePath=b),{Id:t,ContentType:p,Prompt:e.title||p,Response:p==="image"||p==="mask"?m||e.body||null:p==="remote-monitor"?e.body||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":p==="remote-control"?e.body||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":b||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||b||null,ScrollOffset:e.scrollOffset??0,MaxScroll:e.maxScroll??0,CreatedAt:r,UpdatedAt:r,IsWordWrap:e.wordWrap??e.kind!=="code",Metadata:c,ImageStack:p==="image"?hp(e,d,r):null}}function Sp(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 wp(e,t,o){const r=H(e.ContentType)||"note",d=H(e.Prompt).trim(),p=H(e.Response).trim(),m=bp(e.Metadata),b=H(e.Id).trim();b&&(m[Ca]??(m[Ca]=b));const y=["true","1","yes"].includes(String(m.ImageRouterMask||m.IsMask||"").trim().toLowerCase())?"mask":dp(r),v=y==="memo"&&["mindcanvasagent","agentcommand"].includes(String(m.SemanticType||m.semanticType||"").trim().toLowerCase()),R=y==="memo"&&["codenote","code-note"].includes(String(m.SemanticType||m.semanticType||"").trim().toLowerCase()),j=H(e.SourceFilePath)||m.OriginalPath||m.SourceFilePath||"",P=y==="video"||y==="pdf"||y==="file"||y==="directory"||y==="embed"?fp(e,o):void 0,V=d||e.SourceFilePath||r||"LocalBridge node",F=y==="image"?p||d||"Image asset":y==="mask"?p||d||"Image mask asset":y==="remote-monitor"?p||d||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":y==="remote-control"?p||d||j||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":y==="pdf"||y==="file"||y==="directory"||y==="embed"?p||j||d||r:p||d||j||"",B=v?500:R?400:y==="remote-monitor"?860:y==="remote-control"||y==="template-launcher"?560:y==="csv-table"?720:y==="embed"?460:y==="video"?420:y==="markdown"?380:y==="text"||y==="image"||y==="mask"?360:320,J=v||R?300:y==="remote-monitor"?640:y==="remote-control"?390:y==="template-launcher"?620:y==="csv-table"?420:y==="embed"?260:y==="video"?236:y==="markdown"?240:y==="text"?210:y==="image"||y==="mask"?260:180,ne=y==="image"||y==="mask"?mp(e,o):void 0,ge=y==="image"?pp(e,ne,o):void 0,xe=!!(e.IsChunkedText||m.IsChunkedText==="true"),je=Xt(e.TotalLineCount??m.TotalLineCount,0),he=Xt(e.ScrollOffset,0),Ge=Xt(e.MaxScroll,0);return{id:String(e.Id||crypto.randomUUID()),kind:y,title:y==="remote-monitor"?d||"Multi Desktop Monitor":y==="remote-control"?d||m.RemoteFleetDeviceName||"Remote Device":y==="template-launcher"?d||"Template Launcher":V,body:F,x:Xt((t==null?void 0:t.PositionX)??e.PositionX,0),y:Xt((t==null?void 0:t.PositionY)??e.PositionY,0),width:Math.max(160,Math.min(900,Xt((t==null?void 0:t.Width)??e.Width,B))),height:Math.max(120,Math.min(900,Xt((t==null?void 0:t.Height)??e.Height,J))),status:e.IsLoading?"running":y==="ai-task"?"idle":void 0,imageUrl:gp(ge,ne),imageStack:ge,assetUrl:P,sourceFilePath:j||void 0,isChunkedText:xe||void 0,totalLineCount:xe?je:void 0,scrollOffset:xe?he:void 0,maxScroll:xe?Ge:void 0,isExpanded:typeof e.IsExpanded=="boolean"?e.IsExpanded:void 0,originalHeight:Xt(e.OriginalHeight,0)||void 0,tags:v?["Agent Command",m.AgentCommandRequestedRole||"Researcher",m.AgentCommandStatus||"Draft"]:R?["Code Note",m.CodeNoteStatus||"Draft",m.CodeNoteSyncState||"Unlinked"]:y==="remote-monitor"?["Remote","Monitor","LocalBridge"]:y==="remote-control"?["Remote","Control","LocalBridge"]:["LocalBridge",r],metadata:y==="remote-monitor"?vp(m):y==="remote-control"?jp(m):m,role:e.IsAiEnabled?"ai-enabled":void 0,aiEnabled:typeof e.IsAiEnabled=="boolean"?e.IsAiEnabled:void 0,wordWrap:typeof e.IsWordWrap=="boolean"?e.IsWordWrap:void 0}}function vp(e){return{RemoteHub:"Gated",RemoteRoute:"Gated",RemoteConnected:"0",RemoteTotal:"30",RemotePage:"1/1",AdapterState:"adapter-gated",...e}}function jp(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 Ip(e,t){const o=[];for(const r of e){const d=String(r.Id||""),p=String(r.ParentId||"");!d||!p||!t.has(d)||!t.has(p)||o.push({id:`edge-local-${p}-${d}`,from:p,to:d,kind:"context"})}return o}async function Np(e=ms()){const t=await Or(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return(Array.isArray(o)?o.filter(ft):[]).map(p=>wr(p)).filter(p=>!!p).sort((p,m)=>String(m.UpdatedAt||"").localeCompare(String(p.UpdatedAt||"")))}async function Ap(e){try{const t=await Or(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return Array.isArray(o)?o.filter(ft):[]}catch{return[]}}async function Mp(e,t,o,r=ms()){var Q,bt,O,lt;if((Q=e.source)!=null&&Q.partialImport)throw new Error("This board was imported from a partial original payload. Export is blocked to avoid data loss.");if((bt=e.source)!=null&&bt.truncated)throw new Error("This board was truncated during import. Export is blocked to avoid data loss.");const d=(O=e.source)!=null&&O.exportedByReact?String(e.source.boardId||""):"",p=is(d),m=is(d)?d:gs(),b=new Date().toISOString(),c=Cp(e.nodes),y=c.map(U=>U.node),v=new Map(c.map(U=>[U.node.id,U.originalId])),R=xp(e.edges,v),j=c.map(({node:U,originalId:oe})=>kp(U,oe,R.get(oe),b,r)),P=c.map(({node:U,originalId:oe})=>Sp(U,oe)),V=t.scale>0?t.scale:1,F=(window.innerWidth/2-t.x)/V,B=(window.innerHeight/2-t.y)/V,J=1400/V,ne=(lt=e.nodes.find(U=>U.kind==="image"&&U.imageUrl))==null?void 0:lt.imageUrl,ge={Id:m,UserId:"00000000-0000-0000-0000-000000000000",Title:e.name||"Untitled Board",Description:"Exported from MindExec React",ThumbnailUrl:io(ne,r)||"",IsPublic:!1,CreatedAt:b,SyncedCloudBoardId:null,LastSyncedAt:null,LastCloudCopyStatus:null,UpdatedAt:b,LastCameraX:F,LastCameraY:B,LastCameraZ:J,LastCursorX:0,LastCursorY:0,CameraBookmarks:rp(e.settings.cameraBookmarks)},xe=`.mindexec/boards/${m}.msgpack`,je=`.mindexec/boards/${m}.json`,he=`.mindexec/boards/${m}.layout.json`,Ge=`.mindexec/boards/${m}.delta.json`,rt=`boards/${m}.delta.json`,it=await Ap(r),me=[ge,...it.filter(U=>H(U.Id)!==m)],X=Cm(j);await Yu(xe,X,o,r),await zs(je,JSON.stringify(j,null,2),o,r),await zs(he,JSON.stringify(P,null,2),o,r),await zs(".mindexec/boards/_metadata.json",JSON.stringify(me,null,2),o,r);const re=await Promise.allSettled([nl(Ge,o,r),nl(rt,o,r)]);return f.emit("localBridge.board.exported",{boardId:m,nodes:j.length,edges:e.edges.length,snapshotFormat:"msgpack",msgpackBytes:X.byteLength,jsonMirror:!0,deltaCleared:re.some(U=>U.status==="fulfilled"&&U.value.success),reusedBoardId:p,stableNodeIds:c.length,assignedNodeIds:c.filter(U=>U.assignedNodeId).length,metadataStampedNodeIds:c.filter(U=>U.metadataStamped).length,duplicateOriginalNodeIds:c.filter(U=>U.duplicateOriginalId).length}),{metadata:ge,source:{kind:"localBridge",boardId:m,loadedAt:b,originalNodeCount:j.length,renderedNodeCount:j.length,truncated:!1,exportedByReact:!0,snapshotFormat:"msgpack"},nodes:y,msgpackPath:xe,boardPath:je,layoutPath:he}}async function Tp(e,t,o=ms()){const r=await lp(e.Id,o);let d=new Map;const p=await Sr([`.mindexec/boards/${e.Id}.layout.json`,`boards/${e.Id}.layout.json`],o);p&&(d=jd(p.payload));let m=null;const b=await Sr([`.mindexec/boards/${e.Id}.delta.json`,`boards/${e.Id}.delta.json`],o);b&&(m=b.payload);const c=m?Hr(m)[0]:null,y=!!(m&&Wr(m)),v=y?ip(r.payload,m):r.payload;return Id(v,t,{boardId:(c==null?void 0:c.Id)??e.Id,title:(c==null?void 0:c.Title)||e.Title||"LocalBridge Board",updatedAt:(c==null?void 0:c.UpdatedAt)??e.UpdatedAt,layoutPayload:Array.from(d.values()),baseUrl:o,cameraBookmarks:(c==null?void 0:c.CameraBookmarks)??e.CameraBookmarks,deltaApplied:y,deltaUpserts:m?vd(m):0,deltaDeletes:m?wd(m):0,snapshotFormat:r.format})}function Id(e,t,o={}){const r=ls(e),d=Wr(e),p=o.deltaUpserts??(d?r.length:0),m=o.deltaDeletes??(d?wd(e):0),b=o.layoutPayload?jd(o.layoutPayload):new Map,c=r.slice(0,ap),y=c.map(J=>wp(J,b.get(String(J.Id||"")),o.baseUrl??ms())),v=new Set(y.map(J=>J.id)),R=Ip(c,v),j=r.length>y.length,P=d,V=o.deltaApplied===!0,F=o.boardId||gs(),B=o.updatedAt||new Date().toISOString();return f.emit("localBridge.board.loaded",{boardId:F,nodes:y.length,originalNodes:r.length,truncated:j,snapshotFormat:o.snapshotFormat,partialImport:P,deltaImport:d,deltaApplied:V,deltaUpserts:p,deltaDeletes:m}),{id:`localBridge:${F}`,name:o.title||"LocalBridge Board",nodes:y,edges:R,settings:{...t,cameraBookmarks:sp(o.cameraBookmarks)},updatedAt:B,source:{kind:"localBridge",boardId:F,loadedAt:new Date().toISOString(),snapshotFormat:o.snapshotFormat,originalNodeCount:r.length,renderedNodeCount:y.length,truncated:j,partialImport:P,deltaImport:d,deltaApplied:V}}}const Vr=["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(","),Rp=/^[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 Lp(e){if(Rp.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 Nd(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 Ep(e){return JSON.stringify({id:e.id,name:e.name,nodes:e.nodes,edges:e.edges,settings:e.settings,updatedAt:e.updatedAt})}function vr(e,t=new Date().toISOString()){return e&&!Number.isNaN(Date.parse(e))?e:t}function Kr(e){return(e==null?void 0:e.trim().slice(0,90))||"Untitled Board"}function Ad(e){const t=Nd(e.content_json),o=vr(e.updated_at??t.updatedAt);return{id:e.id,name:Kr(e.title??t.name),updatedAt:o,createdAt:vr(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 Pp(e,t){const o=Nd(e.content_json),r=vr(e.updated_at??o.updatedAt);return{id:e.id,name:Kr(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 Yr(e){var c;const t=fd(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=ps(e);if(!o)return f.emit("projectStorage.cloud.provider.skipped",{mode:"config-missing"}),{userId:null,config:t,reason:"missing-client"};const{data:r,error:d}=await o.auth.getSession();if(d||!r.session)return f.emit("projectStorage.cloud.provider.sessionMissing",{message:(d==null?void 0:d.message)??"missing-session"}),{userId:null,config:t,reason:"missing-session"};const{data:p,error:m}=await o.auth.getUser(),b=((c=p.user)==null?void 0:c.id)??null;return m||!b?(f.emit("projectStorage.cloud.provider.sessionMissing",{message:(m==null?void 0:m.message)??"missing-user"}),{userId:null,config:t,reason:"missing-user"}):{userId:b,config:t,reason:"provider-ready"}}async function _p(e){const t=await Yr(e);if(!t.userId)return[];const o=ps(e);if(!o)return[];f.emit("projectStorage.cloud.list.requested");const{data:r,error:d}=await o.from("boards").select(Vr).eq("user_id",t.userId).order("updated_at",{ascending:!1}).limit(50);if(d)throw f.emit("projectStorage.cloud.provider.failed",{operation:"list",message:d.message}),d;const p=(r??[]).map(Ad);return f.emit("projectStorage.cloud.list.loaded",{count:p.length}),p}async function Dp(e,t,o){const r=await Yr(e);if(!r.userId)return null;const d=ps(e);if(!d)return null;f.emit("projectStorage.cloud.load.requested",{boardId:t});const{data:p,error:m}=await d.from("boards").select(Vr).eq("user_id",r.userId).eq("id",t).maybeSingle();if(m)throw f.emit("projectStorage.cloud.provider.failed",{operation:"load",boardId:t,message:m.message}),m;if(!p)return null;const b=Pp(p,o);return f.emit("projectStorage.cloud.load.loaded",{boardId:t,nodes:b.nodes.length,edges:b.edges.length}),b}async function Bp(e,t,o){const r=await Yr(e);if(!r.userId)return null;const d=ps(e);if(!d)return null;const p=Lp(t.id),m=new Date().toISOString(),b=Kr(t.name),c={...t,id:p,name:b,updatedAt:m},y={p_board_id:p,p_title:b,p_description:null,p_thumbnail_url:null,p_is_public:!1,p_created_at:null,p_updated_at:m,p_last_camera_x:o.x,p_last_camera_y:o.y,p_last_camera_z:o.scale,p_last_cursor_x:0,p_last_cursor_y:0,p_camera_bookmarks:JSON.stringify(t.settings.cameraBookmarks??{}),p_nodes:[],p_include_json_mirror:!0};f.emit("projectStorage.cloud.save.requested",{boardId:p,sourceBoardId:t.id,nodes:t.nodes.length,edges:t.edges.length});const{error:v}=await d.rpc("save_board_snapshot",y);if(v)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-rpc",boardId:p,message:v.message}),v;const R={content_json:Ep(c),updated_at:m},{data:j,error:P}=await d.from("boards").update(R).eq("id",p).eq("user_id",r.userId).select(Vr).maybeSingle();if(P)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-json-mirror",boardId:p,message:P.message}),P;const V=j?Ad(j):{id:p,name:b,updatedAt:m,createdAt:m,nodeCount:t.nodes.length,edgeCount:t.edges.length,sourceKind:"cloud"};return f.emit("projectStorage.cloud.save.saved",{boardId:V.id,nodes:V.nodeCount,edges:V.edgeCount}),V}function jr(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 Op(e,t={},o=jr(e),r){if(e.length===0)return{after:new Map,boundsAfter:o};const d=tg(t.mode),p=ag(t.order),m=ng(t.anchor),b=og(t.sizeMode),c=Math.max(0,t.gapX??24),y=Math.max(0,t.gapY??24),v=Math.max(1,t.maxColumns??12),R=Ir(t.quantile??.75,.05,.95),j=e.map($p),P=qp(j,p),V=P.map(he=>he.width),F=P.map(he=>he.height),B=Math.max(1,t.cellWidth??Al(V,R)),J=Math.max(1,t.cellHeight??Al(F,R)),ne=Math.max(1,t.targetWidth??B),ge=Math.max(1,t.targetHeight??J),xe=Xp(m,o);if(d==="grid"){Vp(P,b,ne,ge,B,J);const he=Nl(t.columns,v,o.maxX-o.minX,B,c);zp(P,xe.x,xe.y,he,B,J,c,y)}else if(d==="masonry"){Kp(P,b==="preserve"?"uniformWidth":b,ne);const Ge=Nl(t.columns,v,o.maxX-o.minX,ne,c);Up(P,xe.x,xe.y,Ge,ne,c,y)}else d==="stripHorizontal"?(Yp(P,b==="preserve"?"uniformHeight":b,ge),Wp(P,xe.x,xe.y,c,ge)):(Gp(P,b==="preserve"?"uniformWidth":b,ne),Hp(P,xe.x,xe.y,y,ne));let je=new Map(P.map(he=>[he.id,Fp(he)]));return m==="selectionBoundsCenter"&&(je=Zp(o,je)),t.snapToGrid&&(je=Qp(je,Math.max(1,t.gridSize??8))),{after:je,boundsAfter:jr(Array.from(je.values()))}}function $p(e){return{...e,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function Fp(e){return{x:e.x,y:e.y,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function zp(e,t,o,r,d,p,m,b){e.forEach((c,y)=>{const v=Math.floor(y/r),R=y%r,j=t+R*(d+m),P=o+v*(p+b);c.x=j+(d-c.width)/2,c.y=P+(p-c.height)/2})}function Up(e,t,o,r,d,p,m){const b=Array.from({length:r},()=>0);for(const c of e){const y=eg(b),v=t+y*(d+p);c.x=v+(d-c.width)/2,c.y=o+b[y],b[y]+=c.height+m}}function Wp(e,t,o,r,d){let p=t;for(const m of e)m.x=p,m.y=o+(d-m.height)/2,p+=m.width+r}function Hp(e,t,o,r,d){let p=o;for(const m of e)m.x=t+(d-m.width)/2,m.y=p,p+=m.height+r}function Vp(e,t,o,r,d,p){if(t==="fitCellDownOnly")for(const m of e){const b=Math.min(1,d/m.width,p/m.height);m.width*=b,m.height*=b}else t==="uniformWidth"?Gr(e,o):t==="uniformHeight"&&Md(e,r)}function Kp(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}Gr(e,o)}function Yp(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}Md(e,o)}function Gp(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}Gr(e,o)}function Gr(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 Md(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 Nl(e,t,o,r,d){if(typeof e=="number"&&e>0)return Math.round(Ir(e,1,t));if(o<=1||r<=1)return 1;const p=Math.floor((o+d)/(r+d));return!Number.isFinite(p)||p<1?1:Math.round(Ir(p,1,t))}function Xp(e,t,o){return{x:t.minX,y:t.minY}}function qp(e,t){return t==="selectionOrder"?[...e].sort((o,r)=>o.selectionIndex-r.selectionIndex):Jp(e)}function Jp(e){const t=[...e].sort((c,y)=>c.y-y.y||c.x-y.x);if(t.length<=2)return t;const o=t.map(c=>c.height).sort((c,y)=>c-y),r=o[Math.floor(o.length/2)]??1,d=Math.max(16,r*.35),p=[];let m=[],b=Number.NaN;for(const c of t)m.length===0?(m=[c],b=c.y):Math.abs(c.y-b)<=d?(m.push(c),b=(b*(m.length-1)+c.y)/m.length):(p.push([...m].sort((y,v)=>y.x-v.x)),m=[c],b=c.y);return m.length>0&&p.push([...m].sort((c,y)=>c.x-y.x)),p.flat()}function Zp(e,t){if(t.size===0)return t;const o=jr(Array.from(t.values())),r=e.minX+(e.maxX-e.minX)/2,d=e.minY+(e.maxY-e.minY)/2,p=o.minX+(o.maxX-o.minX)/2,m=o.minY+(o.maxY-o.minY)/2,b=r-p,c=d-m;return new Map(Array.from(t.entries()).map(([y,v])=>[y,{...v,x:v.x+b,y:v.y+c}]))}function Qp(e,t){return new Map(Array.from(e.entries()).map(([o,r])=>[o,{...r,x:Ml(r.x,t),y:Ml(r.y,t)}]))}function Al(e,t){if(e.length===0)return 1;const o=[...e].sort((b,c)=>b-c),r=(o.length-1)*t,d=Math.floor(r),p=Math.min(o.length-1,d+1),m=r-d;return o[d]*(1-m)+o[p]*m}function eg(e){let t=0;for(let o=1;o<e.length;o+=1)e[o]<e[t]&&(t=o);return t}function Ml(e,t){return Math.round(e/t)*t}function tg(e){const t=hs(e);return t==="grid"?"grid":t==="striphorizontal"||t==="striph"?"stripHorizontal":t==="stripvertical"||t==="stripv"?"stripVertical":"masonry"}function ag(e){return hs(e)==="selectionorder"?"selectionOrder":"spatialReading"}function ng(e){const t=hs(e);return t==="selectionboundscenter"?"selectionBoundsCenter":t==="viewporttopleft"?"viewportTopLeft":"selectionBoundsTopLeft"}function og(e){const t=hs(e);return t==="fitcelldownonly"?"fitCellDownOnly":t==="uniformwidth"?"uniformWidth":t==="uniformheight"?"uniformHeight":"preserve"}function hs(e){return String(e??"").trim().toLowerCase().replace(/[^a-z0-9]/g,"")}function Ir(e,t,o){return Math.min(o,Math.max(t,e))}const Td=300,Rd=50*1024*1024,sg=800;function Se(e){return typeof e=="string"?e.length*2:0}function rg(e){let t=256;if(t+=Se(e.id),t+=Se(e.kind),t+=Se(e.title),t+=Se(e.body),t+=Se(e.result),t+=Se(e.imageUrl),t+=Se(e.assetUrl),t+=Se(e.sourceFilePath),t+=(e.tags??[]).reduce((o,r)=>o+Se(r),0),e.metadata)for(const[o,r]of Object.entries(e.metadata))t+=Se(o)+Se(r);return e.imageStack&&(t+=128+Se(e.imageStack.title),t+=e.imageStack.variants.reduce((o,r)=>o+96+Se(r.variantId)+Se(r.imageUrl)+Se(r.assetId)+Se(r.title)+Se(r.caption),0)),t}function ig(e){let t=1024+Se(e.id)+Se(e.name)+Se(e.updatedAt);return t+=e.nodes.reduce((o,r)=>o+rg(r),0),t+=e.edges.length*128,t+=Object.entries(e.settings).reduce((o,[r,d])=>o+Se(r)+Se(typeof d=="string"?d:JSON.stringify(d)),0),t}function Ld(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:ig(e)}}function Tl(e,t={}){const o=t.maxEntries??Td,r=t.maxBytes??Rd;let d=e.slice(Math.max(0,e.length-o)),p=d.reduce((m,b)=>m+b.estimatedBytes,0);for(;d.length>1&&p>r;){const[m,...b]=d;p-=(m==null?void 0:m.estimatedBytes)??0,d=b}return d}function fa(e,t,o={}){const r=Ld(t,o),d=o.mergeWindowMs??sg,p=e.slice(),m=p.at(-1);return m&&r.mergeKey&&m.mergeKey===r.mergeKey&&r.timestampMs-m.timestampMs<d?(p[p.length-1]={...m,description:r.description,timestampMs:r.timestampMs,estimatedBytes:Math.max(m.estimatedBytes,r.estimatedBytes)},Tl(p,o)):(p.push(r),Tl(p,o))}function lg(e,t,o={}){const r=Ld(t,o),d=o.maxEntries??Td,p=o.maxBytes??Rd;let m=[r,...e].slice(0,d),b=m.reduce((c,y)=>c+y.estimatedBytes,0);for(;m.length>1&&b>p;){const c=m.at(-1);b-=(c==null?void 0:c.estimatedBytes)??0,m=m.slice(0,-1)}return m}function fs(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 Yn(e,t){return!!fs(e,t)}function Ed(e){if(!e||!e.trim())return!1;const t=e.trim();return/^(https?:|blob:|data:|file:)/i.test(t)}function Pd(e){if(!e)return"";const t=fs(e,"OriginalPath");if(t)return t;const o=String(e.body||"").trim();return Ed(o)?"":o}function _d(e){return e?Pd(e)||String(e.sourceFilePath||"").trim()||String(e.assetUrl||"").trim()||String(e.imageUrl||"").trim()||String(e.body||"").trim():""}function Dd(e){return fs(e,"ThumbnailUrl","thumbnailUrl")}function dg(e){if(!e||e.kind!=="image")return!1;if(Yn(e,"ImageGenerationProvider")||Yn(e,"GeneratedImageSourceWidth")||Yn(e,"GeneratedImageSourceHeight")||Yn(e,"CodexImageQuality")||Yn(e,"ImageRouterRevisedPrompt"))return!0;const t=fs(e,"RequestedMediaOperation");return["text2image","image2image","inpaint"].includes(t.toLowerCase())}function Xr(e){if(!e)return"";if(e.kind==="image"||e.kind==="mask"){const t=dg(e)?Pd(e):"",o=Dd(e),r=String(e.body||"").trim();return t||o||String(e.imageUrl||"").trim()||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()||(Ed(r)?r:"")}return _d(e)||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()}function Bd(e){if(!e)return"";const t=_d(e)||e.title||e.kind;return String(t||"").replace(/\\/g,"/").replace(/\/+$/,"").split("/").filter(Boolean).pop()||e.title||e.kind}const cg=2048,ug=16e3,Xs=1024,qs=64,mg=2048,Js=3,pg=16,gg=256,hg=new Set(["text","note","memo","markdown","code","directory"]),fg=/[\p{L}\p{M}\p{N}]{2,}/gu,Rl=4,bg=8,Ll=1.35;function yg(e){return hg.has(String(e||"").trim().toLowerCase())}function xg(e){const t=e.map(kg),o=new Map,r=new Map,d=new Map,p=new Map;for(const m of t){o.set(m.id,m);for(const b of m.tokens)Zs(r,b,m.id);for(const b of m.prefixes)Zs(d,b,m.id);for(const b of m.ngrams)Zs(p,b,m.id)}return{documents:t,documentById:o,tokenIndex:r,prefixIndex:d,ngramIndex:p}}function Cg(e,t,o={}){const r=Math.max(1,Math.trunc(Number(o.limit||30))),d=Qa(t),p=El(e,0,0,o.viewport,0);if(!d)return{hits:[],profile:p};const m=Array.from(Od(d)),b=Array.from($d(m)),c=zd(d),y=Array.from(Fd(c)),v=new Map;for(const F of m)Qs(e.tokenIndex,F,v,8);for(const F of b)Qs(e.prefixIndex,F,v,F.length<=3?4:2);for(const F of y)Qs(e.ngramIndex,F,v,1.15);const R=jg(e,v,r),j=Ig(o.allowedContentTypes),P=[];for(const F of R){const B=e.documentById.get(F);if(!B||j&&!j.has(B.contentType))continue;const J=wg(B,d,m,y);if(J<=0)continue;const ne=vg(B,o.viewport??null);P.push({nodeId:B.id,score:J+ne,textScore:J,viewportBoost:ne})}P.sort((F,B)=>B.score-F.score||F.nodeId.localeCompare(B.nodeId));const V=P.slice(0,r);return{hits:V,profile:El(e,R.length,V.length,o.viewport,V.filter(F=>F.viewportBoost>0).length)}}function Qa(e){const t=String(e??"");if(!t.trim())return"";let o=t;try{o=t.normalize("NFKC")}catch{o=t}o=o.toLowerCase();let r="",d=!1;for(const p of o){if(/\s/u.test(p)){d||(r+=" ",d=!0);continue}Ng(p)||(r+=p,d=!1)}return r.trim()}function Od(e){return new Set(e.match(fg)??[])}function $d(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 Fd(e){const t=new Set;if(!e.trim())return t;if(e.length<=Js)return t.add(e),t;for(let o=0;o<=e.length-Js;o+=1)t.add(e.slice(o,o+Js));return t}function kg(e){const t=String(e.kind??"").trim().toLowerCase(),o=ya(e.prompt??e.title,cg),r=yg(t)?ya(e.response??e.body,ug):"",d=Sg(e.metadata,e.tags,e.metadataText),p=ya(e.sourceFilePath||e.assetUrl,mg),m=Qa(o),b=Qa(r),c=Qa(d),y=Qa(p),v=Qa(t),R=[m,c,y,b,v].filter(Boolean).join(" "),j=Od(R);return{id:String(e.id),contentType:t,normalizedPrompt:m,normalizedResponse:b,normalizedMetadata:c,normalizedSourcePath:y,normalizedContentType:v,tokens:j,prefixes:$d(j),ngrams:Fd(zd(R)),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 Sg(e,t,o){const r=[];let d=0;if(e)for(const[p,m]of Object.entries(e)){if(d>=qs)break;!String(p??"").trim()&&!String(m??"").trim()||(r.push(ya(p,128)),String(m??"").trim()&&r.push(ya(m,Xs)),d+=1)}return d<qs&&(t!=null&&t.length)&&(r.push("tags",ya(t.join(" "),Xs)),d+=1),d<qs&&(o!=null&&o.trim())&&r.push("metadata",ya(o,Xs)),r.join(" ")}function wg(e,t,o,r){let d=0;e.normalizedPrompt===t?d+=120:Gn(e.normalizedPrompt,t)&&(d+=54),Gn(e.normalizedMetadata,t)&&(d+=26),Gn(e.normalizedSourcePath,t)&&(d+=18),Gn(e.normalizedResponse,t)&&(d+=14),Gn(e.normalizedContentType,t)&&(d+=8);for(const p of o)e.tokens.has(p)&&(d+=7),e.normalizedPrompt.startsWith(p)&&(d+=10);for(const p of r)e.ngrams.has(p)&&(d+=.85);return d}function vg(e,t){if(!t)return 0;const o=e.x+Math.max(1,e.width)/2,r=e.y+Math.max(1,e.height)/2,d=Math.abs(o-t.centerX)/Math.max(1,t.halfWidth),p=Math.abs(r-t.centerY)/Math.max(1,t.halfHeight),m=Math.sqrt(d*d+p*p);if(m<=1)return Rl+(1-m)*bg;if(m<=Ll){const b=1-(m-1)/Math.max(.001,Ll-1);return Math.max(0,b)*(Rl*.75)}return 0}function jg(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*pg,gg)).map(([r])=>r)}function Ig(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 El(e,t,o,r,d){return{documentCount:e.documents.length,candidateCount:t,rankedCount:o,viewportBoosted:!!r,boostedCount:d,indexedTokenCount:e.tokenIndex.size,indexedPrefixCount:e.prefixIndex.size,indexedNGramCount:e.ngramIndex.size}}function Zs(e,t,o){const r=e.get(t);if(r){r.add(o);return}e.set(t,new Set([o]))}function Qs(e,t,o,r){const d=e.get(t);if(d)for(const p of d)o.set(p,(o.get(p)??0)+r)}function zd(e){let t="";for(const o of e)/\s/u.test(o)||(t+=o);return t}function ya(e,t){const o=String(e??"");return o.length<=t?o:o.slice(0,t)}function Gn(e,t){return!!(e&&t&&e.includes(t))}function Ng(e){const t=e.codePointAt(0)??0;return t<=31||t>=127&&t<=159}const Ag=2147483647,Mg="LocalBridge access is enabled, but the bridge is not reachable. Restart LocalBridge, allow Chrome local-network access, then reload MindCanvas.",Tg="Local storage is unavailable in the hosted app until browser local storage or LocalBridge access is available.",Rg="Local storage is unavailable. Check the browser-local storage state or LocalBridge connection.",Lg="Cloud projects are unavailable until Supabase and Cloudflare R2 are configured.",Eg="Login is required before cloud projects can be used.",Pg="Cloud projects are unavailable.";function _g(e){return e.bridgeProviderConfigured||e.browserProviderConfigured||e.embeddedProviderConfigured}function Nr(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 Dg(e){return Nr(e,!1).isAvailable?"local":qr(e)?"cloud":Nr(e,!0).isAvailable?"local":e.cloudConfigured?"cloud":"local"}function qr(e){return e.cloudConfigured&&e.cloudSessionAvailable}function Bg(e,t){return t.providerKind==="bridge"&&!t.bridgeReachable?Mg:e.hostedWebApp?Tg:Rg}function Og(e){return e.cloudConfigured?qr(e)?Pg:Eg:Lg}function $g(e){var v,R,j;const t=qr(e),o=Nr(e,!0),r=_g(e),d=e.cloudConfigured,p=o.isAvailable,m=t;let b=e.storedMode??Dg(e);b==="cloud"&&(!d||!m&&p)?b=p?"local":"cloud":b==="local"&&(!r&&d||!p&&m)&&(b="cloud");const c=e.cloudAccess,y=((v=c==null?void 0:c.denialReason)==null?void 0:v.trim())||void 0;return{currentMode:b,showLocalTab:r,showCloudTab:d,isLocalAvailable:o.isAvailable,isCloudAvailable:t,requiresCloudSignIn:e.cloudConfigured&&!t,canUseLocalProjects:p,canBrowseLocalWorkspace:o.canBrowseWorkspace,localProviderKind:o.providerKind,canUseCloudProjects:m,canSyncLocalToCloud:p&&m,cloudPlanKey:((R=c==null?void 0:c.planKey)==null?void 0:R.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)??Ag,lockedCloudBoardCount:(c==null?void 0:c.lockedBoardCount)??0,canCreateCloudBoards:(c==null?void 0:c.canCreateBoard)??m,canUseManagedAi:(c==null?void 0:c.canUseManagedAi)??!1,canGenerateImage:(c==null?void 0:c.canGenerateImage)??!1,canUseContextPack:(c==null?void 0:c.canUseContextPack)??!1,cloudLimitMessage:y,localStatusMessage:o.isAvailable?void 0:Bg(e,o),cloudStatusMessage:m?void 0:Og(e)}}function Fg(){const e=new Error("Queued operation was cancelled before it started.");return e.name="AbortError",e}class zg{constructor(){tl(this,"tails",new Map)}isBusy(t){return this.tails.has(t)}enqueue(t,o,r){if(typeof o!="function")throw new TypeError("KeyedAsyncQueue operation is required.");const d=this.tails.get(t)??Promise.resolve();let p;return p=(async()=>{try{try{await d}catch{}if(r!=null&&r.aborted)throw Fg();return await o(r)}finally{this.tails.get(t)===p&&this.tails.delete(t)}})(),this.tails.set(t,p),p}clear(t){if(typeof t>"u"){this.tails.clear();return}this.tails.delete(t)}}const Ar="mindexec-local-mode-warning-dismissed-v1";function Ug(){try{return window.localStorage.getItem(Ar)==="true"}catch{return!1}}function Ud(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 Wg(e,t,o){var d,p,m,b,c;if(e!=="connected")return t||Ud(e,o);const r=[o!=null&&o.version?`version ${o.version}`:null,(d=o==null?void 0:o.exec)!=null&&d.model?`model ${o.exec.model}`:null,(p=o==null?void 0:o.exec)!=null&&p.reasoningEffort?`reasoning ${o.exec.reasoningEffort}`:null,(m=o==null?void 0:o.exec)!=null&&m.serviceTier?`tier ${o.exec.serviceTier}`:null,(b=o==null?void 0:o.exec)!=null&&b.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 Hg({state:e,message:t,status:o,hostedBridgeAccessEnabled:r,onRefresh:d,onEnableHostedBridge:p}){const m=g.useMemo(()=>e==="checking"?n.jsx(_t,{size:14,className:"spin-icon"}):e==="connected"?n.jsx(Im,{size:14}):e==="blocked"?n.jsx(bd,{size:14}):e==="unavailable"?n.jsx(Nm,{size:14}):n.jsx(Fr,{size:14}),[e]);return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--${e}`,title:Wg(e,t,o),"data-testid":"bridge-status-pill","data-bridge-state":e,"data-bridge-access":r?"enabled":"gated",children:[n.jsx("span",{className:"runtime-status-pill__icon","aria-hidden":"true",children:m}),n.jsx("span",{children:Ud(e,o)}),e==="blocked"&&!r&&n.jsx("button",{type:"button",className:"runtime-status-pill__action",onClick:p,children:"Enable"}),n.jsx("button",{type:"button",className:"runtime-status-pill__button",title:"Refresh LocalBridge","data-testid":"bridge-status-refresh",onClick:()=>void d(),disabled:e==="checking",children:n.jsx(an,{size:13})})]})}function Vg({status:e,message:t}){const r={ready:{icon:n.jsx(br,{size:14}),label:"Saved locally",title:"Board state is saved in this browser."},syncing:{icon:n.jsx(_t,{size:14,className:"spin-icon"}),label:"Saving",title:"Saving board state to this browser."},error:{icon:n.jsx(zr,{size:14}),label:"Save error",title:"Board state could not be saved locally."},offline:{icon:n.jsx(Fr,{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 Kg({visible:e}){const[t,o]=g.useState(Ug);if(!e||t)return null;const r=()=>{o(!0);try{window.localStorage.setItem(Ar,"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":Ar,children:[n.jsx("div",{className:"runtime-local-warning__icon","aria-hidden":"true",children:n.jsx(zr,{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(gt,{size:14})})]})}function Yg({bridgeState:e,bridgeMessage:t,bridgeStatus:o,syncStatus:r,syncMessage:d,hostedBridgeAccessEnabled:p,onRefreshBridge:m,onEnableHostedBridge:b,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(Hg,{state:e,message:t,status:o,hostedBridgeAccessEnabled:p,onRefresh:m,onEnableHostedBridge:b}),n.jsx(Vg,{status:r,message:d})]}),n.jsx(Kg,{visible:c})]})}const Gg=/^data:image\//i;function Xg(e){const t=String(e||"").trim();if(!t)return{src:null,reason:"empty",urlKind:"empty"};const o=t.toLowerCase();return Gg.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 er({src:e,alt:t="",className:o="",testId:r="secure-image",traceId:d,kind:p="image",title:m}){const b=g.useMemo(()=>Xg(e),[e]),[c,y]=g.useState(b.src?"loading":"blocked");g.useEffect(()=>{const P=b.src?"loading":"blocked";y(P),b.src||f.emit("secureImage.blocked",{id:d,kind:p,reason:b.reason,urlKind:b.urlKind})},[p,b.reason,b.src,b.urlKind,d]);const v=()=>{y("loaded"),f.emit("secureImage.loaded",{id:d,kind:p,urlKind:b.urlKind})},R=()=>{y("error"),f.emit("secureImage.error",{id:d,kind:p,urlKind:b.urlKind})},j=c==="blocked"?`Image blocked: ${b.reason||"unsupported source"}`:"Image failed to load";return n.jsxs("div",{className:`secure-image secure-image--${c} ${o}`.trim(),"data-testid":r,"data-secure-image-state":c,"data-secure-image-kind":p,title:c==="loaded"?m:j,children:[b.src&&n.jsx("img",{src:b.src,alt:t,loading:"lazy",decoding:"async",draggable:!1,onLoad:v,onError:R}),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(Am,{size:18}):n.jsx(zr,{size:18})})]})}const qg={note:ss,text:ht,"ai-task":nn,image:sn,mask:sn,video:rn,embed:ln,code:on,markdown:ht,"csv-table":ht,memo:ss,pdf:ht,file:yr,directory:Mm,"template-launcher":ht,"remote-monitor":os,"remote-control":os},tr=[{key:"Auto",label:"Auto Detect",description:"Infer whether this note is growth, revenue, build, or research work."},{key:"GeneralCompany",label:"General AI Company",description:"Balanced planning, practical work, and artifact production."},{key:"GrowthValidation",label:"Growth Validation",description:"Marketing loops, signals, messaging, distribution, and experiments."},{key:"RevenueAffiliate",label:"Revenue / Affiliate",description:"Affiliate discovery, keywords, content assets, and revenue experiments."},{key:"ProductBuild",label:"Product Build",description:"Specs, implementation-oriented work, artifacts, and approval gates."},{key:"ResearchOnly",label:"Research Only",description:"Evidence gathering, risks, synthesis, and recommendations."}],Pl=500,Jg=48,Zg=new Set(["mindcanvasagent","agentcommand"]),Qg=new Set(["codenote","code-note"]),eh=["multidesktopmonitor","remotehubmonitor","remotefleetmonitor","smartviewmonitor"],th=["remotedevice","remotefleetdevice","remotecontrol"];function ah(e){const t=dn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=dn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=dn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-monitor"||t==="remotefleetmonitor"||o==="fleet-monitor"||r==="remote-fleet@1"||Hd(e,["RemoteFleetViewMode","RemoteFleetHubStatus","RemoteFleetDevicesJson","RemoteFleetDeviceCount","RemoteFleetConnectedDeviceCount","RemoteFleetProjectionMode","RemoteFleetCanvasPagination","RemoteHub","RemoteRoute","RemotePage","RemoteVisibleBudget"])||Wd(e,eh,["remote","monitor"])}function nh(e){const t=dn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=dn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=dn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-control"||t==="remotefleetdevice"||o==="fleet-device"||r==="remote-fleet-device@1"||Hd(e,["RemoteFleetDeviceId","RemoteFleetDeviceName","RemoteFleetDevicePlatform","RemoteFleetDeviceConnected","RemoteFleetDeviceCanControl","RemoteFleetSourceMonitorNodeId"])||Wd(e,th,["remote","control"])}function Wd(e,t,o){const r=(e.tags??[]).map(b=>b.trim().toLowerCase()).filter(Boolean),d=o.every(b=>r.includes(b)),m=[e.title,e.body,e.sourceFilePath,e.assetUrl,...r].join(" ").toLowerCase().replace(/[^a-z0-9]+/g,"");return d||t.some(b=>m.includes(b))}function dn(e,...t){const o=e.metadata??{};for(const d of t){const p=o[d];if(p!=null)return String(p)}const r=new Set(t.map(d=>d.toLowerCase()));for(const[d,p]of Object.entries(o))if(r.has(d.toLowerCase())&&p!==void 0&&p!==null)return String(p);return""}function Hd(e,t){const o=e.metadata??{},r=new Set(t.map(d=>d.toLowerCase()));return Object.entries(o).some(([d,p])=>r.has(d.toLowerCase())&&p!==void 0&&p!==null&&String(p).trim()!=="")}const Mr=[{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"}],oh=g.memo(function({node:t,selected:o,pulsing:r,connectionDraft:d,onSelect:p,onDragStart:m,onResizeStart:b,onPatch:c,onDelete:y,onDuplicate:v,onRun:R,onPin:j,onOpenResult:P,onToggleAiReference:V,onCopyNode:F,onCopyEmbedReference:B,onFitNodeHeight:J,onToggleNodeExpanded:ne,onToggleWordWrap:ge,onStageCompany:xe,onOpenCompanyGraph:je,onSyncCompanyGoal:he,onRefreshCompany:Ge,onSetCompanyStatus:rt,onRemoveCompany:it,onOpenAsset:me,onOpenDirectorySettings:X,onScanDirectory:re,onCreateRemoteControl:Q,onGenerateTemplateCard:bt}){var nt,Mt,sa,Ea,Ut,Pa,ee,Ve,_a,vn,I,K,se,jn,Tt,Da,Ba,In,Nn,Oa,An,ra,Mn,$a,ia,Wt,Be,Ee,Fa,Tn,Rn,la,da,za,Ht;const O=String(((nt=t.metadata)==null?void 0:nt.AutomationNodeKind)||((Mt=t.metadata)==null?void 0:Mt.AutomationTemplateKey)||((sa=t.metadata)==null?void 0:sa.AutomationInferredKind)||"").trim().toLowerCase(),lt=String(((Ea=t.metadata)==null?void 0:Ea.SemanticType)||((Ut=t.metadata)==null?void 0:Ut.semanticType)||"").trim().toLowerCase(),U=t.kind==="memo"&&Zg.has(lt),oe=t.kind==="memo"&&Qg.has(lt),ka=String(((Pa=t.metadata)==null?void 0:Pa.AgentCommandStatus)||"Draft"),ye=String(((ee=t.metadata)==null?void 0:ee.AgentCommandMode)||"Task"),dt=String(((Ve=t.metadata)==null?void 0:Ve.AgentCommandRequestedRole)||"Researcher"),St=String(((_a=t.metadata)==null?void 0:_a.CodeNoteStatus)||"Draft"),Qt=String(((vn=t.metadata)==null?void 0:vn.CodeNoteSyncState)||"Unlinked"),ea=String(((I=t.metadata)==null?void 0:I.CodeNoteKind)||"Feature"),lo=U?nn:oe?on:O==="image-generate"?sn:O==="video-generate"?rn:qg[t.kind],ze=d&&d.from!==t.id,co=t.kind==="ai-task",Dt=t.kind==="pdf"||t.kind==="file"||t.kind==="directory",yt=ah(t),we=nh(t),te=yt||we,bs=yt?"monitor":we?"control":"",Te=t.kind==="template-launcher"||String(((K=t.metadata)==null?void 0:K.semanticType)||((se=t.metadata)==null?void 0:se.SemanticType)||"").toLowerCase()==="templatelauncher",Qe=t.kind==="video",ce=t.kind==="embed",Re=t.kind==="mask",Ue=t.kind==="memo",uo=t.kind==="markdown",fe=t.kind==="csv-table",Oe=Ue?ph(t):null,Bt=g.useRef(null),wt=Qe?Vd(t):"",Ne=Qe?hh(t):"",ct=ce?fh(t):"",$e=ce?bh(t):"",mo=ce?yh(t,ct):"",Sa=ce?xh(t):"",Ae=(((jn=t.imageStack)==null?void 0:jn.variants)??[]).filter(x=>!!x.imageUrl),We=Ae.find(x=>{var L;return x.variantId===((L=t.imageStack)==null?void 0:L.activeVariantId)})??Ae[0]??null,Ot=t.kind==="image"||Re?(We==null?void 0:We.imageUrl)||Xr(t):"",po=We?Ae.findIndex(x=>x.variantId===We.variantId):-1,wa=!Ot&&!Dt&&!te&&!Te&&!Qe&&!ce,go=wa&&!Ue,Xe=t.isExpanded===!1&&Number(t.originalHeight??0)>t.height+1,He=!te&&!["image","mask","video","embed","pdf","file","directory","template-launcher","remote-monitor","remote-control"].includes(t.kind),_e=t.aiEnabled!==!1,va=gh(t),ho=!!(t.isChunkedText||((Tt=t.metadata)==null?void 0:Tt.IsChunkedText)==="true"),be=Number(t.totalLineCount??((Da=t.metadata)==null?void 0:Da.TotalLineCount)??0),ja=t.sourceFilePath||((Ba=t.metadata)==null?void 0:Ba.FileName)||t.title,fo=ho?n.jsxs("div",{className:"node-chunked-text-state","data-testid":"node-chunked-text-state",title:ja,children:[n.jsx(ht,{size:12}),n.jsx("strong",{children:"Chunked text"}),Number.isFinite(be)&&be>0&&n.jsxs("span",{children:[be.toLocaleString()," lines"]})]}):null,pn=t.kind==="directory"?(In=t.metadata)==null?void 0:In.Include:null,Le=t.kind==="directory"?(Nn=t.metadata)==null?void 0:Nn.Exclude:null,xt=t.kind==="directory"?(Oa=t.metadata)==null?void 0:Oa.DirectoryFileCount:null,$t=t.kind==="directory"?(An=t.metadata)==null?void 0:An.DirectoryDirCount:null,Ia=t.kind==="directory"?(ra=t.metadata)==null?void 0:ra.DirectoryLastScanUtc:null,[bo,De]=g.useState(!1),[gn,hn]=g.useState(null),[fn,Na]=g.useState(((Mn=t.metadata)==null?void 0:Mn.CompanyExecutionMode)||"Auto"),[vt,bn]=g.useState((($a=t.metadata)==null?void 0:$a.CompanySubAgents)!=="false"),[yn,Ft]=g.useState(!1),[qe,xn]=g.useState(null),ta=g.useMemo(()=>fe?lh(t.body,qe):null,[qe,fe,t.body]),ie=g.useMemo(()=>Te?pd(t.body):null,[Te,t.body]),et=(ie==null?void 0:ie.options.find(x=>x.id===ie.selectedOptionId))??(ie==null?void 0:ie.options[0])??null,ut=Xu(ie),jt=tr.find(x=>x.key===fn)||tr[0],It=String(((ia=t.metadata)==null?void 0:ia.CompanyStatus)||(t.companyMode?"Staged":"")).trim(),Ct=It.toLowerCase(),ys=Ct==="paused",Cn=Ct==="archived",yo=x=>{x.stopPropagation();const L=x.currentTarget.getBoundingClientRect();hn(rh(L)),De(le=>!le)},aa=x=>{x.stopPropagation(),xe(t.id,{executionMode:jt.key,enableSubAgents:vt}),De(!1)},xs=x=>{x.stopPropagation(),je(t.id)},kn=(x,L)=>{L.stopPropagation();const le=Ae.find($=>$.variantId===x);!le||!t.imageStack||le.variantId===t.imageStack.activeVariantId||(f.emit("node.imageStack.variant",{nodeId:t.id,variantId:le.variantId,variantCount:Ae.length}),c(t.id,{imageUrl:le.imageUrl,imageStack:{...t.imageStack,activeVariantId:le.variantId,variants:Ae,updatedAtUtc:new Date().toISOString()},metadata:{...t.metadata??{},ImageStackActiveVariantId:le.variantId}}))},na=(x,L)=>{if(L.stopPropagation(),!!Ue){if((Oe==null?void 0:Oe.key)===x){Ft(!1);return}f.emit("node.memoColor.changed",{id:t.id,colorKey:x}),c(t.id,{metadata:{...t.metadata??{},memoColor:x,memoColorIsCustom:"true"}}),Ft(!1)}},Sn=x=>{var ca,Ua;if(x.stopPropagation(),!U)return;const L=(t.body||t.title||"Agent command objective").trim(),le=["Clarify the objective and constraints.","Collect linked canvas context or code notes.","Draft an execution plan before external adapter use."],$=["canvas-context","agent-command-planning","adapter-gated-execution"],Pe=["Canvas.ListAgentCommands","Canvas.UpdateAgentCommand","Canvas.PlanAgentCommand","Canvas.SetAgentCommandState"],Rt=["MindCanvasAgent",ye,dt],Fe=["Local React plan staged for this Agent Command.",`Role: ${dt}`,`Mode: ${ye}`,`Objective: ${L.slice(0,220)}`,"External execution remains adapter-gated until LocalBridge/agent runtime is available."].join(`
1
+ var $u=Object.defineProperty;var Fu=(e,t,o)=>t in e?$u(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var tl=(e,t,o)=>Fu(e,typeof t!="symbol"?t+"":t,o);import{j as n,r as g,a as zu}from"./vendor-react-BXzpOyCS.js";import{l as Uu,a as mt,s as Pt,b as Hu,d as Wu,r as Vu,c as Gu,e as Ku,i as al}from"./storage-BF01PMeG.js";import{r as Or,g as ms,w as Yu,a as zs,d as nl,b as Xu,t as $r,p as gd,v as qu,R as Ju,c as Zu,u as Qu,e as em,f as ol,s as pt,i as Xa,l as Us,h as zn,j as Bo,k as Un,m as Hn,n as Oo,o as ha,q as sl,x as tm,y as Wn,z as am,A as nm,B as om,C as sm,D as hd,E as rm,F as im,G as Jn,H as pr,I as lm,J as dm,K as rl,L as gr,M as hr,N as fd,O as $o,P as qo,Q as Zn,S as il,T as z,U as Hs,V as Qn,W as cm,X as um,Y as mm,Z as ll,_ as Ws,$ as pm,a0 as gm,a1 as hm,a2 as fm,a3 as fr,a4 as bm,a5 as ym,a6 as xm,a7 as Cm,a8 as dl}from"./canvas-runtime-DyQNXrXQ.js";import{e as km,d as Sm}from"./vendor-msgpack-BE8aAsr3.js";import{R as f}from"./app-runtime-xD2Z3NdN.js";import{g as Vs,A as cl}from"./index-BZ5SDUW0.js";import{g as ps,r as bd}from"./supabaseAuthAdapter-C3z334Qw.js";import{c as wm,a as vm,r as ul}from"./toolHandoff-D5e5f7t5.js";import{a as ml,s as jm}from"./executionModeSettings-NJqurj-o.js";import{a as pl,p as Im}from"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";import{A as _t,W as Nm,c as yd,D as Am,E as Fr,R as an,J as zr,X as gt,N as br,O as Mm,Q as nn,w as on,I as sn,V as rn,l as os,F as ht,Y as Tm,Z as yr,_ as ss,$ as ln,a0 as xd,a1 as Rm,a2 as Cd,a3 as Lm,i as ao,a4 as kd,a5 as Em,a6 as gl,a7 as Pm,a8 as Jt,a9 as hl,T as rs,aa as fl,ab as ro,ac as _m,ad as Jo,ae as Sd,af as xr,ag as Dm,ah as Bm,f as Om,ai as $m,h as eo,x as Fm,aj as zm,ak as Um,al as bl,am as yl,an as xl,g as Cl,ao as Fo,H as Vn,ap as zo,s as Gs,aq as kl,ar as Hm,as as Ks,at as Sl,au as Uo,av as Ys,aw as wl,ax as vl,ay as jl,az as Wm,aA as Vm,aB as Gm,aC as Km,n as Ym,o as Gn,aD as Xm,aE as qm,aF as Jm,aG as Zm,aH as Qm,aI as ep,aJ as tp,aK as ap}from"./vendor-icons-Ckw7YAP6.js";const np=1200,Ca="LocalBridgeOriginalNodeId";function ft(e){return typeof e=="object"&&e!==null}function Xt(e,t){const o=Number(e);return Number.isFinite(o)?o:t}function W(e){return typeof e=="string"?e:""}function wd(){return typeof window<"u"?{width:window.innerWidth||1280,height:window.innerHeight||720}:{width:1280,height:720}}function Cr(e,t,o){const r=Number(e),d=Number(t),p=Number(o);if(!Number.isFinite(r)||!Number.isFinite(d)||!Number.isFinite(p)||p<=0)return null;const m=1400/p,b=wd();return{x:b.width/2-r*m,y:b.height/2-d*m,scale:m}}function op(e){return ft(e)?Cr(e.x??e.X,e.y??e.Y,e.z??e.Z):null}function sp(e){if(!ft(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=wd();return{x:(d.width/2-t)/r,y:(d.height/2-o)/r,z:1400/r}}function rp(e){const t=String(e||"").trim();if(t)try{const o=JSON.parse(t);if(!ft(o))return;const r={};for(const[d,p]of Object.entries(o)){const m=op(p);m&&(r[d]=m)}return Object.keys(r).length>0?r:void 0}catch{return}}function ip(e){if(!e||Object.keys(e).length===0)return null;const t={};for(const[o,r]of Object.entries(e)){const d=sp(r);d&&(t[o]=d)}return Object.keys(t).length>0?JSON.stringify(t):null}function is(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 gs(){return crypto.randomUUID()}function Ur(e){return ft(e)?"ContentType"in e||"Prompt"in e||"Response"in e||"PositionX"in e||"PositionY"in e||"SourceFilePath"in e||"ImageStack"in e:!1}function Il(e){const t=W(e).trim();if(!t)return null;try{return JSON.parse(t)}catch{return null}}function kr(e){if(Array.isArray(e))return e;if(!ft(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=Il(o);if(r)return kr(r)}for(const t of["ContentJson","contentJson","content_json"])if(t in e){const o=Il(e[t]);if(o)return kr(o)}return Ur(e)?[e]:[]}function Hr(e){return ft(e)?"BoardId"in e&&("Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e):!1}function vd(e){if(!ft(e))return 0;for(const t of["Deletes","deletes"]){const o=e[t];if(Array.isArray(o))return o.length}return 0}function ls(e){return kr(e).filter(Ur)}function jd(e){return ls(e).length}function lp(e,t){var p;const o=[...ls(e)];if(!Hr(t))return o;const r=new Set;for(const m of["Deletes","deletes"]){const b=t[m];if(Array.isArray(b))for(const c of b){const y=W(c).trim();y&&r.add(y)}}if(r.size>0)for(let m=o.length-1;m>=0;m-=1){const b=W((p=o[m])==null?void 0:p.Id).trim();b&&r.has(b)&&o.splice(m,1)}const d=new Map;o.forEach((m,b)=>{const c=W(m.Id).trim();c&&d.set(c,b)});for(const m of ls(t)){const b=W(m.Id).trim(),c=b?d.get(b):void 0;if(c!==void 0){o[c]=m;continue}b&&d.set(b,o.length),o.push(m)}return o}function Id(e){const t=Array.isArray(e)?e.filter(ft):[];return new Map(t.filter(o=>o.NodeId).map(o=>[String(o.NodeId),o]))}async function Sr(e,t){for(const o of e)try{const r=await Or(o,t);return{payload:JSON.parse(r.content),path:o}}catch{}return null}async function dp(e,t){const o=`.mindexec/boards/${e}.msgpack`,r=`boards/${e}.msgpack`;for(const b of[o,r])try{const c=await Xu(b,t);return{payload:Sm(c),format:b===o?"msgpack":"legacy-msgpack",path:b}}catch{}const d=`.mindexec/boards/${e}.json`,p=`boards/${e}.json`,m=await Sr([d,p],t);if(m)return{payload:m.payload,format:m.path===d?"json":"legacy-json",path:m.path};throw new Error(`LocalBridge board file not found: ${o}, ${r}, ${d}, ${p}`)}function wr(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 Nl(e){return!ft(e)||Ur(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 Wr(e){if(Array.isArray(e))return e.filter(Nl).map(t=>wr(t)).filter(t=>!!t);if(Nl(e)){const t=wr(e);return t?[t]:[]}return[]}function cp(e){const t=e.toLowerCase();return up(t)?"remote-control":mp(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 up(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 mp(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 pp(e,t){const o=e.Metadata||{},r=o.ThumbnailUrl,d=o.OriginalUrl,p=o.OriginalPath;return $r(W(r)||W(d)||W(p)||W(e.Response),t)}function gp(e,t,o){const r=e.ImageStack,d=Array.isArray(r==null?void 0:r.Variants)?r.Variants:[];if(d.length===0)return;const p=d.map((b,c)=>{const y=W(b.AssetId).trim(),v=$r(y,o)||t;return v?{variantId:W(b.VariantId)||`variant-${W(e.Id)||c}`,imageUrl:v,assetId:y||void 0,caption:W(b.Caption)||void 0,sourceNodeId:W(e.Id)||void 0,createdAtUtc:W(b.CreatedAtUtc)||void 0}:null}).filter(b=>!!b);if(p.length===0)return;const m=W(r==null?void 0:r.ActiveVariantId);return{activeVariantId:p.some(b=>b.variantId===m)?m:p[0].variantId,variants:p,kind:W(r==null?void 0:r.Kind)||"versions",title:W(r==null?void 0:r.Title)||void 0,updatedAtUtc:W(r==null?void 0:r.UpdatedAtUtc)||void 0}}function hp(e,t){return!e||e.variants.length===0?t:(e.variants.find(r=>r.variantId===e.activeVariantId)??e.variants[0]).imageUrl||t}function fp(e,t,o){var m,b,c,y,v,R;const r=(b=(m=e.imageStack)==null?void 0:m.variants)!=null&&b.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||gs(),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:((y=e.imageStack)==null?void 0:y.kind)||(d.length>1?"pile":"versions"),Title:((v=e.imageStack)==null?void 0:v.title)||e.title||null,UpdatedAtUtc:((R=e.imageStack)==null?void 0:R.updatedAtUtc)||o}}function bp(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 yp(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 xp(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 Cp(e,t){const o=new Map;for(const r of e){const d=t.get(r.from),p=t.get(r.to);!d||!p||o.has(p)||o.set(p,d)}return o}function kp(e){const t=new Set;return e.map(o=>{var c,y;const r=((c=o.metadata)==null?void 0:c[Ca])||"",d=is(r)?r:is(o.id)?o.id:"",p=!!(d&&t.has(d)),m=d&&!p?d:gs(),b=((y=o.metadata)==null?void 0:y[Ca])!==m;return t.add(m),{node:b?{...o,metadata:{...o.metadata??{},[Ca]:m}}:o,originalId:m,assignedNodeId:!d||p,metadataStamped:b,duplicateOriginalId:p}})}function Sp(e,t,o,r,d){var y,v,R;const p=xp(e.kind),m=p==="image"||p==="mask"?io(e.imageUrl,d):"",b=["video","pdf","file","directory","embed"].includes(p)?io(e.assetUrl||e.sourceFilePath||e.body,d):"",c={...e.metadata??{},[Ca]: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=(y=e.assetUrl)!=null&&y.startsWith(d)?"local_bridge":"local_reference"),c.AdapterState??(c.AdapterState=((v=e.metadata)==null?void 0:v.PromptOnly)==="true"?"adapter-gated":"local-reference")),(R=e.tags)!=null&&R.length&&(c.ReactTags=JSON.stringify(e.tags)),m&&(c.OriginalUrl=m,c.ThumbnailUrl=m),b&&(c.OriginalPath=b,c.SourceFilePath=b),{Id:t,ContentType:p,Prompt:e.title||p,Response:p==="image"||p==="mask"?m||e.body||null:p==="remote-monitor"?e.body||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":p==="remote-control"?e.body||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":b||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||b||null,ScrollOffset:e.scrollOffset??0,MaxScroll:e.maxScroll??0,CreatedAt:r,UpdatedAt:r,IsWordWrap:e.wordWrap??e.kind!=="code",Metadata:c,ImageStack:p==="image"?fp(e,d,r):null}}function wp(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 vp(e,t,o){const r=W(e.ContentType)||"note",d=W(e.Prompt).trim(),p=W(e.Response).trim(),m=yp(e.Metadata),b=W(e.Id).trim();b&&(m[Ca]??(m[Ca]=b));const y=["true","1","yes"].includes(String(m.ImageRouterMask||m.IsMask||"").trim().toLowerCase())?"mask":cp(r),v=y==="memo"&&["mindcanvasagent","agentcommand"].includes(String(m.SemanticType||m.semanticType||"").trim().toLowerCase()),R=y==="memo"&&["codenote","code-note"].includes(String(m.SemanticType||m.semanticType||"").trim().toLowerCase()),j=W(e.SourceFilePath)||m.OriginalPath||m.SourceFilePath||"",P=y==="video"||y==="pdf"||y==="file"||y==="directory"||y==="embed"?bp(e,o):void 0,V=d||e.SourceFilePath||r||"LocalBridge node",F=y==="image"?p||d||"Image asset":y==="mask"?p||d||"Image mask asset":y==="remote-monitor"?p||d||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":y==="remote-control"?p||d||j||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":y==="pdf"||y==="file"||y==="directory"||y==="embed"?p||j||d||r:p||d||j||"",B=v?500:R?400:y==="remote-monitor"?860:y==="remote-control"||y==="template-launcher"?560:y==="csv-table"?720:y==="embed"?460:y==="video"?420:y==="markdown"?380:y==="text"||y==="image"||y==="mask"?360:320,J=v||R?300:y==="remote-monitor"?640:y==="remote-control"?390:y==="template-launcher"?620:y==="csv-table"?420:y==="embed"?260:y==="video"?236:y==="markdown"?240:y==="text"?210:y==="image"||y==="mask"?260:180,ne=y==="image"||y==="mask"?pp(e,o):void 0,ge=y==="image"?gp(e,ne,o):void 0,xe=!!(e.IsChunkedText||m.IsChunkedText==="true"),je=Xt(e.TotalLineCount??m.TotalLineCount,0),he=Xt(e.ScrollOffset,0),Ye=Xt(e.MaxScroll,0);return{id:String(e.Id||crypto.randomUUID()),kind:y,title:y==="remote-monitor"?d||"Multi Desktop Monitor":y==="remote-control"?d||m.RemoteFleetDeviceName||"Remote Device":y==="template-launcher"?d||"Template Launcher":V,body:F,x:Xt((t==null?void 0:t.PositionX)??e.PositionX,0),y:Xt((t==null?void 0:t.PositionY)??e.PositionY,0),width:Math.max(160,Math.min(900,Xt((t==null?void 0:t.Width)??e.Width,B))),height:Math.max(120,Math.min(900,Xt((t==null?void 0:t.Height)??e.Height,J))),status:e.IsLoading?"running":y==="ai-task"?"idle":void 0,imageUrl:hp(ge,ne),imageStack:ge,assetUrl:P,sourceFilePath:j||void 0,isChunkedText:xe||void 0,totalLineCount:xe?je:void 0,scrollOffset:xe?he:void 0,maxScroll:xe?Ye:void 0,isExpanded:typeof e.IsExpanded=="boolean"?e.IsExpanded:void 0,originalHeight:Xt(e.OriginalHeight,0)||void 0,tags:v?["Agent Command",m.AgentCommandRequestedRole||"Researcher",m.AgentCommandStatus||"Draft"]:R?["Code Note",m.CodeNoteStatus||"Draft",m.CodeNoteSyncState||"Unlinked"]:y==="remote-monitor"?["Remote","Monitor","LocalBridge"]:y==="remote-control"?["Remote","Control","LocalBridge"]:["LocalBridge",r],metadata:y==="remote-monitor"?jp(m):y==="remote-control"?Ip(m):m,role:e.IsAiEnabled?"ai-enabled":void 0,aiEnabled:typeof e.IsAiEnabled=="boolean"?e.IsAiEnabled:void 0,wordWrap:typeof e.IsWordWrap=="boolean"?e.IsWordWrap:void 0}}function jp(e){return{RemoteHub:"Gated",RemoteRoute:"Gated",RemoteConnected:"0",RemoteTotal:"30",RemotePage:"1/1",AdapterState:"adapter-gated",...e}}function Ip(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 Np(e,t){const o=[];for(const r of e){const d=String(r.Id||""),p=String(r.ParentId||"");!d||!p||!t.has(d)||!t.has(p)||o.push({id:`edge-local-${p}-${d}`,from:p,to:d,kind:"context"})}return o}async function Ap(e=ms()){const t=await Or(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return(Array.isArray(o)?o.filter(ft):[]).map(p=>wr(p)).filter(p=>!!p).sort((p,m)=>String(m.UpdatedAt||"").localeCompare(String(p.UpdatedAt||"")))}async function Mp(e){try{const t=await Or(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return Array.isArray(o)?o.filter(ft):[]}catch{return[]}}async function Tp(e,t,o,r=ms()){var Q,bt,O,lt;if((Q=e.source)!=null&&Q.partialImport)throw new Error("This board was imported from a partial original payload. Export is blocked to avoid data loss.");if((bt=e.source)!=null&&bt.truncated)throw new Error("This board was truncated during import. Export is blocked to avoid data loss.");const d=(O=e.source)!=null&&O.exportedByReact?String(e.source.boardId||""):"",p=is(d),m=is(d)?d:gs(),b=new Date().toISOString(),c=kp(e.nodes),y=c.map(U=>U.node),v=new Map(c.map(U=>[U.node.id,U.originalId])),R=Cp(e.edges,v),j=c.map(({node:U,originalId:oe})=>Sp(U,oe,R.get(oe),b,r)),P=c.map(({node:U,originalId:oe})=>wp(U,oe)),V=t.scale>0?t.scale:1,F=(window.innerWidth/2-t.x)/V,B=(window.innerHeight/2-t.y)/V,J=1400/V,ne=(lt=e.nodes.find(U=>U.kind==="image"&&U.imageUrl))==null?void 0:lt.imageUrl,ge={Id:m,UserId:"00000000-0000-0000-0000-000000000000",Title:e.name||"Untitled Board",Description:"Exported from MindExec React",ThumbnailUrl:io(ne,r)||"",IsPublic:!1,CreatedAt:b,SyncedCloudBoardId:null,LastSyncedAt:null,LastCloudCopyStatus:null,UpdatedAt:b,LastCameraX:F,LastCameraY:B,LastCameraZ:J,LastCursorX:0,LastCursorY:0,CameraBookmarks:ip(e.settings.cameraBookmarks)},xe=`.mindexec/boards/${m}.msgpack`,je=`.mindexec/boards/${m}.json`,he=`.mindexec/boards/${m}.layout.json`,Ye=`.mindexec/boards/${m}.delta.json`,rt=`boards/${m}.delta.json`,it=await Mp(r),me=[ge,...it.filter(U=>W(U.Id)!==m)],X=km(j);await Yu(xe,X,o,r),await zs(je,JSON.stringify(j,null,2),o,r),await zs(he,JSON.stringify(P,null,2),o,r),await zs(".mindexec/boards/_metadata.json",JSON.stringify(me,null,2),o,r);const re=await Promise.allSettled([nl(Ye,o,r),nl(rt,o,r)]);return f.emit("localBridge.board.exported",{boardId:m,nodes:j.length,edges:e.edges.length,snapshotFormat:"msgpack",msgpackBytes:X.byteLength,jsonMirror:!0,deltaCleared:re.some(U=>U.status==="fulfilled"&&U.value.success),reusedBoardId:p,stableNodeIds:c.length,assignedNodeIds:c.filter(U=>U.assignedNodeId).length,metadataStampedNodeIds:c.filter(U=>U.metadataStamped).length,duplicateOriginalNodeIds:c.filter(U=>U.duplicateOriginalId).length}),{metadata:ge,source:{kind:"localBridge",boardId:m,loadedAt:b,originalNodeCount:j.length,renderedNodeCount:j.length,truncated:!1,exportedByReact:!0,snapshotFormat:"msgpack"},nodes:y,msgpackPath:xe,boardPath:je,layoutPath:he}}async function Rp(e,t,o=ms()){const r=await dp(e.Id,o);let d=new Map;const p=await Sr([`.mindexec/boards/${e.Id}.layout.json`,`boards/${e.Id}.layout.json`],o);p&&(d=Id(p.payload));let m=null;const b=await Sr([`.mindexec/boards/${e.Id}.delta.json`,`boards/${e.Id}.delta.json`],o);b&&(m=b.payload);const c=m?Wr(m)[0]:null,y=!!(m&&Hr(m)),v=y?lp(r.payload,m):r.payload;return Nd(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:y,deltaUpserts:m?jd(m):0,deltaDeletes:m?vd(m):0,snapshotFormat:r.format})}function Nd(e,t,o={}){const r=ls(e),d=Hr(e),p=o.deltaUpserts??(d?r.length:0),m=o.deltaDeletes??(d?vd(e):0),b=o.layoutPayload?Id(o.layoutPayload):new Map,c=r.slice(0,np),y=c.map(J=>vp(J,b.get(String(J.Id||"")),o.baseUrl??ms())),v=new Set(y.map(J=>J.id)),R=Np(c,v),j=r.length>y.length,P=d,V=o.deltaApplied===!0,F=o.boardId||gs(),B=o.updatedAt||new Date().toISOString();return f.emit("localBridge.board.loaded",{boardId:F,nodes:y.length,originalNodes:r.length,truncated:j,snapshotFormat:o.snapshotFormat,partialImport:P,deltaImport:d,deltaApplied:V,deltaUpserts:p,deltaDeletes:m}),{id:`localBridge:${F}`,name:o.title||"LocalBridge Board",nodes:y,edges:R,settings:{...t,cameraBookmarks:rp(o.cameraBookmarks)},updatedAt:B,source:{kind:"localBridge",boardId:F,loadedAt:new Date().toISOString(),snapshotFormat:o.snapshotFormat,originalNodeCount:r.length,renderedNodeCount:y.length,truncated:j,partialImport:P,deltaImport:d,deltaApplied:V}}}const Vr=["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(","),Lp=/^[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 Ep(e){if(Lp.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 Ad(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 Pp(e){return JSON.stringify({id:e.id,name:e.name,nodes:e.nodes,edges:e.edges,settings:e.settings,updatedAt:e.updatedAt})}function vr(e,t=new Date().toISOString()){return e&&!Number.isNaN(Date.parse(e))?e:t}function Gr(e){return(e==null?void 0:e.trim().slice(0,90))||"Untitled Board"}function Md(e){const t=Ad(e.content_json),o=vr(e.updated_at??t.updatedAt);return{id:e.id,name:Gr(e.title??t.name),updatedAt:o,createdAt:vr(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 _p(e,t){const o=Ad(e.content_json),r=vr(e.updated_at??o.updatedAt);return{id:e.id,name:Gr(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 Kr(e){var c;const t=bd(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=ps(e);if(!o)return f.emit("projectStorage.cloud.provider.skipped",{mode:"config-missing"}),{userId:null,config:t,reason:"missing-client"};const{data:r,error:d}=await o.auth.getSession();if(d||!r.session)return f.emit("projectStorage.cloud.provider.sessionMissing",{message:(d==null?void 0:d.message)??"missing-session"}),{userId:null,config:t,reason:"missing-session"};const{data:p,error:m}=await o.auth.getUser(),b=((c=p.user)==null?void 0:c.id)??null;return m||!b?(f.emit("projectStorage.cloud.provider.sessionMissing",{message:(m==null?void 0:m.message)??"missing-user"}),{userId:null,config:t,reason:"missing-user"}):{userId:b,config:t,reason:"provider-ready"}}async function Dp(e){const t=await Kr(e);if(!t.userId)return[];const o=ps(e);if(!o)return[];f.emit("projectStorage.cloud.list.requested");const{data:r,error:d}=await o.from("boards").select(Vr).eq("user_id",t.userId).order("updated_at",{ascending:!1}).limit(50);if(d)throw f.emit("projectStorage.cloud.provider.failed",{operation:"list",message:d.message}),d;const p=(r??[]).map(Md);return f.emit("projectStorage.cloud.list.loaded",{count:p.length}),p}async function Bp(e,t,o){const r=await Kr(e);if(!r.userId)return null;const d=ps(e);if(!d)return null;f.emit("projectStorage.cloud.load.requested",{boardId:t});const{data:p,error:m}=await d.from("boards").select(Vr).eq("user_id",r.userId).eq("id",t).maybeSingle();if(m)throw f.emit("projectStorage.cloud.provider.failed",{operation:"load",boardId:t,message:m.message}),m;if(!p)return null;const b=_p(p,o);return f.emit("projectStorage.cloud.load.loaded",{boardId:t,nodes:b.nodes.length,edges:b.edges.length}),b}async function Op(e,t,o){const r=await Kr(e);if(!r.userId)return null;const d=ps(e);if(!d)return null;const p=Ep(t.id),m=new Date().toISOString(),b=Gr(t.name),c={...t,id:p,name:b,updatedAt:m},y={p_board_id:p,p_title:b,p_description:null,p_thumbnail_url:null,p_is_public:!1,p_created_at:null,p_updated_at:m,p_last_camera_x:o.x,p_last_camera_y:o.y,p_last_camera_z:o.scale,p_last_cursor_x:0,p_last_cursor_y:0,p_camera_bookmarks:JSON.stringify(t.settings.cameraBookmarks??{}),p_nodes:[],p_include_json_mirror:!0};f.emit("projectStorage.cloud.save.requested",{boardId:p,sourceBoardId:t.id,nodes:t.nodes.length,edges:t.edges.length});const{error:v}=await d.rpc("save_board_snapshot",y);if(v)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-rpc",boardId:p,message:v.message}),v;const R={content_json:Pp(c),updated_at:m},{data:j,error:P}=await d.from("boards").update(R).eq("id",p).eq("user_id",r.userId).select(Vr).maybeSingle();if(P)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-json-mirror",boardId:p,message:P.message}),P;const V=j?Md(j):{id:p,name:b,updatedAt:m,createdAt:m,nodeCount:t.nodes.length,edgeCount:t.edges.length,sourceKind:"cloud"};return f.emit("projectStorage.cloud.save.saved",{boardId:V.id,nodes:V.nodeCount,edges:V.edgeCount}),V}function jr(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 $p(e,t={},o=jr(e),r){if(e.length===0)return{after:new Map,boundsAfter:o};const d=ag(t.mode),p=ng(t.order),m=og(t.anchor),b=sg(t.sizeMode),c=Math.max(0,t.gapX??24),y=Math.max(0,t.gapY??24),v=Math.max(1,t.maxColumns??12),R=Ir(t.quantile??.75,.05,.95),j=e.map(Fp),P=Jp(j,p),V=P.map(he=>he.width),F=P.map(he=>he.height),B=Math.max(1,t.cellWidth??Ml(V,R)),J=Math.max(1,t.cellHeight??Ml(F,R)),ne=Math.max(1,t.targetWidth??B),ge=Math.max(1,t.targetHeight??J),xe=qp(m,o);if(d==="grid"){Gp(P,b,ne,ge,B,J);const he=Al(t.columns,v,o.maxX-o.minX,B,c);Up(P,xe.x,xe.y,he,B,J,c,y)}else if(d==="masonry"){Kp(P,b==="preserve"?"uniformWidth":b,ne);const Ye=Al(t.columns,v,o.maxX-o.minX,ne,c);Hp(P,xe.x,xe.y,Ye,ne,c,y)}else d==="stripHorizontal"?(Yp(P,b==="preserve"?"uniformHeight":b,ge),Wp(P,xe.x,xe.y,c,ge)):(Xp(P,b==="preserve"?"uniformWidth":b,ne),Vp(P,xe.x,xe.y,y,ne));let je=new Map(P.map(he=>[he.id,zp(he)]));return m==="selectionBoundsCenter"&&(je=Qp(o,je)),t.snapToGrid&&(je=eg(je,Math.max(1,t.gridSize??8))),{after:je,boundsAfter:jr(Array.from(je.values()))}}function Fp(e){return{...e,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function zp(e){return{x:e.x,y:e.y,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function Up(e,t,o,r,d,p,m,b){e.forEach((c,y)=>{const v=Math.floor(y/r),R=y%r,j=t+R*(d+m),P=o+v*(p+b);c.x=j+(d-c.width)/2,c.y=P+(p-c.height)/2})}function Hp(e,t,o,r,d,p,m){const b=Array.from({length:r},()=>0);for(const c of e){const y=tg(b),v=t+y*(d+p);c.x=v+(d-c.width)/2,c.y=o+b[y],b[y]+=c.height+m}}function Wp(e,t,o,r,d){let p=t;for(const m of e)m.x=p,m.y=o+(d-m.height)/2,p+=m.width+r}function Vp(e,t,o,r,d){let p=o;for(const m of e)m.x=t+(d-m.width)/2,m.y=p,p+=m.height+r}function Gp(e,t,o,r,d,p){if(t==="fitCellDownOnly")for(const m of e){const b=Math.min(1,d/m.width,p/m.height);m.width*=b,m.height*=b}else t==="uniformWidth"?Yr(e,o):t==="uniformHeight"&&Td(e,r)}function Kp(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}Yr(e,o)}function Yp(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}Td(e,o)}function Xp(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}Yr(e,o)}function Yr(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 Td(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 Al(e,t,o,r,d){if(typeof e=="number"&&e>0)return Math.round(Ir(e,1,t));if(o<=1||r<=1)return 1;const p=Math.floor((o+d)/(r+d));return!Number.isFinite(p)||p<1?1:Math.round(Ir(p,1,t))}function qp(e,t,o){return{x:t.minX,y:t.minY}}function Jp(e,t){return t==="selectionOrder"?[...e].sort((o,r)=>o.selectionIndex-r.selectionIndex):Zp(e)}function Zp(e){const t=[...e].sort((c,y)=>c.y-y.y||c.x-y.x);if(t.length<=2)return t;const o=t.map(c=>c.height).sort((c,y)=>c-y),r=o[Math.floor(o.length/2)]??1,d=Math.max(16,r*.35),p=[];let m=[],b=Number.NaN;for(const c of t)m.length===0?(m=[c],b=c.y):Math.abs(c.y-b)<=d?(m.push(c),b=(b*(m.length-1)+c.y)/m.length):(p.push([...m].sort((y,v)=>y.x-v.x)),m=[c],b=c.y);return m.length>0&&p.push([...m].sort((c,y)=>c.x-y.x)),p.flat()}function Qp(e,t){if(t.size===0)return t;const o=jr(Array.from(t.values())),r=e.minX+(e.maxX-e.minX)/2,d=e.minY+(e.maxY-e.minY)/2,p=o.minX+(o.maxX-o.minX)/2,m=o.minY+(o.maxY-o.minY)/2,b=r-p,c=d-m;return new Map(Array.from(t.entries()).map(([y,v])=>[y,{...v,x:v.x+b,y:v.y+c}]))}function eg(e,t){return new Map(Array.from(e.entries()).map(([o,r])=>[o,{...r,x:Tl(r.x,t),y:Tl(r.y,t)}]))}function Ml(e,t){if(e.length===0)return 1;const o=[...e].sort((b,c)=>b-c),r=(o.length-1)*t,d=Math.floor(r),p=Math.min(o.length-1,d+1),m=r-d;return o[d]*(1-m)+o[p]*m}function tg(e){let t=0;for(let o=1;o<e.length;o+=1)e[o]<e[t]&&(t=o);return t}function Tl(e,t){return Math.round(e/t)*t}function ag(e){const t=hs(e);return t==="grid"?"grid":t==="striphorizontal"||t==="striph"?"stripHorizontal":t==="stripvertical"||t==="stripv"?"stripVertical":"masonry"}function ng(e){return hs(e)==="selectionorder"?"selectionOrder":"spatialReading"}function og(e){const t=hs(e);return t==="selectionboundscenter"?"selectionBoundsCenter":t==="viewporttopleft"?"viewportTopLeft":"selectionBoundsTopLeft"}function sg(e){const t=hs(e);return t==="fitcelldownonly"?"fitCellDownOnly":t==="uniformwidth"?"uniformWidth":t==="uniformheight"?"uniformHeight":"preserve"}function hs(e){return String(e??"").trim().toLowerCase().replace(/[^a-z0-9]/g,"")}function Ir(e,t,o){return Math.min(o,Math.max(t,e))}const Rd=300,Ld=50*1024*1024,rg=800;function Se(e){return typeof e=="string"?e.length*2:0}function ig(e){let t=256;if(t+=Se(e.id),t+=Se(e.kind),t+=Se(e.title),t+=Se(e.body),t+=Se(e.result),t+=Se(e.imageUrl),t+=Se(e.assetUrl),t+=Se(e.sourceFilePath),t+=(e.tags??[]).reduce((o,r)=>o+Se(r),0),e.metadata)for(const[o,r]of Object.entries(e.metadata))t+=Se(o)+Se(r);return e.imageStack&&(t+=128+Se(e.imageStack.title),t+=e.imageStack.variants.reduce((o,r)=>o+96+Se(r.variantId)+Se(r.imageUrl)+Se(r.assetId)+Se(r.title)+Se(r.caption),0)),t}function lg(e){let t=1024+Se(e.id)+Se(e.name)+Se(e.updatedAt);return t+=e.nodes.reduce((o,r)=>o+ig(r),0),t+=e.edges.length*128,t+=Object.entries(e.settings).reduce((o,[r,d])=>o+Se(r)+Se(typeof d=="string"?d:JSON.stringify(d)),0),t}function Ed(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:lg(e)}}function Rl(e,t={}){const o=t.maxEntries??Rd,r=t.maxBytes??Ld;let d=e.slice(Math.max(0,e.length-o)),p=d.reduce((m,b)=>m+b.estimatedBytes,0);for(;d.length>1&&p>r;){const[m,...b]=d;p-=(m==null?void 0:m.estimatedBytes)??0,d=b}return d}function fa(e,t,o={}){const r=Ed(t,o),d=o.mergeWindowMs??rg,p=e.slice(),m=p.at(-1);return m&&r.mergeKey&&m.mergeKey===r.mergeKey&&r.timestampMs-m.timestampMs<d?(p[p.length-1]={...m,description:r.description,timestampMs:r.timestampMs,estimatedBytes:Math.max(m.estimatedBytes,r.estimatedBytes)},Rl(p,o)):(p.push(r),Rl(p,o))}function dg(e,t,o={}){const r=Ed(t,o),d=o.maxEntries??Rd,p=o.maxBytes??Ld;let m=[r,...e].slice(0,d),b=m.reduce((c,y)=>c+y.estimatedBytes,0);for(;m.length>1&&b>p;){const c=m.at(-1);b-=(c==null?void 0:c.estimatedBytes)??0,m=m.slice(0,-1)}return m}function fs(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 Kn(e,t){return!!fs(e,t)}function Pd(e){if(!e||!e.trim())return!1;const t=e.trim();return/^(https?:|blob:|data:|file:)/i.test(t)}function _d(e){if(!e)return"";const t=fs(e,"OriginalPath");if(t)return t;const o=String(e.body||"").trim();return Pd(o)?"":o}function Dd(e){return e?_d(e)||String(e.sourceFilePath||"").trim()||String(e.assetUrl||"").trim()||String(e.imageUrl||"").trim()||String(e.body||"").trim():""}function Bd(e){return fs(e,"ThumbnailUrl","thumbnailUrl")}function cg(e){if(!e||e.kind!=="image")return!1;if(Kn(e,"ImageGenerationProvider")||Kn(e,"GeneratedImageSourceWidth")||Kn(e,"GeneratedImageSourceHeight")||Kn(e,"CodexImageQuality")||Kn(e,"ImageRouterRevisedPrompt"))return!0;const t=fs(e,"RequestedMediaOperation");return["text2image","image2image","inpaint"].includes(t.toLowerCase())}function Xr(e){if(!e)return"";if(e.kind==="image"||e.kind==="mask"){const t=cg(e)?_d(e):"",o=Bd(e),r=String(e.body||"").trim();return t||o||String(e.imageUrl||"").trim()||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()||(Pd(r)?r:"")}return Dd(e)||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()}function Od(e){if(!e)return"";const t=Dd(e)||e.title||e.kind;return String(t||"").replace(/\\/g,"/").replace(/\/+$/,"").split("/").filter(Boolean).pop()||e.title||e.kind}const ug=2048,mg=16e3,Xs=1024,qs=64,pg=2048,Js=3,gg=16,hg=256,fg=new Set(["text","note","memo","markdown","code","directory"]),bg=/[\p{L}\p{M}\p{N}]{2,}/gu,Ll=4,yg=8,El=1.35;function xg(e){return fg.has(String(e||"").trim().toLowerCase())}function Cg(e){const t=e.map(Sg),o=new Map,r=new Map,d=new Map,p=new Map;for(const m of t){o.set(m.id,m);for(const b of m.tokens)Zs(r,b,m.id);for(const b of m.prefixes)Zs(d,b,m.id);for(const b of m.ngrams)Zs(p,b,m.id)}return{documents:t,documentById:o,tokenIndex:r,prefixIndex:d,ngramIndex:p}}function kg(e,t,o={}){const r=Math.max(1,Math.trunc(Number(o.limit||30))),d=Qa(t),p=Pl(e,0,0,o.viewport,0);if(!d)return{hits:[],profile:p};const m=Array.from($d(d)),b=Array.from(Fd(m)),c=Ud(d),y=Array.from(zd(c)),v=new Map;for(const F of m)Qs(e.tokenIndex,F,v,8);for(const F of b)Qs(e.prefixIndex,F,v,F.length<=3?4:2);for(const F of y)Qs(e.ngramIndex,F,v,1.15);const R=Ig(e,v,r),j=Ng(o.allowedContentTypes),P=[];for(const F of R){const B=e.documentById.get(F);if(!B||j&&!j.has(B.contentType))continue;const J=vg(B,d,m,y);if(J<=0)continue;const ne=jg(B,o.viewport??null);P.push({nodeId:B.id,score:J+ne,textScore:J,viewportBoost:ne})}P.sort((F,B)=>B.score-F.score||F.nodeId.localeCompare(B.nodeId));const V=P.slice(0,r);return{hits:V,profile:Pl(e,R.length,V.length,o.viewport,V.filter(F=>F.viewportBoost>0).length)}}function Qa(e){const t=String(e??"");if(!t.trim())return"";let o=t;try{o=t.normalize("NFKC")}catch{o=t}o=o.toLowerCase();let r="",d=!1;for(const p of o){if(/\s/u.test(p)){d||(r+=" ",d=!0);continue}Ag(p)||(r+=p,d=!1)}return r.trim()}function $d(e){return new Set(e.match(bg)??[])}function Fd(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 zd(e){const t=new Set;if(!e.trim())return t;if(e.length<=Js)return t.add(e),t;for(let o=0;o<=e.length-Js;o+=1)t.add(e.slice(o,o+Js));return t}function Sg(e){const t=String(e.kind??"").trim().toLowerCase(),o=ya(e.prompt??e.title,ug),r=xg(t)?ya(e.response??e.body,mg):"",d=wg(e.metadata,e.tags,e.metadataText),p=ya(e.sourceFilePath||e.assetUrl,pg),m=Qa(o),b=Qa(r),c=Qa(d),y=Qa(p),v=Qa(t),R=[m,c,y,b,v].filter(Boolean).join(" "),j=$d(R);return{id:String(e.id),contentType:t,normalizedPrompt:m,normalizedResponse:b,normalizedMetadata:c,normalizedSourcePath:y,normalizedContentType:v,tokens:j,prefixes:Fd(j),ngrams:zd(Ud(R)),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 wg(e,t,o){const r=[];let d=0;if(e)for(const[p,m]of Object.entries(e)){if(d>=qs)break;!String(p??"").trim()&&!String(m??"").trim()||(r.push(ya(p,128)),String(m??"").trim()&&r.push(ya(m,Xs)),d+=1)}return d<qs&&(t!=null&&t.length)&&(r.push("tags",ya(t.join(" "),Xs)),d+=1),d<qs&&(o!=null&&o.trim())&&r.push("metadata",ya(o,Xs)),r.join(" ")}function vg(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 p of o)e.tokens.has(p)&&(d+=7),e.normalizedPrompt.startsWith(p)&&(d+=10);for(const p of r)e.ngrams.has(p)&&(d+=.85);return d}function jg(e,t){if(!t)return 0;const o=e.x+Math.max(1,e.width)/2,r=e.y+Math.max(1,e.height)/2,d=Math.abs(o-t.centerX)/Math.max(1,t.halfWidth),p=Math.abs(r-t.centerY)/Math.max(1,t.halfHeight),m=Math.sqrt(d*d+p*p);if(m<=1)return Ll+(1-m)*yg;if(m<=El){const b=1-(m-1)/Math.max(.001,El-1);return Math.max(0,b)*(Ll*.75)}return 0}function Ig(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*gg,hg)).map(([r])=>r)}function Ng(e){if(!e)return null;const t=new Set(Array.from(e,o=>String(o||"").trim().toLowerCase()).filter(Boolean));return t.size>0?t:null}function Pl(e,t,o,r,d){return{documentCount:e.documents.length,candidateCount:t,rankedCount:o,viewportBoosted:!!r,boostedCount:d,indexedTokenCount:e.tokenIndex.size,indexedPrefixCount:e.prefixIndex.size,indexedNGramCount:e.ngramIndex.size}}function Zs(e,t,o){const r=e.get(t);if(r){r.add(o);return}e.set(t,new Set([o]))}function Qs(e,t,o,r){const d=e.get(t);if(d)for(const p of d)o.set(p,(o.get(p)??0)+r)}function Ud(e){let t="";for(const o of e)/\s/u.test(o)||(t+=o);return t}function ya(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 Ag(e){const t=e.codePointAt(0)??0;return t<=31||t>=127&&t<=159}const Mg=2147483647,Tg="LocalBridge access is enabled, but the bridge is not reachable. Restart LocalBridge, allow Chrome local-network access, then reload MindCanvas.",Rg="Local storage is unavailable in the hosted app until browser local storage or LocalBridge access is available.",Lg="Local storage is unavailable. Check the browser-local storage state or LocalBridge connection.",Eg="Cloud projects are unavailable until Supabase and Cloudflare R2 are configured.",Pg="Login is required before cloud projects can be used.",_g="Cloud projects are unavailable.";function Dg(e){return e.bridgeProviderConfigured||e.browserProviderConfigured||e.embeddedProviderConfigured}function Nr(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 Bg(e){return Nr(e,!1).isAvailable?"local":qr(e)?"cloud":Nr(e,!0).isAvailable?"local":e.cloudConfigured?"cloud":"local"}function qr(e){return e.cloudConfigured&&e.cloudSessionAvailable}function Og(e,t){return t.providerKind==="bridge"&&!t.bridgeReachable?Tg:e.hostedWebApp?Rg:Lg}function $g(e){return e.cloudConfigured?qr(e)?_g:Pg:Eg}function Fg(e){var v,R,j;const t=qr(e),o=Nr(e,!0),r=Dg(e),d=e.cloudConfigured,p=o.isAvailable,m=t;let b=e.storedMode??Bg(e);b==="cloud"&&(!d||!m&&p)?b=p?"local":"cloud":b==="local"&&(!r&&d||!p&&m)&&(b="cloud");const c=e.cloudAccess,y=((v=c==null?void 0:c.denialReason)==null?void 0:v.trim())||void 0;return{currentMode:b,showLocalTab:r,showCloudTab:d,isLocalAvailable:o.isAvailable,isCloudAvailable:t,requiresCloudSignIn:e.cloudConfigured&&!t,canUseLocalProjects:p,canBrowseLocalWorkspace:o.canBrowseWorkspace,localProviderKind:o.providerKind,canUseCloudProjects:m,canSyncLocalToCloud:p&&m,cloudPlanKey:((R=c==null?void 0:c.planKey)==null?void 0:R.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)??Mg,lockedCloudBoardCount:(c==null?void 0:c.lockedBoardCount)??0,canCreateCloudBoards:(c==null?void 0:c.canCreateBoard)??m,canUseManagedAi:(c==null?void 0:c.canUseManagedAi)??!1,canGenerateImage:(c==null?void 0:c.canGenerateImage)??!1,canUseContextPack:(c==null?void 0:c.canUseContextPack)??!1,cloudLimitMessage:y,localStatusMessage:o.isAvailable?void 0:Og(e,o),cloudStatusMessage:m?void 0:$g(e)}}function zg(){const e=new Error("Queued operation was cancelled before it started.");return e.name="AbortError",e}class Ug{constructor(){tl(this,"tails",new Map)}isBusy(t){return this.tails.has(t)}enqueue(t,o,r){if(typeof o!="function")throw new TypeError("KeyedAsyncQueue operation is required.");const d=this.tails.get(t)??Promise.resolve();let p;return p=(async()=>{try{try{await d}catch{}if(r!=null&&r.aborted)throw zg();return await o(r)}finally{this.tails.get(t)===p&&this.tails.delete(t)}})(),this.tails.set(t,p),p}clear(t){if(typeof t>"u"){this.tails.clear();return}this.tails.delete(t)}}const Ar="mindexec-local-mode-warning-dismissed-v1";function Hg(){try{return window.localStorage.getItem(Ar)==="true"}catch{return!1}}function Hd(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 Wg(e,t,o){var d,p,m,b,c;if(e!=="connected")return t||Hd(e,o);const r=[o!=null&&o.version?`version ${o.version}`:null,(d=o==null?void 0:o.exec)!=null&&d.model?`model ${o.exec.model}`:null,(p=o==null?void 0:o.exec)!=null&&p.reasoningEffort?`reasoning ${o.exec.reasoningEffort}`:null,(m=o==null?void 0:o.exec)!=null&&m.serviceTier?`tier ${o.exec.serviceTier}`:null,(b=o==null?void 0:o.exec)!=null&&b.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 Vg({state:e,message:t,status:o,hostedBridgeAccessEnabled:r,onRefresh:d,onEnableHostedBridge:p}){const m=g.useMemo(()=>e==="checking"?n.jsx(_t,{size:14,className:"spin-icon"}):e==="connected"?n.jsx(Nm,{size:14}):e==="blocked"?n.jsx(yd,{size:14}):e==="unavailable"?n.jsx(Am,{size:14}):n.jsx(Fr,{size:14}),[e]);return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--${e}`,title:Wg(e,t,o),"data-testid":"bridge-status-pill","data-bridge-state":e,"data-bridge-access":r?"enabled":"gated",children:[n.jsx("span",{className:"runtime-status-pill__icon","aria-hidden":"true",children:m}),n.jsx("span",{children:Hd(e,o)}),e==="blocked"&&!r&&n.jsx("button",{type:"button",className:"runtime-status-pill__action",onClick:p,children:"Enable"}),n.jsx("button",{type:"button",className:"runtime-status-pill__button",title:"Refresh LocalBridge","data-testid":"bridge-status-refresh",onClick:()=>void d(),disabled:e==="checking",children:n.jsx(an,{size:13})})]})}function Gg({status:e,message:t}){const r={ready:{icon:n.jsx(br,{size:14}),label:"Saved locally",title:"Board state is saved in this browser."},syncing:{icon:n.jsx(_t,{size:14,className:"spin-icon"}),label:"Saving",title:"Saving board state to this browser."},error:{icon:n.jsx(zr,{size:14}),label:"Save error",title:"Board state could not be saved locally."},offline:{icon:n.jsx(Fr,{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 Kg({visible:e}){const[t,o]=g.useState(Hg);if(!e||t)return null;const r=()=>{o(!0);try{window.localStorage.setItem(Ar,"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":Ar,children:[n.jsx("div",{className:"runtime-local-warning__icon","aria-hidden":"true",children:n.jsx(zr,{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(gt,{size:14})})]})}function Yg({bridgeState:e,bridgeMessage:t,bridgeStatus:o,syncStatus:r,syncMessage:d,hostedBridgeAccessEnabled:p,onRefreshBridge:m,onEnableHostedBridge:b,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(Vg,{state:e,message:t,status:o,hostedBridgeAccessEnabled:p,onRefresh:m,onEnableHostedBridge:b}),n.jsx(Gg,{status:r,message:d})]}),n.jsx(Kg,{visible:c})]})}const Xg=/^data:image\//i;function qg(e){const t=String(e||"").trim();if(!t)return{src:null,reason:"empty",urlKind:"empty"};const o=t.toLowerCase();return Xg.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 er({src:e,alt:t="",className:o="",testId:r="secure-image",traceId:d,kind:p="image",title:m}){const b=g.useMemo(()=>qg(e),[e]),[c,y]=g.useState(b.src?"loading":"blocked");g.useEffect(()=>{const P=b.src?"loading":"blocked";y(P),b.src||f.emit("secureImage.blocked",{id:d,kind:p,reason:b.reason,urlKind:b.urlKind})},[p,b.reason,b.src,b.urlKind,d]);const v=()=>{y("loaded"),f.emit("secureImage.loaded",{id:d,kind:p,urlKind:b.urlKind})},R=()=>{y("error"),f.emit("secureImage.error",{id:d,kind:p,urlKind:b.urlKind})},j=c==="blocked"?`Image blocked: ${b.reason||"unsupported source"}`:"Image failed to load";return n.jsxs("div",{className:`secure-image secure-image--${c} ${o}`.trim(),"data-testid":r,"data-secure-image-state":c,"data-secure-image-kind":p,title:c==="loaded"?m:j,children:[b.src&&n.jsx("img",{src:b.src,alt:t,loading:"lazy",decoding:"async",draggable:!1,onLoad:v,onError:R}),c==="loading"&&n.jsx("span",{className:"secure-image__loading","aria-hidden":"true",children:n.jsx("span",{})}),(c==="blocked"||c==="error")&&n.jsx("span",{className:"secure-image__fallback",role:"img","aria-label":j,children:c==="blocked"?n.jsx(Mm,{size:18}):n.jsx(zr,{size:18})})]})}const Jg={note:ss,text:ht,"ai-task":nn,image:sn,mask:sn,video:rn,embed:ln,code:on,markdown:ht,"csv-table":ht,memo:ss,pdf:ht,file:yr,directory:Tm,"template-launcher":ht,"remote-monitor":os,"remote-control":os},tr=[{key:"Auto",label:"Auto Detect",description:"Infer whether this note is growth, revenue, build, or research work."},{key:"GeneralCompany",label:"General AI Company",description:"Balanced planning, practical work, and artifact production."},{key:"GrowthValidation",label:"Growth Validation",description:"Marketing loops, signals, messaging, distribution, and experiments."},{key:"RevenueAffiliate",label:"Revenue / Affiliate",description:"Affiliate discovery, keywords, content assets, and revenue experiments."},{key:"ProductBuild",label:"Product Build",description:"Specs, implementation-oriented work, artifacts, and approval gates."},{key:"ResearchOnly",label:"Research Only",description:"Evidence gathering, risks, synthesis, and recommendations."}],_l=500,Zg=48,Qg=new Set(["mindcanvasagent","agentcommand"]),eh=new Set(["codenote","code-note"]),th=["multidesktopmonitor","remotehubmonitor","remotefleetmonitor","smartviewmonitor"],ah=["remotedevice","remotefleetdevice","remotecontrol"];function nh(e){const t=dn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=dn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=dn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-monitor"||t==="remotefleetmonitor"||o==="fleet-monitor"||r==="remote-fleet@1"||Vd(e,["RemoteFleetViewMode","RemoteFleetHubStatus","RemoteFleetDevicesJson","RemoteFleetDeviceCount","RemoteFleetConnectedDeviceCount","RemoteFleetProjectionMode","RemoteFleetCanvasPagination","RemoteHub","RemoteRoute","RemotePage","RemoteVisibleBudget"])||Wd(e,th,["remote","monitor"])}function oh(e){const t=dn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=dn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=dn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-control"||t==="remotefleetdevice"||o==="fleet-device"||r==="remote-fleet-device@1"||Vd(e,["RemoteFleetDeviceId","RemoteFleetDeviceName","RemoteFleetDevicePlatform","RemoteFleetDeviceConnected","RemoteFleetDeviceCanControl","RemoteFleetSourceMonitorNodeId"])||Wd(e,ah,["remote","control"])}function Wd(e,t,o){const r=(e.tags??[]).map(b=>b.trim().toLowerCase()).filter(Boolean),d=o.every(b=>r.includes(b)),m=[e.title,e.body,e.sourceFilePath,e.assetUrl,...r].join(" ").toLowerCase().replace(/[^a-z0-9]+/g,"");return d||t.some(b=>m.includes(b))}function dn(e,...t){const o=e.metadata??{};for(const d of t){const p=o[d];if(p!=null)return String(p)}const r=new Set(t.map(d=>d.toLowerCase()));for(const[d,p]of Object.entries(o))if(r.has(d.toLowerCase())&&p!==void 0&&p!==null)return String(p);return""}function Vd(e,t){const o=e.metadata??{},r=new Set(t.map(d=>d.toLowerCase()));return Object.entries(o).some(([d,p])=>r.has(d.toLowerCase())&&p!==void 0&&p!==null&&String(p).trim()!=="")}const Mr=[{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"}],sh=g.memo(function({node:t,selected:o,pulsing:r,connectionDraft:d,onSelect:p,onDragStart:m,onResizeStart:b,onPatch:c,onDelete:y,onDuplicate:v,onRun:R,onPin:j,onOpenResult:P,onToggleAiReference:V,onCopyNode:F,onCopyEmbedReference:B,onFitNodeHeight:J,onToggleNodeExpanded:ne,onToggleWordWrap:ge,onStageCompany:xe,onOpenCompanyGraph:je,onSyncCompanyGoal:he,onRefreshCompany:Ye,onSetCompanyStatus:rt,onRemoveCompany:it,onOpenAsset:me,onOpenDirectorySettings:X,onScanDirectory:re,onCreateRemoteControl:Q,onGenerateTemplateCard:bt}){var nt,Mt,sa,Ea,Ut,Pa,ee,Ve,_a,vn,I,G,se,jn,Tt,Da,Ba,In,Nn,Oa,An,ra,Mn,$a,ia,Ht,Be,Ee,Fa,Tn,Rn,la,da,za,Wt;const O=String(((nt=t.metadata)==null?void 0:nt.AutomationNodeKind)||((Mt=t.metadata)==null?void 0:Mt.AutomationTemplateKey)||((sa=t.metadata)==null?void 0:sa.AutomationInferredKind)||"").trim().toLowerCase(),lt=String(((Ea=t.metadata)==null?void 0:Ea.SemanticType)||((Ut=t.metadata)==null?void 0:Ut.semanticType)||"").trim().toLowerCase(),U=t.kind==="memo"&&Qg.has(lt),oe=t.kind==="memo"&&eh.has(lt),ka=String(((Pa=t.metadata)==null?void 0:Pa.AgentCommandStatus)||"Draft"),ye=String(((ee=t.metadata)==null?void 0:ee.AgentCommandMode)||"Task"),dt=String(((Ve=t.metadata)==null?void 0:Ve.AgentCommandRequestedRole)||"Researcher"),St=String(((_a=t.metadata)==null?void 0:_a.CodeNoteStatus)||"Draft"),Qt=String(((vn=t.metadata)==null?void 0:vn.CodeNoteSyncState)||"Unlinked"),ea=String(((I=t.metadata)==null?void 0:I.CodeNoteKind)||"Feature"),lo=U?nn:oe?on:O==="image-generate"?sn:O==="video-generate"?rn:Jg[t.kind],ze=d&&d.from!==t.id,co=t.kind==="ai-task",Dt=t.kind==="pdf"||t.kind==="file"||t.kind==="directory",yt=nh(t),we=oh(t),te=yt||we,bs=yt?"monitor":we?"control":"",Te=t.kind==="template-launcher"||String(((G=t.metadata)==null?void 0:G.semanticType)||((se=t.metadata)==null?void 0:se.SemanticType)||"").toLowerCase()==="templatelauncher",Qe=t.kind==="video",ce=t.kind==="embed",Re=t.kind==="mask",Ue=t.kind==="memo",uo=t.kind==="markdown",fe=t.kind==="csv-table",Oe=Ue?gh(t):null,Bt=g.useRef(null),wt=Qe?Gd(t):"",Ne=Qe?fh(t):"",ct=ce?bh(t):"",$e=ce?yh(t):"",mo=ce?xh(t,ct):"",Sa=ce?Ch(t):"",Ae=(((jn=t.imageStack)==null?void 0:jn.variants)??[]).filter(x=>!!x.imageUrl),He=Ae.find(x=>{var L;return x.variantId===((L=t.imageStack)==null?void 0:L.activeVariantId)})??Ae[0]??null,Ot=t.kind==="image"||Re?(He==null?void 0:He.imageUrl)||Xr(t):"",po=He?Ae.findIndex(x=>x.variantId===He.variantId):-1,wa=!Ot&&!Dt&&!te&&!Te&&!Qe&&!ce,go=wa&&!Ue,Xe=t.isExpanded===!1&&Number(t.originalHeight??0)>t.height+1,We=!te&&!["image","mask","video","embed","pdf","file","directory","template-launcher","remote-monitor","remote-control"].includes(t.kind),_e=t.aiEnabled!==!1,va=hh(t),ho=!!(t.isChunkedText||((Tt=t.metadata)==null?void 0:Tt.IsChunkedText)==="true"),be=Number(t.totalLineCount??((Da=t.metadata)==null?void 0:Da.TotalLineCount)??0),ja=t.sourceFilePath||((Ba=t.metadata)==null?void 0:Ba.FileName)||t.title,fo=ho?n.jsxs("div",{className:"node-chunked-text-state","data-testid":"node-chunked-text-state",title:ja,children:[n.jsx(ht,{size:12}),n.jsx("strong",{children:"Chunked text"}),Number.isFinite(be)&&be>0&&n.jsxs("span",{children:[be.toLocaleString()," lines"]})]}):null,pn=t.kind==="directory"?(In=t.metadata)==null?void 0:In.Include:null,Le=t.kind==="directory"?(Nn=t.metadata)==null?void 0:Nn.Exclude:null,xt=t.kind==="directory"?(Oa=t.metadata)==null?void 0:Oa.DirectoryFileCount:null,$t=t.kind==="directory"?(An=t.metadata)==null?void 0:An.DirectoryDirCount:null,Ia=t.kind==="directory"?(ra=t.metadata)==null?void 0:ra.DirectoryLastScanUtc:null,[bo,De]=g.useState(!1),[gn,hn]=g.useState(null),[fn,Na]=g.useState(((Mn=t.metadata)==null?void 0:Mn.CompanyExecutionMode)||"Auto"),[vt,bn]=g.useState((($a=t.metadata)==null?void 0:$a.CompanySubAgents)!=="false"),[yn,Ft]=g.useState(!1),[qe,xn]=g.useState(null),ta=g.useMemo(()=>fe?dh(t.body,qe):null,[qe,fe,t.body]),ie=g.useMemo(()=>Te?gd(t.body):null,[Te,t.body]),et=(ie==null?void 0:ie.options.find(x=>x.id===ie.selectedOptionId))??(ie==null?void 0:ie.options[0])??null,ut=qu(ie),jt=tr.find(x=>x.key===fn)||tr[0],It=String(((ia=t.metadata)==null?void 0:ia.CompanyStatus)||(t.companyMode?"Staged":"")).trim(),Ct=It.toLowerCase(),ys=Ct==="paused",Cn=Ct==="archived",yo=x=>{x.stopPropagation();const L=x.currentTarget.getBoundingClientRect();hn(ih(L)),De(le=>!le)},aa=x=>{x.stopPropagation(),xe(t.id,{executionMode:jt.key,enableSubAgents:vt}),De(!1)},xs=x=>{x.stopPropagation(),je(t.id)},kn=(x,L)=>{L.stopPropagation();const le=Ae.find($=>$.variantId===x);!le||!t.imageStack||le.variantId===t.imageStack.activeVariantId||(f.emit("node.imageStack.variant",{nodeId:t.id,variantId:le.variantId,variantCount:Ae.length}),c(t.id,{imageUrl:le.imageUrl,imageStack:{...t.imageStack,activeVariantId:le.variantId,variants:Ae,updatedAtUtc:new Date().toISOString()},metadata:{...t.metadata??{},ImageStackActiveVariantId:le.variantId}}))},na=(x,L)=>{if(L.stopPropagation(),!!Ue){if((Oe==null?void 0:Oe.key)===x){Ft(!1);return}f.emit("node.memoColor.changed",{id:t.id,colorKey:x}),c(t.id,{metadata:{...t.metadata??{},memoColor:x,memoColorIsCustom:"true"}}),Ft(!1)}},Sn=x=>{var ca,Ua;if(x.stopPropagation(),!U)return;const L=(t.body||t.title||"Agent command objective").trim(),le=["Clarify the objective and constraints.","Collect linked canvas context or code notes.","Draft an execution plan before external adapter use."],$=["canvas-context","agent-command-planning","adapter-gated-execution"],Pe=["Canvas.ListAgentCommands","Canvas.UpdateAgentCommand","Canvas.PlanAgentCommand","Canvas.SetAgentCommandState"],Rt=["MindCanvasAgent",ye,dt],Fe=["Local React plan staged for this Agent Command.",`Role: ${dt}`,`Mode: ${ye}`,`Objective: ${L.slice(0,220)}`,"External execution remains adapter-gated until LocalBridge/agent runtime is available."].join(`
2
2
  `);f.emit("mindcanvas.agentCommand.planned",{id:t.id,mode:ye,requestedRole:dt,adapterState:((ca=t.metadata)==null?void 0:ca.AdapterState)??"adapter-gated"}),c(t.id,{tags:["Agent Command",dt,"Planned"],metadata:{...t.metadata??{},AgentCommandStatus:"Planned",AgentCommandPlannerSummary:Fe,AgentCommandPlanSteps:JSON.stringify(le),AgentCommandPlannedSkills:JSON.stringify($),AgentCommandPlannedTools:JSON.stringify(Pe),AgentCommandPlannedConcepts:JSON.stringify(Rt),AgentCommandLastExplorationPhase:"planned-local",AdapterState:((Ua=t.metadata)==null?void 0:Ua.AdapterState)??"adapter-gated"}})},Nt=x=>{var Pe,Rt;if(x.stopPropagation(),!U)return;const L=new Date().toISOString(),le=[`Agent Command: ${t.title||"Agent"}`,`Status: Completed locally at ${L}`,"","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
- `),$=[`${L} Local React execution staged.`,`${L} Adapter gated; no external tools invoked.`];f.emit("mindcanvas.agentCommand.executed.local",{id:t.id,mode:ye,requestedRole:dt,adapterState:((Pe=t.metadata)==null?void 0:Pe.AdapterState)??"adapter-gated"}),c(t.id,{status:"done",result:le,tags:["Agent Command",dt,"Completed"],metadata:{...t.metadata??{},AgentCommandStatus:"Completed",AgentCommandLastExecutedAtUtc:L,AgentCommandConsoleLogs:JSON.stringify($),AgentCommandResultLinks:JSON.stringify([]),AdapterState:((Rt=t.metadata)==null?void 0:Rt.AdapterState)??"adapter-gated"}})},Aa=(x,L,le,$)=>{var Rt,Fe,ca;if(x.stopPropagation(),!oe)return;const Pe=L==="Implemented"?JSON.stringify([`local-code-note://${t.id}/implementation-handoff.md`]):((Rt=t.metadata)==null?void 0:Rt.CodeNoteOutputArtifacts)||"[]";f.emit("mindcanvas.codeNote.state",{id:t.id,status:L,syncState:le,reason:$,adapterState:((Fe=t.metadata)==null?void 0:Fe.AdapterState)??"local-canvas-only"}),c(t.id,{tags:["Code Note",L,le],metadata:{...t.metadata??{},CodeNoteStatus:L,CodeNoteSyncState:le,CodeNoteOutputArtifacts:Pe,...L==="Implemented"||L==="Reviewed"?{CodeNoteLastAppliedAtUtc:new Date().toISOString()}:{},AdapterState:((ca=t.metadata)==null?void 0:ca.AdapterState)??"local-canvas-only"}})},oa=()=>{bn(x=>!x)},zt=async x=>{if(x.stopPropagation(),!Ne||!Bt.current){f.emit("node.video.unavailable",{id:t.id,reason:Ne?"element-missing":"source-missing"});return}try{await Bt.current.play(),f.emit("node.video.play",{id:t.id,sourceKind:Dl(Ne)})}catch(L){f.emit("node.video.unavailable",{id:t.id,reason:L instanceof Error?L.message:String(L)})}},xo=x=>{if(x.stopPropagation(),!Ne||!Bt.current){f.emit("node.video.unavailable",{id:t.id,reason:Ne?"element-missing":"source-missing"});return}Bt.current.pause(),f.emit("node.video.pause",{id:t.id,sourceKind:Dl(Ne)})},tt=x=>{x.stopPropagation(),ct&&B(t.id,ct)},Ma=x=>{c(t.id,{body:JSON.stringify(x),metadata:{...t.metadata??{},templateLauncherSelectedOptionId:x.selectedOptionId??""}})},At=(x,L)=>{if(L.stopPropagation(),!ie)return;const le=Zu(ie,x);Ma(le),f.emit("templateCard.option.select",{nodeId:t.id,optionId:le.selectedOptionId??null})},Ta=(x,L)=>{if(!ie)return;const le=Qu(ie,x,L);Ma(le),f.emit("templateCard.input.patch",{nodeId:t.id,key:x})},wn=x=>{x.stopPropagation(),!(!ie||ut)&&bt(t.id,ie.selectedOptionId??null,ie.inputValues)},Je=He&&bo?n.jsxs("div",{className:"node-company-launcher","data-testid":"node-company-launcher",style:gn?{left:gn.left,top:gn.top}:void 0,onPointerDown:x=>x.stopPropagation(),onClick:x=>x.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:tr.map(x=>n.jsxs("button",{type:"button",className:x.key===jt.key?"is-selected":"","data-company-mode":x.key,onClick:()=>Na(x.key),children:[n.jsx("strong",{children:x.label}),n.jsx("span",{children:x.description})]},x.key))}),n.jsxs("button",{type:"button",className:"node-company-subagents","aria-pressed":vt,onClick:x=>{x.stopPropagation(),oa()},children:[n.jsx("span",{className:"node-company-toggle-indicator","aria-hidden":"true",children:vt?"On":"Off"}),n.jsxs("span",{children:[n.jsx(yd,{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:()=>De(!1),children:"Cancel"}),n.jsx("button",{type:"button",className:"btn btn-primary","data-testid":"node-company-run-confirm",onClick:aa,children:"Stage Company"})]})]}):null,Ra={width:t.width,height:t.height,transform:`translate3d(${t.x}px, ${t.y}px, 0)`,...Oe?{"--memo-bg":Oe.surface,"--memo-border":Oe.border,"--memo-ink":Oe.ink,"--memo-ring":Oe.ring,"--memo-accent":Oe.swatch}:{}},La=n.jsxs(n.Fragment,{children:[go&&n.jsx("button",{type:"button",title:_e?"Disable AI reference":"Enable AI reference","aria-label":_e?"Disable AI reference":"Enable AI reference",className:_e?"is-active-ai":"is-inactive-ai",onPointerDown:x=>x.stopPropagation(),onClick:()=>V(t.id),children:n.jsx(Tm,{size:13})}),Ue&&n.jsx("button",{type:"button",title:"Change memo color","aria-label":"Change memo color","aria-pressed":yn,className:"is-memo-color-action","data-testid":"node-memo-color-open",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),Ft(L=>!L)},children:n.jsx(xd,{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:x=>x.stopPropagation(),onClick:()=>ge(t.id),children:n.jsx(Rm,{size:13})}),n.jsx("button",{type:"button",title:Ot?"Copy image to clipboard":"Copy content","aria-label":Ot?"Copy image to clipboard":"Copy content",onPointerDown:x=>x.stopPropagation(),onClick:()=>F(t.id),children:n.jsx(ao,{size:13})}),n.jsx("button",{type:"button",title:"Duplicate node","aria-label":"Duplicate node","data-testid":"node-duplicate",onPointerDown:x=>x.stopPropagation(),onClick:()=>v(t.id),children:n.jsx(Cd,{size:13})}),wa&&n.jsx("button",{type:"button",title:"Fit text height","aria-label":"Fit text height",onPointerDown:x=>x.stopPropagation(),onClick:()=>J(t.id),children:n.jsx(Lm,{size:13})}),wa&&n.jsx("button",{type:"button",title:Xe?"Expand node":"Collapse node","aria-label":Xe?"Expand node":"Collapse node","aria-pressed":Xe,onPointerDown:x=>x.stopPropagation(),onClick:()=>ne(t.id),children:Xe?n.jsx(pl,{size:13}):n.jsx(Em,{size:13})}),co&&n.jsx("button",{type:"button",title:"Run node",onPointerDown:x=>x.stopPropagation(),onClick:()=>R(t.id),children:n.jsx(Jt,{size:13})}),He&&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:x=>x.stopPropagation(),onClick:t.companyMode?xs:yo,children:n.jsx(gl,{size:13})}),n.jsx("button",{type:"button",title:"Delete node","aria-label":"Delete node","data-testid":"node-delete",onPointerDown:x=>x.stopPropagation(),onClick:()=>y(t.id),children:n.jsx(rs,{size:13})})]}),ve=co?n.jsxs("div",{className:"node-result-row","data-testid":"node-external-pins",children:[n.jsxs("button",{className:`node-pin node-pin--context ${ze?"can-receive":""}`,type:"button",title:"Context input",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),j(t.id,"context")},children:[n.jsx(hl,{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:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),t.result?P(t.id):j(t.id,"result")},children:[n.jsx(pl,{size:11}),"Result"]})]}):n.jsxs("button",{className:`node-context-source ${d?"can-receive":""}`,type:"button",title:"Use this node as AI Task context",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),j(t.id,"context")},children:[n.jsx(hl,{size:10}),n.jsx("span",{children:"Context"})]}),pe=Re||Ae.length>1||ce||Qe?n.jsxs("div",{className:"node-surface-badges","data-testid":"node-surface-badges",children:[Re&&n.jsx("span",{className:"node-mask-badge",title:"Image edit mask reference",children:"Mask"}),Ae.length>1&&n.jsxs("span",{className:"node-image-stack-badge",title:"Image stack variants",children:[Math.max(1,po+1),"/",Ae.length]}),ce&&n.jsx("span",{className:"node-embed-badge",children:$e==="youtube"?"YouTube":"Embed"}),Qe&&n.jsx("span",{className:"node-video-badge",children:((Wt=t.metadata)==null?void 0:Wt.MediaModel)||((Be=t.metadata)==null?void 0:Be.MediaProvider)||"Video"})]}):null,ko=Ae.length>1||ce||Qe||Dt?n.jsxs("div",{className:"node-surface-actions","data-testid":"node-surface-actions",children:[Ae.length>1&&n.jsx("div",{className:"node-image-stack-rail","aria-label":"Image stack variants",children:Ae.map((x,L)=>n.jsx("button",{type:"button",className:x.variantId===(We==null?void 0:We.variantId)?"is-active":"",title:x.title||x.caption||`Variant ${L+1}`,"aria-label":`Show image variant ${L+1}`,onPointerDown:le=>le.stopPropagation(),onClick:le=>kn(x.variantId,le),children:n.jsx(er,{src:x.imageUrl,traceId:`${t.id}:${x.variantId||L}`,kind:"image-stack-variant",testId:"node-image-stack-thumb"})},x.variantId||`${x.imageUrl}-${L}`))}),ce&&n.jsxs("div",{className:"node-embed-actions",children:[n.jsxs("button",{type:"button",title:"Open embed","aria-label":"Open embed",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),ct&&me(t,"external")},children:[n.jsx(ln,{size:13}),n.jsx("span",{children:"Open"})]}),n.jsxs("button",{type:"button",title:"Copy URL","aria-label":"Copy URL",onPointerDown:x=>x.stopPropagation(),onClick:tt,children:[n.jsx(ao,{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:x=>x.stopPropagation(),onClick:zt,children:[n.jsx(Jt,{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:x=>x.stopPropagation(),onClick:xo,children:[n.jsx(ro,{size:13}),n.jsx("span",{children:"Pause"})]})]}),Dt&&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:x=>x.stopPropagation(),onClick:()=>me(t,"preview"),children:[n.jsx(Pm,{size:13}),n.jsx("span",{children:"Preview"})]}),t.kind!=="directory"&&n.jsxs("button",{type:"button",title:"Open in new tab",onPointerDown:x=>x.stopPropagation(),onClick:()=>me(t,"external"),children:[n.jsx(ln,{size:13}),n.jsx("span",{children:"Open"})]}),t.kind==="directory"&&n.jsxs("button",{type:"button",title:"Scan folder","data-testid":"directory-scan",onPointerDown:x=>x.stopPropagation(),onClick:()=>re(t.id),children:[n.jsx(an,{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:x=>x.stopPropagation(),onClick:()=>X(t.id),children:[n.jsx(Jo,{size:13}),n.jsx("span",{children:"Settings"})]})]})]}):null,So=te?null:n.jsxs("div",{className:"node-external-action-rail","data-testid":"node-external-action-rail",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[ko,n.jsx("div",{className:"node-external-rail__pins",children:ve}),n.jsx("div",{className:"node-actions","data-testid":"node-actions",children:La}),U&&n.jsxs("div",{className:"node-agent-command-actions","data-testid":"node-agent-command-actions",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button","data-testid":"node-agent-command-plan","data-agent-command-action":"plan",onClick:Sn,children:"Plan"}),n.jsx("button",{type:"button","data-testid":"node-agent-command-execute","data-agent-command-action":"execute",disabled:ka==="Running",onClick:Nt,children:"Execute"})]}),oe&&n.jsxs("div",{className:"node-code-note-actions","data-testid":"node-code-note-actions",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button","data-testid":"node-code-note-approve","data-code-note-action":"approve",onClick:x=>Aa(x,"Approved","Planned","approve-local"),children:"Approve"}),n.jsx("button",{type:"button","data-testid":"node-code-note-review","data-code-note-action":"review",onClick:x=>Aa(x,"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:x=>Aa(x,St,"OutOfSync","mark-out-of-sync-local"),children:"Out of sync"})]}),t.companyMode&&n.jsxs("div",{className:"node-company-quick-actions","data-testid":"node-company-quick-actions","data-company-status":It||"Staged",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button",title:"Update Company goal from this note","aria-label":"Update Company goal from this note","data-testid":"node-company-sync-goal",disabled:Cn,onClick:()=>he(t.id),children:n.jsx(kd,{size:12})}),n.jsx("button",{type:"button",title:"Refresh Company status","aria-label":"Refresh Company status","data-testid":"node-company-refresh",onClick:()=>Ge(t.id),children:n.jsx(an,{size:12})}),Cn?n.jsx("button",{type:"button",title:"Company is archived","aria-label":"Company is archived","data-testid":"node-company-archived",disabled:!0,children:n.jsx(xr,{size:12})}):ys?n.jsx("button",{type:"button",title:"Resume Company","aria-label":"Resume Company","data-testid":"node-company-resume",onClick:()=>rt(t.id,"Staged"),children:n.jsx(Jt,{size:12})}):n.jsx("button",{type:"button",title:"Pause Company","aria-label":"Pause Company","data-testid":"node-company-pause",onClick:()=>rt(t.id,"Paused"),children:n.jsx(ro,{size:12})}),!Cn&&n.jsx("button",{type:"button",title:"Archive Company","aria-label":"Archive Company","data-testid":"node-company-archive",onClick:()=>rt(t.id,"Archived"),children:n.jsx(xr,{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:()=>it(t.id),children:n.jsx(gt,{size:12})})]})]}),Cs=te?null:n.jsx("div",{className:"node-external-rail","data-testid":"node-external-rail",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.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(x=>n.jsx("span",{children:x},x)),t.status&&n.jsx("span",{className:`node-status node-status--${t.status}`,children:t.status})]}),pe,fo,U&&n.jsxs("div",{className:"node-agent-command-state","data-testid":"node-agent-command-state","data-agent-command-status":ka,"data-agent-command-mode":ye,"data-agent-command-role":dt,"data-agent-command-adapter-state":((Ee=t.metadata)==null?void 0:Ee.AdapterState)||"adapter-gated",children:[n.jsx(nn,{size:12}),n.jsx("strong",{children:"AC"}),n.jsx("span",{children:ka}),n.jsx("span",{children:ye}),n.jsx("span",{children:dt})]}),oe&&n.jsxs("div",{className:"node-code-note-state","data-testid":"node-code-note-state","data-code-note-status":St,"data-code-note-sync-state":Qt,"data-code-note-kind":ea,"data-code-note-adapter-state":((Fa=t.metadata)==null?void 0:Fa.AdapterState)||"local-canvas-only",children:[n.jsx(on,{size:12}),n.jsx("strong",{children:"CN"}),n.jsx("span",{children:St}),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(gl,{size:12}),n.jsx("strong",{children:((Tn=t.metadata)==null?void 0:Tn.CompanyExecutionModeLabel)||"Company staged"}),n.jsx("span",{children:((Rn=t.metadata)==null?void 0:Rn.CompanySubAgents)==="false"?"single-agent":"sub-agents"})]})]})});return n.jsxs("article",{className:`canvas-node canvas-node--${t.kind} ${te?"canvas-node--remote-surface":""} ${yt?"canvas-node--remote-monitor-surface":""} ${we?"canvas-node--remote-control-surface":""} ${O?`canvas-node--automation-${O}`:""} ${U?"canvas-node--agent-command":""} ${oe?"canvas-node--code-note":""} ${o?"is-selected":""} ${r?"is-pulsing":""} ${_e?"":"is-ai-disabled"} ${t.wordWrap===!1?"is-nowrap":""} ${Xe?"is-collapsed":""} ${t.companyMode?`is-company-${t.companyMode}`:""}`,style:Ra,"data-node-id":t.id,"data-automation-node-kind":O||void 0,"data-automation-external-policy":((la=t.metadata)==null?void 0:la.AutomationExternalActionPolicy)||void 0,"data-media-generation-contract":((da=t.metadata)==null?void 0:da.MediaGenerationContract)||void 0,"data-agent-command-node":U?"true":void 0,"data-agent-command-status":U?ka:void 0,"data-agent-command-mode":U?ye:void 0,"data-agent-command-role":U?dt:void 0,"data-code-note-node":oe?"true":void 0,"data-code-note-status":oe?St:void 0,"data-code-note-sync-state":oe?Qt:void 0,"data-code-note-kind":oe?ea:void 0,"data-remote-surface-chrome":te?"self-contained":void 0,"data-remote-surface-kind":bs||void 0,"data-remote-surface-title-owner":te?"inner-remote-view":void 0,"data-remote-surface-scroll-owner":te?"remote-page-rail":void 0,onPointerDown:x=>{p(t.id,x.shiftKey||x.metaKey||x.ctrlKey),m(t.id,x)},onDoubleClick:x=>{if(t.kind!=="directory")return;const L=x.target instanceof HTMLElement?x.target:null;L!=null&&L.closest('button,input,textarea,select,[contenteditable="true"],[contenteditable=""]')||(x.stopPropagation(),re(t.id))},children:[!te&&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:Te,onPointerDown:x=>x.stopPropagation(),onChange:x=>{Te||c(t.id,{title:x.target.value})}})]}),Je&&typeof document<"u"?Fu.createPortal(Je,document.body):Je,Ue&&yn&&Oe&&n.jsx("div",{className:"node-memo-palette","data-testid":"node-memo-palette",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:Mr.map(x=>n.jsx("button",{type:"button",className:x.key===Oe.key?"is-active":"",title:`${x.label} memo color`,"aria-label":`${x.label} memo color`,"aria-pressed":x.key===Oe.key,"data-memo-color":x.key,style:{"--memo-swatch":x.swatch,"--memo-swatch-ring":x.ring},onPointerDown:L=>L.stopPropagation(),onClick:L=>na(x.key,L)},x.key))}),Ot?n.jsx("div",{className:`node-image-wrap ${Ae.length>1?"node-image-wrap--stack":""} ${Re?"node-image-wrap--mask":""}`,"data-testid":Re?"node-mask-preview":Ae.length>1?"node-image-stack":void 0,children:n.jsx(er,{src:Ot,traceId:t.id,kind:Re?"mask":"node-image",testId:"node-secure-image"})}):yt?n.jsx(qu,{node:t,onPatch:c,onCreateRemoteControl:Q}):we?n.jsx(Ju,{node:t,onPatch:c}):Te?n.jsx("div",{className:"node-template-card","data-testid":"node-template-card",children:ie&&et?n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"node-template-card__summary",children:[n.jsx("strong",{children:ie.prompt||ie.description}),n.jsx("span",{children:et.description||ie.description})]}),n.jsx("div",{className:"node-template-card__options","data-testid":"node-template-card-options",children:ie.options.map(x=>n.jsxs("button",{type:"button",className:x.id===et.id?"is-active":"","data-testid":"node-template-card-option","data-option-id":x.id,onPointerDown:L=>L.stopPropagation(),onClick:L=>At(x.id,L),children:[n.jsx("strong",{children:x.label}),n.jsx("span",{children:x.description})]},x.id||x.templateId))}),n.jsxs("div",{className:"node-template-card__inputs","data-testid":"node-template-card-inputs",children:[et.inputs.map(x=>n.jsx(sh,{input:x,value:ie.inputValues[x.key]??"",onChange:L=>Ta(x.key,L)},x.key)),et.inputs.length===0&&n.jsx("p",{className:"node-template-card__empty",children:ie.noInputsLabel||"No inputs needed."})]}),ut&&n.jsx("div",{className:"node-template-card__validation",children:ut}),n.jsxs("button",{type:"button",className:"node-template-card__generate","data-testid":"node-template-card-generate",disabled:!!ut,onPointerDown:wn,onClick:x=>x.stopPropagation(),children:[n.jsx(Jt,{size:13}),n.jsx("span",{children:ie.generateLabel||ie.actionLabel||"Generate"})]})]}):n.jsx("div",{className:"node-template-card__missing",children:"Template card payload is unavailable."})}):ce?n.jsxs("div",{className:`node-embed-card ${Sa?"has-embed-thumbnail":"is-embed-link"}`,"data-testid":"node-embed-card",children:[n.jsx("div",{className:"node-embed-preview",children:Sa?n.jsx(er,{src:Sa,traceId:t.id,kind:"embed-thumbnail",testId:"node-embed-thumbnail"}):n.jsxs("div",{className:"node-embed-placeholder",children:[n.jsx(ln,{size:24}),n.jsx("strong",{children:$e==="youtube"?"YouTube":"Web embed"}),n.jsx("span",{children:mo||ct||"External link"})]})}),n.jsx("textarea",{value:t.body,"aria-label":"Embed URL or description",spellCheck:!1,onPointerDown:x=>x.stopPropagation(),onChange:x=>{const L=x.target.value;c(t.id,{body:L,assetUrl:L,metadata:{...t.metadata??{},sourceUrl:L,url:L}})}}),ct&&n.jsx("span",{className:"node-embed-source",title:ct,children:ct})]}):Qe?n.jsxs("div",{className:`node-video-card ${Ne?"has-video-source":"is-video-prompt"}`,"data-testid":"node-video-card",children:[Ne?n.jsx("video",{ref:Bt,src:Ne,className:"node-video-player","data-testid":"node-video-player",controls:!0,preload:"metadata",onPointerDown:x=>x.stopPropagation()}):n.jsxs("div",{className:"node-video-placeholder",children:[n.jsx(rn,{size:24}),n.jsx("strong",{children:"Video prompt"}),n.jsx("span",{children:((za=t.metadata)==null?void 0:za.MediaModel)||((Ht=t.metadata)==null?void 0:Ht.MediaProvider)||"Adapter gated"})]}),n.jsx("textarea",{value:t.body,"aria-label":"Video prompt or source",spellCheck:!1,onPointerDown:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.target.value})}),Ne&&n.jsx("span",{className:"node-video-source",title:wt,children:wt})]}):Dt?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:va,children:va}),n.jsx("span",{children:t.kind==="directory"?"Directory reference":t.kind==="pdf"?"PDF document":"File reference"}),t.kind==="directory"&&(pn||Le||xt||$t||Ia)&&n.jsxs("dl",{className:"node-asset-meta","data-testid":"node-directory-meta",children:[(xt||$t)&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Scanned"}),n.jsxs("dd",{children:[Number(xt??0).toLocaleString()," files / ",Number($t??0).toLocaleString()," folders"]})]}),pn&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Include"}),n.jsx("dd",{children:pn})]}),Le&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Exclude"}),n.jsx("dd",{children:Le})]}),Ia&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Updated"}),n.jsx("dd",{children:new Date(Ia).toLocaleString()})]})]})]})]}):fe?n.jsxs("div",{className:"node-csv-card","data-testid":"node-csv-card",children:[n.jsx(ih,{preview:ta,sort:qe,onSort:x=>{const L=(qe==null?void 0:qe.columnIndex)===x&&qe.direction==="asc"?"desc":"asc";xn({columnIndex:x,direction:L}),f.emit("node.csvTable.sort",{id:t.id,columnIndex:x,direction:L})}}),n.jsx("textarea",{value:t.body,"aria-label":"CSV source",spellCheck:!1,wrap:"off",onPointerDown:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.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(uh,{value:t.body})}),n.jsx("textarea",{value:t.body,"aria-label":"Markdown source",spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.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:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.target.value})})}),Cs,So,n.jsx("button",{type:"button",className:"node-resize-handle",title:"Resize node","aria-label":"Resize node",onPointerDown:x=>b(t.id,x)})]})});function sh({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 rh(e){const r=Math.min(430,window.innerHeight-24),d=Math.max(12,window.innerWidth-332-12),p=Math.min(Math.max(e.right-332,12),d),m=e.bottom+8,b=e.top-r-8,c=Math.max(12,window.innerHeight-r-12),y=m<=c?m:Math.max(12,b);return{left:p,top:Math.min(y,c)}}function ih({preview:e,sort:t,onSort:o}){return!e||e.headers.length===0?n.jsx("div",{className:"csv-table-scroll mindcanvas-text-scrollable-view","data-testid":"csv-table-preview","aria-label":"CSV table preview",children:n.jsx("p",{className:"node-md-empty",children:"Paste CSV source to preview a table."})}):n.jsxs("div",{className:"csv-table-scroll mindcanvas-text-scrollable-view","data-testid":"csv-table-preview","data-sort-column":(t==null?void 0:t.columnIndex)??"","data-sort-direction":(t==null?void 0:t.direction)??"","data-total-rows":e.totalRows,"data-rendered-rows":e.renderedRows,"aria-label":"CSV table preview",onPointerDown:r=>r.stopPropagation(),children:[n.jsxs("table",{className:"csv-table",children:[n.jsx("thead",{children:n.jsx("tr",{children:e.headers.map((r,d)=>{const p=(t==null?void 0:t.columnIndex)===d,m=p&&t.direction==="asc"?"descending":"ascending";return n.jsx("th",{"aria-sort":p?t.direction==="asc"?"ascending":"descending":"none",children:n.jsxs("button",{type:"button",className:`csv-table-header-button ${p?"is-active":""}`,"data-testid":`csv-table-sort-${d}`,"aria-label":`Sort CSV by ${r||`Column ${d+1}`} ${m}`,onClick:()=>o(d),children:[n.jsx("span",{children:r||`Column ${d+1}`}),p&&n.jsx("small",{children:t.direction==="asc"?"Asc":"Desc"})]})},`${r}-${d}`)})})}),n.jsx("tbody",{children:e.rows.map((r,d)=>n.jsx("tr",{children:e.headers.map((p,m)=>n.jsx("td",{className:"csv-table-cell",children:r[m]??""},`csv-cell-${d}-${m}`))},`csv-row-${d}`))})]}),n.jsxs("div",{className:"csv-table-status",children:[n.jsxs("span",{children:[e.totalRows.toLocaleString()," rows"]}),n.jsxs("span",{children:[e.columnCount.toLocaleString()," columns"]}),e.truncated&&n.jsxs("span",{children:["showing ",e.renderedRows.toLocaleString()]})]})]})}function lh(e,t){const o=dh(e,Pl+1);if(o.length===0)return null;const r=Math.min(Jg,Math.max(...o.map(c=>c.length),1)),d=_l(o[0],r).map((c,y)=>c.trim()||`Column ${y+1}`),p=o.slice(1,Pl+1).map(c=>_l(c,r)),m=t?[...p].sort((c,y)=>ch(c[t.columnIndex]??"",y[t.columnIndex]??"",t.direction)):p,b=Math.max(0,String(e||"").split(/\r\n|\n|\r/).filter(c=>c.length>0).length-1);return{headers:d,rows:m,totalRows:b,columnCount:r,renderedRows:m.length,truncated:b>m.length}}function dh(e,t){const o=[];let r=[],d="",p=!1;const m=String(e||"").replace(/\r\n/g,`
3
+ `),$=[`${L} Local React execution staged.`,`${L} Adapter gated; no external tools invoked.`];f.emit("mindcanvas.agentCommand.executed.local",{id:t.id,mode:ye,requestedRole:dt,adapterState:((Pe=t.metadata)==null?void 0:Pe.AdapterState)??"adapter-gated"}),c(t.id,{status:"done",result:le,tags:["Agent Command",dt,"Completed"],metadata:{...t.metadata??{},AgentCommandStatus:"Completed",AgentCommandLastExecutedAtUtc:L,AgentCommandConsoleLogs:JSON.stringify($),AgentCommandResultLinks:JSON.stringify([]),AdapterState:((Rt=t.metadata)==null?void 0:Rt.AdapterState)??"adapter-gated"}})},Aa=(x,L,le,$)=>{var Rt,Fe,ca;if(x.stopPropagation(),!oe)return;const Pe=L==="Implemented"?JSON.stringify([`local-code-note://${t.id}/implementation-handoff.md`]):((Rt=t.metadata)==null?void 0:Rt.CodeNoteOutputArtifacts)||"[]";f.emit("mindcanvas.codeNote.state",{id:t.id,status:L,syncState:le,reason:$,adapterState:((Fe=t.metadata)==null?void 0:Fe.AdapterState)??"local-canvas-only"}),c(t.id,{tags:["Code Note",L,le],metadata:{...t.metadata??{},CodeNoteStatus:L,CodeNoteSyncState:le,CodeNoteOutputArtifacts:Pe,...L==="Implemented"||L==="Reviewed"?{CodeNoteLastAppliedAtUtc:new Date().toISOString()}:{},AdapterState:((ca=t.metadata)==null?void 0:ca.AdapterState)??"local-canvas-only"}})},oa=()=>{bn(x=>!x)},zt=async x=>{if(x.stopPropagation(),!Ne||!Bt.current){f.emit("node.video.unavailable",{id:t.id,reason:Ne?"element-missing":"source-missing"});return}try{await Bt.current.play(),f.emit("node.video.play",{id:t.id,sourceKind:Bl(Ne)})}catch(L){f.emit("node.video.unavailable",{id:t.id,reason:L instanceof Error?L.message:String(L)})}},xo=x=>{if(x.stopPropagation(),!Ne||!Bt.current){f.emit("node.video.unavailable",{id:t.id,reason:Ne?"element-missing":"source-missing"});return}Bt.current.pause(),f.emit("node.video.pause",{id:t.id,sourceKind:Bl(Ne)})},tt=x=>{x.stopPropagation(),ct&&B(t.id,ct)},Ma=x=>{c(t.id,{body:JSON.stringify(x),metadata:{...t.metadata??{},templateLauncherSelectedOptionId:x.selectedOptionId??""}})},At=(x,L)=>{if(L.stopPropagation(),!ie)return;const le=Qu(ie,x);Ma(le),f.emit("templateCard.option.select",{nodeId:t.id,optionId:le.selectedOptionId??null})},Ta=(x,L)=>{if(!ie)return;const le=em(ie,x,L);Ma(le),f.emit("templateCard.input.patch",{nodeId:t.id,key:x})},wn=x=>{x.stopPropagation(),!(!ie||ut)&&bt(t.id,ie.selectedOptionId??null,ie.inputValues)},Je=We&&bo?n.jsxs("div",{className:"node-company-launcher","data-testid":"node-company-launcher",style:gn?{left:gn.left,top:gn.top}:void 0,onPointerDown:x=>x.stopPropagation(),onClick:x=>x.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:tr.map(x=>n.jsxs("button",{type:"button",className:x.key===jt.key?"is-selected":"","data-company-mode":x.key,onClick:()=>Na(x.key),children:[n.jsx("strong",{children:x.label}),n.jsx("span",{children:x.description})]},x.key))}),n.jsxs("button",{type:"button",className:"node-company-subagents","aria-pressed":vt,onClick:x=>{x.stopPropagation(),oa()},children:[n.jsx("span",{className:"node-company-toggle-indicator","aria-hidden":"true",children:vt?"On":"Off"}),n.jsxs("span",{children:[n.jsx(xd,{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:()=>De(!1),children:"Cancel"}),n.jsx("button",{type:"button",className:"btn btn-primary","data-testid":"node-company-run-confirm",onClick:aa,children:"Stage Company"})]})]}):null,Ra={width:t.width,height:t.height,transform:`translate3d(${t.x}px, ${t.y}px, 0)`,...Oe?{"--memo-bg":Oe.surface,"--memo-border":Oe.border,"--memo-ink":Oe.ink,"--memo-ring":Oe.ring,"--memo-accent":Oe.swatch}:{}},La=n.jsxs(n.Fragment,{children:[go&&n.jsx("button",{type:"button",title:_e?"Disable AI reference":"Enable AI reference","aria-label":_e?"Disable AI reference":"Enable AI reference",className:_e?"is-active-ai":"is-inactive-ai",onPointerDown:x=>x.stopPropagation(),onClick:()=>V(t.id),children:n.jsx(Rm,{size:13})}),Ue&&n.jsx("button",{type:"button",title:"Change memo color","aria-label":"Change memo color","aria-pressed":yn,className:"is-memo-color-action","data-testid":"node-memo-color-open",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),Ft(L=>!L)},children:n.jsx(Cd,{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:x=>x.stopPropagation(),onClick:()=>ge(t.id),children:n.jsx(Lm,{size:13})}),n.jsx("button",{type:"button",title:Ot?"Copy image to clipboard":"Copy content","aria-label":Ot?"Copy image to clipboard":"Copy content",onPointerDown:x=>x.stopPropagation(),onClick:()=>F(t.id),children:n.jsx(ao,{size:13})}),n.jsx("button",{type:"button",title:"Duplicate node","aria-label":"Duplicate node","data-testid":"node-duplicate",onPointerDown:x=>x.stopPropagation(),onClick:()=>v(t.id),children:n.jsx(kd,{size:13})}),wa&&n.jsx("button",{type:"button",title:"Fit text height","aria-label":"Fit text height",onPointerDown:x=>x.stopPropagation(),onClick:()=>J(t.id),children:n.jsx(Em,{size:13})}),wa&&n.jsx("button",{type:"button",title:Xe?"Expand node":"Collapse node","aria-label":Xe?"Expand node":"Collapse node","aria-pressed":Xe,onPointerDown:x=>x.stopPropagation(),onClick:()=>ne(t.id),children:Xe?n.jsx(gl,{size:13}):n.jsx(Pm,{size:13})}),co&&n.jsx("button",{type:"button",title:"Run node",onPointerDown:x=>x.stopPropagation(),onClick:()=>R(t.id),children:n.jsx(Jt,{size:13})}),We&&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:x=>x.stopPropagation(),onClick:t.companyMode?xs:yo,children:n.jsx(hl,{size:13})}),n.jsx("button",{type:"button",title:"Delete node","aria-label":"Delete node","data-testid":"node-delete",onPointerDown:x=>x.stopPropagation(),onClick:()=>y(t.id),children:n.jsx(rs,{size:13})})]}),ve=co?n.jsxs("div",{className:"node-result-row","data-testid":"node-external-pins",children:[n.jsxs("button",{className:`node-pin node-pin--context ${ze?"can-receive":""}`,type:"button",title:"Context input",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),j(t.id,"context")},children:[n.jsx(fl,{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:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),t.result?P(t.id):j(t.id,"result")},children:[n.jsx(gl,{size:11}),"Result"]})]}):n.jsxs("button",{className:`node-context-source ${d?"can-receive":""}`,type:"button",title:"Use this node as AI Task context",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),j(t.id,"context")},children:[n.jsx(fl,{size:10}),n.jsx("span",{children:"Context"})]}),pe=Re||Ae.length>1||ce||Qe?n.jsxs("div",{className:"node-surface-badges","data-testid":"node-surface-badges",children:[Re&&n.jsx("span",{className:"node-mask-badge",title:"Image edit mask reference",children:"Mask"}),Ae.length>1&&n.jsxs("span",{className:"node-image-stack-badge",title:"Image stack variants",children:[Math.max(1,po+1),"/",Ae.length]}),ce&&n.jsx("span",{className:"node-embed-badge",children:$e==="youtube"?"YouTube":"Embed"}),Qe&&n.jsx("span",{className:"node-video-badge",children:((Ht=t.metadata)==null?void 0:Ht.MediaModel)||((Be=t.metadata)==null?void 0:Be.MediaProvider)||"Video"})]}):null,ko=Ae.length>1||ce||Qe||Dt?n.jsxs("div",{className:"node-surface-actions","data-testid":"node-surface-actions",children:[Ae.length>1&&n.jsx("div",{className:"node-image-stack-rail","aria-label":"Image stack variants",children:Ae.map((x,L)=>n.jsx("button",{type:"button",className:x.variantId===(He==null?void 0:He.variantId)?"is-active":"",title:x.title||x.caption||`Variant ${L+1}`,"aria-label":`Show image variant ${L+1}`,onPointerDown:le=>le.stopPropagation(),onClick:le=>kn(x.variantId,le),children:n.jsx(er,{src:x.imageUrl,traceId:`${t.id}:${x.variantId||L}`,kind:"image-stack-variant",testId:"node-image-stack-thumb"})},x.variantId||`${x.imageUrl}-${L}`))}),ce&&n.jsxs("div",{className:"node-embed-actions",children:[n.jsxs("button",{type:"button",title:"Open embed","aria-label":"Open embed",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),ct&&me(t,"external")},children:[n.jsx(ln,{size:13}),n.jsx("span",{children:"Open"})]}),n.jsxs("button",{type:"button",title:"Copy URL","aria-label":"Copy URL",onPointerDown:x=>x.stopPropagation(),onClick:tt,children:[n.jsx(ao,{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:x=>x.stopPropagation(),onClick:zt,children:[n.jsx(Jt,{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:x=>x.stopPropagation(),onClick:xo,children:[n.jsx(ro,{size:13}),n.jsx("span",{children:"Pause"})]})]}),Dt&&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:x=>x.stopPropagation(),onClick:()=>me(t,"preview"),children:[n.jsx(_m,{size:13}),n.jsx("span",{children:"Preview"})]}),t.kind!=="directory"&&n.jsxs("button",{type:"button",title:"Open in new tab",onPointerDown:x=>x.stopPropagation(),onClick:()=>me(t,"external"),children:[n.jsx(ln,{size:13}),n.jsx("span",{children:"Open"})]}),t.kind==="directory"&&n.jsxs("button",{type:"button",title:"Scan folder","data-testid":"directory-scan",onPointerDown:x=>x.stopPropagation(),onClick:()=>re(t.id),children:[n.jsx(an,{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:x=>x.stopPropagation(),onClick:()=>X(t.id),children:[n.jsx(Jo,{size:13}),n.jsx("span",{children:"Settings"})]})]})]}):null,So=te?null:n.jsxs("div",{className:"node-external-action-rail","data-testid":"node-external-action-rail",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[ko,n.jsx("div",{className:"node-external-rail__pins",children:ve}),n.jsx("div",{className:"node-actions","data-testid":"node-actions",children:La}),U&&n.jsxs("div",{className:"node-agent-command-actions","data-testid":"node-agent-command-actions",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button","data-testid":"node-agent-command-plan","data-agent-command-action":"plan",onClick:Sn,children:"Plan"}),n.jsx("button",{type:"button","data-testid":"node-agent-command-execute","data-agent-command-action":"execute",disabled:ka==="Running",onClick:Nt,children:"Execute"})]}),oe&&n.jsxs("div",{className:"node-code-note-actions","data-testid":"node-code-note-actions",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button","data-testid":"node-code-note-approve","data-code-note-action":"approve",onClick:x=>Aa(x,"Approved","Planned","approve-local"),children:"Approve"}),n.jsx("button",{type:"button","data-testid":"node-code-note-review","data-code-note-action":"review",onClick:x=>Aa(x,"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:x=>Aa(x,St,"OutOfSync","mark-out-of-sync-local"),children:"Out of sync"})]}),t.companyMode&&n.jsxs("div",{className:"node-company-quick-actions","data-testid":"node-company-quick-actions","data-company-status":It||"Staged",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button",title:"Update Company goal from this note","aria-label":"Update Company goal from this note","data-testid":"node-company-sync-goal",disabled:Cn,onClick:()=>he(t.id),children:n.jsx(Sd,{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(an,{size:12})}),Cn?n.jsx("button",{type:"button",title:"Company is archived","aria-label":"Company is archived","data-testid":"node-company-archived",disabled:!0,children:n.jsx(xr,{size:12})}):ys?n.jsx("button",{type:"button",title:"Resume Company","aria-label":"Resume Company","data-testid":"node-company-resume",onClick:()=>rt(t.id,"Staged"),children:n.jsx(Jt,{size:12})}):n.jsx("button",{type:"button",title:"Pause Company","aria-label":"Pause Company","data-testid":"node-company-pause",onClick:()=>rt(t.id,"Paused"),children:n.jsx(ro,{size:12})}),!Cn&&n.jsx("button",{type:"button",title:"Archive Company","aria-label":"Archive Company","data-testid":"node-company-archive",onClick:()=>rt(t.id,"Archived"),children:n.jsx(xr,{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:()=>it(t.id),children:n.jsx(gt,{size:12})})]})]}),Cs=te?null:n.jsx("div",{className:"node-external-rail","data-testid":"node-external-rail",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.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(x=>n.jsx("span",{children:x},x)),t.status&&n.jsx("span",{className:`node-status node-status--${t.status}`,children:t.status})]}),pe,fo,U&&n.jsxs("div",{className:"node-agent-command-state","data-testid":"node-agent-command-state","data-agent-command-status":ka,"data-agent-command-mode":ye,"data-agent-command-role":dt,"data-agent-command-adapter-state":((Ee=t.metadata)==null?void 0:Ee.AdapterState)||"adapter-gated",children:[n.jsx(nn,{size:12}),n.jsx("strong",{children:"AC"}),n.jsx("span",{children:ka}),n.jsx("span",{children:ye}),n.jsx("span",{children:dt})]}),oe&&n.jsxs("div",{className:"node-code-note-state","data-testid":"node-code-note-state","data-code-note-status":St,"data-code-note-sync-state":Qt,"data-code-note-kind":ea,"data-code-note-adapter-state":((Fa=t.metadata)==null?void 0:Fa.AdapterState)||"local-canvas-only",children:[n.jsx(on,{size:12}),n.jsx("strong",{children:"CN"}),n.jsx("span",{children:St}),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(hl,{size:12}),n.jsx("strong",{children:((Tn=t.metadata)==null?void 0:Tn.CompanyExecutionModeLabel)||"Company staged"}),n.jsx("span",{children:((Rn=t.metadata)==null?void 0:Rn.CompanySubAgents)==="false"?"single-agent":"sub-agents"})]})]})});return n.jsxs("article",{className:`canvas-node canvas-node--${t.kind} ${te?"canvas-node--remote-surface":""} ${yt?"canvas-node--remote-monitor-surface":""} ${we?"canvas-node--remote-control-surface":""} ${O?`canvas-node--automation-${O}`:""} ${U?"canvas-node--agent-command":""} ${oe?"canvas-node--code-note":""} ${o?"is-selected":""} ${r?"is-pulsing":""} ${_e?"":"is-ai-disabled"} ${t.wordWrap===!1?"is-nowrap":""} ${Xe?"is-collapsed":""} ${t.companyMode?`is-company-${t.companyMode}`:""}`,style:Ra,"data-node-id":t.id,"data-automation-node-kind":O||void 0,"data-automation-external-policy":((la=t.metadata)==null?void 0:la.AutomationExternalActionPolicy)||void 0,"data-media-generation-contract":((da=t.metadata)==null?void 0:da.MediaGenerationContract)||void 0,"data-agent-command-node":U?"true":void 0,"data-agent-command-status":U?ka:void 0,"data-agent-command-mode":U?ye:void 0,"data-agent-command-role":U?dt:void 0,"data-code-note-node":oe?"true":void 0,"data-code-note-status":oe?St:void 0,"data-code-note-sync-state":oe?Qt:void 0,"data-code-note-kind":oe?ea:void 0,"data-remote-surface-chrome":te?"self-contained":void 0,"data-remote-surface-kind":bs||void 0,"data-remote-surface-title-owner":te?"inner-remote-view":void 0,"data-remote-surface-scroll-owner":te?"remote-page-rail":void 0,onPointerDown:x=>{p(t.id,x.shiftKey||x.metaKey||x.ctrlKey),m(t.id,x)},onDoubleClick:x=>{if(t.kind!=="directory")return;const L=x.target instanceof HTMLElement?x.target:null;L!=null&&L.closest('button,input,textarea,select,[contenteditable="true"],[contenteditable=""]')||(x.stopPropagation(),re(t.id))},children:[!te&&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:Te,onPointerDown:x=>x.stopPropagation(),onChange:x=>{Te||c(t.id,{title:x.target.value})}})]}),Je&&typeof document<"u"?zu.createPortal(Je,document.body):Je,Ue&&yn&&Oe&&n.jsx("div",{className:"node-memo-palette","data-testid":"node-memo-palette",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:Mr.map(x=>n.jsx("button",{type:"button",className:x.key===Oe.key?"is-active":"",title:`${x.label} memo color`,"aria-label":`${x.label} memo color`,"aria-pressed":x.key===Oe.key,"data-memo-color":x.key,style:{"--memo-swatch":x.swatch,"--memo-swatch-ring":x.ring},onPointerDown:L=>L.stopPropagation(),onClick:L=>na(x.key,L)},x.key))}),Ot?n.jsx("div",{className:`node-image-wrap ${Ae.length>1?"node-image-wrap--stack":""} ${Re?"node-image-wrap--mask":""}`,"data-testid":Re?"node-mask-preview":Ae.length>1?"node-image-stack":void 0,children:n.jsx(er,{src:Ot,traceId:t.id,kind:Re?"mask":"node-image",testId:"node-secure-image"})}):yt?n.jsx(Ju,{node:t,onPatch:c,onCreateRemoteControl:Q}):we?n.jsx(Zu,{node:t,onPatch:c}):Te?n.jsx("div",{className:"node-template-card","data-testid":"node-template-card",children:ie&&et?n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"node-template-card__summary",children:[n.jsx("strong",{children:ie.prompt||ie.description}),n.jsx("span",{children:et.description||ie.description})]}),n.jsx("div",{className:"node-template-card__options","data-testid":"node-template-card-options",children:ie.options.map(x=>n.jsxs("button",{type:"button",className:x.id===et.id?"is-active":"","data-testid":"node-template-card-option","data-option-id":x.id,onPointerDown:L=>L.stopPropagation(),onClick:L=>At(x.id,L),children:[n.jsx("strong",{children:x.label}),n.jsx("span",{children:x.description})]},x.id||x.templateId))}),n.jsxs("div",{className:"node-template-card__inputs","data-testid":"node-template-card-inputs",children:[et.inputs.map(x=>n.jsx(rh,{input:x,value:ie.inputValues[x.key]??"",onChange:L=>Ta(x.key,L)},x.key)),et.inputs.length===0&&n.jsx("p",{className:"node-template-card__empty",children:ie.noInputsLabel||"No inputs needed."})]}),ut&&n.jsx("div",{className:"node-template-card__validation",children:ut}),n.jsxs("button",{type:"button",className:"node-template-card__generate","data-testid":"node-template-card-generate",disabled:!!ut,onPointerDown:wn,onClick:x=>x.stopPropagation(),children:[n.jsx(Jt,{size:13}),n.jsx("span",{children:ie.generateLabel||ie.actionLabel||"Generate"})]})]}):n.jsx("div",{className:"node-template-card__missing",children:"Template card payload is unavailable."})}):ce?n.jsxs("div",{className:`node-embed-card ${Sa?"has-embed-thumbnail":"is-embed-link"}`,"data-testid":"node-embed-card",children:[n.jsx("div",{className:"node-embed-preview",children:Sa?n.jsx(er,{src:Sa,traceId:t.id,kind:"embed-thumbnail",testId:"node-embed-thumbnail"}):n.jsxs("div",{className:"node-embed-placeholder",children:[n.jsx(ln,{size:24}),n.jsx("strong",{children:$e==="youtube"?"YouTube":"Web embed"}),n.jsx("span",{children:mo||ct||"External link"})]})}),n.jsx("textarea",{value:t.body,"aria-label":"Embed URL or description",spellCheck:!1,onPointerDown:x=>x.stopPropagation(),onChange:x=>{const L=x.target.value;c(t.id,{body:L,assetUrl:L,metadata:{...t.metadata??{},sourceUrl:L,url:L}})}}),ct&&n.jsx("span",{className:"node-embed-source",title:ct,children:ct})]}):Qe?n.jsxs("div",{className:`node-video-card ${Ne?"has-video-source":"is-video-prompt"}`,"data-testid":"node-video-card",children:[Ne?n.jsx("video",{ref:Bt,src:Ne,className:"node-video-player","data-testid":"node-video-player",controls:!0,preload:"metadata",onPointerDown:x=>x.stopPropagation()}):n.jsxs("div",{className:"node-video-placeholder",children:[n.jsx(rn,{size:24}),n.jsx("strong",{children:"Video prompt"}),n.jsx("span",{children:((za=t.metadata)==null?void 0:za.MediaModel)||((Wt=t.metadata)==null?void 0:Wt.MediaProvider)||"Adapter gated"})]}),n.jsx("textarea",{value:t.body,"aria-label":"Video prompt or source",spellCheck:!1,onPointerDown:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.target.value})}),Ne&&n.jsx("span",{className:"node-video-source",title:wt,children:wt})]}):Dt?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:va,children:va}),n.jsx("span",{children:t.kind==="directory"?"Directory reference":t.kind==="pdf"?"PDF document":"File reference"}),t.kind==="directory"&&(pn||Le||xt||$t||Ia)&&n.jsxs("dl",{className:"node-asset-meta","data-testid":"node-directory-meta",children:[(xt||$t)&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Scanned"}),n.jsxs("dd",{children:[Number(xt??0).toLocaleString()," files / ",Number($t??0).toLocaleString()," folders"]})]}),pn&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Include"}),n.jsx("dd",{children:pn})]}),Le&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Exclude"}),n.jsx("dd",{children:Le})]}),Ia&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Updated"}),n.jsx("dd",{children:new Date(Ia).toLocaleString()})]})]})]})]}):fe?n.jsxs("div",{className:"node-csv-card","data-testid":"node-csv-card",children:[n.jsx(lh,{preview:ta,sort:qe,onSort:x=>{const L=(qe==null?void 0:qe.columnIndex)===x&&qe.direction==="asc"?"desc":"asc";xn({columnIndex:x,direction:L}),f.emit("node.csvTable.sort",{id:t.id,columnIndex:x,direction:L})}}),n.jsx("textarea",{value:t.body,"aria-label":"CSV source",spellCheck:!1,wrap:"off",onPointerDown:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.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(mh,{value:t.body})}),n.jsx("textarea",{value:t.body,"aria-label":"Markdown source",spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.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:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.target.value})})}),Cs,So,n.jsx("button",{type:"button",className:"node-resize-handle",title:"Resize node","aria-label":"Resize node",onPointerDown:x=>b(t.id,x)})]})});function rh({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 ih(e){const r=Math.min(430,window.innerHeight-24),d=Math.max(12,window.innerWidth-332-12),p=Math.min(Math.max(e.right-332,12),d),m=e.bottom+8,b=e.top-r-8,c=Math.max(12,window.innerHeight-r-12),y=m<=c?m:Math.max(12,b);return{left:p,top:Math.min(y,c)}}function lh({preview:e,sort:t,onSort:o}){return!e||e.headers.length===0?n.jsx("div",{className:"csv-table-scroll mindcanvas-text-scrollable-view","data-testid":"csv-table-preview","aria-label":"CSV table preview",children:n.jsx("p",{className:"node-md-empty",children:"Paste CSV source to preview a table."})}):n.jsxs("div",{className:"csv-table-scroll mindcanvas-text-scrollable-view","data-testid":"csv-table-preview","data-sort-column":(t==null?void 0:t.columnIndex)??"","data-sort-direction":(t==null?void 0:t.direction)??"","data-total-rows":e.totalRows,"data-rendered-rows":e.renderedRows,"aria-label":"CSV table preview",onPointerDown:r=>r.stopPropagation(),children:[n.jsxs("table",{className:"csv-table",children:[n.jsx("thead",{children:n.jsx("tr",{children:e.headers.map((r,d)=>{const p=(t==null?void 0:t.columnIndex)===d,m=p&&t.direction==="asc"?"descending":"ascending";return n.jsx("th",{"aria-sort":p?t.direction==="asc"?"ascending":"descending":"none",children:n.jsxs("button",{type:"button",className:`csv-table-header-button ${p?"is-active":""}`,"data-testid":`csv-table-sort-${d}`,"aria-label":`Sort CSV by ${r||`Column ${d+1}`} ${m}`,onClick:()=>o(d),children:[n.jsx("span",{children:r||`Column ${d+1}`}),p&&n.jsx("small",{children:t.direction==="asc"?"Asc":"Desc"})]})},`${r}-${d}`)})})}),n.jsx("tbody",{children:e.rows.map((r,d)=>n.jsx("tr",{children:e.headers.map((p,m)=>n.jsx("td",{className:"csv-table-cell",children:r[m]??""},`csv-cell-${d}-${m}`))},`csv-row-${d}`))})]}),n.jsxs("div",{className:"csv-table-status",children:[n.jsxs("span",{children:[e.totalRows.toLocaleString()," rows"]}),n.jsxs("span",{children:[e.columnCount.toLocaleString()," columns"]}),e.truncated&&n.jsxs("span",{children:["showing ",e.renderedRows.toLocaleString()]})]})]})}function dh(e,t){const o=ch(e,_l+1);if(o.length===0)return null;const r=Math.min(Zg,Math.max(...o.map(c=>c.length),1)),d=Dl(o[0],r).map((c,y)=>c.trim()||`Column ${y+1}`),p=o.slice(1,_l+1).map(c=>Dl(c,r)),m=t?[...p].sort((c,y)=>uh(c[t.columnIndex]??"",y[t.columnIndex]??"",t.direction)):p,b=Math.max(0,String(e||"").split(/\r\n|\n|\r/).filter(c=>c.length>0).length-1);return{headers:d,rows:m,totalRows:b,columnCount:r,renderedRows:m.length,truncated:b>m.length}}function ch(e,t){const o=[];let r=[],d="",p=!1;const m=String(e||"").replace(/\r\n/g,`
4
4
  `).replace(/\r/g,`
5
5
  `);for(let b=0;b<m.length;b+=1){const c=m[b],y=m[b+1];if(c==='"'){p&&y==='"'?(d+='"',b+=1):p=!p;continue}if(c===","&&!p){r.push(d),d="";continue}if(c===`
6
- `&&!p){if(r.push(d),r.some(v=>v.trim().length>0)&&o.push(r),r=[],d="",o.length>=t)break;continue}d+=c}return o.length<t&&(d.length>0||r.length>0)&&(r.push(d),r.some(b=>b.trim().length>0)&&o.push(r)),o}function _l(e,t){return Array.from({length:t},(o,r)=>String(e[r]??"").trim())}function ch(e,t,o){const r=Number(e.replace(/,/g,"")),d=Number(t.replace(/,/g,"")),m=Number.isFinite(r)&&Number.isFinite(d)&&e.trim()!==""&&t.trim()!==""?r-d:e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"});return o==="asc"?m:-m}function uh({value:e}){const t=mh(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 mh(e){const t=[];for(const o of String(e||"").replace(/\r\n/g,`
6
+ `&&!p){if(r.push(d),r.some(v=>v.trim().length>0)&&o.push(r),r=[],d="",o.length>=t)break;continue}d+=c}return o.length<t&&(d.length>0||r.length>0)&&(r.push(d),r.some(b=>b.trim().length>0)&&o.push(r)),o}function Dl(e,t){return Array.from({length:t},(o,r)=>String(e[r]??"").trim())}function uh(e,t,o){const r=Number(e.replace(/,/g,"")),d=Number(t.replace(/,/g,"")),m=Number.isFinite(r)&&Number.isFinite(d)&&e.trim()!==""&&t.trim()!==""?r-d:e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"});return o==="asc"?m:-m}function mh({value:e}){const t=ph(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 ph(e){const t=[];for(const o of String(e||"").replace(/\r\n/g,`
7
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:Wo(d[2])}):/^>\s?/.test(r)?t.push({kind:"quote",text:Wo(r.replace(/^>\s?/,""))}):/^([-*+]|\d+\.)\s+/.test(r)?t.push({kind:"list",text:Wo(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:Wo(r)}),t.length>=12)break}return t}function Wo(e){return e.replace(/!\[([^\]]*)\]\([^)]+\)/g,"$1").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/(\*\*|__)(.*?)\1/g,"$2").replace(/(\*|_)(.*?)\1/g,"$2").replace(/`([^`]+)`/g,"$1").trim()}function ph(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 Mr.find(d=>d.key===t)??Mr[0]}function gh(e){return Bd(e)}function Vd(e){return String(e.assetUrl||e.sourceFilePath||e.body||"").trim()}function hh(e){const t=Vd(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 fh(e){var t,o,r,d,p,m;return String(((t=e.metadata)==null?void 0:t.sourceUrl)||((o=e.metadata)==null?void 0:o.SourceUrl)||((r=e.metadata)==null?void 0:r.url)||((d=e.metadata)==null?void 0:d.Url)||((p=e.metadata)==null?void 0:p.embedUrl)||((m=e.metadata)==null?void 0:m.EmbedUrl)||e.assetUrl||e.sourceFilePath||e.body||"").trim()}function bh(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 yh(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 xh(e){return Dd(e)}function Dl(e){const t=e.indexOf(":");return t>0?e.slice(0,t):"relative"}function Ch(e){var t;return((t=e.metadata)==null?void 0:t.CompanyStatus)||e.status||(e.companyMode?"Staged":"Ready")}function kh(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 Tr(e){var t;return(e.result||e.body||((t=e.metadata)==null?void 0:t.CompanyLastMessage)||"").trim()||"No local artifact content yet."}function Ho(e,t){const o=t.edges.filter(p=>p.to===e.id).map(p=>{var m;return(m=t.nodes.find(b=>b.id===p.from))==null?void 0:m.title}).filter(Boolean),r=t.edges.filter(p=>p.from===e.id).map(p=>{var m;return(m=t.nodes.find(b=>b.id===p.to))==null?void 0:m.title}).filter(Boolean),d=Ch(e);return{id:e.id,title:e.title,type:e.kind,subtitle:Tr(e).slice(0,160),status:d,progress:kh(d),incoming:o,outgoing:r}}function Sh(e,t){const o=new Set(t.edges.filter(y=>y.from===e.id||y.to===e.id).flatMap(y=>[y.from,y.to]).filter(y=>y!==e.id)),r=t.nodes.filter(y=>o.has(y.id)),d=t.nodes.filter(y=>{var v;return y.id!==e.id&&(y.companyMode||((v=y.tags)==null?void 0:v.some(R=>R.toLowerCase().includes("company"))))}),p=[...r,...d].filter((y,v,R)=>R.findIndex(j=>j.id===y.id)===v),m=p.filter(y=>y.kind!=="ai-task"&&!y.result).slice(0,6),b=p.filter(y=>y.kind==="ai-task").slice(0,6),c=p.filter(y=>y.result||y.kind!=="ai-task").slice(0,6);return[{key:"root",label:"Root",nodes:[Ho(e,t)]},{key:"context",label:"Context",nodes:m.map(y=>Ho(y,t))},{key:"tasks",label:"Missions",nodes:b.map(y=>Ho(y,t))},{key:"artifacts",label:"Artifacts",nodes:c.map(y=>Ho(y,t))}].map(y=>({...y,nodes:y.nodes.length>0?y.nodes:[wh(y.key)]}))}function wh(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 vh(e,t){const o=new Set(t.edges.filter(d=>d.from===e.id||d.to===e.id).flatMap(d=>[d.from,d.to]));return t.nodes.filter(d=>{var p;return d.id===e.id||o.has(d.id)||((p=d.tags)==null?void 0:p.includes("Company follow-up"))}).filter(d=>Tr(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:Tr(d),sourceNodeId:d.id}))}function jh({board:e,rootNode:t,onClose:o,onStatus:r,onRemove:d,onSubmitFollowUp:p,onApproval:m,onAddArtifact:b}){var he,Ge,rt,it,me;const[c,y]=g.useState(""),[v,R]=g.useState(null),j=g.useMemo(()=>Sh(t,e),[e,t]),P=g.useMemo(()=>vh(t,e),[e,t]),V=P.find(X=>X.id===v)??P[0]??null,F=((he=t.metadata)==null?void 0:he.CompanyStatus)||"Staged",B=((Ge=t.metadata)==null?void 0:Ge.CompanyExecutionModeLabel)||"Auto / General",J=((rt=t.metadata)==null?void 0:rt.CompanySubAgents)==="false"?"single-agent":"sub-agents",ne=((it=t.metadata)==null?void 0:it.CompanyApprovalStatus)||"Pending",ge=!["Approved","Rejected"].includes(ne),xe=e.nodes.filter(X=>{var re;return X.kind==="ai-task"&&(((re=X.tags)==null?void 0:re.includes("Company follow-up"))||j.some(Q=>Q.nodes.some(bt=>bt.id===X.id)))}).length,je=()=>{const X=c.trim();X&&(y(""),p(t.id,X))};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:X=>X.stopPropagation(),children:[n.jsxs("header",{className:"company-focus-head",children:[n.jsx("button",{type:"button",title:"Back to Canvas",onClick:o,children:n.jsx(_m,{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||((me=t.metadata)==null?void 0:me.CompanyLastMessage)||"Local company root staged from MindCanvas."})]}),n.jsxs("div",{className:"company-focus-head__actions",children:[n.jsx("span",{children:F}),n.jsx("span",{children:B}),n.jsxs("span",{children:[n.jsx(yd,{size:12}),J]}),F==="Paused"?n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Staged"),children:[n.jsx(Jt,{size:13}),"Resume"]}):n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Paused"),children:[n.jsx(ro,{size:13}),"Pause"]}),n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Archived"),children:[n.jsx(xr,{size:13}),"Archive"]}),n.jsxs("button",{type:"button",className:"is-danger",onClick:()=>d(t.id),children:[n.jsx(rs,{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(Vo,{label:"Missions",value:xe||1,tone:"blue"}),n.jsx(Vo,{label:"Population",value:J==="sub-agents"?4:1,tone:"slate"}),n.jsx(Vo,{label:"Approvals",value:ge?1:0,tone:"amber"}),n.jsx(Vo,{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(Dm,{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(X=>n.jsxs("section",{className:"company-focus-lane",children:[n.jsxs("header",{children:[n.jsx("strong",{children:X.label}),n.jsxs("span",{children:[X.nodes.filter(re=>re.type!=="empty").length," nodes"]})]}),n.jsx("div",{className:"company-focus-node-list",children:X.nodes.map(re=>n.jsxs("article",{className:`company-focus-node ${re.type==="empty"?"is-empty":""}`,children:[n.jsxs("div",{children:[n.jsx("span",{children:re.type}),n.jsx("b",{children:re.status})]}),n.jsx("strong",{children:re.title}),n.jsx("p",{children:re.subtitle}),n.jsx("div",{className:"company-focus-progress",children:n.jsx("i",{style:{width:`${Math.round(re.progress*100)}%`}})}),re.incoming.length>0&&n.jsxs("small",{children:["From: ",re.incoming.slice(0,2).join(", ")]}),re.outgoing.length>0&&n.jsxs("small",{children:["Next: ",re.outgoing.slice(0,2).join(", ")]})]},re.id))})]},X.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(kd,{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:X=>y(X.target.value),placeholder:"Generate the next practical revenue validation task."}),n.jsxs("button",{type:"button",className:"company-focus-primary",disabled:!c.trim(),onClick:je,children:[n.jsx(Bm,{size:13}),"Stage Task"]})]}),n.jsxs("section",{children:[n.jsxs("div",{className:"company-focus-section-head",children:[n.jsxs("div",{children:[n.jsx(br,{size:15}),n.jsx("strong",{children:"Approvals"})]}),n.jsx("span",{children:ne})]}),n.jsxs("article",{className:`company-focus-approval company-focus-approval--${ne.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."}),ge&&n.jsxs("div",{children:[n.jsxs("button",{type:"button",onClick:()=>m(t.id,"Approved"),children:[n.jsx(br,{size:13}),"Approve locally"]}),n.jsxs("button",{type:"button",onClick:()=>m(t.id,"Rejected"),children:[n.jsx(Om,{size:13}),"Reject"]})]})]})]}),n.jsxs("section",{children:[n.jsxs("div",{className:"company-focus-section-head",children:[n.jsxs("div",{children:[n.jsx(ht,{size:15}),n.jsx("strong",{children:"Artifacts"})]}),n.jsx("span",{children:P.length})]}),n.jsx("div",{className:"company-focus-artifacts",children:P.map(X=>n.jsxs("button",{type:"button",className:(V==null?void 0:V.id)===X.id?"is-selected":"",onClick:()=>R(X.id),children:[n.jsx("span",{children:X.type}),n.jsx("strong",{children:X.title})]},X.id))}),V&&n.jsxs("div",{className:"company-focus-preview",children:[n.jsx("span",{children:V.type}),n.jsx("strong",{children:V.title}),n.jsx("pre",{children:V.content}),n.jsxs("button",{type:"button",onClick:()=>b(t.id,V),children:[n.jsx(eo,{size:13}),"Add to Canvas"]})]})]})]})]})]})})}function Vo({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 Ih({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(ln,{size:16})}),n.jsx("button",{type:"button",title:"Close PDF viewer","data-testid":"pdf-viewer-close",onClick:o,children:n.jsx(gt,{size:16})})]})]}),n.jsx("iframe",{src:e,title:t,className:"pdf-viewer-frame","data-testid":"pdf-viewer-frame"})]})})}const Kd={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},Zo=.28,Qo=2.8,Nh=96,Ah=140,es=188,ts=126,tn=10,Mh=720,Th=.8,qa={x:540,y:210,scale:1},Bl=8,Yd=["dot","line","particles","spirit"],qt="n",ar=["0","1","2","3","4","5","6","7","8","9"],no=24,Ol=900,$l="mindexec-react-project-gallery-startup-v1",Gd="mindexec-react-function-toolbar-mode-v1",Xd="mindexec-react-project-workspace-history-v1",qd=5,as="__MINDEXEC_REACT_NODES__",Ko=34,Ja=1280,Za=960,Rh=154,Rr=4e4,Lh=50,ds=100,Jd=50*1024,nr=Jd,or=12e4,Fl=64*1024,Eh=5e3,Jr=2500,cn=36,Lr="Select a LocalBridge directory",Zd="mindexec.react.templateStudioDraft.v1.",Qd="BusinessAutomationNode",Ph="MindCanvasAgent",_h="CodeNote";function Dh(){return fd(Kd??{})}function sr(){return Kd??{}}const Bh=["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(`
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:Ho(d[2])}):/^>\s?/.test(r)?t.push({kind:"quote",text:Ho(r.replace(/^>\s?/,""))}):/^([-*+]|\d+\.)\s+/.test(r)?t.push({kind:"list",text:Ho(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:Ho(r)}),t.length>=12)break}return t}function Ho(e){return e.replace(/!\[([^\]]*)\]\([^)]+\)/g,"$1").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/(\*\*|__)(.*?)\1/g,"$2").replace(/(\*|_)(.*?)\1/g,"$2").replace(/`([^`]+)`/g,"$1").trim()}function gh(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 Mr.find(d=>d.key===t)??Mr[0]}function hh(e){return Od(e)}function Gd(e){return String(e.assetUrl||e.sourceFilePath||e.body||"").trim()}function fh(e){const t=Gd(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 bh(e){var t,o,r,d,p,m;return String(((t=e.metadata)==null?void 0:t.sourceUrl)||((o=e.metadata)==null?void 0:o.SourceUrl)||((r=e.metadata)==null?void 0:r.url)||((d=e.metadata)==null?void 0:d.Url)||((p=e.metadata)==null?void 0:p.embedUrl)||((m=e.metadata)==null?void 0:m.EmbedUrl)||e.assetUrl||e.sourceFilePath||e.body||"").trim()}function yh(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 xh(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 Ch(e){return Bd(e)}function Bl(e){const t=e.indexOf(":");return t>0?e.slice(0,t):"relative"}function kh(e){var t;return((t=e.metadata)==null?void 0:t.CompanyStatus)||e.status||(e.companyMode?"Staged":"Ready")}function Sh(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 Tr(e){var t;return(e.result||e.body||((t=e.metadata)==null?void 0:t.CompanyLastMessage)||"").trim()||"No local artifact content yet."}function Wo(e,t){const o=t.edges.filter(p=>p.to===e.id).map(p=>{var m;return(m=t.nodes.find(b=>b.id===p.from))==null?void 0:m.title}).filter(Boolean),r=t.edges.filter(p=>p.from===e.id).map(p=>{var m;return(m=t.nodes.find(b=>b.id===p.to))==null?void 0:m.title}).filter(Boolean),d=kh(e);return{id:e.id,title:e.title,type:e.kind,subtitle:Tr(e).slice(0,160),status:d,progress:Sh(d),incoming:o,outgoing:r}}function wh(e,t){const o=new Set(t.edges.filter(y=>y.from===e.id||y.to===e.id).flatMap(y=>[y.from,y.to]).filter(y=>y!==e.id)),r=t.nodes.filter(y=>o.has(y.id)),d=t.nodes.filter(y=>{var v;return y.id!==e.id&&(y.companyMode||((v=y.tags)==null?void 0:v.some(R=>R.toLowerCase().includes("company"))))}),p=[...r,...d].filter((y,v,R)=>R.findIndex(j=>j.id===y.id)===v),m=p.filter(y=>y.kind!=="ai-task"&&!y.result).slice(0,6),b=p.filter(y=>y.kind==="ai-task").slice(0,6),c=p.filter(y=>y.result||y.kind!=="ai-task").slice(0,6);return[{key:"root",label:"Root",nodes:[Wo(e,t)]},{key:"context",label:"Context",nodes:m.map(y=>Wo(y,t))},{key:"tasks",label:"Missions",nodes:b.map(y=>Wo(y,t))},{key:"artifacts",label:"Artifacts",nodes:c.map(y=>Wo(y,t))}].map(y=>({...y,nodes:y.nodes.length>0?y.nodes:[vh(y.key)]}))}function vh(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 jh(e,t){const o=new Set(t.edges.filter(d=>d.from===e.id||d.to===e.id).flatMap(d=>[d.from,d.to]));return t.nodes.filter(d=>{var p;return d.id===e.id||o.has(d.id)||((p=d.tags)==null?void 0:p.includes("Company follow-up"))}).filter(d=>Tr(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:Tr(d),sourceNodeId:d.id}))}function Ih({board:e,rootNode:t,onClose:o,onStatus:r,onRemove:d,onSubmitFollowUp:p,onApproval:m,onAddArtifact:b}){var he,Ye,rt,it,me;const[c,y]=g.useState(""),[v,R]=g.useState(null),j=g.useMemo(()=>wh(t,e),[e,t]),P=g.useMemo(()=>jh(t,e),[e,t]),V=P.find(X=>X.id===v)??P[0]??null,F=((he=t.metadata)==null?void 0:he.CompanyStatus)||"Staged",B=((Ye=t.metadata)==null?void 0:Ye.CompanyExecutionModeLabel)||"Auto / General",J=((rt=t.metadata)==null?void 0:rt.CompanySubAgents)==="false"?"single-agent":"sub-agents",ne=((it=t.metadata)==null?void 0:it.CompanyApprovalStatus)||"Pending",ge=!["Approved","Rejected"].includes(ne),xe=e.nodes.filter(X=>{var re;return X.kind==="ai-task"&&(((re=X.tags)==null?void 0:re.includes("Company follow-up"))||j.some(Q=>Q.nodes.some(bt=>bt.id===X.id)))}).length,je=()=>{const X=c.trim();X&&(y(""),p(t.id,X))};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:X=>X.stopPropagation(),children:[n.jsxs("header",{className:"company-focus-head",children:[n.jsx("button",{type:"button",title:"Back to Canvas",onClick:o,children:n.jsx(Dm,{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||((me=t.metadata)==null?void 0:me.CompanyLastMessage)||"Local company root staged from MindCanvas."})]}),n.jsxs("div",{className:"company-focus-head__actions",children:[n.jsx("span",{children:F}),n.jsx("span",{children:B}),n.jsxs("span",{children:[n.jsx(xd,{size:12}),J]}),F==="Paused"?n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Staged"),children:[n.jsx(Jt,{size:13}),"Resume"]}):n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Paused"),children:[n.jsx(ro,{size:13}),"Pause"]}),n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Archived"),children:[n.jsx(xr,{size:13}),"Archive"]}),n.jsxs("button",{type:"button",className:"is-danger",onClick:()=>d(t.id),children:[n.jsx(rs,{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(Vo,{label:"Missions",value:xe||1,tone:"blue"}),n.jsx(Vo,{label:"Population",value:J==="sub-agents"?4:1,tone:"slate"}),n.jsx(Vo,{label:"Approvals",value:ge?1:0,tone:"amber"}),n.jsx(Vo,{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(Bm,{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(X=>n.jsxs("section",{className:"company-focus-lane",children:[n.jsxs("header",{children:[n.jsx("strong",{children:X.label}),n.jsxs("span",{children:[X.nodes.filter(re=>re.type!=="empty").length," nodes"]})]}),n.jsx("div",{className:"company-focus-node-list",children:X.nodes.map(re=>n.jsxs("article",{className:`company-focus-node ${re.type==="empty"?"is-empty":""}`,children:[n.jsxs("div",{children:[n.jsx("span",{children:re.type}),n.jsx("b",{children:re.status})]}),n.jsx("strong",{children:re.title}),n.jsx("p",{children:re.subtitle}),n.jsx("div",{className:"company-focus-progress",children:n.jsx("i",{style:{width:`${Math.round(re.progress*100)}%`}})}),re.incoming.length>0&&n.jsxs("small",{children:["From: ",re.incoming.slice(0,2).join(", ")]}),re.outgoing.length>0&&n.jsxs("small",{children:["Next: ",re.outgoing.slice(0,2).join(", ")]})]},re.id))})]},X.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(Sd,{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:X=>y(X.target.value),placeholder:"Generate the next practical revenue validation task."}),n.jsxs("button",{type:"button",className:"company-focus-primary",disabled:!c.trim(),onClick:je,children:[n.jsx(Om,{size:13}),"Stage Task"]})]}),n.jsxs("section",{children:[n.jsxs("div",{className:"company-focus-section-head",children:[n.jsxs("div",{children:[n.jsx(br,{size:15}),n.jsx("strong",{children:"Approvals"})]}),n.jsx("span",{children:ne})]}),n.jsxs("article",{className:`company-focus-approval company-focus-approval--${ne.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."}),ge&&n.jsxs("div",{children:[n.jsxs("button",{type:"button",onClick:()=>m(t.id,"Approved"),children:[n.jsx(br,{size:13}),"Approve locally"]}),n.jsxs("button",{type:"button",onClick:()=>m(t.id,"Rejected"),children:[n.jsx($m,{size:13}),"Reject"]})]})]})]}),n.jsxs("section",{children:[n.jsxs("div",{className:"company-focus-section-head",children:[n.jsxs("div",{children:[n.jsx(ht,{size:15}),n.jsx("strong",{children:"Artifacts"})]}),n.jsx("span",{children:P.length})]}),n.jsx("div",{className:"company-focus-artifacts",children:P.map(X=>n.jsxs("button",{type:"button",className:(V==null?void 0:V.id)===X.id?"is-selected":"",onClick:()=>R(X.id),children:[n.jsx("span",{children:X.type}),n.jsx("strong",{children:X.title})]},X.id))}),V&&n.jsxs("div",{className:"company-focus-preview",children:[n.jsx("span",{children:V.type}),n.jsx("strong",{children:V.title}),n.jsx("pre",{children:V.content}),n.jsxs("button",{type:"button",onClick:()=>b(t.id,V),children:[n.jsx(eo,{size:13}),"Add to Canvas"]})]})]})]})]})]})})}function Vo({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 Nh({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(ln,{size:16})}),n.jsx("button",{type:"button",title:"Close PDF viewer","data-testid":"pdf-viewer-close",onClick:o,children:n.jsx(gt,{size:16})})]})]}),n.jsx("iframe",{src:e,title:t,className:"pdf-viewer-frame","data-testid":"pdf-viewer-frame"})]})})}const Kd={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},Zo=.28,Qo=2.8,Ah=96,Mh=140,es=188,ts=126,tn=10,Th=720,Rh=.8,qa={x:540,y:210,scale:1},Ol=8,Yd=["dot","line","particles","spirit"],qt="n",ar=["0","1","2","3","4","5","6","7","8","9"],no=24,$l=900,Fl="mindexec-react-project-gallery-startup-v1",Xd="mindexec-react-function-toolbar-mode-v1",qd="mindexec-react-project-workspace-history-v1",Jd=5,as="__MINDEXEC_REACT_NODES__",Go=34,Ja=1280,Za=960,Lh=154,Rr=4e4,Eh=50,ds=100,Zd=50*1024,nr=Zd,or=12e4,zl=64*1024,Ph=5e3,Jr=2500,cn=36,Lr="Select a LocalBridge directory",Qd="mindexec.react.templateStudioDraft.v1.",ec="BusinessAutomationNode",_h="MindCanvasAgent",Dh="CodeNote";function Bh(){return bd(Kd??{})}function sr(){return Kd??{}}const Oh=["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
9
  `),Zr={"image-generate":{kind:"image-generate",mode:"Image",title:"Image Generation Spec",body:["Prepare an image generation prompt/spec.","","Subject:","Visual style:","Composition:","Constraints:","Business use case:"].join(`
10
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}},Oh=["Objective:","","Constraints:","","Expected output:"].join(`
12
- `),$h=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 zl(e,t){try{const o=window.localStorage.getItem(`${Zd}${e}`);if(!o)return qo(t);const r=JSON.parse(o);return{...qo(t),...r,templateId:Zn(r.templateId||r.templateTitle||t)}}catch{return qo(t)}}function Ul(e,t){window.localStorage.setItem(`${Zd}${e}`,JSON.stringify(t))}function Wl(e){return{id:`studio-${e.templateId||"template-studio-draft"}`,label:e.templateTitle||"Template Studio Test",description:"Template Studio test create",iconClass:"template-studio-test",prompt:"Use test inputs to create a real local board from the compiled template.",options:[]}}function cs(e){return String(e||"").split(",").map(t=>t.trim().toLowerCase()).filter(Boolean)}function ec(e,t,o){const r=e.toLowerCase(),d=t.toLowerCase();return o.some(p=>r.includes(p)||d.includes(p))}function tc(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 Fh(e,t){const o=cs(t==null?void 0:t.Include),r=cs(t==null?void 0:t.Exclude),d=[];let p=0,m=0,b=0,c=!1;async function y(v,R=""){for await(const j of v.values()){if(b>=Jr){c=!0;return}const P=R?`${R}/${j.name}`:j.name;if(!ec(P,j.name,r)){if(j.kind==="file"){if(!tc(j.name,o))continue;p+=1,b+=1,d.length<cn&&d.push({name:j.name,path:P,kind:"file"});continue}if(j.kind==="directory"&&(m+=1,b+=1,d.length<cn&&d.push({name:j.name,path:P,kind:"directory"}),await y(j,P),c))return}}}return await y(e),{fileCount:p,directoryCount:m,preview:d,truncated:c}}function un(e){return typeof e=="string"?e.trim():""}function zh(e){return!e||e===Lr?!1:!/^(https?:|data:|blob:|file:)/i.test(e)}function Uh(e){var d;const t=un((d=e.metadata)==null?void 0:d.DirectoryPath),o=un(e.sourceFilePath),r=t||o;return zh(r)?r:""}function Wh(e,t){const o=un(t.path);if(o)return o;const r=un(t.name);if(!e)return r;const d=e.includes("\\")?"\\":"/";return`${e.replace(/[\\/]+$/,"")}${d}${r}`}async function Hh(e,t,o,r){const d=cs(t==null?void 0:t.Include),p=cs(t==null?void 0:t.Exclude),m=[],b=[{bridgePath:e,relativePath:""}];let c=0,y=0,v=0,R=!1;for(;b.length>0;){const j=b.shift();if(!j)break;const P=await xm(j.bridgePath,o,r),V=Array.isArray(P.items)?P.items:[];for(const F of V){if(v>=Jr){R=!0;break}const B=un(F.name);if(!B)continue;const J=j.relativePath?`${j.relativePath}/${B}`:B;if(ec(J,B,p))continue;const ne=F.isDirectory===!0,ge=F.isFile===!0||F.isDirectory!==!0;if(ne){y+=1,v+=1,m.length<cn&&m.push({name:B,path:J,kind:"directory"}),b.push({bridgePath:Wh(j.bridgePath,F),relativePath:J});continue}if(ge){if(!tc(B,d))continue;c+=1,v+=1,m.length<cn&&m.push({name:B,path:J,kind:"file"})}}if(R)break}return{fileCount:c,directoryCount:y,preview:m,truncated:R}}function Hl(e,t){const o=t.preview.map(r=>`${r.kind==="directory"?"dir":"file"}:${r.path}`).join(`
11
+ `),tag:"Video Spec",toolHint:"Media.VideoPrompt",outputType:"video-prompt",width:420,height:236}},$h=["Objective:","","Constraints:","","Expected output:"].join(`
12
+ `),Fh=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 Ul(e,t){try{const o=window.localStorage.getItem(`${Qd}${e}`);if(!o)return qo(t);const r=JSON.parse(o);return{...qo(t),...r,templateId:Zn(r.templateId||r.templateTitle||t)}}catch{return qo(t)}}function Hl(e,t){window.localStorage.setItem(`${Qd}${e}`,JSON.stringify(t))}function Wl(e){return{id:`studio-${e.templateId||"template-studio-draft"}`,label:e.templateTitle||"Template Studio Test",description:"Template Studio test create",iconClass:"template-studio-test",prompt:"Use test inputs to create a real local board from the compiled template.",options:[]}}function cs(e){return String(e||"").split(",").map(t=>t.trim().toLowerCase()).filter(Boolean)}function tc(e,t,o){const r=e.toLowerCase(),d=t.toLowerCase();return o.some(p=>r.includes(p)||d.includes(p))}function ac(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 zh(e,t){const o=cs(t==null?void 0:t.Include),r=cs(t==null?void 0:t.Exclude),d=[];let p=0,m=0,b=0,c=!1;async function y(v,R=""){for await(const j of v.values()){if(b>=Jr){c=!0;return}const P=R?`${R}/${j.name}`:j.name;if(!tc(P,j.name,r)){if(j.kind==="file"){if(!ac(j.name,o))continue;p+=1,b+=1,d.length<cn&&d.push({name:j.name,path:P,kind:"file"});continue}if(j.kind==="directory"&&(m+=1,b+=1,d.length<cn&&d.push({name:j.name,path:P,kind:"directory"}),await y(j,P),c))return}}}return await y(e),{fileCount:p,directoryCount:m,preview:d,truncated:c}}function un(e){return typeof e=="string"?e.trim():""}function Uh(e){return!e||e===Lr?!1:!/^(https?:|data:|blob:|file:)/i.test(e)}function Hh(e){var d;const t=un((d=e.metadata)==null?void 0:d.DirectoryPath),o=un(e.sourceFilePath),r=t||o;return Uh(r)?r:""}function Wh(e,t){const o=un(t.path);if(o)return o;const r=un(t.name);if(!e)return r;const d=e.includes("\\")?"\\":"/";return`${e.replace(/[\\/]+$/,"")}${d}${r}`}async function Vh(e,t,o,r){const d=cs(t==null?void 0:t.Include),p=cs(t==null?void 0:t.Exclude),m=[],b=[{bridgePath:e,relativePath:""}];let c=0,y=0,v=0,R=!1;for(;b.length>0;){const j=b.shift();if(!j)break;const P=await Cm(j.bridgePath,o,r),V=Array.isArray(P.items)?P.items:[];for(const F of V){if(v>=Jr){R=!0;break}const B=un(F.name);if(!B)continue;const J=j.relativePath?`${j.relativePath}/${B}`:B;if(tc(J,B,p))continue;const ne=F.isDirectory===!0,ge=F.isFile===!0||F.isDirectory!==!0;if(ne){y+=1,v+=1,m.length<cn&&m.push({name:B,path:J,kind:"directory"}),b.push({bridgePath:Wh(j.bridgePath,F),relativePath:J});continue}if(ge){if(!ac(B,d))continue;c+=1,v+=1,m.length<cn&&m.push({name:B,path:J,kind:"file"})}}if(R)break}return{fileCount:c,directoryCount:y,preview:m,truncated:R}}function Vl(e,t){const o=t.preview.map(r=>`${r.kind==="directory"?"dir":"file"}:${r.path}`).join(`
13
13
  `);return[`Directory: ${e}`,`Files: ${t.fileCount}`,`Folders: ${t.directoryCount}`,t.truncated?`Preview capped at ${Jr} entries.`:"Scan completed.","",o||"(empty or filtered)"].join(`
14
- `)}const Vh=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"]),Kh=new Set(["csv","log","md","markdown","rtf","text","txt"]);function W(e){return`${e}-${Math.random().toString(36).slice(2,9)}`}function Yh(e){switch(e){case"GeneralCompany":return"General AI Company";case"GrowthValidation":return"Growth Validation";case"RevenueAffiliate":return"Revenue / Affiliate";case"ProductBuild":return"Product Build";case"ResearchOnly":return"Research Only";default:return"Auto Detect"}}function de(e,t,o){return Math.min(o,Math.max(t,e))}const Gh=112,Xh=80;function Vl(e,t){const o=t/2,r=Gh+e/2,d=Math.max(r,t-Xh);return de(Math.max(o,r),0,d)}function Kl(e){return{x:e.x+e.width/2,y:e.y+e.height/2}}function Er(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 Xn(e){return!!(e&&!["image","video","pdf","file","directory","remote-monitor","remote-control"].includes(e.kind))}function ba(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 qh(e){return e.isExpanded===!1&&Number(e.originalHeight??0)>e.height+1}function Jh(e){return Xr(e)}function Zh(e){return Bd(e)}function to(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 Yl(e,t,o,r){let d=e.variantId||W("image-variant");for(;o.has(d);)d=W("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 Qh(e){return[e.title,"",e.result?`Result:
14
+ `)}const Gh=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"]),Kh=new Set(["csv","log","md","markdown","rtf","text","txt"]);function H(e){return`${e}-${Math.random().toString(36).slice(2,9)}`}function Yh(e){switch(e){case"GeneralCompany":return"General AI Company";case"GrowthValidation":return"Growth Validation";case"RevenueAffiliate":return"Revenue / Affiliate";case"ProductBuild":return"Product Build";case"ResearchOnly":return"Research Only";default:return"Auto Detect"}}function de(e,t,o){return Math.min(o,Math.max(t,e))}const Xh=112,qh=80;function Gl(e,t){const o=t/2,r=Xh+e/2,d=Math.max(r,t-qh);return de(Math.max(o,r),0,d)}function Kl(e){return{x:e.x+e.width/2,y:e.y+e.height/2}}function Er(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 Xn(e){return!!(e&&!["image","video","pdf","file","directory","remote-monitor","remote-control"].includes(e.kind))}function ba(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 Jh(e){return e.isExpanded===!1&&Number(e.originalHeight??0)>e.height+1}function Zh(e){return Xr(e)}function Qh(e){return Od(e)}function to(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 Yl(e,t,o,r){let d=e.variantId||H("image-variant");for(;o.has(d);)d=H("image-variant");return o.add(d),{...e,variantId:d,imageUrl:e.imageUrl,assetId:e.assetId||t.assetUrl,title:e.title||t.title,sourceNodeId:e.sourceNodeId||t.id,createdAtUtc:e.createdAtUtc||r}}function ef(e){return[e.title,"",e.result?`Result:
15
15
  ${e.result}`:e.body,e.imageUrl?`
16
16
  Image: ${e.imageUrl}`:"",e.assetUrl?`
17
17
  Asset: ${e.assetUrl}`:"",e.sourceFilePath?`
18
18
  Source: ${e.sourceFilePath}`:""].filter(Boolean).join(`
19
- `)}function ef(e){if(e.kind!=="image")return"";const t=to(e).find(o=>{var r;return o.variantId===((r=e.imageStack)==null?void 0:r.activeVariantId)});return String((t==null?void 0:t.imageUrl)||Xr(e)).trim()}async function tf(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 Qn(e),"text"}function rr(e){var r;const o=(e.result||e.body||"").split(/\r?\n/).reduce((d,p)=>d+Math.max(1,Math.ceil(p.length/54)),0);return de(112+o*21+((r=e.tags)!=null&&r.length?28:0),150,620)}function af(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:Ja,maxHeight:Za};case"image":return{minWidth:220,minHeight:160,maxWidth:Ja,maxHeight:Za};case"pdf":case"file":case"directory":return{minWidth:240,minHeight:128,maxWidth:860,maxHeight:720};case"code":return{minWidth:260,minHeight:160,maxWidth:Ja,maxHeight:Za};case"csv-table":return{minWidth:320,minHeight:180,maxWidth:Ja,maxHeight:Za};case"ai-task":return{minWidth:260,minHeight:154,maxWidth:Ja,maxHeight:Za};default:return{minWidth:220,minHeight:132,maxWidth:Ja,maxHeight:Za}}}function Ze(e){return String(e||"").trim()||"Untitled"}const ac="Multi Desktop Monitor";function Gl(e){return Ze(e).toLowerCase()===ac.toLowerCase()}function nf(e,t,o){const r=Ze(e.name);return!o||!Gl(r)?r:t.nodes.some(p=>ba(p)&&Gl(p.title||ac))?"MindCanvas":r}function Zt(e){return typeof e=="object"&&e!==null}function Pr(e){const t=e.toLowerCase(),o=t.lastIndexOf(".");return o>=0?t.slice(o+1):""}function of(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 sf(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 Yo(e,t=0,o=Number.MAX_SAFE_INTEGER){const r=Number(e);if(Number.isFinite(r))return de(r,t,o)}function ir(e){return e&&Yd.includes(e)?e:"dot"}function Xl(e){return Math.round(e/no)*no}function rf(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 lf(e){if(!Zt(e)||!Array.isArray(e.variants))return;const t=e.variants.map(d=>rf(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 _r(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 df(e){if(!Zt(e))return null;const t=e.kind,o=Number(e.x),r=Number(e.y),d=Number(e.width),p=Number(e.height);if(typeof e.id!="string"||typeof t!="string"||!$h.has(t)||typeof e.title!="string"||typeof e.body!="string"||!Number.isFinite(o)||!Number.isFinite(r)||!Number.isFinite(d)||!Number.isFinite(p))return null;const m=lf(e.imageStack),b=(m==null?void 0:m.variants.find(c=>c.variantId===m.activeVariantId))??(m==null?void 0:m.variants[0]);return{id:e.id,kind:t,title:e.title,body:e.body,x:o,y:r,width:de(d,120,1280),height:de(p,96,920),status:["idle","running","paused","done","blocked"].includes(String(e.status))?e.status:void 0,result:typeof e.result=="string"?e.result:void 0,imageUrl:typeof e.imageUrl=="string"?e.imageUrl:b==null?void 0:b.imageUrl,imageStack:m,assetUrl:typeof e.assetUrl=="string"?e.assetUrl:void 0,sourceFilePath:typeof e.sourceFilePath=="string"?e.sourceFilePath:void 0,isChunkedText:typeof e.isChunkedText=="boolean"?e.isChunkedText:void 0,totalLineCount:Yo(e.totalLineCount),scrollOffset:Yo(e.scrollOffset),maxScroll:Yo(e.maxScroll),isExpanded:typeof e.isExpanded=="boolean"?e.isExpanded:void 0,originalHeight:Yo(e.originalHeight),tags:sf(e.tags),role:typeof e.role=="string"?e.role:void 0,metadata:of(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 cf(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 ql(e){if(!e.includes(as))return null;try{const t=JSON.parse(e);if(!Zt(t)||t.__type!==as||!Array.isArray(t.nodes))return null;const o=t.nodes.map(d=>df(d)).filter(d=>!!d);if(o.length===0)return null;const r=Array.isArray(t.edges)?t.edges.map(d=>cf(d)).filter(d=>!!d):[];return{__type:as,source:"MindExecReact",copiedAt:typeof t.copiedAt=="string"?t.copiedAt:new Date().toISOString(),nodes:o,edges:r}}catch{return null}}function uf(e,t){return{__type:as,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:_r(o.imageStack)})),edges:t.map(o=>({...o}))}}const mf=/^\s*\[[^\]]+\]\((https?:\/\/[^)\s]+)\)\s*$/i,pf=/<iframe[^>]+src\s*=\s*(?:"|\x27)(?<url>https?:\/\/[^"\x27]+)(?:"|\x27)/i,gf=/https?:\/\/[^\s<>()"\x27]+/i,hf=/^[A-Za-z0-9_-]{6,}$/,ff=new Set(["avi","m4v","mov","mp4","mpeg","ogv","webm"]);function lr(e){return e.trim().replace(/[.,;:!?\])}]+$/g,"")}function bf(e){var p;const t=e.trim();if(!t)return"";const o=pf.exec(t);if((p=o==null?void 0:o.groups)!=null&&p.url)return lr(o.groups.url);const r=mf.exec(t);if(r!=null&&r[1])return lr(r[1]);const d=t.split(/\r?\n/).map(m=>m.trim()).filter(Boolean);if(d.length===1){const m=gf.exec(d[0]);if(m&&m[0]===d[0])return lr(m[0])}return""}function Qr(e){const t=e.trim(),o=bf(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 yf(e){try{const t=new URL(e);return Pr(t.pathname)}catch{return Pr(e)}}function xf(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(b=>!Number.isInteger(b)||b<0||b>255))return!0;const[p,m]=d;return p===0||p===10||p===127||p===169&&m===254||p===172&&m>=16&&m<=31||p===192&&m===168}const r=t.replace(/^\[|\]$/g,"").toLowerCase();return r==="::1"||r==="0:0:0:0:0:0:0:1"||r.startsWith("fc")||r.startsWith("fd")?!0:/^fe[89ab]/i.test(r.replace(/:/g,""))}function mn(e){const t=Qr(e);if(!t)return null;try{const o=new URL(t);return o.protocol!=="http:"&&o.protocol!=="https:"||xf(o)?null:o}catch{return null}}function dr(e){return hf.test(e)}function Cf(e){const t=mn(e);if(!t)return"";const o=t.hostname.toLowerCase().replace(/^www\./,"");if(o==="youtu.be"){const b=t.pathname.split("/").filter(Boolean)[0]??"";return dr(b)?b:""}if(!o.endsWith("youtube.com")&&!o.endsWith("youtube-nocookie.com"))return"";const r=t.searchParams.get("v")??"";if(dr(r))return r;const d=t.pathname.split("/").filter(Boolean),p=d.findIndex(b=>["embed","shorts","live","v"].includes(b)),m=p>=0?d[p+1]??"":"";return dr(m)?m:""}function kf(e){const t=e.toLowerCase(),o=yf(e);return t.startsWith("data:image/")||["avif","gif","jpeg","jpg","png","svg","webp"].includes(o)?"image":ff.has(o)?"video":o==="pdf"?"pdf":mn(e)?"embed":"file"}function Sf(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 wf(e,t,o="clipboard-url"){const r=kf(e),d=Sf(e),p=r==="embed"?mn(e):null,m=r==="embed"?Cf(e):"",b=m?"youtube":"webpage",c=(p==null?void 0:p.hostname.replace(/^www\./,""))??"",y=m?`https://www.youtube.com/watch?v=${m}`:e,v=m?`https://www.youtube-nocookie.com/embed/${m}`:"",R=r==="image"?`Image: ${d}`:r==="video"?`Video: ${d}`:r==="embed"?m?"YouTube Video":`Embed: ${c||d}`:r==="pdf"?`PDF: ${d}`:`URL: ${d}`;return{id:W("node"),kind:r,title:R,body:y,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:y,tags:r==="embed"?["Embed",m?"YouTube":"Web"]:r==="file"?["URL","File"]:[r.toUpperCase()],metadata:{Source:o,AdapterState:"local-reference",Durable:"false",...r==="embed"?{source:"embed",embedType:b,provider:m?"youtube":"web",renderMode:m?"card":"snapshot",aspectRatio:m?"16:9":"auto",sourceUrl:y,url:y,originalInputUrl:e,embedUrl:v,videoId:m,thumbnailUrl:m?`https://img.youtube.com/vi/${m}/hqdefault.jpg`:"",title:R,domain:c,faviconUrl:!m&&p?`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(y)}`:"",description:m?"":"Capture a visual snapshot or open this page in a new tab.",iframeAllowed:"false",iframeBlockedReason:m?"react-card-shell":"unknown",captureStatus:"idle",captureProvider:m?"":"cloudflare-browser-run"}:{}}}}function Jl(e,t,o="clipboard-url"){const r=Qr(e);return!r||/^https?:\/\//i.test(r)&&!mn(r)?null:wf(r,t,o)}function Zl(e,t,o){const r=e.split(/\r?\n/).map(d=>d.trim()).find(Boolean)??"Pasted text";return{id:W("node"),kind:"note",title:r.slice(0,90),body:e.slice(0,4e4),x:t.x,y:t.y,width:340,height:de(156+Math.ceil(Math.min(e.length,2200)/72)*20,176,540),tags:[o.startsWith("global-input")?"Input":"Pasted"],metadata:{Source:o,TextTruncated:String(e.length>4e4)}}}function vf(e,t,o){const r=e.split(/\r?\n/).map(b=>b.trim()).find(Boolean)??"AI question",d=Jn(o.model),p=pr(d),m=p?fr(p.provider):o.aiProvider||"OpenAI Codex";return{id:W("node"),kind:"ai-task",title:r.slice(0,90),body:e.slice(0,4e4),x:t.x,y:t.y,width:360,height:de(176+Math.ceil(Math.min(e.length,2200)/84)*18,196,520),status:"idle",tags:["AI Task","Input",m],metadata:{Source:"global-input-ai",AdapterState:"localbridge-codex",AiProvider:o.aiProvider||"OpenAI Codex",TextModel:d,TextModelProvider:m,Effort:o.effort,TextTruncated:String(e.length>4e4)}}}function jf(e,t,o,r,d="global-input-media"){const p=r==="Image"?"image":"video",m=e.split(/\r?\n/).map(c=>c.trim()).find(Boolean)??`${r} prompt`,b={...ai(o,r)??{},Source:d,PromptOnly:"true"};return{id:W("node"),kind:p,title:`${r}: ${m.slice(0,72)}`,body:e.slice(0,4e4),x:t.x,y:t.y,width:p==="image"?360:420,height:p==="image"?240:236,tags:[r,b.MediaProvider||"Adapter gated"],metadata:b}}function Ql(e){if(!e.trim())return"";if(typeof DOMParser>"u")return e.replace(/<br\s*\/?>/gi,`
19
+ `)}function tf(e){if(e.kind!=="image")return"";const t=to(e).find(o=>{var r;return o.variantId===((r=e.imageStack)==null?void 0:r.activeVariantId)});return String((t==null?void 0:t.imageUrl)||Xr(e)).trim()}async function af(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 Qn(e),"text"}function rr(e){var r;const o=(e.result||e.body||"").split(/\r?\n/).reduce((d,p)=>d+Math.max(1,Math.ceil(p.length/54)),0);return de(112+o*21+((r=e.tags)!=null&&r.length?28:0),150,620)}function nf(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:Ja,maxHeight:Za};case"image":return{minWidth:220,minHeight:160,maxWidth:Ja,maxHeight:Za};case"pdf":case"file":case"directory":return{minWidth:240,minHeight:128,maxWidth:860,maxHeight:720};case"code":return{minWidth:260,minHeight:160,maxWidth:Ja,maxHeight:Za};case"csv-table":return{minWidth:320,minHeight:180,maxWidth:Ja,maxHeight:Za};case"ai-task":return{minWidth:260,minHeight:154,maxWidth:Ja,maxHeight:Za};default:return{minWidth:220,minHeight:132,maxWidth:Ja,maxHeight:Za}}}function Ze(e){return String(e||"").trim()||"Untitled"}const nc="Multi Desktop Monitor";function Xl(e){return Ze(e).toLowerCase()===nc.toLowerCase()}function of(e,t,o){const r=Ze(e.name);return!o||!Xl(r)?r:t.nodes.some(p=>ba(p)&&Xl(p.title||nc))?"MindCanvas":r}function Zt(e){return typeof e=="object"&&e!==null}function Pr(e){const t=e.toLowerCase(),o=t.lastIndexOf(".");return o>=0?t.slice(o+1):""}function sf(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 rf(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 Ko(e,t=0,o=Number.MAX_SAFE_INTEGER){const r=Number(e);if(Number.isFinite(r))return de(r,t,o)}function ir(e){return e&&Yd.includes(e)?e:"dot"}function ql(e){return Math.round(e/no)*no}function lf(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 df(e){if(!Zt(e)||!Array.isArray(e.variants))return;const t=e.variants.map(d=>lf(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 _r(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 cf(e){if(!Zt(e))return null;const t=e.kind,o=Number(e.x),r=Number(e.y),d=Number(e.width),p=Number(e.height);if(typeof e.id!="string"||typeof t!="string"||!Fh.has(t)||typeof e.title!="string"||typeof e.body!="string"||!Number.isFinite(o)||!Number.isFinite(r)||!Number.isFinite(d)||!Number.isFinite(p))return null;const m=df(e.imageStack),b=(m==null?void 0:m.variants.find(c=>c.variantId===m.activeVariantId))??(m==null?void 0:m.variants[0]);return{id:e.id,kind:t,title:e.title,body:e.body,x:o,y:r,width:de(d,120,1280),height:de(p,96,920),status:["idle","running","paused","done","blocked"].includes(String(e.status))?e.status:void 0,result:typeof e.result=="string"?e.result:void 0,imageUrl:typeof e.imageUrl=="string"?e.imageUrl:b==null?void 0:b.imageUrl,imageStack:m,assetUrl:typeof e.assetUrl=="string"?e.assetUrl:void 0,sourceFilePath:typeof e.sourceFilePath=="string"?e.sourceFilePath:void 0,isChunkedText:typeof e.isChunkedText=="boolean"?e.isChunkedText:void 0,totalLineCount:Ko(e.totalLineCount),scrollOffset:Ko(e.scrollOffset),maxScroll:Ko(e.maxScroll),isExpanded:typeof e.isExpanded=="boolean"?e.isExpanded:void 0,originalHeight:Ko(e.originalHeight),tags:rf(e.tags),role:typeof e.role=="string"?e.role:void 0,metadata:sf(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 uf(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 Jl(e){if(!e.includes(as))return null;try{const t=JSON.parse(e);if(!Zt(t)||t.__type!==as||!Array.isArray(t.nodes))return null;const o=t.nodes.map(d=>cf(d)).filter(d=>!!d);if(o.length===0)return null;const r=Array.isArray(t.edges)?t.edges.map(d=>uf(d)).filter(d=>!!d):[];return{__type:as,source:"MindExecReact",copiedAt:typeof t.copiedAt=="string"?t.copiedAt:new Date().toISOString(),nodes:o,edges:r}}catch{return null}}function mf(e,t){return{__type:as,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:_r(o.imageStack)})),edges:t.map(o=>({...o}))}}const pf=/^\s*\[[^\]]+\]\((https?:\/\/[^)\s]+)\)\s*$/i,gf=/<iframe[^>]+src\s*=\s*(?:"|\x27)(?<url>https?:\/\/[^"\x27]+)(?:"|\x27)/i,hf=/https?:\/\/[^\s<>()"\x27]+/i,ff=/^[A-Za-z0-9_-]{6,}$/,bf=new Set(["avi","m4v","mov","mp4","mpeg","ogv","webm"]);function lr(e){return e.trim().replace(/[.,;:!?\])}]+$/g,"")}function yf(e){var p;const t=e.trim();if(!t)return"";const o=gf.exec(t);if((p=o==null?void 0:o.groups)!=null&&p.url)return lr(o.groups.url);const r=pf.exec(t);if(r!=null&&r[1])return lr(r[1]);const d=t.split(/\r?\n/).map(m=>m.trim()).filter(Boolean);if(d.length===1){const m=hf.exec(d[0]);if(m&&m[0]===d[0])return lr(m[0])}return""}function Qr(e){const t=e.trim(),o=yf(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 xf(e){try{const t=new URL(e);return Pr(t.pathname)}catch{return Pr(e)}}function Cf(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(b=>!Number.isInteger(b)||b<0||b>255))return!0;const[p,m]=d;return p===0||p===10||p===127||p===169&&m===254||p===172&&m>=16&&m<=31||p===192&&m===168}const r=t.replace(/^\[|\]$/g,"").toLowerCase();return r==="::1"||r==="0:0:0:0:0:0:0:1"||r.startsWith("fc")||r.startsWith("fd")?!0:/^fe[89ab]/i.test(r.replace(/:/g,""))}function mn(e){const t=Qr(e);if(!t)return null;try{const o=new URL(t);return o.protocol!=="http:"&&o.protocol!=="https:"||Cf(o)?null:o}catch{return null}}function dr(e){return ff.test(e)}function kf(e){const t=mn(e);if(!t)return"";const o=t.hostname.toLowerCase().replace(/^www\./,"");if(o==="youtu.be"){const b=t.pathname.split("/").filter(Boolean)[0]??"";return dr(b)?b:""}if(!o.endsWith("youtube.com")&&!o.endsWith("youtube-nocookie.com"))return"";const r=t.searchParams.get("v")??"";if(dr(r))return r;const d=t.pathname.split("/").filter(Boolean),p=d.findIndex(b=>["embed","shorts","live","v"].includes(b)),m=p>=0?d[p+1]??"":"";return dr(m)?m:""}function Sf(e){const t=e.toLowerCase(),o=xf(e);return t.startsWith("data:image/")||["avif","gif","jpeg","jpg","png","svg","webp"].includes(o)?"image":bf.has(o)?"video":o==="pdf"?"pdf":mn(e)?"embed":"file"}function wf(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 vf(e,t,o="clipboard-url"){const r=Sf(e),d=wf(e),p=r==="embed"?mn(e):null,m=r==="embed"?kf(e):"",b=m?"youtube":"webpage",c=(p==null?void 0:p.hostname.replace(/^www\./,""))??"",y=m?`https://www.youtube.com/watch?v=${m}`:e,v=m?`https://www.youtube-nocookie.com/embed/${m}`:"",R=r==="image"?`Image: ${d}`:r==="video"?`Video: ${d}`:r==="embed"?m?"YouTube Video":`Embed: ${c||d}`:r==="pdf"?`PDF: ${d}`:`URL: ${d}`;return{id:H("node"),kind:r,title:R,body:y,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:y,tags:r==="embed"?["Embed",m?"YouTube":"Web"]:r==="file"?["URL","File"]:[r.toUpperCase()],metadata:{Source:o,AdapterState:"local-reference",Durable:"false",...r==="embed"?{source:"embed",embedType:b,provider:m?"youtube":"web",renderMode:m?"card":"snapshot",aspectRatio:m?"16:9":"auto",sourceUrl:y,url:y,originalInputUrl:e,embedUrl:v,videoId:m,thumbnailUrl:m?`https://img.youtube.com/vi/${m}/hqdefault.jpg`:"",title:R,domain:c,faviconUrl:!m&&p?`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(y)}`:"",description:m?"":"Capture a visual snapshot or open this page in a new tab.",iframeAllowed:"false",iframeBlockedReason:m?"react-card-shell":"unknown",captureStatus:"idle",captureProvider:m?"":"cloudflare-browser-run"}:{}}}}function Zl(e,t,o="clipboard-url"){const r=Qr(e);return!r||/^https?:\/\//i.test(r)&&!mn(r)?null:vf(r,t,o)}function Ql(e,t,o){const r=e.split(/\r?\n/).map(d=>d.trim()).find(Boolean)??"Pasted text";return{id:H("node"),kind:"note",title:r.slice(0,90),body:e.slice(0,4e4),x:t.x,y:t.y,width:340,height:de(156+Math.ceil(Math.min(e.length,2200)/72)*20,176,540),tags:[o.startsWith("global-input")?"Input":"Pasted"],metadata:{Source:o,TextTruncated:String(e.length>4e4)}}}function jf(e,t,o){const r=e.split(/\r?\n/).map(b=>b.trim()).find(Boolean)??"AI question",d=Jn(o.model),p=pr(d),m=p?fr(p.provider):o.aiProvider||"OpenAI Codex";return{id:H("node"),kind:"ai-task",title:r.slice(0,90),body:e.slice(0,4e4),x:t.x,y:t.y,width:360,height:de(176+Math.ceil(Math.min(e.length,2200)/84)*18,196,520),status:"idle",tags:["AI Task","Input",m],metadata:{Source:"global-input-ai",AdapterState:"localbridge-codex",AiProvider:o.aiProvider||"OpenAI Codex",TextModel:d,TextModelProvider:m,Effort:o.effort,TextTruncated:String(e.length>4e4)}}}function If(e,t,o,r,d="global-input-media"){const p=r==="Image"?"image":"video",m=e.split(/\r?\n/).map(c=>c.trim()).find(Boolean)??`${r} prompt`,b={...ai(o,r)??{},Source:d,PromptOnly:"true"};return{id:H("node"),kind:p,title:`${r}: ${m.slice(0,72)}`,body:e.slice(0,4e4),x:t.x,y:t.y,width:p==="image"?360:420,height:p==="image"?240:236,tags:[r,b.MediaProvider||"Adapter gated"],metadata:b}}function ed(e){if(!e.trim())return"";if(typeof DOMParser>"u")return e.replace(/<br\s*\/?>/gi,`
20
20
  `).replace(/<[^>]+>/g," ").replace(/\s+\n/g,`
21
21
  `).trim();const t=new DOMParser().parseFromString(e,"text/html");return(t.body.innerText||t.body.textContent||"").replace(/\n{3,}/g,`
22
22
 
23
- `).trim()}function If(e){const t=Pr(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":Vh.has(t)?"code":e.type.startsWith("text/")||Kh.has(t)?"text":"file"}function Nf(e){return typeof URL<"u"&&URL.createObjectURL?URL.createObjectURL(e):e.name}function ed(e){return e?e.split(/\r?\n/).length:0}function td(e){return String(e||"").replace(/\r\n/g,`
23
+ `).trim()}function Nf(e){const t=Pr(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":Gh.has(t)?"code":e.type.startsWith("text/")||Kh.has(t)?"text":"file"}function Af(e){return typeof URL<"u"&&URL.createObjectURL?URL.createObjectURL(e):e.name}function td(e){return e?e.split(/\r?\n/).length:0}function ad(e){return String(e||"").replace(/\r\n/g,`
24
24
  `).replace(/\r/g,`
25
25
  `).split(`
26
26
  `).slice(0,ds).join(`
27
- `).slice(0,Eh)}function ad(e){return{IsChunkedText:"true",TotalLineCount:String(e),TotalLineCountIsPreview:"true",ChunkedPreviewOnly:"true",ChunkedPreviewChars:"",ChunkedLineCount:String(ds),ChunkCacheEntryLimit:String(Lh),LargeFileThresholdBytes:String(Jd),OriginalIngestMode:"browser-preview",TextTruncated:"true"}}function Af(e){const t=String(e||"").replace(/\r\n/g,`
27
+ `).slice(0,Ph)}function nd(e){return{IsChunkedText:"true",TotalLineCount:String(e),TotalLineCountIsPreview:"true",ChunkedPreviewOnly:"true",ChunkedPreviewChars:"",ChunkedLineCount:String(ds),ChunkCacheEntryLimit:String(Eh),LargeFileThresholdBytes:String(Zd),OriginalIngestMode:"browser-preview",TextTruncated:"true"}}function Mf(e){const t=String(e||"").replace(/\r\n/g,`
28
28
  `).replace(/\r/g,`
29
29
  `).split(`
30
- `).filter(r=>r.trim().length>0),o=t.slice(0,40).reduce((r,d)=>Math.max(r,Mf(d)),0);return{rowCount:Math.max(0,t.length-1),columnCount:o}}function Mf(e){let t=1,o=!1;for(let r=0;r<e.length;r+=1){const d=e[r],p=e[r+1];d==='"'?o&&p==='"'?r+=1:o=!o:d===","&&!o&&(t+=1)}return e.trim()?t:0}function nd(e,t){const o=`
30
+ `).filter(r=>r.trim().length>0),o=t.slice(0,40).reduce((r,d)=>Math.max(r,Tf(d)),0);return{rowCount:Math.max(0,t.length-1),columnCount:o}}function Tf(e){let t=1,o=!1;for(let r=0;r<e.length;r+=1){const d=e[r],p=e[r+1];d==='"'?o&&p==='"'?r+=1:o=!o:d===","&&!o&&(t+=1)}return e.trim()?t:0}function od(e,t){const o=`
31
31
 
32
32
  ... (UI truncated; source file ${t.toLocaleString()} bytes) ...`;return e.endsWith(`
33
- `)?`${e}${o.trimStart()}`:`${e}${o}`}async function Tf(e,t,o){const r=If(e),d=(r==="note"||r==="text"||r==="code"||r==="markdown")&&e.size<=nr,p=r==="image"||r==="video"||r==="pdf"||r==="file"?Nf(e):void 0,m={Source:`browser-${o}`,FileName:e.name,FileType:e.type||"unknown",FileSize:String(e.size),Durable:"false"};if(r==="csv-table"){const c=e.size<=nr,y=c?await e.text():await e.slice(0,Fl).text(),v=c?y.slice(0,or):td(y),R=Af(v),j=c?0:ed(v);return c||f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:o,previewChars:v.length,previewLines:j,chunkLineCount:ds}),{id:W("node"),kind:"csv-table",title:e.name.slice(0,90)||"CSV table",body:c?v:nd(v,e.size),x:t.x,y:t.y,width:720,height:420,sourceFilePath:e.name,isChunkedText:!c||void 0,totalLineCount:c?void 0:j,scrollOffset:c?void 0:0,maxScroll:c?void 0:0,tags:["CSV","Table",o],metadata:{...m,CsvRowCount:String(R.rowCount),CsvColumnCount:String(R.columnCount),IsChunkedText:String(!c),...c?{}:{...ad(j),ChunkedPreviewChars:String(v.length)},ChunkedPreviewOnly:String(!c),OriginalIngestMode:c?"browser-inline":"browser-preview",TextTruncated:String(!c||y.length>v.length)},wordWrap:!1}}if(d){const c=(await e.text()).slice(0,or);return{id:W("node"),kind:r,title:e.name.slice(0,90)||(r==="code"?"Code file":r==="markdown"?"Markdown file":"Text file"),body:c,x:t.x,y:t.y,width:r==="code"?420:r==="markdown"?400:360,height:de(168+Math.ceil(Math.min(c.length,2600)/72)*20,196,640),sourceFilePath:e.name,tags:[r==="code"?"Code":r==="markdown"?"Markdown":"Text",o],metadata:{...m,TextTruncated:String(e.size>nr||c.length>=or)},wordWrap:r==="code"?!0:void 0}}if(r==="note"||r==="text"||r==="code"||r==="markdown"){const c=await e.slice(0,Fl).text(),y=td(c),v=ed(y);return f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:o,previewChars:y.length,previewLines:v,chunkLineCount:ds}),{id:W("node"),kind:r,title:e.name.slice(0,90)||(r==="code"?"Code file":r==="markdown"?"Markdown file":"Text file"),body:nd(y,e.size),x:t.x,y:t.y,width:r==="code"?480:r==="markdown"?430:390,height:540,sourceFilePath:e.name,isChunkedText:!0,totalLineCount:v,scrollOffset:0,maxScroll:0,isExpanded:!1,originalHeight:0,tags:[r==="code"?"Code":r==="markdown"?"Markdown":"Text","Chunked",o],metadata:{...m,...ad(v),ChunkedPreviewChars:String(y.length)},wordWrap:r==="code"?!0:void 0}}const b=r;return{id:W("node"),kind:b,title:e.name.slice(0,90)||(b==="image"?"Image":b==="video"?"Video":b==="pdf"?"PDF Document":"File"),body:p||e.name,x:t.x,y:t.y,width:b==="video"?420:b==="image"?360:300,height:b==="video"?236:b==="image"?240:154,imageUrl:b==="image"?p:void 0,assetUrl:b==="image"?void 0:p,sourceFilePath:e.name,tags:[b==="file"?"File":b.toUpperCase(),o],metadata:{...m,EphemeralObjectUrl:String(!!p)}}}function od(e,t){const o=Array.from(e??[]),r=Array.from(t??[]).map(p=>p.kind==="file"?p.getAsFile():null).filter(p=>!!p),d=new Set;return[...o,...r].filter(p=>{const m=`${p.name}:${p.size}:${p.type}:${p.lastModified}`;return d.has(m)?!1:(d.add(m),!0)})}function cr(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 ur(e){return Zt(e)?typeof e.id=="string"&&Array.isArray(e.nodes)&&Array.isArray(e.edges)&&Zt(e.settings):!1}function us(e){return e.replace(/\.layout\.json$/i,"").replace(/\.json$/i,"").trim()}function Rf(e,t){var r,d;const o=new Date().toISOString();return{...e,id:W("imported-board"),name:Ze(e.name||us(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 mr(e){return/\.layout\.json$/i.test(e.file.name)}function Lf(e){return e.flatMap(t=>Hr(t.payload).map(o=>({fileName:t.file.name,metadata:o})))}function Ef(e,t){const o=us(e.file.name);return t.find(r=>r.metadata.Id===o)??Hr(e.payload).map(r=>({fileName:e.file.name,metadata:r}))[0]??null}function ns(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 Pf(e){const t=[...e].sort((c,y)=>c.y-y.y||c.x-y.x);if(t.length<=2)return t;const o=t.map(c=>c.height).sort((c,y)=>c-y),r=o[Math.floor(o.length/2)]??1,d=Math.max(16,r*.35),p=[];let m=[],b=Number.NaN;for(const c of t){if(m.length===0){m=[c],b=c.y;continue}Math.abs(c.y-b)<=d?(m.push(c),b=(b*(m.length-1)+c.y)/m.length):(p.push(m.sort((y,v)=>y.x-v.x)),m=[c],b=c.y)}return m.length>0&&p.push(m.sort((c,y)=>c.x-y.x)),p.flat()}function _f(e,t,o){const r=ns(e);if(!r)return null;const d={minX:r.minX-220,minY:r.minY-180,maxX:r.maxX+220,maxY:r.maxY+180},p=Math.max(1,d.maxX-d.minX),m=Math.max(1,d.maxY-d.minY),b=Math.min((es-tn*2)/p,(ts-tn*2)/m),c=(j,P)=>({x:tn+(j-d.minX)*b,y:tn+(P-d.minY)*b}),y={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(y.left,y.top),R=c(y.right,y.bottom);return{bounds:d,scale:b,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*b),height:Math.max(2,j.height*b),selected:!1}}),viewport:{x:de(v.x,0,es),y:de(v.y,0,ts),width:de(R.x-v.x,4,es),height:de(R.y-v.y,4,ts)}}}function Df(e,t){const o=Math.max(.01,e.scale),r=t.width/o,d=t.height/o,p=Math.max(Mh,Math.max(r,d)*Th);return{left:(0-e.x)/o-p,top:(0-e.y)/o-p,right:(t.width-e.x)/o+p,bottom:(t.height-e.y)/o+p}}function sd(e,t){return e.x+e.width>=t.left&&e.x<=t.right&&e.y+e.height>=t.top&&e.y<=t.bottom}function rd(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 Bf(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 id(e){const t=new Date().toISOString(),o=W("board"),r=W("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 Of(e){const t=new Date().toISOString();return{id:W("board"),name:`Template Studio ${$f(new Date)}`,updatedAt:t,settings:e,source:{kind:"localStorage",loadedAt:t},nodes:[],edges:[]}}function $f(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 Ff(e){return`${e.sourceKind==="localBridge"?"LocalBridge copy":"React board"} / ${e.nodeCount} nodes / ${Er(e.updatedAt)}`}function oo(e,t){const o=e.trim();return o.length<=t?o:`${o.slice(0,t)}...`}function zf(e){return e==="Fast"?"low":e==="Deep"?"high":"medium"}function ei(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 ti(e){return e==="image-generate"||e==="video-generate"?Zr[e]:null}function en(e){var t;return String(((t=e.metadata)==null?void 0:t.SemanticType)||"").trim()===Qd}function Uf(e,t){const o=Zr[t],r=so(e,o.mode);return{...ai(e,o.mode)??{},Source:"toolbar-business-automation",SemanticType:Qd,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 qn(e,t){var r,d,p,m,b;if(!en(e))return;const o=t.runState==="completed"?String((Number((r=e.metadata)==null?void 0:r.AutomationRunCount)||0)+1):((d=e.metadata)==null?void 0:d.AutomationRunCount)||"0";return{...e.metadata??{},AutomationRunState:t.runState,AutomationInstruction:t.instruction,AutomationLastOutput:t.output??((p=e.metadata)==null?void 0:p.AutomationLastOutput)??"",AutomationLastRunError:t.error??"",AutomationLastRunStatus:t.status,AutomationLastRunStatusLabel:t.statusLabel,AutomationLastRunSourceMode:t.sourceMode??"",AutomationLastRunEvidenceCount:((m=e.metadata)==null?void 0:m.AutomationLastRunEvidenceCount)??"0",AutomationLastRunIsFallback:String(!!t.fallback),AutomationLastRunIsPartial:String(!!t.partial),AutomationLastRunToolsUsed:t.toolsUsed??((b=e.metadata)==null?void 0:b.AutomationToolHints)??"",AutomationLastRunToolWarnings:t.toolWarnings??"",AutomationRunCount:o,...t.runState==="completed"?{AutomationLastRunAtUtc:new Date().toISOString()}:{}}}function Wf(){return{Source:"toolbar-agent-command",SemanticType:Ph,AgentCommandId:W("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 Hf(){return{Source:"toolbar-code-note",SemanticType:_h,CodeNoteId:W("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 Vf(e,t){var r,d,p,m;const o=t?ti(ei(t)):null;if(o){const b=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: ${b}`,`- Model: ${((r=t==null?void 0:t.metadata)==null?void 0:r.MediaModel)||"adapter-gated"}`,`- Aspect: ${((d=t==null?void 0:t.metadata)==null?void 0:d.AspectLabel)||((p=t==null?void 0:t.metadata)==null?void 0:p.AspectPresetId)||"auto"}`,`- Requested size: ${((m=t==null?void 0:t.metadata)==null?void 0:m.RequestedSize)||"auto"}`,"","Prompt draft:",e].join(`
33
+ `)?`${e}${o.trimStart()}`:`${e}${o}`}async function Rf(e,t,o){const r=Nf(e),d=(r==="note"||r==="text"||r==="code"||r==="markdown")&&e.size<=nr,p=r==="image"||r==="video"||r==="pdf"||r==="file"?Af(e):void 0,m={Source:`browser-${o}`,FileName:e.name,FileType:e.type||"unknown",FileSize:String(e.size),Durable:"false"};if(r==="csv-table"){const c=e.size<=nr,y=c?await e.text():await e.slice(0,zl).text(),v=c?y.slice(0,or):ad(y),R=Mf(v),j=c?0:td(v);return c||f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:o,previewChars:v.length,previewLines:j,chunkLineCount:ds}),{id:H("node"),kind:"csv-table",title:e.name.slice(0,90)||"CSV table",body:c?v:od(v,e.size),x:t.x,y:t.y,width:720,height:420,sourceFilePath:e.name,isChunkedText:!c||void 0,totalLineCount:c?void 0:j,scrollOffset:c?void 0:0,maxScroll:c?void 0:0,tags:["CSV","Table",o],metadata:{...m,CsvRowCount:String(R.rowCount),CsvColumnCount:String(R.columnCount),IsChunkedText:String(!c),...c?{}:{...nd(j),ChunkedPreviewChars:String(v.length)},ChunkedPreviewOnly:String(!c),OriginalIngestMode:c?"browser-inline":"browser-preview",TextTruncated:String(!c||y.length>v.length)},wordWrap:!1}}if(d){const c=(await e.text()).slice(0,or);return{id:H("node"),kind:r,title:e.name.slice(0,90)||(r==="code"?"Code file":r==="markdown"?"Markdown file":"Text file"),body:c,x:t.x,y:t.y,width:r==="code"?420:r==="markdown"?400:360,height:de(168+Math.ceil(Math.min(c.length,2600)/72)*20,196,640),sourceFilePath:e.name,tags:[r==="code"?"Code":r==="markdown"?"Markdown":"Text",o],metadata:{...m,TextTruncated:String(e.size>nr||c.length>=or)},wordWrap:r==="code"?!0:void 0}}if(r==="note"||r==="text"||r==="code"||r==="markdown"){const c=await e.slice(0,zl).text(),y=ad(c),v=td(y);return f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:o,previewChars:y.length,previewLines:v,chunkLineCount:ds}),{id:H("node"),kind:r,title:e.name.slice(0,90)||(r==="code"?"Code file":r==="markdown"?"Markdown file":"Text file"),body:od(y,e.size),x:t.x,y:t.y,width:r==="code"?480:r==="markdown"?430:390,height:540,sourceFilePath:e.name,isChunkedText:!0,totalLineCount:v,scrollOffset:0,maxScroll:0,isExpanded:!1,originalHeight:0,tags:[r==="code"?"Code":r==="markdown"?"Markdown":"Text","Chunked",o],metadata:{...m,...nd(v),ChunkedPreviewChars:String(y.length)},wordWrap:r==="code"?!0:void 0}}const b=r;return{id:H("node"),kind:b,title:e.name.slice(0,90)||(b==="image"?"Image":b==="video"?"Video":b==="pdf"?"PDF Document":"File"),body:p||e.name,x:t.x,y:t.y,width:b==="video"?420:b==="image"?360:300,height:b==="video"?236:b==="image"?240:154,imageUrl:b==="image"?p:void 0,assetUrl:b==="image"?void 0:p,sourceFilePath:e.name,tags:[b==="file"?"File":b.toUpperCase(),o],metadata:{...m,EphemeralObjectUrl:String(!!p)}}}function sd(e,t){const o=Array.from(e??[]),r=Array.from(t??[]).map(p=>p.kind==="file"?p.getAsFile():null).filter(p=>!!p),d=new Set;return[...o,...r].filter(p=>{const m=`${p.name}:${p.size}:${p.type}:${p.lastModified}`;return d.has(m)?!1:(d.add(m),!0)})}function cr(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 ur(e){return Zt(e)?typeof e.id=="string"&&Array.isArray(e.nodes)&&Array.isArray(e.edges)&&Zt(e.settings):!1}function us(e){return e.replace(/\.layout\.json$/i,"").replace(/\.json$/i,"").trim()}function Lf(e,t){var r,d;const o=new Date().toISOString();return{...e,id:H("imported-board"),name:Ze(e.name||us(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 mr(e){return/\.layout\.json$/i.test(e.file.name)}function Ef(e){return e.flatMap(t=>Wr(t.payload).map(o=>({fileName:t.file.name,metadata:o})))}function Pf(e,t){const o=us(e.file.name);return t.find(r=>r.metadata.Id===o)??Wr(e.payload).map(r=>({fileName:e.file.name,metadata:r}))[0]??null}function ns(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 _f(e){const t=[...e].sort((c,y)=>c.y-y.y||c.x-y.x);if(t.length<=2)return t;const o=t.map(c=>c.height).sort((c,y)=>c-y),r=o[Math.floor(o.length/2)]??1,d=Math.max(16,r*.35),p=[];let m=[],b=Number.NaN;for(const c of t){if(m.length===0){m=[c],b=c.y;continue}Math.abs(c.y-b)<=d?(m.push(c),b=(b*(m.length-1)+c.y)/m.length):(p.push(m.sort((y,v)=>y.x-v.x)),m=[c],b=c.y)}return m.length>0&&p.push(m.sort((c,y)=>c.x-y.x)),p.flat()}function Df(e,t,o){const r=ns(e);if(!r)return null;const d={minX:r.minX-220,minY:r.minY-180,maxX:r.maxX+220,maxY:r.maxY+180},p=Math.max(1,d.maxX-d.minX),m=Math.max(1,d.maxY-d.minY),b=Math.min((es-tn*2)/p,(ts-tn*2)/m),c=(j,P)=>({x:tn+(j-d.minX)*b,y:tn+(P-d.minY)*b}),y={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(y.left,y.top),R=c(y.right,y.bottom);return{bounds:d,scale:b,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*b),height:Math.max(2,j.height*b),selected:!1}}),viewport:{x:de(v.x,0,es),y:de(v.y,0,ts),width:de(R.x-v.x,4,es),height:de(R.y-v.y,4,ts)}}}function Bf(e,t){const o=Math.max(.01,e.scale),r=t.width/o,d=t.height/o,p=Math.max(Th,Math.max(r,d)*Rh);return{left:(0-e.x)/o-p,top:(0-e.y)/o-p,right:(t.width-e.x)/o+p,bottom:(t.height-e.y)/o+p}}function rd(e,t){return e.x+e.width>=t.left&&e.x<=t.right&&e.y+e.height>=t.top&&e.y<=t.bottom}function id(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 Of(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 ld(e){const t=new Date().toISOString(),o=H("board"),r=H("node");return{id:o,name:"Untitled Workspace",updatedAt:t,settings:e,source:{kind:"localStorage",loadedAt:t},nodes:[{id:r,kind:"note",title:"New note",body:"Start here.",x:0,y:0,width:320,height:168,tags:["Local"]}],edges:[]}}function $f(e){const t=new Date().toISOString();return{id:H("board"),name:`Template Studio ${Ff(new Date)}`,updatedAt:t,settings:e,source:{kind:"localStorage",loadedAt:t},nodes:[],edges:[]}}function Ff(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 zf(e){return`${e.sourceKind==="localBridge"?"LocalBridge copy":"React board"} / ${e.nodeCount} nodes / ${Er(e.updatedAt)}`}function oo(e,t){const o=e.trim();return o.length<=t?o:`${o.slice(0,t)}...`}function Uf(e){return e==="Fast"?"low":e==="Deep"?"high":"medium"}function ei(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 ti(e){return e==="image-generate"||e==="video-generate"?Zr[e]:null}function en(e){var t;return String(((t=e.metadata)==null?void 0:t.SemanticType)||"").trim()===ec}function Hf(e,t){const o=Zr[t],r=so(e,o.mode);return{...ai(e,o.mode)??{},Source:"toolbar-business-automation",SemanticType:ec,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 qn(e,t){var r,d,p,m,b;if(!en(e))return;const o=t.runState==="completed"?String((Number((r=e.metadata)==null?void 0:r.AutomationRunCount)||0)+1):((d=e.metadata)==null?void 0:d.AutomationRunCount)||"0";return{...e.metadata??{},AutomationRunState:t.runState,AutomationInstruction:t.instruction,AutomationLastOutput:t.output??((p=e.metadata)==null?void 0:p.AutomationLastOutput)??"",AutomationLastRunError:t.error??"",AutomationLastRunStatus:t.status,AutomationLastRunStatusLabel:t.statusLabel,AutomationLastRunSourceMode:t.sourceMode??"",AutomationLastRunEvidenceCount:((m=e.metadata)==null?void 0:m.AutomationLastRunEvidenceCount)??"0",AutomationLastRunIsFallback:String(!!t.fallback),AutomationLastRunIsPartial:String(!!t.partial),AutomationLastRunToolsUsed:t.toolsUsed??((b=e.metadata)==null?void 0:b.AutomationToolHints)??"",AutomationLastRunToolWarnings:t.toolWarnings??"",AutomationRunCount:o,...t.runState==="completed"?{AutomationLastRunAtUtc:new Date().toISOString()}:{}}}function Wf(){return{Source:"toolbar-agent-command",SemanticType:_h,AgentCommandId:H("agent-command"),AgentCommandStatus:"Draft",AgentCommandMode:"Task",AgentCommandRequestedRole:"Researcher",AgentCommandConstraints:"",AgentCommandPlannerSummary:"",AgentCommandPlanSteps:"[]",AgentCommandPlannedSkills:"[]",AgentCommandPlannedTools:"[]",AgentCommandPlannedConcepts:"[]",AgentCommandLinkedCodeNotes:"[]",AgentCommandWorkItems:"[]",AgentCommandConsoleLogs:"[]",AgentCommandResultLinks:"[]",AgentCommandContinuationPending:"false",AgentCommandTrancheIndex:"0",memoColor:"gray",memoIcon:"robot",AdapterState:"adapter-gated"}}function Vf(){return{Source:"toolbar-code-note",SemanticType:Dh,CodeNoteId:H("code-note"),CodeNoteKind:"Feature",CodeNoteStatus:"Draft",CodeNoteSyncState:"Unlinked",CodeNoteWhy:"Keep the reason and implementation boundary visible before code changes.",CodeNoteRelatedFiles:JSON.stringify(["src/features/canvas/MindCanvas.tsx"]),CodeNoteRelatedNamespaces:"[]",CodeNoteRelatedSymbols:"[]",CodeNoteAcceptanceCriteria:JSON.stringify(["The intended change is represented as a canvas note.","Local status actions update CodeNote metadata without external adapters."]),CodeNoteOutputArtifacts:"[]",memoColor:"sky",memoIcon:"code",AdapterState:"local-canvas-only"}}function Gf(e,t){var r,d,p,m;const o=t?ti(ei(t)):null;if(o){const b=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: ${b}`,`- Model: ${((r=t==null?void 0:t.metadata)==null?void 0:r.MediaModel)||"adapter-gated"}`,`- Aspect: ${((d=t==null?void 0:t.metadata)==null?void 0:d.AspectLabel)||((p=t==null?void 0:t.metadata)==null?void 0:p.AspectPresetId)||"auto"}`,`- Requested size: ${((m=t==null?void 0:t.metadata)==null?void 0:m.RequestedSize)||"auto"}`,"","Prompt draft:",e].join(`
34
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 Kf(e,t){const o=e.result||"",r=o.slice(0,Rr),d=`${e.title||"AI Task"} result`;return{id:W("node"),kind:"markdown",title:d.slice(0,90),body:r,x:t.x,y:t.y,width:440,height:de(220+Math.ceil(Math.min(r.length,3600)/88)*20,260,680),tags:["AI Result","Markdown"],metadata:{Source:"ai-result-popover",AiResultSourceNodeId:e.id,AiResultSourceTitle:e.title,AiResultArchivedAtUtc:new Date().toISOString(),TextTruncated:String(o.length>Rr),AdapterState:"local-reference"}}}function Yf(e,t){const o=oo(e.result||"",900);return{id:W("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 ld(e,t,o){var b,c,y,v,R;const r=ti(ei(t)),d=new Set(e.edges.filter(j=>j.to===t.id||j.from===t.id).flatMap(j=>[j.from,j.to]).filter(j=>j!==t.id)),p=e.nodes.filter(j=>d.has(j.id)).slice(0,8),m=p.length>0?p.map(j=>[`### ${j.title||j.kind}`,`Type: ${j.kind}`,oo(j.result||j.body||"",1200)].join(`
35
+ `)}function Kf(e,t){const o=e.result||"",r=o.slice(0,Rr),d=`${e.title||"AI Task"} result`;return{id:H("node"),kind:"markdown",title:d.slice(0,90),body:r,x:t.x,y:t.y,width:440,height:de(220+Math.ceil(Math.min(r.length,3600)/88)*20,260,680),tags:["AI Result","Markdown"],metadata:{Source:"ai-result-popover",AiResultSourceNodeId:e.id,AiResultSourceTitle:e.title,AiResultArchivedAtUtc:new Date().toISOString(),TextTruncated:String(o.length>Rr),AdapterState:"local-reference"}}}function Yf(e,t){const o=oo(e.result||"",900);return{id:H("node"),kind:"ai-task",title:`Follow up: ${e.title||"AI result"}`.slice(0,90),body:["Continue from the linked AI result.","","Use the result as context and propose the next concrete action.","","Result preview:",o||"(No result preview available.)"].join(`
36
+ `),x:t.x,y:t.y,width:360,height:220,status:"idle",tags:["AI Task","Follow-up"],metadata:{Source:"ai-result-popover",FollowUpSourceNodeId:e.id,FollowUpSourceTitle:e.title,AdapterState:"local-draft"}}}function dd(e,t,o){var b,c,y,v,R;const r=ti(ei(t)),d=new Set(e.edges.filter(j=>j.to===t.id||j.from===t.id).flatMap(j=>[j.from,j.to]).filter(j=>j!==t.id)),p=e.nodes.filter(j=>d.has(j.id)).slice(0,8),m=p.length>0?p.map(j=>[`### ${j.title||j.kind}`,`Type: ${j.kind}`,oo(j.result||j.body||"",1200)].join(`
37
37
  `)).join(`
38
38
 
39
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.",dl(e.settings.appLanguage),"",`Board: ${e.name}`,`Task node: ${t.title}`,`Automation kind: ${r.kind}`,`External action policy: ${((b=t.metadata)==null?void 0:b.AutomationExternalActionPolicy)||"spec-only-until-review"}`,`Media model: ${((c=t.metadata)==null?void 0:c.MediaModel)||"adapter-gated"}`,`Aspect: ${((y=t.metadata)==null?void 0:y.AspectLabel)||((v=t.metadata)==null?void 0:v.AspectPresetId)||"auto"}`,`Requested size: ${((R=t.metadata)==null?void 0:R.RequestedSize)||"auto"}`,"","Instruction:",oo(o,4e3),"","Linked context:",m,"","Required sections:","- Subject","- Visual style","- Composition or scene","- Constraints","- Business use case","- Final generation prompt"].join(`
40
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.",dl(e.settings.appLanguage),"",`Board: ${e.name}`,`Task node: ${t.title}`,"","Instruction:",oo(o,4e3),"","Linked context:",m].join(`
41
- `)}function nc(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 Dr(e){return[...e].sort(nc)}function Gf(e,t){const o=new Map(e.nodes.filter(v=>v.kind==="ai-task").map(v=>[v.id,v])),r=new Set([...t].filter(v=>o.has(v))),d=new Map,p=new Map;for(const v of r)d.set(v,new Set),p.set(v,0);for(const v of e.edges){if(!r.has(v.from)||!r.has(v.to)||v.from===v.to)continue;const R=d.get(v.from);!R||R.has(v.to)||(R.add(v.to),p.set(v.to,(p.get(v.to)??0)+1))}const m=[],b=new Set,c=Dr([...r].filter(v=>(p.get(v)??0)===0).map(v=>o.get(v)));for(;c.length>0;){const v=c.shift();if(b.has(v.id))continue;b.add(v.id),m.push(v);const R=[...d.get(v.id)??[]].map(j=>o.get(j)).filter(j=>!!j);for(const j of R)p.set(j.id,Math.max(0,(p.get(j.id)??0)-1)),(p.get(j.id)??0)===0&&c.push(j);c.sort(nc)}const y=Dr([...r].filter(v=>!b.has(v)).map(v=>o.get(v)).filter(Boolean));return[...m,...y]}function Br(e,t){var m,b;const o=new Set(e.nodes.filter(c=>c.kind==="ai-task").map(c=>c.id));if(!o.has(t))return[];const r=new Map;for(const c of o)r.set(c,new Set);for(const c of e.edges)!o.has(c.from)||!o.has(c.to)||((m=r.get(c.from))==null||m.add(c.to),(b=r.get(c.to))==null||b.add(c.from));const d=new Set,p=[t];for(;p.length>0;){const c=p.pop();if(!d.has(c)){d.add(c);for(const y of r.get(c)??[])d.has(y)||p.push(y)}}return Gf(e,d)}function Xf(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 Dr(e.nodes.filter(p=>p.kind==="ai-task"))){if(!o.has(d.id))continue;const p=Br(e,d.id);for(const m of p)o.delete(m.id);r.push(p)}return r}function so(e,t){const o=hd(t,e),r=t==="Image"?e.imageRouterImageAspectPresetId:e.imageRouterVideoAspectPresetId,d=gr(t,o,r);return{mode:t,model:o,aspect:d,aspectOptions:bm(o,t),requestedSize:hr(d)}}function ai(e,t){const o=so(e,t);return{InputMode:t,AppLanguage:gd(e.appLanguage),MediaPromptLanguageInstruction:ym(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 oc(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 qf(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 Jf(e,t,o,r=8){if(!t.trim())return[];const d=xg(oc(e)),p=new Map(e.map(m=>[m.id,m]));return Cg(d,t,{limit:r,viewport:o}).hits.map(m=>p.get(m.nodeId)).filter(m=>!!m)}function dd(e,t,o="none"){const r=new Set(t.nodes.map(p=>p.id)),d=e.filter((p,m)=>r.has(p)&&e.indexOf(p)===m);return d.length>0||o==="none"?d:t.nodes[0]?[t.nodes[0].id]:[]}function cd(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('input,textarea,select,[contenteditable="true"],[contenteditable=""]'):!1}function Zf(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('button,a,[role="button"],[role="tab"],summary'):!1}function Go(e){const t=e;if(!t)return null;const o=Number(t.x),r=Number(t.y),d=Number(t.scale);return!Number.isFinite(o)||!Number.isFinite(r)||!Number.isFinite(d)?null:{x:o,y:r,scale:de(d,Zo,Qo)}}function xa(e){return typeof e=="string"?e.trim():""}function Xo(e,t=34){const o=xa(e);if(!o)return"workspace";const p=o.replace(/\\/g,"/").split("/").filter(Boolean).slice(-2).join("/")||o;return p.length<=t?p:`...${p.slice(-(t-3))}`}function Qf(){try{const e=window.localStorage.getItem(Xd),t=e?JSON.parse(e):[];return Array.isArray(t)?t.map(xa).filter(Boolean).filter((o,r,d)=>d.findIndex(p=>p.toLowerCase()===o.toLowerCase())===r).slice(0,qd):[]}catch{return[]}}function eb(e){const t=e.map(xa).filter(Boolean).filter((o,r,d)=>d.findIndex(p=>p.toLowerCase()===o.toLowerCase())===r).slice(0,qd);try{window.localStorage.setItem(Xd,JSON.stringify(t))}catch{}return t}function tb(){try{return window.localStorage.getItem(Gd)==="full"?"full":"curated"}catch{return"curated"}}function ab(e){try{window.localStorage.setItem(Gd,e)}catch{}}function ud(e,t){return eb([e,...t.filter(o=>o.toLowerCase()!==e.toLowerCase())])}function hb({navigate:e,onSidebarActionsChange:t}){var _i,Di,Bi,Oi,$i,Fi,zi,Ui,Wi,Hi,Vi,Ki,Yi,Gi,Xi;const[o,r]=g.useState(()=>ul(ol(ml(zu(al))))),[d,p]=g.useState([]),[m,b]=g.useState([]),[c,y]=g.useState(["node-agent-command"]),[v,R]=g.useState(""),[j,P]=g.useState(""),[V,F]=g.useState(0),[B,J]=g.useState([]),[ne,ge]=g.useState(0),[xe,je]=g.useState("idle"),[he,Ge]=g.useState("booting"),[rt,it]=g.useState(null),[me,X]=g.useState(null),[re,Q]=g.useState(null),[bt,O]=g.useState(null),[lt,U]=g.useState(null),[oe,ka]=g.useState({...qa}),[ye,dt]=g.useState(()=>({width:window.innerWidth,height:window.innerHeight})),[St,Qt]=g.useState(!1),[ea,lo]=g.useState(()=>localStorage.getItem($l)==="true"),[ze,co]=g.useState("local"),[Dt,yt]=g.useState([]),[we,te]=g.useState(pt()?"idle":"blocked"),[bs,Te]=g.useState(null),[Qe,ce]=g.useState(pt()?null:"Hosted LocalBridge access is off."),[Re,Ue]=g.useState(null),[uo,fe]=g.useState(null),[Oe,Bt]=g.useState(()=>Qf()),[wt,Ne]=g.useState(!1),[ct,$e]=g.useState(null),[mo,Sa]=g.useState(null),[Ae,We]=g.useState(!1),[Ot,po]=g.useState("ready"),[wa,go]=g.useState("Saved in this browser."),[Xe,He]=g.useState(()=>mt()),_e=g.useMemo(()=>Dh(),[]),[va,ho]=g.useState(()=>Vs()),be=_e.cloudBoards.canAttempt&&(va==null?void 0:va.source)==="supabase-provider-session",[ja,fo]=g.useState([]),[pn,Le]=g.useState(null),[xt,$t]=g.useState(!1),[Ia,bo]=g.useState(null),De=g.useMemo(()=>$g({storedMode:ze,cloudConfigured:!0,cloudSessionAvailable:be,cloudAccess:be?{planKey:"provider",entitlementStatus:"active",currentBoardCount:ja.length,cloudBoardLimit:Number.MAX_SAFE_INTEGER,lockedBoardCount:0,canCreateBoard:!0}:null,bridgeProviderConfigured:!0,bridgeReachable:we==="connected",hostedWebApp:!pt()&&!Xa(),hostedLocalBridgeAccessEnabled:Xa(),browserProviderConfigured:!0,browserLocalAvailable:!0,browserLocalAvailableWhenEmpty:!0,embeddedProviderConfigured:!1,supportsEmbeddedLocal:!1}),[be,ja.length,we,ze]),[gn,hn]=g.useState(null),[fn,Na]=g.useState(""),[vt,bn]=g.useState(null),[yn,Ft]=g.useState(null),[qe,xn]=g.useState(!1),[ta,ie]=g.useState(!1),[et,ut]=g.useState(null),[jt,It]=g.useState(null),[Ct,ys]=g.useState(!1),[Cn,yo]=g.useState(!1),[aa,xs]=g.useState(tb),kn=g.useRef(new Map),na=g.useMemo(()=>Us(o.settings.appLanguage),[o.settings.appLanguage]),[Sn,Nt]=g.useState(!1),[Aa,oa]=g.useState(!1),[zt,xo]=g.useState("business"),[tt,Ma]=g.useState(()=>{var s;const a=zn("business",o.settings.appLanguage)??Us(o.settings.appLanguage)[0];return((s=Bo(a))==null?void 0:s.id)??null}),[At,Ta]=g.useState(()=>{const a=zn("business",o.settings.appLanguage)??Us(o.settings.appLanguage)[0],s=Bo(a);return Un(Wn(a,s==null?void 0:s.id,o.settings.appLanguage))}),[wn,Je]=g.useState(null),[Ra,La]=g.useState(!1),[ve,Co]=g.useState(()=>zl(o.id,o.name)),[pe,at]=g.useState(null),[ko,So]=g.useState(null),[Cs,nt]=g.useState(!1),[Mt,sa]=g.useState({}),[Ea,Ut]=g.useState(null),Pa=g.useMemo(()=>{var l,u;const a=Xe.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(Xe.map(h=>[h.id,h]));return i.set(o.id,{...a,...s}),Array.from(i.values()).sort((h,C)=>{const k=typeof h.order=="number"?h.order:Number.MAX_SAFE_INTEGER,M=typeof C.order=="number"?C.order:Number.MAX_SAFE_INTEGER;return k!==M?k-M:String(C.updatedAt||"").localeCompare(String(h.updatedAt||""))}).slice(0,7)},[o,Xe]),ee=g.useMemo(()=>zn(zt,o.settings.appLanguage)??na[0],[zt,o.settings.appLanguage,na]),Ve=g.useMemo(()=>ee?Wn(ee,tt,o.settings.appLanguage):null,[ee,o.settings.appLanguage,tt]),_a=!!(ee&&(ee.options.length>0||!ee.quickCreateTemplateId)),vn=g.useMemo(()=>Oo(Ve,At),[Ve,At]),I=g.useRef(o),K=g.useRef(c),se=g.useRef({...qa}),jn=g.useRef(null),Tt=g.useRef(null),Da=g.useRef(null),Ba=g.useRef(null),In=g.useRef(null),Nn=g.useRef(null),Oa=g.useRef(new Map),An=g.useRef(new zg),ra=g.useRef(0),Mn=g.useRef(null),$a=g.useRef(0),ia=g.useRef(null),Wt=g.useRef(!1),Be=g.useRef(0),Ee=g.useRef(0),Fa=g.useRef(),Tn=g.useRef(),Rn=g.useRef(null),la=g.useRef(null),da=g.useRef(0),za=g.useRef(null),Ht=g.useRef(0),x=g.useRef(!1),L=g.useCallback(a=>{x.current=a,ys(a)},[]),le=g.useCallback((a="keyboard")=>{xs(s=>{const i=s==="curated"?"full":"curated";return ab(i),f.emit("canvas.functionToolbar.toggle",{mode:i,source:a}),i})},[]);g.useEffect(()=>(f.transitionTo("board-file-loading","mindcanvas-mount"),f.transitionTo("interactive-fullres","react-board-ready"),()=>f.transitionTo("disposed","mindcanvas-unmount")),[]),g.useEffect(()=>{const a=()=>ho(Vs());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;L(s),f.emit("canvas.fullscreen.changed",{active:s})};return document.addEventListener("fullscreenchange",a),()=>document.removeEventListener("fullscreenchange",a)},[L]),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,k,M,S,T,E,_,A;const i=s.data;if(i.type==="READY"){Wt.current=!0,Ge("ready"),f.emit("search.worker.ready");return}if(i.type!=="SEARCH_RESULT")return;if(i.seq!==$a.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);J(u),ge(0),je("worker"),f.emit("search.completed",{query:i.query,count:u.length,engine:"worker",durationMs:(h=i.profile)==null?void 0:h.durationMs,documentCount:(C=i.profile)==null?void 0:C.documentCount,candidateCount:(k=i.profile)==null?void 0:k.candidateCount,rankedCount:(M=i.profile)==null?void 0:M.rankedCount,viewportBoosted:(S=i.profile)==null?void 0:S.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=>{Wt.current=!1,Ge("failed"),f.emit("search.worker.failed",{message:s.message})},()=>{a.terminate(),ia.current=null,Wt.current=!1}},[]),g.useEffect(()=>{const a=()=>dt({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(Fa.current),Fa.current=window.setTimeout(()=>{const a=Pt(I.current);He(mt()),po(a?"ready":"error"),go(a?"Saved in this browser.":"Local browser storage failed.")},280),()=>window.clearTimeout(Fa.current)),[o]),g.useEffect(()=>{const a=ia.current;if(!a)return;const s=window.setTimeout(()=>{a.postMessage({type:"REBUILD_BOARD",boardId:o.id,nodes:oc(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(()=>{K.current=c},[c]),g.useEffect(()=>{f.emit("canvas.gridMode.applied",{boardId:o.id,gridType:ir(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 $=g.useCallback((a,s=!0)=>{se.current=a,Da.current&&(Da.current.style.transform=`translate3d(${a.x}px, ${a.y}px, 0) scale(${a.scale})`),Tt.current&&(Tt.current.style.setProperty("--grid-x",`${a.x}px`),Tt.current.style.setProperty("--grid-y",`${a.y}px`),Tt.current.style.setProperty("--grid-small",`${24*a.scale}px`),Tt.current.style.setProperty("--grid-large",`${144*a.scale}px`)),window.clearTimeout(Tn.current),Tn.current=window.setTimeout(()=>ka(a),Ah),s&&f.emit("camera.patch",{...a})},[]),Pe=g.useCallback(async()=>{var i;const a=++Be.current;if(te("checking"),Te(null),ce(null),f.emit("runtimeStatus.bridge.refresh.requested",{source:"mindcanvas"}),!pt()){te("blocked"),Te(null),yt([]),ce("Hosted LocalBridge access is off."),Ue(null),fe("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:"refresh",reason:"hosted-access-off"});return}const s=await ha();if(a===Be.current){if(Te(s.status??null),s.state!=="connected"){te(s.state),yt([]),ce(s.message||"LocalBridge is unavailable."),Ue(null),fe(s.message||"LocalBridge is unavailable.");return}try{const[l,u]=await Promise.all([sl(s.baseUrl),Np(s.baseUrl)]);if(a!==Be.current)return;const h=xa(l.rootPath||((i=s.status)==null?void 0:i.workspace));Ue(h||null),fe(h?null:"LocalBridge workspace path is unavailable."),h&&Bt(C=>ud(h,C)),te("connected"),yt(u),ce(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!==Be.current)return;te("unavailable"),yt([]);const u=l instanceof Error?l.message:String(l);ce(u),fe(u)}}},[]);g.useEffect(()=>{pt()&&Pe()},[Pe]),g.useEffect(()=>{ea&&(Qt(!0),f.emit("mindcanvas.projectGallery.opened",{source:"startup"}))},[ea]);const Rt=g.useCallback(()=>{Qt(a=>{const s=!a;return s&&Dt.length===0&&we!=="checking"&&Pe(),f.emit(s?"mindcanvas.projectGallery.opened":"mindcanvas.projectGallery.closed",{source:"top-tab"}),s})},[Dt.length,we,Pe]),Fe=g.useCallback(a=>{Qt(s=>(s&&f.emit("mindcanvas.projectGallery.closed",{source:a}),!1))},[]),ca=g.useCallback(a=>{lo(a),localStorage.setItem($l,String(a)),f.emit("mindcanvas.projectGallery.startupPreference",{enabled:a})},[]),Ua=g.useCallback(async(a="manual")=>{if(ho(Vs()),!be){const s=_e.cloudBoards.canAttempt?"sign-in-required":_e.cloudBoards.mode;Le(s==="sign-in-required"?"Login with Supabase is required before cloud boards can be listed.":"Cloud board adapter is not configured."),f.emit("projectStorage.cloud.unavailable",{reason:s,source:a});return}$t(!0),Le(null);try{const s=await _p(sr());fo(s),Le(s.length>0?`Loaded ${s.length} cloud board${s.length===1?"":"s"}.`:"No cloud boards yet.")}catch(s){Le(s instanceof Error?s.message:String(s))}finally{$t(!1)}},[be,_e.cloudBoards.canAttempt,_e.cloudBoards.mode]),ni=g.useCallback(a=>{co(a),f.emit("projectStorage.tab",{tab:a}),a==="cloud"&&Ua("tab")},[Ua]),oi=g.useCallback(()=>{em(!0),f.emit("runtimeStatus.bridge.hostedAccess.enabled"),Pe()},[Pe]),wo=g.useCallback(a=>{Ue(a),Bt(s=>ud(a,s))},[]),sc=g.useCallback(async(a="manual")=>{var i;const s=++Ee.current;if(fe(null),f.emit("projectStorage.workspace.refresh.requested",{source:a}),!pt()){Ue(null),fe("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:a,reason:"hosted-access-off"});return}try{const l=await ha();if(s!==Ee.current)return;if(Te(l.status??null),l.state!=="connected"){te(l.state),Ue(null),fe(l.message||"LocalBridge is unavailable.");return}const u=await sl(l.baseUrl);if(s!==Ee.current)return;const h=xa(u.rootPath||((i=l.status)==null?void 0:i.workspace));fe(h?null:"LocalBridge workspace path is unavailable."),h&&wo(h),f.emit("projectStorage.workspace.refresh",{source:a,path:h||null})}catch(l){if(s!==Ee.current)return;fe(l instanceof Error?l.message:String(l))}},[wo]),ks=g.useCallback(async(a,s)=>{const i=xa(a);if(!i||wt)return;const l=++Ee.current;if(Ne(!0),fe("Switching LocalBridge workspace..."),f.emit("projectStorage.workspace.set.requested",{source:s,path:i}),!pt()){Ue(null),fe("Hosted LocalBridge access is off."),Ne(!1),f.emit("projectStorage.workspace.blocked",{source:s,reason:"hosted-access-off"});return}try{const u=await ha();if(l!==Ee.current)return;if(Te(u.status??null),u.state!=="connected"){te(u.state),fe(u.message||"LocalBridge is unavailable.");return}const h=Hn(u.status);if(!h){te("unavailable"),fe("LocalBridge write token is unavailable.");return}const C=await tm(i,h,u.baseUrl);if(l!==Ee.current)return;const k=xa(C.workspace||i);wo(k),te("connected"),fe(`Local workspace set to ${Xo(k)}.`),f.emit("projectStorage.workspace.set",{source:s,path:k}),Pe()}catch(u){if(l!==Ee.current)return;te("unavailable"),fe(u instanceof Error?u.message:String(u))}finally{l===Ee.current&&Ne(!1)}},[wt,Pe,wo]),rc=g.useCallback(async()=>{const a=++Ee.current;if(Ne(!0),fe("Opening folder picker..."),f.emit("projectStorage.workspace.browse.requested",{path:Re||null}),!pt()){Ue(null),fe("Hosted LocalBridge access is off."),Ne(!1),f.emit("projectStorage.workspace.blocked",{source:"browse",reason:"hosted-access-off"});return}try{const s=await ha();if(a!==Ee.current)return;if(Te(s.status??null),s.state!=="connected"){te(s.state),fe(s.message||"LocalBridge is unavailable.");return}const i=Hn(s.status),l=await am(Re,i,s.baseUrl);if(a!==Ee.current)return;if(l.canceled||!l.success||!l.path){fe("Workspace selection cancelled."),f.emit("projectStorage.workspace.browse.cancelled");return}f.emit("projectStorage.workspace.browse",{path:l.path}),Ne(!1),await ks(l.path,"browse")}catch(s){if(a!==Ee.current)return;fe(s instanceof Error?s.message:String(s))}finally{a===Ee.current&&Ne(!1)}},[ks,Re]),ic=g.useCallback(async()=>{var s,i;const a=++Be.current;if(We(!0),ce(null),(s=I.current.source)!=null&&s.partialImport){ce("This imported board came from a partial original payload, so export is blocked to avoid data loss."),We(!1);return}if((i=I.current.source)!=null&&i.truncated){ce("This imported board was truncated, so export is blocked to avoid data loss."),We(!1);return}if(!pt()){te("blocked"),Te(null),ce("Hosted LocalBridge access is off."),We(!1);return}try{const l=await ha();if(a!==Be.current)return;if(Te(l.status??null),l.state!=="connected"){te(l.state),ce(l.message||"LocalBridge is unavailable.");return}const u=Hn(l.status);if(!u){te("unavailable"),ce("LocalBridge write token is unavailable.");return}const h=await Mp(I.current,se.current,u,l.baseUrl);if(a!==Be.current)return;const C={...I.current,nodes:h.nodes,source:h.source,updatedAt:h.metadata.UpdatedAt||new Date().toISOString()};r(C),Pt(C),He(mt()),te("connected"),yt(k=>[h.metadata,...k.filter(M=>M.Id!==h.metadata.Id)]),ce(`Exported "${Ze(h.metadata.Title)}" to LocalBridge.`)}catch(l){if(a!==Be.current)return;te("unavailable"),ce(l instanceof Error?l.message:String(l))}finally{a===Be.current&&We(!1)}},[]),Ke=g.useCallback((a,s,i={})=>{const l=ml(a),u=ol(l),h=ul(u);p(C=>fa(C,I.current,{description:"Activate board"})),b([]),r(h),y(h.nodes[0]?[h.nodes[0].id]:[]),Q(null),U(null),X(null),Fe("board-activate"),f.emit(s,{boardId:h.id,...i})},[Fe]),si=g.useCallback(()=>{const a=id(I.current.settings);Ke(a,"board.local.create"),$({x:540,y:210,scale:1})},[Ke,$]),lc=g.useCallback(async a=>{if(!be){Le("Login with Supabase is required before cloud boards can be opened."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:"load-board"});return}bo(a.id),Le(null);try{const s=await Dp(sr(),a.id,I.current.settings);if(!s){Le("Cloud board was not found or is not available to this user.");return}Ke(s,"board.cloud.switch",{sourceBoardId:a.id}),$({x:540,y:210,scale:1})}catch(s){Le(s instanceof Error?s.message:String(s))}finally{bo(null)}},[Ke,$,be]),vo=g.useCallback(async(a,s)=>{if(!be){Le("Login with Supabase is required before cloud boards can be saved."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:s});return}$t(!0),Le(null);try{const i=await Bp(sr(),a,se.current);if(!i){Le("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),Pt(u),He(mt()),fo(h=>[i,...h.filter(C=>C.id!==i.id)]),Le(`Saved "${Ze(i.name)}" to cloud.`)}catch(i){Le(i instanceof Error?i.message:String(i))}finally{$t(!1)}},[be]),dc=g.useCallback(()=>{vo(I.current,"save-current")},[vo]),cc=g.useCallback(()=>{const a=id(I.current.settings);vo(a,"new-cloud-board")},[vo]),uc=g.useCallback(()=>{var l;if(!ee)return;if(ee.options.length>0||!ee.quickCreateTemplateId){const u=se.current,h={x:(window.innerWidth/2-u.x)/u.scale,y:(window.innerHeight/2-u.y)/u.scale},C=I.current.nodes,k=C.length?Math.max(...C.map(A=>A.x+A.width)):h.x-280-Ko,M=C.length?Math.min(...C.map(A=>A.y)):h.y-310,S=nm(ee,tt,k+Ko,M,At,I.current.settings.appLanguage);r(A=>{var w;return p(G=>fa(G,A,{description:"Create template card"})),b([]),f.emit("templateCard.node.create",{id:S.id,launcherId:ee.id,optionId:((w=S.metadata)==null?void 0:w.templateLauncherSelectedOptionId)??null,source:"launcher-panel"}),{...A,nodes:[...A.nodes,S],updatedAt:new Date().toISOString()}}),y([S.id]);const T=Math.min(se.current.scale,de((window.innerHeight-190)/S.height,.72,1)),E=Math.max(320,window.innerHeight-180);$({...se.current,scale:T,x:window.innerWidth/2-(S.x+S.width/2)*T,y:48+E/2-(S.y+S.height/2)*T}),O(S.id),window.setTimeout(()=>O(A=>A===S.id?null:A),1e3),Nt(!1),Je(null);const _="Template card added to the current canvas.";$e(_),window.setTimeout(()=>{$e(A=>A===_?null:A)},2200),f.emit("templateCard.node.focus",{nodeId:S.id,launcherId:ee.id});return}const s=Oo(Ve,At);if(s){Je(s),f.emit("template.validation.failed",{launcherId:ee.id,optionId:tt,templateId:(Ve==null?void 0:Ve.id)??null,message:s});return}const i=om(ee,tt,At,I.current.settings);if(!i){const u="Template could not be created.";Je(u),f.emit("template.validation.failed",{launcherId:ee.id,optionId:tt,templateId:(Ve==null?void 0:Ve.id)??null,message:u});return}Ke(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}),$({x:540,y:210,scale:1}),Nt(!1),Je(null)},[Ke,Ve,ee,$,tt,At]),ri=g.useCallback(a=>{if(a===I.current.id){Fe("stored-board-current");return}const s=Uu(a);s&&(Ke(s,"board.local.switch"),$({x:540,y:210,scale:1}))},[Ke,$,Fe]),Ss=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}),Wu(a),He(mt())},[]),mc=g.useCallback((a,s)=>{if(!a||!s||a===s)return;Pt(I.current);const i=mt(),l=Pa.map(T=>T.id),u=l.indexOf(a),h=l.indexOf(s);if(u<0||h<0)return;const C=[...l],k=C.splice(u,1)[0];if(!k)return;C.splice(h,0,k);const M=i.map(T=>T.id).filter(T=>!C.includes(T)),S=Hu([...C,...M]);He(S),f.emit("board.tabs.drop",{sourceId:a,targetId:s,visibleIds:C})},[Pa]),pc=g.useCallback(async a=>{const s=++Be.current;Sa(a.Id),ce(null);try{const i=await Tp(a,I.current.settings);if(s!==Be.current)return;Ke(i,"board.localBridge.switch",{sourceBoardId:a.Id});const l=Cr(a.LastCameraX,a.LastCameraY,a.LastCameraZ);$(l?{...l,scale:de(l.scale,Zo,Qo)}:{x:540,y:210,scale:1})}catch(i){if(s!==Be.current)return;ce(i instanceof Error?i.message:String(i))}finally{s===Be.current&&Sa(null)}},[Ke,$]),gc=g.useCallback(()=>{var a;(a=Nn.current)==null||a.click()},[]),hc=g.useCallback(async a=>{var i;const s=Array.from(a??[]).filter(l=>/\.json$/i.test(l.name));if(s.length===0){$e("Choose a React or MindExec board JSON file."),window.setTimeout(()=>$e(null),1800);return}try{const l=await Promise.all(s.map(async T=>({file:T,payload:JSON.parse(await T.text())}))),u=l.find(mr),h=Lf(l),C=l.find(T=>!mr(T)&&ur(T.payload))??l.find(T=>!mr(T)&&vd(T.payload)>0);if(!C)throw new Error("No board JSON file was found.");const k=ur(C.payload)?null:Ef(C,h),M=k?Cr(k.metadata.LastCameraX,k.metadata.LastCameraY,k.metadata.LastCameraZ):null,S=ur(C.payload)?Rf(C.payload,C.file.name):Id(C.payload,I.current.settings,{boardId:(k==null?void 0:k.metadata.Id)??us(C.file.name),title:(k==null?void 0:k.metadata.Title)||us(C.file.name),updatedAt:k==null?void 0:k.metadata.UpdatedAt,layoutPayload:u==null?void 0:u.payload,cameraBookmarks:k==null?void 0:k.metadata.CameraBookmarks});if(S.nodes.length===0)throw new Error("The selected file did not contain any importable board nodes.");Ke(S,"board.import.file",{fileName:C.file.name,layoutFileName:(u==null?void 0:u.file.name)??null,metadataFileName:(k==null?void 0:k.fileName)??null,nodes:S.nodes.length,edges:S.edges.length,sourceKind:((i=S.source)==null?void 0:i.kind)??null,originalBoardId:(k==null?void 0:k.metadata.Id)??null,cameraRestored:!!M}),Pt(S),He(mt()),$(M?{...M,scale:de(M.scale,Zo,Qo)}:{x:540,y:210,scale:1}),$e(`Imported "${Ze(S.name)}".`),window.setTimeout(()=>$e(null),2200)}catch(l){const u=l instanceof Error?l.message:String(l);$e(`Import failed: ${u}`),f.emit("board.import.failed",{message:u}),window.setTimeout(()=>$e(null),3200)}},[Ke,$]);g.useEffect(()=>{$(se.current,!1)},[$]);const Me=g.useCallback((a,s)=>{const i=se.current;return{x:(a-i.x)/i.scale,y:(s-i.y)/i.scale}},[]),Wa=g.useCallback((a,s)=>{const i=Number.isFinite(a)&&Number.isFinite(s)?{clientX:a,clientY:s}:Rn.current??{clientX:window.innerWidth/2,clientY:window.innerHeight/2},l=Me(i.clientX,i.clientY);return{x:l.x-150,y:l.y-80}},[Me]),fc=g.useCallback(a=>{cr(a.target)||(Rn.current={clientX:a.clientX,clientY:a.clientY})},[]),D=g.useCallback((a,s,i={})=>{r(l=>{p(h=>fa(h,l,{description:s,mergeKey:typeof i.mergeKey=="string"?i.mergeKey:null})),b([]);const u=a(l);return f.emit(s,i),{...u,updatedAt:new Date().toISOString()}})},[]);g.useEffect(()=>{const a=Sm();if(!a)return;const s=Me(window.innerWidth/2,window.innerHeight/2),{sourceNode:i,itemNodes:l,taskNode:u,edges:h}=wm(a,{x:s.x-390,y:s.y-145});if(I.current.nodes.some(C=>{var k;return((k=C.metadata)==null?void 0:k.ToolHandoffId)===a.id})){cl(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}),cl(a.id),y([u.id]),O(u.id),window.setTimeout(()=>O(C=>C===u.id?null:C),1400)},[D,Me]);const Ha=g.useCallback((a,s,i={})=>{r(l=>{const u=a(l);return f.emit(s,i),{...u,updatedAt:new Date().toISOString()}})},[]),ws=g.useCallback(a=>{const s=a.slice(0,90);Ha(i=>({...i,name:s}),"board.rename",{boardId:I.current.id})},[Ha]),Ie=g.useCallback((a,s="inline")=>{const i=typeof a.appLanguage=="string"?{...a,appLanguage:gd(a.appLanguage)}:a;if(Ha(l=>{const u={...l.settings,...i};if(typeof i.appLanguage=="string"){const h=sm(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=rm(i.appLanguage);f.emit("appLanguage.select",{appLanguage:l,source:s})}if(typeof i.model=="string"){const l=Jn(i.model),u=pr(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};vm(l,s)}jm({...I.current.settings,...i})},[Ha]),ii=g.useCallback((a,s)=>{Ie({[a]:s},`inline.${String(a)}`)},[Ie]),bc=g.useMemo(()=>so(o.settings,"Image"),[o.settings]),yc=g.useMemo(()=>so(o.settings,"Video"),[o.settings]),xc=g.useMemo(()=>im(o.settings),[o.settings]),vs=Jn(o.settings.model),Ln=pr(vs),Cc=g.useCallback((a,s="bottom-input")=>{const i=Jn(a);Ie({model:i},`connection.model.${s}`)},[Ie]),kc=g.useCallback((a,s)=>{const i=lm(a,s),l=rl(a).find(M=>M.id===i);if(!l)return;const u=I.current.settings,h=a==="Image"?u.imageRouterImageAspectPresetId:u.imageRouterVideoAspectPresetId,C=gr(a,l,h),k=a==="Image"?{imageRouterImageModel:l.id,imageRouterImageAspectPresetId:C.id}:{imageRouterVideoModel:l.id,imageRouterVideoAspectPresetId:C.id};Ie(k,`inline.${a.toLowerCase()}Model`),f.emit("media.model.select",{mode:a,model:l.id,aspectPresetId:C.id,requestedSize:hr(C)})},[Ie]),Sc=g.useCallback((a,s)=>{const i=hd(a,I.current.settings),l=gr(a,i,s),u=a==="Image"?{imageRouterImageAspectPresetId:l.id}:{imageRouterVideoAspectPresetId:l.id};Ie(u,`inline.${a.toLowerCase()}Aspect`),f.emit("media.aspect.select",{mode:a,model:i.id,aspectPresetId:l.id,requestedSize:hr(l)})},[Ie]),wc=g.useCallback(()=>{xn(!0),f.emit("settings.dialog.open",{boardId:I.current.id})},[]),vc=g.useCallback(()=>{xn(!1),f.emit("settings.dialog.close",{boardId:I.current.id})},[]),li=g.useCallback(()=>{ie(!0),f.emit("promptDebug.open",{boardId:I.current.id})},[]),jc=g.useCallback(()=>{ie(!1),f.emit("promptDebug.close",{boardId:I.current.id})},[]);g.useEffect(()=>()=>{t==null||t([])},[t]),g.useEffect(()=>{t&&t([{id:"mindcanvas-prompt-debug",label:"Prompt Debugger",description:"Inspect prompt and local diagnostics",icon:$m,onClick:li,active:ta,testId:"prompt-debug-open"}])},[t,li,ta]);const Ic=g.useCallback(a=>{const s=I.current.settings.appLanguage,i=zn(a,s);if(!i)return;const l=Bo(i),u=Wn(i,l==null?void 0:l.id,s);xo(i.id),Ma((l==null?void 0:l.id)??null),Ta(Un(u)),Je(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})},[]),Nc=g.useCallback(()=>{const a=I.current.settings.appLanguage,s=zn(zt,a)??na[0];if(!s)return;const i=Bo(s,tt),l=Wn(s,i==null?void 0:i.id,a);xo(s.id),Ma((i==null?void 0:i.id)??null),Ta(u=>Object.keys(u).length>0?u:Un(l)),Je(null),La(!1),nt(!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})},[zt,tt,na]),Ac=g.useCallback(()=>{Nt(!1),Je(null),f.emit("template.launcher.close",{launcherId:zt})},[zt]),Mc=g.useCallback(a=>{if(!ee)return;const s=Wn(ee,a,I.current.settings.appLanguage);Ma(a),Ta(Un(s)),Je(null),f.emit("template.option.select",{launcherId:ee.id,optionId:a,templateId:(s==null?void 0:s.id)??null})},[ee]),Tc=g.useCallback((a,s)=>{Ta(i=>({...i,[a]:s})),wn&&Je(null),f.emit("template.input.patch",{launcherId:ee==null?void 0:ee.id,key:a})},[ee==null?void 0:ee.id,wn]),Ye=g.useCallback(a=>{So(a),window.setTimeout(()=>{So(s=>s===a?null:s)},2600)},[]),Rc=g.useCallback(()=>{Nt(!1),nt(!1),oa(a=>{const s=!a;return f.emit(s?"templateStudio.chooser.open":"templateStudio.chooser.close",{boardId:I.current.id,studioOpen:Ra}),s})},[Ra]),di=g.useCallback(()=>{oa(!1),f.emit("templateStudio.chooser.close",{boardId:I.current.id})},[]),ci=g.useCallback(()=>{const a=I.current;Nt(!1),nt(!1),oa(!1),Co(zl(a.id,a.name)),at(null),La(!0),f.emit("templateStudio.open",{boardId:a.id,nodeCount:a.nodes.length})},[]),jo=g.useCallback(a=>{const s=I.current,i=$o(ve,s.nodes);at(i),Ul(s.id,ve);const l=Pt(s);return He(mt()),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},[ve]),ui=g.useCallback(()=>{jo("exit"),La(!1),oa(!1),nt(!1),at(null),f.emit("templateStudio.close",{boardId:I.current.id})},[jo]),Lc=g.useCallback(()=>{const a=Of(I.current.settings),s=qo(a.name);oa(!1),nt(!1),Co(s),at(null),La(!0),Ul(a.id,s),Pt(a),He(mt()),Ke(a,"templateStudio.board.create",{templateId:s.templateId,source:"template-studio-chooser"}),$({x:540,y:210,scale:1}),f.emit("templateStudio.chooser.startNew",{boardId:a.id,templateId:s.templateId}),Ye("New Template Studio draft board opened.")},[Ke,$,Ye]),Ec=g.useCallback(()=>{ci(),f.emit("templateStudio.chooser.convertCurrent",{boardId:I.current.id,nodes:I.current.nodes.length}),Ye("Current board is now in Template Studio mode.")},[ci,Ye]),Io=g.useCallback((a,s)=>{Co(i=>{const l={...i,[a]:a==="templateId"?Zn(s):s};return f.emit("templateStudio.draft.patch",{key:a}),l}),at(null)},[]),Pc=g.useCallback(()=>{const a=jo("save");Ye(a.issues.length>0?"Template draft saved with manifest issues.":"Template draft and board saved locally.")},[jo,Ye]),_c=g.useCallback(a=>{const s=Me(window.innerWidth/2,window.innerHeight/2),i=W("node"),l=il(a),u=`${a.replace("template.","")}-${Date.now().toString(36)}`,h=a==="template.input",C=h?300:a==="template.prompt"?360:340,k=h?178:a==="template.prompt"?214:190,M={[z.studioNodeType]:a,[z.templateNodeId]:u,[z.templateRole]:a.replace(/^template\./,""),[z.compileTarget]:l,Source:"template-studio"};h&&(M[z.inputKey]=u,M[z.inputType]="text",M[z.inputRequired]="true");const S={id:i,kind:a==="template.prompt"?"ai-task":a==="template.section"?"markdown":"note",title:Ws(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-k/2,width:C,height:k,status:a==="template.prompt"?"idle":void 0,tags:["Template Studio",Ws(a)],metadata:M};D(T=>({...T,nodes:[...T.nodes,S]}),"templateStudio.node.add",{id:S.id,studioNodeType:a,compileTarget:l}),y([S.id]),at(null)},[D,Me]),js=g.useCallback(()=>{const a=$o(ve,I.current.nodes);return at(a),f.emit("templateStudio.compile",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length,issues:a.issues.length}),Ye(a.issues.length>0?"Template manifest has issues.":"Template manifest compiled."),a},[Ye,ve]),Dc=g.useCallback(async()=>{const a=pe??$o(ve,I.current.nodes);pe||at(a);const s=await Qn(a.manifestJson);f.emit("templateStudio.manifest.copy",{templateId:a.template.id,chars:a.manifestJson.length,method:s}),Ye("Template manifest copied.")},[Ye,ve,pe]),Bc=g.useCallback(()=>{const a=js();if(a.issues.length>0){nt(!1),f.emit("templateStudio.test.open.blocked",{templateId:a.template.id,issues:a.issues.length}),Ye("Fix manifest issues before test create.");return}sa(Un(a.template)),Ut(null),nt(!0),f.emit("templateStudio.test.open",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length})},[js,Ye]),Oc=g.useCallback(()=>{nt(!1),sa({}),Ut(null),f.emit("templateStudio.test.close",{templateId:(pe==null?void 0:pe.template.id)??null})},[pe==null?void 0:pe.template.id]),$c=g.useCallback((a,s)=>{sa(i=>({...i,[a]:s})),Ea&&Ut(null),f.emit("templateStudio.test.input.patch",{key:a})},[Ea]),Fc=g.useCallback(()=>{const a=(pe==null?void 0:pe.issues.length)===0?pe:$o(ve,I.current.nodes);if(at(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=Oo(a.template,Mt);if(s){Ut(s),f.emit("templateStudio.test.board.blocked",{templateId:a.template.id,message:s});return}const i=Wl(ve),l=dm(i,void 0,a.template,Mt,I.current.settings);Pt(l.board),Pt(I.current),He(mt()),nt(!1),sa({}),Ye(`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})},[Ye,ve,pe,Mt]),zc=g.useCallback((a,s)=>{y(i=>s?i.includes(a)?i.filter(l=>l!==a):[...i,a]:[a]),Q(null)},[]),Uc=g.useCallback(()=>{var C,k,M,S,T,E,_,A;const i=de(window.innerWidth*.62,282,Math.max(282,window.innerWidth-250-32)),l=de(window.innerHeight*.58,300/2+32,Math.max(300/2+32,window.innerHeight-300/2-96)),u=Me(i,l),h={id:W("node"),kind:"memo",title:"Agent",body:Oh,x:u.x-500/2,y:u.y-300/2,width:500,height:300,tags:["Agent Command","Researcher","Draft"],metadata:Wf()};D(w=>({...w,nodes:[...w.nodes,h]}),"agentCommand.node.add",{id:h.id,semanticType:(C=h.metadata)==null?void 0:C.SemanticType,status:(k=h.metadata)==null?void 0:k.AgentCommandStatus,requestedRole:(M=h.metadata)==null?void 0:M.AgentCommandRequestedRole,adapterState:(S=h.metadata)==null?void 0:S.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}),y([h.id]),Q(null),O(h.id),window.setTimeout(()=>O(w=>w===h.id?null:w),1200)},[D,Me]),Wc=g.useCallback(()=>{var C,k,M,S,T,E,_,A;const i=de(window.innerWidth*.6,232,Math.max(232,window.innerWidth-200-32)),l=de(window.innerHeight*.56,300/2+32,Math.max(300/2+32,window.innerHeight-300/2-96)),u=Me(i,l),h={id:W("node"),kind:"memo",title:"Code Note",body:Bh,x:u.x-400/2,y:u.y-300/2,width:400,height:300,tags:["Code Note","Draft","Unlinked"],metadata:Hf()};D(w=>({...w,nodes:[...w.nodes,h]}),"codeNote.node.add",{id:h.id,semanticType:(C=h.metadata)==null?void 0:C.SemanticType,status:(k=h.metadata)==null?void 0:k.CodeNoteStatus,syncState:(M=h.metadata)==null?void 0:M.CodeNoteSyncState,adapterState:(S=h.metadata)==null?void 0:S.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}),y([h.id]),Q(null),O(h.id),window.setTimeout(()=>O(w=>w===h.id?null:w),1200)},[D,Me]),Ce=g.useCallback((a,s)=>{var T,E,_,A,w,G,ae,ke,Ka;if(a==="remote-monitor"){const Z=I.current.nodes.find(ba);if(Z){const Ya=Kl(Z),Ga=se.current.scale,Do=Vl(Z.height,window.innerHeight);$({...se.current,x:window.innerWidth/2-Ya.x*Ga,y:Do-Ya.y*Ga}),y([Z.id]),O(Z.id),window.setTimeout(()=>O(Gt=>Gt===Z.id?null:Gt),1e3);const Fn="Remote monitor already exists on this board. Focused existing node.";$e(Fn),window.setTimeout(()=>{$e(Gt=>Gt===Fn?null:Gt)},2200),f.emit("remoteMonitor.node.duplicateIgnored",{action:"toolbar-add",nodeId:Z.id,surface:"mindcanvas-node"});return}}const i=s?Zr[s]:null,l=(i==null?void 0:i.mode)??(a==="image"?"Image":a==="video"?"Video":null),u=l?so(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,k=a==="remote-monitor"?Vl(C,window.innerHeight):window.innerHeight/2,M=Me(window.innerWidth/2,k),S={id:W("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
41
+ `)}function oc(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 Dr(e){return[...e].sort(oc)}function Xf(e,t){const o=new Map(e.nodes.filter(v=>v.kind==="ai-task").map(v=>[v.id,v])),r=new Set([...t].filter(v=>o.has(v))),d=new Map,p=new Map;for(const v of r)d.set(v,new Set),p.set(v,0);for(const v of e.edges){if(!r.has(v.from)||!r.has(v.to)||v.from===v.to)continue;const R=d.get(v.from);!R||R.has(v.to)||(R.add(v.to),p.set(v.to,(p.get(v.to)??0)+1))}const m=[],b=new Set,c=Dr([...r].filter(v=>(p.get(v)??0)===0).map(v=>o.get(v)));for(;c.length>0;){const v=c.shift();if(b.has(v.id))continue;b.add(v.id),m.push(v);const R=[...d.get(v.id)??[]].map(j=>o.get(j)).filter(j=>!!j);for(const j of R)p.set(j.id,Math.max(0,(p.get(j.id)??0)-1)),(p.get(j.id)??0)===0&&c.push(j);c.sort(oc)}const y=Dr([...r].filter(v=>!b.has(v)).map(v=>o.get(v)).filter(Boolean));return[...m,...y]}function Br(e,t){var m,b;const o=new Set(e.nodes.filter(c=>c.kind==="ai-task").map(c=>c.id));if(!o.has(t))return[];const r=new Map;for(const c of o)r.set(c,new Set);for(const c of e.edges)!o.has(c.from)||!o.has(c.to)||((m=r.get(c.from))==null||m.add(c.to),(b=r.get(c.to))==null||b.add(c.from));const d=new Set,p=[t];for(;p.length>0;){const c=p.pop();if(!d.has(c)){d.add(c);for(const y of r.get(c)??[])d.has(y)||p.push(y)}}return Xf(e,d)}function qf(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 Dr(e.nodes.filter(p=>p.kind==="ai-task"))){if(!o.has(d.id))continue;const p=Br(e,d.id);for(const m of p)o.delete(m.id);r.push(p)}return r}function so(e,t){const o=fd(t,e),r=t==="Image"?e.imageRouterImageAspectPresetId:e.imageRouterVideoAspectPresetId,d=gr(t,o,r);return{mode:t,model:o,aspect:d,aspectOptions:ym(o,t),requestedSize:hr(d)}}function ai(e,t){const o=so(e,t);return{InputMode:t,AppLanguage:hd(e.appLanguage),MediaPromptLanguageInstruction:xm(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 sc(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 Jf(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 Zf(e,t,o,r=8){if(!t.trim())return[];const d=Cg(sc(e)),p=new Map(e.map(m=>[m.id,m]));return kg(d,t,{limit:r,viewport:o}).hits.map(m=>p.get(m.nodeId)).filter(m=>!!m)}function cd(e,t,o="none"){const r=new Set(t.nodes.map(p=>p.id)),d=e.filter((p,m)=>r.has(p)&&e.indexOf(p)===m);return d.length>0||o==="none"?d:t.nodes[0]?[t.nodes[0].id]:[]}function ud(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('input,textarea,select,[contenteditable="true"],[contenteditable=""]'):!1}function Qf(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('button,a,[role="button"],[role="tab"],summary'):!1}function Yo(e){const t=e;if(!t)return null;const o=Number(t.x),r=Number(t.y),d=Number(t.scale);return!Number.isFinite(o)||!Number.isFinite(r)||!Number.isFinite(d)?null:{x:o,y:r,scale:de(d,Zo,Qo)}}function xa(e){return typeof e=="string"?e.trim():""}function Xo(e,t=34){const o=xa(e);if(!o)return"workspace";const p=o.replace(/\\/g,"/").split("/").filter(Boolean).slice(-2).join("/")||o;return p.length<=t?p:`...${p.slice(-(t-3))}`}function eb(){try{const e=window.localStorage.getItem(qd),t=e?JSON.parse(e):[];return Array.isArray(t)?t.map(xa).filter(Boolean).filter((o,r,d)=>d.findIndex(p=>p.toLowerCase()===o.toLowerCase())===r).slice(0,Jd):[]}catch{return[]}}function tb(e){const t=e.map(xa).filter(Boolean).filter((o,r,d)=>d.findIndex(p=>p.toLowerCase()===o.toLowerCase())===r).slice(0,Jd);try{window.localStorage.setItem(qd,JSON.stringify(t))}catch{}return t}function ab(){try{return window.localStorage.getItem(Xd)==="full"?"full":"curated"}catch{return"curated"}}function nb(e){try{window.localStorage.setItem(Xd,e)}catch{}}function md(e,t){return tb([e,...t.filter(o=>o.toLowerCase()!==e.toLowerCase())])}function fb({navigate:e,onSidebarActionsChange:t}){var _i,Di,Bi,Oi,$i,Fi,zi,Ui,Hi,Wi,Vi,Gi,Ki,Yi,Xi;const[o,r]=g.useState(()=>ml(ol(pl(Uu(al))))),[d,p]=g.useState([]),[m,b]=g.useState([]),[c,y]=g.useState(["node-agent-command"]),[v,R]=g.useState(""),[j,P]=g.useState(""),[V,F]=g.useState(0),[B,J]=g.useState([]),[ne,ge]=g.useState(0),[xe,je]=g.useState("idle"),[he,Ye]=g.useState("booting"),[rt,it]=g.useState(null),[me,X]=g.useState(null),[re,Q]=g.useState(null),[bt,O]=g.useState(null),[lt,U]=g.useState(null),[oe,ka]=g.useState({...qa}),[ye,dt]=g.useState(()=>({width:window.innerWidth,height:window.innerHeight})),[St,Qt]=g.useState(!1),[ea,lo]=g.useState(()=>localStorage.getItem(Fl)==="true"),[ze,co]=g.useState("local"),[Dt,yt]=g.useState([]),[we,te]=g.useState(pt()?"idle":"blocked"),[bs,Te]=g.useState(null),[Qe,ce]=g.useState(pt()?null:"Hosted LocalBridge access is off."),[Re,Ue]=g.useState(null),[uo,fe]=g.useState(null),[Oe,Bt]=g.useState(()=>eb()),[wt,Ne]=g.useState(!1),[ct,$e]=g.useState(null),[mo,Sa]=g.useState(null),[Ae,He]=g.useState(!1),[Ot,po]=g.useState("ready"),[wa,go]=g.useState("Saved in this browser."),[Xe,We]=g.useState(()=>mt()),_e=g.useMemo(()=>Bh(),[]),[va,ho]=g.useState(()=>Vs()),be=_e.cloudBoards.canAttempt&&(va==null?void 0:va.source)==="supabase-provider-session",[ja,fo]=g.useState([]),[pn,Le]=g.useState(null),[xt,$t]=g.useState(!1),[Ia,bo]=g.useState(null),De=g.useMemo(()=>Fg({storedMode:ze,cloudConfigured:!0,cloudSessionAvailable:be,cloudAccess:be?{planKey:"provider",entitlementStatus:"active",currentBoardCount:ja.length,cloudBoardLimit:Number.MAX_SAFE_INTEGER,lockedBoardCount:0,canCreateBoard:!0}:null,bridgeProviderConfigured:!0,bridgeReachable:we==="connected",hostedWebApp:!pt()&&!Xa(),hostedLocalBridgeAccessEnabled:Xa(),browserProviderConfigured:!0,browserLocalAvailable:!0,browserLocalAvailableWhenEmpty:!0,embeddedProviderConfigured:!1,supportsEmbeddedLocal:!1}),[be,ja.length,we,ze]),[gn,hn]=g.useState(null),[fn,Na]=g.useState(""),[vt,bn]=g.useState(null),[yn,Ft]=g.useState(null),[qe,xn]=g.useState(!1),[ta,ie]=g.useState(!1),[et,ut]=g.useState(null),[jt,It]=g.useState(null),[Ct,ys]=g.useState(!1),[Cn,yo]=g.useState(!1),[aa,xs]=g.useState(ab),kn=g.useRef(new Map),na=g.useMemo(()=>Us(o.settings.appLanguage),[o.settings.appLanguage]),[Sn,Nt]=g.useState(!1),[Aa,oa]=g.useState(!1),[zt,xo]=g.useState("business"),[tt,Ma]=g.useState(()=>{var s;const a=zn("business",o.settings.appLanguage)??Us(o.settings.appLanguage)[0];return((s=Bo(a))==null?void 0:s.id)??null}),[At,Ta]=g.useState(()=>{const a=zn("business",o.settings.appLanguage)??Us(o.settings.appLanguage)[0],s=Bo(a);return Un(Hn(a,s==null?void 0:s.id,o.settings.appLanguage))}),[wn,Je]=g.useState(null),[Ra,La]=g.useState(!1),[ve,Co]=g.useState(()=>Ul(o.id,o.name)),[pe,at]=g.useState(null),[ko,So]=g.useState(null),[Cs,nt]=g.useState(!1),[Mt,sa]=g.useState({}),[Ea,Ut]=g.useState(null),Pa=g.useMemo(()=>{var l,u;const a=Xe.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(Xe.map(h=>[h.id,h]));return i.set(o.id,{...a,...s}),Array.from(i.values()).sort((h,C)=>{const k=typeof h.order=="number"?h.order:Number.MAX_SAFE_INTEGER,M=typeof C.order=="number"?C.order:Number.MAX_SAFE_INTEGER;return k!==M?k-M:String(C.updatedAt||"").localeCompare(String(h.updatedAt||""))}).slice(0,7)},[o,Xe]),ee=g.useMemo(()=>zn(zt,o.settings.appLanguage)??na[0],[zt,o.settings.appLanguage,na]),Ve=g.useMemo(()=>ee?Hn(ee,tt,o.settings.appLanguage):null,[ee,o.settings.appLanguage,tt]),_a=!!(ee&&(ee.options.length>0||!ee.quickCreateTemplateId)),vn=g.useMemo(()=>Oo(Ve,At),[Ve,At]),I=g.useRef(o),G=g.useRef(c),se=g.useRef({...qa}),jn=g.useRef(null),Tt=g.useRef(null),Da=g.useRef(null),Ba=g.useRef(null),In=g.useRef(null),Nn=g.useRef(null),Oa=g.useRef(new Map),An=g.useRef(new Ug),ra=g.useRef(0),Mn=g.useRef(null),$a=g.useRef(0),ia=g.useRef(null),Ht=g.useRef(!1),Be=g.useRef(0),Ee=g.useRef(0),Fa=g.useRef(),Tn=g.useRef(),Rn=g.useRef(null),la=g.useRef(null),da=g.useRef(0),za=g.useRef(null),Wt=g.useRef(0),x=g.useRef(!1),L=g.useCallback(a=>{x.current=a,ys(a)},[]),le=g.useCallback((a="keyboard")=>{xs(s=>{const i=s==="curated"?"full":"curated";return nb(i),f.emit("canvas.functionToolbar.toggle",{mode:i,source:a}),i})},[]);g.useEffect(()=>(f.transitionTo("board-file-loading","mindcanvas-mount"),f.transitionTo("interactive-fullres","react-board-ready"),()=>f.transitionTo("disposed","mindcanvas-unmount")),[]),g.useEffect(()=>{const a=()=>ho(Vs());return window.addEventListener(cl,a),window.addEventListener("storage",a),window.addEventListener("focus",a),()=>{window.removeEventListener(cl,a),window.removeEventListener("storage",a),window.removeEventListener("focus",a)}},[]),g.useEffect(()=>{const a=()=>{const s=!!document.fullscreenElement;L(s),f.emit("canvas.fullscreen.changed",{active:s})};return document.addEventListener("fullscreenchange",a),()=>document.removeEventListener("fullscreenchange",a)},[L]),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,k,M,S,T,E,_,A;const i=s.data;if(i.type==="READY"){Ht.current=!0,Ye("ready"),f.emit("search.worker.ready");return}if(i.type!=="SEARCH_RESULT")return;if(i.seq!==$a.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);J(u),ge(0),je("worker"),f.emit("search.completed",{query:i.query,count:u.length,engine:"worker",durationMs:(h=i.profile)==null?void 0:h.durationMs,documentCount:(C=i.profile)==null?void 0:C.documentCount,candidateCount:(k=i.profile)==null?void 0:k.candidateCount,rankedCount:(M=i.profile)==null?void 0:M.rankedCount,viewportBoosted:(S=i.profile)==null?void 0:S.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=>{Ht.current=!1,Ye("failed"),f.emit("search.worker.failed",{message:s.message})},()=>{a.terminate(),ia.current=null,Ht.current=!1}},[]),g.useEffect(()=>{const a=()=>dt({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(Fa.current),Fa.current=window.setTimeout(()=>{const a=Pt(I.current);We(mt()),po(a?"ready":"error"),go(a?"Saved in this browser.":"Local browser storage failed.")},280),()=>window.clearTimeout(Fa.current)),[o]),g.useEffect(()=>{const a=ia.current;if(!a)return;const s=window.setTimeout(()=>{a.postMessage({type:"REBUILD_BOARD",boardId:o.id,nodes:sc(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(()=>{G.current=c},[c]),g.useEffect(()=>{f.emit("canvas.gridMode.applied",{boardId:o.id,gridType:ir(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 $=g.useCallback((a,s=!0)=>{se.current=a,Da.current&&(Da.current.style.transform=`translate3d(${a.x}px, ${a.y}px, 0) scale(${a.scale})`),Tt.current&&(Tt.current.style.setProperty("--grid-x",`${a.x}px`),Tt.current.style.setProperty("--grid-y",`${a.y}px`),Tt.current.style.setProperty("--grid-small",`${24*a.scale}px`),Tt.current.style.setProperty("--grid-large",`${144*a.scale}px`)),window.clearTimeout(Tn.current),Tn.current=window.setTimeout(()=>ka(a),Mh),s&&f.emit("camera.patch",{...a})},[]),Pe=g.useCallback(async()=>{var i;const a=++Be.current;if(te("checking"),Te(null),ce(null),f.emit("runtimeStatus.bridge.refresh.requested",{source:"mindcanvas"}),!pt()){te("blocked"),Te(null),yt([]),ce("Hosted LocalBridge access is off."),Ue(null),fe("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:"refresh",reason:"hosted-access-off"});return}const s=await ha();if(a===Be.current){if(Te(s.status??null),s.state!=="connected"){te(s.state),yt([]),ce(s.message||"LocalBridge is unavailable."),Ue(null),fe(s.message||"LocalBridge is unavailable.");return}try{const[l,u]=await Promise.all([sl(s.baseUrl),Ap(s.baseUrl)]);if(a!==Be.current)return;const h=xa(l.rootPath||((i=s.status)==null?void 0:i.workspace));Ue(h||null),fe(h?null:"LocalBridge workspace path is unavailable."),h&&Bt(C=>md(h,C)),te("connected"),yt(u),ce(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!==Be.current)return;te("unavailable"),yt([]);const u=l instanceof Error?l.message:String(l);ce(u),fe(u)}}},[]);g.useEffect(()=>{pt()&&Pe()},[Pe]),g.useEffect(()=>{ea&&(Qt(!0),f.emit("mindcanvas.projectGallery.opened",{source:"startup"}))},[ea]);const Rt=g.useCallback(()=>{Qt(a=>{const s=!a;return s&&Dt.length===0&&we!=="checking"&&Pe(),f.emit(s?"mindcanvas.projectGallery.opened":"mindcanvas.projectGallery.closed",{source:"top-tab"}),s})},[Dt.length,we,Pe]),Fe=g.useCallback(a=>{Qt(s=>(s&&f.emit("mindcanvas.projectGallery.closed",{source:a}),!1))},[]),ca=g.useCallback(a=>{lo(a),localStorage.setItem(Fl,String(a)),f.emit("mindcanvas.projectGallery.startupPreference",{enabled:a})},[]),Ua=g.useCallback(async(a="manual")=>{if(ho(Vs()),!be){const s=_e.cloudBoards.canAttempt?"sign-in-required":_e.cloudBoards.mode;Le(s==="sign-in-required"?"Login with Supabase is required before cloud boards can be listed.":"Cloud board adapter is not configured."),f.emit("projectStorage.cloud.unavailable",{reason:s,source:a});return}$t(!0),Le(null);try{const s=await Dp(sr());fo(s),Le(s.length>0?`Loaded ${s.length} cloud board${s.length===1?"":"s"}.`:"No cloud boards yet.")}catch(s){Le(s instanceof Error?s.message:String(s))}finally{$t(!1)}},[be,_e.cloudBoards.canAttempt,_e.cloudBoards.mode]),ni=g.useCallback(a=>{co(a),f.emit("projectStorage.tab",{tab:a}),a==="cloud"&&Ua("tab")},[Ua]),oi=g.useCallback(()=>{tm(!0),f.emit("runtimeStatus.bridge.hostedAccess.enabled"),Pe()},[Pe]),wo=g.useCallback(a=>{Ue(a),Bt(s=>md(a,s))},[]),rc=g.useCallback(async(a="manual")=>{var i;const s=++Ee.current;if(fe(null),f.emit("projectStorage.workspace.refresh.requested",{source:a}),!pt()){Ue(null),fe("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:a,reason:"hosted-access-off"});return}try{const l=await ha();if(s!==Ee.current)return;if(Te(l.status??null),l.state!=="connected"){te(l.state),Ue(null),fe(l.message||"LocalBridge is unavailable.");return}const u=await sl(l.baseUrl);if(s!==Ee.current)return;const h=xa(u.rootPath||((i=l.status)==null?void 0:i.workspace));fe(h?null:"LocalBridge workspace path is unavailable."),h&&wo(h),f.emit("projectStorage.workspace.refresh",{source:a,path:h||null})}catch(l){if(s!==Ee.current)return;fe(l instanceof Error?l.message:String(l))}},[wo]),ks=g.useCallback(async(a,s)=>{const i=xa(a);if(!i||wt)return;const l=++Ee.current;if(Ne(!0),fe("Switching LocalBridge workspace..."),f.emit("projectStorage.workspace.set.requested",{source:s,path:i}),!pt()){Ue(null),fe("Hosted LocalBridge access is off."),Ne(!1),f.emit("projectStorage.workspace.blocked",{source:s,reason:"hosted-access-off"});return}try{const u=await ha();if(l!==Ee.current)return;if(Te(u.status??null),u.state!=="connected"){te(u.state),fe(u.message||"LocalBridge is unavailable.");return}const h=Wn(u.status);if(!h){te("unavailable"),fe("LocalBridge write token is unavailable.");return}const C=await am(i,h,u.baseUrl);if(l!==Ee.current)return;const k=xa(C.workspace||i);wo(k),te("connected"),fe(`Local workspace set to ${Xo(k)}.`),f.emit("projectStorage.workspace.set",{source:s,path:k}),Pe()}catch(u){if(l!==Ee.current)return;te("unavailable"),fe(u instanceof Error?u.message:String(u))}finally{l===Ee.current&&Ne(!1)}},[wt,Pe,wo]),ic=g.useCallback(async()=>{const a=++Ee.current;if(Ne(!0),fe("Opening folder picker..."),f.emit("projectStorage.workspace.browse.requested",{path:Re||null}),!pt()){Ue(null),fe("Hosted LocalBridge access is off."),Ne(!1),f.emit("projectStorage.workspace.blocked",{source:"browse",reason:"hosted-access-off"});return}try{const s=await ha();if(a!==Ee.current)return;if(Te(s.status??null),s.state!=="connected"){te(s.state),fe(s.message||"LocalBridge is unavailable.");return}const i=Wn(s.status),l=await nm(Re,i,s.baseUrl);if(a!==Ee.current)return;if(l.canceled||!l.success||!l.path){fe("Workspace selection cancelled."),f.emit("projectStorage.workspace.browse.cancelled");return}f.emit("projectStorage.workspace.browse",{path:l.path}),Ne(!1),await ks(l.path,"browse")}catch(s){if(a!==Ee.current)return;fe(s instanceof Error?s.message:String(s))}finally{a===Ee.current&&Ne(!1)}},[ks,Re]),lc=g.useCallback(async()=>{var s,i;const a=++Be.current;if(He(!0),ce(null),(s=I.current.source)!=null&&s.partialImport){ce("This imported board came from a partial original payload, so export is blocked to avoid data loss."),He(!1);return}if((i=I.current.source)!=null&&i.truncated){ce("This imported board was truncated, so export is blocked to avoid data loss."),He(!1);return}if(!pt()){te("blocked"),Te(null),ce("Hosted LocalBridge access is off."),He(!1);return}try{const l=await ha();if(a!==Be.current)return;if(Te(l.status??null),l.state!=="connected"){te(l.state),ce(l.message||"LocalBridge is unavailable.");return}const u=Wn(l.status);if(!u){te("unavailable"),ce("LocalBridge write token is unavailable.");return}const h=await Tp(I.current,se.current,u,l.baseUrl);if(a!==Be.current)return;const C={...I.current,nodes:h.nodes,source:h.source,updatedAt:h.metadata.UpdatedAt||new Date().toISOString()};r(C),Pt(C),We(mt()),te("connected"),yt(k=>[h.metadata,...k.filter(M=>M.Id!==h.metadata.Id)]),ce(`Exported "${Ze(h.metadata.Title)}" to LocalBridge.`)}catch(l){if(a!==Be.current)return;te("unavailable"),ce(l instanceof Error?l.message:String(l))}finally{a===Be.current&&He(!1)}},[]),Ge=g.useCallback((a,s,i={})=>{const l=pl(a),u=ol(l),h=ml(u);p(C=>fa(C,I.current,{description:"Activate board"})),b([]),r(h),y(h.nodes[0]?[h.nodes[0].id]:[]),Q(null),U(null),X(null),Fe("board-activate"),f.emit(s,{boardId:h.id,...i})},[Fe]),si=g.useCallback(()=>{const a=ld(I.current.settings);Ge(a,"board.local.create"),$({x:540,y:210,scale:1})},[Ge,$]),dc=g.useCallback(async a=>{if(!be){Le("Login with Supabase is required before cloud boards can be opened."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:"load-board"});return}bo(a.id),Le(null);try{const s=await Bp(sr(),a.id,I.current.settings);if(!s){Le("Cloud board was not found or is not available to this user.");return}Ge(s,"board.cloud.switch",{sourceBoardId:a.id}),$({x:540,y:210,scale:1})}catch(s){Le(s instanceof Error?s.message:String(s))}finally{bo(null)}},[Ge,$,be]),vo=g.useCallback(async(a,s)=>{if(!be){Le("Login with Supabase is required before cloud boards can be saved."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:s});return}$t(!0),Le(null);try{const i=await Op(sr(),a,se.current);if(!i){Le("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),Pt(u),We(mt()),fo(h=>[i,...h.filter(C=>C.id!==i.id)]),Le(`Saved "${Ze(i.name)}" to cloud.`)}catch(i){Le(i instanceof Error?i.message:String(i))}finally{$t(!1)}},[be]),cc=g.useCallback(()=>{vo(I.current,"save-current")},[vo]),uc=g.useCallback(()=>{const a=ld(I.current.settings);vo(a,"new-cloud-board")},[vo]),mc=g.useCallback(()=>{var l;if(!ee)return;if(ee.options.length>0||!ee.quickCreateTemplateId){const u=se.current,h={x:(window.innerWidth/2-u.x)/u.scale,y:(window.innerHeight/2-u.y)/u.scale},C=I.current.nodes,k=C.length?Math.max(...C.map(A=>A.x+A.width)):h.x-280-Go,M=C.length?Math.min(...C.map(A=>A.y)):h.y-310,S=om(ee,tt,k+Go,M,At,I.current.settings.appLanguage);r(A=>{var w;return p(Y=>fa(Y,A,{description:"Create template card"})),b([]),f.emit("templateCard.node.create",{id:S.id,launcherId:ee.id,optionId:((w=S.metadata)==null?void 0:w.templateLauncherSelectedOptionId)??null,source:"launcher-panel"}),{...A,nodes:[...A.nodes,S],updatedAt:new Date().toISOString()}}),y([S.id]);const T=Math.min(se.current.scale,de((window.innerHeight-190)/S.height,.72,1)),E=Math.max(320,window.innerHeight-180);$({...se.current,scale:T,x:window.innerWidth/2-(S.x+S.width/2)*T,y:48+E/2-(S.y+S.height/2)*T}),O(S.id),window.setTimeout(()=>O(A=>A===S.id?null:A),1e3),Nt(!1),Je(null);const _="Template card added to the current canvas.";$e(_),window.setTimeout(()=>{$e(A=>A===_?null:A)},2200),f.emit("templateCard.node.focus",{nodeId:S.id,launcherId:ee.id});return}const s=Oo(Ve,At);if(s){Je(s),f.emit("template.validation.failed",{launcherId:ee.id,optionId:tt,templateId:(Ve==null?void 0:Ve.id)??null,message:s});return}const i=sm(ee,tt,At,I.current.settings);if(!i){const u="Template could not be created.";Je(u),f.emit("template.validation.failed",{launcherId:ee.id,optionId:tt,templateId:(Ve==null?void 0:Ve.id)??null,message:u});return}Ge(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}),$({x:540,y:210,scale:1}),Nt(!1),Je(null)},[Ge,Ve,ee,$,tt,At]),ri=g.useCallback(a=>{if(a===I.current.id){Fe("stored-board-current");return}const s=Hu(a);s&&(Ge(s,"board.local.switch"),$({x:540,y:210,scale:1}))},[Ge,$,Fe]),Ss=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}),Wu(a),We(mt())},[]),pc=g.useCallback((a,s)=>{if(!a||!s||a===s)return;Pt(I.current);const i=mt(),l=Pa.map(T=>T.id),u=l.indexOf(a),h=l.indexOf(s);if(u<0||h<0)return;const C=[...l],k=C.splice(u,1)[0];if(!k)return;C.splice(h,0,k);const M=i.map(T=>T.id).filter(T=>!C.includes(T)),S=Vu([...C,...M]);We(S),f.emit("board.tabs.drop",{sourceId:a,targetId:s,visibleIds:C})},[Pa]),gc=g.useCallback(async a=>{const s=++Be.current;Sa(a.Id),ce(null);try{const i=await Rp(a,I.current.settings);if(s!==Be.current)return;Ge(i,"board.localBridge.switch",{sourceBoardId:a.Id});const l=Cr(a.LastCameraX,a.LastCameraY,a.LastCameraZ);$(l?{...l,scale:de(l.scale,Zo,Qo)}:{x:540,y:210,scale:1})}catch(i){if(s!==Be.current)return;ce(i instanceof Error?i.message:String(i))}finally{s===Be.current&&Sa(null)}},[Ge,$]),hc=g.useCallback(()=>{var a;(a=Nn.current)==null||a.click()},[]),fc=g.useCallback(async a=>{var i;const s=Array.from(a??[]).filter(l=>/\.json$/i.test(l.name));if(s.length===0){$e("Choose a React or MindExec board JSON file."),window.setTimeout(()=>$e(null),1800);return}try{const l=await Promise.all(s.map(async T=>({file:T,payload:JSON.parse(await T.text())}))),u=l.find(mr),h=Ef(l),C=l.find(T=>!mr(T)&&ur(T.payload))??l.find(T=>!mr(T)&&jd(T.payload)>0);if(!C)throw new Error("No board JSON file was found.");const k=ur(C.payload)?null:Pf(C,h),M=k?Cr(k.metadata.LastCameraX,k.metadata.LastCameraY,k.metadata.LastCameraZ):null,S=ur(C.payload)?Lf(C.payload,C.file.name):Nd(C.payload,I.current.settings,{boardId:(k==null?void 0:k.metadata.Id)??us(C.file.name),title:(k==null?void 0:k.metadata.Title)||us(C.file.name),updatedAt:k==null?void 0:k.metadata.UpdatedAt,layoutPayload:u==null?void 0:u.payload,cameraBookmarks:k==null?void 0:k.metadata.CameraBookmarks});if(S.nodes.length===0)throw new Error("The selected file did not contain any importable board nodes.");Ge(S,"board.import.file",{fileName:C.file.name,layoutFileName:(u==null?void 0:u.file.name)??null,metadataFileName:(k==null?void 0:k.fileName)??null,nodes:S.nodes.length,edges:S.edges.length,sourceKind:((i=S.source)==null?void 0:i.kind)??null,originalBoardId:(k==null?void 0:k.metadata.Id)??null,cameraRestored:!!M}),Pt(S),We(mt()),$(M?{...M,scale:de(M.scale,Zo,Qo)}:{x:540,y:210,scale:1}),$e(`Imported "${Ze(S.name)}".`),window.setTimeout(()=>$e(null),2200)}catch(l){const u=l instanceof Error?l.message:String(l);$e(`Import failed: ${u}`),f.emit("board.import.failed",{message:u}),window.setTimeout(()=>$e(null),3200)}},[Ge,$]);g.useEffect(()=>{$(se.current,!1)},[$]);const Me=g.useCallback((a,s)=>{const i=se.current;return{x:(a-i.x)/i.scale,y:(s-i.y)/i.scale}},[]),Ha=g.useCallback((a,s)=>{const i=Number.isFinite(a)&&Number.isFinite(s)?{clientX:a,clientY:s}:Rn.current??{clientX:window.innerWidth/2,clientY:window.innerHeight/2},l=Me(i.clientX,i.clientY);return{x:l.x-150,y:l.y-80}},[Me]),bc=g.useCallback(a=>{cr(a.target)||(Rn.current={clientX:a.clientX,clientY:a.clientY})},[]),D=g.useCallback((a,s,i={})=>{r(l=>{p(h=>fa(h,l,{description:s,mergeKey:typeof i.mergeKey=="string"?i.mergeKey:null})),b([]);const u=a(l);return f.emit(s,i),{...u,updatedAt:new Date().toISOString()}})},[]);g.useEffect(()=>{const a=wm();if(!a)return;const s=Me(window.innerWidth/2,window.innerHeight/2),{sourceNode:i,itemNodes:l,taskNode:u,edges:h}=vm(a,{x:s.x-390,y:s.y-145});if(I.current.nodes.some(C=>{var k;return((k=C.metadata)==null?void 0:k.ToolHandoffId)===a.id})){ul(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}),ul(a.id),y([u.id]),O(u.id),window.setTimeout(()=>O(C=>C===u.id?null:C),1400)},[D,Me]);const Wa=g.useCallback((a,s,i={})=>{r(l=>{const u=a(l);return f.emit(s,i),{...u,updatedAt:new Date().toISOString()}})},[]),ws=g.useCallback(a=>{const s=a.slice(0,90);Wa(i=>({...i,name:s}),"board.rename",{boardId:I.current.id})},[Wa]),Ie=g.useCallback((a,s="inline")=>{const i=typeof a.appLanguage=="string"?{...a,appLanguage:hd(a.appLanguage)}:a;if(Wa(l=>{const u={...l.settings,...i};if(typeof i.appLanguage=="string"){const h=rm(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=im(i.appLanguage);f.emit("appLanguage.select",{appLanguage:l,source:s})}if(typeof i.model=="string"){const l=Jn(i.model),u=pr(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};jm(l,s)}Im({...I.current.settings,...i})},[Wa]),ii=g.useCallback((a,s)=>{Ie({[a]:s},`inline.${String(a)}`)},[Ie]),yc=g.useMemo(()=>so(o.settings,"Image"),[o.settings]),xc=g.useMemo(()=>so(o.settings,"Video"),[o.settings]),Cc=g.useMemo(()=>lm(o.settings),[o.settings]),vs=Jn(o.settings.model),Ln=pr(vs),kc=g.useCallback((a,s="bottom-input")=>{const i=Jn(a);Ie({model:i},`connection.model.${s}`)},[Ie]),Sc=g.useCallback((a,s)=>{const i=dm(a,s),l=rl(a).find(M=>M.id===i);if(!l)return;const u=I.current.settings,h=a==="Image"?u.imageRouterImageAspectPresetId:u.imageRouterVideoAspectPresetId,C=gr(a,l,h),k=a==="Image"?{imageRouterImageModel:l.id,imageRouterImageAspectPresetId:C.id}:{imageRouterVideoModel:l.id,imageRouterVideoAspectPresetId:C.id};Ie(k,`inline.${a.toLowerCase()}Model`),f.emit("media.model.select",{mode:a,model:l.id,aspectPresetId:C.id,requestedSize:hr(C)})},[Ie]),wc=g.useCallback((a,s)=>{const i=fd(a,I.current.settings),l=gr(a,i,s),u=a==="Image"?{imageRouterImageAspectPresetId:l.id}:{imageRouterVideoAspectPresetId:l.id};Ie(u,`inline.${a.toLowerCase()}Aspect`),f.emit("media.aspect.select",{mode:a,model:i.id,aspectPresetId:l.id,requestedSize:hr(l)})},[Ie]),vc=g.useCallback(()=>{xn(!0),f.emit("settings.dialog.open",{boardId:I.current.id})},[]),jc=g.useCallback(()=>{xn(!1),f.emit("settings.dialog.close",{boardId:I.current.id})},[]),li=g.useCallback(()=>{ie(!0),f.emit("promptDebug.open",{boardId:I.current.id})},[]),Ic=g.useCallback(()=>{ie(!1),f.emit("promptDebug.close",{boardId:I.current.id})},[]);g.useEffect(()=>()=>{t==null||t([])},[t]),g.useEffect(()=>{t&&t([{id:"mindcanvas-prompt-debug",label:"Prompt Debugger",description:"Inspect prompt and local diagnostics",icon:Fm,onClick:li,active:ta,testId:"prompt-debug-open"}])},[t,li,ta]);const Nc=g.useCallback(a=>{const s=I.current.settings.appLanguage,i=zn(a,s);if(!i)return;const l=Bo(i),u=Hn(i,l==null?void 0:l.id,s);xo(i.id),Ma((l==null?void 0:l.id)??null),Ta(Un(u)),Je(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})},[]),Ac=g.useCallback(()=>{const a=I.current.settings.appLanguage,s=zn(zt,a)??na[0];if(!s)return;const i=Bo(s,tt),l=Hn(s,i==null?void 0:i.id,a);xo(s.id),Ma((i==null?void 0:i.id)??null),Ta(u=>Object.keys(u).length>0?u:Un(l)),Je(null),La(!1),nt(!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})},[zt,tt,na]),Mc=g.useCallback(()=>{Nt(!1),Je(null),f.emit("template.launcher.close",{launcherId:zt})},[zt]),Tc=g.useCallback(a=>{if(!ee)return;const s=Hn(ee,a,I.current.settings.appLanguage);Ma(a),Ta(Un(s)),Je(null),f.emit("template.option.select",{launcherId:ee.id,optionId:a,templateId:(s==null?void 0:s.id)??null})},[ee]),Rc=g.useCallback((a,s)=>{Ta(i=>({...i,[a]:s})),wn&&Je(null),f.emit("template.input.patch",{launcherId:ee==null?void 0:ee.id,key:a})},[ee==null?void 0:ee.id,wn]),Ke=g.useCallback(a=>{So(a),window.setTimeout(()=>{So(s=>s===a?null:s)},2600)},[]),Lc=g.useCallback(()=>{Nt(!1),nt(!1),oa(a=>{const s=!a;return f.emit(s?"templateStudio.chooser.open":"templateStudio.chooser.close",{boardId:I.current.id,studioOpen:Ra}),s})},[Ra]),di=g.useCallback(()=>{oa(!1),f.emit("templateStudio.chooser.close",{boardId:I.current.id})},[]),ci=g.useCallback(()=>{const a=I.current;Nt(!1),nt(!1),oa(!1),Co(Ul(a.id,a.name)),at(null),La(!0),f.emit("templateStudio.open",{boardId:a.id,nodeCount:a.nodes.length})},[]),jo=g.useCallback(a=>{const s=I.current,i=$o(ve,s.nodes);at(i),Hl(s.id,ve);const l=Pt(s);return We(mt()),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},[ve]),ui=g.useCallback(()=>{jo("exit"),La(!1),oa(!1),nt(!1),at(null),f.emit("templateStudio.close",{boardId:I.current.id})},[jo]),Ec=g.useCallback(()=>{const a=$f(I.current.settings),s=qo(a.name);oa(!1),nt(!1),Co(s),at(null),La(!0),Hl(a.id,s),Pt(a),We(mt()),Ge(a,"templateStudio.board.create",{templateId:s.templateId,source:"template-studio-chooser"}),$({x:540,y:210,scale:1}),f.emit("templateStudio.chooser.startNew",{boardId:a.id,templateId:s.templateId}),Ke("New Template Studio draft board opened.")},[Ge,$,Ke]),Pc=g.useCallback(()=>{ci(),f.emit("templateStudio.chooser.convertCurrent",{boardId:I.current.id,nodes:I.current.nodes.length}),Ke("Current board is now in Template Studio mode.")},[ci,Ke]),Io=g.useCallback((a,s)=>{Co(i=>{const l={...i,[a]:a==="templateId"?Zn(s):s};return f.emit("templateStudio.draft.patch",{key:a}),l}),at(null)},[]),_c=g.useCallback(()=>{const a=jo("save");Ke(a.issues.length>0?"Template draft saved with manifest issues.":"Template draft and board saved locally.")},[jo,Ke]),Dc=g.useCallback(a=>{const s=Me(window.innerWidth/2,window.innerHeight/2),i=H("node"),l=il(a),u=`${a.replace("template.","")}-${Date.now().toString(36)}`,h=a==="template.input",C=h?300:a==="template.prompt"?360:340,k=h?178:a==="template.prompt"?214:190,M={[z.studioNodeType]:a,[z.templateNodeId]:u,[z.templateRole]:a.replace(/^template\./,""),[z.compileTarget]:l,Source:"template-studio"};h&&(M[z.inputKey]=u,M[z.inputType]="text",M[z.inputRequired]="true");const S={id:i,kind:a==="template.prompt"?"ai-task":a==="template.section"?"markdown":"note",title:Hs(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-k/2,width:C,height:k,status:a==="template.prompt"?"idle":void 0,tags:["Template Studio",Hs(a)],metadata:M};D(T=>({...T,nodes:[...T.nodes,S]}),"templateStudio.node.add",{id:S.id,studioNodeType:a,compileTarget:l}),y([S.id]),at(null)},[D,Me]),js=g.useCallback(()=>{const a=$o(ve,I.current.nodes);return at(a),f.emit("templateStudio.compile",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length,issues:a.issues.length}),Ke(a.issues.length>0?"Template manifest has issues.":"Template manifest compiled."),a},[Ke,ve]),Bc=g.useCallback(async()=>{const a=pe??$o(ve,I.current.nodes);pe||at(a);const s=await Qn(a.manifestJson);f.emit("templateStudio.manifest.copy",{templateId:a.template.id,chars:a.manifestJson.length,method:s}),Ke("Template manifest copied.")},[Ke,ve,pe]),Oc=g.useCallback(()=>{const a=js();if(a.issues.length>0){nt(!1),f.emit("templateStudio.test.open.blocked",{templateId:a.template.id,issues:a.issues.length}),Ke("Fix manifest issues before test create.");return}sa(Un(a.template)),Ut(null),nt(!0),f.emit("templateStudio.test.open",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length})},[js,Ke]),$c=g.useCallback(()=>{nt(!1),sa({}),Ut(null),f.emit("templateStudio.test.close",{templateId:(pe==null?void 0:pe.template.id)??null})},[pe==null?void 0:pe.template.id]),Fc=g.useCallback((a,s)=>{sa(i=>({...i,[a]:s})),Ea&&Ut(null),f.emit("templateStudio.test.input.patch",{key:a})},[Ea]),zc=g.useCallback(()=>{const a=(pe==null?void 0:pe.issues.length)===0?pe:$o(ve,I.current.nodes);if(at(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=Oo(a.template,Mt);if(s){Ut(s),f.emit("templateStudio.test.board.blocked",{templateId:a.template.id,message:s});return}const i=Wl(ve),l=cm(i,void 0,a.template,Mt,I.current.settings);Pt(l.board),Pt(I.current),We(mt()),nt(!1),sa({}),Ke(`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})},[Ke,ve,pe,Mt]),Uc=g.useCallback((a,s)=>{y(i=>s?i.includes(a)?i.filter(l=>l!==a):[...i,a]:[a]),Q(null)},[]),Hc=g.useCallback(()=>{var C,k,M,S,T,E,_,A;const i=de(window.innerWidth*.62,282,Math.max(282,window.innerWidth-250-32)),l=de(window.innerHeight*.58,300/2+32,Math.max(300/2+32,window.innerHeight-300/2-96)),u=Me(i,l),h={id:H("node"),kind:"memo",title:"Agent",body:$h,x:u.x-500/2,y:u.y-300/2,width:500,height:300,tags:["Agent Command","Researcher","Draft"],metadata:Wf()};D(w=>({...w,nodes:[...w.nodes,h]}),"agentCommand.node.add",{id:h.id,semanticType:(C=h.metadata)==null?void 0:C.SemanticType,status:(k=h.metadata)==null?void 0:k.AgentCommandStatus,requestedRole:(M=h.metadata)==null?void 0:M.AgentCommandRequestedRole,adapterState:(S=h.metadata)==null?void 0:S.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}),y([h.id]),Q(null),O(h.id),window.setTimeout(()=>O(w=>w===h.id?null:w),1200)},[D,Me]),Wc=g.useCallback(()=>{var C,k,M,S,T,E,_,A;const i=de(window.innerWidth*.6,232,Math.max(232,window.innerWidth-200-32)),l=de(window.innerHeight*.56,300/2+32,Math.max(300/2+32,window.innerHeight-300/2-96)),u=Me(i,l),h={id:H("node"),kind:"memo",title:"Code Note",body:Oh,x:u.x-400/2,y:u.y-300/2,width:400,height:300,tags:["Code Note","Draft","Unlinked"],metadata:Vf()};D(w=>({...w,nodes:[...w.nodes,h]}),"codeNote.node.add",{id:h.id,semanticType:(C=h.metadata)==null?void 0:C.SemanticType,status:(k=h.metadata)==null?void 0:k.CodeNoteStatus,syncState:(M=h.metadata)==null?void 0:M.CodeNoteSyncState,adapterState:(S=h.metadata)==null?void 0:S.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}),y([h.id]),Q(null),O(h.id),window.setTimeout(()=>O(w=>w===h.id?null:w),1200)},[D,Me]),Ce=g.useCallback((a,s)=>{var T,E,_,A,w,Y,ae,ke,Ga;if(a==="remote-monitor"){const Z=I.current.nodes.find(ba);if(Z){const Ka=Kl(Z),Ya=se.current.scale,Do=Gl(Z.height,window.innerHeight);$({...se.current,x:window.innerWidth/2-Ka.x*Ya,y:Do-Ka.y*Ya}),y([Z.id]),O(Z.id),window.setTimeout(()=>O(Yt=>Yt===Z.id?null:Yt),1e3);const Fn="Remote monitor already exists on this board. Focused existing node.";$e(Fn),window.setTimeout(()=>{$e(Yt=>Yt===Fn?null:Yt)},2200),f.emit("remoteMonitor.node.duplicateIgnored",{action:"toolbar-add",nodeId:Z.id,surface:"mindcanvas-node"});return}}const i=s?Zr[s]:null,l=(i==null?void 0:i.mode)??(a==="image"?"Image":a==="video"?"Video":null),u=l?so(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,k=a==="remote-monitor"?Gl(C,window.innerHeight):window.innerHeight/2,M=Me(window.innerWidth/2,k),S={id:H("node"),kind:a,title:i?i.title:a==="ai-task"?"AI Task":a==="remote-monitor"?"Multi Desktop Monitor":a==="remote-control"?"Remote Device":a==="image"?"Image":a==="mask"?"Image Mask":a==="video"?"Video":a==="embed"?"Web Embed":a==="csv-table"?"CSV Table":a==="pdf"?"PDF Document":a==="file"?"File":a==="directory"?"Directory":a==="memo"?"Memo":a==="markdown"?"Markdown":a==="code"?"Code Note":"Note",body:i?i.body:a==="ai-task"?"Describe the work this task should perform.":a==="remote-monitor"?"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":a==="remote-control"?"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":a==="image"?"Describe the image to generate or attach the visual reference here.":a==="mask"?"Image edit mask reference. Attach or paste a mask image here.":a==="video"?"Describe the video shot, motion, and duration target here.":a==="embed"?"https://example.com/":a==="csv-table"?`Metric,Value,Stage
42
42
  Leads,42,Validation
43
43
  Trials,7,Launch
44
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
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"?Lr:void 0,metadata:i?Uf(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?ai(I.current.settings,l):void 0};D(Z=>({...Z,nodes:[...Z.nodes,S]}),"node.add",{id:S.id,kind:a,automationKind:i==null?void 0:i.kind,...u?{mode:u.mode,model:u.model.id,aspectPresetId:u.aspect.id,requestedSize:u.requestedSize}:{}}),i&&f.emit("automation.mediaNode.add",{id:S.id,kind:i.kind,mode:i.mode,model:(T=S.metadata)==null?void 0:T.MediaModel,aspectPresetId:(E=S.metadata)==null?void 0:E.AspectPresetId,requestedSize:(_=S.metadata)==null?void 0:_.RequestedSize,adapterState:((A=S.metadata)==null?void 0:A.AdapterState)??"adapter-gated",externalActionPolicy:((w=S.metadata)==null?void 0:w.AutomationExternalActionPolicy)??"spec-only-until-review"}),a==="remote-monitor"&&f.emit("remoteMonitor.node.add",{id:S.id,surface:"mindcanvas-node",width:S.width,height:S.height,adapterState:((G=S.metadata)==null?void 0:G.AdapterState)??"adapter-gated"}),a==="mask"&&f.emit("node.mask.add",{id:S.id,hasImage:!!S.imageUrl,imageRouterMask:((ae=S.metadata)==null?void 0:ae.ImageRouterMask)??"true",semanticType:((ke=S.metadata)==null?void 0:ke.SemanticType)??"ImageEditMask",adapterState:((Ka=S.metadata)==null?void 0:Ka.AdapterState)??"adapter-gated"}),y([S.id])},[$,D,Me]),q=g.useCallback((a,s)=>{Ha(i=>({...i,nodes:i.nodes.map(l=>l.id===a?{...l,...s}:l)}),"node.patch",{id:a,keys:Object.keys(s)})},[Ha]),Lt=g.useCallback((a,s)=>{const i=K.current[0],l=I.current.nodes.find(u=>u.id===i);l&&(q(i,{metadata:{...l.metadata??{},[a]:a===z.templateNodeId||a===z.inputKey?Zn(s):s}}),at(null),f.emit("templateStudio.node.metadata.patch",{id:i,key:a}))},[q]),mi=g.useCallback(a=>{var h;const s=K.current[0],i=I.current.nodes.find(C=>C.id===s);if(!i)return;const l=((h=i.metadata)==null?void 0:h[z.templateNodeId])||Zn(i.title),u={...i.metadata??{},[z.studioNodeType]:a,[z.templateNodeId]:l,[z.templateRole]:a.replace(/^template\./,""),[z.compileTarget]:il(a,i)};a==="template.input"&&(u[z.inputKey]=u[z.inputKey]||Zn(i.title),u[z.inputType]=u[z.inputType]||"text",u[z.inputRequired]=u[z.inputRequired]||"true"),q(s,{metadata:u}),at(null),f.emit("templateStudio.node.role.assign",{id:s,studioNodeType:a})},[q]),N=g.useCallback(a=>{$e(a),window.setTimeout(()=>{$e(s=>s===a?null:s)},2200)},[]),Hc=g.useCallback((a,s,i)=>{var M;const l=I.current.nodes.find(S=>S.id===a);if(!l)return;const u=pd(l.body),h=cm(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(S=>({...S,nodes:[...S.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(S=>S.id);y(C),O(C[0]??null),window.setTimeout(()=>O(S=>S===C[0]?null:S),1200);const k=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(k)},[D,N]),Vc=g.useCallback(a=>{const s=I.current.nodes.find(T=>T.id===a.sourceNodeId),i=Me(window.innerWidth/2,window.innerHeight/2),l=560,u=390,h=W("node"),C=s?s.x+s.width+Ko:i.x-l/2,k=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 S={id:h,kind:"remote-control",title:a.deviceName||"Remote Device",body:`Remote device control: ${a.deviceId}`,x:C,y:k,width:l,height:u,tags:["Remote","Control","LocalBridge"],metadata:M};D(T=>({...T,nodes:[...T.nodes,S]}),"remoteControl.node.add",{id:S.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId}),y([S.id]),N(`Remote control node created for ${a.deviceName||a.deviceId}.`),f.emit("remoteControl.node.add",{nodeId:S.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId,connected:a.connected===!0})},[D,Me,N]),ua=g.useCallback(a=>{const s=Go(se.current)??{...qa};Ie({cameraBookmarks:{...I.current.settings.cameraBookmarks??{},[a]:s}},"camera.bookmark.save"),f.emit("camera.bookmark.save",{slot:a,...s}),N(`Camera slot ${a} saved.`)},[Ie,N]),En=g.useCallback(a=>{var l;const s=Go((l=I.current.settings.cameraBookmarks)==null?void 0:l[a]),i=s??{...qa};$(i),f.emit("camera.bookmark.goto",{slot:a,saved:!!s,...i}),N(s?`Camera slot ${a}.`:`Camera slot ${a} empty. Home view.`)},[$,N]),Is=g.useCallback(()=>{$({...qa}),f.emit("camera.bookmark.goto",{slot:"home",saved:!1,...qa}),N("Home view.")},[$,N]),pi=g.useCallback(a=>{const s=se.current,i=Nh,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};$(l),f.emit("camera.keyboard.pan",{direction:a,...l})},[$]),gi=g.useCallback(()=>{const a=In.current;return a?(a.focus(),a.select(),f.emit("globalInput.focus",{source:"keyboard"}),!0):!1},[]),Ns=g.useCallback((a="keyboard")=>{const s=!(I.current.settings.wheelMode??!1);Ie({wheelMode:s},`${a}.wheelMode.toggle`),f.emit("canvas.wheelMode.toggle",{source:a,wheelMode:s}),N(s?"Mouse wheel mode.":"Trackpad pan mode.")},[Ie,N]),As=g.useCallback((a="keyboard")=>{const i=(I.current.settings.cursorDirection==="down"?"down":"right")==="down"?"right":"down";Ie({cursorDirection:i},`${a}.cursorDirection.toggle`),f.emit("canvas.cursorDirection.toggle",{source:a,cursorDirection:i}),N(i==="down"?"Cursor direction down.":"Cursor direction right.")},[Ie,N]),No=g.useCallback(async(a,s="api")=>{const i=a===!0;try{if(i){if(document.fullscreenElement)return L(!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 L(l),f.emit("canvas.fullscreen.toggle",{source:s,active:l,fallback:!1}),l}return L(!0),f.emit("canvas.fullscreen.toggle",{source:s,active:!0,fallback:!0}),!0}return document.fullscreenElement&&document.exitFullscreen&&await document.exitFullscreen(),L(!1),f.emit("canvas.fullscreen.toggle",{source:s,active:!1,fallback:!1}),!1}catch(l){return L(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}},[L,N]),Pn=g.useCallback((a="keyboard")=>No(!x.current,a),[No]);g.useEffect(()=>{const a=window,s={getMindCanvasFullscreenState:a.getMindCanvasFullscreenState,setMindCanvasFullscreen:a.setMindCanvasFullscreen,getMindCanvasReadModeState:a.getMindCanvasReadModeState,setMindCanvasReadMode:a.setMindCanvasReadMode,toggleMindCanvasReadMode:a.toggleMindCanvasReadMode},i=()=>x.current,l=h=>No(h,"api"),u=()=>Pn("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")}},[No,Pn]);const Kc=g.useCallback(()=>{const a=I.current.settings.cameraBookmarks??{},s=ar.find(i=>!a[i])??ar[0];ua(s)},[ua]),Yc=g.useCallback(a=>{ir(I.current.settings.gridType)!==a&&Ie({gridType:a},`canvas.gridMode.${a}`)},[Ie]),Gc=g.useCallback(()=>{Ie({gridSnap:!(I.current.settings.gridSnap??!0)},"canvas.gridSnap.toggle")},[Ie]),Xc=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}))},[]),qc=g.useCallback(()=>{It(a=>(a&&f.emit("node.directorySettings.close",{id:a}),null))},[]),Jc=g.useCallback((a,s)=>{const i=I.current.nodes.find(h=>h.id===a);if(!i||i.kind!=="directory")return;const l=un(s.DirectoryPath),u={...i.metadata??{},DirectoryPath:l,Include:s.Include??"",Exclude:s.Exclude??""};q(a,{sourceFilePath:l||Lr,metadata:u}),It(null),f.emit("node.directorySettings.patch",{id:a,keys:["DirectoryPath","Include","Exclude"]}),N("Folder scan settings saved.")},[q,N]),Zc=g.useCallback(async a=>{const s=I.current.nodes.find(u=>u.id===a);if(!s||s.kind!=="directory")return;const i=Uh(s);if(f.emit("node.directory.scan.requested",{id:a,hasBridgePath:!!i,hasHandle:kn.current.has(a)}),i){if(!pt()){te("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 ha();if(Te(u.status??null),te(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=Hn(u.status);if(!h){te("unavailable"),f.emit("node.directory.scan.bridge.failed",{id:a,reason:"missing-token"}),N("LocalBridge read token is unavailable.");return}const C=Xo(i,48);N(`Scanning ${C}...`),f.emit("node.directory.scan.bridge.requested",{id:a,path:i});const k=await Hh(i,s.metadata,h,u.baseUrl),M=new Date().toISOString();q(a,{title:s.title==="Directory"||s.title==="New Folder"?C:s.title,body:Hl(C,k),sourceFilePath:i,metadata:{...s.metadata??{},DirectoryPath:i,DirectoryName:C,DirectoryScanSource:"localbridge",DirectoryFileCount:String(k.fileCount),DirectoryDirCount:String(k.directoryCount),DirectoryLastScanUtc:M,DirectoryScanTruncated:String(k.truncated),DirectoryPreview:JSON.stringify(k.preview.slice(0,cn))}}),f.emit("node.directory.scan.bridge.completed",{id:a,path:i,fileCount:k.fileCount,directoryCount:k.directoryCount,truncated:k.truncated}),f.emit("node.directory.scan.completed",{id:a,source:"localbridge",directoryName:C,fileCount:k.fileCount,directoryCount:k.directoryCount,truncated:k.truncated}),N(`Scanned ${C}: ${k.fileCount} files, ${k.directoryCount} folders.`)}catch(u){const h=u instanceof Error?u.message:String(u);f.emit("node.directory.scan.bridge.failed",{id:a,message:h}),f.emit("node.directory.scan.failed",{id:a,source:"localbridge",message:h}),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=kn.current.get(a);u||(u=await l.showDirectoryPicker(),kn.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 Fh(u,s.metadata),S=new Date().toISOString();q(a,{title:s.title==="Directory"||s.title==="New Folder"?u.name:s.title,body:Hl(u.name,M),sourceFilePath:u.name,metadata:{...s.metadata??{},DirectoryName:u.name,DirectoryScanSource:"browser-picker",DirectoryFileCount:String(M.fileCount),DirectoryDirCount:String(M.directoryCount),DirectoryLastScanUtc:S,DirectoryScanTruncated:String(M.truncated),DirectoryPreview:JSON.stringify(M.preview.slice(0,cn))}}),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.")}},[q,N]),hi=g.useCallback(a=>{hn(a.id),Na(Ze(a.name))},[]),Ms=g.useCallback(()=>{hn(null),Na("")},[]),Ts=g.useCallback(a=>{const s=Ze(fn).slice(0,90);a===I.current.id?(ws(s),N("Board renamed.")):Vu(a,s)?(He(mt()),N("Saved board renamed.")):(f.emit("board.rename.failed",{boardId:a,scope:"stored"}),N("Board rename failed.")),hn(null),Na("")},[ws,N,fn]),Qc=g.useCallback((a,s)=>{s.key==="Enter"?(s.preventDefault(),Ts(a)):s.key==="Escape"&&(s.preventDefault(),Ms())},[Ms,Ts]),eu=g.useCallback(a=>{const s=I.current.nodes.find(l=>l.id===a);if(!Xn(s))return;const i=s.aiEnabled===!1;q(a,{aiEnabled:i}),f.emit("node.aiReference.toggled",{id:a,enabled:i}),N(i?"AI reference enabled.":"AI reference disabled.")},[q,N]),Ao=g.useCallback(async(a,s,i,l,u)=>{za.current=a;try{const h=await Qn(a);return Ht.current=0,f.emit(s,{...i,ok:!0,method:h}),N(l),h}catch(h){return Ht.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]),tu=g.useCallback(async a=>{const s=I.current.nodes.find(l=>l.id===a);if(!s)return;const i=ef(s);if(i)try{const l=await tf(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){za.current=i,Ht.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 Ao(Qh(s),"node.copy",{id:a},"Node content copied.","Node content copied inside this canvas.")},[Ao,N]),au=g.useCallback(async(a,s)=>{await Ao(s,"node.embed.copyUrl",{id:a,sourceKind:s.split(":",1)[0]||"relative"},"Embed URL copied.","Embed URL copied inside this canvas.")},[Ao]),nu=g.useCallback(a=>{const s=I.current.nodes.find(l=>l.id===a);if(!Xn(s))return;const i=rr(s);q(a,{height:i}),f.emit("node.fitHeight",{id:a,height:i}),N("Node height fitted to text.")},[q,N]),ou=g.useCallback(a=>{const s=I.current.nodes.find(C=>C.id===a);if(!Xn(s))return;const i=qh(s),l=i?Math.max(120,Math.round(s.originalHeight||rr(s))):Math.max(120,Math.min(s.height,Rh)),u=i?0:Math.round(s.height),h=i;D(C=>({...C,nodes:C.nodes.map(k=>k.id===a?{...k,height:l,isExpanded:h,originalHeight:u}:k)}),"node.expandCollapse",{id:a,expanded:h,height:l,originalHeight:u}),N(h?"Node expanded.":"Node collapsed.")},[D,N]),su=g.useCallback(a=>{const s=I.current.nodes.find(l=>l.id===a);if(!s||s.kind!=="code")return;const i=s.wordWrap===!1;q(a,{wordWrap:i}),f.emit("node.wordWrap.toggled",{id:a,enabled:i}),N(i?"Word wrap enabled.":"Word wrap disabled.")},[q,N]),ru=g.useCallback((a,s)=>{const i=I.current.nodes.find(h=>h.id===a);if(!Xn(i))return;const l=Yh(s.executionMode),u=Array.from(new Set([...i.tags??[],"Company root",l,s.enableSubAgents?"sub-agents":"single-agent","adapter-gated"]));q(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.`)},[q,N]),iu=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}ut(a),f.emit("companyGraph.open",{id:a,status:((i=s.metadata)==null?void 0:i.CompanyStatus)??"Staged"})},[N]),lu=g.useCallback(a=>{const s=I.current.nodes.find(i=>i.id===a);s!=null&&s.companyMode&&(q(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."))},[q,N]),du=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";q(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}.`)},[q,N]),cu=g.useCallback(()=>{ut(a=>(a&&f.emit("companyGraph.close",{id:a}),null))},[]),fi=g.useCallback((a,s)=>{const i=I.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(q(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.`))},[q,N]),bi=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)??""]);q(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()}}),ut(null),f.emit("companyGraph.remove",{id:a}),N("Company staging removed from this node.")},[q,N]),uu=g.useCallback((a,s)=>{const i=I.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(q(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.`))},[q,N]),mu=g.useCallback((a,s)=>{const i=s.trim();if(!i)return;const l=W("node"),u=W("edge");D(h=>{var M,S;const C=h.nodes.find(T=>T.id===a);if(!C)return h;const k={id:l,kind:"ai-task",title:"Company follow-up task",body:i,x:C.x+C.width+120,y:C.y+52,width:350,height:190,status:"idle",tags:["Company follow-up",((M=C.metadata)==null?void 0:M.CompanyExecutionModeLabel)??"Company"],metadata:{CompanyRootNodeId:C.id,CompanyExecutionMode:((S=C.metadata)==null?void 0:S.CompanyExecutionMode)??"Auto",CompanyTaskStatus:"Staged",CompanyStagedAt:new Date().toISOString()}};return{...h,nodes:[...h.nodes,k],edges:[...h.edges,{id:u,from:C.id,to:l,kind:"context"}]}},"companyGraph.followUp.staged",{rootId:a,taskId:l,chars:i.length}),y([l]),O(l),window.setTimeout(()=>O(h=>h===l?null:h),1400),N("Company follow-up task staged locally.")},[D,N]),pu=g.useCallback((a,s)=>{const i=W("node"),l=W("edge");D(u=>{const h=u.nodes.find(k=>k.id===a);if(!h)return u;const C={id:i,kind:"note",title:`Artifact: ${s.title}`.slice(0,90),body:s.content,x:h.x+h.width+120,y:h.y+290,width:360,height:220,tags:["Company artifact",s.type],metadata:{CompanyRootNodeId:h.id,CompanyArtifactType:s.type,CompanyArtifactSourceNodeId:s.sourceNodeId,CompanyAddedAt:new Date().toISOString()}};return{...u,nodes:[...u.nodes,C],edges:[...u.edges,{id:l,from:h.id,to:i,kind:"result"}]}},"companyGraph.artifact.added",{rootId:a,artifactNodeId:i,artifactType:s.type}),y([i]),O(i),window.setTimeout(()=>O(u=>u===i?null:u),1400),N("Company artifact added to the canvas.")},[D,N]),gu=g.useCallback((a,s="preview")=>{const i=Jh(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:Zh(a)}),f.emit("node.pdf.preview.open",{id:a.id,urlKind:i.startsWith("http")?"url":"path"});return}if(a.kind==="embed"&&!mn(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]),hu=g.useCallback(a=>{const s=K.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}),y(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}),Q(i=>i===a?null:i)},[D]),Rs=g.useCallback(a=>{const s=Array.from(new Set(K.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}),y([]),f.emit("selection.repaired",{reason:"delete-selected",source:a,beforeCount:s.length,afterCount:0,removedCount:s.length}),Q(l=>l&&i.has(l)?null:l),ut(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]),Mo=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(ba),k=h.filter(A=>!ba(A));if(C.length>0&&f.emit("remoteMonitor.node.duplicateIgnored",{action:"duplicate",source:s,skippedCount:C.length,nodeId:(_=C[0])==null?void 0:_.id}),k.length===0){const A=C[0]??l.nodes.find(ba);A&&(y([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(k.map(A=>[A.id,W("node")])),S=k.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:_r(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:W("edge"),from:M.get(A.from),to:M.get(A.to)}));D(A=>({...A,nodes:[...A.nodes,...S],edges:[...A.edges,...T]}),"node.duplicate",{source:s,count:S.length,edgeCount:T.length,sourceIds:i,duplicateIds:S.map(A=>A.id),skippedRemoteMonitorCount:C.length});const E=S.map(A=>A.id);y(E),O(E[0]??null),window.setTimeout(()=>O(A=>A===E[0]?null:A),1e3),N(C.length>0?`Duplicated ${S.length} node${S.length===1?"":"s"}; remote monitor stays single-instance.`:`Duplicated ${S.length} node${S.length===1?"":"s"}.`)},[D,N]),Ls=g.useCallback(a=>{Mo(K.current,a)},[Mo]),_n=g.useCallback((a,s)=>{const i=Array.from(new Set(K.current));if(i.length===0)return;const l=new Set(i),u=I.current.nodes,h=u.filter(S=>l.has(S.id));if(h.length===0)return;const C=u.filter(S=>!l.has(S.id)),k=a==="front"?[...C,...h]:[...h,...C];if(!k.some((S,T)=>{var E;return S.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(S=>({...S,nodes:k}),"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]),Es=g.useCallback(async()=>{const a=new Set(K.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=uf(s,i);la.current=l;try{const u=await Qn(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]),ma=g.useCallback((a,s,i)=>{const l=I.current.nodes.find(ba),u=[],h=[];let C=!!l;for(const w of a.nodes){if(ba(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&&(y([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 k=ns(h);if(!k)return;const M=new Map(h.map(w=>[w.id,W("node")])),S=s.x-k.minX,T=s.y-k.minY,E=h.map(w=>({...w,id:M.get(w.id),x:w.x+S,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:_r(w.imageStack,w.id,M.get(w.id))})),_=a.edges.filter(w=>M.has(w.from)&&M.has(w.to)).map(w=>({...w,id:W("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}),y(A),Q(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]),Dn=g.useCallback((a,s,i)=>{const l=a.trim();if(!l)return;const u=Jl(l,s,`${i}-url`),h=u??Zl(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}),y([h.id]),Q(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]),To=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 S=await Tf(M,{x:C,y:s.y},i);h.push(S),C+=S.width+Ko}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 k=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)}),y(k),Q(null),O(k[0]??null),window.setTimeout(()=>O(M=>M===k[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||cd(s.target))return;const i=s.clipboardData;if(!i)return;const l=Wa(),u=od(i.files,i.items);if(u.length>0){s.preventDefault(),To(u,l,"paste");return}const h=da.current>Date.now()?la.current:null;if(h){s.preventDefault(),ma(h,l,"paste"),f.emit("clipboard.nodes.pasteLocalFallback",{count:h.nodes.length});return}const C=Ht.current>Date.now()?za.current:null;if(C){s.preventDefault(),Dn(C,l,"paste"),f.emit("clipboard.text.pasteLocalFallback",{chars:C.length}),Ht.current=0;return}const k=i.getData("text/plain"),M=ql(k);if(M){s.preventDefault(),ma(M,l,"paste");return}const S=k.trim()?k:Ql(i.getData("text/html"));S.trim()&&(s.preventDefault(),Dn(S,l,"paste"))};return document.addEventListener("paste",a),()=>document.removeEventListener("paste",a)},[Wa,To,Dn,ma]);const fu=g.useCallback(a=>{cr(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")},[]),bu=g.useCallback(a=>{if(cr(a.target))return;const s=od(a.dataTransfer.files,a.dataTransfer.items),i=a.dataTransfer.getData("text/uri-list"),l=a.dataTransfer.getData("text/plain"),u=Ql(a.dataTransfer.getData("text/html")),h=Wa(a.clientX,a.clientY);if(s.length>0){a.preventDefault(),To(s,h,"drop");return}const C=(i||l||u).trim(),k=ql(l);if(k){a.preventDefault(),ma(k,h,"drop");return}C&&(a.preventDefault(),Dn(C,h,"drop"))},[Wa,To,Dn,ma]),yu=g.useCallback(()=>{const a=new Set(K.current),s=new Set(I.current.nodes.filter(i=>a.has(i.id)&&Xn(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:rr(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]),Ps=g.useCallback(a=>{const s=new Set(K.current),i=I.current.nodes.filter(_=>s.has(_.id)).sort((_,A)=>K.current.indexOf(_.id)-K.current.indexOf(A.id));if(i.length<2)return;const l=ns(i);if(!l)return;const u=a==="tidy"?Pf(i):i,h=28,C=Math.max(...u.map(_=>_.width)),k=Math.max(...u.map(_=>_.height)),M=u.map((_,A)=>({id:_.id,x:_.x,y:_.y,width:_.width,height:_.height,selectionIndex:A})),S=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:k,gapX:h,gapY:h,sizeMode:"preserve",snapToGrid:S,gridSize:no}:a==="strip"?T={mode:"stripHorizontal",order:"selectionOrder",targetHeight:k,gapX:h,sizeMode:"preserve",snapToGrid:S,gridSize:no}:T={mode:"masonry",order:"spatialReading",anchor:"selectionBoundsTopLeft",maxColumns:12,gapX:24,gapY:24,quantile:.75,sizeMode:"preserve",snapToGrid:S,gridSize:no};const E=Op(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:S}),f.emit("multiSelection.arrange",{mode:a,count:i.length,layoutMode:T.mode,snapToGrid:S,boundsAfter:E.boundsAfter}),N(a==="tidy"?`Tidied ${i.length} selected nodes.`:`Arranged ${i.length} selected nodes as ${a}.`)},[D,N]),xu=g.useCallback(()=>{const a=Array.from(new Set(K.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"&&to(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(),k=new Set,M=to(u),S=[];for(const w of M)S.push(Yl(w,u,k,C));for(const w of h)for(const G of to(w))S.push(Yl(G,w,k,C));if(S.length<2){N("No stackable image variants found."),f.emit("multiSelection.mergeImageStacks.skipped",{reason:"not-enough-variants",selectedCount:a.length});return}const T=S.some(w=>{var G;return w.variantId===((G=u.imageStack)==null?void 0:G.activeVariantId)})?u.imageStack.activeVariantId:S[0].variantId,E=S.find(w=>w.variantId===T)??S[0],_=h.map(w=>w.id),A=new Set(_);D(w=>({...w,nodes:w.nodes.filter(G=>!A.has(G.id)).map(G=>{var ae;return G.id===u.id?{...G,kind:"image",imageUrl:E.imageUrl,imageStack:{activeVariantId:T,variants:S,kind:"pile",title:((ae=G.imageStack)==null?void 0:ae.title)||G.title,updatedAtUtc:C},metadata:{...G.metadata??{},ImageStackKind:"pile",ImageStackPrimaryNodeId:u.id,ImageStackVariantCount:String(S.length),ImageStackMergedAtUtc:C,ImageStackRemovedNodeIds:_.join(","),ImageStackActiveVariantId:T},tags:Array.from(new Set([...G.tags??["image"],"Stack"])).slice(0,4)}:G}),edges:w.edges.filter(G=>!A.has(G.from)&&!A.has(G.to))}),"multiSelection.mergeImageStacks",{primaryNodeId:u.id,removedNodeIds:_,addedVariants:S.length-M.length,variantCount:S.length}),y([u.id]),Q(w=>w&&A.has(w)?null:w),ut(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 ${S.length} variants.`)},[D,N]),Cu=g.useCallback(a=>{const s=K.current.includes(a)?K.current:[a];Mo(s,"node-action")},[Mo]),Vt=g.useCallback(async(a,s)=>{const i=An.current.isBusy(a);return i&&f.emit("automation.run.queued",{id:a,key:a}),An.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=(Oa.current.get(a)??0)+1;Oa.current.set(a,u);const h=ra.current,C=(s==null?void 0:s.trim())||l.body,k=ti(ei(l));q(a,{status:"running",body:C,...en(l)?{metadata:qn(l,{instruction:C,runState:"running",status:"running",statusLabel:"Running",sourceMode:k?"media-prompt-only":"ai-task"})}:{}}),f.emit("automation.run",{id:a,mode:"single",seq:u,automationKind:k==null?void 0:k.kind});const M=()=>Oa.current.get(a)===u&&ra.current===h,S=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=Vf(C,l);q(a,{status:"done",result:w,...en(l)?{metadata:qn(l,{instruction:C,output:w,runState:"completed",status:k?"prepared":"done",statusLabel:k?"Spec only":"Done",sourceMode:k?"media-prompt-only":"local-draft",error:k?`External ${k.mode.toLowerCase()} generation was not executed.`:"",fallback:!0,partial:!!k,toolsUsed:k?`${k.toolHint}, Deterministic.Fallback, HumanReview.Gate`:"Deterministic.Fallback",toolWarnings:k?`External ${k.mode.toLowerCase()} generator was not invoked; this run prepared a spec only.`:""})}:{}}),Q(a)};if(!pt()){S("hosted-access-gated");return}try{const A=await ha();if(!M()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}if(te(A.state),Te(A.status??null),A.state!=="connected"){ce(A.message||"LocalBridge is unavailable."),S(A.message||"LocalBridge unavailable");return}const w=Hn(A.status);if(!w){S("LocalBridge token unavailable");return}const G=ld(I.current,l,C);f.emit("localBridge.codex.run",{id:a,boardId:I.current.id});const ae=await um({instruction:G,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:Jn(I.current.settings.model),reasoningEffort:zf(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(!ae.success||!ae.finalResponse){const ke=ae.error||"LocalBridge Codex returned no response.";f.emit("localBridge.codex.failed",{id:a,message:ke,status:ae.status}),q(a,{status:"blocked",result:ke,...en(l)?{metadata:qn(l,{instruction:C,output:ke,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:k?"media-prompt-only":"ai-task",error:ke,fallback:!1,partial:!0})}:{}}),Q(a);return}q(a,{status:"done",result:ae.finalResponse,...en(l)?{metadata:qn(l,{instruction:C,output:ae.finalResponse,runState:"completed",status:k?"prepared":"done",statusLabel:k?"Spec only":"Done",sourceMode:k?"media-prompt-only":"ai-generated",error:k?`External ${k.mode.toLowerCase()} generation was not executed.`:"",fallback:!1,partial:!!k,toolsUsed:k?`AI.LLM, ${k.toolHint}, HumanReview.Gate`:"AI.LLM",toolWarnings:k?`External ${k.mode.toLowerCase()} generator was not invoked; this run prepared a spec only.`:""})}:{}}),f.emit("localBridge.codex.completed",{id:a,providerKind:ae.providerKind,threadId:ae.threadId,turnId:ae.turnId}),Q(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}),q(a,{status:"blocked",result:w,...en(l)?{metadata:qn(l,{instruction:C,output:w,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:k?"media-prompt-only":"ai-task",error:w,fallback:!1,partial:!0})}:{}}),Q(a)}})},[q]),yi=g.useCallback(async()=>{const a=K.current[0];if(!a){N("Select an AI Task to run its graph.");return}const s=Br(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 Vt(l.id)},[Vt,N]),ku=g.useCallback(async a=>{if(a.result)try{const s=await Qn(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]),Su=g.useCallback(a=>{if(!a.result)return;const s=Kf(a,{x:a.x+a.width+78,y:a.y}),i={id:W("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>Rr}),y([s.id]),Q(null),O(s.id),window.setTimeout(()=>O(l=>l===s.id?null:l),1200),N("AI result archived as a Markdown node.")},[D,N]),wu=g.useCallback(a=>{if(!a.result)return;const s=Yf(a,{x:a.x+a.width+78,y:a.y+Math.min(a.height+44,360)}),i={id:W("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}),y([s.id]),Q(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]),xi=g.useCallback(()=>{var Fn,Gt,qi,Ji,Zi,Qi,el;const a=v.trim(),s=I.current.settings.inputMode,i=[...K.current],l=I.current.nodes.find(ue=>ue.id===i[0]),u=(l==null?void 0:l.kind)==="ai-task"?(a||l.body).trim():a;if(!u)return;const h=u.replace(/\s+/g," ").trim().toLowerCase(),C=window.location.pathname||"/mindcanvas",k=`${C}|${s}|${h}`,M=Date.now(),S=Mn.current;if((S==null?void 0:S.signature)===k&&M-S.at<=Ol){f.emit("globalInput.duplicateIgnored",{routePath:C,inputMode:s,chars:u.length,windowMs:Ol});return}Mn.current={signature:k,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"&&R(""),F(ue=>ue+1),f.emit("globalInput.submit.started",T);const E=ue=>{F(kt=>Math.max(0,kt-1)),f.emit("globalInput.submit.completed",{...T,status:ue})};if((l==null?void 0:l.kind)==="ai-task"){Vt(l.id,a).then(()=>E("ai-task")).catch(ue=>{f.emit("globalInput.submit.completed",{...T,status:"ai-task-error",message:ue instanceof Error?ue.message:String(ue)}),F(kt=>Math.max(0,kt-1))});return}const _=Me(window.innerWidth/2,window.innerHeight/2),A={x:_.x,y:_.y},w=Jl(u,A,"global-input-url"),G=w?null:Qr(u),ae=!!(G&&/^https?:\/\//i.test(G)&&!mn(G)),ke=!w&&!ae&&(s==="Image"||s==="Video")?s:null,Ka=w??(ae?Zl(u,A,"global-input-rejected-url"):null)??(ke?jf(u,A,I.current.settings,ke):vf(u,A,I.current.settings)),Z={...Ka,x:_.x-Ka.width/2,y:_.y-Ka.height/2},Ya=Z.kind==="ai-task",Ga=w?"globalInput.url.add":ae?"globalInput.rejectedUrl.add":ke?"globalInput.media.add":"globalInput.aiTask.add",Do={id:Z.id,kind:Z.kind,chars:u.length,inputMode:s,...Ya?{model:(Fn=Z.metadata)==null?void 0:Fn.TextModel,provider:(Gt=Z.metadata)==null?void 0:Gt.AiProvider,effort:(qi=Z.metadata)==null?void 0:qi.Effort}:{},...ke?{mediaMode:ke,mediaModel:(Ji=Z.metadata)==null?void 0:Ji.MediaModel,aspectPresetId:(Zi=Z.metadata)==null?void 0:Zi.AspectPresetId,requestedSize:(Qi=Z.metadata)==null?void 0:Qi.RequestedSize}:{}};if(Ya){const ue=I.current,kt={...ue,nodes:ue.nodes.some(Fs=>Fs.id===Z.id)?ue.nodes:[...ue.nodes,Z],updatedAt:new Date().toISOString()};p(Fs=>fa(Fs,ue,{description:Ga,mergeKey:null})),b([]),I.current=kt,f.emit(Ga,Do),r(kt)}else D(ue=>({...ue,nodes:ue.nodes.some(kt=>kt.id===Z.id)?ue.nodes:[...ue.nodes,Z]}),Ga,Do);if(R(""),y([Z.id]),Q(null),O(Z.id),window.setTimeout(()=>O(ue=>ue===Z.id?null:ue),1200),Ya){f.emit("globalInput.aiTask.runRequested",{id:Z.id,chars:u.length,model:(el=Z.metadata)==null?void 0:el.TextModel}),N("AI task created from input and running."),Vt(Z.id,u).then(()=>E("ai-task-created")).catch(ue=>{f.emit("globalInput.submit.completed",{...T,status:"ai-task-created-error",message:ue instanceof Error?ue.message:String(ue)}),F(kt=>Math.max(0,kt-1))});return}N(`Added ${Z.kind==="file"?"URL reference":Z.kind} node from input.`),E(w?"url-node":ae?"rejected-url-node":ke?"media-node":"text-node")},[D,v,Vt,Me,N]),Ci=g.useCallback(async()=>{const a=Xf(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 Vt(h.id)},[Vt,N]),ki=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]),Si=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}),Q(null),N(`Stopped ${a.length} active task${a.length===1?"":"s"}.`)},[D,N]),wi=g.useCallback(()=>{const a=I.current.nodes.find(C=>C.id===K.current[0]);if(!a)return;const s=a.x+a.width+80,i=a.y,l={id:W("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:W("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:W("edge"),from:a.id,to:l.id,kind:"context"},{id:W("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}),y([l.id,u.id])},[D]),vu=g.useCallback((a,s)=>{if(me&&me.from!==a){const i={id:W("edge"),from:me.from,to:a,kind:me.kind==="context"?"context":s};D(l=>({...l,edges:[...l.edges,i]}),"edge.add",{...i}),X(null);return}X({from:a,kind:s})},[D,me]),Ro=g.useCallback(()=>{p(a=>{const s=a.at(-1);if(!s)return a;const i=s.board,l=K.current,u=dd(l,i);return b(h=>lg(h,I.current,{description:s.description})),r(i),y(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)})},[]),Lo=g.useCallback(()=>{b(a=>{const s=a[0];if(!s)return a;const i=s.board,l=K.current,u=dd(l,i);return p(h=>fa(h,I.current,{description:s.description})),r(i),y(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,S;if(!s.defaultPrevented&&s.ctrlKey&&!s.shiftKey&&!s.altKey&&!s.metaKey&&s.key.toLowerCase()==="t"&&!s.repeat){s.preventDefault(),le("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-function-toolbar"});return}if(s.defaultPrevented||cd(s.target))return;const i=s.key.toLowerCase(),l=s.ctrlKey||s.metaKey,u=!l&&!s.altKey&&!s.shiftKey,h=Zf(s.target);if(s.key==="Tab"&&u&&!s.repeat&&!h){s.preventDefault(),Ns("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-wheel-mode",wheelMode:!(I.current.settings.wheelMode??!1)});return}if(s.key==="Enter"&&u&&!s.repeat&&!h&&gi()){s.preventDefault(),f.emit("keyboard.shortcut",{action:"focus-global-input"});return}if(i==="f"&&u&&!s.repeat&&!h){s.preventDefault(),Pn("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-fullscreen"});return}if(i==="d"&&u&&!s.repeat){s.preventDefault(),As("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-cursor-direction"});return}if(i==="h"&&u&&!s.repeat){s.preventDefault(),Is(),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(),pi(C),f.emit("keyboard.shortcut",{action:"camera-pan",direction:C});return}if(i===qt&&!s.altKey&&!s.shiftKey){s.preventDefault(),l?(ua(qt),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:qt})):(En(qt),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:qt}));return}if(/^[0-9]$/.test(s.key)&&!s.altKey){if(l&&!s.shiftKey){s.preventDefault(),ua(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:s.key});return}if(!l&&!s.shiftKey){s.preventDefault(),En(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:s.key});return}}if(l&&i==="z"&&!s.shiftKey){s.preventDefault(),Ro(),f.emit("keyboard.shortcut",{action:"undo"});return}if(l&&i==="y"||l&&s.shiftKey&&i==="z"){s.preventDefault(),Lo(),f.emit("keyboard.shortcut",{action:"redo"});return}if(l&&i==="f"&&!s.altKey){s.preventDefault(),(M=Ba.current)==null||M.focus(),(S=Ba.current)==null||S.select(),f.emit("keyboard.shortcut",{action:"focus-search"});return}if(l&&i==="c"&&K.current.length>0){s.preventDefault(),Es(),f.emit("keyboard.shortcut",{action:"copy",count:K.current.length});return}if(l&&i==="v"&&la.current&&da.current>Date.now()){const T=la.current;s.preventDefault(),ma(T,Wa(),"paste"),f.emit("keyboard.shortcut",{action:"paste-local",count:T.nodes.length});return}if(l&&i==="d"){s.preventDefault(),Ls("keyboard"),f.emit("keyboard.shortcut",{action:"duplicate",count:K.current.length});return}if(l&&s.key==="]"){s.preventDefault(),_n("front","keyboard"),f.emit("keyboard.shortcut",{action:"bring-front",count:K.current.length});return}if(l&&s.key==="["){s.preventDefault(),_n("back","keyboard"),f.emit("keyboard.shortcut",{action:"send-back",count:K.current.length});return}if(s.key==="Delete"||s.key==="Backspace"){if(K.current.length===0)return;s.preventDefault(),Rs("keyboard"),f.emit("keyboard.shortcut",{action:"delete",count:K.current.length});return}if(s.key!=="Escape")return;let k=!1;ta&&(ie(!1),k=!0),qe&&(xn(!1),k=!0),Sn&&(Nt(!1),k=!0),St&&(Fe("keyboard"),k=!0),lt&&(U(null),k=!0),et&&(ut(null),k=!0),jt&&(It(null),k=!0),me&&(X(null),k=!0),re&&(Q(null),k=!0),j.trim()&&(P(""),J([]),ge(0),k=!0),K.current.length>0&&(y([]),k=!0),k&&(s.preventDefault(),f.emit("keyboard.shortcut",{action:"escape"}))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[et,Fe,me,Es,Rs,jt,Ls,gi,Wa,En,Is,St,pi,ma,lt,ta,j,Lo,_n,re,ua,qe,Sn,As,le,Pn,Ns,Ro]);const ju=g.useCallback(()=>{Ku(),D(()=>({...al,updatedAt:new Date().toISOString()}),"board.restore",{source:"fixture-reset"}),y(["node-agent-command"]),He([]),Fe("fixture-reset")},[Fe,D]),_s=g.useCallback((a,s="result-click")=>{const i=Kl(a),l={...se.current,x:window.innerWidth/2-i.x*se.current.scale,y:window.innerHeight/2-i.y*se.current.scale};$(l),y([a.id]),O(a.id),f.emit("search.focused",{query:j.trim(),nodeId:a.id,source:s}),window.setTimeout(()=>O(null),900)},[$,j]);g.useEffect(()=>{const a=++$a.current,s=qf(se.current,ye);f.emit("search.started",{query:j,engine:Wt.current?"worker":"local",viewportCenterX:Number(s.centerX.toFixed(2)),viewportCenterY:Number(s.centerY.toFixed(2))});const i=window.setTimeout(()=>{if(a!==$a.current){f.emit("async.staleIgnored",{path:"search",seq:a});return}if(!j.trim()){J([]),ge(0),je("none"),f.emit("search.completed",{query:j,count:0,engine:"none"});return}const u=ia.current;if(u&&Wt.current){u.postMessage({type:"SEARCH_QUERY",boardId:I.current.id,seq:a,query:j,limit:8,viewport:s});return}const h=performance.now(),C=Jf(I.current.nodes,j,s,8);J(C),ge(0),je("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,ye,he]);const Bn=g.useCallback(a=>{ge(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]),Ds=g.useCallback(a=>{const s=B[ne];s&&_s(s,a)},[_s,ne,B]),Iu=g.useCallback(a=>{if(a.key==="ArrowDown"){a.preventDefault(),Bn(1);return}if(a.key==="ArrowUp"){a.preventDefault(),Bn(-1);return}if(a.key==="Enter"){a.preventDefault(),Ds("keyboard-enter");return}a.key==="Escape"&&(P(""),J([]),ge(0),f.emit("search.cleared"))},[Ds,Bn]),Nu=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;p(T=>fa(T,I.current,{description:"Move nodes",mergeKey:null})),b([]);const u=K.current.includes(a)?K.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},k=I.current.settings.gridSnap??!0,M=T=>{const E=(T.clientX-i.x)/se.current.scale,_=(T.clientY-i.y)/se.current.scale,A=k?Xl(C.x+E)-C.x:E,w=k?Xl(C.y+_)-C.y:_;r(G=>({...G,nodes:G.nodes.map(ae=>{const ke=h.get(ae.id);return ke?{...ae,x:ke.x+A,y:ke.y+w}:ae}),updatedAt:new Date().toISOString()}))},S=()=>{window.removeEventListener("pointermove",M),window.removeEventListener("pointerup",S),f.emit("node.patch",{id:a,reason:"drag",gridSnap:k})};window.addEventListener("pointermove",M),window.addEventListener("pointerup",S,{once:!0})},[]),Au=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=af(i);let h={width:i.width,height:i.height};p(E=>fa(E,I.current,{description:"Resize node",mergeKey:null})),b([]),y(E=>E.includes(a)?E:[a]),Q(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",S),window.removeEventListener("pointercancel",T)},k=E=>{const _=(E.clientX-l.x)/se.current.scale,A=(E.clientY-l.y)/se.current.scale;let w=i.width+_,G=i.height+A;if(E.shiftKey&&i.width>0&&i.height>0){const ae=Math.max(w/i.width,G/i.height);w=i.width*ae,G=i.height*ae}h={width:Math.round(de(w,u.minWidth,u.maxWidth)),height:Math.round(de(G,u.minHeight,u.maxHeight))},r(ae=>({...ae,nodes:ae.nodes.map(ke=>ke.id===a?{...ke,...h}:ke),updatedAt:new Date().toISOString()}))},M=E=>{k(E)},S=E=>{k(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",S,{once:!0}),window.addEventListener("pointercancel",T,{once:!0})},[]),Mu=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){Q(null),it({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",k),window.removeEventListener("pointercancel",M)},C=S=>{it({startX:s.x,startY:s.y,currentX:S.clientX,currentY:S.clientY})},k=S=>{const T=rd({startX:s.x,startY:s.y,currentX:S.clientX,currentY:S.clientY});if(h(),it(null),T.width<Bl&&T.height<Bl){f.emit("selection.box.cancelled",{reason:"too-small",width:Math.round(T.width),height:Math.round(T.height)});return}const E=Bf(T,se.current),_=I.current.nodes.filter(A=>sd(A,E)).map(A=>A.id);y(_),f.emit("selection.box.completed",{count:_.length,width:Math.round(T.width),height:Math.round(T.height)})},M=()=>{h(),it(null),f.emit("selection.box.cancelled",{reason:"pointer-cancelled"})};document.body.classList.add("is-selecting"),window.addEventListener("pointermove",C),window.addEventListener("pointerup",k,{once:!0}),window.addEventListener("pointercancel",M,{once:!0});return}y([]),Q(null);const i={...se.current},l=h=>{$({...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})},[$]),Bs=g.useCallback(a=>{const s=a.target instanceof Element?a.target:null;if(s!=null&&s.closest('[data-disable-mindcanvas-wheel="true"]'))return;const i=s==null?void 0:s.closest("textarea,.result-popover__body,.mindcanvas-text-scrollable-view"),l=a.ctrlKey||a.metaKey;if(i&&!l)return;const u=I.current.settings.wheelMode?l:!l;a.preventDefault();const h=se.current;if(u){const C=Math.exp(-a.deltaY*.0012),k=de(h.scale*C,Zo,Qo),M=Me(a.clientX,a.clientY);$({x:a.clientX-M.x*k,y:a.clientY-M.y*k,scale:k});return}$({...h,x:h.x-a.deltaX,y:h.y-a.deltaY})},[$,Me]);g.useEffect(()=>{const a=jn.current;if(a)return a.addEventListener("wheel",Bs,{passive:!1}),()=>a.removeEventListener("wheel",Bs)},[Bs]);const Y=o.nodes.find(a=>a.id===c[0]),Va=g.useMemo(()=>{const a=new Set(c);return o.nodes.filter(s=>a.has(s.id))},[o.nodes,c]),On=((_i=Y==null?void 0:Y.metadata)==null?void 0:_i[z.studioNodeType])??"",Tu=On?Ws(On):"Unassigned",Ru=On==="template.input",vi=g.useMemo(()=>Wl(ve),[ve]),Eo=pe&&pe.issues.length===0?pe.template:null,ji=g.useMemo(()=>Oo(Eo,Mt),[Mt,Eo]),Lu=g.useMemo(()=>Va.filter(a=>a.kind==="image"&&to(a).length>0).length,[Va]),ot=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]),Po=g.useMemo(()=>{if(!Y||Y.kind!=="ai-task")return{size:0,runnable:0};const a=Br(o,Y.id);return{size:a.length,runnable:a.filter(s=>s.status!=="running").length}},[o,Y]),pa=g.useMemo(()=>{if(Va.length<2)return null;const a=ns(Va);if(!a)return null;const s=Math.max(.01,oe.scale),i=a.minX*s+oe.x-10,l=a.minY*s+oe.y-10,u=a.maxX*s+oe.x+10,h=a.maxY*s+oe.y+10,C=(i+u)/2,k=l>112?l-52:h+12;return{left:i,top:l,width:Math.max(0,u-i),height:Math.max(0,h-l),toolbarLeft:de(C,168,Math.max(168,ye.width-168)),toolbarTop:de(k,42,Math.max(42,ye.height-58))}},[Va,ye.height,ye.width,oe]),Kt=re?o.nodes.find(a=>a.id===re):null,Ii=et?o.nodes.find(a=>a.id===et&&!!a.companyMode):null,Ni=jt?o.nodes.find(a=>a.id===jt&&a.kind==="directory"):null,Ai=g.useMemo(()=>new Set([...c,...B.map(a=>a.id),bt,re,et,jt,me==null?void 0:me.from].filter(a=>!!a)),[et,me==null?void 0:me.from,jt,bt,re,B,c]),ga=g.useMemo(()=>{const a=Df(oe,ye);return o.nodes.filter(s=>Ai.has(s.id)||sd(s,a))},[Ai,o.nodes,ye,oe]),Os=g.useMemo(()=>new Set(ga.map(a=>a.id)),[ga]);g.useEffect(()=>{f.emit("visibility.culled",{visible:ga.length,total:o.nodes.length,scale:Number(oe.scale.toFixed(3))})},[o.nodes.length,oe.scale,ga.length]);const Eu=g.useCallback(()=>{const a=I.current,s=K.current.map(l=>a.nodes.find(u=>u.id===l)).find(Boolean),i=(s==null?void 0:s.kind)==="ai-task"?s:a.nodes.find(l=>K.current.includes(l.id)&&l.kind==="ai-task")??a.nodes.find(l=>l.kind==="ai-task");return i?ld(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:",oo(v||(s==null?void 0:s.body)||"No prompt input.",4e3)].join(`
47
- `)},[v]),Mi=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]),Ti=g.useMemo(()=>Mi.filter(a=>Os.has(a.from)||Os.has(a.to)),[Mi,Os]),st=g.useMemo(()=>_f(o.nodes,oe,ye),[o.nodes,oe,ye]),Pu=g.useCallback(a=>{if(!st)return;const s=a.currentTarget.getBoundingClientRect(),i=de(a.clientX-s.left,0,es),l=de(a.clientY-s.top,0,ts),u=st.bounds.minX+(i-tn)/st.scale,h=st.bounds.minY+(l-tn)/st.scale;$({...se.current,x:ye.width/2-u*se.current.scale,y:ye.height/2-h*se.current.scale}),f.emit("minimap.navigate",{worldX:Math.round(u),worldY:Math.round(h)})},[$,st,ye.height,ye.width]),Yt=o.settings.inputMode==="Image"?"Image":o.settings.inputMode==="Video"?"Video":null,Et=Yt==="Image"?bc:Yt==="Video"?yc:null,_u=v.trim().length>0||(Y==null?void 0:Y.kind)==="ai-task",Ri=j.trim().length>0,Li=B[ne]??null,Du=Ri?`${B.length} result${B.length===1?"":"s"}`:`${o.nodes.length} nodes`,$n=rt?rd(rt):null,_o=ir(o.settings.gridType),Ei=o.settings.gridSnap??!0,Pi=o.settings.cameraBookmarks??{},$s=St,Bu=aa==="full";return n.jsxs("div",{ref:jn,className:`mindcanvas ${Ct?"mindcanvas--read-mode":""} mindcanvas--function-toolbar-${aa}`,"data-function-toolbar-mode":aa,"data-read-mode":Ct?"true":"false","data-read-mode-api":Cn?"bound":"unbound",onPointerMove:fc,onDragOver:fu,onDrop:bu,children:[n.jsx("div",{ref:Tt,className:`canvas-plane canvas-plane--grid-${_o}`,"data-grid-type":_o,"data-grid-snap":o.settings.gridSnap??!0?"on":"off",onPointerDown:Mu,onContextMenu:a=>a.preventDefault(),children:n.jsxs("div",{ref:Da,className:"canvas-world","data-visible-nodes":ga.length,"data-total-nodes":o.nodes.length,"data-visible-edges":Ti.length,children:[n.jsx("svg",{className:"edge-layer",width:"4000",height:"3000",viewBox:"-1200 -900 4000 3000","aria-hidden":"true",children:Ti.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))}),ga.map(a=>n.jsx(oh,{node:a,selected:c.includes(a.id),pulsing:bt===a.id,connectionDraft:me,onSelect:zc,onDragStart:Nu,onResizeStart:Au,onPatch:q,onDelete:hu,onDuplicate:Cu,onRun:Vt,onPin:vu,onOpenResult:Q,onToggleAiReference:eu,onCopyNode:tu,onCopyEmbedReference:au,onFitNodeHeight:nu,onToggleNodeExpanded:ou,onToggleWordWrap:su,onStageCompany:ru,onOpenCompanyGraph:iu,onSyncCompanyGoal:lu,onRefreshCompany:du,onSetCompanyStatus:fi,onRemoveCompany:bi,onOpenAsset:gu,onOpenDirectorySettings:Xc,onScanDirectory:Zc,onCreateRemoteControl:Vc,onGenerateTemplateCard:Hc},a.id))]})}),$n?n.jsx("div",{className:"canvas-selection-box",style:{left:$n.left,top:$n.top,width:$n.width,height:$n.height}}):null,pa?n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"canvas-multi-selection-bounds",style:{left:pa.left,top:pa.top,width:pa.width,height:pa.height}}),n.jsxs("div",{className:"multi-selection-toolbar floating-panel",role:"toolbar","aria-label":"Multi selection actions",style:{left:pa.toolbarLeft,top:pa.toolbarTop},children:[n.jsx("span",{className:"multi-selection-toolbar__count",children:Va.length}),n.jsx("button",{type:"button",title:"Copy selected nodes","data-testid":"multi-selection-copy",onClick:()=>void Es(),children:n.jsx(ao,{size:15})}),n.jsx("button",{type:"button",title:"Duplicate selected nodes",onClick:()=>Ls("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:()=>_n("front","multi-toolbar"),children:n.jsx(Fm,{size:15})}),n.jsx("button",{type:"button",title:"Send selected nodes to back","data-testid":"multi-selection-send-back",onClick:()=>_n("back","multi-toolbar"),children:n.jsx(zm,{size:15})}),n.jsx("button",{type:"button",title:"Fit selected text heights",onClick:yu,children:n.jsx(fl,{size:15})}),n.jsx("span",{className:"multi-selection-toolbar__separator"}),n.jsx("button",{type:"button",title:"Arrange selected nodes as grid",onClick:()=>Ps("grid"),children:n.jsx(bl,{size:15})}),n.jsx("button",{type:"button",title:"Arrange selected nodes as strip",onClick:()=>Ps("strip"),children:n.jsx(yl,{size:15})}),n.jsx("button",{type:"button",title:"Tidy selected nodes","data-testid":"multi-selection-tidy",onClick:()=>Ps("tidy"),children:n.jsx(xl,{size:15})}),Lu>=2&&n.jsx("button",{type:"button",title:"Stack selected image nodes","data-testid":"multi-selection-merge-images",onClick:xu,children:n.jsx(Fo,{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:()=>Rs("multi-toolbar"),children:n.jsx(rs,{size:15})}),n.jsx("button",{type:"button",title:"Clear selection","data-testid":"multi-selection-clear",onClick:()=>{const a=K.current.length;y([]),f.emit("selection.cleared",{source:"multi-toolbar",beforeCount:a})},children:n.jsx(gt,{size:15})})]})]}):null,ct&&n.jsx("div",{className:"node-action-toast floating-panel",role:"status",children:ct}),n.jsxs("div",{className:"top-tabbar",role:"tablist","aria-label":"MindCanvas boards",children:[Pa.map(a=>{const s=a.id===o.id,i=Ze(a.name),l=nf(a,o,s);return n.jsxs("div",{className:`tab-shell ${s?"is-active":""} ${vt===a.id?"is-dragging":""} ${yn===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":yn===a.id?"over":"idle",onDragStart:u=>{u.dataTransfer.effectAllowed="move",u.dataTransfer.setData("text/plain",a.id),bn(a.id),f.emit("board.tabs.dragStart",{boardId:a.id})},onDragOver:u=>{!vt||vt===a.id||(u.preventDefault(),u.dataTransfer.dropEffect="move",Ft(a.id))},onDragLeave:()=>{Ft(u=>u===a.id?null:u)},onDrop:u=>{u.preventDefault();const h=vt||u.dataTransfer.getData("text/plain");mc(h,a.id),bn(null),Ft(null)},onDragEnd:()=>{bn(null),Ft(null)},onMouseDown:u=>{u.button===1&&(u.preventDefault(),Ss(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?Rt():ri(a.id),children:[a.sourceKind==="localBridge"?n.jsx(Vn,{size:15}):n.jsx(Fo,{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(),Ss(a.id,"close-button")},children:n.jsx(gt,{size:13})})]},a.id)}),n.jsx("button",{type:"button",className:"tab-button tab-button--plain",title:"New board","data-testid":"board-create",onClick:si,children:n.jsx(eo,{size:16})})]}),St&&n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",className:"local-board-backdrop project-gallery-backdrop","aria-label":"Close project gallery","data-testid":"project-gallery-backdrop","data-project-gallery-backdrop":"true",onClick:()=>Fe("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":De.currentMode,"data-project-storage-selected-tab":ze,"data-project-storage-local-provider":De.localProviderKind,"data-project-storage-cloud-available":De.isCloudAvailable?"true":"false","data-project-storage-can-sync-cloud":De.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(bl,{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:si,children:n.jsx(eo,{size:15})}),n.jsx("button",{type:"button",title:"Close Project Gallery",onClick:()=>Fe("close-button"),children:n.jsx(gt,{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":De.showLocalTab?"true":"false","data-project-storage-show-cloud":De.showCloudTab?"true":"false",children:[n.jsxs("button",{type:"button",role:"tab","aria-selected":ze==="local",className:ze==="local"?"is-active":"","data-testid":"project-storage-tab-local",onClick:()=>ni("local"),children:[n.jsx(Vn,{size:14}),"Local"]}),n.jsxs("button",{type:"button",role:"tab","aria-selected":ze==="cloud",className:ze==="cloud"?"is-active":"","data-testid":"project-storage-tab-cloud",onClick:()=>ni("cloud"),children:[n.jsx(zo,{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=>ws(a.target.value)})]}),n.jsxs("div",{className:"project-gallery-rail-card",children:[n.jsx("span",{children:"Storage"}),n.jsx("strong",{children:ze==="local"?`${Xe.length} local boards`:"Cloud gated"}),n.jsx("small",{children:ze==="local"?`${De.localProviderKind} provider / browser catalog and LocalBridge boards`:De.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:Re||void 0,children:ze==="local"?Re?Xo(Re):md(we):"Cloud gated"}),n.jsx("small",{children:ze==="local"?Re||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=>ca(a.target.checked)}),n.jsx("span",{children:"Show at startup"})]})]}),n.jsx("section",{className:"project-gallery-board-area",children:ze==="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:[Xe.length," saved"]})]}),n.jsxs("div",{className:"local-board-list local-board-list--stored project-gallery-board-grid","data-project-gallery-board-grid":"true",children:[Xe.map(a=>{const s=gn===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:fn,onChange:l=>Na(l.target.value),onKeyDown:l=>Qc(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:()=>Ts(a.id),children:n.jsx(Ks,{size:13})}),n.jsx("button",{type:"button",title:"Cancel rename","data-testid":"stored-board-rename-cancel",onClick:Ms,children:n.jsx(gt,{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:()=>ri(a.id),onDoubleClick:l=>{l.stopPropagation(),hi(a)},children:[a.sourceKind==="localBridge"?n.jsx(Vn,{size:15}):n.jsx(ht,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Ze(a.name)}),n.jsx("small",{children:Ff(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:()=>hi(a),children:n.jsx(Cl,{size:14})}),n.jsx("button",{type:"button",className:"local-board-row__action",title:"Delete board","data-testid":"stored-board-delete",disabled:i,onClick:()=>Ss(a.id,"project-gallery"),children:n.jsx(rs,{size:14})})]})},a.id)}),Xe.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:Pe,disabled:we==="checking",children:we==="checking"?n.jsx(_t,{size:15,className:"spin-icon"}):n.jsx(an,{size:15})})]}),n.jsxs("div",{className:`local-board-state local-board-state--${we}`,children:[we==="blocked"?n.jsx(bd,{size:15}):we==="unavailable"?n.jsx(Um,{size:15}):n.jsx(Vn,{size:15}),n.jsx("span",{children:md(we)}),we==="blocked"&&!Xa()&&n.jsx("button",{type:"button",onClick:oi,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(Ys,{size:16}),n.jsxs("span",{children:[n.jsx("strong",{children:"Local Workspace"}),n.jsx("small",{title:Re||void 0,children:Re||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 sc("workspace-panel"),children:[n.jsx(an,{size:14}),n.jsx("span",{children:"Refresh"})]}),n.jsxs("button",{type:"button","data-testid":"project-gallery-workspace-browse",title:"Select Local Storage",disabled:wt||we==="blocked"&&!Xa(),onClick:()=>void rc(),children:[wt?n.jsx(_t,{size:14,className:"spin-icon"}):n.jsx(Ys,{size:14}),n.jsx("span",{children:"Select Local Storage"})]})]}),Oe.length>0&&n.jsx("div",{className:"project-gallery-workspace-history","data-testid":"project-gallery-workspace-history",children:Oe.map(a=>n.jsx("button",{type:"button",title:a,disabled:wt||a===Re,onClick:()=>void ks(a,"history"),children:Xo(a,40)},a))})]}),n.jsxs("button",{type:"button",className:"local-board-export","data-testid":"localbridge-export",disabled:Ae||!!((Di=o.source)!=null&&Di.partialImport)||!!((Bi=o.source)!=null&&Bi.truncated)||we==="blocked"&&!Xa(),title:(Oi=o.source)!=null&&Oi.partialImport?"Export blocked for partial original imports":($i=o.source)!=null&&$i.truncated?"Export blocked for truncated imported boards":"Export current board to LocalBridge",onClick:()=>void ic(),children:[Ae?n.jsx(_t,{size:15,className:"spin-icon"}):n.jsx(kl,{size:15}),n.jsx("span",{children:Ae?"Exporting":"Export current"})]}),n.jsx("div",{className:"local-board-list project-gallery-bridge-list",children:Dt.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 pc(a),children:[n.jsx(Vn,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Ze(a.Title)}),n.jsx("small",{children:Er(a.UpdatedAt)})]}),mo===a.Id&&n.jsx(_t,{size:15,className:"spin-icon"})]},a.Id))})]})]}):n.jsxs("div",{className:"project-cloud-shell","data-testid":"project-cloud-shell","data-project-cloud-status":De.isCloudAvailable?"available":"gated","data-project-cloud-plan":De.cloudPlanKey,"data-project-cloud-entitlement":De.cloudEntitlementStatus,"data-production-adapter-state":_e.overallState,"data-project-cloud-database-mode":_e.cloudBoards.mode,"data-project-cloud-database-ready":_e.cloudBoards.canAttempt?"true":"false","data-project-cloud-asset-upload-mode":_e.cloudAssetUpload.mode,"data-project-cloud-asset-upload-ready":_e.cloudAssetUpload.canAttempt?"true":"false","data-client-secret-blocked":_e.forbiddenClientSecretKeys.length>0?"true":"false",children:[n.jsx("div",{className:"project-cloud-shell__icon",children:be?n.jsx(zo,{size:22}):n.jsx(Fr,{size:22})}),n.jsx("strong",{children:be?"Cloud boards are provider-ready":"Cloud projects are adapter-gated"}),n.jsx("p",{children:be?"Supabase auth and board storage are connected for this browser session. Cloud actions call the provider adapter only from this tab.":"The original project popup had a Cloud tab for authenticated boards. This React port keeps that navigation habit visible, but cloud sync is disabled until auth and database adapters are connected."}),n.jsxs("div",{className:"project-cloud-shell__current",children:[n.jsxs("span",{children:["Current: ",be?"Cloud ready":"Local"]}),n.jsxs("small",{children:[Ze(o.name)," / ",pn??De.cloudStatusMessage??"saved in this browser"]})]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-new-board",disabled:!be||xt,title:be?"Create and save a cloud board":"Cloud board creation requires the cloud adapter",onClick:cc,children:[xt?n.jsx(_t,{size:14,className:"spin-icon"}):n.jsx(eo,{size:14}),xt?"Saving":"New cloud board"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-save-current",disabled:!be||xt,title:be?"Save current board to Supabase":"Cloud save requires Supabase login",onClick:dc,children:[n.jsx(kl,{size:14}),"Save current"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-refresh",disabled:!be||xt,title:be?"Refresh cloud boards":"Cloud refresh requires Supabase login",onClick:()=>void Ua("refresh-button"),children:[xt?n.jsx(_t,{size:14,className:"spin-icon"}):n.jsx(an,{size:14}),"Refresh cloud"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-login-shell",onClick:()=>e("/login"),children:[n.jsx(zo,{size:14}),"Open login shell"]}),be&&n.jsxs("div",{className:"local-board-list project-gallery-cloud-list","data-testid":"project-cloud-board-list",children:[ja.map(a=>n.jsxs("button",{type:"button","data-testid":"project-cloud-board-row","data-board-id":a.id,className:"local-board-row",disabled:!!Ia,onClick:()=>void lc(a),children:[n.jsx(zo,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Ze(a.name)}),n.jsxs("small",{children:[Er(a.updatedAt)," / ",a.nodeCount," nodes"]})]}),Ia===a.id&&n.jsx(_t,{size:15,className:"spin-icon"})]},a.id)),ja.length===0&&n.jsx("p",{className:"local-board-message",children:"No cloud boards loaded."})]})]})})]})]})})})]}),!$s&&n.jsx(Yg,{bridgeState:we,bridgeMessage:Qe,bridgeStatus:bs,syncStatus:Ot,syncMessage:wa,hostedBridgeAccessEnabled:Xa(),onRefreshBridge:Pe,onEnableHostedBridge:oi}),Sn&&ee&&n.jsx(ll,{launchers:na,activeLauncher:ee,template:Ve,selectedOptionId:tt,values:At,validationMessage:wn??(_a?null:vn),canCreate:_a||!vn,primaryLabel:_a?"Add template card":"Create board",onLauncherSelected:Ic,onOptionSelected:Mc,onInputChanged:Tc,onCreate:uc,onClose:Ac}),Aa&&n.jsx("div",{className:"template-studio-chooser-backdrop","data-testid":"template-studio-chooser",onMouseDown:di,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:di,children:n.jsx(gt,{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:Lc,children:[n.jsx("span",{className:"template-studio-chooser__icon",children:n.jsx(eo,{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:Ec,children:[n.jsx("span",{className:"template-studio-chooser__icon",children:n.jsx(Uo,{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."})]})]})]})]})}),Ra&&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(Fo,{size:15}),n.jsx("span",{children:"Template Studio"})]}),n.jsxs("div",{className:"template-studio-toolbar__meta",children:["Editing ",ve.templateId]}),n.jsx("button",{type:"button",title:"Compile manifest","data-testid":"template-studio-compile",onClick:js,children:n.jsx(on,{size:15})}),n.jsx("button",{type:"button",title:"Test create board","data-testid":"template-studio-test-create",onClick:Bc,children:n.jsx(Jt,{size:15})}),n.jsx("button",{type:"button",title:"Copy manifest JSON","data-testid":"template-studio-copy",onClick:()=>void Dc(),children:n.jsx(ao,{size:15})}),n.jsx("button",{type:"button",title:"Save template draft","data-testid":"template-studio-save",onClick:Pc,children:n.jsx(Ks,{size:15})}),n.jsx("button",{type:"button",title:"Exit Template Studio","data-testid":"template-studio-close",onClick:ui,children:n.jsx(gt,{size:15})})]}),n.jsx("div",{className:"template-studio-toolbar template-studio-toolbar--roles floating-panel",children:Hs.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:()=>_c(a.studioNodeType),children:n.jsx("span",{children:a.shortLabel})},a.studioNodeType))}),Y&&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: ",Y.title||Y.kind]}),Hs.map(a=>n.jsx("button",{type:"button",title:a.label,className:On===a.studioNodeType?"is-active":"","data-testid":"template-studio-role","data-studio-node-type":a.studioNodeType,onClick:()=>mi(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:ve.templateTitle})]}),n.jsx("button",{type:"button",title:"Close Template Studio",onClick:ui,children:n.jsx(gt,{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:ve.templateId,onChange:a=>Io("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:ve.templateTitle,onChange:a=>Io("templateTitle",a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Category"}),n.jsx("input",{type:"text",value:ve.category,onChange:a=>Io("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:ve.boardTitle,onChange:a=>Io("boardTitle",a.target.value)})]})]}),Y?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:Y.title||Y.kind}),n.jsx("span",{children:Tu})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Template Role"}),n.jsxs("select",{value:On,onChange:a=>mi(a.target.value),children:[n.jsx("option",{value:"",children:"Unassigned"}),Hs.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:((Fi=Y.metadata)==null?void 0:Fi[z.templateNodeId])??"",onChange:a=>Lt(z.templateNodeId,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Compile Target"}),n.jsxs("select",{value:((zi=Y.metadata)==null?void 0:zi[z.compileTarget])??"",onChange:a=>Lt(z.compileTarget,a.target.value),children:[n.jsx("option",{value:"",children:"Auto"}),mm.map(a=>n.jsx("option",{value:a,children:a},a))]})]}),Ru?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:((Ui=Y.metadata)==null?void 0:Ui[z.inputKey])??"",onChange:a=>Lt(z.inputKey,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Input Type"}),n.jsxs("select",{value:((Wi=Y.metadata)==null?void 0:Wi[z.inputType])??"text",onChange:a=>Lt(z.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:(((Hi=Y.metadata)==null?void 0:Hi[z.inputRequired])??"").toLowerCase()==="true",onChange:a=>Lt(z.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:((Vi=Y.metadata)==null?void 0:Vi[z.inputPlaceholder])??"",onChange:a=>Lt(z.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:((Ki=Y.metadata)==null?void 0:Ki[z.inputDefaultValue])??"",onChange:a=>Lt(z.inputDefaultValue,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Description"}),n.jsx("textarea",{value:((Yi=Y.metadata)==null?void 0:Yi[z.inputDescription])??"",onChange:a=>Lt(z.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:((Gi=Y.metadata)==null?void 0:Gi[z.inputOptions])??"",onChange:a=>Lt(z.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"}),ko&&n.jsx("small",{children:ko})]}),pe!=null&&pe.issues.length?n.jsx("div",{className:"template-studio-panel__issues","data-testid":"template-studio-issues",children:pe.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,pe?n.jsx("pre",{className:"template-studio-panel__manifest","data-testid":"template-studio-manifest",children:pe.manifestJson}):n.jsx("p",{className:"template-studio-panel__hint",children:"Compile to preview the JSON manifest for the selected Studio nodes."})]})]})]})]}),Cs&&Eo&&n.jsx(ll,{launchers:[vi],activeLauncher:vi,template:Eo,selectedOptionId:null,values:Mt,validationMessage:Ea??ji,canCreate:!ji,onLauncherSelected:()=>{},onOptionSelected:()=>{},onInputChanged:$c,onCreate:Fc,onClose:Oc}),n.jsx("input",{ref:Nn,type:"file",accept:"application/json,.json",multiple:!0,hidden:!0,"data-testid":"board-import-input",onChange:a=>{hc(a.currentTarget.files),a.currentTarget.value=""}}),!$s&&n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"canvas-toolbar",role:"toolbar","aria-label":Bu?"MindCanvas all tools":"MindCanvas curated tools","data-testid":"canvas-function-toolbar","data-function-toolbar-mode":aa,children:aa==="curated"?n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",title:"Add note","data-testid":"note-node-add",onClick:()=>Ce("note"),children:n.jsx(ss,{size:17})}),n.jsx("button",{type:"button",title:"Add image","data-testid":"image-node-add",onClick:()=>Ce("image"),children:n.jsx(sn,{size:17})}),n.jsx("button",{type:"button",title:"Add video","data-testid":"video-node-add",onClick:()=>Ce("video"),children:n.jsx(rn,{size:17})}),n.jsx("button",{type:"button",title:"Add remote monitor","data-testid":"remote-monitor-node-add",onClick:()=>Ce("remote-monitor"),children:n.jsx(os,{size:17})}),n.jsx("button",{type:"button",title:"Add AI Task","data-testid":"ai-task-node-add",onClick:()=>Ce("ai-task"),children:n.jsx(nn,{size:17})}),n.jsx("button",{type:"button",title:"Add file reference","data-testid":"file-node-add",onClick:()=>Ce("file"),children:n.jsx(yr,{size:17})}),n.jsx("button",{type:"button",title:"Tools",onClick:()=>e("/tools"),children:n.jsx(Jo,{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":ot.total,"data-ai-task-runnable":ot.runnable,"data-ai-task-running":ot.running,onClick:Ci,children:n.jsx(Jt,{size:17})}),n.jsx("button",{type:"button",title:"Run selected graph","data-testid":"automation-run-selected","data-selected-graph-size":Po.size,"data-selected-graph-runnable":Po.runnable,disabled:!Y||Y.kind!=="ai-task",onClick:yi,children:n.jsx(Gs,{size:17})}),n.jsx("button",{type:"button",title:"Pause running AI tasks","data-testid":"automation-pause","data-running-ai-tasks":ot.running,onClick:ki,children:n.jsx(ro,{size:17})}),n.jsx("button",{type:"button",title:"Stop active AI tasks","data-testid":"automation-stop","data-active-ai-tasks":ot.active,"data-paused-ai-tasks":ot.paused,onClick:Si,children:n.jsx(Sl,{size:15})}),n.jsx("button",{type:"button",title:"Generate flow",disabled:!Y,onClick:wi,children:n.jsx(Uo,{size:17})}),n.jsx("span",{className:"toolbar-separator"}),n.jsx("button",{type:"button",title:"Undo","data-testid":"history-undo",disabled:d.length===0,onClick:Ro,children:n.jsx(wl,{size:17})}),n.jsx("button",{type:"button",title:"Redo","data-testid":"history-redo",disabled:m.length===0,onClick:Lo,children:n.jsx(vl,{size:17})})]}):n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",title:"Add note","data-testid":"note-node-add",onClick:()=>Ce("note"),children:n.jsx(ss,{size:17})}),n.jsx("button",{type:"button",title:"Add memo","data-testid":"memo-node-add",onClick:()=>Ce("memo"),children:n.jsx(xd,{size:17})}),n.jsx("button",{type:"button",title:"Add markdown","data-testid":"markdown-node-add",onClick:()=>Ce("markdown"),children:n.jsx(ht,{size:17})}),n.jsx("button",{type:"button",title:"Add CSV table","data-testid":"csv-table-node-add",onClick:()=>Ce("csv-table"),children:n.jsx(yl,{size:17})}),n.jsx("button",{type:"button",title:"Add code","data-testid":"code-node-add",onClick:()=>Ce("code"),children:n.jsx(on,{size:17})}),n.jsx("button",{type:"button",title:"Add AI Task","data-testid":"ai-task-node-add",onClick:()=>Ce("ai-task"),children:n.jsx(nn,{size:17})}),n.jsx("button",{type:"button",title:"Add Code Note","data-testid":"code-note-node-add",onClick:Wc,children:n.jsx(on,{size:17})}),n.jsx("button",{type:"button",title:"Add Agent Command","data-testid":"agent-command-node-add",onClick:Uc,children:n.jsx(Wm,{size:17})}),n.jsx("button",{type:"button",title:"Add image generation spec","data-testid":"image-generate-node-add",onClick:()=>Ce("ai-task","image-generate"),children:n.jsx(sn,{size:17})}),n.jsx("button",{type:"button",title:"Add video generation spec","data-testid":"video-generate-node-add",onClick:()=>Ce("ai-task","video-generate"),children:n.jsx(rn,{size:17})}),n.jsx("button",{type:"button",title:"Add image","data-testid":"image-node-add",onClick:()=>Ce("image"),children:n.jsx(sn,{size:17})}),n.jsx("button",{type:"button",title:"Add image mask","data-testid":"mask-node-add",onClick:()=>Ce("mask"),children:n.jsx(Hm,{size:17})}),n.jsx("button",{type:"button",title:"Add video","data-testid":"video-node-add",onClick:()=>Ce("video"),children:n.jsx(rn,{size:17})}),n.jsx("button",{type:"button",title:"Add embed","data-testid":"embed-node-add",onClick:()=>Ce("embed"),children:n.jsx(ln,{size:17})}),n.jsx("button",{type:"button",title:"Add remote monitor","data-testid":"remote-monitor-node-add",onClick:()=>Ce("remote-monitor"),children:n.jsx(os,{size:17})}),n.jsx("button",{type:"button",title:"Add PDF","data-testid":"pdf-node-add",onClick:()=>Ce("pdf"),children:n.jsx(ht,{size:17})}),n.jsx("button",{type:"button",title:"Add file reference","data-testid":"file-node-add",onClick:()=>Ce("file"),children:n.jsx(yr,{size:17})}),n.jsx("button",{type:"button",title:"Add directory reference","data-testid":"directory-node-add",onClick:()=>Ce("directory"),children:n.jsx(Ys,{size:17})}),n.jsx("button",{type:"button",title:"Templates","data-testid":"template-launcher-open",onClick:Nc,children:n.jsx(Fo,{size:17})}),n.jsx("button",{type:"button",title:"Template Studio",className:Ra||Aa?"is-active":"","data-testid":"template-studio-open",onClick:Rc,children:n.jsx(Cl,{size:17})}),n.jsx("button",{type:"button",title:"Import board JSON","data-testid":"board-import-open",onClick:gc,children:n.jsx(Vm,{size:17})}),n.jsx("button",{type:"button",title:"Tools",onClick:()=>e("/tools"),children:n.jsx(Jo,{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":ot.total,"data-ai-task-runnable":ot.runnable,"data-ai-task-running":ot.running,onClick:Ci,children:n.jsx(Jt,{size:17})}),n.jsx("button",{type:"button",title:"Run selected graph","data-testid":"automation-run-selected","data-selected-graph-size":Po.size,"data-selected-graph-runnable":Po.runnable,disabled:!Y||Y.kind!=="ai-task",onClick:yi,children:n.jsx(Gs,{size:17})}),n.jsx("button",{type:"button",title:"Pause running AI tasks","data-testid":"automation-pause","data-running-ai-tasks":ot.running,onClick:ki,children:n.jsx(ro,{size:17})}),n.jsx("button",{type:"button",title:"Stop active AI tasks","data-testid":"automation-stop","data-active-ai-tasks":ot.active,"data-paused-ai-tasks":ot.paused,onClick:Si,children:n.jsx(Sl,{size:15})}),n.jsx("button",{type:"button",title:"Generate flow",disabled:!Y,onClick:wi,children:n.jsx(Uo,{size:17})}),n.jsx("span",{className:"toolbar-separator"}),n.jsx("button",{type:"button",title:"Undo","data-testid":"history-undo",disabled:d.length===0,onClick:Ro,children:n.jsx(wl,{size:17})}),n.jsx("button",{type:"button",title:"Redo","data-testid":"history-redo",disabled:m.length===0,onClick:Lo,children:n.jsx(vl,{size:17})})]})}),n.jsxs("div",{className:"search-panel floating-panel","data-testid":"mindcanvas-search-panel","data-search-engine":xe,"data-search-worker-state":he,children:[n.jsxs("div",{className:"search-input-row",children:[n.jsx(Km,{size:16}),n.jsx("input",{ref:Ba,"data-testid":"mindcanvas-search-input","aria-label":"Search text",value:j,onChange:a=>P(a.target.value),onKeyDown:Iu,placeholder:"Search text ..."}),n.jsx("span",{className:"search-count","data-testid":"mindcanvas-search-count","aria-live":"polite",children:Du}),n.jsx("button",{type:"button",title:"Previous search result","data-testid":"mindcanvas-search-prev",disabled:B.length===0,onClick:()=>Bn(-1),children:n.jsx(Ym,{size:14})}),n.jsx("button",{type:"button",title:"Next search result","data-testid":"mindcanvas-search-next",disabled:B.length===0,onClick:()=>Bn(1),children:n.jsx(Kn,{size:14})})]}),Ri&&n.jsx("div",{className:"search-current","data-testid":"mindcanvas-search-current","aria-live":"polite",children:Li?n.jsxs(n.Fragment,{children:[n.jsxs("span",{children:[ne+1," / ",B.length]}),n.jsxs("button",{type:"button","data-testid":"mindcanvas-search-focus",onClick:()=>Ds("current-button"),children:["Focus ",Li.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===ne?"is-active":"","aria-current":s===ne?"true":void 0,onMouseEnter:()=>ge(s),onClick:()=>_s(a,"result-click"),children:[n.jsx("strong",{children:a.title}),n.jsx("span",{children:a.body.slice(0,84)})]},a.id))})]})]}),me&&n.jsxs("div",{className:"connection-toast floating-panel",children:[n.jsx(Ks,{size:14}),"Select a compatible node pin to create a ",me.kind," line.",n.jsx("button",{type:"button",onClick:()=>X(null),children:"Cancel"})]}),(Kt==null?void 0:Kt.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:[Kt.title," Result"]}),n.jsx("button",{type:"button",title:"Close",onClick:()=>Q(null),children:n.jsx(gt,{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 ku(Kt),children:[n.jsx(ao,{size:14}),n.jsx("span",{children:"Copy"})]}),n.jsxs("button",{type:"button",title:"Archive result as a Markdown node",onClick:()=>Su(Kt),children:[n.jsx(ht,{size:14}),n.jsx("span",{children:"Archive"})]}),n.jsxs("button",{type:"button",title:"Stage a follow-up AI Task from this result",onClick:()=>wu(Kt),children:[n.jsx(nn,{size:14}),n.jsx("span",{children:"Follow-up"})]})]}),n.jsx("pre",{className:"result-popover__body",children:Kt.result})]}),lt&&n.jsx(Ih,{url:lt.url,fileName:lt.fileName,onClose:()=>{U(null),f.emit("node.pdf.preview.close")}}),Ni&&n.jsx(pm,{node:Ni,onSave:Jc,onClose:qc}),qe&&n.jsx(gm,{settings:o.settings,onPatchSettings:Ie,onClose:vc}),Ii&&n.jsx(jh,{board:o,rootNode:Ii,onClose:cu,onStatus:fi,onRemove:bi,onSubmitFollowUp:mu,onApproval:uu,onAddArtifact:pu}),ta&&n.jsx(hm,{board:o,selectedNode:Y??null,selectedCount:c.length,input:v,viewport:oe,viewportSize:ye,localBridgeState:we,syncStatus:Ot,syncMessage:wa,buildPrompt:Eu,navigate:e,onClose:jc}),!$s&&n.jsxs("div",{className:"global-input-shell","data-active-submits":V,"data-submit-state":V>0?"active":"idle",children:[n.jsx("textarea",{ref:In,"data-testid":"global-input-textarea",value:v,placeholder:(Y==null?void 0:Y.kind)==="ai-task"?"Run selected AI Task...":"Talk with AI...",onChange:a=>R(a.target.value),onKeyDown:a=>{a.repeat||a.nativeEvent.isComposing||a.keyCode===229||(a.ctrlKey||a.metaKey)&&a.key==="Enter"&&(a.preventDefault(),xi())}}),n.jsxs("div",{className:"input-controls",children:[n.jsx("button",{className:`input-settings-button ${qe?"is-active":""}`,type:"button",title:"AI Settings","aria-label":"AI Settings","aria-pressed":qe?"true":void 0,"data-testid":"ai-settings-open",onClick:wc,children:n.jsx(Jo,{size:16})}),["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:()=>ii("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:Ln?`${fr(Ln.provider)}: ${Ln.id}`:vs,children:[n.jsx("span",{className:"input-select-provider",children:Ln?fr(Ln.provider):"Custom"}),n.jsx("select",{"aria-label":"Text model","data-testid":"text-model-select",value:vs,onChange:a=>Cc(a.target.value),children:xc.map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Kn,{size:15})]}),n.jsxs("button",{className:"select-button",type:"button",title:"Effort",onClick:()=>ii("effort",o.settings.effort==="Normal"?"Deep":"Normal"),children:[o.settings.effort,n.jsx(Kn,{size:15})]})]}),Yt&&Et&&n.jsxs(n.Fragment,{children:[n.jsxs("label",{className:"input-select-wrap input-select-wrap--model",title:`${Et.model.provider}: ${Et.model.id}`,children:[n.jsx("span",{className:"input-select-provider",children:Et.model.provider}),n.jsx("select",{"aria-label":`${Yt} model`,value:Et.model.id,onChange:a=>kc(Yt,a.target.value),children:rl(Yt).map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Kn,{size:15})]}),n.jsxs("label",{className:"input-select-wrap input-select-wrap--aspect",title:Et.aspect.note,children:[n.jsx("span",{className:`aspect-select__swatch ${fm(Et.aspect.id)}`}),n.jsx("select",{"aria-label":`${Yt} aspect ratio`,value:Et.aspect.id,onChange:a=>Sc(Yt,a.target.value),children:Et.aspectOptions.map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Kn,{size:15})]})]}),n.jsx("span",{className:"global-submit-count","aria-live":"polite",children:V}),n.jsx("button",{className:"send-button",type:"button",title:"Submit","data-testid":"global-input-submit",disabled:!_u,onClick:xi,children:n.jsx(Gs,{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:[Yd.map(a=>n.jsx("button",{type:"button",title:`Use ${a} grid`,"aria-label":`Use ${a} grid`,"aria-pressed":_o===a,className:_o===a?"is-active":"","data-testid":`canvas-grid-mode-${a}`,onClick:()=>Yc(a),children:a==="dot"?n.jsx(Gm,{size:15}):a==="line"?n.jsx(Xm,{size:15}):a==="particles"?n.jsx(xl,{size:15}):n.jsx(Uo,{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":Ei,className:Ei?"is-active":"","data-testid":"canvas-grid-snap-toggle",onClick:Gc,children:n.jsx(qm,{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:Is,children:n.jsx(Jm,{size:15})}),(()=>{const a=!!Go(Pi[qt]);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?ua(qt):En(qt)},children:n.jsx("span",{"aria-hidden":"true",children:"N"})})})(),ar.map(a=>{const s=!!Go(Pi[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?ua(a):En(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:Kc,children:n.jsx(Zm,{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:()=>Ns("button"),children:n.jsx(Qm,{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:()=>As("button"),children:n.jsx(ep,{size:17})}),n.jsx("button",{type:"button",title:"Reset fixture",onClick:ju,children:n.jsx(tp,{size:17})}),n.jsx("button",{type:"button",title:Ct?"Exit read mode":"Fullscreen","aria-label":Ct?"Exit read mode":"Fullscreen","aria-pressed":Ct,className:Ct?"is-active":"","data-testid":"canvas-read-mode-toggle","data-read-mode":Ct?"true":"false",onClick:()=>{Pn("button")},children:n.jsx(fl,{size:17})})]}),o.settings.minimapEnabled&&st&&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:Pu,children:[st.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:`${st.viewport.x}px`,top:`${st.viewport.y}px`,width:`${st.viewport.width}px`,height:`${st.viewport.height}px`}})]})]}),n.jsxs("div",{className:"canvas-status",children:[o.nodes.length," nodes / ",ga.length," rendered / ",o.edges.length," edges / ",Math.round(oe.scale*100),"%",((Xi=o.source)==null?void 0:Xi.kind)==="localBridge"&&n.jsxs(n.Fragment,{children:[" ","/ LocalBridge",o.source.partialImport?" partial":"",o.source.truncated?` ${o.source.renderedNodeCount}/${o.source.originalNodeCount}`:""]})]})]})}function md(e){switch(e){case"checking":return"Checking";case"connected":return"Connected";case"blocked":return"Access gated";case"unavailable":return"Unavailable";default:return"Idle"}}export{hb as MindCanvas};
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"?Lr:void 0,metadata:i?Hf(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?ai(I.current.settings,l):void 0};D(Z=>({...Z,nodes:[...Z.nodes,S]}),"node.add",{id:S.id,kind:a,automationKind:i==null?void 0:i.kind,...u?{mode:u.mode,model:u.model.id,aspectPresetId:u.aspect.id,requestedSize:u.requestedSize}:{}}),i&&f.emit("automation.mediaNode.add",{id:S.id,kind:i.kind,mode:i.mode,model:(T=S.metadata)==null?void 0:T.MediaModel,aspectPresetId:(E=S.metadata)==null?void 0:E.AspectPresetId,requestedSize:(_=S.metadata)==null?void 0:_.RequestedSize,adapterState:((A=S.metadata)==null?void 0:A.AdapterState)??"adapter-gated",externalActionPolicy:((w=S.metadata)==null?void 0:w.AutomationExternalActionPolicy)??"spec-only-until-review"}),a==="remote-monitor"&&f.emit("remoteMonitor.node.add",{id:S.id,surface:"mindcanvas-node",width:S.width,height:S.height,adapterState:((Y=S.metadata)==null?void 0:Y.AdapterState)??"adapter-gated"}),a==="mask"&&f.emit("node.mask.add",{id:S.id,hasImage:!!S.imageUrl,imageRouterMask:((ae=S.metadata)==null?void 0:ae.ImageRouterMask)??"true",semanticType:((ke=S.metadata)==null?void 0:ke.SemanticType)??"ImageEditMask",adapterState:((Ga=S.metadata)==null?void 0:Ga.AdapterState)??"adapter-gated"}),y([S.id])},[$,D,Me]),q=g.useCallback((a,s)=>{Wa(i=>({...i,nodes:i.nodes.map(l=>l.id===a?{...l,...s}:l)}),"node.patch",{id:a,keys:Object.keys(s)})},[Wa]),Lt=g.useCallback((a,s)=>{const i=G.current[0],l=I.current.nodes.find(u=>u.id===i);l&&(q(i,{metadata:{...l.metadata??{},[a]:a===z.templateNodeId||a===z.inputKey?Zn(s):s}}),at(null),f.emit("templateStudio.node.metadata.patch",{id:i,key:a}))},[q]),mi=g.useCallback(a=>{var h;const s=G.current[0],i=I.current.nodes.find(C=>C.id===s);if(!i)return;const l=((h=i.metadata)==null?void 0:h[z.templateNodeId])||Zn(i.title),u={...i.metadata??{},[z.studioNodeType]:a,[z.templateNodeId]:l,[z.templateRole]:a.replace(/^template\./,""),[z.compileTarget]:il(a,i)};a==="template.input"&&(u[z.inputKey]=u[z.inputKey]||Zn(i.title),u[z.inputType]=u[z.inputType]||"text",u[z.inputRequired]=u[z.inputRequired]||"true"),q(s,{metadata:u}),at(null),f.emit("templateStudio.node.role.assign",{id:s,studioNodeType:a})},[q]),N=g.useCallback(a=>{$e(a),window.setTimeout(()=>{$e(s=>s===a?null:s)},2200)},[]),Vc=g.useCallback((a,s,i)=>{var M;const l=I.current.nodes.find(S=>S.id===a);if(!l)return;const u=gd(l.body),h=um(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(S=>({...S,nodes:[...S.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(S=>S.id);y(C),O(C[0]??null),window.setTimeout(()=>O(S=>S===C[0]?null:S),1200);const k=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(k)},[D,N]),Gc=g.useCallback(a=>{const s=I.current.nodes.find(T=>T.id===a.sourceNodeId),i=Me(window.innerWidth/2,window.innerHeight/2),l=560,u=390,h=H("node"),C=s?s.x+s.width+Go:i.x-l/2,k=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 S={id:h,kind:"remote-control",title:a.deviceName||"Remote Device",body:`Remote device control: ${a.deviceId}`,x:C,y:k,width:l,height:u,tags:["Remote","Control","LocalBridge"],metadata:M};D(T=>({...T,nodes:[...T.nodes,S]}),"remoteControl.node.add",{id:S.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId}),y([S.id]),N(`Remote control node created for ${a.deviceName||a.deviceId}.`),f.emit("remoteControl.node.add",{nodeId:S.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId,connected:a.connected===!0})},[D,Me,N]),ua=g.useCallback(a=>{const s=Yo(se.current)??{...qa};Ie({cameraBookmarks:{...I.current.settings.cameraBookmarks??{},[a]:s}},"camera.bookmark.save"),f.emit("camera.bookmark.save",{slot:a,...s}),N(`Camera slot ${a} saved.`)},[Ie,N]),En=g.useCallback(a=>{var l;const s=Yo((l=I.current.settings.cameraBookmarks)==null?void 0:l[a]),i=s??{...qa};$(i),f.emit("camera.bookmark.goto",{slot:a,saved:!!s,...i}),N(s?`Camera slot ${a}.`:`Camera slot ${a} empty. Home view.`)},[$,N]),Is=g.useCallback(()=>{$({...qa}),f.emit("camera.bookmark.goto",{slot:"home",saved:!1,...qa}),N("Home view.")},[$,N]),pi=g.useCallback(a=>{const s=se.current,i=Ah,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};$(l),f.emit("camera.keyboard.pan",{direction:a,...l})},[$]),gi=g.useCallback(()=>{const a=In.current;return a?(a.focus(),a.select(),f.emit("globalInput.focus",{source:"keyboard"}),!0):!1},[]),Ns=g.useCallback((a="keyboard")=>{const s=!(I.current.settings.wheelMode??!1);Ie({wheelMode:s},`${a}.wheelMode.toggle`),f.emit("canvas.wheelMode.toggle",{source:a,wheelMode:s}),N(s?"Mouse wheel mode.":"Trackpad pan mode.")},[Ie,N]),As=g.useCallback((a="keyboard")=>{const i=(I.current.settings.cursorDirection==="down"?"down":"right")==="down"?"right":"down";Ie({cursorDirection:i},`${a}.cursorDirection.toggle`),f.emit("canvas.cursorDirection.toggle",{source:a,cursorDirection:i}),N(i==="down"?"Cursor direction down.":"Cursor direction right.")},[Ie,N]),No=g.useCallback(async(a,s="api")=>{const i=a===!0;try{if(i){if(document.fullscreenElement)return L(!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 L(l),f.emit("canvas.fullscreen.toggle",{source:s,active:l,fallback:!1}),l}return L(!0),f.emit("canvas.fullscreen.toggle",{source:s,active:!0,fallback:!0}),!0}return document.fullscreenElement&&document.exitFullscreen&&await document.exitFullscreen(),L(!1),f.emit("canvas.fullscreen.toggle",{source:s,active:!1,fallback:!1}),!1}catch(l){return L(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}},[L,N]),Pn=g.useCallback((a="keyboard")=>No(!x.current,a),[No]);g.useEffect(()=>{const a=window,s={getMindCanvasFullscreenState:a.getMindCanvasFullscreenState,setMindCanvasFullscreen:a.setMindCanvasFullscreen,getMindCanvasReadModeState:a.getMindCanvasReadModeState,setMindCanvasReadMode:a.setMindCanvasReadMode,toggleMindCanvasReadMode:a.toggleMindCanvasReadMode},i=()=>x.current,l=h=>No(h,"api"),u=()=>Pn("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")}},[No,Pn]);const Kc=g.useCallback(()=>{const a=I.current.settings.cameraBookmarks??{},s=ar.find(i=>!a[i])??ar[0];ua(s)},[ua]),Yc=g.useCallback(a=>{ir(I.current.settings.gridType)!==a&&Ie({gridType:a},`canvas.gridMode.${a}`)},[Ie]),Xc=g.useCallback(()=>{Ie({gridSnap:!(I.current.settings.gridSnap??!0)},"canvas.gridSnap.toggle")},[Ie]),qc=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}))},[]),Jc=g.useCallback(()=>{It(a=>(a&&f.emit("node.directorySettings.close",{id:a}),null))},[]),Zc=g.useCallback((a,s)=>{const i=I.current.nodes.find(h=>h.id===a);if(!i||i.kind!=="directory")return;const l=un(s.DirectoryPath),u={...i.metadata??{},DirectoryPath:l,Include:s.Include??"",Exclude:s.Exclude??""};q(a,{sourceFilePath:l||Lr,metadata:u}),It(null),f.emit("node.directorySettings.patch",{id:a,keys:["DirectoryPath","Include","Exclude"]}),N("Folder scan settings saved.")},[q,N]),Qc=g.useCallback(async a=>{const s=I.current.nodes.find(u=>u.id===a);if(!s||s.kind!=="directory")return;const i=Hh(s);if(f.emit("node.directory.scan.requested",{id:a,hasBridgePath:!!i,hasHandle:kn.current.has(a)}),i){if(!pt()){te("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 ha();if(Te(u.status??null),te(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=Wn(u.status);if(!h){te("unavailable"),f.emit("node.directory.scan.bridge.failed",{id:a,reason:"missing-token"}),N("LocalBridge read token is unavailable.");return}const C=Xo(i,48);N(`Scanning ${C}...`),f.emit("node.directory.scan.bridge.requested",{id:a,path:i});const k=await Vh(i,s.metadata,h,u.baseUrl),M=new Date().toISOString();q(a,{title:s.title==="Directory"||s.title==="New Folder"?C:s.title,body:Vl(C,k),sourceFilePath:i,metadata:{...s.metadata??{},DirectoryPath:i,DirectoryName:C,DirectoryScanSource:"localbridge",DirectoryFileCount:String(k.fileCount),DirectoryDirCount:String(k.directoryCount),DirectoryLastScanUtc:M,DirectoryScanTruncated:String(k.truncated),DirectoryPreview:JSON.stringify(k.preview.slice(0,cn))}}),f.emit("node.directory.scan.bridge.completed",{id:a,path:i,fileCount:k.fileCount,directoryCount:k.directoryCount,truncated:k.truncated}),f.emit("node.directory.scan.completed",{id:a,source:"localbridge",directoryName:C,fileCount:k.fileCount,directoryCount:k.directoryCount,truncated:k.truncated}),N(`Scanned ${C}: ${k.fileCount} files, ${k.directoryCount} folders.`)}catch(u){const h=u instanceof Error?u.message:String(u);f.emit("node.directory.scan.bridge.failed",{id:a,message:h}),f.emit("node.directory.scan.failed",{id:a,source:"localbridge",message:h}),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=kn.current.get(a);u||(u=await l.showDirectoryPicker(),kn.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 zh(u,s.metadata),S=new Date().toISOString();q(a,{title:s.title==="Directory"||s.title==="New Folder"?u.name:s.title,body:Vl(u.name,M),sourceFilePath:u.name,metadata:{...s.metadata??{},DirectoryName:u.name,DirectoryScanSource:"browser-picker",DirectoryFileCount:String(M.fileCount),DirectoryDirCount:String(M.directoryCount),DirectoryLastScanUtc:S,DirectoryScanTruncated:String(M.truncated),DirectoryPreview:JSON.stringify(M.preview.slice(0,cn))}}),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.")}},[q,N]),hi=g.useCallback(a=>{hn(a.id),Na(Ze(a.name))},[]),Ms=g.useCallback(()=>{hn(null),Na("")},[]),Ts=g.useCallback(a=>{const s=Ze(fn).slice(0,90);a===I.current.id?(ws(s),N("Board renamed.")):Gu(a,s)?(We(mt()),N("Saved board renamed.")):(f.emit("board.rename.failed",{boardId:a,scope:"stored"}),N("Board rename failed.")),hn(null),Na("")},[ws,N,fn]),eu=g.useCallback((a,s)=>{s.key==="Enter"?(s.preventDefault(),Ts(a)):s.key==="Escape"&&(s.preventDefault(),Ms())},[Ms,Ts]),tu=g.useCallback(a=>{const s=I.current.nodes.find(l=>l.id===a);if(!Xn(s))return;const i=s.aiEnabled===!1;q(a,{aiEnabled:i}),f.emit("node.aiReference.toggled",{id:a,enabled:i}),N(i?"AI reference enabled.":"AI reference disabled.")},[q,N]),Ao=g.useCallback(async(a,s,i,l,u)=>{za.current=a;try{const h=await Qn(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]),au=g.useCallback(async a=>{const s=I.current.nodes.find(l=>l.id===a);if(!s)return;const i=tf(s);if(i)try{const l=await af(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){za.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 Ao(ef(s),"node.copy",{id:a},"Node content copied.","Node content copied inside this canvas.")},[Ao,N]),nu=g.useCallback(async(a,s)=>{await Ao(s,"node.embed.copyUrl",{id:a,sourceKind:s.split(":",1)[0]||"relative"},"Embed URL copied.","Embed URL copied inside this canvas.")},[Ao]),ou=g.useCallback(a=>{const s=I.current.nodes.find(l=>l.id===a);if(!Xn(s))return;const i=rr(s);q(a,{height:i}),f.emit("node.fitHeight",{id:a,height:i}),N("Node height fitted to text.")},[q,N]),su=g.useCallback(a=>{const s=I.current.nodes.find(C=>C.id===a);if(!Xn(s))return;const i=Jh(s),l=i?Math.max(120,Math.round(s.originalHeight||rr(s))):Math.max(120,Math.min(s.height,Lh)),u=i?0:Math.round(s.height),h=i;D(C=>({...C,nodes:C.nodes.map(k=>k.id===a?{...k,height:l,isExpanded:h,originalHeight:u}:k)}),"node.expandCollapse",{id:a,expanded:h,height:l,originalHeight:u}),N(h?"Node expanded.":"Node collapsed.")},[D,N]),ru=g.useCallback(a=>{const s=I.current.nodes.find(l=>l.id===a);if(!s||s.kind!=="code")return;const i=s.wordWrap===!1;q(a,{wordWrap:i}),f.emit("node.wordWrap.toggled",{id:a,enabled:i}),N(i?"Word wrap enabled.":"Word wrap disabled.")},[q,N]),iu=g.useCallback((a,s)=>{const i=I.current.nodes.find(h=>h.id===a);if(!Xn(i))return;const l=Yh(s.executionMode),u=Array.from(new Set([...i.tags??[],"Company root",l,s.enableSubAgents?"sub-agents":"single-agent","adapter-gated"]));q(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.`)},[q,N]),lu=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}ut(a),f.emit("companyGraph.open",{id:a,status:((i=s.metadata)==null?void 0:i.CompanyStatus)??"Staged"})},[N]),du=g.useCallback(a=>{const s=I.current.nodes.find(i=>i.id===a);s!=null&&s.companyMode&&(q(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."))},[q,N]),cu=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";q(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}.`)},[q,N]),uu=g.useCallback(()=>{ut(a=>(a&&f.emit("companyGraph.close",{id:a}),null))},[]),fi=g.useCallback((a,s)=>{const i=I.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(q(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.`))},[q,N]),bi=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)??""]);q(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()}}),ut(null),f.emit("companyGraph.remove",{id:a}),N("Company staging removed from this node.")},[q,N]),mu=g.useCallback((a,s)=>{const i=I.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(q(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.`))},[q,N]),pu=g.useCallback((a,s)=>{const i=s.trim();if(!i)return;const l=H("node"),u=H("edge");D(h=>{var M,S;const C=h.nodes.find(T=>T.id===a);if(!C)return h;const k={id:l,kind:"ai-task",title:"Company follow-up task",body:i,x:C.x+C.width+120,y:C.y+52,width:350,height:190,status:"idle",tags:["Company follow-up",((M=C.metadata)==null?void 0:M.CompanyExecutionModeLabel)??"Company"],metadata:{CompanyRootNodeId:C.id,CompanyExecutionMode:((S=C.metadata)==null?void 0:S.CompanyExecutionMode)??"Auto",CompanyTaskStatus:"Staged",CompanyStagedAt:new Date().toISOString()}};return{...h,nodes:[...h.nodes,k],edges:[...h.edges,{id:u,from:C.id,to:l,kind:"context"}]}},"companyGraph.followUp.staged",{rootId:a,taskId:l,chars:i.length}),y([l]),O(l),window.setTimeout(()=>O(h=>h===l?null:h),1400),N("Company follow-up task staged locally.")},[D,N]),gu=g.useCallback((a,s)=>{const i=H("node"),l=H("edge");D(u=>{const h=u.nodes.find(k=>k.id===a);if(!h)return u;const C={id:i,kind:"note",title:`Artifact: ${s.title}`.slice(0,90),body:s.content,x:h.x+h.width+120,y:h.y+290,width:360,height:220,tags:["Company artifact",s.type],metadata:{CompanyRootNodeId:h.id,CompanyArtifactType:s.type,CompanyArtifactSourceNodeId:s.sourceNodeId,CompanyAddedAt:new Date().toISOString()}};return{...u,nodes:[...u.nodes,C],edges:[...u.edges,{id:l,from:h.id,to:i,kind:"result"}]}},"companyGraph.artifact.added",{rootId:a,artifactNodeId:i,artifactType:s.type}),y([i]),O(i),window.setTimeout(()=>O(u=>u===i?null:u),1400),N("Company artifact added to the canvas.")},[D,N]),hu=g.useCallback((a,s="preview")=>{const i=Zh(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:Qh(a)}),f.emit("node.pdf.preview.open",{id:a.id,urlKind:i.startsWith("http")?"url":"path"});return}if(a.kind==="embed"&&!mn(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]),fu=g.useCallback(a=>{const s=G.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}),y(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}),Q(i=>i===a?null:i)},[D]),Rs=g.useCallback(a=>{const s=Array.from(new Set(G.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}),y([]),f.emit("selection.repaired",{reason:"delete-selected",source:a,beforeCount:s.length,afterCount:0,removedCount:s.length}),Q(l=>l&&i.has(l)?null:l),ut(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]),Mo=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(ba),k=h.filter(A=>!ba(A));if(C.length>0&&f.emit("remoteMonitor.node.duplicateIgnored",{action:"duplicate",source:s,skippedCount:C.length,nodeId:(_=C[0])==null?void 0:_.id}),k.length===0){const A=C[0]??l.nodes.find(ba);A&&(y([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(k.map(A=>[A.id,H("node")])),S=k.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:_r(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:H("edge"),from:M.get(A.from),to:M.get(A.to)}));D(A=>({...A,nodes:[...A.nodes,...S],edges:[...A.edges,...T]}),"node.duplicate",{source:s,count:S.length,edgeCount:T.length,sourceIds:i,duplicateIds:S.map(A=>A.id),skippedRemoteMonitorCount:C.length});const E=S.map(A=>A.id);y(E),O(E[0]??null),window.setTimeout(()=>O(A=>A===E[0]?null:A),1e3),N(C.length>0?`Duplicated ${S.length} node${S.length===1?"":"s"}; remote monitor stays single-instance.`:`Duplicated ${S.length} node${S.length===1?"":"s"}.`)},[D,N]),Ls=g.useCallback(a=>{Mo(G.current,a)},[Mo]),_n=g.useCallback((a,s)=>{const i=Array.from(new Set(G.current));if(i.length===0)return;const l=new Set(i),u=I.current.nodes,h=u.filter(S=>l.has(S.id));if(h.length===0)return;const C=u.filter(S=>!l.has(S.id)),k=a==="front"?[...C,...h]:[...h,...C];if(!k.some((S,T)=>{var E;return S.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(S=>({...S,nodes:k}),"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]),Es=g.useCallback(async()=>{const a=new Set(G.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=mf(s,i);la.current=l;try{const u=await Qn(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]),ma=g.useCallback((a,s,i)=>{const l=I.current.nodes.find(ba),u=[],h=[];let C=!!l;for(const w of a.nodes){if(ba(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&&(y([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 k=ns(h);if(!k)return;const M=new Map(h.map(w=>[w.id,H("node")])),S=s.x-k.minX,T=s.y-k.minY,E=h.map(w=>({...w,id:M.get(w.id),x:w.x+S,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:_r(w.imageStack,w.id,M.get(w.id))})),_=a.edges.filter(w=>M.has(w.from)&&M.has(w.to)).map(w=>({...w,id:H("edge"),from:M.get(w.from),to:M.get(w.to)})),A=E.map(w=>w.id);D(w=>({...w,nodes:[...w.nodes,...E],edges:[...w.edges,..._]}),"clipboard.nodes.paste",{source:i,count:E.length,edgeCount:_.length,originX:Math.round(s.x),originY:Math.round(s.y),skippedRemoteMonitorCount:u.length}),y(A),Q(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]),Dn=g.useCallback((a,s,i)=>{const l=a.trim();if(!l)return;const u=Zl(l,s,`${i}-url`),h=u??Ql(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}),y([h.id]),Q(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]),To=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 S=await Rf(M,{x:C,y:s.y},i);h.push(S),C+=S.width+Go}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 k=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)}),y(k),Q(null),O(k[0]??null),window.setTimeout(()=>O(M=>M===k[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||ud(s.target))return;const i=s.clipboardData;if(!i)return;const l=Ha(),u=sd(i.files,i.items);if(u.length>0){s.preventDefault(),To(u,l,"paste");return}const h=da.current>Date.now()?la.current:null;if(h){s.preventDefault(),ma(h,l,"paste"),f.emit("clipboard.nodes.pasteLocalFallback",{count:h.nodes.length});return}const C=Wt.current>Date.now()?za.current:null;if(C){s.preventDefault(),Dn(C,l,"paste"),f.emit("clipboard.text.pasteLocalFallback",{chars:C.length}),Wt.current=0;return}const k=i.getData("text/plain"),M=Jl(k);if(M){s.preventDefault(),ma(M,l,"paste");return}const S=k.trim()?k:ed(i.getData("text/html"));S.trim()&&(s.preventDefault(),Dn(S,l,"paste"))};return document.addEventListener("paste",a),()=>document.removeEventListener("paste",a)},[Ha,To,Dn,ma]);const bu=g.useCallback(a=>{cr(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")},[]),yu=g.useCallback(a=>{if(cr(a.target))return;const s=sd(a.dataTransfer.files,a.dataTransfer.items),i=a.dataTransfer.getData("text/uri-list"),l=a.dataTransfer.getData("text/plain"),u=ed(a.dataTransfer.getData("text/html")),h=Ha(a.clientX,a.clientY);if(s.length>0){a.preventDefault(),To(s,h,"drop");return}const C=(i||l||u).trim(),k=Jl(l);if(k){a.preventDefault(),ma(k,h,"drop");return}C&&(a.preventDefault(),Dn(C,h,"drop"))},[Ha,To,Dn,ma]),xu=g.useCallback(()=>{const a=new Set(G.current),s=new Set(I.current.nodes.filter(i=>a.has(i.id)&&Xn(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:rr(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]),Ps=g.useCallback(a=>{const s=new Set(G.current),i=I.current.nodes.filter(_=>s.has(_.id)).sort((_,A)=>G.current.indexOf(_.id)-G.current.indexOf(A.id));if(i.length<2)return;const l=ns(i);if(!l)return;const u=a==="tidy"?_f(i):i,h=28,C=Math.max(...u.map(_=>_.width)),k=Math.max(...u.map(_=>_.height)),M=u.map((_,A)=>({id:_.id,x:_.x,y:_.y,width:_.width,height:_.height,selectionIndex:A})),S=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:k,gapX:h,gapY:h,sizeMode:"preserve",snapToGrid:S,gridSize:no}:a==="strip"?T={mode:"stripHorizontal",order:"selectionOrder",targetHeight:k,gapX:h,sizeMode:"preserve",snapToGrid:S,gridSize:no}:T={mode:"masonry",order:"spatialReading",anchor:"selectionBoundsTopLeft",maxColumns:12,gapX:24,gapY:24,quantile:.75,sizeMode:"preserve",snapToGrid:S,gridSize:no};const E=$p(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:S}),f.emit("multiSelection.arrange",{mode:a,count:i.length,layoutMode:T.mode,snapToGrid:S,boundsAfter:E.boundsAfter}),N(a==="tidy"?`Tidied ${i.length} selected nodes.`:`Arranged ${i.length} selected nodes as ${a}.`)},[D,N]),Cu=g.useCallback(()=>{const a=Array.from(new Set(G.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"&&to(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(),k=new Set,M=to(u),S=[];for(const w of M)S.push(Yl(w,u,k,C));for(const w of h)for(const Y of to(w))S.push(Yl(Y,w,k,C));if(S.length<2){N("No stackable image variants found."),f.emit("multiSelection.mergeImageStacks.skipped",{reason:"not-enough-variants",selectedCount:a.length});return}const T=S.some(w=>{var Y;return w.variantId===((Y=u.imageStack)==null?void 0:Y.activeVariantId)})?u.imageStack.activeVariantId:S[0].variantId,E=S.find(w=>w.variantId===T)??S[0],_=h.map(w=>w.id),A=new Set(_);D(w=>({...w,nodes:w.nodes.filter(Y=>!A.has(Y.id)).map(Y=>{var ae;return Y.id===u.id?{...Y,kind:"image",imageUrl:E.imageUrl,imageStack:{activeVariantId:T,variants:S,kind:"pile",title:((ae=Y.imageStack)==null?void 0:ae.title)||Y.title,updatedAtUtc:C},metadata:{...Y.metadata??{},ImageStackKind:"pile",ImageStackPrimaryNodeId:u.id,ImageStackVariantCount:String(S.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:S.length-M.length,variantCount:S.length}),y([u.id]),Q(w=>w&&A.has(w)?null:w),ut(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 ${S.length} variants.`)},[D,N]),ku=g.useCallback(a=>{const s=G.current.includes(a)?G.current:[a];Mo(s,"node-action")},[Mo]),Vt=g.useCallback(async(a,s)=>{const i=An.current.isBusy(a);return i&&f.emit("automation.run.queued",{id:a,key:a}),An.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=(Oa.current.get(a)??0)+1;Oa.current.set(a,u);const h=ra.current,C=(s==null?void 0:s.trim())||l.body,k=ti(ei(l));q(a,{status:"running",body:C,...en(l)?{metadata:qn(l,{instruction:C,runState:"running",status:"running",statusLabel:"Running",sourceMode:k?"media-prompt-only":"ai-task"})}:{}}),f.emit("automation.run",{id:a,mode:"single",seq:u,automationKind:k==null?void 0:k.kind});const M=()=>Oa.current.get(a)===u&&ra.current===h,S=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=Gf(C,l);q(a,{status:"done",result:w,...en(l)?{metadata:qn(l,{instruction:C,output:w,runState:"completed",status:k?"prepared":"done",statusLabel:k?"Spec only":"Done",sourceMode:k?"media-prompt-only":"local-draft",error:k?`External ${k.mode.toLowerCase()} generation was not executed.`:"",fallback:!0,partial:!!k,toolsUsed:k?`${k.toolHint}, Deterministic.Fallback, HumanReview.Gate`:"Deterministic.Fallback",toolWarnings:k?`External ${k.mode.toLowerCase()} generator was not invoked; this run prepared a spec only.`:""})}:{}}),Q(a)};if(!pt()){S("hosted-access-gated");return}try{const A=await ha();if(!M()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}if(te(A.state),Te(A.status??null),A.state!=="connected"){ce(A.message||"LocalBridge is unavailable."),S(A.message||"LocalBridge unavailable");return}const w=Wn(A.status);if(!w){S("LocalBridge token unavailable");return}const Y=dd(I.current,l,C);f.emit("localBridge.codex.run",{id:a,boardId:I.current.id});const ae=await mm({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:Jn(I.current.settings.model),reasoningEffort:Uf(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(!ae.success||!ae.finalResponse){const ke=ae.error||"LocalBridge Codex returned no response.";f.emit("localBridge.codex.failed",{id:a,message:ke,status:ae.status}),q(a,{status:"blocked",result:ke,...en(l)?{metadata:qn(l,{instruction:C,output:ke,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:k?"media-prompt-only":"ai-task",error:ke,fallback:!1,partial:!0})}:{}}),Q(a);return}q(a,{status:"done",result:ae.finalResponse,...en(l)?{metadata:qn(l,{instruction:C,output:ae.finalResponse,runState:"completed",status:k?"prepared":"done",statusLabel:k?"Spec only":"Done",sourceMode:k?"media-prompt-only":"ai-generated",error:k?`External ${k.mode.toLowerCase()} generation was not executed.`:"",fallback:!1,partial:!!k,toolsUsed:k?`AI.LLM, ${k.toolHint}, HumanReview.Gate`:"AI.LLM",toolWarnings:k?`External ${k.mode.toLowerCase()} generator was not invoked; this run prepared a spec only.`:""})}:{}}),f.emit("localBridge.codex.completed",{id:a,providerKind:ae.providerKind,threadId:ae.threadId,turnId:ae.turnId}),Q(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}),q(a,{status:"blocked",result:w,...en(l)?{metadata:qn(l,{instruction:C,output:w,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:k?"media-prompt-only":"ai-task",error:w,fallback:!1,partial:!0})}:{}}),Q(a)}})},[q]),yi=g.useCallback(async()=>{const a=G.current[0];if(!a){N("Select an AI Task to run its graph.");return}const s=Br(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 Vt(l.id)},[Vt,N]),Su=g.useCallback(async a=>{if(a.result)try{const s=await Qn(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]),wu=g.useCallback(a=>{if(!a.result)return;const s=Kf(a,{x:a.x+a.width+78,y:a.y}),i={id:H("edge"),from:a.id,to:s.id,kind:"result"};D(l=>l.nodes.some(h=>h.id===a.id&&h.result)?{...l,nodes:[...l.nodes,s],edges:[...l.edges,i]}:l,"aiTask.result.note.create",{sourceNodeId:a.id,createdNodeId:s.id,chars:a.result.length,truncated:a.result.length>Rr}),y([s.id]),Q(null),O(s.id),window.setTimeout(()=>O(l=>l===s.id?null:l),1200),N("AI result archived as a Markdown node.")},[D,N]),vu=g.useCallback(a=>{if(!a.result)return;const s=Yf(a,{x:a.x+a.width+78,y:a.y+Math.min(a.height+44,360)}),i={id:H("edge"),from:a.id,to:s.id,kind:"result"};D(l=>l.nodes.some(h=>h.id===a.id&&h.result)?{...l,nodes:[...l.nodes,s],edges:[...l.edges,i]}:l,"aiTask.result.followUp.create",{sourceNodeId:a.id,createdNodeId:s.id,chars:a.result.length}),y([s.id]),Q(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]),xi=g.useCallback(()=>{var Fn,Yt,qi,Ji,Zi,Qi,el;const a=v.trim(),s=I.current.settings.inputMode,i=[...G.current],l=I.current.nodes.find(ue=>ue.id===i[0]),u=(l==null?void 0:l.kind)==="ai-task"?(a||l.body).trim():a;if(!u)return;const h=u.replace(/\s+/g," ").trim().toLowerCase(),C=window.location.pathname||"/mindcanvas",k=`${C}|${s}|${h}`,M=Date.now(),S=Mn.current;if((S==null?void 0:S.signature)===k&&M-S.at<=$l){f.emit("globalInput.duplicateIgnored",{routePath:C,inputMode:s,chars:u.length,windowMs:$l});return}Mn.current={signature:k,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"&&R(""),F(ue=>ue+1),f.emit("globalInput.submit.started",T);const E=ue=>{F(kt=>Math.max(0,kt-1)),f.emit("globalInput.submit.completed",{...T,status:ue})};if((l==null?void 0:l.kind)==="ai-task"){Vt(l.id,a).then(()=>E("ai-task")).catch(ue=>{f.emit("globalInput.submit.completed",{...T,status:"ai-task-error",message:ue instanceof Error?ue.message:String(ue)}),F(kt=>Math.max(0,kt-1))});return}const _=Me(window.innerWidth/2,window.innerHeight/2),A={x:_.x,y:_.y},w=Zl(u,A,"global-input-url"),Y=w?null:Qr(u),ae=!!(Y&&/^https?:\/\//i.test(Y)&&!mn(Y)),ke=!w&&!ae&&(s==="Image"||s==="Video")?s:null,Ga=w??(ae?Ql(u,A,"global-input-rejected-url"):null)??(ke?If(u,A,I.current.settings,ke):jf(u,A,I.current.settings)),Z={...Ga,x:_.x-Ga.width/2,y:_.y-Ga.height/2},Ka=Z.kind==="ai-task",Ya=w?"globalInput.url.add":ae?"globalInput.rejectedUrl.add":ke?"globalInput.media.add":"globalInput.aiTask.add",Do={id:Z.id,kind:Z.kind,chars:u.length,inputMode:s,...Ka?{model:(Fn=Z.metadata)==null?void 0:Fn.TextModel,provider:(Yt=Z.metadata)==null?void 0:Yt.AiProvider,effort:(qi=Z.metadata)==null?void 0:qi.Effort}:{},...ke?{mediaMode:ke,mediaModel:(Ji=Z.metadata)==null?void 0:Ji.MediaModel,aspectPresetId:(Zi=Z.metadata)==null?void 0:Zi.AspectPresetId,requestedSize:(Qi=Z.metadata)==null?void 0:Qi.RequestedSize}:{}};if(Ka){const ue=I.current,kt={...ue,nodes:ue.nodes.some(Fs=>Fs.id===Z.id)?ue.nodes:[...ue.nodes,Z],updatedAt:new Date().toISOString()};p(Fs=>fa(Fs,ue,{description:Ya,mergeKey:null})),b([]),I.current=kt,f.emit(Ya,Do),r(kt)}else D(ue=>({...ue,nodes:ue.nodes.some(kt=>kt.id===Z.id)?ue.nodes:[...ue.nodes,Z]}),Ya,Do);if(R(""),y([Z.id]),Q(null),O(Z.id),window.setTimeout(()=>O(ue=>ue===Z.id?null:ue),1200),Ka){f.emit("globalInput.aiTask.runRequested",{id:Z.id,chars:u.length,model:(el=Z.metadata)==null?void 0:el.TextModel}),N("AI task created from input and running."),Vt(Z.id,u).then(()=>E("ai-task-created")).catch(ue=>{f.emit("globalInput.submit.completed",{...T,status:"ai-task-created-error",message:ue instanceof Error?ue.message:String(ue)}),F(kt=>Math.max(0,kt-1))});return}N(`Added ${Z.kind==="file"?"URL reference":Z.kind} node from input.`),E(w?"url-node":ae?"rejected-url-node":ke?"media-node":"text-node")},[D,v,Vt,Me,N]),Ci=g.useCallback(async()=>{const a=qf(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 Vt(h.id)},[Vt,N]),ki=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]),Si=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}),Q(null),N(`Stopped ${a.length} active task${a.length===1?"":"s"}.`)},[D,N]),wi=g.useCallback(()=>{const a=I.current.nodes.find(C=>C.id===G.current[0]);if(!a)return;const s=a.x+a.width+80,i=a.y,l={id:H("node"),kind:"ai-task",title:"Research demand",body:`Find buyer pain and proof for: ${a.title}`,x:s,y:i,width:330,height:188,status:"idle",tags:["AI Task","Research"]},u={...l,id:H("node"),title:"Write offer",body:"Turn the research into a one-sentence USD offer and a first landing-page promise.",x:s+390,tags:["AI Task","Offer"]},h=[{id:H("edge"),from:a.id,to:l.id,kind:"context"},{id:H("edge"),from:l.id,to:u.id,kind:"result"}];D(C=>({...C,nodes:[...C.nodes,l,u],edges:[...C.edges,...h]}),"node.add",{reason:"generate-flow",count:2}),y([l.id,u.id])},[D]),ju=g.useCallback((a,s)=>{if(me&&me.from!==a){const i={id:H("edge"),from:me.from,to:a,kind:me.kind==="context"?"context":s};D(l=>({...l,edges:[...l.edges,i]}),"edge.add",{...i}),X(null);return}X({from:a,kind:s})},[D,me]),Ro=g.useCallback(()=>{p(a=>{const s=a.at(-1);if(!s)return a;const i=s.board,l=G.current,u=cd(l,i);return b(h=>dg(h,I.current,{description:s.description})),r(i),y(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)})},[]),Lo=g.useCallback(()=>{b(a=>{const s=a[0];if(!s)return a;const i=s.board,l=G.current,u=cd(l,i);return p(h=>fa(h,I.current,{description:s.description})),r(i),y(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,S;if(!s.defaultPrevented&&s.ctrlKey&&!s.shiftKey&&!s.altKey&&!s.metaKey&&s.key.toLowerCase()==="t"&&!s.repeat){s.preventDefault(),le("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-function-toolbar"});return}if(s.defaultPrevented||ud(s.target))return;const i=s.key.toLowerCase(),l=s.ctrlKey||s.metaKey,u=!l&&!s.altKey&&!s.shiftKey,h=Qf(s.target);if(s.key==="Tab"&&u&&!s.repeat&&!h){s.preventDefault(),Ns("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-wheel-mode",wheelMode:!(I.current.settings.wheelMode??!1)});return}if(s.key==="Enter"&&u&&!s.repeat&&!h&&gi()){s.preventDefault(),f.emit("keyboard.shortcut",{action:"focus-global-input"});return}if(i==="f"&&u&&!s.repeat&&!h){s.preventDefault(),Pn("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-fullscreen"});return}if(i==="d"&&u&&!s.repeat){s.preventDefault(),As("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-cursor-direction"});return}if(i==="h"&&u&&!s.repeat){s.preventDefault(),Is(),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(),pi(C),f.emit("keyboard.shortcut",{action:"camera-pan",direction:C});return}if(i===qt&&!s.altKey&&!s.shiftKey){s.preventDefault(),l?(ua(qt),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:qt})):(En(qt),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:qt}));return}if(/^[0-9]$/.test(s.key)&&!s.altKey){if(l&&!s.shiftKey){s.preventDefault(),ua(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:s.key});return}if(!l&&!s.shiftKey){s.preventDefault(),En(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:s.key});return}}if(l&&i==="z"&&!s.shiftKey){s.preventDefault(),Ro(),f.emit("keyboard.shortcut",{action:"undo"});return}if(l&&i==="y"||l&&s.shiftKey&&i==="z"){s.preventDefault(),Lo(),f.emit("keyboard.shortcut",{action:"redo"});return}if(l&&i==="f"&&!s.altKey){s.preventDefault(),(M=Ba.current)==null||M.focus(),(S=Ba.current)==null||S.select(),f.emit("keyboard.shortcut",{action:"focus-search"});return}if(l&&i==="c"&&G.current.length>0){s.preventDefault(),Es(),f.emit("keyboard.shortcut",{action:"copy",count:G.current.length});return}if(l&&i==="v"&&la.current&&da.current>Date.now()){const T=la.current;s.preventDefault(),ma(T,Ha(),"paste"),f.emit("keyboard.shortcut",{action:"paste-local",count:T.nodes.length});return}if(l&&i==="d"){s.preventDefault(),Ls("keyboard"),f.emit("keyboard.shortcut",{action:"duplicate",count:G.current.length});return}if(l&&s.key==="]"){s.preventDefault(),_n("front","keyboard"),f.emit("keyboard.shortcut",{action:"bring-front",count:G.current.length});return}if(l&&s.key==="["){s.preventDefault(),_n("back","keyboard"),f.emit("keyboard.shortcut",{action:"send-back",count:G.current.length});return}if(s.key==="Delete"||s.key==="Backspace"){if(G.current.length===0)return;s.preventDefault(),Rs("keyboard"),f.emit("keyboard.shortcut",{action:"delete",count:G.current.length});return}if(s.key!=="Escape")return;let k=!1;ta&&(ie(!1),k=!0),qe&&(xn(!1),k=!0),Sn&&(Nt(!1),k=!0),St&&(Fe("keyboard"),k=!0),lt&&(U(null),k=!0),et&&(ut(null),k=!0),jt&&(It(null),k=!0),me&&(X(null),k=!0),re&&(Q(null),k=!0),j.trim()&&(P(""),J([]),ge(0),k=!0),G.current.length>0&&(y([]),k=!0),k&&(s.preventDefault(),f.emit("keyboard.shortcut",{action:"escape"}))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[et,Fe,me,Es,Rs,jt,Ls,gi,Ha,En,Is,St,pi,ma,lt,ta,j,Lo,_n,re,ua,qe,Sn,As,le,Pn,Ns,Ro]);const Iu=g.useCallback(()=>{Ku(),D(()=>({...al,updatedAt:new Date().toISOString()}),"board.restore",{source:"fixture-reset"}),y(["node-agent-command"]),We([]),Fe("fixture-reset")},[Fe,D]),_s=g.useCallback((a,s="result-click")=>{const i=Kl(a),l={...se.current,x:window.innerWidth/2-i.x*se.current.scale,y:window.innerHeight/2-i.y*se.current.scale};$(l),y([a.id]),O(a.id),f.emit("search.focused",{query:j.trim(),nodeId:a.id,source:s}),window.setTimeout(()=>O(null),900)},[$,j]);g.useEffect(()=>{const a=++$a.current,s=Jf(se.current,ye);f.emit("search.started",{query:j,engine:Ht.current?"worker":"local",viewportCenterX:Number(s.centerX.toFixed(2)),viewportCenterY:Number(s.centerY.toFixed(2))});const i=window.setTimeout(()=>{if(a!==$a.current){f.emit("async.staleIgnored",{path:"search",seq:a});return}if(!j.trim()){J([]),ge(0),je("none"),f.emit("search.completed",{query:j,count:0,engine:"none"});return}const u=ia.current;if(u&&Ht.current){u.postMessage({type:"SEARCH_QUERY",boardId:I.current.id,seq:a,query:j,limit:8,viewport:s});return}const h=performance.now(),C=Zf(I.current.nodes,j,s,8);J(C),ge(0),je("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,ye,he]);const Bn=g.useCallback(a=>{ge(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]),Ds=g.useCallback(a=>{const s=B[ne];s&&_s(s,a)},[_s,ne,B]),Nu=g.useCallback(a=>{if(a.key==="ArrowDown"){a.preventDefault(),Bn(1);return}if(a.key==="ArrowUp"){a.preventDefault(),Bn(-1);return}if(a.key==="Enter"){a.preventDefault(),Ds("keyboard-enter");return}a.key==="Escape"&&(P(""),J([]),ge(0),f.emit("search.cleared"))},[Ds,Bn]),Au=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;p(T=>fa(T,I.current,{description:"Move nodes",mergeKey:null})),b([]);const u=G.current.includes(a)?G.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},k=I.current.settings.gridSnap??!0,M=T=>{const E=(T.clientX-i.x)/se.current.scale,_=(T.clientY-i.y)/se.current.scale,A=k?ql(C.x+E)-C.x:E,w=k?ql(C.y+_)-C.y:_;r(Y=>({...Y,nodes:Y.nodes.map(ae=>{const ke=h.get(ae.id);return ke?{...ae,x:ke.x+A,y:ke.y+w}:ae}),updatedAt:new Date().toISOString()}))},S=()=>{window.removeEventListener("pointermove",M),window.removeEventListener("pointerup",S),f.emit("node.patch",{id:a,reason:"drag",gridSnap:k})};window.addEventListener("pointermove",M),window.addEventListener("pointerup",S,{once:!0})},[]),Mu=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=nf(i);let h={width:i.width,height:i.height};p(E=>fa(E,I.current,{description:"Resize node",mergeKey:null})),b([]),y(E=>E.includes(a)?E:[a]),Q(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",S),window.removeEventListener("pointercancel",T)},k=E=>{const _=(E.clientX-l.x)/se.current.scale,A=(E.clientY-l.y)/se.current.scale;let w=i.width+_,Y=i.height+A;if(E.shiftKey&&i.width>0&&i.height>0){const ae=Math.max(w/i.width,Y/i.height);w=i.width*ae,Y=i.height*ae}h={width:Math.round(de(w,u.minWidth,u.maxWidth)),height:Math.round(de(Y,u.minHeight,u.maxHeight))},r(ae=>({...ae,nodes:ae.nodes.map(ke=>ke.id===a?{...ke,...h}:ke),updatedAt:new Date().toISOString()}))},M=E=>{k(E)},S=E=>{k(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",S,{once:!0}),window.addEventListener("pointercancel",T,{once:!0})},[]),Tu=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){Q(null),it({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",k),window.removeEventListener("pointercancel",M)},C=S=>{it({startX:s.x,startY:s.y,currentX:S.clientX,currentY:S.clientY})},k=S=>{const T=id({startX:s.x,startY:s.y,currentX:S.clientX,currentY:S.clientY});if(h(),it(null),T.width<Ol&&T.height<Ol){f.emit("selection.box.cancelled",{reason:"too-small",width:Math.round(T.width),height:Math.round(T.height)});return}const E=Of(T,se.current),_=I.current.nodes.filter(A=>rd(A,E)).map(A=>A.id);y(_),f.emit("selection.box.completed",{count:_.length,width:Math.round(T.width),height:Math.round(T.height)})},M=()=>{h(),it(null),f.emit("selection.box.cancelled",{reason:"pointer-cancelled"})};document.body.classList.add("is-selecting"),window.addEventListener("pointermove",C),window.addEventListener("pointerup",k,{once:!0}),window.addEventListener("pointercancel",M,{once:!0});return}y([]),Q(null);const i={...se.current},l=h=>{$({...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})},[$]),Bs=g.useCallback(a=>{const s=a.target instanceof Element?a.target:null;if(s!=null&&s.closest('[data-disable-mindcanvas-wheel="true"]'))return;const i=s==null?void 0:s.closest("textarea,.result-popover__body,.mindcanvas-text-scrollable-view"),l=a.ctrlKey||a.metaKey;if(i&&!l)return;const u=I.current.settings.wheelMode?l:!l;a.preventDefault();const h=se.current;if(u){const C=Math.exp(-a.deltaY*.0012),k=de(h.scale*C,Zo,Qo),M=Me(a.clientX,a.clientY);$({x:a.clientX-M.x*k,y:a.clientY-M.y*k,scale:k});return}$({...h,x:h.x-a.deltaX,y:h.y-a.deltaY})},[$,Me]);g.useEffect(()=>{const a=jn.current;if(a)return a.addEventListener("wheel",Bs,{passive:!1}),()=>a.removeEventListener("wheel",Bs)},[Bs]);const K=o.nodes.find(a=>a.id===c[0]),Va=g.useMemo(()=>{const a=new Set(c);return o.nodes.filter(s=>a.has(s.id))},[o.nodes,c]),On=((_i=K==null?void 0:K.metadata)==null?void 0:_i[z.studioNodeType])??"",Ru=On?Hs(On):"Unassigned",Lu=On==="template.input",vi=g.useMemo(()=>Wl(ve),[ve]),Eo=pe&&pe.issues.length===0?pe.template:null,ji=g.useMemo(()=>Oo(Eo,Mt),[Mt,Eo]),Eu=g.useMemo(()=>Va.filter(a=>a.kind==="image"&&to(a).length>0).length,[Va]),ot=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]),Po=g.useMemo(()=>{if(!K||K.kind!=="ai-task")return{size:0,runnable:0};const a=Br(o,K.id);return{size:a.length,runnable:a.filter(s=>s.status!=="running").length}},[o,K]),pa=g.useMemo(()=>{if(Va.length<2)return null;const a=ns(Va);if(!a)return null;const s=Math.max(.01,oe.scale),i=a.minX*s+oe.x-10,l=a.minY*s+oe.y-10,u=a.maxX*s+oe.x+10,h=a.maxY*s+oe.y+10,C=(i+u)/2,k=l>112?l-52:h+12;return{left:i,top:l,width:Math.max(0,u-i),height:Math.max(0,h-l),toolbarLeft:de(C,168,Math.max(168,ye.width-168)),toolbarTop:de(k,42,Math.max(42,ye.height-58))}},[Va,ye.height,ye.width,oe]),Gt=re?o.nodes.find(a=>a.id===re):null,Ii=et?o.nodes.find(a=>a.id===et&&!!a.companyMode):null,Ni=jt?o.nodes.find(a=>a.id===jt&&a.kind==="directory"):null,Ai=g.useMemo(()=>new Set([...c,...B.map(a=>a.id),bt,re,et,jt,me==null?void 0:me.from].filter(a=>!!a)),[et,me==null?void 0:me.from,jt,bt,re,B,c]),ga=g.useMemo(()=>{const a=Bf(oe,ye);return o.nodes.filter(s=>Ai.has(s.id)||rd(s,a))},[Ai,o.nodes,ye,oe]),Os=g.useMemo(()=>new Set(ga.map(a=>a.id)),[ga]);g.useEffect(()=>{f.emit("visibility.culled",{visible:ga.length,total:o.nodes.length,scale:Number(oe.scale.toFixed(3))})},[o.nodes.length,oe.scale,ga.length]);const Pu=g.useCallback(()=>{const a=I.current,s=G.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=>G.current.includes(l.id)&&l.kind==="ai-task")??a.nodes.find(l=>l.kind==="ai-task");return i?dd(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:",oo(v||(s==null?void 0:s.body)||"No prompt input.",4e3)].join(`
47
+ `)},[v]),Mi=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]),Ti=g.useMemo(()=>Mi.filter(a=>Os.has(a.from)||Os.has(a.to)),[Mi,Os]),st=g.useMemo(()=>Df(o.nodes,oe,ye),[o.nodes,oe,ye]),_u=g.useCallback(a=>{if(!st)return;const s=a.currentTarget.getBoundingClientRect(),i=de(a.clientX-s.left,0,es),l=de(a.clientY-s.top,0,ts),u=st.bounds.minX+(i-tn)/st.scale,h=st.bounds.minY+(l-tn)/st.scale;$({...se.current,x:ye.width/2-u*se.current.scale,y:ye.height/2-h*se.current.scale}),f.emit("minimap.navigate",{worldX:Math.round(u),worldY:Math.round(h)})},[$,st,ye.height,ye.width]),Kt=o.settings.inputMode==="Image"?"Image":o.settings.inputMode==="Video"?"Video":null,Et=Kt==="Image"?yc:Kt==="Video"?xc:null,Du=v.trim().length>0||(K==null?void 0:K.kind)==="ai-task",Ri=j.trim().length>0,Li=B[ne]??null,Bu=Ri?`${B.length} result${B.length===1?"":"s"}`:`${o.nodes.length} nodes`,$n=rt?id(rt):null,_o=ir(o.settings.gridType),Ei=o.settings.gridSnap??!0,Pi=o.settings.cameraBookmarks??{},$s=St,Ou=aa==="full";return n.jsxs("div",{ref:jn,className:`mindcanvas ${Ct?"mindcanvas--read-mode":""} mindcanvas--function-toolbar-${aa}`,"data-function-toolbar-mode":aa,"data-read-mode":Ct?"true":"false","data-read-mode-api":Cn?"bound":"unbound",onPointerMove:bc,onDragOver:bu,onDrop:yu,children:[n.jsx("div",{ref:Tt,className:`canvas-plane canvas-plane--grid-${_o}`,"data-grid-type":_o,"data-grid-snap":o.settings.gridSnap??!0?"on":"off",onPointerDown:Tu,onContextMenu:a=>a.preventDefault(),children:n.jsxs("div",{ref:Da,className:"canvas-world","data-visible-nodes":ga.length,"data-total-nodes":o.nodes.length,"data-visible-edges":Ti.length,children:[n.jsx("svg",{className:"edge-layer",width:"4000",height:"3000",viewBox:"-1200 -900 4000 3000","aria-hidden":"true",children:Ti.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))}),ga.map(a=>n.jsx(sh,{node:a,selected:c.includes(a.id),pulsing:bt===a.id,connectionDraft:me,onSelect:Uc,onDragStart:Au,onResizeStart:Mu,onPatch:q,onDelete:fu,onDuplicate:ku,onRun:Vt,onPin:ju,onOpenResult:Q,onToggleAiReference:tu,onCopyNode:au,onCopyEmbedReference:nu,onFitNodeHeight:ou,onToggleNodeExpanded:su,onToggleWordWrap:ru,onStageCompany:iu,onOpenCompanyGraph:lu,onSyncCompanyGoal:du,onRefreshCompany:cu,onSetCompanyStatus:fi,onRemoveCompany:bi,onOpenAsset:hu,onOpenDirectorySettings:qc,onScanDirectory:Qc,onCreateRemoteControl:Gc,onGenerateTemplateCard:Vc},a.id))]})}),$n?n.jsx("div",{className:"canvas-selection-box",style:{left:$n.left,top:$n.top,width:$n.width,height:$n.height}}):null,pa?n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"canvas-multi-selection-bounds",style:{left:pa.left,top:pa.top,width:pa.width,height:pa.height}}),n.jsxs("div",{className:"multi-selection-toolbar floating-panel",role:"toolbar","aria-label":"Multi selection actions",style:{left:pa.toolbarLeft,top:pa.toolbarTop},children:[n.jsx("span",{className:"multi-selection-toolbar__count",children:Va.length}),n.jsx("button",{type:"button",title:"Copy selected nodes","data-testid":"multi-selection-copy",onClick:()=>void Es(),children:n.jsx(ao,{size:15})}),n.jsx("button",{type:"button",title:"Duplicate selected nodes",onClick:()=>Ls("multi-toolbar"),children:n.jsx(kd,{size:15})}),n.jsx("button",{type:"button",title:"Bring selected nodes to front","data-testid":"multi-selection-bring-front",onClick:()=>_n("front","multi-toolbar"),children:n.jsx(zm,{size:15})}),n.jsx("button",{type:"button",title:"Send selected nodes to back","data-testid":"multi-selection-send-back",onClick:()=>_n("back","multi-toolbar"),children:n.jsx(Um,{size:15})}),n.jsx("button",{type:"button",title:"Fit selected text heights",onClick:xu,children:n.jsx(bl,{size:15})}),n.jsx("span",{className:"multi-selection-toolbar__separator"}),n.jsx("button",{type:"button",title:"Arrange selected nodes as grid",onClick:()=>Ps("grid"),children:n.jsx(yl,{size:15})}),n.jsx("button",{type:"button",title:"Arrange selected nodes as strip",onClick:()=>Ps("strip"),children:n.jsx(xl,{size:15})}),n.jsx("button",{type:"button",title:"Tidy selected nodes","data-testid":"multi-selection-tidy",onClick:()=>Ps("tidy"),children:n.jsx(Cl,{size:15})}),Eu>=2&&n.jsx("button",{type:"button",title:"Stack selected image nodes","data-testid":"multi-selection-merge-images",onClick:Cu,children:n.jsx(Fo,{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:()=>Rs("multi-toolbar"),children:n.jsx(rs,{size:15})}),n.jsx("button",{type:"button",title:"Clear selection","data-testid":"multi-selection-clear",onClick:()=>{const a=G.current.length;y([]),f.emit("selection.cleared",{source:"multi-toolbar",beforeCount:a})},children:n.jsx(gt,{size:15})})]})]}):null,ct&&n.jsx("div",{className:"node-action-toast floating-panel",role:"status",children:ct}),n.jsxs("div",{className:"top-tabbar",role:"tablist","aria-label":"MindCanvas boards",children:[Pa.map(a=>{const s=a.id===o.id,i=Ze(a.name),l=of(a,o,s);return n.jsxs("div",{className:`tab-shell ${s?"is-active":""} ${vt===a.id?"is-dragging":""} ${yn===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":yn===a.id?"over":"idle",onDragStart:u=>{u.dataTransfer.effectAllowed="move",u.dataTransfer.setData("text/plain",a.id),bn(a.id),f.emit("board.tabs.dragStart",{boardId:a.id})},onDragOver:u=>{!vt||vt===a.id||(u.preventDefault(),u.dataTransfer.dropEffect="move",Ft(a.id))},onDragLeave:()=>{Ft(u=>u===a.id?null:u)},onDrop:u=>{u.preventDefault();const h=vt||u.dataTransfer.getData("text/plain");pc(h,a.id),bn(null),Ft(null)},onDragEnd:()=>{bn(null),Ft(null)},onMouseDown:u=>{u.button===1&&(u.preventDefault(),Ss(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?Rt():ri(a.id),children:[a.sourceKind==="localBridge"?n.jsx(Vn,{size:15}):n.jsx(Fo,{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(),Ss(a.id,"close-button")},children:n.jsx(gt,{size:13})})]},a.id)}),n.jsx("button",{type:"button",className:"tab-button tab-button--plain",title:"New board","data-testid":"board-create",onClick:si,children:n.jsx(eo,{size:16})})]}),St&&n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",className:"local-board-backdrop project-gallery-backdrop","aria-label":"Close project gallery","data-testid":"project-gallery-backdrop","data-project-gallery-backdrop":"true",onClick:()=>Fe("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":De.currentMode,"data-project-storage-selected-tab":ze,"data-project-storage-local-provider":De.localProviderKind,"data-project-storage-cloud-available":De.isCloudAvailable?"true":"false","data-project-storage-can-sync-cloud":De.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(yl,{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:si,children:n.jsx(eo,{size:15})}),n.jsx("button",{type:"button",title:"Close Project Gallery",onClick:()=>Fe("close-button"),children:n.jsx(gt,{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":De.showLocalTab?"true":"false","data-project-storage-show-cloud":De.showCloudTab?"true":"false",children:[n.jsxs("button",{type:"button",role:"tab","aria-selected":ze==="local",className:ze==="local"?"is-active":"","data-testid":"project-storage-tab-local",onClick:()=>ni("local"),children:[n.jsx(Vn,{size:14}),"Local"]}),n.jsxs("button",{type:"button",role:"tab","aria-selected":ze==="cloud",className:ze==="cloud"?"is-active":"","data-testid":"project-storage-tab-cloud",onClick:()=>ni("cloud"),children:[n.jsx(zo,{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=>ws(a.target.value)})]}),n.jsxs("div",{className:"project-gallery-rail-card",children:[n.jsx("span",{children:"Storage"}),n.jsx("strong",{children:ze==="local"?`${Xe.length} local boards`:"Cloud gated"}),n.jsx("small",{children:ze==="local"?`${De.localProviderKind} provider / browser catalog and LocalBridge boards`:De.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:Re||void 0,children:ze==="local"?Re?Xo(Re):pd(we):"Cloud gated"}),n.jsx("small",{children:ze==="local"?Re||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=>ca(a.target.checked)}),n.jsx("span",{children:"Show at startup"})]})]}),n.jsx("section",{className:"project-gallery-board-area",children:ze==="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:[Xe.length," saved"]})]}),n.jsxs("div",{className:"local-board-list local-board-list--stored project-gallery-board-grid","data-project-gallery-board-grid":"true",children:[Xe.map(a=>{const s=gn===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:fn,onChange:l=>Na(l.target.value),onKeyDown:l=>eu(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:()=>Ts(a.id),children:n.jsx(Gs,{size:13})}),n.jsx("button",{type:"button",title:"Cancel rename","data-testid":"stored-board-rename-cancel",onClick:Ms,children:n.jsx(gt,{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:()=>ri(a.id),onDoubleClick:l=>{l.stopPropagation(),hi(a)},children:[a.sourceKind==="localBridge"?n.jsx(Vn,{size:15}):n.jsx(ht,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Ze(a.name)}),n.jsx("small",{children:zf(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:()=>hi(a),children:n.jsx(kl,{size:14})}),n.jsx("button",{type:"button",className:"local-board-row__action",title:"Delete board","data-testid":"stored-board-delete",disabled:i,onClick:()=>Ss(a.id,"project-gallery"),children:n.jsx(rs,{size:14})})]})},a.id)}),Xe.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:Pe,disabled:we==="checking",children:we==="checking"?n.jsx(_t,{size:15,className:"spin-icon"}):n.jsx(an,{size:15})})]}),n.jsxs("div",{className:`local-board-state local-board-state--${we}`,children:[we==="blocked"?n.jsx(yd,{size:15}):we==="unavailable"?n.jsx(Hm,{size:15}):n.jsx(Vn,{size:15}),n.jsx("span",{children:pd(we)}),we==="blocked"&&!Xa()&&n.jsx("button",{type:"button",onClick:oi,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(Ks,{size:16}),n.jsxs("span",{children:[n.jsx("strong",{children:"Local Workspace"}),n.jsx("small",{title:Re||void 0,children:Re||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 rc("workspace-panel"),children:[n.jsx(an,{size:14}),n.jsx("span",{children:"Refresh"})]}),n.jsxs("button",{type:"button","data-testid":"project-gallery-workspace-browse",title:"Select Local Storage",disabled:wt||we==="blocked"&&!Xa(),onClick:()=>void ic(),children:[wt?n.jsx(_t,{size:14,className:"spin-icon"}):n.jsx(Ks,{size:14}),n.jsx("span",{children:"Select Local Storage"})]})]}),Oe.length>0&&n.jsx("div",{className:"project-gallery-workspace-history","data-testid":"project-gallery-workspace-history",children:Oe.map(a=>n.jsx("button",{type:"button",title:a,disabled:wt||a===Re,onClick:()=>void ks(a,"history"),children:Xo(a,40)},a))})]}),n.jsxs("button",{type:"button",className:"local-board-export","data-testid":"localbridge-export",disabled:Ae||!!((Di=o.source)!=null&&Di.partialImport)||!!((Bi=o.source)!=null&&Bi.truncated)||we==="blocked"&&!Xa(),title:(Oi=o.source)!=null&&Oi.partialImport?"Export blocked for partial original imports":($i=o.source)!=null&&$i.truncated?"Export blocked for truncated imported boards":"Export current board to LocalBridge",onClick:()=>void lc(),children:[Ae?n.jsx(_t,{size:15,className:"spin-icon"}):n.jsx(Sl,{size:15}),n.jsx("span",{children:Ae?"Exporting":"Export current"})]}),n.jsx("div",{className:"local-board-list project-gallery-bridge-list",children:Dt.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 gc(a),children:[n.jsx(Vn,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Ze(a.Title)}),n.jsx("small",{children:Er(a.UpdatedAt)})]}),mo===a.Id&&n.jsx(_t,{size:15,className:"spin-icon"})]},a.Id))})]})]}):n.jsxs("div",{className:"project-cloud-shell","data-testid":"project-cloud-shell","data-project-cloud-status":De.isCloudAvailable?"available":"gated","data-project-cloud-plan":De.cloudPlanKey,"data-project-cloud-entitlement":De.cloudEntitlementStatus,"data-production-adapter-state":_e.overallState,"data-project-cloud-database-mode":_e.cloudBoards.mode,"data-project-cloud-database-ready":_e.cloudBoards.canAttempt?"true":"false","data-project-cloud-asset-upload-mode":_e.cloudAssetUpload.mode,"data-project-cloud-asset-upload-ready":_e.cloudAssetUpload.canAttempt?"true":"false","data-client-secret-blocked":_e.forbiddenClientSecretKeys.length>0?"true":"false",children:[n.jsx("div",{className:"project-cloud-shell__icon",children:be?n.jsx(zo,{size:22}):n.jsx(Fr,{size:22})}),n.jsx("strong",{children:be?"Cloud boards are provider-ready":"Cloud projects are adapter-gated"}),n.jsx("p",{children:be?"Supabase auth and board storage are connected for this browser session. Cloud actions call the provider adapter only from this tab.":"The original project popup had a Cloud tab for authenticated boards. This React port keeps that navigation habit visible, but cloud sync is disabled until auth and database adapters are connected."}),n.jsxs("div",{className:"project-cloud-shell__current",children:[n.jsxs("span",{children:["Current: ",be?"Cloud ready":"Local"]}),n.jsxs("small",{children:[Ze(o.name)," / ",pn??De.cloudStatusMessage??"saved in this browser"]})]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-new-board",disabled:!be||xt,title:be?"Create and save a cloud board":"Cloud board creation requires the cloud adapter",onClick:uc,children:[xt?n.jsx(_t,{size:14,className:"spin-icon"}):n.jsx(eo,{size:14}),xt?"Saving":"New cloud board"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-save-current",disabled:!be||xt,title:be?"Save current board to Supabase":"Cloud save requires Supabase login",onClick:cc,children:[n.jsx(Sl,{size:14}),"Save current"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-refresh",disabled:!be||xt,title:be?"Refresh cloud boards":"Cloud refresh requires Supabase login",onClick:()=>void Ua("refresh-button"),children:[xt?n.jsx(_t,{size:14,className:"spin-icon"}):n.jsx(an,{size:14}),"Refresh cloud"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-login-shell",onClick:()=>e("/login"),children:[n.jsx(zo,{size:14}),"Open login shell"]}),be&&n.jsxs("div",{className:"local-board-list project-gallery-cloud-list","data-testid":"project-cloud-board-list",children:[ja.map(a=>n.jsxs("button",{type:"button","data-testid":"project-cloud-board-row","data-board-id":a.id,className:"local-board-row",disabled:!!Ia,onClick:()=>void dc(a),children:[n.jsx(zo,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Ze(a.name)}),n.jsxs("small",{children:[Er(a.updatedAt)," / ",a.nodeCount," nodes"]})]}),Ia===a.id&&n.jsx(_t,{size:15,className:"spin-icon"})]},a.id)),ja.length===0&&n.jsx("p",{className:"local-board-message",children:"No cloud boards loaded."})]})]})})]})]})})})]}),!$s&&n.jsx(Yg,{bridgeState:we,bridgeMessage:Qe,bridgeStatus:bs,syncStatus:Ot,syncMessage:wa,hostedBridgeAccessEnabled:Xa(),onRefreshBridge:Pe,onEnableHostedBridge:oi}),Sn&&ee&&n.jsx(ll,{launchers:na,activeLauncher:ee,template:Ve,selectedOptionId:tt,values:At,validationMessage:wn??(_a?null:vn),canCreate:_a||!vn,primaryLabel:_a?"Add template card":"Create board",onLauncherSelected:Nc,onOptionSelected:Tc,onInputChanged:Rc,onCreate:mc,onClose:Mc}),Aa&&n.jsx("div",{className:"template-studio-chooser-backdrop","data-testid":"template-studio-chooser",onMouseDown:di,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:di,children:n.jsx(gt,{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:Ec,children:[n.jsx("span",{className:"template-studio-chooser__icon",children:n.jsx(eo,{size:17})}),n.jsxs("span",{children:[n.jsx("strong",{children:"New template board"}),n.jsx("small",{children:"Start a blank Studio draft on a new local board."})]})]}),n.jsxs("button",{type:"button","data-testid":"template-studio-convert-current",className:"template-studio-chooser__action",onClick:Pc,children:[n.jsx("span",{className:"template-studio-chooser__icon",children:n.jsx(Uo,{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."})]})]})]})]})}),Ra&&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(Fo,{size:15}),n.jsx("span",{children:"Template Studio"})]}),n.jsxs("div",{className:"template-studio-toolbar__meta",children:["Editing ",ve.templateId]}),n.jsx("button",{type:"button",title:"Compile manifest","data-testid":"template-studio-compile",onClick:js,children:n.jsx(on,{size:15})}),n.jsx("button",{type:"button",title:"Test create board","data-testid":"template-studio-test-create",onClick:Oc,children:n.jsx(Jt,{size:15})}),n.jsx("button",{type:"button",title:"Copy manifest JSON","data-testid":"template-studio-copy",onClick:()=>void Bc(),children:n.jsx(ao,{size:15})}),n.jsx("button",{type:"button",title:"Save template draft","data-testid":"template-studio-save",onClick:_c,children:n.jsx(Gs,{size:15})}),n.jsx("button",{type:"button",title:"Exit Template Studio","data-testid":"template-studio-close",onClick:ui,children:n.jsx(gt,{size:15})})]}),n.jsx("div",{className:"template-studio-toolbar template-studio-toolbar--roles floating-panel",children:Ws.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:()=>Dc(a.studioNodeType),children:n.jsx("span",{children:a.shortLabel})},a.studioNodeType))}),K&&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: ",K.title||K.kind]}),Ws.map(a=>n.jsx("button",{type:"button",title:a.label,className:On===a.studioNodeType?"is-active":"","data-testid":"template-studio-role","data-studio-node-type":a.studioNodeType,onClick:()=>mi(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:ve.templateTitle})]}),n.jsx("button",{type:"button",title:"Close Template Studio",onClick:ui,children:n.jsx(gt,{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:ve.templateId,onChange:a=>Io("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:ve.templateTitle,onChange:a=>Io("templateTitle",a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Category"}),n.jsx("input",{type:"text",value:ve.category,onChange:a=>Io("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:ve.boardTitle,onChange:a=>Io("boardTitle",a.target.value)})]})]}),K?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:K.title||K.kind}),n.jsx("span",{children:Ru})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Template Role"}),n.jsxs("select",{value:On,onChange:a=>mi(a.target.value),children:[n.jsx("option",{value:"",children:"Unassigned"}),Ws.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:((Fi=K.metadata)==null?void 0:Fi[z.templateNodeId])??"",onChange:a=>Lt(z.templateNodeId,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Compile Target"}),n.jsxs("select",{value:((zi=K.metadata)==null?void 0:zi[z.compileTarget])??"",onChange:a=>Lt(z.compileTarget,a.target.value),children:[n.jsx("option",{value:"",children:"Auto"}),pm.map(a=>n.jsx("option",{value:a,children:a},a))]})]}),Lu?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:((Ui=K.metadata)==null?void 0:Ui[z.inputKey])??"",onChange:a=>Lt(z.inputKey,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Input Type"}),n.jsxs("select",{value:((Hi=K.metadata)==null?void 0:Hi[z.inputType])??"text",onChange:a=>Lt(z.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:(((Wi=K.metadata)==null?void 0:Wi[z.inputRequired])??"").toLowerCase()==="true",onChange:a=>Lt(z.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:((Vi=K.metadata)==null?void 0:Vi[z.inputPlaceholder])??"",onChange:a=>Lt(z.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:((Gi=K.metadata)==null?void 0:Gi[z.inputDefaultValue])??"",onChange:a=>Lt(z.inputDefaultValue,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Description"}),n.jsx("textarea",{value:((Ki=K.metadata)==null?void 0:Ki[z.inputDescription])??"",onChange:a=>Lt(z.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:((Yi=K.metadata)==null?void 0:Yi[z.inputOptions])??"",onChange:a=>Lt(z.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"}),ko&&n.jsx("small",{children:ko})]}),pe!=null&&pe.issues.length?n.jsx("div",{className:"template-studio-panel__issues","data-testid":"template-studio-issues",children:pe.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,pe?n.jsx("pre",{className:"template-studio-panel__manifest","data-testid":"template-studio-manifest",children:pe.manifestJson}):n.jsx("p",{className:"template-studio-panel__hint",children:"Compile to preview the JSON manifest for the selected Studio nodes."})]})]})]})]}),Cs&&Eo&&n.jsx(ll,{launchers:[vi],activeLauncher:vi,template:Eo,selectedOptionId:null,values:Mt,validationMessage:Ea??ji,canCreate:!ji,onLauncherSelected:()=>{},onOptionSelected:()=>{},onInputChanged:Fc,onCreate:zc,onClose:$c}),n.jsx("input",{ref:Nn,type:"file",accept:"application/json,.json",multiple:!0,hidden:!0,"data-testid":"board-import-input",onChange:a=>{fc(a.currentTarget.files),a.currentTarget.value=""}}),!$s&&n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"canvas-toolbar",role:"toolbar","aria-label":Ou?"MindCanvas all tools":"MindCanvas curated tools","data-testid":"canvas-function-toolbar","data-function-toolbar-mode":aa,children:aa==="curated"?n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",title:"Add note","data-testid":"note-node-add",onClick:()=>Ce("note"),children:n.jsx(ss,{size:17})}),n.jsx("button",{type:"button",title:"Add image","data-testid":"image-node-add",onClick:()=>Ce("image"),children:n.jsx(sn,{size:17})}),n.jsx("button",{type:"button",title:"Add video","data-testid":"video-node-add",onClick:()=>Ce("video"),children:n.jsx(rn,{size:17})}),n.jsx("button",{type:"button",title:"Add remote monitor","data-testid":"remote-monitor-node-add",onClick:()=>Ce("remote-monitor"),children:n.jsx(os,{size:17})}),n.jsx("button",{type:"button",title:"Add AI Task","data-testid":"ai-task-node-add",onClick:()=>Ce("ai-task"),children:n.jsx(nn,{size:17})}),n.jsx("button",{type:"button",title:"Add file reference","data-testid":"file-node-add",onClick:()=>Ce("file"),children:n.jsx(yr,{size:17})}),n.jsx("button",{type:"button",title:"Tools",onClick:()=>e("/tools"),children:n.jsx(Jo,{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":ot.total,"data-ai-task-runnable":ot.runnable,"data-ai-task-running":ot.running,onClick:Ci,children:n.jsx(Jt,{size:17})}),n.jsx("button",{type:"button",title:"Run selected graph","data-testid":"automation-run-selected","data-selected-graph-size":Po.size,"data-selected-graph-runnable":Po.runnable,disabled:!K||K.kind!=="ai-task",onClick:yi,children:n.jsx(Ys,{size:17})}),n.jsx("button",{type:"button",title:"Pause running AI tasks","data-testid":"automation-pause","data-running-ai-tasks":ot.running,onClick:ki,children:n.jsx(ro,{size:17})}),n.jsx("button",{type:"button",title:"Stop active AI tasks","data-testid":"automation-stop","data-active-ai-tasks":ot.active,"data-paused-ai-tasks":ot.paused,onClick:Si,children:n.jsx(wl,{size:15})}),n.jsx("button",{type:"button",title:"Generate flow",disabled:!K,onClick:wi,children:n.jsx(Uo,{size:17})}),n.jsx("span",{className:"toolbar-separator"}),n.jsx("button",{type:"button",title:"Undo","data-testid":"history-undo",disabled:d.length===0,onClick:Ro,children:n.jsx(vl,{size:17})}),n.jsx("button",{type:"button",title:"Redo","data-testid":"history-redo",disabled:m.length===0,onClick:Lo,children:n.jsx(jl,{size:17})})]}):n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",title:"Add note","data-testid":"note-node-add",onClick:()=>Ce("note"),children:n.jsx(ss,{size:17})}),n.jsx("button",{type:"button",title:"Add memo","data-testid":"memo-node-add",onClick:()=>Ce("memo"),children:n.jsx(Cd,{size:17})}),n.jsx("button",{type:"button",title:"Add markdown","data-testid":"markdown-node-add",onClick:()=>Ce("markdown"),children:n.jsx(ht,{size:17})}),n.jsx("button",{type:"button",title:"Add CSV table","data-testid":"csv-table-node-add",onClick:()=>Ce("csv-table"),children:n.jsx(xl,{size:17})}),n.jsx("button",{type:"button",title:"Add code","data-testid":"code-node-add",onClick:()=>Ce("code"),children:n.jsx(on,{size:17})}),n.jsx("button",{type:"button",title:"Add AI Task","data-testid":"ai-task-node-add",onClick:()=>Ce("ai-task"),children:n.jsx(nn,{size:17})}),n.jsx("button",{type:"button",title:"Add Code Note","data-testid":"code-note-node-add",onClick:Wc,children:n.jsx(on,{size:17})}),n.jsx("button",{type:"button",title:"Add Agent Command","data-testid":"agent-command-node-add",onClick:Hc,children:n.jsx(Wm,{size:17})}),n.jsx("button",{type:"button",title:"Add image generation spec","data-testid":"image-generate-node-add",onClick:()=>Ce("ai-task","image-generate"),children:n.jsx(sn,{size:17})}),n.jsx("button",{type:"button",title:"Add video generation spec","data-testid":"video-generate-node-add",onClick:()=>Ce("ai-task","video-generate"),children:n.jsx(rn,{size:17})}),n.jsx("button",{type:"button",title:"Add image","data-testid":"image-node-add",onClick:()=>Ce("image"),children:n.jsx(sn,{size:17})}),n.jsx("button",{type:"button",title:"Add image mask","data-testid":"mask-node-add",onClick:()=>Ce("mask"),children:n.jsx(Vm,{size:17})}),n.jsx("button",{type:"button",title:"Add video","data-testid":"video-node-add",onClick:()=>Ce("video"),children:n.jsx(rn,{size:17})}),n.jsx("button",{type:"button",title:"Add embed","data-testid":"embed-node-add",onClick:()=>Ce("embed"),children:n.jsx(ln,{size:17})}),n.jsx("button",{type:"button",title:"Add remote monitor","data-testid":"remote-monitor-node-add",onClick:()=>Ce("remote-monitor"),children:n.jsx(os,{size:17})}),n.jsx("button",{type:"button",title:"Add PDF","data-testid":"pdf-node-add",onClick:()=>Ce("pdf"),children:n.jsx(ht,{size:17})}),n.jsx("button",{type:"button",title:"Add file reference","data-testid":"file-node-add",onClick:()=>Ce("file"),children:n.jsx(yr,{size:17})}),n.jsx("button",{type:"button",title:"Add directory reference","data-testid":"directory-node-add",onClick:()=>Ce("directory"),children:n.jsx(Ks,{size:17})}),n.jsx("button",{type:"button",title:"Templates","data-testid":"template-launcher-open",onClick:Ac,children:n.jsx(Fo,{size:17})}),n.jsx("button",{type:"button",title:"Template Studio",className:Ra||Aa?"is-active":"","data-testid":"template-studio-open",onClick:Lc,children:n.jsx(kl,{size:17})}),n.jsx("button",{type:"button",title:"Import board JSON","data-testid":"board-import-open",onClick:hc,children:n.jsx(Gm,{size:17})}),n.jsx("button",{type:"button",title:"Tools",onClick:()=>e("/tools"),children:n.jsx(Jo,{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":ot.total,"data-ai-task-runnable":ot.runnable,"data-ai-task-running":ot.running,onClick:Ci,children:n.jsx(Jt,{size:17})}),n.jsx("button",{type:"button",title:"Run selected graph","data-testid":"automation-run-selected","data-selected-graph-size":Po.size,"data-selected-graph-runnable":Po.runnable,disabled:!K||K.kind!=="ai-task",onClick:yi,children:n.jsx(Ys,{size:17})}),n.jsx("button",{type:"button",title:"Pause running AI tasks","data-testid":"automation-pause","data-running-ai-tasks":ot.running,onClick:ki,children:n.jsx(ro,{size:17})}),n.jsx("button",{type:"button",title:"Stop active AI tasks","data-testid":"automation-stop","data-active-ai-tasks":ot.active,"data-paused-ai-tasks":ot.paused,onClick:Si,children:n.jsx(wl,{size:15})}),n.jsx("button",{type:"button",title:"Generate flow",disabled:!K,onClick:wi,children:n.jsx(Uo,{size:17})}),n.jsx("span",{className:"toolbar-separator"}),n.jsx("button",{type:"button",title:"Undo","data-testid":"history-undo",disabled:d.length===0,onClick:Ro,children:n.jsx(vl,{size:17})}),n.jsx("button",{type:"button",title:"Redo","data-testid":"history-redo",disabled:m.length===0,onClick:Lo,children:n.jsx(jl,{size:17})})]})}),n.jsxs("div",{className:"search-panel floating-panel","data-testid":"mindcanvas-search-panel","data-search-engine":xe,"data-search-worker-state":he,children:[n.jsxs("div",{className:"search-input-row",children:[n.jsx(Km,{size:16}),n.jsx("input",{ref:Ba,"data-testid":"mindcanvas-search-input","aria-label":"Search text",value:j,onChange:a=>P(a.target.value),onKeyDown:Nu,placeholder:"Search text ..."}),n.jsx("span",{className:"search-count","data-testid":"mindcanvas-search-count","aria-live":"polite",children:Bu}),n.jsx("button",{type:"button",title:"Previous search result","data-testid":"mindcanvas-search-prev",disabled:B.length===0,onClick:()=>Bn(-1),children:n.jsx(Ym,{size:14})}),n.jsx("button",{type:"button",title:"Next search result","data-testid":"mindcanvas-search-next",disabled:B.length===0,onClick:()=>Bn(1),children:n.jsx(Gn,{size:14})})]}),Ri&&n.jsx("div",{className:"search-current","data-testid":"mindcanvas-search-current","aria-live":"polite",children:Li?n.jsxs(n.Fragment,{children:[n.jsxs("span",{children:[ne+1," / ",B.length]}),n.jsxs("button",{type:"button","data-testid":"mindcanvas-search-focus",onClick:()=>Ds("current-button"),children:["Focus ",Li.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===ne?"is-active":"","aria-current":s===ne?"true":void 0,onMouseEnter:()=>ge(s),onClick:()=>_s(a,"result-click"),children:[n.jsx("strong",{children:a.title}),n.jsx("span",{children:a.body.slice(0,84)})]},a.id))})]})]}),me&&n.jsxs("div",{className:"connection-toast floating-panel",children:[n.jsx(Gs,{size:14}),"Select a compatible node pin to create a ",me.kind," line.",n.jsx("button",{type:"button",onClick:()=>X(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:()=>Q(null),children:n.jsx(gt,{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 Su(Gt),children:[n.jsx(ao,{size:14}),n.jsx("span",{children:"Copy"})]}),n.jsxs("button",{type:"button",title:"Archive result as a Markdown node",onClick:()=>wu(Gt),children:[n.jsx(ht,{size:14}),n.jsx("span",{children:"Archive"})]}),n.jsxs("button",{type:"button",title:"Stage a follow-up AI Task from this result",onClick:()=>vu(Gt),children:[n.jsx(nn,{size:14}),n.jsx("span",{children:"Follow-up"})]})]}),n.jsx("pre",{className:"result-popover__body",children:Gt.result})]}),lt&&n.jsx(Nh,{url:lt.url,fileName:lt.fileName,onClose:()=>{U(null),f.emit("node.pdf.preview.close")}}),Ni&&n.jsx(gm,{node:Ni,onSave:Zc,onClose:Jc}),qe&&n.jsx(hm,{settings:o.settings,onPatchSettings:Ie,onClose:jc}),Ii&&n.jsx(Ih,{board:o,rootNode:Ii,onClose:uu,onStatus:fi,onRemove:bi,onSubmitFollowUp:pu,onApproval:mu,onAddArtifact:gu}),ta&&n.jsx(fm,{board:o,selectedNode:K??null,selectedCount:c.length,input:v,viewport:oe,viewportSize:ye,localBridgeState:we,syncStatus:Ot,syncMessage:wa,buildPrompt:Pu,navigate:e,onClose:Ic}),!$s&&n.jsxs("div",{className:"global-input-shell","data-active-submits":V,"data-submit-state":V>0?"active":"idle",children:[n.jsx("textarea",{ref:In,"data-testid":"global-input-textarea",value:v,placeholder:(K==null?void 0:K.kind)==="ai-task"?"Run selected AI Task...":"Talk with AI...",onChange:a=>R(a.target.value),onKeyDown:a=>{a.repeat||a.nativeEvent.isComposing||a.keyCode===229||(a.ctrlKey||a.metaKey)&&a.key==="Enter"&&(a.preventDefault(),xi())}}),n.jsxs("div",{className:"input-controls",children:[n.jsx("button",{className:`input-settings-button ${qe?"is-active":""}`,type:"button",title:"AI Settings","aria-label":"AI Settings","aria-pressed":qe?"true":void 0,"data-testid":"ai-settings-open",onClick:vc,children:n.jsx(Jo,{size:16})}),["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:()=>ii("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:Ln?`${fr(Ln.provider)}: ${Ln.id}`:vs,children:[n.jsx("span",{className:"input-select-provider",children:Ln?fr(Ln.provider):"Custom"}),n.jsx("select",{"aria-label":"Text model","data-testid":"text-model-select",value:vs,onChange:a=>kc(a.target.value),children:Cc.map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Gn,{size:15})]}),n.jsxs("button",{className:"select-button",type:"button",title:"Effort",onClick:()=>ii("effort",o.settings.effort==="Normal"?"Deep":"Normal"),children:[o.settings.effort,n.jsx(Gn,{size:15})]})]}),Kt&&Et&&n.jsxs(n.Fragment,{children:[n.jsxs("label",{className:"input-select-wrap input-select-wrap--model",title:`${Et.model.provider}: ${Et.model.id}`,children:[n.jsx("span",{className:"input-select-provider",children:Et.model.provider}),n.jsx("select",{"aria-label":`${Kt} model`,value:Et.model.id,onChange:a=>Sc(Kt,a.target.value),children:rl(Kt).map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Gn,{size:15})]}),n.jsxs("label",{className:"input-select-wrap input-select-wrap--aspect",title:Et.aspect.note,children:[n.jsx("span",{className:`aspect-select__swatch ${bm(Et.aspect.id)}`}),n.jsx("select",{"aria-label":`${Kt} aspect ratio`,value:Et.aspect.id,onChange:a=>wc(Kt,a.target.value),children:Et.aspectOptions.map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Gn,{size:15})]})]}),n.jsx("span",{className:"global-submit-count","aria-live":"polite",children:V}),n.jsx("button",{className:"send-button",type:"button",title:"Submit","data-testid":"global-input-submit",disabled:!Du,onClick:xi,children:n.jsx(Ys,{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:[Yd.map(a=>n.jsx("button",{type:"button",title:`Use ${a} grid`,"aria-label":`Use ${a} grid`,"aria-pressed":_o===a,className:_o===a?"is-active":"","data-testid":`canvas-grid-mode-${a}`,onClick:()=>Yc(a),children:a==="dot"?n.jsx(Xm,{size:15}):a==="line"?n.jsx(qm,{size:15}):a==="particles"?n.jsx(Cl,{size:15}):n.jsx(Uo,{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":Ei,className:Ei?"is-active":"","data-testid":"canvas-grid-snap-toggle",onClick:Xc,children:n.jsx(Jm,{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:Is,children:n.jsx(Zm,{size:15})}),(()=>{const a=!!Yo(Pi[qt]);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?ua(qt):En(qt)},children:n.jsx("span",{"aria-hidden":"true",children:"N"})})})(),ar.map(a=>{const s=!!Yo(Pi[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?ua(a):En(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:Kc,children:n.jsx(Qm,{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:()=>Ns("button"),children:n.jsx(ep,{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:()=>As("button"),children:n.jsx(tp,{size:17})}),n.jsx("button",{type:"button",title:"Reset fixture",onClick:Iu,children:n.jsx(ap,{size:17})}),n.jsx("button",{type:"button",title:Ct?"Exit read mode":"Fullscreen","aria-label":Ct?"Exit read mode":"Fullscreen","aria-pressed":Ct,className:Ct?"is-active":"","data-testid":"canvas-read-mode-toggle","data-read-mode":Ct?"true":"false",onClick:()=>{Pn("button")},children:n.jsx(bl,{size:17})})]}),o.settings.minimapEnabled&&st&&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:_u,children:[st.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:`${st.viewport.x}px`,top:`${st.viewport.y}px`,width:`${st.viewport.width}px`,height:`${st.viewport.height}px`}})]})]}),n.jsxs("div",{className:"canvas-status",children:[o.nodes.length," nodes / ",ga.length," rendered / ",o.edges.length," edges / ",Math.round(oe.scale*100),"%",((Xi=o.source)==null?void 0:Xi.kind)==="localBridge"&&n.jsxs(n.Fragment,{children:[" ","/ LocalBridge",o.source.partialImport?" partial":"",o.source.truncated?` ${o.source.renderedNodeCount}/${o.source.originalNodeCount}`:""]})]})]})}function pd(e){switch(e){case"checking":return"Checking";case"connected":return"Connected";case"blocked":return"Access gated";case"unavailable":return"Unavailable";default:return"Idle"}}export{fb as MindCanvas};