@mindexec/cli 0.2.384 → 0.2.385
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/codex-runtime.js +31 -255
- package/package.json +1 -1
- package/remote-hub.js +2 -80
- package/scripts/remote-fast-live-rate-smoke.mjs +3 -19
- package/scripts/remote-fast-mdm-browser-smoke.mjs +2 -28
- package/scripts/remote-hub-smoke.mjs +2 -32
- package/scripts/setup-tree-sitter-grammars.mjs +5 -26
- package/server.js +33 -1811
- package/wwwroot/MindExecution.Web.styles.css +3 -0
- package/wwwroot/_content/MindExecution.Plugins.Admin/css/admin-dashboard.css +546 -0
- package/wwwroot/_content/MindExecution.Plugins.Directory/MindExecution.Plugins.Directory.u7utcng611.bundle.scp.css +7 -0
- package/wwwroot/_content/MindExecution.Plugins.Directory/background.png +0 -0
- package/wwwroot/_content/MindExecution.Plugins.Directory/directory-manager.js +202 -0
- package/wwwroot/_content/MindExecution.Plugins.Directory/exampleJsInterop.js +6 -0
- package/wwwroot/_content/MindExecution.Plugins.YouTube/css/youtube-search.css +251 -0
- package/wwwroot/_content/MindExecution.Shared/MindExecution.Shared.wsano1j4wp.bundle.scp.css +4 -0
- package/wwwroot/_content/MindExecution.Shared/css/admin-dashboard.css +559 -0
- package/wwwroot/_content/MindExecution.Shared/css/app.css +1 -0
- package/wwwroot/_content/MindExecution.Shared/css/mind-map-overrides.css +3705 -0
- package/wwwroot/_content/MindExecution.Shared/fonts/NotoSansKR-Bold.ttf +0 -0
- package/wwwroot/_content/MindExecution.Shared/fonts/NotoSansKR-Regular.ttf +0 -0
- package/wwwroot/_content/MindExecution.Shared/js/agent-visualization.js +359 -0
- package/wwwroot/_content/MindExecution.Shared/js/background-themes.js +1631 -0
- package/wwwroot/_content/MindExecution.Shared/js/code-master.js +8316 -0
- package/wwwroot/_content/MindExecution.Shared/js/file-system-helper.js +639 -0
- package/wwwroot/_content/MindExecution.Shared/js/helpers/InfiniteGridHelper.js +109 -0
- package/wwwroot/_content/MindExecution.Shared/js/marked.min.js +69 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js +9987 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js.backup +1059 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-manager.js +24635 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-dev-guards.js +325 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-dnd.js +1491 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-dnd.js.bak +434 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-glow-shader.js +260 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-interactions.js +7821 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-plan-worker.js +160 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-renderer.js +10441 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-logic-workers.js +977 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-menu-manager.js +1531 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-multi-select.js +1716 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-node-search-worker.js +554 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-nodes.js +4578 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-object-manager.js +489 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-object-manager.js.backup +372 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-pipeline.js +2203 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-text-lod-system.js +646 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-text-overlay-v2.js +4735 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-texture-factory.js +2383 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-texture-factory.js.backup +1258 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-visibility-worker.js +890 -0
- package/wwwroot/_content/MindExecution.Shared/js/mindmap-toolbar.js +639 -0
- package/wwwroot/_content/MindExecution.Shared/js/native-drop-handler.js +170 -0
- package/wwwroot/_content/MindExecution.Shared/js/plan-master.js +788 -0
- package/wwwroot/_content/MindExecution.Shared/js/renderers/CSS3DRenderer.js +50 -0
- package/wwwroot/_content/MindExecution.Shared/js/texture-worker-manager.js +188 -0
- package/wwwroot/_content/MindExecution.Shared/js/texture-worker.js +208 -0
- package/wwwroot/_content/MindExecution.Shared/js/three.min.js +6 -0
- package/wwwroot/_content/MindExecution.Shared/js/titlebar-handler.js +191 -0
- package/wwwroot/_content/MindExecution.Shared/js/token-manager.js +37 -0
- package/wwwroot/_content/MindExecution.Shared/js/token-worker.js +28 -0
- package/wwwroot/_content/MindExecution.Shared/js/troika-bundle.js +5626 -0
- package/wwwroot/_content/MindExecution.Shared/js/troika-bundle.js.map +7 -0
- package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/css/all.min.css +9 -0
- package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/webfonts/fa-brands-400.ttf +0 -0
- package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/webfonts/fa-brands-400.woff2 +0 -0
- package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/webfonts/fa-regular-400.ttf +0 -0
- package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/webfonts/fa-regular-400.woff2 +0 -0
- package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/webfonts/fa-solid-900.ttf +0 -0
- package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/webfonts/fa-solid-900.woff2 +0 -0
- package/wwwroot/_content/MindExecution.Shared/models/all-MiniLM-L6-v2-quantized.onnx +0 -0
- package/wwwroot/_content/MindExecution.Shared/models/vocab.txt +30522 -0
- package/wwwroot/_framework/Google.Protobuf.9h59ukbel7.dll +0 -0
- package/wwwroot/_framework/Markdig.d1j7v41cl1.dll +0 -0
- package/wwwroot/_framework/MessagePack.Annotations.l6qv48kgpt.dll +0 -0
- package/wwwroot/_framework/MessagePack.eqoptzx9d5.dll +0 -0
- package/wwwroot/_framework/Microsoft.AspNetCore.Authorization.k7dsih5y5g.dll +0 -0
- package/wwwroot/_framework/Microsoft.AspNetCore.Components.6nyje9sa0g.dll +0 -0
- package/wwwroot/_framework/Microsoft.AspNetCore.Components.Authorization.iycd6unprw.dll +0 -0
- package/wwwroot/_framework/Microsoft.AspNetCore.Components.Web.487u3twia4.dll +0 -0
- package/wwwroot/_framework/Microsoft.AspNetCore.Components.WebAssembly.d0gcnmlxxz.dll +0 -0
- package/wwwroot/_framework/Microsoft.AspNetCore.Metadata.h4yevl9adi.dll +0 -0
- package/wwwroot/_framework/Microsoft.CSharp.8bsm8vx6su.dll +0 -0
- package/wwwroot/_framework/Microsoft.Data.Sqlite.jdlxgv2jtg.dll +0 -0
- package/wwwroot/_framework/Microsoft.EntityFrameworkCore.4gjazp7kjf.dll +0 -0
- package/wwwroot/_framework/Microsoft.EntityFrameworkCore.Abstractions.gocudnvz7b.dll +0 -0
- package/wwwroot/_framework/Microsoft.EntityFrameworkCore.Relational.lt4rsvinuo.dll +0 -0
- package/wwwroot/_framework/Microsoft.EntityFrameworkCore.Sqlite.69luj0fa9r.dll +0 -0
- package/wwwroot/_framework/Microsoft.Extensions.Caching.Abstractions.364t4jh3zz.dll +0 -0
- package/wwwroot/_framework/Microsoft.Extensions.Caching.Memory.izlxhpzosu.dll +0 -0
- package/wwwroot/_framework/Microsoft.Extensions.Configuration.8zq7hh41o7.dll +0 -0
- package/wwwroot/_framework/Microsoft.Extensions.Configuration.Abstractions.8if74zs6ea.dll +0 -0
- package/wwwroot/_framework/Microsoft.Extensions.Configuration.Json.duvlngw8i0.dll +0 -0
- package/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.t2hh9kvx0o.dll +0 -0
- package/wwwroot/_framework/Microsoft.Extensions.DependencyInjection.n4tg99oy8l.dll +0 -0
- package/wwwroot/_framework/Microsoft.Extensions.DependencyModel.h0d06ixk3e.dll +0 -0
- package/wwwroot/_framework/Microsoft.Extensions.Logging.Abstractions.rl32bkx2sd.dll +0 -0
- package/wwwroot/_framework/Microsoft.Extensions.Logging.dlht1xei0t.dll +0 -0
- package/wwwroot/_framework/Microsoft.Extensions.Options.qeunebioml.dll +0 -0
- package/wwwroot/_framework/Microsoft.Extensions.Primitives.18cr6vnuuz.dll +0 -0
- package/wwwroot/_framework/Microsoft.IO.RecyclableMemoryStream.r915vovvw4.dll +0 -0
- package/wwwroot/_framework/Microsoft.IdentityModel.Abstractions.1ejljk3erv.dll +0 -0
- package/wwwroot/_framework/Microsoft.IdentityModel.JsonWebTokens.1596zr8gne.dll +0 -0
- package/wwwroot/_framework/Microsoft.IdentityModel.Logging.229uyvpgio.dll +0 -0
- package/wwwroot/_framework/Microsoft.IdentityModel.Tokens.9sibtajc9f.dll +0 -0
- package/wwwroot/_framework/Microsoft.JSInterop.WebAssembly.ryia5gxiad.dll +0 -0
- package/wwwroot/_framework/Microsoft.JSInterop.ew9vz9o332.dll +0 -0
- package/wwwroot/_framework/Microsoft.ML.OnnxRuntime.w9deo1m5ss.dll +0 -0
- package/wwwroot/_framework/Microsoft.ML.Tokenizers.cm2vuv2z61.dll +0 -0
- package/wwwroot/_framework/Microsoft.NET.StringTools.3qbrf4v2ki.dll +0 -0
- package/wwwroot/_framework/MimeMapping.og9ys58ylm.dll +0 -0
- package/wwwroot/_framework/MindExecution.Core.y7ffihhajj.dll +0 -0
- package/wwwroot/_framework/MindExecution.Kernel.l5y3qroa7p.dll +0 -0
- package/wwwroot/_framework/MindExecution.Plugins.Admin.uuf238xa0h.dll +0 -0
- package/wwwroot/_framework/MindExecution.Plugins.Business.nyr3v25v48.dll +0 -0
- package/wwwroot/_framework/MindExecution.Plugins.Concept.l9z9tx9svt.dll +0 -0
- package/wwwroot/_framework/MindExecution.Plugins.Directory.ju87t8h3zs.dll +0 -0
- package/wwwroot/_framework/MindExecution.Plugins.PlanMaster.krn3jgvjpa.dll +0 -0
- package/wwwroot/_framework/MindExecution.Plugins.YouTube.5m53srfud6.dll +0 -0
- package/wwwroot/_framework/MindExecution.Shared.ojp3psugsm.dll +0 -0
- package/wwwroot/_framework/MindExecution.Web.82k6ktlkfg.dll +0 -0
- package/wwwroot/_framework/Newtonsoft.Json.a56zs13vug.dll +0 -0
- package/wwwroot/_framework/SQLitePCLRaw.batteries_v2.rrd1nzawpp.dll +0 -0
- package/wwwroot/_framework/SQLitePCLRaw.core.1dxloztpfz.dll +0 -0
- package/wwwroot/_framework/SQLitePCLRaw.provider.e_sqlite3.oekyzl53i1.dll +0 -0
- package/wwwroot/_framework/Supabase.Core.s1pkj4aj0l.dll +0 -0
- package/wwwroot/_framework/Supabase.Functions.qz4nu782sg.dll +0 -0
- package/wwwroot/_framework/Supabase.Gotrue.twah27pkik.dll +0 -0
- package/wwwroot/_framework/Supabase.Postgrest.gmuuv369ih.dll +0 -0
- package/wwwroot/_framework/Supabase.Realtime.ox3kchdy3w.dll +0 -0
- package/wwwroot/_framework/Supabase.Storage.fnjnepaowr.dll +0 -0
- package/wwwroot/_framework/Supabase.azmaw5pgcz.dll +0 -0
- package/wwwroot/_framework/System.Collections.23yxgetbju.dll +0 -0
- package/wwwroot/_framework/System.Collections.Concurrent.vow3rm1dku.dll +0 -0
- package/wwwroot/_framework/System.Collections.Immutable.ap9596utv5.dll +0 -0
- package/wwwroot/_framework/System.Collections.NonGeneric.npjkaz40oc.dll +0 -0
- package/wwwroot/_framework/System.Collections.Specialized.ugkjbs6p02.dll +0 -0
- package/wwwroot/_framework/System.ComponentModel.Annotations.clwo0z2oyu.dll +0 -0
- package/wwwroot/_framework/System.ComponentModel.Primitives.end4v0xe2c.dll +0 -0
- package/wwwroot/_framework/System.ComponentModel.TypeConverter.tgtp5sm4iv.dll +0 -0
- package/wwwroot/_framework/System.ComponentModel.wupoltkk1t.dll +0 -0
- package/wwwroot/_framework/System.Console.9dik0wogo2.dll +0 -0
- package/wwwroot/_framework/System.Data.Common.4v8jejsiu0.dll +0 -0
- package/wwwroot/_framework/System.Diagnostics.DiagnosticSource.e2q75ondtq.dll +0 -0
- package/wwwroot/_framework/System.Diagnostics.Process.9736yjnxs8.dll +0 -0
- package/wwwroot/_framework/System.Diagnostics.TraceSource.h9al53gbbw.dll +0 -0
- package/wwwroot/_framework/System.Diagnostics.Tracing.h4bcp2fo98.dll +0 -0
- package/wwwroot/_framework/System.Drawing.64oovy8qts.dll +0 -0
- package/wwwroot/_framework/System.Drawing.Primitives.o6jiqpgbgl.dll +0 -0
- package/wwwroot/_framework/System.Formats.Asn1.rylx5ipd40.dll +0 -0
- package/wwwroot/_framework/System.IO.Compression.iceabaupns.dll +0 -0
- package/wwwroot/_framework/System.IO.Pipelines.uw8csd3mlz.dll +0 -0
- package/wwwroot/_framework/System.IdentityModel.Tokens.Jwt.t67es60z5b.dll +0 -0
- package/wwwroot/_framework/System.Linq.Expressions.ty95ava37f.dll +0 -0
- package/wwwroot/_framework/System.Linq.Queryable.hs2195jrwy.dll +0 -0
- package/wwwroot/_framework/System.Linq.hssodjwmlf.dll +0 -0
- package/wwwroot/_framework/System.Memory.1k78n7wdxb.dll +0 -0
- package/wwwroot/_framework/System.Net.Http.3br8rfql4c.dll +0 -0
- package/wwwroot/_framework/System.Net.Http.Json.860wbh17d8.dll +0 -0
- package/wwwroot/_framework/System.Net.NetworkInformation.e3wr00853o.dll +0 -0
- package/wwwroot/_framework/System.Net.Ping.r5cw4mf1a4.dll +0 -0
- package/wwwroot/_framework/System.Net.Primitives.ksxwiwlvhu.dll +0 -0
- package/wwwroot/_framework/System.Net.WebSockets.6rt3n3gl2q.dll +0 -0
- package/wwwroot/_framework/System.Net.WebSockets.Client.z3usrzo7rz.dll +0 -0
- package/wwwroot/_framework/System.Numerics.Tensors.0c7z4mt3on.dll +0 -0
- package/wwwroot/_framework/System.Numerics.Vectors.lbdzx8reja.dll +0 -0
- package/wwwroot/_framework/System.ObjectModel.yct1gdirzf.dll +0 -0
- package/wwwroot/_framework/System.Private.CoreLib.c1dbswx1b2.dll +0 -0
- package/wwwroot/_framework/System.Private.Uri.zp9kmg0z93.dll +0 -0
- package/wwwroot/_framework/System.Private.Xml.Linq.lgv2n0akl4.dll +0 -0
- package/wwwroot/_framework/System.Private.Xml.dpsk8g304y.dll +0 -0
- package/wwwroot/_framework/System.Reactive.t3fuon548l.dll +0 -0
- package/wwwroot/_framework/System.Reflection.Emit.ILGeneration.1tcuz2cmbk.dll +0 -0
- package/wwwroot/_framework/System.Reflection.Emit.Lightweight.ddt2wylovg.dll +0 -0
- package/wwwroot/_framework/System.Reflection.Emit.d8vkadiwhg.dll +0 -0
- package/wwwroot/_framework/System.Reflection.Primitives.cpsl71xd1z.dll +0 -0
- package/wwwroot/_framework/System.Runtime.InteropServices.31vjgsfk1o.dll +0 -0
- package/wwwroot/_framework/System.Runtime.InteropServices.JavaScript.pn2wvizzet.dll +0 -0
- package/wwwroot/_framework/System.Runtime.InteropServices.RuntimeInformation.l5rk496q70.dll +0 -0
- package/wwwroot/_framework/System.Runtime.Intrinsics.0zee9qcqfy.dll +0 -0
- package/wwwroot/_framework/System.Runtime.Loader.xw2jr9wl92.dll +0 -0
- package/wwwroot/_framework/System.Runtime.Numerics.ezj1dfyvbj.dll +0 -0
- package/wwwroot/_framework/System.Runtime.Serialization.Formatters.0y019e9zkr.dll +0 -0
- package/wwwroot/_framework/System.Runtime.Serialization.Primitives.bia5wb62c8.dll +0 -0
- package/wwwroot/_framework/System.Runtime.h9cduidfkh.dll +0 -0
- package/wwwroot/_framework/System.Security.Claims.2r18wim2rl.dll +0 -0
- package/wwwroot/_framework/System.Security.Cryptography.qqgybpoucx.dll +0 -0
- package/wwwroot/_framework/System.Text.Encoding.Extensions.9t3hs6kyll.dll +0 -0
- package/wwwroot/_framework/System.Text.Encodings.Web.wftjfh2crk.dll +0 -0
- package/wwwroot/_framework/System.Text.Json.0v0qgmri0w.dll +0 -0
- package/wwwroot/_framework/System.Text.RegularExpressions.cvkox11l6l.dll +0 -0
- package/wwwroot/_framework/System.Threading.Channels.419493szqu.dll +0 -0
- package/wwwroot/_framework/System.Threading.Thread.xhmys87xh5.dll +0 -0
- package/wwwroot/_framework/System.Threading.b66vzsz9g1.dll +0 -0
- package/wwwroot/_framework/System.Transactions.Local.7zfffdvnwf.dll +0 -0
- package/wwwroot/_framework/System.Web.HttpUtility.9up6xfbtuq.dll +0 -0
- package/wwwroot/_framework/System.Xml.Linq.n5rzv9nbf7.dll +0 -0
- package/wwwroot/_framework/System.Xml.ReaderWriter.ag8pilllob.dll +0 -0
- package/wwwroot/_framework/System.Xml.XDocument.sn51jas17n.dll +0 -0
- package/wwwroot/_framework/System.brmz7yk5qh.dll +0 -0
- package/wwwroot/_framework/Websocket.Client.vapounvmnl.dll +0 -0
- package/wwwroot/_framework/blazor.boot.json +305 -0
- package/wwwroot/_framework/blazor.webassembly.js +1 -0
- package/wwwroot/_framework/dotnet.js +4 -0
- package/wwwroot/_framework/dotnet.native.boem75ye5i.wasm +0 -0
- package/wwwroot/_framework/dotnet.native.qc8g39g30v.js +16 -0
- package/wwwroot/_framework/dotnet.runtime.opaiwunc3t.js +4 -0
- package/wwwroot/_framework/icudt_CJK.tjcz0u77k5.dat +0 -0
- package/wwwroot/_framework/icudt_EFIGS.tptq2av103.dat +0 -0
- package/wwwroot/_framework/icudt_no_CJK.lfu7j35m59.dat +0 -0
- package/wwwroot/_framework/netstandard.yvr3prsx0x.dll +0 -0
- package/wwwroot/_headers +17 -50
- package/wwwroot/appsettings.json +82 -82
- package/wwwroot/icon-192.png +0 -0
- package/wwwroot/icon-512.png +0 -0
- package/wwwroot/index.html +736 -22
- package/wwwroot/js/marketing-tool.js +180 -0
- package/wwwroot/manifest.webmanifest +21 -18
- package/wwwroot/robots.txt +1 -1
- package/wwwroot/service-worker-assets.js +857 -0
- package/wwwroot/service-worker.js +31 -5
- package/wwwroot/sitemap.xml +8 -20
- package/wwwroot/assets/AdminDashboardPage-AhImXOcJ.js +0 -1
- package/wwwroot/assets/AdminDashboardPage-B2vz2Px9.css +0 -1
- package/wwwroot/assets/AppSidebar-HIF29_Y1.js +0 -2
- package/wwwroot/assets/AuthPages-BrH6kRcv.css +0 -1
- package/wwwroot/assets/AuthPages-n1KbzJI5.js +0 -1
- package/wwwroot/assets/CodePage-Bncc352E.css +0 -1
- package/wwwroot/assets/CodePage-OKIzhHoC.js +0 -87
- package/wwwroot/assets/CompanyCorePage-Biw4RPhk.js +0 -13
- package/wwwroot/assets/CompanyCorePage-ChBnq1ve.css +0 -1
- package/wwwroot/assets/ExecutionModePage-BaNPZB_m.js +0 -18
- package/wwwroot/assets/ExecutionModePage-TLuld9l3.css +0 -1
- package/wwwroot/assets/LaunchLeadCapture-Bx9LM0IX.js +0 -1
- package/wwwroot/assets/LaunchLeadCapture-CiRI1shz.css +0 -1
- package/wwwroot/assets/MarketingHome-BsyerRpe.js +0 -1
- package/wwwroot/assets/MarketingHome-DPzaYzA_.css +0 -1
- package/wwwroot/assets/MindCanvas-07gqXHGA.js +0 -49
- package/wwwroot/assets/MindCanvas-DtqOZnoW.css +0 -1
- package/wwwroot/assets/PlanMasterPage-CJ36rep-.css +0 -1
- package/wwwroot/assets/PlanMasterPage-CT87Dr_2.js +0 -4
- package/wwwroot/assets/PricingPage-Cg_0i_ZR.css +0 -1
- package/wwwroot/assets/PricingPage-dDvHQskC.js +0 -1
- package/wwwroot/assets/ToolPages-CKI4mItc.js +0 -28
- package/wwwroot/assets/ToolPages-DIB187pZ.css +0 -1
- package/wwwroot/assets/YouTubeSearchPage-8iFuPSSo.js +0 -4
- package/wwwroot/assets/YouTubeSearchPage-IPPa_BIH.css +0 -1
- package/wwwroot/assets/app-runtime-xD2Z3NdN.js +0 -1
- package/wwwroot/assets/canvas-runtime-Nq2noXK-.js +0 -44
- package/wwwroot/assets/code-agent-runtime-B5PPZd1t.js +0 -74
- package/wwwroot/assets/executionModeSettings-NJqurj-o.js +0 -1
- package/wwwroot/assets/index-CyNhJb7A.js +0 -2
- package/wwwroot/assets/index-yNpEK-gp.css +0 -1
- package/wwwroot/assets/marketingTools-DN_rnHeB.js +0 -4
- package/wwwroot/assets/mindCanvasSearchWorker-BzPMsHOB.js +0 -1
- package/wwwroot/assets/mindexecution-mindcanvas.png +0 -0
- package/wwwroot/assets/mindexecution-prod-home-current.png +0 -0
- package/wwwroot/assets/mindexecution-prod-pricing-current.png +0 -0
- package/wwwroot/assets/pricingCheckoutShell-O-DnwmbU.js +0 -1
- package/wwwroot/assets/productionAdapterConfig-C5jfk6oG.js +0 -1
- package/wwwroot/assets/runtimeSettingsPersistenceProjection-BoNWmYjU.js +0 -1
- package/wwwroot/assets/storage-DPyjZEKZ.js +0 -1
- package/wwwroot/assets/supabaseAuthAdapter-m134Qdxn.js +0 -44
- package/wwwroot/assets/toolHandoff-D5e5f7t5.js +0 -4
- package/wwwroot/assets/vendor-icons-DE3gIReG.js +0 -681
- package/wwwroot/assets/vendor-msgpack-BE8aAsr3.js +0 -1
- package/wwwroot/assets/vendor-react-BXzpOyCS.js +0 -40
- package/wwwroot/favicon.svg +0 -7
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
var Jm=Object.defineProperty;var Zm=(e,t,n)=>t in e?Jm(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var _l=(e,t,n)=>Zm(e,typeof t!="symbol"?t+"":t,n);import{r as g,j as o,a as Qm}from"./vendor-react-BXzpOyCS.js";import{l as ep,a as kt,s as ea,b as tp,d as ap,r as np,c as op,e as sp,i as Bl}from"./storage-DPyjZEKZ.js";import{r as pi,g as $s,w as rp,a as hr,d as Dl,b as ip,t as gi,n as hi,c as Hr,e as lp,p as dc,v as dp,R as cp,f as up,l as fi,u as mp,h as pp,i as Ol,s as tt,j as ro,k as fr,m as io,o as is,q as lo,x as co,y as ls,z as ta,A as $l,B as Oa,C as gp,D as Fl,E as hp,F as fp,G as bp,H as yp,I as xp,J as Cp,K as kp,L as na,M as cc,T as Sp,N as wp,O as Ul,P as uo,Q as uc,S as Wr,U as Vr,V as mc,W as ds,X as ks,Y as yo,Z as zl,_ as K,$ as br,a0 as xo,a1 as vp,a2 as jp,a3 as Hl,a4 as Wl,a5 as yr,a6 as Ip,a7 as Np,a8 as Ap,a9 as Mp,aa as Tp,ab as Rp,ac as Lp,ad as Pp,ae as Ep,af as _p,ag as Bp}from"./canvas-runtime-Nq2noXK-.js";import{e as Dp,d as Op}from"./vendor-msgpack-BE8aAsr3.js";import{R as f}from"./app-runtime-xD2Z3NdN.js";import{g as xr,A as Vl,a as Ss}from"./index-CyNhJb7A.js";import{r as pc}from"./productionAdapterConfig-C5jfk6oG.js";import{getSupabaseBrowserClient as Fs}from"./supabaseAuthAdapter-m134Qdxn.js";import{c as $p,a as Fp,r as Yl}from"./toolHandoff-D5e5f7t5.js";import{a as Gl,s as Up}from"./executionModeSettings-NJqurj-o.js";import{a as Kl,p as zp}from"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";import{A as Hp,D as Wp,E as Cn,w as kn,I as Sn,V as wn,l as Rs,F as St,J as Vp,N as Yr,O as Ls,Q as vn,W as gc,Y as Yp,Z as hc,_ as Gp,i as So,$ as fc,a0 as Kp,a1 as Xl,a2 as Xp,a3 as ya,a4 as ql,T as Ps,a5 as Jl,a6 as jo,a7 as qp,R as jn,a8 as ws,a9 as bc,aa as Gr,X as Ot,o as yc,ab as Jp,ac as Zp,f as Qp,ad as Zl,ae as eg,h as Co,x as tg,af as ag,ag as ng,ah as Ql,ai as ed,aj as td,g as ad,ak as cs,H as mo,al as us,s as Cr,am as nd,an as aa,c as og,ao as sg,ap as kr,aq as od,ar as rg,as as ms,at as Sr,au as sd,av as rd,aw as id,ax as ig,ay as lg,az as dg,aA as cg,n as ug,aB as mg,aC as pg,aD as gg,aE as hg,aF as fg,aG as bg,aH as yg,aI as xg}from"./vendor-icons-DE3gIReG.js";const Cg=1200,Va="LocalBridgeOriginalNodeId";function wt(e){return typeof e=="object"&&e!==null}function fa(e,t){const n=Number(e);return Number.isFinite(n)?n:t}function ee(e){return typeof e=="string"?e:""}function xc(){return typeof window<"u"?{width:window.innerWidth||1280,height:window.innerHeight||720}:{width:1280,height:720}}function Kr(e,t,n){const r=Number(e),d=Number(t),c=Number(n);if(!Number.isFinite(r)||!Number.isFinite(d)||!Number.isFinite(c)||c<=0)return null;const m=1400/c,y=xc();return{x:y.width/2-r*m,y:y.height/2-d*m,scale:m}}function kg(e){return wt(e)?Kr(e.x??e.X,e.y??e.Y,e.z??e.Z):null}function Sg(e){if(!wt(e))return null;const t=Number(e.x),n=Number(e.y),r=Number(e.scale);if(!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(r)||r<=0)return null;const d=xc();return{x:(d.width/2-t)/r,y:(d.height/2-n)/r,z:1400/r}}function wg(e){const t=String(e||"").trim();if(t)try{const n=JSON.parse(t);if(!wt(n))return;const r={};for(const[d,c]of Object.entries(n)){const m=kg(c);m&&(r[d]=m)}return Object.keys(r).length>0?r:void 0}catch{return}}function vg(e){if(!e||Object.keys(e).length===0)return null;const t={};for(const[n,r]of Object.entries(e)){const d=Sg(r);d&&(t[n]=d)}return Object.keys(t).length>0?JSON.stringify(t):null}function Es(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 Us(){return crypto.randomUUID()}function bi(e){return wt(e)?"ContentType"in e||"Prompt"in e||"Response"in e||"PositionX"in e||"PositionY"in e||"SourceFilePath"in e||"ImageStack"in e:!1}function ld(e){const t=ee(e).trim();if(!t)return null;try{return JSON.parse(t)}catch{return null}}function Xr(e){if(Array.isArray(e))return e;if(!wt(e))return[];for(const t of["Nodes","nodes","Items","items","Content","content","Upserts","upserts"])if(t in e){const n=e[t];if(Array.isArray(n))return n;const r=ld(n);if(r)return Xr(r)}for(const t of["ContentJson","contentJson","content_json"])if(t in e){const n=ld(e[t]);if(n)return Xr(n)}return bi(e)?[e]:[]}function yi(e){return wt(e)?"BoardId"in e&&("Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e):!1}function Cc(e){if(!wt(e))return 0;for(const t of["Deletes","deletes"]){const n=e[t];if(Array.isArray(n))return n.length}return 0}function _s(e){return Xr(e).filter(bi)}function kc(e){return _s(e).length}function jg(e,t){var c;const n=[..._s(e)];if(!yi(t))return n;const r=new Set;for(const m of["Deletes","deletes"]){const y=t[m];if(Array.isArray(y))for(const p of y){const b=ee(p).trim();b&&r.add(b)}}if(r.size>0)for(let m=n.length-1;m>=0;m-=1){const y=ee((c=n[m])==null?void 0:c.Id).trim();y&&r.has(y)&&n.splice(m,1)}const d=new Map;n.forEach((m,y)=>{const p=ee(m.Id).trim();p&&d.set(p,y)});for(const m of _s(t)){const y=ee(m.Id).trim(),p=y?d.get(y):void 0;if(p!==void 0){n[p]=m;continue}y&&d.set(y,n.length),n.push(m)}return n}function Sc(e){const t=Array.isArray(e)?e.filter(wt):[];return new Map(t.filter(n=>n.NodeId).map(n=>[String(n.NodeId),n]))}async function qr(e,t){for(const n of e)try{const r=await pi(n,t);return{payload:JSON.parse(r.content),path:n}}catch{}return null}async function Ig(e,t){const n=`.mindexec/boards/${e}.msgpack`,r=`boards/${e}.msgpack`;for(const y of[n,r])try{const p=await ip(y,t);return{payload:Op(p),format:y===n?"msgpack":"legacy-msgpack",path:y}}catch{}const d=`.mindexec/boards/${e}.json`,c=`boards/${e}.json`,m=await qr([d,c],t);if(m)return{payload:m.payload,format:m.path===d?"json":"legacy-json",path:m.path};throw new Error(`LocalBridge board file not found: ${n}, ${r}, ${d}, ${c}`)}function Jr(e){const t=ee(e.Id).trim()||ee(e.BoardId).trim();return t?{Id:t,Title:ee(e.Title)||null,Description:ee(e.Description)||null,ThumbnailUrl:ee(e.ThumbnailUrl)||null,CreatedAt:ee(e.CreatedAt)||null,UpdatedAt:ee(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:ee(e.CameraBookmarks)||null}:null}function dd(e){return!wt(e)||bi(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 xi(e){if(Array.isArray(e))return e.filter(dd).map(t=>Jr(t)).filter(t=>!!t);if(dd(e)){const t=Jr(e);return t?[t]:[]}return[]}function Ng(e){const t=e.toLowerCase();return Ag(t)?"remote-control":Mg(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 Ag(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 n=t.replace(/[^a-z0-9]+/g,"");return n.includes("remotecontrol")||n.includes("remotedevice")||n.includes("remotefleetdevice")}function Mg(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 n=t.replace(/[^a-z0-9]+/g,"");return n.includes("remotemonitor")||n.includes("remotehubmonitor")||n.includes("multidesktopmonitor")||n.includes("smartviewmonitor")}function Tg(e,t){const n=e.Metadata||{},r=n.ThumbnailUrl,d=n.OriginalUrl,c=n.OriginalPath;return gi(ee(r)||ee(d)||ee(c)||ee(e.Response),t)}function Rg(e,t,n){const r=e.ImageStack,d=Array.isArray(r==null?void 0:r.Variants)?r.Variants:[];if(d.length===0)return;const c=d.map((y,p)=>{const b=ee(y.AssetId).trim(),w=gi(b,n)||t;return w?{variantId:ee(y.VariantId)||`variant-${ee(e.Id)||p}`,imageUrl:w,assetId:b||void 0,caption:ee(y.Caption)||void 0,sourceNodeId:ee(e.Id)||void 0,createdAtUtc:ee(y.CreatedAtUtc)||void 0}:null}).filter(y=>!!y);if(c.length===0)return;const m=ee(r==null?void 0:r.ActiveVariantId);return{activeVariantId:c.some(y=>y.variantId===m)?m:c[0].variantId,variants:c,kind:ee(r==null?void 0:r.Kind)||"versions",title:ee(r==null?void 0:r.Title)||void 0,updatedAtUtc:ee(r==null?void 0:r.UpdatedAtUtc)||void 0}}function Lg(e,t){return!e||e.variants.length===0?t:(e.variants.find(r=>r.variantId===e.activeVariantId)??e.variants[0]).imageUrl||t}function Pg(e,t,n){var m,y,p,b,w,_;const r=(y=(m=e.imageStack)==null?void 0:m.variants)!=null&&y.length?e.imageStack.variants:e.imageUrl?[{variantId:`${e.id}:image`,imageUrl:e.imageUrl,assetId:Io(e.imageUrl,t)||e.imageUrl,title:e.title,sourceNodeId:e.id,createdAtUtc:n}]:[];if(r.length===0)return null;const d=r.map(N=>({VariantId:N.variantId||Us(),AssetId:N.assetId||Io(N.imageUrl,t)||N.imageUrl,CreatedAtUtc:N.createdAtUtc||n,Caption:N.caption||N.title||null}));return{ActiveVariantId:(p=e.imageStack)!=null&&p.activeVariantId&&d.some(N=>{var D;return N.VariantId===((D=e.imageStack)==null?void 0:D.activeVariantId)})?e.imageStack.activeVariantId:d[0].VariantId||"",Variants:d,Kind:((b=e.imageStack)==null?void 0:b.kind)||(d.length>1?"pile":"versions"),Title:((w=e.imageStack)==null?void 0:w.title)||e.title||null,UpdatedAtUtc:((_=e.imageStack)==null?void 0:_.updatedAtUtc)||n}}function Eg(e,t){const n=e.Metadata||{};return gi(ee(n.OriginalUrl)||ee(n.OriginalPath)||ee(n.SourceFilePath)||ee(e.SourceFilePath)||ee(e.Response),t)}function _g(e){const t={};for(const[n,r]of Object.entries(e??{}))typeof r=="string"?t[n]=r:r!=null&&(t[n]=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 Io(e,t){const n=String(e||"").trim();if(!n)return"";const r=t.replace(/\/+$/,"");return n.startsWith(`${r}/`)?n.slice(r.length+1):n.replace(/^\/+/,"")}function Dg(e,t){const n=new Map;for(const r of e){const d=t.get(r.from),c=t.get(r.to);!d||!c||n.has(c)||n.set(c,d)}return n}function Og(e){const t=new Set;return e.map(n=>{var p,b;const r=((p=n.metadata)==null?void 0:p[Va])||"",d=Es(r)?r:Es(n.id)?n.id:"",c=!!(d&&t.has(d)),m=d&&!c?d:Us(),y=((b=n.metadata)==null?void 0:b[Va])!==m;return t.add(m),{node:y?{...n,metadata:{...n.metadata??{},[Va]:m}}:n,originalId:m,assignedNodeId:!d||c,metadataStamped:y,duplicateOriginalId:c}})}function $g(e,t,n,r,d){var b,w,_;const c=Bg(e.kind),m=c==="image"||c==="mask"?Io(e.imageUrl,d):"",y=["video","pdf","file","directory","embed"].includes(c)?Io(e.assetUrl||e.sourceFilePath||e.body,d):"",p={...e.metadata??{},[Va]:t,ReactNodeId:e.id,ReactKind:e.kind};if(e.kind==="remote-monitor"&&(p.RemoteHub??(p.RemoteHub="Gated"),p.RemoteRoute??(p.RemoteRoute="Gated"),p.RemoteConnected??(p.RemoteConnected="0"),p.RemoteTotal??(p.RemoteTotal="30"),p.RemotePage??(p.RemotePage="1/1"),p.AdapterState??(p.AdapterState="adapter-gated")),e.kind==="remote-control"&&(p.SemanticType??(p.SemanticType="RemoteFleetDevice"),p.RemoteFleetSchemaVersion??(p.RemoteFleetSchemaVersion="remote-fleet-device@1"),p.RemoteRoute??(p.RemoteRoute="Gated"),p.RemoteInput??(p.RemoteInput="Off"),p.AdapterState??(p.AdapterState="adapter-gated")),e.kind==="mask"&&(p.ImageRouterMask??(p.ImageRouterMask="true"),p.SemanticType??(p.SemanticType="ImageEditMask")),e.kind==="embed"){const N=e.assetUrl||e.body||e.sourceFilePath||"";p.source??(p.source="embed"),p.renderMode??(p.renderMode="card"),p.provider??(p.provider="web"),p.sourceUrl??(p.sourceUrl=N),p.url??(p.url=N),p.AdapterState??(p.AdapterState="local-reference")}return e.kind==="video"&&(p.assetKind??(p.assetKind="video"),p.videoMode??(p.videoMode=(b=e.assetUrl)!=null&&b.startsWith(d)?"local_bridge":"local_reference"),p.AdapterState??(p.AdapterState=((w=e.metadata)==null?void 0:w.PromptOnly)==="true"?"adapter-gated":"local-reference")),(_=e.tags)!=null&&_.length&&(p.ReactTags=JSON.stringify(e.tags)),m&&(p.OriginalUrl=m,p.ThumbnailUrl=m),y&&(p.OriginalPath=y,p.SourceFilePath=y),{Id:t,ContentType:c,Prompt:e.title||c,Response:c==="image"||c==="mask"?m||e.body||null:c==="remote-monitor"?e.body||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":c==="remote-control"?e.body||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":y||e.body||null,PositionX:e.x,PositionY:e.y,PositionZ:0,IsLoading:e.status==="running",Width:Math.round(e.width),Height:Math.round(e.height),Children:[],ParentId:n||null,IsExpanded:!!e.isExpanded,OriginalHeight:Math.round(e.originalHeight??0),IsAiEnabled:e.aiEnabled!==!1,IsChunkedText:!!e.isChunkedText,TotalLineCount:Math.round(e.totalLineCount??0),SourceFilePath:e.sourceFilePath||y||null,ScrollOffset:e.scrollOffset??0,MaxScroll:e.maxScroll??0,CreatedAt:r,UpdatedAt:r,IsWordWrap:e.wordWrap??e.kind!=="code",Metadata:p,ImageStack:c==="image"?Pg(e,d,r):null}}function Fg(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 Ug(e,t,n){const r=ee(e.ContentType)||"note",d=ee(e.Prompt).trim(),c=ee(e.Response).trim(),m=_g(e.Metadata),y=ee(e.Id).trim();y&&(m[Va]??(m[Va]=y));const b=["true","1","yes"].includes(String(m.ImageRouterMask||m.IsMask||"").trim().toLowerCase())?"mask":Ng(r),w=b==="memo"&&["mindcanvasagent","agentcommand"].includes(String(m.SemanticType||m.semanticType||"").trim().toLowerCase()),_=b==="memo"&&["codenote","code-note"].includes(String(m.SemanticType||m.semanticType||"").trim().toLowerCase()),N=ee(e.SourceFilePath)||m.OriginalPath||m.SourceFilePath||"",D=b==="video"||b==="pdf"||b==="file"||b==="directory"||b==="embed"?Eg(e,n):void 0,O=d||e.SourceFilePath||r||"LocalBridge node",z=b==="image"?c||d||"Image asset":b==="mask"?c||d||"Image mask asset":b==="remote-monitor"?c||d||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":b==="remote-control"?c||d||N||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":b==="pdf"||b==="file"||b==="directory"||b==="embed"?c||N||d||r:c||d||N||"",U=w?500:_?400:b==="remote-monitor"?860:b==="remote-control"||b==="template-launcher"?560:b==="csv-table"?720:b==="embed"?460:b==="video"?420:b==="markdown"?380:b==="text"||b==="image"||b==="mask"?360:320,V=w||_?300:b==="remote-monitor"?640:b==="remote-control"?390:b==="template-launcher"?620:b==="csv-table"?420:b==="embed"?260:b==="video"?236:b==="markdown"?240:b==="text"?210:b==="image"||b==="mask"?260:180,Y=b==="image"||b==="mask"?Tg(e,n):void 0,ce=b==="image"?Rg(e,Y,n):void 0,le=!!(e.IsChunkedText||m.IsChunkedText==="true"),Pe=fa(e.TotalLineCount??m.TotalLineCount,0),ye=fa(e.ScrollOffset,0),We=fa(e.MaxScroll,0);return{id:String(e.Id||crypto.randomUUID()),kind:b,title:b==="remote-monitor"?d||"Multi Desktop Monitor":b==="remote-control"?d||m.RemoteFleetDeviceName||"Remote Device":b==="template-launcher"?d||"Template Launcher":O,body:z,x:fa((t==null?void 0:t.PositionX)??e.PositionX,0),y:fa((t==null?void 0:t.PositionY)??e.PositionY,0),width:Math.max(160,Math.min(900,fa((t==null?void 0:t.Width)??e.Width,U))),height:Math.max(120,Math.min(900,fa((t==null?void 0:t.Height)??e.Height,V))),status:e.IsLoading?"running":b==="ai-task"?"idle":void 0,imageUrl:Lg(ce,Y),imageStack:ce,assetUrl:D,sourceFilePath:N||void 0,isChunkedText:le||void 0,totalLineCount:le?Pe:void 0,scrollOffset:le?ye:void 0,maxScroll:le?We:void 0,isExpanded:typeof e.IsExpanded=="boolean"?e.IsExpanded:void 0,originalHeight:fa(e.OriginalHeight,0)||void 0,tags:w?["Agent Command",m.AgentCommandRequestedRole||"Researcher",m.AgentCommandStatus||"Draft"]:_?["Code Note",m.CodeNoteStatus||"Draft",m.CodeNoteSyncState||"Unlinked"]:b==="remote-monitor"?["Remote","Monitor","LocalBridge"]:b==="remote-control"?["Remote","Control","LocalBridge"]:["LocalBridge",r],metadata:b==="remote-monitor"?zg(m):b==="remote-control"?Hg(m):m,role:e.IsAiEnabled?"ai-enabled":void 0,aiEnabled:typeof e.IsAiEnabled=="boolean"?e.IsAiEnabled:void 0,wordWrap:typeof e.IsWordWrap=="boolean"?e.IsWordWrap:void 0}}function zg(e){return{RemoteHub:"Gated",RemoteRoute:"Gated",RemoteConnected:"0",RemoteTotal:"30",RemotePage:"1/1",AdapterState:"adapter-gated",...e}}function Hg(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 Wg(e,t){const n=[];for(const r of e){const d=String(r.Id||""),c=String(r.ParentId||"");!d||!c||!t.has(d)||!t.has(c)||n.push({id:`edge-local-${c}-${d}`,from:c,to:d,kind:"context"})}return n}async function Vg(e=$s()){const t=await pi(".mindexec/boards/_metadata.json",e),n=JSON.parse(t.content);return(Array.isArray(n)?n.filter(wt):[]).map(c=>Jr(c)).filter(c=>!!c).sort((c,m)=>String(m.UpdatedAt||"").localeCompare(String(c.UpdatedAt||"")))}async function Yg(e){try{const t=await pi(".mindexec/boards/_metadata.json",e),n=JSON.parse(t.content);return Array.isArray(n)?n.filter(wt):[]}catch{return[]}}async function Gg(e,t,n,r=$s(),d=null){var jt,It,P,Nt,At,ze;if((jt=e.source)!=null&&jt.partialImport)throw new Error("This board was imported from a partial original payload. Export is blocked to avoid data loss.");if((It=e.source)!=null&&It.truncated)throw new Error("This board was truncated during import. Export is blocked to avoid data loss.");const c=(P=e.source)!=null&&P.exportedByReact?String(e.source.boardId||""):"",m=Es(c),y=Es(c)?c:Us(),p=new Date().toISOString(),b=Og(e.nodes),w=b.map(H=>H.node),_=new Map(b.map(H=>[H.node.id,H.originalId])),N=Dg(e.edges,_),D=b.map(({node:H,originalId:pt})=>$g(H,pt,N.get(pt),p,r)),O=b.map(({node:H,originalId:pt})=>Fg(H,pt)),z=t.scale>0?t.scale:1,U=(window.innerWidth/2-t.x)/z,V=(window.innerHeight/2-t.y)/z,Y=1400/z,ce=Number((d==null?void 0:d.x)??((Nt=e.viewState)==null?void 0:Nt.cursorX)??0),le=Number((d==null?void 0:d.y)??((At=e.viewState)==null?void 0:At.cursorY)??0),Pe=(ze=e.nodes.find(H=>H.kind==="image"&&H.imageUrl))==null?void 0:ze.imageUrl,ye={Id:y,UserId:"00000000-0000-0000-0000-000000000000",Title:e.name||"Untitled Board",Description:"Exported from MindExec React",ThumbnailUrl:Io(Pe,r)||"",IsPublic:!1,CreatedAt:p,SyncedCloudBoardId:null,LastSyncedAt:null,LastCloudCopyStatus:null,UpdatedAt:p,LastCameraX:U,LastCameraY:V,LastCameraZ:Y,LastCursorX:Number.isFinite(ce)?ce:0,LastCursorY:Number.isFinite(le)?le:0,CameraBookmarks:vg(e.settings.cameraBookmarks)},We=`.mindexec/boards/${y}.msgpack`,vt=`.mindexec/boards/${y}.json`,nt=`.mindexec/boards/${y}.layout.json`,G=`.mindexec/boards/${y}.delta.json`,X=`boards/${y}.delta.json`,ue=await Yg(r),oe=[ye,...ue.filter(H=>ee(H.Id)!==y)],mt=Dp(D);await rp(We,mt,n,r),await hr(vt,JSON.stringify(D,null,2),n,r),await hr(nt,JSON.stringify(O,null,2),n,r),await hr(".mindexec/boards/_metadata.json",JSON.stringify(oe,null,2),n,r);const W=await Promise.allSettled([Dl(G,n,r),Dl(X,n,r)]);return f.emit("localBridge.board.exported",{boardId:y,nodes:D.length,edges:e.edges.length,snapshotFormat:"msgpack",msgpackBytes:mt.byteLength,jsonMirror:!0,deltaCleared:W.some(H=>H.status==="fulfilled"&&H.value.success),reusedBoardId:m,stableNodeIds:b.length,assignedNodeIds:b.filter(H=>H.assignedNodeId).length,metadataStampedNodeIds:b.filter(H=>H.metadataStamped).length,duplicateOriginalNodeIds:b.filter(H=>H.duplicateOriginalId).length}),{metadata:ye,source:{kind:"localBridge",boardId:y,loadedAt:p,originalNodeCount:D.length,renderedNodeCount:D.length,truncated:!1,exportedByReact:!0,snapshotFormat:"msgpack"},nodes:w,msgpackPath:We,boardPath:vt,layoutPath:nt}}async function Kg(e,t,n=$s()){const r=await Ig(e.Id,n);let d=new Map;const c=await qr([`.mindexec/boards/${e.Id}.layout.json`,`boards/${e.Id}.layout.json`],n);c&&(d=Sc(c.payload));let m=null;const y=await qr([`.mindexec/boards/${e.Id}.delta.json`,`boards/${e.Id}.delta.json`],n);y&&(m=y.payload);const p=m?xi(m)[0]:null,b=!!(m&&yi(m)),w=b?jg(r.payload,m):r.payload;return wc(w,t,{boardId:(p==null?void 0:p.Id)??e.Id,title:(p==null?void 0:p.Title)||e.Title||"LocalBridge Board",updatedAt:(p==null?void 0:p.UpdatedAt)??e.UpdatedAt,layoutPayload:Array.from(d.values()),baseUrl:n,cameraBookmarks:(p==null?void 0:p.CameraBookmarks)??e.CameraBookmarks,lastCursorX:(p==null?void 0:p.LastCursorX)??e.LastCursorX,lastCursorY:(p==null?void 0:p.LastCursorY)??e.LastCursorY,deltaApplied:b,deltaUpserts:m?kc(m):0,deltaDeletes:m?Cc(m):0,snapshotFormat:r.format})}function wc(e,t,n={}){const r=_s(e),d=yi(e),c=n.deltaUpserts??(d?r.length:0),m=n.deltaDeletes??(d?Cc(e):0),y=n.layoutPayload?Sc(n.layoutPayload):new Map,p=r.slice(0,Cg),b=p.map(le=>Ug(le,y.get(String(le.Id||"")),n.baseUrl??$s())),w=new Set(b.map(le=>le.id)),_=Wg(p,w),N=r.length>b.length,D=d,O=n.deltaApplied===!0,z=n.boardId||Us(),U=n.updatedAt||new Date().toISOString(),V=Number(n.lastCursorX),Y=Number(n.lastCursorY),ce=Number.isFinite(V)&&Number.isFinite(Y);return f.emit("localBridge.board.loaded",{boardId:z,nodes:b.length,originalNodes:r.length,truncated:N,snapshotFormat:n.snapshotFormat,partialImport:D,deltaImport:d,deltaApplied:O,deltaUpserts:c,deltaDeletes:m}),{id:`localBridge:${z}`,name:n.title||"LocalBridge Board",nodes:b,edges:_,settings:{...t,cameraBookmarks:wg(n.cameraBookmarks)},viewState:ce?{cursorX:V,cursorY:Y}:void 0,updatedAt:U,source:{kind:"localBridge",boardId:z,loadedAt:new Date().toISOString(),snapshotFormat:n.snapshotFormat,originalNodeCount:r.length,renderedNodeCount:b.length,truncated:N,partialImport:D,deltaImport:d,deltaApplied:O}}}const vc=new Set(["research","web-search","analyze","summarize","create","decision","human-review","image-generate","video-generate","output","ai-task"]);function Ci(e,t){const n=hi(e);return n!=="auto"?n:Ac(t)?"ko":Mc(t)?"ja":Tc(t)?"zh":"en"}function Xg(e,t){const n=Ci(t,e),r=[...vc].join(", ");return["Create a simple MindExec business execution flow for this objective:",e,"",Hr(n),`User-facing node "title" and "instruction" values MUST use ${lp(n)} unless the objective explicitly asks for another language.`,'JSON property names, internal "kind" values, and pin IDs MUST remain in English exactly as specified.',"","MindExec is not an n8n/Zapier-style automation grammar.","The user should feel they are arranging work sentences and business thinking, not triggers, apps, fields, JSON, webhooks, API steps, or low-level automation blocks.","","Most nodes will be rendered to the user as AI Task nodes.",'The "kind" field is primarily an internal execution intent hint that the user does not need to learn.',"Use image-generate or video-generate only when the graph truly needs an explicit media generation block.","",`Available internal intent hints: ${r}`,"","Return only JSON:","{",' "nodes": [',' { "kind": "research", "title": "Investigate market evidence", "instruction": "..." }'," ],",' "edges": [',' { "from": 0, "fromPin": "result", "to": 1, "toPin": "input" }'," ]","}","","Rules:","- 4 to 7 nodes.","- Use large business-language tasks, not low-level n8n/zapier steps.","- Think in this user model: AI Task = work sentence, Line = pass the previous result, Context = background thought/document.","- Do not create nodes for Trigger, Action, Webhook, HTTP request, app event, JSON parsing, iterator, filter, credential, or field mapping.","- Prefer a practical sequence for a solo global SaaS/business builder.","- Use only the available internal intent hints.","- Keep titles short and task-like, not category names such as Research, Analyze, Create, Web Search, or Output.","- Instructions should be natural-language work requests that a business owner would write.","- Preserve evidence/trust needs in the instruction when the task depends on current facts or source URLs.",'- Prefer "result" -> "input" edges unless a stronger pin contract is needed.'].join(`
|
|
2
|
-
`)}function qg(e){const t=eh(e);if(!t)return null;let n;try{n=JSON.parse(t)}catch{return null}if(!wr(n)||!Array.isArray(n.nodes))return null;const r=n.nodes.slice(0,8).map(c=>{if(!wr(c))return null;const m=Qg(po(c.kind));if(!vc.has(m))return null;const y=po(c.title).trim(),p=po(c.instruction).trim();return!y||!p?null:{kind:m,title:y.slice(0,90),instruction:p}}).filter(c=>!!c);if(r.length<2)return null;const d=Array.isArray(n.edges)?n.edges.slice(0,14).map(c=>{if(!wr(c))return null;const m=ud(c.from),y=ud(c.to);return m<0||y<0||m>=r.length||y>=r.length||m===y?null:{from:m,fromPin:po(c.fromPin).trim()||Ic(r[m].kind),to:y,toPin:po(c.toPin).trim()||Nc(r[y].kind)}}).filter(c=>!!c):[];return{nodes:r,edges:d.length>0?d:jc(r)}}function Jg(e,t){if(t==="en")return!0;const n=e.nodes.map(r=>`${r.title} ${r.instruction}`).join(" ");return t==="ko"?Ac(n):t==="ja"?th(n):t==="zh"?Tc(n):!0}function cd(e,t){const n=e.trim()||"the selected note",r=Zg(n,t);return{nodes:r,edges:jc(r)}}function Zg(e,t){return t==="ko"?[{kind:"research",title:"비즈니스 맥락 정리",instruction:`이 목표의 시장, 고객, 경쟁, 가격, 채널 맥락을 정리하세요: ${e}`},{kind:"web-search",title:"근거 있는 사실 수집",instruction:`이 목표에 중요한 최신 근거와 URL을 찾고, 링크와 불확실성을 함께 남기세요: ${e}`},{kind:"analyze",title:"핵심 기회 분석",instruction:`앞선 결과를 바탕으로 ${e}의 리스크, 차별점, 가장 빠른 매출 경로를 분석하세요.`},{kind:"create",title:"제안 초안 작성",instruction:`분석을 바탕으로 바로 테스트할 수 있는 오퍼, 랜딩 카피, 실험안, 실행 브리프를 작성하세요: ${e}`},{kind:"output",title:"다음 행동 정리",instruction:`${e} 실행 리포트를 정리하세요. 근거, 가정, 결정, 리스크, 다음 행동, 후속 flow 제안을 포함하세요.`}]:t==="ja"?[{kind:"research",title:"事業文脈を整理",instruction:`この目標の市場、顧客、競合、価格、チャネルを整理してください: ${e}`},{kind:"web-search",title:"根拠を集める",instruction:`この目標に重要な最新の根拠とURLを探し、リンクと不確実性を残してください: ${e}`},{kind:"analyze",title:"重要な機会を分析",instruction:`前の結果を使って、${e} のリスク、差別化、最短の収益化ルートを分析してください。`},{kind:"create",title:"提案を下書き",instruction:`分析をもとに、すぐ試せるオファー、ランディングコピー、実験案、実行ブリーフを作成してください: ${e}`},{kind:"output",title:"次の行動にまとめる",instruction:`${e} の実行レポートを作成し、根拠、仮説、判断、リスク、次の行動、後続flow案を含めてください。`}]:t==="zh"?[{kind:"research",title:"梳理业务背景",instruction:`梳理这个目标的市场、客户、竞争、价格和渠道背景: ${e}`},{kind:"web-search",title:"收集可信证据",instruction:`为这个目标寻找重要的最新证据和URL,并保留链接与不确定性: ${e}`},{kind:"analyze",title:"分析关键机会",instruction:`基于前面的结果,分析 ${e} 的风险、差异化和最快收入路径。`},{kind:"create",title:"起草商业提案",instruction:`把分析转成可以马上测试的报价、落地页文案、实验方案或执行简报: ${e}`},{kind:"output",title:"整理下一步行动",instruction:`整理 ${e} 的执行报告,包含证据、假设、决策、风险、下一步行动和后续flow建议。`}]:[{kind:"research",title:"Map the business context",instruction:`Map the market, customer, competitor, pricing, and channel context for this objective: ${e}`},{kind:"web-search",title:"Collect source-backed facts",instruction:`Find current source-backed facts and URLs that matter for this objective: ${e}. Preserve links and note uncertainty.`},{kind:"analyze",title:"Extract what matters",instruction:`Using the previous results, identify the important changes, risks, differentiation, and fastest path to revenue for: ${e}`},{kind:"create",title:"Draft the response",instruction:`Turn the analysis into a practical launch asset, offer, copy, experiment, or execution brief for: ${e}`},{kind:"output",title:"Turn it into next actions",instruction:`Compile the execution report for ${e}: source-backed evidence, assumptions, decision, risks, next actions, and a suggested follow-up flow.`}]}function Qg(e){const t=e.trim().toLowerCase();return t==="websearch"||t==="search"?"web-search":t==="image"?"image-generate":t==="video"?"video-generate":t==="task"?"ai-task":t||"ai-task"}function jc(e){return e.slice(0,-1).map((t,n)=>({from:n,fromPin:Ic(t.kind),to:n+1,toPin:Nc(e[n+1].kind)}))}function Ic(e){switch(e){case"research":return"brief";case"web-search":return"summary";case"analyze":return"analysis";case"summarize":return"summary";case"create":return"draft";case"decision":return"decision";case"image-generate":return"image";case"video-generate":return"video";case"output":return"report";default:return"result"}}function Nc(e){switch(e){case"research":return"goal";case"web-search":return"query";case"analyze":return"source";case"summarize":return"source";case"create":return"brief";case"decision":return"options";case"human-review":return"proposal";case"image-generate":return"prompt";case"video-generate":return"prompt";case"output":return"asset";default:return"input"}}function eh(e){const t=e==null?void 0:e.trim();if(!t)return null;const n=t.indexOf("{"),r=t.lastIndexOf("}");return n>=0&&r>n?t.slice(n,r+1):null}function wr(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function po(e){return typeof e=="string"?e:""}function ud(e){if(typeof e=="number"&&Number.isInteger(e))return e;if(typeof e=="string"){const t=Number.parseInt(e,10);return Number.isInteger(t)?t:-1}return-1}function Ac(e){return!!(e&&/[\u1100-\u11ff\u3130-\u318f\uac00-\ud7af]/.test(e))}function Mc(e){return!!(e&&/[\u3040-\u30ff]/.test(e))}function th(e){return Mc(e)||!!(e&&/[\u4e00-\u9fff]/.test(e))}function Tc(e){return!!(e&&/[\u4e00-\u9fff]/.test(e))}const ki=["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(","),ah=/^[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 nh(e){if(ah.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 Rc(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 oh(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 Zr(e,t=new Date().toISOString()){return e&&!Number.isNaN(Date.parse(e))?e:t}function Si(e){return(e==null?void 0:e.trim().slice(0,90))||"Untitled Board"}function Lc(e){const t=Rc(e.content_json),n=Zr(e.updated_at??t.updatedAt);return{id:e.id,name:Si(e.title??t.name),updatedAt:n,createdAt:Zr(e.created_at,n),nodeCount:Array.isArray(t.nodes)?t.nodes.length:0,edgeCount:Array.isArray(t.edges)?t.edges.length:0,sourceKind:"cloud"}}function sh(e,t){var w,_;const n=Rc(e.content_json),r=Zr(e.updated_at??n.updatedAt),d=Number((w=n.viewState)==null?void 0:w.cursorX),c=Number((_=n.viewState)==null?void 0:_.cursorY),m=Number(e.last_cursor_x),y=Number(e.last_cursor_y),p=Number.isFinite(d)&&Number.isFinite(c),b=Number.isFinite(m)&&Number.isFinite(y);return{id:e.id,name:Si(e.title??n.name),nodes:Array.isArray(n.nodes)?n.nodes:[],edges:Array.isArray(n.edges)?n.edges:[],settings:n.settings??t,viewState:p?{cursorX:d,cursorY:c}:b?{cursorX:m,cursorY:y}:void 0,updatedAt:r,source:{kind:"cloud",boardId:e.id,loadedAt:new Date().toISOString(),snapshotFormat:"supabase.boards.content_json",originalNodeCount:Array.isArray(n.nodes)?n.nodes.length:0,renderedNodeCount:Array.isArray(n.nodes)?n.nodes.length:0}}}async function wi(e){var p;const t=pc(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 n=Fs(e);if(!n)return f.emit("projectStorage.cloud.provider.skipped",{mode:"config-missing"}),{userId:null,config:t,reason:"missing-client"};const{data:r,error:d}=await n.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:c,error:m}=await n.auth.getUser(),y=((p=c.user)==null?void 0:p.id)??null;return m||!y?(f.emit("projectStorage.cloud.provider.sessionMissing",{message:(m==null?void 0:m.message)??"missing-user"}),{userId:null,config:t,reason:"missing-user"}):{userId:y,config:t,reason:"provider-ready"}}async function rh(e){const t=await wi(e);if(!t.userId)return[];const n=Fs(e);if(!n)return[];f.emit("projectStorage.cloud.list.requested");const{data:r,error:d}=await n.from("boards").select(ki).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 c=(r??[]).map(Lc);return f.emit("projectStorage.cloud.list.loaded",{count:c.length}),c}async function ih(e,t,n){const r=await wi(e);if(!r.userId)return null;const d=Fs(e);if(!d)return null;f.emit("projectStorage.cloud.load.requested",{boardId:t});const{data:c,error:m}=await d.from("boards").select(ki).eq("user_id",r.userId).eq("id",t).maybeSingle();if(m)throw f.emit("projectStorage.cloud.provider.failed",{operation:"load",boardId:t,message:m.message}),m;if(!c)return null;const y=sh(c,n);return f.emit("projectStorage.cloud.load.loaded",{boardId:t,nodes:y.nodes.length,edges:y.edges.length}),y}async function lh(e,t,n,r=null){var ce,le;const d=await wi(e);if(!d.userId)return null;const c=Fs(e);if(!c)return null;const m=nh(t.id),y=new Date().toISOString(),p=Si(t.name),b=Number((r==null?void 0:r.x)??((ce=t.viewState)==null?void 0:ce.cursorX)??0),w=Number((r==null?void 0:r.y)??((le=t.viewState)==null?void 0:le.cursorY)??0),_={...t.viewState??{},cursorX:Number.isFinite(b)?b:0,cursorY:Number.isFinite(w)?w:0},N={...t,id:m,name:p,viewState:_,updatedAt:y},D={p_board_id:m,p_title:p,p_description:null,p_thumbnail_url:null,p_is_public:!1,p_created_at:null,p_updated_at:y,p_last_camera_x:n.x,p_last_camera_y:n.y,p_last_camera_z:n.scale,p_last_cursor_x:_.cursorX,p_last_cursor_y:_.cursorY,p_camera_bookmarks:JSON.stringify(t.settings.cameraBookmarks??{}),p_nodes:[],p_include_json_mirror:!0};f.emit("projectStorage.cloud.save.requested",{boardId:m,sourceBoardId:t.id,nodes:t.nodes.length,edges:t.edges.length});const{error:O}=await c.rpc("save_board_snapshot",D);if(O)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-rpc",boardId:m,message:O.message}),O;const z={content_json:oh(N),updated_at:y},{data:U,error:V}=await c.from("boards").update(z).eq("id",m).eq("user_id",d.userId).select(ki).maybeSingle();if(V)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-json-mirror",boardId:m,message:V.message}),V;const Y=U?Lc(U):{id:m,name:p,updatedAt:y,createdAt:y,nodeCount:t.nodes.length,edgeCount:t.edges.length,sourceKind:"cloud"};return f.emit("projectStorage.cloud.save.saved",{boardId:Y.id,nodes:Y.nodeCount,edges:Y.edgeCount}),Y}function Qr(e){return e.length===0?{minX:0,minY:0,maxX:0,maxY:0}:e.reduce((t,n)=>({minX:Math.min(t.minX,n.x),minY:Math.min(t.minY,n.y),maxX:Math.max(t.maxX,n.x+n.width),maxY:Math.max(t.maxY,n.y+n.height)}),{minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY})}function dh(e,t={},n=Qr(e),r){if(e.length===0)return{after:new Map,boundsAfter:n};const d=Ih(t.mode),c=Nh(t.order),m=Ah(t.anchor),y=Mh(t.sizeMode),p=Math.max(0,t.gapX??24),b=Math.max(0,t.gapY??24),w=Math.max(1,t.maxColumns??12),_=ei(t.quantile??.75,.05,.95),N=e.map(ch),D=kh(N,c),O=D.map(ye=>ye.width),z=D.map(ye=>ye.height),U=Math.max(1,t.cellWidth??pd(O,_)),V=Math.max(1,t.cellHeight??pd(z,_)),Y=Math.max(1,t.targetWidth??U),ce=Math.max(1,t.targetHeight??V),le=Ch(m,n);if(d==="grid"){fh(D,y,Y,ce,U,V);const ye=md(t.columns,w,n.maxX-n.minX,U,p);mh(D,le.x,le.y,ye,U,V,p,b)}else if(d==="masonry"){bh(D,y==="preserve"?"uniformWidth":y,Y);const We=md(t.columns,w,n.maxX-n.minX,Y,p);ph(D,le.x,le.y,We,Y,p,b)}else d==="stripHorizontal"?(yh(D,y==="preserve"?"uniformHeight":y,ce),gh(D,le.x,le.y,p,ce)):(xh(D,y==="preserve"?"uniformWidth":y,Y),hh(D,le.x,le.y,b,Y));let Pe=new Map(D.map(ye=>[ye.id,uh(ye)]));return m==="selectionBoundsCenter"&&(Pe=wh(n,Pe)),t.snapToGrid&&(Pe=vh(Pe,Math.max(1,t.gridSize??8))),{after:Pe,boundsAfter:Qr(Array.from(Pe.values()))}}function ch(e){return{...e,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function uh(e){return{x:e.x,y:e.y,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function mh(e,t,n,r,d,c,m,y){e.forEach((p,b)=>{const w=Math.floor(b/r),_=b%r,N=t+_*(d+m),D=n+w*(c+y);p.x=N+(d-p.width)/2,p.y=D+(c-p.height)/2})}function ph(e,t,n,r,d,c,m){const y=Array.from({length:r},()=>0);for(const p of e){const b=jh(y),w=t+b*(d+c);p.x=w+(d-p.width)/2,p.y=n+y[b],y[b]+=p.height+m}}function gh(e,t,n,r,d){let c=t;for(const m of e)m.x=c,m.y=n+(d-m.height)/2,c+=m.width+r}function hh(e,t,n,r,d){let c=n;for(const m of e)m.x=t+(d-m.width)/2,m.y=c,c+=m.height+r}function fh(e,t,n,r,d,c){if(t==="fitCellDownOnly")for(const m of e){const y=Math.min(1,d/m.width,c/m.height);m.width*=y,m.height*=y}else t==="uniformWidth"?vi(e,n):t==="uniformHeight"&&Pc(e,r)}function bh(e,t,n){if(t==="fitCellDownOnly"){for(const r of e){const d=Math.min(1,n/r.width);r.width*=d,r.height*=d}return}vi(e,n)}function yh(e,t,n){if(t==="fitCellDownOnly"){for(const r of e){const d=Math.min(1,n/r.height);r.width*=d,r.height*=d}return}Pc(e,n)}function xh(e,t,n){if(t==="fitCellDownOnly"){for(const r of e){const d=Math.min(1,n/r.width);r.width*=d,r.height*=d}return}vi(e,n)}function vi(e,t){for(const n of e){if(n.width<=0)continue;const r=t/n.width;n.width=t,n.height=Math.max(1,n.height*r)}}function Pc(e,t){for(const n of e){if(n.height<=0)continue;const r=t/n.height;n.height=t,n.width=Math.max(1,n.width*r)}}function md(e,t,n,r,d){if(typeof e=="number"&&e>0)return Math.round(ei(e,1,t));if(n<=1||r<=1)return 1;const c=Math.floor((n+d)/(r+d));return!Number.isFinite(c)||c<1?1:Math.round(ei(c,1,t))}function Ch(e,t,n){return{x:t.minX,y:t.minY}}function kh(e,t){return t==="selectionOrder"?[...e].sort((n,r)=>n.selectionIndex-r.selectionIndex):Sh(e)}function Sh(e){const t=[...e].sort((p,b)=>p.y-b.y||p.x-b.x);if(t.length<=2)return t;const n=t.map(p=>p.height).sort((p,b)=>p-b),r=n[Math.floor(n.length/2)]??1,d=Math.max(16,r*.35),c=[];let m=[],y=Number.NaN;for(const p of t)m.length===0?(m=[p],y=p.y):Math.abs(p.y-y)<=d?(m.push(p),y=(y*(m.length-1)+p.y)/m.length):(c.push([...m].sort((b,w)=>b.x-w.x)),m=[p],y=p.y);return m.length>0&&c.push([...m].sort((p,b)=>p.x-b.x)),c.flat()}function wh(e,t){if(t.size===0)return t;const n=Qr(Array.from(t.values())),r=e.minX+(e.maxX-e.minX)/2,d=e.minY+(e.maxY-e.minY)/2,c=n.minX+(n.maxX-n.minX)/2,m=n.minY+(n.maxY-n.minY)/2,y=r-c,p=d-m;return new Map(Array.from(t.entries()).map(([b,w])=>[b,{...w,x:w.x+y,y:w.y+p}]))}function vh(e,t){return new Map(Array.from(e.entries()).map(([n,r])=>[n,{...r,x:gd(r.x,t),y:gd(r.y,t)}]))}function pd(e,t){if(e.length===0)return 1;const n=[...e].sort((y,p)=>y-p),r=(n.length-1)*t,d=Math.floor(r),c=Math.min(n.length-1,d+1),m=r-d;return n[d]*(1-m)+n[c]*m}function jh(e){let t=0;for(let n=1;n<e.length;n+=1)e[n]<e[t]&&(t=n);return t}function gd(e,t){return Math.round(e/t)*t}function Ih(e){const t=zs(e);return t==="grid"?"grid":t==="striphorizontal"||t==="striph"?"stripHorizontal":t==="stripvertical"||t==="stripv"?"stripVertical":"masonry"}function Nh(e){return zs(e)==="selectionorder"?"selectionOrder":"spatialReading"}function Ah(e){const t=zs(e);return t==="selectionboundscenter"?"selectionBoundsCenter":t==="viewporttopleft"?"viewportTopLeft":"selectionBoundsTopLeft"}function Mh(e){const t=zs(e);return t==="fitcelldownonly"?"fitCellDownOnly":t==="uniformwidth"?"uniformWidth":t==="uniformheight"?"uniformHeight":"preserve"}function zs(e){return String(e??"").trim().toLowerCase().replace(/[^a-z0-9]/g,"")}function ei(e,t,n){return Math.min(n,Math.max(t,e))}const Ec=300,_c=50*1024*1024,Th=800;function ve(e){return typeof e=="string"?e.length*2:0}function Rh(e){let t=256;if(t+=ve(e.id),t+=ve(e.kind),t+=ve(e.title),t+=ve(e.body),t+=ve(e.result),t+=ve(e.imageUrl),t+=ve(e.assetUrl),t+=ve(e.sourceFilePath),t+=(e.tags??[]).reduce((n,r)=>n+ve(r),0),e.metadata)for(const[n,r]of Object.entries(e.metadata))t+=ve(n)+ve(r);return e.imageStack&&(t+=128+ve(e.imageStack.title),t+=e.imageStack.variants.reduce((n,r)=>n+96+ve(r.variantId)+ve(r.imageUrl)+ve(r.assetId)+ve(r.title)+ve(r.caption),0)),t}function Lh(e){let t=1024+ve(e.id)+ve(e.name)+ve(e.updatedAt);return t+=e.nodes.reduce((n,r)=>n+Rh(r),0),t+=e.edges.length*128,t+=Object.entries(e.settings).reduce((n,[r,d])=>n+ve(r)+ve(typeof d=="string"?d:JSON.stringify(d)),0),t}function Bc(e,t={}){var n,r;return{board:e,description:((n=t.description)==null?void 0:n.trim())||"Board change",mergeKey:((r=t.mergeKey)==null?void 0:r.trim())||null,timestampMs:t.timestampMs??Date.now(),estimatedBytes:Lh(e)}}function hd(e,t={}){const n=t.maxEntries??Ec,r=t.maxBytes??_c;let d=e.slice(Math.max(0,e.length-n)),c=d.reduce((m,y)=>m+y.estimatedBytes,0);for(;d.length>1&&c>r;){const[m,...y]=d;c-=(m==null?void 0:m.estimatedBytes)??0,d=y}return d}function $a(e,t,n={}){const r=Bc(t,n),d=n.mergeWindowMs??Th,c=e.slice(),m=c.at(-1);return m&&r.mergeKey&&m.mergeKey===r.mergeKey&&r.timestampMs-m.timestampMs<d?(c[c.length-1]={...m,description:r.description,timestampMs:r.timestampMs,estimatedBytes:Math.max(m.estimatedBytes,r.estimatedBytes)},hd(c,n)):(c.push(r),hd(c,n))}function Ph(e,t,n={}){const r=Bc(t,n),d=n.maxEntries??Ec,c=n.maxBytes??_c;let m=[r,...e].slice(0,d),y=m.reduce((p,b)=>p+b.estimatedBytes,0);for(;m.length>1&&y>c;){const p=m.at(-1);y-=(p==null?void 0:p.estimatedBytes)??0,m=m.slice(0,-1)}return m}function Hs(e,...t){const n=e==null?void 0:e.metadata;if(!n)return"";for(const r of t){const d=n[r];if(typeof d=="string"&&d.trim())return d.trim()}return""}function go(e,t){return!!Hs(e,t)}function Dc(e){if(!e||!e.trim())return!1;const t=e.trim();return/^(https?:|blob:|data:|file:)/i.test(t)}function Oc(e){if(!e)return"";const t=Hs(e,"OriginalPath");if(t)return t;const n=String(e.body||"").trim();return Dc(n)?"":n}function $c(e){return e?Oc(e)||String(e.sourceFilePath||"").trim()||String(e.assetUrl||"").trim()||String(e.imageUrl||"").trim()||String(e.body||"").trim():""}function Fc(e){return Hs(e,"ThumbnailUrl","thumbnailUrl")}function Eh(e){if(!e||e.kind!=="image")return!1;if(go(e,"ImageGenerationProvider")||go(e,"GeneratedImageSourceWidth")||go(e,"GeneratedImageSourceHeight")||go(e,"CodexImageQuality")||go(e,"ImageRouterRevisedPrompt"))return!0;const t=Hs(e,"RequestedMediaOperation");return["text2image","image2image","inpaint"].includes(t.toLowerCase())}function ji(e){if(!e)return"";if(e.kind==="image"||e.kind==="mask"){const t=Eh(e)?Oc(e):"",n=Fc(e),r=String(e.body||"").trim();return t||n||String(e.imageUrl||"").trim()||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()||(Dc(r)?r:"")}return $c(e)||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()}function Uc(e){if(!e)return"";const t=$c(e)||e.title||e.kind;return String(t||"").replace(/\\/g,"/").replace(/\/+$/,"").split("/").filter(Boolean).pop()||e.title||e.kind}const _h=2048,Bh=16e3,vr=1024,jr=64,Dh=2048,Ir=3,Oh=16,$h=256,Fh=new Set(["text","note","memo","markdown","code","directory"]),Uh=/[\p{L}\p{M}\p{N}]{2,}/gu,fd=4,zh=8,bd=1.35;function Hh(e){return Fh.has(String(e||"").trim().toLowerCase())}function Wh(e){const t=e.map(Yh),n=new Map,r=new Map,d=new Map,c=new Map;for(const m of t){n.set(m.id,m);for(const y of m.tokens)Nr(r,y,m.id);for(const y of m.prefixes)Nr(d,y,m.id);for(const y of m.ngrams)Nr(c,y,m.id)}return{documents:t,documentById:n,tokenIndex:r,prefixIndex:d,ngramIndex:c}}function Vh(e,t,n={}){const r=Math.max(1,Math.trunc(Number(n.limit||30))),d=yn(t),c=yd(e,0,0,n.viewport,0);if(!d)return{hits:[],profile:c};const m=Array.from(zc(d)),y=Array.from(Hc(m)),p=Vc(d),b=Array.from(Wc(p)),w=new Map;for(const z of m)Ar(e.tokenIndex,z,w,8);for(const z of y)Ar(e.prefixIndex,z,w,z.length<=3?4:2);for(const z of b)Ar(e.ngramIndex,z,w,1.15);const _=qh(e,w,r),N=Jh(n.allowedContentTypes),D=[];for(const z of _){const U=e.documentById.get(z);if(!U||N&&!N.has(U.contentType))continue;const V=Kh(U,d,m,b);if(V<=0)continue;const Y=Xh(U,n.viewport??null);D.push({nodeId:U.id,score:V+Y,textScore:V,viewportBoost:Y})}D.sort((z,U)=>U.score-z.score||z.nodeId.localeCompare(U.nodeId));const O=D.slice(0,r);return{hits:O,profile:yd(e,_.length,O.length,n.viewport,O.filter(z=>z.viewportBoost>0).length)}}function yn(e){const t=String(e??"");if(!t.trim())return"";let n=t;try{n=t.normalize("NFKC")}catch{n=t}n=n.toLowerCase();let r="",d=!1;for(const c of n){if(/\s/u.test(c)){d||(r+=" ",d=!0);continue}Zh(c)||(r+=c,d=!1)}return r.trim()}function zc(e){return new Set(e.match(Uh)??[])}function Hc(e){const t=new Set;for(const n of e){if(!n.trim())continue;const r=Math.min(8,n.length);for(let d=2;d<=r;d+=1)t.add(n.slice(0,d))}return t}function Wc(e){const t=new Set;if(!e.trim())return t;if(e.length<=Ir)return t.add(e),t;for(let n=0;n<=e.length-Ir;n+=1)t.add(e.slice(n,n+Ir));return t}function Yh(e){const t=String(e.kind??"").trim().toLowerCase(),n=Ha(e.prompt??e.title,_h),r=Hh(t)?Ha(e.response??e.body,Bh):"",d=Gh(e.metadata,e.tags,e.metadataText),c=Ha(e.sourceFilePath||e.assetUrl,Dh),m=yn(n),y=yn(r),p=yn(d),b=yn(c),w=yn(t),_=[m,p,b,y,w].filter(Boolean).join(" "),N=zc(_);return{id:String(e.id),contentType:t,normalizedPrompt:m,normalizedResponse:y,normalizedMetadata:p,normalizedSourcePath:b,normalizedContentType:w,tokens:N,prefixes:Hc(N),ngrams:Wc(Vc(_)),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 Gh(e,t,n){const r=[];let d=0;if(e)for(const[c,m]of Object.entries(e)){if(d>=jr)break;!String(c??"").trim()&&!String(m??"").trim()||(r.push(Ha(c,128)),String(m??"").trim()&&r.push(Ha(m,vr)),d+=1)}return d<jr&&(t!=null&&t.length)&&(r.push("tags",Ha(t.join(" "),vr)),d+=1),d<jr&&(n!=null&&n.trim())&&r.push("metadata",Ha(n,vr)),r.join(" ")}function Kh(e,t,n,r){let d=0;e.normalizedPrompt===t?d+=120:ho(e.normalizedPrompt,t)&&(d+=54),ho(e.normalizedMetadata,t)&&(d+=26),ho(e.normalizedSourcePath,t)&&(d+=18),ho(e.normalizedResponse,t)&&(d+=14),ho(e.normalizedContentType,t)&&(d+=8);for(const c of n)e.tokens.has(c)&&(d+=7),e.normalizedPrompt.startsWith(c)&&(d+=10);for(const c of r)e.ngrams.has(c)&&(d+=.85);return d}function Xh(e,t){if(!t)return 0;const n=e.x+Math.max(1,e.width)/2,r=e.y+Math.max(1,e.height)/2,d=Math.abs(n-t.centerX)/Math.max(1,t.halfWidth),c=Math.abs(r-t.centerY)/Math.max(1,t.halfHeight),m=Math.sqrt(d*d+c*c);if(m<=1)return fd+(1-m)*zh;if(m<=bd){const y=1-(m-1)/Math.max(.001,bd-1);return Math.max(0,y)*(fd*.75)}return 0}function qh(e,t,n){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(n*Oh,$h)).map(([r])=>r)}function Jh(e){if(!e)return null;const t=new Set(Array.from(e,n=>String(n||"").trim().toLowerCase()).filter(Boolean));return t.size>0?t:null}function yd(e,t,n,r,d){return{documentCount:e.documents.length,candidateCount:t,rankedCount:n,viewportBoosted:!!r,boostedCount:d,indexedTokenCount:e.tokenIndex.size,indexedPrefixCount:e.prefixIndex.size,indexedNGramCount:e.ngramIndex.size}}function Nr(e,t,n){const r=e.get(t);if(r){r.add(n);return}e.set(t,new Set([n]))}function Ar(e,t,n,r){const d=e.get(t);if(d)for(const c of d)n.set(c,(n.get(c)??0)+r)}function Vc(e){let t="";for(const n of e)/\s/u.test(n)||(t+=n);return t}function Ha(e,t){const n=String(e??"");return n.length<=t?n:n.slice(0,t)}function ho(e,t){return!!(e&&t&&e.includes(t))}function Zh(e){const t=e.codePointAt(0)??0;return t<=31||t>=127&&t<=159}const Qh=2147483647,ef="LocalBridge access is enabled, but the bridge is not reachable. Restart LocalBridge, allow Chrome local-network access, then reload MindCanvas.",tf="Local storage is unavailable in the hosted app until browser local storage or LocalBridge access is available.",af="Local storage is unavailable. Check the browser-local storage state or LocalBridge connection.",nf="Cloud projects are unavailable until Supabase and Cloudflare R2 are configured.",of="Login is required before cloud projects can be used.",sf="Cloud projects are unavailable.";function rf(e){return e.bridgeProviderConfigured||e.browserProviderConfigured||e.embeddedProviderConfigured}function ti(e,t=!0){const n={isAvailable:!1,bridgeReachable:!1,browserLocalAvailable:!1,embeddedLocalAvailable:!1,providerKind:"none",canBrowseWorkspace:!1};return e.bridgeProviderConfigured&&e.bridgeReachable?{...n,isAvailable:!0,bridgeReachable:!0,providerKind:"bridge",canBrowseWorkspace:!0}:e.hostedWebApp&&e.hostedLocalBridgeAccessEnabled&&e.bridgeProviderConfigured?{...n,providerKind:"bridge"}:e.browserProviderConfigured&&(e.browserLocalAvailable||t&&e.browserLocalAvailableWhenEmpty===!0)?{...n,isAvailable:!0,browserLocalAvailable:!0,providerKind:"browser"}:e.embeddedProviderConfigured&&e.supportsEmbeddedLocal?{...n,isAvailable:!0,embeddedLocalAvailable:!0,providerKind:"embedded"}:n}function lf(e){return ti(e,!1).isAvailable?"local":Ii(e)?"cloud":ti(e,!0).isAvailable?"local":e.cloudConfigured?"cloud":"local"}function Ii(e){return e.cloudConfigured&&e.cloudSessionAvailable}function df(e,t){return t.providerKind==="bridge"&&!t.bridgeReachable?ef:e.hostedWebApp?tf:af}function cf(e){return e.cloudConfigured?Ii(e)?sf:of:nf}function uf(e){var w,_,N;const t=Ii(e),n=ti(e,!0),r=rf(e),d=e.cloudConfigured,c=n.isAvailable,m=t;let y=e.storedMode??lf(e);y==="cloud"&&(!d||!m&&c)?y=c?"local":"cloud":y==="local"&&(!r&&d||!c&&m)&&(y="cloud");const p=e.cloudAccess,b=((w=p==null?void 0:p.denialReason)==null?void 0:w.trim())||void 0;return{currentMode:y,showLocalTab:r,showCloudTab:d,isLocalAvailable:n.isAvailable,isCloudAvailable:t,requiresCloudSignIn:e.cloudConfigured&&!t,canUseLocalProjects:c,canBrowseLocalWorkspace:n.canBrowseWorkspace,localProviderKind:n.providerKind,canUseCloudProjects:m,canSyncLocalToCloud:c&&m,cloudPlanKey:((_=p==null?void 0:p.planKey)==null?void 0:_.trim())||"free",cloudEntitlementStatus:((N=p==null?void 0:p.entitlementStatus)==null?void 0:N.trim())||(p?"active":"inactive"),currentCloudBoardCount:(p==null?void 0:p.currentBoardCount)??0,cloudBoardLimit:(p==null?void 0:p.cloudBoardLimit)??Qh,lockedCloudBoardCount:(p==null?void 0:p.lockedBoardCount)??0,canCreateCloudBoards:(p==null?void 0:p.canCreateBoard)??m,canUseManagedAi:(p==null?void 0:p.canUseManagedAi)??!1,canGenerateImage:(p==null?void 0:p.canGenerateImage)??!1,canUseContextPack:(p==null?void 0:p.canUseContextPack)??!1,cloudLimitMessage:b,localStatusMessage:n.isAvailable?void 0:df(e,n),cloudStatusMessage:m?void 0:cf(e)}}function mf(){const e=new Error("Queued operation was cancelled before it started.");return e.name="AbortError",e}class pf{constructor(){_l(this,"tails",new Map)}isBusy(t){return this.tails.has(t)}enqueue(t,n,r){if(typeof n!="function")throw new TypeError("KeyedAsyncQueue operation is required.");const d=this.tails.get(t)??Promise.resolve();let c;return c=(async()=>{try{try{await d}catch{}if(r!=null&&r.aborted)throw mf();return await n(r)}finally{this.tails.get(t)===c&&this.tails.delete(t)}})(),this.tails.set(t,c),c}clear(t){if(typeof t>"u"){this.tails.clear();return}this.tails.delete(t)}}const gf=/^data:image\//i;function hf(e){const t=String(e||"").trim();if(!t)return{src:null,reason:"empty",urlKind:"empty"};const n=t.toLowerCase();return gf.test(t)?{src:t,reason:null,urlKind:"data"}:n.startsWith("blob:")?{src:t,reason:null,urlKind:"blob"}:n.startsWith("https://")?{src:t,reason:null,urlKind:"https"}:n.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 Mr({src:e,alt:t="",className:n="",testId:r="secure-image",traceId:d,kind:c="image",title:m}){const y=g.useMemo(()=>hf(e),[e]),[p,b]=g.useState(y.src?"loading":"blocked");g.useEffect(()=>{const D=y.src?"loading":"blocked";b(D),y.src||f.emit("secureImage.blocked",{id:d,kind:c,reason:y.reason,urlKind:y.urlKind})},[c,y.reason,y.src,y.urlKind,d]);const w=()=>{b("loaded"),f.emit("secureImage.loaded",{id:d,kind:c,urlKind:y.urlKind})},_=()=>{b("error"),f.emit("secureImage.error",{id:d,kind:c,urlKind:y.urlKind})},N=p==="blocked"?`Image blocked: ${y.reason||"unsupported source"}`:"Image failed to load";return o.jsxs("div",{className:`secure-image secure-image--${p} ${n}`.trim(),"data-testid":r,"data-secure-image-state":p,"data-secure-image-kind":c,title:p==="loaded"?m:N,children:[y.src&&o.jsx("img",{src:y.src,alt:t,loading:"lazy",decoding:"async",draggable:!1,onLoad:w,onError:_}),p==="loading"&&o.jsx("span",{className:"secure-image__loading","aria-hidden":"true",children:o.jsx("span",{})}),(p==="blocked"||p==="error")&&o.jsx("span",{className:"secure-image__fallback",role:"img","aria-label":N,children:p==="blocked"?o.jsx(Hp,{size:18}):o.jsx(Wp,{size:18})})]})}const ff={note:Ls,text:St,"ai-task":Cn,image:Sn,mask:Sn,video:wn,embed:vn,code:kn,markdown:St,"csv-table":St,memo:Ls,pdf:St,file:Yr,directory:Vp,"template-launcher":St,"remote-monitor":Rs,"remote-control":Rs},Tr=[{key:"Auto",label:"Auto Detect",description:"Infer whether this note is growth, revenue, build, or research work."},{key:"GeneralCompany",label:"General AI Company",description:"Balanced planning, practical work, and artifact production."},{key:"GrowthValidation",label:"Growth Validation",description:"Marketing loops, signals, messaging, distribution, and experiments."},{key:"RevenueAffiliate",label:"Revenue / Affiliate",description:"Affiliate discovery, keywords, content assets, and revenue experiments."},{key:"ProductBuild",label:"Product Build",description:"Specs, implementation-oriented work, artifacts, and approval gates."},{key:"ResearchOnly",label:"Research Only",description:"Evidence gathering, risks, synthesis, and recommendations."}],xd=500,bf=48,yf=new Set(["mindcanvasagent","agentcommand"]),xf=new Set(["codenote","code-note"]),Cf=["multidesktopmonitor","remotehubmonitor","remotefleetmonitor","smartviewmonitor"],kf=["remotedevice","remotefleetdevice","remotecontrol"],Sf=["top","right","bottom","left"];function wf(e){const t=In(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),n=In(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=In(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-monitor"||t==="remotefleetmonitor"||n==="fleet-monitor"||r==="remote-fleet@1"||Gc(e,["RemoteFleetViewMode","RemoteFleetHubStatus","RemoteFleetDevicesJson","RemoteFleetDeviceCount","RemoteFleetConnectedDeviceCount","RemoteFleetProjectionMode","RemoteFleetCanvasPagination","RemoteHub","RemoteRoute","RemotePage","RemoteVisibleBudget"])||Yc(e,Cf,["remote","monitor"])}function vf(e){const t=In(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),n=In(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=In(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-control"||t==="remotefleetdevice"||n==="fleet-device"||r==="remote-fleet-device@1"||Gc(e,["RemoteFleetDeviceId","RemoteFleetDeviceName","RemoteFleetDevicePlatform","RemoteFleetDeviceConnected","RemoteFleetDeviceCanControl","RemoteFleetSourceMonitorNodeId"])||Yc(e,kf,["remote","control"])}function Yc(e,t,n){const r=(e.tags??[]).map(y=>y.trim().toLowerCase()).filter(Boolean),d=n.every(y=>r.includes(y)),m=[e.title,e.body,e.sourceFilePath,e.assetUrl,...r].join(" ").toLowerCase().replace(/[^a-z0-9]+/g,"");return d||t.some(y=>m.includes(y))}function In(e,...t){const n=e.metadata??{};for(const d of t){const c=n[d];if(c!=null)return String(c)}const r=new Set(t.map(d=>d.toLowerCase()));for(const[d,c]of Object.entries(n))if(r.has(d.toLowerCase())&&c!==void 0&&c!==null)return String(c);return""}function Gc(e,t){const n=e.metadata??{},r=new Set(t.map(d=>d.toLowerCase()));return Object.entries(n).some(([d,c])=>r.has(d.toLowerCase())&&c!==void 0&&c!==null&&String(c).trim()!=="")}const ai=[{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"}],jf=g.memo(function({node:t,selected:n,selectionCount:r,pulsing:d,connectionDraft:c,onSelect:m,onDragStart:y,onResizeStart:p,onPatch:b,onDelete:w,onDuplicate:_,onRun:N,onPin:D,onConnectorDragStart:O,onOpenResult:z,onToggleAiReference:U,onCopyNode:V,onCopyEmbedReference:Y,onFitNodeHeight:ce,onToggleNodeExpanded:le,onToggleWordWrap:Pe,onStageCompany:ye,onOpenCompanyGraph:We,onSyncCompanyGoal:vt,onRefreshCompany:nt,onSetCompanyStatus:G,onRemoveCompany:X,onOpenAsset:ue,onOpenDirectorySettings:oe,onScanDirectory:mt,onCreateRemoteControl:W,onGenerateTemplateCard:jt,appLanguage:It}){var lt,Xt,Na,an,ca,nn,re,Ge,on,Vn,v,q,ie,Fo,He,qt,Jt,sn,rn,Yn,Gn,ln,Kn,Aa,Xn,dn,Ma,ua,Fe,_e,Ta,Ra,cn,qn,La,un;const P=x=>fi(It,x),Nt=String(((lt=t.metadata)==null?void 0:lt.AutomationNodeKind)||((Xt=t.metadata)==null?void 0:Xt.AutomationTemplateKey)||((Na=t.metadata)==null?void 0:Na.AutomationInferredKind)||"").trim().toLowerCase(),At=String(((an=t.metadata)==null?void 0:an.SemanticType)||((ca=t.metadata)==null?void 0:ca.semanticType)||"").trim().toLowerCase(),ze=t.kind==="memo"&&yf.has(At),H=t.kind==="memo"&&xf.has(At),pt=String(((nn=t.metadata)==null?void 0:nn.AgentCommandStatus)||"Draft"),gt=String(((re=t.metadata)==null?void 0:re.AgentCommandMode)||"Task"),ot=String(((Ge=t.metadata)==null?void 0:Ge.AgentCommandRequestedRole)||"Researcher"),Ft=String(((on=t.metadata)==null?void 0:on.CodeNoteStatus)||"Draft"),Ca=String(((Vn=t.metadata)==null?void 0:Vn.CodeNoteSyncState)||"Unlinked"),ka=String(((v=t.metadata)==null?void 0:v.CodeNoteKind)||"Feature"),No=ze?Cn:H?kn:Nt==="image-generate"?Sn:Nt==="video-generate"?wn:ff[t.kind],Ve=c&&c.from!==t.id,Tn=t.kind==="ai-task",sa=t.kind==="pdf"||t.kind==="file"||t.kind==="directory",Mt=wf(t),Ie=vf(t),se=Mt||Ie,Ei=Mt?"monitor":Ie?"control":"",Be=r>1,Ut=Tn?"result":"context",ra=((q=c==null?void 0:c.target)==null?void 0:q.id)===t.id?c.target.side:null,Ao=(c==null?void 0:c.from)===t.id,xe=t.kind==="template-launcher"||String(((ie=t.metadata)==null?void 0:ie.semanticType)||((Fo=t.metadata)==null?void 0:Fo.SemanticType)||"").toLowerCase()==="templatelauncher",Ae=t.kind==="video",Me=t.kind==="embed",zt=t.kind==="mask",he=t.kind==="memo",Mo=t.kind==="markdown",Ya=t.kind==="csv-table",Te=he?Ef(t):null,qe=g.useRef(null),Rn=Ae?Kc(t):"",ke=Ae?Bf(t):"",ht=Me?Df(t):"",Ln=Me?Of(t):"",Pn=Me?$f(t,ht):"",Ht=Me?Ff(t):"",De=(((He=t.imageStack)==null?void 0:He.variants)??[]).filter(x=>!!x.imageUrl),ft=De.find(x=>{var $;return x.variantId===(($=t.imageStack)==null?void 0:$.activeVariantId)})??De[0]??null,Sa=t.kind==="image"||zt?(ft==null?void 0:ft.imageUrl)||ji(t):"",To=ft?De.findIndex(x=>x.variantId===ft.variantId):-1,Tt=!Sa&&!sa&&!se&&!xe&&!Ae&&!Me,Ro=Tt&&!he,Je=t.isExpanded===!1&&Number(t.originalHeight??0)>t.height+1,Ye=!se&&!["image","mask","video","embed","pdf","file","directory","template-launcher","remote-monitor","remote-control"].includes(t.kind),Oe=t.aiEnabled!==!1,Ga=_f(t),Lo=!!(t.isChunkedText||((qt=t.metadata)==null?void 0:qt.IsChunkedText)==="true"),Ce=Number(t.totalLineCount??((Jt=t.metadata)==null?void 0:Jt.TotalLineCount)??0),Ka=t.sourceFilePath||((sn=t.metadata)==null?void 0:sn.FileName)||t.title,Po=Lo?o.jsxs("div",{className:"node-chunked-text-state","data-testid":"node-chunked-text-state",title:Ka,children:[o.jsx(St,{size:12}),o.jsx("strong",{children:"Chunked text"}),Number.isFinite(Ce)&&Ce>0&&o.jsxs("span",{children:[Ce.toLocaleString()," lines"]})]}):null,En=t.kind==="directory"?(rn=t.metadata)==null?void 0:rn.Include:null,Ee=t.kind==="directory"?(Yn=t.metadata)==null?void 0:Yn.Exclude:null,Rt=t.kind==="directory"?(Gn=t.metadata)==null?void 0:Gn.DirectoryFileCount:null,ia=t.kind==="directory"?(ln=t.metadata)==null?void 0:ln.DirectoryDirCount:null,Xa=t.kind==="directory"?(Kn=t.metadata)==null?void 0:Kn.DirectoryLastScanUtc:null,[Eo,$e]=g.useState(!1),[_n,Bn]=g.useState(null),[Dn,qa]=g.useState(((Aa=t.metadata)==null?void 0:Aa.CompanyExecutionMode)||"Auto"),[Wt,On]=g.useState(((Xn=t.metadata)==null?void 0:Xn.CompanySubAgents)!=="false"),[$n,la]=g.useState(!1),[Ze,Fn]=g.useState(null),wa=g.useMemo(()=>Ya?Mf(t.body,Ze):null,[Ze,Ya,t.body]),me=g.useMemo(()=>xe?dc(t.body):null,[xe,t.body]),st=(me==null?void 0:me.options.find(x=>x.id===me.selectedOptionId))??(me==null?void 0:me.options[0])??null,bt=dp(me),Vt=Tr.find(x=>x.key===Dn)||Tr[0],Yt=String(((dn=t.metadata)==null?void 0:dn.CompanyStatus)||(t.companyMode?"Staged":"")).trim(),Lt=Yt.toLowerCase(),Ws=Lt==="paused",Un=Lt==="archived",_o=x=>{x.stopPropagation();const $=x.currentTarget.getBoundingClientRect();Bn(Nf($)),$e(de=>!de)},va=x=>{x.stopPropagation(),ye(t.id,{executionMode:Vt.key,enableSubAgents:Wt}),$e(!1)},Vs=x=>{x.stopPropagation(),We(t.id)},zn=(x,$)=>{$.stopPropagation();const de=De.find(dt=>dt.variantId===x);!de||!t.imageStack||de.variantId===t.imageStack.activeVariantId||(f.emit("node.imageStack.variant",{nodeId:t.id,variantId:de.variantId,variantCount:De.length}),b(t.id,{imageUrl:de.imageUrl,imageStack:{...t.imageStack,activeVariantId:de.variantId,variants:De,updatedAtUtc:new Date().toISOString()},metadata:{...t.metadata??{},ImageStackActiveVariantId:de.variantId}}))},ja=(x,$)=>{if($.stopPropagation(),!!he){if((Te==null?void 0:Te.key)===x){la(!1);return}f.emit("node.memoColor.changed",{id:t.id,colorKey:x}),b(t.id,{metadata:{...t.metadata??{},memoColor:x,memoColorIsCustom:"true"}}),la(!1)}},Hn=x=>{var Ue,yt;if(x.stopPropagation(),!ze)return;const $=(t.body||t.title||"Agent command objective").trim(),de=["Clarify the objective and constraints.","Collect linked canvas context or code notes.","Draft an execution plan before external adapter use."],dt=["canvas-context","agent-command-planning","adapter-gated-execution"],Pt=["Canvas.ListAgentCommands","Canvas.UpdateAgentCommand","Canvas.PlanAgentCommand","Canvas.SetAgentCommandState"],et=["MindCanvasAgent",gt,ot],ma=["Local React plan staged for this Agent Command.",`Role: ${ot}`,`Mode: ${gt}`,`Objective: ${$.slice(0,220)}`,"External execution remains adapter-gated until LocalBridge/agent runtime is available."].join(`
|
|
3
|
-
`);f.emit("mindcanvas.agentCommand.planned",{id:t.id,mode:gt,requestedRole:ot,adapterState:((Ue=t.metadata)==null?void 0:Ue.AdapterState)??"adapter-gated"}),b(t.id,{tags:["Agent Command",ot,"Planned"],metadata:{...t.metadata??{},AgentCommandStatus:"Planned",AgentCommandPlannerSummary:ma,AgentCommandPlanSteps:JSON.stringify(de),AgentCommandPlannedSkills:JSON.stringify(dt),AgentCommandPlannedTools:JSON.stringify(Pt),AgentCommandPlannedConcepts:JSON.stringify(et),AgentCommandLastExplorationPhase:"planned-local",AdapterState:((yt=t.metadata)==null?void 0:yt.AdapterState)??"adapter-gated"}})},Gt=x=>{var Pt,et;if(x.stopPropagation(),!ze)return;const $=new Date().toISOString(),de=[`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(`
|
|
4
|
-
`),dt=[`${$} Local React execution staged.`,`${$} Adapter gated; no external tools invoked.`];f.emit("mindcanvas.agentCommand.executed.local",{id:t.id,mode:gt,requestedRole:ot,adapterState:((Pt=t.metadata)==null?void 0:Pt.AdapterState)??"adapter-gated"}),b(t.id,{status:"done",result:de,tags:["Agent Command",ot,"Completed"],metadata:{...t.metadata??{},AgentCommandStatus:"Completed",AgentCommandLastExecutedAtUtc:$,AgentCommandConsoleLogs:JSON.stringify(dt),AgentCommandResultLinks:JSON.stringify([]),AdapterState:((et=t.metadata)==null?void 0:et.AdapterState)??"adapter-gated"}})},Ja=(x,$,de,dt)=>{var et,ma,Ue;if(x.stopPropagation(),!H)return;const Pt=$==="Implemented"?JSON.stringify([`local-code-note://${t.id}/implementation-handoff.md`]):((et=t.metadata)==null?void 0:et.CodeNoteOutputArtifacts)||"[]";f.emit("mindcanvas.codeNote.state",{id:t.id,status:$,syncState:de,reason:dt,adapterState:((ma=t.metadata)==null?void 0:ma.AdapterState)??"local-canvas-only"}),b(t.id,{tags:["Code Note",$,de],metadata:{...t.metadata??{},CodeNoteStatus:$,CodeNoteSyncState:de,CodeNoteOutputArtifacts:Pt,...$==="Implemented"||$==="Reviewed"?{CodeNoteLastAppliedAtUtc:new Date().toISOString()}:{},AdapterState:((Ue=t.metadata)==null?void 0:Ue.AdapterState)??"local-canvas-only"}})},Ia=()=>{On(x=>!x)},da=async x=>{if(x.stopPropagation(),!ke||!qe.current){f.emit("node.video.unavailable",{id:t.id,reason:ke?"element-missing":"source-missing"});return}try{await qe.current.play(),f.emit("node.video.play",{id:t.id,sourceKind:kd(ke)})}catch($){f.emit("node.video.unavailable",{id:t.id,reason:$ instanceof Error?$.message:String($)})}},Bo=x=>{if(x.stopPropagation(),!ke||!qe.current){f.emit("node.video.unavailable",{id:t.id,reason:ke?"element-missing":"source-missing"});return}qe.current.pause(),f.emit("node.video.pause",{id:t.id,sourceKind:kd(ke)})},rt=x=>{x.stopPropagation(),ht&&Y(t.id,ht)},Za=x=>{b(t.id,{body:JSON.stringify(x),metadata:{...t.metadata??{},templateLauncherSelectedOptionId:x.selectedOptionId??""}})},Kt=(x,$)=>{if($.stopPropagation(),!me)return;const de=mp(me,x);Za(de),f.emit("templateCard.option.select",{nodeId:t.id,optionId:de.selectedOptionId??null})},Qa=(x,$)=>{if(!me)return;const de=pp(me,x,$);Za(de),f.emit("templateCard.input.patch",{nodeId:t.id,key:x})},Wn=x=>{x.stopPropagation(),!(!me||bt)&&jt(t.id,me.selectedOptionId??null,me.inputValues)},Qe=Ye&&Eo?o.jsxs("div",{className:"node-company-launcher","data-testid":"node-company-launcher",style:_n?{left:_n.left,top:_n.top}:void 0,onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[o.jsx("div",{className:"node-company-launcher__eyebrow",children:"Run As Company"}),o.jsx("h4",{children:"Turn this note into a background AI company"}),o.jsx("p",{children:"Pick the operating mode to stage on this node. External CompanyCore execution stays adapter-gated."}),o.jsx("div",{className:"node-company-mode-list",children:Tr.map(x=>o.jsxs("button",{type:"button",className:x.key===Vt.key?"is-selected":"","data-company-mode":x.key,onClick:()=>qa(x.key),children:[o.jsx("strong",{children:x.label}),o.jsx("span",{children:x.description})]},x.key))}),o.jsxs("button",{type:"button",className:"node-company-subagents","aria-pressed":Wt,onClick:x=>{x.stopPropagation(),Ia()},children:[o.jsx("span",{className:"node-company-toggle-indicator","aria-hidden":"true",children:Wt?"On":"Off"}),o.jsxs("span",{children:[o.jsx(gc,{size:13}),"Enable sub-agents for exploration waves and specialist handoff"]})]}),o.jsxs("div",{className:"node-company-launcher__actions",children:[o.jsx("button",{type:"button",className:"btn btn-ghost",onClick:()=>$e(!1),children:"Cancel"}),o.jsx("button",{type:"button",className:"btn btn-primary","data-testid":"node-company-run-confirm",onClick:va,children:"Stage Company"})]})]}):null,en={width:t.width,height:t.height,transform:`translate3d(${t.x}px, ${t.y}px, 0)`,...Te?{"--memo-bg":Te.surface,"--memo-border":Te.border,"--memo-ink":Te.ink,"--memo-ring":Te.ring,"--memo-accent":Te.swatch}:{}},tn=o.jsxs(o.Fragment,{children:[Ro&&o.jsx("button",{type:"button",title:P(Oe?"Disable AI reference":"Enable AI reference"),"aria-label":P(Oe?"Disable AI reference":"Enable AI reference"),className:Oe?"is-active-ai":"is-inactive-ai",onPointerDown:x=>x.stopPropagation(),onClick:()=>U(t.id),children:o.jsx(Yp,{size:13})}),he&&o.jsx("button",{type:"button",title:P("Change memo color"),"aria-label":P("Change memo color"),"aria-pressed":$n,className:"is-memo-color-action","data-testid":"node-memo-color-open",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),la($=>!$)},children:o.jsx(hc,{size:13})}),t.kind==="code"&&o.jsx("button",{type:"button",title:t.wordWrap===!1?P("Enable word wrap"):P("Disable word wrap"),"aria-label":t.wordWrap===!1?P("Enable word wrap"):P("Disable word wrap"),onPointerDown:x=>x.stopPropagation(),onClick:()=>Pe(t.id),children:o.jsx(Gp,{size:13})}),o.jsx("button",{type:"button",title:P(Sa?"Copy image to clipboard":"Copy content"),"aria-label":P(Sa?"Copy image to clipboard":"Copy content"),onPointerDown:x=>x.stopPropagation(),onClick:()=>V(t.id),children:o.jsx(So,{size:13})}),o.jsx("button",{type:"button",title:P("Duplicate node"),"aria-label":P("Duplicate node"),"data-testid":"node-duplicate",onPointerDown:x=>x.stopPropagation(),onClick:()=>_(t.id),children:o.jsx(fc,{size:13})}),Tt&&o.jsx("button",{type:"button",title:P("Fit text height"),"aria-label":P("Fit text height"),onPointerDown:x=>x.stopPropagation(),onClick:()=>ce(t.id),children:o.jsx(Kp,{size:13})}),Tt&&o.jsx("button",{type:"button",title:P(Je?"Expand node":"Collapse node"),"aria-label":P(Je?"Expand node":"Collapse node"),"aria-pressed":Je,onPointerDown:x=>x.stopPropagation(),onClick:()=>le(t.id),children:Je?o.jsx(Xl,{size:13}):o.jsx(Xp,{size:13})}),Tn&&o.jsx("button",{type:"button",title:P("Run node"),onPointerDown:x=>x.stopPropagation(),onClick:()=>N(t.id),children:o.jsx(ya,{size:13})}),Ye&&o.jsx("button",{type:"button",title:t.companyMode?P("Open Company graph"):P("Run this note as Company"),"aria-label":t.companyMode?P("Open Company graph"):P("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?Vs:_o,children:o.jsx(ql,{size:13})}),o.jsx("button",{type:"button",title:P("Delete node"),"aria-label":P("Delete node"),"data-testid":"node-delete",onPointerDown:x=>x.stopPropagation(),onClick:()=>w(t.id),children:o.jsx(Ps,{size:13})})]});Tn?(P("Context input"),Jl,P("Context"),t.result,P("Drag to connect this result to an input pin. Click to view the result."),Xl,P("Result")):(P("Use this node as AI Task context"),Jl,P("Context"));const Ne=se?null:o.jsx("div",{className:"node-connector-handles","data-testid":"node-connector-handles","aria-hidden":!1,children:Sf.map(x=>o.jsx("button",{type:"button",className:`node-connector-handle node-connector-handle--${x} ${Ao&&(c==null?void 0:c.fromSide)===x?"is-source":""} ${ra===x?"is-target":""}`,title:P(`Drag from ${x} to connect`),"aria-label":P(`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":Ut,onPointerDown:$=>O(t.id,x,Ut,$)},x))}),fe=zt||De.length>1||Me||Ae?o.jsxs("div",{className:"node-surface-badges","data-testid":"node-surface-badges",children:[zt&&o.jsx("span",{className:"node-mask-badge",title:P("Image edit mask reference"),children:"Mask"}),De.length>1&&o.jsxs("span",{className:"node-image-stack-badge",title:P("Image stack variants"),children:[Math.max(1,To+1),"/",De.length]}),Me&&o.jsx("span",{className:"node-embed-badge",children:Ln==="youtube"?"YouTube":"Embed"}),Ae&&o.jsx("span",{className:"node-video-badge",children:((Ma=t.metadata)==null?void 0:Ma.MediaModel)||((ua=t.metadata)==null?void 0:ua.MediaProvider)||"Video"})]}):null,Oo=De.length>1||Me||Ae||sa?o.jsxs("div",{className:"node-surface-actions","data-testid":"node-surface-actions",children:[De.length>1&&o.jsx("div",{className:"node-image-stack-rail","aria-label":P("Image stack variants"),children:De.map((x,$)=>o.jsx("button",{type:"button",className:x.variantId===(ft==null?void 0:ft.variantId)?"is-active":"",title:x.title||x.caption||P(`Variant ${$+1}`),"aria-label":P(`Show image variant ${$+1}`),onPointerDown:de=>de.stopPropagation(),onClick:de=>zn(x.variantId,de),children:o.jsx(Mr,{src:x.imageUrl,traceId:`${t.id}:${x.variantId||$}`,kind:"image-stack-variant",testId:"node-image-stack-thumb"})},x.variantId||`${x.imageUrl}-${$}`))}),Me&&o.jsxs("div",{className:"node-embed-actions",children:[o.jsxs("button",{type:"button",title:P("Open embed"),"aria-label":P("Open embed"),onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),ht&&ue(t,"external")},children:[o.jsx(vn,{size:13}),o.jsx("span",{children:P("Open")})]}),o.jsxs("button",{type:"button",title:P("Copy URL"),"aria-label":P("Copy URL"),onPointerDown:x=>x.stopPropagation(),onClick:rt,children:[o.jsx(So,{size:13}),o.jsx("span",{children:P("Copy URL")})]})]}),Ae&&o.jsxs("div",{className:"node-video-actions",children:[o.jsxs("button",{type:"button",title:P("Play video"),"aria-label":P("Play video"),"data-testid":"node-video-play",onPointerDown:x=>x.stopPropagation(),onClick:da,children:[o.jsx(ya,{size:13}),o.jsx("span",{children:P("Play")})]}),o.jsxs("button",{type:"button",title:P("Pause video"),"aria-label":P("Pause video"),"data-testid":"node-video-pause",onPointerDown:x=>x.stopPropagation(),onClick:Bo,children:[o.jsx(jo,{size:13}),o.jsx("span",{children:P("Pause")})]})]}),sa&&o.jsxs("div",{className:"node-asset-actions",children:[t.kind==="pdf"&&o.jsxs("button",{type:"button",title:P("Preview PDF"),"data-testid":"node-pdf-preview",onPointerDown:x=>x.stopPropagation(),onClick:()=>ue(t,"preview"),children:[o.jsx(qp,{size:13}),o.jsx("span",{children:P("Preview")})]}),t.kind!=="directory"&&o.jsxs("button",{type:"button",title:P("Open in new tab"),onPointerDown:x=>x.stopPropagation(),onClick:()=>ue(t,"external"),children:[o.jsx(vn,{size:13}),o.jsx("span",{children:P("Open")})]}),t.kind==="directory"&&o.jsxs("button",{type:"button",title:P("Scan folder"),"data-testid":"directory-scan",onPointerDown:x=>x.stopPropagation(),onClick:()=>mt(t.id),children:[o.jsx(jn,{size:13}),o.jsx("span",{children:P("Scan")})]}),t.kind==="directory"&&o.jsxs("button",{type:"button",title:P("Folder scan settings"),"data-testid":"directory-settings-open",onPointerDown:x=>x.stopPropagation(),onClick:()=>oe(t.id),children:[o.jsx(ws,{size:13}),o.jsx("span",{children:P("Settings")})]})]})]}):null,$o=!se&&!Be?o.jsxs("div",{className:"node-external-action-rail","data-testid":"node-external-action-rail",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[Oo,o.jsx("div",{className:"node-external-rail__pins",children:null}),o.jsx("div",{className:"node-actions","data-testid":"node-actions",children:tn}),ze&&o.jsxs("div",{className:"node-agent-command-actions","data-testid":"node-agent-command-actions",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[o.jsx("button",{type:"button","data-testid":"node-agent-command-plan","data-agent-command-action":"plan",onClick:Hn,children:P("Plan")}),o.jsx("button",{type:"button","data-testid":"node-agent-command-execute","data-agent-command-action":"execute",disabled:pt==="Running",onClick:Gt,children:P("Execute")})]}),H&&o.jsxs("div",{className:"node-code-note-actions","data-testid":"node-code-note-actions",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[o.jsx("button",{type:"button","data-testid":"node-code-note-approve","data-code-note-action":"approve",onClick:x=>Ja(x,"Approved","Planned","approve-local"),children:P("Approve")}),o.jsx("button",{type:"button","data-testid":"node-code-note-review","data-code-note-action":"review",onClick:x=>Ja(x,"Reviewed","InSync","review-local"),children:P("Review")}),o.jsx("button",{type:"button","data-testid":"node-code-note-out-of-sync","data-code-note-action":"out-of-sync",onClick:x=>Ja(x,Ft,"OutOfSync","mark-out-of-sync-local"),children:P("Out of sync")})]}),t.companyMode&&o.jsxs("div",{className:"node-company-quick-actions","data-testid":"node-company-quick-actions","data-company-status":Yt||"Staged",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[o.jsx("button",{type:"button",title:P("Update Company goal from this note"),"aria-label":P("Update Company goal from this note"),"data-testid":"node-company-sync-goal",disabled:Un,onClick:()=>vt(t.id),children:o.jsx(bc,{size:12})}),o.jsx("button",{type:"button",title:P("Refresh Company status"),"aria-label":P("Refresh Company status"),"data-testid":"node-company-refresh",onClick:()=>nt(t.id),children:o.jsx(jn,{size:12})}),Un?o.jsx("button",{type:"button",title:P("Company is archived"),"aria-label":P("Company is archived"),"data-testid":"node-company-archived",disabled:!0,children:o.jsx(Gr,{size:12})}):Ws?o.jsx("button",{type:"button",title:P("Resume Company"),"aria-label":P("Resume Company"),"data-testid":"node-company-resume",onClick:()=>G(t.id,"Staged"),children:o.jsx(ya,{size:12})}):o.jsx("button",{type:"button",title:P("Pause Company"),"aria-label":P("Pause Company"),"data-testid":"node-company-pause",onClick:()=>G(t.id,"Paused"),children:o.jsx(jo,{size:12})}),!Un&&o.jsx("button",{type:"button",title:P("Archive Company"),"aria-label":P("Archive Company"),"data-testid":"node-company-archive",onClick:()=>G(t.id,"Archived"),children:o.jsx(Gr,{size:12})}),o.jsx("button",{type:"button",title:P("Remove Company from this note"),"aria-label":P("Remove Company from this note"),"data-testid":"node-company-remove",onClick:()=>X(t.id),children:o.jsx(Ot,{size:12})})]})]}):null,Ys=!se&&!Be?o.jsx("div",{className:"node-external-rail","data-testid":"node-external-rail",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:o.jsxs("div",{className:"node-external-rail__meta",children:[o.jsxs("div",{className:"node-tags","data-testid":"node-external-tags",children:[(t.tags??[t.kind]).slice(0,3).map(x=>o.jsx("span",{children:x},x)),t.status&&o.jsx("span",{className:`node-status node-status--${t.status}`,children:t.status})]}),fe,Po,ze&&o.jsxs("div",{className:"node-agent-command-state","data-testid":"node-agent-command-state","data-agent-command-status":pt,"data-agent-command-mode":gt,"data-agent-command-role":ot,"data-agent-command-adapter-state":((Fe=t.metadata)==null?void 0:Fe.AdapterState)||"adapter-gated",children:[o.jsx(Cn,{size:12}),o.jsx("strong",{children:"AC"}),o.jsx("span",{children:pt}),o.jsx("span",{children:gt}),o.jsx("span",{children:ot})]}),H&&o.jsxs("div",{className:"node-code-note-state","data-testid":"node-code-note-state","data-code-note-status":Ft,"data-code-note-sync-state":Ca,"data-code-note-kind":ka,"data-code-note-adapter-state":((_e=t.metadata)==null?void 0:_e.AdapterState)||"local-canvas-only",children:[o.jsx(kn,{size:12}),o.jsx("strong",{children:"CN"}),o.jsx("span",{children:Ft}),o.jsx("span",{children:Ca}),o.jsx("span",{children:ka})]}),t.companyMode&&o.jsxs("div",{className:"node-company-state","data-testid":"node-company-state",children:[o.jsx(ql,{size:12}),o.jsx("strong",{children:((Ta=t.metadata)==null?void 0:Ta.CompanyExecutionModeLabel)||"Company staged"}),o.jsx("span",{children:((Ra=t.metadata)==null?void 0:Ra.CompanySubAgents)==="false"?"single-agent":"sub-agents"})]})]})}):null;return o.jsxs("article",{className:`canvas-node canvas-node--${t.kind} ${se?"canvas-node--remote-surface":""} ${Mt?"canvas-node--remote-monitor-surface":""} ${Ie?"canvas-node--remote-control-surface":""} ${Nt?`canvas-node--automation-${Nt}`:""} ${ze?"canvas-node--agent-command":""} ${H?"canvas-node--code-note":""} ${n?"is-selected":""} ${d?"is-pulsing":""} ${Oe?"":"is-ai-disabled"} ${t.wordWrap===!1?"is-nowrap":""} ${Je?"is-collapsed":""} ${t.companyMode?`is-company-${t.companyMode}`:""}`,style:en,"data-node-id":t.id,"data-automation-node-kind":Nt||void 0,"data-automation-external-policy":((cn=t.metadata)==null?void 0:cn.AutomationExternalActionPolicy)||void 0,"data-media-generation-contract":((qn=t.metadata)==null?void 0:qn.MediaGenerationContract)||void 0,"data-agent-command-node":ze?"true":void 0,"data-agent-command-status":ze?pt:void 0,"data-agent-command-mode":ze?gt:void 0,"data-agent-command-role":ze?ot:void 0,"data-code-note-node":H?"true":void 0,"data-code-note-status":H?Ft:void 0,"data-code-note-sync-state":H?Ca:void 0,"data-code-note-kind":H?ka:void 0,"data-node-status":t.status||void 0,"data-selection-count":r,"data-node-chrome-suppressed":Be?"multi-selection":void 0,"data-remote-surface-chrome":se?"self-contained":void 0,"data-remote-surface-kind":Ei||void 0,"data-remote-surface-title-owner":se?"inner-remote-view":void 0,"data-remote-surface-scroll-owner":se?"remote-page-rail":void 0,onPointerDown:x=>{m(t.id,x.shiftKey||x.metaKey||x.ctrlKey),y(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(),mt(t.id))},children:[!se&&o.jsxs("div",{className:"node-header",children:[o.jsx("span",{className:"node-kind",children:o.jsx(No,{size:14})}),o.jsx("input",{value:t.title,"aria-label":P("Node title"),readOnly:xe,onPointerDown:x=>x.stopPropagation(),onChange:x=>{xe||b(t.id,{title:x.target.value})}}),t.status==="running"&&o.jsxs("span",{className:"node-run-state node-run-state--running","data-testid":"node-running-state",children:[o.jsx(jn,{size:12}),o.jsx("span",{children:"Running"})]})]}),Qe&&typeof document<"u"?Qm.createPortal(Qe,document.body):Qe,he&&$n&&Te&&o.jsx("div",{className:"node-memo-palette","data-testid":"node-memo-palette",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:ai.map(x=>o.jsx("button",{type:"button",className:x.key===Te.key?"is-active":"",title:P(`${x.label} memo color`),"aria-label":P(`${x.label} memo color`),"aria-pressed":x.key===Te.key,"data-memo-color":x.key,style:{"--memo-swatch":x.swatch,"--memo-swatch-ring":x.ring},onPointerDown:$=>$.stopPropagation(),onClick:$=>ja(x.key,$)},x.key))}),Sa?o.jsx("div",{className:`node-image-wrap ${De.length>1?"node-image-wrap--stack":""} ${zt?"node-image-wrap--mask":""}`,"data-testid":zt?"node-mask-preview":De.length>1?"node-image-stack":void 0,children:o.jsx(Mr,{src:Sa,traceId:t.id,kind:zt?"mask":"node-image",testId:"node-secure-image"})}):Mt?o.jsx(cp,{node:t,onPatch:b,onCreateRemoteControl:W}):Ie?o.jsx(up,{node:t,onPatch:b}):xe?o.jsx("div",{className:"node-template-card","data-testid":"node-template-card",children:me&&st?o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:"node-template-card__summary",children:[o.jsx("strong",{children:me.prompt||me.description}),o.jsx("span",{children:st.description||me.description})]}),o.jsx("div",{className:"node-template-card__options","data-testid":"node-template-card-options",children:me.options.map(x=>o.jsxs("button",{type:"button",className:x.id===st.id?"is-active":"","data-testid":"node-template-card-option","data-option-id":x.id,onPointerDown:$=>$.stopPropagation(),onClick:$=>Kt(x.id,$),children:[o.jsx("strong",{children:x.label}),o.jsx("span",{children:x.description})]},x.id||x.templateId))}),o.jsxs("div",{className:"node-template-card__inputs","data-testid":"node-template-card-inputs",children:[st.inputs.map(x=>o.jsx(If,{input:x,value:me.inputValues[x.key]??"",onChange:$=>Qa(x.key,$)},x.key)),st.inputs.length===0&&o.jsx("p",{className:"node-template-card__empty",children:me.noInputsLabel||"No inputs needed."})]}),bt&&o.jsx("div",{className:"node-template-card__validation",children:bt}),o.jsxs("button",{type:"button",className:"node-template-card__generate","data-testid":"node-template-card-generate",disabled:!!bt,onPointerDown:Wn,onClick:x=>x.stopPropagation(),children:[o.jsx(ya,{size:13}),o.jsx("span",{children:me.generateLabel||me.actionLabel||"Generate"})]})]}):o.jsx("div",{className:"node-template-card__missing",children:"Template card payload is unavailable."})}):Me?o.jsxs("div",{className:`node-embed-card ${Ht?"has-embed-thumbnail":"is-embed-link"}`,"data-testid":"node-embed-card",children:[o.jsx("div",{className:"node-embed-preview",children:Ht?o.jsx(Mr,{src:Ht,traceId:t.id,kind:"embed-thumbnail",testId:"node-embed-thumbnail"}):o.jsxs("div",{className:"node-embed-placeholder",children:[o.jsx(vn,{size:24}),o.jsx("strong",{children:Ln==="youtube"?"YouTube":"Web embed"}),o.jsx("span",{children:Pn||ht||"External link"})]})}),o.jsx("textarea",{value:t.body,"aria-label":P("Embed URL or description"),spellCheck:!1,onPointerDown:x=>x.stopPropagation(),onChange:x=>{const $=x.target.value;b(t.id,{body:$,assetUrl:$,metadata:{...t.metadata??{},sourceUrl:$,url:$}})}}),ht&&o.jsx("span",{className:"node-embed-source",title:ht,children:ht})]}):Ae?o.jsxs("div",{className:`node-video-card ${ke?"has-video-source":"is-video-prompt"}`,"data-testid":"node-video-card",children:[ke?o.jsx("video",{ref:qe,src:ke,className:"node-video-player","data-testid":"node-video-player",controls:!0,preload:"metadata",onPointerDown:x=>x.stopPropagation()}):o.jsxs("div",{className:"node-video-placeholder",children:[o.jsx(wn,{size:24}),o.jsx("strong",{children:"Video prompt"}),o.jsx("span",{children:((La=t.metadata)==null?void 0:La.MediaModel)||((un=t.metadata)==null?void 0:un.MediaProvider)||"Adapter gated"})]}),o.jsx("textarea",{value:t.body,"aria-label":P("Video prompt or source"),spellCheck:!1,onPointerDown:x=>x.stopPropagation(),onChange:x=>b(t.id,{body:x.target.value})}),ke&&o.jsx("span",{className:"node-video-source",title:Rn,children:Rn})]}):sa?o.jsxs("div",{className:`node-asset-card node-asset-card--${t.kind}`,"data-testid":"node-asset-card",children:[o.jsx("div",{className:"node-asset-icon",children:o.jsx(No,{size:28})}),o.jsxs("div",{className:"node-asset-copy",children:[o.jsx("strong",{title:Ga,children:Ga}),o.jsx("span",{children:t.kind==="directory"?"Directory reference":t.kind==="pdf"?"PDF document":"File reference"}),t.kind==="directory"&&(En||Ee||Rt||ia||Xa)&&o.jsxs("dl",{className:"node-asset-meta","data-testid":"node-directory-meta",children:[(Rt||ia)&&o.jsxs(o.Fragment,{children:[o.jsx("dt",{children:"Scanned"}),o.jsxs("dd",{children:[Number(Rt??0).toLocaleString()," files / ",Number(ia??0).toLocaleString()," folders"]})]}),En&&o.jsxs(o.Fragment,{children:[o.jsx("dt",{children:"Include"}),o.jsx("dd",{children:En})]}),Ee&&o.jsxs(o.Fragment,{children:[o.jsx("dt",{children:"Exclude"}),o.jsx("dd",{children:Ee})]}),Xa&&o.jsxs(o.Fragment,{children:[o.jsx("dt",{children:"Updated"}),o.jsx("dd",{children:new Date(Xa).toLocaleString()})]})]})]})]}):Ya?o.jsxs("div",{className:"node-csv-card","data-testid":"node-csv-card",children:[o.jsx(Af,{preview:wa,sort:Ze,appLanguage:It,onSort:x=>{const $=(Ze==null?void 0:Ze.columnIndex)===x&&Ze.direction==="asc"?"desc":"asc";Fn({columnIndex:x,direction:$}),f.emit("node.csvTable.sort",{id:t.id,columnIndex:x,direction:$})}}),o.jsx("textarea",{value:t.body,"aria-label":P("CSV source"),spellCheck:!1,wrap:"off",onPointerDown:x=>x.stopPropagation(),onChange:x=>b(t.id,{body:x.target.value})})]}):Mo?o.jsxs("div",{className:"node-markdown-card","data-testid":"node-markdown-card",children:[o.jsx("div",{className:"node-markdown-preview mindcanvas-text-scrollable-view","data-testid":"node-markdown-preview","aria-label":P("Markdown preview"),children:o.jsx(Lf,{value:t.body})}),o.jsx("textarea",{value:t.body,"aria-label":P("Markdown source"),spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:x=>x.stopPropagation(),onChange:x=>b(t.id,{body:x.target.value})})]}):o.jsx(o.Fragment,{children:o.jsx("textarea",{value:t.body,"aria-label":P("Node body"),spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:x=>x.stopPropagation(),onChange:x=>b(t.id,{body:x.target.value})})}),Ys,$o,Ne,o.jsx("button",{type:"button",className:"node-resize-handle",title:P("Resize node"),"aria-label":P("Resize node"),onPointerDown:x=>p(t.id,x)})]})});function If({input:e,value:t,onChange:n}){return o.jsxs("label",{className:"node-template-card__field",children:[o.jsxs("span",{children:[o.jsx("strong",{children:e.label}),e.description&&o.jsx("small",{children:e.description})]}),e.type==="textarea"?o.jsx("textarea",{value:t,placeholder:e.placeholder,onPointerDown:r=>r.stopPropagation(),onChange:r=>n(r.target.value)}):e.type==="select"?o.jsx("select",{value:t,onPointerDown:r=>r.stopPropagation(),onChange:r=>n(r.target.value),children:(e.options??[]).map(r=>o.jsx("option",{value:r.value,children:r.label},r.value))}):o.jsx("input",{type:"text",value:t,placeholder:e.placeholder,onPointerDown:r=>r.stopPropagation(),onChange:r=>n(r.target.value)})]})}function Nf(e){const r=Math.min(430,window.innerHeight-24),d=Math.max(12,window.innerWidth-332-12),c=Math.min(Math.max(e.right-332,12),d),m=e.bottom+8,y=e.top-r-8,p=Math.max(12,window.innerHeight-r-12),b=m<=p?m:Math.max(12,y);return{left:c,top:Math.min(b,p)}}function Af({preview:e,sort:t,appLanguage:n,onSort:r}){const d=c=>fi(n,c);return!e||e.headers.length===0?o.jsx("div",{className:"csv-table-scroll mindcanvas-text-scrollable-view","data-testid":"csv-table-preview","aria-label":d("CSV table preview"),children:o.jsx("p",{className:"node-md-empty",children:"Paste CSV source to preview a table."})}):o.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":d("CSV table preview"),onPointerDown:c=>c.stopPropagation(),children:[o.jsxs("table",{className:"csv-table",children:[o.jsx("thead",{children:o.jsx("tr",{children:e.headers.map((c,m)=>{const y=(t==null?void 0:t.columnIndex)===m,p=y&&t.direction==="asc"?"descending":"ascending";return o.jsx("th",{"aria-sort":y?t.direction==="asc"?"ascending":"descending":"none",children:o.jsxs("button",{type:"button",className:`csv-table-header-button ${y?"is-active":""}`,"data-testid":`csv-table-sort-${m}`,"aria-label":`Sort CSV by ${c||`Column ${m+1}`} ${p}`,onClick:()=>r(m),children:[o.jsx("span",{children:c||`Column ${m+1}`}),y&&o.jsx("small",{children:t.direction==="asc"?"Asc":"Desc"})]})},`${c}-${m}`)})})}),o.jsx("tbody",{children:e.rows.map((c,m)=>o.jsx("tr",{children:e.headers.map((y,p)=>o.jsx("td",{className:"csv-table-cell",children:c[p]??""},`csv-cell-${m}-${p}`))},`csv-row-${m}`))})]}),o.jsxs("div",{className:"csv-table-status",children:[o.jsxs("span",{children:[e.totalRows.toLocaleString()," rows"]}),o.jsxs("span",{children:[e.columnCount.toLocaleString()," columns"]}),e.truncated&&o.jsxs("span",{children:["showing ",e.renderedRows.toLocaleString()]})]})]})}function Mf(e,t){const n=Tf(e,xd+1);if(n.length===0)return null;const r=Math.min(bf,Math.max(...n.map(p=>p.length),1)),d=Cd(n[0],r).map((p,b)=>p.trim()||`Column ${b+1}`),c=n.slice(1,xd+1).map(p=>Cd(p,r)),m=t?[...c].sort((p,b)=>Rf(p[t.columnIndex]??"",b[t.columnIndex]??"",t.direction)):c,y=Math.max(0,String(e||"").split(/\r\n|\n|\r/).filter(p=>p.length>0).length-1);return{headers:d,rows:m,totalRows:y,columnCount:r,renderedRows:m.length,truncated:y>m.length}}function Tf(e,t){const n=[];let r=[],d="",c=!1;const m=String(e||"").replace(/\r\n/g,`
|
|
5
|
-
`).replace(/\r/g,`
|
|
6
|
-
`);for(let y=0;y<m.length;y+=1){const p=m[y],b=m[y+1];if(p==='"'){c&&b==='"'?(d+='"',y+=1):c=!c;continue}if(p===","&&!c){r.push(d),d="";continue}if(p===`
|
|
7
|
-
`&&!c){if(r.push(d),r.some(w=>w.trim().length>0)&&n.push(r),r=[],d="",n.length>=t)break;continue}d+=p}return n.length<t&&(d.length>0||r.length>0)&&(r.push(d),r.some(y=>y.trim().length>0)&&n.push(r)),n}function Cd(e,t){return Array.from({length:t},(n,r)=>String(e[r]??"").trim())}function Rf(e,t,n){const r=Number(e.replace(/,/g,"")),d=Number(t.replace(/,/g,"")),m=Number.isFinite(r)&&Number.isFinite(d)&&e.trim()!==""&&t.trim()!==""?r-d:e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"});return n==="asc"?m:-m}function Lf({value:e}){const t=Pf(e);return t.length===0?o.jsx("p",{className:"node-md-empty",children:"Nothing to preview yet."}):o.jsx(o.Fragment,{children:t.map((n,r)=>{const d=`${n.kind}-${r}-${n.text}`;switch(n.kind){case"heading":return o.jsx("strong",{className:`node-md-heading node-md-heading--${n.level}`,children:n.text},d);case"quote":return o.jsx("blockquote",{className:"node-md-quote",children:n.text},d);case"list":return o.jsxs("div",{className:"node-md-list-item",children:[o.jsx("span",{"aria-hidden":"true",children:"-"}),o.jsx("p",{children:n.text})]},d);case"code":return o.jsx("code",{className:"node-md-code",children:n.text},d);case"table":return o.jsx("p",{className:"node-md-table-row",children:n.text},d);default:return o.jsx("p",{children:n.text},d)}})})}function Pf(e){const t=[];for(const n of String(e||"").replace(/\r\n/g,`
|
|
8
|
-
`).split(`
|
|
9
|
-
`)){const r=n.trim();if(!r)continue;const d=/^(#{1,6})\s+(.+)$/.exec(r);if(d?t.push({kind:"heading",level:d[1].length,text:ps(d[2])}):/^>\s?/.test(r)?t.push({kind:"quote",text:ps(r.replace(/^>\s?/,""))}):/^([-*+]|\d+\.)\s+/.test(r)?t.push({kind:"list",text:ps(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:ps(r)}),t.length>=12)break}return t}function ps(e){return e.replace(/!\[([^\]]*)\]\([^)]+\)/g,"$1").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/(\*\*|__)(.*?)\1/g,"$2").replace(/(\*|_)(.*?)\1/g,"$2").replace(/`([^`]+)`/g,"$1").trim()}function Ef(e){var n,r;const t=String(((n=e.metadata)==null?void 0:n.memoColor)||((r=e.metadata)==null?void 0:r.MemoColor)||"coral").toLowerCase();return ai.find(d=>d.key===t)??ai[0]}function _f(e){return Uc(e)}function Kc(e){return String(e.assetUrl||e.sourceFilePath||e.body||"").trim()}function Bf(e){const t=Kc(e);if(!t)return"";const n=t.toLowerCase();return n.startsWith("blob:")||n.startsWith("data:video/")||/^https?:\/\//i.test(t)&&/\.(mp4|webm|ogg|ogv|mov|m4v)(?:[?#].*)?$/i.test(t)?t:""}function Df(e){var t,n,r,d,c,m;return String(((t=e.metadata)==null?void 0:t.sourceUrl)||((n=e.metadata)==null?void 0:n.SourceUrl)||((r=e.metadata)==null?void 0:r.url)||((d=e.metadata)==null?void 0:d.Url)||((c=e.metadata)==null?void 0:c.embedUrl)||((m=e.metadata)==null?void 0:m.EmbedUrl)||e.assetUrl||e.sourceFilePath||e.body||"").trim()}function Of(e){var t,n;return String(((t=e.metadata)==null?void 0:t.embedType)||((n=e.metadata)==null?void 0:n.EmbedType)||"").trim().toLowerCase()}function $f(e,t){var r,d;const n=String(((r=e.metadata)==null?void 0:r.domain)||((d=e.metadata)==null?void 0:d.Domain)||"").trim();if(n)return n;try{return new URL(t).hostname.replace(/^www\./,"")}catch{return""}}function Ff(e){return Fc(e)}function kd(e){const t=e.indexOf(":");return t>0?e.slice(0,t):"relative"}function gs({value:e,options:t,onChange:n,ariaLabel:r,className:d="",menuClassName:c="",disabled:m=!1,emptyLabel:y="Select",testId:p}){const[b,w]=g.useState(!1),_=g.useRef(null),N=t.find(O=>O.value.toLowerCase()===e.toLowerCase()),D=(N==null?void 0:N.label)||e||y;return g.useEffect(()=>{if(!b)return;const O=U=>{var Y;const V=U.target instanceof Node?U.target:null;V&&((Y=_.current)!=null&&Y.contains(V))||w(!1)},z=U=>{U.key==="Escape"&&w(!1)};return document.addEventListener("pointerdown",O,!0),document.addEventListener("keydown",z,!0),()=>{document.removeEventListener("pointerdown",O,!0),document.removeEventListener("keydown",z,!0)}},[b]),o.jsxs("div",{ref:_,className:`catalog-pill ${d}`,"data-open":b?"true":"false",children:[o.jsxs("button",{type:"button",className:"catalog-pill__button","aria-haspopup":"listbox","aria-expanded":b,"aria-label":r,title:(N==null?void 0:N.title)||D,disabled:m,"data-testid":p,onClick:()=>{m||w(O=>!O)},children:[o.jsxs("span",{className:"catalog-pill__content",children:[(N==null?void 0:N.groupLabel)&&o.jsx("span",{className:"catalog-pill__provider",children:N.groupLabel}),(N==null?void 0:N.showAspectIcon)&&o.jsx(Sd,{option:N,compact:!0}),o.jsx("span",{className:"catalog-pill__label",children:D})]}),(N==null?void 0:N.trailingLabel)&&o.jsx("span",{className:"catalog-pill__trailing",children:N.trailingLabel}),o.jsx("span",{className:"catalog-pill__chevron",children:o.jsx(yc,{size:15})})]}),b&&!m&&o.jsx("div",{className:`catalog-pill__menu ${c}`,role:"listbox","aria-label":r,children:o.jsx("div",{className:"catalog-pill__scroll",children:t.map(O=>{var U;const z=O.value.toLowerCase()===e.toLowerCase();return o.jsxs("div",{children:[O.showGroupHeader&&o.jsxs("div",{className:`catalog-pill__group ${O.showSeparatorBefore?"catalog-pill__group--separated":""}`,children:[o.jsx("span",{children:O.groupLabel||O.groupKey||"Other"}),o.jsx("i",{})]}),o.jsxs("button",{type:"button",className:`catalog-pill__option ${z?"is-selected":""}`,role:"option","aria-selected":z,title:O.title||O.label,onClick:()=>{w(!1),O.value!==e&&n(O.value)},children:[o.jsxs("span",{className:"catalog-pill__option-main",children:[o.jsxs("span",{className:"catalog-pill__option-title",children:[O.showAspectIcon&&o.jsx(Sd,{option:O}),o.jsx("span",{children:O.label})]}),(O.detail||O.badges&&O.badges.length>0)&&o.jsxs("span",{className:"catalog-pill__option-detail",children:[O.detail&&o.jsx("span",{children:O.detail}),(U=O.badges)==null?void 0:U.map(V=>o.jsx("em",{children:V},V))]})]}),O.trailingLabel&&o.jsx("span",{className:"catalog-pill__option-trailing",children:O.trailingLabel})]})]},`${O.groupKey||"group"}:${O.value}`)})})})]})}function Sd({option:e,compact:t=!1}){const n=Math.max(1,e.aspectIconWidth??1),r=Math.max(1,e.aspectIconHeight??1),d=t?22:26,c=t?16:18,m=Math.min(d/n,c/r),y=Math.max(9,Math.round(n*m)),p=Math.max(9,Math.round(r*m));return o.jsx("span",{className:"catalog-pill__aspect","aria-hidden":"true",children:o.jsx("span",{style:{width:y,height:p}})})}function Uf(e){var t;return((t=e.metadata)==null?void 0:t.CompanyStatus)||e.status||(e.companyMode?"Staged":"Ready")}function zf(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 ni(e){var t;return(e.result||e.body||((t=e.metadata)==null?void 0:t.CompanyLastMessage)||"").trim()||"No local artifact content yet."}function hs(e,t){const n=t.edges.filter(c=>c.to===e.id).map(c=>{var m;return(m=t.nodes.find(y=>y.id===c.from))==null?void 0:m.title}).filter(Boolean),r=t.edges.filter(c=>c.from===e.id).map(c=>{var m;return(m=t.nodes.find(y=>y.id===c.to))==null?void 0:m.title}).filter(Boolean),d=Uf(e);return{id:e.id,title:e.title,type:e.kind,subtitle:ni(e).slice(0,160),status:d,progress:zf(d),incoming:n,outgoing:r}}function Hf(e,t){const n=new Set(t.edges.filter(b=>b.from===e.id||b.to===e.id).flatMap(b=>[b.from,b.to]).filter(b=>b!==e.id)),r=t.nodes.filter(b=>n.has(b.id)),d=t.nodes.filter(b=>{var w;return b.id!==e.id&&(b.companyMode||((w=b.tags)==null?void 0:w.some(_=>_.toLowerCase().includes("company"))))}),c=[...r,...d].filter((b,w,_)=>_.findIndex(N=>N.id===b.id)===w),m=c.filter(b=>b.kind!=="ai-task"&&!b.result).slice(0,6),y=c.filter(b=>b.kind==="ai-task").slice(0,6),p=c.filter(b=>b.result||b.kind!=="ai-task").slice(0,6);return[{key:"root",label:"Root",nodes:[hs(e,t)]},{key:"context",label:"Context",nodes:m.map(b=>hs(b,t))},{key:"tasks",label:"Missions",nodes:y.map(b=>hs(b,t))},{key:"artifacts",label:"Artifacts",nodes:p.map(b=>hs(b,t))}].map(b=>({...b,nodes:b.nodes.length>0?b.nodes:[Wf(b.key)]}))}function Wf(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 Vf(e,t){const n=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 c;return d.id===e.id||n.has(d.id)||((c=d.tags)==null?void 0:c.includes("Company follow-up"))}).filter(d=>ni(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:ni(d),sourceNodeId:d.id}))}function Yf({board:e,rootNode:t,onClose:n,onStatus:r,onRemove:d,onSubmitFollowUp:c,onApproval:m,onAddArtifact:y}){var ye,We,vt,nt,G;const[p,b]=g.useState(""),[w,_]=g.useState(null),N=g.useMemo(()=>Hf(t,e),[e,t]),D=g.useMemo(()=>Vf(t,e),[e,t]),O=D.find(X=>X.id===w)??D[0]??null,z=((ye=t.metadata)==null?void 0:ye.CompanyStatus)||"Staged",U=((We=t.metadata)==null?void 0:We.CompanyExecutionModeLabel)||"Auto / General",V=((vt=t.metadata)==null?void 0:vt.CompanySubAgents)==="false"?"single-agent":"sub-agents",Y=((nt=t.metadata)==null?void 0:nt.CompanyApprovalStatus)||"Pending",ce=!["Approved","Rejected"].includes(Y),le=e.nodes.filter(X=>{var ue;return X.kind==="ai-task"&&(((ue=X.tags)==null?void 0:ue.includes("Company follow-up"))||N.some(oe=>oe.nodes.some(mt=>mt.id===X.id)))}).length,Pe=()=>{const X=p.trim();X&&(b(""),c(t.id,X))};return o.jsx("div",{className:"company-focus-backdrop","data-testid":"company-graph-focus",onMouseDown:n,children:o.jsxs("section",{className:"company-focus-dialog","aria-label":"Company graph focus","data-disable-mindcanvas-hotkeys":"true",onMouseDown:X=>X.stopPropagation(),children:[o.jsxs("header",{className:"company-focus-head",children:[o.jsx("button",{type:"button",title:"Back to Canvas",onClick:n,children:o.jsx(Jp,{size:16})}),o.jsxs("div",{children:[o.jsx("span",{children:"Company Graph Focus"}),o.jsx("strong",{children:t.title}),o.jsx("small",{children:t.body||((G=t.metadata)==null?void 0:G.CompanyLastMessage)||"Local company root staged from MindCanvas."})]}),o.jsxs("div",{className:"company-focus-head__actions",children:[o.jsx("span",{children:z}),o.jsx("span",{children:U}),o.jsxs("span",{children:[o.jsx(gc,{size:12}),V]}),z==="Paused"?o.jsxs("button",{type:"button",onClick:()=>r(t.id,"Staged"),children:[o.jsx(ya,{size:13}),"Resume"]}):o.jsxs("button",{type:"button",onClick:()=>r(t.id,"Paused"),children:[o.jsx(jo,{size:13}),"Pause"]}),o.jsxs("button",{type:"button",onClick:()=>r(t.id,"Archived"),children:[o.jsx(Gr,{size:13}),"Archive"]}),o.jsxs("button",{type:"button",className:"is-danger",onClick:()=>d(t.id),children:[o.jsx(Ps,{size:13}),"Remove"]})]})]}),o.jsxs("div",{className:"company-focus-main",children:[o.jsxs("main",{children:[o.jsxs("div",{className:"company-focus-metrics",children:[o.jsx(fs,{label:"Missions",value:le||1,tone:"blue"}),o.jsx(fs,{label:"Population",value:V==="sub-agents"?4:1,tone:"slate"}),o.jsx(fs,{label:"Approvals",value:ce?1:0,tone:"amber"}),o.jsx(fs,{label:"Artifacts",value:D.length,tone:"teal"})]}),o.jsxs("section",{className:"company-focus-graph",children:[o.jsxs("div",{className:"company-focus-section-head",children:[o.jsxs("div",{children:[o.jsx(Zp,{size:15}),o.jsx("strong",{children:"Virtual Flow Graph"})]}),o.jsxs("span",{children:[e.edges.length," board edges"]})]}),o.jsx("div",{className:"company-focus-lanes",children:N.map(X=>o.jsxs("section",{className:"company-focus-lane",children:[o.jsxs("header",{children:[o.jsx("strong",{children:X.label}),o.jsxs("span",{children:[X.nodes.filter(ue=>ue.type!=="empty").length," nodes"]})]}),o.jsx("div",{className:"company-focus-node-list",children:X.nodes.map(ue=>o.jsxs("article",{className:`company-focus-node ${ue.type==="empty"?"is-empty":""}`,children:[o.jsxs("div",{children:[o.jsx("span",{children:ue.type}),o.jsx("b",{children:ue.status})]}),o.jsx("strong",{children:ue.title}),o.jsx("p",{children:ue.subtitle}),o.jsx("div",{className:"company-focus-progress",children:o.jsx("i",{style:{width:`${Math.round(ue.progress*100)}%`}})}),ue.incoming.length>0&&o.jsxs("small",{children:["From: ",ue.incoming.slice(0,2).join(", ")]}),ue.outgoing.length>0&&o.jsxs("small",{children:["Next: ",ue.outgoing.slice(0,2).join(", ")]})]},ue.id))})]},X.key))})]})]}),o.jsxs("aside",{className:"company-focus-side",children:[o.jsxs("section",{children:[o.jsx("div",{className:"company-focus-section-head",children:o.jsxs("div",{children:[o.jsx(bc,{size:15}),o.jsx("strong",{children:"Next Task"})]})}),o.jsx("p",{children:"Stage a follow-up AI Task from this company root. It stays local until an adapter runs it."}),o.jsx("textarea",{value:p,onChange:X=>b(X.target.value),placeholder:"Generate the next practical revenue validation task."}),o.jsxs("button",{type:"button",className:"company-focus-primary",disabled:!p.trim(),onClick:Pe,children:[o.jsx(Qp,{size:13}),"Stage Task"]})]}),o.jsxs("section",{children:[o.jsxs("div",{className:"company-focus-section-head",children:[o.jsxs("div",{children:[o.jsx(Zl,{size:15}),o.jsx("strong",{children:"Approvals"})]}),o.jsx("span",{children:Y})]}),o.jsxs("article",{className:`company-focus-approval company-focus-approval--${Y.toLowerCase()}`,children:[o.jsx("span",{children:U}),o.jsx("strong",{children:"Run staged company work locally"}),o.jsx("p",{children:"External execution, publishing, money movement, and destructive tool calls remain blocked until an adapter confirms them."}),ce&&o.jsxs("div",{children:[o.jsxs("button",{type:"button",onClick:()=>m(t.id,"Approved"),children:[o.jsx(Zl,{size:13}),"Approve locally"]}),o.jsxs("button",{type:"button",onClick:()=>m(t.id,"Rejected"),children:[o.jsx(eg,{size:13}),"Reject"]})]})]})]}),o.jsxs("section",{children:[o.jsxs("div",{className:"company-focus-section-head",children:[o.jsxs("div",{children:[o.jsx(St,{size:15}),o.jsx("strong",{children:"Artifacts"})]}),o.jsx("span",{children:D.length})]}),o.jsx("div",{className:"company-focus-artifacts",children:D.map(X=>o.jsxs("button",{type:"button",className:(O==null?void 0:O.id)===X.id?"is-selected":"",onClick:()=>_(X.id),children:[o.jsx("span",{children:X.type}),o.jsx("strong",{children:X.title})]},X.id))}),O&&o.jsxs("div",{className:"company-focus-preview",children:[o.jsx("span",{children:O.type}),o.jsx("strong",{children:O.title}),o.jsx("pre",{children:O.content}),o.jsxs("button",{type:"button",onClick:()=>y(t.id,O),children:[o.jsx(Co,{size:13}),"Add to Canvas"]})]})]})]})]})]})})}function fs({label:e,value:t,tone:n}){return o.jsxs("article",{className:`company-focus-metric company-focus-metric--${n}`,children:[o.jsx("span",{children:e}),o.jsx("strong",{children:t})]})}function Gf({url:e,fileName:t,onClose:n}){return o.jsx("div",{className:"pdf-viewer-backdrop","data-testid":"pdf-viewer-dialog",onMouseDown:n,children:o.jsxs("section",{className:"pdf-viewer-dialog","aria-label":"PDF viewer",onMouseDown:r=>r.stopPropagation(),children:[o.jsxs("header",{className:"pdf-viewer-head",children:[o.jsxs("div",{children:[o.jsx("span",{children:"PDF Viewer"}),o.jsx("strong",{title:t,children:t})]}),o.jsxs("div",{className:"pdf-viewer-actions",children:[o.jsx("button",{type:"button",title:"Open PDF in new tab","data-testid":"pdf-viewer-open-external",onClick:()=>window.open(e,"_blank","noopener,noreferrer"),children:o.jsx(vn,{size:16})}),o.jsx("button",{type:"button",title:"Close PDF viewer","data-testid":"pdf-viewer-close",onClick:n,children:o.jsx(Ot,{size:16})})]})]}),o.jsx("iframe",{src:e,title:t,className:"pdf-viewer-frame","data-testid":"pdf-viewer-frame"})]})})}const vs=.28,js=2.8,Kf=96,Xf=140,Is=188,Ns=126,xn=10,qf=720,Jf=.8,Fa={x:540,y:210,scale:1},wd=8,Xc=["dot","line","particles","spirit"],ba="n",Rr=["0","1","2","3","4","5","6","7","8","9"],oa=24,vd=900,Zf=3e3,jd="mindexec-react-project-gallery-startup-v1",qc="mindexec-react-function-toolbar-mode-v1",Jc="mindexec-react-project-workspace-history-v1",Zc=5,As="__MINDEXEC_REACT_NODES__",bs=34,Id=30,hn=1280,fn=960,Qf=154,oi=4e4,eb=50,Bs=100,Qc=50*1024,Lr=Qc,Pr=12e4,Nd=64*1024,tb=5e3,Ni=2500,Nn=36,si="Select a LocalBridge directory",eu="mindexec.react.templateStudioDraft.v1.",Ai="BusinessAutomationNode",ab="MindCanvasAgent",nb="CodeNote";function ob(){return pc(Ss())}const sb=["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(`
|
|
10
|
-
`),Mi={"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(`
|
|
11
|
-
`),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(`
|
|
12
|
-
`),tag:"Video Spec",toolHint:"Media.VideoPrompt",outputType:"video-prompt",width:420,height:236}},rb=["Objective:","","Constraints:","","Expected output:"].join(`
|
|
13
|
-
`),ib=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 Ad(e,t){try{const n=window.localStorage.getItem(`${eu}${e}`);if(!n)return ks(t);const r=JSON.parse(n);return{...ks(t),...r,templateId:yo(r.templateId||r.templateTitle||t)}}catch{return ks(t)}}function Md(e,t){window.localStorage.setItem(`${eu}${e}`,JSON.stringify(t))}function Td(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 Ds(e){return String(e||"").split(",").map(t=>t.trim().toLowerCase()).filter(Boolean)}function tu(e,t,n){const r=e.toLowerCase(),d=t.toLowerCase();return n.some(c=>r.includes(c)||d.includes(c))}function au(e,t){if(t.length===0)return!0;const n=e.toLowerCase(),r=n.includes(".")?`.${n.split(".").pop()??""}`:"";return t.some(d=>d.startsWith(".")?d===r:n.includes(d))}async function lb(e,t){const n=Ds(t==null?void 0:t.Include),r=Ds(t==null?void 0:t.Exclude),d=[];let c=0,m=0,y=0,p=!1;async function b(w,_=""){for await(const N of w.values()){if(y>=Ni){p=!0;return}const D=_?`${_}/${N.name}`:N.name;if(!tu(D,N.name,r)){if(N.kind==="file"){if(!au(N.name,n))continue;c+=1,y+=1,d.length<Nn&&d.push({name:N.name,path:D,kind:"file"});continue}if(N.kind==="directory"&&(m+=1,y+=1,d.length<Nn&&d.push({name:N.name,path:D,kind:"directory"}),await b(N,D),p))return}}}return await b(e),{fileCount:c,directoryCount:m,preview:d,truncated:p}}function An(e){return typeof e=="string"?e.trim():""}function db(e){return!e||e===si?!1:!/^(https?:|data:|blob:|file:)/i.test(e)}function cb(e){var d;const t=An((d=e.metadata)==null?void 0:d.DirectoryPath),n=An(e.sourceFilePath),r=t||n;return db(r)?r:""}function ub(e,t){const n=An(t.path);if(n)return n;const r=An(t.name);if(!e)return r;const d=e.includes("\\")?"\\":"/";return`${e.replace(/[\\/]+$/,"")}${d}${r}`}async function mb(e,t,n,r){const d=Ds(t==null?void 0:t.Include),c=Ds(t==null?void 0:t.Exclude),m=[],y=[{bridgePath:e,relativePath:""}];let p=0,b=0,w=0,_=!1;for(;y.length>0;){const N=y.shift();if(!N)break;const D=await Lp(N.bridgePath,n,r),O=Array.isArray(D.items)?D.items:[];for(const z of O){if(w>=Ni){_=!0;break}const U=An(z.name);if(!U)continue;const V=N.relativePath?`${N.relativePath}/${U}`:U;if(tu(V,U,c))continue;const Y=z.isDirectory===!0,ce=z.isFile===!0||z.isDirectory!==!0;if(Y){b+=1,w+=1,m.length<Nn&&m.push({name:U,path:V,kind:"directory"}),y.push({bridgePath:ub(N.bridgePath,z),relativePath:V});continue}if(ce){if(!au(U,d))continue;p+=1,w+=1,m.length<Nn&&m.push({name:U,path:V,kind:"file"})}}if(_)break}return{fileCount:p,directoryCount:b,preview:m,truncated:_}}function Rd(e,t){const n=t.preview.map(r=>`${r.kind==="directory"?"dir":"file"}:${r.path}`).join(`
|
|
14
|
-
`);return[`Directory: ${e}`,`Files: ${t.fileCount}`,`Folders: ${t.directoryCount}`,t.truncated?`Preview capped at ${Ni} entries.`:"Scan completed.","",n||"(empty or filtered)"].join(`
|
|
15
|
-
`)}const pb=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"]),gb=new Set(["csv","log","md","markdown","rtf","text","txt"]);function Ld(e){const t=e;return Number.isFinite(t==null?void 0:t.x)&&Number.isFinite(t==null?void 0:t.y)}function ri(e){return e==="top"||e==="right"||e==="bottom"||e==="left"}function hb(e){switch(e){case"top":return"bottom";case"right":return"left";case"bottom":return"top";case"left":return"right";default:return"left"}}function Pd(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 $t(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 fb(e,t){const n=[{side:"top",point:$t(e,"top")},{side:"right",point:$t(e,"right")},{side:"bottom",point:$t(e,"bottom")},{side:"left",point:$t(e,"left")}];let r=n[0],d=Number.POSITIVE_INFINITY;for(const c of n){const m=c.point.x-t.x,y=c.point.y-t.y,p=m*m+y*y;p<d&&(r=c,d=p)}return r.side}function bb(e,t){return e.x>=t.x&&e.x<=t.x+t.width&&e.y>=t.y&&e.y<=t.y+t.height}function Ed(e,t,n,r){const d=Math.hypot(n.x-e.x,n.y-e.y),c=ge(d*.38,54,220),m=Pd(t),y=Pd(r);return[`M ${e.x} ${e.y}`,`C ${e.x+m.x*c} ${e.y+m.y*c},`,`${n.x+y.x*c} ${n.y+y.y*c},`,`${n.x} ${n.y}`].join(" ")}function Er(e){var r,d;const t=Number((r=e.viewState)==null?void 0:r.cursorX),n=Number((d=e.viewState)==null?void 0:d.cursorY);return Number.isFinite(t)&&Number.isFinite(n)?{x:t,y:n}:null}function Ua(e,t){return{...e,viewState:{...e.viewState??{},cursorX:t.x,cursorY:t.y}}}function yb(e,t){return t?{x:Math.round(e.x/oa)*oa,y:Math.round(e.y/oa)*oa}:e}function Q(e){return`${e}-${Math.random().toString(36).slice(2,9)}`}function xb(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 ge(e,t,n){return Math.min(n,Math.max(t,e))}const Cb=112,kb=80;function _d(e,t){const n=t/2,r=Cb+e/2,d=Math.max(r,t-kb);return ge(Math.max(n,r),0,d)}function _r(e){return{x:e.x+e.width/2,y:e.y+e.height/2}}function ii(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 fo(e){return!!(e&&!["image","video","pdf","file","directory","remote-monitor","remote-control"].includes(e.kind))}function za(e){var t,n;return!!(e&&(e.kind==="remote-monitor"||((t=e.metadata)==null?void 0:t.SemanticType)==="RemoteFleetMonitor"||((n=e.metadata)==null?void 0:n.RemoteFleetNodeRole)==="fleet-monitor"))}function Sb(e){return e.isExpanded===!1&&Number(e.originalHeight??0)>e.height+1}function wb(e){return ji(e)}function vb(e){return Uc(e)}function ko(e){var n;const t=(((n=e.imageStack)==null?void 0:n.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 Bd(e,t,n,r){let d=e.variantId||Q("image-variant");for(;n.has(d);)d=Q("image-variant");return n.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 jb(e){return[e.title,"",e.result?`Result:
|
|
16
|
-
${e.result}`:e.body,e.imageUrl?`
|
|
17
|
-
Image: ${e.imageUrl}`:"",e.assetUrl?`
|
|
18
|
-
Asset: ${e.assetUrl}`:"",e.sourceFilePath?`
|
|
19
|
-
Source: ${e.sourceFilePath}`:""].filter(Boolean).join(`
|
|
20
|
-
`)}function Ib(e){if(e.kind!=="image")return"";const t=ko(e).find(n=>{var r;return n.variantId===((r=e.imageStack)==null?void 0:r.activeVariantId)});return String((t==null?void 0:t.imageUrl)||ji(e)).trim()}async function Nb(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 xo(e),"text"}function Br(e){var r;const n=(e.result||e.body||"").split(/\r?\n/).reduce((d,c)=>d+Math.max(1,Math.ceil(c.length/54)),0);return ge(112+n*21+((r=e.tags)!=null&&r.length?28:0),150,620)}function Ab(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:hn,maxHeight:fn};case"image":return{minWidth:220,minHeight:160,maxWidth:hn,maxHeight:fn};case"pdf":case"file":case"directory":return{minWidth:240,minHeight:128,maxWidth:860,maxHeight:720};case"code":return{minWidth:260,minHeight:160,maxWidth:hn,maxHeight:fn};case"csv-table":return{minWidth:320,minHeight:180,maxWidth:hn,maxHeight:fn};case"ai-task":return{minWidth:260,minHeight:154,maxWidth:hn,maxHeight:fn};default:return{minWidth:220,minHeight:132,maxWidth:hn,maxHeight:fn}}}function at(e){return String(e||"").trim()||"Untitled"}const nu="Multi Desktop Monitor";function Dd(e){return at(e).toLowerCase()===nu.toLowerCase()}function Mb(e,t,n){const r=at(e.name);return!n||!Dd(r)?r:t.nodes.some(c=>za(c)&&Dd(c.title||nu))?"MindCanvas":r}function xa(e){return typeof e=="object"&&e!==null}function li(e){const t=e.toLowerCase(),n=t.lastIndexOf(".");return n>=0?t.slice(n+1):""}function Tb(e){if(!xa(e))return;const t=Object.entries(e).filter(([n])=>n.trim().length>0).map(([n,r])=>[n,String(r??"")]);return t.length>0?Object.fromEntries(t):void 0}function Rb(e){if(!Array.isArray(e))return;const t=e.map(n=>String(n??"").trim()).filter(Boolean).slice(0,24);return t.length>0?t:void 0}function ys(e,t=0,n=Number.MAX_SAFE_INTEGER){const r=Number(e);if(Number.isFinite(r))return ge(r,t,n)}function Dr(e){return e&&Xc.includes(e)?e:"dot"}function Od(e){return Math.round(e/oa)*oa}function Lb(e){if(!xa(e))return null;const t=typeof e.variantId=="string"?e.variantId.trim():"",n=typeof e.imageUrl=="string"?e.imageUrl.trim():"";return!t||!n?null:{variantId:t,imageUrl:n,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(!xa(e)||!Array.isArray(e.variants))return;const t=e.variants.map(d=>Lb(d)).filter(d=>!!d).slice(0,128);if(t.length===0)return;const n=typeof e.activeVariantId=="string"?e.activeVariantId:"";return{activeVariantId:t.some(d=>d.variantId===n)?n: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 di(e,t,n){if(!(!e||e.variants.length===0))return{...e,variants:e.variants.map(r=>({...r,sourceNodeId:t&&n&&r.sourceNodeId===t?n:r.sourceNodeId}))}}function Eb(e){if(!xa(e))return null;const t=e.kind,n=Number(e.x),r=Number(e.y),d=Number(e.width),c=Number(e.height);if(typeof e.id!="string"||typeof t!="string"||!ib.has(t)||typeof e.title!="string"||typeof e.body!="string"||!Number.isFinite(n)||!Number.isFinite(r)||!Number.isFinite(d)||!Number.isFinite(c))return null;const m=Pb(e.imageStack),y=(m==null?void 0:m.variants.find(p=>p.variantId===m.activeVariantId))??(m==null?void 0:m.variants[0]);return{id:e.id,kind:t,title:e.title,body:e.body,x:n,y:r,width:ge(d,120,1280),height:ge(c,96,920),status:["idle","running","paused","done","blocked"].includes(String(e.status))?e.status:void 0,result:typeof e.result=="string"?e.result:void 0,imageUrl:typeof e.imageUrl=="string"?e.imageUrl:y==null?void 0:y.imageUrl,imageStack:m,assetUrl:typeof e.assetUrl=="string"?e.assetUrl:void 0,sourceFilePath:typeof e.sourceFilePath=="string"?e.sourceFilePath:void 0,isChunkedText:typeof e.isChunkedText=="boolean"?e.isChunkedText:void 0,totalLineCount:ys(e.totalLineCount),scrollOffset:ys(e.scrollOffset),maxScroll:ys(e.maxScroll),isExpanded:typeof e.isExpanded=="boolean"?e.isExpanded:void 0,originalHeight:ys(e.originalHeight),tags:Rb(e.tags),role:typeof e.role=="string"?e.role:void 0,metadata:Tb(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 _b(e){return!xa(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:ri(e.fromSide)?e.fromSide:void 0,toSide:ri(e.toSide)?e.toSide:void 0}}function $d(e){if(!e.includes(As))return null;try{const t=JSON.parse(e);if(!xa(t)||t.__type!==As||!Array.isArray(t.nodes))return null;const n=t.nodes.map(d=>Eb(d)).filter(d=>!!d);if(n.length===0)return null;const r=Array.isArray(t.edges)?t.edges.map(d=>_b(d)).filter(d=>!!d):[];return{__type:As,source:"MindExecReact",copiedAt:typeof t.copiedAt=="string"?t.copiedAt:new Date().toISOString(),nodes:n,edges:r}}catch{return null}}function Bb(e,t){return{__type:As,source:"MindExecReact",copiedAt:new Date().toISOString(),nodes:e.map(n=>({...n,metadata:n.metadata?{...n.metadata}:void 0,tags:n.tags?[...n.tags]:void 0,imageStack:di(n.imageStack)})),edges:t.map(n=>({...n}))}}const Db=/^\s*\[[^\]]+\]\((https?:\/\/[^)\s]+)\)\s*$/i,Ob=/<iframe[^>]+src\s*=\s*(?:"|\x27)(?<url>https?:\/\/[^"\x27]+)(?:"|\x27)/i,$b=/https?:\/\/[^\s<>()"\x27]+/i,Fb=/^[A-Za-z0-9_-]{6,}$/,Ub=new Set(["avi","m4v","mov","mp4","mpeg","ogv","webm"]);function Or(e){return e.trim().replace(/[.,;:!?\])}]+$/g,"")}function zb(e){var c;const t=e.trim();if(!t)return"";const n=Ob.exec(t);if((c=n==null?void 0:n.groups)!=null&&c.url)return Or(n.groups.url);const r=Db.exec(t);if(r!=null&&r[1])return Or(r[1]);const d=t.split(/\r?\n/).map(m=>m.trim()).filter(Boolean);if(d.length===1){const m=$b.exec(d[0]);if(m&&m[0]===d[0])return Or(m[0])}return""}function Ti(e){const t=e.trim(),n=zb(t);if(n)return n;if(!t||/\s/.test(t))return"";try{const r=new URL(t);return r.protocol==="data:"||r.protocol==="blob:"?t:""}catch{return""}}function Hb(e){try{const t=new URL(e);return li(t.pathname)}catch{return li(e)}}function Wb(e){const t=e.hostname.toLowerCase();if(!t||t==="localhost"||t.endsWith(".localhost"))return!0;const n=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(t);if(n){const d=n.slice(1).map(Number);if(d.some(y=>!Number.isInteger(y)||y<0||y>255))return!0;const[c,m]=d;return c===0||c===10||c===127||c===169&&m===254||c===172&&m>=16&&m<=31||c===192&&m===168}const r=t.replace(/^\[|\]$/g,"").toLowerCase();return r==="::1"||r==="0:0:0:0:0:0:0:1"||r.startsWith("fc")||r.startsWith("fd")?!0:/^fe[89ab]/i.test(r.replace(/:/g,""))}function Mn(e){const t=Ti(e);if(!t)return null;try{const n=new URL(t);return n.protocol!=="http:"&&n.protocol!=="https:"||Wb(n)?null:n}catch{return null}}function $r(e){return Fb.test(e)}function Vb(e){const t=Mn(e);if(!t)return"";const n=t.hostname.toLowerCase().replace(/^www\./,"");if(n==="youtu.be"){const y=t.pathname.split("/").filter(Boolean)[0]??"";return $r(y)?y:""}if(!n.endsWith("youtube.com")&&!n.endsWith("youtube-nocookie.com"))return"";const r=t.searchParams.get("v")??"";if($r(r))return r;const d=t.pathname.split("/").filter(Boolean),c=d.findIndex(y=>["embed","shorts","live","v"].includes(y)),m=c>=0?d[c+1]??"":"";return $r(m)?m:""}function Yb(e){const t=e.toLowerCase(),n=Hb(e);return t.startsWith("data:image/")||["avif","gif","jpeg","jpg","png","svg","webp"].includes(n)?"image":Ub.has(n)?"video":n==="pdf"?"pdf":Mn(e)?"embed":"file"}function Gb(e){try{const t=new URL(e),n=t.pathname.split("/").filter(Boolean).pop();return decodeURIComponent(n||t.hostname||e).slice(0,90)}catch{return e.slice(0,90)}}function Kb(e,t,n="clipboard-url"){const r=Yb(e),d=Gb(e),c=r==="embed"?Mn(e):null,m=r==="embed"?Vb(e):"",y=m?"youtube":"webpage",p=(c==null?void 0:c.hostname.replace(/^www\./,""))??"",b=m?`https://www.youtube.com/watch?v=${m}`:e,w=m?`https://www.youtube-nocookie.com/embed/${m}`:"",_=r==="image"?`Image: ${d}`:r==="video"?`Video: ${d}`:r==="embed"?m?"YouTube Video":`Embed: ${p||d}`:r==="pdf"?`PDF: ${d}`:`URL: ${d}`;return{id:Q("node"),kind:r,title:_,body:b,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:b,tags:r==="embed"?["Embed",m?"YouTube":"Web"]:r==="file"?["URL","File"]:[r.toUpperCase()],metadata:{Source:n,AdapterState:"local-reference",Durable:"false",...r==="embed"?{source:"embed",embedType:y,provider:m?"youtube":"web",renderMode:m?"card":"snapshot",aspectRatio:m?"16:9":"auto",sourceUrl:b,url:b,originalInputUrl:e,embedUrl:w,videoId:m,thumbnailUrl:m?`https://img.youtube.com/vi/${m}/hqdefault.jpg`:"",title:_,domain:p,faviconUrl:!m&&c?`https://www.google.com/s2/favicons?sz=64&domain_url=${encodeURIComponent(b)}`:"",description:m?"":"Capture a visual snapshot or open this page in a new tab.",iframeAllowed:"false",iframeBlockedReason:m?"react-card-shell":"unknown",captureStatus:"idle",captureProvider:m?"":"cloudflare-browser-run"}:{}}}}function Fd(e,t,n="clipboard-url"){const r=Ti(e);return!r||/^https?:\/\//i.test(r)&&!Mn(r)?null:Kb(r,t,n)}function Ud(e,t,n){const r=e.split(/\r?\n/).map(d=>d.trim()).find(Boolean)??"Pasted text";return{id:Q("node"),kind:"note",title:r.slice(0,90),body:e.slice(0,4e4),x:t.x,y:t.y,width:340,height:ge(156+Math.ceil(Math.min(e.length,2200)/72)*20,176,540),tags:[n.startsWith("global-input")?"Input":"Pasted"],metadata:{Source:n,TextTruncated:String(e.length>4e4)}}}function Xb(e,t,n){const r=e.split(/\r?\n/).map(y=>y.trim()).find(Boolean)??"AI question",d=na(n.model),c=cc(d),m=c?Pp(c.provider):n.aiProvider||"OpenAI Codex";return{id:Q("node"),kind:"ai-task",title:r.slice(0,90),body:e.slice(0,4e4),x:t.x,y:t.y,width:360,height:ge(176+Math.ceil(Math.min(e.length,2200)/84)*18,196,520),status:"idle",tags:["AI Task","Input",m],metadata:{Source:"global-input-ai",AdapterState:"localbridge-codex",AiProvider:n.aiProvider||"OpenAI Codex",TextModel:d,TextModelProvider:m,Effort:n.effort,TextTruncated:String(e.length>4e4)}}}function qb(e,t,n,r,d="global-input-media",c){const m=r==="Image"?"image":"video",y=e.split(/\r?\n/).map(b=>b.trim()).find(Boolean)??`${r} prompt`,p={...Pi(n,r,c)??{},Source:d,PromptOnly:"true"};return{id:Q("node"),kind:m,title:`${r}: ${y.slice(0,72)}`,body:e.slice(0,4e4),x:t.x,y:t.y,width:m==="image"?360:420,height:m==="image"?240:236,tags:[r,p.MediaProvider||"Adapter gated"],metadata:p}}function zd(e){if(!e.trim())return"";if(typeof DOMParser>"u")return e.replace(/<br\s*\/?>/gi,`
|
|
21
|
-
`).replace(/<[^>]+>/g," ").replace(/\s+\n/g,`
|
|
22
|
-
`).trim();const t=new DOMParser().parseFromString(e,"text/html");return(t.body.innerText||t.body.textContent||"").replace(/\n{3,}/g,`
|
|
23
|
-
|
|
24
|
-
`).trim()}function Jb(e){const t=li(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":pb.has(t)?"code":e.type.startsWith("text/")||gb.has(t)?"text":"file"}function Zb(e){return typeof URL<"u"&&URL.createObjectURL?URL.createObjectURL(e):e.name}function Hd(e){return e?e.split(/\r?\n/).length:0}function Wd(e){return String(e||"").replace(/\r\n/g,`
|
|
25
|
-
`).replace(/\r/g,`
|
|
26
|
-
`).split(`
|
|
27
|
-
`).slice(0,Bs).join(`
|
|
28
|
-
`).slice(0,tb)}function Vd(e){return{IsChunkedText:"true",TotalLineCount:String(e),TotalLineCountIsPreview:"true",ChunkedPreviewOnly:"true",ChunkedPreviewChars:"",ChunkedLineCount:String(Bs),ChunkCacheEntryLimit:String(eb),LargeFileThresholdBytes:String(Qc),OriginalIngestMode:"browser-preview",TextTruncated:"true"}}function Qb(e){const t=String(e||"").replace(/\r\n/g,`
|
|
29
|
-
`).replace(/\r/g,`
|
|
30
|
-
`).split(`
|
|
31
|
-
`).filter(r=>r.trim().length>0),n=t.slice(0,40).reduce((r,d)=>Math.max(r,ey(d)),0);return{rowCount:Math.max(0,t.length-1),columnCount:n}}function ey(e){let t=1,n=!1;for(let r=0;r<e.length;r+=1){const d=e[r],c=e[r+1];d==='"'?n&&c==='"'?r+=1:n=!n:d===","&&!n&&(t+=1)}return e.trim()?t:0}function Yd(e,t){const n=`
|
|
32
|
-
|
|
33
|
-
... (UI truncated; source file ${t.toLocaleString()} bytes) ...`;return e.endsWith(`
|
|
34
|
-
`)?`${e}${n.trimStart()}`:`${e}${n}`}async function ty(e,t,n){const r=Jb(e),d=(r==="note"||r==="text"||r==="code"||r==="markdown")&&e.size<=Lr,c=r==="image"||r==="video"||r==="pdf"||r==="file"?Zb(e):void 0,m={Source:`browser-${n}`,FileName:e.name,FileType:e.type||"unknown",FileSize:String(e.size),Durable:"false"};if(r==="csv-table"){const p=e.size<=Lr,b=p?await e.text():await e.slice(0,Nd).text(),w=p?b.slice(0,Pr):Wd(b),_=Qb(w),N=p?0:Hd(w);return p||f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:n,previewChars:w.length,previewLines:N,chunkLineCount:Bs}),{id:Q("node"),kind:"csv-table",title:e.name.slice(0,90)||"CSV table",body:p?w:Yd(w,e.size),x:t.x,y:t.y,width:720,height:420,sourceFilePath:e.name,isChunkedText:!p||void 0,totalLineCount:p?void 0:N,scrollOffset:p?void 0:0,maxScroll:p?void 0:0,tags:["CSV","Table",n],metadata:{...m,CsvRowCount:String(_.rowCount),CsvColumnCount:String(_.columnCount),IsChunkedText:String(!p),...p?{}:{...Vd(N),ChunkedPreviewChars:String(w.length)},ChunkedPreviewOnly:String(!p),OriginalIngestMode:p?"browser-inline":"browser-preview",TextTruncated:String(!p||b.length>w.length)},wordWrap:!1}}if(d){const p=(await e.text()).slice(0,Pr);return{id:Q("node"),kind:r,title:e.name.slice(0,90)||(r==="code"?"Code file":r==="markdown"?"Markdown file":"Text file"),body:p,x:t.x,y:t.y,width:r==="code"?420:r==="markdown"?400:360,height:ge(168+Math.ceil(Math.min(p.length,2600)/72)*20,196,640),sourceFilePath:e.name,tags:[r==="code"?"Code":r==="markdown"?"Markdown":"Text",n],metadata:{...m,TextTruncated:String(e.size>Lr||p.length>=Pr)},wordWrap:r==="code"?!0:void 0}}if(r==="note"||r==="text"||r==="code"||r==="markdown"){const p=await e.slice(0,Nd).text(),b=Wd(p),w=Hd(b);return f.emit("chunkedText.preview",{fileName:e.name,fileSize:e.size,kind:r,source:n,previewChars:b.length,previewLines:w,chunkLineCount:Bs}),{id:Q("node"),kind:r,title:e.name.slice(0,90)||(r==="code"?"Code file":r==="markdown"?"Markdown file":"Text file"),body:Yd(b,e.size),x:t.x,y:t.y,width:r==="code"?480:r==="markdown"?430:390,height:540,sourceFilePath:e.name,isChunkedText:!0,totalLineCount:w,scrollOffset:0,maxScroll:0,isExpanded:!1,originalHeight:0,tags:[r==="code"?"Code":r==="markdown"?"Markdown":"Text","Chunked",n],metadata:{...m,...Vd(w),ChunkedPreviewChars:String(b.length)},wordWrap:r==="code"?!0:void 0}}const y=r;return{id:Q("node"),kind:y,title:e.name.slice(0,90)||(y==="image"?"Image":y==="video"?"Video":y==="pdf"?"PDF Document":"File"),body:c||e.name,x:t.x,y:t.y,width:y==="video"?420:y==="image"?360:300,height:y==="video"?236:y==="image"?240:154,imageUrl:y==="image"?c:void 0,assetUrl:y==="image"?void 0:c,sourceFilePath:e.name,tags:[y==="file"?"File":y.toUpperCase(),n],metadata:{...m,EphemeralObjectUrl:String(!!c)}}}function Gd(e,t){const n=Array.from(e??[]),r=Array.from(t??[]).map(c=>c.kind==="file"?c.getAsFile():null).filter(c=>!!c),d=new Set;return[...n,...r].filter(c=>{const m=`${c.name}:${c.size}:${c.type}:${c.lastModified}`;return d.has(m)?!1:(d.add(m),!0)})}function Ms(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 Kd(e){const t=e instanceof HTMLElement?e:null;return t?!!(t.closest(".canvas-node,.edge-path")||Ms(e)):!1}function Fr(e){return xa(e)?typeof e.id=="string"&&Array.isArray(e.nodes)&&Array.isArray(e.edges)&&xa(e.settings):!1}function Os(e){return e.replace(/\.layout\.json$/i,"").replace(/\.json$/i,"").trim()}function ay(e,t){var r,d;const n=new Date().toISOString();return{...e,id:Q("imported-board"),name:at(e.name||Os(t)),updatedAt:n,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:n}}}function Ur(e){return/\.layout\.json$/i.test(e.file.name)}function ny(e){return e.flatMap(t=>xi(t.payload).map(n=>({fileName:t.file.name,metadata:n})))}function oy(e,t){const n=Os(e.file.name);return t.find(r=>r.metadata.Id===n)??xi(e.payload).map(r=>({fileName:e.file.name,metadata:r}))[0]??null}function Ts(e){return e.length===0?null:e.reduce((t,n)=>({minX:Math.min(t.minX,n.x),minY:Math.min(t.minY,n.y),maxX:Math.max(t.maxX,n.x+n.width),maxY:Math.max(t.maxY,n.y+n.height)}),{minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY})}function sy(e){const t=[...e].sort((p,b)=>p.y-b.y||p.x-b.x);if(t.length<=2)return t;const n=t.map(p=>p.height).sort((p,b)=>p-b),r=n[Math.floor(n.length/2)]??1,d=Math.max(16,r*.35),c=[];let m=[],y=Number.NaN;for(const p of t){if(m.length===0){m=[p],y=p.y;continue}Math.abs(p.y-y)<=d?(m.push(p),y=(y*(m.length-1)+p.y)/m.length):(c.push(m.sort((b,w)=>b.x-w.x)),m=[p],y=p.y)}return m.length>0&&c.push(m.sort((p,b)=>p.x-b.x)),c.flat()}function ry(e,t,n){const r=Ts(e);if(!r)return null;const d={minX:r.minX-220,minY:r.minY-180,maxX:r.maxX+220,maxY:r.maxY+180},c=Math.max(1,d.maxX-d.minX),m=Math.max(1,d.maxY-d.minY),y=Math.min((Is-xn*2)/c,(Ns-xn*2)/m),p=(N,D)=>({x:xn+(N-d.minX)*y,y:xn+(D-d.minY)*y}),b={left:(0-t.x)/t.scale,top:(0-t.y)/t.scale,right:(n.width-t.x)/t.scale,bottom:(n.height-t.y)/t.scale},w=p(b.left,b.top),_=p(b.right,b.bottom);return{bounds:d,scale:y,project:p,nodes:e.map(N=>{const D=p(N.x,N.y);return{id:N.id,kind:N.kind,x:D.x,y:D.y,width:Math.max(2,N.width*y),height:Math.max(2,N.height*y),selected:!1}}),viewport:{x:ge(w.x,0,Is),y:ge(w.y,0,Ns),width:ge(_.x-w.x,4,Is),height:ge(_.y-w.y,4,Ns)}}}function iy(e,t){const n=Math.max(.01,e.scale),r=t.width/n,d=t.height/n,c=Math.max(qf,Math.max(r,d)*Jf);return{left:(0-e.x)/n-c,top:(0-e.y)/n-c,right:(t.width-e.x)/n+c,bottom:(t.height-e.y)/n+c}}function Xd(e,t){return e.x+e.width>=t.left&&e.x<=t.right&&e.y+e.height>=t.top&&e.y<=t.bottom}function qd(e){const t=Math.min(e.startX,e.currentX),n=Math.min(e.startY,e.currentY),r=Math.max(e.startX,e.currentX),d=Math.max(e.startY,e.currentY);return{left:t,top:n,right:r,bottom:d,width:r-t,height:d-n}}function ly(e,t){const n=Math.max(.01,t.scale);return{left:(e.left-t.x)/n,top:(e.top-t.y)/n,right:(e.right-t.x)/n,bottom:(e.bottom-t.y)/n}}function Jd(e){const t=new Date().toISOString(),n=Q("board"),r=Q("node");return{id:n,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 dy(e){const t=new Date().toISOString();return{id:Q("board"),name:`Template Studio ${cy(new Date)}`,updatedAt:t,settings:e,source:{kind:"localStorage",loadedAt:t},nodes:[],edges:[]}}function cy(e){const t=`${e.getMonth()+1}`.padStart(2,"0"),n=`${e.getDate()}`.padStart(2,"0"),r=`${e.getHours()}`.padStart(2,"0"),d=`${e.getMinutes()}`.padStart(2,"0");return`${t}.${n} ${r}:${d}`}function uy(e){return`${e.sourceKind==="localBridge"?"LocalBridge copy":"React board"} / ${e.nodeCount} nodes / ${ii(e.updatedAt)}`}function wo(e,t){const n=e.trim();return n.length<=t?n:`${n.slice(0,t)}...`}function Zd(e){return e==="Fast"?"low":e==="Deep"?"high":"medium"}function ou(e){return(e.body||e.result||e.title||"").trim()||"Selected MindCanvas node"}function Qd(e,t,n,r){const d=ou(e),c=Ci(n.appLanguage,d),m=n.aiNodeDefaultWidth??340,y=Math.max(n.aiNodeDefaultHeight??196,206),p=e.x+e.width+160,b=e.y,w=96,_=t.nodes.map((D,O)=>({id:Q("node"),kind:"ai-task",title:D.title,body:D.instruction,x:p+O*(m+w),y:b,width:m,height:y,tags:[],metadata:{Source:"generate-flow",SemanticType:Ai,AutomationNodeKind:D.kind,AutomationNodeLabel:D.title,AutomationPlannerSourceMode:r,AutomationPlannerLanguage:c,AutomationPlannerObjective:d.slice(0,2e3),AdapterState:r==="ai-generated"?"localbridge-ai-planned":"language-aware-fallback"}})),N=[{id:Q("edge"),from:e.id,to:_[0].id,kind:"context"},...t.edges.filter(D=>_[D.from]&&_[D.to]).map(D=>({id:Q("edge"),from:_[D.from].id,to:_[D.to].id,kind:"result"}))];return{nodes:_,edges:N,language:c}}function Ri(e){var t,n,r;return String(((t=e.metadata)==null?void 0:t.AutomationNodeKind)||((n=e.metadata)==null?void 0:n.AutomationTemplateKey)||((r=e.metadata)==null?void 0:r.AutomationInferredKind)||"").trim().toLowerCase()}function Li(e){return e==="image-generate"||e==="video-generate"?Mi[e]:null}function su(e){var t;return String(((t=e.metadata)==null?void 0:t.SemanticType)||"").trim()===Ai}function my(e,t){const n=Mi[t],r=vo(e,n.mode);return{...Pi(e,n.mode)??{},Source:"toolbar-business-automation",SemanticType:Ai,AutomationNodeKind:n.kind,AutomationNodeLabel:n.title,AutomationNodeDescription:`${n.tag} prepared as a spec-only, review-gated media automation node.`,AutomationGraphSchemaVersion:"react-media-spec@1",AutomationTemplateKey:n.kind,AutomationInferredKind:n.kind,AutomationInferredRole:"Media Spec",AutomationToolPolicy:"spec-only",AutomationToolHints:`AI.LLM, ${n.toolHint}, HumanReview.Gate`,AutomationOutputType:n.outputType,AutomationApprovalPolicy:"review-before-generate",AutomationRequiredEvidence:"false",AutomationExternalActionPolicy:"spec-only-until-review",AutomationResultPolicy:"snapshot-per-run",AutomationRunState:"idle",AutomationRunCount:"0",AutomationInstruction:n.body,AutomationLastOutput:"",AutomationLastRunError:"",AutomationLastRunStatus:"not-run",AutomationLastRunStatusLabel:"Not run",AutomationLastRunSourceMode:"",AutomationLastRunEvidenceCount:"0",AutomationLastRunIsFallback:"false",AutomationLastRunIsPartial:"false",AutomationLastRunToolsUsed:"",AutomationLastRunToolWarnings:"",MediaGenerationContract:"spec-only-until-review",MediaGenerationMedium:n.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 py(e,t){var r,d,c,m,y;if(!su(e))return;const n=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??((c=e.metadata)==null?void 0:c.AutomationLastOutput)??"",AutomationLastRunError:t.error??"",AutomationLastRunStatus:t.status,AutomationLastRunStatusLabel:t.statusLabel,AutomationLastRunSourceMode:t.sourceMode??"",AutomationLastRunEvidenceCount:((m=e.metadata)==null?void 0:m.AutomationLastRunEvidenceCount)??"0",AutomationLastRunIsFallback:String(!!t.fallback),AutomationLastRunIsPartial:String(!!t.partial),AutomationLastRunToolsUsed:t.toolsUsed??((y=e.metadata)==null?void 0:y.AutomationToolHints)??"",AutomationLastRunToolWarnings:t.toolWarnings??"",AutomationRunCount:n,...t.runState==="completed"?{AutomationLastRunAtUtc:new Date().toISOString()}:{}}}function gy(){return{Source:"toolbar-agent-command",SemanticType:ab,AgentCommandId:Q("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 hy(){return{Source:"toolbar-code-note",SemanticType:nb,CodeNoteId:Q("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 fy(e,t,n="LocalBridge AI path was unavailable"){var d,c,m,y;const r=t?Li(Ri(t)):null;if(r){const p=r.mode.toLowerCase();return[`Task: ${e}`,"",`Run Result: ${r.title}`,`Node: ${r.kind}`,"Status: Spec only","Source mode: media-prompt-only","AI used: no",`Fallback reason: ${n}`,"","Generation is not executed here. External media generation stays adapter-gated until human review.","","Spec:",`- Medium: ${p}`,`- Model: ${((d=t==null?void 0:t.metadata)==null?void 0:d.MediaModel)||"adapter-gated"}`,`- Aspect: ${((c=t==null?void 0:t.metadata)==null?void 0:c.AspectLabel)||((m=t==null?void 0:t.metadata)==null?void 0:m.AspectPresetId)||"auto"}`,`- Requested size: ${((y=t==null?void 0:t.metadata)==null?void 0:y.RequestedSize)||"auto"}`,"","Prompt draft:",e].join(`
|
|
35
|
-
`)}return[`Task: ${e}`,"","Source: Local fallback","AI used: no",`Fallback reason: ${n}`,"","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(`
|
|
36
|
-
`)}function bo(e,t){return{...su(e)?py(e,t):e.metadata??{},AiTaskLastRunState:t.runState,AiTaskLastRunStatus:t.status,AiTaskLastRunStatusLabel:t.statusLabel,AiTaskLastRunSourceMode:t.sourceMode??"",AiTaskLastRunIsFallback:String(!!t.fallback),AiTaskLastRunIsPartial:String(!!t.partial),AiTaskLastRunToolsUsed:t.toolsUsed??"",AiTaskLastRunToolWarnings:t.toolWarnings??"",AiTaskLastRunModel:t.model??"",AiTaskLastRunReasoningEffort:t.reasoningEffort??"",AiTaskLastRunProviderKind:t.providerKind??"",AiTaskLastRunThreadId:t.threadId??"",AiTaskLastRunTurnId:t.turnId??"",AiTaskLastRunError:t.error??"",...t.runState!=="running"?{AiTaskLastRunAtUtc:new Date().toISOString()}:{}}}function by(e){var w;const t=e.metadata??{},n=t.AiTaskLastRunSourceMode||t.AutomationLastRunSourceMode||"",r=t.AiTaskLastRunStatusLabel||t.AutomationLastRunStatusLabel||e.status||"",d=t.AiTaskLastRunIsFallback==="true"||t.AutomationLastRunIsFallback==="true"||n==="local-draft"||((w=e.result)==null?void 0:w.includes("Source: Local fallback")),c=t.AiTaskLastRunModel||"",m=t.AiTaskLastRunReasoningEffort||"",y=t.AiTaskLastRunProviderKind||"",p=t.AiTaskLastRunThreadId||"",b=t.AiTaskLastRunError||t.AutomationLastRunError||"";return n==="media-prompt-only"?{tone:"fallback",label:"Spec only",detail:"External media generation was not executed."}:d?{tone:"fallback",label:"Local fallback",detail:b?`AI not used. ${b}`:"AI not used."}:e.status==="running"?{tone:"running",label:"Running",detail:[c||"Codex",m].filter(Boolean).join(" · ")||"AI request in progress."}:n==="ai-generated"||y||p?{tone:"ai",label:"AI result",detail:[y||"LocalBridge Codex",c,m,p?`thread ${p.slice(0,8)}`:""].filter(Boolean).join(" · ")}:{tone:e.status==="blocked"?"fallback":"neutral",label:r||"Result",detail:n||"Run metadata unavailable."}}function yy(e,t){const n=e.result||"",r=n.slice(0,oi),d=`${e.title||"AI Task"} result`;return{id:Q("node"),kind:"markdown",title:d.slice(0,90),body:r,x:t.x,y:t.y,width:440,height:ge(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(n.length>oi),AdapterState:"local-reference"}}}function xy(e,t){const n=wo(e.result||"",900);return{id:Q("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:",n||"(No result preview available.)"].join(`
|
|
37
|
-
`),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 ec(e,t,n){var y,p,b,w,_;const r=Li(Ri(t)),d=new Set(e.edges.filter(N=>N.to===t.id||N.from===t.id).flatMap(N=>[N.from,N.to]).filter(N=>N!==t.id)),c=e.nodes.filter(N=>d.has(N.id)).slice(0,8),m=c.length>0?c.map(N=>[`### ${N.title||N.kind}`,`Type: ${N.kind}`,wo(N.result||N.body||"",1200)].join(`
|
|
38
|
-
`)).join(`
|
|
39
|
-
|
|
40
|
-
`):"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.",Hr(e.settings.appLanguage),"",`Board: ${e.name}`,`Task node: ${t.title}`,`Automation kind: ${r.kind}`,`External action policy: ${((y=t.metadata)==null?void 0:y.AutomationExternalActionPolicy)||"spec-only-until-review"}`,`Media model: ${((p=t.metadata)==null?void 0:p.MediaModel)||"adapter-gated"}`,`Aspect: ${((b=t.metadata)==null?void 0:b.AspectLabel)||((w=t.metadata)==null?void 0:w.AspectPresetId)||"auto"}`,`Requested size: ${((_=t.metadata)==null?void 0:_.RequestedSize)||"auto"}`,"","Instruction:",wo(n,4e3),"","Linked context:",m,"","Required sections:","- Subject","- Visual style","- Composition or scene","- Constraints","- Business use case","- Final generation prompt"].join(`
|
|
41
|
-
`):["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.",Hr(e.settings.appLanguage),"",`Board: ${e.name}`,`Task node: ${t.title}`,"","Instruction:",wo(n,4e3),"","Linked context:",m].join(`
|
|
42
|
-
`)}function ru(e,t){const n=e.x-t.x;if(Math.abs(n)>1)return n;const r=e.y-t.y;return Math.abs(r)>1?r:String(e.title||e.id).localeCompare(String(t.title||t.id))}function ci(e){return[...e].sort(ru)}function Cy(e,t){const n=new Map(e.nodes.filter(w=>w.kind==="ai-task").map(w=>[w.id,w])),r=new Set([...t].filter(w=>n.has(w))),d=new Map,c=new Map;for(const w of r)d.set(w,new Set),c.set(w,0);for(const w of e.edges){if(!r.has(w.from)||!r.has(w.to)||w.from===w.to)continue;const _=d.get(w.from);!_||_.has(w.to)||(_.add(w.to),c.set(w.to,(c.get(w.to)??0)+1))}const m=[],y=new Set,p=ci([...r].filter(w=>(c.get(w)??0)===0).map(w=>n.get(w)));for(;p.length>0;){const w=p.shift();if(y.has(w.id))continue;y.add(w.id),m.push(w);const _=[...d.get(w.id)??[]].map(N=>n.get(N)).filter(N=>!!N);for(const N of _)c.set(N.id,Math.max(0,(c.get(N.id)??0)-1)),(c.get(N.id)??0)===0&&p.push(N);p.sort(ru)}const b=ci([...r].filter(w=>!y.has(w)).map(w=>n.get(w)).filter(Boolean));return[...m,...b]}function ui(e,t){var m,y;const n=new Set(e.nodes.filter(p=>p.kind==="ai-task").map(p=>p.id));if(!n.has(t))return[];const r=new Map;for(const p of n)r.set(p,new Set);for(const p of e.edges)!n.has(p.from)||!n.has(p.to)||((m=r.get(p.from))==null||m.add(p.to),(y=r.get(p.to))==null||y.add(p.from));const d=new Set,c=[t];for(;c.length>0;){const p=c.pop();if(!d.has(p)){d.add(p);for(const b of r.get(p)??[])d.has(b)||c.push(b)}}return Cy(e,d)}function ky(e){const t=new Set(e.nodes.filter(d=>d.kind==="ai-task").map(d=>d.id)),n=new Set(t),r=[];for(const d of ci(e.nodes.filter(c=>c.kind==="ai-task"))){if(!n.has(d.id))continue;const c=ui(e,d.id);for(const m of c)n.delete(m.id);r.push(c)}return r}function vo(e,t,n){const r=mc(t,e,n),d=t==="Image"?e.imageRouterImageAspectPresetId:e.imageRouterVideoAspectPresetId,c=Wr(t,r,d);return{mode:t,model:r,aspect:c,aspectOptions:Tp(r,t),requestedSize:Vr(c)}}function Pi(e,t,n){const r=vo(e,t,n);return{InputMode:t,AppLanguage:hi(e.appLanguage),MediaPromptLanguageInstruction:Rp(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 Sy(e){const t=na(e.id);if(!t)return null;const n=wy(e.provider,t);return{id:t,label:e.displayName||e.label||t,displayName:e.displayName||e.label||t,description:e.description,provider:n,supportsReasoning:e.supportsReasoning,isFallback:e.isFallback,vendorPricing:iu(e.vendorPricing),source:e.source}}function tc(e,t){const n=uc(t,e.id);if(!n)return null;const r=Array.isArray(e.supportedSizes)&&e.supportedSizes.length>0?e.supportedSizes:t==="Image"?["custom"]:[];return{id:n,label:e.displayName||e.label||n,displayName:e.displayName||e.label||n,description:e.description,provider:vy(e.provider,n),mode:t,supportedSizes:r,supportedSeconds:e.supportedSeconds??[],supportsReasoning:e.supportsReasoning,isFallback:e.isFallback,vendorPricing:iu(e.vendorPricing),source:e.source}}function iu(e){if(!e)return null;const t=String(e.source||"").trim()||"catalog";return{promptUsdPerToken:bn(e.promptUsdPerToken),completionUsdPerToken:bn(e.completionUsdPerToken),requestUsd:bn(e.requestUsd),minUsd:bn(e.minUsd),averageUsd:bn(e.averageUsd),maxUsd:bn(e.maxUsd),source:t}}function bn(e){const t=Number(e);return Number.isFinite(t)?t:void 0}function wy(e,t){const n=String(e||"").trim().toLowerCase();return n==="codex"?"codex":n==="ollama"?"ollama":n==="gemini-cli"||t.startsWith("gemini-")?"gemini-cli":t.startsWith("llama")?"ollama":"openrouter"}function vy(e,t){const n=String(e||"").trim().toLowerCase();return n==="codex"||t.startsWith("codex-image:")?"OpenAI Codex":n==="openai"?"OpenAI":n==="imagerouter"?"ImageRouter":e||mi(t,"Saved")}function jy(e){return e.filter(n=>n.provider==="codex"&&!n.id.includes("/")&&!n.id.includes(":")).filter((n,r,d)=>d.findIndex(c=>c.id.toLowerCase()===n.id.toLowerCase())===r).slice(0,8).flatMap(n=>[{quality:"low",label:"Low"},{quality:"medium",label:"Mid"},{quality:"high",label:"High"}].map(({quality:r,label:d})=>({id:`codex-image:${n.id}:${r}`,label:`${n.displayName||n.label} Image - ${d}`,displayName:`${n.displayName||n.label} Image - ${d}`,provider:"OpenAI Codex",mode:"Image",supportedSizes:["1024x1024","1536x1024","1024x1536"],source:n.source||"codex"})))}function zr(e,t,n){return e.map(r=>{const d=My(r),c=Ny(r,t,n),m=Ry(r,d);return{value:r.id,label:m,title:r.label||r.displayName||r.id,trailingLabel:c.displayLabel}})}function ac(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 Iy(){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 Ny(e,t,n){const r=Ay(e,t,n),d=e.vendorPricing??Ep(e.id);return _p({mode:t,provider:r,modelId:e.id,reasoningEffort:n.effort,vendorPricing:d})}function Ay(e,t,n){const r=String(e.provider||"").trim().toLowerCase();return t==="Text"?r==="codex"?"openai-codex":r==="ollama"?"local-ollama":r==="gemini-cli"?"google-gemini-cli":n.aiProvider==="BYOK"?"byok":"managed-cloud":t==="Image"&&(r==="openai codex"||e.id.startsWith("codex-image:"))?"openai-codex":Bp(n)}function My(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"?mi(e.id,t):mi(e.id,t||"other")}function mi(e,t){const n=String(e||"").trim();if(!n)return t;if(n.startsWith("codex-image:"))return"openai";const r=n.indexOf("/");if(r>0)return n.slice(0,r).toLowerCase();const d=n.indexOf(":");return d>0?n.slice(0,d).toLowerCase():t||n.toLowerCase()}function Ty(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 Ry(e,t){const n=String(e.displayName||e.label||e.id||"").trim(),r=n.toLowerCase()===e.id.toLowerCase()?nc(e.id):n;return Ly(r,t)||nc(e.id)}function nc(e){const t=String(e||"").trim();if(t.startsWith("codex-image:"))return t.slice(12);const n=t.indexOf("/");return n>0&&n<t.length-1?t.slice(n+1):t}function Ly(e,t){const n=Py(t);for(const r of n)for(const d of[" · ",": "," - "," - "," | "," / "," "]){const c=`${r}${d}`;if(e.toLowerCase().startsWith(c.toLowerCase()))return e.slice(c.length).trim()}return e}function Py(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[Ty(e)]}}function Ey(e){return{textModels:((e==null?void 0:e.textModels)??[]).map(Sy).filter(t=>!!t),imageModels:((e==null?void 0:e.imageModels)??[]).map(t=>tc(t,"Image")).filter(t=>!!t),videoModels:((e==null?void 0:e.videoModels)??[]).map(t=>tc(t,"Video")).filter(t=>!!t)}}function _y(e){var r;const t=((r=e==null?void 0:e.exec)==null?void 0:r.availableModels)??[],n=[];return t.forEach((d,c)=>{var p,b;if(typeof d=="string"){const w=na(d);if(!w)return;const _=oc(w);n.push({id:w,label:_,displayName:_,provider:"codex",supportsReasoning:!0,source:((p=e==null?void 0:e.exec)==null?void 0:p.modelCatalogSource)||"localbridge-status",priority:c});return}const m=na(d.id);if(!m)return;const y=String(d.displayName||"").trim()||oc(m);n.push({id:m,label:y,displayName:y,description:d.description,provider:"codex",supportsReasoning:!0,isFallback:!1,source:((b=e==null?void 0:e.exec)==null?void 0:b.modelCatalogSource)||"localbridge-status",priority:Number.isFinite(Number(d.priority))?Number(d.priority):c})}),n.sort((d,c)=>d.priority-c.priority||d.id.localeCompare(c.id)).map(({priority:d,...c})=>c)}function oc(e){return e.startsWith("gpt-")?`GPT-${e.slice(4).toUpperCase()}`:e}function lu(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 By(e,t){const n=Math.max(.01,e.scale),r=Math.max(1,t.width/n/2),d=Math.max(1,t.height/n/2);return{centerX:(t.width/2-e.x)/n,centerY:(t.height/2-e.y)/n,halfWidth:r,halfHeight:d}}function Dy(e,t,n,r=8){if(!t.trim())return[];const d=Wh(lu(e)),c=new Map(e.map(m=>[m.id,m]));return Vh(d,t,{limit:r,viewport:n}).hits.map(m=>c.get(m.nodeId)).filter(m=>!!m)}function sc(e,t,n="none"){const r=new Set(t.nodes.map(c=>c.id)),d=e.filter((c,m)=>r.has(c)&&e.indexOf(c)===m);return d.length>0||n==="none"?d:t.nodes[0]?[t.nodes[0].id]:[]}function rc(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('input,textarea,select,[contenteditable="true"],[contenteditable=""]'):!1}function Oy(e){const t=e instanceof HTMLElement?e:null;return t?!!t.closest('button,a,[role="button"],[role="tab"],summary'):!1}function xs(e){const t=e;if(!t)return null;const n=Number(t.x),r=Number(t.y),d=Number(t.scale);return!Number.isFinite(n)||!Number.isFinite(r)||!Number.isFinite(d)?null:{x:n,y:r,scale:ge(d,vs,js)}}function Wa(e){return typeof e=="string"?e.trim():""}function Cs(e,t=34){const n=Wa(e);if(!n)return"workspace";const c=n.replace(/\\/g,"/").split("/").filter(Boolean).slice(-2).join("/")||n;return c.length<=t?c:`...${c.slice(-(t-3))}`}function $y(){try{const e=window.localStorage.getItem(Jc),t=e?JSON.parse(e):[];return Array.isArray(t)?t.map(Wa).filter(Boolean).filter((n,r,d)=>d.findIndex(c=>c.toLowerCase()===n.toLowerCase())===r).slice(0,Zc):[]}catch{return[]}}function Fy(e){const t=e.map(Wa).filter(Boolean).filter((n,r,d)=>d.findIndex(c=>c.toLowerCase()===n.toLowerCase())===r).slice(0,Zc);try{window.localStorage.setItem(Jc,JSON.stringify(t))}catch{}return t}function Uy(){try{return window.localStorage.getItem(qc)==="full"?"full":"curated"}catch{return"curated"}}function zy(e){try{window.localStorage.setItem(qc,e)}catch{}}function ic(e,t){return Fy([e,...t.filter(n=>n.toLowerCase()!==e.toLowerCase())])}function ax({navigate:e,onSidebarActionsChange:t}){var fl,bl,yl,xl,Cl,kl,Sl,wl,vl,jl,Il,Nl,Al,Ml,Tl;const[n,r]=g.useState(()=>Gl(Ol(Kl(ep(Bl))))),[d,c]=g.useState([]),[m,y]=g.useState([]),[p,b]=g.useState(["node-agent-command"]),[w,_]=g.useState(""),[N,D]=g.useState(""),[O,z]=g.useState(0),[U,V]=g.useState([]),[Y,ce]=g.useState(0),[le,Pe]=g.useState("idle"),[ye,We]=g.useState("booting"),[vt,nt]=g.useState(null),[G,X]=g.useState(null),[ue,oe]=g.useState(null),[mt,W]=g.useState(null),[jt,It]=g.useState(null),[P,Nt]=g.useState({...Fa}),[At,ze]=g.useState({...Fa}),[H,pt]=g.useState(()=>({width:window.innerWidth,height:window.innerHeight})),[gt,ot]=g.useState(()=>Er(n)??{x:0,y:0}),[Ft,Ca]=g.useState(!1),[ka,No]=g.useState(()=>localStorage.getItem(jd)==="true"),[Ve,Tn]=g.useState("local"),[sa,Mt]=g.useState([]),[Ie,se]=g.useState(tt()?"idle":"blocked"),[Ei,Be]=g.useState(null),[Ut,ra]=g.useState({status:"idle",textModels:[],imageModels:[],videoModels:[]}),[Ao,xe]=g.useState(tt()?null:"Hosted LocalBridge access is off."),[Ae,Me]=g.useState(null),[zt,he]=g.useState(null),[Mo,Ya]=g.useState(()=>$y()),[Te,qe]=g.useState(!1),[Rn,ke]=g.useState(null),[ht,Ln]=g.useState(null),[Pn,Ht]=g.useState(!1),[De,ft]=g.useState("ready"),[Sa,To]=g.useState("Saved in this browser."),[Tt,Ro]=g.useState(!1),[Je,Ye]=g.useState(()=>kt()),Oe=g.useMemo(()=>ob(),[]),[Ga,Lo]=g.useState(()=>xr()),Ce=Oe.cloudBoards.canAttempt&&(Ga==null?void 0:Ga.source)==="supabase-provider-session",[Ka,Po]=g.useState([]),[En,Ee]=g.useState(null),[Rt,ia]=g.useState(!1),[Xa,Eo]=g.useState(null),$e=g.useMemo(()=>uf({storedMode:Ve,cloudConfigured:!0,cloudSessionAvailable:Ce,cloudAccess:Ce?{planKey:"provider",entitlementStatus:"active",currentBoardCount:Ka.length,cloudBoardLimit:Number.MAX_SAFE_INTEGER,lockedBoardCount:0,canCreateBoard:!0}:null,bridgeProviderConfigured:!0,bridgeReachable:Ie==="connected",hostedWebApp:!tt()&&!ro(),hostedLocalBridgeAccessEnabled:ro(),browserProviderConfigured:!0,browserLocalAvailable:!0,browserLocalAvailableWhenEmpty:!0,embeddedProviderConfigured:!1,supportsEmbeddedLocal:!1}),[Ce,Ka.length,Ie,Ve]),[_n,Bn]=g.useState(null),[Dn,qa]=g.useState(""),[Wt,On]=g.useState(null),[$n,la]=g.useState(null),[Ze,Fn]=g.useState(!1),[wa,me]=g.useState(!1),[st,bt]=g.useState(null),[Vt,Yt]=g.useState(null),[Lt,Ws]=g.useState(!1),[Un,_o]=g.useState(!1),[va,Vs]=g.useState(Uy),zn=g.useRef(new Map),ja=g.useMemo(()=>fr(n.settings.appLanguage),[n.settings.appLanguage]),[Hn,Gt]=g.useState(!1),[Ja,Ia]=g.useState(!1),[da,Bo]=g.useState("business"),[rt,Za]=g.useState(()=>{var s;const a=io("business",n.settings.appLanguage)??fr(n.settings.appLanguage)[0];return((s=is(a))==null?void 0:s.id)??null}),[Kt,Qa]=g.useState(()=>{const a=io("business",n.settings.appLanguage)??fr(n.settings.appLanguage)[0],s=is(a);return lo(co(a,s==null?void 0:s.id,n.settings.appLanguage))}),[Wn,Qe]=g.useState(null),[en,tn]=g.useState(!1),[Ne,Do]=g.useState(()=>Ad(n.id,n.name)),[fe,it]=g.useState(null),[Oo,$o]=g.useState(null),[Ys,lt]=g.useState(!1),[Xt,Na]=g.useState({}),[an,ca]=g.useState(null),nn=g.useMemo(()=>{var l,u;const a=Je.find(h=>h.id===n.id),s={id:n.id,name:n.name,updatedAt:n.updatedAt,nodeCount:n.nodes.length,edgeCount:n.edges.length,sourceKind:(l=n.source)==null?void 0:l.kind,sourceBoardId:(u=n.source)==null?void 0:u.boardId,order:(a==null?void 0:a.order)??-1},i=new Map(Je.map(h=>[h.id,h]));return i.set(n.id,{...a,...s}),Array.from(i.values()).sort((h,k)=>{const C=typeof h.order=="number"?h.order:Number.MAX_SAFE_INTEGER,j=typeof k.order=="number"?k.order:Number.MAX_SAFE_INTEGER;return C!==j?C-j:String(k.updatedAt||"").localeCompare(String(h.updatedAt||""))}).slice(0,7)},[n,Je]),re=g.useMemo(()=>io(da,n.settings.appLanguage)??ja[0],[da,n.settings.appLanguage,ja]),Ge=g.useMemo(()=>re?co(re,rt,n.settings.appLanguage):null,[re,n.settings.appLanguage,rt]),on=!!(re&&(re.options.length>0||!re.quickCreateTemplateId)),Vn=g.useMemo(()=>ls(Ge,Kt),[Ge,Kt]),v=g.useRef(n),q=g.useRef(p),ie=g.useRef({...Fa}),Fo=g.useRef(H),He=g.useRef(gt),qt=g.useRef(null),Jt=g.useRef(null),sn=g.useRef(null),rn=g.useRef(null),Yn=g.useRef(null),Gn=g.useRef(null),ln=g.useRef(new Map),Kn=g.useRef(new pf),Aa=g.useRef(0),Xn=g.useRef(null),dn=g.useRef(0),Ma=g.useRef(null),ua=g.useRef(!1),Fe=g.useRef(0),_e=g.useRef(0),Ta=g.useRef(0),Ra=g.useRef(0),cn=g.useRef(!1),qn=g.useRef(0),La=g.useRef({}),un=g.useRef(),x=g.useRef(),$=g.useRef(null),de=g.useRef(null),dt=g.useRef(0),Pt=g.useRef(null),et=g.useRef(0),ma=g.useRef(!1),Ue=g.useCallback(()=>{var s;const a=(s=qt.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)}},[]),yt=g.useCallback((a,s)=>{var l;const i=(l=qt.current)==null?void 0:l.getBoundingClientRect();return i?{x:a-i.left,y:s-i.top}:{x:a,y:s}},[]),pa=g.useCallback(a=>{ma.current=a,Ws(a)},[]),_i=g.useCallback((a="keyboard")=>{Vs(s=>{const i=s==="curated"?"full":"curated";return zy(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=()=>Lo(xr());return window.addEventListener(Vl,a),window.addEventListener("storage",a),window.addEventListener("focus",a),()=>{window.removeEventListener(Vl,a),window.removeEventListener("storage",a),window.removeEventListener("focus",a)}},[]),g.useEffect(()=>{const a=()=>{const s=!!document.fullscreenElement;pa(s),f.emit("canvas.fullscreen.changed",{active:s})};return document.addEventListener("fullscreenchange",a),()=>document.removeEventListener("fullscreenchange",a)},[pa]),g.useEffect(()=>{const a=new Worker(new URL("/assets/mindCanvasSearchWorker-BzPMsHOB.js",import.meta.url),{type:"module"});return Ma.current=a,a.onmessage=s=>{var h,k,C,j,S,I,E,B,T;const i=s.data;if(i.type==="READY"){ua.current=!0,We("ready"),f.emit("search.worker.ready");return}if(i.type!=="SEARCH_RESULT")return;if(i.seq!==dn.current){f.emit("async.staleIgnored",{path:"search.worker",seq:i.seq});return}const l=new Map(v.current.nodes.map(M=>[M.id,M])),u=i.hits.map(M=>l.get(M.nodeId)).filter(M=>!!M);V(u),ce(0),Pe("worker"),f.emit("search.completed",{query:i.query,count:u.length,engine:"worker",durationMs:(h=i.profile)==null?void 0:h.durationMs,documentCount:(k=i.profile)==null?void 0:k.documentCount,candidateCount:(C=i.profile)==null?void 0:C.candidateCount,rankedCount:(j=i.profile)==null?void 0:j.rankedCount,viewportBoosted:(S=i.profile)==null?void 0:S.viewportBoosted,boostedCount:(I=i.profile)==null?void 0:I.boostedCount,indexedTokenCount:(E=i.profile)==null?void 0:E.indexedTokenCount,indexedPrefixCount:(B=i.profile)==null?void 0:B.indexedPrefixCount,indexedNGramCount:(T=i.profile)==null?void 0:T.indexedNGramCount})},a.onerror=s=>{ua.current=!1,We("failed"),f.emit("search.worker.failed",{message:s.message})},()=>{a.terminate(),Ma.current=null,ua.current=!1}},[]),g.useEffect(()=>{const a=()=>{const l=Ue();Fo.current=l,pt(u=>Math.abs(u.width-l.width)<.5&&Math.abs(u.height-l.height)<.5?u:l)};a();const s=typeof ResizeObserver>"u"?null:new ResizeObserver(a),i=qt.current;return s&&i&&s.observe(i),window.addEventListener("resize",a),()=>{s==null||s.disconnect(),window.removeEventListener("resize",a)}},[Ue]),g.useEffect(()=>(v.current=n,ft("syncing"),To("Saving board state to this browser."),window.clearTimeout(un.current),un.current=window.setTimeout(()=>{const a=ea(Ua(v.current,He.current));Ye(kt()),ft(a?"ready":"error"),To(a?"Saved in this browser.":"Local browser storage failed.")},280),()=>window.clearTimeout(un.current)),[n]),g.useEffect(()=>{const a=Ma.current;if(!a)return;const s=window.setTimeout(()=>{a.postMessage({type:"REBUILD_BOARD",boardId:n.id,nodes:lu(n.nodes)}),f.emit("search.worker.synced",{boardId:n.id,count:n.nodes.length})},160);return()=>window.clearTimeout(s)},[n.id,n.nodes]),g.useEffect(()=>{q.current=p},[p]),g.useEffect(()=>{const a=Er(v.current)??{x:0,y:0};He.current=a,ot(a),f.emit("canvas.cursor.restore",{boardId:v.current.id,x:Math.round(a.x),y:Math.round(a.y),source:v.current.viewState?"board-view-state":"default"})},[n.id]),g.useEffect(()=>{f.emit("canvas.gridMode.applied",{boardId:n.id,gridType:Dr(n.settings.gridType),gridSnap:n.settings.gridSnap??!0})},[n.id,n.settings.gridSnap,n.settings.gridType]),g.useEffect(()=>()=>{document.body.classList.remove("is-selecting"),document.body.classList.remove("is-panning"),window.clearTimeout(x.current)},[]);const te=g.useCallback((a,s=!0)=>{ie.current=a,Nt(a),sn.current&&(sn.current.style.transform=`translate3d(${a.x}px, ${a.y}px, 0) scale(${a.scale})`),Jt.current&&(Jt.current.style.setProperty("--grid-x",`${a.x}px`),Jt.current.style.setProperty("--grid-y",`${a.y}px`),Jt.current.style.setProperty("--grid-small",`${24*a.scale}px`),Jt.current.style.setProperty("--grid-large",`${144*a.scale}px`)),window.clearTimeout(x.current),x.current=window.setTimeout(()=>ze(a),Xf),s&&f.emit("camera.patch",{...a})},[]),Zt=g.useCallback(async()=>{var i;const a=++Fe.current;if(se("checking"),Be(null),xe(null),f.emit("runtimeStatus.bridge.refresh.requested",{source:"mindcanvas"}),!tt()){se("blocked"),Be(null),Mt([]),xe("Hosted LocalBridge access is off."),Me(null),he("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:"refresh",reason:"hosted-access-off"});return}const s=await ta();if(a===Fe.current){if(Be(s.status??null),s.state!=="connected"){se(s.state),Mt([]),xe(s.message||"LocalBridge is unavailable."),Me(null),he(s.message||"LocalBridge is unavailable.");return}try{const[l,u]=await Promise.all([$l(s.baseUrl),Vg(s.baseUrl)]);if(a!==Fe.current)return;const h=Wa(l.rootPath||((i=s.status)==null?void 0:i.workspace));Me(h||null),he(h?null:"LocalBridge workspace path is unavailable."),h&&Ya(k=>ic(h,k)),se("connected"),Mt(u),xe(u.length>0?null:"No local boards found."),f.emit("projectStorage.workspace.refresh",{source:"board-list",path:h||null}),f.emit("localBridge.boards.listed",{count:u.length})}catch(l){if(a!==Fe.current)return;se("unavailable"),Mt([]);const u=l instanceof Error?l.message:String(l);xe(u),he(u)}}},[]),Jn=g.useCallback(async(a="auto",s=!1)=>{var u,h,k,C;const i=Date.now();if(!s&&i-qn.current<Zf)return;qn.current=i;const l=++Ta.current;if(!tt()){ra(j=>({...j,status:"blocked",message:"Hosted LocalBridge access is off."})),f.emit("modelCatalog.refresh.blocked",{source:a,reason:"hosted-access-off"});return}ra(j=>({...j,status:"loading",message:void 0})),f.emit("modelCatalog.refresh.requested",{source:a,force:s});try{const j=await ta();if(l!==Ta.current)return;if(Be(j.status??null),j.state!=="connected"){ra(M=>({...M,status:"error",message:j.message||"LocalBridge is unavailable."})),f.emit("modelCatalog.refresh.unavailable",{source:a,state:j.state,message:j.message});return}const S=Oa(j.status),I=_y(j.status);let E=null;try{E=await gp(S,j.baseUrl)}catch(M){const L=M instanceof Error?M.message:String(M);if(I.length>0){ra({status:"ready",textModels:I,imageModels:[],videoModels:[],source:((h=(u=j.status)==null?void 0:u.exec)==null?void 0:h.modelCatalogSource)||"localbridge-status",updatedAt:(C=(k=j.status)==null?void 0:k.exec)==null?void 0:C.modelCatalogUpdatedAt,message:L}),f.emit("modelCatalog.refresh.statusFallback",{source:a,textModels:I.length,message:L});return}throw M}if(l!==Ta.current)return;const B=Ey(E);B.textModels=Fl(I,B.textModels);const T=E.errors&&E.errors.length>0?E.errors.join(" | "):void 0;ra({status:"ready",...B,source:E.source,updatedAt:E.updatedAt,message:T}),f.emit("modelCatalog.refresh.completed",{source:a,textModels:B.textModels.length,imageModels:B.imageModels.length,videoModels:B.videoModels.length,hasWarnings:!!T})}catch(j){if(l!==Ta.current)return;const S=j instanceof Error?j.message:String(j);ra(I=>({...I,status:"error",message:S})),f.emit("modelCatalog.refresh.failed",{source:a,message:S})}},[]);g.useEffect(()=>{tt()&&(Zt(),Jn("mount",!0))},[Jn,Zt]),g.useEffect(()=>{ka&&(Ca(!0),f.emit("mindcanvas.projectGallery.opened",{source:"startup"}))},[ka]);const du=g.useCallback(()=>{Ca(a=>{const s=!a;return s&&sa.length===0&&Ie!=="checking"&&Zt(),f.emit(s?"mindcanvas.projectGallery.opened":"mindcanvas.projectGallery.closed",{source:"top-tab"}),s})},[sa.length,Ie,Zt]),Et=g.useCallback(a=>{Ca(s=>(s&&f.emit("mindcanvas.projectGallery.closed",{source:a}),!1))},[]),cu=g.useCallback(a=>{No(a),localStorage.setItem(jd,String(a)),f.emit("mindcanvas.projectGallery.startupPreference",{enabled:a})},[]),Gs=g.useCallback(async(a="manual")=>{if(Lo(xr()),!Ce){const s=Oe.cloudBoards.canAttempt?"sign-in-required":Oe.cloudBoards.mode;Ee(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}ia(!0),Ee(null);try{const s=await rh(Ss());Po(s),Ee(s.length>0?`Loaded ${s.length} cloud board${s.length===1?"":"s"}.`:"No cloud boards yet.")}catch(s){Ee(s instanceof Error?s.message:String(s))}finally{ia(!1)}},[Ce,Oe.cloudBoards.canAttempt,Oe.cloudBoards.mode]),Bi=g.useCallback(a=>{Tn(a),f.emit("projectStorage.tab",{tab:a}),a==="cloud"&&Gs("tab")},[Gs]),uu=g.useCallback(()=>{hp(!0),f.emit("runtimeStatus.bridge.hostedAccess.enabled"),Zt()},[Zt]),Uo=g.useCallback(a=>{Me(a),Ya(s=>ic(a,s))},[]),mu=g.useCallback(async(a="manual")=>{var i;const s=++_e.current;if(he(null),f.emit("projectStorage.workspace.refresh.requested",{source:a}),!tt()){Me(null),he("Hosted LocalBridge access is off."),f.emit("projectStorage.workspace.blocked",{source:a,reason:"hosted-access-off"});return}try{const l=await ta();if(s!==_e.current)return;if(Be(l.status??null),l.state!=="connected"){se(l.state),Me(null),he(l.message||"LocalBridge is unavailable.");return}const u=await $l(l.baseUrl);if(s!==_e.current)return;const h=Wa(u.rootPath||((i=l.status)==null?void 0:i.workspace));he(h?null:"LocalBridge workspace path is unavailable."),h&&Uo(h),f.emit("projectStorage.workspace.refresh",{source:a,path:h||null})}catch(l){if(s!==_e.current)return;he(l instanceof Error?l.message:String(l))}},[Uo]),Ks=g.useCallback(async(a,s)=>{const i=Wa(a);if(!i||Te)return;const l=++_e.current;if(qe(!0),he("Switching LocalBridge workspace..."),f.emit("projectStorage.workspace.set.requested",{source:s,path:i}),!tt()){Me(null),he("Hosted LocalBridge access is off."),qe(!1),f.emit("projectStorage.workspace.blocked",{source:s,reason:"hosted-access-off"});return}try{const u=await ta();if(l!==_e.current)return;if(Be(u.status??null),u.state!=="connected"){se(u.state),he(u.message||"LocalBridge is unavailable.");return}const h=Oa(u.status);if(!h){se("unavailable"),he("LocalBridge write token is unavailable.");return}const k=await fp(i,h,u.baseUrl);if(l!==_e.current)return;const C=Wa(k.workspace||i);Uo(C),se("connected"),he(`Local workspace set to ${Cs(C)}.`),f.emit("projectStorage.workspace.set",{source:s,path:C}),Zt()}catch(u){if(l!==_e.current)return;se("unavailable"),he(u instanceof Error?u.message:String(u))}finally{l===_e.current&&qe(!1)}},[Te,Zt,Uo]),pu=g.useCallback(async()=>{const a=++_e.current;if(qe(!0),he("Opening folder picker..."),f.emit("projectStorage.workspace.browse.requested",{path:Ae||null}),!tt()){Me(null),he("Hosted LocalBridge access is off."),qe(!1),f.emit("projectStorage.workspace.blocked",{source:"browse",reason:"hosted-access-off"});return}try{const s=await ta();if(a!==_e.current)return;if(Be(s.status??null),s.state!=="connected"){se(s.state),he(s.message||"LocalBridge is unavailable.");return}const i=Oa(s.status),l=await bp(Ae,i,s.baseUrl);if(a!==_e.current)return;if(l.canceled||!l.success||!l.path){he("Workspace selection cancelled."),f.emit("projectStorage.workspace.browse.cancelled");return}f.emit("projectStorage.workspace.browse",{path:l.path}),qe(!1),await Ks(l.path,"browse")}catch(s){if(a!==_e.current)return;he(s instanceof Error?s.message:String(s))}finally{a===_e.current&&qe(!1)}},[Ks,Ae]),gu=g.useCallback(async()=>{var s,i;const a=++Fe.current;if(Ht(!0),xe(null),(s=v.current.source)!=null&&s.partialImport){xe("This imported board came from a partial original payload, so export is blocked to avoid data loss."),Ht(!1);return}if((i=v.current.source)!=null&&i.truncated){xe("This imported board was truncated, so export is blocked to avoid data loss."),Ht(!1);return}if(!tt()){se("blocked"),Be(null),xe("Hosted LocalBridge access is off."),Ht(!1);return}try{const l=await ta();if(a!==Fe.current)return;if(Be(l.status??null),l.state!=="connected"){se(l.state),xe(l.message||"LocalBridge is unavailable.");return}const u=Oa(l.status);if(!u){se("unavailable"),xe("LocalBridge write token is unavailable.");return}const h=await Gg(v.current,ie.current,u,l.baseUrl,He.current);if(a!==Fe.current)return;const k=Ua({...v.current,nodes:h.nodes,source:h.source,updatedAt:h.metadata.UpdatedAt||new Date().toISOString()},He.current);r(k),ea(k),Ye(kt()),se("connected"),Mt(C=>[h.metadata,...C.filter(j=>j.Id!==h.metadata.Id)]),xe(`Exported "${at(h.metadata.Title)}" to LocalBridge.`)}catch(l){if(a!==Fe.current)return;se("unavailable"),xe(l instanceof Error?l.message:String(l))}finally{a===Fe.current&&Ht(!1)}},[]),Ke=g.useCallback((a,s,i={})=>{const l=Kl(a),u=Ol(l),h=Gl(u);c(k=>$a(k,v.current,{description:"Activate board"})),y([]),r(h),b(h.nodes[0]?[h.nodes[0].id]:[]),oe(null),It(null),X(null),Et("board-activate"),f.emit(s,{boardId:h.id,...i})},[Et]),Di=g.useCallback(()=>{const a=Jd(v.current.settings);Ke(a,"board.local.create"),te({x:540,y:210,scale:1})},[Ke,te]),hu=g.useCallback(async a=>{if(!Ce){Ee("Login with Supabase is required before cloud boards can be opened."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:"load-board"});return}Eo(a.id),Ee(null);try{const s=await ih(Ss(),a.id,v.current.settings);if(!s){Ee("Cloud board was not found or is not available to this user.");return}Ke(s,"board.cloud.switch",{sourceBoardId:a.id}),te({x:540,y:210,scale:1})}catch(s){Ee(s instanceof Error?s.message:String(s))}finally{Eo(null)}},[Ke,te,Ce]),zo=g.useCallback(async(a,s)=>{if(!Ce){Ee("Login with Supabase is required before cloud boards can be saved."),f.emit("projectStorage.cloud.unavailable",{reason:"sign-in-required",source:s});return}ia(!0),Ee(null);try{const i=await lh(Ss(),a,ie.current,He.current);if(!i){Ee("Cloud board save did not return a board.");return}const l=new Date().toISOString(),u=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}},He.current);r(u),ea(u),Ye(kt()),Po(h=>[i,...h.filter(k=>k.id!==i.id)]),Ee(`Saved "${at(i.name)}" to cloud.`)}catch(i){Ee(i instanceof Error?i.message:String(i))}finally{ia(!1)}},[Ce]),fu=g.useCallback(()=>{zo(v.current,"save-current")},[zo]),bu=g.useCallback(()=>{const a=Jd(v.current.settings);zo(a,"new-cloud-board")},[zo]),yu=g.useCallback(()=>{var l;if(!re)return;if(re.options.length>0||!re.quickCreateTemplateId){const u=ie.current,h=Ue(),k={x:(h.width/2-u.x)/u.scale,y:(h.height/2-u.y)/u.scale},C=v.current.nodes,j=C.length?Math.max(...C.map(M=>M.x+M.width)):k.x-280-bs,S=C.length?Math.min(...C.map(M=>M.y)):k.y-310,I=yp(re,rt,j+bs,S,Kt,v.current.settings.appLanguage);r(M=>{var L;return c(J=>$a(J,M,{description:"Create template card"})),y([]),f.emit("templateCard.node.create",{id:I.id,launcherId:re.id,optionId:((L=I.metadata)==null?void 0:L.templateLauncherSelectedOptionId)??null,source:"launcher-panel"}),{...M,nodes:[...M.nodes,I],updatedAt:new Date().toISOString()}}),b([I.id]);const E=Math.min(ie.current.scale,ge((h.height-190)/I.height,.72,1)),B=Math.max(320,h.height-180);te({...ie.current,scale:E,x:h.width/2-(I.x+I.width/2)*E,y:48+B/2-(I.y+I.height/2)*E}),W(I.id),window.setTimeout(()=>W(M=>M===I.id?null:M),1e3),Gt(!1),Qe(null);const T="Template card added to the current canvas.";ke(T),window.setTimeout(()=>{ke(M=>M===T?null:M)},2200),f.emit("templateCard.node.focus",{nodeId:I.id,launcherId:re.id});return}const s=ls(Ge,Kt);if(s){Qe(s),f.emit("template.validation.failed",{launcherId:re.id,optionId:rt,templateId:(Ge==null?void 0:Ge.id)??null,message:s});return}const i=xp(re,rt,Kt,v.current.settings);if(!i){const u="Template could not be created.";Qe(u),f.emit("template.validation.failed",{launcherId:re.id,optionId:rt,templateId:(Ge==null?void 0:Ge.id)??null,message:u});return}Ke(i.board,"template.board.create",{launcherId:i.launcher.id,optionId:((l=i.option)==null?void 0:l.id)??null,templateId:i.template.id,nodes:i.board.nodes.length}),te({x:540,y:210,scale:1}),Gt(!1),Qe(null)},[Ke,Ge,re,te,Ue,rt,Kt]),Oi=g.useCallback(a=>{if(a===v.current.id){Et("stored-board-current");return}const s=tp(a);s&&(Ke(s,"board.local.switch"),te({x:540,y:210,scale:1}))},[Ke,te,Et]),Xs=g.useCallback((a,s="unknown")=>{if(a===v.current.id){f.emit("board.tabs.closeIgnored",{boardId:a,source:s,reason:"active-board"});return}f.emit("board.tabs.close",{boardId:a,source:s}),ap(a),Ye(kt())},[]),xu=g.useCallback((a,s)=>{if(!a||!s||a===s)return;ea(Ua(v.current,He.current));const i=kt(),l=nn.map(I=>I.id),u=l.indexOf(a),h=l.indexOf(s);if(u<0||h<0)return;const k=[...l],C=k.splice(u,1)[0];if(!C)return;k.splice(h,0,C);const j=i.map(I=>I.id).filter(I=>!k.includes(I)),S=np([...k,...j]);Ye(S),f.emit("board.tabs.drop",{sourceId:a,targetId:s,visibleIds:k})},[nn]),Cu=g.useCallback(async a=>{const s=++Fe.current;Ln(a.Id),xe(null);try{const i=await Kg(a,v.current.settings);if(s!==Fe.current)return;Ke(i,"board.localBridge.switch",{sourceBoardId:a.Id});const l=Kr(a.LastCameraX,a.LastCameraY,a.LastCameraZ);te(l?{...l,scale:ge(l.scale,vs,js)}:{x:540,y:210,scale:1})}catch(i){if(s!==Fe.current)return;xe(i instanceof Error?i.message:String(i))}finally{s===Fe.current&&Ln(null)}},[Ke,te]),ku=g.useCallback(()=>{var a;(a=Gn.current)==null||a.click()},[]),Su=g.useCallback(async a=>{var i;const s=Array.from(a??[]).filter(l=>/\.json$/i.test(l.name));if(s.length===0){ke("Choose a React or MindExec board JSON file."),window.setTimeout(()=>ke(null),1800);return}try{const l=await Promise.all(s.map(async I=>({file:I,payload:JSON.parse(await I.text())}))),u=l.find(Ur),h=ny(l),k=l.find(I=>!Ur(I)&&Fr(I.payload))??l.find(I=>!Ur(I)&&kc(I.payload)>0);if(!k)throw new Error("No board JSON file was found.");const C=Fr(k.payload)?null:oy(k,h),j=C?Kr(C.metadata.LastCameraX,C.metadata.LastCameraY,C.metadata.LastCameraZ):null,S=Fr(k.payload)?ay(k.payload,k.file.name):wc(k.payload,v.current.settings,{boardId:(C==null?void 0:C.metadata.Id)??Os(k.file.name),title:(C==null?void 0:C.metadata.Title)||Os(k.file.name),updatedAt:C==null?void 0:C.metadata.UpdatedAt,layoutPayload:u==null?void 0:u.payload,cameraBookmarks:C==null?void 0:C.metadata.CameraBookmarks,lastCursorX:C==null?void 0:C.metadata.LastCursorX,lastCursorY:C==null?void 0:C.metadata.LastCursorY});if(S.nodes.length===0)throw new Error("The selected file did not contain any importable board nodes.");Ke(S,"board.import.file",{fileName:k.file.name,layoutFileName:(u==null?void 0:u.file.name)??null,metadataFileName:(C==null?void 0:C.fileName)??null,nodes:S.nodes.length,edges:S.edges.length,sourceKind:((i=S.source)==null?void 0:i.kind)??null,originalBoardId:(C==null?void 0:C.metadata.Id)??null,cameraRestored:!!j}),ea(S),Ye(kt()),te(j?{...j,scale:ge(j.scale,vs,js)}:{x:540,y:210,scale:1}),ke(`Imported "${at(S.name)}".`),window.setTimeout(()=>ke(null),2200)}catch(l){const u=l instanceof Error?l.message:String(l);ke(`Import failed: ${u}`),f.emit("board.import.failed",{message:u}),window.setTimeout(()=>ke(null),3200)}},[Ke,te]);g.useEffect(()=>{te(ie.current,!1)},[te]);const xt=g.useCallback((a,s)=>{const i=ie.current,l=yt(a,s);return{x:(l.x-i.x)/i.scale,y:(l.y-i.y)/i.scale}},[yt]),Ho=g.useCallback((a,s,i={})=>{if(!Ld(a))return null;const l=i.snap??v.current.settings.gridSnap??!0,u=yb(a,l);if(He.current=u,ot(u),r(h=>{const k=Er(h);return k&&k.x===u.x&&k.y===u.y?h:{...Ua(h,u),updatedAt:new Date().toISOString()}}),f.emit("canvas.cursor.update",{reason:s,x:Math.round(u.x),y:Math.round(u.y),snapped:l,cameraTraceMode:v.current.settings.cameraTraceMode??"none"}),i.moveCamera&&i.cameraTarget&&Ld(i.cameraTarget)){const h=ie.current.scale,k=Ue();te({...ie.current,x:k.width/2-i.cameraTarget.x*h,y:k.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 u},[te,Ue]),Wo=g.useCallback((a,s,i)=>{const l=xt(a,s);return!!Ho(l,i,{snap:v.current.settings.gridSnap??!0})},[xt,Ho]),je=g.useCallback((a,s,i={})=>{var I;const l=i.width??300,u=i.height??160,h=Number.isFinite(a)&&Number.isFinite(s);if(!h&&(i.preferCursor??!0)&&v.current.settings.cursorMode==="lastNode")return{...He.current};const k=(I=qt.current)==null?void 0:I.getBoundingClientRect(),C=k?k.left+k.width/2:window.innerWidth/2,j=i.centerClientY??(k?k.top+k.height/2:window.innerHeight/2),S=h?xt(a,s):xt(C,j);return{x:S.x-l/2,y:S.y-u/2}},[xt]),Se=g.useCallback((a,s)=>{const i=v.current.settings.cursorDirection==="down"?"down":"right",l=i==="down"?{x:a.x,y:a.y+a.height+Id}:{x:a.x+a.width+Id,y:a.y};Ho(l,s,{cameraTarget:_r(a),moveCamera:v.current.settings.cameraTraceMode==="cursor",snap:v.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)})},[Ho]),wu=g.useCallback(a=>{Ms(a.target)||($.current={clientX:a.clientX,clientY:a.clientY})},[]),F=g.useCallback((a,s,i={})=>{r(l=>{c(h=>$a(h,l,{description:s,mergeKey:typeof i.mergeKey=="string"?i.mergeKey:null})),y([]);const u=a(l);return f.emit(s,i),{...u,updatedAt:new Date().toISOString()}})},[]);g.useEffect(()=>{const a=$p();if(!a)return;const{sourceNode:s,itemNodes:i,taskNode:l,edges:u}=Fp(a,{...je(void 0,void 0,{width:780,height:290})});if(v.current.nodes.some(h=>{var k;return((k=h.metadata)==null?void 0:k.ToolHandoffId)===a.id})){Yl(a.id),f.emit("tool.handoff.duplicateIgnored",{handoffId:a.id,toolKey:a.toolKey});return}F(h=>({...h,nodes:[...h.nodes,s,...i,l],edges:[...h.edges,...u]}),"tool.handoff.consumed",{handoffId:a.id,toolKey:a.toolKey,createdNodes:2+i.length,resultItems:i.length}),Yl(a.id),b([l.id]),W(l.id),Se(l,"tool.handoff.consumed"),window.setTimeout(()=>W(h=>h===l.id?null:h),1400)},[F,je,Se]);const mn=g.useCallback((a,s,i={})=>{r(l=>{const u=a(l);return f.emit(s,i),{...u,updatedAt:new Date().toISOString()}})},[]),qs=g.useCallback(a=>{const s=a.slice(0,90);mn(i=>({...i,name:s}),"board.rename",{boardId:v.current.id})},[mn]),Re=g.useCallback((a,s="inline")=>{const i=typeof a.appLanguage=="string"?{...a,appLanguage:hi(a.appLanguage)}:a;if(mn(l=>{const u={...l.settings,...i};if(typeof i.appLanguage=="string"){const h=Cp(l.nodes,u.appLanguage);return h.changed&&f.emit("template.localization.relocalized",{appLanguage:h.language,nodeCount:h.nodes.length,source:s}),{...l,settings:u,nodes:h.nodes}}return{...l,settings:u}},"settings.patch",{keys:Object.keys(i),source:s}),typeof i.appLanguage=="string"){const l=kp(i.appLanguage);f.emit("appLanguage.select",{appLanguage:l,source:s})}if(typeof i.model=="string"){const l=na(i.model),u=cc(l);f.emit("textModel.select",{model:l,provider:(u==null?void 0:u.provider)??"custom",source:s})}if(typeof i.executionMode=="string"||typeof i.directInstructionQueueMode=="string"){const l={...v.current.settings,...i};Up(l,s)}zp({...v.current.settings,...i})},[mn]),$i=g.useCallback((a,s)=>{Re({[a]:s},`inline.${String(a)}`)},[Re]),Vo=g.useMemo(()=>Fl(Sp,Ut.textModels),[Ut.textModels]),Fi=g.useMemo(()=>wp(n.settings,Vo),[n.settings,Vo]),_t=g.useMemo(()=>{const a=jy(Vo);return{Image:Ul("Image",uo("Image"),a,Ut.imageModels),Video:Ul("Video",uo("Video"),Ut.videoModels)}},[Ut.imageModels,Ut.videoModels,Vo]);g.useEffect(()=>{La.current=_t},[_t]);const Js=g.useMemo(()=>vo(n.settings,"Image",_t),[n.settings,_t]),Zs=g.useMemo(()=>vo(n.settings,"Video",_t),[n.settings,_t]),vu=na(n.settings.model),ju=g.useMemo(()=>zr(Fi,"Text",n.settings),[n.settings,Fi]),Iu=g.useMemo(()=>zr(uo("Image",_t),"Image",n.settings),[n.settings,_t]),Nu=g.useMemo(()=>zr(uo("Video",_t),"Video",n.settings),[n.settings,_t]),Au=g.useMemo(()=>ac(Js.aspectOptions),[Js.aspectOptions]),Mu=g.useMemo(()=>ac(Zs.aspectOptions),[Zs.aspectOptions]),Tu=g.useMemo(()=>Iy(),[]),Ru=g.useCallback((a,s="bottom-input")=>{const i=na(a);Re({model:i},`connection.model.${s}`)},[Re]),Lu=g.useCallback((a,s)=>{const i=uc(a,s),l=uo(a,La.current).find(j=>j.id===i);if(!l)return;const u=v.current.settings,h=a==="Image"?u.imageRouterImageAspectPresetId:u.imageRouterVideoAspectPresetId,k=Wr(a,l,h),C=a==="Image"?{imageRouterImageModel:l.id,imageRouterImageAspectPresetId:k.id}:{imageRouterVideoModel:l.id,imageRouterVideoAspectPresetId:k.id};Re(C,`inline.${a.toLowerCase()}Model`),f.emit("media.model.select",{mode:a,model:l.id,aspectPresetId:k.id,requestedSize:Vr(k)})},[Re]),Pu=g.useCallback((a,s)=>{const i=mc(a,v.current.settings,La.current),l=Wr(a,i,s),u=a==="Image"?{imageRouterImageAspectPresetId:l.id}:{imageRouterVideoAspectPresetId:l.id};Re(u,`inline.${a.toLowerCase()}Aspect`),f.emit("media.aspect.select",{mode:a,model:i.id,aspectPresetId:l.id,requestedSize:Vr(l)})},[Re]),Eu=g.useCallback(()=>{Fn(!0),f.emit("settings.dialog.open",{boardId:v.current.id})},[]),_u=g.useCallback(()=>{Fn(!1),f.emit("settings.dialog.close",{boardId:v.current.id})},[]),Ui=g.useCallback(()=>{me(!0),f.emit("promptDebug.open",{boardId:v.current.id})},[]),Bu=g.useCallback(()=>{me(!1),f.emit("promptDebug.close",{boardId:v.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:tg,onClick:Ui,active:wa,testId:"prompt-debug-open"}])},[t,Ui,wa]);const Du=g.useCallback(a=>{const s=v.current.settings.appLanguage,i=io(a,s);if(!i)return;const l=is(i),u=co(i,l==null?void 0:l.id,s);Bo(i.id),Za((l==null?void 0:l.id)??null),Qa(lo(u)),Qe(null),f.emit("template.launcher.select",{launcherId:i.id,optionId:(l==null?void 0:l.id)??null,templateId:(u==null?void 0:u.id)??null})},[]),Ou=g.useCallback(()=>{const a=v.current.settings.appLanguage,s=io(da,a)??ja[0];if(!s)return;const i=is(s,rt),l=co(s,i==null?void 0:i.id,a);Bo(s.id),Za((i==null?void 0:i.id)??null),Qa(u=>Object.keys(u).length>0?u:lo(l)),Qe(null),tn(!1),lt(!1),Gt(!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})},[da,rt,ja]),$u=g.useCallback(()=>{Gt(!1),Qe(null),f.emit("template.launcher.close",{launcherId:da})},[da]),Fu=g.useCallback(a=>{if(!re)return;const s=co(re,a,v.current.settings.appLanguage);Za(a),Qa(lo(s)),Qe(null),f.emit("template.option.select",{launcherId:re.id,optionId:a,templateId:(s==null?void 0:s.id)??null})},[re]),Uu=g.useCallback((a,s)=>{Qa(i=>({...i,[a]:s})),Wn&&Qe(null),f.emit("template.input.patch",{launcherId:re==null?void 0:re.id,key:a})},[re==null?void 0:re.id,Wn]),Xe=g.useCallback(a=>{$o(a),window.setTimeout(()=>{$o(s=>s===a?null:s)},2600)},[]),zu=g.useCallback(()=>{Gt(!1),lt(!1),Ia(a=>{const s=!a;return f.emit(s?"templateStudio.chooser.open":"templateStudio.chooser.close",{boardId:v.current.id,studioOpen:en}),s})},[en]),zi=g.useCallback(()=>{Ia(!1),f.emit("templateStudio.chooser.close",{boardId:v.current.id})},[]),Hi=g.useCallback(()=>{const a=v.current;Gt(!1),lt(!1),Ia(!1),Do(Ad(a.id,a.name)),it(null),tn(!0),f.emit("templateStudio.open",{boardId:a.id,nodeCount:a.nodes.length})},[]),Yo=g.useCallback(a=>{const s=v.current,i=ds(Ne,s.nodes);it(i),Md(s.id,Ne);const l=ea(Ua(s,He.current));return Ye(kt()),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},[Ne]),Wi=g.useCallback(()=>{Yo("exit"),tn(!1),Ia(!1),lt(!1),it(null),f.emit("templateStudio.close",{boardId:v.current.id})},[Yo]),Hu=g.useCallback(()=>{const a=dy(v.current.settings),s=ks(a.name);Ia(!1),lt(!1),Do(s),it(null),tn(!0),Md(a.id,s),ea(a),Ye(kt()),Ke(a,"templateStudio.board.create",{templateId:s.templateId,source:"template-studio-chooser"}),te({x:540,y:210,scale:1}),f.emit("templateStudio.chooser.startNew",{boardId:a.id,templateId:s.templateId}),Xe("New Template Studio draft board opened.")},[Ke,te,Xe]),Wu=g.useCallback(()=>{Hi(),f.emit("templateStudio.chooser.convertCurrent",{boardId:v.current.id,nodes:v.current.nodes.length}),Xe("Current board is now in Template Studio mode.")},[Hi,Xe]),Go=g.useCallback((a,s)=>{Do(i=>{const l={...i,[a]:a==="templateId"?yo(s):s};return f.emit("templateStudio.draft.patch",{key:a}),l}),it(null)},[]),Vu=g.useCallback(()=>{const a=Yo("save");Xe(a.issues.length>0?"Template draft saved with manifest issues.":"Template draft and board saved locally.")},[Yo,Xe]),Yu=g.useCallback(a=>{const s=Q("node"),i=zl(a),l=`${a.replace("template.","")}-${Date.now().toString(36)}`,u=a==="template.input",h=u?300:a==="template.prompt"?360:340,k=u?178:a==="template.prompt"?214:190,C=je(void 0,void 0,{width:h,height:k}),j={[K.studioNodeType]:a,[K.templateNodeId]:l,[K.templateRole]:a.replace(/^template\./,""),[K.compileTarget]:i,Source:"template-studio"};u&&(j[K.inputKey]=l,j[K.inputType]="text",j[K.inputRequired]="true");const S={id:s,kind:a==="template.prompt"?"ai-task":a==="template.section"?"markdown":"note",title:br(a),body:u?"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:C.x,y:C.y,width:h,height:k,status:a==="template.prompt"?"idle":void 0,tags:["Template Studio",br(a)],metadata:j};F(I=>({...I,nodes:[...I.nodes,S]}),"templateStudio.node.add",{id:S.id,studioNodeType:a,compileTarget:i}),b([S.id]),it(null),Se(S,"templateStudio.node.add")},[F,je,Se]),Qs=g.useCallback(()=>{const a=ds(Ne,v.current.nodes);return it(a),f.emit("templateStudio.compile",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length,issues:a.issues.length}),Xe(a.issues.length>0?"Template manifest has issues.":"Template manifest compiled."),a},[Xe,Ne]),Gu=g.useCallback(async()=>{const a=fe??ds(Ne,v.current.nodes);fe||it(a);const s=await xo(a.manifestJson);f.emit("templateStudio.manifest.copy",{templateId:a.template.id,chars:a.manifestJson.length,method:s}),Xe("Template manifest copied.")},[Xe,Ne,fe]),Ku=g.useCallback(()=>{const a=Qs();if(a.issues.length>0){lt(!1),f.emit("templateStudio.test.open.blocked",{templateId:a.template.id,issues:a.issues.length}),Xe("Fix manifest issues before test create.");return}Na(lo(a.template)),ca(null),lt(!0),f.emit("templateStudio.test.open",{templateId:a.template.id,inputs:a.template.inputs.length,nodes:a.template.nodes.length})},[Qs,Xe]),Xu=g.useCallback(()=>{lt(!1),Na({}),ca(null),f.emit("templateStudio.test.close",{templateId:(fe==null?void 0:fe.template.id)??null})},[fe==null?void 0:fe.template.id]),qu=g.useCallback((a,s)=>{Na(i=>({...i,[a]:s})),an&&ca(null),f.emit("templateStudio.test.input.patch",{key:a})},[an]),Ju=g.useCallback(()=>{const a=(fe==null?void 0:fe.issues.length)===0?fe:ds(Ne,v.current.nodes);if(it(a),a.issues.length>0){ca("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=ls(a.template,Xt);if(s){ca(s),f.emit("templateStudio.test.board.blocked",{templateId:a.template.id,message:s});return}const i=Td(Ne),l=vp(i,void 0,a.template,Xt,v.current.settings);ea(l.board),ea(Ua(v.current,He.current)),Ye(kt()),lt(!1),Na({}),Xe(`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})},[Xe,Ne,fe,Xt]),Zu=g.useCallback((a,s)=>{b(i=>s?i.includes(a)?i.filter(l=>l!==a):[...i,a]:[a]),oe(null)},[]),Qu=g.useCallback(()=>{var u,h,k,C,j,S,I,E;const i=je(void 0,void 0,{width:500,height:300,centerClientY:ge(window.innerHeight*.58,182,Math.max(182,window.innerHeight-150-96))}),l={id:Q("node"),kind:"memo",title:"Agent",body:rb,x:i.x,y:i.y,width:500,height:300,tags:["Agent Command","Researcher","Draft"],metadata:gy()};F(B=>({...B,nodes:[...B.nodes,l]}),"agentCommand.node.add",{id:l.id,semanticType:(u=l.metadata)==null?void 0:u.SemanticType,status:(h=l.metadata)==null?void 0:h.AgentCommandStatus,requestedRole:(k=l.metadata)==null?void 0:k.AgentCommandRequestedRole,adapterState:(C=l.metadata)==null?void 0:C.AdapterState}),f.emit("mindcanvas.agentCommand.add",{id:l.id,semanticType:(j=l.metadata)==null?void 0:j.SemanticType,status:(S=l.metadata)==null?void 0:S.AgentCommandStatus,requestedRole:(I=l.metadata)==null?void 0:I.AgentCommandRequestedRole,adapterState:(E=l.metadata)==null?void 0:E.AdapterState}),b([l.id]),oe(null),W(l.id),Se(l,"agentCommand.node.add"),window.setTimeout(()=>W(B=>B===l.id?null:B),1200)},[F,je,Se]),em=g.useCallback(()=>{var u,h,k,C,j,S,I,E;const i=je(void 0,void 0,{width:400,height:300,centerClientY:ge(window.innerHeight*.56,182,Math.max(182,window.innerHeight-150-96))}),l={id:Q("node"),kind:"memo",title:"Code Note",body:sb,x:i.x,y:i.y,width:400,height:300,tags:["Code Note","Draft","Unlinked"],metadata:hy()};F(B=>({...B,nodes:[...B.nodes,l]}),"codeNote.node.add",{id:l.id,semanticType:(u=l.metadata)==null?void 0:u.SemanticType,status:(h=l.metadata)==null?void 0:h.CodeNoteStatus,syncState:(k=l.metadata)==null?void 0:k.CodeNoteSyncState,adapterState:(C=l.metadata)==null?void 0:C.AdapterState}),f.emit("mindcanvas.codeNote.add",{id:l.id,semanticType:(j=l.metadata)==null?void 0:j.SemanticType,status:(S=l.metadata)==null?void 0:S.CodeNoteStatus,syncState:(I=l.metadata)==null?void 0:I.CodeNoteSyncState,adapterState:(E=l.metadata)==null?void 0:E.AdapterState}),b([l.id]),oe(null),W(l.id),Se(l,"codeNote.node.add"),window.setTimeout(()=>W(B=>B===l.id?null:B),1200)},[F,je,Se]),we=g.useCallback((a,s)=>{var I,E,B,T,M,L,J,Le,be;if(a==="remote-monitor"){const Z=v.current.nodes.find(za);if(Z){const gn=_r(Z),Da=ie.current.scale,ss=Ue(),rs=_d(Z.height,window.innerHeight);te({...ie.current,x:ss.width/2-gn.x*Da,y:rs-gn.y*Da}),b([Z.id]),W(Z.id),window.setTimeout(()=>W(ha=>ha===Z.id?null:ha),1e3);const so="Remote monitor already exists on this board. Focused existing node.";ke(so),window.setTimeout(()=>{ke(ha=>ha===so?null:ha)},2200),f.emit("remoteMonitor.node.duplicateIgnored",{action:"toolbar-add",nodeId:Z.id,surface:"mindcanvas-node"});return}}const i=s?Mi[s]:null,l=(i==null?void 0:i.mode)??(a==="image"?"Image":a==="video"?"Video":null),u=l?vo(v.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,k=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,C=a==="remote-monitor"?_d(k,window.innerHeight):window.innerHeight/2,j=je(void 0,void 0,{width:h,height:k,centerClientY:C}),S={id:Q("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
|
|
43
|
-
Leads,42,Validation
|
|
44
|
-
Trials,7,Launch
|
|
45
|
-
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
|
|
46
|
-
|
|
47
|
-
Write structured notes, docs, or prompt context here.`:"Write the thought, evidence, or reusable context here.",x:j.x,y:j.y,width:h,height:k,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"?si:void 0,metadata:i?my(v.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?Pi(v.current.settings,l):void 0};F(Z=>({...Z,nodes:[...Z.nodes,S]}),"node.add",{id:S.id,kind:a,automationKind:i==null?void 0:i.kind,...u?{mode:u.mode,model:u.model.id,aspectPresetId:u.aspect.id,requestedSize:u.requestedSize}:{}}),i&&f.emit("automation.mediaNode.add",{id:S.id,kind:i.kind,mode:i.mode,model:(I=S.metadata)==null?void 0:I.MediaModel,aspectPresetId:(E=S.metadata)==null?void 0:E.AspectPresetId,requestedSize:(B=S.metadata)==null?void 0:B.RequestedSize,adapterState:((T=S.metadata)==null?void 0:T.AdapterState)??"adapter-gated",externalActionPolicy:((M=S.metadata)==null?void 0:M.AutomationExternalActionPolicy)??"spec-only-until-review"}),a==="remote-monitor"&&f.emit("remoteMonitor.node.add",{id:S.id,surface:"mindcanvas-node",width:S.width,height:S.height,adapterState:((L=S.metadata)==null?void 0:L.AdapterState)??"adapter-gated"}),a==="mask"&&f.emit("node.mask.add",{id:S.id,hasImage:!!S.imageUrl,imageRouterMask:((J=S.metadata)==null?void 0:J.ImageRouterMask)??"true",semanticType:((Le=S.metadata)==null?void 0:Le.SemanticType)??"ImageEditMask",adapterState:((be=S.metadata)==null?void 0:be.AdapterState)??"adapter-gated"}),b([S.id]),Se(S,"node.add")},[te,F,je,Se]),ne=g.useCallback((a,s)=>{mn(i=>({...i,nodes:i.nodes.map(l=>l.id===a?{...l,...s}:l)}),"node.patch",{id:a,keys:Object.keys(s)})},[mn]),Qt=g.useCallback((a,s)=>{const i=q.current[0],l=v.current.nodes.find(u=>u.id===i);l&&(ne(i,{metadata:{...l.metadata??{},[a]:a===K.templateNodeId||a===K.inputKey?yo(s):s}}),it(null),f.emit("templateStudio.node.metadata.patch",{id:i,key:a}))},[ne]),Vi=g.useCallback(a=>{var h;const s=q.current[0],i=v.current.nodes.find(k=>k.id===s);if(!i)return;const l=((h=i.metadata)==null?void 0:h[K.templateNodeId])||yo(i.title),u={...i.metadata??{},[K.studioNodeType]:a,[K.templateNodeId]:l,[K.templateRole]:a.replace(/^template\./,""),[K.compileTarget]:zl(a,i)};a==="template.input"&&(u[K.inputKey]=u[K.inputKey]||yo(i.title),u[K.inputType]=u[K.inputType]||"text",u[K.inputRequired]=u[K.inputRequired]||"true"),ne(s,{metadata:u}),it(null),f.emit("templateStudio.node.role.assign",{id:s,studioNodeType:a})},[ne]),A=g.useCallback(a=>{ke(a),window.setTimeout(()=>{ke(s=>s===a?null:s)},2200)},[]),tm=g.useCallback((a,s,i)=>{var S;const l=v.current.nodes.find(I=>I.id===a);if(!l)return;const u=dc(l.body),h=jp(l,s,i,v.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}F(I=>({...I,nodes:[...I.nodes,...h.nodes]}),"templateCard.generate",{nodeId:a,launcherId:h.launcher.id,optionId:((S=h.option)==null?void 0:S.id)??null,templateId:h.template.id,runId:h.runId,generatedCount:h.nodes.length});const k=h.nodes.map(I=>I.id);b(k),W(k[0]??null);const C=h.nodes[h.nodes.length-1];C&&Se(C,"templateCard.generate"),window.setTimeout(()=>W(I=>I===k[0]?null:I),1200);const j=u!=null&&u.generatedMessageFormat?u.generatedMessageFormat.replace("{0}",String(h.nodes.length)):`${h.nodes.length} template node${h.nodes.length===1?"":"s"} generated below the card.`;A(j)},[F,Se,A]),am=g.useCallback(a=>{const s=v.current.nodes.find(I=>I.id===a.sourceNodeId),i=560,l=390,u=je(void 0,void 0,{width:i,height:l}),h=Q("node"),k=s?s.x+s.width+bs:u.x,C=s?s.y:u.y,j={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&&(j.RemoteFleetLatestFramePath=a.framePath),a.frameUrl&&(j.RemoteFleetLatestFrameUrl=a.frameUrl),a.dataUrl&&(j.RemoteFleetLatestFrameDataUrl=a.dataUrl),a.frameSeq&&(j.RemoteFleetLatestFrameSeq=String(a.frameSeq));const S={id:h,kind:"remote-control",title:a.deviceName||"Remote Device",body:`Remote device control: ${a.deviceId}`,x:k,y:C,width:i,height:l,tags:["Remote","Control","LocalBridge"],metadata:j};F(I=>({...I,nodes:[...I.nodes,S]}),"remoteControl.node.add",{id:S.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId}),b([S.id]),Se(S,"remoteControl.node.add"),A(`Remote control node created for ${a.deviceName||a.deviceId}.`),f.emit("remoteControl.node.add",{nodeId:S.id,sourceNodeId:a.sourceNodeId,deviceId:a.deviceId,connected:a.connected===!0})},[F,je,Se,Ue,A]),Pa=g.useCallback(a=>{const s=xs(ie.current)??{...Fa};Re({cameraBookmarks:{...v.current.settings.cameraBookmarks??{},[a]:s}},"camera.bookmark.save"),f.emit("camera.bookmark.save",{slot:a,...s}),A(`Camera slot ${a} saved.`)},[Re,A]),Zn=g.useCallback(a=>{var l;const s=xs((l=v.current.settings.cameraBookmarks)==null?void 0:l[a]),i=s??{...Fa};te(i),f.emit("camera.bookmark.goto",{slot:a,saved:!!s,...i}),A(s?`Camera slot ${a}.`:`Camera slot ${a} empty. Home view.`)},[te,A]),er=g.useCallback(()=>{te({...Fa}),f.emit("camera.bookmark.goto",{slot:"home",saved:!1,...Fa}),A("Home view.")},[te,A]),Yi=g.useCallback(a=>{const s=ie.current,i=Kf,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};te(l),f.emit("camera.keyboard.pan",{direction:a,...l})},[te]),Gi=g.useCallback(()=>{const a=Yn.current;return a?(a.focus(),a.select(),f.emit("globalInput.focus",{source:"keyboard"}),!0):!1},[]),tr=g.useCallback((a="keyboard")=>{const s=!(v.current.settings.wheelMode??!1);Re({wheelMode:s},`${a}.wheelMode.toggle`),f.emit("canvas.wheelMode.toggle",{source:a,wheelMode:s}),A(s?"Mouse wheel mode.":"Trackpad pan mode.")},[Re,A]),ar=g.useCallback((a="keyboard")=>{const i=(v.current.settings.cursorDirection==="down"?"down":"right")==="down"?"right":"down";Re({cursorDirection:i},`${a}.cursorDirection.toggle`),f.emit("canvas.cursorDirection.toggle",{source:a,cursorDirection:i}),A(i==="down"?"Cursor direction down.":"Cursor direction right.")},[Re,A]),Ko=g.useCallback(async(a,s="api")=>{const i=a===!0;try{if(i){if(document.fullscreenElement)return pa(!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 pa(l),f.emit("canvas.fullscreen.toggle",{source:s,active:l,fallback:!1}),l}return pa(!0),f.emit("canvas.fullscreen.toggle",{source:s,active:!0,fallback:!0}),!0}return document.fullscreenElement&&document.exitFullscreen&&await document.exitFullscreen(),pa(!1),f.emit("canvas.fullscreen.toggle",{source:s,active:!1,fallback:!1}),!1}catch(l){return pa(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}},[pa,A]),Qn=g.useCallback((a="keyboard")=>Ko(!ma.current,a),[Ko]);g.useEffect(()=>{const a=window,s={getMindCanvasFullscreenState:a.getMindCanvasFullscreenState,setMindCanvasFullscreen:a.setMindCanvasFullscreen,getMindCanvasReadModeState:a.getMindCanvasReadModeState,setMindCanvasReadMode:a.setMindCanvasReadMode,toggleMindCanvasReadMode:a.toggleMindCanvasReadMode},i=()=>ma.current,l=h=>Ko(h,"api"),u=()=>Qn("api");return a.getMindCanvasFullscreenState=i,a.setMindCanvasFullscreen=l,a.getMindCanvasReadModeState=i,a.setMindCanvasReadMode=l,a.toggleMindCanvasReadMode=u,_o(!0),f.emit("canvas.readMode.api.bound"),()=>{_o(!1),s.getMindCanvasFullscreenState?a.getMindCanvasFullscreenState=s.getMindCanvasFullscreenState:delete a.getMindCanvasFullscreenState,s.setMindCanvasFullscreen?a.setMindCanvasFullscreen=s.setMindCanvasFullscreen:delete a.setMindCanvasFullscreen,s.getMindCanvasReadModeState?a.getMindCanvasReadModeState=s.getMindCanvasReadModeState:delete a.getMindCanvasReadModeState,s.setMindCanvasReadMode?a.setMindCanvasReadMode=s.setMindCanvasReadMode:delete a.setMindCanvasReadMode,s.toggleMindCanvasReadMode?a.toggleMindCanvasReadMode=s.toggleMindCanvasReadMode:delete a.toggleMindCanvasReadMode,f.emit("canvas.readMode.api.unbound")}},[Ko,Qn]);const nm=g.useCallback(()=>{const a=v.current.settings.cameraBookmarks??{},s=Rr.find(i=>!a[i])??Rr[0];Pa(s)},[Pa]),om=g.useCallback(a=>{Dr(v.current.settings.gridType)!==a&&Re({gridType:a},`canvas.gridMode.${a}`)},[Re]),sm=g.useCallback(()=>{Re({gridSnap:!(v.current.settings.gridSnap??!0)},"canvas.gridSnap.toggle")},[Re]),rm=g.useCallback(a=>{const s=v.current.nodes.find(i=>i.id===a);!s||s.kind!=="directory"||(Yt(a),f.emit("node.directorySettings.open",{id:a}))},[]),im=g.useCallback(()=>{Yt(a=>(a&&f.emit("node.directorySettings.close",{id:a}),null))},[]),lm=g.useCallback((a,s)=>{const i=v.current.nodes.find(h=>h.id===a);if(!i||i.kind!=="directory")return;const l=An(s.DirectoryPath),u={...i.metadata??{},DirectoryPath:l,Include:s.Include??"",Exclude:s.Exclude??""};ne(a,{sourceFilePath:l||si,metadata:u}),Yt(null),f.emit("node.directorySettings.patch",{id:a,keys:["DirectoryPath","Include","Exclude"]}),A("Folder scan settings saved.")},[ne,A]),dm=g.useCallback(async a=>{const s=v.current.nodes.find(u=>u.id===a);if(!s||s.kind!=="directory")return;const i=cb(s);if(f.emit("node.directory.scan.requested",{id:a,hasBridgePath:!!i,hasHandle:zn.current.has(a)}),i){if(!tt()){se("blocked"),f.emit("node.directory.scan.bridge.blocked",{id:a,reason:"hosted-access-off"}),A("Hosted LocalBridge access is off.");return}try{const u=await ta();if(Be(u.status??null),se(u.state),u.state!=="connected"){f.emit("node.directory.scan.bridge.unavailable",{id:a,message:u.message||"LocalBridge is unavailable."}),A(u.message||"LocalBridge is unavailable.");return}const h=Oa(u.status);if(!h){se("unavailable"),f.emit("node.directory.scan.bridge.failed",{id:a,reason:"missing-token"}),A("LocalBridge read token is unavailable.");return}const k=Cs(i,48);A(`Scanning ${k}...`),f.emit("node.directory.scan.bridge.requested",{id:a,path:i});const C=await mb(i,s.metadata,h,u.baseUrl),j=new Date().toISOString();ne(a,{title:s.title==="Directory"||s.title==="New Folder"?k:s.title,body:Rd(k,C),sourceFilePath:i,metadata:{...s.metadata??{},DirectoryPath:i,DirectoryName:k,DirectoryScanSource:"localbridge",DirectoryFileCount:String(C.fileCount),DirectoryDirCount:String(C.directoryCount),DirectoryLastScanUtc:j,DirectoryScanTruncated:String(C.truncated),DirectoryPreview:JSON.stringify(C.preview.slice(0,Nn))}}),f.emit("node.directory.scan.bridge.completed",{id:a,path:i,fileCount:C.fileCount,directoryCount:C.directoryCount,truncated:C.truncated}),f.emit("node.directory.scan.completed",{id:a,source:"localbridge",directoryName:k,fileCount:C.fileCount,directoryCount:C.directoryCount,truncated:C.truncated}),A(`Scanned ${k}: ${C.fileCount} files, ${C.directoryCount} folders.`)}catch(u){const h=u instanceof Error?u.message:String(u);f.emit("node.directory.scan.bridge.failed",{id:a,message:h}),f.emit("node.directory.scan.failed",{id:a,source:"localbridge",message:h}),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 u=zn.current.get(a);u||(u=await l.showDirectoryPicker(),zn.current.set(a,u));const h={mode:"read"},k=u.queryPermission?await u.queryPermission(h):"granted";if((k==="granted"||!u.requestPermission?k:await u.requestPermission(h))!=="granted"){f.emit("node.directory.scan.denied",{id:a,directoryName:u.name}),A("Folder permission was not granted.");return}A(`Scanning ${u.name}...`);const j=await lb(u,s.metadata),S=new Date().toISOString();ne(a,{title:s.title==="Directory"||s.title==="New Folder"?u.name:s.title,body:Rd(u.name,j),sourceFilePath:u.name,metadata:{...s.metadata??{},DirectoryName:u.name,DirectoryScanSource:"browser-picker",DirectoryFileCount:String(j.fileCount),DirectoryDirCount:String(j.directoryCount),DirectoryLastScanUtc:S,DirectoryScanTruncated:String(j.truncated),DirectoryPreview:JSON.stringify(j.preview.slice(0,Nn))}}),f.emit("node.directory.scan.completed",{id:a,source:"browser-picker",directoryName:u.name,fileCount:j.fileCount,directoryCount:j.directoryCount,truncated:j.truncated}),A(`Scanned ${u.name}: ${j.fileCount} files, ${j.directoryCount} folders.`)}catch(u){if((u&&typeof u=="object"&&"name"in u?String(u.name):"")==="AbortError"){f.emit("node.directory.scan.cancelled",{id:a}),A("Folder scan cancelled.");return}f.emit("node.directory.scan.failed",{id:a,message:u instanceof Error?u.message:String(u)}),A("Folder scan failed in this browser context.")}},[ne,A]),Ki=g.useCallback(a=>{Bn(a.id),qa(at(a.name))},[]),nr=g.useCallback(()=>{Bn(null),qa("")},[]),or=g.useCallback(a=>{const s=at(Dn).slice(0,90);a===v.current.id?(qs(s),A("Board renamed.")):op(a,s)?(Ye(kt()),A("Saved board renamed.")):(f.emit("board.rename.failed",{boardId:a,scope:"stored"}),A("Board rename failed.")),Bn(null),qa("")},[qs,A,Dn]),cm=g.useCallback((a,s)=>{s.key==="Enter"?(s.preventDefault(),or(a)):s.key==="Escape"&&(s.preventDefault(),nr())},[nr,or]),um=g.useCallback(a=>{const s=v.current.nodes.find(l=>l.id===a);if(!fo(s))return;const i=s.aiEnabled===!1;ne(a,{aiEnabled:i}),f.emit("node.aiReference.toggled",{id:a,enabled:i}),A(i?"AI reference enabled.":"AI reference disabled.")},[ne,A]),Xo=g.useCallback(async(a,s,i,l,u)=>{Pt.current=a;try{const h=await xo(a);return et.current=0,f.emit(s,{...i,ok:!0,method:h}),A(l),h}catch(h){return et.current=Date.now()+15e3,f.emit(s,{...i,ok:!0,method:"react-local",clipboardUnavailable:!0,message:h instanceof Error?h.message:String(h)}),A(u),"react-local"}},[A]),mm=g.useCallback(async a=>{const s=v.current.nodes.find(l=>l.id===a);if(!s)return;const i=Ib(s);if(i)try{const l=await Nb(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){Pt.current=i,et.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 Xo(jb(s),"node.copy",{id:a},"Node content copied.","Node content copied inside this canvas.")},[Xo,A]),pm=g.useCallback(async(a,s)=>{await Xo(s,"node.embed.copyUrl",{id:a,sourceKind:s.split(":",1)[0]||"relative"},"Embed URL copied.","Embed URL copied inside this canvas.")},[Xo]),gm=g.useCallback(a=>{const s=v.current.nodes.find(l=>l.id===a);if(!fo(s))return;const i=Br(s);ne(a,{height:i}),f.emit("node.fitHeight",{id:a,height:i}),A("Node height fitted to text.")},[ne,A]),hm=g.useCallback(a=>{const s=v.current.nodes.find(k=>k.id===a);if(!fo(s))return;const i=Sb(s),l=i?Math.max(120,Math.round(s.originalHeight||Br(s))):Math.max(120,Math.min(s.height,Qf)),u=i?0:Math.round(s.height),h=i;F(k=>({...k,nodes:k.nodes.map(C=>C.id===a?{...C,height:l,isExpanded:h,originalHeight:u}:C)}),"node.expandCollapse",{id:a,expanded:h,height:l,originalHeight:u}),A(h?"Node expanded.":"Node collapsed.")},[F,A]),fm=g.useCallback(a=>{const s=v.current.nodes.find(l=>l.id===a);if(!s||s.kind!=="code")return;const i=s.wordWrap===!1;ne(a,{wordWrap:i}),f.emit("node.wordWrap.toggled",{id:a,enabled:i}),A(i?"Word wrap enabled.":"Word wrap disabled.")},[ne,A]),bm=g.useCallback((a,s)=>{const i=v.current.nodes.find(h=>h.id===a);if(!fo(i))return;const l=xb(s.executionMode),u=Array.from(new Set([...i.tags??[],"Company root",l,s.enableSubAgents?"sub-agents":"single-agent","adapter-gated"]));ne(a,{companyMode:"candidate",role:"Company root",tags:u,metadata:{...i.metadata??{},CompanyExecutionMode:s.executionMode,CompanyExecutionModeLabel:l,CompanySubAgents:String(s.enableSubAgents),CompanyStatus:"Staged",CompanyRootTitle:i.title,CompanyLastMessage:"Company staged locally. External CompanyCore execution requires an adapter.",CompanyStagedAt:new Date().toISOString()}}),f.emit("node.company.staged",{id:a,executionMode:s.executionMode,enableSubAgents:s.enableSubAgents}),A(`Company root staged locally as ${l}. Open CompanyCore to run it with an adapter later.`)},[ne,A]),ym=g.useCallback(a=>{var i;const s=v.current.nodes.find(l=>l.id===a);if(!(s!=null&&s.companyMode)){A("Stage this node as a Company root first.");return}bt(a),f.emit("companyGraph.open",{id:a,status:((i=s.metadata)==null?void 0:i.CompanyStatus)??"Staged"})},[A]),xm=g.useCallback(a=>{const s=v.current.nodes.find(i=>i.id===a);s!=null&&s.companyMode&&(ne(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."))},[ne,A]),Cm=g.useCallback(a=>{var l;const s=v.current.nodes.find(u=>u.id===a);if(!(s!=null&&s.companyMode))return;const i=((l=s.metadata)==null?void 0:l.CompanyStatus)||"Staged";ne(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}.`)},[ne,A]),km=g.useCallback(()=>{bt(a=>(a&&f.emit("companyGraph.close",{id:a}),null))},[]),Xi=g.useCallback((a,s)=>{const i=v.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(ne(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.`))},[ne,A]),qi=g.useCallback(a=>{var l;const s=v.current.nodes.find(u=>u.id===a);if(!(s!=null&&s.companyMode))return;const i=new Set(["Company root","adapter-gated","sub-agents","single-agent",((l=s.metadata)==null?void 0:l.CompanyExecutionModeLabel)??""]);ne(a,{companyMode:void 0,role:void 0,tags:(s.tags??[]).filter(u=>!i.has(u)),metadata:{...s.metadata??{},CompanyStatus:"Removed",CompanyLastMessage:"Company staging removed locally.",CompanyRemovedAt:new Date().toISOString()}}),bt(null),f.emit("companyGraph.remove",{id:a}),A("Company staging removed from this node.")},[ne,A]),Sm=g.useCallback((a,s)=>{const i=v.current.nodes.find(l=>l.id===a);i!=null&&i.companyMode&&(ne(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.`))},[ne,A]),wm=g.useCallback((a,s)=>{const i=s.trim();if(!i)return;const l=Q("node"),u=Q("edge");F(h=>{var j,S;const k=h.nodes.find(I=>I.id===a);if(!k)return h;const C={id:l,kind:"ai-task",title:"Company follow-up task",body:i,x:k.x+k.width+120,y:k.y+52,width:350,height:190,status:"idle",tags:["Company follow-up",((j=k.metadata)==null?void 0:j.CompanyExecutionModeLabel)??"Company"],metadata:{CompanyRootNodeId:k.id,CompanyExecutionMode:((S=k.metadata)==null?void 0:S.CompanyExecutionMode)??"Auto",CompanyTaskStatus:"Staged",CompanyStagedAt:new Date().toISOString()}};return{...h,nodes:[...h.nodes,C],edges:[...h.edges,{id:u,from:k.id,to:l,kind:"context"}]}},"companyGraph.followUp.staged",{rootId:a,taskId:l,chars:i.length}),b([l]),W(l),window.setTimeout(()=>W(h=>h===l?null:h),1400),A("Company follow-up task staged locally.")},[F,A]),vm=g.useCallback((a,s)=>{const i=Q("node"),l=Q("edge");F(u=>{const h=u.nodes.find(C=>C.id===a);if(!h)return u;const k={id:i,kind:"note",title:`Artifact: ${s.title}`.slice(0,90),body:s.content,x:h.x+h.width+120,y:h.y+290,width:360,height:220,tags:["Company artifact",s.type],metadata:{CompanyRootNodeId:h.id,CompanyArtifactType:s.type,CompanyArtifactSourceNodeId:s.sourceNodeId,CompanyAddedAt:new Date().toISOString()}};return{...u,nodes:[...u.nodes,k],edges:[...u.edges,{id:l,from:h.id,to:i,kind:"result"}]}},"companyGraph.artifact.added",{rootId:a,artifactNodeId:i,artifactType:s.type}),b([i]),W(i),window.setTimeout(()=>W(u=>u===i?null:u),1400),A("Company artifact added to the canvas.")},[F,A]),jm=g.useCallback((a,s="preview")=>{const i=wb(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"){It({url:i,fileName:vb(a)}),f.emit("node.pdf.preview.open",{id:a.id,urlKind:i.startsWith("http")?"url":"path"});return}if(a.kind==="embed"&&!Mn(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]),Im=g.useCallback(a=>{const s=q.current;F(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}),b(i=>{const l=i.filter(u=>u!==a);return f.emit("selection.repaired",{reason:"delete-node",beforeCount:s.length,afterCount:l.length,removedCount:i.length-l.length}),l}),oe(i=>i===a?null:i)},[F]),sr=g.useCallback(a=>{const s=Array.from(new Set(q.current));if(s.length===0)return;const i=new Set(s);F(l=>({...l,nodes:l.nodes.filter(u=>!i.has(u.id)),edges:l.edges.filter(u=>!i.has(u.from)&&!i.has(u.to))}),"node.delete",{ids:s,count:s.length,source:a}),b([]),f.emit("selection.repaired",{reason:"delete-selected",source:a,beforeCount:s.length,afterCount:0,removedCount:s.length}),oe(l=>l&&i.has(l)?null:l),bt(l=>l&&i.has(l)?null:l),Yt(l=>l&&i.has(l)?null:l),A(`Deleted ${s.length} selected node${s.length===1?"":"s"}.`)},[F,A]),qo=g.useCallback((a,s)=>{var B;const i=Array.from(new Set(a));if(i.length===0)return;const l=v.current,u=new Set(i),h=l.nodes.filter(T=>u.has(T.id));if(h.length===0)return;const k=h.filter(za),C=h.filter(T=>!za(T));if(k.length>0&&f.emit("remoteMonitor.node.duplicateIgnored",{action:"duplicate",source:s,skippedCount:k.length,nodeId:(B=k[0])==null?void 0:B.id}),C.length===0){const T=k[0]??l.nodes.find(za);T&&(b([T.id]),W(T.id),window.setTimeout(()=>W(M=>M===T.id?null:M),1e3)),A("Remote monitor is single-instance per board. Focused existing monitor.");return}const j=new Map(C.map(T=>[T.id,Q("node")])),S=C.map(T=>({...T,id:j.get(T.id),x:T.x+50,y:T.y-50,status:T.status==="running"?"idle":T.status,metadata:T.metadata?{...T.metadata}:void 0,tags:T.tags?[...T.tags]:void 0,imageStack:di(T.imageStack,T.id,j.get(T.id))})),I=l.edges.filter(T=>j.has(T.from)&&j.has(T.to)).map(T=>({...T,id:Q("edge"),from:j.get(T.from),to:j.get(T.to)}));F(T=>({...T,nodes:[...T.nodes,...S],edges:[...T.edges,...I]}),"node.duplicate",{source:s,count:S.length,edgeCount:I.length,sourceIds:i,duplicateIds:S.map(T=>T.id),skippedRemoteMonitorCount:k.length});const E=S.map(T=>T.id);b(E),W(E[0]??null),window.setTimeout(()=>W(T=>T===E[0]?null:T),1e3),A(k.length>0?`Duplicated ${S.length} node${S.length===1?"":"s"}; remote monitor stays single-instance.`:`Duplicated ${S.length} node${S.length===1?"":"s"}.`)},[F,A]),rr=g.useCallback(a=>{qo(q.current,a)},[qo]),eo=g.useCallback((a,s)=>{const i=Array.from(new Set(q.current));if(i.length===0)return;const l=new Set(i),u=v.current.nodes,h=u.filter(S=>l.has(S.id));if(h.length===0)return;const k=u.filter(S=>!l.has(S.id)),C=a==="front"?[...k,...h]:[...h,...k];if(!C.some((S,I)=>{var E;return S.id!==((E=u[I])==null?void 0:E.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}F(S=>({...S,nodes:C}),"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.`)},[F,A]),ir=g.useCallback(async()=>{const a=new Set(q.current),s=v.current.nodes.filter(u=>a.has(u.id));if(s.length===0)return;const i=v.current.edges.filter(u=>a.has(u.from)&&a.has(u.to)),l=Bb(s,i);de.current=l;try{const u=await xo(JSON.stringify(l));dt.current=0,f.emit("multiSelection.copy",{count:s.length,edgeCount:i.length,ok:!0,method:u}),A(`Copied ${s.length} selected node${s.length===1?"":"s"} for canvas paste.`)}catch(u){dt.current=Date.now()+15e3,f.emit("multiSelection.copy",{count:s.length,edgeCount:i.length,ok:!0,method:"react-local",clipboardUnavailable:!0,message:u instanceof Error?u.message:String(u)}),A(`Copied ${s.length} selected node${s.length===1?"":"s"} inside this canvas.`)}},[A]),Ea=g.useCallback((a,s,i)=>{const l=v.current.nodes.find(za),u=[],h=[];let k=!!l;for(const L of a.nodes){if(za(L)){if(k){u.push(L);continue}k=!0}h.push(L)}if(u.length>0&&f.emit("remoteMonitor.node.duplicateIgnored",{action:i,skippedCount:u.length,nodeId:l==null?void 0:l.id}),h.length===0){l&&(b([l.id]),W(l.id),window.setTimeout(()=>W(L=>L===l.id?null:L),1e3)),A("Remote monitor is single-instance per board. Focused existing monitor.");return}const C=Ts(h);if(!C)return;const j=new Map(h.map(L=>[L.id,Q("node")])),S=s.x-C.minX,I=s.y-C.minY,E=h.map(L=>({...L,id:j.get(L.id),x:L.x+S,y:L.y+I,status:L.status==="running"?"idle":L.status,tags:L.tags?[...L.tags]:void 0,metadata:L.metadata?{...L.metadata}:void 0,imageStack:di(L.imageStack,L.id,j.get(L.id))})),B=a.edges.filter(L=>j.has(L.from)&&j.has(L.to)).map(L=>({...L,id:Q("edge"),from:j.get(L.from),to:j.get(L.to)})),T=E.map(L=>L.id);F(L=>({...L,nodes:[...L.nodes,...E],edges:[...L.edges,...B]}),"clipboard.nodes.paste",{source:i,count:E.length,edgeCount:B.length,originX:Math.round(s.x),originY:Math.round(s.y),skippedRemoteMonitorCount:u.length}),b(T),oe(null),W(T[0]??null);const M=E[E.length-1];M&&Se(M,`clipboard.nodes.${i}`),window.setTimeout(()=>W(L=>L===T[0]?null:L),1200),A(u.length>0?`Pasted ${E.length} canvas node${E.length===1?"":"s"}; remote monitor stays single-instance.`:`Pasted ${E.length} canvas node${E.length===1?"":"s"}.`)},[F,Se,A]),to=g.useCallback((a,s,i)=>{const l=a.trim();if(!l)return;const u=Fd(l,s,`${i}-url`),h=u??Ud(l,s,i);F(k=>({...k,nodes:[...k.nodes,h]}),u?"clipboard.url.paste":"clipboard.text.paste",{source:i,id:h.id,kind:h.kind,chars:l.length}),b([h.id]),oe(null),W(h.id),Se(h,`clipboard.${i}.${h.kind}`),window.setTimeout(()=>W(k=>k===h.id?null:k),1200),A(`${i==="drop"?"Dropped":"Pasted"} ${h.kind==="file"?"URL reference":h.kind} node.`)},[F,Se,A]),Jo=g.useCallback(async(a,s,i)=>{const l=a.filter(h=>h.name||h.size>0);if(l.length===0)return;const u=v.current.id;try{const h=[];let k=s.x;for(const S of l){const I=await ty(S,{x:k,y:s.y},i);h.push(I),k+=I.width+bs}if(v.current.id!==u){f.emit("async.staleIgnored",{path:"canvas.fileIngest",source:i,boardId:u,currentBoardId:v.current.id,count:l.length});return}const C=h.map(S=>S.id);F(S=>({...S,nodes:[...S.nodes,...h]}),"canvas.files.ingested",{source:i,count:h.length,kinds:h.map(S=>S.kind)}),b(C),oe(null),W(C[0]??null);const j=h[h.length-1];j&&Se(j,`canvas.files.${i}`),window.setTimeout(()=>W(S=>S===C[0]?null:S),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.")}},[F,Se,A]);g.useEffect(()=>{const a=s=>{if(s.defaultPrevented||rc(s.target))return;const i=s.clipboardData;if(!i)return;const l=je(),u=Gd(i.files,i.items);if(u.length>0){s.preventDefault(),Jo(u,l,"paste");return}const h=dt.current>Date.now()?de.current:null;if(h){s.preventDefault(),Ea(h,l,"paste"),f.emit("clipboard.nodes.pasteLocalFallback",{count:h.nodes.length});return}const k=et.current>Date.now()?Pt.current:null;if(k){s.preventDefault(),to(k,l,"paste"),f.emit("clipboard.text.pasteLocalFallback",{chars:k.length}),et.current=0;return}const C=i.getData("text/plain"),j=$d(C);if(j){s.preventDefault(),Ea(j,l,"paste");return}const S=C.trim()?C:zd(i.getData("text/html"));S.trim()&&(s.preventDefault(),to(S,l,"paste"))};return document.addEventListener("paste",a),()=>document.removeEventListener("paste",a)},[je,Jo,to,Ea]);const Nm=g.useCallback(a=>{Ms(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")},[]),Am=g.useCallback(a=>{if(Ms(a.target))return;const s=Gd(a.dataTransfer.files,a.dataTransfer.items),i=a.dataTransfer.getData("text/uri-list"),l=a.dataTransfer.getData("text/plain"),u=zd(a.dataTransfer.getData("text/html")),h=je(a.clientX,a.clientY);if(s.length>0){a.preventDefault(),Jo(s,h,"drop");return}const k=(i||l||u).trim(),C=$d(l);if(C){a.preventDefault(),Ea(C,h,"drop");return}k&&(a.preventDefault(),to(k,h,"drop"))},[je,Jo,to,Ea]),Mm=g.useCallback(()=>{const a=new Set(q.current),s=new Set(v.current.nodes.filter(i=>a.has(i.id)&&fo(i)).map(i=>i.id));if(s.size===0){A("No text nodes in this selection.");return}F(i=>({...i,nodes:i.nodes.map(l=>s.has(l.id)?{...l,height:Br(l)}:l)}),"multiSelection.fitHeight",{count:s.size}),f.emit("multiSelection.fitHeight",{count:s.size}),A(`Fitted ${s.size} text node${s.size===1?"":"s"}.`)},[F,A]),lr=g.useCallback(a=>{const s=new Set(q.current),i=v.current.nodes.filter(B=>s.has(B.id)).sort((B,T)=>q.current.indexOf(B.id)-q.current.indexOf(T.id));if(i.length<2)return;const l=Ts(i);if(!l)return;const u=a==="tidy"?sy(i):i,h=28,k=Math.max(...u.map(B=>B.width)),C=Math.max(...u.map(B=>B.height)),j=u.map((B,T)=>({id:B.id,x:B.x,y:B.y,width:B.width,height:B.height,selectionIndex:T})),S=v.current.settings.gridSnap??!0;let I;a==="grid"?I={mode:"grid",order:"selectionOrder",columns:Math.max(2,Math.ceil(Math.sqrt(u.length))),cellWidth:k,cellHeight:C,gapX:h,gapY:h,sizeMode:"preserve",snapToGrid:S,gridSize:oa}:a==="strip"?I={mode:"stripHorizontal",order:"selectionOrder",targetHeight:C,gapX:h,sizeMode:"preserve",snapToGrid:S,gridSize:oa}:I={mode:"masonry",order:"spatialReading",anchor:"selectionBoundsTopLeft",maxColumns:12,gapX:24,gapY:24,quantile:.75,sizeMode:"preserve",snapToGrid:S,gridSize:oa};const E=dh(j,I,l);F(B=>({...B,nodes:B.nodes.map(T=>{const M=E.after.get(T.id);return M?{...T,x:M.x,y:M.y,width:M.width,height:M.height}:T})}),"multiSelection.arrange",{mode:a,count:i.length,layoutMode:I.mode,snapToGrid:S}),f.emit("multiSelection.arrange",{mode:a,count:i.length,layoutMode:I.mode,snapToGrid:S,boundsAfter:E.boundsAfter}),A(a==="tidy"?`Tidied ${i.length} selected nodes.`:`Arranged ${i.length} selected nodes as ${a}.`)},[F,A]),Tm=g.useCallback(()=>{const a=Array.from(new Set(q.current)),s=v.current,i=new Map(s.nodes.map(M=>[M.id,M])),l=a.map(M=>i.get(M)).filter(M=>!!(M&&M.kind==="image"&&ko(M).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 u=l[0],h=l.slice(1),k=new Date().toISOString(),C=new Set,j=ko(u),S=[];for(const M of j)S.push(Bd(M,u,C,k));for(const M of h)for(const L of ko(M))S.push(Bd(L,M,C,k));if(S.length<2){A("No stackable image variants found."),f.emit("multiSelection.mergeImageStacks.skipped",{reason:"not-enough-variants",selectedCount:a.length});return}const I=S.some(M=>{var L;return M.variantId===((L=u.imageStack)==null?void 0:L.activeVariantId)})?u.imageStack.activeVariantId:S[0].variantId,E=S.find(M=>M.variantId===I)??S[0],B=h.map(M=>M.id),T=new Set(B);F(M=>({...M,nodes:M.nodes.filter(L=>!T.has(L.id)).map(L=>{var J;return L.id===u.id?{...L,kind:"image",imageUrl:E.imageUrl,imageStack:{activeVariantId:I,variants:S,kind:"pile",title:((J=L.imageStack)==null?void 0:J.title)||L.title,updatedAtUtc:k},metadata:{...L.metadata??{},ImageStackKind:"pile",ImageStackPrimaryNodeId:u.id,ImageStackVariantCount:String(S.length),ImageStackMergedAtUtc:k,ImageStackRemovedNodeIds:B.join(","),ImageStackActiveVariantId:I},tags:Array.from(new Set([...L.tags??["image"],"Stack"])).slice(0,4)}:L}),edges:M.edges.filter(L=>!T.has(L.from)&&!T.has(L.to))}),"multiSelection.mergeImageStacks",{primaryNodeId:u.id,removedNodeIds:B,addedVariants:S.length-j.length,variantCount:S.length}),b([u.id]),oe(M=>M&&T.has(M)?null:M),bt(M=>M&&T.has(M)?null:M),Yt(M=>M&&T.has(M)?null:M),W(u.id),window.setTimeout(()=>W(M=>M===u.id?null:M),1200),A(`Stacked ${l.length} image nodes into ${S.length} variants.`)},[F,A]),Rm=g.useCallback(a=>{const s=q.current.includes(a)?q.current:[a];qo(s,"node-action")},[qo]),ga=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 B,T,M;const l=v.current.nodes.find(L=>L.id===a);if(!l||l.kind!=="ai-task")return;f.emit("automation.run.dequeued",{id:a,key:a,queuedBehindRunning:i});const u=(ln.current.get(a)??0)+1;ln.current.set(a,u);const h=Aa.current,k=(s==null?void 0:s.trim())||l.body,C=Li(Ri(l)),j=na(v.current.settings.model),S=Zd(v.current.settings.effort);ne(a,{status:"running",body:k,metadata:bo(l,{instruction:k,runState:"running",status:"running",statusLabel:"Running",sourceMode:C?"media-prompt-only":"ai-task",model:j,reasoningEffort:S})}),f.emit("automation.run",{id:a,mode:"single",seq:u,automationKind:C==null?void 0:C.kind});const I=()=>ln.current.get(a)===u&&Aa.current===h,E=L=>{if(!I()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}f.emit("localBridge.codex.fallback",{id:a,reason:L});const J=fy(k,l,L);ne(a,{status:"done",result:J,metadata:bo(l,{instruction:k,output:J,runState:"completed",status:C?"prepared":"done",statusLabel:C?"Spec only":"Done",sourceMode:C?"media-prompt-only":"local-draft",error:C?`External ${C.mode.toLowerCase()} generation was not executed.`:L,fallback:!0,partial:!!C,toolsUsed:C?`${C.toolHint}, Deterministic.Fallback, HumanReview.Gate`:"Deterministic.Fallback",toolWarnings:C?`External ${C.mode.toLowerCase()} generator was not invoked; this run prepared a spec only.`:"Local deterministic fallback was used; AI was not called.",model:j,reasoningEffort:S})}),oe(a)};if(!tt()){E("hosted-access-gated");return}try{const L=await ta();if(!I()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}if(se(L.state),Be(L.status??null),L.state!=="connected"){xe(L.message||"LocalBridge is unavailable."),E(L.message||"LocalBridge unavailable");return}const J=Oa(L.status);if(!J){E("LocalBridge token unavailable");return}const Le=ec(v.current,l,k);f.emit("localBridge.codex.run",{id:a,boardId:v.current.id});const be=await Hl({instruction:Le,workingDirectory:((T=(B=L.status)==null?void 0:B.project)==null?void 0:T.rootPath)||((M=L.status)==null?void 0:M.workspace)||void 0,sandbox:"read_only",model:j,reasoningEffort:S,approvalPolicy:"on-request",intent:"mindcanvas-ai-task",nodeKind:l.kind,webSearchMode:"disabled",networkAccessEnabled:!1},J,L.baseUrl);if(!I()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}if(!be.success||!be.finalResponse){const Z=be.error||"LocalBridge Codex returned no response.";f.emit("localBridge.codex.failed",{id:a,message:Z,status:be.status}),ne(a,{status:"blocked",result:Z,metadata:bo(l,{instruction:k,output:Z,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:C?"media-prompt-only":"ai-task",error:Z,fallback:!1,partial:!0,model:j,reasoningEffort:S})}),oe(a);return}ne(a,{status:"done",result:be.finalResponse,metadata:bo(l,{instruction:k,output:be.finalResponse,runState:"completed",status:C?"prepared":"done",statusLabel:C?"Spec only":"Done",sourceMode:C?"media-prompt-only":"ai-generated",error:C?`External ${C.mode.toLowerCase()} generation was not executed.`:"",fallback:!1,partial:!!C,toolsUsed:C?`AI.LLM, ${C.toolHint}, HumanReview.Gate`:"AI.LLM",toolWarnings:C?`External ${C.mode.toLowerCase()} generator was not invoked; this run prepared a spec only.`:"",model:j,reasoningEffort:S,providerKind:be.providerKind,threadId:be.threadId,turnId:be.turnId})}),f.emit("localBridge.codex.completed",{id:a,providerKind:be.providerKind,threadId:be.threadId,turnId:be.turnId}),oe(a)}catch(L){if(!I()){f.emit("async.staleIgnored",{path:"automation.run",id:a,seq:u});return}const J=L instanceof Error?L.message:String(L);f.emit("localBridge.codex.failed",{id:a,message:J}),ne(a,{status:"blocked",result:J,metadata:bo(l,{instruction:k,output:J,runState:"blocked",status:"blocked",statusLabel:"Blocked",sourceMode:C?"media-prompt-only":"ai-task",error:J,fallback:!1,partial:!0,model:j,reasoningEffort:S})}),oe(a)}})},[ne]),Ji=g.useCallback(async()=>{const a=q.current[0];if(!a){A("Select an AI Task to run its graph.");return}const s=ui(v.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,u]of i.entries())W(u.id),f.emit("automation.graph.currentNode",{id:u.id,title:u.title,index:l+1,count:i.length}),A(`Running ${l+1}/${i.length}: ${u.title}`),await ga(u.id);W(null),A(`Graph run complete: ${i.length} AI task${i.length===1?"":"s"}.`)},[ga,A]),Lm=g.useCallback(async a=>{if(a.result)try{const s=await xo(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]),Pm=g.useCallback(a=>{if(!a.result)return;const s=yy(a,{x:a.x+a.width+78,y:a.y}),i={id:Q("edge"),from:a.id,to:s.id,kind:"result"};F(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>oi}),b([s.id]),oe(null),W(s.id),window.setTimeout(()=>W(l=>l===s.id?null:l),1200),A("AI result archived as a Markdown node.")},[F,A]),Em=g.useCallback(a=>{if(!a.result)return;const s=xy(a,{x:a.x+a.width+78,y:a.y+Math.min(a.height+44,360)}),i={id:Q("edge"),from:a.id,to:s.id,kind:"result"};F(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}),b([s.id]),oe(null),W(s.id),window.setTimeout(()=>W(l=>l===s.id?null:l),1200),A("Follow-up AI Task staged from the result.")},[F,A]),Zi=g.useCallback(()=>{var rs,so,ha,Rl,Ll,Pl,El;const a=w.trim(),s=v.current.settings.inputMode,i=[...q.current],l=v.current.nodes.find(pe=>pe.id===i[0]),u=(l==null?void 0:l.kind)==="ai-task"?(a||l.body).trim():a;if(!u)return;const h=u.replace(/\s+/g," ").trim().toLowerCase(),k=window.location.pathname||"/mindcanvas",C=`${k}|${s}|${h}`,j=Date.now(),S=Xn.current;if((S==null?void 0:S.signature)===C&&j-S.at<=vd){f.emit("globalInput.duplicateIgnored",{routePath:k,inputMode:s,chars:u.length,windowMs:vd});return}Xn.current={signature:C,at:j};const I={routePath:k,inputMode:s,selectedNodeIds:i,chars:u.length};f.emit("globalInput.submit.snapshot",{...I,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"&&_(""),z(pe=>pe+1),f.emit("globalInput.submit.started",I);const E=pe=>{z(Dt=>Math.max(0,Dt-1)),f.emit("globalInput.submit.completed",{...I,status:pe})};if((l==null?void 0:l.kind)==="ai-task"){ga(l.id,a).then(()=>E("ai-task")).catch(pe=>{f.emit("globalInput.submit.completed",{...I,status:"ai-task-error",message:pe instanceof Error?pe.message:String(pe)}),z(Dt=>Math.max(0,Dt-1))});return}const B=je(void 0,void 0,{width:360,height:196}),T=Fd(u,B,"global-input-url"),M=T?null:Ti(u),L=!!(M&&/^https?:\/\//i.test(M)&&!Mn(M)),J=!T&&!L&&(s==="Image"||s==="Video")?s:null,Le=T??(L?Ud(u,B,"global-input-rejected-url"):null)??(J?qb(u,B,v.current.settings,J,"global-input-media",La.current):Xb(u,B,v.current.settings)),be=je(void 0,void 0,{width:Le.width,height:Le.height}),Z={...Le,x:be.x,y:be.y},gn=Z.kind==="ai-task",Da=T?"globalInput.url.add":L?"globalInput.rejectedUrl.add":J?"globalInput.media.add":"globalInput.aiTask.add",ss={id:Z.id,kind:Z.kind,chars:u.length,inputMode:s,...gn?{model:(rs=Z.metadata)==null?void 0:rs.TextModel,provider:(so=Z.metadata)==null?void 0:so.AiProvider,effort:(ha=Z.metadata)==null?void 0:ha.Effort}:{},...J?{mediaMode:J,mediaModel:(Rl=Z.metadata)==null?void 0:Rl.MediaModel,aspectPresetId:(Ll=Z.metadata)==null?void 0:Ll.AspectPresetId,requestedSize:(Pl=Z.metadata)==null?void 0:Pl.RequestedSize}:{}};if(gn){const pe=v.current,Dt={...pe,nodes:pe.nodes.some(gr=>gr.id===Z.id)?pe.nodes:[...pe.nodes,Z],updatedAt:new Date().toISOString()};c(gr=>$a(gr,pe,{description:Da,mergeKey:null})),y([]),v.current=Dt,f.emit(Da,ss),r(Dt)}else F(pe=>({...pe,nodes:pe.nodes.some(Dt=>Dt.id===Z.id)?pe.nodes:[...pe.nodes,Z]}),Da,ss);if(_(""),b([Z.id]),oe(null),W(Z.id),Se(Z,Da),window.setTimeout(()=>W(pe=>pe===Z.id?null:pe),1200),gn){f.emit("globalInput.aiTask.runRequested",{id:Z.id,chars:u.length,model:(El=Z.metadata)==null?void 0:El.TextModel}),A("AI task created from input and running."),ga(Z.id,u).then(()=>E("ai-task-created")).catch(pe=>{f.emit("globalInput.submit.completed",{...I,status:"ai-task-created-error",message:pe instanceof Error?pe.message:String(pe)}),z(Dt=>Math.max(0,Dt-1))});return}A(`Added ${Z.kind==="file"?"URL reference":Z.kind} node from input.`),E(T?"url-node":L?"rejected-url-node":J?"media-node":"text-node")},[F,je,w,Se,ga,A]),Qi=g.useCallback(async()=>{const a=ky(v.current),s=a.flat(),i=a.map(h=>h.filter(k=>k.status!=="running")).filter(h=>h.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(h=>h.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"}.`);let u=0;for(const[h,k]of i.entries())for(const C of k)u+=1,W(C.id),f.emit("automation.graph.currentNode",{id:C.id,title:C.title,index:u,count:l.length,graphIndex:h+1,graphCount:i.length}),A(`Running ${u}/${l.length}: ${C.title}`),await ga(C.id);W(null),A(`All graphs complete: ${l.length} AI task${l.length===1?"":"s"}.`)},[ga,A]),el=g.useCallback(()=>{const a=v.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}Aa.current+=1,F(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"}.`)},[F,A]),tl=g.useCallback(()=>{const a=v.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}Aa.current+=1,F(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}),oe(null),A(`Stopped ${a.length} active task${a.length===1?"":"s"}.`)},[F,A]),al=g.useCallback(async()=>{var C,j,S;if(cn.current)return;const a=v.current.nodes.find(I=>I.id===q.current[0]);if(!a)return;cn.current=!0;const s=++Ra.current;Ro(!0),A("Generating flow with AI planner...");const i=ou(a),l=Ci(v.current.settings.appLanguage,i);let u="language-fallback",h=null,k="";try{if(!tt())k="hosted-access-gated";else{const E=await ta();if(s!==Ra.current){f.emit("async.staleIgnored",{path:"automation.generateFlow",seq:s});return}if(se(E.state),Be(E.status??null),E.state!=="connected")k=E.message||"LocalBridge unavailable",xe(k);else{const B=Oa(E.status);if(!B)k="LocalBridge token unavailable";else{const T=Xg(i,v.current.settings.appLanguage);f.emit("localBridge.codex.run",{id:a.id,boardId:v.current.id,intent:"mindcanvas-generate-flow",appLanguage:l});const M=await Hl({instruction:T,workingDirectory:((j=(C=E.status)==null?void 0:C.project)==null?void 0:j.rootPath)||((S=E.status)==null?void 0:S.workspace)||void 0,sandbox:"read_only",model:na(v.current.settings.model),reasoningEffort:Zd(v.current.settings.effort),approvalPolicy:"on-request",intent:"mindcanvas-generate-flow",nodeKind:a.kind,webSearchMode:"disabled",networkAccessEnabled:!1},B,E.baseUrl);if(s!==Ra.current){f.emit("async.staleIgnored",{path:"automation.generateFlow",seq:s});return}const L=M.success?qg(M.finalResponse):null;L&&Jg(L,l)?(h=L,u="ai-generated",f.emit("automation.generateFlow.ai.completed",{id:a.id,count:L.nodes.length,appLanguage:l,providerKind:M.providerKind,threadId:M.threadId,turnId:M.turnId})):(k=M.success?"AI planner returned invalid or wrong-language JSON.":M.error||"LocalBridge Codex returned no flow response.",f.emit("automation.generateFlow.ai.failed",{id:a.id,appLanguage:l,reason:k,success:M.success,status:M.status}))}}}h||(h=cd(i,l),u="language-fallback",f.emit("automation.generateFlow.fallback",{id:a.id,count:h.nodes.length,appLanguage:l,reason:k||"planner-unavailable"}));const I=Qd(a,h,v.current.settings,u);F(E=>({...E,nodes:[...E.nodes,...I.nodes],edges:[...E.edges,...I.edges]}),"node.add",{reason:"generate-flow",count:I.nodes.length,sourceMode:u,appLanguage:I.language}),b(I.nodes.map(E=>E.id)),A(u==="ai-generated"?`Generated ${I.nodes.length} AI-planned flow nodes.`:`Generated ${I.nodes.length} local fallback flow nodes.`)}catch(I){const E=I instanceof Error?I.message:String(I),B=cd(i,l),T=Qd(a,B,v.current.settings,"language-fallback");f.emit("automation.generateFlow.failed",{id:a.id,appLanguage:l,message:E,fallbackCount:T.nodes.length}),F(M=>({...M,nodes:[...M.nodes,...T.nodes],edges:[...M.edges,...T.edges]}),"node.add",{reason:"generate-flow",count:T.nodes.length,sourceMode:"language-fallback",appLanguage:T.language,error:E}),b(T.nodes.map(M=>M.id)),A(`Generated ${T.nodes.length} fallback flow nodes.`)}finally{s===Ra.current&&(cn.current=!1,Ro(!1))}},[F,A]),nl=g.useCallback((a,s,i)=>{const l=typeof document<"u"?document.elementFromPoint(a,s):null,u=l instanceof HTMLElement?l.closest('[data-node-connector="true"]'):null,h=(u==null?void 0:u.dataset.connectorNodeId)??"",k=u==null?void 0:u.dataset.connectorSide;if(h&&h!==i&&ri(k)&&v.current.nodes.some(S=>S.id===h))return{id:h,side:k};const C=xt(a,s),j=[...v.current.nodes].reverse().find(S=>S.id!==i&&bb(C,S));return j?{id:j.id,side:fb(j,C)}:null},[xt]),_m=g.useCallback((a,s,i,l)=>{if(l.button!==0)return;l.preventDefault(),l.stopPropagation();const u=v.current.nodes.find(T=>T.id===a);if(!u)return;const h=$t(u,s);let k=h,C=null;const j=(T,M)=>{k=xt(T,M),C=nl(T,M,a),X(L=>!L||L.from!==a?L:{...L,pointer:k,target:C,dragging:!0})},S=()=>{document.body.classList.remove("is-connecting-node"),window.removeEventListener("pointermove",I),window.removeEventListener("pointerup",E),window.removeEventListener("pointercancel",B)},I=T=>{j(T.clientX,T.clientY)},E=T=>{if(j(T.clientX,T.clientY),S(),!C||C.id===a){X(null),f.emit("edge.drag.cancelled",{from:a,fromSide:s,kind:i});return}const M={id:Q("edge"),from:a,to:C.id,kind:i,fromSide:s,toSide:C.side};F(L=>({...L,edges:[...L.edges,M]}),"edge.add",{...M,source:"connector-drag"}),X(null),b([a,C.id]),oe(null),f.emit("edge.drag.completed",{...M})},B=()=>{S(),X(null),f.emit("edge.drag.cancelled",{from:a,fromSide:s,kind:i,reason:"pointer-cancelled"})};b(T=>T.includes(a)?T:[a]),oe(null),X({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",I),window.addEventListener("pointerup",E,{once:!0}),window.addEventListener("pointercancel",B,{once:!0})},[F,nl,xt]),Bm=g.useCallback((a,s,i="right")=>{if(G&&G.from!==a){const u={id:Q("edge"),from:G.from,to:a,kind:G.kind==="context"?"context":s,fromSide:G.fromSide,toSide:i};F(h=>({...h,edges:[...h.edges,u]}),"edge.add",{...u}),X(null);return}const l=v.current.nodes.find(u=>u.id===a);X({from:a,kind:s,fromSide:i,pointer:l?$t(l,i):He.current,target:null,dragging:!1})},[F,G]),Zo=g.useCallback(()=>{c(a=>{const s=a.at(-1);if(!s)return a;const i=s.board,l=q.current,u=sc(l,i);return y(h=>Ph(h,v.current,{description:s.description})),r(i),b(u),f.emit("history.undo",{boardId:i.id,selectedBefore:l.length,selectedAfter:u.length,selectionRepaired:u.length!==l.length||u.some((h,k)=>h!==l[k])}),f.emit("selection.repaired",{reason:"undo",beforeCount:l.length,afterCount:u.length}),a.slice(0,-1)})},[]),Qo=g.useCallback(()=>{y(a=>{const s=a[0];if(!s)return a;const i=s.board,l=q.current,u=sc(l,i);return c(h=>$a(h,v.current,{description:s.description})),r(i),b(u),f.emit("history.redo",{boardId:i.id,selectedBefore:l.length,selectedAfter:u.length,selectionRepaired:u.length!==l.length||u.some((h,k)=>h!==l[k])}),f.emit("selection.repaired",{reason:"redo",beforeCount:l.length,afterCount:u.length}),a.slice(1)})},[]);g.useEffect(()=>{const a=s=>{var j,S;if(!s.defaultPrevented&&s.ctrlKey&&!s.shiftKey&&!s.altKey&&!s.metaKey&&s.key==="Home"&&!s.repeat){s.preventDefault(),_i("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-function-toolbar"});return}if(s.defaultPrevented||rc(s.target))return;const i=s.key.toLowerCase(),l=s.ctrlKey||s.metaKey,u=!l&&!s.altKey&&!s.shiftKey,h=Oy(s.target);if(s.key==="Tab"&&u&&!s.repeat&&!h){s.preventDefault(),tr("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-wheel-mode",wheelMode:!(v.current.settings.wheelMode??!1)});return}if(s.key==="Enter"&&u&&!s.repeat&&!h&&Gi()){s.preventDefault(),f.emit("keyboard.shortcut",{action:"focus-global-input"});return}if(i==="f"&&u&&!s.repeat&&!h){s.preventDefault(),Qn("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-fullscreen"});return}if(i==="d"&&u&&!s.repeat){s.preventDefault(),ar("keyboard"),f.emit("keyboard.shortcut",{action:"toggle-cursor-direction"});return}if(i==="h"&&u&&!s.repeat){s.preventDefault(),er(),f.emit("keyboard.shortcut",{action:"camera-home"});return}const k=s.key==="ArrowUp"?"up":s.key==="ArrowDown"?"down":s.key==="ArrowLeft"?"left":s.key==="ArrowRight"?"right":null;if(k&&u){s.preventDefault(),Yi(k),f.emit("keyboard.shortcut",{action:"camera-pan",direction:k});return}if(i===ba&&!s.altKey&&!s.shiftKey){s.preventDefault(),l?(Pa(ba),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:ba})):(Zn(ba),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:ba}));return}if(/^[0-9]$/.test(s.key)&&!s.altKey){if(l&&!s.shiftKey){s.preventDefault(),Pa(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-save",slot:s.key});return}if(!l&&!s.shiftKey){s.preventDefault(),Zn(s.key),f.emit("keyboard.shortcut",{action:"camera-bookmark-goto",slot:s.key});return}}if(l&&i==="z"&&!s.shiftKey){s.preventDefault(),Zo(),f.emit("keyboard.shortcut",{action:"undo"});return}if(l&&i==="y"||l&&s.shiftKey&&i==="z"){s.preventDefault(),Qo(),f.emit("keyboard.shortcut",{action:"redo"});return}if(l&&i==="f"&&!s.altKey){s.preventDefault(),(j=rn.current)==null||j.focus(),(S=rn.current)==null||S.select(),f.emit("keyboard.shortcut",{action:"focus-search"});return}if(l&&i==="c"&&q.current.length>0){s.preventDefault(),ir(),f.emit("keyboard.shortcut",{action:"copy",count:q.current.length});return}if(l&&i==="v"&&de.current&&dt.current>Date.now()){const I=de.current;s.preventDefault(),Ea(I,je(),"paste"),f.emit("keyboard.shortcut",{action:"paste-local",count:I.nodes.length});return}if(l&&i==="d"){s.preventDefault(),rr("keyboard"),f.emit("keyboard.shortcut",{action:"duplicate",count:q.current.length});return}if(l&&s.key==="]"){s.preventDefault(),eo("front","keyboard"),f.emit("keyboard.shortcut",{action:"bring-front",count:q.current.length});return}if(l&&s.key==="["){s.preventDefault(),eo("back","keyboard"),f.emit("keyboard.shortcut",{action:"send-back",count:q.current.length});return}if(s.key==="Delete"||s.key==="Backspace"){if(q.current.length===0)return;s.preventDefault(),sr("keyboard"),f.emit("keyboard.shortcut",{action:"delete",count:q.current.length});return}if(s.key!=="Escape")return;let C=!1;wa&&(me(!1),C=!0),Ze&&(Fn(!1),C=!0),Hn&&(Gt(!1),C=!0),Ft&&(Et("keyboard"),C=!0),jt&&(It(null),C=!0),st&&(bt(null),C=!0),Vt&&(Yt(null),C=!0),G&&(X(null),C=!0),ue&&(oe(null),C=!0),N.trim()&&(D(""),V([]),ce(0),C=!0),q.current.length>0&&(b([]),C=!0),C&&(s.preventDefault(),f.emit("keyboard.shortcut",{action:"escape"}))};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[st,Et,G,ir,sr,Vt,rr,Gi,je,Zn,er,Ft,Yi,Ea,jt,wa,N,Qo,eo,ue,Pa,Ze,Hn,ar,_i,Qn,tr,Zo]);const Dm=g.useCallback(()=>{sp(),F(()=>({...Bl,updatedAt:new Date().toISOString()}),"board.restore",{source:"fixture-reset"}),b(["node-agent-command"]),Ye([]),Et("fixture-reset")},[Et,F]),dr=g.useCallback((a,s="result-click")=>{const i=_r(a),l=Ue(),u={...ie.current,x:l.width/2-i.x*ie.current.scale,y:l.height/2-i.y*ie.current.scale};te(u),b([a.id]),W(a.id),f.emit("search.focused",{query:N.trim(),nodeId:a.id,source:s}),window.setTimeout(()=>W(null),900)},[te,N,Ue]);g.useEffect(()=>{const a=++dn.current,s=By(ie.current,H);f.emit("search.started",{query:N,engine:ua.current?"worker":"local",viewportCenterX:Number(s.centerX.toFixed(2)),viewportCenterY:Number(s.centerY.toFixed(2))});const i=window.setTimeout(()=>{if(a!==dn.current){f.emit("async.staleIgnored",{path:"search",seq:a});return}if(!N.trim()){V([]),ce(0),Pe("none"),f.emit("search.completed",{query:N,count:0,engine:"none"});return}const u=Ma.current;if(u&&ua.current){u.postMessage({type:"SEARCH_QUERY",boardId:v.current.id,seq:a,query:N,limit:8,viewport:s});return}const h=performance.now(),k=Dy(v.current.nodes,N,s,8);V(k),ce(0),Pe("local"),f.emit("search.completed",{query:N,count:k.length,engine:"local",durationMs:Number((performance.now()-h).toFixed(2)),viewportBoosted:!0})},120);return()=>window.clearTimeout(i)},[N,H,ye]);const ao=g.useCallback(a=>{ce(s=>{const i=U.length;if(i===0)return 0;const l=(s+a+i)%i;return f.emit("search.activeChanged",{query:N.trim(),index:l,count:i}),l})},[N,U.length]),cr=g.useCallback(a=>{const s=U[Y];s&&dr(s,a)},[dr,Y,U]),Om=g.useCallback(a=>{if(a.key==="ArrowDown"){a.preventDefault(),ao(1);return}if(a.key==="ArrowUp"){a.preventDefault(),ao(-1);return}if(a.key==="Enter"){a.preventDefault(),cr("keyboard-enter");return}a.key==="Escape"&&(D(""),V([]),ce(0),f.emit("search.cleared"))},[cr,ao]),$m=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=v.current.nodes.find(I=>I.id===a);if(!l)return;c(I=>$a(I,v.current,{description:"Move nodes",mergeKey:null})),y([]);const u=q.current.includes(a)?q.current:[a],h=new Map(v.current.nodes.filter(I=>u.includes(I.id)).map(I=>[I.id,{x:I.x,y:I.y}])),k=h.get(a)??{x:l.x,y:l.y},C=v.current.settings.gridSnap??!0,j=I=>{const E=(I.clientX-i.x)/ie.current.scale,B=(I.clientY-i.y)/ie.current.scale,T=C?Od(k.x+E)-k.x:E,M=C?Od(k.y+B)-k.y:B;r(L=>({...L,nodes:L.nodes.map(J=>{const Le=h.get(J.id);return Le?{...J,x:Le.x+T,y:Le.y+M}:J}),updatedAt:new Date().toISOString()}))},S=()=>{window.removeEventListener("pointermove",j),window.removeEventListener("pointerup",S),f.emit("node.patch",{id:a,reason:"drag",gridSnap:C})};window.addEventListener("pointermove",j),window.addEventListener("pointerup",S,{once:!0})},[]),Fm=g.useCallback((a,s)=>{if(s.button!==0)return;s.preventDefault(),s.stopPropagation();const i=v.current.nodes.find(E=>E.id===a);if(!i)return;const l={x:s.clientX,y:s.clientY},u=Ab(i);let h={width:i.width,height:i.height};c(E=>$a(E,v.current,{description:"Resize node",mergeKey:null})),y([]),b(E=>E.includes(a)?E:[a]),oe(null),f.emit("node.resize.started",{id:a,width:Math.round(i.width),height:Math.round(i.height)});const k=()=>{document.body.classList.remove("is-resizing-node"),window.removeEventListener("pointermove",j),window.removeEventListener("pointerup",S),window.removeEventListener("pointercancel",I)},C=E=>{const B=(E.clientX-l.x)/ie.current.scale,T=(E.clientY-l.y)/ie.current.scale;let M=i.width+B,L=i.height+T;if(E.shiftKey&&i.width>0&&i.height>0){const J=Math.max(M/i.width,L/i.height);M=i.width*J,L=i.height*J}h={width:Math.round(ge(M,u.minWidth,u.maxWidth)),height:Math.round(ge(L,u.minHeight,u.maxHeight))},r(J=>({...J,nodes:J.nodes.map(Le=>Le.id===a?{...Le,...h}:Le),updatedAt:new Date().toISOString()}))},j=E=>{C(E)},S=E=>{C(E),k(),f.emit("node.resize.completed",{id:a,width:h.width,height:h.height})},I=()=>{k(),f.emit("node.resize.cancelled",{id:a})};document.body.classList.add("is-resizing-node"),window.addEventListener("pointermove",j),window.addEventListener("pointerup",S,{once:!0}),window.addEventListener("pointercancel",I,{once:!0})},[]),Um=g.useCallback(a=>{if(a.button!==0&&a.button!==1&&a.button!==2||Kd(a.target))return;if(a.button===0&&a.ctrlKey&&!a.shiftKey){a.preventDefault(),a.stopPropagation(),Wo(a.clientX,a.clientY,"ctrl-grid-click");return}a.preventDefault();const s={x:a.clientX,y:a.clientY},i=yt(a.clientX,a.clientY),l=a.shiftKey;if(a.button===0){const C=new Set(q.current);oe(null),nt({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 j=()=>{document.body.classList.remove("is-selecting"),window.removeEventListener("pointermove",S),window.removeEventListener("pointerup",I),window.removeEventListener("pointercancel",E)},S=B=>{const T=yt(B.clientX,B.clientY);nt({startX:i.x,startY:i.y,currentX:T.x,currentY:T.y})},I=B=>{const T=yt(B.clientX,B.clientY),M=qd({startX:i.x,startY:i.y,currentX:T.x,currentY:T.y});if(j(),nt(null),M.width<wd&&M.height<wd){const be=q.current.length;!l&&be>0&&(b([]),oe(null),f.emit("selection.cleared",{source:"canvas-background-click",beforeCount:be})),f.emit("selection.box.cancelled",{reason:"too-small",width:Math.round(M.width),height:Math.round(M.height)});return}const L=ly(M,ie.current),J=v.current.nodes.filter(be=>Xd(be,L)).map(be=>be.id),Le=l?Array.from(new Set([...C,...J])):J;b(Le),f.emit("selection.box.completed",{count:Le.length,additive:l,width:Math.round(M.width),height:Math.round(M.height)})},E=()=>{j(),nt(null),f.emit("selection.box.cancelled",{reason:"pointer-cancelled"})};document.body.classList.add("is-selecting"),window.addEventListener("pointermove",S),window.addEventListener("pointerup",I,{once:!0}),window.addEventListener("pointercancel",E,{once:!0});return}const u={...ie.current},h=C=>{te({...u,x:u.x+C.clientX-s.x,y:u.y+C.clientY-s.y})},k=()=>{document.body.classList.remove("is-panning"),window.removeEventListener("pointermove",h),window.removeEventListener("pointerup",k)};document.body.classList.add("is-panning"),window.addEventListener("pointermove",h),window.addEventListener("pointerup",k,{once:!0})},[te,yt,Wo]),zm=g.useCallback(a=>{a.button===0&&(Kd(a.target)||(a.preventDefault(),a.stopPropagation(),Wo(a.clientX,a.clientY,"double-click")))},[Wo]),ur=g.useCallback(a=>{const s=a.target instanceof Element?a.target:null;if(s!=null&&s.closest('[data-disable-mindcanvas-wheel="true"]'))return;const i=s==null?void 0:s.closest("textarea,.result-popover__body,.mindcanvas-text-scrollable-view"),l=a.ctrlKey||a.metaKey;if(i&&!l)return;const u=v.current.settings.wheelMode?l:!l;a.preventDefault();const h=ie.current;if(u){const k=Math.exp(-a.deltaY*.0012),C=ge(h.scale*k,vs,js),j=xt(a.clientX,a.clientY),S=yt(a.clientX,a.clientY);te({x:S.x-j.x*C,y:S.y-j.y*C,scale:C});return}te({...h,x:h.x-a.deltaX,y:h.y-a.deltaY})},[te,yt,xt]);g.useEffect(()=>{const a=qt.current;if(a)return a.addEventListener("wheel",ur,{passive:!1}),()=>a.removeEventListener("wheel",ur)},[ur]);const ae=n.nodes.find(a=>a.id===p[0]),pn=g.useMemo(()=>{const a=new Set(p);return n.nodes.filter(s=>a.has(s.id))},[n.nodes,p]),no=((fl=ae==null?void 0:ae.metadata)==null?void 0:fl[K.studioNodeType])??"",Hm=no?br(no):"Unassigned",Wm=no==="template.input",ol=g.useMemo(()=>Td(Ne),[Ne]),es=fe&&fe.issues.length===0?fe.template:null,sl=g.useMemo(()=>ls(es,Xt),[Xt,es]),Vm=g.useMemo(()=>pn.filter(a=>a.kind==="image"&&ko(a).length>0).length,[pn]),ct=g.useMemo(()=>{const a=n.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}},[n.nodes]),ts=g.useMemo(()=>{if(!ae||ae.kind!=="ai-task")return{size:0,runnable:0};const a=ui(n,ae.id);return{size:a.length,runnable:a.filter(s=>s.status!=="running").length}},[n,ae]),_a=g.useMemo(()=>{if(pn.length<2)return null;const a=Ts(pn);if(!a)return null;const s=Math.max(.01,P.scale),i=a.minX*s+P.x-10,l=a.minY*s+P.y-10,u=a.maxX*s+P.x+10,h=a.maxY*s+P.y+10,k=(i+u)/2,C=l>112?l-52:h+12;return{left:i,top:l,width:Math.max(0,u-i),height:Math.max(0,h-l),toolbarLeft:ge(k,168,Math.max(168,H.width-168)),toolbarTop:ge(C,42,Math.max(42,H.height-58))}},[pn,H.height,H.width,P]),Bt=ue?n.nodes.find(a=>a.id===ue):null,as=Bt?by(Bt):null,rl=st?n.nodes.find(a=>a.id===st&&!!a.companyMode):null,il=Vt?n.nodes.find(a=>a.id===Vt&&a.kind==="directory"):null,ll=g.useMemo(()=>new Set([...p,...U.map(a=>a.id),mt,ue,st,Vt,G==null?void 0:G.from].filter(a=>!!a)),[st,G==null?void 0:G.from,Vt,mt,ue,U,p]),Ba=g.useMemo(()=>{const a=iy(At,H);return n.nodes.filter(s=>ll.has(s.id)||Xd(s,a))},[ll,n.nodes,H,At]),mr=g.useMemo(()=>new Set(Ba.map(a=>a.id)),[Ba]);g.useEffect(()=>{f.emit("visibility.culled",{visible:Ba.length,total:n.nodes.length,scale:Number(At.scale.toFixed(3))})},[n.nodes.length,At.scale,Ba.length]);const Ym=g.useCallback(()=>{const a=v.current,s=q.current.map(l=>a.nodes.find(u=>u.id===l)).find(Boolean),i=(s==null?void 0:s.kind)==="ai-task"?s:a.nodes.find(l=>q.current.includes(l.id)&&l.kind==="ai-task")??a.nodes.find(l=>l.kind==="ai-task");return i?ec(a,i,w.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(w||(s==null?void 0:s.body)||"No prompt input.",4e3)].join(`
|
|
48
|
-
`)},[w]),dl=g.useMemo(()=>{const a=new Map(n.nodes.map(s=>[s.id,s]));return n.edges.map(s=>{const i=a.get(s.from),l=a.get(s.to);if(!i||!l)return null;const u=s.fromSide??"right",h=s.toSide??"left",k=$t(i,u),C=$t(l,h);return{...s,path:Ed(k,u,C,h)}}).filter(Boolean)},[n.edges,n.nodes]),ns=g.useMemo(()=>{var k,C;if(!G)return null;const a=new Map(n.nodes.map(j=>[j.id,j])),s=a.get(G.from);if(!s)return null;const i=$t(s,G.fromSide),l=G.target?a.get(G.target.id):null,u=((k=G.target)==null?void 0:k.side)??hb(G.fromSide),h=l?$t(l,u):G.pointer;return{kind:G.kind,targetId:((C=G.target)==null?void 0:C.id)??null,path:Ed(i,G.fromSide,h,u)}},[n.nodes,G]),cl=g.useMemo(()=>dl.filter(a=>mr.has(a.from)||mr.has(a.to)),[dl,mr]),ut=g.useMemo(()=>ry(n.nodes,P,H),[n.nodes,P,H]),Gm=g.useCallback(a=>{if(!ut)return;const s=a.currentTarget.getBoundingClientRect(),i=ge(a.clientX-s.left,0,Is),l=ge(a.clientY-s.top,0,Ns),u=ut.bounds.minX+(i-xn)/ut.scale,h=ut.bounds.minY+(l-xn)/ut.scale;te({...ie.current,x:H.width/2-u*ie.current.scale,y:H.height/2-h*ie.current.scale}),f.emit("minimap.navigate",{worldX:Math.round(u),worldY:Math.round(h)})},[te,ut,H.height,H.width]),Ct=n.settings.inputMode==="Image"?"Image":n.settings.inputMode==="Video"?"Video":null,pr=Ct==="Image"?Js:Ct==="Video"?Zs:null,Km=w.trim().length>0||(ae==null?void 0:ae.kind)==="ai-task",ul=N.trim().length>0,ml=U[Y]??null,Xm=ul?`${U.length} result${U.length===1?"":"s"}`:`${n.nodes.length} nodes`,oo=vt?qd(vt):null,os=Dr(n.settings.gridType),pl=n.settings.gridSnap??!0,gl=n.settings.cameraBookmarks??{},hl=Ft,qm=va==="full",R=a=>fi(n.settings.appLanguage,a);return o.jsxs("div",{ref:qt,className:`mindcanvas ${Lt?"mindcanvas--read-mode":""} mindcanvas--function-toolbar-${va}`,"data-function-toolbar-mode":va,"data-read-mode":Lt?"true":"false","data-read-mode-api":Un?"bound":"unbound","data-cursor-mode":n.settings.cursorMode??"center","data-cursor-direction":n.settings.cursorDirection==="down"?"down":"right",onPointerMove:wu,onDragOver:Nm,onDrop:Am,children:[o.jsx("div",{ref:Jt,className:`canvas-plane canvas-plane--grid-${os}`,"data-grid-type":os,"data-grid-snap":n.settings.gridSnap??!0?"on":"off",onPointerDown:Um,onDoubleClick:zm,onContextMenu:a=>a.preventDefault(),children:o.jsxs("div",{ref:sn,className:"canvas-world","data-visible-nodes":Ba.length,"data-total-nodes":n.nodes.length,"data-visible-edges":cl.length,children:[o.jsxs("svg",{className:"edge-layer",width:"4000",height:"3000",viewBox:"-1200 -900 4000 3000","aria-hidden":"true",children:[cl.map(a=>o.jsx("path",{className:`edge-path edge-path--${a.kind}`,d:a.path,onClick:()=>F(s=>({...s,edges:s.edges.filter(i=>i.id!==a.id)}),"edge.delete",{id:a.id})},a.id)),ns&&o.jsx("path",{className:`edge-path edge-path--${ns.kind} edge-path--draft ${ns.targetId?"has-target":""}`,d:ns.path,"data-testid":"edge-connection-preview"})]}),o.jsx("div",{className:"canvas-cursor-marker","data-testid":"canvas-cursor-marker","data-cursor-mode":n.settings.cursorMode??"center","data-cursor-direction":n.settings.cursorDirection==="down"?"down":"right",style:{left:`${gt.x}px`,top:`${gt.y}px`},"aria-hidden":"true"}),Ba.map(a=>o.jsx(jf,{node:a,selected:p.includes(a.id),selectionCount:p.length,pulsing:mt===a.id,connectionDraft:G,onSelect:Zu,onDragStart:$m,onResizeStart:Fm,onPatch:ne,onDelete:Im,onDuplicate:Rm,onRun:ga,onPin:Bm,onConnectorDragStart:_m,onOpenResult:oe,onToggleAiReference:um,onCopyNode:mm,onCopyEmbedReference:pm,onFitNodeHeight:gm,onToggleNodeExpanded:hm,onToggleWordWrap:fm,onStageCompany:bm,onOpenCompanyGraph:ym,onSyncCompanyGoal:xm,onRefreshCompany:Cm,onSetCompanyStatus:Xi,onRemoveCompany:qi,onOpenAsset:jm,onOpenDirectorySettings:rm,onScanDirectory:dm,onCreateRemoteControl:am,onGenerateTemplateCard:tm,appLanguage:n.settings.appLanguage},a.id))]})}),oo?o.jsx("div",{className:"canvas-selection-box",style:{left:oo.left,top:oo.top,width:oo.width,height:oo.height}}):null,_a?o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"canvas-multi-selection-bounds",style:{left:_a.left,top:_a.top,width:_a.width,height:_a.height}}),o.jsxs("div",{className:"multi-selection-toolbar floating-panel",role:"toolbar","aria-label":R("Multi selection actions"),style:{left:_a.toolbarLeft,top:_a.toolbarTop},children:[o.jsx("span",{className:"multi-selection-toolbar__count",children:pn.length}),o.jsx("button",{type:"button",title:R("Copy selected nodes"),"data-testid":"multi-selection-copy",onClick:()=>void ir(),children:o.jsx(So,{size:15})}),o.jsx("button",{type:"button",title:R("Duplicate selected nodes"),onClick:()=>rr("multi-toolbar"),children:o.jsx(fc,{size:15})}),o.jsx("button",{type:"button",title:R("Bring selected nodes to front"),"data-testid":"multi-selection-bring-front",onClick:()=>eo("front","multi-toolbar"),children:o.jsx(ag,{size:15})}),o.jsx("button",{type:"button",title:R("Send selected nodes to back"),"data-testid":"multi-selection-send-back",onClick:()=>eo("back","multi-toolbar"),children:o.jsx(ng,{size:15})}),o.jsx("button",{type:"button",title:R("Fit selected text heights"),onClick:Mm,children:o.jsx(Ql,{size:15})}),o.jsx("span",{className:"multi-selection-toolbar__separator"}),o.jsx("button",{type:"button",title:R("Arrange selected nodes as grid"),onClick:()=>lr("grid"),children:o.jsx(ed,{size:15})}),o.jsx("button",{type:"button",title:R("Arrange selected nodes as strip"),onClick:()=>lr("strip"),children:o.jsx(td,{size:15})}),o.jsx("button",{type:"button",title:R("Tidy selected nodes"),"data-testid":"multi-selection-tidy",onClick:()=>lr("tidy"),children:o.jsx(ad,{size:15})}),Vm>=2&&o.jsx("button",{type:"button",title:R("Stack selected image nodes"),"data-testid":"multi-selection-merge-images",onClick:Tm,children:o.jsx(cs,{size:15})}),o.jsx("span",{className:"multi-selection-toolbar__separator"}),o.jsx("button",{type:"button",title:R("Delete selected nodes"),className:"is-danger","data-testid":"multi-selection-delete",onClick:()=>sr("multi-toolbar"),children:o.jsx(Ps,{size:15})}),o.jsx("button",{type:"button",title:R("Clear selection"),"data-testid":"multi-selection-clear",onClick:()=>{const a=q.current.length;b([]),f.emit("selection.cleared",{source:"multi-toolbar",beforeCount:a})},children:o.jsx(Ot,{size:15})})]})]}):null,Rn&&o.jsx("div",{className:"node-action-toast floating-panel",role:"status",children:Rn}),o.jsxs("div",{className:"top-tabbar",role:"tablist","aria-label":"MindCanvas boards",children:[nn.map(a=>{const s=a.id===n.id,i=at(a.name),l=Mb(a,n,s);return o.jsxs("div",{className:`tab-shell ${s?"is-active":""} ${Wt===a.id?"is-dragging":""} ${$n===a.id?"is-drag-over":""}`,"data-testid":"board-tab-shell",draggable:!0,"data-board-id":a.id,"data-board-tab-active":s?"true":"false","data-board-tab-drag-state":Wt===a.id?"dragging":$n===a.id?"over":"idle",onDragStart:u=>{u.dataTransfer.effectAllowed="move",u.dataTransfer.setData("text/plain",a.id),On(a.id),f.emit("board.tabs.dragStart",{boardId:a.id})},onDragOver:u=>{!Wt||Wt===a.id||(u.preventDefault(),u.dataTransfer.dropEffect="move",la(a.id))},onDragLeave:()=>{la(u=>u===a.id?null:u)},onDrop:u=>{u.preventDefault();const h=Wt||u.dataTransfer.getData("text/plain");xu(h,a.id),On(null),la(null)},onDragEnd:()=>{On(null),la(null)},onMouseDown:u=>{u.button===1&&(u.preventDefault(),Xs(a.id,"middle-click"))},children:[o.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?du():Oi(a.id),children:[a.sourceKind==="localBridge"?o.jsx(mo,{size:15}):o.jsx(cs,{size:15}),o.jsx("span",{children:l})]}),!s&&o.jsx("button",{type:"button",className:"tab-close",title:R("Close tab"),"data-testid":"board-tab-close",onClick:u=>{u.stopPropagation(),Xs(a.id,"close-button")},children:o.jsx(Ot,{size:13})})]},a.id)}),o.jsx("button",{type:"button",className:"tab-button tab-button--plain",title:R("New board"),"data-testid":"board-create",onClick:Di,children:o.jsx(Co,{size:16})})]}),Ft&&o.jsxs(o.Fragment,{children:[o.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:()=>Et("backdrop")}),o.jsx("div",{className:"project-gallery-shell","data-project-gallery-shell":"true",children:o.jsx("div",{className:"project-gallery-positioner","data-project-gallery-positioner":"true",children:o.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":$e.currentMode,"data-project-storage-selected-tab":Ve,"data-project-storage-local-provider":$e.localProviderKind,"data-project-storage-cloud-available":$e.isCloudAvailable?"true":"false","data-project-storage-can-sync-cloud":$e.canSyncLocalToCloud?"true":"false",children:[o.jsxs("header",{className:"local-board-panel__head project-gallery-panel__head",children:[o.jsxs("div",{className:"project-gallery-title",children:[o.jsxs("span",{className:"project-gallery-title__eyebrow",children:[o.jsx(ed,{size:15}),"Project Gallery"]}),o.jsx("strong",{children:"Projects"}),o.jsx("p",{children:"Select a canvas snapshot to focus an open tab or load it in a new tab."})]}),o.jsxs("div",{className:"local-board-panel__actions project-gallery-panel__actions",children:[o.jsx("button",{type:"button",title:"New board",onClick:Di,children:o.jsx(Co,{size:15})}),o.jsx("button",{type:"button",title:"Close Project Gallery",onClick:()=>Et("close-button"),children:o.jsx(Ot,{size:15})})]})]}),o.jsxs("div",{className:"project-gallery-body",children:[o.jsxs("aside",{className:"project-gallery-folder-rail","data-project-gallery-folder-rail":"true",children:[o.jsxs("div",{className:"project-storage-tabs",role:"tablist","aria-label":"Project storage mode","data-project-storage-show-local":$e.showLocalTab?"true":"false","data-project-storage-show-cloud":$e.showCloudTab?"true":"false",children:[o.jsxs("button",{type:"button",role:"tab","aria-selected":Ve==="local",className:Ve==="local"?"is-active":"","data-testid":"project-storage-tab-local",onClick:()=>Bi("local"),children:[o.jsx(mo,{size:14}),"Local"]}),o.jsxs("button",{type:"button",role:"tab","aria-selected":Ve==="cloud",className:Ve==="cloud"?"is-active":"","data-testid":"project-storage-tab-cloud",onClick:()=>Bi("cloud"),children:[o.jsx(us,{size:14}),"Cloud"]})]}),o.jsxs("label",{className:"project-gallery-current-name",children:[o.jsx("span",{children:"Current canvas"}),o.jsx("input",{"aria-label":"Board name",className:"board-name-input",maxLength:90,value:n.name,onChange:a=>qs(a.target.value)})]}),o.jsxs("div",{className:"project-gallery-rail-card",children:[o.jsx("span",{children:"Storage"}),o.jsx("strong",{children:Ve==="local"?`${Je.length} local boards`:"Cloud gated"}),o.jsx("small",{children:Ve==="local"?`${$e.localProviderKind} provider / browser catalog and LocalBridge boards`:$e.cloudStatusMessage??"Auth adapter required"})]}),o.jsxs("div",{className:"project-gallery-rail-card project-gallery-workspace-summary","data-testid":"project-gallery-workspace-summary",children:[o.jsx("span",{children:"Local Workspace"}),o.jsx("strong",{title:Ae||void 0,children:Ve==="local"?Ae?Cs(Ae):lc(Ie):"Cloud gated"}),o.jsx("small",{children:Ve==="local"?Ae||zt||"Connect LocalBridge to choose storage.":"Workspace selection is local only."})]}),o.jsxs("label",{className:"project-gallery-startup-toggle","data-testid":"project-gallery-show-at-startup",children:[o.jsx("input",{type:"checkbox",checked:ka,onChange:a=>cu(a.target.checked)}),o.jsx("span",{children:"Show at startup"})]})]}),o.jsx("section",{className:"project-gallery-board-area",children:Ve==="local"?o.jsxs(o.Fragment,{children:[o.jsxs("div",{className:"local-board-section project-gallery-board-section",children:[o.jsxs("div",{className:"local-board-section__title",children:[o.jsx("span",{children:"Workspace"}),o.jsxs("small",{children:[Je.length," saved"]})]}),o.jsxs("div",{className:"local-board-list local-board-list--stored project-gallery-board-grid","data-project-gallery-board-grid":"true",children:[Je.map(a=>{const s=_n===a.id,i=a.id===n.id;return o.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?o.jsxs("div",{className:"stored-board-rename",children:[o.jsx("input",{"aria-label":"Rename saved board",maxLength:90,value:Dn,onChange:l=>qa(l.target.value),onKeyDown:l=>cm(a.id,l),onPointerDown:l=>l.stopPropagation(),autoFocus:!0}),o.jsx("button",{type:"button",title:"Save board name","data-testid":"stored-board-rename-save",onClick:()=>or(a.id),children:o.jsx(Cr,{size:13})}),o.jsx("button",{type:"button",title:"Cancel rename","data-testid":"stored-board-rename-cancel",onClick:nr,children:o.jsx(Ot,{size:13})})]}):o.jsxs(o.Fragment,{children:[o.jsxs("button",{type:"button",className:"local-board-row__main","data-testid":"stored-board-open","data-project-gallery-open-board":"true",onClick:()=>Oi(a.id),onDoubleClick:l=>{l.stopPropagation(),Ki(a)},children:[a.sourceKind==="localBridge"?o.jsx(mo,{size:15}):o.jsx(St,{size:15}),o.jsxs("span",{children:[o.jsx("strong",{children:at(a.name)}),o.jsx("small",{children:uy(a)}),i&&o.jsx("small",{className:"project-gallery-open-tab-badge",children:"Open tab"})]})]}),o.jsx("button",{type:"button",className:"local-board-row__action",title:"Rename board","data-testid":"stored-board-rename",onClick:()=>Ki(a),children:o.jsx(nd,{size:14})}),o.jsx("button",{type:"button",className:"local-board-row__action",title:"Delete board","data-testid":"stored-board-delete",disabled:i,onClick:()=>Xs(a.id,"project-gallery"),children:o.jsx(Ps,{size:14})})]})},a.id)}),Je.length===0&&o.jsx("p",{className:"local-board-message",children:"No saved React boards yet."})]})]}),o.jsxs("div",{className:"local-board-section project-gallery-bridge-section",children:[o.jsxs("div",{className:"local-board-section__title",children:[o.jsx("span",{children:"LocalBridge"}),o.jsx("button",{type:"button",title:"Refresh local boards",onClick:Zt,disabled:Ie==="checking",children:Ie==="checking"?o.jsx(aa,{size:15,className:"spin-icon"}):o.jsx(jn,{size:15})})]}),o.jsxs("div",{className:`local-board-state local-board-state--${Ie}`,children:[Ie==="blocked"?o.jsx(og,{size:15}):Ie==="unavailable"?o.jsx(sg,{size:15}):o.jsx(mo,{size:15}),o.jsx("span",{children:lc(Ie)}),Ie==="blocked"&&!ro()&&o.jsx("button",{type:"button",onClick:uu,children:"Enable"})]}),Ao&&o.jsx("p",{className:"local-board-message",children:Ao}),o.jsxs("div",{className:"project-gallery-workspace-panel","data-testid":"project-gallery-workspace-panel","data-project-gallery-workspace-panel":"true",children:[o.jsxs("div",{className:"project-gallery-workspace-panel__main",children:[o.jsx(kr,{size:16}),o.jsxs("span",{children:[o.jsx("strong",{children:"Local Workspace"}),o.jsx("small",{title:Ae||void 0,children:Ae||zt||"LocalBridge workspace not connected."})]})]}),o.jsxs("div",{className:"project-gallery-workspace-panel__actions",children:[o.jsxs("button",{type:"button","data-testid":"project-gallery-workspace-refresh",title:"Refresh workspace",disabled:Te,onClick:()=>void mu("workspace-panel"),children:[o.jsx(jn,{size:14}),o.jsx("span",{children:"Refresh"})]}),o.jsxs("button",{type:"button","data-testid":"project-gallery-workspace-browse",title:"Select Local Storage",disabled:Te||Ie==="blocked"&&!ro(),onClick:()=>void pu(),children:[Te?o.jsx(aa,{size:14,className:"spin-icon"}):o.jsx(kr,{size:14}),o.jsx("span",{children:"Select Local Storage"})]})]}),Mo.length>0&&o.jsx("div",{className:"project-gallery-workspace-history","data-testid":"project-gallery-workspace-history",children:Mo.map(a=>o.jsx("button",{type:"button",title:a,disabled:Te||a===Ae,onClick:()=>void Ks(a,"history"),children:Cs(a,40)},a))})]}),o.jsxs("button",{type:"button",className:"local-board-export","data-testid":"localbridge-export",disabled:Pn||!!((bl=n.source)!=null&&bl.partialImport)||!!((yl=n.source)!=null&&yl.truncated)||Ie==="blocked"&&!ro(),title:(xl=n.source)!=null&&xl.partialImport?"Export blocked for partial original imports":(Cl=n.source)!=null&&Cl.truncated?"Export blocked for truncated imported boards":"Export current board to LocalBridge",onClick:()=>void gu(),children:[Pn?o.jsx(aa,{size:15,className:"spin-icon"}):o.jsx(od,{size:15}),o.jsx("span",{children:Pn?"Exporting":"Export current"})]}),o.jsx("div",{className:"local-board-list project-gallery-bridge-list",children:sa.slice(0,14).map(a=>o.jsxs("button",{type:"button","data-testid":"localbridge-board-row","data-board-id":a.Id,className:"local-board-row",disabled:!!ht,onClick:()=>void Cu(a),children:[o.jsx(mo,{size:15}),o.jsxs("span",{children:[o.jsx("strong",{children:at(a.Title)}),o.jsx("small",{children:ii(a.UpdatedAt)})]}),ht===a.Id&&o.jsx(aa,{size:15,className:"spin-icon"})]},a.Id))})]})]}):o.jsxs("div",{className:"project-cloud-shell","data-testid":"project-cloud-shell","data-project-cloud-status":$e.isCloudAvailable?"available":"gated","data-project-cloud-plan":$e.cloudPlanKey,"data-project-cloud-entitlement":$e.cloudEntitlementStatus,"data-production-adapter-state":Oe.overallState,"data-project-cloud-database-mode":Oe.cloudBoards.mode,"data-project-cloud-database-ready":Oe.cloudBoards.canAttempt?"true":"false","data-project-cloud-asset-upload-mode":Oe.cloudAssetUpload.mode,"data-project-cloud-asset-upload-ready":Oe.cloudAssetUpload.canAttempt?"true":"false","data-client-secret-blocked":Oe.forbiddenClientSecretKeys.length>0?"true":"false",children:[o.jsx("div",{className:"project-cloud-shell__icon",children:Ce?o.jsx(us,{size:22}):o.jsx(rg,{size:22})}),o.jsx("strong",{children:Ce?"Cloud boards are provider-ready":"Cloud projects are adapter-gated"}),o.jsx("p",{children:Ce?"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."}),o.jsxs("div",{className:"project-cloud-shell__current",children:[o.jsxs("span",{children:["Current: ",Ce?"Cloud ready":"Local"]}),o.jsxs("small",{children:[at(n.name)," / ",En??$e.cloudStatusMessage??"saved in this browser"]})]}),o.jsxs("button",{type:"button","data-testid":"project-cloud-new-board",disabled:!Ce||Rt,title:Ce?"Create and save a cloud board":"Cloud board creation requires the cloud adapter",onClick:bu,children:[Rt?o.jsx(aa,{size:14,className:"spin-icon"}):o.jsx(Co,{size:14}),Rt?"Saving":"New cloud board"]}),o.jsxs("button",{type:"button","data-testid":"project-cloud-save-current",disabled:!Ce||Rt,title:Ce?"Save current board to Supabase":"Cloud save requires Supabase login",onClick:fu,children:[o.jsx(od,{size:14}),"Save current"]}),o.jsxs("button",{type:"button","data-testid":"project-cloud-refresh",disabled:!Ce||Rt,title:Ce?"Refresh cloud boards":"Cloud refresh requires Supabase login",onClick:()=>void Gs("refresh-button"),children:[Rt?o.jsx(aa,{size:14,className:"spin-icon"}):o.jsx(jn,{size:14}),"Refresh cloud"]}),o.jsxs("button",{type:"button","data-testid":"project-cloud-login-shell",onClick:()=>e("/login"),children:[o.jsx(us,{size:14}),"Open login shell"]}),Ce&&o.jsxs("div",{className:"local-board-list project-gallery-cloud-list","data-testid":"project-cloud-board-list",children:[Ka.map(a=>o.jsxs("button",{type:"button","data-testid":"project-cloud-board-row","data-board-id":a.id,className:"local-board-row",disabled:!!Xa,onClick:()=>void hu(a),children:[o.jsx(us,{size:15}),o.jsxs("span",{children:[o.jsx("strong",{children:at(a.name)}),o.jsxs("small",{children:[ii(a.updatedAt)," / ",a.nodeCount," nodes"]})]}),Xa===a.id&&o.jsx(aa,{size:15,className:"spin-icon"})]},a.id)),Ka.length===0&&o.jsx("p",{className:"local-board-message",children:"No cloud boards loaded."})]})]})})]})]})})})]}),Hn&&re&&o.jsx(Wl,{launchers:ja,activeLauncher:re,template:Ge,selectedOptionId:rt,values:Kt,validationMessage:Wn??(on?null:Vn),canCreate:on||!Vn,primaryLabel:on?"Add template card":"Create board",onLauncherSelected:Du,onOptionSelected:Fu,onInputChanged:Uu,onCreate:yu,onClose:$u}),Ja&&o.jsx("div",{className:"template-studio-chooser-backdrop","data-testid":"template-studio-chooser",onMouseDown:zi,children:o.jsxs("section",{className:"template-studio-chooser floating-panel",onMouseDown:a=>a.stopPropagation(),children:[o.jsxs("header",{className:"template-studio-chooser__head",children:[o.jsxs("div",{children:[o.jsx("span",{children:"Template Studio"}),o.jsx("strong",{children:"Current Canvas Authoring Mode"})]}),o.jsx("button",{type:"button",title:"Close Template Studio chooser","data-testid":"template-studio-chooser-close",onClick:zi,children:o.jsx(Ot,{size:15})})]}),o.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."}),o.jsxs("div",{className:"template-studio-chooser__actions",children:[o.jsxs("button",{type:"button","data-testid":"template-studio-start-new",className:"template-studio-chooser__action",onClick:Hu,children:[o.jsx("span",{className:"template-studio-chooser__icon",children:o.jsx(Co,{size:17})}),o.jsxs("span",{children:[o.jsx("strong",{children:"New template board"}),o.jsx("small",{children:"Start a blank Studio draft on a new local board."})]})]}),o.jsxs("button",{type:"button","data-testid":"template-studio-convert-current",className:"template-studio-chooser__action",onClick:Wu,children:[o.jsx("span",{className:"template-studio-chooser__icon",children:o.jsx(ms,{size:17})}),o.jsxs("span",{children:[o.jsx("strong",{children:"Convert current board"}),o.jsx("small",{children:"Keep this board and assign roles to existing nodes."})]})]})]})]})}),en&&o.jsxs(o.Fragment,{children:[o.jsxs("section",{className:"template-studio-toolbar-stack","data-testid":"template-studio-toolbar",onMouseDown:a=>a.stopPropagation(),children:[o.jsxs("div",{className:"template-studio-toolbar floating-panel",children:[o.jsxs("div",{className:"template-studio-toolbar__badge",children:[o.jsx(cs,{size:15}),o.jsx("span",{children:"Template Studio"})]}),o.jsxs("div",{className:"template-studio-toolbar__meta",children:["Editing ",Ne.templateId]}),o.jsx("button",{type:"button",title:"Compile manifest","data-testid":"template-studio-compile",onClick:Qs,children:o.jsx(kn,{size:15})}),o.jsx("button",{type:"button",title:"Test create board","data-testid":"template-studio-test-create",onClick:Ku,children:o.jsx(ya,{size:15})}),o.jsx("button",{type:"button",title:"Copy manifest JSON","data-testid":"template-studio-copy",onClick:()=>void Gu(),children:o.jsx(So,{size:15})}),o.jsx("button",{type:"button",title:"Save template draft","data-testid":"template-studio-save",onClick:Vu,children:o.jsx(Cr,{size:15})}),o.jsx("button",{type:"button",title:"Exit Template Studio","data-testid":"template-studio-close",onClick:Wi,children:o.jsx(Ot,{size:15})})]}),o.jsx("div",{className:"template-studio-toolbar template-studio-toolbar--roles floating-panel",children:yr.filter(a=>a.studioNodeType!=="template.note").map(a=>o.jsx("button",{type:"button",title:`Add ${a.label}`,"data-testid":"template-studio-add-node","data-studio-node-type":a.studioNodeType,onClick:()=>Yu(a.studioNodeType),children:o.jsx("span",{children:a.shortLabel})},a.studioNodeType))}),ae&&o.jsxs("div",{className:"template-studio-toolbar template-studio-toolbar--selected floating-panel",children:[o.jsxs("div",{className:"template-studio-toolbar__meta template-studio-toolbar__meta--selected",children:["Selected: ",ae.title||ae.kind]}),yr.map(a=>o.jsx("button",{type:"button",title:a.label,className:no===a.studioNodeType?"is-active":"","data-testid":"template-studio-role","data-studio-node-type":a.studioNodeType,onClick:()=>Vi(a.studioNodeType),children:o.jsx("span",{children:a.shortLabel})},a.studioNodeType))]})]}),o.jsxs("aside",{className:"template-studio-panel floating-panel","data-testid":"template-studio-panel",onMouseDown:a=>a.stopPropagation(),children:[o.jsxs("header",{className:"template-studio-panel__head",children:[o.jsxs("div",{children:[o.jsx("span",{children:"Template Meta"}),o.jsx("strong",{children:Ne.templateTitle})]}),o.jsx("button",{type:"button",title:"Close Template Studio",onClick:Wi,children:o.jsx(Ot,{size:15})})]}),o.jsxs("div",{className:"template-studio-panel__body",children:[o.jsxs("section",{className:"template-studio-panel__section",children:[o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Template Id"}),o.jsx("input",{type:"text","data-testid":"template-studio-template-id",value:Ne.templateId,onChange:a=>Go("templateId",a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Template Title"}),o.jsx("input",{type:"text",value:Ne.templateTitle,onChange:a=>Go("templateTitle",a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Category"}),o.jsx("input",{type:"text",value:Ne.category,onChange:a=>Go("category",a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Generated Board Title"}),o.jsx("input",{type:"text",value:Ne.boardTitle,onChange:a=>Go("boardTitle",a.target.value)})]})]}),ae?o.jsxs("section",{className:"template-studio-panel__section","data-testid":"template-studio-selected-node",children:[o.jsxs("div",{className:"template-studio-panel__node-summary",children:[o.jsx("strong",{children:ae.title||ae.kind}),o.jsx("span",{children:Hm})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Template Role"}),o.jsxs("select",{value:no,onChange:a=>Vi(a.target.value),children:[o.jsx("option",{value:"",children:"Unassigned"}),yr.map(a=>o.jsx("option",{value:a.studioNodeType,children:a.label},a.studioNodeType))]})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Template Node Id"}),o.jsx("input",{type:"text",value:((kl=ae.metadata)==null?void 0:kl[K.templateNodeId])??"",onChange:a=>Qt(K.templateNodeId,a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Compile Target"}),o.jsxs("select",{value:((Sl=ae.metadata)==null?void 0:Sl[K.compileTarget])??"",onChange:a=>Qt(K.compileTarget,a.target.value),children:[o.jsx("option",{value:"",children:"Auto"}),Ip.map(a=>o.jsx("option",{value:a,children:a},a))]})]}),Wm?o.jsxs(o.Fragment,{children:[o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Input Key"}),o.jsx("input",{type:"text",value:((wl=ae.metadata)==null?void 0:wl[K.inputKey])??"",onChange:a=>Qt(K.inputKey,a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Input Type"}),o.jsxs("select",{value:((vl=ae.metadata)==null?void 0:vl[K.inputType])??"text",onChange:a=>Qt(K.inputType,a.target.value),children:[o.jsx("option",{value:"text",children:"Text"}),o.jsx("option",{value:"textarea",children:"Textarea"}),o.jsx("option",{value:"select",children:"Select"})]})]}),o.jsxs("label",{className:"template-studio-panel__checkbox",children:[o.jsx("input",{type:"checkbox",checked:(((jl=ae.metadata)==null?void 0:jl[K.inputRequired])??"").toLowerCase()==="true",onChange:a=>Qt(K.inputRequired,String(a.target.checked))}),o.jsx("span",{children:"Required input"})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Placeholder"}),o.jsx("input",{type:"text",value:((Il=ae.metadata)==null?void 0:Il[K.inputPlaceholder])??"",onChange:a=>Qt(K.inputPlaceholder,a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Default Value"}),o.jsx("input",{type:"text",value:((Nl=ae.metadata)==null?void 0:Nl[K.inputDefaultValue])??"",onChange:a=>Qt(K.inputDefaultValue,a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Description"}),o.jsx("textarea",{value:((Al=ae.metadata)==null?void 0:Al[K.inputDescription])??"",onChange:a=>Qt(K.inputDescription,a.target.value)})]}),o.jsxs("label",{className:"template-studio-panel__field",children:[o.jsx("span",{children:"Select Options"}),o.jsx("textarea",{placeholder:`value|label
|
|
49
|
-
value2|label2`,value:((Ml=ae.metadata)==null?void 0:Ml[K.inputOptions])??"",onChange:a=>Qt(K.inputOptions,a.target.value)})]})]}):o.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."})]}):o.jsx("section",{className:"template-studio-panel__section",children:o.jsx("p",{className:"template-studio-panel__hint",children:"Select a canvas node to assign a template role."})}),o.jsxs("section",{className:"template-studio-panel__section",children:[o.jsxs("div",{className:"template-studio-panel__section-head",children:[o.jsx("span",{children:"Compiled Manifest"}),Oo&&o.jsx("small",{children:Oo})]}),fe!=null&&fe.issues.length?o.jsx("div",{className:"template-studio-panel__issues","data-testid":"template-studio-issues",children:fe.issues.map(a=>o.jsxs("div",{className:"template-studio-panel__issue",children:[o.jsx("strong",{children:a.code}),o.jsx("span",{children:a.message})]},`${a.code}-${a.message}`))}):null,fe?o.jsx("pre",{className:"template-studio-panel__manifest","data-testid":"template-studio-manifest",children:fe.manifestJson}):o.jsx("p",{className:"template-studio-panel__hint",children:"Compile to preview the JSON manifest for the selected Studio nodes."})]})]})]})]}),Ys&&es&&o.jsx(Wl,{launchers:[ol],activeLauncher:ol,template:es,selectedOptionId:null,values:Xt,validationMessage:an??sl,canCreate:!sl,onLauncherSelected:()=>{},onOptionSelected:()=>{},onInputChanged:qu,onCreate:Ju,onClose:Xu}),o.jsx("input",{ref:Gn,type:"file",accept:"application/json,.json",multiple:!0,hidden:!0,"data-testid":"board-import-input",onChange:a=>{Su(a.currentTarget.files),a.currentTarget.value=""}}),!hl&&o.jsxs(o.Fragment,{children:[o.jsx("div",{className:"canvas-toolbar",role:"toolbar","aria-label":R(qm?"MindCanvas all tools":"MindCanvas curated tools"),"data-testid":"canvas-function-toolbar","data-function-toolbar-mode":va,children:va==="curated"?o.jsxs(o.Fragment,{children:[o.jsx("button",{type:"button",title:R("Add note"),"data-testid":"note-node-add",onClick:()=>we("note"),children:o.jsx(Ls,{size:17})}),o.jsx("button",{type:"button",title:R("Add image"),"data-testid":"image-node-add",onClick:()=>we("image"),children:o.jsx(Sn,{size:17})}),o.jsx("button",{type:"button",title:R("Add video"),"data-testid":"video-node-add",onClick:()=>we("video"),children:o.jsx(wn,{size:17})}),o.jsx("button",{type:"button",title:R("Add remote monitor"),"data-testid":"remote-monitor-node-add",onClick:()=>we("remote-monitor"),children:o.jsx(Rs,{size:17})}),o.jsx("button",{type:"button",title:R("Add AI Task"),"data-testid":"ai-task-node-add",onClick:()=>we("ai-task"),children:o.jsx(Cn,{size:17})}),o.jsx("button",{type:"button",title:R("Add file reference"),"data-testid":"file-node-add",onClick:()=>we("file"),children:o.jsx(Yr,{size:17})}),o.jsx("button",{type:"button",title:R("Tools"),onClick:()=>e("/tools"),children:o.jsx(ws,{size:17})}),o.jsx("span",{className:"toolbar-separator"}),o.jsx("button",{type:"button",title:R("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:Qi,children:o.jsx(ya,{size:17})}),o.jsx("button",{type:"button",title:R("Run selected graph"),"data-testid":"automation-run-selected","data-selected-graph-size":ts.size,"data-selected-graph-runnable":ts.runnable,disabled:!ae||ae.kind!=="ai-task",onClick:Ji,children:o.jsx(Sr,{size:17})}),o.jsx("button",{type:"button",title:R("Pause running AI tasks"),"data-testid":"automation-pause","data-running-ai-tasks":ct.running,onClick:el,children:o.jsx(jo,{size:17})}),o.jsx("button",{type:"button",title:R("Stop active AI tasks"),"data-testid":"automation-stop","data-active-ai-tasks":ct.active,"data-paused-ai-tasks":ct.paused,onClick:tl,children:o.jsx(sd,{size:15})}),o.jsx("button",{type:"button",title:R(Tt?"Generating flow":"Generate flow"),disabled:!ae||Tt,onClick:()=>void al(),children:Tt?o.jsx(aa,{size:17,className:"spin-icon"}):o.jsx(ms,{size:17})}),o.jsx("span",{className:"toolbar-separator"}),o.jsx("button",{type:"button",title:R("Undo"),"data-testid":"history-undo",disabled:d.length===0,onClick:Zo,children:o.jsx(rd,{size:17})}),o.jsx("button",{type:"button",title:R("Redo"),"data-testid":"history-redo",disabled:m.length===0,onClick:Qo,children:o.jsx(id,{size:17})})]}):o.jsxs(o.Fragment,{children:[o.jsx("button",{type:"button",title:R("Add note"),"data-testid":"note-node-add",onClick:()=>we("note"),children:o.jsx(Ls,{size:17})}),o.jsx("button",{type:"button",title:R("Add memo"),"data-testid":"memo-node-add",onClick:()=>we("memo"),children:o.jsx(hc,{size:17})}),o.jsx("button",{type:"button",title:R("Add markdown"),"data-testid":"markdown-node-add",onClick:()=>we("markdown"),children:o.jsx(St,{size:17})}),o.jsx("button",{type:"button",title:R("Add CSV table"),"data-testid":"csv-table-node-add",onClick:()=>we("csv-table"),children:o.jsx(td,{size:17})}),o.jsx("button",{type:"button",title:R("Add code"),"data-testid":"code-node-add",onClick:()=>we("code"),children:o.jsx(kn,{size:17})}),o.jsx("button",{type:"button",title:R("Add AI Task"),"data-testid":"ai-task-node-add",onClick:()=>we("ai-task"),children:o.jsx(Cn,{size:17})}),o.jsx("button",{type:"button",title:R("Add Code Note"),"data-testid":"code-note-node-add",onClick:em,children:o.jsx(kn,{size:17})}),o.jsx("button",{type:"button",title:R("Add Agent Command"),"data-testid":"agent-command-node-add",onClick:Qu,children:o.jsx(ig,{size:17})}),o.jsx("button",{type:"button",title:R("Add image generation spec"),"data-testid":"image-generate-node-add",onClick:()=>we("ai-task","image-generate"),children:o.jsx(Sn,{size:17})}),o.jsx("button",{type:"button",title:R("Add video generation spec"),"data-testid":"video-generate-node-add",onClick:()=>we("ai-task","video-generate"),children:o.jsx(wn,{size:17})}),o.jsx("button",{type:"button",title:R("Add image"),"data-testid":"image-node-add",onClick:()=>we("image"),children:o.jsx(Sn,{size:17})}),o.jsx("button",{type:"button",title:R("Add image mask"),"data-testid":"mask-node-add",onClick:()=>we("mask"),children:o.jsx(lg,{size:17})}),o.jsx("button",{type:"button",title:R("Add video"),"data-testid":"video-node-add",onClick:()=>we("video"),children:o.jsx(wn,{size:17})}),o.jsx("button",{type:"button",title:R("Add embed"),"data-testid":"embed-node-add",onClick:()=>we("embed"),children:o.jsx(vn,{size:17})}),o.jsx("button",{type:"button",title:R("Add remote monitor"),"data-testid":"remote-monitor-node-add",onClick:()=>we("remote-monitor"),children:o.jsx(Rs,{size:17})}),o.jsx("button",{type:"button",title:R("Add PDF"),"data-testid":"pdf-node-add",onClick:()=>we("pdf"),children:o.jsx(St,{size:17})}),o.jsx("button",{type:"button",title:R("Add file reference"),"data-testid":"file-node-add",onClick:()=>we("file"),children:o.jsx(Yr,{size:17})}),o.jsx("button",{type:"button",title:R("Add directory reference"),"data-testid":"directory-node-add",onClick:()=>we("directory"),children:o.jsx(kr,{size:17})}),o.jsx("button",{type:"button",title:R("Templates"),"data-testid":"template-launcher-open",onClick:Ou,children:o.jsx(cs,{size:17})}),o.jsx("button",{type:"button",title:R("Template Studio"),className:en||Ja?"is-active":"","data-testid":"template-studio-open",onClick:zu,children:o.jsx(nd,{size:17})}),o.jsx("button",{type:"button",title:R("Import board JSON"),"data-testid":"board-import-open",onClick:ku,children:o.jsx(dg,{size:17})}),o.jsx("button",{type:"button",title:R("Tools"),onClick:()=>e("/tools"),children:o.jsx(ws,{size:17})}),o.jsx("span",{className:"toolbar-separator"}),o.jsx("button",{type:"button",title:R("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:Qi,children:o.jsx(ya,{size:17})}),o.jsx("button",{type:"button",title:R("Run selected graph"),"data-testid":"automation-run-selected","data-selected-graph-size":ts.size,"data-selected-graph-runnable":ts.runnable,disabled:!ae||ae.kind!=="ai-task",onClick:Ji,children:o.jsx(Sr,{size:17})}),o.jsx("button",{type:"button",title:R("Pause running AI tasks"),"data-testid":"automation-pause","data-running-ai-tasks":ct.running,onClick:el,children:o.jsx(jo,{size:17})}),o.jsx("button",{type:"button",title:R("Stop active AI tasks"),"data-testid":"automation-stop","data-active-ai-tasks":ct.active,"data-paused-ai-tasks":ct.paused,onClick:tl,children:o.jsx(sd,{size:15})}),o.jsx("button",{type:"button",title:R(Tt?"Generating flow":"Generate flow"),disabled:!ae||Tt,onClick:()=>void al(),children:Tt?o.jsx(aa,{size:17,className:"spin-icon"}):o.jsx(ms,{size:17})}),o.jsx("span",{className:"toolbar-separator"}),o.jsx("button",{type:"button",title:R("Undo"),"data-testid":"history-undo",disabled:d.length===0,onClick:Zo,children:o.jsx(rd,{size:17})}),o.jsx("button",{type:"button",title:R("Redo"),"data-testid":"history-redo",disabled:m.length===0,onClick:Qo,children:o.jsx(id,{size:17})})]})}),o.jsxs("div",{className:"search-panel floating-panel","data-testid":"mindcanvas-search-panel","data-search-engine":le,"data-search-worker-state":ye,children:[o.jsxs("div",{className:"search-input-row",children:[o.jsx(cg,{size:16}),o.jsx("input",{ref:rn,"data-testid":"mindcanvas-search-input","aria-label":R("Search text"),value:N,onChange:a=>D(a.target.value),onKeyDown:Om,placeholder:R("Search text ...")}),o.jsx("span",{className:"search-count","data-testid":"mindcanvas-search-count","aria-live":"polite",children:Xm}),o.jsx("button",{type:"button",title:R("Previous search result"),"data-testid":"mindcanvas-search-prev",disabled:U.length===0,onClick:()=>ao(-1),children:o.jsx(ug,{size:14})}),o.jsx("button",{type:"button",title:R("Next search result"),"data-testid":"mindcanvas-search-next",disabled:U.length===0,onClick:()=>ao(1),children:o.jsx(yc,{size:14})})]}),ul&&o.jsx("div",{className:"search-current","data-testid":"mindcanvas-search-current","aria-live":"polite",children:ml?o.jsxs(o.Fragment,{children:[o.jsxs("span",{children:[Y+1," / ",U.length]}),o.jsxs("button",{type:"button","data-testid":"mindcanvas-search-focus",onClick:()=>cr("current-button"),children:[R("Focus")," ",ml.title]})]}):o.jsx("span",{children:R("No matches")})}),U.length>0&&o.jsx("div",{className:"search-results","data-testid":"mindcanvas-search-results",children:U.map((a,s)=>o.jsxs("button",{type:"button","data-testid":"mindcanvas-search-result",className:s===Y?"is-active":"","aria-current":s===Y?"true":void 0,onMouseEnter:()=>ce(s),onClick:()=>dr(a,"result-click"),children:[o.jsx("strong",{children:a.title}),o.jsx("span",{children:a.body.slice(0,84)})]},a.id))})]})]}),G&&o.jsxs("div",{className:"connection-toast floating-panel",children:[o.jsx(Cr,{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.`,o.jsx("button",{type:"button",onClick:()=>X(null),children:"Cancel"})]}),(Bt==null?void 0:Bt.result)&&o.jsxs("section",{className:"result-popover floating-panel","data-testid":"ai-result-popover",children:[o.jsxs("div",{className:"result-popover__header",children:[o.jsxs("strong",{children:[Bt.title," Result"]}),o.jsx("button",{type:"button",title:R("Close"),onClick:()=>oe(null),children:o.jsx(Ot,{size:14})})]}),as&&o.jsxs("div",{className:"result-popover__meta","data-result-source-tone":as.tone,"data-testid":"ai-result-source",children:[o.jsx("span",{children:as.label}),o.jsx("small",{children:as.detail})]}),o.jsxs("div",{className:"result-popover__actions","data-testid":"ai-result-popover-actions",children:[o.jsxs("button",{type:"button",title:R("Copy result"),onClick:()=>void Lm(Bt),children:[o.jsx(So,{size:14}),o.jsx("span",{children:R("Copy")})]}),o.jsxs("button",{type:"button",title:R("Archive result as a Markdown node"),onClick:()=>Pm(Bt),children:[o.jsx(St,{size:14}),o.jsx("span",{children:R("Archive")})]}),o.jsxs("button",{type:"button",title:R("Stage a follow-up AI Task from this result"),onClick:()=>Em(Bt),children:[o.jsx(Cn,{size:14}),o.jsx("span",{children:R("Follow-up")})]})]}),o.jsx("pre",{className:"result-popover__body",children:Bt.result})]}),jt&&o.jsx(Gf,{url:jt.url,fileName:jt.fileName,onClose:()=>{It(null),f.emit("node.pdf.preview.close")}}),il&&o.jsx(Np,{node:il,onSave:lm,onClose:im}),Ze&&o.jsx(Ap,{settings:n.settings,onPatchSettings:Re,onClose:_u}),rl&&o.jsx(Yf,{board:n,rootNode:rl,onClose:km,onStatus:Xi,onRemove:qi,onSubmitFollowUp:wm,onApproval:Sm,onAddArtifact:vm}),wa&&o.jsx(Mp,{board:n,selectedNode:ae??null,selectedCount:p.length,input:w,viewport:P,viewportSize:H,localBridgeState:Ie,syncStatus:De,syncMessage:Sa,buildPrompt:Ym,navigate:e,onClose:Bu}),!hl&&o.jsxs("div",{className:"global-input-shell","data-active-submits":O,"data-submit-state":O>0?"active":"idle",onFocusCapture:()=>void Jn("input-focus"),onPointerDown:()=>void Jn("input-pointer"),children:[o.jsx("textarea",{ref:Yn,"data-testid":"global-input-textarea",value:w,placeholder:(ae==null?void 0:ae.kind)==="ai-task"?R("Run selected AI Task..."):R("Talk with AI..."),onChange:a=>_(a.target.value),onKeyDown:a=>{a.repeat||a.nativeEvent.isComposing||a.keyCode===229||(a.ctrlKey||a.metaKey)&&a.key==="Enter"&&(a.preventDefault(),Zi())}}),o.jsxs("div",{className:"input-controls",children:[o.jsx("button",{className:`input-settings-button ${Ze?"is-active":""}`,type:"button",title:R("AI Settings"),"aria-label":R("AI Settings"),"aria-pressed":Ze?"true":void 0,"data-testid":"ai-settings-open",onClick:Eu,children:o.jsx(ws,{size:16})}),["Text","Image","Video"].map(a=>o.jsx("button",{className:n.settings.inputMode===a?"is-active":"",type:"button","data-testid":`global-input-mode-${a.toLowerCase()}`,onClick:()=>{$i("inputMode",a),Jn(`mode-${a.toLowerCase()}`)},children:R(a)},a)),n.settings.inputMode==="Text"&&o.jsxs(o.Fragment,{children:[o.jsx(gs,{value:vu,options:ju,onChange:a=>Ru(a),ariaLabel:R("Text model"),className:"catalog-pill--model",menuClassName:"catalog-pill__menu--model",testId:"text-model-select"}),o.jsx(gs,{value:n.settings.effort,options:Tu,onChange:a=>$i("effort",a),ariaLabel:R("Reasoning effort"),className:"catalog-pill--effort",testId:"reasoning-effort-select"})]}),Ct&&pr&&o.jsxs(o.Fragment,{children:[o.jsx(gs,{value:pr.model.id,options:Ct==="Image"?Iu:Nu,onChange:a=>Lu(Ct,a),ariaLabel:R(`${Ct} model`),className:"catalog-pill--model",menuClassName:"catalog-pill__menu--model",testId:`${Ct.toLowerCase()}-model-select`}),o.jsx(gs,{value:pr.aspect.id,options:Ct==="Image"?Au:Mu,onChange:a=>Pu(Ct,a),ariaLabel:R(`${Ct} aspect ratio`),className:"catalog-pill--aspect",testId:`${Ct.toLowerCase()}-aspect-select`})]}),o.jsx("span",{className:"input-controls__spacer"}),o.jsx("span",{className:"global-submit-count","aria-live":"polite",children:O}),o.jsx("button",{className:"send-button",type:"button",title:R("Submit"),"data-testid":"global-input-submit",disabled:!Km,onClick:Zi,children:o.jsx(Sr,{size:18})})]})]}),o.jsxs("div",{className:"canvas-view-control-stack","data-testid":"canvas-view-controls",children:[o.jsxs("section",{className:"canvas-view-panel floating-panel","aria-label":R("Canvas grid controls"),"data-testid":"canvas-grid-controls",children:[Xc.map(a=>o.jsx("button",{type:"button",title:R(`Use ${a} grid`),"aria-label":R(`Use ${a} grid`),"aria-pressed":os===a,className:os===a?"is-active":"","data-testid":`canvas-grid-mode-${a}`,onClick:()=>om(a),children:a==="dot"?o.jsx(mg,{size:15}):a==="line"?o.jsx(pg,{size:15}):a==="particles"?o.jsx(ad,{size:15}):o.jsx(ms,{size:15})},a)),o.jsx("span",{className:"canvas-view-panel__separator"}),o.jsx("button",{type:"button",title:R("Toggle grid snap"),"aria-label":R("Toggle grid snap"),"aria-pressed":pl,className:pl?"is-active":"","data-testid":"canvas-grid-snap-toggle",onClick:sm,children:o.jsx(gg,{size:15})})]}),o.jsxs("section",{className:"canvas-bookmark-strip floating-panel","aria-label":R("Camera bookmarks"),"data-testid":"camera-bookmark-strip",children:[o.jsx("button",{type:"button",title:R("Go to home view"),"aria-label":R("Go to home view"),"data-testid":"camera-bookmark-home",onClick:er,children:o.jsx(hg,{size:15})}),(()=>{const a=!!xs(gl[ba]);return o.jsx("button",{type:"button",title:R(a?"Go to camera slot N. Shift-click to save.":"Slot N empty. Click for Home, shift-click to save."),"aria-label":R(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?Pa(ba):Zn(ba)},children:o.jsx("span",{"aria-hidden":"true",children:"N"})})})(),Rr.map(a=>{const s=!!xs(gl[a]);return o.jsx("button",{type:"button",title:R(s?`Go to camera slot ${a}. Shift-click to save.`:`Slot ${a} empty. Click for Home, shift-click to save.`),"aria-label":R(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?Pa(a):Zn(a)},children:o.jsx("span",{"aria-hidden":"true",children:a})},a)}),o.jsx("button",{type:"button",title:R("Save current camera to the next empty slot"),"aria-label":R("Save current camera to the next empty slot"),"data-testid":"camera-bookmark-save-next",onClick:nm,children:o.jsx(fg,{size:15})})]})]}),o.jsxs("div",{className:"bottom-controls",children:[o.jsx("button",{type:"button",title:R("Mouse wheel mode"),"aria-label":R("Toggle mouse wheel mode"),"aria-pressed":n.settings.wheelMode,className:n.settings.wheelMode?"is-active":"","data-testid":"canvas-wheel-mode-toggle","data-wheel-mode":n.settings.wheelMode?"mouse":"trackpad",onClick:()=>tr("button"),children:o.jsx(bg,{size:17})}),o.jsx("button",{type:"button",title:R(`Cursor direction ${n.settings.cursorDirection==="down"?"down":"right"}`),"aria-label":R("Toggle cursor direction"),"aria-pressed":n.settings.cursorDirection==="down",className:n.settings.cursorDirection==="down"?"is-active":"","data-testid":"canvas-cursor-direction-toggle","data-cursor-direction":n.settings.cursorDirection==="down"?"down":"right",onClick:()=>ar("button"),children:o.jsx(yg,{size:17})}),o.jsx("button",{type:"button",title:R("Reset fixture"),onClick:Dm,children:o.jsx(xg,{size:17})}),o.jsx("button",{type:"button",title:R(Lt?"Exit read mode":"Fullscreen"),"aria-label":R(Lt?"Exit read mode":"Fullscreen"),"aria-pressed":Lt,className:Lt?"is-active":"","data-testid":"canvas-read-mode-toggle","data-read-mode":Lt?"true":"false",onClick:()=>{Qn("button")},children:o.jsx(Ql,{size:17})})]}),n.settings.minimapEnabled&&ut&&o.jsxs("section",{className:"canvas-minimap floating-panel","aria-label":R("Canvas minimap"),"data-testid":"canvas-minimap",children:[o.jsxs("div",{className:"canvas-minimap__head",children:[o.jsx("span",{children:R("Minimap")}),o.jsx("small",{children:n.nodes.length})]}),o.jsxs("button",{type:"button",className:"canvas-minimap__stage","aria-label":R("Navigate canvas minimap"),"data-testid":"canvas-minimap-stage",onPointerDown:Gm,children:[ut.nodes.map(a=>o.jsx("span",{className:`canvas-minimap__node canvas-minimap__node--${a.kind} ${p.includes(a.id)?"is-selected":""}`,style:{left:`${a.x}px`,top:`${a.y}px`,width:`${a.width}px`,height:`${a.height}px`}},a.id)),o.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`}})]})]}),o.jsxs("div",{className:"canvas-status",children:[n.nodes.length," nodes / ",Ba.length," rendered / ",n.edges.length," edges / ",Math.round(P.scale*100),"%",((Tl=n.source)==null?void 0:Tl.kind)==="localBridge"&&o.jsxs(o.Fragment,{children:[" ","/ LocalBridge",n.source.partialImport?" partial":"",n.source.truncated?` ${n.source.renderedNodeCount}/${n.source.originalNodeCount}`:""]})]})]})}function lc(e){switch(e){case"checking":return"Checking";case"connected":return"Connected";case"blocked":return"Access gated";case"unavailable":return"Unavailable";default:return"Idle"}}export{ax as MindCanvas};
|