@mindexec/cli 0.2.245 → 0.2.247
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 +137 -81
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-interactions.js +68 -23
- package/wwwroot/index.html +3 -3
- package/wwwroot/service-worker-assets.js +4 -4
- 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-wheel-zoom-coalesced-v694';
|
|
9
9
|
const CanvasPhase = Object.freeze({
|
|
10
10
|
Booting: 'booting',
|
|
11
11
|
BoardFileLoading: 'board-file-loading',
|
|
@@ -502,6 +502,34 @@
|
|
|
502
502
|
return true;
|
|
503
503
|
}
|
|
504
504
|
|
|
505
|
+
function shouldFreezeWebglSurfaceForZoom(module) {
|
|
506
|
+
return !!(
|
|
507
|
+
module?.isZooming === true &&
|
|
508
|
+
module?.useAnimation60Fps !== true &&
|
|
509
|
+
module?._lastWebglRenderedCameraState
|
|
510
|
+
);
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
function markWebglSurfaceFrozenForZoom(module, mode) {
|
|
514
|
+
if (!module) {
|
|
515
|
+
return false;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
module._clearWebglCanvasCameraTransform?.();
|
|
519
|
+
module._webglCameraMotionDeferred = true;
|
|
520
|
+
module._themeCameraMotionDeferred = true;
|
|
521
|
+
module._lastWebglRenderInfo = {
|
|
522
|
+
calls: 0,
|
|
523
|
+
triangles: 0,
|
|
524
|
+
points: 0,
|
|
525
|
+
lines: 0,
|
|
526
|
+
skipped: true,
|
|
527
|
+
webglSurfaceFrozenForZoom: true,
|
|
528
|
+
[mode || 'uaZoomFrozenWebgl']: true
|
|
529
|
+
};
|
|
530
|
+
return true;
|
|
531
|
+
}
|
|
532
|
+
|
|
505
533
|
function deferContinuousThemeForCameraMotion(module) {
|
|
506
534
|
if (!isContinuousBackgroundTheme(module)) {
|
|
507
535
|
return false;
|
|
@@ -1624,6 +1652,8 @@
|
|
|
1624
1652
|
webglCanvasCameraTransform: usedWebglCanvasCameraTransform === true,
|
|
1625
1653
|
uaUltraEarlyCameraOnly: true
|
|
1626
1654
|
};
|
|
1655
|
+
} else if (shouldFreezeWebglSurfaceForZoom(module) === true) {
|
|
1656
|
+
markWebglSurfaceFrozenForZoom(module, 'uaUltraEarlyCameraOnly');
|
|
1627
1657
|
} else {
|
|
1628
1658
|
module._clearWebglCanvasCameraTransform?.();
|
|
1629
1659
|
module.renderer.render(module.scene, module.camera);
|
|
@@ -1844,6 +1874,8 @@
|
|
|
1844
1874
|
webglCanvasCameraTransform: usedWebglCanvasCameraTransform === true,
|
|
1845
1875
|
uaUltraResidentCameraOnly: true
|
|
1846
1876
|
};
|
|
1877
|
+
} else if (shouldFreezeWebglSurfaceForZoom(module) === true) {
|
|
1878
|
+
markWebglSurfaceFrozenForZoom(module, 'uaUltraResidentCameraOnly');
|
|
1847
1879
|
} else {
|
|
1848
1880
|
module._clearWebglCanvasCameraTransform?.();
|
|
1849
1881
|
module.renderer.render(module.scene, module.camera);
|
|
@@ -6575,18 +6607,22 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
6575
6607
|
uaVisualOnlyMotion: true
|
|
6576
6608
|
};
|
|
6577
6609
|
} else {
|
|
6578
|
-
this
|
|
6579
|
-
|
|
6580
|
-
|
|
6581
|
-
|
|
6582
|
-
|
|
6583
|
-
|
|
6584
|
-
|
|
6585
|
-
|
|
6586
|
-
|
|
6587
|
-
|
|
6588
|
-
|
|
6589
|
-
|
|
6610
|
+
if (shouldFreezeWebglSurfaceForZoom(this) === true) {
|
|
6611
|
+
markWebglSurfaceFrozenForZoom(this, 'uaVisualOnlyMotion');
|
|
6612
|
+
} else {
|
|
6613
|
+
this._clearWebglCanvasCameraTransform();
|
|
6614
|
+
this.renderer.render(this.scene, this.camera);
|
|
6615
|
+
this._recordWebglRenderedCameraState();
|
|
6616
|
+
const renderInfo = this.renderer?.info?.render || null;
|
|
6617
|
+
this._lastWebglRenderInfo = renderInfo ? {
|
|
6618
|
+
calls: Number(renderInfo.calls || 0),
|
|
6619
|
+
triangles: Number(renderInfo.triangles || 0),
|
|
6620
|
+
points: Number(renderInfo.points || 0),
|
|
6621
|
+
lines: Number(renderInfo.lines || 0),
|
|
6622
|
+
uaVisualOnlyMotion: true,
|
|
6623
|
+
webglCanvasCameraBootstrap: true
|
|
6624
|
+
} : null;
|
|
6625
|
+
}
|
|
6590
6626
|
}
|
|
6591
6627
|
}
|
|
6592
6628
|
this._syncMotionGridLayerForCameraNavigation(usedWebglCanvasCameraTransformImmediate);
|
|
@@ -6742,18 +6778,22 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
6742
6778
|
uaStationaryVisualMotion: true
|
|
6743
6779
|
};
|
|
6744
6780
|
} else {
|
|
6745
|
-
this
|
|
6746
|
-
|
|
6747
|
-
|
|
6748
|
-
|
|
6749
|
-
|
|
6750
|
-
|
|
6751
|
-
|
|
6752
|
-
|
|
6753
|
-
|
|
6754
|
-
|
|
6755
|
-
|
|
6756
|
-
|
|
6781
|
+
if (shouldFreezeWebglSurfaceForZoom(this) === true) {
|
|
6782
|
+
markWebglSurfaceFrozenForZoom(this, 'uaStationaryVisualMotion');
|
|
6783
|
+
} else {
|
|
6784
|
+
this._clearWebglCanvasCameraTransform();
|
|
6785
|
+
this.renderer.render(this.scene, this.camera);
|
|
6786
|
+
this._recordWebglRenderedCameraState();
|
|
6787
|
+
const renderInfo = this.renderer?.info?.render || null;
|
|
6788
|
+
this._lastWebglRenderInfo = renderInfo ? {
|
|
6789
|
+
calls: Number(renderInfo.calls || 0),
|
|
6790
|
+
triangles: Number(renderInfo.triangles || 0),
|
|
6791
|
+
points: Number(renderInfo.points || 0),
|
|
6792
|
+
lines: Number(renderInfo.lines || 0),
|
|
6793
|
+
uaStationaryVisualMotion: true,
|
|
6794
|
+
webglCanvasCameraBootstrap: true
|
|
6795
|
+
} : null;
|
|
6796
|
+
}
|
|
6757
6797
|
}
|
|
6758
6798
|
}
|
|
6759
6799
|
this._syncMotionGridLayerForCameraNavigation(usedWebglCanvasCameraTransformStationary);
|
|
@@ -6923,18 +6963,22 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
6923
6963
|
uaResidentVisualOnlyMotion: true
|
|
6924
6964
|
};
|
|
6925
6965
|
} else {
|
|
6926
|
-
this
|
|
6927
|
-
|
|
6928
|
-
|
|
6929
|
-
|
|
6930
|
-
|
|
6931
|
-
|
|
6932
|
-
|
|
6933
|
-
|
|
6934
|
-
|
|
6935
|
-
|
|
6936
|
-
|
|
6937
|
-
|
|
6966
|
+
if (shouldFreezeWebglSurfaceForZoom(this) === true) {
|
|
6967
|
+
markWebglSurfaceFrozenForZoom(this, 'uaResidentVisualOnlyMotion');
|
|
6968
|
+
} else {
|
|
6969
|
+
this._clearWebglCanvasCameraTransform();
|
|
6970
|
+
this.renderer.render(this.scene, this.camera);
|
|
6971
|
+
this._recordWebglRenderedCameraState();
|
|
6972
|
+
const renderInfo = this.renderer?.info?.render || null;
|
|
6973
|
+
this._lastWebglRenderInfo = renderInfo ? {
|
|
6974
|
+
calls: Number(renderInfo.calls || 0),
|
|
6975
|
+
triangles: Number(renderInfo.triangles || 0),
|
|
6976
|
+
points: Number(renderInfo.points || 0),
|
|
6977
|
+
lines: Number(renderInfo.lines || 0),
|
|
6978
|
+
uaResidentVisualOnlyMotion: true,
|
|
6979
|
+
webglCanvasCameraBootstrap: true
|
|
6980
|
+
} : null;
|
|
6981
|
+
}
|
|
6938
6982
|
}
|
|
6939
6983
|
}
|
|
6940
6984
|
}
|
|
@@ -7141,32 +7185,36 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
7141
7185
|
uaEarlyCameraOnly: true
|
|
7142
7186
|
};
|
|
7143
7187
|
} else if (this.renderer && this.scene && this.camera) {
|
|
7144
|
-
|
|
7145
|
-
|
|
7146
|
-
|
|
7147
|
-
|
|
7148
|
-
this.
|
|
7149
|
-
|
|
7150
|
-
|
|
7151
|
-
|
|
7152
|
-
|
|
7153
|
-
|
|
7154
|
-
} finally {
|
|
7155
|
-
if (hiddenEarlyCameraMotionThemeObject) {
|
|
7156
|
-
hiddenEarlyCameraMotionThemeObject.visible = true;
|
|
7188
|
+
if (shouldFreezeWebglSurfaceForZoom(this) === true) {
|
|
7189
|
+
markWebglSurfaceFrozenForZoom(this, 'uaEarlyCameraOnly');
|
|
7190
|
+
} else {
|
|
7191
|
+
let hiddenEarlyCameraMotionThemeObject = null;
|
|
7192
|
+
this._clearWebglCanvasCameraTransform();
|
|
7193
|
+
if (this._isMotionGridThemeEnabled() === true &&
|
|
7194
|
+
this.currentThemeObject &&
|
|
7195
|
+
this.currentThemeObject.visible !== false) {
|
|
7196
|
+
hiddenEarlyCameraMotionThemeObject = this.currentThemeObject;
|
|
7197
|
+
hiddenEarlyCameraMotionThemeObject.visible = false;
|
|
7157
7198
|
}
|
|
7199
|
+
try {
|
|
7200
|
+
this.renderer.render(this.scene, this.camera);
|
|
7201
|
+
} finally {
|
|
7202
|
+
if (hiddenEarlyCameraMotionThemeObject) {
|
|
7203
|
+
hiddenEarlyCameraMotionThemeObject.visible = true;
|
|
7204
|
+
}
|
|
7205
|
+
}
|
|
7206
|
+
this._recordWebglRenderedCameraState();
|
|
7207
|
+
const renderInfo = this.renderer?.info?.render || null;
|
|
7208
|
+
this._lastWebglRenderInfo = renderInfo ? {
|
|
7209
|
+
calls: Number(renderInfo.calls || 0),
|
|
7210
|
+
triangles: Number(renderInfo.triangles || 0),
|
|
7211
|
+
points: Number(renderInfo.points || 0),
|
|
7212
|
+
lines: Number(renderInfo.lines || 0),
|
|
7213
|
+
backgroundThemeHidden: hiddenEarlyCameraMotionThemeObject ? true : undefined,
|
|
7214
|
+
uaEarlyCameraOnly: true,
|
|
7215
|
+
webglCanvasCameraBootstrap: true
|
|
7216
|
+
} : null;
|
|
7158
7217
|
}
|
|
7159
|
-
this._recordWebglRenderedCameraState();
|
|
7160
|
-
const renderInfo = this.renderer?.info?.render || null;
|
|
7161
|
-
this._lastWebglRenderInfo = renderInfo ? {
|
|
7162
|
-
calls: Number(renderInfo.calls || 0),
|
|
7163
|
-
triangles: Number(renderInfo.triangles || 0),
|
|
7164
|
-
points: Number(renderInfo.points || 0),
|
|
7165
|
-
lines: Number(renderInfo.lines || 0),
|
|
7166
|
-
backgroundThemeHidden: hiddenEarlyCameraMotionThemeObject ? true : undefined,
|
|
7167
|
-
uaEarlyCameraOnly: true,
|
|
7168
|
-
webglCanvasCameraBootstrap: true
|
|
7169
|
-
} : null;
|
|
7170
7218
|
} else {
|
|
7171
7219
|
this._lastWebglRenderInfo = {
|
|
7172
7220
|
calls: 0,
|
|
@@ -8000,33 +8048,40 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
8000
8048
|
webglCanvasCameraTransform: true
|
|
8001
8049
|
};
|
|
8002
8050
|
} else {
|
|
8003
|
-
this
|
|
8004
|
-
|
|
8005
|
-
|
|
8006
|
-
|
|
8007
|
-
|
|
8008
|
-
|
|
8009
|
-
|
|
8010
|
-
|
|
8011
|
-
|
|
8012
|
-
|
|
8051
|
+
if (shouldFreezeWebglSurfaceForZoom(this) === true) {
|
|
8052
|
+
markWebglSurfaceFrozenForZoom(this, 'normalWebglRender');
|
|
8053
|
+
} else {
|
|
8054
|
+
this._clearWebglCanvasCameraTransform();
|
|
8055
|
+
if (shouldHideBackgroundThemeDuringCameraNavigation) {
|
|
8056
|
+
hiddenCameraMotionThemeObject = this.currentThemeObject;
|
|
8057
|
+
hiddenCameraMotionThemeObject.visible = false;
|
|
8058
|
+
}
|
|
8059
|
+
try {
|
|
8060
|
+
this.renderer.render(this.scene, this.camera);
|
|
8061
|
+
} finally {
|
|
8062
|
+
if (hiddenCameraMotionThemeObject) {
|
|
8063
|
+
hiddenCameraMotionThemeObject.visible = true;
|
|
8064
|
+
}
|
|
8013
8065
|
}
|
|
8066
|
+
this._recordWebglRenderedCameraState();
|
|
8067
|
+
const renderInfo = this.renderer?.info?.render || null;
|
|
8068
|
+
this._lastWebglRenderInfo = renderInfo ? {
|
|
8069
|
+
calls: Number(renderInfo.calls || 0),
|
|
8070
|
+
triangles: Number(renderInfo.triangles || 0),
|
|
8071
|
+
points: Number(renderInfo.points || 0),
|
|
8072
|
+
lines: Number(renderInfo.lines || 0),
|
|
8073
|
+
backgroundThemeHidden: hiddenCameraMotionThemeObject ? true : undefined
|
|
8074
|
+
} : null;
|
|
8014
8075
|
}
|
|
8015
|
-
this._recordWebglRenderedCameraState();
|
|
8016
|
-
const renderInfo = this.renderer?.info?.render || null;
|
|
8017
|
-
this._lastWebglRenderInfo = renderInfo ? {
|
|
8018
|
-
calls: Number(renderInfo.calls || 0),
|
|
8019
|
-
triangles: Number(renderInfo.triangles || 0),
|
|
8020
|
-
points: Number(renderInfo.points || 0),
|
|
8021
|
-
lines: Number(renderInfo.lines || 0),
|
|
8022
|
-
backgroundThemeHidden: hiddenCameraMotionThemeObject ? true : undefined
|
|
8023
|
-
} : null;
|
|
8024
8076
|
}
|
|
8025
8077
|
} else if (isWebglRenderEnabled) {
|
|
8026
8078
|
if (isPureCss3dCameraMotionFrame === true) {
|
|
8027
8079
|
this._webglCameraMotionDeferred = true;
|
|
8028
8080
|
}
|
|
8081
|
+
const shouldFreezeWebglCanvasTransformForZoom =
|
|
8082
|
+
shouldFreezeWebglSurfaceForZoom(this) === true;
|
|
8029
8083
|
if (isCameraNavigationOnlyInteractiveFrame === true &&
|
|
8084
|
+
shouldFreezeWebglCanvasTransformForZoom !== true &&
|
|
8030
8085
|
canUseWebglCanvasTransformForCameraMotion(this) === true) {
|
|
8031
8086
|
usedWebglCanvasCameraTransform = this._applyWebglCanvasCameraTransform() === true;
|
|
8032
8087
|
} else {
|
|
@@ -8038,7 +8093,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
8038
8093
|
points: 0,
|
|
8039
8094
|
lines: 0,
|
|
8040
8095
|
skipped: true,
|
|
8041
|
-
webglCanvasCameraTransform: usedWebglCanvasCameraTransform || undefined
|
|
8096
|
+
webglCanvasCameraTransform: usedWebglCanvasCameraTransform || undefined,
|
|
8097
|
+
webglSurfaceFrozenForZoom: shouldFreezeWebglCanvasTransformForZoom || undefined
|
|
8042
8098
|
};
|
|
8043
8099
|
} else if (isBoardLoading) {
|
|
8044
8100
|
this._clearWebglCanvasCameraTransform();
|
|
@@ -6,7 +6,7 @@ window.MindMapInteractions = (function () {
|
|
|
6
6
|
const MOTION_DOM_FANOUT_DELAY_MS = 180;
|
|
7
7
|
const MOTION_DOM_FANOUT_ENABLED = false;
|
|
8
8
|
const MOTION_WILL_CHANGE_ENABLE_DELAY_MS = 240;
|
|
9
|
-
const WHEEL_ZOOM_TARGET_UPDATE_MODE = 'direct';
|
|
9
|
+
const WHEEL_ZOOM_TARGET_UPDATE_MODE = 'raf-coalesced-direct';
|
|
10
10
|
const PRIMARY_CLICK_DELAY_MS = 280;
|
|
11
11
|
const BACKGROUND_PRIMARY_CLICK_DELAY_MS = 320;
|
|
12
12
|
const eventHandlers = new WeakMap();
|
|
@@ -6036,12 +6036,29 @@ window.MindMapInteractions = (function () {
|
|
|
6036
6036
|
lastClientY: 0, // 마지막 마우스 Y 위치
|
|
6037
6037
|
pending: false, // rAF 대기 중 여부
|
|
6038
6038
|
notchPending: false, // 계단식 zoom rAF 대기 중 여부
|
|
6039
|
-
frameId: null
|
|
6039
|
+
frameId: null, // rAF ID
|
|
6040
|
+
eventCount: 0
|
|
6040
6041
|
});
|
|
6041
|
-
}
|
|
6042
|
+
}
|
|
6042
6043
|
return wheelBuffers.get(module);
|
|
6043
6044
|
}
|
|
6044
6045
|
|
|
6046
|
+
function scheduleWheelZoomFrame(module, wheelBuffer, callback) {
|
|
6047
|
+
if (!module || !wheelBuffer || wheelBuffer.pending === true) {
|
|
6048
|
+
return;
|
|
6049
|
+
}
|
|
6050
|
+
|
|
6051
|
+
wheelBuffer.pending = true;
|
|
6052
|
+
const scheduleFrame = typeof requestAnimationFrame === 'function'
|
|
6053
|
+
? requestAnimationFrame
|
|
6054
|
+
: (cb) => setTimeout(() => cb(performance.now()), 16);
|
|
6055
|
+
wheelBuffer.frameId = scheduleFrame(() => {
|
|
6056
|
+
wheelBuffer.pending = false;
|
|
6057
|
+
wheelBuffer.frameId = null;
|
|
6058
|
+
callback?.();
|
|
6059
|
+
});
|
|
6060
|
+
}
|
|
6061
|
+
|
|
6045
6062
|
function matchesLetterShortcut(e, code, fallbackKey) {
|
|
6046
6063
|
if (!e) {
|
|
6047
6064
|
return false;
|
|
@@ -6303,35 +6320,38 @@ window.MindMapInteractions = (function () {
|
|
|
6303
6320
|
return;
|
|
6304
6321
|
}
|
|
6305
6322
|
|
|
6306
|
-
wheelBuffer.deltaY
|
|
6307
|
-
wheelBuffer.pending = false;
|
|
6308
|
-
wheelBuffer.frameId = null;
|
|
6309
|
-
wheelBuffer.lastClientX = e.clientX;
|
|
6310
|
-
wheelBuffer.lastClientY = e.clientY;
|
|
6311
|
-
performCameraZoomBuffered(module, deltaY, e.clientX, e.clientY);
|
|
6312
|
-
}
|
|
6313
|
-
|
|
6314
|
-
function bufferSteppedWheelZoomEvent(module, e, analysis = null) {
|
|
6315
|
-
const wheelBuffer = getWheelBuffer(module);
|
|
6316
|
-
const normalizedDeltaY = Number((analysis || getWheelEventAnalysis(module, e)).deltaY || 0);
|
|
6317
|
-
const notchDeltaY = e?.deltaMode === 0
|
|
6318
|
-
? normalizedDeltaY
|
|
6319
|
-
: Math.sign(normalizedDeltaY) * WHEEL_ZOOM_NOTCH_DELTA;
|
|
6320
|
-
wheelBuffer.notchDeltaY += notchDeltaY;
|
|
6323
|
+
wheelBuffer.deltaY += deltaY;
|
|
6321
6324
|
wheelBuffer.lastClientX = e.clientX;
|
|
6322
6325
|
wheelBuffer.lastClientY = e.clientY;
|
|
6326
|
+
wheelBuffer.eventCount = Math.min(1000, Number(wheelBuffer.eventCount || 0) + 1);
|
|
6327
|
+
|
|
6328
|
+
scheduleWheelZoomFrame(module, wheelBuffer, () => {
|
|
6329
|
+
const accumulatedDeltaY = Number(wheelBuffer.deltaY || 0);
|
|
6330
|
+
const clientX = wheelBuffer.lastClientX;
|
|
6331
|
+
const clientY = wheelBuffer.lastClientY;
|
|
6332
|
+
const eventCount = Number(wheelBuffer.eventCount || 0);
|
|
6333
|
+
wheelBuffer.deltaY = 0;
|
|
6334
|
+
wheelBuffer.eventCount = 0;
|
|
6335
|
+
if (Math.abs(accumulatedDeltaY) <= 0.001) {
|
|
6336
|
+
return;
|
|
6337
|
+
}
|
|
6323
6338
|
|
|
6324
|
-
|
|
6339
|
+
performCameraZoomBuffered(module, accumulatedDeltaY, clientX, clientY, {
|
|
6340
|
+
coalescedWheelEvents: eventCount
|
|
6341
|
+
});
|
|
6342
|
+
});
|
|
6343
|
+
}
|
|
6325
6344
|
|
|
6326
|
-
|
|
6327
|
-
|
|
6345
|
+
function flushSteppedWheelZoomBuffer(module, wheelBuffer) {
|
|
6346
|
+
const nextAbsDelta = Math.abs(Number(wheelBuffer?.notchDeltaY || 0));
|
|
6347
|
+
if (nextAbsDelta < WHEEL_ZOOM_NOTCH_DELTA) {
|
|
6328
6348
|
return;
|
|
6329
6349
|
}
|
|
6330
6350
|
|
|
6331
6351
|
const direction = Math.sign(wheelBuffer.notchDeltaY);
|
|
6332
6352
|
const notchCount = Math.min(
|
|
6333
6353
|
WHEEL_ZOOM_MAX_NOTCHES_PER_FRAME,
|
|
6334
|
-
Math.max(1, Math.floor(
|
|
6354
|
+
Math.max(1, Math.floor(nextAbsDelta / WHEEL_ZOOM_NOTCH_DELTA))
|
|
6335
6355
|
);
|
|
6336
6356
|
wheelBuffer.notchDeltaY -= direction * notchCount * WHEEL_ZOOM_NOTCH_DELTA;
|
|
6337
6357
|
|
|
@@ -6340,8 +6360,33 @@ window.MindMapInteractions = (function () {
|
|
|
6340
6360
|
direction * notchCount * WHEEL_ZOOM_NOTCH_DELTA,
|
|
6341
6361
|
wheelBuffer.lastClientX,
|
|
6342
6362
|
wheelBuffer.lastClientY,
|
|
6343
|
-
{
|
|
6363
|
+
{
|
|
6364
|
+
fixedZoomStep: direction * notchCount * WHEEL_ZOOM_NOTCH_STEP,
|
|
6365
|
+
coalescedWheelEvents: notchCount
|
|
6366
|
+
}
|
|
6344
6367
|
);
|
|
6368
|
+
|
|
6369
|
+
if (Math.abs(Number(wheelBuffer.notchDeltaY || 0)) >= WHEEL_ZOOM_NOTCH_DELTA) {
|
|
6370
|
+
scheduleWheelZoomFrame(module, wheelBuffer, () => flushSteppedWheelZoomBuffer(module, wheelBuffer));
|
|
6371
|
+
}
|
|
6372
|
+
}
|
|
6373
|
+
|
|
6374
|
+
function bufferSteppedWheelZoomEvent(module, e, analysis = null) {
|
|
6375
|
+
const wheelBuffer = getWheelBuffer(module);
|
|
6376
|
+
const normalizedDeltaY = Number((analysis || getWheelEventAnalysis(module, e)).deltaY || 0);
|
|
6377
|
+
const notchDeltaY = e?.deltaMode === 0
|
|
6378
|
+
? normalizedDeltaY
|
|
6379
|
+
: Math.sign(normalizedDeltaY) * WHEEL_ZOOM_NOTCH_DELTA;
|
|
6380
|
+
wheelBuffer.notchDeltaY += notchDeltaY;
|
|
6381
|
+
wheelBuffer.lastClientX = e.clientX;
|
|
6382
|
+
wheelBuffer.lastClientY = e.clientY;
|
|
6383
|
+
|
|
6384
|
+
const absDelta = Math.abs(wheelBuffer.notchDeltaY);
|
|
6385
|
+
if (absDelta < WHEEL_ZOOM_NOTCH_DELTA) {
|
|
6386
|
+
return;
|
|
6387
|
+
}
|
|
6388
|
+
|
|
6389
|
+
scheduleWheelZoomFrame(module, wheelBuffer, () => flushSteppedWheelZoomBuffer(module, wheelBuffer));
|
|
6345
6390
|
}
|
|
6346
6391
|
|
|
6347
6392
|
/**
|
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-wheel-zoom-coalesced-v694" />
|
|
11
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-wheel-zoom-coalesced-v694" />
|
|
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-wheel-zoom-coalesced-v694';
|
|
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": "pBArUTe0",
|
|
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-pWrwCuH6PnP3EM14iVUcyqO/wvWqdP27TAjX1u8Oi9s=",
|
|
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-uuicDvKUL3Xr/yyKQAMMyH+0wvMeVU6WyGzfQ5z2mec=",
|
|
110
110
|
"url": "_content/MindExecution.Shared/js/mind-map-interactions.js"
|
|
111
111
|
},
|
|
112
112
|
{
|
|
@@ -834,7 +834,7 @@
|
|
|
834
834
|
"url": "image-manifest.json"
|
|
835
835
|
},
|
|
836
836
|
{
|
|
837
|
-
"hash": "sha256-
|
|
837
|
+
"hash": "sha256-NSGGz12RIgG18+CRXfF2nzP9qDBUAL3ORI7FboWsJa0=",
|
|
838
838
|
"url": "index.html"
|
|
839
839
|
},
|
|
840
840
|
{
|