@patternfly/react-core 5.2.0-prerelease.9 → 6.0.0-alpha.2

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 (405) hide show
  1. package/CHANGELOG.md +129 -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/CalendarMonth/CalendarMonth.d.ts.map +1 -1
  120. package/dist/esm/components/CalendarMonth/CalendarMonth.js +15 -39
  121. package/dist/esm/components/CalendarMonth/CalendarMonth.js.map +1 -1
  122. package/dist/esm/components/Chip/Chip.d.ts.map +1 -1
  123. package/dist/esm/components/Chip/Chip.js +2 -2
  124. package/dist/esm/components/Chip/Chip.js.map +1 -1
  125. package/dist/esm/components/ClipboardCopy/ClipboardCopy.d.ts +1 -1
  126. package/dist/esm/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
  127. package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.d.ts.map +1 -1
  128. package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.js +2 -2
  129. package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.js.map +1 -1
  130. package/dist/esm/components/ClipboardCopy/ClipboardCopyToggle.js +1 -1
  131. package/dist/esm/components/ClipboardCopy/ClipboardCopyToggle.js.map +1 -1
  132. package/dist/esm/components/Drawer/DrawerPanelContent.js +4 -4
  133. package/dist/esm/components/Drawer/DrawerPanelContent.js.map +1 -1
  134. package/dist/esm/components/Dropdown/Dropdown.d.ts +2 -0
  135. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
  136. package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
  137. package/dist/esm/components/ExpandableSection/ExpandableSection.js +1 -1
  138. package/dist/esm/components/ExpandableSection/ExpandableSection.js.map +1 -1
  139. package/dist/esm/components/InputGroup/InputGroup.d.ts.map +1 -1
  140. package/dist/esm/components/InputGroup/InputGroup.js +1 -51
  141. package/dist/esm/components/InputGroup/InputGroup.js.map +1 -1
  142. package/dist/esm/components/Masthead/Masthead.d.ts +0 -2
  143. package/dist/esm/components/Masthead/Masthead.d.ts.map +1 -1
  144. package/dist/esm/components/Masthead/Masthead.js +3 -3
  145. package/dist/esm/components/Masthead/Masthead.js.map +1 -1
  146. package/dist/esm/components/Menu/Menu.d.ts.map +1 -1
  147. package/dist/esm/components/Menu/Menu.js +2 -1
  148. package/dist/esm/components/Menu/Menu.js.map +1 -1
  149. package/dist/esm/components/Menu/MenuContainer.d.ts +2 -0
  150. package/dist/esm/components/Menu/MenuContainer.d.ts.map +1 -1
  151. package/dist/esm/components/Menu/MenuContainer.js.map +1 -1
  152. package/dist/esm/components/Nav/NavExpandable.d.ts +3 -3
  153. package/dist/esm/components/Nav/NavExpandable.d.ts.map +1 -1
  154. package/dist/esm/components/Nav/NavExpandable.js +2 -2
  155. package/dist/esm/components/Nav/NavExpandable.js.map +1 -1
  156. package/dist/esm/components/Nav/NavItem.d.ts +2 -0
  157. package/dist/esm/components/Nav/NavItem.d.ts.map +1 -1
  158. package/dist/esm/components/Nav/NavItem.js +2 -2
  159. package/dist/esm/components/Nav/NavItem.js.map +1 -1
  160. package/dist/esm/components/Nav/NavList.js +3 -3
  161. package/dist/esm/components/Nav/NavList.js.map +1 -1
  162. package/dist/esm/components/NotificationBadge/NotificationBadge.js +1 -1
  163. package/dist/esm/components/NotificationBadge/NotificationBadge.js.map +1 -1
  164. package/dist/esm/components/Page/PageSection.d.ts +2 -5
  165. package/dist/esm/components/Page/PageSection.d.ts.map +1 -1
  166. package/dist/esm/components/Page/PageSection.js +1 -7
  167. package/dist/esm/components/Page/PageSection.js.map +1 -1
  168. package/dist/esm/components/Page/PageSidebar.d.ts +0 -2
  169. package/dist/esm/components/Page/PageSidebar.d.ts.map +1 -1
  170. package/dist/esm/components/Page/PageSidebar.js +2 -2
  171. package/dist/esm/components/Page/PageSidebar.js.map +1 -1
  172. package/dist/esm/components/SearchInput/SearchInput.d.ts +2 -0
  173. package/dist/esm/components/SearchInput/SearchInput.d.ts.map +1 -1
  174. package/dist/esm/components/SearchInput/SearchInput.js +2 -2
  175. package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
  176. package/dist/esm/components/Select/Select.d.ts +2 -0
  177. package/dist/esm/components/Select/Select.d.ts.map +1 -1
  178. package/dist/esm/components/Select/Select.js.map +1 -1
  179. package/dist/esm/components/Slider/Slider.d.ts.map +1 -1
  180. package/dist/esm/components/Slider/Slider.js +2 -1
  181. package/dist/esm/components/Slider/Slider.js.map +1 -1
  182. package/dist/esm/components/Tabs/Tabs.js +3 -3
  183. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  184. package/dist/esm/demos/DashboardWrapper.js +1 -1
  185. package/dist/esm/demos/DashboardWrapper.js.map +1 -1
  186. package/dist/esm/deprecated/components/PageHeader/PageHeaderToolsItem.d.ts +0 -2
  187. package/dist/esm/deprecated/components/PageHeader/PageHeaderToolsItem.d.ts.map +1 -1
  188. package/dist/esm/deprecated/components/PageHeader/PageHeaderToolsItem.js +2 -2
  189. package/dist/esm/deprecated/components/PageHeader/PageHeaderToolsItem.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 +7 -16
  193. package/dist/esm/helpers/Popper/Popper.js.map +1 -1
  194. package/dist/esm/helpers/datetimeUtils.d.ts +1 -1
  195. package/dist/esm/helpers/datetimeUtils.d.ts.map +1 -1
  196. package/dist/esm/helpers/datetimeUtils.js.map +1 -1
  197. package/dist/esm/helpers/util.d.ts +9 -0
  198. package/dist/esm/helpers/util.d.ts.map +1 -1
  199. package/dist/esm/helpers/util.js +18 -0
  200. package/dist/esm/helpers/util.js.map +1 -1
  201. package/dist/js/components/CalendarMonth/CalendarMonth.d.ts.map +1 -1
  202. package/dist/js/components/CalendarMonth/CalendarMonth.js +15 -39
  203. package/dist/js/components/CalendarMonth/CalendarMonth.js.map +1 -1
  204. package/dist/js/components/Chip/Chip.d.ts.map +1 -1
  205. package/dist/js/components/Chip/Chip.js +2 -2
  206. package/dist/js/components/Chip/Chip.js.map +1 -1
  207. package/dist/js/components/ClipboardCopy/ClipboardCopy.d.ts +1 -1
  208. package/dist/js/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
  209. package/dist/js/components/ClipboardCopy/ClipboardCopyButton.d.ts.map +1 -1
  210. package/dist/js/components/ClipboardCopy/ClipboardCopyButton.js +2 -2
  211. package/dist/js/components/ClipboardCopy/ClipboardCopyButton.js.map +1 -1
  212. package/dist/js/components/ClipboardCopy/ClipboardCopyToggle.js +1 -1
  213. package/dist/js/components/ClipboardCopy/ClipboardCopyToggle.js.map +1 -1
  214. package/dist/js/components/Drawer/DrawerPanelContent.js +3 -3
  215. package/dist/js/components/Drawer/DrawerPanelContent.js.map +1 -1
  216. package/dist/js/components/Dropdown/Dropdown.d.ts +2 -0
  217. package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
  218. package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
  219. package/dist/js/components/ExpandableSection/ExpandableSection.js +1 -1
  220. package/dist/js/components/ExpandableSection/ExpandableSection.js.map +1 -1
  221. package/dist/js/components/InputGroup/InputGroup.d.ts.map +1 -1
  222. package/dist/js/components/InputGroup/InputGroup.js +1 -51
  223. package/dist/js/components/InputGroup/InputGroup.js.map +1 -1
  224. package/dist/js/components/Masthead/Masthead.d.ts +0 -2
  225. package/dist/js/components/Masthead/Masthead.d.ts.map +1 -1
  226. package/dist/js/components/Masthead/Masthead.js +3 -3
  227. package/dist/js/components/Masthead/Masthead.js.map +1 -1
  228. package/dist/js/components/Menu/Menu.d.ts.map +1 -1
  229. package/dist/js/components/Menu/Menu.js +2 -1
  230. package/dist/js/components/Menu/Menu.js.map +1 -1
  231. package/dist/js/components/Menu/MenuContainer.d.ts +2 -0
  232. package/dist/js/components/Menu/MenuContainer.d.ts.map +1 -1
  233. package/dist/js/components/Menu/MenuContainer.js.map +1 -1
  234. package/dist/js/components/Nav/NavExpandable.d.ts +3 -3
  235. package/dist/js/components/Nav/NavExpandable.d.ts.map +1 -1
  236. package/dist/js/components/Nav/NavExpandable.js +2 -2
  237. package/dist/js/components/Nav/NavExpandable.js.map +1 -1
  238. package/dist/js/components/Nav/NavItem.d.ts +2 -0
  239. package/dist/js/components/Nav/NavItem.d.ts.map +1 -1
  240. package/dist/js/components/Nav/NavItem.js +2 -2
  241. package/dist/js/components/Nav/NavItem.js.map +1 -1
  242. package/dist/js/components/Nav/NavList.js +2 -2
  243. package/dist/js/components/Nav/NavList.js.map +1 -1
  244. package/dist/js/components/NotificationBadge/NotificationBadge.js +1 -1
  245. package/dist/js/components/NotificationBadge/NotificationBadge.js.map +1 -1
  246. package/dist/js/components/Page/PageSection.d.ts +2 -5
  247. package/dist/js/components/Page/PageSection.d.ts.map +1 -1
  248. package/dist/js/components/Page/PageSection.js +1 -7
  249. package/dist/js/components/Page/PageSection.js.map +1 -1
  250. package/dist/js/components/Page/PageSidebar.d.ts +0 -2
  251. package/dist/js/components/Page/PageSidebar.d.ts.map +1 -1
  252. package/dist/js/components/Page/PageSidebar.js +2 -2
  253. package/dist/js/components/Page/PageSidebar.js.map +1 -1
  254. package/dist/js/components/SearchInput/SearchInput.d.ts +2 -0
  255. package/dist/js/components/SearchInput/SearchInput.d.ts.map +1 -1
  256. package/dist/js/components/SearchInput/SearchInput.js +2 -2
  257. package/dist/js/components/SearchInput/SearchInput.js.map +1 -1
  258. package/dist/js/components/Select/Select.d.ts +2 -0
  259. package/dist/js/components/Select/Select.d.ts.map +1 -1
  260. package/dist/js/components/Select/Select.js.map +1 -1
  261. package/dist/js/components/Slider/Slider.d.ts.map +1 -1
  262. package/dist/js/components/Slider/Slider.js +2 -1
  263. package/dist/js/components/Slider/Slider.js.map +1 -1
  264. package/dist/js/components/Tabs/Tabs.js +2 -2
  265. package/dist/js/components/Tabs/Tabs.js.map +1 -1
  266. package/dist/js/demos/DashboardWrapper.js +1 -1
  267. package/dist/js/demos/DashboardWrapper.js.map +1 -1
  268. package/dist/js/deprecated/components/PageHeader/PageHeaderToolsItem.d.ts +0 -2
  269. package/dist/js/deprecated/components/PageHeader/PageHeaderToolsItem.d.ts.map +1 -1
  270. package/dist/js/deprecated/components/PageHeader/PageHeaderToolsItem.js +2 -2
  271. package/dist/js/deprecated/components/PageHeader/PageHeaderToolsItem.js.map +1 -1
  272. package/dist/js/helpers/Popper/Popper.d.ts +2 -1
  273. package/dist/js/helpers/Popper/Popper.d.ts.map +1 -1
  274. package/dist/js/helpers/Popper/Popper.js +9 -19
  275. package/dist/js/helpers/Popper/Popper.js.map +1 -1
  276. package/dist/js/helpers/datetimeUtils.d.ts +1 -1
  277. package/dist/js/helpers/datetimeUtils.d.ts.map +1 -1
  278. package/dist/js/helpers/datetimeUtils.js.map +1 -1
  279. package/dist/js/helpers/util.d.ts +9 -0
  280. package/dist/js/helpers/util.d.ts.map +1 -1
  281. package/dist/js/helpers/util.js +20 -1
  282. package/dist/js/helpers/util.js.map +1 -1
  283. package/dist/styles/assets/images/logo__pf--reverse-on-md.svg +1 -1
  284. package/dist/styles/assets/images/pf-c-brand__logo-on-sm.svg +1 -1
  285. package/dist/styles/base-no-reset.css +849 -0
  286. package/dist/styles/base.css +861 -13
  287. package/dist/umd/react-core.min.js +1 -1
  288. package/helpers/package.json +1 -1
  289. package/layouts/package.json +1 -1
  290. package/next/package.json +1 -1
  291. package/package.json +8 -7
  292. package/src/components/CalendarMonth/CalendarMonth.tsx +18 -43
  293. package/src/components/Checkbox/__tests__/Checkbox.test.tsx +223 -69
  294. package/src/components/Checkbox/__tests__/__snapshots__/Checkbox.test.tsx.snap +3 -198
  295. package/src/components/Chip/Chip.tsx +2 -1
  296. package/src/components/Chip/__tests__/Chip.test.tsx +249 -32
  297. package/src/components/Chip/__tests__/ChipGroup.test.tsx +288 -61
  298. package/src/components/Chip/__tests__/__snapshots__/Chip.test.tsx.snap +9 -209
  299. package/src/components/Chip/__tests__/__snapshots__/ChipGroup.test.tsx.snap +2 -313
  300. package/src/components/ClipboardCopy/ClipboardCopy.tsx +1 -1
  301. package/src/components/ClipboardCopy/ClipboardCopyButton.tsx +2 -0
  302. package/src/components/ClipboardCopy/ClipboardCopyToggle.tsx +1 -1
  303. package/src/components/ClipboardCopy/__tests__/ClipboardCopy.test.tsx +344 -0
  304. package/src/components/ClipboardCopy/__tests__/ClipboardCopyAction.test.tsx +37 -0
  305. package/src/components/ClipboardCopy/__tests__/ClipboardCopyButton.test.tsx +136 -19
  306. package/src/components/ClipboardCopy/__tests__/ClipboardCopyExpanded.test.tsx +71 -14
  307. package/src/components/ClipboardCopy/__tests__/ClipboardCopyToggle.test.tsx +78 -34
  308. package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopy.test.tsx.snap +57 -0
  309. package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyAction.test.tsx.snap +11 -0
  310. package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyButton.test.tsx.snap +50 -24
  311. package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyExpanded.test.tsx.snap +3 -23
  312. package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyToggle.test.tsx.snap +5 -6
  313. package/src/components/Drawer/DrawerPanelContent.tsx +4 -4
  314. package/src/components/Dropdown/Dropdown.tsx +2 -0
  315. package/src/components/ExpandableSection/ExpandableSection.tsx +1 -1
  316. package/src/components/InputGroup/InputGroup.tsx +1 -53
  317. package/src/components/InputGroup/__tests__/InputGroup.test.tsx +7 -44
  318. package/src/components/Masthead/Masthead.tsx +0 -5
  319. package/src/components/Masthead/examples/Masthead.md +0 -44
  320. package/src/components/Menu/Menu.tsx +2 -1
  321. package/src/components/Menu/MenuContainer.tsx +2 -0
  322. package/src/components/Nav/NavExpandable.tsx +5 -5
  323. package/src/components/Nav/NavItem.tsx +4 -1
  324. package/src/components/Nav/NavList.tsx +3 -3
  325. package/src/components/Nav/examples/Nav.md +8 -0
  326. package/src/components/Nav/examples/NavExpandableThirdLevel.tsx +1 -1
  327. package/src/components/Nav/examples/NavLinkText.tsx +109 -0
  328. package/src/components/Nav/examples/nav.css +1 -0
  329. package/src/components/NotificationBadge/NotificationBadge.tsx +1 -1
  330. package/src/components/NumberInput/__tests__/NumberInput.test.tsx +0 -1
  331. package/src/components/Page/PageSection.tsx +3 -9
  332. package/src/components/Page/PageSidebar.tsx +0 -4
  333. package/src/components/Page/__tests__/Generated/PageSidebar.test.tsx +1 -1
  334. package/src/components/Page/__tests__/Page.test.tsx +1 -40
  335. package/src/components/Page/__tests__/__snapshots__/Page.test.tsx.snap +0 -195
  336. package/src/components/Page/examples/PageGroupSection.tsx +3 -4
  337. package/src/components/Page/examples/PageHorizontalNav.tsx +3 -4
  338. package/src/components/Page/examples/PageMainSectionPadding.tsx +2 -7
  339. package/src/components/Page/examples/PageMultipleSidebarBody.tsx +3 -4
  340. package/src/components/Page/examples/PageTertiaryNav.tsx +3 -4
  341. package/src/components/Page/examples/PageUncontrolledNav.tsx +3 -4
  342. package/src/components/Page/examples/PageVerticalNav.tsx +3 -4
  343. package/src/components/SearchInput/SearchInput.tsx +5 -1
  344. package/src/components/SearchInput/__tests__/SearchInput.test.tsx +8 -0
  345. package/src/components/Select/Select.tsx +2 -0
  346. package/src/components/Slider/Slider.tsx +2 -1
  347. package/src/components/Tabs/Tabs.tsx +3 -3
  348. package/src/demos/Banner.md +2 -4
  349. package/src/demos/CardView/examples/CardView.tsx +2 -8
  350. package/src/demos/DashboardWrapper.tsx +1 -1
  351. package/src/demos/JumpLinks.md +1 -1
  352. package/src/demos/Nav.md +10 -1673
  353. package/src/demos/NotificationDrawer/examples/NotificationDrawerBasic.tsx +2 -3
  354. package/src/demos/NotificationDrawer/examples/NotificationDrawerGrouped.tsx +2 -3
  355. package/src/demos/PrimaryDetail.md +4 -7
  356. package/src/demos/Tabs.md +6 -8
  357. package/src/demos/Wizard/WizardDemo.md +6 -761
  358. package/src/demos/examples/AlertGroup/AlertGroupToastWithNotificationDrawer.tsx +4 -5
  359. package/src/demos/examples/BackToTop/BackToTopNameDemo.tsx +1 -2
  360. package/src/demos/examples/DashboardWrapper.js +127 -0
  361. package/src/demos/examples/JumpLinks/JumpLinksWithDrawer.js +3 -4
  362. package/src/demos/examples/Masthead/MastheadWithUtilitiesAndUserDropdownMenu.tsx +1 -2
  363. package/src/demos/examples/Nav/NavDefault.tsx +97 -0
  364. package/src/demos/examples/Nav/NavDrilldown.tsx +2 -0
  365. package/src/demos/examples/Nav/NavExpandable.tsx +123 -0
  366. package/src/demos/examples/Nav/NavFlyout.tsx +277 -0
  367. package/src/demos/examples/Nav/NavGrouped.tsx +98 -0
  368. package/src/demos/examples/Nav/NavHorizontal.tsx +236 -0
  369. package/src/demos/examples/Nav/NavHorizontalWithSubnav.tsx +296 -0
  370. package/src/demos/examples/Nav/NavManual.tsx +272 -0
  371. package/src/demos/examples/Nav/NavWithSubnav.tsx +141 -0
  372. package/src/demos/examples/Nav/deprecated/NavLight.tsx +95 -0
  373. package/src/demos/examples/Nav/deprecated/NavTertiary.tsx +91 -0
  374. package/src/demos/examples/Page/PageStickySectionBreadcrumb.tsx +1 -2
  375. package/src/demos/examples/Page/PageStickySectionGroup.tsx +1 -2
  376. package/src/demos/examples/Page/PageStickySectionGroupAlternate.tsx +1 -2
  377. package/src/demos/examples/PrimaryDetail/PrimaryDetailContentPadding.tsx +1 -2
  378. package/src/demos/examples/PrimaryDetail/PrimaryDetailFullPage.tsx +2 -3
  379. package/src/demos/examples/PrimaryDetail/PrimaryDetailInlineModifier.tsx +2 -3
  380. package/src/demos/examples/Tabs/ModalTabs.tsx +1 -2
  381. package/src/demos/examples/Tabs/NestedUnindentedTabs.tsx +2 -2
  382. package/src/demos/examples/Tabs/TabsAndTable.tsx +2 -3
  383. package/src/demos/examples/Toolbar/ConsoleLogViewerToolbar.tsx +1 -2
  384. package/src/demos/examples/Wizard/InModal.tsx +75 -0
  385. package/src/demos/examples/Wizard/InModalWithDrawer.tsx +115 -0
  386. package/src/demos/examples/Wizard/InModalWithDrawerInformationalStep.tsx +122 -0
  387. package/src/demos/examples/Wizard/InPage.tsx +35 -0
  388. package/src/demos/examples/Wizard/InPageWithDrawer.tsx +195 -0
  389. package/src/demos/examples/Wizard/InPageWithDrawerInformationalStep.tsx +200 -0
  390. package/src/deprecated/components/PageHeader/PageHeaderToolsItem.tsx +0 -4
  391. package/src/deprecated/components/PageHeader/examples/PageVerticalNavUsingPageHeaderComponent.tsx +4 -4
  392. package/src/deprecated/components/PageHeader/tests/PageHeaderToolsItem.test.tsx +1 -3
  393. package/src/deprecated/components/PageHeader/tests/__snapshots__/PageHeaderToolsItem.test.tsx.snap +1 -1
  394. package/src/helpers/Popper/Popper.tsx +10 -19
  395. package/src/helpers/__mocks__/util.ts +2 -0
  396. package/src/helpers/datetimeUtils.ts +1 -1
  397. package/src/helpers/util.ts +22 -0
  398. package/dist/styles/assets/images/pf-c-brand__logo-on-lg-white.svg +0 -32
  399. package/dist/styles/assets/images/pf-c-brand__logo-on-md-white.svg +0 -42
  400. package/dist/styles/assets/images/pf-c-brand__logo-on-sm-white.svg +0 -17
  401. package/dist/styles/assets/images/pf-c-brand__logo-on-xl-white.svg +0 -39
  402. package/dist/styles/assets/images/pf_logo_white.hbs +0 -35
  403. package/dist/styles/assets/images/pf_logo_white.svg +0 -38
  404. package/src/components/ClipboardCopy/__tests__/Generated/ClipboardCopy.test.tsx +0 -40
  405. package/src/components/ClipboardCopy/__tests__/Generated/__snapshots__/ClipboardCopy.test.tsx.snap +0 -55
