@mindexec/cli 0.2.377 → 0.2.379
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.
- package/package.json +1 -1
- package/wwwroot/assets/{AdminDashboardPage-D2GhogSX.js → AdminDashboardPage-CptFPV__.js} +1 -1
- package/wwwroot/assets/AppSidebar-6q9MElKP.js +2 -0
- package/wwwroot/assets/AuthPages-BtLsYX_F.js +1 -0
- package/wwwroot/assets/{CodePage-D0CxncU0.js → CodePage-CtcukAw7.js} +1 -1
- package/wwwroot/assets/{CompanyCorePage-C8AAF9MJ.js → CompanyCorePage-CVw3X796.js} +1 -1
- package/wwwroot/assets/{ExecutionModePage-DM4G1xkT.js → ExecutionModePage-BxZvRmyD.js} +5 -5
- package/wwwroot/assets/{LaunchLeadCapture-Btre_FaA.js → LaunchLeadCapture-Bx9LM0IX.js} +1 -1
- package/wwwroot/assets/{MarketingHome-BJI2zEYK.js → MarketingHome-BsyerRpe.js} +1 -1
- package/wwwroot/assets/MindCanvas-wBB9fMPS.js +49 -0
- package/wwwroot/assets/{PlanMasterPage-axrFePG0.js → PlanMasterPage-juSUgUYZ.js} +4 -4
- package/wwwroot/assets/PricingPage-7NW6HJxV.js +1 -0
- package/wwwroot/assets/{ToolPages-CTVDo24Z.js → ToolPages-n6d8tLbT.js} +9 -9
- package/wwwroot/assets/{YouTubeSearchPage-BWA45eoM.js → YouTubeSearchPage-52qOcKbo.js} +2 -2
- package/wwwroot/assets/canvas-runtime-D3amtMwe.js +44 -0
- package/wwwroot/assets/{index-BK3iJDs0.js → index-De6zm3_M.js} +2 -2
- package/wwwroot/assets/{storage-BPqBi6qs.js → storage-RP5Dyxmq.js} +1 -1
- package/wwwroot/assets/supabaseAuthAdapter-CuJuASQT.js +44 -0
- package/wwwroot/assets/{vendor-icons-678PAT8P.js → vendor-icons-DE3gIReG.js} +22 -32
- package/wwwroot/index.html +2 -2
- package/wwwroot/assets/AppSidebar-W4jPDFbW.js +0 -2
- package/wwwroot/assets/AuthPages-Dt2IexfF.js +0 -1
- package/wwwroot/assets/MindCanvas-7sJDBOtx.js +0 -48
- package/wwwroot/assets/PricingPage-DPETQvcF.js +0 -1
- package/wwwroot/assets/canvas-runtime-CddXXjp9.js +0 -44
- package/wwwroot/assets/supabaseAuthAdapter-bSjZe3In.js +0 -44
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
var Pm=Object.defineProperty;var Em=(e,t,o)=>t in e?Pm(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var Al=(e,t,o)=>Em(e,typeof t!="symbol"?t+"":t,o);import{j as n,r as g,a as _m}from"./vendor-react-BXzpOyCS.js";import{l as Dm,a as vt,s as qt,b as Bm,d as Om,r as Fm,c as $m,e as zm,i as Ml}from"./storage-BPqBi6qs.js";import{r as di,g as Ls,w as Um,a as ur,d as Tl,b as Hm,t as ci,p as Jd,v as Wm,R as Vm,c as Ym,u as Xm,e as Gm,f as Rl,s as pt,i as yn,l as mr,h as io,j as es,k as lo,m as co,n as ts,o as ua,q as Ll,x as xn,y as Km,z as Pl,A as qm,B as Jm,C as Zm,D as Qm,E as ep,F as Zd,G as tp,H as ap,I as ga,J as Qd,T as np,K as op,L as El,M as uo,N as ec,O as Or,P as Fr,Q as tc,S as as,U as gs,V as bo,W as _l,X as Y,Y as pr,Z as yo,_ as sp,$ as rp,a0 as ip,a1 as Dl,a2 as gr,a3 as lp,a4 as dp,a5 as cp,a6 as up,a7 as mp,a8 as pp,a9 as gp,aa as Bl,ab as hp,ac as fp,ad as bp,ae as yp}from"./canvas-runtime-CddXXjp9.js";import{e as xp,d as Cp}from"./vendor-msgpack-BE8aAsr3.js";import{R as f}from"./app-runtime-xD2Z3NdN.js";import{g as hr,A as Ol,a as hs}from"./index-BK3iJDs0.js";import{r as ac}from"./productionAdapterConfig-C5jfk6oG.js";import{getSupabaseBrowserClient as Ps}from"./supabaseAuthAdapter-bSjZe3In.js";import{c as Sp,a as wp,r as Fl}from"./toolHandoff-D5e5f7t5.js";import{a as $l,s as kp}from"./executionModeSettings-NJqurj-o.js";import{a as zl,p as vp}from"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";import{A as Jt,W as jp,c as nc,D as Ip,E as ui,R as In,J as mi,X as jt,N as $r,O as Np,Q as Nn,w as An,I as Mn,V as Tn,l as vs,F as It,Y as Ap,Z as zr,_ as js,$ as Rn,a0 as oc,a1 as Mp,a2 as sc,a3 as Tp,i as So,a4 as rc,a5 as Rp,a6 as Ul,a7 as Lp,a8 as ha,a9 as Hl,T as Is,aa as Wl,ab as vo,ac as Pp,ad as fs,ae as ic,af as Ur,o as lc,ag as Ep,ah as _p,f as Dp,ai as Bp,h as xo,x as Op,aj as Fp,ak as $p,al as Vl,am as Yl,an as Xl,g as Gl,ao as ns,H as mo,ap as os,s as fr,aq as Kl,ar as zp,as as br,at as ql,au as ss,av as yr,aw as Jl,ax as Zl,ay as Ql,az as Up,aA as Hp,aB as Wp,aC as Vp,n as Yp,aD as Xp,aE as Gp,aF as Kp,aG as qp,aH as Jp,aI as Zp,aJ as Qp,aK as eg}from"./vendor-icons-678PAT8P.js";const tg=1200,Ya="LocalBridgeOriginalNodeId";function Nt(e){return typeof e=="object"&&e!==null}function ma(e,t){const o=Number(e);return Number.isFinite(o)?o:t}function q(e){return typeof e=="string"?e:""}function dc(){return typeof window<"u"?{width:window.innerWidth||1280,height:window.innerHeight||720}:{width:1280,height:720}}function Hr(e,t,o){const r=Number(e),d=Number(t),u=Number(o);if(!Number.isFinite(r)||!Number.isFinite(d)||!Number.isFinite(u)||u<=0)return null;const p=1400/u,b=dc();return{x:b.width/2-r*p,y:b.height/2-d*p,scale:p}}function ag(e){return Nt(e)?Hr(e.x??e.X,e.y??e.Y,e.z??e.Z):null}function ng(e){if(!Nt(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=dc();return{x:(d.width/2-t)/r,y:(d.height/2-o)/r,z:1400/r}}function og(e){const t=String(e||"").trim();if(t)try{const o=JSON.parse(t);if(!Nt(o))return;const r={};for(const[d,u]of Object.entries(o)){const p=ag(u);p&&(r[d]=p)}return Object.keys(r).length>0?r:void 0}catch{return}}function sg(e){if(!e||Object.keys(e).length===0)return null;const t={};for(const[o,r]of Object.entries(e)){const d=ng(r);d&&(t[o]=d)}return Object.keys(t).length>0?JSON.stringify(t):null}function Ns(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 pi(e){return Nt(e)?"ContentType"in e||"Prompt"in e||"Response"in e||"PositionX"in e||"PositionY"in e||"SourceFilePath"in e||"ImageStack"in e:!1}function ed(e){const t=q(e).trim();if(!t)return null;try{return JSON.parse(t)}catch{return null}}function Wr(e){if(Array.isArray(e))return e;if(!Nt(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=ed(o);if(r)return Wr(r)}for(const t of["ContentJson","contentJson","content_json"])if(t in e){const o=ed(e[t]);if(o)return Wr(o)}return pi(e)?[e]:[]}function gi(e){return Nt(e)?"BoardId"in e&&("Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e):!1}function cc(e){if(!Nt(e))return 0;for(const t of["Deletes","deletes"]){const o=e[t];if(Array.isArray(o))return o.length}return 0}function As(e){return Wr(e).filter(pi)}function uc(e){return As(e).length}function rg(e,t){var u;const o=[...As(e)];if(!gi(t))return o;const r=new Set;for(const p of["Deletes","deletes"]){const b=t[p];if(Array.isArray(b))for(const m of b){const y=q(m).trim();y&&r.add(y)}}if(r.size>0)for(let p=o.length-1;p>=0;p-=1){const b=q((u=o[p])==null?void 0:u.Id).trim();b&&r.has(b)&&o.splice(p,1)}const d=new Map;o.forEach((p,b)=>{const m=q(p.Id).trim();m&&d.set(m,b)});for(const p of As(t)){const b=q(p.Id).trim(),m=b?d.get(b):void 0;if(m!==void 0){o[m]=p;continue}b&&d.set(b,o.length),o.push(p)}return o}function mc(e){const t=Array.isArray(e)?e.filter(Nt):[];return new Map(t.filter(o=>o.NodeId).map(o=>[String(o.NodeId),o]))}async function Vr(e,t){for(const o of e)try{const r=await di(o,t);return{payload:JSON.parse(r.content),path:o}}catch{}return null}async function ig(e,t){const o=`.mindexec/boards/${e}.msgpack`,r=`boards/${e}.msgpack`;for(const b of[o,r])try{const m=await Hm(b,t);return{payload:Cp(m),format:b===o?"msgpack":"legacy-msgpack",path:b}}catch{}const d=`.mindexec/boards/${e}.json`,u=`boards/${e}.json`,p=await Vr([d,u],t);if(p)return{payload:p.payload,format:p.path===d?"json":"legacy-json",path:p.path};throw new Error(`LocalBridge board file not found: ${o}, ${r}, ${d}, ${u}`)}function Yr(e){const t=q(e.Id).trim()||q(e.BoardId).trim();return t?{Id:t,Title:q(e.Title)||null,Description:q(e.Description)||null,ThumbnailUrl:q(e.ThumbnailUrl)||null,CreatedAt:q(e.CreatedAt)||null,UpdatedAt:q(e.UpdatedAt)||null,LastCameraX:Number.isFinite(Number(e.LastCameraX))?Number(e.LastCameraX):null,LastCameraY:Number.isFinite(Number(e.LastCameraY))?Number(e.LastCameraY):null,LastCameraZ:Number.isFinite(Number(e.LastCameraZ))?Number(e.LastCameraZ):null,LastCursorX:Number.isFinite(Number(e.LastCursorX))?Number(e.LastCursorX):null,LastCursorY:Number.isFinite(Number(e.LastCursorY))?Number(e.LastCursorY):null,CameraBookmarks:q(e.CameraBookmarks)||null}:null}function td(e){return!Nt(e)||pi(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 hi(e){if(Array.isArray(e))return e.filter(td).map(t=>Yr(t)).filter(t=>!!t);if(td(e)){const t=Yr(e);return t?[t]:[]}return[]}function lg(e){const t=e.toLowerCase();return dg(t)?"remote-control":cg(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 dg(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 cg(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 ug(e,t){const o=e.Metadata||{},r=o.ThumbnailUrl,d=o.OriginalUrl,u=o.OriginalPath;return ci(q(r)||q(d)||q(u)||q(e.Response),t)}function mg(e,t,o){const r=e.ImageStack,d=Array.isArray(r==null?void 0:r.Variants)?r.Variants:[];if(d.length===0)return;const u=d.map((b,m)=>{const y=q(b.AssetId).trim(),k=ci(y,o)||t;return k?{variantId:q(b.VariantId)||`variant-${q(e.Id)||m}`,imageUrl:k,assetId:y||void 0,caption:q(b.Caption)||void 0,sourceNodeId:q(e.Id)||void 0,createdAtUtc:q(b.CreatedAtUtc)||void 0}:null}).filter(b=>!!b);if(u.length===0)return;const p=q(r==null?void 0:r.ActiveVariantId);return{activeVariantId:u.some(b=>b.variantId===p)?p:u[0].variantId,variants:u,kind:q(r==null?void 0:r.Kind)||"versions",title:q(r==null?void 0:r.Title)||void 0,updatedAtUtc:q(r==null?void 0:r.UpdatedAtUtc)||void 0}}function pg(e,t){return!e||e.variants.length===0?t:(e.variants.find(r=>r.variantId===e.activeVariantId)??e.variants[0]).imageUrl||t}function gg(e,t,o){var p,b,m,y,k,L;const r=(b=(p=e.imageStack)==null?void 0:p.variants)!=null&&b.length?e.imageStack.variants:e.imageUrl?[{variantId:`${e.id}:image`,imageUrl:e.imageUrl,assetId:jo(e.imageUrl,t)||e.imageUrl,title:e.title,sourceNodeId:e.id,createdAtUtc:o}]:[];if(r.length===0)return null;const d=r.map(v=>({VariantId:v.variantId||Es(),AssetId:v.assetId||jo(v.imageUrl,t)||v.imageUrl,CreatedAtUtc:v.createdAtUtc||o,Caption:v.caption||v.title||null}));return{ActiveVariantId:(m=e.imageStack)!=null&&m.activeVariantId&&d.some(v=>{var D;return v.VariantId===((D=e.imageStack)==null?void 0:D.activeVariantId)})?e.imageStack.activeVariantId:d[0].VariantId||"",Variants:d,Kind:((y=e.imageStack)==null?void 0:y.kind)||(d.length>1?"pile":"versions"),Title:((k=e.imageStack)==null?void 0:k.title)||e.title||null,UpdatedAtUtc:((L=e.imageStack)==null?void 0:L.updatedAtUtc)||o}}function hg(e,t){const o=e.Metadata||{};return ci(q(o.OriginalUrl)||q(o.OriginalPath)||q(o.SourceFilePath)||q(e.SourceFilePath)||q(e.Response),t)}function fg(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 bg(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 jo(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 yg(e,t){const o=new Map;for(const r of e){const d=t.get(r.from),u=t.get(r.to);!d||!u||o.has(u)||o.set(u,d)}return o}function xg(e){const t=new Set;return e.map(o=>{var m,y;const r=((m=o.metadata)==null?void 0:m[Ya])||"",d=Ns(r)?r:Ns(o.id)?o.id:"",u=!!(d&&t.has(d)),p=d&&!u?d:Es(),b=((y=o.metadata)==null?void 0:y[Ya])!==p;return t.add(p),{node:b?{...o,metadata:{...o.metadata??{},[Ya]:p}}:o,originalId:p,assignedNodeId:!d||u,metadataStamped:b,duplicateOriginalId:u}})}function Cg(e,t,o,r,d){var y,k,L;const u=bg(e.kind),p=u==="image"||u==="mask"?jo(e.imageUrl,d):"",b=["video","pdf","file","directory","embed"].includes(u)?jo(e.assetUrl||e.sourceFilePath||e.body,d):"",m={...e.metadata??{},[Ya]:t,ReactNodeId:e.id,ReactKind:e.kind};if(e.kind==="remote-monitor"&&(m.RemoteHub??(m.RemoteHub="Gated"),m.RemoteRoute??(m.RemoteRoute="Gated"),m.RemoteConnected??(m.RemoteConnected="0"),m.RemoteTotal??(m.RemoteTotal="30"),m.RemotePage??(m.RemotePage="1/1"),m.AdapterState??(m.AdapterState="adapter-gated")),e.kind==="remote-control"&&(m.SemanticType??(m.SemanticType="RemoteFleetDevice"),m.RemoteFleetSchemaVersion??(m.RemoteFleetSchemaVersion="remote-fleet-device@1"),m.RemoteRoute??(m.RemoteRoute="Gated"),m.RemoteInput??(m.RemoteInput="Off"),m.AdapterState??(m.AdapterState="adapter-gated")),e.kind==="mask"&&(m.ImageRouterMask??(m.ImageRouterMask="true"),m.SemanticType??(m.SemanticType="ImageEditMask")),e.kind==="embed"){const v=e.assetUrl||e.body||e.sourceFilePath||"";m.source??(m.source="embed"),m.renderMode??(m.renderMode="card"),m.provider??(m.provider="web"),m.sourceUrl??(m.sourceUrl=v),m.url??(m.url=v),m.AdapterState??(m.AdapterState="local-reference")}return e.kind==="video"&&(m.assetKind??(m.assetKind="video"),m.videoMode??(m.videoMode=(y=e.assetUrl)!=null&&y.startsWith(d)?"local_bridge":"local_reference"),m.AdapterState??(m.AdapterState=((k=e.metadata)==null?void 0:k.PromptOnly)==="true"?"adapter-gated":"local-reference")),(L=e.tags)!=null&&L.length&&(m.ReactTags=JSON.stringify(e.tags)),p&&(m.OriginalUrl=p,m.ThumbnailUrl=p),b&&(m.OriginalPath=b,m.SourceFilePath=b),{Id:t,ContentType:u,Prompt:e.title||u,Response:u==="image"||u==="mask"?p||e.body||null:u==="remote-monitor"?e.body||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":u==="remote-control"?e.body||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":b||e.body||null,PositionX:e.x,PositionY:e.y,PositionZ:0,IsLoading:e.status==="running",Width:Math.round(e.width),Height:Math.round(e.height),Children:[],ParentId:o||null,IsExpanded:!!e.isExpanded,OriginalHeight:Math.round(e.originalHeight??0),IsAiEnabled:e.aiEnabled!==!1,IsChunkedText:!!e.isChunkedText,TotalLineCount:Math.round(e.totalLineCount??0),SourceFilePath:e.sourceFilePath||b||null,ScrollOffset:e.scrollOffset??0,MaxScroll:e.maxScroll??0,CreatedAt:r,UpdatedAt:r,IsWordWrap:e.wordWrap??e.kind!=="code",Metadata:m,ImageStack:u==="image"?gg(e,d,r):null}}function Sg(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 wg(e,t,o){const r=q(e.ContentType)||"note",d=q(e.Prompt).trim(),u=q(e.Response).trim(),p=fg(e.Metadata),b=q(e.Id).trim();b&&(p[Ya]??(p[Ya]=b));const y=["true","1","yes"].includes(String(p.ImageRouterMask||p.IsMask||"").trim().toLowerCase())?"mask":lg(r),k=y==="memo"&&["mindcanvasagent","agentcommand"].includes(String(p.SemanticType||p.semanticType||"").trim().toLowerCase()),L=y==="memo"&&["codenote","code-note"].includes(String(p.SemanticType||p.semanticType||"").trim().toLowerCase()),v=q(e.SourceFilePath)||p.OriginalPath||p.SourceFilePath||"",D=y==="video"||y==="pdf"||y==="file"||y==="directory"||y==="embed"?hg(e,o):void 0,B=d||e.SourceFilePath||r||"LocalBridge node",$=y==="image"?u||d||"Image asset":y==="mask"?u||d||"Image mask asset":y==="remote-monitor"?u||d||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":y==="remote-control"?u||d||v||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":y==="pdf"||y==="file"||y==="directory"||y==="embed"?u||v||d||r:u||d||v||"",F=k?500:L?400:y==="remote-monitor"?860:y==="remote-control"||y==="template-launcher"?560:y==="csv-table"?720:y==="embed"?460:y==="video"?420:y==="markdown"?380:y==="text"||y==="image"||y==="mask"?360:320,H=k||L?300:y==="remote-monitor"?640:y==="remote-control"?390:y==="template-launcher"?620:y==="csv-table"?420:y==="embed"?260:y==="video"?236:y==="markdown"?240:y==="text"?210:y==="image"||y==="mask"?260:180,W=y==="image"||y==="mask"?ug(e,o):void 0,ie=y==="image"?mg(e,W,o):void 0,se=!!(e.IsChunkedText||p.IsChunkedText==="true"),Ne=ma(e.TotalLineCount??p.TotalLineCount,0),pe=ma(e.ScrollOffset,0),ze=ma(e.MaxScroll,0);return{id:String(e.Id||crypto.randomUUID()),kind:y,title:y==="remote-monitor"?d||"Multi Desktop Monitor":y==="remote-control"?d||p.RemoteFleetDeviceName||"Remote Device":y==="template-launcher"?d||"Template Launcher":B,body:$,x:ma((t==null?void 0:t.PositionX)??e.PositionX,0),y:ma((t==null?void 0:t.PositionY)??e.PositionY,0),width:Math.max(160,Math.min(900,ma((t==null?void 0:t.Width)??e.Width,F))),height:Math.max(120,Math.min(900,ma((t==null?void 0:t.Height)??e.Height,H))),status:e.IsLoading?"running":y==="ai-task"?"idle":void 0,imageUrl:pg(ie,W),imageStack:ie,assetUrl:D,sourceFilePath:v||void 0,isChunkedText:se||void 0,totalLineCount:se?Ne:void 0,scrollOffset:se?pe:void 0,maxScroll:se?ze:void 0,isExpanded:typeof e.IsExpanded=="boolean"?e.IsExpanded:void 0,originalHeight:ma(e.OriginalHeight,0)||void 0,tags:k?["Agent Command",p.AgentCommandRequestedRole||"Researcher",p.AgentCommandStatus||"Draft"]:L?["Code Note",p.CodeNoteStatus||"Draft",p.CodeNoteSyncState||"Unlinked"]:y==="remote-monitor"?["Remote","Monitor","LocalBridge"]:y==="remote-control"?["Remote","Control","LocalBridge"]:["LocalBridge",r],metadata:y==="remote-monitor"?kg(p):y==="remote-control"?vg(p):p,role:e.IsAiEnabled?"ai-enabled":void 0,aiEnabled:typeof e.IsAiEnabled=="boolean"?e.IsAiEnabled:void 0,wordWrap:typeof e.IsWordWrap=="boolean"?e.IsWordWrap:void 0}}function kg(e){return{RemoteHub:"Gated",RemoteRoute:"Gated",RemoteConnected:"0",RemoteTotal:"30",RemotePage:"1/1",AdapterState:"adapter-gated",...e}}function vg(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 jg(e,t){const o=[];for(const r of e){const d=String(r.Id||""),u=String(r.ParentId||"");!d||!u||!t.has(d)||!t.has(u)||o.push({id:`edge-local-${u}-${d}`,from:u,to:d,kind:"context"})}return o}async function Ig(e=Ls()){const t=await di(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return(Array.isArray(o)?o.filter(Nt):[]).map(u=>Yr(u)).filter(u=>!!u).sort((u,p)=>String(p.UpdatedAt||"").localeCompare(String(u.UpdatedAt||"")))}async function Ng(e){try{const t=await di(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return Array.isArray(o)?o.filter(Nt):[]}catch{return[]}}async function Ag(e,t,o,r=Ls(),d=null){var He,Tt,ge,We,at,nt;if((He=e.source)!=null&&He.partialImport)throw new Error("This board was imported from a partial original payload. Export is blocked to avoid data loss.");if((Tt=e.source)!=null&&Tt.truncated)throw new Error("This board was truncated during import. Export is blocked to avoid data loss.");const u=(ge=e.source)!=null&&ge.exportedByReact?String(e.source.boardId||""):"",p=Ns(u),b=Ns(u)?u:Es(),m=new Date().toISOString(),y=xg(e.nodes),k=y.map(z=>z.node),L=new Map(y.map(z=>[z.node.id,z.originalId])),v=yg(e.edges,L),D=y.map(({node:z,originalId:gt})=>Cg(z,gt,v.get(gt),m,r)),B=y.map(({node:z,originalId:gt})=>Sg(z,gt)),$=t.scale>0?t.scale:1,F=(window.innerWidth/2-t.x)/$,H=(window.innerHeight/2-t.y)/$,W=1400/$,ie=Number((d==null?void 0:d.x)??((We=e.viewState)==null?void 0:We.cursorX)??0),se=Number((d==null?void 0:d.y)??((at=e.viewState)==null?void 0:at.cursorY)??0),Ne=(nt=e.nodes.find(z=>z.kind==="image"&&z.imageUrl))==null?void 0:nt.imageUrl,pe={Id:b,UserId:"00000000-0000-0000-0000-000000000000",Title:e.name||"Untitled Board",Description:"Exported from MindExec React",ThumbnailUrl:jo(Ne,r)||"",IsPublic:!1,CreatedAt:m,SyncedCloudBoardId:null,LastSyncedAt:null,LastCloudCopyStatus:null,UpdatedAt:m,LastCameraX:F,LastCameraY:H,LastCameraZ:W,LastCursorX:Number.isFinite(ie)?ie:0,LastCursorY:Number.isFinite(se)?se:0,CameraBookmarks:sg(e.settings.cameraBookmarks)},ze=`.mindexec/boards/${b}.msgpack`,At=`.mindexec/boards/${b}.json`,Ue=`.mindexec/boards/${b}.layout.json`,G=`.mindexec/boards/${b}.delta.json`,V=`boards/${b}.delta.json`,de=await Ng(r),te=[pe,...de.filter(z=>q(z.Id)!==b)],Mt=xp(D);await Um(ze,Mt,o,r),await ur(At,JSON.stringify(D,null,2),o,r),await ur(Ue,JSON.stringify(B,null,2),o,r),await ur(".mindexec/boards/_metadata.json",JSON.stringify(te,null,2),o,r);const U=await Promise.allSettled([Tl(G,o,r),Tl(V,o,r)]);return f.emit("localBridge.board.exported",{boardId:b,nodes:D.length,edges:e.edges.length,snapshotFormat:"msgpack",msgpackBytes:Mt.byteLength,jsonMirror:!0,deltaCleared:U.some(z=>z.status==="fulfilled"&&z.value.success),reusedBoardId:p,stableNodeIds:y.length,assignedNodeIds:y.filter(z=>z.assignedNodeId).length,metadataStampedNodeIds:y.filter(z=>z.metadataStamped).length,duplicateOriginalNodeIds:y.filter(z=>z.duplicateOriginalId).length}),{metadata:pe,source:{kind:"localBridge",boardId:b,loadedAt:m,originalNodeCount:D.length,renderedNodeCount:D.length,truncated:!1,exportedByReact:!0,snapshotFormat:"msgpack"},nodes:k,msgpackPath:ze,boardPath:At,layoutPath:Ue}}async function Mg(e,t,o=Ls()){const r=await ig(e.Id,o);let d=new Map;const u=await Vr([`.mindexec/boards/${e.Id}.layout.json`,`boards/${e.Id}.layout.json`],o);u&&(d=mc(u.payload));let p=null;const b=await Vr([`.mindexec/boards/${e.Id}.delta.json`,`boards/${e.Id}.delta.json`],o);b&&(p=b.payload);const m=p?hi(p)[0]:null,y=!!(p&&gi(p)),k=y?rg(r.payload,p):r.payload;return pc(k,t,{boardId:(m==null?void 0:m.Id)??e.Id,title:(m==null?void 0:m.Title)||e.Title||"LocalBridge Board",updatedAt:(m==null?void 0:m.UpdatedAt)??e.UpdatedAt,layoutPayload:Array.from(d.values()),baseUrl:o,cameraBookmarks:(m==null?void 0:m.CameraBookmarks)??e.CameraBookmarks,lastCursorX:(m==null?void 0:m.LastCursorX)??e.LastCursorX,lastCursorY:(m==null?void 0:m.LastCursorY)??e.LastCursorY,deltaApplied:y,deltaUpserts:p?uc(p):0,deltaDeletes:p?cc(p):0,snapshotFormat:r.format})}function pc(e,t,o={}){const r=As(e),d=gi(e),u=o.deltaUpserts??(d?r.length:0),p=o.deltaDeletes??(d?cc(e):0),b=o.layoutPayload?mc(o.layoutPayload):new Map,m=r.slice(0,tg),y=m.map(se=>wg(se,b.get(String(se.Id||"")),o.baseUrl??Ls())),k=new Set(y.map(se=>se.id)),L=jg(m,k),v=r.length>y.length,D=d,B=o.deltaApplied===!0,$=o.boardId||Es(),F=o.updatedAt||new Date().toISOString(),H=Number(o.lastCursorX),W=Number(o.lastCursorY),ie=Number.isFinite(H)&&Number.isFinite(W);return f.emit("localBridge.board.loaded",{boardId:$,nodes:y.length,originalNodes:r.length,truncated:v,snapshotFormat:o.snapshotFormat,partialImport:D,deltaImport:d,deltaApplied:B,deltaUpserts:u,deltaDeletes:p}),{id:`localBridge:${$}`,name:o.title||"LocalBridge Board",nodes:y,edges:L,settings:{...t,cameraBookmarks:og(o.cameraBookmarks)},viewState:ie?{cursorX:H,cursorY:W}:void 0,updatedAt:F,source:{kind:"localBridge",boardId:$,loadedAt:new Date().toISOString(),snapshotFormat:o.snapshotFormat,originalNodeCount:r.length,renderedNodeCount:y.length,truncated:v,partialImport:D,deltaImport:d,deltaApplied:B}}}const fi=["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(","),Tg=/^[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 Rg(e){if(Tg.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 gc(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 Lg(e){return JSON.stringify({id:e.id,name:e.name,nodes:e.nodes,edges:e.edges,settings:e.settings,viewState:e.viewState,updatedAt:e.updatedAt})}function Xr(e,t=new Date().toISOString()){return e&&!Number.isNaN(Date.parse(e))?e:t}function bi(e){return(e==null?void 0:e.trim().slice(0,90))||"Untitled Board"}function hc(e){const t=gc(e.content_json),o=Xr(e.updated_at??t.updatedAt);return{id:e.id,name:bi(e.title??t.name),updatedAt:o,createdAt:Xr(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 Pg(e,t){var k,L;const o=gc(e.content_json),r=Xr(e.updated_at??o.updatedAt),d=Number((k=o.viewState)==null?void 0:k.cursorX),u=Number((L=o.viewState)==null?void 0:L.cursorY),p=Number(e.last_cursor_x),b=Number(e.last_cursor_y),m=Number.isFinite(d)&&Number.isFinite(u),y=Number.isFinite(p)&&Number.isFinite(b);return{id:e.id,name:bi(e.title??o.name),nodes:Array.isArray(o.nodes)?o.nodes:[],edges:Array.isArray(o.edges)?o.edges:[],settings:o.settings??t,viewState:m?{cursorX:d,cursorY:u}:y?{cursorX:p,cursorY:b}:void 0,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 yi(e){var m;const t=ac(e);if(!t.cloudBoards.canAttempt)return f.emit("projectStorage.cloud.provider.skipped",{mode:t.cloudBoards.mode}),{userId:null,config:t,reason:t.cloudBoards.mode};const o=Ps(e);if(!o)return f.emit("projectStorage.cloud.provider.skipped",{mode:"config-missing"}),{userId:null,config:t,reason:"missing-client"};const{data:r,error:d}=await o.auth.getSession();if(d||!r.session)return f.emit("projectStorage.cloud.provider.sessionMissing",{message:(d==null?void 0:d.message)??"missing-session"}),{userId:null,config:t,reason:"missing-session"};const{data:u,error:p}=await o.auth.getUser(),b=((m=u.user)==null?void 0:m.id)??null;return p||!b?(f.emit("projectStorage.cloud.provider.sessionMissing",{message:(p==null?void 0:p.message)??"missing-user"}),{userId:null,config:t,reason:"missing-user"}):{userId:b,config:t,reason:"provider-ready"}}async function Eg(e){const t=await yi(e);if(!t.userId)return[];const o=Ps(e);if(!o)return[];f.emit("projectStorage.cloud.list.requested");const{data:r,error:d}=await o.from("boards").select(fi).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 u=(r??[]).map(hc);return f.emit("projectStorage.cloud.list.loaded",{count:u.length}),u}async function _g(e,t,o){const r=await yi(e);if(!r.userId)return null;const d=Ps(e);if(!d)return null;f.emit("projectStorage.cloud.load.requested",{boardId:t});const{data:u,error:p}=await d.from("boards").select(fi).eq("user_id",r.userId).eq("id",t).maybeSingle();if(p)throw f.emit("projectStorage.cloud.provider.failed",{operation:"load",boardId:t,message:p.message}),p;if(!u)return null;const b=Pg(u,o);return f.emit("projectStorage.cloud.load.loaded",{boardId:t,nodes:b.nodes.length,edges:b.edges.length}),b}async function Dg(e,t,o,r=null){var ie,se;const d=await yi(e);if(!d.userId)return null;const u=Ps(e);if(!u)return null;const p=Rg(t.id),b=new Date().toISOString(),m=bi(t.name),y=Number((r==null?void 0:r.x)??((ie=t.viewState)==null?void 0:ie.cursorX)??0),k=Number((r==null?void 0:r.y)??((se=t.viewState)==null?void 0:se.cursorY)??0),L={...t.viewState??{},cursorX:Number.isFinite(y)?y:0,cursorY:Number.isFinite(k)?k:0},v={...t,id:p,name:m,viewState:L,updatedAt:b},D={p_board_id:p,p_title:m,p_description:null,p_thumbnail_url:null,p_is_public:!1,p_created_at:null,p_updated_at:b,p_last_camera_x:o.x,p_last_camera_y:o.y,p_last_camera_z:o.scale,p_last_cursor_x:L.cursorX,p_last_cursor_y:L.cursorY,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:B}=await u.rpc("save_board_snapshot",D);if(B)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-rpc",boardId:p,message:B.message}),B;const $={content_json:Lg(v),updated_at:b},{data:F,error:H}=await u.from("boards").update($).eq("id",p).eq("user_id",d.userId).select(fi).maybeSingle();if(H)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-json-mirror",boardId:p,message:H.message}),H;const W=F?hc(F):{id:p,name:m,updatedAt:b,createdAt:b,nodeCount:t.nodes.length,edgeCount:t.edges.length,sourceKind:"cloud"};return f.emit("projectStorage.cloud.save.saved",{boardId:W.id,nodes:W.nodeCount,edges:W.edgeCount}),W}function Gr(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 Bg(e,t={},o=Gr(e),r){if(e.length===0)return{after:new Map,boundsAfter:o};const d=eh(t.mode),u=th(t.order),p=ah(t.anchor),b=nh(t.sizeMode),m=Math.max(0,t.gapX??24),y=Math.max(0,t.gapY??24),k=Math.max(1,t.maxColumns??12),L=Kr(t.quantile??.75,.05,.95),v=e.map(Og),D=Kg(v,u),B=D.map(pe=>pe.width),$=D.map(pe=>pe.height),F=Math.max(1,t.cellWidth??nd(B,L)),H=Math.max(1,t.cellHeight??nd($,L)),W=Math.max(1,t.targetWidth??F),ie=Math.max(1,t.targetHeight??H),se=Gg(p,o);if(d==="grid"){Wg(D,b,W,ie,F,H);const pe=ad(t.columns,k,o.maxX-o.minX,F,m);$g(D,se.x,se.y,pe,F,H,m,y)}else if(d==="masonry"){Vg(D,b==="preserve"?"uniformWidth":b,W);const ze=ad(t.columns,k,o.maxX-o.minX,W,m);zg(D,se.x,se.y,ze,W,m,y)}else d==="stripHorizontal"?(Yg(D,b==="preserve"?"uniformHeight":b,ie),Ug(D,se.x,se.y,m,ie)):(Xg(D,b==="preserve"?"uniformWidth":b,W),Hg(D,se.x,se.y,y,W));let Ne=new Map(D.map(pe=>[pe.id,Fg(pe)]));return p==="selectionBoundsCenter"&&(Ne=Jg(o,Ne)),t.snapToGrid&&(Ne=Zg(Ne,Math.max(1,t.gridSize??8))),{after:Ne,boundsAfter:Gr(Array.from(Ne.values()))}}function Og(e){return{...e,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function Fg(e){return{x:e.x,y:e.y,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function $g(e,t,o,r,d,u,p,b){e.forEach((m,y)=>{const k=Math.floor(y/r),L=y%r,v=t+L*(d+p),D=o+k*(u+b);m.x=v+(d-m.width)/2,m.y=D+(u-m.height)/2})}function zg(e,t,o,r,d,u,p){const b=Array.from({length:r},()=>0);for(const m of e){const y=Qg(b),k=t+y*(d+u);m.x=k+(d-m.width)/2,m.y=o+b[y],b[y]+=m.height+p}}function Ug(e,t,o,r,d){let u=t;for(const p of e)p.x=u,p.y=o+(d-p.height)/2,u+=p.width+r}function Hg(e,t,o,r,d){let u=o;for(const p of e)p.x=t+(d-p.width)/2,p.y=u,u+=p.height+r}function Wg(e,t,o,r,d,u){if(t==="fitCellDownOnly")for(const p of e){const b=Math.min(1,d/p.width,u/p.height);p.width*=b,p.height*=b}else t==="uniformWidth"?xi(e,o):t==="uniformHeight"&&fc(e,r)}function Vg(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}xi(e,o)}function Yg(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}fc(e,o)}function Xg(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}xi(e,o)}function xi(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 fc(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 ad(e,t,o,r,d){if(typeof e=="number"&&e>0)return Math.round(Kr(e,1,t));if(o<=1||r<=1)return 1;const u=Math.floor((o+d)/(r+d));return!Number.isFinite(u)||u<1?1:Math.round(Kr(u,1,t))}function Gg(e,t,o){return{x:t.minX,y:t.minY}}function Kg(e,t){return t==="selectionOrder"?[...e].sort((o,r)=>o.selectionIndex-r.selectionIndex):qg(e)}function qg(e){const t=[...e].sort((m,y)=>m.y-y.y||m.x-y.x);if(t.length<=2)return t;const o=t.map(m=>m.height).sort((m,y)=>m-y),r=o[Math.floor(o.length/2)]??1,d=Math.max(16,r*.35),u=[];let p=[],b=Number.NaN;for(const m of t)p.length===0?(p=[m],b=m.y):Math.abs(m.y-b)<=d?(p.push(m),b=(b*(p.length-1)+m.y)/p.length):(u.push([...p].sort((y,k)=>y.x-k.x)),p=[m],b=m.y);return p.length>0&&u.push([...p].sort((m,y)=>m.x-y.x)),u.flat()}function Jg(e,t){if(t.size===0)return t;const o=Gr(Array.from(t.values())),r=e.minX+(e.maxX-e.minX)/2,d=e.minY+(e.maxY-e.minY)/2,u=o.minX+(o.maxX-o.minX)/2,p=o.minY+(o.maxY-o.minY)/2,b=r-u,m=d-p;return new Map(Array.from(t.entries()).map(([y,k])=>[y,{...k,x:k.x+b,y:k.y+m}]))}function Zg(e,t){return new Map(Array.from(e.entries()).map(([o,r])=>[o,{...r,x:od(r.x,t),y:od(r.y,t)}]))}function nd(e,t){if(e.length===0)return 1;const o=[...e].sort((b,m)=>b-m),r=(o.length-1)*t,d=Math.floor(r),u=Math.min(o.length-1,d+1),p=r-d;return o[d]*(1-p)+o[u]*p}function Qg(e){let t=0;for(let o=1;o<e.length;o+=1)e[o]<e[t]&&(t=o);return t}function od(e,t){return Math.round(e/t)*t}function eh(e){const t=_s(e);return t==="grid"?"grid":t==="striphorizontal"||t==="striph"?"stripHorizontal":t==="stripvertical"||t==="stripv"?"stripVertical":"masonry"}function th(e){return _s(e)==="selectionorder"?"selectionOrder":"spatialReading"}function ah(e){const t=_s(e);return t==="selectionboundscenter"?"selectionBoundsCenter":t==="viewporttopleft"?"viewportTopLeft":"selectionBoundsTopLeft"}function nh(e){const t=_s(e);return t==="fitcelldownonly"?"fitCellDownOnly":t==="uniformwidth"?"uniformWidth":t==="uniformheight"?"uniformHeight":"preserve"}function _s(e){return String(e??"").trim().toLowerCase().replace(/[^a-z0-9]/g,"")}function Kr(e,t,o){return Math.min(o,Math.max(t,e))}const bc=300,yc=50*1024*1024,oh=800;function we(e){return typeof e=="string"?e.length*2:0}function sh(e){let t=256;if(t+=we(e.id),t+=we(e.kind),t+=we(e.title),t+=we(e.body),t+=we(e.result),t+=we(e.imageUrl),t+=we(e.assetUrl),t+=we(e.sourceFilePath),t+=(e.tags??[]).reduce((o,r)=>o+we(r),0),e.metadata)for(const[o,r]of Object.entries(e.metadata))t+=we(o)+we(r);return e.imageStack&&(t+=128+we(e.imageStack.title),t+=e.imageStack.variants.reduce((o,r)=>o+96+we(r.variantId)+we(r.imageUrl)+we(r.assetId)+we(r.title)+we(r.caption),0)),t}function rh(e){let t=1024+we(e.id)+we(e.name)+we(e.updatedAt);return t+=e.nodes.reduce((o,r)=>o+sh(r),0),t+=e.edges.length*128,t+=Object.entries(e.settings).reduce((o,[r,d])=>o+we(r)+we(typeof d=="string"?d:JSON.stringify(d)),0),t}function xc(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:rh(e)}}function sd(e,t={}){const o=t.maxEntries??bc,r=t.maxBytes??yc;let d=e.slice(Math.max(0,e.length-o)),u=d.reduce((p,b)=>p+b.estimatedBytes,0);for(;d.length>1&&u>r;){const[p,...b]=d;u-=(p==null?void 0:p.estimatedBytes)??0,d=b}return d}function $a(e,t,o={}){const r=xc(t,o),d=o.mergeWindowMs??oh,u=e.slice(),p=u.at(-1);return p&&r.mergeKey&&p.mergeKey===r.mergeKey&&r.timestampMs-p.timestampMs<d?(u[u.length-1]={...p,description:r.description,timestampMs:r.timestampMs,estimatedBytes:Math.max(p.estimatedBytes,r.estimatedBytes)},sd(u,o)):(u.push(r),sd(u,o))}function ih(e,t,o={}){const r=xc(t,o),d=o.maxEntries??bc,u=o.maxBytes??yc;let p=[r,...e].slice(0,d),b=p.reduce((m,y)=>m+y.estimatedBytes,0);for(;p.length>1&&b>u;){const m=p.at(-1);b-=(m==null?void 0:m.estimatedBytes)??0,p=p.slice(0,-1)}return p}function Ds(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 po(e,t){return!!Ds(e,t)}function Cc(e){if(!e||!e.trim())return!1;const t=e.trim();return/^(https?:|blob:|data:|file:)/i.test(t)}function Sc(e){if(!e)return"";const t=Ds(e,"OriginalPath");if(t)return t;const o=String(e.body||"").trim();return Cc(o)?"":o}function wc(e){return e?Sc(e)||String(e.sourceFilePath||"").trim()||String(e.assetUrl||"").trim()||String(e.imageUrl||"").trim()||String(e.body||"").trim():""}function kc(e){return Ds(e,"ThumbnailUrl","thumbnailUrl")}function lh(e){if(!e||e.kind!=="image")return!1;if(po(e,"ImageGenerationProvider")||po(e,"GeneratedImageSourceWidth")||po(e,"GeneratedImageSourceHeight")||po(e,"CodexImageQuality")||po(e,"ImageRouterRevisedPrompt"))return!0;const t=Ds(e,"RequestedMediaOperation");return["text2image","image2image","inpaint"].includes(t.toLowerCase())}function Ci(e){if(!e)return"";if(e.kind==="image"||e.kind==="mask"){const t=lh(e)?Sc(e):"",o=kc(e),r=String(e.body||"").trim();return t||o||String(e.imageUrl||"").trim()||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()||(Cc(r)?r:"")}return wc(e)||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()}function vc(e){if(!e)return"";const t=wc(e)||e.title||e.kind;return String(t||"").replace(/\\/g,"/").replace(/\/+$/,"").split("/").filter(Boolean).pop()||e.title||e.kind}const dh=2048,ch=16e3,xr=1024,Cr=64,uh=2048,Sr=3,mh=16,ph=256,gh=new Set(["text","note","memo","markdown","code","directory"]),hh=/[\p{L}\p{M}\p{N}]{2,}/gu,rd=4,fh=8,id=1.35;function bh(e){return gh.has(String(e||"").trim().toLowerCase())}function yh(e){const t=e.map(Ch),o=new Map,r=new Map,d=new Map,u=new Map;for(const p of t){o.set(p.id,p);for(const b of p.tokens)wr(r,b,p.id);for(const b of p.prefixes)wr(d,b,p.id);for(const b of p.ngrams)wr(u,b,p.id)}return{documents:t,documentById:o,tokenIndex:r,prefixIndex:d,ngramIndex:u}}function xh(e,t,o={}){const r=Math.max(1,Math.trunc(Number(o.limit||30))),d=kn(t),u=ld(e,0,0,o.viewport,0);if(!d)return{hits:[],profile:u};const p=Array.from(jc(d)),b=Array.from(Ic(p)),m=Ac(d),y=Array.from(Nc(m)),k=new Map;for(const $ of p)kr(e.tokenIndex,$,k,8);for(const $ of b)kr(e.prefixIndex,$,k,$.length<=3?4:2);for(const $ of y)kr(e.ngramIndex,$,k,1.15);const L=vh(e,k,r),v=jh(o.allowedContentTypes),D=[];for(const $ of L){const F=e.documentById.get($);if(!F||v&&!v.has(F.contentType))continue;const H=wh(F,d,p,y);if(H<=0)continue;const W=kh(F,o.viewport??null);D.push({nodeId:F.id,score:H+W,textScore:H,viewportBoost:W})}D.sort(($,F)=>F.score-$.score||$.nodeId.localeCompare(F.nodeId));const B=D.slice(0,r);return{hits:B,profile:ld(e,L.length,B.length,o.viewport,B.filter($=>$.viewportBoost>0).length)}}function kn(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 u of o){if(/\s/u.test(u)){d||(r+=" ",d=!0);continue}Ih(u)||(r+=u,d=!1)}return r.trim()}function jc(e){return new Set(e.match(hh)??[])}function Ic(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 Nc(e){const t=new Set;if(!e.trim())return t;if(e.length<=Sr)return t.add(e),t;for(let o=0;o<=e.length-Sr;o+=1)t.add(e.slice(o,o+Sr));return t}function Ch(e){const t=String(e.kind??"").trim().toLowerCase(),o=Wa(e.prompt??e.title,dh),r=bh(t)?Wa(e.response??e.body,ch):"",d=Sh(e.metadata,e.tags,e.metadataText),u=Wa(e.sourceFilePath||e.assetUrl,uh),p=kn(o),b=kn(r),m=kn(d),y=kn(u),k=kn(t),L=[p,m,y,b,k].filter(Boolean).join(" "),v=jc(L);return{id:String(e.id),contentType:t,normalizedPrompt:p,normalizedResponse:b,normalizedMetadata:m,normalizedSourcePath:y,normalizedContentType:k,tokens:v,prefixes:Ic(v),ngrams:Nc(Ac(L)),x:Number.isFinite(e.x)?e.x:0,y:Number.isFinite(e.y)?e.y:0,width:Number.isFinite(e.width)?e.width:1,height:Number.isFinite(e.height)?e.height:1}}function Sh(e,t,o){const r=[];let d=0;if(e)for(const[u,p]of Object.entries(e)){if(d>=Cr)break;!String(u??"").trim()&&!String(p??"").trim()||(r.push(Wa(u,128)),String(p??"").trim()&&r.push(Wa(p,xr)),d+=1)}return d<Cr&&(t!=null&&t.length)&&(r.push("tags",Wa(t.join(" "),xr)),d+=1),d<Cr&&(o!=null&&o.trim())&&r.push("metadata",Wa(o,xr)),r.join(" ")}function wh(e,t,o,r){let d=0;e.normalizedPrompt===t?d+=120:go(e.normalizedPrompt,t)&&(d+=54),go(e.normalizedMetadata,t)&&(d+=26),go(e.normalizedSourcePath,t)&&(d+=18),go(e.normalizedResponse,t)&&(d+=14),go(e.normalizedContentType,t)&&(d+=8);for(const u of o)e.tokens.has(u)&&(d+=7),e.normalizedPrompt.startsWith(u)&&(d+=10);for(const u of r)e.ngrams.has(u)&&(d+=.85);return d}function kh(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),u=Math.abs(r-t.centerY)/Math.max(1,t.halfHeight),p=Math.sqrt(d*d+u*u);if(p<=1)return rd+(1-p)*fh;if(p<=id){const b=1-(p-1)/Math.max(.001,id-1);return Math.max(0,b)*(rd*.75)}return 0}function vh(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*mh,ph)).map(([r])=>r)}function jh(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 ld(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 wr(e,t,o){const r=e.get(t);if(r){r.add(o);return}e.set(t,new Set([o]))}function kr(e,t,o,r){const d=e.get(t);if(d)for(const u of d)o.set(u,(o.get(u)??0)+r)}function Ac(e){let t="";for(const o of e)/\s/u.test(o)||(t+=o);return t}function Wa(e,t){const o=String(e??"");return o.length<=t?o:o.slice(0,t)}function go(e,t){return!!(e&&t&&e.includes(t))}function Ih(e){const t=e.codePointAt(0)??0;return t<=31||t>=127&&t<=159}const Nh=2147483647,Ah="LocalBridge access is enabled, but the bridge is not reachable. Restart LocalBridge, allow Chrome local-network access, then reload MindCanvas.",Mh="Local storage is unavailable in the hosted app until browser local storage or LocalBridge access is available.",Th="Local storage is unavailable. Check the browser-local storage state or LocalBridge connection.",Rh="Cloud projects are unavailable until Supabase and Cloudflare R2 are configured.",Lh="Login is required before cloud projects can be used.",Ph="Cloud projects are unavailable.";function Eh(e){return e.bridgeProviderConfigured||e.browserProviderConfigured||e.embeddedProviderConfigured}function qr(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 _h(e){return qr(e,!1).isAvailable?"local":Si(e)?"cloud":qr(e,!0).isAvailable?"local":e.cloudConfigured?"cloud":"local"}function Si(e){return e.cloudConfigured&&e.cloudSessionAvailable}function Dh(e,t){return t.providerKind==="bridge"&&!t.bridgeReachable?Ah:e.hostedWebApp?Mh:Th}function Bh(e){return e.cloudConfigured?Si(e)?Ph:Lh:Rh}function Oh(e){var k,L,v;const t=Si(e),o=qr(e,!0),r=Eh(e),d=e.cloudConfigured,u=o.isAvailable,p=t;let b=e.storedMode??_h(e);b==="cloud"&&(!d||!p&&u)?b=u?"local":"cloud":b==="local"&&(!r&&d||!u&&p)&&(b="cloud");const m=e.cloudAccess,y=((k=m==null?void 0:m.denialReason)==null?void 0:k.trim())||void 0;return{currentMode:b,showLocalTab:r,showCloudTab:d,isLocalAvailable:o.isAvailable,isCloudAvailable:t,requiresCloudSignIn:e.cloudConfigured&&!t,canUseLocalProjects:u,canBrowseLocalWorkspace:o.canBrowseWorkspace,localProviderKind:o.providerKind,canUseCloudProjects:p,canSyncLocalToCloud:u&&p,cloudPlanKey:((L=m==null?void 0:m.planKey)==null?void 0:L.trim())||"free",cloudEntitlementStatus:((v=m==null?void 0:m.entitlementStatus)==null?void 0:v.trim())||(m?"active":"inactive"),currentCloudBoardCount:(m==null?void 0:m.currentBoardCount)??0,cloudBoardLimit:(m==null?void 0:m.cloudBoardLimit)??Nh,lockedCloudBoardCount:(m==null?void 0:m.lockedBoardCount)??0,canCreateCloudBoards:(m==null?void 0:m.canCreateBoard)??p,canUseManagedAi:(m==null?void 0:m.canUseManagedAi)??!1,canGenerateImage:(m==null?void 0:m.canGenerateImage)??!1,canUseContextPack:(m==null?void 0:m.canUseContextPack)??!1,cloudLimitMessage:y,localStatusMessage:o.isAvailable?void 0:Dh(e,o),cloudStatusMessage:p?void 0:Bh(e)}}function Fh(){const e=new Error("Queued operation was cancelled before it started.");return e.name="AbortError",e}class $h{constructor(){Al(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 u;return u=(async()=>{try{try{await d}catch{}if(r!=null&&r.aborted)throw Fh();return await o(r)}finally{this.tails.get(t)===u&&this.tails.delete(t)}})(),this.tails.set(t,u),u}clear(t){if(typeof t>"u"){this.tails.clear();return}this.tails.delete(t)}}const Jr="mindexec-local-mode-warning-dismissed-v1";function zh(){try{return window.localStorage.getItem(Jr)==="true"}catch{return!1}}function Mc(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 Uh(e,t,o){var d,u,p,b,m;if(e!=="connected")return t||Mc(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,(u=o==null?void 0:o.exec)!=null&&u.reasoningEffort?`reasoning ${o.exec.reasoningEffort}`:null,(p=o==null?void 0:o.exec)!=null&&p.serviceTier?`tier ${o.exec.serviceTier}`:null,(b=o==null?void 0:o.exec)!=null&&b.preferredProviderKind?`codex ${o.exec.preferredProviderKind}`:null,(m=o==null?void 0:o.project)!=null&&m.isOpen?"project open":null].filter(Boolean);return r.length>0?`LocalBridge connected. ${r.join(" / ")}`:"LocalBridge connected."}function Hh({state:e,message:t,status:o,hostedBridgeAccessEnabled:r,onRefresh:d,onEnableHostedBridge:u}){const p=g.useMemo(()=>e==="checking"?n.jsx(Jt,{size:14,className:"spin-icon"}):e==="connected"?n.jsx(jp,{size:14}):e==="blocked"?n.jsx(nc,{size:14}):e==="unavailable"?n.jsx(Ip,{size:14}):n.jsx(ui,{size:14}),[e]);return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--${e}`,title:Uh(e,t,o),"data-testid":"bridge-status-pill","data-bridge-state":e,"data-bridge-access":r?"enabled":"gated",children:[n.jsx("span",{className:"runtime-status-pill__icon","aria-hidden":"true",children:p}),n.jsx("span",{children:Mc(e,o)}),e==="blocked"&&!r&&n.jsx("button",{type:"button",className:"runtime-status-pill__action",onClick:u,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(In,{size:13})})]})}function Wh({status:e,message:t}){const r={ready:{icon:n.jsx($r,{size:14}),label:"Saved locally",title:"Board state is saved in this browser."},syncing:{icon:n.jsx(Jt,{size:14,className:"spin-icon"}),label:"Saving",title:"Saving board state to this browser."},error:{icon:n.jsx(mi,{size:14}),label:"Save error",title:"Board state could not be saved locally."},offline:{icon:n.jsx(ui,{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 Vh({visible:e}){const[t,o]=g.useState(zh);if(!e||t)return null;const r=()=>{o(!0);try{window.localStorage.setItem(Jr,"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":Jr,children:[n.jsx("div",{className:"runtime-local-warning__icon","aria-hidden":"true",children:n.jsx(mi,{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(jt,{size:14})})]})}function Yh({bridgeState:e,bridgeMessage:t,bridgeStatus:o,syncStatus:r,syncMessage:d,hostedBridgeAccessEnabled:u,onRefreshBridge:p,onEnableHostedBridge:b,showLocalModeWarning:m=!0}){return n.jsxs("aside",{className:"runtime-status-cluster","aria-label":"Runtime status","data-testid":"runtime-status-cluster","data-local-mode-visible":m?"true":"false",children:[n.jsxs("div",{className:"runtime-status-row",children:[n.jsx(Hh,{state:e,message:t,status:o,hostedBridgeAccessEnabled:u,onRefresh:p,onEnableHostedBridge:b}),n.jsx(Wh,{status:r,message:d})]}),n.jsx(Vh,{visible:m})]})}const Xh=/^data:image\//i;function Gh(e){const t=String(e||"").trim();if(!t)return{src:null,reason:"empty",urlKind:"empty"};const o=t.toLowerCase();return Xh.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 vr({src:e,alt:t="",className:o="",testId:r="secure-image",traceId:d,kind:u="image",title:p}){const b=g.useMemo(()=>Gh(e),[e]),[m,y]=g.useState(b.src?"loading":"blocked");g.useEffect(()=>{const D=b.src?"loading":"blocked";y(D),b.src||f.emit("secureImage.blocked",{id:d,kind:u,reason:b.reason,urlKind:b.urlKind})},[u,b.reason,b.src,b.urlKind,d]);const k=()=>{y("loaded"),f.emit("secureImage.loaded",{id:d,kind:u,urlKind:b.urlKind})},L=()=>{y("error"),f.emit("secureImage.error",{id:d,kind:u,urlKind:b.urlKind})},v=m==="blocked"?`Image blocked: ${b.reason||"unsupported source"}`:"Image failed to load";return n.jsxs("div",{className:`secure-image secure-image--${m} ${o}`.trim(),"data-testid":r,"data-secure-image-state":m,"data-secure-image-kind":u,title:m==="loaded"?p:v,children:[b.src&&n.jsx("img",{src:b.src,alt:t,loading:"lazy",decoding:"async",draggable:!1,onLoad:k,onError:L}),m==="loading"&&n.jsx("span",{className:"secure-image__loading","aria-hidden":"true",children:n.jsx("span",{})}),(m==="blocked"||m==="error")&&n.jsx("span",{className:"secure-image__fallback",role:"img","aria-label":v,children:m==="blocked"?n.jsx(Np,{size:18}):n.jsx(mi,{size:18})})]})}const Kh={note:js,text:It,"ai-task":Nn,image:Mn,mask:Mn,video:Tn,embed:Rn,code:An,markdown:It,"csv-table":It,memo:js,pdf:It,file:zr,directory:Ap,"template-launcher":It,"remote-monitor":vs,"remote-control":vs},jr=[{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."}],dd=500,qh=48,Jh=new Set(["mindcanvasagent","agentcommand"]),Zh=new Set(["codenote","code-note"]),Qh=["multidesktopmonitor","remotehubmonitor","remotefleetmonitor","smartviewmonitor"],ef=["remotedevice","remotefleetdevice","remotecontrol"],tf=["top","right","bottom","left"];function af(e){const t=Ln(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=Ln(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=Ln(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-monitor"||t==="remotefleetmonitor"||o==="fleet-monitor"||r==="remote-fleet@1"||Rc(e,["RemoteFleetViewMode","RemoteFleetHubStatus","RemoteFleetDevicesJson","RemoteFleetDeviceCount","RemoteFleetConnectedDeviceCount","RemoteFleetProjectionMode","RemoteFleetCanvasPagination","RemoteHub","RemoteRoute","RemotePage","RemoteVisibleBudget"])||Tc(e,Qh,["remote","monitor"])}function nf(e){const t=Ln(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=Ln(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=Ln(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-control"||t==="remotefleetdevice"||o==="fleet-device"||r==="remote-fleet-device@1"||Rc(e,["RemoteFleetDeviceId","RemoteFleetDeviceName","RemoteFleetDevicePlatform","RemoteFleetDeviceConnected","RemoteFleetDeviceCanControl","RemoteFleetSourceMonitorNodeId"])||Tc(e,ef,["remote","control"])}function Tc(e,t,o){const r=(e.tags??[]).map(b=>b.trim().toLowerCase()).filter(Boolean),d=o.every(b=>r.includes(b)),p=[e.title,e.body,e.sourceFilePath,e.assetUrl,...r].join(" ").toLowerCase().replace(/[^a-z0-9]+/g,"");return d||t.some(b=>p.includes(b))}function Ln(e,...t){const o=e.metadata??{};for(const d of t){const u=o[d];if(u!=null)return String(u)}const r=new Set(t.map(d=>d.toLowerCase()));for(const[d,u]of Object.entries(o))if(r.has(d.toLowerCase())&&u!==void 0&&u!==null)return String(u);return""}function Rc(e,t){const o=e.metadata??{},r=new Set(t.map(d=>d.toLowerCase()));return Object.entries(o).some(([d,u])=>r.has(d.toLowerCase())&&u!==void 0&&u!==null&&String(u).trim()!=="")}const Zr=[{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"}],of=g.memo(function({node:t,selected:o,pulsing:r,connectionDraft:d,onSelect:u,onDragStart:p,onResizeStart:b,onPatch:m,onDelete:y,onDuplicate:k,onRun:L,onPin:v,onConnectorDragStart:D,onOpenResult:B,onToggleAiReference:$,onCopyNode:F,onCopyEmbedReference:H,onFitNodeHeight:W,onToggleNodeExpanded:ie,onToggleWordWrap:se,onStageCompany:Ne,onOpenCompanyGraph:pe,onSyncCompanyGoal:ze,onRefreshCompany:At,onSetCompanyStatus:Ue,onRemoveCompany:G,onOpenAsset:V,onOpenDirectorySettings:de,onScanDirectory:te,onCreateRemoteControl:Mt,onGenerateTemplateCard:U}){var Po,lt,Yt,Ta,sn,ra,rn,ne,Ge,ln,Yn,j,K,oe,Eo,Fe,Xt,Gt,dn,cn,Xn,Gn,un,Kn,Ra,qn,mn,La,ia,_e,Pe,Pa,Jn,Ea,pn,gn;const He=String(((Po=t.metadata)==null?void 0:Po.AutomationNodeKind)||((lt=t.metadata)==null?void 0:lt.AutomationTemplateKey)||((Yt=t.metadata)==null?void 0:Yt.AutomationInferredKind)||"").trim().toLowerCase(),Tt=String(((Ta=t.metadata)==null?void 0:Ta.SemanticType)||((sn=t.metadata)==null?void 0:sn.semanticType)||"").trim().toLowerCase(),ge=t.kind==="memo"&&Jh.has(Tt),We=t.kind==="memo"&&Zh.has(Tt),at=String(((ra=t.metadata)==null?void 0:ra.AgentCommandStatus)||"Draft"),nt=String(((rn=t.metadata)==null?void 0:rn.AgentCommandMode)||"Task"),z=String(((ne=t.metadata)==null?void 0:ne.AgentCommandRequestedRole)||"Researcher"),gt=String(((Ge=t.metadata)==null?void 0:Ge.CodeNoteStatus)||"Draft"),ba=String(((ln=t.metadata)==null?void 0:ln.CodeNoteSyncState)||"Unlinked"),Xa=String(((Yn=t.metadata)==null?void 0:Yn.CodeNoteKind)||"Feature"),ya=ge?Nn:We?An:He==="image-generate"?Mn:He==="video-generate"?Tn:Kh[t.kind],Dn=d&&d.from!==t.id,xa=t.kind==="ai-task",Ga=t.kind==="pdf"||t.kind==="file"||t.kind==="directory",Me=af(t),Ka=nf(t),Ve=Me||Ka,Ca=Me?"monitor":Ka?"control":"",ve=xa?"result":"context",fe=((j=d==null?void 0:d.target)==null?void 0:j.id)===t.id?d.target.side:null,Bs=(d==null?void 0:d.from)===t.id,Ae=t.kind==="template-launcher"||String(((K=t.metadata)==null?void 0:K.semanticType)||((oe=t.metadata)==null?void 0:oe.SemanticType)||"").toLowerCase()==="templatelauncher",De=t.kind==="video",Te=t.kind==="embed",Rt=t.kind==="mask",be=t.kind==="memo",ot=t.kind==="markdown",st=t.kind==="csv-table",Be=be?gf(t):null,me=g.useRef(null),Bn=De?Lc(t):"",Ze=De?ff(t):"",Oe=Te?bf(t):"",Lt=Te?yf(t):"",Io=Te?xf(t,Oe):"",Ee=Te?Cf(t):"",Re=(((Eo=t.imageStack)==null?void 0:Eo.variants)??[]).filter(x=>!!x.imageUrl),ht=Re.find(x=>{var _;return x.variantId===((_=t.imageStack)==null?void 0:_.activeVariantId)})??Re[0]??null,$t=t.kind==="image"||Rt?(ht==null?void 0:ht.imageUrl)||Ci(t):"",Sa=ht?Re.findIndex(x=>x.variantId===ht.variantId):-1,qa=!$t&&!Ga&&!Ve&&!Ae&&!De&&!Te,No=qa&&!be,Qt=t.isExpanded===!1&&Number(t.originalHeight??0)>t.height+1,On=!Ve&&!["image","mask","video","embed","pdf","file","directory","template-launcher","remote-monitor","remote-control"].includes(t.kind),rt=t.aiEnabled!==!1,Ye=hf(t),Qe=!!(t.isChunkedText||((Fe=t.metadata)==null?void 0:Fe.IsChunkedText)==="true"),wa=Number(t.totalLineCount??((Xt=t.metadata)==null?void 0:Xt.TotalLineCount)??0),Ao=t.sourceFilePath||((Gt=t.metadata)==null?void 0:Gt.FileName)||t.title,ye=Qe?n.jsxs("div",{className:"node-chunked-text-state","data-testid":"node-chunked-text-state",title:Ao,children:[n.jsx(It,{size:12}),n.jsx("strong",{children:"Chunked text"}),Number.isFinite(wa)&&wa>0&&n.jsxs("span",{children:[wa.toLocaleString()," lines"]})]}):null,ea=t.kind==="directory"?(dn=t.metadata)==null?void 0:dn.Include:null,Ja=t.kind==="directory"?(cn=t.metadata)==null?void 0:cn.Exclude:null,Fn=t.kind==="directory"?(Xn=t.metadata)==null?void 0:Xn.DirectoryFileCount:null,Le=t.kind==="directory"?(Gn=t.metadata)==null?void 0:Gn.DirectoryDirCount:null,Pt=t.kind==="directory"?(un=t.metadata)==null?void 0:un.DirectoryLastScanUtc:null,[Za,Qa]=g.useState(!1),[en,Xe]=g.useState(null),[Os,$n]=g.useState(((Kn=t.metadata)==null?void 0:Kn.CompanyExecutionMode)||"Auto"),[ka,tn]=g.useState(((Ra=t.metadata)==null?void 0:Ra.CompanySubAgents)!=="false"),[ta,va]=g.useState(!1),[Et,an]=g.useState(null),ja=g.useMemo(()=>st?df(t.body,Et):null,[Et,st,t.body]),le=g.useMemo(()=>Ae?Jd(t.body):null,[Ae,t.body]),ft=(le==null?void 0:le.options.find(x=>x.id===le.selectedOptionId))??(le==null?void 0:le.options[0])??null,aa=Wm(le),zt=jr.find(x=>x.key===Os)||jr[0],Ut=String(((qn=t.metadata)==null?void 0:qn.CompanyStatus)||(t.companyMode?"Staged":"")).trim(),Ht=Ut.toLowerCase(),na=Ht==="paused",bt=Ht==="archived",Fs=x=>{x.stopPropagation();const _=x.currentTarget.getBoundingClientRect();Xe(rf(_)),Qa(re=>!re)},$s=x=>{x.stopPropagation(),Ne(t.id,{executionMode:zt.key,enableSubAgents:ka}),Qa(!1)},Mo=x=>{x.stopPropagation(),pe(t.id)},Ia=(x,_)=>{_.stopPropagation();const re=Re.find(xt=>xt.variantId===x);!re||!t.imageStack||re.variantId===t.imageStack.activeVariantId||(f.emit("node.imageStack.variant",{nodeId:t.id,variantId:re.variantId,variantCount:Re.length}),m(t.id,{imageUrl:re.imageUrl,imageStack:{...t.imageStack,activeVariantId:re.variantId,variants:Re,updatedAtUtc:new Date().toISOString()},metadata:{...t.metadata??{},ImageStackActiveVariantId:re.variantId}}))},zs=(x,_)=>{if(_.stopPropagation(),!!be){if((Be==null?void 0:Be.key)===x){va(!1);return}f.emit("node.memoColor.changed",{id:t.id,colorKey:x}),m(t.id,{metadata:{...t.metadata??{},memoColor:x,memoColorIsCustom:"true"}}),va(!1)}},zn=x=>{var Ke,St;if(x.stopPropagation(),!ge)return;const _=(t.body||t.title||"Agent command objective").trim(),re=["Clarify the objective and constraints.","Collect linked canvas context or code notes.","Draft an execution plan before external adapter use."],xt=["canvas-context","agent-command-planning","adapter-gated-execution"],dt=["Canvas.ListAgentCommands","Canvas.UpdateAgentCommand","Canvas.PlanAgentCommand","Canvas.SetAgentCommandState"],Ct=["MindCanvasAgent",nt,z],$e=["Local React plan staged for this Agent Command.",`Role: ${z}`,`Mode: ${nt}`,`Objective: ${_.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:nt,requestedRole:z,adapterState:((Ke=t.metadata)==null?void 0:Ke.AdapterState)??"adapter-gated"}),m(t.id,{tags:["Agent Command",z,"Planned"],metadata:{...t.metadata??{},AgentCommandStatus:"Planned",AgentCommandPlannerSummary:$e,AgentCommandPlanSteps:JSON.stringify(re),AgentCommandPlannedSkills:JSON.stringify(xt),AgentCommandPlannedTools:JSON.stringify(dt),AgentCommandPlannedConcepts:JSON.stringify(Ct),AgentCommandLastExplorationPhase:"planned-local",AdapterState:((St=t.metadata)==null?void 0:St.AdapterState)??"adapter-gated"}})},Na=x=>{var dt,Ct;if(x.stopPropagation(),!ge)return;const _=new Date().toISOString(),re=[`Agent Command: ${t.title||"Agent"}`,`Status: Completed locally at ${_}`,"","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
|
-
`),xt=[`${_} Local React execution staged.`,`${_} Adapter gated; no external tools invoked.`];f.emit("mindcanvas.agentCommand.executed.local",{id:t.id,mode:nt,requestedRole:z,adapterState:((dt=t.metadata)==null?void 0:dt.AdapterState)??"adapter-gated"}),m(t.id,{status:"done",result:re,tags:["Agent Command",z,"Completed"],metadata:{...t.metadata??{},AgentCommandStatus:"Completed",AgentCommandLastExecutedAtUtc:_,AgentCommandConsoleLogs:JSON.stringify(xt),AgentCommandResultLinks:JSON.stringify([]),AdapterState:((Ct=t.metadata)==null?void 0:Ct.AdapterState)??"adapter-gated"}})},Aa=(x,_,re,xt)=>{var Ct,$e,Ke;if(x.stopPropagation(),!We)return;const dt=_==="Implemented"?JSON.stringify([`local-code-note://${t.id}/implementation-handoff.md`]):((Ct=t.metadata)==null?void 0:Ct.CodeNoteOutputArtifacts)||"[]";f.emit("mindcanvas.codeNote.state",{id:t.id,status:_,syncState:re,reason:xt,adapterState:(($e=t.metadata)==null?void 0:$e.AdapterState)??"local-canvas-only"}),m(t.id,{tags:["Code Note",_,re],metadata:{...t.metadata??{},CodeNoteStatus:_,CodeNoteSyncState:re,CodeNoteOutputArtifacts:dt,..._==="Implemented"||_==="Reviewed"?{CodeNoteLastAppliedAtUtc:new Date().toISOString()}:{},AdapterState:((Ke=t.metadata)==null?void 0:Ke.AdapterState)??"local-canvas-only"}})},Wt=()=>{tn(x=>!x)},To=async x=>{if(x.stopPropagation(),!Ze||!me.current){f.emit("node.video.unavailable",{id:t.id,reason:Ze?"element-missing":"source-missing"});return}try{await me.current.play(),f.emit("node.video.play",{id:t.id,sourceKind:ud(Ze)})}catch(_){f.emit("node.video.unavailable",{id:t.id,reason:_ instanceof Error?_.message:String(_)})}},Ma=x=>{if(x.stopPropagation(),!Ze||!me.current){f.emit("node.video.unavailable",{id:t.id,reason:Ze?"element-missing":"source-missing"});return}me.current.pause(),f.emit("node.video.pause",{id:t.id,sourceKind:ud(Ze)})},oa=x=>{x.stopPropagation(),Oe&&H(t.id,Oe)},Un=x=>{m(t.id,{body:JSON.stringify(x),metadata:{...t.metadata??{},templateLauncherSelectedOptionId:x.selectedOptionId??""}})},it=(x,_)=>{if(_.stopPropagation(),!le)return;const re=Xm(le,x);Un(re),f.emit("templateCard.option.select",{nodeId:t.id,optionId:re.selectedOptionId??null})},Hn=(x,_)=>{if(!le)return;const re=Gm(le,x,_);Un(re),f.emit("templateCard.input.patch",{nodeId:t.id,key:x})},Vt=x=>{x.stopPropagation(),!(!le||aa)&&U(t.id,le.selectedOptionId??null,le.inputValues)},sa=On&&Za?n.jsxs("div",{className:"node-company-launcher","data-testid":"node-company-launcher",style:en?{left:en.left,top:en.top}:void 0,onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("div",{className:"node-company-launcher__eyebrow",children:"Run As Company"}),n.jsx("h4",{children:"Turn this note into a background AI company"}),n.jsx("p",{children:"Pick the operating mode to stage on this node. External CompanyCore execution stays adapter-gated."}),n.jsx("div",{className:"node-company-mode-list",children:jr.map(x=>n.jsxs("button",{type:"button",className:x.key===zt.key?"is-selected":"","data-company-mode":x.key,onClick:()=>$n(x.key),children:[n.jsx("strong",{children:x.label}),n.jsx("span",{children:x.description})]},x.key))}),n.jsxs("button",{type:"button",className:"node-company-subagents","aria-pressed":ka,onClick:x=>{x.stopPropagation(),Wt()},children:[n.jsx("span",{className:"node-company-toggle-indicator","aria-hidden":"true",children:ka?"On":"Off"}),n.jsxs("span",{children:[n.jsx(oc,{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:()=>Qa(!1),children:"Cancel"}),n.jsx("button",{type:"button",className:"btn btn-primary","data-testid":"node-company-run-confirm",onClick:$s,children:"Stage Company"})]})]}):null,Wn={width:t.width,height:t.height,transform:`translate3d(${t.x}px, ${t.y}px, 0)`,...Be?{"--memo-bg":Be.surface,"--memo-border":Be.border,"--memo-ink":Be.ink,"--memo-ring":Be.ring,"--memo-accent":Be.swatch}:{}},yt=n.jsxs(n.Fragment,{children:[No&&n.jsx("button",{type:"button",title:rt?"Disable AI reference":"Enable AI reference","aria-label":rt?"Disable AI reference":"Enable AI reference",className:rt?"is-active-ai":"is-inactive-ai",onPointerDown:x=>x.stopPropagation(),onClick:()=>$(t.id),children:n.jsx(Mp,{size:13})}),be&&n.jsx("button",{type:"button",title:"Change memo color","aria-label":"Change memo color","aria-pressed":ta,className:"is-memo-color-action","data-testid":"node-memo-color-open",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),va(_=>!_)},children:n.jsx(sc,{size:13})}),t.kind==="code"&&n.jsx("button",{type:"button",title:t.wordWrap===!1?"Enable word wrap":"Disable word wrap","aria-label":t.wordWrap===!1?"Enable word wrap":"Disable word wrap",onPointerDown:x=>x.stopPropagation(),onClick:()=>se(t.id),children:n.jsx(Tp,{size:13})}),n.jsx("button",{type:"button",title:$t?"Copy image to clipboard":"Copy content","aria-label":$t?"Copy image to clipboard":"Copy content",onPointerDown:x=>x.stopPropagation(),onClick:()=>F(t.id),children:n.jsx(So,{size:13})}),n.jsx("button",{type:"button",title:"Duplicate node","aria-label":"Duplicate node","data-testid":"node-duplicate",onPointerDown:x=>x.stopPropagation(),onClick:()=>k(t.id),children:n.jsx(rc,{size:13})}),qa&&n.jsx("button",{type:"button",title:"Fit text height","aria-label":"Fit text height",onPointerDown:x=>x.stopPropagation(),onClick:()=>W(t.id),children:n.jsx(Rp,{size:13})}),qa&&n.jsx("button",{type:"button",title:Qt?"Expand node":"Collapse node","aria-label":Qt?"Expand node":"Collapse node","aria-pressed":Qt,onPointerDown:x=>x.stopPropagation(),onClick:()=>ie(t.id),children:Qt?n.jsx(Ul,{size:13}):n.jsx(Lp,{size:13})}),xa&&n.jsx("button",{type:"button",title:"Run node",onPointerDown:x=>x.stopPropagation(),onClick:()=>L(t.id),children:n.jsx(ha,{size:13})}),On&&n.jsx("button",{type:"button",title:t.companyMode?"Open Company graph":"Run this note as Company","aria-label":t.companyMode?"Open Company graph":"Run this note as Company",className:t.companyMode?"is-company-action":"","data-testid":t.companyMode?"node-company-graph-open":"node-company-run-open",onPointerDown:x=>x.stopPropagation(),onClick:t.companyMode?Mo:Fs,children:n.jsx(Hl,{size:13})}),n.jsx("button",{type:"button",title:"Delete node","aria-label":"Delete node","data-testid":"node-delete",onPointerDown:x=>x.stopPropagation(),onClick:()=>y(t.id),children:n.jsx(Is,{size:13})})]}),nn=xa?n.jsxs("div",{className:"node-result-row","data-testid":"node-external-pins",children:[n.jsxs("button",{className:`node-pin node-pin--context ${Dn?"can-receive":""}`,type:"button",title:"Context input",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),v(t.id,"context","left")},children:[n.jsx(Wl,{size:10}),"Context"]}),n.jsxs("button",{className:`node-pin node-pin--result ${t.result?"has-result":""}`,type:"button",title:"Drag to connect this result to an input pin. Click to view the result.","data-testid":"node-result-open",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),t.result?B(t.id):v(t.id,"result","right")},children:[n.jsx(Ul,{size:11}),"Result"]})]}):n.jsxs("button",{className:`node-context-source ${d?"can-receive":""}`,type:"button",title:"Use this node as AI Task context",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),v(t.id,"context","right")},children:[n.jsx(Wl,{size:10}),n.jsx("span",{children:"Context"})]}),on=Ve?null:n.jsx("div",{className:"node-connector-handles","data-testid":"node-connector-handles","aria-hidden":!1,children:tf.map(x=>n.jsx("button",{type:"button",className:`node-connector-handle node-connector-handle--${x} ${Bs&&(d==null?void 0:d.fromSide)===x?"is-source":""} ${fe===x?"is-target":""}`,title:`Drag from ${x} to connect`,"aria-label":`Drag ${x} connector`,"data-testid":"node-connector-handle","data-node-connector":"true","data-connector-node-id":t.id,"data-connector-side":x,"data-connector-kind":ve,onPointerDown:_=>D(t.id,x,ve,_)},x))}),Vn=Rt||Re.length>1||Te||De?n.jsxs("div",{className:"node-surface-badges","data-testid":"node-surface-badges",children:[Rt&&n.jsx("span",{className:"node-mask-badge",title:"Image edit mask reference",children:"Mask"}),Re.length>1&&n.jsxs("span",{className:"node-image-stack-badge",title:"Image stack variants",children:[Math.max(1,Sa+1),"/",Re.length]}),Te&&n.jsx("span",{className:"node-embed-badge",children:Lt==="youtube"?"YouTube":"Embed"}),De&&n.jsx("span",{className:"node-video-badge",children:((mn=t.metadata)==null?void 0:mn.MediaModel)||((La=t.metadata)==null?void 0:La.MediaProvider)||"Video"})]}):null,et=Re.length>1||Te||De||Ga?n.jsxs("div",{className:"node-surface-actions","data-testid":"node-surface-actions",children:[Re.length>1&&n.jsx("div",{className:"node-image-stack-rail","aria-label":"Image stack variants",children:Re.map((x,_)=>n.jsx("button",{type:"button",className:x.variantId===(ht==null?void 0:ht.variantId)?"is-active":"",title:x.title||x.caption||`Variant ${_+1}`,"aria-label":`Show image variant ${_+1}`,onPointerDown:re=>re.stopPropagation(),onClick:re=>Ia(x.variantId,re),children:n.jsx(vr,{src:x.imageUrl,traceId:`${t.id}:${x.variantId||_}`,kind:"image-stack-variant",testId:"node-image-stack-thumb"})},x.variantId||`${x.imageUrl}-${_}`))}),Te&&n.jsxs("div",{className:"node-embed-actions",children:[n.jsxs("button",{type:"button",title:"Open embed","aria-label":"Open embed",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),Oe&&V(t,"external")},children:[n.jsx(Rn,{size:13}),n.jsx("span",{children:"Open"})]}),n.jsxs("button",{type:"button",title:"Copy URL","aria-label":"Copy URL",onPointerDown:x=>x.stopPropagation(),onClick:oa,children:[n.jsx(So,{size:13}),n.jsx("span",{children:"Copy URL"})]})]}),De&&n.jsxs("div",{className:"node-video-actions",children:[n.jsxs("button",{type:"button",title:"Play video","aria-label":"Play video","data-testid":"node-video-play",onPointerDown:x=>x.stopPropagation(),onClick:To,children:[n.jsx(ha,{size:13}),n.jsx("span",{children:"Play"})]}),n.jsxs("button",{type:"button",title:"Pause video","aria-label":"Pause video","data-testid":"node-video-pause",onPointerDown:x=>x.stopPropagation(),onClick:Ma,children:[n.jsx(vo,{size:13}),n.jsx("span",{children:"Pause"})]})]}),Ga&&n.jsxs("div",{className:"node-asset-actions",children:[t.kind==="pdf"&&n.jsxs("button",{type:"button",title:"Preview PDF","data-testid":"node-pdf-preview",onPointerDown:x=>x.stopPropagation(),onClick:()=>V(t,"preview"),children:[n.jsx(Pp,{size:13}),n.jsx("span",{children:"Preview"})]}),t.kind!=="directory"&&n.jsxs("button",{type:"button",title:"Open in new tab",onPointerDown:x=>x.stopPropagation(),onClick:()=>V(t,"external"),children:[n.jsx(Rn,{size:13}),n.jsx("span",{children:"Open"})]}),t.kind==="directory"&&n.jsxs("button",{type:"button",title:"Scan folder","data-testid":"directory-scan",onPointerDown:x=>x.stopPropagation(),onClick:()=>te(t.id),children:[n.jsx(In,{size:13}),n.jsx("span",{children:"Scan"})]}),t.kind==="directory"&&n.jsxs("button",{type:"button",title:"Folder scan settings","data-testid":"directory-settings-open",onPointerDown:x=>x.stopPropagation(),onClick:()=>de(t.id),children:[n.jsx(fs,{size:13}),n.jsx("span",{children:"Settings"})]})]})]}):null,Ro=Ve?null:n.jsxs("div",{className:"node-external-action-rail","data-testid":"node-external-action-rail",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[et,n.jsx("div",{className:"node-external-rail__pins",children:nn}),n.jsx("div",{className:"node-actions","data-testid":"node-actions",children:yt}),ge&&n.jsxs("div",{className:"node-agent-command-actions","data-testid":"node-agent-command-actions",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button","data-testid":"node-agent-command-plan","data-agent-command-action":"plan",onClick:zn,children:"Plan"}),n.jsx("button",{type:"button","data-testid":"node-agent-command-execute","data-agent-command-action":"execute",disabled:at==="Running",onClick:Na,children:"Execute"})]}),We&&n.jsxs("div",{className:"node-code-note-actions","data-testid":"node-code-note-actions",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button","data-testid":"node-code-note-approve","data-code-note-action":"approve",onClick:x=>Aa(x,"Approved","Planned","approve-local"),children:"Approve"}),n.jsx("button",{type:"button","data-testid":"node-code-note-review","data-code-note-action":"review",onClick:x=>Aa(x,"Reviewed","InSync","review-local"),children:"Review"}),n.jsx("button",{type:"button","data-testid":"node-code-note-out-of-sync","data-code-note-action":"out-of-sync",onClick:x=>Aa(x,gt,"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":Ut||"Staged",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button",title:"Update Company goal from this note","aria-label":"Update Company goal from this note","data-testid":"node-company-sync-goal",disabled:bt,onClick:()=>ze(t.id),children:n.jsx(ic,{size:12})}),n.jsx("button",{type:"button",title:"Refresh Company status","aria-label":"Refresh Company status","data-testid":"node-company-refresh",onClick:()=>At(t.id),children:n.jsx(In,{size:12})}),bt?n.jsx("button",{type:"button",title:"Company is archived","aria-label":"Company is archived","data-testid":"node-company-archived",disabled:!0,children:n.jsx(Ur,{size:12})}):na?n.jsx("button",{type:"button",title:"Resume Company","aria-label":"Resume Company","data-testid":"node-company-resume",onClick:()=>Ue(t.id,"Staged"),children:n.jsx(ha,{size:12})}):n.jsx("button",{type:"button",title:"Pause Company","aria-label":"Pause Company","data-testid":"node-company-pause",onClick:()=>Ue(t.id,"Paused"),children:n.jsx(vo,{size:12})}),!bt&&n.jsx("button",{type:"button",title:"Archive Company","aria-label":"Archive Company","data-testid":"node-company-archive",onClick:()=>Ue(t.id,"Archived"),children:n.jsx(Ur,{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:()=>G(t.id),children:n.jsx(jt,{size:12})})]})]}),Lo=Ve?null:n.jsx("div",{className:"node-external-rail","data-testid":"node-external-rail",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:n.jsxs("div",{className:"node-external-rail__meta",children:[n.jsxs("div",{className:"node-tags","data-testid":"node-external-tags",children:[(t.tags??[t.kind]).slice(0,3).map(x=>n.jsx("span",{children:x},x)),t.status&&n.jsx("span",{className:`node-status node-status--${t.status}`,children:t.status})]}),Vn,ye,ge&&n.jsxs("div",{className:"node-agent-command-state","data-testid":"node-agent-command-state","data-agent-command-status":at,"data-agent-command-mode":nt,"data-agent-command-role":z,"data-agent-command-adapter-state":((ia=t.metadata)==null?void 0:ia.AdapterState)||"adapter-gated",children:[n.jsx(Nn,{size:12}),n.jsx("strong",{children:"AC"}),n.jsx("span",{children:at}),n.jsx("span",{children:nt}),n.jsx("span",{children:z})]}),We&&n.jsxs("div",{className:"node-code-note-state","data-testid":"node-code-note-state","data-code-note-status":gt,"data-code-note-sync-state":ba,"data-code-note-kind":Xa,"data-code-note-adapter-state":((_e=t.metadata)==null?void 0:_e.AdapterState)||"local-canvas-only",children:[n.jsx(An,{size:12}),n.jsx("strong",{children:"CN"}),n.jsx("span",{children:gt}),n.jsx("span",{children:ba}),n.jsx("span",{children:Xa})]}),t.companyMode&&n.jsxs("div",{className:"node-company-state","data-testid":"node-company-state",children:[n.jsx(Hl,{size:12}),n.jsx("strong",{children:((Pe=t.metadata)==null?void 0:Pe.CompanyExecutionModeLabel)||"Company staged"}),n.jsx("span",{children:((Pa=t.metadata)==null?void 0:Pa.CompanySubAgents)==="false"?"single-agent":"sub-agents"})]})]})});return n.jsxs("article",{className:`canvas-node canvas-node--${t.kind} ${Ve?"canvas-node--remote-surface":""} ${Me?"canvas-node--remote-monitor-surface":""} ${Ka?"canvas-node--remote-control-surface":""} ${He?`canvas-node--automation-${He}`:""} ${ge?"canvas-node--agent-command":""} ${We?"canvas-node--code-note":""} ${o?"is-selected":""} ${r?"is-pulsing":""} ${rt?"":"is-ai-disabled"} ${t.wordWrap===!1?"is-nowrap":""} ${Qt?"is-collapsed":""} ${t.companyMode?`is-company-${t.companyMode}`:""}`,style:Wn,"data-node-id":t.id,"data-automation-node-kind":He||void 0,"data-automation-external-policy":((Jn=t.metadata)==null?void 0:Jn.AutomationExternalActionPolicy)||void 0,"data-media-generation-contract":((Ea=t.metadata)==null?void 0:Ea.MediaGenerationContract)||void 0,"data-agent-command-node":ge?"true":void 0,"data-agent-command-status":ge?at:void 0,"data-agent-command-mode":ge?nt:void 0,"data-agent-command-role":ge?z:void 0,"data-code-note-node":We?"true":void 0,"data-code-note-status":We?gt:void 0,"data-code-note-sync-state":We?ba:void 0,"data-code-note-kind":We?Xa:void 0,"data-remote-surface-chrome":Ve?"self-contained":void 0,"data-remote-surface-kind":Ca||void 0,"data-remote-surface-title-owner":Ve?"inner-remote-view":void 0,"data-remote-surface-scroll-owner":Ve?"remote-page-rail":void 0,onPointerDown:x=>{u(t.id,x.shiftKey||x.metaKey||x.ctrlKey),p(t.id,x)},onDoubleClick:x=>{if(t.kind!=="directory")return;const _=x.target instanceof HTMLElement?x.target:null;_!=null&&_.closest('button,input,textarea,select,[contenteditable="true"],[contenteditable=""]')||(x.stopPropagation(),te(t.id))},children:[!Ve&&n.jsxs("div",{className:"node-header",children:[n.jsx("span",{className:"node-kind",children:n.jsx(ya,{size:14})}),n.jsx("input",{value:t.title,"aria-label":"Node title",readOnly:Ae,onPointerDown:x=>x.stopPropagation(),onChange:x=>{Ae||m(t.id,{title:x.target.value})}})]}),sa&&typeof document<"u"?_m.createPortal(sa,document.body):sa,be&&ta&&Be&&n.jsx("div",{className:"node-memo-palette","data-testid":"node-memo-palette",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:Zr.map(x=>n.jsx("button",{type:"button",className:x.key===Be.key?"is-active":"",title:`${x.label} memo color`,"aria-label":`${x.label} memo color`,"aria-pressed":x.key===Be.key,"data-memo-color":x.key,style:{"--memo-swatch":x.swatch,"--memo-swatch-ring":x.ring},onPointerDown:_=>_.stopPropagation(),onClick:_=>zs(x.key,_)},x.key))}),$t?n.jsx("div",{className:`node-image-wrap ${Re.length>1?"node-image-wrap--stack":""} ${Rt?"node-image-wrap--mask":""}`,"data-testid":Rt?"node-mask-preview":Re.length>1?"node-image-stack":void 0,children:n.jsx(vr,{src:$t,traceId:t.id,kind:Rt?"mask":"node-image",testId:"node-secure-image"})}):Me?n.jsx(Vm,{node:t,onPatch:m,onCreateRemoteControl:Mt}):Ka?n.jsx(Ym,{node:t,onPatch:m}):Ae?n.jsx("div",{className:"node-template-card","data-testid":"node-template-card",children:le&&ft?n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"node-template-card__summary",children:[n.jsx("strong",{children:le.prompt||le.description}),n.jsx("span",{children:ft.description||le.description})]}),n.jsx("div",{className:"node-template-card__options","data-testid":"node-template-card-options",children:le.options.map(x=>n.jsxs("button",{type:"button",className:x.id===ft.id?"is-active":"","data-testid":"node-template-card-option","data-option-id":x.id,onPointerDown:_=>_.stopPropagation(),onClick:_=>it(x.id,_),children:[n.jsx("strong",{children:x.label}),n.jsx("span",{children:x.description})]},x.id||x.templateId))}),n.jsxs("div",{className:"node-template-card__inputs","data-testid":"node-template-card-inputs",children:[ft.inputs.map(x=>n.jsx(sf,{input:x,value:le.inputValues[x.key]??"",onChange:_=>Hn(x.key,_)},x.key)),ft.inputs.length===0&&n.jsx("p",{className:"node-template-card__empty",children:le.noInputsLabel||"No inputs needed."})]}),aa&&n.jsx("div",{className:"node-template-card__validation",children:aa}),n.jsxs("button",{type:"button",className:"node-template-card__generate","data-testid":"node-template-card-generate",disabled:!!aa,onPointerDown:Vt,onClick:x=>x.stopPropagation(),children:[n.jsx(ha,{size:13}),n.jsx("span",{children:le.generateLabel||le.actionLabel||"Generate"})]})]}):n.jsx("div",{className:"node-template-card__missing",children:"Template card payload is unavailable."})}):Te?n.jsxs("div",{className:`node-embed-card ${Ee?"has-embed-thumbnail":"is-embed-link"}`,"data-testid":"node-embed-card",children:[n.jsx("div",{className:"node-embed-preview",children:Ee?n.jsx(vr,{src:Ee,traceId:t.id,kind:"embed-thumbnail",testId:"node-embed-thumbnail"}):n.jsxs("div",{className:"node-embed-placeholder",children:[n.jsx(Rn,{size:24}),n.jsx("strong",{children:Lt==="youtube"?"YouTube":"Web embed"}),n.jsx("span",{children:Io||Oe||"External link"})]})}),n.jsx("textarea",{value:t.body,"aria-label":"Embed URL or description",spellCheck:!1,onPointerDown:x=>x.stopPropagation(),onChange:x=>{const _=x.target.value;m(t.id,{body:_,assetUrl:_,metadata:{...t.metadata??{},sourceUrl:_,url:_}})}}),Oe&&n.jsx("span",{className:"node-embed-source",title:Oe,children:Oe})]}):De?n.jsxs("div",{className:`node-video-card ${Ze?"has-video-source":"is-video-prompt"}`,"data-testid":"node-video-card",children:[Ze?n.jsx("video",{ref:me,src:Ze,className:"node-video-player","data-testid":"node-video-player",controls:!0,preload:"metadata",onPointerDown:x=>x.stopPropagation()}):n.jsxs("div",{className:"node-video-placeholder",children:[n.jsx(Tn,{size:24}),n.jsx("strong",{children:"Video prompt"}),n.jsx("span",{children:((pn=t.metadata)==null?void 0:pn.MediaModel)||((gn=t.metadata)==null?void 0:gn.MediaProvider)||"Adapter gated"})]}),n.jsx("textarea",{value:t.body,"aria-label":"Video prompt or source",spellCheck:!1,onPointerDown:x=>x.stopPropagation(),onChange:x=>m(t.id,{body:x.target.value})}),Ze&&n.jsx("span",{className:"node-video-source",title:Bn,children:Bn})]}):Ga?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(ya,{size:28})}),n.jsxs("div",{className:"node-asset-copy",children:[n.jsx("strong",{title:Ye,children:Ye}),n.jsx("span",{children:t.kind==="directory"?"Directory reference":t.kind==="pdf"?"PDF document":"File reference"}),t.kind==="directory"&&(ea||Ja||Fn||Le||Pt)&&n.jsxs("dl",{className:"node-asset-meta","data-testid":"node-directory-meta",children:[(Fn||Le)&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Scanned"}),n.jsxs("dd",{children:[Number(Fn??0).toLocaleString()," files / ",Number(Le??0).toLocaleString()," folders"]})]}),ea&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Include"}),n.jsx("dd",{children:ea})]}),Ja&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Exclude"}),n.jsx("dd",{children:Ja})]}),Pt&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Updated"}),n.jsx("dd",{children:new Date(Pt).toLocaleString()})]})]})]})]}):st?n.jsxs("div",{className:"node-csv-card","data-testid":"node-csv-card",children:[n.jsx(lf,{preview:ja,sort:Et,onSort:x=>{const _=(Et==null?void 0:Et.columnIndex)===x&&Et.direction==="asc"?"desc":"asc";an({columnIndex:x,direction:_}),f.emit("node.csvTable.sort",{id:t.id,columnIndex:x,direction:_})}}),n.jsx("textarea",{value:t.body,"aria-label":"CSV source",spellCheck:!1,wrap:"off",onPointerDown:x=>x.stopPropagation(),onChange:x=>m(t.id,{body:x.target.value})})]}):ot?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(mf,{value:t.body})}),n.jsx("textarea",{value:t.body,"aria-label":"Markdown source",spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:x=>x.stopPropagation(),onChange:x=>m(t.id,{body:x.target.value})})]}):n.jsx(n.Fragment,{children:n.jsx("textarea",{value:t.body,"aria-label":"Node body",spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:x=>x.stopPropagation(),onChange:x=>m(t.id,{body:x.target.value})})}),Lo,Ro,on,n.jsx("button",{type:"button",className:"node-resize-handle",title:"Resize node","aria-label":"Resize node",onPointerDown:x=>b(t.id,x)})]})});function sf({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 rf(e){const r=Math.min(430,window.innerHeight-24),d=Math.max(12,window.innerWidth-332-12),u=Math.min(Math.max(e.right-332,12),d),p=e.bottom+8,b=e.top-r-8,m=Math.max(12,window.innerHeight-r-12),y=p<=m?p:Math.max(12,b);return{left:u,top:Math.min(y,m)}}function lf({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 u=(t==null?void 0:t.columnIndex)===d,p=u&&t.direction==="asc"?"descending":"ascending";return n.jsx("th",{"aria-sort":u?t.direction==="asc"?"ascending":"descending":"none",children:n.jsxs("button",{type:"button",className:`csv-table-header-button ${u?"is-active":""}`,"data-testid":`csv-table-sort-${d}`,"aria-label":`Sort CSV by ${r||`Column ${d+1}`} ${p}`,onClick:()=>o(d),children:[n.jsx("span",{children:r||`Column ${d+1}`}),u&&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((u,p)=>n.jsx("td",{className:"csv-table-cell",children:r[p]??""},`csv-cell-${d}-${p}`))},`csv-row-${d}`))})]}),n.jsxs("div",{className:"csv-table-status",children:[n.jsxs("span",{children:[e.totalRows.toLocaleString()," rows"]}),n.jsxs("span",{children:[e.columnCount.toLocaleString()," columns"]}),e.truncated&&n.jsxs("span",{children:["showing ",e.renderedRows.toLocaleString()]})]})]})}function df(e,t){const o=cf(e,dd+1);if(o.length===0)return null;const r=Math.min(qh,Math.max(...o.map(m=>m.length),1)),d=cd(o[0],r).map((m,y)=>m.trim()||`Column ${y+1}`),u=o.slice(1,dd+1).map(m=>cd(m,r)),p=t?[...u].sort((m,y)=>uf(m[t.columnIndex]??"",y[t.columnIndex]??"",t.direction)):u,b=Math.max(0,String(e||"").split(/\r\n|\n|\r/).filter(m=>m.length>0).length-1);return{headers:d,rows:p,totalRows:b,columnCount:r,renderedRows:p.length,truncated:b>p.length}}function cf(e,t){const o=[];let r=[],d="",u=!1;const p=String(e||"").replace(/\r\n/g,`
|
|
4
|
-
`).replace(/\r/g,`
|
|
5
|
-
`);for(let b=0;b<p.length;b+=1){const m=p[b],y=p[b+1];if(m==='"'){u&&y==='"'?(d+='"',b+=1):u=!u;continue}if(m===","&&!u){r.push(d),d="";continue}if(m===`
|
|
6
|
-
`&&!u){if(r.push(d),r.some(k=>k.trim().length>0)&&o.push(r),r=[],d="",o.length>=t)break;continue}d+=m}return o.length<t&&(d.length>0||r.length>0)&&(r.push(d),r.some(b=>b.trim().length>0)&&o.push(r)),o}function cd(e,t){return Array.from({length:t},(o,r)=>String(e[r]??"").trim())}function uf(e,t,o){const r=Number(e.replace(/,/g,"")),d=Number(t.replace(/,/g,"")),p=Number.isFinite(r)&&Number.isFinite(d)&&e.trim()!==""&&t.trim()!==""?r-d:e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"});return o==="asc"?p:-p}function mf({value:e}){const t=pf(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 pf(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:rs(d[2])}):/^>\s?/.test(r)?t.push({kind:"quote",text:rs(r.replace(/^>\s?/,""))}):/^([-*+]|\d+\.)\s+/.test(r)?t.push({kind:"list",text:rs(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:rs(r)}),t.length>=12)break}return t}function rs(e){return e.replace(/!\[([^\]]*)\]\([^)]+\)/g,"$1").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/(\*\*|__)(.*?)\1/g,"$2").replace(/(\*|_)(.*?)\1/g,"$2").replace(/`([^`]+)`/g,"$1").trim()}function gf(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 Zr.find(d=>d.key===t)??Zr[0]}function hf(e){return vc(e)}function Lc(e){return String(e.assetUrl||e.sourceFilePath||e.body||"").trim()}function ff(e){const t=Lc(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 bf(e){var t,o,r,d,u,p;return String(((t=e.metadata)==null?void 0:t.sourceUrl)||((o=e.metadata)==null?void 0:o.SourceUrl)||((r=e.metadata)==null?void 0:r.url)||((d=e.metadata)==null?void 0:d.Url)||((u=e.metadata)==null?void 0:u.embedUrl)||((p=e.metadata)==null?void 0:p.EmbedUrl)||e.assetUrl||e.sourceFilePath||e.body||"").trim()}function yf(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 xf(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 Cf(e){return kc(e)}function ud(e){const t=e.indexOf(":");return t>0?e.slice(0,t):"relative"}function is({value:e,options:t,onChange:o,ariaLabel:r,className:d="",menuClassName:u="",disabled:p=!1,emptyLabel:b="Select",testId:m}){const[y,k]=g.useState(!1),L=g.useRef(null),v=t.find(B=>B.value.toLowerCase()===e.toLowerCase()),D=(v==null?void 0:v.label)||e||b;return g.useEffect(()=>{if(!y)return;const B=F=>{var W;const H=F.target instanceof Node?F.target:null;H&&((W=L.current)!=null&&W.contains(H))||k(!1)},$=F=>{F.key==="Escape"&&k(!1)};return document.addEventListener("pointerdown",B,!0),document.addEventListener("keydown",$,!0),()=>{document.removeEventListener("pointerdown",B,!0),document.removeEventListener("keydown",$,!0)}},[y]),n.jsxs("div",{ref:L,className:`catalog-pill ${d}`,"data-open":y?"true":"false",children:[n.jsxs("button",{type:"button",className:"catalog-pill__button","aria-haspopup":"listbox","aria-expanded":y,"aria-label":r,title:(v==null?void 0:v.title)||D,disabled:p,"data-testid":m,onClick:()=>{p||k(B=>!B)},children:[n.jsxs("span",{className:"catalog-pill__content",children:[(v==null?void 0:v.groupLabel)&&n.jsx("span",{className:"catalog-pill__provider",children:v.groupLabel}),(v==null?void 0:v.showAspectIcon)&&n.jsx(md,{option:v,compact:!0}),n.jsx("span",{className:"catalog-pill__label",children:D})]}),(v==null?void 0:v.trailingLabel)&&n.jsx("span",{className:"catalog-pill__trailing",children:v.trailingLabel}),n.jsx("span",{className:"catalog-pill__chevron",children:n.jsx(lc,{size:15})})]}),y&&!p&&n.jsx("div",{className:`catalog-pill__menu ${u}`,role:"listbox","aria-label":r,children:n.jsx("div",{className:"catalog-pill__scroll",children:t.map(B=>{var F;const $=B.value.toLowerCase()===e.toLowerCase();return n.jsxs("div",{children:[B.showGroupHeader&&n.jsxs("div",{className:`catalog-pill__group ${B.showSeparatorBefore?"catalog-pill__group--separated":""}`,children:[n.jsx("span",{children:B.groupLabel||B.groupKey||"Other"}),n.jsx("i",{})]}),n.jsxs("button",{type:"button",className:`catalog-pill__option ${$?"is-selected":""}`,role:"option","aria-selected":$,title:B.title||B.label,onClick:()=>{k(!1),B.value!==e&&o(B.value)},children:[n.jsxs("span",{className:"catalog-pill__option-main",children:[n.jsxs("span",{className:"catalog-pill__option-title",children:[B.showAspectIcon&&n.jsx(md,{option:B}),n.jsx("span",{children:B.label})]}),(B.detail||B.badges&&B.badges.length>0)&&n.jsxs("span",{className:"catalog-pill__option-detail",children:[B.detail&&n.jsx("span",{children:B.detail}),(F=B.badges)==null?void 0:F.map(H=>n.jsx("em",{children:H},H))]})]}),B.trailingLabel&&n.jsx("span",{className:"catalog-pill__option-trailing",children:B.trailingLabel})]})]},`${B.groupKey||"group"}:${B.value}`)})})})]})}function md({option:e,compact:t=!1}){const o=Math.max(1,e.aspectIconWidth??1),r=Math.max(1,e.aspectIconHeight??1),d=t?22:26,u=t?16:18,p=Math.min(d/o,u/r),b=Math.max(9,Math.round(o*p)),m=Math.max(9,Math.round(r*p));return n.jsx("span",{className:"catalog-pill__aspect","aria-hidden":"true",children:n.jsx("span",{style:{width:b,height:m}})})}function Sf(e){var t;return((t=e.metadata)==null?void 0:t.CompanyStatus)||e.status||(e.companyMode?"Staged":"Ready")}function wf(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 Qr(e){var t;return(e.result||e.body||((t=e.metadata)==null?void 0:t.CompanyLastMessage)||"").trim()||"No local artifact content yet."}function ls(e,t){const o=t.edges.filter(u=>u.to===e.id).map(u=>{var p;return(p=t.nodes.find(b=>b.id===u.from))==null?void 0:p.title}).filter(Boolean),r=t.edges.filter(u=>u.from===e.id).map(u=>{var p;return(p=t.nodes.find(b=>b.id===u.to))==null?void 0:p.title}).filter(Boolean),d=Sf(e);return{id:e.id,title:e.title,type:e.kind,subtitle:Qr(e).slice(0,160),status:d,progress:wf(d),incoming:o,outgoing:r}}function kf(e,t){const o=new Set(t.edges.filter(y=>y.from===e.id||y.to===e.id).flatMap(y=>[y.from,y.to]).filter(y=>y!==e.id)),r=t.nodes.filter(y=>o.has(y.id)),d=t.nodes.filter(y=>{var k;return y.id!==e.id&&(y.companyMode||((k=y.tags)==null?void 0:k.some(L=>L.toLowerCase().includes("company"))))}),u=[...r,...d].filter((y,k,L)=>L.findIndex(v=>v.id===y.id)===k),p=u.filter(y=>y.kind!=="ai-task"&&!y.result).slice(0,6),b=u.filter(y=>y.kind==="ai-task").slice(0,6),m=u.filter(y=>y.result||y.kind!=="ai-task").slice(0,6);return[{key:"root",label:"Root",nodes:[ls(e,t)]},{key:"context",label:"Context",nodes:p.map(y=>ls(y,t))},{key:"tasks",label:"Missions",nodes:b.map(y=>ls(y,t))},{key:"artifacts",label:"Artifacts",nodes:m.map(y=>ls(y,t))}].map(y=>({...y,nodes:y.nodes.length>0?y.nodes:[vf(y.key)]}))}function vf(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 jf(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 u;return d.id===e.id||o.has(d.id)||((u=d.tags)==null?void 0:u.includes("Company follow-up"))}).filter(d=>Qr(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:Qr(d),sourceNodeId:d.id}))}function If({board:e,rootNode:t,onClose:o,onStatus:r,onRemove:d,onSubmitFollowUp:u,onApproval:p,onAddArtifact:b}){var pe,ze,At,Ue,G;const[m,y]=g.useState(""),[k,L]=g.useState(null),v=g.useMemo(()=>kf(t,e),[e,t]),D=g.useMemo(()=>jf(t,e),[e,t]),B=D.find(V=>V.id===k)??D[0]??null,$=((pe=t.metadata)==null?void 0:pe.CompanyStatus)||"Staged",F=((ze=t.metadata)==null?void 0:ze.CompanyExecutionModeLabel)||"Auto / General",H=((At=t.metadata)==null?void 0:At.CompanySubAgents)==="false"?"single-agent":"sub-agents",W=((Ue=t.metadata)==null?void 0:Ue.CompanyApprovalStatus)||"Pending",ie=!["Approved","Rejected"].includes(W),se=e.nodes.filter(V=>{var de;return V.kind==="ai-task"&&(((de=V.tags)==null?void 0:de.includes("Company follow-up"))||v.some(te=>te.nodes.some(Mt=>Mt.id===V.id)))}).length,Ne=()=>{const V=m.trim();V&&(y(""),u(t.id,V))};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:V=>V.stopPropagation(),children:[n.jsxs("header",{className:"company-focus-head",children:[n.jsx("button",{type:"button",title:"Back to Canvas",onClick:o,children:n.jsx(Ep,{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||((G=t.metadata)==null?void 0:G.CompanyLastMessage)||"Local company root staged from MindCanvas."})]}),n.jsxs("div",{className:"company-focus-head__actions",children:[n.jsx("span",{children:$}),n.jsx("span",{children:F}),n.jsxs("span",{children:[n.jsx(oc,{size:12}),H]}),$==="Paused"?n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Staged"),children:[n.jsx(ha,{size:13}),"Resume"]}):n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Paused"),children:[n.jsx(vo,{size:13}),"Pause"]}),n.jsxs("button",{type:"button",onClick:()=>r(t.id,"Archived"),children:[n.jsx(Ur,{size:13}),"Archive"]}),n.jsxs("button",{type:"button",className:"is-danger",onClick:()=>d(t.id),children:[n.jsx(Is,{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(ds,{label:"Missions",value:se||1,tone:"blue"}),n.jsx(ds,{label:"Population",value:H==="sub-agents"?4:1,tone:"slate"}),n.jsx(ds,{label:"Approvals",value:ie?1:0,tone:"amber"}),n.jsx(ds,{label:"Artifacts",value:D.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(_p,{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:v.map(V=>n.jsxs("section",{className:"company-focus-lane",children:[n.jsxs("header",{children:[n.jsx("strong",{children:V.label}),n.jsxs("span",{children:[V.nodes.filter(de=>de.type!=="empty").length," nodes"]})]}),n.jsx("div",{className:"company-focus-node-list",children:V.nodes.map(de=>n.jsxs("article",{className:`company-focus-node ${de.type==="empty"?"is-empty":""}`,children:[n.jsxs("div",{children:[n.jsx("span",{children:de.type}),n.jsx("b",{children:de.status})]}),n.jsx("strong",{children:de.title}),n.jsx("p",{children:de.subtitle}),n.jsx("div",{className:"company-focus-progress",children:n.jsx("i",{style:{width:`${Math.round(de.progress*100)}%`}})}),de.incoming.length>0&&n.jsxs("small",{children:["From: ",de.incoming.slice(0,2).join(", ")]}),de.outgoing.length>0&&n.jsxs("small",{children:["Next: ",de.outgoing.slice(0,2).join(", ")]})]},de.id))})]},V.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(ic,{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:m,onChange:V=>y(V.target.value),placeholder:"Generate the next practical revenue validation task."}),n.jsxs("button",{type:"button",className:"company-focus-primary",disabled:!m.trim(),onClick:Ne,children:[n.jsx(Dp,{size:13}),"Stage Task"]})]}),n.jsxs("section",{children:[n.jsxs("div",{className:"company-focus-section-head",children:[n.jsxs("div",{children:[n.jsx($r,{size:15}),n.jsx("strong",{children:"Approvals"})]}),n.jsx("span",{children:W})]}),n.jsxs("article",{className:`company-focus-approval company-focus-approval--${W.toLowerCase()}`,children:[n.jsx("span",{children:F}),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."}),ie&&n.jsxs("div",{children:[n.jsxs("button",{type:"button",onClick:()=>p(t.id,"Approved"),children:[n.jsx($r,{size:13}),"Approve locally"]}),n.jsxs("button",{type:"button",onClick:()=>p(t.id,"Rejected"),children:[n.jsx(Bp,{size:13}),"Reject"]})]})]})]}),n.jsxs("section",{children:[n.jsxs("div",{className:"company-focus-section-head",children:[n.jsxs("div",{children:[n.jsx(It,{size:15}),n.jsx("strong",{children:"Artifacts"})]}),n.jsx("span",{children:D.length})]}),n.jsx("div",{className:"company-focus-artifacts",children:D.map(V=>n.jsxs("button",{type:"button",className:(B==null?void 0:B.id)===V.id?"is-selected":"",onClick:()=>L(V.id),children:[n.jsx("span",{children:V.type}),n.jsx("strong",{children:V.title})]},V.id))}),B&&n.jsxs("div",{className:"company-focus-preview",children:[n.jsx("span",{children:B.type}),n.jsx("strong",{children:B.title}),n.jsx("pre",{children:B.content}),n.jsxs("button",{type:"button",onClick:()=>b(t.id,B),children:[n.jsx(xo,{size:13}),"Add to Canvas"]})]})]})]})]})]})})}function ds({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 Nf({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(Rn,{size:16})}),n.jsx("button",{type:"button",title:"Close PDF viewer","data-testid":"pdf-viewer-close",onClick:o,children:n.jsx(jt,{size:16})})]})]}),n.jsx("iframe",{src:e,title:t,className:"pdf-viewer-frame","data-testid":"pdf-viewer-frame"})]})})}const bs=.28,ys=2.8,Af=96,Mf=140,xs=188,Cs=126,jn=10,Tf=720,Rf=.8,za={x:540,y:210,scale:1},pd=8,Pc=["dot","line","particles","spirit"],pa="n",Ir=["0","1","2","3","4","5","6","7","8","9"],Zt=24,gd=900,Lf=3e3,hd="mindexec-react-project-gallery-startup-v1",Ec="mindexec-react-function-toolbar-mode-v1",_c="mindexec-react-project-workspace-history-v1",Dc=5,Ss="__MINDEXEC_REACT_NODES__",cs=34,fd=30,Cn=1280,Sn=960,Pf=154,ei=4e4,Ef=50,Ms=100,Bc=50*1024,Nr=Bc,Ar=12e4,bd=64*1024,_f=5e3,wi=2500,Pn=36,ti="Select a LocalBridge directory",Oc="mindexec.react.templateStudioDraft.v1.",Fc="BusinessAutomationNode",Df="MindCanvasAgent",Bf="CodeNote";function Of(){return ac(hs())}const Ff=["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
|
-
`),ki={"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}},$f=["Objective:","","Constraints:","","Expected output:"].join(`
|
|
12
|
-
`),zf=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 yd(e,t){try{const o=window.localStorage.getItem(`${Oc}${e}`);if(!o)return gs(t);const r=JSON.parse(o);return{...gs(t),...r,templateId:bo(r.templateId||r.templateTitle||t)}}catch{return gs(t)}}function xd(e,t){window.localStorage.setItem(`${Oc}${e}`,JSON.stringify(t))}function Cd(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 Ts(e){return String(e||"").split(",").map(t=>t.trim().toLowerCase()).filter(Boolean)}function $c(e,t,o){const r=e.toLowerCase(),d=t.toLowerCase();return o.some(u=>r.includes(u)||d.includes(u))}function zc(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 Uf(e,t){const o=Ts(t==null?void 0:t.Include),r=Ts(t==null?void 0:t.Exclude),d=[];let u=0,p=0,b=0,m=!1;async function y(k,L=""){for await(const v of k.values()){if(b>=wi){m=!0;return}const D=L?`${L}/${v.name}`:v.name;if(!$c(D,v.name,r)){if(v.kind==="file"){if(!zc(v.name,o))continue;u+=1,b+=1,d.length<Pn&&d.push({name:v.name,path:D,kind:"file"});continue}if(v.kind==="directory"&&(p+=1,b+=1,d.length<Pn&&d.push({name:v.name,path:D,kind:"directory"}),await y(v,D),m))return}}}return await y(e),{fileCount:u,directoryCount:p,preview:d,truncated:m}}function En(e){return typeof e=="string"?e.trim():""}function Hf(e){return!e||e===ti?!1:!/^(https?:|data:|blob:|file:)/i.test(e)}function Wf(e){var d;const t=En((d=e.metadata)==null?void 0:d.DirectoryPath),o=En(e.sourceFilePath),r=t||o;return Hf(r)?r:""}function Vf(e,t){const o=En(t.path);if(o)return o;const r=En(t.name);if(!e)return r;const d=e.includes("\\")?"\\":"/";return`${e.replace(/[\\/]+$/,"")}${d}${r}`}async function Yf(e,t,o,r){const d=Ts(t==null?void 0:t.Include),u=Ts(t==null?void 0:t.Exclude),p=[],b=[{bridgePath:e,relativePath:""}];let m=0,y=0,k=0,L=!1;for(;b.length>0;){const v=b.shift();if(!v)break;const D=await gp(v.bridgePath,o,r),B=Array.isArray(D.items)?D.items:[];for(const $ of B){if(k>=wi){L=!0;break}const F=En($.name);if(!F)continue;const H=v.relativePath?`${v.relativePath}/${F}`:F;if($c(H,F,u))continue;const W=$.isDirectory===!0,ie=$.isFile===!0||$.isDirectory!==!0;if(W){y+=1,k+=1,p.length<Pn&&p.push({name:F,path:H,kind:"directory"}),b.push({bridgePath:Vf(v.bridgePath,$),relativePath:H});continue}if(ie){if(!zc(F,d))continue;m+=1,k+=1,p.length<Pn&&p.push({name:F,path:H,kind:"file"})}}if(L)break}return{fileCount:m,directoryCount:y,preview:p,truncated:L}}function Sd(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 ${wi} entries.`:"Scan completed.","",o||"(empty or filtered)"].join(`
|
|
14
|
-
`)}const Xf=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"]),Gf=new Set(["csv","log","md","markdown","rtf","text","txt"]);function wd(e){const t=e;return Number.isFinite(t==null?void 0:t.x)&&Number.isFinite(t==null?void 0:t.y)}function ai(e){return e==="top"||e==="right"||e==="bottom"||e==="left"}function Kf(e){switch(e){case"top":return"bottom";case"right":return"left";case"bottom":return"top";case"left":return"right";default:return"left"}}function kd(e){switch(e){case"top":return{x:0,y:-1};case"right":return{x:1,y:0};case"bottom":return{x:0,y:1};case"left":return{x:-1,y:0};default:return{x:1,y:0}}}function Ft(e,t){switch(t){case"top":return{x:e.x+e.width/2,y:e.y};case"right":return{x:e.x+e.width,y:e.y+e.height/2};case"bottom":return{x:e.x+e.width/2,y:e.y+e.height};case"left":return{x:e.x,y:e.y+e.height/2};default:return{x:e.x+e.width,y:e.y+e.height/2}}}function qf(e,t){const o=[{side:"top",point:Ft(e,"top")},{side:"right",point:Ft(e,"right")},{side:"bottom",point:Ft(e,"bottom")},{side:"left",point:Ft(e,"left")}];let r=o[0],d=Number.POSITIVE_INFINITY;for(const u of o){const p=u.point.x-t.x,b=u.point.y-t.y,m=p*p+b*b;m<d&&(r=u,d=m)}return r.side}function Jf(e,t){return e.x>=t.x&&e.x<=t.x+t.width&&e.y>=t.y&&e.y<=t.y+t.height}function vd(e,t,o,r){const d=Math.hypot(o.x-e.x,o.y-e.y),u=ue(d*.38,54,220),p=kd(t),b=kd(r);return[`M ${e.x} ${e.y}`,`C ${e.x+p.x*u} ${e.y+p.y*u},`,`${o.x+b.x*u} ${o.y+b.y*u},`,`${o.x} ${o.y}`].join(" ")}function Mr(e){var r,d;const t=Number((r=e.viewState)==null?void 0:r.cursorX),o=Number((d=e.viewState)==null?void 0:d.cursorY);return Number.isFinite(t)&&Number.isFinite(o)?{x:t,y:o}:null}function Ua(e,t){return{...e,viewState:{...e.viewState??{},cursorX:t.x,cursorY:t.y}}}function Zf(e,t){return t?{x:Math.round(e.x/Zt)*Zt,y:Math.round(e.y/Zt)*Zt}:e}function X(e){return`${e}-${Math.random().toString(36).slice(2,9)}`}function Qf(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 ue(e,t,o){return Math.min(o,Math.max(t,e))}const eb=112,tb=80;function jd(e,t){const o=t/2,r=eb+e/2,d=Math.max(r,t-tb);return ue(Math.max(o,r),0,d)}function Tr(e){return{x:e.x+e.width/2,y:e.y+e.height/2}}function ni(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 ho(e){return!!(e&&!["image","video","pdf","file","directory","remote-monitor","remote-control"].includes(e.kind))}function Ha(e){var t,o;return!!(e&&(e.kind==="remote-monitor"||((t=e.metadata)==null?void 0:t.SemanticType)==="RemoteFleetMonitor"||((o=e.metadata)==null?void 0:o.RemoteFleetNodeRole)==="fleet-monitor"))}function ab(e){return e.isExpanded===!1&&Number(e.originalHeight??0)>e.height+1}function nb(e){return Ci(e)}function ob(e){return vc(e)}function Co(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 Id(e,t,o,r){let d=e.variantId||X("image-variant");for(;o.has(d);)d=X("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 sb(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 rb(e){if(e.kind!=="image")return"";const t=Co(e).find(o=>{var r;return o.variantId===((r=e.imageStack)==null?void 0:r.activeVariantId)});return String((t==null?void 0:t.imageUrl)||Ci(e)).trim()}async function ib(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 yo(e),"text"}function Rr(e){var r;const o=(e.result||e.body||"").split(/\r?\n/).reduce((d,u)=>d+Math.max(1,Math.ceil(u.length/54)),0);return ue(112+o*21+((r=e.tags)!=null&&r.length?28:0),150,620)}function lb(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:Cn,maxHeight:Sn};case"image":return{minWidth:220,minHeight:160,maxWidth:Cn,maxHeight:Sn};case"pdf":case"file":case"directory":return{minWidth:240,minHeight:128,maxWidth:860,maxHeight:720};case"code":return{minWidth:260,minHeight:160,maxWidth:Cn,maxHeight:Sn};case"csv-table":return{minWidth:320,minHeight:180,maxWidth:Cn,maxHeight:Sn};case"ai-task":return{minWidth:260,minHeight:154,maxWidth:Cn,maxHeight:Sn};default:return{minWidth:220,minHeight:132,maxWidth:Cn,maxHeight:Sn}}}function tt(e){return String(e||"").trim()||"Untitled"}const Uc="Multi Desktop Monitor";function Nd(e){return tt(e).toLowerCase()===Uc.toLowerCase()}function db(e,t,o){const r=tt(e.name);return!o||!Nd(r)?r:t.nodes.some(u=>Ha(u)&&Nd(u.title||Uc))?"MindCanvas":r}function fa(e){return typeof e=="object"&&e!==null}function oi(e){const t=e.toLowerCase(),o=t.lastIndexOf(".");return o>=0?t.slice(o+1):""}function cb(e){if(!fa(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 ub(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 us(e,t=0,o=Number.MAX_SAFE_INTEGER){const r=Number(e);if(Number.isFinite(r))return ue(r,t,o)}function Lr(e){return e&&Pc.includes(e)?e:"dot"}function Ad(e){return Math.round(e/Zt)*Zt}function mb(e){if(!fa(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 pb(e){if(!fa(e)||!Array.isArray(e.variants))return;const t=e.variants.map(d=>mb(d)).filter(d=>!!d).slice(0,128);if(t.length===0)return;const 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 si(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 gb(e){if(!fa(e))return null;const t=e.kind,o=Number(e.x),r=Number(e.y),d=Number(e.width),u=Number(e.height);if(typeof e.id!="string"||typeof t!="string"||!zf.has(t)||typeof e.title!="string"||typeof e.body!="string"||!Number.isFinite(o)||!Number.isFinite(r)||!Number.isFinite(d)||!Number.isFinite(u))return null;const p=pb(e.imageStack),b=(p==null?void 0:p.variants.find(m=>m.variantId===p.activeVariantId))??(p==null?void 0:p.variants[0]);return{id:e.id,kind:t,title:e.title,body:e.body,x:o,y:r,width:ue(d,120,1280),height:ue(u,96,920),status:["idle","running","paused","done","blocked"].includes(String(e.status))?e.status:void 0,result:typeof e.result=="string"?e.result:void 0,imageUrl:typeof e.imageUrl=="string"?e.imageUrl:b==null?void 0:b.imageUrl,imageStack:p,assetUrl:typeof e.assetUrl=="string"?e.assetUrl:void 0,sourceFilePath:typeof e.sourceFilePath=="string"?e.sourceFilePath:void 0,isChunkedText:typeof e.isChunkedText=="boolean"?e.isChunkedText:void 0,totalLineCount:us(e.totalLineCount),scrollOffset:us(e.scrollOffset),maxScroll:us(e.maxScroll),isExpanded:typeof e.isExpanded=="boolean"?e.isExpanded:void 0,originalHeight:us(e.originalHeight),tags:ub(e.tags),role:typeof e.role=="string"?e.role:void 0,metadata:cb(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 hb(e){return!fa(e)||typeof e.id!="string"||typeof e.from!="string"||typeof e.to!="string"||e.kind!=="context"&&e.kind!=="result"?null:{id:e.id,from:e.from,to:e.to,kind:e.kind,fromSide:ai(e.fromSide)?e.fromSide:void 0,toSide:ai(e.toSide)?e.toSide:void 0}}function Md(e){if(!e.includes(Ss))return null;try{const t=JSON.parse(e);if(!fa(t)||t.__type!==Ss||!Array.isArray(t.nodes))return null;const o=t.nodes.map(d=>gb(d)).filter(d=>!!d);if(o.length===0)return null;const r=Array.isArray(t.edges)?t.edges.map(d=>hb(d)).filter(d=>!!d):[];return{__type:Ss,source:"MindExecReact",copiedAt:typeof t.copiedAt=="string"?t.copiedAt:new Date().toISOString(),nodes:o,edges:r}}catch{return null}}function fb(e,t){return{__type:Ss,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:si(o.imageStack)})),edges:t.map(o=>({...o}))}}const bb=/^\s*\[[^\]]+\]\((https?:\/\/[^)\s]+)\)\s*$/i,yb=/<iframe[^>]+src\s*=\s*(?:"|\x27)(?<url>https?:\/\/[^"\x27]+)(?:"|\x27)/i,xb=/https?:\/\/[^\s<>()"\x27]+/i,Cb=/^[A-Za-z0-9_-]{6,}$/,Sb=new Set(["avi","m4v","mov","mp4","mpeg","ogv","webm"]);function Pr(e){return e.trim().replace(/[.,;:!?\])}]+$/g,"")}function wb(e){var u;const t=e.trim();if(!t)return"";const o=yb.exec(t);if((u=o==null?void 0:o.groups)!=null&&u.url)return Pr(o.groups.url);const r=bb.exec(t);if(r!=null&&r[1])return Pr(r[1]);const d=t.split(/\r?\n/).map(p=>p.trim()).filter(Boolean);if(d.length===1){const p=xb.exec(d[0]);if(p&&p[0]===d[0])return Pr(p[0])}return""}function vi(e){const t=e.trim(),o=wb(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 kb(e){try{const t=new URL(e);return oi(t.pathname)}catch{return oi(e)}}function vb(e){const t=e.hostname.toLowerCase();if(!t||t==="localhost"||t.endsWith(".localhost"))return!0;const o=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(t);if(o){const d=o.slice(1).map(Number);if(d.some(b=>!Number.isInteger(b)||b<0||b>255))return!0;const[u,p]=d;return u===0||u===10||u===127||u===169&&p===254||u===172&&p>=16&&p<=31||u===192&&p===168}const r=t.replace(/^\[|\]$/g,"").toLowerCase();return r==="::1"||r==="0:0:0:0:0:0:0:1"||r.startsWith("fc")||r.startsWith("fd")?!0:/^fe[89ab]/i.test(r.replace(/:/g,""))}function _n(e){const t=vi(e);if(!t)return null;try{const o=new URL(t);return o.protocol!=="http:"&&o.protocol!=="https:"||vb(o)?null:o}catch{return null}}function Er(e){return Cb.test(e)}function jb(e){const t=_n(e);if(!t)return"";const o=t.hostname.toLowerCase().replace(/^www\./,"");if(o==="youtu.be"){const b=t.pathname.split("/").filter(Boolean)[0]??"";return Er(b)?b:""}if(!o.endsWith("youtube.com")&&!o.endsWith("youtube-nocookie.com"))return"";const r=t.searchParams.get("v")??"";if(Er(r))return r;const d=t.pathname.split("/").filter(Boolean),u=d.findIndex(b=>["embed","shorts","live","v"].includes(b)),p=u>=0?d[u+1]??"":"";return Er(p)?p:""}function Ib(e){const t=e.toLowerCase(),o=kb(e);return t.startsWith("data:image/")||["avif","gif","jpeg","jpg","png","svg","webp"].includes(o)?"image":Sb.has(o)?"video":o==="pdf"?"pdf":_n(e)?"embed":"file"}function Nb(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 Ab(e,t,o="clipboard-url"){const r=Ib(e),d=Nb(e),u=r==="embed"?_n(e):null,p=r==="embed"?jb(e):"",b=p?"youtube":"webpage",m=(u==null?void 0:u.hostname.replace(/^www\./,""))??"",y=p?`https://www.youtube.com/watch?v=${p}`:e,k=p?`https://www.youtube-nocookie.com/embed/${p}`:"",L=r==="image"?`Image: ${d}`:r==="video"?`Video: ${d}`:r==="embed"?p?"YouTube Video":`Embed: ${m||d}`:r==="pdf"?`PDF: ${d}`:`URL: ${d}`;return{id:X("node"),kind:r,title:L,body:y,x:t.x,y:t.y,width:r==="embed"?460:r==="video"?420:r==="image"?360:300,height:r==="embed"?260:r==="video"?236:r==="image"?240:154,imageUrl:r==="image"?e:void 0,assetUrl:r==="image"?void 0:y,tags:r==="embed"?["Embed",p?"YouTube":"Web"]:r==="file"?["URL","File"]:[r.toUpperCase()],metadata:{Source:o,AdapterState:"local-reference",Durable:"false",...r==="embed"?{source:"embed",embedType:b,provider:p?"youtube":"web",renderMode:p?"card":"snapshot",aspectRatio:p?"16:9":"auto",sourceUrl:y,url:y,originalInputUrl:e,embedUrl:k,videoId:p,thumbnailUrl:p?`https://img.youtube.com/vi/${p}/hqdefault.jpg`:"",title:L,domain:m,faviconUrl:!p&&u?`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(y)}`:"",description:p?"":"Capture a visual snapshot or open this page in a new tab.",iframeAllowed:"false",iframeBlockedReason:p?"react-card-shell":"unknown",captureStatus:"idle",captureProvider:p?"":"cloudflare-browser-run"}:{}}}}function Td(e,t,o="clipboard-url"){const r=vi(e);return!r||/^https?:\/\//i.test(r)&&!_n(r)?null:Ab(r,t,o)}function Rd(e,t,o){const r=e.split(/\r?\n/).map(d=>d.trim()).find(Boolean)??"Pasted text";return{id:X("node"),kind:"note",title:r.slice(0,90),body:e.slice(0,4e4),x:t.x,y:t.y,width:340,height:ue(156+Math.ceil(Math.min(e.length,2200)/72)*20,176,540),tags:[o.startsWith("global-input")?"Input":"Pasted"],metadata:{Source:o,TextTruncated:String(e.length>4e4)}}}function Mb(e,t,o){const r=e.split(/\r?\n/).map(b=>b.trim()).find(Boolean)??"AI question",d=ga(o.model),u=Qd(d),p=u?hp(u.provider):o.aiProvider||"OpenAI Codex";return{id:X("node"),kind:"ai-task",title:r.slice(0,90),body:e.slice(0,4e4),x:t.x,y:t.y,width:360,height:ue(176+Math.ceil(Math.min(e.length,2200)/84)*18,196,520),status:"idle",tags:["AI Task","Input",p],metadata:{Source:"global-input-ai",AdapterState:"localbridge-codex",AiProvider:o.aiProvider||"OpenAI Codex",TextModel:d,TextModelProvider:p,Effort:o.effort,TextTruncated:String(e.length>4e4)}}}function Tb(e,t,o,r,d="global-input-media",u){const p=r==="Image"?"image":"video",b=e.split(/\r?\n/).map(y=>y.trim()).find(Boolean)??`${r} prompt`,m={...Ni(o,r,u)??{},Source:d,PromptOnly:"true"};return{id:X("node"),kind:p,title:`${r}: ${b.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,m.MediaProvider||"Adapter gated"],metadata:m}}function Ld(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 Rb(e){const t=oi(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":Xf.has(t)?"code":e.type.startsWith("text/")||Gf.has(t)?"text":"file"}function Lb(e){return typeof URL<"u"&&URL.createObjectURL?URL.createObjectURL(e):e.name}function Pd(e){return e?e.split(/\r?\n/).length:0}function Ed(e){return String(e||"").replace(/\r\n/g,`
|
|
24
|
-
`).replace(/\r/g,`
|
|
25
|
-
`).split(`
|
|
26
|
-
`).slice(0,Ms).join(`
|
|
27
|
-
`).slice(0,_f)}function _d(e){return{IsChunkedText:"true",TotalLineCount:String(e),TotalLineCountIsPreview:"true",ChunkedPreviewOnly:"true",ChunkedPreviewChars:"",ChunkedLineCount:String(Ms),ChunkCacheEntryLimit:String(Ef),LargeFileThresholdBytes:String(Bc),OriginalIngestMode:"browser-preview",TextTruncated:"true"}}function Pb(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,Eb(d)),0);return{rowCount:Math.max(0,t.length-1),columnCount:o}}function Eb(e){let t=1,o=!1;for(let r=0;r<e.length;r+=1){const d=e[r],u=e[r+1];d==='"'?o&&u==='"'?r+=1:o=!o:d===","&&!o&&(t+=1)}return e.trim()?t:0}function Dd(e,t){const o=`
|
|
31
|
-
|
|
32
|
-
... (UI truncated; source file ${t.toLocaleString()} bytes) ...`;return e.endsWith(`
|
|
33
|
-
`)?`${e}${o.trimStart()}`:`${e}${o}`}async function _b(e,t,o){const r=Rb(e),d=(r==="note"||r==="text"||r==="code"||r==="markdown")&&e.size<=Nr,u=r==="image"||r==="video"||r==="pdf"||r==="file"?Lb(e):void 0,p={Source:`browser-${o}`,FileName:e.name,FileType:e.type||"unknown",FileSize:String(e.size),Durable:"false"};if(r==="csv-table"){const m=e.size<=Nr,y=m?await e.text():await e.slice(0,bd).text(),k=m?y.slice(0,Ar):Ed(y),L=Pb(k),v=m?0:Pd(k);return m||f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:o,previewChars:k.length,previewLines:v,chunkLineCount:Ms}),{id:X("node"),kind:"csv-table",title:e.name.slice(0,90)||"CSV table",body:m?k:Dd(k,e.size),x:t.x,y:t.y,width:720,height:420,sourceFilePath:e.name,isChunkedText:!m||void 0,totalLineCount:m?void 0:v,scrollOffset:m?void 0:0,maxScroll:m?void 0:0,tags:["CSV","Table",o],metadata:{...p,CsvRowCount:String(L.rowCount),CsvColumnCount:String(L.columnCount),IsChunkedText:String(!m),...m?{}:{..._d(v),ChunkedPreviewChars:String(k.length)},ChunkedPreviewOnly:String(!m),OriginalIngestMode:m?"browser-inline":"browser-preview",TextTruncated:String(!m||y.length>k.length)},wordWrap:!1}}if(d){const m=(await e.text()).slice(0,Ar);return{id:X("node"),kind:r,title:e.name.slice(0,90)||(r==="code"?"Code file":r==="markdown"?"Markdown file":"Text file"),body:m,x:t.x,y:t.y,width:r==="code"?420:r==="markdown"?400:360,height:ue(168+Math.ceil(Math.min(m.length,2600)/72)*20,196,640),sourceFilePath:e.name,tags:[r==="code"?"Code":r==="markdown"?"Markdown":"Text",o],metadata:{...p,TextTruncated:String(e.size>Nr||m.length>=Ar)},wordWrap:r==="code"?!0:void 0}}if(r==="note"||r==="text"||r==="code"||r==="markdown"){const m=await e.slice(0,bd).text(),y=Ed(m),k=Pd(y);return f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:o,previewChars:y.length,previewLines:k,chunkLineCount:Ms}),{id:X("node"),kind:r,title:e.name.slice(0,90)||(r==="code"?"Code file":r==="markdown"?"Markdown file":"Text file"),body:Dd(y,e.size),x:t.x,y:t.y,width:r==="code"?480:r==="markdown"?430:390,height:540,sourceFilePath:e.name,isChunkedText:!0,totalLineCount:k,scrollOffset:0,maxScroll:0,isExpanded:!1,originalHeight:0,tags:[r==="code"?"Code":r==="markdown"?"Markdown":"Text","Chunked",o],metadata:{...p,..._d(k),ChunkedPreviewChars:String(y.length)},wordWrap:r==="code"?!0:void 0}}const b=r;return{id:X("node"),kind:b,title:e.name.slice(0,90)||(b==="image"?"Image":b==="video"?"Video":b==="pdf"?"PDF Document":"File"),body:u||e.name,x:t.x,y:t.y,width:b==="video"?420:b==="image"?360:300,height:b==="video"?236:b==="image"?240:154,imageUrl:b==="image"?u:void 0,assetUrl:b==="image"?void 0:u,sourceFilePath:e.name,tags:[b==="file"?"File":b.toUpperCase(),o],metadata:{...p,EphemeralObjectUrl:String(!!u)}}}function Bd(e,t){const o=Array.from(e??[]),r=Array.from(t??[]).map(u=>u.kind==="file"?u.getAsFile():null).filter(u=>!!u),d=new Set;return[...o,...r].filter(u=>{const p=`${u.name}:${u.size}:${u.type}:${u.lastModified}`;return d.has(p)?!1:(d.add(p),!0)})}function ws(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 Od(e){const t=e instanceof HTMLElement?e:null;return t?!!(t.closest(".canvas-node,.edge-path")||ws(e)):!1}function _r(e){return fa(e)?typeof e.id=="string"&&Array.isArray(e.nodes)&&Array.isArray(e.edges)&&fa(e.settings):!1}function Rs(e){return e.replace(/\.layout\.json$/i,"").replace(/\.json$/i,"").trim()}function Db(e,t){var r,d;const o=new Date().toISOString();return{...e,id:X("imported-board"),name:tt(e.name||Rs(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 Dr(e){return/\.layout\.json$/i.test(e.file.name)}function Bb(e){return e.flatMap(t=>hi(t.payload).map(o=>({fileName:t.file.name,metadata:o})))}function Ob(e,t){const o=Rs(e.file.name);return t.find(r=>r.metadata.Id===o)??hi(e.payload).map(r=>({fileName:e.file.name,metadata:r}))[0]??null}function ks(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 Fb(e){const t=[...e].sort((m,y)=>m.y-y.y||m.x-y.x);if(t.length<=2)return t;const o=t.map(m=>m.height).sort((m,y)=>m-y),r=o[Math.floor(o.length/2)]??1,d=Math.max(16,r*.35),u=[];let p=[],b=Number.NaN;for(const m of t){if(p.length===0){p=[m],b=m.y;continue}Math.abs(m.y-b)<=d?(p.push(m),b=(b*(p.length-1)+m.y)/p.length):(u.push(p.sort((y,k)=>y.x-k.x)),p=[m],b=m.y)}return p.length>0&&u.push(p.sort((m,y)=>m.x-y.x)),u.flat()}function $b(e,t,o){const r=ks(e);if(!r)return null;const d={minX:r.minX-220,minY:r.minY-180,maxX:r.maxX+220,maxY:r.maxY+180},u=Math.max(1,d.maxX-d.minX),p=Math.max(1,d.maxY-d.minY),b=Math.min((xs-jn*2)/u,(Cs-jn*2)/p),m=(v,D)=>({x:jn+(v-d.minX)*b,y:jn+(D-d.minY)*b}),y={left:(0-t.x)/t.scale,top:(0-t.y)/t.scale,right:(o.width-t.x)/t.scale,bottom:(o.height-t.y)/t.scale},k=m(y.left,y.top),L=m(y.right,y.bottom);return{bounds:d,scale:b,project:m,nodes:e.map(v=>{const D=m(v.x,v.y);return{id:v.id,kind:v.kind,x:D.x,y:D.y,width:Math.max(2,v.width*b),height:Math.max(2,v.height*b),selected:!1}}),viewport:{x:ue(k.x,0,xs),y:ue(k.y,0,Cs),width:ue(L.x-k.x,4,xs),height:ue(L.y-k.y,4,Cs)}}}function zb(e,t){const o=Math.max(.01,e.scale),r=t.width/o,d=t.height/o,u=Math.max(Tf,Math.max(r,d)*Rf);return{left:(0-e.x)/o-u,top:(0-e.y)/o-u,right:(t.width-e.x)/o+u,bottom:(t.height-e.y)/o+u}}function Fd(e,t){return e.x+e.width>=t.left&&e.x<=t.right&&e.y+e.height>=t.top&&e.y<=t.bottom}function $d(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 Ub(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 zd(e){const t=new Date().toISOString(),o=X("board"),r=X("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 Hb(e){const t=new Date().toISOString();return{id:X("board"),name:`Template Studio ${Wb(new Date)}`,updatedAt:t,settings:e,source:{kind:"localStorage",loadedAt:t},nodes:[],edges:[]}}function Wb(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 Vb(e){return`${e.sourceKind==="localBridge"?"LocalBridge copy":"React board"} / ${e.nodeCount} nodes / ${ni(e.updatedAt)}`}function wo(e,t){const o=e.trim();return o.length<=t?o:`${o.slice(0,t)}...`}function Yb(e){return e==="Fast"?"low":e==="Deep"?"high":"medium"}function ji(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 Ii(e){return e==="image-generate"||e==="video-generate"?ki[e]:null}function vn(e){var t;return String(((t=e.metadata)==null?void 0:t.SemanticType)||"").trim()===Fc}function Xb(e,t){const o=ki[t],r=ko(e,o.mode);return{...Ni(e,o.mode)??{},Source:"toolbar-business-automation",SemanticType:Fc,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 fo(e,t){var r,d,u,p,b;if(!vn(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??((u=e.metadata)==null?void 0:u.AutomationLastOutput)??"",AutomationLastRunError:t.error??"",AutomationLastRunStatus:t.status,AutomationLastRunStatusLabel:t.statusLabel,AutomationLastRunSourceMode:t.sourceMode??"",AutomationLastRunEvidenceCount:((p=e.metadata)==null?void 0:p.AutomationLastRunEvidenceCount)??"0",AutomationLastRunIsFallback:String(!!t.fallback),AutomationLastRunIsPartial:String(!!t.partial),AutomationLastRunToolsUsed:t.toolsUsed??((b=e.metadata)==null?void 0:b.AutomationToolHints)??"",AutomationLastRunToolWarnings:t.toolWarnings??"",AutomationRunCount:o,...t.runState==="completed"?{AutomationLastRunAtUtc:new Date().toISOString()}:{}}}function Gb(){return{Source:"toolbar-agent-command",SemanticType:Df,AgentCommandId:X("agent-command"),AgentCommandStatus:"Draft",AgentCommandMode:"Task",AgentCommandRequestedRole:"Researcher",AgentCommandConstraints:"",AgentCommandPlannerSummary:"",AgentCommandPlanSteps:"[]",AgentCommandPlannedSkills:"[]",AgentCommandPlannedTools:"[]",AgentCommandPlannedConcepts:"[]",AgentCommandLinkedCodeNotes:"[]",AgentCommandWorkItems:"[]",AgentCommandConsoleLogs:"[]",AgentCommandResultLinks:"[]",AgentCommandContinuationPending:"false",AgentCommandTrancheIndex:"0",memoColor:"gray",memoIcon:"robot",AdapterState:"adapter-gated"}}function Kb(){return{Source:"toolbar-code-note",SemanticType:Bf,CodeNoteId:X("code-note"),CodeNoteKind:"Feature",CodeNoteStatus:"Draft",CodeNoteSyncState:"Unlinked",CodeNoteWhy:"Keep the reason and implementation boundary visible before code changes.",CodeNoteRelatedFiles:JSON.stringify(["src/features/canvas/MindCanvas.tsx"]),CodeNoteRelatedNamespaces:"[]",CodeNoteRelatedSymbols:"[]",CodeNoteAcceptanceCriteria:JSON.stringify(["The intended change is represented as a canvas note.","Local status actions update CodeNote metadata without external adapters."]),CodeNoteOutputArtifacts:"[]",memoColor:"sky",memoIcon:"code",AdapterState:"local-canvas-only"}}function qb(e,t){var r,d,u,p;const o=t?Ii(ji(t)):null;if(o){const b=o.mode.toLowerCase();return[`Task: ${e}`,"",`Run Result: ${o.title}`,`Node: ${o.kind}`,"Status: Spec only","Source mode: media-prompt-only","","Generation is not executed here. External media generation stays adapter-gated until human review.","","Spec:",`- Medium: ${b}`,`- Model: ${((r=t==null?void 0:t.metadata)==null?void 0:r.MediaModel)||"adapter-gated"}`,`- Aspect: ${((d=t==null?void 0:t.metadata)==null?void 0:d.AspectLabel)||((u=t==null?void 0:t.metadata)==null?void 0:u.AspectPresetId)||"auto"}`,`- Requested size: ${((p=t==null?void 0:t.metadata)==null?void 0:p.RequestedSize)||"auto"}`,"","Prompt draft:",e].join(`
|
|
34
|
-
`)}return[`Task: ${e}`,"","Local draft:","1. Clarify the paid offer in one sentence.","2. Pick one English-first channel and publish proof there.","3. Create a MindCanvas board that keeps source context, AI output, and next actions together.","4. Reuse the result as context for the next task."].join(`
|
|
35
|
-
`)}function Jb(e,t){const o=e.result||"",r=o.slice(0,ei),d=`${e.title||"AI Task"} result`;return{id:X("node"),kind:"markdown",title:d.slice(0,90),body:r,x:t.x,y:t.y,width:440,height:ue(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>ei),AdapterState:"local-reference"}}}function Zb(e,t){const o=wo(e.result||"",900);return{id:X("node"),kind:"ai-task",title:`Follow up: ${e.title||"AI result"}`.slice(0,90),body:["Continue from the linked AI result.","","Use the result as context and propose the next concrete action.","","Result preview:",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 Ud(e,t,o){var b,m,y,k,L;const r=Ii(ji(t)),d=new Set(e.edges.filter(v=>v.to===t.id||v.from===t.id).flatMap(v=>[v.from,v.to]).filter(v=>v!==t.id)),u=e.nodes.filter(v=>d.has(v.id)).slice(0,8),p=u.length>0?u.map(v=>[`### ${v.title||v.kind}`,`Type: ${v.kind}`,wo(v.result||v.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.",Bl(e.settings.appLanguage),"",`Board: ${e.name}`,`Task node: ${t.title}`,`Automation kind: ${r.kind}`,`External action policy: ${((b=t.metadata)==null?void 0:b.AutomationExternalActionPolicy)||"spec-only-until-review"}`,`Media model: ${((m=t.metadata)==null?void 0:m.MediaModel)||"adapter-gated"}`,`Aspect: ${((y=t.metadata)==null?void 0:y.AspectLabel)||((k=t.metadata)==null?void 0:k.AspectPresetId)||"auto"}`,`Requested size: ${((L=t.metadata)==null?void 0:L.RequestedSize)||"auto"}`,"","Instruction:",wo(o,4e3),"","Linked context:",p,"","Required sections:","- Subject","- Visual style","- Composition or scene","- Constraints","- Business use case","- Final generation prompt"].join(`
|
|
40
|
-
`):["You are running inside MindExec React MindCanvas.","Return a concise, practical Markdown result for the selected AI Task.","Do not modify files. Do not ask follow-up questions unless the task is impossible.",Bl(e.settings.appLanguage),"",`Board: ${e.name}`,`Task node: ${t.title}`,"","Instruction:",wo(o,4e3),"","Linked context:",p].join(`
|
|
41
|
-
`)}function Hc(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 ri(e){return[...e].sort(Hc)}function Qb(e,t){const o=new Map(e.nodes.filter(k=>k.kind==="ai-task").map(k=>[k.id,k])),r=new Set([...t].filter(k=>o.has(k))),d=new Map,u=new Map;for(const k of r)d.set(k,new Set),u.set(k,0);for(const k of e.edges){if(!r.has(k.from)||!r.has(k.to)||k.from===k.to)continue;const L=d.get(k.from);!L||L.has(k.to)||(L.add(k.to),u.set(k.to,(u.get(k.to)??0)+1))}const p=[],b=new Set,m=ri([...r].filter(k=>(u.get(k)??0)===0).map(k=>o.get(k)));for(;m.length>0;){const k=m.shift();if(b.has(k.id))continue;b.add(k.id),p.push(k);const L=[...d.get(k.id)??[]].map(v=>o.get(v)).filter(v=>!!v);for(const v of L)u.set(v.id,Math.max(0,(u.get(v.id)??0)-1)),(u.get(v.id)??0)===0&&m.push(v);m.sort(Hc)}const y=ri([...r].filter(k=>!b.has(k)).map(k=>o.get(k)).filter(Boolean));return[...p,...y]}function ii(e,t){var p,b;const o=new Set(e.nodes.filter(m=>m.kind==="ai-task").map(m=>m.id));if(!o.has(t))return[];const r=new Map;for(const m of o)r.set(m,new Set);for(const m of e.edges)!o.has(m.from)||!o.has(m.to)||((p=r.get(m.from))==null||p.add(m.to),(b=r.get(m.to))==null||b.add(m.from));const d=new Set,u=[t];for(;u.length>0;){const m=u.pop();if(!d.has(m)){d.add(m);for(const y of r.get(m)??[])d.has(y)||u.push(y)}}return Qb(e,d)}function ey(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 ri(e.nodes.filter(u=>u.kind==="ai-task"))){if(!o.has(d.id))continue;const u=ii(e,d.id);for(const p of u)o.delete(p.id);r.push(u)}return r}function ko(e,t,o){const r=tc(t,e,o),d=t==="Image"?e.imageRouterImageAspectPresetId:e.imageRouterVideoAspectPresetId,u=Or(t,r,d);return{mode:t,model:r,aspect:u,aspectOptions:mp(r,t),requestedSize:Fr(u)}}function Ni(e,t,o){const r=ko(e,t,o);return{InputMode:t,AppLanguage:Zd(e.appLanguage),MediaPromptLanguageInstruction:pp(e.appLanguage),AdapterState:"adapter-gated",MediaModel:r.model.id,MediaProvider:r.model.provider,AspectPresetId:r.aspect.id,AspectLabel:r.aspect.label,RequestedSize:r.requestedSize}}function ty(e){const t=ga(e.id);if(!t)return null;const o=ay(e.provider,t);return{id:t,label:e.displayName||e.label||t,displayName:e.displayName||e.label||t,description:e.description,provider:o,supportsReasoning:e.supportsReasoning,isFallback:e.isFallback,vendorPricing:Wc(e.vendorPricing),source:e.source}}function Hd(e,t){const o=ec(t,e.id);if(!o)return null;const r=Array.isArray(e.supportedSizes)&&e.supportedSizes.length>0?e.supportedSizes:t==="Image"?["custom"]:[];return{id:o,label:e.displayName||e.label||o,displayName:e.displayName||e.label||o,description:e.description,provider:ny(e.provider,o),mode:t,supportedSizes:r,supportedSeconds:e.supportedSeconds??[],supportsReasoning:e.supportsReasoning,isFallback:e.isFallback,vendorPricing:Wc(e.vendorPricing),source:e.source}}function Wc(e){if(!e)return null;const t=String(e.source||"").trim()||"catalog";return{promptUsdPerToken:wn(e.promptUsdPerToken),completionUsdPerToken:wn(e.completionUsdPerToken),requestUsd:wn(e.requestUsd),minUsd:wn(e.minUsd),averageUsd:wn(e.averageUsd),maxUsd:wn(e.maxUsd),source:t}}function wn(e){const t=Number(e);return Number.isFinite(t)?t:void 0}function ay(e,t){const o=String(e||"").trim().toLowerCase();return o==="codex"?"codex":o==="ollama"?"ollama":o==="gemini-cli"||t.startsWith("gemini-")?"gemini-cli":t.startsWith("llama")?"ollama":"openrouter"}function ny(e,t){const o=String(e||"").trim().toLowerCase();return o==="codex"||t.startsWith("codex-image:")?"OpenAI Codex":o==="openai"?"OpenAI":o==="imagerouter"?"ImageRouter":e||li(t,"Saved")}function oy(e){return e.filter(o=>o.provider==="codex"&&!o.id.includes("/")&&!o.id.includes(":")).filter((o,r,d)=>d.findIndex(u=>u.id.toLowerCase()===o.id.toLowerCase())===r).slice(0,8).flatMap(o=>[{quality:"low",label:"Low"},{quality:"medium",label:"Mid"},{quality:"high",label:"High"}].map(({quality:r,label:d})=>({id:`codex-image:${o.id}:${r}`,label:`${o.displayName||o.label} Image - ${d}`,displayName:`${o.displayName||o.label} Image - ${d}`,provider:"OpenAI Codex",mode:"Image",supportedSizes:["1024x1024","1536x1024","1024x1536"],source:o.source||"codex"})))}function Br(e,t,o){return e.map(r=>{const d=ly(r),u=ry(r,t,o),p=cy(r,d);return{value:r.id,label:p,title:r.label||r.displayName||r.id,trailingLabel:u.displayLabel}})}function Wd(e){return e.map(t=>({value:t.id,label:t.label,title:t.note,detail:t.resolvedSize?`Size hint: ${t.resolvedSize}`:t.note,showAspectIcon:!!(t.width&&t.height),aspectIconWidth:t.width,aspectIconHeight:t.height}))}function sy(){return[{value:"Fast",label:"Fast",detail:"Lower reasoning effort"},{value:"Normal",label:"Normal",detail:"Balanced reasoning effort"},{value:"Deep",label:"Deep",detail:"Higher reasoning effort"}]}function ry(e,t,o){const r=iy(e,t,o),d=e.vendorPricing??fp(e.id);return bp({mode:t,provider:r,modelId:e.id,reasoningEffort:o.effort,vendorPricing:d})}function iy(e,t,o){const r=String(e.provider||"").trim().toLowerCase();return t==="Text"?r==="codex"?"openai-codex":r==="ollama"?"local-ollama":r==="gemini-cli"?"google-gemini-cli":o.aiProvider==="BYOK"?"byok":"managed-cloud":t==="Image"&&(r==="openai codex"||e.id.startsWith("codex-image:"))?"openai-codex":yp(o)}function ly(e){const t=String(e.provider||"").trim().toLowerCase();return t==="codex"||t==="openai codex"?"openai-codex-exec":t==="gemini-cli"?"google":t==="ollama"?"ollama":t==="openrouter"||t==="imagerouter"||t==="imagerouter"?li(e.id,t):li(e.id,t||"other")}function li(e,t){const o=String(e||"").trim();if(!o)return t;if(o.startsWith("codex-image:"))return"openai";const r=o.indexOf("/");if(r>0)return o.slice(0,r).toLowerCase();const d=o.indexOf(":");return d>0?o.slice(0,d).toLowerCase():t||o.toLowerCase()}function dy(e){switch(e){case"openai-codex-exec":return"OpenAI Codex";case"openai":return"OpenAI";case"google":return"Google";case"ollama":return"Ollama";case"imagerouter":return"ImageRouter";default:return e.replace(/[-_]+/g," ").replace(/\b\w/g,t=>t.toUpperCase())}}function cy(e,t){const o=String(e.displayName||e.label||e.id||"").trim(),r=o.toLowerCase()===e.id.toLowerCase()?Vd(e.id):o;return uy(r,t)||Vd(e.id)}function Vd(e){const t=String(e||"").trim();if(t.startsWith("codex-image:"))return t.slice(12);const o=t.indexOf("/");return o>0&&o<t.length-1?t.slice(o+1):t}function uy(e,t){const o=my(t);for(const r of o)for(const d of[" · ",": "," - "," - "," | "," / "," "]){const u=`${r}${d}`;if(e.toLowerCase().startsWith(u.toLowerCase()))return e.slice(u.length).trim()}return e}function my(e){switch(e){case"openai-codex-exec":return["OpenAI Codex","OpenAI"];case"openai":return["OpenAI"];case"google":return["Google"];case"anthropic":return["Anthropic"];case"runway":return["Runway"];default:return[dy(e)]}}function py(e){return{textModels:((e==null?void 0:e.textModels)??[]).map(ty).filter(t=>!!t),imageModels:((e==null?void 0:e.imageModels)??[]).map(t=>Hd(t,"Image")).filter(t=>!!t),videoModels:((e==null?void 0:e.videoModels)??[]).map(t=>Hd(t,"Video")).filter(t=>!!t)}}function gy(e){var r;const t=((r=e==null?void 0:e.exec)==null?void 0:r.availableModels)??[],o=[];return t.forEach((d,u)=>{var m,y;if(typeof d=="string"){const k=ga(d);if(!k)return;const L=Yd(k);o.push({id:k,label:L,displayName:L,provider:"codex",supportsReasoning:!0,source:((m=e==null?void 0:e.exec)==null?void 0:m.modelCatalogSource)||"localbridge-status",priority:u});return}const p=ga(d.id);if(!p)return;const b=String(d.displayName||"").trim()||Yd(p);o.push({id:p,label:b,displayName:b,description:d.description,provider:"codex",supportsReasoning:!0,isFallback:!1,source:((y=e==null?void 0:e.exec)==null?void 0:y.modelCatalogSource)||"localbridge-status",priority:Number.isFinite(Number(d.priority))?Number(d.priority):u})}),o.sort((d,u)=>d.priority-u.priority||d.id.localeCompare(u.id)).map(({priority:d,...u})=>u)}function Yd(e){return e.startsWith("gpt-")?`GPT-${e.slice(4).toUpperCase()}`:e}function Vc(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 hy(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 fy(e,t,o,r=8){if(!t.trim())return[];const d=yh(Vc(e)),u=new Map(e.map(p=>[p.id,p]));return xh(d,t,{limit:r,viewport:o}).hits.map(p=>u.get(p.nodeId)).filter(p=>!!p)}function Xd(e,t,o="none"){const r=new Set(t.nodes.map(u=>u.id)),d=e.filter((u,p)=>r.has(u)&&e.indexOf(u)===p);return d.length>0||o==="none"?d:t.nodes[0]?[t.nodes[0].id]:[]}function Gd(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('input,textarea,select,[contenteditable="true"],[contenteditable=""]'):!1}function by(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('button,a,[role="button"],[role="tab"],summary'):!1}function ms(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:ue(d,bs,ys)}}function Va(e){return typeof e=="string"?e.trim():""}function ps(e,t=34){const o=Va(e);if(!o)return"workspace";const u=o.replace(/\\/g,"/").split("/").filter(Boolean).slice(-2).join("/")||o;return u.length<=t?u:`...${u.slice(-(t-3))}`}function yy(){try{const e=window.localStorage.getItem(_c),t=e?JSON.parse(e):[];return Array.isArray(t)?t.map(Va).filter(Boolean).filter((o,r,d)=>d.findIndex(u=>u.toLowerCase()===o.toLowerCase())===r).slice(0,Dc):[]}catch{return[]}}function xy(e){const t=e.map(Va).filter(Boolean).filter((o,r,d)=>d.findIndex(u=>u.toLowerCase()===o.toLowerCase())===r).slice(0,Dc);try{window.localStorage.setItem(_c,JSON.stringify(t))}catch{}return t}function Cy(){try{return window.localStorage.getItem(Ec)==="full"?"full":"curated"}catch{return"curated"}}function Sy(e){try{window.localStorage.setItem(Ec,e)}catch{}}function Kd(e,t){return xy([e,...t.filter(o=>o.toLowerCase()!==e.toLowerCase())])}function _y({navigate:e,onSidebarActionsChange:t}){var dl,cl,ul,ml,pl,gl,hl,fl,bl,yl,xl,Cl,Sl,wl,kl;const[o,r]=g.useState(()=>$l(Rl(zl(Dm(Ml))))),[d,u]=g.useState([]),[p,b]=g.useState([]),[m,y]=g.useState(["node-agent-command"]),[k,L]=g.useState(""),[v,D]=g.useState(""),[B,$]=g.useState(0),[F,H]=g.useState([]),[W,ie]=g.useState(0),[se,Ne]=g.useState("idle"),[pe,ze]=g.useState("booting"),[At,Ue]=g.useState(null),[G,V]=g.useState(null),[de,te]=g.useState(null),[Mt,U]=g.useState(null),[He,Tt]=g.useState(null),[ge,We]=g.useState({...za}),[at,nt]=g.useState({...za}),[z,gt]=g.useState(()=>({width:window.innerWidth,height:window.innerHeight})),[ba,Xa]=g.useState(()=>Mr(o)??{x:0,y:0}),[ya,Dn]=g.useState(!1),[xa,Ga]=g.useState(()=>localStorage.getItem(hd)==="true"),[Me,Ka]=g.useState("local"),[Ve,Ca]=g.useState([]),[ve,fe]=g.useState(pt()?"idle":"blocked"),[Bs,Ae]=g.useState(null),[De,Te]=g.useState({status:"idle",textModels:[],imageModels:[],videoModels:[]}),[Rt,be]=g.useState(pt()?null:"Hosted LocalBridge access is off."),[ot,st]=g.useState(null),[Be,me]=g.useState(null),[Bn,Ze]=g.useState(()=>yy()),[Oe,Lt]=g.useState(!1),[Io,Ee]=g.useState(null),[Re,ht]=g.useState(null),[$t,Sa]=g.useState(!1),[qa,No]=g.useState("ready"),[Qt,On]=g.useState("Saved in this browser."),[rt,Ye]=g.useState(()=>vt()),Qe=g.useMemo(()=>Of(),[]),[wa,Ao]=g.useState(()=>hr()),ye=Qe.cloudBoards.canAttempt&&(wa==null?void 0:wa.source)==="supabase-provider-session",[ea,Ja]=g.useState([]),[Fn,Le]=g.useState(null),[Pt,Za]=g.useState(!1),[Qa,en]=g.useState(null),Xe=g.useMemo(()=>Oh({storedMode:Me,cloudConfigured:!0,cloudSessionAvailable:ye,cloudAccess:ye?{planKey:"provider",entitlementStatus:"active",currentBoardCount:ea.length,cloudBoardLimit:Number.MAX_SAFE_INTEGER,lockedBoardCount:0,canCreateBoard:!0}:null,bridgeProviderConfigured:!0,bridgeReachable:ve==="connected",hostedWebApp:!pt()&&!yn(),hostedLocalBridgeAccessEnabled:yn(),browserProviderConfigured:!0,browserLocalAvailable:!0,browserLocalAvailableWhenEmpty:!0,embeddedProviderConfigured:!1,supportsEmbeddedLocal:!1}),[ye,ea.length,ve,Me]),[Os,$n]=g.useState(null),[ka,tn]=g.useState(""),[ta,va]=g.useState(null),[Et,an]=g.useState(null),[ja,le]=g.useState(!1),[ft,aa]=g.useState(!1),[zt,Ut]=g.useState(null),[Ht,na]=g.useState(null),[bt,Fs]=g.useState(!1),[$s,Mo]=g.useState(!1),[Ia,zs]=g.useState(Cy),zn=g.useRef(new Map),Na=g.useMemo(()=>mr(o.settings.appLanguage),[o.settings.appLanguage]),[Aa,Wt]=g.useState(!1),[To,Ma]=g.useState(!1),[oa,Un]=g.useState("business"),[it,Hn]=g.useState(()=>{var s;const a=io("business",o.settings.appLanguage)??mr(o.settings.appLanguage)[0];return((s=es(a))==null?void 0:s.id)??null}),[Vt,sa]=g.useState(()=>{const a=io("business",o.settings.appLanguage)??mr(o.settings.appLanguage)[0],s=es(a);return lo(co(a,s==null?void 0:s.id,o.settings.appLanguage))}),[Wn,yt]=g.useState(null),[nn,on]=g.useState(!1),[je,Vn]=g.useState(()=>yd(o.id,o.name)),[he,et]=g.useState(null),[Ro,Lo]=g.useState(null),[Po,lt]=g.useState(!1),[Yt,Ta]=g.useState({}),[sn,ra]=g.useState(null),rn=g.useMemo(()=>{var l,c;const a=rt.find(h=>h.id===o.id),s={id:o.id,name:o.name,updatedAt:o.updatedAt,nodeCount:o.nodes.length,edgeCount:o.edges.length,sourceKind:(l=o.source)==null?void 0:l.kind,sourceBoardId:(c=o.source)==null?void 0:c.boardId,order:(a==null?void 0:a.order)??-1},i=new Map(rt.map(h=>[h.id,h]));return i.set(o.id,{...a,...s}),Array.from(i.values()).sort((h,C)=>{const S=typeof h.order=="number"?h.order:Number.MAX_SAFE_INTEGER,I=typeof C.order=="number"?C.order:Number.MAX_SAFE_INTEGER;return S!==I?S-I:String(C.updatedAt||"").localeCompare(String(h.updatedAt||""))}).slice(0,7)},[o,rt]),ne=g.useMemo(()=>io(oa,o.settings.appLanguage)??Na[0],[oa,o.settings.appLanguage,Na]),Ge=g.useMemo(()=>ne?co(ne,it,o.settings.appLanguage):null,[ne,o.settings.appLanguage,it]),ln=!!(ne&&(ne.options.length>0||!ne.quickCreateTemplateId)),Yn=g.useMemo(()=>ts(Ge,Vt),[Ge,Vt]),j=g.useRef(o),K=g.useRef(m),oe=g.useRef({...za}),Eo=g.useRef(z),Fe=g.useRef(ba),Xt=g.useRef(null),Gt=g.useRef(null),dn=g.useRef(null),cn=g.useRef(null),Xn=g.useRef(null),Gn=g.useRef(null),un=g.useRef(new Map),Kn=g.useRef(new $h),Ra=g.useRef(0),qn=g.useRef(null),mn=g.useRef(0),La=g.useRef(null),ia=g.useRef(!1),_e=g.useRef(0),Pe=g.useRef(0),Pa=g.useRef(0),Jn=g.useRef(0),Ea=g.useRef({}),pn=g.useRef(),gn=g.useRef(),x=g.useRef(null),_=g.useRef(null),re=g.useRef(0),xt=g.useRef(null),dt=g.useRef(0),Ct=g.useRef(!1),$e=g.useCallback(()=>{var s;const a=(s=Xt.current)==null?void 0:s.getBoundingClientRect();return{width:Math.max(1,(a==null?void 0:a.width)??window.innerWidth),height:Math.max(1,(a==null?void 0:a.height)??window.innerHeight)}},[]),Ke=g.useCallback((a,s)=>{var l;const i=(l=Xt.current)==null?void 0:l.getBoundingClientRect();return i?{x:a-i.left,y:s-i.top}:{x:a,y:s}},[]),St=g.useCallback(a=>{Ct.current=a,Fs(a)},[]),Ai=g.useCallback((a="keyboard")=>{zs(s=>{const i=s==="curated"?"full":"curated";return Sy(i),f.emit("canvas.functionToolbar.toggle",{mode:i,source:a}),i})},[]);g.useEffect(()=>(f.transitionTo("board-file-loading","mindcanvas-mount"),f.transitionTo("interactive-fullres","react-board-ready"),()=>f.transitionTo("disposed","mindcanvas-unmount")),[]),g.useEffect(()=>{const a=()=>Ao(hr());return window.addEventListener(Ol,a),window.addEventListener("storage",a),window.addEventListener("focus",a),()=>{window.removeEventListener(Ol,a),window.removeEventListener("storage",a),window.removeEventListener("focus",a)}},[]),g.useEffect(()=>{const a=()=>{const s=!!document.fullscreenElement;St(s),f.emit("canvas.fullscreen.changed",{active:s})};return document.addEventListener("fullscreenchange",a),()=>document.removeEventListener("fullscreenchange",a)},[St]),g.useEffect(()=>{const a=new Worker(new URL("/assets/mindCanvasSearchWorker-BzPMsHOB.js",import.meta.url),{type:"module"});return La.current=a,a.onmessage=s=>{var h,C,S,I,w,N,P,E,M;const i=s.data;if(i.type==="READY"){ia.current=!0,ze("ready"),f.emit("search.worker.ready");return}if(i.type!=="SEARCH_RESULT")return;if(i.seq!==mn.current){f.emit("async.staleIgnored",{path:"search.worker",seq:i.seq});return}const l=new Map(j.current.nodes.map(T=>[T.id,T])),c=i.hits.map(T=>l.get(T.nodeId)).filter(T=>!!T);H(c),ie(0),Ne("worker"),f.emit("search.completed",{query:i.query,count:c.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:(I=i.profile)==null?void 0:I.rankedCount,viewportBoosted:(w=i.profile)==null?void 0:w.viewportBoosted,boostedCount:(N=i.profile)==null?void 0:N.boostedCount,indexedTokenCount:(P=i.profile)==null?void 0:P.indexedTokenCount,indexedPrefixCount:(E=i.profile)==null?void 0:E.indexedPrefixCount,indexedNGramCount:(M=i.profile)==null?void 0:M.indexedNGramCount})},a.onerror=s=>{ia.current=!1,ze("failed"),f.emit("search.worker.failed",{message:s.message})},()=>{a.terminate(),La.current=null,ia.current=!1}},[]),g.useEffect(()=>{const a=()=>{const l=$e();Eo.current=l,gt(c=>Math.abs(c.width-l.width)<.5&&Math.abs(c.height-l.height)<.5?c:l)};a();const s=typeof ResizeObserver>"u"?null:new ResizeObserver(a),i=Xt.current;return s&&i&&s.observe(i),window.addEventListener("resize",a),()=>{s==null||s.disconnect(),window.removeEventListener("resize",a)}},[$e]),g.useEffect(()=>(j.current=o,No("syncing"),On("Saving board state to this browser."),window.clearTimeout(pn.current),pn.current=window.setTimeout(()=>{const a=qt(Ua(j.current,Fe.current));Ye(vt()),No(a?"ready":"error"),On(a?"Saved in this browser.":"Local browser storage failed.")},280),()=>window.clearTimeout(pn.current)),[o]),g.useEffect(()=>{const a=La.current;if(!a)return;const s=window.setTimeout(()=>{a.postMessage({type:"REBUILD_BOARD",boardId:o.id,nodes:Vc(o.nodes)}),f.emit("search.worker.synced",{boardId:o.id,count:o.nodes.length})},160);return()=>window.clearTimeout(s)},[o.id,o.nodes]),g.useEffect(()=>{K.current=m},[m]),g.useEffect(()=>{const a=Mr(j.current)??{x:0,y:0};Fe.current=a,Xa(a),f.emit("canvas.cursor.restore",{boardId:j.current.id,x:Math.round(a.x),y:Math.round(a.y),source:j.current.viewState?"board-view-state":"default"})},[o.id]),g.useEffect(()=>{f.emit("canvas.gridMode.applied",{boardId:o.id,gridType:Lr(o.settings.gridType),gridSnap:o.settings.gridSnap??!0})},[o.id,o.settings.gridSnap,o.settings.gridType]),g.useEffect(()=>()=>{document.body.classList.remove("is-selecting"),document.body.classList.remove("is-panning"),window.clearTimeout(gn.current)},[]);const Z=g.useCallback((a,s=!0)=>{oe.current=a,We(a),dn.current&&(dn.current.style.transform=`translate3d(${a.x}px, ${a.y}px, 0) scale(${a.scale})`),Gt.current&&(Gt.current.style.setProperty("--grid-x",`${a.x}px`),Gt.current.style.setProperty("--grid-y",`${a.y}px`),Gt.current.style.setProperty("--grid-small",`${24*a.scale}px`),Gt.current.style.setProperty("--grid-large",`${144*a.scale}px`)),window.clearTimeout(gn.current),gn.current=window.setTimeout(()=>nt(a),Mf),s&&f.emit("camera.patch",{...a})},[]),_t=g.useCallback(async()=>{var i;const a=++_e.current;if(fe("checking"),Ae(null),be(null),f.emit("runtimeStatus.bridge.refresh.requested",{source:"mindcanvas"}),!pt()){fe("blocked"),Ae(null),Ca([]),be("Hosted LocalBridge access is off."),st(null),me("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:"refresh",reason:"hosted-access-off"});return}const s=await ua();if(a===_e.current){if(Ae(s.status??null),s.state!=="connected"){fe(s.state),Ca([]),be(s.message||"LocalBridge is unavailable."),st(null),me(s.message||"LocalBridge is unavailable.");return}try{const[l,c]=await Promise.all([Ll(s.baseUrl),Ig(s.baseUrl)]);if(a!==_e.current)return;const h=Va(l.rootPath||((i=s.status)==null?void 0:i.workspace));st(h||null),me(h?null:"LocalBridge workspace path is unavailable."),h&&Ze(C=>Kd(h,C)),fe("connected"),Ca(c),be(c.length>0?null:"No local boards found."),f.emit("projectStorage.workspace.refresh",{source:"board-list",path:h||null}),f.emit("localBridge.boards.listed",{count:c.length})}catch(l){if(a!==_e.current)return;fe("unavailable"),Ca([]);const c=l instanceof Error?l.message:String(l);be(c),me(c)}}},[]),Zn=g.useCallback(async(a="auto",s=!1)=>{var c,h,C,S;const i=Date.now();if(!s&&i-Jn.current<Lf)return;Jn.current=i;const l=++Pa.current;if(!pt()){Te(I=>({...I,status:"blocked",message:"Hosted LocalBridge access is off."})),f.emit("modelCatalog.refresh.blocked",{source:a,reason:"hosted-access-off"});return}Te(I=>({...I,status:"loading",message:void 0})),f.emit("modelCatalog.refresh.requested",{source:a,force:s});try{const I=await ua();if(l!==Pa.current)return;if(Ae(I.status??null),I.state!=="connected"){Te(T=>({...T,status:"error",message:I.message||"LocalBridge is unavailable."})),f.emit("modelCatalog.refresh.unavailable",{source:a,state:I.state,message:I.message});return}const w=xn(I.status),N=gy(I.status);let P=null;try{P=await Km(w,I.baseUrl)}catch(T){const R=T instanceof Error?T.message:String(T);if(N.length>0){Te({status:"ready",textModels:N,imageModels:[],videoModels:[],source:((h=(c=I.status)==null?void 0:c.exec)==null?void 0:h.modelCatalogSource)||"localbridge-status",updatedAt:(S=(C=I.status)==null?void 0:C.exec)==null?void 0:S.modelCatalogUpdatedAt,message:R}),f.emit("modelCatalog.refresh.statusFallback",{source:a,textModels:N.length,message:R});return}throw T}if(l!==Pa.current)return;const E=py(P);E.textModels=Pl(N,E.textModels);const M=P.errors&&P.errors.length>0?P.errors.join(" | "):void 0;Te({status:"ready",...E,source:P.source,updatedAt:P.updatedAt,message:M}),f.emit("modelCatalog.refresh.completed",{source:a,textModels:E.textModels.length,imageModels:E.imageModels.length,videoModels:E.videoModels.length,hasWarnings:!!M})}catch(I){if(l!==Pa.current)return;const w=I instanceof Error?I.message:String(I);Te(N=>({...N,status:"error",message:w})),f.emit("modelCatalog.refresh.failed",{source:a,message:w})}},[]);g.useEffect(()=>{pt()&&(_t(),Zn("mount",!0))},[Zn,_t]),g.useEffect(()=>{xa&&(Dn(!0),f.emit("mindcanvas.projectGallery.opened",{source:"startup"}))},[xa]);const Yc=g.useCallback(()=>{Dn(a=>{const s=!a;return s&&Ve.length===0&&ve!=="checking"&&_t(),f.emit(s?"mindcanvas.projectGallery.opened":"mindcanvas.projectGallery.closed",{source:"top-tab"}),s})},[Ve.length,ve,_t]),Dt=g.useCallback(a=>{Dn(s=>(s&&f.emit("mindcanvas.projectGallery.closed",{source:a}),!1))},[]),Xc=g.useCallback(a=>{Ga(a),localStorage.setItem(hd,String(a)),f.emit("mindcanvas.projectGallery.startupPreference",{enabled:a})},[]),Us=g.useCallback(async(a="manual")=>{if(Ao(hr()),!ye){const s=Qe.cloudBoards.canAttempt?"sign-in-required":Qe.cloudBoards.mode;Le(s==="sign-in-required"?"Login with Supabase is required before cloud boards can be listed.":"Cloud board adapter is not configured."),f.emit("projectStorage.cloud.unavailable",{reason:s,source:a});return}Za(!0),Le(null);try{const s=await Eg(hs());Ja(s),Le(s.length>0?`Loaded ${s.length} cloud board${s.length===1?"":"s"}.`:"No cloud boards yet.")}catch(s){Le(s instanceof Error?s.message:String(s))}finally{Za(!1)}},[ye,Qe.cloudBoards.canAttempt,Qe.cloudBoards.mode]),Mi=g.useCallback(a=>{Ka(a),f.emit("projectStorage.tab",{tab:a}),a==="cloud"&&Us("tab")},[Us]),Ti=g.useCallback(()=>{qm(!0),f.emit("runtimeStatus.bridge.hostedAccess.enabled"),_t()},[_t]),_o=g.useCallback(a=>{st(a),Ze(s=>Kd(a,s))},[]),Gc=g.useCallback(async(a="manual")=>{var i;const s=++Pe.current;if(me(null),f.emit("projectStorage.workspace.refresh.requested",{source:a}),!pt()){st(null),me("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:a,reason:"hosted-access-off"});return}try{const l=await ua();if(s!==Pe.current)return;if(Ae(l.status??null),l.state!=="connected"){fe(l.state),st(null),me(l.message||"LocalBridge is unavailable.");return}const c=await Ll(l.baseUrl);if(s!==Pe.current)return;const h=Va(c.rootPath||((i=l.status)==null?void 0:i.workspace));me(h?null:"LocalBridge workspace path is unavailable."),h&&_o(h),f.emit("projectStorage.workspace.refresh",{source:a,path:h||null})}catch(l){if(s!==Pe.current)return;me(l instanceof Error?l.message:String(l))}},[_o]),Hs=g.useCallback(async(a,s)=>{const i=Va(a);if(!i||Oe)return;const l=++Pe.current;if(Lt(!0),me("Switching LocalBridge workspace..."),f.emit("projectStorage.workspace.set.requested",{source:s,path:i}),!pt()){st(null),me("Hosted LocalBridge access is off."),Lt(!1),f.emit("projectStorage.workspace.blocked",{source:s,reason:"hosted-access-off"});return}try{const c=await ua();if(l!==Pe.current)return;if(Ae(c.status??null),c.state!=="connected"){fe(c.state),me(c.message||"LocalBridge is unavailable.");return}const h=xn(c.status);if(!h){fe("unavailable"),me("LocalBridge write token is unavailable.");return}const C=await Jm(i,h,c.baseUrl);if(l!==Pe.current)return;const S=Va(C.workspace||i);_o(S),fe("connected"),me(`Local workspace set to ${ps(S)}.`),f.emit("projectStorage.workspace.set",{source:s,path:S}),_t()}catch(c){if(l!==Pe.current)return;fe("unavailable"),me(c instanceof Error?c.message:String(c))}finally{l===Pe.current&&Lt(!1)}},[Oe,_t,_o]),Kc=g.useCallback(async()=>{const a=++Pe.current;if(Lt(!0),me("Opening folder picker..."),f.emit("projectStorage.workspace.browse.requested",{path:ot||null}),!pt()){st(null),me("Hosted LocalBridge access is off."),Lt(!1),f.emit("projectStorage.workspace.blocked",{source:"browse",reason:"hosted-access-off"});return}try{const s=await ua();if(a!==Pe.current)return;if(Ae(s.status??null),s.state!=="connected"){fe(s.state),me(s.message||"LocalBridge is unavailable.");return}const i=xn(s.status),l=await Zm(ot,i,s.baseUrl);if(a!==Pe.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}),Lt(!1),await Hs(l.path,"browse")}catch(s){if(a!==Pe.current)return;me(s instanceof Error?s.message:String(s))}finally{a===Pe.current&&Lt(!1)}},[Hs,ot]),qc=g.useCallback(async()=>{var s,i;const a=++_e.current;if(Sa(!0),be(null),(s=j.current.source)!=null&&s.partialImport){be("This imported board came from a partial original payload, so export is blocked to avoid data loss."),Sa(!1);return}if((i=j.current.source)!=null&&i.truncated){be("This imported board was truncated, so export is blocked to avoid data loss."),Sa(!1);return}if(!pt()){fe("blocked"),Ae(null),be("Hosted LocalBridge access is off."),Sa(!1);return}try{const l=await ua();if(a!==_e.current)return;if(Ae(l.status??null),l.state!=="connected"){fe(l.state),be(l.message||"LocalBridge is unavailable.");return}const c=xn(l.status);if(!c){fe("unavailable"),be("LocalBridge write token is unavailable.");return}const h=await Ag(j.current,oe.current,c,l.baseUrl,Fe.current);if(a!==_e.current)return;const C=Ua({...j.current,nodes:h.nodes,source:h.source,updatedAt:h.metadata.UpdatedAt||new Date().toISOString()},Fe.current);r(C),qt(C),Ye(vt()),fe("connected"),Ca(S=>[h.metadata,...S.filter(I=>I.Id!==h.metadata.Id)]),be(`Exported "${tt(h.metadata.Title)}" to LocalBridge.`)}catch(l){if(a!==_e.current)return;fe("unavailable"),be(l instanceof Error?l.message:String(l))}finally{a===_e.current&&Sa(!1)}},[]),qe=g.useCallback((a,s,i={})=>{const l=zl(a),c=Rl(l),h=$l(c);u(C=>$a(C,j.current,{description:"Activate board"})),b([]),r(h),y(h.nodes[0]?[h.nodes[0].id]:[]),te(null),Tt(null),V(null),Dt("board-activate"),f.emit(s,{boardId:h.id,...i})},[Dt]),Ri=g.useCallback(()=>{const a=zd(j.current.settings);qe(a,"board.local.create"),Z({x:540,y:210,scale:1})},[qe,Z]),Jc=g.useCallback(async a=>{if(!ye){Le("Login with Supabase is required before cloud boards can be opened."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:"load-board"});return}en(a.id),Le(null);try{const s=await _g(hs(),a.id,j.current.settings);if(!s){Le("Cloud board was not found or is not available to this user.");return}qe(s,"board.cloud.switch",{sourceBoardId:a.id}),Z({x:540,y:210,scale:1})}catch(s){Le(s instanceof Error?s.message:String(s))}finally{en(null)}},[qe,Z,ye]),Do=g.useCallback(async(a,s)=>{if(!ye){Le("Login with Supabase is required before cloud boards can be saved."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:s});return}Za(!0),Le(null);try{const i=await Dg(hs(),a,oe.current,Fe.current);if(!i){Le("Cloud board save did not return a board.");return}const l=new Date().toISOString(),c=Ua({...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}},Fe.current);r(c),qt(c),Ye(vt()),Ja(h=>[i,...h.filter(C=>C.id!==i.id)]),Le(`Saved "${tt(i.name)}" to cloud.`)}catch(i){Le(i instanceof Error?i.message:String(i))}finally{Za(!1)}},[ye]),Zc=g.useCallback(()=>{Do(j.current,"save-current")},[Do]),Qc=g.useCallback(()=>{const a=zd(j.current.settings);Do(a,"new-cloud-board")},[Do]),eu=g.useCallback(()=>{var l;if(!ne)return;if(ne.options.length>0||!ne.quickCreateTemplateId){const c=oe.current,h=$e(),C={x:(h.width/2-c.x)/c.scale,y:(h.height/2-c.y)/c.scale},S=j.current.nodes,I=S.length?Math.max(...S.map(T=>T.x+T.width)):C.x-280-cs,w=S.length?Math.min(...S.map(T=>T.y)):C.y-310,N=Qm(ne,it,I+cs,w,Vt,j.current.settings.appLanguage);r(T=>{var R;return u(J=>$a(J,T,{description:"Create template card"})),b([]),f.emit("templateCard.node.create",{id:N.id,launcherId:ne.id,optionId:((R=N.metadata)==null?void 0:R.templateLauncherSelectedOptionId)??null,source:"launcher-panel"}),{...T,nodes:[...T.nodes,N],updatedAt:new Date().toISOString()}}),y([N.id]);const P=Math.min(oe.current.scale,ue((h.height-190)/N.height,.72,1)),E=Math.max(320,h.height-180);Z({...oe.current,scale:P,x:h.width/2-(N.x+N.width/2)*P,y:48+E/2-(N.y+N.height/2)*P}),U(N.id),window.setTimeout(()=>U(T=>T===N.id?null:T),1e3),Wt(!1),yt(null);const M="Template card added to the current canvas.";Ee(M),window.setTimeout(()=>{Ee(T=>T===M?null:T)},2200),f.emit("templateCard.node.focus",{nodeId:N.id,launcherId:ne.id});return}const s=ts(Ge,Vt);if(s){yt(s),f.emit("template.validation.failed",{launcherId:ne.id,optionId:it,templateId:(Ge==null?void 0:Ge.id)??null,message:s});return}const i=ep(ne,it,Vt,j.current.settings);if(!i){const c="Template could not be created.";yt(c),f.emit("template.validation.failed",{launcherId:ne.id,optionId:it,templateId:(Ge==null?void 0:Ge.id)??null,message:c});return}qe(i.board,"template.board.create",{launcherId:i.launcher.id,optionId:((l=i.option)==null?void 0:l.id)??null,templateId:i.template.id,nodes:i.board.nodes.length}),Z({x:540,y:210,scale:1}),Wt(!1),yt(null)},[qe,Ge,ne,Z,$e,it,Vt]),Li=g.useCallback(a=>{if(a===j.current.id){Dt("stored-board-current");return}const s=Bm(a);s&&(qe(s,"board.local.switch"),Z({x:540,y:210,scale:1}))},[qe,Z,Dt]),Ws=g.useCallback((a,s="unknown")=>{if(a===j.current.id){f.emit("board.tabs.closeIgnored",{boardId:a,source:s,reason:"active-board"});return}f.emit("board.tabs.close",{boardId:a,source:s}),Om(a),Ye(vt())},[]),tu=g.useCallback((a,s)=>{if(!a||!s||a===s)return;qt(Ua(j.current,Fe.current));const i=vt(),l=rn.map(N=>N.id),c=l.indexOf(a),h=l.indexOf(s);if(c<0||h<0)return;const C=[...l],S=C.splice(c,1)[0];if(!S)return;C.splice(h,0,S);const I=i.map(N=>N.id).filter(N=>!C.includes(N)),w=Fm([...C,...I]);Ye(w),f.emit("board.tabs.drop",{sourceId:a,targetId:s,visibleIds:C})},[rn]),au=g.useCallback(async a=>{const s=++_e.current;ht(a.Id),be(null);try{const i=await Mg(a,j.current.settings);if(s!==_e.current)return;qe(i,"board.localBridge.switch",{sourceBoardId:a.Id});const l=Hr(a.LastCameraX,a.LastCameraY,a.LastCameraZ);Z(l?{...l,scale:ue(l.scale,bs,ys)}:{x:540,y:210,scale:1})}catch(i){if(s!==_e.current)return;be(i instanceof Error?i.message:String(i))}finally{s===_e.current&&ht(null)}},[qe,Z]),nu=g.useCallback(()=>{var a;(a=Gn.current)==null||a.click()},[]),ou=g.useCallback(async a=>{var i;const s=Array.from(a??[]).filter(l=>/\.json$/i.test(l.name));if(s.length===0){Ee("Choose a React or MindExec board JSON file."),window.setTimeout(()=>Ee(null),1800);return}try{const l=await Promise.all(s.map(async N=>({file:N,payload:JSON.parse(await N.text())}))),c=l.find(Dr),h=Bb(l),C=l.find(N=>!Dr(N)&&_r(N.payload))??l.find(N=>!Dr(N)&&uc(N.payload)>0);if(!C)throw new Error("No board JSON file was found.");const S=_r(C.payload)?null:Ob(C,h),I=S?Hr(S.metadata.LastCameraX,S.metadata.LastCameraY,S.metadata.LastCameraZ):null,w=_r(C.payload)?Db(C.payload,C.file.name):pc(C.payload,j.current.settings,{boardId:(S==null?void 0:S.metadata.Id)??Rs(C.file.name),title:(S==null?void 0:S.metadata.Title)||Rs(C.file.name),updatedAt:S==null?void 0:S.metadata.UpdatedAt,layoutPayload:c==null?void 0:c.payload,cameraBookmarks:S==null?void 0:S.metadata.CameraBookmarks,lastCursorX:S==null?void 0:S.metadata.LastCursorX,lastCursorY:S==null?void 0:S.metadata.LastCursorY});if(w.nodes.length===0)throw new Error("The selected file did not contain any importable board nodes.");qe(w,"board.import.file",{fileName:C.file.name,layoutFileName:(c==null?void 0:c.file.name)??null,metadataFileName:(S==null?void 0:S.fileName)??null,nodes:w.nodes.length,edges:w.edges.length,sourceKind:((i=w.source)==null?void 0:i.kind)??null,originalBoardId:(S==null?void 0:S.metadata.Id)??null,cameraRestored:!!I}),qt(w),Ye(vt()),Z(I?{...I,scale:ue(I.scale,bs,ys)}:{x:540,y:210,scale:1}),Ee(`Imported "${tt(w.name)}".`),window.setTimeout(()=>Ee(null),2200)}catch(l){const c=l instanceof Error?l.message:String(l);Ee(`Import failed: ${c}`),f.emit("board.import.failed",{message:c}),window.setTimeout(()=>Ee(null),3200)}},[qe,Z]);g.useEffect(()=>{Z(oe.current,!1)},[Z]);const wt=g.useCallback((a,s)=>{const i=oe.current,l=Ke(a,s);return{x:(l.x-i.x)/i.scale,y:(l.y-i.y)/i.scale}},[Ke]),Bo=g.useCallback((a,s,i={})=>{if(!wd(a))return null;const l=i.snap??j.current.settings.gridSnap??!0,c=Zf(a,l);if(Fe.current=c,Xa(c),r(h=>{const C=Mr(h);return C&&C.x===c.x&&C.y===c.y?h:{...Ua(h,c),updatedAt:new Date().toISOString()}}),f.emit("canvas.cursor.update",{reason:s,x:Math.round(c.x),y:Math.round(c.y),snapped:l,cameraTraceMode:j.current.settings.cameraTraceMode??"none"}),i.moveCamera&&i.cameraTarget&&wd(i.cameraTarget)){const h=oe.current.scale,C=$e();Z({...oe.current,x:C.width/2-i.cameraTarget.x*h,y:C.height/2-i.cameraTarget.y*h}),f.emit("canvas.cursor.cameraTrace",{reason:s,targetX:Math.round(i.cameraTarget.x),targetY:Math.round(i.cameraTarget.y)})}return c},[Z,$e]),Oo=g.useCallback((a,s,i)=>{const l=wt(a,s);return!!Bo(l,i,{snap:j.current.settings.gridSnap??!0})},[wt,Bo]),ke=g.useCallback((a,s,i={})=>{var N;const l=i.width??300,c=i.height??160,h=Number.isFinite(a)&&Number.isFinite(s);if(!h&&(i.preferCursor??!0)&&j.current.settings.cursorMode==="lastNode")return{...Fe.current};const C=(N=Xt.current)==null?void 0:N.getBoundingClientRect(),S=C?C.left+C.width/2:window.innerWidth/2,I=i.centerClientY??(C?C.top+C.height/2:window.innerHeight/2),w=h?wt(a,s):wt(S,I);return{x:w.x-l/2,y:w.y-c/2}},[wt]),xe=g.useCallback((a,s)=>{const i=j.current.settings.cursorDirection==="down"?"down":"right",l=i==="down"?{x:a.x,y:a.y+a.height+fd}:{x:a.x+a.width+fd,y:a.y};Bo(l,s,{cameraTarget:Tr(a),moveCamera:j.current.settings.cameraTraceMode==="cursor",snap:j.current.settings.gridSnap??!0}),f.emit("canvas.cursor.moveAfterNodePlacement",{reason:s,nodeId:a.id,direction:i,nextX:Math.round(l.x),nextY:Math.round(l.y)})},[Bo]),su=g.useCallback(a=>{ws(a.target)||(x.current={clientX:a.clientX,clientY:a.clientY})},[]),O=g.useCallback((a,s,i={})=>{r(l=>{u(h=>$a(h,l,{description:s,mergeKey:typeof i.mergeKey=="string"?i.mergeKey:null})),b([]);const c=a(l);return f.emit(s,i),{...c,updatedAt:new Date().toISOString()}})},[]);g.useEffect(()=>{const a=Sp();if(!a)return;const{sourceNode:s,itemNodes:i,taskNode:l,edges:c}=wp(a,{...ke(void 0,void 0,{width:780,height:290})});if(j.current.nodes.some(h=>{var C;return((C=h.metadata)==null?void 0:C.ToolHandoffId)===a.id})){Fl(a.id),f.emit("tool.handoff.duplicateIgnored",{handoffId:a.id,toolKey:a.toolKey});return}O(h=>({...h,nodes:[...h.nodes,s,...i,l],edges:[...h.edges,...c]}),"tool.handoff.consumed",{handoffId:a.id,toolKey:a.toolKey,createdNodes:2+i.length,resultItems:i.length}),Fl(a.id),y([l.id]),U(l.id),xe(l,"tool.handoff.consumed"),window.setTimeout(()=>U(h=>h===l.id?null:h),1400)},[O,ke,xe]);const hn=g.useCallback((a,s,i={})=>{r(l=>{const c=a(l);return f.emit(s,i),{...c,updatedAt:new Date().toISOString()}})},[]),Vs=g.useCallback(a=>{const s=a.slice(0,90);hn(i=>({...i,name:s}),"board.rename",{boardId:j.current.id})},[hn]),Ie=g.useCallback((a,s="inline")=>{const i=typeof a.appLanguage=="string"?{...a,appLanguage:Zd(a.appLanguage)}:a;if(hn(l=>{const c={...l.settings,...i};if(typeof i.appLanguage=="string"){const h=tp(l.nodes,c.appLanguage);return h.changed&&f.emit("template.localization.relocalized",{appLanguage:h.language,nodeCount:h.nodes.length,source:s}),{...l,settings:c,nodes:h.nodes}}return{...l,settings:c}},"settings.patch",{keys:Object.keys(i),source:s}),typeof i.appLanguage=="string"){const l=ap(i.appLanguage);f.emit("appLanguage.select",{appLanguage:l,source:s})}if(typeof i.model=="string"){const l=ga(i.model),c=Qd(l);f.emit("textModel.select",{model:l,provider:(c==null?void 0:c.provider)??"custom",source:s})}if(typeof i.executionMode=="string"||typeof i.directInstructionQueueMode=="string"){const l={...j.current.settings,...i};kp(l,s)}vp({...j.current.settings,...i})},[hn]),Pi=g.useCallback((a,s)=>{Ie({[a]:s},`inline.${String(a)}`)},[Ie]),Fo=g.useMemo(()=>Pl(np,De.textModels),[De.textModels]),Ei=g.useMemo(()=>op(o.settings,Fo),[o.settings,Fo]),Bt=g.useMemo(()=>{const a=oy(Fo);return{Image:El("Image",uo("Image"),a,De.imageModels),Video:El("Video",uo("Video"),De.videoModels)}},[De.imageModels,De.videoModels,Fo]);g.useEffect(()=>{Ea.current=Bt},[Bt]);const Ys=g.useMemo(()=>ko(o.settings,"Image",Bt),[o.settings,Bt]),Xs=g.useMemo(()=>ko(o.settings,"Video",Bt),[o.settings,Bt]),ru=ga(o.settings.model),iu=g.useMemo(()=>Br(Ei,"Text",o.settings),[o.settings,Ei]),lu=g.useMemo(()=>Br(uo("Image",Bt),"Image",o.settings),[o.settings,Bt]),du=g.useMemo(()=>Br(uo("Video",Bt),"Video",o.settings),[o.settings,Bt]),cu=g.useMemo(()=>Wd(Ys.aspectOptions),[Ys.aspectOptions]),uu=g.useMemo(()=>Wd(Xs.aspectOptions),[Xs.aspectOptions]),mu=g.useMemo(()=>sy(),[]),pu=g.useCallback((a,s="bottom-input")=>{const i=ga(a);Ie({model:i},`connection.model.${s}`)},[Ie]),gu=g.useCallback((a,s)=>{const i=ec(a,s),l=uo(a,Ea.current).find(I=>I.id===i);if(!l)return;const c=j.current.settings,h=a==="Image"?c.imageRouterImageAspectPresetId:c.imageRouterVideoAspectPresetId,C=Or(a,l,h),S=a==="Image"?{imageRouterImageModel:l.id,imageRouterImageAspectPresetId:C.id}:{imageRouterVideoModel:l.id,imageRouterVideoAspectPresetId:C.id};Ie(S,`inline.${a.toLowerCase()}Model`),f.emit("media.model.select",{mode:a,model:l.id,aspectPresetId:C.id,requestedSize:Fr(C)})},[Ie]),hu=g.useCallback((a,s)=>{const i=tc(a,j.current.settings,Ea.current),l=Or(a,i,s),c=a==="Image"?{imageRouterImageAspectPresetId:l.id}:{imageRouterVideoAspectPresetId:l.id};Ie(c,`inline.${a.toLowerCase()}Aspect`),f.emit("media.aspect.select",{mode:a,model:i.id,aspectPresetId:l.id,requestedSize:Fr(l)})},[Ie]),fu=g.useCallback(()=>{le(!0),f.emit("settings.dialog.open",{boardId:j.current.id})},[]),bu=g.useCallback(()=>{le(!1),f.emit("settings.dialog.close",{boardId:j.current.id})},[]),_i=g.useCallback(()=>{aa(!0),f.emit("promptDebug.open",{boardId:j.current.id})},[]),yu=g.useCallback(()=>{aa(!1),f.emit("promptDebug.close",{boardId:j.current.id})},[]);g.useEffect(()=>()=>{t==null||t([])},[t]),g.useEffect(()=>{t&&t([{id:"mindcanvas-prompt-debug",label:"Prompt Debugger",description:"Inspect prompt and local diagnostics",icon:Op,onClick:_i,active:ft,testId:"prompt-debug-open"}])},[t,_i,ft]);const xu=g.useCallback(a=>{const s=j.current.settings.appLanguage,i=io(a,s);if(!i)return;const l=es(i),c=co(i,l==null?void 0:l.id,s);Un(i.id),Hn((l==null?void 0:l.id)??null),sa(lo(c)),yt(null),f.emit("template.launcher.select",{launcherId:i.id,optionId:(l==null?void 0:l.id)??null,templateId:(c==null?void 0:c.id)??null})},[]),Cu=g.useCallback(()=>{const a=j.current.settings.appLanguage,s=io(oa,a)??Na[0];if(!s)return;const i=es(s,it),l=co(s,i==null?void 0:i.id,a);Un(s.id),Hn((i==null?void 0:i.id)??null),sa(c=>Object.keys(c).length>0?c:lo(l)),yt(null),on(!1),lt(!1),Wt(!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})},[oa,it,Na]),Su=g.useCallback(()=>{Wt(!1),yt(null),f.emit("template.launcher.close",{launcherId:oa})},[oa]),wu=g.useCallback(a=>{if(!ne)return;const s=co(ne,a,j.current.settings.appLanguage);Hn(a),sa(lo(s)),yt(null),f.emit("template.option.select",{launcherId:ne.id,optionId:a,templateId:(s==null?void 0:s.id)??null})},[ne]),ku=g.useCallback((a,s)=>{sa(i=>({...i,[a]:s})),Wn&&yt(null),f.emit("template.input.patch",{launcherId:ne==null?void 0:ne.id,key:a})},[ne==null?void 0:ne.id,Wn]),Je=g.useCallback(a=>{Lo(a),window.setTimeout(()=>{Lo(s=>s===a?null:s)},2600)},[]),vu=g.useCallback(()=>{Wt(!1),lt(!1),Ma(a=>{const s=!a;return f.emit(s?"templateStudio.chooser.open":"templateStudio.chooser.close",{boardId:j.current.id,studioOpen:nn}),s})},[nn]),Di=g.useCallback(()=>{Ma(!1),f.emit("templateStudio.chooser.close",{boardId:j.current.id})},[]),Bi=g.useCallback(()=>{const a=j.current;Wt(!1),lt(!1),Ma(!1),Vn(yd(a.id,a.name)),et(null),on(!0),f.emit("templateStudio.open",{boardId:a.id,nodeCount:a.nodes.length})},[]),$o=g.useCallback(a=>{const s=j.current,i=as(je,s.nodes);et(i),xd(s.id,je);const l=qt(Ua(s,Fe.current));return Ye(vt()),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},[je]),Oi=g.useCallback(()=>{$o("exit"),on(!1),Ma(!1),lt(!1),et(null),f.emit("templateStudio.close",{boardId:j.current.id})},[$o]),ju=g.useCallback(()=>{const a=Hb(j.current.settings),s=gs(a.name);Ma(!1),lt(!1),Vn(s),et(null),on(!0),xd(a.id,s),qt(a),Ye(vt()),qe(a,"templateStudio.board.create",{templateId:s.templateId,source:"template-studio-chooser"}),Z({x:540,y:210,scale:1}),f.emit("templateStudio.chooser.startNew",{boardId:a.id,templateId:s.templateId}),Je("New Template Studio draft board opened.")},[qe,Z,Je]),Iu=g.useCallback(()=>{Bi(),f.emit("templateStudio.chooser.convertCurrent",{boardId:j.current.id,nodes:j.current.nodes.length}),Je("Current board is now in Template Studio mode.")},[Bi,Je]),zo=g.useCallback((a,s)=>{Vn(i=>{const l={...i,[a]:a==="templateId"?bo(s):s};return f.emit("templateStudio.draft.patch",{key:a}),l}),et(null)},[]),Nu=g.useCallback(()=>{const a=$o("save");Je(a.issues.length>0?"Template draft saved with manifest issues.":"Template draft and board saved locally.")},[$o,Je]),Au=g.useCallback(a=>{const s=X("node"),i=_l(a),l=`${a.replace("template.","")}-${Date.now().toString(36)}`,c=a==="template.input",h=c?300:a==="template.prompt"?360:340,C=c?178:a==="template.prompt"?214:190,S=ke(void 0,void 0,{width:h,height:C}),I={[Y.studioNodeType]:a,[Y.templateNodeId]:l,[Y.templateRole]:a.replace(/^template\./,""),[Y.compileTarget]:i,Source:"template-studio"};c&&(I[Y.inputKey]=l,I[Y.inputType]="text",I[Y.inputRequired]="true");const w={id:s,kind:a==="template.prompt"?"ai-task":a==="template.section"?"markdown":"note",title:pr(a),body:c?"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,y:S.y,width:h,height:C,status:a==="template.prompt"?"idle":void 0,tags:["Template Studio",pr(a)],metadata:I};O(N=>({...N,nodes:[...N.nodes,w]}),"templateStudio.node.add",{id:w.id,studioNodeType:a,compileTarget:i}),y([w.id]),et(null),xe(w,"templateStudio.node.add")},[O,ke,xe]),Gs=g.useCallback(()=>{const a=as(je,j.current.nodes);return et(a),f.emit("templateStudio.compile",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length,issues:a.issues.length}),Je(a.issues.length>0?"Template manifest has issues.":"Template manifest compiled."),a},[Je,je]),Mu=g.useCallback(async()=>{const a=he??as(je,j.current.nodes);he||et(a);const s=await yo(a.manifestJson);f.emit("templateStudio.manifest.copy",{templateId:a.template.id,chars:a.manifestJson.length,method:s}),Je("Template manifest copied.")},[Je,je,he]),Tu=g.useCallback(()=>{const a=Gs();if(a.issues.length>0){lt(!1),f.emit("templateStudio.test.open.blocked",{templateId:a.template.id,issues:a.issues.length}),Je("Fix manifest issues before test create.");return}Ta(lo(a.template)),ra(null),lt(!0),f.emit("templateStudio.test.open",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length})},[Gs,Je]),Ru=g.useCallback(()=>{lt(!1),Ta({}),ra(null),f.emit("templateStudio.test.close",{templateId:(he==null?void 0:he.template.id)??null})},[he==null?void 0:he.template.id]),Lu=g.useCallback((a,s)=>{Ta(i=>({...i,[a]:s})),sn&&ra(null),f.emit("templateStudio.test.input.patch",{key:a})},[sn]),Pu=g.useCallback(()=>{const a=(he==null?void 0:he.issues.length)===0?he:as(je,j.current.nodes);if(et(a),a.issues.length>0){ra("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=ts(a.template,Yt);if(s){ra(s),f.emit("templateStudio.test.board.blocked",{templateId:a.template.id,message:s});return}const i=Cd(je),l=sp(i,void 0,a.template,Yt,j.current.settings);qt(l.board),qt(Ua(j.current,Fe.current)),Ye(vt()),lt(!1),Ta({}),Je(`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})},[Je,je,he,Yt]),Eu=g.useCallback((a,s)=>{y(i=>s?i.includes(a)?i.filter(l=>l!==a):[...i,a]:[a]),te(null)},[]),_u=g.useCallback(()=>{var c,h,C,S,I,w,N,P;const i=ke(void 0,void 0,{width:500,height:300,centerClientY:ue(window.innerHeight*.58,182,Math.max(182,window.innerHeight-150-96))}),l={id:X("node"),kind:"memo",title:"Agent",body:$f,x:i.x,y:i.y,width:500,height:300,tags:["Agent Command","Researcher","Draft"],metadata:Gb()};O(E=>({...E,nodes:[...E.nodes,l]}),"agentCommand.node.add",{id:l.id,semanticType:(c=l.metadata)==null?void 0:c.SemanticType,status:(h=l.metadata)==null?void 0:h.AgentCommandStatus,requestedRole:(C=l.metadata)==null?void 0:C.AgentCommandRequestedRole,adapterState:(S=l.metadata)==null?void 0:S.AdapterState}),f.emit("mindcanvas.agentCommand.add",{id:l.id,semanticType:(I=l.metadata)==null?void 0:I.SemanticType,status:(w=l.metadata)==null?void 0:w.AgentCommandStatus,requestedRole:(N=l.metadata)==null?void 0:N.AgentCommandRequestedRole,adapterState:(P=l.metadata)==null?void 0:P.AdapterState}),y([l.id]),te(null),U(l.id),xe(l,"agentCommand.node.add"),window.setTimeout(()=>U(E=>E===l.id?null:E),1200)},[O,ke,xe]),Du=g.useCallback(()=>{var c,h,C,S,I,w,N,P;const i=ke(void 0,void 0,{width:400,height:300,centerClientY:ue(window.innerHeight*.56,182,Math.max(182,window.innerHeight-150-96))}),l={id:X("node"),kind:"memo",title:"Code Note",body:Ff,x:i.x,y:i.y,width:400,height:300,tags:["Code Note","Draft","Unlinked"],metadata:Kb()};O(E=>({...E,nodes:[...E.nodes,l]}),"codeNote.node.add",{id:l.id,semanticType:(c=l.metadata)==null?void 0:c.SemanticType,status:(h=l.metadata)==null?void 0:h.CodeNoteStatus,syncState:(C=l.metadata)==null?void 0:C.CodeNoteSyncState,adapterState:(S=l.metadata)==null?void 0:S.AdapterState}),f.emit("mindcanvas.codeNote.add",{id:l.id,semanticType:(I=l.metadata)==null?void 0:I.SemanticType,status:(w=l.metadata)==null?void 0:w.CodeNoteStatus,syncState:(N=l.metadata)==null?void 0:N.CodeNoteSyncState,adapterState:(P=l.metadata)==null?void 0:P.AdapterState}),y([l.id]),te(null),U(l.id),xe(l,"codeNote.node.add"),window.setTimeout(()=>U(E=>E===l.id?null:E),1200)},[O,ke,xe]),Ce=g.useCallback((a,s)=>{var N,P,E,M,T,R,J,Se,mt;if(a==="remote-monitor"){const ae=j.current.nodes.find(Ha);if(ae){const bn=Tr(ae),Fa=oe.current.scale,Zo=$e(),Qo=jd(ae.height,window.innerHeight);Z({...oe.current,x:Zo.width/2-bn.x*Fa,y:Qo-bn.y*Fa}),y([ae.id]),U(ae.id),window.setTimeout(()=>U(ca=>ca===ae.id?null:ca),1e3);const ro="Remote monitor already exists on this board. Focused existing node.";Ee(ro),window.setTimeout(()=>{Ee(ca=>ca===ro?null:ca)},2200),f.emit("remoteMonitor.node.duplicateIgnored",{action:"toolbar-add",nodeId:ae.id,surface:"mindcanvas-node"});return}}const i=s?ki[s]:null,l=(i==null?void 0:i.mode)??(a==="image"?"Image":a==="video"?"Video":null),c=l?ko(j.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"?jd(C,window.innerHeight):window.innerHeight/2,I=ke(void 0,void 0,{width:h,height:C,centerClientY:S}),w={id:X("node"),kind:a,title:i?i.title:a==="ai-task"?"AI Task":a==="remote-monitor"?"Multi Desktop Monitor":a==="remote-control"?"Remote Device":a==="image"?"Image":a==="mask"?"Image Mask":a==="video"?"Video":a==="embed"?"Web Embed":a==="csv-table"?"CSV Table":a==="pdf"?"PDF Document":a==="file"?"File":a==="directory"?"Directory":a==="memo"?"Memo":a==="markdown"?"Markdown":a==="code"?"Code Note":"Note",body:i?i.body:a==="ai-task"?"Describe the work this task should perform.":a==="remote-monitor"?"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":a==="remote-control"?"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":a==="image"?"Describe the image to generate or attach the visual reference here.":a==="mask"?"Image edit mask reference. Attach or paste a mask image here.":a==="video"?"Describe the video shot, motion, and duration target here.":a==="embed"?"https://example.com/":a==="csv-table"?`Metric,Value,Stage
|
|
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:I.x,y:I.y,width:h,height:C,status:a==="ai-task"?"idle":void 0,tags:i?["AI Task",i.tag,"Spec only"]:a==="ai-task"?["AI Task"]:a==="remote-monitor"?["Remote","Monitor","LocalBridge"]:a==="remote-control"?["Remote","Control","LocalBridge"]:a==="mask"?["Mask","ImageRouter"]:a==="csv-table"?["CSV","Table"]:a==="embed"?["Embed","Web"]:a==="memo"?["Memo"]:a==="markdown"?["Markdown"]:a==="text"?["Text"]:[a],imageUrl:a==="image"||a==="mask"?"/assets/mindexecution-mindcanvas.png":void 0,assetUrl:a==="embed"?"https://example.com/":a==="pdf"?"https://example.com/document.pdf":a==="file"?"https://example.com/file":void 0,sourceFilePath:a==="directory"?ti:void 0,metadata:i?Xb(j.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?Ni(j.current.settings,l):void 0};O(ae=>({...ae,nodes:[...ae.nodes,w]}),"node.add",{id:w.id,kind:a,automationKind:i==null?void 0:i.kind,...c?{mode:c.mode,model:c.model.id,aspectPresetId:c.aspect.id,requestedSize:c.requestedSize}:{}}),i&&f.emit("automation.mediaNode.add",{id:w.id,kind:i.kind,mode:i.mode,model:(N=w.metadata)==null?void 0:N.MediaModel,aspectPresetId:(P=w.metadata)==null?void 0:P.AspectPresetId,requestedSize:(E=w.metadata)==null?void 0:E.RequestedSize,adapterState:((M=w.metadata)==null?void 0:M.AdapterState)??"adapter-gated",externalActionPolicy:((T=w.metadata)==null?void 0:T.AutomationExternalActionPolicy)??"spec-only-until-review"}),a==="remote-monitor"&&f.emit("remoteMonitor.node.add",{id:w.id,surface:"mindcanvas-node",width:w.width,height:w.height,adapterState:((R=w.metadata)==null?void 0:R.AdapterState)??"adapter-gated"}),a==="mask"&&f.emit("node.mask.add",{id:w.id,hasImage:!!w.imageUrl,imageRouterMask:((J=w.metadata)==null?void 0:J.ImageRouterMask)??"true",semanticType:((Se=w.metadata)==null?void 0:Se.SemanticType)??"ImageEditMask",adapterState:((mt=w.metadata)==null?void 0:mt.AdapterState)??"adapter-gated"}),y([w.id]),xe(w,"node.add")},[Z,O,ke,xe]),ee=g.useCallback((a,s)=>{hn(i=>({...i,nodes:i.nodes.map(l=>l.id===a?{...l,...s}:l)}),"node.patch",{id:a,keys:Object.keys(s)})},[hn]),Kt=g.useCallback((a,s)=>{const i=K.current[0],l=j.current.nodes.find(c=>c.id===i);l&&(ee(i,{metadata:{...l.metadata??{},[a]:a===Y.templateNodeId||a===Y.inputKey?bo(s):s}}),et(null),f.emit("templateStudio.node.metadata.patch",{id:i,key:a}))},[ee]),Fi=g.useCallback(a=>{var h;const s=K.current[0],i=j.current.nodes.find(C=>C.id===s);if(!i)return;const l=((h=i.metadata)==null?void 0:h[Y.templateNodeId])||bo(i.title),c={...i.metadata??{},[Y.studioNodeType]:a,[Y.templateNodeId]:l,[Y.templateRole]:a.replace(/^template\./,""),[Y.compileTarget]:_l(a,i)};a==="template.input"&&(c[Y.inputKey]=c[Y.inputKey]||bo(i.title),c[Y.inputType]=c[Y.inputType]||"text",c[Y.inputRequired]=c[Y.inputRequired]||"true"),ee(s,{metadata:c}),et(null),f.emit("templateStudio.node.role.assign",{id:s,studioNodeType:a})},[ee]),A=g.useCallback(a=>{Ee(a),window.setTimeout(()=>{Ee(s=>s===a?null:s)},2200)},[]),Bu=g.useCallback((a,s,i)=>{var w;const l=j.current.nodes.find(N=>N.id===a);if(!l)return;const c=Jd(l.body),h=rp(l,s,i,j.current.settings);if(!h||h.nodes.length===0){A("Template card could not generate nodes."),f.emit("templateCard.generate.blocked",{nodeId:a,optionId:s});return}O(N=>({...N,nodes:[...N.nodes,...h.nodes]}),"templateCard.generate",{nodeId:a,launcherId:h.launcher.id,optionId:((w=h.option)==null?void 0:w.id)??null,templateId:h.template.id,runId:h.runId,generatedCount:h.nodes.length});const C=h.nodes.map(N=>N.id);y(C),U(C[0]??null);const S=h.nodes[h.nodes.length-1];S&&xe(S,"templateCard.generate"),window.setTimeout(()=>U(N=>N===C[0]?null:N),1200);const I=c!=null&&c.generatedMessageFormat?c.generatedMessageFormat.replace("{0}",String(h.nodes.length)):`${h.nodes.length} template node${h.nodes.length===1?"":"s"} generated below the card.`;A(I)},[O,xe,A]),Ou=g.useCallback(a=>{const s=j.current.nodes.find(N=>N.id===a.sourceNodeId),i=560,l=390,c=ke(void 0,void 0,{width:i,height:l}),h=X("node"),C=s?s.x+s.width+cs:c.x,S=s?s.y:c.y,I={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&&(I.RemoteFleetLatestFramePath=a.framePath),a.frameUrl&&(I.RemoteFleetLatestFrameUrl=a.frameUrl),a.dataUrl&&(I.RemoteFleetLatestFrameDataUrl=a.dataUrl),a.frameSeq&&(I.RemoteFleetLatestFrameSeq=String(a.frameSeq));const w={id:h,kind:"remote-control",title:a.deviceName||"Remote Device",body:`Remote device control: ${a.deviceId}`,x:C,y:S,width:i,height:l,tags:["Remote","Control","LocalBridge"],metadata:I};O(N=>({...N,nodes:[...N.nodes,w]}),"remoteControl.node.add",{id:w.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId}),y([w.id]),xe(w,"remoteControl.node.add"),A(`Remote control node created for ${a.deviceName||a.deviceId}.`),f.emit("remoteControl.node.add",{nodeId:w.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId,connected:a.connected===!0})},[O,ke,xe,$e,A]),_a=g.useCallback(a=>{const s=ms(oe.current)??{...za};Ie({cameraBookmarks:{...j.current.settings.cameraBookmarks??{},[a]:s}},"camera.bookmark.save"),f.emit("camera.bookmark.save",{slot:a,...s}),A(`Camera slot ${a} saved.`)},[Ie,A]),Qn=g.useCallback(a=>{var l;const s=ms((l=j.current.settings.cameraBookmarks)==null?void 0:l[a]),i=s??{...za};Z(i),f.emit("camera.bookmark.goto",{slot:a,saved:!!s,...i}),A(s?`Camera slot ${a}.`:`Camera slot ${a} empty. Home view.`)},[Z,A]),Ks=g.useCallback(()=>{Z({...za}),f.emit("camera.bookmark.goto",{slot:"home",saved:!1,...za}),A("Home view.")},[Z,A]),$i=g.useCallback(a=>{const s=oe.current,i=Af,l={...s,x:a==="left"?s.x+i:a==="right"?s.x-i:s.x,y:a==="up"?s.y+i:a==="down"?s.y-i:s.y};Z(l),f.emit("camera.keyboard.pan",{direction:a,...l})},[Z]),zi=g.useCallback(()=>{const a=Xn.current;return a?(a.focus(),a.select(),f.emit("globalInput.focus",{source:"keyboard"}),!0):!1},[]),qs=g.useCallback((a="keyboard")=>{const s=!(j.current.settings.wheelMode??!1);Ie({wheelMode:s},`${a}.wheelMode.toggle`),f.emit("canvas.wheelMode.toggle",{source:a,wheelMode:s}),A(s?"Mouse wheel mode.":"Trackpad pan mode.")},[Ie,A]),Js=g.useCallback((a="keyboard")=>{const i=(j.current.settings.cursorDirection==="down"?"down":"right")==="down"?"right":"down";Ie({cursorDirection:i},`${a}.cursorDirection.toggle`),f.emit("canvas.cursorDirection.toggle",{source:a,cursorDirection:i}),A(i==="down"?"Cursor direction down.":"Cursor direction right.")},[Ie,A]),Uo=g.useCallback(async(a,s="api")=>{const i=a===!0;try{if(i){if(document.fullscreenElement)return St(!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 St(l),f.emit("canvas.fullscreen.toggle",{source:s,active:l,fallback:!1}),l}return St(!0),f.emit("canvas.fullscreen.toggle",{source:s,active:!0,fallback:!0}),!0}return document.fullscreenElement&&document.exitFullscreen&&await document.exitFullscreen(),St(!1),f.emit("canvas.fullscreen.toggle",{source:s,active:!1,fallback:!1}),!1}catch(l){return St(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}),A(i?"Read mode fallback.":"Read mode off."),i}},[St,A]),eo=g.useCallback((a="keyboard")=>Uo(!Ct.current,a),[Uo]);g.useEffect(()=>{const a=window,s={getMindCanvasFullscreenState:a.getMindCanvasFullscreenState,setMindCanvasFullscreen:a.setMindCanvasFullscreen,getMindCanvasReadModeState:a.getMindCanvasReadModeState,setMindCanvasReadMode:a.setMindCanvasReadMode,toggleMindCanvasReadMode:a.toggleMindCanvasReadMode},i=()=>Ct.current,l=h=>Uo(h,"api"),c=()=>eo("api");return a.getMindCanvasFullscreenState=i,a.setMindCanvasFullscreen=l,a.getMindCanvasReadModeState=i,a.setMindCanvasReadMode=l,a.toggleMindCanvasReadMode=c,Mo(!0),f.emit("canvas.readMode.api.bound"),()=>{Mo(!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")}},[Uo,eo]);const Fu=g.useCallback(()=>{const a=j.current.settings.cameraBookmarks??{},s=Ir.find(i=>!a[i])??Ir[0];_a(s)},[_a]),$u=g.useCallback(a=>{Lr(j.current.settings.gridType)!==a&&Ie({gridType:a},`canvas.gridMode.${a}`)},[Ie]),zu=g.useCallback(()=>{Ie({gridSnap:!(j.current.settings.gridSnap??!0)},"canvas.gridSnap.toggle")},[Ie]),Uu=g.useCallback(a=>{const s=j.current.nodes.find(i=>i.id===a);!s||s.kind!=="directory"||(na(a),f.emit("node.directorySettings.open",{id:a}))},[]),Hu=g.useCallback(()=>{na(a=>(a&&f.emit("node.directorySettings.close",{id:a}),null))},[]),Wu=g.useCallback((a,s)=>{const i=j.current.nodes.find(h=>h.id===a);if(!i||i.kind!=="directory")return;const l=En(s.DirectoryPath),c={...i.metadata??{},DirectoryPath:l,Include:s.Include??"",Exclude:s.Exclude??""};ee(a,{sourceFilePath:l||ti,metadata:c}),na(null),f.emit("node.directorySettings.patch",{id:a,keys:["DirectoryPath","Include","Exclude"]}),A("Folder scan settings saved.")},[ee,A]),Vu=g.useCallback(async a=>{const s=j.current.nodes.find(c=>c.id===a);if(!s||s.kind!=="directory")return;const i=Wf(s);if(f.emit("node.directory.scan.requested",{id:a,hasBridgePath:!!i,hasHandle:zn.current.has(a)}),i){if(!pt()){fe("blocked"),f.emit("node.directory.scan.bridge.blocked",{id:a,reason:"hosted-access-off"}),A("Hosted LocalBridge access is off.");return}try{const c=await ua();if(Ae(c.status??null),fe(c.state),c.state!=="connected"){f.emit("node.directory.scan.bridge.unavailable",{id:a,message:c.message||"LocalBridge is unavailable."}),A(c.message||"LocalBridge is unavailable.");return}const h=xn(c.status);if(!h){fe("unavailable"),f.emit("node.directory.scan.bridge.failed",{id:a,reason:"missing-token"}),A("LocalBridge read token is unavailable.");return}const C=ps(i,48);A(`Scanning ${C}...`),f.emit("node.directory.scan.bridge.requested",{id:a,path:i});const S=await Yf(i,s.metadata,h,c.baseUrl),I=new Date().toISOString();ee(a,{title:s.title==="Directory"||s.title==="New Folder"?C:s.title,body:Sd(C,S),sourceFilePath:i,metadata:{...s.metadata??{},DirectoryPath:i,DirectoryName:C,DirectoryScanSource:"localbridge",DirectoryFileCount:String(S.fileCount),DirectoryDirCount:String(S.directoryCount),DirectoryLastScanUtc:I,DirectoryScanTruncated:String(S.truncated),DirectoryPreview:JSON.stringify(S.preview.slice(0,Pn))}}),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}),A(`Scanned ${C}: ${S.fileCount} files, ${S.directoryCount} folders.`)}catch(c){const h=c instanceof Error?c.message:String(c);f.emit("node.directory.scan.bridge.failed",{id:a,message:h}),f.emit("node.directory.scan.failed",{id:a,source:"localbridge",message:h}),A("LocalBridge folder scan failed.")}return}const l=window;if(!l.showDirectoryPicker){f.emit("node.directory.scan.unsupported",{id:a}),A("Folder scan needs a Chromium browser with File System Access enabled.");return}try{let c=zn.current.get(a);c||(c=await l.showDirectoryPicker(),zn.current.set(a,c));const h={mode:"read"},C=c.queryPermission?await c.queryPermission(h):"granted";if((C==="granted"||!c.requestPermission?C:await c.requestPermission(h))!=="granted"){f.emit("node.directory.scan.denied",{id:a,directoryName:c.name}),A("Folder permission was not granted.");return}A(`Scanning ${c.name}...`);const I=await Uf(c,s.metadata),w=new Date().toISOString();ee(a,{title:s.title==="Directory"||s.title==="New Folder"?c.name:s.title,body:Sd(c.name,I),sourceFilePath:c.name,metadata:{...s.metadata??{},DirectoryName:c.name,DirectoryScanSource:"browser-picker",DirectoryFileCount:String(I.fileCount),DirectoryDirCount:String(I.directoryCount),DirectoryLastScanUtc:w,DirectoryScanTruncated:String(I.truncated),DirectoryPreview:JSON.stringify(I.preview.slice(0,Pn))}}),f.emit("node.directory.scan.completed",{id:a,source:"browser-picker",directoryName:c.name,fileCount:I.fileCount,directoryCount:I.directoryCount,truncated:I.truncated}),A(`Scanned ${c.name}: ${I.fileCount} files, ${I.directoryCount} folders.`)}catch(c){if((c&&typeof c=="object"&&"name"in c?String(c.name):"")==="AbortError"){f.emit("node.directory.scan.cancelled",{id:a}),A("Folder scan cancelled.");return}f.emit("node.directory.scan.failed",{id:a,message:c instanceof Error?c.message:String(c)}),A("Folder scan failed in this browser context.")}},[ee,A]),Ui=g.useCallback(a=>{$n(a.id),tn(tt(a.name))},[]),Zs=g.useCallback(()=>{$n(null),tn("")},[]),Qs=g.useCallback(a=>{const s=tt(ka).slice(0,90);a===j.current.id?(Vs(s),A("Board renamed.")):$m(a,s)?(Ye(vt()),A("Saved board renamed.")):(f.emit("board.rename.failed",{boardId:a,scope:"stored"}),A("Board rename failed.")),$n(null),tn("")},[Vs,A,ka]),Yu=g.useCallback((a,s)=>{s.key==="Enter"?(s.preventDefault(),Qs(a)):s.key==="Escape"&&(s.preventDefault(),Zs())},[Zs,Qs]),Xu=g.useCallback(a=>{const s=j.current.nodes.find(l=>l.id===a);if(!ho(s))return;const i=s.aiEnabled===!1;ee(a,{aiEnabled:i}),f.emit("node.aiReference.toggled",{id:a,enabled:i}),A(i?"AI reference enabled.":"AI reference disabled.")},[ee,A]),Ho=g.useCallback(async(a,s,i,l,c)=>{xt.current=a;try{const h=await yo(a);return dt.current=0,f.emit(s,{...i,ok:!0,method:h}),A(l),h}catch(h){return dt.current=Date.now()+15e3,f.emit(s,{...i,ok:!0,method:"react-local",clipboardUnavailable:!0,message:h instanceof Error?h.message:String(h)}),A(c),"react-local"}},[A]),Gu=g.useCallback(async a=>{const s=j.current.nodes.find(l=>l.id===a);if(!s)return;const i=rb(s);if(i)try{const l=await ib(i);f.emit("node.copyImage",{id:a,ok:!0,mode:l,urlKind:i.split(":",1)[0]||"relative"}),A(l==="image"?"Image copied to clipboard.":"Image reference copied.");return}catch(l){xt.current=i,dt.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)}),A("Image reference copied inside this canvas.");return}await Ho(sb(s),"node.copy",{id:a},"Node content copied.","Node content copied inside this canvas.")},[Ho,A]),Ku=g.useCallback(async(a,s)=>{await Ho(s,"node.embed.copyUrl",{id:a,sourceKind:s.split(":",1)[0]||"relative"},"Embed URL copied.","Embed URL copied inside this canvas.")},[Ho]),qu=g.useCallback(a=>{const s=j.current.nodes.find(l=>l.id===a);if(!ho(s))return;const i=Rr(s);ee(a,{height:i}),f.emit("node.fitHeight",{id:a,height:i}),A("Node height fitted to text.")},[ee,A]),Ju=g.useCallback(a=>{const s=j.current.nodes.find(C=>C.id===a);if(!ho(s))return;const i=ab(s),l=i?Math.max(120,Math.round(s.originalHeight||Rr(s))):Math.max(120,Math.min(s.height,Pf)),c=i?0:Math.round(s.height),h=i;O(C=>({...C,nodes:C.nodes.map(S=>S.id===a?{...S,height:l,isExpanded:h,originalHeight:c}:S)}),"node.expandCollapse",{id:a,expanded:h,height:l,originalHeight:c}),A(h?"Node expanded.":"Node collapsed.")},[O,A]),Zu=g.useCallback(a=>{const s=j.current.nodes.find(l=>l.id===a);if(!s||s.kind!=="code")return;const i=s.wordWrap===!1;ee(a,{wordWrap:i}),f.emit("node.wordWrap.toggled",{id:a,enabled:i}),A(i?"Word wrap enabled.":"Word wrap disabled.")},[ee,A]),Qu=g.useCallback((a,s)=>{const i=j.current.nodes.find(h=>h.id===a);if(!ho(i))return;const l=Qf(s.executionMode),c=Array.from(new Set([...i.tags??[],"Company root",l,s.enableSubAgents?"sub-agents":"single-agent","adapter-gated"]));ee(a,{companyMode:"candidate",role:"Company root",tags:c,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}),A(`Company root staged locally as ${l}. Open CompanyCore to run it with an adapter later.`)},[ee,A]),em=g.useCallback(a=>{var i;const s=j.current.nodes.find(l=>l.id===a);if(!(s!=null&&s.companyMode)){A("Stage this node as a Company root first.");return}Ut(a),f.emit("companyGraph.open",{id:a,status:((i=s.metadata)==null?void 0:i.CompanyStatus)??"Staged"})},[A]),tm=g.useCallback(a=>{const s=j.current.nodes.find(i=>i.id===a);s!=null&&s.companyMode&&(ee(a,{metadata:{...s.metadata??{},CompanyRootTitle:s.title,CompanyGoalSnapshot:s.body.slice(0,4e3),CompanyLastMessage:"Company goal synced from this note locally. External execution remains adapter-gated.",CompanyUpdatedAt:new Date().toISOString()}}),f.emit("node.company.goalSynced",{id:a,titleLength:s.title.length,bodyLength:s.body.length}),A("Company goal synced from this note locally."))},[ee,A]),am=g.useCallback(a=>{var l;const s=j.current.nodes.find(c=>c.id===a);if(!(s!=null&&s.companyMode))return;const i=((l=s.metadata)==null?void 0:l.CompanyStatus)||"Staged";ee(a,{metadata:{...s.metadata??{},CompanyStatus:i,CompanyLastMessage:`Company status refreshed locally as ${i.toLowerCase()}. Adapter execution remains gated.`,CompanyRefreshedAt:new Date().toISOString()}}),f.emit("node.company.refreshed",{id:a,status:i}),A(`Company status refreshed locally: ${i}.`)},[ee,A]),nm=g.useCallback(()=>{Ut(a=>(a&&f.emit("companyGraph.close",{id:a}),null))},[]),Hi=g.useCallback((a,s)=>{const i=j.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(ee(a,{metadata:{...i.metadata??{},CompanyStatus:s,CompanyLastMessage:`Company marked ${s.toLowerCase()} locally. External execution remains adapter-gated.`,CompanyUpdatedAt:new Date().toISOString()}}),f.emit("companyGraph.status",{id:a,status:s}),A(`Company marked ${s.toLowerCase()} locally.`))},[ee,A]),Wi=g.useCallback(a=>{var l;const s=j.current.nodes.find(c=>c.id===a);if(!(s!=null&&s.companyMode))return;const i=new Set(["Company root","adapter-gated","sub-agents","single-agent",((l=s.metadata)==null?void 0:l.CompanyExecutionModeLabel)??""]);ee(a,{companyMode:void 0,role:void 0,tags:(s.tags??[]).filter(c=>!i.has(c)),metadata:{...s.metadata??{},CompanyStatus:"Removed",CompanyLastMessage:"Company staging removed locally.",CompanyRemovedAt:new Date().toISOString()}}),Ut(null),f.emit("companyGraph.remove",{id:a}),A("Company staging removed from this node.")},[ee,A]),om=g.useCallback((a,s)=>{const i=j.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(ee(a,{metadata:{...i.metadata??{},CompanyApprovalStatus:s,CompanyLastMessage:s==="Approved"?"Company work approved locally. Adapter execution is still gated.":"Company work rejected locally.",CompanyUpdatedAt:new Date().toISOString()}}),f.emit("companyGraph.approval",{id:a,status:s}),A(`Company approval ${s.toLowerCase()} locally.`))},[ee,A]),sm=g.useCallback((a,s)=>{const i=s.trim();if(!i)return;const l=X("node"),c=X("edge");O(h=>{var I,w;const C=h.nodes.find(N=>N.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",((I=C.metadata)==null?void 0:I.CompanyExecutionModeLabel)??"Company"],metadata:{CompanyRootNodeId:C.id,CompanyExecutionMode:((w=C.metadata)==null?void 0:w.CompanyExecutionMode)??"Auto",CompanyTaskStatus:"Staged",CompanyStagedAt:new Date().toISOString()}};return{...h,nodes:[...h.nodes,S],edges:[...h.edges,{id:c,from:C.id,to:l,kind:"context"}]}},"companyGraph.followUp.staged",{rootId:a,taskId:l,chars:i.length}),y([l]),U(l),window.setTimeout(()=>U(h=>h===l?null:h),1400),A("Company follow-up task staged locally.")},[O,A]),rm=g.useCallback((a,s)=>{const i=X("node"),l=X("edge");O(c=>{const h=c.nodes.find(S=>S.id===a);if(!h)return c;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{...c,nodes:[...c.nodes,C],edges:[...c.edges,{id:l,from:h.id,to:i,kind:"result"}]}},"companyGraph.artifact.added",{rootId:a,artifactNodeId:i,artifactType:s.type}),y([i]),U(i),window.setTimeout(()=>U(c=>c===i?null:c),1400),A("Company artifact added to the canvas.")},[O,A]),im=g.useCallback((a,s="preview")=>{const i=nb(a);if(!i){A("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"){Tt({url:i,fileName:ob(a)}),f.emit("node.pdf.preview.open",{id:a.id,urlKind:i.startsWith("http")?"url":"path"});return}if(a.kind==="embed"&&!_n(i)){A("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})},[A]),lm=g.useCallback(a=>{const s=K.current;O(i=>({...i,nodes:i.nodes.filter(l=>l.id!==a),edges:i.edges.filter(l=>l.from!==a&&l.to!==a)}),"node.delete",{id:a}),y(i=>{const l=i.filter(c=>c!==a);return f.emit("selection.repaired",{reason:"delete-node",beforeCount:s.length,afterCount:l.length,removedCount:i.length-l.length}),l}),te(i=>i===a?null:i)},[O]),er=g.useCallback(a=>{const s=Array.from(new Set(K.current));if(s.length===0)return;const i=new Set(s);O(l=>({...l,nodes:l.nodes.filter(c=>!i.has(c.id)),edges:l.edges.filter(c=>!i.has(c.from)&&!i.has(c.to))}),"node.delete",{ids:s,count:s.length,source:a}),y([]),f.emit("selection.repaired",{reason:"delete-selected",source:a,beforeCount:s.length,afterCount:0,removedCount:s.length}),te(l=>l&&i.has(l)?null:l),Ut(l=>l&&i.has(l)?null:l),na(l=>l&&i.has(l)?null:l),A(`Deleted ${s.length} selected node${s.length===1?"":"s"}.`)},[O,A]),Wo=g.useCallback((a,s)=>{var E;const i=Array.from(new Set(a));if(i.length===0)return;const l=j.current,c=new Set(i),h=l.nodes.filter(M=>c.has(M.id));if(h.length===0)return;const C=h.filter(Ha),S=h.filter(M=>!Ha(M));if(C.length>0&&f.emit("remoteMonitor.node.duplicateIgnored",{action:"duplicate",source:s,skippedCount:C.length,nodeId:(E=C[0])==null?void 0:E.id}),S.length===0){const M=C[0]??l.nodes.find(Ha);M&&(y([M.id]),U(M.id),window.setTimeout(()=>U(T=>T===M.id?null:T),1e3)),A("Remote monitor is single-instance per board. Focused existing monitor.");return}const I=new Map(S.map(M=>[M.id,X("node")])),w=S.map(M=>({...M,id:I.get(M.id),x:M.x+50,y:M.y-50,status:M.status==="running"?"idle":M.status,metadata:M.metadata?{...M.metadata}:void 0,tags:M.tags?[...M.tags]:void 0,imageStack:si(M.imageStack,M.id,I.get(M.id))})),N=l.edges.filter(M=>I.has(M.from)&&I.has(M.to)).map(M=>({...M,id:X("edge"),from:I.get(M.from),to:I.get(M.to)}));O(M=>({...M,nodes:[...M.nodes,...w],edges:[...M.edges,...N]}),"node.duplicate",{source:s,count:w.length,edgeCount:N.length,sourceIds:i,duplicateIds:w.map(M=>M.id),skippedRemoteMonitorCount:C.length});const P=w.map(M=>M.id);y(P),U(P[0]??null),window.setTimeout(()=>U(M=>M===P[0]?null:M),1e3),A(C.length>0?`Duplicated ${w.length} node${w.length===1?"":"s"}; remote monitor stays single-instance.`:`Duplicated ${w.length} node${w.length===1?"":"s"}.`)},[O,A]),tr=g.useCallback(a=>{Wo(K.current,a)},[Wo]),to=g.useCallback((a,s)=>{const i=Array.from(new Set(K.current));if(i.length===0)return;const l=new Set(i),c=j.current.nodes,h=c.filter(w=>l.has(w.id));if(h.length===0)return;const C=c.filter(w=>!l.has(w.id)),S=a==="front"?[...C,...h]:[...h,...C];if(!S.some((w,N)=>{var P;return w.id!==((P=c[N])==null?void 0:P.id)})){A(a==="front"?"Selected nodes are already in front.":"Selected nodes are already in back."),f.emit("node.layerOrder.noop",{direction:a,source:s,count:h.length,ids:i});return}O(w=>({...w,nodes:S}),"node.layerOrder",{direction:a,source:s,count:h.length,ids:i}),A(a==="front"?`Brought ${i.length} selected node${i.length===1?"":"s"} to front.`:`Sent ${i.length} selected node${i.length===1?"":"s"} to back.`)},[O,A]),ar=g.useCallback(async()=>{const a=new Set(K.current),s=j.current.nodes.filter(c=>a.has(c.id));if(s.length===0)return;const i=j.current.edges.filter(c=>a.has(c.from)&&a.has(c.to)),l=fb(s,i);_.current=l;try{const c=await yo(JSON.stringify(l));re.current=0,f.emit("multiSelection.copy",{count:s.length,edgeCount:i.length,ok:!0,method:c}),A(`Copied ${s.length} selected node${s.length===1?"":"s"} for canvas paste.`)}catch(c){re.current=Date.now()+15e3,f.emit("multiSelection.copy",{count:s.length,edgeCount:i.length,ok:!0,method:"react-local",clipboardUnavailable:!0,message:c instanceof Error?c.message:String(c)}),A(`Copied ${s.length} selected node${s.length===1?"":"s"} inside this canvas.`)}},[A]),Da=g.useCallback((a,s,i)=>{const l=j.current.nodes.find(Ha),c=[],h=[];let C=!!l;for(const R of a.nodes){if(Ha(R)){if(C){c.push(R);continue}C=!0}h.push(R)}if(c.length>0&&f.emit("remoteMonitor.node.duplicateIgnored",{action:i,skippedCount:c.length,nodeId:l==null?void 0:l.id}),h.length===0){l&&(y([l.id]),U(l.id),window.setTimeout(()=>U(R=>R===l.id?null:R),1e3)),A("Remote monitor is single-instance per board. Focused existing monitor.");return}const S=ks(h);if(!S)return;const I=new Map(h.map(R=>[R.id,X("node")])),w=s.x-S.minX,N=s.y-S.minY,P=h.map(R=>({...R,id:I.get(R.id),x:R.x+w,y:R.y+N,status:R.status==="running"?"idle":R.status,tags:R.tags?[...R.tags]:void 0,metadata:R.metadata?{...R.metadata}:void 0,imageStack:si(R.imageStack,R.id,I.get(R.id))})),E=a.edges.filter(R=>I.has(R.from)&&I.has(R.to)).map(R=>({...R,id:X("edge"),from:I.get(R.from),to:I.get(R.to)})),M=P.map(R=>R.id);O(R=>({...R,nodes:[...R.nodes,...P],edges:[...R.edges,...E]}),"clipboard.nodes.paste",{source:i,count:P.length,edgeCount:E.length,originX:Math.round(s.x),originY:Math.round(s.y),skippedRemoteMonitorCount:c.length}),y(M),te(null),U(M[0]??null);const T=P[P.length-1];T&&xe(T,`clipboard.nodes.${i}`),window.setTimeout(()=>U(R=>R===M[0]?null:R),1200),A(c.length>0?`Pasted ${P.length} canvas node${P.length===1?"":"s"}; remote monitor stays single-instance.`:`Pasted ${P.length} canvas node${P.length===1?"":"s"}.`)},[O,xe,A]),ao=g.useCallback((a,s,i)=>{const l=a.trim();if(!l)return;const c=Td(l,s,`${i}-url`),h=c??Rd(l,s,i);O(C=>({...C,nodes:[...C.nodes,h]}),c?"clipboard.url.paste":"clipboard.text.paste",{source:i,id:h.id,kind:h.kind,chars:l.length}),y([h.id]),te(null),U(h.id),xe(h,`clipboard.${i}.${h.kind}`),window.setTimeout(()=>U(C=>C===h.id?null:C),1200),A(`${i==="drop"?"Dropped":"Pasted"} ${h.kind==="file"?"URL reference":h.kind} node.`)},[O,xe,A]),Vo=g.useCallback(async(a,s,i)=>{const l=a.filter(h=>h.name||h.size>0);if(l.length===0)return;const c=j.current.id;try{const h=[];let C=s.x;for(const w of l){const N=await _b(w,{x:C,y:s.y},i);h.push(N),C+=N.width+cs}if(j.current.id!==c){f.emit("async.staleIgnored",{path:"canvas.fileIngest",source:i,boardId:c,currentBoardId:j.current.id,count:l.length});return}const S=h.map(w=>w.id);O(w=>({...w,nodes:[...w.nodes,...h]}),"canvas.files.ingested",{source:i,count:h.length,kinds:h.map(w=>w.kind)}),y(S),te(null),U(S[0]??null);const I=h[h.length-1];I&&xe(I,`canvas.files.${i}`),window.setTimeout(()=>U(w=>w===S[0]?null:w),1200),A(`${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)}),A("File ingest failed in this browser context.")}},[O,xe,A]);g.useEffect(()=>{const a=s=>{if(s.defaultPrevented||Gd(s.target))return;const i=s.clipboardData;if(!i)return;const l=ke(),c=Bd(i.files,i.items);if(c.length>0){s.preventDefault(),Vo(c,l,"paste");return}const h=re.current>Date.now()?_.current:null;if(h){s.preventDefault(),Da(h,l,"paste"),f.emit("clipboard.nodes.pasteLocalFallback",{count:h.nodes.length});return}const C=dt.current>Date.now()?xt.current:null;if(C){s.preventDefault(),ao(C,l,"paste"),f.emit("clipboard.text.pasteLocalFallback",{chars:C.length}),dt.current=0;return}const S=i.getData("text/plain"),I=Md(S);if(I){s.preventDefault(),Da(I,l,"paste");return}const w=S.trim()?S:Ld(i.getData("text/html"));w.trim()&&(s.preventDefault(),ao(w,l,"paste"))};return document.addEventListener("paste",a),()=>document.removeEventListener("paste",a)},[ke,Vo,ao,Da]);const dm=g.useCallback(a=>{ws(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")},[]),cm=g.useCallback(a=>{if(ws(a.target))return;const s=Bd(a.dataTransfer.files,a.dataTransfer.items),i=a.dataTransfer.getData("text/uri-list"),l=a.dataTransfer.getData("text/plain"),c=Ld(a.dataTransfer.getData("text/html")),h=ke(a.clientX,a.clientY);if(s.length>0){a.preventDefault(),Vo(s,h,"drop");return}const C=(i||l||c).trim(),S=Md(l);if(S){a.preventDefault(),Da(S,h,"drop");return}C&&(a.preventDefault(),ao(C,h,"drop"))},[ke,Vo,ao,Da]),um=g.useCallback(()=>{const a=new Set(K.current),s=new Set(j.current.nodes.filter(i=>a.has(i.id)&&ho(i)).map(i=>i.id));if(s.size===0){A("No text nodes in this selection.");return}O(i=>({...i,nodes:i.nodes.map(l=>s.has(l.id)?{...l,height:Rr(l)}:l)}),"multiSelection.fitHeight",{count:s.size}),f.emit("multiSelection.fitHeight",{count:s.size}),A(`Fitted ${s.size} text node${s.size===1?"":"s"}.`)},[O,A]),nr=g.useCallback(a=>{const s=new Set(K.current),i=j.current.nodes.filter(E=>s.has(E.id)).sort((E,M)=>K.current.indexOf(E.id)-K.current.indexOf(M.id));if(i.length<2)return;const l=ks(i);if(!l)return;const c=a==="tidy"?Fb(i):i,h=28,C=Math.max(...c.map(E=>E.width)),S=Math.max(...c.map(E=>E.height)),I=c.map((E,M)=>({id:E.id,x:E.x,y:E.y,width:E.width,height:E.height,selectionIndex:M})),w=j.current.settings.gridSnap??!0;let N;a==="grid"?N={mode:"grid",order:"selectionOrder",columns:Math.max(2,Math.ceil(Math.sqrt(c.length))),cellWidth:C,cellHeight:S,gapX:h,gapY:h,sizeMode:"preserve",snapToGrid:w,gridSize:Zt}:a==="strip"?N={mode:"stripHorizontal",order:"selectionOrder",targetHeight:S,gapX:h,sizeMode:"preserve",snapToGrid:w,gridSize:Zt}:N={mode:"masonry",order:"spatialReading",anchor:"selectionBoundsTopLeft",maxColumns:12,gapX:24,gapY:24,quantile:.75,sizeMode:"preserve",snapToGrid:w,gridSize:Zt};const P=Bg(I,N,l);O(E=>({...E,nodes:E.nodes.map(M=>{const T=P.after.get(M.id);return T?{...M,x:T.x,y:T.y,width:T.width,height:T.height}:M})}),"multiSelection.arrange",{mode:a,count:i.length,layoutMode:N.mode,snapToGrid:w}),f.emit("multiSelection.arrange",{mode:a,count:i.length,layoutMode:N.mode,snapToGrid:w,boundsAfter:P.boundsAfter}),A(a==="tidy"?`Tidied ${i.length} selected nodes.`:`Arranged ${i.length} selected nodes as ${a}.`)},[O,A]),mm=g.useCallback(()=>{const a=Array.from(new Set(K.current)),s=j.current,i=new Map(s.nodes.map(T=>[T.id,T])),l=a.map(T=>i.get(T)).filter(T=>!!(T&&T.kind==="image"&&Co(T).length>0));if(l.length<2){A("Select at least two image nodes to stack."),f.emit("multiSelection.mergeImageStacks.skipped",{reason:"not-enough-image-nodes",selectedCount:a.length});return}const c=l[0],h=l.slice(1),C=new Date().toISOString(),S=new Set,I=Co(c),w=[];for(const T of I)w.push(Id(T,c,S,C));for(const T of h)for(const R of Co(T))w.push(Id(R,T,S,C));if(w.length<2){A("No stackable image variants found."),f.emit("multiSelection.mergeImageStacks.skipped",{reason:"not-enough-variants",selectedCount:a.length});return}const N=w.some(T=>{var R;return T.variantId===((R=c.imageStack)==null?void 0:R.activeVariantId)})?c.imageStack.activeVariantId:w[0].variantId,P=w.find(T=>T.variantId===N)??w[0],E=h.map(T=>T.id),M=new Set(E);O(T=>({...T,nodes:T.nodes.filter(R=>!M.has(R.id)).map(R=>{var J;return R.id===c.id?{...R,kind:"image",imageUrl:P.imageUrl,imageStack:{activeVariantId:N,variants:w,kind:"pile",title:((J=R.imageStack)==null?void 0:J.title)||R.title,updatedAtUtc:C},metadata:{...R.metadata??{},ImageStackKind:"pile",ImageStackPrimaryNodeId:c.id,ImageStackVariantCount:String(w.length),ImageStackMergedAtUtc:C,ImageStackRemovedNodeIds:E.join(","),ImageStackActiveVariantId:N},tags:Array.from(new Set([...R.tags??["image"],"Stack"])).slice(0,4)}:R}),edges:T.edges.filter(R=>!M.has(R.from)&&!M.has(R.to))}),"multiSelection.mergeImageStacks",{primaryNodeId:c.id,removedNodeIds:E,addedVariants:w.length-I.length,variantCount:w.length}),y([c.id]),te(T=>T&&M.has(T)?null:T),Ut(T=>T&&M.has(T)?null:T),na(T=>T&&M.has(T)?null:T),U(c.id),window.setTimeout(()=>U(T=>T===c.id?null:T),1200),A(`Stacked ${l.length} image nodes into ${w.length} variants.`)},[O,A]),pm=g.useCallback(a=>{const s=K.current.includes(a)?K.current:[a];Wo(s,"node-action")},[Wo]),la=g.useCallback(async(a,s)=>{const i=Kn.current.isBusy(a);return i&&f.emit("automation.run.queued",{id:a,key:a}),Kn.current.enqueue(a,async()=>{var N,P,E;const l=j.current.nodes.find(M=>M.id===a);if(!l||l.kind!=="ai-task")return;f.emit("automation.run.dequeued",{id:a,key:a,queuedBehindRunning:i});const c=(un.current.get(a)??0)+1;un.current.set(a,c);const h=Ra.current,C=(s==null?void 0:s.trim())||l.body,S=Ii(ji(l));ee(a,{status:"running",body:C,...vn(l)?{metadata:fo(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:c,automationKind:S==null?void 0:S.kind});const I=()=>un.current.get(a)===c&&Ra.current===h,w=M=>{if(!I()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:c});return}f.emit("localBridge.codex.fallback",{id:a,reason:M});const T=qb(C,l);ee(a,{status:"done",result:T,...vn(l)?{metadata:fo(l,{instruction:C,output:T,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.`:""})}:{}}),te(a)};if(!pt()){w("hosted-access-gated");return}try{const M=await ua();if(!I()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:c});return}if(fe(M.state),Ae(M.status??null),M.state!=="connected"){be(M.message||"LocalBridge is unavailable."),w(M.message||"LocalBridge unavailable");return}const T=xn(M.status);if(!T){w("LocalBridge token unavailable");return}const R=Ud(j.current,l,C);f.emit("localBridge.codex.run",{id:a,boardId:j.current.id});const J=await ip({instruction:R,workingDirectory:((P=(N=M.status)==null?void 0:N.project)==null?void 0:P.rootPath)||((E=M.status)==null?void 0:E.workspace)||void 0,sandbox:"read_only",model:ga(j.current.settings.model),reasoningEffort:Yb(j.current.settings.effort),approvalPolicy:"on-request",intent:"mindcanvas-ai-task",nodeKind:l.kind,webSearchMode:"disabled",networkAccessEnabled:!1},T,M.baseUrl);if(!I()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:c});return}if(!J.success||!J.finalResponse){const Se=J.error||"LocalBridge Codex returned no response.";f.emit("localBridge.codex.failed",{id:a,message:Se,status:J.status}),ee(a,{status:"blocked",result:Se,...vn(l)?{metadata:fo(l,{instruction:C,output:Se,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:S?"media-prompt-only":"ai-task",error:Se,fallback:!1,partial:!0})}:{}}),te(a);return}ee(a,{status:"done",result:J.finalResponse,...vn(l)?{metadata:fo(l,{instruction:C,output:J.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:J.providerKind,threadId:J.threadId,turnId:J.turnId}),te(a)}catch(M){if(!I()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:c});return}const T=M instanceof Error?M.message:String(M);f.emit("localBridge.codex.failed",{id:a,message:T}),ee(a,{status:"blocked",result:T,...vn(l)?{metadata:fo(l,{instruction:C,output:T,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:S?"media-prompt-only":"ai-task",error:T,fallback:!1,partial:!0})}:{}}),te(a)}})},[ee]),Vi=g.useCallback(async()=>{const a=K.current[0];if(!a){A("Select an AI Task to run its graph.");return}const s=ii(j.current,a);if(s.length===0){A("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){A("The selected AI Task graph is already running.");return}A(`Running selected graph: ${i.length} AI task${i.length===1?"":"s"}.`);for(const l of i)await la(l.id)},[la,A]),gm=g.useCallback(async a=>{if(a.result)try{const s=await yo(a.result);f.emit("aiTask.result.copy",{id:a.id,chars:a.result.length,ok:!0,method:s}),A("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)}),A("AI result copy unavailable in this browser context.")}},[A]),hm=g.useCallback(a=>{if(!a.result)return;const s=Jb(a,{x:a.x+a.width+78,y:a.y}),i={id:X("edge"),from:a.id,to:s.id,kind:"result"};O(l=>l.nodes.some(h=>h.id===a.id&&h.result)?{...l,nodes:[...l.nodes,s],edges:[...l.edges,i]}:l,"aiTask.result.note.create",{sourceNodeId:a.id,createdNodeId:s.id,chars:a.result.length,truncated:a.result.length>ei}),y([s.id]),te(null),U(s.id),window.setTimeout(()=>U(l=>l===s.id?null:l),1200),A("AI result archived as a Markdown node.")},[O,A]),fm=g.useCallback(a=>{if(!a.result)return;const s=Zb(a,{x:a.x+a.width+78,y:a.y+Math.min(a.height+44,360)}),i={id:X("edge"),from:a.id,to:s.id,kind:"result"};O(l=>l.nodes.some(h=>h.id===a.id&&h.result)?{...l,nodes:[...l.nodes,s],edges:[...l.edges,i]}:l,"aiTask.result.followUp.create",{sourceNodeId:a.id,createdNodeId:s.id,chars:a.result.length}),y([s.id]),te(null),U(s.id),window.setTimeout(()=>U(l=>l===s.id?null:l),1200),A("Follow-up AI Task staged from the result.")},[O,A]),Yi=g.useCallback(()=>{var Qo,ro,ca,vl,jl,Il,Nl;const a=k.trim(),s=j.current.settings.inputMode,i=[...K.current],l=j.current.nodes.find(ce=>ce.id===i[0]),c=(l==null?void 0:l.kind)==="ai-task"?(a||l.body).trim():a;if(!c)return;const h=c.replace(/\s+/g," ").trim().toLowerCase(),C=window.location.pathname||"/mindcanvas",S=`${C}|${s}|${h}`,I=Date.now(),w=qn.current;if((w==null?void 0:w.signature)===S&&I-w.at<=gd){f.emit("globalInput.duplicateIgnored",{routePath:C,inputMode:s,chars:c.length,windowMs:gd});return}qn.current={signature:S,at:I};const N={routePath:C,inputMode:s,selectedNodeIds:i,chars:c.length};f.emit("globalInput.submit.snapshot",{...N,source:(l==null?void 0:l.kind)==="ai-task"?"selected-ai-task":"input",hasTypedPrompt:a.length>0}),(l==null?void 0:l.kind)==="ai-task"&&L(""),$(ce=>ce+1),f.emit("globalInput.submit.started",N);const P=ce=>{$(Ot=>Math.max(0,Ot-1)),f.emit("globalInput.submit.completed",{...N,status:ce})};if((l==null?void 0:l.kind)==="ai-task"){la(l.id,a).then(()=>P("ai-task")).catch(ce=>{f.emit("globalInput.submit.completed",{...N,status:"ai-task-error",message:ce instanceof Error?ce.message:String(ce)}),$(Ot=>Math.max(0,Ot-1))});return}const E=ke(void 0,void 0,{width:360,height:196}),M=Td(c,E,"global-input-url"),T=M?null:vi(c),R=!!(T&&/^https?:\/\//i.test(T)&&!_n(T)),J=!M&&!R&&(s==="Image"||s==="Video")?s:null,Se=M??(R?Rd(c,E,"global-input-rejected-url"):null)??(J?Tb(c,E,j.current.settings,J,"global-input-media",Ea.current):Mb(c,E,j.current.settings)),mt=ke(void 0,void 0,{width:Se.width,height:Se.height}),ae={...Se,x:mt.x,y:mt.y},bn=ae.kind==="ai-task",Fa=M?"globalInput.url.add":R?"globalInput.rejectedUrl.add":J?"globalInput.media.add":"globalInput.aiTask.add",Zo={id:ae.id,kind:ae.kind,chars:c.length,inputMode:s,...bn?{model:(Qo=ae.metadata)==null?void 0:Qo.TextModel,provider:(ro=ae.metadata)==null?void 0:ro.AiProvider,effort:(ca=ae.metadata)==null?void 0:ca.Effort}:{},...J?{mediaMode:J,mediaModel:(vl=ae.metadata)==null?void 0:vl.MediaModel,aspectPresetId:(jl=ae.metadata)==null?void 0:jl.AspectPresetId,requestedSize:(Il=ae.metadata)==null?void 0:Il.RequestedSize}:{}};if(bn){const ce=j.current,Ot={...ce,nodes:ce.nodes.some(cr=>cr.id===ae.id)?ce.nodes:[...ce.nodes,ae],updatedAt:new Date().toISOString()};u(cr=>$a(cr,ce,{description:Fa,mergeKey:null})),b([]),j.current=Ot,f.emit(Fa,Zo),r(Ot)}else O(ce=>({...ce,nodes:ce.nodes.some(Ot=>Ot.id===ae.id)?ce.nodes:[...ce.nodes,ae]}),Fa,Zo);if(L(""),y([ae.id]),te(null),U(ae.id),xe(ae,Fa),window.setTimeout(()=>U(ce=>ce===ae.id?null:ce),1200),bn){f.emit("globalInput.aiTask.runRequested",{id:ae.id,chars:c.length,model:(Nl=ae.metadata)==null?void 0:Nl.TextModel}),A("AI task created from input and running."),la(ae.id,c).then(()=>P("ai-task-created")).catch(ce=>{f.emit("globalInput.submit.completed",{...N,status:"ai-task-created-error",message:ce instanceof Error?ce.message:String(ce)}),$(Ot=>Math.max(0,Ot-1))});return}A(`Added ${ae.kind==="file"?"URL reference":ae.kind} node from input.`),P(M?"url-node":R?"rejected-url-node":J?"media-node":"text-node")},[O,ke,k,xe,la,A]),Xi=g.useCallback(async()=>{const a=ey(j.current),s=a.flat(),i=a.map(c=>c.filter(h=>h.status!=="running")).filter(c=>c.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(c=>c.id)}),l.length===0){A(s.length>0?"All AI task graphs are already running.":"No AI tasks on this board.");return}A(`Running ${i.length} graph${i.length===1?"":"s"} / ${l.length} AI task${l.length===1?"":"s"}.`);for(const c of i)for(const h of c)await la(h.id)},[la,A]),Gi=g.useCallback(()=>{const a=j.current.nodes.filter(s=>s.kind==="ai-task"&&s.status==="running");if(a.length===0){A("No running AI tasks to pause."),f.emit("automation.pause",{count:0});return}Ra.current+=1,O(s=>({...s,nodes:s.nodes.map(i=>i.kind==="ai-task"&&i.status==="running"?{...i,status:"paused",result:i.result||"Paused locally. Run the task again to continue with a fresh execution."}:i)}),"automation.pause",{count:a.length}),A(`Paused ${a.length} running task${a.length===1?"":"s"}.`)},[O,A]),Ki=g.useCallback(()=>{const a=j.current.nodes.filter(s=>s.kind==="ai-task"&&(s.status==="running"||s.status==="paused"));if(a.length===0){A("No active AI tasks to stop."),f.emit("automation.stop",{count:0});return}Ra.current+=1,O(s=>({...s,nodes:s.nodes.map(i=>i.kind==="ai-task"&&(i.status==="running"||i.status==="paused")?{...i,status:"blocked",result:"Stopped locally. Any late adapter callback from the previous execution will be ignored."}:i)}),"automation.stop",{count:a.length}),te(null),A(`Stopped ${a.length} active task${a.length===1?"":"s"}.`)},[O,A]),qi=g.useCallback(()=>{const a=j.current.nodes.find(C=>C.id===K.current[0]);if(!a)return;const s=a.x+a.width+80,i=a.y,l={id:X("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"]},c={...l,id:X("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:X("edge"),from:a.id,to:l.id,kind:"context"},{id:X("edge"),from:l.id,to:c.id,kind:"result"}];O(C=>({...C,nodes:[...C.nodes,l,c],edges:[...C.edges,...h]}),"node.add",{reason:"generate-flow",count:2}),y([l.id,c.id])},[O]),Ji=g.useCallback((a,s,i)=>{const l=typeof document<"u"?document.elementFromPoint(a,s):null,c=l instanceof HTMLElement?l.closest('[data-node-connector="true"]'):null,h=(c==null?void 0:c.dataset.connectorNodeId)??"",C=c==null?void 0:c.dataset.connectorSide;if(h&&h!==i&&ai(C)&&j.current.nodes.some(w=>w.id===h))return{id:h,side:C};const S=wt(a,s),I=[...j.current.nodes].reverse().find(w=>w.id!==i&&Jf(S,w));return I?{id:I.id,side:qf(I,S)}:null},[wt]),bm=g.useCallback((a,s,i,l)=>{if(l.button!==0)return;l.preventDefault(),l.stopPropagation();const c=j.current.nodes.find(M=>M.id===a);if(!c)return;const h=Ft(c,s);let C=h,S=null;const I=(M,T)=>{C=wt(M,T),S=Ji(M,T,a),V(R=>!R||R.from!==a?R:{...R,pointer:C,target:S,dragging:!0})},w=()=>{document.body.classList.remove("is-connecting-node"),window.removeEventListener("pointermove",N),window.removeEventListener("pointerup",P),window.removeEventListener("pointercancel",E)},N=M=>{I(M.clientX,M.clientY)},P=M=>{if(I(M.clientX,M.clientY),w(),!S||S.id===a){V(null),f.emit("edge.drag.cancelled",{from:a,fromSide:s,kind:i});return}const T={id:X("edge"),from:a,to:S.id,kind:i,fromSide:s,toSide:S.side};O(R=>({...R,edges:[...R.edges,T]}),"edge.add",{...T,source:"connector-drag"}),V(null),y([a,S.id]),te(null),f.emit("edge.drag.completed",{...T})},E=()=>{w(),V(null),f.emit("edge.drag.cancelled",{from:a,fromSide:s,kind:i,reason:"pointer-cancelled"})};y(M=>M.includes(a)?M:[a]),te(null),V({from:a,kind:i,fromSide:s,pointer:h,target:null,dragging:!0}),document.body.classList.add("is-connecting-node"),f.emit("edge.drag.started",{from:a,fromSide:s,kind:i}),window.addEventListener("pointermove",N),window.addEventListener("pointerup",P,{once:!0}),window.addEventListener("pointercancel",E,{once:!0})},[O,Ji,wt]),ym=g.useCallback((a,s,i="right")=>{if(G&&G.from!==a){const c={id:X("edge"),from:G.from,to:a,kind:G.kind==="context"?"context":s,fromSide:G.fromSide,toSide:i};O(h=>({...h,edges:[...h.edges,c]}),"edge.add",{...c}),V(null);return}const l=j.current.nodes.find(c=>c.id===a);V({from:a,kind:s,fromSide:i,pointer:l?Ft(l,i):Fe.current,target:null,dragging:!1})},[O,G]),Yo=g.useCallback(()=>{u(a=>{const s=a.at(-1);if(!s)return a;const i=s.board,l=K.current,c=Xd(l,i);return b(h=>ih(h,j.current,{description:s.description})),r(i),y(c),f.emit("history.undo",{boardId:i.id,selectedBefore:l.length,selectedAfter:c.length,selectionRepaired:c.length!==l.length||c.some((h,C)=>h!==l[C])}),f.emit("selection.repaired",{reason:"undo",beforeCount:l.length,afterCount:c.length}),a.slice(0,-1)})},[]),Xo=g.useCallback(()=>{b(a=>{const s=a[0];if(!s)return a;const i=s.board,l=K.current,c=Xd(l,i);return u(h=>$a(h,j.current,{description:s.description})),r(i),y(c),f.emit("history.redo",{boardId:i.id,selectedBefore:l.length,selectedAfter:c.length,selectionRepaired:c.length!==l.length||c.some((h,C)=>h!==l[C])}),f.emit("selection.repaired",{reason:"redo",beforeCount:l.length,afterCount:c.length}),a.slice(1)})},[]);g.useEffect(()=>{const a=s=>{var I,w;if(!s.defaultPrevented&&s.ctrlKey&&!s.shiftKey&&!s.altKey&&!s.metaKey&&s.key==="Home"&&!s.repeat){s.preventDefault(),Ai("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-function-toolbar"});return}if(s.defaultPrevented||Gd(s.target))return;const i=s.key.toLowerCase(),l=s.ctrlKey||s.metaKey,c=!l&&!s.altKey&&!s.shiftKey,h=by(s.target);if(s.key==="Tab"&&c&&!s.repeat&&!h){s.preventDefault(),qs("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-wheel-mode",wheelMode:!(j.current.settings.wheelMode??!1)});return}if(s.key==="Enter"&&c&&!s.repeat&&!h&&zi()){s.preventDefault(),f.emit("keyboard.shortcut",{action:"focus-global-input"});return}if(i==="f"&&c&&!s.repeat&&!h){s.preventDefault(),eo("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-fullscreen"});return}if(i==="d"&&c&&!s.repeat){s.preventDefault(),Js("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-cursor-direction"});return}if(i==="h"&&c&&!s.repeat){s.preventDefault(),Ks(),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&&c){s.preventDefault(),$i(C),f.emit("keyboard.shortcut",{action:"camera-pan",direction:C});return}if(i===pa&&!s.altKey&&!s.shiftKey){s.preventDefault(),l?(_a(pa),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:pa})):(Qn(pa),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:pa}));return}if(/^[0-9]$/.test(s.key)&&!s.altKey){if(l&&!s.shiftKey){s.preventDefault(),_a(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:s.key});return}if(!l&&!s.shiftKey){s.preventDefault(),Qn(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:s.key});return}}if(l&&i==="z"&&!s.shiftKey){s.preventDefault(),Yo(),f.emit("keyboard.shortcut",{action:"undo"});return}if(l&&i==="y"||l&&s.shiftKey&&i==="z"){s.preventDefault(),Xo(),f.emit("keyboard.shortcut",{action:"redo"});return}if(l&&i==="f"&&!s.altKey){s.preventDefault(),(I=cn.current)==null||I.focus(),(w=cn.current)==null||w.select(),f.emit("keyboard.shortcut",{action:"focus-search"});return}if(l&&i==="c"&&K.current.length>0){s.preventDefault(),ar(),f.emit("keyboard.shortcut",{action:"copy",count:K.current.length});return}if(l&&i==="v"&&_.current&&re.current>Date.now()){const N=_.current;s.preventDefault(),Da(N,ke(),"paste"),f.emit("keyboard.shortcut",{action:"paste-local",count:N.nodes.length});return}if(l&&i==="d"){s.preventDefault(),tr("keyboard"),f.emit("keyboard.shortcut",{action:"duplicate",count:K.current.length});return}if(l&&s.key==="]"){s.preventDefault(),to("front","keyboard"),f.emit("keyboard.shortcut",{action:"bring-front",count:K.current.length});return}if(l&&s.key==="["){s.preventDefault(),to("back","keyboard"),f.emit("keyboard.shortcut",{action:"send-back",count:K.current.length});return}if(s.key==="Delete"||s.key==="Backspace"){if(K.current.length===0)return;s.preventDefault(),er("keyboard"),f.emit("keyboard.shortcut",{action:"delete",count:K.current.length});return}if(s.key!=="Escape")return;let S=!1;ft&&(aa(!1),S=!0),ja&&(le(!1),S=!0),Aa&&(Wt(!1),S=!0),ya&&(Dt("keyboard"),S=!0),He&&(Tt(null),S=!0),zt&&(Ut(null),S=!0),Ht&&(na(null),S=!0),G&&(V(null),S=!0),de&&(te(null),S=!0),v.trim()&&(D(""),H([]),ie(0),S=!0),K.current.length>0&&(y([]),S=!0),S&&(s.preventDefault(),f.emit("keyboard.shortcut",{action:"escape"}))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[zt,Dt,G,ar,er,Ht,tr,zi,ke,Qn,Ks,ya,$i,Da,He,ft,v,Xo,to,de,_a,ja,Aa,Js,Ai,eo,qs,Yo]);const xm=g.useCallback(()=>{zm(),O(()=>({...Ml,updatedAt:new Date().toISOString()}),"board.restore",{source:"fixture-reset"}),y(["node-agent-command"]),Ye([]),Dt("fixture-reset")},[Dt,O]),or=g.useCallback((a,s="result-click")=>{const i=Tr(a),l=$e(),c={...oe.current,x:l.width/2-i.x*oe.current.scale,y:l.height/2-i.y*oe.current.scale};Z(c),y([a.id]),U(a.id),f.emit("search.focused",{query:v.trim(),nodeId:a.id,source:s}),window.setTimeout(()=>U(null),900)},[Z,v,$e]);g.useEffect(()=>{const a=++mn.current,s=hy(oe.current,z);f.emit("search.started",{query:v,engine:ia.current?"worker":"local",viewportCenterX:Number(s.centerX.toFixed(2)),viewportCenterY:Number(s.centerY.toFixed(2))});const i=window.setTimeout(()=>{if(a!==mn.current){f.emit("async.staleIgnored",{path:"search",seq:a});return}if(!v.trim()){H([]),ie(0),Ne("none"),f.emit("search.completed",{query:v,count:0,engine:"none"});return}const c=La.current;if(c&&ia.current){c.postMessage({type:"SEARCH_QUERY",boardId:j.current.id,seq:a,query:v,limit:8,viewport:s});return}const h=performance.now(),C=fy(j.current.nodes,v,s,8);H(C),ie(0),Ne("local"),f.emit("search.completed",{query:v,count:C.length,engine:"local",durationMs:Number((performance.now()-h).toFixed(2)),viewportBoosted:!0})},120);return()=>window.clearTimeout(i)},[v,z,pe]);const no=g.useCallback(a=>{ie(s=>{const i=F.length;if(i===0)return 0;const l=(s+a+i)%i;return f.emit("search.activeChanged",{query:v.trim(),index:l,count:i}),l})},[v,F.length]),sr=g.useCallback(a=>{const s=F[W];s&&or(s,a)},[or,W,F]),Cm=g.useCallback(a=>{if(a.key==="ArrowDown"){a.preventDefault(),no(1);return}if(a.key==="ArrowUp"){a.preventDefault(),no(-1);return}if(a.key==="Enter"){a.preventDefault(),sr("keyboard-enter");return}a.key==="Escape"&&(D(""),H([]),ie(0),f.emit("search.cleared"))},[sr,no]),Sm=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=j.current.nodes.find(N=>N.id===a);if(!l)return;u(N=>$a(N,j.current,{description:"Move nodes",mergeKey:null})),b([]);const c=K.current.includes(a)?K.current:[a],h=new Map(j.current.nodes.filter(N=>c.includes(N.id)).map(N=>[N.id,{x:N.x,y:N.y}])),C=h.get(a)??{x:l.x,y:l.y},S=j.current.settings.gridSnap??!0,I=N=>{const P=(N.clientX-i.x)/oe.current.scale,E=(N.clientY-i.y)/oe.current.scale,M=S?Ad(C.x+P)-C.x:P,T=S?Ad(C.y+E)-C.y:E;r(R=>({...R,nodes:R.nodes.map(J=>{const Se=h.get(J.id);return Se?{...J,x:Se.x+M,y:Se.y+T}:J}),updatedAt:new Date().toISOString()}))},w=()=>{window.removeEventListener("pointermove",I),window.removeEventListener("pointerup",w),f.emit("node.patch",{id:a,reason:"drag",gridSnap:S})};window.addEventListener("pointermove",I),window.addEventListener("pointerup",w,{once:!0})},[]),wm=g.useCallback((a,s)=>{if(s.button!==0)return;s.preventDefault(),s.stopPropagation();const i=j.current.nodes.find(P=>P.id===a);if(!i)return;const l={x:s.clientX,y:s.clientY},c=lb(i);let h={width:i.width,height:i.height};u(P=>$a(P,j.current,{description:"Resize node",mergeKey:null})),b([]),y(P=>P.includes(a)?P:[a]),te(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",I),window.removeEventListener("pointerup",w),window.removeEventListener("pointercancel",N)},S=P=>{const E=(P.clientX-l.x)/oe.current.scale,M=(P.clientY-l.y)/oe.current.scale;let T=i.width+E,R=i.height+M;if(P.shiftKey&&i.width>0&&i.height>0){const J=Math.max(T/i.width,R/i.height);T=i.width*J,R=i.height*J}h={width:Math.round(ue(T,c.minWidth,c.maxWidth)),height:Math.round(ue(R,c.minHeight,c.maxHeight))},r(J=>({...J,nodes:J.nodes.map(Se=>Se.id===a?{...Se,...h}:Se),updatedAt:new Date().toISOString()}))},I=P=>{S(P)},w=P=>{S(P),C(),f.emit("node.resize.completed",{id:a,width:h.width,height:h.height})},N=()=>{C(),f.emit("node.resize.cancelled",{id:a})};document.body.classList.add("is-resizing-node"),window.addEventListener("pointermove",I),window.addEventListener("pointerup",w,{once:!0}),window.addEventListener("pointercancel",N,{once:!0})},[]),km=g.useCallback(a=>{if(a.button!==0&&a.button!==1&&a.button!==2||Od(a.target))return;if(a.button===0&&a.ctrlKey&&!a.shiftKey){a.preventDefault(),a.stopPropagation(),Oo(a.clientX,a.clientY,"ctrl-grid-click");return}a.preventDefault();const s={x:a.clientX,y:a.clientY},i=Ke(a.clientX,a.clientY),l=a.shiftKey;if(a.button===0){const S=new Set(K.current);te(null),Ue({startX:i.x,startY:i.y,currentX:i.x,currentY:i.y}),f.emit("selection.box.started",{x:Math.round(i.x),y:Math.round(i.y),additive:l});const I=()=>{document.body.classList.remove("is-selecting"),window.removeEventListener("pointermove",w),window.removeEventListener("pointerup",N),window.removeEventListener("pointercancel",P)},w=E=>{const M=Ke(E.clientX,E.clientY);Ue({startX:i.x,startY:i.y,currentX:M.x,currentY:M.y})},N=E=>{const M=Ke(E.clientX,E.clientY),T=$d({startX:i.x,startY:i.y,currentX:M.x,currentY:M.y});if(I(),Ue(null),T.width<pd&&T.height<pd){const mt=K.current.length;!l&&mt>0&&(y([]),te(null),f.emit("selection.cleared",{source:"canvas-background-click",beforeCount:mt})),f.emit("selection.box.cancelled",{reason:"too-small",width:Math.round(T.width),height:Math.round(T.height)});return}const R=Ub(T,oe.current),J=j.current.nodes.filter(mt=>Fd(mt,R)).map(mt=>mt.id),Se=l?Array.from(new Set([...S,...J])):J;y(Se),f.emit("selection.box.completed",{count:Se.length,additive:l,width:Math.round(T.width),height:Math.round(T.height)})},P=()=>{I(),Ue(null),f.emit("selection.box.cancelled",{reason:"pointer-cancelled"})};document.body.classList.add("is-selecting"),window.addEventListener("pointermove",w),window.addEventListener("pointerup",N,{once:!0}),window.addEventListener("pointercancel",P,{once:!0});return}const c={...oe.current},h=S=>{Z({...c,x:c.x+S.clientX-s.x,y:c.y+S.clientY-s.y})},C=()=>{document.body.classList.remove("is-panning"),window.removeEventListener("pointermove",h),window.removeEventListener("pointerup",C)};document.body.classList.add("is-panning"),window.addEventListener("pointermove",h),window.addEventListener("pointerup",C,{once:!0})},[Z,Ke,Oo]),vm=g.useCallback(a=>{a.button===0&&(Od(a.target)||(a.preventDefault(),a.stopPropagation(),Oo(a.clientX,a.clientY,"double-click")))},[Oo]),rr=g.useCallback(a=>{const s=a.target instanceof Element?a.target:null;if(s!=null&&s.closest('[data-disable-mindcanvas-wheel="true"]'))return;const i=s==null?void 0:s.closest("textarea,.result-popover__body,.mindcanvas-text-scrollable-view"),l=a.ctrlKey||a.metaKey;if(i&&!l)return;const c=j.current.settings.wheelMode?l:!l;a.preventDefault();const h=oe.current;if(c){const C=Math.exp(-a.deltaY*.0012),S=ue(h.scale*C,bs,ys),I=wt(a.clientX,a.clientY),w=Ke(a.clientX,a.clientY);Z({x:w.x-I.x*S,y:w.y-I.y*S,scale:S});return}Z({...h,x:h.x-a.deltaX,y:h.y-a.deltaY})},[Z,Ke,wt]);g.useEffect(()=>{const a=Xt.current;if(a)return a.addEventListener("wheel",rr,{passive:!1}),()=>a.removeEventListener("wheel",rr)},[rr]);const Q=o.nodes.find(a=>a.id===m[0]),fn=g.useMemo(()=>{const a=new Set(m);return o.nodes.filter(s=>a.has(s.id))},[o.nodes,m]),oo=((dl=Q==null?void 0:Q.metadata)==null?void 0:dl[Y.studioNodeType])??"",jm=oo?pr(oo):"Unassigned",Im=oo==="template.input",Zi=g.useMemo(()=>Cd(je),[je]),Go=he&&he.issues.length===0?he.template:null,Qi=g.useMemo(()=>ts(Go,Yt),[Yt,Go]),Nm=g.useMemo(()=>fn.filter(a=>a.kind==="image"&&Co(a).length>0).length,[fn]),ct=g.useMemo(()=>{const a=o.nodes.filter(l=>l.kind==="ai-task"),s=a.filter(l=>l.status==="running").length,i=a.filter(l=>l.status==="paused").length;return{total:a.length,runnable:a.filter(l=>l.status!=="running").length,running:s,paused:i,active:s+i}},[o.nodes]),Ko=g.useMemo(()=>{if(!Q||Q.kind!=="ai-task")return{size:0,runnable:0};const a=ii(o,Q.id);return{size:a.length,runnable:a.filter(s=>s.status!=="running").length}},[o,Q]),Ba=g.useMemo(()=>{if(fn.length<2)return null;const a=ks(fn);if(!a)return null;const s=Math.max(.01,ge.scale),i=a.minX*s+ge.x-10,l=a.minY*s+ge.y-10,c=a.maxX*s+ge.x+10,h=a.maxY*s+ge.y+10,C=(i+c)/2,S=l>112?l-52:h+12;return{left:i,top:l,width:Math.max(0,c-i),height:Math.max(0,h-l),toolbarLeft:ue(C,168,Math.max(168,z.width-168)),toolbarTop:ue(S,42,Math.max(42,z.height-58))}},[fn,z.height,z.width,ge]),da=de?o.nodes.find(a=>a.id===de):null,el=zt?o.nodes.find(a=>a.id===zt&&!!a.companyMode):null,tl=Ht?o.nodes.find(a=>a.id===Ht&&a.kind==="directory"):null,al=g.useMemo(()=>new Set([...m,...F.map(a=>a.id),Mt,de,zt,Ht,G==null?void 0:G.from].filter(a=>!!a)),[zt,G==null?void 0:G.from,Ht,Mt,de,F,m]),Oa=g.useMemo(()=>{const a=zb(at,z);return o.nodes.filter(s=>al.has(s.id)||Fd(s,a))},[al,o.nodes,z,at]),ir=g.useMemo(()=>new Set(Oa.map(a=>a.id)),[Oa]);g.useEffect(()=>{f.emit("visibility.culled",{visible:Oa.length,total:o.nodes.length,scale:Number(at.scale.toFixed(3))})},[o.nodes.length,at.scale,Oa.length]);const Am=g.useCallback(()=>{const a=j.current,s=K.current.map(l=>a.nodes.find(c=>c.id===l)).find(Boolean),i=(s==null?void 0:s.kind)==="ai-task"?s:a.nodes.find(l=>K.current.includes(l.id)&&l.kind==="ai-task")??a.nodes.find(l=>l.kind==="ai-task");return i?Ud(a,i,k.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:",wo(k||(s==null?void 0:s.body)||"No prompt input.",4e3)].join(`
|
|
47
|
-
`)},[k]),nl=g.useMemo(()=>{const a=new Map(o.nodes.map(s=>[s.id,s]));return o.edges.map(s=>{const i=a.get(s.from),l=a.get(s.to);if(!i||!l)return null;const c=s.fromSide??"right",h=s.toSide??"left",C=Ft(i,c),S=Ft(l,h);return{...s,path:vd(C,c,S,h)}}).filter(Boolean)},[o.edges,o.nodes]),qo=g.useMemo(()=>{var C,S;if(!G)return null;const a=new Map(o.nodes.map(I=>[I.id,I])),s=a.get(G.from);if(!s)return null;const i=Ft(s,G.fromSide),l=G.target?a.get(G.target.id):null,c=((C=G.target)==null?void 0:C.side)??Kf(G.fromSide),h=l?Ft(l,c):G.pointer;return{kind:G.kind,targetId:((S=G.target)==null?void 0:S.id)??null,path:vd(i,G.fromSide,h,c)}},[o.nodes,G]),ol=g.useMemo(()=>nl.filter(a=>ir.has(a.from)||ir.has(a.to)),[nl,ir]),ut=g.useMemo(()=>$b(o.nodes,ge,z),[o.nodes,ge,z]),Mm=g.useCallback(a=>{if(!ut)return;const s=a.currentTarget.getBoundingClientRect(),i=ue(a.clientX-s.left,0,xs),l=ue(a.clientY-s.top,0,Cs),c=ut.bounds.minX+(i-jn)/ut.scale,h=ut.bounds.minY+(l-jn)/ut.scale;Z({...oe.current,x:z.width/2-c*oe.current.scale,y:z.height/2-h*oe.current.scale}),f.emit("minimap.navigate",{worldX:Math.round(c),worldY:Math.round(h)})},[Z,ut,z.height,z.width]),kt=o.settings.inputMode==="Image"?"Image":o.settings.inputMode==="Video"?"Video":null,lr=kt==="Image"?Ys:kt==="Video"?Xs:null,Tm=k.trim().length>0||(Q==null?void 0:Q.kind)==="ai-task",sl=v.trim().length>0,rl=F[W]??null,Rm=sl?`${F.length} result${F.length===1?"":"s"}`:`${o.nodes.length} nodes`,so=At?$d(At):null,Jo=Lr(o.settings.gridType),il=o.settings.gridSnap??!0,ll=o.settings.cameraBookmarks??{},dr=ya,Lm=Ia==="full";return n.jsxs("div",{ref:Xt,className:`mindcanvas ${bt?"mindcanvas--read-mode":""} mindcanvas--function-toolbar-${Ia}`,"data-function-toolbar-mode":Ia,"data-read-mode":bt?"true":"false","data-read-mode-api":$s?"bound":"unbound","data-cursor-mode":o.settings.cursorMode??"center","data-cursor-direction":o.settings.cursorDirection==="down"?"down":"right",onPointerMove:su,onDragOver:dm,onDrop:cm,children:[n.jsx("div",{ref:Gt,className:`canvas-plane canvas-plane--grid-${Jo}`,"data-grid-type":Jo,"data-grid-snap":o.settings.gridSnap??!0?"on":"off",onPointerDown:km,onDoubleClick:vm,onContextMenu:a=>a.preventDefault(),children:n.jsxs("div",{ref:dn,className:"canvas-world","data-visible-nodes":Oa.length,"data-total-nodes":o.nodes.length,"data-visible-edges":ol.length,children:[n.jsxs("svg",{className:"edge-layer",width:"4000",height:"3000",viewBox:"-1200 -900 4000 3000","aria-hidden":"true",children:[ol.map(a=>n.jsx("path",{className:`edge-path edge-path--${a.kind}`,d:a.path,onClick:()=>O(s=>({...s,edges:s.edges.filter(i=>i.id!==a.id)}),"edge.delete",{id:a.id})},a.id)),qo&&n.jsx("path",{className:`edge-path edge-path--${qo.kind} edge-path--draft ${qo.targetId?"has-target":""}`,d:qo.path,"data-testid":"edge-connection-preview"})]}),n.jsx("div",{className:"canvas-cursor-marker","data-testid":"canvas-cursor-marker","data-cursor-mode":o.settings.cursorMode??"center","data-cursor-direction":o.settings.cursorDirection==="down"?"down":"right",style:{left:`${ba.x}px`,top:`${ba.y}px`},"aria-hidden":"true"}),Oa.map(a=>n.jsx(of,{node:a,selected:m.includes(a.id),pulsing:Mt===a.id,connectionDraft:G,onSelect:Eu,onDragStart:Sm,onResizeStart:wm,onPatch:ee,onDelete:lm,onDuplicate:pm,onRun:la,onPin:ym,onConnectorDragStart:bm,onOpenResult:te,onToggleAiReference:Xu,onCopyNode:Gu,onCopyEmbedReference:Ku,onFitNodeHeight:qu,onToggleNodeExpanded:Ju,onToggleWordWrap:Zu,onStageCompany:Qu,onOpenCompanyGraph:em,onSyncCompanyGoal:tm,onRefreshCompany:am,onSetCompanyStatus:Hi,onRemoveCompany:Wi,onOpenAsset:im,onOpenDirectorySettings:Uu,onScanDirectory:Vu,onCreateRemoteControl:Ou,onGenerateTemplateCard:Bu},a.id))]})}),so?n.jsx("div",{className:"canvas-selection-box",style:{left:so.left,top:so.top,width:so.width,height:so.height}}):null,Ba?n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"canvas-multi-selection-bounds",style:{left:Ba.left,top:Ba.top,width:Ba.width,height:Ba.height}}),n.jsxs("div",{className:"multi-selection-toolbar floating-panel",role:"toolbar","aria-label":"Multi selection actions",style:{left:Ba.toolbarLeft,top:Ba.toolbarTop},children:[n.jsx("span",{className:"multi-selection-toolbar__count",children:fn.length}),n.jsx("button",{type:"button",title:"Copy selected nodes","data-testid":"multi-selection-copy",onClick:()=>void ar(),children:n.jsx(So,{size:15})}),n.jsx("button",{type:"button",title:"Duplicate selected nodes",onClick:()=>tr("multi-toolbar"),children:n.jsx(rc,{size:15})}),n.jsx("button",{type:"button",title:"Bring selected nodes to front","data-testid":"multi-selection-bring-front",onClick:()=>to("front","multi-toolbar"),children:n.jsx(Fp,{size:15})}),n.jsx("button",{type:"button",title:"Send selected nodes to back","data-testid":"multi-selection-send-back",onClick:()=>to("back","multi-toolbar"),children:n.jsx($p,{size:15})}),n.jsx("button",{type:"button",title:"Fit selected text heights",onClick:um,children:n.jsx(Vl,{size:15})}),n.jsx("span",{className:"multi-selection-toolbar__separator"}),n.jsx("button",{type:"button",title:"Arrange selected nodes as grid",onClick:()=>nr("grid"),children:n.jsx(Yl,{size:15})}),n.jsx("button",{type:"button",title:"Arrange selected nodes as strip",onClick:()=>nr("strip"),children:n.jsx(Xl,{size:15})}),n.jsx("button",{type:"button",title:"Tidy selected nodes","data-testid":"multi-selection-tidy",onClick:()=>nr("tidy"),children:n.jsx(Gl,{size:15})}),Nm>=2&&n.jsx("button",{type:"button",title:"Stack selected image nodes","data-testid":"multi-selection-merge-images",onClick:mm,children:n.jsx(ns,{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:()=>er("multi-toolbar"),children:n.jsx(Is,{size:15})}),n.jsx("button",{type:"button",title:"Clear selection","data-testid":"multi-selection-clear",onClick:()=>{const a=K.current.length;y([]),f.emit("selection.cleared",{source:"multi-toolbar",beforeCount:a})},children:n.jsx(jt,{size:15})})]})]}):null,Io&&n.jsx("div",{className:"node-action-toast floating-panel",role:"status",children:Io}),n.jsxs("div",{className:"top-tabbar",role:"tablist","aria-label":"MindCanvas boards",children:[rn.map(a=>{const s=a.id===o.id,i=tt(a.name),l=db(a,o,s);return n.jsxs("div",{className:`tab-shell ${s?"is-active":""} ${ta===a.id?"is-dragging":""} ${Et===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":ta===a.id?"dragging":Et===a.id?"over":"idle",onDragStart:c=>{c.dataTransfer.effectAllowed="move",c.dataTransfer.setData("text/plain",a.id),va(a.id),f.emit("board.tabs.dragStart",{boardId:a.id})},onDragOver:c=>{!ta||ta===a.id||(c.preventDefault(),c.dataTransfer.dropEffect="move",an(a.id))},onDragLeave:()=>{an(c=>c===a.id?null:c)},onDrop:c=>{c.preventDefault();const h=ta||c.dataTransfer.getData("text/plain");tu(h,a.id),va(null),an(null)},onDragEnd:()=>{va(null),an(null)},onMouseDown:c=>{c.button===1&&(c.preventDefault(),Ws(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?Yc():Li(a.id),children:[a.sourceKind==="localBridge"?n.jsx(mo,{size:15}):n.jsx(ns,{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:c=>{c.stopPropagation(),Ws(a.id,"close-button")},children:n.jsx(jt,{size:13})})]},a.id)}),n.jsx("button",{type:"button",className:"tab-button tab-button--plain",title:"New board","data-testid":"board-create",onClick:Ri,children:n.jsx(xo,{size:16})})]}),ya&&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:()=>Dt("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":Xe.currentMode,"data-project-storage-selected-tab":Me,"data-project-storage-local-provider":Xe.localProviderKind,"data-project-storage-cloud-available":Xe.isCloudAvailable?"true":"false","data-project-storage-can-sync-cloud":Xe.canSyncLocalToCloud?"true":"false",children:[n.jsxs("header",{className:"local-board-panel__head project-gallery-panel__head",children:[n.jsxs("div",{className:"project-gallery-title",children:[n.jsxs("span",{className:"project-gallery-title__eyebrow",children:[n.jsx(Yl,{size:15}),"Project Gallery"]}),n.jsx("strong",{children:"Projects"}),n.jsx("p",{children:"Select a canvas snapshot to focus an open tab or load it in a new tab."})]}),n.jsxs("div",{className:"local-board-panel__actions project-gallery-panel__actions",children:[n.jsx("button",{type:"button",title:"New board",onClick:Ri,children:n.jsx(xo,{size:15})}),n.jsx("button",{type:"button",title:"Close Project Gallery",onClick:()=>Dt("close-button"),children:n.jsx(jt,{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":Xe.showLocalTab?"true":"false","data-project-storage-show-cloud":Xe.showCloudTab?"true":"false",children:[n.jsxs("button",{type:"button",role:"tab","aria-selected":Me==="local",className:Me==="local"?"is-active":"","data-testid":"project-storage-tab-local",onClick:()=>Mi("local"),children:[n.jsx(mo,{size:14}),"Local"]}),n.jsxs("button",{type:"button",role:"tab","aria-selected":Me==="cloud",className:Me==="cloud"?"is-active":"","data-testid":"project-storage-tab-cloud",onClick:()=>Mi("cloud"),children:[n.jsx(os,{size:14}),"Cloud"]})]}),n.jsxs("label",{className:"project-gallery-current-name",children:[n.jsx("span",{children:"Current canvas"}),n.jsx("input",{"aria-label":"Board name",className:"board-name-input",maxLength:90,value:o.name,onChange:a=>Vs(a.target.value)})]}),n.jsxs("div",{className:"project-gallery-rail-card",children:[n.jsx("span",{children:"Storage"}),n.jsx("strong",{children:Me==="local"?`${rt.length} local boards`:"Cloud gated"}),n.jsx("small",{children:Me==="local"?`${Xe.localProviderKind} provider / browser catalog and LocalBridge boards`:Xe.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:ot||void 0,children:Me==="local"?ot?ps(ot):qd(ve):"Cloud gated"}),n.jsx("small",{children:Me==="local"?ot||Be||"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:xa,onChange:a=>Xc(a.target.checked)}),n.jsx("span",{children:"Show at startup"})]})]}),n.jsx("section",{className:"project-gallery-board-area",children:Me==="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:[rt.length," saved"]})]}),n.jsxs("div",{className:"local-board-list local-board-list--stored project-gallery-board-grid","data-project-gallery-board-grid":"true",children:[rt.map(a=>{const s=Os===a.id,i=a.id===o.id;return n.jsx("div",{"data-testid":"stored-board-row","data-board-id":a.id,className:`local-board-row local-board-row--compound project-gallery-board-card ${i?"is-active":""} ${s?"is-editing":""}`,children:s?n.jsxs("div",{className:"stored-board-rename",children:[n.jsx("input",{"aria-label":"Rename saved board",maxLength:90,value:ka,onChange:l=>tn(l.target.value),onKeyDown:l=>Yu(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:()=>Qs(a.id),children:n.jsx(fr,{size:13})}),n.jsx("button",{type:"button",title:"Cancel rename","data-testid":"stored-board-rename-cancel",onClick:Zs,children:n.jsx(jt,{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:()=>Li(a.id),onDoubleClick:l=>{l.stopPropagation(),Ui(a)},children:[a.sourceKind==="localBridge"?n.jsx(mo,{size:15}):n.jsx(It,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:tt(a.name)}),n.jsx("small",{children:Vb(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:()=>Ui(a),children:n.jsx(Kl,{size:14})}),n.jsx("button",{type:"button",className:"local-board-row__action",title:"Delete board","data-testid":"stored-board-delete",disabled:i,onClick:()=>Ws(a.id,"project-gallery"),children:n.jsx(Is,{size:14})})]})},a.id)}),rt.length===0&&n.jsx("p",{className:"local-board-message",children:"No saved React boards yet."})]})]}),n.jsxs("div",{className:"local-board-section project-gallery-bridge-section",children:[n.jsxs("div",{className:"local-board-section__title",children:[n.jsx("span",{children:"LocalBridge"}),n.jsx("button",{type:"button",title:"Refresh local boards",onClick:_t,disabled:ve==="checking",children:ve==="checking"?n.jsx(Jt,{size:15,className:"spin-icon"}):n.jsx(In,{size:15})})]}),n.jsxs("div",{className:`local-board-state local-board-state--${ve}`,children:[ve==="blocked"?n.jsx(nc,{size:15}):ve==="unavailable"?n.jsx(zp,{size:15}):n.jsx(mo,{size:15}),n.jsx("span",{children:qd(ve)}),ve==="blocked"&&!yn()&&n.jsx("button",{type:"button",onClick:Ti,children:"Enable"})]}),Rt&&n.jsx("p",{className:"local-board-message",children:Rt}),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(br,{size:16}),n.jsxs("span",{children:[n.jsx("strong",{children:"Local Workspace"}),n.jsx("small",{title:ot||void 0,children:ot||Be||"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:Oe,onClick:()=>void Gc("workspace-panel"),children:[n.jsx(In,{size:14}),n.jsx("span",{children:"Refresh"})]}),n.jsxs("button",{type:"button","data-testid":"project-gallery-workspace-browse",title:"Select Local Storage",disabled:Oe||ve==="blocked"&&!yn(),onClick:()=>void Kc(),children:[Oe?n.jsx(Jt,{size:14,className:"spin-icon"}):n.jsx(br,{size:14}),n.jsx("span",{children:"Select Local Storage"})]})]}),Bn.length>0&&n.jsx("div",{className:"project-gallery-workspace-history","data-testid":"project-gallery-workspace-history",children:Bn.map(a=>n.jsx("button",{type:"button",title:a,disabled:Oe||a===ot,onClick:()=>void Hs(a,"history"),children:ps(a,40)},a))})]}),n.jsxs("button",{type:"button",className:"local-board-export","data-testid":"localbridge-export",disabled:$t||!!((cl=o.source)!=null&&cl.partialImport)||!!((ul=o.source)!=null&&ul.truncated)||ve==="blocked"&&!yn(),title:(ml=o.source)!=null&&ml.partialImport?"Export blocked for partial original imports":(pl=o.source)!=null&&pl.truncated?"Export blocked for truncated imported boards":"Export current board to LocalBridge",onClick:()=>void qc(),children:[$t?n.jsx(Jt,{size:15,className:"spin-icon"}):n.jsx(ql,{size:15}),n.jsx("span",{children:$t?"Exporting":"Export current"})]}),n.jsx("div",{className:"local-board-list project-gallery-bridge-list",children:Ve.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:!!Re,onClick:()=>void au(a),children:[n.jsx(mo,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:tt(a.Title)}),n.jsx("small",{children:ni(a.UpdatedAt)})]}),Re===a.Id&&n.jsx(Jt,{size:15,className:"spin-icon"})]},a.Id))})]})]}):n.jsxs("div",{className:"project-cloud-shell","data-testid":"project-cloud-shell","data-project-cloud-status":Xe.isCloudAvailable?"available":"gated","data-project-cloud-plan":Xe.cloudPlanKey,"data-project-cloud-entitlement":Xe.cloudEntitlementStatus,"data-production-adapter-state":Qe.overallState,"data-project-cloud-database-mode":Qe.cloudBoards.mode,"data-project-cloud-database-ready":Qe.cloudBoards.canAttempt?"true":"false","data-project-cloud-asset-upload-mode":Qe.cloudAssetUpload.mode,"data-project-cloud-asset-upload-ready":Qe.cloudAssetUpload.canAttempt?"true":"false","data-client-secret-blocked":Qe.forbiddenClientSecretKeys.length>0?"true":"false",children:[n.jsx("div",{className:"project-cloud-shell__icon",children:ye?n.jsx(os,{size:22}):n.jsx(ui,{size:22})}),n.jsx("strong",{children:ye?"Cloud boards are provider-ready":"Cloud projects are adapter-gated"}),n.jsx("p",{children:ye?"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: ",ye?"Cloud ready":"Local"]}),n.jsxs("small",{children:[tt(o.name)," / ",Fn??Xe.cloudStatusMessage??"saved in this browser"]})]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-new-board",disabled:!ye||Pt,title:ye?"Create and save a cloud board":"Cloud board creation requires the cloud adapter",onClick:Qc,children:[Pt?n.jsx(Jt,{size:14,className:"spin-icon"}):n.jsx(xo,{size:14}),Pt?"Saving":"New cloud board"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-save-current",disabled:!ye||Pt,title:ye?"Save current board to Supabase":"Cloud save requires Supabase login",onClick:Zc,children:[n.jsx(ql,{size:14}),"Save current"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-refresh",disabled:!ye||Pt,title:ye?"Refresh cloud boards":"Cloud refresh requires Supabase login",onClick:()=>void Us("refresh-button"),children:[Pt?n.jsx(Jt,{size:14,className:"spin-icon"}):n.jsx(In,{size:14}),"Refresh cloud"]}),n.jsxs("button",{type:"button","data-testid":"project-cloud-login-shell",onClick:()=>e("/login"),children:[n.jsx(os,{size:14}),"Open login shell"]}),ye&&n.jsxs("div",{className:"local-board-list project-gallery-cloud-list","data-testid":"project-cloud-board-list",children:[ea.map(a=>n.jsxs("button",{type:"button","data-testid":"project-cloud-board-row","data-board-id":a.id,className:"local-board-row",disabled:!!Qa,onClick:()=>void Jc(a),children:[n.jsx(os,{size:15}),n.jsxs("span",{children:[n.jsx("strong",{children:tt(a.name)}),n.jsxs("small",{children:[ni(a.updatedAt)," / ",a.nodeCount," nodes"]})]}),Qa===a.id&&n.jsx(Jt,{size:15,className:"spin-icon"})]},a.id)),ea.length===0&&n.jsx("p",{className:"local-board-message",children:"No cloud boards loaded."})]})]})})]})]})})})]}),!dr&&n.jsx(Yh,{bridgeState:ve,bridgeMessage:Rt,bridgeStatus:Bs,syncStatus:qa,syncMessage:Qt,hostedBridgeAccessEnabled:yn(),onRefreshBridge:_t,onEnableHostedBridge:Ti}),Aa&&ne&&n.jsx(Dl,{launchers:Na,activeLauncher:ne,template:Ge,selectedOptionId:it,values:Vt,validationMessage:Wn??(ln?null:Yn),canCreate:ln||!Yn,primaryLabel:ln?"Add template card":"Create board",onLauncherSelected:xu,onOptionSelected:wu,onInputChanged:ku,onCreate:eu,onClose:Su}),To&&n.jsx("div",{className:"template-studio-chooser-backdrop","data-testid":"template-studio-chooser",onMouseDown:Di,children:n.jsxs("section",{className:"template-studio-chooser floating-panel",onMouseDown:a=>a.stopPropagation(),children:[n.jsxs("header",{className:"template-studio-chooser__head",children:[n.jsxs("div",{children:[n.jsx("span",{children:"Template Studio"}),n.jsx("strong",{children:"Current Canvas Authoring Mode"})]}),n.jsx("button",{type:"button",title:"Close Template Studio chooser","data-testid":"template-studio-chooser-close",onClick:Di,children:n.jsx(jt,{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:ju,children:[n.jsx("span",{className:"template-studio-chooser__icon",children:n.jsx(xo,{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:Iu,children:[n.jsx("span",{className:"template-studio-chooser__icon",children:n.jsx(ss,{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."})]})]})]})]})}),nn&&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(ns,{size:15}),n.jsx("span",{children:"Template Studio"})]}),n.jsxs("div",{className:"template-studio-toolbar__meta",children:["Editing ",je.templateId]}),n.jsx("button",{type:"button",title:"Compile manifest","data-testid":"template-studio-compile",onClick:Gs,children:n.jsx(An,{size:15})}),n.jsx("button",{type:"button",title:"Test create board","data-testid":"template-studio-test-create",onClick:Tu,children:n.jsx(ha,{size:15})}),n.jsx("button",{type:"button",title:"Copy manifest JSON","data-testid":"template-studio-copy",onClick:()=>void Mu(),children:n.jsx(So,{size:15})}),n.jsx("button",{type:"button",title:"Save template draft","data-testid":"template-studio-save",onClick:Nu,children:n.jsx(fr,{size:15})}),n.jsx("button",{type:"button",title:"Exit Template Studio","data-testid":"template-studio-close",onClick:Oi,children:n.jsx(jt,{size:15})})]}),n.jsx("div",{className:"template-studio-toolbar template-studio-toolbar--roles floating-panel",children:gr.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:()=>Au(a.studioNodeType),children:n.jsx("span",{children:a.shortLabel})},a.studioNodeType))}),Q&&n.jsxs("div",{className:"template-studio-toolbar template-studio-toolbar--selected floating-panel",children:[n.jsxs("div",{className:"template-studio-toolbar__meta template-studio-toolbar__meta--selected",children:["Selected: ",Q.title||Q.kind]}),gr.map(a=>n.jsx("button",{type:"button",title:a.label,className:oo===a.studioNodeType?"is-active":"","data-testid":"template-studio-role","data-studio-node-type":a.studioNodeType,onClick:()=>Fi(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:je.templateTitle})]}),n.jsx("button",{type:"button",title:"Close Template Studio",onClick:Oi,children:n.jsx(jt,{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:je.templateId,onChange:a=>zo("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:je.templateTitle,onChange:a=>zo("templateTitle",a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Category"}),n.jsx("input",{type:"text",value:je.category,onChange:a=>zo("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:je.boardTitle,onChange:a=>zo("boardTitle",a.target.value)})]})]}),Q?n.jsxs("section",{className:"template-studio-panel__section","data-testid":"template-studio-selected-node",children:[n.jsxs("div",{className:"template-studio-panel__node-summary",children:[n.jsx("strong",{children:Q.title||Q.kind}),n.jsx("span",{children:jm})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Template Role"}),n.jsxs("select",{value:oo,onChange:a=>Fi(a.target.value),children:[n.jsx("option",{value:"",children:"Unassigned"}),gr.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:((gl=Q.metadata)==null?void 0:gl[Y.templateNodeId])??"",onChange:a=>Kt(Y.templateNodeId,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Compile Target"}),n.jsxs("select",{value:((hl=Q.metadata)==null?void 0:hl[Y.compileTarget])??"",onChange:a=>Kt(Y.compileTarget,a.target.value),children:[n.jsx("option",{value:"",children:"Auto"}),lp.map(a=>n.jsx("option",{value:a,children:a},a))]})]}),Im?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:((fl=Q.metadata)==null?void 0:fl[Y.inputKey])??"",onChange:a=>Kt(Y.inputKey,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Input Type"}),n.jsxs("select",{value:((bl=Q.metadata)==null?void 0:bl[Y.inputType])??"text",onChange:a=>Kt(Y.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:(((yl=Q.metadata)==null?void 0:yl[Y.inputRequired])??"").toLowerCase()==="true",onChange:a=>Kt(Y.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:((xl=Q.metadata)==null?void 0:xl[Y.inputPlaceholder])??"",onChange:a=>Kt(Y.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:((Cl=Q.metadata)==null?void 0:Cl[Y.inputDefaultValue])??"",onChange:a=>Kt(Y.inputDefaultValue,a.target.value)})]}),n.jsxs("label",{className:"template-studio-panel__field",children:[n.jsx("span",{children:"Description"}),n.jsx("textarea",{value:((Sl=Q.metadata)==null?void 0:Sl[Y.inputDescription])??"",onChange:a=>Kt(Y.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:((wl=Q.metadata)==null?void 0:wl[Y.inputOptions])??"",onChange:a=>Kt(Y.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"}),Ro&&n.jsx("small",{children:Ro})]}),he!=null&&he.issues.length?n.jsx("div",{className:"template-studio-panel__issues","data-testid":"template-studio-issues",children:he.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,he?n.jsx("pre",{className:"template-studio-panel__manifest","data-testid":"template-studio-manifest",children:he.manifestJson}):n.jsx("p",{className:"template-studio-panel__hint",children:"Compile to preview the JSON manifest for the selected Studio nodes."})]})]})]})]}),Po&&Go&&n.jsx(Dl,{launchers:[Zi],activeLauncher:Zi,template:Go,selectedOptionId:null,values:Yt,validationMessage:sn??Qi,canCreate:!Qi,onLauncherSelected:()=>{},onOptionSelected:()=>{},onInputChanged:Lu,onCreate:Pu,onClose:Ru}),n.jsx("input",{ref:Gn,type:"file",accept:"application/json,.json",multiple:!0,hidden:!0,"data-testid":"board-import-input",onChange:a=>{ou(a.currentTarget.files),a.currentTarget.value=""}}),!dr&&n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"canvas-toolbar",role:"toolbar","aria-label":Lm?"MindCanvas all tools":"MindCanvas curated tools","data-testid":"canvas-function-toolbar","data-function-toolbar-mode":Ia,children:Ia==="curated"?n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",title:"Add note","data-testid":"note-node-add",onClick:()=>Ce("note"),children:n.jsx(js,{size:17})}),n.jsx("button",{type:"button",title:"Add image","data-testid":"image-node-add",onClick:()=>Ce("image"),children:n.jsx(Mn,{size:17})}),n.jsx("button",{type:"button",title:"Add video","data-testid":"video-node-add",onClick:()=>Ce("video"),children:n.jsx(Tn,{size:17})}),n.jsx("button",{type:"button",title:"Add remote monitor","data-testid":"remote-monitor-node-add",onClick:()=>Ce("remote-monitor"),children:n.jsx(vs,{size:17})}),n.jsx("button",{type:"button",title:"Add AI Task","data-testid":"ai-task-node-add",onClick:()=>Ce("ai-task"),children:n.jsx(Nn,{size:17})}),n.jsx("button",{type:"button",title:"Add file reference","data-testid":"file-node-add",onClick:()=>Ce("file"),children:n.jsx(zr,{size:17})}),n.jsx("button",{type:"button",title:"Tools",onClick:()=>e("/tools"),children:n.jsx(fs,{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":ct.total,"data-ai-task-runnable":ct.runnable,"data-ai-task-running":ct.running,onClick:Xi,children:n.jsx(ha,{size:17})}),n.jsx("button",{type:"button",title:"Run selected graph","data-testid":"automation-run-selected","data-selected-graph-size":Ko.size,"data-selected-graph-runnable":Ko.runnable,disabled:!Q||Q.kind!=="ai-task",onClick:Vi,children:n.jsx(yr,{size:17})}),n.jsx("button",{type:"button",title:"Pause running AI tasks","data-testid":"automation-pause","data-running-ai-tasks":ct.running,onClick:Gi,children:n.jsx(vo,{size:17})}),n.jsx("button",{type:"button",title:"Stop active AI tasks","data-testid":"automation-stop","data-active-ai-tasks":ct.active,"data-paused-ai-tasks":ct.paused,onClick:Ki,children:n.jsx(Jl,{size:15})}),n.jsx("button",{type:"button",title:"Generate flow",disabled:!Q,onClick:qi,children:n.jsx(ss,{size:17})}),n.jsx("span",{className:"toolbar-separator"}),n.jsx("button",{type:"button",title:"Undo","data-testid":"history-undo",disabled:d.length===0,onClick:Yo,children:n.jsx(Zl,{size:17})}),n.jsx("button",{type:"button",title:"Redo","data-testid":"history-redo",disabled:p.length===0,onClick:Xo,children:n.jsx(Ql,{size:17})})]}):n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",title:"Add note","data-testid":"note-node-add",onClick:()=>Ce("note"),children:n.jsx(js,{size:17})}),n.jsx("button",{type:"button",title:"Add memo","data-testid":"memo-node-add",onClick:()=>Ce("memo"),children:n.jsx(sc,{size:17})}),n.jsx("button",{type:"button",title:"Add markdown","data-testid":"markdown-node-add",onClick:()=>Ce("markdown"),children:n.jsx(It,{size:17})}),n.jsx("button",{type:"button",title:"Add CSV table","data-testid":"csv-table-node-add",onClick:()=>Ce("csv-table"),children:n.jsx(Xl,{size:17})}),n.jsx("button",{type:"button",title:"Add code","data-testid":"code-node-add",onClick:()=>Ce("code"),children:n.jsx(An,{size:17})}),n.jsx("button",{type:"button",title:"Add AI Task","data-testid":"ai-task-node-add",onClick:()=>Ce("ai-task"),children:n.jsx(Nn,{size:17})}),n.jsx("button",{type:"button",title:"Add Code Note","data-testid":"code-note-node-add",onClick:Du,children:n.jsx(An,{size:17})}),n.jsx("button",{type:"button",title:"Add Agent Command","data-testid":"agent-command-node-add",onClick:_u,children:n.jsx(Up,{size:17})}),n.jsx("button",{type:"button",title:"Add image generation spec","data-testid":"image-generate-node-add",onClick:()=>Ce("ai-task","image-generate"),children:n.jsx(Mn,{size:17})}),n.jsx("button",{type:"button",title:"Add video generation spec","data-testid":"video-generate-node-add",onClick:()=>Ce("ai-task","video-generate"),children:n.jsx(Tn,{size:17})}),n.jsx("button",{type:"button",title:"Add image","data-testid":"image-node-add",onClick:()=>Ce("image"),children:n.jsx(Mn,{size:17})}),n.jsx("button",{type:"button",title:"Add image mask","data-testid":"mask-node-add",onClick:()=>Ce("mask"),children:n.jsx(Hp,{size:17})}),n.jsx("button",{type:"button",title:"Add video","data-testid":"video-node-add",onClick:()=>Ce("video"),children:n.jsx(Tn,{size:17})}),n.jsx("button",{type:"button",title:"Add embed","data-testid":"embed-node-add",onClick:()=>Ce("embed"),children:n.jsx(Rn,{size:17})}),n.jsx("button",{type:"button",title:"Add remote monitor","data-testid":"remote-monitor-node-add",onClick:()=>Ce("remote-monitor"),children:n.jsx(vs,{size:17})}),n.jsx("button",{type:"button",title:"Add PDF","data-testid":"pdf-node-add",onClick:()=>Ce("pdf"),children:n.jsx(It,{size:17})}),n.jsx("button",{type:"button",title:"Add file reference","data-testid":"file-node-add",onClick:()=>Ce("file"),children:n.jsx(zr,{size:17})}),n.jsx("button",{type:"button",title:"Add directory reference","data-testid":"directory-node-add",onClick:()=>Ce("directory"),children:n.jsx(br,{size:17})}),n.jsx("button",{type:"button",title:"Templates","data-testid":"template-launcher-open",onClick:Cu,children:n.jsx(ns,{size:17})}),n.jsx("button",{type:"button",title:"Template Studio",className:nn||To?"is-active":"","data-testid":"template-studio-open",onClick:vu,children:n.jsx(Kl,{size:17})}),n.jsx("button",{type:"button",title:"Import board JSON","data-testid":"board-import-open",onClick:nu,children:n.jsx(Wp,{size:17})}),n.jsx("button",{type:"button",title:"Tools",onClick:()=>e("/tools"),children:n.jsx(fs,{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":ct.total,"data-ai-task-runnable":ct.runnable,"data-ai-task-running":ct.running,onClick:Xi,children:n.jsx(ha,{size:17})}),n.jsx("button",{type:"button",title:"Run selected graph","data-testid":"automation-run-selected","data-selected-graph-size":Ko.size,"data-selected-graph-runnable":Ko.runnable,disabled:!Q||Q.kind!=="ai-task",onClick:Vi,children:n.jsx(yr,{size:17})}),n.jsx("button",{type:"button",title:"Pause running AI tasks","data-testid":"automation-pause","data-running-ai-tasks":ct.running,onClick:Gi,children:n.jsx(vo,{size:17})}),n.jsx("button",{type:"button",title:"Stop active AI tasks","data-testid":"automation-stop","data-active-ai-tasks":ct.active,"data-paused-ai-tasks":ct.paused,onClick:Ki,children:n.jsx(Jl,{size:15})}),n.jsx("button",{type:"button",title:"Generate flow",disabled:!Q,onClick:qi,children:n.jsx(ss,{size:17})}),n.jsx("span",{className:"toolbar-separator"}),n.jsx("button",{type:"button",title:"Undo","data-testid":"history-undo",disabled:d.length===0,onClick:Yo,children:n.jsx(Zl,{size:17})}),n.jsx("button",{type:"button",title:"Redo","data-testid":"history-redo",disabled:p.length===0,onClick:Xo,children:n.jsx(Ql,{size:17})})]})}),n.jsxs("div",{className:"search-panel floating-panel","data-testid":"mindcanvas-search-panel","data-search-engine":se,"data-search-worker-state":pe,children:[n.jsxs("div",{className:"search-input-row",children:[n.jsx(Vp,{size:16}),n.jsx("input",{ref:cn,"data-testid":"mindcanvas-search-input","aria-label":"Search text",value:v,onChange:a=>D(a.target.value),onKeyDown:Cm,placeholder:"Search text ..."}),n.jsx("span",{className:"search-count","data-testid":"mindcanvas-search-count","aria-live":"polite",children:Rm}),n.jsx("button",{type:"button",title:"Previous search result","data-testid":"mindcanvas-search-prev",disabled:F.length===0,onClick:()=>no(-1),children:n.jsx(Yp,{size:14})}),n.jsx("button",{type:"button",title:"Next search result","data-testid":"mindcanvas-search-next",disabled:F.length===0,onClick:()=>no(1),children:n.jsx(lc,{size:14})})]}),sl&&n.jsx("div",{className:"search-current","data-testid":"mindcanvas-search-current","aria-live":"polite",children:rl?n.jsxs(n.Fragment,{children:[n.jsxs("span",{children:[W+1," / ",F.length]}),n.jsxs("button",{type:"button","data-testid":"mindcanvas-search-focus",onClick:()=>sr("current-button"),children:["Focus ",rl.title]})]}):n.jsx("span",{children:"No matches"})}),F.length>0&&n.jsx("div",{className:"search-results","data-testid":"mindcanvas-search-results",children:F.map((a,s)=>n.jsxs("button",{type:"button","data-testid":"mindcanvas-search-result",className:s===W?"is-active":"","aria-current":s===W?"true":void 0,onMouseEnter:()=>ie(s),onClick:()=>or(a,"result-click"),children:[n.jsx("strong",{children:a.title}),n.jsx("span",{children:a.body.slice(0,84)})]},a.id))})]})]}),G&&n.jsxs("div",{className:"connection-toast floating-panel",children:[n.jsx(fr,{size:14}),G.dragging?`Release over another node connector to create a ${G.kind} line.`:`Drag from a connector, or select another node connector, to create a ${G.kind} line.`,n.jsx("button",{type:"button",onClick:()=>V(null),children:"Cancel"})]}),(da==null?void 0:da.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:[da.title," Result"]}),n.jsx("button",{type:"button",title:"Close",onClick:()=>te(null),children:n.jsx(jt,{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 gm(da),children:[n.jsx(So,{size:14}),n.jsx("span",{children:"Copy"})]}),n.jsxs("button",{type:"button",title:"Archive result as a Markdown node",onClick:()=>hm(da),children:[n.jsx(It,{size:14}),n.jsx("span",{children:"Archive"})]}),n.jsxs("button",{type:"button",title:"Stage a follow-up AI Task from this result",onClick:()=>fm(da),children:[n.jsx(Nn,{size:14}),n.jsx("span",{children:"Follow-up"})]})]}),n.jsx("pre",{className:"result-popover__body",children:da.result})]}),He&&n.jsx(Nf,{url:He.url,fileName:He.fileName,onClose:()=>{Tt(null),f.emit("node.pdf.preview.close")}}),tl&&n.jsx(dp,{node:tl,onSave:Wu,onClose:Hu}),ja&&n.jsx(cp,{settings:o.settings,onPatchSettings:Ie,onClose:bu}),el&&n.jsx(If,{board:o,rootNode:el,onClose:nm,onStatus:Hi,onRemove:Wi,onSubmitFollowUp:sm,onApproval:om,onAddArtifact:rm}),ft&&n.jsx(up,{board:o,selectedNode:Q??null,selectedCount:m.length,input:k,viewport:ge,viewportSize:z,localBridgeState:ve,syncStatus:qa,syncMessage:Qt,buildPrompt:Am,navigate:e,onClose:yu}),!dr&&n.jsxs("div",{className:"global-input-shell","data-active-submits":B,"data-submit-state":B>0?"active":"idle",onFocusCapture:()=>void Zn("input-focus"),onPointerDown:()=>void Zn("input-pointer"),children:[n.jsx("textarea",{ref:Xn,"data-testid":"global-input-textarea",value:k,placeholder:(Q==null?void 0:Q.kind)==="ai-task"?"Run selected AI Task...":"Talk with AI...",onChange:a=>L(a.target.value),onKeyDown:a=>{a.repeat||a.nativeEvent.isComposing||a.keyCode===229||(a.ctrlKey||a.metaKey)&&a.key==="Enter"&&(a.preventDefault(),Yi())}}),n.jsxs("div",{className:"input-controls",children:[n.jsx("button",{className:`input-settings-button ${ja?"is-active":""}`,type:"button",title:"AI Settings","aria-label":"AI Settings","aria-pressed":ja?"true":void 0,"data-testid":"ai-settings-open",onClick:fu,children:n.jsx(fs,{size:16})}),["Text","Image","Video"].map(a=>n.jsx("button",{className:o.settings.inputMode===a?"is-active":"",type:"button","data-testid":`global-input-mode-${a.toLowerCase()}`,onClick:()=>{Pi("inputMode",a),Zn(`mode-${a.toLowerCase()}`)},children:a},a)),o.settings.inputMode==="Text"&&n.jsxs(n.Fragment,{children:[n.jsx(is,{value:ru,options:iu,onChange:a=>pu(a),ariaLabel:"Text model",className:"catalog-pill--model",menuClassName:"catalog-pill__menu--model",testId:"text-model-select"}),n.jsx(is,{value:o.settings.effort,options:mu,onChange:a=>Pi("effort",a),ariaLabel:"Reasoning effort",className:"catalog-pill--effort",testId:"reasoning-effort-select"})]}),kt&&lr&&n.jsxs(n.Fragment,{children:[n.jsx(is,{value:lr.model.id,options:kt==="Image"?lu:du,onChange:a=>gu(kt,a),ariaLabel:`${kt} model`,className:"catalog-pill--model",menuClassName:"catalog-pill__menu--model",testId:`${kt.toLowerCase()}-model-select`}),n.jsx(is,{value:lr.aspect.id,options:kt==="Image"?cu:uu,onChange:a=>hu(kt,a),ariaLabel:`${kt} aspect ratio`,className:"catalog-pill--aspect",testId:`${kt.toLowerCase()}-aspect-select`})]}),n.jsx("span",{className:"input-controls__spacer"}),n.jsx("span",{className:"global-submit-count","aria-live":"polite",children:B}),n.jsx("button",{className:"send-button",type:"button",title:"Submit","data-testid":"global-input-submit",disabled:!Tm,onClick:Yi,children:n.jsx(yr,{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:[Pc.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:()=>$u(a),children:a==="dot"?n.jsx(Xp,{size:15}):a==="line"?n.jsx(Gp,{size:15}):a==="particles"?n.jsx(Gl,{size:15}):n.jsx(ss,{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":il,className:il?"is-active":"","data-testid":"canvas-grid-snap-toggle",onClick:zu,children:n.jsx(Kp,{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:Ks,children:n.jsx(qp,{size:15})}),(()=>{const a=!!ms(ll[pa]);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?_a(pa):Qn(pa)},children:n.jsx("span",{"aria-hidden":"true",children:"N"})})})(),Ir.map(a=>{const s=!!ms(ll[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?_a(a):Qn(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:Fu,children:n.jsx(Jp,{size:15})})]})]}),n.jsxs("div",{className:"bottom-controls",children:[n.jsx("button",{type:"button",title:"Mouse wheel mode","aria-label":"Toggle mouse wheel mode","aria-pressed":o.settings.wheelMode,className:o.settings.wheelMode?"is-active":"","data-testid":"canvas-wheel-mode-toggle","data-wheel-mode":o.settings.wheelMode?"mouse":"trackpad",onClick:()=>qs("button"),children:n.jsx(Zp,{size:17})}),n.jsx("button",{type:"button",title:`Cursor direction ${o.settings.cursorDirection==="down"?"down":"right"}`,"aria-label":"Toggle cursor direction","aria-pressed":o.settings.cursorDirection==="down",className:o.settings.cursorDirection==="down"?"is-active":"","data-testid":"canvas-cursor-direction-toggle","data-cursor-direction":o.settings.cursorDirection==="down"?"down":"right",onClick:()=>Js("button"),children:n.jsx(Qp,{size:17})}),n.jsx("button",{type:"button",title:"Reset fixture",onClick:xm,children:n.jsx(eg,{size:17})}),n.jsx("button",{type:"button",title:bt?"Exit read mode":"Fullscreen","aria-label":bt?"Exit read mode":"Fullscreen","aria-pressed":bt,className:bt?"is-active":"","data-testid":"canvas-read-mode-toggle","data-read-mode":bt?"true":"false",onClick:()=>{eo("button")},children:n.jsx(Vl,{size:17})})]}),o.settings.minimapEnabled&&ut&&n.jsxs("section",{className:"canvas-minimap floating-panel","aria-label":"Canvas minimap","data-testid":"canvas-minimap",children:[n.jsxs("div",{className:"canvas-minimap__head",children:[n.jsx("span",{children:"Minimap"}),n.jsx("small",{children:o.nodes.length})]}),n.jsxs("button",{type:"button",className:"canvas-minimap__stage","aria-label":"Navigate canvas minimap","data-testid":"canvas-minimap-stage",onPointerDown:Mm,children:[ut.nodes.map(a=>n.jsx("span",{className:`canvas-minimap__node canvas-minimap__node--${a.kind} ${m.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:`${ut.viewport.x}px`,top:`${ut.viewport.y}px`,width:`${ut.viewport.width}px`,height:`${ut.viewport.height}px`}})]})]}),n.jsxs("div",{className:"canvas-status",children:[o.nodes.length," nodes / ",Oa.length," rendered / ",o.edges.length," edges / ",Math.round(ge.scale*100),"%",((kl=o.source)==null?void 0:kl.kind)==="localBridge"&&n.jsxs(n.Fragment,{children:[" ","/ LocalBridge",o.source.partialImport?" partial":"",o.source.truncated?` ${o.source.renderedNodeCount}/${o.source.originalNodeCount}`:""]})]})]})}function qd(e){switch(e){case"checking":return"Checking";case"connected":return"Connected";case"blocked":return"Access gated";case"unavailable":return"Unavailable";default:return"Idle"}}export{_y as MindCanvas};
|