@mindexec/cli 0.2.343 → 0.2.344

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,48 +0,0 @@
1
- var Su=Object.defineProperty;var ku=(e,t,o)=>t in e?Su(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var Li=(e,t,o)=>ku(e,typeof t!="symbol"?t+"":t,o);import{j as n,r as g,a as wu}from"./vendor-react-BXzpOyCS.js";import{l as vu,a as lt,s as Mt,b as ju,d as Iu,r as Nu,c as Au,e as Mu,i as Ei}from"./storage-BxbRfn9F.js";import{r as Ir,g as Zo,w as Ru,a as As,d as Pi,b as Tu,t as Nr,p as Hl,v as Lu,R as Eu,c as Pu,u as _u,e as Du,f as _i,s as dt,i as Ka,l as Ms,h as Fn,j as Io,k as Un,m as zn,n as No,o as fa,q as Di,x as Bu,y as Wn,z as Ou,A as $u,B as Fu,C as Uu,D as Vl,E as zu,F as Wu,G as Rs,H as Bi,I as Hu,J as Vu,K as Oi,L as tr,M as ar,N as Yl,O as Ao,P as Oo,Q as qn,S as $i,T as U,U as Ts,V as Jn,W as Yu,X as Gu,Y as Ku,Z as Fi,_ as Ls,$ as Xu,a0 as qu,a1 as Ju,a2 as Zu,a3 as Ui,a4 as Qu,a5 as em,a6 as tm,a7 as am,a8 as zi}from"./canvas-runtime-NLX25Qv6.js";import{e as nm,d as om}from"./vendor-msgpack-BE8aAsr3.js";import{R as f}from"./app-runtime-xD2Z3NdN.js";import{g as Es}from"./index-AzxzdXQj.js";import{g as Qo,r as Gl}from"./supabaseAuthAdapter-C3z334Qw.js";import{c as sm,a as rm,r as Wi}from"./toolHandoff-D5e5f7t5.js";import{a as Hi,s as im}from"./executionModeSettings-NJqurj-o.js";import{a as Vi,p as lm}from"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";import{A as Rt,W as dm,c as Kl,D as cm,E as Ar,R as an,J as Mr,X as ct,N as nr,O as um,Q as oo,w as nn,I as so,V as ro,l as or,F as ut,Y as mm,Z as Xl,_ as sr,$ as on,a0 as ql,a1 as pm,a2 as Jl,a3 as gm,i as eo,a4 as Zl,a5 as hm,a6 as Yi,a7 as fm,a8 as ya,a9 as Gi,T as Vo,aa as Ki,ab as Yo,ac as bm,ad as rr,ae as Ql,af as ir,ag as ym,ah as xm,f as Cm,ai as Sm,h as Zn,aj as km,ak as wm,al as Xi,am as qi,an as Ji,g as Zi,ao as Mo,H as Hn,ap as Ro,s as Ps,aq as Qi,ar as vm,as as _s,at as el,au as Ds,av as jm,aw as Im,ax as Nm,ay as tl,az as Am,aA as Mm,aB as Rm,aC as Tm,n as Lm,o as Vn,x as Em,aD as Pm,aE as _m,aF as Dm,aG as Bm,aH as Om,aI as $m,aJ as Fm,aK as Um}from"./vendor-icons-oiW_NVNO.js";const zm=1200,Sa="LocalBridgeOriginalNodeId";function mt(e){return typeof e=="object"&&e!==null}function Yt(e,t){const o=Number(e);return Number.isFinite(o)?o:t}function H(e){return typeof e=="string"?e:""}function ed(){return typeof window<"u"?{width:window.innerWidth||1280,height:window.innerHeight||720}:{width:1280,height:720}}function lr(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 u=1400/p,y=ed();return{x:y.width/2-r*u,y:y.height/2-d*u,scale:u}}function Wm(e){return mt(e)?lr(e.x??e.X,e.y??e.Y,e.z??e.Z):null}function Hm(e){if(!mt(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=ed();return{x:(d.width/2-t)/r,y:(d.height/2-o)/r,z:1400/r}}function Vm(e){const t=String(e||"").trim();if(t)try{const o=JSON.parse(t);if(!mt(o))return;const r={};for(const[d,p]of Object.entries(o)){const u=Wm(p);u&&(r[d]=u)}return Object.keys(r).length>0?r:void 0}catch{return}}function Ym(e){if(!e||Object.keys(e).length===0)return null;const t={};for(const[o,r]of Object.entries(e)){const d=Hm(r);d&&(t[o]=d)}return Object.keys(t).length>0?JSON.stringify(t):null}function Go(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 es(){return crypto.randomUUID()}function Rr(e){return mt(e)?"ContentType"in e||"Prompt"in e||"Response"in e||"PositionX"in e||"PositionY"in e||"SourceFilePath"in e||"ImageStack"in e:!1}function al(e){const t=H(e).trim();if(!t)return null;try{return JSON.parse(t)}catch{return null}}function dr(e){if(Array.isArray(e))return e;if(!mt(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=al(o);if(r)return dr(r)}for(const t of["ContentJson","contentJson","content_json"])if(t in e){const o=al(e[t]);if(o)return dr(o)}return Rr(e)?[e]:[]}function Tr(e){return mt(e)?"BoardId"in e&&("Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e):!1}function td(e){if(!mt(e))return 0;for(const t of["Deletes","deletes"]){const o=e[t];if(Array.isArray(o))return o.length}return 0}function Ko(e){return dr(e).filter(Rr)}function ad(e){return Ko(e).length}function Gm(e,t){var p;const o=[...Ko(e)];if(!Tr(t))return o;const r=new Set;for(const u of["Deletes","deletes"]){const y=t[u];if(Array.isArray(y))for(const c of y){const x=H(c).trim();x&&r.add(x)}}if(r.size>0)for(let u=o.length-1;u>=0;u-=1){const y=H((p=o[u])==null?void 0:p.Id).trim();y&&r.has(y)&&o.splice(u,1)}const d=new Map;o.forEach((u,y)=>{const c=H(u.Id).trim();c&&d.set(c,y)});for(const u of Ko(t)){const y=H(u.Id).trim(),c=y?d.get(y):void 0;if(c!==void 0){o[c]=u;continue}y&&d.set(y,o.length),o.push(u)}return o}function nd(e){const t=Array.isArray(e)?e.filter(mt):[];return new Map(t.filter(o=>o.NodeId).map(o=>[String(o.NodeId),o]))}async function cr(e,t){for(const o of e)try{const r=await Ir(o,t);return{payload:JSON.parse(r.content),path:o}}catch{}return null}async function Km(e,t){const o=`.mindexec/boards/${e}.msgpack`,r=`boards/${e}.msgpack`;for(const y of[o,r])try{const c=await Tu(y,t);return{payload:om(c),format:y===o?"msgpack":"legacy-msgpack",path:y}}catch{}const d=`.mindexec/boards/${e}.json`,p=`boards/${e}.json`,u=await cr([d,p],t);if(u)return{payload:u.payload,format:u.path===d?"json":"legacy-json",path:u.path};throw new Error(`LocalBridge board file not found: ${o}, ${r}, ${d}, ${p}`)}function ur(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 nl(e){return!mt(e)||Rr(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 Lr(e){if(Array.isArray(e))return e.filter(nl).map(t=>ur(t)).filter(t=>!!t);if(nl(e)){const t=ur(e);return t?[t]:[]}return[]}function Xm(e){const t=e.toLowerCase();return qm(t)?"remote-control":Jm(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 qm(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 Jm(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 Zm(e,t){const o=e.Metadata||{},r=o.ThumbnailUrl,d=o.OriginalUrl,p=o.OriginalPath;return Nr(H(r)||H(d)||H(p)||H(e.Response),t)}function Qm(e,t,o){const r=e.ImageStack,d=Array.isArray(r==null?void 0:r.Variants)?r.Variants:[];if(d.length===0)return;const p=d.map((y,c)=>{const x=H(y.AssetId).trim(),v=Nr(x,o)||t;return v?{variantId:H(y.VariantId)||`variant-${H(e.Id)||c}`,imageUrl:v,assetId:x||void 0,caption:H(y.Caption)||void 0,sourceNodeId:H(e.Id)||void 0,createdAtUtc:H(y.CreatedAtUtc)||void 0}:null}).filter(y=>!!y);if(p.length===0)return;const u=H(r==null?void 0:r.ActiveVariantId);return{activeVariantId:p.some(y=>y.variantId===u)?u: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 ep(e,t){return!e||e.variants.length===0?t:(e.variants.find(r=>r.variantId===e.activeVariantId)??e.variants[0]).imageUrl||t}function tp(e,t,o){var u,y,c,x,v,T;const r=(y=(u=e.imageStack)==null?void 0:u.variants)!=null&&y.length?e.imageStack.variants:e.imageUrl?[{variantId:`${e.id}:image`,imageUrl:e.imageUrl,assetId:io(e.imageUrl,t)||e.imageUrl,title:e.title,sourceNodeId:e.id,createdAtUtc:o}]:[];if(r.length===0)return null;const d=r.map(A=>({VariantId:A.variantId||es(),AssetId:A.assetId||io(A.imageUrl,t)||A.imageUrl,CreatedAtUtc:A.createdAtUtc||o,Caption:A.caption||A.title||null}));return{ActiveVariantId:(c=e.imageStack)!=null&&c.activeVariantId&&d.some(A=>{var P;return A.VariantId===((P=e.imageStack)==null?void 0:P.activeVariantId)})?e.imageStack.activeVariantId:d[0].VariantId||"",Variants:d,Kind:((x=e.imageStack)==null?void 0:x.kind)||(d.length>1?"pile":"versions"),Title:((v=e.imageStack)==null?void 0:v.title)||e.title||null,UpdatedAtUtc:((T=e.imageStack)==null?void 0:T.updatedAtUtc)||o}}function ap(e,t){const o=e.Metadata||{};return Nr(H(o.OriginalUrl)||H(o.OriginalPath)||H(o.SourceFilePath)||H(e.SourceFilePath)||H(e.Response),t)}function np(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 op(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 sp(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 rp(e){const t=new Set;return e.map(o=>{var c,x;const r=((c=o.metadata)==null?void 0:c[Sa])||"",d=Go(r)?r:Go(o.id)?o.id:"",p=!!(d&&t.has(d)),u=d&&!p?d:es(),y=((x=o.metadata)==null?void 0:x[Sa])!==u;return t.add(u),{node:y?{...o,metadata:{...o.metadata??{},[Sa]:u}}:o,originalId:u,assignedNodeId:!d||p,metadataStamped:y,duplicateOriginalId:p}})}function ip(e,t,o,r,d){var x,v,T;const p=op(e.kind),u=p==="image"||p==="mask"?io(e.imageUrl,d):"",y=["video","pdf","file","directory","embed"].includes(p)?io(e.assetUrl||e.sourceFilePath||e.body,d):"",c={...e.metadata??{},[Sa]: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 A=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=A),c.url??(c.url=A),c.AdapterState??(c.AdapterState="local-reference")}return e.kind==="video"&&(c.assetKind??(c.assetKind="video"),c.videoMode??(c.videoMode=(x=e.assetUrl)!=null&&x.startsWith(d)?"local_bridge":"local_reference"),c.AdapterState??(c.AdapterState=((v=e.metadata)==null?void 0:v.PromptOnly)==="true"?"adapter-gated":"local-reference")),(T=e.tags)!=null&&T.length&&(c.ReactTags=JSON.stringify(e.tags)),u&&(c.OriginalUrl=u,c.ThumbnailUrl=u),y&&(c.OriginalPath=y,c.SourceFilePath=y),{Id:t,ContentType:p,Prompt:e.title||p,Response:p==="image"||p==="mask"?u||e.body||null:p==="remote-monitor"?e.body||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":p==="remote-control"?e.body||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":y||e.body||null,PositionX:e.x,PositionY:e.y,PositionZ:0,IsLoading:e.status==="running",Width:Math.round(e.width),Height:Math.round(e.height),Children:[],ParentId:o||null,IsExpanded:!!e.isExpanded,OriginalHeight:Math.round(e.originalHeight??0),IsAiEnabled:e.aiEnabled!==!1,IsChunkedText:!!e.isChunkedText,TotalLineCount:Math.round(e.totalLineCount??0),SourceFilePath:e.sourceFilePath||y||null,ScrollOffset:e.scrollOffset??0,MaxScroll:e.maxScroll??0,CreatedAt:r,UpdatedAt:r,IsWordWrap:e.wordWrap??e.kind!=="code",Metadata:c,ImageStack:p==="image"?tp(e,d,r):null}}function lp(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 dp(e,t,o){const r=H(e.ContentType)||"note",d=H(e.Prompt).trim(),p=H(e.Response).trim(),u=np(e.Metadata),y=H(e.Id).trim();y&&(u[Sa]??(u[Sa]=y));const x=["true","1","yes"].includes(String(u.ImageRouterMask||u.IsMask||"").trim().toLowerCase())?"mask":Xm(r),v=x==="memo"&&["mindcanvasagent","agentcommand"].includes(String(u.SemanticType||u.semanticType||"").trim().toLowerCase()),T=x==="memo"&&["codenote","code-note"].includes(String(u.SemanticType||u.semanticType||"").trim().toLowerCase()),A=H(e.SourceFilePath)||u.OriginalPath||u.SourceFilePath||"",P=x==="video"||x==="pdf"||x==="file"||x==="directory"||x==="embed"?ap(e,o):void 0,Y=d||e.SourceFilePath||r||"LocalBridge node",B=x==="image"?p||d||"Image asset":x==="mask"?p||d||"Image mask asset":x==="remote-monitor"?p||d||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":x==="remote-control"?p||d||A||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":x==="pdf"||x==="file"||x==="directory"||x==="embed"?p||A||d||r:p||d||A||"",z=v?500:T?400:x==="remote-monitor"?860:x==="remote-control"||x==="template-launcher"?560:x==="csv-table"?720:x==="embed"?460:x==="video"?420:x==="markdown"?380:x==="text"||x==="image"||x==="mask"?360:320,q=v||T?300:x==="remote-monitor"?640:x==="remote-control"?390:x==="template-launcher"?620:x==="csv-table"?420:x==="embed"?260:x==="video"?236:x==="markdown"?240:x==="text"?210:x==="image"||x==="mask"?260:180,ee=x==="image"||x==="mask"?Zm(e,o):void 0,ke=x==="image"?Qm(e,ee,o):void 0,de=!!(e.IsChunkedText||u.IsChunkedText==="true"),we=Yt(e.TotalLineCount??u.TotalLineCount,0),ce=Yt(e.ScrollOffset,0),He=Yt(e.MaxScroll,0);return{id:String(e.Id||crypto.randomUUID()),kind:x,title:x==="remote-monitor"?d||"Multi Desktop Monitor":x==="remote-control"?d||u.RemoteFleetDeviceName||"Remote Device":x==="template-launcher"?d||"Template Launcher":Y,body:B,x:Yt((t==null?void 0:t.PositionX)??e.PositionX,0),y:Yt((t==null?void 0:t.PositionY)??e.PositionY,0),width:Math.max(160,Math.min(900,Yt((t==null?void 0:t.Width)??e.Width,z))),height:Math.max(120,Math.min(900,Yt((t==null?void 0:t.Height)??e.Height,q))),status:e.IsLoading?"running":x==="ai-task"?"idle":void 0,imageUrl:ep(ke,ee),imageStack:ke,assetUrl:P,sourceFilePath:A||void 0,isChunkedText:de||void 0,totalLineCount:de?we:void 0,scrollOffset:de?ce:void 0,maxScroll:de?He:void 0,isExpanded:typeof e.IsExpanded=="boolean"?e.IsExpanded:void 0,originalHeight:Yt(e.OriginalHeight,0)||void 0,tags:v?["Agent Command",u.AgentCommandRequestedRole||"Researcher",u.AgentCommandStatus||"Draft"]:T?["Code Note",u.CodeNoteStatus||"Draft",u.CodeNoteSyncState||"Unlinked"]:x==="remote-monitor"?["Remote","Monitor","LocalBridge"]:x==="remote-control"?["Remote","Control","LocalBridge"]:["LocalBridge",r],metadata:x==="remote-monitor"?cp(u):x==="remote-control"?up(u):u,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 cp(e){return{RemoteHub:"Gated",RemoteRoute:"Gated",RemoteConnected:"0",RemoteTotal:"30",RemotePage:"1/1",AdapterState:"adapter-gated",...e}}function up(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 mp(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 pp(e=Zo()){const t=await Ir(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return(Array.isArray(o)?o.filter(mt):[]).map(p=>ur(p)).filter(p=>!!p).sort((p,u)=>String(u.UpdatedAt||"").localeCompare(String(p.UpdatedAt||"")))}async function gp(e){try{const t=await Ir(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return Array.isArray(o)?o.filter(mt):[]}catch{return[]}}async function hp(e,t,o,r=Zo()){var pt,F,Be,gt;if((pt=e.source)!=null&&pt.partialImport)throw new Error("This board was imported from a partial original payload. Export is blocked to avoid data loss.");if((F=e.source)!=null&&F.truncated)throw new Error("This board was truncated during import. Export is blocked to avoid data loss.");const d=(Be=e.source)!=null&&Be.exportedByReact?String(e.source.boardId||""):"",p=Go(d),u=Go(d)?d:es(),y=new Date().toISOString(),c=rp(e.nodes),x=c.map(O=>O.node),v=new Map(c.map(O=>[O.node.id,O.originalId])),T=sp(e.edges,v),A=c.map(({node:O,originalId:Re})=>ip(O,Re,T.get(Re),y,r)),P=c.map(({node:O,originalId:Re})=>lp(O,Re)),Y=t.scale>0?t.scale:1,B=(window.innerWidth/2-t.x)/Y,z=(window.innerHeight/2-t.y)/Y,q=1400/Y,ee=(gt=e.nodes.find(O=>O.kind==="image"&&O.imageUrl))==null?void 0:gt.imageUrl,ke={Id:u,UserId:"00000000-0000-0000-0000-000000000000",Title:e.name||"Untitled Board",Description:"Exported from MindExec React",ThumbnailUrl:io(ee,r)||"",IsPublic:!1,CreatedAt:y,SyncedCloudBoardId:null,LastSyncedAt:null,LastCloudCopyStatus:null,UpdatedAt:y,LastCameraX:B,LastCameraY:z,LastCameraZ:q,LastCursorX:0,LastCursorY:0,CameraBookmarks:Ym(e.settings.cameraBookmarks)},de=`.mindexec/boards/${u}.msgpack`,we=`.mindexec/boards/${u}.json`,ce=`.mindexec/boards/${u}.layout.json`,He=`.mindexec/boards/${u}.delta.json`,Ve=`boards/${u}.delta.json`,ue=await gp(r),De=[ke,...ue.filter(O=>H(O.Id)!==u)],K=nm(A);await Ru(de,K,o,r),await As(we,JSON.stringify(A,null,2),o,r),await As(ce,JSON.stringify(P,null,2),o,r),await As(".mindexec/boards/_metadata.json",JSON.stringify(De,null,2),o,r);const $=await Promise.allSettled([Pi(He,o,r),Pi(Ve,o,r)]);return f.emit("localBridge.board.exported",{boardId:u,nodes:A.length,edges:e.edges.length,snapshotFormat:"msgpack",msgpackBytes:K.byteLength,jsonMirror:!0,deltaCleared:$.some(O=>O.status==="fulfilled"&&O.value.success),reusedBoardId:p,stableNodeIds:c.length,assignedNodeIds:c.filter(O=>O.assignedNodeId).length,metadataStampedNodeIds:c.filter(O=>O.metadataStamped).length,duplicateOriginalNodeIds:c.filter(O=>O.duplicateOriginalId).length}),{metadata:ke,source:{kind:"localBridge",boardId:u,loadedAt:y,originalNodeCount:A.length,renderedNodeCount:A.length,truncated:!1,exportedByReact:!0,snapshotFormat:"msgpack"},nodes:x,msgpackPath:de,boardPath:we,layoutPath:ce}}async function fp(e,t,o=Zo()){const r=await Km(e.Id,o);let d=new Map;const p=await cr([`.mindexec/boards/${e.Id}.layout.json`,`boards/${e.Id}.layout.json`],o);p&&(d=nd(p.payload));let u=null;const y=await cr([`.mindexec/boards/${e.Id}.delta.json`,`boards/${e.Id}.delta.json`],o);y&&(u=y.payload);const c=u?Lr(u)[0]:null,x=!!(u&&Tr(u)),v=x?Gm(r.payload,u):r.payload;return od(v,t,{boardId:(c==null?void 0:c.Id)??e.Id,title:(c==null?void 0:c.Title)||e.Title||"LocalBridge Board",updatedAt:(c==null?void 0:c.UpdatedAt)??e.UpdatedAt,layoutPayload:Array.from(d.values()),baseUrl:o,cameraBookmarks:(c==null?void 0:c.CameraBookmarks)??e.CameraBookmarks,deltaApplied:x,deltaUpserts:u?ad(u):0,deltaDeletes:u?td(u):0,snapshotFormat:r.format})}function od(e,t,o={}){const r=Ko(e),d=Tr(e),p=o.deltaUpserts??(d?r.length:0),u=o.deltaDeletes??(d?td(e):0),y=o.layoutPayload?nd(o.layoutPayload):new Map,c=r.slice(0,zm),x=c.map(q=>dp(q,y.get(String(q.Id||"")),o.baseUrl??Zo())),v=new Set(x.map(q=>q.id)),T=mp(c,v),A=r.length>x.length,P=d,Y=o.deltaApplied===!0,B=o.boardId||es(),z=o.updatedAt||new Date().toISOString();return f.emit("localBridge.board.loaded",{boardId:B,nodes:x.length,originalNodes:r.length,truncated:A,snapshotFormat:o.snapshotFormat,partialImport:P,deltaImport:d,deltaApplied:Y,deltaUpserts:p,deltaDeletes:u}),{id:`localBridge:${B}`,name:o.title||"LocalBridge Board",nodes:x,edges:T,settings:{...t,cameraBookmarks:Vm(o.cameraBookmarks)},updatedAt:z,source:{kind:"localBridge",boardId:B,loadedAt:new Date().toISOString(),snapshotFormat:o.snapshotFormat,originalNodeCount:r.length,renderedNodeCount:x.length,truncated:A,partialImport:P,deltaImport:d,deltaApplied:Y}}}const Er=["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(","),bp=/^[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 yp(e){if(bp.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 sd(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 xp(e){return JSON.stringify({id:e.id,name:e.name,nodes:e.nodes,edges:e.edges,settings:e.settings,updatedAt:e.updatedAt})}function mr(e,t=new Date().toISOString()){return e&&!Number.isNaN(Date.parse(e))?e:t}function Pr(e){return(e==null?void 0:e.trim().slice(0,90))||"Untitled Board"}function rd(e){const t=sd(e.content_json),o=mr(e.updated_at??t.updatedAt);return{id:e.id,name:Pr(e.title??t.name),updatedAt:o,createdAt:mr(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 Cp(e,t){const o=sd(e.content_json),r=mr(e.updated_at??o.updatedAt);return{id:e.id,name:Pr(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 _r(e){var c;const t=Gl(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=Qo(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:u}=await o.auth.getUser(),y=((c=p.user)==null?void 0:c.id)??null;return u||!y?(f.emit("projectStorage.cloud.provider.sessionMissing",{message:(u==null?void 0:u.message)??"missing-user"}),{userId:null,config:t,reason:"missing-user"}):{userId:y,config:t,reason:"provider-ready"}}async function Sp(e){const t=await _r(e);if(!t.userId)return[];const o=Qo(e);if(!o)return[];f.emit("projectStorage.cloud.list.requested");const{data:r,error:d}=await o.from("boards").select(Er).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(rd);return f.emit("projectStorage.cloud.list.loaded",{count:p.length}),p}async function kp(e,t,o){const r=await _r(e);if(!r.userId)return null;const d=Qo(e);if(!d)return null;f.emit("projectStorage.cloud.load.requested",{boardId:t});const{data:p,error:u}=await d.from("boards").select(Er).eq("user_id",r.userId).eq("id",t).maybeSingle();if(u)throw f.emit("projectStorage.cloud.provider.failed",{operation:"load",boardId:t,message:u.message}),u;if(!p)return null;const y=Cp(p,o);return f.emit("projectStorage.cloud.load.loaded",{boardId:t,nodes:y.nodes.length,edges:y.edges.length}),y}async function wp(e,t,o){const r=await _r(e);if(!r.userId)return null;const d=Qo(e);if(!d)return null;const p=yp(t.id),u=new Date().toISOString(),y=Pr(t.name),c={...t,id:p,name:y,updatedAt:u},x={p_board_id:p,p_title:y,p_description:null,p_thumbnail_url:null,p_is_public:!1,p_created_at:null,p_updated_at:u,p_last_camera_x:o.x,p_last_camera_y:o.y,p_last_camera_z:o.scale,p_last_cursor_x:0,p_last_cursor_y:0,p_camera_bookmarks:JSON.stringify(t.settings.cameraBookmarks??{}),p_nodes:[],p_include_json_mirror:!0};f.emit("projectStorage.cloud.save.requested",{boardId:p,sourceBoardId:t.id,nodes:t.nodes.length,edges:t.edges.length});const{error:v}=await d.rpc("save_board_snapshot",x);if(v)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-rpc",boardId:p,message:v.message}),v;const T={content_json:xp(c),updated_at:u},{data:A,error:P}=await d.from("boards").update(T).eq("id",p).eq("user_id",r.userId).select(Er).maybeSingle();if(P)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-json-mirror",boardId:p,message:P.message}),P;const Y=A?rd(A):{id:p,name:y,updatedAt:u,createdAt:u,nodeCount:t.nodes.length,edgeCount:t.edges.length,sourceKind:"cloud"};return f.emit("projectStorage.cloud.save.saved",{boardId:Y.id,nodes:Y.nodeCount,edges:Y.edgeCount}),Y}function pr(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 vp(e,t={},o=pr(e),r){if(e.length===0)return{after:new Map,boundsAfter:o};const d=Up(t.mode),p=zp(t.order),u=Wp(t.anchor),y=Hp(t.sizeMode),c=Math.max(0,t.gapX??24),x=Math.max(0,t.gapY??24),v=Math.max(1,t.maxColumns??12),T=gr(t.quantile??.75,.05,.95),A=e.map(jp),P=Dp(A,p),Y=P.map(ce=>ce.width),B=P.map(ce=>ce.height),z=Math.max(1,t.cellWidth??sl(Y,T)),q=Math.max(1,t.cellHeight??sl(B,T)),ee=Math.max(1,t.targetWidth??z),ke=Math.max(1,t.targetHeight??q),de=_p(u,o);if(d==="grid"){Tp(P,y,ee,ke,z,q);const ce=ol(t.columns,v,o.maxX-o.minX,z,c);Np(P,de.x,de.y,ce,z,q,c,x)}else if(d==="masonry"){Lp(P,y==="preserve"?"uniformWidth":y,ee);const He=ol(t.columns,v,o.maxX-o.minX,ee,c);Ap(P,de.x,de.y,He,ee,c,x)}else d==="stripHorizontal"?(Ep(P,y==="preserve"?"uniformHeight":y,ke),Mp(P,de.x,de.y,c,ke)):(Pp(P,y==="preserve"?"uniformWidth":y,ee),Rp(P,de.x,de.y,x,ee));let we=new Map(P.map(ce=>[ce.id,Ip(ce)]));return u==="selectionBoundsCenter"&&(we=Op(o,we)),t.snapToGrid&&(we=$p(we,Math.max(1,t.gridSize??8))),{after:we,boundsAfter:pr(Array.from(we.values()))}}function jp(e){return{...e,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function Ip(e){return{x:e.x,y:e.y,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function Np(e,t,o,r,d,p,u,y){e.forEach((c,x)=>{const v=Math.floor(x/r),T=x%r,A=t+T*(d+u),P=o+v*(p+y);c.x=A+(d-c.width)/2,c.y=P+(p-c.height)/2})}function Ap(e,t,o,r,d,p,u){const y=Array.from({length:r},()=>0);for(const c of e){const x=Fp(y),v=t+x*(d+p);c.x=v+(d-c.width)/2,c.y=o+y[x],y[x]+=c.height+u}}function Mp(e,t,o,r,d){let p=t;for(const u of e)u.x=p,u.y=o+(d-u.height)/2,p+=u.width+r}function Rp(e,t,o,r,d){let p=o;for(const u of e)u.x=t+(d-u.width)/2,u.y=p,p+=u.height+r}function Tp(e,t,o,r,d,p){if(t==="fitCellDownOnly")for(const u of e){const y=Math.min(1,d/u.width,p/u.height);u.width*=y,u.height*=y}else t==="uniformWidth"?Dr(e,o):t==="uniformHeight"&&id(e,r)}function Lp(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}Dr(e,o)}function Ep(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}id(e,o)}function Pp(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}Dr(e,o)}function Dr(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 id(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 ol(e,t,o,r,d){if(typeof e=="number"&&e>0)return Math.round(gr(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(gr(p,1,t))}function _p(e,t,o){return{x:t.minX,y:t.minY}}function Dp(e,t){return t==="selectionOrder"?[...e].sort((o,r)=>o.selectionIndex-r.selectionIndex):Bp(e)}function Bp(e){const t=[...e].sort((c,x)=>c.y-x.y||c.x-x.x);if(t.length<=2)return t;const o=t.map(c=>c.height).sort((c,x)=>c-x),r=o[Math.floor(o.length/2)]??1,d=Math.max(16,r*.35),p=[];let u=[],y=Number.NaN;for(const c of t)u.length===0?(u=[c],y=c.y):Math.abs(c.y-y)<=d?(u.push(c),y=(y*(u.length-1)+c.y)/u.length):(p.push([...u].sort((x,v)=>x.x-v.x)),u=[c],y=c.y);return u.length>0&&p.push([...u].sort((c,x)=>c.x-x.x)),p.flat()}function Op(e,t){if(t.size===0)return t;const o=pr(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,u=o.minY+(o.maxY-o.minY)/2,y=r-p,c=d-u;return new Map(Array.from(t.entries()).map(([x,v])=>[x,{...v,x:v.x+y,y:v.y+c}]))}function $p(e,t){return new Map(Array.from(e.entries()).map(([o,r])=>[o,{...r,x:rl(r.x,t),y:rl(r.y,t)}]))}function sl(e,t){if(e.length===0)return 1;const o=[...e].sort((y,c)=>y-c),r=(o.length-1)*t,d=Math.floor(r),p=Math.min(o.length-1,d+1),u=r-d;return o[d]*(1-u)+o[p]*u}function Fp(e){let t=0;for(let o=1;o<e.length;o+=1)e[o]<e[t]&&(t=o);return t}function rl(e,t){return Math.round(e/t)*t}function Up(e){const t=ts(e);return t==="grid"?"grid":t==="striphorizontal"||t==="striph"?"stripHorizontal":t==="stripvertical"||t==="stripv"?"stripVertical":"masonry"}function zp(e){return ts(e)==="selectionorder"?"selectionOrder":"spatialReading"}function Wp(e){const t=ts(e);return t==="selectionboundscenter"?"selectionBoundsCenter":t==="viewporttopleft"?"viewportTopLeft":"selectionBoundsTopLeft"}function Hp(e){const t=ts(e);return t==="fitcelldownonly"?"fitCellDownOnly":t==="uniformwidth"?"uniformWidth":t==="uniformheight"?"uniformHeight":"preserve"}function ts(e){return String(e??"").trim().toLowerCase().replace(/[^a-z0-9]/g,"")}function gr(e,t,o){return Math.min(o,Math.max(t,e))}const ld=300,dd=50*1024*1024,Vp=800;function he(e){return typeof e=="string"?e.length*2:0}function Yp(e){let t=256;if(t+=he(e.id),t+=he(e.kind),t+=he(e.title),t+=he(e.body),t+=he(e.result),t+=he(e.imageUrl),t+=he(e.assetUrl),t+=he(e.sourceFilePath),t+=(e.tags??[]).reduce((o,r)=>o+he(r),0),e.metadata)for(const[o,r]of Object.entries(e.metadata))t+=he(o)+he(r);return e.imageStack&&(t+=128+he(e.imageStack.title),t+=e.imageStack.variants.reduce((o,r)=>o+96+he(r.variantId)+he(r.imageUrl)+he(r.assetId)+he(r.title)+he(r.caption),0)),t}function Gp(e){let t=1024+he(e.id)+he(e.name)+he(e.updatedAt);return t+=e.nodes.reduce((o,r)=>o+Yp(r),0),t+=e.edges.length*128,t+=Object.entries(e.settings).reduce((o,[r,d])=>o+he(r)+he(typeof d=="string"?d:JSON.stringify(d)),0),t}function cd(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:Gp(e)}}function il(e,t={}){const o=t.maxEntries??ld,r=t.maxBytes??dd;let d=e.slice(Math.max(0,e.length-o)),p=d.reduce((u,y)=>u+y.estimatedBytes,0);for(;d.length>1&&p>r;){const[u,...y]=d;p-=(u==null?void 0:u.estimatedBytes)??0,d=y}return d}function Xa(e,t,o={}){const r=cd(t,o),d=o.mergeWindowMs??Vp,p=e.slice(),u=p.at(-1);return u&&r.mergeKey&&u.mergeKey===r.mergeKey&&r.timestampMs-u.timestampMs<d?(p[p.length-1]={...u,description:r.description,timestampMs:r.timestampMs,estimatedBytes:Math.max(u.estimatedBytes,r.estimatedBytes)},il(p,o)):(p.push(r),il(p,o))}function Kp(e,t,o={}){const r=cd(t,o),d=o.maxEntries??ld,p=o.maxBytes??dd;let u=[r,...e].slice(0,d),y=u.reduce((c,x)=>c+x.estimatedBytes,0);for(;u.length>1&&y>p;){const c=u.at(-1);y-=(c==null?void 0:c.estimatedBytes)??0,u=u.slice(0,-1)}return u}function as(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!!as(e,t)}function ud(e){if(!e||!e.trim())return!1;const t=e.trim();return/^(https?:|blob:|data:|file:)/i.test(t)}function md(e){if(!e)return"";const t=as(e,"OriginalPath");if(t)return t;const o=String(e.body||"").trim();return ud(o)?"":o}function pd(e){return e?md(e)||String(e.sourceFilePath||"").trim()||String(e.assetUrl||"").trim()||String(e.imageUrl||"").trim()||String(e.body||"").trim():""}function gd(e){return as(e,"ThumbnailUrl","thumbnailUrl")}function Xp(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=as(e,"RequestedMediaOperation");return["text2image","image2image","inpaint"].includes(t.toLowerCase())}function Br(e){if(!e)return"";if(e.kind==="image"||e.kind==="mask"){const t=Xp(e)?md(e):"",o=gd(e),r=String(e.body||"").trim();return t||o||String(e.imageUrl||"").trim()||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()||(ud(r)?r:"")}return pd(e)||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()}function hd(e){if(!e)return"";const t=pd(e)||e.title||e.kind;return String(t||"").replace(/\\/g,"/").replace(/\/+$/,"").split("/").filter(Boolean).pop()||e.title||e.kind}const qp=2048,Jp=16e3,Bs=1024,Os=64,Zp=2048,$s=3,Qp=16,eg=256,tg=new Set(["text","note","memo","markdown","code","directory"]),ag=/[\p{L}\p{M}\p{N}]{2,}/gu,ll=4,ng=8,dl=1.35;function og(e){return tg.has(String(e||"").trim().toLowerCase())}function sg(e){const t=e.map(ig),o=new Map,r=new Map,d=new Map,p=new Map;for(const u of t){o.set(u.id,u);for(const y of u.tokens)Fs(r,y,u.id);for(const y of u.prefixes)Fs(d,y,u.id);for(const y of u.ngrams)Fs(p,y,u.id)}return{documents:t,documentById:o,tokenIndex:r,prefixIndex:d,ngramIndex:p}}function rg(e,t,o={}){const r=Math.max(1,Math.trunc(Number(o.limit||30))),d=Qa(t),p=cl(e,0,0,o.viewport,0);if(!d)return{hits:[],profile:p};const u=Array.from(fd(d)),y=Array.from(bd(u)),c=xd(d),x=Array.from(yd(c)),v=new Map;for(const B of u)Us(e.tokenIndex,B,v,8);for(const B of y)Us(e.prefixIndex,B,v,B.length<=3?4:2);for(const B of x)Us(e.ngramIndex,B,v,1.15);const T=ug(e,v,r),A=mg(o.allowedContentTypes),P=[];for(const B of T){const z=e.documentById.get(B);if(!z||A&&!A.has(z.contentType))continue;const q=dg(z,d,u,x);if(q<=0)continue;const ee=cg(z,o.viewport??null);P.push({nodeId:z.id,score:q+ee,textScore:q,viewportBoost:ee})}P.sort((B,z)=>z.score-B.score||B.nodeId.localeCompare(z.nodeId));const Y=P.slice(0,r);return{hits:Y,profile:cl(e,T.length,Y.length,o.viewport,Y.filter(B=>B.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}pg(p)||(r+=p,d=!1)}return r.trim()}function fd(e){return new Set(e.match(ag)??[])}function bd(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 yd(e){const t=new Set;if(!e.trim())return t;if(e.length<=$s)return t.add(e),t;for(let o=0;o<=e.length-$s;o+=1)t.add(e.slice(o,o+$s));return t}function ig(e){const t=String(e.kind??"").trim().toLowerCase(),o=xa(e.prompt??e.title,qp),r=og(t)?xa(e.response??e.body,Jp):"",d=lg(e.metadata,e.tags,e.metadataText),p=xa(e.sourceFilePath||e.assetUrl,Zp),u=Qa(o),y=Qa(r),c=Qa(d),x=Qa(p),v=Qa(t),T=[u,c,x,y,v].filter(Boolean).join(" "),A=fd(T);return{id:String(e.id),contentType:t,normalizedPrompt:u,normalizedResponse:y,normalizedMetadata:c,normalizedSourcePath:x,normalizedContentType:v,tokens:A,prefixes:bd(A),ngrams:yd(xd(T)),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 lg(e,t,o){const r=[];let d=0;if(e)for(const[p,u]of Object.entries(e)){if(d>=Os)break;!String(p??"").trim()&&!String(u??"").trim()||(r.push(xa(p,128)),String(u??"").trim()&&r.push(xa(u,Bs)),d+=1)}return d<Os&&(t!=null&&t.length)&&(r.push("tags",xa(t.join(" "),Bs)),d+=1),d<Os&&(o!=null&&o.trim())&&r.push("metadata",xa(o,Bs)),r.join(" ")}function dg(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 cg(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),u=Math.sqrt(d*d+p*p);if(u<=1)return ll+(1-u)*ng;if(u<=dl){const y=1-(u-1)/Math.max(.001,dl-1);return Math.max(0,y)*(ll*.75)}return 0}function ug(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*Qp,eg)).map(([r])=>r)}function mg(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 cl(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 Fs(e,t,o){const r=e.get(t);if(r){r.add(o);return}e.set(t,new Set([o]))}function Us(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 xd(e){let t="";for(const o of e)/\s/u.test(o)||(t+=o);return t}function xa(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 pg(e){const t=e.codePointAt(0)??0;return t<=31||t>=127&&t<=159}const gg=2147483647,hg="LocalBridge access is enabled, but the bridge is not reachable. Restart LocalBridge, allow Chrome local-network access, then reload MindCanvas.",fg="Local storage is unavailable in the hosted app until browser local storage or LocalBridge access is available.",bg="Local storage is unavailable. Check the browser-local storage state or LocalBridge connection.",yg="Cloud projects are unavailable until Supabase and Cloudflare R2 are configured.",xg="Login is required before cloud projects can be used.",Cg="Cloud projects are unavailable.";function Sg(e){return e.bridgeProviderConfigured||e.browserProviderConfigured||e.embeddedProviderConfigured}function hr(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 kg(e){return hr(e,!1).isAvailable?"local":Or(e)?"cloud":hr(e,!0).isAvailable?"local":e.cloudConfigured?"cloud":"local"}function Or(e){return e.cloudConfigured&&e.cloudSessionAvailable}function wg(e,t){return t.providerKind==="bridge"&&!t.bridgeReachable?hg:e.hostedWebApp?fg:bg}function vg(e){return e.cloudConfigured?Or(e)?Cg:xg:yg}function jg(e){var v,T,A;const t=Or(e),o=hr(e,!0),r=Sg(e),d=e.cloudConfigured,p=o.isAvailable,u=t;let y=e.storedMode??kg(e);y==="cloud"&&(!d||!u&&p)?y=p?"local":"cloud":y==="local"&&(!r&&d||!p&&u)&&(y="cloud");const c=e.cloudAccess,x=((v=c==null?void 0:c.denialReason)==null?void 0:v.trim())||void 0;return{currentMode:y,showLocalTab:r,showCloudTab:d,isLocalAvailable:o.isAvailable,isCloudAvailable:t,requiresCloudSignIn:e.cloudConfigured&&!t,canUseLocalProjects:p,canBrowseLocalWorkspace:o.canBrowseWorkspace,localProviderKind:o.providerKind,canUseCloudProjects:u,canSyncLocalToCloud:p&&u,cloudPlanKey:((T=c==null?void 0:c.planKey)==null?void 0:T.trim())||"free",cloudEntitlementStatus:((A=c==null?void 0:c.entitlementStatus)==null?void 0:A.trim())||(c?"active":"inactive"),currentCloudBoardCount:(c==null?void 0:c.currentBoardCount)??0,cloudBoardLimit:(c==null?void 0:c.cloudBoardLimit)??gg,lockedCloudBoardCount:(c==null?void 0:c.lockedBoardCount)??0,canCreateCloudBoards:(c==null?void 0:c.canCreateBoard)??u,canUseManagedAi:(c==null?void 0:c.canUseManagedAi)??!1,canGenerateImage:(c==null?void 0:c.canGenerateImage)??!1,canUseContextPack:(c==null?void 0:c.canUseContextPack)??!1,cloudLimitMessage:x,localStatusMessage:o.isAvailable?void 0:wg(e,o),cloudStatusMessage:u?void 0:vg(e)}}function Ig(){const e=new Error("Queued operation was cancelled before it started.");return e.name="AbortError",e}class Ng{constructor(){Li(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 Ig();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 fr="mindexec-local-mode-warning-dismissed-v1";function Ag(){try{return window.localStorage.getItem(fr)==="true"}catch{return!1}}function Cd(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 Mg(e,t,o){var d,p,u,y,c;if(e!=="connected")return t||Cd(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,(u=o==null?void 0:o.exec)!=null&&u.serviceTier?`tier ${o.exec.serviceTier}`:null,(y=o==null?void 0:o.exec)!=null&&y.preferredProviderKind?`codex ${o.exec.preferredProviderKind}`:null,(c=o==null?void 0:o.project)!=null&&c.isOpen?"project open":null].filter(Boolean);return r.length>0?`LocalBridge connected. ${r.join(" / ")}`:"LocalBridge connected."}function Rg({state:e,message:t,status:o,hostedBridgeAccessEnabled:r,onRefresh:d,onEnableHostedBridge:p}){const u=g.useMemo(()=>e==="checking"?n.jsx(Rt,{size:14,className:"spin-icon"}):e==="connected"?n.jsx(dm,{size:14}):e==="blocked"?n.jsx(Kl,{size:14}):e==="unavailable"?n.jsx(cm,{size:14}):n.jsx(Ar,{size:14}),[e]);return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--${e}`,title:Mg(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:u}),n.jsx("span",{children:Cd(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 Tg({status:e,message:t}){const r={ready:{icon:n.jsx(nr,{size:14}),label:"Saved locally",title:"Board state is saved in this browser."},syncing:{icon:n.jsx(Rt,{size:14,className:"spin-icon"}),label:"Saving",title:"Saving board state to this browser."},error:{icon:n.jsx(Mr,{size:14}),label:"Save error",title:"Board state could not be saved locally."},offline:{icon:n.jsx(Ar,{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 Lg({visible:e}){const[t,o]=g.useState(Ag);if(!e||t)return null;const r=()=>{o(!0);try{window.localStorage.setItem(fr,"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":fr,children:[n.jsx("div",{className:"runtime-local-warning__icon","aria-hidden":"true",children:n.jsx(Mr,{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(ct,{size:14})})]})}function Eg({bridgeState:e,bridgeMessage:t,bridgeStatus:o,syncStatus:r,syncMessage:d,hostedBridgeAccessEnabled:p,onRefreshBridge:u,onEnableHostedBridge:y,showLocalModeWarning:c=!0}){return n.jsxs("aside",{className:"runtime-status-cluster","aria-label":"Runtime status","data-testid":"runtime-status-cluster","data-local-mode-visible":c?"true":"false",children:[n.jsxs("div",{className:"runtime-status-row",children:[n.jsx(Rg,{state:e,message:t,status:o,hostedBridgeAccessEnabled:p,onRefresh:u,onEnableHostedBridge:y}),n.jsx(Tg,{status:r,message:d})]}),n.jsx(Lg,{visible:c})]})}const Pg=/^data:image\//i;function _g(e){const t=String(e||"").trim();if(!t)return{src:null,reason:"empty",urlKind:"empty"};const o=t.toLowerCase();return Pg.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 zs({src:e,alt:t="",className:o="",testId:r="secure-image",traceId:d,kind:p="image",title:u}){const y=g.useMemo(()=>_g(e),[e]),[c,x]=g.useState(y.src?"loading":"blocked");g.useEffect(()=>{const P=y.src?"loading":"blocked";x(P),y.src||f.emit("secureImage.blocked",{id:d,kind:p,reason:y.reason,urlKind:y.urlKind})},[p,y.reason,y.src,y.urlKind,d]);const v=()=>{x("loaded"),f.emit("secureImage.loaded",{id:d,kind:p,urlKind:y.urlKind})},T=()=>{x("error"),f.emit("secureImage.error",{id:d,kind:p,urlKind:y.urlKind})},A=c==="blocked"?`Image blocked: ${y.reason||"unsupported source"}`:"Image failed to load";return n.jsxs("div",{className:`secure-image secure-image--${c} ${o}`.trim(),"data-testid":r,"data-secure-image-state":c,"data-secure-image-kind":p,title:c==="loaded"?u:A,children:[y.src&&n.jsx("img",{src:y.src,alt:t,loading:"lazy",decoding:"async",draggable:!1,onLoad:v,onError:T}),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":A,children:c==="blocked"?n.jsx(um,{size:18}):n.jsx(Mr,{size:18})})]})}const Dg={note:sr,text:ut,"ai-task":oo,image:so,mask:so,video:ro,embed:on,code:nn,markdown:ut,"csv-table":ut,memo:sr,pdf:ut,file:Xl,directory:mm,"template-launcher":ut,"remote-monitor":or,"remote-control":or},Ws=[{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."}],ul=500,Bg=48,Og=new Set(["mindcanvasagent","agentcommand"]),$g=new Set(["codenote","code-note"]),Fg=["multidesktopmonitor","remotehubmonitor","remotefleetmonitor","smartviewmonitor"],Ug=["remotedevice","remotefleetdevice","remotecontrol"];function zg(e){const t=sn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=sn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=sn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-monitor"||t==="remotefleetmonitor"||o==="fleet-monitor"||r==="remote-fleet@1"||kd(e,["RemoteFleetViewMode","RemoteFleetHubStatus","RemoteFleetDevicesJson","RemoteFleetDeviceCount","RemoteFleetConnectedDeviceCount","RemoteFleetProjectionMode","RemoteFleetCanvasPagination","RemoteHub","RemoteRoute","RemotePage","RemoteVisibleBudget"])||Sd(e,Fg,["remote","monitor"])}function Wg(e){const t=sn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=sn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=sn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-control"||t==="remotefleetdevice"||o==="fleet-device"||r==="remote-fleet-device@1"||kd(e,["RemoteFleetDeviceId","RemoteFleetDeviceName","RemoteFleetDevicePlatform","RemoteFleetDeviceConnected","RemoteFleetDeviceCanControl","RemoteFleetSourceMonitorNodeId"])||Sd(e,Ug,["remote","control"])}function Sd(e,t,o){const r=(e.tags??[]).map(y=>y.trim().toLowerCase()).filter(Boolean),d=o.every(y=>r.includes(y)),u=[e.title,e.body,e.sourceFilePath,e.assetUrl,...r].join(" ").toLowerCase().replace(/[^a-z0-9]+/g,"");return d||t.some(y=>u.includes(y))}function sn(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 kd(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 br=[{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"}],Hg=g.memo(function({node:t,selected:o,pulsing:r,connectionDraft:d,onSelect:p,onDragStart:u,onResizeStart:y,onPatch:c,onDelete:x,onDuplicate:v,onRun:T,onPin:A,onOpenResult:P,onToggleAiReference:Y,onCopyNode:B,onCopyEmbedReference:z,onFitNodeHeight:q,onToggleNodeExpanded:ee,onToggleWordWrap:ke,onStageCompany:de,onOpenCompanyGraph:we,onSyncCompanyGoal:ce,onRefreshCompany:He,onSetCompanyStatus:Ve,onRemoveCompany:ue,onOpenAsset:De,onOpenDirectorySettings:K,onScanDirectory:$,onCreateRemoteControl:pt,onGenerateTemplateCard:F}){var oa,Pa,$t,_a,Q,Ue,Da,Cn,I,G,te,Sn,It,Ba,Oa,kn,wn,$a,vn,sa,jn,Fa,ra,Ft,Te,Me,Ua,In,Nn,ia,la,za,Ut,Wa,rt;const Be=String(((oa=t.metadata)==null?void 0:oa.AutomationNodeKind)||((Pa=t.metadata)==null?void 0:Pa.AutomationTemplateKey)||(($t=t.metadata)==null?void 0:$t.AutomationInferredKind)||"").trim().toLowerCase(),gt=String(((_a=t.metadata)==null?void 0:_a.SemanticType)||((Q=t.metadata)==null?void 0:Q.semanticType)||"").trim().toLowerCase(),O=t.kind==="memo"&&Og.has(gt),Re=t.kind==="memo"&&$g.has(gt),xe=String(((Ue=t.metadata)==null?void 0:Ue.AgentCommandStatus)||"Draft"),St=String(((Da=t.metadata)==null?void 0:Da.AgentCommandMode)||"Task"),Oe=String(((Cn=t.metadata)==null?void 0:Cn.AgentCommandRequestedRole)||"Researcher"),Tt=String(((I=t.metadata)==null?void 0:I.CodeNoteStatus)||"Draft"),Xt=String(((G=t.metadata)==null?void 0:G.CodeNoteSyncState)||"Unlinked"),dn=String(((te=t.metadata)==null?void 0:te.CodeNoteKind)||"Feature"),Ee=O?oo:Re?nn:Be==="image-generate"?so:Be==="video-generate"?ro:Dg[t.kind],ns=d&&d.from!==t.id,ka=t.kind==="ai-task",ht=t.kind==="pdf"||t.kind==="file"||t.kind==="directory",fe=zg(t),re=Wg(t),ft=fe||re,qe=fe?"monitor":re?"control":"",bt=t.kind==="template-launcher"||String(((Sn=t.metadata)==null?void 0:Sn.semanticType)||((It=t.metadata)==null?void 0:It.SemanticType)||"").toLowerCase()==="templatelauncher",ie=t.kind==="video",be=t.kind==="embed",Pe=t.kind==="mask",Lt=t.kind==="memo",me=t.kind==="markdown",wa=t.kind==="csv-table",_e=Lt?Qg(t):null,Je=g.useRef(null),yt=ie?wd(t):"",Ye=ie?th(t):"",ye=be?ah(t):"",cn=be?nh(t):"",co=be?oh(t,ye):"",qt=be?sh(t):"",Ce=(((Ba=t.imageStack)==null?void 0:Ba.variants)??[]).filter(b=>!!b.imageUrl),tt=Ce.find(b=>{var L;return b.variantId===((L=t.imageStack)==null?void 0:L.activeVariantId)})??Ce[0]??null,Et=t.kind==="image"||Pe?(tt==null?void 0:tt.imageUrl)||Br(t):"",uo=tt?Ce.findIndex(b=>b.variantId===tt.variantId):-1,va=!Et&&!ht&&!ft&&!bt&&!ie&&!be,kt=va&&!Lt,Ne=t.isExpanded===!1&&Number(t.originalHeight??0)>t.height+1,$e=!ft&&!["image","mask","video","embed","pdf","file","directory","template-launcher","remote-monitor","remote-control"].includes(t.kind),Pt=t.aiEnabled!==!1,un=eh(t),pe=!!(t.isChunkedText||((Oa=t.metadata)==null?void 0:Oa.IsChunkedText)==="true"),_t=Number(t.totalLineCount??((kn=t.metadata)==null?void 0:kn.TotalLineCount)??0),mo=t.sourceFilePath||((wn=t.metadata)==null?void 0:wn.FileName)||t.title,os=pe?n.jsxs("div",{className:"node-chunked-text-state","data-testid":"node-chunked-text-state",title:mo,children:[n.jsx(ut,{size:12}),n.jsx("strong",{children:"Chunked text"}),Number.isFinite(_t)&&_t>0&&n.jsxs("span",{children:[_t.toLocaleString()," lines"]})]}):null,Ae=t.kind==="directory"?($a=t.metadata)==null?void 0:$a.Include:null,xt=t.kind==="directory"?(vn=t.metadata)==null?void 0:vn.Exclude:null,Dt=t.kind==="directory"?(sa=t.metadata)==null?void 0:sa.DirectoryFileCount:null,ja=t.kind==="directory"?(jn=t.metadata)==null?void 0:jn.DirectoryDirCount:null,Ia=t.kind==="directory"?(Fa=t.metadata)==null?void 0:Fa.DirectoryLastScanUtc:null,[Fe,mn]=g.useState(!1),[Jt,pn]=g.useState(null),[Na,Zt]=g.useState(((ra=t.metadata)==null?void 0:ra.CompanyExecutionMode)||"Auto"),[Qt,po]=g.useState(((Ft=t.metadata)==null?void 0:Ft.CompanySubAgents)!=="false"),[ea,ta]=g.useState(!1),[at,gn]=g.useState(null),hn=g.useMemo(()=>wa?Kg(t.body,at):null,[at,wa,t.body]),Z=g.useMemo(()=>bt?Hl(t.body):null,[bt,t.body]),Ze=(Z==null?void 0:Z.options.find(b=>b.id===Z.selectedOptionId))??(Z==null?void 0:Z.options[0])??null,nt=Lu(Z),wt=Ws.find(b=>b.key===Na)||Ws[0],Ct=String(((Te=t.metadata)==null?void 0:Te.CompanyStatus)||(t.companyMode?"Staged":"")).trim(),go=Ct.toLowerCase(),ss=go==="paused",Aa=go==="archived",fn=b=>{b.stopPropagation();const L=b.currentTarget.getBoundingClientRect();pn(Yg(L)),mn(ne=>!ne)},aa=b=>{b.stopPropagation(),de(t.id,{executionMode:wt.key,enableSubAgents:Qt}),mn(!1)},bn=b=>{b.stopPropagation(),we(t.id)},vt=(b,L)=>{L.stopPropagation();const ne=Ce.find(ve=>ve.variantId===b);!ne||!t.imageStack||ne.variantId===t.imageStack.activeVariantId||(f.emit("node.imageStack.variant",{nodeId:t.id,variantId:ne.variantId,variantCount:Ce.length}),c(t.id,{imageUrl:ne.imageUrl,imageStack:{...t.imageStack,activeVariantId:ne.variantId,variants:Ce,updatedAtUtc:new Date().toISOString()},metadata:{...t.metadata??{},ImageStackActiveVariantId:ne.variantId}}))},ho=(b,L)=>{if(L.stopPropagation(),!!Lt){if((_e==null?void 0:_e.key)===b){ta(!1);return}f.emit("node.memoColor.changed",{id:t.id,colorKey:b}),c(t.id,{metadata:{...t.metadata??{},memoColor:b,memoColorIsCustom:"true"}}),ta(!1)}},na=b=>{var Wt,ca;if(b.stopPropagation(),!O)return;const L=(t.body||t.title||"Agent command objective").trim(),ne=["Clarify the objective and constraints.","Collect linked canvas context or code notes.","Draft an execution plan before external adapter use."],ve=["canvas-context","agent-command-planning","adapter-gated-execution"],zt=["Canvas.ListAgentCommands","Canvas.UpdateAgentCommand","Canvas.PlanAgentCommand","Canvas.SetAgentCommandState"],it=["MindCanvasAgent",St,Oe],da=["Local React plan staged for this Agent Command.",`Role: ${Oe}`,`Mode: ${St}`,`Objective: ${L.slice(0,220)}`,"External execution remains adapter-gated until LocalBridge/agent runtime is available."].join(`
2
- `);f.emit("mindcanvas.agentCommand.planned",{id:t.id,mode:St,requestedRole:Oe,adapterState:((Wt=t.metadata)==null?void 0:Wt.AdapterState)??"adapter-gated"}),c(t.id,{tags:["Agent Command",Oe,"Planned"],metadata:{...t.metadata??{},AgentCommandStatus:"Planned",AgentCommandPlannerSummary:da,AgentCommandPlanSteps:JSON.stringify(ne),AgentCommandPlannedSkills:JSON.stringify(ve),AgentCommandPlannedTools:JSON.stringify(zt),AgentCommandPlannedConcepts:JSON.stringify(it),AgentCommandLastExplorationPhase:"planned-local",AdapterState:((ca=t.metadata)==null?void 0:ca.AdapterState)??"adapter-gated"}})},Bt=b=>{var zt,it;if(b.stopPropagation(),!O)return;const L=new Date().toISOString(),ne=[`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
- `),ve=[`${L} Local React execution staged.`,`${L} Adapter gated; no external tools invoked.`];f.emit("mindcanvas.agentCommand.executed.local",{id:t.id,mode:St,requestedRole:Oe,adapterState:((zt=t.metadata)==null?void 0:zt.AdapterState)??"adapter-gated"}),c(t.id,{status:"done",result:ne,tags:["Agent Command",Oe,"Completed"],metadata:{...t.metadata??{},AgentCommandStatus:"Completed",AgentCommandLastExecutedAtUtc:L,AgentCommandConsoleLogs:JSON.stringify(ve),AgentCommandResultLinks:JSON.stringify([]),AdapterState:((it=t.metadata)==null?void 0:it.AdapterState)??"adapter-gated"}})},Ma=(b,L,ne,ve)=>{var it,da,Wt;if(b.stopPropagation(),!Re)return;const zt=L==="Implemented"?JSON.stringify([`local-code-note://${t.id}/implementation-handoff.md`]):((it=t.metadata)==null?void 0:it.CodeNoteOutputArtifacts)||"[]";f.emit("mindcanvas.codeNote.state",{id:t.id,status:L,syncState:ne,reason:ve,adapterState:((da=t.metadata)==null?void 0:da.AdapterState)??"local-canvas-only"}),c(t.id,{tags:["Code Note",L,ne],metadata:{...t.metadata??{},CodeNoteStatus:L,CodeNoteSyncState:ne,CodeNoteOutputArtifacts:zt,...L==="Implemented"||L==="Reviewed"?{CodeNoteLastAppliedAtUtc:new Date().toISOString()}:{},AdapterState:((Wt=t.metadata)==null?void 0:Wt.AdapterState)??"local-canvas-only"}})},Qe=()=>{po(b=>!b)},yn=async b=>{if(b.stopPropagation(),!Ye||!Je.current){f.emit("node.video.unavailable",{id:t.id,reason:Ye?"element-missing":"source-missing"});return}try{await Je.current.play(),f.emit("node.video.play",{id:t.id,sourceKind:pl(Ye)})}catch(L){f.emit("node.video.unavailable",{id:t.id,reason:L instanceof Error?L.message:String(L)})}},jt=b=>{if(b.stopPropagation(),!Ye||!Je.current){f.emit("node.video.unavailable",{id:t.id,reason:Ye?"element-missing":"source-missing"});return}Je.current.pause(),f.emit("node.video.pause",{id:t.id,sourceKind:pl(Ye)})},Ra=b=>{b.stopPropagation(),ye&&z(t.id,ye)},Ta=b=>{c(t.id,{body:JSON.stringify(b),metadata:{...t.metadata??{},templateLauncherSelectedOptionId:b.selectedOptionId??""}})},ot=(b,L)=>{if(L.stopPropagation(),!Z)return;const ne=_u(Z,b);Ta(ne),f.emit("templateCard.option.select",{nodeId:t.id,optionId:ne.selectedOptionId??null})},La=(b,L)=>{if(!Z)return;const ne=Du(Z,b,L);Ta(ne),f.emit("templateCard.input.patch",{nodeId:t.id,key:b})},Ea=b=>{b.stopPropagation(),!(!Z||nt)&&F(t.id,Z.selectedOptionId??null,Z.inputValues)},ge=$e&&Fe?n.jsxs("div",{className:"node-company-launcher","data-testid":"node-company-launcher",style:Jt?{left:Jt.left,top:Jt.top}:void 0,onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:[n.jsx("div",{className:"node-company-launcher__eyebrow",children:"Run As Company"}),n.jsx("h4",{children:"Turn this note into a background AI company"}),n.jsx("p",{children:"Pick the operating mode to stage on this node. External CompanyCore execution stays adapter-gated."}),n.jsx("div",{className:"node-company-mode-list",children:Ws.map(b=>n.jsxs("button",{type:"button",className:b.key===wt.key?"is-selected":"","data-company-mode":b.key,onClick:()=>Zt(b.key),children:[n.jsx("strong",{children:b.label}),n.jsx("span",{children:b.description})]},b.key))}),n.jsxs("button",{type:"button",className:"node-company-subagents","aria-pressed":Qt,onClick:b=>{b.stopPropagation(),Qe()},children:[n.jsx("span",{className:"node-company-toggle-indicator","aria-hidden":"true",children:Qt?"On":"Off"}),n.jsxs("span",{children:[n.jsx(ql,{size:13}),"Enable sub-agents for exploration waves and specialist handoff"]})]}),n.jsxs("div",{className:"node-company-launcher__actions",children:[n.jsx("button",{type:"button",className:"btn btn-ghost",onClick:()=>mn(!1),children:"Cancel"}),n.jsx("button",{type:"button",className:"btn btn-primary","data-testid":"node-company-run-confirm",onClick:aa,children:"Stage Company"})]})]}):null,xn={width:t.width,height:t.height,transform:`translate3d(${t.x}px, ${t.y}px, 0)`,..._e?{"--memo-bg":_e.surface,"--memo-border":_e.border,"--memo-ink":_e.ink,"--memo-ring":_e.ring,"--memo-accent":_e.swatch}:{}},le=n.jsxs(n.Fragment,{children:[kt&&n.jsx("button",{type:"button",title:Pt?"Disable AI reference":"Enable AI reference","aria-label":Pt?"Disable AI reference":"Enable AI reference",className:Pt?"is-active-ai":"is-inactive-ai",onPointerDown:b=>b.stopPropagation(),onClick:()=>Y(t.id),children:n.jsx(pm,{size:13})}),Lt&&n.jsx("button",{type:"button",title:"Change memo color","aria-label":"Change memo color","aria-pressed":ea,className:"is-memo-color-action","data-testid":"node-memo-color-open",onPointerDown:b=>b.stopPropagation(),onClick:b=>{b.stopPropagation(),ta(L=>!L)},children:n.jsx(Jl,{size:13})}),t.kind==="code"&&n.jsx("button",{type:"button",title:t.wordWrap===!1?"Enable word wrap":"Disable word wrap","aria-label":t.wordWrap===!1?"Enable word wrap":"Disable word wrap",onPointerDown:b=>b.stopPropagation(),onClick:()=>ke(t.id),children:n.jsx(gm,{size:13})}),n.jsx("button",{type:"button",title:Et?"Copy image to clipboard":"Copy content","aria-label":Et?"Copy image to clipboard":"Copy content",onPointerDown:b=>b.stopPropagation(),onClick:()=>B(t.id),children:n.jsx(eo,{size:13})}),n.jsx("button",{type:"button",title:"Duplicate node","aria-label":"Duplicate node","data-testid":"node-duplicate",onPointerDown:b=>b.stopPropagation(),onClick:()=>v(t.id),children:n.jsx(Zl,{size:13})}),va&&n.jsx("button",{type:"button",title:"Fit text height","aria-label":"Fit text height",onPointerDown:b=>b.stopPropagation(),onClick:()=>q(t.id),children:n.jsx(hm,{size:13})}),va&&n.jsx("button",{type:"button",title:Ne?"Expand node":"Collapse node","aria-label":Ne?"Expand node":"Collapse node","aria-pressed":Ne,onPointerDown:b=>b.stopPropagation(),onClick:()=>ee(t.id),children:Ne?n.jsx(Yi,{size:13}):n.jsx(fm,{size:13})}),ka&&n.jsx("button",{type:"button",title:"Run node",onPointerDown:b=>b.stopPropagation(),onClick:()=>T(t.id),children:n.jsx(ya,{size:13})}),$e&&n.jsx("button",{type:"button",title:t.companyMode?"Open Company graph":"Run this note as Company","aria-label":t.companyMode?"Open Company graph":"Run this note as Company",className:t.companyMode?"is-company-action":"","data-testid":t.companyMode?"node-company-graph-open":"node-company-run-open",onPointerDown:b=>b.stopPropagation(),onClick:t.companyMode?bn:fn,children:n.jsx(Gi,{size:13})}),n.jsx("button",{type:"button",title:"Delete node","aria-label":"Delete node","data-testid":"node-delete",onPointerDown:b=>b.stopPropagation(),onClick:()=>x(t.id),children:n.jsx(Vo,{size:13})})]}),Ge=ka?n.jsxs("div",{className:"node-result-row","data-testid":"node-external-pins",children:[n.jsxs("button",{className:`node-pin node-pin--context ${ns?"can-receive":""}`,type:"button",title:"Context input",onPointerDown:b=>b.stopPropagation(),onClick:b=>{b.stopPropagation(),A(t.id,"context")},children:[n.jsx(Ki,{size:10}),"Context"]}),n.jsxs("button",{className:`node-pin node-pin--result ${t.result?"has-result":""}`,type:"button",title:"Drag to connect this result to an input pin. Click to view the result.","data-testid":"node-result-open",onPointerDown:b=>b.stopPropagation(),onClick:b=>{b.stopPropagation(),t.result?P(t.id):A(t.id,"result")},children:[n.jsx(Yi,{size:11}),"Result"]})]}):n.jsxs("button",{className:`node-context-source ${d?"can-receive":""}`,type:"button",title:"Use this node as AI Task context",onPointerDown:b=>b.stopPropagation(),onClick:b=>{b.stopPropagation(),A(t.id,"context")},children:[n.jsx(Ki,{size:10}),n.jsx("span",{children:"Context"})]}),fo=Pe||Ce.length>1||be||ie?n.jsxs("div",{className:"node-surface-badges","data-testid":"node-surface-badges",children:[Pe&&n.jsx("span",{className:"node-mask-badge",title:"Image edit mask reference",children:"Mask"}),Ce.length>1&&n.jsxs("span",{className:"node-image-stack-badge",title:"Image stack variants",children:[Math.max(1,uo+1),"/",Ce.length]}),be&&n.jsx("span",{className:"node-embed-badge",children:cn==="youtube"?"YouTube":"Embed"}),ie&&n.jsx("span",{className:"node-video-badge",children:((Me=t.metadata)==null?void 0:Me.MediaModel)||((Ua=t.metadata)==null?void 0:Ua.MediaProvider)||"Video"})]}):null,st=Ce.length>1||be||ie||ht?n.jsxs("div",{className:"node-surface-actions","data-testid":"node-surface-actions",children:[Ce.length>1&&n.jsx("div",{className:"node-image-stack-rail","aria-label":"Image stack variants",children:Ce.map((b,L)=>n.jsx("button",{type:"button",className:b.variantId===(tt==null?void 0:tt.variantId)?"is-active":"",title:b.title||b.caption||`Variant ${L+1}`,"aria-label":`Show image variant ${L+1}`,onPointerDown:ne=>ne.stopPropagation(),onClick:ne=>vt(b.variantId,ne),children:n.jsx(zs,{src:b.imageUrl,traceId:`${t.id}:${b.variantId||L}`,kind:"image-stack-variant",testId:"node-image-stack-thumb"})},b.variantId||`${b.imageUrl}-${L}`))}),be&&n.jsxs("div",{className:"node-embed-actions",children:[n.jsxs("button",{type:"button",title:"Open embed","aria-label":"Open embed",onPointerDown:b=>b.stopPropagation(),onClick:b=>{b.stopPropagation(),ye&&De(t,"external")},children:[n.jsx(on,{size:13}),n.jsx("span",{children:"Open"})]}),n.jsxs("button",{type:"button",title:"Copy URL","aria-label":"Copy URL",onPointerDown:b=>b.stopPropagation(),onClick:Ra,children:[n.jsx(eo,{size:13}),n.jsx("span",{children:"Copy URL"})]})]}),ie&&n.jsxs("div",{className:"node-video-actions",children:[n.jsxs("button",{type:"button",title:"Play video","aria-label":"Play video","data-testid":"node-video-play",onPointerDown:b=>b.stopPropagation(),onClick:yn,children:[n.jsx(ya,{size:13}),n.jsx("span",{children:"Play"})]}),n.jsxs("button",{type:"button",title:"Pause video","aria-label":"Pause video","data-testid":"node-video-pause",onPointerDown:b=>b.stopPropagation(),onClick:jt,children:[n.jsx(Yo,{size:13}),n.jsx("span",{children:"Pause"})]})]}),ht&&n.jsxs("div",{className:"node-asset-actions",children:[t.kind==="pdf"&&n.jsxs("button",{type:"button",title:"Preview PDF","data-testid":"node-pdf-preview",onPointerDown:b=>b.stopPropagation(),onClick:()=>De(t,"preview"),children:[n.jsx(bm,{size:13}),n.jsx("span",{children:"Preview"})]}),t.kind!=="directory"&&n.jsxs("button",{type:"button",title:"Open in new tab",onPointerDown:b=>b.stopPropagation(),onClick:()=>De(t,"external"),children:[n.jsx(on,{size:13}),n.jsx("span",{children:"Open"})]}),t.kind==="directory"&&n.jsxs("button",{type:"button",title:"Scan folder","data-testid":"directory-scan",onPointerDown:b=>b.stopPropagation(),onClick:()=>$(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:b=>b.stopPropagation(),onClick:()=>K(t.id),children:[n.jsx(rr,{size:13}),n.jsx("span",{children:"Settings"})]})]})]}):null,Ot=ft?null:n.jsxs("div",{className:"node-external-rail","data-testid":"node-external-rail",onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:[n.jsxs("div",{className:"node-external-rail__meta",children:[n.jsxs("div",{className:"node-tags","data-testid":"node-external-tags",children:[(t.tags??[t.kind]).slice(0,3).map(b=>n.jsx("span",{children:b},b)),t.status&&n.jsx("span",{className:`node-status node-status--${t.status}`,children:t.status})]}),fo,os,O&&n.jsxs("div",{className:"node-agent-command-state","data-testid":"node-agent-command-state","data-agent-command-status":xe,"data-agent-command-mode":St,"data-agent-command-role":Oe,"data-agent-command-adapter-state":((In=t.metadata)==null?void 0:In.AdapterState)||"adapter-gated",children:[n.jsx(oo,{size:12}),n.jsx("strong",{children:"AC"}),n.jsx("span",{children:xe}),n.jsx("span",{children:St}),n.jsx("span",{children:Oe})]}),Re&&n.jsxs("div",{className:"node-code-note-state","data-testid":"node-code-note-state","data-code-note-status":Tt,"data-code-note-sync-state":Xt,"data-code-note-kind":dn,"data-code-note-adapter-state":((Nn=t.metadata)==null?void 0:Nn.AdapterState)||"local-canvas-only",children:[n.jsx(nn,{size:12}),n.jsx("strong",{children:"CN"}),n.jsx("span",{children:Tt}),n.jsx("span",{children:Xt}),n.jsx("span",{children:dn})]}),t.companyMode&&n.jsxs("div",{className:"node-company-state","data-testid":"node-company-state",children:[n.jsx(Gi,{size:12}),n.jsx("strong",{children:((ia=t.metadata)==null?void 0:ia.CompanyExecutionModeLabel)||"Company staged"}),n.jsx("span",{children:((la=t.metadata)==null?void 0:la.CompanySubAgents)==="false"?"single-agent":"sub-agents"})]})]}),n.jsxs("div",{className:"node-external-rail__actions",children:[st,n.jsx("div",{className:"node-external-rail__pins",children:Ge}),n.jsx("div",{className:"node-actions","data-testid":"node-actions",children:le}),O&&n.jsxs("div",{className:"node-agent-command-actions","data-testid":"node-agent-command-actions",onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:[n.jsx("button",{type:"button","data-testid":"node-agent-command-plan","data-agent-command-action":"plan",onClick:na,children:"Plan"}),n.jsx("button",{type:"button","data-testid":"node-agent-command-execute","data-agent-command-action":"execute",disabled:xe==="Running",onClick:Bt,children:"Execute"})]}),Re&&n.jsxs("div",{className:"node-code-note-actions","data-testid":"node-code-note-actions",onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:[n.jsx("button",{type:"button","data-testid":"node-code-note-approve","data-code-note-action":"approve",onClick:b=>Ma(b,"Approved","Planned","approve-local"),children:"Approve"}),n.jsx("button",{type:"button","data-testid":"node-code-note-review","data-code-note-action":"review",onClick:b=>Ma(b,"Reviewed","InSync","review-local"),children:"Review"}),n.jsx("button",{type:"button","data-testid":"node-code-note-out-of-sync","data-code-note-action":"out-of-sync",onClick:b=>Ma(b,Tt,"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":Ct||"Staged",onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:[n.jsx("button",{type:"button",title:"Update Company goal from this note","aria-label":"Update Company goal from this note","data-testid":"node-company-sync-goal",disabled:Aa,onClick:()=>ce(t.id),children:n.jsx(Ql,{size:12})}),n.jsx("button",{type:"button",title:"Refresh Company status","aria-label":"Refresh Company status","data-testid":"node-company-refresh",onClick:()=>He(t.id),children:n.jsx(an,{size:12})}),Aa?n.jsx("button",{type:"button",title:"Company is archived","aria-label":"Company is archived","data-testid":"node-company-archived",disabled:!0,children:n.jsx(ir,{size:12})}):ss?n.jsx("button",{type:"button",title:"Resume Company","aria-label":"Resume Company","data-testid":"node-company-resume",onClick:()=>Ve(t.id,"Staged"),children:n.jsx(ya,{size:12})}):n.jsx("button",{type:"button",title:"Pause Company","aria-label":"Pause Company","data-testid":"node-company-pause",onClick:()=>Ve(t.id,"Paused"),children:n.jsx(Yo,{size:12})}),!Aa&&n.jsx("button",{type:"button",title:"Archive Company","aria-label":"Archive Company","data-testid":"node-company-archive",onClick:()=>Ve(t.id,"Archived"),children:n.jsx(ir,{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:()=>ue(t.id),children:n.jsx(ct,{size:12})})]})]})]});return n.jsxs("article",{className:`canvas-node canvas-node--${t.kind} ${ft?"canvas-node--remote-surface":""} ${fe?"canvas-node--remote-monitor-surface":""} ${re?"canvas-node--remote-control-surface":""} ${Be?`canvas-node--automation-${Be}`:""} ${O?"canvas-node--agent-command":""} ${Re?"canvas-node--code-note":""} ${o?"is-selected":""} ${r?"is-pulsing":""} ${Pt?"":"is-ai-disabled"} ${t.wordWrap===!1?"is-nowrap":""} ${Ne?"is-collapsed":""} ${t.companyMode?`is-company-${t.companyMode}`:""}`,style:xn,"data-node-id":t.id,"data-automation-node-kind":Be||void 0,"data-automation-external-policy":((za=t.metadata)==null?void 0:za.AutomationExternalActionPolicy)||void 0,"data-media-generation-contract":((Ut=t.metadata)==null?void 0:Ut.MediaGenerationContract)||void 0,"data-agent-command-node":O?"true":void 0,"data-agent-command-status":O?xe:void 0,"data-agent-command-mode":O?St:void 0,"data-agent-command-role":O?Oe:void 0,"data-code-note-node":Re?"true":void 0,"data-code-note-status":Re?Tt:void 0,"data-code-note-sync-state":Re?Xt:void 0,"data-code-note-kind":Re?dn:void 0,"data-remote-surface-chrome":ft?"self-contained":void 0,"data-remote-surface-kind":qe||void 0,"data-remote-surface-title-owner":ft?"inner-remote-view":void 0,"data-remote-surface-scroll-owner":ft?"remote-page-rail":void 0,onPointerDown:b=>{p(t.id,b.shiftKey||b.metaKey||b.ctrlKey),u(t.id,b)},onDoubleClick:b=>{if(t.kind!=="directory")return;const L=b.target instanceof HTMLElement?b.target:null;L!=null&&L.closest('button,input,textarea,select,[contenteditable="true"],[contenteditable=""]')||(b.stopPropagation(),$(t.id))},children:[!ft&&n.jsxs("div",{className:"node-header",children:[n.jsx("span",{className:"node-kind",children:n.jsx(Ee,{size:14})}),n.jsx("input",{value:t.title,"aria-label":"Node title",readOnly:bt,onPointerDown:b=>b.stopPropagation(),onChange:b=>{bt||c(t.id,{title:b.target.value})}})]}),ge&&typeof document<"u"?wu.createPortal(ge,document.body):ge,Lt&&ea&&_e&&n.jsx("div",{className:"node-memo-palette","data-testid":"node-memo-palette",onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:br.map(b=>n.jsx("button",{type:"button",className:b.key===_e.key?"is-active":"",title:`${b.label} memo color`,"aria-label":`${b.label} memo color`,"aria-pressed":b.key===_e.key,"data-memo-color":b.key,style:{"--memo-swatch":b.swatch,"--memo-swatch-ring":b.ring},onPointerDown:L=>L.stopPropagation(),onClick:L=>ho(b.key,L)},b.key))}),Et?n.jsx("div",{className:`node-image-wrap ${Ce.length>1?"node-image-wrap--stack":""} ${Pe?"node-image-wrap--mask":""}`,"data-testid":Pe?"node-mask-preview":Ce.length>1?"node-image-stack":void 0,children:n.jsx(zs,{src:Et,traceId:t.id,kind:Pe?"mask":"node-image",testId:"node-secure-image"})}):fe?n.jsx(Eu,{node:t,onPatch:c,onCreateRemoteControl:pt}):re?n.jsx(Pu,{node:t,onPatch:c}):bt?n.jsx("div",{className:"node-template-card","data-testid":"node-template-card",children:Z&&Ze?n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"node-template-card__summary",children:[n.jsx("strong",{children:Z.prompt||Z.description}),n.jsx("span",{children:Ze.description||Z.description})]}),n.jsx("div",{className:"node-template-card__options","data-testid":"node-template-card-options",children:Z.options.map(b=>n.jsxs("button",{type:"button",className:b.id===Ze.id?"is-active":"","data-testid":"node-template-card-option","data-option-id":b.id,onPointerDown:L=>L.stopPropagation(),onClick:L=>ot(b.id,L),children:[n.jsx("strong",{children:b.label}),n.jsx("span",{children:b.description})]},b.id||b.templateId))}),n.jsxs("div",{className:"node-template-card__inputs","data-testid":"node-template-card-inputs",children:[Ze.inputs.map(b=>n.jsx(Vg,{input:b,value:Z.inputValues[b.key]??"",onChange:L=>La(b.key,L)},b.key)),Ze.inputs.length===0&&n.jsx("p",{className:"node-template-card__empty",children:Z.noInputsLabel||"No inputs needed."})]}),nt&&n.jsx("div",{className:"node-template-card__validation",children:nt}),n.jsxs("button",{type:"button",className:"node-template-card__generate","data-testid":"node-template-card-generate",disabled:!!nt,onPointerDown:Ea,onClick:b=>b.stopPropagation(),children:[n.jsx(ya,{size:13}),n.jsx("span",{children:Z.generateLabel||Z.actionLabel||"Generate"})]})]}):n.jsx("div",{className:"node-template-card__missing",children:"Template card payload is unavailable."})}):be?n.jsxs("div",{className:`node-embed-card ${qt?"has-embed-thumbnail":"is-embed-link"}`,"data-testid":"node-embed-card",children:[n.jsx("div",{className:"node-embed-preview",children:qt?n.jsx(zs,{src:qt,traceId:t.id,kind:"embed-thumbnail",testId:"node-embed-thumbnail"}):n.jsxs("div",{className:"node-embed-placeholder",children:[n.jsx(on,{size:24}),n.jsx("strong",{children:cn==="youtube"?"YouTube":"Web embed"}),n.jsx("span",{children:co||ye||"External link"})]})}),n.jsx("textarea",{value:t.body,"aria-label":"Embed URL or description",spellCheck:!1,onPointerDown:b=>b.stopPropagation(),onChange:b=>{const L=b.target.value;c(t.id,{body:L,assetUrl:L,metadata:{...t.metadata??{},sourceUrl:L,url:L}})}}),ye&&n.jsx("span",{className:"node-embed-source",title:ye,children:ye})]}):ie?n.jsxs("div",{className:`node-video-card ${Ye?"has-video-source":"is-video-prompt"}`,"data-testid":"node-video-card",children:[Ye?n.jsx("video",{ref:Je,src:Ye,className:"node-video-player","data-testid":"node-video-player",controls:!0,preload:"metadata",onPointerDown:b=>b.stopPropagation()}):n.jsxs("div",{className:"node-video-placeholder",children:[n.jsx(ro,{size:24}),n.jsx("strong",{children:"Video prompt"}),n.jsx("span",{children:((Wa=t.metadata)==null?void 0:Wa.MediaModel)||((rt=t.metadata)==null?void 0:rt.MediaProvider)||"Adapter gated"})]}),n.jsx("textarea",{value:t.body,"aria-label":"Video prompt or source",spellCheck:!1,onPointerDown:b=>b.stopPropagation(),onChange:b=>c(t.id,{body:b.target.value})}),Ye&&n.jsx("span",{className:"node-video-source",title:yt,children:yt})]}):ht?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(Ee,{size:28})}),n.jsxs("div",{className:"node-asset-copy",children:[n.jsx("strong",{title:un,children:un}),n.jsx("span",{children:t.kind==="directory"?"Directory reference":t.kind==="pdf"?"PDF document":"File reference"}),t.kind==="directory"&&(Ae||xt||Dt||ja||Ia)&&n.jsxs("dl",{className:"node-asset-meta","data-testid":"node-directory-meta",children:[(Dt||ja)&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Scanned"}),n.jsxs("dd",{children:[Number(Dt??0).toLocaleString()," files / ",Number(ja??0).toLocaleString()," folders"]})]}),Ae&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Include"}),n.jsx("dd",{children:Ae})]}),xt&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Exclude"}),n.jsx("dd",{children:xt})]}),Ia&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Updated"}),n.jsx("dd",{children:new Date(Ia).toLocaleString()})]})]})]})]}):wa?n.jsxs("div",{className:"node-csv-card","data-testid":"node-csv-card",children:[n.jsx(Gg,{preview:hn,sort:at,onSort:b=>{const L=(at==null?void 0:at.columnIndex)===b&&at.direction==="asc"?"desc":"asc";gn({columnIndex:b,direction:L}),f.emit("node.csvTable.sort",{id:t.id,columnIndex:b,direction:L})}}),n.jsx("textarea",{value:t.body,"aria-label":"CSV source",spellCheck:!1,wrap:"off",onPointerDown:b=>b.stopPropagation(),onChange:b=>c(t.id,{body:b.target.value})})]}):me?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(Jg,{value:t.body})}),n.jsx("textarea",{value:t.body,"aria-label":"Markdown source",spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:b=>b.stopPropagation(),onChange:b=>c(t.id,{body:b.target.value})})]}):n.jsx(n.Fragment,{children:n.jsx("textarea",{value:t.body,"aria-label":"Node body",spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:b=>b.stopPropagation(),onChange:b=>c(t.id,{body:b.target.value})})}),Ot,n.jsx("button",{type:"button",className:"node-resize-handle",title:"Resize node","aria-label":"Resize node",onPointerDown:b=>y(t.id,b)})]})});function Vg({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 Yg(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),u=e.bottom+8,y=e.top-r-8,c=Math.max(12,window.innerHeight-r-12),x=u<=c?u:Math.max(12,y);return{left:p,top:Math.min(x,c)}}function Gg({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,u=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}`} ${u}`,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,u)=>n.jsx("td",{className:"csv-table-cell",children:r[u]??""},`csv-cell-${d}-${u}`))},`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 Kg(e,t){const o=Xg(e,ul+1);if(o.length===0)return null;const r=Math.min(Bg,Math.max(...o.map(c=>c.length),1)),d=ml(o[0],r).map((c,x)=>c.trim()||`Column ${x+1}`),p=o.slice(1,ul+1).map(c=>ml(c,r)),u=t?[...p].sort((c,x)=>qg(c[t.columnIndex]??"",x[t.columnIndex]??"",t.direction)):p,y=Math.max(0,String(e||"").split(/\r\n|\n|\r/).filter(c=>c.length>0).length-1);return{headers:d,rows:u,totalRows:y,columnCount:r,renderedRows:u.length,truncated:y>u.length}}function Xg(e,t){const o=[];let r=[],d="",p=!1;const u=String(e||"").replace(/\r\n/g,`
4
- `).replace(/\r/g,`
5
- `);for(let y=0;y<u.length;y+=1){const c=u[y],x=u[y+1];if(c==='"'){p&&x==='"'?(d+='"',y+=1):p=!p;continue}if(c===","&&!p){r.push(d),d="";continue}if(c===`
6
- `&&!p){if(r.push(d),r.some(v=>v.trim().length>0)&&o.push(r),r=[],d="",o.length>=t)break;continue}d+=c}return o.length<t&&(d.length>0||r.length>0)&&(r.push(d),r.some(y=>y.trim().length>0)&&o.push(r)),o}function ml(e,t){return Array.from({length:t},(o,r)=>String(e[r]??"").trim())}function qg(e,t,o){const r=Number(e.replace(/,/g,"")),d=Number(t.replace(/,/g,"")),u=Number.isFinite(r)&&Number.isFinite(d)&&e.trim()!==""&&t.trim()!==""?r-d:e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"});return o==="asc"?u:-u}function Jg({value:e}){const t=Zg(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 Zg(e){const t=[];for(const o of String(e||"").replace(/\r\n/g,`
7
- `).split(`
8
- `)){const r=o.trim();if(!r)continue;const d=/^(#{1,6})\s+(.+)$/.exec(r);if(d?t.push({kind:"heading",level:d[1].length,text:To(d[2])}):/^>\s?/.test(r)?t.push({kind:"quote",text:To(r.replace(/^>\s?/,""))}):/^([-*+]|\d+\.)\s+/.test(r)?t.push({kind:"list",text:To(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:To(r)}),t.length>=12)break}return t}function To(e){return e.replace(/!\[([^\]]*)\]\([^)]+\)/g,"$1").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/(\*\*|__)(.*?)\1/g,"$2").replace(/(\*|_)(.*?)\1/g,"$2").replace(/`([^`]+)`/g,"$1").trim()}function Qg(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 br.find(d=>d.key===t)??br[0]}function eh(e){return hd(e)}function wd(e){return String(e.assetUrl||e.sourceFilePath||e.body||"").trim()}function th(e){const t=wd(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 ah(e){var t,o,r,d,p,u;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)||((u=e.metadata)==null?void 0:u.EmbedUrl)||e.assetUrl||e.sourceFilePath||e.body||"").trim()}function nh(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 oh(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 sh(e){return gd(e)}function pl(e){const t=e.indexOf(":");return t>0?e.slice(0,t):"relative"}function rh(e){var t;return((t=e.metadata)==null?void 0:t.CompanyStatus)||e.status||(e.companyMode?"Staged":"Ready")}function ih(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 yr(e){var t;return(e.result||e.body||((t=e.metadata)==null?void 0:t.CompanyLastMessage)||"").trim()||"No local artifact content yet."}function Lo(e,t){const o=t.edges.filter(p=>p.to===e.id).map(p=>{var u;return(u=t.nodes.find(y=>y.id===p.from))==null?void 0:u.title}).filter(Boolean),r=t.edges.filter(p=>p.from===e.id).map(p=>{var u;return(u=t.nodes.find(y=>y.id===p.to))==null?void 0:u.title}).filter(Boolean),d=rh(e);return{id:e.id,title:e.title,type:e.kind,subtitle:yr(e).slice(0,160),status:d,progress:ih(d),incoming:o,outgoing:r}}function lh(e,t){const o=new Set(t.edges.filter(x=>x.from===e.id||x.to===e.id).flatMap(x=>[x.from,x.to]).filter(x=>x!==e.id)),r=t.nodes.filter(x=>o.has(x.id)),d=t.nodes.filter(x=>{var v;return x.id!==e.id&&(x.companyMode||((v=x.tags)==null?void 0:v.some(T=>T.toLowerCase().includes("company"))))}),p=[...r,...d].filter((x,v,T)=>T.findIndex(A=>A.id===x.id)===v),u=p.filter(x=>x.kind!=="ai-task"&&!x.result).slice(0,6),y=p.filter(x=>x.kind==="ai-task").slice(0,6),c=p.filter(x=>x.result||x.kind!=="ai-task").slice(0,6);return[{key:"root",label:"Root",nodes:[Lo(e,t)]},{key:"context",label:"Context",nodes:u.map(x=>Lo(x,t))},{key:"tasks",label:"Missions",nodes:y.map(x=>Lo(x,t))},{key:"artifacts",label:"Artifacts",nodes:c.map(x=>Lo(x,t))}].map(x=>({...x,nodes:x.nodes.length>0?x.nodes:[dh(x.key)]}))}function dh(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 ch(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=>yr(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:yr(d),sourceNodeId:d.id}))}function uh({board:e,rootNode:t,onClose:o,onStatus:r,onRemove:d,onSubmitFollowUp:p,onApproval:u,onAddArtifact:y}){var ce,He,Ve,ue,De;const[c,x]=g.useState(""),[v,T]=g.useState(null),A=g.useMemo(()=>lh(t,e),[e,t]),P=g.useMemo(()=>ch(t,e),[e,t]),Y=P.find(K=>K.id===v)??P[0]??null,B=((ce=t.metadata)==null?void 0:ce.CompanyStatus)||"Staged",z=((He=t.metadata)==null?void 0:He.CompanyExecutionModeLabel)||"Auto / General",q=((Ve=t.metadata)==null?void 0:Ve.CompanySubAgents)==="false"?"single-agent":"sub-agents",ee=((ue=t.metadata)==null?void 0:ue.CompanyApprovalStatus)||"Pending",ke=!["Approved","Rejected"].includes(ee),de=e.nodes.filter(K=>{var $;return K.kind==="ai-task"&&((($=K.tags)==null?void 0:$.includes("Company follow-up"))||A.some(pt=>pt.nodes.some(F=>F.id===K.id)))}).length,we=()=>{const K=c.trim();K&&(x(""),p(t.id,K))};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:K=>K.stopPropagation(),children:[n.jsxs("header",{className:"company-focus-head",children:[n.jsx("button",{type:"button",title:"Back to Canvas",onClick:o,children:n.jsx(ym,{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||((De=t.metadata)==null?void 0:De.CompanyLastMessage)||"Local company root staged from MindCanvas."})]}),n.jsxs("div",{className:"company-focus-head__actions",children:[n.jsx("span",{children:B}),n.jsx("span",{children:z}),n.jsxs("span",{children:[n.jsx(ql,{size:12}),q]}),B==="Paused"?n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Staged"),children:[n.jsx(ya,{size:13}),"Resume"]}):n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Paused"),children:[n.jsx(Yo,{size:13}),"Pause"]}),n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Archived"),children:[n.jsx(ir,{size:13}),"Archive"]}),n.jsxs("button",{type:"button",className:"is-danger",onClick:()=>d(t.id),children:[n.jsx(Vo,{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(Eo,{label:"Missions",value:de||1,tone:"blue"}),n.jsx(Eo,{label:"Population",value:q==="sub-agents"?4:1,tone:"slate"}),n.jsx(Eo,{label:"Approvals",value:ke?1:0,tone:"amber"}),n.jsx(Eo,{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(xm,{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:A.map(K=>n.jsxs("section",{className:"company-focus-lane",children:[n.jsxs("header",{children:[n.jsx("strong",{children:K.label}),n.jsxs("span",{children:[K.nodes.filter($=>$.type!=="empty").length," nodes"]})]}),n.jsx("div",{className:"company-focus-node-list",children:K.nodes.map($=>n.jsxs("article",{className:`company-focus-node ${$.type==="empty"?"is-empty":""}`,children:[n.jsxs("div",{children:[n.jsx("span",{children:$.type}),n.jsx("b",{children:$.status})]}),n.jsx("strong",{children:$.title}),n.jsx("p",{children:$.subtitle}),n.jsx("div",{className:"company-focus-progress",children:n.jsx("i",{style:{width:`${Math.round($.progress*100)}%`}})}),$.incoming.length>0&&n.jsxs("small",{children:["From: ",$.incoming.slice(0,2).join(", ")]}),$.outgoing.length>0&&n.jsxs("small",{children:["Next: ",$.outgoing.slice(0,2).join(", ")]})]},$.id))})]},K.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(Ql,{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:K=>x(K.target.value),placeholder:"Generate the next practical revenue validation task."}),n.jsxs("button",{type:"button",className:"company-focus-primary",disabled:!c.trim(),onClick:we,children:[n.jsx(Cm,{size:13}),"Stage Task"]})]}),n.jsxs("section",{children:[n.jsxs("div",{className:"company-focus-section-head",children:[n.jsxs("div",{children:[n.jsx(nr,{size:15}),n.jsx("strong",{children:"Approvals"})]}),n.jsx("span",{children:ee})]}),n.jsxs("article",{className:`company-focus-approval company-focus-approval--${ee.toLowerCase()}`,children:[n.jsx("span",{children:z}),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."}),ke&&n.jsxs("div",{children:[n.jsxs("button",{type:"button",onClick:()=>u(t.id,"Approved"),children:[n.jsx(nr,{size:13}),"Approve locally"]}),n.jsxs("button",{type:"button",onClick:()=>u(t.id,"Rejected"),children:[n.jsx(Sm,{size:13}),"Reject"]})]})]})]}),n.jsxs("section",{children:[n.jsxs("div",{className:"company-focus-section-head",children:[n.jsxs("div",{children:[n.jsx(ut,{size:15}),n.jsx("strong",{children:"Artifacts"})]}),n.jsx("span",{children:P.length})]}),n.jsx("div",{className:"company-focus-artifacts",children:P.map(K=>n.jsxs("button",{type:"button",className:(Y==null?void 0:Y.id)===K.id?"is-selected":"",onClick:()=>T(K.id),children:[n.jsx("span",{children:K.type}),n.jsx("strong",{children:K.title})]},K.id))}),Y&&n.jsxs("div",{className:"company-focus-preview",children:[n.jsx("span",{children:Y.type}),n.jsx("strong",{children:Y.title}),n.jsx("pre",{children:Y.content}),n.jsxs("button",{type:"button",onClick:()=>y(t.id,Y),children:[n.jsx(Zn,{size:13}),"Add to Canvas"]})]})]})]})]})]})})}function Eo({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 mh({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(on,{size:16})}),n.jsx("button",{type:"button",title:"Close PDF viewer","data-testid":"pdf-viewer-close",onClick:o,children:n.jsx(ct,{size:16})})]})]}),n.jsx("iframe",{src:e,title:t,className:"pdf-viewer-frame","data-testid":"pdf-viewer-frame"})]})})}const vd={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},$o=.28,Fo=2.8,ph=96,gh=140,Uo=188,zo=126,tn=10,hh=720,fh=.8,qa={x:540,y:210,scale:1},gl=8,jd=["dot","line","particles","spirit"],Gt="n",Hs=["0","1","2","3","4","5","6","7","8","9"],to=24,hl=900,fl="mindexec-react-project-gallery-startup-v1",Id="mindexec-react-project-workspace-history-v1",Nd=5,Wo="__MINDEXEC_REACT_NODES__",Po=34,Ja=1280,Za=960,bh=154,xr=4e4,yh=50,Xo=100,Ad=50*1024,Vs=Ad,Ys=12e4,bl=64*1024,xh=5e3,$r=2500,rn=36,Cr="Select a LocalBridge directory",Md="mindexec.react.templateStudioDraft.v1.",Rd="BusinessAutomationNode",Ch="MindCanvasAgent",Sh="CodeNote";function kh(){return Gl(vd??{})}function Gs(){return vd??{}}const wh=["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
- `),Fr={"image-generate":{kind:"image-generate",mode:"Image",title:"Image Generation Spec",body:["Prepare an image generation prompt/spec.","","Subject:","Visual style:","Composition:","Constraints:","Business use case:"].join(`
10
- `),tag:"Image Spec",toolHint:"Media.ImagePrompt",outputType:"image-prompt",width:380,height:228},"video-generate":{kind:"video-generate",mode:"Video",title:"Video Generation Spec",body:["Prepare a video generation prompt/spec.","","Subject:","Motion:","Scene/composition:","Duration/format:","Business use case:"].join(`
11
- `),tag:"Video Spec",toolHint:"Media.VideoPrompt",outputType:"video-prompt",width:420,height:236}},vh=["Objective:","","Constraints:","","Expected output:"].join(`
12
- `),jh=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 yl(e,t){try{const o=window.localStorage.getItem(`${Md}${e}`);if(!o)return Oo(t);const r=JSON.parse(o);return{...Oo(t),...r,templateId:qn(r.templateId||r.templateTitle||t)}}catch{return Oo(t)}}function xl(e,t){window.localStorage.setItem(`${Md}${e}`,JSON.stringify(t))}function Cl(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 qo(e){return String(e||"").split(",").map(t=>t.trim().toLowerCase()).filter(Boolean)}function Td(e,t,o){const r=e.toLowerCase(),d=t.toLowerCase();return o.some(p=>r.includes(p)||d.includes(p))}function Ld(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 Ih(e,t){const o=qo(t==null?void 0:t.Include),r=qo(t==null?void 0:t.Exclude),d=[];let p=0,u=0,y=0,c=!1;async function x(v,T=""){for await(const A of v.values()){if(y>=$r){c=!0;return}const P=T?`${T}/${A.name}`:A.name;if(!Td(P,A.name,r)){if(A.kind==="file"){if(!Ld(A.name,o))continue;p+=1,y+=1,d.length<rn&&d.push({name:A.name,path:P,kind:"file"});continue}if(A.kind==="directory"&&(u+=1,y+=1,d.length<rn&&d.push({name:A.name,path:P,kind:"directory"}),await x(A,P),c))return}}}return await x(e),{fileCount:p,directoryCount:u,preview:d,truncated:c}}function ln(e){return typeof e=="string"?e.trim():""}function Nh(e){return!e||e===Cr?!1:!/^(https?:|data:|blob:|file:)/i.test(e)}function Ah(e){var d;const t=ln((d=e.metadata)==null?void 0:d.DirectoryPath),o=ln(e.sourceFilePath),r=t||o;return Nh(r)?r:""}function Mh(e,t){const o=ln(t.path);if(o)return o;const r=ln(t.name);if(!e)return r;const d=e.includes("\\")?"\\":"/";return`${e.replace(/[\\/]+$/,"")}${d}${r}`}async function Rh(e,t,o,r){const d=qo(t==null?void 0:t.Include),p=qo(t==null?void 0:t.Exclude),u=[],y=[{bridgePath:e,relativePath:""}];let c=0,x=0,v=0,T=!1;for(;y.length>0;){const A=y.shift();if(!A)break;const P=await am(A.bridgePath,o,r),Y=Array.isArray(P.items)?P.items:[];for(const B of Y){if(v>=$r){T=!0;break}const z=ln(B.name);if(!z)continue;const q=A.relativePath?`${A.relativePath}/${z}`:z;if(Td(q,z,p))continue;const ee=B.isDirectory===!0,ke=B.isFile===!0||B.isDirectory!==!0;if(ee){x+=1,v+=1,u.length<rn&&u.push({name:z,path:q,kind:"directory"}),y.push({bridgePath:Mh(A.bridgePath,B),relativePath:q});continue}if(ke){if(!Ld(z,d))continue;c+=1,v+=1,u.length<rn&&u.push({name:z,path:q,kind:"file"})}}if(T)break}return{fileCount:c,directoryCount:x,preview:u,truncated:T}}function Sl(e,t){const o=t.preview.map(r=>`${r.kind==="directory"?"dir":"file"}:${r.path}`).join(`
13
- `);return[`Directory: ${e}`,`Files: ${t.fileCount}`,`Folders: ${t.directoryCount}`,t.truncated?`Preview capped at ${$r} entries.`:"Scan completed.","",o||"(empty or filtered)"].join(`
14
- `)}const Th=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"]),Lh=new Set(["csv","log","md","markdown","rtf","text","txt"]);function V(e){return`${e}-${Math.random().toString(36).slice(2,9)}`}function Eh(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 se(e,t,o){return Math.min(o,Math.max(t,e))}const Ph=112,_h=80;function kl(e,t){const o=t/2,r=Ph+e/2,d=Math.max(r,t-_h);return se(Math.max(o,r),0,d)}function wl(e){return{x:e.x+e.width/2,y:e.y+e.height/2}}function Sr(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 Kn(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 Dh(e){return e.isExpanded===!1&&Number(e.originalHeight??0)>e.height+1}function Bh(e){return Br(e)}function Oh(e){return hd(e)}function Qn(e){var o;const t=(((o=e.imageStack)==null?void 0:o.variants)??[]).filter(r=>!!r.imageUrl).map((r,d)=>({...r,variantId:r.variantId||`${e.id}:variant-${d+1}`,title:r.title||e.title,sourceNodeId:r.sourceNodeId||e.id}));return t.length>0?t:e.imageUrl?[{variantId:`${e.id}:image`,imageUrl:e.imageUrl,assetId:e.assetUrl,title:e.title,sourceNodeId:e.id}]:[]}function vl(e,t,o,r){let d=e.variantId||V("image-variant");for(;o.has(d);)d=V("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 $h(e){return[e.title,"",e.result?`Result:
15
- ${e.result}`:e.body,e.imageUrl?`
16
- Image: ${e.imageUrl}`:"",e.assetUrl?`
17
- Asset: ${e.assetUrl}`:"",e.sourceFilePath?`
18
- Source: ${e.sourceFilePath}`:""].filter(Boolean).join(`
19
- `)}function Fh(e){if(e.kind!=="image")return"";const t=Qn(e).find(o=>{var r;return o.variantId===((r=e.imageStack)==null?void 0:r.activeVariantId)});return String((t==null?void 0:t.imageUrl)||Br(e)).trim()}async function Uh(e){const t=navigator.clipboard;if(t&&typeof ClipboardItem<"u"&&typeof t.write=="function")try{const r=await(await fetch(e)).blob();if(r.type.startsWith("image/"))return await t.write([new ClipboardItem({[r.type]:r})]),"image"}catch{}return await Jn(e),"text"}function Ks(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 se(112+o*21+((r=e.tags)!=null&&r.length?28:0),150,620)}function zh(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 Xe(e){return String(e||"").trim()||"Untitled"}const Ed="Multi Desktop Monitor";function jl(e){return Xe(e).toLowerCase()===Ed.toLowerCase()}function Wh(e,t,o){const r=Xe(e.name);return!o||!jl(r)?r:t.nodes.some(p=>ba(p)&&jl(p.title||Ed))?"MindCanvas":r}function Kt(e){return typeof e=="object"&&e!==null}function kr(e){const t=e.toLowerCase(),o=t.lastIndexOf(".");return o>=0?t.slice(o+1):""}function Hh(e){if(!Kt(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 Vh(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 _o(e,t=0,o=Number.MAX_SAFE_INTEGER){const r=Number(e);if(Number.isFinite(r))return se(r,t,o)}function Xs(e){return e&&jd.includes(e)?e:"dot"}function Il(e){return Math.round(e/to)*to}function Yh(e){if(!Kt(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 Gh(e){if(!Kt(e)||!Array.isArray(e.variants))return;const t=e.variants.map(d=>Yh(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 wr(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 Kh(e){if(!Kt(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"||!jh.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 u=Gh(e.imageStack),y=(u==null?void 0:u.variants.find(c=>c.variantId===u.activeVariantId))??(u==null?void 0:u.variants[0]);return{id:e.id,kind:t,title:e.title,body:e.body,x:o,y:r,width:se(d,120,1280),height:se(p,96,920),status:["idle","running","paused","done","blocked"].includes(String(e.status))?e.status:void 0,result:typeof e.result=="string"?e.result:void 0,imageUrl:typeof e.imageUrl=="string"?e.imageUrl:y==null?void 0:y.imageUrl,imageStack:u,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:_o(e.totalLineCount),scrollOffset:_o(e.scrollOffset),maxScroll:_o(e.maxScroll),isExpanded:typeof e.isExpanded=="boolean"?e.isExpanded:void 0,originalHeight:_o(e.originalHeight),tags:Vh(e.tags),role:typeof e.role=="string"?e.role:void 0,metadata:Hh(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 Xh(e){return!Kt(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 Nl(e){if(!e.includes(Wo))return null;try{const t=JSON.parse(e);if(!Kt(t)||t.__type!==Wo||!Array.isArray(t.nodes))return null;const o=t.nodes.map(d=>Kh(d)).filter(d=>!!d);if(o.length===0)return null;const r=Array.isArray(t.edges)?t.edges.map(d=>Xh(d)).filter(d=>!!d):[];return{__type:Wo,source:"MindExecReact",copiedAt:typeof t.copiedAt=="string"?t.copiedAt:new Date().toISOString(),nodes:o,edges:r}}catch{return null}}function qh(e,t){return{__type:Wo,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:wr(o.imageStack)})),edges:t.map(o=>({...o}))}}const Jh=/^\s*\[[^\]]+\]\((https?:\/\/[^)\s]+)\)\s*$/i,Zh=/<iframe[^>]+src\s*=\s*(?:"|\x27)(?<url>https?:\/\/[^"\x27]+)(?:"|\x27)/i,Qh=/https?:\/\/[^\s<>()"\x27]+/i,ef=/^[A-Za-z0-9_-]{6,}$/,tf=new Set(["avi","m4v","mov","mp4","mpeg","ogv","webm"]);function qs(e){return e.trim().replace(/[.,;:!?\])}]+$/g,"")}function af(e){var p;const t=e.trim();if(!t)return"";const o=Zh.exec(t);if((p=o==null?void 0:o.groups)!=null&&p.url)return qs(o.groups.url);const r=Jh.exec(t);if(r!=null&&r[1])return qs(r[1]);const d=t.split(/\r?\n/).map(u=>u.trim()).filter(Boolean);if(d.length===1){const u=Qh.exec(d[0]);if(u&&u[0]===d[0])return qs(u[0])}return""}function Pd(e){const t=e.trim(),o=af(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 nf(e){try{const t=new URL(e);return kr(t.pathname)}catch{return kr(e)}}function of(e){const t=e.hostname.toLowerCase();if(!t||t==="localhost"||t.endsWith(".localhost"))return!0;const o=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(t);if(o){const d=o.slice(1).map(Number);if(d.some(y=>!Number.isInteger(y)||y<0||y>255))return!0;const[p,u]=d;return p===0||p===10||p===127||p===169&&u===254||p===172&&u>=16&&u<=31||p===192&&u===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 lo(e){const t=Pd(e);if(!t)return null;try{const o=new URL(t);return o.protocol!=="http:"&&o.protocol!=="https:"||of(o)?null:o}catch{return null}}function Js(e){return ef.test(e)}function sf(e){const t=lo(e);if(!t)return"";const o=t.hostname.toLowerCase().replace(/^www\./,"");if(o==="youtu.be"){const y=t.pathname.split("/").filter(Boolean)[0]??"";return Js(y)?y:""}if(!o.endsWith("youtube.com")&&!o.endsWith("youtube-nocookie.com"))return"";const r=t.searchParams.get("v")??"";if(Js(r))return r;const d=t.pathname.split("/").filter(Boolean),p=d.findIndex(y=>["embed","shorts","live","v"].includes(y)),u=p>=0?d[p+1]??"":"";return Js(u)?u:""}function rf(e){const t=e.toLowerCase(),o=nf(e);return t.startsWith("data:image/")||["avif","gif","jpeg","jpg","png","svg","webp"].includes(o)?"image":tf.has(o)?"video":o==="pdf"?"pdf":lo(e)?"embed":"file"}function lf(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 df(e,t,o="clipboard-url"){const r=rf(e),d=lf(e),p=r==="embed"?lo(e):null,u=r==="embed"?sf(e):"",y=u?"youtube":"webpage",c=(p==null?void 0:p.hostname.replace(/^www\./,""))??"",x=u?`https://www.youtube.com/watch?v=${u}`:e,v=u?`https://www.youtube-nocookie.com/embed/${u}`:"",T=r==="image"?`Image: ${d}`:r==="video"?`Video: ${d}`:r==="embed"?u?"YouTube Video":`Embed: ${c||d}`:r==="pdf"?`PDF: ${d}`:`URL: ${d}`;return{id:V("node"),kind:r,title:T,body:x,x:t.x,y:t.y,width:r==="embed"?460:r==="video"?420:r==="image"?360:300,height:r==="embed"?260:r==="video"?236:r==="image"?240:154,imageUrl:r==="image"?e:void 0,assetUrl:r==="image"?void 0:x,tags:r==="embed"?["Embed",u?"YouTube":"Web"]:r==="file"?["URL","File"]:[r.toUpperCase()],metadata:{Source:o,AdapterState:"local-reference",Durable:"false",...r==="embed"?{source:"embed",embedType:y,provider:u?"youtube":"web",renderMode:u?"card":"snapshot",aspectRatio:u?"16:9":"auto",sourceUrl:x,url:x,originalInputUrl:e,embedUrl:v,videoId:u,thumbnailUrl:u?`https://img.youtube.com/vi/${u}/hqdefault.jpg`:"",title:T,domain:c,faviconUrl:!u&&p?`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(x)}`:"",description:u?"":"Capture a visual snapshot or open this page in a new tab.",iframeAllowed:"false",iframeBlockedReason:u?"react-card-shell":"unknown",captureStatus:"idle",captureProvider:u?"":"cloudflare-browser-run"}:{}}}}function Al(e,t,o="clipboard-url"){const r=Pd(e);return!r||/^https?:\/\//i.test(r)&&!lo(r)?null:df(r,t,o)}function Ml(e,t,o){const r=e.split(/\r?\n/).map(d=>d.trim()).find(Boolean)??"Pasted text";return{id:V("node"),kind:"note",title:r.slice(0,90),body:e.slice(0,4e4),x:t.x,y:t.y,width:340,height:se(156+Math.ceil(Math.min(e.length,2200)/72)*20,176,540),tags:[o==="global-input"?"Input":"Pasted"],metadata:{Source:o,TextTruncated:String(e.length>4e4)}}}function cf(e,t,o,r,d="global-input-media"){const p=r==="Image"?"image":"video",u=e.split(/\r?\n/).map(c=>c.trim()).find(Boolean)??`${r} prompt`,y={...Wr(o,r)??{},Source:d,PromptOnly:"true"};return{id:V("node"),kind:p,title:`${r}: ${u.slice(0,72)}`,body:e.slice(0,4e4),x:t.x,y:t.y,width:p==="image"?360:420,height:p==="image"?240:236,tags:[r,y.MediaProvider||"Adapter gated"],metadata:y}}function Rl(e){if(!e.trim())return"";if(typeof DOMParser>"u")return e.replace(/<br\s*\/?>/gi,`
20
- `).replace(/<[^>]+>/g," ").replace(/\s+\n/g,`
21
- `).trim();const t=new DOMParser().parseFromString(e,"text/html");return(t.body.innerText||t.body.textContent||"").replace(/\n{3,}/g,`
22
-
23
- `).trim()}function uf(e){const t=kr(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":Th.has(t)?"code":e.type.startsWith("text/")||Lh.has(t)?"text":"file"}function mf(e){return typeof URL<"u"&&URL.createObjectURL?URL.createObjectURL(e):e.name}function Tl(e){return e?e.split(/\r?\n/).length:0}function Ll(e){return String(e||"").replace(/\r\n/g,`
24
- `).replace(/\r/g,`
25
- `).split(`
26
- `).slice(0,Xo).join(`
27
- `).slice(0,xh)}function El(e){return{IsChunkedText:"true",TotalLineCount:String(e),TotalLineCountIsPreview:"true",ChunkedPreviewOnly:"true",ChunkedPreviewChars:"",ChunkedLineCount:String(Xo),ChunkCacheEntryLimit:String(yh),LargeFileThresholdBytes:String(Ad),OriginalIngestMode:"browser-preview",TextTruncated:"true"}}function pf(e){const t=String(e||"").replace(/\r\n/g,`
28
- `).replace(/\r/g,`
29
- `).split(`
30
- `).filter(r=>r.trim().length>0),o=t.slice(0,40).reduce((r,d)=>Math.max(r,gf(d)),0);return{rowCount:Math.max(0,t.length-1),columnCount:o}}function gf(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 Pl(e,t){const o=`
31
-
32
- ... (UI truncated; source file ${t.toLocaleString()} bytes) ...`;return e.endsWith(`
33
- `)?`${e}${o.trimStart()}`:`${e}${o}`}async function hf(e,t,o){const r=uf(e),d=(r==="note"||r==="text"||r==="code"||r==="markdown")&&e.size<=Vs,p=r==="image"||r==="video"||r==="pdf"||r==="file"?mf(e):void 0,u={Source:`browser-${o}`,FileName:e.name,FileType:e.type||"unknown",FileSize:String(e.size),Durable:"false"};if(r==="csv-table"){const c=e.size<=Vs,x=c?await e.text():await e.slice(0,bl).text(),v=c?x.slice(0,Ys):Ll(x),T=pf(v),A=c?0:Tl(v);return c||f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:o,previewChars:v.length,previewLines:A,chunkLineCount:Xo}),{id:V("node"),kind:"csv-table",title:e.name.slice(0,90)||"CSV table",body:c?v:Pl(v,e.size),x:t.x,y:t.y,width:720,height:420,sourceFilePath:e.name,isChunkedText:!c||void 0,totalLineCount:c?void 0:A,scrollOffset:c?void 0:0,maxScroll:c?void 0:0,tags:["CSV","Table",o],metadata:{...u,CsvRowCount:String(T.rowCount),CsvColumnCount:String(T.columnCount),IsChunkedText:String(!c),...c?{}:{...El(A),ChunkedPreviewChars:String(v.length)},ChunkedPreviewOnly:String(!c),OriginalIngestMode:c?"browser-inline":"browser-preview",TextTruncated:String(!c||x.length>v.length)},wordWrap:!1}}if(d){const c=(await e.text()).slice(0,Ys);return{id:V("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:se(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:{...u,TextTruncated:String(e.size>Vs||c.length>=Ys)},wordWrap:r==="code"?!0:void 0}}if(r==="note"||r==="text"||r==="code"||r==="markdown"){const c=await e.slice(0,bl).text(),x=Ll(c),v=Tl(x);return f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:o,previewChars:x.length,previewLines:v,chunkLineCount:Xo}),{id:V("node"),kind:r,title:e.name.slice(0,90)||(r==="code"?"Code file":r==="markdown"?"Markdown file":"Text file"),body:Pl(x,e.size),x:t.x,y:t.y,width:r==="code"?480:r==="markdown"?430:390,height:540,sourceFilePath:e.name,isChunkedText:!0,totalLineCount:v,scrollOffset:0,maxScroll:0,isExpanded:!1,originalHeight:0,tags:[r==="code"?"Code":r==="markdown"?"Markdown":"Text","Chunked",o],metadata:{...u,...El(v),ChunkedPreviewChars:String(x.length)},wordWrap:r==="code"?!0:void 0}}const y=r;return{id:V("node"),kind:y,title:e.name.slice(0,90)||(y==="image"?"Image":y==="video"?"Video":y==="pdf"?"PDF Document":"File"),body:p||e.name,x:t.x,y:t.y,width:y==="video"?420:y==="image"?360:300,height:y==="video"?236:y==="image"?240:154,imageUrl:y==="image"?p:void 0,assetUrl:y==="image"?void 0:p,sourceFilePath:e.name,tags:[y==="file"?"File":y.toUpperCase(),o],metadata:{...u,EphemeralObjectUrl:String(!!p)}}}function _l(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 u=`${p.name}:${p.size}:${p.type}:${p.lastModified}`;return d.has(u)?!1:(d.add(u),!0)})}function Zs(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 Qs(e){return Kt(e)?typeof e.id=="string"&&Array.isArray(e.nodes)&&Array.isArray(e.edges)&&Kt(e.settings):!1}function Jo(e){return e.replace(/\.layout\.json$/i,"").replace(/\.json$/i,"").trim()}function ff(e,t){var r,d;const o=new Date().toISOString();return{...e,id:V("imported-board"),name:Xe(e.name||Jo(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 er(e){return/\.layout\.json$/i.test(e.file.name)}function bf(e){return e.flatMap(t=>Lr(t.payload).map(o=>({fileName:t.file.name,metadata:o})))}function yf(e,t){const o=Jo(e.file.name);return t.find(r=>r.metadata.Id===o)??Lr(e.payload).map(r=>({fileName:e.file.name,metadata:r}))[0]??null}function Ho(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 xf(e){const t=[...e].sort((c,x)=>c.y-x.y||c.x-x.x);if(t.length<=2)return t;const o=t.map(c=>c.height).sort((c,x)=>c-x),r=o[Math.floor(o.length/2)]??1,d=Math.max(16,r*.35),p=[];let u=[],y=Number.NaN;for(const c of t){if(u.length===0){u=[c],y=c.y;continue}Math.abs(c.y-y)<=d?(u.push(c),y=(y*(u.length-1)+c.y)/u.length):(p.push(u.sort((x,v)=>x.x-v.x)),u=[c],y=c.y)}return u.length>0&&p.push(u.sort((c,x)=>c.x-x.x)),p.flat()}function Cf(e,t,o){const r=Ho(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),u=Math.max(1,d.maxY-d.minY),y=Math.min((Uo-tn*2)/p,(zo-tn*2)/u),c=(A,P)=>({x:tn+(A-d.minX)*y,y:tn+(P-d.minY)*y}),x={left:(0-t.x)/t.scale,top:(0-t.y)/t.scale,right:(o.width-t.x)/t.scale,bottom:(o.height-t.y)/t.scale},v=c(x.left,x.top),T=c(x.right,x.bottom);return{bounds:d,scale:y,project:c,nodes:e.map(A=>{const P=c(A.x,A.y);return{id:A.id,kind:A.kind,x:P.x,y:P.y,width:Math.max(2,A.width*y),height:Math.max(2,A.height*y),selected:!1}}),viewport:{x:se(v.x,0,Uo),y:se(v.y,0,zo),width:se(T.x-v.x,4,Uo),height:se(T.y-v.y,4,zo)}}}function Sf(e,t){const o=Math.max(.01,e.scale),r=t.width/o,d=t.height/o,p=Math.max(hh,Math.max(r,d)*fh);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 Dl(e,t){return e.x+e.width>=t.left&&e.x<=t.right&&e.y+e.height>=t.top&&e.y<=t.bottom}function Bl(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 kf(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 Ol(e){const t=new Date().toISOString(),o=V("board"),r=V("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 wf(e){const t=new Date().toISOString();return{id:V("board"),name:`Template Studio ${vf(new Date)}`,updatedAt:t,settings:e,source:{kind:"localStorage",loadedAt:t},nodes:[],edges:[]}}function vf(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 jf(e){return`${e.sourceKind==="localBridge"?"LocalBridge copy":"React board"} / ${e.nodeCount} nodes / ${Sr(e.updatedAt)}`}function ao(e,t){const o=e.trim();return o.length<=t?o:`${o.slice(0,t)}...`}function If(e){return e==="Fast"?"low":e==="Deep"?"high":"medium"}function Ur(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 zr(e){return e==="image-generate"||e==="video-generate"?Fr[e]:null}function en(e){var t;return String(((t=e.metadata)==null?void 0:t.SemanticType)||"").trim()===Rd}function Nf(e,t){const o=Fr[t],r=no(e,o.mode);return{...Wr(e,o.mode)??{},Source:"toolbar-business-automation",SemanticType:Rd,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 Xn(e,t){var r,d,p,u,y;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:((u=e.metadata)==null?void 0:u.AutomationLastRunEvidenceCount)??"0",AutomationLastRunIsFallback:String(!!t.fallback),AutomationLastRunIsPartial:String(!!t.partial),AutomationLastRunToolsUsed:t.toolsUsed??((y=e.metadata)==null?void 0:y.AutomationToolHints)??"",AutomationLastRunToolWarnings:t.toolWarnings??"",AutomationRunCount:o,...t.runState==="completed"?{AutomationLastRunAtUtc:new Date().toISOString()}:{}}}function Af(){return{Source:"toolbar-agent-command",SemanticType:Ch,AgentCommandId:V("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 Mf(){return{Source:"toolbar-code-note",SemanticType:Sh,CodeNoteId:V("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 Rf(e,t){var r,d,p,u;const o=t?zr(Ur(t)):null;if(o){const y=o.mode.toLowerCase();return[`Task: ${e}`,"",`Run Result: ${o.title}`,`Node: ${o.kind}`,"Status: Spec only","Source mode: media-prompt-only","","Generation is not executed here. External media generation stays adapter-gated until human review.","","Spec:",`- Medium: ${y}`,`- Model: ${((r=t==null?void 0:t.metadata)==null?void 0:r.MediaModel)||"adapter-gated"}`,`- Aspect: ${((d=t==null?void 0:t.metadata)==null?void 0:d.AspectLabel)||((p=t==null?void 0:t.metadata)==null?void 0:p.AspectPresetId)||"auto"}`,`- Requested size: ${((u=t==null?void 0:t.metadata)==null?void 0:u.RequestedSize)||"auto"}`,"","Prompt draft:",e].join(`
34
- `)}return[`Task: ${e}`,"","Local draft:","1. Clarify the paid offer in one sentence.","2. Pick one English-first channel and publish proof there.","3. Create a MindCanvas board that keeps source context, AI output, and next actions together.","4. Reuse the result as context for the next task."].join(`
35
- `)}function Tf(e,t){const o=e.result||"",r=o.slice(0,xr),d=`${e.title||"AI Task"} result`;return{id:V("node"),kind:"markdown",title:d.slice(0,90),body:r,x:t.x,y:t.y,width:440,height:se(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>xr),AdapterState:"local-reference"}}}function Lf(e,t){const o=ao(e.result||"",900);return{id:V("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 $l(e,t,o){var y,c,x,v,T;const r=zr(Ur(t)),d=new Set(e.edges.filter(A=>A.to===t.id||A.from===t.id).flatMap(A=>[A.from,A.to]).filter(A=>A!==t.id)),p=e.nodes.filter(A=>d.has(A.id)).slice(0,8),u=p.length>0?p.map(A=>[`### ${A.title||A.kind}`,`Type: ${A.kind}`,ao(A.result||A.body||"",1200)].join(`
37
- `)).join(`
38
-
39
- `):"No linked context nodes.";return r?["You are running inside MindExec React MindCanvas.",`Return a concise, practical Markdown media generation spec for the selected ${r.mode.toLowerCase()} automation node.`,"Do not claim the asset was generated. This node prepares the prompt/spec only.","External media generation must remain gated until human review.",zi(e.settings.appLanguage),"",`Board: ${e.name}`,`Task node: ${t.title}`,`Automation kind: ${r.kind}`,`External action policy: ${((y=t.metadata)==null?void 0:y.AutomationExternalActionPolicy)||"spec-only-until-review"}`,`Media model: ${((c=t.metadata)==null?void 0:c.MediaModel)||"adapter-gated"}`,`Aspect: ${((x=t.metadata)==null?void 0:x.AspectLabel)||((v=t.metadata)==null?void 0:v.AspectPresetId)||"auto"}`,`Requested size: ${((T=t.metadata)==null?void 0:T.RequestedSize)||"auto"}`,"","Instruction:",ao(o,4e3),"","Linked context:",u,"","Required sections:","- Subject","- Visual style","- Composition or scene","- Constraints","- Business use case","- Final generation prompt"].join(`
40
- `):["You are running inside MindExec React MindCanvas.","Return a concise, practical Markdown result for the selected AI Task.","Do not modify files. Do not ask follow-up questions unless the task is impossible.",zi(e.settings.appLanguage),"",`Board: ${e.name}`,`Task node: ${t.title}`,"","Instruction:",ao(o,4e3),"","Linked context:",u].join(`
41
- `)}function _d(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 vr(e){return[...e].sort(_d)}function Ef(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 T=d.get(v.from);!T||T.has(v.to)||(T.add(v.to),p.set(v.to,(p.get(v.to)??0)+1))}const u=[],y=new Set,c=vr([...r].filter(v=>(p.get(v)??0)===0).map(v=>o.get(v)));for(;c.length>0;){const v=c.shift();if(y.has(v.id))continue;y.add(v.id),u.push(v);const T=[...d.get(v.id)??[]].map(A=>o.get(A)).filter(A=>!!A);for(const A of T)p.set(A.id,Math.max(0,(p.get(A.id)??0)-1)),(p.get(A.id)??0)===0&&c.push(A);c.sort(_d)}const x=vr([...r].filter(v=>!y.has(v)).map(v=>o.get(v)).filter(Boolean));return[...u,...x]}function jr(e,t){var u,y;const o=new Set(e.nodes.filter(c=>c.kind==="ai-task").map(c=>c.id));if(!o.has(t))return[];const r=new Map;for(const c of o)r.set(c,new Set);for(const c of e.edges)!o.has(c.from)||!o.has(c.to)||((u=r.get(c.from))==null||u.add(c.to),(y=r.get(c.to))==null||y.add(c.from));const d=new Set,p=[t];for(;p.length>0;){const c=p.pop();if(!d.has(c)){d.add(c);for(const x of r.get(c)??[])d.has(x)||p.push(x)}}return Ef(e,d)}function Pf(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 vr(e.nodes.filter(p=>p.kind==="ai-task"))){if(!o.has(d.id))continue;const p=jr(e,d.id);for(const u of p)o.delete(u.id);r.push(p)}return r}function no(e,t){const o=Yl(t,e),r=t==="Image"?e.imageRouterImageAspectPresetId:e.imageRouterVideoAspectPresetId,d=tr(t,o,r);return{mode:t,model:o,aspect:d,aspectOptions:em(o,t),requestedSize:ar(d)}}function Wr(e,t){const o=no(e,t);return{InputMode:t,AppLanguage:Vl(e.appLanguage),MediaPromptLanguageInstruction:tm(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 Dd(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 _f(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 Df(e,t,o,r=8){if(!t.trim())return[];const d=sg(Dd(e)),p=new Map(e.map(u=>[u.id,u]));return rg(d,t,{limit:r,viewport:o}).hits.map(u=>p.get(u.nodeId)).filter(u=>!!u)}function Fl(e,t,o="none"){const r=new Set(t.nodes.map(p=>p.id)),d=e.filter((p,u)=>r.has(p)&&e.indexOf(p)===u);return d.length>0||o==="none"?d:t.nodes[0]?[t.nodes[0].id]:[]}function Ul(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('input,textarea,select,[contenteditable="true"],[contenteditable=""]'):!1}function Bf(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('button,a,[role="button"],[role="tab"],summary'):!1}function Do(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:se(d,$o,Fo)}}function Ca(e){return typeof e=="string"?e.trim():""}function Bo(e,t=34){const o=Ca(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 Of(){try{const e=window.localStorage.getItem(Id),t=e?JSON.parse(e):[];return Array.isArray(t)?t.map(Ca).filter(Boolean).filter((o,r,d)=>d.findIndex(p=>p.toLowerCase()===o.toLowerCase())===r).slice(0,Nd):[]}catch{return[]}}function $f(e){const t=e.map(Ca).filter(Boolean).filter((o,r,d)=>d.findIndex(p=>p.toLowerCase()===o.toLowerCase())===r).slice(0,Nd);try{window.localStorage.setItem(Id,JSON.stringify(t))}catch{}return t}function zl(e,t){return $f([e,...t.filter(o=>o.toLowerCase()!==e.toLowerCase())])}function Zf({navigate:e}){var fi,bi,yi,xi,Ci,Si,ki,wi,vi,ji,Ii,Ni,Ai,Mi,Ri;const[t,o]=g.useState(()=>Hi(_i(Vi(vu(Ei))))),[r,d]=g.useState([]),[p,u]=g.useState([]),[y,c]=g.useState(["node-agent-command"]),[x,v]=g.useState(""),[T,A]=g.useState(""),[P,Y]=g.useState(0),[B,z]=g.useState([]),[q,ee]=g.useState(0),[ke,de]=g.useState("idle"),[we,ce]=g.useState("booting"),[He,Ve]=g.useState(null),[ue,De]=g.useState(null),[K,$]=g.useState(null),[pt,F]=g.useState(null),[Be,gt]=g.useState(null),[O,Re]=g.useState({...qa}),[xe,St]=g.useState(()=>({width:window.innerWidth,height:window.innerHeight})),[Oe,Tt]=g.useState(!1),[Xt,dn]=g.useState(()=>localStorage.getItem(fl)==="true"),[Ee,ns]=g.useState("local"),[ka,ht]=g.useState([]),[fe,re]=g.useState(dt()?"idle":"blocked"),[ft,qe]=g.useState(null),[bt,ie]=g.useState(dt()?null:"Hosted LocalBridge access is off."),[be,Pe]=g.useState(null),[Lt,me]=g.useState(null),[wa,_e]=g.useState(()=>Of()),[Je,yt]=g.useState(!1),[Ye,ye]=g.useState(null),[cn,co]=g.useState(null),[qt,Ce]=g.useState(!1),[tt,Et]=g.useState("ready"),[uo,va]=g.useState("Saved in this browser."),[kt,Ne]=g.useState(()=>lt()),$e=g.useMemo(()=>kh(),[]),[Pt,un]=g.useState(()=>Es()),pe=$e.cloudBoards.canAttempt&&(Pt==null?void 0:Pt.source)==="supabase-provider-session",[_t,mo]=g.useState([]),[os,Ae]=g.useState(null),[xt,Dt]=g.useState(!1),[ja,Ia]=g.useState(null),Fe=g.useMemo(()=>jg({storedMode:Ee,cloudConfigured:!0,cloudSessionAvailable:pe,cloudAccess:pe?{planKey:"provider",entitlementStatus:"active",currentBoardCount:_t.length,cloudBoardLimit:Number.MAX_SAFE_INTEGER,lockedBoardCount:0,canCreateBoard:!0}:null,bridgeProviderConfigured:!0,bridgeReachable:fe==="connected",hostedWebApp:!dt()&&!Ka(),hostedLocalBridgeAccessEnabled:Ka(),browserProviderConfigured:!0,browserLocalAvailable:!0,browserLocalAvailableWhenEmpty:!0,embeddedProviderConfigured:!1,supportsEmbeddedLocal:!1}),[pe,_t.length,fe,Ee]),[mn,Jt]=g.useState(null),[pn,Na]=g.useState(""),[Zt,Qt]=g.useState(null),[po,ea]=g.useState(null),[ta,at]=g.useState(!1),[gn,hn]=g.useState(!1),[Z,Ze]=g.useState(null),[nt,wt]=g.useState(null),[Ct,go]=g.useState(!1),[ss,Aa]=g.useState(!1),fn=g.useRef(new Map),aa=g.useMemo(()=>Ms(t.settings.appLanguage),[t.settings.appLanguage]),[bn,vt]=g.useState(!1),[ho,na]=g.useState(!1),[Bt,Ma]=g.useState("business"),[Qe,yn]=g.useState(()=>{var s;const a=Fn("business",t.settings.appLanguage)??Ms(t.settings.appLanguage)[0];return((s=Io(a))==null?void 0:s.id)??null}),[jt,Ra]=g.useState(()=>{const a=Fn("business",t.settings.appLanguage)??Ms(t.settings.appLanguage)[0],s=Io(a);return Un(zn(a,s==null?void 0:s.id,t.settings.appLanguage))}),[Ta,ot]=g.useState(null),[La,Ea]=g.useState(!1),[ge,xn]=g.useState(()=>yl(t.id,t.name)),[le,Ge]=g.useState(null),[rs,fo]=g.useState(null),[Hr,st]=g.useState(!1),[Ot,oa]=g.useState({}),[Pa,$t]=g.useState(null),_a=g.useMemo(()=>{var l,m;const a=kt.find(h=>h.id===t.id),s={id:t.id,name:t.name,updatedAt:t.updatedAt,nodeCount:t.nodes.length,edgeCount:t.edges.length,sourceKind:(l=t.source)==null?void 0:l.kind,sourceBoardId:(m=t.source)==null?void 0:m.boardId,order:(a==null?void 0:a.order)??-1},i=new Map(kt.map(h=>[h.id,h]));return i.set(t.id,{...a,...s}),Array.from(i.values()).sort((h,C)=>{const S=typeof h.order=="number"?h.order:Number.MAX_SAFE_INTEGER,M=typeof C.order=="number"?C.order:Number.MAX_SAFE_INTEGER;return S!==M?S-M:String(C.updatedAt||"").localeCompare(String(h.updatedAt||""))}).slice(0,7)},[t,kt]),Q=g.useMemo(()=>Fn(Bt,t.settings.appLanguage)??aa[0],[Bt,t.settings.appLanguage,aa]),Ue=g.useMemo(()=>Q?zn(Q,Qe,t.settings.appLanguage):null,[Q,t.settings.appLanguage,Qe]),Da=!!(Q&&(Q.options.length>0||!Q.quickCreateTemplateId)),Cn=g.useMemo(()=>No(Ue,jt),[Ue,jt]),I=g.useRef(t),G=g.useRef(y),te=g.useRef({...qa}),Sn=g.useRef(null),It=g.useRef(null),Ba=g.useRef(null),Oa=g.useRef(null),kn=g.useRef(null),wn=g.useRef(null),$a=g.useRef(new Map),vn=g.useRef(new Ng),sa=g.useRef(0),jn=g.useRef(null),Fa=g.useRef(0),ra=g.useRef(null),Ft=g.useRef(!1),Te=g.useRef(0),Me=g.useRef(0),Ua=g.useRef(),In=g.useRef(),Nn=g.useRef(null),ia=g.useRef(null),la=g.useRef(0),za=g.useRef(null),Ut=g.useRef(0),Wa=g.useRef(!1),rt=g.useCallback(a=>{Wa.current=a,go(a)},[]);g.useEffect(()=>(f.transitionTo("board-file-loading","mindcanvas-mount"),f.transitionTo("interactive-fullres","react-board-ready"),()=>f.transitionTo("disposed","mindcanvas-unmount")),[]),g.useEffect(()=>{const a=()=>un(Es());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;rt(s),f.emit("canvas.fullscreen.changed",{active:s})};return document.addEventListener("fullscreenchange",a),()=>document.removeEventListener("fullscreenchange",a)},[rt]),g.useEffect(()=>{const a=new Worker(new URL("/assets/mindCanvasSearchWorker-BzPMsHOB.js",import.meta.url),{type:"module"});return ra.current=a,a.onmessage=s=>{var h,C,S,M,k,R,E,_,N;const i=s.data;if(i.type==="READY"){Ft.current=!0,ce("ready"),f.emit("search.worker.ready");return}if(i.type!=="SEARCH_RESULT")return;if(i.seq!==Fa.current){f.emit("async.staleIgnored",{path:"search.worker",seq:i.seq});return}const l=new Map(I.current.nodes.map(w=>[w.id,w])),m=i.hits.map(w=>l.get(w.nodeId)).filter(w=>!!w);z(m),ee(0),de("worker"),f.emit("search.completed",{query:i.query,count:m.length,engine:"worker",durationMs:(h=i.profile)==null?void 0:h.durationMs,documentCount:(C=i.profile)==null?void 0:C.documentCount,candidateCount:(S=i.profile)==null?void 0:S.candidateCount,rankedCount:(M=i.profile)==null?void 0:M.rankedCount,viewportBoosted:(k=i.profile)==null?void 0:k.viewportBoosted,boostedCount:(R=i.profile)==null?void 0:R.boostedCount,indexedTokenCount:(E=i.profile)==null?void 0:E.indexedTokenCount,indexedPrefixCount:(_=i.profile)==null?void 0:_.indexedPrefixCount,indexedNGramCount:(N=i.profile)==null?void 0:N.indexedNGramCount})},a.onerror=s=>{Ft.current=!1,ce("failed"),f.emit("search.worker.failed",{message:s.message})},()=>{a.terminate(),ra.current=null,Ft.current=!1}},[]),g.useEffect(()=>{const a=()=>St({width:window.innerWidth,height:window.innerHeight});return window.addEventListener("resize",a),()=>window.removeEventListener("resize",a)},[]),g.useEffect(()=>(I.current=t,Et("syncing"),va("Saving board state to this browser."),window.clearTimeout(Ua.current),Ua.current=window.setTimeout(()=>{const a=Mt(I.current);Ne(lt()),Et(a?"ready":"error"),va(a?"Saved in this browser.":"Local browser storage failed.")},280),()=>window.clearTimeout(Ua.current)),[t]),g.useEffect(()=>{const a=ra.current;if(!a)return;const s=window.setTimeout(()=>{a.postMessage({type:"REBUILD_BOARD",boardId:t.id,nodes:Dd(t.nodes)}),f.emit("search.worker.synced",{boardId:t.id,count:t.nodes.length})},160);return()=>window.clearTimeout(s)},[t.id,t.nodes]),g.useEffect(()=>{G.current=y},[y]),g.useEffect(()=>{f.emit("canvas.gridMode.applied",{boardId:t.id,gridType:Xs(t.settings.gridType),gridSnap:t.settings.gridSnap??!0})},[t.id,t.settings.gridSnap,t.settings.gridType]),g.useEffect(()=>()=>{document.body.classList.remove("is-selecting")},[]);const b=g.useCallback((a,s=!0)=>{te.current=a,Ba.current&&(Ba.current.style.transform=`translate3d(${a.x}px, ${a.y}px, 0) scale(${a.scale})`),It.current&&(It.current.style.setProperty("--grid-x",`${a.x}px`),It.current.style.setProperty("--grid-y",`${a.y}px`),It.current.style.setProperty("--grid-small",`${24*a.scale}px`),It.current.style.setProperty("--grid-large",`${144*a.scale}px`)),window.clearTimeout(In.current),In.current=window.setTimeout(()=>Re(a),gh),s&&f.emit("camera.patch",{...a})},[]),L=g.useCallback(async()=>{var i;const a=++Te.current;if(re("checking"),qe(null),ie(null),f.emit("runtimeStatus.bridge.refresh.requested",{source:"mindcanvas"}),!dt()){re("blocked"),qe(null),ht([]),ie("Hosted LocalBridge access is off."),Pe(null),me("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:"refresh",reason:"hosted-access-off"});return}const s=await fa();if(a===Te.current){if(qe(s.status??null),s.state!=="connected"){re(s.state),ht([]),ie(s.message||"LocalBridge is unavailable."),Pe(null),me(s.message||"LocalBridge is unavailable.");return}try{const[l,m]=await Promise.all([Di(s.baseUrl),pp(s.baseUrl)]);if(a!==Te.current)return;const h=Ca(l.rootPath||((i=s.status)==null?void 0:i.workspace));Pe(h||null),me(h?null:"LocalBridge workspace path is unavailable."),h&&_e(C=>zl(h,C)),re("connected"),ht(m),ie(m.length>0?null:"No local boards found."),f.emit("projectStorage.workspace.refresh",{source:"board-list",path:h||null}),f.emit("localBridge.boards.listed",{count:m.length})}catch(l){if(a!==Te.current)return;re("unavailable"),ht([]);const m=l instanceof Error?l.message:String(l);ie(m),me(m)}}},[]);g.useEffect(()=>{dt()&&L()},[L]),g.useEffect(()=>{Xt&&(Tt(!0),f.emit("mindcanvas.projectGallery.opened",{source:"startup"}))},[Xt]);const ne=g.useCallback(()=>{Tt(a=>{const s=!a;return s&&ka.length===0&&fe!=="checking"&&L(),f.emit(s?"mindcanvas.projectGallery.opened":"mindcanvas.projectGallery.closed",{source:"top-tab"}),s})},[ka.length,fe,L]),ve=g.useCallback(a=>{Tt(s=>(s&&f.emit("mindcanvas.projectGallery.closed",{source:a}),!1))},[]),zt=g.useCallback(a=>{dn(a),localStorage.setItem(fl,String(a)),f.emit("mindcanvas.projectGallery.startupPreference",{enabled:a})},[]),it=g.useCallback(async(a="manual")=>{if(un(Es()),!pe){const s=$e.cloudBoards.canAttempt?"sign-in-required":$e.cloudBoards.mode;Ae(s==="sign-in-required"?"Login with Supabase is required before cloud boards can be listed.":"Cloud board adapter is not configured."),f.emit("projectStorage.cloud.unavailable",{reason:s,source:a});return}Dt(!0),Ae(null);try{const s=await Sp(Gs());mo(s),Ae(s.length>0?`Loaded ${s.length} cloud board${s.length===1?"":"s"}.`:"No cloud boards yet.")}catch(s){Ae(s instanceof Error?s.message:String(s))}finally{Dt(!1)}},[pe,$e.cloudBoards.canAttempt,$e.cloudBoards.mode]),da=g.useCallback(a=>{ns(a),f.emit("projectStorage.tab",{tab:a}),a==="cloud"&&it("tab")},[it]),Wt=g.useCallback(()=>{Bu(!0),f.emit("runtimeStatus.bridge.hostedAccess.enabled"),L()},[L]),ca=g.useCallback(a=>{Pe(a),_e(s=>zl(a,s))},[]),Bd=g.useCallback(async(a="manual")=>{var i;const s=++Me.current;if(me(null),f.emit("projectStorage.workspace.refresh.requested",{source:a}),!dt()){Pe(null),me("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:a,reason:"hosted-access-off"});return}try{const l=await fa();if(s!==Me.current)return;if(qe(l.status??null),l.state!=="connected"){re(l.state),Pe(null),me(l.message||"LocalBridge is unavailable.");return}const m=await Di(l.baseUrl);if(s!==Me.current)return;const h=Ca(m.rootPath||((i=l.status)==null?void 0:i.workspace));me(h?null:"LocalBridge workspace path is unavailable."),h&&ca(h),f.emit("projectStorage.workspace.refresh",{source:a,path:h||null})}catch(l){if(s!==Me.current)return;me(l instanceof Error?l.message:String(l))}},[ca]),is=g.useCallback(async(a,s)=>{const i=Ca(a);if(!i||Je)return;const l=++Me.current;if(yt(!0),me("Switching LocalBridge workspace..."),f.emit("projectStorage.workspace.set.requested",{source:s,path:i}),!dt()){Pe(null),me("Hosted LocalBridge access is off."),yt(!1),f.emit("projectStorage.workspace.blocked",{source:s,reason:"hosted-access-off"});return}try{const m=await fa();if(l!==Me.current)return;if(qe(m.status??null),m.state!=="connected"){re(m.state),me(m.message||"LocalBridge is unavailable.");return}const h=Wn(m.status);if(!h){re("unavailable"),me("LocalBridge write token is unavailable.");return}const C=await Ou(i,h,m.baseUrl);if(l!==Me.current)return;const S=Ca(C.workspace||i);ca(S),re("connected"),me(`Local workspace set to ${Bo(S)}.`),f.emit("projectStorage.workspace.set",{source:s,path:S}),L()}catch(m){if(l!==Me.current)return;re("unavailable"),me(m instanceof Error?m.message:String(m))}finally{l===Me.current&&yt(!1)}},[Je,L,ca]),Od=g.useCallback(async()=>{const a=++Me.current;if(yt(!0),me("Opening folder picker..."),f.emit("projectStorage.workspace.browse.requested",{path:be||null}),!dt()){Pe(null),me("Hosted LocalBridge access is off."),yt(!1),f.emit("projectStorage.workspace.blocked",{source:"browse",reason:"hosted-access-off"});return}try{const s=await fa();if(a!==Me.current)return;if(qe(s.status??null),s.state!=="connected"){re(s.state),me(s.message||"LocalBridge is unavailable.");return}const i=Wn(s.status),l=await $u(be,i,s.baseUrl);if(a!==Me.current)return;if(l.canceled||!l.success||!l.path){me("Workspace selection cancelled."),f.emit("projectStorage.workspace.browse.cancelled");return}f.emit("projectStorage.workspace.browse",{path:l.path}),yt(!1),await is(l.path,"browse")}catch(s){if(a!==Me.current)return;me(s instanceof Error?s.message:String(s))}finally{a===Me.current&&yt(!1)}},[is,be]),$d=g.useCallback(async()=>{var s,i;const a=++Te.current;if(Ce(!0),ie(null),(s=I.current.source)!=null&&s.partialImport){ie("This imported board came from a partial original payload, so export is blocked to avoid data loss."),Ce(!1);return}if((i=I.current.source)!=null&&i.truncated){ie("This imported board was truncated, so export is blocked to avoid data loss."),Ce(!1);return}if(!dt()){re("blocked"),qe(null),ie("Hosted LocalBridge access is off."),Ce(!1);return}try{const l=await fa();if(a!==Te.current)return;if(qe(l.status??null),l.state!=="connected"){re(l.state),ie(l.message||"LocalBridge is unavailable.");return}const m=Wn(l.status);if(!m){re("unavailable"),ie("LocalBridge write token is unavailable.");return}const h=await hp(I.current,te.current,m,l.baseUrl);if(a!==Te.current)return;const C={...I.current,nodes:h.nodes,source:h.source,updatedAt:h.metadata.UpdatedAt||new Date().toISOString()};o(C),Mt(C),Ne(lt()),re("connected"),ht(S=>[h.metadata,...S.filter(M=>M.Id!==h.metadata.Id)]),ie(`Exported "${Xe(h.metadata.Title)}" to LocalBridge.`)}catch(l){if(a!==Te.current)return;re("unavailable"),ie(l instanceof Error?l.message:String(l))}finally{a===Te.current&&Ce(!1)}},[]),ze=g.useCallback((a,s,i={})=>{const l=Vi(a),m=_i(l),h=Hi(m);d(C=>Xa(C,I.current,{description:"Activate board"})),u([]),o(h),c(h.nodes[0]?[h.nodes[0].id]:[]),$(null),gt(null),De(null),ve("board-activate"),f.emit(s,{boardId:h.id,...i})},[ve]),Vr=g.useCallback(()=>{const a=Ol(I.current.settings);ze(a,"board.local.create"),b({x:540,y:210,scale:1})},[ze,b]),Fd=g.useCallback(async a=>{if(!pe){Ae("Login with Supabase is required before cloud boards can be opened."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:"load-board"});return}Ia(a.id),Ae(null);try{const s=await kp(Gs(),a.id,I.current.settings);if(!s){Ae("Cloud board was not found or is not available to this user.");return}ze(s,"board.cloud.switch",{sourceBoardId:a.id}),b({x:540,y:210,scale:1})}catch(s){Ae(s instanceof Error?s.message:String(s))}finally{Ia(null)}},[ze,b,pe]),bo=g.useCallback(async(a,s)=>{if(!pe){Ae("Login with Supabase is required before cloud boards can be saved."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:s});return}Dt(!0),Ae(null);try{const i=await wp(Gs(),a,te.current);if(!i){Ae("Cloud board save did not return a board.");return}const l=new Date().toISOString(),m={...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}};o(m),Mt(m),Ne(lt()),mo(h=>[i,...h.filter(C=>C.id!==i.id)]),Ae(`Saved "${Xe(i.name)}" to cloud.`)}catch(i){Ae(i instanceof Error?i.message:String(i))}finally{Dt(!1)}},[pe]),Ud=g.useCallback(()=>{bo(I.current,"save-current")},[bo]),zd=g.useCallback(()=>{const a=Ol(I.current.settings);bo(a,"new-cloud-board")},[bo]),Wd=g.useCallback(()=>{var l;if(!Q)return;if(Q.options.length>0||!Q.quickCreateTemplateId){const m=te.current,h={x:(window.innerWidth/2-m.x)/m.scale,y:(window.innerHeight/2-m.y)/m.scale},C=I.current.nodes,S=C.length?Math.max(...C.map(N=>N.x+N.width)):h.x-280-Po,M=C.length?Math.min(...C.map(N=>N.y)):h.y-310,k=Fu(Q,Qe,S+Po,M,jt,I.current.settings.appLanguage);o(N=>{var w;return d(W=>Xa(W,N,{description:"Create template card"})),u([]),f.emit("templateCard.node.create",{id:k.id,launcherId:Q.id,optionId:((w=k.metadata)==null?void 0:w.templateLauncherSelectedOptionId)??null,source:"launcher-panel"}),{...N,nodes:[...N.nodes,k],updatedAt:new Date().toISOString()}}),c([k.id]);const R=Math.min(te.current.scale,se((window.innerHeight-190)/k.height,.72,1)),E=Math.max(320,window.innerHeight-180);b({...te.current,scale:R,x:window.innerWidth/2-(k.x+k.width/2)*R,y:48+E/2-(k.y+k.height/2)*R}),F(k.id),window.setTimeout(()=>F(N=>N===k.id?null:N),1e3),vt(!1),ot(null);const _="Template card added to the current canvas.";ye(_),window.setTimeout(()=>{ye(N=>N===_?null:N)},2200),f.emit("templateCard.node.focus",{nodeId:k.id,launcherId:Q.id});return}const s=No(Ue,jt);if(s){ot(s),f.emit("template.validation.failed",{launcherId:Q.id,optionId:Qe,templateId:(Ue==null?void 0:Ue.id)??null,message:s});return}const i=Uu(Q,Qe,jt,I.current.settings);if(!i){const m="Template could not be created.";ot(m),f.emit("template.validation.failed",{launcherId:Q.id,optionId:Qe,templateId:(Ue==null?void 0:Ue.id)??null,message:m});return}ze(i.board,"template.board.create",{launcherId:i.launcher.id,optionId:((l=i.option)==null?void 0:l.id)??null,templateId:i.template.id,nodes:i.board.nodes.length}),b({x:540,y:210,scale:1}),vt(!1),ot(null)},[ze,Ue,Q,b,Qe,jt]),Yr=g.useCallback(a=>{if(a===I.current.id){ve("stored-board-current");return}const s=ju(a);s&&(ze(s,"board.local.switch"),b({x:540,y:210,scale:1}))},[ze,b,ve]),ls=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}),Iu(a),Ne(lt())},[]),Hd=g.useCallback((a,s)=>{if(!a||!s||a===s)return;Mt(I.current);const i=lt(),l=_a.map(R=>R.id),m=l.indexOf(a),h=l.indexOf(s);if(m<0||h<0)return;const C=[...l],S=C.splice(m,1)[0];if(!S)return;C.splice(h,0,S);const M=i.map(R=>R.id).filter(R=>!C.includes(R)),k=Nu([...C,...M]);Ne(k),f.emit("board.tabs.drop",{sourceId:a,targetId:s,visibleIds:C})},[_a]),Vd=g.useCallback(async a=>{const s=++Te.current;co(a.Id),ie(null);try{const i=await fp(a,I.current.settings);if(s!==Te.current)return;ze(i,"board.localBridge.switch",{sourceBoardId:a.Id});const l=lr(a.LastCameraX,a.LastCameraY,a.LastCameraZ);b(l?{...l,scale:se(l.scale,$o,Fo)}:{x:540,y:210,scale:1})}catch(i){if(s!==Te.current)return;ie(i instanceof Error?i.message:String(i))}finally{s===Te.current&&co(null)}},[ze,b]),Yd=g.useCallback(()=>{var a;(a=wn.current)==null||a.click()},[]),Gd=g.useCallback(async a=>{var i;const s=Array.from(a??[]).filter(l=>/\.json$/i.test(l.name));if(s.length===0){ye("Choose a React or MindExec board JSON file."),window.setTimeout(()=>ye(null),1800);return}try{const l=await Promise.all(s.map(async R=>({file:R,payload:JSON.parse(await R.text())}))),m=l.find(er),h=bf(l),C=l.find(R=>!er(R)&&Qs(R.payload))??l.find(R=>!er(R)&&ad(R.payload)>0);if(!C)throw new Error("No board JSON file was found.");const S=Qs(C.payload)?null:yf(C,h),M=S?lr(S.metadata.LastCameraX,S.metadata.LastCameraY,S.metadata.LastCameraZ):null,k=Qs(C.payload)?ff(C.payload,C.file.name):od(C.payload,I.current.settings,{boardId:(S==null?void 0:S.metadata.Id)??Jo(C.file.name),title:(S==null?void 0:S.metadata.Title)||Jo(C.file.name),updatedAt:S==null?void 0:S.metadata.UpdatedAt,layoutPayload:m==null?void 0:m.payload,cameraBookmarks:S==null?void 0:S.metadata.CameraBookmarks});if(k.nodes.length===0)throw new Error("The selected file did not contain any importable board nodes.");ze(k,"board.import.file",{fileName:C.file.name,layoutFileName:(m==null?void 0:m.file.name)??null,metadataFileName:(S==null?void 0:S.fileName)??null,nodes:k.nodes.length,edges:k.edges.length,sourceKind:((i=k.source)==null?void 0:i.kind)??null,originalBoardId:(S==null?void 0:S.metadata.Id)??null,cameraRestored:!!M}),Mt(k),Ne(lt()),b(M?{...M,scale:se(M.scale,$o,Fo)}:{x:540,y:210,scale:1}),ye(`Imported "${Xe(k.name)}".`),window.setTimeout(()=>ye(null),2200)}catch(l){const m=l instanceof Error?l.message:String(l);ye(`Import failed: ${m}`),f.emit("board.import.failed",{message:m}),window.setTimeout(()=>ye(null),3200)}},[ze,b]);g.useEffect(()=>{b(te.current,!1)},[b]);const je=g.useCallback((a,s)=>{const i=te.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}:Nn.current??{clientX:window.innerWidth/2,clientY:window.innerHeight/2},l=je(i.clientX,i.clientY);return{x:l.x-150,y:l.y-80}},[je]),Kd=g.useCallback(a=>{Zs(a.target)||(Nn.current={clientX:a.clientX,clientY:a.clientY})},[]),D=g.useCallback((a,s,i={})=>{o(l=>{d(h=>Xa(h,l,{description:s,mergeKey:typeof i.mergeKey=="string"?i.mergeKey:null})),u([]);const m=a(l);return f.emit(s,i),{...m,updatedAt:new Date().toISOString()}})},[]);g.useEffect(()=>{const a=sm();if(!a)return;const s=je(window.innerWidth/2,window.innerHeight/2),{sourceNode:i,itemNodes:l,taskNode:m,edges:h}=rm(a,{x:s.x-390,y:s.y-145});if(I.current.nodes.some(C=>{var S;return((S=C.metadata)==null?void 0:S.ToolHandoffId)===a.id})){Wi(a.id),f.emit("tool.handoff.duplicateIgnored",{handoffId:a.id,toolKey:a.toolKey});return}D(C=>({...C,nodes:[...C.nodes,i,...l,m],edges:[...C.edges,...h]}),"tool.handoff.consumed",{handoffId:a.id,toolKey:a.toolKey,createdNodes:2+l.length,resultItems:l.length}),Wi(a.id),c([m.id]),F(m.id),window.setTimeout(()=>F(C=>C===m.id?null:C),1400)},[D,je]);const Va=g.useCallback((a,s,i={})=>{o(l=>{const m=a(l);return f.emit(s,i),{...m,updatedAt:new Date().toISOString()}})},[]),ds=g.useCallback(a=>{const s=a.slice(0,90);Va(i=>({...i,name:s}),"board.rename",{boardId:I.current.id})},[Va]),Se=g.useCallback((a,s="inline")=>{const i=typeof a.appLanguage=="string"?{...a,appLanguage:Vl(a.appLanguage)}:a;if(Va(l=>{const m={...l.settings,...i};if(typeof i.appLanguage=="string"){const h=zu(l.nodes,m.appLanguage);return h.changed&&f.emit("template.localization.relocalized",{appLanguage:h.language,nodeCount:h.nodes.length,source:s}),{...l,settings:m,nodes:h.nodes}}return{...l,settings:m}},"settings.patch",{keys:Object.keys(i),source:s}),typeof i.appLanguage=="string"){const l=Wu(i.appLanguage);f.emit("appLanguage.select",{appLanguage:l,source:s})}if(typeof i.model=="string"){const l=Rs(i.model),m=Bi(l);f.emit("textModel.select",{model:l,provider:(m==null?void 0:m.provider)??"custom",source:s})}if(typeof i.executionMode=="string"||typeof i.directInstructionQueueMode=="string"){const l={...I.current.settings,...i};im(l,s)}lm({...I.current.settings,...i})},[Va]),Gr=g.useCallback((a,s)=>{Se({[a]:s},`inline.${String(a)}`)},[Se]),Xd=g.useMemo(()=>no(t.settings,"Image"),[t.settings]),qd=g.useMemo(()=>no(t.settings,"Video"),[t.settings]),Jd=g.useMemo(()=>Hu(t.settings),[t.settings]),cs=Rs(t.settings.model),An=Bi(cs),Zd=g.useCallback((a,s="bottom-input")=>{const i=Rs(a);Se({model:i},`connection.model.${s}`)},[Se]),Qd=g.useCallback((a,s)=>{const i=Vu(a,s),l=Oi(a).find(M=>M.id===i);if(!l)return;const m=I.current.settings,h=a==="Image"?m.imageRouterImageAspectPresetId:m.imageRouterVideoAspectPresetId,C=tr(a,l,h),S=a==="Image"?{imageRouterImageModel:l.id,imageRouterImageAspectPresetId:C.id}:{imageRouterVideoModel:l.id,imageRouterVideoAspectPresetId:C.id};Se(S,`inline.${a.toLowerCase()}Model`),f.emit("media.model.select",{mode:a,model:l.id,aspectPresetId:C.id,requestedSize:ar(C)})},[Se]),ec=g.useCallback((a,s)=>{const i=Yl(a,I.current.settings),l=tr(a,i,s),m=a==="Image"?{imageRouterImageAspectPresetId:l.id}:{imageRouterVideoAspectPresetId:l.id};Se(m,`inline.${a.toLowerCase()}Aspect`),f.emit("media.aspect.select",{mode:a,model:i.id,aspectPresetId:l.id,requestedSize:ar(l)})},[Se]),tc=g.useCallback(()=>{at(!0),f.emit("settings.dialog.open",{boardId:I.current.id})},[]),ac=g.useCallback(()=>{at(!1),f.emit("settings.dialog.close",{boardId:I.current.id})},[]),nc=g.useCallback(()=>{hn(!0),f.emit("promptDebug.open",{boardId:I.current.id})},[]),oc=g.useCallback(()=>{hn(!1),f.emit("promptDebug.close",{boardId:I.current.id})},[]),sc=g.useCallback(a=>{const s=I.current.settings.appLanguage,i=Fn(a,s);if(!i)return;const l=Io(i),m=zn(i,l==null?void 0:l.id,s);Ma(i.id),yn((l==null?void 0:l.id)??null),Ra(Un(m)),ot(null),f.emit("template.launcher.select",{launcherId:i.id,optionId:(l==null?void 0:l.id)??null,templateId:(m==null?void 0:m.id)??null})},[]),rc=g.useCallback(()=>{const a=I.current.settings.appLanguage,s=Fn(Bt,a)??aa[0];if(!s)return;const i=Io(s,Qe),l=zn(s,i==null?void 0:i.id,a);Ma(s.id),yn((i==null?void 0:i.id)??null),Ra(m=>Object.keys(m).length>0?m:Un(l)),ot(null),Ea(!1),st(!1),vt(!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})},[Bt,Qe,aa]),ic=g.useCallback(()=>{vt(!1),ot(null),f.emit("template.launcher.close",{launcherId:Bt})},[Bt]),lc=g.useCallback(a=>{if(!Q)return;const s=zn(Q,a,I.current.settings.appLanguage);yn(a),Ra(Un(s)),ot(null),f.emit("template.option.select",{launcherId:Q.id,optionId:a,templateId:(s==null?void 0:s.id)??null})},[Q]),dc=g.useCallback((a,s)=>{Ra(i=>({...i,[a]:s})),Ta&&ot(null),f.emit("template.input.patch",{launcherId:Q==null?void 0:Q.id,key:a})},[Q==null?void 0:Q.id,Ta]),We=g.useCallback(a=>{fo(a),window.setTimeout(()=>{fo(s=>s===a?null:s)},2600)},[]),cc=g.useCallback(()=>{vt(!1),st(!1),na(a=>{const s=!a;return f.emit(s?"templateStudio.chooser.open":"templateStudio.chooser.close",{boardId:I.current.id,studioOpen:La}),s})},[La]),Kr=g.useCallback(()=>{na(!1),f.emit("templateStudio.chooser.close",{boardId:I.current.id})},[]),Xr=g.useCallback(()=>{const a=I.current;vt(!1),st(!1),na(!1),xn(yl(a.id,a.name)),Ge(null),Ea(!0),f.emit("templateStudio.open",{boardId:a.id,nodeCount:a.nodes.length})},[]),yo=g.useCallback(a=>{const s=I.current,i=Ao(ge,s.nodes);Ge(i),xl(s.id,ge);const l=Mt(s);return Ne(lt()),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},[ge]),qr=g.useCallback(()=>{yo("exit"),Ea(!1),na(!1),st(!1),Ge(null),f.emit("templateStudio.close",{boardId:I.current.id})},[yo]),uc=g.useCallback(()=>{const a=wf(I.current.settings),s=Oo(a.name);na(!1),st(!1),xn(s),Ge(null),Ea(!0),xl(a.id,s),Mt(a),Ne(lt()),ze(a,"templateStudio.board.create",{templateId:s.templateId,source:"template-studio-chooser"}),b({x:540,y:210,scale:1}),f.emit("templateStudio.chooser.startNew",{boardId:a.id,templateId:s.templateId}),We("New Template Studio draft board opened.")},[ze,b,We]),mc=g.useCallback(()=>{Xr(),f.emit("templateStudio.chooser.convertCurrent",{boardId:I.current.id,nodes:I.current.nodes.length}),We("Current board is now in Template Studio mode.")},[Xr,We]),xo=g.useCallback((a,s)=>{xn(i=>{const l={...i,[a]:a==="templateId"?qn(s):s};return f.emit("templateStudio.draft.patch",{key:a}),l}),Ge(null)},[]),pc=g.useCallback(()=>{const a=yo("save");We(a.issues.length>0?"Template draft saved with manifest issues.":"Template draft and board saved locally.")},[yo,We]),gc=g.useCallback(a=>{const s=je(window.innerWidth/2,window.innerHeight/2),i=V("node"),l=$i(a),m=`${a.replace("template.","")}-${Date.now().toString(36)}`,h=a==="template.input",C=h?300:a==="template.prompt"?360:340,S=h?178:a==="template.prompt"?214:190,M={[U.studioNodeType]:a,[U.templateNodeId]:m,[U.templateRole]:a.replace(/^template\./,""),[U.compileTarget]:l,Source:"template-studio"};h&&(M[U.inputKey]=m,M[U.inputType]="text",M[U.inputRequired]="true");const k={id:i,kind:a==="template.prompt"?"ai-task":a==="template.section"?"markdown":"note",title:Ts(a),body:h?"Defines a value requested before template board creation.":a==="template.prompt"?"Write the prompt instruction. Use {{input_key}} placeholders for Template Studio inputs.":"Write the reusable canvas content for this template node.",x:s.x-C/2,y:s.y-S/2,width:C,height:S,status:a==="template.prompt"?"idle":void 0,tags:["Template Studio",Ts(a)],metadata:M};D(R=>({...R,nodes:[...R.nodes,k]}),"templateStudio.node.add",{id:k.id,studioNodeType:a,compileTarget:l}),c([k.id]),Ge(null)},[D,je]),us=g.useCallback(()=>{const a=Ao(ge,I.current.nodes);return Ge(a),f.emit("templateStudio.compile",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length,issues:a.issues.length}),We(a.issues.length>0?"Template manifest has issues.":"Template manifest compiled."),a},[We,ge]),hc=g.useCallback(async()=>{const a=le??Ao(ge,I.current.nodes);le||Ge(a);const s=await Jn(a.manifestJson);f.emit("templateStudio.manifest.copy",{templateId:a.template.id,chars:a.manifestJson.length,method:s}),We("Template manifest copied.")},[We,ge,le]),fc=g.useCallback(()=>{const a=us();if(a.issues.length>0){st(!1),f.emit("templateStudio.test.open.blocked",{templateId:a.template.id,issues:a.issues.length}),We("Fix manifest issues before test create.");return}oa(Un(a.template)),$t(null),st(!0),f.emit("templateStudio.test.open",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length})},[us,We]),bc=g.useCallback(()=>{st(!1),oa({}),$t(null),f.emit("templateStudio.test.close",{templateId:(le==null?void 0:le.template.id)??null})},[le==null?void 0:le.template.id]),yc=g.useCallback((a,s)=>{oa(i=>({...i,[a]:s})),Pa&&$t(null),f.emit("templateStudio.test.input.patch",{key:a})},[Pa]),xc=g.useCallback(()=>{const a=(le==null?void 0:le.issues.length)===0?le:Ao(ge,I.current.nodes);if(Ge(a),a.issues.length>0){$t("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=No(a.template,Ot);if(s){$t(s),f.emit("templateStudio.test.board.blocked",{templateId:a.template.id,message:s});return}const i=Cl(ge),l=Yu(i,void 0,a.template,Ot,I.current.settings);Mt(l.board),Mt(I.current),Ne(lt()),st(!1),oa({}),We(`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})},[We,ge,le,Ot]),Cc=g.useCallback((a,s)=>{c(i=>s?i.includes(a)?i.filter(l=>l!==a):[...i,a]:[a]),$(null)},[]),Sc=g.useCallback(()=>{var C,S,M,k,R,E,_,N;const i=se(window.innerWidth*.62,282,Math.max(282,window.innerWidth-250-32)),l=se(window.innerHeight*.58,300/2+32,Math.max(300/2+32,window.innerHeight-300/2-96)),m=je(i,l),h={id:V("node"),kind:"memo",title:"Agent",body:vh,x:m.x-500/2,y:m.y-300/2,width:500,height:300,tags:["Agent Command","Researcher","Draft"],metadata:Af()};D(w=>({...w,nodes:[...w.nodes,h]}),"agentCommand.node.add",{id:h.id,semanticType:(C=h.metadata)==null?void 0:C.SemanticType,status:(S=h.metadata)==null?void 0:S.AgentCommandStatus,requestedRole:(M=h.metadata)==null?void 0:M.AgentCommandRequestedRole,adapterState:(k=h.metadata)==null?void 0:k.AdapterState}),f.emit("mindcanvas.agentCommand.add",{id:h.id,semanticType:(R=h.metadata)==null?void 0:R.SemanticType,status:(E=h.metadata)==null?void 0:E.AgentCommandStatus,requestedRole:(_=h.metadata)==null?void 0:_.AgentCommandRequestedRole,adapterState:(N=h.metadata)==null?void 0:N.AdapterState}),c([h.id]),$(null),F(h.id),window.setTimeout(()=>F(w=>w===h.id?null:w),1200)},[D,je]),kc=g.useCallback(()=>{var C,S,M,k,R,E,_,N;const i=se(window.innerWidth*.6,232,Math.max(232,window.innerWidth-200-32)),l=se(window.innerHeight*.56,300/2+32,Math.max(300/2+32,window.innerHeight-300/2-96)),m=je(i,l),h={id:V("node"),kind:"memo",title:"Code Note",body:wh,x:m.x-400/2,y:m.y-300/2,width:400,height:300,tags:["Code Note","Draft","Unlinked"],metadata:Mf()};D(w=>({...w,nodes:[...w.nodes,h]}),"codeNote.node.add",{id:h.id,semanticType:(C=h.metadata)==null?void 0:C.SemanticType,status:(S=h.metadata)==null?void 0:S.CodeNoteStatus,syncState:(M=h.metadata)==null?void 0:M.CodeNoteSyncState,adapterState:(k=h.metadata)==null?void 0:k.AdapterState}),f.emit("mindcanvas.codeNote.add",{id:h.id,semanticType:(R=h.metadata)==null?void 0:R.SemanticType,status:(E=h.metadata)==null?void 0:E.CodeNoteStatus,syncState:(_=h.metadata)==null?void 0:_.CodeNoteSyncState,adapterState:(N=h.metadata)==null?void 0:N.AdapterState}),c([h.id]),$(null),F(h.id),window.setTimeout(()=>F(w=>w===h.id?null:w),1200)},[D,je]),Le=g.useCallback((a,s)=>{var R,E,_,N,w,W,ae,oe,Dn;if(a==="remote-monitor"){const Ke=I.current.nodes.find(ba);if(Ke){const Bn=wl(Ke),Ie=te.current.scale,On=kl(Ke.height,window.innerHeight);b({...te.current,x:window.innerWidth/2-Bn.x*Ie,y:On-Bn.y*Ie}),c([Ke.id]),F(Ke.id),window.setTimeout(()=>F($n=>$n===Ke.id?null:$n),1e3);const Ti="Remote monitor already exists on this board. Focused existing node.";ye(Ti),window.setTimeout(()=>{ye($n=>$n===Ti?null:$n)},2200),f.emit("remoteMonitor.node.duplicateIgnored",{action:"toolbar-add",nodeId:Ke.id,surface:"mindcanvas-node"});return}}const i=s?Fr[s]:null,l=(i==null?void 0:i.mode)??(a==="image"?"Image":a==="video"?"Video":null),m=l?no(I.current.settings,l):null,h=i?i.width:a==="remote-monitor"?860:a==="remote-control"?560:a==="csv-table"?720:a==="embed"?460:a==="markdown"?400:a==="image"||a==="mask"?360:a==="ai-task"?340:a==="pdf"||a==="file"||a==="directory"?300:320,C=i?i.height:a==="remote-monitor"?640:a==="remote-control"?390:a==="csv-table"?420:a==="embed"||a==="markdown"||a==="image"||a==="mask"?260:a==="ai-task"?196:a==="pdf"||a==="file"||a==="directory"?154:176,S=a==="remote-monitor"?kl(C,window.innerHeight):window.innerHeight/2,M=je(window.innerWidth/2,S),k={id:V("node"),kind:a,title:i?i.title:a==="ai-task"?"AI Task":a==="remote-monitor"?"Multi Desktop Monitor":a==="remote-control"?"Remote Device":a==="image"?"Image":a==="mask"?"Image Mask":a==="video"?"Video":a==="embed"?"Web Embed":a==="csv-table"?"CSV Table":a==="pdf"?"PDF Document":a==="file"?"File":a==="directory"?"Directory":a==="memo"?"Memo":a==="markdown"?"Markdown":a==="code"?"Code Note":"Note",body:i?i.body:a==="ai-task"?"Describe the work this task should perform.":a==="remote-monitor"?"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":a==="remote-control"?"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":a==="image"?"Describe the image to generate or attach the visual reference here.":a==="mask"?"Image edit mask reference. Attach or paste a mask image here.":a==="video"?"Describe the video shot, motion, and duration target here.":a==="embed"?"https://example.com/":a==="csv-table"?`Metric,Value,Stage
42
- Leads,42,Validation
43
- Trials,7,Launch
44
- Revenue,120,Learning`:a==="pdf"?"https://example.com/document.pdf":a==="file"?"https://example.com/file":a==="directory"?"LocalBridge directory reference. Include and exclude patterns are stored with this node.":a==="memo"?"Capture a quick thought, reminder, or visual note here.":a==="markdown"?`# Markdown note
45
-
46
- Write structured notes, docs, or prompt context here.`:"Write the thought, evidence, or reusable context here.",x:M.x-h/2,y:M.y-C/2,width:h,height:C,status:a==="ai-task"?"idle":void 0,tags:i?["AI Task",i.tag,"Spec only"]:a==="ai-task"?["AI Task"]:a==="remote-monitor"?["Remote","Monitor","LocalBridge"]:a==="remote-control"?["Remote","Control","LocalBridge"]:a==="mask"?["Mask","ImageRouter"]:a==="csv-table"?["CSV","Table"]:a==="embed"?["Embed","Web"]:a==="memo"?["Memo"]:a==="markdown"?["Markdown"]:a==="text"?["Text"]:[a],imageUrl:a==="image"||a==="mask"?"/assets/mindexecution-mindcanvas.png":void 0,assetUrl:a==="embed"?"https://example.com/":a==="pdf"?"https://example.com/document.pdf":a==="file"?"https://example.com/file":void 0,sourceFilePath:a==="directory"?Cr:void 0,metadata:i?Nf(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?Wr(I.current.settings,l):void 0};D(Ke=>({...Ke,nodes:[...Ke.nodes,k]}),"node.add",{id:k.id,kind:a,automationKind:i==null?void 0:i.kind,...m?{mode:m.mode,model:m.model.id,aspectPresetId:m.aspect.id,requestedSize:m.requestedSize}:{}}),i&&f.emit("automation.mediaNode.add",{id:k.id,kind:i.kind,mode:i.mode,model:(R=k.metadata)==null?void 0:R.MediaModel,aspectPresetId:(E=k.metadata)==null?void 0:E.AspectPresetId,requestedSize:(_=k.metadata)==null?void 0:_.RequestedSize,adapterState:((N=k.metadata)==null?void 0:N.AdapterState)??"adapter-gated",externalActionPolicy:((w=k.metadata)==null?void 0:w.AutomationExternalActionPolicy)??"spec-only-until-review"}),a==="remote-monitor"&&f.emit("remoteMonitor.node.add",{id:k.id,surface:"mindcanvas-node",width:k.width,height:k.height,adapterState:((W=k.metadata)==null?void 0:W.AdapterState)??"adapter-gated"}),a==="mask"&&f.emit("node.mask.add",{id:k.id,hasImage:!!k.imageUrl,imageRouterMask:((ae=k.metadata)==null?void 0:ae.ImageRouterMask)??"true",semanticType:((oe=k.metadata)==null?void 0:oe.SemanticType)??"ImageEditMask",adapterState:((Dn=k.metadata)==null?void 0:Dn.AdapterState)??"adapter-gated"}),c([k.id])},[b,D,je]),X=g.useCallback((a,s)=>{Va(i=>({...i,nodes:i.nodes.map(l=>l.id===a?{...l,...s}:l)}),"node.patch",{id:a,keys:Object.keys(s)})},[Va]),Nt=g.useCallback((a,s)=>{const i=G.current[0],l=I.current.nodes.find(m=>m.id===i);l&&(X(i,{metadata:{...l.metadata??{},[a]:a===U.templateNodeId||a===U.inputKey?qn(s):s}}),Ge(null),f.emit("templateStudio.node.metadata.patch",{id:i,key:a}))},[X]),Jr=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[U.templateNodeId])||qn(i.title),m={...i.metadata??{},[U.studioNodeType]:a,[U.templateNodeId]:l,[U.templateRole]:a.replace(/^template\./,""),[U.compileTarget]:$i(a,i)};a==="template.input"&&(m[U.inputKey]=m[U.inputKey]||qn(i.title),m[U.inputType]=m[U.inputType]||"text",m[U.inputRequired]=m[U.inputRequired]||"true"),X(s,{metadata:m}),Ge(null),f.emit("templateStudio.node.role.assign",{id:s,studioNodeType:a})},[X]),j=g.useCallback(a=>{ye(a),window.setTimeout(()=>{ye(s=>s===a?null:s)},2200)},[]),wc=g.useCallback((a,s,i)=>{var M;const l=I.current.nodes.find(k=>k.id===a);if(!l)return;const m=Hl(l.body),h=Gu(l,s,i,I.current.settings);if(!h||h.nodes.length===0){j("Template card could not generate nodes."),f.emit("templateCard.generate.blocked",{nodeId:a,optionId:s});return}D(k=>({...k,nodes:[...k.nodes,...h.nodes]}),"templateCard.generate",{nodeId:a,launcherId:h.launcher.id,optionId:((M=h.option)==null?void 0:M.id)??null,templateId:h.template.id,runId:h.runId,generatedCount:h.nodes.length});const C=h.nodes.map(k=>k.id);c(C),F(C[0]??null),window.setTimeout(()=>F(k=>k===C[0]?null:k),1200);const S=m!=null&&m.generatedMessageFormat?m.generatedMessageFormat.replace("{0}",String(h.nodes.length)):`${h.nodes.length} template node${h.nodes.length===1?"":"s"} generated below the card.`;j(S)},[D,j]),vc=g.useCallback(a=>{const s=I.current.nodes.find(R=>R.id===a.sourceNodeId),i=je(window.innerWidth/2,window.innerHeight/2),l=560,m=390,h=V("node"),C=s?s.x+s.width+Po:i.x-l/2,S=s?s.y:i.y-m/2,M={SemanticType:"RemoteFleetDevice",RemoteFleetSchemaVersion:"remote-fleet-device@1",RemoteFleetSourceMonitorNodeId:a.sourceNodeId,RemoteFleetDeviceId:a.deviceId,RemoteFleetDeviceName:a.deviceName,RemoteFleetDevicePlatform:a.platform||"unknown",RemoteFleetDeviceConnected:String(a.connected===!0),RemoteFleetDeviceCanControl:String(a.connected===!0),RemoteFleetDeviceCanDispatchTask:String(a.connected===!0),RemoteInput:"Off",RemoteHub:a.connected?"Online":"Preview",RemoteRoute:a.baseUrl?"Local":"Preview",RemoteBaseUrl:a.baseUrl||"http://127.0.0.1:5147",AdapterState:a.baseUrl?"localbridge-connected":"adapter-gated"};a.framePath&&(M.RemoteFleetLatestFramePath=a.framePath),a.frameUrl&&(M.RemoteFleetLatestFrameUrl=a.frameUrl),a.dataUrl&&(M.RemoteFleetLatestFrameDataUrl=a.dataUrl),a.frameSeq&&(M.RemoteFleetLatestFrameSeq=String(a.frameSeq));const k={id:h,kind:"remote-control",title:a.deviceName||"Remote Device",body:`Remote device control: ${a.deviceId}`,x:C,y:S,width:l,height:m,tags:["Remote","Control","LocalBridge"],metadata:M};D(R=>({...R,nodes:[...R.nodes,k]}),"remoteControl.node.add",{id:k.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId}),c([k.id]),j(`Remote control node created for ${a.deviceName||a.deviceId}.`),f.emit("remoteControl.node.add",{nodeId:k.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId,connected:a.connected===!0})},[D,je,j]),ua=g.useCallback(a=>{const s=Do(te.current)??{...qa};Se({cameraBookmarks:{...I.current.settings.cameraBookmarks??{},[a]:s}},"camera.bookmark.save"),f.emit("camera.bookmark.save",{slot:a,...s}),j(`Camera slot ${a} saved.`)},[Se,j]),Mn=g.useCallback(a=>{var l;const s=Do((l=I.current.settings.cameraBookmarks)==null?void 0:l[a]),i=s??{...qa};b(i),f.emit("camera.bookmark.goto",{slot:a,saved:!!s,...i}),j(s?`Camera slot ${a}.`:`Camera slot ${a} empty. Home view.`)},[b,j]),ms=g.useCallback(()=>{b({...qa}),f.emit("camera.bookmark.goto",{slot:"home",saved:!1,...qa}),j("Home view.")},[b,j]),Zr=g.useCallback(a=>{const s=te.current,i=ph,l={...s,x:a==="left"?s.x+i:a==="right"?s.x-i:s.x,y:a==="up"?s.y+i:a==="down"?s.y-i:s.y};b(l),f.emit("camera.keyboard.pan",{direction:a,...l})},[b]),Qr=g.useCallback(()=>{const a=kn.current;return a?(a.focus(),a.select(),f.emit("globalInput.focus",{source:"keyboard"}),!0):!1},[]),ps=g.useCallback((a="keyboard")=>{const s=!(I.current.settings.wheelMode??!1);Se({wheelMode:s},`${a}.wheelMode.toggle`),f.emit("canvas.wheelMode.toggle",{source:a,wheelMode:s}),j(s?"Mouse wheel mode.":"Trackpad pan mode.")},[Se,j]),gs=g.useCallback((a="keyboard")=>{const i=(I.current.settings.cursorDirection==="down"?"down":"right")==="down"?"right":"down";Se({cursorDirection:i},`${a}.cursorDirection.toggle`),f.emit("canvas.cursorDirection.toggle",{source:a,cursorDirection:i}),j(i==="down"?"Cursor direction down.":"Cursor direction right.")},[Se,j]),Co=g.useCallback(async(a,s="api")=>{const i=a===!0;try{if(i){if(document.fullscreenElement)return rt(!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 rt(l),f.emit("canvas.fullscreen.toggle",{source:s,active:l,fallback:!1}),l}return rt(!0),f.emit("canvas.fullscreen.toggle",{source:s,active:!0,fallback:!0}),!0}return document.fullscreenElement&&document.exitFullscreen&&await document.exitFullscreen(),rt(!1),f.emit("canvas.fullscreen.toggle",{source:s,active:!1,fallback:!1}),!1}catch(l){return rt(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}),j(i?"Read mode fallback.":"Read mode off."),i}},[rt,j]),Rn=g.useCallback((a="keyboard")=>Co(!Wa.current,a),[Co]);g.useEffect(()=>{const a=window,s={getMindCanvasFullscreenState:a.getMindCanvasFullscreenState,setMindCanvasFullscreen:a.setMindCanvasFullscreen,getMindCanvasReadModeState:a.getMindCanvasReadModeState,setMindCanvasReadMode:a.setMindCanvasReadMode,toggleMindCanvasReadMode:a.toggleMindCanvasReadMode},i=()=>Wa.current,l=h=>Co(h,"api"),m=()=>Rn("api");return a.getMindCanvasFullscreenState=i,a.setMindCanvasFullscreen=l,a.getMindCanvasReadModeState=i,a.setMindCanvasReadMode=l,a.toggleMindCanvasReadMode=m,Aa(!0),f.emit("canvas.readMode.api.bound"),()=>{Aa(!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")}},[Co,Rn]);const jc=g.useCallback(()=>{const a=I.current.settings.cameraBookmarks??{},s=Hs.find(i=>!a[i])??Hs[0];ua(s)},[ua]),Ic=g.useCallback(a=>{Xs(I.current.settings.gridType)!==a&&Se({gridType:a},`canvas.gridMode.${a}`)},[Se]),Nc=g.useCallback(()=>{Se({gridSnap:!(I.current.settings.gridSnap??!0)},"canvas.gridSnap.toggle")},[Se]),Ac=g.useCallback(a=>{const s=I.current.nodes.find(i=>i.id===a);!s||s.kind!=="directory"||(wt(a),f.emit("node.directorySettings.open",{id:a}))},[]),Mc=g.useCallback(()=>{wt(a=>(a&&f.emit("node.directorySettings.close",{id:a}),null))},[]),Rc=g.useCallback((a,s)=>{const i=I.current.nodes.find(h=>h.id===a);if(!i||i.kind!=="directory")return;const l=ln(s.DirectoryPath),m={...i.metadata??{},DirectoryPath:l,Include:s.Include??"",Exclude:s.Exclude??""};X(a,{sourceFilePath:l||Cr,metadata:m}),wt(null),f.emit("node.directorySettings.patch",{id:a,keys:["DirectoryPath","Include","Exclude"]}),j("Folder scan settings saved.")},[X,j]),Tc=g.useCallback(async a=>{const s=I.current.nodes.find(m=>m.id===a);if(!s||s.kind!=="directory")return;const i=Ah(s);if(f.emit("node.directory.scan.requested",{id:a,hasBridgePath:!!i,hasHandle:fn.current.has(a)}),i){if(!dt()){re("blocked"),f.emit("node.directory.scan.bridge.blocked",{id:a,reason:"hosted-access-off"}),j("Hosted LocalBridge access is off.");return}try{const m=await fa();if(qe(m.status??null),re(m.state),m.state!=="connected"){f.emit("node.directory.scan.bridge.unavailable",{id:a,message:m.message||"LocalBridge is unavailable."}),j(m.message||"LocalBridge is unavailable.");return}const h=Wn(m.status);if(!h){re("unavailable"),f.emit("node.directory.scan.bridge.failed",{id:a,reason:"missing-token"}),j("LocalBridge read token is unavailable.");return}const C=Bo(i,48);j(`Scanning ${C}...`),f.emit("node.directory.scan.bridge.requested",{id:a,path:i});const S=await Rh(i,s.metadata,h,m.baseUrl),M=new Date().toISOString();X(a,{title:s.title==="Directory"||s.title==="New Folder"?C:s.title,body:Sl(C,S),sourceFilePath:i,metadata:{...s.metadata??{},DirectoryPath:i,DirectoryName:C,DirectoryScanSource:"localbridge",DirectoryFileCount:String(S.fileCount),DirectoryDirCount:String(S.directoryCount),DirectoryLastScanUtc:M,DirectoryScanTruncated:String(S.truncated),DirectoryPreview:JSON.stringify(S.preview.slice(0,rn))}}),f.emit("node.directory.scan.bridge.completed",{id:a,path:i,fileCount:S.fileCount,directoryCount:S.directoryCount,truncated:S.truncated}),f.emit("node.directory.scan.completed",{id:a,source:"localbridge",directoryName:C,fileCount:S.fileCount,directoryCount:S.directoryCount,truncated:S.truncated}),j(`Scanned ${C}: ${S.fileCount} files, ${S.directoryCount} folders.`)}catch(m){const h=m instanceof Error?m.message:String(m);f.emit("node.directory.scan.bridge.failed",{id:a,message:h}),f.emit("node.directory.scan.failed",{id:a,source:"localbridge",message:h}),j("LocalBridge folder scan failed.")}return}const l=window;if(!l.showDirectoryPicker){f.emit("node.directory.scan.unsupported",{id:a}),j("Folder scan needs a Chromium browser with File System Access enabled.");return}try{let m=fn.current.get(a);m||(m=await l.showDirectoryPicker(),fn.current.set(a,m));const h={mode:"read"},C=m.queryPermission?await m.queryPermission(h):"granted";if((C==="granted"||!m.requestPermission?C:await m.requestPermission(h))!=="granted"){f.emit("node.directory.scan.denied",{id:a,directoryName:m.name}),j("Folder permission was not granted.");return}j(`Scanning ${m.name}...`);const M=await Ih(m,s.metadata),k=new Date().toISOString();X(a,{title:s.title==="Directory"||s.title==="New Folder"?m.name:s.title,body:Sl(m.name,M),sourceFilePath:m.name,metadata:{...s.metadata??{},DirectoryName:m.name,DirectoryScanSource:"browser-picker",DirectoryFileCount:String(M.fileCount),DirectoryDirCount:String(M.directoryCount),DirectoryLastScanUtc:k,DirectoryScanTruncated:String(M.truncated),DirectoryPreview:JSON.stringify(M.preview.slice(0,rn))}}),f.emit("node.directory.scan.completed",{id:a,source:"browser-picker",directoryName:m.name,fileCount:M.fileCount,directoryCount:M.directoryCount,truncated:M.truncated}),j(`Scanned ${m.name}: ${M.fileCount} files, ${M.directoryCount} folders.`)}catch(m){if((m&&typeof m=="object"&&"name"in m?String(m.name):"")==="AbortError"){f.emit("node.directory.scan.cancelled",{id:a}),j("Folder scan cancelled.");return}f.emit("node.directory.scan.failed",{id:a,message:m instanceof Error?m.message:String(m)}),j("Folder scan failed in this browser context.")}},[X,j]),ei=g.useCallback(a=>{Jt(a.id),Na(Xe(a.name))},[]),hs=g.useCallback(()=>{Jt(null),Na("")},[]),fs=g.useCallback(a=>{const s=Xe(pn).slice(0,90);a===I.current.id?(ds(s),j("Board renamed.")):Au(a,s)?(Ne(lt()),j("Saved board renamed.")):(f.emit("board.rename.failed",{boardId:a,scope:"stored"}),j("Board rename failed.")),Jt(null),Na("")},[ds,j,pn]),Lc=g.useCallback((a,s)=>{s.key==="Enter"?(s.preventDefault(),fs(a)):s.key==="Escape"&&(s.preventDefault(),hs())},[hs,fs]),Ec=g.useCallback(a=>{const s=I.current.nodes.find(l=>l.id===a);if(!Kn(s))return;const i=s.aiEnabled===!1;X(a,{aiEnabled:i}),f.emit("node.aiReference.toggled",{id:a,enabled:i}),j(i?"AI reference enabled.":"AI reference disabled.")},[X,j]),So=g.useCallback(async(a,s,i,l,m)=>{za.current=a;try{const h=await Jn(a);return Ut.current=0,f.emit(s,{...i,ok:!0,method:h}),j(l),h}catch(h){return Ut.current=Date.now()+15e3,f.emit(s,{...i,ok:!0,method:"react-local",clipboardUnavailable:!0,message:h instanceof Error?h.message:String(h)}),j(m),"react-local"}},[j]),Pc=g.useCallback(async a=>{const s=I.current.nodes.find(l=>l.id===a);if(!s)return;const i=Fh(s);if(i)try{const l=await Uh(i);f.emit("node.copyImage",{id:a,ok:!0,mode:l,urlKind:i.split(":",1)[0]||"relative"}),j(l==="image"?"Image copied to clipboard.":"Image reference copied.");return}catch(l){za.current=i,Ut.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)}),j("Image reference copied inside this canvas.");return}await So($h(s),"node.copy",{id:a},"Node content copied.","Node content copied inside this canvas.")},[So,j]),_c=g.useCallback(async(a,s)=>{await So(s,"node.embed.copyUrl",{id:a,sourceKind:s.split(":",1)[0]||"relative"},"Embed URL copied.","Embed URL copied inside this canvas.")},[So]),Dc=g.useCallback(a=>{const s=I.current.nodes.find(l=>l.id===a);if(!Kn(s))return;const i=Ks(s);X(a,{height:i}),f.emit("node.fitHeight",{id:a,height:i}),j("Node height fitted to text.")},[X,j]),Bc=g.useCallback(a=>{const s=I.current.nodes.find(C=>C.id===a);if(!Kn(s))return;const i=Dh(s),l=i?Math.max(120,Math.round(s.originalHeight||Ks(s))):Math.max(120,Math.min(s.height,bh)),m=i?0:Math.round(s.height),h=i;D(C=>({...C,nodes:C.nodes.map(S=>S.id===a?{...S,height:l,isExpanded:h,originalHeight:m}:S)}),"node.expandCollapse",{id:a,expanded:h,height:l,originalHeight:m}),j(h?"Node expanded.":"Node collapsed.")},[D,j]),Oc=g.useCallback(a=>{const s=I.current.nodes.find(l=>l.id===a);if(!s||s.kind!=="code")return;const i=s.wordWrap===!1;X(a,{wordWrap:i}),f.emit("node.wordWrap.toggled",{id:a,enabled:i}),j(i?"Word wrap enabled.":"Word wrap disabled.")},[X,j]),$c=g.useCallback((a,s)=>{const i=I.current.nodes.find(h=>h.id===a);if(!Kn(i))return;const l=Eh(s.executionMode),m=Array.from(new Set([...i.tags??[],"Company root",l,s.enableSubAgents?"sub-agents":"single-agent","adapter-gated"]));X(a,{companyMode:"candidate",role:"Company root",tags:m,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}),j(`Company root staged locally as ${l}. Open CompanyCore to run it with an adapter later.`)},[X,j]),Fc=g.useCallback(a=>{var i;const s=I.current.nodes.find(l=>l.id===a);if(!(s!=null&&s.companyMode)){j("Stage this node as a Company root first.");return}Ze(a),f.emit("companyGraph.open",{id:a,status:((i=s.metadata)==null?void 0:i.CompanyStatus)??"Staged"})},[j]),Uc=g.useCallback(a=>{const s=I.current.nodes.find(i=>i.id===a);s!=null&&s.companyMode&&(X(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}),j("Company goal synced from this note locally."))},[X,j]),zc=g.useCallback(a=>{var l;const s=I.current.nodes.find(m=>m.id===a);if(!(s!=null&&s.companyMode))return;const i=((l=s.metadata)==null?void 0:l.CompanyStatus)||"Staged";X(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}),j(`Company status refreshed locally: ${i}.`)},[X,j]),Wc=g.useCallback(()=>{Ze(a=>(a&&f.emit("companyGraph.close",{id:a}),null))},[]),ti=g.useCallback((a,s)=>{const i=I.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(X(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}),j(`Company marked ${s.toLowerCase()} locally.`))},[X,j]),ai=g.useCallback(a=>{var l;const s=I.current.nodes.find(m=>m.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)??""]);X(a,{companyMode:void 0,role:void 0,tags:(s.tags??[]).filter(m=>!i.has(m)),metadata:{...s.metadata??{},CompanyStatus:"Removed",CompanyLastMessage:"Company staging removed locally.",CompanyRemovedAt:new Date().toISOString()}}),Ze(null),f.emit("companyGraph.remove",{id:a}),j("Company staging removed from this node.")},[X,j]),Hc=g.useCallback((a,s)=>{const i=I.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(X(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}),j(`Company approval ${s.toLowerCase()} locally.`))},[X,j]),Vc=g.useCallback((a,s)=>{const i=s.trim();if(!i)return;const l=V("node"),m=V("edge");D(h=>{var M,k;const C=h.nodes.find(R=>R.id===a);if(!C)return h;const S={id:l,kind:"ai-task",title:"Company follow-up task",body:i,x:C.x+C.width+120,y:C.y+52,width:350,height:190,status:"idle",tags:["Company follow-up",((M=C.metadata)==null?void 0:M.CompanyExecutionModeLabel)??"Company"],metadata:{CompanyRootNodeId:C.id,CompanyExecutionMode:((k=C.metadata)==null?void 0:k.CompanyExecutionMode)??"Auto",CompanyTaskStatus:"Staged",CompanyStagedAt:new Date().toISOString()}};return{...h,nodes:[...h.nodes,S],edges:[...h.edges,{id:m,from:C.id,to:l,kind:"context"}]}},"companyGraph.followUp.staged",{rootId:a,taskId:l,chars:i.length}),c([l]),F(l),window.setTimeout(()=>F(h=>h===l?null:h),1400),j("Company follow-up task staged locally.")},[D,j]),Yc=g.useCallback((a,s)=>{const i=V("node"),l=V("edge");D(m=>{const h=m.nodes.find(S=>S.id===a);if(!h)return m;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{...m,nodes:[...m.nodes,C],edges:[...m.edges,{id:l,from:h.id,to:i,kind:"result"}]}},"companyGraph.artifact.added",{rootId:a,artifactNodeId:i,artifactType:s.type}),c([i]),F(i),window.setTimeout(()=>F(m=>m===i?null:m),1400),j("Company artifact added to the canvas.")},[D,j]),Gc=g.useCallback((a,s="preview")=>{const i=Bh(a);if(!i){j("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"){gt({url:i,fileName:Oh(a)}),f.emit("node.pdf.preview.open",{id:a.id,urlKind:i.startsWith("http")?"url":"path"});return}if(a.kind==="embed"&&!lo(i)){j("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})},[j]),Kc=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}),c(i=>{const l=i.filter(m=>m!==a);return f.emit("selection.repaired",{reason:"delete-node",beforeCount:s.length,afterCount:l.length,removedCount:i.length-l.length}),l}),$(i=>i===a?null:i)},[D]),bs=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(m=>!i.has(m.id)),edges:l.edges.filter(m=>!i.has(m.from)&&!i.has(m.to))}),"node.delete",{ids:s,count:s.length,source:a}),c([]),f.emit("selection.repaired",{reason:"delete-selected",source:a,beforeCount:s.length,afterCount:0,removedCount:s.length}),$(l=>l&&i.has(l)?null:l),Ze(l=>l&&i.has(l)?null:l),wt(l=>l&&i.has(l)?null:l),j(`Deleted ${s.length} selected node${s.length===1?"":"s"}.`)},[D,j]),ko=g.useCallback((a,s)=>{var _;const i=Array.from(new Set(a));if(i.length===0)return;const l=I.current,m=new Set(i),h=l.nodes.filter(N=>m.has(N.id));if(h.length===0)return;const C=h.filter(ba),S=h.filter(N=>!ba(N));if(C.length>0&&f.emit("remoteMonitor.node.duplicateIgnored",{action:"duplicate",source:s,skippedCount:C.length,nodeId:(_=C[0])==null?void 0:_.id}),S.length===0){const N=C[0]??l.nodes.find(ba);N&&(c([N.id]),F(N.id),window.setTimeout(()=>F(w=>w===N.id?null:w),1e3)),j("Remote monitor is single-instance per board. Focused existing monitor.");return}const M=new Map(S.map(N=>[N.id,V("node")])),k=S.map(N=>({...N,id:M.get(N.id),x:N.x+50,y:N.y-50,status:N.status==="running"?"idle":N.status,metadata:N.metadata?{...N.metadata}:void 0,tags:N.tags?[...N.tags]:void 0,imageStack:wr(N.imageStack,N.id,M.get(N.id))})),R=l.edges.filter(N=>M.has(N.from)&&M.has(N.to)).map(N=>({...N,id:V("edge"),from:M.get(N.from),to:M.get(N.to)}));D(N=>({...N,nodes:[...N.nodes,...k],edges:[...N.edges,...R]}),"node.duplicate",{source:s,count:k.length,edgeCount:R.length,sourceIds:i,duplicateIds:k.map(N=>N.id),skippedRemoteMonitorCount:C.length});const E=k.map(N=>N.id);c(E),F(E[0]??null),window.setTimeout(()=>F(N=>N===E[0]?null:N),1e3),j(C.length>0?`Duplicated ${k.length} node${k.length===1?"":"s"}; remote monitor stays single-instance.`:`Duplicated ${k.length} node${k.length===1?"":"s"}.`)},[D,j]),ys=g.useCallback(a=>{ko(G.current,a)},[ko]),Tn=g.useCallback((a,s)=>{const i=Array.from(new Set(G.current));if(i.length===0)return;const l=new Set(i),m=I.current.nodes,h=m.filter(k=>l.has(k.id));if(h.length===0)return;const C=m.filter(k=>!l.has(k.id)),S=a==="front"?[...C,...h]:[...h,...C];if(!S.some((k,R)=>{var E;return k.id!==((E=m[R])==null?void 0:E.id)})){j(a==="front"?"Selected nodes are already in front.":"Selected nodes are already in back."),f.emit("node.layerOrder.noop",{direction:a,source:s,count:h.length,ids:i});return}D(k=>({...k,nodes:S}),"node.layerOrder",{direction:a,source:s,count:h.length,ids:i}),j(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,j]),xs=g.useCallback(async()=>{const a=new Set(G.current),s=I.current.nodes.filter(m=>a.has(m.id));if(s.length===0)return;const i=I.current.edges.filter(m=>a.has(m.from)&&a.has(m.to)),l=qh(s,i);ia.current=l;try{const m=await Jn(JSON.stringify(l));la.current=0,f.emit("multiSelection.copy",{count:s.length,edgeCount:i.length,ok:!0,method:m}),j(`Copied ${s.length} selected node${s.length===1?"":"s"} for canvas paste.`)}catch(m){la.current=Date.now()+15e3,f.emit("multiSelection.copy",{count:s.length,edgeCount:i.length,ok:!0,method:"react-local",clipboardUnavailable:!0,message:m instanceof Error?m.message:String(m)}),j(`Copied ${s.length} selected node${s.length===1?"":"s"} inside this canvas.`)}},[j]),ma=g.useCallback((a,s,i)=>{const l=I.current.nodes.find(ba),m=[],h=[];let C=!!l;for(const w of a.nodes){if(ba(w)){if(C){m.push(w);continue}C=!0}h.push(w)}if(m.length>0&&f.emit("remoteMonitor.node.duplicateIgnored",{action:i,skippedCount:m.length,nodeId:l==null?void 0:l.id}),h.length===0){l&&(c([l.id]),F(l.id),window.setTimeout(()=>F(w=>w===l.id?null:w),1e3)),j("Remote monitor is single-instance per board. Focused existing monitor.");return}const S=Ho(h);if(!S)return;const M=new Map(h.map(w=>[w.id,V("node")])),k=s.x-S.minX,R=s.y-S.minY,E=h.map(w=>({...w,id:M.get(w.id),x:w.x+k,y:w.y+R,status:w.status==="running"?"idle":w.status,tags:w.tags?[...w.tags]:void 0,metadata:w.metadata?{...w.metadata}:void 0,imageStack:wr(w.imageStack,w.id,M.get(w.id))})),_=a.edges.filter(w=>M.has(w.from)&&M.has(w.to)).map(w=>({...w,id:V("edge"),from:M.get(w.from),to:M.get(w.to)})),N=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:m.length}),c(N),$(null),F(N[0]??null),window.setTimeout(()=>F(w=>w===N[0]?null:w),1200),j(m.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,j]),Ln=g.useCallback((a,s,i)=>{const l=a.trim();if(!l)return;const m=Al(l,s,`${i}-url`),h=m??Ml(l,s,i);D(C=>({...C,nodes:[...C.nodes,h]}),m?"clipboard.url.paste":"clipboard.text.paste",{source:i,id:h.id,kind:h.kind,chars:l.length}),c([h.id]),$(null),F(h.id),window.setTimeout(()=>F(C=>C===h.id?null:C),1200),j(`${i==="drop"?"Dropped":"Pasted"} ${h.kind==="file"?"URL reference":h.kind} node.`)},[D,j]),wo=g.useCallback(async(a,s,i)=>{const l=a.filter(h=>h.name||h.size>0);if(l.length===0)return;const m=I.current.id;try{const h=[];let C=s.x;for(const M of l){const k=await hf(M,{x:C,y:s.y},i);h.push(k),C+=k.width+Po}if(I.current.id!==m){f.emit("async.staleIgnored",{path:"canvas.fileIngest",source:i,boardId:m,currentBoardId:I.current.id,count:l.length});return}const S=h.map(M=>M.id);D(M=>({...M,nodes:[...M.nodes,...h]}),"canvas.files.ingested",{source:i,count:h.length,kinds:h.map(M=>M.kind)}),c(S),$(null),F(S[0]??null),window.setTimeout(()=>F(M=>M===S[0]?null:M),1200),j(`${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)}),j("File ingest failed in this browser context.")}},[D,j]);g.useEffect(()=>{const a=s=>{if(s.defaultPrevented||Ul(s.target))return;const i=s.clipboardData;if(!i)return;const l=Ha(),m=_l(i.files,i.items);if(m.length>0){s.preventDefault(),wo(m,l,"paste");return}const h=la.current>Date.now()?ia.current:null;if(h){s.preventDefault(),ma(h,l,"paste"),f.emit("clipboard.nodes.pasteLocalFallback",{count:h.nodes.length});return}const C=Ut.current>Date.now()?za.current:null;if(C){s.preventDefault(),Ln(C,l,"paste"),f.emit("clipboard.text.pasteLocalFallback",{chars:C.length}),Ut.current=0;return}const S=i.getData("text/plain"),M=Nl(S);if(M){s.preventDefault(),ma(M,l,"paste");return}const k=S.trim()?S:Rl(i.getData("text/html"));k.trim()&&(s.preventDefault(),Ln(k,l,"paste"))};return document.addEventListener("paste",a),()=>document.removeEventListener("paste",a)},[Ha,wo,Ln,ma]);const Xc=g.useCallback(a=>{Zs(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")},[]),qc=g.useCallback(a=>{if(Zs(a.target))return;const s=_l(a.dataTransfer.files,a.dataTransfer.items),i=a.dataTransfer.getData("text/uri-list"),l=a.dataTransfer.getData("text/plain"),m=Rl(a.dataTransfer.getData("text/html")),h=Ha(a.clientX,a.clientY);if(s.length>0){a.preventDefault(),wo(s,h,"drop");return}const C=(i||l||m).trim(),S=Nl(l);if(S){a.preventDefault(),ma(S,h,"drop");return}C&&(a.preventDefault(),Ln(C,h,"drop"))},[Ha,wo,Ln,ma]),Jc=g.useCallback(()=>{const a=new Set(G.current),s=new Set(I.current.nodes.filter(i=>a.has(i.id)&&Kn(i)).map(i=>i.id));if(s.size===0){j("No text nodes in this selection.");return}D(i=>({...i,nodes:i.nodes.map(l=>s.has(l.id)?{...l,height:Ks(l)}:l)}),"multiSelection.fitHeight",{count:s.size}),f.emit("multiSelection.fitHeight",{count:s.size}),j(`Fitted ${s.size} text node${s.size===1?"":"s"}.`)},[D,j]),Cs=g.useCallback(a=>{const s=new Set(G.current),i=I.current.nodes.filter(_=>s.has(_.id)).sort((_,N)=>G.current.indexOf(_.id)-G.current.indexOf(N.id));if(i.length<2)return;const l=Ho(i);if(!l)return;const m=a==="tidy"?xf(i):i,h=28,C=Math.max(...m.map(_=>_.width)),S=Math.max(...m.map(_=>_.height)),M=m.map((_,N)=>({id:_.id,x:_.x,y:_.y,width:_.width,height:_.height,selectionIndex:N})),k=I.current.settings.gridSnap??!0;let R;a==="grid"?R={mode:"grid",order:"selectionOrder",columns:Math.max(2,Math.ceil(Math.sqrt(m.length))),cellWidth:C,cellHeight:S,gapX:h,gapY:h,sizeMode:"preserve",snapToGrid:k,gridSize:to}:a==="strip"?R={mode:"stripHorizontal",order:"selectionOrder",targetHeight:S,gapX:h,sizeMode:"preserve",snapToGrid:k,gridSize:to}:R={mode:"masonry",order:"spatialReading",anchor:"selectionBoundsTopLeft",maxColumns:12,gapX:24,gapY:24,quantile:.75,sizeMode:"preserve",snapToGrid:k,gridSize:to};const E=vp(M,R,l);D(_=>({..._,nodes:_.nodes.map(N=>{const w=E.after.get(N.id);return w?{...N,x:w.x,y:w.y,width:w.width,height:w.height}:N})}),"multiSelection.arrange",{mode:a,count:i.length,layoutMode:R.mode,snapToGrid:k}),f.emit("multiSelection.arrange",{mode:a,count:i.length,layoutMode:R.mode,snapToGrid:k,boundsAfter:E.boundsAfter}),j(a==="tidy"?`Tidied ${i.length} selected nodes.`:`Arranged ${i.length} selected nodes as ${a}.`)},[D,j]),Zc=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"&&Qn(w).length>0));if(l.length<2){j("Select at least two image nodes to stack."),f.emit("multiSelection.mergeImageStacks.skipped",{reason:"not-enough-image-nodes",selectedCount:a.length});return}const m=l[0],h=l.slice(1),C=new Date().toISOString(),S=new Set,M=Qn(m),k=[];for(const w of M)k.push(vl(w,m,S,C));for(const w of h)for(const W of Qn(w))k.push(vl(W,w,S,C));if(k.length<2){j("No stackable image variants found."),f.emit("multiSelection.mergeImageStacks.skipped",{reason:"not-enough-variants",selectedCount:a.length});return}const R=k.some(w=>{var W;return w.variantId===((W=m.imageStack)==null?void 0:W.activeVariantId)})?m.imageStack.activeVariantId:k[0].variantId,E=k.find(w=>w.variantId===R)??k[0],_=h.map(w=>w.id),N=new Set(_);D(w=>({...w,nodes:w.nodes.filter(W=>!N.has(W.id)).map(W=>{var ae;return W.id===m.id?{...W,kind:"image",imageUrl:E.imageUrl,imageStack:{activeVariantId:R,variants:k,kind:"pile",title:((ae=W.imageStack)==null?void 0:ae.title)||W.title,updatedAtUtc:C},metadata:{...W.metadata??{},ImageStackKind:"pile",ImageStackPrimaryNodeId:m.id,ImageStackVariantCount:String(k.length),ImageStackMergedAtUtc:C,ImageStackRemovedNodeIds:_.join(","),ImageStackActiveVariantId:R},tags:Array.from(new Set([...W.tags??["image"],"Stack"])).slice(0,4)}:W}),edges:w.edges.filter(W=>!N.has(W.from)&&!N.has(W.to))}),"multiSelection.mergeImageStacks",{primaryNodeId:m.id,removedNodeIds:_,addedVariants:k.length-M.length,variantCount:k.length}),c([m.id]),$(w=>w&&N.has(w)?null:w),Ze(w=>w&&N.has(w)?null:w),wt(w=>w&&N.has(w)?null:w),F(m.id),window.setTimeout(()=>F(w=>w===m.id?null:w),1200),j(`Stacked ${l.length} image nodes into ${k.length} variants.`)},[D,j]),Qc=g.useCallback(a=>{const s=G.current.includes(a)?G.current:[a];ko(s,"node-action")},[ko]),pa=g.useCallback(async(a,s)=>{const i=vn.current.isBusy(a);return i&&f.emit("automation.run.queued",{id:a,key:a}),vn.current.enqueue(a,async()=>{var R,E,_;const l=I.current.nodes.find(N=>N.id===a);if(!l||l.kind!=="ai-task")return;f.emit("automation.run.dequeued",{id:a,key:a,queuedBehindRunning:i});const m=($a.current.get(a)??0)+1;$a.current.set(a,m);const h=sa.current,C=(s==null?void 0:s.trim())||l.body,S=zr(Ur(l));X(a,{status:"running",body:C,...en(l)?{metadata:Xn(l,{instruction:C,runState:"running",status:"running",statusLabel:"Running",sourceMode:S?"media-prompt-only":"ai-task"})}:{}}),f.emit("automation.run",{id:a,mode:"single",seq:m,automationKind:S==null?void 0:S.kind});const M=()=>$a.current.get(a)===m&&sa.current===h,k=N=>{if(!M()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:m});return}f.emit("localBridge.codex.fallback",{id:a,reason:N});const w=Rf(C,l);X(a,{status:"done",result:w,...en(l)?{metadata:Xn(l,{instruction:C,output:w,runState:"completed",status:S?"prepared":"done",statusLabel:S?"Spec only":"Done",sourceMode:S?"media-prompt-only":"local-draft",error:S?`External ${S.mode.toLowerCase()} generation was not executed.`:"",fallback:!0,partial:!!S,toolsUsed:S?`${S.toolHint}, Deterministic.Fallback, HumanReview.Gate`:"Deterministic.Fallback",toolWarnings:S?`External ${S.mode.toLowerCase()} generator was not invoked; this run prepared a spec only.`:""})}:{}}),$(a)};if(!dt()){k("hosted-access-gated");return}try{const N=await fa();if(!M()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:m});return}if(re(N.state),qe(N.status??null),N.state!=="connected"){ie(N.message||"LocalBridge is unavailable."),k(N.message||"LocalBridge unavailable");return}const w=Wn(N.status);if(!w){k("LocalBridge token unavailable");return}const W=$l(I.current,l,C);f.emit("localBridge.codex.run",{id:a,boardId:I.current.id});const ae=await Ku({instruction:W,workingDirectory:((E=(R=N.status)==null?void 0:R.project)==null?void 0:E.rootPath)||((_=N.status)==null?void 0:_.workspace)||void 0,sandbox:"read_only",reasoningEffort:If(I.current.settings.effort),approvalPolicy:"on-request",intent:"mindcanvas-ai-task",nodeKind:l.kind,webSearchMode:"disabled",networkAccessEnabled:!1},w,N.baseUrl);if(!M()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:m});return}if(!ae.success||!ae.finalResponse){const oe=ae.error||"LocalBridge Codex returned no response.";f.emit("localBridge.codex.failed",{id:a,message:oe,status:ae.status}),X(a,{status:"blocked",result:oe,...en(l)?{metadata:Xn(l,{instruction:C,output:oe,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:S?"media-prompt-only":"ai-task",error:oe,fallback:!1,partial:!0})}:{}}),$(a);return}X(a,{status:"done",result:ae.finalResponse,...en(l)?{metadata:Xn(l,{instruction:C,output:ae.finalResponse,runState:"completed",status:S?"prepared":"done",statusLabel:S?"Spec only":"Done",sourceMode:S?"media-prompt-only":"ai-generated",error:S?`External ${S.mode.toLowerCase()} generation was not executed.`:"",fallback:!1,partial:!!S,toolsUsed:S?`AI.LLM, ${S.toolHint}, HumanReview.Gate`:"AI.LLM",toolWarnings:S?`External ${S.mode.toLowerCase()} generator was not invoked; this run prepared a spec only.`:""})}:{}}),f.emit("localBridge.codex.completed",{id:a,providerKind:ae.providerKind,threadId:ae.threadId,turnId:ae.turnId}),$(a)}catch(N){if(!M()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:m});return}const w=N instanceof Error?N.message:String(N);f.emit("localBridge.codex.failed",{id:a,message:w}),X(a,{status:"blocked",result:w,...en(l)?{metadata:Xn(l,{instruction:C,output:w,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:S?"media-prompt-only":"ai-task",error:w,fallback:!1,partial:!0})}:{}}),$(a)}})},[X]),eu=g.useCallback(async()=>{const a=G.current[0];if(!a){j("Select an AI Task to run its graph.");return}const s=jr(I.current,a);if(s.length===0){j("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){j("The selected AI Task graph is already running.");return}j(`Running selected graph: ${i.length} AI task${i.length===1?"":"s"}.`);for(const l of i)await pa(l.id)},[pa,j]),tu=g.useCallback(async a=>{if(a.result)try{const s=await Jn(a.result);f.emit("aiTask.result.copy",{id:a.id,chars:a.result.length,ok:!0,method:s}),j("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)}),j("AI result copy unavailable in this browser context.")}},[j]),au=g.useCallback(a=>{if(!a.result)return;const s=Tf(a,{x:a.x+a.width+78,y:a.y}),i={id:V("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>xr}),c([s.id]),$(null),F(s.id),window.setTimeout(()=>F(l=>l===s.id?null:l),1200),j("AI result archived as a Markdown node.")},[D,j]),nu=g.useCallback(a=>{if(!a.result)return;const s=Lf(a,{x:a.x+a.width+78,y:a.y+Math.min(a.height+44,360)}),i={id:V("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}),c([s.id]),$(null),F(s.id),window.setTimeout(()=>F(l=>l===s.id?null:l),1200),j("Follow-up AI Task staged from the result.")},[D,j]),ni=g.useCallback(()=>{var Dn,Ke,Bn;const a=x.trim(),s=I.current.settings.inputMode,i=[...G.current],l=I.current.nodes.find(Ie=>Ie.id===i[0]),m=(l==null?void 0:l.kind)==="ai-task"?(a||l.body).trim():a;if(!m)return;const h=m.replace(/\s+/g," ").trim().toLowerCase(),C=window.location.pathname||"/mindcanvas",S=`${C}|${s}|${h}`,M=Date.now(),k=jn.current;if((k==null?void 0:k.signature)===S&&M-k.at<=hl){f.emit("globalInput.duplicateIgnored",{routePath:C,inputMode:s,chars:m.length,windowMs:hl});return}jn.current={signature:S,at:M};const R={routePath:C,inputMode:s,selectedNodeIds:i,chars:m.length};f.emit("globalInput.submit.snapshot",{...R,source:(l==null?void 0:l.kind)==="ai-task"?"selected-ai-task":"input",hasTypedPrompt:a.length>0}),(l==null?void 0:l.kind)==="ai-task"&&v(""),Y(Ie=>Ie+1),f.emit("globalInput.submit.started",R);const E=Ie=>{Y(On=>Math.max(0,On-1)),f.emit("globalInput.submit.completed",{...R,status:Ie})};if((l==null?void 0:l.kind)==="ai-task"){pa(l.id,a).then(()=>E("ai-task")).catch(Ie=>{f.emit("globalInput.submit.completed",{...R,status:"ai-task-error",message:Ie instanceof Error?Ie.message:String(Ie)}),Y(On=>Math.max(0,On-1))});return}const _=je(window.innerWidth/2,window.innerHeight/2),N={x:_.x,y:_.y},w=Al(m,N,"global-input-url"),W=!w&&(s==="Image"||s==="Video")?s:null,ae=w??(W?cf(m,N,I.current.settings,W):Ml(m,N,"global-input")),oe={...ae,x:_.x-ae.width/2,y:_.y-ae.height/2};D(Ie=>({...Ie,nodes:[...Ie.nodes,oe]}),w?"globalInput.url.add":W?"globalInput.media.add":"globalInput.text.add",{id:oe.id,kind:oe.kind,chars:m.length,inputMode:s,...W?{mediaMode:W,mediaModel:(Dn=oe.metadata)==null?void 0:Dn.MediaModel,aspectPresetId:(Ke=oe.metadata)==null?void 0:Ke.AspectPresetId,requestedSize:(Bn=oe.metadata)==null?void 0:Bn.RequestedSize}:{}}),v(""),c([oe.id]),$(null),F(oe.id),window.setTimeout(()=>F(Ie=>Ie===oe.id?null:Ie),1200),j(`Added ${oe.kind==="file"?"URL reference":oe.kind} node from input.`),E(w?"url-node":W?"media-node":"text-node")},[D,x,pa,je,j]),ou=g.useCallback(async()=>{const a=Pf(I.current),s=a.flat(),i=a.map(m=>m.filter(h=>h.status!=="running")).filter(m=>m.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(m=>m.id)}),l.length===0){j(s.length>0?"All AI task graphs are already running.":"No AI tasks on this board.");return}j(`Running ${i.length} graph${i.length===1?"":"s"} / ${l.length} AI task${l.length===1?"":"s"}.`);for(const m of i)for(const h of m)await pa(h.id)},[pa,j]),su=g.useCallback(()=>{const a=I.current.nodes.filter(s=>s.kind==="ai-task"&&s.status==="running");if(a.length===0){j("No running AI tasks to pause."),f.emit("automation.pause",{count:0});return}sa.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}),j(`Paused ${a.length} running task${a.length===1?"":"s"}.`)},[D,j]),ru=g.useCallback(()=>{const a=I.current.nodes.filter(s=>s.kind==="ai-task"&&(s.status==="running"||s.status==="paused"));if(a.length===0){j("No active AI tasks to stop."),f.emit("automation.stop",{count:0});return}sa.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}),$(null),j(`Stopped ${a.length} active task${a.length===1?"":"s"}.`)},[D,j]),iu=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:V("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"]},m={...l,id:V("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:V("edge"),from:a.id,to:l.id,kind:"context"},{id:V("edge"),from:l.id,to:m.id,kind:"result"}];D(C=>({...C,nodes:[...C.nodes,l,m],edges:[...C.edges,...h]}),"node.add",{reason:"generate-flow",count:2}),c([l.id,m.id])},[D]),lu=g.useCallback((a,s)=>{if(ue&&ue.from!==a){const i={id:V("edge"),from:ue.from,to:a,kind:ue.kind==="context"?"context":s};D(l=>({...l,edges:[...l.edges,i]}),"edge.add",{...i}),De(null);return}De({from:a,kind:s})},[D,ue]),Ss=g.useCallback(()=>{d(a=>{const s=a.at(-1);if(!s)return a;const i=s.board,l=G.current,m=Fl(l,i);return u(h=>Kp(h,I.current,{description:s.description})),o(i),c(m),f.emit("history.undo",{boardId:i.id,selectedBefore:l.length,selectedAfter:m.length,selectionRepaired:m.length!==l.length||m.some((h,C)=>h!==l[C])}),f.emit("selection.repaired",{reason:"undo",beforeCount:l.length,afterCount:m.length}),a.slice(0,-1)})},[]),ks=g.useCallback(()=>{u(a=>{const s=a[0];if(!s)return a;const i=s.board,l=G.current,m=Fl(l,i);return d(h=>Xa(h,I.current,{description:s.description})),o(i),c(m),f.emit("history.redo",{boardId:i.id,selectedBefore:l.length,selectedAfter:m.length,selectionRepaired:m.length!==l.length||m.some((h,C)=>h!==l[C])}),f.emit("selection.repaired",{reason:"redo",beforeCount:l.length,afterCount:m.length}),a.slice(1)})},[]);g.useEffect(()=>{const a=s=>{var M,k;if(s.defaultPrevented||Ul(s.target))return;const i=s.key.toLowerCase(),l=s.ctrlKey||s.metaKey,m=!l&&!s.altKey&&!s.shiftKey,h=Bf(s.target);if(s.key==="Tab"&&m&&!s.repeat&&!h){s.preventDefault(),ps("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-wheel-mode",wheelMode:!(I.current.settings.wheelMode??!1)});return}if(s.key==="Enter"&&m&&!s.repeat&&!h&&Qr()){s.preventDefault(),f.emit("keyboard.shortcut",{action:"focus-global-input"});return}if(i==="f"&&m&&!s.repeat&&!h){s.preventDefault(),Rn("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-fullscreen"});return}if(i==="d"&&m&&!s.repeat){s.preventDefault(),gs("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-cursor-direction"});return}if(i==="h"&&m&&!s.repeat){s.preventDefault(),ms(),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&&m){s.preventDefault(),Zr(C),f.emit("keyboard.shortcut",{action:"camera-pan",direction:C});return}if(i===Gt&&!s.altKey&&!s.shiftKey){s.preventDefault(),l?(ua(Gt),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:Gt})):(Mn(Gt),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:Gt}));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(),Mn(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:s.key});return}}if(l&&i==="z"&&!s.shiftKey){s.preventDefault(),Ss(),f.emit("keyboard.shortcut",{action:"undo"});return}if(l&&i==="y"||l&&s.shiftKey&&i==="z"){s.preventDefault(),ks(),f.emit("keyboard.shortcut",{action:"redo"});return}if(l&&i==="f"&&!s.altKey){s.preventDefault(),(M=Oa.current)==null||M.focus(),(k=Oa.current)==null||k.select(),f.emit("keyboard.shortcut",{action:"focus-search"});return}if(l&&i==="c"&&G.current.length>0){s.preventDefault(),xs(),f.emit("keyboard.shortcut",{action:"copy",count:G.current.length});return}if(l&&i==="v"&&ia.current&&la.current>Date.now()){const R=ia.current;s.preventDefault(),ma(R,Ha(),"paste"),f.emit("keyboard.shortcut",{action:"paste-local",count:R.nodes.length});return}if(l&&i==="d"){s.preventDefault(),ys("keyboard"),f.emit("keyboard.shortcut",{action:"duplicate",count:G.current.length});return}if(l&&s.key==="]"){s.preventDefault(),Tn("front","keyboard"),f.emit("keyboard.shortcut",{action:"bring-front",count:G.current.length});return}if(l&&s.key==="["){s.preventDefault(),Tn("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(),bs("keyboard"),f.emit("keyboard.shortcut",{action:"delete",count:G.current.length});return}if(s.key!=="Escape")return;let S=!1;gn&&(hn(!1),S=!0),ta&&(at(!1),S=!0),bn&&(vt(!1),S=!0),Oe&&(ve("keyboard"),S=!0),Be&&(gt(null),S=!0),Z&&(Ze(null),S=!0),nt&&(wt(null),S=!0),ue&&(De(null),S=!0),K&&($(null),S=!0),T.trim()&&(A(""),z([]),ee(0),S=!0),G.current.length>0&&(c([]),S=!0),S&&(s.preventDefault(),f.emit("keyboard.shortcut",{action:"escape"}))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[Z,ve,ue,xs,bs,nt,ys,Qr,Ha,Mn,ms,Oe,Zr,ma,Be,gn,T,ks,Tn,K,ua,ta,bn,gs,Rn,ps,Ss]);const du=g.useCallback(()=>{Mu(),D(()=>({...Ei,updatedAt:new Date().toISOString()}),"board.restore",{source:"fixture-reset"}),c(["node-agent-command"]),Ne([]),ve("fixture-reset")},[ve,D]),ws=g.useCallback((a,s="result-click")=>{const i=wl(a),l={...te.current,x:window.innerWidth/2-i.x*te.current.scale,y:window.innerHeight/2-i.y*te.current.scale};b(l),c([a.id]),F(a.id),f.emit("search.focused",{query:T.trim(),nodeId:a.id,source:s}),window.setTimeout(()=>F(null),900)},[b,T]);g.useEffect(()=>{const a=++Fa.current,s=_f(te.current,xe);f.emit("search.started",{query:T,engine:Ft.current?"worker":"local",viewportCenterX:Number(s.centerX.toFixed(2)),viewportCenterY:Number(s.centerY.toFixed(2))});const i=window.setTimeout(()=>{if(a!==Fa.current){f.emit("async.staleIgnored",{path:"search",seq:a});return}if(!T.trim()){z([]),ee(0),de("none"),f.emit("search.completed",{query:T,count:0,engine:"none"});return}const m=ra.current;if(m&&Ft.current){m.postMessage({type:"SEARCH_QUERY",boardId:I.current.id,seq:a,query:T,limit:8,viewport:s});return}const h=performance.now(),C=Df(I.current.nodes,T,s,8);z(C),ee(0),de("local"),f.emit("search.completed",{query:T,count:C.length,engine:"local",durationMs:Number((performance.now()-h).toFixed(2)),viewportBoosted:!0})},120);return()=>window.clearTimeout(i)},[T,xe,we]);const En=g.useCallback(a=>{ee(s=>{const i=B.length;if(i===0)return 0;const l=(s+a+i)%i;return f.emit("search.activeChanged",{query:T.trim(),index:l,count:i}),l})},[T,B.length]),vs=g.useCallback(a=>{const s=B[q];s&&ws(s,a)},[ws,q,B]),cu=g.useCallback(a=>{if(a.key==="ArrowDown"){a.preventDefault(),En(1);return}if(a.key==="ArrowUp"){a.preventDefault(),En(-1);return}if(a.key==="Enter"){a.preventDefault(),vs("keyboard-enter");return}a.key==="Escape"&&(A(""),z([]),ee(0),f.emit("search.cleared"))},[vs,En]),uu=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(R=>R.id===a);if(!l)return;d(R=>Xa(R,I.current,{description:"Move nodes",mergeKey:null})),u([]);const m=G.current.includes(a)?G.current:[a],h=new Map(I.current.nodes.filter(R=>m.includes(R.id)).map(R=>[R.id,{x:R.x,y:R.y}])),C=h.get(a)??{x:l.x,y:l.y},S=I.current.settings.gridSnap??!0,M=R=>{const E=(R.clientX-i.x)/te.current.scale,_=(R.clientY-i.y)/te.current.scale,N=S?Il(C.x+E)-C.x:E,w=S?Il(C.y+_)-C.y:_;o(W=>({...W,nodes:W.nodes.map(ae=>{const oe=h.get(ae.id);return oe?{...ae,x:oe.x+N,y:oe.y+w}:ae}),updatedAt:new Date().toISOString()}))},k=()=>{window.removeEventListener("pointermove",M),window.removeEventListener("pointerup",k),f.emit("node.patch",{id:a,reason:"drag",gridSnap:S})};window.addEventListener("pointermove",M),window.addEventListener("pointerup",k,{once:!0})},[]),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},m=zh(i);let h={width:i.width,height:i.height};d(E=>Xa(E,I.current,{description:"Resize node",mergeKey:null})),u([]),c(E=>E.includes(a)?E:[a]),$(null),f.emit("node.resize.started",{id:a,width:Math.round(i.width),height:Math.round(i.height)});const C=()=>{document.body.classList.remove("is-resizing-node"),window.removeEventListener("pointermove",M),window.removeEventListener("pointerup",k),window.removeEventListener("pointercancel",R)},S=E=>{const _=(E.clientX-l.x)/te.current.scale,N=(E.clientY-l.y)/te.current.scale;let w=i.width+_,W=i.height+N;if(E.shiftKey&&i.width>0&&i.height>0){const ae=Math.max(w/i.width,W/i.height);w=i.width*ae,W=i.height*ae}h={width:Math.round(se(w,m.minWidth,m.maxWidth)),height:Math.round(se(W,m.minHeight,m.maxHeight))},o(ae=>({...ae,nodes:ae.nodes.map(oe=>oe.id===a?{...oe,...h}:oe),updatedAt:new Date().toISOString()}))},M=E=>{S(E)},k=E=>{S(E),C(),f.emit("node.resize.completed",{id:a,width:h.width,height:h.height})},R=()=>{C(),f.emit("node.resize.cancelled",{id:a})};document.body.classList.add("is-resizing-node"),window.addEventListener("pointermove",M),window.addEventListener("pointerup",k,{once:!0}),window.addEventListener("pointercancel",R,{once:!0})},[]),pu=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){$(null),Ve({startX:s.x,startY:s.y,currentX:s.x,currentY:s.y}),f.emit("selection.box.started",{x:Math.round(s.x),y:Math.round(s.y)});const h=()=>{document.body.classList.remove("is-selecting"),window.removeEventListener("pointermove",C),window.removeEventListener("pointerup",S),window.removeEventListener("pointercancel",M)},C=k=>{Ve({startX:s.x,startY:s.y,currentX:k.clientX,currentY:k.clientY})},S=k=>{const R=Bl({startX:s.x,startY:s.y,currentX:k.clientX,currentY:k.clientY});if(h(),Ve(null),R.width<gl&&R.height<gl){f.emit("selection.box.cancelled",{reason:"too-small",width:Math.round(R.width),height:Math.round(R.height)});return}const E=kf(R,te.current),_=I.current.nodes.filter(N=>Dl(N,E)).map(N=>N.id);c(_),f.emit("selection.box.completed",{count:_.length,width:Math.round(R.width),height:Math.round(R.height)})},M=()=>{h(),Ve(null),f.emit("selection.box.cancelled",{reason:"pointer-cancelled"})};document.body.classList.add("is-selecting"),window.addEventListener("pointermove",C),window.addEventListener("pointerup",S,{once:!0}),window.addEventListener("pointercancel",M,{once:!0});return}c([]),$(null);const i={...te.current},l=h=>{b({...i,x:i.x+h.clientX-s.x,y:i.y+h.clientY-s.y})},m=()=>{document.body.classList.remove("is-panning"),window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",m)};document.body.classList.add("is-panning"),window.addEventListener("pointermove",l),window.addEventListener("pointerup",m,{once:!0})},[b]),js=g.useCallback(a=>{const s=a.target.closest("textarea,.result-popover__body,.mindcanvas-text-scrollable-view"),i=a.ctrlKey||a.metaKey;if(s&&!i)return;const l=I.current.settings.wheelMode?i:!i;a.preventDefault();const m=te.current;if(l){const h=Math.exp(-a.deltaY*.0012),C=se(m.scale*h,$o,Fo),S=je(a.clientX,a.clientY);b({x:a.clientX-S.x*C,y:a.clientY-S.y*C,scale:C});return}b({...m,x:m.x-a.deltaX,y:m.y-a.deltaY})},[b,je]);g.useEffect(()=>{const a=Sn.current;if(a)return a.addEventListener("wheel",js,{passive:!1}),()=>a.removeEventListener("wheel",js)},[js]);const J=t.nodes.find(a=>a.id===y[0]),Ya=g.useMemo(()=>{const a=new Set(y);return t.nodes.filter(s=>a.has(s.id))},[t.nodes,y]),Pn=((fi=J==null?void 0:J.metadata)==null?void 0:fi[U.studioNodeType])??"",gu=Pn?Ts(Pn):"Unassigned",hu=Pn==="template.input",oi=g.useMemo(()=>Cl(ge),[ge]),vo=le&&le.issues.length===0?le.template:null,si=g.useMemo(()=>No(vo,Ot),[Ot,vo]),fu=g.useMemo(()=>Ya.filter(a=>a.kind==="image"&&Qn(a).length>0).length,[Ya]),Ga=g.useMemo(()=>{const a=t.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}},[t.nodes]),ri=g.useMemo(()=>{if(!J||J.kind!=="ai-task")return{size:0,runnable:0};const a=jr(t,J.id);return{size:a.length,runnable:a.filter(s=>s.status!=="running").length}},[t,J]),ga=g.useMemo(()=>{if(Ya.length<2)return null;const a=Ho(Ya);if(!a)return null;const s=Math.max(.01,O.scale),i=a.minX*s+O.x-10,l=a.minY*s+O.y-10,m=a.maxX*s+O.x+10,h=a.maxY*s+O.y+10,C=(i+m)/2,S=l>112?l-52:h+12;return{left:i,top:l,width:Math.max(0,m-i),height:Math.max(0,h-l),toolbarLeft:se(C,168,Math.max(168,xe.width-168)),toolbarTop:se(S,42,Math.max(42,xe.height-58))}},[Ya,xe.height,xe.width,O]),Ht=K?t.nodes.find(a=>a.id===K):null,ii=Z?t.nodes.find(a=>a.id===Z&&!!a.companyMode):null,li=nt?t.nodes.find(a=>a.id===nt&&a.kind==="directory"):null,di=g.useMemo(()=>new Set([...y,...B.map(a=>a.id),pt,K,Z,nt,ue==null?void 0:ue.from].filter(a=>!!a)),[Z,ue==null?void 0:ue.from,nt,pt,K,B,y]),ha=g.useMemo(()=>{const a=Sf(O,xe);return t.nodes.filter(s=>di.has(s.id)||Dl(s,a))},[di,t.nodes,xe,O]),Is=g.useMemo(()=>new Set(ha.map(a=>a.id)),[ha]);g.useEffect(()=>{f.emit("visibility.culled",{visible:ha.length,total:t.nodes.length,scale:Number(O.scale.toFixed(3))})},[t.nodes.length,O.scale,ha.length]);const bu=g.useCallback(()=>{const a=I.current,s=G.current.map(l=>a.nodes.find(m=>m.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?$l(a,i,x.trim()||i.body||i.title):["You are running inside MindExec React MindCanvas.","No AI Task is selected. This is a local prompt-debug preview for the current board.","",`Board: ${a.name}`,`Nodes: ${a.nodes.length}`,`Edges: ${a.edges.length}`,s?`Selected node: ${s.title} (${s.kind})`:"Selected node: none","","Draft input:",ao(x||(s==null?void 0:s.body)||"No prompt input.",4e3)].join(`
47
- `)},[x]),ci=g.useMemo(()=>{const a=new Map(t.nodes.map(s=>[s.id,s]));return t.edges.map(s=>{const i=a.get(s.from),l=a.get(s.to);if(!i||!l)return null;const m={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-m.x)*.42);return{...s,path:`M ${m.x} ${m.y} C ${m.x+C} ${m.y}, ${h.x-C} ${h.y}, ${h.x} ${h.y}`}}).filter(Boolean)},[t.edges,t.nodes]),ui=g.useMemo(()=>ci.filter(a=>Is.has(a.from)||Is.has(a.to)),[ci,Is]),et=g.useMemo(()=>Cf(t.nodes,O,xe),[t.nodes,O,xe]),yu=g.useCallback(a=>{if(!et)return;const s=a.currentTarget.getBoundingClientRect(),i=se(a.clientX-s.left,0,Uo),l=se(a.clientY-s.top,0,zo),m=et.bounds.minX+(i-tn)/et.scale,h=et.bounds.minY+(l-tn)/et.scale;b({...te.current,x:xe.width/2-m*te.current.scale,y:xe.height/2-h*te.current.scale}),f.emit("minimap.navigate",{worldX:Math.round(m),worldY:Math.round(h)})},[b,et,xe.height,xe.width]),Vt=t.settings.inputMode==="Image"?"Image":t.settings.inputMode==="Video"?"Video":null,At=Vt==="Image"?Xd:Vt==="Video"?qd:null,xu=x.trim().length>0||(J==null?void 0:J.kind)==="ai-task",mi=T.trim().length>0,pi=B[q]??null,Cu=mi?`${B.length} result${B.length===1?"":"s"}`:`${t.nodes.length} nodes`,_n=He?Bl(He):null,jo=Xs(t.settings.gridType),gi=t.settings.gridSnap??!0,hi=t.settings.cameraBookmarks??{},Ns=Oe;return n.jsxs("div",{ref:Sn,className:`mindcanvas ${Ct?"mindcanvas--read-mode":""}`,"data-read-mode":Ct?"true":"false","data-read-mode-api":ss?"bound":"unbound",onPointerMove:Kd,onDragOver:Xc,onDrop:qc,children:[n.jsx("div",{ref:It,className:`canvas-plane canvas-plane--grid-${jo}`,"data-grid-type":jo,"data-grid-snap":t.settings.gridSnap??!0?"on":"off",onPointerDown:pu,onContextMenu:a=>a.preventDefault(),children:n.jsxs("div",{ref:Ba,className:"canvas-world","data-visible-nodes":ha.length,"data-total-nodes":t.nodes.length,"data-visible-edges":ui.length,children:[n.jsx("svg",{className:"edge-layer",width:"4000",height:"3000",viewBox:"-1200 -900 4000 3000","aria-hidden":"true",children:ui.map(a=>n.jsx("path",{className:`edge-path edge-path--${a.kind}`,d:a.path,onClick:()=>D(s=>({...s,edges:s.edges.filter(i=>i.id!==a.id)}),"edge.delete",{id:a.id})},a.id))}),ha.map(a=>n.jsx(Hg,{node:a,selected:y.includes(a.id),pulsing:pt===a.id,connectionDraft:ue,onSelect:Cc,onDragStart:uu,onResizeStart:mu,onPatch:X,onDelete:Kc,onDuplicate:Qc,onRun:pa,onPin:lu,onOpenResult:$,onToggleAiReference:Ec,onCopyNode:Pc,onCopyEmbedReference:_c,onFitNodeHeight:Dc,onToggleNodeExpanded:Bc,onToggleWordWrap:Oc,onStageCompany:$c,onOpenCompanyGraph:Fc,onSyncCompanyGoal:Uc,onRefreshCompany:zc,onSetCompanyStatus:ti,onRemoveCompany:ai,onOpenAsset:Gc,onOpenDirectorySettings:Ac,onScanDirectory:Tc,onCreateRemoteControl:vc,onGenerateTemplateCard:wc},a.id))]})}),_n?n.jsx("div",{className:"canvas-selection-box",style:{left:_n.left,top:_n.top,width:_n.width,height:_n.height}}):null,ga?n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"canvas-multi-selection-bounds",style:{left:ga.left,top:ga.top,width:ga.width,height:ga.height}}),n.jsxs("div",{className:"multi-selection-toolbar floating-panel",role:"toolbar","aria-label":"Multi selection actions",style:{left:ga.toolbarLeft,top:ga.toolbarTop},children:[n.jsx("span",{className:"multi-selection-toolbar__count",children:Ya.length}),n.jsx("button",{type:"button",title:"Copy selected nodes","data-testid":"multi-selection-copy",onClick:()=>void xs(),children:n.jsx(eo,{size:15})}),n.jsx("button",{type:"button",title:"Duplicate selected nodes",onClick:()=>ys("multi-toolbar"),children:n.jsx(Zl,{size:15})}),n.jsx("button",{type:"button",title:"Bring selected nodes to front","data-testid":"multi-selection-bring-front",onClick:()=>Tn("front","multi-toolbar"),children:n.jsx(km,{size:15})}),n.jsx("button",{type:"button",title:"Send selected nodes to back","data-testid":"multi-selection-send-back",onClick:()=>Tn("back","multi-toolbar"),children:n.jsx(wm,{size:15})}),n.jsx("button",{type:"button",title:"Fit selected text heights",onClick:Jc,children:n.jsx(Xi,{size:15})}),n.jsx("span",{className:"multi-selection-toolbar__separator"}),n.jsx("button",{type:"button",title:"Arrange selected nodes as grid",onClick:()=>Cs("grid"),children:n.jsx(qi,{size:15})}),n.jsx("button",{type:"button",title:"Arrange selected nodes as strip",onClick:()=>Cs("strip"),children:n.jsx(Ji,{size:15})}),n.jsx("button",{type:"button",title:"Tidy selected nodes","data-testid":"multi-selection-tidy",onClick:()=>Cs("tidy"),children:n.jsx(Zi,{size:15})}),fu>=2&&n.jsx("button",{type:"button",title:"Stack selected image nodes","data-testid":"multi-selection-merge-images",onClick:Zc,children:n.jsx(Mo,{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:()=>bs("multi-toolbar"),children:n.jsx(Vo,{size:15})}),n.jsx("button",{type:"button",title:"Clear selection","data-testid":"multi-selection-clear",onClick:()=>{const a=G.current.length;c([]),f.emit("selection.cleared",{source:"multi-toolbar",beforeCount:a})},children:n.jsx(ct,{size:15})})]})]}):null,Ye&&n.jsx("div",{className:"node-action-toast floating-panel",role:"status",children:Ye}),n.jsxs("div",{className:"top-tabbar",role:"tablist","aria-label":"MindCanvas boards",children:[_a.map(a=>{const s=a.id===t.id,i=Xe(a.name),l=Wh(a,t,s);return n.jsxs("div",{className:`tab-shell ${s?"is-active":""} ${Zt===a.id?"is-dragging":""} ${po===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":Zt===a.id?"dragging":po===a.id?"over":"idle",onDragStart:m=>{m.dataTransfer.effectAllowed="move",m.dataTransfer.setData("text/plain",a.id),Qt(a.id),f.emit("board.tabs.dragStart",{boardId:a.id})},onDragOver:m=>{!Zt||Zt===a.id||(m.preventDefault(),m.dataTransfer.dropEffect="move",ea(a.id))},onDragLeave:()=>{ea(m=>m===a.id?null:m)},onDrop:m=>{m.preventDefault();const h=Zt||m.dataTransfer.getData("text/plain");Hd(h,a.id),Qt(null),ea(null)},onDragEnd:()=>{Qt(null),ea(null)},onMouseDown:m=>{m.button===1&&(m.preventDefault(),ls(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?ne():Yr(a.id),children:[a.sourceKind==="localBridge"?n.jsx(Hn,{size:15}):n.jsx(Mo,{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:m=>{m.stopPropagation(),ls(a.id,"close-button")},children:n.jsx(ct,{size:13})})]},a.id)}),n.jsx("button",{type:"button",className:"tab-button tab-button--plain",title:"New board","data-testid":"board-create",onClick:Vr,children:n.jsx(Zn,{size:16})})]}),Oe&&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:()=>ve("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":Fe.currentMode,"data-project-storage-selected-tab":Ee,"data-project-storage-local-provider":Fe.localProviderKind,"data-project-storage-cloud-available":Fe.isCloudAvailable?"true":"false","data-project-storage-can-sync-cloud":Fe.canSyncLocalToCloud?"true":"false",children:[n.jsxs("header",{className:"local-board-panel__head project-gallery-panel__head",children:[n.jsxs("div",{className:"project-gallery-title",children:[n.jsxs("span",{className:"project-gallery-title__eyebrow",children:[n.jsx(qi,{size:15}),"Project Gallery"]}),n.jsx("strong",{children:"Projects"}),n.jsx("p",{children:"Select a canvas snapshot to focus an open tab or load it in a new tab."})]}),n.jsxs("div",{className:"local-board-panel__actions project-gallery-panel__actions",children:[n.jsx("button",{type:"button",title:"New board",onClick:Vr,children:n.jsx(Zn,{size:15})}),n.jsx("button",{type:"button",title:"Close Project Gallery",onClick:()=>ve("close-button"),children:n.jsx(ct,{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":Fe.showLocalTab?"true":"false","data-project-storage-show-cloud":Fe.showCloudTab?"true":"false",children:[n.jsxs("button",{type:"button",role:"tab","aria-selected":Ee==="local",className:Ee==="local"?"is-active":"","data-testid":"project-storage-tab-local",onClick:()=>da("local"),children:[n.jsx(Hn,{size:14}),"Local"]}),n.jsxs("button",{type:"button",role:"tab","aria-selected":Ee==="cloud",className:Ee==="cloud"?"is-active":"","data-testid":"project-storage-tab-cloud",onClick:()=>da("cloud"),children:[n.jsx(Ro,{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:t.name,onChange:a=>ds(a.target.value)})]}),n.jsxs("div",{className:"project-gallery-rail-card",children:[n.jsx("span",{children:"Storage"}),n.jsx("strong",{children:Ee==="local"?`${kt.length} local boards`:"Cloud gated"}),n.jsx("small",{children:Ee==="local"?`${Fe.localProviderKind} provider / browser catalog and LocalBridge boards`:Fe.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:be||void 0,children:Ee==="local"?be?Bo(be):Wl(fe):"Cloud gated"}),n.jsx("small",{children:Ee==="local"?be||Lt||"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:Xt,onChange:a=>zt(a.target.checked)}),n.jsx("span",{children:"Show at startup"})]})]}),n.jsx("section",{className:"project-gallery-board-area",children:Ee==="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:[kt.length," saved"]})]}),n.jsxs("div",{className:"local-board-list local-board-list--stored project-gallery-board-grid","data-project-gallery-board-grid":"true",children:[kt.map(a=>{const s=mn===a.id,i=a.id===t.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:pn,onChange:l=>Na(l.target.value),onKeyDown:l=>Lc(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:()=>fs(a.id),children:n.jsx(Ps,{size:13})}),n.jsx("button",{type:"button",title:"Cancel rename","data-testid":"stored-board-rename-cancel",onClick:hs,children:n.jsx(ct,{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:()=>Yr(a.id),onDoubleClick:l=>{l.stopPropagation(),ei(a)},children:[a.sourceKind==="localBridge"?n.jsx(Hn,{size:15}):n.jsx(ut,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Xe(a.name)}),n.jsx("small",{children:jf(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:()=>ei(a),children:n.jsx(Qi,{size:14})}),n.jsx("button",{type:"button",className:"local-board-row__action",title:"Delete board","data-testid":"stored-board-delete",disabled:i,onClick:()=>ls(a.id,"project-gallery"),children:n.jsx(Vo,{size:14})})]})},a.id)}),kt.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:L,disabled:fe==="checking",children:fe==="checking"?n.jsx(Rt,{size:15,className:"spin-icon"}):n.jsx(an,{size:15})})]}),n.jsxs("div",{className:`local-board-state local-board-state--${fe}`,children:[fe==="blocked"?n.jsx(Kl,{size:15}):fe==="unavailable"?n.jsx(vm,{size:15}):n.jsx(Hn,{size:15}),n.jsx("span",{children:Wl(fe)}),fe==="blocked"&&!Ka()&&n.jsx("button",{type:"button",onClick:Wt,children:"Enable"})]}),bt&&n.jsx("p",{className:"local-board-message",children:bt}),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(_s,{size:16}),n.jsxs("span",{children:[n.jsx("strong",{children:"Local Workspace"}),n.jsx("small",{title:be||void 0,children:be||Lt||"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:Je,onClick:()=>void Bd("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:Je||fe==="blocked"&&!Ka(),onClick:()=>void Od(),children:[Je?n.jsx(Rt,{size:14,className:"spin-icon"}):n.jsx(_s,{size:14}),n.jsx("span",{children:"Select Local Storage"})]})]}),wa.length>0&&n.jsx("div",{className:"project-gallery-workspace-history","data-testid":"project-gallery-workspace-history",children:wa.map(a=>n.jsx("button",{type:"button",title:a,disabled:Je||a===be,onClick:()=>void is(a,"history"),children:Bo(a,40)},a))})]}),n.jsxs("button",{type:"button",className:"local-board-export","data-testid":"localbridge-export",disabled:qt||!!((bi=t.source)!=null&&bi.partialImport)||!!((yi=t.source)!=null&&yi.truncated)||fe==="blocked"&&!Ka(),title:(xi=t.source)!=null&&xi.partialImport?"Export blocked for partial original imports":(Ci=t.source)!=null&&Ci.truncated?"Export blocked for truncated imported boards":"Export current board to LocalBridge",onClick:()=>void $d(),children:[qt?n.jsx(Rt,{size:15,className:"spin-icon"}):n.jsx(el,{size:15}),n.jsx("span",{children:qt?"Exporting":"Export current"})]}),n.jsx("div",{className:"local-board-list project-gallery-bridge-list",children:ka.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:!!cn,onClick:()=>void Vd(a),children:[n.jsx(Hn,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Xe(a.Title)}),n.jsx("small",{children:Sr(a.UpdatedAt)})]}),cn===a.Id&&n.jsx(Rt,{size:15,className:"spin-icon"})]},a.Id))})]})]}):n.jsxs("div",{className:"project-cloud-shell","data-testid":"project-cloud-shell","data-project-cloud-status":Fe.isCloudAvailable?"available":"gated","data-project-cloud-plan":Fe.cloudPlanKey,"data-project-cloud-entitlement":Fe.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:pe?n.jsx(Ro,{size:22}):n.jsx(Ar,{size:22})}),n.jsx("strong",{children:pe?"Cloud boards are provider-ready":"Cloud projects are adapter-gated"}),n.jsx("p",{children:pe?"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: ",pe?"Cloud ready":"Local"]}),n.jsxs("small",{children:[Xe(t.name)," / ",os??Fe.cloudStatusMessage??"saved in this browser"]})]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-new-board",disabled:!pe||xt,title:pe?"Create and save a cloud board":"Cloud board creation requires the cloud adapter",onClick:zd,children:[xt?n.jsx(Rt,{size:14,className:"spin-icon"}):n.jsx(Zn,{size:14}),xt?"Saving":"New cloud board"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-save-current",disabled:!pe||xt,title:pe?"Save current board to Supabase":"Cloud save requires Supabase login",onClick:Ud,children:[n.jsx(el,{size:14}),"Save current"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-refresh",disabled:!pe||xt,title:pe?"Refresh cloud boards":"Cloud refresh requires Supabase login",onClick:()=>void it("refresh-button"),children:[xt?n.jsx(Rt,{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(Ro,{size:14}),"Open login shell"]}),pe&&n.jsxs("div",{className:"local-board-list project-gallery-cloud-list","data-testid":"project-cloud-board-list",children:[_t.map(a=>n.jsxs("button",{type:"button","data-testid":"project-cloud-board-row","data-board-id":a.id,className:"local-board-row",disabled:!!ja,onClick:()=>void Fd(a),children:[n.jsx(Ro,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:Xe(a.name)}),n.jsxs("small",{children:[Sr(a.updatedAt)," / ",a.nodeCount," nodes"]})]}),ja===a.id&&n.jsx(Rt,{size:15,className:"spin-icon"})]},a.id)),_t.length===0&&n.jsx("p",{className:"local-board-message",children:"No cloud boards loaded."})]})]})})]})]})})})]}),!Ns&&n.jsx(Eg,{bridgeState:fe,bridgeMessage:bt,bridgeStatus:ft,syncStatus:tt,syncMessage:uo,hostedBridgeAccessEnabled:Ka(),onRefreshBridge:L,onEnableHostedBridge:Wt}),bn&&Q&&n.jsx(Fi,{launchers:aa,activeLauncher:Q,template:Ue,selectedOptionId:Qe,values:jt,validationMessage:Ta??(Da?null:Cn),canCreate:Da||!Cn,primaryLabel:Da?"Add template card":"Create board",onLauncherSelected:sc,onOptionSelected:lc,onInputChanged:dc,onCreate:Wd,onClose:ic}),ho&&n.jsx("div",{className:"template-studio-chooser-backdrop","data-testid":"template-studio-chooser",onMouseDown:Kr,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:Kr,children:n.jsx(ct,{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:uc,children:[n.jsx("span",{className:"template-studio-chooser__icon",children:n.jsx(Zn,{size:17})}),n.jsxs("span",{children:[n.jsx("strong",{children:"New template board"}),n.jsx("small",{children:"Start a blank Studio draft on a new local board."})]})]}),n.jsxs("button",{type:"button","data-testid":"template-studio-convert-current",className:"template-studio-chooser__action",onClick:mc,children:[n.jsx("span",{className:"template-studio-chooser__icon",children:n.jsx(Ds,{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."})]})]})]})]})}),La&&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(Mo,{size:15}),n.jsx("span",{children:"Template Studio"})]}),n.jsxs("div",{className:"template-studio-toolbar__meta",children:["Editing ",ge.templateId]}),n.jsx("button",{type:"button",title:"Compile manifest","data-testid":"template-studio-compile",onClick:us,children:n.jsx(nn,{size:15})}),n.jsx("button",{type:"button",title:"Test create board","data-testid":"template-studio-test-create",onClick:fc,children:n.jsx(ya,{size:15})}),n.jsx("button",{type:"button",title:"Copy manifest JSON","data-testid":"template-studio-copy",onClick:()=>void hc(),children:n.jsx(eo,{size:15})}),n.jsx("button",{type:"button",title:"Save template draft","data-testid":"template-studio-save",onClick:pc,children:n.jsx(Ps,{size:15})}),n.jsx("button",{type:"button",title:"Exit Template Studio","data-testid":"template-studio-close",onClick:qr,children:n.jsx(ct,{size:15})})]}),n.jsx("div",{className:"template-studio-toolbar template-studio-toolbar--roles floating-panel",children:Ls.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:()=>gc(a.studioNodeType),children:n.jsx("span",{children:a.shortLabel})},a.studioNodeType))}),J&&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: ",J.title||J.kind]}),Ls.map(a=>n.jsx("button",{type:"button",title:a.label,className:Pn===a.studioNodeType?"is-active":"","data-testid":"template-studio-role","data-studio-node-type":a.studioNodeType,onClick:()=>Jr(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:ge.templateTitle})]}),n.jsx("button",{type:"button",title:"Close Template Studio",onClick:qr,children:n.jsx(ct,{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:ge.templateId,onChange:a=>xo("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:ge.templateTitle,onChange:a=>xo("templateTitle",a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Category"}),n.jsx("input",{type:"text",value:ge.category,onChange:a=>xo("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:ge.boardTitle,onChange:a=>xo("boardTitle",a.target.value)})]})]}),J?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:J.title||J.kind}),n.jsx("span",{children:gu})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Template Role"}),n.jsxs("select",{value:Pn,onChange:a=>Jr(a.target.value),children:[n.jsx("option",{value:"",children:"Unassigned"}),Ls.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:((Si=J.metadata)==null?void 0:Si[U.templateNodeId])??"",onChange:a=>Nt(U.templateNodeId,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Compile Target"}),n.jsxs("select",{value:((ki=J.metadata)==null?void 0:ki[U.compileTarget])??"",onChange:a=>Nt(U.compileTarget,a.target.value),children:[n.jsx("option",{value:"",children:"Auto"}),Xu.map(a=>n.jsx("option",{value:a,children:a},a))]})]}),hu?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:((wi=J.metadata)==null?void 0:wi[U.inputKey])??"",onChange:a=>Nt(U.inputKey,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Input Type"}),n.jsxs("select",{value:((vi=J.metadata)==null?void 0:vi[U.inputType])??"text",onChange:a=>Nt(U.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:(((ji=J.metadata)==null?void 0:ji[U.inputRequired])??"").toLowerCase()==="true",onChange:a=>Nt(U.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:((Ii=J.metadata)==null?void 0:Ii[U.inputPlaceholder])??"",onChange:a=>Nt(U.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:((Ni=J.metadata)==null?void 0:Ni[U.inputDefaultValue])??"",onChange:a=>Nt(U.inputDefaultValue,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Description"}),n.jsx("textarea",{value:((Ai=J.metadata)==null?void 0:Ai[U.inputDescription])??"",onChange:a=>Nt(U.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:((Mi=J.metadata)==null?void 0:Mi[U.inputOptions])??"",onChange:a=>Nt(U.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"}),rs&&n.jsx("small",{children:rs})]}),le!=null&&le.issues.length?n.jsx("div",{className:"template-studio-panel__issues","data-testid":"template-studio-issues",children:le.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,le?n.jsx("pre",{className:"template-studio-panel__manifest","data-testid":"template-studio-manifest",children:le.manifestJson}):n.jsx("p",{className:"template-studio-panel__hint",children:"Compile to preview the JSON manifest for the selected Studio nodes."})]})]})]})]}),Hr&&vo&&n.jsx(Fi,{launchers:[oi],activeLauncher:oi,template:vo,selectedOptionId:null,values:Ot,validationMessage:Pa??si,canCreate:!si,onLauncherSelected:()=>{},onOptionSelected:()=>{},onInputChanged:yc,onCreate:xc,onClose:bc}),n.jsx("input",{ref:wn,type:"file",accept:"application/json,.json",multiple:!0,hidden:!0,"data-testid":"board-import-input",onChange:a=>{Gd(a.currentTarget.files),a.currentTarget.value=""}}),!Ns&&n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"canvas-toolbar",role:"toolbar","aria-label":"MindCanvas tools",children:[n.jsx("button",{type:"button",title:"Add note","data-testid":"note-node-add",onClick:()=>Le("note"),children:n.jsx(sr,{size:17})}),n.jsx("button",{type:"button",title:"Add memo","data-testid":"memo-node-add",onClick:()=>Le("memo"),children:n.jsx(Jl,{size:17})}),n.jsx("button",{type:"button",title:"Add markdown","data-testid":"markdown-node-add",onClick:()=>Le("markdown"),children:n.jsx(ut,{size:17})}),n.jsx("button",{type:"button",title:"Add CSV table","data-testid":"csv-table-node-add",onClick:()=>Le("csv-table"),children:n.jsx(Ji,{size:17})}),n.jsx("button",{type:"button",title:"Add code","data-testid":"code-node-add",onClick:()=>Le("code"),children:n.jsx(nn,{size:17})}),n.jsx("button",{type:"button",title:"Add AI Task","data-testid":"ai-task-node-add",onClick:()=>Le("ai-task"),children:n.jsx(oo,{size:17})}),n.jsx("button",{type:"button",title:"Add Code Note","data-testid":"code-note-node-add",onClick:kc,children:n.jsx(nn,{size:17})}),n.jsx("button",{type:"button",title:"Add Agent Command","data-testid":"agent-command-node-add",onClick:Sc,children:n.jsx(jm,{size:17})}),n.jsx("button",{type:"button",title:"Add image generation spec","data-testid":"image-generate-node-add",onClick:()=>Le("ai-task","image-generate"),children:n.jsx(so,{size:17})}),n.jsx("button",{type:"button",title:"Add video generation spec","data-testid":"video-generate-node-add",onClick:()=>Le("ai-task","video-generate"),children:n.jsx(ro,{size:17})}),n.jsx("button",{type:"button",title:"Add image","data-testid":"image-node-add",onClick:()=>Le("image"),children:n.jsx(so,{size:17})}),n.jsx("button",{type:"button",title:"Add image mask","data-testid":"mask-node-add",onClick:()=>Le("mask"),children:n.jsx(Im,{size:17})}),n.jsx("button",{type:"button",title:"Add video","data-testid":"video-node-add",onClick:()=>Le("video"),children:n.jsx(ro,{size:17})}),n.jsx("button",{type:"button",title:"Add embed","data-testid":"embed-node-add",onClick:()=>Le("embed"),children:n.jsx(on,{size:17})}),n.jsx("button",{type:"button",title:"Add remote monitor","data-testid":"remote-monitor-node-add",onClick:()=>Le("remote-monitor"),children:n.jsx(or,{size:17})}),n.jsx("button",{type:"button",title:"Add PDF","data-testid":"pdf-node-add",onClick:()=>Le("pdf"),children:n.jsx(ut,{size:17})}),n.jsx("button",{type:"button",title:"Add file reference","data-testid":"file-node-add",onClick:()=>Le("file"),children:n.jsx(Xl,{size:17})}),n.jsx("button",{type:"button",title:"Add directory reference","data-testid":"directory-node-add",onClick:()=>Le("directory"),children:n.jsx(_s,{size:17})}),n.jsx("button",{type:"button",title:"Templates","data-testid":"template-launcher-open",onClick:rc,children:n.jsx(Mo,{size:17})}),n.jsx("button",{type:"button",title:"Template Studio",className:La||ho?"is-active":"","data-testid":"template-studio-open",onClick:cc,children:n.jsx(Qi,{size:17})}),n.jsx("button",{type:"button",title:"Import board JSON","data-testid":"board-import-open",onClick:Yd,children:n.jsx(Nm,{size:17})}),n.jsx("button",{type:"button",title:"Tools",onClick:()=>e("/tools"),children:n.jsx(rr,{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":Ga.total,"data-ai-task-runnable":Ga.runnable,"data-ai-task-running":Ga.running,onClick:ou,children:n.jsx(ya,{size:17})}),n.jsx("button",{type:"button",title:"Run selected graph","data-testid":"automation-run-selected","data-selected-graph-size":ri.size,"data-selected-graph-runnable":ri.runnable,disabled:!J||J.kind!=="ai-task",onClick:eu,children:n.jsx(tl,{size:17})}),n.jsx("button",{type:"button",title:"Pause running AI tasks","data-testid":"automation-pause","data-running-ai-tasks":Ga.running,onClick:su,children:n.jsx(Yo,{size:17})}),n.jsx("button",{type:"button",title:"Stop active AI tasks","data-testid":"automation-stop","data-active-ai-tasks":Ga.active,"data-paused-ai-tasks":Ga.paused,onClick:ru,children:n.jsx(Am,{size:15})}),n.jsx("button",{type:"button",title:"Generate flow",disabled:!J,onClick:iu,children:n.jsx(Ds,{size:17})}),n.jsx("span",{className:"toolbar-separator"}),n.jsx("button",{type:"button",title:"Undo","data-testid":"history-undo",disabled:r.length===0,onClick:Ss,children:n.jsx(Mm,{size:17})}),n.jsx("button",{type:"button",title:"Redo","data-testid":"history-redo",disabled:p.length===0,onClick:ks,children:n.jsx(Rm,{size:17})})]}),n.jsxs("div",{className:"search-panel floating-panel","data-testid":"mindcanvas-search-panel","data-search-engine":ke,"data-search-worker-state":we,children:[n.jsxs("div",{className:"search-input-row",children:[n.jsx(Tm,{size:16}),n.jsx("input",{ref:Oa,"data-testid":"mindcanvas-search-input","aria-label":"Search text",value:T,onChange:a=>A(a.target.value),onKeyDown:cu,placeholder:"Search text ..."}),n.jsx("span",{className:"search-count","data-testid":"mindcanvas-search-count","aria-live":"polite",children:Cu}),n.jsx("button",{type:"button",title:"Previous search result","data-testid":"mindcanvas-search-prev",disabled:B.length===0,onClick:()=>En(-1),children:n.jsx(Lm,{size:14})}),n.jsx("button",{type:"button",title:"Next search result","data-testid":"mindcanvas-search-next",disabled:B.length===0,onClick:()=>En(1),children:n.jsx(Vn,{size:14})})]}),mi&&n.jsx("div",{className:"search-current","data-testid":"mindcanvas-search-current","aria-live":"polite",children:pi?n.jsxs(n.Fragment,{children:[n.jsxs("span",{children:[q+1," / ",B.length]}),n.jsxs("button",{type:"button","data-testid":"mindcanvas-search-focus",onClick:()=>vs("current-button"),children:["Focus ",pi.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===q?"is-active":"","aria-current":s===q?"true":void 0,onMouseEnter:()=>ee(s),onClick:()=>ws(a,"result-click"),children:[n.jsx("strong",{children:a.title}),n.jsx("span",{children:a.body.slice(0,84)})]},a.id))})]})]}),ue&&n.jsxs("div",{className:"connection-toast floating-panel",children:[n.jsx(Ps,{size:14}),"Select a compatible node pin to create a ",ue.kind," line.",n.jsx("button",{type:"button",onClick:()=>De(null),children:"Cancel"})]}),(Ht==null?void 0:Ht.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:[Ht.title," Result"]}),n.jsx("button",{type:"button",title:"Close",onClick:()=>$(null),children:n.jsx(ct,{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 tu(Ht),children:[n.jsx(eo,{size:14}),n.jsx("span",{children:"Copy"})]}),n.jsxs("button",{type:"button",title:"Archive result as a Markdown node",onClick:()=>au(Ht),children:[n.jsx(ut,{size:14}),n.jsx("span",{children:"Archive"})]}),n.jsxs("button",{type:"button",title:"Stage a follow-up AI Task from this result",onClick:()=>nu(Ht),children:[n.jsx(oo,{size:14}),n.jsx("span",{children:"Follow-up"})]})]}),n.jsx("pre",{className:"result-popover__body",children:Ht.result})]}),Be&&n.jsx(mh,{url:Be.url,fileName:Be.fileName,onClose:()=>{gt(null),f.emit("node.pdf.preview.close")}}),li&&n.jsx(qu,{node:li,onSave:Rc,onClose:Mc}),ta&&n.jsx(Ju,{settings:t.settings,onPatchSettings:Se,onClose:ac}),ii&&n.jsx(uh,{board:t,rootNode:ii,onClose:Wc,onStatus:ti,onRemove:ai,onSubmitFollowUp:Vc,onApproval:Hc,onAddArtifact:Yc}),gn&&n.jsx(Zu,{board:t,selectedNode:J??null,selectedCount:y.length,input:x,viewport:O,viewportSize:xe,localBridgeState:fe,syncStatus:tt,syncMessage:uo,buildPrompt:bu,navigate:e,onClose:oc}),!Ns&&n.jsxs("div",{className:"global-input-shell","data-active-submits":P,"data-submit-state":P>0?"active":"idle",children:[n.jsx("textarea",{ref:kn,"data-testid":"global-input-textarea",value:x,placeholder:(J==null?void 0:J.kind)==="ai-task"?"Run selected AI Task...":"Talk with AI...",onChange:a=>v(a.target.value),onKeyDown:a=>{a.repeat||a.nativeEvent.isComposing||a.keyCode===229||(a.ctrlKey||a.metaKey)&&a.key==="Enter"&&(a.preventDefault(),ni())}}),n.jsxs("div",{className:"input-controls",children:[n.jsx("button",{type:"button",title:"Settings","data-testid":"ai-settings-open",onClick:tc,children:n.jsx(rr,{size:16})}),n.jsx("button",{type:"button",title:"Prompt Debugger","data-testid":"prompt-debug-open",onClick:nc,children:n.jsx(Em,{size:16})}),["Text","Image","Video"].map(a=>n.jsx("button",{className:t.settings.inputMode===a?"is-active":"",type:"button","data-testid":`global-input-mode-${a.toLowerCase()}`,onClick:()=>Gr("inputMode",a),children:a},a)),t.settings.inputMode==="Text"&&n.jsxs(n.Fragment,{children:[n.jsxs("label",{className:"input-select-wrap input-select-wrap--text-model",title:An?`${Ui(An.provider)}: ${An.id}`:cs,children:[n.jsx("span",{className:"input-select-provider",children:An?Ui(An.provider):"Custom"}),n.jsx("select",{"aria-label":"Text model","data-testid":"text-model-select",value:cs,onChange:a=>Zd(a.target.value),children:Jd.map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Vn,{size:15})]}),n.jsxs("button",{className:"select-button",type:"button",title:"Effort",onClick:()=>Gr("effort",t.settings.effort==="Normal"?"Deep":"Normal"),children:[t.settings.effort,n.jsx(Vn,{size:15})]})]}),Vt&&At&&n.jsxs(n.Fragment,{children:[n.jsxs("label",{className:"input-select-wrap input-select-wrap--model",title:`${At.model.provider}: ${At.model.id}`,children:[n.jsx("span",{className:"input-select-provider",children:At.model.provider}),n.jsx("select",{"aria-label":`${Vt} model`,value:At.model.id,onChange:a=>Qd(Vt,a.target.value),children:Oi(Vt).map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Vn,{size:15})]}),n.jsxs("label",{className:"input-select-wrap input-select-wrap--aspect",title:At.aspect.note,children:[n.jsx("span",{className:`aspect-select__swatch ${Qu(At.aspect.id)}`}),n.jsx("select",{"aria-label":`${Vt} aspect ratio`,value:At.aspect.id,onChange:a=>ec(Vt,a.target.value),children:At.aspectOptions.map(a=>n.jsx("option",{value:a.id,children:a.label},a.id))}),n.jsx(Vn,{size:15})]})]}),n.jsx("span",{className:"global-submit-count","aria-live":"polite",children:P}),n.jsx("button",{className:"send-button",type:"button",title:"Submit","data-testid":"global-input-submit",disabled:!xu,onClick:ni,children:n.jsx(tl,{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:[jd.map(a=>n.jsx("button",{type:"button",title:`Use ${a} grid`,"aria-label":`Use ${a} grid`,"aria-pressed":jo===a,className:jo===a?"is-active":"","data-testid":`canvas-grid-mode-${a}`,onClick:()=>Ic(a),children:a==="dot"?n.jsx(Pm,{size:15}):a==="line"?n.jsx(_m,{size:15}):a==="particles"?n.jsx(Zi,{size:15}):n.jsx(Ds,{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":gi,className:gi?"is-active":"","data-testid":"canvas-grid-snap-toggle",onClick:Nc,children:n.jsx(Dm,{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:ms,children:n.jsx(Bm,{size:15})}),(()=>{const a=!!Do(hi[Gt]);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(Gt):Mn(Gt)},children:n.jsx("span",{"aria-hidden":"true",children:"N"})})})(),Hs.map(a=>{const s=!!Do(hi[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):Mn(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:jc,children:n.jsx(Om,{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":t.settings.wheelMode,className:t.settings.wheelMode?"is-active":"","data-testid":"canvas-wheel-mode-toggle","data-wheel-mode":t.settings.wheelMode?"mouse":"trackpad",onClick:()=>ps("button"),children:n.jsx($m,{size:17})}),n.jsx("button",{type:"button",title:`Cursor direction ${t.settings.cursorDirection==="down"?"down":"right"}`,"aria-label":"Toggle cursor direction","aria-pressed":t.settings.cursorDirection==="down",className:t.settings.cursorDirection==="down"?"is-active":"","data-testid":"canvas-cursor-direction-toggle","data-cursor-direction":t.settings.cursorDirection==="down"?"down":"right",onClick:()=>gs("button"),children:n.jsx(Fm,{size:17})}),n.jsx("button",{type:"button",title:"Reset fixture",onClick:du,children:n.jsx(Um,{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:()=>{Rn("button")},children:n.jsx(Xi,{size:17})})]}),t.settings.minimapEnabled&&et&&n.jsxs("section",{className:"canvas-minimap floating-panel","aria-label":"Canvas minimap","data-testid":"canvas-minimap",children:[n.jsxs("div",{className:"canvas-minimap__head",children:[n.jsx("span",{children:"Minimap"}),n.jsx("small",{children:t.nodes.length})]}),n.jsxs("button",{type:"button",className:"canvas-minimap__stage","aria-label":"Navigate canvas minimap","data-testid":"canvas-minimap-stage",onPointerDown:yu,children:[et.nodes.map(a=>n.jsx("span",{className:`canvas-minimap__node canvas-minimap__node--${a.kind} ${y.includes(a.id)?"is-selected":""}`,style:{left:`${a.x}px`,top:`${a.y}px`,width:`${a.width}px`,height:`${a.height}px`}},a.id)),n.jsx("span",{className:"canvas-minimap__viewport",style:{left:`${et.viewport.x}px`,top:`${et.viewport.y}px`,width:`${et.viewport.width}px`,height:`${et.viewport.height}px`}})]})]}),n.jsxs("div",{className:"canvas-status",children:[t.nodes.length," nodes / ",ha.length," rendered / ",t.edges.length," edges / ",Math.round(O.scale*100),"%",((Ri=t.source)==null?void 0:Ri.kind)==="localBridge"&&n.jsxs(n.Fragment,{children:[" ","/ LocalBridge",t.source.partialImport?" partial":"",t.source.truncated?` ${t.source.renderedNodeCount}/${t.source.originalNodeCount}`:""]})]})]})}function Wl(e){switch(e){case"checking":return"Checking";case"connected":return"Connected";case"blocked":return"Access gated";case"unavailable":return"Unavailable";default:return"Idle"}}export{Zf as MindCanvas};