@patternfly/react-core 5.1.1-prerelease.8 → 6.0.0-alpha.1

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 (347) hide show
  1. package/CHANGELOG.md +103 -0
  2. package/components/package.json +1 -1
  3. package/deprecated/package.json +1 -1
  4. package/dist/dynamic/components/AboutModal/package.json +1 -1
  5. package/dist/dynamic/components/Accordion/package.json +1 -1
  6. package/dist/dynamic/components/ActionList/package.json +1 -1
  7. package/dist/dynamic/components/Alert/package.json +1 -1
  8. package/dist/dynamic/components/Avatar/package.json +1 -1
  9. package/dist/dynamic/components/BackToTop/package.json +1 -1
  10. package/dist/dynamic/components/Backdrop/package.json +1 -1
  11. package/dist/dynamic/components/BackgroundImage/package.json +1 -1
  12. package/dist/dynamic/components/Badge/package.json +1 -1
  13. package/dist/dynamic/components/Banner/package.json +1 -1
  14. package/dist/dynamic/components/Brand/package.json +1 -1
  15. package/dist/dynamic/components/Breadcrumb/package.json +1 -1
  16. package/dist/dynamic/components/Button/package.json +1 -1
  17. package/dist/dynamic/components/CalendarMonth/package.json +1 -1
  18. package/dist/dynamic/components/Card/package.json +1 -1
  19. package/dist/dynamic/components/Checkbox/package.json +1 -1
  20. package/dist/dynamic/components/Chip/package.json +1 -1
  21. package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
  22. package/dist/dynamic/components/CodeBlock/package.json +1 -1
  23. package/dist/dynamic/components/DataList/package.json +1 -1
  24. package/dist/dynamic/components/DatePicker/package.json +1 -1
  25. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  26. package/dist/dynamic/components/Divider/package.json +1 -1
  27. package/dist/dynamic/components/DragDrop/package.json +1 -1
  28. package/dist/dynamic/components/Drawer/package.json +1 -1
  29. package/dist/dynamic/components/Dropdown/package.json +1 -1
  30. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  31. package/dist/dynamic/components/EmptyState/package.json +1 -1
  32. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  33. package/dist/dynamic/components/FileUpload/package.json +1 -1
  34. package/dist/dynamic/components/Form/package.json +1 -1
  35. package/dist/dynamic/components/FormSelect/package.json +1 -1
  36. package/dist/dynamic/components/HelperText/package.json +1 -1
  37. package/dist/dynamic/components/Hint/package.json +1 -1
  38. package/dist/dynamic/components/Icon/package.json +1 -1
  39. package/dist/dynamic/components/InputGroup/package.json +1 -1
  40. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  41. package/dist/dynamic/components/Label/package.json +1 -1
  42. package/dist/dynamic/components/List/package.json +1 -1
  43. package/dist/dynamic/components/LoginPage/package.json +1 -1
  44. package/dist/dynamic/components/Masthead/package.json +1 -1
  45. package/dist/dynamic/components/Menu/package.json +1 -1
  46. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  47. package/dist/dynamic/components/Modal/package.json +1 -1
  48. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  49. package/dist/dynamic/components/Nav/package.json +1 -1
  50. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  51. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  52. package/dist/dynamic/components/NumberInput/package.json +1 -1
  53. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  54. package/dist/dynamic/components/Page/package.json +1 -1
  55. package/dist/dynamic/components/Pagination/package.json +1 -1
  56. package/dist/dynamic/components/Panel/package.json +1 -1
  57. package/dist/dynamic/components/Popover/package.json +1 -1
  58. package/dist/dynamic/components/Progress/package.json +1 -1
  59. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  60. package/dist/dynamic/components/Radio/package.json +1 -1
  61. package/dist/dynamic/components/SearchInput/package.json +1 -1
  62. package/dist/dynamic/components/Select/package.json +1 -1
  63. package/dist/dynamic/components/Sidebar/package.json +1 -1
  64. package/dist/dynamic/components/SimpleList/package.json +1 -1
  65. package/dist/dynamic/components/Skeleton/package.json +1 -1
  66. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  67. package/dist/dynamic/components/Slider/package.json +1 -1
  68. package/dist/dynamic/components/Spinner/package.json +1 -1
  69. package/dist/dynamic/components/Switch/package.json +1 -1
  70. package/dist/dynamic/components/Tabs/package.json +1 -1
  71. package/dist/dynamic/components/Text/package.json +1 -1
  72. package/dist/dynamic/components/TextArea/package.json +1 -1
  73. package/dist/dynamic/components/TextInput/package.json +1 -1
  74. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  75. package/dist/dynamic/components/Tile/package.json +1 -1
  76. package/dist/dynamic/components/TimePicker/package.json +1 -1
  77. package/dist/dynamic/components/Timestamp/package.json +1 -1
  78. package/dist/dynamic/components/Title/package.json +1 -1
  79. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  80. package/dist/dynamic/components/Toolbar/package.json +1 -1
  81. package/dist/dynamic/components/Tooltip/package.json +1 -1
  82. package/dist/dynamic/components/TreeView/package.json +1 -1
  83. package/dist/dynamic/components/Truncate/package.json +1 -1
  84. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  85. package/dist/dynamic/components/Wizard/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/ApplicationLauncher/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/ContextSelector/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Dropdown/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/OptionsMenu/package.json +1 -1
  90. package/dist/dynamic/deprecated/components/PageHeader/package.json +1 -1
  91. package/dist/dynamic/deprecated/components/Select/package.json +1 -1
  92. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  93. package/dist/dynamic/deprecated/components/package.json +1 -1
  94. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  95. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  96. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  97. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  98. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  99. package/dist/dynamic/helpers/constants/package.json +1 -1
  100. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  101. package/dist/dynamic/helpers/favorites/package.json +1 -1
  102. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  103. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  104. package/dist/dynamic/helpers/package.json +1 -1
  105. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  106. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  107. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  108. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  109. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  110. package/dist/dynamic/helpers/util/package.json +1 -1
  111. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  112. package/dist/dynamic/layouts/Flex/package.json +1 -1
  113. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  114. package/dist/dynamic/layouts/Grid/package.json +1 -1
  115. package/dist/dynamic/layouts/Level/package.json +1 -1
  116. package/dist/dynamic/layouts/Split/package.json +1 -1
  117. package/dist/dynamic/layouts/Stack/package.json +1 -1
  118. package/dist/dynamic/next/components/package.json +1 -1
  119. package/dist/esm/components/BackToTop/BackToTop.js +1 -1
  120. package/dist/esm/components/BackToTop/BackToTop.js.map +1 -1
  121. package/dist/esm/components/Button/Button.d.ts +2 -2
  122. package/dist/esm/components/Button/Button.d.ts.map +1 -1
  123. package/dist/esm/components/Button/Button.js +3 -3
  124. package/dist/esm/components/Button/Button.js.map +1 -1
  125. package/dist/esm/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
  126. package/dist/esm/components/ClipboardCopy/ClipboardCopy.js +1 -1
  127. package/dist/esm/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
  128. package/dist/esm/components/ClipboardCopy/ClipboardCopyExpanded.js +1 -1
  129. package/dist/esm/components/ClipboardCopy/ClipboardCopyExpanded.js.map +1 -1
  130. package/dist/esm/components/ClipboardCopy/ClipboardCopyToggle.d.ts.map +1 -1
  131. package/dist/esm/components/ClipboardCopy/ClipboardCopyToggle.js +5 -2
  132. package/dist/esm/components/ClipboardCopy/ClipboardCopyToggle.js.map +1 -1
  133. package/dist/esm/components/DragDrop/Draggable.d.ts.map +1 -1
  134. package/dist/esm/components/DragDrop/Draggable.js +1 -0
  135. package/dist/esm/components/DragDrop/Draggable.js.map +1 -1
  136. package/dist/esm/components/Drawer/Drawer.d.ts +3 -3
  137. package/dist/esm/components/Drawer/Drawer.d.ts.map +1 -1
  138. package/dist/esm/components/Drawer/Drawer.js +3 -3
  139. package/dist/esm/components/Drawer/Drawer.js.map +1 -1
  140. package/dist/esm/components/Drawer/DrawerPanelContent.d.ts.map +1 -1
  141. package/dist/esm/components/Drawer/DrawerPanelContent.js +77 -26
  142. package/dist/esm/components/Drawer/DrawerPanelContent.js.map +1 -1
  143. package/dist/esm/components/Dropdown/Dropdown.d.ts +3 -1
  144. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
  145. package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
  146. package/dist/esm/components/Icon/Icon.d.ts +4 -0
  147. package/dist/esm/components/Icon/Icon.d.ts.map +1 -1
  148. package/dist/esm/components/Icon/Icon.js +2 -2
  149. package/dist/esm/components/Icon/Icon.js.map +1 -1
  150. package/dist/esm/components/Label/Label.d.ts +4 -2
  151. package/dist/esm/components/Label/Label.d.ts.map +1 -1
  152. package/dist/esm/components/Label/Label.js +19 -4
  153. package/dist/esm/components/Label/Label.js.map +1 -1
  154. package/dist/esm/components/Menu/MenuContainer.d.ts +1 -1
  155. package/dist/esm/components/Menu/MenuContainer.d.ts.map +1 -1
  156. package/dist/esm/components/Modal/ModalContent.d.ts.map +1 -1
  157. package/dist/esm/components/Modal/ModalContent.js +3 -1
  158. package/dist/esm/components/Modal/ModalContent.js.map +1 -1
  159. package/dist/esm/components/Nav/NavItem.d.ts +1 -1
  160. package/dist/esm/components/Nav/NavItem.d.ts.map +1 -1
  161. package/dist/esm/components/Nav/NavList.d.ts +10 -4
  162. package/dist/esm/components/Nav/NavList.d.ts.map +1 -1
  163. package/dist/esm/components/Nav/NavList.js +29 -8
  164. package/dist/esm/components/Nav/NavList.js.map +1 -1
  165. package/dist/esm/components/SearchInput/SearchInput.d.ts.map +1 -1
  166. package/dist/esm/components/SearchInput/SearchInput.js +4 -2
  167. package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
  168. package/dist/esm/components/Select/Select.d.ts +9 -1
  169. package/dist/esm/components/Select/Select.d.ts.map +1 -1
  170. package/dist/esm/components/Select/Select.js.map +1 -1
  171. package/dist/esm/components/Slider/Slider.d.ts +8 -4
  172. package/dist/esm/components/Slider/Slider.d.ts.map +1 -1
  173. package/dist/esm/components/Slider/Slider.js +62 -16
  174. package/dist/esm/components/Slider/Slider.js.map +1 -1
  175. package/dist/esm/components/Slider/SliderStep.d.ts.map +1 -1
  176. package/dist/esm/components/Slider/SliderStep.js +2 -1
  177. package/dist/esm/components/Slider/SliderStep.js.map +1 -1
  178. package/dist/esm/components/Tabs/Tabs.d.ts +11 -6
  179. package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -1
  180. package/dist/esm/components/Tabs/Tabs.js +35 -16
  181. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  182. package/dist/esm/components/TextInput/TextInput.d.ts +3 -1
  183. package/dist/esm/components/TextInput/TextInput.d.ts.map +1 -1
  184. package/dist/esm/components/TextInput/TextInput.js +8 -7
  185. package/dist/esm/components/TextInput/TextInput.js.map +1 -1
  186. package/dist/esm/components/Timestamp/Timestamp.d.ts +4 -0
  187. package/dist/esm/components/Timestamp/Timestamp.d.ts.map +1 -1
  188. package/dist/esm/components/Timestamp/Timestamp.js +7 -4
  189. package/dist/esm/components/Timestamp/Timestamp.js.map +1 -1
  190. package/dist/esm/helpers/Popper/Popper.d.ts +2 -1
  191. package/dist/esm/helpers/Popper/Popper.d.ts.map +1 -1
  192. package/dist/esm/helpers/Popper/Popper.js +27 -5
  193. package/dist/esm/helpers/Popper/Popper.js.map +1 -1
  194. package/dist/js/components/BackToTop/BackToTop.js +1 -1
  195. package/dist/js/components/BackToTop/BackToTop.js.map +1 -1
  196. package/dist/js/components/Button/Button.d.ts +2 -2
  197. package/dist/js/components/Button/Button.d.ts.map +1 -1
  198. package/dist/js/components/Button/Button.js +3 -3
  199. package/dist/js/components/Button/Button.js.map +1 -1
  200. package/dist/js/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
  201. package/dist/js/components/ClipboardCopy/ClipboardCopy.js +1 -1
  202. package/dist/js/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
  203. package/dist/js/components/ClipboardCopy/ClipboardCopyExpanded.js +1 -1
  204. package/dist/js/components/ClipboardCopy/ClipboardCopyExpanded.js.map +1 -1
  205. package/dist/js/components/ClipboardCopy/ClipboardCopyToggle.d.ts.map +1 -1
  206. package/dist/js/components/ClipboardCopy/ClipboardCopyToggle.js +5 -2
  207. package/dist/js/components/ClipboardCopy/ClipboardCopyToggle.js.map +1 -1
  208. package/dist/js/components/DragDrop/Draggable.d.ts.map +1 -1
  209. package/dist/js/components/DragDrop/Draggable.js +1 -0
  210. package/dist/js/components/DragDrop/Draggable.js.map +1 -1
  211. package/dist/js/components/Drawer/Drawer.d.ts +3 -3
  212. package/dist/js/components/Drawer/Drawer.d.ts.map +1 -1
  213. package/dist/js/components/Drawer/Drawer.js +3 -3
  214. package/dist/js/components/Drawer/Drawer.js.map +1 -1
  215. package/dist/js/components/Drawer/DrawerPanelContent.d.ts.map +1 -1
  216. package/dist/js/components/Drawer/DrawerPanelContent.js +77 -26
  217. package/dist/js/components/Drawer/DrawerPanelContent.js.map +1 -1
  218. package/dist/js/components/Dropdown/Dropdown.d.ts +3 -1
  219. package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
  220. package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
  221. package/dist/js/components/Icon/Icon.d.ts +4 -0
  222. package/dist/js/components/Icon/Icon.d.ts.map +1 -1
  223. package/dist/js/components/Icon/Icon.js +2 -2
  224. package/dist/js/components/Icon/Icon.js.map +1 -1
  225. package/dist/js/components/Label/Label.d.ts +4 -2
  226. package/dist/js/components/Label/Label.d.ts.map +1 -1
  227. package/dist/js/components/Label/Label.js +19 -4
  228. package/dist/js/components/Label/Label.js.map +1 -1
  229. package/dist/js/components/Menu/MenuContainer.d.ts +1 -1
  230. package/dist/js/components/Menu/MenuContainer.d.ts.map +1 -1
  231. package/dist/js/components/Modal/ModalContent.d.ts.map +1 -1
  232. package/dist/js/components/Modal/ModalContent.js +3 -1
  233. package/dist/js/components/Modal/ModalContent.js.map +1 -1
  234. package/dist/js/components/Nav/NavItem.d.ts +1 -1
  235. package/dist/js/components/Nav/NavItem.d.ts.map +1 -1
  236. package/dist/js/components/Nav/NavList.d.ts +10 -4
  237. package/dist/js/components/Nav/NavList.d.ts.map +1 -1
  238. package/dist/js/components/Nav/NavList.js +29 -8
  239. package/dist/js/components/Nav/NavList.js.map +1 -1
  240. package/dist/js/components/SearchInput/SearchInput.d.ts.map +1 -1
  241. package/dist/js/components/SearchInput/SearchInput.js +4 -2
  242. package/dist/js/components/SearchInput/SearchInput.js.map +1 -1
  243. package/dist/js/components/Select/Select.d.ts +9 -1
  244. package/dist/js/components/Select/Select.d.ts.map +1 -1
  245. package/dist/js/components/Select/Select.js.map +1 -1
  246. package/dist/js/components/Slider/Slider.d.ts +8 -4
  247. package/dist/js/components/Slider/Slider.d.ts.map +1 -1
  248. package/dist/js/components/Slider/Slider.js +62 -16
  249. package/dist/js/components/Slider/Slider.js.map +1 -1
  250. package/dist/js/components/Slider/SliderStep.d.ts.map +1 -1
  251. package/dist/js/components/Slider/SliderStep.js +2 -1
  252. package/dist/js/components/Slider/SliderStep.js.map +1 -1
  253. package/dist/js/components/Tabs/Tabs.d.ts +11 -6
  254. package/dist/js/components/Tabs/Tabs.d.ts.map +1 -1
  255. package/dist/js/components/Tabs/Tabs.js +35 -16
  256. package/dist/js/components/Tabs/Tabs.js.map +1 -1
  257. package/dist/js/components/TextInput/TextInput.d.ts +3 -1
  258. package/dist/js/components/TextInput/TextInput.d.ts.map +1 -1
  259. package/dist/js/components/TextInput/TextInput.js +8 -7
  260. package/dist/js/components/TextInput/TextInput.js.map +1 -1
  261. package/dist/js/components/Timestamp/Timestamp.d.ts +4 -0
  262. package/dist/js/components/Timestamp/Timestamp.d.ts.map +1 -1
  263. package/dist/js/components/Timestamp/Timestamp.js +7 -4
  264. package/dist/js/components/Timestamp/Timestamp.js.map +1 -1
  265. package/dist/js/helpers/Popper/Popper.d.ts +2 -1
  266. package/dist/js/helpers/Popper/Popper.d.ts.map +1 -1
  267. package/dist/js/helpers/Popper/Popper.js +29 -6
  268. package/dist/js/helpers/Popper/Popper.js.map +1 -1
  269. package/dist/umd/react-core.min.js +3 -3
  270. package/helpers/package.json +1 -1
  271. package/layouts/package.json +1 -1
  272. package/next/package.json +1 -1
  273. package/package.json +8 -7
  274. package/src/components/BackToTop/BackToTop.tsx +1 -1
  275. package/src/components/BackToTop/__tests__/BackToTop.test.tsx +1 -1
  276. package/src/components/BackToTop/__tests__/__snapshots__/BackToTop.test.tsx.snap +1 -1
  277. package/src/components/BackgroundImage/__tests__/BackgroundImage.test.tsx +21 -7
  278. package/src/components/BackgroundImage/__tests__/__snapshots__/BackgroundImage.test.tsx.snap +11 -0
  279. package/src/components/Brand/__tests__/Brand.test.tsx +105 -30
  280. package/src/components/Breadcrumb/examples/BreadcrumbDropdown.tsx +25 -3
  281. package/src/components/Button/Button.tsx +5 -5
  282. package/src/components/Button/examples/ButtonVariations.tsx +1 -1
  283. package/src/components/Checkbox/examples/Checkbox.md +8 -2
  284. package/src/components/Checkbox/examples/CheckboxControlled.tsx +18 -16
  285. package/src/components/ClipboardCopy/ClipboardCopy.tsx +1 -0
  286. package/src/components/ClipboardCopy/ClipboardCopyExpanded.tsx +1 -1
  287. package/src/components/ClipboardCopy/ClipboardCopyToggle.tsx +5 -2
  288. package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyExpanded.test.tsx.snap +3 -1
  289. package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyToggle.test.tsx.snap +16 -12
  290. package/src/components/DragDrop/Draggable.tsx +1 -0
  291. package/src/components/Drawer/Drawer.tsx +6 -6
  292. package/src/components/Drawer/DrawerPanelContent.tsx +72 -26
  293. package/src/components/Drawer/examples/Drawer.md +12 -12
  294. package/src/components/Drawer/examples/{DrawerInlinePanelRight.tsx → DrawerInlinePanelEnd.tsx} +1 -1
  295. package/src/components/Drawer/examples/{DrawerInlinePanelLeft.tsx → DrawerInlinePanelStart.tsx} +2 -2
  296. package/src/components/Drawer/examples/{DrawerPanelLeft.tsx → DrawerPanelEnd.tsx} +2 -2
  297. package/src/components/Drawer/examples/{DrawerPanelRight.tsx → DrawerPanelStart.tsx} +2 -2
  298. package/src/components/Drawer/examples/{DrawerResizableOnRight.tsx → DrawerResizableAtEnd.tsx} +3 -3
  299. package/src/components/Drawer/examples/{DrawerResizableOnLeft.tsx → DrawerResizableAtStart.tsx} +2 -2
  300. package/src/components/Dropdown/Dropdown.tsx +3 -1
  301. package/src/components/Icon/Icon.tsx +15 -1
  302. package/src/components/Icon/__tests__/Icon.test.tsx +16 -0
  303. package/src/components/Label/Label.tsx +29 -3
  304. package/src/components/Label/__tests__/Label.test.tsx +35 -0
  305. package/src/components/Label/__tests__/__snapshots__/Label.test.tsx.snap +1 -0
  306. package/src/components/Label/examples/LabelFilled.tsx +220 -168
  307. package/src/components/Label/examples/LabelOutline.tsx +280 -226
  308. package/src/components/Menu/MenuContainer.tsx +1 -1
  309. package/src/components/Menu/examples/MenuWithDrilldownBreadcrumbs.tsx +32 -15
  310. package/src/components/Modal/ModalContent.tsx +4 -6
  311. package/src/components/Nav/NavItem.tsx +1 -1
  312. package/src/components/Nav/NavList.tsx +44 -12
  313. package/src/components/Nav/__tests__/__snapshots__/Nav.test.tsx.snap +10 -10
  314. package/src/components/Page/__tests__/__snapshots__/Page.test.tsx.snap +6 -6
  315. package/src/components/SearchInput/SearchInput.tsx +5 -2
  316. package/src/components/SearchInput/__tests__/__snapshots__/SearchInput.test.tsx.snap +105 -65
  317. package/src/components/SearchInput/examples/SearchInputAdvanced.tsx +1 -1
  318. package/src/components/Select/Select.tsx +9 -1
  319. package/src/components/Slider/Slider.tsx +69 -20
  320. package/src/components/Slider/SliderStep.tsx +2 -1
  321. package/src/components/Slider/_tests_/Slider.test.tsx +3 -3
  322. package/src/components/Slider/examples/SliderActions.tsx +3 -3
  323. package/src/components/Tabs/Tabs.tsx +50 -26
  324. package/src/components/Tabs/examples/Tabs.md +1 -3
  325. package/src/components/TextInput/TextInput.tsx +11 -7
  326. package/src/components/TextInput/__tests__/TextInput.test.tsx +16 -1
  327. package/src/components/TextInput/__tests__/__snapshots__/TextInput.test.tsx.snap +2 -1
  328. package/src/components/TextInput/examples/TextInput.md +2 -2
  329. package/src/components/TextInput/examples/{TextInputLeftTruncated.tsx → TextInputStartTruncated.tsx} +3 -3
  330. package/src/components/Timestamp/Timestamp.tsx +12 -3
  331. package/src/components/Timestamp/__tests__/Timestamp.test.tsx +6 -0
  332. package/src/components/Timestamp/examples/Timestamp.md +8 -0
  333. package/src/components/Timestamp/examples/TimestampDefault.tsx +7 -1
  334. package/src/components/Timestamp/examples/TimestampDefaultTooltip.tsx +1 -1
  335. package/src/components/Toolbar/examples/Toolbar.md +0 -6
  336. package/src/demos/Card/Card.md +3 -664
  337. package/src/demos/Card/examples/CardView.tsx +575 -0
  338. package/src/demos/CardDemos.md +4 -4
  339. package/src/demos/CustomMenus/examples/ApplicationLauncherDemo.tsx +1 -1
  340. package/src/demos/DataListDemo.md +7 -4
  341. package/src/demos/PrimaryDetail.md +3 -4
  342. package/src/deprecated/components/ContextSelector/__tests__/__snapshots__/ContextSelector.test.tsx.snap +42 -26
  343. package/src/helpers/Popper/Popper.tsx +43 -6
  344. package/src/components/Brand/__tests__/__snapshots__/Brand.test.tsx.snap +0 -11
  345. package/src/components/Checkbox/examples/checkbox.css +0 -3
  346. package/src/components/Toolbar/examples/Test.tsx +0 -258
  347. /package/src/demos/Card/{CardData.jsx → examples/CardData.jsx} +0 -0
