@patternfly/react-core 5.0.0-prerelease.2 → 5.0.0-prerelease.4

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 (254) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/esm/components/AboutModal/package.json +1 -1
  3. package/dist/esm/components/Accordion/package.json +1 -1
  4. package/dist/esm/components/ActionList/package.json +1 -1
  5. package/dist/esm/components/Alert/package.json +1 -1
  6. package/dist/esm/components/Avatar/package.json +1 -1
  7. package/dist/esm/components/BackToTop/package.json +1 -1
  8. package/dist/esm/components/Backdrop/package.json +1 -1
  9. package/dist/esm/components/BackgroundImage/package.json +1 -1
  10. package/dist/esm/components/Badge/package.json +1 -1
  11. package/dist/esm/components/Banner/package.json +1 -1
  12. package/dist/esm/components/Brand/package.json +1 -1
  13. package/dist/esm/components/Breadcrumb/package.json +1 -1
  14. package/dist/esm/components/Button/package.json +1 -1
  15. package/dist/esm/components/CalendarMonth/package.json +1 -1
  16. package/dist/esm/components/Card/package.json +1 -1
  17. package/dist/esm/components/Checkbox/package.json +1 -1
  18. package/dist/esm/components/Chip/package.json +1 -1
  19. package/dist/esm/components/ClipboardCopy/package.json +1 -1
  20. package/dist/esm/components/CodeBlock/package.json +1 -1
  21. package/dist/esm/components/DataList/package.json +1 -1
  22. package/dist/esm/components/DatePicker/package.json +1 -1
  23. package/dist/esm/components/DescriptionList/package.json +1 -1
  24. package/dist/esm/components/Divider/package.json +1 -1
  25. package/dist/esm/components/DragDrop/package.json +1 -1
  26. package/dist/esm/components/Drawer/package.json +1 -1
  27. package/dist/esm/components/Dropdown/package.json +1 -1
  28. package/dist/esm/components/DualListSelector/package.json +1 -1
  29. package/dist/esm/components/EmptyState/package.json +1 -1
  30. package/dist/esm/components/ExpandableSection/package.json +1 -1
  31. package/dist/esm/components/FileUpload/package.json +1 -1
  32. package/dist/esm/components/Form/package.json +1 -1
  33. package/dist/esm/components/FormSelect/package.json +1 -1
  34. package/dist/esm/components/HelperText/package.json +1 -1
  35. package/dist/esm/components/Hint/package.json +1 -1
  36. package/dist/esm/components/Icon/package.json +1 -1
  37. package/dist/esm/components/InputGroup/package.json +1 -1
  38. package/dist/esm/components/JumpLinks/package.json +1 -1
  39. package/dist/esm/components/Label/package.json +1 -1
  40. package/dist/esm/components/List/package.json +1 -1
  41. package/dist/esm/components/LoginPage/package.json +1 -1
  42. package/dist/esm/components/Masthead/package.json +1 -1
  43. package/dist/esm/components/Menu/package.json +1 -1
  44. package/dist/esm/components/MenuToggle/package.json +1 -1
  45. package/dist/esm/components/Modal/package.json +1 -1
  46. package/dist/esm/components/MultipleFileUpload/package.json +1 -1
  47. package/dist/esm/components/Nav/package.json +1 -1
  48. package/dist/esm/components/NotificationBadge/package.json +1 -1
  49. package/dist/esm/components/NotificationDrawer/package.json +1 -1
  50. package/dist/esm/components/NumberInput/package.json +1 -1
  51. package/dist/esm/components/OverflowMenu/package.json +1 -1
  52. package/dist/esm/components/Page/package.json +1 -1
  53. package/dist/esm/components/Pagination/Navigation.d.ts +1 -1
  54. package/dist/esm/components/Pagination/Navigation.d.ts.map +1 -1
  55. package/dist/esm/components/Pagination/Navigation.js +4 -3
  56. package/dist/esm/components/Pagination/Navigation.js.map +1 -1
  57. package/dist/esm/components/Pagination/package.json +1 -1
  58. package/dist/esm/components/Panel/package.json +1 -1
  59. package/dist/esm/components/Popover/Popover.js +1 -1
  60. package/dist/esm/components/Popover/Popover.js.map +1 -1
  61. package/dist/esm/components/Popover/package.json +1 -1
  62. package/dist/esm/components/Progress/package.json +1 -1
  63. package/dist/esm/components/ProgressStepper/package.json +1 -1
  64. package/dist/esm/components/Radio/package.json +1 -1
  65. package/dist/esm/components/SearchInput/package.json +1 -1
  66. package/dist/esm/components/Select/package.json +1 -1
  67. package/dist/esm/components/Sidebar/package.json +1 -1
  68. package/dist/esm/components/SimpleList/package.json +1 -1
  69. package/dist/esm/components/Skeleton/package.json +1 -1
  70. package/dist/esm/components/SkipToContent/package.json +1 -1
  71. package/dist/esm/components/Slider/package.json +1 -1
  72. package/dist/esm/components/Spinner/package.json +1 -1
  73. package/dist/esm/components/Switch/package.json +1 -1
  74. package/dist/esm/components/Tabs/package.json +1 -1
  75. package/dist/esm/components/Text/package.json +1 -1
  76. package/dist/esm/components/TextArea/package.json +1 -1
  77. package/dist/esm/components/TextInput/package.json +1 -1
  78. package/dist/esm/components/TextInputGroup/package.json +1 -1
  79. package/dist/esm/components/Tile/package.json +1 -1
  80. package/dist/esm/components/TimePicker/package.json +1 -1
  81. package/dist/esm/components/Timestamp/package.json +1 -1
  82. package/dist/esm/components/Title/package.json +1 -1
  83. package/dist/esm/components/ToggleGroup/package.json +1 -1
  84. package/dist/esm/components/Toolbar/ToolbarGroup.d.ts +2 -0
  85. package/dist/esm/components/Toolbar/ToolbarGroup.d.ts.map +1 -1
  86. package/dist/esm/components/Toolbar/ToolbarGroup.js +2 -2
  87. package/dist/esm/components/Toolbar/ToolbarGroup.js.map +1 -1
  88. package/dist/esm/components/Toolbar/ToolbarItem.d.ts +2 -0
  89. package/dist/esm/components/Toolbar/ToolbarItem.d.ts.map +1 -1
  90. package/dist/esm/components/Toolbar/ToolbarItem.js +2 -2
  91. package/dist/esm/components/Toolbar/ToolbarItem.js.map +1 -1
  92. package/dist/esm/components/Toolbar/package.json +1 -1
  93. package/dist/esm/components/Tooltip/package.json +1 -1
  94. package/dist/esm/components/TreeView/package.json +1 -1
  95. package/dist/esm/components/Truncate/package.json +1 -1
  96. package/dist/esm/components/Wizard/hooks/package.json +1 -1
  97. package/dist/esm/components/Wizard/package.json +1 -1
  98. package/dist/esm/components/package.json +1 -1
  99. package/dist/esm/deprecated/components/ApplicationLauncher/package.json +1 -1
  100. package/dist/esm/deprecated/components/ContextSelector/package.json +1 -1
  101. package/dist/esm/deprecated/components/Dropdown/package.json +1 -1
  102. package/dist/esm/deprecated/components/OptionsMenu/package.json +1 -1
  103. package/dist/esm/deprecated/components/PageHeader/package.json +1 -1
  104. package/dist/esm/deprecated/components/Select/package.json +1 -1
  105. package/dist/esm/deprecated/components/Wizard/package.json +1 -1
  106. package/dist/esm/deprecated/components/package.json +1 -1
  107. package/dist/esm/deprecated/package.json +1 -1
  108. package/dist/esm/helpers/Popper/thirdparty/popper-core/package.json +1 -1
  109. package/dist/esm/helpers/package.json +1 -1
  110. package/dist/esm/layouts/Bullseye/package.json +1 -1
  111. package/dist/esm/layouts/Flex/package.json +1 -1
  112. package/dist/esm/layouts/Gallery/package.json +1 -1
  113. package/dist/esm/layouts/Grid/package.json +1 -1
  114. package/dist/esm/layouts/Level/package.json +1 -1
  115. package/dist/esm/layouts/Split/package.json +1 -1
  116. package/dist/esm/layouts/Stack/package.json +1 -1
  117. package/dist/esm/layouts/package.json +1 -1
  118. package/dist/esm/next/components/package.json +1 -1
  119. package/dist/esm/next/package.json +1 -1
  120. package/dist/esm/package.json +1 -1
  121. package/dist/js/components/AboutModal/package.json +1 -1
  122. package/dist/js/components/Accordion/package.json +1 -1
  123. package/dist/js/components/ActionList/package.json +1 -1
  124. package/dist/js/components/Alert/package.json +1 -1
  125. package/dist/js/components/Avatar/package.json +1 -1
  126. package/dist/js/components/BackToTop/package.json +1 -1
  127. package/dist/js/components/Backdrop/package.json +1 -1
  128. package/dist/js/components/BackgroundImage/package.json +1 -1
  129. package/dist/js/components/Badge/package.json +1 -1
  130. package/dist/js/components/Banner/package.json +1 -1
  131. package/dist/js/components/Brand/package.json +1 -1
  132. package/dist/js/components/Breadcrumb/package.json +1 -1
  133. package/dist/js/components/Button/package.json +1 -1
  134. package/dist/js/components/CalendarMonth/package.json +1 -1
  135. package/dist/js/components/Card/package.json +1 -1
  136. package/dist/js/components/Checkbox/package.json +1 -1
  137. package/dist/js/components/Chip/package.json +1 -1
  138. package/dist/js/components/ClipboardCopy/package.json +1 -1
  139. package/dist/js/components/CodeBlock/package.json +1 -1
  140. package/dist/js/components/DataList/package.json +1 -1
  141. package/dist/js/components/DatePicker/package.json +1 -1
  142. package/dist/js/components/DescriptionList/package.json +1 -1
  143. package/dist/js/components/Divider/package.json +1 -1
  144. package/dist/js/components/DragDrop/package.json +1 -1
  145. package/dist/js/components/Drawer/package.json +1 -1
  146. package/dist/js/components/Dropdown/package.json +1 -1
  147. package/dist/js/components/DualListSelector/package.json +1 -1
  148. package/dist/js/components/EmptyState/package.json +1 -1
  149. package/dist/js/components/ExpandableSection/package.json +1 -1
  150. package/dist/js/components/FileUpload/package.json +1 -1
  151. package/dist/js/components/Form/package.json +1 -1
  152. package/dist/js/components/FormSelect/package.json +1 -1
  153. package/dist/js/components/HelperText/package.json +1 -1
  154. package/dist/js/components/Hint/package.json +1 -1
  155. package/dist/js/components/Icon/package.json +1 -1
  156. package/dist/js/components/InputGroup/package.json +1 -1
  157. package/dist/js/components/JumpLinks/package.json +1 -1
  158. package/dist/js/components/Label/package.json +1 -1
  159. package/dist/js/components/List/package.json +1 -1
  160. package/dist/js/components/LoginPage/package.json +1 -1
  161. package/dist/js/components/Masthead/package.json +1 -1
  162. package/dist/js/components/Menu/package.json +1 -1
  163. package/dist/js/components/MenuToggle/package.json +1 -1
  164. package/dist/js/components/Modal/package.json +1 -1
  165. package/dist/js/components/MultipleFileUpload/package.json +1 -1
  166. package/dist/js/components/Nav/package.json +1 -1
  167. package/dist/js/components/NotificationBadge/package.json +1 -1
  168. package/dist/js/components/NotificationDrawer/package.json +1 -1
  169. package/dist/js/components/NumberInput/package.json +1 -1
  170. package/dist/js/components/OverflowMenu/package.json +1 -1
  171. package/dist/js/components/Page/package.json +1 -1
  172. package/dist/js/components/Pagination/Navigation.d.ts +1 -1
  173. package/dist/js/components/Pagination/Navigation.d.ts.map +1 -1
  174. package/dist/js/components/Pagination/Navigation.js +4 -3
  175. package/dist/js/components/Pagination/Navigation.js.map +1 -1
  176. package/dist/js/components/Pagination/package.json +1 -1
  177. package/dist/js/components/Panel/package.json +1 -1
  178. package/dist/js/components/Popover/Popover.js +1 -1
  179. package/dist/js/components/Popover/Popover.js.map +1 -1
  180. package/dist/js/components/Popover/package.json +1 -1
  181. package/dist/js/components/Progress/package.json +1 -1
  182. package/dist/js/components/ProgressStepper/package.json +1 -1
  183. package/dist/js/components/Radio/package.json +1 -1
  184. package/dist/js/components/SearchInput/package.json +1 -1
  185. package/dist/js/components/Select/package.json +1 -1
  186. package/dist/js/components/Sidebar/package.json +1 -1
  187. package/dist/js/components/SimpleList/package.json +1 -1
  188. package/dist/js/components/Skeleton/package.json +1 -1
  189. package/dist/js/components/SkipToContent/package.json +1 -1
  190. package/dist/js/components/Slider/package.json +1 -1
  191. package/dist/js/components/Spinner/package.json +1 -1
  192. package/dist/js/components/Switch/package.json +1 -1
  193. package/dist/js/components/Tabs/package.json +1 -1
  194. package/dist/js/components/Text/package.json +1 -1
  195. package/dist/js/components/TextArea/package.json +1 -1
  196. package/dist/js/components/TextInput/package.json +1 -1
  197. package/dist/js/components/TextInputGroup/package.json +1 -1
  198. package/dist/js/components/Tile/package.json +1 -1
  199. package/dist/js/components/TimePicker/package.json +1 -1
  200. package/dist/js/components/Timestamp/package.json +1 -1
  201. package/dist/js/components/Title/package.json +1 -1
  202. package/dist/js/components/ToggleGroup/package.json +1 -1
  203. package/dist/js/components/Toolbar/ToolbarGroup.d.ts +2 -0
  204. package/dist/js/components/Toolbar/ToolbarGroup.d.ts.map +1 -1
  205. package/dist/js/components/Toolbar/ToolbarGroup.js +2 -2
  206. package/dist/js/components/Toolbar/ToolbarGroup.js.map +1 -1
  207. package/dist/js/components/Toolbar/ToolbarItem.d.ts +2 -0
  208. package/dist/js/components/Toolbar/ToolbarItem.d.ts.map +1 -1
  209. package/dist/js/components/Toolbar/ToolbarItem.js +2 -2
  210. package/dist/js/components/Toolbar/ToolbarItem.js.map +1 -1
  211. package/dist/js/components/Toolbar/package.json +1 -1
  212. package/dist/js/components/Tooltip/package.json +1 -1
  213. package/dist/js/components/TreeView/package.json +1 -1
  214. package/dist/js/components/Truncate/package.json +1 -1
  215. package/dist/js/components/Wizard/hooks/package.json +1 -1
  216. package/dist/js/components/Wizard/package.json +1 -1
  217. package/dist/js/components/package.json +1 -1
  218. package/dist/js/deprecated/components/ApplicationLauncher/package.json +1 -1
  219. package/dist/js/deprecated/components/ContextSelector/package.json +1 -1
  220. package/dist/js/deprecated/components/Dropdown/package.json +1 -1
  221. package/dist/js/deprecated/components/OptionsMenu/package.json +1 -1
  222. package/dist/js/deprecated/components/PageHeader/package.json +1 -1
  223. package/dist/js/deprecated/components/Select/package.json +1 -1
  224. package/dist/js/deprecated/components/Wizard/package.json +1 -1
  225. package/dist/js/deprecated/components/package.json +1 -1
  226. package/dist/js/deprecated/package.json +1 -1
  227. package/dist/js/helpers/Popper/thirdparty/popper-core/package.json +1 -1
  228. package/dist/js/helpers/package.json +1 -1
  229. package/dist/js/layouts/Bullseye/package.json +1 -1
  230. package/dist/js/layouts/Flex/package.json +1 -1
  231. package/dist/js/layouts/Gallery/package.json +1 -1
  232. package/dist/js/layouts/Grid/package.json +1 -1
  233. package/dist/js/layouts/Level/package.json +1 -1
  234. package/dist/js/layouts/Split/package.json +1 -1
  235. package/dist/js/layouts/Stack/package.json +1 -1
  236. package/dist/js/layouts/package.json +1 -1
  237. package/dist/js/next/components/package.json +1 -1
  238. package/dist/js/next/package.json +1 -1
  239. package/dist/js/package.json +1 -1
  240. package/dist/umd/react-core.min.js +1 -1
  241. package/package.json +2 -2
  242. package/src/components/Nav/examples/NavDrilldown.tsx +11 -8
  243. package/src/components/Page/examples/Page.md +0 -4
  244. package/src/components/Pagination/Navigation.tsx +7 -7
  245. package/src/components/Pagination/__tests__/Generated/__snapshots__/Navigation.test.tsx.snap +14 -7
  246. package/src/components/Pagination/__tests__/__snapshots__/Pagination.test.tsx.snap +286 -146
  247. package/src/components/Popover/Popover.tsx +1 -1
  248. package/src/components/Popover/examples/Popover.md +1 -4
  249. package/src/components/Toolbar/ToolbarGroup.tsx +4 -0
  250. package/src/components/Toolbar/ToolbarItem.tsx +4 -0
  251. package/src/components/Toolbar/__tests__/ToolbarGroup.test.tsx +10 -0
  252. package/src/components/Toolbar/__tests__/ToolbarItem.test.tsx +6 -1
  253. package/src/demos/Nav.md +381 -234
  254. package/src/demos/examples/Nav/NavDrilldown.tsx +1 -1
