@mindexec/cli 0.2.232 → 0.2.234

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.232",
3
+ "version": "0.2.234",
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-snap-grid-v679';
8
+ const MINDMAP_CORE_BUILD_ID = '20260620-wheel-zoom-hotpath-v681';
9
9
  const CanvasPhase = Object.freeze({
10
10
  Booting: 'booting',
11
11
  BoardFileLoading: 'board-file-loading',
@@ -346,7 +346,10 @@
346
346
  }
347
347
 
348
348
  module._lastCursorDomPositionKey = positionKey;
349
- element.style.display = visible ? 'block' : 'none';
349
+ if (module._lastCursorDomVisible !== visible) {
350
+ module._lastCursorDomVisible = visible;
351
+ element.style.display = visible ? 'block' : 'none';
352
+ }
350
353
  if (visible) {
351
354
  element.style.transform = `translate3d(${x.toFixed(2)}px, ${y.toFixed(2)}px, 0)`;
352
355
  }
@@ -513,13 +516,26 @@
513
516
  }
514
517
 
515
518
  function syncBusinessAutomationEdgesForCameraNavigation(module, options = {}) {
516
- if (!hasBusinessAutomationEdgeLayer(module) || !window.MindMapCss3DManager) {
519
+ const hasActiveEdges = module?._businessAutomationEdgeRenderActive === true;
520
+ if (hasActiveEdges !== true && options.allowDraftRender !== true) {
521
+ return false;
522
+ }
523
+
524
+ if (!window.MindMapCss3DManager) {
517
525
  return false;
518
526
  }
519
527
 
520
528
  const hasConnectionDraft =
529
+ options.allowDraftRender === true &&
521
530
  window.MindMapCss3DManager.hasBusinessAutomationConnectionDraft?.() === true;
522
- const hasActiveEdges = module?._businessAutomationEdgeRenderActive === true;
531
+ if (hasActiveEdges !== true && hasConnectionDraft !== true) {
532
+ return false;
533
+ }
534
+
535
+ if (hasActiveEdges === true && !hasBusinessAutomationEdgeLayer(module)) {
536
+ return false;
537
+ }
538
+
523
539
  const canTransformExistingEdges = !!(
524
540
  hasActiveEdges === true &&
525
541
  hasConnectionDraft !== true &&
@@ -829,7 +845,10 @@
829
845
  if (cachedWidth > 0 && cachedHeight > 0) {
830
846
  return {
831
847
  width: cachedWidth,
832
- height: cachedHeight
848
+ height: cachedHeight,
849
+ left: Number(module?._lastViewportLeft || 0),
850
+ top: Number(module?._lastViewportTop || 0),
851
+ dpr: Math.max(1, Number(module?._lastViewportDpr || window.devicePixelRatio || 1))
833
852
  };
834
853
  }
835
854
 
@@ -838,13 +857,19 @@
838
857
  if (cachedContainerWidth > 0 && cachedContainerHeight > 0) {
839
858
  return {
840
859
  width: cachedContainerWidth,
841
- height: cachedContainerHeight
860
+ height: cachedContainerHeight,
861
+ left: Number(module?._lastViewportLeft || 0),
862
+ top: Number(module?._lastViewportTop || 0),
863
+ dpr: Math.max(1, Number(module?._lastViewportDpr || window.devicePixelRatio || 1))
842
864
  };
843
865
  }
844
866
 
845
867
  return {
846
868
  width: Math.max(1, Number(module?.container?.clientWidth || 0)),
847
- height: Math.max(1, Number(module?.container?.clientHeight || 0))
869
+ height: Math.max(1, Number(module?.container?.clientHeight || 0)),
870
+ left: 0,
871
+ top: 0,
872
+ dpr: Math.max(1, Number(window.devicePixelRatio || 1))
848
873
  };
849
874
  }
850
875
 
@@ -3520,7 +3545,6 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
3520
3545
 
3521
3546
  // ▼▼▼ [Perf] Flag to track zoom state for CSS3D optimization ▼▼▼
3522
3547
  this.isZooming = false;
3523
- this._zoomEndTimer = null;
3524
3548
  // ▲▲▲ [Perf] ▲▲▲
3525
3549
 
3526
3550
  // ▼▼▼ [Core addition] Multi-selection and spatial grid initialization ▼▼▼
@@ -3606,6 +3630,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
3606
3630
  this._localSnapGridVisible = false;
3607
3631
  this._lastLocalSnapGridKey = '';
3608
3632
  this._lastLocalSnapGridTransformKey = '';
3633
+ this._lastLocalSnapGridOpacity = '';
3609
3634
  this._lastSnapGridClientX = null;
3610
3635
  this._lastSnapGridClientY = null;
3611
3636
  this._animationIdleTimerId = null;
@@ -3725,24 +3750,28 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
3725
3750
  this._localSnapGridLayer = layer;
3726
3751
  this._lastLocalSnapGridKey = '';
3727
3752
  this._lastLocalSnapGridTransformKey = '';
3753
+ this._lastLocalSnapGridOpacity = '';
3728
3754
  return layer;
3729
3755
  }
3730
3756
 
3731
- _setLocalSnapGridVisible(visible) {
3757
+ _setLocalSnapGridVisible(visible, targetOpacity = null) {
3732
3758
  const layer = this._localSnapGridLayer;
3733
3759
  if (!layer) {
3734
3760
  return;
3735
3761
  }
3736
3762
 
3737
3763
  if (visible === true) {
3764
+ const opacityValue = targetOpacity == null
3765
+ ? this._lastLocalSnapGridOpacity
3766
+ : String(targetOpacity);
3738
3767
  if (this._localSnapGridVisible !== true) {
3739
3768
  this._localSnapGridVisible = true;
3740
3769
  if (layer.style.display !== 'block') {
3741
3770
  layer.style.display = 'block';
3742
3771
  }
3743
3772
  }
3744
- if (layer.style.opacity !== '1') {
3745
- layer.style.opacity = '1';
3773
+ if (opacityValue && layer.style.opacity !== opacityValue) {
3774
+ layer.style.opacity = opacityValue;
3746
3775
  }
3747
3776
  return;
3748
3777
  }
@@ -3827,6 +3856,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
3827
3856
 
3828
3857
  if (localGridKey !== this._lastLocalSnapGridKey) {
3829
3858
  this._lastLocalSnapGridKey = localGridKey;
3859
+ const opacityValue = opacity.toFixed(3);
3860
+ this._lastLocalSnapGridOpacity = opacityValue;
3830
3861
  if (styleKind === 'dot') {
3831
3862
  layer.style.backgroundImage = [
3832
3863
  'radial-gradient(circle at 0 0, rgba(68, 78, 94, 0.34) 1px, transparent 1.55px)',
@@ -3846,7 +3877,9 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
3846
3877
  layer.style.backgroundPosition = styleKind === 'dot'
3847
3878
  ? '0 0, 0 0'
3848
3879
  : '0 0, 0 0, 0 0, 0 0';
3849
- layer.style.opacity = opacity.toFixed(3);
3880
+ if (layer.style.opacity !== opacityValue) {
3881
+ layer.style.opacity = opacityValue;
3882
+ }
3850
3883
  }
3851
3884
 
3852
3885
  const transformKey = `${Math.round(layerLeft * 2)}|${Math.round(layerTop * 2)}`;
@@ -3855,7 +3888,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
3855
3888
  layer.style.transform = `translate3d(${layerLeft.toFixed(2)}px, ${layerTop.toFixed(2)}px, 0)`;
3856
3889
  }
3857
3890
 
3858
- this._setLocalSnapGridVisible(true);
3891
+ this._setLocalSnapGridVisible(true, this._lastLocalSnapGridOpacity || opacity.toFixed(3));
3859
3892
  return true;
3860
3893
  }
3861
3894
 
@@ -6200,10 +6200,6 @@ window.MindMapInteractions = (function () {
6200
6200
  module.isZooming = false;
6201
6201
  clearZoomMotionChrome(module);
6202
6202
  clearMotionWillChangeEnable(module, { disableIfIdle: true });
6203
- if (module._zoomEndTimer) {
6204
- clearTimeout(module._zoomEndTimer);
6205
- module._zoomEndTimer = null;
6206
- }
6207
6203
  }
6208
6204
 
6209
6205
  function applyTrackpadPanDelta(module, deltaX, deltaY) {
@@ -6348,7 +6344,6 @@ window.MindMapInteractions = (function () {
6348
6344
  module._zoomInputTime = performance.now();
6349
6345
  // ▲▲▲ [Fix] ▲▲▲
6350
6346
  // Reset zoom fallback flag on new input
6351
- module._zoomFallbackExpired = false;
6352
6347
  // ▲▲▲ [Perf] ▲▲▲
6353
6348
 
6354
6349
  const viewportMetrics = getCachedViewportMetrics(module);
@@ -6400,15 +6395,6 @@ window.MindMapInteractions = (function () {
6400
6395
 
6401
6396
  // ▼▼▼ [Perf] 줌 종료 감지 및 CSS3D 업데이트 타이머 ▼▼▼
6402
6397
  // 기존 타이머 취소 (연속 스크롤 감지)
6403
- if (module._zoomEndTimer) {
6404
- clearTimeout(module._zoomEndTimer);
6405
- }
6406
-
6407
- // Fallback timer - main detection is in animate() loop when camera stops
6408
- module._zoomEndTimer = setTimeout(() => {
6409
- if (!module.isZooming) return; // Already handled by animate() loop
6410
- module._zoomFallbackExpired = true;
6411
- }, 150);
6412
6398
  // ▲▲▲ [Perf] ▲▲▲
6413
6399
 
6414
6400
  if (WHEEL_PERF_DEBUG) {
@@ -6703,13 +6689,15 @@ window.MindMapInteractions = (function () {
6703
6689
  return;
6704
6690
  }
6705
6691
 
6706
- notifyMindCanvasSurfaceInteraction('wheel');
6707
-
6708
6692
  const wheelNow = typeof performance !== 'undefined' && typeof performance.now === 'function'
6709
6693
  ? performance.now()
6710
6694
  : Date.now();
6711
6695
  module._lastCanvasWheelAt = wheelNow;
6712
6696
  window.__mindMapLastCanvasWheelAt = wheelNow;
6697
+ if ((wheelNow - Number(module._lastWheelSurfaceInteractionNotifyAt || 0)) >= 650) {
6698
+ module._lastWheelSurfaceInteractionNotifyAt = wheelNow;
6699
+ notifyMindCanvasSurfaceInteraction('wheel');
6700
+ }
6713
6701
 
6714
6702
  if (WHEEL_DEBUG) {
6715
6703
  if (!module._wheelDebug) {
@@ -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-snap-grid-v679" />
11
- <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-local-snap-grid-v679" />
10
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/app.css?v=20260620-wheel-zoom-hotpath-v681" />
11
+ <link rel="stylesheet" href="_content/MindExecution.Shared/css/mind-map-overrides.css?v=20260620-wheel-zoom-hotpath-v681" />
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-snap-grid-v679';
582
+ const scriptVersion = '20260620-wheel-zoom-hotpath-v681';
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": "ICqoIb6t",
2
+ "version": "FOi7IcPO",
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-SJbkOw5njRyQJ+hWZvh77QpYXbjgsQAkgsp2E7eIrjc=",
81
+ "hash": "sha256-HAcIKHR8GNq+hp/a1I7r69dToZn+z+Vu6zQ3zo+Sin8=",
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-c4m1kyotX9806YeHVrbh0M3lvEmn9kO8oyhZY8lD28M=",
109
+ "hash": "sha256-glU8Qi29dTeN+P17xuF+Nno5MLoR88v44leP9LrLAgw=",
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-vbtZ+Y2ONRk+P+CZYjw5DVWq8HXgqNBPqGjMIGw14zs=",
837
+ "hash": "sha256-nKh30c9Ax0h/31FBsTI98E174o6u1tGmWFlutqKFPeU=",
838
838
  "url": "index.html"
839
839
  },
840
840
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: ICqoIb6t */
1
+ /* Manifest version: FOi7IcPO */
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