@@ -10,6 +10,7 @@ import {
10
10
} from '@angular/core' ;
11
11
import { NGT_CATALOGUE } from '../di/catalogue' ;
12
12
import { NgtStore } from '../stores/store' ;
13
+ import { NgtAnyRecord } from '../types' ;
13
14
import { getLocalState , prepare } from '../utils/instance' ;
14
15
import { is } from '../utils/is' ;
15
16
import { NGT_COMPOUND_PREFIXES } from './di' ;
@@ -345,16 +346,30 @@ export class NgtRenderer implements Renderer2 {
345
346
null
346
347
) ;
347
348
// if target is DOM node, then we pass that to delegate Renderer
349
+ const callbackWithCdr = ( event : any ) => {
350
+ const value = callback ( event ) ;
351
+ if ( targetCdr ) targetCdr . detectChanges ( ) ;
352
+ this . store . rootCdr . detectChanges ( ) ;
353
+ return value ;
354
+ } ;
348
355
if ( this . store . isDOM ( target ) ) {
349
- const callbackWithCdr = ( event : any ) => {
350
- const value = callback ( event ) ;
351
- if ( targetCdr ) targetCdr . detectChanges ( ) ;
352
- this . store . rootCdr . detectChanges ( ) ;
353
- return value ;
354
- } ;
355
356
return this . delegate . listen ( target , eventName , callbackWithCdr ) ;
356
357
}
357
358
359
+ // @ts -expect-error - we know that target is not DOM node
360
+ if ( target === this . store . rootScene ) {
361
+ let [ domTarget , event ] = eventName . split ( ':' ) ;
362
+ if ( event == null ) {
363
+ event = domTarget ;
364
+ domTarget = '' ;
365
+ }
366
+ const eventTarget =
367
+ domTarget === 'window'
368
+ ? ( target as NgtAnyRecord ) [ 'ownerDocument' ] [ 'defaultView' ]
369
+ : ( target as NgtAnyRecord ) [ 'ownerDocument' ] ;
370
+ return this . delegate . listen ( eventTarget , event , callbackWithCdr ) ;
371
+ }
372
+
358
373
if (
359
374
target . __ngt_renderer__ [ NgtRendererClassId . type ] === 'three' ||
360
375
( target . __ngt_renderer__ [ NgtRendererClassId . type ] === 'compound' &&
0 commit comments