angular-three 1.7.1 → 1.8.0

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.
@@ -6,6 +6,7 @@ import * as THREE from 'three';
6
6
  import { DOCUMENT, NgForOf, NgIf } from '@angular/common';
7
7
  import { RxState, selectSlice } from '@rx-angular/state';
8
8
  import { __classPrivateFieldGet } from 'tslib';
9
+ import { RouterOutlet } from '@angular/router';
9
10
 
10
11
  const idCache = {};
11
12
  function makeId(event) {
@@ -894,6 +895,27 @@ class NgtStore extends NgtRxStore {
894
895
  this.set({ ready: true });
895
896
  this.invalidate();
896
897
  }
898
+ destroy(canvas) {
899
+ this.set((state) => ({
900
+ internal: { ...state.internal, active: false },
901
+ }));
902
+ setTimeout(() => {
903
+ const { gl, xr, events } = this.get();
904
+ if (gl) {
905
+ if (events.disconnect) {
906
+ events.disconnect();
907
+ }
908
+ gl.renderLists.dispose();
909
+ gl.forceContextLoss();
910
+ if (gl.xr && gl.xr.enabled) {
911
+ gl.xr.setAnimationLoop(null);
912
+ xr.disconnect();
913
+ }
914
+ dispose(this.get());
915
+ rootStateMap.delete(canvas);
916
+ }
917
+ }, 500);
918
+ }
897
919
  resize() {
898
920
  const state = this.get();
899
921
  let oldSize = state.size;
@@ -937,6 +959,15 @@ function computeInitialSize(canvas, defaultSize) {
937
959
  }
938
960
  return { width: 0, height: 0, top: 0, left: 0 };
939
961
  }
962
+ // Disposes an object and all its properties
963
+ function dispose(obj) {
964
+ if (obj.dispose && !is.scene(obj))
965
+ obj.dispose();
966
+ for (const p in obj) {
967
+ p.dispose?.();
968
+ delete obj[p];
969
+ }
970
+ }
940
971
 
941
972
  const NGT_COMPOUND_PREFIXES = new InjectionToken('NgtCompoundPrefixes');
942
973
 
@@ -1932,6 +1963,7 @@ class NgtRendererFactory {
1932
1963
  this.compoundPrefixes = inject(NGT_COMPOUND_PREFIXES);
1933
1964
  this.document = inject(DOCUMENT);
1934
1965
  this.rendererMap = new Map();
1966
+ this.routedSet = new Set();
1935
1967
  this.portals = [];
1936
1968
  this.rendererStore = new NgtRendererStore({
1937
1969
  store: this.store,
@@ -1945,9 +1977,14 @@ class NgtRendererFactory {
1945
1977
  const delegateRenderer = this.delegateRendererFactory.createRenderer(hostElement, type);
1946
1978
  if (!type)
1947
1979
  return delegateRenderer;
1980
+ if (type['type']['isRoutedScene']) {
1981
+ this.routedSet.add(type.id);
1982
+ }
1948
1983
  let renderer = this.rendererMap.get(type.id);
1949
1984
  if (!renderer) {
1950
- renderer = new NgtRenderer(delegateRenderer, this.rendererStore, this.catalogue, !hostElement);
1985
+ renderer = new NgtRenderer(delegateRenderer, this.rendererStore, this.catalogue,
1986
+ // setting root scene if there's no routed scene OR this component is the routed Scene
1987
+ !hostElement && (this.routedSet.size === 0 || this.routedSet.has(type.id)));
1951
1988
  this.rendererMap.set(type.id, renderer);
1952
1989
  }
1953
1990
  return renderer;
@@ -2477,6 +2514,7 @@ class NgtCanvas extends NgtRxStore {
2477
2514
  if (this.glEnvInjector)
2478
2515
  this.glEnvInjector.destroy();
2479
2516
  injectNgtLoader.destroy();
2517
+ this.store.destroy(this.glCanvas.nativeElement);
2480
2518
  super.ngOnDestroy();
2481
2519
  }
2482
2520
  overrideDetectChanges() {
@@ -2980,9 +3018,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImpor
2980
3018
  args: ['portalContentAnchor', { read: ViewContainerRef, static: true }]
2981
3019
  }] } });
2982
3020
 
3021
+ class NgtRoutedScene {
3022
+ }
3023
+ NgtRoutedScene.isRoutedScene = true;
3024
+ NgtRoutedScene.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtRoutedScene, deps: [], target: i0.ɵɵFactoryTarget.Component });
3025
+ NgtRoutedScene.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtRoutedScene, isStandalone: true, selector: "ngt-routed-scene", ngImport: i0, template: `<router-outlet />`, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
3026
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtRoutedScene, decorators: [{
3027
+ type: Component,
3028
+ args: [{
3029
+ standalone: true,
3030
+ selector: 'ngt-routed-scene',
3031
+ template: `<router-outlet />`,
3032
+ imports: [RouterOutlet],
3033
+ }]
3034
+ }] });
3035
+
2983
3036
  /**
2984
3037
  * Generated bundle index. Do not edit.
2985
3038
  */
2986
3039
 
2987
- export { NGT_CATALOGUE, NgtArgs, NgtCanvas, NgtPortal, NgtPortalBeforeRender, NgtPortalContent, NgtPush, NgtRepeat, NgtRxStore, NgtStore, addAfterEffect, addEffect, addTail, applyProps, checkNeedsUpdate, checkUpdate, createAttachFunction, createLoop, createRunInContext, extend, flushGlobalEffects, getLocalState, injectBeforeRender, injectNgtDestroy, injectNgtLoader, injectNgtRef, invalidateInstance, is, makeDefaultCamera, makeDefaultRenderer, makeDpr, makeId, makeObjectGraph, prepare, rootStateMap, safeDetectChanges, startWithUndefined, tapEffect, updateCamera };
3040
+ export { NGT_CATALOGUE, NgtArgs, NgtCanvas, NgtPortal, NgtPortalBeforeRender, NgtPortalContent, NgtPush, NgtRepeat, NgtRoutedScene, NgtRxStore, NgtStore, addAfterEffect, addEffect, addTail, applyProps, checkNeedsUpdate, checkUpdate, createAttachFunction, createLoop, createRunInContext, extend, flushGlobalEffects, getLocalState, injectBeforeRender, injectNgtDestroy, injectNgtLoader, injectNgtRef, invalidateInstance, is, makeDefaultCamera, makeDefaultRenderer, makeDpr, makeId, makeObjectGraph, prepare, rootStateMap, safeDetectChanges, startWithUndefined, tapEffect, updateCamera };
2988
3041
  //# sourceMappingURL=angular-three.mjs.map