@@ -4,24 +4,24 @@ import {
4
4
DestroyRef ,
5
5
ElementRef ,
6
6
EnvironmentInjector ,
7
- EventEmitter ,
8
7
Injector ,
9
- Input ,
10
8
NgZone ,
11
- Output ,
12
9
ViewChild ,
13
10
ViewContainerRef ,
14
11
afterNextRender ,
12
+ booleanAttribute ,
15
13
computed ,
16
14
createEnvironmentInjector ,
17
15
inject ,
16
+ input ,
18
17
signal ,
19
18
untracked ,
20
19
type ComponentRef ,
21
20
type Type ,
22
21
} from '@angular/core' ;
23
22
import { injectAutoEffect } from 'ngxtension/auto-effect' ;
24
23
import { NgxResize , provideResizeOptions , type ResizeOptions , type ResizeResult } from 'ngxtension/resize' ;
24
+ import type { Raycaster , Scene , Vector3 } from 'three' ;
25
25
import * as THREE from 'three' ;
26
26
import { createPointerEvents } from './dom/events' ;
27
27
import type { NgtCamera , NgtDomEvent , NgtEventManager } from './events' ;
@@ -39,7 +39,7 @@ import {
39
39
import type { NgtObject3DNode } from './three-types' ;
40
40
import type { NgtAnyRecord , NgtProperties } from './types' ;
41
41
import { is } from './utils/is' ;
42
- import { signalStore , type NgtSignalStore } from './utils/signal-store' ;
42
+ import { type NgtSignalStore } from './utils/signal-store' ;
43
43
44
44
export type NgtGLOptions =
45
45
| NgtRendererLike
@@ -137,29 +137,33 @@ export class NgtCanvas {
137
137
private environmentInjector = inject ( EnvironmentInjector ) ;
138
138
private injector = inject ( Injector ) ;
139
139
140
- @Input ( { required : true } ) sceneGraph ! : Type < any > ;
141
- @Input ( ) compoundPrefixes : string [ ] = [ ] ;
142
-
143
- private sceneGraphInputs = signal < NgtAnyRecord > ( { } , { equal : Object . is } ) ;
144
- @Input ( { alias : 'sceneGraphInputs' } ) set _sceneGraphInputs ( value : NgtAnyRecord ) {
145
- this . sceneGraphInputs . set ( value ) ;
146
- }
147
-
148
- private canvasInputs = signalStore < NgtCanvasInputs > ( {
149
- shadows : false ,
150
- linear : false ,
151
- flat : false ,
152
- legacy : false ,
153
- orthographic : false ,
154
- frameloop : 'always' ,
155
- dpr : [ 1 , 2 ] ,
156
- events : createPointerEvents ,
140
+ sceneGraph = input . required < Type < any > > ( ) ;
141
+ compoundPrefixes = input < string [ ] > ( [ ] ) ;
142
+ sceneGraphInputs = input < NgtAnyRecord > ( { } ) ;
143
+ gl = input < NgtGLOptions > ( ) ;
144
+ size = input < NgtSize > ( ) ;
145
+ shadows = input ( false , {
146
+ transform : ( value ) => {
147
+ if ( value === '' ) return booleanAttribute ( value ) ;
148
+ return value as NonNullable < NgtCanvasInputs [ 'shadows' ] > ;
149
+ } ,
157
150
} ) ;
158
- @Input ( { alias : 'options' } ) set _canvasInputs ( value : Partial < NgtCanvasInputs > ) {
159
- this . canvasInputs . update ( value ) ;
160
- }
161
-
162
- @Output ( ) created = new EventEmitter < NgtState > ( ) ;
151
+ legacy = input ( false , { transform : booleanAttribute } ) ;
152
+ linear = input ( false , { transform : booleanAttribute } ) ;
153
+ flat = input ( false , { transform : booleanAttribute } ) ;
154
+ orthographic = input ( false , { transform : booleanAttribute } ) ;
155
+ frameloop = input < NonNullable < NgtCanvasInputs [ 'frameloop' ] > > ( 'always' ) ;
156
+ performance = input < Partial < Omit < NgtPerformance , 'regress' > > > ( ) ;
157
+ dpr = input < NgtDpr > ( [ 1 , 2 ] ) ;
158
+ raycaster = input < Partial < Raycaster > > ( ) ;
159
+ scene = input < Scene | Partial < Scene > > ( ) ;
160
+ camera = input < NonNullable < NgtCanvasInputs [ 'camera' ] > > ( ) ;
161
+ events = input ( createPointerEvents ) ;
162
+ eventSource = input < HTMLElement | ElementRef < HTMLElement > > ( ) ;
163
+ eventPrefix = input < NonNullable < NgtCanvasInputs [ 'eventPrefix' ] > > ( 'offset' ) ;
164
+ lookAt = input < Vector3 | Parameters < Vector3 [ 'set' ] > > ( ) ;
165
+ created = output < NgtState > ( ) ;
166
+ pointerMissed = outputFromObservable ( this . store . get ( 'pointerMissed$' ) ) ;
163
167
164
168
@ViewChild ( 'glCanvas' , { static : true } ) glCanvas ! : ElementRef < HTMLCanvasElement > ;
165
169
0 commit comments