package/src/demos/Nav.md CHANGED
@@ -3,20 +3,14 @@ id: Navigation
3
3
  section: components
4
4
  ---
5
5
 
6
- import {
7
- PageHeader,
8
- PageHeaderTools,
9
- PageHeaderToolsGroup,
10
- PageHeaderToolsItem
11
- } from '@patternfly/react-core/deprecated';
12
-
13
6
  import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/examples/DashboardWrapper';
14
7
  import DashboardHeader from '@patternfly/react-core/src/demos/examples/DashboardHeader';
15
8
  import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
16
9
  import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
17
10
  import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
18
11
  import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
19
- import imgBrand from '@patternfly/react-core/src/components/Brand/examples/pfLogo.svg';
12
+ import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
13
+ import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
20
14
  import imgAvatar from '@patternfly/react-core/src/components/Avatar/examples/avatarImg.svg';
21
15
  import imgColorBrand from '@patternfly/react-core/src/demos/examples/pfColorLogo.svg';
22
16
 
@@ -387,6 +381,10 @@ import {
387
381
  DropdownList,
388
382
  Gallery,
389
383
  GalleryItem,
384
+ Masthead,
385
+ MastheadMain,
386
+ MastheadBrand,
387
+ MastheadContent,
390
388
  MenuToggle,
391
389
  Nav,
392
390
  NavItem,
@@ -396,21 +394,19 @@ import {
396
394
  PageSectionVariants,
397
395
  SkipToContent,
398
396
  TextContent,
399
- Text
397
+ Text,
398
+ Toolbar,
399
+ ToolbarContent,
400
+ ToolbarGroup,
401
+ ToolbarItem
400
402
  } from '@patternfly/react-core';
401
-
402
- import {
403
- PageHeader,
404
- PageHeaderTools,
405
- PageHeaderToolsGroup,
406
- PageHeaderToolsItem
407
- } from '@patternfly/react-core/deprecated';
408
403
  import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/examples/DashboardWrapper';
409
404
  import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
410
405
  import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
411
406
  import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
412
407
  import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
413
- import imgBrand from '@patternfly/react-core/src/components/Brand/examples/pfLogo.svg';
408
+ import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
409
+ import imgColorBrand from '@patternfly/react-core/src/demos/examples/pfColorLogo.svg';
414
410
  import imgAvatar from '@patternfly/react-core/src/components/Avatar/examples/avatarImg.svg';
415
411
 
416
412
  class PageLayoutHorizontalNav extends React.Component {
@@ -419,6 +415,7 @@ class PageLayoutHorizontalNav extends React.Component {
419
415
  this.state = {
420
416
  isDropdownOpen: false,
421
417
  isKebabDropdownOpen: false,
418
+ isFullKebabDropdownOpen: false,
422
419
  activeItem: 0
423
420
  };
424
421
 
@@ -446,6 +443,12 @@ class PageLayoutHorizontalNav extends React.Component {
446
443
  });
447
444
  };
448
445
 
446
+ this.onFullKebabToggle = () => {
447
+ this.setState((prevState) => ({
448
+ isFullKebabDropdownOpen: !prevState.isFullKebabDropdownOpen
449
+ }));
450
+ };
451
+
449
452
  this.onNavSelect = (_event, result) => {
450
453
  this.setState({
451
454
  activeItem: result.itemId
@@ -454,7 +457,7 @@ class PageLayoutHorizontalNav extends React.Component {
454
457
  }
455
458
 
456
459
  render() {
457
- const { isDropdownOpen, isKebabDropdownOpen, activeItem } = this.state;
460
+ const { isDropdownOpen, isKebabDropdownOpen, isFullKebabDropdownOpen, activeItem } = this.state;
458
461
 
459
462
  const PageNav = (
460
463
  <Nav onSelect={this.onNavSelect} aria-label="Nav" variant="horizontal">
@@ -494,54 +497,82 @@ class PageLayoutHorizontalNav extends React.Component {
494
497
  <DropdownItem key="group 2 logout">Logout</DropdownItem>
495
498
  </>
496
499
  );
497
- const headerTools = (
498
- <PageHeaderTools>
499
- <PageHeaderToolsGroup
500
- visibility={{
501
- default: 'hidden',
502
- lg: 'visible'
503
- }} /** the settings and help icon buttons are only visible on desktop sizes and replaced by a kebab dropdown for other sizes */
504
- >
505
- <PageHeaderToolsItem>
506
- <Button aria-label="Settings actions" variant={ButtonVariant.plain}>
507
- <CogIcon />
508
- </Button>
509
- </PageHeaderToolsItem>
510
- <PageHeaderToolsItem>
511
- <Button aria-label="Help actions" variant={ButtonVariant.plain}>
512
- <QuestionCircleIcon />
513
- </Button>
514
- </PageHeaderToolsItem>
515
- </PageHeaderToolsGroup>
516
- <PageHeaderToolsGroup>
517
- <PageHeaderToolsItem
518
- visibility={{
519
- lg: 'hidden'
520
- }} /** this kebab dropdown replaces the icon buttons and is hidden for desktop sizes */
521
- >
522
- <Dropdown
523
- isOpen={isKebabDropdownOpen}
524
- onSelect={this.onKebabDropdownSelect}
525
- onOpenChange={(isOpen) => this.setState({ isKebabDropdownOpen: isOpen })}
526
- popperProps={{ position: 'right' }}
527
- toggle={(toggleRef) => (
528
- <MenuToggle
529
- ref={toggleRef}
530
- isExpanded={isKebabDropdownOpen}
531
- onClick={this.onKebabDropdownToggle}
532
- variant="plain"
533
- aria-label="Settings and help"
534
- >
535
- <EllipsisVIcon aria-hidden="true" />
536
- </MenuToggle>
537
- )}
538
- >
539
- <DropdownList>{kebabDropdownItems}</DropdownList>
540
- </Dropdown>
541
- </PageHeaderToolsItem>
542
- <PageHeaderToolsItem
543
- visibility={{ default: 'hidden', md: 'visible' }} /** this user dropdown is hidden on mobile sizes */
500
+
501
+ const headerToolbar = (
502
+ <Toolbar id="toolbar" isFullHeight isStatic>
503
+ <ToolbarContent>
504
+ <ToolbarItem isOverflowContainer>
505
+ {PageNav}
506
+ </ToolbarItem>
507
+ <ToolbarGroup
508
+ variant="icon-button-group"
509
+ align={{ default: 'alignRight' }}
510
+ spacer={{ default: 'spacerNone', md: 'spacerMd' }}
544
511
  >
512
+ <ToolbarItem>
513
+ <Button
514
+ aria-label="Notifications"
515
+ variant={ButtonVariant.plain}
516
+ icon={<BellIcon />}
517
+ onClick={() => {}}
518
+ />
519
+ </ToolbarItem>
520
+ <ToolbarGroup variant="icon-button-group" visibility={{ default: 'hidden', lg: 'visible' }}>
521
+ <ToolbarItem>
522
+ <Button aria-label="Settings" variant={ButtonVariant.plain} icon={<CogIcon />} />
523
+ </ToolbarItem>
524
+ <ToolbarItem>
525
+ <Button aria-label="Help" variant={ButtonVariant.plain} icon={<QuestionCircleIcon />} />
526
+ </ToolbarItem>
527
+ </ToolbarGroup>
528
+ <ToolbarItem visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}>
529
+ <Dropdown
530
+ isOpen={isKebabDropdownOpen}
531
+ onSelect={this.onKebabDropdownSelect}
532
+ onOpenChange={(isOpen) => this.setState({ isKebabDropdownOpen: isOpen })}
533
+ popperProps={{ position: 'right' }}
534
+ toggle={(toggleRef) => (
535
+ <MenuToggle
536
+ ref={toggleRef}
537
+ isExpanded={isKebabDropdownOpen}
538
+ onClick={this.onKebabDropdownToggle}
539
+ variant="plain"
540
+ aria-label="Settings and help"
541
+ >
542
+ <EllipsisVIcon aria-hidden="true" />
543
+ </MenuToggle>
544
+ )}
545
+ >
546
+ <DropdownList>{kebabDropdownItems}</DropdownList>
547
+ </Dropdown>
548
+ </ToolbarItem>
549
+ <ToolbarItem visibility={{ md: 'hidden' }}>
550
+ <Dropdown
551
+ isOpen={isFullKebabDropdownOpen}
552
+ onSelect={this.onFullKebabSelect}
553
+ onOpenChange={(isOpen) => this.setState({ isFullKebabDropdownOpen: isOpen })}
554
+ popperProps={{ position: 'right' }}
555
+ toggle={(toggleRef) => (
556
+ <MenuToggle
557
+ ref={toggleRef}
558
+ isExpanded={isFullKebabDropdownOpen}
559
+ onClick={this.onFullKebabToggle}
560
+ variant="plain"
561
+ aria-label="Toolbar menu"
562
+ >
563
+ <EllipsisVIcon aria-hidden="true" />
564
+ </MenuToggle>
565
+ )}
566
+ >
567
+ <DropdownGroup key="group 2" aria-label="User actions">
568
+ <DropdownList>{userDropdownItems}</DropdownList>
569
+ </DropdownGroup>
570
+ <Divider />
571
+ <DropdownList>{kebabDropdownItems}</DropdownList>
572
+ </Dropdown>
573
+ </ToolbarItem>
574
+ </ToolbarGroup>
575
+ <ToolbarItem visibility={{ default: 'hidden', md: 'visible' }}>
545
576
  <Dropdown
546
577
  isOpen={isDropdownOpen}
547
578
  onSelect={this.onDropdownSelect}
@@ -555,19 +586,32 @@ class PageLayoutHorizontalNav extends React.Component {
555
586
  icon={<Avatar src={imgAvatar} alt="" />}
556
587
  isFullHeight
557
588
  >
558
- John Smith
589
+ Ned Username
559
590
  </MenuToggle>
560
591
  )}
561
592
  >
562
593
  <DropdownList>{userDropdownItems}</DropdownList>
563
594
  </Dropdown>
564
- </PageHeaderToolsItem>
565
- </PageHeaderToolsGroup>
566
- </PageHeaderTools>
595
+ </ToolbarItem>
596
+ </ToolbarContent>
597
+ </Toolbar>
567
598
  );
568
-
569
599
  const Header = (
570
- <PageHeader logo={<Brand src={imgBrand} alt="Patternfly Logo" />} headerTools={headerTools} topNav={PageNav} />
600
+ <Masthead>
601
+ <MastheadMain>
602
+ <MastheadBrand>
603
+ <Brand
604
+ widths={{ default: '180px', md: '180px', '2xl': '220px' }}
605
+ src={imgColorBrand}
606
+ alt="Fallback patternFly default logo"
607
+ >
608
+ <source media="(min-width: 768px)" srcSet={imgColorBrand} />
609
+ <source srcSet={imgColorBrand} />
610
+ </Brand>
611
+ </MastheadBrand>
612
+ </MastheadMain>
613
+ <MastheadContent>{headerToolbar}</MastheadContent>
614
+ </Masthead>
571
615
  );
572
616
 
573
617
  const pageId = 'main-content-page-layout-horizontal-nav';
@@ -773,6 +817,10 @@ import {
773
817
  Gallery,
774
818
  GalleryItem,
775
819
  MenuToggle,
820
+ Masthead,
821
+ MastheadMain,
822
+ MastheadBrand,
823
+ MastheadContent,
776
824
  Nav,
777
825
  NavItem,
778
826
  NavList,
@@ -782,18 +830,18 @@ import {
782
830
  PageSectionTypes,
783
831
  SkipToContent,
784
832
  TextContent,
785
- Text
786
- } from '@patternfly/react-core';
787
- import {
788
- PageHeader,
789
- PageHeaderTools,
790
- PageHeaderToolsItem,
791
- PageHeaderToolsGroup
792
- } from '@patternfly/react-core/deprecated';
833
+ Text,
834
+ Toolbar,
835
+ ToolbarContent,
836
+ ToolbarGroup,
837
+ ToolbarItem
838
+ } from '@patternfly/react-core';
793
839
  import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/examples/DashboardWrapper';
794
840
  import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
795
841
  import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
796
842
  import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
843
+ import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
844
+ import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
797
845
  import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
798
846
  import imgColorBrand from '@patternfly/react-core/src/demos/examples/pfColorLogo.svg';
799
847
  import imgAvatar from '@patternfly/react-core/src/components/Avatar/examples/avatarImg.svg';
@@ -804,6 +852,7 @@ class HorizontalNavWithSubnav extends React.Component {
804
852
  this.state = {
805
853
  isDropdownOpen: false,
806
854
  isKebabDropdownOpen: false,
855
+ isFullKebabDropdownOpen: false,
807
856
  activeItem: 0,
808
857
  activeSubNavItem: 7
809
858
  };
@@ -832,6 +881,12 @@ class HorizontalNavWithSubnav extends React.Component {
832
881
  });
833
882
  };
834
883
 
884
+ this.onFullKebabToggle = () => {
885
+ this.setState((prevState) => ({
886
+ isFullKebabDropdownOpen: !prevState.isFullKebabDropdownOpen
887
+ }));
888
+ };
889
+
835
890
  this.onNavSelect = (_event, result) => {
836
891
  this.setState({
837
892
  activeItem: result.itemId
@@ -846,7 +901,7 @@ class HorizontalNavWithSubnav extends React.Component {
846
901
  }
847
902
 
848
903
  render() {
849
- const { isDropdownOpen, isKebabDropdownOpen, activeItem, activeSubNavItem } = this.state;
904
+ const { isDropdownOpen, isKebabDropdownOpen, isFullKebabDropdownOpen, activeItem, activeSubNavItem } = this.state;
850
905
 
851
906
  const PageNav = (
852
907
  <Nav onSelect={this.onNavSelect} aria-label="Nav" variant="horizontal">
@@ -892,90 +947,8 @@ class HorizontalNavWithSubnav extends React.Component {
892
947
  <DropdownItem key="group 2 logout">Logout</DropdownItem>
893
948
  </>
894
949
  );
895
- const headerTools = (
896
- <PageHeaderTools>
897
- <PageHeaderToolsGroup
898
- visibility={{
899
- default: 'hidden',
900
- lg: 'visible'
901
- }} /** the settings and help icon buttons are only visible on desktop sizes and replaced by a kebab dropdown for other sizes */
902
- >
903
- <PageHeaderToolsItem>
904
- <Button aria-label="Settings actions" variant={ButtonVariant.plain}>
905
- <CogIcon />
906
- </Button>
907
- </PageHeaderToolsItem>
908
- <PageHeaderToolsItem>
909
- <Button aria-label="Help actions" variant={ButtonVariant.plain}>
910
- <QuestionCircleIcon />
911
- </Button>
912
- </PageHeaderToolsItem>
913
- </PageHeaderToolsGroup>
914
- <PageHeaderToolsGroup>
915
- <PageHeaderToolsItem
916
- visibility={{
917
- lg: 'hidden'
918
- }} /** this kebab dropdown replaces the icon buttons and is hidden for desktop sizes */
919
- >
920
- <Dropdown
921
- isOpen={isKebabDropdownOpen}
922
- onSelect={this.onKebabDropdownSelect}
923
- onOpenChange={(isOpen) => this.setState({ isKebabDropdownOpen: isOpen })}
924
- popperProps={{ position: 'right' }}
925
- toggle={(toggleRef) => (
926
- <MenuToggle
927
- ref={toggleRef}
928
- isExpanded={isKebabDropdownOpen}
929
- onClick={this.onKebabDropdownToggle}
930
- variant="plain"
931
- aria-label="Settings and help"
932
- >
933
- <EllipsisVIcon aria-hidden="true" />
934
- </MenuToggle>
935
- )}
936
- >
937
- <DropdownList>{kebabDropdownItems}</DropdownList>
938
- </Dropdown>
939
- </PageHeaderToolsItem>
940
- <PageHeaderToolsItem
941
- visibility={{ default: 'hidden', md: 'visible' }} /** this user dropdown is hidden on mobile sizes */
942
- >
943
- <Dropdown
944
- isOpen={isDropdownOpen}
945
- onSelect={this.onDropdownSelect}
946
- onOpenChange={(isOpen) => this.setState({ isDropdownOpen: isOpen })}
947
- popperProps={{ position: 'right' }}
948
- toggle={(toggleRef) => (
949
- <MenuToggle
950
- ref={toggleRef}
951
- isExpanded={isDropdownOpen}
952
- onClick={this.onDropdownToggle}
953
- icon={<Avatar src={imgAvatar} alt="" />}
954
- isFullHeight
955
- >
956
- John Smith
957
- </MenuToggle>
958
- )}
959
- >
960
- <DropdownList>{userDropdownItems}</DropdownList>
961
- </Dropdown>
962
- </PageHeaderToolsItem>
963
- </PageHeaderToolsGroup>
964
- </PageHeaderTools>
965
- );
966
-
967
- const Header = (
968
- <PageHeader
969
- logo={<Brand src={imgColorBrand} alt="Patternfly Logo" />}
970
- headerTools={headerTools}
971
- topNav={PageNav}
972
- />
973
- );
974
-
975
- const pageId = 'main-content-page-layout-horizontal-nav';
976
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
977
950
 
978
- const SubNav = (
951
+ const SubNav = (
979
952
  <Nav onSelect={this.onSubNavSelect} aria-label="Nav" variant="horizontal-subnav">
980
953
  <NavList>
981
954
  <NavItem itemId={7} isActive={activeSubNavItem === 7} to="#">
@@ -1003,6 +976,131 @@ class HorizontalNavWithSubnav extends React.Component {
1003
976
  </Nav>
1004
977
  );
1005
978
 
979
+ const headerToolbar = (
980
+ <Toolbar id="toolbar" isFullHeight isStatic>
981
+ <ToolbarContent>
982
+ <ToolbarItem isOverflowContainer>
983
+ {PageNav}
984
+ </ToolbarItem>
985
+ <ToolbarGroup
986
+ variant="icon-button-group"
987
+ align={{ default: 'alignRight' }}
988
+ spacer={{ default: 'spacerNone', md: 'spacerMd' }}
989
+ >
990
+ <ToolbarItem>
991
+ <Button
992
+ aria-label="Notifications"
993
+ variant={ButtonVariant.plain}
994
+ icon={<BellIcon />}
995
+ onClick={() => {}}
996
+ />
997
+ </ToolbarItem>
998
+ <ToolbarGroup variant="icon-button-group" visibility={{ default: 'hidden', lg: 'visible' }}>
999
+ <ToolbarItem>
1000
+ <Button aria-label="Settings" variant={ButtonVariant.plain} icon={<CogIcon />} />
1001
+ </ToolbarItem>
1002
+ <ToolbarItem>
1003
+ <Button aria-label="Help" variant={ButtonVariant.plain} icon={<QuestionCircleIcon />} />
1004
+ </ToolbarItem>
1005
+ </ToolbarGroup>
1006
+ <ToolbarItem visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}>
1007
+ <Dropdown
1008
+ isOpen={isKebabDropdownOpen}
1009
+ onSelect={this.onKebabDropdownSelect}
1010
+ onOpenChange={(isOpen) => this.setState({ isKebabDropdownOpen: isOpen })}
1011
+ popperProps={{ position: 'right' }}
1012
+ toggle={(toggleRef) => (
1013
+ <MenuToggle
1014
+ ref={toggleRef}
1015
+ isExpanded={isKebabDropdownOpen}
1016
+ onClick={this.onKebabDropdownToggle}
1017
+ variant="plain"
1018
+ aria-label="Settings and help"
1019
+ >
1020
+ <EllipsisVIcon aria-hidden="true" />
1021
+ </MenuToggle>
1022
+ )}
1023
+ >
1024
+ <DropdownList>{kebabDropdownItems}</DropdownList>
1025
+ </Dropdown>
1026
+ </ToolbarItem>
1027
+ <ToolbarItem visibility={{ md: 'hidden' }}>
1028
+ <Dropdown
1029
+ isOpen={isFullKebabDropdownOpen}
1030
+ onSelect={this.onFullKebabSelect}
1031
+ onOpenChange={(isOpen) => this.setState({ isFullKebabDropdownOpen: isOpen })}
1032
+ popperProps={{ position: 'right' }}
1033
+ toggle={(toggleRef) => (
1034
+ <MenuToggle
1035
+ ref={toggleRef}
1036
+ isExpanded={isFullKebabDropdownOpen}
1037
+ onClick={this.onFullKebabToggle}
1038
+ variant="plain"
1039
+ aria-label="Toolbar menu"
1040
+ >
1041
+ <EllipsisVIcon aria-hidden="true" />
1042
+ </MenuToggle>
1043
+ )}
1044
+ >
1045
+ <DropdownGroup key="group 2" aria-label="User actions">
1046
+ <DropdownList>{userDropdownItems}</DropdownList>
1047
+ </DropdownGroup>
1048
+ <Divider />
1049
+ <DropdownList>{kebabDropdownItems}</DropdownList>
1050
+ </Dropdown>
1051
+ </ToolbarItem>
1052
+ </ToolbarGroup>
1053
+ <ToolbarItem visibility={{ default: 'hidden', md: 'visible' }}>
1054
+ <Dropdown
1055
+ isOpen={isDropdownOpen}
1056
+ onSelect={this.onDropdownSelect}
1057
+ onOpenChange={(isOpen) => this.setState({ isDropdownOpen: isOpen })}
1058
+ popperProps={{ position: 'right' }}
1059
+ toggle={(toggleRef) => (
1060
+ <MenuToggle
1061
+ ref={toggleRef}
1062
+ isExpanded={isDropdownOpen}
1063
+ onClick={this.onDropdownToggle}
1064
+ icon={<Avatar src={imgAvatar} alt="" />}
1065
+ isFullHeight
1066
+ >
1067
+ Ned Username
1068
+ </MenuToggle>
1069
+ )}
1070
+ >
1071
+ <DropdownList>{userDropdownItems}</DropdownList>
1072
+ </Dropdown>
1073
+ </ToolbarItem>
1074
+ </ToolbarContent>
1075
+ </Toolbar>
1076
+ );
1077
+ const Header = (
1078
+ <Masthead>
1079
+ <MastheadToggle>
1080
+ <PageToggleButton variant="plain" aria-label="Global navigation">
1081
+ <BarsIcon />
1082
+ </PageToggleButton>
1083
+ </MastheadToggle>
1084
+ <MastheadMain>
1085
+ <MastheadBrand>
1086
+ <Brand
1087
+ widths={{ default: '180px', md: '180px', '2xl': '220px' }}
1088
+ src={imgColorBrand}
1089
+ alt="Fallback patternFly default logo"
1090
+ >
1091
+ <source media="(min-width: 768px)" srcSet={imgColorBrand} />
1092
+ <source srcSet={imgColorBrand} />
1093
+ </Brand>
1094
+ </MastheadBrand>
1095
+ </MastheadMain>
1096
+ <MastheadContent>{headerToolbar}</MastheadContent>
1097
+ </Masthead>
1098
+ );
1099
+
1100
+
1101
+ const pageId = 'main-content-page-layout-horizontal-nav';
1102
+ const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
1103
+
1006
1104
  return (
1007
1105
  <React.Fragment>
1008
1106
  <Page header={Header} skipToContent={PageSkipToContent} mainContainerId={pageId}>
@@ -1039,7 +1137,7 @@ class HorizontalNavWithSubnav extends React.Component {
1039
1137
  }
1040
1138
  ```
1041
1139
 
1042
- ### Legacy tertiary nav
1140
+ ### Tertiary nav (deprecated)
1043
1141
 
1044
1142
  ```js isFullscreen
1045
1143
  import React from 'react';
@@ -1141,7 +1239,7 @@ class PageLayoutTertiaryNav extends React.Component {
1141
1239
  }
1142
1240
  ```
1143
1241
 
1144
- ### Legacy/Light Nav
1242
+ ### Light nav (deprecated)
1145
1243
 
1146
1244
  ```js isFullscreen
1147
1245
  import React from 'react';
@@ -1263,6 +1361,10 @@ import {
1263
1361
  DropdownList,
1264
1362
  Gallery,
1265
1363
  GalleryItem,
1364
+ Masthead,
1365
+ MastheadMain,
1366
+ MastheadBrand,
1367
+ MastheadContent,
1266
1368
  MenuToggle,
1267
1369
  Nav,
1268
1370
  NavItem,
@@ -1274,20 +1376,21 @@ import {
1274
1376
  PageSidebarBody,
1275
1377
  SkipToContent,
1276
1378
  TextContent,
1277
- Text
1379
+ Text,
1380
+ Toolbar,
1381
+ ToolbarContent,
1382
+ ToolbarGroup,
1383
+ ToolbarItem
1278
1384
  } from '@patternfly/react-core';
1279
- import {
1280
- PageHeader,
1281
- PageHeaderTools,
1282
- PageHeaderToolsItem,
1283
- PageHeaderToolsGroup
1284
- } from '@patternfly/react-core/deprecated';
1285
1385
  import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
1286
1386
  import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
1287
1387
  import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
1288
1388
  import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
1289
- import imgBrand from '@patternfly/react-core/src/components/Brand/examples/pfLogo.svg';
1389
+ import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
1390
+ import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
1290
1391
  import imgAvatar from '@patternfly/react-core/src/components/Avatar/examples/avatarImg.svg';
1392
+ import imgColorBrand from '@patternfly/react-core/src/demos/examples/pfColorLogo.svg';
1393
+
1291
1394
 
1292
1395
  class PageLayoutManualNav extends React.Component {
1293
1396
  constructor(props) {
@@ -1295,6 +1398,7 @@ class PageLayoutManualNav extends React.Component {
1295
1398
  this.state = {
1296
1399
  isDropdownOpen: false,
1297
1400
  isKebabDropdownOpen: false,
1401
+ isFullKebabDropdownOpen: false,
1298
1402
  activeItem: 0,
1299
1403
  isMobileView: false,
1300
1404
  isNavOpenDesktop: true,
@@ -1325,6 +1429,12 @@ class PageLayoutManualNav extends React.Component {
1325
1429
  });
1326
1430
  };
1327
1431
 
1432
+ this.onFullKebabToggle = () => {
1433
+ this.setState((prevState) => ({
1434
+ isFullKebabDropdownOpen: !prevState.isFullKebabDropdownOpen
1435
+ }));
1436
+ };
1437
+
1328
1438
  this.onNavSelect = (_event, result) => {
1329
1439
  this.setState({
1330
1440
  activeItem: result.itemId
@@ -1351,7 +1461,7 @@ class PageLayoutManualNav extends React.Component {
1351
1461
  }
1352
1462
 
1353
1463
  render() {
1354
- const { isDropdownOpen, isKebabDropdownOpen, activeItem, isNavOpenDesktop, isNavOpenMobile, isMobileView } =
1464
+ const { isDropdownOpen, isKebabDropdownOpen, isFullKebabDropdownOpen, activeItem, isNavOpenDesktop, isNavOpenMobile, isMobileView } =
1355
1465
  this.state;
1356
1466
 
1357
1467
  const PageNav = (
@@ -1392,54 +1502,79 @@ class PageLayoutManualNav extends React.Component {
1392
1502
  <DropdownItem key="group 2 logout">Logout</DropdownItem>
1393
1503
  </>
1394
1504
  );
1395
- const headerTools = (
1396
- <PageHeaderTools>
1397
- <PageHeaderToolsGroup
1398
- visibility={{
1399
- default: 'hidden',
1400
- lg: 'visible'
1401
- }} /** the settings and help icon buttons are only visible on desktop sizes and replaced by a kebab dropdown for other sizes */
1402
- >
1403
- <PageHeaderToolsItem>
1404
- <Button aria-label="Settings actions" variant={ButtonVariant.plain}>
1405
- <CogIcon />
1406
- </Button>
1407
- </PageHeaderToolsItem>
1408
- <PageHeaderToolsItem>
1409
- <Button aria-label="Help actions" variant={ButtonVariant.plain}>
1410
- <QuestionCircleIcon />
1411
- </Button>
1412
- </PageHeaderToolsItem>
1413
- </PageHeaderToolsGroup>
1414
- <PageHeaderToolsGroup>
1415
- <PageHeaderToolsItem
1416
- visibility={{
1417
- lg: 'hidden'
1418
- }} /** this kebab dropdown replaces the icon buttons and is hidden for desktop sizes */
1419
- >
1420
- <Dropdown
1421
- isOpen={isKebabDropdownOpen}
1422
- onSelect={this.onKebabDropdownSelect}
1423
- onOpenChange={(isOpen) => this.setState({ isKebabDropdownOpen: isOpen })}
1424
- popperProps={{ position: 'right' }}
1425
- toggle={(toggleRef) => (
1426
- <MenuToggle
1427
- ref={toggleRef}
1428
- isExpanded={isKebabDropdownOpen}
1429
- onClick={this.onKebabDropdownToggle}
1430
- variant="plain"
1431
- aria-label="Settings and help"
1432
- >
1433
- <EllipsisVIcon aria-hidden="true" />
1434
- </MenuToggle>
1435
- )}
1436
- >
1437
- <DropdownList>{kebabDropdownItems}</DropdownList>
1438
- </Dropdown>
1439
- </PageHeaderToolsItem>
1440
- <PageHeaderToolsItem
1441
- visibility={{ default: 'hidden', md: 'visible' }} /** this user dropdown is hidden on mobile sizes */
1505
+
1506
+ const headerToolbar = (
1507
+ <Toolbar id="toolbar" isFullHeight isStatic>
1508
+ <ToolbarContent>
1509
+ <ToolbarGroup
1510
+ variant="icon-button-group"
1511
+ align={{ default: 'alignRight' }}
1512
+ spacer={{ default: 'spacerNone', md: 'spacerMd' }}
1442
1513
  >
1514
+ <ToolbarItem>
1515
+ <Button
1516
+ aria-label="Notifications"
1517
+ variant={ButtonVariant.plain}
1518
+ icon={<BellIcon />}
1519
+ onClick={() => {}}
1520
+ />
1521
+ </ToolbarItem>
1522
+ <ToolbarGroup variant="icon-button-group" visibility={{ default: 'hidden', lg: 'visible' }}>
1523
+ <ToolbarItem>
1524
+ <Button aria-label="Settings" variant={ButtonVariant.plain} icon={<CogIcon />} />
1525
+ </ToolbarItem>
1526
+ <ToolbarItem>
1527
+ <Button aria-label="Help" variant={ButtonVariant.plain} icon={<QuestionCircleIcon />} />
1528
+ </ToolbarItem>
1529
+ </ToolbarGroup>
1530
+ <ToolbarItem visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}>
1531
+ <Dropdown
1532
+ isOpen={isKebabDropdownOpen}
1533
+ onSelect={this.onKebabDropdownSelect}
1534
+ onOpenChange={(isOpen) => this.setState({ isKebabDropdownOpen: isOpen })}
1535
+ popperProps={{ position: 'right' }}
1536
+ toggle={(toggleRef) => (
1537
+ <MenuToggle
1538
+ ref={toggleRef}
1539
+ isExpanded={isKebabDropdownOpen}
1540
+ onClick={this.onKebabDropdownToggle}
1541
+ variant="plain"
1542
+ aria-label="Settings and help"
1543
+ >
1544
+ <EllipsisVIcon aria-hidden="true" />
1545
+ </MenuToggle>
1546
+ )}
1547
+ >
1548
+ <DropdownList>{kebabDropdownItems}</DropdownList>
1549
+ </Dropdown>
1550
+ </ToolbarItem>
1551
+ <ToolbarItem visibility={{ md: 'hidden' }}>
1552
+ <Dropdown
1553
+ isOpen={isFullKebabDropdownOpen}
1554
+ onSelect={this.onFullKebabSelect}
1555
+ onOpenChange={(isOpen) => this.setState({ isFullKebabDropdownOpen: isOpen })}
1556
+ popperProps={{ position: 'right' }}
1557
+ toggle={(toggleRef) => (
1558
+ <MenuToggle
1559
+ ref={toggleRef}
1560
+ isExpanded={isFullKebabDropdownOpen}
1561
+ onClick={this.onFullKebabToggle}
1562
+ variant="plain"
1563
+ aria-label="Toolbar menu"
1564
+ >
1565
+ <EllipsisVIcon aria-hidden="true" />
1566
+ </MenuToggle>
1567
+ )}
1568
+ >
1569
+ <DropdownGroup key="group 2" aria-label="User actions">
1570
+ <DropdownList>{userDropdownItems}</DropdownList>
1571
+ </DropdownGroup>
1572
+ <Divider />
1573
+ <DropdownList>{kebabDropdownItems}</DropdownList>
1574
+ </Dropdown>
1575
+ </ToolbarItem>
1576
+ </ToolbarGroup>
1577
+ <ToolbarItem visibility={{ default: 'hidden', md: 'visible' }}>
1443
1578
  <Dropdown
1444
1579
  isOpen={isDropdownOpen}
1445
1580
  onSelect={this.onDropdownSelect}
@@ -1453,26 +1588,39 @@ class PageLayoutManualNav extends React.Component {
1453
1588
  icon={<Avatar src={imgAvatar} alt="" />}
1454
1589
  isFullHeight
1455
1590
  >
1456
- John Smith
1591
+ Ned Username
1457
1592
  </MenuToggle>
1458
1593
  )}
1459
1594
  >
1460
1595
  <DropdownList>{userDropdownItems}</DropdownList>
1461
1596
  </Dropdown>
1462
- </PageHeaderToolsItem>
1463
- </PageHeaderToolsGroup>
1464
- </PageHeaderTools>
1597
+ </ToolbarItem>
1598
+ </ToolbarContent>
1599
+ </Toolbar>
1465
1600
  );
1466
-
1467
1601
  const Header = (
1468
- <PageHeader
1469
- logo={<Brand src={imgBrand} alt="Patternfly Logo" />}
1470
- headerTools={headerTools}
1471
- showNavToggle
1472
- onNavToggle={isMobileView ? this.onNavToggleMobile : this.onNavToggleDesktop}
1473
- isNavOpen={isMobileView ? isNavOpenMobile : isNavOpenDesktop}
1474
- />
1602
+ <Masthead>
1603
+ <MastheadToggle>
1604
+ <PageToggleButton variant="plain" aria-label="Global navigation">
1605
+ <BarsIcon />
1606
+ </PageToggleButton>
1607
+ </MastheadToggle>
1608
+ <MastheadMain>
1609
+ <MastheadBrand>
1610
+ <Brand
1611
+ widths={{ default: '180px', md: '180px', '2xl': '220px' }}
1612
+ src={imgColorBrand}
1613
+ alt="Fallback patternFly default logo"
1614
+ >
1615
+ <source media="(min-width: 768px)" srcSet={imgColorBrand} />
1616
+ <source srcSet={imgColorBrand} />
1617
+ </Brand>
1618
+ </MastheadBrand>
1619
+ </MastheadMain>
1620
+ <MastheadContent>{headerToolbar}</MastheadContent>
1621
+ </Masthead>
1475
1622
  );
1623
+
1476
1624
  const Sidebar = (
1477
1625
  <PageSidebar isSidebarOpen={isMobileView ? isNavOpenMobile : isNavOpenDesktop}>
1478
1626
  <PageSidebarBody>{PageNav}</PageSidebarBody>
@@ -1535,7 +1683,6 @@ import {
1535
1683
  MenuList,
1536
1684
  MenuItem
1537
1685
  } from '@patternfly/react-core';
1538
- import { PageHeader, PageHeaderTools } from '@patternfly/react-core';
1539
1686
  import DashboardHeader from '@patternfly/react-core/src/demos/examples/DashboardHeader';
1540
1687
 
1541
1688
  class VerticalPage extends React.Component {