@patternfly/react-core 6.0.0-alpha.76 → 6.0.0-alpha.78

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 (177) hide show
  1. package/CHANGELOG.md +13 -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/Content/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/Drawer/package.json +1 -1
  28. package/dist/dynamic/components/Dropdown/package.json +1 -1
  29. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  30. package/dist/dynamic/components/EmptyState/package.json +1 -1
  31. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  32. package/dist/dynamic/components/FileUpload/package.json +1 -1
  33. package/dist/dynamic/components/Form/package.json +1 -1
  34. package/dist/dynamic/components/FormSelect/package.json +1 -1
  35. package/dist/dynamic/components/HelperText/package.json +1 -1
  36. package/dist/dynamic/components/Hint/package.json +1 -1
  37. package/dist/dynamic/components/Icon/package.json +1 -1
  38. package/dist/dynamic/components/InputGroup/package.json +1 -1
  39. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  40. package/dist/dynamic/components/Label/package.json +1 -1
  41. package/dist/dynamic/components/List/package.json +1 -1
  42. package/dist/dynamic/components/LoginPage/package.json +1 -1
  43. package/dist/dynamic/components/Masthead/package.json +1 -1
  44. package/dist/dynamic/components/Menu/package.json +1 -1
  45. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  46. package/dist/dynamic/components/Modal/package.json +1 -1
  47. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  48. package/dist/dynamic/components/Nav/package.json +1 -1
  49. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  50. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  51. package/dist/dynamic/components/NumberInput/package.json +1 -1
  52. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  53. package/dist/dynamic/components/Page/package.json +1 -1
  54. package/dist/dynamic/components/Pagination/package.json +1 -1
  55. package/dist/dynamic/components/Panel/package.json +1 -1
  56. package/dist/dynamic/components/Popover/package.json +1 -1
  57. package/dist/dynamic/components/Progress/package.json +1 -1
  58. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  59. package/dist/dynamic/components/Radio/package.json +1 -1
  60. package/dist/dynamic/components/SearchInput/package.json +1 -1
  61. package/dist/dynamic/components/Select/package.json +1 -1
  62. package/dist/dynamic/components/Sidebar/package.json +1 -1
  63. package/dist/dynamic/components/SimpleList/package.json +1 -1
  64. package/dist/dynamic/components/Skeleton/package.json +1 -1
  65. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  66. package/dist/dynamic/components/Slider/package.json +1 -1
  67. package/dist/dynamic/components/Spinner/package.json +1 -1
  68. package/dist/dynamic/components/Switch/package.json +1 -1
  69. package/dist/dynamic/components/Tabs/package.json +1 -1
  70. package/dist/dynamic/components/TextArea/package.json +1 -1
  71. package/dist/dynamic/components/TextInput/package.json +1 -1
  72. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  73. package/dist/dynamic/components/Tile/package.json +1 -1
  74. package/dist/dynamic/components/TimePicker/package.json +1 -1
  75. package/dist/dynamic/components/Timestamp/package.json +1 -1
  76. package/dist/dynamic/components/Title/package.json +1 -1
  77. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  78. package/dist/dynamic/components/Toolbar/package.json +1 -1
  79. package/dist/dynamic/components/Tooltip/package.json +1 -1
  80. package/dist/dynamic/components/TreeView/package.json +1 -1
  81. package/dist/dynamic/components/Truncate/package.json +1 -1
  82. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  83. package/dist/dynamic/components/Wizard/package.json +1 -1
  84. package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
  85. package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/package.json +1 -1
  90. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  91. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  92. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  93. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  94. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  95. package/dist/dynamic/helpers/constants/package.json +1 -1
  96. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  97. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  98. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  99. package/dist/dynamic/helpers/package.json +1 -1
  100. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  101. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  102. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  103. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  104. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  105. package/dist/dynamic/helpers/util/package.json +1 -1
  106. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  107. package/dist/dynamic/layouts/Flex/package.json +1 -1
  108. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  109. package/dist/dynamic/layouts/Grid/package.json +1 -1
  110. package/dist/dynamic/layouts/Level/package.json +1 -1
  111. package/dist/dynamic/layouts/Split/package.json +1 -1
  112. package/dist/dynamic/layouts/Stack/package.json +1 -1
  113. package/dist/dynamic/styles/package.json +1 -1
  114. package/dist/esm/components/JumpLinks/JumpLinks.d.ts.map +1 -1
  115. package/dist/esm/components/JumpLinks/JumpLinks.js +2 -7
  116. package/dist/esm/components/JumpLinks/JumpLinks.js.map +1 -1
  117. package/dist/esm/components/Page/PageSidebarBody.d.ts +2 -0
  118. package/dist/esm/components/Page/PageSidebarBody.d.ts.map +1 -1
  119. package/dist/esm/components/Page/PageSidebarBody.js +2 -2
  120. package/dist/esm/components/Page/PageSidebarBody.js.map +1 -1
  121. package/dist/esm/components/Pagination/PaginationOptionsMenu.js +1 -1
  122. package/dist/esm/components/Pagination/PaginationOptionsMenu.js.map +1 -1
  123. package/dist/esm/components/Switch/Switch.d.ts +6 -6
  124. package/dist/esm/components/Switch/Switch.d.ts.map +1 -1
  125. package/dist/esm/components/Switch/Switch.js +11 -8
  126. package/dist/esm/components/Switch/Switch.js.map +1 -1
  127. package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -1
  128. package/dist/esm/components/Tabs/Tabs.js +2 -4
  129. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  130. package/dist/js/components/JumpLinks/JumpLinks.d.ts.map +1 -1
  131. package/dist/js/components/JumpLinks/JumpLinks.js +2 -7
  132. package/dist/js/components/JumpLinks/JumpLinks.js.map +1 -1
  133. package/dist/js/components/Page/PageSidebarBody.d.ts +2 -0
  134. package/dist/js/components/Page/PageSidebarBody.d.ts.map +1 -1
  135. package/dist/js/components/Page/PageSidebarBody.js +2 -2
  136. package/dist/js/components/Page/PageSidebarBody.js.map +1 -1
  137. package/dist/js/components/Pagination/PaginationOptionsMenu.js +1 -1
  138. package/dist/js/components/Pagination/PaginationOptionsMenu.js.map +1 -1
  139. package/dist/js/components/Switch/Switch.d.ts +6 -6
  140. package/dist/js/components/Switch/Switch.d.ts.map +1 -1
  141. package/dist/js/components/Switch/Switch.js +11 -8
  142. package/dist/js/components/Switch/Switch.js.map +1 -1
  143. package/dist/js/components/Tabs/Tabs.d.ts.map +1 -1
  144. package/dist/js/components/Tabs/Tabs.js +2 -4
  145. package/dist/js/components/Tabs/Tabs.js.map +1 -1
  146. package/dist/styles/assets/images/img_avatar-dark.svg +22 -16
  147. package/dist/styles/assets/images/img_avatar-light.svg +25 -18
  148. package/dist/styles/assets/pficon/pf-v6-pficon.woff2 +0 -0
  149. package/dist/styles/assets/pficon/pficon.scss +36 -0
  150. package/dist/styles/base-no-reset.css +936 -905
  151. package/dist/styles/base.css +936 -905
  152. package/dist/umd/assets/{output-B_N2Kl1_.css → output-Dt8Et40Q.css} +4660 -5446
  153. package/dist/umd/react-core.min.js +3 -3
  154. package/helpers/package.json +1 -1
  155. package/layouts/package.json +1 -1
  156. package/next/package.json +1 -1
  157. package/package.json +6 -6
  158. package/src/components/JumpLinks/JumpLinks.tsx +6 -4
  159. package/src/components/JumpLinks/__tests__/__snapshots__/JumpLinks.test.tsx.snap +6 -6
  160. package/src/components/Page/PageSidebarBody.tsx +4 -0
  161. package/src/components/Page/examples/PageMultipleSidebarBody.tsx +6 -3
  162. package/src/components/Pagination/PaginationOptionsMenu.tsx +1 -1
  163. package/src/components/Switch/Switch.tsx +24 -21
  164. package/src/components/Switch/__tests__/Switch.test.tsx +14 -7
  165. package/src/components/Switch/__tests__/__snapshots__/Switch.test.tsx.snap +16 -36
  166. package/src/components/Switch/examples/Switch.md +8 -0
  167. package/src/components/Switch/examples/SwitchBasic.tsx +1 -2
  168. package/src/components/Switch/examples/SwitchCheckedWithLabel.tsx +1 -3
  169. package/src/components/Switch/examples/SwitchDisabled.tsx +13 -12
  170. package/src/components/Switch/examples/SwitchReversed.tsx +1 -2
  171. package/src/components/Switch/examples/SwitchUncontrolled.tsx +6 -2
  172. package/src/components/Switch/examples/SwitchWithoutLabel.tsx +8 -1
  173. package/src/components/Tabs/Tabs.tsx +6 -8
  174. package/src/components/Tabs/__tests__/__snapshots__/Tabs.test.tsx.snap +5 -3
  175. package/src/demos/JumpLinks.md +1 -2
  176. package/src/demos/Page.md +6 -0
  177. package/src/demos/examples/Page/PageContextSelector.tsx +319 -0
