@patternfly/react-core 6.5.0-prerelease.21 → 6.5.0-prerelease.24

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 (263) hide show
  1. package/CHANGELOG.md +17 -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/ClipboardCopy/package.json +1 -1
  21. package/dist/dynamic/components/CodeBlock/package.json +1 -1
  22. package/dist/dynamic/components/Compass/package.json +1 -1
  23. package/dist/dynamic/components/Content/package.json +1 -1
  24. package/dist/dynamic/components/DataList/package.json +1 -1
  25. package/dist/dynamic/components/DatePicker/package.json +1 -1
  26. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  27. package/dist/dynamic/components/Divider/package.json +1 -1
  28. package/dist/dynamic/components/Drawer/package.json +1 -1
  29. package/dist/dynamic/components/Dropdown/package.json +1 -1
  30. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  31. package/dist/dynamic/components/EmptyState/package.json +1 -1
  32. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  33. package/dist/dynamic/components/FileUpload/package.json +1 -1
  34. package/dist/dynamic/components/Form/package.json +1 -1
  35. package/dist/dynamic/components/FormSelect/package.json +1 -1
  36. package/dist/dynamic/components/HelperText/package.json +1 -1
  37. package/dist/dynamic/components/Hero/package.json +1 -1
  38. package/dist/dynamic/components/Hint/package.json +1 -1
  39. package/dist/dynamic/components/Icon/package.json +1 -1
  40. package/dist/dynamic/components/InputGroup/package.json +1 -1
  41. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  42. package/dist/dynamic/components/Label/package.json +1 -1
  43. package/dist/dynamic/components/List/package.json +1 -1
  44. package/dist/dynamic/components/LoginPage/package.json +1 -1
  45. package/dist/dynamic/components/Masthead/package.json +1 -1
  46. package/dist/dynamic/components/Menu/package.json +1 -1
  47. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  48. package/dist/dynamic/components/Modal/package.json +1 -1
  49. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  50. package/dist/dynamic/components/Nav/package.json +1 -1
  51. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  52. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  53. package/dist/dynamic/components/NumberInput/package.json +1 -1
  54. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  55. package/dist/dynamic/components/Page/package.json +1 -1
  56. package/dist/dynamic/components/Pagination/package.json +1 -1
  57. package/dist/dynamic/components/Panel/package.json +1 -1
  58. package/dist/dynamic/components/Popover/package.json +1 -1
  59. package/dist/dynamic/components/Progress/package.json +1 -1
  60. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  61. package/dist/dynamic/components/Radio/package.json +1 -1
  62. package/dist/dynamic/components/SearchInput/package.json +1 -1
  63. package/dist/dynamic/components/Select/package.json +1 -1
  64. package/dist/dynamic/components/Sidebar/package.json +1 -1
  65. package/dist/dynamic/components/SimpleList/package.json +1 -1
  66. package/dist/dynamic/components/Skeleton/package.json +1 -1
  67. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  68. package/dist/dynamic/components/Slider/package.json +1 -1
  69. package/dist/dynamic/components/Spinner/package.json +1 -1
  70. package/dist/dynamic/components/Switch/package.json +1 -1
  71. package/dist/dynamic/components/Tabs/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/TimePicker/package.json +1 -1
  76. package/dist/dynamic/components/Timestamp/package.json +1 -1
  77. package/dist/dynamic/components/Title/package.json +1 -1
  78. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  79. package/dist/dynamic/components/Toolbar/package.json +1 -1
  80. package/dist/dynamic/components/Tooltip/package.json +1 -1
  81. package/dist/dynamic/components/TreeView/package.json +1 -1
  82. package/dist/dynamic/components/Truncate/package.json +1 -1
  83. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  84. package/dist/dynamic/components/Wizard/package.json +1 -1
  85. package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/Tile/package.json +1 -1
  90. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  91. package/dist/dynamic/deprecated/components/package.json +1 -1
  92. package/dist/dynamic/helpers/AnimationsProvider/AnimationsProvider/package.json +1 -1
  93. package/dist/dynamic/helpers/AnimationsProvider/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/fileUtils/package.json +1 -1
  102. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  103. package/dist/dynamic/helpers/package.json +1 -1
  104. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  105. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  106. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  107. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  108. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  109. package/dist/dynamic/helpers/util/package.json +1 -1
  110. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  111. package/dist/dynamic/layouts/Flex/package.json +1 -1
  112. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  113. package/dist/dynamic/layouts/Grid/package.json +1 -1
  114. package/dist/dynamic/layouts/Level/package.json +1 -1
  115. package/dist/dynamic/layouts/Split/package.json +1 -1
  116. package/dist/dynamic/layouts/Stack/package.json +1 -1
  117. package/dist/dynamic/styles/package.json +1 -1
  118. package/dist/esm/components/Compass/Compass.d.ts +5 -3
  119. package/dist/esm/components/Compass/Compass.d.ts.map +1 -1
  120. package/dist/esm/components/Compass/Compass.js +3 -3
  121. package/dist/esm/components/Compass/Compass.js.map +1 -1
  122. package/dist/esm/components/Compass/CompassContent.d.ts +1 -1
  123. package/dist/esm/components/Compass/CompassContent.js +1 -1
  124. package/dist/esm/components/Compass/CompassContent.js.map +1 -1
  125. package/dist/esm/components/Compass/CompassMainHeader.d.ts +4 -4
  126. package/dist/esm/components/Compass/CompassMainHeaderContent.d.ts +2 -2
  127. package/dist/esm/components/Compass/CompassMainHeaderTitle.d.ts +2 -2
  128. package/dist/esm/components/Compass/CompassMainHeaderToolbar.d.ts +2 -2
  129. package/dist/esm/components/Drawer/DrawerPanelContent.d.ts.map +1 -1
  130. package/dist/esm/components/Drawer/DrawerPanelContent.js +7 -1
  131. package/dist/esm/components/Drawer/DrawerPanelContent.js.map +1 -1
  132. package/dist/esm/components/Form/FormGroup.d.ts.map +1 -1
  133. package/dist/esm/components/Form/FormGroup.js +1 -1
  134. package/dist/esm/components/Form/FormGroup.js.map +1 -1
  135. package/dist/esm/components/Masthead/Masthead.d.ts +2 -0
  136. package/dist/esm/components/Masthead/Masthead.d.ts.map +1 -1
  137. package/dist/esm/components/Masthead/Masthead.js +2 -2
  138. package/dist/esm/components/Masthead/Masthead.js.map +1 -1
  139. package/dist/esm/components/Nav/Nav.d.ts +2 -2
  140. package/dist/esm/components/Nav/Nav.d.ts.map +1 -1
  141. package/dist/esm/components/Nav/Nav.js +1 -1
  142. package/dist/esm/components/Nav/Nav.js.map +1 -1
  143. package/dist/esm/components/Nav/NavItem.d.ts +5 -1
  144. package/dist/esm/components/Nav/NavItem.d.ts.map +1 -1
  145. package/dist/esm/components/Nav/NavItem.js +8 -6
  146. package/dist/esm/components/Nav/NavItem.js.map +1 -1
  147. package/dist/esm/components/Page/Page.d.ts +2 -0
  148. package/dist/esm/components/Page/Page.d.ts.map +1 -1
  149. package/dist/esm/components/Page/Page.js +3 -3
  150. package/dist/esm/components/Page/Page.js.map +1 -1
  151. package/dist/esm/components/Toolbar/Toolbar.d.ts +2 -0
  152. package/dist/esm/components/Toolbar/Toolbar.d.ts.map +1 -1
  153. package/dist/esm/components/Toolbar/Toolbar.js +2 -2
  154. package/dist/esm/components/Toolbar/Toolbar.js.map +1 -1
  155. package/dist/esm/components/Wizard/WizardNavInternal.js +3 -3
  156. package/dist/esm/components/Wizard/WizardNavInternal.js.map +1 -1
  157. package/dist/js/components/Compass/Compass.d.ts +5 -3
  158. package/dist/js/components/Compass/Compass.d.ts.map +1 -1
  159. package/dist/js/components/Compass/Compass.js +3 -3
  160. package/dist/js/components/Compass/Compass.js.map +1 -1
  161. package/dist/js/components/Compass/CompassContent.d.ts +1 -1
  162. package/dist/js/components/Compass/CompassContent.js +1 -1
  163. package/dist/js/components/Compass/CompassContent.js.map +1 -1
  164. package/dist/js/components/Compass/CompassMainHeader.d.ts +4 -4
  165. package/dist/js/components/Compass/CompassMainHeaderContent.d.ts +2 -2
  166. package/dist/js/components/Compass/CompassMainHeaderTitle.d.ts +2 -2
  167. package/dist/js/components/Compass/CompassMainHeaderToolbar.d.ts +2 -2
  168. package/dist/js/components/Drawer/DrawerPanelContent.d.ts.map +1 -1
  169. package/dist/js/components/Drawer/DrawerPanelContent.js +7 -1
  170. package/dist/js/components/Drawer/DrawerPanelContent.js.map +1 -1
  171. package/dist/js/components/Form/FormGroup.d.ts.map +1 -1
  172. package/dist/js/components/Form/FormGroup.js +1 -1
  173. package/dist/js/components/Form/FormGroup.js.map +1 -1
  174. package/dist/js/components/Masthead/Masthead.d.ts +2 -0
  175. package/dist/js/components/Masthead/Masthead.d.ts.map +1 -1
  176. package/dist/js/components/Masthead/Masthead.js +2 -2
  177. package/dist/js/components/Masthead/Masthead.js.map +1 -1
  178. package/dist/js/components/Nav/Nav.d.ts +2 -2
  179. package/dist/js/components/Nav/Nav.d.ts.map +1 -1
  180. package/dist/js/components/Nav/Nav.js +1 -1
  181. package/dist/js/components/Nav/Nav.js.map +1 -1
  182. package/dist/js/components/Nav/NavItem.d.ts +5 -1
  183. package/dist/js/components/Nav/NavItem.d.ts.map +1 -1
  184. package/dist/js/components/Nav/NavItem.js +7 -6
  185. package/dist/js/components/Nav/NavItem.js.map +1 -1
  186. package/dist/js/components/Page/Page.d.ts +2 -0
  187. package/dist/js/components/Page/Page.d.ts.map +1 -1
  188. package/dist/js/components/Page/Page.js +3 -3
  189. package/dist/js/components/Page/Page.js.map +1 -1
  190. package/dist/js/components/Toolbar/Toolbar.d.ts +2 -0
  191. package/dist/js/components/Toolbar/Toolbar.d.ts.map +1 -1
  192. package/dist/js/components/Toolbar/Toolbar.js +2 -2
  193. package/dist/js/components/Toolbar/Toolbar.js.map +1 -1
  194. package/dist/js/components/Wizard/WizardNavInternal.js +3 -3
  195. package/dist/js/components/Wizard/WizardNavInternal.js.map +1 -1
  196. package/dist/umd/assets/{output-Bhl00hr4.css → output-BbsSnXfK.css} +15864 -15641
  197. package/dist/umd/react-core.min.js +5 -5
  198. package/helpers/package.json +1 -1
  199. package/layouts/package.json +1 -1
  200. package/next/package.json +1 -1
  201. package/package.json +7 -7
  202. package/src/components/Compass/Compass.tsx +46 -30
  203. package/src/components/Compass/CompassContent.tsx +2 -2
  204. package/src/components/Compass/CompassMainHeader.tsx +4 -4
  205. package/src/components/Compass/CompassMainHeaderContent.tsx +2 -2
  206. package/src/components/Compass/CompassMainHeaderTitle.tsx +2 -2
  207. package/src/components/Compass/CompassMainHeaderToolbar.tsx +2 -2
  208. package/src/components/Compass/__tests__/Compass.test.tsx +10 -0
  209. package/src/components/Compass/__tests__/__snapshots__/Compass.test.tsx.snap +1 -1
  210. package/src/components/Compass/__tests__/__snapshots__/CompassContent.test.tsx.snap +1 -1
  211. package/src/components/Compass/examples/Compass.md +16 -15
  212. package/src/components/Compass/examples/CompassDockLayout.tsx +25 -0
  213. package/src/components/Compass/examples/compass.css +16 -4
  214. package/src/components/Drawer/DrawerPanelContent.tsx +7 -0
  215. package/src/components/Drawer/__tests__/DrawerPanelContent.test.tsx +20 -0
  216. package/src/components/Drawer/__tests__/Generated/__snapshots__/DrawerPanelContent.test.tsx.snap +1 -0
  217. package/src/components/Drawer/__tests__/__snapshots__/Drawer.test.tsx.snap +2 -0
  218. package/src/components/Drawer/examples/Drawer.md +1 -1
  219. package/src/components/Drawer/examples/DrawerAdditionalSectionAboveContent.tsx +1 -1
  220. package/src/components/Drawer/examples/DrawerBasic.tsx +1 -1
  221. package/src/components/Drawer/examples/DrawerBasicInline.tsx +1 -1
  222. package/src/components/Drawer/examples/DrawerBasicPill.tsx +1 -1
  223. package/src/components/Drawer/examples/DrawerBreakpoint.tsx +1 -1
  224. package/src/components/Drawer/examples/DrawerInlinePanelEnd.tsx +1 -1
  225. package/src/components/Drawer/examples/DrawerInlinePanelStart.tsx +1 -1
  226. package/src/components/Drawer/examples/DrawerModifiedContentPadding.tsx +1 -1
  227. package/src/components/Drawer/examples/DrawerModifiedPanelPadding.tsx +1 -1
  228. package/src/components/Drawer/examples/DrawerPanelBottom.tsx +1 -1
  229. package/src/components/Drawer/examples/DrawerPanelEnd.tsx +1 -1
  230. package/src/components/Drawer/examples/DrawerPanelStart.tsx +1 -1
  231. package/src/components/Drawer/examples/DrawerPillInline.tsx +1 -1
  232. package/src/components/Drawer/examples/DrawerResizableAtEnd.tsx +1 -1
  233. package/src/components/Drawer/examples/DrawerResizableAtStart.tsx +1 -1
  234. package/src/components/Drawer/examples/DrawerResizableOnBottom.tsx +1 -1
  235. package/src/components/Drawer/examples/DrawerResizableOnInline.tsx +1 -1
  236. package/src/components/Drawer/examples/DrawerStatic.tsx +1 -1
  237. package/src/components/Form/FormGroup.tsx +1 -2
  238. package/src/components/Form/__tests__/__snapshots__/FormGroup.test.tsx.snap +1 -1
  239. package/src/components/LoginPage/__tests__/__snapshots__/LoginForm.test.tsx.snap +6 -6
  240. package/src/components/Masthead/Masthead.tsx +4 -0
  241. package/src/components/Masthead/__tests__/Masthead.test.tsx +25 -1
  242. package/src/components/Nav/Nav.tsx +3 -2
  243. package/src/components/Nav/NavItem.tsx +27 -3
  244. package/src/components/Nav/__tests__/Nav.test.tsx +15 -0
  245. package/src/components/Page/Page.tsx +5 -1
  246. package/src/components/Page/__tests__/Page.test.tsx +17 -0
  247. package/src/components/Toolbar/Toolbar.tsx +4 -0
  248. package/src/components/Toolbar/__tests__/Toolbar.test.tsx +34 -1
  249. package/src/components/Wizard/WizardNavInternal.tsx +3 -3
  250. package/src/components/Wizard/__tests__/Wizard.test.tsx +39 -0
  251. package/src/demos/Compass/Compass.md +40 -0
  252. package/src/demos/Compass/examples/CompassDockDemo.tsx +215 -0
  253. package/src/demos/Page.md +12 -1
  254. package/src/demos/assets/PF-IconLogo-color.svg +17 -0
  255. package/src/demos/examples/Page/PageDockedNav.tsx +259 -0
  256. package/src/layouts/Bullseye/examples/bullseye.css +2 -2
  257. package/src/layouts/Flex/examples/flex.css +3 -3
  258. package/src/layouts/Gallery/examples/gallery.css +2 -2
  259. package/src/layouts/Grid/examples/grid.css +2 -2
  260. package/src/layouts/Level/examples/level.css +4 -4
  261. package/src/layouts/Split/examples/split.css +2 -2
  262. package/src/layouts/Stack/examples/stack.css +4 -4
  263. /package/src/{components → demos}/Compass/examples/CompassDemo.tsx +0 -0
