@patternfly/react-core 6.3.0-prerelease.2 → 6.3.0-prerelease.20

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 (386) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/CONTRIBUTING.md +3 -5
  3. package/components/package.json +1 -1
  4. package/deprecated/package.json +1 -1
  5. package/dist/dynamic/components/AboutModal/package.json +1 -1
  6. package/dist/dynamic/components/Accordion/package.json +1 -1
  7. package/dist/dynamic/components/ActionList/package.json +1 -1
  8. package/dist/dynamic/components/Alert/package.json +1 -1
  9. package/dist/dynamic/components/Avatar/package.json +1 -1
  10. package/dist/dynamic/components/BackToTop/package.json +1 -1
  11. package/dist/dynamic/components/Backdrop/package.json +1 -1
  12. package/dist/dynamic/components/BackgroundImage/package.json +1 -1
  13. package/dist/dynamic/components/Badge/package.json +1 -1
  14. package/dist/dynamic/components/Banner/package.json +1 -1
  15. package/dist/dynamic/components/Brand/package.json +1 -1
  16. package/dist/dynamic/components/Breadcrumb/package.json +1 -1
  17. package/dist/dynamic/components/Button/package.json +1 -1
  18. package/dist/dynamic/components/CalendarMonth/package.json +1 -1
  19. package/dist/dynamic/components/Card/package.json +1 -1
  20. package/dist/dynamic/components/Checkbox/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/Content/package.json +1 -1
  24. package/dist/dynamic/components/DataList/package.json +1 -1
  25. package/dist/dynamic/components/DatePicker/package.json +1 -1
  26. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  27. package/dist/dynamic/components/Divider/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/TextArea/package.json +1 -1
  72. package/dist/dynamic/components/TextInput/package.json +1 -1
  73. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  74. package/dist/dynamic/components/TimePicker/package.json +1 -1
  75. package/dist/dynamic/components/Timestamp/package.json +1 -1
  76. package/dist/dynamic/components/Title/package.json +1 -1
  77. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  78. package/dist/dynamic/components/Toolbar/package.json +1 -1
  79. package/dist/dynamic/components/Tooltip/package.json +1 -1
  80. package/dist/dynamic/components/TreeView/package.json +1 -1
  81. package/dist/dynamic/components/Truncate/package.json +1 -1
  82. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  83. package/dist/dynamic/components/Wizard/package.json +1 -1
  84. package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
  85. package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Tile/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  90. package/dist/dynamic/deprecated/components/package.json +1 -1
  91. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  92. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  93. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  94. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  95. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  96. package/dist/dynamic/helpers/constants/package.json +1 -1
  97. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  98. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  99. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  100. package/dist/dynamic/helpers/package.json +1 -1
  101. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  102. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  103. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  104. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  105. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  106. package/dist/dynamic/helpers/util/package.json +1 -1
  107. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  108. package/dist/dynamic/layouts/Flex/package.json +1 -1
  109. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  110. package/dist/dynamic/layouts/Grid/package.json +1 -1
  111. package/dist/dynamic/layouts/Level/package.json +1 -1
  112. package/dist/dynamic/layouts/Split/package.json +1 -1
  113. package/dist/dynamic/layouts/Stack/package.json +1 -1
  114. package/dist/dynamic/styles/package.json +1 -1
  115. package/dist/dynamic-modules.json +2 -0
  116. package/dist/esm/components/Button/Button.d.ts +4 -0
  117. package/dist/esm/components/Button/Button.d.ts.map +1 -1
  118. package/dist/esm/components/Button/Button.js +20 -3
  119. package/dist/esm/components/Button/Button.js.map +1 -1
  120. package/dist/esm/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
  121. package/dist/esm/components/ClipboardCopy/ClipboardCopy.js +2 -2
  122. package/dist/esm/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
  123. package/dist/esm/components/DualListSelector/DualListSelector.d.ts +5 -0
  124. package/dist/esm/components/DualListSelector/DualListSelector.d.ts.map +1 -1
  125. package/dist/esm/components/DualListSelector/DualListSelector.js +4 -3
  126. package/dist/esm/components/DualListSelector/DualListSelector.js.map +1 -1
  127. package/dist/esm/components/DualListSelector/DualListSelectorContext.d.ts +1 -0
  128. package/dist/esm/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -1
  129. package/dist/esm/components/DualListSelector/DualListSelectorContext.js +1 -1
  130. package/dist/esm/components/DualListSelector/DualListSelectorContext.js.map +1 -1
  131. package/dist/esm/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -1
  132. package/dist/esm/components/DualListSelector/DualListSelectorListWrapper.js +1 -1
  133. package/dist/esm/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -1
  134. package/dist/esm/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -1
  135. package/dist/esm/components/DualListSelector/DualListSelectorTree.js +4 -1
  136. package/dist/esm/components/DualListSelector/DualListSelectorTree.js.map +1 -1
  137. package/dist/esm/components/DualListSelector/DualListSelectorTreeItem.d.ts +5 -0
  138. package/dist/esm/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -1
  139. package/dist/esm/components/DualListSelector/DualListSelectorTreeItem.js +8 -4
  140. package/dist/esm/components/DualListSelector/DualListSelectorTreeItem.js.map +1 -1
  141. package/dist/esm/components/Form/FormFieldGroupExpandable.d.ts +5 -0
  142. package/dist/esm/components/Form/FormFieldGroupExpandable.d.ts.map +1 -1
  143. package/dist/esm/components/Form/FormFieldGroupExpandable.js +2 -2
  144. package/dist/esm/components/Form/FormFieldGroupExpandable.js.map +1 -1
  145. package/dist/esm/components/Form/FormGroupLabelHelp.js +2 -2
  146. package/dist/esm/components/Form/FormGroupLabelHelp.js.map +1 -1
  147. package/dist/esm/components/Form/InternalFormFieldGroup.d.ts +5 -0
  148. package/dist/esm/components/Form/InternalFormFieldGroup.d.ts.map +1 -1
  149. package/dist/esm/components/Form/InternalFormFieldGroup.js +2 -2
  150. package/dist/esm/components/Form/InternalFormFieldGroup.js.map +1 -1
  151. package/dist/esm/components/Nav/NavExpandable.d.ts.map +1 -1
  152. package/dist/esm/components/Nav/NavExpandable.js +1 -1
  153. package/dist/esm/components/Nav/NavExpandable.js.map +1 -1
  154. package/dist/esm/components/SearchInput/SearchInput.d.ts +2 -0
  155. package/dist/esm/components/SearchInput/SearchInput.d.ts.map +1 -1
  156. package/dist/esm/components/SearchInput/SearchInput.js +2 -2
  157. package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
  158. package/dist/esm/components/Tabs/OverflowTab.d.ts +26 -0
  159. package/dist/esm/components/Tabs/OverflowTab.d.ts.map +1 -1
  160. package/dist/esm/components/Tabs/OverflowTab.js +2 -2
  161. package/dist/esm/components/Tabs/OverflowTab.js.map +1 -1
  162. package/dist/esm/components/Tabs/Tab.d.ts.map +1 -1
  163. package/dist/esm/components/Tabs/Tab.js +5 -2
  164. package/dist/esm/components/Tabs/Tab.js.map +1 -1
  165. package/dist/esm/components/Tabs/Tabs.d.ts +8 -0
  166. package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -1
  167. package/dist/esm/components/Tabs/Tabs.js +41 -9
  168. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  169. package/dist/esm/components/Tabs/TabsContext.d.ts +1 -0
  170. package/dist/esm/components/Tabs/TabsContext.d.ts.map +1 -1
  171. package/dist/esm/components/Tabs/TabsContext.js +1 -0
  172. package/dist/esm/components/Tabs/TabsContext.js.map +1 -1
  173. package/dist/esm/components/TreeView/TreeViewListItem.d.ts.map +1 -1
  174. package/dist/esm/components/TreeView/TreeViewListItem.js +1 -1
  175. package/dist/esm/components/TreeView/TreeViewListItem.js.map +1 -1
  176. package/dist/esm/components/Truncate/Truncate.d.ts +11 -8
  177. package/dist/esm/components/Truncate/Truncate.d.ts.map +1 -1
  178. package/dist/esm/components/Truncate/Truncate.js +22 -12
  179. package/dist/esm/components/Truncate/Truncate.js.map +1 -1
  180. package/dist/esm/demos/sampleData.d.ts.map +1 -1
  181. package/dist/esm/demos/sampleData.js +225 -226
  182. package/dist/esm/demos/sampleData.js.map +1 -1
  183. package/dist/esm/demos/sampleDataRTL.d.ts +7 -0
  184. package/dist/esm/demos/sampleDataRTL.d.ts.map +1 -0
  185. package/dist/esm/demos/sampleDataRTL.js +128 -0
  186. package/dist/esm/demos/sampleDataRTL.js.map +1 -0
  187. package/dist/esm/helpers/KeyboardHandler.js +3 -2
  188. package/dist/esm/helpers/KeyboardHandler.js.map +1 -1
  189. package/dist/esm/helpers/Popper/Popper.d.ts.map +1 -1
  190. package/dist/esm/helpers/Popper/Popper.js +1 -0
  191. package/dist/esm/helpers/Popper/Popper.js.map +1 -1
  192. package/dist/esm/helpers/util.d.ts +17 -0
  193. package/dist/esm/helpers/util.d.ts.map +1 -1
  194. package/dist/esm/helpers/util.js +36 -0
  195. package/dist/esm/helpers/util.js.map +1 -1
  196. package/dist/js/components/Button/Button.d.ts +4 -0
  197. package/dist/js/components/Button/Button.d.ts.map +1 -1
  198. package/dist/js/components/Button/Button.js +20 -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 +2 -2
  202. package/dist/js/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
  203. package/dist/js/components/DualListSelector/DualListSelector.d.ts +5 -0
  204. package/dist/js/components/DualListSelector/DualListSelector.d.ts.map +1 -1
  205. package/dist/js/components/DualListSelector/DualListSelector.js +4 -3
  206. package/dist/js/components/DualListSelector/DualListSelector.js.map +1 -1
  207. package/dist/js/components/DualListSelector/DualListSelectorContext.d.ts +1 -0
  208. package/dist/js/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -1
  209. package/dist/js/components/DualListSelector/DualListSelectorContext.js +1 -1
  210. package/dist/js/components/DualListSelector/DualListSelectorContext.js.map +1 -1
  211. package/dist/js/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -1
  212. package/dist/js/components/DualListSelector/DualListSelectorListWrapper.js +1 -1
  213. package/dist/js/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -1
  214. package/dist/js/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -1
  215. package/dist/js/components/DualListSelector/DualListSelectorTree.js +4 -1
  216. package/dist/js/components/DualListSelector/DualListSelectorTree.js.map +1 -1
  217. package/dist/js/components/DualListSelector/DualListSelectorTreeItem.d.ts +5 -0
  218. package/dist/js/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -1
  219. package/dist/js/components/DualListSelector/DualListSelectorTreeItem.js +7 -3
  220. package/dist/js/components/DualListSelector/DualListSelectorTreeItem.js.map +1 -1
  221. package/dist/js/components/Form/FormFieldGroupExpandable.d.ts +5 -0
  222. package/dist/js/components/Form/FormFieldGroupExpandable.d.ts.map +1 -1
  223. package/dist/js/components/Form/FormFieldGroupExpandable.js +2 -2
  224. package/dist/js/components/Form/FormFieldGroupExpandable.js.map +1 -1
  225. package/dist/js/components/Form/FormGroupLabelHelp.js +2 -2
  226. package/dist/js/components/Form/FormGroupLabelHelp.js.map +1 -1
  227. package/dist/js/components/Form/InternalFormFieldGroup.d.ts +5 -0
  228. package/dist/js/components/Form/InternalFormFieldGroup.d.ts.map +1 -1
  229. package/dist/js/components/Form/InternalFormFieldGroup.js +2 -2
  230. package/dist/js/components/Form/InternalFormFieldGroup.js.map +1 -1
  231. package/dist/js/components/Nav/NavExpandable.d.ts.map +1 -1
  232. package/dist/js/components/Nav/NavExpandable.js +1 -1
  233. package/dist/js/components/Nav/NavExpandable.js.map +1 -1
  234. package/dist/js/components/SearchInput/SearchInput.d.ts +2 -0
  235. package/dist/js/components/SearchInput/SearchInput.d.ts.map +1 -1
  236. package/dist/js/components/SearchInput/SearchInput.js +2 -2
  237. package/dist/js/components/SearchInput/SearchInput.js.map +1 -1
  238. package/dist/js/components/Tabs/OverflowTab.d.ts +26 -0
  239. package/dist/js/components/Tabs/OverflowTab.d.ts.map +1 -1
  240. package/dist/js/components/Tabs/OverflowTab.js +2 -2
  241. package/dist/js/components/Tabs/OverflowTab.js.map +1 -1
  242. package/dist/js/components/Tabs/Tab.d.ts.map +1 -1
  243. package/dist/js/components/Tabs/Tab.js +4 -1
  244. package/dist/js/components/Tabs/Tab.js.map +1 -1
  245. package/dist/js/components/Tabs/Tabs.d.ts +8 -0
  246. package/dist/js/components/Tabs/Tabs.d.ts.map +1 -1
  247. package/dist/js/components/Tabs/Tabs.js +40 -8
  248. package/dist/js/components/Tabs/Tabs.js.map +1 -1
  249. package/dist/js/components/Tabs/TabsContext.d.ts +1 -0
  250. package/dist/js/components/Tabs/TabsContext.d.ts.map +1 -1
  251. package/dist/js/components/Tabs/TabsContext.js +1 -0
  252. package/dist/js/components/Tabs/TabsContext.js.map +1 -1
  253. package/dist/js/components/TreeView/TreeViewListItem.d.ts.map +1 -1
  254. package/dist/js/components/TreeView/TreeViewListItem.js +1 -1
  255. package/dist/js/components/TreeView/TreeViewListItem.js.map +1 -1
  256. package/dist/js/components/Truncate/Truncate.d.ts +11 -8
  257. package/dist/js/components/Truncate/Truncate.d.ts.map +1 -1
  258. package/dist/js/components/Truncate/Truncate.js +21 -12
  259. package/dist/js/components/Truncate/Truncate.js.map +1 -1
  260. package/dist/js/demos/sampleData.d.ts.map +1 -1
  261. package/dist/js/demos/sampleData.js +225 -226
  262. package/dist/js/demos/sampleData.js.map +1 -1
  263. package/dist/js/demos/sampleDataRTL.d.ts +7 -0
  264. package/dist/js/demos/sampleDataRTL.d.ts.map +1 -0
  265. package/dist/js/demos/sampleDataRTL.js +131 -0
  266. package/dist/js/demos/sampleDataRTL.js.map +1 -0
  267. package/dist/js/helpers/KeyboardHandler.js +3 -2
  268. package/dist/js/helpers/KeyboardHandler.js.map +1 -1
  269. package/dist/js/helpers/Popper/Popper.d.ts.map +1 -1
  270. package/dist/js/helpers/Popper/Popper.js +1 -0
  271. package/dist/js/helpers/Popper/Popper.js.map +1 -1
  272. package/dist/js/helpers/util.d.ts +17 -0
  273. package/dist/js/helpers/util.d.ts.map +1 -1
  274. package/dist/js/helpers/util.js +39 -1
  275. package/dist/js/helpers/util.js.map +1 -1
  276. package/dist/styles/assets/images/icon-help.hbs +3 -0
  277. package/dist/styles/assets/images/icon-outlined-star.hbs +3 -0
  278. package/dist/styles/assets/images/icon-star.hbs +3 -0
  279. package/dist/styles/base-no-reset.css +11 -11
  280. package/dist/styles/base.css +11 -11
  281. package/dist/umd/assets/{output-CTQ3-b33.css → output-DzgMn5vn.css} +18950 -18401
  282. package/dist/umd/react-core.min.js +3 -3
  283. package/helpers/package.json +1 -1
  284. package/layouts/package.json +1 -1
  285. package/next/package.json +1 -1
  286. package/package.json +6 -6
  287. package/src/components/Button/Button.tsx +48 -5
  288. package/src/components/Button/__tests__/Button.test.tsx +25 -0
  289. package/src/components/Button/examples/Button.md +8 -1
  290. package/src/components/Button/examples/ButtonFavorite.tsx +18 -0
  291. package/src/components/Card/examples/Card.md +1 -1
  292. package/src/components/Card/examples/CardSelectable.tsx +73 -60
  293. package/src/components/Card/examples/CardSingleSelectable.tsx +65 -48
  294. package/src/components/ClipboardCopy/ClipboardCopy.tsx +2 -1
  295. package/src/components/DualListSelector/DualListSelector.tsx +18 -4
  296. package/src/components/DualListSelector/DualListSelectorContext.ts +2 -1
  297. package/src/components/DualListSelector/DualListSelectorListWrapper.tsx +8 -5
  298. package/src/components/DualListSelector/DualListSelectorTree.tsx +4 -0
  299. package/src/components/DualListSelector/DualListSelectorTreeItem.tsx +17 -2
  300. package/src/components/DualListSelector/__tests__/DualListSelector.test.tsx +32 -1
  301. package/src/components/DualListSelector/__tests__/DualListSelectorTreeItem.test.tsx +55 -0
  302. package/src/components/DualListSelector/examples/DualListSelectorTree.tsx +1 -1
  303. package/src/components/Form/FormFieldGroupExpandable.tsx +7 -0
  304. package/src/components/Form/FormGroupLabelHelp.tsx +2 -2
  305. package/src/components/Form/InternalFormFieldGroup.tsx +19 -3
  306. package/src/components/Form/__tests__/FormFieldGroupExpandable.test.tsx +55 -0
  307. package/src/components/Form/examples/FormFieldGroups.tsx +7 -1
  308. package/src/components/LoginPage/examples/LoginPageBasic.tsx +1 -1
  309. package/src/components/LoginPage/examples/LoginPageLanguageSelect.tsx +1 -1
  310. package/src/components/LoginPage/examples/LoginPageShowHidePassword.tsx +1 -1
  311. package/src/components/Nav/NavExpandable.tsx +6 -1
  312. package/src/components/Nav/__tests__/Generated/__snapshots__/NavExpandable.test.tsx.snap +1 -0
  313. package/src/components/Nav/__tests__/NavExpandable.test.tsx +15 -0
  314. package/src/components/Nav/__tests__/__snapshots__/Nav.test.tsx.snap +3 -0
  315. package/src/components/Page/examples/Page.md +1 -1
  316. package/src/components/Page/examples/PageCenteredSection.tsx +3 -4
  317. package/src/components/Page/examples/PageGroupSection.tsx +9 -3
  318. package/src/components/Page/examples/PageHorizontalNav.tsx +9 -3
  319. package/src/components/Page/examples/PageMainSectionPadding.tsx +12 -4
  320. package/src/components/Page/examples/PageMainSectionVariations.tsx +6 -6
  321. package/src/components/Page/examples/PageMultipleSidebarBody.tsx +9 -3
  322. package/src/components/Page/examples/PageUncontrolledNav.tsx +9 -3
  323. package/src/components/Page/examples/PageVerticalNav.tsx +9 -3
  324. package/src/components/Page/examples/PageWithOrWithoutFill.tsx +8 -4
  325. package/src/components/SearchInput/SearchInput.tsx +8 -1
  326. package/src/components/Select/examples/Select.md +3 -26
  327. package/src/components/Skeleton/examples/SkeletonText.tsx +0 -1
  328. package/src/components/Tabs/OverflowTab.tsx +29 -0
  329. package/src/components/Tabs/Tab.tsx +6 -2
  330. package/src/components/Tabs/Tabs.tsx +70 -11
  331. package/src/components/Tabs/TabsContext.ts +2 -0
  332. package/src/components/Tabs/__tests__/Tabs.test.tsx +43 -1
  333. package/src/components/Tabs/__tests__/__snapshots__/Tabs.test.tsx.snap +39 -26
  334. package/src/components/Tabs/examples/Tabs.md +1 -1
  335. package/src/components/Timestamp/examples/TimestampBasicFormats.tsx +1 -1
  336. package/src/components/Timestamp/examples/TimestampDefaultTooltip.tsx +1 -1
  337. package/src/components/TreeView/TreeViewListItem.tsx +1 -3
  338. package/src/components/TreeView/__tests__/TreeViewListItem.test.tsx +10 -0
  339. package/src/components/Truncate/Truncate.tsx +48 -22
  340. package/src/components/Truncate/__tests__/Truncate.test.tsx +28 -2
  341. package/src/components/Truncate/__tests__/__snapshots__/Truncate.test.tsx.snap +2 -2
  342. package/src/components/Truncate/examples/Truncate.md +8 -0
  343. package/src/components/Truncate/examples/TruncateLinks.tsx +22 -0
  344. package/src/demos/Banner.md +6 -6
  345. package/src/demos/CardDemos.md +1 -1
  346. package/src/demos/CardView/examples/CardView.tsx +9 -4
  347. package/src/demos/DataList/examples/DataListActionable.tsx +5 -3
  348. package/src/demos/DataList/examples/DataListBasic.tsx +2 -2
  349. package/src/demos/DataList/examples/DataListExpandableControlInToolbar.tsx +2 -2
  350. package/src/demos/DataList/examples/DataListStaticBottomPagination.tsx +4 -2
  351. package/src/demos/DescriptionList/examples/DescriptionListBasic.tsx +4 -4
  352. package/src/demos/DescriptionList/examples/DescriptionListInDrawer.tsx +5 -3
  353. package/src/demos/JumpLinks.md +5 -5
  354. package/src/demos/PasswordGenerator.md +1 -1
  355. package/src/demos/RTL/RTL.md +1 -0
  356. package/src/demos/RTL/examples/PaginatedTable.tsx +16 -44
  357. package/src/demos/Tabs.md +6 -6
  358. package/src/demos/examples/AlertGroup/AlertGroupToastWithNotificationDrawer.tsx +6 -6
  359. package/src/demos/examples/BackToTop/BackToTopNameDemo.tsx +2 -2
  360. package/src/demos/examples/Card/CardAggregateStatus.tsx +2 -6
  361. package/src/demos/examples/Card/CardDetails.tsx +2 -3
  362. package/src/demos/examples/Card/CardEventsView.tsx +2 -3
  363. package/src/demos/examples/Card/CardLogView.tsx +2 -3
  364. package/src/demos/examples/Card/CardStatus.tsx +0 -1
  365. package/src/demos/examples/Card/CardUtilizationDemo3.tsx +0 -1
  366. package/src/demos/examples/Masthead/MastheadWithHorizontalNav.tsx +5 -3
  367. package/src/demos/examples/Masthead/MastheadWithUtilitiesAndUserDropdownMenu.tsx +3 -3
  368. package/src/demos/examples/Nav/NavDefault.tsx +3 -3
  369. package/src/demos/examples/Nav/NavDrilldown.tsx +1 -1
  370. package/src/demos/examples/Nav/NavExpandable.tsx +3 -3
  371. package/src/demos/examples/Nav/NavFlyout.tsx +9 -3
  372. package/src/demos/examples/Nav/NavGrouped.tsx +14 -6
  373. package/src/demos/examples/Nav/NavHorizontal.tsx +3 -3
  374. package/src/demos/examples/Nav/NavHorizontalWithSubnav.tsx +5 -5
  375. package/src/demos/examples/Nav/NavManual.tsx +3 -3
  376. package/src/demos/examples/Nav/NavWithSubnav.tsx +5 -5
  377. package/src/demos/examples/Tabs/ModalTabs.tsx +3 -3
  378. package/src/demos/examples/Tabs/NestedTabs.tsx +2 -2
  379. package/src/demos/examples/Tabs/NestedUnindentedTabs.tsx +2 -2
  380. package/src/demos/examples/Tabs/TabsAndTable.tsx +3 -3
  381. package/src/demos/sampleData.tsx +225 -227
  382. package/src/demos/sampleDataRTL.tsx +133 -0
  383. package/src/helpers/KeyboardHandler.tsx +2 -2
  384. package/src/helpers/Popper/Popper.tsx +1 -0
  385. package/src/helpers/util.ts +45 -0
  386. package/src/demos/RTL/examples/PaginatedTable.jsx +0 -504
