11// Keyboard navigation for 10-foot interface
22
3+ interface ServiceSelected {
4+ service : string ;
5+ }
6+
37class TenFootNavigator {
8+ private cards : NodeListOf < HTMLElement > ;
9+ private currentIndex : number ;
10+
411 constructor ( ) {
5- this . cards = document . querySelectorAll ( '.service-card' ) ;
12+ this . cards = document . querySelectorAll < HTMLElement > ( '.service-card' ) ;
613 this . currentIndex = 0 ;
714 this . init ( ) ;
815 }
916
10- init ( ) {
17+ private init ( ) : void {
1118 this . setupKeyboardNavigation ( ) ;
1219 this . setupClickHandlers ( ) ;
1320 this . handleLoading ( ) ;
@@ -18,15 +25,15 @@ class TenFootNavigator {
1825 }
1926 }
2027
21- focusCard ( index ) {
28+ private focusCard ( index : number ) : void {
2229 if ( index >= 0 && index < this . cards . length ) {
2330 this . cards [ index ] . focus ( ) ;
2431 this . currentIndex = index ;
2532 }
2633 }
2734
28- setupKeyboardNavigation ( ) {
29- document . addEventListener ( 'keydown' , ( e ) => {
35+ private setupKeyboardNavigation ( ) : void {
36+ document . addEventListener ( 'keydown' , ( e : KeyboardEvent ) => {
3037 switch ( e . key ) {
3138 case 'ArrowRight' :
3239 e . preventDefault ( ) ;
@@ -46,17 +53,18 @@ class TenFootNavigator {
4653 } ) ;
4754 }
4855
49- setupClickHandlers ( ) {
50- this . cards . forEach ( ( card , index ) => {
56+ private setupClickHandlers ( ) : void {
57+ this . cards . forEach ( ( card : HTMLElement , index : number ) => {
5158 card . addEventListener ( 'click' , ( ) => {
52- const service = card . dataset . service ;
53- const title = card . querySelector ( '.service-title' ) . textContent ;
59+ const service = card . dataset . service || '' ;
60+ const titleElement = card . querySelector ( '.service-title' ) ;
61+ const title = titleElement ?. textContent || '' ;
5462
5563 console . log ( `Selected: ${ title } (${ service } )` ) ;
5664
5765 // Dispatch custom event for handling navigation
58- const event = new CustomEvent ( 'serviceSelected' , {
59- detail : { service, title , index }
66+ const event = new CustomEvent < ServiceSelected > ( 'serviceSelected' , {
67+ detail : { service }
6068 } ) ;
6169 document . dispatchEvent ( event ) ;
6270
@@ -76,7 +84,7 @@ class TenFootNavigator {
7684 } ) ;
7785 }
7886
79- handleLoading ( ) {
87+ private handleLoading ( ) : void {
8088 const loadingIndicator = document . getElementById ( 'loading-indicator' ) ;
8189
8290 if ( loadingIndicator ) {
@@ -89,10 +97,12 @@ class TenFootNavigator {
8997 }
9098}
9199
92-
93100if ( document . readyState === 'loading' ) {
94101 document . addEventListener ( 'DOMContentLoaded' , ( ) => {
95102 new TenFootNavigator ( ) ;
103+
104+ //const songbook = pug.compileFile("/pages/songbook/index.pug")
105+ //document.getElementById('app').innerHTML = homePage({ data: someData });
96106 } ) ;
97107} else {
98108 new TenFootNavigator ( ) ;
0 commit comments