@naniteninja/trait-visual 1.0.8 → 1.0.10

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.
Files changed (33) hide show
  1. package/fesm2022/naniteninja-trait-visual.mjs +32 -14
  2. package/fesm2022/naniteninja-trait-visual.mjs.map +1 -1
  3. package/index.d.ts +703 -3
  4. package/package.json +3 -3
  5. package/lib/data/bundled-textures.generated.d.ts +0 -3
  6. package/lib/data/nodes.data.d.ts +0 -15
  7. package/lib/data/shader.d.ts +0 -2
  8. package/lib/data/shaders/customPaths.glsl.d.ts +0 -1
  9. package/lib/data/shaders/dyingStarPhase.glsl.d.ts +0 -1
  10. package/lib/data/shaders/galaxyPhase.glsl.d.ts +0 -1
  11. package/lib/data/shaders/nebulaPhase.glsl.d.ts +0 -1
  12. package/lib/objects/Blackhole.d.ts +0 -45
  13. package/lib/objects/Cluster.d.ts +0 -18
  14. package/lib/objects/GalaxyStars.d.ts +0 -1
  15. package/lib/services/black-hole-particle-field.d.ts +0 -98
  16. package/lib/services/galaxyPointCloud.d.ts +0 -10
  17. package/lib/services/node-actions.d.ts +0 -5
  18. package/lib/services/stellar-dust-field.d.ts +0 -102
  19. package/lib/trait-visual-canvas/trait-visual-canvas.component.d.ts +0 -220
  20. package/lib/types/app.types.d.ts +0 -224
  21. package/lib/types/canvas-config.d.ts +0 -181
  22. package/lib/types/dust-field.types.d.ts +0 -61
  23. package/lib/types/glow.types.d.ts +0 -18
  24. package/lib/types/node-info.type.d.ts +0 -17
  25. package/lib/types/particle-field.types.d.ts +0 -55
  26. package/lib/utils/createShaderMaterial.d.ts +0 -8
  27. package/lib/utils/createUniforms.d.ts +0 -2
  28. package/lib/utils/debug-counters.d.ts +0 -6
  29. package/lib/utils/debug-ingest.constants.d.ts +0 -2
  30. package/lib/utils/debug-ingest.d.ts +0 -12
  31. package/lib/utils/galaxyGeometryForPhase.d.ts +0 -1
  32. package/lib/utils/window.util.d.ts +0 -7
  33. package/public-api.d.ts +0 -6
@@ -3362,8 +3362,11 @@ class TraitVisualCanvasComponent {
3362
3362
  }
3363
3363
  initGalaxyCloud() {
3364
3364
  const base = this.assetsBaseUrl || this.cfg.assetsBaseUrl || '';
3365
- // Always try URL-based loading first (root-relative when base is '').
3366
- // Fall back to bundled (embedded) textures if URL load fails.
3365
+ // When an explicit assetsBaseUrl is provided, try URL-based loading first
3366
+ // and fall back to bundled textures on failure.
3367
+ // When no assetsBaseUrl is set (empty string), skip the network request
3368
+ // entirely to avoid 404 console errors in consuming apps.
3369
+ const hasExplicitBase = !!(this.assetsBaseUrl || this.cfg.assetsBaseUrl);
3367
3370
  const scaleUrl = `${base}/scale-texture.png`;
3368
3371
  const colorUrl = `${base}/color-tiles.png`;
3369
3372
  const aniUrl = `${base}/ani-tiles.exr`;
@@ -3404,13 +3407,23 @@ class TraitVisualCanvasComponent {
3404
3407
  };
3405
3408
  const loader = new THREE.TextureLoader();
3406
3409
  // scale-texture.png → scaleTex uniform (with bundled fallback)
3407
- loader.load(scaleUrl, (tex) => applyTex(tex, 'scaleTex'), undefined, () => {
3410
+ if (hasExplicitBase) {
3411
+ loader.load(scaleUrl, (tex) => applyTex(tex, 'scaleTex'), undefined, () => {
3412
+ loader.load(BUNDLED_SCALE_TEXTURE_URL, (tex) => applyTex(tex, 'scaleTex'));
3413
+ });
3414
+ }
3415
+ else {
3408
3416
  loader.load(BUNDLED_SCALE_TEXTURE_URL, (tex) => applyTex(tex, 'scaleTex'));
3409
- });
3417
+ }
3410
3418
  // color-tiles.png → color uniform (with bundled fallback)
3411
- loader.load(colorUrl, (tex) => applyTex(tex, 'color'), undefined, () => {
3419
+ if (hasExplicitBase) {
3420
+ loader.load(colorUrl, (tex) => applyTex(tex, 'color'), undefined, () => {
3421
+ loader.load(BUNDLED_COLOR_TILES_URL, (tex) => applyTex(tex, 'color'));
3422
+ });
3423
+ }
3424
+ else {
3412
3425
  loader.load(BUNDLED_COLOR_TILES_URL, (tex) => applyTex(tex, 'color'));
3413
- });
3426
+ }
3414
3427
  // ani-tiles.exr → posTex uniform
3415
3428
  // Uses manual fetch + EXRLoader.parse() to avoid Vite pre-bundling issues
3416
3429
  // with EXRLoader.load() (FileLoader response-type handling).
@@ -3457,11 +3470,16 @@ class TraitVisualCanvasComponent {
3457
3470
  buf[i] = raw.charCodeAt(i);
3458
3471
  parseExrBuffer(buf.buffer);
3459
3472
  };
3460
- fetch(aniUrl)
3461
- .then(r => { if (!r.ok)
3462
- throw new Error(`HTTP ${r.status}`); return r.arrayBuffer(); })
3463
- .then(buf => parseExrBuffer(buf))
3464
- .catch(() => loadBundledExr());
3473
+ if (hasExplicitBase) {
3474
+ fetch(aniUrl)
3475
+ .then(r => { if (!r.ok)
3476
+ throw new Error(`HTTP ${r.status}`); return r.arrayBuffer(); })
3477
+ .then(buf => parseExrBuffer(buf))
3478
+ .catch(() => loadBundledExr());
3479
+ }
3480
+ else {
3481
+ loadBundledExr();
3482
+ }
3465
3483
  this.lastAppliedGalaxyParticleCount = this.galaxyParticleCount;
3466
3484
  }
