@patternfly/react-core 5.0.0-alpha.108 → 5.0.0-alpha.109

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 (367) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/esm/components/AboutModal/package.json +1 -1
  3. package/dist/esm/components/Accordion/package.json +1 -1
  4. package/dist/esm/components/ActionList/package.json +1 -1
  5. package/dist/esm/components/Alert/package.json +1 -1
  6. package/dist/esm/components/Avatar/package.json +1 -1
  7. package/dist/esm/components/BackToTop/package.json +1 -1
  8. package/dist/esm/components/Backdrop/package.json +1 -1
  9. package/dist/esm/components/BackgroundImage/package.json +1 -1
  10. package/dist/esm/components/Badge/package.json +1 -1
  11. package/dist/esm/components/Banner/package.json +1 -1
  12. package/dist/esm/components/Brand/package.json +1 -1
  13. package/dist/esm/components/Breadcrumb/package.json +1 -1
  14. package/dist/esm/components/Button/package.json +1 -1
  15. package/dist/esm/components/CalendarMonth/package.json +1 -1
  16. package/dist/esm/components/Card/Card.d.ts +12 -5
  17. package/dist/esm/components/Card/Card.d.ts.map +1 -1
  18. package/dist/esm/components/Card/Card.js +17 -5
  19. package/dist/esm/components/Card/Card.js.map +1 -1
  20. package/dist/esm/components/Card/CardHeader.d.ts +30 -0
  21. package/dist/esm/components/Card/CardHeader.d.ts.map +1 -1
  22. package/dist/esm/components/Card/CardHeader.js +40 -5
  23. package/dist/esm/components/Card/CardHeader.js.map +1 -1
  24. package/dist/esm/components/Card/CardSelectableActions.d.ts +9 -0
  25. package/dist/esm/components/Card/CardSelectableActions.d.ts.map +1 -0
  26. package/dist/esm/components/Card/CardSelectableActions.js +10 -0
  27. package/dist/esm/components/Card/CardSelectableActions.js.map +1 -0
  28. package/dist/esm/components/Card/package.json +1 -1
  29. package/dist/esm/components/Checkbox/Checkbox.d.ts +2 -0
  30. package/dist/esm/components/Checkbox/Checkbox.d.ts.map +1 -1
  31. package/dist/esm/components/Checkbox/Checkbox.js +2 -2
  32. package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
  33. package/dist/esm/components/Checkbox/package.json +1 -1
  34. package/dist/esm/components/Chip/package.json +1 -1
  35. package/dist/esm/components/ClipboardCopy/ClipboardCopy.js +4 -4
  36. package/dist/esm/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
  37. package/dist/esm/components/ClipboardCopy/package.json +1 -1
  38. package/dist/esm/components/CodeBlock/package.json +1 -1
  39. package/dist/esm/components/DataList/package.json +1 -1
  40. package/dist/esm/components/DatePicker/package.json +1 -1
  41. package/dist/esm/components/DescriptionList/package.json +1 -1
  42. package/dist/esm/components/Divider/package.json +1 -1
  43. package/dist/esm/components/DragDrop/package.json +1 -1
  44. package/dist/esm/components/Drawer/package.json +1 -1
  45. package/dist/esm/components/Dropdown/package.json +1 -1
  46. package/dist/esm/components/DualListSelector/package.json +1 -1
  47. package/dist/esm/components/EmptyState/package.json +1 -1
  48. package/dist/esm/components/ExpandableSection/package.json +1 -1
  49. package/dist/esm/components/FileUpload/FileUploadField.js +2 -2
  50. package/dist/esm/components/FileUpload/FileUploadField.js.map +1 -1
  51. package/dist/esm/components/FileUpload/package.json +1 -1
  52. package/dist/esm/components/Form/package.json +1 -1
  53. package/dist/esm/components/FormControl/FormControlIcon.d.ts +16 -0
  54. package/dist/esm/components/FormControl/FormControlIcon.d.ts.map +1 -0
  55. package/dist/esm/components/FormControl/FormControlIcon.js +18 -0
  56. package/dist/esm/components/FormControl/FormControlIcon.js.map +1 -0
  57. package/dist/esm/components/FormSelect/FormSelect.d.ts +0 -2
  58. package/dist/esm/components/FormSelect/FormSelect.d.ts.map +1 -1
  59. package/dist/esm/components/FormSelect/FormSelect.js +9 -3
  60. package/dist/esm/components/FormSelect/FormSelect.js.map +1 -1
  61. package/dist/esm/components/FormSelect/package.json +1 -1
  62. package/dist/esm/components/HelperText/package.json +1 -1
  63. package/dist/esm/components/Hint/package.json +1 -1
  64. package/dist/esm/components/Icon/package.json +1 -1
  65. package/dist/esm/components/InputGroup/package.json +1 -1
  66. package/dist/esm/components/JumpLinks/package.json +1 -1
  67. package/dist/esm/components/Label/package.json +1 -1
  68. package/dist/esm/components/List/package.json +1 -1
  69. package/dist/esm/components/LoginPage/package.json +1 -1
  70. package/dist/esm/components/Masthead/package.json +1 -1
  71. package/dist/esm/components/Menu/package.json +1 -1
  72. package/dist/esm/components/MenuToggle/package.json +1 -1
  73. package/dist/esm/components/Modal/package.json +1 -1
  74. package/dist/esm/components/MultipleFileUpload/package.json +1 -1
  75. package/dist/esm/components/Nav/package.json +1 -1
  76. package/dist/esm/components/NotificationBadge/package.json +1 -1
  77. package/dist/esm/components/NotificationDrawer/package.json +1 -1
  78. package/dist/esm/components/NumberInput/package.json +1 -1
  79. package/dist/esm/components/OverflowMenu/package.json +1 -1
  80. package/dist/esm/components/Page/package.json +1 -1
  81. package/dist/esm/components/Pagination/package.json +1 -1
  82. package/dist/esm/components/Panel/package.json +1 -1
  83. package/dist/esm/components/Popover/package.json +1 -1
  84. package/dist/esm/components/Progress/package.json +1 -1
  85. package/dist/esm/components/ProgressStepper/package.json +1 -1
  86. package/dist/esm/components/Radio/Radio.d.ts +5 -1
  87. package/dist/esm/components/Radio/Radio.d.ts.map +1 -1
  88. package/dist/esm/components/Radio/Radio.js +3 -3
  89. package/dist/esm/components/Radio/Radio.js.map +1 -1
  90. package/dist/esm/components/Radio/package.json +1 -1
  91. package/dist/esm/components/SearchInput/package.json +1 -1
  92. package/dist/esm/components/Select/package.json +1 -1
  93. package/dist/esm/components/Sidebar/package.json +1 -1
  94. package/dist/esm/components/SimpleList/package.json +1 -1
  95. package/dist/esm/components/Skeleton/package.json +1 -1
  96. package/dist/esm/components/SkipToContent/package.json +1 -1
  97. package/dist/esm/components/Slider/Slider.d.ts.map +1 -1
  98. package/dist/esm/components/Slider/Slider.js +1 -1
  99. package/dist/esm/components/Slider/Slider.js.map +1 -1
  100. package/dist/esm/components/Slider/package.json +1 -1
  101. package/dist/esm/components/Spinner/package.json +1 -1
  102. package/dist/esm/components/Switch/package.json +1 -1
  103. package/dist/esm/components/Tabs/package.json +1 -1
  104. package/dist/esm/components/Text/package.json +1 -1
  105. package/dist/esm/components/TextArea/TextArea.d.ts +0 -4
  106. package/dist/esm/components/TextArea/TextArea.d.ts.map +1 -1
  107. package/dist/esm/components/TextArea/TextArea.js +11 -7
  108. package/dist/esm/components/TextArea/TextArea.js.map +1 -1
  109. package/dist/esm/components/TextArea/package.json +1 -1
  110. package/dist/esm/components/TextInput/TextInput.d.ts +8 -11
  111. package/dist/esm/components/TextInput/TextInput.d.ts.map +1 -1
  112. package/dist/esm/components/TextInput/TextInput.js +10 -13
  113. package/dist/esm/components/TextInput/TextInput.js.map +1 -1
  114. package/dist/esm/components/TextInput/package.json +1 -1
  115. package/dist/esm/components/TextInputGroup/package.json +1 -1
  116. package/dist/esm/components/Tile/package.json +1 -1
  117. package/dist/esm/components/TimePicker/TimePicker.d.ts.map +1 -1
  118. package/dist/esm/components/TimePicker/TimePicker.js +2 -2
  119. package/dist/esm/components/TimePicker/TimePicker.js.map +1 -1
  120. package/dist/esm/components/TimePicker/package.json +1 -1
  121. package/dist/esm/components/Timestamp/package.json +1 -1
  122. package/dist/esm/components/Title/package.json +1 -1
  123. package/dist/esm/components/ToggleGroup/package.json +1 -1
  124. package/dist/esm/components/Toolbar/package.json +1 -1
  125. package/dist/esm/components/Tooltip/package.json +1 -1
  126. package/dist/esm/components/TreeView/TreeViewSearch.d.ts.map +1 -1
  127. package/dist/esm/components/TreeView/TreeViewSearch.js +6 -1
  128. package/dist/esm/components/TreeView/TreeViewSearch.js.map +1 -1
  129. package/dist/esm/components/TreeView/package.json +1 -1
  130. package/dist/esm/components/Truncate/package.json +1 -1
  131. package/dist/esm/components/Wizard/hooks/package.json +1 -1
  132. package/dist/esm/components/Wizard/package.json +1 -1
  133. package/dist/esm/components/package.json +1 -1
  134. package/dist/esm/deprecated/components/ApplicationLauncher/package.json +1 -1
  135. package/dist/esm/deprecated/components/ContextSelector/package.json +1 -1
  136. package/dist/esm/deprecated/components/Dropdown/package.json +1 -1
  137. package/dist/esm/deprecated/components/OptionsMenu/package.json +1 -1
  138. package/dist/esm/deprecated/components/PageHeader/package.json +1 -1
  139. package/dist/esm/deprecated/components/Select/Select.d.ts.map +1 -1
  140. package/dist/esm/deprecated/components/Select/Select.js +16 -18
  141. package/dist/esm/deprecated/components/Select/Select.js.map +1 -1
  142. package/dist/esm/deprecated/components/Select/package.json +1 -1
  143. package/dist/esm/deprecated/components/Wizard/package.json +1 -1
  144. package/dist/esm/deprecated/components/package.json +1 -1
  145. package/dist/esm/deprecated/package.json +1 -1
  146. package/dist/esm/helpers/Popper/thirdparty/popper-core/package.json +1 -1
  147. package/dist/esm/helpers/package.json +1 -1
  148. package/dist/esm/layouts/Bullseye/package.json +1 -1
  149. package/dist/esm/layouts/Flex/package.json +1 -1
  150. package/dist/esm/layouts/Gallery/package.json +1 -1
  151. package/dist/esm/layouts/Grid/package.json +1 -1
  152. package/dist/esm/layouts/Level/package.json +1 -1
  153. package/dist/esm/layouts/Split/package.json +1 -1
  154. package/dist/esm/layouts/Stack/package.json +1 -1
  155. package/dist/esm/layouts/package.json +1 -1
  156. package/dist/esm/next/components/package.json +1 -1
  157. package/dist/esm/next/package.json +1 -1
  158. package/dist/esm/package.json +1 -1
  159. package/dist/js/components/AboutModal/package.json +1 -1
  160. package/dist/js/components/Accordion/package.json +1 -1
  161. package/dist/js/components/ActionList/package.json +1 -1
  162. package/dist/js/components/Alert/package.json +1 -1
  163. package/dist/js/components/Avatar/package.json +1 -1
  164. package/dist/js/components/BackToTop/package.json +1 -1
  165. package/dist/js/components/Backdrop/package.json +1 -1
  166. package/dist/js/components/BackgroundImage/package.json +1 -1
  167. package/dist/js/components/Badge/package.json +1 -1
  168. package/dist/js/components/Banner/package.json +1 -1
  169. package/dist/js/components/Brand/package.json +1 -1
  170. package/dist/js/components/Breadcrumb/package.json +1 -1
  171. package/dist/js/components/Button/package.json +1 -1
  172. package/dist/js/components/CalendarMonth/package.json +1 -1
  173. package/dist/js/components/Card/Card.d.ts +12 -5
  174. package/dist/js/components/Card/Card.d.ts.map +1 -1
  175. package/dist/js/components/Card/Card.js +17 -5
  176. package/dist/js/components/Card/Card.js.map +1 -1
  177. package/dist/js/components/Card/CardHeader.d.ts +30 -0
  178. package/dist/js/components/Card/CardHeader.d.ts.map +1 -1
  179. package/dist/js/components/Card/CardHeader.js +40 -5
  180. package/dist/js/components/Card/CardHeader.js.map +1 -1
  181. package/dist/js/components/Card/CardSelectableActions.d.ts +9 -0
  182. package/dist/js/components/Card/CardSelectableActions.d.ts.map +1 -0
  183. package/dist/js/components/Card/CardSelectableActions.js +14 -0
  184. package/dist/js/components/Card/CardSelectableActions.js.map +1 -0
  185. package/dist/js/components/Card/package.json +1 -1
  186. package/dist/js/components/Checkbox/Checkbox.d.ts +2 -0
  187. package/dist/js/components/Checkbox/Checkbox.d.ts.map +1 -1
  188. package/dist/js/components/Checkbox/Checkbox.js +2 -2
  189. package/dist/js/components/Checkbox/Checkbox.js.map +1 -1
  190. package/dist/js/components/Checkbox/package.json +1 -1
  191. package/dist/js/components/Chip/package.json +1 -1
  192. package/dist/js/components/ClipboardCopy/ClipboardCopy.js +4 -4
  193. package/dist/js/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
  194. package/dist/js/components/ClipboardCopy/package.json +1 -1
  195. package/dist/js/components/CodeBlock/package.json +1 -1
  196. package/dist/js/components/DataList/package.json +1 -1
  197. package/dist/js/components/DatePicker/package.json +1 -1
  198. package/dist/js/components/DescriptionList/package.json +1 -1
  199. package/dist/js/components/Divider/package.json +1 -1
  200. package/dist/js/components/DragDrop/package.json +1 -1
  201. package/dist/js/components/Drawer/package.json +1 -1
  202. package/dist/js/components/Dropdown/package.json +1 -1
  203. package/dist/js/components/DualListSelector/package.json +1 -1
  204. package/dist/js/components/EmptyState/package.json +1 -1
  205. package/dist/js/components/ExpandableSection/package.json +1 -1
  206. package/dist/js/components/FileUpload/FileUploadField.js +2 -2
  207. package/dist/js/components/FileUpload/FileUploadField.js.map +1 -1
  208. package/dist/js/components/FileUpload/package.json +1 -1
  209. package/dist/js/components/Form/package.json +1 -1
  210. package/dist/js/components/FormControl/FormControlIcon.d.ts +16 -0
  211. package/dist/js/components/FormControl/FormControlIcon.d.ts.map +1 -0
  212. package/dist/js/components/FormControl/FormControlIcon.js +22 -0
  213. package/dist/js/components/FormControl/FormControlIcon.js.map +1 -0
  214. package/dist/js/components/FormSelect/FormSelect.d.ts +0 -2
  215. package/dist/js/components/FormSelect/FormSelect.d.ts.map +1 -1
  216. package/dist/js/components/FormSelect/FormSelect.js +9 -3
  217. package/dist/js/components/FormSelect/FormSelect.js.map +1 -1
  218. package/dist/js/components/FormSelect/package.json +1 -1
  219. package/dist/js/components/HelperText/package.json +1 -1
  220. package/dist/js/components/Hint/package.json +1 -1
  221. package/dist/js/components/Icon/package.json +1 -1
  222. package/dist/js/components/InputGroup/package.json +1 -1
  223. package/dist/js/components/JumpLinks/package.json +1 -1
  224. package/dist/js/components/Label/package.json +1 -1
  225. package/dist/js/components/List/package.json +1 -1
  226. package/dist/js/components/LoginPage/package.json +1 -1
  227. package/dist/js/components/Masthead/package.json +1 -1
  228. package/dist/js/components/Menu/package.json +1 -1
  229. package/dist/js/components/MenuToggle/package.json +1 -1
  230. package/dist/js/components/Modal/package.json +1 -1
  231. package/dist/js/components/MultipleFileUpload/package.json +1 -1
  232. package/dist/js/components/Nav/package.json +1 -1
  233. package/dist/js/components/NotificationBadge/package.json +1 -1
  234. package/dist/js/components/NotificationDrawer/package.json +1 -1
  235. package/dist/js/components/NumberInput/package.json +1 -1
  236. package/dist/js/components/OverflowMenu/package.json +1 -1
  237. package/dist/js/components/Page/package.json +1 -1
  238. package/dist/js/components/Pagination/package.json +1 -1
  239. package/dist/js/components/Panel/package.json +1 -1
  240. package/dist/js/components/Popover/package.json +1 -1
  241. package/dist/js/components/Progress/package.json +1 -1
  242. package/dist/js/components/ProgressStepper/package.json +1 -1
  243. package/dist/js/components/Radio/Radio.d.ts +5 -1
  244. package/dist/js/components/Radio/Radio.d.ts.map +1 -1
  245. package/dist/js/components/Radio/Radio.js +3 -3
  246. package/dist/js/components/Radio/Radio.js.map +1 -1
  247. package/dist/js/components/Radio/package.json +1 -1
  248. package/dist/js/components/SearchInput/package.json +1 -1
  249. package/dist/js/components/Select/package.json +1 -1
  250. package/dist/js/components/Sidebar/package.json +1 -1
  251. package/dist/js/components/SimpleList/package.json +1 -1
  252. package/dist/js/components/Skeleton/package.json +1 -1
  253. package/dist/js/components/SkipToContent/package.json +1 -1
  254. package/dist/js/components/Slider/Slider.d.ts.map +1 -1
  255. package/dist/js/components/Slider/Slider.js +1 -1
  256. package/dist/js/components/Slider/Slider.js.map +1 -1
  257. package/dist/js/components/Slider/package.json +1 -1
  258. package/dist/js/components/Spinner/package.json +1 -1
  259. package/dist/js/components/Switch/package.json +1 -1
  260. package/dist/js/components/Tabs/package.json +1 -1
  261. package/dist/js/components/Text/package.json +1 -1
  262. package/dist/js/components/TextArea/TextArea.d.ts +0 -4
  263. package/dist/js/components/TextArea/TextArea.d.ts.map +1 -1
  264. package/dist/js/components/TextArea/TextArea.js +11 -7
  265. package/dist/js/components/TextArea/TextArea.js.map +1 -1
  266. package/dist/js/components/TextArea/package.json +1 -1
  267. package/dist/js/components/TextInput/TextInput.d.ts +8 -11
  268. package/dist/js/components/TextInput/TextInput.d.ts.map +1 -1
  269. package/dist/js/components/TextInput/TextInput.js +10 -13
  270. package/dist/js/components/TextInput/TextInput.js.map +1 -1
  271. package/dist/js/components/TextInput/package.json +1 -1
  272. package/dist/js/components/TextInputGroup/package.json +1 -1
  273. package/dist/js/components/Tile/package.json +1 -1
  274. package/dist/js/components/TimePicker/TimePicker.d.ts.map +1 -1
  275. package/dist/js/components/TimePicker/TimePicker.js +2 -2
  276. package/dist/js/components/TimePicker/TimePicker.js.map +1 -1
  277. package/dist/js/components/TimePicker/package.json +1 -1
  278. package/dist/js/components/Timestamp/package.json +1 -1
  279. package/dist/js/components/Title/package.json +1 -1
  280. package/dist/js/components/ToggleGroup/package.json +1 -1
  281. package/dist/js/components/Toolbar/package.json +1 -1
  282. package/dist/js/components/Tooltip/package.json +1 -1
  283. package/dist/js/components/TreeView/TreeViewSearch.d.ts.map +1 -1
  284. package/dist/js/components/TreeView/TreeViewSearch.js +6 -1
  285. package/dist/js/components/TreeView/TreeViewSearch.js.map +1 -1
  286. package/dist/js/components/TreeView/package.json +1 -1
  287. package/dist/js/components/Truncate/package.json +1 -1
  288. package/dist/js/components/Wizard/hooks/package.json +1 -1
  289. package/dist/js/components/Wizard/package.json +1 -1
  290. package/dist/js/components/package.json +1 -1
  291. package/dist/js/deprecated/components/ApplicationLauncher/package.json +1 -1
  292. package/dist/js/deprecated/components/ContextSelector/package.json +1 -1
  293. package/dist/js/deprecated/components/Dropdown/package.json +1 -1
  294. package/dist/js/deprecated/components/OptionsMenu/package.json +1 -1
  295. package/dist/js/deprecated/components/PageHeader/package.json +1 -1
  296. package/dist/js/deprecated/components/Select/Select.d.ts.map +1 -1
  297. package/dist/js/deprecated/components/Select/Select.js +16 -18
  298. package/dist/js/deprecated/components/Select/Select.js.map +1 -1
  299. package/dist/js/deprecated/components/Select/package.json +1 -1
  300. package/dist/js/deprecated/components/Wizard/package.json +1 -1
  301. package/dist/js/deprecated/components/package.json +1 -1
  302. package/dist/js/deprecated/package.json +1 -1
  303. package/dist/js/helpers/Popper/thirdparty/popper-core/package.json +1 -1
  304. package/dist/js/helpers/package.json +1 -1
  305. package/dist/js/layouts/Bullseye/package.json +1 -1
  306. package/dist/js/layouts/Flex/package.json +1 -1
  307. package/dist/js/layouts/Gallery/package.json +1 -1
  308. package/dist/js/layouts/Grid/package.json +1 -1
  309. package/dist/js/layouts/Level/package.json +1 -1
  310. package/dist/js/layouts/Split/package.json +1 -1
  311. package/dist/js/layouts/Stack/package.json +1 -1
  312. package/dist/js/layouts/package.json +1 -1
  313. package/dist/js/next/components/package.json +1 -1
  314. package/dist/js/next/package.json +1 -1
  315. package/dist/js/package.json +1 -1
  316. package/dist/umd/react-core.min.js +3 -3
  317. package/package.json +6 -6
  318. package/src/components/Card/Card.tsx +34 -9
  319. package/src/components/Card/CardHeader.tsx +94 -2
  320. package/src/components/Card/CardSelectableActions.tsx +21 -0
  321. package/src/components/Card/__tests__/Card.test.tsx +11 -7
  322. package/src/components/Card/__tests__/__snapshots__/CardHeader.test.tsx.snap +1 -3
  323. package/src/components/Card/examples/Card.md +59 -16
  324. package/src/components/Card/examples/CardClickable.tsx +54 -0
  325. package/src/components/Card/examples/CardClickableSelectable.tsx +94 -0
  326. package/src/components/Card/examples/{CardLegacySelectable.tsx → CardDeprecatedSelectable.tsx} +2 -0
  327. package/src/components/Card/examples/{CardSelectableA11yHighlight.tsx → CardDeprecatedSelectableA11yHighlight.tsx} +1 -1
  328. package/src/components/Card/examples/CardSelectable.tsx +60 -115
  329. package/src/components/Card/examples/CardSingleSelectable.tsx +52 -0
  330. package/src/components/Checkbox/Checkbox.tsx +5 -2
  331. package/src/components/ClipboardCopy/ClipboardCopy.tsx +4 -4
  332. package/src/components/ClipboardCopy/__tests__/Generated/__snapshots__/ClipboardCopy.test.tsx.snap +13 -10
  333. package/src/components/DatePicker/__tests__/__snapshots__/DatePicker.test.tsx.snap +40 -31
  334. package/src/components/FileUpload/FileUploadField.tsx +1 -1
  335. package/src/components/FileUpload/__tests__/__snapshots__/FileUpload.test.tsx.snap +28 -22
  336. package/src/components/FileUpload/__tests__/__snapshots__/FileUploadField.test.tsx.snap +28 -22
  337. package/src/components/FormControl/FormControlIcon.tsx +31 -0
  338. package/src/components/FormSelect/FormSelect.tsx +26 -20
  339. package/src/components/FormSelect/__tests__/FormSelect.test.tsx +2 -2
  340. package/src/components/FormSelect/__tests__/__snapshots__/FormSelect.test.tsx.snap +421 -178
  341. package/src/components/FormSelect/examples/FormSelect.md +7 -6
  342. package/src/components/LoginPage/__tests__/__snapshots__/LoginForm.test.tsx.snap +84 -66
  343. package/src/components/NumberInput/__tests__/__snapshots__/NumberInput.test.tsx.snap +217 -133
  344. package/src/components/Radio/Radio.tsx +7 -2
  345. package/src/components/SearchInput/__tests__/__snapshots__/SearchInput.test.tsx.snap +36 -27
  346. package/src/components/Slider/Slider.tsx +0 -1
  347. package/src/components/Slider/_tests_/__snapshots__/Slider.test.tsx.snap +52 -40
  348. package/src/components/TextArea/TextArea.tsx +33 -26
  349. package/src/components/TextArea/__tests__/TextArea.test.tsx +6 -6
  350. package/src/components/TextArea/__tests__/__snapshots__/TextArea.test.tsx.snap +11 -8
  351. package/src/components/TextArea/examples/TextArea.md +8 -6
  352. package/src/components/TextInput/TextInput.tsx +43 -47
  353. package/src/components/TextInput/__tests__/TextInput.test.tsx +2 -2
  354. package/src/components/TextInput/__tests__/__snapshots__/TextInput.test.tsx.snap +130 -72
  355. package/src/components/TextInput/examples/TextInput.md +14 -5
  356. package/src/components/TextInput/examples/TextInputCustomIcon.tsx +30 -0
  357. package/src/components/TextInput/examples/TextInputCustomIconInvalid.tsx +20 -0
  358. package/src/components/TimePicker/TimePicker.tsx +2 -4
  359. package/src/components/TreeView/TreeViewSearch.tsx +9 -9
  360. package/src/components/TreeView/__tests__/__snapshots__/TreeView.test.tsx.snap +29 -7
  361. package/src/demos/examples/DateTimePicker/DateTimePicker.tsx +1 -1
  362. package/src/deprecated/components/Select/Select.tsx +21 -25
  363. package/src/deprecated/components/Select/__tests__/__snapshots__/Select.test.tsx.snap +1 -2
  364. package/src/components/FormSelect/examples/FormSelectIconSpriteVariant.tsx +0 -63
  365. package/src/components/TextArea/examples/TextAreaIconSprite.tsx +0 -41
  366. package/src/components/TextInput/examples/TextInputIcon.tsx +0 -39
  367. package/src/components/TextInput/examples/TextInputIconSprite.tsx +0 -63
