@@ -98,7 +98,7 @@ export const TextFieldBase = forwardRef(function TextFieldBase(props: TextFieldB
98
98
let validId = useId ( ) ;
99
99
let validationIcon = isInvalid
100
100
? < AlertMedium />
101
- : < CheckmarkMedium id = { validId } aria-label = { stringFormatter . format ( 'valid' ) } /> ;
101
+ : < CheckmarkMedium id = { validId } aria-hidden aria- label= { stringFormatter . format ( 'valid' ) } /> ;
102
102
let validation = cloneElement ( validationIcon , {
103
103
UNSAFE_className : classNames (
104
104
styles ,
@@ -107,6 +107,15 @@ export const TextFieldBase = forwardRef(function TextFieldBase(props: TextFieldB
107
107
)
108
108
} ) ;
109
109
110
+ // Add validation icon IDREF to aria-describedby when validationState is valid
111
+ let inputPropsAriaDescribedBy = inputProps [ 'aria-describedby' ] ;
112
+ if (
113
+ ! isInvalid && validationState === 'valid' && ! isLoading && ! isDisabled &&
114
+ ( ! inputPropsAriaDescribedBy || ! inputPropsAriaDescribedBy . includes ( validId ) )
115
+ ) {
116
+ inputProps [ 'aria-describedby' ] = [ inputPropsAriaDescribedBy , validId ] . join ( ' ' ) . trim ( ) ;
117
+ }
118
+
110
119
let { focusProps, isFocusVisible} = useFocusRing ( {
111
120
isTextInput : true ,
112
121
autoFocus
@@ -129,18 +138,7 @@ export const TextFieldBase = forwardRef(function TextFieldBase(props: TextFieldB
129
138
)
130
139
} >
131
140
< ElementType
132
- { ...mergeProps (
133
- inputProps ,
134
- hoverProps ,
135
- focusProps ,
136
- validationState === 'valid' && ! isLoading && ! isDisabled
137
- ? {
138
- 'aria-describedby' : inputProps [ 'aria-describedby' ]
139
- ? `${ inputProps [ 'aria-describedby' ] } ${ validId } `
140
- : validId
141
- }
142
- : undefined
143
- ) }
141
+ { ...mergeProps ( inputProps , hoverProps , focusProps ) }
144
142
ref = { inputRef as any }
145
143
rows = { multiLine ? 1 : undefined }
146
144
className = {
0 commit comments