package/src/demos/Nav.md CHANGED
@@ -16,1718 +16,55 @@ import pfLogo from '@patternfly/react-core/src/demos/assets/pf-logo.svg';
16
16
 
17
17
  ### Default nav
18
18
 
19
- ```js isFullscreen
20
- import React from 'react';
21
- import {
22
- Card,
23
- CardBody,
24
- Gallery,
25
- GalleryItem,
26
- Nav,
27
- NavItem,
28
- NavList,
29
- Page,
30
- PageSection,
31
- PageSectionVariants,
32
- PageSidebar,
33
- PageSidebarBody,
34
- SkipToContent,
35
- TextContent,
36
- Text
37
- } from '@patternfly/react-core';
38
- import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/DashboardWrapper';
39
- import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
40
-
41
- class PageLayoutDefaultNav extends React.Component {
42
- constructor(props) {
43
- super(props);
44
- this.state = {
45
- activeItem: 0
46
- };
47
-
48
- this.onNavSelect = (_event, result) => {
49
- this.setState({
50
- activeItem: result.itemId
51
- });
52
- };
53
- }
54
-
55
- render() {
56
- const { activeItem } = this.state;
57
-
58
- const PageNav = (
59
- <Nav onSelect={this.onNavSelect} aria-label="Nav">
60
- <NavList>
61
- <NavItem itemId={0} isActive={activeItem === 0} to="#">
62
- System Panel
63
- </NavItem>
64
- <NavItem itemId={1} isActive={activeItem === 1} to="#">
65
- Policy
66
- </NavItem>
67
- <NavItem itemId={2} isActive={activeItem === 2} to="#">
68
- Authentication
69
- </NavItem>
70
- <NavItem itemId={3} isActive={activeItem === 3} to="#">
71
- Network Services
72
- </NavItem>
73
- <NavItem itemId={4} isActive={activeItem === 4} to="#">
74
- Server
75
- </NavItem>
76
- </NavList>
77
- </Nav>
78
- );
79
-
80
- const Sidebar = (
81
- <PageSidebar>
82
- <PageSidebarBody>{PageNav}</PageSidebarBody>
83
- </PageSidebar>
84
- );
85
- const pageId = 'main-content-page-layout-default-nav';
86
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
87
-
88
- return (
89
- <React.Fragment>
90
- <Page
91
- header={<DashboardHeader />}
92
- sidebar={Sidebar}
93
- isManagedSidebar
94
- skipToContent={PageSkipToContent}
95
- breadcrumb={DashboardBreadcrumb}
96
- mainContainerId={pageId}
97
- >
98
- <PageSection variant={PageSectionVariants.light}>
99
- <TextContent>
100
- <Text component="h1">Main title</Text>
101
- <Text component="p">
102
- Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
103
- of its relative line height of 1.5.
104
- </Text>
105
- </TextContent>
106
- </PageSection>
107
- <PageSection>
108
- <Gallery hasGutter>
109
- {Array.apply(0, Array(10)).map((x, i) => (
110
- <GalleryItem key={i}>
111
- <Card>
112
- <CardBody>This is a card</CardBody>
113
- </Card>
114
- </GalleryItem>
115
- ))}
116
- </Gallery>
117
- </PageSection>
118
- </Page>
119
- </React.Fragment>
120
- );
121
- }
122
- }
19
+ ```js file='./examples/Nav/NavDefault.tsx' isFullscreen
123
20
  ```
124
21
 
125
22
  ### Grouped nav
126
23
 
127
- ```js isFullscreen
128
- import React from 'react';
129
- import {
130
- Nav,
131
- NavGroup,
132
- NavItem,
133
- Page,
134
- PageSection,
135
- PageSectionVariants,
136
- PageSidebar,
137
- PageSidebarBody,
138
- SkipToContent,
139
- TextContent,
140
- Text
141
- } from '@patternfly/react-core';
142
- import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
143
-
144
- class PageLayoutGroupsNav extends React.Component {
145
- constructor(props) {
146
- super(props);
147
- this.state = {
148
- activeItem: 'grp-1_itm-1'
149
- };
150
-
151
- this.onNavSelect = (_event, result) => {
152
- this.setState({
153
- activeItem: result.itemId
154
- });
155
- };
156
- }
157
-
158
- render() {
159
- const { activeItem } = this.state;
160
-
161
- const PageNav = (
162
- <Nav onSelect={this.onNavSelect} aria-label="Nav">
163
- <NavGroup title="System Panel">
164
- <NavItem itemId="grp-1_itm-1" isActive={activeItem === 'grp-1_itm-1'} to="#">
165
- Overview
166
- </NavItem>
167
- <NavItem itemId="grp-1_itm-2" isActive={activeItem === 'grp-1_itm-2'} to="#">
168
- Resource Usage
169
- </NavItem>
170
- <NavItem itemId="grp-1_itm-3" isActive={activeItem === 'grp-1_itm-3'} to="#">
171
- Hypervisors
172
- </NavItem>
173
- <NavItem itemId="grp-1_itm-4" isActive={activeItem === 'grp-1_itm-4'} to="#">
174
- Instances
175
- </NavItem>
176
- <NavItem itemId="grp-1_itm-5" isActive={activeItem === 'grp-1_itm-5'} to="#">
177
- Volumes
178
- </NavItem>
179
- <NavItem itemId="grp-1_itm-6" isActive={activeItem === 'grp-1_itm-6'} to="#">
180
- Network
181
- </NavItem>
182
- </NavGroup>
183
- <NavGroup title="Policy">
184
- <NavItem itemId="grp-2_itm-1" isActive={activeItem === 'grp-2_itm-1'} to="#">
185
- Hosts
186
- </NavItem>
187
- <NavItem itemId="grp-2_itm-2" isActive={activeItem === 'grp-2_itm-2'} to="#">
188
- Virtual Machines
189
- </NavItem>
190
- <NavItem itemId="grp-2_itm-3" isActive={activeItem === 'grp-2_itm-3'} to="#">
191
- Storage
192
- </NavItem>
193
- </NavGroup>
194
- </Nav>
195
- );
196
-
197
- const Sidebar = (
198
- <PageSidebar>
199
- <PageSidebarBody>{PageNav}</PageSidebarBody>
200
- </PageSidebar>
201
- );
202
- const pageId = 'main-content-page-layout-group-nav';
203
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to Content</SkipToContent>;
204
-
205
- return (
206
- <React.Fragment>
207
- <Page
208
- header={<DashboardHeader />}
209
- sidebar={Sidebar}
210
- isManagedSidebar
211
- skipToContent={PageSkipToContent}
212
- mainContainerId={pageId}
213
- >
214
- <PageSection variant={PageSectionVariants.light}>
215
- <TextContent>
216
- <Text component="h1">Main title</Text>
217
- <Text component="p">
218
- Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
219
- of its relative line height of 1.5.
220
- </Text>
221
- </TextContent>
222
- </PageSection>
223
- <PageSection variant={PageSectionVariants.light}>Light</PageSection>
224
- <PageSection variant={PageSectionVariants.dark}>Dark</PageSection>
225
- <PageSection variant={PageSectionVariants.darker}>Darker</PageSection>
226
- <PageSection>Content</PageSection>
227
- </Page>
228
- </React.Fragment>
229
- );
230
- }
231
- }
24
+ ```js file='./examples/Nav/NavGrouped.tsx' isFullscreen
232
25
  ```
