@mindexec/cli 0.2.413 → 0.2.415

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.413",
3
+ "version": "0.2.415",
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 = '20260628-generated-image-normal-pipeline-v847';
8
+ const MINDMAP_CORE_BUILD_ID = '20260628-css3d-image-no-white-swap-v849';
9
9
  const CanvasPhase = Object.freeze({
10
10
  Booting: 'booting',
11
11
  BoardFileLoading: 'board-file-loading',
@@ -1393,6 +1393,39 @@
1393
1393
  || normalized.startsWith('file:');
1394
1394
  }
1395
1395
 
1396
+ function looksLikeRelativeCssAssetUrl(url) {
1397
+ const normalized = normalizeCssMediaUrl(url);
1398
+ if (!normalized || isDirectCssMediaUrl(normalized) || isNonRefreshableMediaUrl(normalized)) {
1399
+ return false;
1400
+ }
1401
+
1402
+ const lower = normalized.toLowerCase();
1403
+ return lower.startsWith('assets/') || lower.startsWith('/assets/');
1404
+ }
1405
+
1406
+ async function resolveRelativeCssAssetDisplayUrl(nodeModel, contentTypeLower, targetUrl) {
1407
+ const normalized = normalizeCssMediaUrl(targetUrl);
1408
+ if (!looksLikeRelativeCssAssetUrl(normalized)) {
1409
+ return normalized;
1410
+ }
1411
+
1412
+ const nodeId = String(nodeModel?.id ?? nodeModel?.Id ?? '').trim();
1413
+ const helper = window.dotNetHelper;
1414
+ if (!nodeId || !helper || typeof helper.invokeMethodAsync !== 'function') {
1415
+ return normalized;
1416
+ }
1417
+
1418
+ try {
1419
+ const methodName = contentTypeLower === 'image'
1420
+ ? 'ResolveNodePreviewAssetUrl'
1421
+ : 'ResolveNodeAssetUrl';
1422
+ const resolved = await helper.invokeMethodAsync(methodName, nodeId);
1423
+ return normalizeCssMediaUrl(resolved) || normalized;
1424
+ } catch {
1425
+ return normalized;
1426
+ }
1427
+ }
1428
+
1396
1429
  function shouldApplyCssDisplayCrossOrigin(url) {
1397
1430
  const normalized = normalizeCssMediaUrl(url);
1398
1431
  if (!normalized) {
@@ -3907,10 +3940,58 @@
3907
3940
  if (_cssImageDisplayQueue.length > 0) {
3908
3941
  scheduleCssImageDisplayQueuePump();
3909
3942
  }
3910
- });
3943
+ });
3911
3944
  }
3912
3945
  }
3913
3946
 
