@@ -54,7 +54,10 @@ import { is } from './utils/is';
5454 } ,
5555 changeDetection : ChangeDetectionStrategy . OnPush ,
5656} )
57- export class NgtCanvas {
57+ export class NgtCanvas <
58+ TSceneGraph extends Type < any > | 'routed' ,
59+ TSceneCmp = TSceneGraph extends Type < infer Cmp > ? Cmp : NgtRoutedScene ,
60+ > {
5861 private store = injectStore ( ) ;
5962 private initRoot = injectCanvasRootInitializer ( ) ;
6063
@@ -63,7 +66,7 @@ export class NgtCanvas {
6366 private environmentInjector = inject ( EnvironmentInjector ) ;
6467 private injector = inject ( Injector ) ;
6568
66- sceneGraph = input . required < Type < any > , Type < any > | 'routed' > ( {
69+ sceneGraph = input . required < Type < TSceneCmp > , TSceneGraph > ( {
6770 transform : ( value ) => {
6871 if ( value === 'routed' ) return NgtRoutedScene ;
6972 return value ;
@@ -91,7 +94,9 @@ export class NgtCanvas {
9194 eventSource = input < HTMLElement | ElementRef < HTMLElement > > ( ) ;
9295 eventPrefix = input < NonNullable < NgtCanvasOptions [ 'eventPrefix' ] > > ( 'offset' ) ;
9396 lookAt = input < Vector3 | Parameters < Vector3 [ 'set' ] > > ( ) ;
97+
9498 created = output < NgtState > ( ) ;
99+ rendered = output < ComponentRef < TSceneCmp > > ( ) ;
95100 pointerMissed = outputFromObservable ( this . store . get ( 'pointerMissed$' ) ) ;
96101
97102 private glCanvas = viewChild . required < ElementRef < HTMLCanvasElement > > ( 'glCanvas' ) ;
@@ -104,7 +109,7 @@ export class NgtCanvas {
104109 private configurator = signal < NgtCanvasConfigurator | null > ( null ) ;
105110
106111 private glEnvironmentInjector ?: EnvironmentInjector ;
107- private glRef ?: ComponentRef < unknown > ;
112+ private glRef ?: ComponentRef < TSceneCmp > ;
108113
109114 constructor ( ) {
110115 // NOTE: this means that everything in NgtCanvas will be in afterNextRender.
@@ -211,5 +216,6 @@ export class NgtCanvas {
211216 } ) ;
212217
213218 this . glRef . changeDetectorRef . detectChanges ( ) ;
219+ this . rendered . emit ( this . glRef ) ;
214220 }
215221}
0 commit comments