233
26
 
234
27
  ### Expandable nav
235
28
 
236
- ```js isFullscreen
237
- import React from 'react';
238
- import {
239
- Card,
240
- CardBody,
241
- Gallery,
242
- GalleryItem,
243
- Nav,
244
- NavExpandable,
245
- NavItem,
246
- NavList,
247
- Page,
248
- PageSection,
249
- PageSectionVariants,
250
- PageSidebar,
251
- PageSidebarBody,
252
- SkipToContent,
253
- TextContent,
254
- Text
255
- } from '@patternfly/react-core';
256
- import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/DashboardWrapper';
257
- import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
258
-
259
- class PageLayoutExpandableNav extends React.Component {
260
- constructor(props) {
261
- super(props);
262
- this.state = {
263
- activeGroup: 'grp-1',
264
- activeItem: 'grp-1_itm-1'
265
- };
266
-
267
- this.onNavSelect = (_event, result) => {
268
- this.setState({
269
- activeItem: result.itemId,
270
- activeGroup: result.groupId
271
- });
272
- };
273
- }
274
-
275
- render() {
276
- const { activeItem, activeGroup } = this.state;
277
-
278
- const PageNav = (
279
- <Nav onSelect={this.onNavSelect} aria-label="Nav">
280
- <NavList>
281
- <NavExpandable title="System Panel" groupId="grp-1" isActive={activeGroup === 'grp-1'} isExpanded>
282
- <NavItem groupId="grp-1" itemId="grp-1_itm-1" isActive={activeItem === 'grp-1_itm-1'} to="#">
283
- Overview
284
- </NavItem>
285
- <NavItem groupId="grp-1" itemId="grp-1_itm-2" isActive={activeItem === 'grp-1_itm-2'} to="#">
286
- Resource usage
287
- </NavItem>
288
- <NavItem groupId="grp-1" itemId="grp-1_itm-3" isActive={activeItem === 'grp-1_itm-3'} to="#">
289
- Hypervisors
290
- </NavItem>
291
- <NavItem groupId="grp-1" itemId="grp-1_itm-4" isActive={activeItem === 'grp-1_itm-4'} to="#">
292
- Instances
293
- </NavItem>
294
- <NavItem groupId="grp-1" itemId="grp-1_itm-5" isActive={activeItem === 'grp-1_itm-5'} to="#">
295
- Volumes
296
- </NavItem>
297
- <NavItem groupId="grp-1" itemId="grp-1_itm-6" isActive={activeItem === 'grp-1_itm-6'} to="#">
298
- Network
299
- </NavItem>
300
- </NavExpandable>
301
- <NavExpandable title="Policy" groupId="grp-2" isActive={activeGroup === 'grp-2'} to="#">
302
- <NavItem groupId="grp-2" itemId="grp-2_itm-1" isActive={activeItem === 'grp-2_itm-1'} to="#">
303
- Subnav link 1
304
- </NavItem>
305
- <NavItem groupId="grp-2" itemId="grp-2_itm-2" isActive={activeItem === 'grp-2_itm-2'} to="#">
306
- Subnav link 2
307
- </NavItem>
308
- </NavExpandable>
309
- <NavExpandable title="Authentication" groupId="grp-3" isActive={activeGroup === 'grp-3'}>
310
- <NavItem groupId="grp-3" itemId="grp-3_itm-1" isActive={activeItem === 'grp-3_itm-1'} to="#">
311
- Subnav link 1
312
- </NavItem>
313
- <NavItem groupId="grp-3" itemId="grp-3_itm-2" isActive={activeItem === 'grp-3_itm-2'} to="#">
314
- Subnav link 2
315
- </NavItem>
316
- </NavExpandable>
317
- </NavList>
318
- </Nav>
319
- );
320
-
321
- const Sidebar = (
322
- <PageSidebar>
323
- <PageSidebarBody>{PageNav}</PageSidebarBody>
324
- </PageSidebar>
325
- );
326
- const pageId = 'main-content-page-layout-expandable-nav';
327
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
328
-
329
- return (
330
- <React.Fragment>
331
- <Page
332
- header={<DashboardHeader />}
333
- sidebar={Sidebar}
334
- isManagedSidebar
335
- skipToContent={PageSkipToContent}
336
- breadcrumb={DashboardBreadcrumb}
337
- mainContainerId={pageId}
338
- >
339
- <PageSection variant={PageSectionVariants.light}>
340
- <TextContent>
341
- <Text component="h1">Main title</Text>
342
- <Text component="p">
343
- Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
344
- of its relative line height of 1.5.
345
- </Text>
346
- </TextContent>
347
- </PageSection>
348
- <PageSection>
349
- <Gallery hasGutter>
350
- {Array.apply(0, Array(10)).map((x, i) => (
351
- <GalleryItem key={i}>
352
- <Card>
353
- <CardBody>This is a card</CardBody>
354
- </Card>
355
- </GalleryItem>
356
- ))}
357
- </Gallery>
358
- </PageSection>
359
- </Page>
360
- </React.Fragment>
361
- );
362
- }
363
- }
29
+ ```js file='./examples/Nav/NavExpandable.tsx' isFullscreen
364
30
  ```
365
31
 
366
32
  ### Horizontal nav
367
33
 
368
- ```js isFullscreen
369
- import React from 'react';
370
- import {
371
- Avatar,
372
- Brand,
373
- Button,
374
- ButtonVariant,
375
- Card,
376
- CardBody,
377
- Dropdown,
378
- DropdownItem,
379
- DropdownList,
380
- Gallery,
381
- GalleryItem,
382
- Masthead,
383
- MastheadMain,
384
- MastheadBrand,
385
- MastheadContent,
386
- MenuToggle,
387
- Nav,
388
- NavItem,
389
- NavList,
390
- Page,
391
- PageSection,
392
- PageSectionVariants,
393
- SkipToContent,
394
- TextContent,
395
- Text,
396
- Toolbar,
397
- ToolbarContent,
398
- ToolbarGroup,
399
- ToolbarItem
400
- } from '@patternfly/react-core';
401
- import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
402
- import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
403
- import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
404
- import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
405
- import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
406
- import imgAvatar from '@patternfly/react-core/src/components/assets/avatarImg.svg';
407
- import pfLogo from '@patternfly/react-core/src/demos/assets/pf-logo.svg';
408
- import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/DashboardWrapper';
409
-
410
- class PageLayoutHorizontalNav extends React.Component {
411
- constructor(props) {
412
- super(props);
413
- this.state = {
414
- isDropdownOpen: false,
415
- isKebabDropdownOpen: false,
416
- isFullKebabDropdownOpen: false,
417
- activeItem: 0
418
- };
419
-
420
- this.onDropdownToggle = () => {
421
- this.setState((prevState) => ({
422
- isDropdownOpen: !prevState.isDropdownOpen
423
- }));
424
- };
425
-
426
- this.onDropdownSelect = () => {
427
- this.setState({
428
- isDropdownOpen: false
429
- });
430
- };
431
-
432
- this.onKebabDropdownToggle = () => {
433
- this.setState((prevState) => ({
434
- isKebabDropdownOpen: !prevState.isKebabDropdownOpen
435
- }));
436
- };
437
-
438
- this.onKebabDropdownSelect = () => {
439
- this.setState({
440
- isKebabDropdownOpen: false
441
- });
442
- };
443
-
444
- this.onFullKebabToggle = () => {
445
- this.setState((prevState) => ({
446
- isFullKebabDropdownOpen: !prevState.isFullKebabDropdownOpen
447
- }));
448
- };
449
-
450
- this.onNavSelect = (_event, result) => {
451
- this.setState({
452
- activeItem: result.itemId
453
- });
454
- };
455
- }
456
-
457
- render() {
458
- const { isDropdownOpen, isKebabDropdownOpen, isFullKebabDropdownOpen, activeItem } = this.state;
459
-
460
- const PageNav = (
461
- <Nav onSelect={this.onNavSelect} aria-label="Nav" variant="horizontal">
462
- <NavList>
463
- <NavItem itemId={0} isActive={activeItem === 0} to="#">
464
- System Panel
465
- </NavItem>
466
- <NavItem itemId={1} isActive={activeItem === 1} to="#">
467
- Policy
468
- </NavItem>
469
- <NavItem itemId={2} isActive={activeItem === 2} to="#">
470
- Authentication
471
- </NavItem>
472
- <NavItem itemId={3} isActive={activeItem === 3} to="#">
473
- Network Services
474
- </NavItem>
475
- <NavItem itemId={4} isActive={activeItem === 4} to="#">
476
- Server
477
- </NavItem>
478
- </NavList>
479
- </Nav>
480
- );
481
- const kebabDropdownItems = (
482
- <>
483
- <DropdownItem>
484
- <CogIcon /> Settings
485
- </DropdownItem>
486
- <DropdownItem>
487
- <HelpIcon /> Help
488
- </DropdownItem>
489
- </>
490
- );
491
- const userDropdownItems = (
492
- <>
493
- <DropdownItem key="group 2 profile">My profile</DropdownItem>
494
- <DropdownItem key="group 2 user">User management</DropdownItem>
495
- <DropdownItem key="group 2 logout">Logout</DropdownItem>
496
- </>
497
- );
498
-
499
- const headerToolbar = (
500
- <Toolbar id="toolbar" isFullHeight isStatic>
501
- <ToolbarContent>
502
- <ToolbarItem isOverflowContainer>{PageNav}</ToolbarItem>
503
- <ToolbarGroup
504
- variant="icon-button-group"
505
- align={{ default: 'alignRight' }}
506
- spacer={{ default: 'spacerNone', md: 'spacerMd' }}
507
- >
508
- <ToolbarItem>
509
- <Button aria-label="Notifications" variant={ButtonVariant.plain} icon={<BellIcon />} onClick={() => {}} />
510
- </ToolbarItem>
511
- <ToolbarGroup variant="icon-button-group" visibility={{ default: 'hidden', lg: 'visible' }}>
512
- <ToolbarItem>
513
- <Button aria-label="Settings" variant={ButtonVariant.plain} icon={<CogIcon />} />
514
- </ToolbarItem>
515
- <ToolbarItem>
516
- <Button aria-label="Help" variant={ButtonVariant.plain} icon={<QuestionCircleIcon />} />
517
- </ToolbarItem>
518
- </ToolbarGroup>
519
- <ToolbarItem visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}>
520
- <Dropdown
521
- isOpen={isKebabDropdownOpen}
522
- onSelect={this.onKebabDropdownSelect}
523
- onOpenChange={(isOpen) => this.setState({ isKebabDropdownOpen: isOpen })}
524
- popperProps={{ position: 'right' }}
525
- toggle={(toggleRef) => (
526
- <MenuToggle
527
- ref={toggleRef}
528
- isExpanded={isKebabDropdownOpen}
529
- onClick={this.onKebabDropdownToggle}
530
- variant="plain"
531
- aria-label="Settings and help"
532
- >
533
- <EllipsisVIcon aria-hidden="true" />
534
- </MenuToggle>
535
- )}
536
- >
537
- <DropdownList>{kebabDropdownItems}</DropdownList>
538
- </Dropdown>
539
- </ToolbarItem>
540
- <ToolbarItem visibility={{ md: 'hidden' }}>
541
- <Dropdown
542
- isOpen={isFullKebabDropdownOpen}
543
- onSelect={this.onFullKebabSelect}
544
- onOpenChange={(isOpen) => this.setState({ isFullKebabDropdownOpen: isOpen })}
545
- popperProps={{ position: 'right' }}
546
- toggle={(toggleRef) => (
547
- <MenuToggle
548
- ref={toggleRef}
549
- isExpanded={isFullKebabDropdownOpen}
550
- onClick={this.onFullKebabToggle}
551
- variant="plain"
552
- aria-label="Toolbar menu"
553
- >
554
- <EllipsisVIcon aria-hidden="true" />
555
- </MenuToggle>
556
- )}
557
- >
558
- <DropdownGroup key="group 2" aria-label="User actions">
559
- <DropdownList>{userDropdownItems}</DropdownList>
560
- </DropdownGroup>
561
- <Divider />
562
- <DropdownList>{kebabDropdownItems}</DropdownList>
563
- </Dropdown>
564
- </ToolbarItem>
565
- </ToolbarGroup>
566
- <ToolbarItem visibility={{ default: 'hidden', md: 'visible' }}>
567
- <Dropdown
568
- isOpen={isDropdownOpen}
569
- onSelect={this.onDropdownSelect}
570
- onOpenChange={(isOpen) => this.setState({ isDropdownOpen: isOpen })}
571
- popperProps={{ position: 'right' }}
572
- toggle={(toggleRef) => (
573
- <MenuToggle
574
- ref={toggleRef}
575
- isExpanded={isDropdownOpen}
576
- onClick={this.onDropdownToggle}
577
- icon={<Avatar src={imgAvatar} alt="" />}
578
- isFullHeight
579
- >
580
- Ned Username
581
- </MenuToggle>
582
- )}
583
- >
584
- <DropdownList>{userDropdownItems}</DropdownList>
585
- </Dropdown>
586
- </ToolbarItem>
587
- </ToolbarContent>
588
- </Toolbar>
589
- );
590
- const Header = (
591
- <Masthead>
592
- <MastheadMain>
593
- <MastheadBrand>
594
- <Brand src={pfLogo} alt="PatternFly" heights={{ default: '36px' }} />
595
- </MastheadBrand>
596
- </MastheadMain>
597
- <MastheadContent>{headerToolbar}</MastheadContent>
598
- </Masthead>
599
- );
600
-
601
- const pageId = 'main-content-page-layout-horizontal-nav';
602
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
603
-
604
- return (
605
- <React.Fragment>
606
- <Page
607
- header={Header}
608
- skipToContent={PageSkipToContent}
609
- breadcrumb={DashboardBreadcrumb}
610
- mainContainerId={pageId}
611
- >
612
- <PageSection variant={PageSectionVariants.light}>
613
- <TextContent>
614
- <Text component="h1">Main title</Text>
615
- <Text component="p">
616
- Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
617
- of its relative line height of 1.5.
618
- </Text>
619
- </TextContent>
620
- </PageSection>
621
- <PageSection>
622
- <Gallery hasGutter>
623
- {Array.apply(0, Array(10)).map((x, i) => (
624
- <GalleryItem key={i}>
625
- <Card>
626
- <CardBody>This is a card</CardBody>
627
- </Card>
628
- </GalleryItem>
629
- ))}
630
- </Gallery>
631
- </PageSection>
632
- </Page>
633
- </React.Fragment>
634
- );
635
- }
636
- }
34
+ ```js file='./examples/Nav/NavHorizontal.tsx' isFullscreen
637
35
  ```
