@mindexec/cli 0.2.238 → 0.2.240

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.238",
3
+ "version": "0.2.240",
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-zoom-local-grid-lite-v685';
8
+ const MINDMAP_CORE_BUILD_ID = '20260620-wheel-local-grid-v687';
9
9
  const CanvasPhase = Object.freeze({
10
10
  Booting: 'booting',
11
11
  BoardFileLoading: 'board-file-loading',
@@ -112,6 +112,8 @@
112
112
  const CAMERA_MOTION_PARTIAL_FRAME_SKIP_ENABLED = false;
113
113
  const CAMERA_MOTION_VISUAL_ONLY_FAST_PATH_ENABLED = true;
114
114
  const CAMERA_MOTION_WEBGL_CANVAS_TRANSFORM_ENABLED = true;
115
+ const CAMERA_MOTION_WEBGL_TRANSFORM_TRANSLATE_BUCKET_PX = 0.25;
116
+ const CAMERA_MOTION_WEBGL_TRANSFORM_SCALE_BUCKET = 0.0005;
115
117
  const CAMERA_STATIONARY_INTERACTION_FRAME_DELAY_MS = 48;
116
118
  const CAMERA_ZOOM_END_DELAY_MS = 150;
117
119
  const CAMERA_MOTION_GLOBAL_STYLE_CLASS_ENABLED = false;
@@ -3897,7 +3899,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
3897
3899
  layer.style.willChange = 'transform, opacity';
3898
3900
  layer.style.transform = 'translate3d(0, 0, 0)';
3899
3901
  layer.style.transition = 'opacity 90ms linear';
3900
- const mask = 'radial-gradient(circle at center, rgba(0,0,0,0.96) 0%, rgba(0,0,0,0.86) 48%, rgba(0,0,0,0.42) 70%, rgba(0,0,0,0.08) 88%, transparent 100%)';
3902
+ const mask = 'radial-gradient(circle at center, rgba(0,0,0,0.96) 0%, rgba(0,0,0,0.82) 34%, rgba(0,0,0,0.38) 62%, rgba(0,0,0,0.10) 80%, transparent 100%)';
3901
3903
  layer.style.maskImage = mask;
3902
3904
  layer.style.webkitMaskImage = mask;
3903
3905
 
@@ -5042,19 +5044,32 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
5042
5044
  const currentY = Number(camera.position?.y || 0);
5043
5045
  const translateX = (Number(last.x || 0) - currentX) * pxPerWorld;
5044
5046
  const translateY = (currentY - Number(last.y || 0)) * pxPerWorld;
5047
+ const isCameraMotion =
5048
+ this.isPanning === true ||
5049
+ this.isZooming === true ||
5050
+ this._cameraMovingThisFrame === true;
5051
+ const translateBucket = isCameraMotion
5052
+ ? CAMERA_MOTION_WEBGL_TRANSFORM_TRANSLATE_BUCKET_PX
5053
+ : 0.01;
5054
+ const scaleBucket = isCameraMotion
5055
+ ? CAMERA_MOTION_WEBGL_TRANSFORM_SCALE_BUCKET
5056
+ : 0.0001;
5057
+ const transformTranslateX = Math.round(translateX / translateBucket) * translateBucket;
5058
+ const transformTranslateY = Math.round(translateY / translateBucket) * translateBucket;
5059
+ const transformScale = Math.round(scale / scaleBucket) * scaleBucket;
5045
5060
  const transformKey = [
5046
5061
  Math.round(width),
5047
5062
  Math.round(height),
5048
- Math.round(translateX * 100),
5049
- Math.round(translateY * 100),
5050
- Math.round(scale * 10000)
5063
+ Math.round(transformTranslateX / translateBucket),
5064
+ Math.round(transformTranslateY / translateBucket),
5065
+ Math.round(transformScale / scaleBucket)
5051
5066
  ].join('|');
5052
5067
 
5053
5068
  if (transformKey !== this._lastWebglCanvasMotionTransformKey) {
5054
5069
  this._lastWebglCanvasMotionTransformKey = transformKey;
5055
5070
  element.style.transformOrigin = '50% 50%';
5056
5071
  element.style.willChange = 'transform';
5057
- element.style.transform = `translate3d(${translateX.toFixed(3)}px, ${translateY.toFixed(3)}px, 0) scale(${scale.toFixed(5)})`;
5072
+ element.style.transform = `translate3d(${transformTranslateX.toFixed(3)}px, ${transformTranslateY.toFixed(3)}px, 0) scale(${transformScale.toFixed(5)})`;
5058
5073
  }
5059
5074
 
5060
5075
  this._webglCanvasMotionTransformActive = true;
@@ -6666,15 +6666,49 @@ window.MindMapInteractions = (function () {
6666
6666
  }
6667
6667
 
6668
6668
  function onWheel(module, e) {
6669
+ const wheelNow = typeof performance !== 'undefined' && typeof performance.now === 'function'
6670
+ ? performance.now()
6671
+ : Date.now();
6672
+ const shouldRouteWheelToZoom =
6673
+ isSyntheticTrackpadPinchGesture(module, e) ||
6674
+ shouldZoomFromWheelEvent(module, e);
6675
+
6676
+ if (shouldRouteWheelToZoom) {
6677
+ module._lastCanvasWheelAt = wheelNow;
6678
+ window.__mindMapLastCanvasWheelAt = wheelNow;
6679
+ if ((wheelNow - Number(module._lastWheelSurfaceInteractionNotifyAt || 0)) >= 650) {
6680
+ module._lastWheelSurfaceInteractionNotifyAt = wheelNow;
6681
+ notifyMindCanvasSurfaceInteraction('wheel');
6682
+ }
6683
+
6684
+ if (WHEEL_DEBUG) {
6685
+ if (!module._wheelDebug) {
6686
+ module._wheelDebug = { count: 0, lastLog: 0 };
6687
+ }
6688
+ module._wheelDebug.count++;
6689
+ if (wheelNow - module._wheelDebug.lastLog > 1000) {
6690
+ console.log(`[Wheel Debug] Events in last second: ${module._wheelDebug.count}, deltaY: ${e.deltaY.toFixed(1)}`);
6691
+ module._wheelDebug.count = 0;
6692
+ module._wheelDebug.lastLog = wheelNow;
6693
+ }
6694
+ }
6695
+
6696
+ // Zoom-mode wheel/pinch owns the canvas immediately. Do not probe
6697
+ // mounted embeds here; that can query DOM subtrees on every wheel tick.
6698
+ if (shouldBlockWheelAndGestureInteractions(module, e)) {
6699
+ return;
6700
+ }
6701
+
6702
+ routeWheelEventToZoom(module, e);
6703
+ return;
6704
+ }
6705
+
6669
6706
  if (e?.__mindMapBypassMountedEmbedOwner !== true &&
6670
6707
  shouldLetMountedEmbedOwnEvent(module, e.target, e)) {
6671
6708
  e.stopPropagation();
6672
6709
  return;
6673
6710
  }
6674
6711
 
6675
- const wheelNow = typeof performance !== 'undefined' && typeof performance.now === 'function'
6676
- ? performance.now()
6677
- : Date.now();
6678
6712
  module._lastCanvasWheelAt = wheelNow;
6679
6713
  window.__mindMapLastCanvasWheelAt = wheelNow;
6680
6714
  if ((wheelNow - Number(module._lastWheelSurfaceInteractionNotifyAt || 0)) >= 650) {
@@ -6687,11 +6721,10 @@ window.MindMapInteractions = (function () {
6687
6721
  module._wheelDebug = { count: 0, lastLog: 0 };
6688
6722
  }
6689
6723
  module._wheelDebug.count++;
6690
- const now = performance.now();
6691
- if (now - module._wheelDebug.lastLog > 1000) {
6724
+ if (wheelNow - module._wheelDebug.lastLog > 1000) {
6692
6725
  console.log(`[Wheel Debug] Events in last second: ${module._wheelDebug.count}, deltaY: ${e.deltaY.toFixed(1)}`);
6693
6726
  module._wheelDebug.count = 0;
6694
- module._wheelDebug.lastLog = now;
6727
+ module._wheelDebug.lastLog = wheelNow;
6695
6728
  }
6696
6729
  }
6697
6730
 
@@ -6701,11 +6734,6 @@ window.MindMapInteractions = (function () {
6701
6734
  return;
6702
6735
  }
6703
6736
 
6704
- if (isSyntheticTrackpadPinchGesture(module, e)) {
6705
- routeWheelEventToZoom(module, e);
6706
- return;
6707
- }
6708
-
6709
6737
  // On Windows/Linux, only clear two-axis trackpad gestures bypass the
6710
6738
  // wheel-mode toggle. Vertical-only wheel input should still respect the
6711
6739
  // selected mode so high-resolution mouse wheels do not get stuck in the
@@ -6720,11 +6748,6 @@ window.MindMapInteractions = (function () {
6720
6748
  return;
6721
6749
  }
6722
6750
 
6723
- if (shouldZoomFromWheelEvent(module, e)) {
6724
- routeWheelEventToZoom(module, e);
6725
- return;
6726
- }
6727
-
6728
6751
  if (tryHandleScrollableWheelEvent(module, e)) {
6729
6752
  return;
6730
6753
  }
@@ -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-zoom-local-grid-lite-v685" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-zoom-local-grid-lite-v685" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260620-wheel-local-grid-v687" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-wheel-local-grid-v687" />
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-zoom-local-grid-lite-v685';
582
+ const scriptVersion = '20260620-wheel-local-grid-v687';
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": "m2eA1tax",
2
+ "version": "I0AXIJjK",
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-5uOvUmP/bBUruRKwPYeRMGSc+c3Rveqs6U7ndyiQjrE=",
81
+ "hash": "sha256-8p7OvkuyBw73fQofCagjgfFiJjChW3CNNjVXLPnB4gI=",
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-c0nFUsc/O05ivn6aNRxOmo8dsdxobdI4tOJ2zWueQmA=",
109
+ "hash": "sha256-CNFAbroIc1sRloZZTfPr2wr6PWnPsklh0E6wdI6VFM8=",
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-QgNQBZwjpGf0YLj7chbJtEILZGBPVgczuWESdif4sMk=",
837
+ "hash": "sha256-nh71RuG23un6F40UEbFST44+bBlneJzI8Iq89UahHPQ=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: m2eA1tax */
1
+ /* Manifest version: I0AXIJjK */
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