@@ -103,14 +103,19 @@ const Sidebar = ({
103103 < div className = "p-4 flex-1 overflow-auto" >
104104 < div className = "space-y-4" >
105105 < div className = "space-y-2" >
106- < label className = "text-sm font-medium" > Transport Type</ label >
106+ < label
107+ className = "text-sm font-medium"
108+ htmlFor = "transport-type-select"
109+ >
110+ Transport Type
111+ </ label >
107112 < Select
108113 value = { transportType }
109114 onValueChange = { ( value : "stdio" | "sse" ) =>
110115 setTransportType ( value )
111116 }
112117 >
113- < SelectTrigger >
118+ < SelectTrigger id = "transport-type-select" >
114119 < SelectValue placeholder = "Select transport type" />
115120 </ SelectTrigger >
116121 < SelectContent >
@@ -123,17 +128,26 @@ const Sidebar = ({
123128 { transportType === "stdio" ? (
124129 < >
125130 < div className = "space-y-2" >
126- < label className = "text-sm font-medium" > Command</ label >
131+ < label className = "text-sm font-medium" htmlFor = "command-input" >
132+ Command
133+ </ label >
127134 < Input
135+ id = "command-input"
128136 placeholder = "Command"
129137 value = { command }
130138 onChange = { ( e ) => setCommand ( e . target . value ) }
131139 className = "font-mono"
132140 />
133141 </ div >
134142 < div className = "space-y-2" >
135- < label className = "text-sm font-medium" > Arguments</ label >
143+ < label
144+ className = "text-sm font-medium"
145+ htmlFor = "arguments-input"
146+ >
147+ Arguments
148+ </ label >
136149 < Input
150+ id = "arguments-input"
137151 placeholder = "Arguments (space-separated)"
138152 value = { args }
139153 onChange = { ( e ) => setArgs ( e . target . value ) }
@@ -144,8 +158,11 @@ const Sidebar = ({
144158 ) : (
145159 < >
146160 < div className = "space-y-2" >
147- < label className = "text-sm font-medium" > URL</ label >
161+ < label className = "text-sm font-medium" htmlFor = "sse-url-input" >
162+ URL
163+ </ label >
148164 < Input
165+ id = "sse-url-input"
149166 placeholder = "URL"
150167 value = { sseUrl }
151168 onChange = { ( e ) => setSseUrl ( e . target . value ) }
@@ -157,6 +174,7 @@ const Sidebar = ({
157174 variant = "outline"
158175 onClick = { ( ) => setShowBearerToken ( ! showBearerToken ) }
159176 className = "flex items-center w-full"
177+ aria-expanded = { showBearerToken }
160178 >
161179 { showBearerToken ? (
162180 < ChevronDown className = "w-4 h-4 mr-2" />
@@ -167,8 +185,14 @@ const Sidebar = ({
167185 </ Button >
168186 { showBearerToken && (
169187 < div className = "space-y-2" >
170- < label className = "text-sm font-medium" > Bearer Token</ label >
188+ < label
189+ className = "text-sm font-medium"
190+ htmlFor = "bearer-token-input"
191+ >
192+ Bearer Token
193+ </ label >
171194 < Input
195+ id = "bearer-token-input"
172196 placeholder = "Bearer Token"
173197 value = { bearerToken }
174198 onChange = { ( e ) => setBearerToken ( e . target . value ) }
@@ -187,6 +211,7 @@ const Sidebar = ({
187211 onClick = { ( ) => setShowEnvVars ( ! showEnvVars ) }
188212 className = "flex items-center w-full"
189213 data-testid = "env-vars-button"
214+ aria-expanded = { showEnvVars }
190215 >
191216 { showEnvVars ? (
192217 < ChevronDown className = "w-4 h-4 mr-2" />
@@ -201,6 +226,7 @@ const Sidebar = ({
201226 < div key = { idx } className = "space-y-2 pb-4" >
202227 < div className = "flex gap-2" >
203228 < Input
229+ aria-label = { `Environment variable key ${ idx + 1 } ` }
204230 placeholder = "Key"
205231 value = { key }
206232 onChange = { ( e ) => {
@@ -243,6 +269,7 @@ const Sidebar = ({
243269 </ div >
244270 < div className = "flex gap-2" >
245271 < Input
272+ aria-label = { `Environment variable value ${ idx + 1 } ` }
246273 type = { shownEnvVars . has ( key ) ? "text" : "password" }
247274 placeholder = "Value"
248275 value = { value }
@@ -309,6 +336,7 @@ const Sidebar = ({
309336 onClick = { ( ) => setShowConfig ( ! showConfig ) }
310337 className = "flex items-center w-full"
311338 data-testid = "config-button"
339+ aria-expanded = { showConfig }
312340 >
313341 { showConfig ? (
314342 < ChevronDown className = "w-4 h-4 mr-2" />
@@ -325,7 +353,10 @@ const Sidebar = ({
325353 return (
326354 < div key = { key } className = "space-y-2" >
327355 < div className = "flex items-center gap-1" >
328- < label className = "text-sm font-medium text-green-600 break-all" >
356+ < label
357+ className = "text-sm font-medium text-green-600 break-all"
358+ htmlFor = { `${ configKey } -input` }
359+ >
329360 { configItem . label }
330361 </ label >
331362 < Tooltip >
@@ -339,6 +370,7 @@ const Sidebar = ({
339370 </ div >
340371 { typeof configItem . value === "number" ? (
341372 < Input
373+ id = { `${ configKey } -input` }
342374 type = "number"
343375 data-testid = { `${ configKey } -input` }
344376 value = { configItem . value }
@@ -365,7 +397,7 @@ const Sidebar = ({
365397 setConfig ( newConfig ) ;
366398 } }
367399 >
368- < SelectTrigger >
400+ < SelectTrigger id = { ` ${ configKey } -input` } >
369401 < SelectValue />
370402 </ SelectTrigger >
371403 < SelectContent >
@@ -375,6 +407,7 @@ const Sidebar = ({
375407 </ Select >
376408 ) : (
377409 < Input
410+ id = { `${ configKey } -input` }
378411 data-testid = { `${ configKey } -input` }
379412 value = { configItem . value }
380413 onChange = { ( e ) => {
@@ -454,14 +487,19 @@ const Sidebar = ({
454487
455488 { loggingSupported && connectionStatus === "connected" && (
456489 < div className = "space-y-2" >
457- < label className = "text-sm font-medium" > Logging Level</ label >
490+ < label
491+ className = "text-sm font-medium"
492+ htmlFor = "logging-level-select"
493+ >
494+ Logging Level
495+ </ label >
458496 < Select
459497 value = { logLevel }
460498 onValueChange = { ( value : LoggingLevel ) =>
461499 sendLogLevelRequest ( value )
462500 }
463501 >
464- < SelectTrigger >
502+ < SelectTrigger id = "logging-level-select" >
465503 < SelectValue placeholder = "Select logging level" />
466504 </ SelectTrigger >
467505 < SelectContent >
0 commit comments