638
36
 
639
37
  ### Horizontal subnav
640
38
 
641
- ```js isFullscreen
642
- import React from 'react';
643
- import {
644
- Card,
645
- CardBody,
646
- Gallery,
647
- GalleryItem,
648
- Nav,
649
- NavItem,
650
- NavList,
651
- Page,
652
- PageSection,
653
- PageSectionVariants,
654
- PageSidebar,
655
- PageSidebarBody,
656
- SkipToContent,
657
- TextContent,
658
- Text
659
- } from '@patternfly/react-core';
660
- import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/DashboardWrapper';
661
- import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
662
-
663
- class VerticalNavWithSubnav extends React.Component {
664
- constructor(props) {
665
- super(props);
666
- this.state = {
667
- activeItem: 0,
668
- activeSubNavItem: 7
669
- };
670
-
671
- this.onNavSelect = (_event, result) => {
672
- this.setState({
673
- activeItem: result.itemId
674
- });
675
- };
676
-
677
- this.onSubNavSelect = (_event, result) => {
678
- this.setState({
679
- activeSubNavItem: result.itemId
680
- });
681
- };
682
- }
683
-
684
- render() {
685
- const { activeItem, activeSubNavItem } = this.state;
686
-
687
- const PageNav = (
688
- <Nav onSelect={this.onNavSelect} aria-label="Nav">
689
- <NavList>
690
- <NavItem itemId={0} isActive={activeItem === 0} to="#">
691
- System Panel
692
- </NavItem>
693
- <NavItem itemId={1} isActive={activeItem === 1} to="#">
694
- Policy
695
- </NavItem>
696
- <NavItem itemId={2} isActive={activeItem === 2} to="#">
697
- Authentication
698
- </NavItem>
699
- <NavItem itemId={3} isActive={activeItem === 3} to="#">
700
- Network Services
701
- </NavItem>
702
- <NavItem itemId={4} isActive={activeItem === 4} to="#">
703
- Server
704
- </NavItem>
705
- </NavList>
706
- </Nav>
707
- );
708
-
709
- const Sidebar = (
710
- <PageSidebar>
711
- <PageSidebarBody>{PageNav}</PageSidebarBody>
712
- </PageSidebar>
713
- );
714
- const pageId = 'main-content-page-layout-default-nav';
715
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
716
-
717
- const SubNav = (
718
- <Nav onSelect={this.onSubNavSelect} aria-label="Nav" variant="horizontal-subnav">
719
- <NavList>
720
- <NavItem itemId={7} isActive={activeSubNavItem === 7} to="#">
721
- Horizontal subnav item 1
722
- </NavItem>
723
- <NavItem itemId={8} isActive={activeSubNavItem === 8} to="#">
724
- Horizontal subnav item 2
725
- </NavItem>
726
- <NavItem itemId={9} isActive={activeSubNavItem === 9} to="#">
727
- Horizontal subnav item 3
728
- </NavItem>
729
- <NavItem itemId={10} isActive={activeSubNavItem === 10} to="#">
730
- Horizontal subnav item 4
731
- </NavItem>
732
- <NavItem itemId={11} isActive={activeSubNavItem === 11} to="#">
733
- Horizontal subnav item 5
734
- </NavItem>
735
- <NavItem itemId={12} isActive={activeSubNavItem === 12} to="#">
736
- Horizontal subnav item 6
737
- </NavItem>
738
- <NavItem itemId={13} isActive={activeSubNavItem === 13} to="#">
739
- Horizontal subnav item 7
740
- </NavItem>
741
- </NavList>
742
- </Nav>
743
- );
744
-
745
- return (
746
- <React.Fragment>
747
- <Page
748
- header={<DashboardHeader />}
749
- sidebar={Sidebar}
750
- isManagedSidebar
751
- skipToContent={PageSkipToContent}
752
- mainContainerId={pageId}
753
- >
754
- <PageSection type={PageSectionTypes.subNav} isWidthLimited>
755
- {SubNav}
756
- </PageSection>
757
- <PageSection type={PageSectionTypes.breadcrumb} isWidthLimited>
758
- {DashboardBreadcrumb}
759
- </PageSection>
760
- <PageSection variant={PageSectionVariants.light}>
761
- <TextContent>
762
- <Text component="h1">Main title</Text>
763
- <Text component="p">
764
- Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
765
- of it’s relative line height of 1.5.
766
- </Text>
767
- </TextContent>
768
- </PageSection>
769
- <PageSection>
770
- <Gallery hasGutter>
771
- {Array.apply(0, Array(10)).map((x, i) => (
772
- <GalleryItem key={i}>
773
- <Card>
774
- <CardBody>This is a card</CardBody>
775
- </Card>
776
- </GalleryItem>
777
- ))}
778
- </Gallery>
779
- </PageSection>
780
- </Page>
781
- </React.Fragment>
782
- );
783
- }
784
- }
39
+ ```js file='./examples/Nav/NavWithSubnav.tsx' isFullscreen
785
40
  ```
786
41
 
787
42
  ### Horizontal nav with horizontal subnav
788
43
 
789
- ```js isFullscreen
790
- import React from 'react';
791
- import {
792
- Avatar,
793
- Brand,
794
- Button,
795
- ButtonVariant,
796
- Card,
797
- CardBody,
798
- Dropdown,
799
- DropdownItem,
800
- DropdownList,
801
- Gallery,
802
- GalleryItem,
803
- MenuToggle,
804
- Masthead,
805
- MastheadMain,
806
- MastheadBrand,
807
- MastheadContent,
808
- Nav,
809
- NavItem,
810
- NavList,
811
- Page,
812
- PageSection,
813
- PageSectionVariants,
814
- PageSectionTypes,
815
- SkipToContent,
816
- TextContent,
817
- Text,
818
- Toolbar,
819
- ToolbarContent,
820
- ToolbarGroup,
821
- ToolbarItem
822
- } from '@patternfly/react-core';
823
- import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
824
- import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
825
- import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
826
- import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
827
- import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
828
- import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
829
- import imgAvatar from '@patternfly/react-core/src/components/assets/avatarImg.svg';
830
- import pfLogo from '@patternfly/react-core/src/demos/assets/pf-logo.svg';
831
- import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/DashboardWrapper';
832
-
833
- class HorizontalNavWithSubnav extends React.Component {
834
- constructor(props) {
835
- super(props);
836
- this.state = {
837
- isDropdownOpen: false,
838
- isKebabDropdownOpen: false,
839
- isFullKebabDropdownOpen: false,
840
- activeItem: 0,
841
- activeSubNavItem: 7
842
- };
843
-
844
- this.onDropdownToggle = () => {
845
- this.setState((prevState) => ({
846
- isDropdownOpen: !prevState.isDropdownOpen
847
- }));
848
- };
849
-
850
- this.onDropdownSelect = () => {
851
- this.setState({
852
- isDropdownOpen: false
853
- });
854
- };
855
-
856
- this.onKebabDropdownToggle = () => {
857
- this.setState((prevState) => ({
858
- isKebabDropdownOpen: !prevState.isKebabDropdownOpen
859
- }));
860
- };
861
-
862
- this.onKebabDropdownSelect = () => {
863
- this.setState({
864
- isKebabDropdownOpen: false
865
- });
866
- };
867
-
868
- this.onFullKebabToggle = () => {
869
- this.setState((prevState) => ({
870
- isFullKebabDropdownOpen: !prevState.isFullKebabDropdownOpen
871
- }));
872
- };
873
-
874
- this.onNavSelect = (_event, result) => {
875
- this.setState({
876
- activeItem: result.itemId
877
- });
878
- };
879
-
880
- this.onSubNavSelect = (_event, result) => {
881
- this.setState({
882
- activeSubNavItem: result.itemId
883
- });
884
- };
885
- }
886
-
887
- render() {
888
- const { isDropdownOpen, isKebabDropdownOpen, isFullKebabDropdownOpen, activeItem, activeSubNavItem } = this.state;
889
-
890
- const PageNav = (
891
- <Nav onSelect={this.onNavSelect} aria-label="Nav" variant="horizontal">
892
- <NavList>
893
- <NavItem itemId={0} isActive={activeItem === 0} to="#">
894
- System Panel
895
- </NavItem>
896
- <NavItem itemId={1} isActive={activeItem === 1} to="#">
897
- Policy
898
- </NavItem>
899
- <NavItem itemId={2} isActive={activeItem === 2} to="#">
900
- Authentication
901
- </NavItem>
902
- <NavItem itemId={3} isActive={activeItem === 3} to="#">
903
- Network Services
904
- </NavItem>
905
- <NavItem itemId={4} isActive={activeItem === 4} to="#">
906
- Server
907
- </NavItem>
908
- <NavItem itemId={5} isActive={activeItem === 5} to="#">
909
- Other horizontal nav item 1
910
- </NavItem>
911
- <NavItem itemId={6} isActive={activeItem === 6} to="#">
912
- Other horizontal nav item 2
913
- </NavItem>
914
- </NavList>
915
- </Nav>
916
- );
917
- const kebabDropdownItems = (
918
- <>
919
- <DropdownItem>
920
- <CogIcon /> Settings
921
- </DropdownItem>
922
- <DropdownItem>
923
- <HelpIcon /> Help
924
- </DropdownItem>
925
- </>
926
- );
927
- const userDropdownItems = (
928
- <>
929
- <DropdownItem key="group 2 profile">My profile</DropdownItem>
930
- <DropdownItem key="group 2 user">User management</DropdownItem>
931
- <DropdownItem key="group 2 logout">Logout</DropdownItem>
932
- </>
933
- );
934
-
935
- const SubNav = (
936
- <Nav onSelect={this.onSubNavSelect} aria-label="Nav" variant="horizontal-subnav">
937
- <NavList>
938
- <NavItem itemId={7} isActive={activeSubNavItem === 7} to="#">
939
- Horizontal subnav item 1
940
- </NavItem>
941
- <NavItem itemId={8} isActive={activeSubNavItem === 8} to="#">
942
- Horizontal subnav item 2
943
- </NavItem>
944
- <NavItem itemId={9} isActive={activeSubNavItem === 9} to="#">
945
- Horizontal subnav item 3
946
- </NavItem>
947
- <NavItem itemId={10} isActive={activeSubNavItem === 10} to="#">
948
- Horizontal subnav item 4
949
- </NavItem>
950
- <NavItem itemId={11} isActive={activeSubNavItem === 11} to="#">
951
- Horizontal subnav item 5
952
- </NavItem>
953
- <NavItem itemId={12} isActive={activeSubNavItem === 12} to="#">
954
- Horizontal subnav item 6
955
- </NavItem>
956
- <NavItem itemId={13} isActive={activeSubNavItem === 13} to="#">
957
- Horizontal subnav item 7
958
- </NavItem>
959
- </NavList>
960
- </Nav>
961
- );
962
-
963
- const headerToolbar = (
964
- <Toolbar id="toolbar" isFullHeight isStatic>
965
- <ToolbarContent>
966
- <ToolbarItem isOverflowContainer>{PageNav}</ToolbarItem>
967
- <ToolbarGroup
968
- variant="icon-button-group"
969
- align={{ default: 'alignRight' }}
970
- spacer={{ default: 'spacerNone', md: 'spacerMd' }}
971
- >
972
- <ToolbarItem>
973
- <Button aria-label="Notifications" variant={ButtonVariant.plain} icon={<BellIcon />} onClick={() => {}} />
974
- </ToolbarItem>
975
- <ToolbarGroup variant="icon-button-group" visibility={{ default: 'hidden', lg: 'visible' }}>
976
- <ToolbarItem>
977
- <Button aria-label="Settings" variant={ButtonVariant.plain} icon={<CogIcon />} />
978
- </ToolbarItem>
979
- <ToolbarItem>
980
- <Button aria-label="Help" variant={ButtonVariant.plain} icon={<QuestionCircleIcon />} />
981
- </ToolbarItem>
982
- </ToolbarGroup>
983
- <ToolbarItem visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}>
984
- <Dropdown
985
- isOpen={isKebabDropdownOpen}
986
- onSelect={this.onKebabDropdownSelect}
987
- onOpenChange={(isOpen) => this.setState({ isKebabDropdownOpen: isOpen })}
988
- popperProps={{ position: 'right' }}
989
- toggle={(toggleRef) => (
990
- <MenuToggle
991
- ref={toggleRef}
992
- isExpanded={isKebabDropdownOpen}
993
- onClick={this.onKebabDropdownToggle}
994
- variant="plain"
995
- aria-label="Settings and help"
996
- >
997
- <EllipsisVIcon aria-hidden="true" />
998
- </MenuToggle>
999
- )}
1000
- >
1001
- <DropdownList>{kebabDropdownItems}</DropdownList>
1002
- </Dropdown>
1003
- </ToolbarItem>
1004
- <ToolbarItem visibility={{ md: 'hidden' }}>
1005
- <Dropdown
1006
- isOpen={isFullKebabDropdownOpen}
1007
- onSelect={this.onFullKebabSelect}
1008
- onOpenChange={(isOpen) => this.setState({ isFullKebabDropdownOpen: isOpen })}
1009
- popperProps={{ position: 'right' }}
1010
- toggle={(toggleRef) => (
1011
- <MenuToggle
1012
- ref={toggleRef}
1013
- isExpanded={isFullKebabDropdownOpen}
1014
- onClick={this.onFullKebabToggle}
1015
- variant="plain"
1016
- aria-label="Toolbar menu"
1017
- >
1018
- <EllipsisVIcon aria-hidden="true" />
1019
- </MenuToggle>
1020
- )}
1021
- >
1022
- <DropdownGroup key="group 2" aria-label="User actions">
1023
- <DropdownList>{userDropdownItems}</DropdownList>
1024
- </DropdownGroup>
1025
- <Divider />
1026
- <DropdownList>{kebabDropdownItems}</DropdownList>
1027
- </Dropdown>
1028
- </ToolbarItem>
1029
- </ToolbarGroup>
1030
- <ToolbarItem visibility={{ default: 'hidden', md: 'visible' }}>
1031
- <Dropdown
1032
- isOpen={isDropdownOpen}
1033
- onSelect={this.onDropdownSelect}
1034
- onOpenChange={(isOpen) => this.setState({ isDropdownOpen: isOpen })}
1035
- popperProps={{ position: 'right' }}
1036
- toggle={(toggleRef) => (
1037
- <MenuToggle
1038
- ref={toggleRef}
1039
- isExpanded={isDropdownOpen}
1040
- onClick={this.onDropdownToggle}
1041
- icon={<Avatar src={imgAvatar} alt="" />}
1042
- isFullHeight
1043
- >
1044
- Ned Username
1045
- </MenuToggle>
1046
- )}
1047
- >
1048
- <DropdownList>{userDropdownItems}</DropdownList>
1049
- </Dropdown>
1050
- </ToolbarItem>
1051
- </ToolbarContent>
1052
- </Toolbar>
1053
- );
1054
- const Header = (
1055
- <Masthead>
1056
- <MastheadToggle>
1057
- <PageToggleButton variant="plain" aria-label="Global navigation">
1058
- <BarsIcon />
1059
- </PageToggleButton>
1060
- </MastheadToggle>
1061
- <MastheadMain>
1062
- <MastheadBrand>
1063
- <Brand src={pfLogo} alt="PatternFly" heights={{ default: '36px' }} />
1064
- </MastheadBrand>
1065
- </MastheadMain>
1066
- <MastheadContent>{headerToolbar}</MastheadContent>
1067
- </Masthead>
1068
- );
1069
-
1070
- const pageId = 'main-content-page-layout-horizontal-nav';
1071
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
1072
-
1073
- return (
1074
- <React.Fragment>
1075
- <Page header={Header} skipToContent={PageSkipToContent} mainContainerId={pageId}>
1076
- <PageSection type={PageSectionTypes.subNav} isWidthLimited>
1077
- {SubNav}
1078
- </PageSection>
1079
- <PageSection type={PageSectionTypes.breadcrumb} isWidthLimited>
1080
- {DashboardBreadcrumb}
1081
- </PageSection>
1082
- <PageSection variant={PageSectionVariants.light}>
1083
- <TextContent>
1084
- <Text component="h1">Main title</Text>
1085
- <Text component="p">
1086
- Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
1087
- of it’s relative line height of 1.5.
1088
- </Text>
1089
- </TextContent>
1090
- </PageSection>
1091
- <PageSection>
1092
- <Gallery hasGutter>
1093
- {Array.apply(0, Array(10)).map((x, i) => (
1094
- <GalleryItem key={i}>
1095
- <Card>
1096
- <CardBody>This is a card</CardBody>
1097
- </Card>
1098
- </GalleryItem>
1099
- ))}
1100
- </Gallery>
1101
- </PageSection>
1102
- </Page>
1103
- </React.Fragment>
1104
- );
1105
- }
1106
- }
44
+ ```js file='./examples/Nav/NavHorizontalWithSubnav.tsx' isFullscreen
1107
45
  ```
