@mindexec/cli 0.2.246 → 0.2.248
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 +9 -3
- 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-freeze-first-v695';
|
|
9
9
|
const CanvasPhase = Object.freeze({
|
|
10
10
|
Booting: 'booting',
|
|
11
11
|
BoardFileLoading: 'board-file-loading',
|
|
@@ -1634,7 +1634,10 @@
|
|
|
1634
1634
|
const isWebglRenderEnabled = renderDebugFlags.enableWebglRender !== false;
|
|
1635
1635
|
let usedWebglCanvasCameraTransform = false;
|
|
1636
1636
|
if (isWebglRenderEnabled && module.renderer && module.scene && module.camera) {
|
|
1637
|
+
const shouldFreezeWebglCanvasForZoom =
|
|
1638
|
+
shouldFreezeWebglSurfaceForZoom(module) === true;
|
|
1637
1639
|
const canReuseWebglCanvas = !!(
|
|
1640
|
+
shouldFreezeWebglCanvasForZoom !== true &&
|
|
1638
1641
|
canUseWebglCanvasTransformForCameraMotion(module) === true &&
|
|
1639
1642
|
module._lastWebglRenderedCameraState &&
|
|
1640
1643
|
module.renderer?.domElement
|
|
@@ -1652,7 +1655,7 @@
|
|
|
1652
1655
|
webglCanvasCameraTransform: usedWebglCanvasCameraTransform === true,
|
|
1653
1656
|
uaUltraEarlyCameraOnly: true
|
|
1654
1657
|
};
|
|
1655
|
-
} else if (
|
|
1658
|
+
} else if (shouldFreezeWebglCanvasForZoom === true) {
|
|
1656
1659
|
markWebglSurfaceFrozenForZoom(module, 'uaUltraEarlyCameraOnly');
|
|
1657
1660
|
} else {
|
|
1658
1661
|
module._clearWebglCanvasCameraTransform?.();
|
|
@@ -6563,7 +6566,10 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
6563
6566
|
}
|
|
6564
6567
|
|
|
6565
6568
|
updateCursorDomElement(this);
|
|
6569
|
+
const shouldFreezeWebglCanvasForImmediateZoom =
|
|
6570
|
+
shouldFreezeWebglSurfaceForZoom(this) === true;
|
|
6566
6571
|
const canReuseWebglCanvasForImmediateMotion = !!(
|
|
6572
|
+
shouldFreezeWebglCanvasForImmediateZoom !== true &&
|
|
6567
6573
|
canUseWebglCanvasTransformForCameraMotion(this) === true &&
|
|
6568
6574
|
renderDebugFlags.enableWebglRender !== false &&
|
|
6569
6575
|
this._lastWebglRenderedCameraState &&
|
|
@@ -6607,7 +6613,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
6607
6613
|
uaVisualOnlyMotion: true
|
|
6608
6614
|
};
|
|
6609
6615
|
} else {
|
|
6610
|
-
if (
|
|
6616
|
+
if (shouldFreezeWebglCanvasForImmediateZoom === true) {
|
|
6611
6617
|
markWebglSurfaceFrozenForZoom(this, 'uaVisualOnlyMotion');
|
|
6612
6618
|
} else {
|
|
6613
6619
|
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-freeze-first-v695" />
|
|
11
|
+
<link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-wheel-zoom-freeze-first-v695" />
|
|
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-freeze-first-v695';
|
|
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": "Zi67gVG4",
|
|
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-3CJni1dXUFwnlvRezSOK8f58AxKKAo8Ao9saMsOvUU0=",
|
|
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-NfUBTHpczaona1Kcls5Lx+NYpNeHdwUmtGXsIz+eJR0=",
|
|
838
838
|
"url": "index.html"
|
|
839
839
|
},
|
|
840
840
|
{
|