@@ -87,8 +87,8 @@ export const DrawerPanelContent: React.FunctionComponent<DrawerPanelContentProps
87
87
  const previouslyFocusedElement = React.useRef(null);
88
88
  let currWidth: number = 0;
89
89
  let panelRect: DOMRect;
90
- let right: number;
91
- let left: number;
90
+ let end: number;
91
+ let start: number;
92
92
  let bottom: number;
93
93
  let setInitialVals: boolean = true;
94
94
 
@@ -108,23 +108,52 @@ export const DrawerPanelContent: React.FunctionComponent<DrawerPanelContentProps
108
108
  const calcValueNow = () => {
109
109
  let splitterPos;
110
110
  let drawerSize;
111
+ const isRTL = window.getComputedStyle(panel.current).getPropertyValue('direction') === 'rtl';
111
112
 
112
- if (isInline && position === 'right') {
113
- splitterPos = panel.current.getBoundingClientRect().right - splitterRef.current.getBoundingClientRect().left;
114
- drawerSize = drawerRef.current.getBoundingClientRect().right - drawerRef.current.getBoundingClientRect().left;
115
- } else if (isInline && position === 'left') {
116
- splitterPos = splitterRef.current.getBoundingClientRect().right - panel.current.getBoundingClientRect().left;
117
- drawerSize = drawerRef.current.getBoundingClientRect().right - drawerRef.current.getBoundingClientRect().left;
118
- } else if (position === 'right') {
119
- splitterPos =
120
- drawerContentRef.current.getBoundingClientRect().right - splitterRef.current.getBoundingClientRect().left;
121
- drawerSize =
122
- drawerContentRef.current.getBoundingClientRect().right - drawerContentRef.current.getBoundingClientRect().left;
123
- } else if (position === 'left') {
124
- splitterPos =
125
- splitterRef.current.getBoundingClientRect().right - drawerContentRef.current.getBoundingClientRect().left;
126
- drawerSize =
127
- drawerContentRef.current.getBoundingClientRect().right - drawerContentRef.current.getBoundingClientRect().left;
113
+ if (isInline && (position === 'end' || position === 'right')) {
114
+ if (isRTL) {
115
+ splitterPos = panel.current.getBoundingClientRect().left - splitterRef.current.getBoundingClientRect().right;
116
+ drawerSize = drawerRef.current.getBoundingClientRect().left - drawerRef.current.getBoundingClientRect().right;
117
+ } else {
118
+ splitterPos = panel.current.getBoundingClientRect().right - splitterRef.current.getBoundingClientRect().left;
119
+ drawerSize = drawerRef.current.getBoundingClientRect().right - drawerRef.current.getBoundingClientRect().left;
120
+ }
121
+ } else if (isInline && (position === 'start' || position === 'left')) {
122
+ if (isRTL) {
123
+ splitterPos = splitterRef.current.getBoundingClientRect().left - panel.current.getBoundingClientRect().right;
124
+ drawerSize = drawerRef.current.getBoundingClientRect().left - drawerRef.current.getBoundingClientRect().right;
125
+ } else {
126
+ splitterPos = splitterRef.current.getBoundingClientRect().right - panel.current.getBoundingClientRect().left;
127
+ drawerSize = drawerRef.current.getBoundingClientRect().right - drawerRef.current.getBoundingClientRect().left;
128
+ }
129
+ } else if (position === 'end' || position === 'right') {
130
+ if (isRTL) {
131
+ splitterPos =
132
+ drawerContentRef.current.getBoundingClientRect().left - splitterRef.current.getBoundingClientRect().right;
133
+ drawerSize =
134
+ drawerContentRef.current.getBoundingClientRect().left -
135
+ drawerContentRef.current.getBoundingClientRect().right;
136
+ } else {
137
+ splitterPos =
138
+ drawerContentRef.current.getBoundingClientRect().right - splitterRef.current.getBoundingClientRect().left;
139
+ drawerSize =
140
+ drawerContentRef.current.getBoundingClientRect().right -
141
+ drawerContentRef.current.getBoundingClientRect().left;
142
+ }
143
+ } else if (position === 'start' || position === 'left') {
144
+ if (isRTL) {
145
+ splitterPos =
146
+ splitterRef.current.getBoundingClientRect().left - drawerContentRef.current.getBoundingClientRect().right;
147
+ drawerSize =
148
+ drawerContentRef.current.getBoundingClientRect().left -
149
+ drawerContentRef.current.getBoundingClientRect().right;
150
+ } else {
151
+ splitterPos =
152
+ splitterRef.current.getBoundingClientRect().right - drawerContentRef.current.getBoundingClientRect().left;
153
+ drawerSize =
154
+ drawerContentRef.current.getBoundingClientRect().right -
155
+ drawerContentRef.current.getBoundingClientRect().left;
156
+ }
128
157
  } else if (position === 'bottom') {
129
158
  splitterPos =
130
159
  drawerContentRef.current.getBoundingClientRect().bottom - splitterRef.current.getBoundingClientRect().top;
@@ -166,6 +195,8 @@ export const DrawerPanelContent: React.FunctionComponent<DrawerPanelContentProps
166
195
  };
167
196
 
168
197
  const handleControlMove = (e: MouseEvent | TouchEvent, controlPosition: number) => {
198
+ const isRTL = window.getComputedStyle(panel.current).getPropertyValue('direction') === 'rtl';
199
+
169
200
  e.stopPropagation();
170
201
  if (!isResizing) {
171
202
  return;
@@ -173,17 +204,22 @@ export const DrawerPanelContent: React.FunctionComponent<DrawerPanelContentProps
173
204
 
174
205
  if (setInitialVals) {
175
206
  panelRect = panel.current.getBoundingClientRect();
176
- right = panelRect.right;
177
- left = panelRect.left;
207
+ if (isRTL) {
208
+ start = panelRect.right;
209
+ end = panelRect.left;
210
+ } else {
211
+ end = panelRect.right;
212
+ start = panelRect.left;
213
+ }
178
214
  bottom = panelRect.bottom;
179
215
  setInitialVals = false;
180
216
  }
181
217
  const mousePos = controlPosition;
182
218
  let newSize = 0;
183
- if (position === 'right') {
184
- newSize = right - mousePos;
185
- } else if (position === 'left') {
186
- newSize = mousePos - left;
219
+ if (position === 'end' || position === 'right') {
220
+ newSize = isRTL ? mousePos - end : end - mousePos;
221
+ } else if (position === 'start' || position === 'left') {
222
+ newSize = isRTL ? start - mousePos : mousePos - start;
187
223
  } else {
188
224
  newSize = bottom - mousePos;
189
225
  }
@@ -225,6 +261,8 @@ export const DrawerPanelContent: React.FunctionComponent<DrawerPanelContentProps
225
261
  const callbackMouseUp = React.useCallback(handleMouseup, []);
226
262
 
227
263
  const handleKeys = (e: React.KeyboardEvent) => {
264
+ const isRTL = window.getComputedStyle(panel.current).getPropertyValue('direction') === 'rtl';
265
+
228
266
  const key = e.key;
229
267
  if (
230
268
  key !== 'Escape' &&
@@ -248,9 +286,17 @@ export const DrawerPanelContent: React.FunctionComponent<DrawerPanelContentProps
248
286
  newSize = position === 'bottom' ? panelRect.height : panelRect.width;
249
287
  let delta = 0;
250
288
  if (key === 'ArrowRight') {
251
- delta = position === 'left' ? increment : -increment;
289
+ if (isRTL) {
290
+ delta = position === 'left' || position === 'start' ? -increment : increment;
291
+ } else {
292
+ delta = position === 'left' || position === 'start' ? increment : -increment;
293
+ }
252
294
  } else if (key === 'ArrowLeft') {
253
- delta = position === 'left' ? -increment : increment;
295
+ if (isRTL) {
296
+ delta = position === 'left' || position === 'start' ? increment : -increment;
297
+ } else {
298
+ delta = position === 'left' || position === 'start' ? -increment : increment;
299
+ }
254
300
  } else if (key === 'ArrowUp') {
255
301
  delta = increment;
256
302
  } else if (key === 'ArrowDown') {
@@ -26,15 +26,15 @@ section: components
26
26
 
27
27
  ```
28
28
 
29
- ### Panel on right
29
+ ### Panel at end
30
30
 
31
- ```ts file="./DrawerPanelRight.tsx"
31
+ ```ts file="./DrawerPanelEnd.tsx"
32
32
 
33
33
  ```
34
34
 
35
- ### Panel on left
35
+ ### Panel at start
36
36
 
37
- ```ts file="./DrawerPanelLeft.tsx"
37
+ ```ts file="./DrawerPanelStart.tsx"
38
38
 
39
39
  ```
40
40
 
@@ -50,15 +50,15 @@ section: components
50
50
 
51
51
  ```
52
52
 
53
- ### Inline panel on right
53
+ ### Inline panel at end
54
54
 
55
- ```ts file="./DrawerInlinePanelRight.tsx"
55
+ ```ts file="./DrawerInlinePanelEnd.tsx"
56
56
 
57
57
  ```
58
58
 
59
- ### Inline panel on left
59
+ ### Inline panel at start
60
60
 
61
- ```ts file="./DrawerInlinePanelLeft.tsx"
61
+ ```ts file="./DrawerInlinePanelStart.tsx"
62
62
 
63
63
  ```
64
64
 
@@ -100,15 +100,15 @@ section: components
100
100
 
101
101
  ```
102
102
 
103
- ### Resizable on right
103
+ ### Resizable at end
104
104
 
105
- ```ts file="DrawerResizableOnRight.tsx"
105
+ ```ts file="DrawerResizableAtEnd.tsx"
106
106
 
107
107
  ```
108
108
 
109
- ### Resizable on left
109
+ ### Resizable at start
110
110
 
111
- ```ts file="DrawerResizableOnLeft.tsx"
111
+ ```ts file="DrawerResizableAtStart.tsx"
112
112
 
113
113
  ```
114
114
 
@@ -10,7 +10,7 @@ import {
10
10
  Button
11
11
  } from '@patternfly/react-core';
12
12
 
13
- export const DrawerInlinePanelRight: React.FunctionComponent = () => {
13
+ export const DrawerInlinePanelEnd: React.FunctionComponent = () => {
14
14
  const [isExpanded, setIsExpanded] = React.useState(false);
15
15
  const drawerRef = React.useRef<HTMLDivElement>();
16
16
 
@@ -10,7 +10,7 @@ import {
10
10
  Button
11
11
  } from '@patternfly/react-core';
12
12
 
13
- export const DrawerInlinePanelLeft: React.FunctionComponent = () => {
13
+ export const DrawerInlinePanelStart: React.FunctionComponent = () => {
14
14
  const [isExpanded, setIsExpanded] = React.useState(false);
15
15
  const drawerRef = React.useRef<HTMLDivElement>();
16
16
 
@@ -47,7 +47,7 @@ export const DrawerInlinePanelLeft: React.FunctionComponent = () => {
47
47
  <Button aria-expanded={isExpanded} onClick={onClick}>
48
48
  Toggle drawer
49
49
  </Button>
50
- <Drawer isExpanded={isExpanded} isInline position="left" onExpand={onExpand}>
50
+ <Drawer isExpanded={isExpanded} isInline position="start" onExpand={onExpand}>
51
51
  <DrawerContent panelContent={panelContent}>
52
52
  <DrawerContentBody>{drawerContent}</DrawerContentBody>
53
53
  </DrawerContent>
@@ -10,7 +10,7 @@ import {
10
10
  Button
11
11
  } from '@patternfly/react-core';
12
12
 
13
- export const DrawerPanelLeft: React.FunctionComponent = () => {
13
+ export const DrawerPanelEnd: React.FunctionComponent = () => {
14
14
  const [isExpanded, setIsExpanded] = React.useState(false);
15
15
  const drawerRef = React.useRef<HTMLDivElement>();
16
16
 
@@ -47,7 +47,7 @@ export const DrawerPanelLeft: React.FunctionComponent = () => {
47
47
  <Button aria-expanded={isExpanded} onClick={onClick}>
48
48
  Toggle drawer
49
49
  </Button>
50
- <Drawer isExpanded={isExpanded} position="left" onExpand={onExpand}>
50
+ <Drawer isExpanded={isExpanded} position="end" onExpand={onExpand}>
51
51
  <DrawerContent panelContent={panelContent}>
52
52
  <DrawerContentBody>{drawerContent}</DrawerContentBody>
53
53
  </DrawerContent>
@@ -10,7 +10,7 @@ import {
10
10
  Button
11
11
  } from '@patternfly/react-core';
12
12
 
13
- export const DrawerPanelRight: React.FunctionComponent = () => {
13
+ export const DrawerPanelStart: React.FunctionComponent = () => {
14
14
  const [isExpanded, setIsExpanded] = React.useState(false);
15
15
  const drawerRef = React.useRef<HTMLDivElement>();
16
16
 
@@ -47,7 +47,7 @@ export const DrawerPanelRight: React.FunctionComponent = () => {
47
47
  <Button aria-expanded={isExpanded} onClick={onClick}>
48
48
  Toggle drawer
49
49
  </Button>
50
- <Drawer isExpanded={isExpanded} position="right" onExpand={onExpand}>
50
+ <Drawer isExpanded={isExpanded} position="start" onExpand={onExpand}>
51
51
  <DrawerContent panelContent={panelContent}>
52
52
  <DrawerContentBody>{drawerContent}</DrawerContentBody>
53
53
  </DrawerContent>
@@ -10,7 +10,7 @@ import {
10
10
  Button
11
11
  } from '@patternfly/react-core';
12
12
 
13
- export const DrawerResizableOnRight: React.FunctionComponent = () => {
13
+ export const DrawerResizableAtEnd: React.FunctionComponent = () => {
14
14
  const [isExpanded, setIsExpanded] = React.useState(false);
15
15
  const drawerRef = React.useRef<HTMLDivElement>();
16
16
 
@@ -32,7 +32,7 @@ export const DrawerResizableOnRight: React.FunctionComponent = () => {
32
32
  };
33
33
 
34
34
  const panelContent = (
35
- <DrawerPanelContent isResizable onResize={onResize} id="right-resize-panel" defaultSize={'500px'} minSize={'150px'}>
35
+ <DrawerPanelContent isResizable onResize={onResize} id="end-resize-panel" defaultSize={'500px'} minSize={'150px'}>
36
36
  <DrawerHead>
37
37
  <span tabIndex={isExpanded ? 0 : -1} ref={drawerRef}>
38
38
  drawer-panel
@@ -52,7 +52,7 @@ export const DrawerResizableOnRight: React.FunctionComponent = () => {
52
52
  <Button aria-expanded={isExpanded} onClick={onClick}>
53
53
  Toggle drawer
54
54
  </Button>
55
- <Drawer isExpanded={isExpanded} onExpand={onExpand} position="right">
55
+ <Drawer isExpanded={isExpanded} onExpand={onExpand} position="end">
56
56
  <DrawerContent panelContent={panelContent}>
57
57
  <DrawerContentBody>{drawerContent}</DrawerContentBody>
58
58
  </DrawerContent>
@@ -10,7 +10,7 @@ import {
10
10
  Button
11
11
  } from '@patternfly/react-core';
12
12
 
13
- export const DrawerResizableOnLeft: React.FunctionComponent = () => {
13
+ export const DrawerResizableAtStart: React.FunctionComponent = () => {
14
14
  const [isExpanded, setIsExpanded] = React.useState(false);
15
15
  const drawerRef = React.useRef<HTMLDivElement>();
16
16
 
@@ -47,7 +47,7 @@ export const DrawerResizableOnLeft: React.FunctionComponent = () => {
47
47
  <Button aria-expanded={isExpanded} onClick={onClick}>
48
48
  Toggle drawer
49
49
  </Button>
50
- <Drawer isExpanded={isExpanded} onExpand={onExpand} position="left">
50
+ <Drawer isExpanded={isExpanded} onExpand={onExpand} position="start">
51
51
  <DrawerContent panelContent={panelContent}>
52
52
  <DrawerContentBody>{drawerContent}</DrawerContentBody>
53
53
  </DrawerContent>
@@ -8,7 +8,7 @@ export interface DropdownPopperProps {
8
8
  /** Vertical direction of the popper. If enableFlip is set to true, this will set the initial direction before the popper flips. */
9
9
  direction?: 'up' | 'down';
10
10
  /** Horizontal position of the popper */
11
- position?: 'right' | 'left' | 'center';
11
+ position?: 'right' | 'left' | 'center' | 'start' | 'end';
12
12
  /** Custom width of the popper. If the value is "trigger", it will set the width to the dropdown toggle's width */
13
13
  width?: string | 'trigger';
14
14
  /** Minimum width of the popper. If the value is "trigger", it will set the min width to the dropdown toggle's width */
@@ -17,6 +17,8 @@ export interface DropdownPopperProps {
17
17
  maxWidth?: string | 'trigger';
18
18
  /** Enable to flip the popper when it reaches the boundary */
19
19
  enableFlip?: boolean;
20
+ /** The container to append the popper to. Defaults to 'inline'. */
21
+ appendTo?: HTMLElement | (() => HTMLElement) | 'inline';
20
22
  }
21
23
 
22
24
  export interface DropdownToggleProps {
@@ -24,6 +24,10 @@ export interface IconComponentProps extends Omit<React.HTMLProps<HTMLSpanElement
24
24
  isInProgress?: boolean;
25
25
  /** Aria-label for the default progress icon */
26
26
  defaultProgressArialabel?: string;
27
+ /** @beta Flag indicating whether the icon passed as children should be mirrored for
28
+ * right to left (RTL) languages. This will not mirror the icon passed to progressIcon.
29
+ */
30
+ shouldMirrorRTL?: boolean;
27
31
  }
28
32
 
29
33
  export const Icon: React.FunctionComponent<IconComponentProps> = ({
@@ -37,6 +41,7 @@ export const Icon: React.FunctionComponent<IconComponentProps> = ({
37
41
  isInline = false,
38
42
  isInProgress = false,
39
43
  defaultProgressArialabel = 'Loading...',
44
+ shouldMirrorRTL = false,
40
45
  ...props
41
46
  }: IconComponentProps) => {
42
47
  const _progressIcon = progressIcon ?? <Spinner diameter="1em" aria-label={defaultProgressArialabel} />;
@@ -52,7 +57,16 @@ export const Icon: React.FunctionComponent<IconComponentProps> = ({
52
57
  )}
53
58
  {...props}
54
59
  >
55
- <span className={css(styles.iconContent, styles.modifiers[iconSize], styles.modifiers[status])}>{children}</span>
60
+ <span
61
+ className={css(
62
+ styles.iconContent,
63
+ styles.modifiers[iconSize],
64
+ styles.modifiers[status],
65
+ shouldMirrorRTL && 'pf-v5-m-mirror-inline-rtl'
66
+ )}
67
+ >
68
+ {children}
69
+ </span>
56
70
  {isInProgress && (
57
71
  <span className={css(styles.iconProgress, styles.modifiers[progressIconSize], className)}>{_progressIcon}</span>
58
72
  )}
@@ -194,3 +194,19 @@ test('renders progress icon successfully', () => {
194
194
  );
195
195
  expect(asFragment()).toMatchSnapshot();
196
196
  });
197
+
198
+ test('Renders with class pf-v5-m-mirror-inline-rtl on icon passed as children when shouldMirrorRTL is true', () => {
199
+ render(<Icon shouldMirrorRTL>Icon content</Icon>);
200
+
201
+ expect(screen.getByText('Icon content')).toHaveClass('pf-v5-m-mirror-inline-rtl');
202
+ });
203
+
204
+ test('Does not render with class pf-v5-m-mirror-inline-rtl on progressIcon when shouldMirrorRTL is true', () => {
205
+ render(
206
+ <Icon shouldMirrorRTL isInProgress progressIcon="Progress icon">
207
+ Icon content
208
+ </Icon>
209
+ );
210
+
211
+ expect(screen.getByText('Progress icon')).not.toHaveClass('pf-v5-m-mirror-inline-rtl');
212
+ });
@@ -55,10 +55,12 @@ export interface LabelProps extends React.HTMLProps<HTMLSpanElement> {
55
55
  closeBtnAriaLabel?: string;
56
56
  /** Additional properties for the default close button. */
57
57
  closeBtnProps?: any;
58
- /** Href for a label that is a link. If present, the label will change to an anchor element. */
58
+ /** Href for a label that is a link. If present, the label will change to an anchor element. This should not be passed in if the onClick prop is also passed in. */
59
59
  href?: string;
60
- /** Flag indicating if the label is an overflow label */
60
+ /** Flag indicating if the label is an overflow label. */
61
61
  isOverflowLabel?: boolean;
62
+ /** Callback for when the label is clicked. This should not be passed in if the href or isEditable props are also passed in. */
63
+ onClick?: (event: React.MouseEvent) => void;
62
64
  /** Forwards the label content and className to rendered function. Use this prop for react router support.*/
63
65
  render?: ({
64
66
  className,
@@ -94,6 +96,7 @@ export const Label: React.FunctionComponent<LabelProps> = ({
94
96
  tooltipPosition,
95
97
  icon,
96
98
  onClose,
99
+ onClick: onLabelClick,
97
100
  onEditCancel,
98
101
  onEditComplete,
99
102
  closeBtn,
@@ -118,6 +121,20 @@ export const Label: React.FunctionComponent<LabelProps> = ({
118
121
  };
119
122
  });
120
123
 
124
+ React.useEffect(() => {
125
+ if (onLabelClick && href) {
126
+ // eslint-disable-next-line no-console
127
+ console.warn(
128
+ 'Link labels cannot have onClick passed, this results in invalid HTML. Please remove either the href or onClick prop.'
129
+ );
130
+ } else if (onLabelClick && isEditable) {
131
+ // eslint-disable-next-line no-console
132
+ console.warn(
133
+ 'Editable labels cannot have onClick passed, clicking starts the label edit process. Please remove either the isEditable or onClick prop.'
134
+ );
135
+ }
136
+ }, [onLabelClick, href, isEditable]);
137
+
121
138
  const onDocMouseDown = (event: MouseEvent) => {
122
139
  if (
123
140
  isEditableActive &&
@@ -235,14 +252,22 @@ export const Label: React.FunctionComponent<LabelProps> = ({
235
252
  let LabelComponentChildElement = 'span';
236
253
  if (href) {
237
254
  LabelComponentChildElement = 'a';
238
- } else if (isEditable) {
255
+ } else if (isEditable || (onLabelClick && !isOverflowLabel)) {
239
256
  LabelComponentChildElement = 'button';
240
257
  }
241
258
 
259
+ const clickableLabelProps = {
260
+ type: 'button',
261
+ onClick: onLabelClick
262
+ };
263
+
264
+ const isButton = LabelComponentChildElement === 'button';
265
+
242
266
  const labelComponentChildProps = {
243
267
  className: css(styles.labelContent),
244
268
  ...(isTooltipVisible && { tabIndex: 0 }),
245
269
  ...(href && { href }),
270
+ ...(isButton && clickableLabelProps),
246
271
  ...(isEditable && {
247
272
  ref: editableButtonRef,
248
273
  onClick: (e: React.MouseEvent) => {
@@ -289,6 +314,7 @@ export const Label: React.FunctionComponent<LabelProps> = ({
289
314
  isEditableActive && styles.modifiers.editableActive,
290
315
  className
291
316
  )}
317
+ onClick={isOverflowLabel ? onLabelClick : undefined}
292
318
  >
293
319
  {!isEditableActive && labelComponentChild}
294
320
  {!isEditableActive && onClose && button}
@@ -109,4 +109,39 @@ describe('Label', () => {
109
109
  expect(screen.queryByRole('button', { name: 'Something' })).toBeNull();
110
110
  expect(asFragment()).toMatchSnapshot();
111
111
  });
112
+
113
+ test('a button is not rendered when onClick is not passed', () => {
114
+ render(<Label>Click me</Label>);
115
+
116
+ expect(screen.queryByRole(`button`)).not.toBeInTheDocument();
117
+ });
118
+
119
+ test('a button is rendered when onClick is passed', () => {
120
+ const fn = jest.fn();
121
+
122
+ render(<Label onClick={fn}>Click me</Label>);
123
+
124
+ expect(screen.getByRole(`button`)).toBeVisible();
125
+ });
126
+
127
+ test('clickable label does not call the passed callback when it is not clicked', async () => {
128
+ const mockCallback = jest.fn();
129
+
130
+ render(<Label onClick={mockCallback}>Click me</Label>);
131
+
132
+ expect(mockCallback).not.toHaveBeenCalled();
133
+ });
134
+
135
+ test('clickable label calls passed callback on click', async () => {
136
+ const mockCallback = jest.fn();
137
+ const user = userEvent.setup();
138
+
139
+ render(<Label onClick={mockCallback}>Click me</Label>);
140
+
141
+ const label = screen.getByRole('button');
142
+
143
+ await user.click(label);
144
+
145
+ expect(mockCallback).toBeCalledTimes(1);
146
+ });
112
147
  });
@@ -7,6 +7,7 @@ exports[`Label editable label 1`] = `
7
7
  >
8
8
  <button
9
9
  class="pf-v5-c-label__content"
10
+ type="button"
10
11
  >
11
12
  <span
12
13
  class="pf-v5-c-label__text"