@mindexec/cli 0.2.468 → 0.2.470
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/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/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js +30 -176
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-manager.js +40 -2
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-image-policy.js +207 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-pipeline.js +55 -7
- package/wwwroot/_framework/{MindExecution.Core.yrfbp4404m.dll → MindExecution.Core.kzbcbkmn27.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Kernel.qpodwwdiwx.dll → MindExecution.Kernel.c7qfof7tfg.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Admin.8uzx32oujb.dll → MindExecution.Plugins.Admin.2vmuxhdwb6.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Business.tx05qckwdp.dll → MindExecution.Plugins.Business.pkpabtra36.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Concept.m3ew6te59x.dll → MindExecution.Plugins.Concept.ibjgxkahfu.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Directory.9qioesdf9k.dll → MindExecution.Plugins.Directory.q92uq1o4e5.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.74t0l3lj50.dll → MindExecution.Plugins.PlanMaster.l291yoyxds.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.YouTube.rw3h96cxzb.dll → MindExecution.Plugins.YouTube.jazcnpkde2.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Shared.ubxwcs5koc.dll → MindExecution.Shared.f51tf15188.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Web.mvn80sbzgp.dll → MindExecution.Web.3crklrc2je.dll} +0 -0
- package/wwwroot/_framework/blazor.boot.json +21 -21
- package/wwwroot/index.html +2 -1
- package/wwwroot/service-worker-assets.js +30 -26
- package/wwwroot/service-worker.js +1 -1
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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 = '20260819-grid-
|
|
8
|
+
const MINDMAP_CORE_BUILD_ID = '20260819-grid-single-css-representation-v869';
|
|
9
9
|
const CanvasPhase = Object.freeze({
|
|
10
10
|
Booting: 'booting',
|
|
11
11
|
BoardFileLoading: 'board-file-loading',
|
|
@@ -3269,10 +3269,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3269
3269
|
this._lastLocalSnapGridWorldPeriod = this._lastLocalSnapGridWorldStep * 10;
|
|
3270
3270
|
this._localSnapGridRasterPeriodPx = LOCAL_SNAP_GRID_DEFAULT_MAJOR_STEP_PX;
|
|
3271
3271
|
this._lastLocalSnapGridBackgroundSizeKey = '';
|
|
3272
|
-
this._localSnapGridTileCanvas = null;
|
|
3273
3272
|
this._localSnapGridPointerRevision = 0;
|
|
3274
3273
|
this._lastLocalSnapGridPositionRevision = -1;
|
|
3275
|
-
this._localSnapGridStyleDeferredForZoom = false;
|
|
3276
3274
|
this._localSnapGridPointerWakeDeferredForZoom = false;
|
|
3277
3275
|
this._lastSnapGridClientX = null;
|
|
3278
3276
|
this._lastSnapGridClientY = null;
|
|
@@ -3341,14 +3339,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3341
3339
|
const roundedY = Math.round(nextY * 2) / 2;
|
|
3342
3340
|
if (Math.abs(Number(this._lastSnapGridClientX ?? Number.NaN) - roundedX) < 0.001 &&
|
|
3343
3341
|
Math.abs(Number(this._lastSnapGridClientY ?? Number.NaN) - roundedY) < 0.001) {
|
|
3344
|
-
if (this.isZooming === true) {
|
|
3345
|
-
this._localSnapGridStyleDeferredForZoom = true;
|
|
3346
|
-
}
|
|
3347
3342
|
return false;
|
|
3348
3343
|
}
|
|
3349
|
-
if (this.isZooming === true) {
|
|
3350
|
-
this._localSnapGridStyleDeferredForZoom = true;
|
|
3351
|
-
}
|
|
3352
3344
|
|
|
3353
3345
|
const previousX = this._lastSnapGridClientX;
|
|
3354
3346
|
const previousY = this._lastSnapGridClientY;
|
|
@@ -3525,7 +3517,6 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3525
3517
|
this._lastLocalSnapGridWorldPeriod = this._lastLocalSnapGridWorldStep * 10;
|
|
3526
3518
|
this._localSnapGridRasterPeriodPx = LOCAL_SNAP_GRID_DEFAULT_MAJOR_STEP_PX;
|
|
3527
3519
|
this._lastLocalSnapGridBackgroundSizeKey = '';
|
|
3528
|
-
this._localSnapGridStyleDeferredForZoom = false;
|
|
3529
3520
|
return layer;
|
|
3530
3521
|
}
|
|
3531
3522
|
|
|
@@ -3712,85 +3703,6 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3712
3703
|
return themeName === 'SpatialGrid2D' ? 'dot' : 'line';
|
|
3713
3704
|
}
|
|
3714
3705
|
|
|
3715
|
-
_drawLocalSnapGridTile(canvas, styleKind, smallStepPx, majorStepPx) {
|
|
3716
|
-
if (!canvas || typeof canvas.getContext !== 'function') {
|
|
3717
|
-
return false;
|
|
3718
|
-
}
|
|
3719
|
-
|
|
3720
|
-
const ctx = canvas.getContext('2d', { alpha: true });
|
|
3721
|
-
if (!ctx) {
|
|
3722
|
-
return false;
|
|
3723
|
-
}
|
|
3724
|
-
|
|
3725
|
-
const smallStep = Math.max(LOCAL_SNAP_GRID_RASTER_MIN_STEP_PX, Number(smallStepPx) || LOCAL_SNAP_GRID_DEFAULT_STEP_PX);
|
|
3726
|
-
const majorStep = Math.max(
|
|
3727
|
-
smallStep,
|
|
3728
|
-
Math.min(
|
|
3729
|
-
LOCAL_SNAP_GRID_RASTER_MAX_PERIOD_PX,
|
|
3730
|
-
Number(majorStepPx) || LOCAL_SNAP_GRID_DEFAULT_MAJOR_STEP_PX
|
|
3731
|
-
)
|
|
3732
|
-
);
|
|
3733
|
-
const tileSize = Math.max(1, majorStep);
|
|
3734
|
-
const minorDetailAlpha = this._resolveLocalSnapGridMinorDetailAlpha(smallStep);
|
|
3735
|
-
const viewportDpr = Math.max(1, Math.min(3, Number(this._lastViewportDpr || window.devicePixelRatio || 1)));
|
|
3736
|
-
const bitmapSize = Math.max(1, Math.ceil(tileSize * viewportDpr));
|
|
3737
|
-
if (canvas.width !== bitmapSize) {
|
|
3738
|
-
canvas.width = bitmapSize;
|
|
3739
|
-
}
|
|
3740
|
-
if (canvas.height !== bitmapSize) {
|
|
3741
|
-
canvas.height = bitmapSize;
|
|
3742
|
-
}
|
|
3743
|
-
const rasterScale = bitmapSize / tileSize;
|
|
3744
|
-
ctx.setTransform(rasterScale, 0, 0, rasterScale, 0, 0);
|
|
3745
|
-
ctx.clearRect(0, 0, tileSize, tileSize);
|
|
3746
|
-
|
|
3747
|
-
if (styleKind === 'dot') {
|
|
3748
|
-
if (minorDetailAlpha > 0.001) {
|
|
3749
|
-
ctx.fillStyle = `rgba(58, 69, 88, ${(0.68 * minorDetailAlpha).toFixed(3)})`;
|
|
3750
|
-
const dotRadius = 1.2;
|
|
3751
|
-
for (let y = 0; y < tileSize; y += smallStep) {
|
|
3752
|
-
for (let x = 0; x < tileSize; x += smallStep) {
|
|
3753
|
-
ctx.beginPath();
|
|
3754
|
-
ctx.arc(x, y, dotRadius, 0, Math.PI * 2);
|
|
3755
|
-
ctx.fill();
|
|
3756
|
-
}
|
|
3757
|
-
}
|
|
3758
|
-
}
|
|
3759
|
-
|
|
3760
|
-
ctx.fillStyle = 'rgba(15, 23, 42, 0.82)';
|
|
3761
|
-
ctx.beginPath();
|
|
3762
|
-
ctx.arc(0, 0, 1.9, 0, Math.PI * 2);
|
|
3763
|
-
ctx.fill();
|
|
3764
|
-
} else {
|
|
3765
|
-
const drawLines = (step, color, width) => {
|
|
3766
|
-
ctx.strokeStyle = color;
|
|
3767
|
-
ctx.lineWidth = width;
|
|
3768
|
-
ctx.beginPath();
|
|
3769
|
-
for (let x = 0; x < tileSize; x += step) {
|
|
3770
|
-
const pixelX = Math.round(x) + 0.5;
|
|
3771
|
-
ctx.moveTo(pixelX, 0);
|
|
3772
|
-
ctx.lineTo(pixelX, tileSize);
|
|
3773
|
-
}
|
|
3774
|
-
for (let y = 0; y < tileSize; y += step) {
|
|
3775
|
-
const pixelY = Math.round(y) + 0.5;
|
|
3776
|
-
ctx.moveTo(0, pixelY);
|
|
3777
|
-
ctx.lineTo(tileSize, pixelY);
|
|
3778
|
-
}
|
|
3779
|
-
ctx.stroke();
|
|
3780
|
-
};
|
|
3781
|
-
|
|
3782
|
-
if (minorDetailAlpha > 0.001) {
|
|
3783
|
-
drawLines(
|
|
3784
|
-
smallStep,
|
|
3785
|
-
`rgba(51, 65, 85, ${(0.24 * minorDetailAlpha).toFixed(3)})`,
|
|
3786
|
-
1
|
|
3787
|
-
);
|
|
3788
|
-
}
|
|
3789
|
-
drawLines(majorStep, 'rgba(15, 23, 42, 0.42)', 1);
|
|
3790
|
-
}
|
|
3791
|
-
return tileSize;
|
|
3792
|
-
}
|
|
3793
|
-
|
|
3794
3706
|
_applyLocalSnapGridStyle(
|
|
3795
3707
|
layer,
|
|
3796
3708
|
styleKind,
|
|
@@ -3819,6 +3731,14 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3819
3731
|
const safeOpacity = Number.isFinite(parsedOpacity)
|
|
3820
3732
|
? Math.max(0, Math.min(0.68, parsedOpacity))
|
|
3821
3733
|
: LOCAL_SNAP_GRID_DEFAULT_OPACITY;
|
|
3734
|
+
if (safeStyleKind === 'line') {
|
|
3735
|
+
return this._applyLocalSnapGridLineStyle(
|
|
3736
|
+
layer,
|
|
3737
|
+
safeSmallStep,
|
|
3738
|
+
safeMajorStep,
|
|
3739
|
+
safeOpacity
|
|
3740
|
+
);
|
|
3741
|
+
}
|
|
3822
3742
|
const localGridKey = [
|
|
3823
3743
|
keyPrefix,
|
|
3824
3744
|
safeStyleKind,
|
|
@@ -3830,10 +3750,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3830
3750
|
const majorStepValue = safeMajorStep.toFixed(3);
|
|
3831
3751
|
const minorDetailAlpha = this._resolveLocalSnapGridMinorDetailAlpha(safeSmallStep);
|
|
3832
3752
|
const showMinorDots = minorDetailAlpha > 0.001;
|
|
3833
|
-
const backgroundSizeValue =
|
|
3834
|
-
?
|
|
3835
|
-
? `${majorStepValue}px ${majorStepValue}px, ${smallStepValue}px ${smallStepValue}px`
|
|
3836
|
-
: `${majorStepValue}px ${majorStepValue}px`)
|
|
3753
|
+
const backgroundSizeValue = showMinorDots
|
|
3754
|
+
? `${majorStepValue}px ${majorStepValue}px, ${smallStepValue}px ${smallStepValue}px`
|
|
3837
3755
|
: `${majorStepValue}px ${majorStepValue}px`;
|
|
3838
3756
|
const backgroundSizeKey = backgroundSizeValue;
|
|
3839
3757
|
|
|
@@ -3849,46 +3767,22 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3849
3767
|
|
|
3850
3768
|
const opacityValue = safeOpacity.toFixed(3);
|
|
3851
3769
|
this._lastLocalSnapGridOpacity = opacityValue;
|
|
3852
|
-
|
|
3853
|
-
|
|
3854
|
-
|
|
3855
|
-
|
|
3856
|
-
const backgroundImage = showMinorDots ? `${majorDot}, ${minorDot}` : majorDot;
|
|
3857
|
-
this._lastLocalSnapGridKey = localGridKey;
|
|
3858
|
-
this._lastLocalSnapGridPatternPeriodPx = safeMajorStep;
|
|
3859
|
-
this._localSnapGridRasterPeriodPx = safeMajorStep;
|
|
3860
|
-
this._lastLocalSnapGridTransformKey = '';
|
|
3861
|
-
if (layer.style.backgroundImage !== backgroundImage) layer.style.backgroundImage = backgroundImage;
|
|
3862
|
-
this._lastLocalSnapGridBackgroundSizeKey = backgroundSizeKey;
|
|
3863
|
-
if (layer.style.backgroundSize !== backgroundSizeValue) layer.style.backgroundSize = backgroundSizeValue;
|
|
3864
|
-
if (layer.style.opacity !== opacityValue) layer.style.opacity = opacityValue;
|
|
3865
|
-
return true;
|
|
3866
|
-
}
|
|
3867
|
-
const tileCanvas = this._localSnapGridTileCanvas || document.createElement('canvas');
|
|
3868
|
-
this._localSnapGridTileCanvas = tileCanvas;
|
|
3869
|
-
const tileSize = this._drawLocalSnapGridTile(
|
|
3870
|
-
tileCanvas,
|
|
3871
|
-
safeStyleKind,
|
|
3872
|
-
safeSmallStep,
|
|
3873
|
-
safeMajorStep
|
|
3874
|
-
);
|
|
3875
|
-
if (!Number.isFinite(tileSize) || tileSize <= 0) {
|
|
3876
|
-
return false;
|
|
3877
|
-
}
|
|
3770
|
+
const majorDot = 'radial-gradient(circle at 0 0, rgba(15, 23, 42, 0.82) 0 1.9px, transparent 2px)';
|
|
3771
|
+
const minorDotAlphaValue = (0.68 * minorDetailAlpha).toFixed(3);
|
|
3772
|
+
const minorDot = `radial-gradient(circle at 0 0, rgba(58, 69, 88, ${minorDotAlphaValue}) 0 1.2px, transparent 1.3px)`;
|
|
3773
|
+
const backgroundImage = showMinorDots ? `${majorDot}, ${minorDot}` : majorDot;
|
|
3878
3774
|
this._lastLocalSnapGridKey = localGridKey;
|
|
3879
3775
|
this._lastLocalSnapGridPatternPeriodPx = safeMajorStep;
|
|
3880
3776
|
this._localSnapGridRasterPeriodPx = safeMajorStep;
|
|
3881
3777
|
this._lastLocalSnapGridTransformKey = '';
|
|
3882
|
-
layer.style.backgroundImage =
|
|
3778
|
+
if (layer.style.backgroundImage !== backgroundImage) layer.style.backgroundImage = backgroundImage;
|
|
3883
3779
|
this._lastLocalSnapGridBackgroundSizeKey = backgroundSizeKey;
|
|
3884
|
-
layer.style.backgroundSize = backgroundSizeValue;
|
|
3885
|
-
if (layer.style.opacity !== opacityValue)
|
|
3886
|
-
layer.style.opacity = opacityValue;
|
|
3887
|
-
}
|
|
3780
|
+
if (layer.style.backgroundSize !== backgroundSizeValue) layer.style.backgroundSize = backgroundSizeValue;
|
|
3781
|
+
if (layer.style.opacity !== opacityValue) layer.style.opacity = opacityValue;
|
|
3888
3782
|
return true;
|
|
3889
3783
|
}
|
|
3890
3784
|
|
|
3891
|
-
|
|
3785
|
+
_applyLocalSnapGridLineStyle(layer, smallStepPx, majorStepPx, opacity) {
|
|
3892
3786
|
if (!layer) return false;
|
|
3893
3787
|
|
|
3894
3788
|
const safeSmallStep = Math.max(
|
|
@@ -3919,7 +3813,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3919
3813
|
'linear-gradient(to right, rgba(15, 23, 42, 0.42) 0 1px, transparent 1px)',
|
|
3920
3814
|
'linear-gradient(to bottom, rgba(15, 23, 42, 0.42) 0 1px, transparent 1px)'
|
|
3921
3815
|
].join(', ');
|
|
3922
|
-
const motionKey = `
|
|
3816
|
+
const motionKey = `line-css|${smallStepValue}|${majorStepValue}|${safeOpacity.toFixed(3)}`;
|
|
3923
3817
|
|
|
3924
3818
|
if (motionKey === this._lastLocalSnapGridKey) return false;
|
|
3925
3819
|
|
|
@@ -3955,7 +3849,6 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3955
3849
|
LOCAL_SNAP_GRID_DEFAULT_OPACITY,
|
|
3956
3850
|
'base'
|
|
3957
3851
|
);
|
|
3958
|
-
this._localSnapGridStyleDeferredForZoom = true;
|
|
3959
3852
|
return true;
|
|
3960
3853
|
}
|
|
3961
3854
|
|
|
@@ -4000,7 +3893,6 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
4000
3893
|
}
|
|
4001
3894
|
|
|
4002
3895
|
this._localSnapGridVisible = false;
|
|
4003
|
-
this._localSnapGridStyleDeferredForZoom = false;
|
|
4004
3896
|
this._lastLocalSnapGridPositionRevision = -1;
|
|
4005
3897
|
if (layer.style.opacity !== '0') {
|
|
4006
3898
|
layer.style.opacity = '0';
|
|
@@ -4060,29 +3952,13 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
4060
3952
|
this._lastLocalSnapGridWorldStep = gridProjection.worldStep;
|
|
4061
3953
|
this._lastLocalSnapGridWorldPeriod = gridProjection.worldStep * 10;
|
|
4062
3954
|
const styleKind = this._getLocalSnapGridStyleKind();
|
|
4063
|
-
|
|
4064
|
-
|
|
4065
|
-
styleKind
|
|
4066
|
-
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
this._applyLocalSnapGridStyle(
|
|
4071
|
-
layer,
|
|
4072
|
-
styleKind,
|
|
4073
|
-
smallStepPx,
|
|
4074
|
-
majorStepPx,
|
|
4075
|
-
opacity
|
|
4076
|
-
);
|
|
4077
|
-
} else if (shouldDeferLocalGridStyleForZoom === true) {
|
|
4078
|
-
this._applyLocalSnapGridMotionStyle(
|
|
4079
|
-
layer,
|
|
4080
|
-
smallStepPx,
|
|
4081
|
-
majorStepPx,
|
|
4082
|
-
opacity
|
|
4083
|
-
);
|
|
4084
|
-
this._localSnapGridStyleDeferredForZoom = true;
|
|
4085
|
-
}
|
|
3955
|
+
this._applyLocalSnapGridStyle(
|
|
3956
|
+
layer,
|
|
3957
|
+
styleKind,
|
|
3958
|
+
smallStepPx,
|
|
3959
|
+
majorStepPx,
|
|
3960
|
+
opacity
|
|
3961
|
+
);
|
|
4086
3962
|
|
|
4087
3963
|
this._syncLocalSnapGridSpotlightPosition(width, height, left, top);
|
|
4088
3964
|
this._lastLocalSnapGridPositionRevision = pointerRevision;
|
|
@@ -4101,15 +3977,12 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
4101
3977
|
return false;
|
|
4102
3978
|
}
|
|
4103
3979
|
|
|
4104
|
-
const shouldRefreshDeferredZoomProjection =
|
|
4105
|
-
this.isZooming === true ||
|
|
4106
|
-
this._localSnapGridStyleDeferredForZoom === true;
|
|
4107
3980
|
if (!this._localSnapGridLayer?.isConnected || !this._lastLocalSnapGridKey) {
|
|
4108
3981
|
const layer = this._ensureLocalSnapGridLayer();
|
|
4109
3982
|
if (!layer) {
|
|
4110
3983
|
return false;
|
|
4111
3984
|
}
|
|
4112
|
-
if (
|
|
3985
|
+
if (this.isZooming === true) {
|
|
4113
3986
|
this._ensureLocalSnapGridBaseStyle(layer);
|
|
4114
3987
|
} else {
|
|
4115
3988
|
return this._syncLocalSnapGridLayer(visible);
|
|
@@ -4132,20 +4005,12 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
4132
4005
|
return false;
|
|
4133
4006
|
}
|
|
4134
4007
|
const styleKind = this._getLocalSnapGridStyleKind();
|
|
4135
|
-
if (
|
|
4008
|
+
if (this.isZooming === true) {
|
|
4136
4009
|
const vfov = (Number(this.camera?.fov || 45) * Math.PI) / 180;
|
|
4137
4010
|
const pxPerWorld = height / Math.max(1, 2 * Math.tan(vfov / 2) * cameraZ);
|
|
4138
4011
|
const projection = this._resolveLocalSnapGridWorldStep(pxPerWorld);
|
|
4139
4012
|
this._applyLocalSnapGridStyle(
|
|
4140
4013
|
layer, styleKind, projection.smallStepPx, projection.majorStepPx, opacity);
|
|
4141
|
-
this._localSnapGridStyleDeferredForZoom = false;
|
|
4142
|
-
} else if (shouldRefreshDeferredZoomProjection === true) {
|
|
4143
|
-
const vfov = (Number(this.camera?.fov || 45) * Math.PI) / 180;
|
|
4144
|
-
const pxPerWorld = height / Math.max(1, 2 * Math.tan(vfov / 2) * cameraZ);
|
|
4145
|
-
const projection = this._resolveLocalSnapGridWorldStep(pxPerWorld);
|
|
4146
|
-
this._applyLocalSnapGridMotionStyle(
|
|
4147
|
-
layer, projection.smallStepPx, projection.majorStepPx, opacity);
|
|
4148
|
-
this._localSnapGridStyleDeferredForZoom = true;
|
|
4149
4014
|
}
|
|
4150
4015
|
this._syncLocalSnapGridSpotlightPosition(width, height, left, top);
|
|
4151
4016
|
this._lastLocalSnapGridPositionRevision = pointerRevision;
|
|
@@ -6255,11 +6120,6 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
6255
6120
|
if (shouldFinalizeMotionThisFrame) {
|
|
6256
6121
|
this._lastMotionEndAt = frameStart;
|
|
6257
6122
|
if (zoomEndedThisFrame === true) {
|
|
6258
|
-
// The compositor transform already keeps the grid in the
|
|
6259
|
-
// canonical world coordinate system. Preserve that exact
|
|
6260
|
-
// pose here and let the existing idle cadence refresh the
|
|
6261
|
-
// crisp raster once, so physical-wheel notches cannot
|
|
6262
|
-
// trigger canvas.toDataURL() on every no-input frame.
|
|
6263
6123
|
this._localSnapGridPointerWakeDeferredForZoom = false;
|
|
6264
6124
|
}
|
|
6265
6125
|
if (cameraEndedThisFrame) {
|
|
@@ -7255,17 +7115,12 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
7255
7115
|
const localSnapGridPointerRevision = Math.max(0, Number(this._localSnapGridPointerRevision || 0));
|
|
7256
7116
|
const hasPendingLocalSnapGridPointerMove =
|
|
7257
7117
|
Number(this._lastLocalSnapGridPositionRevision ?? -1) !== localSnapGridPointerRevision;
|
|
7258
|
-
const shouldDeferLocalSnapGridRasterUntilBurstSettle = !!(
|
|
7259
|
-
this._localSnapGridStyleDeferredForZoom === true &&
|
|
7260
|
-
wheelZoomBurstSettledThisFrame !== true
|
|
7261
|
-
);
|
|
7262
7118
|
const shouldUseLocalSnapGridPositionOnly = !!(
|
|
7263
7119
|
this._localSnapGridLayer?.isConnected &&
|
|
7264
7120
|
this._lastLocalSnapGridKey &&
|
|
7265
7121
|
(
|
|
7266
7122
|
isCameraNavigationOnlyInteractiveFrame === true ||
|
|
7267
|
-
hasPendingLocalSnapGridPointerMove === true
|
|
7268
|
-
shouldDeferLocalSnapGridRasterUntilBurstSettle === true
|
|
7123
|
+
hasPendingLocalSnapGridPointerMove === true
|
|
7269
7124
|
)
|
|
7270
7125
|
);
|
|
7271
7126
|
syncLocalSnapGridForCameraNavigation(this, shouldUseLocalSnapGridPositionOnly === true);
|
|
@@ -8050,7 +7905,6 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
8050
7905
|
this._localSnapGridSpotlightLayer.remove();
|
|
8051
7906
|
this._localSnapGridSpotlightLayer = null;
|
|
8052
7907
|
}
|
|
8053
|
-
this._localSnapGridTileCanvas = null;
|
|
8054
7908
|
if (this._backgroundGridLayerHost) {
|
|
8055
7909
|
this._backgroundGridLayerHost.remove();
|
|
8056
7910
|
this._backgroundGridLayerHost = null;
|
|
@@ -1720,6 +1720,17 @@
|
|
|
1720
1720
|
_cssImagePreviewHoldUntil = getCssImagePromotionNow() + getPostLoadCssImagePreviewHoldMs(activeModule);
|
|
1721
1721
|
clearCssImagePromotionQueue();
|
|
1722
1722
|
_cssImagePromotionProcessing = false;
|
|
1723
|
+
activeModule?.nodeObjectsById?.forEach?.((entry, nodeId) => {
|
|
1724
|
+
if (window.MindMapImagePolicy?.isGeneratedImageNodeModel?.(entry?.model) === true) {
|
|
1725
|
+
enqueueCssImagePromotion(nodeId);
|
|
1726
|
+
}
|
|
1727
|
+
});
|
|
1728
|
+
if (_cssImagePromotionQueue.length > 0) {
|
|
1729
|
+
scheduleCssImagePromotionPump(
|
|
1730
|
+
activeModule,
|
|
1731
|
+
Math.max(16, Math.ceil(_cssImagePreviewHoldUntil - getCssImagePromotionNow()))
|
|
1732
|
+
);
|
|
1733
|
+
}
|
|
1723
1734
|
}
|
|
1724
1735
|
|
|
1725
1736
|
function getCssMediaMetadata(nodeModel) {
|
|
@@ -1783,6 +1794,13 @@
|
|
|
1783
1794
|
return responseUrl || originalUrl;
|
|
1784
1795
|
}
|
|
1785
1796
|
|
|
1797
|
+
const generatedOriginalUrl = normalizeCssMediaUrl(
|
|
1798
|
+
window.MindMapImagePolicy?.getGeneratedImageOriginalReference?.(nodeModel, assetUrls) || ''
|
|
1799
|
+
);
|
|
1800
|
+
if (generatedOriginalUrl) {
|
|
1801
|
+
return generatedOriginalUrl;
|
|
1802
|
+
}
|
|
1803
|
+
|
|
1786
1804
|
return previewUrl || responseUrl || originalUrl;
|
|
1787
1805
|
}
|
|
1788
1806
|
|
|
@@ -4182,12 +4200,19 @@
|
|
|
4182
4200
|
if (!mediaEl || contentTypeLower !== 'image') return;
|
|
4183
4201
|
if (options.bypassPreviewHold !== true && shouldPreferCssImagePreviewSource(nodeModel)) return;
|
|
4184
4202
|
const forceAnimatedGifOriginal = isAnimatedGifCssImageNode(nodeModel);
|
|
4185
|
-
if (options.forceOriginal !== true && !forceAnimatedGifOriginal && !shouldPromoteCssImageOriginal(nodeModel)) return;
|
|
4186
4203
|
|
|
4187
4204
|
const assetUrls = window.MindMapNodes?.getNodeImageAssetUrls?.(nodeModel) || null;
|
|
4205
|
+
const generatedOriginalReference = normalizeCssMediaUrl(
|
|
4206
|
+
window.MindMapImagePolicy?.getGeneratedImageOriginalReference?.(nodeModel, assetUrls) || ''
|
|
4207
|
+
);
|
|
4208
|
+
if (options.forceOriginal !== true
|
|
4209
|
+
&& !forceAnimatedGifOriginal
|
|
4210
|
+
&& !generatedOriginalReference
|
|
4211
|
+
&& !shouldPromoteCssImageOriginal(nodeModel)) return;
|
|
4188
4212
|
const metadata = getCssMediaMetadata(nodeModel);
|
|
4189
4213
|
const originalUrl = normalizeCssMediaUrl(
|
|
4190
|
-
|
|
4214
|
+
generatedOriginalReference
|
|
4215
|
+
|| assetUrls?.fullResUrl
|
|
4191
4216
|
|| assetUrls?.originalUrl
|
|
4192
4217
|
|| metadata?.OriginalUrl
|
|
4193
4218
|
|| metadata?.originalUrl
|
|
@@ -4206,6 +4231,11 @@
|
|
|
4206
4231
|
isThumbnailCssMediaUrl(currentSource)
|
|
4207
4232
|
) {
|
|
4208
4233
|
mediaEl.dataset.assetRefreshAttempted = '';
|
|
4234
|
+
if (generatedOriginalReference) {
|
|
4235
|
+
console.info('[MindMapCss3DManager] Promoting generated image preview to original', {
|
|
4236
|
+
nodeId: String(nodeModel?.id ?? nodeModel?.Id ?? '')
|
|
4237
|
+
});
|
|
4238
|
+
}
|
|
4209
4239
|
void setCssImageElementSource(mediaEl, nodeModel, originalUrl);
|
|
4210
4240
|
}
|
|
4211
4241
|
return;
|
|
@@ -4223,6 +4253,11 @@
|
|
|
4223
4253
|
if (mediaEl.dataset.originalResolveAttempted === '1') return;
|
|
4224
4254
|
|
|
4225
4255
|
mediaEl.dataset.originalResolveAttempted = '1';
|
|
4256
|
+
if (generatedOriginalReference) {
|
|
4257
|
+
console.info('[MindMapCss3DManager] Resolving generated image original after preview', {
|
|
4258
|
+
nodeId: String(nodeModel?.id ?? nodeModel?.Id ?? '')
|
|
4259
|
+
});
|
|
4260
|
+
}
|
|
4226
4261
|
void tryRefreshCssMediaSource(mediaEl, nodeModel, contentTypeLower);
|
|
4227
4262
|
}
|
|
4228
4263
|
|
|
@@ -4362,6 +4397,9 @@
|
|
|
4362
4397
|
isCssImagePreviewHoldActive() ||
|
|
4363
4398
|
isCssImagePromotionInteractionActive(activeModule);
|
|
4364
4399
|
if (shouldQueuePromotion) {
|
|
4400
|
+
if (window.MindMapImagePolicy?.isGeneratedImageNodeModel?.(entry.model) === true) {
|
|
4401
|
+
enqueueCssImagePromotion(nodeId);
|
|
4402
|
+
}
|
|
4365
4403
|
return;
|
|
4366
4404
|
}
|
|
4367
4405
|
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
(function () {
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const BUILD_ID = '20260819-image-original-resize-v1';
|
|
5
|
+
|
|
6
|
+
function normalizeContentType(nodeModel) {
|
|
7
|
+
return String(nodeModel?.contentType ?? nodeModel?.ContentType ?? '').trim().toLowerCase();
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function getMetadata(nodeModel) {
|
|
11
|
+
return nodeModel?.metadata ?? nodeModel?.Metadata ?? {};
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function getMetadataValue(metadata, ...keys) {
|
|
15
|
+
if (!metadata || typeof metadata !== 'object') return '';
|
|
16
|
+
|
|
17
|
+
for (const key of keys) {
|
|
18
|
+
const value = metadata[key];
|
|
19
|
+
if (value !== undefined && value !== null && String(value).trim()) {
|
|
20
|
+
return String(value).trim();
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const wanted = new Set(keys.map(key => String(key).toLowerCase()));
|
|
25
|
+
for (const [key, value] of Object.entries(metadata)) {
|
|
26
|
+
if (wanted.has(String(key).toLowerCase())
|
|
27
|
+
&& value !== undefined
|
|
28
|
+
&& value !== null
|
|
29
|
+
&& String(value).trim()) {
|
|
30
|
+
return String(value).trim();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return '';
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function toPositiveNumber(value) {
|
|
38
|
+
const numeric = Number(value);
|
|
39
|
+
return Number.isFinite(numeric) && numeric > 0 ? numeric : 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function ratioFromPair(width, height) {
|
|
43
|
+
const numericWidth = toPositiveNumber(width);
|
|
44
|
+
const numericHeight = toPositiveNumber(height);
|
|
45
|
+
if (!(numericWidth > 0 && numericHeight > 0)) return 0;
|
|
46
|
+
|
|
47
|
+
const ratio = numericWidth / numericHeight;
|
|
48
|
+
return Number.isFinite(ratio) && ratio >= 0.05 && ratio <= 20 ? ratio : 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function isGeneratedImageNodeModel(nodeModel) {
|
|
52
|
+
if (!nodeModel || normalizeContentType(nodeModel) !== 'image') return false;
|
|
53
|
+
|
|
54
|
+
const metadata = getMetadata(nodeModel);
|
|
55
|
+
const operation = getMetadataValue(
|
|
56
|
+
metadata,
|
|
57
|
+
'RequestedMediaOperation',
|
|
58
|
+
'requestedMediaOperation'
|
|
59
|
+
).toLowerCase();
|
|
60
|
+
|
|
61
|
+
return !!getMetadataValue(metadata, 'ImageGenerationProvider', 'imageGenerationProvider')
|
|
62
|
+
|| !!getMetadataValue(metadata, 'GeneratedImageSourceWidth', 'generatedImageSourceWidth')
|
|
63
|
+
|| !!getMetadataValue(metadata, 'GeneratedImageSourceHeight', 'generatedImageSourceHeight')
|
|
64
|
+
|| !!getMetadataValue(metadata, 'CodexImageQuality', 'codexImageQuality')
|
|
65
|
+
|| !!getMetadataValue(metadata, 'ImageRouterRevisedPrompt', 'imageRouterRevisedPrompt')
|
|
66
|
+
|| operation === 'text2image'
|
|
67
|
+
|| operation === 'image2image'
|
|
68
|
+
|| operation === 'inpaint';
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function getGeneratedImageOriginalReference(nodeModel, assetUrls = null) {
|
|
72
|
+
if (!isGeneratedImageNodeModel(nodeModel)) return '';
|
|
73
|
+
|
|
74
|
+
const metadata = getMetadata(nodeModel);
|
|
75
|
+
const candidates = [
|
|
76
|
+
assetUrls?.fullResUrl,
|
|
77
|
+
assetUrls?.originalUrl,
|
|
78
|
+
assetUrls?.originalPath,
|
|
79
|
+
getMetadataValue(metadata, 'OriginalUrl', 'originalUrl'),
|
|
80
|
+
getMetadataValue(metadata, 'OriginalPath', 'originalPath')
|
|
81
|
+
];
|
|
82
|
+
|
|
83
|
+
for (const candidate of candidates) {
|
|
84
|
+
const normalized = String(candidate || '').trim();
|
|
85
|
+
if (normalized) return normalized;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return '';
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function getOriginalAspectRatio(nodeEntry, fallbackWidth = 0, fallbackHeight = 0) {
|
|
92
|
+
const nodeModel = nodeEntry?.model ?? nodeEntry;
|
|
93
|
+
if (!nodeModel || normalizeContentType(nodeModel) !== 'image') return 0;
|
|
94
|
+
|
|
95
|
+
const metadata = getMetadata(nodeModel);
|
|
96
|
+
const metadataPairs = [
|
|
97
|
+
[
|
|
98
|
+
getMetadataValue(metadata, 'GeneratedImageSourceWidth', 'generatedImageSourceWidth'),
|
|
99
|
+
getMetadataValue(metadata, 'GeneratedImageSourceHeight', 'generatedImageSourceHeight')
|
|
100
|
+
],
|
|
101
|
+
[
|
|
102
|
+
getMetadataValue(metadata, 'ImageIntrinsicWidth', 'imageIntrinsicWidth'),
|
|
103
|
+
getMetadataValue(metadata, 'ImageIntrinsicHeight', 'imageIntrinsicHeight')
|
|
104
|
+
]
|
|
105
|
+
];
|
|
106
|
+
|
|
107
|
+
for (const [width, height] of metadataPairs) {
|
|
108
|
+
const ratio = ratioFromPair(width, height);
|
|
109
|
+
if (ratio > 0) return ratio;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const imageElement = nodeEntry?.cssObject?.element?.querySelector?.('img') || null;
|
|
113
|
+
const naturalRatio = ratioFromPair(
|
|
114
|
+
imageElement?.naturalWidth || imageElement?.width,
|
|
115
|
+
imageElement?.naturalHeight || imageElement?.height
|
|
116
|
+
);
|
|
117
|
+
if (naturalRatio > 0) return naturalRatio;
|
|
118
|
+
|
|
119
|
+
const generatedDisplayRatio = ratioFromPair(
|
|
120
|
+
getMetadataValue(metadata, 'GeneratedImageDisplayWidth', 'generatedImageDisplayWidth'),
|
|
121
|
+
getMetadataValue(metadata, 'GeneratedImageDisplayHeight', 'generatedImageDisplayHeight')
|
|
122
|
+
);
|
|
123
|
+
if (generatedDisplayRatio > 0) return generatedDisplayRatio;
|
|
124
|
+
|
|
125
|
+
return ratioFromPair(
|
|
126
|
+
fallbackWidth || nodeModel.width || nodeModel.Width,
|
|
127
|
+
fallbackHeight || nodeModel.height || nodeModel.Height
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function constrainBottomRightDimensions(
|
|
132
|
+
proposedWidth,
|
|
133
|
+
proposedHeight,
|
|
134
|
+
startWidth,
|
|
135
|
+
startHeight,
|
|
136
|
+
aspectRatio,
|
|
137
|
+
limits = {}) {
|
|
138
|
+
const ratio = toPositiveNumber(aspectRatio);
|
|
139
|
+
if (!(ratio > 0)) {
|
|
140
|
+
return {
|
|
141
|
+
width: Number(proposedWidth),
|
|
142
|
+
height: Number(proposedHeight),
|
|
143
|
+
aspectLocked: false
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const minWidth = Math.max(1, toPositiveNumber(limits.minWidth) || 1);
|
|
148
|
+
const minHeight = Math.max(1, toPositiveNumber(limits.minHeight) || 1);
|
|
149
|
+
const maxWidth = Math.max(minWidth, toPositiveNumber(limits.maxWidth) || Number.MAX_SAFE_INTEGER);
|
|
150
|
+
const maxHeight = Math.max(minHeight, toPositiveNumber(limits.maxHeight) || Number.MAX_SAFE_INTEGER);
|
|
151
|
+
const width = Number(proposedWidth);
|
|
152
|
+
const height = Number(proposedHeight);
|
|
153
|
+
const initialWidth = Number(startWidth);
|
|
154
|
+
const initialHeight = Number(startHeight);
|
|
155
|
+
const widthMotion = Math.abs(width - initialWidth);
|
|
156
|
+
const heightMotionAsWidth = Math.abs(height - initialHeight) * ratio;
|
|
157
|
+
let targetHeight = widthMotion >= heightMotionAsWidth ? width / ratio : height;
|
|
158
|
+
|
|
159
|
+
const minimumLockedHeight = Math.max(minHeight, minWidth / ratio);
|
|
160
|
+
const maximumLockedHeight = Math.min(maxHeight, maxWidth / ratio);
|
|
161
|
+
targetHeight = Math.min(
|
|
162
|
+
Math.max(minimumLockedHeight, targetHeight),
|
|
163
|
+
Math.max(minimumLockedHeight, maximumLockedHeight)
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
return {
|
|
167
|
+
width: targetHeight * ratio,
|
|
168
|
+
height: targetHeight,
|
|
169
|
+
aspectLocked: true
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
function snapAspectLockedDimensions(width, height, aspectRatio, gridSize, limits = {}) {
|
|
174
|
+
const ratio = toPositiveNumber(aspectRatio);
|
|
175
|
+
const grid = toPositiveNumber(gridSize);
|
|
176
|
+
if (!(ratio > 0 && grid > 0)) {
|
|
177
|
+
return constrainBottomRightDimensions(width, height, width, height, ratio, limits);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const snappedWidth = Math.max(grid, Math.round(Number(width) / grid) * grid);
|
|
181
|
+
const snappedHeight = Math.max(grid, Math.round(Number(height) / grid) * grid);
|
|
182
|
+
const proposedWidth = ratio >= 1 ? snappedWidth : snappedHeight * ratio;
|
|
183
|
+
const proposedHeight = ratio >= 1 ? snappedWidth / ratio : snappedHeight;
|
|
184
|
+
return constrainBottomRightDimensions(
|
|
185
|
+
proposedWidth,
|
|
186
|
+
proposedHeight,
|
|
187
|
+
proposedWidth,
|
|
188
|
+
proposedHeight,
|
|
189
|
+
ratio,
|
|
190
|
+
limits
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
window.MindMapImagePolicy = {
|
|
195
|
+
build: BUILD_ID,
|
|
196
|
+
isGeneratedImageNodeModel,
|
|
197
|
+
getGeneratedImageOriginalReference,
|
|
198
|
+
getOriginalAspectRatio,
|
|
199
|
+
constrainBottomRightDimensions,
|
|
200
|
+
snapAspectLockedDimensions
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
window.MindCanvasBuildInfo?.registerPart?.('imagePolicy', BUILD_ID, {
|
|
204
|
+
generatedOriginalAfterLoad: true,
|
|
205
|
+
bottomRightAspectLock: true
|
|
206
|
+
});
|
|
207
|
+
})();
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
const ENABLE_WEBGL_GLOW = false;
|
|
18
18
|
const DEFAULT_MIN_NODE_WIDTH = 200;
|
|
19
19
|
const DEFAULT_MIN_NODE_HEIGHT = 100;
|
|
20
|
+
const MAX_NODE_WIDTH = 2000;
|
|
21
|
+
const MAX_NODE_HEIGHT = 4000;
|
|
20
22
|
const CSV_TABLE_CONTENT_TYPE = 'csv-table';
|
|
21
23
|
const CSV_TABLE_MIN_WIDTH = 320;
|
|
22
24
|
const CSV_TABLE_MIN_HEIGHT = 180;
|
|
@@ -1102,6 +1104,13 @@
|
|
|
1102
1104
|
w: nodeEntry.model.width || 400,
|
|
1103
1105
|
h: nodeEntry.model.height || 200
|
|
1104
1106
|
};
|
|
1107
|
+
module.resizeAspectRatio = corner === 'BR' && getNodeContentType(nodeEntry.model) === 'image'
|
|
1108
|
+
? Number(window.MindMapImagePolicy?.getOriginalAspectRatio?.(
|
|
1109
|
+
nodeEntry,
|
|
1110
|
+
module.resizeStartDimensions.w,
|
|
1111
|
+
module.resizeStartDimensions.h
|
|
1112
|
+
) || 0)
|
|
1113
|
+
: 0;
|
|
1105
1114
|
// Store initial position from the active render object (CSS/GL) to avoid
|
|
1106
1115
|
// image-node jumps when CSS and GL are slightly out of sync.
|
|
1107
1116
|
const activePos = module.resizeNodeObject?.position
|
|
@@ -1147,10 +1156,6 @@
|
|
|
1147
1156
|
|
|
1148
1157
|
function doResizing(module, currentX, currentY) {
|
|
1149
1158
|
if (!module.isResizing || !module.resizeNodeObject) return;
|
|
1150
|
-
// ▼▼▼ [Changed] Cap max node size: X=2000, Y=4000 ▼▼▼
|
|
1151
|
-
const MAX_NODE_WIDTH = 2000;
|
|
1152
|
-
const MAX_NODE_HEIGHT = 4000;
|
|
1153
|
-
// ▲▲▲ [Changed] ▲▲▲
|
|
1154
1159
|
|
|
1155
1160
|
const vfov = (module.camera.fov * Math.PI) / 180;
|
|
1156
1161
|
const viewHeight = 2 * Math.tan(vfov / 2) * module.camera.position.z;
|
|
@@ -1240,6 +1245,27 @@
|
|
|
1240
1245
|
break;
|
|
1241
1246
|
}
|
|
1242
1247
|
|
|
1248
|
+
const imageAspectRatio = corner === 'BR' && getNodeContentType(nodeEntry.model) === 'image'
|
|
1249
|
+
? Number(module.resizeAspectRatio || 0)
|
|
1250
|
+
: 0;
|
|
1251
|
+
if (imageAspectRatio > 0 && window.MindMapImagePolicy?.constrainBottomRightDimensions) {
|
|
1252
|
+
const lockedSize = window.MindMapImagePolicy.constrainBottomRightDimensions(
|
|
1253
|
+
finalWidth,
|
|
1254
|
+
finalHeight,
|
|
1255
|
+
startW,
|
|
1256
|
+
startH,
|
|
1257
|
+
imageAspectRatio,
|
|
1258
|
+
{
|
|
1259
|
+
minWidth: DEFAULT_MIN_NODE_WIDTH,
|
|
1260
|
+
minHeight: DEFAULT_MIN_NODE_HEIGHT,
|
|
1261
|
+
maxWidth: MAX_NODE_WIDTH,
|
|
1262
|
+
maxHeight: MAX_NODE_HEIGHT
|
|
1263
|
+
}
|
|
1264
|
+
);
|
|
1265
|
+
finalWidth = lockedSize.width;
|
|
1266
|
+
finalHeight = lockedSize.height;
|
|
1267
|
+
}
|
|
1268
|
+
|
|
1243
1269
|
// Clamp size
|
|
1244
1270
|
const minClampedSize = clampRemoteFleetResizeDimensions(nodeEntry.model, finalWidth, finalHeight);
|
|
1245
1271
|
let clampedWidth = Math.min(MAX_NODE_WIDTH, minClampedSize.width);
|
|
@@ -1844,13 +1870,34 @@
|
|
|
1844
1870
|
const currentPosY = nodeEntry.glObject?.position?.y ?? nodeEntry.cssObject?.position?.y ?? 0;
|
|
1845
1871
|
let finalPosX = currentPosX;
|
|
1846
1872
|
let finalPosY = currentPosY;
|
|
1873
|
+
const imageAspectRatio = module.resizeCorner === 'BR'
|
|
1874
|
+
&& getNodeContentType(nodeEntry.model) === 'image'
|
|
1875
|
+
? Number(module.resizeAspectRatio || 0)
|
|
1876
|
+
: 0;
|
|
1847
1877
|
|
|
1848
1878
|
// Respect global snap toggle. Resize itself stays free-form while dragging;
|
|
1849
1879
|
// snapping is applied only at the end when enabled.
|
|
1850
1880
|
if (module.gridSnapEnabled !== false) {
|
|
1851
1881
|
const GRID_SIZE = module.GRID_SIZE || 10;
|
|
1852
|
-
|
|
1853
|
-
|
|
1882
|
+
if (imageAspectRatio > 0 && window.MindMapImagePolicy?.snapAspectLockedDimensions) {
|
|
1883
|
+
const snappedSize = window.MindMapImagePolicy.snapAspectLockedDimensions(
|
|
1884
|
+
nodeEntry.model.width,
|
|
1885
|
+
nodeEntry.model.height,
|
|
1886
|
+
imageAspectRatio,
|
|
1887
|
+
GRID_SIZE,
|
|
1888
|
+
{
|
|
1889
|
+
minWidth: DEFAULT_MIN_NODE_WIDTH,
|
|
1890
|
+
minHeight: DEFAULT_MIN_NODE_HEIGHT,
|
|
1891
|
+
maxWidth: MAX_NODE_WIDTH,
|
|
1892
|
+
maxHeight: MAX_NODE_HEIGHT
|
|
1893
|
+
}
|
|
1894
|
+
);
|
|
1895
|
+
nodeEntry.model.width = snappedSize.width;
|
|
1896
|
+
nodeEntry.model.height = snappedSize.height;
|
|
1897
|
+
} else {
|
|
1898
|
+
nodeEntry.model.width = Math.round(nodeEntry.model.width / GRID_SIZE) * GRID_SIZE;
|
|
1899
|
+
nodeEntry.model.height = Math.round(nodeEntry.model.height / GRID_SIZE) * GRID_SIZE;
|
|
1900
|
+
}
|
|
1854
1901
|
finalPosX = Math.round(currentPosX / GRID_SIZE) * GRID_SIZE;
|
|
1855
1902
|
finalPosY = Math.round(currentPosY / GRID_SIZE) * GRID_SIZE;
|
|
1856
1903
|
}
|
|
@@ -2206,6 +2253,8 @@
|
|
|
2206
2253
|
module.isResizing = false;
|
|
2207
2254
|
module.resizeNodeObject = null;
|
|
2208
2255
|
module.resizingNodeId = null; // ▼▼▼ [Changed] clear resizingNodeId ▼▼▼
|
|
2256
|
+
module.resizeAspectRatio = 0;
|
|
2257
|
+
module.resizeCorner = null;
|
|
2209
2258
|
window.MindMapInteractions?.setBrowserSelectionLock?.(false, 'resize');
|
|
2210
2259
|
document.body.classList.remove('is-resizing');
|
|
2211
2260
|
|
|
@@ -2239,4 +2288,3 @@
|
|
|
2239
2288
|
|
|
2240
2289
|
console.log('? mind-map-pipeline.js loaded');
|
|
2241
2290
|
})();
|
|
2242
|
-
|
package/wwwroot/_framework/{MindExecution.Core.yrfbp4404m.dll → MindExecution.Core.kzbcbkmn27.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.mvn80sbzgp.dll → MindExecution.Web.3crklrc2je.dll}
RENAMED
|
Binary file
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mainAssemblyName": "MindExecution.Web",
|
|
3
3
|
"resources": {
|
|
4
|
-
"hash": "sha256-
|
|
4
|
+
"hash": "sha256-h7qN2ceBe++om9M7c2+vyk4SdA4734SFOq9M6dV1Fc4=",
|
|
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.kzbcbkmn27.dll": "MindExecution.Core.dll",
|
|
126
|
+
"MindExecution.Kernel.c7qfof7tfg.dll": "MindExecution.Kernel.dll",
|
|
127
|
+
"MindExecution.Plugins.Admin.2vmuxhdwb6.dll": "MindExecution.Plugins.Admin.dll",
|
|
128
|
+
"MindExecution.Plugins.Business.pkpabtra36.dll": "MindExecution.Plugins.Business.dll",
|
|
129
|
+
"MindExecution.Plugins.Concept.ibjgxkahfu.dll": "MindExecution.Plugins.Concept.dll",
|
|
130
|
+
"MindExecution.Plugins.Directory.q92uq1o4e5.dll": "MindExecution.Plugins.Directory.dll",
|
|
131
|
+
"MindExecution.Plugins.PlanMaster.l291yoyxds.dll": "MindExecution.Plugins.PlanMaster.dll",
|
|
132
|
+
"MindExecution.Plugins.YouTube.jazcnpkde2.dll": "MindExecution.Plugins.YouTube.dll",
|
|
133
|
+
"MindExecution.Shared.f51tf15188.dll": "MindExecution.Shared.dll",
|
|
134
|
+
"MindExecution.Web.3crklrc2je.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.kzbcbkmn27.dll": "sha256-UF3Xy5R1huP/eyBha3NHL7Jw7k5K2fTtlCOoyMosom0=",
|
|
280
|
+
"MindExecution.Kernel.c7qfof7tfg.dll": "sha256-mGnoCyTBpcGcxALgKY0hHHTIwAe80JJCCuDdvFXpUBU=",
|
|
281
|
+
"MindExecution.Plugins.Business.pkpabtra36.dll": "sha256-+U5GUMMd5TUpQDbA7tPbH7Q5l5iPO6dFkUS2Wu9UYZg=",
|
|
282
|
+
"MindExecution.Plugins.Concept.ibjgxkahfu.dll": "sha256-MslBJ8q1DfuaYSvgjasjYvGAEE1kKG+PB/5ac5WWXTI=",
|
|
283
|
+
"MindExecution.Plugins.PlanMaster.l291yoyxds.dll": "sha256-LQabWXDuFB851w/1cMocqTtdjWS3nCjSd/QFzVl7FnU=",
|
|
284
|
+
"MindExecution.Shared.f51tf15188.dll": "sha256-E07hW4FKQ4FwCPQu8lIGSW0XSVzDtV4Xq7jrNR8OCy4=",
|
|
285
|
+
"MindExecution.Web.3crklrc2je.dll": "sha256-nXdLL37Wl2T7flNWmCQeBsjoNwjBiiBvNam7n5HQ37g="
|
|
286
286
|
},
|
|
287
287
|
"lazyAssembly": {
|
|
288
|
-
"MindExecution.Plugins.Admin.
|
|
289
|
-
"MindExecution.Plugins.Directory.
|
|
290
|
-
"MindExecution.Plugins.YouTube.
|
|
288
|
+
"MindExecution.Plugins.Admin.2vmuxhdwb6.dll": "sha256-wrtoSN9v63OxdUy2BGXPEmdW+yUGw77FL0plxVvWiHc=",
|
|
289
|
+
"MindExecution.Plugins.Directory.q92uq1o4e5.dll": "sha256-/uSOM7d4uMRal/2KakaW5S5OHdOLBsCLbbb3hOGAO1g=",
|
|
290
|
+
"MindExecution.Plugins.YouTube.jazcnpkde2.dll": "sha256-Vceyyn7y7b++qiEvwxA9aMBcAuIHp1nb5vGpc6x0bes="
|
|
291
291
|
}
|
|
292
292
|
},
|
|
293
293
|
"cacheBootResources": true,
|
package/wwwroot/index.html
CHANGED
|
@@ -614,7 +614,7 @@
|
|
|
614
614
|
}
|
|
615
615
|
|
|
616
616
|
const base = '_content/MindExecution.Shared/js/';
|
|
617
|
-
const scriptVersion = '20260819-grid-
|
|
617
|
+
const scriptVersion = '20260819-grid-single-css-representation-v978';
|
|
618
618
|
const scriptUrl = (script) => `${base}${script}?v=${scriptVersion}`;
|
|
619
619
|
console.log(`[Script Loader] Shared JS version: ${scriptVersion}`);
|
|
620
620
|
const criticalScripts = [
|
|
@@ -631,6 +631,7 @@
|
|
|
631
631
|
'mind-map-video-playback-controls.js',
|
|
632
632
|
'mind-map-remote-codecs.js',
|
|
633
633
|
'mind-map-css3d-hotpath.js',
|
|
634
|
+
'mind-map-image-policy.js',
|
|
634
635
|
'mind-map-css3d-manager.js',
|
|
635
636
|
'mind-map-object-manager.js',
|
|
636
637
|
'mind-map-pipeline.js',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
self.assetsManifest = {
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "c/J69fru",
|
|
3
3
|
"assets": [
|
|
4
4
|
{
|
|
5
5
|
"hash": "sha256-+CSYMcqLNTsq3VnH11jgYyOCCdxvHzL74CBmo4sCmMU=",
|
|
@@ -86,7 +86,7 @@ self.assetsManifest = {
|
|
|
86
86
|
"url": "_content/MindExecution.Shared/js/mind-map-board-render-ownership.js"
|
|
87
87
|
},
|
|
88
88
|
{
|
|
89
|
-
"hash": "sha256-
|
|
89
|
+
"hash": "sha256-kAkXetdqRDypZg9PkOH48rgEbUZG/bkgLWhRLGrSdcc=",
|
|
90
90
|
"url": "_content/MindExecution.Shared/js/mind-map-core.js"
|
|
91
91
|
},
|
|
92
92
|
{
|
|
@@ -98,7 +98,7 @@ self.assetsManifest = {
|
|
|
98
98
|
"url": "_content/MindExecution.Shared/js/mind-map-css3d-hotpath.js"
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
|
-
"hash": "sha256-
|
|
101
|
+
"hash": "sha256-pnzJc5Y0FgyQ8muctsOpK3jh7jpDz/NlicK8UOTimpI=",
|
|
102
102
|
"url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
|
|
103
103
|
},
|
|
104
104
|
{
|
|
@@ -117,6 +117,10 @@ self.assetsManifest = {
|
|
|
117
117
|
"hash": "sha256-7B7gdxe1oZBi+9GHUXcaf6njTH0c3tg8//wBYGfbBcg=",
|
|
118
118
|
"url": "_content/MindExecution.Shared/js/mind-map-glow-shader.js"
|
|
119
119
|
},
|
|
120
|
+
{
|
|
121
|
+
"hash": "sha256-C8A7FBiE5Tab+Qxg8RUiuZatttPo4xCMgRzIzbpLzak=",
|
|
122
|
+
"url": "_content/MindExecution.Shared/js/mind-map-image-policy.js"
|
|
123
|
+
},
|
|
120
124
|
{
|
|
121
125
|
"hash": "sha256-5sVcWSPLCHmnvAYLsqBwno201net5gfRYOqtQLUXQZE=",
|
|
122
126
|
"url": "_content/MindExecution.Shared/js/mind-map-interactions.js"
|
|
@@ -166,7 +170,7 @@ self.assetsManifest = {
|
|
|
166
170
|
"url": "_content/MindExecution.Shared/js/mind-map-object-manager.js.backup"
|
|
167
171
|
},
|
|
168
172
|
{
|
|
169
|
-
"hash": "sha256-
|
|
173
|
+
"hash": "sha256-pHqW8QvxjoBSjP4026YppVd9hs3QlUePBbb9UCjFDZs=",
|
|
170
174
|
"url": "_content/MindExecution.Shared/js/mind-map-pipeline.js"
|
|
171
175
|
},
|
|
172
176
|
{
|
|
@@ -438,44 +442,44 @@ self.assetsManifest = {
|
|
|
438
442
|
"url": "_framework/MimeMapping.og9ys58ylm.dll"
|
|
439
443
|
},
|
|
440
444
|
{
|
|
441
|
-
"hash": "sha256-
|
|
442
|
-
"url": "_framework/MindExecution.Core.
|
|
445
|
+
"hash": "sha256-UF3Xy5R1huP/eyBha3NHL7Jw7k5K2fTtlCOoyMosom0=",
|
|
446
|
+
"url": "_framework/MindExecution.Core.kzbcbkmn27.dll"
|
|
443
447
|
},
|
|
444
448
|
{
|
|
445
|
-
"hash": "sha256-
|
|
446
|
-
"url": "_framework/MindExecution.Kernel.
|
|
449
|
+
"hash": "sha256-mGnoCyTBpcGcxALgKY0hHHTIwAe80JJCCuDdvFXpUBU=",
|
|
450
|
+
"url": "_framework/MindExecution.Kernel.c7qfof7tfg.dll"
|
|
447
451
|
},
|
|
448
452
|
{
|
|
449
|
-
"hash": "sha256-
|
|
450
|
-
"url": "_framework/MindExecution.Plugins.Admin.
|
|
453
|
+
"hash": "sha256-wrtoSN9v63OxdUy2BGXPEmdW+yUGw77FL0plxVvWiHc=",
|
|
454
|
+
"url": "_framework/MindExecution.Plugins.Admin.2vmuxhdwb6.dll"
|
|
451
455
|
},
|
|
452
456
|
{
|
|
453
|
-
"hash": "sha256
|
|
454
|
-
"url": "_framework/MindExecution.Plugins.Business.
|
|
457
|
+
"hash": "sha256-+U5GUMMd5TUpQDbA7tPbH7Q5l5iPO6dFkUS2Wu9UYZg=",
|
|
458
|
+
"url": "_framework/MindExecution.Plugins.Business.pkpabtra36.dll"
|
|
455
459
|
},
|
|
456
460
|
{
|
|
457
|
-
"hash": "sha256-
|
|
458
|
-
"url": "_framework/MindExecution.Plugins.Concept.
|
|
461
|
+
"hash": "sha256-MslBJ8q1DfuaYSvgjasjYvGAEE1kKG+PB/5ac5WWXTI=",
|
|
462
|
+
"url": "_framework/MindExecution.Plugins.Concept.ibjgxkahfu.dll"
|
|
459
463
|
},
|
|
460
464
|
{
|
|
461
|
-
"hash": "sha256
|
|
462
|
-
"url": "_framework/MindExecution.Plugins.Directory.
|
|
465
|
+
"hash": "sha256-/uSOM7d4uMRal/2KakaW5S5OHdOLBsCLbbb3hOGAO1g=",
|
|
466
|
+
"url": "_framework/MindExecution.Plugins.Directory.q92uq1o4e5.dll"
|
|
463
467
|
},
|
|
464
468
|
{
|
|
465
|
-
"hash": "sha256-
|
|
466
|
-
"url": "_framework/MindExecution.Plugins.PlanMaster.
|
|
469
|
+
"hash": "sha256-LQabWXDuFB851w/1cMocqTtdjWS3nCjSd/QFzVl7FnU=",
|
|
470
|
+
"url": "_framework/MindExecution.Plugins.PlanMaster.l291yoyxds.dll"
|
|
467
471
|
},
|
|
468
472
|
{
|
|
469
|
-
"hash": "sha256-
|
|
470
|
-
"url": "_framework/MindExecution.Plugins.YouTube.
|
|
473
|
+
"hash": "sha256-Vceyyn7y7b++qiEvwxA9aMBcAuIHp1nb5vGpc6x0bes=",
|
|
474
|
+
"url": "_framework/MindExecution.Plugins.YouTube.jazcnpkde2.dll"
|
|
471
475
|
},
|
|
472
476
|
{
|
|
473
|
-
"hash": "sha256-
|
|
474
|
-
"url": "_framework/MindExecution.Shared.
|
|
477
|
+
"hash": "sha256-E07hW4FKQ4FwCPQu8lIGSW0XSVzDtV4Xq7jrNR8OCy4=",
|
|
478
|
+
"url": "_framework/MindExecution.Shared.f51tf15188.dll"
|
|
475
479
|
},
|
|
476
480
|
{
|
|
477
|
-
"hash": "sha256-
|
|
478
|
-
"url": "_framework/MindExecution.Web.
|
|
481
|
+
"hash": "sha256-nXdLL37Wl2T7flNWmCQeBsjoNwjBiiBvNam7n5HQ37g=",
|
|
482
|
+
"url": "_framework/MindExecution.Web.3crklrc2je.dll"
|
|
479
483
|
},
|
|
480
484
|
{
|
|
481
485
|
"hash": "sha256-IsZJ91/OW+fHzNqIgEc7Y072ns8z9dGritiSyvR9Wgc=",
|
|
@@ -794,7 +798,7 @@ self.assetsManifest = {
|
|
|
794
798
|
"url": "_framework/Websocket.Client.vapounvmnl.dll"
|
|
795
799
|
},
|
|
796
800
|
{
|
|
797
|
-
"hash": "sha256-
|
|
801
|
+
"hash": "sha256-jYepqqheHzXwoncdGqH1YtPemsGl5jNJojJxsFr96us=",
|
|
798
802
|
"url": "_framework/blazor.boot.json"
|
|
799
803
|
},
|
|
800
804
|
{
|
|
@@ -870,7 +874,7 @@ self.assetsManifest = {
|
|
|
870
874
|
"url": "icon-512.png"
|
|
871
875
|
},
|
|
872
876
|
{
|
|
873
|
-
"hash": "sha256-
|
|
877
|
+
"hash": "sha256-JD51EiDeq05HKJMT+XHwWPwrolm+b92IT8q+Da+XKMw=",
|
|
874
878
|
"url": "index.html"
|
|
875
879
|
},
|
|
876
880
|
{
|