@react-spectrum/textfield 3.13.4 → 3.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/dist/TextFieldBase.main.js +17 -1
  2. package/dist/TextFieldBase.main.js.map +1 -1
  3. package/dist/TextFieldBase.mjs +18 -2
  4. package/dist/TextFieldBase.module.js +18 -2
  5. package/dist/TextFieldBase.module.js.map +1 -1
  6. package/dist/ar-AE.main.js +6 -0
  7. package/dist/ar-AE.main.js.map +1 -0
  8. package/dist/ar-AE.mjs +8 -0
  9. package/dist/ar-AE.module.js +8 -0
  10. package/dist/ar-AE.module.js.map +1 -0
  11. package/dist/bg-BG.main.js +6 -0
  12. package/dist/bg-BG.main.js.map +1 -0
  13. package/dist/bg-BG.mjs +8 -0
  14. package/dist/bg-BG.module.js +8 -0
  15. package/dist/bg-BG.module.js.map +1 -0
  16. package/dist/cs-CZ.main.js +6 -0
  17. package/dist/cs-CZ.main.js.map +1 -0
  18. package/dist/cs-CZ.mjs +8 -0
  19. package/dist/cs-CZ.module.js +8 -0
  20. package/dist/cs-CZ.module.js.map +1 -0
  21. package/dist/da-DK.main.js +6 -0
  22. package/dist/da-DK.main.js.map +1 -0
  23. package/dist/da-DK.mjs +8 -0
  24. package/dist/da-DK.module.js +8 -0
  25. package/dist/da-DK.module.js.map +1 -0
  26. package/dist/de-DE.main.js +6 -0
  27. package/dist/de-DE.main.js.map +1 -0
  28. package/dist/de-DE.mjs +8 -0
  29. package/dist/de-DE.module.js +8 -0
  30. package/dist/de-DE.module.js.map +1 -0
  31. package/dist/el-GR.main.js +6 -0
  32. package/dist/el-GR.main.js.map +1 -0
  33. package/dist/el-GR.mjs +8 -0
  34. package/dist/el-GR.module.js +8 -0
  35. package/dist/el-GR.module.js.map +1 -0
  36. package/dist/en-US.main.js +6 -0
  37. package/dist/en-US.main.js.map +1 -0
  38. package/dist/en-US.mjs +8 -0
  39. package/dist/en-US.module.js +8 -0
  40. package/dist/en-US.module.js.map +1 -0
  41. package/dist/es-ES.main.js +6 -0
  42. package/dist/es-ES.main.js.map +1 -0
  43. package/dist/es-ES.mjs +8 -0
  44. package/dist/es-ES.module.js +8 -0
  45. package/dist/es-ES.module.js.map +1 -0
  46. package/dist/et-EE.main.js +6 -0
  47. package/dist/et-EE.main.js.map +1 -0
  48. package/dist/et-EE.mjs +8 -0
  49. package/dist/et-EE.module.js +8 -0
  50. package/dist/et-EE.module.js.map +1 -0
  51. package/dist/fi-FI.main.js +6 -0
  52. package/dist/fi-FI.main.js.map +1 -0
  53. package/dist/fi-FI.mjs +8 -0
  54. package/dist/fi-FI.module.js +8 -0
  55. package/dist/fi-FI.module.js.map +1 -0
  56. package/dist/fr-FR.main.js +6 -0
  57. package/dist/fr-FR.main.js.map +1 -0
  58. package/dist/fr-FR.mjs +8 -0
  59. package/dist/fr-FR.module.js +8 -0
  60. package/dist/fr-FR.module.js.map +1 -0
  61. package/dist/he-IL.main.js +6 -0
  62. package/dist/he-IL.main.js.map +1 -0
  63. package/dist/he-IL.mjs +8 -0
  64. package/dist/he-IL.module.js +8 -0
  65. package/dist/he-IL.module.js.map +1 -0
  66. package/dist/hr-HR.main.js +6 -0
  67. package/dist/hr-HR.main.js.map +1 -0
  68. package/dist/hr-HR.mjs +8 -0
  69. package/dist/hr-HR.module.js +8 -0
  70. package/dist/hr-HR.module.js.map +1 -0
  71. package/dist/hu-HU.main.js +6 -0
  72. package/dist/hu-HU.main.js.map +1 -0
  73. package/dist/hu-HU.mjs +8 -0
  74. package/dist/hu-HU.module.js +8 -0
  75. package/dist/hu-HU.module.js.map +1 -0
  76. package/dist/intlStrings.main.js +108 -0
  77. package/dist/intlStrings.main.js.map +1 -0
  78. package/dist/intlStrings.mjs +110 -0
  79. package/dist/intlStrings.module.js +110 -0
  80. package/dist/intlStrings.module.js.map +1 -0
  81. package/dist/it-IT.main.js +6 -0
  82. package/dist/it-IT.main.js.map +1 -0
  83. package/dist/it-IT.mjs +8 -0
  84. package/dist/it-IT.module.js +8 -0
  85. package/dist/it-IT.module.js.map +1 -0
  86. package/dist/ja-JP.main.js +6 -0
  87. package/dist/ja-JP.main.js.map +1 -0
  88. package/dist/ja-JP.mjs +8 -0
  89. package/dist/ja-JP.module.js +8 -0
  90. package/dist/ja-JP.module.js.map +1 -0
  91. package/dist/ko-KR.main.js +6 -0
  92. package/dist/ko-KR.main.js.map +1 -0
  93. package/dist/ko-KR.mjs +8 -0
  94. package/dist/ko-KR.module.js +8 -0
  95. package/dist/ko-KR.module.js.map +1 -0
  96. package/dist/lt-LT.main.js +6 -0
  97. package/dist/lt-LT.main.js.map +1 -0
  98. package/dist/lt-LT.mjs +8 -0
  99. package/dist/lt-LT.module.js +8 -0
  100. package/dist/lt-LT.module.js.map +1 -0
  101. package/dist/lv-LV.main.js +6 -0
  102. package/dist/lv-LV.main.js.map +1 -0
  103. package/dist/lv-LV.mjs +8 -0
  104. package/dist/lv-LV.module.js +8 -0
  105. package/dist/lv-LV.module.js.map +1 -0
  106. package/dist/nb-NO.main.js +6 -0
  107. package/dist/nb-NO.main.js.map +1 -0
  108. package/dist/nb-NO.mjs +8 -0
  109. package/dist/nb-NO.module.js +8 -0
  110. package/dist/nb-NO.module.js.map +1 -0
  111. package/dist/nl-NL.main.js +6 -0
  112. package/dist/nl-NL.main.js.map +1 -0
  113. package/dist/nl-NL.mjs +8 -0
  114. package/dist/nl-NL.module.js +8 -0
  115. package/dist/nl-NL.module.js.map +1 -0
  116. package/dist/pl-PL.main.js +6 -0
  117. package/dist/pl-PL.main.js.map +1 -0
  118. package/dist/pl-PL.mjs +8 -0
  119. package/dist/pl-PL.module.js +8 -0
  120. package/dist/pl-PL.module.js.map +1 -0
  121. package/dist/pt-BR.main.js +6 -0
  122. package/dist/pt-BR.main.js.map +1 -0
  123. package/dist/pt-BR.mjs +8 -0
  124. package/dist/pt-BR.module.js +8 -0
  125. package/dist/pt-BR.module.js.map +1 -0
  126. package/dist/pt-PT.main.js +6 -0
  127. package/dist/pt-PT.main.js.map +1 -0
  128. package/dist/pt-PT.mjs +8 -0
  129. package/dist/pt-PT.module.js +8 -0
  130. package/dist/pt-PT.module.js.map +1 -0
  131. package/dist/ro-RO.main.js +6 -0
  132. package/dist/ro-RO.main.js.map +1 -0
  133. package/dist/ro-RO.mjs +8 -0
  134. package/dist/ro-RO.module.js +8 -0
  135. package/dist/ro-RO.module.js.map +1 -0
  136. package/dist/ru-RU.main.js +6 -0
  137. package/dist/ru-RU.main.js.map +1 -0
  138. package/dist/ru-RU.mjs +8 -0
  139. package/dist/ru-RU.module.js +8 -0
  140. package/dist/ru-RU.module.js.map +1 -0
  141. package/dist/sk-SK.main.js +6 -0
  142. package/dist/sk-SK.main.js.map +1 -0
  143. package/dist/sk-SK.mjs +8 -0
  144. package/dist/sk-SK.module.js +8 -0
  145. package/dist/sk-SK.module.js.map +1 -0
  146. package/dist/sl-SI.main.js +6 -0
  147. package/dist/sl-SI.main.js.map +1 -0
  148. package/dist/sl-SI.mjs +8 -0
  149. package/dist/sl-SI.module.js +8 -0
  150. package/dist/sl-SI.module.js.map +1 -0
  151. package/dist/sr-SP.main.js +6 -0
  152. package/dist/sr-SP.main.js.map +1 -0
  153. package/dist/sr-SP.mjs +8 -0
  154. package/dist/sr-SP.module.js +8 -0
  155. package/dist/sr-SP.module.js.map +1 -0
  156. package/dist/sv-SE.main.js +6 -0
  157. package/dist/sv-SE.main.js.map +1 -0
  158. package/dist/sv-SE.mjs +8 -0
  159. package/dist/sv-SE.module.js +8 -0
  160. package/dist/sv-SE.module.js.map +1 -0
  161. package/dist/tr-TR.main.js +6 -0
  162. package/dist/tr-TR.main.js.map +1 -0
  163. package/dist/tr-TR.mjs +8 -0
  164. package/dist/tr-TR.module.js +8 -0
  165. package/dist/tr-TR.module.js.map +1 -0
  166. package/dist/types.d.ts.map +1 -1
  167. package/dist/uk-UA.main.js +6 -0
  168. package/dist/uk-UA.main.js.map +1 -0
  169. package/dist/uk-UA.mjs +8 -0
  170. package/dist/uk-UA.module.js +8 -0
  171. package/dist/uk-UA.module.js.map +1 -0
  172. package/dist/zh-CN.main.js +6 -0
  173. package/dist/zh-CN.main.js.map +1 -0
  174. package/dist/zh-CN.mjs +8 -0
  175. package/dist/zh-CN.module.js +8 -0
  176. package/dist/zh-CN.module.js.map +1 -0
  177. package/dist/zh-TW.main.js +6 -0
  178. package/dist/zh-TW.main.js.map +1 -0
  179. package/dist/zh-TW.mjs +8 -0
  180. package/dist/zh-TW.module.js +8 -0
  181. package/dist/zh-TW.module.js.map +1 -0
  182. package/package.json +14 -13
  183. package/src/TextFieldBase.tsx +18 -2
