@mindexec/cli 0.2.246 → 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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindexec/cli",
3
- "version": "0.2.246",
3
+ "version": "0.2.247",
4
4
  "description": "MindExec local runtime and bridge CLI",
5
5
  "main": "server.js",
6
6
  "type": "module",
@@ -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-local-grid-zoom-freeze-v693';
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',
@@ -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 // rAF ID
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 = 0;
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
- wheelBuffer.notchPending = false;
6339
+ performCameraZoomBuffered(module, accumulatedDeltaY, clientX, clientY, {
6340
+ coalescedWheelEvents: eventCount
6341
+ });
6342
+ });
6343
+ }
6325
6344
 
6326
- const absDelta = Math.abs(wheelBuffer.notchDeltaY);
6327
- if (absDelta < WHEEL_ZOOM_NOTCH_DELTA) {
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(absDelta / WHEEL_ZOOM_NOTCH_DELTA))
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
- { fixedZoomStep: direction * notchCount * WHEEL_ZOOM_NOTCH_STEP }
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
  /**
@@ -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-local-grid-zoom-freeze-v693" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-local-grid-zoom-freeze-v693" />
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-local-grid-zoom-freeze-v693';
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": "PSSgwA1s",
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-2VOJlDpOgcTf1p2dRUBMhGDKnDr2dJM8z1vfEfncsnw=",
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-GjdoWt5yAo2TwVMIWucHvHnXrpWproSpGT6fc3C/vVo=",
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-duvN1R3Fhi71Zy8YB9nx1HZAvMvAPnAECjpy28oOBi0=",
837
+ "hash": "sha256-NSGGz12RIgG18+CRXfF2nzP9qDBUAL3ORI7FboWsJa0=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: PSSgwA1s */
1
+ /* Manifest version: pBArUTe0 */
2
2
  // Hosted deployments should prefer the network over stale offline caches.
3
3
  // This service worker immediately clears old Blazor offline caches and unregisters itself.
4
4