@@ -0,0 +1,215 @@
1
+ import { useRef, useState } from 'react';
2
+ import {
3
+ Compass,
4
+ CompassContent,
5
+ CompassMainHeader,
6
+ CompassPanel,
7
+ Title,
8
+ NavItem,
9
+ NavList,
10
+ Nav,
11
+ Brand,
12
+ MastheadLogo,
13
+ MastheadBrand,
14
+ MastheadContent,
15
+ MastheadMain,
16
+ Masthead,
17
+ Toolbar,
18
+ ToolbarContent,
19
+ ToolbarItem,
20
+ ToolbarGroup,
21
+ Dropdown,
22
+ DropdownList,
23
+ MenuToggle,
24
+ DropdownItem,
25
+ Button,
26
+ ButtonVariant,
27
+ Avatar,
28
+ Tooltip,
29
+ Divider
30
+ } from '@patternfly/react-core';
31
+ import CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon';
32
+ import FolderIcon from '@patternfly/react-icons/dist/esm/icons/folder-icon';
33
+ import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
34
+ import CloudIcon from '@patternfly/react-icons/dist/esm/icons/cloud-icon';
35
+ import CodeIcon from '@patternfly/react-icons/dist/esm/icons/code-icon';
36
+ import pfLogo from '../../assets/PF-IconLogo-color.svg';
37
+ import imgAvatar from '../../assets/avatarImg.svg';
38
+
39
+ interface NavOnSelectProps {
40
+ groupId: number | string;
41
+ itemId: number | string;
42
+ to: string;
43
+ }
44
+
45
+ export const CompassDockDemo: React.FunctionComponent = () => {
46
+ const [activeItem, setActiveItem] = useState<number>(0);
47
+ const [isDropdownOpen, setIsDropdownOpen] = useState(false);
48
+
49
+ const onNavSelect = (_event: React.FormEvent<HTMLInputElement>, selectedItem: NavOnSelectProps) => {
50
+ typeof selectedItem.itemId === 'number' && setActiveItem(selectedItem.itemId);
51
+ };
52
+
53
+ const onDropdownToggle = () => {
54
+ setIsDropdownOpen((prevIsOpen) => !prevIsOpen);
55
+ };
56
+
57
+ const onDropdownSelect = () => {
58
+ setIsDropdownOpen(false);
59
+ };
60
+
61
+ const userDropdownItems = [
62
+ <>
63
+ <DropdownItem key="group 2 profile">My profile</DropdownItem>
64
+ <DropdownItem key="group 2 user">User management</DropdownItem>
65
+ <DropdownItem key="group 2 logout">Logout</DropdownItem>
66
+ </>
67
+ ];
68
+
69
+ const navItem1Ref = useRef<HTMLAnchorElement>(null);
70
+ const navItem2Ref = useRef<HTMLAnchorElement>(null);
71
+ const navItem3Ref = useRef<HTMLAnchorElement>(null);
72
+ const navItem4Ref = useRef<HTMLAnchorElement>(null);
73
+ const settingsRef = useRef<HTMLButtonElement>(null);
74
+ const helpRef = useRef<HTMLButtonElement>(null);
75
+ const userMenuRef = useRef<HTMLButtonElement>(null);
76
+
77
+ const dockContent = (
78
+ <Masthead id="icon-router-link" variant="docked">
79
+ <MastheadMain>
80
+ <MastheadBrand>
81
+ <MastheadLogo component={(props) => <a {...props} href="#" />}>
82
+ <Brand src={pfLogo} alt="PatternFly" heights={{ default: '37px' }} />
83
+ </MastheadLogo>
84
+ </MastheadBrand>
85
+ </MastheadMain>
86
+ <Divider />
87
+ <MastheadContent>
88
+ <Toolbar id="toolbar" isVertical>
89
+ <ToolbarContent>
90
+ <ToolbarItem>
91
+ <Nav onSelect={onNavSelect} variant="docked" aria-label="Icon global" ouiaId="IconNav">
92
+ <NavList>
93
+ <NavItem
94
+ key="nav-icon-link1"
95
+ preventDefault
96
+ id="nav-icon-link1"
97
+ to="#nav-icon-link1"
98
+ itemId={0}
99
+ isActive={activeItem === 0}
100
+ icon={<CubeIcon />}
101
+ anchorRef={navItem1Ref}
102
+ aria-label="Link 1"
103
+ />
104
+ <NavItem
105
+ key="nav-icon-link2"
106
+ preventDefault
107
+ id="nav-icon-link2"
108
+ to="#nav-icon-link2"
109
+ itemId={1}
110
+ isActive={activeItem === 1}
111
+ icon={<FolderIcon />}
112
+ anchorRef={navItem2Ref}
113
+ aria-label="Link 2"
114
+ />
115
+ <NavItem
116
+ key="nav-icon-link3"
117
+ preventDefault
118
+ id="nav-icon-link3"
119
+ to="#nav-icon-link3"
120
+ itemId={2}
121
+ isActive={activeItem === 2}
122
+ icon={<CloudIcon />}
123
+ anchorRef={navItem3Ref}
124
+ aria-label="Link 3"
125
+ />
126
+ <NavItem
127
+ key="nav-icon-link4"
128
+ preventDefault
129
+ id="nav-icon-link4"
130
+ to="#nav-icon-link4"
131
+ itemId={3}
132
+ isActive={activeItem === 3}
133
+ icon={<CodeIcon />}
134
+ anchorRef={navItem4Ref}
135
+ aria-label="Link 4"
136
+ />
137
+ </NavList>
138
+ </Nav>
139
+ <Tooltip aria="none" aria-live="off" triggerRef={navItem1Ref} content="Link 1"></Tooltip>
140
+ <Tooltip aria="none" aria-live="off" triggerRef={navItem2Ref} content="Link 2"></Tooltip>
141
+ <Tooltip aria="none" aria-live="off" triggerRef={navItem3Ref} content="Link 3"></Tooltip>
142
+ <Tooltip aria="none" aria-live="off" triggerRef={navItem4Ref} content="Link 4"></Tooltip>
143
+ </ToolbarItem>
144
+ <ToolbarGroup
145
+ variant="action-group-plain"
146
+ align={{ default: 'alignEnd' }}
147
+ gap={{ default: 'gapNone', md: 'gapMd' }}
148
+ >
149
+ <ToolbarGroup variant="action-group-plain" visibility={{ default: 'hidden', lg: 'visible' }}>
150
+ <ToolbarItem>
151
+ <Tooltip aria="none" aria-live="off" triggerRef={settingsRef} content="Settings">
152
+ <Button ref={settingsRef} aria-label="Settings" isSettings variant="plain" />
153
+ </Tooltip>
154
+ </ToolbarItem>
155
+ <ToolbarItem>
156
+ <Tooltip aria="none" aria-live="off" triggerRef={helpRef} content="Help">
157
+ <Button
158
+ ref={helpRef}
159
+ aria-label="Help"
160
+ variant={ButtonVariant.plain}
161
+ icon={<QuestionCircleIcon />}
162
+ />
163
+ </Tooltip>
164
+ </ToolbarItem>
165
+ </ToolbarGroup>
166
+ </ToolbarGroup>
167
+ <ToolbarItem>
168
+ <Dropdown
169
+ isOpen={isDropdownOpen}
170
+ shouldFocusToggleOnSelect
171
+ onSelect={onDropdownSelect}
172
+ onOpenChange={(isOpen: boolean) => setIsDropdownOpen(isOpen)}
173
+ toggle={{
174
+ toggleNode: (
175
+ <Tooltip content="User menu" aria="none" aria-live="off" triggerRef={userMenuRef}>
176
+ <MenuToggle
177
+ ref={userMenuRef}
178
+ onClick={onDropdownToggle}
179
+ isExpanded={isDropdownOpen}
180
+ icon={<Avatar src={imgAvatar} alt="" size="sm" />}
181
+ variant="plain"
182
+ aria-label="User menu"
183
+ />
184
+ </Tooltip>
185
+ ),
186
+ toggleRef: userMenuRef
187
+ }}
188
+ >
189
+ <DropdownList>{userDropdownItems}</DropdownList>
190
+ </Dropdown>
191
+ </ToolbarItem>
192
+ </ToolbarContent>
193
+ </Toolbar>
194
+ </MastheadContent>
195
+ </Masthead>
196
+ );
197
+
198
+ const mainContent = (
199
+ <>
200
+ <CompassMainHeader title={<Title headingLevel="h1">Content title</Title>} />
201
+ <CompassContent>
202
+ <CompassPanel>Content</CompassPanel>
203
+ </CompassContent>
204
+ </>
205
+ );
206
+
207
+ return (
208
+ <Compass
209
+ dock={dockContent}
210
+ main={mainContent}
211
+ backgroundSrcDark="/assets/images/pf-background.svg"
212
+ backgroundSrcLight="/assets/images/pf-background.svg"
213
+ />
214
+ );
215
+ };
package/src/demos/Page.md CHANGED
@@ -3,7 +3,7 @@ id: Page
3
3
  section: components