@@ -56,16 +56,19 @@ exports[`slider renders continuous slider 1`] = `
56
56
  <div
57
57
  class="pf-v5-c-slider__value"
58
58
  >
59
- <input
60
- aria-invalid="false"
61
- aria-label="Slider value input"
62
- class="pf-v5-c-form-control pf-v5-c-form-control"
63
- data-ouia-component-id="OUIA-Generated-TextInputBase-1"
64
- data-ouia-component-type="PF4/TextInput"
65
- data-ouia-safe="true"
66
- type="number"
67
- value="50"
68
- />
59
+ <div
60
+ class="pf-v5-c-form-control"
61
+ >
62
+ <input
63
+ aria-invalid="false"
64
+ aria-label="Slider value input"
65
+ data-ouia-component-id="OUIA-Generated-TextInputBase-1"
66
+ data-ouia-component-type="PF4/TextInput"
67
+ data-ouia-safe="true"
68
+ type="number"
69
+ value="50"
70
+ />
71
+ </div>
69
72
  </div>
70
73
  </div>
71
74
  </DocumentFragment>
@@ -247,16 +250,19 @@ exports[`slider renders discrete slider 1`] = `
247
250
  <div
248
251
  class="pf-v5-c-slider__value"
249
252
  >
250
- <input
251
- aria-invalid="false"
252
- aria-label="Slider value input"
253
- class="pf-v5-c-form-control pf-v5-c-form-control"
254
- data-ouia-component-id="OUIA-Generated-TextInputBase-2"
255
- data-ouia-component-type="PF4/TextInput"
256
- data-ouia-safe="true"
257
- type="number"
258
- value="50"
259
- />
253
+ <div
254
+ class="pf-v5-c-form-control"
255
+ >
256
+ <input
257
+ aria-invalid="false"
258
+ aria-label="Slider value input"
259
+ data-ouia-component-id="OUIA-Generated-TextInputBase-2"
260
+ data-ouia-component-type="PF4/TextInput"
261
+ data-ouia-safe="true"
262
+ type="number"
263
+ value="50"
264
+ />
265
+ </div>
260
266
  </div>