3467
3485
  /** Rebuild the galaxy point cloud (e.g. when galaxyParticleCount changes). Preserves material + textures. */
@@ -4333,10 +4351,10 @@ class TraitVisualCanvasComponent {
4333
4351
  preferences: bh.preferences.slice(),
4334
4352
  };
4335
4353
  }
4336
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TraitVisualCanvasComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
4337
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.18", type: TraitVisualCanvasComponent, isStandalone: true, selector: "tv-trait-visual-canvas", inputs: { config: "config", assetsBaseUrl: "assetsBaseUrl", verboseWebGLLog: "verboseWebGLLog", command: "command" }, outputs: { nodeSelected: "nodeSelected", rightClick: "rightClick", frameRendered: "frameRendered", perfStats: "perfStats", cameraLockChanged: "cameraLockChanged", nodeDataChanged: "nodeDataChanged" }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["rendererCanvas"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"trait-visual-canvas-host\">\r\n <canvas #rendererCanvas></canvas>\r\n @if (webGLUnavailable) {\r\n <div class=\"webgl-unavailable\" role=\"alert\">\r\n <p class=\"webgl-unavailable-title\">3D display is unavailable</p>\r\n <p class=\"webgl-unavailable-message\">{{ webGLErrorMessage || 'Your browser or device could not start or keep the 3D display.' }}</p>\r\n <ul class=\"webgl-unavailable-suggestions\">\r\n <li><strong>Close other tabs or apps</strong> that use 3D or heavy graphics (games, maps, video tools, or other simulations) to free up your device.</li>\r\n <li><strong>Use a device with a more capable graphics card</strong>, or try viewing this simulation on a desktop or laptop for better compatibility.</li>\r\n <li>Try a <strong>different browser</strong> (for example, Chrome, Firefox, or Edge).</li>\r\n <li><strong>Update your computer's graphics drivers.</strong></li>\r\n <li><strong>Refresh this page</strong> after closing other apps.</li>\r\n </ul>\r\n <button class=\"webgl-retry-button\" (click)=\"retryWebGL()\" i18n>Retry 3D Display</button>\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:block;width:100%;height:100%}.trait-visual-canvas-host{width:100%;height:100%;position:relative}.trait-visual-canvas-host canvas{display:block;width:100%;height:100%}.trait-visual-canvas-host .webgl-unavailable{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.5rem;background:#000000d9;color:#ccc}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-title{margin:0 0 .5rem;font-weight:600;color:#fff}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-message{margin:0 0 1rem;font-size:.9rem;text-align:center;max-width:28rem}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-suggestions{margin:0;padding-left:1.25rem;font-size:.85rem;text-align:left;max-width:28rem;line-height:1.4}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-suggestions li{margin-bottom:.5rem}.trait-visual-canvas-host .webgl-unavailable .webgl-retry-button{margin-top:1rem;padding:.5rem 1.5rem;font-size:.95rem;font-weight:500;color:#fff;background:#4a6cf7;border:none;border-radius:4px;cursor:pointer;transition:background .15s}.trait-visual-canvas-host .webgl-unavailable .webgl-retry-button:hover{background:#3b5de7}\n"] });
4354
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TraitVisualCanvasComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
4355
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: TraitVisualCanvasComponent, isStandalone: true, selector: "tv-trait-visual-canvas", inputs: { config: "config", assetsBaseUrl: "assetsBaseUrl", verboseWebGLLog: "verboseWebGLLog", command: "command" }, outputs: { nodeSelected: "nodeSelected", rightClick: "rightClick", frameRendered: "frameRendered", perfStats: "perfStats", cameraLockChanged: "cameraLockChanged", nodeDataChanged: "nodeDataChanged" }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["rendererCanvas"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"trait-visual-canvas-host\">\r\n <canvas #rendererCanvas></canvas>\r\n @if (webGLUnavailable) {\r\n <div class=\"webgl-unavailable\" role=\"alert\">\r\n <p class=\"webgl-unavailable-title\">3D display is unavailable</p>\r\n <p class=\"webgl-unavailable-message\">{{ webGLErrorMessage || 'Your browser or device could not start or keep the 3D display.' }}</p>\r\n <ul class=\"webgl-unavailable-suggestions\">\r\n <li><strong>Close other tabs or apps</strong> that use 3D or heavy graphics (games, maps, video tools, or other simulations) to free up your device.</li>\r\n <li><strong>Use a device with a more capable graphics card</strong>, or try viewing this simulation on a desktop or laptop for better compatibility.</li>\r\n <li>Try a <strong>different browser</strong> (for example, Chrome, Firefox, or Edge).</li>\r\n <li><strong>Update your computer's graphics drivers.</strong></li>\r\n <li><strong>Refresh this page</strong> after closing other apps.</li>\r\n </ul>\r\n <button class=\"webgl-retry-button\" (click)=\"retryWebGL()\" i18n>Retry 3D Display</button>\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:block;width:100%;height:100%}.trait-visual-canvas-host{width:100%;height:100%;position:relative}.trait-visual-canvas-host canvas{display:block;width:100%;height:100%}.trait-visual-canvas-host .webgl-unavailable{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.5rem;background:#000000d9;color:#ccc}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-title{margin:0 0 .5rem;font-weight:600;color:#fff}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-message{margin:0 0 1rem;font-size:.9rem;text-align:center;max-width:28rem}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-suggestions{margin:0;padding-left:1.25rem;font-size:.85rem;text-align:left;max-width:28rem;line-height:1.4}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-suggestions li{margin-bottom:.5rem}.trait-visual-canvas-host .webgl-unavailable .webgl-retry-button{margin-top:1rem;padding:.5rem 1.5rem;font-size:.95rem;font-weight:500;color:#fff;background:#4a6cf7;border:none;border-radius:4px;cursor:pointer;transition:background .15s}.trait-visual-canvas-host .webgl-unavailable .webgl-retry-button:hover{background:#3b5de7}\n"] });
4338
4356
  }