@@ -1,4 +1,4 @@
1
- import { memo, useContext, useEffect, useRef, useState } from 'react';
1
+ import { memo, useContext, useEffect, useRef, useState, cloneElement, Children, isValidElement } from 'react';
2
2
  import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
3
3
  import { css } from '@patternfly/react-styles';
4
4
  import { DualListSelectorTreeItemData } from './DualListSelectorTree';
@@ -38,6 +38,11 @@ export interface DualListSelectorTreeItemProps extends React.HTMLProps<HTMLLIEle
38
38
  isDisabled?: boolean;
39
39
  /** Flag indicating the DualListSelector tree should utilize memoization to help render large data sets. */
40
40
  useMemo?: boolean;
41
+ /** Flag indicating whether a tree dual list selector has animations. This will always render
42
+ * nested dual list selector items rather than dynamically rendering them. This prop will be removed in
43
+ * the next breaking change release in favor of defaulting to always-rendered items.
44
+ */
45
+ hasAnimations?: boolean;
41
46
  }
42
47
 
43
48
  const DualListSelectorTreeItemBase: React.FunctionComponent<DualListSelectorTreeItemProps> = ({
@@ -53,6 +58,7 @@ const DualListSelectorTreeItemBase: React.FunctionComponent<DualListSelectorTree
53
58
  badgeProps,
54
59
  itemData,
55
60
  isDisabled = false,
61
+ hasAnimations,
56
62
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
57
63
  useMemo,
58
64
  ...props
@@ -65,6 +71,15 @@ const DualListSelectorTreeItemBase: React.FunctionComponent<DualListSelectorTree
65
71
  setIsExpanded(defaultExpanded);
66
72
  }, [defaultExpanded]);
