@@ -13,77 +13,77 @@ import {
1313import { tabsContextId } from './tabs-context-id' ;
1414
1515export interface TabProps {
16+ for : string ;
1617 onClick ?: PropFunction < ( ) => void > ;
1718 class ?: string ;
1819 selectedClassName ?: string ;
1920}
2021
2122// Tab button inside of a tab list
22- export const Tab = component$ (
23- ( { selectedClassName, onClick, class : classString } : TabProps ) => {
24- const contextService = useContext ( tabsContextId ) ;
23+ export const Tab = component$ ( ( props : TabProps ) => {
24+ const contextService = useContext ( tabsContextId ) ;
2525
26- const uniqueId = useId ( ) ;
26+ const uniqueId = useId ( ) ;
2727
28- const currentTabIndex = useSignal ( 0 ) ;
28+ const currentTabIndex = useSignal ( 0 ) ;
2929
30- const isSelectedSignal = useSignal ( false ) ;
30+ const isSelectedSignal = useSignal ( false ) ;
3131
32- useTask$ ( ( { cleanup } ) => {
33- contextService . tabsChanged$ ( ) ;
32+ useTask$ ( ( { cleanup } ) => {
33+ contextService . tabsChanged$ ( ) ;
3434
35- cleanup ( ( ) => {
36- contextService . tabsChanged$ ( ) ;
37- } ) ;
35+ cleanup ( ( ) => {
36+ contextService . tabsChanged$ ( ) ;
3837 } ) ;
38+ } ) ;
3939
40- useTask$ ( ( { track } ) => {
41- track ( contextService . indexByTabId ) ;
42- console . log ( 'contextService.indexByTabId' , contextService . indexByTabId ) ;
43- currentTabIndex . value = contextService . indexByTabId [ uniqueId ] ;
44- } ) ;
40+ useTask$ ( ( { track } ) => {
41+ track ( contextService . indexByTabId ) ;
42+ console . log ( 'contextService.indexByTabId' , contextService . indexByTabId ) ;
43+ currentTabIndex . value = contextService . indexByTabId [ uniqueId ] ;
44+ } ) ;
4545
46- useVisibleTask$ ( ( ) => {
47- console . log (
48- 'contextService.selectedIndex.value' ,
49- contextService . selectedIndex . value
50- ) ;
51- console . log ( 'currentTabIndex.value' , currentTabIndex . value ) ;
52- isSelectedSignal . value =
53- contextService . selectedIndex . value === currentTabIndex . value ;
54- } ) ;
46+ useVisibleTask$ ( ( ) => {
47+ console . log (
48+ 'contextService.selectedIndex.value' ,
49+ contextService . selectedIndex . value
50+ ) ;
51+ console . log ( 'currentTabIndex.value' , currentTabIndex . value ) ;
52+ isSelectedSignal . value =
53+ contextService . selectedIndex . value === currentTabIndex . value ;
54+ } ) ;
5555
56- const selectTab$ = $ ( ( ) => {
57- contextService . selectedIndex . value = currentTabIndex . value ;
58- } ) ;
56+ const selectTab$ = $ ( ( ) => {
57+ contextService . selectedIndex . value = currentTabIndex . value ;
58+ } ) ;
5959
60- const selectIfAutomatic$ = $ ( ( ) => {
61- if ( contextService . behavior === 'automatic' ) {
62- selectTab$ ( ) ;
63- }
64- } ) ;
60+ const selectIfAutomatic$ = $ ( ( ) => {
61+ if ( contextService . behavior === 'automatic' ) {
62+ selectTab$ ( ) ;
63+ }
64+ } ) ;
6565
66- return (
67- < button
68- data-tab-id = { uniqueId }
69- type = "button"
70- role = "tab "
71- onFocus$ = { selectIfAutomatic$ }
72- onMouseEnter $= { selectIfAutomatic$ }
73- aria-selected = { isSelectedSignal . value }
74- aria-controls = { 'tabpanel-' + currentTabIndex . value }
75- class = { ` ${ isSelectedSignal ? `selected ${ selectedClassName } ` : '' } ${
76- classString ? ` ${ classString } ` : ''
77- } ` }
78- onClick$ = { async ( ) => {
79- await selectTab$ ( ) ;
80- if ( onClick ) {
81- onClick ( ) ;
82- }
83- } }
84- >
85- < Slot / >
86- </ button >
87- ) ;
88- }
89- ) ;
66+ return (
67+ < button
68+ data-for = { props . for }
69+ data-tab-id = { uniqueId }
70+ type = "button "
71+ role = "tab"
72+ onFocus $= { selectIfAutomatic$ }
73+ onMouseEnter$ = { selectIfAutomatic$ }
74+ aria-selected = { isSelectedSignal . value }
75+ aria-controls = { 'tabpanel-' + props . for }
76+ class = { ` ${ isSelectedSignal ? `selected ${ props . selectedClassName } ` : '' } ${
77+ props . class ? ` ${ props . class } ` : ''
78+ } ` }
79+ onClick$ = { async ( ) => {
80+ await selectTab$ ( ) ;
81+ if ( props . onClick ) {
82+ props . onClick ( ) ;
83+ }
84+ } }
85+ >
86+ < Slot / >
87+ </ button >
88+ ) ;
89+ } ) ;
0 commit comments