11import { Component , computed , CUSTOM_ELEMENTS_SCHEMA , effect , input , output } from '@angular/core' ;
2- import { injectBeforeRender , injectStore , NgtArgs , NgtCamera , NgtVector3 , omit , pick } from 'angular-three' ;
2+ import {
3+ injectBeforeRender ,
4+ injectStore ,
5+ NgtArgs ,
6+ NgtCamera ,
7+ NgtOverwrite ,
8+ NgtThreeElement ,
9+ NgtVector3 ,
10+ omit ,
11+ pick ,
12+ } from 'angular-three' ;
313import { mergeInputs } from 'ngxtension/inject-inputs' ;
414import * as THREE from 'three' ;
515import { OrbitControls } from 'three-stdlib' ;
616
7- export interface NgtsOrbitControlsOptions {
8- camera ?: THREE . Camera ;
9- domElement ?: HTMLElement ;
10- target ?: NgtVector3 ;
11- makeDefault : boolean ;
12- regress : boolean ;
13- enableDamping : boolean ;
14- keyEvents : boolean | HTMLElement ;
15- }
16-
17- const defaultOptions : Partial < Omit < OrbitControls , 'target' | 'enableDamping' | 'domElement' > > &
18- NgtsOrbitControlsOptions = {
17+ type ExtractCallback < T , E extends string > = T extends { addEventListener ( event : E , callback : infer C ) : void }
18+ ? C
19+ : never ;
20+
21+ export type OrbitControlsChangeEvent = Parameters < ExtractCallback < OrbitControls , 'change' > > [ 0 ] ;
22+
23+ export type NgtsOrbitControlsOptions = Omit <
24+ NgtOverwrite <
25+ NgtThreeElement < typeof OrbitControls > ,
26+ {
27+ camera ?: THREE . Camera ;
28+ domElement ?: HTMLElement ;
29+ target ?: NgtVector3 ;
30+ makeDefault : boolean ;
31+ regress : boolean ;
32+ enableDamping : boolean ;
33+ keyEvents : boolean | HTMLElement ;
34+ }
35+ > ,
36+ 'attach' | 'addEventListener' | 'removeEventListener' | 'parameters' | '___ngt_args__' | '_domElementKeyEvents'
37+ > ;
38+
39+ const defaultOptions : NgtsOrbitControlsOptions = {
1940 enableDamping : true ,
2041 regress : false ,
2142 makeDefault : false ,
@@ -43,7 +64,7 @@ export class NgtsOrbitControls {
4364 'enableDamping' ,
4465 ] ) ;
4566
46- changed = output < THREE . Event > ( ) ;
67+ changed = output < OrbitControlsChangeEvent > ( ) ;
4768 started = output < THREE . Event > ( ) ;
4869 ended = output < THREE . Event > ( ) ;
4970
@@ -67,9 +88,7 @@ export class NgtsOrbitControls {
6788 injectBeforeRender (
6889 ( ) => {
6990 const controls = this . controls ( ) ;
70- if ( controls ?. enabled ) {
71- controls . update ( ) ;
72- }
91+ if ( controls . enabled ) controls . update ( ) ;
7392 } ,
7493 { priority : - 1 } ,
7594 ) ;
@@ -79,18 +98,14 @@ export class NgtsOrbitControls {
7998 if ( ! makeDefault ) return ;
8099
81100 const controls = this . controls ( ) ;
82- if ( ! controls ) return ;
83-
84101 const oldControls = this . store . snapshot . controls ;
85102 this . store . update ( { controls } ) ;
86103 onCleanup ( ( ) => void this . store . update ( { controls : oldControls } ) ) ;
87104 } ) ;
88105
89106 effect ( ( onCleanup ) => {
90- const controls = this . controls ( ) ;
91- if ( ! controls ) return ;
92-
93- const [ keyEvents , domElement ] = [
107+ const [ controls , keyEvents , domElement ] = [
108+ this . controls ( ) ,
94109 this . keyEvents ( ) ,
95110 this . domElement ( ) || this . store . snapshot . events . connected || this . store . gl . domElement ( ) ,
96111 this . store . invalidate ( ) ,
@@ -106,16 +121,14 @@ export class NgtsOrbitControls {
106121 } ) ;
107122
108123 effect ( ( onCleanup ) => {
109- const controls = this . controls ( ) ;
110- if ( ! controls ) return ;
111-
112- const [ invalidate , performanceRegress , regress ] = [
124+ const [ controls , invalidate , performanceRegress , regress ] = [
125+ this . controls ( ) ,
113126 this . store . invalidate ( ) ,
114127 this . store . performance . regress ( ) ,
115128 this . regress ( ) ,
116129 ] ;
117130
118- const changeCallback : ( e : THREE . Event ) => void = ( e ) => {
131+ const changeCallback : ( e : OrbitControlsChangeEvent ) => void = ( e ) => {
119132 invalidate ( ) ;
120133 if ( regress ) performanceRegress ( ) ;
121134 this . changed . emit ( e ) ;
0 commit comments