4339
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: TraitVisualCanvasComponent, decorators: [{
4357
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TraitVisualCanvasComponent, decorators: [{
4340
4358
  type: Component,
4341
4359
  args: [{ selector: 'tv-trait-visual-canvas', standalone: true, template: "<div class=\"trait-visual-canvas-host\">\r\n <canvas #rendererCanvas></canvas>\r\n @if (webGLUnavailable) {\r\n <div class=\"webgl-unavailable\" role=\"alert\">\r\n <p class=\"webgl-unavailable-title\">3D display is unavailable</p>\r\n <p class=\"webgl-unavailable-message\">{{ webGLErrorMessage || 'Your browser or device could not start or keep the 3D display.' }}</p>\r\n <ul class=\"webgl-unavailable-suggestions\">\r\n <li><strong>Close other tabs or apps</strong> that use 3D or heavy graphics (games, maps, video tools, or other simulations) to free up your device.</li>\r\n <li><strong>Use a device with a more capable graphics card</strong>, or try viewing this simulation on a desktop or laptop for better compatibility.</li>\r\n <li>Try a <strong>different browser</strong> (for example, Chrome, Firefox, or Edge).</li>\r\n <li><strong>Update your computer's graphics drivers.</strong></li>\r\n <li><strong>Refresh this page</strong> after closing other apps.</li>\r\n </ul>\r\n <button class=\"webgl-retry-button\" (click)=\"retryWebGL()\" i18n>Retry 3D Display</button>\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:block;width:100%;height:100%}.trait-visual-canvas-host{width:100%;height:100%;position:relative}.trait-visual-canvas-host canvas{display:block;width:100%;height:100%}.trait-visual-canvas-host .webgl-unavailable{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1.5rem;background:#000000d9;color:#ccc}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-title{margin:0 0 .5rem;font-weight:600;color:#fff}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-message{margin:0 0 1rem;font-size:.9rem;text-align:center;max-width:28rem}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-suggestions{margin:0;padding-left:1.25rem;font-size:.85rem;text-align:left;max-width:28rem;line-height:1.4}.trait-visual-canvas-host .webgl-unavailable .webgl-unavailable-suggestions li{margin-bottom:.5rem}.trait-visual-canvas-host .webgl-unavailable .webgl-retry-button{margin-top:1rem;padding:.5rem 1.5rem;font-size:.95rem;font-weight:500;color:#fff;background:#4a6cf7;border:none;border-radius:4px;cursor:pointer;transition:background .15s}.trait-visual-canvas-host .webgl-unavailable .webgl-retry-button:hover{background:#3b5de7}\n"] }]
4342
4360
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }], propDecorators: { config: [{