@mindexec/cli 0.2.297 → 0.2.299
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/wwwroot/_content/MindExecution.Shared/css/mind-map-overrides.css +16 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js +19 -1
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-manager.js +21 -4
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-renderer.js +41 -9
- package/wwwroot/index.html +3 -3
- package/wwwroot/service-worker-assets.js +6 -6
- package/wwwroot/service-worker.js +1 -1
package/package.json
CHANGED
|
@@ -95,6 +95,22 @@ body.mind-map-scroll-locked {
|
|
|
95
95
|
transform: translateZ(0);
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
+
.css3d-resolution-wrapper > .map-node,
|
|
99
|
+
.css3d-resolution-wrapper > .map-node-bubble,
|
|
100
|
+
.css3d-resolution-wrapper > .map-node-note,
|
|
101
|
+
.css3d-resolution-wrapper > .map-node-memo,
|
|
102
|
+
.css3d-resolution-wrapper > .map-node-file,
|
|
103
|
+
.css3d-resolution-wrapper > .map-node-image,
|
|
104
|
+
.css3d-resolution-wrapper > .map-node-code {
|
|
105
|
+
contain: layout style !important;
|
|
106
|
+
content-visibility: visible !important;
|
|
107
|
+
contain-intrinsic-size: auto !important;
|
|
108
|
+
transform: var(--css3d-node-resolution-transform, none) !important;
|
|
109
|
+
will-change: auto !important;
|
|
110
|
+
-webkit-backface-visibility: visible !important;
|
|
111
|
+
backface-visibility: visible !important;
|
|
112
|
+
}
|
|
113
|
+
|
|
98
114
|
.css3d-resolution-wrapper.node-type-image img,
|
|
99
115
|
.css3d-resolution-wrapper.node-type-video video,
|
|
100
116
|
.css3d-resolution-wrapper.node-type-embed iframe,
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
const DEBUG = false;
|
|
6
6
|
const FPS_DEBUG = false;
|
|
7
7
|
const FRAME_PERF_DEBUG = false;
|
|
8
|
-
const MINDMAP_CORE_BUILD_ID = '20260620-
|
|
8
|
+
const MINDMAP_CORE_BUILD_ID = '20260620-css3d-single-aa-v758';
|
|
9
9
|
const CanvasPhase = Object.freeze({
|
|
10
10
|
Booting: 'booting',
|
|
11
11
|
BoardFileLoading: 'board-file-loading',
|
|
@@ -1714,6 +1714,9 @@
|
|
|
1714
1714
|
elapsedSinceZoomInput > CAMERA_ZOOM_END_DELAY_MS) {
|
|
1715
1715
|
return false;
|
|
1716
1716
|
}
|
|
1717
|
+
if (module.lodRenderer?.willLodBandChange?.(module.camera) === true) {
|
|
1718
|
+
return false;
|
|
1719
|
+
}
|
|
1717
1720
|
|
|
1718
1721
|
module._viewSyncMotionActive = true;
|
|
1719
1722
|
module._cameraMovingThisFrame = false;
|
|
@@ -10321,11 +10324,26 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
10321
10324
|
this.targetY = y;
|
|
10322
10325
|
this.targetZ = z;
|
|
10323
10326
|
this.camera.position.set(x, y, z);
|
|
10327
|
+
this.camera.updateProjectionMatrix?.();
|
|
10328
|
+
this.camera.updateMatrixWorld?.(true);
|
|
10329
|
+
|
|
10330
|
+
if (typeof this.updateVisibility === 'function') {
|
|
10331
|
+
this.updateVisibility(this.camera);
|
|
10332
|
+
}
|
|
10333
|
+
if (this.lodRenderer) {
|
|
10334
|
+
if (typeof this.lodRenderer.requestVisualRefresh === 'function') {
|
|
10335
|
+
this.lodRenderer.requestVisualRefresh('camera-state-change');
|
|
10336
|
+
}
|
|
10337
|
+
if (this.nodeObjectsById && typeof this.lodRenderer.updateLOD === 'function') {
|
|
10338
|
+
this.lodRenderer.updateLOD(this.camera, this.nodeObjectsById, this);
|
|
10339
|
+
}
|
|
10340
|
+
}
|
|
10324
10341
|
|
|
10325
10342
|
if (cursorX !== undefined && cursorY !== undefined) {
|
|
10326
10343
|
this.updateCursorPosition(cursorX, cursorY, false, null, false);
|
|
10327
10344
|
}
|
|
10328
10345
|
requestCameraNavigationOverlayRefresh(this, 4);
|
|
10346
|
+
this._forceUpdateFrames = Math.max(Number(this._forceUpdateFrames || 0), 2);
|
|
10329
10347
|
this._lastPersistedViewStateKey = this.buildViewStateKey(this.buildViewStateSnapshot());
|
|
10330
10348
|
}
|
|
10331
10349
|
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
const CSS_IMAGE_PROMOTION_BUDGET_MS = 4;
|
|
16
16
|
const CSS_IMAGE_BLOB_CACHE_LIMIT = 160;
|
|
17
17
|
const CSS_IMAGE_DISPLAY_MAX_CONCURRENCY = 8;
|
|
18
|
+
const CSS3D_TEXT_NODE_RESOLUTION_SCALE = 2.0;
|
|
19
|
+
const CSS3D_MEDIA_NODE_RESOLUTION_SCALE = 1.0;
|
|
18
20
|
const LOOPBACK_ASSET_URL_REGEX = /^http:\/\/(?:127(?:\.\d{1,3}){3}|localhost|\[::1\])(?::\d+)?\/assets\//i;
|
|
19
21
|
let _cssImagePreviewHoldUntil = 0;
|
|
20
22
|
let _cssImagePromotionQueue = [];
|
|
@@ -57,6 +59,15 @@
|
|
|
57
59
|
|
|
58
60
|
syncMindCanvasPlatformRenderClasses();
|
|
59
61
|
|
|
62
|
+
function getCss3dNodeResolutionScale(contentTypeLower) {
|
|
63
|
+
const type = String(contentTypeLower || '').toLowerCase();
|
|
64
|
+
if (type === 'image' || type === 'video' || type === 'embed') {
|
|
65
|
+
return CSS3D_MEDIA_NODE_RESOLUTION_SCALE;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return CSS3D_TEXT_NODE_RESOLUTION_SCALE;
|
|
69
|
+
}
|
|
70
|
+
|
|
60
71
|
function detectCsvDelimiter(csvText) {
|
|
61
72
|
const text = String(csvText || '');
|
|
62
73
|
const candidates = [',', '\t', ';', '|'];
|
|
@@ -22785,7 +22796,7 @@
|
|
|
22785
22796
|
clonedElement.style.transformOrigin = '0% 0%';
|
|
22786
22797
|
|
|
22787
22798
|
// ▼▼▼ [Clarity] Scale factor for high-resolution rendering ▼▼▼
|
|
22788
|
-
const resolutionScale =
|
|
22799
|
+
const resolutionScale = getCss3dNodeResolutionScale(contentTypeLower);
|
|
22789
22800
|
clonedElement.style.width = `${width}px`;
|
|
22790
22801
|
clonedElement.style.height = `${height}px`;
|
|
22791
22802
|
clonedElement.style.minWidth = `${width}px`;
|
|
@@ -22803,7 +22814,9 @@
|
|
|
22803
22814
|
clonedElement.style.top = '0px';
|
|
22804
22815
|
// ▲▲▲ [Changed] ▲▲▲
|
|
22805
22816
|
|
|
22806
|
-
|
|
22817
|
+
const innerResolutionTransform = resolutionScale === 1 ? 'none' : `scale(${resolutionScale})`;
|
|
22818
|
+
clonedElement.style.transform = innerResolutionTransform;
|
|
22819
|
+
clonedElement.style.setProperty('--css3d-node-resolution-transform', innerResolutionTransform);
|
|
22807
22820
|
clonedElement.style.transformOrigin = '0 0'; // Scale from top-left
|
|
22808
22821
|
clonedElement.style.transition = 'none';
|
|
22809
22822
|
clonedElement.style.webkitTransition = 'none';
|
|
@@ -23032,6 +23045,7 @@
|
|
|
23032
23045
|
}
|
|
23033
23046
|
const inner = el.firstElementChild;
|
|
23034
23047
|
if (inner) {
|
|
23048
|
+
const innerResolutionTransform = resolutionScale === 1 ? 'none' : `scale(${resolutionScale})`;
|
|
23035
23049
|
if (inner.style.width !== `${worldWidth}px`) {
|
|
23036
23050
|
inner.style.width = `${worldWidth}px`;
|
|
23037
23051
|
}
|
|
@@ -23050,10 +23064,13 @@
|
|
|
23050
23064
|
if (inner.style.maxHeight !== `${worldHeight}px`) {
|
|
23051
23065
|
inner.style.maxHeight = `${worldHeight}px`;
|
|
23052
23066
|
}
|
|
23053
|
-
if (inner.style.transform !==
|
|
23054
|
-
inner.style.transform =
|
|
23067
|
+
if (inner.style.transform !== innerResolutionTransform) {
|
|
23068
|
+
inner.style.transform = innerResolutionTransform;
|
|
23055
23069
|
inner.style.transformOrigin = '0 0';
|
|
23056
23070
|
}
|
|
23071
|
+
if (inner.style.getPropertyValue('--css3d-node-resolution-transform') !== innerResolutionTransform) {
|
|
23072
|
+
inner.style.setProperty('--css3d-node-resolution-transform', innerResolutionTransform);
|
|
23073
|
+
}
|
|
23057
23074
|
}
|
|
23058
23075
|
}
|
|
23059
23076
|
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
// ▲▲▲ [Usage] ▲▲▲
|
|
52
52
|
|
|
53
53
|
// Procedural line rendering settings
|
|
54
|
-
const LOD_RENDERER_BUILD_ID = '20260620-
|
|
54
|
+
const LOD_RENDERER_BUILD_ID = '20260620-css3d-single-aa-v758';
|
|
55
55
|
const DirtyKind = Object.freeze({
|
|
56
56
|
ResidentFullRebuild: 'resident-full-rebuild',
|
|
57
57
|
ResidentPatch: 'resident-patch',
|
|
@@ -940,9 +940,11 @@
|
|
|
940
940
|
this._fullResHandoffStartedAt = 0;
|
|
941
941
|
this._fullResHandoffUntil = 0;
|
|
942
942
|
this._fullResHandoffPreviousBand = null;
|
|
943
|
+
this._fullResHandoffEnabled = false;
|
|
943
944
|
this._fullResHandoffMinCoverage = 0.92;
|
|
944
945
|
this._fullResHandoffMaxMs = 1400;
|
|
945
946
|
this._fullResPanHandoffMaxMs = 1200;
|
|
947
|
+
this._fullResHandoffHardMaxMs = 2600;
|
|
946
948
|
this._tmpWorldPos = new THREE.Vector3();
|
|
947
949
|
this._tmpWorldQuat = new THREE.Quaternion();
|
|
948
950
|
this._tmpWorldScale = new THREE.Vector3();
|
|
@@ -2532,6 +2534,10 @@
|
|
|
2532
2534
|
|
|
2533
2535
|
_startFullResHandoff(previousBand, reason, maxMs = this._fullResHandoffMaxMs) {
|
|
2534
2536
|
if (this.isLoading || this.isInLODMode !== false) return;
|
|
2537
|
+
if (this._fullResHandoffEnabled !== true) {
|
|
2538
|
+
this._finishFullResHandoff('disabled');
|
|
2539
|
+
return;
|
|
2540
|
+
}
|
|
2535
2541
|
|
|
2536
2542
|
const now = performance.now();
|
|
2537
2543
|
const duration = Number.isFinite(maxMs) ? maxMs : this._fullResHandoffMaxMs;
|
|
@@ -2560,6 +2566,12 @@
|
|
|
2560
2566
|
return;
|
|
2561
2567
|
}
|
|
2562
2568
|
|
|
2569
|
+
emitMindCanvasTrace('lod.fullResHandoff.finish', this._module, {
|
|
2570
|
+
reason: String(reason || 'unknown'),
|
|
2571
|
+
build: LOD_RENDERER_BUILD_ID,
|
|
2572
|
+
previousBand: this._fullResHandoffPreviousBand || null,
|
|
2573
|
+
ageMs: Math.max(0, performance.now() - Number(this._fullResHandoffStartedAt || performance.now()))
|
|
2574
|
+
});
|
|
2563
2575
|
this._fullResHandoffActive = false;
|
|
2564
2576
|
this._fullResHandoffStartedAt = 0;
|
|
2565
2577
|
this._fullResHandoffUntil = 0;
|
|
@@ -2582,11 +2594,13 @@
|
|
|
2582
2594
|
let visibleCssCount = 0;
|
|
2583
2595
|
let pendingCssCount = 0;
|
|
2584
2596
|
let pendingImageCssCount = 0;
|
|
2597
|
+
let pendingNonImageCssCount = 0;
|
|
2585
2598
|
for (const nodeId of visibleIds) {
|
|
2586
2599
|
const entry = nodeObjectsById.get(nodeId);
|
|
2587
2600
|
if (!entry || !supportsCss3dNodeModel(entry.model)) continue;
|
|
2588
2601
|
|
|
2589
2602
|
eligibleCount++;
|
|
2603
|
+
const contentType = getNodeContentType(entry.model);
|
|
2590
2604
|
const element = entry.cssObject?.element;
|
|
2591
2605
|
const cssVisible =
|
|
2592
2606
|
this._nearCssVisibleIds.has(nodeId) &&
|
|
@@ -2595,13 +2609,15 @@
|
|
|
2595
2609
|
element.style.display !== 'none';
|
|
2596
2610
|
if (!cssVisible) {
|
|
2597
2611
|
pendingCssCount++;
|
|
2598
|
-
if (
|
|
2612
|
+
if (contentType === 'image') {
|
|
2599
2613
|
pendingImageCssCount++;
|
|
2614
|
+
} else {
|
|
2615
|
+
pendingNonImageCssCount++;
|
|
2600
2616
|
}
|
|
2601
2617
|
continue;
|
|
2602
2618
|
}
|
|
2603
2619
|
|
|
2604
|
-
if (
|
|
2620
|
+
if (contentType === 'image') {
|
|
2605
2621
|
if (this._isCssImageReady(entry)) {
|
|
2606
2622
|
visibleCssCount++;
|
|
2607
2623
|
} else {
|
|
@@ -2623,15 +2639,30 @@
|
|
|
2623
2639
|
this._css3dProcessing !== true &&
|
|
2624
2640
|
this._nearEntryBoostFrames <= 0;
|
|
2625
2641
|
const hasPendingCss = pendingCssCount > 0;
|
|
2626
|
-
const
|
|
2642
|
+
const now = performance.now();
|
|
2643
|
+
const timedOut = now >= this._fullResHandoffUntil;
|
|
2644
|
+
const handoffAgeMs = Math.max(0, now - Number(this._fullResHandoffStartedAt || now));
|
|
2645
|
+
const hardTimedOut = handoffAgeMs >= this._fullResHandoffHardMaxMs;
|
|
2627
2646
|
const hasPendingImageCss = pendingImageCssCount > 0;
|
|
2628
|
-
const
|
|
2647
|
+
const hasPendingNonImageCss = pendingNonImageCssCount > 0;
|
|
2648
|
+
const coverageReady = coverage >= this._fullResHandoffMinCoverage && !hasPendingNonImageCss;
|
|
2629
2649
|
const idleReady = queueIdle && !hasPendingCss && !hasPendingImageCss;
|
|
2630
|
-
|
|
2631
|
-
|
|
2632
|
-
|
|
2650
|
+
const imageOnlyTimeoutReady = timedOut &&
|
|
2651
|
+
hasPendingImageCss &&
|
|
2652
|
+
!hasPendingNonImageCss &&
|
|
2653
|
+
visibleCssCount > 0;
|
|
2654
|
+
const hardTimeoutReady = hardTimedOut &&
|
|
2655
|
+
(coverage >= 0.5 || visibleCssCount > 0 || queueIdle);
|
|
2656
|
+
|
|
2657
|
+
if (coverageReady || idleReady || imageOnlyTimeoutReady || hardTimeoutReady) {
|
|
2658
|
+
this._finishFullResHandoff(
|
|
2659
|
+
idleReady ? 'queue-idle-all-css-visible' :
|
|
2660
|
+
imageOnlyTimeoutReady ? 'timeout-image-css' :
|
|
2661
|
+
hardTimeoutReady ? 'hard-timeout' :
|
|
2662
|
+
'coverage'
|
|
2663
|
+
);
|
|
2633
2664
|
} else {
|
|
2634
|
-
if (timedOut && hasPendingCss) {
|
|
2665
|
+
if (timedOut && hasPendingCss && !hardTimedOut) {
|
|
2635
2666
|
this._fullResHandoffUntil = Math.max(
|
|
2636
2667
|
Number(this._fullResHandoffUntil || 0),
|
|
2637
2668
|
performance.now() + this._fullResPanHandoffMaxMs
|
|
@@ -2644,6 +2675,7 @@
|
|
|
2644
2675
|
}
|
|
2645
2676
|
|
|
2646
2677
|
_maybeStartFullResHandoffForPendingCss(visibleIds, nodeObjectsById, module, previousBand) {
|
|
2678
|
+
if (this._fullResHandoffEnabled !== true) return;
|
|
2647
2679
|
if (this._fullResHandoffActive || this.isInLODMode || this.isLoading) return;
|
|
2648
2680
|
if (!visibleIds || visibleIds.size === 0 || !nodeObjectsById) return;
|
|
2649
2681
|
if (module?.isPanning !== true && this._nearEntryBoostFrames <= 0) return;
|
package/wwwroot/index.html
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
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
|
-
<link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260620-
|
|
11
|
-
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-
|
|
10
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260620-css3d-single-aa-v758" />
|
|
11
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-css3d-single-aa-v758" />
|
|
12
12
|
<!-- ?占썩뼹??Font Awesome (local) ?占썩뼹??-->
|
|
13
13
|
<link rel="stylesheet" href="_content/MindExecution.Shared/lib/font-awesome/css/all.min.css" />
|
|
14
14
|
<!-- ?占썩뼯??-->
|
|
@@ -579,7 +579,7 @@
|
|
|
579
579
|
}
|
|
580
580
|
|
|
581
581
|
const base = '_content/MindExecution.Shared/js/';
|
|
582
|
-
const scriptVersion = '20260620-
|
|
582
|
+
const scriptVersion = '20260620-css3d-single-aa-v758';
|
|
583
583
|
const scriptUrl = (script) => `${base}${script}?v=${scriptVersion}`;
|
|
584
584
|
console.log(`[Script Loader] Shared JS version: ${scriptVersion}`);
|
|
585
585
|
const criticalScripts = [
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
self.assetsManifest = {
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "Lnn9EG9z",
|
|
3
3
|
"assets": [
|
|
4
4
|
{
|
|
5
5
|
"hash": "sha256-+CSYMcqLNTsq3VnH11jgYyOCCdxvHzL74CBmo4sCmMU=",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"url": "_content/MindExecution.Shared/css/app.css"
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
|
-
"hash": "sha256-
|
|
45
|
+
"hash": "sha256-vVQG8dZd8XPd5lEd2meBWtET9S2XmSjWYfRG4FlMdIU=",
|
|
46
46
|
"url": "_content/MindExecution.Shared/css/mind-map-overrides.css"
|
|
47
47
|
},
|
|
48
48
|
{
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"url": "_content/MindExecution.Shared/js/marked.min.js"
|
|
79
79
|
},
|
|
80
80
|
{
|
|
81
|
-
"hash": "sha256-
|
|
81
|
+
"hash": "sha256-raydXreUnr7yxmsjp+XyoxUPnVTYKhB41VU1PLq3PCE=",
|
|
82
82
|
"url": "_content/MindExecution.Shared/js/mind-map-core.js"
|
|
83
83
|
},
|
|
84
84
|
{
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"url": "_content/MindExecution.Shared/js/mind-map-core.js.backup"
|
|
87
87
|
},
|
|
88
88
|
{
|
|
89
|
-
"hash": "sha256-
|
|
89
|
+
"hash": "sha256-3l5a2qua37GH1l1Use9Uvs+gcyAssbWa3EX3BKEATng=",
|
|
90
90
|
"url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
|
|
91
91
|
},
|
|
92
92
|
{
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
"url": "_content/MindExecution.Shared/js/mind-map-lod-plan-worker.js"
|
|
115
115
|
},
|
|
116
116
|
{
|
|
117
|
-
"hash": "sha256-
|
|
117
|
+
"hash": "sha256-iLW9QMJ9V9dlbrTy237dLYkCEZYYNiyXIf9NNPAIElE=",
|
|
118
118
|
"url": "_content/MindExecution.Shared/js/mind-map-lod-renderer.js"
|
|
119
119
|
},
|
|
120
120
|
{
|
|
@@ -834,7 +834,7 @@
|
|
|
834
834
|
"url": "image-manifest.json"
|
|
835
835
|
},
|
|
836
836
|
{
|
|
837
|
-
"hash": "sha256-
|
|
837
|
+
"hash": "sha256-aAhit/PSlXG9mUxc/uVhPIv5tlk5grTes5A5/VERvCk=",
|
|
838
838
|
"url": "index.html"
|
|
839
839
|
},
|
|
840
840
|
{
|