261
267
  </div>
262
268
  </DocumentFragment>
@@ -416,16 +422,19 @@ exports[`slider renders slider with input 1`] = `
416
422
  <div
417
423
  class="pf-v5-c-input-group__item pf-m-fill"
418
424
  >
419
- <input
420
- aria-invalid="false"
421
- aria-label="Slider value input"
422
- class="pf-v5-c-form-control pf-v5-c-form-control"
423
- data-ouia-component-id="OUIA-Generated-TextInputBase-3"
424
- data-ouia-component-type="PF4/TextInput"
425
- data-ouia-safe="true"
426
- type="number"
427
- value="50"
428
- />
425
+ <div
426
+ class="pf-v5-c-form-control"
427
+ >
428
+ <input
429
+ aria-invalid="false"
430
+ aria-label="Slider value input"
431
+ data-ouia-component-id="OUIA-Generated-TextInputBase-3"
432
+ data-ouia-component-type="PF4/TextInput"
433
+ data-ouia-safe="true"
434
+ type="number"
435
+ value="50"
436
+ />
437
+ </div>
429
438
  </div>
430
439
  <div
431
440
  class="pf-v5-c-input-group__item pf-m-box"
@@ -492,16 +501,19 @@ exports[`slider renders slider with input above thumb 1`] = `
492
501
  <div
