@@ -6,11 +6,11 @@ import {
66 useComputed$ ,
77 useContext ,
88 useSignal ,
9- useVisibleTask $,
9+ sync $,
1010} from '@builder.io/qwik' ;
11- import { KeyCode } from '../../utils/key-code.type' ;
1211import { TAB_PANEL_ID_PREFIX } from './tab-panel' ;
1312import { tabsContextId } from './tabs-context-id' ;
13+ import { KeyCode } from '../../utils/key-code.type' ;
1414
1515export const TAB_ID_PREFIX = '_tab_' ;
1616
@@ -21,17 +21,6 @@ export type TabProps = QwikIntrinsicElements['button'] & {
2121 tabId ?: string ;
2222} ;
2323
24- const preventedKeys = [
25- KeyCode . Home ,
26- KeyCode . End ,
27- KeyCode . PageDown ,
28- KeyCode . PageUp ,
29- KeyCode . ArrowDown ,
30- KeyCode . ArrowUp ,
31- KeyCode . ArrowLeft ,
32- KeyCode . ArrowRight ,
33- ] ;
34-
3524export const Tab = component$ < TabProps > ( ( { selectedClassName, tabId, ...props } ) => {
3625 const contextService = useContext ( tabsContextId ) ;
3726
@@ -48,20 +37,6 @@ export const Tab = component$<TabProps>(({ selectedClassName, tabId, ...props })
4837 return contextService . selectedTabIdSig . value === tabId ;
4938 } ) ;
5039
51- useVisibleTask$ ( function preventDefaultOnKeysVisibleTask ( { cleanup } ) {
52- function handler ( event : KeyboardEvent ) {
53- if ( preventedKeys . includes ( event . key as KeyCode ) ) {
54- event . preventDefault ( ) ;
55- }
56- contextService . onTabKeyDown$ ( event . key as KeyCode , tabId ! ) ;
57- }
58- // TODO put the listener on TabList
59- elementRefSig . value ?. addEventListener ( 'keydown' , handler ) ;
60- cleanup ( ( ) => {
61- elementRefSig . value ?. removeEventListener ( 'keydown' , handler ) ;
62- } ) ;
63- } ) ;
64-
6540 const selectIfAutomatic$ = $ ( ( ) => {
6641 contextService . selectIfAutomatic$ ( tabId ! ) ;
6742 } ) ;
@@ -86,6 +61,27 @@ export const Tab = component$<TabProps>(({ selectedClassName, tabId, ...props })
8661 tabIndex = { isSelectedSig . value ? 0 : - 1 }
8762 class = { [ props . class , classNamesSig . value ] }
8863 onClick$ = { [ $ ( ( ) => contextService . selectTab$ ( tabId ! ) ) , props . onClick$ ] }
64+ onKeyDown$ = { [
65+ /* KeyCode cannot be used here. */
66+ sync$ ( ( e : KeyboardEvent ) : void => {
67+ const keys = [
68+ 'Home' ,
69+ 'End' ,
70+ 'PageDown' ,
71+ 'PageUp' ,
72+ 'ArrowDown' ,
73+ 'ArrowUp' ,
74+ 'ArrowLeft' ,
75+ 'ArrowRight' ,
76+ ] ;
77+
78+ if ( keys . includes ( e . key ) ) {
79+ e . preventDefault ( ) ;
80+ }
81+ } ) ,
82+ $ ( ( e ) => contextService . onTabKeyDown$ ( e . key as KeyCode , tabId ! ) ) ,
83+ props . onKeyDown$ ,
84+ ] }
8985 >
9086 < Slot />
9187 </ button >
0 commit comments