@mindexec/cli 0.2.220 → 0.2.221

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.220",
3
+ "version": "0.2.221",
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 = '20260619-ultra-resident-camera-v666';
8
+ const MINDMAP_CORE_BUILD_ID = '20260619-motion-hidden-work-v668';
9
9
  const CanvasPhase = Object.freeze({
10
10
  Booting: 'booting',
11
11
  BoardFileLoading: 'board-file-loading',
@@ -445,6 +445,21 @@
445
445
  return mode === 'continuous';
446
446
  }
447
447
 
448
+ function canUseWebglCanvasTransformForCameraMotion(module) {
449
+ if (CAMERA_MOTION_WEBGL_CANVAS_TRANSFORM_ENABLED !== true) {
450
+ return false;
451
+ }
452
+
453
+ // Static backgrounds can move as a single viewport surface. Continuous
454
+ // themes need real animation frames during interaction; freezing the
455
+ // last WebGL canvas makes particle themes look like they are skipping.
456
+ if (isContinuousBackgroundTheme(module) === true) {
457
+ return false;
458
+ }
459
+
460
+ return true;
461
+ }
462
+
448
463
  function deferContinuousThemeForCameraMotion(module) {
449
464
  if (!isContinuousBackgroundTheme(module)) {
450
465
  return false;
@@ -738,6 +753,15 @@
738
753
  };
739
754
  }
740
755
 
756
+ const cachedContainerWidth = Math.max(0, Number(module?._lastContainerWidth || 0));
757
+ const cachedContainerHeight = Math.max(0, Number(module?._lastContainerHeight || 0));
758
+ if (cachedContainerWidth > 0 && cachedContainerHeight > 0) {
759
+ return {
760
+ width: cachedContainerWidth,
761
+ height: cachedContainerHeight
762
+ };
763
+ }
764
+
741
765
  return {
742
766
  width: Math.max(1, Number(module?.container?.clientWidth || 0)),
743
767
  height: Math.max(1, Number(module?.container?.clientHeight || 0))
@@ -1222,7 +1246,7 @@
1222
1246
  let usedWebglCanvasCameraTransform = false;
1223
1247
  if (isWebglRenderEnabled && module.renderer && module.scene && module.camera) {
1224
1248
  const canReuseWebglCanvas = !!(
1225
- CAMERA_MOTION_WEBGL_CANVAS_TRANSFORM_ENABLED === true &&
1249
+ canUseWebglCanvasTransformForCameraMotion(module) === true &&
1226
1250
  module._lastWebglRenderedCameraState &&
1227
1251
  module.renderer?.domElement
1228
1252
  );
@@ -1353,10 +1377,7 @@
1353
1377
  isCss3dEnabled === true &&
1354
1378
  module.cssRenderer &&
1355
1379
  typeof module.cssRenderer.renderCamera === 'function' &&
1356
- (
1357
- (module.lodRenderer._lodImageCssFallbackNodeIds?.size || 0) > 0 ||
1358
- (module.lodRenderer._lodTemplateCssNodeIds?.size || 0) > 0
1359
- )
1380
+ module.lodRenderer.hasCss3dLodCandidates?.() === true
1360
1381
  );
1361
1382
  if (isWebglRenderEnabled !== true && canRenderCss3dCamera !== true) {
1362
1383
  return false;
@@ -1444,7 +1465,7 @@
1444
1465
  let usedWebglCanvasCameraTransform = false;
1445
1466
  if (isWebglRenderEnabled === true && module.renderer && module.scene && module.camera) {
1446
1467
  const canReuseWebglCanvas = !!(
1447
- CAMERA_MOTION_WEBGL_CANVAS_TRANSFORM_ENABLED === true &&
1468
+ canUseWebglCanvasTransformForCameraMotion(module) === true &&
1448
1469
  module._lastWebglRenderedCameraState &&
1449
1470
  module.renderer?.domElement
1450
1471
  );
@@ -4829,8 +4850,11 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
4829
4850
  viewHeight = 2 * Math.tan(vfov / 2) * Math.max(1, cameraZ);
4830
4851
  viewWidth = viewHeight * Math.max(0.1, Number(camera.aspect || 1));
4831
4852
 
4832
- const worldPerPxX = viewWidth / Math.max(1, this.container.clientWidth);
4833
- const worldPerPxY = viewHeight / Math.max(1, this.container.clientHeight);
4853
+ const viewportMetrics = getCachedViewportMetrics(this);
4854
+ const viewportWidth = Math.max(1, Number(viewportMetrics.width || 1));
4855
+ const viewportHeight = Math.max(1, Number(viewportMetrics.height || 1));
4856
+ const worldPerPxX = viewWidth / viewportWidth;
4857
+ const worldPerPxY = viewHeight / viewportHeight;
4834
4858
  const rawMarginWorld = cullingMarginPx * Math.max(worldPerPxX, worldPerPxY);
4835
4859
  const cellSize = this.GRID_CELL_SIZE || 500;
4836
4860
  marginWorld = Math.min(rawMarginWorld, cellSize * maxMarginCells);
@@ -5410,7 +5434,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
5410
5434
 
5411
5435
  if (this.isZooming && !isCameraMoving && timeSinceLastInput > ZOOM_END_DELAY_MS) {
5412
5436
  this.isZooming = false;
5413
- document.body.classList.remove('is-zooming');
5437
+ document.body?.classList?.remove?.('is-zooming');
5414
5438
  this.cssRenderer?.domElement?.classList?.remove?.('is-zooming');
5415
5439
  if (FRAME_PERF_DEBUG) {
5416
5440
  console.log(`[Perf] Zoom ended (${timeSinceLastInput.toFixed(0)}ms since last input)`);
@@ -5782,7 +5806,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
5782
5806
 
5783
5807
  updateCursorDomElement(this);
5784
5808
  const canReuseWebglCanvasForImmediateMotion = !!(
5785
- CAMERA_MOTION_WEBGL_CANVAS_TRANSFORM_ENABLED === true &&
5809
+ canUseWebglCanvasTransformForCameraMotion(this) === true &&
5786
5810
  renderDebugFlags.enableWebglRender !== false &&
5787
5811
  this._lastWebglRenderedCameraState &&
5788
5812
  this.renderer?.domElement
@@ -5961,7 +5985,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
5961
5985
 
5962
5986
  updateCursorDomElement(this);
5963
5987
  const canReuseWebglCanvasForStationaryMotion = !!(
5964
- CAMERA_MOTION_WEBGL_CANVAS_TRANSFORM_ENABLED === true &&
5988
+ canUseWebglCanvasTransformForCameraMotion(this) === true &&
5965
5989
  isWebglRenderEnabled &&
5966
5990
  this._lastWebglRenderedCameraState &&
5967
5991
  this.renderer?.domElement
@@ -6104,7 +6128,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6104
6128
  isCss3dEnabled === true &&
6105
6129
  !!this.cssRenderer &&
6106
6130
  typeof this.cssRenderer.renderCamera === 'function' &&
6107
- this.lodRenderer?.shouldRenderCss3dInLod?.() === true
6131
+ this.lodRenderer?.hasCss3dLodCandidates?.() === true
6108
6132
  );
6109
6133
  const canUseUaResidentCameraOnlyFrame = CAMERA_MOTION_VISUAL_ONLY_FAST_PATH_ENABLED === true && !!(
6110
6134
  shouldPreferCameraOnlyMotionPipeline === true &&
@@ -6153,7 +6177,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6153
6177
 
6154
6178
  updateCursorDomElement(this);
6155
6179
  const canReuseWebglCanvasForResidentMotion = !!(
6156
- CAMERA_MOTION_WEBGL_CANVAS_TRANSFORM_ENABLED === true &&
6180
+ canUseWebglCanvasTransformForCameraMotion(this) === true &&
6157
6181
  isWebglRenderEnabled === true &&
6158
6182
  this._lastWebglRenderedCameraState &&
6159
6183
  this.renderer?.domElement
@@ -6298,11 +6322,13 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6298
6322
  const shouldPauseThemeForCameraNavigation =
6299
6323
  isContinuousTheme === true &&
6300
6324
  isCameraNavigationOnlyInteractiveFrame === true &&
6301
- this._forceThemeAnimationFrame !== true;
6325
+ this._forceThemeAnimationFrame !== true &&
6326
+ canUseWebglCanvasTransformForCameraMotion(this) === true;
6302
6327
  const allowContinuousThemeAnimationThisFrame =
6303
6328
  shouldPauseThemeForCameraNavigation === true
6304
6329
  ? false
6305
6330
  : (isContinuousTheme !== true ||
6331
+ (isContinuousTheme === true && isCameraNavigationOnlyInteractiveFrame === true) ||
6306
6332
  (isInteractiveFrame === true && !isCameraNavigationOnlyInteractiveFrame) ||
6307
6333
  (shouldUpdate === true && !isCameraNavigationOnlyInteractiveFrame) ||
6308
6334
  hasNonCameraNavigationForcedUpdate === true ||
@@ -6399,7 +6425,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6399
6425
  uaEarlyCameraOnly: true
6400
6426
  } : null;
6401
6427
  }
6402
- } else if (isWebglRenderEnabled) {
6428
+ } else if (isWebglRenderEnabled &&
6429
+ canUseWebglCanvasTransformForCameraMotion(this) === true) {
6403
6430
  usedWebglCanvasCameraTransformEarly =
6404
6431
  this._applyWebglCanvasCameraTransform() === true;
6405
6432
  this._webglCameraMotionDeferred = true;
@@ -6775,7 +6802,11 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6775
6802
  // ▼▼▼ [Perf] CSS3D 동기화/렌더 스로틀 (정지 프레임은 스킵) ▼▼▼
6776
6803
  const hasResidentCssMediaFallback =
6777
6804
  isLodModeActive === true &&
6778
- this.lodRenderer?.shouldRenderCss3dInLod?.() === true;
6805
+ (
6806
+ (this.isPanning === true || this.isZooming === true || isCameraMoving === true)
6807
+ ? this.lodRenderer?.hasCss3dLodCandidates?.() === true
6808
+ : this.lodRenderer?.shouldRenderCss3dInLod?.() === true
6809
+ );
6779
6810
  const shouldUpdateResidentCssMediaFallback =
6780
6811
  hasResidentCssMediaFallback === true &&
6781
6812
  (
@@ -6955,7 +6986,11 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
6955
6986
  );
6956
6987
 
6957
6988
  const isInLodMode = this.lodRenderer?.isInLODMode === true;
6958
- const shouldRenderCss3dInLod = isInLodMode && this.lodRenderer?.shouldRenderCss3dInLod?.() === true;
6989
+ const shouldRenderCss3dInLod = isInLodMode && (
6990
+ (this.isPanning === true || this.isZooming === true || isCameraMoving === true)
6991
+ ? this.lodRenderer?.hasCss3dLodCandidates?.() === true
6992
+ : this.lodRenderer?.shouldRenderCss3dInLod?.() === true
6993
+ );
6959
6994
  const shouldRenderPassiveDomTextOverlay =
6960
6995
  isPassiveDomOverlayRuntimeEnabled &&
6961
6996
  window.MindMapTextOverlayV2?.shouldRenderPassiveDomOverlays?.(this) === true;
@@ -7236,6 +7271,7 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
7236
7271
  const shouldUseWebglCanvasCameraTransformFrame = !!(
7237
7272
  isWebglRenderEnabled &&
7238
7273
  isCameraNavigationOnlyInteractiveFrame === true &&
7274
+ canUseWebglCanvasTransformForCameraMotion(this) === true &&
7239
7275
  shouldUpdate !== true &&
7240
7276
  themeAnimatedThisFrame !== true &&
7241
7277
  shouldUseAnimationCadenceForWebglFrame !== true &&
@@ -7283,7 +7319,8 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
7283
7319
  if (isPureCss3dCameraMotionFrame === true) {
7284
7320
  this._webglCameraMotionDeferred = true;
7285
7321
  }
7286
- if (isCameraNavigationOnlyInteractiveFrame === true) {
7322
+ if (isCameraNavigationOnlyInteractiveFrame === true &&
7323
+ canUseWebglCanvasTransformForCameraMotion(this) === true) {
7287
7324
  usedWebglCanvasCameraTransform = this._applyWebglCanvasCameraTransform() === true;
7288
7325
  } else {
7289
7326
  this._clearWebglCanvasCameraTransform();
@@ -7676,14 +7676,15 @@
7676
7676
 
7677
7677
  function isBusinessAutomationTooltipMotionSuppressed(options = {}) {
7678
7678
  const now = getBusinessAutomationTooltipNow();
7679
- const bodyClassList = document?.body?.classList;
7679
+ const css3dClassList = _module?.cssRenderer?.domElement?.classList ||
7680
+ document?.getElementById?.('css3d-dom-wrapper')?.classList;
7680
7681
  const explicitClickGraceActive = now < Number(businessAutomationTooltipState.explicitClickOpenUntil || 0);
7681
7682
  const ignoreCameraMotionSuppression = options.ignoreCameraMotionSuppression === true
7682
7683
  || explicitClickGraceActive;
7683
7684
  const cameraMotionActive = _module?.isPanning === true
7684
7685
  || _module?.isZooming === true
7685
- || bodyClassList?.contains?.('is-panning') === true
7686
- || bodyClassList?.contains?.('is-zooming') === true;
7686
+ || css3dClassList?.contains?.('is-panning') === true
7687
+ || css3dClassList?.contains?.('is-zooming') === true;
7687
7688
  const dragMotionActive = _module?.isDraggingNode === true
7688
7689
  || _module?.isDraggingMultipleNodes === true;
7689
7690
 
@@ -9785,6 +9786,12 @@
9785
9786
  return { width, height };
9786
9787
  }
9787
9788
 
9789
+ const containerWidth = Math.max(0, Number(module?._lastContainerWidth || 0));
9790
+ const containerHeight = Math.max(0, Number(module?._lastContainerHeight || 0));
9791
+ if (containerWidth > 0 && containerHeight > 0) {
9792
+ return { width: containerWidth, height: containerHeight };
9793
+ }
9794
+
9788
9795
  return {
9789
9796
  width: Math.max(1, Number(module?.container?.clientWidth || 0)),
9790
9797
  height: Math.max(1, Number(module?.container?.clientHeight || 0))
@@ -21337,6 +21344,8 @@
21337
21344
 
21338
21345
  function isCanvasMotionInteractionActive() {
21339
21346
  const body = document.body;
21347
+ const css3dClassList = _module?.cssRenderer?.domElement?.classList ||
21348
+ document?.getElementById?.('css3d-dom-wrapper')?.classList;
21340
21349
  const now = typeof performance !== 'undefined' && typeof performance.now === 'function'
21341
21350
  ? performance.now()
21342
21351
  : Date.now();
@@ -21346,8 +21355,9 @@
21346
21355
  || 0
21347
21356
  );
21348
21357
 
21349
- return body?.classList?.contains?.('is-zooming') === true
21350
- || body?.classList?.contains?.('is-panning') === true
21358
+ return css3dClassList?.contains?.('is-zooming') === true
21359
+ || css3dClassList?.contains?.('is-panning') === true
21360
+ || css3dClassList?.contains?.('is-dragging') === true
21351
21361
  || body?.classList?.contains?.('is-node-dragging') === true
21352
21362
  || body?.classList?.contains?.('mindcanvas-is-moving') === true
21353
21363
  || _module?.isZooming === true
@@ -25,15 +25,11 @@ window.MindMapInteractions = (function () {
25
25
  }
26
26
 
27
27
  function isBrowserSelectionLocked() {
28
- const body = document?.body;
29
28
  const css3dWrapper = document?.getElementById?.('css3d-dom-wrapper');
30
29
  return browserSelectionLockReasons.size > 0 ||
31
- body?.classList?.contains?.(BROWSER_SELECTION_LOCK_CLASS) === true ||
32
- body?.classList?.contains?.('is-node-dragging') === true ||
33
- body?.classList?.contains?.('is-panning') === true ||
34
- body?.classList?.contains?.('is-zooming') === true ||
35
30
  css3dWrapper?.classList?.contains?.('is-panning') === true ||
36
- css3dWrapper?.classList?.contains?.('is-zooming') === true;
31
+ css3dWrapper?.classList?.contains?.('is-zooming') === true ||
32
+ css3dWrapper?.classList?.contains?.('is-dragging') === true;
37
33
  }
38
34
 
39
35
  function handleBrowserSelectStart(event) {
@@ -4952,6 +4952,14 @@
4952
4952
  this._getActiveTemplateCssLodCount(this._module) > 0);
4953
4953
  }
4954
4954
 
4955
+ hasCss3dLodCandidates() {
4956
+ return this.isInLODMode === true &&
4957
+ (
4958
+ (this._lodImageCssFallbackNodeIds?.size || 0) > 0 ||
4959
+ (this._lodTemplateCssNodeIds?.size || 0) > 0
4960
+ );
4961
+ }
4962
+
4955
4963
  _getActiveTemplateCssLodCount(module = this._module) {
4956
4964
  if (this.isInLODMode !== true || !this._lodTemplateCssNodeIds || this._lodTemplateCssNodeIds.size === 0) {
4957
4965
  return 0;
@@ -1,5 +1,5 @@
1
1
  self.assetsManifest = {
2
- "version": "bumR5GL+",
2
+ "version": "3aMiQb+v",
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-VSYItZC2O/EiJA5r3szTUZT1I7ezshSbJySl4zSEbh0=",
81
+ "hash": "sha256-hJpRJ5O5QFjQ3bE0HHza1S8xmT9lc5hh1N15pIsdQiY=",
82
82
  "url": "_content/MindExecution.Shared/js/mind-map-core.js"
83
83
  },
84
84
  {
@@ -86,7 +86,7 @@
86
86
  "url": "_content/MindExecution.Shared/js/mind-map-core.js.backup"
87
87
  },
88
88
  {
89
- "hash": "sha256-c0RM7WmazgwTuEthS+JiPz+oNnTLRhoWYe/U5oPvZZw=",
89
+ "hash": "sha256-ie/IGvR2skZfq52M9F2BhanMZbOL9p84vuWvw8EvPFw=",
90
90
  "url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
91
91
  },
92
92
  {
@@ -106,7 +106,7 @@
106
106
  "url": "_content/MindExecution.Shared/js/mind-map-glow-shader.js"
107
107
  },
108
108
  {
109
- "hash": "sha256-imzQ/x03UGS7AKyGtloZzcQLml/ZzuNNP79JIaIbImQ=",
109
+ "hash": "sha256-wt0KmPRXo3aaKAC3Os0NDeUacjHxFu1XYUYA6OmtKw8=",
110
110
  "url": "_content/MindExecution.Shared/js/mind-map-interactions.js"
111
111
  },
112
112
  {
@@ -114,7 +114,7 @@
114
114
  "url": "_content/MindExecution.Shared/js/mind-map-lod-plan-worker.js"
115
115
  },
116
116
  {
117
- "hash": "sha256-h9HTvPZNICFKbsz4cykIIE6WY9z/IybCQ2MCKpELnIM=",
117
+ "hash": "sha256-CkbATXEMdPSeKddXjOucy20mJm9vY2Sbn4I8/uQiCeg=",
118
118
  "url": "_content/MindExecution.Shared/js/mind-map-lod-renderer.js"
119
119
  },
120
120
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: bumR5GL+ */
1
+ /* Manifest version: 3aMiQb+v */
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