@patternfly/react-core 5.0.0-alpha.107 → 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 (424) hide show
  1. package/CHANGELOG.md +12 -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/Dropdown.d.ts +11 -3
  46. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
  47. package/dist/esm/components/Dropdown/Dropdown.js +11 -5
  48. package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
  49. package/dist/esm/components/Dropdown/package.json +1 -1
  50. package/dist/esm/components/DualListSelector/package.json +1 -1
  51. package/dist/esm/components/EmptyState/package.json +1 -1
  52. package/dist/esm/components/ExpandableSection/package.json +1 -1
  53. package/dist/esm/components/FileUpload/FileUploadField.js +2 -2
  54. package/dist/esm/components/FileUpload/FileUploadField.js.map +1 -1
  55. package/dist/esm/components/FileUpload/package.json +1 -1
  56. package/dist/esm/components/Form/package.json +1 -1
  57. package/dist/esm/components/FormControl/FormControlIcon.d.ts +16 -0
  58. package/dist/esm/components/FormControl/FormControlIcon.d.ts.map +1 -0
  59. package/dist/esm/components/FormControl/FormControlIcon.js +18 -0
  60. package/dist/esm/components/FormControl/FormControlIcon.js.map +1 -0
  61. package/dist/esm/components/FormSelect/FormSelect.d.ts +0 -2
  62. package/dist/esm/components/FormSelect/FormSelect.d.ts.map +1 -1
  63. package/dist/esm/components/FormSelect/FormSelect.js +9 -3
  64. package/dist/esm/components/FormSelect/FormSelect.js.map +1 -1
  65. package/dist/esm/components/FormSelect/package.json +1 -1
  66. package/dist/esm/components/HelperText/package.json +1 -1
  67. package/dist/esm/components/Hint/package.json +1 -1
  68. package/dist/esm/components/Icon/package.json +1 -1
  69. package/dist/esm/components/InputGroup/package.json +1 -1
  70. package/dist/esm/components/JumpLinks/package.json +1 -1
  71. package/dist/esm/components/Label/package.json +1 -1
  72. package/dist/esm/components/List/package.json +1 -1
  73. package/dist/esm/components/LoginPage/package.json +1 -1
  74. package/dist/esm/components/Masthead/package.json +1 -1
  75. package/dist/esm/components/Menu/package.json +1 -1
  76. package/dist/esm/components/MenuToggle/package.json +1 -1
  77. package/dist/esm/components/Modal/package.json +1 -1
  78. package/dist/esm/components/MultipleFileUpload/package.json +1 -1
  79. package/dist/esm/components/Nav/package.json +1 -1
  80. package/dist/esm/components/NotificationBadge/package.json +1 -1
  81. package/dist/esm/components/NotificationDrawer/package.json +1 -1
  82. package/dist/esm/components/NumberInput/package.json +1 -1
  83. package/dist/esm/components/OverflowMenu/package.json +1 -1
  84. package/dist/esm/components/Page/package.json +1 -1
  85. package/dist/esm/components/Pagination/package.json +1 -1
  86. package/dist/esm/components/Panel/package.json +1 -1
  87. package/dist/esm/components/Popover/package.json +1 -1
  88. package/dist/esm/components/Progress/package.json +1 -1
  89. package/dist/esm/components/ProgressStepper/package.json +1 -1
  90. package/dist/esm/components/Radio/Radio.d.ts +5 -1
  91. package/dist/esm/components/Radio/Radio.d.ts.map +1 -1
  92. package/dist/esm/components/Radio/Radio.js +3 -3
  93. package/dist/esm/components/Radio/Radio.js.map +1 -1
  94. package/dist/esm/components/Radio/package.json +1 -1
  95. package/dist/esm/components/SearchInput/package.json +1 -1
  96. package/dist/esm/components/Select/Select.d.ts +31 -5
  97. package/dist/esm/components/Select/Select.d.ts.map +1 -1
  98. package/dist/esm/components/Select/Select.js +16 -10
  99. package/dist/esm/components/Select/Select.js.map +1 -1
  100. package/dist/esm/components/Select/SelectGroup.d.ts +3 -0
  101. package/dist/esm/components/Select/SelectGroup.d.ts.map +1 -1
  102. package/dist/esm/components/Select/SelectGroup.js.map +1 -1
  103. package/dist/esm/components/Select/SelectOption.d.ts +14 -1
  104. package/dist/esm/components/Select/SelectOption.d.ts.map +1 -1
  105. package/dist/esm/components/Select/SelectOption.js +4 -3
  106. package/dist/esm/components/Select/SelectOption.js.map +1 -1
  107. package/dist/esm/components/Select/package.json +1 -1
  108. package/dist/esm/components/Sidebar/package.json +1 -1
  109. package/dist/esm/components/SimpleList/package.json +1 -1
  110. package/dist/esm/components/Skeleton/package.json +1 -1
  111. package/dist/esm/components/SkipToContent/package.json +1 -1
  112. package/dist/esm/components/Slider/Slider.d.ts.map +1 -1
  113. package/dist/esm/components/Slider/Slider.js +1 -1
  114. package/dist/esm/components/Slider/Slider.js.map +1 -1
  115. package/dist/esm/components/Slider/package.json +1 -1
  116. package/dist/esm/components/Spinner/package.json +1 -1
  117. package/dist/esm/components/Switch/package.json +1 -1
  118. package/dist/esm/components/Tabs/package.json +1 -1
  119. package/dist/esm/components/Text/package.json +1 -1
  120. package/dist/esm/components/TextArea/TextArea.d.ts +0 -4
  121. package/dist/esm/components/TextArea/TextArea.d.ts.map +1 -1
  122. package/dist/esm/components/TextArea/TextArea.js +11 -7
  123. package/dist/esm/components/TextArea/TextArea.js.map +1 -1
  124. package/dist/esm/components/TextArea/package.json +1 -1
  125. package/dist/esm/components/TextInput/TextInput.d.ts +8 -11
  126. package/dist/esm/components/TextInput/TextInput.d.ts.map +1 -1
  127. package/dist/esm/components/TextInput/TextInput.js +10 -13
  128. package/dist/esm/components/TextInput/TextInput.js.map +1 -1
  129. package/dist/esm/components/TextInput/package.json +1 -1
  130. package/dist/esm/components/TextInputGroup/package.json +1 -1
  131. package/dist/esm/components/Tile/package.json +1 -1
  132. package/dist/esm/components/TimePicker/TimePicker.d.ts.map +1 -1
  133. package/dist/esm/components/TimePicker/TimePicker.js +2 -2
  134. package/dist/esm/components/TimePicker/TimePicker.js.map +1 -1
  135. package/dist/esm/components/TimePicker/package.json +1 -1
  136. package/dist/esm/components/Timestamp/package.json +1 -1
  137. package/dist/esm/components/Title/package.json +1 -1
  138. package/dist/esm/components/ToggleGroup/package.json +1 -1
  139. package/dist/esm/components/Toolbar/package.json +1 -1
  140. package/dist/esm/components/Tooltip/package.json +1 -1
  141. package/dist/esm/components/TreeView/TreeViewSearch.d.ts.map +1 -1
  142. package/dist/esm/components/TreeView/TreeViewSearch.js +6 -1
  143. package/dist/esm/components/TreeView/TreeViewSearch.js.map +1 -1
  144. package/dist/esm/components/TreeView/package.json +1 -1
  145. package/dist/esm/components/Truncate/package.json +1 -1
  146. package/dist/esm/components/Wizard/hooks/package.json +1 -1
  147. package/dist/esm/components/Wizard/package.json +1 -1
  148. package/dist/esm/components/package.json +1 -1
  149. package/dist/esm/deprecated/components/ApplicationLauncher/package.json +1 -1
  150. package/dist/esm/deprecated/components/ContextSelector/package.json +1 -1
  151. package/dist/esm/deprecated/components/Dropdown/package.json +1 -1
  152. package/dist/esm/deprecated/components/OptionsMenu/package.json +1 -1
  153. package/dist/esm/deprecated/components/PageHeader/package.json +1 -1
  154. package/dist/esm/deprecated/components/Select/Select.d.ts.map +1 -1
  155. package/dist/esm/deprecated/components/Select/Select.js +16 -18
  156. package/dist/esm/deprecated/components/Select/Select.js.map +1 -1
  157. package/dist/esm/deprecated/components/Select/package.json +1 -1
  158. package/dist/esm/deprecated/components/Wizard/package.json +1 -1
  159. package/dist/esm/deprecated/components/package.json +1 -1
  160. package/dist/esm/deprecated/package.json +1 -1
  161. package/dist/esm/helpers/Popper/Popper.d.ts +1 -1
  162. package/dist/esm/helpers/Popper/Popper.d.ts.map +1 -1
  163. package/dist/esm/helpers/Popper/thirdparty/popper-core/package.json +1 -1
  164. package/dist/esm/helpers/package.json +1 -1
  165. package/dist/esm/layouts/Bullseye/package.json +1 -1
  166. package/dist/esm/layouts/Flex/package.json +1 -1
  167. package/dist/esm/layouts/Gallery/package.json +1 -1
  168. package/dist/esm/layouts/Grid/package.json +1 -1
  169. package/dist/esm/layouts/Level/package.json +1 -1
  170. package/dist/esm/layouts/Split/package.json +1 -1
  171. package/dist/esm/layouts/Stack/package.json +1 -1
  172. package/dist/esm/layouts/package.json +1 -1
  173. package/dist/esm/next/components/package.json +1 -1
  174. package/dist/esm/next/package.json +1 -1
  175. package/dist/esm/package.json +1 -1
  176. package/dist/js/components/AboutModal/package.json +1 -1
  177. package/dist/js/components/Accordion/package.json +1 -1
  178. package/dist/js/components/ActionList/package.json +1 -1
  179. package/dist/js/components/Alert/package.json +1 -1
  180. package/dist/js/components/Avatar/package.json +1 -1
  181. package/dist/js/components/BackToTop/package.json +1 -1
  182. package/dist/js/components/Backdrop/package.json +1 -1
  183. package/dist/js/components/BackgroundImage/package.json +1 -1
  184. package/dist/js/components/Badge/package.json +1 -1
  185. package/dist/js/components/Banner/package.json +1 -1
  186. package/dist/js/components/Brand/package.json +1 -1
  187. package/dist/js/components/Breadcrumb/package.json +1 -1
  188. package/dist/js/components/Button/package.json +1 -1
  189. package/dist/js/components/CalendarMonth/package.json +1 -1
  190. package/dist/js/components/Card/Card.d.ts +12 -5
  191. package/dist/js/components/Card/Card.d.ts.map +1 -1
  192. package/dist/js/components/Card/Card.js +17 -5
  193. package/dist/js/components/Card/Card.js.map +1 -1
  194. package/dist/js/components/Card/CardHeader.d.ts +30 -0
  195. package/dist/js/components/Card/CardHeader.d.ts.map +1 -1
  196. package/dist/js/components/Card/CardHeader.js +40 -5
  197. package/dist/js/components/Card/CardHeader.js.map +1 -1
  198. package/dist/js/components/Card/CardSelectableActions.d.ts +9 -0
  199. package/dist/js/components/Card/CardSelectableActions.d.ts.map +1 -0
  200. package/dist/js/components/Card/CardSelectableActions.js +14 -0
  201. package/dist/js/components/Card/CardSelectableActions.js.map +1 -0
  202. package/dist/js/components/Card/package.json +1 -1
  203. package/dist/js/components/Checkbox/Checkbox.d.ts +2 -0
  204. package/dist/js/components/Checkbox/Checkbox.d.ts.map +1 -1
  205. package/dist/js/components/Checkbox/Checkbox.js +2 -2
  206. package/dist/js/components/Checkbox/Checkbox.js.map +1 -1
  207. package/dist/js/components/Checkbox/package.json +1 -1
  208. package/dist/js/components/Chip/package.json +1 -1
  209. package/dist/js/components/ClipboardCopy/ClipboardCopy.js +4 -4
  210. package/dist/js/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
  211. package/dist/js/components/ClipboardCopy/package.json +1 -1
  212. package/dist/js/components/CodeBlock/package.json +1 -1
  213. package/dist/js/components/DataList/package.json +1 -1
  214. package/dist/js/components/DatePicker/package.json +1 -1
  215. package/dist/js/components/DescriptionList/package.json +1 -1
  216. package/dist/js/components/Divider/package.json +1 -1
  217. package/dist/js/components/DragDrop/package.json +1 -1
  218. package/dist/js/components/Drawer/package.json +1 -1
  219. package/dist/js/components/Dropdown/Dropdown.d.ts +11 -3
  220. package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
  221. package/dist/js/components/Dropdown/Dropdown.js +11 -5
  222. package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
  223. package/dist/js/components/Dropdown/package.json +1 -1
  224. package/dist/js/components/DualListSelector/package.json +1 -1
  225. package/dist/js/components/EmptyState/package.json +1 -1
  226. package/dist/js/components/ExpandableSection/package.json +1 -1
  227. package/dist/js/components/FileUpload/FileUploadField.js +2 -2
  228. package/dist/js/components/FileUpload/FileUploadField.js.map +1 -1
  229. package/dist/js/components/FileUpload/package.json +1 -1
  230. package/dist/js/components/Form/package.json +1 -1
  231. package/dist/js/components/FormControl/FormControlIcon.d.ts +16 -0
  232. package/dist/js/components/FormControl/FormControlIcon.d.ts.map +1 -0
  233. package/dist/js/components/FormControl/FormControlIcon.js +22 -0
  234. package/dist/js/components/FormControl/FormControlIcon.js.map +1 -0
  235. package/dist/js/components/FormSelect/FormSelect.d.ts +0 -2
  236. package/dist/js/components/FormSelect/FormSelect.d.ts.map +1 -1
  237. package/dist/js/components/FormSelect/FormSelect.js +9 -3
  238. package/dist/js/components/FormSelect/FormSelect.js.map +1 -1
  239. package/dist/js/components/FormSelect/package.json +1 -1
  240. package/dist/js/components/HelperText/package.json +1 -1
  241. package/dist/js/components/Hint/package.json +1 -1
  242. package/dist/js/components/Icon/package.json +1 -1
  243. package/dist/js/components/InputGroup/package.json +1 -1
  244. package/dist/js/components/JumpLinks/package.json +1 -1
  245. package/dist/js/components/Label/package.json +1 -1
  246. package/dist/js/components/List/package.json +1 -1
  247. package/dist/js/components/LoginPage/package.json +1 -1
  248. package/dist/js/components/Masthead/package.json +1 -1
  249. package/dist/js/components/Menu/package.json +1 -1
  250. package/dist/js/components/MenuToggle/package.json +1 -1
  251. package/dist/js/components/Modal/package.json +1 -1
  252. package/dist/js/components/MultipleFileUpload/package.json +1 -1
  253. package/dist/js/components/Nav/package.json +1 -1
  254. package/dist/js/components/NotificationBadge/package.json +1 -1
  255. package/dist/js/components/NotificationDrawer/package.json +1 -1
  256. package/dist/js/components/NumberInput/package.json +1 -1
  257. package/dist/js/components/OverflowMenu/package.json +1 -1
  258. package/dist/js/components/Page/package.json +1 -1
  259. package/dist/js/components/Pagination/package.json +1 -1
  260. package/dist/js/components/Panel/package.json +1 -1
  261. package/dist/js/components/Popover/package.json +1 -1
  262. package/dist/js/components/Progress/package.json +1 -1
  263. package/dist/js/components/ProgressStepper/package.json +1 -1
  264. package/dist/js/components/Radio/Radio.d.ts +5 -1
  265. package/dist/js/components/Radio/Radio.d.ts.map +1 -1
  266. package/dist/js/components/Radio/Radio.js +3 -3
  267. package/dist/js/components/Radio/Radio.js.map +1 -1
  268. package/dist/js/components/Radio/package.json +1 -1
  269. package/dist/js/components/SearchInput/package.json +1 -1
  270. package/dist/js/components/Select/Select.d.ts +31 -5
  271. package/dist/js/components/Select/Select.d.ts.map +1 -1
  272. package/dist/js/components/Select/Select.js +16 -10
  273. package/dist/js/components/Select/Select.js.map +1 -1
  274. package/dist/js/components/Select/SelectGroup.d.ts +3 -0
  275. package/dist/js/components/Select/SelectGroup.d.ts.map +1 -1
  276. package/dist/js/components/Select/SelectGroup.js.map +1 -1
  277. package/dist/js/components/Select/SelectOption.d.ts +14 -1
  278. package/dist/js/components/Select/SelectOption.d.ts.map +1 -1
  279. package/dist/js/components/Select/SelectOption.js +4 -4
  280. package/dist/js/components/Select/SelectOption.js.map +1 -1
  281. package/dist/js/components/Select/package.json +1 -1
  282. package/dist/js/components/Sidebar/package.json +1 -1
  283. package/dist/js/components/SimpleList/package.json +1 -1
  284. package/dist/js/components/Skeleton/package.json +1 -1
  285. package/dist/js/components/SkipToContent/package.json +1 -1
  286. package/dist/js/components/Slider/Slider.d.ts.map +1 -1
  287. package/dist/js/components/Slider/Slider.js +1 -1
  288. package/dist/js/components/Slider/Slider.js.map +1 -1
  289. package/dist/js/components/Slider/package.json +1 -1
  290. package/dist/js/components/Spinner/package.json +1 -1
  291. package/dist/js/components/Switch/package.json +1 -1
  292. package/dist/js/components/Tabs/package.json +1 -1
  293. package/dist/js/components/Text/package.json +1 -1
  294. package/dist/js/components/TextArea/TextArea.d.ts +0 -4
  295. package/dist/js/components/TextArea/TextArea.d.ts.map +1 -1
  296. package/dist/js/components/TextArea/TextArea.js +11 -7
  297. package/dist/js/components/TextArea/TextArea.js.map +1 -1
  298. package/dist/js/components/TextArea/package.json +1 -1
  299. package/dist/js/components/TextInput/TextInput.d.ts +8 -11
  300. package/dist/js/components/TextInput/TextInput.d.ts.map +1 -1
  301. package/dist/js/components/TextInput/TextInput.js +10 -13
  302. package/dist/js/components/TextInput/TextInput.js.map +1 -1
  303. package/dist/js/components/TextInput/package.json +1 -1
  304. package/dist/js/components/TextInputGroup/package.json +1 -1
  305. package/dist/js/components/Tile/package.json +1 -1
  306. package/dist/js/components/TimePicker/TimePicker.d.ts.map +1 -1
  307. package/dist/js/components/TimePicker/TimePicker.js +2 -2
  308. package/dist/js/components/TimePicker/TimePicker.js.map +1 -1
  309. package/dist/js/components/TimePicker/package.json +1 -1
  310. package/dist/js/components/Timestamp/package.json +1 -1
  311. package/dist/js/components/Title/package.json +1 -1
  312. package/dist/js/components/ToggleGroup/package.json +1 -1
  313. package/dist/js/components/Toolbar/package.json +1 -1
  314. package/dist/js/components/Tooltip/package.json +1 -1
  315. package/dist/js/components/TreeView/TreeViewSearch.d.ts.map +1 -1
  316. package/dist/js/components/TreeView/TreeViewSearch.js +6 -1
  317. package/dist/js/components/TreeView/TreeViewSearch.js.map +1 -1
  318. package/dist/js/components/TreeView/package.json +1 -1
  319. package/dist/js/components/Truncate/package.json +1 -1
  320. package/dist/js/components/Wizard/hooks/package.json +1 -1
  321. package/dist/js/components/Wizard/package.json +1 -1
  322. package/dist/js/components/package.json +1 -1
  323. package/dist/js/deprecated/components/ApplicationLauncher/package.json +1 -1
  324. package/dist/js/deprecated/components/ContextSelector/package.json +1 -1
  325. package/dist/js/deprecated/components/Dropdown/package.json +1 -1
  326. package/dist/js/deprecated/components/OptionsMenu/package.json +1 -1
  327. package/dist/js/deprecated/components/PageHeader/package.json +1 -1
  328. package/dist/js/deprecated/components/Select/Select.d.ts.map +1 -1
  329. package/dist/js/deprecated/components/Select/Select.js +16 -18
  330. package/dist/js/deprecated/components/Select/Select.js.map +1 -1
  331. package/dist/js/deprecated/components/Select/package.json +1 -1
  332. package/dist/js/deprecated/components/Wizard/package.json +1 -1
  333. package/dist/js/deprecated/components/package.json +1 -1
  334. package/dist/js/deprecated/package.json +1 -1
  335. package/dist/js/helpers/Popper/Popper.d.ts +1 -1
  336. package/dist/js/helpers/Popper/Popper.d.ts.map +1 -1
  337. package/dist/js/helpers/Popper/thirdparty/popper-core/package.json +1 -1
  338. package/dist/js/helpers/package.json +1 -1
  339. package/dist/js/layouts/Bullseye/package.json +1 -1
  340. package/dist/js/layouts/Flex/package.json +1 -1
  341. package/dist/js/layouts/Gallery/package.json +1 -1
  342. package/dist/js/layouts/Grid/package.json +1 -1
  343. package/dist/js/layouts/Level/package.json +1 -1
  344. package/dist/js/layouts/Split/package.json +1 -1
  345. package/dist/js/layouts/Stack/package.json +1 -1
  346. package/dist/js/layouts/package.json +1 -1
  347. package/dist/js/next/components/package.json +1 -1
  348. package/dist/js/next/package.json +1 -1
  349. package/dist/js/package.json +1 -1
  350. package/dist/umd/react-core.min.js +2 -2
  351. package/package.json +6 -6
  352. package/src/components/Card/Card.tsx +34 -9
  353. package/src/components/Card/CardHeader.tsx +94 -2
  354. package/src/components/Card/CardSelectableActions.tsx +21 -0
  355. package/src/components/Card/__tests__/Card.test.tsx +11 -7
  356. package/src/components/Card/__tests__/__snapshots__/CardHeader.test.tsx.snap +1 -3
  357. package/src/components/Card/examples/Card.md +59 -16
  358. package/src/components/Card/examples/CardClickable.tsx +54 -0
  359. package/src/components/Card/examples/CardClickableSelectable.tsx +94 -0
  360. package/src/components/Card/examples/{CardLegacySelectable.tsx → CardDeprecatedSelectable.tsx} +2 -0
  361. package/src/components/Card/examples/{CardSelectableA11yHighlight.tsx → CardDeprecatedSelectableA11yHighlight.tsx} +1 -1
  362. package/src/components/Card/examples/CardSelectable.tsx +60 -115
  363. package/src/components/Card/examples/CardSingleSelectable.tsx +52 -0
  364. package/src/components/Checkbox/Checkbox.tsx +5 -2
  365. package/src/components/ClipboardCopy/ClipboardCopy.tsx +4 -4
  366. package/src/components/ClipboardCopy/__tests__/Generated/__snapshots__/ClipboardCopy.test.tsx.snap +13 -10
  367. package/src/components/DatePicker/__tests__/__snapshots__/DatePicker.test.tsx.snap +67 -60
  368. package/src/components/Dropdown/Dropdown.tsx +25 -11
  369. package/src/components/Dropdown/examples/Dropdown.md +10 -1
  370. package/src/components/Dropdown/examples/DropdownBasic.tsx +2 -6
  371. package/src/components/Dropdown/examples/DropdownWithDescriptions.tsx +2 -6
  372. package/src/components/Dropdown/examples/DropdownWithGroups.tsx +2 -6
  373. package/src/components/Dropdown/examples/DropdownWithKebabToggle.tsx +2 -6
  374. package/src/components/FileUpload/FileUploadField.tsx +1 -1
  375. package/src/components/FileUpload/__tests__/__snapshots__/FileUpload.test.tsx.snap +28 -22
  376. package/src/components/FileUpload/__tests__/__snapshots__/FileUploadField.test.tsx.snap +28 -22
  377. package/src/components/FormControl/FormControlIcon.tsx +31 -0
  378. package/src/components/FormSelect/FormSelect.tsx +26 -20
  379. package/src/components/FormSelect/__tests__/FormSelect.test.tsx +2 -2
  380. package/src/components/FormSelect/__tests__/__snapshots__/FormSelect.test.tsx.snap +421 -178
  381. package/src/components/FormSelect/examples/FormSelect.md +7 -6
  382. package/src/components/LoginPage/__tests__/__snapshots__/LoginForm.test.tsx.snap +84 -66
  383. package/src/components/NumberInput/__tests__/__snapshots__/NumberInput.test.tsx.snap +217 -133
  384. package/src/components/Radio/Radio.tsx +7 -2
  385. package/src/components/SearchInput/__tests__/__snapshots__/SearchInput.test.tsx.snap +36 -27
  386. package/src/components/Select/Select.tsx +62 -24
  387. package/src/components/Select/SelectGroup.tsx +3 -0
  388. package/src/components/Select/SelectOption.tsx +22 -2
  389. package/src/components/Select/examples/Select.md +49 -2
  390. package/src/components/Select/examples/SelectBasic.tsx +27 -17
  391. package/src/components/Select/examples/SelectCheckbox.tsx +1 -3
  392. package/src/components/Select/examples/SelectFooter.tsx +57 -0
  393. package/src/components/Select/examples/SelectGrouped.tsx +14 -6
  394. package/src/components/Select/examples/SelectMultiTypeahead.tsx +7 -12
  395. package/src/components/Select/examples/SelectMultiTypeaheadCheckbox.tsx +204 -0
  396. package/src/components/Select/examples/SelectMultiTypeaheadCreatable.tsx +222 -0
  397. package/src/components/Select/examples/SelectOptionVariations.tsx +70 -0
  398. package/src/components/Select/examples/SelectTypeahead.tsx +13 -13
  399. package/src/components/Select/examples/SelectTypeaheadCreatable.tsx +220 -0
  400. package/src/components/Select/examples/SelectViewMore.tsx +146 -0
  401. package/src/components/Slider/Slider.tsx +0 -1
  402. package/src/components/Slider/_tests_/__snapshots__/Slider.test.tsx.snap +52 -40
  403. package/src/components/TextArea/TextArea.tsx +33 -26
  404. package/src/components/TextArea/__tests__/TextArea.test.tsx +6 -6
  405. package/src/components/TextArea/__tests__/__snapshots__/TextArea.test.tsx.snap +11 -8
  406. package/src/components/TextArea/examples/TextArea.md +8 -6
  407. package/src/components/TextInput/TextInput.tsx +43 -47
  408. package/src/components/TextInput/__tests__/TextInput.test.tsx +2 -2
  409. package/src/components/TextInput/__tests__/__snapshots__/TextInput.test.tsx.snap +130 -72
  410. package/src/components/TextInput/examples/TextInput.md +14 -5
  411. package/src/components/TextInput/examples/TextInputCustomIcon.tsx +30 -0
  412. package/src/components/TextInput/examples/TextInputCustomIconInvalid.tsx +20 -0
  413. package/src/components/TimePicker/TimePicker.tsx +2 -4
  414. package/src/components/TreeView/TreeViewSearch.tsx +9 -9
  415. package/src/components/TreeView/__tests__/__snapshots__/TreeView.test.tsx.snap +29 -7
  416. package/src/demos/ComposableMenu/ComposableMenu.md +14 -0
  417. package/src/demos/examples/DateTimePicker/DateTimePicker.tsx +1 -1
  418. package/src/deprecated/components/Select/Select.tsx +21 -25
  419. package/src/deprecated/components/Select/__tests__/__snapshots__/Select.test.tsx.snap +1 -2
  420. package/src/helpers/Popper/Popper.tsx +1 -1
  421. package/src/components/FormSelect/examples/FormSelectIconSpriteVariant.tsx +0 -63
  422. package/src/components/TextArea/examples/TextAreaIconSprite.tsx +0 -41
  423. package/src/components/TextInput/examples/TextInputIcon.tsx +0 -39
  424. package/src/components/TextInput/examples/TextInputIconSprite.tsx +0 -63