@@ -14,13 +14,16 @@ import AlertMedium from '@spectrum-icons/ui/AlertMedium';
14
14
  import CheckmarkMedium from '@spectrum-icons/ui/CheckmarkMedium';
15
15
  import {classNames, createFocusableRef} from '@react-spectrum/utils';
16
16
  import {Field} from '@react-spectrum/label';
17
- import {mergeProps} from '@react-aria/utils';
17
+ // @ts-ignore
18
+ import intlMessages from '../intl/*.json';
19
+ import {mergeProps, useId} from '@react-aria/utils';
18
20
  import {PressEvents, RefObject, ValidationResult} from '@react-types/shared';
19
21
  import React, {cloneElement, forwardRef, HTMLAttributes, InputHTMLAttributes, LabelHTMLAttributes, ReactElement, Ref, TextareaHTMLAttributes, useImperativeHandle, useRef} from 'react';
20
22
  import {SpectrumTextFieldProps, TextFieldRef} from '@react-types/textfield';
21
23
  import styles from '@adobe/spectrum-css-temp/components/textfield/vars.css';
22
24
  import {useFocusRing} from '@react-aria/focus';
23
25
  import {useHover} from '@react-aria/interactions';
26
+ import {useLocalizedStringFormatter} from '@react-aria/i18n';
24
27
 
