@mindexec/cli 0.2.449 → 0.2.451
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/js/mind-map-core.js +215 -200
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-interactions.js +15 -2
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-renderer.js +8 -8
- package/wwwroot/_framework/MindExecution.Core.9h7x2mjn0w.dll +0 -0
- package/wwwroot/_framework/{MindExecution.Kernel.fxnztqgsp3.dll → MindExecution.Kernel.8te3ay3qs6.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Admin.vtp5nvymq9.dll → MindExecution.Plugins.Admin.imt43kggvu.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Business.o0bonn1p2f.dll → MindExecution.Plugins.Business.26yozgyvan.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Concept.1omsw5caki.dll → MindExecution.Plugins.Concept.k7fd1qvmfx.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Directory.imwo19wy9c.dll → MindExecution.Plugins.Directory.88ng22x3y0.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.hakp8m5rxg.dll → MindExecution.Plugins.PlanMaster.ll20yqlc09.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.YouTube.2imuchw4ww.dll → MindExecution.Plugins.YouTube.gqu5xngvav.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Shared.9podjbu7w7.dll → MindExecution.Shared.6ivt1fatt3.dll} +0 -0
- package/wwwroot/_framework/MindExecution.Web.7tki7xqpt0.dll +0 -0
- package/wwwroot/_framework/blazor.boot.json +21 -21
- package/wwwroot/index.html +1 -1
- package/wwwroot/service-worker-assets.js +26 -26
- package/wwwroot/service-worker.js +1 -1
- package/wwwroot/_framework/MindExecution.Core.ocmk8xd0dx.dll +0 -0
- package/wwwroot/_framework/MindExecution.Web.rck7kmuixn.dll +0 -0
package/package.json
CHANGED
|
@@ -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 = '
|
|
8
|
+
const MINDMAP_CORE_BUILD_ID = '20260727-fixed-phase-grid-spotlight-v858';
|
|
9
9
|
const CanvasPhase = Object.freeze({
|
|
10
10
|
Booting: 'booting',
|
|
11
11
|
BoardFileLoading: 'board-file-loading',
|
|
@@ -112,6 +112,7 @@
|
|
|
112
112
|
const LOCAL_SNAP_GRID_DEFAULT_STEP_PX = 24;
|
|
113
113
|
const LOCAL_SNAP_GRID_DEFAULT_MAJOR_STEP_PX = 240;
|
|
114
114
|
const LOCAL_SNAP_GRID_DEFAULT_OPACITY = 0.42;
|
|
115
|
+
const LOCAL_SNAP_GRID_TILE_OVERSCAN_PX = LOCAL_SNAP_GRID_MAX_STEP_PX * 10;
|
|
115
116
|
const CAMERA_STATIONARY_INTERACTION_FRAME_DELAY_MS = 48;
|
|
116
117
|
const CAMERA_ZOOM_END_DELAY_MS = 150;
|
|
117
118
|
const CAMERA_MOTION_GLOBAL_STYLE_CLASS_ENABLED = false;
|
|
@@ -3226,13 +3227,17 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3226
3227
|
this._motionGridHideTimer = null;
|
|
3227
3228
|
this._lastMotionGridKey = '';
|
|
3228
3229
|
this._localSnapGridLayer = null;
|
|
3230
|
+
this._localSnapGridSpotlightLayer = null;
|
|
3229
3231
|
this._localSnapGridVisible = false;
|
|
3230
3232
|
this._lastLocalSnapGridKey = '';
|
|
3231
3233
|
this._lastLocalSnapGridTransformKey = '';
|
|
3232
3234
|
this._lastLocalSnapGridOpacity = '';
|
|
3235
|
+
this._lastLocalSnapGridPatternPeriodPx = LOCAL_SNAP_GRID_DEFAULT_MAJOR_STEP_PX;
|
|
3236
|
+
this._localSnapGridTileCanvas = null;
|
|
3237
|
+
this._localSnapGridPointerRevision = 0;
|
|
3238
|
+
this._lastLocalSnapGridPositionRevision = -1;
|
|
3233
3239
|
this._localSnapGridStyleDeferredForZoom = false;
|
|
3234
3240
|
this._localSnapGridPointerWakeDeferredForZoom = false;
|
|
3235
|
-
this._lastLocalSnapGridPointerSnapKey = '';
|
|
3236
3241
|
this._lastSnapGridClientX = null;
|
|
3237
3242
|
this._lastSnapGridClientY = null;
|
|
3238
3243
|
this._animationIdleTimerId = null;
|
|
@@ -3313,7 +3318,6 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3313
3318
|
const previousY = this._lastSnapGridClientY;
|
|
3314
3319
|
this._lastSnapGridClientX = roundedX;
|
|
3315
3320
|
this._lastSnapGridClientY = roundedY;
|
|
3316
|
-
this._lastLocalSnapGridPointerSnapKey = `screen:${roundedX}|${roundedY}`;
|
|
3317
3321
|
this._localSnapGridPointerRevision = Math.max(0, Number(this._localSnapGridPointerRevision || 0)) + 1;
|
|
3318
3322
|
this._lastLocalSnapGridTransformKey = '';
|
|
3319
3323
|
if (previousX !== roundedX || previousY !== roundedY) {
|
|
@@ -3325,50 +3329,6 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3325
3329
|
return true;
|
|
3326
3330
|
}
|
|
3327
3331
|
|
|
3328
|
-
_getLocalSnapGridSnappedScreenCenter(rawCenterX, rawCenterY, width, height, camera = null) {
|
|
3329
|
-
const safeWidth = Math.max(1, Number(width || 0));
|
|
3330
|
-
const safeHeight = Math.max(1, Number(height || 0));
|
|
3331
|
-
const grid = Math.max(1, Number(this.GRID_SIZE || 10));
|
|
3332
|
-
const fallbackCenterX = Math.max(0, Math.min(safeWidth, Number(rawCenterX || 0)));
|
|
3333
|
-
const fallbackCenterY = Math.max(0, Math.min(safeHeight, Number(rawCenterY || 0)));
|
|
3334
|
-
const fallback = {
|
|
3335
|
-
centerX: fallbackCenterX,
|
|
3336
|
-
centerY: fallbackCenterY,
|
|
3337
|
-
snapKey: `screen:${Math.round(fallbackCenterX / grid)}|${Math.round(fallbackCenterY / grid)}`
|
|
3338
|
-
};
|
|
3339
|
-
const activeCamera = camera || this.camera;
|
|
3340
|
-
if (!activeCamera?.isPerspectiveCamera) {
|
|
3341
|
-
return fallback;
|
|
3342
|
-
}
|
|
3343
|
-
|
|
3344
|
-
const cameraZ = Math.max(1, Number(activeCamera.position?.z || 1));
|
|
3345
|
-
const vfov = (Number(activeCamera.fov || 45) * Math.PI) / 180;
|
|
3346
|
-
const viewHeight = 2 * Math.tan(vfov / 2) * cameraZ;
|
|
3347
|
-
const viewWidth = viewHeight * Math.max(0.1, Number(activeCamera.aspect || (safeWidth / safeHeight) || 1));
|
|
3348
|
-
if (viewWidth <= 0 || viewHeight <= 0) {
|
|
3349
|
-
return fallback;
|
|
3350
|
-
}
|
|
3351
|
-
|
|
3352
|
-
const cameraX = Number(activeCamera.position?.x || 0);
|
|
3353
|
-
const cameraY = Number(activeCamera.position?.y || 0);
|
|
3354
|
-
const worldX = cameraX + ((fallbackCenterX / safeWidth) - 0.5) * viewWidth;
|
|
3355
|
-
const worldY = cameraY + (0.5 - (fallbackCenterY / safeHeight)) * viewHeight;
|
|
3356
|
-
const snappedWorldX = Math.round(worldX / grid) * grid;
|
|
3357
|
-
const snappedWorldY = Math.round(worldY / grid) * grid;
|
|
3358
|
-
|
|
3359
|
-
return {
|
|
3360
|
-
centerX: Math.max(0, Math.min(
|
|
3361
|
-
safeWidth,
|
|
3362
|
-
(((snappedWorldX - cameraX) / viewWidth) + 0.5) * safeWidth
|
|
3363
|
-
)),
|
|
3364
|
-
centerY: Math.max(0, Math.min(
|
|
3365
|
-
safeHeight,
|
|
3366
|
-
(0.5 - ((snappedWorldY - cameraY) / viewHeight)) * safeHeight
|
|
3367
|
-
)),
|
|
3368
|
-
snapKey: `world:${Math.round(snappedWorldX / grid)}|${Math.round(snappedWorldY / grid)}`
|
|
3369
|
-
};
|
|
3370
|
-
}
|
|
3371
|
-
|
|
3372
3332
|
_ensureBackgroundGridLayerHost() {
|
|
3373
3333
|
if (!this.container || typeof document === 'undefined') {
|
|
3374
3334
|
return null;
|
|
@@ -3484,51 +3444,163 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3484
3444
|
if (!this.container || typeof document === 'undefined') {
|
|
3485
3445
|
return null;
|
|
3486
3446
|
}
|
|
3447
|
+
|
|
3448
|
+
const spotlight = this._ensureLocalSnapGridSpotlightLayer();
|
|
3449
|
+
if (!spotlight) {
|
|
3450
|
+
return null;
|
|
3451
|
+
}
|
|
3452
|
+
|
|
3487
3453
|
if (this._localSnapGridLayer?.isConnected) {
|
|
3488
|
-
|
|
3454
|
+
if (this._localSnapGridLayer.parentNode !== spotlight) {
|
|
3455
|
+
spotlight.appendChild(this._localSnapGridLayer);
|
|
3456
|
+
}
|
|
3489
3457
|
return this._localSnapGridLayer;
|
|
3490
3458
|
}
|
|
3491
3459
|
|
|
3492
|
-
const layer = document.createElement('
|
|
3460
|
+
const layer = document.createElement('div');
|
|
3493
3461
|
layer.className = 'mindcanvas-local-snap-grid-layer';
|
|
3494
3462
|
layer.setAttribute('aria-hidden', 'true');
|
|
3495
|
-
layer.width = LOCAL_SNAP_GRID_DIAMETER_PX;
|
|
3496
|
-
layer.height = LOCAL_SNAP_GRID_DIAMETER_PX;
|
|
3497
3463
|
layer.style.position = 'absolute';
|
|
3498
|
-
layer.style.left =
|
|
3499
|
-
layer.style.top =
|
|
3500
|
-
layer.style.width = `${LOCAL_SNAP_GRID_DIAMETER_PX}px`;
|
|
3501
|
-
layer.style.height = `${LOCAL_SNAP_GRID_DIAMETER_PX}px`;
|
|
3502
|
-
layer.style.zIndex = '
|
|
3464
|
+
layer.style.left = `-${LOCAL_SNAP_GRID_TILE_OVERSCAN_PX}px`;
|
|
3465
|
+
layer.style.top = `-${LOCAL_SNAP_GRID_TILE_OVERSCAN_PX}px`;
|
|
3466
|
+
layer.style.width = `${LOCAL_SNAP_GRID_DIAMETER_PX + (LOCAL_SNAP_GRID_TILE_OVERSCAN_PX * 2)}px`;
|
|
3467
|
+
layer.style.height = `${LOCAL_SNAP_GRID_DIAMETER_PX + (LOCAL_SNAP_GRID_TILE_OVERSCAN_PX * 2)}px`;
|
|
3468
|
+
layer.style.zIndex = '1';
|
|
3503
3469
|
layer.style.pointerEvents = 'none';
|
|
3504
|
-
layer.style.display = '
|
|
3470
|
+
layer.style.display = 'block';
|
|
3505
3471
|
layer.style.opacity = '0';
|
|
3506
3472
|
layer.style.backgroundColor = 'transparent';
|
|
3507
|
-
layer.style.
|
|
3508
|
-
layer.style.
|
|
3509
|
-
layer.style.contain = 'strict';
|
|
3473
|
+
layer.style.backgroundRepeat = 'repeat';
|
|
3474
|
+
layer.style.contain = 'paint';
|
|
3510
3475
|
layer.style.willChange = 'transform';
|
|
3511
3476
|
layer.style.transform = 'translate3d(0, 0, 0)';
|
|
3512
3477
|
layer.style.transition = 'none';
|
|
3513
3478
|
|
|
3514
|
-
|
|
3479
|
+
spotlight.appendChild(layer);
|
|
3515
3480
|
|
|
3516
3481
|
this._localSnapGridLayer = layer;
|
|
3517
3482
|
this._lastLocalSnapGridKey = '';
|
|
3518
3483
|
this._lastLocalSnapGridTransformKey = '';
|
|
3519
3484
|
this._lastLocalSnapGridPositionRevision = -1;
|
|
3520
|
-
this._lastLocalSnapGridPointerSnapKey = '';
|
|
3521
3485
|
this._lastLocalSnapGridOpacity = '';
|
|
3486
|
+
this._lastLocalSnapGridPatternPeriodPx = LOCAL_SNAP_GRID_DEFAULT_MAJOR_STEP_PX;
|
|
3522
3487
|
this._localSnapGridStyleDeferredForZoom = false;
|
|
3523
3488
|
return layer;
|
|
3524
3489
|
}
|
|
3525
3490
|
|
|
3491
|
+
_ensureLocalSnapGridSpotlightLayer() {
|
|
3492
|
+
if (!this.container || typeof document === 'undefined') {
|
|
3493
|
+
return null;
|
|
3494
|
+
}
|
|
3495
|
+
if (this._localSnapGridSpotlightLayer?.isConnected) {
|
|
3496
|
+
this._placeBackgroundGridLayer(this._localSnapGridSpotlightLayer);
|
|
3497
|
+
return this._localSnapGridSpotlightLayer;
|
|
3498
|
+
}
|
|
3499
|
+
|
|
3500
|
+
const spotlight = document.createElement('div');
|
|
3501
|
+
spotlight.className = 'mindcanvas-local-snap-grid-spotlight-layer';
|
|
3502
|
+
spotlight.setAttribute('aria-hidden', 'true');
|
|
3503
|
+
spotlight.style.position = 'absolute';
|
|
3504
|
+
spotlight.style.left = '0';
|
|
3505
|
+
spotlight.style.top = '0';
|
|
3506
|
+
spotlight.style.width = `${LOCAL_SNAP_GRID_DIAMETER_PX}px`;
|
|
3507
|
+
spotlight.style.height = `${LOCAL_SNAP_GRID_DIAMETER_PX}px`;
|
|
3508
|
+
spotlight.style.zIndex = '0';
|
|
3509
|
+
spotlight.style.pointerEvents = 'none';
|
|
3510
|
+
spotlight.style.display = 'none';
|
|
3511
|
+
spotlight.style.opacity = '0';
|
|
3512
|
+
spotlight.style.borderRadius = '50%';
|
|
3513
|
+
spotlight.style.overflow = 'hidden';
|
|
3514
|
+
spotlight.style.background = 'radial-gradient(circle, rgba(255,255,255,0.34) 0%, rgba(219,234,254,0.14) 52%, rgba(219,234,254,0) 78%)';
|
|
3515
|
+
const spotlightMask = 'radial-gradient(circle at center, #000 0%, rgba(0,0,0,0.96) 36%, rgba(0,0,0,0.62) 58%, rgba(0,0,0,0.16) 78%, transparent 100%)';
|
|
3516
|
+
spotlight.style.maskImage = spotlightMask;
|
|
3517
|
+
spotlight.style.webkitMaskImage = spotlightMask;
|
|
3518
|
+
spotlight.style.contain = 'strict';
|
|
3519
|
+
spotlight.style.willChange = 'transform';
|
|
3520
|
+
spotlight.style.transform = 'translate3d(0, 0, 0)';
|
|
3521
|
+
spotlight.style.transition = 'none';
|
|
3522
|
+
this._placeBackgroundGridLayer(spotlight);
|
|
3523
|
+
this._localSnapGridSpotlightLayer = spotlight;
|
|
3524
|
+
return spotlight;
|
|
3525
|
+
}
|
|
3526
|
+
|
|
3527
|
+
_syncLocalSnapGridSpotlightPosition(width, height, left = 0, top = 0) {
|
|
3528
|
+
const spotlight = this._ensureLocalSnapGridSpotlightLayer();
|
|
3529
|
+
if (!spotlight) {
|
|
3530
|
+
return false;
|
|
3531
|
+
}
|
|
3532
|
+
const hasPointer =
|
|
3533
|
+
this._lastSnapGridClientX !== null &&
|
|
3534
|
+
this._lastSnapGridClientX !== undefined &&
|
|
3535
|
+
this._lastSnapGridClientY !== null &&
|
|
3536
|
+
this._lastSnapGridClientY !== undefined &&
|
|
3537
|
+
Number.isFinite(Number(this._lastSnapGridClientX)) &&
|
|
3538
|
+
Number.isFinite(Number(this._lastSnapGridClientY));
|
|
3539
|
+
const centerX = hasPointer
|
|
3540
|
+
? Math.max(0, Math.min(width, Number(this._lastSnapGridClientX) - left))
|
|
3541
|
+
: width / 2;
|
|
3542
|
+
const centerY = hasPointer
|
|
3543
|
+
? Math.max(0, Math.min(height, Number(this._lastSnapGridClientY) - top))
|
|
3544
|
+
: height / 2;
|
|
3545
|
+
const spotlightLeft = Math.round(centerX - LOCAL_SNAP_GRID_RADIUS_PX);
|
|
3546
|
+
const spotlightTop = Math.round(centerY - LOCAL_SNAP_GRID_RADIUS_PX);
|
|
3547
|
+
const containerLeft = Math.round(Number(left) || 0);
|
|
3548
|
+
const containerTop = Math.round(Number(top) || 0);
|
|
3549
|
+
const patternPeriod = Math.max(
|
|
3550
|
+
1,
|
|
3551
|
+
Math.round(Number(this._lastLocalSnapGridPatternPeriodPx || LOCAL_SNAP_GRID_DEFAULT_MAJOR_STEP_PX))
|
|
3552
|
+
);
|
|
3553
|
+
const positiveModulo = (value, size) => ((value % size) + size) % size;
|
|
3554
|
+
const gridPhaseX = Math.round(positiveModulo(
|
|
3555
|
+
LOCAL_SNAP_GRID_TILE_OVERSCAN_PX - containerLeft - spotlightLeft,
|
|
3556
|
+
patternPeriod
|
|
3557
|
+
));
|
|
3558
|
+
const gridPhaseY = Math.round(positiveModulo(
|
|
3559
|
+
LOCAL_SNAP_GRID_TILE_OVERSCAN_PX - containerTop - spotlightTop,
|
|
3560
|
+
patternPeriod
|
|
3561
|
+
));
|
|
3562
|
+
if (DEBUG) {
|
|
3563
|
+
const fixedPhaseX = positiveModulo(
|
|
3564
|
+
containerLeft + spotlightLeft - LOCAL_SNAP_GRID_TILE_OVERSCAN_PX + gridPhaseX,
|
|
3565
|
+
patternPeriod
|
|
3566
|
+
);
|
|
3567
|
+
const fixedPhaseY = positiveModulo(
|
|
3568
|
+
containerTop + spotlightTop - LOCAL_SNAP_GRID_TILE_OVERSCAN_PX + gridPhaseY,
|
|
3569
|
+
patternPeriod
|
|
3570
|
+
);
|
|
3571
|
+
window.MindCanvasDevGuards?.assert?.(
|
|
3572
|
+
fixedPhaseX === 0 && fixedPhaseY === 0,
|
|
3573
|
+
'local-snap-grid-phase-drift',
|
|
3574
|
+
{
|
|
3575
|
+
containerLeft,
|
|
3576
|
+
containerTop,
|
|
3577
|
+
spotlightLeft,
|
|
3578
|
+
spotlightTop,
|
|
3579
|
+
gridPhaseX,
|
|
3580
|
+
gridPhaseY,
|
|
3581
|
+
patternPeriod
|
|
3582
|
+
}
|
|
3583
|
+
);
|
|
3584
|
+
}
|
|
3585
|
+
const transformKey = `${spotlightLeft}|${spotlightTop}|${patternPeriod}|${gridPhaseX}|${gridPhaseY}`;
|
|
3586
|
+
if (transformKey === this._lastLocalSnapGridTransformKey) {
|
|
3587
|
+
return false;
|
|
3588
|
+
}
|
|
3589
|
+
this._lastLocalSnapGridTransformKey = transformKey;
|
|
3590
|
+
spotlight.style.transform = `translate3d(${spotlightLeft}px, ${spotlightTop}px, 0)`;
|
|
3591
|
+
if (this._localSnapGridLayer) {
|
|
3592
|
+
this._localSnapGridLayer.style.transform =
|
|
3593
|
+
`translate3d(${gridPhaseX}px, ${gridPhaseY}px, 0)`;
|
|
3594
|
+
}
|
|
3595
|
+
return true;
|
|
3596
|
+
}
|
|
3597
|
+
|
|
3526
3598
|
_getLocalSnapGridStyleKind() {
|
|
3527
3599
|
const themeName = String(this.currentThemeName || '').trim();
|
|
3528
3600
|
return themeName === 'SpatialGrid2D' ? 'dot' : 'line';
|
|
3529
3601
|
}
|
|
3530
3602
|
|
|
3531
|
-
|
|
3603
|
+
_drawLocalSnapGridTile(canvas, styleKind, smallStepPx, majorStepPx) {
|
|
3532
3604
|
if (!canvas || typeof canvas.getContext !== 'function') {
|
|
3533
3605
|
return false;
|
|
3534
3606
|
}
|
|
@@ -3538,105 +3610,60 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3538
3610
|
return false;
|
|
3539
3611
|
}
|
|
3540
3612
|
|
|
3541
|
-
const
|
|
3542
|
-
const
|
|
3543
|
-
|
|
3544
|
-
|
|
3613
|
+
const smallStep = Math.max(LOCAL_SNAP_GRID_MIN_STEP_PX, Number(smallStepPx) || LOCAL_SNAP_GRID_DEFAULT_STEP_PX);
|
|
3614
|
+
const majorStep = Math.max(
|
|
3615
|
+
smallStep,
|
|
3616
|
+
Math.min(
|
|
3617
|
+
LOCAL_SNAP_GRID_TILE_OVERSCAN_PX,
|
|
3618
|
+
Number(majorStepPx) || LOCAL_SNAP_GRID_DEFAULT_MAJOR_STEP_PX
|
|
3619
|
+
)
|
|
3620
|
+
);
|
|
3621
|
+
const tileSize = Math.max(1, Math.round(majorStep));
|
|
3622
|
+
if (canvas.width !== tileSize) {
|
|
3623
|
+
canvas.width = tileSize;
|
|
3545
3624
|
}
|
|
3546
|
-
if (canvas.height !==
|
|
3547
|
-
canvas.height =
|
|
3625
|
+
if (canvas.height !== tileSize) {
|
|
3626
|
+
canvas.height = tileSize;
|
|
3548
3627
|
}
|
|
3549
|
-
|
|
3550
|
-
const smallStep = Math.max(LOCAL_SNAP_GRID_MIN_STEP_PX, Number(smallStepPx) || LOCAL_SNAP_GRID_DEFAULT_STEP_PX);
|
|
3551
|
-
const majorStep = Math.max(smallStep, Number(majorStepPx) || LOCAL_SNAP_GRID_DEFAULT_MAJOR_STEP_PX);
|
|
3552
|
-
ctx.clearRect(0, 0, size, size);
|
|
3553
|
-
const radiusSq = center * center;
|
|
3554
|
-
const forCenteredSteps = (step, callback) => {
|
|
3555
|
-
callback(center);
|
|
3556
|
-
for (let offset = step; offset <= center; offset += step) {
|
|
3557
|
-
callback(center - offset);
|
|
3558
|
-
callback(center + offset);
|
|
3559
|
-
}
|
|
3560
|
-
};
|
|
3628
|
+
ctx.clearRect(0, 0, tileSize, tileSize);
|
|
3561
3629
|
|
|
3562
3630
|
if (styleKind === 'dot') {
|
|
3563
3631
|
ctx.fillStyle = 'rgba(58, 69, 88, 0.46)';
|
|
3564
3632
|
const dotRadius = 1.15;
|
|
3565
|
-
|
|
3566
|
-
|
|
3567
|
-
const dySq = dy * dy;
|
|
3568
|
-
forCenteredSteps(smallStep, x => {
|
|
3569
|
-
const dx = x - center;
|
|
3570
|
-
if ((dx * dx) + dySq > radiusSq) {
|
|
3571
|
-
return;
|
|
3572
|
-
}
|
|
3633
|
+
for (let y = 0; y < tileSize; y += smallStep) {
|
|
3634
|
+
for (let x = 0; x < tileSize; x += smallStep) {
|
|
3573
3635
|
ctx.beginPath();
|
|
3574
3636
|
ctx.arc(x, y, dotRadius, 0, Math.PI * 2);
|
|
3575
3637
|
ctx.fill();
|
|
3576
|
-
}
|
|
3577
|
-
}
|
|
3638
|
+
}
|
|
3639
|
+
}
|
|
3578
3640
|
|
|
3579
3641
|
ctx.fillStyle = 'rgba(15, 23, 42, 0.62)';
|
|
3580
|
-
|
|
3581
|
-
|
|
3582
|
-
|
|
3583
|
-
const dySq = dy * dy;
|
|
3584
|
-
forCenteredSteps(majorStep, x => {
|
|
3585
|
-
const dx = x - center;
|
|
3586
|
-
if ((dx * dx) + dySq > radiusSq) {
|
|
3587
|
-
return;
|
|
3588
|
-
}
|
|
3589
|
-
ctx.beginPath();
|
|
3590
|
-
ctx.arc(x, y, majorDotRadius, 0, Math.PI * 2);
|
|
3591
|
-
ctx.fill();
|
|
3592
|
-
});
|
|
3593
|
-
});
|
|
3642
|
+
ctx.beginPath();
|
|
3643
|
+
ctx.arc(0, 0, 1.85, 0, Math.PI * 2);
|
|
3644
|
+
ctx.fill();
|
|
3594
3645
|
} else {
|
|
3595
3646
|
const drawLines = (step, color, width) => {
|
|
3596
3647
|
ctx.strokeStyle = color;
|
|
3597
3648
|
ctx.lineWidth = width;
|
|
3598
3649
|
ctx.beginPath();
|
|
3599
|
-
|
|
3600
|
-
const dx = x - center;
|
|
3601
|
-
const spanSq = radiusSq - (dx * dx);
|
|
3602
|
-
if (spanSq <= 0) {
|
|
3603
|
-
return;
|
|
3604
|
-
}
|
|
3605
|
-
const span = Math.sqrt(spanSq);
|
|
3650
|
+
for (let x = 0; x < tileSize; x += step) {
|
|
3606
3651
|
const pixelX = Math.round(x) + 0.5;
|
|
3607
|
-
ctx.moveTo(pixelX,
|
|
3608
|
-
ctx.lineTo(pixelX,
|
|
3609
|
-
}
|
|
3610
|
-
|
|
3611
|
-
const dy = y - center;
|
|
3612
|
-
const spanSq = radiusSq - (dy * dy);
|
|
3613
|
-
if (spanSq <= 0) {
|
|
3614
|
-
return;
|
|
3615
|
-
}
|
|
3616
|
-
const span = Math.sqrt(spanSq);
|
|
3652
|
+
ctx.moveTo(pixelX, 0);
|
|
3653
|
+
ctx.lineTo(pixelX, tileSize);
|
|
3654
|
+
}
|
|
3655
|
+
for (let y = 0; y < tileSize; y += step) {
|
|
3617
3656
|
const pixelY = Math.round(y) + 0.5;
|
|
3618
|
-
ctx.moveTo(
|
|
3619
|
-
ctx.lineTo(
|
|
3620
|
-
}
|
|
3657
|
+
ctx.moveTo(0, pixelY);
|
|
3658
|
+
ctx.lineTo(tileSize, pixelY);
|
|
3659
|
+
}
|
|
3621
3660
|
ctx.stroke();
|
|
3622
3661
|
};
|
|
3623
3662
|
|
|
3624
3663
|
drawLines(smallStep, 'rgba(51, 65, 85, 0.24)', 1);
|
|
3625
3664
|
drawLines(majorStep, 'rgba(15, 23, 42, 0.42)', 1);
|
|
3626
3665
|
}
|
|
3627
|
-
|
|
3628
|
-
ctx.globalCompositeOperation = 'destination-in';
|
|
3629
|
-
const fade = ctx.createRadialGradient(center, center, center * 0.18, center, center, center);
|
|
3630
|
-
fade.addColorStop(0, 'rgba(0,0,0,1)');
|
|
3631
|
-
fade.addColorStop(0.34, 'rgba(0,0,0,0.92)');
|
|
3632
|
-
fade.addColorStop(0.56, 'rgba(0,0,0,0.48)');
|
|
3633
|
-
fade.addColorStop(0.74, 'rgba(0,0,0,0.14)');
|
|
3634
|
-
fade.addColorStop(0.88, 'rgba(0,0,0,0.035)');
|
|
3635
|
-
fade.addColorStop(1, 'rgba(0,0,0,0)');
|
|
3636
|
-
ctx.fillStyle = fade;
|
|
3637
|
-
ctx.fillRect(0, 0, size, size);
|
|
3638
|
-
ctx.globalCompositeOperation = 'source-over';
|
|
3639
|
-
return true;
|
|
3666
|
+
return tileSize;
|
|
3640
3667
|
}
|
|
3641
3668
|
|
|
3642
3669
|
_applyLocalSnapGridStyle(
|
|
@@ -3656,7 +3683,13 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3656
3683
|
LOCAL_SNAP_GRID_MIN_STEP_PX,
|
|
3657
3684
|
Math.min(LOCAL_SNAP_GRID_MAX_STEP_PX, Number(smallStepPx) || LOCAL_SNAP_GRID_DEFAULT_STEP_PX)
|
|
3658
3685
|
);
|
|
3659
|
-
const safeMajorStep = Math.max(
|
|
3686
|
+
const safeMajorStep = Math.max(
|
|
3687
|
+
safeSmallStep,
|
|
3688
|
+
Math.min(
|
|
3689
|
+
LOCAL_SNAP_GRID_TILE_OVERSCAN_PX,
|
|
3690
|
+
Number(majorStepPx) || LOCAL_SNAP_GRID_DEFAULT_MAJOR_STEP_PX
|
|
3691
|
+
)
|
|
3692
|
+
);
|
|
3660
3693
|
const safeOpacity = Math.max(0.2, Math.min(0.56, Number(opacity) || LOCAL_SNAP_GRID_DEFAULT_OPACITY));
|
|
3661
3694
|
const localGridKey = [
|
|
3662
3695
|
keyPrefix,
|
|
@@ -3670,15 +3703,24 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3670
3703
|
return false;
|
|
3671
3704
|
}
|
|
3672
3705
|
|
|
3673
|
-
this._lastLocalSnapGridKey = localGridKey;
|
|
3674
3706
|
const opacityValue = safeOpacity.toFixed(3);
|
|
3675
3707
|
this._lastLocalSnapGridOpacity = opacityValue;
|
|
3676
|
-
this.
|
|
3677
|
-
|
|
3708
|
+
const tileCanvas = this._localSnapGridTileCanvas || document.createElement('canvas');
|
|
3709
|
+
this._localSnapGridTileCanvas = tileCanvas;
|
|
3710
|
+
const tileSize = this._drawLocalSnapGridTile(
|
|
3711
|
+
tileCanvas,
|
|
3678
3712
|
safeStyleKind,
|
|
3679
3713
|
safeSmallStep,
|
|
3680
3714
|
safeMajorStep
|
|
3681
3715
|
);
|
|
3716
|
+
if (!Number.isFinite(tileSize) || tileSize <= 0) {
|
|
3717
|
+
return false;
|
|
3718
|
+
}
|
|
3719
|
+
this._lastLocalSnapGridKey = localGridKey;
|
|
3720
|
+
this._lastLocalSnapGridPatternPeriodPx = tileSize;
|
|
3721
|
+
this._lastLocalSnapGridTransformKey = '';
|
|
3722
|
+
layer.style.backgroundImage = `url("${tileCanvas.toDataURL('image/png')}")`;
|
|
3723
|
+
layer.style.backgroundSize = `${tileSize}px ${tileSize}px`;
|
|
3682
3724
|
if (layer.style.opacity !== opacityValue) {
|
|
3683
3725
|
layer.style.opacity = opacityValue;
|
|
3684
3726
|
}
|
|
@@ -3712,6 +3754,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3712
3754
|
if (!layer) {
|
|
3713
3755
|
return;
|
|
3714
3756
|
}
|
|
3757
|
+
const spotlight = this._localSnapGridSpotlightLayer;
|
|
3715
3758
|
|
|
3716
3759
|
if (visible === true) {
|
|
3717
3760
|
const opacityValue = targetOpacity == null
|
|
@@ -3726,11 +3769,20 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3726
3769
|
if (opacityValue && layer.style.opacity !== opacityValue) {
|
|
3727
3770
|
layer.style.opacity = opacityValue;
|
|
3728
3771
|
}
|
|
3772
|
+
if (spotlight) {
|
|
3773
|
+
if (spotlight.style.display !== 'block') {
|
|
3774
|
+
spotlight.style.display = 'block';
|
|
3775
|
+
}
|
|
3776
|
+
if (spotlight.style.opacity !== '1') {
|
|
3777
|
+
spotlight.style.opacity = '1';
|
|
3778
|
+
}
|
|
3779
|
+
}
|
|
3729
3780
|
return;
|
|
3730
3781
|
}
|
|
3731
3782
|
|
|
3732
3783
|
if (this._localSnapGridVisible !== true &&
|
|
3733
|
-
layer.style.display === 'none'
|
|
3784
|
+
layer.style.display === 'none' &&
|
|
3785
|
+
(!spotlight || spotlight.style.display === 'none')) {
|
|
3734
3786
|
return;
|
|
3735
3787
|
}
|
|
3736
3788
|
|
|
@@ -3743,6 +3795,14 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3743
3795
|
if (layer.style.display !== 'none') {
|
|
3744
3796
|
layer.style.display = 'none';
|
|
3745
3797
|
}
|
|
3798
|
+
if (spotlight) {
|
|
3799
|
+
if (spotlight.style.opacity !== '0') {
|
|
3800
|
+
spotlight.style.opacity = '0';
|
|
3801
|
+
}
|
|
3802
|
+
if (spotlight.style.display !== 'none') {
|
|
3803
|
+
spotlight.style.display = 'none';
|
|
3804
|
+
}
|
|
3805
|
+
}
|
|
3746
3806
|
}
|
|
3747
3807
|
|
|
3748
3808
|
_syncLocalSnapGridLayer(visible = true) {
|
|
@@ -3766,37 +3826,11 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3766
3826
|
const height = Math.max(1, Number(viewportMetrics.height || 0));
|
|
3767
3827
|
const left = Number(viewportMetrics.left || 0);
|
|
3768
3828
|
const top = Number(viewportMetrics.top || 0);
|
|
3769
|
-
const
|
|
3770
|
-
this._lastSnapGridClientX !== null &&
|
|
3771
|
-
this._lastSnapGridClientX !== undefined &&
|
|
3772
|
-
this._lastSnapGridClientY !== null &&
|
|
3773
|
-
this._lastSnapGridClientY !== undefined &&
|
|
3774
|
-
Number.isFinite(Number(this._lastSnapGridClientX)) &&
|
|
3775
|
-
Number.isFinite(Number(this._lastSnapGridClientY));
|
|
3776
|
-
const centerX = hasPointer
|
|
3777
|
-
? Math.max(0, Math.min(width, Number(this._lastSnapGridClientX) - left))
|
|
3778
|
-
: width / 2;
|
|
3779
|
-
const centerY = hasPointer
|
|
3780
|
-
? Math.max(0, Math.min(height, Number(this._lastSnapGridClientY) - top))
|
|
3781
|
-
: height / 2;
|
|
3782
|
-
const snappedCenter = this._getLocalSnapGridSnappedScreenCenter(
|
|
3783
|
-
centerX,
|
|
3784
|
-
centerY,
|
|
3785
|
-
width,
|
|
3786
|
-
height,
|
|
3787
|
-
this.camera
|
|
3788
|
-
);
|
|
3789
|
-
const snappedLayerLeft = Math.round(snappedCenter.centerX - LOCAL_SNAP_GRID_RADIUS_PX);
|
|
3790
|
-
const snappedLayerTop = Math.round(snappedCenter.centerY - LOCAL_SNAP_GRID_RADIUS_PX);
|
|
3791
|
-
const transformKey = `${snappedLayerLeft}|${snappedLayerTop}`;
|
|
3792
|
-
if (transformKey !== this._lastLocalSnapGridTransformKey) {
|
|
3793
|
-
this._lastLocalSnapGridTransformKey = transformKey;
|
|
3794
|
-
layer.style.transform = `translate3d(${snappedLayerLeft}px, ${snappedLayerTop}px, 0)`;
|
|
3795
|
-
}
|
|
3796
|
-
this._lastLocalSnapGridPointerSnapKey = snappedCenter.snapKey;
|
|
3797
|
-
this._lastLocalSnapGridPositionRevision = Math.max(0, Number(this._localSnapGridPointerRevision || 0));
|
|
3829
|
+
const pointerRevision = Math.max(0, Number(this._localSnapGridPointerRevision || 0));
|
|
3798
3830
|
|
|
3799
3831
|
if (this.isZooming === true && !!this._lastLocalSnapGridKey) {
|
|
3832
|
+
this._syncLocalSnapGridSpotlightPosition(width, height, left, top);
|
|
3833
|
+
this._lastLocalSnapGridPositionRevision = pointerRevision;
|
|
3800
3834
|
this._localSnapGridStyleDeferredForZoom = true;
|
|
3801
3835
|
this._setLocalSnapGridVisible(true, this._lastLocalSnapGridOpacity || null);
|
|
3802
3836
|
return true;
|
|
@@ -3843,6 +3877,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3843
3877
|
this._localSnapGridStyleDeferredForZoom = true;
|
|
3844
3878
|
}
|
|
3845
3879
|
|
|
3880
|
+
this._syncLocalSnapGridSpotlightPosition(width, height, left, top);
|
|
3881
|
+
this._lastLocalSnapGridPositionRevision = pointerRevision;
|
|
3846
3882
|
this._setLocalSnapGridVisible(true, this._lastLocalSnapGridOpacity || opacity.toFixed(3));
|
|
3847
3883
|
return true;
|
|
3848
3884
|
}
|
|
@@ -3877,34 +3913,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3877
3913
|
const height = Math.max(1, Number(viewportMetrics.height || 0));
|
|
3878
3914
|
const left = Number(viewportMetrics.left || 0);
|
|
3879
3915
|
const top = Number(viewportMetrics.top || 0);
|
|
3880
|
-
|
|
3881
|
-
this._lastSnapGridClientX !== null &&
|
|
3882
|
-
this._lastSnapGridClientX !== undefined &&
|
|
3883
|
-
this._lastSnapGridClientY !== null &&
|
|
3884
|
-
this._lastSnapGridClientY !== undefined &&
|
|
3885
|
-
Number.isFinite(Number(this._lastSnapGridClientX)) &&
|
|
3886
|
-
Number.isFinite(Number(this._lastSnapGridClientY));
|
|
3887
|
-
const centerX = hasPointer
|
|
3888
|
-
? Math.max(0, Math.min(width, Number(this._lastSnapGridClientX) - left))
|
|
3889
|
-
: width / 2;
|
|
3890
|
-
const centerY = hasPointer
|
|
3891
|
-
? Math.max(0, Math.min(height, Number(this._lastSnapGridClientY) - top))
|
|
3892
|
-
: height / 2;
|
|
3893
|
-
const snappedCenter = this._getLocalSnapGridSnappedScreenCenter(
|
|
3894
|
-
centerX,
|
|
3895
|
-
centerY,
|
|
3896
|
-
width,
|
|
3897
|
-
height,
|
|
3898
|
-
this.camera
|
|
3899
|
-
);
|
|
3900
|
-
const snappedLayerLeft = Math.round(snappedCenter.centerX - LOCAL_SNAP_GRID_RADIUS_PX);
|
|
3901
|
-
const snappedLayerTop = Math.round(snappedCenter.centerY - LOCAL_SNAP_GRID_RADIUS_PX);
|
|
3902
|
-
const transformKey = `${snappedLayerLeft}|${snappedLayerTop}`;
|
|
3903
|
-
if (transformKey !== this._lastLocalSnapGridTransformKey) {
|
|
3904
|
-
this._lastLocalSnapGridTransformKey = transformKey;
|
|
3905
|
-
layer.style.transform = `translate3d(${snappedLayerLeft}px, ${snappedLayerTop}px, 0)`;
|
|
3906
|
-
}
|
|
3907
|
-
this._lastLocalSnapGridPointerSnapKey = snappedCenter.snapKey;
|
|
3916
|
+
this._syncLocalSnapGridSpotlightPosition(width, height, left, top);
|
|
3908
3917
|
this._lastLocalSnapGridPositionRevision = pointerRevision;
|
|
3909
3918
|
|
|
3910
3919
|
if (this.isZooming === true) {
|
|
@@ -7845,7 +7854,13 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
7845
7854
|
this._localSnapGridVisible = false;
|
|
7846
7855
|
this._lastLocalSnapGridKey = '';
|
|
7847
7856
|
this._lastLocalSnapGridTransformKey = '';
|
|
7857
|
+
this._lastLocalSnapGridPatternPeriodPx = LOCAL_SNAP_GRID_DEFAULT_MAJOR_STEP_PX;
|
|
7858
|
+
}
|
|
7859
|
+
if (this._localSnapGridSpotlightLayer) {
|
|
7860
|
+
this._localSnapGridSpotlightLayer.remove();
|
|
7861
|
+
this._localSnapGridSpotlightLayer = null;
|
|
7848
7862
|
}
|
|
7863
|
+
this._localSnapGridTileCanvas = null;
|
|
7849
7864
|
if (this._backgroundGridLayerHost) {
|
|
7850
7865
|
this._backgroundGridLayerHost.remove();
|
|
7851
7866
|
this._backgroundGridLayerHost = null;
|
|
@@ -245,6 +245,7 @@ window.MindMapInteractions = (function () {
|
|
|
245
245
|
boundOnMouseUp: onMouseUp.bind(null, module),
|
|
246
246
|
boundOnResizeHandleCapture: onResizeHandleCapture.bind(null, module),
|
|
247
247
|
boundOnHoverMove: onHoverMove.bind(null, module),
|
|
248
|
+
boundOnLocalSnapGridPointerMove: e => updateLocalSnapGridPointer(module, e?.clientX, e?.clientY),
|
|
248
249
|
boundOnKeyDown: onKeyDown.bind(null, module),
|
|
249
250
|
boundOnKeyUp: onKeyUp.bind(null, module),
|
|
250
251
|
boundOnWindowBlur: clearPhysicalWheelModifierState.bind(null, module),
|
|
@@ -1589,8 +1590,8 @@ window.MindMapInteractions = (function () {
|
|
|
1589
1590
|
// ▲▲▲ [New] Scrollbar-drag helper functions ▲▲▲
|
|
1590
1591
|
|
|
1591
1592
|
// ▼▼▼ [New] Centralized Pointer Update Helper ▼▼▼
|
|
1592
|
-
function
|
|
1593
|
-
if (!module
|
|
1593
|
+
function updateLocalSnapGridPointer(module, clientX, clientY) {
|
|
1594
|
+
if (!module) return false;
|
|
1594
1595
|
|
|
1595
1596
|
const shouldUpdateLocalSnapGridPointer = !!(
|
|
1596
1597
|
module._isLocalSnapGridThemeEnabled?.() === true ||
|
|
@@ -1606,6 +1607,13 @@ window.MindMapInteractions = (function () {
|
|
|
1606
1607
|
module.requestAnimationWake?.('local-snap-grid-pointer');
|
|
1607
1608
|
}
|
|
1608
1609
|
}
|
|
1610
|
+
return localSnapGridMoved === true;
|
|
1611
|
+
}
|
|
1612
|
+
|
|
1613
|
+
function setPointerFromClientPosition(module, clientX, clientY) {
|
|
1614
|
+
if (!module?.pointer) return false;
|
|
1615
|
+
|
|
1616
|
+
updateLocalSnapGridPointer(module, clientX, clientY);
|
|
1609
1617
|
|
|
1610
1618
|
const metrics = getCachedViewportMetrics(module);
|
|
1611
1619
|
if (!metrics || metrics.width <= 0 || metrics.height <= 0) {
|
|
@@ -7032,6 +7040,9 @@ window.MindMapInteractions = (function () {
|
|
|
7032
7040
|
|
|
7033
7041
|
|
|
7034
7042
|
function onHoverMove(module, e) {
|
|
7043
|
+
// Keep the cheap spotlight tracking before any hover/raycast early exit.
|
|
7044
|
+
updateLocalSnapGridPointer(module, e?.clientX, e?.clientY);
|
|
7045
|
+
|
|
7035
7046
|
// Do not run hover raycasts or DOM hit checks while the camera is moving.
|
|
7036
7047
|
if (
|
|
7037
7048
|
module.isPanning ||
|
|
@@ -7737,6 +7748,7 @@ window.MindMapInteractions = (function () {
|
|
|
7737
7748
|
moduleInstance.container.addEventListener('gesturechange', handlers.boundOnGestureChange, { passive: false });
|
|
7738
7749
|
moduleInstance.container.addEventListener('gestureend', handlers.boundOnGestureEnd, { passive: false });
|
|
7739
7750
|
}
|
|
7751
|
+
window.addEventListener('pointermove', handlers.boundOnLocalSnapGridPointerMove, { passive: true, capture: true });
|
|
7740
7752
|
window.addEventListener('resize', handlers.boundOnResize);
|
|
7741
7753
|
window.addEventListener('orientationchange', handlers.boundOnViewportMetricsChange);
|
|
7742
7754
|
if (window.visualViewport) {
|
|
@@ -7811,6 +7823,7 @@ window.MindMapInteractions = (function () {
|
|
|
7811
7823
|
moduleInstance.container.removeEventListener('gesturechange', handlers.boundOnGestureChange);
|
|
7812
7824
|
moduleInstance.container.removeEventListener('gestureend', handlers.boundOnGestureEnd);
|
|
7813
7825
|
}
|
|
7826
|
+
window.removeEventListener('pointermove', handlers.boundOnLocalSnapGridPointerMove, true);
|
|
7814
7827
|
window.removeEventListener('resize', handlers.boundOnResize);
|
|
7815
7828
|
window.removeEventListener('orientationchange', handlers.boundOnViewportMetricsChange);
|
|
7816
7829
|
if (window.visualViewport) {
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
// ▲▲▲ [Usage] ▲▲▲
|
|
52
52
|
|
|
53
53
|
// Procedural line rendering settings
|
|
54
|
-
const LOD_RENDERER_BUILD_ID = '
|
|
54
|
+
const LOD_RENDERER_BUILD_ID = '20260727-mid-line-invariant-v847';
|
|
55
55
|
const DirtyKind = Object.freeze({
|
|
56
56
|
ResidentFullRebuild: 'resident-full-rebuild',
|
|
57
57
|
ResidentPatch: 'resident-patch',
|
|
@@ -2275,9 +2275,9 @@
|
|
|
2275
2275
|
`,
|
|
2276
2276
|
transparent: true,
|
|
2277
2277
|
depthWrite: true, // Enable depth write to occlude grid
|
|
2278
|
-
depthTest: true,
|
|
2279
|
-
side: THREE.DoubleSide,
|
|
2280
|
-
polygonOffset: true,
|
|
2278
|
+
depthTest: true,
|
|
2279
|
+
side: THREE.DoubleSide,
|
|
2280
|
+
polygonOffset: true,
|
|
2281
2281
|
polygonOffsetFactor: -20.0, // Priority over Node(-10.0) -> -20.0
|
|
2282
2282
|
polygonOffsetUnits: -20.0
|
|
2283
2283
|
});
|
|
@@ -7354,7 +7354,7 @@
|
|
|
7354
7354
|
|
|
7355
7355
|
_updateLineRenderState(cameraZ, currentTextLikeCount, lodBand = this._currentLodBand) {
|
|
7356
7356
|
const disableByCount = currentTextLikeCount > LINE_DISABLE_THRESHOLD;
|
|
7357
|
-
|
|
7357
|
+
this._shouldDeferPostLoadLineRestore(lodBand);
|
|
7358
7358
|
const interactionHot =
|
|
7359
7359
|
this._module?.isDraggingNode === true ||
|
|
7360
7360
|
this._module?.isDraggingMultipleNodes === true ||
|
|
@@ -7363,7 +7363,7 @@
|
|
|
7363
7363
|
this.isDragging === true;
|
|
7364
7364
|
this._suspendLinesForInteraction = interactionHot;
|
|
7365
7365
|
// ▼▼▼ [Fix] Respect manual loading state override ▼▼▼
|
|
7366
|
-
const shouldDisable = disableByCount || this.isLoading ||
|
|
7366
|
+
const shouldDisable = disableByCount || this.isLoading || this._suspendLinesForInteraction === true;
|
|
7367
7367
|
// ▲▲▲ [Fix] ▲▲▲
|
|
7368
7368
|
|
|
7369
7369
|
if (this._disableLineRender !== shouldDisable) {
|
|
@@ -7951,8 +7951,8 @@
|
|
|
7951
7951
|
this._deferLineRestoreUntil = shouldDeferLineRestore
|
|
7952
7952
|
? (performance.now() + POST_LOAD_LINE_RESTORE_DELAY_MS)
|
|
7953
7953
|
: 0;
|
|
7954
|
-
this._lineDetailsPatchPending =
|
|
7955
|
-
this._disableLineRender =
|
|
7954
|
+
this._lineDetailsPatchPending = shouldDeferLineRestore;
|
|
7955
|
+
this._disableLineRender = false;
|
|
7956
7956
|
this.lineDataDirty = true;
|
|
7957
7957
|
this._residentRebuildPending = !hasResidentInstances;
|
|
7958
7958
|
this._residentRebuildDeferredUntil = hasResidentInstances
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mainAssemblyName": "MindExecution.Web",
|
|
3
3
|
"resources": {
|
|
4
|
-
"hash": "sha256-
|
|
4
|
+
"hash": "sha256-k4lwKbjJ9g84j895BOdrv32i+eUyBH6giaTuE3n/Wks=",
|
|
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.9h7x2mjn0w.dll": "MindExecution.Core.dll",
|
|
126
|
+
"MindExecution.Kernel.8te3ay3qs6.dll": "MindExecution.Kernel.dll",
|
|
127
|
+
"MindExecution.Plugins.Admin.imt43kggvu.dll": "MindExecution.Plugins.Admin.dll",
|
|
128
|
+
"MindExecution.Plugins.Business.26yozgyvan.dll": "MindExecution.Plugins.Business.dll",
|
|
129
|
+
"MindExecution.Plugins.Concept.k7fd1qvmfx.dll": "MindExecution.Plugins.Concept.dll",
|
|
130
|
+
"MindExecution.Plugins.Directory.88ng22x3y0.dll": "MindExecution.Plugins.Directory.dll",
|
|
131
|
+
"MindExecution.Plugins.PlanMaster.ll20yqlc09.dll": "MindExecution.Plugins.PlanMaster.dll",
|
|
132
|
+
"MindExecution.Plugins.YouTube.gqu5xngvav.dll": "MindExecution.Plugins.YouTube.dll",
|
|
133
|
+
"MindExecution.Shared.6ivt1fatt3.dll": "MindExecution.Shared.dll",
|
|
134
|
+
"MindExecution.Web.7tki7xqpt0.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.9h7x2mjn0w.dll": "sha256-4xFFMH5EUob9RXyohd+joGOoBTaarjSHyzY5kx3PRew=",
|
|
280
|
+
"MindExecution.Kernel.8te3ay3qs6.dll": "sha256-RND/bkb6ILP8m7z9LRP827D9tNbpZLIKIcrd5uzm8/w=",
|
|
281
|
+
"MindExecution.Plugins.Business.26yozgyvan.dll": "sha256-BhpTZtrJq26NpvKtYqHfYLKf2pJ93U0/R7WiPZMSedc=",
|
|
282
|
+
"MindExecution.Plugins.Concept.k7fd1qvmfx.dll": "sha256-QEcnhJgU5OshztWG/haRRIbg3NnykUuI0vEYkx2d9rU=",
|
|
283
|
+
"MindExecution.Plugins.PlanMaster.ll20yqlc09.dll": "sha256-KWcHEcj5l+QAGZXfxf7DCnyH1ACHwBwSVCgRReQPvyc=",
|
|
284
|
+
"MindExecution.Shared.6ivt1fatt3.dll": "sha256-Qp5kQWJBgQ7XXBot/X/66cV19jqiEwUFLd9b20Oamgw=",
|
|
285
|
+
"MindExecution.Web.7tki7xqpt0.dll": "sha256-JVtnGWCckZKnsid5V7G/01xTp3mnhCwxl112V16RTCg="
|
|
286
286
|
},
|
|
287
287
|
"lazyAssembly": {
|
|
288
|
-
"MindExecution.Plugins.Admin.
|
|
289
|
-
"MindExecution.Plugins.Directory.
|
|
290
|
-
"MindExecution.Plugins.YouTube.
|
|
288
|
+
"MindExecution.Plugins.Admin.imt43kggvu.dll": "sha256-Bt7O2MFpDgzgB7CeUA4tB79feUGJiGvR7Zh4fUcGY+U=",
|
|
289
|
+
"MindExecution.Plugins.Directory.88ng22x3y0.dll": "sha256-mDOSQlu0aRlQ+9xQUmvcZAazdUkU4IFbPZ4yJjCegxs=",
|
|
290
|
+
"MindExecution.Plugins.YouTube.gqu5xngvav.dll": "sha256-KJg4t8mJDtKx8ElI66yv4H9Uw04BKb2g1d2RddYYhBk="
|
|
291
291
|
}
|
|
292
292
|
},
|
|
293
293
|
"cacheBootResources": true,
|
package/wwwroot/index.html
CHANGED
|
@@ -579,7 +579,7 @@
|
|
|
579
579
|
}
|
|
580
580
|
|
|
581
581
|
const base = '_content/MindExecution.Shared/js/';
|
|
582
|
-
const scriptVersion = '
|
|
582
|
+
const scriptVersion = '20260727-fixed-phase-grid-v952';
|
|
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": "p8ssqnwY",
|
|
3
3
|
"assets": [
|
|
4
4
|
{
|
|
5
5
|
"hash": "sha256-+CSYMcqLNTsq3VnH11jgYyOCCdxvHzL74CBmo4sCmMU=",
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"url": "_content/MindExecution.Shared/js/marked.min.js"
|
|
79
79
|
},
|
|
80
80
|
{
|
|
81
|
-
"hash": "sha256-
|
|
81
|
+
"hash": "sha256-mQJAssSKsBPUgKPUA7JW2AKHvXnQT3RExAenuLL5+so=",
|
|
82
82
|
"url": "_content/MindExecution.Shared/js/mind-map-core.js"
|
|
83
83
|
},
|
|
84
84
|
{
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
"url": "_content/MindExecution.Shared/js/mind-map-glow-shader.js"
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
|
-
"hash": "sha256-
|
|
113
|
+
"hash": "sha256-wPZrXIRdM4Q6OME4+cmEMyZKC+gqlU9gGdGiHnSF7wk=",
|
|
114
114
|
"url": "_content/MindExecution.Shared/js/mind-map-interactions.js"
|
|
115
115
|
},
|
|
116
116
|
{
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"url": "_content/MindExecution.Shared/js/mind-map-lod-plan-worker.js"
|
|
119
119
|
},
|
|
120
120
|
{
|
|
121
|
-
"hash": "sha256-
|
|
121
|
+
"hash": "sha256-2s3onLoT9d7reE9vNyoHelc1PtXeHxfqYogeLE4QlT4=",
|
|
122
122
|
"url": "_content/MindExecution.Shared/js/mind-map-lod-renderer.js"
|
|
123
123
|
},
|
|
124
124
|
{
|
|
@@ -430,44 +430,44 @@
|
|
|
430
430
|
"url": "_framework/MimeMapping.og9ys58ylm.dll"
|
|
431
431
|
},
|
|
432
432
|
{
|
|
433
|
-
"hash": "sha256-
|
|
434
|
-
"url": "_framework/MindExecution.Core.
|
|
433
|
+
"hash": "sha256-4xFFMH5EUob9RXyohd+joGOoBTaarjSHyzY5kx3PRew=",
|
|
434
|
+
"url": "_framework/MindExecution.Core.9h7x2mjn0w.dll"
|
|
435
435
|
},
|
|
436
436
|
{
|
|
437
|
-
"hash": "sha256-
|
|
438
|
-
"url": "_framework/MindExecution.Kernel.
|
|
437
|
+
"hash": "sha256-RND/bkb6ILP8m7z9LRP827D9tNbpZLIKIcrd5uzm8/w=",
|
|
438
|
+
"url": "_framework/MindExecution.Kernel.8te3ay3qs6.dll"
|
|
439
439
|
},
|
|
440
440
|
{
|
|
441
|
-
"hash": "sha256
|
|
442
|
-
"url": "_framework/MindExecution.Plugins.Admin.
|
|
441
|
+
"hash": "sha256-Bt7O2MFpDgzgB7CeUA4tB79feUGJiGvR7Zh4fUcGY+U=",
|
|
442
|
+
"url": "_framework/MindExecution.Plugins.Admin.imt43kggvu.dll"
|
|
443
443
|
},
|
|
444
444
|
{
|
|
445
|
-
"hash": "sha256-
|
|
446
|
-
"url": "_framework/MindExecution.Plugins.Business.
|
|
445
|
+
"hash": "sha256-BhpTZtrJq26NpvKtYqHfYLKf2pJ93U0/R7WiPZMSedc=",
|
|
446
|
+
"url": "_framework/MindExecution.Plugins.Business.26yozgyvan.dll"
|
|
447
447
|
},
|
|
448
448
|
{
|
|
449
|
-
"hash": "sha256-
|
|
450
|
-
"url": "_framework/MindExecution.Plugins.Concept.
|
|
449
|
+
"hash": "sha256-QEcnhJgU5OshztWG/haRRIbg3NnykUuI0vEYkx2d9rU=",
|
|
450
|
+
"url": "_framework/MindExecution.Plugins.Concept.k7fd1qvmfx.dll"
|
|
451
451
|
},
|
|
452
452
|
{
|
|
453
|
-
"hash": "sha256-
|
|
454
|
-
"url": "_framework/MindExecution.Plugins.Directory.
|
|
453
|
+
"hash": "sha256-mDOSQlu0aRlQ+9xQUmvcZAazdUkU4IFbPZ4yJjCegxs=",
|
|
454
|
+
"url": "_framework/MindExecution.Plugins.Directory.88ng22x3y0.dll"
|
|
455
455
|
},
|
|
456
456
|
{
|
|
457
|
-
"hash": "sha256
|
|
458
|
-
"url": "_framework/MindExecution.Plugins.PlanMaster.
|
|
457
|
+
"hash": "sha256-KWcHEcj5l+QAGZXfxf7DCnyH1ACHwBwSVCgRReQPvyc=",
|
|
458
|
+
"url": "_framework/MindExecution.Plugins.PlanMaster.ll20yqlc09.dll"
|
|
459
459
|
},
|
|
460
460
|
{
|
|
461
|
-
"hash": "sha256-
|
|
462
|
-
"url": "_framework/MindExecution.Plugins.YouTube.
|
|
461
|
+
"hash": "sha256-KJg4t8mJDtKx8ElI66yv4H9Uw04BKb2g1d2RddYYhBk=",
|
|
462
|
+
"url": "_framework/MindExecution.Plugins.YouTube.gqu5xngvav.dll"
|
|
463
463
|
},
|
|
464
464
|
{
|
|
465
|
-
"hash": "sha256-
|
|
466
|
-
"url": "_framework/MindExecution.Shared.
|
|
465
|
+
"hash": "sha256-Qp5kQWJBgQ7XXBot/X/66cV19jqiEwUFLd9b20Oamgw=",
|
|
466
|
+
"url": "_framework/MindExecution.Shared.6ivt1fatt3.dll"
|
|
467
467
|
},
|
|
468
468
|
{
|
|
469
|
-
"hash": "sha256-
|
|
470
|
-
"url": "_framework/MindExecution.Web.
|
|
469
|
+
"hash": "sha256-JVtnGWCckZKnsid5V7G/01xTp3mnhCwxl112V16RTCg=",
|
|
470
|
+
"url": "_framework/MindExecution.Web.7tki7xqpt0.dll"
|
|
471
471
|
},
|
|
472
472
|
{
|
|
473
473
|
"hash": "sha256-IsZJ91/OW+fHzNqIgEc7Y072ns8z9dGritiSyvR9Wgc=",
|
|
@@ -786,7 +786,7 @@
|
|
|
786
786
|
"url": "_framework/Websocket.Client.vapounvmnl.dll"
|
|
787
787
|
},
|
|
788
788
|
{
|
|
789
|
-
"hash": "sha256-
|
|
789
|
+
"hash": "sha256-tnP0tykhBy53WYU4kCLMGRKT3Ta4jiR9a3SemKUepoA=",
|
|
790
790
|
"url": "_framework/blazor.boot.json"
|
|
791
791
|
},
|
|
792
792
|
{
|
|
@@ -846,7 +846,7 @@
|
|
|
846
846
|
"url": "icon-512.png"
|
|
847
847
|
},
|
|
848
848
|
{
|
|
849
|
-
"hash": "sha256-
|
|
849
|
+
"hash": "sha256-6WXHglnUixqMAtvwh+KquCabhsGtEytTYIOPc8zOXJE=",
|
|
850
850
|
"url": "index.html"
|
|
851
851
|
},
|
|
852
852
|
{
|
|
Binary file
|
|
Binary file
|