@mindexec/cli 0.2.361 → 0.2.362

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindexec/cli",
3
- "version": "0.2.361",
3
+ "version": "0.2.362",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -1 +1 @@
1
- import{r as E,j as e}from"./vendor-react-BXzpOyCS.js";import{a as U}from"./index-B9m3XXKS.js";import{g as te,r as re}from"./supabaseAuthAdapter-Bptc9G29.js";import{R as d}from"./app-runtime-xD2Z3NdN.js";import{A as _e,R as ge,J as Ee,b2 as Se,aS as De,b3 as ye,P as we,aJ as xe,b4 as Ae,j as Ce,q as Ie,a0 as Ne,b5 as Re,c as je,b6 as ke,e as Oe,aC as Pe}from"./vendor-icons-D0xKCnZS.js";const Le=!1,Me="hold-release",Te=[{id:"cloud-auth-billing",label:"Secure cloud/auth/billing adapter closure",uiLabel:"Cloud/auth/billing adapter",state:"blocked-live-proof",requiredProof:["Dodo checkout live smoke with fresh Supabase session","Supabase provider read-only smoke with fresh session","Supabase provider write/admin mutation smoke with explicit admin values","Original launch proof supabaseLeakedPasswordProtection remains required as artifact-backed security proof","Original launch proof bolaIdorNegativeGate remains required as artifact-backed 20-user authorization proof","Original launch proof activeEditorHttpGate remains required as artifact-backed active editor load proof","Original launch proof dodoSignedSmoke remains required as signed webhook proof","Original launch proof dodoCheckoutDisabled remains required as fail-closed checkout proof","Original launch proof dodoSandboxWebhook remains required as real sandbox webhook proof","Original launch proof deploymentHardening.webCaptureWorkerSsrfRedirectGuard remains required as capture hardening proof","Original launch proof deploymentHardening.uploadFileSizeValidation remains required as upload hardening proof","Original launch proof deploymentHardening.dodoWebhookReplayGuard remains required as webhook replay hardening proof"],uiProof:"Dodo checkout, Supabase read-only, cloud write, and admin mutation proof need fresh provider inputs.",requiredInputs:["VITE_MINDEXEC_SUPABASE_URL","VITE_MINDEXEC_SUPABASE_PUBLISHABLE_KEY","VITE_MINDEXEC_DODO_CHECKOUT_FUNCTION_URL","MINDEXEC_SUPABASE_PROVIDER_SESSION_JSON","MINDEXEC_DODO_CHECKOUT_LIVE_CONFIRM","MINDEXEC_SUPABASE_PROVIDER_LIVE_CONFIRM","MINDEXEC_SUPABASE_PROVIDER_WRITE_CONFIRM","MINDEXEC_SUPABASE_PROVIDER_ADMIN_MUTATION_CONFIRM","MINDEXEC_SUPABASE_PROVIDER_ADMIN_PRICE_STAGE","MINDEXEC_SUPABASE_PROVIDER_ADMIN_LTD_LIMIT","MINDEXEC_ORIGINAL_LAUNCH_PROOF_JSON"],uiCommand:"npm run verify:release-blocker-preflight",proofCommands:[{label:"Dodo checkout live smoke",command:"npm run verify:dodo-checkout-live-smoke",mode:"opt-in-live-proof",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["VITE_MINDEXEC_SUPABASE_URL","VITE_MINDEXEC_SUPABASE_PUBLISHABLE_KEY","VITE_MINDEXEC_DODO_CHECKOUT_FUNCTION_URL","MINDEXEC_SUPABASE_PROVIDER_SESSION_JSON","MINDEXEC_DODO_CHECKOUT_LIVE_CONFIRM"]},{label:"Supabase provider read-only smoke",command:"npm run verify:supabase-provider-live-smoke",mode:"opt-in-live-proof",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["VITE_MINDEXEC_SUPABASE_URL","VITE_MINDEXEC_SUPABASE_PUBLISHABLE_KEY","MINDEXEC_SUPABASE_PROVIDER_SESSION_JSON","MINDEXEC_SUPABASE_PROVIDER_LIVE_CONFIRM"]},{label:"Supabase provider write/admin mutation smoke",command:"npm run verify:supabase-provider-write-smoke",mode:"opt-in-live-proof",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["VITE_MINDEXEC_SUPABASE_URL","VITE_MINDEXEC_SUPABASE_PUBLISHABLE_KEY","MINDEXEC_SUPABASE_PROVIDER_SESSION_JSON","MINDEXEC_SUPABASE_PROVIDER_WRITE_CONFIRM","MINDEXEC_SUPABASE_PROVIDER_ADMIN_MUTATION_CONFIRM","MINDEXEC_SUPABASE_PROVIDER_ADMIN_PRICE_STAGE","MINDEXEC_SUPABASE_PROVIDER_ADMIN_LTD_LIMIT"]},{label:"Original launch proof artifacts",command:"npm run verify:original-launch-proof-artifacts",mode:"opt-in-proof-file",liveCall:!1,hostAffecting:!1,defaultGate:!1,requiredInputs:["MINDEXEC_ORIGINAL_LAUNCH_PROOF_JSON"]}]},{id:"agent-webresearch-codemaster",label:"Agent execution and WebResearch adapter closure",uiLabel:"Agent and CodeMaster provider depth",state:"blocked-provider-depth",requiredProof:["Real provider-backed diff/apply proof stays bounded to disposable workspace evidence","Cloud execution adapter proof avoids deploy, publish, billing, and unsafe file mutations","Concept embedding live proof keeps the provider API key server-side and opt-in only"],uiProof:"Live provider diff/apply and cloud execution proof remain opt-in and bounded.",requiredInputs:["MINDEXEC_CODEX_LIVE_READONLY_CONFIRM","MINDEXEC_CODEX_LIVE_TEMP_WRITE_CONFIRM","MINDEXEC_CODEX_LIVE_PROJECT_WRITE_CONFIRM","MINDEXEC_CODEMASTER_CLOUD_EXECUTION_PROOF_JSON","MINDEXEC_CONCEPT_EMBED_LIVE_CONFIRM","MINDEXEC_CONCEPT_EMBED_API_KEY"],uiCommand:"npm run verify:codemaster-codex-live-project-write-smoke",proofCommands:[{label:"Codex live read-only provider smoke",command:"npm run verify:codemaster-codex-live-readonly-smoke",mode:"opt-in-live-proof",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["MINDEXEC_CODEX_LIVE_READONLY_CONFIRM"]},{label:"Codex live temp-write provider smoke",command:"npm run verify:codemaster-codex-live-temp-write-smoke",mode:"opt-in-live-proof",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["MINDEXEC_CODEX_LIVE_TEMP_WRITE_CONFIRM"]},{label:"Codex live project-write provider smoke",command:"npm run verify:codemaster-codex-live-project-write-smoke",mode:"opt-in-live-proof",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["MINDEXEC_CODEX_LIVE_PROJECT_WRITE_CONFIRM"]},{label:"CodeMaster cloud execution adapter proof",command:"npm run verify:codemaster-cloud-execution-adapter-proof",mode:"opt-in-proof-file",liveCall:!1,hostAffecting:!1,defaultGate:!1,requiredInputs:["MINDEXEC_CODEMASTER_CLOUD_EXECUTION_PROOF_JSON"]},{label:"Concept embedding live provider smoke",command:"npm run verify:concept-embedding-live-smoke",mode:"opt-in-live-proof",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["MINDEXEC_CONCEPT_EMBED_LIVE_CONFIRM","MINDEXEC_CONCEPT_EMBED_API_KEY"]}]},{id:"mindcanvas-ai-media-provider",label:"MindCanvas AI media provider closure",uiLabel:"MindCanvas AI media provider",state:"blocked-provider-proof",requiredProof:["Provider-backed image generation proof from the MindCanvas node workflow","Provider-backed video generation proof from the MindCanvas node workflow","No raw provider secrets appear in browser storage, docs, logs, or release artifacts"],uiProof:"Image and video generation need sanitized provider proof from the node workflow.",requiredInputs:["MINDEXEC_MEDIA_PROVIDER_LIVE_CONFIRM","MINDEXEC_MEDIA_PROVIDER_PROOF_JSON"],uiCommand:"npm run verify:mindcanvas-media-provider-proof",proofCommands:[{label:"MindCanvas AI media provider proof",command:"npm run verify:mindcanvas-media-provider-proof",mode:"opt-in-proof-file",liveCall:!1,hostAffecting:!1,defaultGate:!1,requiredInputs:["MINDEXEC_MEDIA_PROVIDER_LIVE_CONFIRM","MINDEXEC_MEDIA_PROVIDER_PROOF_JSON"]}]},{id:"remote-fast-os-input",label:"RemoteFast opt-in OS-input smoke",uiLabel:"RemoteFast host OS input",state:"blocked-operator-confirmation",requiredProof:["Bounded pointer/key smoke against the host with cursor restore evidence"],uiProof:"Pointer/key smoke affects the host and must stay explicitly confirmed.",requiredInputs:["MINDEXEC_REMOTE_FAST_OS_INPUT_CONFIRM"],uiCommand:"npm run verify:remote-monitor-remote-fast-os-input-smoke",proofCommands:[{label:"RemoteFast bounded host OS-input smoke",command:"npm run verify:remote-monitor-remote-fast-os-input-smoke",mode:"opt-in-host-proof",liveCall:!1,hostAffecting:!0,defaultGate:!1,requiredInputs:["MINDEXEC_REMOTE_FAST_OS_INPUT_CONFIRM"]}]},{id:"release-approval",label:"Cloudflare/npm release approval",uiLabel:"Cloudflare/npm approval",state:"hold-release",requiredProof:["Green local gates after live proofs","Reviewed release notes","Explicit user approval before Cloudflare deploy or npm publish","Original `ref/~MindExec` launch proof manifest parity reviewed before release approval"],uiProof:"Deploy and npm publish require a reviewed proof packet and explicit user approval.",requiredInputs:["manual user approval"],uiCommand:"npm run verify:release-proof-packet",proofCommands:[{label:"Cloudflare Pages release pass",command:"manual-release-pass:cloudflare-pages",mode:"manual-release-approval",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["manual user approval"]},{label:"npm package release pass",command:"manual-release-pass:npm-package",mode:"manual-release-approval",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["manual user approval"]}]}],H={releaseReady:Le,releasePosture:Me,blockers:Te},ne="admin-dashboard-data";function v(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function D(t){return Array.isArray(t)?t:[]}function f(t,a=""){return typeof t=="string"&&t.trim()?t.trim():a}function F(t,a=0){const r=typeof t=="number"?t:Number(t);return Number.isFinite(r)?r:a}function T(t,a=0){return Math.round(F(t,a))}function u(t){return T(t).toLocaleString()}function j(t){return`$${F(t).toLocaleString(void 0,{minimumFractionDigits:2,maximumFractionDigits:2})}`}function L(t){return`${F(t).toFixed(1)}%`}function V(t){return`${u(t)}P`}function se(t){const a=f(t);if(!a)return"--/--";const r=new Date(a);return Number.isNaN(r.getTime())?a.slice(0,5):`${String(r.getUTCMonth()+1).padStart(2,"0")}/${String(r.getUTCDate()).padStart(2,"0")}`}function Ue(t){const a=f(t).toLowerCase();if(/(failed|error|suspended|revoked|high|danger|blocked)/.test(a))return"danger";if(/(pending|review|grace|warn|manual|locked)/.test(a))return"warn";if(/(active|ok|processed|healthy|paid|closed|enforced)/.test(a))return"ok"}function _(t,a,r="-"){for(const n of a){const s=t[n];if(s!=null&&String(s).trim())return String(s)}return r}function Y(t,a){return t.map(r=>{const n=v(r),s=a.find(c=>n[c]!==void 0)??a[0];return{label:se(n.date??n.day??n.created_at),value:Math.max(0,F(n[s]))}})}function Fe(t){const a=v(t),r=v(a.launch_overview),n=v(a.billing_control),s=v(a.credit_totals),c=v(a.refund_rate),h=Y(D(a.daily_signups),["count","signup_count"]),l=Y(D(a.daily_revenue),["revenue","amount"]),y=D(a.referrers).map(b=>{const i=v(b);return[_(i,["referrer"],"direct"),u(i.visit_count??i.count)]}),O=D(a.countries).map(b=>{const i=v(b);return[_(i,["country"],"--"),u(i.visit_count??i.count),u(i.unique_users)]}),A=D(a.heavy_users).map(b=>{const i=v(b);return[_(i,["email","user_email","display_name"],"unknown"),`${u(i.boards_count??i.board_count)} boards`]}),C=D(a.entitlements).map(b=>{const i=v(b);return[_(i,["email","user_email"],"unknown"),_(i,["plan_key","plan","normalized_plan_key"],"free"),_(i,["status","entitlement_status"],"active"),_(i,["ends_at","current_period_end","renews_at"],"-")]}),I=D(a.refunds).map(b=>{const i=v(b);return[_(i,["email","user_email"],"unknown"),j(i.amount),_(i,["risk","revocation_status"],"review"),_(i,["review_status","status"],"open")]}),P=D(a.credit_ledger).map(b=>{const i=v(b);return[se(i.created_at),_(i,["email","user_email","reason"],"unknown"),V(i.delta??i.amount??i.credit_delta),_(i,["reason","event_type","source"],"-")]}),N=D(a.feature_limits).map(b=>{const i=v(b);return[_(i,["feature","feature_key"],"Feature"),_(i,["free_limit","free"],"-"),_(i,["pro_limit","pro","limit_value"],"-"),_(i,["status","entitlement_status"],"enforced")]}),R=D(a.user_funnel).map(b=>{const i=v(b);return{label:_(i,["stage","label"],"Stage"),count:T(i.count??i.user_count),rate:F(i.rate??i.conversion_rate)}});return{source:"supabase-admin-dashboard-data",fetchedAt:f(a.fetched_at,new Date().toISOString()),billingMode:f(r.billing_mode??n.billing_mode,"DODO_LIVE"),currency:f(r.currency_code??n.currency_code,"USD"),usdPerPoint:f(r.usd_per_point,"0.0002"),overviewKpis:[{label:"DAU",value:u(r.dau),tone:"ok"},{label:"WAU",value:u(r.wau),tone:"ok"},{label:"Activation",value:L(r.activation_rate),tone:"ok"},{label:"AI usage",value:L(r.ai_usage_rate),tone:"ok"},{label:"Paid conversion",value:L(r.paid_conversion_rate),tone:"warn"},{label:"D1 retention",value:L(r.d1_retention_rate),tone:"warn"},{label:"D7 retention",value:L(r.d7_retention_rate),tone:"warn"},{label:"Avg points / user",value:V(r.avg_points_spent_per_user)},{label:"AI cost estimate",value:j(r.ai_cost_estimate_usd)},{label:"Gross margin estimate",value:j(r.gross_margin_estimate_usd),tone:"ok"}],billingKpis:[{label:"Billing mode",value:f(n.billing_mode??r.billing_mode,"DODO_LIVE"),tone:"ok"},{label:"Webhook received 24h",value:u(n.webhook_received_24h??r.webhook_received_24h),tone:"ok"},{label:"Webhook failed 24h",value:u(n.webhook_failures_24h??r.webhook_failures_24h),tone:"warn"},{label:"Pending events",value:u(n.pending_events),tone:"warn"},{label:"Active Pro users",value:u(n.pro_active_users??n.active_entitlements),tone:"ok"},{label:"Manual reviews",value:u(n.manual_reviews),tone:"warn"},{label:"Locked boards",value:u(n.locked_boards),tone:"warn"},{label:"Create blocked today",value:u(n.create_blocked_today)}],operatingHealth:[{label:"Signups today",value:u(r.signups_today),tone:"ok"},{label:"Active users today",value:u(r.active_users_today),tone:"ok"},{label:"Points spent users",value:u(r.points_spent_users)},{label:"AI failures 24h",value:u(r.ai_failures_24h),tone:Ue(r.ai_failures_24h)??"warn"},{label:"Save failures 24h",value:u(r.save_failures_24h),tone:"ok"},{label:"Webhook failures 24h",value:u(r.webhook_failures_24h),tone:"warn"}],revenueBand:[{label:"Revenue today",value:j(r.revenue_today),tone:"ok"},{label:"7 day revenue",value:j(r.revenue_7_days),tone:"ok"},{label:"30 day revenue",value:j(r.revenue_30_days)},{label:"Total revenue",value:j(r.total_revenue)},{label:"Paid users",value:u(r.paid_users)},{label:"Wallet liability",value:V(r.total_credit_balance??s.total_credit_balance),tone:"warn"}],signupTrend:h,revenueTrend:l,referrerRows:y,countryRows:O,heavyUserRows:A,entitlementRows:C,webhookRows:[["24h received","payment/provider","processed",u(n.webhook_received_24h??r.webhook_received_24h)],["24h failed","payment/provider","manual-review",u(n.webhook_failures_24h??r.webhook_failures_24h)],["Refund rate","refunds","watch",L(c.refund_rate??c.rate)]],refundRows:I,creditRows:P,featureLimitRows:N,funnelRows:R,auditRows:[]}}async function W(t){var y,O,A,C;const a=re(t);if(!a.adminData.canAttempt)throw d.emit("adminDashboard.provider.skipped",{mode:a.adminData.mode}),new Error(`Secure admin data adapter is not ready: ${a.adminData.mode}`);const r=te(t);if(!r)throw d.emit("adminDashboard.provider.skipped",{mode:"config-missing"}),new Error("Supabase browser client is not available for admin data.");const{data:n,error:s}=await r.auth.getSession();if(s||!((y=n.session)!=null&&y.access_token))throw d.emit("adminDashboard.provider.sessionMissing",{message:(s==null?void 0:s.message)??"missing-session"}),new Error("Secure admin data requires a Supabase-authenticated session.");const{data:c,error:h}=await r.auth.getUser(),l=(O=c.user)==null?void 0:O.id;if(h||!l)throw d.emit("adminDashboard.provider.sessionMissing",{message:(h==null?void 0:h.message)??"missing-user"}),new Error("Secure admin data requires a verified Supabase user.");return{config:a,accessToken:n.session.access_token,userId:l,email:((C=(A=c.user)==null?void 0:A.email)==null?void 0:C.toLowerCase())??""}}async function X(t,a){await W(t);const r=te(t);if(!r)throw new Error("Supabase browser client is not available for admin data.");const{data:n,error:s}=await r.functions.invoke(ne,{body:a});if(s)throw d.emit("adminDashboard.provider.failed",{operation:f(a.action,"summary"),message:s.message}),s;if(n!=null&&n.error){const c=f(n.message??n.error,"admin-dashboard-data failed");throw d.emit("adminDashboard.provider.failed",{operation:f(a.action,"summary"),message:c}),new Error(c)}return n??{}}async function Be(t){d.emit("adminDashboard.provider.summary.requested",{functionName:ne});const a=await X(t,{action:"summary"}),r=Fe(a.summary);return d.emit("adminDashboard.provider.summary.loaded",{source:r.source,overviewMetrics:r.overviewKpis.length,signupPoints:r.signupTrend.length}),r}async function Xe(t,a){if(d.emit("adminDashboard.provider.userSearch.requested",{hasQuery:!!a.trim()}),!a.trim())return null;const r=await X(t,{action:"user-search",query:a}),n=v(r.user);if(!Object.keys(n).length)return d.emit("adminDashboard.provider.userSearch.loaded",{found:!1}),null;const s=v(n.profile),c=v(n.board_stats),h=v(n.activity),l=D(n.timeline),y={email:f(s.email,"unknown"),plan:f(s.plan_type,"Free"),boards:T(c.boards_count??c.board_count),points:T(s.credits_balance??h.credit_balance??h.points_balance),country:f(s.country,"--"),lastSeen:f(s.last_seen_at,f(s.created_at,"unknown")),timelineCount:l.length};return d.emit("adminDashboard.provider.userSearch.loaded",{found:!0,boards:y.boards}),y}async function Ve(t,a,r){const n=await W(t);d.emit("adminDashboard.provider.settings.requested",{priceStage:a,ltdLimit:r});const s=await X(t,{action:"save-settings",price_stage:a,ltd_limit:r}),c={mode:n.config.adminData.mode,canAttempt:!0,priceStage:f(s.price_stage,a),ltdLimit:T(s.ltd_limit,r),updatedAt:f(s.updated_at,new Date().toISOString())};return d.emit("adminDashboard.provider.settings.saved",{priceStage:c.priceStage,ltdLimit:c.ltdLimit}),c}async function qe(t,a){const r=await W(t);d.emit("adminDashboard.provider.emergencyClose.requested",{ltdLimit:a});const n=await X(t,{action:"emergency-close",price_stage:"CLOSED",ltd_limit:a}),s={mode:r.config.adminData.mode,canAttempt:!0,priceStage:f(n.price_stage,"CLOSED"),ltdLimit:T(n.ltd_limit,a),updatedAt:f(n.updated_at,new Date().toISOString())};return d.emit("adminDashboard.provider.emergencyClose.staged",{priceStage:s.priceStage,ltdLimit:s.ltdLimit}),s}const K="mindexec.react.admin.dashboard.v1",$e=["STANDARD","EARLY","LTD","CLOSED"],k={priceStage:"EARLY",ltdLimit:100,lastAction:"Admin dashboard restored as a local React shell.",updatedAtUtc:""};function Ge(){return re(U())}const He=[{key:"overview",label:"Overview",icon:Se},{key:"billing",label:"Billing Control",icon:De},{key:"entitlements",label:"Entitlements",icon:ye},{key:"dodo",label:"Dodo Events",icon:we},{key:"refunds",label:"Refunds",icon:xe},{key:"credits",label:"Credits",icon:Ae},{key:"limits",label:"Feature Limits",icon:Ce},{key:"funnel",label:"User Funnel",icon:Ie},{key:"explorer",label:"User Explorer",icon:Ne},{key:"release",label:"Release Readiness",icon:Re},{key:"audit",label:"Audit Log",icon:je}],We=[{label:"06/08",value:2},{label:"06/09",value:4},{label:"06/10",value:5},{label:"06/11",value:8},{label:"06/12",value:7},{label:"06/13",value:13},{label:"06/14",value:11},{label:"06/15",value:16},{label:"06/16",value:19},{label:"06/17",value:18},{label:"06/18",value:23},{label:"06/19",value:26},{label:"06/20",value:31},{label:"06/21",value:34}],Ke=[{label:"06/08",value:0},{label:"06/09",value:12},{label:"06/10",value:18},{label:"06/11",value:12},{label:"06/12",value:29},{label:"06/13",value:41},{label:"06/14",value:38},{label:"06/15",value:49},{label:"06/16",value:64},{label:"06/17",value:72},{label:"06/18",value:81},{label:"06/19",value:94},{label:"06/20",value:108},{label:"06/21",value:124}],G=[{email:"maya@buildloop.ai",plan:"Pro",boards:18,points:1240,country:"US",lastSeen:"today"},{email:"kenji@solo-studio.jp",plan:"Early",boards:9,points:640,country:"JP",lastSeen:"today"},{email:"linh@vietlaunch.dev",plan:"Free",boards:5,points:120,country:"VN",lastSeen:"yesterday"},{email:"alex@indieops.co",plan:"LTD",boards:32,points:2840,country:"SG",lastSeen:"2d ago"}],Je=[{label:"DAU",value:"128",tone:"ok"},{label:"WAU",value:"614",tone:"ok"},{label:"Activation",value:"41.8%",tone:"ok"},{label:"AI usage",value:"63.2%",tone:"ok"},{label:"Paid conversion",value:"4.6%",tone:"warn"},{label:"D1 retention",value:"38.1%",tone:"warn"},{label:"D7 retention",value:"22.7%",tone:"warn"},{label:"Avg points / user",value:"318P"},{label:"AI cost estimate",value:"$74.82"},{label:"Gross margin estimate",value:"$418.10",tone:"ok"}],ze=[{label:"Billing mode",value:"DODO_LIVE_GATED",tone:"warn"},{label:"Webhook received 24h",value:"19",tone:"ok"},{label:"Webhook failed 24h",value:"1",tone:"warn"},{label:"Pending events",value:"3",tone:"warn"},{label:"Active Pro users",value:"28",tone:"ok"},{label:"Manual reviews",value:"2",tone:"warn"},{label:"Locked boards",value:"6",tone:"warn"},{label:"Create blocked today",value:"14"}],ie=[["06/21 18:41","admin@mindexec.local","Changed price stage draft to EARLY"],["06/21 16:10","system","Dodo webhook replay queued"],["06/20 23:55","admin@mindexec.local","Raised LTD capacity review flag"],["06/20 19:20","system","Credit ledger reconciliation completed"]],Ye=[["evt_4912","payment.succeeded","processed","$12.00 USD"],["evt_4911","subscription.created","processed","Pro monthly"],["evt_4910","payment.failed","manual-review","$12.00 USD"],["evt_4909","refund.requested","pending","$24.00 USD"]],Qe=[{label:"Visitor",count:1280,rate:100},{label:"Signup",count:214,rate:16.7},{label:"First board",count:132,rate:61.7},{label:"AI run",count:83,rate:62.8},{label:"Pricing visit",count:44,rate:53},{label:"Paid",count:11,rate:25}],Q=String(H.releaseReady),q=H.releasePosture,Ze=H.blockers.map(t=>{var a;return{id:t.id,label:t.uiLabel||t.label,state:t.state,proof:t.uiProof||t.requiredProof.join(" "),command:t.uiCommand||((a=t.proofCommands[0])==null?void 0:a.command)||"npm run verify:release-blocker-preflight",proofCommands:t.proofCommands.map(r=>({label:r.label,command:r.command,mode:r.mode,liveCall:r.liveCall,hostAffecting:r.hostAffecting,defaultGate:r.defaultGate,requiredInputs:r.requiredInputs}))}}),ea={source:"local",fetchedAt:"",billingMode:"DODO_LIVE_GATED",currency:"USD",usdPerPoint:"0.0002",overviewKpis:Je,billingKpis:ze,operatingHealth:[{label:"Signups today",value:"34",tone:"ok"},{label:"Active users today",value:"128",tone:"ok"},{label:"Points spent users",value:"77"},{label:"AI failures 24h",value:"2",tone:"warn"},{label:"Save failures 24h",value:"0",tone:"ok"},{label:"Webhook failures 24h",value:"1",tone:"warn"}],revenueBand:[{label:"Revenue today",value:"$124.00",tone:"ok"},{label:"7 day revenue",value:"$530.00",tone:"ok"},{label:"30 day revenue",value:"$1,870.00"},{label:"Total revenue",value:"$4,418.00"},{label:"Paid users",value:"28"},{label:"Wallet liability",value:"184,200P",tone:"warn"}],signupTrend:We,revenueTrend:Ke,referrerRows:[["direct","312"],["x.com","128"],["reddit","84"],["youtube","62"]],countryRows:[["US","41%"],["JP","18%"],["SG","11%"],["VN","8%"]],heavyUserRows:G.slice(0,4).map(t=>[t.email.split("@")[0],`${t.boards} boards`]),entitlementRows:G.map(t=>[t.email,t.plan,t.plan==="Free"?"free":"active",t.plan==="Free"?"-":"2026-07-21"]),webhookRows:Ye,refundRows:[["maya@buildloop.ai","$12.00","low","closed"],["alex@indieops.co","$24.00","medium","open"],["unknown@blocked.test","$12.00","high","manual review"]],creditRows:[["18:41","maya@buildloop.ai","+1000P","monthly grant"],["18:20","kenji@solo-studio.jp","-120P","AI task"],["17:52","alex@indieops.co","-280P","image generation"]],featureLimitRows:[["Cloud boards","3","Unlimited","enforced"],["AI runs / month","20","1000","enforced"],["Image uploads","100MB","10GB","watching"],["Private boards","0","Unlimited","enforced"]],funnelRows:Qe,auditRows:ie};function aa(t,a){const r=Math.max(...a.map(n=>n.value),1);return Math.max(8,Math.round(t/r*100))}function ta(t){return t?`admin-kpi-card--${t}`:""}function $(t){return t.map(a=>({label:a[0]??"-",value:a[1]??"-"}))}function ra(t){return"timelineCount"in t?t.timelineCount:9}function oe(t){const a=typeof t=="number"?t:Number(t);return Number.isFinite(a)?Math.max(0,Math.min(1e4,Math.round(a))):k.ltdLimit}function le(t){if(!t||typeof t!="object")return k;const a=t,r=$e.includes(a.priceStage)?String(a.priceStage):k.priceStage,n=typeof a.lastAction=="string"&&a.lastAction.trim()?a.lastAction.slice(0,240):k.lastAction,s=typeof a.updatedAtUtc=="string"?a.updatedAtUtc:"";return{priceStage:r,ltdLimit:oe(a.ltdLimit),lastAction:n,updatedAtUtc:s}}function na(){if(typeof window>"u")return k;try{const t=window.localStorage.getItem(K),a=t?le(JSON.parse(t)):k;return d.emit("adminDashboard.localDraft.loaded",{source:t?"stored":"default",priceStage:a.priceStage,ltdLimit:a.ltdLimit}),a}catch(t){return d.emit("adminDashboard.localDraft.failed",{operation:"load",message:t instanceof Error?t.message:String(t)}),k}}function Z(t,a){const r=le({...t,updatedAtUtc:new Date().toISOString()});if(typeof window>"u")return r;try{window.localStorage.setItem(K,JSON.stringify(r)),d.emit("adminDashboard.localDraft.saved",{source:a,priceStage:r.priceStage,ltdLimit:r.ltdLimit})}catch(n){d.emit("adminDashboard.localDraft.failed",{operation:"save",source:a,message:n instanceof Error?n.message:String(n)})}return r}function pa(){const[t]=E.useState(na),[a,r]=E.useState("overview"),[n,s]=E.useState(!1),c=E.useMemo(()=>Ge(),[]),h=c.adminData.canAttempt,[l,y]=E.useState(ea),[O,A]=E.useState(null),[C,I]=E.useState(t.priceStage),[P,N]=E.useState(t.ltdLimit),[R,b]=E.useState(""),[i,de]=E.useState(""),[ce,g]=E.useState(t.lastAction),[ue,J]=E.useState(()=>new Date),me=E.useMemo(()=>{if(!i.trim())return null;const o=i.trim().toLowerCase();return G.find(m=>m.email.toLowerCase().includes(o))||null},[i]),w=l.source==="supabase-admin-dashboard-data"?O:me,pe=o=>{r(o),d.emit("adminDashboard.tab",{key:o})},fe=async()=>{if(s(!0),d.emit("adminDashboard.refresh"),h){try{const o=await Be(U());y(o),J(new Date(o.fetchedAt)),g("Secure Supabase admin snapshot refreshed.")}catch(o){const m=o instanceof Error?o.message:String(o);d.emit("adminDashboard.provider.refreshFailed",{message:m}),g(`Secure admin snapshot failed: ${m}. Local snapshot remains visible.`)}finally{s(!1)}return}window.setTimeout(()=>{J(new Date),g("Local admin snapshot refreshed. Wire Supabase read adapters before treating it as live production data."),s(!1)},260)},he=async o=>{o.preventDefault();const m=`Saved local settings draft: ${C}, LTD ${P}.`,p=Z({priceStage:C,ltdLimit:P,lastAction:m},"settings.form");if(d.emit("adminDashboard.settings.saved",{priceStage:p.priceStage,ltdLimit:p.ltdLimit}),I(p.priceStage),N(p.ltdLimit),g(p.lastAction),!!h)try{const S=await Ve(U(),p.priceStage,p.ltdLimit);I(S.priceStage),N(S.ltdLimit),g(`Secure admin settings saved: ${S.priceStage}, LTD ${S.ltdLimit}.`)}catch(S){const z=S instanceof Error?S.message:String(S);d.emit("adminDashboard.provider.settingsFailed",{message:z}),g(`Local settings draft saved, but secure provider save failed: ${z}`)}},ve=async()=>{const m=Z({priceStage:"CLOSED",ltdLimit:P,lastAction:"Emergency close staged locally. Real billing closure requires a secure admin adapter."},"emergency.close");if(d.emit("adminDashboard.emergency.closed",{priceStage:m.priceStage,ltdLimit:m.ltdLimit}),I(m.priceStage),N(m.ltdLimit),g(m.lastAction),!!h)try{const p=await qe(U(),m.ltdLimit);I(p.priceStage),N(p.ltdLimit),g(`Secure emergency close staged through admin provider: ${p.priceStage}, LTD ${p.ltdLimit}.`)}catch(p){const S=p instanceof Error?p.message:String(p);d.emit("adminDashboard.provider.emergencyFailed",{message:S}),g(`Emergency close staged locally, but secure provider close failed: ${S}`)}},be=async o=>{if(o.preventDefault(),de(R),d.emit("adminDashboard.user.search",{hasQuery:!!R.trim()}),!R.trim()){A(null),g("User explorer query cleared.");return}if(!h){g("User explorer searched local sample data.");return}try{const m=await Xe(U(),R);A(m),g(m?"User explorer loaded secure provider data.":"No secure provider user matched that query.")}catch(m){const p=m instanceof Error?m.message:String(m);d.emit("adminDashboard.provider.userSearchFailed",{message:p}),A(null),g(`Secure user explorer failed: ${p}`)}};return e.jsxs("div",{className:"page admin-dashboard-page","data-testid":"admin-dashboard-shell","data-admin-storage-key":K,"data-production-adapter-state":c.overallState,"data-admin-provider-mode":c.adminData.mode,"data-admin-provider-ready":c.adminData.canAttempt?"true":"false","data-client-secret-blocked":c.forbiddenClientSecretKeys.length>0?"true":"false",children:[e.jsxs("section",{className:"admin-hero",children:[e.jsxs("div",{children:[e.jsx("div",{className:"eyebrow",children:"Operations Console"}),e.jsx("h1",{children:"MindExec Admin Dashboard"}),e.jsx("p",{children:"React port of the original admin plugin: revenue, billing control, credits, limits, funnel, user explorer, and audit surfaces without loading the Blazor plugin runtime."})]}),e.jsxs("div",{className:"admin-hero-actions",children:[e.jsx("span",{className:"admin-badge","data-testid":"admin-dashboard-mode",children:h?"supabase-admin-provider":"local-admin-shell"}),e.jsxs("button",{className:"btn btn-secondary",type:"button",onClick:fe,disabled:n,"data-testid":"admin-refresh",children:[n?e.jsx(_e,{size:16,className:"spin-icon"}):e.jsx(ge,{size:16}),"Refresh"]})]})]}),e.jsxs("section",{className:"admin-status-strip","data-testid":"admin-status-strip",children:[e.jsx(B,{label:"Billing mode",value:l.billingMode}),e.jsx(B,{label:"Currency",value:l.currency}),e.jsx(B,{label:"USD / point",value:l.usdPerPoint}),e.jsx(B,{label:"Updated",value:ue.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})})]}),e.jsxs("section",{className:"admin-alert admin-alert--warning",children:[e.jsx(Ee,{size:18}),e.jsxs("div",{children:[e.jsx("strong",{children:h?"Secure admin provider ready":"Local React shell only"}),e.jsx("span",{"data-testid":"admin-last-action",children:ce})]})]}),e.jsx("nav",{className:"admin-tabs","aria-label":"Admin dashboard tabs","data-testid":"admin-tabs",children:He.map(o=>{const m=o.icon;return e.jsxs("button",{className:a===o.key?"is-active":"",type:"button",onClick:()=>pe(o.key),"data-testid":`admin-tab-${o.key}`,"data-admin-tab":o.key,children:[e.jsx(m,{size:16}),e.jsx("span",{children:o.label})]},o.key)})}),a==="overview"&&e.jsxs(e.Fragment,{children:[e.jsx(ee,{metrics:l.overviewKpis}),e.jsxs("section",{className:"admin-panel-grid admin-panel-grid--two",children:[e.jsx(x,{title:"Operating Health",metrics:l.operatingHealth}),e.jsx(x,{title:"Revenue Band",metrics:l.revenueBand})]}),e.jsxs("section",{className:"admin-panel-grid admin-panel-grid--two",children:[e.jsx(ae,{title:"Daily Signups",points:l.signupTrend}),e.jsx(ae,{title:"Daily Revenue",points:l.revenueTrend,money:!0})]}),e.jsxs("section",{className:"admin-panel-grid admin-panel-grid--three",children:[e.jsx(x,{title:"Top Referrers",metrics:$(l.referrerRows),compact:!0}),e.jsx(x,{title:"Countries",metrics:$(l.countryRows),compact:!0}),e.jsx(x,{title:"Heavy Users",metrics:$(l.heavyUserRows),compact:!0})]})]}),a==="billing"&&e.jsxs(e.Fragment,{children:[e.jsx(ee,{metrics:l.billingKpis}),e.jsxs("section",{className:"admin-panel-grid admin-panel-grid--three",children:[e.jsx(x,{title:"Webhook Status",metrics:[{label:"24h received",value:"19",tone:"ok"},{label:"24h failed",value:"1",tone:"warn"},{label:"Pending",value:"3",tone:"warn"},{label:"Last success",value:"18:41"}]}),e.jsx(x,{title:"Entitlement State",metrics:[{label:"Active",value:"28",tone:"ok"},{label:"Grace",value:"3",tone:"warn"},{label:"Suspended",value:"2",tone:"danger"},{label:"Revoked",value:"1"}]}),e.jsxs("form",{className:"admin-panel admin-settings-panel",onSubmit:he,"data-testid":"admin-settings-form",children:[e.jsxs("div",{className:"admin-panel-head",children:[e.jsx("h2",{children:"Price Controls"}),e.jsxs("button",{className:"btn btn-primary",type:"submit","data-testid":"admin-save-settings",children:[e.jsx(ke,{size:15}),"Save draft"]})]}),e.jsxs("label",{children:["Price stage",e.jsxs("select",{value:C,onChange:o=>I(o.target.value),"data-testid":"admin-price-stage",children:[e.jsx("option",{value:"STANDARD",children:"STANDARD"}),e.jsx("option",{value:"EARLY",children:"EARLY"}),e.jsx("option",{value:"LTD",children:"LTD"}),e.jsx("option",{value:"CLOSED",children:"CLOSED"})]})]}),e.jsxs("label",{children:["LTD limit",e.jsx("input",{type:"number",min:"0",value:P,onChange:o=>N(oe(o.target.value)),"data-testid":"admin-ltd-limit"})]}),e.jsxs("button",{className:"btn btn-secondary admin-danger-button",type:"button",onClick:ve,"data-testid":"admin-emergency-close",children:[e.jsx(Oe,{size:15}),"Stage emergency close"]})]})]})]}),a==="entitlements"&&e.jsx(M,{title:"Entitlements",columns:["User","Plan","Status","Renews"],rows:l.entitlementRows}),a==="dodo"&&e.jsx(M,{title:"Dodo Webhook Events",columns:["Event","Type","Status","Amount"],rows:l.webhookRows}),a==="refunds"&&e.jsx(M,{title:"Refund Reviews",columns:["User","Amount","Risk","Status"],rows:[...l.refundRows]}),a==="credits"&&e.jsx(M,{title:"Credit Ledger",columns:["Time","User","Delta","Reason"],rows:l.creditRows}),a==="limits"&&e.jsx(M,{title:"Feature Limits",columns:["Feature","Free","Pro","Status"],rows:l.featureLimitRows}),a==="funnel"&&e.jsx(ia,{rows:l.funnelRows}),a==="explorer"&&e.jsxs("section",{className:"admin-panel",children:[e.jsxs("div",{className:"admin-panel-head",children:[e.jsx("h2",{children:"User Explorer"}),e.jsx("span",{className:"admin-note",children:h?"Secure provider data":"Local sample data"})]}),e.jsxs("form",{className:"admin-search-row",onSubmit:be,"data-testid":"admin-user-search-form",children:[e.jsx("input",{"aria-label":"Search user",value:R,onChange:o=>b(o.target.value),placeholder:"email, domain, or segment","data-testid":"admin-user-query"}),e.jsxs("button",{className:"btn btn-primary",type:"submit","data-testid":"admin-user-search",children:[e.jsx(Pe,{size:15}),"Search"]})]}),i&&!w&&e.jsx("div",{className:"admin-empty","data-testid":"admin-user-empty",children:h?"No secure provider user matched that query.":"No local sample user matched that query."}),w&&e.jsxs("div",{className:"admin-user-card","data-testid":"admin-user-card",children:[e.jsx("strong",{children:w.email}),e.jsxs("span",{children:[w.plan," / ",w.country," / last seen ",w.lastSeen]}),e.jsx(x,{title:"User Snapshot",compact:!0,metrics:[{label:"Boards",value:String(w.boards)},{label:"Points",value:`${w.points}P`},{label:"Timeline",value:`${ra(w)} events`}]})]})]}),a==="release"&&e.jsx(sa,{blockers:Ze}),a==="audit"&&e.jsxs("section",{className:"admin-panel-grid admin-panel-grid--two",children:[e.jsx(oa,{}),e.jsx(M,{title:"Recent Setting Changes",columns:["Time","Admin","Action"],rows:l.auditRows.length?l.auditRows:ie,compact:!0})]})]})}function sa({blockers:t}){return e.jsxs("section",{className:"admin-release-readiness","data-testid":"admin-release-readiness-panel","data-release-ready":Q,"data-release-posture":q,"data-release-blocker-count":t.length,children:[e.jsxs("div",{className:"admin-panel-head",children:[e.jsxs("div",{children:[e.jsx("h2",{children:"Release Readiness"}),e.jsx("p",{className:"admin-release-summary",children:"Local gates are green enough for RC work, but release remains held until live proofs and explicit approval are complete."})]}),e.jsx("span",{className:"admin-badge admin-badge--hold","data-testid":"admin-release-posture",children:q})]}),e.jsxs("div",{className:"admin-release-grid",children:[e.jsx(x,{title:"Local RC State",compact:!0,metrics:[{label:"Release ready",value:Q,tone:"warn"},{label:"Posture",value:q,tone:"warn"},{label:"Blockers",value:String(t.length),tone:"warn"},{label:"Default deploy/publish",value:"blocked",tone:"ok"}]}),e.jsxs("article",{className:"admin-panel admin-panel--compact",children:[e.jsx("div",{className:"admin-panel-head",children:e.jsx("h2",{children:"Proof Packet"})}),e.jsxs("div",{className:"admin-release-command-list",children:[e.jsx("code",{children:"npm run verify:release-blocker-preflight"}),e.jsx("code",{children:"npm run verify:release-proof-packet"}),e.jsx("code",{children:"npm run check"}),e.jsx("code",{children:"npm run build"})]})]})]}),e.jsx("div",{className:"admin-release-blocker-list","data-testid":"admin-release-blocker-list",children:t.map(a=>e.jsxs("article",{className:"admin-release-blocker","data-testid":"admin-release-blocker","data-release-blocker-id":a.id,"data-release-blocker-state":a.state,children:[e.jsxs("div",{children:[e.jsx("strong",{children:a.label}),e.jsx("span",{children:a.proof})]}),e.jsxs("div",{children:[e.jsx("span",{className:"admin-release-state",children:a.state}),e.jsx("code",{children:a.command})]}),e.jsx("div",{className:"admin-release-proof-command-list","data-testid":"admin-release-proof-command-list","data-release-blocker-id":a.id,"data-release-proof-command-count":a.proofCommands.length,children:a.proofCommands.map(r=>e.jsxs("div",{className:"admin-release-proof-command","data-testid":"admin-release-proof-command","data-release-proof-command-mode":r.mode,"data-release-proof-command-live-call":String(r.liveCall),"data-release-proof-command-host-affecting":String(r.hostAffecting),"data-release-proof-command-default-gate":String(r.defaultGate),children:[e.jsx("span",{children:r.label}),e.jsx("code",{children:r.command}),e.jsxs("div",{className:"admin-release-proof-command__badges",children:[e.jsx("span",{children:r.mode}),e.jsx("span",{children:r.liveCall?"live":"local"}),e.jsx("span",{children:r.hostAffecting?"host-affecting":"host-safe"}),e.jsx("span",{children:r.defaultGate?"default-gate":"manual-only"})]})]},`${a.id}:${r.command}`))})]},a.id))})]})}function B({label:t,value:a}){return e.jsxs("div",{className:"admin-status-pill",children:[e.jsx("span",{children:t}),e.jsx("strong",{children:a})]})}function ee({metrics:t}){return e.jsx("section",{className:"admin-kpi-grid",children:t.map(a=>e.jsxs("article",{className:`admin-kpi-card ${ta(a.tone)}`,children:[e.jsx("span",{children:a.label}),e.jsx("strong",{children:a.value})]},a.label))})}function x({title:t,metrics:a,compact:r}){return e.jsxs("article",{className:`admin-panel ${r?"admin-panel--compact":""}`,children:[e.jsx("div",{className:"admin-panel-head",children:e.jsx("h2",{children:t})}),e.jsx("div",{className:"admin-metric-list",children:a.map(n=>e.jsxs("div",{className:`admin-metric-row ${n.tone?`admin-metric-row--${n.tone}`:""}`,children:[e.jsx("span",{children:n.label}),e.jsx("strong",{children:n.value})]},n.label))})]})}function ae({title:t,points:a,money:r}){return e.jsxs("article",{className:"admin-panel",children:[e.jsxs("div",{className:"admin-panel-head",children:[e.jsx("h2",{children:t}),e.jsx("span",{className:"admin-note",children:"Last 14 days"})]}),e.jsx("div",{className:"admin-mini-chart",children:a.map(n=>e.jsxs("div",{className:"admin-bar-item",children:[e.jsx("div",{className:"admin-bar",style:{height:`${aa(n.value,a)}%`}}),e.jsx("span",{children:n.label.slice(3)}),e.jsx("b",{children:r?`$${n.value}`:n.value})]},n.label))})]})}function M({title:t,columns:a,rows:r,compact:n}){return e.jsxs("section",{className:`admin-panel ${n?"admin-panel--compact":""}`,children:[e.jsx("div",{className:"admin-panel-head",children:e.jsx("h2",{children:t})}),e.jsx("div",{className:"admin-table-wrap",children:e.jsxs("table",{className:"admin-table",children:[e.jsx("thead",{children:e.jsx("tr",{children:a.map(s=>e.jsx("th",{children:s},s))})}),e.jsx("tbody",{children:r.map(s=>e.jsx("tr",{children:s.map(c=>e.jsx("td",{children:c},c))},s.join("|")))})]})})]})}function ia({rows:t}){return e.jsxs("section",{className:"admin-panel",children:[e.jsxs("div",{className:"admin-panel-head",children:[e.jsx("h2",{children:"User Funnel"}),e.jsx("span",{className:"admin-note",children:"30 day sample"})]}),e.jsx("div",{className:"admin-funnel-list",children:t.map(a=>e.jsxs("div",{className:"admin-funnel-row",children:[e.jsxs("div",{children:[e.jsx("strong",{children:a.label}),e.jsxs("span",{children:[a.count.toLocaleString()," users / ",a.rate,"%"]})]}),e.jsx("div",{className:"admin-progress-track",children:e.jsx("div",{className:"admin-progress-fill",style:{width:`${Math.min(100,a.rate)}%`}})})]},a.label))})]})}function oa(){const t=[["Paid users",28,100],["D7 retention",22,35],["AI failure rate",2,1]];return e.jsxs("article",{className:"admin-panel",children:[e.jsx("div",{className:"admin-panel-head",children:e.jsx("h2",{children:"Goal Progress"})}),e.jsx("div",{className:"admin-funnel-list",children:t.map(([a,r,n])=>{const s=a==="AI failure rate"?Math.max(8,100-Math.min(100,r/10*100)):Math.min(100,r/n*100);return e.jsxs("div",{className:"admin-funnel-row",children:[e.jsxs("div",{children:[e.jsx("strong",{children:a}),e.jsxs("span",{children:[r," / ",n]})]}),e.jsx("div",{className:"admin-progress-track",children:e.jsx("div",{className:"admin-progress-fill",style:{width:`${s}%`}})})]},a)})})]})}export{pa as AdminDashboardPage};
1
+ import{r as E,j as e}from"./vendor-react-BXzpOyCS.js";import{a as U}from"./index-Rjp0zHKN.js";import{g as te,r as re}from"./supabaseAuthAdapter-Bptc9G29.js";import{R as d}from"./app-runtime-xD2Z3NdN.js";import{A as _e,R as ge,J as Ee,b2 as Se,aS as De,b3 as ye,P as we,aJ as xe,b4 as Ae,j as Ce,q as Ie,a0 as Ne,b5 as Re,c as je,b6 as ke,e as Oe,aC as Pe}from"./vendor-icons-D0xKCnZS.js";const Le=!1,Me="hold-release",Te=[{id:"cloud-auth-billing",label:"Secure cloud/auth/billing adapter closure",uiLabel:"Cloud/auth/billing adapter",state:"blocked-live-proof",requiredProof:["Dodo checkout live smoke with fresh Supabase session","Supabase provider read-only smoke with fresh session","Supabase provider write/admin mutation smoke with explicit admin values","Original launch proof supabaseLeakedPasswordProtection remains required as artifact-backed security proof","Original launch proof bolaIdorNegativeGate remains required as artifact-backed 20-user authorization proof","Original launch proof activeEditorHttpGate remains required as artifact-backed active editor load proof","Original launch proof dodoSignedSmoke remains required as signed webhook proof","Original launch proof dodoCheckoutDisabled remains required as fail-closed checkout proof","Original launch proof dodoSandboxWebhook remains required as real sandbox webhook proof","Original launch proof deploymentHardening.webCaptureWorkerSsrfRedirectGuard remains required as capture hardening proof","Original launch proof deploymentHardening.uploadFileSizeValidation remains required as upload hardening proof","Original launch proof deploymentHardening.dodoWebhookReplayGuard remains required as webhook replay hardening proof"],uiProof:"Dodo checkout, Supabase read-only, cloud write, and admin mutation proof need fresh provider inputs.",requiredInputs:["VITE_MINDEXEC_SUPABASE_URL","VITE_MINDEXEC_SUPABASE_PUBLISHABLE_KEY","VITE_MINDEXEC_DODO_CHECKOUT_FUNCTION_URL","MINDEXEC_SUPABASE_PROVIDER_SESSION_JSON","MINDEXEC_DODO_CHECKOUT_LIVE_CONFIRM","MINDEXEC_SUPABASE_PROVIDER_LIVE_CONFIRM","MINDEXEC_SUPABASE_PROVIDER_WRITE_CONFIRM","MINDEXEC_SUPABASE_PROVIDER_ADMIN_MUTATION_CONFIRM","MINDEXEC_SUPABASE_PROVIDER_ADMIN_PRICE_STAGE","MINDEXEC_SUPABASE_PROVIDER_ADMIN_LTD_LIMIT","MINDEXEC_ORIGINAL_LAUNCH_PROOF_JSON"],uiCommand:"npm run verify:release-blocker-preflight",proofCommands:[{label:"Dodo checkout live smoke",command:"npm run verify:dodo-checkout-live-smoke",mode:"opt-in-live-proof",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["VITE_MINDEXEC_SUPABASE_URL","VITE_MINDEXEC_SUPABASE_PUBLISHABLE_KEY","VITE_MINDEXEC_DODO_CHECKOUT_FUNCTION_URL","MINDEXEC_SUPABASE_PROVIDER_SESSION_JSON","MINDEXEC_DODO_CHECKOUT_LIVE_CONFIRM"]},{label:"Supabase provider read-only smoke",command:"npm run verify:supabase-provider-live-smoke",mode:"opt-in-live-proof",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["VITE_MINDEXEC_SUPABASE_URL","VITE_MINDEXEC_SUPABASE_PUBLISHABLE_KEY","MINDEXEC_SUPABASE_PROVIDER_SESSION_JSON","MINDEXEC_SUPABASE_PROVIDER_LIVE_CONFIRM"]},{label:"Supabase provider write/admin mutation smoke",command:"npm run verify:supabase-provider-write-smoke",mode:"opt-in-live-proof",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["VITE_MINDEXEC_SUPABASE_URL","VITE_MINDEXEC_SUPABASE_PUBLISHABLE_KEY","MINDEXEC_SUPABASE_PROVIDER_SESSION_JSON","MINDEXEC_SUPABASE_PROVIDER_WRITE_CONFIRM","MINDEXEC_SUPABASE_PROVIDER_ADMIN_MUTATION_CONFIRM","MINDEXEC_SUPABASE_PROVIDER_ADMIN_PRICE_STAGE","MINDEXEC_SUPABASE_PROVIDER_ADMIN_LTD_LIMIT"]},{label:"Original launch proof artifacts",command:"npm run verify:original-launch-proof-artifacts",mode:"opt-in-proof-file",liveCall:!1,hostAffecting:!1,defaultGate:!1,requiredInputs:["MINDEXEC_ORIGINAL_LAUNCH_PROOF_JSON"]}]},{id:"agent-webresearch-codemaster",label:"Agent execution and WebResearch adapter closure",uiLabel:"Agent and CodeMaster provider depth",state:"blocked-provider-depth",requiredProof:["Real provider-backed diff/apply proof stays bounded to disposable workspace evidence","Cloud execution adapter proof avoids deploy, publish, billing, and unsafe file mutations","Concept embedding live proof keeps the provider API key server-side and opt-in only"],uiProof:"Live provider diff/apply and cloud execution proof remain opt-in and bounded.",requiredInputs:["MINDEXEC_CODEX_LIVE_READONLY_CONFIRM","MINDEXEC_CODEX_LIVE_TEMP_WRITE_CONFIRM","MINDEXEC_CODEX_LIVE_PROJECT_WRITE_CONFIRM","MINDEXEC_CODEMASTER_CLOUD_EXECUTION_PROOF_JSON","MINDEXEC_CONCEPT_EMBED_LIVE_CONFIRM","MINDEXEC_CONCEPT_EMBED_API_KEY"],uiCommand:"npm run verify:codemaster-codex-live-project-write-smoke",proofCommands:[{label:"Codex live read-only provider smoke",command:"npm run verify:codemaster-codex-live-readonly-smoke",mode:"opt-in-live-proof",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["MINDEXEC_CODEX_LIVE_READONLY_CONFIRM"]},{label:"Codex live temp-write provider smoke",command:"npm run verify:codemaster-codex-live-temp-write-smoke",mode:"opt-in-live-proof",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["MINDEXEC_CODEX_LIVE_TEMP_WRITE_CONFIRM"]},{label:"Codex live project-write provider smoke",command:"npm run verify:codemaster-codex-live-project-write-smoke",mode:"opt-in-live-proof",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["MINDEXEC_CODEX_LIVE_PROJECT_WRITE_CONFIRM"]},{label:"CodeMaster cloud execution adapter proof",command:"npm run verify:codemaster-cloud-execution-adapter-proof",mode:"opt-in-proof-file",liveCall:!1,hostAffecting:!1,defaultGate:!1,requiredInputs:["MINDEXEC_CODEMASTER_CLOUD_EXECUTION_PROOF_JSON"]},{label:"Concept embedding live provider smoke",command:"npm run verify:concept-embedding-live-smoke",mode:"opt-in-live-proof",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["MINDEXEC_CONCEPT_EMBED_LIVE_CONFIRM","MINDEXEC_CONCEPT_EMBED_API_KEY"]}]},{id:"mindcanvas-ai-media-provider",label:"MindCanvas AI media provider closure",uiLabel:"MindCanvas AI media provider",state:"blocked-provider-proof",requiredProof:["Provider-backed image generation proof from the MindCanvas node workflow","Provider-backed video generation proof from the MindCanvas node workflow","No raw provider secrets appear in browser storage, docs, logs, or release artifacts"],uiProof:"Image and video generation need sanitized provider proof from the node workflow.",requiredInputs:["MINDEXEC_MEDIA_PROVIDER_LIVE_CONFIRM","MINDEXEC_MEDIA_PROVIDER_PROOF_JSON"],uiCommand:"npm run verify:mindcanvas-media-provider-proof",proofCommands:[{label:"MindCanvas AI media provider proof",command:"npm run verify:mindcanvas-media-provider-proof",mode:"opt-in-proof-file",liveCall:!1,hostAffecting:!1,defaultGate:!1,requiredInputs:["MINDEXEC_MEDIA_PROVIDER_LIVE_CONFIRM","MINDEXEC_MEDIA_PROVIDER_PROOF_JSON"]}]},{id:"remote-fast-os-input",label:"RemoteFast opt-in OS-input smoke",uiLabel:"RemoteFast host OS input",state:"blocked-operator-confirmation",requiredProof:["Bounded pointer/key smoke against the host with cursor restore evidence"],uiProof:"Pointer/key smoke affects the host and must stay explicitly confirmed.",requiredInputs:["MINDEXEC_REMOTE_FAST_OS_INPUT_CONFIRM"],uiCommand:"npm run verify:remote-monitor-remote-fast-os-input-smoke",proofCommands:[{label:"RemoteFast bounded host OS-input smoke",command:"npm run verify:remote-monitor-remote-fast-os-input-smoke",mode:"opt-in-host-proof",liveCall:!1,hostAffecting:!0,defaultGate:!1,requiredInputs:["MINDEXEC_REMOTE_FAST_OS_INPUT_CONFIRM"]}]},{id:"release-approval",label:"Cloudflare/npm release approval",uiLabel:"Cloudflare/npm approval",state:"hold-release",requiredProof:["Green local gates after live proofs","Reviewed release notes","Explicit user approval before Cloudflare deploy or npm publish","Original `ref/~MindExec` launch proof manifest parity reviewed before release approval"],uiProof:"Deploy and npm publish require a reviewed proof packet and explicit user approval.",requiredInputs:["manual user approval"],uiCommand:"npm run verify:release-proof-packet",proofCommands:[{label:"Cloudflare Pages release pass",command:"manual-release-pass:cloudflare-pages",mode:"manual-release-approval",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["manual user approval"]},{label:"npm package release pass",command:"manual-release-pass:npm-package",mode:"manual-release-approval",liveCall:!0,hostAffecting:!1,defaultGate:!1,requiredInputs:["manual user approval"]}]}],H={releaseReady:Le,releasePosture:Me,blockers:Te},ne="admin-dashboard-data";function v(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function D(t){return Array.isArray(t)?t:[]}function f(t,a=""){return typeof t=="string"&&t.trim()?t.trim():a}function F(t,a=0){const r=typeof t=="number"?t:Number(t);return Number.isFinite(r)?r:a}function T(t,a=0){return Math.round(F(t,a))}function u(t){return T(t).toLocaleString()}function j(t){return`$${F(t).toLocaleString(void 0,{minimumFractionDigits:2,maximumFractionDigits:2})}`}function L(t){return`${F(t).toFixed(1)}%`}function V(t){return`${u(t)}P`}function se(t){const a=f(t);if(!a)return"--/--";const r=new Date(a);return Number.isNaN(r.getTime())?a.slice(0,5):`${String(r.getUTCMonth()+1).padStart(2,"0")}/${String(r.getUTCDate()).padStart(2,"0")}`}function Ue(t){const a=f(t).toLowerCase();if(/(failed|error|suspended|revoked|high|danger|blocked)/.test(a))return"danger";if(/(pending|review|grace|warn|manual|locked)/.test(a))return"warn";if(/(active|ok|processed|healthy|paid|closed|enforced)/.test(a))return"ok"}function _(t,a,r="-"){for(const n of a){const s=t[n];if(s!=null&&String(s).trim())return String(s)}return r}function Y(t,a){return t.map(r=>{const n=v(r),s=a.find(c=>n[c]!==void 0)??a[0];return{label:se(n.date??n.day??n.created_at),value:Math.max(0,F(n[s]))}})}function Fe(t){const a=v(t),r=v(a.launch_overview),n=v(a.billing_control),s=v(a.credit_totals),c=v(a.refund_rate),h=Y(D(a.daily_signups),["count","signup_count"]),l=Y(D(a.daily_revenue),["revenue","amount"]),y=D(a.referrers).map(b=>{const i=v(b);return[_(i,["referrer"],"direct"),u(i.visit_count??i.count)]}),O=D(a.countries).map(b=>{const i=v(b);return[_(i,["country"],"--"),u(i.visit_count??i.count),u(i.unique_users)]}),A=D(a.heavy_users).map(b=>{const i=v(b);return[_(i,["email","user_email","display_name"],"unknown"),`${u(i.boards_count??i.board_count)} boards`]}),C=D(a.entitlements).map(b=>{const i=v(b);return[_(i,["email","user_email"],"unknown"),_(i,["plan_key","plan","normalized_plan_key"],"free"),_(i,["status","entitlement_status"],"active"),_(i,["ends_at","current_period_end","renews_at"],"-")]}),I=D(a.refunds).map(b=>{const i=v(b);return[_(i,["email","user_email"],"unknown"),j(i.amount),_(i,["risk","revocation_status"],"review"),_(i,["review_status","status"],"open")]}),P=D(a.credit_ledger).map(b=>{const i=v(b);return[se(i.created_at),_(i,["email","user_email","reason"],"unknown"),V(i.delta??i.amount??i.credit_delta),_(i,["reason","event_type","source"],"-")]}),N=D(a.feature_limits).map(b=>{const i=v(b);return[_(i,["feature","feature_key"],"Feature"),_(i,["free_limit","free"],"-"),_(i,["pro_limit","pro","limit_value"],"-"),_(i,["status","entitlement_status"],"enforced")]}),R=D(a.user_funnel).map(b=>{const i=v(b);return{label:_(i,["stage","label"],"Stage"),count:T(i.count??i.user_count),rate:F(i.rate??i.conversion_rate)}});return{source:"supabase-admin-dashboard-data",fetchedAt:f(a.fetched_at,new Date().toISOString()),billingMode:f(r.billing_mode??n.billing_mode,"DODO_LIVE"),currency:f(r.currency_code??n.currency_code,"USD"),usdPerPoint:f(r.usd_per_point,"0.0002"),overviewKpis:[{label:"DAU",value:u(r.dau),tone:"ok"},{label:"WAU",value:u(r.wau),tone:"ok"},{label:"Activation",value:L(r.activation_rate),tone:"ok"},{label:"AI usage",value:L(r.ai_usage_rate),tone:"ok"},{label:"Paid conversion",value:L(r.paid_conversion_rate),tone:"warn"},{label:"D1 retention",value:L(r.d1_retention_rate),tone:"warn"},{label:"D7 retention",value:L(r.d7_retention_rate),tone:"warn"},{label:"Avg points / user",value:V(r.avg_points_spent_per_user)},{label:"AI cost estimate",value:j(r.ai_cost_estimate_usd)},{label:"Gross margin estimate",value:j(r.gross_margin_estimate_usd),tone:"ok"}],billingKpis:[{label:"Billing mode",value:f(n.billing_mode??r.billing_mode,"DODO_LIVE"),tone:"ok"},{label:"Webhook received 24h",value:u(n.webhook_received_24h??r.webhook_received_24h),tone:"ok"},{label:"Webhook failed 24h",value:u(n.webhook_failures_24h??r.webhook_failures_24h),tone:"warn"},{label:"Pending events",value:u(n.pending_events),tone:"warn"},{label:"Active Pro users",value:u(n.pro_active_users??n.active_entitlements),tone:"ok"},{label:"Manual reviews",value:u(n.manual_reviews),tone:"warn"},{label:"Locked boards",value:u(n.locked_boards),tone:"warn"},{label:"Create blocked today",value:u(n.create_blocked_today)}],operatingHealth:[{label:"Signups today",value:u(r.signups_today),tone:"ok"},{label:"Active users today",value:u(r.active_users_today),tone:"ok"},{label:"Points spent users",value:u(r.points_spent_users)},{label:"AI failures 24h",value:u(r.ai_failures_24h),tone:Ue(r.ai_failures_24h)??"warn"},{label:"Save failures 24h",value:u(r.save_failures_24h),tone:"ok"},{label:"Webhook failures 24h",value:u(r.webhook_failures_24h),tone:"warn"}],revenueBand:[{label:"Revenue today",value:j(r.revenue_today),tone:"ok"},{label:"7 day revenue",value:j(r.revenue_7_days),tone:"ok"},{label:"30 day revenue",value:j(r.revenue_30_days)},{label:"Total revenue",value:j(r.total_revenue)},{label:"Paid users",value:u(r.paid_users)},{label:"Wallet liability",value:V(r.total_credit_balance??s.total_credit_balance),tone:"warn"}],signupTrend:h,revenueTrend:l,referrerRows:y,countryRows:O,heavyUserRows:A,entitlementRows:C,webhookRows:[["24h received","payment/provider","processed",u(n.webhook_received_24h??r.webhook_received_24h)],["24h failed","payment/provider","manual-review",u(n.webhook_failures_24h??r.webhook_failures_24h)],["Refund rate","refunds","watch",L(c.refund_rate??c.rate)]],refundRows:I,creditRows:P,featureLimitRows:N,funnelRows:R,auditRows:[]}}async function W(t){var y,O,A,C;const a=re(t);if(!a.adminData.canAttempt)throw d.emit("adminDashboard.provider.skipped",{mode:a.adminData.mode}),new Error(`Secure admin data adapter is not ready: ${a.adminData.mode}`);const r=te(t);if(!r)throw d.emit("adminDashboard.provider.skipped",{mode:"config-missing"}),new Error("Supabase browser client is not available for admin data.");const{data:n,error:s}=await r.auth.getSession();if(s||!((y=n.session)!=null&&y.access_token))throw d.emit("adminDashboard.provider.sessionMissing",{message:(s==null?void 0:s.message)??"missing-session"}),new Error("Secure admin data requires a Supabase-authenticated session.");const{data:c,error:h}=await r.auth.getUser(),l=(O=c.user)==null?void 0:O.id;if(h||!l)throw d.emit("adminDashboard.provider.sessionMissing",{message:(h==null?void 0:h.message)??"missing-user"}),new Error("Secure admin data requires a verified Supabase user.");return{config:a,accessToken:n.session.access_token,userId:l,email:((C=(A=c.user)==null?void 0:A.email)==null?void 0:C.toLowerCase())??""}}async function X(t,a){await W(t);const r=te(t);if(!r)throw new Error("Supabase browser client is not available for admin data.");const{data:n,error:s}=await r.functions.invoke(ne,{body:a});if(s)throw d.emit("adminDashboard.provider.failed",{operation:f(a.action,"summary"),message:s.message}),s;if(n!=null&&n.error){const c=f(n.message??n.error,"admin-dashboard-data failed");throw d.emit("adminDashboard.provider.failed",{operation:f(a.action,"summary"),message:c}),new Error(c)}return n??{}}async function Be(t){d.emit("adminDashboard.provider.summary.requested",{functionName:ne});const a=await X(t,{action:"summary"}),r=Fe(a.summary);return d.emit("adminDashboard.provider.summary.loaded",{source:r.source,overviewMetrics:r.overviewKpis.length,signupPoints:r.signupTrend.length}),r}async function Xe(t,a){if(d.emit("adminDashboard.provider.userSearch.requested",{hasQuery:!!a.trim()}),!a.trim())return null;const r=await X(t,{action:"user-search",query:a}),n=v(r.user);if(!Object.keys(n).length)return d.emit("adminDashboard.provider.userSearch.loaded",{found:!1}),null;const s=v(n.profile),c=v(n.board_stats),h=v(n.activity),l=D(n.timeline),y={email:f(s.email,"unknown"),plan:f(s.plan_type,"Free"),boards:T(c.boards_count??c.board_count),points:T(s.credits_balance??h.credit_balance??h.points_balance),country:f(s.country,"--"),lastSeen:f(s.last_seen_at,f(s.created_at,"unknown")),timelineCount:l.length};return d.emit("adminDashboard.provider.userSearch.loaded",{found:!0,boards:y.boards}),y}async function Ve(t,a,r){const n=await W(t);d.emit("adminDashboard.provider.settings.requested",{priceStage:a,ltdLimit:r});const s=await X(t,{action:"save-settings",price_stage:a,ltd_limit:r}),c={mode:n.config.adminData.mode,canAttempt:!0,priceStage:f(s.price_stage,a),ltdLimit:T(s.ltd_limit,r),updatedAt:f(s.updated_at,new Date().toISOString())};return d.emit("adminDashboard.provider.settings.saved",{priceStage:c.priceStage,ltdLimit:c.ltdLimit}),c}async function qe(t,a){const r=await W(t);d.emit("adminDashboard.provider.emergencyClose.requested",{ltdLimit:a});const n=await X(t,{action:"emergency-close",price_stage:"CLOSED",ltd_limit:a}),s={mode:r.config.adminData.mode,canAttempt:!0,priceStage:f(n.price_stage,"CLOSED"),ltdLimit:T(n.ltd_limit,a),updatedAt:f(n.updated_at,new Date().toISOString())};return d.emit("adminDashboard.provider.emergencyClose.staged",{priceStage:s.priceStage,ltdLimit:s.ltdLimit}),s}const K="mindexec.react.admin.dashboard.v1",$e=["STANDARD","EARLY","LTD","CLOSED"],k={priceStage:"EARLY",ltdLimit:100,lastAction:"Admin dashboard restored as a local React shell.",updatedAtUtc:""};function Ge(){return re(U())}const He=[{key:"overview",label:"Overview",icon:Se},{key:"billing",label:"Billing Control",icon:De},{key:"entitlements",label:"Entitlements",icon:ye},{key:"dodo",label:"Dodo Events",icon:we},{key:"refunds",label:"Refunds",icon:xe},{key:"credits",label:"Credits",icon:Ae},{key:"limits",label:"Feature Limits",icon:Ce},{key:"funnel",label:"User Funnel",icon:Ie},{key:"explorer",label:"User Explorer",icon:Ne},{key:"release",label:"Release Readiness",icon:Re},{key:"audit",label:"Audit Log",icon:je}],We=[{label:"06/08",value:2},{label:"06/09",value:4},{label:"06/10",value:5},{label:"06/11",value:8},{label:"06/12",value:7},{label:"06/13",value:13},{label:"06/14",value:11},{label:"06/15",value:16},{label:"06/16",value:19},{label:"06/17",value:18},{label:"06/18",value:23},{label:"06/19",value:26},{label:"06/20",value:31},{label:"06/21",value:34}],Ke=[{label:"06/08",value:0},{label:"06/09",value:12},{label:"06/10",value:18},{label:"06/11",value:12},{label:"06/12",value:29},{label:"06/13",value:41},{label:"06/14",value:38},{label:"06/15",value:49},{label:"06/16",value:64},{label:"06/17",value:72},{label:"06/18",value:81},{label:"06/19",value:94},{label:"06/20",value:108},{label:"06/21",value:124}],G=[{email:"maya@buildloop.ai",plan:"Pro",boards:18,points:1240,country:"US",lastSeen:"today"},{email:"kenji@solo-studio.jp",plan:"Early",boards:9,points:640,country:"JP",lastSeen:"today"},{email:"linh@vietlaunch.dev",plan:"Free",boards:5,points:120,country:"VN",lastSeen:"yesterday"},{email:"alex@indieops.co",plan:"LTD",boards:32,points:2840,country:"SG",lastSeen:"2d ago"}],Je=[{label:"DAU",value:"128",tone:"ok"},{label:"WAU",value:"614",tone:"ok"},{label:"Activation",value:"41.8%",tone:"ok"},{label:"AI usage",value:"63.2%",tone:"ok"},{label:"Paid conversion",value:"4.6%",tone:"warn"},{label:"D1 retention",value:"38.1%",tone:"warn"},{label:"D7 retention",value:"22.7%",tone:"warn"},{label:"Avg points / user",value:"318P"},{label:"AI cost estimate",value:"$74.82"},{label:"Gross margin estimate",value:"$418.10",tone:"ok"}],ze=[{label:"Billing mode",value:"DODO_LIVE_GATED",tone:"warn"},{label:"Webhook received 24h",value:"19",tone:"ok"},{label:"Webhook failed 24h",value:"1",tone:"warn"},{label:"Pending events",value:"3",tone:"warn"},{label:"Active Pro users",value:"28",tone:"ok"},{label:"Manual reviews",value:"2",tone:"warn"},{label:"Locked boards",value:"6",tone:"warn"},{label:"Create blocked today",value:"14"}],ie=[["06/21 18:41","admin@mindexec.local","Changed price stage draft to EARLY"],["06/21 16:10","system","Dodo webhook replay queued"],["06/20 23:55","admin@mindexec.local","Raised LTD capacity review flag"],["06/20 19:20","system","Credit ledger reconciliation completed"]],Ye=[["evt_4912","payment.succeeded","processed","$12.00 USD"],["evt_4911","subscription.created","processed","Pro monthly"],["evt_4910","payment.failed","manual-review","$12.00 USD"],["evt_4909","refund.requested","pending","$24.00 USD"]],Qe=[{label:"Visitor",count:1280,rate:100},{label:"Signup",count:214,rate:16.7},{label:"First board",count:132,rate:61.7},{label:"AI run",count:83,rate:62.8},{label:"Pricing visit",count:44,rate:53},{label:"Paid",count:11,rate:25}],Q=String(H.releaseReady),q=H.releasePosture,Ze=H.blockers.map(t=>{var a;return{id:t.id,label:t.uiLabel||t.label,state:t.state,proof:t.uiProof||t.requiredProof.join(" "),command:t.uiCommand||((a=t.proofCommands[0])==null?void 0:a.command)||"npm run verify:release-blocker-preflight",proofCommands:t.proofCommands.map(r=>({label:r.label,command:r.command,mode:r.mode,liveCall:r.liveCall,hostAffecting:r.hostAffecting,defaultGate:r.defaultGate,requiredInputs:r.requiredInputs}))}}),ea={source:"local",fetchedAt:"",billingMode:"DODO_LIVE_GATED",currency:"USD",usdPerPoint:"0.0002",overviewKpis:Je,billingKpis:ze,operatingHealth:[{label:"Signups today",value:"34",tone:"ok"},{label:"Active users today",value:"128",tone:"ok"},{label:"Points spent users",value:"77"},{label:"AI failures 24h",value:"2",tone:"warn"},{label:"Save failures 24h",value:"0",tone:"ok"},{label:"Webhook failures 24h",value:"1",tone:"warn"}],revenueBand:[{label:"Revenue today",value:"$124.00",tone:"ok"},{label:"7 day revenue",value:"$530.00",tone:"ok"},{label:"30 day revenue",value:"$1,870.00"},{label:"Total revenue",value:"$4,418.00"},{label:"Paid users",value:"28"},{label:"Wallet liability",value:"184,200P",tone:"warn"}],signupTrend:We,revenueTrend:Ke,referrerRows:[["direct","312"],["x.com","128"],["reddit","84"],["youtube","62"]],countryRows:[["US","41%"],["JP","18%"],["SG","11%"],["VN","8%"]],heavyUserRows:G.slice(0,4).map(t=>[t.email.split("@")[0],`${t.boards} boards`]),entitlementRows:G.map(t=>[t.email,t.plan,t.plan==="Free"?"free":"active",t.plan==="Free"?"-":"2026-07-21"]),webhookRows:Ye,refundRows:[["maya@buildloop.ai","$12.00","low","closed"],["alex@indieops.co","$24.00","medium","open"],["unknown@blocked.test","$12.00","high","manual review"]],creditRows:[["18:41","maya@buildloop.ai","+1000P","monthly grant"],["18:20","kenji@solo-studio.jp","-120P","AI task"],["17:52","alex@indieops.co","-280P","image generation"]],featureLimitRows:[["Cloud boards","3","Unlimited","enforced"],["AI runs / month","20","1000","enforced"],["Image uploads","100MB","10GB","watching"],["Private boards","0","Unlimited","enforced"]],funnelRows:Qe,auditRows:ie};function aa(t,a){const r=Math.max(...a.map(n=>n.value),1);return Math.max(8,Math.round(t/r*100))}function ta(t){return t?`admin-kpi-card--${t}`:""}function $(t){return t.map(a=>({label:a[0]??"-",value:a[1]??"-"}))}function ra(t){return"timelineCount"in t?t.timelineCount:9}function oe(t){const a=typeof t=="number"?t:Number(t);return Number.isFinite(a)?Math.max(0,Math.min(1e4,Math.round(a))):k.ltdLimit}function le(t){if(!t||typeof t!="object")return k;const a=t,r=$e.includes(a.priceStage)?String(a.priceStage):k.priceStage,n=typeof a.lastAction=="string"&&a.lastAction.trim()?a.lastAction.slice(0,240):k.lastAction,s=typeof a.updatedAtUtc=="string"?a.updatedAtUtc:"";return{priceStage:r,ltdLimit:oe(a.ltdLimit),lastAction:n,updatedAtUtc:s}}function na(){if(typeof window>"u")return k;try{const t=window.localStorage.getItem(K),a=t?le(JSON.parse(t)):k;return d.emit("adminDashboard.localDraft.loaded",{source:t?"stored":"default",priceStage:a.priceStage,ltdLimit:a.ltdLimit}),a}catch(t){return d.emit("adminDashboard.localDraft.failed",{operation:"load",message:t instanceof Error?t.message:String(t)}),k}}function Z(t,a){const r=le({...t,updatedAtUtc:new Date().toISOString()});if(typeof window>"u")return r;try{window.localStorage.setItem(K,JSON.stringify(r)),d.emit("adminDashboard.localDraft.saved",{source:a,priceStage:r.priceStage,ltdLimit:r.ltdLimit})}catch(n){d.emit("adminDashboard.localDraft.failed",{operation:"save",source:a,message:n instanceof Error?n.message:String(n)})}return r}function pa(){const[t]=E.useState(na),[a,r]=E.useState("overview"),[n,s]=E.useState(!1),c=E.useMemo(()=>Ge(),[]),h=c.adminData.canAttempt,[l,y]=E.useState(ea),[O,A]=E.useState(null),[C,I]=E.useState(t.priceStage),[P,N]=E.useState(t.ltdLimit),[R,b]=E.useState(""),[i,de]=E.useState(""),[ce,g]=E.useState(t.lastAction),[ue,J]=E.useState(()=>new Date),me=E.useMemo(()=>{if(!i.trim())return null;const o=i.trim().toLowerCase();return G.find(m=>m.email.toLowerCase().includes(o))||null},[i]),w=l.source==="supabase-admin-dashboard-data"?O:me,pe=o=>{r(o),d.emit("adminDashboard.tab",{key:o})},fe=async()=>{if(s(!0),d.emit("adminDashboard.refresh"),h){try{const o=await Be(U());y(o),J(new Date(o.fetchedAt)),g("Secure Supabase admin snapshot refreshed.")}catch(o){const m=o instanceof Error?o.message:String(o);d.emit("adminDashboard.provider.refreshFailed",{message:m}),g(`Secure admin snapshot failed: ${m}. Local snapshot remains visible.`)}finally{s(!1)}return}window.setTimeout(()=>{J(new Date),g("Local admin snapshot refreshed. Wire Supabase read adapters before treating it as live production data."),s(!1)},260)},he=async o=>{o.preventDefault();const m=`Saved local settings draft: ${C}, LTD ${P}.`,p=Z({priceStage:C,ltdLimit:P,lastAction:m},"settings.form");if(d.emit("adminDashboard.settings.saved",{priceStage:p.priceStage,ltdLimit:p.ltdLimit}),I(p.priceStage),N(p.ltdLimit),g(p.lastAction),!!h)try{const S=await Ve(U(),p.priceStage,p.ltdLimit);I(S.priceStage),N(S.ltdLimit),g(`Secure admin settings saved: ${S.priceStage}, LTD ${S.ltdLimit}.`)}catch(S){const z=S instanceof Error?S.message:String(S);d.emit("adminDashboard.provider.settingsFailed",{message:z}),g(`Local settings draft saved, but secure provider save failed: ${z}`)}},ve=async()=>{const m=Z({priceStage:"CLOSED",ltdLimit:P,lastAction:"Emergency close staged locally. Real billing closure requires a secure admin adapter."},"emergency.close");if(d.emit("adminDashboard.emergency.closed",{priceStage:m.priceStage,ltdLimit:m.ltdLimit}),I(m.priceStage),N(m.ltdLimit),g(m.lastAction),!!h)try{const p=await qe(U(),m.ltdLimit);I(p.priceStage),N(p.ltdLimit),g(`Secure emergency close staged through admin provider: ${p.priceStage}, LTD ${p.ltdLimit}.`)}catch(p){const S=p instanceof Error?p.message:String(p);d.emit("adminDashboard.provider.emergencyFailed",{message:S}),g(`Emergency close staged locally, but secure provider close failed: ${S}`)}},be=async o=>{if(o.preventDefault(),de(R),d.emit("adminDashboard.user.search",{hasQuery:!!R.trim()}),!R.trim()){A(null),g("User explorer query cleared.");return}if(!h){g("User explorer searched local sample data.");return}try{const m=await Xe(U(),R);A(m),g(m?"User explorer loaded secure provider data.":"No secure provider user matched that query.")}catch(m){const p=m instanceof Error?m.message:String(m);d.emit("adminDashboard.provider.userSearchFailed",{message:p}),A(null),g(`Secure user explorer failed: ${p}`)}};return e.jsxs("div",{className:"page admin-dashboard-page","data-testid":"admin-dashboard-shell","data-admin-storage-key":K,"data-production-adapter-state":c.overallState,"data-admin-provider-mode":c.adminData.mode,"data-admin-provider-ready":c.adminData.canAttempt?"true":"false","data-client-secret-blocked":c.forbiddenClientSecretKeys.length>0?"true":"false",children:[e.jsxs("section",{className:"admin-hero",children:[e.jsxs("div",{children:[e.jsx("div",{className:"eyebrow",children:"Operations Console"}),e.jsx("h1",{children:"MindExec Admin Dashboard"}),e.jsx("p",{children:"React port of the original admin plugin: revenue, billing control, credits, limits, funnel, user explorer, and audit surfaces without loading the Blazor plugin runtime."})]}),e.jsxs("div",{className:"admin-hero-actions",children:[e.jsx("span",{className:"admin-badge","data-testid":"admin-dashboard-mode",children:h?"supabase-admin-provider":"local-admin-shell"}),e.jsxs("button",{className:"btn btn-secondary",type:"button",onClick:fe,disabled:n,"data-testid":"admin-refresh",children:[n?e.jsx(_e,{size:16,className:"spin-icon"}):e.jsx(ge,{size:16}),"Refresh"]})]})]}),e.jsxs("section",{className:"admin-status-strip","data-testid":"admin-status-strip",children:[e.jsx(B,{label:"Billing mode",value:l.billingMode}),e.jsx(B,{label:"Currency",value:l.currency}),e.jsx(B,{label:"USD / point",value:l.usdPerPoint}),e.jsx(B,{label:"Updated",value:ue.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})})]}),e.jsxs("section",{className:"admin-alert admin-alert--warning",children:[e.jsx(Ee,{size:18}),e.jsxs("div",{children:[e.jsx("strong",{children:h?"Secure admin provider ready":"Local React shell only"}),e.jsx("span",{"data-testid":"admin-last-action",children:ce})]})]}),e.jsx("nav",{className:"admin-tabs","aria-label":"Admin dashboard tabs","data-testid":"admin-tabs",children:He.map(o=>{const m=o.icon;return e.jsxs("button",{className:a===o.key?"is-active":"",type:"button",onClick:()=>pe(o.key),"data-testid":`admin-tab-${o.key}`,"data-admin-tab":o.key,children:[e.jsx(m,{size:16}),e.jsx("span",{children:o.label})]},o.key)})}),a==="overview"&&e.jsxs(e.Fragment,{children:[e.jsx(ee,{metrics:l.overviewKpis}),e.jsxs("section",{className:"admin-panel-grid admin-panel-grid--two",children:[e.jsx(x,{title:"Operating Health",metrics:l.operatingHealth}),e.jsx(x,{title:"Revenue Band",metrics:l.revenueBand})]}),e.jsxs("section",{className:"admin-panel-grid admin-panel-grid--two",children:[e.jsx(ae,{title:"Daily Signups",points:l.signupTrend}),e.jsx(ae,{title:"Daily Revenue",points:l.revenueTrend,money:!0})]}),e.jsxs("section",{className:"admin-panel-grid admin-panel-grid--three",children:[e.jsx(x,{title:"Top Referrers",metrics:$(l.referrerRows),compact:!0}),e.jsx(x,{title:"Countries",metrics:$(l.countryRows),compact:!0}),e.jsx(x,{title:"Heavy Users",metrics:$(l.heavyUserRows),compact:!0})]})]}),a==="billing"&&e.jsxs(e.Fragment,{children:[e.jsx(ee,{metrics:l.billingKpis}),e.jsxs("section",{className:"admin-panel-grid admin-panel-grid--three",children:[e.jsx(x,{title:"Webhook Status",metrics:[{label:"24h received",value:"19",tone:"ok"},{label:"24h failed",value:"1",tone:"warn"},{label:"Pending",value:"3",tone:"warn"},{label:"Last success",value:"18:41"}]}),e.jsx(x,{title:"Entitlement State",metrics:[{label:"Active",value:"28",tone:"ok"},{label:"Grace",value:"3",tone:"warn"},{label:"Suspended",value:"2",tone:"danger"},{label:"Revoked",value:"1"}]}),e.jsxs("form",{className:"admin-panel admin-settings-panel",onSubmit:he,"data-testid":"admin-settings-form",children:[e.jsxs("div",{className:"admin-panel-head",children:[e.jsx("h2",{children:"Price Controls"}),e.jsxs("button",{className:"btn btn-primary",type:"submit","data-testid":"admin-save-settings",children:[e.jsx(ke,{size:15}),"Save draft"]})]}),e.jsxs("label",{children:["Price stage",e.jsxs("select",{value:C,onChange:o=>I(o.target.value),"data-testid":"admin-price-stage",children:[e.jsx("option",{value:"STANDARD",children:"STANDARD"}),e.jsx("option",{value:"EARLY",children:"EARLY"}),e.jsx("option",{value:"LTD",children:"LTD"}),e.jsx("option",{value:"CLOSED",children:"CLOSED"})]})]}),e.jsxs("label",{children:["LTD limit",e.jsx("input",{type:"number",min:"0",value:P,onChange:o=>N(oe(o.target.value)),"data-testid":"admin-ltd-limit"})]}),e.jsxs("button",{className:"btn btn-secondary admin-danger-button",type:"button",onClick:ve,"data-testid":"admin-emergency-close",children:[e.jsx(Oe,{size:15}),"Stage emergency close"]})]})]})]}),a==="entitlements"&&e.jsx(M,{title:"Entitlements",columns:["User","Plan","Status","Renews"],rows:l.entitlementRows}),a==="dodo"&&e.jsx(M,{title:"Dodo Webhook Events",columns:["Event","Type","Status","Amount"],rows:l.webhookRows}),a==="refunds"&&e.jsx(M,{title:"Refund Reviews",columns:["User","Amount","Risk","Status"],rows:[...l.refundRows]}),a==="credits"&&e.jsx(M,{title:"Credit Ledger",columns:["Time","User","Delta","Reason"],rows:l.creditRows}),a==="limits"&&e.jsx(M,{title:"Feature Limits",columns:["Feature","Free","Pro","Status"],rows:l.featureLimitRows}),a==="funnel"&&e.jsx(ia,{rows:l.funnelRows}),a==="explorer"&&e.jsxs("section",{className:"admin-panel",children:[e.jsxs("div",{className:"admin-panel-head",children:[e.jsx("h2",{children:"User Explorer"}),e.jsx("span",{className:"admin-note",children:h?"Secure provider data":"Local sample data"})]}),e.jsxs("form",{className:"admin-search-row",onSubmit:be,"data-testid":"admin-user-search-form",children:[e.jsx("input",{"aria-label":"Search user",value:R,onChange:o=>b(o.target.value),placeholder:"email, domain, or segment","data-testid":"admin-user-query"}),e.jsxs("button",{className:"btn btn-primary",type:"submit","data-testid":"admin-user-search",children:[e.jsx(Pe,{size:15}),"Search"]})]}),i&&!w&&e.jsx("div",{className:"admin-empty","data-testid":"admin-user-empty",children:h?"No secure provider user matched that query.":"No local sample user matched that query."}),w&&e.jsxs("div",{className:"admin-user-card","data-testid":"admin-user-card",children:[e.jsx("strong",{children:w.email}),e.jsxs("span",{children:[w.plan," / ",w.country," / last seen ",w.lastSeen]}),e.jsx(x,{title:"User Snapshot",compact:!0,metrics:[{label:"Boards",value:String(w.boards)},{label:"Points",value:`${w.points}P`},{label:"Timeline",value:`${ra(w)} events`}]})]})]}),a==="release"&&e.jsx(sa,{blockers:Ze}),a==="audit"&&e.jsxs("section",{className:"admin-panel-grid admin-panel-grid--two",children:[e.jsx(oa,{}),e.jsx(M,{title:"Recent Setting Changes",columns:["Time","Admin","Action"],rows:l.auditRows.length?l.auditRows:ie,compact:!0})]})]})}function sa({blockers:t}){return e.jsxs("section",{className:"admin-release-readiness","data-testid":"admin-release-readiness-panel","data-release-ready":Q,"data-release-posture":q,"data-release-blocker-count":t.length,children:[e.jsxs("div",{className:"admin-panel-head",children:[e.jsxs("div",{children:[e.jsx("h2",{children:"Release Readiness"}),e.jsx("p",{className:"admin-release-summary",children:"Local gates are green enough for RC work, but release remains held until live proofs and explicit approval are complete."})]}),e.jsx("span",{className:"admin-badge admin-badge--hold","data-testid":"admin-release-posture",children:q})]}),e.jsxs("div",{className:"admin-release-grid",children:[e.jsx(x,{title:"Local RC State",compact:!0,metrics:[{label:"Release ready",value:Q,tone:"warn"},{label:"Posture",value:q,tone:"warn"},{label:"Blockers",value:String(t.length),tone:"warn"},{label:"Default deploy/publish",value:"blocked",tone:"ok"}]}),e.jsxs("article",{className:"admin-panel admin-panel--compact",children:[e.jsx("div",{className:"admin-panel-head",children:e.jsx("h2",{children:"Proof Packet"})}),e.jsxs("div",{className:"admin-release-command-list",children:[e.jsx("code",{children:"npm run verify:release-blocker-preflight"}),e.jsx("code",{children:"npm run verify:release-proof-packet"}),e.jsx("code",{children:"npm run check"}),e.jsx("code",{children:"npm run build"})]})]})]}),e.jsx("div",{className:"admin-release-blocker-list","data-testid":"admin-release-blocker-list",children:t.map(a=>e.jsxs("article",{className:"admin-release-blocker","data-testid":"admin-release-blocker","data-release-blocker-id":a.id,"data-release-blocker-state":a.state,children:[e.jsxs("div",{children:[e.jsx("strong",{children:a.label}),e.jsx("span",{children:a.proof})]}),e.jsxs("div",{children:[e.jsx("span",{className:"admin-release-state",children:a.state}),e.jsx("code",{children:a.command})]}),e.jsx("div",{className:"admin-release-proof-command-list","data-testid":"admin-release-proof-command-list","data-release-blocker-id":a.id,"data-release-proof-command-count":a.proofCommands.length,children:a.proofCommands.map(r=>e.jsxs("div",{className:"admin-release-proof-command","data-testid":"admin-release-proof-command","data-release-proof-command-mode":r.mode,"data-release-proof-command-live-call":String(r.liveCall),"data-release-proof-command-host-affecting":String(r.hostAffecting),"data-release-proof-command-default-gate":String(r.defaultGate),children:[e.jsx("span",{children:r.label}),e.jsx("code",{children:r.command}),e.jsxs("div",{className:"admin-release-proof-command__badges",children:[e.jsx("span",{children:r.mode}),e.jsx("span",{children:r.liveCall?"live":"local"}),e.jsx("span",{children:r.hostAffecting?"host-affecting":"host-safe"}),e.jsx("span",{children:r.defaultGate?"default-gate":"manual-only"})]})]},`${a.id}:${r.command}`))})]},a.id))})]})}function B({label:t,value:a}){return e.jsxs("div",{className:"admin-status-pill",children:[e.jsx("span",{children:t}),e.jsx("strong",{children:a})]})}function ee({metrics:t}){return e.jsx("section",{className:"admin-kpi-grid",children:t.map(a=>e.jsxs("article",{className:`admin-kpi-card ${ta(a.tone)}`,children:[e.jsx("span",{children:a.label}),e.jsx("strong",{children:a.value})]},a.label))})}function x({title:t,metrics:a,compact:r}){return e.jsxs("article",{className:`admin-panel ${r?"admin-panel--compact":""}`,children:[e.jsx("div",{className:"admin-panel-head",children:e.jsx("h2",{children:t})}),e.jsx("div",{className:"admin-metric-list",children:a.map(n=>e.jsxs("div",{className:`admin-metric-row ${n.tone?`admin-metric-row--${n.tone}`:""}`,children:[e.jsx("span",{children:n.label}),e.jsx("strong",{children:n.value})]},n.label))})]})}function ae({title:t,points:a,money:r}){return e.jsxs("article",{className:"admin-panel",children:[e.jsxs("div",{className:"admin-panel-head",children:[e.jsx("h2",{children:t}),e.jsx("span",{className:"admin-note",children:"Last 14 days"})]}),e.jsx("div",{className:"admin-mini-chart",children:a.map(n=>e.jsxs("div",{className:"admin-bar-item",children:[e.jsx("div",{className:"admin-bar",style:{height:`${aa(n.value,a)}%`}}),e.jsx("span",{children:n.label.slice(3)}),e.jsx("b",{children:r?`$${n.value}`:n.value})]},n.label))})]})}function M({title:t,columns:a,rows:r,compact:n}){return e.jsxs("section",{className:`admin-panel ${n?"admin-panel--compact":""}`,children:[e.jsx("div",{className:"admin-panel-head",children:e.jsx("h2",{children:t})}),e.jsx("div",{className:"admin-table-wrap",children:e.jsxs("table",{className:"admin-table",children:[e.jsx("thead",{children:e.jsx("tr",{children:a.map(s=>e.jsx("th",{children:s},s))})}),e.jsx("tbody",{children:r.map(s=>e.jsx("tr",{children:s.map(c=>e.jsx("td",{children:c},c))},s.join("|")))})]})})]})}function ia({rows:t}){return e.jsxs("section",{className:"admin-panel",children:[e.jsxs("div",{className:"admin-panel-head",children:[e.jsx("h2",{children:"User Funnel"}),e.jsx("span",{className:"admin-note",children:"30 day sample"})]}),e.jsx("div",{className:"admin-funnel-list",children:t.map(a=>e.jsxs("div",{className:"admin-funnel-row",children:[e.jsxs("div",{children:[e.jsx("strong",{children:a.label}),e.jsxs("span",{children:[a.count.toLocaleString()," users / ",a.rate,"%"]})]}),e.jsx("div",{className:"admin-progress-track",children:e.jsx("div",{className:"admin-progress-fill",style:{width:`${Math.min(100,a.rate)}%`}})})]},a.label))})]})}function oa(){const t=[["Paid users",28,100],["D7 retention",22,35],["AI failure rate",2,1]];return e.jsxs("article",{className:"admin-panel",children:[e.jsx("div",{className:"admin-panel-head",children:e.jsx("h2",{children:"Goal Progress"})}),e.jsx("div",{className:"admin-funnel-list",children:t.map(([a,r,n])=>{const s=a==="AI failure rate"?Math.max(8,100-Math.min(100,r/10*100)):Math.min(100,r/n*100);return e.jsxs("div",{className:"admin-funnel-row",children:[e.jsxs("div",{children:[e.jsx("strong",{children:a}),e.jsxs("span",{children:[r," / ",n]})]}),e.jsx("div",{className:"admin-progress-track",children:e.jsx("div",{className:"admin-progress-fill",style:{width:`${s}%`}})})]},a)})})]})}export{pa as AdminDashboardPage};
@@ -1 +1 @@
1
- import{r as d,j as a}from"./vendor-react-BXzpOyCS.js";import{g as l,A as b}from"./index-B9m3XXKS.js";import{as as h,aG as g,bb as C,a8 as j,bc as E,b0 as N,ba as w,aS as A,b2 as S,bd as p,be as f}from"./vendor-icons-D0xKCnZS.js";import"./app-runtime-xD2Z3NdN.js";const k=[{id:"/",label:"Home",description:"MindExec product surface",icon:g},{id:"/mindcanvas",label:"MindCanvas",description:"AI execution canvas",icon:C},{id:"/planmaster",label:"PlanMaster",description:"Execution planning board",icon:j},{id:"/tools",label:"Tools",description:"Free browser utilities",icon:E},{id:"/youtube",label:"YouTube",description:"Video capture to canvas",icon:N},{id:"/code",label:"Code",description:"CodeGraph workspace preview",icon:w},{id:"/pricing",label:"Pricing",description:"USD paid path",icon:A},{id:"/company-core",label:"Company Core",description:"Business operating view",icon:S},{id:"/login",label:"Login",description:"Google sign-in shell",icon:p}];function M({route:s,navigate:n,canvasActions:t=[]}){const u=t.length>0,[i,v]=d.useState(()=>l());d.useEffect(()=>{const e=()=>v(l());return window.addEventListener(b,e),window.addEventListener("storage",e),()=>{window.removeEventListener(b,e),window.removeEventListener("storage",e)}},[]);const m=i?f:p,c=i?`Account: signed in as ${i.email}`:"Account: sign in with Google",x=s==="/login"||!!i;return a.jsxs("aside",{className:"app-sidebar","aria-label":"MindExec navigation",children:[a.jsx("button",{className:"sidebar-brand",type:"button",title:"Open MindCanvas","aria-label":"Open MindCanvas",onClick:()=>n("/mindcanvas"),children:a.jsx(h,{size:22})}),a.jsx("div",{className:"sidebar-divider"}),a.jsx("nav",{className:"sidebar-nav",children:k.slice(1,9).map(e=>{const o=e.icon,r=e.id===s||e.id==="/mindcanvas"&&s==="/mindmap"||e.id==="/planmaster"&&s==="/planagent"||e.id==="/tools"&&s.startsWith("/tools/")||e.id==="/"&&s==="/";return a.jsx("button",{type:"button",className:`sidebar-icon ${r?"is-active":""}`,title:`${e.label}: ${e.description}`,"aria-label":e.label,"aria-current":r?"page":void 0,onClick:()=>n(e.id),children:a.jsx(o,{size:21})},e.id)})}),a.jsx("div",{className:"sidebar-spacer"}),u&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"sidebar-divider sidebar-divider--context"}),a.jsx("nav",{className:"sidebar-nav sidebar-nav--context","aria-label":"MindCanvas quick actions",children:t.map(e=>{const o=e.icon;return a.jsx("button",{type:"button",className:`sidebar-icon sidebar-icon--context ${e.active?"is-active":""}`,title:`${e.label}: ${e.description}`,"aria-label":e.label,"aria-pressed":e.active?"true":void 0,"data-testid":e.testId,onClick:e.onClick,children:a.jsx(o,{size:20})},e.id)})})]}),a.jsx("button",{className:`sidebar-icon ${x?"is-active":""}`,type:"button",title:c,"aria-label":c,"data-testid":"sidebar-account","data-auth-session-active":i?"true":"false","data-auth-session-source":(i==null?void 0:i.source)??"none",onClick:()=>n("/login"),children:a.jsx(m,{size:20})})]})}export{M as AppSidebar};
1
+ import{r as d,j as a}from"./vendor-react-BXzpOyCS.js";import{g as l,A as b}from"./index-Rjp0zHKN.js";import{as as h,aG as g,bb as C,a8 as j,bc as E,b0 as N,ba as w,aS as A,b2 as S,bd as p,be as f}from"./vendor-icons-D0xKCnZS.js";import"./app-runtime-xD2Z3NdN.js";const k=[{id:"/",label:"Home",description:"MindExec product surface",icon:g},{id:"/mindcanvas",label:"MindCanvas",description:"AI execution canvas",icon:C},{id:"/planmaster",label:"PlanMaster",description:"Execution planning board",icon:j},{id:"/tools",label:"Tools",description:"Free browser utilities",icon:E},{id:"/youtube",label:"YouTube",description:"Video capture to canvas",icon:N},{id:"/code",label:"Code",description:"CodeGraph workspace preview",icon:w},{id:"/pricing",label:"Pricing",description:"USD paid path",icon:A},{id:"/company-core",label:"Company Core",description:"Business operating view",icon:S},{id:"/login",label:"Login",description:"Google sign-in shell",icon:p}];function M({route:s,navigate:n,canvasActions:t=[]}){const u=t.length>0,[i,v]=d.useState(()=>l());d.useEffect(()=>{const e=()=>v(l());return window.addEventListener(b,e),window.addEventListener("storage",e),()=>{window.removeEventListener(b,e),window.removeEventListener("storage",e)}},[]);const m=i?f:p,c=i?`Account: signed in as ${i.email}`:"Account: sign in with Google",x=s==="/login"||!!i;return a.jsxs("aside",{className:"app-sidebar","aria-label":"MindExec navigation",children:[a.jsx("button",{className:"sidebar-brand",type:"button",title:"Open MindCanvas","aria-label":"Open MindCanvas",onClick:()=>n("/mindcanvas"),children:a.jsx(h,{size:22})}),a.jsx("div",{className:"sidebar-divider"}),a.jsx("nav",{className:"sidebar-nav",children:k.slice(1,9).map(e=>{const o=e.icon,r=e.id===s||e.id==="/mindcanvas"&&s==="/mindmap"||e.id==="/planmaster"&&s==="/planagent"||e.id==="/tools"&&s.startsWith("/tools/")||e.id==="/"&&s==="/";return a.jsx("button",{type:"button",className:`sidebar-icon ${r?"is-active":""}`,title:`${e.label}: ${e.description}`,"aria-label":e.label,"aria-current":r?"page":void 0,onClick:()=>n(e.id),children:a.jsx(o,{size:21})},e.id)})}),a.jsx("div",{className:"sidebar-spacer"}),u&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:"sidebar-divider sidebar-divider--context"}),a.jsx("nav",{className:"sidebar-nav sidebar-nav--context","aria-label":"MindCanvas quick actions",children:t.map(e=>{const o=e.icon;return a.jsx("button",{type:"button",className:`sidebar-icon sidebar-icon--context ${e.active?"is-active":""}`,title:`${e.label}: ${e.description}`,"aria-label":e.label,"aria-pressed":e.active?"true":void 0,"data-testid":e.testId,onClick:e.onClick,children:a.jsx(o,{size:20})},e.id)})})]}),a.jsx("button",{className:`sidebar-icon ${x?"is-active":""}`,type:"button",title:c,"aria-label":c,"data-testid":"sidebar-account","data-auth-session-active":i?"true":"false","data-auth-session-source":(i==null?void 0:i.source)??"none",onClick:()=>n("/login"),children:a.jsx(m,{size:20})})]})}export{M as AppSidebar};
@@ -1 +1 @@
1
- import{r,j as e}from"./vendor-react-BXzpOyCS.js";import{g as C,a as j,s as M,b as I,c as P}from"./index-B9m3XXKS.js";import{p as E,P as B}from"./pricingCheckoutShell-O-DnwmbU.js";import{r as $,l as O,b as G,s as K,a as U,u as q}from"./supabaseAuthAdapter-Bptc9G29.js";import{R as b}from"./app-runtime-xD2Z3NdN.js";import{X as _,ao as D,ag as F,aT as R,N as T,f as H,aU as k,K as L,aV as Y,ac as V}from"./vendor-icons-D0xKCnZS.js";function X(a){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(a.trim())}function S(){return $(j())}function N(a,t){return a.source==="supabase-provider-session"?t?`Google sign-in is active for ${a.email}. Return to pricing to continue checkout.`:`Google sign-in is active for ${a.email}.`:t?"A local Google auth shell is active. Return to pricing to continue checkout.":"A local Google auth shell is already active for this browser."}function z(a,t){return t?`Local Google auth shell ready for ${a}. Return to pricing to continue the gated checkout.`:`Local Google auth shell ready for ${a}. Secure Supabase OAuth can replace this adapter later.`}function se({navigate:a}){const[t,l]=r.useState(!1),[n,h]=r.useState(()=>C()),[o]=r.useState(()=>E()),p=r.useMemo(()=>S(),[]),[w,i]=r.useState(()=>{const s=C(),d=E();return s?N(s,!!d):d?"Sign in to continue MindCanvas Pro checkout. Payment remains gated until the secure adapter is connected.":"Use your Google account to sync cloud projects. No password to create or remember."});r.useEffect(()=>{if(n||!p.auth.canAttempt)return;let s=!1;return(async()=>{try{const c=await O(j());if(s||!c.session)return;const x=M({...c.session,source:"supabase-provider-session"});h(x),i(N(x,!!o))}catch(c){b.emit("auth.supabase.sessionRestore.uiFailed",{message:c instanceof Error?c.message:String(c)})}})(),()=>{s=!0}},[o,p.auth.canAttempt,n]);const m=()=>{const s=C();if(s)return h(s),i(N(s,!!o)),s;const d=P();return h(d),i(z(d.email,!!o)),d},g=()=>{const s=m(),d={hasCheckoutIntent:!!o,signedIn:!!s,sessionSource:s.source};o?b.emit("auth.returnToPricing",d):b.emit("auth.continueMindCanvas",d),a(o?"/pricing":"/mindcanvas")},f=()=>{const s=P();h(s),i(z(s.email,!!o)),l(!1),window.setTimeout(g,240)},u=async()=>{if(l(!0),p.auth.canAttempt)try{const s=G("/login",o?"/pricing":"/mindcanvas");i("Opening secure Google sign-in..."),await K(j(),s);return}catch(s){i(`Secure Google sign-in failed: ${s instanceof Error?s.message:String(s)}`),l(!1);return}window.setTimeout(()=>{f()},550)},y=n?o?"Continue checkout":"Continue to MindCanvas":t?"Opening Google...":"Continue with Google",v=n?g:u;return e.jsxs(A,{page:"login",children:[e.jsx("button",{className:"auth-close",type:"button",title:"Close",onClick:()=>a("/mindcanvas"),"data-testid":"auth-close",children:e.jsx(_,{size:16})}),e.jsxs("div",{className:"auth-logo",children:[e.jsx(D,{size:24}),e.jsx("strong",{children:"MindExec"})]}),e.jsx("h1",{children:"Sign in with Google"}),e.jsx("p",{"data-testid":"auth-message",children:w}),e.jsxs("button",{className:"google-button",type:"button",disabled:t,onClick:v,"data-testid":"auth-google-shell",children:[e.jsx("span",{className:"google-g",children:"G"}),y]}),e.jsxs("div",{className:"auth-action-strip",children:[n&&o&&e.jsx("button",{type:"button",onClick:g,"data-testid":"auth-return-pricing",children:"Return to pricing"}),e.jsx("button",{type:"button",onClick:()=>a("/forgot-password"),"data-testid":"auth-forgot-password",children:"Forgot password"}),e.jsx("button",{type:"button",onClick:()=>a("/pricing"),"data-testid":"auth-view-pricing",children:"View pricing"})]}),e.jsx("p",{className:"auth-note",children:p.auth.canAttempt?"Secure Supabase OAuth is connected for this browser build.":"The React port keeps this as a local auth shell until the secure Supabase OAuth adapter is connected."})]})}function ae({navigate:a}){const[t,l]=r.useState(""),[n,h]=r.useState(!1),[o,p]=r.useState(""),[w,i]=r.useState(!1),m=r.useMemo(()=>S(),[]),g=async f=>{if(f.preventDefault(),!X(t)){p("Enter a valid email address.");return}if(h(!0),p(""),m.passwordReset.canAttempt){try{const u=G("/reset-password","/login");await U(j(),t,u),i(!0),h(!1),b.emit("auth.reset.requested",{emailDomain:t.split("@")[1]||"",provider:"supabase"})}catch(u){p(u instanceof Error?u.message:String(u)),h(!1)}return}window.setTimeout(()=>{i(!0),h(!1),b.emit("auth.reset.requested",{emailDomain:t.split("@")[1]||""})},450)};return e.jsxs(A,{page:"forgot-password",children:[e.jsxs("button",{className:"auth-back",type:"button",onClick:()=>a("/login"),"data-testid":"forgot-back-login",children:[e.jsx(F,{size:16}),"Sign in"]}),e.jsx("div",{className:"auth-mark auth-mark--amber",children:e.jsx(R,{size:28})}),e.jsx("h1",{children:"Forgot password?"}),e.jsx("p",{children:"No worries. Enter your email and the React auth shell will walk through the reset flow."}),o&&e.jsx("div",{className:"auth-inline-error","data-testid":"forgot-error",children:o}),w?e.jsxs("div",{className:"auth-success-panel","data-testid":"forgot-success",children:[e.jsx(T,{size:32}),e.jsx("strong",{children:"Check your email"}),e.jsxs("span",{children:["Reset instructions were prepared for ",t,"."]}),e.jsx("button",{className:"btn btn-primary",type:"button",onClick:()=>a("/reset-password"),"data-testid":"forgot-continue-reset",children:"Continue to reset"})]}):e.jsxs("form",{className:"auth-form",onSubmit:g,"data-testid":"forgot-password-form",children:[e.jsxs("label",{children:[e.jsx("span",{children:"Email Address"}),e.jsxs("div",{className:"auth-input-wrap",children:[e.jsx(R,{size:18}),e.jsx("input",{value:t,onChange:f=>l(f.target.value),type:"email",placeholder:"you@example.com","data-testid":"forgot-email"})]})]}),e.jsxs("button",{className:"btn btn-primary auth-submit",type:"submit",disabled:n,"data-testid":"forgot-submit",children:[e.jsx(H,{size:16}),n?"Sending...":"Send Reset Link"]})]})]})}function re({navigate:a}){const[t,l]=r.useState(""),[n,h]=r.useState(""),[o,p]=r.useState(!1),[w,i]=r.useState(!1),[m,g]=r.useState(!1),[f,u]=r.useState(""),y=r.useMemo(()=>S(),[]),v=r.useMemo(()=>t.length>=6&&t===n,[n,t]),s=n.length>0&&n!==t,d=async c=>{if(c.preventDefault(),t.length<6){u("Password must be at least 6 characters.");return}if(t!==n){u("Passwords do not match.");return}if(i(!0),u(""),y.passwordReset.canAttempt){try{await q(j(),t),g(!0),i(!1),b.emit("auth.password.updated",{provider:"supabase"})}catch(x){u(x instanceof Error?x.message:String(x)),i(!1)}return}window.setTimeout(()=>{g(!0),i(!1),b.emit("auth.password.updated",{localShell:!0})},520)};return e.jsxs(A,{page:"reset-password",children:[e.jsx("div",{className:`auth-mark ${m?"auth-mark--success":""}`,children:m?e.jsx(T,{size:30}):e.jsx(k,{size:30})}),e.jsx("h1",{children:m?"Password reset!":"Reset password"}),e.jsx("p",{"data-testid":"reset-message",children:m?"Your local auth shell accepted the new password state.":"Enter a new password and confirm it below."}),f&&e.jsx("div",{className:"auth-inline-error","data-testid":"reset-error",children:f}),m?e.jsxs("button",{className:"btn btn-primary auth-submit",type:"button",onClick:()=>a("/login"),"data-testid":"reset-login",children:[e.jsx(L,{size:16}),"Sign In"]}):e.jsxs("form",{className:"auth-form",onSubmit:d,"data-testid":"reset-password-form",children:[e.jsxs("label",{children:[e.jsx("span",{children:"New Password"}),e.jsxs("div",{className:"auth-input-wrap",children:[e.jsx(k,{size:18}),e.jsx("input",{value:t,onChange:c=>l(c.target.value),type:o?"text":"password",placeholder:"Enter new password","data-testid":"reset-password-input"}),e.jsx("button",{type:"button",className:"auth-icon-button",title:"Toggle password visibility",onClick:()=>p(c=>!c),"data-testid":"reset-toggle-visibility",children:o?e.jsx(Y,{size:17}):e.jsx(V,{size:17})})]}),e.jsx("span",{className:`auth-requirement ${t.length>=6?"is-met":""}`,children:"At least 6 characters"})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Confirm Password"}),e.jsxs("div",{className:"auth-input-wrap",children:[e.jsx(k,{size:18}),e.jsx("input",{value:n,onChange:c=>h(c.target.value),type:"password",placeholder:"Confirm new password","data-testid":"reset-confirm-input"})]}),n&&e.jsx("span",{className:`auth-requirement ${s?"is-error":"is-met"}`,children:s?"Passwords do not match":"Passwords match"})]}),e.jsxs("button",{className:"btn btn-primary auth-submit",type:"submit",disabled:!v||w,"data-testid":"reset-submit",children:[e.jsx(L,{size:16}),w?"Updating...":"Update Password"]})]})]})}function A({children:a,page:t}){const l=S();return e.jsxs("div",{className:"auth-page","data-testid":"auth-shell","data-auth-page":t,"data-auth-storage-key":I,"data-pricing-checkout-intent-key":B,"data-production-adapter-state":l.overallState,"data-auth-provider-mode":l.auth.mode,"data-auth-provider-ready":l.auth.canAttempt?"true":"false","data-client-secret-blocked":l.forbiddenClientSecretKeys.length>0?"true":"false",children:[e.jsx("div",{className:"auth-scrim"}),e.jsx("section",{className:"auth-card",children:a})]})}export{ae as ForgotPasswordPage,se as LoginPage,re as ResetPasswordPage};
1
+ import{r,j as e}from"./vendor-react-BXzpOyCS.js";import{g as C,a as j,s as M,b as I,c as P}from"./index-Rjp0zHKN.js";import{p as E,P as B}from"./pricingCheckoutShell-O-DnwmbU.js";import{r as $,l as O,b as G,s as K,a as U,u as q}from"./supabaseAuthAdapter-Bptc9G29.js";import{R as b}from"./app-runtime-xD2Z3NdN.js";import{X as _,ao as D,ag as F,aT as R,N as T,f as H,aU as k,K as L,aV as Y,ac as V}from"./vendor-icons-D0xKCnZS.js";function X(a){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(a.trim())}function S(){return $(j())}function N(a,t){return a.source==="supabase-provider-session"?t?`Google sign-in is active for ${a.email}. Return to pricing to continue checkout.`:`Google sign-in is active for ${a.email}.`:t?"A local Google auth shell is active. Return to pricing to continue checkout.":"A local Google auth shell is already active for this browser."}function z(a,t){return t?`Local Google auth shell ready for ${a}. Return to pricing to continue the gated checkout.`:`Local Google auth shell ready for ${a}. Secure Supabase OAuth can replace this adapter later.`}function se({navigate:a}){const[t,l]=r.useState(!1),[n,h]=r.useState(()=>C()),[o]=r.useState(()=>E()),p=r.useMemo(()=>S(),[]),[w,i]=r.useState(()=>{const s=C(),d=E();return s?N(s,!!d):d?"Sign in to continue MindCanvas Pro checkout. Payment remains gated until the secure adapter is connected.":"Use your Google account to sync cloud projects. No password to create or remember."});r.useEffect(()=>{if(n||!p.auth.canAttempt)return;let s=!1;return(async()=>{try{const c=await O(j());if(s||!c.session)return;const x=M({...c.session,source:"supabase-provider-session"});h(x),i(N(x,!!o))}catch(c){b.emit("auth.supabase.sessionRestore.uiFailed",{message:c instanceof Error?c.message:String(c)})}})(),()=>{s=!0}},[o,p.auth.canAttempt,n]);const m=()=>{const s=C();if(s)return h(s),i(N(s,!!o)),s;const d=P();return h(d),i(z(d.email,!!o)),d},g=()=>{const s=m(),d={hasCheckoutIntent:!!o,signedIn:!!s,sessionSource:s.source};o?b.emit("auth.returnToPricing",d):b.emit("auth.continueMindCanvas",d),a(o?"/pricing":"/mindcanvas")},f=()=>{const s=P();h(s),i(z(s.email,!!o)),l(!1),window.setTimeout(g,240)},u=async()=>{if(l(!0),p.auth.canAttempt)try{const s=G("/login",o?"/pricing":"/mindcanvas");i("Opening secure Google sign-in..."),await K(j(),s);return}catch(s){i(`Secure Google sign-in failed: ${s instanceof Error?s.message:String(s)}`),l(!1);return}window.setTimeout(()=>{f()},550)},y=n?o?"Continue checkout":"Continue to MindCanvas":t?"Opening Google...":"Continue with Google",v=n?g:u;return e.jsxs(A,{page:"login",children:[e.jsx("button",{className:"auth-close",type:"button",title:"Close",onClick:()=>a("/mindcanvas"),"data-testid":"auth-close",children:e.jsx(_,{size:16})}),e.jsxs("div",{className:"auth-logo",children:[e.jsx(D,{size:24}),e.jsx("strong",{children:"MindExec"})]}),e.jsx("h1",{children:"Sign in with Google"}),e.jsx("p",{"data-testid":"auth-message",children:w}),e.jsxs("button",{className:"google-button",type:"button",disabled:t,onClick:v,"data-testid":"auth-google-shell",children:[e.jsx("span",{className:"google-g",children:"G"}),y]}),e.jsxs("div",{className:"auth-action-strip",children:[n&&o&&e.jsx("button",{type:"button",onClick:g,"data-testid":"auth-return-pricing",children:"Return to pricing"}),e.jsx("button",{type:"button",onClick:()=>a("/forgot-password"),"data-testid":"auth-forgot-password",children:"Forgot password"}),e.jsx("button",{type:"button",onClick:()=>a("/pricing"),"data-testid":"auth-view-pricing",children:"View pricing"})]}),e.jsx("p",{className:"auth-note",children:p.auth.canAttempt?"Secure Supabase OAuth is connected for this browser build.":"The React port keeps this as a local auth shell until the secure Supabase OAuth adapter is connected."})]})}function ae({navigate:a}){const[t,l]=r.useState(""),[n,h]=r.useState(!1),[o,p]=r.useState(""),[w,i]=r.useState(!1),m=r.useMemo(()=>S(),[]),g=async f=>{if(f.preventDefault(),!X(t)){p("Enter a valid email address.");return}if(h(!0),p(""),m.passwordReset.canAttempt){try{const u=G("/reset-password","/login");await U(j(),t,u),i(!0),h(!1),b.emit("auth.reset.requested",{emailDomain:t.split("@")[1]||"",provider:"supabase"})}catch(u){p(u instanceof Error?u.message:String(u)),h(!1)}return}window.setTimeout(()=>{i(!0),h(!1),b.emit("auth.reset.requested",{emailDomain:t.split("@")[1]||""})},450)};return e.jsxs(A,{page:"forgot-password",children:[e.jsxs("button",{className:"auth-back",type:"button",onClick:()=>a("/login"),"data-testid":"forgot-back-login",children:[e.jsx(F,{size:16}),"Sign in"]}),e.jsx("div",{className:"auth-mark auth-mark--amber",children:e.jsx(R,{size:28})}),e.jsx("h1",{children:"Forgot password?"}),e.jsx("p",{children:"No worries. Enter your email and the React auth shell will walk through the reset flow."}),o&&e.jsx("div",{className:"auth-inline-error","data-testid":"forgot-error",children:o}),w?e.jsxs("div",{className:"auth-success-panel","data-testid":"forgot-success",children:[e.jsx(T,{size:32}),e.jsx("strong",{children:"Check your email"}),e.jsxs("span",{children:["Reset instructions were prepared for ",t,"."]}),e.jsx("button",{className:"btn btn-primary",type:"button",onClick:()=>a("/reset-password"),"data-testid":"forgot-continue-reset",children:"Continue to reset"})]}):e.jsxs("form",{className:"auth-form",onSubmit:g,"data-testid":"forgot-password-form",children:[e.jsxs("label",{children:[e.jsx("span",{children:"Email Address"}),e.jsxs("div",{className:"auth-input-wrap",children:[e.jsx(R,{size:18}),e.jsx("input",{value:t,onChange:f=>l(f.target.value),type:"email",placeholder:"you@example.com","data-testid":"forgot-email"})]})]}),e.jsxs("button",{className:"btn btn-primary auth-submit",type:"submit",disabled:n,"data-testid":"forgot-submit",children:[e.jsx(H,{size:16}),n?"Sending...":"Send Reset Link"]})]})]})}function re({navigate:a}){const[t,l]=r.useState(""),[n,h]=r.useState(""),[o,p]=r.useState(!1),[w,i]=r.useState(!1),[m,g]=r.useState(!1),[f,u]=r.useState(""),y=r.useMemo(()=>S(),[]),v=r.useMemo(()=>t.length>=6&&t===n,[n,t]),s=n.length>0&&n!==t,d=async c=>{if(c.preventDefault(),t.length<6){u("Password must be at least 6 characters.");return}if(t!==n){u("Passwords do not match.");return}if(i(!0),u(""),y.passwordReset.canAttempt){try{await q(j(),t),g(!0),i(!1),b.emit("auth.password.updated",{provider:"supabase"})}catch(x){u(x instanceof Error?x.message:String(x)),i(!1)}return}window.setTimeout(()=>{g(!0),i(!1),b.emit("auth.password.updated",{localShell:!0})},520)};return e.jsxs(A,{page:"reset-password",children:[e.jsx("div",{className:`auth-mark ${m?"auth-mark--success":""}`,children:m?e.jsx(T,{size:30}):e.jsx(k,{size:30})}),e.jsx("h1",{children:m?"Password reset!":"Reset password"}),e.jsx("p",{"data-testid":"reset-message",children:m?"Your local auth shell accepted the new password state.":"Enter a new password and confirm it below."}),f&&e.jsx("div",{className:"auth-inline-error","data-testid":"reset-error",children:f}),m?e.jsxs("button",{className:"btn btn-primary auth-submit",type:"button",onClick:()=>a("/login"),"data-testid":"reset-login",children:[e.jsx(L,{size:16}),"Sign In"]}):e.jsxs("form",{className:"auth-form",onSubmit:d,"data-testid":"reset-password-form",children:[e.jsxs("label",{children:[e.jsx("span",{children:"New Password"}),e.jsxs("div",{className:"auth-input-wrap",children:[e.jsx(k,{size:18}),e.jsx("input",{value:t,onChange:c=>l(c.target.value),type:o?"text":"password",placeholder:"Enter new password","data-testid":"reset-password-input"}),e.jsx("button",{type:"button",className:"auth-icon-button",title:"Toggle password visibility",onClick:()=>p(c=>!c),"data-testid":"reset-toggle-visibility",children:o?e.jsx(Y,{size:17}):e.jsx(V,{size:17})})]}),e.jsx("span",{className:`auth-requirement ${t.length>=6?"is-met":""}`,children:"At least 6 characters"})]}),e.jsxs("label",{children:[e.jsx("span",{children:"Confirm Password"}),e.jsxs("div",{className:"auth-input-wrap",children:[e.jsx(k,{size:18}),e.jsx("input",{value:n,onChange:c=>h(c.target.value),type:"password",placeholder:"Confirm new password","data-testid":"reset-confirm-input"})]}),n&&e.jsx("span",{className:`auth-requirement ${s?"is-error":"is-met"}`,children:s?"Passwords do not match":"Passwords match"})]}),e.jsxs("button",{className:"btn btn-primary auth-submit",type:"submit",disabled:!v||w,"data-testid":"reset-submit",children:[e.jsx(L,{size:16}),w?"Updating...":"Update Password"]})]})]})}function A({children:a,page:t}){const l=S();return e.jsxs("div",{className:"auth-page","data-testid":"auth-shell","data-auth-page":t,"data-auth-storage-key":I,"data-pricing-checkout-intent-key":B,"data-production-adapter-state":l.overallState,"data-auth-provider-mode":l.auth.mode,"data-auth-provider-ready":l.auth.canAttempt?"true":"false","data-client-secret-blocked":l.forbiddenClientSecretKeys.length>0?"true":"false",children:[e.jsx("div",{className:"auth-scrim"}),e.jsx("section",{className:"auth-card",children:a})]})}export{ae as ForgotPasswordPage,se as LoginPage,re as ResetPasswordPage};
@@ -1,4 +1,4 @@
1
- var Xu=Object.defineProperty;var Gu=(e,t,o)=>t in e?Xu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var id=(e,t,o)=>Gu(e,typeof t!="symbol"?t+"":t,o);import{j as n,r as g,a as Ku}from"./vendor-react-BXzpOyCS.js";import{l as qu,a as ft,s as zt,b as Ju,d as Zu,r as Qu,c as em,e as tm,i as dd}from"./storage-CWUvUZC-.js";import{r as Hr,g as fs,w as am,a as Ys,d as ld,b as nm,t as Wr,p as kl,v as om,R as sm,c as rm,u as im,e as dm,f as cd,s as bt,i as en,l as Xs,h as Gn,j as $o,k as Kn,m as qn,n as zo,o as Na,q as ud,x as lm,y as Jn,z as cm,A as um,B as mm,C as pm,D as wl,E as gm,F as hm,G as oo,H as yr,I as fm,J as bm,K as md,L as xr,M as Cr,N as vl,O as Uo,P as Qo,Q as so,S as pd,T as U,U as Gs,V as ro,W as ym,X as xm,Y as Cm,Z as gd,_ as Ks,$ as Sm,a0 as km,a1 as wm,a2 as vm,a3 as Sr,a4 as jm,a5 as Im,a6 as Nm,a7 as Am,a8 as hd}from"./canvas-runtime-hH7qY6Be.js";import{e as Mm,d as Tm}from"./vendor-msgpack-BE8aAsr3.js";import{R as f}from"./app-runtime-xD2Z3NdN.js";import{g as qs,A as fd,a as es}from"./index-B9m3XXKS.js";import{g as bs,r as jl}from"./supabaseAuthAdapter-Bptc9G29.js";import{c as Rm,a as Lm,r as bd}from"./toolHandoff-D5e5f7t5.js";import{a as yd,s as Em}from"./executionModeSettings-NJqurj-o.js";import{a as xd,p as Pm}from"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";import{A as Ut,W as _m,c as Il,D as Dm,E as Vr,R as ln,J as Yr,X as yt,N as kr,O as Bm,Q as cn,w as un,I as mn,V as pn,l as ds,F as xt,Y as Om,Z as wr,_ as ls,$ as gn,a0 as Nl,a1 as Fm,a2 as Al,a3 as $m,i as co,a4 as Ml,a5 as zm,a6 as Cd,a7 as Um,a8 as ia,a9 as Sd,T as cs,aa as kd,ab as po,ac as Hm,ad as ts,ae as Tl,af as vr,ag as Wm,ah as Vm,f as Ym,ai as Xm,h as io,x as Gm,aj as Km,ak as qm,al as wd,am as vd,an as jd,g as Id,ao as Ho,H as Zn,ap as Wo,s as Js,aq as Nd,ar as Jm,as as Zs,at as Ad,au as Vo,av as Qs,aw as Md,ax as Td,ay as Rd,az as Zm,aA as Qm,aB as ep,aC as tp,n as ap,o as Qn,aD as np,aE as op,aF as sp,aG as rp,aH as ip,aI as dp,aJ as lp,aK as cp}from"./vendor-icons-D0xKCnZS.js";const up=1200,La="LocalBridgeOriginalNodeId";function Ct(e){return typeof e=="object"&&e!==null}function sa(e,t){const o=Number(e);return Number.isFinite(o)?o:t}function W(e){return typeof e=="string"?e:""}function Rl(){return typeof window<"u"?{width:window.innerWidth||1280,height:window.innerHeight||720}:{width:1280,height:720}}function jr(e,t,o){const r=Number(e),l=Number(t),m=Number(o);if(!Number.isFinite(r)||!Number.isFinite(l)||!Number.isFinite(m)||m<=0)return null;const p=1400/m,b=Rl();return{x:b.width/2-r*p,y:b.height/2-l*p,scale:p}}function mp(e){return Ct(e)?jr(e.x??e.X,e.y??e.Y,e.z??e.Z):null}function pp(e){if(!Ct(e))return null;const t=Number(e.x),o=Number(e.y),r=Number(e.scale);if(!Number.isFinite(t)||!Number.isFinite(o)||!Number.isFinite(r)||r<=0)return null;const l=Rl();return{x:(l.width/2-t)/r,y:(l.height/2-o)/r,z:1400/r}}function gp(e){const t=String(e||"").trim();if(t)try{const o=JSON.parse(t);if(!Ct(o))return;const r={};for(const[l,m]of Object.entries(o)){const p=mp(m);p&&(r[l]=p)}return Object.keys(r).length>0?r:void 0}catch{return}}function hp(e){if(!e||Object.keys(e).length===0)return null;const t={};for(const[o,r]of Object.entries(e)){const l=pp(r);l&&(t[o]=l)}return Object.keys(t).length>0?JSON.stringify(t):null}function us(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 ys(){return crypto.randomUUID()}function Xr(e){return Ct(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=W(e).trim();if(!t)return null;try{return JSON.parse(t)}catch{return null}}function Ir(e){if(Array.isArray(e))return e;if(!Ct(e))return[];for(const t of["Nodes","nodes","Items","items","Content","content","Upserts","upserts"])if(t in e){const o=e[t];if(Array.isArray(o))return o;const r=Ld(o);if(r)return Ir(r)}for(const t of["ContentJson","contentJson","content_json"])if(t in e){const o=Ld(e[t]);if(o)return Ir(o)}return Xr(e)?[e]:[]}function Gr(e){return Ct(e)?"BoardId"in e&&("Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e):!1}function Ll(e){if(!Ct(e))return 0;for(const t of["Deletes","deletes"]){const o=e[t];if(Array.isArray(o))return o.length}return 0}function ms(e){return Ir(e).filter(Xr)}function El(e){return ms(e).length}function fp(e,t){var m;const o=[...ms(e)];if(!Gr(t))return o;const r=new Set;for(const p of["Deletes","deletes"]){const b=t[p];if(Array.isArray(b))for(const c of b){const y=W(c).trim();y&&r.add(y)}}if(r.size>0)for(let p=o.length-1;p>=0;p-=1){const b=W((m=o[p])==null?void 0:m.Id).trim();b&&r.has(b)&&o.splice(p,1)}const l=new Map;o.forEach((p,b)=>{const c=W(p.Id).trim();c&&l.set(c,b)});for(const p of ms(t)){const b=W(p.Id).trim(),c=b?l.get(b):void 0;if(c!==void 0){o[c]=p;continue}b&&l.set(b,o.length),o.push(p)}return o}function Pl(e){const t=Array.isArray(e)?e.filter(Ct):[];return new Map(t.filter(o=>o.NodeId).map(o=>[String(o.NodeId),o]))}async function Nr(e,t){for(const o of e)try{const r=await Hr(o,t);return{payload:JSON.parse(r.content),path:o}}catch{}return null}async function bp(e,t){const o=`.mindexec/boards/${e}.msgpack`,r=`boards/${e}.msgpack`;for(const b of[o,r])try{const c=await nm(b,t);return{payload:Tm(c),format:b===o?"msgpack":"legacy-msgpack",path:b}}catch{}const l=`.mindexec/boards/${e}.json`,m=`boards/${e}.json`,p=await Nr([l,m],t);if(p)return{payload:p.payload,format:p.path===l?"json":"legacy-json",path:p.path};throw new Error(`LocalBridge board file not found: ${o}, ${r}, ${l}, ${m}`)}function Ar(e){const t=W(e.Id).trim()||W(e.BoardId).trim();return t?{Id:t,Title:W(e.Title)||null,Description:W(e.Description)||null,ThumbnailUrl:W(e.ThumbnailUrl)||null,CreatedAt:W(e.CreatedAt)||null,UpdatedAt:W(e.UpdatedAt)||null,LastCameraX:Number.isFinite(Number(e.LastCameraX))?Number(e.LastCameraX):null,LastCameraY:Number.isFinite(Number(e.LastCameraY))?Number(e.LastCameraY):null,LastCameraZ:Number.isFinite(Number(e.LastCameraZ))?Number(e.LastCameraZ):null,LastCursorX:Number.isFinite(Number(e.LastCursorX))?Number(e.LastCursorX):null,LastCursorY:Number.isFinite(Number(e.LastCursorY))?Number(e.LastCursorY):null,CameraBookmarks:W(e.CameraBookmarks)||null}:null}function Ed(e){return!Ct(e)||Xr(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 Kr(e){if(Array.isArray(e))return e.filter(Ed).map(t=>Ar(t)).filter(t=>!!t);if(Ed(e)){const t=Ar(e);return t?[t]:[]}return[]}function yp(e){const t=e.toLowerCase();return xp(t)?"remote-control":Cp(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 xp(e){const t=e.trim().toLowerCase();if(!t)return!1;if(["remote-control","remote.control","remotecontrol","remote-device","remote.device","remotedevice","remote-fleet-device","remotefleet.device"].includes(t))return!0;const o=t.replace(/[^a-z0-9]+/g,"");return o.includes("remotecontrol")||o.includes("remotedevice")||o.includes("remotefleetdevice")}function Cp(e){const t=e.trim().toLowerCase();if(!t)return!1;if(["remote-monitor","remote.monitor","remotemonitor","remote-hub-monitor","remotehub.monitor","remotehub-monitor","multi-desktop-monitor","multidesktop.monitor","smartview.monitor"].includes(t))return!0;const o=t.replace(/[^a-z0-9]+/g,"");return o.includes("remotemonitor")||o.includes("remotehubmonitor")||o.includes("multidesktopmonitor")||o.includes("smartviewmonitor")}function Sp(e,t){const o=e.Metadata||{},r=o.ThumbnailUrl,l=o.OriginalUrl,m=o.OriginalPath;return Wr(W(r)||W(l)||W(m)||W(e.Response),t)}function kp(e,t,o){const r=e.ImageStack,l=Array.isArray(r==null?void 0:r.Variants)?r.Variants:[];if(l.length===0)return;const m=l.map((b,c)=>{const y=W(b.AssetId).trim(),w=Wr(y,o)||t;return w?{variantId:W(b.VariantId)||`variant-${W(e.Id)||c}`,imageUrl:w,assetId:y||void 0,caption:W(b.Caption)||void 0,sourceNodeId:W(e.Id)||void 0,createdAtUtc:W(b.CreatedAtUtc)||void 0}:null}).filter(b=>!!b);if(m.length===0)return;const p=W(r==null?void 0:r.ActiveVariantId);return{activeVariantId:m.some(b=>b.variantId===p)?p:m[0].variantId,variants:m,kind:W(r==null?void 0:r.Kind)||"versions",title:W(r==null?void 0:r.Title)||void 0,updatedAtUtc:W(r==null?void 0:r.UpdatedAtUtc)||void 0}}function wp(e,t){return!e||e.variants.length===0?t:(e.variants.find(r=>r.variantId===e.activeVariantId)??e.variants[0]).imageUrl||t}function vp(e,t,o){var p,b,c,y,w,L;const r=(b=(p=e.imageStack)==null?void 0:p.variants)!=null&&b.length?e.imageStack.variants:e.imageUrl?[{variantId:`${e.id}:image`,imageUrl:e.imageUrl,assetId:go(e.imageUrl,t)||e.imageUrl,title:e.title,sourceNodeId:e.id,createdAtUtc:o}]:[];if(r.length===0)return null;const l=r.map(I=>({VariantId:I.variantId||ys(),AssetId:I.assetId||go(I.imageUrl,t)||I.imageUrl,CreatedAtUtc:I.createdAtUtc||o,Caption:I.caption||I.title||null}));return{ActiveVariantId:(c=e.imageStack)!=null&&c.activeVariantId&&l.some(I=>{var D;return I.VariantId===((D=e.imageStack)==null?void 0:D.activeVariantId)})?e.imageStack.activeVariantId:l[0].VariantId||"",Variants:l,Kind:((y=e.imageStack)==null?void 0:y.kind)||(l.length>1?"pile":"versions"),Title:((w=e.imageStack)==null?void 0:w.title)||e.title||null,UpdatedAtUtc:((L=e.imageStack)==null?void 0:L.updatedAtUtc)||o}}function jp(e,t){const o=e.Metadata||{};return Wr(W(o.OriginalUrl)||W(o.OriginalPath)||W(o.SourceFilePath)||W(e.SourceFilePath)||W(e.Response),t)}function Ip(e){const t={};for(const[o,r]of Object.entries(e??{}))typeof r=="string"?t[o]=r:r!=null&&(t[o]=String(r));return t}function Np(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 go(e,t){const o=String(e||"").trim();if(!o)return"";const r=t.replace(/\/+$/,"");return o.startsWith(`${r}/`)?o.slice(r.length+1):o.replace(/^\/+/,"")}function Ap(e,t){const o=new Map;for(const r of e){const l=t.get(r.from),m=t.get(r.to);!l||!m||o.has(m)||o.set(m,l)}return o}function Mp(e){const t=new Set;return e.map(o=>{var c,y;const r=((c=o.metadata)==null?void 0:c[La])||"",l=us(r)?r:us(o.id)?o.id:"",m=!!(l&&t.has(l)),p=l&&!m?l:ys(),b=((y=o.metadata)==null?void 0:y[La])!==p;return t.add(p),{node:b?{...o,metadata:{...o.metadata??{},[La]:p}}:o,originalId:p,assignedNodeId:!l||m,metadataStamped:b,duplicateOriginalId:m}})}function Tp(e,t,o,r,l){var y,w,L;const m=Np(e.kind),p=m==="image"||m==="mask"?go(e.imageUrl,l):"",b=["video","pdf","file","directory","embed"].includes(m)?go(e.assetUrl||e.sourceFilePath||e.body,l):"",c={...e.metadata??{},[La]:t,ReactNodeId:e.id,ReactKind:e.kind};if(e.kind==="remote-monitor"&&(c.RemoteHub??(c.RemoteHub="Gated"),c.RemoteRoute??(c.RemoteRoute="Gated"),c.RemoteConnected??(c.RemoteConnected="0"),c.RemoteTotal??(c.RemoteTotal="30"),c.RemotePage??(c.RemotePage="1/1"),c.AdapterState??(c.AdapterState="adapter-gated")),e.kind==="remote-control"&&(c.SemanticType??(c.SemanticType="RemoteFleetDevice"),c.RemoteFleetSchemaVersion??(c.RemoteFleetSchemaVersion="remote-fleet-device@1"),c.RemoteRoute??(c.RemoteRoute="Gated"),c.RemoteInput??(c.RemoteInput="Off"),c.AdapterState??(c.AdapterState="adapter-gated")),e.kind==="mask"&&(c.ImageRouterMask??(c.ImageRouterMask="true"),c.SemanticType??(c.SemanticType="ImageEditMask")),e.kind==="embed"){const I=e.assetUrl||e.body||e.sourceFilePath||"";c.source??(c.source="embed"),c.renderMode??(c.renderMode="card"),c.provider??(c.provider="web"),c.sourceUrl??(c.sourceUrl=I),c.url??(c.url=I),c.AdapterState??(c.AdapterState="local-reference")}return e.kind==="video"&&(c.assetKind??(c.assetKind="video"),c.videoMode??(c.videoMode=(y=e.assetUrl)!=null&&y.startsWith(l)?"local_bridge":"local_reference"),c.AdapterState??(c.AdapterState=((w=e.metadata)==null?void 0:w.PromptOnly)==="true"?"adapter-gated":"local-reference")),(L=e.tags)!=null&&L.length&&(c.ReactTags=JSON.stringify(e.tags)),p&&(c.OriginalUrl=p,c.ThumbnailUrl=p),b&&(c.OriginalPath=b,c.SourceFilePath=b),{Id:t,ContentType:m,Prompt:e.title||m,Response:m==="image"||m==="mask"?p||e.body||null:m==="remote-monitor"?e.body||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":m==="remote-control"?e.body||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":b||e.body||null,PositionX:e.x,PositionY:e.y,PositionZ:0,IsLoading:e.status==="running",Width:Math.round(e.width),Height:Math.round(e.height),Children:[],ParentId:o||null,IsExpanded:!!e.isExpanded,OriginalHeight:Math.round(e.originalHeight??0),IsAiEnabled:e.aiEnabled!==!1,IsChunkedText:!!e.isChunkedText,TotalLineCount:Math.round(e.totalLineCount??0),SourceFilePath:e.sourceFilePath||b||null,ScrollOffset:e.scrollOffset??0,MaxScroll:e.maxScroll??0,CreatedAt:r,UpdatedAt:r,IsWordWrap:e.wordWrap??e.kind!=="code",Metadata:c,ImageStack:m==="image"?vp(e,l,r):null}}function Rp(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 Lp(e,t,o){const r=W(e.ContentType)||"note",l=W(e.Prompt).trim(),m=W(e.Response).trim(),p=Ip(e.Metadata),b=W(e.Id).trim();b&&(p[La]??(p[La]=b));const y=["true","1","yes"].includes(String(p.ImageRouterMask||p.IsMask||"").trim().toLowerCase())?"mask":yp(r),w=y==="memo"&&["mindcanvasagent","agentcommand"].includes(String(p.SemanticType||p.semanticType||"").trim().toLowerCase()),L=y==="memo"&&["codenote","code-note"].includes(String(p.SemanticType||p.semanticType||"").trim().toLowerCase()),I=W(e.SourceFilePath)||p.OriginalPath||p.SourceFilePath||"",D=y==="video"||y==="pdf"||y==="file"||y==="directory"||y==="embed"?jp(e,o):void 0,q=l||e.SourceFilePath||r||"LocalBridge node",$=y==="image"?m||l||"Image asset":y==="mask"?m||l||"Image mask asset":y==="remote-monitor"?m||l||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":y==="remote-control"?m||l||I||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":y==="pdf"||y==="file"||y==="directory"||y==="embed"?m||I||l||r:m||l||I||"",O=w?500:L?400:y==="remote-monitor"?860:y==="remote-control"||y==="template-launcher"?560:y==="csv-table"?720:y==="embed"?460:y==="video"?420:y==="markdown"?380:y==="text"||y==="image"||y==="mask"?360:320,G=w||L?300:y==="remote-monitor"?640:y==="remote-control"?390:y==="template-launcher"?620:y==="csv-table"?420:y==="embed"?260:y==="video"?236:y==="markdown"?240:y==="text"?210:y==="image"||y==="mask"?260:180,V=y==="image"||y==="mask"?Sp(e,o):void 0,re=y==="image"?kp(e,V,o):void 0,oe=!!(e.IsChunkedText||p.IsChunkedText==="true"),Ae=sa(e.TotalLineCount??p.TotalLineCount,0),be=sa(e.ScrollOffset,0),Ue=sa(e.MaxScroll,0);return{id:String(e.Id||crypto.randomUUID()),kind:y,title:y==="remote-monitor"?l||"Multi Desktop Monitor":y==="remote-control"?l||p.RemoteFleetDeviceName||"Remote Device":y==="template-launcher"?l||"Template Launcher":q,body:$,x:sa((t==null?void 0:t.PositionX)??e.PositionX,0),y:sa((t==null?void 0:t.PositionY)??e.PositionY,0),width:Math.max(160,Math.min(900,sa((t==null?void 0:t.Width)??e.Width,O))),height:Math.max(120,Math.min(900,sa((t==null?void 0:t.Height)??e.Height,G))),status:e.IsLoading?"running":y==="ai-task"?"idle":void 0,imageUrl:wp(re,V),imageStack:re,assetUrl:D,sourceFilePath:I||void 0,isChunkedText:oe||void 0,totalLineCount:oe?Ae:void 0,scrollOffset:oe?be:void 0,maxScroll:oe?Ue:void 0,isExpanded:typeof e.IsExpanded=="boolean"?e.IsExpanded:void 0,originalHeight:sa(e.OriginalHeight,0)||void 0,tags:w?["Agent Command",p.AgentCommandRequestedRole||"Researcher",p.AgentCommandStatus||"Draft"]:L?["Code Note",p.CodeNoteStatus||"Draft",p.CodeNoteSyncState||"Unlinked"]:y==="remote-monitor"?["Remote","Monitor","LocalBridge"]:y==="remote-control"?["Remote","Control","LocalBridge"]:["LocalBridge",r],metadata:y==="remote-monitor"?Ep(p):y==="remote-control"?Pp(p):p,role:e.IsAiEnabled?"ai-enabled":void 0,aiEnabled:typeof e.IsAiEnabled=="boolean"?e.IsAiEnabled:void 0,wordWrap:typeof e.IsWordWrap=="boolean"?e.IsWordWrap:void 0}}function Ep(e){return{RemoteHub:"Gated",RemoteRoute:"Gated",RemoteConnected:"0",RemoteTotal:"30",RemotePage:"1/1",AdapterState:"adapter-gated",...e}}function Pp(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 _p(e,t){const o=[];for(const r of e){const l=String(r.Id||""),m=String(r.ParentId||"");!l||!m||!t.has(l)||!t.has(m)||o.push({id:`edge-local-${m}-${l}`,from:m,to:l,kind:"context"})}return o}async function Dp(e=fs()){const t=await Hr(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return(Array.isArray(o)?o.filter(Ct):[]).map(m=>Ar(m)).filter(m=>!!m).sort((m,p)=>String(p.UpdatedAt||"").localeCompare(String(m.UpdatedAt||"")))}async function Bp(e){try{const t=await Hr(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return Array.isArray(o)?o.filter(Ct):[]}catch{return[]}}async function Op(e,t,o,r=fs(),l=null){var lt,Me,le,Tt,me,He;if((lt=e.source)!=null&&lt.partialImport)throw new Error("This board was imported from a partial original payload. Export is blocked to avoid data loss.");if((Me=e.source)!=null&&Me.truncated)throw new Error("This board was truncated during import. Export is blocked to avoid data loss.");const m=(le=e.source)!=null&&le.exportedByReact?String(e.source.boardId||""):"",p=us(m),b=us(m)?m:ys(),c=new Date().toISOString(),y=Mp(e.nodes),w=y.map(ee=>ee.node),L=new Map(y.map(ee=>[ee.node.id,ee.originalId])),I=Ap(e.edges,L),D=y.map(({node:ee,originalId:ct})=>Tp(ee,ct,I.get(ct),c,r)),q=y.map(({node:ee,originalId:ct})=>Rp(ee,ct)),$=t.scale>0?t.scale:1,O=(window.innerWidth/2-t.x)/$,G=(window.innerHeight/2-t.y)/$,V=1400/$,re=Number((l==null?void 0:l.x)??((Tt=e.viewState)==null?void 0:Tt.cursorX)??0),oe=Number((l==null?void 0:l.y)??((me=e.viewState)==null?void 0:me.cursorY)??0),Ae=(He=e.nodes.find(ee=>ee.kind==="image"&&ee.imageUrl))==null?void 0:He.imageUrl,be={Id:b,UserId:"00000000-0000-0000-0000-000000000000",Title:e.name||"Untitled Board",Description:"Exported from MindExec React",ThumbnailUrl:go(Ae,r)||"",IsPublic:!1,CreatedAt:c,SyncedCloudBoardId:null,LastSyncedAt:null,LastCloudCopyStatus:null,UpdatedAt:c,LastCameraX:O,LastCameraY:G,LastCameraZ:V,LastCursorX:Number.isFinite(re)?re:0,LastCursorY:Number.isFinite(oe)?oe:0,CameraBookmarks:hp(e.settings.cameraBookmarks)},Ue=`.mindexec/boards/${b}.msgpack`,et=`.mindexec/boards/${b}.json`,tt=`.mindexec/boards/${b}.layout.json`,he=`.mindexec/boards/${b}.delta.json`,J=`boards/${b}.delta.json`,ie=await Bp(r),se=[be,...ie.filter(ee=>W(ee.Id)!==b)],St=Mm(D);await am(Ue,St,o,r),await Ys(et,JSON.stringify(D,null,2),o,r),await Ys(tt,JSON.stringify(q,null,2),o,r),await Ys(".mindexec/boards/_metadata.json",JSON.stringify(se,null,2),o,r);const F=await Promise.allSettled([ld(he,o,r),ld(J,o,r)]);return f.emit("localBridge.board.exported",{boardId:b,nodes:D.length,edges:e.edges.length,snapshotFormat:"msgpack",msgpackBytes:St.byteLength,jsonMirror:!0,deltaCleared:F.some(ee=>ee.status==="fulfilled"&&ee.value.success),reusedBoardId:p,stableNodeIds:y.length,assignedNodeIds:y.filter(ee=>ee.assignedNodeId).length,metadataStampedNodeIds:y.filter(ee=>ee.metadataStamped).length,duplicateOriginalNodeIds:y.filter(ee=>ee.duplicateOriginalId).length}),{metadata:be,source:{kind:"localBridge",boardId:b,loadedAt:c,originalNodeCount:D.length,renderedNodeCount:D.length,truncated:!1,exportedByReact:!0,snapshotFormat:"msgpack"},nodes:w,msgpackPath:Ue,boardPath:et,layoutPath:tt}}async function Fp(e,t,o=fs()){const r=await bp(e.Id,o);let l=new Map;const m=await Nr([`.mindexec/boards/${e.Id}.layout.json`,`boards/${e.Id}.layout.json`],o);m&&(l=Pl(m.payload));let p=null;const b=await Nr([`.mindexec/boards/${e.Id}.delta.json`,`boards/${e.Id}.delta.json`],o);b&&(p=b.payload);const c=p?Kr(p)[0]:null,y=!!(p&&Gr(p)),w=y?fp(r.payload,p):r.payload;return _l(w,t,{boardId:(c==null?void 0:c.Id)??e.Id,title:(c==null?void 0:c.Title)||e.Title||"LocalBridge Board",updatedAt:(c==null?void 0:c.UpdatedAt)??e.UpdatedAt,layoutPayload:Array.from(l.values()),baseUrl:o,cameraBookmarks:(c==null?void 0:c.CameraBookmarks)??e.CameraBookmarks,lastCursorX:(c==null?void 0:c.LastCursorX)??e.LastCursorX,lastCursorY:(c==null?void 0:c.LastCursorY)??e.LastCursorY,deltaApplied:y,deltaUpserts:p?El(p):0,deltaDeletes:p?Ll(p):0,snapshotFormat:r.format})}function _l(e,t,o={}){const r=ms(e),l=Gr(e),m=o.deltaUpserts??(l?r.length:0),p=o.deltaDeletes??(l?Ll(e):0),b=o.layoutPayload?Pl(o.layoutPayload):new Map,c=r.slice(0,up),y=c.map(oe=>Lp(oe,b.get(String(oe.Id||"")),o.baseUrl??fs())),w=new Set(y.map(oe=>oe.id)),L=_p(c,w),I=r.length>y.length,D=l,q=o.deltaApplied===!0,$=o.boardId||ys(),O=o.updatedAt||new Date().toISOString(),G=Number(o.lastCursorX),V=Number(o.lastCursorY),re=Number.isFinite(G)&&Number.isFinite(V);return f.emit("localBridge.board.loaded",{boardId:$,nodes:y.length,originalNodes:r.length,truncated:I,snapshotFormat:o.snapshotFormat,partialImport:D,deltaImport:l,deltaApplied:q,deltaUpserts:m,deltaDeletes:p}),{id:`localBridge:${$}`,name:o.title||"LocalBridge Board",nodes:y,edges:L,settings:{...t,cameraBookmarks:gp(o.cameraBookmarks)},viewState:re?{cursorX:G,cursorY:V}:void 0,updatedAt:O,source:{kind:"localBridge",boardId:$,loadedAt:new Date().toISOString(),snapshotFormat:o.snapshotFormat,originalNodeCount:r.length,renderedNodeCount:y.length,truncated:I,partialImport:D,deltaImport:l,deltaApplied:q}}}const qr=["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(","),$p=/^[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 zp(e){if($p.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 Dl(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 Up(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 Mr(e,t=new Date().toISOString()){return e&&!Number.isNaN(Date.parse(e))?e:t}function Jr(e){return(e==null?void 0:e.trim().slice(0,90))||"Untitled Board"}function Bl(e){const t=Dl(e.content_json),o=Mr(e.updated_at??t.updatedAt);return{id:e.id,name:Jr(e.title??t.name),updatedAt:o,createdAt:Mr(e.created_at,o),nodeCount:Array.isArray(t.nodes)?t.nodes.length:0,edgeCount:Array.isArray(t.edges)?t.edges.length:0,sourceKind:"cloud"}}function Hp(e,t){var w,L;const o=Dl(e.content_json),r=Mr(e.updated_at??o.updatedAt),l=Number((w=o.viewState)==null?void 0:w.cursorX),m=Number((L=o.viewState)==null?void 0:L.cursorY),p=Number(e.last_cursor_x),b=Number(e.last_cursor_y),c=Number.isFinite(l)&&Number.isFinite(m),y=Number.isFinite(p)&&Number.isFinite(b);return{id:e.id,name:Jr(e.title??o.name),nodes:Array.isArray(o.nodes)?o.nodes:[],edges:Array.isArray(o.edges)?o.edges:[],settings:o.settings??t,viewState:c?{cursorX:l,cursorY:m}:y?{cursorX:p,cursorY:b}:void 0,updatedAt:r,source:{kind:"cloud",boardId:e.id,loadedAt:new Date().toISOString(),snapshotFormat:"supabase.boards.content_json",originalNodeCount:Array.isArray(o.nodes)?o.nodes.length:0,renderedNodeCount:Array.isArray(o.nodes)?o.nodes.length:0}}}async function Zr(e){var c;const t=jl(e);if(!t.cloudBoards.canAttempt)return f.emit("projectStorage.cloud.provider.skipped",{mode:t.cloudBoards.mode}),{userId:null,config:t,reason:t.cloudBoards.mode};const o=bs(e);if(!o)return f.emit("projectStorage.cloud.provider.skipped",{mode:"config-missing"}),{userId:null,config:t,reason:"missing-client"};const{data:r,error:l}=await o.auth.getSession();if(l||!r.session)return f.emit("projectStorage.cloud.provider.sessionMissing",{message:(l==null?void 0:l.message)??"missing-session"}),{userId:null,config:t,reason:"missing-session"};const{data:m,error:p}=await o.auth.getUser(),b=((c=m.user)==null?void 0:c.id)??null;return p||!b?(f.emit("projectStorage.cloud.provider.sessionMissing",{message:(p==null?void 0:p.message)??"missing-user"}),{userId:null,config:t,reason:"missing-user"}):{userId:b,config:t,reason:"provider-ready"}}async function Wp(e){const t=await Zr(e);if(!t.userId)return[];const o=bs(e);if(!o)return[];f.emit("projectStorage.cloud.list.requested");const{data:r,error:l}=await o.from("boards").select(qr).eq("user_id",t.userId).order("updated_at",{ascending:!1}).limit(50);if(l)throw f.emit("projectStorage.cloud.provider.failed",{operation:"list",message:l.message}),l;const m=(r??[]).map(Bl);return f.emit("projectStorage.cloud.list.loaded",{count:m.length}),m}async function Vp(e,t,o){const r=await Zr(e);if(!r.userId)return null;const l=bs(e);if(!l)return null;f.emit("projectStorage.cloud.load.requested",{boardId:t});const{data:m,error:p}=await l.from("boards").select(qr).eq("user_id",r.userId).eq("id",t).maybeSingle();if(p)throw f.emit("projectStorage.cloud.provider.failed",{operation:"load",boardId:t,message:p.message}),p;if(!m)return null;const b=Hp(m,o);return f.emit("projectStorage.cloud.load.loaded",{boardId:t,nodes:b.nodes.length,edges:b.edges.length}),b}async function Yp(e,t,o,r=null){var re,oe;const l=await Zr(e);if(!l.userId)return null;const m=bs(e);if(!m)return null;const p=zp(t.id),b=new Date().toISOString(),c=Jr(t.name),y=Number((r==null?void 0:r.x)??((re=t.viewState)==null?void 0:re.cursorX)??0),w=Number((r==null?void 0:r.y)??((oe=t.viewState)==null?void 0:oe.cursorY)??0),L={...t.viewState??{},cursorX:Number.isFinite(y)?y:0,cursorY:Number.isFinite(w)?w:0},I={...t,id:p,name:c,viewState:L,updatedAt:b},D={p_board_id:p,p_title:c,p_description:null,p_thumbnail_url:null,p_is_public:!1,p_created_at:null,p_updated_at:b,p_last_camera_x:o.x,p_last_camera_y:o.y,p_last_camera_z:o.scale,p_last_cursor_x:L.cursorX,p_last_cursor_y:L.cursorY,p_camera_bookmarks:JSON.stringify(t.settings.cameraBookmarks??{}),p_nodes:[],p_include_json_mirror:!0};f.emit("projectStorage.cloud.save.requested",{boardId:p,sourceBoardId:t.id,nodes:t.nodes.length,edges:t.edges.length});const{error:q}=await m.rpc("save_board_snapshot",D);if(q)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-rpc",boardId:p,message:q.message}),q;const $={content_json:Up(I),updated_at:b},{data:O,error:G}=await m.from("boards").update($).eq("id",p).eq("user_id",l.userId).select(qr).maybeSingle();if(G)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-json-mirror",boardId:p,message:G.message}),G;const V=O?Bl(O):{id:p,name:c,updatedAt:b,createdAt:b,nodeCount:t.nodes.length,edgeCount:t.edges.length,sourceKind:"cloud"};return f.emit("projectStorage.cloud.save.saved",{boardId:V.id,nodes:V.nodeCount,edges:V.edgeCount}),V}function Tr(e){return e.length===0?{minX:0,minY:0,maxX:0,maxY:0}:e.reduce((t,o)=>({minX:Math.min(t.minX,o.x),minY:Math.min(t.minY,o.y),maxX:Math.max(t.maxX,o.x+o.width),maxY:Math.max(t.maxY,o.y+o.height)}),{minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY})}function Xp(e,t={},o=Tr(e),r){if(e.length===0)return{after:new Map,boundsAfter:o};const l=cg(t.mode),m=ug(t.order),p=mg(t.anchor),b=pg(t.sizeMode),c=Math.max(0,t.gapX??24),y=Math.max(0,t.gapY??24),w=Math.max(1,t.maxColumns??12),L=Rr(t.quantile??.75,.05,.95),I=e.map(Gp),D=sg(I,m),q=D.map(be=>be.width),$=D.map(be=>be.height),O=Math.max(1,t.cellWidth??_d(q,L)),G=Math.max(1,t.cellHeight??_d($,L)),V=Math.max(1,t.targetWidth??O),re=Math.max(1,t.targetHeight??G),oe=og(p,o);if(l==="grid"){eg(D,b,V,re,O,G);const be=Pd(t.columns,w,o.maxX-o.minX,O,c);qp(D,oe.x,oe.y,be,O,G,c,y)}else if(l==="masonry"){tg(D,b==="preserve"?"uniformWidth":b,V);const Ue=Pd(t.columns,w,o.maxX-o.minX,V,c);Jp(D,oe.x,oe.y,Ue,V,c,y)}else l==="stripHorizontal"?(ag(D,b==="preserve"?"uniformHeight":b,re),Zp(D,oe.x,oe.y,c,re)):(ng(D,b==="preserve"?"uniformWidth":b,V),Qp(D,oe.x,oe.y,y,V));let Ae=new Map(D.map(be=>[be.id,Kp(be)]));return p==="selectionBoundsCenter"&&(Ae=ig(o,Ae)),t.snapToGrid&&(Ae=dg(Ae,Math.max(1,t.gridSize??8))),{after:Ae,boundsAfter:Tr(Array.from(Ae.values()))}}function Gp(e){return{...e,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function Kp(e){return{x:e.x,y:e.y,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function qp(e,t,o,r,l,m,p,b){e.forEach((c,y)=>{const w=Math.floor(y/r),L=y%r,I=t+L*(l+p),D=o+w*(m+b);c.x=I+(l-c.width)/2,c.y=D+(m-c.height)/2})}function Jp(e,t,o,r,l,m,p){const b=Array.from({length:r},()=>0);for(const c of e){const y=lg(b),w=t+y*(l+m);c.x=w+(l-c.width)/2,c.y=o+b[y],b[y]+=c.height+p}}function Zp(e,t,o,r,l){let m=t;for(const p of e)p.x=m,p.y=o+(l-p.height)/2,m+=p.width+r}function Qp(e,t,o,r,l){let m=o;for(const p of e)p.x=t+(l-p.width)/2,p.y=m,m+=p.height+r}function eg(e,t,o,r,l,m){if(t==="fitCellDownOnly")for(const p of e){const b=Math.min(1,l/p.width,m/p.height);p.width*=b,p.height*=b}else t==="uniformWidth"?Qr(e,o):t==="uniformHeight"&&Ol(e,r)}function tg(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const l=Math.min(1,o/r.width);r.width*=l,r.height*=l}return}Qr(e,o)}function ag(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const l=Math.min(1,o/r.height);r.width*=l,r.height*=l}return}Ol(e,o)}function ng(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const l=Math.min(1,o/r.width);r.width*=l,r.height*=l}return}Qr(e,o)}function Qr(e,t){for(const o of e){if(o.width<=0)continue;const r=t/o.width;o.width=t,o.height=Math.max(1,o.height*r)}}function Ol(e,t){for(const o of e){if(o.height<=0)continue;const r=t/o.height;o.height=t,o.width=Math.max(1,o.width*r)}}function Pd(e,t,o,r,l){if(typeof e=="number"&&e>0)return Math.round(Rr(e,1,t));if(o<=1||r<=1)return 1;const m=Math.floor((o+l)/(r+l));return!Number.isFinite(m)||m<1?1:Math.round(Rr(m,1,t))}function og(e,t,o){return{x:t.minX,y:t.minY}}function sg(e,t){return t==="selectionOrder"?[...e].sort((o,r)=>o.selectionIndex-r.selectionIndex):rg(e)}function rg(e){const t=[...e].sort((c,y)=>c.y-y.y||c.x-y.x);if(t.length<=2)return t;const o=t.map(c=>c.height).sort((c,y)=>c-y),r=o[Math.floor(o.length/2)]??1,l=Math.max(16,r*.35),m=[];let p=[],b=Number.NaN;for(const c of t)p.length===0?(p=[c],b=c.y):Math.abs(c.y-b)<=l?(p.push(c),b=(b*(p.length-1)+c.y)/p.length):(m.push([...p].sort((y,w)=>y.x-w.x)),p=[c],b=c.y);return p.length>0&&m.push([...p].sort((c,y)=>c.x-y.x)),m.flat()}function ig(e,t){if(t.size===0)return t;const o=Tr(Array.from(t.values())),r=e.minX+(e.maxX-e.minX)/2,l=e.minY+(e.maxY-e.minY)/2,m=o.minX+(o.maxX-o.minX)/2,p=o.minY+(o.maxY-o.minY)/2,b=r-m,c=l-p;return new Map(Array.from(t.entries()).map(([y,w])=>[y,{...w,x:w.x+b,y:w.y+c}]))}function dg(e,t){return new Map(Array.from(e.entries()).map(([o,r])=>[o,{...r,x:Dd(r.x,t),y:Dd(r.y,t)}]))}function _d(e,t){if(e.length===0)return 1;const o=[...e].sort((b,c)=>b-c),r=(o.length-1)*t,l=Math.floor(r),m=Math.min(o.length-1,l+1),p=r-l;return o[l]*(1-p)+o[m]*p}function lg(e){let t=0;for(let o=1;o<e.length;o+=1)e[o]<e[t]&&(t=o);return t}function Dd(e,t){return Math.round(e/t)*t}function cg(e){const t=xs(e);return t==="grid"?"grid":t==="striphorizontal"||t==="striph"?"stripHorizontal":t==="stripvertical"||t==="stripv"?"stripVertical":"masonry"}function ug(e){return xs(e)==="selectionorder"?"selectionOrder":"spatialReading"}function mg(e){const t=xs(e);return t==="selectionboundscenter"?"selectionBoundsCenter":t==="viewporttopleft"?"viewportTopLeft":"selectionBoundsTopLeft"}function pg(e){const t=xs(e);return t==="fitcelldownonly"?"fitCellDownOnly":t==="uniformwidth"?"uniformWidth":t==="uniformheight"?"uniformHeight":"preserve"}function xs(e){return String(e??"").trim().toLowerCase().replace(/[^a-z0-9]/g,"")}function Rr(e,t,o){return Math.min(o,Math.max(t,e))}const Fl=300,$l=50*1024*1024,gg=800;function ke(e){return typeof e=="string"?e.length*2:0}function hg(e){let t=256;if(t+=ke(e.id),t+=ke(e.kind),t+=ke(e.title),t+=ke(e.body),t+=ke(e.result),t+=ke(e.imageUrl),t+=ke(e.assetUrl),t+=ke(e.sourceFilePath),t+=(e.tags??[]).reduce((o,r)=>o+ke(r),0),e.metadata)for(const[o,r]of Object.entries(e.metadata))t+=ke(o)+ke(r);return e.imageStack&&(t+=128+ke(e.imageStack.title),t+=e.imageStack.variants.reduce((o,r)=>o+96+ke(r.variantId)+ke(r.imageUrl)+ke(r.assetId)+ke(r.title)+ke(r.caption),0)),t}function fg(e){let t=1024+ke(e.id)+ke(e.name)+ke(e.updatedAt);return t+=e.nodes.reduce((o,r)=>o+hg(r),0),t+=e.edges.length*128,t+=Object.entries(e.settings).reduce((o,[r,l])=>o+ke(r)+ke(typeof l=="string"?l:JSON.stringify(l)),0),t}function zl(e,t={}){var o,r;return{board:e,description:((o=t.description)==null?void 0:o.trim())||"Board change",mergeKey:((r=t.mergeKey)==null?void 0:r.trim())||null,timestampMs:t.timestampMs??Date.now(),estimatedBytes:fg(e)}}function Bd(e,t={}){const o=t.maxEntries??Fl,r=t.maxBytes??$l;let l=e.slice(Math.max(0,e.length-o)),m=l.reduce((p,b)=>p+b.estimatedBytes,0);for(;l.length>1&&m>r;){const[p,...b]=l;m-=(p==null?void 0:p.estimatedBytes)??0,l=b}return l}function Aa(e,t,o={}){const r=zl(t,o),l=o.mergeWindowMs??gg,m=e.slice(),p=m.at(-1);return p&&r.mergeKey&&p.mergeKey===r.mergeKey&&r.timestampMs-p.timestampMs<l?(m[m.length-1]={...p,description:r.description,timestampMs:r.timestampMs,estimatedBytes:Math.max(p.estimatedBytes,r.estimatedBytes)},Bd(m,o)):(m.push(r),Bd(m,o))}function bg(e,t,o={}){const r=zl(t,o),l=o.maxEntries??Fl,m=o.maxBytes??$l;let p=[r,...e].slice(0,l),b=p.reduce((c,y)=>c+y.estimatedBytes,0);for(;p.length>1&&b>m;){const c=p.at(-1);b-=(c==null?void 0:c.estimatedBytes)??0,p=p.slice(0,-1)}return p}function Cs(e,...t){const o=e==null?void 0:e.metadata;if(!o)return"";for(const r of t){const l=o[r];if(typeof l=="string"&&l.trim())return l.trim()}return""}function eo(e,t){return!!Cs(e,t)}function Ul(e){if(!e||!e.trim())return!1;const t=e.trim();return/^(https?:|blob:|data:|file:)/i.test(t)}function Hl(e){if(!e)return"";const t=Cs(e,"OriginalPath");if(t)return t;const o=String(e.body||"").trim();return Ul(o)?"":o}function Wl(e){return e?Hl(e)||String(e.sourceFilePath||"").trim()||String(e.assetUrl||"").trim()||String(e.imageUrl||"").trim()||String(e.body||"").trim():""}function Vl(e){return Cs(e,"ThumbnailUrl","thumbnailUrl")}function yg(e){if(!e||e.kind!=="image")return!1;if(eo(e,"ImageGenerationProvider")||eo(e,"GeneratedImageSourceWidth")||eo(e,"GeneratedImageSourceHeight")||eo(e,"CodexImageQuality")||eo(e,"ImageRouterRevisedPrompt"))return!0;const t=Cs(e,"RequestedMediaOperation");return["text2image","image2image","inpaint"].includes(t.toLowerCase())}function ei(e){if(!e)return"";if(e.kind==="image"||e.kind==="mask"){const t=yg(e)?Hl(e):"",o=Vl(e),r=String(e.body||"").trim();return t||o||String(e.imageUrl||"").trim()||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()||(Ul(r)?r:"")}return Wl(e)||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()}function Yl(e){if(!e)return"";const t=Wl(e)||e.title||e.kind;return String(t||"").replace(/\\/g,"/").replace(/\/+$/,"").split("/").filter(Boolean).pop()||e.title||e.kind}const xg=2048,Cg=16e3,er=1024,tr=64,Sg=2048,ar=3,kg=16,wg=256,vg=new Set(["text","note","memo","markdown","code","directory"]),jg=/[\p{L}\p{M}\p{N}]{2,}/gu,Od=4,Ig=8,Fd=1.35;function Ng(e){return vg.has(String(e||"").trim().toLowerCase())}function Ag(e){const t=e.map(Tg),o=new Map,r=new Map,l=new Map,m=new Map;for(const p of t){o.set(p.id,p);for(const b of p.tokens)nr(r,b,p.id);for(const b of p.prefixes)nr(l,b,p.id);for(const b of p.ngrams)nr(m,b,p.id)}return{documents:t,documentById:o,tokenIndex:r,prefixIndex:l,ngramIndex:m}}function Mg(e,t,o={}){const r=Math.max(1,Math.trunc(Number(o.limit||30))),l=sn(t),m=$d(e,0,0,o.viewport,0);if(!l)return{hits:[],profile:m};const p=Array.from(Xl(l)),b=Array.from(Gl(p)),c=ql(l),y=Array.from(Kl(c)),w=new Map;for(const $ of p)or(e.tokenIndex,$,w,8);for(const $ of b)or(e.prefixIndex,$,w,$.length<=3?4:2);for(const $ of y)or(e.ngramIndex,$,w,1.15);const L=Pg(e,w,r),I=_g(o.allowedContentTypes),D=[];for(const $ of L){const O=e.documentById.get($);if(!O||I&&!I.has(O.contentType))continue;const G=Lg(O,l,p,y);if(G<=0)continue;const V=Eg(O,o.viewport??null);D.push({nodeId:O.id,score:G+V,textScore:G,viewportBoost:V})}D.sort(($,O)=>O.score-$.score||$.nodeId.localeCompare(O.nodeId));const q=D.slice(0,r);return{hits:q,profile:$d(e,L.length,q.length,o.viewport,q.filter($=>$.viewportBoost>0).length)}}function sn(e){const t=String(e??"");if(!t.trim())return"";let o=t;try{o=t.normalize("NFKC")}catch{o=t}o=o.toLowerCase();let r="",l=!1;for(const m of o){if(/\s/u.test(m)){l||(r+=" ",l=!0);continue}Dg(m)||(r+=m,l=!1)}return r.trim()}function Xl(e){return new Set(e.match(jg)??[])}function Gl(e){const t=new Set;for(const o of e){if(!o.trim())continue;const r=Math.min(8,o.length);for(let l=2;l<=r;l+=1)t.add(o.slice(0,l))}return t}function Kl(e){const t=new Set;if(!e.trim())return t;if(e.length<=ar)return t.add(e),t;for(let o=0;o<=e.length-ar;o+=1)t.add(e.slice(o,o+ar));return t}function Tg(e){const t=String(e.kind??"").trim().toLowerCase(),o=Ta(e.prompt??e.title,xg),r=Ng(t)?Ta(e.response??e.body,Cg):"",l=Rg(e.metadata,e.tags,e.metadataText),m=Ta(e.sourceFilePath||e.assetUrl,Sg),p=sn(o),b=sn(r),c=sn(l),y=sn(m),w=sn(t),L=[p,c,y,b,w].filter(Boolean).join(" "),I=Xl(L);return{id:String(e.id),contentType:t,normalizedPrompt:p,normalizedResponse:b,normalizedMetadata:c,normalizedSourcePath:y,normalizedContentType:w,tokens:I,prefixes:Gl(I),ngrams:Kl(ql(L)),x:Number.isFinite(e.x)?e.x:0,y:Number.isFinite(e.y)?e.y:0,width:Number.isFinite(e.width)?e.width:1,height:Number.isFinite(e.height)?e.height:1}}function Rg(e,t,o){const r=[];let l=0;if(e)for(const[m,p]of Object.entries(e)){if(l>=tr)break;!String(m??"").trim()&&!String(p??"").trim()||(r.push(Ta(m,128)),String(p??"").trim()&&r.push(Ta(p,er)),l+=1)}return l<tr&&(t!=null&&t.length)&&(r.push("tags",Ta(t.join(" "),er)),l+=1),l<tr&&(o!=null&&o.trim())&&r.push("metadata",Ta(o,er)),r.join(" ")}function Lg(e,t,o,r){let l=0;e.normalizedPrompt===t?l+=120:to(e.normalizedPrompt,t)&&(l+=54),to(e.normalizedMetadata,t)&&(l+=26),to(e.normalizedSourcePath,t)&&(l+=18),to(e.normalizedResponse,t)&&(l+=14),to(e.normalizedContentType,t)&&(l+=8);for(const m of o)e.tokens.has(m)&&(l+=7),e.normalizedPrompt.startsWith(m)&&(l+=10);for(const m of r)e.ngrams.has(m)&&(l+=.85);return l}function Eg(e,t){if(!t)return 0;const o=e.x+Math.max(1,e.width)/2,r=e.y+Math.max(1,e.height)/2,l=Math.abs(o-t.centerX)/Math.max(1,t.halfWidth),m=Math.abs(r-t.centerY)/Math.max(1,t.halfHeight),p=Math.sqrt(l*l+m*m);if(p<=1)return Od+(1-p)*Ig;if(p<=Fd){const b=1-(p-1)/Math.max(.001,Fd-1);return Math.max(0,b)*(Od*.75)}return 0}function Pg(e,t,o){return t.size===0?e.documents.map(r=>r.id):Array.from(t.entries()).sort((r,l)=>l[1]-r[1]||r[0].localeCompare(l[0])).slice(0,Math.max(o*kg,wg)).map(([r])=>r)}function _g(e){if(!e)return null;const t=new Set(Array.from(e,o=>String(o||"").trim().toLowerCase()).filter(Boolean));return t.size>0?t:null}function $d(e,t,o,r,l){return{documentCount:e.documents.length,candidateCount:t,rankedCount:o,viewportBoosted:!!r,boostedCount:l,indexedTokenCount:e.tokenIndex.size,indexedPrefixCount:e.prefixIndex.size,indexedNGramCount:e.ngramIndex.size}}function nr(e,t,o){const r=e.get(t);if(r){r.add(o);return}e.set(t,new Set([o]))}function or(e,t,o,r){const l=e.get(t);if(l)for(const m of l)o.set(m,(o.get(m)??0)+r)}function ql(e){let t="";for(const o of e)/\s/u.test(o)||(t+=o);return t}function Ta(e,t){const o=String(e??"");return o.length<=t?o:o.slice(0,t)}function to(e,t){return!!(e&&t&&e.includes(t))}function Dg(e){const t=e.codePointAt(0)??0;return t<=31||t>=127&&t<=159}const Bg=2147483647,Og="LocalBridge access is enabled, but the bridge is not reachable. Restart LocalBridge, allow Chrome local-network access, then reload MindCanvas.",Fg="Local storage is unavailable in the hosted app until browser local storage or LocalBridge access is available.",$g="Local storage is unavailable. Check the browser-local storage state or LocalBridge connection.",zg="Cloud projects are unavailable until Supabase and Cloudflare R2 are configured.",Ug="Login is required before cloud projects can be used.",Hg="Cloud projects are unavailable.";function Wg(e){return e.bridgeProviderConfigured||e.browserProviderConfigured||e.embeddedProviderConfigured}function Lr(e,t=!0){const o={isAvailable:!1,bridgeReachable:!1,browserLocalAvailable:!1,embeddedLocalAvailable:!1,providerKind:"none",canBrowseWorkspace:!1};return e.bridgeProviderConfigured&&e.bridgeReachable?{...o,isAvailable:!0,bridgeReachable:!0,providerKind:"bridge",canBrowseWorkspace:!0}:e.hostedWebApp&&e.hostedLocalBridgeAccessEnabled&&e.bridgeProviderConfigured?{...o,providerKind:"bridge"}:e.browserProviderConfigured&&(e.browserLocalAvailable||t&&e.browserLocalAvailableWhenEmpty===!0)?{...o,isAvailable:!0,browserLocalAvailable:!0,providerKind:"browser"}:e.embeddedProviderConfigured&&e.supportsEmbeddedLocal?{...o,isAvailable:!0,embeddedLocalAvailable:!0,providerKind:"embedded"}:o}function Vg(e){return Lr(e,!1).isAvailable?"local":ti(e)?"cloud":Lr(e,!0).isAvailable?"local":e.cloudConfigured?"cloud":"local"}function ti(e){return e.cloudConfigured&&e.cloudSessionAvailable}function Yg(e,t){return t.providerKind==="bridge"&&!t.bridgeReachable?Og:e.hostedWebApp?Fg:$g}function Xg(e){return e.cloudConfigured?ti(e)?Hg:Ug:zg}function Gg(e){var w,L,I;const t=ti(e),o=Lr(e,!0),r=Wg(e),l=e.cloudConfigured,m=o.isAvailable,p=t;let b=e.storedMode??Vg(e);b==="cloud"&&(!l||!p&&m)?b=m?"local":"cloud":b==="local"&&(!r&&l||!m&&p)&&(b="cloud");const c=e.cloudAccess,y=((w=c==null?void 0:c.denialReason)==null?void 0:w.trim())||void 0;return{currentMode:b,showLocalTab:r,showCloudTab:l,isLocalAvailable:o.isAvailable,isCloudAvailable:t,requiresCloudSignIn:e.cloudConfigured&&!t,canUseLocalProjects:m,canBrowseLocalWorkspace:o.canBrowseWorkspace,localProviderKind:o.providerKind,canUseCloudProjects:p,canSyncLocalToCloud:m&&p,cloudPlanKey:((L=c==null?void 0:c.planKey)==null?void 0:L.trim())||"free",cloudEntitlementStatus:((I=c==null?void 0:c.entitlementStatus)==null?void 0:I.trim())||(c?"active":"inactive"),currentCloudBoardCount:(c==null?void 0:c.currentBoardCount)??0,cloudBoardLimit:(c==null?void 0:c.cloudBoardLimit)??Bg,lockedCloudBoardCount:(c==null?void 0:c.lockedBoardCount)??0,canCreateCloudBoards:(c==null?void 0:c.canCreateBoard)??p,canUseManagedAi:(c==null?void 0:c.canUseManagedAi)??!1,canGenerateImage:(c==null?void 0:c.canGenerateImage)??!1,canUseContextPack:(c==null?void 0:c.canUseContextPack)??!1,cloudLimitMessage:y,localStatusMessage:o.isAvailable?void 0:Yg(e,o),cloudStatusMessage:p?void 0:Xg(e)}}function Kg(){const e=new Error("Queued operation was cancelled before it started.");return e.name="AbortError",e}class qg{constructor(){id(this,"tails",new Map)}isBusy(t){return this.tails.has(t)}enqueue(t,o,r){if(typeof o!="function")throw new TypeError("KeyedAsyncQueue operation is required.");const l=this.tails.get(t)??Promise.resolve();let m;return m=(async()=>{try{try{await l}catch{}if(r!=null&&r.aborted)throw Kg();return await o(r)}finally{this.tails.get(t)===m&&this.tails.delete(t)}})(),this.tails.set(t,m),m}clear(t){if(typeof t>"u"){this.tails.clear();return}this.tails.delete(t)}}const Er="mindexec-local-mode-warning-dismissed-v1";function Jg(){try{return window.localStorage.getItem(Er)==="true"}catch{return!1}}function Jl(e,t){var o,r;if(e==="checking")return"Checking bridge";if(e==="connected"){const l=(r=(o=t==null?void 0:t.exec)==null?void 0:o.model)==null?void 0:r.trim();return l?`Bridge / ${l}`:"Bridge connected"}return e==="blocked"?"Bridge gated":e==="unavailable"?"Bridge unavailable":"Bridge idle"}function Zg(e,t,o){var l,m,p,b,c;if(e!=="connected")return t||Jl(e,o);const r=[o!=null&&o.version?`version ${o.version}`:null,(l=o==null?void 0:o.exec)!=null&&l.model?`model ${o.exec.model}`:null,(m=o==null?void 0:o.exec)!=null&&m.reasoningEffort?`reasoning ${o.exec.reasoningEffort}`:null,(p=o==null?void 0:o.exec)!=null&&p.serviceTier?`tier ${o.exec.serviceTier}`:null,(b=o==null?void 0:o.exec)!=null&&b.preferredProviderKind?`codex ${o.exec.preferredProviderKind}`:null,(c=o==null?void 0:o.project)!=null&&c.isOpen?"project open":null].filter(Boolean);return r.length>0?`LocalBridge connected. ${r.join(" / ")}`:"LocalBridge connected."}function Qg({state:e,message:t,status:o,hostedBridgeAccessEnabled:r,onRefresh:l,onEnableHostedBridge:m}){const p=g.useMemo(()=>e==="checking"?n.jsx(Ut,{size:14,className:"spin-icon"}):e==="connected"?n.jsx(_m,{size:14}):e==="blocked"?n.jsx(Il,{size:14}):e==="unavailable"?n.jsx(Dm,{size:14}):n.jsx(Vr,{size:14}),[e]);return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--${e}`,title:Zg(e,t,o),"data-testid":"bridge-status-pill","data-bridge-state":e,"data-bridge-access":r?"enabled":"gated",children:[n.jsx("span",{className:"runtime-status-pill__icon","aria-hidden":"true",children:p}),n.jsx("span",{children:Jl(e,o)}),e==="blocked"&&!r&&n.jsx("button",{type:"button",className:"runtime-status-pill__action",onClick:m,children:"Enable"}),n.jsx("button",{type:"button",className:"runtime-status-pill__button",title:"Refresh LocalBridge","data-testid":"bridge-status-refresh",onClick:()=>void l(),disabled:e==="checking",children:n.jsx(ln,{size:13})})]})}function eh({status:e,message:t}){const r={ready:{icon:n.jsx(kr,{size:14}),label:"Saved locally",title:"Board state is saved in this browser."},syncing:{icon:n.jsx(Ut,{size:14,className:"spin-icon"}),label:"Saving",title:"Saving board state to this browser."},error:{icon:n.jsx(Yr,{size:14}),label:"Save error",title:"Board state could not be saved locally."},offline:{icon:n.jsx(Vr,{size:14}),label:"Offline",title:"No sync adapter is connected."}}[e];return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--sync-${e}`,title:t||r.title,"data-testid":"sync-status-indicator","data-sync-status":e,children:[n.jsx("span",{className:"runtime-status-pill__icon","aria-hidden":"true",children:r.icon}),n.jsx("span",{children:r.label})]})}function th({visible:e}){const[t,o]=g.useState(Jg);if(!e||t)return null;const r=()=>{o(!0);try{window.localStorage.setItem(Er,"true")}catch{}f.emit("runtimeStatus.localMode.dismissed")};return n.jsxs("section",{className:"runtime-local-warning",role:"status","data-testid":"local-mode-warning","data-local-mode-dismissed-key":Er,children:[n.jsx("div",{className:"runtime-local-warning__icon","aria-hidden":"true",children:n.jsx(Yr,{size:16})}),n.jsxs("div",{className:"runtime-local-warning__copy",children:[n.jsx("strong",{children:"Local Mode"}),n.jsx("span",{children:"Boards are saved in this browser. LocalBridge export creates a file-backed copy."})]}),n.jsx("button",{type:"button",title:"Dismiss local mode warning","data-testid":"local-mode-dismiss",onClick:r,children:n.jsx(yt,{size:14})})]})}function ah({bridgeState:e,bridgeMessage:t,bridgeStatus:o,syncStatus:r,syncMessage:l,hostedBridgeAccessEnabled:m,onRefreshBridge:p,onEnableHostedBridge:b,showLocalModeWarning:c=!0}){return n.jsxs("aside",{className:"runtime-status-cluster","aria-label":"Runtime status","data-testid":"runtime-status-cluster","data-local-mode-visible":c?"true":"false",children:[n.jsxs("div",{className:"runtime-status-row",children:[n.jsx(Qg,{state:e,message:t,status:o,hostedBridgeAccessEnabled:m,onRefresh:p,onEnableHostedBridge:b}),n.jsx(eh,{status:r,message:l})]}),n.jsx(th,{visible:c})]})}const nh=/^data:image\//i;function oh(e){const t=String(e||"").trim();if(!t)return{src:null,reason:"empty",urlKind:"empty"};const o=t.toLowerCase();return nh.test(t)?{src:t,reason:null,urlKind:"data"}:o.startsWith("blob:")?{src:t,reason:null,urlKind:"blob"}:o.startsWith("https://")?{src:t,reason:null,urlKind:"https"}:o.startsWith("http://")?{src:t,reason:null,urlKind:"http"}:t.startsWith("//")?{src:t,reason:null,urlKind:"protocol-relative"}:t.startsWith("/")||t.startsWith("./")||t.startsWith("../")?{src:t,reason:null,urlKind:"relative"}:/^[a-z][a-z0-9+.-]*:/i.test(t)?{src:null,reason:"unsupported-protocol",urlKind:t.split(":",1)[0].toLowerCase()}:{src:t,reason:null,urlKind:"relative"}}function sr({src:e,alt:t="",className:o="",testId:r="secure-image",traceId:l,kind:m="image",title:p}){const b=g.useMemo(()=>oh(e),[e]),[c,y]=g.useState(b.src?"loading":"blocked");g.useEffect(()=>{const D=b.src?"loading":"blocked";y(D),b.src||f.emit("secureImage.blocked",{id:l,kind:m,reason:b.reason,urlKind:b.urlKind})},[m,b.reason,b.src,b.urlKind,l]);const w=()=>{y("loaded"),f.emit("secureImage.loaded",{id:l,kind:m,urlKind:b.urlKind})},L=()=>{y("error"),f.emit("secureImage.error",{id:l,kind:m,urlKind:b.urlKind})},I=c==="blocked"?`Image blocked: ${b.reason||"unsupported source"}`:"Image failed to load";return n.jsxs("div",{className:`secure-image secure-image--${c} ${o}`.trim(),"data-testid":r,"data-secure-image-state":c,"data-secure-image-kind":m,title:c==="loaded"?p:I,children:[b.src&&n.jsx("img",{src:b.src,alt:t,loading:"lazy",decoding:"async",draggable:!1,onLoad:w,onError:L}),c==="loading"&&n.jsx("span",{className:"secure-image__loading","aria-hidden":"true",children:n.jsx("span",{})}),(c==="blocked"||c==="error")&&n.jsx("span",{className:"secure-image__fallback",role:"img","aria-label":I,children:c==="blocked"?n.jsx(Bm,{size:18}):n.jsx(Yr,{size:18})})]})}const sh={note:ls,text:xt,"ai-task":cn,image:mn,mask:mn,video:pn,embed:gn,code:un,markdown:xt,"csv-table":xt,memo:ls,pdf:xt,file:wr,directory:Om,"template-launcher":xt,"remote-monitor":ds,"remote-control":ds},rr=[{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."}],zd=500,rh=48,ih=new Set(["mindcanvasagent","agentcommand"]),dh=new Set(["codenote","code-note"]),lh=["multidesktopmonitor","remotehubmonitor","remotefleetmonitor","smartviewmonitor"],ch=["remotedevice","remotefleetdevice","remotecontrol"];function uh(e){const t=hn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=hn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=hn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-monitor"||t==="remotefleetmonitor"||o==="fleet-monitor"||r==="remote-fleet@1"||Ql(e,["RemoteFleetViewMode","RemoteFleetHubStatus","RemoteFleetDevicesJson","RemoteFleetDeviceCount","RemoteFleetConnectedDeviceCount","RemoteFleetProjectionMode","RemoteFleetCanvasPagination","RemoteHub","RemoteRoute","RemotePage","RemoteVisibleBudget"])||Zl(e,lh,["remote","monitor"])}function mh(e){const t=hn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=hn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=hn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-control"||t==="remotefleetdevice"||o==="fleet-device"||r==="remote-fleet-device@1"||Ql(e,["RemoteFleetDeviceId","RemoteFleetDeviceName","RemoteFleetDevicePlatform","RemoteFleetDeviceConnected","RemoteFleetDeviceCanControl","RemoteFleetSourceMonitorNodeId"])||Zl(e,ch,["remote","control"])}function Zl(e,t,o){const r=(e.tags??[]).map(b=>b.trim().toLowerCase()).filter(Boolean),l=o.every(b=>r.includes(b)),p=[e.title,e.body,e.sourceFilePath,e.assetUrl,...r].join(" ").toLowerCase().replace(/[^a-z0-9]+/g,"");return l||t.some(b=>p.includes(b))}function hn(e,...t){const o=e.metadata??{};for(const l of t){const m=o[l];if(m!=null)return String(m)}const r=new Set(t.map(l=>l.toLowerCase()));for(const[l,m]of Object.entries(o))if(r.has(l.toLowerCase())&&m!==void 0&&m!==null)return String(m);return""}function Ql(e,t){const o=e.metadata??{},r=new Set(t.map(l=>l.toLowerCase()));return Object.entries(o).some(([l,m])=>r.has(l.toLowerCase())&&m!==void 0&&m!==null&&String(m).trim()!=="")}const Pr=[{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"}],ph=g.memo(function({node:t,selected:o,pulsing:r,connectionDraft:l,onSelect:m,onDragStart:p,onResizeStart:b,onPatch:c,onDelete:y,onDuplicate:w,onRun:L,onPin:I,onOpenResult:D,onToggleAiReference:q,onCopyNode:$,onCopyEmbedReference:O,onFitNodeHeight:G,onToggleNodeExpanded:V,onToggleWordWrap:re,onStageCompany:oe,onOpenCompanyGraph:Ae,onSyncCompanyGoal:be,onRefreshCompany:Ue,onSetCompanyStatus:et,onRemoveCompany:tt,onOpenAsset:he,onOpenDirectorySettings:J,onScanDirectory:ie,onCreateRemoteControl:se,onGenerateTemplateCard:St}){var Mn,wo,rt,Bt,ya,Ha,Qt,Wa,te,Ye,Va,Tn,v,Y,ae,Xe,Rn,Ot,Ya,Xa,Ln,En,Ga,Pn,xa,_n,Ka,Ca,ea,De,Pe,qa,Dn,vo,Sa;const F=String(((Mn=t.metadata)==null?void 0:Mn.AutomationNodeKind)||((wo=t.metadata)==null?void 0:wo.AutomationTemplateKey)||((rt=t.metadata)==null?void 0:rt.AutomationInferredKind)||"").trim().toLowerCase(),lt=String(((Bt=t.metadata)==null?void 0:Bt.SemanticType)||((ya=t.metadata)==null?void 0:ya.semanticType)||"").trim().toLowerCase(),Me=t.kind==="memo"&&ih.has(lt),le=t.kind==="memo"&&dh.has(lt),Tt=String(((Ha=t.metadata)==null?void 0:Ha.AgentCommandStatus)||"Draft"),me=String(((Qt=t.metadata)==null?void 0:Qt.AgentCommandMode)||"Task"),He=String(((Wa=t.metadata)==null?void 0:Wa.AgentCommandRequestedRole)||"Researcher"),ee=String(((te=t.metadata)==null?void 0:te.CodeNoteStatus)||"Draft"),ct=String(((Ye=t.metadata)==null?void 0:Ye.CodeNoteSyncState)||"Unlinked"),Wt=String(((Va=t.metadata)==null?void 0:Va.CodeNoteKind)||"Feature"),Ea=Me?cn:le?un:F==="image-generate"?mn:F==="video-generate"?pn:sh[t.kind],xn=l&&l.from!==t.id,ho=t.kind==="ai-task",Re=t.kind==="pdf"||t.kind==="file"||t.kind==="directory",Pa=uh(t),Vt=mh(t),Oe=Pa||Vt,Te=Pa?"monitor":Vt?"control":"",ce=t.kind==="template-launcher"||String(((Tn=t.metadata)==null?void 0:Tn.semanticType)||((v=t.metadata)==null?void 0:v.SemanticType)||"").toLowerCase()==="templatelauncher",kt=t.kind==="video",we=t.kind==="embed",wt=t.kind==="mask",ye=t.kind==="memo",at=t.kind==="markdown",nt=t.kind==="csv-table",Fe=ye?kh(t):null,pe=g.useRef(null),Cn=kt?ec(t):"",qe=kt?vh(t):"",$e=we?jh(t):"",vt=we?Ih(t):"",fo=we?Nh(t,$e):"",_e=we?Ah(t):"",Le=(((Y=t.imageStack)==null?void 0:Y.variants)??[]).filter(x=>!!x.imageUrl),ut=Le.find(x=>{var P;return x.variantId===((P=t.imageStack)==null?void 0:P.activeVariantId)})??Le[0]??null,Rt=t.kind==="image"||wt?(ut==null?void 0:ut.imageUrl)||ei(t):"",la=ut?Le.findIndex(x=>x.variantId===ut.variantId):-1,_a=!Rt&&!Re&&!Oe&&!ce&&!kt&&!we,bo=_a&&!ye,Yt=t.isExpanded===!1&&Number(t.originalHeight??0)>t.height+1,Sn=!Oe&&!["image","mask","video","embed","pdf","file","directory","template-launcher","remote-monitor","remote-control"].includes(t.kind),ot=t.aiEnabled!==!1,We=wh(t),Je=!!(t.isChunkedText||((ae=t.metadata)==null?void 0:ae.IsChunkedText)==="true"),ca=Number(t.totalLineCount??((Xe=t.metadata)==null?void 0:Xe.TotalLineCount)??0),yo=t.sourceFilePath||((Rn=t.metadata)==null?void 0:Rn.FileName)||t.title,xe=Je?n.jsxs("div",{className:"node-chunked-text-state","data-testid":"node-chunked-text-state",title:yo,children:[n.jsx(xt,{size:12}),n.jsx("strong",{children:"Chunked text"}),Number.isFinite(ca)&&ca>0&&n.jsxs("span",{children:[ca.toLocaleString()," lines"]})]}):null,Xt=t.kind==="directory"?(Ot=t.metadata)==null?void 0:Ot.Include:null,Da=t.kind==="directory"?(Ya=t.metadata)==null?void 0:Ya.Exclude:null,kn=t.kind==="directory"?(Xa=t.metadata)==null?void 0:Xa.DirectoryFileCount:null,Ee=t.kind==="directory"?(Ln=t.metadata)==null?void 0:Ln.DirectoryDirCount:null,jt=t.kind==="directory"?(En=t.metadata)==null?void 0:En.DirectoryLastScanUtc:null,[Ba,Oa]=g.useState(!1),[Fa,Ve]=g.useState(null),[Ss,wn]=g.useState(((Ga=t.metadata)==null?void 0:Ga.CompanyExecutionMode)||"Auto"),[ua,$a]=g.useState(((Pn=t.metadata)==null?void 0:Pn.CompanySubAgents)!=="false"),[Gt,ma]=g.useState(!1),[It,za]=g.useState(null),pa=g.useMemo(()=>nt?bh(t.body,It):null,[It,nt,t.body]),de=g.useMemo(()=>ce?kl(t.body):null,[ce,t.body]),mt=(de==null?void 0:de.options.find(x=>x.id===de.selectedOptionId))??(de==null?void 0:de.options[0])??null,Kt=om(de),Lt=rr.find(x=>x.key===Ss)||rr[0],Et=String(((xa=t.metadata)==null?void 0:xa.CompanyStatus)||(t.companyMode?"Staged":"")).trim(),Pt=Et.toLowerCase(),qt=Pt==="paused",pt=Pt==="archived",ks=x=>{x.stopPropagation();const P=x.currentTarget.getBoundingClientRect();Ve(hh(P)),Oa(ne=>!ne)},ws=x=>{x.stopPropagation(),oe(t.id,{executionMode:Lt.key,enableSubAgents:ua}),Oa(!1)},xo=x=>{x.stopPropagation(),Ae(t.id)},ga=(x,P)=>{P.stopPropagation();const ne=Le.find(ht=>ht.variantId===x);!ne||!t.imageStack||ne.variantId===t.imageStack.activeVariantId||(f.emit("node.imageStack.variant",{nodeId:t.id,variantId:ne.variantId,variantCount:Le.length}),c(t.id,{imageUrl:ne.imageUrl,imageStack:{...t.imageStack,activeVariantId:ne.variantId,variants:Le,updatedAtUtc:new Date().toISOString()},metadata:{...t.metadata??{},ImageStackActiveVariantId:ne.variantId}}))},vs=(x,P)=>{if(P.stopPropagation(),!!ye){if((Fe==null?void 0:Fe.key)===x){ma(!1);return}f.emit("node.memoColor.changed",{id:t.id,colorKey:x}),c(t.id,{metadata:{...t.metadata??{},memoColor:x,memoColorIsCustom:"true"}}),ma(!1)}},vn=x=>{var Be,jo;if(x.stopPropagation(),!Me)return;const P=(t.body||t.title||"Agent command objective").trim(),ne=["Clarify the objective and constraints.","Collect linked canvas context or code notes.","Draft an execution plan before external adapter use."],ht=["canvas-context","agent-command-planning","adapter-gated-execution"],ze=["Canvas.ListAgentCommands","Canvas.UpdateAgentCommand","Canvas.PlanAgentCommand","Canvas.SetAgentCommandState"],Nt=["MindCanvasAgent",me,He],z=["Local React plan staged for this Agent Command.",`Role: ${He}`,`Mode: ${me}`,`Objective: ${P.slice(0,220)}`,"External execution remains adapter-gated until LocalBridge/agent runtime is available."].join(`
1
+ var Xu=Object.defineProperty;var Gu=(e,t,o)=>t in e?Xu(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var id=(e,t,o)=>Gu(e,typeof t!="symbol"?t+"":t,o);import{j as n,r as g,a as Ku}from"./vendor-react-BXzpOyCS.js";import{l as qu,a as ft,s as zt,b as Ju,d as Zu,r as Qu,c as em,e as tm,i as dd}from"./storage-CWUvUZC-.js";import{r as Hr,g as fs,w as am,a as Ys,d as ld,b as nm,t as Wr,p as kl,v as om,R as sm,c as rm,u as im,e as dm,f as cd,s as bt,i as en,l as Xs,h as Gn,j as $o,k as Kn,m as qn,n as zo,o as Na,q as ud,x as lm,y as Jn,z as cm,A as um,B as mm,C as pm,D as wl,E as gm,F as hm,G as oo,H as yr,I as fm,J as bm,K as md,L as xr,M as Cr,N as vl,O as Uo,P as Qo,Q as so,S as pd,T as U,U as Gs,V as ro,W as ym,X as xm,Y as Cm,Z as gd,_ as Ks,$ as Sm,a0 as km,a1 as wm,a2 as vm,a3 as Sr,a4 as jm,a5 as Im,a6 as Nm,a7 as Am,a8 as hd}from"./canvas-runtime-hH7qY6Be.js";import{e as Mm,d as Tm}from"./vendor-msgpack-BE8aAsr3.js";import{R as f}from"./app-runtime-xD2Z3NdN.js";import{g as qs,A as fd,a as es}from"./index-Rjp0zHKN.js";import{g as bs,r as jl}from"./supabaseAuthAdapter-Bptc9G29.js";import{c as Rm,a as Lm,r as bd}from"./toolHandoff-D5e5f7t5.js";import{a as yd,s as Em}from"./executionModeSettings-NJqurj-o.js";import{a as xd,p as Pm}from"./runtimeSettingsPersistenceProjection-BoNWmYjU.js";import{A as Ut,W as _m,c as Il,D as Dm,E as Vr,R as ln,J as Yr,X as yt,N as kr,O as Bm,Q as cn,w as un,I as mn,V as pn,l as ds,F as xt,Y as Om,Z as wr,_ as ls,$ as gn,a0 as Nl,a1 as Fm,a2 as Al,a3 as $m,i as co,a4 as Ml,a5 as zm,a6 as Cd,a7 as Um,a8 as ia,a9 as Sd,T as cs,aa as kd,ab as po,ac as Hm,ad as ts,ae as Tl,af as vr,ag as Wm,ah as Vm,f as Ym,ai as Xm,h as io,x as Gm,aj as Km,ak as qm,al as wd,am as vd,an as jd,g as Id,ao as Ho,H as Zn,ap as Wo,s as Js,aq as Nd,ar as Jm,as as Zs,at as Ad,au as Vo,av as Qs,aw as Md,ax as Td,ay as Rd,az as Zm,aA as Qm,aB as ep,aC as tp,n as ap,o as Qn,aD as np,aE as op,aF as sp,aG as rp,aH as ip,aI as dp,aJ as lp,aK as cp}from"./vendor-icons-D0xKCnZS.js";const up=1200,La="LocalBridgeOriginalNodeId";function Ct(e){return typeof e=="object"&&e!==null}function sa(e,t){const o=Number(e);return Number.isFinite(o)?o:t}function W(e){return typeof e=="string"?e:""}function Rl(){return typeof window<"u"?{width:window.innerWidth||1280,height:window.innerHeight||720}:{width:1280,height:720}}function jr(e,t,o){const r=Number(e),l=Number(t),m=Number(o);if(!Number.isFinite(r)||!Number.isFinite(l)||!Number.isFinite(m)||m<=0)return null;const p=1400/m,b=Rl();return{x:b.width/2-r*p,y:b.height/2-l*p,scale:p}}function mp(e){return Ct(e)?jr(e.x??e.X,e.y??e.Y,e.z??e.Z):null}function pp(e){if(!Ct(e))return null;const t=Number(e.x),o=Number(e.y),r=Number(e.scale);if(!Number.isFinite(t)||!Number.isFinite(o)||!Number.isFinite(r)||r<=0)return null;const l=Rl();return{x:(l.width/2-t)/r,y:(l.height/2-o)/r,z:1400/r}}function gp(e){const t=String(e||"").trim();if(t)try{const o=JSON.parse(t);if(!Ct(o))return;const r={};for(const[l,m]of Object.entries(o)){const p=mp(m);p&&(r[l]=p)}return Object.keys(r).length>0?r:void 0}catch{return}}function hp(e){if(!e||Object.keys(e).length===0)return null;const t={};for(const[o,r]of Object.entries(e)){const l=pp(r);l&&(t[o]=l)}return Object.keys(t).length>0?JSON.stringify(t):null}function us(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 ys(){return crypto.randomUUID()}function Xr(e){return Ct(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=W(e).trim();if(!t)return null;try{return JSON.parse(t)}catch{return null}}function Ir(e){if(Array.isArray(e))return e;if(!Ct(e))return[];for(const t of["Nodes","nodes","Items","items","Content","content","Upserts","upserts"])if(t in e){const o=e[t];if(Array.isArray(o))return o;const r=Ld(o);if(r)return Ir(r)}for(const t of["ContentJson","contentJson","content_json"])if(t in e){const o=Ld(e[t]);if(o)return Ir(o)}return Xr(e)?[e]:[]}function Gr(e){return Ct(e)?"BoardId"in e&&("Upserts"in e||"upserts"in e||"Deletes"in e||"deletes"in e):!1}function Ll(e){if(!Ct(e))return 0;for(const t of["Deletes","deletes"]){const o=e[t];if(Array.isArray(o))return o.length}return 0}function ms(e){return Ir(e).filter(Xr)}function El(e){return ms(e).length}function fp(e,t){var m;const o=[...ms(e)];if(!Gr(t))return o;const r=new Set;for(const p of["Deletes","deletes"]){const b=t[p];if(Array.isArray(b))for(const c of b){const y=W(c).trim();y&&r.add(y)}}if(r.size>0)for(let p=o.length-1;p>=0;p-=1){const b=W((m=o[p])==null?void 0:m.Id).trim();b&&r.has(b)&&o.splice(p,1)}const l=new Map;o.forEach((p,b)=>{const c=W(p.Id).trim();c&&l.set(c,b)});for(const p of ms(t)){const b=W(p.Id).trim(),c=b?l.get(b):void 0;if(c!==void 0){o[c]=p;continue}b&&l.set(b,o.length),o.push(p)}return o}function Pl(e){const t=Array.isArray(e)?e.filter(Ct):[];return new Map(t.filter(o=>o.NodeId).map(o=>[String(o.NodeId),o]))}async function Nr(e,t){for(const o of e)try{const r=await Hr(o,t);return{payload:JSON.parse(r.content),path:o}}catch{}return null}async function bp(e,t){const o=`.mindexec/boards/${e}.msgpack`,r=`boards/${e}.msgpack`;for(const b of[o,r])try{const c=await nm(b,t);return{payload:Tm(c),format:b===o?"msgpack":"legacy-msgpack",path:b}}catch{}const l=`.mindexec/boards/${e}.json`,m=`boards/${e}.json`,p=await Nr([l,m],t);if(p)return{payload:p.payload,format:p.path===l?"json":"legacy-json",path:p.path};throw new Error(`LocalBridge board file not found: ${o}, ${r}, ${l}, ${m}`)}function Ar(e){const t=W(e.Id).trim()||W(e.BoardId).trim();return t?{Id:t,Title:W(e.Title)||null,Description:W(e.Description)||null,ThumbnailUrl:W(e.ThumbnailUrl)||null,CreatedAt:W(e.CreatedAt)||null,UpdatedAt:W(e.UpdatedAt)||null,LastCameraX:Number.isFinite(Number(e.LastCameraX))?Number(e.LastCameraX):null,LastCameraY:Number.isFinite(Number(e.LastCameraY))?Number(e.LastCameraY):null,LastCameraZ:Number.isFinite(Number(e.LastCameraZ))?Number(e.LastCameraZ):null,LastCursorX:Number.isFinite(Number(e.LastCursorX))?Number(e.LastCursorX):null,LastCursorY:Number.isFinite(Number(e.LastCursorY))?Number(e.LastCursorY):null,CameraBookmarks:W(e.CameraBookmarks)||null}:null}function Ed(e){return!Ct(e)||Xr(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 Kr(e){if(Array.isArray(e))return e.filter(Ed).map(t=>Ar(t)).filter(t=>!!t);if(Ed(e)){const t=Ar(e);return t?[t]:[]}return[]}function yp(e){const t=e.toLowerCase();return xp(t)?"remote-control":Cp(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 xp(e){const t=e.trim().toLowerCase();if(!t)return!1;if(["remote-control","remote.control","remotecontrol","remote-device","remote.device","remotedevice","remote-fleet-device","remotefleet.device"].includes(t))return!0;const o=t.replace(/[^a-z0-9]+/g,"");return o.includes("remotecontrol")||o.includes("remotedevice")||o.includes("remotefleetdevice")}function Cp(e){const t=e.trim().toLowerCase();if(!t)return!1;if(["remote-monitor","remote.monitor","remotemonitor","remote-hub-monitor","remotehub.monitor","remotehub-monitor","multi-desktop-monitor","multidesktop.monitor","smartview.monitor"].includes(t))return!0;const o=t.replace(/[^a-z0-9]+/g,"");return o.includes("remotemonitor")||o.includes("remotehubmonitor")||o.includes("multidesktopmonitor")||o.includes("smartviewmonitor")}function Sp(e,t){const o=e.Metadata||{},r=o.ThumbnailUrl,l=o.OriginalUrl,m=o.OriginalPath;return Wr(W(r)||W(l)||W(m)||W(e.Response),t)}function kp(e,t,o){const r=e.ImageStack,l=Array.isArray(r==null?void 0:r.Variants)?r.Variants:[];if(l.length===0)return;const m=l.map((b,c)=>{const y=W(b.AssetId).trim(),w=Wr(y,o)||t;return w?{variantId:W(b.VariantId)||`variant-${W(e.Id)||c}`,imageUrl:w,assetId:y||void 0,caption:W(b.Caption)||void 0,sourceNodeId:W(e.Id)||void 0,createdAtUtc:W(b.CreatedAtUtc)||void 0}:null}).filter(b=>!!b);if(m.length===0)return;const p=W(r==null?void 0:r.ActiveVariantId);return{activeVariantId:m.some(b=>b.variantId===p)?p:m[0].variantId,variants:m,kind:W(r==null?void 0:r.Kind)||"versions",title:W(r==null?void 0:r.Title)||void 0,updatedAtUtc:W(r==null?void 0:r.UpdatedAtUtc)||void 0}}function wp(e,t){return!e||e.variants.length===0?t:(e.variants.find(r=>r.variantId===e.activeVariantId)??e.variants[0]).imageUrl||t}function vp(e,t,o){var p,b,c,y,w,L;const r=(b=(p=e.imageStack)==null?void 0:p.variants)!=null&&b.length?e.imageStack.variants:e.imageUrl?[{variantId:`${e.id}:image`,imageUrl:e.imageUrl,assetId:go(e.imageUrl,t)||e.imageUrl,title:e.title,sourceNodeId:e.id,createdAtUtc:o}]:[];if(r.length===0)return null;const l=r.map(I=>({VariantId:I.variantId||ys(),AssetId:I.assetId||go(I.imageUrl,t)||I.imageUrl,CreatedAtUtc:I.createdAtUtc||o,Caption:I.caption||I.title||null}));return{ActiveVariantId:(c=e.imageStack)!=null&&c.activeVariantId&&l.some(I=>{var D;return I.VariantId===((D=e.imageStack)==null?void 0:D.activeVariantId)})?e.imageStack.activeVariantId:l[0].VariantId||"",Variants:l,Kind:((y=e.imageStack)==null?void 0:y.kind)||(l.length>1?"pile":"versions"),Title:((w=e.imageStack)==null?void 0:w.title)||e.title||null,UpdatedAtUtc:((L=e.imageStack)==null?void 0:L.updatedAtUtc)||o}}function jp(e,t){const o=e.Metadata||{};return Wr(W(o.OriginalUrl)||W(o.OriginalPath)||W(o.SourceFilePath)||W(e.SourceFilePath)||W(e.Response),t)}function Ip(e){const t={};for(const[o,r]of Object.entries(e??{}))typeof r=="string"?t[o]=r:r!=null&&(t[o]=String(r));return t}function Np(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 go(e,t){const o=String(e||"").trim();if(!o)return"";const r=t.replace(/\/+$/,"");return o.startsWith(`${r}/`)?o.slice(r.length+1):o.replace(/^\/+/,"")}function Ap(e,t){const o=new Map;for(const r of e){const l=t.get(r.from),m=t.get(r.to);!l||!m||o.has(m)||o.set(m,l)}return o}function Mp(e){const t=new Set;return e.map(o=>{var c,y;const r=((c=o.metadata)==null?void 0:c[La])||"",l=us(r)?r:us(o.id)?o.id:"",m=!!(l&&t.has(l)),p=l&&!m?l:ys(),b=((y=o.metadata)==null?void 0:y[La])!==p;return t.add(p),{node:b?{...o,metadata:{...o.metadata??{},[La]:p}}:o,originalId:p,assignedNodeId:!l||m,metadataStamped:b,duplicateOriginalId:m}})}function Tp(e,t,o,r,l){var y,w,L;const m=Np(e.kind),p=m==="image"||m==="mask"?go(e.imageUrl,l):"",b=["video","pdf","file","directory","embed"].includes(m)?go(e.assetUrl||e.sourceFilePath||e.body,l):"",c={...e.metadata??{},[La]:t,ReactNodeId:e.id,ReactKind:e.kind};if(e.kind==="remote-monitor"&&(c.RemoteHub??(c.RemoteHub="Gated"),c.RemoteRoute??(c.RemoteRoute="Gated"),c.RemoteConnected??(c.RemoteConnected="0"),c.RemoteTotal??(c.RemoteTotal="30"),c.RemotePage??(c.RemotePage="1/1"),c.AdapterState??(c.AdapterState="adapter-gated")),e.kind==="remote-control"&&(c.SemanticType??(c.SemanticType="RemoteFleetDevice"),c.RemoteFleetSchemaVersion??(c.RemoteFleetSchemaVersion="remote-fleet-device@1"),c.RemoteRoute??(c.RemoteRoute="Gated"),c.RemoteInput??(c.RemoteInput="Off"),c.AdapterState??(c.AdapterState="adapter-gated")),e.kind==="mask"&&(c.ImageRouterMask??(c.ImageRouterMask="true"),c.SemanticType??(c.SemanticType="ImageEditMask")),e.kind==="embed"){const I=e.assetUrl||e.body||e.sourceFilePath||"";c.source??(c.source="embed"),c.renderMode??(c.renderMode="card"),c.provider??(c.provider="web"),c.sourceUrl??(c.sourceUrl=I),c.url??(c.url=I),c.AdapterState??(c.AdapterState="local-reference")}return e.kind==="video"&&(c.assetKind??(c.assetKind="video"),c.videoMode??(c.videoMode=(y=e.assetUrl)!=null&&y.startsWith(l)?"local_bridge":"local_reference"),c.AdapterState??(c.AdapterState=((w=e.metadata)==null?void 0:w.PromptOnly)==="true"?"adapter-gated":"local-reference")),(L=e.tags)!=null&&L.length&&(c.ReactTags=JSON.stringify(e.tags)),p&&(c.OriginalUrl=p,c.ThumbnailUrl=p),b&&(c.OriginalPath=b,c.SourceFilePath=b),{Id:t,ContentType:m,Prompt:e.title||m,Response:m==="image"||m==="mask"?p||e.body||null:m==="remote-monitor"?e.body||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":m==="remote-control"?e.body||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":b||e.body||null,PositionX:e.x,PositionY:e.y,PositionZ:0,IsLoading:e.status==="running",Width:Math.round(e.width),Height:Math.round(e.height),Children:[],ParentId:o||null,IsExpanded:!!e.isExpanded,OriginalHeight:Math.round(e.originalHeight??0),IsAiEnabled:e.aiEnabled!==!1,IsChunkedText:!!e.isChunkedText,TotalLineCount:Math.round(e.totalLineCount??0),SourceFilePath:e.sourceFilePath||b||null,ScrollOffset:e.scrollOffset??0,MaxScroll:e.maxScroll??0,CreatedAt:r,UpdatedAt:r,IsWordWrap:e.wordWrap??e.kind!=="code",Metadata:c,ImageStack:m==="image"?vp(e,l,r):null}}function Rp(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 Lp(e,t,o){const r=W(e.ContentType)||"note",l=W(e.Prompt).trim(),m=W(e.Response).trim(),p=Ip(e.Metadata),b=W(e.Id).trim();b&&(p[La]??(p[La]=b));const y=["true","1","yes"].includes(String(p.ImageRouterMask||p.IsMask||"").trim().toLowerCase())?"mask":yp(r),w=y==="memo"&&["mindcanvasagent","agentcommand"].includes(String(p.SemanticType||p.semanticType||"").trim().toLowerCase()),L=y==="memo"&&["codenote","code-note"].includes(String(p.SemanticType||p.semanticType||"").trim().toLowerCase()),I=W(e.SourceFilePath)||p.OriginalPath||p.SourceFilePath||"",D=y==="video"||y==="pdf"||y==="file"||y==="directory"||y==="embed"?jp(e,o):void 0,q=l||e.SourceFilePath||r||"LocalBridge node",$=y==="image"?m||l||"Image asset":y==="mask"?m||l||"Image mask asset":y==="remote-monitor"?m||l||"RemoteHub monitor node. Frames and input stay adapter-gated until LocalBridge is connected.":y==="remote-control"?m||l||I||"Remote device control node. Frames and input stay adapter-gated until LocalBridge is connected.":y==="pdf"||y==="file"||y==="directory"||y==="embed"?m||I||l||r:m||l||I||"",O=w?500:L?400:y==="remote-monitor"?860:y==="remote-control"||y==="template-launcher"?560:y==="csv-table"?720:y==="embed"?460:y==="video"?420:y==="markdown"?380:y==="text"||y==="image"||y==="mask"?360:320,G=w||L?300:y==="remote-monitor"?640:y==="remote-control"?390:y==="template-launcher"?620:y==="csv-table"?420:y==="embed"?260:y==="video"?236:y==="markdown"?240:y==="text"?210:y==="image"||y==="mask"?260:180,V=y==="image"||y==="mask"?Sp(e,o):void 0,re=y==="image"?kp(e,V,o):void 0,oe=!!(e.IsChunkedText||p.IsChunkedText==="true"),Ae=sa(e.TotalLineCount??p.TotalLineCount,0),be=sa(e.ScrollOffset,0),Ue=sa(e.MaxScroll,0);return{id:String(e.Id||crypto.randomUUID()),kind:y,title:y==="remote-monitor"?l||"Multi Desktop Monitor":y==="remote-control"?l||p.RemoteFleetDeviceName||"Remote Device":y==="template-launcher"?l||"Template Launcher":q,body:$,x:sa((t==null?void 0:t.PositionX)??e.PositionX,0),y:sa((t==null?void 0:t.PositionY)??e.PositionY,0),width:Math.max(160,Math.min(900,sa((t==null?void 0:t.Width)??e.Width,O))),height:Math.max(120,Math.min(900,sa((t==null?void 0:t.Height)??e.Height,G))),status:e.IsLoading?"running":y==="ai-task"?"idle":void 0,imageUrl:wp(re,V),imageStack:re,assetUrl:D,sourceFilePath:I||void 0,isChunkedText:oe||void 0,totalLineCount:oe?Ae:void 0,scrollOffset:oe?be:void 0,maxScroll:oe?Ue:void 0,isExpanded:typeof e.IsExpanded=="boolean"?e.IsExpanded:void 0,originalHeight:sa(e.OriginalHeight,0)||void 0,tags:w?["Agent Command",p.AgentCommandRequestedRole||"Researcher",p.AgentCommandStatus||"Draft"]:L?["Code Note",p.CodeNoteStatus||"Draft",p.CodeNoteSyncState||"Unlinked"]:y==="remote-monitor"?["Remote","Monitor","LocalBridge"]:y==="remote-control"?["Remote","Control","LocalBridge"]:["LocalBridge",r],metadata:y==="remote-monitor"?Ep(p):y==="remote-control"?Pp(p):p,role:e.IsAiEnabled?"ai-enabled":void 0,aiEnabled:typeof e.IsAiEnabled=="boolean"?e.IsAiEnabled:void 0,wordWrap:typeof e.IsWordWrap=="boolean"?e.IsWordWrap:void 0}}function Ep(e){return{RemoteHub:"Gated",RemoteRoute:"Gated",RemoteConnected:"0",RemoteTotal:"30",RemotePage:"1/1",AdapterState:"adapter-gated",...e}}function Pp(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 _p(e,t){const o=[];for(const r of e){const l=String(r.Id||""),m=String(r.ParentId||"");!l||!m||!t.has(l)||!t.has(m)||o.push({id:`edge-local-${m}-${l}`,from:m,to:l,kind:"context"})}return o}async function Dp(e=fs()){const t=await Hr(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return(Array.isArray(o)?o.filter(Ct):[]).map(m=>Ar(m)).filter(m=>!!m).sort((m,p)=>String(p.UpdatedAt||"").localeCompare(String(m.UpdatedAt||"")))}async function Bp(e){try{const t=await Hr(".mindexec/boards/_metadata.json",e),o=JSON.parse(t.content);return Array.isArray(o)?o.filter(Ct):[]}catch{return[]}}async function Op(e,t,o,r=fs(),l=null){var lt,Me,le,Tt,me,He;if((lt=e.source)!=null&&lt.partialImport)throw new Error("This board was imported from a partial original payload. Export is blocked to avoid data loss.");if((Me=e.source)!=null&&Me.truncated)throw new Error("This board was truncated during import. Export is blocked to avoid data loss.");const m=(le=e.source)!=null&&le.exportedByReact?String(e.source.boardId||""):"",p=us(m),b=us(m)?m:ys(),c=new Date().toISOString(),y=Mp(e.nodes),w=y.map(ee=>ee.node),L=new Map(y.map(ee=>[ee.node.id,ee.originalId])),I=Ap(e.edges,L),D=y.map(({node:ee,originalId:ct})=>Tp(ee,ct,I.get(ct),c,r)),q=y.map(({node:ee,originalId:ct})=>Rp(ee,ct)),$=t.scale>0?t.scale:1,O=(window.innerWidth/2-t.x)/$,G=(window.innerHeight/2-t.y)/$,V=1400/$,re=Number((l==null?void 0:l.x)??((Tt=e.viewState)==null?void 0:Tt.cursorX)??0),oe=Number((l==null?void 0:l.y)??((me=e.viewState)==null?void 0:me.cursorY)??0),Ae=(He=e.nodes.find(ee=>ee.kind==="image"&&ee.imageUrl))==null?void 0:He.imageUrl,be={Id:b,UserId:"00000000-0000-0000-0000-000000000000",Title:e.name||"Untitled Board",Description:"Exported from MindExec React",ThumbnailUrl:go(Ae,r)||"",IsPublic:!1,CreatedAt:c,SyncedCloudBoardId:null,LastSyncedAt:null,LastCloudCopyStatus:null,UpdatedAt:c,LastCameraX:O,LastCameraY:G,LastCameraZ:V,LastCursorX:Number.isFinite(re)?re:0,LastCursorY:Number.isFinite(oe)?oe:0,CameraBookmarks:hp(e.settings.cameraBookmarks)},Ue=`.mindexec/boards/${b}.msgpack`,et=`.mindexec/boards/${b}.json`,tt=`.mindexec/boards/${b}.layout.json`,he=`.mindexec/boards/${b}.delta.json`,J=`boards/${b}.delta.json`,ie=await Bp(r),se=[be,...ie.filter(ee=>W(ee.Id)!==b)],St=Mm(D);await am(Ue,St,o,r),await Ys(et,JSON.stringify(D,null,2),o,r),await Ys(tt,JSON.stringify(q,null,2),o,r),await Ys(".mindexec/boards/_metadata.json",JSON.stringify(se,null,2),o,r);const F=await Promise.allSettled([ld(he,o,r),ld(J,o,r)]);return f.emit("localBridge.board.exported",{boardId:b,nodes:D.length,edges:e.edges.length,snapshotFormat:"msgpack",msgpackBytes:St.byteLength,jsonMirror:!0,deltaCleared:F.some(ee=>ee.status==="fulfilled"&&ee.value.success),reusedBoardId:p,stableNodeIds:y.length,assignedNodeIds:y.filter(ee=>ee.assignedNodeId).length,metadataStampedNodeIds:y.filter(ee=>ee.metadataStamped).length,duplicateOriginalNodeIds:y.filter(ee=>ee.duplicateOriginalId).length}),{metadata:be,source:{kind:"localBridge",boardId:b,loadedAt:c,originalNodeCount:D.length,renderedNodeCount:D.length,truncated:!1,exportedByReact:!0,snapshotFormat:"msgpack"},nodes:w,msgpackPath:Ue,boardPath:et,layoutPath:tt}}async function Fp(e,t,o=fs()){const r=await bp(e.Id,o);let l=new Map;const m=await Nr([`.mindexec/boards/${e.Id}.layout.json`,`boards/${e.Id}.layout.json`],o);m&&(l=Pl(m.payload));let p=null;const b=await Nr([`.mindexec/boards/${e.Id}.delta.json`,`boards/${e.Id}.delta.json`],o);b&&(p=b.payload);const c=p?Kr(p)[0]:null,y=!!(p&&Gr(p)),w=y?fp(r.payload,p):r.payload;return _l(w,t,{boardId:(c==null?void 0:c.Id)??e.Id,title:(c==null?void 0:c.Title)||e.Title||"LocalBridge Board",updatedAt:(c==null?void 0:c.UpdatedAt)??e.UpdatedAt,layoutPayload:Array.from(l.values()),baseUrl:o,cameraBookmarks:(c==null?void 0:c.CameraBookmarks)??e.CameraBookmarks,lastCursorX:(c==null?void 0:c.LastCursorX)??e.LastCursorX,lastCursorY:(c==null?void 0:c.LastCursorY)??e.LastCursorY,deltaApplied:y,deltaUpserts:p?El(p):0,deltaDeletes:p?Ll(p):0,snapshotFormat:r.format})}function _l(e,t,o={}){const r=ms(e),l=Gr(e),m=o.deltaUpserts??(l?r.length:0),p=o.deltaDeletes??(l?Ll(e):0),b=o.layoutPayload?Pl(o.layoutPayload):new Map,c=r.slice(0,up),y=c.map(oe=>Lp(oe,b.get(String(oe.Id||"")),o.baseUrl??fs())),w=new Set(y.map(oe=>oe.id)),L=_p(c,w),I=r.length>y.length,D=l,q=o.deltaApplied===!0,$=o.boardId||ys(),O=o.updatedAt||new Date().toISOString(),G=Number(o.lastCursorX),V=Number(o.lastCursorY),re=Number.isFinite(G)&&Number.isFinite(V);return f.emit("localBridge.board.loaded",{boardId:$,nodes:y.length,originalNodes:r.length,truncated:I,snapshotFormat:o.snapshotFormat,partialImport:D,deltaImport:l,deltaApplied:q,deltaUpserts:m,deltaDeletes:p}),{id:`localBridge:${$}`,name:o.title||"LocalBridge Board",nodes:y,edges:L,settings:{...t,cameraBookmarks:gp(o.cameraBookmarks)},viewState:re?{cursorX:G,cursorY:V}:void 0,updatedAt:O,source:{kind:"localBridge",boardId:$,loadedAt:new Date().toISOString(),snapshotFormat:o.snapshotFormat,originalNodeCount:r.length,renderedNodeCount:y.length,truncated:I,partialImport:D,deltaImport:l,deltaApplied:q}}}const qr=["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(","),$p=/^[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 zp(e){if($p.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 Dl(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 Up(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 Mr(e,t=new Date().toISOString()){return e&&!Number.isNaN(Date.parse(e))?e:t}function Jr(e){return(e==null?void 0:e.trim().slice(0,90))||"Untitled Board"}function Bl(e){const t=Dl(e.content_json),o=Mr(e.updated_at??t.updatedAt);return{id:e.id,name:Jr(e.title??t.name),updatedAt:o,createdAt:Mr(e.created_at,o),nodeCount:Array.isArray(t.nodes)?t.nodes.length:0,edgeCount:Array.isArray(t.edges)?t.edges.length:0,sourceKind:"cloud"}}function Hp(e,t){var w,L;const o=Dl(e.content_json),r=Mr(e.updated_at??o.updatedAt),l=Number((w=o.viewState)==null?void 0:w.cursorX),m=Number((L=o.viewState)==null?void 0:L.cursorY),p=Number(e.last_cursor_x),b=Number(e.last_cursor_y),c=Number.isFinite(l)&&Number.isFinite(m),y=Number.isFinite(p)&&Number.isFinite(b);return{id:e.id,name:Jr(e.title??o.name),nodes:Array.isArray(o.nodes)?o.nodes:[],edges:Array.isArray(o.edges)?o.edges:[],settings:o.settings??t,viewState:c?{cursorX:l,cursorY:m}:y?{cursorX:p,cursorY:b}:void 0,updatedAt:r,source:{kind:"cloud",boardId:e.id,loadedAt:new Date().toISOString(),snapshotFormat:"supabase.boards.content_json",originalNodeCount:Array.isArray(o.nodes)?o.nodes.length:0,renderedNodeCount:Array.isArray(o.nodes)?o.nodes.length:0}}}async function Zr(e){var c;const t=jl(e);if(!t.cloudBoards.canAttempt)return f.emit("projectStorage.cloud.provider.skipped",{mode:t.cloudBoards.mode}),{userId:null,config:t,reason:t.cloudBoards.mode};const o=bs(e);if(!o)return f.emit("projectStorage.cloud.provider.skipped",{mode:"config-missing"}),{userId:null,config:t,reason:"missing-client"};const{data:r,error:l}=await o.auth.getSession();if(l||!r.session)return f.emit("projectStorage.cloud.provider.sessionMissing",{message:(l==null?void 0:l.message)??"missing-session"}),{userId:null,config:t,reason:"missing-session"};const{data:m,error:p}=await o.auth.getUser(),b=((c=m.user)==null?void 0:c.id)??null;return p||!b?(f.emit("projectStorage.cloud.provider.sessionMissing",{message:(p==null?void 0:p.message)??"missing-user"}),{userId:null,config:t,reason:"missing-user"}):{userId:b,config:t,reason:"provider-ready"}}async function Wp(e){const t=await Zr(e);if(!t.userId)return[];const o=bs(e);if(!o)return[];f.emit("projectStorage.cloud.list.requested");const{data:r,error:l}=await o.from("boards").select(qr).eq("user_id",t.userId).order("updated_at",{ascending:!1}).limit(50);if(l)throw f.emit("projectStorage.cloud.provider.failed",{operation:"list",message:l.message}),l;const m=(r??[]).map(Bl);return f.emit("projectStorage.cloud.list.loaded",{count:m.length}),m}async function Vp(e,t,o){const r=await Zr(e);if(!r.userId)return null;const l=bs(e);if(!l)return null;f.emit("projectStorage.cloud.load.requested",{boardId:t});const{data:m,error:p}=await l.from("boards").select(qr).eq("user_id",r.userId).eq("id",t).maybeSingle();if(p)throw f.emit("projectStorage.cloud.provider.failed",{operation:"load",boardId:t,message:p.message}),p;if(!m)return null;const b=Hp(m,o);return f.emit("projectStorage.cloud.load.loaded",{boardId:t,nodes:b.nodes.length,edges:b.edges.length}),b}async function Yp(e,t,o,r=null){var re,oe;const l=await Zr(e);if(!l.userId)return null;const m=bs(e);if(!m)return null;const p=zp(t.id),b=new Date().toISOString(),c=Jr(t.name),y=Number((r==null?void 0:r.x)??((re=t.viewState)==null?void 0:re.cursorX)??0),w=Number((r==null?void 0:r.y)??((oe=t.viewState)==null?void 0:oe.cursorY)??0),L={...t.viewState??{},cursorX:Number.isFinite(y)?y:0,cursorY:Number.isFinite(w)?w:0},I={...t,id:p,name:c,viewState:L,updatedAt:b},D={p_board_id:p,p_title:c,p_description:null,p_thumbnail_url:null,p_is_public:!1,p_created_at:null,p_updated_at:b,p_last_camera_x:o.x,p_last_camera_y:o.y,p_last_camera_z:o.scale,p_last_cursor_x:L.cursorX,p_last_cursor_y:L.cursorY,p_camera_bookmarks:JSON.stringify(t.settings.cameraBookmarks??{}),p_nodes:[],p_include_json_mirror:!0};f.emit("projectStorage.cloud.save.requested",{boardId:p,sourceBoardId:t.id,nodes:t.nodes.length,edges:t.edges.length});const{error:q}=await m.rpc("save_board_snapshot",D);if(q)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-rpc",boardId:p,message:q.message}),q;const $={content_json:Up(I),updated_at:b},{data:O,error:G}=await m.from("boards").update($).eq("id",p).eq("user_id",l.userId).select(qr).maybeSingle();if(G)throw f.emit("projectStorage.cloud.provider.failed",{operation:"save-json-mirror",boardId:p,message:G.message}),G;const V=O?Bl(O):{id:p,name:c,updatedAt:b,createdAt:b,nodeCount:t.nodes.length,edgeCount:t.edges.length,sourceKind:"cloud"};return f.emit("projectStorage.cloud.save.saved",{boardId:V.id,nodes:V.nodeCount,edges:V.edgeCount}),V}function Tr(e){return e.length===0?{minX:0,minY:0,maxX:0,maxY:0}:e.reduce((t,o)=>({minX:Math.min(t.minX,o.x),minY:Math.min(t.minY,o.y),maxX:Math.max(t.maxX,o.x+o.width),maxY:Math.max(t.maxY,o.y+o.height)}),{minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY,maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY})}function Xp(e,t={},o=Tr(e),r){if(e.length===0)return{after:new Map,boundsAfter:o};const l=cg(t.mode),m=ug(t.order),p=mg(t.anchor),b=pg(t.sizeMode),c=Math.max(0,t.gapX??24),y=Math.max(0,t.gapY??24),w=Math.max(1,t.maxColumns??12),L=Rr(t.quantile??.75,.05,.95),I=e.map(Gp),D=sg(I,m),q=D.map(be=>be.width),$=D.map(be=>be.height),O=Math.max(1,t.cellWidth??_d(q,L)),G=Math.max(1,t.cellHeight??_d($,L)),V=Math.max(1,t.targetWidth??O),re=Math.max(1,t.targetHeight??G),oe=og(p,o);if(l==="grid"){eg(D,b,V,re,O,G);const be=Pd(t.columns,w,o.maxX-o.minX,O,c);qp(D,oe.x,oe.y,be,O,G,c,y)}else if(l==="masonry"){tg(D,b==="preserve"?"uniformWidth":b,V);const Ue=Pd(t.columns,w,o.maxX-o.minX,V,c);Jp(D,oe.x,oe.y,Ue,V,c,y)}else l==="stripHorizontal"?(ag(D,b==="preserve"?"uniformHeight":b,re),Zp(D,oe.x,oe.y,c,re)):(ng(D,b==="preserve"?"uniformWidth":b,V),Qp(D,oe.x,oe.y,y,V));let Ae=new Map(D.map(be=>[be.id,Kp(be)]));return p==="selectionBoundsCenter"&&(Ae=ig(o,Ae)),t.snapToGrid&&(Ae=dg(Ae,Math.max(1,t.gridSize??8))),{after:Ae,boundsAfter:Tr(Array.from(Ae.values()))}}function Gp(e){return{...e,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function Kp(e){return{x:e.x,y:e.y,width:Math.max(1,e.width),height:Math.max(1,e.height)}}function qp(e,t,o,r,l,m,p,b){e.forEach((c,y)=>{const w=Math.floor(y/r),L=y%r,I=t+L*(l+p),D=o+w*(m+b);c.x=I+(l-c.width)/2,c.y=D+(m-c.height)/2})}function Jp(e,t,o,r,l,m,p){const b=Array.from({length:r},()=>0);for(const c of e){const y=lg(b),w=t+y*(l+m);c.x=w+(l-c.width)/2,c.y=o+b[y],b[y]+=c.height+p}}function Zp(e,t,o,r,l){let m=t;for(const p of e)p.x=m,p.y=o+(l-p.height)/2,m+=p.width+r}function Qp(e,t,o,r,l){let m=o;for(const p of e)p.x=t+(l-p.width)/2,p.y=m,m+=p.height+r}function eg(e,t,o,r,l,m){if(t==="fitCellDownOnly")for(const p of e){const b=Math.min(1,l/p.width,m/p.height);p.width*=b,p.height*=b}else t==="uniformWidth"?Qr(e,o):t==="uniformHeight"&&Ol(e,r)}function tg(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const l=Math.min(1,o/r.width);r.width*=l,r.height*=l}return}Qr(e,o)}function ag(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const l=Math.min(1,o/r.height);r.width*=l,r.height*=l}return}Ol(e,o)}function ng(e,t,o){if(t==="fitCellDownOnly"){for(const r of e){const l=Math.min(1,o/r.width);r.width*=l,r.height*=l}return}Qr(e,o)}function Qr(e,t){for(const o of e){if(o.width<=0)continue;const r=t/o.width;o.width=t,o.height=Math.max(1,o.height*r)}}function Ol(e,t){for(const o of e){if(o.height<=0)continue;const r=t/o.height;o.height=t,o.width=Math.max(1,o.width*r)}}function Pd(e,t,o,r,l){if(typeof e=="number"&&e>0)return Math.round(Rr(e,1,t));if(o<=1||r<=1)return 1;const m=Math.floor((o+l)/(r+l));return!Number.isFinite(m)||m<1?1:Math.round(Rr(m,1,t))}function og(e,t,o){return{x:t.minX,y:t.minY}}function sg(e,t){return t==="selectionOrder"?[...e].sort((o,r)=>o.selectionIndex-r.selectionIndex):rg(e)}function rg(e){const t=[...e].sort((c,y)=>c.y-y.y||c.x-y.x);if(t.length<=2)return t;const o=t.map(c=>c.height).sort((c,y)=>c-y),r=o[Math.floor(o.length/2)]??1,l=Math.max(16,r*.35),m=[];let p=[],b=Number.NaN;for(const c of t)p.length===0?(p=[c],b=c.y):Math.abs(c.y-b)<=l?(p.push(c),b=(b*(p.length-1)+c.y)/p.length):(m.push([...p].sort((y,w)=>y.x-w.x)),p=[c],b=c.y);return p.length>0&&m.push([...p].sort((c,y)=>c.x-y.x)),m.flat()}function ig(e,t){if(t.size===0)return t;const o=Tr(Array.from(t.values())),r=e.minX+(e.maxX-e.minX)/2,l=e.minY+(e.maxY-e.minY)/2,m=o.minX+(o.maxX-o.minX)/2,p=o.minY+(o.maxY-o.minY)/2,b=r-m,c=l-p;return new Map(Array.from(t.entries()).map(([y,w])=>[y,{...w,x:w.x+b,y:w.y+c}]))}function dg(e,t){return new Map(Array.from(e.entries()).map(([o,r])=>[o,{...r,x:Dd(r.x,t),y:Dd(r.y,t)}]))}function _d(e,t){if(e.length===0)return 1;const o=[...e].sort((b,c)=>b-c),r=(o.length-1)*t,l=Math.floor(r),m=Math.min(o.length-1,l+1),p=r-l;return o[l]*(1-p)+o[m]*p}function lg(e){let t=0;for(let o=1;o<e.length;o+=1)e[o]<e[t]&&(t=o);return t}function Dd(e,t){return Math.round(e/t)*t}function cg(e){const t=xs(e);return t==="grid"?"grid":t==="striphorizontal"||t==="striph"?"stripHorizontal":t==="stripvertical"||t==="stripv"?"stripVertical":"masonry"}function ug(e){return xs(e)==="selectionorder"?"selectionOrder":"spatialReading"}function mg(e){const t=xs(e);return t==="selectionboundscenter"?"selectionBoundsCenter":t==="viewporttopleft"?"viewportTopLeft":"selectionBoundsTopLeft"}function pg(e){const t=xs(e);return t==="fitcelldownonly"?"fitCellDownOnly":t==="uniformwidth"?"uniformWidth":t==="uniformheight"?"uniformHeight":"preserve"}function xs(e){return String(e??"").trim().toLowerCase().replace(/[^a-z0-9]/g,"")}function Rr(e,t,o){return Math.min(o,Math.max(t,e))}const Fl=300,$l=50*1024*1024,gg=800;function ke(e){return typeof e=="string"?e.length*2:0}function hg(e){let t=256;if(t+=ke(e.id),t+=ke(e.kind),t+=ke(e.title),t+=ke(e.body),t+=ke(e.result),t+=ke(e.imageUrl),t+=ke(e.assetUrl),t+=ke(e.sourceFilePath),t+=(e.tags??[]).reduce((o,r)=>o+ke(r),0),e.metadata)for(const[o,r]of Object.entries(e.metadata))t+=ke(o)+ke(r);return e.imageStack&&(t+=128+ke(e.imageStack.title),t+=e.imageStack.variants.reduce((o,r)=>o+96+ke(r.variantId)+ke(r.imageUrl)+ke(r.assetId)+ke(r.title)+ke(r.caption),0)),t}function fg(e){let t=1024+ke(e.id)+ke(e.name)+ke(e.updatedAt);return t+=e.nodes.reduce((o,r)=>o+hg(r),0),t+=e.edges.length*128,t+=Object.entries(e.settings).reduce((o,[r,l])=>o+ke(r)+ke(typeof l=="string"?l:JSON.stringify(l)),0),t}function zl(e,t={}){var o,r;return{board:e,description:((o=t.description)==null?void 0:o.trim())||"Board change",mergeKey:((r=t.mergeKey)==null?void 0:r.trim())||null,timestampMs:t.timestampMs??Date.now(),estimatedBytes:fg(e)}}function Bd(e,t={}){const o=t.maxEntries??Fl,r=t.maxBytes??$l;let l=e.slice(Math.max(0,e.length-o)),m=l.reduce((p,b)=>p+b.estimatedBytes,0);for(;l.length>1&&m>r;){const[p,...b]=l;m-=(p==null?void 0:p.estimatedBytes)??0,l=b}return l}function Aa(e,t,o={}){const r=zl(t,o),l=o.mergeWindowMs??gg,m=e.slice(),p=m.at(-1);return p&&r.mergeKey&&p.mergeKey===r.mergeKey&&r.timestampMs-p.timestampMs<l?(m[m.length-1]={...p,description:r.description,timestampMs:r.timestampMs,estimatedBytes:Math.max(p.estimatedBytes,r.estimatedBytes)},Bd(m,o)):(m.push(r),Bd(m,o))}function bg(e,t,o={}){const r=zl(t,o),l=o.maxEntries??Fl,m=o.maxBytes??$l;let p=[r,...e].slice(0,l),b=p.reduce((c,y)=>c+y.estimatedBytes,0);for(;p.length>1&&b>m;){const c=p.at(-1);b-=(c==null?void 0:c.estimatedBytes)??0,p=p.slice(0,-1)}return p}function Cs(e,...t){const o=e==null?void 0:e.metadata;if(!o)return"";for(const r of t){const l=o[r];if(typeof l=="string"&&l.trim())return l.trim()}return""}function eo(e,t){return!!Cs(e,t)}function Ul(e){if(!e||!e.trim())return!1;const t=e.trim();return/^(https?:|blob:|data:|file:)/i.test(t)}function Hl(e){if(!e)return"";const t=Cs(e,"OriginalPath");if(t)return t;const o=String(e.body||"").trim();return Ul(o)?"":o}function Wl(e){return e?Hl(e)||String(e.sourceFilePath||"").trim()||String(e.assetUrl||"").trim()||String(e.imageUrl||"").trim()||String(e.body||"").trim():""}function Vl(e){return Cs(e,"ThumbnailUrl","thumbnailUrl")}function yg(e){if(!e||e.kind!=="image")return!1;if(eo(e,"ImageGenerationProvider")||eo(e,"GeneratedImageSourceWidth")||eo(e,"GeneratedImageSourceHeight")||eo(e,"CodexImageQuality")||eo(e,"ImageRouterRevisedPrompt"))return!0;const t=Cs(e,"RequestedMediaOperation");return["text2image","image2image","inpaint"].includes(t.toLowerCase())}function ei(e){if(!e)return"";if(e.kind==="image"||e.kind==="mask"){const t=yg(e)?Hl(e):"",o=Vl(e),r=String(e.body||"").trim();return t||o||String(e.imageUrl||"").trim()||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()||(Ul(r)?r:"")}return Wl(e)||String(e.assetUrl||"").trim()||String(e.sourceFilePath||"").trim()}function Yl(e){if(!e)return"";const t=Wl(e)||e.title||e.kind;return String(t||"").replace(/\\/g,"/").replace(/\/+$/,"").split("/").filter(Boolean).pop()||e.title||e.kind}const xg=2048,Cg=16e3,er=1024,tr=64,Sg=2048,ar=3,kg=16,wg=256,vg=new Set(["text","note","memo","markdown","code","directory"]),jg=/[\p{L}\p{M}\p{N}]{2,}/gu,Od=4,Ig=8,Fd=1.35;function Ng(e){return vg.has(String(e||"").trim().toLowerCase())}function Ag(e){const t=e.map(Tg),o=new Map,r=new Map,l=new Map,m=new Map;for(const p of t){o.set(p.id,p);for(const b of p.tokens)nr(r,b,p.id);for(const b of p.prefixes)nr(l,b,p.id);for(const b of p.ngrams)nr(m,b,p.id)}return{documents:t,documentById:o,tokenIndex:r,prefixIndex:l,ngramIndex:m}}function Mg(e,t,o={}){const r=Math.max(1,Math.trunc(Number(o.limit||30))),l=sn(t),m=$d(e,0,0,o.viewport,0);if(!l)return{hits:[],profile:m};const p=Array.from(Xl(l)),b=Array.from(Gl(p)),c=ql(l),y=Array.from(Kl(c)),w=new Map;for(const $ of p)or(e.tokenIndex,$,w,8);for(const $ of b)or(e.prefixIndex,$,w,$.length<=3?4:2);for(const $ of y)or(e.ngramIndex,$,w,1.15);const L=Pg(e,w,r),I=_g(o.allowedContentTypes),D=[];for(const $ of L){const O=e.documentById.get($);if(!O||I&&!I.has(O.contentType))continue;const G=Lg(O,l,p,y);if(G<=0)continue;const V=Eg(O,o.viewport??null);D.push({nodeId:O.id,score:G+V,textScore:G,viewportBoost:V})}D.sort(($,O)=>O.score-$.score||$.nodeId.localeCompare(O.nodeId));const q=D.slice(0,r);return{hits:q,profile:$d(e,L.length,q.length,o.viewport,q.filter($=>$.viewportBoost>0).length)}}function sn(e){const t=String(e??"");if(!t.trim())return"";let o=t;try{o=t.normalize("NFKC")}catch{o=t}o=o.toLowerCase();let r="",l=!1;for(const m of o){if(/\s/u.test(m)){l||(r+=" ",l=!0);continue}Dg(m)||(r+=m,l=!1)}return r.trim()}function Xl(e){return new Set(e.match(jg)??[])}function Gl(e){const t=new Set;for(const o of e){if(!o.trim())continue;const r=Math.min(8,o.length);for(let l=2;l<=r;l+=1)t.add(o.slice(0,l))}return t}function Kl(e){const t=new Set;if(!e.trim())return t;if(e.length<=ar)return t.add(e),t;for(let o=0;o<=e.length-ar;o+=1)t.add(e.slice(o,o+ar));return t}function Tg(e){const t=String(e.kind??"").trim().toLowerCase(),o=Ta(e.prompt??e.title,xg),r=Ng(t)?Ta(e.response??e.body,Cg):"",l=Rg(e.metadata,e.tags,e.metadataText),m=Ta(e.sourceFilePath||e.assetUrl,Sg),p=sn(o),b=sn(r),c=sn(l),y=sn(m),w=sn(t),L=[p,c,y,b,w].filter(Boolean).join(" "),I=Xl(L);return{id:String(e.id),contentType:t,normalizedPrompt:p,normalizedResponse:b,normalizedMetadata:c,normalizedSourcePath:y,normalizedContentType:w,tokens:I,prefixes:Gl(I),ngrams:Kl(ql(L)),x:Number.isFinite(e.x)?e.x:0,y:Number.isFinite(e.y)?e.y:0,width:Number.isFinite(e.width)?e.width:1,height:Number.isFinite(e.height)?e.height:1}}function Rg(e,t,o){const r=[];let l=0;if(e)for(const[m,p]of Object.entries(e)){if(l>=tr)break;!String(m??"").trim()&&!String(p??"").trim()||(r.push(Ta(m,128)),String(p??"").trim()&&r.push(Ta(p,er)),l+=1)}return l<tr&&(t!=null&&t.length)&&(r.push("tags",Ta(t.join(" "),er)),l+=1),l<tr&&(o!=null&&o.trim())&&r.push("metadata",Ta(o,er)),r.join(" ")}function Lg(e,t,o,r){let l=0;e.normalizedPrompt===t?l+=120:to(e.normalizedPrompt,t)&&(l+=54),to(e.normalizedMetadata,t)&&(l+=26),to(e.normalizedSourcePath,t)&&(l+=18),to(e.normalizedResponse,t)&&(l+=14),to(e.normalizedContentType,t)&&(l+=8);for(const m of o)e.tokens.has(m)&&(l+=7),e.normalizedPrompt.startsWith(m)&&(l+=10);for(const m of r)e.ngrams.has(m)&&(l+=.85);return l}function Eg(e,t){if(!t)return 0;const o=e.x+Math.max(1,e.width)/2,r=e.y+Math.max(1,e.height)/2,l=Math.abs(o-t.centerX)/Math.max(1,t.halfWidth),m=Math.abs(r-t.centerY)/Math.max(1,t.halfHeight),p=Math.sqrt(l*l+m*m);if(p<=1)return Od+(1-p)*Ig;if(p<=Fd){const b=1-(p-1)/Math.max(.001,Fd-1);return Math.max(0,b)*(Od*.75)}return 0}function Pg(e,t,o){return t.size===0?e.documents.map(r=>r.id):Array.from(t.entries()).sort((r,l)=>l[1]-r[1]||r[0].localeCompare(l[0])).slice(0,Math.max(o*kg,wg)).map(([r])=>r)}function _g(e){if(!e)return null;const t=new Set(Array.from(e,o=>String(o||"").trim().toLowerCase()).filter(Boolean));return t.size>0?t:null}function $d(e,t,o,r,l){return{documentCount:e.documents.length,candidateCount:t,rankedCount:o,viewportBoosted:!!r,boostedCount:l,indexedTokenCount:e.tokenIndex.size,indexedPrefixCount:e.prefixIndex.size,indexedNGramCount:e.ngramIndex.size}}function nr(e,t,o){const r=e.get(t);if(r){r.add(o);return}e.set(t,new Set([o]))}function or(e,t,o,r){const l=e.get(t);if(l)for(const m of l)o.set(m,(o.get(m)??0)+r)}function ql(e){let t="";for(const o of e)/\s/u.test(o)||(t+=o);return t}function Ta(e,t){const o=String(e??"");return o.length<=t?o:o.slice(0,t)}function to(e,t){return!!(e&&t&&e.includes(t))}function Dg(e){const t=e.codePointAt(0)??0;return t<=31||t>=127&&t<=159}const Bg=2147483647,Og="LocalBridge access is enabled, but the bridge is not reachable. Restart LocalBridge, allow Chrome local-network access, then reload MindCanvas.",Fg="Local storage is unavailable in the hosted app until browser local storage or LocalBridge access is available.",$g="Local storage is unavailable. Check the browser-local storage state or LocalBridge connection.",zg="Cloud projects are unavailable until Supabase and Cloudflare R2 are configured.",Ug="Login is required before cloud projects can be used.",Hg="Cloud projects are unavailable.";function Wg(e){return e.bridgeProviderConfigured||e.browserProviderConfigured||e.embeddedProviderConfigured}function Lr(e,t=!0){const o={isAvailable:!1,bridgeReachable:!1,browserLocalAvailable:!1,embeddedLocalAvailable:!1,providerKind:"none",canBrowseWorkspace:!1};return e.bridgeProviderConfigured&&e.bridgeReachable?{...o,isAvailable:!0,bridgeReachable:!0,providerKind:"bridge",canBrowseWorkspace:!0}:e.hostedWebApp&&e.hostedLocalBridgeAccessEnabled&&e.bridgeProviderConfigured?{...o,providerKind:"bridge"}:e.browserProviderConfigured&&(e.browserLocalAvailable||t&&e.browserLocalAvailableWhenEmpty===!0)?{...o,isAvailable:!0,browserLocalAvailable:!0,providerKind:"browser"}:e.embeddedProviderConfigured&&e.supportsEmbeddedLocal?{...o,isAvailable:!0,embeddedLocalAvailable:!0,providerKind:"embedded"}:o}function Vg(e){return Lr(e,!1).isAvailable?"local":ti(e)?"cloud":Lr(e,!0).isAvailable?"local":e.cloudConfigured?"cloud":"local"}function ti(e){return e.cloudConfigured&&e.cloudSessionAvailable}function Yg(e,t){return t.providerKind==="bridge"&&!t.bridgeReachable?Og:e.hostedWebApp?Fg:$g}function Xg(e){return e.cloudConfigured?ti(e)?Hg:Ug:zg}function Gg(e){var w,L,I;const t=ti(e),o=Lr(e,!0),r=Wg(e),l=e.cloudConfigured,m=o.isAvailable,p=t;let b=e.storedMode??Vg(e);b==="cloud"&&(!l||!p&&m)?b=m?"local":"cloud":b==="local"&&(!r&&l||!m&&p)&&(b="cloud");const c=e.cloudAccess,y=((w=c==null?void 0:c.denialReason)==null?void 0:w.trim())||void 0;return{currentMode:b,showLocalTab:r,showCloudTab:l,isLocalAvailable:o.isAvailable,isCloudAvailable:t,requiresCloudSignIn:e.cloudConfigured&&!t,canUseLocalProjects:m,canBrowseLocalWorkspace:o.canBrowseWorkspace,localProviderKind:o.providerKind,canUseCloudProjects:p,canSyncLocalToCloud:m&&p,cloudPlanKey:((L=c==null?void 0:c.planKey)==null?void 0:L.trim())||"free",cloudEntitlementStatus:((I=c==null?void 0:c.entitlementStatus)==null?void 0:I.trim())||(c?"active":"inactive"),currentCloudBoardCount:(c==null?void 0:c.currentBoardCount)??0,cloudBoardLimit:(c==null?void 0:c.cloudBoardLimit)??Bg,lockedCloudBoardCount:(c==null?void 0:c.lockedBoardCount)??0,canCreateCloudBoards:(c==null?void 0:c.canCreateBoard)??p,canUseManagedAi:(c==null?void 0:c.canUseManagedAi)??!1,canGenerateImage:(c==null?void 0:c.canGenerateImage)??!1,canUseContextPack:(c==null?void 0:c.canUseContextPack)??!1,cloudLimitMessage:y,localStatusMessage:o.isAvailable?void 0:Yg(e,o),cloudStatusMessage:p?void 0:Xg(e)}}function Kg(){const e=new Error("Queued operation was cancelled before it started.");return e.name="AbortError",e}class qg{constructor(){id(this,"tails",new Map)}isBusy(t){return this.tails.has(t)}enqueue(t,o,r){if(typeof o!="function")throw new TypeError("KeyedAsyncQueue operation is required.");const l=this.tails.get(t)??Promise.resolve();let m;return m=(async()=>{try{try{await l}catch{}if(r!=null&&r.aborted)throw Kg();return await o(r)}finally{this.tails.get(t)===m&&this.tails.delete(t)}})(),this.tails.set(t,m),m}clear(t){if(typeof t>"u"){this.tails.clear();return}this.tails.delete(t)}}const Er="mindexec-local-mode-warning-dismissed-v1";function Jg(){try{return window.localStorage.getItem(Er)==="true"}catch{return!1}}function Jl(e,t){var o,r;if(e==="checking")return"Checking bridge";if(e==="connected"){const l=(r=(o=t==null?void 0:t.exec)==null?void 0:o.model)==null?void 0:r.trim();return l?`Bridge / ${l}`:"Bridge connected"}return e==="blocked"?"Bridge gated":e==="unavailable"?"Bridge unavailable":"Bridge idle"}function Zg(e,t,o){var l,m,p,b,c;if(e!=="connected")return t||Jl(e,o);const r=[o!=null&&o.version?`version ${o.version}`:null,(l=o==null?void 0:o.exec)!=null&&l.model?`model ${o.exec.model}`:null,(m=o==null?void 0:o.exec)!=null&&m.reasoningEffort?`reasoning ${o.exec.reasoningEffort}`:null,(p=o==null?void 0:o.exec)!=null&&p.serviceTier?`tier ${o.exec.serviceTier}`:null,(b=o==null?void 0:o.exec)!=null&&b.preferredProviderKind?`codex ${o.exec.preferredProviderKind}`:null,(c=o==null?void 0:o.project)!=null&&c.isOpen?"project open":null].filter(Boolean);return r.length>0?`LocalBridge connected. ${r.join(" / ")}`:"LocalBridge connected."}function Qg({state:e,message:t,status:o,hostedBridgeAccessEnabled:r,onRefresh:l,onEnableHostedBridge:m}){const p=g.useMemo(()=>e==="checking"?n.jsx(Ut,{size:14,className:"spin-icon"}):e==="connected"?n.jsx(_m,{size:14}):e==="blocked"?n.jsx(Il,{size:14}):e==="unavailable"?n.jsx(Dm,{size:14}):n.jsx(Vr,{size:14}),[e]);return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--${e}`,title:Zg(e,t,o),"data-testid":"bridge-status-pill","data-bridge-state":e,"data-bridge-access":r?"enabled":"gated",children:[n.jsx("span",{className:"runtime-status-pill__icon","aria-hidden":"true",children:p}),n.jsx("span",{children:Jl(e,o)}),e==="blocked"&&!r&&n.jsx("button",{type:"button",className:"runtime-status-pill__action",onClick:m,children:"Enable"}),n.jsx("button",{type:"button",className:"runtime-status-pill__button",title:"Refresh LocalBridge","data-testid":"bridge-status-refresh",onClick:()=>void l(),disabled:e==="checking",children:n.jsx(ln,{size:13})})]})}function eh({status:e,message:t}){const r={ready:{icon:n.jsx(kr,{size:14}),label:"Saved locally",title:"Board state is saved in this browser."},syncing:{icon:n.jsx(Ut,{size:14,className:"spin-icon"}),label:"Saving",title:"Saving board state to this browser."},error:{icon:n.jsx(Yr,{size:14}),label:"Save error",title:"Board state could not be saved locally."},offline:{icon:n.jsx(Vr,{size:14}),label:"Offline",title:"No sync adapter is connected."}}[e];return n.jsxs("div",{className:`runtime-status-pill runtime-status-pill--sync-${e}`,title:t||r.title,"data-testid":"sync-status-indicator","data-sync-status":e,children:[n.jsx("span",{className:"runtime-status-pill__icon","aria-hidden":"true",children:r.icon}),n.jsx("span",{children:r.label})]})}function th({visible:e}){const[t,o]=g.useState(Jg);if(!e||t)return null;const r=()=>{o(!0);try{window.localStorage.setItem(Er,"true")}catch{}f.emit("runtimeStatus.localMode.dismissed")};return n.jsxs("section",{className:"runtime-local-warning",role:"status","data-testid":"local-mode-warning","data-local-mode-dismissed-key":Er,children:[n.jsx("div",{className:"runtime-local-warning__icon","aria-hidden":"true",children:n.jsx(Yr,{size:16})}),n.jsxs("div",{className:"runtime-local-warning__copy",children:[n.jsx("strong",{children:"Local Mode"}),n.jsx("span",{children:"Boards are saved in this browser. LocalBridge export creates a file-backed copy."})]}),n.jsx("button",{type:"button",title:"Dismiss local mode warning","data-testid":"local-mode-dismiss",onClick:r,children:n.jsx(yt,{size:14})})]})}function ah({bridgeState:e,bridgeMessage:t,bridgeStatus:o,syncStatus:r,syncMessage:l,hostedBridgeAccessEnabled:m,onRefreshBridge:p,onEnableHostedBridge:b,showLocalModeWarning:c=!0}){return n.jsxs("aside",{className:"runtime-status-cluster","aria-label":"Runtime status","data-testid":"runtime-status-cluster","data-local-mode-visible":c?"true":"false",children:[n.jsxs("div",{className:"runtime-status-row",children:[n.jsx(Qg,{state:e,message:t,status:o,hostedBridgeAccessEnabled:m,onRefresh:p,onEnableHostedBridge:b}),n.jsx(eh,{status:r,message:l})]}),n.jsx(th,{visible:c})]})}const nh=/^data:image\//i;function oh(e){const t=String(e||"").trim();if(!t)return{src:null,reason:"empty",urlKind:"empty"};const o=t.toLowerCase();return nh.test(t)?{src:t,reason:null,urlKind:"data"}:o.startsWith("blob:")?{src:t,reason:null,urlKind:"blob"}:o.startsWith("https://")?{src:t,reason:null,urlKind:"https"}:o.startsWith("http://")?{src:t,reason:null,urlKind:"http"}:t.startsWith("//")?{src:t,reason:null,urlKind:"protocol-relative"}:t.startsWith("/")||t.startsWith("./")||t.startsWith("../")?{src:t,reason:null,urlKind:"relative"}:/^[a-z][a-z0-9+.-]*:/i.test(t)?{src:null,reason:"unsupported-protocol",urlKind:t.split(":",1)[0].toLowerCase()}:{src:t,reason:null,urlKind:"relative"}}function sr({src:e,alt:t="",className:o="",testId:r="secure-image",traceId:l,kind:m="image",title:p}){const b=g.useMemo(()=>oh(e),[e]),[c,y]=g.useState(b.src?"loading":"blocked");g.useEffect(()=>{const D=b.src?"loading":"blocked";y(D),b.src||f.emit("secureImage.blocked",{id:l,kind:m,reason:b.reason,urlKind:b.urlKind})},[m,b.reason,b.src,b.urlKind,l]);const w=()=>{y("loaded"),f.emit("secureImage.loaded",{id:l,kind:m,urlKind:b.urlKind})},L=()=>{y("error"),f.emit("secureImage.error",{id:l,kind:m,urlKind:b.urlKind})},I=c==="blocked"?`Image blocked: ${b.reason||"unsupported source"}`:"Image failed to load";return n.jsxs("div",{className:`secure-image secure-image--${c} ${o}`.trim(),"data-testid":r,"data-secure-image-state":c,"data-secure-image-kind":m,title:c==="loaded"?p:I,children:[b.src&&n.jsx("img",{src:b.src,alt:t,loading:"lazy",decoding:"async",draggable:!1,onLoad:w,onError:L}),c==="loading"&&n.jsx("span",{className:"secure-image__loading","aria-hidden":"true",children:n.jsx("span",{})}),(c==="blocked"||c==="error")&&n.jsx("span",{className:"secure-image__fallback",role:"img","aria-label":I,children:c==="blocked"?n.jsx(Bm,{size:18}):n.jsx(Yr,{size:18})})]})}const sh={note:ls,text:xt,"ai-task":cn,image:mn,mask:mn,video:pn,embed:gn,code:un,markdown:xt,"csv-table":xt,memo:ls,pdf:xt,file:wr,directory:Om,"template-launcher":xt,"remote-monitor":ds,"remote-control":ds},rr=[{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."}],zd=500,rh=48,ih=new Set(["mindcanvasagent","agentcommand"]),dh=new Set(["codenote","code-note"]),lh=["multidesktopmonitor","remotehubmonitor","remotefleetmonitor","smartviewmonitor"],ch=["remotedevice","remotefleetdevice","remotecontrol"];function uh(e){const t=hn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=hn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=hn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-monitor"||t==="remotefleetmonitor"||o==="fleet-monitor"||r==="remote-fleet@1"||Ql(e,["RemoteFleetViewMode","RemoteFleetHubStatus","RemoteFleetDevicesJson","RemoteFleetDeviceCount","RemoteFleetConnectedDeviceCount","RemoteFleetProjectionMode","RemoteFleetCanvasPagination","RemoteHub","RemoteRoute","RemotePage","RemoteVisibleBudget"])||Zl(e,lh,["remote","monitor"])}function mh(e){const t=hn(e,"SemanticType","semanticType","RemoteFleetSemanticType").trim().toLowerCase(),o=hn(e,"RemoteFleetNodeRole","remoteFleetNodeRole").trim().toLowerCase(),r=hn(e,"RemoteFleetSchemaVersion","remoteFleetSchemaVersion").trim().toLowerCase();return e.kind==="remote-control"||t==="remotefleetdevice"||o==="fleet-device"||r==="remote-fleet-device@1"||Ql(e,["RemoteFleetDeviceId","RemoteFleetDeviceName","RemoteFleetDevicePlatform","RemoteFleetDeviceConnected","RemoteFleetDeviceCanControl","RemoteFleetSourceMonitorNodeId"])||Zl(e,ch,["remote","control"])}function Zl(e,t,o){const r=(e.tags??[]).map(b=>b.trim().toLowerCase()).filter(Boolean),l=o.every(b=>r.includes(b)),p=[e.title,e.body,e.sourceFilePath,e.assetUrl,...r].join(" ").toLowerCase().replace(/[^a-z0-9]+/g,"");return l||t.some(b=>p.includes(b))}function hn(e,...t){const o=e.metadata??{};for(const l of t){const m=o[l];if(m!=null)return String(m)}const r=new Set(t.map(l=>l.toLowerCase()));for(const[l,m]of Object.entries(o))if(r.has(l.toLowerCase())&&m!==void 0&&m!==null)return String(m);return""}function Ql(e,t){const o=e.metadata??{},r=new Set(t.map(l=>l.toLowerCase()));return Object.entries(o).some(([l,m])=>r.has(l.toLowerCase())&&m!==void 0&&m!==null&&String(m).trim()!=="")}const Pr=[{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"}],ph=g.memo(function({node:t,selected:o,pulsing:r,connectionDraft:l,onSelect:m,onDragStart:p,onResizeStart:b,onPatch:c,onDelete:y,onDuplicate:w,onRun:L,onPin:I,onOpenResult:D,onToggleAiReference:q,onCopyNode:$,onCopyEmbedReference:O,onFitNodeHeight:G,onToggleNodeExpanded:V,onToggleWordWrap:re,onStageCompany:oe,onOpenCompanyGraph:Ae,onSyncCompanyGoal:be,onRefreshCompany:Ue,onSetCompanyStatus:et,onRemoveCompany:tt,onOpenAsset:he,onOpenDirectorySettings:J,onScanDirectory:ie,onCreateRemoteControl:se,onGenerateTemplateCard:St}){var Mn,wo,rt,Bt,ya,Ha,Qt,Wa,te,Ye,Va,Tn,v,Y,ae,Xe,Rn,Ot,Ya,Xa,Ln,En,Ga,Pn,xa,_n,Ka,Ca,ea,De,Pe,qa,Dn,vo,Sa;const F=String(((Mn=t.metadata)==null?void 0:Mn.AutomationNodeKind)||((wo=t.metadata)==null?void 0:wo.AutomationTemplateKey)||((rt=t.metadata)==null?void 0:rt.AutomationInferredKind)||"").trim().toLowerCase(),lt=String(((Bt=t.metadata)==null?void 0:Bt.SemanticType)||((ya=t.metadata)==null?void 0:ya.semanticType)||"").trim().toLowerCase(),Me=t.kind==="memo"&&ih.has(lt),le=t.kind==="memo"&&dh.has(lt),Tt=String(((Ha=t.metadata)==null?void 0:Ha.AgentCommandStatus)||"Draft"),me=String(((Qt=t.metadata)==null?void 0:Qt.AgentCommandMode)||"Task"),He=String(((Wa=t.metadata)==null?void 0:Wa.AgentCommandRequestedRole)||"Researcher"),ee=String(((te=t.metadata)==null?void 0:te.CodeNoteStatus)||"Draft"),ct=String(((Ye=t.metadata)==null?void 0:Ye.CodeNoteSyncState)||"Unlinked"),Wt=String(((Va=t.metadata)==null?void 0:Va.CodeNoteKind)||"Feature"),Ea=Me?cn:le?un:F==="image-generate"?mn:F==="video-generate"?pn:sh[t.kind],xn=l&&l.from!==t.id,ho=t.kind==="ai-task",Re=t.kind==="pdf"||t.kind==="file"||t.kind==="directory",Pa=uh(t),Vt=mh(t),Oe=Pa||Vt,Te=Pa?"monitor":Vt?"control":"",ce=t.kind==="template-launcher"||String(((Tn=t.metadata)==null?void 0:Tn.semanticType)||((v=t.metadata)==null?void 0:v.SemanticType)||"").toLowerCase()==="templatelauncher",kt=t.kind==="video",we=t.kind==="embed",wt=t.kind==="mask",ye=t.kind==="memo",at=t.kind==="markdown",nt=t.kind==="csv-table",Fe=ye?kh(t):null,pe=g.useRef(null),Cn=kt?ec(t):"",qe=kt?vh(t):"",$e=we?jh(t):"",vt=we?Ih(t):"",fo=we?Nh(t,$e):"",_e=we?Ah(t):"",Le=(((Y=t.imageStack)==null?void 0:Y.variants)??[]).filter(x=>!!x.imageUrl),ut=Le.find(x=>{var P;return x.variantId===((P=t.imageStack)==null?void 0:P.activeVariantId)})??Le[0]??null,Rt=t.kind==="image"||wt?(ut==null?void 0:ut.imageUrl)||ei(t):"",la=ut?Le.findIndex(x=>x.variantId===ut.variantId):-1,_a=!Rt&&!Re&&!Oe&&!ce&&!kt&&!we,bo=_a&&!ye,Yt=t.isExpanded===!1&&Number(t.originalHeight??0)>t.height+1,Sn=!Oe&&!["image","mask","video","embed","pdf","file","directory","template-launcher","remote-monitor","remote-control"].includes(t.kind),ot=t.aiEnabled!==!1,We=wh(t),Je=!!(t.isChunkedText||((ae=t.metadata)==null?void 0:ae.IsChunkedText)==="true"),ca=Number(t.totalLineCount??((Xe=t.metadata)==null?void 0:Xe.TotalLineCount)??0),yo=t.sourceFilePath||((Rn=t.metadata)==null?void 0:Rn.FileName)||t.title,xe=Je?n.jsxs("div",{className:"node-chunked-text-state","data-testid":"node-chunked-text-state",title:yo,children:[n.jsx(xt,{size:12}),n.jsx("strong",{children:"Chunked text"}),Number.isFinite(ca)&&ca>0&&n.jsxs("span",{children:[ca.toLocaleString()," lines"]})]}):null,Xt=t.kind==="directory"?(Ot=t.metadata)==null?void 0:Ot.Include:null,Da=t.kind==="directory"?(Ya=t.metadata)==null?void 0:Ya.Exclude:null,kn=t.kind==="directory"?(Xa=t.metadata)==null?void 0:Xa.DirectoryFileCount:null,Ee=t.kind==="directory"?(Ln=t.metadata)==null?void 0:Ln.DirectoryDirCount:null,jt=t.kind==="directory"?(En=t.metadata)==null?void 0:En.DirectoryLastScanUtc:null,[Ba,Oa]=g.useState(!1),[Fa,Ve]=g.useState(null),[Ss,wn]=g.useState(((Ga=t.metadata)==null?void 0:Ga.CompanyExecutionMode)||"Auto"),[ua,$a]=g.useState(((Pn=t.metadata)==null?void 0:Pn.CompanySubAgents)!=="false"),[Gt,ma]=g.useState(!1),[It,za]=g.useState(null),pa=g.useMemo(()=>nt?bh(t.body,It):null,[It,nt,t.body]),de=g.useMemo(()=>ce?kl(t.body):null,[ce,t.body]),mt=(de==null?void 0:de.options.find(x=>x.id===de.selectedOptionId))??(de==null?void 0:de.options[0])??null,Kt=om(de),Lt=rr.find(x=>x.key===Ss)||rr[0],Et=String(((xa=t.metadata)==null?void 0:xa.CompanyStatus)||(t.companyMode?"Staged":"")).trim(),Pt=Et.toLowerCase(),qt=Pt==="paused",pt=Pt==="archived",ks=x=>{x.stopPropagation();const P=x.currentTarget.getBoundingClientRect();Ve(hh(P)),Oa(ne=>!ne)},ws=x=>{x.stopPropagation(),oe(t.id,{executionMode:Lt.key,enableSubAgents:ua}),Oa(!1)},xo=x=>{x.stopPropagation(),Ae(t.id)},ga=(x,P)=>{P.stopPropagation();const ne=Le.find(ht=>ht.variantId===x);!ne||!t.imageStack||ne.variantId===t.imageStack.activeVariantId||(f.emit("node.imageStack.variant",{nodeId:t.id,variantId:ne.variantId,variantCount:Le.length}),c(t.id,{imageUrl:ne.imageUrl,imageStack:{...t.imageStack,activeVariantId:ne.variantId,variants:Le,updatedAtUtc:new Date().toISOString()},metadata:{...t.metadata??{},ImageStackActiveVariantId:ne.variantId}}))},vs=(x,P)=>{if(P.stopPropagation(),!!ye){if((Fe==null?void 0:Fe.key)===x){ma(!1);return}f.emit("node.memoColor.changed",{id:t.id,colorKey:x}),c(t.id,{metadata:{...t.metadata??{},memoColor:x,memoColorIsCustom:"true"}}),ma(!1)}},vn=x=>{var Be,jo;if(x.stopPropagation(),!Me)return;const P=(t.body||t.title||"Agent command objective").trim(),ne=["Clarify the objective and constraints.","Collect linked canvas context or code notes.","Draft an execution plan before external adapter use."],ht=["canvas-context","agent-command-planning","adapter-gated-execution"],ze=["Canvas.ListAgentCommands","Canvas.UpdateAgentCommand","Canvas.PlanAgentCommand","Canvas.SetAgentCommandState"],Nt=["MindCanvasAgent",me,He],z=["Local React plan staged for this Agent Command.",`Role: ${He}`,`Mode: ${me}`,`Objective: ${P.slice(0,220)}`,"External execution remains adapter-gated until LocalBridge/agent runtime is available."].join(`
2
2
  `);f.emit("mindcanvas.agentCommand.planned",{id:t.id,mode:me,requestedRole:He,adapterState:((Be=t.metadata)==null?void 0:Be.AdapterState)??"adapter-gated"}),c(t.id,{tags:["Agent Command",He,"Planned"],metadata:{...t.metadata??{},AgentCommandStatus:"Planned",AgentCommandPlannerSummary:z,AgentCommandPlanSteps:JSON.stringify(ne),AgentCommandPlannedSkills:JSON.stringify(ht),AgentCommandPlannedTools:JSON.stringify(ze),AgentCommandPlannedConcepts:JSON.stringify(Nt),AgentCommandLastExplorationPhase:"planned-local",AdapterState:((jo=t.metadata)==null?void 0:jo.AdapterState)??"adapter-gated"}})},ha=x=>{var ze,Nt;if(x.stopPropagation(),!Me)return;const P=new Date().toISOString(),ne=[`Agent Command: ${t.title||"Agent"}`,`Status: Completed locally at ${P}`,"","This React MindCanvas node preserves the original Agent Command workflow shape.","No external agent runtime was invoked; execution remains adapter-gated.","","Next action:","Connect LocalBridge/agent runtime or move this command into CodeMaster for a deeper implementation run."].join(`
3
3
  `),ht=[`${P} Local React execution staged.`,`${P} Adapter gated; no external tools invoked.`];f.emit("mindcanvas.agentCommand.executed.local",{id:t.id,mode:me,requestedRole:He,adapterState:((ze=t.metadata)==null?void 0:ze.AdapterState)??"adapter-gated"}),c(t.id,{status:"done",result:ne,tags:["Agent Command",He,"Completed"],metadata:{...t.metadata??{},AgentCommandStatus:"Completed",AgentCommandLastExecutedAtUtc:P,AgentCommandConsoleLogs:JSON.stringify(ht),AgentCommandResultLinks:JSON.stringify([]),AdapterState:((Nt=t.metadata)==null?void 0:Nt.AdapterState)??"adapter-gated"}})},fa=(x,P,ne,ht)=>{var Nt,z,Be;if(x.stopPropagation(),!le)return;const ze=P==="Implemented"?JSON.stringify([`local-code-note://${t.id}/implementation-handoff.md`]):((Nt=t.metadata)==null?void 0:Nt.CodeNoteOutputArtifacts)||"[]";f.emit("mindcanvas.codeNote.state",{id:t.id,status:P,syncState:ne,reason:ht,adapterState:((z=t.metadata)==null?void 0:z.AdapterState)??"local-canvas-only"}),c(t.id,{tags:["Code Note",P,ne],metadata:{...t.metadata??{},CodeNoteStatus:P,CodeNoteSyncState:ne,CodeNoteOutputArtifacts:ze,...P==="Implemented"||P==="Reviewed"?{CodeNoteLastAppliedAtUtc:new Date().toISOString()}:{},AdapterState:((Be=t.metadata)==null?void 0:Be.AdapterState)??"local-canvas-only"}})},_t=()=>{$a(x=>!x)},Co=async x=>{if(x.stopPropagation(),!qe||!pe.current){f.emit("node.video.unavailable",{id:t.id,reason:qe?"element-missing":"source-missing"});return}try{await pe.current.play(),f.emit("node.video.play",{id:t.id,sourceKind:Hd(qe)})}catch(P){f.emit("node.video.unavailable",{id:t.id,reason:P instanceof Error?P.message:String(P)})}},ba=x=>{if(x.stopPropagation(),!qe||!pe.current){f.emit("node.video.unavailable",{id:t.id,reason:qe?"element-missing":"source-missing"});return}pe.current.pause(),f.emit("node.video.pause",{id:t.id,sourceKind:Hd(qe)})},Jt=x=>{x.stopPropagation(),$e&&O(t.id,$e)},jn=x=>{c(t.id,{body:JSON.stringify(x),metadata:{...t.metadata??{},templateLauncherSelectedOptionId:x.selectedOptionId??""}})},st=(x,P)=>{if(P.stopPropagation(),!de)return;const ne=im(de,x);jn(ne),f.emit("templateCard.option.select",{nodeId:t.id,optionId:ne.selectedOptionId??null})},In=(x,P)=>{if(!de)return;const ne=dm(de,x,P);jn(ne),f.emit("templateCard.input.patch",{nodeId:t.id,key:x})},Dt=x=>{x.stopPropagation(),!(!de||Kt)&&St(t.id,de.selectedOptionId??null,de.inputValues)},Zt=Sn&&Ba?n.jsxs("div",{className:"node-company-launcher","data-testid":"node-company-launcher",style:Fa?{left:Fa.left,top:Fa.top}:void 0,onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("div",{className:"node-company-launcher__eyebrow",children:"Run As Company"}),n.jsx("h4",{children:"Turn this note into a background AI company"}),n.jsx("p",{children:"Pick the operating mode to stage on this node. External CompanyCore execution stays adapter-gated."}),n.jsx("div",{className:"node-company-mode-list",children:rr.map(x=>n.jsxs("button",{type:"button",className:x.key===Lt.key?"is-selected":"","data-company-mode":x.key,onClick:()=>wn(x.key),children:[n.jsx("strong",{children:x.label}),n.jsx("span",{children:x.description})]},x.key))}),n.jsxs("button",{type:"button",className:"node-company-subagents","aria-pressed":ua,onClick:x=>{x.stopPropagation(),_t()},children:[n.jsx("span",{className:"node-company-toggle-indicator","aria-hidden":"true",children:ua?"On":"Off"}),n.jsxs("span",{children:[n.jsx(Nl,{size:13}),"Enable sub-agents for exploration waves and specialist handoff"]})]}),n.jsxs("div",{className:"node-company-launcher__actions",children:[n.jsx("button",{type:"button",className:"btn btn-ghost",onClick:()=>Oa(!1),children:"Cancel"}),n.jsx("button",{type:"button",className:"btn btn-primary","data-testid":"node-company-run-confirm",onClick:ws,children:"Stage Company"})]})]}):null,Nn={width:t.width,height:t.height,transform:`translate3d(${t.x}px, ${t.y}px, 0)`,...Fe?{"--memo-bg":Fe.surface,"--memo-border":Fe.border,"--memo-ink":Fe.ink,"--memo-ring":Fe.ring,"--memo-accent":Fe.swatch}:{}},gt=n.jsxs(n.Fragment,{children:[bo&&n.jsx("button",{type:"button",title:ot?"Disable AI reference":"Enable AI reference","aria-label":ot?"Disable AI reference":"Enable AI reference",className:ot?"is-active-ai":"is-inactive-ai",onPointerDown:x=>x.stopPropagation(),onClick:()=>q(t.id),children:n.jsx(Fm,{size:13})}),ye&&n.jsx("button",{type:"button",title:"Change memo color","aria-label":"Change memo color","aria-pressed":Gt,className:"is-memo-color-action","data-testid":"node-memo-color-open",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),ma(P=>!P)},children:n.jsx(Al,{size:13})}),t.kind==="code"&&n.jsx("button",{type:"button",title:t.wordWrap===!1?"Enable word wrap":"Disable word wrap","aria-label":t.wordWrap===!1?"Enable word wrap":"Disable word wrap",onPointerDown:x=>x.stopPropagation(),onClick:()=>re(t.id),children:n.jsx($m,{size:13})}),n.jsx("button",{type:"button",title:Rt?"Copy image to clipboard":"Copy content","aria-label":Rt?"Copy image to clipboard":"Copy content",onPointerDown:x=>x.stopPropagation(),onClick:()=>$(t.id),children:n.jsx(co,{size:13})}),n.jsx("button",{type:"button",title:"Duplicate node","aria-label":"Duplicate node","data-testid":"node-duplicate",onPointerDown:x=>x.stopPropagation(),onClick:()=>w(t.id),children:n.jsx(Ml,{size:13})}),_a&&n.jsx("button",{type:"button",title:"Fit text height","aria-label":"Fit text height",onPointerDown:x=>x.stopPropagation(),onClick:()=>G(t.id),children:n.jsx(zm,{size:13})}),_a&&n.jsx("button",{type:"button",title:Yt?"Expand node":"Collapse node","aria-label":Yt?"Expand node":"Collapse node","aria-pressed":Yt,onPointerDown:x=>x.stopPropagation(),onClick:()=>V(t.id),children:Yt?n.jsx(Cd,{size:13}):n.jsx(Um,{size:13})}),ho&&n.jsx("button",{type:"button",title:"Run node",onPointerDown:x=>x.stopPropagation(),onClick:()=>L(t.id),children:n.jsx(ia,{size:13})}),Sn&&n.jsx("button",{type:"button",title:t.companyMode?"Open Company graph":"Run this note as Company","aria-label":t.companyMode?"Open Company graph":"Run this note as Company",className:t.companyMode?"is-company-action":"","data-testid":t.companyMode?"node-company-graph-open":"node-company-run-open",onPointerDown:x=>x.stopPropagation(),onClick:t.companyMode?xo:ks,children:n.jsx(Sd,{size:13})}),n.jsx("button",{type:"button",title:"Delete node","aria-label":"Delete node","data-testid":"node-delete",onPointerDown:x=>x.stopPropagation(),onClick:()=>y(t.id),children:n.jsx(cs,{size:13})})]}),Ua=ho?n.jsxs("div",{className:"node-result-row","data-testid":"node-external-pins",children:[n.jsxs("button",{className:`node-pin node-pin--context ${xn?"can-receive":""}`,type:"button",title:"Context input",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),I(t.id,"context")},children:[n.jsx(kd,{size:10}),"Context"]}),n.jsxs("button",{className:`node-pin node-pin--result ${t.result?"has-result":""}`,type:"button",title:"Drag to connect this result to an input pin. Click to view the result.","data-testid":"node-result-open",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),t.result?D(t.id):I(t.id,"result")},children:[n.jsx(Cd,{size:11}),"Result"]})]}):n.jsxs("button",{className:`node-context-source ${l?"can-receive":""}`,type:"button",title:"Use this node as AI Task context",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),I(t.id,"context")},children:[n.jsx(kd,{size:10}),n.jsx("span",{children:"Context"})]}),je=wt||Le.length>1||we||kt?n.jsxs("div",{className:"node-surface-badges","data-testid":"node-surface-badges",children:[wt&&n.jsx("span",{className:"node-mask-badge",title:"Image edit mask reference",children:"Mask"}),Le.length>1&&n.jsxs("span",{className:"node-image-stack-badge",title:"Image stack variants",children:[Math.max(1,la+1),"/",Le.length]}),we&&n.jsx("span",{className:"node-embed-badge",children:vt==="youtube"?"YouTube":"Embed"}),kt&&n.jsx("span",{className:"node-video-badge",children:((_n=t.metadata)==null?void 0:_n.MediaModel)||((Ka=t.metadata)==null?void 0:Ka.MediaProvider)||"Video"})]}):null,fe=Le.length>1||we||kt||Re?n.jsxs("div",{className:"node-surface-actions","data-testid":"node-surface-actions",children:[Le.length>1&&n.jsx("div",{className:"node-image-stack-rail","aria-label":"Image stack variants",children:Le.map((x,P)=>n.jsx("button",{type:"button",className:x.variantId===(ut==null?void 0:ut.variantId)?"is-active":"",title:x.title||x.caption||`Variant ${P+1}`,"aria-label":`Show image variant ${P+1}`,onPointerDown:ne=>ne.stopPropagation(),onClick:ne=>ga(x.variantId,ne),children:n.jsx(sr,{src:x.imageUrl,traceId:`${t.id}:${x.variantId||P}`,kind:"image-stack-variant",testId:"node-image-stack-thumb"})},x.variantId||`${x.imageUrl}-${P}`))}),we&&n.jsxs("div",{className:"node-embed-actions",children:[n.jsxs("button",{type:"button",title:"Open embed","aria-label":"Open embed",onPointerDown:x=>x.stopPropagation(),onClick:x=>{x.stopPropagation(),$e&&he(t,"external")},children:[n.jsx(gn,{size:13}),n.jsx("span",{children:"Open"})]}),n.jsxs("button",{type:"button",title:"Copy URL","aria-label":"Copy URL",onPointerDown:x=>x.stopPropagation(),onClick:Jt,children:[n.jsx(co,{size:13}),n.jsx("span",{children:"Copy URL"})]})]}),kt&&n.jsxs("div",{className:"node-video-actions",children:[n.jsxs("button",{type:"button",title:"Play video","aria-label":"Play video","data-testid":"node-video-play",onPointerDown:x=>x.stopPropagation(),onClick:Co,children:[n.jsx(ia,{size:13}),n.jsx("span",{children:"Play"})]}),n.jsxs("button",{type:"button",title:"Pause video","aria-label":"Pause video","data-testid":"node-video-pause",onPointerDown:x=>x.stopPropagation(),onClick:ba,children:[n.jsx(po,{size:13}),n.jsx("span",{children:"Pause"})]})]}),Re&&n.jsxs("div",{className:"node-asset-actions",children:[t.kind==="pdf"&&n.jsxs("button",{type:"button",title:"Preview PDF","data-testid":"node-pdf-preview",onPointerDown:x=>x.stopPropagation(),onClick:()=>he(t,"preview"),children:[n.jsx(Hm,{size:13}),n.jsx("span",{children:"Preview"})]}),t.kind!=="directory"&&n.jsxs("button",{type:"button",title:"Open in new tab",onPointerDown:x=>x.stopPropagation(),onClick:()=>he(t,"external"),children:[n.jsx(gn,{size:13}),n.jsx("span",{children:"Open"})]}),t.kind==="directory"&&n.jsxs("button",{type:"button",title:"Scan folder","data-testid":"directory-scan",onPointerDown:x=>x.stopPropagation(),onClick:()=>ie(t.id),children:[n.jsx(ln,{size:13}),n.jsx("span",{children:"Scan"})]}),t.kind==="directory"&&n.jsxs("button",{type:"button",title:"Folder scan settings","data-testid":"directory-settings-open",onPointerDown:x=>x.stopPropagation(),onClick:()=>J(t.id),children:[n.jsx(ts,{size:13}),n.jsx("span",{children:"Settings"})]})]})]}):null,Ze=Oe?null:n.jsxs("div",{className:"node-external-action-rail","data-testid":"node-external-action-rail",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[fe,n.jsx("div",{className:"node-external-rail__pins",children:Ua}),n.jsx("div",{className:"node-actions","data-testid":"node-actions",children:gt}),Me&&n.jsxs("div",{className:"node-agent-command-actions","data-testid":"node-agent-command-actions",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button","data-testid":"node-agent-command-plan","data-agent-command-action":"plan",onClick:vn,children:"Plan"}),n.jsx("button",{type:"button","data-testid":"node-agent-command-execute","data-agent-command-action":"execute",disabled:Tt==="Running",onClick:ha,children:"Execute"})]}),le&&n.jsxs("div",{className:"node-code-note-actions","data-testid":"node-code-note-actions",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button","data-testid":"node-code-note-approve","data-code-note-action":"approve",onClick:x=>fa(x,"Approved","Planned","approve-local"),children:"Approve"}),n.jsx("button",{type:"button","data-testid":"node-code-note-review","data-code-note-action":"review",onClick:x=>fa(x,"Reviewed","InSync","review-local"),children:"Review"}),n.jsx("button",{type:"button","data-testid":"node-code-note-out-of-sync","data-code-note-action":"out-of-sync",onClick:x=>fa(x,ee,"OutOfSync","mark-out-of-sync-local"),children:"Out of sync"})]}),t.companyMode&&n.jsxs("div",{className:"node-company-quick-actions","data-testid":"node-company-quick-actions","data-company-status":Et||"Staged",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:[n.jsx("button",{type:"button",title:"Update Company goal from this note","aria-label":"Update Company goal from this note","data-testid":"node-company-sync-goal",disabled:pt,onClick:()=>be(t.id),children:n.jsx(Tl,{size:12})}),n.jsx("button",{type:"button",title:"Refresh Company status","aria-label":"Refresh Company status","data-testid":"node-company-refresh",onClick:()=>Ue(t.id),children:n.jsx(ln,{size:12})}),pt?n.jsx("button",{type:"button",title:"Company is archived","aria-label":"Company is archived","data-testid":"node-company-archived",disabled:!0,children:n.jsx(vr,{size:12})}):qt?n.jsx("button",{type:"button",title:"Resume Company","aria-label":"Resume Company","data-testid":"node-company-resume",onClick:()=>et(t.id,"Staged"),children:n.jsx(ia,{size:12})}):n.jsx("button",{type:"button",title:"Pause Company","aria-label":"Pause Company","data-testid":"node-company-pause",onClick:()=>et(t.id,"Paused"),children:n.jsx(po,{size:12})}),!pt&&n.jsx("button",{type:"button",title:"Archive Company","aria-label":"Archive Company","data-testid":"node-company-archive",onClick:()=>et(t.id,"Archived"),children:n.jsx(vr,{size:12})}),n.jsx("button",{type:"button",title:"Remove Company from this note","aria-label":"Remove Company from this note","data-testid":"node-company-remove",onClick:()=>tt(t.id),children:n.jsx(yt,{size:12})})]})]}),ko=Oe?null:n.jsx("div",{className:"node-external-rail","data-testid":"node-external-rail",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:n.jsxs("div",{className:"node-external-rail__meta",children:[n.jsxs("div",{className:"node-tags","data-testid":"node-external-tags",children:[(t.tags??[t.kind]).slice(0,3).map(x=>n.jsx("span",{children:x},x)),t.status&&n.jsx("span",{className:`node-status node-status--${t.status}`,children:t.status})]}),je,xe,Me&&n.jsxs("div",{className:"node-agent-command-state","data-testid":"node-agent-command-state","data-agent-command-status":Tt,"data-agent-command-mode":me,"data-agent-command-role":He,"data-agent-command-adapter-state":((Ca=t.metadata)==null?void 0:Ca.AdapterState)||"adapter-gated",children:[n.jsx(cn,{size:12}),n.jsx("strong",{children:"AC"}),n.jsx("span",{children:Tt}),n.jsx("span",{children:me}),n.jsx("span",{children:He})]}),le&&n.jsxs("div",{className:"node-code-note-state","data-testid":"node-code-note-state","data-code-note-status":ee,"data-code-note-sync-state":ct,"data-code-note-kind":Wt,"data-code-note-adapter-state":((ea=t.metadata)==null?void 0:ea.AdapterState)||"local-canvas-only",children:[n.jsx(un,{size:12}),n.jsx("strong",{children:"CN"}),n.jsx("span",{children:ee}),n.jsx("span",{children:ct}),n.jsx("span",{children:Wt})]}),t.companyMode&&n.jsxs("div",{className:"node-company-state","data-testid":"node-company-state",children:[n.jsx(Sd,{size:12}),n.jsx("strong",{children:((De=t.metadata)==null?void 0:De.CompanyExecutionModeLabel)||"Company staged"}),n.jsx("span",{children:((Pe=t.metadata)==null?void 0:Pe.CompanySubAgents)==="false"?"single-agent":"sub-agents"})]})]})});return n.jsxs("article",{className:`canvas-node canvas-node--${t.kind} ${Oe?"canvas-node--remote-surface":""} ${Pa?"canvas-node--remote-monitor-surface":""} ${Vt?"canvas-node--remote-control-surface":""} ${F?`canvas-node--automation-${F}`:""} ${Me?"canvas-node--agent-command":""} ${le?"canvas-node--code-note":""} ${o?"is-selected":""} ${r?"is-pulsing":""} ${ot?"":"is-ai-disabled"} ${t.wordWrap===!1?"is-nowrap":""} ${Yt?"is-collapsed":""} ${t.companyMode?`is-company-${t.companyMode}`:""}`,style:Nn,"data-node-id":t.id,"data-automation-node-kind":F||void 0,"data-automation-external-policy":((qa=t.metadata)==null?void 0:qa.AutomationExternalActionPolicy)||void 0,"data-media-generation-contract":((Dn=t.metadata)==null?void 0:Dn.MediaGenerationContract)||void 0,"data-agent-command-node":Me?"true":void 0,"data-agent-command-status":Me?Tt:void 0,"data-agent-command-mode":Me?me:void 0,"data-agent-command-role":Me?He:void 0,"data-code-note-node":le?"true":void 0,"data-code-note-status":le?ee:void 0,"data-code-note-sync-state":le?ct:void 0,"data-code-note-kind":le?Wt:void 0,"data-remote-surface-chrome":Oe?"self-contained":void 0,"data-remote-surface-kind":Te||void 0,"data-remote-surface-title-owner":Oe?"inner-remote-view":void 0,"data-remote-surface-scroll-owner":Oe?"remote-page-rail":void 0,onPointerDown:x=>{m(t.id,x.shiftKey||x.metaKey||x.ctrlKey),p(t.id,x)},onDoubleClick:x=>{if(t.kind!=="directory")return;const P=x.target instanceof HTMLElement?x.target:null;P!=null&&P.closest('button,input,textarea,select,[contenteditable="true"],[contenteditable=""]')||(x.stopPropagation(),ie(t.id))},children:[!Oe&&n.jsxs("div",{className:"node-header",children:[n.jsx("span",{className:"node-kind",children:n.jsx(Ea,{size:14})}),n.jsx("input",{value:t.title,"aria-label":"Node title",readOnly:ce,onPointerDown:x=>x.stopPropagation(),onChange:x=>{ce||c(t.id,{title:x.target.value})}})]}),Zt&&typeof document<"u"?Ku.createPortal(Zt,document.body):Zt,ye&&Gt&&Fe&&n.jsx("div",{className:"node-memo-palette","data-testid":"node-memo-palette",onPointerDown:x=>x.stopPropagation(),onClick:x=>x.stopPropagation(),children:Pr.map(x=>n.jsx("button",{type:"button",className:x.key===Fe.key?"is-active":"",title:`${x.label} memo color`,"aria-label":`${x.label} memo color`,"aria-pressed":x.key===Fe.key,"data-memo-color":x.key,style:{"--memo-swatch":x.swatch,"--memo-swatch-ring":x.ring},onPointerDown:P=>P.stopPropagation(),onClick:P=>vs(x.key,P)},x.key))}),Rt?n.jsx("div",{className:`node-image-wrap ${Le.length>1?"node-image-wrap--stack":""} ${wt?"node-image-wrap--mask":""}`,"data-testid":wt?"node-mask-preview":Le.length>1?"node-image-stack":void 0,children:n.jsx(sr,{src:Rt,traceId:t.id,kind:wt?"mask":"node-image",testId:"node-secure-image"})}):Pa?n.jsx(sm,{node:t,onPatch:c,onCreateRemoteControl:se}):Vt?n.jsx(rm,{node:t,onPatch:c}):ce?n.jsx("div",{className:"node-template-card","data-testid":"node-template-card",children:de&&mt?n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"node-template-card__summary",children:[n.jsx("strong",{children:de.prompt||de.description}),n.jsx("span",{children:mt.description||de.description})]}),n.jsx("div",{className:"node-template-card__options","data-testid":"node-template-card-options",children:de.options.map(x=>n.jsxs("button",{type:"button",className:x.id===mt.id?"is-active":"","data-testid":"node-template-card-option","data-option-id":x.id,onPointerDown:P=>P.stopPropagation(),onClick:P=>st(x.id,P),children:[n.jsx("strong",{children:x.label}),n.jsx("span",{children:x.description})]},x.id||x.templateId))}),n.jsxs("div",{className:"node-template-card__inputs","data-testid":"node-template-card-inputs",children:[mt.inputs.map(x=>n.jsx(gh,{input:x,value:de.inputValues[x.key]??"",onChange:P=>In(x.key,P)},x.key)),mt.inputs.length===0&&n.jsx("p",{className:"node-template-card__empty",children:de.noInputsLabel||"No inputs needed."})]}),Kt&&n.jsx("div",{className:"node-template-card__validation",children:Kt}),n.jsxs("button",{type:"button",className:"node-template-card__generate","data-testid":"node-template-card-generate",disabled:!!Kt,onPointerDown:Dt,onClick:x=>x.stopPropagation(),children:[n.jsx(ia,{size:13}),n.jsx("span",{children:de.generateLabel||de.actionLabel||"Generate"})]})]}):n.jsx("div",{className:"node-template-card__missing",children:"Template card payload is unavailable."})}):we?n.jsxs("div",{className:`node-embed-card ${_e?"has-embed-thumbnail":"is-embed-link"}`,"data-testid":"node-embed-card",children:[n.jsx("div",{className:"node-embed-preview",children:_e?n.jsx(sr,{src:_e,traceId:t.id,kind:"embed-thumbnail",testId:"node-embed-thumbnail"}):n.jsxs("div",{className:"node-embed-placeholder",children:[n.jsx(gn,{size:24}),n.jsx("strong",{children:vt==="youtube"?"YouTube":"Web embed"}),n.jsx("span",{children:fo||$e||"External link"})]})}),n.jsx("textarea",{value:t.body,"aria-label":"Embed URL or description",spellCheck:!1,onPointerDown:x=>x.stopPropagation(),onChange:x=>{const P=x.target.value;c(t.id,{body:P,assetUrl:P,metadata:{...t.metadata??{},sourceUrl:P,url:P}})}}),$e&&n.jsx("span",{className:"node-embed-source",title:$e,children:$e})]}):kt?n.jsxs("div",{className:`node-video-card ${qe?"has-video-source":"is-video-prompt"}`,"data-testid":"node-video-card",children:[qe?n.jsx("video",{ref:pe,src:qe,className:"node-video-player","data-testid":"node-video-player",controls:!0,preload:"metadata",onPointerDown:x=>x.stopPropagation()}):n.jsxs("div",{className:"node-video-placeholder",children:[n.jsx(pn,{size:24}),n.jsx("strong",{children:"Video prompt"}),n.jsx("span",{children:((vo=t.metadata)==null?void 0:vo.MediaModel)||((Sa=t.metadata)==null?void 0:Sa.MediaProvider)||"Adapter gated"})]}),n.jsx("textarea",{value:t.body,"aria-label":"Video prompt or source",spellCheck:!1,onPointerDown:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.target.value})}),qe&&n.jsx("span",{className:"node-video-source",title:Cn,children:Cn})]}):Re?n.jsxs("div",{className:`node-asset-card node-asset-card--${t.kind}`,"data-testid":"node-asset-card",children:[n.jsx("div",{className:"node-asset-icon",children:n.jsx(Ea,{size:28})}),n.jsxs("div",{className:"node-asset-copy",children:[n.jsx("strong",{title:We,children:We}),n.jsx("span",{children:t.kind==="directory"?"Directory reference":t.kind==="pdf"?"PDF document":"File reference"}),t.kind==="directory"&&(Xt||Da||kn||Ee||jt)&&n.jsxs("dl",{className:"node-asset-meta","data-testid":"node-directory-meta",children:[(kn||Ee)&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Scanned"}),n.jsxs("dd",{children:[Number(kn??0).toLocaleString()," files / ",Number(Ee??0).toLocaleString()," folders"]})]}),Xt&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Include"}),n.jsx("dd",{children:Xt})]}),Da&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Exclude"}),n.jsx("dd",{children:Da})]}),jt&&n.jsxs(n.Fragment,{children:[n.jsx("dt",{children:"Updated"}),n.jsx("dd",{children:new Date(jt).toLocaleString()})]})]})]})]}):nt?n.jsxs("div",{className:"node-csv-card","data-testid":"node-csv-card",children:[n.jsx(fh,{preview:pa,sort:It,onSort:x=>{const P=(It==null?void 0:It.columnIndex)===x&&It.direction==="asc"?"desc":"asc";za({columnIndex:x,direction:P}),f.emit("node.csvTable.sort",{id:t.id,columnIndex:x,direction:P})}}),n.jsx("textarea",{value:t.body,"aria-label":"CSV source",spellCheck:!1,wrap:"off",onPointerDown:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.target.value})})]}):at?n.jsxs("div",{className:"node-markdown-card","data-testid":"node-markdown-card",children:[n.jsx("div",{className:"node-markdown-preview mindcanvas-text-scrollable-view","data-testid":"node-markdown-preview","aria-label":"Markdown preview",children:n.jsx(Ch,{value:t.body})}),n.jsx("textarea",{value:t.body,"aria-label":"Markdown source",spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.target.value})})]}):n.jsx(n.Fragment,{children:n.jsx("textarea",{value:t.body,"aria-label":"Node body",spellCheck:!1,wrap:t.wordWrap===!1?"off":"soft",onPointerDown:x=>x.stopPropagation(),onChange:x=>c(t.id,{body:x.target.value})})}),ko,Ze,n.jsx("button",{type:"button",className:"node-resize-handle",title:"Resize node","aria-label":"Resize node",onPointerDown:x=>b(t.id,x)})]})});function gh({input:e,value:t,onChange:o}){return n.jsxs("label",{className:"node-template-card__field",children:[n.jsxs("span",{children:[n.jsx("strong",{children:e.label}),e.description&&n.jsx("small",{children:e.description})]}),e.type==="textarea"?n.jsx("textarea",{value:t,placeholder:e.placeholder,onPointerDown:r=>r.stopPropagation(),onChange:r=>o(r.target.value)}):e.type==="select"?n.jsx("select",{value:t,onPointerDown:r=>r.stopPropagation(),onChange:r=>o(r.target.value),children:(e.options??[]).map(r=>n.jsx("option",{value:r.value,children:r.label},r.value))}):n.jsx("input",{type:"text",value:t,placeholder:e.placeholder,onPointerDown:r=>r.stopPropagation(),onChange:r=>o(r.target.value)})]})}function hh(e){const r=Math.min(430,window.innerHeight-24),l=Math.max(12,window.innerWidth-332-12),m=Math.min(Math.max(e.right-332,12),l),p=e.bottom+8,b=e.top-r-8,c=Math.max(12,window.innerHeight-r-12),y=p<=c?p:Math.max(12,b);return{left:m,top:Math.min(y,c)}}function fh({preview:e,sort:t,onSort:o}){return!e||e.headers.length===0?n.jsx("div",{className:"csv-table-scroll mindcanvas-text-scrollable-view","data-testid":"csv-table-preview","aria-label":"CSV table preview",children:n.jsx("p",{className:"node-md-empty",children:"Paste CSV source to preview a table."})}):n.jsxs("div",{className:"csv-table-scroll mindcanvas-text-scrollable-view","data-testid":"csv-table-preview","data-sort-column":(t==null?void 0:t.columnIndex)??"","data-sort-direction":(t==null?void 0:t.direction)??"","data-total-rows":e.totalRows,"data-rendered-rows":e.renderedRows,"aria-label":"CSV table preview",onPointerDown:r=>r.stopPropagation(),children:[n.jsxs("table",{className:"csv-table",children:[n.jsx("thead",{children:n.jsx("tr",{children:e.headers.map((r,l)=>{const m=(t==null?void 0:t.columnIndex)===l,p=m&&t.direction==="asc"?"descending":"ascending";return n.jsx("th",{"aria-sort":m?t.direction==="asc"?"ascending":"descending":"none",children:n.jsxs("button",{type:"button",className:`csv-table-header-button ${m?"is-active":""}`,"data-testid":`csv-table-sort-${l}`,"aria-label":`Sort CSV by ${r||`Column ${l+1}`} ${p}`,onClick:()=>o(l),children:[n.jsx("span",{children:r||`Column ${l+1}`}),m&&n.jsx("small",{children:t.direction==="asc"?"Asc":"Desc"})]})},`${r}-${l}`)})})}),n.jsx("tbody",{children:e.rows.map((r,l)=>n.jsx("tr",{children:e.headers.map((m,p)=>n.jsx("td",{className:"csv-table-cell",children:r[p]??""},`csv-cell-${l}-${p}`))},`csv-row-${l}`))})]}),n.jsxs("div",{className:"csv-table-status",children:[n.jsxs("span",{children:[e.totalRows.toLocaleString()," rows"]}),n.jsxs("span",{children:[e.columnCount.toLocaleString()," columns"]}),e.truncated&&n.jsxs("span",{children:["showing ",e.renderedRows.toLocaleString()]})]})]})}function bh(e,t){const o=yh(e,zd+1);if(o.length===0)return null;const r=Math.min(rh,Math.max(...o.map(c=>c.length),1)),l=Ud(o[0],r).map((c,y)=>c.trim()||`Column ${y+1}`),m=o.slice(1,zd+1).map(c=>Ud(c,r)),p=t?[...m].sort((c,y)=>xh(c[t.columnIndex]??"",y[t.columnIndex]??"",t.direction)):m,b=Math.max(0,String(e||"").split(/\r\n|\n|\r/).filter(c=>c.length>0).length-1);return{headers:l,rows:p,totalRows:b,columnCount:r,renderedRows:p.length,truncated:b>p.length}}function yh(e,t){const o=[];let r=[],l="",m=!1;const p=String(e||"").replace(/\r\n/g,`
4
4
  `).replace(/\r/g,`
@@ -1 +1 @@
1
- import{r as m,j as t}from"./vendor-react-BXzpOyCS.js";import{L as M}from"./LaunchLeadCapture-DhMxzfOQ.js";import{g as C,a as P}from"./index-B9m3XXKS.js";import{p as E,P as N,r as _,c as x}from"./pricingCheckoutShell-O-DnwmbU.js";import{r as A,g as U}from"./supabaseAuthAdapter-Bptc9G29.js";import{R as g}from"./app-runtime-xD2Z3NdN.js";import{A as I,aS as L,c as D,N as $}from"./vendor-icons-D0xKCnZS.js";function f(e){return typeof e=="string"&&e.trim()?e.trim():null}function B(e){const o=Number(e);return Number.isFinite(o)?Math.max(1,Math.round(o)):1}function T(e){const o=B(e.quantity);return{price_id:e.priceId,return_url:e.returnUrl,email:e.email,quantity:o,source:"mindexec-react",sale_kind:"first_party",entitlement_kind:e.planKey,package_kind:e.planKey==="ltd"?"ltd":"subscription",plan_key:e.planKey,plan_code:e.planCode,price_stage:e.priceStage,metadata:{source:"mindexec-react",price_stage:e.priceStage,plan_key:e.planKey,plan_code:e.planCode,checkout_surface:"pricing"}}}async function O(e,o){var s;const u=A(e);if(!u.checkout.canAttempt)throw g.emit("pricing.checkout.provider.skipped",{mode:u.checkout.mode}),new Error(`Secure checkout adapter is not ready: ${u.checkout.mode}`);const l=U(e);if(!l)throw g.emit("pricing.checkout.provider.skipped",{mode:"config-missing"}),new Error("Supabase browser client is not available for checkout.");const{data:n,error:c}=await l.auth.getSession();if(c)throw g.emit("pricing.checkout.provider.sessionFailed",{message:c.message}),c;if(!((s=n.session)!=null&&s.access_token))throw g.emit("pricing.checkout.provider.sessionMissing"),new Error("Secure checkout requires a Supabase-authenticated session.");const p=T(o);g.emit("pricing.checkout.provider.started",{provider:"dodo",functionName:"dodo-create-checkout",priceStage:o.priceStage,priceId:o.priceId});const{data:r,error:a}=await l.functions.invoke("dodo-create-checkout",{body:p});if(a)throw g.emit("pricing.checkout.provider.failed",{provider:"dodo",message:a.message}),a;const h=f(r==null?void 0:r.checkout_url);if(!h){const i=f(r==null?void 0:r.reason)??f(r==null?void 0:r.error)??"checkout-url-missing";throw g.emit("pricing.checkout.provider.failed",{provider:"dodo",message:i}),new Error(`Dodo checkout did not return a checkout URL: ${i}`)}return g.emit("pricing.checkout.provider.ready",{provider:"dodo",hasSessionId:!!f(r==null?void 0:r.session_id)}),{mode:u.checkout.mode,canAttempt:!0,provider:"dodo",sessionId:f(r==null?void 0:r.session_id),checkoutUrl:h,userId:f(r==null?void 0:r.user_id)}}const d={currentStage:"STANDARD",ltdLimit:100,ltdSold:0,ltdRemaining:100,isLtdAvailable:!1,isClosed:!1,freeCloudBoardLimit:2,proMonthlyIncludedCredits:1e4,proMonthlyPriceUsd:12,proAnnualPriceUsd:96,ltdPriceUsd:149,managedAiMarkupMultiplier:1.7,localModeFreeEnabled:!0,byokFreeEnabled:!0};function b(e){return`$${e.toLocaleString("en-US",{maximumFractionDigits:2})}`}function R(e){return e?"Start Pro":"Sign in to continue"}function F(){return`${b(d.proMonthlyPriceUsd)} starting point`}function K(){return"Standard paid access should feel like a continuation of the free workflow, not a forced first step."}function z(){return[`Monthly Pro starts at ${b(d.proMonthlyPriceUsd)}`,`Annual target pricing is ${b(d.proAnnualPriceUsd)} per year`,`${d.freeCloudBoardLimit} cloud boards are available before paid limits matter`]}function H(){return A(P())}function Y(e){return"dodo_pro_monthly_v1"}function G(e){return"pro"}function k(e,o,u){const l=document.head.querySelector(e),n=l??o(),c=n.getAttribute("content"),p=!l;return p&&document.head.appendChild(n),n.setAttribute("content",u),()=>{p?n.remove():c===null?n.removeAttribute("content"):n.setAttribute("content",c)}}function j(e){const o=document.createElement("meta");return o.setAttribute("name",e),o}function w(e){const o=document.createElement("meta");return o.setAttribute("property",e),o}function J(){const e=document.title,o="MindExec Pricing",u="MindExec pricing for free local tools and MindCanvas projects. Start free with local tools, then upgrade when saved boards, cloud workflows, and AI support become important.",l="https://mindexec.pages.dev/pricing",n=document.head.querySelector('link[rel="canonical"]')??document.createElement("link"),c=!n.parentElement,p=n.getAttribute("href");n.setAttribute("rel","canonical"),n.setAttribute("href",l),c&&document.head.appendChild(n);const r={"@context":"https://schema.org","@type":"SoftwareApplication",name:"MindExec",applicationCategory:"ProductivityApplication",operatingSystem:"Web",description:"Local-first visual workspace with free markdown tools and paid MindCanvas project workflows.",url:l,offers:[{"@type":"Offer",name:"Free local tools",price:"0",priceCurrency:"USD"},{"@type":"Offer",name:"MindCanvas Pro",price:String(d.proMonthlyPriceUsd),priceCurrency:"USD"}]},a=document.head.querySelector("#pricing-structured-data")??document.createElement("script"),h=!a.parentElement,s=a.textContent;a.id="pricing-structured-data",a.type="application/ld+json",a.setAttribute("data-testid","pricing-structured-data"),a.textContent=JSON.stringify(r),h&&document.head.appendChild(a),document.title=o;const i=[k('meta[name="description"]',()=>j("description"),u),k('meta[name="robots"]',()=>j("robots"),"index,follow"),k('meta[property="og:title"]',()=>w("og:title"),o),k('meta[property="og:description"]',()=>w("og:description"),"Compare free local tools, MindCanvas Pro, and the current checkout offer."),k('meta[property="og:type"]',()=>w("og:type"),"website"),k('meta[property="og:url"]',()=>w("og:url"),l)];return()=>{document.title=e,i.forEach(y=>y()),c?n.remove():p===null?n.removeAttribute("href"):n.setAttribute("href",p),h?a.remove():a.textContent=s}}function te({navigate:e}){const[o,u]=m.useState(()=>C()),[l,n]=m.useState(!1),c=m.useMemo(()=>H(),[]),[p,r]=m.useState(()=>{const s=C(),i=E();return s&&i?`Signed in as ${s.email}. Continue checkout when ready; payment remains adapter-gated.`:""}),a=m.useMemo(()=>z(),[]);m.useEffect(()=>J(),[]);const h=async()=>{const s=C();if(u(s),g.emit("pricing.checkout.requested",{stage:d.currentStage,signedIn:!!s}),!s){_(d.currentStage,"/pricing"),r("Sign in first to continue to secure checkout."),e("/login");return}if(n(!0),c.checkout.canAttempt)try{const i=G(d.currentStage),y=await O(P(),{priceId:Y(d.currentStage),priceStage:d.currentStage,planKey:i,planCode:i.toUpperCase(),email:s.email,returnUrl:new URL("/pricing?checkout=return",window.location.origin).toString()});x("pricing-checkout-provider-started"),r("Opening secure Dodo checkout..."),window.location.assign(y.checkoutUrl);return}catch(i){n(!1),r(`Secure checkout could not start: ${i instanceof Error?i.message:String(i)}`),g.emit("pricing.checkout.provider.failed",{stage:d.currentStage,message:i instanceof Error?i.message:String(i)});return}window.setTimeout(()=>{x("pricing-checkout-adapter-gated"),n(!1),r(`Checkout policy is ready for ${s.email}; secure payment adapter wiring is the remaining backend step.`),g.emit("pricing.checkout.adapter.gated",{stage:d.currentStage,signedIn:!0})},650)};return t.jsxs("div",{className:"page pricing-page","data-testid":"pricing-shell","data-pricing-stage":d.currentStage,"data-pricing-checkout-intent-key":N,"data-production-adapter-state":c.overallState,"data-pricing-checkout-provider-mode":c.checkout.mode,"data-pricing-checkout-provider-ready":c.checkout.canAttempt?"true":"false","data-client-secret-blocked":c.forbiddenClientSecretKeys.length>0?"true":"false",children:[t.jsxs("section",{className:"pricing-hero",children:[t.jsx("div",{className:"eyebrow",children:"Pricing"}),t.jsx("h1",{children:"Start free. Pay when the work becomes worth keeping."}),t.jsx("p",{children:"Free tools stay fast and local. MindCanvas becomes valuable when saved projects, cloud workflows, and AI-supported organization matter across larger boards."}),t.jsxs("div",{className:"action-row",children:[t.jsx("button",{className:"btn btn-primary",type:"button",onClick:()=>e("/tools"),"data-testid":"pricing-browse-tools",children:"Browse free tools"}),t.jsx("button",{className:"btn btn-secondary",type:"button",onClick:()=>e("/mindcanvas"),"data-testid":"pricing-open-mindcanvas",children:"Open MindCanvas"})]})]}),t.jsxs("section",{className:"pricing-grid pricing-grid--detailed",children:[t.jsx(v,{label:"Free local tools",price:"$0",body:"Best for quick markdown, notes, clipboard work, and no-login utility tasks.",lines:["Markdown preview, outline, and README tools","Browser notepad and clipboard board","Local-first use with no required upload","Great for one-off jobs before a project exists"],action:"Use the free tools",onAction:()=>e("/tools")}),t.jsx(v,{label:"MindCanvas Pro",price:b(d.proMonthlyPriceUsd),suffix:"/month",body:"For saved boards, cloud projects, and AI-assisted organization once the work grows beyond a disposable tool session.",note:`Annual planning target: ${b(d.proAnnualPriceUsd)} per year`,lines:["Saved project workflows instead of one-off tool output","Cloud access when local-only is no longer enough",`${d.proMonthlyIncludedCredits.toLocaleString()} included monthly credits`,"Better fit for repeat work, larger docs, and visual organization"],action:R(o==null?void 0:o.email),icon:l?I:L,actionClass:"btn-primary",busy:l,onAction:h,status:p,testId:"pricing-pro-checkout"}),t.jsx(v,{label:"Current offer",price:F(),body:K(),lines:a,action:"Open MindCanvas first",onAction:()=>e("/mindcanvas")})]}),t.jsxs("section",{className:"pricing-compare",children:[t.jsxs("div",{children:[t.jsx("div",{className:"eyebrow",children:"Why pay later"}),t.jsx("h2",{children:"The free entry point should stay frictionless."}),t.jsx("p",{children:"Pricing works when it appears after the user already understands value. Public tools are for instant utility. Pro is for keeping the work alive after it becomes important."})]}),t.jsxs("div",{className:"pricing-compare-grid",children:[t.jsxs("article",{children:[t.jsx(D,{size:20}),t.jsx("h3",{children:"Stay free when"}),t.jsx("p",{children:"You only need a quick preview, outline, conversion, note, or snippet board with no ongoing project state."})]}),t.jsxs("article",{children:[t.jsx($,{size:20}),t.jsx("h3",{children:"Upgrade when"}),t.jsx("p",{children:"You want saved boards, repeat workflows, cloud access, or AI-assisted organization across bigger visual projects."})]})]})]}),t.jsx(M,{compact:!0,eyebrow:"Launch list",headline:"Not ready to buy today?",body:"Join the English launch list for checkout openings, launch offers, and short examples of serious MindCanvas workflows.",buttonText:"Notify me",sourceTag:"pricing"})]})}function v({label:e,price:o,suffix:u,body:l,note:n,lines:c,action:p,icon:r,actionClass:a,busy:h,status:s,testId:i,onAction:y}){return t.jsxs("article",{className:"pricing-card pricing-card--detailed",children:[t.jsx("div",{className:"card-label",children:e}),t.jsxs("h2",{children:[o,u&&t.jsx("span",{children:u})]}),t.jsx("p",{children:l}),n&&t.jsx("div",{className:"pricing-note",children:n}),t.jsx("ul",{children:c.map(S=>t.jsx("li",{children:S},S))}),t.jsxs("button",{className:`btn pricing-card-action ${a||"btn-secondary"}`,type:"button",disabled:h,onClick:y,"data-testid":i,children:[r&&t.jsx(r,{size:16,className:h?"spin-icon":void 0}),p]}),s&&t.jsx("p",{className:"pricing-status","data-testid":i?`${i}-status`:void 0,children:s})]})}export{te as PricingPage};
1
+ import{r as m,j as t}from"./vendor-react-BXzpOyCS.js";import{L as M}from"./LaunchLeadCapture-DhMxzfOQ.js";import{g as C,a as P}from"./index-Rjp0zHKN.js";import{p as E,P as N,r as _,c as x}from"./pricingCheckoutShell-O-DnwmbU.js";import{r as A,g as U}from"./supabaseAuthAdapter-Bptc9G29.js";import{R as g}from"./app-runtime-xD2Z3NdN.js";import{A as I,aS as L,c as D,N as $}from"./vendor-icons-D0xKCnZS.js";function f(e){return typeof e=="string"&&e.trim()?e.trim():null}function B(e){const o=Number(e);return Number.isFinite(o)?Math.max(1,Math.round(o)):1}function T(e){const o=B(e.quantity);return{price_id:e.priceId,return_url:e.returnUrl,email:e.email,quantity:o,source:"mindexec-react",sale_kind:"first_party",entitlement_kind:e.planKey,package_kind:e.planKey==="ltd"?"ltd":"subscription",plan_key:e.planKey,plan_code:e.planCode,price_stage:e.priceStage,metadata:{source:"mindexec-react",price_stage:e.priceStage,plan_key:e.planKey,plan_code:e.planCode,checkout_surface:"pricing"}}}async function O(e,o){var s;const u=A(e);if(!u.checkout.canAttempt)throw g.emit("pricing.checkout.provider.skipped",{mode:u.checkout.mode}),new Error(`Secure checkout adapter is not ready: ${u.checkout.mode}`);const l=U(e);if(!l)throw g.emit("pricing.checkout.provider.skipped",{mode:"config-missing"}),new Error("Supabase browser client is not available for checkout.");const{data:n,error:c}=await l.auth.getSession();if(c)throw g.emit("pricing.checkout.provider.sessionFailed",{message:c.message}),c;if(!((s=n.session)!=null&&s.access_token))throw g.emit("pricing.checkout.provider.sessionMissing"),new Error("Secure checkout requires a Supabase-authenticated session.");const p=T(o);g.emit("pricing.checkout.provider.started",{provider:"dodo",functionName:"dodo-create-checkout",priceStage:o.priceStage,priceId:o.priceId});const{data:r,error:a}=await l.functions.invoke("dodo-create-checkout",{body:p});if(a)throw g.emit("pricing.checkout.provider.failed",{provider:"dodo",message:a.message}),a;const h=f(r==null?void 0:r.checkout_url);if(!h){const i=f(r==null?void 0:r.reason)??f(r==null?void 0:r.error)??"checkout-url-missing";throw g.emit("pricing.checkout.provider.failed",{provider:"dodo",message:i}),new Error(`Dodo checkout did not return a checkout URL: ${i}`)}return g.emit("pricing.checkout.provider.ready",{provider:"dodo",hasSessionId:!!f(r==null?void 0:r.session_id)}),{mode:u.checkout.mode,canAttempt:!0,provider:"dodo",sessionId:f(r==null?void 0:r.session_id),checkoutUrl:h,userId:f(r==null?void 0:r.user_id)}}const d={currentStage:"STANDARD",ltdLimit:100,ltdSold:0,ltdRemaining:100,isLtdAvailable:!1,isClosed:!1,freeCloudBoardLimit:2,proMonthlyIncludedCredits:1e4,proMonthlyPriceUsd:12,proAnnualPriceUsd:96,ltdPriceUsd:149,managedAiMarkupMultiplier:1.7,localModeFreeEnabled:!0,byokFreeEnabled:!0};function b(e){return`$${e.toLocaleString("en-US",{maximumFractionDigits:2})}`}function R(e){return e?"Start Pro":"Sign in to continue"}function F(){return`${b(d.proMonthlyPriceUsd)} starting point`}function K(){return"Standard paid access should feel like a continuation of the free workflow, not a forced first step."}function z(){return[`Monthly Pro starts at ${b(d.proMonthlyPriceUsd)}`,`Annual target pricing is ${b(d.proAnnualPriceUsd)} per year`,`${d.freeCloudBoardLimit} cloud boards are available before paid limits matter`]}function H(){return A(P())}function Y(e){return"dodo_pro_monthly_v1"}function G(e){return"pro"}function k(e,o,u){const l=document.head.querySelector(e),n=l??o(),c=n.getAttribute("content"),p=!l;return p&&document.head.appendChild(n),n.setAttribute("content",u),()=>{p?n.remove():c===null?n.removeAttribute("content"):n.setAttribute("content",c)}}function j(e){const o=document.createElement("meta");return o.setAttribute("name",e),o}function w(e){const o=document.createElement("meta");return o.setAttribute("property",e),o}function J(){const e=document.title,o="MindExec Pricing",u="MindExec pricing for free local tools and MindCanvas projects. Start free with local tools, then upgrade when saved boards, cloud workflows, and AI support become important.",l="https://mindexec.pages.dev/pricing",n=document.head.querySelector('link[rel="canonical"]')??document.createElement("link"),c=!n.parentElement,p=n.getAttribute("href");n.setAttribute("rel","canonical"),n.setAttribute("href",l),c&&document.head.appendChild(n);const r={"@context":"https://schema.org","@type":"SoftwareApplication",name:"MindExec",applicationCategory:"ProductivityApplication",operatingSystem:"Web",description:"Local-first visual workspace with free markdown tools and paid MindCanvas project workflows.",url:l,offers:[{"@type":"Offer",name:"Free local tools",price:"0",priceCurrency:"USD"},{"@type":"Offer",name:"MindCanvas Pro",price:String(d.proMonthlyPriceUsd),priceCurrency:"USD"}]},a=document.head.querySelector("#pricing-structured-data")??document.createElement("script"),h=!a.parentElement,s=a.textContent;a.id="pricing-structured-data",a.type="application/ld+json",a.setAttribute("data-testid","pricing-structured-data"),a.textContent=JSON.stringify(r),h&&document.head.appendChild(a),document.title=o;const i=[k('meta[name="description"]',()=>j("description"),u),k('meta[name="robots"]',()=>j("robots"),"index,follow"),k('meta[property="og:title"]',()=>w("og:title"),o),k('meta[property="og:description"]',()=>w("og:description"),"Compare free local tools, MindCanvas Pro, and the current checkout offer."),k('meta[property="og:type"]',()=>w("og:type"),"website"),k('meta[property="og:url"]',()=>w("og:url"),l)];return()=>{document.title=e,i.forEach(y=>y()),c?n.remove():p===null?n.removeAttribute("href"):n.setAttribute("href",p),h?a.remove():a.textContent=s}}function te({navigate:e}){const[o,u]=m.useState(()=>C()),[l,n]=m.useState(!1),c=m.useMemo(()=>H(),[]),[p,r]=m.useState(()=>{const s=C(),i=E();return s&&i?`Signed in as ${s.email}. Continue checkout when ready; payment remains adapter-gated.`:""}),a=m.useMemo(()=>z(),[]);m.useEffect(()=>J(),[]);const h=async()=>{const s=C();if(u(s),g.emit("pricing.checkout.requested",{stage:d.currentStage,signedIn:!!s}),!s){_(d.currentStage,"/pricing"),r("Sign in first to continue to secure checkout."),e("/login");return}if(n(!0),c.checkout.canAttempt)try{const i=G(d.currentStage),y=await O(P(),{priceId:Y(d.currentStage),priceStage:d.currentStage,planKey:i,planCode:i.toUpperCase(),email:s.email,returnUrl:new URL("/pricing?checkout=return",window.location.origin).toString()});x("pricing-checkout-provider-started"),r("Opening secure Dodo checkout..."),window.location.assign(y.checkoutUrl);return}catch(i){n(!1),r(`Secure checkout could not start: ${i instanceof Error?i.message:String(i)}`),g.emit("pricing.checkout.provider.failed",{stage:d.currentStage,message:i instanceof Error?i.message:String(i)});return}window.setTimeout(()=>{x("pricing-checkout-adapter-gated"),n(!1),r(`Checkout policy is ready for ${s.email}; secure payment adapter wiring is the remaining backend step.`),g.emit("pricing.checkout.adapter.gated",{stage:d.currentStage,signedIn:!0})},650)};return t.jsxs("div",{className:"page pricing-page","data-testid":"pricing-shell","data-pricing-stage":d.currentStage,"data-pricing-checkout-intent-key":N,"data-production-adapter-state":c.overallState,"data-pricing-checkout-provider-mode":c.checkout.mode,"data-pricing-checkout-provider-ready":c.checkout.canAttempt?"true":"false","data-client-secret-blocked":c.forbiddenClientSecretKeys.length>0?"true":"false",children:[t.jsxs("section",{className:"pricing-hero",children:[t.jsx("div",{className:"eyebrow",children:"Pricing"}),t.jsx("h1",{children:"Start free. Pay when the work becomes worth keeping."}),t.jsx("p",{children:"Free tools stay fast and local. MindCanvas becomes valuable when saved projects, cloud workflows, and AI-supported organization matter across larger boards."}),t.jsxs("div",{className:"action-row",children:[t.jsx("button",{className:"btn btn-primary",type:"button",onClick:()=>e("/tools"),"data-testid":"pricing-browse-tools",children:"Browse free tools"}),t.jsx("button",{className:"btn btn-secondary",type:"button",onClick:()=>e("/mindcanvas"),"data-testid":"pricing-open-mindcanvas",children:"Open MindCanvas"})]})]}),t.jsxs("section",{className:"pricing-grid pricing-grid--detailed",children:[t.jsx(v,{label:"Free local tools",price:"$0",body:"Best for quick markdown, notes, clipboard work, and no-login utility tasks.",lines:["Markdown preview, outline, and README tools","Browser notepad and clipboard board","Local-first use with no required upload","Great for one-off jobs before a project exists"],action:"Use the free tools",onAction:()=>e("/tools")}),t.jsx(v,{label:"MindCanvas Pro",price:b(d.proMonthlyPriceUsd),suffix:"/month",body:"For saved boards, cloud projects, and AI-assisted organization once the work grows beyond a disposable tool session.",note:`Annual planning target: ${b(d.proAnnualPriceUsd)} per year`,lines:["Saved project workflows instead of one-off tool output","Cloud access when local-only is no longer enough",`${d.proMonthlyIncludedCredits.toLocaleString()} included monthly credits`,"Better fit for repeat work, larger docs, and visual organization"],action:R(o==null?void 0:o.email),icon:l?I:L,actionClass:"btn-primary",busy:l,onAction:h,status:p,testId:"pricing-pro-checkout"}),t.jsx(v,{label:"Current offer",price:F(),body:K(),lines:a,action:"Open MindCanvas first",onAction:()=>e("/mindcanvas")})]}),t.jsxs("section",{className:"pricing-compare",children:[t.jsxs("div",{children:[t.jsx("div",{className:"eyebrow",children:"Why pay later"}),t.jsx("h2",{children:"The free entry point should stay frictionless."}),t.jsx("p",{children:"Pricing works when it appears after the user already understands value. Public tools are for instant utility. Pro is for keeping the work alive after it becomes important."})]}),t.jsxs("div",{className:"pricing-compare-grid",children:[t.jsxs("article",{children:[t.jsx(D,{size:20}),t.jsx("h3",{children:"Stay free when"}),t.jsx("p",{children:"You only need a quick preview, outline, conversion, note, or snippet board with no ongoing project state."})]}),t.jsxs("article",{children:[t.jsx($,{size:20}),t.jsx("h3",{children:"Upgrade when"}),t.jsx("p",{children:"You want saved boards, repeat workflows, cloud access, or AI-assisted organization across bigger visual projects."})]})]})]}),t.jsx(M,{compact:!0,eyebrow:"Launch list",headline:"Not ready to buy today?",body:"Join the English launch list for checkout openings, launch offers, and short examples of serious MindCanvas workflows.",buttonText:"Notify me",sourceTag:"pricing"})]})}function v({label:e,price:o,suffix:u,body:l,note:n,lines:c,action:p,icon:r,actionClass:a,busy:h,status:s,testId:i,onAction:y}){return t.jsxs("article",{className:"pricing-card pricing-card--detailed",children:[t.jsx("div",{className:"card-label",children:e}),t.jsxs("h2",{children:[o,u&&t.jsx("span",{children:u})]}),t.jsx("p",{children:l}),n&&t.jsx("div",{className:"pricing-note",children:n}),t.jsx("ul",{children:c.map(S=>t.jsx("li",{children:S},S))}),t.jsxs("button",{className:`btn pricing-card-action ${a||"btn-secondary"}`,type:"button",disabled:h,onClick:y,"data-testid":i,children:[r&&t.jsx(r,{size:16,className:h?"spin-icon":void 0}),p]}),s&&t.jsx("p",{className:"pricing-status","data-testid":i?`${i}-status`:void 0,children:s})]})}export{te as PricingPage};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/supabaseAuthAdapter-Bptc9G29.js","assets/app-runtime-xD2Z3NdN.js","assets/MindCanvas-DzF1ysAo.js","assets/vendor-react-BXzpOyCS.js","assets/storage-CWUvUZC-.js","assets/canvas-runtime-hH7qY6Be.js","assets/vendor-icons-D0xKCnZS.js","assets/runtimeSettingsPersistenceProjection-BoNWmYjU.js","assets/vendor-msgpack-BE8aAsr3.js","assets/toolHandoff-D5e5f7t5.js","assets/executionModeSettings-NJqurj-o.js","assets/MindCanvas-CyVe9w7B.css","assets/PlanMasterPage-Dc9jGdQ6.js","assets/PlanMasterPage-CJ36rep-.css","assets/PricingPage-Dj176hyN.js","assets/LaunchLeadCapture-DhMxzfOQ.js","assets/LaunchLeadCapture-CiRI1shz.css","assets/pricingCheckoutShell-O-DnwmbU.js","assets/PricingPage-Cg_0i_ZR.css","assets/AuthPages-BqtMoLaY.js","assets/AuthPages-DFGWKWuB.css","assets/ToolPages-CmVbLrAo.js","assets/marketingTools-DN_rnHeB.js","assets/ToolPages-DIB187pZ.css","assets/YouTubeSearchPage-DSjCA5Xo.js","assets/YouTubeSearchPage-IPPa_BIH.css","assets/CompanyCorePage-BSHaECkm.js","assets/CompanyCorePage-ChBnq1ve.css","assets/AdminDashboardPage-DZPNwG9B.js","assets/AdminDashboardPage-B2vz2Px9.css","assets/CodePage-BM1f1VnB.js","assets/code-agent-runtime-B5PPZd1t.js","assets/CodePage-Bncc352E.css","assets/ExecutionModePage-D3oo7YEk.js","assets/ExecutionModePage-TLuld9l3.css","assets/MarketingHome-ClbFHVzc.js","assets/MarketingHome-DPzaYzA_.css","assets/AppSidebar-CRfPcQiC.js"])))=>i.map(i=>d[i]);
2
+ var V=Object.defineProperty;var W=(e,t,o)=>t in e?V(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var x=(e,t,o)=>W(e,typeof t!="symbol"?t+"":t,o);import{r as i,j as n,R as q}from"./vendor-react-BXzpOyCS.js";import{R as g,i as G}from"./app-runtime-xD2Z3NdN.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))r(a);new MutationObserver(a=>{for(const c of a)if(c.type==="childList")for(const u of c.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&r(u)}).observe(document,{childList:!0,subtree:!0});function o(a){const c={};return a.integrity&&(c.integrity=a.integrity),a.referrerPolicy&&(c.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?c.credentials="include":a.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function r(a){if(a.ep)return;a.ep=!0;const c=o(a);fetch(a.href,c)}})();const Y="modulepreload",X=function(e){return"/"+e},U={},f=function(t,o,r){let a=Promise.resolve();if(o&&o.length>0){let u=function(p){return Promise.all(p.map(d=>Promise.resolve(d).then(b=>({status:"fulfilled",value:b}),b=>({status:"rejected",reason:b}))))};document.getElementsByTagName("link");const s=document.querySelector("meta[property=csp-nonce]"),h=(s==null?void 0:s.nonce)||(s==null?void 0:s.getAttribute("nonce"));a=u(o.map(p=>{if(p=X(p),p in U)return;U[p]=!0;const d=p.endsWith(".css"),b=d?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${p}"]${b}`))return;const m=document.createElement("link");if(m.rel=d?"stylesheet":Y,d||(m.as="script"),m.crossOrigin="",m.href=p,h&&m.setAttribute("nonce",h),document.head.appendChild(m),d)return new Promise((y,w)=>{m.addEventListener("load",y),m.addEventListener("error",()=>w(new Error(`Unable to preload CSS for ${p}`)))})}))}function c(u){const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=u,window.dispatchEvent(s),!s.defaultPrevented)throw u}return a.then(u=>{for(const s of u||[])s.status==="rejected"&&c(s.reason);return t().catch(c)})},I="mindexec-local-auth-shell-v2",J="mindexec-react-auth-shell-session-changed",Q="supabase-callback@mindexec.local";function Z(e){const t=e;return!!(t&&typeof t=="object"&&typeof t.userId=="string"&&typeof t.email=="string"&&t.provider==="Google"&&typeof t.signedInAt=="string")}function ee(e){const t=e.toLowerCase();return t.includes("access_token=")||t.includes("refresh_token=")||t.includes("provider_token=")||t.includes("provider_refresh_token=")||t.includes("expires_in=")||t.includes("token_type=")||t.includes("type=recovery")||t.includes("type=invite")||t.includes("error=")||t.includes("error_description=")||t.includes("code=")}function te(e){const t=e.split("=",2)[0].toLowerCase();return t==="access_token"||t==="refresh_token"||t==="provider_token"||t==="provider_refresh_token"||t==="expires_in"||t==="expires_at"||t==="token_type"||t==="type"||t==="error"||t==="error_code"||t==="error_description"||t==="code"}function D(e){const t=e.trim().replace(/^[?#]/,"");return t?t.split("&").filter(Boolean).filter(r=>!te(r)).join("&"):""}function oe(e){const t=(e||"").trim();if(!t||!t.startsWith("/")||t.startsWith("//")||t.includes("\\"))return"";try{const o=new URL(t,window.location.origin);return o.origin!==window.location.origin?"":`${o.pathname}${o.search}${o.hash}`}catch{return""}}function ae(e){const t=new URL(e,window.location.origin),o=`${t.search}&${t.hash}`,r=ee(o);if(!r)return{hasAuthPayload:!1,cleanedPath:`${t.pathname}${t.search}${t.hash}`,shouldCreateLocalShell:!1,shouldRouteToMindCanvas:!1,hasError:!1,hasRecovery:!1,hasInvite:!1,hasCode:!1,hasToken:!1};const a=D(t.search),c=D(t.hash),u=/(?:^|[&#?])error=/i.test(o)||/(?:^|[&#?])error_description=/i.test(o),s=/(?:^|[&#?])type=recovery(?:&|$)/i.test(o),h=/(?:^|[&#?])type=invite(?:&|$)/i.test(o),p=/(?:^|[&#?])code=/i.test(o),d=/(?:^|[&#?])(?:access_token|refresh_token)=/i.test(o),b=oe(t.searchParams.get("next"));let m=`${t.pathname}${a?`?${a}`:""}${c?`#${c}`:""}`;const y=t.pathname==="/"||t.pathname==="",w=t.pathname==="/login",E=!u&&!s&&!h&&(p||d),l=E&&!b&&(y||w);if(b&&E)m=b;else if(l){const v=new URLSearchParams(a);v.delete("next");const j=v.toString();m=`/mindcanvas${j?`?${j}`:""}`}return{hasAuthPayload:r,cleanedPath:m,shouldCreateLocalShell:!u&&!s&&!h&&(p||d),shouldRouteToMindCanvas:l,hasError:u,hasRecovery:s,hasInvite:h,hasCode:p,hasToken:d}}function ne(e){return`local-google-${e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-")||"user"}`}function re(e){try{window.dispatchEvent(new CustomEvent(J,{detail:{signedIn:!!e,source:(e==null?void 0:e.source)??"cleared",hasEmail:!!(e!=null&&e.email)}}))}catch{}}function ot(){try{const e=window.localStorage.getItem(I);if(!e)return null;const t=JSON.parse(e);return Z(t)?t:null}catch{return null}}function se(e="builder@mindexec.local",t="manual-google-shell"){const o=e.trim().toLowerCase()||"builder@mindexec.local",r={userId:typeof crypto<"u"&&"randomUUID"in crypto?`local-google-${crypto.randomUUID()}`:ne(o),email:o,provider:"Google",signedInAt:new Date().toISOString(),source:t};return O(r)}function O(e){try{window.localStorage.setItem(I,JSON.stringify(e))}catch{}return g.emit(e.source==="supabase-provider-session"?"auth.supabase.sessionShell":"auth.google.localShell",{provider:e.provider,hasEmail:!!e.email,source:e.source}),re(e),e}const ie={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},le="mindexec-production-adapter-runtime-env-loaded";function H(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function k(e,t){let o=e;for(const r of t){if(!H(o))return"";o=o[r]}return typeof o=="string"?o.trim():""}function ce(e,t){let o=e;for(const r of t){if(!H(o))return!1;o=o[r]}return typeof o=="boolean"?o:typeof o=="string"?o.trim().toLowerCase()==="true":!1}function S(e,t,o){o&&(e[t]=o)}function de(e){return ce(e,["ProjectStorage","CloudProjectsEnabled"])}function ue(e){const t={},o=de(e),r=k(e,["Supabase","Url"]),a=k(e,["Supabase","PublishableKey"])||k(e,["Supabase","Key"])||k(e,["Supabase","AnonKey"]),c=k(e,["CloudflareR2","PublicBaseUrl"])||k(e,["CloudStorage","PublicBaseUrl"])||k(e,["CloudStorage","PublicUrl"]);return o&&(S(t,"VITE_MINDEXEC_SUPABASE_URL",r),S(t,"VITE_MINDEXEC_SUPABASE_PUBLISHABLE_KEY",a)),S(t,"VITE_MINDEXEC_CLOUD_STORAGE_PUBLIC_URL",c),t}function pe(){return ie??{}}function B(){return typeof window>"u"?{}:window.__MINDEXEC_PRODUCTION_ADAPTER_RUNTIME_ENV__??{}}function me(e){if(!(typeof window>"u")){window.__MINDEXEC_PRODUCTION_ADAPTER_RUNTIME_ENV__={...B(),...e};try{window.dispatchEvent(new CustomEvent(le,{detail:{keys:Object.keys(e).sort()}}))}catch{}}}function _(){return{...B(),...pe()}}let T=null;async function he(e=typeof fetch=="function"?fetch.bind(globalThis):null){return typeof window>"u"||!e?_():T||(T=(async()=>{try{const t=await e("/appsettings.json",{cache:"no-store",credentials:"same-origin"});if(!t.ok)return g.emit("productionAdapter.runtimeConfig.skipped",{source:"appsettings.json",reason:`http-${t.status}`}),_();const o=t.headers.get("content-type")||"";if(o&&!o.toLowerCase().includes("json"))return g.emit("productionAdapter.runtimeConfig.skipped",{source:"appsettings.json",reason:"non-json-response"}),_();const r=await t.json(),a=ue(r);return me(a),g.emit("productionAdapter.runtimeConfig.loaded",{source:"appsettings.json",keys:Object.keys(a).sort()}),_()}catch(t){return g.emit("productionAdapter.runtimeConfig.skipped",{source:"appsettings.json",reason:t instanceof Error?t.message:String(t)}),_()}})(),T)}function ge({onRouteReplaced:e}){const t=i.useRef(!1);return i.useEffect(()=>{if(t.current)return;t.current=!0,(async()=>{const r=window.location.href,a=ae(r);if(!a.hasAuthPayload)return;const c=_();let u={mode:"not-checked",canAttempt:!1},s=!1,h="",p=!1,d=null;if(!a.hasError&&!a.hasRecovery&&!a.hasInvite&&(a.hasCode||a.hasToken)){const{completeSupabaseAuthCallback:m,resolveSupabaseAuthAdapterState:y}=await f(async()=>{const{completeSupabaseAuthCallback:w,resolveSupabaseAuthAdapterState:E}=await import("./supabaseAuthAdapter-Bptc9G29.js").then(l=>l.c);return{completeSupabaseAuthCallback:w,resolveSupabaseAuthAdapterState:E}},__vite__mapDeps([0,1]));u=y(c),p=u.canAttempt,d=m}if(p&&d)try{const m=await d(c,r);m.session&&(O({...m.session,source:"supabase-provider-session"}),s=!0)}catch(m){h=m instanceof Error?m.message:String(m)}else a.shouldCreateLocalShell&&se(Q,"supabase-callback-shell");g.emit(a.hasError||h?"auth.callback.error":"auth.callback.cleaned",{cleanedPath:a.cleanedPath,shouldCreateLocalShell:!p&&a.shouldCreateLocalShell,shouldRouteToMindCanvas:a.shouldRouteToMindCanvas,hasCode:a.hasCode,hasToken:a.hasToken,hasRecovery:a.hasRecovery,hasInvite:a.hasInvite,providerMode:u.mode,providerAttempted:p,providerSessionCreated:s,providerError:h});const b=`${window.location.pathname}${window.location.search}${window.location.hash}`;a.cleanedPath!==b&&(window.history.replaceState({authCallbackCleaned:!0},"",a.cleanedPath),e("auth-callback-bootstrap"))})()},[e]),null}class fe extends i.Component{constructor(){super(...arguments);x(this,"state",{error:null});x(this,"retry",()=>{this.setState({error:null}),g.emit("runtime.errorBoundary.reset",{resetKey:this.props.resetKey,reason:"manual-retry"})})}static getDerivedStateFromError(o){return{error:o}}componentDidCatch(o,r){const a=(o==null?void 0:o.message)||"Unknown runtime error.";g.emit("runtime.errorBoundary.caught",{resetKey:this.props.resetKey,message:a,stack:(o==null?void 0:o.stack)||"",componentStack:r.componentStack}),console.error("[LoggingErrorBoundary] Unhandled React error.",o,r)}componentDidUpdate(o){o.resetKey!==this.props.resetKey&&this.state.error&&(this.setState({error:null}),g.emit("runtime.errorBoundary.reset",{from:o.resetKey,to:this.props.resetKey,reason:"route-change"}))}render(){const{error:o}=this.state;return o?n.jsx("div",{className:"page runtime-error-page","data-testid":"runtime-error-boundary","data-error-boundary-reset-key":this.props.resetKey,children:n.jsxs("section",{className:"execution-panel",children:[n.jsx("div",{className:"eyebrow",children:"Runtime Guard"}),n.jsx("h1",{children:"Something broke inside this React surface."}),n.jsx("p",{children:"The error was captured locally so the whole app shell can stay recoverable."}),n.jsxs("div",{className:"runtime-error-message","data-testid":"runtime-error-boundary-message",children:[n.jsx("span",{className:"runtime-error-symbol","aria-hidden":"true",children:"!"}),n.jsx("span",{children:o.message||"Unknown runtime error."})]}),n.jsxs("div",{className:"action-row",children:[n.jsx("button",{className:"btn btn-primary",type:"button",onClick:this.retry,"data-testid":"runtime-error-boundary-retry",children:"Retry"}),this.props.onNavigateHome&&n.jsx("button",{className:"btn btn-secondary",type:"button",onClick:this.props.onNavigateHome,"data-testid":"runtime-error-boundary-home",children:"MindCanvas"})]})]})}):this.props.children}}const be="main",ye="h1",A="data-route-focus-target",ve=30;function we({route:e,rootSelector:t=be,selector:o=ye}){return i.useEffect(()=>{let r=!1,a=0;const c=u=>{if(r)return;const s=document.querySelector(t),h=(s==null?void 0:s.querySelector(o))??document.querySelector(o);for(const p of document.querySelectorAll(`[${A}="true"]`))p.removeAttribute(A);if(!h){if(u<ve){a=window.requestAnimationFrame(()=>c(u+1));return}g.emit("route.focusOnNavigate.skipped",{route:e,selector:o,reason:"missing-target",attempts:u});return}h.hasAttribute("tabindex")||h.setAttribute("tabindex","-1"),h.setAttribute(A,"true"),h.focus({preventScroll:!1}),g.emit("route.focusOnNavigate.applied",{route:e,selector:o,tagName:h.tagName.toLowerCase(),text:(h.textContent||"").trim().slice(0,90),attempts:u})};return a=window.requestAnimationFrame(()=>c(1)),()=>{r=!0,window.cancelAnimationFrame(a)}},[e,t,o]),null}const ke=[{key:"markdown-viewer",liveUrl:"https://mdview-die.pages.dev",hostnames:["mdview.pages.dev","mdview-die.pages.dev","mdview.mindexec.io","markdown-viewer.pages.dev","markdown-viewer.mindexec.io"],title:"Free Online Markdown Viewer",heroEyebrow:"Free online markdown viewer",heroTitle:"Preview Markdown instantly in your browser",heroSubtitle:"Paste or open a markdown file, review the rendered result, and move bigger writing work into MindCanvas when it needs structure.",privacyNote:"Runs locally in your browser. No upload required."},{key:"bulk-markdown-viewer",liveUrl:"https://bulkmd.pages.dev",hostnames:["bulkmd.pages.dev","bulkmd.mindexec.io","bulk-markdown-viewer.pages.dev","bulk-markdown-viewer.mindexec.io"],title:"Bulk Markdown Viewer",heroEyebrow:"Bulk markdown preview",heroTitle:"Review multiple markdown snippets at once",heroSubtitle:"Paste a stack of markdown entries and scan them locally before turning the useful pieces into a MindCanvas board.",privacyNote:"Local browser-only preview. No account and no upload step."},{key:"readme-previewer",liveUrl:"https://readme-1o4.pages.dev",hostnames:["readme.pages.dev","readme-1o4.pages.dev","readme-previewer.pages.dev","readme.mindexec.io","readme-previewer.mindexec.io"],title:"README Previewer",heroEyebrow:"README previewer",heroTitle:"Preview README markdown before you publish",heroSubtitle:"Check headings, tables, links, and launch notes quickly, then keep bigger documentation work organized in MindCanvas.",privacyNote:"Local preview for README text. No repository access required."},{key:"markdown-to-html",liveUrl:"https://md2html-4r7.pages.dev",hostnames:["md2html.pages.dev","md2html-4r7.pages.dev","md2html.mindexec.io","markdown-to-html.pages.dev","markdown-to-html.mindexec.io"],title:"Markdown to HTML Preview",heroEyebrow:"Markdown to HTML",heroTitle:"Turn markdown into clean HTML preview",heroSubtitle:"Render markdown locally, copy the HTML shape, and move reusable publishing notes into MindCanvas.",privacyNote:"Conversion runs in-browser and keeps your text local."},{key:"markdown-outline",liveUrl:"https://mdoutln.pages.dev",hostnames:["mdoutln.pages.dev","mdoutln.mindexec.io","markdown-outline.pages.dev","markdown-outline.mindexec.io"],title:"Markdown Outline Generator",heroEyebrow:"Markdown outline generator",heroTitle:"Extract a document outline from markdown",heroSubtitle:"Scan headings, section depth, and missing structure before your document becomes a larger project.",privacyNote:"Outline extraction runs locally in this browser."},{key:"markdown-table-formatter",liveUrl:"https://mdtable-3ik.pages.dev",hostnames:["mdtable.pages.dev","mdtable-3ik.pages.dev","mdtable.mindexec.io","markdown-table-formatter.pages.dev","markdown-table-formatter.mindexec.io"],title:"Markdown Table Formatter",heroEyebrow:"Markdown table formatter",heroTitle:"Clean up markdown tables locally",heroSubtitle:"Paste a rough markdown table and get a cleaner version for docs, READMEs, and launch notes.",privacyNote:"Table formatting happens locally with no upload."},{key:"markdown-link-checker",liveUrl:"https://markdown-link-checker.pages.dev",hostnames:["mdcheck.pages.dev","markdown-link-checker.pages.dev","mdcheck.mindexec.io","markdown-link-checker.mindexec.io"],title:"Markdown Link Checker",heroEyebrow:"Markdown link checker",heroTitle:"Catch risky markdown links before publishing",heroSubtitle:"Find empty, localhost, JavaScript, and suspicious links locally before a README or docs page goes live.",privacyNote:"Link checks run locally against the pasted markdown."},{key:"browser-notepad",liveUrl:"https://quickpad.pages.dev",hostnames:["quickpad.pages.dev","quickpad.mindexec.io","browser-notepad.pages.dev","browser-notepad.mindexec.io"],title:"Browser Notepad",heroEyebrow:"Browser notepad",heroTitle:"Write quick notes without a sign-in",heroSubtitle:"Capture rough thoughts locally, then move the notes worth keeping into MindCanvas.",privacyNote:"Notes are stored locally in this browser unless you copy them elsewhere."},{key:"clipboard-board",liveUrl:"https://clipbrd.pages.dev",hostnames:["clipbrd.pages.dev","clipbrd.mindexec.io","clipboard-board.pages.dev","clipboard-board.mindexec.io"],title:"Local Clipboard Board",heroEyebrow:"Local clipboard board",heroTitle:"Collect snippets into a small local board",heroSubtitle:"Paste short ideas, snippets, and fragments into one local surface before promoting the useful set to MindCanvas.",privacyNote:"Clipboard notes stay local to this browser session."}];function M(e){const t=e.toLowerCase().replace(/^www\./,"");return ke.find(o=>o.hostnames.some(r=>r.toLowerCase()===t))}const Pe={enabled:!1,hideAppChrome:!0,allowMindCanvasRoute:!1,homeRoute:"/",toolKey:"",heroEyebrow:"Free local tool",heroTitle:"",heroSubtitle:"",primaryCtaText:"Open MindCanvas",primaryCtaHref:"https://mindexec.pages.dev/mindcanvas",secondaryCtaText:"",secondaryCtaHref:"",publicUrl:"",privacyNote:"Runs locally in your browser. No login. No database storage."},Ee={enableAgentWorkspace:!0,enableCodeWorkspace:!0,enablePlanWorkspace:!0,enableCompanyCore:!0,enableExecutionTest:!0,enableTemplateStudio:!0,enableProjectPopup:!0,enablePromptDebugger:!0,enablePointBadge:!0,enableResetData:!0},P={variantKey:"platform",slug:"mindexec",brandName:"MindExec",productName:"MindCanvas",appTitle:"MindExec",workspaceNounSingular:"canvas",workspaceNounPlural:"canvases",signInTitle:"Welcome Back",signUpTitle:"Create Account",signInSubtitle:"Sign in to access your MindCanvas workspace.",signUpSubtitle:"Sign up to start organizing your ideas on a visual canvas.",primaryCheckoutProvider:"dodo",runtimeHost:"",canonicalHost:"mindexec.pages.dev",features:Ee,marketingTool:Pe};function K(e){const t=L(e),o=M(t);return o?xe(t,o):{...P,runtimeHost:t,canonicalHost:P.canonicalHost,features:{...P.features},marketingTool:{...P.marketingTool}}}function Ce(e){return e.marketingTool.enabled?N(e.marketingTool.homeRoute):"/"}function $(e){return e.marketingTool.enabled&&e.marketingTool.toolKey?`/tools/${e.marketingTool.toolKey}`:Ce(e)}function _e(e,t){const o=L(e.canonicalHost||e.runtimeHost);return o?`https://${o}${N(t)}`:""}function z(e,t){if(e.marketingTool.enabled&&!e.marketingTool.allowMindCanvasRoute&&(t==="/mindcanvas"||t==="/mindmap"))return!1;switch(t){case"/agent":return e.features.enableAgentWorkspace;case"/code":return e.features.enableCodeWorkspace;case"/planmaster":case"/planagent":return e.features.enablePlanWorkspace;case"/company-core":return e.features.enableCompanyCore;case"/execution-mode":return e.features.enableExecutionTest;default:return!0}}function Te(e,t){const o=z(e,t),r=$(e),a=o?t:r;return{route:t,enabled:o,fallbackRoute:r,canonicalUrl:_e(e,a),title:Se(e,a),description:Ae(e,a)}}function L(e){const t=String(e??"").trim();if(!t)return"";try{return new URL(t).hostname.trim().toLowerCase().replace(/^www\./,"")}catch{return t.trim().replace(/^https?:\/\//i,"").replace(/^www\./,"").replace(/\/+$/,"").toLowerCase()}}function N(e){if(!e||!String(e).trim())return"/";let t=String(e).trim();return t.startsWith("/")||(t=`/${t}`),t.length>1&&(t=t.replace(/\/+$/,"")),t||"/"}function xe(e,t){const o=L(t.liveUrl)||e;return{...P,variantKey:"mini-tool",slug:t.key,brandName:t.title,productName:t.title,appTitle:`${t.title} - Free local browser tool`,runtimeHost:e,canonicalHost:o,features:{...P.features,enableAgentWorkspace:!1,enableCodeWorkspace:!1,enablePlanWorkspace:!1,enableCompanyCore:!1,enableExecutionTest:!1,enableTemplateStudio:!1,enableProjectPopup:!1,enablePromptDebugger:!1,enablePointBadge:!1,enableResetData:!1},marketingTool:{...P.marketingTool,enabled:!0,hideAppChrome:!0,allowMindCanvasRoute:!1,homeRoute:"/",toolKey:t.key,heroEyebrow:t.heroEyebrow,heroTitle:t.heroTitle,heroSubtitle:t.heroSubtitle,primaryCtaText:"Open MindCanvas",primaryCtaHref:"https://mindexec.pages.dev/mindcanvas",secondaryCtaText:"More free tools",secondaryCtaHref:"https://mindexec.pages.dev/tools",publicUrl:t.liveUrl,privacyNote:t.privacyNote}}}function Se(e,t){if(e.marketingTool.enabled&&t.startsWith("/tools/"))return e.appTitle;switch(t){case"/mindcanvas":case"/mindmap":return"MindCanvas | MindExec";case"/planmaster":case"/planagent":return"PlanMaster | MindExec";case"/pricing":return"MindExec Pricing";case"/login":return e.signInTitle;case"/forgot-password":return"Reset your MindExec password";case"/reset-password":return"Set a new MindExec password";case"/tools":return"Free Browser Tools | MindExec";case"/youtube":return"YouTube Capture | MindExec";case"/code":return"CodeMaster | MindExec";case"/agent":return"Agent Workspace | MindExec";case"/execution-mode":return"Execution Mode | MindExec";case"/company-core":return"Company Core | MindExec";case"/admin/dashboard":return"Admin Dashboard | MindExec";case"/not-found":return"Content not found | MindExec";case"/":default:return e.appTitle}}function Ae(e,t){if(e.marketingTool.enabled)return e.marketingTool.heroSubtitle||e.marketingTool.privacyNote;switch(t){case"/mindcanvas":case"/mindmap":return"MindCanvas keeps notes, assets, AI tasks, and execution evidence together on a local-first visual board.";case"/planmaster":case"/planagent":return"PlanMaster turns goals into practical plans, stages, and execution checklists.";case"/pricing":return"MindExec pricing for free local tools and paid MindCanvas project workflows.";case"/tools":return"Free local browser tools that feed larger MindExec and MindCanvas workflows.";case"/code":case"/agent":return"CodeMaster previews code workflows and adapter-gated agent execution for local projects.";case"/execution-mode":return"Execution Mode tests deterministic browser-local Concept IR before live adapters are connected.";case"/company-core":return"Company Core organizes SaaS blueprint, growth, approval, and publishing decisions.";default:return"MindExec is an AI execution canvas for solo builders, researchers, developers, and creators."}}const Re=i.lazy(()=>f(async()=>{const{MindCanvas:e}=await import("./MindCanvas-DzF1ysAo.js");return{MindCanvas:e}},__vite__mapDeps([2,3,4,5,1,6,7,8,0,9,10,11])).then(({MindCanvas:e})=>({default:e}))),Me=i.lazy(()=>f(async()=>{const{PlanMasterPage:e}=await import("./PlanMasterPage-Dc9jGdQ6.js");return{PlanMasterPage:e}},__vite__mapDeps([12,3,4,5,1,6,7,13])).then(({PlanMasterPage:e})=>({default:e}))),Le=i.lazy(()=>f(async()=>{const{PricingPage:e}=await import("./PricingPage-Dj176hyN.js");return{PricingPage:e}},__vite__mapDeps([14,3,15,1,6,16,17,0,18])).then(({PricingPage:e})=>({default:e}))),Ne=i.lazy(()=>f(async()=>{const{LoginPage:e}=await import("./AuthPages-BqtMoLaY.js");return{LoginPage:e}},__vite__mapDeps([19,3,17,1,0,6,20])).then(({LoginPage:e})=>({default:e}))),je=i.lazy(()=>f(async()=>{const{ForgotPasswordPage:e}=await import("./AuthPages-BqtMoLaY.js");return{ForgotPasswordPage:e}},__vite__mapDeps([19,3,17,1,0,6,20])).then(({ForgotPasswordPage:e})=>({default:e}))),Ue=i.lazy(()=>f(async()=>{const{ResetPasswordPage:e}=await import("./AuthPages-BqtMoLaY.js");return{ResetPasswordPage:e}},__vite__mapDeps([19,3,17,1,0,6,20])).then(({ResetPasswordPage:e})=>({default:e}))),De=i.lazy(()=>f(async()=>{const{ToolsDirectoryPage:e}=await import("./ToolPages-CmVbLrAo.js");return{ToolsDirectoryPage:e}},__vite__mapDeps([21,3,22,5,1,6,9,23])).then(({ToolsDirectoryPage:e})=>({default:e}))),Ie=i.lazy(()=>f(async()=>{const{MarketingToolPage:e}=await import("./ToolPages-CmVbLrAo.js");return{MarketingToolPage:e}},__vite__mapDeps([21,3,22,5,1,6,9,23])).then(({MarketingToolPage:e})=>({default:e}))),Oe=i.lazy(()=>f(async()=>{const{YouTubeSearchPage:e}=await import("./YouTubeSearchPage-DSjCA5Xo.js");return{YouTubeSearchPage:e}},__vite__mapDeps([24,3,5,1,6,9,25])).then(({YouTubeSearchPage:e})=>({default:e}))),He=i.lazy(()=>f(async()=>{const{CompanyCorePage:e}=await import("./CompanyCorePage-BSHaECkm.js");return{CompanyCorePage:e}},__vite__mapDeps([26,3,5,1,6,27])).then(({CompanyCorePage:e})=>({default:e}))),Be=i.lazy(()=>f(async()=>{const{AdminDashboardPage:e}=await import("./AdminDashboardPage-DZPNwG9B.js");return{AdminDashboardPage:e}},__vite__mapDeps([28,3,0,1,6,29])).then(({AdminDashboardPage:e})=>({default:e}))),Ke=i.lazy(()=>f(async()=>{const{CodePage:e}=await import("./CodePage-BM1f1VnB.js");return{CodePage:e}},__vite__mapDeps([30,3,5,1,6,10,7,31,32])).then(({CodePage:e})=>({default:e}))),$e=i.lazy(()=>f(async()=>{const{ExecutionModePage:e}=await import("./ExecutionModePage-D3oo7YEk.js");return{ExecutionModePage:e}},__vite__mapDeps([33,3,5,1,6,10,7,34])).then(({ExecutionModePage:e})=>({default:e}))),ze=i.lazy(()=>f(async()=>{const{MarketingHome:e}=await import("./MarketingHome-ClbFHVzc.js");return{MarketingHome:e}},__vite__mapDeps([35,3,15,1,6,16,22,36])).then(({MarketingHome:e})=>({default:e}))),Fe=i.lazy(()=>f(async()=>{const{AppSidebar:e}=await import("./AppSidebar-CRfPcQiC.js");return{AppSidebar:e}},__vite__mapDeps([37,3,6,1])).then(({AppSidebar:e})=>({default:e}))),Ve=new Set(["/","/mindcanvas","/planmaster","/tools","/youtube","/code","/pricing","/company-core","/login"]);function We(e,t=window.location.hostname){const o=M(t);if(o&&(e==="/"||e==="/tools"))return`/tools/${o.key}`;if(e==="/agent")return"/agent";if(e==="/forgot-password")return"/forgot-password";if(e==="/reset-password")return"/reset-password";let r="/not-found";return e==="/"?r="/":e==="/mindmap"?r="/mindmap":e==="/planagent"?r="/planagent":e==="/execution-mode"?r="/execution-mode":e==="/not-found"?r="/not-found":e.startsWith("/tools/")&&(r=e),Ve.has(e)?r=e:e==="/admin/dashboard"&&(r="/admin/dashboard"),r}function qe(e,t=window.location.hostname){const o=K(t),r=We(e,t);return z(o,r)?r:$(o)}function F(e,t=window.location.hostname){const o=qe(e,t);return{route:o,stalePath:o==="/not-found"&&e!=="/not-found"?e:""}}function R(e){const t=window.location.pathname,{route:o,stalePath:r}=F(t,window.location.hostname);return o==="/not-found"&&t!=="/not-found"?(window.history.replaceState({stalePath:t},"","/not-found"),g.emit("route.notFound.normalize",{source:e,from:r||t,to:"/not-found"})):N(t)!==o&&!(t==="/"&&o.startsWith("/tools/"))&&!(t==="/tools"&&o.startsWith("/tools/"))&&(window.history.replaceState({stalePath:t},"",o),g.emit("productProfile.route.fallback",{source:e,from:t,to:o})),o}function C(e,t,o){if(o===void 0){delete e.dataset[t];return}e.dataset[t]=o}function Ge(){const e=i.useMemo(()=>K(window.location.hostname),[]),t=i.useMemo(()=>M(window.location.hostname),[]),[o,r]=i.useState(()=>F(window.location.pathname,window.location.hostname).route),a=o==="/mindcanvas"||o==="/mindmap",[c,u]=i.useState(()=>a),s=i.useMemo(()=>Te(e,o),[e,o]),[h,p]=i.useState([]);i.useEffect(()=>{r(R("initial"));const l=()=>r(R("popstate"));return window.addEventListener("popstate",l),()=>window.removeEventListener("popstate",l)},[]);const d=i.useCallback(l=>{window.history.pushState({},"",l),r(l)},[]),b=i.useCallback(l=>{r(R(l))},[]);i.useEffect(()=>{!a||c||(u(!0),g.emit("route.keepAlive.mindcanvas",{route:o,mounted:!0,source:"route-activate"}))},[a,c,o]);const m=o==="/planmaster"||o==="/planagent",y=o.startsWith("/tools/")?o.slice(7):null,w=e.marketingTool.enabled&&e.marketingTool.hideAppChrome,E=c||a;return i.useEffect(()=>{const l=document.documentElement,v={productProfile:l.dataset.productProfile,productVariant:l.dataset.productVariant,canonicalHost:l.dataset.canonicalHost,routeCanonical:l.dataset.routeCanonical,routeEnabled:l.dataset.routeEnabled,marketingToolKey:l.dataset.marketingToolKey};return l.dataset.productProfile=e.slug,l.dataset.productVariant=e.variantKey,l.dataset.canonicalHost=e.canonicalHost,l.dataset.routeCanonical=s.canonicalUrl,l.dataset.routeEnabled=s.enabled?"true":"false",e.marketingTool.toolKey?l.dataset.marketingToolKey=e.marketingTool.toolKey:delete l.dataset.marketingToolKey,g.emit("productProfile.route.applied",{route:o,variantKey:e.variantKey,slug:e.slug,canonicalHost:e.canonicalHost,canonicalUrl:s.canonicalUrl,routeEnabled:s.enabled,fallbackRoute:s.fallbackRoute,marketingToolKey:e.marketingTool.toolKey}),()=>{C(l,"productProfile",v.productProfile),C(l,"productVariant",v.productVariant),C(l,"canonicalHost",v.canonicalHost),C(l,"routeCanonical",v.routeCanonical),C(l,"routeEnabled",v.routeEnabled),C(l,"marketingToolKey",v.marketingToolKey)}},[e.canonicalHost,e.marketingTool.toolKey,e.slug,e.variantKey,o,s.canonicalUrl,s.enabled,s.fallbackRoute]),n.jsxs("div",{className:`${a?"app app--canvas":"app"} ${w?"app--mini-tool":""}`,"data-product-profile":e.slug,"data-product-variant":e.variantKey,"data-canonical-host":e.canonicalHost,"data-route-enabled":s.enabled?"true":"false","data-route-canonical":s.canonicalUrl,"data-marketing-tool-key":e.marketingTool.toolKey||void 0,children:[!w&&n.jsx(i.Suspense,{fallback:n.jsx(Xe,{}),children:n.jsx(Fe,{route:o,navigate:d,canvasActions:a?h:[]})}),n.jsxs("main",{className:"app-main",children:[n.jsx(ge,{onRouteReplaced:b}),n.jsx(we,{route:o}),n.jsx(fe,{resetKey:o,onNavigateHome:()=>d("/mindcanvas"),children:n.jsxs(i.Suspense,{fallback:n.jsx(Ye,{route:o}),children:[o==="/"&&n.jsx(ze,{navigate:d}),E&&n.jsx("section",{className:"route-keepalive route-keepalive--mindcanvas","data-testid":"mindcanvas-keepalive-host","data-route-keepalive":"mindcanvas","data-route-active":a?"true":"false",hidden:!a,"aria-hidden":a?void 0:"true",children:n.jsx(Re,{navigate:d,onSidebarActionsChange:p})}),m&&n.jsx(Me,{navigate:d}),o==="/pricing"&&n.jsx(Le,{navigate:d}),o==="/login"&&n.jsx(Ne,{navigate:d}),o==="/forgot-password"&&n.jsx(je,{navigate:d}),o==="/reset-password"&&n.jsx(Ue,{navigate:d}),o==="/tools"&&n.jsx(De,{navigate:d}),y&&n.jsx(Ie,{toolKey:y,navigate:d,miniHost:(t==null?void 0:t.key)===y}),o==="/youtube"&&n.jsx(Oe,{navigate:d}),(o==="/code"||o==="/agent")&&n.jsx(Ke,{}),o==="/execution-mode"&&n.jsx($e,{}),o==="/not-found"&&n.jsx(Je,{navigate:d}),o==="/company-core"&&n.jsx(He,{}),o==="/admin/dashboard"&&n.jsx(Be,{})]})})]})]})}function Ye({route:e}){return i.useEffect(()=>{g.emit("route.lazyFallback.rendered",{route:e})},[e]),n.jsxs("div",{className:"route-lazy-fallback","data-testid":"route-lazy-fallback","data-route":e,children:[n.jsx("span",{className:"route-lazy-spinner","aria-hidden":"true"}),n.jsx("span",{children:"Loading MindExec surface..."})]})}function Xe(){return n.jsxs("aside",{className:"app-sidebar app-sidebar--loading","aria-label":"MindExec navigation loading",children:[n.jsx("div",{className:"sidebar-brand sidebar-placeholder"}),n.jsx("div",{className:"sidebar-divider"}),n.jsx("nav",{className:"sidebar-nav",children:Array.from({length:8},(e,t)=>n.jsx("div",{className:"sidebar-icon sidebar-placeholder"},t))}),n.jsx("div",{className:"sidebar-spacer"}),n.jsx("div",{className:"sidebar-icon sidebar-placeholder"})]})}function Je({navigate:e}){return n.jsx("div",{className:"page not-found-page",children:n.jsxs("section",{className:"execution-panel",children:[n.jsx("div",{className:"eyebrow",children:"Not Found"}),n.jsx("h1",{children:"Content not found."}),n.jsx("p",{children:"The route exists as a React shell so stale Blazor links land cleanly."}),n.jsx("button",{className:"btn btn-primary",type:"button",onClick:()=>e("/"),children:"Go home"})]})})}G();async function Qe(){await he(),q.createRoot(document.getElementById("root")).render(n.jsx(Ge,{}))}Qe();export{J as A,_ as a,I as b,se as c,ot as g,O as s};
@@ -11,7 +11,7 @@
11
11
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
12
12
  <link rel="manifest" href="/manifest.webmanifest" />
13
13
  <title>MindExec React</title>
14
- <script type="module" crossorigin src="/assets/index-B9m3XXKS.js"></script>
14
+ <script type="module" crossorigin src="/assets/index-Rjp0zHKN.js"></script>
15
15
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-BXzpOyCS.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/app-runtime-xD2Z3NdN.js">
17
17
  <link rel="stylesheet" crossorigin href="/assets/index-DFCCVWKg.css">
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/supabaseAuthAdapter-Bptc9G29.js","assets/app-runtime-xD2Z3NdN.js","assets/MindCanvas-yNsIO-lL.js","assets/vendor-react-BXzpOyCS.js","assets/storage-CWUvUZC-.js","assets/canvas-runtime-hH7qY6Be.js","assets/vendor-icons-D0xKCnZS.js","assets/runtimeSettingsPersistenceProjection-BoNWmYjU.js","assets/vendor-msgpack-BE8aAsr3.js","assets/toolHandoff-D5e5f7t5.js","assets/executionModeSettings-NJqurj-o.js","assets/MindCanvas-CyVe9w7B.css","assets/PlanMasterPage-Dc9jGdQ6.js","assets/PlanMasterPage-CJ36rep-.css","assets/PricingPage-DTVq8Lpn.js","assets/LaunchLeadCapture-DhMxzfOQ.js","assets/LaunchLeadCapture-CiRI1shz.css","assets/pricingCheckoutShell-O-DnwmbU.js","assets/PricingPage-Cg_0i_ZR.css","assets/AuthPages-qugPrJrG.js","assets/AuthPages-DFGWKWuB.css","assets/ToolPages-CmVbLrAo.js","assets/marketingTools-DN_rnHeB.js","assets/ToolPages-DIB187pZ.css","assets/YouTubeSearchPage-DSjCA5Xo.js","assets/YouTubeSearchPage-IPPa_BIH.css","assets/CompanyCorePage-BSHaECkm.js","assets/CompanyCorePage-ChBnq1ve.css","assets/AdminDashboardPage-B0bbZl9-.js","assets/AdminDashboardPage-B2vz2Px9.css","assets/CodePage-BM1f1VnB.js","assets/code-agent-runtime-B5PPZd1t.js","assets/CodePage-Bncc352E.css","assets/ExecutionModePage-D3oo7YEk.js","assets/ExecutionModePage-TLuld9l3.css","assets/MarketingHome-ClbFHVzc.js","assets/MarketingHome-DPzaYzA_.css","assets/AppSidebar-Bhg5y9-i.js"])))=>i.map(i=>d[i]);
2
- var F=Object.defineProperty;var V=(e,t,a)=>t in e?F(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var x=(e,t,a)=>V(e,typeof t!="symbol"?t+"":t,a);import{r as i,j as n,R as W}from"./vendor-react-BXzpOyCS.js";import{R as g,i as q}from"./app-runtime-xD2Z3NdN.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const d of o)if(d.type==="childList")for(const u of d.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&r(u)}).observe(document,{childList:!0,subtree:!0});function a(o){const d={};return o.integrity&&(d.integrity=o.integrity),o.referrerPolicy&&(d.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?d.credentials="include":o.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function r(o){if(o.ep)return;o.ep=!0;const d=a(o);fetch(o.href,d)}})();const G="modulepreload",Y=function(e){return"/"+e},U={},f=function(t,a,r){let o=Promise.resolve();if(a&&a.length>0){let u=function(p){return Promise.all(p.map(c=>Promise.resolve(c).then(y=>({status:"fulfilled",value:y}),y=>({status:"rejected",reason:y}))))};document.getElementsByTagName("link");const s=document.querySelector("meta[property=csp-nonce]"),h=(s==null?void 0:s.nonce)||(s==null?void 0:s.getAttribute("nonce"));o=u(a.map(p=>{if(p=Y(p),p in U)return;U[p]=!0;const c=p.endsWith(".css"),y=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${p}"]${y}`))return;const m=document.createElement("link");if(m.rel=c?"stylesheet":G,c||(m.as="script"),m.crossOrigin="",m.href=p,h&&m.setAttribute("nonce",h),document.head.appendChild(m),c)return new Promise((b,w)=>{m.addEventListener("load",b),m.addEventListener("error",()=>w(new Error(`Unable to preload CSS for ${p}`)))})}))}function d(u){const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=u,window.dispatchEvent(s),!s.defaultPrevented)throw u}return o.then(u=>{for(const s of u||[])s.status==="rejected"&&d(s.reason);return t().catch(d)})},I="mindexec-react-auth-shell-v1",X="mindexec-react-auth-shell-session-changed",J="supabase-callback@mindexec.local";function Q(e){const t=e;return!!(t&&typeof t=="object"&&typeof t.userId=="string"&&typeof t.email=="string"&&t.provider==="Google"&&typeof t.signedInAt=="string")}function Z(e){const t=e.toLowerCase();return t.includes("access_token=")||t.includes("refresh_token=")||t.includes("provider_token=")||t.includes("provider_refresh_token=")||t.includes("expires_in=")||t.includes("token_type=")||t.includes("type=recovery")||t.includes("type=invite")||t.includes("error=")||t.includes("error_description=")||t.includes("code=")}function ee(e){const t=e.split("=",2)[0].toLowerCase();return t==="access_token"||t==="refresh_token"||t==="provider_token"||t==="provider_refresh_token"||t==="expires_in"||t==="expires_at"||t==="token_type"||t==="type"||t==="error"||t==="error_code"||t==="error_description"||t==="code"}function D(e){const t=e.trim().replace(/^[?#]/,"");return t?t.split("&").filter(Boolean).filter(r=>!ee(r)).join("&"):""}function te(e){const t=(e||"").trim();if(!t||!t.startsWith("/")||t.startsWith("//")||t.includes("\\"))return"";try{const a=new URL(t,window.location.origin);return a.origin!==window.location.origin?"":`${a.pathname}${a.search}${a.hash}`}catch{return""}}function ae(e){const t=new URL(e,window.location.origin),a=`${t.search}&${t.hash}`,r=Z(a);if(!r)return{hasAuthPayload:!1,cleanedPath:`${t.pathname}${t.search}${t.hash}`,shouldCreateLocalShell:!1,shouldRouteToMindCanvas:!1,hasError:!1,hasRecovery:!1,hasInvite:!1,hasCode:!1,hasToken:!1};const o=D(t.search),d=D(t.hash),u=/(?:^|[&#?])error=/i.test(a)||/(?:^|[&#?])error_description=/i.test(a),s=/(?:^|[&#?])type=recovery(?:&|$)/i.test(a),h=/(?:^|[&#?])type=invite(?:&|$)/i.test(a),p=/(?:^|[&#?])code=/i.test(a),c=/(?:^|[&#?])(?:access_token|refresh_token)=/i.test(a),y=te(t.searchParams.get("next"));let m=`${t.pathname}${o?`?${o}`:""}${d?`#${d}`:""}`;const b=t.pathname==="/"||t.pathname==="",w=t.pathname==="/login",E=!u&&!s&&!h&&(p||c),l=E&&!y&&(b||w);if(y&&E)m=y;else if(l){const v=new URLSearchParams(o);v.delete("next");const j=v.toString();m=`/mindcanvas${j?`?${j}`:""}`}return{hasAuthPayload:r,cleanedPath:m,shouldCreateLocalShell:!u&&!s&&!h&&(p||c),shouldRouteToMindCanvas:l,hasError:u,hasRecovery:s,hasInvite:h,hasCode:p,hasToken:c}}function oe(e){return`local-google-${e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-")||"user"}`}function ne(e){try{window.dispatchEvent(new CustomEvent(X,{detail:{signedIn:!!e,source:(e==null?void 0:e.source)??"cleared",hasEmail:!!(e!=null&&e.email)}}))}catch{}}function et(){try{const e=window.localStorage.getItem(I);if(!e)return null;const t=JSON.parse(e);return Q(t)?t:null}catch{return null}}function re(e="builder@mindexec.local",t="manual-google-shell"){const a=e.trim().toLowerCase()||"builder@mindexec.local",r={userId:typeof crypto<"u"&&"randomUUID"in crypto?`local-google-${crypto.randomUUID()}`:oe(a),email:a,provider:"Google",signedInAt:new Date().toISOString(),source:t};return O(r)}function O(e){try{window.localStorage.setItem(I,JSON.stringify(e))}catch{}return g.emit(e.source==="supabase-provider-session"?"auth.supabase.sessionShell":"auth.google.localShell",{provider:e.provider,hasEmail:!!e.email,source:e.source}),ne(e),e}const se={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},ie="mindexec-production-adapter-runtime-env-loaded";function le(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function k(e,t){let a=e;for(const r of t){if(!le(a))return"";a=a[r]}return typeof a=="string"?a.trim():""}function S(e,t,a){a&&(e[t]=a)}function ce(e){const t={},a=k(e,["Supabase","Url"]),r=k(e,["Supabase","PublishableKey"])||k(e,["Supabase","Key"])||k(e,["Supabase","AnonKey"]),o=k(e,["CloudflareR2","PublicBaseUrl"])||k(e,["CloudStorage","PublicBaseUrl"])||k(e,["CloudStorage","PublicUrl"]);return S(t,"VITE_MINDEXEC_SUPABASE_URL",a),S(t,"VITE_MINDEXEC_SUPABASE_PUBLISHABLE_KEY",r),S(t,"VITE_MINDEXEC_CLOUD_STORAGE_PUBLIC_URL",o),t}function de(){return se??{}}function H(){return typeof window>"u"?{}:window.__MINDEXEC_PRODUCTION_ADAPTER_RUNTIME_ENV__??{}}function ue(e){if(!(typeof window>"u")){window.__MINDEXEC_PRODUCTION_ADAPTER_RUNTIME_ENV__={...H(),...e};try{window.dispatchEvent(new CustomEvent(ie,{detail:{keys:Object.keys(e).sort()}}))}catch{}}}function _(){return{...H(),...de()}}let T=null;async function pe(e=typeof fetch=="function"?fetch.bind(globalThis):null){return typeof window>"u"||!e?_():T||(T=(async()=>{try{const t=await e("/appsettings.json",{cache:"no-store",credentials:"same-origin"});if(!t.ok)return g.emit("productionAdapter.runtimeConfig.skipped",{source:"appsettings.json",reason:`http-${t.status}`}),_();const a=t.headers.get("content-type")||"";if(a&&!a.toLowerCase().includes("json"))return g.emit("productionAdapter.runtimeConfig.skipped",{source:"appsettings.json",reason:"non-json-response"}),_();const r=await t.json(),o=ce(r);return ue(o),g.emit("productionAdapter.runtimeConfig.loaded",{source:"appsettings.json",keys:Object.keys(o).sort()}),_()}catch(t){return g.emit("productionAdapter.runtimeConfig.skipped",{source:"appsettings.json",reason:t instanceof Error?t.message:String(t)}),_()}})(),T)}function me({onRouteReplaced:e}){const t=i.useRef(!1);return i.useEffect(()=>{if(t.current)return;t.current=!0,(async()=>{const r=window.location.href,o=ae(r);if(!o.hasAuthPayload)return;const d=_();let u={mode:"not-checked",canAttempt:!1},s=!1,h="",p=!1,c=null;if(!o.hasError&&!o.hasRecovery&&!o.hasInvite&&(o.hasCode||o.hasToken)){const{completeSupabaseAuthCallback:m,resolveSupabaseAuthAdapterState:b}=await f(async()=>{const{completeSupabaseAuthCallback:w,resolveSupabaseAuthAdapterState:E}=await import("./supabaseAuthAdapter-Bptc9G29.js").then(l=>l.c);return{completeSupabaseAuthCallback:w,resolveSupabaseAuthAdapterState:E}},__vite__mapDeps([0,1]));u=b(d),p=u.canAttempt,c=m}if(p&&c)try{const m=await c(d,r);m.session&&(O({...m.session,source:"supabase-provider-session"}),s=!0)}catch(m){h=m instanceof Error?m.message:String(m)}else o.shouldCreateLocalShell&&re(J,"supabase-callback-shell");g.emit(o.hasError||h?"auth.callback.error":"auth.callback.cleaned",{cleanedPath:o.cleanedPath,shouldCreateLocalShell:!p&&o.shouldCreateLocalShell,shouldRouteToMindCanvas:o.shouldRouteToMindCanvas,hasCode:o.hasCode,hasToken:o.hasToken,hasRecovery:o.hasRecovery,hasInvite:o.hasInvite,providerMode:u.mode,providerAttempted:p,providerSessionCreated:s,providerError:h});const y=`${window.location.pathname}${window.location.search}${window.location.hash}`;o.cleanedPath!==y&&(window.history.replaceState({authCallbackCleaned:!0},"",o.cleanedPath),e("auth-callback-bootstrap"))})()},[e]),null}class he extends i.Component{constructor(){super(...arguments);x(this,"state",{error:null});x(this,"retry",()=>{this.setState({error:null}),g.emit("runtime.errorBoundary.reset",{resetKey:this.props.resetKey,reason:"manual-retry"})})}static getDerivedStateFromError(a){return{error:a}}componentDidCatch(a,r){const o=(a==null?void 0:a.message)||"Unknown runtime error.";g.emit("runtime.errorBoundary.caught",{resetKey:this.props.resetKey,message:o,stack:(a==null?void 0:a.stack)||"",componentStack:r.componentStack}),console.error("[LoggingErrorBoundary] Unhandled React error.",a,r)}componentDidUpdate(a){a.resetKey!==this.props.resetKey&&this.state.error&&(this.setState({error:null}),g.emit("runtime.errorBoundary.reset",{from:a.resetKey,to:this.props.resetKey,reason:"route-change"}))}render(){const{error:a}=this.state;return a?n.jsx("div",{className:"page runtime-error-page","data-testid":"runtime-error-boundary","data-error-boundary-reset-key":this.props.resetKey,children:n.jsxs("section",{className:"execution-panel",children:[n.jsx("div",{className:"eyebrow",children:"Runtime Guard"}),n.jsx("h1",{children:"Something broke inside this React surface."}),n.jsx("p",{children:"The error was captured locally so the whole app shell can stay recoverable."}),n.jsxs("div",{className:"runtime-error-message","data-testid":"runtime-error-boundary-message",children:[n.jsx("span",{className:"runtime-error-symbol","aria-hidden":"true",children:"!"}),n.jsx("span",{children:a.message||"Unknown runtime error."})]}),n.jsxs("div",{className:"action-row",children:[n.jsx("button",{className:"btn btn-primary",type:"button",onClick:this.retry,"data-testid":"runtime-error-boundary-retry",children:"Retry"}),this.props.onNavigateHome&&n.jsx("button",{className:"btn btn-secondary",type:"button",onClick:this.props.onNavigateHome,"data-testid":"runtime-error-boundary-home",children:"MindCanvas"})]})]})}):this.props.children}}const ge="main",fe="h1",A="data-route-focus-target",ye=30;function be({route:e,rootSelector:t=ge,selector:a=fe}){return i.useEffect(()=>{let r=!1,o=0;const d=u=>{if(r)return;const s=document.querySelector(t),h=(s==null?void 0:s.querySelector(a))??document.querySelector(a);for(const p of document.querySelectorAll(`[${A}="true"]`))p.removeAttribute(A);if(!h){if(u<ye){o=window.requestAnimationFrame(()=>d(u+1));return}g.emit("route.focusOnNavigate.skipped",{route:e,selector:a,reason:"missing-target",attempts:u});return}h.hasAttribute("tabindex")||h.setAttribute("tabindex","-1"),h.setAttribute(A,"true"),h.focus({preventScroll:!1}),g.emit("route.focusOnNavigate.applied",{route:e,selector:a,tagName:h.tagName.toLowerCase(),text:(h.textContent||"").trim().slice(0,90),attempts:u})};return o=window.requestAnimationFrame(()=>d(1)),()=>{r=!0,window.cancelAnimationFrame(o)}},[e,t,a]),null}const ve=[{key:"markdown-viewer",liveUrl:"https://mdview-die.pages.dev",hostnames:["mdview.pages.dev","mdview-die.pages.dev","mdview.mindexec.io","markdown-viewer.pages.dev","markdown-viewer.mindexec.io"],title:"Free Online Markdown Viewer",heroEyebrow:"Free online markdown viewer",heroTitle:"Preview Markdown instantly in your browser",heroSubtitle:"Paste or open a markdown file, review the rendered result, and move bigger writing work into MindCanvas when it needs structure.",privacyNote:"Runs locally in your browser. No upload required."},{key:"bulk-markdown-viewer",liveUrl:"https://bulkmd.pages.dev",hostnames:["bulkmd.pages.dev","bulkmd.mindexec.io","bulk-markdown-viewer.pages.dev","bulk-markdown-viewer.mindexec.io"],title:"Bulk Markdown Viewer",heroEyebrow:"Bulk markdown preview",heroTitle:"Review multiple markdown snippets at once",heroSubtitle:"Paste a stack of markdown entries and scan them locally before turning the useful pieces into a MindCanvas board.",privacyNote:"Local browser-only preview. No account and no upload step."},{key:"readme-previewer",liveUrl:"https://readme-1o4.pages.dev",hostnames:["readme.pages.dev","readme-1o4.pages.dev","readme-previewer.pages.dev","readme.mindexec.io","readme-previewer.mindexec.io"],title:"README Previewer",heroEyebrow:"README previewer",heroTitle:"Preview README markdown before you publish",heroSubtitle:"Check headings, tables, links, and launch notes quickly, then keep bigger documentation work organized in MindCanvas.",privacyNote:"Local preview for README text. No repository access required."},{key:"markdown-to-html",liveUrl:"https://md2html-4r7.pages.dev",hostnames:["md2html.pages.dev","md2html-4r7.pages.dev","md2html.mindexec.io","markdown-to-html.pages.dev","markdown-to-html.mindexec.io"],title:"Markdown to HTML Preview",heroEyebrow:"Markdown to HTML",heroTitle:"Turn markdown into clean HTML preview",heroSubtitle:"Render markdown locally, copy the HTML shape, and move reusable publishing notes into MindCanvas.",privacyNote:"Conversion runs in-browser and keeps your text local."},{key:"markdown-outline",liveUrl:"https://mdoutln.pages.dev",hostnames:["mdoutln.pages.dev","mdoutln.mindexec.io","markdown-outline.pages.dev","markdown-outline.mindexec.io"],title:"Markdown Outline Generator",heroEyebrow:"Markdown outline generator",heroTitle:"Extract a document outline from markdown",heroSubtitle:"Scan headings, section depth, and missing structure before your document becomes a larger project.",privacyNote:"Outline extraction runs locally in this browser."},{key:"markdown-table-formatter",liveUrl:"https://mdtable-3ik.pages.dev",hostnames:["mdtable.pages.dev","mdtable-3ik.pages.dev","mdtable.mindexec.io","markdown-table-formatter.pages.dev","markdown-table-formatter.mindexec.io"],title:"Markdown Table Formatter",heroEyebrow:"Markdown table formatter",heroTitle:"Clean up markdown tables locally",heroSubtitle:"Paste a rough markdown table and get a cleaner version for docs, READMEs, and launch notes.",privacyNote:"Table formatting happens locally with no upload."},{key:"markdown-link-checker",liveUrl:"https://markdown-link-checker.pages.dev",hostnames:["mdcheck.pages.dev","markdown-link-checker.pages.dev","mdcheck.mindexec.io","markdown-link-checker.mindexec.io"],title:"Markdown Link Checker",heroEyebrow:"Markdown link checker",heroTitle:"Catch risky markdown links before publishing",heroSubtitle:"Find empty, localhost, JavaScript, and suspicious links locally before a README or docs page goes live.",privacyNote:"Link checks run locally against the pasted markdown."},{key:"browser-notepad",liveUrl:"https://quickpad.pages.dev",hostnames:["quickpad.pages.dev","quickpad.mindexec.io","browser-notepad.pages.dev","browser-notepad.mindexec.io"],title:"Browser Notepad",heroEyebrow:"Browser notepad",heroTitle:"Write quick notes without a sign-in",heroSubtitle:"Capture rough thoughts locally, then move the notes worth keeping into MindCanvas.",privacyNote:"Notes are stored locally in this browser unless you copy them elsewhere."},{key:"clipboard-board",liveUrl:"https://clipbrd.pages.dev",hostnames:["clipbrd.pages.dev","clipbrd.mindexec.io","clipboard-board.pages.dev","clipboard-board.mindexec.io"],title:"Local Clipboard Board",heroEyebrow:"Local clipboard board",heroTitle:"Collect snippets into a small local board",heroSubtitle:"Paste short ideas, snippets, and fragments into one local surface before promoting the useful set to MindCanvas.",privacyNote:"Clipboard notes stay local to this browser session."}];function M(e){const t=e.toLowerCase().replace(/^www\./,"");return ve.find(a=>a.hostnames.some(r=>r.toLowerCase()===t))}const we={enabled:!1,hideAppChrome:!0,allowMindCanvasRoute:!1,homeRoute:"/",toolKey:"",heroEyebrow:"Free local tool",heroTitle:"",heroSubtitle:"",primaryCtaText:"Open MindCanvas",primaryCtaHref:"https://mindexec.pages.dev/mindcanvas",secondaryCtaText:"",secondaryCtaHref:"",publicUrl:"",privacyNote:"Runs locally in your browser. No login. No database storage."},ke={enableAgentWorkspace:!0,enableCodeWorkspace:!0,enablePlanWorkspace:!0,enableCompanyCore:!0,enableExecutionTest:!0,enableTemplateStudio:!0,enableProjectPopup:!0,enablePromptDebugger:!0,enablePointBadge:!0,enableResetData:!0},P={variantKey:"platform",slug:"mindexec",brandName:"MindExec",productName:"MindCanvas",appTitle:"MindExec",workspaceNounSingular:"canvas",workspaceNounPlural:"canvases",signInTitle:"Welcome Back",signUpTitle:"Create Account",signInSubtitle:"Sign in to access your MindCanvas workspace.",signUpSubtitle:"Sign up to start organizing your ideas on a visual canvas.",primaryCheckoutProvider:"dodo",runtimeHost:"",canonicalHost:"mindexec.pages.dev",features:ke,marketingTool:we};function K(e){const t=L(e),a=M(t);return a?_e(t,a):{...P,runtimeHost:t,canonicalHost:P.canonicalHost,features:{...P.features},marketingTool:{...P.marketingTool}}}function Pe(e){return e.marketingTool.enabled?N(e.marketingTool.homeRoute):"/"}function B(e){return e.marketingTool.enabled&&e.marketingTool.toolKey?`/tools/${e.marketingTool.toolKey}`:Pe(e)}function Ee(e,t){const a=L(e.canonicalHost||e.runtimeHost);return a?`https://${a}${N(t)}`:""}function $(e,t){if(e.marketingTool.enabled&&!e.marketingTool.allowMindCanvasRoute&&(t==="/mindcanvas"||t==="/mindmap"))return!1;switch(t){case"/agent":return e.features.enableAgentWorkspace;case"/code":return e.features.enableCodeWorkspace;case"/planmaster":case"/planagent":return e.features.enablePlanWorkspace;case"/company-core":return e.features.enableCompanyCore;case"/execution-mode":return e.features.enableExecutionTest;default:return!0}}function Ce(e,t){const a=$(e,t),r=B(e),o=a?t:r;return{route:t,enabled:a,fallbackRoute:r,canonicalUrl:Ee(e,o),title:Te(e,o),description:xe(e,o)}}function L(e){const t=String(e??"").trim();if(!t)return"";try{return new URL(t).hostname.trim().toLowerCase().replace(/^www\./,"")}catch{return t.trim().replace(/^https?:\/\//i,"").replace(/^www\./,"").replace(/\/+$/,"").toLowerCase()}}function N(e){if(!e||!String(e).trim())return"/";let t=String(e).trim();return t.startsWith("/")||(t=`/${t}`),t.length>1&&(t=t.replace(/\/+$/,"")),t||"/"}function _e(e,t){const a=L(t.liveUrl)||e;return{...P,variantKey:"mini-tool",slug:t.key,brandName:t.title,productName:t.title,appTitle:`${t.title} - Free local browser tool`,runtimeHost:e,canonicalHost:a,features:{...P.features,enableAgentWorkspace:!1,enableCodeWorkspace:!1,enablePlanWorkspace:!1,enableCompanyCore:!1,enableExecutionTest:!1,enableTemplateStudio:!1,enableProjectPopup:!1,enablePromptDebugger:!1,enablePointBadge:!1,enableResetData:!1},marketingTool:{...P.marketingTool,enabled:!0,hideAppChrome:!0,allowMindCanvasRoute:!1,homeRoute:"/",toolKey:t.key,heroEyebrow:t.heroEyebrow,heroTitle:t.heroTitle,heroSubtitle:t.heroSubtitle,primaryCtaText:"Open MindCanvas",primaryCtaHref:"https://mindexec.pages.dev/mindcanvas",secondaryCtaText:"More free tools",secondaryCtaHref:"https://mindexec.pages.dev/tools",publicUrl:t.liveUrl,privacyNote:t.privacyNote}}}function Te(e,t){if(e.marketingTool.enabled&&t.startsWith("/tools/"))return e.appTitle;switch(t){case"/mindcanvas":case"/mindmap":return"MindCanvas | MindExec";case"/planmaster":case"/planagent":return"PlanMaster | MindExec";case"/pricing":return"MindExec Pricing";case"/login":return e.signInTitle;case"/forgot-password":return"Reset your MindExec password";case"/reset-password":return"Set a new MindExec password";case"/tools":return"Free Browser Tools | MindExec";case"/youtube":return"YouTube Capture | MindExec";case"/code":return"CodeMaster | MindExec";case"/agent":return"Agent Workspace | MindExec";case"/execution-mode":return"Execution Mode | MindExec";case"/company-core":return"Company Core | MindExec";case"/admin/dashboard":return"Admin Dashboard | MindExec";case"/not-found":return"Content not found | MindExec";case"/":default:return e.appTitle}}function xe(e,t){if(e.marketingTool.enabled)return e.marketingTool.heroSubtitle||e.marketingTool.privacyNote;switch(t){case"/mindcanvas":case"/mindmap":return"MindCanvas keeps notes, assets, AI tasks, and execution evidence together on a local-first visual board.";case"/planmaster":case"/planagent":return"PlanMaster turns goals into practical plans, stages, and execution checklists.";case"/pricing":return"MindExec pricing for free local tools and paid MindCanvas project workflows.";case"/tools":return"Free local browser tools that feed larger MindExec and MindCanvas workflows.";case"/code":case"/agent":return"CodeMaster previews code workflows and adapter-gated agent execution for local projects.";case"/execution-mode":return"Execution Mode tests deterministic browser-local Concept IR before live adapters are connected.";case"/company-core":return"Company Core organizes SaaS blueprint, growth, approval, and publishing decisions.";default:return"MindExec is an AI execution canvas for solo builders, researchers, developers, and creators."}}const Se=i.lazy(()=>f(async()=>{const{MindCanvas:e}=await import("./MindCanvas-yNsIO-lL.js");return{MindCanvas:e}},__vite__mapDeps([2,3,4,5,1,6,7,8,0,9,10,11])).then(({MindCanvas:e})=>({default:e}))),Ae=i.lazy(()=>f(async()=>{const{PlanMasterPage:e}=await import("./PlanMasterPage-Dc9jGdQ6.js");return{PlanMasterPage:e}},__vite__mapDeps([12,3,4,5,1,6,7,13])).then(({PlanMasterPage:e})=>({default:e}))),Re=i.lazy(()=>f(async()=>{const{PricingPage:e}=await import("./PricingPage-DTVq8Lpn.js");return{PricingPage:e}},__vite__mapDeps([14,3,15,1,6,16,17,0,18])).then(({PricingPage:e})=>({default:e}))),Me=i.lazy(()=>f(async()=>{const{LoginPage:e}=await import("./AuthPages-qugPrJrG.js");return{LoginPage:e}},__vite__mapDeps([19,3,17,1,0,6,20])).then(({LoginPage:e})=>({default:e}))),Le=i.lazy(()=>f(async()=>{const{ForgotPasswordPage:e}=await import("./AuthPages-qugPrJrG.js");return{ForgotPasswordPage:e}},__vite__mapDeps([19,3,17,1,0,6,20])).then(({ForgotPasswordPage:e})=>({default:e}))),Ne=i.lazy(()=>f(async()=>{const{ResetPasswordPage:e}=await import("./AuthPages-qugPrJrG.js");return{ResetPasswordPage:e}},__vite__mapDeps([19,3,17,1,0,6,20])).then(({ResetPasswordPage:e})=>({default:e}))),je=i.lazy(()=>f(async()=>{const{ToolsDirectoryPage:e}=await import("./ToolPages-CmVbLrAo.js");return{ToolsDirectoryPage:e}},__vite__mapDeps([21,3,22,5,1,6,9,23])).then(({ToolsDirectoryPage:e})=>({default:e}))),Ue=i.lazy(()=>f(async()=>{const{MarketingToolPage:e}=await import("./ToolPages-CmVbLrAo.js");return{MarketingToolPage:e}},__vite__mapDeps([21,3,22,5,1,6,9,23])).then(({MarketingToolPage:e})=>({default:e}))),De=i.lazy(()=>f(async()=>{const{YouTubeSearchPage:e}=await import("./YouTubeSearchPage-DSjCA5Xo.js");return{YouTubeSearchPage:e}},__vite__mapDeps([24,3,5,1,6,9,25])).then(({YouTubeSearchPage:e})=>({default:e}))),Ie=i.lazy(()=>f(async()=>{const{CompanyCorePage:e}=await import("./CompanyCorePage-BSHaECkm.js");return{CompanyCorePage:e}},__vite__mapDeps([26,3,5,1,6,27])).then(({CompanyCorePage:e})=>({default:e}))),Oe=i.lazy(()=>f(async()=>{const{AdminDashboardPage:e}=await import("./AdminDashboardPage-B0bbZl9-.js");return{AdminDashboardPage:e}},__vite__mapDeps([28,3,0,1,6,29])).then(({AdminDashboardPage:e})=>({default:e}))),He=i.lazy(()=>f(async()=>{const{CodePage:e}=await import("./CodePage-BM1f1VnB.js");return{CodePage:e}},__vite__mapDeps([30,3,5,1,6,10,7,31,32])).then(({CodePage:e})=>({default:e}))),Ke=i.lazy(()=>f(async()=>{const{ExecutionModePage:e}=await import("./ExecutionModePage-D3oo7YEk.js");return{ExecutionModePage:e}},__vite__mapDeps([33,3,5,1,6,10,7,34])).then(({ExecutionModePage:e})=>({default:e}))),Be=i.lazy(()=>f(async()=>{const{MarketingHome:e}=await import("./MarketingHome-ClbFHVzc.js");return{MarketingHome:e}},__vite__mapDeps([35,3,15,1,6,16,22,36])).then(({MarketingHome:e})=>({default:e}))),$e=i.lazy(()=>f(async()=>{const{AppSidebar:e}=await import("./AppSidebar-Bhg5y9-i.js");return{AppSidebar:e}},__vite__mapDeps([37,3,6,1])).then(({AppSidebar:e})=>({default:e}))),ze=new Set(["/","/mindcanvas","/planmaster","/tools","/youtube","/code","/pricing","/company-core","/login"]);function Fe(e,t=window.location.hostname){const a=M(t);if(a&&(e==="/"||e==="/tools"))return`/tools/${a.key}`;if(e==="/agent")return"/agent";if(e==="/forgot-password")return"/forgot-password";if(e==="/reset-password")return"/reset-password";let r="/not-found";return e==="/"?r="/":e==="/mindmap"?r="/mindmap":e==="/planagent"?r="/planagent":e==="/execution-mode"?r="/execution-mode":e==="/not-found"?r="/not-found":e.startsWith("/tools/")&&(r=e),ze.has(e)?r=e:e==="/admin/dashboard"&&(r="/admin/dashboard"),r}function Ve(e,t=window.location.hostname){const a=K(t),r=Fe(e,t);return $(a,r)?r:B(a)}function z(e,t=window.location.hostname){const a=Ve(e,t);return{route:a,stalePath:a==="/not-found"&&e!=="/not-found"?e:""}}function R(e){const t=window.location.pathname,{route:a,stalePath:r}=z(t,window.location.hostname);return a==="/not-found"&&t!=="/not-found"?(window.history.replaceState({stalePath:t},"","/not-found"),g.emit("route.notFound.normalize",{source:e,from:r||t,to:"/not-found"})):N(t)!==a&&!(t==="/"&&a.startsWith("/tools/"))&&!(t==="/tools"&&a.startsWith("/tools/"))&&(window.history.replaceState({stalePath:t},"",a),g.emit("productProfile.route.fallback",{source:e,from:t,to:a})),a}function C(e,t,a){if(a===void 0){delete e.dataset[t];return}e.dataset[t]=a}function We(){const e=i.useMemo(()=>K(window.location.hostname),[]),t=i.useMemo(()=>M(window.location.hostname),[]),[a,r]=i.useState(()=>z(window.location.pathname,window.location.hostname).route),o=a==="/mindcanvas"||a==="/mindmap",[d,u]=i.useState(()=>o),s=i.useMemo(()=>Ce(e,a),[e,a]),[h,p]=i.useState([]);i.useEffect(()=>{r(R("initial"));const l=()=>r(R("popstate"));return window.addEventListener("popstate",l),()=>window.removeEventListener("popstate",l)},[]);const c=i.useCallback(l=>{window.history.pushState({},"",l),r(l)},[]),y=i.useCallback(l=>{r(R(l))},[]);i.useEffect(()=>{!o||d||(u(!0),g.emit("route.keepAlive.mindcanvas",{route:a,mounted:!0,source:"route-activate"}))},[o,d,a]);const m=a==="/planmaster"||a==="/planagent",b=a.startsWith("/tools/")?a.slice(7):null,w=e.marketingTool.enabled&&e.marketingTool.hideAppChrome,E=d||o;return i.useEffect(()=>{const l=document.documentElement,v={productProfile:l.dataset.productProfile,productVariant:l.dataset.productVariant,canonicalHost:l.dataset.canonicalHost,routeCanonical:l.dataset.routeCanonical,routeEnabled:l.dataset.routeEnabled,marketingToolKey:l.dataset.marketingToolKey};return l.dataset.productProfile=e.slug,l.dataset.productVariant=e.variantKey,l.dataset.canonicalHost=e.canonicalHost,l.dataset.routeCanonical=s.canonicalUrl,l.dataset.routeEnabled=s.enabled?"true":"false",e.marketingTool.toolKey?l.dataset.marketingToolKey=e.marketingTool.toolKey:delete l.dataset.marketingToolKey,g.emit("productProfile.route.applied",{route:a,variantKey:e.variantKey,slug:e.slug,canonicalHost:e.canonicalHost,canonicalUrl:s.canonicalUrl,routeEnabled:s.enabled,fallbackRoute:s.fallbackRoute,marketingToolKey:e.marketingTool.toolKey}),()=>{C(l,"productProfile",v.productProfile),C(l,"productVariant",v.productVariant),C(l,"canonicalHost",v.canonicalHost),C(l,"routeCanonical",v.routeCanonical),C(l,"routeEnabled",v.routeEnabled),C(l,"marketingToolKey",v.marketingToolKey)}},[e.canonicalHost,e.marketingTool.toolKey,e.slug,e.variantKey,a,s.canonicalUrl,s.enabled,s.fallbackRoute]),n.jsxs("div",{className:`${o?"app app--canvas":"app"} ${w?"app--mini-tool":""}`,"data-product-profile":e.slug,"data-product-variant":e.variantKey,"data-canonical-host":e.canonicalHost,"data-route-enabled":s.enabled?"true":"false","data-route-canonical":s.canonicalUrl,"data-marketing-tool-key":e.marketingTool.toolKey||void 0,children:[!w&&n.jsx(i.Suspense,{fallback:n.jsx(Ge,{}),children:n.jsx($e,{route:a,navigate:c,canvasActions:o?h:[]})}),n.jsxs("main",{className:"app-main",children:[n.jsx(me,{onRouteReplaced:y}),n.jsx(be,{route:a}),n.jsx(he,{resetKey:a,onNavigateHome:()=>c("/mindcanvas"),children:n.jsxs(i.Suspense,{fallback:n.jsx(qe,{route:a}),children:[a==="/"&&n.jsx(Be,{navigate:c}),E&&n.jsx("section",{className:"route-keepalive route-keepalive--mindcanvas","data-testid":"mindcanvas-keepalive-host","data-route-keepalive":"mindcanvas","data-route-active":o?"true":"false",hidden:!o,"aria-hidden":o?void 0:"true",children:n.jsx(Se,{navigate:c,onSidebarActionsChange:p})}),m&&n.jsx(Ae,{navigate:c}),a==="/pricing"&&n.jsx(Re,{navigate:c}),a==="/login"&&n.jsx(Me,{navigate:c}),a==="/forgot-password"&&n.jsx(Le,{navigate:c}),a==="/reset-password"&&n.jsx(Ne,{navigate:c}),a==="/tools"&&n.jsx(je,{navigate:c}),b&&n.jsx(Ue,{toolKey:b,navigate:c,miniHost:(t==null?void 0:t.key)===b}),a==="/youtube"&&n.jsx(De,{navigate:c}),(a==="/code"||a==="/agent")&&n.jsx(He,{}),a==="/execution-mode"&&n.jsx(Ke,{}),a==="/not-found"&&n.jsx(Ye,{navigate:c}),a==="/company-core"&&n.jsx(Ie,{}),a==="/admin/dashboard"&&n.jsx(Oe,{})]})})]})]})}function qe({route:e}){return i.useEffect(()=>{g.emit("route.lazyFallback.rendered",{route:e})},[e]),n.jsxs("div",{className:"route-lazy-fallback","data-testid":"route-lazy-fallback","data-route":e,children:[n.jsx("span",{className:"route-lazy-spinner","aria-hidden":"true"}),n.jsx("span",{children:"Loading MindExec surface..."})]})}function Ge(){return n.jsxs("aside",{className:"app-sidebar app-sidebar--loading","aria-label":"MindExec navigation loading",children:[n.jsx("div",{className:"sidebar-brand sidebar-placeholder"}),n.jsx("div",{className:"sidebar-divider"}),n.jsx("nav",{className:"sidebar-nav",children:Array.from({length:8},(e,t)=>n.jsx("div",{className:"sidebar-icon sidebar-placeholder"},t))}),n.jsx("div",{className:"sidebar-spacer"}),n.jsx("div",{className:"sidebar-icon sidebar-placeholder"})]})}function Ye({navigate:e}){return n.jsx("div",{className:"page not-found-page",children:n.jsxs("section",{className:"execution-panel",children:[n.jsx("div",{className:"eyebrow",children:"Not Found"}),n.jsx("h1",{children:"Content not found."}),n.jsx("p",{children:"The route exists as a React shell so stale Blazor links land cleanly."}),n.jsx("button",{className:"btn btn-primary",type:"button",onClick:()=>e("/"),children:"Go home"})]})})}q();async function Xe(){await pe(),W.createRoot(document.getElementById("root")).render(n.jsx(We,{}))}Xe();export{X as A,_ as a,I as b,re as c,et as g,O as s};