@@ -417,14 +417,13 @@ exports[`should render expandable vertical tabs 1`] = `
417
417
  type="button"
418
418
  >
419
419
  <span
420
- class="pf-v6-c-button__text"
420
+ class="pf-v6-c-button__icon pf-m-start"
421
421
  >
422
422
  <span
423
423
  class="pf-v6-c-tabs__toggle-icon"
424
424
  >
425
425
  <svg
426
426
  aria-hidden="true"
427
- arian-hidden="true"
428
427
  class="pf-v6-svg"
429
428
  fill="currentColor"
430
429
  height="1em"
@@ -437,8 +436,11 @@ exports[`should render expandable vertical tabs 1`] = `
437
436
  />
438
437
  </svg>
439
438
  </span>
439
+ </span>
440
+ <span
441
+ class="pf-v6-c-button__text"
442
+ >
440
443
  <span
441
- class="pf-v6-c-tabs__toggle-text"
442
444
  id="generated-id-text"
443
445
  >
444
446
  toggle
@@ -72,8 +72,7 @@ ScrollspyH2 = () => {
72
72
  </Title>
73
73
  <Switch
74
74
  id="is-vertical"
75
- label="Vertical"
76
- labelOff="Horizontal"
75
+ label="Vertical jump links"
77
76
  isChecked={isVertical}
78
77
  onChange={(_event, check) => setIsVertical(check)}
79
78
  />
package/src/demos/Page.md CHANGED
@@ -41,3 +41,9 @@ This demonstrates a variety of navigation patterns in the context of a full page
41
41
  ```ts file='./examples/Page/PageStickySectionBreadcrumb.tsx' isFullscreen
42
42
 
43
43
  ```
44
+
45
+ ### Context selector/perspective switcher in sidebar
46
+
47
+ ```ts file='./examples/Page/PageContextSelector.tsx' isFullscreen
48
+
49
+ ```
@@ -0,0 +1,319 @@
1
+ import React from 'react';
2
+ import {
3
+ Avatar,
4
+ Brand,
5
+ Breadcrumb,
6
+ BreadcrumbItem,
7
+ Button,
8
+ ButtonVariant,
9
+ Card,
10
+ CardBody,
11
+ Divider,
12
+ Dropdown,
13
+ DropdownGroup,
14
+ DropdownItem,
15
+ DropdownList,
16
+ Gallery,
17
+ GalleryItem,
18
+ Masthead,
19
+ MastheadBrand,
20
+ MastheadContent,
21
+ MastheadMain,
22
+ MastheadToggle,
23
+ MenuToggle,
24
+ MenuToggleElement,
25
+ Nav,
26
+ NavItem,
27
+ NavList,
28
+ Page,
29
+ PageSection,
30
+ PageSidebar,
31
+ PageSidebarBody,
32
+ PageToggleButton,
33
+ SkipToContent,
34
+ Text,
35
+ TextContent,
36
+ Toolbar,
37
+ ToolbarContent,
38
+ ToolbarGroup,
39
+ ToolbarItem
40
+ } from '@patternfly/react-core';
41
+ import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
42
+ import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
43
+ import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
44
+ import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
45
+ import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
46
+ import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
47
+ import imgAvatar from '@patternfly/react-core/src/components/assets/avatarImg.svg';
48
+ import pfLogo from '@patternfly/react-core/src/demos/assets/PF-HorizontalLogo-Color.svg';
49
+ interface NavOnSelectProps {
50
+ groupId: number | string;
51
+ itemId: number | string;
52
+ to: string;
53
+ }
54
+
55
+ export const PageStickySectionBreadcrumb: React.FunctionComponent = () => {
56
+ const [isDropdownOpen, setIsDropdownOpen] = React.useState(false);
57
+ const [isKebabDropdownOpen, setIsKebabDropdownOpen] = React.useState(false);
58
+ const [isFullKebabDropdownOpen, setIsFullKebabDropdownOpen] = React.useState(false);
59
+ const [isContextSelectorOpen, setIsContextSelectorOpen] = React.useState(false);
60
+ const [activeItem, setActiveItem] = React.useState(1);
61
+
62
+ const onNavSelect = (_event: React.FormEvent<HTMLInputElement>, selectedItem: NavOnSelectProps) => {
63
+ typeof selectedItem.itemId === 'number' && setActiveItem(selectedItem.itemId);
64
+ };
65
+
66
+ const onDropdownToggle = () => {
67
+ setIsDropdownOpen(!isDropdownOpen);
68
+ };
69
+
70
+ const onDropdownSelect = () => {
71
+ setIsDropdownOpen(false);
72
+ };
73
+
74
+ const onKebabDropdownToggle = () => {
75
+ setIsKebabDropdownOpen(!isKebabDropdownOpen);
76
+ };
77
+
78
+ const onKebabDropdownSelect = () => {
79
+ setIsKebabDropdownOpen(false);
80
+ };
81
+
82
+ const onFullKebabDropdownToggle = () => {
83
+ setIsFullKebabDropdownOpen(!isFullKebabDropdownOpen);
84
+ };
85
+
86
+ const onFullKebabDropdownSelect = () => {
87
+ setIsFullKebabDropdownOpen(false);
88
+ };
89
+
90
+ const onContextSelectorToggle = () => {
91
+ setIsContextSelectorOpen(!isContextSelectorOpen);
92
+ };
93
+
94
+ const onContextSelectorSelect = () => {
95
+ setIsContextSelectorOpen(false);
96
+ };
97
+
98
+ const dashboardBreadcrumb = (
99
+ <Breadcrumb>
100
+ <BreadcrumbItem>Section home</BreadcrumbItem>
101
+ <BreadcrumbItem to="#">Section title</BreadcrumbItem>
102
+ <BreadcrumbItem to="#">Section title</BreadcrumbItem>
103
+ <BreadcrumbItem to="#" isActive>
104
+ Section landing
105
+ </BreadcrumbItem>
106
+ </Breadcrumb>
107
+ );
108
+
109
+ const kebabDropdownItems = (
110
+ <>
111
+ <DropdownItem>
112
+ <CogIcon /> Settings
113
+ </DropdownItem>
114
+ <DropdownItem>
115
+ <HelpIcon /> Help
116
+ </DropdownItem>
117
+ </>
118
+ );
119
+
120
+ const contextSelectorDropdownItems = (
121
+ <>
122
+ <DropdownItem>Developer</DropdownItem>
123
+ <DropdownItem>Admin</DropdownItem>
124
+ </>
125
+ );
126
+
127
+ const userDropdownItems = (
128
+ <>
129
+ <DropdownItem key="group 2 profile">My profile</DropdownItem>
130
+ <DropdownItem key="group 2 user">User management</DropdownItem>
131
+ <DropdownItem key="group 2 logout">Logout</DropdownItem>
132
+ </>
133
+ );
134
+
135
+ const headerToolbar = (
136
+ <Toolbar id="toolbar" isFullHeight isStatic>
137
+ <ToolbarContent>
138
+ <ToolbarGroup
139
+ variant="icon-button-group"
140
+ align={{ default: 'alignEnd' }}
141
+ gap={{ default: 'gapNone', md: 'gapMd' }}
142
+ >
143
+ <ToolbarItem>
144
+ <Button aria-label="Notifications" variant={ButtonVariant.plain} icon={<BellIcon />} />
145
+ </ToolbarItem>
146
+ <ToolbarGroup variant="icon-button-group" visibility={{ default: 'hidden', lg: 'visible' }}>
147
+ <ToolbarItem>
148
+ <Button aria-label="Settings" variant={ButtonVariant.plain} icon={<CogIcon />} />
149
+ </ToolbarItem>
150
+ <ToolbarItem>
151
+ <Button aria-label="Help" variant={ButtonVariant.plain} icon={<QuestionCircleIcon />} />
152
+ </ToolbarItem>
153
+ </ToolbarGroup>
154
+ <ToolbarItem visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}>
155
+ <Dropdown
156
+ isOpen={isKebabDropdownOpen}
157
+ onSelect={onKebabDropdownSelect}
158
+ onOpenChange={(isOpen: boolean) => setIsKebabDropdownOpen(isOpen)}
159
+ popperProps={{ position: 'right' }}
160
+ toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
161
+ <MenuToggle
162
+ ref={toggleRef}
163
+ onClick={onKebabDropdownToggle}
164
+ isExpanded={isKebabDropdownOpen}
165
+ variant="plain"
166
+ aria-label="Settings and help"
167
+ >
168
+ <EllipsisVIcon aria-hidden="true" />
169
+ </MenuToggle>
170
+ )}
171
+ >
172
+ <DropdownList>{kebabDropdownItems}</DropdownList>
173
+ </Dropdown>
174
+ </ToolbarItem>
175
+ <ToolbarItem visibility={{ md: 'hidden' }}>
176
+ <Dropdown
177
+ isOpen={isFullKebabDropdownOpen}
178
+ onSelect={onFullKebabDropdownSelect}
179
+ onOpenChange={(isOpen: boolean) => setIsFullKebabDropdownOpen(isOpen)}
180
+ popperProps={{ position: 'right' }}
181
+ toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
182
+ <MenuToggle
183
+ ref={toggleRef}
184
+ onClick={onFullKebabDropdownToggle}
185
+ isExpanded={isFullKebabDropdownOpen}
186
+ variant="plain"
187
+ aria-label="Toolbar menu"
188
+ >
189
+ <EllipsisVIcon aria-hidden="true" />
190
+ </MenuToggle>
191
+ )}
192
+ >
193
+ <DropdownGroup key="group 2" aria-label="User actions">
194
+ <DropdownList>{userDropdownItems}</DropdownList>
195
+ </DropdownGroup>
196
+ <Divider />
197
+ <DropdownList>{kebabDropdownItems}</DropdownList>
198
+ </Dropdown>
199
+ </ToolbarItem>
200
+ </ToolbarGroup>
201
+ <ToolbarItem visibility={{ default: 'hidden', md: 'visible' }}>
202
+ <Dropdown
203
+ isOpen={isDropdownOpen}
204
+ onSelect={onDropdownSelect}
205
+ onOpenChange={(isOpen: boolean) => setIsDropdownOpen(isOpen)}
206
+ popperProps={{ position: 'right' }}
207
+ toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
208
+ <MenuToggle
209
+ ref={toggleRef}
210
+ onClick={onDropdownToggle}
211
+ isFullHeight
212
+ isExpanded={isDropdownOpen}
213
+ icon={<Avatar src={imgAvatar} alt="" />}
214
+ >
215
+ Ned Username
216
+ </MenuToggle>
217
+ )}
218
+ >
219
+ <DropdownList>{userDropdownItems}</DropdownList>
220
+ </Dropdown>
221
+ </ToolbarItem>
222
+ </ToolbarContent>
223
+ </Toolbar>
224
+ );
225
+
226
+ const masthead = (
227
+ <Masthead>
228
+ <MastheadToggle>
229
+ <PageToggleButton variant="plain" aria-label="Global navigation">
230
+ <BarsIcon />
231
+ </PageToggleButton>
232
+ </MastheadToggle>
233
+ <MastheadMain>
234
+ <MastheadBrand>
235
+ <Brand src={pfLogo} alt="PatternFly" heights={{ default: '36px' }} />
236
+ </MastheadBrand>
237
+ </MastheadMain>
238
+ <MastheadContent>{headerToolbar}</MastheadContent>
239
+ </Masthead>
240
+ );
241
+
242
+ const pageNav = (
243
+ <Nav onSelect={onNavSelect}>
244
+ <NavList>
245
+ <NavItem itemId={0} isActive={activeItem === 0} to="#system-panel">
246
+ System panel
247
+ </NavItem>
248
+ <NavItem itemId={1} isActive={activeItem === 1} to="#policy">
249
+ Policy
250
+ </NavItem>
251
+ <NavItem itemId={2} isActive={activeItem === 2} to="#auth">
252
+ Authentication
253
+ </NavItem>
254
+ <NavItem itemId={3} isActive={activeItem === 3} to="#network">
255
+ Network services
256
+ </NavItem>
257
+ <NavItem itemId={4} isActive={activeItem === 4} to="#server">
258
+ Server
259
+ </NavItem>
260
+ </NavList>
261
+ </Nav>
262
+ );
263
+
264
+ const pageContextSelector = (
265
+ <Dropdown
266
+ isOpen={isContextSelectorOpen}
267
+ onSelect={onContextSelectorSelect}
268
+ onOpenChange={(isOpen: boolean) => setIsContextSelectorOpen(isOpen)}
269
+ toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
270
+ <MenuToggle ref={toggleRef} onClick={onContextSelectorToggle} isExpanded={isContextSelectorOpen} isFullWidth>
271
+ Developer
272
+ </MenuToggle>
273
+ )}
274
+ >
275
+ <DropdownList>{contextSelectorDropdownItems}</DropdownList>
276
+ </Dropdown>
277
+ );
278
+
279
+ const sidebar = (
280
+ <PageSidebar>
281
+ <PageSidebarBody isContextSelector>{pageContextSelector}</PageSidebarBody>
282
+ <PageSidebarBody>{pageNav}</PageSidebarBody>
283
+ </PageSidebar>
284
+ );
285
+
286
+ const mainContainerId = 'main-content';
287
+
288
+ const pageSkipToContent = <SkipToContent href={`#${mainContainerId}`}>Skip to content</SkipToContent>;
289
+
290
+ return (
291
+ <Page
292
+ masthead={masthead}
293
+ sidebar={sidebar}
294
+ isManagedSidebar
295
+ skipToContent={pageSkipToContent}
296
+ breadcrumb={dashboardBreadcrumb}
297
+ mainContainerId={mainContainerId}
298
+ isBreadcrumbWidthLimited
299
+ >
300
+ <PageSection isWidthLimited>
301
+ <TextContent>
302
+ <Text component="h1">Main title</Text>
303
+ <Text component="p">This is a full page demo.</Text>
304
+ </TextContent>
305
+ </PageSection>
306
+ <PageSection isWidthLimited>
307
+ <Gallery hasGutter>
308
+ {Array.from({ length: 50 }).map((_value, index) => (
309
+ <GalleryItem key={index}>
310
+ <Card>
311
+ <CardBody>This is a card</CardBody>
312
+ </Card>
313
+ </GalleryItem>
314
+ ))}
315
+ </Gallery>
316
+ </PageSection>
317
+ </Page>
318
+ );
319
+ };