@@ -15,6 +15,7 @@ import {
1515 ElementRef ,
1616 inject ,
1717 input ,
18+ NgZone ,
1819 Signal ,
1920} from '@angular/core' ;
2021import { Directionality } from '@angular/cdk/bidi' ;
@@ -54,7 +55,6 @@ import {GRID_ROW} from './grid-tokens';
5455 '[attr.aria-activedescendant]' : '_pattern.activeDescendant()' ,
5556 '(keydown)' : '_pattern.onKeydown($event)' ,
5657 '(pointerdown)' : '_pattern.onPointerdown($event)' ,
57- '(pointermove)' : '_pattern.onPointermove($event)' ,
5858 '(pointerup)' : '_pattern.onPointerup($event)' ,
5959 '(focusin)' : '_pattern.onFocusIn($event)' ,
6060 '(focusout)' : '_pattern.onFocusOut($event)' ,
@@ -133,6 +133,22 @@ export class Grid {
133133 } ) ;
134134
135135 constructor ( ) {
136+ const ngZone = inject ( NgZone ) ;
137+
138+ // Since `pointermove` fires on each pixel, we need to
139+ // be careful not to hit the zone unless it's necessary.
140+ ngZone . runOutsideAngular ( ( ) => {
141+ this . element . addEventListener (
142+ 'pointermove' ,
143+ event => {
144+ if ( this . _pattern . acceptsPointerMove ( ) ) {
145+ ngZone . run ( ( ) => this . _pattern . onPointermove ( event ) ) ;
146+ }
147+ } ,
148+ { passive : true } ,
149+ ) ;
150+ } ) ;
151+
136152 afterRenderEffect ( ( ) => this . _pattern . setDefaultStateEffect ( ) ) ;
137153 afterRenderEffect ( ( ) => this . _pattern . resetStateEffect ( ) ) ;
138154 afterRenderEffect ( ( ) => this . _pattern . resetFocusEffect ( ) ) ;
0 commit comments