1108
46
 
1109
47
  ### Tertiary nav (deprecated)
1110
48
 
1111
- ```js isFullscreen
1112
- import React from 'react';
1113
- import {
1114
- Card,
1115
- CardBody,
1116
- Gallery,
1117
- GalleryItem,
1118
- Nav,
1119
- NavItem,
1120
- NavList,
1121
- Page,
1122
- PageSection,
1123
- PageSectionVariants,
1124
- SkipToContent,
1125
- TextContent,
1126
- Text
1127
- } from '@patternfly/react-core';
1128
- import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/DashboardWrapper';
1129
- import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
1130
-
1131
- class PageLayoutTertiaryNav extends React.Component {
1132
- constructor(props) {
1133
- super(props);
1134
- this.state = {
1135
- activeItem: 0
1136
- };
1137
-
1138
- this.onNavSelect = (_event, result) => {
1139
- this.setState({
1140
- activeItem: result.itemId
1141
- });
1142
- };
1143
- }
1144
-
1145
- render() {
1146
- const { activeItem } = this.state;
1147
-
1148
- const PageNav = (
1149
- <Nav variant="tertiary" onSelect={this.onNavSelect} aria-label="Nav">
1150
- <NavList>
1151
- <NavItem itemId={0} isActive={activeItem === 0} to="#">
1152
- System Panel
1153
- </NavItem>
1154
- <NavItem itemId={1} isActive={activeItem === 1} to="#">
1155
- Policy
1156
- </NavItem>
1157
- <NavItem itemId={2} isActive={activeItem === 2} to="#">
1158
- Authentication
1159
- </NavItem>
1160
- <NavItem itemId={3} isActive={activeItem === 3} to="#">
1161
- Network Services
1162
- </NavItem>
1163
- <NavItem itemId={4} isActive={activeItem === 4} to="#">
1164
- Server
1165
- </NavItem>
1166
- </NavList>
1167
- </Nav>
1168
- );
1169
-
1170
- const pageId = 'main-content-page-layout-tertiary-nav';
1171
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
1172
-
1173
- return (
1174
- <React.Fragment>
1175
- <Page
1176
- header={<DashboardHeader />}
1177
- breadcrumb={DashboardBreadcrumb}
1178
- tertiaryNav={PageNav}
1179
- isManagedSidebar
1180
- isTertiaryNavWidthLimited
1181
- skipToContent={PageSkipToContent}
1182
- mainContainerId={pageId}
1183
- >
1184
- <PageSection variant={PageSectionVariants.light}>
1185
- <TextContent>
1186
- <Text component="h1">Main title</Text>
1187
- <Text component="p">
1188
- Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
1189
- of its relative line height of 1.5.
1190
- </Text>
1191
- </TextContent>
1192
- </PageSection>
1193
- <PageSection>
1194
- <Gallery hasGutter>
1195
- {Array.apply(0, Array(10)).map((x, i) => (
1196
- <GalleryItem key={i}>
1197
- <Card>
1198
- <CardBody>This is a card</CardBody>
1199
- </Card>
1200
- </GalleryItem>
1201
- ))}
1202
- </Gallery>
1203
- </PageSection>
1204
- </Page>
1205
- </React.Fragment>
1206
- );
1207
- }
1208
- }
49
+ ```js file='./examples/Nav/deprecated/NavTertiary.tsx' isFullscreen
1209
50
  ```
1210
51
 
1211
52
  ### Light nav (deprecated)
1212
53
 
1213
- ```js isFullscreen
1214
- import React from 'react';
1215
- import {
1216
- Card,
1217
- CardBody,
1218
- Gallery,
1219
- GalleryItem,
1220
- Nav,
1221
- NavItem,
1222
- NavList,
1223
- Page,
1224
- PageSection,
1225
- PageSectionVariants,
1226
- PageSidebar,
1227
- PageSidebarBody,
1228
- SkipToContent,
1229
- TextContent,
1230
- Text
1231
- } from '@patternfly/react-core';
1232
- import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
1233
-
1234
- class PageLayoutLightNav extends React.Component {
1235
- constructor(props) {
1236
- super(props);
1237
- this.state = {
1238
- activeItem: 0
1239
- };
1240
-
1241
- this.onNavSelect = (_event, result) => {
1242
- this.setState({
1243
- activeItem: result.itemId
1244
- });
1245
- };
1246
- }
1247
-
1248
- render() {
1249
- const { activeItem } = this.state;
1250
-
1251
- const PageNav = (
1252
- <Nav onSelect={this.onNavSelect} aria-label="Nav" theme="light">
1253
- <NavList>
1254
- <NavItem itemId={0} isActive={activeItem === 0} to="#">
1255
- System Panel
1256
- </NavItem>
1257
- <NavItem itemId={1} isActive={activeItem === 1} to="#">
1258
- Policy
1259
- </NavItem>
1260
- <NavItem itemId={2} isActive={activeItem === 2} to="#">
1261
- Authentication
1262
- </NavItem>
1263
- <NavItem itemId={3} isActive={activeItem === 3} to="#">
1264
- Network Services
1265
- </NavItem>
1266
- <NavItem itemId={4} isActive={activeItem === 4} to="#">
1267
- Server
1268
- </NavItem>
1269
- </NavList>
1270
- </Nav>
1271
- );
1272
-
1273
- const Sidebar = (
1274
- <PageSidebar theme="light">
1275
- <PageSidebarBody>{PageNav}</PageSidebarBody>
1276
- </PageSidebar>
1277
- );
1278
- const pageId = 'main-content-page-layout-simple-nav';
1279
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to Content</SkipToContent>;
1280
-
1281
- return (
1282
- <React.Fragment>
1283
- <Page
1284
- header={<DashboardHeader />}
1285
- sidebar={Sidebar}
1286
- isManagedSidebar
1287
- skipToContent={PageSkipToContent}
1288
- mainContainerId={pageId}
1289
- >
1290
- <PageSection variant={PageSectionVariants.light}>
1291
- <TextContent>
1292
- <Text component="h1">Main title</Text>
1293
- <Text component="p">
1294
- Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
1295
- of its relative line height of 1.5.
1296
- </Text>
1297
- </TextContent>
1298
- </PageSection>
1299
- <PageSection>
1300
- <Gallery hasGutter>
1301
- {Array.apply(0, Array(10)).map((x, i) => (
1302
- <GalleryItem key={i}>
1303
- <Card>
1304
- <CardBody>This is a card</CardBody>
1305
- </Card>
1306
- </GalleryItem>
1307
- ))}
1308
- </Gallery>
1309
- </PageSection>
1310
- </Page>
1311
- </React.Fragment>
1312
- );
1313
- }
1314
- }
54
+ ```js file='./examples/Nav/deprecated/NavLight.tsx' isFullscreen
1315
55
  ```
