@mindexec/cli 0.2.458 → 0.2.459
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/desktop-workspace-state.cjs +120 -0
- package/electron/main.cjs +17 -6
- package/electron/source-smoke.mjs +21 -0
- package/electron/windows-package-smoke.mjs +8 -2
- package/package.json +6 -5
- package/remote-fast/osx-arm64/mindexec-remote-fast.dll +0 -0
- package/remote-fast/osx-x64/mindexec-remote-fast.dll +0 -0
- package/remote-fast/win-x64/mindexec-remote-fast.dll +0 -0
- package/scripts/desktop-workspace-state-smoke.mjs +81 -0
- package/server.js +36 -16
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-animated-image-preview.js +270 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js +57 -53
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-interactions.js +30 -26
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-renderer.js +94 -124
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-menu-manager.js +43 -21
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-nodes.js +45 -13
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-render-plan.js +117 -1
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-texture-factory.js +4 -1
- package/wwwroot/_framework/{MindExecution.Core.2ch68iyy8o.dll → MindExecution.Core.b973f5f64y.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Kernel.dh617xfv36.dll → MindExecution.Kernel.k4h9fvi9wb.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Admin.0sm50hbae9.dll → MindExecution.Plugins.Admin.u2emae8cb5.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Business.3wq01orrbu.dll → MindExecution.Plugins.Business.cysw4qtyke.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Concept.z8yl28fa2a.dll → MindExecution.Plugins.Concept.8iehgvzjio.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Directory.m7murp5oes.dll → MindExecution.Plugins.Directory.t621fsxq2i.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.yuyrbpf0vh.dll → MindExecution.Plugins.PlanMaster.ft631uc7ki.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.YouTube.rwxvn00rm2.dll → MindExecution.Plugins.YouTube.arivgu92h1.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Shared.r9k48iyijb.dll → MindExecution.Shared.wm997st9eb.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Web.742aribkxm.dll → MindExecution.Web.osdbdrue4h.dll} +0 -0
- package/wwwroot/_framework/blazor.boot.json +21 -21
- package/wwwroot/app-icon-1024.png +0 -0
- package/wwwroot/apple-touch-icon.png +0 -0
- package/wwwroot/appsettings.json +81 -81
- package/wwwroot/favicon-32x32.png +0 -0
- package/wwwroot/favicon.ico +0 -0
- package/wwwroot/icon-192.png +0 -0
- package/wwwroot/icon-512.png +0 -0
- package/wwwroot/index.html +70 -46
- package/wwwroot/manifest.webmanifest +4 -4
- package/wwwroot/mindexec-favicon-v3.png +0 -0
- package/wwwroot/service-worker-assets.js +888 -880
- package/wwwroot/service-worker.js +1 -1
|
@@ -6,10 +6,13 @@
|
|
|
6
6
|
const INITIAL_LINE_TEXTURE_ROWS = 1024;
|
|
7
7
|
const GPU_WARM_RETRY_DELAY_MS = 120;
|
|
8
8
|
const IMAGE_ATLAS_TILE_SIZE = 128;
|
|
9
|
+
const IMAGE_ATLAS_UPLOAD_SETTLE_MS = 1000;
|
|
10
|
+
const IMAGE_ATLAS_UPLOAD_MAX_WAIT_MS = 3500;
|
|
9
11
|
const frameSampleStates = new WeakMap();
|
|
10
12
|
const residentLinePrewarmStates = new WeakMap();
|
|
11
13
|
const residentTransitionStates = new WeakMap();
|
|
12
14
|
const cssMediaFrameDomStates = new WeakMap();
|
|
15
|
+
const imageAtlasUploadStates = new WeakMap();
|
|
13
16
|
let cssMediaFrameDomReuseCount = 0;
|
|
14
17
|
let cssMediaFrameDomApplyCount = 0;
|
|
15
18
|
const RESIDENT_CSS_CACHE_TEXT_TYPES = new Set(['text', 'note', 'memo', 'markdown', 'code', 'csv-table']);
|
|
@@ -447,6 +450,108 @@
|
|
|
447
450
|
return true;
|
|
448
451
|
}
|
|
449
452
|
|
|
453
|
+
function prepareImageAtlasForEntries(renderer, entries) {
|
|
454
|
+
let imageCount = 0;
|
|
455
|
+
for (const entry of entries || []) {
|
|
456
|
+
const model = entry?.model || null;
|
|
457
|
+
const contentType = String(model?.contentType ?? model?.ContentType ?? '').toLowerCase();
|
|
458
|
+
if (contentType === 'video') {
|
|
459
|
+
imageCount++;
|
|
460
|
+
continue;
|
|
461
|
+
}
|
|
462
|
+
if (contentType === 'image') {
|
|
463
|
+
if (globalThis.MindMapNodes?.isAnimatedGifImageNodeModel?.(model) !== true) imageCount++;
|
|
464
|
+
continue;
|
|
465
|
+
}
|
|
466
|
+
if (contentType === 'embed') {
|
|
467
|
+
const urls = globalThis.MindMapNodes?.getNodeImageAssetUrls?.(model) || null;
|
|
468
|
+
if (urls?.thumbnailUrl || urls?.snapshotUrl || urls?.previewImageUrl) imageCount++;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
return prepareImageAtlasCapacity(renderer, imageCount);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
function uploadImageAtlasTile(renderer, slot, canvas) {
|
|
475
|
+
const webglRenderer = renderer?.renderer || null;
|
|
476
|
+
const gl = renderer?.gl || webglRenderer?.getContext?.() || null;
|
|
477
|
+
const texture = renderer?.imageAtlasTexture || null;
|
|
478
|
+
if (!webglRenderer?.initTexture || !gl || !texture || !canvas || !(slot?.slotIndex >= 0)) return false;
|
|
479
|
+
|
|
480
|
+
let savedTexture = null;
|
|
481
|
+
let savedFlipY = null;
|
|
482
|
+
let savedPremultiply = null;
|
|
483
|
+
let savedColorspace = null;
|
|
484
|
+
try {
|
|
485
|
+
webglRenderer.initTexture(texture);
|
|
486
|
+
const handle = webglRenderer.properties?.get?.(texture)?.__webglTexture || null;
|
|
487
|
+
if (!handle) return false;
|
|
488
|
+
savedTexture = gl.getParameter(gl.TEXTURE_BINDING_2D);
|
|
489
|
+
savedFlipY = gl.getParameter(gl.UNPACK_FLIP_Y_WEBGL);
|
|
490
|
+
savedPremultiply = gl.getParameter(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL);
|
|
491
|
+
savedColorspace = gl.getParameter(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL);
|
|
492
|
+
const columns = Math.max(1, Number(renderer.imageAtlasColumns || 1));
|
|
493
|
+
const x = (slot.slotIndex % columns) * IMAGE_ATLAS_TILE_SIZE;
|
|
494
|
+
const y = Math.floor(slot.slotIndex / columns) * IMAGE_ATLAS_TILE_SIZE;
|
|
495
|
+
gl.bindTexture(gl.TEXTURE_2D, handle);
|
|
496
|
+
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);
|
|
497
|
+
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
|
|
498
|
+
gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);
|
|
499
|
+
gl.texSubImage2D(gl.TEXTURE_2D, 0, x, y, gl.RGBA, gl.UNSIGNED_BYTE, canvas);
|
|
500
|
+
renderer._imageAtlasTileUploadCount = Number(renderer._imageAtlasTileUploadCount || 0) + 1;
|
|
501
|
+
renderer._residentGpuWarmKey = '';
|
|
502
|
+
renderer._residentImageAtlasWarmVersion = -1;
|
|
503
|
+
return true;
|
|
504
|
+
} catch {
|
|
505
|
+
return false;
|
|
506
|
+
} finally {
|
|
507
|
+
if (savedFlipY !== null) gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, savedFlipY);
|
|
508
|
+
if (savedPremultiply !== null) gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, savedPremultiply);
|
|
509
|
+
if (savedColorspace !== null) gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, savedColorspace);
|
|
510
|
+
if (savedTexture !== null) gl.bindTexture(gl.TEXTURE_2D, savedTexture);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
function scheduleImageAtlasUpload(renderer, module = renderer?._module) {
|
|
515
|
+
if (!renderer?.imageAtlasTexture || renderer?._disposed === true) return false;
|
|
516
|
+
const now = typeof performance !== 'undefined' ? performance.now() : Date.now();
|
|
517
|
+
let state = imageAtlasUploadStates.get(renderer);
|
|
518
|
+
if (!state) {
|
|
519
|
+
state = { timer: 0, startedAt: now, pending: false, epoch: 0 };
|
|
520
|
+
imageAtlasUploadStates.set(renderer, state);
|
|
521
|
+
}
|
|
522
|
+
state.pending = true;
|
|
523
|
+
state.epoch = Number(renderer._residentStaticPreviewEpoch || 0);
|
|
524
|
+
if (!(state.startedAt > 0)) state.startedAt = now;
|
|
525
|
+
if (state.timer) clearTimeout(state.timer);
|
|
526
|
+
const elapsedMs = Math.max(0, now - state.startedAt);
|
|
527
|
+
const delayMs = Math.max(0, Math.min(
|
|
528
|
+
IMAGE_ATLAS_UPLOAD_SETTLE_MS,
|
|
529
|
+
IMAGE_ATLAS_UPLOAD_MAX_WAIT_MS - elapsedMs
|
|
530
|
+
));
|
|
531
|
+
state.timer = setTimeout(() => {
|
|
532
|
+
state.timer = 0;
|
|
533
|
+
if (!state.pending || renderer._disposed === true ||
|
|
534
|
+
state.epoch !== Number(renderer._residentStaticPreviewEpoch || 0)) return;
|
|
535
|
+
state.pending = false;
|
|
536
|
+
state.startedAt = 0;
|
|
537
|
+
if (!renderer.imageAtlasTexture) return;
|
|
538
|
+
renderer.imageAtlasTexture.needsUpdate = true;
|
|
539
|
+
renderer._imageAtlasTextureUploadCount = Number(renderer._imageAtlasTextureUploadCount || 0) + 1;
|
|
540
|
+
const activeModule = renderer._module || module;
|
|
541
|
+
if (activeModule) {
|
|
542
|
+
activeModule._forceUpdateFrames = Math.max(Number(activeModule._forceUpdateFrames || 0), 1);
|
|
543
|
+
activeModule.requestAnimationWake?.('image-atlas-texture-upload');
|
|
544
|
+
}
|
|
545
|
+
}, delayMs);
|
|
546
|
+
return true;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
function clearScheduledImageAtlasUpload(renderer) {
|
|
550
|
+
const state = imageAtlasUploadStates.get(renderer);
|
|
551
|
+
if (state?.timer) clearTimeout(state.timer);
|
|
552
|
+
imageAtlasUploadStates.delete(renderer);
|
|
553
|
+
}
|
|
554
|
+
|
|
450
555
|
function fallbackBatch(renderer, fallbackIds, limit = 12) {
|
|
451
556
|
const ids = Array.from(fallbackIds || []);
|
|
452
557
|
const safeLimit = Math.max(1, Number(limit || 1));
|
|
@@ -698,6 +803,12 @@
|
|
|
698
803
|
return result === true;
|
|
699
804
|
}
|
|
700
805
|
|
|
806
|
+
function hasActionableResidentLineDetails(renderer, module, lodBand) {
|
|
807
|
+
const nodeIds = renderer?.instanceData?.nodeIds || [];
|
|
808
|
+
return nodeIds.length > 0 && renderer?._hasPendingLineDetailRestore?.(lodBand) === true &&
|
|
809
|
+
areResidentLinesPrepared(renderer, module?.nodeObjectsById, nodeIds);
|
|
810
|
+
}
|
|
811
|
+
|
|
701
812
|
function hasResidentDirtyWork(renderer, camera, module, resolveLodBand, buildSelectionKey, isAnimatedGifModel) {
|
|
702
813
|
if (!renderer) return false;
|
|
703
814
|
const lodBand = camera && typeof resolveLodBand === 'function'
|
|
@@ -710,7 +821,7 @@
|
|
|
710
821
|
renderer._imageAtlasRebuildPending === true || Number(renderer._imageAtlasQueuedIds?.size || 0) > 0 ||
|
|
711
822
|
Number(renderer._imageAtlasLoadingIds?.size || 0) > 0 || Number(renderer._imageAtlasBatchReadyIds?.size || 0) > 0 ||
|
|
712
823
|
renderer._imageAtlasBatchActive === true || renderer._lodCleanupPending === true ||
|
|
713
|
-
renderer._deferLineRestorePending === true || renderer
|
|
824
|
+
renderer._deferLineRestorePending === true || hasActionableResidentLineDetails(renderer, module, lodBand) ||
|
|
714
825
|
Number(renderer._pendingLodVisibilityVersion ?? -1) >= 0 || renderer._fullResHandoffActive === true ||
|
|
715
826
|
renderer.isLoading === true || module?.isLoading === true || renderer._hasResidentLodInstances?.() !== true;
|
|
716
827
|
if (hasTypedResidentDirtyWork) {
|
|
@@ -1797,6 +1908,10 @@
|
|
|
1797
1908
|
ensureLineTextureCapacity,
|
|
1798
1909
|
renderResidentWarmScene,
|
|
1799
1910
|
prepareImageAtlasCapacity,
|
|
1911
|
+
prepareImageAtlasForEntries,
|
|
1912
|
+
uploadImageAtlasTile,
|
|
1913
|
+
scheduleImageAtlasUpload,
|
|
1914
|
+
clearScheduledImageAtlasUpload,
|
|
1800
1915
|
fallbackBatch,
|
|
1801
1916
|
reuseCssMediaFrameDom,
|
|
1802
1917
|
reuseStableVisibleCss,
|
|
@@ -1807,6 +1922,7 @@
|
|
|
1807
1922
|
invalidateActiveCssMediaFallbackCountCache,
|
|
1808
1923
|
markLodImageCssFallbacksChanged,
|
|
1809
1924
|
createTrackedLodImageCssFallbackSet,
|
|
1925
|
+
hasActionableResidentLineDetails,
|
|
1810
1926
|
hasResidentDirtyWork,
|
|
1811
1927
|
hasPendingNearCssWarmup,
|
|
1812
1928
|
reusePreparedImageInstances,
|
|
@@ -593,8 +593,11 @@
|
|
|
593
593
|
preferOriginal !== true &&
|
|
594
594
|
existingSourceKind === 'original' &&
|
|
595
595
|
(matchesOriginalUrl || isThumbnailAssetUrl(normalizedRequestedUrl));
|
|
596
|
+
const canUseMatchingOriginal =
|
|
597
|
+
matchesOriginalUrl &&
|
|
598
|
+
(preferOriginal === true || options.allowOriginalReuseForPreview !== false);
|
|
596
599
|
|
|
597
|
-
if (!(matchesRequestedUrl ||
|
|
600
|
+
if (!(matchesRequestedUrl || canUseMatchingOriginal || canUseOriginalForPreview)) {
|
|
598
601
|
return false;
|
|
599
602
|
}
|
|
600
603
|
|
package/wwwroot/_framework/{MindExecution.Core.2ch68iyy8o.dll → MindExecution.Core.b973f5f64y.dll}
RENAMED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/wwwroot/_framework/{MindExecution.Web.742aribkxm.dll → MindExecution.Web.osdbdrue4h.dll}
RENAMED
|
Binary file
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mainAssemblyName": "MindExecution.Web",
|
|
3
3
|
"resources": {
|
|
4
|
-
"hash": "sha256-
|
|
4
|
+
"hash": "sha256-k2itmZGSZI4/oLV1PZkSvmP5G7hZ+KnYz6N+kaFBt1I=",
|
|
5
5
|
"fingerprinting": {
|
|
6
6
|
"Google.Protobuf.9h59ukbel7.dll": "Google.Protobuf.dll",
|
|
7
7
|
"Markdig.d1j7v41cl1.dll": "Markdig.dll",
|
|
@@ -122,16 +122,16 @@
|
|
|
122
122
|
"System.brmz7yk5qh.dll": "System.dll",
|
|
123
123
|
"netstandard.b50t77veor.dll": "netstandard.dll",
|
|
124
124
|
"System.Private.CoreLib.g6ztz7cmo2.dll": "System.Private.CoreLib.dll",
|
|
125
|
-
"MindExecution.Core.
|
|
126
|
-
"MindExecution.Kernel.
|
|
127
|
-
"MindExecution.Plugins.Admin.
|
|
128
|
-
"MindExecution.Plugins.Business.
|
|
129
|
-
"MindExecution.Plugins.Concept.
|
|
130
|
-
"MindExecution.Plugins.Directory.
|
|
131
|
-
"MindExecution.Plugins.PlanMaster.
|
|
132
|
-
"MindExecution.Plugins.YouTube.
|
|
133
|
-
"MindExecution.Shared.
|
|
134
|
-
"MindExecution.Web.
|
|
125
|
+
"MindExecution.Core.b973f5f64y.dll": "MindExecution.Core.dll",
|
|
126
|
+
"MindExecution.Kernel.k4h9fvi9wb.dll": "MindExecution.Kernel.dll",
|
|
127
|
+
"MindExecution.Plugins.Admin.u2emae8cb5.dll": "MindExecution.Plugins.Admin.dll",
|
|
128
|
+
"MindExecution.Plugins.Business.cysw4qtyke.dll": "MindExecution.Plugins.Business.dll",
|
|
129
|
+
"MindExecution.Plugins.Concept.8iehgvzjio.dll": "MindExecution.Plugins.Concept.dll",
|
|
130
|
+
"MindExecution.Plugins.Directory.t621fsxq2i.dll": "MindExecution.Plugins.Directory.dll",
|
|
131
|
+
"MindExecution.Plugins.PlanMaster.ft631uc7ki.dll": "MindExecution.Plugins.PlanMaster.dll",
|
|
132
|
+
"MindExecution.Plugins.YouTube.arivgu92h1.dll": "MindExecution.Plugins.YouTube.dll",
|
|
133
|
+
"MindExecution.Shared.wm997st9eb.dll": "MindExecution.Shared.dll",
|
|
134
|
+
"MindExecution.Web.osdbdrue4h.dll": "MindExecution.Web.dll",
|
|
135
135
|
"dotnet.native.566r55w3xu.js": "dotnet.native.js",
|
|
136
136
|
"dotnet.native.x6q5aixc38.wasm": "dotnet.native.wasm",
|
|
137
137
|
"dotnet.js": "dotnet.js",
|
|
@@ -276,18 +276,18 @@
|
|
|
276
276
|
"System.Xml.XDocument.sn51jas17n.dll": "sha256-GNI2kFgFmPTwzuzwUn8gxK+AzGLUWRJFdg9JzIbrybQ=",
|
|
277
277
|
"System.brmz7yk5qh.dll": "sha256-CfM2miyj1KHApFmqMdLYWio3S/jrdON2pW9Xr2nTwlo=",
|
|
278
278
|
"netstandard.b50t77veor.dll": "sha256-//jQGOXjb8ET8WtXgOJrAxLx6E7zDJ5RjRRutwkvmxo=",
|
|
279
|
-
"MindExecution.Core.
|
|
280
|
-
"MindExecution.Kernel.
|
|
281
|
-
"MindExecution.Plugins.Business.
|
|
282
|
-
"MindExecution.Plugins.Concept.
|
|
283
|
-
"MindExecution.Plugins.PlanMaster.
|
|
284
|
-
"MindExecution.Shared.
|
|
285
|
-
"MindExecution.Web.
|
|
279
|
+
"MindExecution.Core.b973f5f64y.dll": "sha256-gaWEYZie3oGBsJ7KNcinPxikQw7nSHgJSBllq4YEZ38=",
|
|
280
|
+
"MindExecution.Kernel.k4h9fvi9wb.dll": "sha256-DJajefF5YNuFQ7hh7Y8750yzg5kXpdE91GuofhBtiIg=",
|
|
281
|
+
"MindExecution.Plugins.Business.cysw4qtyke.dll": "sha256-bCkYY5nsWdSGvLFYVjeMGh/SLIrhErscom7vq4WW1e8=",
|
|
282
|
+
"MindExecution.Plugins.Concept.8iehgvzjio.dll": "sha256-sD9g99bCcgFnUnIivPfe19mEYg7scZKgwdHuh5fT3wM=",
|
|
283
|
+
"MindExecution.Plugins.PlanMaster.ft631uc7ki.dll": "sha256-Q54/SRbdbUoRNPbJrN9ngcsNdAN2uqHK0Or2GVU7Vx8=",
|
|
284
|
+
"MindExecution.Shared.wm997st9eb.dll": "sha256-CABTI+PIZ9ZrDZ2VoLANJ5qvthYPX32AoKv2/qdpp0E=",
|
|
285
|
+
"MindExecution.Web.osdbdrue4h.dll": "sha256-mPMX7zmQgrN1cg8qclbhRZlRm5N45je5DzrRQrunlCw="
|
|
286
286
|
},
|
|
287
287
|
"lazyAssembly": {
|
|
288
|
-
"MindExecution.Plugins.Admin.
|
|
289
|
-
"MindExecution.Plugins.Directory.
|
|
290
|
-
"MindExecution.Plugins.YouTube.
|
|
288
|
+
"MindExecution.Plugins.Admin.u2emae8cb5.dll": "sha256-xrK3EFbor2pEuhuKt/MXQSBJmTt22JYH68udxQLbEi4=",
|
|
289
|
+
"MindExecution.Plugins.Directory.t621fsxq2i.dll": "sha256-q0/3D7+gLKCW1xhY+wgOFGWCSh6AhKWfyZ0GwzanC14=",
|
|
290
|
+
"MindExecution.Plugins.YouTube.arivgu92h1.dll": "sha256-Sje33rNG7OWB8dP5QngdiqI2qWjCIfhQx7b+v8Y7AIU="
|
|
291
291
|
}
|
|
292
292
|
},
|
|
293
293
|
"cacheBootResources": true,
|
|
Binary file
|
|
Binary file
|
package/wwwroot/appsettings.json
CHANGED
|
@@ -1,83 +1,83 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
2
|
+
"OpenRouter": {
|
|
3
|
+
"ApiKey": ""
|
|
4
|
+
},
|
|
5
|
+
"Execution": {
|
|
6
|
+
"Mode": "Concept",
|
|
7
|
+
"Model": "openai/gpt-4o-mini"
|
|
8
|
+
},
|
|
9
|
+
"Supabase": {
|
|
10
|
+
"Url": "https://otbyfkjxrkngvjziawki.supabase.co",
|
|
11
|
+
"Key": "sb_publishable_NpUs0RDJH2YnllsqTKO6TQ_1jTdSsNQ"
|
|
12
|
+
},
|
|
13
|
+
"Bridge": {
|
|
14
|
+
"Url": "app-origin",
|
|
15
|
+
"FallbackPort": 5148,
|
|
16
|
+
"AllowHostedLocalFallback": false
|
|
17
|
+
},
|
|
18
|
+
"ProjectStorage": {
|
|
19
|
+
"Mode": "LocalOnly",
|
|
20
|
+
"CloudProjectsEnabled": false
|
|
21
|
+
},
|
|
22
|
+
"CloudflareR2": {
|
|
23
|
+
"ProxyUrl": "https://r2-auth-proxy.lovecrdm.workers.dev",
|
|
24
|
+
"PublicBaseUrl": "https://r2-auth-proxy.lovecrdm.workers.dev/public",
|
|
25
|
+
"PrivateSignUrl": "https://r2-auth-proxy.lovecrdm.workers.dev/sign",
|
|
26
|
+
"PrivateBatchSignUrl": "https://r2-auth-proxy.lovecrdm.workers.dev/sign-batch",
|
|
27
|
+
"PrivateUrlTtlSeconds": 900
|
|
28
|
+
},
|
|
29
|
+
"CloudflareWebCapture": {
|
|
30
|
+
"EndpointUrl": "https://web-capture-worker.lovecrdm.workers.dev/capture",
|
|
31
|
+
"RequestTimeoutMs": 45000
|
|
32
|
+
},
|
|
33
|
+
"Payments": {
|
|
34
|
+
"Provider": "dodo"
|
|
35
|
+
},
|
|
36
|
+
"DodoPayments": {
|
|
37
|
+
"DefaultProductId": "",
|
|
38
|
+
"StandardPriceId": "dodo_pro_monthly_v1",
|
|
39
|
+
"EarlyPriceId": "dodo_pro_monthly_v1",
|
|
40
|
+
"LtdPriceId": "dodo_ltd_launch_v1",
|
|
41
|
+
"ReturnUrl": "https://mindexec.pages.dev/pricing",
|
|
42
|
+
"Environment": "test_mode"
|
|
43
|
+
},
|
|
44
|
+
"Paddle": {
|
|
45
|
+
"ClientToken": "",
|
|
46
|
+
"ProMonthlyPriceId": ""
|
|
47
|
+
},
|
|
48
|
+
"ProductProfile": {
|
|
49
|
+
"VariantKey": "platform",
|
|
50
|
+
"Slug": "mindexec",
|
|
51
|
+
"BrandName": "MindExec",
|
|
52
|
+
"ProductName": "MindCanvas",
|
|
53
|
+
"AppTitle": "MindExec",
|
|
54
|
+
"WorkspaceNounSingular": "canvas",
|
|
55
|
+
"WorkspaceNounPlural": "canvases",
|
|
56
|
+
"SignInTitle": "Welcome Back",
|
|
57
|
+
"SignUpTitle": "Create Account",
|
|
58
|
+
"SignInSubtitle": "Sign in to access your MindCanvas workspace.",
|
|
59
|
+
"SignUpSubtitle": "Sign up to start organizing your ideas on a visual canvas.",
|
|
60
|
+
"PrimaryCheckoutProvider": "dodo",
|
|
61
|
+
"CanonicalHost": "localhost",
|
|
62
|
+
"DodoCatalog": {
|
|
63
|
+
"StandardPriceId": "dodo_pro_monthly_v1",
|
|
64
|
+
"EarlyPriceId": "dodo_pro_monthly_v1",
|
|
65
|
+
"LtdPriceId": "dodo_ltd_launch_v1"
|
|
66
|
+
},
|
|
67
|
+
"MarketingTool": {
|
|
68
|
+
"Enabled": false,
|
|
69
|
+
"HideAppChrome": true,
|
|
70
|
+
"AllowMindCanvasRoute": false,
|
|
71
|
+
"HomeRoute": "/",
|
|
72
|
+
"ToolKey": "",
|
|
73
|
+
"HeroEyebrow": "Free local tool",
|
|
74
|
+
"HeroTitle": "",
|
|
75
|
+
"HeroSubtitle": "",
|
|
76
|
+
"PrimaryCtaText": "Open MindCanvas",
|
|
77
|
+
"PrimaryCtaHref": "/mindcanvas",
|
|
78
|
+
"SecondaryCtaText": "",
|
|
79
|
+
"SecondaryCtaHref": "",
|
|
80
|
+
"PrivacyNote": "Runs locally in your browser. No login. No database storage."
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
83
|
}
|
|
Binary file
|
package/wwwroot/favicon.ico
CHANGED
|
Binary file
|
package/wwwroot/icon-192.png
CHANGED
|
Binary file
|
package/wwwroot/icon-512.png
CHANGED
|
Binary file
|
package/wwwroot/index.html
CHANGED
|
@@ -7,55 +7,85 @@
|
|
|
7
7
|
<title>MindExec | Business Execution OS for solo builders</title>
|
|
8
8
|
<meta name="description" content="MindExec is an AI business execution OS for solo builders who want to turn notes, research, assets, and repeatable execution Skills into revenue-producing work." />
|
|
9
9
|
<base href="/" />
|
|
10
|
-
<meta name="theme-color" content="#
|
|
11
|
-
<link rel="icon" type="image/png" sizes="32x32" href="/mindexec-favicon-
|
|
12
|
-
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png?v=
|
|
13
|
-
<link rel="manifest" href="manifest.webmanifest?v=
|
|
10
|
+
<meta name="theme-color" content="#f8fafc" />
|
|
11
|
+
<link rel="icon" type="image/png" sizes="32x32" href="/mindexec-favicon-v3.png" />
|
|
12
|
+
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png?v=20260815-app-icon-v2" />
|
|
13
|
+
<link rel="manifest" href="manifest.webmanifest?v=20260815-app-icon-v2" />
|
|
14
14
|
<link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260629-ai-task-flow-v863" />
|
|
15
15
|
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260629-mdm-shadow-v856" />
|
|
16
16
|
<!-- ??좎뜦堉??Font Awesome (local) ??좎뜦堉??-->
|
|
17
17
|
<link rel="stylesheet" href="_content/MindExecution.Shared/lib/font-awesome/css/all.min.css" />
|
|
18
18
|
<!-- ??좎뜦堉??-->
|
|
19
19
|
<style>
|
|
20
|
+
html,
|
|
21
|
+
body {
|
|
22
|
+
margin: 0;
|
|
23
|
+
background: #f8fafc;
|
|
24
|
+
}
|
|
25
|
+
|
|
20
26
|
#app {
|
|
21
27
|
min-height: 100vh;
|
|
22
28
|
}
|
|
23
29
|
|
|
24
30
|
.app-static-fallback {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
position: fixed;
|
|
32
|
+
inset: 0;
|
|
33
|
+
z-index: 10;
|
|
34
|
+
box-sizing: border-box;
|
|
35
|
+
display: flex;
|
|
36
|
+
align-items: center;
|
|
37
|
+
justify-content: center;
|
|
38
|
+
width: 100%;
|
|
39
|
+
margin: 0;
|
|
40
|
+
padding: 24px;
|
|
41
|
+
background: #f8fafc;
|
|
42
|
+
color: #64748b;
|
|
43
|
+
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
30
44
|
}
|
|
31
45
|
|
|
32
|
-
.app-
|
|
33
|
-
display:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
font-size: 12px;
|
|
39
|
-
font-weight: 700;
|
|
40
|
-
color: #334155;
|
|
46
|
+
.app-loading-shell {
|
|
47
|
+
display: flex;
|
|
48
|
+
flex-direction: column;
|
|
49
|
+
align-items: center;
|
|
50
|
+
gap: 14px;
|
|
51
|
+
text-align: center;
|
|
41
52
|
}
|
|
42
53
|
|
|
43
|
-
.app-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
font-weight: 800;
|
|
54
|
+
.app-loading-shell__logo {
|
|
55
|
+
display: block;
|
|
56
|
+
width: 44px;
|
|
57
|
+
height: 44px;
|
|
48
58
|
}
|
|
49
59
|
|
|
50
|
-
.app-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
60
|
+
.app-loading-spinner {
|
|
61
|
+
box-sizing: border-box;
|
|
62
|
+
width: 34px;
|
|
63
|
+
height: 34px;
|
|
64
|
+
border: 3px solid #dbe5f0;
|
|
65
|
+
border-top-color: #2563eb;
|
|
66
|
+
border-radius: 50%;
|
|
67
|
+
animation: app-loading-spin 720ms linear infinite;
|
|
54
68
|
}
|
|
55
69
|
|
|
56
|
-
.app-
|
|
57
|
-
|
|
58
|
-
|
|
70
|
+
.app-loading-shell__label,
|
|
71
|
+
.app-loading-shell__noscript {
|
|
72
|
+
margin: 0;
|
|
73
|
+
font-size: 13px;
|
|
74
|
+
line-height: 1.4;
|
|
75
|
+
font-weight: 600;
|
|
76
|
+
letter-spacing: 0.01em;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@keyframes app-loading-spin {
|
|
80
|
+
to {
|
|
81
|
+
transform: rotate(360deg);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@media (prefers-reduced-motion: reduce) {
|
|
86
|
+
.app-loading-spinner {
|
|
87
|
+
animation-duration: 1600ms;
|
|
88
|
+
}
|
|
59
89
|
}
|
|
60
90
|
|
|
61
91
|
#blazor-error-ui {
|
|
@@ -99,13 +129,14 @@
|
|
|
99
129
|
<div id="app-container">
|
|
100
130
|
<div id="app">
|
|
101
131
|
<article class="app-static-fallback" id="app-static-fallback">
|
|
102
|
-
<div class="app-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
132
|
+
<div class="app-loading-shell" role="status" aria-live="polite" aria-label="Loading MindCanvas">
|
|
133
|
+
<img class="app-loading-shell__logo" src="icon-192.png?v=20260815-app-icon-v2" alt="" aria-hidden="true" />
|
|
134
|
+
<div class="app-loading-spinner" aria-hidden="true"></div>
|
|
135
|
+
<p class="app-loading-shell__label">Loading MindCanvas…</p>
|
|
136
|
+
<noscript>
|
|
137
|
+
<p class="app-loading-shell__noscript">JavaScript is required to start MindCanvas.</p>
|
|
138
|
+
</noscript>
|
|
139
|
+
</div>
|
|
109
140
|
</article>
|
|
110
141
|
</div>
|
|
111
142
|
</div>
|
|
@@ -583,7 +614,7 @@
|
|
|
583
614
|
}
|
|
584
615
|
|
|
585
616
|
const base = '_content/MindExecution.Shared/js/';
|
|
586
|
-
const scriptVersion = '
|
|
617
|
+
const scriptVersion = '20260815-canvas-coordinate-v972';
|
|
587
618
|
const scriptUrl = (script) => `${base}${script}?v=${scriptVersion}`;
|
|
588
619
|
console.log(`[Script Loader] Shared JS version: ${scriptVersion}`);
|
|
589
620
|
const criticalScripts = [
|
|
@@ -604,6 +635,7 @@
|
|
|
604
635
|
'mind-map-object-manager.js',
|
|
605
636
|
'mind-map-pipeline.js',
|
|
606
637
|
'mind-map-nodes.js',
|
|
638
|
+
'mind-map-animated-image-preview.js',
|
|
607
639
|
'mind-map-menu-manager.js',
|
|
608
640
|
'mind-map-multi-select.js',
|
|
609
641
|
'mind-map-interactions.js',
|
|
@@ -735,11 +767,3 @@
|
|
|
735
767
|
</body>
|
|
736
768
|
|
|
737
769
|
</html>
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|