@mindexec/cli 0.2.257 → 0.2.259
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 +116 -49
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-interactions.js +6 -2
- package/wwwroot/_content/MindExecution.Shared/js/renderers/CSS3DRenderer.js +10 -3
- package/wwwroot/index.html +3 -3
- package/wwwroot/service-worker-assets.js +5 -5
- package/wwwroot/service-worker.js +1 -1
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 = '20260620-
|
|
8
|
+
const MINDMAP_CORE_BUILD_ID = '20260620-css3d-flat-wheel-v707';
|
|
9
9
|
const CanvasPhase = Object.freeze({
|
|
10
10
|
Booting: 'booting',
|
|
11
11
|
BoardFileLoading: 'board-file-loading',
|
|
@@ -109,6 +109,9 @@
|
|
|
109
109
|
const LOCAL_SNAP_GRID_MAX_STEP_PX = 56;
|
|
110
110
|
const LOCAL_SNAP_GRID_STEP_BUCKET_PX = 2;
|
|
111
111
|
const LOCAL_SNAP_GRID_OPACITY_BUCKET = 0.04;
|
|
112
|
+
const LOCAL_SNAP_GRID_DEFAULT_STEP_PX = 24;
|
|
113
|
+
const LOCAL_SNAP_GRID_DEFAULT_MAJOR_STEP_PX = 240;
|
|
114
|
+
const LOCAL_SNAP_GRID_DEFAULT_OPACITY = 0.42;
|
|
112
115
|
const CAMERA_MOTION_PARTIAL_FRAME_SKIP_ENABLED = false;
|
|
113
116
|
const CAMERA_MOTION_VISUAL_ONLY_FAST_PATH_ENABLED = true;
|
|
114
117
|
const CAMERA_MOTION_WEBGL_CANVAS_TRANSFORM_ENABLED = true;
|
|
@@ -1664,7 +1667,7 @@
|
|
|
1664
1667
|
});
|
|
1665
1668
|
}
|
|
1666
1669
|
|
|
1667
|
-
|
|
1670
|
+
module._cursorDomDeferredForMotion = true;
|
|
1668
1671
|
|
|
1669
1672
|
const isWebglRenderEnabled = renderDebugFlags.enableWebglRender !== false;
|
|
1670
1673
|
let usedWebglCanvasCameraTransform = false;
|
|
@@ -1890,7 +1893,7 @@
|
|
|
1890
1893
|
});
|
|
1891
1894
|
}
|
|
1892
1895
|
|
|
1893
|
-
|
|
1896
|
+
module._cursorDomDeferredForMotion = true;
|
|
1894
1897
|
|
|
1895
1898
|
let usedWebglCanvasCameraTransform = false;
|
|
1896
1899
|
if (isWebglRenderEnabled === true && module.renderer && module.scene && module.camera) {
|
|
@@ -3979,11 +3982,13 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3979
3982
|
layer.style.backgroundRepeat = 'repeat';
|
|
3980
3983
|
layer.style.backgroundColor = 'transparent';
|
|
3981
3984
|
layer.style.borderRadius = '50%';
|
|
3985
|
+
layer.style.overflow = 'hidden';
|
|
3986
|
+
layer.style.clipPath = 'circle(500px at 500px 500px)';
|
|
3982
3987
|
layer.style.contain = 'strict';
|
|
3983
3988
|
layer.style.willChange = 'transform, opacity';
|
|
3984
3989
|
layer.style.transform = 'translate3d(0, 0, 0)';
|
|
3985
3990
|
layer.style.transition = 'opacity 90ms linear';
|
|
3986
|
-
const mask = 'radial-gradient(circle at center, rgba(0,0,0,
|
|
3991
|
+
const mask = 'radial-gradient(circle at center, rgba(0,0,0,0.98) 0%, rgba(0,0,0,0.82) 34%, rgba(0,0,0,0.38) 56%, rgba(0,0,0,0.11) 74%, rgba(0,0,0,0.025) 88%, transparent 100%)';
|
|
3987
3992
|
layer.style.maskImage = mask;
|
|
3988
3993
|
layer.style.webkitMaskImage = mask;
|
|
3989
3994
|
|
|
@@ -4002,6 +4007,83 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
4002
4007
|
return layer;
|
|
4003
4008
|
}
|
|
4004
4009
|
|
|
4010
|
+
_getLocalSnapGridStyleKind() {
|
|
4011
|
+
const themeName = String(this.currentThemeName || '').trim();
|
|
4012
|
+
return themeName === 'SpatialGrid2D' ? 'dot' : 'line';
|
|
4013
|
+
}
|
|
4014
|
+
|
|
4015
|
+
_applyLocalSnapGridStyle(layer, styleKind, smallStepPx, majorStepPx, opacity, keyPrefix = 'style') {
|
|
4016
|
+
if (!layer) {
|
|
4017
|
+
return false;
|
|
4018
|
+
}
|
|
4019
|
+
|
|
4020
|
+
const safeStyleKind = styleKind === 'dot' ? 'dot' : 'line';
|
|
4021
|
+
const safeSmallStep = Math.max(
|
|
4022
|
+
LOCAL_SNAP_GRID_MIN_STEP_PX,
|
|
4023
|
+
Math.min(LOCAL_SNAP_GRID_MAX_STEP_PX, Number(smallStepPx) || LOCAL_SNAP_GRID_DEFAULT_STEP_PX)
|
|
4024
|
+
);
|
|
4025
|
+
const safeMajorStep = Math.max(safeSmallStep, Number(majorStepPx) || LOCAL_SNAP_GRID_DEFAULT_MAJOR_STEP_PX);
|
|
4026
|
+
const safeOpacity = Math.max(0.2, Math.min(0.56, Number(opacity) || LOCAL_SNAP_GRID_DEFAULT_OPACITY));
|
|
4027
|
+
const localGridKey = [
|
|
4028
|
+
keyPrefix,
|
|
4029
|
+
safeStyleKind,
|
|
4030
|
+
Math.round(safeSmallStep * 100),
|
|
4031
|
+
Math.round(safeMajorStep * 100),
|
|
4032
|
+
Math.round(safeOpacity * 100)
|
|
4033
|
+
].join('|');
|
|
4034
|
+
|
|
4035
|
+
if (localGridKey === this._lastLocalSnapGridKey) {
|
|
4036
|
+
return false;
|
|
4037
|
+
}
|
|
4038
|
+
|
|
4039
|
+
this._lastLocalSnapGridKey = localGridKey;
|
|
4040
|
+
const opacityValue = safeOpacity.toFixed(3);
|
|
4041
|
+
this._lastLocalSnapGridOpacity = opacityValue;
|
|
4042
|
+
if (safeStyleKind === 'dot') {
|
|
4043
|
+
layer.style.backgroundImage = [
|
|
4044
|
+
'radial-gradient(circle at 0 0, rgba(58, 69, 88, 0.28) 1px, transparent 1.45px)',
|
|
4045
|
+
'radial-gradient(circle at 0 0, rgba(30, 41, 59, 0.4) 1.6px, transparent 2.05px)'
|
|
4046
|
+
].join(', ');
|
|
4047
|
+
layer.style.backgroundSize = `${safeSmallStep.toFixed(3)}px ${safeSmallStep.toFixed(3)}px, ${safeMajorStep.toFixed(3)}px ${safeMajorStep.toFixed(3)}px`;
|
|
4048
|
+
layer.style.backgroundPosition = '0 0, 0 0';
|
|
4049
|
+
} else {
|
|
4050
|
+
layer.style.backgroundImage = [
|
|
4051
|
+
'linear-gradient(to right, rgba(51, 65, 85, 0.16) 1px, transparent 1px)',
|
|
4052
|
+
'linear-gradient(to bottom, rgba(51, 65, 85, 0.16) 1px, transparent 1px)',
|
|
4053
|
+
'linear-gradient(to right, rgba(15, 23, 42, 0.28) 1px, transparent 1px)',
|
|
4054
|
+
'linear-gradient(to bottom, rgba(15, 23, 42, 0.28) 1px, transparent 1px)'
|
|
4055
|
+
].join(', ');
|
|
4056
|
+
layer.style.backgroundSize = `${safeSmallStep.toFixed(3)}px ${safeSmallStep.toFixed(3)}px, ${safeSmallStep.toFixed(3)}px ${safeSmallStep.toFixed(3)}px, ${safeMajorStep.toFixed(3)}px ${safeMajorStep.toFixed(3)}px, ${safeMajorStep.toFixed(3)}px ${safeMajorStep.toFixed(3)}px`;
|
|
4057
|
+
layer.style.backgroundPosition = '0 0, 0 0, 0 0, 0 0';
|
|
4058
|
+
}
|
|
4059
|
+
if (layer.style.opacity !== opacityValue) {
|
|
4060
|
+
layer.style.opacity = opacityValue;
|
|
4061
|
+
}
|
|
4062
|
+
return true;
|
|
4063
|
+
}
|
|
4064
|
+
|
|
4065
|
+
_ensureLocalSnapGridBaseStyle(layer = null) {
|
|
4066
|
+
const targetLayer = layer || this._ensureLocalSnapGridLayer();
|
|
4067
|
+
if (!targetLayer) {
|
|
4068
|
+
return false;
|
|
4069
|
+
}
|
|
4070
|
+
|
|
4071
|
+
if (this._lastLocalSnapGridKey) {
|
|
4072
|
+
return true;
|
|
4073
|
+
}
|
|
4074
|
+
|
|
4075
|
+
this._applyLocalSnapGridStyle(
|
|
4076
|
+
targetLayer,
|
|
4077
|
+
this._getLocalSnapGridStyleKind(),
|
|
4078
|
+
LOCAL_SNAP_GRID_DEFAULT_STEP_PX,
|
|
4079
|
+
LOCAL_SNAP_GRID_DEFAULT_MAJOR_STEP_PX,
|
|
4080
|
+
LOCAL_SNAP_GRID_DEFAULT_OPACITY,
|
|
4081
|
+
'base'
|
|
4082
|
+
);
|
|
4083
|
+
this._localSnapGridStyleDeferredForZoom = true;
|
|
4084
|
+
return true;
|
|
4085
|
+
}
|
|
4086
|
+
|
|
4005
4087
|
_setLocalSnapGridVisible(visible, targetOpacity = null) {
|
|
4006
4088
|
const layer = this._localSnapGridLayer;
|
|
4007
4089
|
if (!layer) {
|
|
@@ -4100,51 +4182,19 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
4100
4182
|
)
|
|
4101
4183
|
);
|
|
4102
4184
|
const majorStepPx = smallStepPx * 10;
|
|
4103
|
-
const
|
|
4104
|
-
const
|
|
4105
|
-
const rawOpacity = Math.max(0.34, Math.min(0.82, cameraZ <= 1800 ? 0.72 : 0.72 - ((cameraZ - 1800) / 36000)));
|
|
4185
|
+
const styleKind = this._getLocalSnapGridStyleKind();
|
|
4186
|
+
const rawOpacity = Math.max(0.24, Math.min(0.54, cameraZ <= 1800 ? 0.48 : 0.48 - ((cameraZ - 1800) / 36000)));
|
|
4106
4187
|
const opacity = Math.max(
|
|
4107
|
-
0.
|
|
4108
|
-
Math.min(0.
|
|
4188
|
+
0.24,
|
|
4189
|
+
Math.min(0.54, Math.round(rawOpacity / LOCAL_SNAP_GRID_OPACITY_BUCKET) * LOCAL_SNAP_GRID_OPACITY_BUCKET)
|
|
4109
4190
|
);
|
|
4110
|
-
const localGridKey = [
|
|
4111
|
-
styleKind,
|
|
4112
|
-
Math.round(smallStepPx * 100),
|
|
4113
|
-
Math.round(majorStepPx * 100),
|
|
4114
|
-
Math.round(opacity * 100)
|
|
4115
|
-
].join('|');
|
|
4116
4191
|
const shouldDeferLocalGridStyleForZoom =
|
|
4117
4192
|
this.isZooming === true &&
|
|
4118
4193
|
!!this._lastLocalSnapGridKey;
|
|
4119
4194
|
|
|
4120
|
-
if (
|
|
4121
|
-
shouldDeferLocalGridStyleForZoom !== true) {
|
|
4195
|
+
if (shouldDeferLocalGridStyleForZoom !== true) {
|
|
4122
4196
|
this._localSnapGridStyleDeferredForZoom = false;
|
|
4123
|
-
this.
|
|
4124
|
-
const opacityValue = opacity.toFixed(3);
|
|
4125
|
-
this._lastLocalSnapGridOpacity = opacityValue;
|
|
4126
|
-
if (styleKind === 'dot') {
|
|
4127
|
-
layer.style.backgroundImage = [
|
|
4128
|
-
'radial-gradient(circle at 0 0, rgba(68, 78, 94, 0.34) 1px, transparent 1.55px)',
|
|
4129
|
-
'radial-gradient(circle at 0 0, rgba(44, 55, 74, 0.5) 1.7px, transparent 2.2px)'
|
|
4130
|
-
].join(', ');
|
|
4131
|
-
} else {
|
|
4132
|
-
layer.style.backgroundImage = [
|
|
4133
|
-
'linear-gradient(to right, rgba(70, 82, 100, 0.22) 1px, transparent 1px)',
|
|
4134
|
-
'linear-gradient(to bottom, rgba(70, 82, 100, 0.22) 1px, transparent 1px)',
|
|
4135
|
-
'linear-gradient(to right, rgba(42, 55, 75, 0.36) 1px, transparent 1px)',
|
|
4136
|
-
'linear-gradient(to bottom, rgba(42, 55, 75, 0.36) 1px, transparent 1px)'
|
|
4137
|
-
].join(', ');
|
|
4138
|
-
}
|
|
4139
|
-
layer.style.backgroundSize = styleKind === 'dot'
|
|
4140
|
-
? `${smallStepPx.toFixed(3)}px ${smallStepPx.toFixed(3)}px, ${majorStepPx.toFixed(3)}px ${majorStepPx.toFixed(3)}px`
|
|
4141
|
-
: `${smallStepPx.toFixed(3)}px ${smallStepPx.toFixed(3)}px, ${smallStepPx.toFixed(3)}px ${smallStepPx.toFixed(3)}px, ${majorStepPx.toFixed(3)}px ${majorStepPx.toFixed(3)}px, ${majorStepPx.toFixed(3)}px ${majorStepPx.toFixed(3)}px`;
|
|
4142
|
-
layer.style.backgroundPosition = styleKind === 'dot'
|
|
4143
|
-
? '0 0, 0 0'
|
|
4144
|
-
: '0 0, 0 0, 0 0, 0 0';
|
|
4145
|
-
if (layer.style.opacity !== opacityValue) {
|
|
4146
|
-
layer.style.opacity = opacityValue;
|
|
4147
|
-
}
|
|
4197
|
+
this._applyLocalSnapGridStyle(layer, styleKind, smallStepPx, majorStepPx, opacity);
|
|
4148
4198
|
} else if (shouldDeferLocalGridStyleForZoom === true) {
|
|
4149
4199
|
this._localSnapGridStyleDeferredForZoom = true;
|
|
4150
4200
|
}
|
|
@@ -4171,7 +4221,15 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
4171
4221
|
}
|
|
4172
4222
|
|
|
4173
4223
|
if (!this._localSnapGridLayer?.isConnected || !this._lastLocalSnapGridKey) {
|
|
4174
|
-
|
|
4224
|
+
const layer = this._ensureLocalSnapGridLayer();
|
|
4225
|
+
if (!layer) {
|
|
4226
|
+
return false;
|
|
4227
|
+
}
|
|
4228
|
+
if (this.isZooming === true) {
|
|
4229
|
+
this._ensureLocalSnapGridBaseStyle(layer);
|
|
4230
|
+
} else {
|
|
4231
|
+
return this._syncLocalSnapGridLayer(visible);
|
|
4232
|
+
}
|
|
4175
4233
|
}
|
|
4176
4234
|
|
|
4177
4235
|
const layer = this._localSnapGridLayer;
|
|
@@ -5312,7 +5370,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
5312
5370
|
coalescedWheelEvents: Number(options?.coalescedWheelEvents || 0)
|
|
5313
5371
|
});
|
|
5314
5372
|
|
|
5315
|
-
|
|
5373
|
+
this._cursorDomDeferredForMotion = true;
|
|
5316
5374
|
|
|
5317
5375
|
let usedWebglCanvasCameraTransform = false;
|
|
5318
5376
|
if (canRenderWebgl === true) {
|
|
@@ -6425,6 +6483,10 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
6425
6483
|
this._wasResizingLastFrame = this.isResizing === true;
|
|
6426
6484
|
if (zoomEndedThisFrame || panEndedThisFrame || cameraEndedThisFrame || resizeEndedThisFrame) {
|
|
6427
6485
|
this._lastMotionEndAt = frameStart;
|
|
6486
|
+
if (this._cursorDomDeferredForMotion === true) {
|
|
6487
|
+
updateCursorDomElement(this);
|
|
6488
|
+
this._cursorDomDeferredForMotion = false;
|
|
6489
|
+
}
|
|
6428
6490
|
if (cameraEndedThisFrame) {
|
|
6429
6491
|
this._cameraNavigationOverlayInputTime = 0;
|
|
6430
6492
|
this._overlayDirty = true;
|
|
@@ -6759,7 +6821,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
6759
6821
|
});
|
|
6760
6822
|
}
|
|
6761
6823
|
|
|
6762
|
-
|
|
6824
|
+
this._cursorDomDeferredForMotion = true;
|
|
6763
6825
|
const shouldFreezeWebglCanvasForImmediateZoom =
|
|
6764
6826
|
shouldFreezeWebglSurfaceForZoom(this) === true;
|
|
6765
6827
|
const canReuseWebglCanvasForImmediateMotion = !!(
|
|
@@ -6934,7 +6996,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
6934
6996
|
this._deferPassiveOverlayRefresh = true;
|
|
6935
6997
|
}
|
|
6936
6998
|
|
|
6937
|
-
|
|
6999
|
+
this._cursorDomDeferredForMotion = true;
|
|
6938
7000
|
const shouldFreezeWebglCanvasForStationaryZoom =
|
|
6939
7001
|
shouldFreezeWebglSurfaceForZoom(this) === true;
|
|
6940
7002
|
const canReuseWebglCanvasForStationaryMotion = !!(
|
|
@@ -7124,7 +7186,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
7124
7186
|
});
|
|
7125
7187
|
}
|
|
7126
7188
|
|
|
7127
|
-
|
|
7189
|
+
this._cursorDomDeferredForMotion = true;
|
|
7128
7190
|
const shouldFreezeWebglCanvasForResidentZoom =
|
|
7129
7191
|
shouldFreezeWebglSurfaceForZoom(this) === true;
|
|
7130
7192
|
const canReuseWebglCanvasForResidentMotion = !!(
|
|
@@ -7372,7 +7434,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
7372
7434
|
let usedWebglCanvasCameraTransformEarly = false;
|
|
7373
7435
|
if (shouldSampleWebglDuringCameraMotion &&
|
|
7374
7436
|
shouldFreezeWebglCanvasForEarlyZoom !== true) {
|
|
7375
|
-
|
|
7437
|
+
this._cursorDomDeferredForMotion = true;
|
|
7376
7438
|
if (isWebglRenderEnabled && this.renderer && this.scene && this.camera) {
|
|
7377
7439
|
this._clearWebglCanvasCameraTransform();
|
|
7378
7440
|
this.renderer.render(this.scene, this.camera);
|
|
@@ -8151,7 +8213,12 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
8151
8213
|
const shouldSampleWebglDuringCameraMotion =
|
|
8152
8214
|
renderDebugFlags.sampleWebglDuringCameraMotion === true &&
|
|
8153
8215
|
(this.frameCount % CAMERA_MOTION_WEBGL_FRAME_INTERVAL) === 0;
|
|
8154
|
-
if (
|
|
8216
|
+
if (isCameraNavigationOnlyInteractiveFrame === true ||
|
|
8217
|
+
this.isPanning === true ||
|
|
8218
|
+
this.isZooming === true ||
|
|
8219
|
+
isCameraMoving === true) {
|
|
8220
|
+
this._cursorDomDeferredForMotion = true;
|
|
8221
|
+
} else if (!isPureCss3dCameraMotionFrame || shouldSampleWebglDuringCameraMotion) {
|
|
8155
8222
|
updateCursorDomElement(this);
|
|
8156
8223
|
}
|
|
8157
8224
|
|
|
@@ -6407,8 +6407,12 @@ window.MindMapInteractions = (function () {
|
|
|
6407
6407
|
// ▼▼▼ [Perf] 줌 시작 시 isZooming 플래그 설정 및 will-change 활성화 ▼▼▼
|
|
6408
6408
|
if (!module.isZooming) {
|
|
6409
6409
|
module.isZooming = true;
|
|
6410
|
-
|
|
6411
|
-
|
|
6410
|
+
if (MOTION_DOM_FANOUT_ENABLED === true) {
|
|
6411
|
+
scheduleZoomMotionChrome(module);
|
|
6412
|
+
}
|
|
6413
|
+
if (module.renderDebugFlags?.enableCss3dWillChange === true) {
|
|
6414
|
+
scheduleMotionWillChangeEnable(module);
|
|
6415
|
+
}
|
|
6412
6416
|
}
|
|
6413
6417
|
// ▼▼▼ [Fix] 휠 입력 시간 기록 (줌 종료 타이밍 계산용) ▼▼▼
|
|
6414
6418
|
module._zoomInputTime = performance.now();
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
function CSS3DRenderer(){
|
|
34
|
-
var _width, _height; var _widthHalf, _heightHalf; var cache = { camera:{ fov:0, style:'' }, objects: new WeakMap() };
|
|
34
|
+
var _width, _height; var _widthHalf, _heightHalf; var cache = { camera:{ fov:0, style:'', mode:'matrix3d' }, objects: new WeakMap() };
|
|
35
35
|
var domElement = document.createElement('div'); domElement.style.overflow = 'hidden'; this.domElement = domElement;
|
|
36
36
|
var cameraElement = document.createElement('div'); cameraElement.style.webkitTransformStyle = cameraElement.style.transformStyle = 'preserve-3d'; cameraElement.style.pointerEvents = 'none'; cameraElement.style.webkitTransformOrigin = cameraElement.style.transformOrigin = '0 0'; domElement.appendChild(cameraElement);
|
|
37
37
|
|
|
@@ -41,7 +41,13 @@
|
|
|
41
41
|
function getCameraCSSMatrix(matrix){ var e=matrix.elements; return 'matrix3d('+epsilon(e[0])+','+epsilon(-e[1])+','+epsilon(e[2])+','+epsilon(e[3])+','+epsilon(e[4])+','+epsilon(-e[5])+','+epsilon(e[6])+','+epsilon(e[7])+','+epsilon(e[8])+','+epsilon(-e[9])+','+epsilon(e[10])+','+epsilon(e[11])+','+epsilon(e[12])+','+epsilon(-e[13])+','+epsilon(e[14])+','+epsilon(e[15])+')'; }
|
|
42
42
|
function getObjectCSSMatrix(matrix){ var e=matrix.elements; var m='matrix3d('+epsilon(e[0])+','+epsilon(e[1])+','+epsilon(e[2])+','+epsilon(e[3])+','+epsilon(-e[4])+','+epsilon(-e[5])+','+epsilon(-e[6])+','+epsilon(-e[7])+','+epsilon(e[8])+','+epsilon(e[9])+','+epsilon(e[10])+','+epsilon(e[11])+','+epsilon(e[12])+','+epsilon(e[13])+','+epsilon(e[14])+','+epsilon(e[15])+')'; return m; }
|
|
43
43
|
function renderObject(object, scene, camera, cameraCSSMatrix){ if (object.isCSS3DObject){ var style=getObjectCSSMatrix(object.matrixWorld); var display=object.visible ? '' : 'none'; var element=object.element; var cached=cache.objects.get(object); if (cached===undefined || cached.style!==style){ element.style.webkitTransform=element.style.transform=style; } if (cached===undefined || cached.display!==display){ element.style.display=display; } if (cached===undefined || cached.style!==style || cached.display!==display){ cache.objects.set(object, { style, display }); } if (element.parentNode !== cameraElement){ cameraElement.appendChild(element); } } for (var i=0,l=object.children.length;i<l;i++){ renderObject(object.children[i], scene, camera, cameraCSSMatrix); } }
|
|
44
|
-
function
|
|
44
|
+
function setCameraElementMode(mode){
|
|
45
|
+
if (cache.camera.mode === mode) return;
|
|
46
|
+
cache.camera.mode = mode;
|
|
47
|
+
var style = mode === 'flat' ? 'flat' : 'preserve-3d';
|
|
48
|
+
cameraElement.style.webkitTransformStyle = cameraElement.style.transformStyle = style;
|
|
49
|
+
}
|
|
50
|
+
function renderCameraOnly(renderer, camera){ setCameraElementMode('matrix3d'); var fov=camera.projectionMatrix.elements[5]*_heightHalf; if (cache.camera.fov!==fov){ renderer.domElement.style.webkitPerspective=renderer.domElement.style.perspective=fov+'px'; cache.camera.fov=fov; } if (camera.parent===null && camera.matrixWorldNeedsUpdate===true) camera.updateMatrixWorld(); var cameraCSSMatrix='translateZ('+fov+'px)'+getCameraCSSMatrix(camera.matrixWorldInverse); var style=cameraCSSMatrix+'translate('+_widthHalf+'px,'+_heightHalf+'px)'; if (cache.camera.style!==style){ cameraElement.style.webkitTransform=cameraElement.style.transform=style; cache.camera.style=style; } return cameraCSSMatrix; }
|
|
45
51
|
function renderFlatCameraOnly(renderer, camera, options){
|
|
46
52
|
if (!camera || !_width || !_height || !camera.isPerspectiveCamera) return false;
|
|
47
53
|
var position = camera.position || {};
|
|
@@ -63,12 +69,13 @@
|
|
|
63
69
|
var ty = Math.round(translateY / translateBucket) * translateBucket;
|
|
64
70
|
var s = Math.round(scale / scaleBucket) * scaleBucket;
|
|
65
71
|
var style = 'flat|'+Math.round(_width)+'|'+Math.round(_height)+'|'+Math.round(tx / translateBucket)+'|'+Math.round(ty / translateBucket)+'|'+Math.round(s / scaleBucket);
|
|
72
|
+
setCameraElementMode('flat');
|
|
66
73
|
if (cache.camera.fov !== 0){
|
|
67
74
|
renderer.domElement.style.webkitPerspective = renderer.domElement.style.perspective = '';
|
|
68
75
|
cache.camera.fov = 0;
|
|
69
76
|
}
|
|
70
77
|
if (cache.camera.style !== style){
|
|
71
|
-
cameraElement.style.webkitTransform = cameraElement.style.transform = '
|
|
78
|
+
cameraElement.style.webkitTransform = cameraElement.style.transform = 'matrix('+s.toFixed(6)+',0,0,'+(-s).toFixed(6)+','+tx.toFixed(3)+','+ty.toFixed(3)+')';
|
|
72
79
|
cache.camera.style = style;
|
|
73
80
|
}
|
|
74
81
|
return true;
|
package/wwwroot/index.html
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
<title>MindExec | Business Execution OS for solo builders</title>
|
|
8
8
|
<meta name="description" content="MindExec is an AI business execution OS for solo builders who want to turn notes, research, assets, and repeatable execution Skills into revenue-producing work." />
|
|
9
9
|
<base href="/" />
|
|
10
|
-
<link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260620-
|
|
11
|
-
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-
|
|
10
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260620-css3d-flat-wheel-v707" />
|
|
11
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-css3d-flat-wheel-v707" />
|
|
12
12
|
<!-- ?�▼??Font Awesome (local) ?�▼??-->
|
|
13
13
|
<link rel="stylesheet" href="_content/MindExecution.Shared/lib/font-awesome/css/all.min.css" />
|
|
14
14
|
<!-- ?�▲??-->
|
|
@@ -579,7 +579,7 @@
|
|
|
579
579
|
}
|
|
580
580
|
|
|
581
581
|
const base = '_content/MindExecution.Shared/js/';
|
|
582
|
-
const scriptVersion = '20260620-
|
|
582
|
+
const scriptVersion = '20260620-css3d-flat-wheel-v707';
|
|
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": "7Mz0t211",
|
|
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-Wh72NYCd8llyQcb9S1nu14LVriY/M65RGbAJV9Ewecg=",
|
|
82
82
|
"url": "_content/MindExecution.Shared/js/mind-map-core.js"
|
|
83
83
|
},
|
|
84
84
|
{
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"url": "_content/MindExecution.Shared/js/mind-map-glow-shader.js"
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
|
-
"hash": "sha256-
|
|
109
|
+
"hash": "sha256-oHhdP4cltwUivQrUKDEMENUIE3cKk29F/IEk2Rg3JPM=",
|
|
110
110
|
"url": "_content/MindExecution.Shared/js/mind-map-interactions.js"
|
|
111
111
|
},
|
|
112
112
|
{
|
|
@@ -182,7 +182,7 @@
|
|
|
182
182
|
"url": "_content/MindExecution.Shared/js/plan-master.js"
|
|
183
183
|
},
|
|
184
184
|
{
|
|
185
|
-
"hash": "sha256-
|
|
185
|
+
"hash": "sha256-2IxneOfAhc2Sq8hl7ywEBzZaaFX22FZaW89WB0rAgUk=",
|
|
186
186
|
"url": "_content/MindExecution.Shared/js/renderers/CSS3DRenderer.js"
|
|
187
187
|
},
|
|
188
188
|
{
|
|
@@ -834,7 +834,7 @@
|
|
|
834
834
|
"url": "image-manifest.json"
|
|
835
835
|
},
|
|
836
836
|
{
|
|
837
|
-
"hash": "sha256-
|
|
837
|
+
"hash": "sha256-KjaPdEv6u95UkcfvQokggiqL/Q7CuMbn9BoghYBReYQ=",
|
|
838
838
|
"url": "index.html"
|
|
839
839
|
},
|
|
840
840
|
{
|