493
502
  class="pf-v5-c-input-group__item pf-m-fill"
494
503
  >
495
- <input
496
- aria-invalid="false"
497
- aria-label="Slider value input"
498
- class="pf-v5-c-form-control pf-v5-c-form-control"
499
- data-ouia-component-id="OUIA-Generated-TextInputBase-4"
500
- data-ouia-component-type="PF4/TextInput"
501
- data-ouia-safe="true"
502
- type="number"
503
- value="50"
504
- />
504
+ <div
505
+ class="pf-v5-c-form-control"
506
+ >
507
+ <input
508
+ aria-invalid="false"
509
+ aria-label="Slider value input"
510
+ data-ouia-component-id="OUIA-Generated-TextInputBase-4"
511
+ data-ouia-component-type="PF4/TextInput"
512
+ data-ouia-safe="true"
513
+ type="number"
514
+ value="50"
515
+ />
516
+ </div>
505
517
  </div>
506
518
  <div
507
519
  class="pf-v5-c-input-group__item pf-m-box"
@@ -1,9 +1,9 @@
1
1
  import * as React from 'react';
2
2
  import { HTMLProps } from 'react';
3
3
  import styles from '@patternfly/react-styles/css/components/FormControl/form-control';
4
- import heightToken from '@patternfly/react-tokens/dist/esm/c_form_control_textarea_Height';
5
4
  import { css } from '@patternfly/react-styles';
