@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
@@ -1,9 +1,35 @@
1
1
  import React from 'react';
2
2
  import { css } from '@patternfly/react-styles';
3
3
  import { Menu, MenuContent, MenuProps } from '../Menu';
4
- import { Popper, PopperProps } from '../../helpers/Popper/Popper';
4
+ import { Popper } from '../../helpers/Popper/Popper';
5
5
  import { getOUIAProps, OUIAProps, getDefaultOUIAId } from '../../helpers';
6
6
 
7
+ export interface SelectPopperProps {
8
+ /** Vertical direction of the popper. If enableFlip is set to true, this will set the initial direction before the popper flips. */
9
+ direction?: 'up' | 'down';
10
+ /** Horizontal position of the popper */
11
+ position?: 'right' | 'left' | 'center';
12
+ /** Custom width of the popper. If the value is "trigger", it will set the width to the select toggle's width */
13
+ width?: string | 'trigger';
14
+ /** Minimum width of the popper. If the value is "trigger", it will set the min width to the select toggle's width */
15
+ minWidth?: string | 'trigger';
16
+ /** Maximum width of the popper. If the value is "trigger", it will set the max width to the select toggle's width */
17
+ maxWidth?: string | 'trigger';
18
+ /** Enable to flip the popper when it reaches the boundary */
19
+ enableFlip?: boolean;
20
+ }
21
+
22
+ export interface SelectToggleProps {
23
+ /** Select toggle node. */
24
+ toggleNode: React.ReactNode;
25
+ /** Reference to the toggle. */
26
+ toggleRef?: React.RefObject<HTMLButtonElement>;
27
+ }
28
+
29
+ /**
30
+ * See the Menu documentation for additional props that may be passed.
31
+ */
32
+
7
33
  export interface SelectProps extends MenuProps, OUIAProps {
8
34
  /** Anything which can be rendered in a select */
9
35
  children?: React.ReactNode;
@@ -13,13 +39,17 @@ export interface SelectProps extends MenuProps, OUIAProps {
13
39
  isOpen?: boolean;
14
40
  /** Single itemId for single select menus, or array of itemIds for multi select. You can also specify isSelected on the SelectOption. */
15
41
  selected?: any | any[];
16
- /** Renderer for a custom select toggle. Forwards a ref to the toggle. */
17
- toggle: (toggleRef: React.RefObject<any>) => React.ReactNode;
42
+ /** Select toggle. The toggle should either be a renderer function which forwards the given toggle ref, or a direct ReactNode that should be passed along with the toggleRef property. */
43
+ toggle: SelectToggleProps | ((toggleRef: React.RefObject<any>) => React.ReactNode);
44
+ /** Flag indicating the toggle should be focused after a selection. If this use case is too restrictive, the optional toggleRef property with a node toggle may be used to control focus. */
45
+ shouldFocusToggleOnSelect?: boolean;
18
46
  /** Function callback when user selects an option. */
19
47
  onSelect?: (event?: React.MouseEvent<Element, MouseEvent>, itemId?: string | number) => void;
20
48
  /** Callback to allow the select component to change the open state of the menu.
21
- * Triggered by clicking outside of the menu, or by pressing either tab or escape. */
49
+ * Triggered by clicking outside of the menu, or by pressing any keys specificed in onOpenChangeKeys. */
22
50
  onOpenChange?: (isOpen: boolean) => void;
51
+ /** @beta Keys that trigger onOpenChange, defaults to tab and escape. It is highly recommended to include Escape in the array, while Tab may be omitted if the menu contains non-menu items that are focusable. */
52
+ onOpenChangeKeys?: string[];
23
53
  /** Indicates if the select should be without the outer box-shadow */
24
54
  isPlain?: boolean;
25
55
  /** @hide Forwarded ref */
@@ -29,7 +59,7 @@ export interface SelectProps extends MenuProps, OUIAProps {
29
59
  /** @beta Determines the accessible role of the select. For a checkbox select pass in "menu". */
30
60
  role?: string;
31
61
  /** Additional properties to pass to the popper */
32
- popperProps?: Partial<PopperProps>;
62
+ popperProps?: SelectPopperProps;
33
63
  }
34
64
 
35
65
  const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
@@ -39,7 +69,9 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
39
69
  isOpen,
40
70
  selected,
41
71
  toggle,
72
+ shouldFocusToggleOnSelect = false,
42
73
  onOpenChange,
74
+ onOpenChangeKeys = ['Escape', 'Tab'],
43
75
  isPlain,
44
76
  innerRef,
45
77
  zIndex = 9999,
@@ -48,18 +80,24 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
48
80
  ...props
49
81
  }: SelectProps & OUIAProps) => {
50
82
  const localMenuRef = React.useRef<HTMLDivElement>();
51
- const toggleRef = React.useRef<HTMLButtonElement>();
52
- const containerRef = React.useRef<HTMLDivElement>();
83
+ const localToggleRef = React.useRef<HTMLButtonElement>();
53
84
 
54
85
  const menuRef = (innerRef as React.RefObject<HTMLDivElement>) || localMenuRef;
86
+ const toggleRef =
87
+ typeof toggle === 'function' || (typeof toggle !== 'function' && !toggle.toggleRef)
88
+ ? localToggleRef
89
+ : (toggle?.toggleRef as React.RefObject<HTMLButtonElement>);
90
+
55
91
  React.useEffect(() => {
56
92
  const handleMenuKeys = (event: KeyboardEvent) => {
57
93
  // Close the menu on tab or escape if onOpenChange is provided
58
94
  if (
59
- (isOpen && onOpenChange && menuRef.current?.contains(event.target as Node)) ||
60
- toggleRef.current?.contains(event.target as Node)
95
+ isOpen &&
96
+ onOpenChange &&
97
+ (menuRef.current?.contains(event.target as Node) || toggleRef.current?.contains(event.target as Node))
61
98
  ) {
62
- if (event.key === 'Escape' || event.key === 'Tab') {
99
+ if (onOpenChangeKeys.includes(event.key)) {
100
+ event.preventDefault();
63
101
  onOpenChange(false);
64
102
  toggleRef.current?.focus();
65
103
  }
@@ -90,14 +128,17 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
90
128
  window.removeEventListener('keydown', handleMenuKeys);
91
129
  window.removeEventListener('click', handleClick);
92
130
  };
93
- }, [isOpen, menuRef, onOpenChange]);
131
+ }, [isOpen, menuRef, toggleRef, onOpenChange, onOpenChangeKeys]);
94
132
 
95
133
  const menu = (
96
134
  <Menu
97
135
  role={role}
98
136
  className={css(className)}
99
137
  ref={menuRef}
100
- onSelect={(event, itemId) => onSelect && onSelect(event, itemId)}
138
+ onSelect={(event, itemId) => {
139
+ onSelect && onSelect(event, itemId);
140
+ shouldFocusToggleOnSelect && toggleRef.current.focus();
141
+ }}
101
142
  isPlain={isPlain}
102
143
  selected={selected}
103
144
  {...getOUIAProps(
@@ -111,18 +152,15 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
111
152
  </Menu>
112
153
  );
113
154
  return (
114
- <div ref={containerRef}>
115
- <Popper
116
- trigger={toggle(toggleRef)}
117
- triggerRef={toggleRef}
118
- popper={menu}
119
- popperRef={menuRef}
120
- appendTo={containerRef.current || undefined}
121
- isVisible={isOpen}
122
- zIndex={zIndex}
123
- {...popperProps}
124
- />
125
- </div>
155
+ <Popper
156
+ trigger={typeof toggle === 'function' ? toggle(toggleRef) : toggle.toggleNode}
157
+ triggerRef={toggleRef}
158
+ popper={menu}
159
+ popperRef={menuRef}
160
+ isVisible={isOpen}
161
+ zIndex={zIndex}
162
+ {...popperProps}
163
+ />
126
164
  );
127
165
  };
128
166
 
@@ -2,6 +2,9 @@ import React from 'react';
2
2
  import { css } from '@patternfly/react-styles';
3
3
  import { MenuGroupProps, MenuGroup } from '../Menu';
4
4
 
5
+ /**
6
+ * See the MenuGroup section of the Menu documentation for additional props that may be passed.
7
+ */
5
8
  export interface SelectGroupProps extends Omit<MenuGroupProps, 'ref'> {
6
9
  /** Anything which can be rendered in a select group */
7
10
  children: React.ReactNode;
@@ -2,11 +2,17 @@ import React from 'react';
2
2
  import { css } from '@patternfly/react-styles';
3
3
  import { MenuItemProps, MenuItem } from '../Menu';
4
4
 
5
+ /**
6
+ * See the MenuItem section of the Menu documentation for additional props that may be passed.
7
+ */
8
+
5
9
  export interface SelectOptionProps extends Omit<MenuItemProps, 'ref'> {
6
10
  /** Anything which can be rendered in a select option */
7
11
  children?: React.ReactNode;
8
12
  /** Classes applied to root element of select option */
9
13
  className?: string;
14
+ /** @hide Forwarded ref */
15
+ innerRef?: React.Ref<HTMLAnchorElement | HTMLButtonElement>;
10
16
  /** Identifies the component in the Select onSelect callback */
11
17
  itemId?: any;
12
18
  /** Indicates the option has a checkbox */
@@ -17,15 +23,29 @@ export interface SelectOptionProps extends Omit<MenuItemProps, 'ref'> {
17
23
  isSelected?: boolean;
18
24
  /** Indicates the option is focused */
19
25
  isFocused?: boolean;
26
+ /** Render an external link icon on focus or hover, and set the link's
27
+ * "target" attribute to a value of "_blank".
28
+ */
29
+ isExternalLink?: boolean;
30
+ /** Render option with icon */
31
+ icon?: React.ReactNode;
32
+ /** Description of the option */
33
+ description?: React.ReactNode;
20
34
  }
21
35
 
22
- export const SelectOption: React.FunctionComponent<MenuItemProps> = ({
36
+ const SelectOptionBase: React.FunctionComponent<MenuItemProps> = ({
23
37
  children,
24
38
  className,
39
+ innerRef,
25
40
  ...props
26
41
  }: SelectOptionProps) => (
27
- <MenuItem className={css(className)} {...props}>
42
+ <MenuItem ref={innerRef} className={css(className)} {...props}>
28
43
  {children}
29
44
  </MenuItem>
30
45
  );
46
+
47
+ export const SelectOption = React.forwardRef((props: SelectOptionProps, ref: React.Ref<any>) => (
48
+ <SelectOptionBase {...props} innerRef={ref} />
49
+ ));
50
+
31
51
  SelectOption.displayName = 'SelectOption';
@@ -3,35 +3,82 @@ id: Select
3
3
  section: components
4
4
  subsection: menus
5
5
  cssPrefix: pf-c-select
6
- propComponents: ['Select', 'SelectOption', 'SelectGroup', 'SelectList', 'MenuToggle']
6
+ propComponents:
7
+ ['Select', 'SelectOption', 'SelectGroup', 'SelectList', 'MenuToggle', 'SelectToggleProps', 'SelectPopperProps']
7
8
  ouia: true
8
9
  ---
9
10
 
10
11
  import TimesIcon from '@patternfly/react-icons/dist/esm/icons/times-icon';
12
+ import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
11
13
 
12
14
  ## Examples
13
15
 
16
+ `Select` builds off of the Menu component suite to wrap commonly used properties and functions for a select menu. See the [Menu documentation](/components/menus/menu) for a full list of properties that may be passed through `Select` to further customize the select menu, or the [custom menu examples](/components/menus/custom-menus) for additional examples of fully functional menus.
17
+
14
18
  ### Single
15
19
 
16
20
  ```ts file="./SelectBasic.tsx"
21
+
22
+ ```
23
+
24
+ ### Option variations
25
+
26
+ Showcases different option variants and customizations that are commonly used in a select menu. For a more complete list, see the [Menu documentation](/components/menus/menu).
27
+
28
+ ```ts file="./SelectOptionVariations.tsx"
29
+
17
30
  ```
18
31
 
19
32
  ### Grouped single
20
33
 
21
34
  ```ts file="./SelectGrouped.tsx"
35
+
22
36
  ```
23
37
 
24
38
  ### Checkbox
25
39
 
26
40
  ```ts file="./SelectCheckbox.tsx"
41
+
27
42
  ```
28
43
 
29
44
  ### Typeahead
30
45
 
31
46
  ```ts file="./SelectTypeahead.tsx"
47
+
48
+ ```
49
+
50
+ ### Typeahead with create option
51
+
52
+ ```ts file="./SelectTypeaheadCreatable.tsx"
53
+
32
54
  ```
33
55
 
34
- ### Multiple Typeahead
56
+ ### Multiple typeahead with chips
35
57
 
36
58
  ```ts file="./SelectMultiTypeahead.tsx"
59
+
60
+ ```
61
+
62
+ ### Multiple typeahead with create option
63
+
64
+ ```ts file="./SelectMultiTypeaheadCreatable.tsx"
65
+
66
+ ```
67
+
68
+ ### Multiple typeahead with checkboxes
69
+
70
+ ```ts file="./SelectMultiTypeaheadCheckbox.tsx"
71
+
72
+ ```
73
+
74
+ ### View more
75
+
76
+ ```ts file="./SelectViewMore.tsx"
77
+
78
+ ```
79
+
80
+ ### Footer
81
+
82
+ ```ts file="./SelectFooter.tsx"
83
+
37
84
  ```
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
- import { Select, SelectOption, SelectList, MenuToggle, MenuToggleElement } from '@patternfly/react-core';
2
+ import { Select, SelectOption, SelectList, MenuToggle, MenuToggleElement, Checkbox } from '@patternfly/react-core';
3
3
 
4
4
  export const SelectBasic: React.FunctionComponent = () => {
5
5
  const [isOpen, setIsOpen] = React.useState(false);
6
6
  const [selected, setSelected] = React.useState<string>('Select a value');
7
- const menuRef = React.useRef<HTMLDivElement>(null);
7
+ const [isDisabled, setIsDisabled] = React.useState<boolean>(false);
8
8
 
9
9
  const onToggleClick = () => {
10
10
  setIsOpen(!isOpen);
@@ -23,6 +23,7 @@ export const SelectBasic: React.FunctionComponent = () => {
23
23
  ref={toggleRef}
24
24
  onClick={onToggleClick}
25
25
  isExpanded={isOpen}
26
+ isDisabled={isDisabled}
26
27
  style={
27
28
  {
28
29
  width: '200px'
@@ -34,20 +35,29 @@ export const SelectBasic: React.FunctionComponent = () => {
34
35
  );
35
36
 
36
37
  return (
37
- <Select
38
- id="single-select"
39
- ref={menuRef}
40
- isOpen={isOpen}
41
- selected={selected}
42
- onSelect={onSelect}
43
- onOpenChange={isOpen => setIsOpen(isOpen)}
44
- toggle={toggle}
45
- >
46
- <SelectList>
47
- <SelectOption itemId="Option 1">Option 1</SelectOption>
48
- <SelectOption itemId="Option 2">Option 2</SelectOption>
49
- <SelectOption itemId="Option 3">Option 3</SelectOption>
50
- </SelectList>
51
- </Select>
38
+ <React.Fragment>
39
+ <Checkbox
40
+ id="toggle-disabled"
41
+ label="isDisabled"
42
+ isChecked={isDisabled}
43
+ onChange={(_event, checked) => setIsDisabled(checked)}
44
+ style={{ marginBottom: 20 }}
45
+ />
46
+ <Select
47
+ id="single-select"
48
+ isOpen={isOpen}
49
+ selected={selected}
50
+ onSelect={onSelect}
51
+ onOpenChange={(isOpen) => setIsOpen(isOpen)}
52
+ toggle={toggle}
53
+ shouldFocusToggleOnSelect
54
+ >
55
+ <SelectList>
56
+ <SelectOption itemId="Option 1">Option 1</SelectOption>
57
+ <SelectOption itemId="Option 2">Option 2</SelectOption>
58
+ <SelectOption itemId="Option 3">Option 3</SelectOption>
59
+ </SelectList>
60
+ </Select>
61
+ </React.Fragment>
52
62
  );
53
63
  };
@@ -4,7 +4,6 @@ import { Select, SelectOption, SelectList, MenuToggle, MenuToggleElement, Badge
4
4
  export const SelectCheckbox: React.FunctionComponent = () => {
5
5
  const [isOpen, setIsOpen] = React.useState(false);
6
6
  const [selectedItems, setSelectedItems] = React.useState<number[]>([]);
7
- const menuRef = React.useRef<HTMLDivElement>(null);
8
7
 
9
8
  const onToggleClick = () => {
10
9
  setIsOpen(!isOpen);
@@ -15,7 +14,7 @@ export const SelectCheckbox: React.FunctionComponent = () => {
15
14
  console.log('selected', itemId);
16
15
 
17
16
  if (selectedItems.includes(itemId as number)) {
18
- setSelectedItems(selectedItems.filter(id => id !== itemId));
17
+ setSelectedItems(selectedItems.filter((id) => id !== itemId));
19
18
  } else {
20
19
  setSelectedItems([...selectedItems, itemId as number]);
21
20
  }
@@ -41,7 +40,6 @@ export const SelectCheckbox: React.FunctionComponent = () => {
41
40
  <Select
42
41
  role="menu"
43
42
  id="checkbox-select"
44
- ref={menuRef}
45
43
  isOpen={isOpen}
46
44
  selected={selectedItems}
47
45
  onSelect={onSelect}
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import { MenuToggle, MenuFooter, Select, SelectList, SelectOption, Button } from '@patternfly/react-core';
3
+
4
+ export const SelectFooter: React.FunctionComponent = () => {
5
+ const [isOpen, setIsOpen] = React.useState<boolean>(false);
6
+ const [selected, setSelected] = React.useState<string>('Select a value');
7
+
8
+ const onToggleClick = () => {
9
+ setIsOpen(!isOpen);
10
+ };
11
+
12
+ const toggle = (toggleRef) => (
13
+ <MenuToggle
14
+ ref={toggleRef}
15
+ onClick={onToggleClick}
16
+ isExpanded={isOpen}
17
+ style={
18
+ {
19
+ width: '200px'
20
+ } as React.CSSProperties
21
+ }
22
+ >
23
+ {selected}
24
+ </MenuToggle>
25
+ );
26
+
27
+ function onSelect(event: React.MouseEvent | undefined, itemId: string | number | undefined) {
28
+ if (typeof itemId === 'undefined') {
29
+ return;
30
+ }
31
+
32
+ setSelected(itemId.toString());
33
+ }
34
+
35
+ return (
36
+ <Select
37
+ isOpen={isOpen}
38
+ onOpenChange={(isOpen) => setIsOpen(isOpen)}
39
+ onOpenChangeKeys={['Escape']}
40
+ toggle={toggle}
41
+ id="menu-with-footer"
42
+ onSelect={onSelect}
43
+ selected={selected}
44
+ >
45
+ <SelectList>
46
+ <SelectOption itemId="Option 1">Option 1</SelectOption>
47
+ <SelectOption itemId="Option 2">Option 2</SelectOption>
48
+ <SelectOption itemId="Option 3">Option 3</SelectOption>
49
+ </SelectList>
50
+ <MenuFooter>
51
+ <Button variant="link" isInline>
52
+ Footer action
53
+ </Button>
54
+ </MenuFooter>
55
+ </Select>
56
+ );
57
+ };
@@ -1,10 +1,17 @@
1
1
  import React from 'react';
2
- import { Select, SelectOption, SelectList, SelectGroup, MenuToggle, MenuToggleElement } from '@patternfly/react-core';
2
+ import {
3
+ Select,
4
+ SelectOption,
5
+ SelectList,
6
+ SelectGroup,
7
+ MenuToggle,
8
+ MenuToggleElement,
9
+ Divider
10
+ } from '@patternfly/react-core';
3
11
 
4
- export const SelectBasic: React.FunctionComponent = () => {
12
+ export const SelectGrouped: React.FunctionComponent = () => {
5
13
  const [isOpen, setIsOpen] = React.useState(false);
6
14
  const [selected, setSelected] = React.useState<string>('Select a value');
7
- const menuRef = React.useRef<HTMLDivElement>(null);
8
15
 
9
16
  const onToggleClick = () => {
10
17
  setIsOpen(!isOpen);
@@ -35,13 +42,13 @@ export const SelectBasic: React.FunctionComponent = () => {
35
42
 
36
43
  return (
37
44
  <Select
38
- id="single-select"
39
- ref={menuRef}
45
+ id="single-grouped-select"
40
46
  isOpen={isOpen}
41
47
  selected={selected}
42
48
  onSelect={onSelect}
43
- onOpenChange={isOpen => setIsOpen(isOpen)}
49
+ onOpenChange={(isOpen) => setIsOpen(isOpen)}
44
50
  toggle={toggle}
51
+ shouldFocusToggleOnSelect
45
52
  >
46
53
  <SelectGroup label="Group 1">
47
54
  <SelectList>
@@ -50,6 +57,7 @@ export const SelectBasic: React.FunctionComponent = () => {
50
57
  <SelectOption itemId="Option 3">Option 3</SelectOption>
51
58
  </SelectList>
52
59
  </SelectGroup>
60
+ <Divider />
53
61
  <SelectGroup label="Group 2">
54
62
  <SelectList>
55
63
  <SelectOption itemId="Option 4">Option 4</SelectOption>
@@ -31,8 +31,6 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
31
31
  const [selectOptions, setSelectOptions] = React.useState<SelectOptionProps[]>(initialSelectOptions);
32
32
  const [focusedItemIndex, setFocusedItemIndex] = React.useState<number | null>(null);
33
33
  const [activeItem, setActiveItem] = React.useState<string | null>(null);
34
-
35
- const menuRef = React.useRef<HTMLDivElement>(null);
36
34
  const textInputRef = React.useRef<HTMLInputElement>();
37
35
 
38
36
  React.useEffect(() => {
@@ -40,10 +38,8 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
40
38
 
41
39
  // Filter menu items based on the text input value when one exists
42
40
  if (inputValue) {
43
- newSelectOptions = initialSelectOptions.filter(menuItem =>
44
- String(menuItem.children)
45
- .toLowerCase()
46
- .includes(inputValue.toLowerCase())
41
+ newSelectOptions = initialSelectOptions.filter((menuItem) =>
42
+ String(menuItem.children).toLowerCase().includes(inputValue.toLowerCase())
47
43
  );
48
44
 
49
45
  // When no options are found after filtering, display 'No results found'
@@ -87,13 +83,13 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
87
83
  }
88
84
 
89
85
  setFocusedItemIndex(indexToFocus);
90
- const focusedItem = selectOptions.filter(option => !option.isDisabled)[indexToFocus];
86
+ const focusedItem = selectOptions.filter((option) => !option.isDisabled)[indexToFocus];
91
87
  setActiveItem(`select-multi-typeahead-${focusedItem.itemId.replace(' ', '-')}`);
92
88
  }
93
89
  };
94
90
 
95
91
  const onInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
96
- const enabledMenuItems = selectOptions.filter(menuItem => !menuItem.isDisabled);
92
+ const enabledMenuItems = selectOptions.filter((menuItem) => !menuItem.isDisabled);
97
93
  const [firstMenuItem] = enabledMenuItems;
98
94
  const focusedItem = focusedItemIndex ? enabledMenuItems[focusedItemIndex] : firstMenuItem;
99
95
 
@@ -101,7 +97,7 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
101
97
  // Select the first available option
102
98
  case 'Enter':
103
99
  if (!isOpen) {
104
- setIsOpen(prevIsOpen => !prevIsOpen);
100
+ setIsOpen((prevIsOpen) => !prevIsOpen);
105
101
  } else if (isOpen && focusedItem.itemId !== 'no results') {
106
102
  onSelect(focusedItem.itemId as string);
107
103
  }
@@ -133,7 +129,7 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
133
129
 
134
130
  if (itemId && itemId !== 'no results') {
135
131
  setSelected(
136
- selected.includes(itemId) ? selected.filter(selection => selection !== itemId) : [...selected, itemId]
132
+ selected.includes(itemId) ? selected.filter((selection) => selection !== itemId) : [...selected, itemId]
137
133
  );
138
134
  }
139
135
 
@@ -161,7 +157,7 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
161
157
  {selected.map((selection, index) => (
162
158
  <Chip
163
159
  key={index}
164
- onClick={ev => {
160
+ onClick={(ev) => {
165
161
  ev.stopPropagation();
166
162
  onSelect(selection);
167
163
  }}
@@ -193,7 +189,6 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
193
189
  return (
194
190
  <Select
195
191
  id="multi-typeahead-select"
196
- ref={menuRef}
197
192
  isOpen={isOpen}
198
193
  selected={selected}
199
194
  onSelect={(ev, selection) => onSelect(selection as string)}