@mindexec/cli 0.2.401 → 0.2.402
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
|
@@ -1456,7 +1456,7 @@
|
|
|
1456
1456
|
overlayLayoutChanged: moduleInstance._overlayDebugLayoutChanged === true,
|
|
1457
1457
|
overlayContentChanged: moduleInstance._overlayDebugContentChanged === true,
|
|
1458
1458
|
overlayForceRefresh: moduleInstance._overlayDebugForceRefresh === true,
|
|
1459
|
-
cameraMotionFastPathStatus: null,
|
|
1459
|
+
cameraMotionFastPathStatus: moduleInstance._lastImmediateCameraFeedbackStatus || null,
|
|
1460
1460
|
metricsSnapshotMs: Number(metricsSnapshotMs.toFixed(2)),
|
|
1461
1461
|
metricsSnapshotCached: false,
|
|
1462
1462
|
metricsSnapshotAgeMs: 0,
|
|
@@ -3162,6 +3162,10 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
3162
3162
|
this._ctrlWheelScrollInputTime = 0;
|
|
3163
3163
|
this._ctrlWheelScrollLastDeltaY = 0;
|
|
3164
3164
|
this._cameraNavigationOverlayInputTime = 0;
|
|
3165
|
+
this._lastImmediateCameraFeedbackStatus = null;
|
|
3166
|
+
this._immediateCameraFeedbackCount = 0;
|
|
3167
|
+
this._immediateCameraFeedbackCss3dCount = 0;
|
|
3168
|
+
this._immediateCameraFeedbackEdgeCount = 0;
|
|
3165
3169
|
// Match background-themes.js 'XYGrid' size1.
|
|
3166
3170
|
this.GRID_SIZE = 10;
|
|
3167
3171
|
// ?�▲??[Changed] ?�▲??
|
|
@@ -4102,6 +4106,115 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
4102
4106
|
}
|
|
4103
4107
|
}
|
|
4104
4108
|
|
|
4109
|
+
applyImmediateCameraNavigationFeedback(reason = 'camera-navigation-input') {
|
|
4110
|
+
const now = typeof performance !== 'undefined' && typeof performance.now === 'function'
|
|
4111
|
+
? performance.now()
|
|
4112
|
+
: Date.now();
|
|
4113
|
+
const status = {
|
|
4114
|
+
used: false,
|
|
4115
|
+
reason: String(reason || 'camera-navigation-input'),
|
|
4116
|
+
css3dCamera: false,
|
|
4117
|
+
automationEdges: false,
|
|
4118
|
+
motionGrid: false,
|
|
4119
|
+
localSnapGrid: false,
|
|
4120
|
+
skippedReason: '',
|
|
4121
|
+
count: Number(this._immediateCameraFeedbackCount || 0),
|
|
4122
|
+
updatedAt: now
|
|
4123
|
+
};
|
|
4124
|
+
|
|
4125
|
+
const finish = (skippedReason = '') => {
|
|
4126
|
+
status.skippedReason = skippedReason;
|
|
4127
|
+
this._lastImmediateCameraFeedbackStatus = status;
|
|
4128
|
+
return status.used === true;
|
|
4129
|
+
};
|
|
4130
|
+
|
|
4131
|
+
if (!this.camera || this._animationLoopExecuting === true || this.isLoading === true) {
|
|
4132
|
+
return finish('runtime-busy');
|
|
4133
|
+
}
|
|
4134
|
+
|
|
4135
|
+
const nextX = Number(this.targetX ?? this.camera.position.x);
|
|
4136
|
+
const nextY = Number(this.targetY ?? this.camera.position.y);
|
|
4137
|
+
const nextZ = Number(this.targetZ ?? this.camera.position.z);
|
|
4138
|
+
if (!Number.isFinite(nextX) || !Number.isFinite(nextY) || !Number.isFinite(nextZ)) {
|
|
4139
|
+
return finish('invalid-target');
|
|
4140
|
+
}
|
|
4141
|
+
|
|
4142
|
+
const currentX = Number(this.camera.position.x || 0);
|
|
4143
|
+
const currentY = Number(this.camera.position.y || 0);
|
|
4144
|
+
const currentZ = Number(this.camera.position.z || 0);
|
|
4145
|
+
if (Math.abs(nextX - currentX) < 0.001 &&
|
|
4146
|
+
Math.abs(nextY - currentY) < 0.001 &&
|
|
4147
|
+
Math.abs(nextZ - currentZ) < 0.001) {
|
|
4148
|
+
return finish('unchanged');
|
|
4149
|
+
}
|
|
4150
|
+
|
|
4151
|
+
this.camera.position.set(nextX, nextY, nextZ);
|
|
4152
|
+
this.camera.updateMatrixWorld(true);
|
|
4153
|
+
this._viewStatePersistAfterMotion = true;
|
|
4154
|
+
this._cameraMovingThisFrame = true;
|
|
4155
|
+
this._immediateCameraFeedbackCount = Number(this._immediateCameraFeedbackCount || 0) + 1;
|
|
4156
|
+
status.used = true;
|
|
4157
|
+
status.count = this._immediateCameraFeedbackCount;
|
|
4158
|
+
|
|
4159
|
+
const flags = this.renderDebugFlags || getRenderDebugFlagsSnapshot();
|
|
4160
|
+
const isCss3dEnabled = flags.enableCss3d !== false;
|
|
4161
|
+
const hasFocusedTextOverlay = !!(
|
|
4162
|
+
String(this._textOverlayV2State?.selectionNodeId || '').trim() ||
|
|
4163
|
+
String(this._selectableTextOverlayNodeId || '').trim()
|
|
4164
|
+
);
|
|
4165
|
+
const hasEditingOverlay = !!(
|
|
4166
|
+
String(this._textOverlayV2State?.editing?.nodeId || '').trim() ||
|
|
4167
|
+
String(this._editingOverlayState?.nodeId || '').trim() ||
|
|
4168
|
+
this.isEditingNote === true
|
|
4169
|
+
);
|
|
4170
|
+
const isNodeInteracting = !!(
|
|
4171
|
+
this.isDraggingNode ||
|
|
4172
|
+
this.isDraggingMultipleNodes ||
|
|
4173
|
+
this.isResizing ||
|
|
4174
|
+
this.isScrollbarDragging ||
|
|
4175
|
+
this.isSelecting
|
|
4176
|
+
);
|
|
4177
|
+
const hasCss3dDirtyTransforms = !!(
|
|
4178
|
+
this._cssParentRepairNeeded === true ||
|
|
4179
|
+
this._css3dVisualChangedThisFrame === true ||
|
|
4180
|
+
this._css3dVisualChangedSinceLastRender === true ||
|
|
4181
|
+
(this._cssTransformDirtyIds?.size || 0) > 0
|
|
4182
|
+
);
|
|
4183
|
+
const canRenderCss3dCamera = !!(
|
|
4184
|
+
this.cssRenderer &&
|
|
4185
|
+
typeof this.cssRenderer.renderCamera === 'function' &&
|
|
4186
|
+
isCss3dEnabled === true &&
|
|
4187
|
+
this.lodRenderer?.isInLODMode !== true &&
|
|
4188
|
+
!isNodeInteracting &&
|
|
4189
|
+
!hasFocusedTextOverlay &&
|
|
4190
|
+
!hasEditingOverlay &&
|
|
4191
|
+
!hasCss3dDirtyTransforms &&
|
|
4192
|
+
this.isWindowResizing !== true
|
|
4193
|
+
);
|
|
4194
|
+
|
|
4195
|
+
if (canRenderCss3dCamera === true) {
|
|
4196
|
+
this.cssRenderer.renderCamera(this.camera);
|
|
4197
|
+
this._immediateCameraFeedbackCss3dCount = Number(this._immediateCameraFeedbackCss3dCount || 0) + 1;
|
|
4198
|
+
status.css3dCamera = true;
|
|
4199
|
+
status.css3dCount = this._immediateCameraFeedbackCss3dCount;
|
|
4200
|
+
}
|
|
4201
|
+
|
|
4202
|
+
if (this._shouldTouchMotionGridLayerForCameraNavigation?.() === true) {
|
|
4203
|
+
status.motionGrid = this._syncMotionGridLayerForCameraNavigation?.() === true;
|
|
4204
|
+
}
|
|
4205
|
+
|
|
4206
|
+
status.localSnapGrid = syncLocalSnapGridForCameraNavigation(this, true) === true;
|
|
4207
|
+
|
|
4208
|
+
if (syncBusinessAutomationEdgesForCameraNavigation(this, true, false) === true) {
|
|
4209
|
+
this._immediateCameraFeedbackEdgeCount = Number(this._immediateCameraFeedbackEdgeCount || 0) + 1;
|
|
4210
|
+
status.automationEdges = true;
|
|
4211
|
+
status.edgeCount = this._immediateCameraFeedbackEdgeCount;
|
|
4212
|
+
}
|
|
4213
|
+
|
|
4214
|
+
this._lastImmediateCameraFeedbackStatus = status;
|
|
4215
|
+
return true;
|
|
4216
|
+
}
|
|
4217
|
+
|
|
4105
4218
|
getCurrentBoardId() {
|
|
4106
4219
|
return window.mindMap?.activeBoardId || _currentBoardId || null;
|
|
4107
4220
|
}
|
|
@@ -5892,16 +6005,15 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
5892
6005
|
const forceUpdateFrames = Math.max(0, Number(this._forceUpdateFrames || 0));
|
|
5893
6006
|
const panLiveRefreshForceFrames = Math.max(0, Number(this._panLiveRefreshForceFrames || 0));
|
|
5894
6007
|
const hasForcedUpdate = forceUpdateFrames > 0;
|
|
5895
|
-
//
|
|
5896
|
-
const
|
|
6008
|
+
// Camera navigation wake frames keep the render loop awake; they should not disable motion throttles.
|
|
6009
|
+
const hasOnlyCameraNavigationForcedUpdate =
|
|
5897
6010
|
hasForcedUpdate &&
|
|
5898
|
-
|
|
5899
|
-
this.isZooming
|
|
5900
|
-
|
|
5901
|
-
const hasNonPanForcedUpdate =
|
|
6011
|
+
panLiveRefreshForceFrames >= forceUpdateFrames &&
|
|
6012
|
+
(this.isPanning === true || this.isZooming === true || isCameraMoving === true);
|
|
6013
|
+
const hasNonCameraForcedUpdate =
|
|
5902
6014
|
hasForcedUpdate &&
|
|
5903
|
-
|
|
5904
|
-
const hasNonCameraNavigationForcedUpdate =
|
|
6015
|
+
hasOnlyCameraNavigationForcedUpdate !== true;
|
|
6016
|
+
const hasNonCameraNavigationForcedUpdate = hasNonCameraForcedUpdate;
|
|
5905
6017
|
const isLodModeActive = this.lodRenderer?.isInLODMode === true;
|
|
5906
6018
|
const residentDirty = isResidentMidFarLodFrame &&
|
|
5907
6019
|
this.lodRenderer?.hasResidentDirtyWork?.(this.camera, this) === true;
|
|
@@ -6687,15 +6799,22 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
6687
6799
|
|
|
6688
6800
|
_profileSection('webglRender');
|
|
6689
6801
|
// ?�▼??[FIX] LOD 모드(MID/FAR)?�서??CSS3D ?�더???�출 건너?�기 ?�▼?? // CSS3D가 모두 display:none?�어???�더?��? 813�?객체�??�회?�면???�간 ?�비
|
|
6802
|
+
const lastImmediateCameraFeedback = this._lastImmediateCameraFeedbackStatus || null;
|
|
6803
|
+
const lastImmediateCameraFeedbackAgeMs = frameStart - Number(lastImmediateCameraFeedback?.updatedAt || 0);
|
|
6804
|
+
const hasFreshImmediateCameraFeedback = !!(
|
|
6805
|
+
lastImmediateCameraFeedback?.used === true &&
|
|
6806
|
+
(this.isPanning === true || this.isZooming === true) &&
|
|
6807
|
+
lastImmediateCameraFeedbackAgeMs >= 0 &&
|
|
6808
|
+
lastImmediateCameraFeedbackAgeMs <= 120
|
|
6809
|
+
);
|
|
6690
6810
|
const canUseCss3dCameraFastPath = !!(
|
|
6691
6811
|
this.cssRenderer &&
|
|
6692
6812
|
typeof this.cssRenderer.renderCamera === 'function' &&
|
|
6693
6813
|
isCss3dEnabled &&
|
|
6694
6814
|
!isInLodMode &&
|
|
6695
6815
|
shouldUpdateCss3d &&
|
|
6696
|
-
this.isPanning === true &&
|
|
6697
|
-
|
|
6698
|
-
isCameraMoving === true &&
|
|
6816
|
+
(this.isPanning === true || this.isZooming === true || isCameraMoving === true) &&
|
|
6817
|
+
(isCameraMoving === true || hasFreshImmediateCameraFeedback === true) &&
|
|
6699
6818
|
!isNodeInteracting &&
|
|
6700
6819
|
!hasNonCameraNavigationForcedUpdate &&
|
|
6701
6820
|
!hasPendingNearCssWarmup &&
|
|
@@ -6948,9 +7067,11 @@ ${summaryLines.map(line => `<div>${escapeNodeFrameDebugHtml(line)}</div>`).join(
|
|
|
6948
7067
|
visibilityStableSkip: canSkipVisibilityCullingForStableFrame === true,
|
|
6949
7068
|
visibilitySkipReason: visibilityCullingSkipReason || this._lastVisibilityCullingSkipReason || '',
|
|
6950
7069
|
incrementalPanVisibility: isIncrementalPanVisibilityFrame === true,
|
|
7070
|
+
freshImmediateCameraFeedback: hasFreshImmediateCameraFeedback === true,
|
|
6951
7071
|
shouldSyncCss3dTransforms: shouldSyncCss3dTransforms === true,
|
|
6952
7072
|
shouldRenderCss3d: shouldRenderCss3dFrame === true,
|
|
6953
7073
|
usedCss3dCameraFastPath: canUseCss3dCameraFastPath === true,
|
|
7074
|
+
immediateCameraFeedback: this._lastImmediateCameraFeedbackStatus || null,
|
|
6954
7075
|
shouldSyncTextOverlays: shouldSyncTextOverlays === true,
|
|
6955
7076
|
usedPassiveOverlayCameraFastPath: usedPassiveOverlayCameraFastPath === true,
|
|
6956
7077
|
passiveOverlaySuppressed: isPassiveOverlaySuppressed === true,
|
|
@@ -5,7 +5,7 @@ window.MindMapInteractions = (function () {
|
|
|
5
5
|
const MOTION_DOM_FANOUT_DELAY_MS = 180;
|
|
6
6
|
const MOTION_DOM_FANOUT_ENABLED = false;
|
|
7
7
|
const MOTION_WILL_CHANGE_ENABLE_DELAY_MS = 240;
|
|
8
|
-
const WHEEL_ZOOM_TARGET_UPDATE_MODE = '
|
|
8
|
+
const WHEEL_ZOOM_TARGET_UPDATE_MODE = 'event-direct';
|
|
9
9
|
const PRIMARY_CLICK_DELAY_MS = 280;
|
|
10
10
|
const BACKGROUND_PRIMARY_CLICK_DELAY_MS = 320;
|
|
11
11
|
const eventHandlers = new WeakMap();
|
|
@@ -603,10 +603,34 @@ window.MindMapInteractions = (function () {
|
|
|
603
603
|
if (!module) {
|
|
604
604
|
return;
|
|
605
605
|
}
|
|
606
|
-
wakeCameraNavigationAnimation(module, 'pan-input');
|
|
606
|
+
wakeCameraNavigationAnimation(module, 'pan-input', { immediate: true, forceFrames: 2 });
|
|
607
607
|
}
|
|
608
608
|
|
|
609
|
-
function
|
|
609
|
+
function applyImmediateCameraNavigationFeedback(module, reason = 'camera-navigation-input') {
|
|
610
|
+
if (module && typeof module.applyImmediateCameraNavigationFeedback === 'function') {
|
|
611
|
+
module.applyImmediateCameraNavigationFeedback(reason);
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
function markCameraNavigationForceFrames(module, frames = 2) {
|
|
616
|
+
if (!module) {
|
|
617
|
+
return;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
const safeFrames = Math.max(0, Math.floor(Number(frames || 0)));
|
|
621
|
+
if (safeFrames <= 0) {
|
|
622
|
+
return;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
module._forceUpdateFrames = Math.max(Number(module._forceUpdateFrames || 0), safeFrames);
|
|
626
|
+
module._panLiveRefreshForceFrames = Math.max(Number(module._panLiveRefreshForceFrames || 0), safeFrames);
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
function wakeCameraNavigationAnimation(module, reason = 'camera-navigation-input', options = {}) {
|
|
630
|
+
markCameraNavigationForceFrames(module, options?.forceFrames ?? 0);
|
|
631
|
+
if (options?.immediate === true) {
|
|
632
|
+
applyImmediateCameraNavigationFeedback(module, reason);
|
|
633
|
+
}
|
|
610
634
|
if (module && typeof module.requestAnimationWake === 'function') {
|
|
611
635
|
module.requestAnimationWake(reason);
|
|
612
636
|
}
|
|
@@ -6362,7 +6386,7 @@ window.MindMapInteractions = (function () {
|
|
|
6362
6386
|
module._lastPanInputAt = panInputAt;
|
|
6363
6387
|
module._deferPassiveOverlayRefresh = true;
|
|
6364
6388
|
module._cameraNavigationOverlayInputTime = panInputAt;
|
|
6365
|
-
wakeCameraNavigationAnimation(module, 'trackpad-pan-input');
|
|
6389
|
+
wakeCameraNavigationAnimation(module, 'trackpad-pan-input', { immediate: true, forceFrames: 2 });
|
|
6366
6390
|
|
|
6367
6391
|
if (module.isSelecting) {
|
|
6368
6392
|
updateSelectionBox(module);
|
|
@@ -6387,6 +6411,13 @@ window.MindMapInteractions = (function () {
|
|
|
6387
6411
|
return;
|
|
6388
6412
|
}
|
|
6389
6413
|
|
|
6414
|
+
if (WHEEL_ZOOM_TARGET_UPDATE_MODE === 'event-direct') {
|
|
6415
|
+
const wheelNow = getWheelTimestamp();
|
|
6416
|
+
markCanvasWheelActivity(module, wheelNow, { throttleMs: WHEEL_ACTIVITY_BURST_INTERVAL_MS });
|
|
6417
|
+
performCameraZoomBuffered(module, deltaY, e.clientX, e.clientY, { inputTime: wheelNow });
|
|
6418
|
+
return;
|
|
6419
|
+
}
|
|
6420
|
+
|
|
6390
6421
|
wheelBuffer.deltaY += deltaY;
|
|
6391
6422
|
wheelBuffer.lastClientX = e.clientX;
|
|
6392
6423
|
wheelBuffer.lastClientY = e.clientY;
|
|
@@ -6496,9 +6527,9 @@ window.MindMapInteractions = (function () {
|
|
|
6496
6527
|
const newY = worldMouseY - (worldMouseY - module.targetY) * zoomRatio;
|
|
6497
6528
|
module.targetX = newX;
|
|
6498
6529
|
module.targetY = newY;
|
|
6530
|
+
applyImmediateCameraNavigationFeedback(module, 'wheel-zoom-input');
|
|
6499
6531
|
const settleFrames = 2;
|
|
6500
|
-
module
|
|
6501
|
-
wakeCameraNavigationAnimation(module, 'wheel-zoom-input');
|
|
6532
|
+
wakeCameraNavigationAnimation(module, 'wheel-zoom-input', { forceFrames: settleFrames });
|
|
6502
6533
|
// ▲▲▲ [Changed] ▲▲▲
|
|
6503
6534
|
|
|
6504
6535
|
// ▼▼▼ [Perf] 줌 종료 감지 및 CSS3D 업데이트 타이머 ▼▼▼
|
|
@@ -6649,10 +6680,11 @@ window.MindMapInteractions = (function () {
|
|
|
6649
6680
|
|
|
6650
6681
|
const panFactor = 0.001 * module.camera.position.z;
|
|
6651
6682
|
module.targetY -= deltaY * panFactor;
|
|
6652
|
-
|
|
6683
|
+
applyImmediateCameraNavigationFeedback(module, 'ctrl-wheel-pan-input');
|
|
6653
6684
|
module._deferPassiveOverlayRefresh = false;
|
|
6654
6685
|
module._overlayDirty = true;
|
|
6655
6686
|
window.MindMapTextOverlayV2?.invalidateView?.(module);
|
|
6687
|
+
wakeCameraNavigationAnimation(module, 'ctrl-wheel-pan-input', { forceFrames: 2 });
|
|
6656
6688
|
|
|
6657
6689
|
if (module.isSelecting) {
|
|
6658
6690
|
updateSelectionBox(module);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
self.assetsManifest = {
|
|
2
|
-
"version": "
|
|
2
|
+
"version": "1QwFTqyQ",
|
|
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-
|
|
81
|
+
"hash": "sha256-w+HacmhIzPWqioCQJ3qhkvGgqtOlm8G/0tMPsAPtb4I=",
|
|
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-
|
|
109
|
+
"hash": "sha256-QpXY2g89ekLPTa3GDB/lse5U2wQm39lXq7V3RUNLhd0=",
|
|
110
110
|
"url": "_content/MindExecution.Shared/js/mind-map-interactions.js"
|
|
111
111
|
},
|
|
112
112
|
{
|