6
5
  import { capitalize, ValidatedOptions, canUseDOM } from '../../helpers';
6
+ import { FormControlIcon } from '../FormControl/FormControlIcon';
7
7
 
8
8
  export enum TextAreResizeOrientation {
9
9
  horizontal = 'horizontal',
@@ -23,12 +23,8 @@ export interface TextAreaProps extends Omit<HTMLProps<HTMLTextAreaElement>, 'onC
23
23
  isRequired?: boolean;
24
24
  /** Flag to show if the text area is disabled. */
25
25
  isDisabled?: boolean;
26
- /** @deprecated Use readOnlyVariant instead. Flag to show if the text area is read only. */
27
- isReadOnly?: boolean;
28
26
  /** Read only variant. */
29
27
  readOnlyVariant?: 'default' | 'plain';
30
- /** Use the external file instead of a data URI */
31
- isIconSprite?: boolean;
32
28
  /** Flag to modify height based on contents. */
33
29
  autoResize?: boolean;
34
30
  /** Value to indicate if the text area is modified to show that validation state.
@@ -55,7 +51,6 @@ export class TextAreaBase extends React.Component<TextAreaProps> {
55
51
  className: '',
56
52
  isRequired: false,
57
53
  isDisabled: false,
58
- isIconSprite: false,
59
54
  validated: 'default',
60
55
  resizeOrientation: 'both',
61
56
  'aria-label': null as string
@@ -64,7 +59,8 @@ export class TextAreaBase extends React.Component<TextAreaProps> {
64
59
  inputRef = React.createRef<HTMLTextAreaElement>();
65
60
 
66
61
  private setAutoHeight = (field: HTMLTextAreaElement) => {
67
- field.style.setProperty(heightToken.name, 'inherit');
62
+ const parent = field.parentElement;
63
+ parent.style.setProperty('height', 'inherit');
68
64
  const computed = window.getComputedStyle(field);
69
65
  // Calculate the height
70
66
  const height =
@@ -73,7 +69,7 @@ export class TextAreaBase extends React.Component<TextAreaProps> {
73
69
  field.scrollHeight +
74
70
  parseInt(computed.getPropertyValue('padding-bottom')) +
75
71
  parseInt(computed.getPropertyValue('border-bottom-width'));
76
- field.style.setProperty(heightToken.name, `${height}px`);
72
+ parent.style.setProperty('height', `${height}px`);
77
73
  };
78
74
 
79
75
  constructor(props: TextAreaProps) {
@@ -110,8 +106,6 @@ export class TextAreaBase extends React.Component<TextAreaProps> {
110
106
  validated,
111
107
  isRequired,
112
108
  isDisabled,
113
- isIconSprite,
114
- isReadOnly,
115
109
  readOnlyVariant,
116
110
  resizeOrientation,
117
111
  innerRef,
@@ -122,27 +116,40 @@ export class TextAreaBase extends React.Component<TextAreaProps> {
122
116
  /* eslint-enable @typescript-eslint/no-unused-vars */
123
117
  ...props
124
118
  } = this.props;