67
73
 
74
+ const clonedChildren = Children.map(
75
+ children,
76
+ (child) =>
77
+ isValidElement(child) &&
78
+ cloneElement(child as React.ReactElement<any>, {
79
+ inert: isExpanded ? undefined : ''
80
+ })
81
+ );
82
+
68
83
  return (
69
84
  <li
70
85
  className={css(
@@ -156,7 +171,7 @@ const DualListSelectorTreeItemBase: React.FunctionComponent<DualListSelectorTree
156
171
  </span>
157
172
  </div>
158
173
  </div>
159
- {isExpanded && children}
174
+ {(isExpanded || hasAnimations) && clonedChildren}
160
175
  </li>
161
176
  );
162
177
  };
@@ -1,6 +1,37 @@
1
- import { render } from '@testing-library/react';
1
+ import { render, screen } from '@testing-library/react';
2
+ import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
3
+ import { DualListSelector } from '../DualListSelector';
2
4
  import { DualListSelectorPane } from '../DualListSelectorPane';
3
5
  import { SearchInput } from '../../SearchInput';
6
+
7
+ // The following tests can be removed as part of https://github.com/patternfly/patternfly-react/issues/11838
8
+ describe('Opt-in animations', () => {
9
+ test(`Does not render with class ${styles.modifiers.animateExpand} by default`, () => {
10
+ render(<DualListSelector data-testid="test-id" />);
11
+
12
+ expect(screen.getByTestId('test-id')).not.toHaveClass(styles.modifiers.animateExpand);
13
+ });
14
+
15
+ test(`Does not render with class ${styles.modifiers.animateExpand} when hasAnimations is true and isTree is false`, () => {
16
+ render(<DualListSelector hasAnimations data-testid="test-id" />);
17
+
18
+ expect(screen.getByTestId('test-id')).not.toHaveClass(styles.modifiers.animateExpand);
19
+ });
20
+
21
+ test(`Does not render with class ${styles.modifiers.animateExpand} by default when isTree is true`, () => {
22
+ render(<DualListSelector isTree data-testid="test-id" />);
23
+
24
+ expect(screen.getByTestId('test-id')).not.toHaveClass(styles.modifiers.animateExpand);
25
+ });
26
+
27
+ test(`Renders with class ${styles.modifiers.animateExpand} when both isTree and hasAnimations are true`, () => {
28
+ render(<DualListSelector isTree hasAnimations data-testid="test-id" />);
29
+
30
+ expect(screen.getByTestId('test-id')).toHaveClass(styles.modifiers.animateExpand);
31
+ });
32
+ });
33
+
34
+ // Following tests should be moved to a separate DualListSelectorPane test file
4
35
  describe('DualListSelector', () => {
5
36
  test('basic', () => {
6
37
  const { asFragment } = render(<DualListSelectorPane id="basicTest" />);
@@ -0,0 +1,55 @@
1
+ import { render, screen } from '@testing-library/react';
2
+ import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
3
+ import { DualListSelectorTreeItem } from '../DualListSelectorTreeItem';
4
+
5
+ // The following tests checking for children to not be/to be rendered will need to be refactored
6
+ // as part of https://github.com/patternfly/patternfly-react/issues/11838
7
+ test('Does not render children by default', () => {
8
+ render(
9
+ <DualListSelectorTreeItem id="item-id" text="Test text">
10
+ <div>Children content</div>
11
+ </DualListSelectorTreeItem>
12
+ );
13
+
14
+ expect(screen.queryByText('Children content')).not.toBeInTheDocument();
15
+ });
16
+
17
+ test('Renders children when defaultExpanded is true', () => {
18
+ render(
19
+ <DualListSelectorTreeItem defaultExpanded id="item-id" text="Test text">
20
+ <div>Children content</div>
21
+ </DualListSelectorTreeItem>
22
+ );
23
+
24
+ expect(screen.getByText('Children content')).toBeVisible();
25
+ });
26
+
27
+ test('Renders children when hasAnimations is true', () => {
28
+ render(
29
+ <DualListSelectorTreeItem hasAnimations id="item-id" text="Test text">
30
+ <div>Children content</div>
31
+ </DualListSelectorTreeItem>
32
+ );
33
+
34
+ expect(screen.getByText('Children content')).toBeVisible();
35
+ });
36
+
37
+ test('Renders children with inert attribute by default when hasAnimations is true', () => {
38
+ render(
39
+ <DualListSelectorTreeItem hasAnimations id="item-id" text="Test text">
40
+ <div>Children content</div>
41
+ </DualListSelectorTreeItem>
42
+ );
43
+
44
+ expect(screen.getByText('Children content')).toHaveAttribute('inert', '');
45
+ });
46
+
47
+ test('Does not render children with inert attribute when hasAnimations and defaultExpanded are true', () => {
48
+ render(
49
+ <DualListSelectorTreeItem hasAnimations defaultExpanded id="item-id" text="Test text">
50
+ <div>Children content</div>
51
+ </DualListSelectorTreeItem>
52
+ );
53
+
54
+ expect(screen.getByText('Children content')).not.toHaveAttribute('inert');
55
+ });
@@ -283,7 +283,7 @@ export const DualListSelectorComposableTree: React.FunctionComponent<ExampleProp
283
283
  };
284
284
 
285
285
  return (
286
- <DualListSelector isTree>
286
+ <DualListSelector hasAnimations isTree>
287
287
  {buildPane(false)}
288
288
  <DualListSelectorControlsWrapper>
289
289
  <DualListSelectorControl
@@ -12,6 +12,11 @@ export interface FormFieldGroupExpandableProps extends Omit<React.HTMLProps<HTML
12
12
  isExpanded?: boolean;
13
13
  /** Aria-label to use on the form field group toggle button */
14
14
  toggleAriaLabel?: string;
15
+ /** Flag indicating whether an expandable form field group has animations. This will always render
16
+ * nested field group content rather than dynamically rendering them. This prop will be removed in
17
+ * the next breaking change release in favor of defaulting to always-rendered items.
18
+ */
19
+ hasAnimations?: boolean;
15
20
  }
16
21
 
17
22
  export const FormFieldGroupExpandable: React.FunctionComponent<FormFieldGroupExpandableProps> = ({
@@ -20,6 +25,7 @@ export const FormFieldGroupExpandable: React.FunctionComponent<FormFieldGroupExp
20
25
  header,
21
26
  isExpanded = false,
22
27
  toggleAriaLabel,
28
+ hasAnimations,
23
29
  ...props
24
30
  }: FormFieldGroupExpandableProps) => {
25
31
  const [localIsExpanded, setIsExpanded] = useState(isExpanded);
@@ -32,6 +38,7 @@ export const FormFieldGroupExpandable: React.FunctionComponent<FormFieldGroupExp
32
38
  isExpanded={localIsExpanded}
33
39
  toggleAriaLabel={toggleAriaLabel}
34
40
  onToggle={() => setIsExpanded(!localIsExpanded)}
41
+ hasAnimations={hasAnimations}
35
42
  {...props}
36
43
  >
37
44
  {children}
@@ -1,7 +1,7 @@
1
1
  import { forwardRef, useRef } from 'react';
2
2
  import { Button, ButtonProps } from '../Button';
3
- import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
4
3
  import { KeyTypes } from '../../helpers/constants';
4
+ import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
5
5
 
6
6
  /** A help button to be passed to the FormGroup's labelHelp property. This should be wrapped or linked
7
7
  * to our Popover component.
@@ -45,7 +45,7 @@ const FormGroupLabelHelpBase: React.FunctionComponent<FormGroupLabelHelpProps> =
45
45
  variant="plain"
46
46
  hasNoPadding
47
47
  {...props}
48
- icon={<QuestionCircleIcon />}
48
+ icon={<HelpIcon />}
49
49
  />
50
50
  );
51
51
  };
@@ -18,6 +18,11 @@ export interface InternalFormFieldGroupProps extends Omit<React.HTMLProps<HTMLDi
18
18
  onToggle?: () => void;
19
19
  /** Aria-label to use on the form field group toggle button */
20
20
  toggleAriaLabel?: string;
21
+ /** Flag indicating whether an expandable form field group has animations. This will always render
22
+ * nested field group content rather than dynamically rendering them. This prop will be removed in
23
+ * the next breaking change release in favor of defaulting to always-rendered items.
24
+ */
25
+ hasAnimations?: boolean;
21
26
  }
22
27
 
23
28
  export const InternalFormFieldGroup: React.FunctionComponent<InternalFormFieldGroupProps> = ({
@@ -28,6 +33,7 @@ export const InternalFormFieldGroup: React.FunctionComponent<InternalFormFieldGr
28
33
  isExpanded,
29
34
  onToggle,
30
35
  toggleAriaLabel,
36
+ hasAnimations,
31
37
  ...props
32
38
  }: InternalFormFieldGroupProps) => {
33
39
  const headerTitleText = header ? header.props.titleText : null;
@@ -40,7 +46,12 @@ export const InternalFormFieldGroup: React.FunctionComponent<InternalFormFieldGr
40
46
  }
41
47
  return (
42
48
  <div
43
- className={css(styles.formFieldGroup, isExpanded && isExpandable && styles.modifiers.expanded, className)}
49
+ className={css(
50
+ styles.formFieldGroup,
51
+ isExpanded && isExpandable && styles.modifiers.expanded,
52
+ hasAnimations && isExpandable && styles.modifiers.expandable,
53
+ className
54
+ )}
44
55
  role="group"
45
56
  {...(headerTitleText && { 'aria-labelledby': `${header.props.titleText.id}` })}
46
57
  {...props}
@@ -59,8 +70,13 @@ export const InternalFormFieldGroup: React.FunctionComponent<InternalFormFieldGr
59
70
  </GenerateId>
60
71
  )}
61
72
  {header && header}
62
- {(!isExpandable || (isExpandable && isExpanded)) && (
63
- <div className={css(styles.formFieldGroupBody)}>{children}</div>
73
+ {(!isExpandable || (isExpandable && isExpanded) || (hasAnimations && isExpandable)) && (
74
+ <div
75
+ className={css(styles.formFieldGroupBody)}
76
+ {...(hasAnimations && isExpandable && !isExpanded && { inert: '' })}
77
+ >
78
+ {children}
79
+ </div>
64
80
  )}
65
81
  </div>
66
82
  );
@@ -0,0 +1,55 @@
1
+ import { render, screen } from '@testing-library/react';
2
+ import { FormFieldGroupExpandable } from '../FormFieldGroupExpandable';
3
+ import styles from '@patternfly/react-styles/css/components/Form/form';
4
+
5
+ test('Does not render children by default', () => {
6
+ render(<FormFieldGroupExpandable toggleAriaLabel="Toggle label">Child content</FormFieldGroupExpandable>);
7
+
8
+ expect(screen.queryByText('Child content')).not.toBeInTheDocument();
9
+ });
10
+
11
+ test('Renders children when isExpanded is true', () => {
12
+ render(
13
+ <FormFieldGroupExpandable isExpanded toggleAriaLabel="Toggle label">
14
+ Child content
15
+ </FormFieldGroupExpandable>
16
+ );
17
+
18
+ expect(screen.getByText('Child content')).toBeInTheDocument();
19
+ });
20
+
21
+ test('Renders children with inert attribute by default when hasAnimations is true', () => {
22
+ render(
23
+ <FormFieldGroupExpandable hasAnimations toggleAriaLabel="Toggle label">
24
+ Child content
25
+ </FormFieldGroupExpandable>
26
+ );
27
+
28
+ expect(screen.getByText('Child content')).toHaveAttribute('inert', '');
29
+ });
30
+
31
+ test('Does not render children with inert attribute when hasAnimations and isExpanded are true', () => {
32
+ render(
33
+ <FormFieldGroupExpandable hasAnimations isExpanded toggleAriaLabel="Toggle label">
34
+ Child content
35
+ </FormFieldGroupExpandable>
36
+ );
37
+
38
+ expect(screen.getByText('Child content')).not.toHaveAttribute('inert');
39
+ });
40
+
41
+ test(`Does not render with class ${styles.modifiers.expandable} by default`, () => {
42
+ render(<FormFieldGroupExpandable toggleAriaLabel="Toggle label">Child content</FormFieldGroupExpandable>);
43
+
44
+ expect(screen.getByRole('group')).not.toHaveClass(styles.modifiers.expandable);
45
+ });
46
+
47
+ test(`Renders with class ${styles.modifiers.expandable} when hasAnimations is true`, () => {
48
+ render(
49
+ <FormFieldGroupExpandable hasAnimations toggleAriaLabel="Toggle label">
50
+ Child content
51
+ </FormFieldGroupExpandable>
52
+ );
53
+
54
+ expect(screen.getByRole('group')).toHaveClass(styles.modifiers.expandable);
55
+ });
@@ -52,6 +52,7 @@ export const FormFieldGroups: React.FunctionComponent = () => {
52
52
  <TextInput isRequired id="0-label2" name="0-label2" value={inputValues['0-label2']} onChange={handleChange} />
53
53
  </FormGroup>
54
54
  <FormFieldGroupExpandable
55
+ hasAnimations
55
56
  isExpanded
56
57
  toggleAriaLabel="Details"
57
58
  header={
@@ -67,6 +68,7 @@ export const FormFieldGroups: React.FunctionComponent = () => {
67
68
  }
68
69
  >
69
70
  <FormFieldGroupExpandable
71
+ hasAnimations
70
72
  isExpanded
71
73
  toggleAriaLabel="Details"
72
74
  header={
@@ -97,6 +99,7 @@ export const FormFieldGroups: React.FunctionComponent = () => {
97
99
  </FormGroup>
98
100
  </FormFieldGroupExpandable>
99
101
  <FormFieldGroupExpandable
102
+ hasAnimations
100
103
  toggleAriaLabel="Details"
101
104
  header={
102
105
  <FormFieldGroupHeader
@@ -125,6 +128,7 @@ export const FormFieldGroups: React.FunctionComponent = () => {
125
128
  </FormGroup>
126
129
  </FormFieldGroupExpandable>
127
130
  <FormFieldGroupExpandable
131
+ hasAnimations
128
132
  toggleAriaLabel="Details"
129
133
  header={
130
134
  <FormFieldGroupHeader
@@ -173,6 +177,7 @@ export const FormFieldGroups: React.FunctionComponent = () => {
173
177
  </FormGroup>
174
178
  </FormFieldGroupExpandable>
175
179
  <FormFieldGroupExpandable
180
+ hasAnimations
176
181
  toggleAriaLabel="Details"
177
182
  header={
178
183
  <FormFieldGroupHeader
@@ -194,6 +199,7 @@ export const FormFieldGroups: React.FunctionComponent = () => {
194
199
  </FormGroup>
195
200
  </FormFieldGroupExpandable>
196
201
  <FormFieldGroupExpandable
202
+ hasAnimations
197
203
  isExpanded
198
204
  toggleAriaLabel="Details"
199
205
  header={
@@ -273,7 +279,7 @@ export const FormFieldGroups: React.FunctionComponent = () => {
273
279
  header={
274
280
  <FormFieldGroupHeader
275
281
  titleText={{ text: 'Field group 4 (non-expandable)', id: 'field-group4-non-expandable-titleText-id' }}
276
- titleDescription="Field group 4 description text."
282
+ titleDescription="Field group 4 description text fdgsdg."
277
283
  actions={
278
284
  <>
279
285
  <Button variant="link">Delete all</Button> <Button variant="secondary">Add parameter</Button>
@@ -116,7 +116,7 @@ export const SimpleLoginPage: React.FunctionComponent = () => {
116
116
  footerListVariants={ListVariant.inline}
117
117
  brandImgSrc={brandImg}
118
118
  brandImgAlt="PatternFly logo"
119
- backgroundImgSrc="/assets/images/pfbg-icon.svg"
119
+ backgroundImgSrc="/assets/images/pf-background.svg"
120
120
  footerListItems={listItem}
121
121
  textContent="This is placeholder text only. Use this area to place any information or introductory message about your application that may be relevant to users."
122
122
  loginTitle="Log in to your account"
@@ -189,7 +189,7 @@ export const LoginPageLanguageSelect: React.FunctionComponent = () => {
189
189
  footerListVariants={ListVariant.inline}
190
190
  brandImgSrc={brandImg}
191
191
  brandImgAlt="PatternFly logo"
192
- backgroundImgSrc="/assets/images/pfbg-icon.svg"
192
+ backgroundImgSrc="/assets/images/pf-background.svg"
193
193
  footerListItems={listItem}
194
194
  textContent="This is placeholder text only. Use this area to place any information or introductory message about your application that may be relevant to users."
195
195
  loginTitle="Log in to your account"
@@ -117,7 +117,7 @@ export const LoginPageHideShowPassword: React.FunctionComponent = () => {
117
117
  footerListVariants={ListVariant.inline}
118
118
  brandImgSrc={brandImg}
119
119
  brandImgAlt="PatternFly logo"
120
- backgroundImgSrc="/assets/images/pfbg-icon.svg"
120
+ backgroundImgSrc="/assets/images/pf-background.svg"
121
121
  footerListItems={listItem}
122
122
  textContent="This is placeholder text only. Use this area to place any information or introductory message about your application that may be relevant to users."
123
123
  loginTitle="Log in to your account"
@@ -141,7 +141,12 @@ class NavExpandable extends Component<NavExpandableProps, NavExpandableState> {
141
141
  </button>
142
142
  )}
143
143
  </PageSidebarContext.Consumer>
144
- <section className={css(styles.navSubnav)} aria-labelledby={this.id} hidden={expandedState ? null : true}>
144
+ <section
145
+ className={css(styles.navSubnav)}
146
+ aria-labelledby={this.id}
147
+ hidden={expandedState ? null : true}
148
+ {...(!expandedState && { inert: '' })}
149
+ >
145
150
  {srText && (
146
151
  <h2 className="pf-v6-screen-reader" id={this.id}>
147
152
  {srText}
@@ -39,6 +39,7 @@ exports[`NavExpandable should match snapshot (auto-generated) 1`] = `
39
39
  aria-labelledby="''"
40
40
  class="pf-v6-c-nav__subnav"
41
41
  hidden=""
42
+ inert=""
42
43
  >
43
44
  <h2
44
45
  class="pf-v6-screen-reader"
@@ -0,0 +1,15 @@
1
+ import { render, screen } from '@testing-library/react';
2
+ import '@testing-library/jest-dom';
3
+ import { NavExpandable } from '../NavExpandable';
4
+
5
+ test('Renders with the inert attribute by default', () => {
6
+ render(<NavExpandable id="grp-1" title="NavExpandable"></NavExpandable>);
7
+
8
+ expect(screen.getByLabelText('NavExpandable')).toHaveAttribute('inert', '');
9
+ });
10
+
11
+ test('Does not render with the inert attribute when isExpanded is true', () => {
12
+ render(<NavExpandable id="grp-1" title="NavExpandable" isExpanded={true}></NavExpandable>);
13
+
14
+ expect(screen.getByLabelText('NavExpandable')).not.toHaveAttribute('inert', '');
15
+ });
@@ -223,6 +223,7 @@ exports[`Nav Expandable Nav List - Trigger toggle 1`] = `
223
223
  aria-labelledby="grp-1"
224
224
  class="pf-v6-c-nav__subnav"
225
225
  hidden=""
226
+ inert=""
226
227
  >
227
228
  <ul
228
229
  class="pf-v6-c-nav__list"
@@ -355,6 +356,7 @@ exports[`Nav Expandable Nav List 1`] = `
355
356
  aria-labelledby="grp-1"
356
357
  class="pf-v6-c-nav__subnav"
357
358
  hidden=""
359
+ inert=""
358
360
  >
359
361
  <ul
360
362
  class="pf-v6-c-nav__list"
@@ -486,6 +488,7 @@ exports[`Nav Expandable Nav List with aria label 1`] = `
486
488
  aria-labelledby="grp-1"
487
489
  class="pf-v6-c-nav__subnav"
488
490
  hidden=""
491
+ inert=""
489
492
  >
490
493
  <h2
491
494
  class="pf-v6-screen-reader"
@@ -8,7 +8,7 @@ propComponents:
8
8
 
9
9
  import { useState } from 'react';
10
10
  import BarsIcon from '@patternfly/react-icons/dist/js/icons/bars-icon';
11
- import c_page_section_m_limit_width_MaxWidth from '@patternfly/react-tokens/dist/esm/c_page_section_m_limit_width_MaxWidth';
11
+ import pageSectionWidthLimitMaxWidth from '@patternfly/react-tokens/dist/esm/c_page_section_m_limit_width_MaxWidth';
12
12
 
13
13
  ## Examples
14
14
 
@@ -18,8 +18,7 @@ import {
18
18
  CardBody
19
19
  } from '@patternfly/react-core';
20
20
  import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
21
- /* eslint-disable camelcase */
22
- import c_page_section_m_limit_width_MaxWidth from '@patternfly/react-tokens/dist/esm/c_page_section_m_limit_width_MaxWidth';
21
+ import pageSectionWidthLimitMaxWidth from '@patternfly/react-tokens/dist/esm/c_page_section_m_limit_width_MaxWidth';
23
22
 
24
23
  export const PageCenteredSection: React.FunctionComponent = () => {
25
24
  const [isSidebarOpen, setIsSidebarOpen] = useState(true);
@@ -68,11 +67,11 @@ export const PageCenteredSection: React.FunctionComponent = () => {
68
67
 
69
68
  return (
70
69
  <Page masthead={masthead} sidebar={sidebar}>
71
- <PageSection isWidthLimited isCenterAligned>
70
+ <PageSection isWidthLimited isCenterAligned aria-label="width limited page section">
72
71
  <Card>
73
72
  <CardBody>
74
73
  When a width limited page section is wider than the value of
75
- <code>{c_page_section_m_limit_width_MaxWidth.name}</code>, the section will be centered in the main section.
74
+ <code>{pageSectionWidthLimitMaxWidth.name}</code>, the section will be centered in the main section.
76
75
  <br />
77
76
  <br />
78
77
  The content in this example is placed in a card to better illustrate how the section behaves when it is
@@ -101,10 +101,16 @@ export const PageGroupSection: React.FunctionComponent = () => {
101
101
  </BreadcrumbItem>
102
102
  </Breadcrumb>
103
103
  </PageBreadcrumb>
104
- <PageSection>Grouped section</PageSection>
104
+ <PageSection aria-labelledby="grouped-section">
105
+ <h2 id="grouped-section">Grouped section</h2>
106
+ </PageSection>
105
107
  </PageGroup>
106
- <PageSection>Section 1</PageSection>
107
- <PageSection>Section 2</PageSection>
108
+ <PageSection aria-labelledby="section-1">
109
+ <h2 id="section-1">Grouped example section 1</h2>
110
+ </PageSection>
111
+ <PageSection aria-labelledby="section-2">
112
+ <h2 id="section-2">Grouped example section 2</h2>
113
+ </PageSection>
108
114
  </Page>
109
115
  );
110
116
  };
@@ -36,9 +36,15 @@ export const PageHorizontalNav: React.FunctionComponent = () => {
36
36
 
37
37
  return (
38
38
  <Page masthead={masthead}>
39
- <PageSection>Section 1</PageSection>
40
- <PageSection variant="secondary">Section 2 with secondary variant styling</PageSection>
41
- <PageSection>Section 3</PageSection>
39
+ <PageSection aria-labelledby="section-1">
40
+ <h2 id="section-1">Horizontal nav example section 1</h2>
41
+ </PageSection>
42
+ <PageSection variant="secondary" aria-labelledby="section-2">
43
+ <h2 id="section-2">Horizontal nav example section 2 with secondary variant styling</h2>
44
+ </PageSection>
45
+ <PageSection aria-labelledby="section-3">
46
+ <h2 id="section-3">Horizontal nav example section 3</h2>
47
+ </PageSection>
42
48
  </Page>
43
49
  );
44
50
  };
@@ -64,10 +64,18 @@ export const PageMainSectionPadding: React.FunctionComponent = () => {
64
64
 
65
65
  return (
66
66
  <Page masthead={masthead} sidebar={sidebar}>
67
- <PageSection>Section with default padding</PageSection>
68
- <PageSection padding={{ default: 'noPadding' }}>Section with no padding</PageSection>
69
- <PageSection padding={{ default: 'noPadding', md: 'padding' }}>Section with padding on medium</PageSection>
70
- <PageSection padding={{ md: 'noPadding' }}>Section with no padding on medium</PageSection>
67
+ <PageSection aria-labelledby="section-1">
68
+ <h2 id="section-1">Section with default padding</h2>
69
+ </PageSection>
70
+ <PageSection padding={{ default: 'noPadding' }} aria-labelledby="section-2">
71
+ <h2 id="section-2">Section with no padding</h2>
72
+ </PageSection>
73
+ <PageSection padding={{ default: 'noPadding', md: 'padding' }} aria-labelledby="section-3">
74
+ <h2 id="section-3">Section with padding on medium</h2>
75
+ </PageSection>
76
+ <PageSection padding={{ md: 'noPadding' }} aria-labelledby="section-4">
77
+ <h2 id="section-4">Section with no padding on medium</h2>
78
+ </PageSection>
71
79
  </Page>
72
80
  );
73
81
  };
@@ -64,22 +64,22 @@ export const PageMainSectionPadding: React.FunctionComponent = () => {
64
64
 
65
65
  return (
66
66
  <Page header={header} sidebar={sidebar}>
67
- <PageSection type="subnav">
67
+ <PageSection type="subnav" aria-label="With subnav type">
68
68
  Section with <code>type="subnav"</code> for horizontal subnav navigation
69
69
  </PageSection>
70
- <PageSection type="nav">
70
+ <PageSection type="nav" aria-label="With nav type">
71
71
  Section with <code>type="nav"</code> for tertiary navigation
72
72
  </PageSection>
73
- <PageSection type="tabs">
73
+ <PageSection type="tabs" aria-label="With tabs type">
74
74
  Section with <code>type="tabs"</code> for tabs
75
75
  </PageSection>
76
- <PageSection type="breadcrumb">
76
+ <PageSection type="breadcrumb" aria-label="With breadcrumb type">
77
77
  Section with <code>type="breadcrumb"</code> for breadcrumbs
78
78
  </PageSection>
79
- <PageSection>
79
+ <PageSection aria-label="With default type">
80
80
  Section without <code>type</code> prop or <code>type="default"</code> for main sections
81
81
  </PageSection>
82
- <PageSection type="wizard">
82
+ <PageSection type="wizard" aria-label="With wizard type">
83
83
  Section with <code>type="wizard"</code> for wizards
84
84
  </PageSection>
85
85
  </Page>
@@ -71,9 +71,15 @@ export const PageMultipleSidebarBody: React.FunctionComponent = () => {
71
71
 
72
72
  return (
73
73
  <Page masthead={masthead} sidebar={sidebar}>
74
- <PageSection>Section 1</PageSection>
75
- <PageSection>Section 2</PageSection>
76
- <PageSection>Section 3</PageSection>
74
+ <PageSection aria-labelledby="section-1">
75
+ <h2 id="section-1">Multiple sidebar body example section 1</h2>
76
+ </PageSection>
77
+ <PageSection aria-labelledby="section-2">
78
+ <h2 id="section-2">Multiple sidebar body example section 2</h2>
79
+ </PageSection>
80
+ <PageSection aria-labelledby="section-3">
81
+ <h2 id="section-3">Multiple sidebar body example section 3</h2>
82
+ </PageSection>
77
83
  </Page>
78
84
  );
79
85
  };
@@ -51,9 +51,15 @@ export const PageUncontrolledNav: React.FunctionComponent = () => {
51
51
 
52
52
  return (
53
53
  <Page isManagedSidebar masthead={masthead} sidebar={sidebar}>
54
- <PageSection>Section 1</PageSection>
55
- <PageSection>Section 2</PageSection>
56
- <PageSection>Section 3</PageSection>
54
+ <PageSection aria-labelledby="section-1">
55
+ <h2 id="section-1">Uncontrolled nav example section 1</h2>
56
+ </PageSection>
57
+ <PageSection aria-labelledby="section-2">
58
+ <h2 id="section-2">Uncontrolled nav example section 2</h2>
59
+ </PageSection>
60
+ <PageSection aria-labelledby="section-3">
61
+ <h2 id="section-3">Uncontrolled nav example section 3</h2>
62
+ </PageSection>
57
63
  </Page>
58
64
  );
59
65
  };