@mindexec/cli 0.2.242 → 0.2.243

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.242",
3
+ "version": "0.2.243",
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-defer-css-transform-dirty-v689';
8
+ const MINDMAP_CORE_BUILD_ID = '20260620-wheel-analysis-grid-position-v690';
9
9
  const CanvasPhase = Object.freeze({
10
10
  Booting: 'booting',
11
11
  BoardFileLoading: 'board-file-loading',
@@ -1635,7 +1635,7 @@
1635
1635
  }
1636
1636
 
1637
1637
  module._syncMotionGridLayerForCameraNavigation?.(usedWebglCanvasCameraTransform);
1638
- module._syncLocalSnapGridLayer?.(true);
1638
+ module._syncLocalSnapGridPositionOnly?.(true);
1639
1639
  module.cssRenderer.renderCamera(module.camera);
1640
1640
 
1641
1641
  syncBusinessAutomationEdgesForCameraNavigation(module);
@@ -1855,7 +1855,7 @@
1855
1855
  }
1856
1856
 
1857
1857
  module._syncMotionGridLayerForCameraNavigation?.(usedWebglCanvasCameraTransform);
1858
- module._syncLocalSnapGridLayer?.(true);
1858
+ module._syncLocalSnapGridPositionOnly?.(true);
1859
1859
  if (canRenderCss3dCamera === true) {
1860
1860
  module.cssRenderer.renderCamera(module.camera);
1861
1861
  }
@@ -4082,6 +4082,52 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
4082
4082
  return true;
4083
4083
  }
4084
4084
 
4085
+ _syncLocalSnapGridPositionOnly(visible = true) {
4086
+ if (visible !== true || !this._isLocalSnapGridThemeEnabled()) {
4087
+ this._setLocalSnapGridVisible(false);
4088
+ return false;
4089
+ }
4090
+
4091
+ if (!this.container) {
4092
+ this._setLocalSnapGridVisible(false);
4093
+ return false;
4094
+ }
4095
+
4096
+ if (!this._localSnapGridLayer?.isConnected || !this._lastLocalSnapGridKey) {
4097
+ return this._syncLocalSnapGridLayer(visible);
4098
+ }
4099
+
4100
+ const layer = this._localSnapGridLayer;
4101
+ const viewportMetrics = getCachedViewportMetrics(this);
4102
+ const width = Math.max(1, Number(viewportMetrics.width || 0));
4103
+ const height = Math.max(1, Number(viewportMetrics.height || 0));
4104
+ const left = Number(viewportMetrics.left || 0);
4105
+ const top = Number(viewportMetrics.top || 0);
4106
+ const hasPointer =
4107
+ Number.isFinite(Number(this._lastSnapGridClientX)) &&
4108
+ Number.isFinite(Number(this._lastSnapGridClientY));
4109
+ const centerX = hasPointer
4110
+ ? Math.max(0, Math.min(width, Number(this._lastSnapGridClientX) - left))
4111
+ : width / 2;
4112
+ const centerY = hasPointer
4113
+ ? Math.max(0, Math.min(height, Number(this._lastSnapGridClientY) - top))
4114
+ : height / 2;
4115
+ const layerLeft = centerX - LOCAL_SNAP_GRID_RADIUS_PX;
4116
+ const layerTop = centerY - LOCAL_SNAP_GRID_RADIUS_PX;
4117
+ const transformKey = `${Math.round(layerLeft * 2)}|${Math.round(layerTop * 2)}`;
4118
+
4119
+ if (transformKey !== this._lastLocalSnapGridTransformKey) {
4120
+ this._lastLocalSnapGridTransformKey = transformKey;
4121
+ layer.style.transform = `translate3d(${layerLeft.toFixed(2)}px, ${layerTop.toFixed(2)}px, 0)`;
4122
+ }
4123
+
4124
+ if (this.isZooming === true) {
4125
+ this._localSnapGridStyleDeferredForZoom = true;
4126
+ }
4127
+ this._setLocalSnapGridVisible(true, this._lastLocalSnapGridOpacity || null);
4128
+ return true;
4129
+ }
4130
+
4085
4131
  _ensureMotionGridLayer() {
4086
4132
  if (!this.container) {
4087
4133
  return null;
@@ -6538,6 +6584,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6538
6584
  }
6539
6585
  }