25
28
  interface TextFieldBaseProps extends Omit<SpectrumTextFieldProps, 'onChange' | 'validate'>, PressEvents, Partial<ValidationResult> {
26
29
  wrapperChildren?: ReactElement | ReactElement[],
@@ -91,7 +94,11 @@ export const TextFieldBase = forwardRef(function TextFieldBase(props: TextFieldB
91
94
  } as any);
92
95
  }
93
96
 
94
- let validationIcon = isInvalid ? <AlertMedium /> : <CheckmarkMedium />;
97
+ let stringFormatter = useLocalizedStringFormatter(intlMessages, '@react-spectrum/textfield');
98
+ let validId = useId();
99
+ let validationIcon = isInvalid
100
+ ? <AlertMedium />
101
+ : <CheckmarkMedium id={validId} aria-hidden aria-label={stringFormatter.format('valid')} />;
95
102
  let validation = cloneElement(validationIcon, {
96
103
  UNSAFE_className: classNames(
97
104
  styles,
@@ -100,6 +107,15 @@ export const TextFieldBase = forwardRef(function TextFieldBase(props: TextFieldB
100
107
  )
101
108
  });
102
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
+
103
119
  let {focusProps, isFocusVisible} = useFocusRing({
104
120
  isTextInput: true,
105
121
  autoFocus