4
4
  ---
5
5
 
6
- import { useState } from 'react';
6
+ import { useState, useRef, useEffect } from 'react';
7
7
  import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
8
8
  import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
9
9
  import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
@@ -13,7 +13,12 @@ import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
13
13
  import AttentionBellIcon from '@patternfly/react-icons/dist/esm/icons/attention-bell-icon';
14
14
  import LightbulbIcon from '@patternfly/react-icons/dist/esm/icons/lightbulb-icon';
15
15
  import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
16
+ import CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon';
17
+ import FolderIcon from '@patternfly/react-icons/dist/esm/icons/folder-icon';
18
+ import CloudIcon from '@patternfly/react-icons/dist/esm/icons/cloud-icon';
19
+ import CodeIcon from '@patternfly/react-icons/dist/esm/icons/code-icon';
16
20
  import pfLogo from '@patternfly/react-core/src/demos/assets/PF-HorizontalLogo-Color.svg';
21
+ import pfIconLogo from '@patternfly/react-core/src/demos/assets/PF-IconLogo-color.svg';
17
22
 
18
23
  - All examples set the `isManagedSidebar` prop on the Page component to have the sidebar automatically close for smaller screen widths. You can also manually control this behavior by not adding the `isManagedSidebar` prop and instead:
19
24
 