6540
6586
  this._syncMotionGridLayerForCameraNavigation(usedWebglCanvasCameraTransformImmediate);
6587
+ this._syncLocalSnapGridPositionOnly(true);
6541
6588
 
6542
6589
  this.cssRenderer.renderCamera(this.camera);
6543
6590
  const shouldSyncPassiveOverlayTransformDuringMotion =
@@ -6704,6 +6751,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6704
6751
  }
6705
6752
  }
6706
6753
  this._syncMotionGridLayerForCameraNavigation(usedWebglCanvasCameraTransformStationary);
6754
+ this._syncLocalSnapGridPositionOnly(true);
6707
6755
  if (this.cssRenderer && typeof this.cssRenderer.renderCamera === 'function') {
6708
6756
  this.cssRenderer.renderCamera(this.camera);
6709
6757
  }
@@ -6885,6 +6933,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6885
6933
  }
6886
6934
  }
6887
6935
 
6936
+ this._syncLocalSnapGridPositionOnly(true);
6888
6937
  if (shouldRenderCss3dInLodForUaResidentCameraOnly === true) {
6889
6938
  this.cssRenderer.renderCamera(this.camera);
6890
6939
  }
@@ -6098,25 +6098,45 @@ window.MindMapInteractions = (function () {
6098
6098
  return Math.max(-WHEEL_ZOOM_MAX_STEP, Math.min(step, WHEEL_ZOOM_MAX_STEP));
6099
6099
  }
6100
6100
 
6101
+ const PLATFORM_LABEL = String(
6102
+ globalThis.navigator?.userAgentData?.platform
6103
+ || globalThis.navigator?.platform
6104
+ || ''
6105
+ );
6106
+ const IS_MAC_LIKE_PLATFORM = /mac|iphone|ipad|ipod/i.test(PLATFORM_LABEL);
6107
+
6101
6108
  function getPlatformLabel() {
6102
6109
  return String(
6103
- globalThis.navigator?.userAgentData?.platform
6104
- || globalThis.navigator?.platform
6105
- || ''
6110
+ PLATFORM_LABEL
6106
6111
  );
6107
6112
  }
6108
6113
 
6109
6114
  function isMacLikePlatform() {
6110
- return /mac|iphone|ipad|ipod/i.test(getPlatformLabel());
6115
+ return IS_MAC_LIKE_PLATFORM;
6111
6116
  }
6112
6117
 
6113
- function isTrackpadLikeWheelEvent(e) {
6114
- if (!e || e.deltaMode !== 0) {
6115
- return false;
6118
+ function getWheelEventAnalysis(module, e) {
6119
+ if (!e) {
6120
+ return {
6121
+ deltaX: 0,
6122
+ deltaY: 0,
6123
+ isTrackpadLike: false,
6124
+ isTrackpadPinch: false,
6125
+ isSyntheticTrackpadPinch: false,
6126
+ isWheelActionModifierActive: false,
6127
+ shouldHandleTrackpadPanSeparately: false
6128
+ };
6129
+ }
6130
+
6131
+ const cached = e.__mindMapWheelAnalysis;
6132
+ if (cached && cached.module === module) {
6133
+ return cached;
6116
6134
  }
6117
6135
 
6118
- const absDeltaX = Math.abs(normalizeWheelDeltaX(e));
6119
- const absDeltaY = Math.abs(normalizeWheelDeltaY(e));
6136
+ const deltaX = normalizeWheelDeltaX(e);
6137
+ const deltaY = normalizeWheelDeltaY(e);
6138
+ const absDeltaX = Math.abs(deltaX);
6139
+ const absDeltaY = Math.abs(deltaY);
6120
6140
  const hasFractionalDelta = !Number.isInteger(absDeltaX) || !Number.isInteger(absDeltaY);
6121
6141
  const hasHorizontalDelta = absDeltaX > 0.01;
6122
6142
  const isSmallStep = absDeltaY > 0 && absDeltaY <= TRACKPAD_PIXEL_DELTA_MAX;
@@ -6125,16 +6145,57 @@ window.MindMapInteractions = (function () {
6125
6145
  Number.isInteger(absDeltaY) &&
6126
6146
  webkitWheelDeltaY >= 120 &&
6127
6147
  webkitWheelDeltaY % 120 === 0;
6148
+ const isTrackpadLike = !!(
6149
+ e.deltaMode === 0 &&
6150
+ looksLikeStepWheel !== true &&
6151
+ (hasFractionalDelta || hasHorizontalDelta || (IS_MAC_LIKE_PLATFORM && isSmallStep))
6152
+ );
6153
+ const isTrackpadPinch = e.ctrlKey === true && isTrackpadLike;
6154
+ const isWheelActionModifier = IS_MAC_LIKE_PLATFORM
6155
+ ? e.metaKey === true || e.ctrlKey === true
6156
+ : e.ctrlKey === true;
6157
+ const isSyntheticTrackpadPinch = isTrackpadPinch && !isPhysicalWheelActionModifierActive(module);
6158
+ const shouldHandleTrackpadPanSeparately = !IS_MAC_LIKE_PLATFORM &&
6159
+ !isTrackpadPinch &&
6160
+ !isWheelActionModifier &&
6161
+ isTrackpadLike &&
6162
+ absDeltaX > 0.75;
6128
6163
 
6129
- if (looksLikeStepWheel) {
6164
+ const analysis = {
6165
+ module,
6166
+ deltaX,
6167
+ deltaY,
6168
+ absDeltaX,
6169
+ absDeltaY,
6170
+ isTrackpadLike,
6171
+ isTrackpadPinch,
6172
+ isSyntheticTrackpadPinch,
6173
+ isWheelActionModifierActive: isWheelActionModifier,
6174
+ shouldHandleTrackpadPanSeparately
6175
+ };
6176
+
6177
+ try {
6178
+ Object.defineProperty(e, '__mindMapWheelAnalysis', {
6179
+ configurable: true,
6180
+ value: analysis
6181
+ });
6182
+ } catch {
6183
+ e.__mindMapWheelAnalysis = analysis;
6184
+ }
6185
+
6186
+ return analysis;
6187
+ }
6188
+
6189
+ function isTrackpadLikeWheelEvent(e) {
6190
+ if (!e || e.deltaMode !== 0) {
6130
6191
  return false;
6131
6192
  }
6132
6193
 
6133
- return hasFractionalDelta || hasHorizontalDelta || (isMacLikePlatform() && isSmallStep);
6194
+ return getWheelEventAnalysis(null, e).isTrackpadLike === true;
6134
6195
  }
6135
6196
 
6136
6197
  function isTrackpadPinchGesture(e) {
6137
- return e?.ctrlKey === true && isTrackpadLikeWheelEvent(e);
6198
+ return getWheelEventAnalysis(null, e).isTrackpadPinch === true;
6138
6199
  }
6139
6200
 
6140
6201
  function isPhysicalWheelActionModifierActive(module) {
@@ -6142,7 +6203,7 @@ window.MindMapInteractions = (function () {
6142
6203
  }
6143
6204
 
6144
6205
  function isSyntheticTrackpadPinchGesture(module, e) {
6145
- return isTrackpadPinchGesture(e) && !isPhysicalWheelActionModifierActive(module);
6206
+ return getWheelEventAnalysis(module, e).isSyntheticTrackpadPinch === true;
6146
6207
  }
6147
6208
 
6148
6209
  function isWheelActionModifierActive(e) {
@@ -6150,26 +6211,11 @@ window.MindMapInteractions = (function () {
6150
6211
  return false;
6151
6212
  }
6152
6213
 
6153
- return isMacLikePlatform()
6154
- ? e.metaKey === true || e.ctrlKey === true
6155
- : e.ctrlKey === true;
6214
+ return getWheelEventAnalysis(null, e).isWheelActionModifierActive === true;
6156
6215
  }
6157
6216
 
6158
- function shouldHandleTrackpadPanSeparately(e) {
6159
- if (isMacLikePlatform()) {
6160
- return false;
6161
- }
6162
-
6163
- const absDeltaX = Math.abs(normalizeWheelDeltaX(e));
6164
-
6165
- // On some Windows laptops, external/high-resolution mouse wheels can emit
6166
- // pixel-mode fractional deltas and get misclassified as trackpad-like.
6167
- // Reserve the direct-pan bypass for clear two-axis gestures instead so
6168
- // regular vertical wheel input continues to respect the wheel-mode toggle.
6169
- return !isTrackpadPinchGesture(e) &&
6170
- !isWheelActionModifierActive(e) &&
6171
- isTrackpadLikeWheelEvent(e) &&
6172
- absDeltaX > 0.75;
6217
+ function shouldHandleTrackpadPanSeparately(e, analysis = null) {
6218
+ return (analysis || getWheelEventAnalysis(null, e)).shouldHandleTrackpadPanSeparately === true;
6173
6219
  }
6174
6220
 
6175
6221
  function isWheelZoomModifierActive(e) {
@@ -6239,19 +6285,20 @@ window.MindMapInteractions = (function () {
6239
6285
  }
6240
6286
  }
6241
6287
 
6242
- function routeTrackpadWheelToPan(module, e) {
6288
+ function routeTrackpadWheelToPan(module, e, analysis = null) {
6243
6289
  if (!module || !e) {
6244
6290
  return;
6245
6291
  }
6246
6292
 
6293
+ const wheelAnalysis = analysis || getWheelEventAnalysis(module, e);
6247
6294
  e.preventDefault();
6248
6295
  e.stopPropagation();
6249
- applyTrackpadPanDelta(module, normalizeWheelDeltaX(e), normalizeWheelDeltaY(e));
6296
+ applyTrackpadPanDelta(module, wheelAnalysis.deltaX, wheelAnalysis.deltaY);
6250
6297
  }
6251
6298
 
6252
- function bufferWheelEvent(module, e) {
6299
+ function bufferWheelEvent(module, e, analysis = null) {
6253
6300
  const wheelBuffer = getWheelBuffer(module);
6254
- const deltaY = normalizeWheelDeltaY(e);
6301
+ const deltaY = Number((analysis || getWheelEventAnalysis(module, e)).deltaY || 0);
6255
6302
  if (deltaY === 0) {
6256
6303
  return;
6257
6304
  }
@@ -6264,9 +6311,9 @@ window.MindMapInteractions = (function () {
6264
6311
  performCameraZoomBuffered(module, deltaY, e.clientX, e.clientY);
6265
6312
  }
6266
6313
 
6267
- function bufferSteppedWheelZoomEvent(module, e) {
6314
+ function bufferSteppedWheelZoomEvent(module, e, analysis = null) {
6268
6315
  const wheelBuffer = getWheelBuffer(module);
6269
- const normalizedDeltaY = normalizeWheelDeltaY(e);
6316
+ const normalizedDeltaY = Number((analysis || getWheelEventAnalysis(module, e)).deltaY || 0);
6270
6317
  const notchDeltaY = e?.deltaMode === 0
6271
6318
  ? normalizedDeltaY
6272
6319
  : Math.sign(normalizedDeltaY) * WHEEL_ZOOM_NOTCH_DELTA;
@@ -6428,33 +6475,39 @@ window.MindMapInteractions = (function () {
6428
6475
  return true;
6429
6476
  }
6430
6477
 
6431
- function routeWheelEventToZoom(module, e) {
6478
+ function routeWheelEventToZoom(module, e, analysis = null) {
6432
6479
  if (!module || !e) {
6433
6480
  return;
6434
6481
  }
6435
6482
 
6436
6483
  e.preventDefault();
6437
6484
  e.stopPropagation();
6438
- if (isTrackpadPinchGesture(e)) {
6439
- bufferWheelEvent(module, e);
6485
+ const wheelAnalysis = analysis || getWheelEventAnalysis(module, e);
6486
+ if (wheelAnalysis.isTrackpadPinch === true) {
6487
+ bufferWheelEvent(module, e, wheelAnalysis);
6440
6488
  return;
6441
6489
  }
6442
6490
 
6443
- bufferSteppedWheelZoomEvent(module, e);
6491
+ bufferSteppedWheelZoomEvent(module, e, wheelAnalysis);
6444
6492
  }
6445
6493
 
6446
6494
  function isWheelZoomControlSwapEnabled(module) {
6447
6495
  return module?.swapWheelZoomControls === true;
6448
6496
  }
6449
6497
 
6450
- function shouldZoomFromWheelEvent(module, e) {
6498
+ function shouldZoomFromWheelEvent(module, e, analysis = null) {
6451
6499
  if (!e) {
6452
6500
  return false;
6453
6501
  }
6454
6502
 
6503
+ const wheelAnalysis = analysis || getWheelEventAnalysis(module, e);
6504
+ if (wheelAnalysis.isSyntheticTrackpadPinch === true) {
6505
+ return true;
6506
+ }
6507
+
6455
6508
  return isWheelZoomControlSwapEnabled(module)
6456
- ? isWheelZoomModifierActive(e)
6457
- : !isWheelZoomModifierActive(e);
6509
+ ? wheelAnalysis.isWheelActionModifierActive === true
6510
+ : wheelAnalysis.isWheelActionModifierActive !== true;
6458
6511
  }
6459
6512
 
6460
6513
  function toggleWheelZoomControls(module) {
@@ -6669,9 +6722,10 @@ window.MindMapInteractions = (function () {
6669
6722
  const wheelNow = typeof performance !== 'undefined' && typeof performance.now === 'function'
6670
6723
  ? performance.now()
6671
6724
  : Date.now();
6725
+ const wheelAnalysis = getWheelEventAnalysis(module, e);
6672
6726
  const shouldRouteWheelToZoom =
6673
- isSyntheticTrackpadPinchGesture(module, e) ||
6674
- shouldZoomFromWheelEvent(module, e);
6727
+ wheelAnalysis.isSyntheticTrackpadPinch === true ||
6728
+ shouldZoomFromWheelEvent(module, e, wheelAnalysis);
6675
6729
 
6676
6730
  if (shouldRouteWheelToZoom) {
6677
6731
  module._lastCanvasWheelAt = wheelNow;
@@ -6699,7 +6753,7 @@ window.MindMapInteractions = (function () {
6699
6753
  return;
6700
6754
  }
6701
6755
 
6702
- routeWheelEventToZoom(module, e);
6756
+ routeWheelEventToZoom(module, e, wheelAnalysis);
6703
6757
  return;
6704
6758
  }
6705
6759
 
@@ -6739,12 +6793,12 @@ window.MindMapInteractions = (function () {
6739
6793
  // selected mode so high-resolution mouse wheels do not get stuck in the
6740
6794
  // trackpad path. On macOS, two-finger movement follows the wheel mode
6741
6795
  // toggle while pinch still zooms.
6742
- if (shouldHandleTrackpadPanSeparately(e)) {
6796
+ if (shouldHandleTrackpadPanSeparately(e, wheelAnalysis)) {
6743
6797
  if (tryHandleScrollableWheelEvent(module, e, { fallbackToTrackpadPan: true })) {
6744
6798
  return;
6745
6799
  }
6746
6800
 
6747
- routeTrackpadWheelToPan(module, e);
6801
+ routeTrackpadWheelToPan(module, e, wheelAnalysis);
6748
6802
  return;
6749
6803
  }
6750
6804
 
@@ -6782,7 +6836,8 @@ window.MindMapInteractions = (function () {
6782
6836
  return false;
6783
6837
  }
6784
6838
 
6785
- return isSyntheticTrackpadPinchGesture(module, e) || shouldZoomFromWheelEvent(module, e);
6839
+ const wheelAnalysis = getWheelEventAnalysis(module, e);
6840
+ return wheelAnalysis.isSyntheticTrackpadPinch === true || shouldZoomFromWheelEvent(module, e, wheelAnalysis);
6786
6841
  }
6787
6842
 
6788
6843
  function getGestureClientPoint(module, e) {
@@ -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-defer-css-transform-dirty-v689" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-defer-css-transform-dirty-v689" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260620-wheel-analysis-grid-position-v690" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-wheel-analysis-grid-position-v690" />
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-defer-css-transform-dirty-v689';
582
+ const scriptVersion = '20260620-wheel-analysis-grid-position-v690';
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": "VQRLUARv",
2
+ "version": "IbslOykt",
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-72sIz6xxBjFPWDJDQdIG0fx7b5bs3L8NLzxIRBDPYGQ=",
81
+ "hash": "sha256-S+rtBK3WnUdRZH9HXm/ATEmpmi40IN1MczkGqNAqaOs=",
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-CNFAbroIc1sRloZZTfPr2wr6PWnPsklh0E6wdI6VFM8=",
109
+ "hash": "sha256-GjdoWt5yAo2TwVMIWucHvHnXrpWproSpGT6fc3C/vVo=",
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-ZroDjWgVjKhZ/W/V51zAsNMu5PZzgzIKjeQ9y4FxQ4U=",
837
+ "hash": "sha256-QMxtPsuaGm+kaUyj86PQzeRyhn/89TaTw3nGO6pKSIY=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: VQRLUARv */
1
+ /* Manifest version: IbslOykt */
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