125
- const orientation = `resize${capitalize(resizeOrientation)}` as 'resizeVertical' | 'resizeHorizontal';
119
+ const orientation = `resize${capitalize(resizeOrientation)}` as
120
+ | 'resizeVertical'
121
+ | 'resizeHorizontal'
122
+ | 'resizeBoth';
123
+ const hasStatusIcon = ['success', 'error', 'warning'].includes(validated);
124
+
126
125
  return (
127
- <textarea
126
+ <div
128
127
  className={css(
129
128
  styles.formControl,
130
- isIconSprite && styles.modifiers.iconSprite,
129
+ readOnlyVariant && styles.modifiers.readonly,
131
130
  readOnlyVariant === 'plain' && styles.modifiers.plain,
132
- className,
133
- resizeOrientation !== TextAreResizeOrientation.both && styles.modifiers[orientation],
134
- validated === ValidatedOptions.success && styles.modifiers.success,
135
- validated === ValidatedOptions.warning && styles.modifiers.warning
131
+ resizeOrientation && styles.modifiers[orientation],
132
+ isDisabled && styles.modifiers.disabled,
133
+ hasStatusIcon && styles.modifiers[validated as 'success' | 'warning' | 'error'],
134
+ className
135
+ )}
136
+ >
137
+ <textarea
138
+ onChange={this.handleChange}
139
+ {...(typeof this.props.defaultValue !== 'string' && { value })}
140
+ aria-invalid={validated === ValidatedOptions.error}
141
+ required={isRequired}
142
+ disabled={isDisabled || disabled}
143
+ readOnly={!!readOnlyVariant}
144
+ ref={innerRef || this.inputRef}
145
+ {...props}
146
+ />
147
+ {hasStatusIcon && (
148
+ <div className={css(styles.formControlUtilities)}>
149
+ <FormControlIcon status={validated as 'success' | 'error' | 'warning'} />
150
+ </div>
136
151
  )}
137
- onChange={this.handleChange}
138
- {...(typeof this.props.defaultValue !== 'string' && { value })}
139
- aria-invalid={validated === ValidatedOptions.error}
140
- required={isRequired}
141
- disabled={isDisabled || disabled}
142
- readOnly={!!readOnlyVariant || isReadOnly}
143
- ref={innerRef || this.inputRef}
144
- {...props}
145
- />
152
+ </div>
146
153
  );
147
154
  }
148
155
  }