@@ -49,3 +54,9 @@ When adding a context selector/perspective switcher in a `PageSidebar`, you must
49
54
  ```ts file='./examples/Page/PageContextSelector.tsx' isFullscreen
50
55
 
51
56
  ```
57
+
58
+ ### Docked nav
59
+
60
+ ```ts file='./examples/Page/PageDockedNav.tsx' isFullscreen
61
+
62
+ ```
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="158px" height="158px" viewBox="0 0 158 158" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <title>PF-IconLogo-color </title>
4
+ <defs>
5
+ <linearGradient x1="68%" y1="2.25860997e-13%" x2="32%" y2="100%" id="linearGradient-1">
6
+ <stop stop-color="#2B9AF3" offset="0%"></stop>
7
+ <stop stop-color="#73BCF7" stop-opacity="0.502212631" offset="100%"></stop>
8
+ </linearGradient>
9
+ </defs>
10
+ <g id="PF-IconLogo-color" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
11
+ <g id="Logo">
12
+ <path d="M61.826087,0 L158,0 L158,96.173913 L147.695652,96.173913 C100.271201,96.173913 61.826087,57.7287992 61.826087,10.3043478 L61.826087,0 L61.826087,0 Z" id="Rectangle-Copy-17" fill="#0066CC"></path>
13
+ <path d="M158,3.43478261 L65.2608696,158 L138,158 C149.045695,158 158,149.045695 158,138 L158,3.43478261 L158,3.43478261 Z" id="Path-2" fill="url(#linearGradient-1)"></path>
14
+ <path d="M123.652174,-30.9130435 L30.9130435,123.652174 L103.652174,123.652174 C114.697869,123.652174 123.652174,114.697869 123.652174,103.652174 L123.652174,-30.9130435 L123.652174,-30.9130435 Z" id="Path-2" fill="url(#linearGradient-1)" transform="translate(77.282609, 46.369565) scale(1, -1) rotate(90.000000) translate(-77.282609, -46.369565) "></path>
15
+ </g>
16
+ </g>
17
+ </svg>
@@ -0,0 +1,259 @@
1
+ import { useRef, useState } from 'react';
2
+ import {
3
+ Avatar,
4
+ Brand,
5
+ Breadcrumb,
6
+ BreadcrumbItem,
7
+ Button,
8
+ ButtonVariant,
9
+ Card,
10
+ CardBody,
11
+ Content,
12
+ Divider,
13
+ Dropdown,
14
+ DropdownItem,
15
+ DropdownList,
16
+ Gallery,
17
+ GalleryItem,
18
+ Masthead,
19
+ MastheadMain,
20
+ MastheadLogo,
21
+ MastheadContent,
22
+ MastheadBrand,
23
+ MenuToggle,
24
+ Nav,
25
+ NavItem,
26
+ NavList,
27
+ Page,
28
+ PageSection,
29
+ SkipToContent,
30
+ Toolbar,
31
+ ToolbarContent,
32
+ ToolbarGroup,
33
+ ToolbarItem,
34
+ Tooltip
35
+ } from '@patternfly/react-core';
36
+ import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
37
+ import CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon';
38
+ import FolderIcon from '@patternfly/react-icons/dist/esm/icons/folder-icon';
39
+ import CloudIcon from '@patternfly/react-icons/dist/esm/icons/cloud-icon';
40
+ import CodeIcon from '@patternfly/react-icons/dist/esm/icons/code-icon';
41
+ import imgAvatar from '@patternfly/react-core/src/components/assets/avatarImg.svg';
42
+ import pfIconLogo from '@patternfly/react-core/src/demos/assets/PF-IconLogo-color.svg';
43
+
44
+ interface NavOnSelectProps {
45
+ groupId: number | string;
46
+ itemId: number | string;
47
+ to: string;
48
+ }
49
+
50
+ export const PageDockedNav: React.FunctionComponent = () => {
51
+ const [isDropdownOpen, setIsDropdownOpen] = useState(false);
52
+ const [activeItem, setActiveItem] = useState(1);
53
+
54
+ const onNavSelect = (_event: React.FormEvent<HTMLInputElement>, selectedItem: NavOnSelectProps) => {
55
+ typeof selectedItem.itemId === 'number' && setActiveItem(selectedItem.itemId);
56
+ };
57
+
58
+ const onDropdownToggle = () => {
59
+ setIsDropdownOpen((prevIsOpen) => !prevIsOpen);
60
+ };
61
+
62
+ const onDropdownSelect = () => {
63
+ setIsDropdownOpen(false);
64
+ };
65
+
66
+ const dashboardBreadcrumb = (
67
+ <Breadcrumb>
68
+ <BreadcrumbItem>Section home</BreadcrumbItem>
69
+ <BreadcrumbItem to="#">Section title</BreadcrumbItem>
70
+ <BreadcrumbItem to="#">Section title</BreadcrumbItem>
71
+ <BreadcrumbItem to="#" isActive>
72
+ Section landing
73
+ </BreadcrumbItem>
74
+ </Breadcrumb>
75
+ );
76
+
77
+ const userDropdownItems = [
78
+ <>
79
+ <DropdownItem key="group 2 profile">My profile</DropdownItem>
80
+ <DropdownItem key="group 2 user">User management</DropdownItem>
81
+ <DropdownItem key="group 2 logout">Logout</DropdownItem>
82
+ </>
83
+ ];
84
+
85
+ const navItem1Ref = useRef<HTMLAnchorElement>(null);
86
+ const navItem2Ref = useRef<HTMLAnchorElement>(null);
87
+ const navItem3Ref = useRef<HTMLAnchorElement>(null);
88
+ const navItem4Ref = useRef<HTMLAnchorElement>(null);
89
+ const settingsRef = useRef<HTMLButtonElement>(null);
90
+ const helpRef = useRef<HTMLButtonElement>(null);
91
+ const userMenuRef = useRef<HTMLButtonElement>(null);
92
+
93
+ const masthead = (
94
+ <Masthead id="icon-router-link" variant="docked">
95
+ <MastheadMain>
96
+ <MastheadBrand>
97
+ <MastheadLogo component={(props) => <a {...props} href="#" />}>
98
+ <Brand src={pfIconLogo} alt="PatternFly" heights={{ default: '37px' }} />
99
+ </MastheadLogo>
100
+ </MastheadBrand>
101
+ </MastheadMain>
102
+ <Divider />
103
+ <MastheadContent>
104
+ <Toolbar id="toolbar" isVertical>
105
+ <ToolbarContent>
106
+ <ToolbarItem>
107
+ <Nav onSelect={onNavSelect} variant="docked" aria-label="Icon global" ouiaId="IconNav">
108
+ <NavList>
109
+ <NavItem
110
+ preventDefault
111
+ id="nav-icon-link1"
112
+ to="#nav-icon-link1"
113
+ itemId={0}
114
+ isActive={activeItem === 0}
115
+ icon={<CubeIcon />}
116
+ anchorRef={navItem1Ref}
117
+ aria-label="Link 1"
118
+ />
119
+ <NavItem
120
+ preventDefault
121
+ id="nav-icon-link2"
122
+ to="#nav-icon-link2"
123
+ itemId={1}
124
+ isActive={activeItem === 1}
125
+ icon={<FolderIcon />}
126
+ anchorRef={navItem2Ref}
127
+ aria-label="Link 2"
128
+ />
129
+ <NavItem
130
+ preventDefault
131
+ id="nav-icon-link3"
132
+ to="#nav-icon-link3"
133
+ itemId={2}
134
+ isActive={activeItem === 2}
135
+ icon={<CloudIcon />}
136
+ anchorRef={navItem3Ref}
137
+ aria-label="Link 3"
138
+ />
139
+ <NavItem
140
+ preventDefault
141
+ id="nav-icon-link4"
142
+ to="#nav-icon-link4"
143
+ itemId={3}
144
+ isActive={activeItem === 3}
145
+ icon={<CodeIcon />}
146
+ anchorRef={navItem4Ref}
147
+ aria-label="Link 4"
148
+ />
149
+ </NavList>
150
+ </Nav>
151
+ <Tooltip aria="none" aria-live="off" triggerRef={navItem1Ref} content="Link 1"></Tooltip>
152
+ <Tooltip aria="none" aria-live="off" triggerRef={navItem2Ref} content="Link 2"></Tooltip>
153
+ <Tooltip aria="none" aria-live="off" triggerRef={navItem3Ref} content="Link 3"></Tooltip>
154
+ <Tooltip aria="none" aria-live="off" triggerRef={navItem4Ref} content="Link 4"></Tooltip>
155
+ </ToolbarItem>
156
+ <ToolbarGroup
157
+ variant="action-group-plain"
158
+ align={{ default: 'alignEnd' }}
159
+ gap={{ default: 'gapNone', md: 'gapMd' }}
160
+ >
161
+ <ToolbarGroup variant="action-group-plain" visibility={{ default: 'hidden', lg: 'visible' }}>
162
+ <ToolbarItem>
163
+ <Tooltip aria="none" aria-live="off" triggerRef={settingsRef} content="Settings">
164
+ <Button ref={settingsRef} aria-label="Settings" isSettings variant="plain" />
165
+ </Tooltip>
166
+ </ToolbarItem>
167
+ <ToolbarItem>
168
+ <Tooltip aria="none" aria-live="off" triggerRef={helpRef} content="Help">
169
+ <Button
170
+ ref={helpRef}
171
+ aria-label="Help"
172
+ variant={ButtonVariant.plain}
173
+ icon={<QuestionCircleIcon />}
174
+ />
175
+ </Tooltip>
176
+ </ToolbarItem>
177
+ </ToolbarGroup>
178
+ </ToolbarGroup>
179
+ <ToolbarItem>
180
+ <Dropdown
181
+ isOpen={isDropdownOpen}
182
+ onSelect={onDropdownSelect}
183
+ shouldFocusToggleOnSelect
184
+ onOpenChange={(isOpen: boolean) => setIsDropdownOpen(isOpen)}
185
+ toggle={{
186
+ toggleNode: (
187
+ <Tooltip content="User menu" aria="none" aria-live="off" triggerRef={userMenuRef}>
188
+ <MenuToggle
189
+ ref={userMenuRef}
190
+ onClick={onDropdownToggle}
191
+ isExpanded={isDropdownOpen}
192
+ icon={<Avatar src={imgAvatar} alt="" size="sm" />}
193
+ variant="plain"
194
+ aria-label="User menu"
195
+ />
196
+ </Tooltip>
197
+ ),
198
+ toggleRef: userMenuRef
199
+ }}
200
+ >
201
+ <DropdownList>{userDropdownItems}</DropdownList>
202
+ </Dropdown>
203
+ </ToolbarItem>
204
+ </ToolbarContent>
205
+ </Toolbar>
206
+ </MastheadContent>
207
+ </Masthead>
208
+ );
209
+
210
+ const mainContainerId = 'main-content-page-layout-tertiary-nav';
211
+
212
+ const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {
213
+ event.preventDefault();
214
+
215
+ const mainContentElement = document.getElementById(mainContainerId);
216
+ if (mainContentElement) {
217
+ mainContentElement.focus();
218
+ }
219
+ };
220
+
221
+ const pageSkipToContent = (
222
+ <SkipToContent onClick={handleClick} href={`#${mainContainerId}`}>
223
+ Skip to content
224
+ </SkipToContent>
225
+ );
226
+
227
+ return (
228
+ <Page
229
+ variant="docked"
230
+ masthead={masthead}
231
+ skipToContent={pageSkipToContent}
232
+ breadcrumb={dashboardBreadcrumb}
233
+ mainContainerId={mainContainerId}
234
+ isHorizontalSubnavWidthLimited
235
+ isBreadcrumbWidthLimited
236
+ isBreadcrumbGrouped
237
+ additionalGroupedContent={
238
+ <PageSection aria-labelledby="main-title">
239
+ <Content>
240
+ <h1 id="main-title">Main title</h1>
241
+ <p>This is a full page demo.</p>
242
+ </Content>
243
+ </PageSection>
244
+ }
245
+ >
246
+ <PageSection aria-label="Card gallery">
247
+ <Gallery hasGutter>
248
+ {Array.from({ length: 10 }).map((_value, index) => (
249
+ <GalleryItem key={index}>
250
+ <Card>
251
+ <CardBody>This is a card</CardBody>
252
+ </Card>
253
+ </GalleryItem>
254
+ ))}
255
+ </Gallery>
256
+ </PageSection>
257
+ </Page>
258
+ );
259
+ };
@@ -1,5 +1,5 @@
1
- .ws-react-l-bullseye .pf-v6-l-bullseye,
2
- .ws-react-l-bullseye .pf-v6-l-bullseye > div {
1
+ .ws-react-f-bullseye .pf-v6-l-bullseye,
2
+ .ws-react-f-bullseye .pf-v6-l-bullseye > div {
3
3
  padding: var(--pf-t--global--spacer--md);
4
4
  border: var(--pf-t--global--border--width--box--default) dashed var(--pf-t--global--border--color--default);
5
5
  }
@@ -1,9 +1,9 @@
1
- .ws-react-l-flex .pf-v6-l-flex {
1
+ .ws-react-f-flex .pf-v6-l-flex {
2
2
  padding: var(--pf-t--global--spacer--md);
3
3
  }
4
4
 
5
- .ws-react-l-flex .pf-v6-l-flex > div,
6
- .ws-react-l-flex .example-border {
5
+ .ws-react-f-flex .pf-v6-l-flex > div,
6
+ .ws-react-f-flex .example-border {
7
7
  padding: var(--pf-t--global--spacer--md);
8
8
  border: var(--pf-t--global--border--width--box--default) dashed var(--pf-t--global--border--color--default);
9
9
  }
@@ -1,8 +1,8 @@
1
- .ws-react-l-gallery .pf-v6-l-gallery {
1
+ .ws-react-f-gallery .pf-v6-l-gallery {
2
2
  padding: var(--pf-t--global--spacer--md);
3
3
  }
4
4
 
5
- .ws-react-l-gallery .pf-v6-l-gallery > div {
5
+ .ws-react-f-gallery .pf-v6-l-gallery > div {
6
6
  padding: var(--pf-t--global--spacer--md);
7
7
  border: var(--pf-t--global--border--width--box--default) dashed var(--pf-t--global--border--color--default);
8
8
  }
@@ -1,5 +1,5 @@
1
- .ws-react-l-grid > .pf-v6-l-grid,
2
- .ws-react-l-grid > .pf-v6-l-grid > .pf-v6-l-grid__item {
1
+ .ws-react-f-grid > .pf-v6-l-grid,
2
+ .ws-react-f-grid > .pf-v6-l-grid > .pf-v6-l-grid__item {
3
3
  min-height: 75px;
4
4
  padding: var(--pf-t--global--spacer--md);
5
5
  border: var(--pf-t--global--border--width--box--default) dashed var(--pf-t--global--border--color--default);
@@ -1,13 +1,13 @@
1
- .ws-react-l-level {
1
+ .ws-react-f-level {
2
2
  padding: var(--pf-t--global--spacer--sm);
3
3
  }
4
4
 
5
- .ws-react-l-level .pf-v6-l-level {
5
+ .ws-react-f-level .pf-v6-l-level {
6
6
  min-height: 160px;
7
7
  }
8
8
 
9
- .ws-react-l-level .pf-v6-l-level,
10
- .ws-react-l-level .pf-v6-l-level > div {
9
+ .ws-react-f-level .pf-v6-l-level,
10
+ .ws-react-f-level .pf-v6-l-level > div {
11
11
  padding: var(--pf-t--global--spacer--sm);
12
12
  border: var(--pf-t--global--border--width--box--default) dashed var(--pf-t--global--border--color--default);
13
13
  }
@@ -1,5 +1,5 @@
1
- .ws-react-l-split .pf-v6-l-split,
2
- .ws-react-l-split .pf-v6-l-split > .pf-v6-l-split__item {
1
+ .ws-react-f-split .pf-v6-l-split,
2
+ .ws-react-f-split .pf-v6-l-split > .pf-v6-l-split__item {
3
3
  padding: var(--pf-t--global--spacer--md);
4
4
  border: var(--pf-t--global--border--width--box--default) dashed var(--pf-t--global--border--color--default);
5
5
  }
@@ -1,15 +1,15 @@
1
- .ws-react-l-stack {
1
+ .ws-react-f-stack {
2
2
  min-height: 30em;
3
3
  display: flex;
4
4
  flex-direction: column;
5
5
  }
6
6
 
7
- .ws-react-l-stack > .pf-v6-l-stack {
7
+ .ws-react-f-stack > .pf-v6-l-stack {
8
8
  flex-grow: 1;
9
9
  }
10
10
 
11
- .ws-react-l-stack .pf-v6-l-stack,
12
- .ws-react-l-stack .pf-v6-l-stack > .pf-v6-l-stack__item {
11
+ .ws-react-f-stack .pf-v6-l-stack,
12
+ .ws-react-f-stack .pf-v6-l-stack > .pf-v6-l-stack__item {
13
13
  padding: var(--pf-t--global--spacer--md);
14
14
  border: var(--pf-t--global--border--width--box--default) dashed var(--pf-t--global--border--color--default);
15
15
  }