1316
56
 
1317
57
  ### Manual nav
1318
58
 
1319
- ```js isFullscreen
1320
- import React from 'react';
1321
- import {
1322
- Avatar,
1323
- Brand,
1324
- Button,
1325
- ButtonVariant,
1326
- Card,
1327
- CardBody,
1328
- Dropdown,
1329
- DropdownItem,
1330
- DropdownList,
1331
- Gallery,
1332
- GalleryItem,
1333
- Masthead,
1334
- MastheadMain,
1335
- MastheadBrand,
1336
- MastheadContent,
1337
- MenuToggle,
1338
- Nav,
1339
- NavItem,
1340
- NavList,
1341
- Page,
1342
- PageSection,
1343
- PageSectionVariants,
1344
- PageSidebar,
1345
- PageSidebarBody,
1346
- SkipToContent,
1347
- TextContent,
1348
- Text,
1349
- Toolbar,
1350
- ToolbarContent,
1351
- ToolbarGroup,
1352
- ToolbarItem
1353
- } from '@patternfly/react-core';
1354
- import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
1355
- import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
1356
- import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
1357
- import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
1358
- import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
1359
- import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
1360
- import imgAvatar from '@patternfly/react-core/src/components/assets/avatarImg.svg';
1361
- import pfLogo from '@patternfly/react-core/src/demos/assets/pf-logo.svg';
1362
-
1363
- class PageLayoutManualNav extends React.Component {
1364
- constructor(props) {
1365
- super(props);
1366
- this.state = {
1367
- isDropdownOpen: false,
1368
- isKebabDropdownOpen: false,
1369
- isFullKebabDropdownOpen: false,
1370
- activeItem: 0,
1371
- isMobileView: false,
1372
- isNavOpenDesktop: true,
1373
- isNavOpenMobile: false
1374
- };
1375
-
1376
- this.onDropdownToggle = () => {
1377
- this.setState((prevState) => ({
1378
- isDropdownOpen: !prevState.isDropdownOpen
1379
- }));
1380
- };
1381
-
1382
- this.onDropdownSelect = () => {
1383
- this.setState({
1384
- isDropdownOpen: false
1385
- });
1386
- };
1387
-
1388
- this.onKebabDropdownToggle = () => {
1389
- this.setState((prevState) => ({
1390
- isKebabDropdownOpen: !prevState.isKebabDropdownOpen
1391
- }));
1392
- };
1393
-
1394
- this.onKebabDropdownSelect = () => {
1395
- this.setState({
1396
- isKebabDropdownOpen: false
1397
- });
1398
- };
1399
-
1400
- this.onFullKebabToggle = () => {
1401
- this.setState((prevState) => ({
1402
- isFullKebabDropdownOpen: !prevState.isFullKebabDropdownOpen
1403
- }));
1404
- };
1405
-
1406
- this.onNavSelect = (_event, result) => {
1407
- this.setState({
1408
- activeItem: result.itemId
1409
- });
1410
- };
1411
-
1412
- this.onNavToggleDesktop = () => {
1413
- this.setState({
1414
- isNavOpenDesktop: !this.state.isNavOpenDesktop
1415
- });
1416
- };
1417
-
1418
- this.onNavToggleMobile = () => {
1419
- this.setState({
1420
- isNavOpenMobile: !this.state.isNavOpenMobile
1421
- });
1422
- };
1423
-
1424
- this.onPageResize = (_event, { mobileView, windowSize }) => {
1425
- this.setState({
1426
- isMobileView: mobileView
1427
- });
1428
- };
1429
- }
1430
-
1431
- render() {
1432
- const {
1433
- isDropdownOpen,
1434
- isKebabDropdownOpen,
1435
- isFullKebabDropdownOpen,
1436
- activeItem,
1437
- isNavOpenDesktop,
1438
- isNavOpenMobile,
1439
- isMobileView
1440
- } = this.state;
1441
-
1442
- const PageNav = (
1443
- <Nav onSelect={this.onNavSelect} aria-label="Nav">
1444
- <NavList>
1445
- <NavItem itemId={0} isActive={activeItem === 0} to="#">
1446
- System Panel
1447
- </NavItem>
1448
- <NavItem itemId={1} isActive={activeItem === 1} to="#">
1449
- Policy
1450
- </NavItem>
1451
- <NavItem itemId={2} isActive={activeItem === 2} to="#">
1452
- Authentication
1453
- </NavItem>
1454
- <NavItem itemId={3} isActive={activeItem === 3} to="#">
1455
- Network Services
1456
- </NavItem>
1457
- <NavItem itemId={4} isActive={activeItem === 4} to="#">
1458
- Server
1459
- </NavItem>
1460
- </NavList>
1461
- </Nav>
1462
- );
1463
- const kebabDropdownItems = (
1464
- <>
1465
- <DropdownItem>
1466
- <CogIcon /> Settings
1467
- </DropdownItem>
1468
- <DropdownItem>
1469
- <HelpIcon /> Help
1470
- </DropdownItem>
1471
- </>
1472
- );
1473
- const userDropdownItems = (
1474
- <>
1475
- <DropdownItem key="group 2 profile">My profile</DropdownItem>
1476
- <DropdownItem key="group 2 user">User management</DropdownItem>
1477
- <DropdownItem key="group 2 logout">Logout</DropdownItem>
1478
- </>
1479
- );
1480
-
1481
- const headerToolbar = (
1482
- <Toolbar id="toolbar" isFullHeight isStatic>
1483
- <ToolbarContent>
1484
- <ToolbarGroup
1485
- variant="icon-button-group"
1486
- align={{ default: 'alignRight' }}
1487
- spacer={{ default: 'spacerNone', md: 'spacerMd' }}
1488
- >
1489
- <ToolbarItem>
1490
- <Button aria-label="Notifications" variant={ButtonVariant.plain} icon={<BellIcon />} onClick={() => {}} />
1491
- </ToolbarItem>
1492
- <ToolbarGroup variant="icon-button-group" visibility={{ default: 'hidden', lg: 'visible' }}>
1493
- <ToolbarItem>
1494
- <Button aria-label="Settings" variant={ButtonVariant.plain} icon={<CogIcon />} />
1495
- </ToolbarItem>
1496
- <ToolbarItem>
1497
- <Button aria-label="Help" variant={ButtonVariant.plain} icon={<QuestionCircleIcon />} />
1498
- </ToolbarItem>
1499
- </ToolbarGroup>
1500
- <ToolbarItem visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}>
1501
- <Dropdown
1502
- isOpen={isKebabDropdownOpen}
1503
- onSelect={this.onKebabDropdownSelect}
1504
- onOpenChange={(isOpen) => this.setState({ isKebabDropdownOpen: isOpen })}
1505
- popperProps={{ position: 'right' }}
1506
- toggle={(toggleRef) => (
1507
- <MenuToggle
1508
- ref={toggleRef}
1509
- isExpanded={isKebabDropdownOpen}
1510
- onClick={this.onKebabDropdownToggle}
1511
- variant="plain"
1512
- aria-label="Settings and help"
1513
- >
1514
- <EllipsisVIcon aria-hidden="true" />
1515
- </MenuToggle>
1516
- )}
1517
- >
1518
- <DropdownList>{kebabDropdownItems}</DropdownList>
1519
- </Dropdown>
1520
- </ToolbarItem>
1521
- <ToolbarItem visibility={{ md: 'hidden' }}>
1522
- <Dropdown
1523
- isOpen={isFullKebabDropdownOpen}
1524
- onSelect={this.onFullKebabSelect}
1525
- onOpenChange={(isOpen) => this.setState({ isFullKebabDropdownOpen: isOpen })}
1526
- popperProps={{ position: 'right' }}
1527
- toggle={(toggleRef) => (
1528
- <MenuToggle
1529
- ref={toggleRef}
1530
- isExpanded={isFullKebabDropdownOpen}
1531
- onClick={this.onFullKebabToggle}
1532
- variant="plain"
1533
- aria-label="Toolbar menu"
1534
- >
1535
- <EllipsisVIcon aria-hidden="true" />
1536
- </MenuToggle>
1537
- )}
1538
- >
1539
- <DropdownGroup key="group 2" aria-label="User actions">
1540
- <DropdownList>{userDropdownItems}</DropdownList>
1541
- </DropdownGroup>
1542
- <Divider />
1543
- <DropdownList>{kebabDropdownItems}</DropdownList>
1544
- </Dropdown>
1545
- </ToolbarItem>
1546
- </ToolbarGroup>
1547
- <ToolbarItem visibility={{ default: 'hidden', md: 'visible' }}>
1548
- <Dropdown
1549
- isOpen={isDropdownOpen}
1550
- onSelect={this.onDropdownSelect}
1551
- onOpenChange={(isOpen) => this.setState({ isDropdownOpen: isOpen })}
1552
- popperProps={{ position: 'right' }}
1553
- toggle={(toggleRef) => (
1554
- <MenuToggle
1555
- ref={toggleRef}
1556
- isExpanded={isDropdownOpen}
1557
- onClick={this.onDropdownToggle}
1558
- icon={<Avatar src={imgAvatar} alt="" />}
1559
- isFullHeight
1560
- >
1561
- Ned Username
1562
- </MenuToggle>
1563
- )}
1564
- >
1565
- <DropdownList>{userDropdownItems}</DropdownList>
1566
- </Dropdown>
1567
- </ToolbarItem>
1568
- </ToolbarContent>
1569
- </Toolbar>
1570
- );
1571
- const Header = (
1572
- <Masthead>
1573
- <MastheadToggle>
1574
- <PageToggleButton variant="plain" aria-label="Global navigation">
1575
- <BarsIcon />
1576
- </PageToggleButton>
1577
- </MastheadToggle>
1578
- <MastheadMain>
1579
- <MastheadBrand>
1580
- <Brand src={pfLogo} alt="PatternFly" heights={{ default: '36px' }} />
1581
- </MastheadBrand>
1582
- </MastheadMain>
1583
- <MastheadContent>{headerToolbar}</MastheadContent>
1584
- </Masthead>
1585
- );
1586
-
1587
- const Sidebar = (
1588
- <PageSidebar isSidebarOpen={isMobileView ? isNavOpenMobile : isNavOpenDesktop}>
1589
- <PageSidebarBody>{PageNav}</PageSidebarBody>
1590
- </PageSidebar>
1591
- );
1592
- const pageId = 'main-content-page-layout-manual-nav';
1593
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to Content</SkipToContent>;
1594
-
1595
- return (
1596
- <React.Fragment>
1597
- <Page
1598
- header={Header}
1599
- sidebar={Sidebar}
1600
- onPageResize={this.onPageResize}
1601
- skipToContent={PageSkipToContent}
1602
- mainContainerId={pageId}
1603
- >
1604
- <PageSection variant={PageSectionVariants.light}>
1605
- <TextContent>
1606
- <Text component="h1">Main title</Text>
1607
- <Text component="p">
1608
- Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
1609
- of its relative line height of 1.5.
1610
- </Text>
1611
- </TextContent>
1612
- </PageSection>
1613
- <PageSection>
1614
- <Gallery hasGutter>
1615
- {Array.apply(0, Array(10)).map((x, i) => (
1616
- <GalleryItem key={i}>
1617
- <Card>
1618
- <CardBody>This is a card</CardBody>
1619
- </Card>
1620
- </GalleryItem>
1621
- ))}
1622
- </Gallery>
1623
- </PageSection>
1624
- </Page>
1625
- </React.Fragment>
1626
- );
1627
- }
1628
- }
59
+ ```js file='./examples/Nav/NavManual.tsx' isFullscreen
1629
60
  ```
1630
61
 
1631
62
  ### Flyout nav
1632
63
 
1633
- ```js isFullscreen
1634
- import React from 'react';
1635
- import {
1636
- Page,
1637
- Nav,
1638
- NavList,
1639
- NavItem,
1640
- PageSidebar,
1641
- PageSidebarBody,
1642
- PageSection,
1643
- PageSectionVariants,
1644
- Menu,
1645
- MenuContent,
1646
- MenuList,
1647
- MenuItem
1648
- } from '@patternfly/react-core';
1649
- import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
1650
-
1651
- class VerticalPage extends React.Component {
1652
- constructor(props) {
1653
- super(props);
1654
- this.state = {
1655
- isNavOpen: true,
1656
- activeItem: 0
1657
- };
1658
- this.onNavSelect = (_event, result) => {
1659
- this.setState({
1660
- activeItem: result.itemId
1661
- });
1662
- };
1663
- this.onMenuSelect = (event, itemId) => {
1664
- this.setState({
1665
- activeItem: itemId
1666
- });
1667
- };
1668
- }
1669
-
1670
- render() {
1671
- const numFlyouts = 5;
1672
- const FlyoutMenu = ({ depth, children }) => (
1673
- <Menu key={depth} containsFlyout isNavFlyout id={`menu-${depth}`} onSelect={this.onMenuSelect}>
1674
- <MenuContent>
1675
- <MenuList>
1676
- <MenuItem flyoutMenu={children} itemId={`next-menu-${depth}`}>
1677
- Additional settings
1678
- </MenuItem>
1679
- {[...Array(numFlyouts - depth).keys()].map((j) => (
1680
- <MenuItem key={`${depth}-${j}`} itemId={`${depth}-${j}`} to={`#menu-link-${depth}-${j}`}>
1681
- Settings menu {depth} item {j}
1682
- </MenuItem>
1683
- ))}
1684
- <MenuItem flyoutMenu={children} itemId={`next-menu-2-${depth}`}>
1685
- Additional settings
1686
- </MenuItem>
1687
- </MenuList>
1688
- </MenuContent>
1689
- </Menu>
1690
- );
1691
- let curFlyout = <FlyoutMenu depth={1} />;
1692
- for (let i = 2; i < numFlyouts - 1; i++) {
1693
- curFlyout = <FlyoutMenu depth={i}>{curFlyout}</FlyoutMenu>;
1694
- }
1695
-
1696
- const { activeItem } = this.state;
1697
-
1698
- const Sidebar = (
1699
- <PageSidebar style={{ overflow: 'visible' }}>
1700
- <PageSidebarBody>
1701
- <Nav onSelect={this.onNavSelect}>
1702
- <NavList>
1703
- <NavItem preventDefault id="flyout-link1" to="#flyout-link1" itemId={0} isActive={activeItem === 0}>
1704
- System Panel
1705
- </NavItem>
1706
- <NavItem preventDefault flyout={curFlyout} id="flyout-link2" itemId={1} isActive={activeItem === 1}>
1707
- Settings
1708
- </NavItem>
1709
- <NavItem preventDefault id="flyout-link3" to="#flyout-link3" itemId={2} isActive={activeItem === 2}>
1710
- Authentication
1711
- </NavItem>
1712
- </NavList>
1713
- </Nav>
1714
- </PageSidebarBody>
1715
- </PageSidebar>
1716
- );
1717
-
1718
- return (
1719
- <Page header={<DashboardHeader />} sidebar={Sidebar} isManagedSidebar>
1720
- <PageSection variant={PageSectionVariants.darker}>Section with darker background</PageSection>
1721
- <PageSection variant={PageSectionVariants.dark}>Section with dark background</PageSection>
1722
- <PageSection variant={PageSectionVariants.light}>Section with light background</PageSection>
1723
- </Page>
1724
- );
1725
- }
1726
- }
64
+ ```js file='./examples/Nav/NavFlyout.tsx' isFullscreen
1727
65
  ```
1728
66
 
1729
67
  ### Drilldown nav
1730
68
 
1731
69
  ```js isBeta isFullscreen file="./examples/Nav/NavDrilldown.tsx"
1732
-
1733
70
  ```