3947
+ function hasVisibleCssImagePixels(mediaEl) {
3948
+ if (!mediaEl || mediaEl.tagName !== 'IMG') {
3949
+ return false;
3950
+ }
3951
+
3952
+ if (String(mediaEl.dataset?.mediaReady || '').trim() === '1') {
3953
+ return true;
3954
+ }
3955
+
3956
+ return mediaEl.complete === true
3957
+ && Number(mediaEl.naturalWidth || 0) > 0
3958
+ && Number(mediaEl.naturalHeight || 0) > 0;
3959
+ }
3960
+
3961
+ async function decodeCssImageBeforeSwap(src) {
3962
+ const normalized = normalizeCssMediaUrl(src);
3963
+ if (!normalized) {
3964
+ return false;
3965
+ }
3966
+
3967
+ return await new Promise((resolve) => {
3968
+ const image = new Image();
3969
+ let settled = false;
3970
+ const finish = (ok) => {
3971
+ if (settled) return;
3972
+ settled = true;
3973
+ image.onload = null;
3974
+ image.onerror = null;
3975
+ resolve(ok === true);
3976
+ };
3977
+
3978
+ image.decoding = 'async';
3979
+ image.onload = () => {
3980
+ if (typeof image.decode === 'function') {
3981
+ image.decode()
3982
+ .then(() => finish(true))
3983
+ .catch(() => finish(true));
3984
+ return;
3985
+ }
3986
+
3987
+ finish(true);
3988
+ };
3989
+ image.onerror = () => finish(false);
3990
+ image.src = normalized;
3991
+ setTimeout(() => finish(false), 2500);
3992
+ });
3993
+ }
3994
+
3914
3995
  async function applyCssImageElementSource(mediaEl, normalized) {
3915
3996
  if (String(mediaEl.dataset.mediaSourceUrl || '').trim() !== normalized) {
3916
3997
  return false;
@@ -3924,6 +4005,16 @@
3924
4005
 
3925
4006
  const currentDisplaySource = String(mediaEl.getAttribute('src') || '').trim();
3926
4007
  if (currentDisplaySource !== resolvedDisplaySource) {
4008
+ if (currentDisplaySource && hasVisibleCssImagePixels(mediaEl)) {
4009
+ const decoded = await decodeCssImageBeforeSwap(resolvedDisplaySource);
4010
+ if (String(mediaEl.dataset.mediaSourceUrl || '').trim() !== normalized) {
4011
+ return false;
4012
+ }
4013
+ if (!decoded) {
4014
+ return false;
4015
+ }
4016
+ }
4017
+
3927
4018
  mediaEl.setAttribute('src', resolvedDisplaySource);
3928
4019
  }
3929
4020
  mediaEl.dataset.resolvedMediaSourceUrl = resolvedDisplaySource;
@@ -3935,8 +4026,10 @@
3935
4026
 
3936
4027
  if (isLoopbackCssAssetUrl(normalized)) {
3937
4028
  mediaEl.dataset.resolvedMediaSourceUrl = '';
3938
- mediaEl.removeAttribute('src');
3939
- if (mediaEl.tagName === 'IMG') {
4029
+ if (hasVisibleCssImagePixels(mediaEl)) {
4030
+ mediaEl.style.opacity = '1';
4031
+ } else {
4032
+ mediaEl.removeAttribute('src');
3940
4033
  mediaEl.dataset.mediaReady = '0';
3941
4034
  mediaEl.style.opacity = '0';
3942
4035
  }
@@ -3945,6 +4038,16 @@
3945
4038
 
3946
4039
  const currentDisplaySource = String(mediaEl.getAttribute('src') || '').trim();
3947
4040
  if (currentDisplaySource !== normalized) {
4041
+ if (currentDisplaySource && hasVisibleCssImagePixels(mediaEl)) {
4042
+ const decoded = await decodeCssImageBeforeSwap(normalized);
4043
+ if (String(mediaEl.dataset.mediaSourceUrl || '').trim() !== normalized) {
4044
+ return false;
4045
+ }
4046
+ if (!decoded) {
4047
+ return false;
4048
+ }
4049
+ }
4050
+
3948
4051
  mediaEl.setAttribute('src', normalized);
3949
4052
  }
3950
4053
  mediaEl.dataset.resolvedMediaSourceUrl = normalized;
@@ -3955,7 +4058,7 @@
3955
4058
  async function setCssImageElementSource(mediaEl, nodeModel, targetUrl) {
3956
4059
  if (!mediaEl) return false;
3957
4060
 
3958
- const normalized = normalizeCssMediaUrl(targetUrl);
4061
+ let normalized = normalizeCssMediaUrl(targetUrl);
3959
4062
  if (!normalized) {
3960
4063
  mediaEl.dataset.mediaSourceUrl = '';
3961
4064
  syncCssDisplayCrossOrigin(mediaEl, '');
@@ -3967,6 +4070,7 @@
3967
4070
  return false;
3968
4071
  }
3969
4072
 
4073
+ normalized = await resolveRelativeCssAssetDisplayUrl(nodeModel, 'image', normalized);
3970
4074
  const previousCanonical = String(mediaEl.dataset.mediaSourceUrl || '').trim();
3971
4075
  mediaEl.dataset.mediaSourceUrl = normalized;
3972
4076
  syncCssDisplayCrossOrigin(mediaEl, normalized);
@@ -4002,7 +4106,7 @@
4002
4106
  async function setCssVideoElementSource(mediaEl, nodeModel, targetUrl, options = {}) {
4003
4107
  if (!mediaEl) return false;
4004
4108
 
4005
- const normalized = normalizeCssMediaUrl(targetUrl);
4109
+ let normalized = normalizeCssMediaUrl(targetUrl);
4006
4110
  if (!normalized) {
4007
4111
  mediaEl.dataset.mediaSourceUrl = '';
4008
4112
  mediaEl.dataset.resolvedMediaSourceUrl = '';
@@ -4014,6 +4118,7 @@
4014
4118
  return false;
4015
4119
  }
4016
4120
 
4121
+ normalized = await resolveRelativeCssAssetDisplayUrl(nodeModel, 'video', normalized);
4017
4122
  const previousCanonical = String(mediaEl.dataset.mediaSourceUrl || '').trim();
4018
4123
  mediaEl.dataset.mediaSourceUrl = normalized;
4019
4124
  syncCssDisplayCrossOrigin(mediaEl, normalized);
@@ -4423,8 +4528,12 @@
4423
4528
  return;
4424
4529
  }
4425
4530
  if (contentTypeLower === 'image') {
4426
- mediaEl.dataset.mediaReady = '0';
4427
- mediaEl.style.opacity = '0';
4531
+ if (hasVisibleCssImagePixels(mediaEl)) {
4532
+ mediaEl.style.opacity = '1';
4533
+ } else {
4534
+ mediaEl.dataset.mediaReady = '0';
4535
+ mediaEl.style.opacity = '0';
4536
+ }
4428
4537
  }
4429
4538
  const beforeSource = getCssMediaCanonicalSource(mediaEl, nodeModel?.response || nodeModel?.Response || '');
4430
4539
  await tryRefreshCssMediaSource(mediaEl, nodeModel, contentTypeLower);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "mainAssemblyName": "MindExecution.Web",
3
3
  "resources": {
4
- "hash": "sha256-tTR90qstlPJ54oiDAhOSXEDdeuPw4IA4Y0qk/1eDuiQ=",
4
+ "hash": "sha256-Couln0d4ygw1IxOLCRM0Yj3dKHz+BiP77av1emjscDQ=",
5
5
  "fingerprinting": {
6
6
  "Google.Protobuf.9h59ukbel7.dll": "Google.Protobuf.dll",
7
7
  "Markdig.d1j7v41cl1.dll": "Markdig.dll",
@@ -127,12 +127,12 @@
127
127
  "MindExecution.Kernel.88cfrq3n6f.dll": "MindExecution.Kernel.dll",
128
128
  "MindExecution.Plugins.Admin.j8r53ny1yk.dll": "MindExecution.Plugins.Admin.dll",
129
129
  "MindExecution.Plugins.Business.dxnr51rpko.dll": "MindExecution.Plugins.Business.dll",
130
- "MindExecution.Plugins.Concept.crknebife8.dll": "MindExecution.Plugins.Concept.dll",
130
+ "MindExecution.Plugins.Concept.x6f1fxmdci.dll": "MindExecution.Plugins.Concept.dll",
131
131
  "MindExecution.Plugins.Directory.8on0qz60kp.dll": "MindExecution.Plugins.Directory.dll",
132
- "MindExecution.Plugins.PlanMaster.nf8ay9xgix.dll": "MindExecution.Plugins.PlanMaster.dll",
133
- "MindExecution.Plugins.YouTube.0pgznxiz2o.dll": "MindExecution.Plugins.YouTube.dll",
134
- "MindExecution.Shared.cksmc2e0pm.dll": "MindExecution.Shared.dll",
135
- "MindExecution.Web.2dukgu5xqw.dll": "MindExecution.Web.dll",
132
+ "MindExecution.Plugins.PlanMaster.l2ehtbg506.dll": "MindExecution.Plugins.PlanMaster.dll",
133
+ "MindExecution.Plugins.YouTube.fkz0r1w96x.dll": "MindExecution.Plugins.YouTube.dll",
134
+ "MindExecution.Shared.2vo0tnjd7l.dll": "MindExecution.Shared.dll",
135
+ "MindExecution.Web.5migzyqnl3.dll": "MindExecution.Web.dll",
136
136
  "dotnet.js": "dotnet.js",
137
137
  "dotnet.native.qc8g39g30v.js": "dotnet.native.js",
138
138
  "dotnet.native.boem75ye5i.wasm": "dotnet.native.wasm",
@@ -281,15 +281,15 @@
281
281
  "MindExecution.Core.fi1okngj1v.dll": "sha256-py0z7lRYqGUGvMK7xf5miyo6UOl0U06bpwbyfUp+4pg=",
282
282
  "MindExecution.Kernel.88cfrq3n6f.dll": "sha256-qH6qMdk1bIgHvXk+TvMBc9Feyj0z9WCowTGyaOqGSEo=",
283
283
  "MindExecution.Plugins.Business.dxnr51rpko.dll": "sha256-H5VyHfSyEQSAusny8+CkdnSKa2kAnqr2j+FhVBy0ePU=",
284
- "MindExecution.Plugins.Concept.crknebife8.dll": "sha256-KH2AckoxE9L3SrHFBBfYCW5qOf62eibv9R/fDiq0s3E=",
285
- "MindExecution.Plugins.PlanMaster.nf8ay9xgix.dll": "sha256-zYCWCU32Jk7ZiPbEPLzOfouhmVqK98eQ1cYBe2301JM=",
286
- "MindExecution.Shared.cksmc2e0pm.dll": "sha256-HO7Mv+CTuMcl35yIvkUfhDfCuh8GlEhafMfvNxbKvMw=",
287
- "MindExecution.Web.2dukgu5xqw.dll": "sha256-SlFcAedQ0GCcP8kyylzvrLIoonChLLFZnMXcrnHXFxw="
284
+ "MindExecution.Plugins.Concept.x6f1fxmdci.dll": "sha256-KTYZT9imJmBWAu/sWXCSjPM8dug5tgHH3ky0+HbnR9Y=",
285
+ "MindExecution.Plugins.PlanMaster.l2ehtbg506.dll": "sha256-gxVHU1/sPfLtSLxFz0AmIUzeKFLPyklqAbk8fveTSbM=",
286
+ "MindExecution.Shared.2vo0tnjd7l.dll": "sha256-IhkRo/JYrirDc22Tx3KAAzKWraWe5sOoA5U1vr+yMMc=",
287
+ "MindExecution.Web.5migzyqnl3.dll": "sha256-Pe1GpEgpVqEBC5PLHGwTQEIbWE6RKdUOKL6/NlmGGp0="
288
288
  },
289
289
  "lazyAssembly": {
290
290
  "MindExecution.Plugins.Admin.j8r53ny1yk.dll": "sha256-IxjG4k/zJiUqItA1VJm4FISwJ1CYLo+xAXJUTUXsQKc=",
291
291
  "MindExecution.Plugins.Directory.8on0qz60kp.dll": "sha256-KGJuM3/sdVfJY9jy978C1aZymI7OJIEeHv9OPGlHwtg=",
292
- "MindExecution.Plugins.YouTube.0pgznxiz2o.dll": "sha256-RLrJwYGMQxAa7CkkXwLyZPjXwRssX1x2pS/WGIIQXmI="
292
+ "MindExecution.Plugins.YouTube.fkz0r1w96x.dll": "sha256-D5NLHc85b7A1BK7doDhueG9SEQNmhi7v9cVn/iQcpjk="
293
293
  }
294
294
  },
295
295
  "cacheBootResources": true,
@@ -579,7 +579,7 @@
579
579
  }
580
580
 
581
581
  const base = '_content/MindExecution.Shared/js/';
582
- const scriptVersion = '20260628-generated-image-normal-pipeline-v847';
582
+ const scriptVersion = '20260628-css3d-image-no-white-swap-v849';
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": "A8OIIchs",
2
+ "version": "lQ3nc/Eh",
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-V8z76q7kPYVfmcun+JthuuZfSuIPSfx0PY+up+BySwk=",
81
+ "hash": "sha256-Q2t05E/3SF8P/mdMscHaKggULfWx9RUH6xlALwiHwoc=",
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-4sfJbSWKvZxLh0VUOQ6EQ0slzBRC4bYhCPH63Ljko2w=",
89
+ "hash": "sha256-xGt9LTobfy8NmStfgnMGnwq4rmbMaDLpp41TSFZcxEA=",
90
90
  "url": "_content/MindExecution.Shared/js/mind-map-css3d-manager.js"
91
91
  },
92
92
  {
@@ -422,28 +422,28 @@
422
422
  "url": "_framework/MindExecution.Plugins.Business.dxnr51rpko.dll"
423
423
  },
424
424
  {
425
- "hash": "sha256-KH2AckoxE9L3SrHFBBfYCW5qOf62eibv9R/fDiq0s3E=",
426
- "url": "_framework/MindExecution.Plugins.Concept.crknebife8.dll"
425
+ "hash": "sha256-KTYZT9imJmBWAu/sWXCSjPM8dug5tgHH3ky0+HbnR9Y=",
426
+ "url": "_framework/MindExecution.Plugins.Concept.x6f1fxmdci.dll"
427
427
  },
428
428
  {
429
429
  "hash": "sha256-KGJuM3/sdVfJY9jy978C1aZymI7OJIEeHv9OPGlHwtg=",
430
430
  "url": "_framework/MindExecution.Plugins.Directory.8on0qz60kp.dll"
431
431
  },
432
432
  {
433
- "hash": "sha256-zYCWCU32Jk7ZiPbEPLzOfouhmVqK98eQ1cYBe2301JM=",
434
- "url": "_framework/MindExecution.Plugins.PlanMaster.nf8ay9xgix.dll"
433
+ "hash": "sha256-gxVHU1/sPfLtSLxFz0AmIUzeKFLPyklqAbk8fveTSbM=",
434
+ "url": "_framework/MindExecution.Plugins.PlanMaster.l2ehtbg506.dll"
435
435
  },
436
436
  {
437
- "hash": "sha256-RLrJwYGMQxAa7CkkXwLyZPjXwRssX1x2pS/WGIIQXmI=",
438
- "url": "_framework/MindExecution.Plugins.YouTube.0pgznxiz2o.dll"
437
+ "hash": "sha256-D5NLHc85b7A1BK7doDhueG9SEQNmhi7v9cVn/iQcpjk=",
438
+ "url": "_framework/MindExecution.Plugins.YouTube.fkz0r1w96x.dll"
439
439
  },
440
440
  {
441
- "hash": "sha256-HO7Mv+CTuMcl35yIvkUfhDfCuh8GlEhafMfvNxbKvMw=",
442
- "url": "_framework/MindExecution.Shared.cksmc2e0pm.dll"
441
+ "hash": "sha256-IhkRo/JYrirDc22Tx3KAAzKWraWe5sOoA5U1vr+yMMc=",
442
+ "url": "_framework/MindExecution.Shared.2vo0tnjd7l.dll"
443
443
  },
444
444
  {
445
- "hash": "sha256-SlFcAedQ0GCcP8kyylzvrLIoonChLLFZnMXcrnHXFxw=",
446
- "url": "_framework/MindExecution.Web.2dukgu5xqw.dll"
445
+ "hash": "sha256-Pe1GpEgpVqEBC5PLHGwTQEIbWE6RKdUOKL6/NlmGGp0=",
446
+ "url": "_framework/MindExecution.Web.5migzyqnl3.dll"
447
447
  },
448
448
  {
449
449
  "hash": "sha256-IsZJ91/OW+fHzNqIgEc7Y072ns8z9dGritiSyvR9Wgc=",
@@ -766,7 +766,7 @@
766
766
  "url": "_framework/Websocket.Client.vapounvmnl.dll"
767
767
  },
768
768
  {
769
- "hash": "sha256-hsYae0ft/oXd0SqdjHM2fpzVCM+yL42XOF62U+Eugfk=",
769
+ "hash": "sha256-9gqaMdjPC/4UKS80CT6BEHu4Jf2DqJ78DYDZ73rbT1g=",
770
770
  "url": "_framework/blazor.boot.json"
771
771
  },
772
772
  {
@@ -826,7 +826,7 @@
826
826
  "url": "icon-512.png"
827
827
  },
828
828
  {
829
- "hash": "sha256-8SlWrdSrhpdROmnutaJ9AatEND1qDXB6PdNSCRI3mnc=",
829
+ "hash": "sha256-Vo6ziORXr502mT1zJ+Etx5OZMxgV3o4zfPyasUaL9SI=",
830
830
  "url": "index.html"
831
831
  },
832
832
  {
@@ -1,4 +1,4 @@
1
- /* Manifest version: A8OIIchs */
1
+ /* Manifest version: lQ3nc/Eh */
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