@mindexec/cli 0.2.308 → 0.2.309
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 +23 -4
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js +19 -3
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-renderer.js +32 -3
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-text-overlay-v2.js +43 -15
- 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
|
@@ -1484,17 +1484,36 @@ html.mindcanvas-platform-apple .css3d-resolution-wrapper.is-automation-relation-
|
|
|
1484
1484
|
|
|
1485
1485
|
.mind-map-text-overlay-v2-card.is-passive {
|
|
1486
1486
|
pointer-events: none;
|
|
1487
|
-
/*
|
|
1488
|
-
|
|
1487
|
+
/* Passive overlay paints screen-space chrome for text-like nodes so the
|
|
1488
|
+
user does not see CSS3D's camera-scaled hard card edge in NEAR. */
|
|
1489
1489
|
contain: layout style;
|
|
1490
1490
|
overflow: visible;
|
|
1491
|
-
background:
|
|
1492
|
-
background-color:
|
|
1491
|
+
background: rgba(255, 255, 255, 0.985) !important;
|
|
1492
|
+
background-color: rgba(255, 255, 255, 0.985) !important;
|
|
1493
1493
|
background-image: none !important;
|
|
1494
|
+
border: 1px solid rgba(55, 65, 81, 0.28) !important;
|
|
1495
|
+
box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05) !important;
|
|
1496
|
+
border-radius: 2px !important;
|
|
1497
|
+
outline: none !important;
|
|
1498
|
+
}
|
|
1499
|
+
|
|
1500
|
+
.mind-map-text-overlay-v2-card.is-passive[data-content-type="memo"],
|
|
1501
|
+
.mind-map-text-overlay-v2-card.is-passive[data-content-type="note"] {
|
|
1502
|
+
border-color: rgba(55, 65, 81, 0.18) !important;
|
|
1503
|
+
border-radius: 6px !important;
|
|
1504
|
+
}
|
|
1505
|
+
|
|
1506
|
+
.mind-map-text-overlay-v2-card.is-passive[data-content-type="code"],
|
|
1507
|
+
.mind-map-text-overlay-v2-card.is-passive[data-content-type="text"],
|
|
1508
|
+
.mind-map-text-overlay-v2-card.is-passive[data-content-type="markdown"] {
|
|
1509
|
+
border-radius: 1px !important;
|
|
1494
1510
|
}
|
|
1495
1511
|
|
|
1496
1512
|
.mind-map-text-overlay-v2-card.is-passive .mind-map-text-overlay-v2-body {
|
|
1497
1513
|
pointer-events: auto;
|
|
1514
|
+
text-rendering: auto;
|
|
1515
|
+
-webkit-font-smoothing: auto;
|
|
1516
|
+
-moz-osx-font-smoothing: auto;
|
|
1498
1517
|
}
|
|
1499
1518
|
|
|
1500
1519
|
.mind-map-text-overlay-v2-shell {
|
|
@@ -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 = '20260621-
|
|
8
|
+
const MINDMAP_CORE_BUILD_ID = '20260621-near-lod-pixel-snap-v790';
|
|
9
9
|
const CanvasPhase = Object.freeze({
|
|
10
10
|
Booting: 'booting',
|
|
11
11
|
BoardFileLoading: 'board-file-loading',
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
});
|
|
78
78
|
const CanvasPhaseSet = new Set(Object.values(CanvasPhase));
|
|
79
79
|
const VIEWPORT_METRICS_POLL_INTERVAL = 480;
|
|
80
|
-
const PASSIVE_DOM_OVERLAY_RUNTIME_ENABLED =
|
|
80
|
+
const PASSIVE_DOM_OVERLAY_RUNTIME_ENABLED = true;
|
|
81
81
|
const PASSIVE_OVERLAY_ZOOM_DEFER_VISIBLE_THRESHOLD = 24;
|
|
82
82
|
const PASSIVE_OVERLAY_INTERACTIVE_REFRESH_INTERVAL_MS = 48;
|
|
83
83
|
const PASSIVE_OVERLAY_INTERACTIVE_DENSE_REFRESH_INTERVAL_MS = 72;
|
|
@@ -9023,6 +9023,16 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
9023
9023
|
const overlayV2State = useTextOverlayV2 && shouldTrackTextOverlayDirty
|
|
9024
9024
|
? (this._textOverlayV2State || null)
|
|
9025
9025
|
: null;
|
|
9026
|
+
let hasVisibleOverlayV2Card = false;
|
|
9027
|
+
if (overlayV2State?.cards?.forEach) {
|
|
9028
|
+
overlayV2State.cards.forEach(card => {
|
|
9029
|
+
if (hasVisibleOverlayV2Card || !card || card.style.display === 'none') {
|
|
9030
|
+
return;
|
|
9031
|
+
}
|
|
9032
|
+
|
|
9033
|
+
hasVisibleOverlayV2Card = true;
|
|
9034
|
+
});
|
|
9035
|
+
}
|
|
9026
9036
|
const hasOverlayV2DirtyState = !!(
|
|
9027
9037
|
overlayV2State && (
|
|
9028
9038
|
overlayV2State.dirtyLayout === true ||
|
|
@@ -9033,6 +9043,12 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
9033
9043
|
);
|
|
9034
9044
|
const hasOverlayFocus = hasFocusedTextOverlay || hasEditingOverlay;
|
|
9035
9045
|
const hasMotionBlockingOverlayFocus = hasEditingOverlay;
|
|
9046
|
+
const shouldCleanupInactivePassiveOverlay =
|
|
9047
|
+
useTextOverlayV2 &&
|
|
9048
|
+
hasVisibleOverlayV2Card === true &&
|
|
9049
|
+
shouldRenderPassiveDomTextOverlay !== true &&
|
|
9050
|
+
hasLiveInteractiveDomOverlay !== true &&
|
|
9051
|
+
!hasOverlayFocus;
|
|
9036
9052
|
const visibleOverlayCount = isPassiveDomOverlayRuntimeEnabled
|
|
9037
9053
|
? Math.max(
|
|
9038
9054
|
Number(this._visibleIds?.size || 0),
|
|
@@ -9563,7 +9579,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
9563
9579
|
const shouldSyncTextOverlays =
|
|
9564
9580
|
effectiveOverlayDirty === true ||
|
|
9565
9581
|
(useTextOverlayV2
|
|
9566
|
-
? (hasOverlayV2DirtyState || shouldRefreshPassiveDomTextOverlay || shouldFinalizePassiveOverlayLayout || (hasMotionBlockingOverlayFocus && shouldUpdateCss3d))
|
|
9582
|
+
? (hasOverlayV2DirtyState || shouldCleanupInactivePassiveOverlay || shouldRefreshPassiveDomTextOverlay || shouldFinalizePassiveOverlayLayout || (hasMotionBlockingOverlayFocus && shouldUpdateCss3d))
|
|
9567
9583
|
: (hasMotionBlockingOverlayFocus && shouldUpdateCss3d));
|
|
9568
9584
|
const shouldAttemptPassiveOverlayCameraFastPath =
|
|
9569
9585
|
useTextOverlayV2 &&
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
// ▲▲▲ [Usage] ▲▲▲
|
|
52
52
|
|
|
53
53
|
// Procedural line rendering settings
|
|
54
|
-
const LOD_RENDERER_BUILD_ID = '20260621-
|
|
54
|
+
const LOD_RENDERER_BUILD_ID = '20260621-near-lod-pixel-snap-v790';
|
|
55
55
|
const DirtyKind = Object.freeze({
|
|
56
56
|
ResidentFullRebuild: 'resident-full-rebuild',
|
|
57
57
|
ResidentPatch: 'resident-patch',
|
|
@@ -4482,13 +4482,41 @@ const LOD_RENDERER_BUILD_ID = '20260621-video-prefetch-v785';
|
|
|
4482
4482
|
}
|
|
4483
4483
|
}
|
|
4484
4484
|
|
|
4485
|
+
_restoreVisibleCss3dHighDetailForNear(nodeObjectsById, module, lodBand) {
|
|
4486
|
+
if (lodBand !== 'NEAR' || !nodeObjectsById) {
|
|
4487
|
+
return 0;
|
|
4488
|
+
}
|
|
4489
|
+
|
|
4490
|
+
let restoredCount = 0;
|
|
4491
|
+
for (const entry of nodeObjectsById.values()) {
|
|
4492
|
+
const cssElement = entry?.cssObject?.element || null;
|
|
4493
|
+
if (!cssElement ||
|
|
4494
|
+
entry.cssObject?.visible !== true ||
|
|
4495
|
+
cssElement.style.display === 'none' ||
|
|
4496
|
+
!cssElement.classList?.contains?.('lod-low')) {
|
|
4497
|
+
continue;
|
|
4498
|
+
}
|
|
4499
|
+
|
|
4500
|
+
this._setCss3dLodClass(entry, true);
|
|
4501
|
+
restoredCount++;
|
|
4502
|
+
}
|
|
4503
|
+
|
|
4504
|
+
if (restoredCount > 0 && module) {
|
|
4505
|
+
module._css3dVisualChangedThisFrame = true;
|
|
4506
|
+
module._css3dVisualChangedSinceLastRender = true;
|
|
4507
|
+
}
|
|
4508
|
+
|
|
4509
|
+
return restoredCount;
|
|
4510
|
+
}
|
|
4511
|
+
|
|
4485
4512
|
_shouldUseHighCss3dDetail(entry, module) {
|
|
4486
4513
|
const cameraZ = Number(module?.camera?.position?.z || 0);
|
|
4487
|
-
const
|
|
4488
|
-
if (
|
|
4514
|
+
const cameraBand = getLodBandForCameraZ(cameraZ);
|
|
4515
|
+
if (cameraBand === 'NEAR') {
|
|
4489
4516
|
return true;
|
|
4490
4517
|
}
|
|
4491
4518
|
|
|
4519
|
+
const lodBand = this._currentLodBand || cameraBand;
|
|
4492
4520
|
const nodeId = String(entry?.model?.id || entry?.model?.Id || entry?.glObject?.userData?.nodeId || '').trim();
|
|
4493
4521
|
const selectedNodeId = String(module?.selectedNodeIdJs || module?.selectedNodeId || '').trim();
|
|
4494
4522
|
if (nodeId && selectedNodeId && nodeId === selectedNodeId) {
|
|
@@ -6010,6 +6038,7 @@ const LOD_RENDERER_BUILD_ID = '20260621-video-prefetch-v785';
|
|
|
6010
6038
|
// ▼▼▼ [Fix] Keep CSS3D visibility synced while panning in near mode ▼▼▼
|
|
6011
6039
|
if (!this.isInLODMode) {
|
|
6012
6040
|
this._currentLodBand = lodBand;
|
|
6041
|
+
this._restoreVisibleCss3dHighDetailForNear(nodeObjectsById, module, lodBand);
|
|
6013
6042
|
const visibleIds = this._getNearVisibleIds(module);
|
|
6014
6043
|
if (!visibleIds || visibleIds.size === 0) {
|
|
6015
6044
|
perfTime('fullResHandoff', () => {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
const DEBUG = false;
|
|
5
|
-
const PASSIVE_DOM_OVERLAY_ENABLED =
|
|
5
|
+
const PASSIVE_DOM_OVERLAY_ENABLED = true;
|
|
6
6
|
const DEFAULT_OVERLAY_SCROLLABLE_SELECTOR = '.node-response, .note-content, .markdown-body, .prose, .note-textarea, .code-body, .code-content, .pdf-content, .text-content, .file-content, .map-node-memo__body, .map-node-memo__body-view, .map-node-memo__agent-plan-body, .map-node-memo__agent-console-body, pre, code';
|
|
7
7
|
const PASSIVE_OVERLAY_NEAR_EXIT_GRACE_MS = 220;
|
|
8
8
|
const PASSIVE_OVERLAY_CANDIDATE_GRACE_MS = 160;
|
|
@@ -336,7 +336,7 @@
|
|
|
336
336
|
state.passiveNearStickyUntil = 0;
|
|
337
337
|
}
|
|
338
338
|
|
|
339
|
-
return
|
|
339
|
+
return false;
|
|
340
340
|
}
|
|
341
341
|
|
|
342
342
|
function shouldUseVisiblePassiveOverlayCandidates(module) {
|
|
@@ -956,10 +956,6 @@
|
|
|
956
956
|
return false;
|
|
957
957
|
}
|
|
958
958
|
|
|
959
|
-
if (entry && supportsTextOverlayEntry(entry)) {
|
|
960
|
-
return false;
|
|
961
|
-
}
|
|
962
|
-
|
|
963
959
|
return true;
|
|
964
960
|
}
|
|
965
961
|
|
|
@@ -1298,6 +1294,29 @@
|
|
|
1298
1294
|
return Math.max(baseZIndex, candidate + baseZIndex);
|
|
1299
1295
|
}
|
|
1300
1296
|
|
|
1297
|
+
function getDevicePixelRatio() {
|
|
1298
|
+
const dpr = Number(globalThis?.devicePixelRatio || 1);
|
|
1299
|
+
return Number.isFinite(dpr) && dpr > 0 ? Math.min(4, Math.max(1, dpr)) : 1;
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
function snapScreenPixel(value, dpr = getDevicePixelRatio()) {
|
|
1303
|
+
const numeric = Number(value || 0);
|
|
1304
|
+
if (!Number.isFinite(numeric)) {
|
|
1305
|
+
return 0;
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
return Math.round(numeric * dpr) / dpr;
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
function snapScreenLength(value, dpr = getDevicePixelRatio()) {
|
|
1312
|
+
const numeric = Number(value || 0);
|
|
1313
|
+
if (!Number.isFinite(numeric)) {
|
|
1314
|
+
return 1;
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
return Math.max(1 / dpr, Math.round(Math.max(1 / dpr, numeric) * dpr) / dpr);
|
|
1318
|
+
}
|
|
1319
|
+
|
|
1301
1320
|
function applyPlacement(module, element, rect, zIndex, entry = null) {
|
|
1302
1321
|
if (!module || !element || !rect) {
|
|
1303
1322
|
return;
|
|
@@ -1305,8 +1324,13 @@
|
|
|
1305
1324
|
|
|
1306
1325
|
const baseWidth = Math.max(1, Number(rect.baseWidth || rect.width || 1));
|
|
1307
1326
|
const baseHeight = Math.max(1, Number(rect.baseHeight || rect.height || 1));
|
|
1308
|
-
const
|
|
1309
|
-
const
|
|
1327
|
+
const dpr = getDevicePixelRatio();
|
|
1328
|
+
const left = snapScreenPixel(rect.left || 0, dpr);
|
|
1329
|
+
const top = snapScreenPixel(rect.top || 0, dpr);
|
|
1330
|
+
const width = snapScreenLength(rect.width || baseWidth || 1, dpr);
|
|
1331
|
+
const height = snapScreenLength(rect.height || baseHeight || 1, dpr);
|
|
1332
|
+
const scaleX = width / baseWidth;
|
|
1333
|
+
const scaleY = height / baseHeight;
|
|
1310
1334
|
const preferCssZoom = shouldPreferOverlayCssZoom(module, entry);
|
|
1311
1335
|
const canUseZoom =
|
|
1312
1336
|
preferCssZoom &&
|
|
@@ -1318,10 +1342,10 @@
|
|
|
1318
1342
|
const shell = element.firstElementChild || null;
|
|
1319
1343
|
|
|
1320
1344
|
element.style.display = 'block';
|
|
1321
|
-
element.style.left = `${
|
|
1322
|
-
element.style.top = `${
|
|
1323
|
-
element.style.width = `${
|
|
1324
|
-
element.style.height = `${
|
|
1345
|
+
element.style.left = `${left}px`;
|
|
1346
|
+
element.style.top = `${top}px`;
|
|
1347
|
+
element.style.width = `${width}px`;
|
|
1348
|
+
element.style.height = `${height}px`;
|
|
1325
1349
|
element.style.transform = '';
|
|
1326
1350
|
element.style.zoom = '';
|
|
1327
1351
|
applyScrollbarScaleCompensation(element, scaleX, scaleY);
|
|
@@ -1336,14 +1360,18 @@
|
|
|
1336
1360
|
applyScrollbarScaleCompensation(shell, scaleX, scaleY);
|
|
1337
1361
|
|
|
1338
1362
|
if (canUseZoom) {
|
|
1339
|
-
shell.style.zoom = `${scaleX}`;
|
|
1363
|
+
shell.style.zoom = `${Math.max(0.01, Math.round(scaleX * 100000) / 100000)}`;
|
|
1340
1364
|
module._overlayDebugPlacementZoomCount = Number(module._overlayDebugPlacementZoomCount || 0) + 1;
|
|
1341
1365
|
} else {
|
|
1342
|
-
|
|
1366
|
+
const snappedScaleX = Math.max(0.01, Math.round(scaleX * 100000) / 100000);
|
|
1367
|
+
const snappedScaleY = Math.max(0.01, Math.round(scaleY * 100000) / 100000);
|
|
1368
|
+
shell.style.transform = `scale(${snappedScaleX}, ${snappedScaleY})`;
|
|
1343
1369
|
module._overlayDebugPlacementTransformCount = Number(module._overlayDebugPlacementTransformCount || 0) + 1;
|
|
1344
1370
|
}
|
|
1345
1371
|
} else if (!canUseZoom) {
|
|
1346
|
-
|
|
1372
|
+
const snappedScaleX = Math.max(0.01, Math.round(scaleX * 100000) / 100000);
|
|
1373
|
+
const snappedScaleY = Math.max(0.01, Math.round(scaleY * 100000) / 100000);
|
|
1374
|
+
element.style.transform = `scale(${snappedScaleX}, ${snappedScaleY})`;
|
|
1347
1375
|
module._overlayDebugPlacementTransformCount = Number(module._overlayDebugPlacementTransformCount || 0) + 1;
|
|
1348
1376
|
}
|
|
1349
1377
|
element.style.zIndex = String(resolveOverlayZIndex(entry, zIndex));
|
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=20260621-
|
|
11
|
-
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260621-
|
|
10
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260621-near-lod-pixel-snap-v790" />
|
|
11
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260621-near-lod-pixel-snap-v790" />
|
|
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 = '20260621-
|
|
582
|
+
const scriptVersion = '20260621-near-lod-pixel-snap-v790';
|
|
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": "qR19js7U",
|
|
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-uUo6RfwT80RrRI95nGw6SISUrer/BE9+7P3yVivBYXQ=",
|
|
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-5WxowCqXOM5gcHZIaCotoNvWIC1paUc/UWdcQ0tqaXo=",
|
|
82
82
|
"url": "_content/MindExecution.Shared/js/mind-map-core.js"
|
|
83
83
|
},
|
|
84
84
|
{
|
|
@@ -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-Nct6u0jhFqOSEzDDBROMfhB4SvUw0yb2DK065toNffk=",
|
|
118
118
|
"url": "_content/MindExecution.Shared/js/mind-map-lod-renderer.js"
|
|
119
119
|
},
|
|
120
120
|
{
|
|
@@ -154,7 +154,7 @@
|
|
|
154
154
|
"url": "_content/MindExecution.Shared/js/mind-map-text-lod-system.js"
|
|
155
155
|
},
|
|
156
156
|
{
|
|
157
|
-
"hash": "sha256-
|
|
157
|
+
"hash": "sha256-zGfIZ50rYA0nDkeMNB+wv2WRhssu6lHXb5ERwvLbcq4=",
|
|
158
158
|
"url": "_content/MindExecution.Shared/js/mind-map-text-overlay-v2.js"
|
|
159
159
|
},
|
|
160
160
|
{
|
|
@@ -834,7 +834,7 @@
|
|
|
834
834
|
"url": "image-manifest.json"
|
|
835
835
|
},
|
|
836
836
|
{
|
|
837
|
-
"hash": "sha256-
|
|
837
|
+
"hash": "sha256-5IzHBpG6V4csffSXfPHWC7BKgybKjT61K0dk0XOOvWE=",
|
|
838
838
|
"url": "index.html"
|
|
839
839
|
},
|
|
840
840
|
{
|