@@ -0,0 +1,220 @@
1
+ import React from 'react';
2
+ import {
3
+ Select,
4
+ SelectOption,
5
+ SelectList,
6
+ SelectOptionProps,
7
+ MenuToggle,
8
+ MenuToggleElement,
9
+ TextInputGroup,
10
+ TextInputGroupMain,
11
+ TextInputGroupUtilities,
12
+ Button
13
+ } from '@patternfly/react-core';
14
+ import TimesIcon from '@patternfly/react-icons/dist/esm/icons/times-icon';
15
+
16
+ let initialSelectOptions: SelectOptionProps[] = [
17
+ { itemId: 'Alabama', children: 'Alabama' },
18
+ { itemId: 'Florida', children: 'Florida' },
19
+ { itemId: 'New Jersey', children: 'New Jersey' },
20
+ { itemId: 'New Mexico', children: 'New Mexico' },
21
+ { itemId: 'New York', children: 'New York' },
22
+ { itemId: 'North Carolina', children: 'North Carolina' }
23
+ ];
24
+
25
+ export const SelectTypeaheadCreatable: React.FunctionComponent = () => {
26
+ const [isOpen, setIsOpen] = React.useState(false);
27
+ const [selected, setSelected] = React.useState<string>('');
28
+ const [inputValue, setInputValue] = React.useState<string>('');
29
+ const [filterValue, setFilterValue] = React.useState<string>('');
30
+ const [selectOptions, setSelectOptions] = React.useState<SelectOptionProps[]>(initialSelectOptions);
31
+ const [focusedItemIndex, setFocusedItemIndex] = React.useState<number | null>(null);
32
+ const [activeItem, setActiveItem] = React.useState<string | null>(null);
33
+ const [onCreation, setOnCreation] = React.useState<boolean>(false); // Boolean to refresh filter state after new option is created
34
+ const textInputRef = React.useRef<HTMLInputElement>();
35
+
36
+ React.useEffect(() => {
37
+ let newSelectOptions: SelectOptionProps[] = initialSelectOptions;
38
+
39
+ // Filter menu items based on the text input value when one exists
40
+ if (filterValue) {
41
+ newSelectOptions = initialSelectOptions.filter((menuItem) =>
42
+ String(menuItem.children).toLowerCase().includes(filterValue.toLowerCase())
43
+ );
44
+
45
+ // When no options are found after filtering, display creation option
46
+ if (!newSelectOptions.length) {
47
+ newSelectOptions = [{ isDisabled: false, children: `Create new option "${filterValue}"`, itemId: 'create' }];
48
+ }
49
+
50
+ // Open the menu when the input value changes and the new value is not empty
51
+ if (!isOpen) {
52
+ setIsOpen(true);
53
+ }
54
+ }
55
+
56
+ setSelectOptions(newSelectOptions);
57
+ setActiveItem(null);
58
+ setFocusedItemIndex(null);
59
+ }, [filterValue, onCreation]);
60
+
61
+ const onToggleClick = () => {
62
+ setIsOpen(!isOpen);
63
+ };
64
+
65
+ const onSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, itemId: string | number | undefined) => {
66
+ // eslint-disable-next-line no-console
67
+
68
+ if (itemId) {
69
+ if (itemId === 'create') {
70
+ if (!initialSelectOptions.some((item) => item.itemId === filterValue)) {
71
+ initialSelectOptions = [...initialSelectOptions, { itemId: filterValue, children: filterValue }];
72
+ }
73
+ setSelected(filterValue);
74
+ setOnCreation(!onCreation);
75
+ setFilterValue('');
76
+ } else {
77
+ // eslint-disable-next-line no-console
78
+ console.log('selected', itemId);
79
+ setInputValue(itemId as string);
80
+ setFilterValue('');
81
+ setSelected(itemId as string);
82
+ }
83
+ }
84
+
85
+ setIsOpen(false);
86
+ setFocusedItemIndex(null);
87
+ setActiveItem(null);
88
+ };
89
+
90
+ const onTextInputChange = (_event: React.FormEvent<HTMLInputElement>, value: string) => {
91
+ setInputValue(value);
92
+ setFilterValue(value);
93
+ };
94
+
95
+ const handleMenuArrowKeys = (key: string) => {
96
+ let indexToFocus;
97
+
98
+ if (isOpen) {
99
+ if (key === 'ArrowUp') {
100
+ // When no index is set or at the first index, focus to the last, otherwise decrement focus index
101
+ if (focusedItemIndex === null || focusedItemIndex === 0) {
102
+ indexToFocus = selectOptions.length - 1;
103
+ } else {
104
+ indexToFocus = focusedItemIndex - 1;
105
+ }
106
+ }
107
+
108
+ if (key === 'ArrowDown') {
109
+ // When no index is set or at the last index, focus to the first, otherwise increment focus index
110
+ if (focusedItemIndex === null || focusedItemIndex === selectOptions.length - 1) {
111
+ indexToFocus = 0;
112
+ } else {
113
+ indexToFocus = focusedItemIndex + 1;
114
+ }
115
+ }
116
+
117
+ setFocusedItemIndex(indexToFocus);
118
+ const focusedItem = selectOptions.filter((option) => !option.isDisabled)[indexToFocus];
119
+ setActiveItem(`select-create-typeahead-${focusedItem.itemId.replace(' ', '-')}`);
120
+ }
121
+ };
122
+
123
+ const onInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
124
+ const enabledMenuItems = selectOptions.filter((option) => !option.isDisabled);
125
+ const [firstMenuItem] = enabledMenuItems;
126
+ const focusedItem = focusedItemIndex ? enabledMenuItems[focusedItemIndex] : firstMenuItem;
127
+
128
+ switch (event.key) {
129
+ // Select the first available option
130
+ case 'Enter':
131
+ if (isOpen) {
132
+ onSelect(undefined, focusedItem.itemId as string);
133
+ setIsOpen((prevIsOpen) => !prevIsOpen);
134
+ setFocusedItemIndex(null);
135
+ setActiveItem(null);
136
+ }
137
+
138
+ setIsOpen((prevIsOpen) => !prevIsOpen);
139
+ setFocusedItemIndex(null);
140
+ setActiveItem(null);
141
+
142
+ break;
143
+ case 'Tab':
144
+ case 'Escape':
145
+ setIsOpen(false);
146
+ setActiveItem(null);
147
+ break;
148
+ case 'ArrowUp':
149
+ case 'ArrowDown':
150
+ event.preventDefault();
151
+ handleMenuArrowKeys(event.key);
152
+ break;
153
+ }
154
+ };
155
+
156
+ const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
157
+ <MenuToggle ref={toggleRef} variant="typeahead" onClick={onToggleClick} isExpanded={isOpen} isFullWidth>
158
+ <TextInputGroup isPlain>
159
+ <TextInputGroupMain
160
+ value={inputValue}
161
+ onClick={onToggleClick}
162
+ onChange={onTextInputChange}
163
+ onKeyDown={onInputKeyDown}
164
+ id="create-typeahead-select-input"
165
+ autoComplete="off"
166
+ innerRef={textInputRef}
167
+ placeholder="Select a state"
168
+ {...(activeItem && { 'aria-activedescendant': activeItem })}
169
+ role="combobox"
170
+ isExpanded={isOpen}
171
+ aria-controls="select-create-typeahead-listbox"
172
+ />
173
+
174
+ <TextInputGroupUtilities>
175
+ {!!inputValue && (
176
+ <Button
177
+ variant="plain"
178
+ onClick={() => {
179
+ setSelected('');
180
+ setInputValue('');
181
+ setFilterValue('');
182
+ textInputRef?.current?.focus();
183
+ }}
184
+ aria-label="Clear input value"
185
+ >
186
+ <TimesIcon aria-hidden />
187
+ </Button>
188
+ )}
189
+ </TextInputGroupUtilities>
190
+ </TextInputGroup>
191
+ </MenuToggle>
192
+ );
193
+
194
+ return (
195
+ <Select
196
+ id="create-typeahead-select"
197
+ isOpen={isOpen}
198
+ selected={selected}
199
+ onSelect={onSelect}
200
+ onOpenChange={() => {
201
+ setIsOpen(false);
202
+ }}
203
+ toggle={toggle}
204
+ >
205
+ <SelectList id="select-create-typeahead-listbox">
206
+ {selectOptions.map((option, index) => (
207
+ <SelectOption
208
+ key={option.itemId || option.children}
209
+ isFocused={focusedItemIndex === index}
210
+ className={option.className}
211
+ onClick={() => setSelected(option.itemId)}
212
+ id={`select-typeahead-${option.itemId.replace(' ', '-')}`}
213
+ {...option}
214
+ ref={null}
215
+ />
216
+ ))}
217
+ </SelectList>
218
+ </Select>
219
+ );
220
+ };
@@ -0,0 +1,146 @@
1
+ import React from 'react';
2
+ import { Select, SelectOption, SelectList, MenuToggle, Spinner } from '@patternfly/react-core';
3
+
4
+ export const SelectViewMore: React.FunctionComponent = () => {
5
+ const [isOpen, setIsOpen] = React.useState(false);
6
+ const [selected, setSelected] = React.useState<string>('Select a value');
7
+ const [activeItem, setActiveItem] = React.useState<number | string>(0);
8
+ const [isLoading, setIsLoading] = React.useState(false);
9
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
10
+ const [selectOptions, setSelectOptions] = React.useState([
11
+ <SelectOption key={0} itemId="Option 1">
12
+ Option 1
13
+ </SelectOption>,
14
+ <SelectOption key={1} itemId="Option 2">
15
+ Option 2
16
+ </SelectOption>,
17
+ <SelectOption key={2} itemId="Option 3">
18
+ Option 3
19
+ </SelectOption>,
20
+ <SelectOption key={3} itemId="Option 4">
21
+ Option 4
22
+ </SelectOption>,
23
+ <SelectOption key={4} itemId="Option 5">
24
+ Option 5
25
+ </SelectOption>,
26
+ <SelectOption key={5} itemId="Option 6">
27
+ Option 6
28
+ </SelectOption>,
29
+ <SelectOption key={6} itemId="Option 7">
30
+ Option 7
31
+ </SelectOption>,
32
+ <SelectOption key={7} itemId="Option 8">
33
+ Option 8
34
+ </SelectOption>,
35
+ <SelectOption key={8} itemId="Option 9">
36
+ Option 9
37
+ </SelectOption>,
38
+ <SelectOption key={9} itemId="Final Option 10">
39
+ Final Option 10
40
+ </SelectOption>
41
+ ]);
42
+ const [numOptions, setNumOptions] = React.useState(3);
43
+ const [visibleOptions, setVisibleOptions] = React.useState(selectOptions.slice(0, numOptions));
44
+ const activeItemRef = React.useRef<HTMLElement>(null);
45
+ const viewMoreRef = React.useRef<HTMLLIElement>(null);
46
+ const toggleRef = React.useRef<HTMLButtonElement>(null);
47
+
48
+ React.useEffect(() => {
49
+ activeItemRef.current?.focus();
50
+ }, [visibleOptions]);
51
+
52
+ const simulateNetworkCall = (networkCallback: () => void) => {
53
+ setTimeout(networkCallback, 2000);
54
+ };
55
+
56
+ const getNextValidItem = (startingIndex: number, maxLength: number) => {
57
+ let validItem;
58
+ for (let i = startingIndex; i < maxLength; i++) {
59
+ if (selectOptions[i].props.isDisabled) {
60
+ continue;
61
+ } else {
62
+ validItem = selectOptions[i];
63
+ break;
64
+ }
65
+ }
66
+ return validItem;
67
+ };
68
+
69
+ const loadMoreOptions = () => {
70
+ const newLength = numOptions + 3 <= selectOptions.length ? numOptions + 3 : selectOptions.length;
71
+ const prevPosition = numOptions;
72
+ const nextValidItem = getNextValidItem(prevPosition, newLength);
73
+
74
+ setNumOptions(newLength);
75
+ setIsLoading(false);
76
+ setActiveItem(nextValidItem.props.itemId);
77
+ setVisibleOptions(selectOptions.slice(0, newLength));
78
+ };
79
+
80
+ const onViewMoreClick = () => {
81
+ setIsLoading(true);
82
+ simulateNetworkCall(() => {
83
+ loadMoreOptions();
84
+ });
85
+ };
86
+
87
+ const onToggleClick = () => {
88
+ setIsOpen(!isOpen);
89
+ };
90
+
91
+ const onSelect = (_event: React.MouseEvent<Element, MouseEvent> | undefined, itemId: string | number | undefined) => {
92
+ // eslint-disable-next-line no-console
93
+ console.log('selected', itemId);
94
+
95
+ if (itemId !== 'loader') {
96
+ setSelected(itemId as string);
97
+ setIsOpen(false);
98
+ toggleRef?.current?.focus(); // Only focus the toggle when a non-loader option is selected
99
+ }
100
+ };
101
+
102
+ const toggle = (
103
+ <MenuToggle
104
+ ref={toggleRef}
105
+ onClick={onToggleClick}
106
+ isExpanded={isOpen}
107
+ style={
108
+ {
109
+ width: '200px'
110
+ } as React.CSSProperties
111
+ }
112
+ >
113
+ {selected}
114
+ </MenuToggle>
115
+ );
116
+
117
+ return (
118
+ <Select
119
+ id="single-view-more-select"
120
+ isOpen={isOpen}
121
+ selected={selected}
122
+ onSelect={onSelect}
123
+ onOpenChange={(isOpen) => setIsOpen(isOpen)}
124
+ toggle={{ toggleNode: toggle, toggleRef }}
125
+ >
126
+ <SelectList>
127
+ {visibleOptions.map((option) => {
128
+ const props = option.props;
129
+
130
+ return <SelectOption key={option.key} ref={props.itemId === activeItem ? activeItemRef : null} {...props} />;
131
+ })}
132
+ {numOptions !== selectOptions.length && (
133
+ <SelectOption
134
+ {...(!isLoading && { isLoadButton: true })}
135
+ {...(isLoading && { isLoading: true })}
136
+ onClick={onViewMoreClick}
137
+ itemId="loader"
138
+ ref={viewMoreRef}
139
+ >
140
+ {isLoading ? <Spinner size="lg" /> : 'View more'}
141
+ </SelectOption>
142
+ )}
143
+ </SelectList>
144
+ </Select>
145
+ );
146
+ };
@@ -318,7 +318,6 @@ export const Slider: React.FunctionComponent<SliderProps> = ({
318
318
  const displayInput = () => {
319
319
  const textInput = (
320
320
  <TextInput
321
- className={css(styles.formControl)}
322
321
  isDisabled={isDisabled}
323
322
  type="number"
324
323
  value={localInputValue}
@@ -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
  `;