@@ -26,6 +26,7 @@ export type NgtsOrbitControlsState = {
2626 makeDefault : boolean ;
2727 regress : boolean ;
2828 enableDamping : boolean ;
29+ keyEvents : boolean | HTMLElement ;
2930} ;
3031
3132declare global {
@@ -68,6 +69,10 @@ export class NgtsOrbitControls extends NgtSignalStore<NgtsOrbitControlsState> {
6869 this . set ( { enableDamping } ) ;
6970 }
7071
72+ @Input ( ) set keyEvents ( keyEvents : boolean ) {
73+ this . set ( { keyEvents } ) ;
74+ }
75+
7176 @Output ( ) change = new EventEmitter < THREE . Event > ( ) ;
7277 @Output ( ) start = new EventEmitter < THREE . Event > ( ) ;
7378 @Output ( ) end = new EventEmitter < THREE . Event > ( ) ;
@@ -78,7 +83,7 @@ export class NgtsOrbitControls extends NgtSignalStore<NgtsOrbitControlsState> {
7883 readonly damping = this . select ( 'enableDamping' ) ;
7984
8085 constructor ( ) {
81- super ( { enableDamping : true , regress : false , makeDefault : false } ) ;
86+ super ( { enableDamping : true , regress : false , makeDefault : false , keyEvents : false } ) ;
8287 injectBeforeRender (
8388 ( ) => {
8489 const controls = this . controlsRef . untracked ;
@@ -118,10 +123,12 @@ export class NgtsOrbitControls extends NgtSignalStore<NgtsOrbitControlsState> {
118123 const domElement = this . select ( 'domElement' ) ;
119124 const regress = this . select ( 'regress' ) ;
120125 const invalidate = this . #store. select ( 'invalidate' ) ;
126+ const keyEvents = this . select ( 'keyEvents' ) ;
121127
122128 const trigger = computed ( ( ) => {
123129 const eventsSource = this . #store. get ( 'events' , 'connected' ) ;
124130 return {
131+ keyEvents : keyEvents ( ) ,
125132 controls : this . controlsRef . nativeElement ,
126133 domElement : domElement ( ) || eventsSource || glDomElement ( ) ,
127134 regress : regress ( ) ,
@@ -130,9 +137,13 @@ export class NgtsOrbitControls extends NgtSignalStore<NgtsOrbitControlsState> {
130137 } ) ;
131138
132139 effect ( ( onCleanup ) => {
133- const { domElement, controls } = trigger ( ) ;
140+ const { domElement, controls, keyEvents } = trigger ( ) ;
134141 if ( ! controls ) return ;
135- controls . connect ( domElement ) ;
142+ if ( keyEvents ) {
143+ controls . connect ( keyEvents === true ? domElement : keyEvents ) ;
144+ } else {
145+ controls . connect ( domElement ) ;
146+ }
136147 onCleanup ( ( ) => void controls . dispose ( ) ) ;
137148 } ) ;
138149 }
0 commit comments