@@ -32,7 +32,7 @@ test('Renders simple text input', () => {
32
32
  test('Renders with custom class passed', () => {
33
33
  render(<TextArea aria-label="custom class textarea" className="test-class" />);
34
34
 
35
- expect(screen.getByRole('textbox')).toHaveClass('test-class');
35
+ expect(screen.getByRole('textbox').parentElement).toHaveClass('test-class');
36
36
  });
37
37
 
38
38
  test('Renders text area with required attribute using isRequired', () => {
@@ -69,17 +69,17 @@ test('Text area is not read only by default', () => {
69
69
 
70
70
  test('Renders text area with default class name only', () => {
71
71
  render(<TextArea aria-label="validated textarea" />);
72
- expect(screen.getByRole('textbox')).toHaveClass('pf-v5-c-form-control', { exact: true });
72
+ expect(screen.getByRole('textbox').parentElement).toHaveClass('pf-v5-c-form-control');
73
73
  });
74
74
 
75
75
  test('Renders validated text area with success className', () => {
76
76
  render(<TextArea aria-label="validated textarea" validated={ValidatedOptions.success} />);
77
- expect(screen.getByRole('textbox')).toHaveClass('pf-m-success');
77
+ expect(screen.getByRole('textbox').parentElement).toHaveClass('pf-m-success');
78
78
  });
79
79
 
80
80
  test('Renders validated text area with warning className', () => {
81
81
  render(<TextArea aria-label="validated textarea" validated={ValidatedOptions.warning} />);
82
- expect(screen.getByRole('textbox')).toHaveClass('pf-m-warning');
82
+ expect(screen.getByRole('textbox').parentElement).toHaveClass('pf-m-warning');
83
83
  });
84
84
 
85
85
  test('Renders invalid text area', () => {
@@ -94,12 +94,12 @@ test('Text area is not invalid by default', () => {
94
94
 
95
95
  test('Renders vertically resizable text area', () => {
96
96
  render(<TextArea aria-label="vertical resize textarea" resizeOrientation="vertical" />);
97
- expect(screen.getByRole('textbox')).toHaveClass('pf-m-resize-vertical');
97
+ expect(screen.getByRole('textbox').parentElement).toHaveClass('pf-m-resize-vertical');
98
98
  });
99
99
 
100
100
  test('Renders horizontally resizable text area', () => {
101
101
  render(<TextArea aria-label="horizontal resize textarea" resizeOrientation="horizontal" />);
102
- expect(screen.getByRole('textbox')).toHaveClass('pf-m-resize-horizontal');
102
+ expect(screen.getByRole('textbox').parentElement).toHaveClass('pf-m-resize-horizontal');
103
103
  });
104
104
 
105
105
  test('Throws console error when no aria-label or id is given', () => {
@@ -2,13 +2,16 @@
2
2
 
3
3
  exports[`Matches the snapshot 1`] = `
4
4
  <DocumentFragment>
5
- <textarea
6
- aria-invalid="false"
7
- aria-label="test textarea"
8
- class="pf-v5-c-form-control custom class"
9
- disabled=""
10
- required=""
11
- style="--pf-v5-c-form-control--textarea--Height: 6px;"
12
- />
5
+ <div
6
+ class="pf-v5-c-form-control pf-m-resize-both pf-m-disabled custom class"
7
+ style="height: 6px;"
8
+ >
9
+ <textarea
10
+ aria-invalid="false"
11
+ aria-label="test textarea"
12
+ disabled=""
13
+ required=""
14
+ />
15
+ </div>
13
16
  </DocumentFragment>
14
17
  `;
@@ -11,51 +11,53 @@ propComponents: ['TextArea']
11
11
  ### Basic
12
12
 
13
13
  ```ts file="./TextAreaBasic.tsx"
14
+
14
15
  ```
15
16
 
16
17
  ### Invalid
17
18
 
18
19
  ```ts file="./TextAreaInvalid.tsx"
20
+
19
21
  ```
20
22
 
21
23
  ### Validated
22
24
 
23
25
  ```ts file="./TextAreaValidated.tsx"
26
+
24
27
  ```
25
28
 
26
29
  ### Vertically resizable
27
30
 
28
31
  ```ts file="./TextAreaVerticallyResizable.tsx"
32
+
29
33
  ```
30
34
 
31
35
  ### Horizontally resizable
32
36
 
33
37
  ```ts file="./TextAreaHorizontallyResizable.tsx"
38
+
34
39
  ```
35
40
 
36
41
  ### Uncontrolled
37
42
 
38
43
  ```ts file="./TextAreaUncontrolled.tsx"
44
+
39
45
  ```
40
46
 
41
47
  ### Disabled
42
48
 
43
49
  ```ts file="./TextAreaDisabled.tsx"
50
+
44
51
  ```
45
52
 
46
53
  ### Read only
47
54
 
48
55
  ```ts file="./TextAreaReadOnly.tsx"
56
+
49
57
  ```
50
58
 
51
59
  ### Auto resizing
52
60
 
53
61
  ```ts file="./TextAreaAutoResizing.tsx"
54
- ```
55
-
56
- ### Icon sprite variants
57
-
58
- **Note:** The icons for the success, invalid, calendar, etc. variations in form control elements are applied as background images to the form element. By default, the image URLs for these icons are data URIs. However, there may be cases where data URIs are not ideal, such as in an application with a content security policy that disallows data URIs for security reasons. The `isIconSprite` variation changes the icon source to an external SVG file that serves as a sprite for all of the supported icons.
59
62
 
60
- ```ts file="./TextAreaIconSprite.tsx"
61
63
  ```
@@ -5,6 +5,7 @@ import { ValidatedOptions } from '../../helpers/constants';
5
5
  import { trimLeft } from '../../helpers/util';
6
6
  import { getDefaultOUIAId, getOUIAProps, OUIAProps } from '../../helpers';
7
7
  import { getResizeObserver } from '../../helpers/resizeObserver';
8
+ import { FormControlIcon } from '../FormControl/FormControlIcon';
8
9
 
9
10
  export enum TextInputTypes {
10
11
  text = 'text',
@@ -25,7 +26,6 @@ export enum TextInputReadOnlyVariant {
25
26
  plain = 'plain'
26
27
  }
27
28
 
28
-
29
29
  export interface TextInputProps
30
30
  extends Omit<React.HTMLProps<HTMLInputElement>, 'onChange' | 'onFocus' | 'onBlur' | 'disabled' | 'ref'>,
31
31
  OUIAProps {
@@ -33,10 +33,11 @@ export interface TextInputProps
33
33
  className?: string;
34
34
  /** Flag to show if the text input is disabled. */
35
35
  isDisabled?: boolean;
36
- /** @deprecated Use readOnlyVariant instead. Flag to show if the text input is read only. */
37
- isReadOnly?: boolean;
38
- /** Read only variant. */
36
+ /** Flag to apply expanded styling */
37
+ isExpanded?: boolean;
38
+ /** Sets the input as readonly and determines the readonly styling. */
39
39
  readOnlyVariant?: 'plain' | 'default';
40
+ /** Flag indicating whether the input is required */
40
41
  isRequired?: boolean;
41
42
  /** Value to indicate if the text input is modified to show that validation state.
42
43
  * If set to success, text input will be modified to indicate valid state.
@@ -60,6 +61,8 @@ export interface TextInputProps
60
61
  | 'url';
61
62
  /** Value of the text input. */
62
63
  value?: string | number;
64
+ /** Placeholder of the text input when there is no value */
65
+ placeholder?: string;
63
66
  /** Aria-label. The text input requires an associated id or aria-label. */
64
67
  'aria-label'?: string;
65
68
  /** @hide A reference object to attach to the text input box. */
@@ -70,14 +73,8 @@ export interface TextInputProps
70
73
  onFocus?: (event?: any) => void;
71
74
  /** Callback function when text input is blurred (focus leaves) */
72
75
  onBlur?: (event?: any) => void;
73
- /** icon variant */
74
- iconVariant?: 'calendar' | 'clock' | 'search';
75
- /** Use the external file instead of a data URI */
76
- isIconSprite?: boolean;
77
- /** Custom icon url to set as the text input's background-image */
78
- customIconUrl?: string;
79
- /** Dimensions for the custom icon set as the text input's background-size */
80
- customIconDimensions?: string;
76
+ /** Custom icon to render. If the validated prop is also passed, this will render an icon in addition to a validated icon. */
77
+ customIcon?: React.ReactNode;
81
78
  /** Value to overwrite the randomly generated data-ouia-component-id.*/
82
79
  ouiaId?: number | string;
83
80
  /** Set the value of data-ouia-safe. Only set to true when the component is in a static state, i.e. no animations are occurring. At all other times, this value must be false. */
@@ -92,12 +89,10 @@ export class TextInputBase extends React.Component<TextInputProps, TextInputStat
92
89
  static displayName = 'TextInputBase';
93
90
  static defaultProps: TextInputProps = {
94
91
  'aria-label': null,
95
- className: '',
96
92
  isRequired: false,
97
93
  validated: 'default' as 'success' | 'warning' | 'error' | 'default',
98
94
  isDisabled: false,
99
- isReadOnly: false,
100
- isIconSprite: false,
95
+ isExpanded: false,
101
96
  type: TextInputTypes.text,
102
97
  isLeftTruncated: false,
103
98
  onChange: (): any => undefined,
@@ -174,60 +169,61 @@ export class TextInputBase extends React.Component<TextInputProps, TextInputStat
174
169
  className,
175
170
  type,
176
171
  value,
172
+ placeholder,
177
173
  validated,
178
174
  /* eslint-disable @typescript-eslint/no-unused-vars */
179
175
  onChange,
180
176
  onFocus,
181
177
  onBlur,
182
178
  isLeftTruncated,
183
- isReadOnly,
179
+ isExpanded,
184
180
  readOnly,
185
181
  readOnlyVariant,
186
182
  isRequired,
187
183
  isDisabled,
188
- isIconSprite,
189
- iconVariant,
190
- customIconUrl,
191
- customIconDimensions,
184
+ customIcon,
192
185
  ouiaId,
193
186
  ouiaSafe,
194
187
  ...props
195
188
  } = this.props;
196
189
 
197
- const customIconStyle = {} as any;
198
- if (customIconUrl) {
199
- customIconStyle.backgroundImage = `url('${customIconUrl}')`;
200
- }
201
- if (customIconDimensions) {
202
- customIconStyle.backgroundSize = customIconDimensions;
203
- }
190
+ const hasStatusIcon = ['success', 'error', 'warning'].includes(validated);
204
191
 
205
192
  return (
206
- <input
207
- {...props}
208
- onFocus={this.onFocus}
209
- onBlur={this.onBlur}
193
+ <div
210
194
  className={css(
211
195
  styles.formControl,
212
- isIconSprite && styles.modifiers.iconSprite,
196
+ readOnlyVariant && styles.modifiers.readonly,
213
197
  readOnlyVariant === 'plain' && styles.modifiers.plain,
214
- validated === ValidatedOptions.success && styles.modifiers.success,
215
- validated === ValidatedOptions.warning && styles.modifiers.warning,
216
- ((iconVariant && iconVariant !== 'search') || customIconUrl) && styles.modifiers.icon,
217
- iconVariant && styles.modifiers[iconVariant],
198
+ isDisabled && styles.modifiers.disabled,
199
+ isExpanded && styles.modifiers.expanded,
200
+ customIcon && styles.modifiers.icon,
201
+ hasStatusIcon && styles.modifiers[validated as 'success' | 'warning' | 'error'],
218
202
  className
219
203
  )}
220
- onChange={this.handleChange}
221
- type={type}
222
- value={this.sanitizeInputValue(value)}
223
- aria-invalid={props['aria-invalid'] ? props['aria-invalid'] : validated === ValidatedOptions.error}
224
- required={isRequired}
225
- disabled={isDisabled}
226
- readOnly={!!readOnlyVariant || isReadOnly || readOnly}
227
- ref={innerRef || this.inputRef}
228
- {...((customIconUrl || customIconDimensions) && { style: customIconStyle })}
229
- {...getOUIAProps(TextInput.displayName, ouiaId !== undefined ? ouiaId : this.state.ouiaStateId, ouiaSafe)}
230
- />
204
+ >
205
+ <input
206
+ {...props}
207
+ onFocus={this.onFocus}
208
+ onBlur={this.onBlur}
209
+ onChange={this.handleChange}
210
+ type={type}
211
+ value={this.sanitizeInputValue(value)}
212
+ aria-invalid={props['aria-invalid'] ? props['aria-invalid'] : validated === ValidatedOptions.error}
213
+ required={isRequired}
214
+ disabled={isDisabled}
215
+ readOnly={!!readOnlyVariant || readOnly}
216
+ ref={innerRef || this.inputRef}
217
+ placeholder={placeholder}
218
+ {...getOUIAProps(TextInput.displayName, ouiaId !== undefined ? ouiaId : this.state.ouiaStateId, ouiaSafe)}
219
+ />
220
+ {(customIcon || hasStatusIcon) && (
221
+ <div className={css(styles.formControlUtilities)}>
222
+ {customIcon && <FormControlIcon customIcon={customIcon} />}
223
+ {hasStatusIcon && <FormControlIcon status={validated as 'success' | 'error' | 'warning'} />}
224
+ </div>
225
+ )}
226
+ </div>
231
227
  );
232
228
  }
233
229
 
@@ -59,12 +59,12 @@ describe('TextInput', () => {
59
59
 
60
60
  test('validated text input success', () => {
61
61
  render(<TextInput {...props} required validated={ValidatedOptions.success} aria-label="validated text input" />);
62
- expect(screen.getByLabelText('validated text input')).toHaveClass('pf-m-success');
62
+ expect(screen.getByLabelText('validated text input').parentElement).toHaveClass('pf-m-success');
63
63
  });
64
64
 
65
65
  test('validated text input warning', () => {
66
66
  render(<TextInput {...props} required validated={ValidatedOptions.warning} aria-label="validated text input" />);
67
- expect(screen.getByLabelText('validated text input')).toHaveClass('pf-m-warning');
67
+ expect(screen.getByLabelText('validated text input').parentElement).toHaveClass('pf-m-warning');
68
68
  });
69
69
 
70
70
  test('validated text input error', () => {