66 * functional in a real browser.
77 */
88export interface FocusDriver {
9- getFocusableElements : ( ) => any [ ] ;
10- getActiveElement : ( ) => any ;
11- focusElement : ( el : any ) => void ;
12- preventDefault : ( event : any ) => void ;
13- addEventListener : ( name : string , handler : ( e : any ) => void ) => void ;
14- removeEventListener : ( name : string , handler : ( e : any ) => void ) => void ;
9+ getFocusableElements : ( ) => Element [ ] ;
10+ getActiveElement : ( ) => Element | null ;
11+ focusElement : ( el : Element ) => void ;
12+ preventDefault : ( event : Event ) => void ;
13+ addEventListener : ( name : string , handler : ( e : Event ) => void ) => void ;
14+ removeEventListener : ( name : string , handler : ( e : Event ) => void ) => void ;
1515}
1616
1717/** CSS selector matching all natively focusable / tabbable elements. */
@@ -31,8 +31,8 @@ export const FOCUSABLE_SELECTOR = [
3131export const createDomDriver = ( container : Element ) : FocusDriver => ( {
3232 getFocusableElements : ( ) => Array . from ( container . querySelectorAll ( FOCUSABLE_SELECTOR ) ) ,
3333 getActiveElement : ( ) => document . activeElement ,
34- focusElement : ( el : HTMLElement ) => el . focus ( ) ,
35- preventDefault : ( e : any ) => e . preventDefault ( ) ,
34+ focusElement : ( el : Element ) => ( el as HTMLElement ) . focus ( ) ,
35+ preventDefault : ( e : Event ) => e . preventDefault ( ) ,
3636 addEventListener : ( name , handler ) => container . addEventListener ( name , handler ) ,
3737 removeEventListener : ( name , handler ) => container . removeEventListener ( name , handler ) ,
3838} ) ;
@@ -61,31 +61,32 @@ export function createFocusTrap(
6161 onEscape ?: ( ) => void ,
6262) : FocusTrap {
6363 let active = false ;
64- let previouslyFocused : any = null ;
64+ let previouslyFocused : Element | null = null ;
6565
66- function handleKeyDown ( event : any ) {
67- if ( event . key === 'Escape' ) {
66+ function handleKeyDown ( event : Event ) {
67+ const e = event as KeyboardEvent ;
68+ if ( e . key === 'Escape' ) {
6869 deactivate ( ) ;
6970 onEscape ?.( ) ;
7071 return ;
7172 }
7273
73- if ( event . key !== 'Tab' ) return ;
74+ if ( e . key !== 'Tab' ) return ;
7475
7576 const focusable = driver . getFocusableElements ( ) ;
7677 if ( focusable . length === 0 ) return ;
7778
7879 const first = focusable [ 0 ] ;
7980 const last = focusable [ focusable . length - 1 ] ;
8081
81- if ( event . shiftKey ) {
82+ if ( e . shiftKey ) {
8283 if ( driver . getActiveElement ( ) === first ) {
83- driver . preventDefault ( event ) ;
84+ driver . preventDefault ( e ) ;
8485 driver . focusElement ( last ) ;
8586 }
8687 } else {
8788 if ( driver . getActiveElement ( ) === last ) {
88- driver . preventDefault ( event ) ;
89+ driver . preventDefault ( e ) ;
8990 driver . focusElement ( first ) ;
9091 }
9192 }
0 commit comments