@patternfly/react-core 5.2.0-prerelease.11 → 5.2.0-prerelease.13
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.
- package/CHANGELOG.md +13 -0
- package/components/package.json +1 -1
- package/deprecated/package.json +1 -1
- package/dist/dynamic/components/AboutModal/package.json +1 -1
- package/dist/dynamic/components/Accordion/package.json +1 -1
- package/dist/dynamic/components/ActionList/package.json +1 -1
- package/dist/dynamic/components/Alert/package.json +1 -1
- package/dist/dynamic/components/Avatar/package.json +1 -1
- package/dist/dynamic/components/BackToTop/package.json +1 -1
- package/dist/dynamic/components/Backdrop/package.json +1 -1
- package/dist/dynamic/components/BackgroundImage/package.json +1 -1
- package/dist/dynamic/components/Badge/package.json +1 -1
- package/dist/dynamic/components/Banner/package.json +1 -1
- package/dist/dynamic/components/Brand/package.json +1 -1
- package/dist/dynamic/components/Breadcrumb/package.json +1 -1
- package/dist/dynamic/components/Button/package.json +1 -1
- package/dist/dynamic/components/CalendarMonth/package.json +1 -1
- package/dist/dynamic/components/Card/package.json +1 -1
- package/dist/dynamic/components/Checkbox/package.json +1 -1
- package/dist/dynamic/components/Chip/package.json +1 -1
- package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
- package/dist/dynamic/components/CodeBlock/package.json +1 -1
- package/dist/dynamic/components/DataList/package.json +1 -1
- package/dist/dynamic/components/DatePicker/package.json +1 -1
- package/dist/dynamic/components/DescriptionList/package.json +1 -1
- package/dist/dynamic/components/Divider/package.json +1 -1
- package/dist/dynamic/components/DragDrop/package.json +1 -1
- package/dist/dynamic/components/Drawer/package.json +1 -1
- package/dist/dynamic/components/Dropdown/package.json +1 -1
- package/dist/dynamic/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/components/EmptyState/package.json +1 -1
- package/dist/dynamic/components/ExpandableSection/package.json +1 -1
- package/dist/dynamic/components/FileUpload/package.json +1 -1
- package/dist/dynamic/components/Form/package.json +1 -1
- package/dist/dynamic/components/FormSelect/package.json +1 -1
- package/dist/dynamic/components/HelperText/package.json +1 -1
- package/dist/dynamic/components/Hint/package.json +1 -1
- package/dist/dynamic/components/Icon/package.json +1 -1
- package/dist/dynamic/components/InputGroup/package.json +1 -1
- package/dist/dynamic/components/JumpLinks/package.json +1 -1
- package/dist/dynamic/components/Label/package.json +1 -1
- package/dist/dynamic/components/List/package.json +1 -1
- package/dist/dynamic/components/LoginPage/package.json +1 -1
- package/dist/dynamic/components/Masthead/package.json +1 -1
- package/dist/dynamic/components/Menu/package.json +1 -1
- package/dist/dynamic/components/MenuToggle/package.json +1 -1
- package/dist/dynamic/components/Modal/package.json +1 -1
- package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
- package/dist/dynamic/components/Nav/package.json +1 -1
- package/dist/dynamic/components/NotificationBadge/package.json +1 -1
- package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
- package/dist/dynamic/components/NumberInput/package.json +1 -1
- package/dist/dynamic/components/OverflowMenu/package.json +1 -1
- package/dist/dynamic/components/Page/package.json +1 -1
- package/dist/dynamic/components/Pagination/package.json +1 -1
- package/dist/dynamic/components/Panel/package.json +1 -1
- package/dist/dynamic/components/Popover/package.json +1 -1
- package/dist/dynamic/components/Progress/package.json +1 -1
- package/dist/dynamic/components/ProgressStepper/package.json +1 -1
- package/dist/dynamic/components/Radio/package.json +1 -1
- package/dist/dynamic/components/SearchInput/package.json +1 -1
- package/dist/dynamic/components/Select/package.json +1 -1
- package/dist/dynamic/components/Sidebar/package.json +1 -1
- package/dist/dynamic/components/SimpleList/package.json +1 -1
- package/dist/dynamic/components/Skeleton/package.json +1 -1
- package/dist/dynamic/components/SkipToContent/package.json +1 -1
- package/dist/dynamic/components/Slider/package.json +1 -1
- package/dist/dynamic/components/Spinner/package.json +1 -1
- package/dist/dynamic/components/Switch/package.json +1 -1
- package/dist/dynamic/components/Tabs/package.json +1 -1
- package/dist/dynamic/components/Text/package.json +1 -1
- package/dist/dynamic/components/TextArea/package.json +1 -1
- package/dist/dynamic/components/TextInput/package.json +1 -1
- package/dist/dynamic/components/TextInputGroup/package.json +1 -1
- package/dist/dynamic/components/Tile/package.json +1 -1
- package/dist/dynamic/components/TimePicker/package.json +1 -1
- package/dist/dynamic/components/Timestamp/package.json +1 -1
- package/dist/dynamic/components/Title/package.json +1 -1
- package/dist/dynamic/components/ToggleGroup/package.json +1 -1
- package/dist/dynamic/components/Toolbar/package.json +1 -1
- package/dist/dynamic/components/Tooltip/package.json +1 -1
- package/dist/dynamic/components/TreeView/package.json +1 -1
- package/dist/dynamic/components/Truncate/package.json +1 -1
- package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
- package/dist/dynamic/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/ApplicationLauncher/package.json +1 -1
- package/dist/dynamic/deprecated/components/ContextSelector/package.json +1 -1
- package/dist/dynamic/deprecated/components/Dropdown/package.json +1 -1
- package/dist/dynamic/deprecated/components/OptionsMenu/package.json +1 -1
- package/dist/dynamic/deprecated/components/PageHeader/package.json +1 -1
- package/dist/dynamic/deprecated/components/Select/package.json +1 -1
- package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/package.json +1 -1
- package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
- package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
- package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
- package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
- package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
- package/dist/dynamic/helpers/constants/package.json +1 -1
- package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
- package/dist/dynamic/helpers/favorites/package.json +1 -1
- package/dist/dynamic/helpers/fileUtils/package.json +1 -1
- package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
- package/dist/dynamic/helpers/package.json +1 -1
- package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
- package/dist/dynamic/helpers/typeUtils/package.json +1 -1
- package/dist/dynamic/helpers/useInterval/package.json +1 -1
- package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
- package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
- package/dist/dynamic/helpers/util/package.json +1 -1
- package/dist/dynamic/layouts/Bullseye/package.json +1 -1
- package/dist/dynamic/layouts/Flex/package.json +1 -1
- package/dist/dynamic/layouts/Gallery/package.json +1 -1
- package/dist/dynamic/layouts/Grid/package.json +1 -1
- package/dist/dynamic/layouts/Level/package.json +1 -1
- package/dist/dynamic/layouts/Split/package.json +1 -1
- package/dist/dynamic/layouts/Stack/package.json +1 -1
- package/dist/dynamic/next/components/package.json +1 -1
- package/dist/esm/components/CalendarMonth/CalendarMonth.d.ts.map +1 -1
- package/dist/esm/components/CalendarMonth/CalendarMonth.js +15 -39
- package/dist/esm/components/CalendarMonth/CalendarMonth.js.map +1 -1
- package/dist/esm/components/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/esm/components/InputGroup/InputGroup.js +1 -51
- package/dist/esm/components/InputGroup/InputGroup.js.map +1 -1
- package/dist/esm/helpers/Popper/Popper.d.ts.map +1 -1
- package/dist/esm/helpers/Popper/Popper.js +3 -2
- package/dist/esm/helpers/Popper/Popper.js.map +1 -1
- package/dist/esm/helpers/datetimeUtils.d.ts +1 -1
- package/dist/esm/helpers/datetimeUtils.d.ts.map +1 -1
- package/dist/esm/helpers/datetimeUtils.js.map +1 -1
- package/dist/js/components/CalendarMonth/CalendarMonth.d.ts.map +1 -1
- package/dist/js/components/CalendarMonth/CalendarMonth.js +15 -39
- package/dist/js/components/CalendarMonth/CalendarMonth.js.map +1 -1
- package/dist/js/components/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/js/components/InputGroup/InputGroup.js +1 -51
- package/dist/js/components/InputGroup/InputGroup.js.map +1 -1
- package/dist/js/helpers/Popper/Popper.d.ts.map +1 -1
- package/dist/js/helpers/Popper/Popper.js +3 -2
- package/dist/js/helpers/Popper/Popper.js.map +1 -1
- package/dist/js/helpers/datetimeUtils.d.ts +1 -1
- package/dist/js/helpers/datetimeUtils.d.ts.map +1 -1
- package/dist/js/helpers/datetimeUtils.js.map +1 -1
- package/dist/umd/react-core.min.js +1 -1
- package/helpers/package.json +1 -1
- package/layouts/package.json +1 -1
- package/next/package.json +1 -1
- package/package.json +2 -2
- package/src/components/CalendarMonth/CalendarMonth.tsx +18 -43
- package/src/components/InputGroup/InputGroup.tsx +1 -53
- package/src/components/InputGroup/__tests__/InputGroup.test.tsx +7 -44
- package/src/components/NumberInput/__tests__/NumberInput.test.tsx +0 -1
- package/src/demos/Nav.md +10 -1673
- package/src/demos/examples/Nav/NavDefault.tsx +98 -0
- package/src/demos/examples/Nav/NavDrilldown.tsx +2 -0
- package/src/demos/examples/Nav/NavExpandable.tsx +124 -0
- package/src/demos/examples/Nav/NavFlyout.tsx +278 -0
- package/src/demos/examples/Nav/NavGrouped.tsx +99 -0
- package/src/demos/examples/Nav/NavHorizontal.tsx +237 -0
- package/src/demos/examples/Nav/NavHorizontalWithSubnav.tsx +297 -0
- package/src/demos/examples/Nav/NavManual.tsx +273 -0
- package/src/demos/examples/Nav/NavWithSubnav.tsx +142 -0
- package/src/demos/examples/Nav/deprecated/NavLight.tsx +96 -0
- package/src/demos/examples/Nav/deprecated/NavTertiary.tsx +92 -0
- package/src/helpers/Popper/Popper.tsx +3 -1
- package/src/helpers/datetimeUtils.ts +1 -1
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
Avatar,
|
|
4
|
+
Brand,
|
|
5
|
+
Button,
|
|
6
|
+
ButtonVariant,
|
|
7
|
+
Card,
|
|
8
|
+
CardBody,
|
|
9
|
+
Divider,
|
|
10
|
+
Dropdown,
|
|
11
|
+
DropdownGroup,
|
|
12
|
+
DropdownItem,
|
|
13
|
+
DropdownList,
|
|
14
|
+
Gallery,
|
|
15
|
+
GalleryItem,
|
|
16
|
+
Masthead,
|
|
17
|
+
MastheadBrand,
|
|
18
|
+
MastheadContent,
|
|
19
|
+
MastheadMain,
|
|
20
|
+
MastheadToggle,
|
|
21
|
+
MenuToggle,
|
|
22
|
+
Nav,
|
|
23
|
+
NavItem,
|
|
24
|
+
NavList,
|
|
25
|
+
Page,
|
|
26
|
+
PageSection,
|
|
27
|
+
PageSectionVariants,
|
|
28
|
+
PageSidebar,
|
|
29
|
+
PageSidebarBody,
|
|
30
|
+
PageToggleButton,
|
|
31
|
+
SkipToContent,
|
|
32
|
+
TextContent,
|
|
33
|
+
Text,
|
|
34
|
+
Toolbar,
|
|
35
|
+
ToolbarContent,
|
|
36
|
+
ToolbarGroup,
|
|
37
|
+
ToolbarItem
|
|
38
|
+
} from '@patternfly/react-core';
|
|
39
|
+
import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
|
|
40
|
+
import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
|
|
41
|
+
import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
|
|
42
|
+
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
|
|
43
|
+
import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
|
|
44
|
+
import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
|
|
45
|
+
import imgAvatar from '@patternfly/react-core/src/components/assets/avatarImg.svg';
|
|
46
|
+
import pfLogo from '@patternfly/react-core/src/demos/assets/pf-logo.svg';
|
|
47
|
+
|
|
48
|
+
export const NavManual: React.FunctionComponent = () => {
|
|
49
|
+
const [isDropdownOpen, setIsDropdownOpen] = React.useState(false);
|
|
50
|
+
const [isKebabDropdownOpen, setIsKebabDropdownOpen] = React.useState(false);
|
|
51
|
+
const [isFullKebabDropdownOpen, setIsFullKebabDropdownOpen] = React.useState(false);
|
|
52
|
+
const [isMobileView, setIsMobileView] = React.useState(false);
|
|
53
|
+
const [isSidebarOpenDesktop, setIsSidebarOpenDesktop] = React.useState(true);
|
|
54
|
+
const [isSidebarOpenMobile, setIsSidebarOpenMobile] = React.useState(false);
|
|
55
|
+
const [activeItem, setActiveItem] = React.useState<string | number>(0);
|
|
56
|
+
|
|
57
|
+
const onNavSelect = (
|
|
58
|
+
_event: React.FormEvent<HTMLInputElement>,
|
|
59
|
+
selectedItem: {
|
|
60
|
+
groupId: number | string;
|
|
61
|
+
itemId: number | string;
|
|
62
|
+
to: string;
|
|
63
|
+
}
|
|
64
|
+
) => setActiveItem(selectedItem.itemId);
|
|
65
|
+
|
|
66
|
+
const onDropdownToggle = () => setIsDropdownOpen((prevState) => !prevState);
|
|
67
|
+
const onDropdownSelect = () => setIsDropdownOpen(false);
|
|
68
|
+
const onKebabDropdownToggle = () => setIsKebabDropdownOpen((prevState) => !prevState);
|
|
69
|
+
const onKebabDropdownSelect = () => setIsKebabDropdownOpen(false);
|
|
70
|
+
const onFullKebabToggle = () => setIsFullKebabDropdownOpen((prevState) => !prevState);
|
|
71
|
+
const onFullKebabSelect = () => setIsFullKebabDropdownOpen(false);
|
|
72
|
+
const onSidebarToggleDesktop = () => setIsSidebarOpenDesktop((prevState) => !prevState);
|
|
73
|
+
const onSidebarToggleMobile = () => setIsSidebarOpenMobile((prevState) => !prevState);
|
|
74
|
+
|
|
75
|
+
interface PageOptions {
|
|
76
|
+
mobileView: boolean;
|
|
77
|
+
windowSize: number;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const onPageResize = (_event: MouseEvent | TouchEvent | React.KeyboardEvent, { mobileView }: PageOptions) =>
|
|
81
|
+
setIsMobileView(mobileView);
|
|
82
|
+
|
|
83
|
+
const PageNav = (
|
|
84
|
+
<Nav onSelect={onNavSelect} aria-label="Nav">
|
|
85
|
+
<NavList>
|
|
86
|
+
{/* Preventing default click behavior on each NavItem for demo purposes only */}
|
|
87
|
+
<NavItem preventDefault itemId={0} isActive={activeItem === 0} to="#">
|
|
88
|
+
System Panel
|
|
89
|
+
</NavItem>
|
|
90
|
+
<NavItem preventDefault itemId={1} isActive={activeItem === 1} to="#">
|
|
91
|
+
Policy
|
|
92
|
+
</NavItem>
|
|
93
|
+
<NavItem preventDefault itemId={2} isActive={activeItem === 2} to="#">
|
|
94
|
+
Authentication
|
|
95
|
+
</NavItem>
|
|
96
|
+
<NavItem preventDefault itemId={3} isActive={activeItem === 3} to="#">
|
|
97
|
+
Network Services
|
|
98
|
+
</NavItem>
|
|
99
|
+
<NavItem preventDefault itemId={4} isActive={activeItem === 4} to="#">
|
|
100
|
+
Server
|
|
101
|
+
</NavItem>
|
|
102
|
+
</NavList>
|
|
103
|
+
</Nav>
|
|
104
|
+
);
|
|
105
|
+
const kebabDropdownItems = (
|
|
106
|
+
<>
|
|
107
|
+
<DropdownItem>
|
|
108
|
+
<CogIcon /> Settings
|
|
109
|
+
</DropdownItem>
|
|
110
|
+
<DropdownItem>
|
|
111
|
+
<HelpIcon /> Help
|
|
112
|
+
</DropdownItem>
|
|
113
|
+
</>
|
|
114
|
+
);
|
|
115
|
+
const userDropdownItems = (
|
|
116
|
+
<>
|
|
117
|
+
<DropdownItem key="group 2 profile">My profile</DropdownItem>
|
|
118
|
+
<DropdownItem key="group 2 user">User management</DropdownItem>
|
|
119
|
+
<DropdownItem key="group 2 logout">Logout</DropdownItem>
|
|
120
|
+
</>
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
const headerToolbar = (
|
|
124
|
+
<Toolbar id="toolbar" isFullHeight isStatic>
|
|
125
|
+
<ToolbarContent>
|
|
126
|
+
<ToolbarGroup
|
|
127
|
+
variant="icon-button-group"
|
|
128
|
+
align={{ default: 'alignRight' }}
|
|
129
|
+
spacer={{ default: 'spacerNone', md: 'spacerMd' }}
|
|
130
|
+
>
|
|
131
|
+
<ToolbarItem>
|
|
132
|
+
<Button aria-label="Notifications" variant={ButtonVariant.plain} icon={<BellIcon />} onClick={() => {}} />
|
|
133
|
+
</ToolbarItem>
|
|
134
|
+
<ToolbarGroup variant="icon-button-group" visibility={{ default: 'hidden', lg: 'visible' }}>
|
|
135
|
+
<ToolbarItem>
|
|
136
|
+
<Button aria-label="Settings" variant={ButtonVariant.plain} icon={<CogIcon />} />
|
|
137
|
+
</ToolbarItem>
|
|
138
|
+
<ToolbarItem>
|
|
139
|
+
<Button aria-label="Help" variant={ButtonVariant.plain} icon={<QuestionCircleIcon />} />
|
|
140
|
+
</ToolbarItem>
|
|
141
|
+
</ToolbarGroup>
|
|
142
|
+
<ToolbarItem visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}>
|
|
143
|
+
<Dropdown
|
|
144
|
+
isOpen={isKebabDropdownOpen}
|
|
145
|
+
onSelect={onKebabDropdownSelect}
|
|
146
|
+
onOpenChange={setIsKebabDropdownOpen}
|
|
147
|
+
popperProps={{ position: 'right' }}
|
|
148
|
+
toggle={(toggleRef) => (
|
|
149
|
+
<MenuToggle
|
|
150
|
+
ref={toggleRef}
|
|
151
|
+
isExpanded={isKebabDropdownOpen}
|
|
152
|
+
onClick={onKebabDropdownToggle}
|
|
153
|
+
variant="plain"
|
|
154
|
+
aria-label="Settings and help"
|
|
155
|
+
>
|
|
156
|
+
<EllipsisVIcon aria-hidden="true" />
|
|
157
|
+
</MenuToggle>
|
|
158
|
+
)}
|
|
159
|
+
>
|
|
160
|
+
<DropdownList>{kebabDropdownItems}</DropdownList>
|
|
161
|
+
</Dropdown>
|
|
162
|
+
</ToolbarItem>
|
|
163
|
+
<ToolbarItem visibility={{ md: 'hidden' }}>
|
|
164
|
+
<Dropdown
|
|
165
|
+
isOpen={isFullKebabDropdownOpen}
|
|
166
|
+
onSelect={onFullKebabSelect}
|
|
167
|
+
onOpenChange={setIsFullKebabDropdownOpen}
|
|
168
|
+
popperProps={{ position: 'right' }}
|
|
169
|
+
toggle={(toggleRef) => (
|
|
170
|
+
<MenuToggle
|
|
171
|
+
ref={toggleRef}
|
|
172
|
+
isExpanded={isFullKebabDropdownOpen}
|
|
173
|
+
onClick={onFullKebabToggle}
|
|
174
|
+
variant="plain"
|
|
175
|
+
aria-label="Toolbar menu"
|
|
176
|
+
>
|
|
177
|
+
<EllipsisVIcon aria-hidden="true" />
|
|
178
|
+
</MenuToggle>
|
|
179
|
+
)}
|
|
180
|
+
>
|
|
181
|
+
<DropdownGroup key="group 2" aria-label="User actions">
|
|
182
|
+
<DropdownList>{userDropdownItems}</DropdownList>
|
|
183
|
+
</DropdownGroup>
|
|
184
|
+
<Divider />
|
|
185
|
+
<DropdownList>{kebabDropdownItems}</DropdownList>
|
|
186
|
+
</Dropdown>
|
|
187
|
+
</ToolbarItem>
|
|
188
|
+
</ToolbarGroup>
|
|
189
|
+
<ToolbarItem visibility={{ default: 'hidden', md: 'visible' }}>
|
|
190
|
+
<Dropdown
|
|
191
|
+
isOpen={isDropdownOpen}
|
|
192
|
+
onSelect={onDropdownSelect}
|
|
193
|
+
onOpenChange={setIsDropdownOpen}
|
|
194
|
+
popperProps={{ position: 'right' }}
|
|
195
|
+
toggle={(toggleRef) => (
|
|
196
|
+
<MenuToggle
|
|
197
|
+
ref={toggleRef}
|
|
198
|
+
isExpanded={isDropdownOpen}
|
|
199
|
+
onClick={onDropdownToggle}
|
|
200
|
+
icon={<Avatar src={imgAvatar} alt="" />}
|
|
201
|
+
isFullHeight
|
|
202
|
+
>
|
|
203
|
+
Ned Username
|
|
204
|
+
</MenuToggle>
|
|
205
|
+
)}
|
|
206
|
+
>
|
|
207
|
+
<DropdownList>{userDropdownItems}</DropdownList>
|
|
208
|
+
</Dropdown>
|
|
209
|
+
</ToolbarItem>
|
|
210
|
+
</ToolbarContent>
|
|
211
|
+
</Toolbar>
|
|
212
|
+
);
|
|
213
|
+
const Header = (
|
|
214
|
+
<Masthead>
|
|
215
|
+
<MastheadToggle>
|
|
216
|
+
<PageToggleButton
|
|
217
|
+
onSidebarToggle={isMobileView ? onSidebarToggleMobile : onSidebarToggleDesktop}
|
|
218
|
+
variant="plain"
|
|
219
|
+
aria-label="Global navigation"
|
|
220
|
+
>
|
|
221
|
+
<BarsIcon />
|
|
222
|
+
</PageToggleButton>
|
|
223
|
+
</MastheadToggle>
|
|
224
|
+
<MastheadMain>
|
|
225
|
+
<MastheadBrand>
|
|
226
|
+
<Brand src={pfLogo} alt="PatternFly" heights={{ default: '36px' }} />
|
|
227
|
+
</MastheadBrand>
|
|
228
|
+
</MastheadMain>
|
|
229
|
+
<MastheadContent>{headerToolbar}</MastheadContent>
|
|
230
|
+
</Masthead>
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
const Sidebar = (
|
|
234
|
+
<PageSidebar isSidebarOpen={isMobileView ? isSidebarOpenMobile : isSidebarOpenDesktop}>
|
|
235
|
+
<PageSidebarBody>{PageNav}</PageSidebarBody>
|
|
236
|
+
</PageSidebar>
|
|
237
|
+
);
|
|
238
|
+
const pageId = 'main-content-page-layout-manual-nav';
|
|
239
|
+
const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to Content</SkipToContent>;
|
|
240
|
+
|
|
241
|
+
return (
|
|
242
|
+
<React.Fragment>
|
|
243
|
+
<Page
|
|
244
|
+
header={Header}
|
|
245
|
+
sidebar={Sidebar}
|
|
246
|
+
onPageResize={onPageResize}
|
|
247
|
+
skipToContent={PageSkipToContent}
|
|
248
|
+
mainContainerId={pageId}
|
|
249
|
+
>
|
|
250
|
+
<PageSection variant={PageSectionVariants.light}>
|
|
251
|
+
<TextContent>
|
|
252
|
+
<Text component="h1">Main title</Text>
|
|
253
|
+
<Text component="p">
|
|
254
|
+
Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
|
|
255
|
+
of its relative line height of 1.5.
|
|
256
|
+
</Text>
|
|
257
|
+
</TextContent>
|
|
258
|
+
</PageSection>
|
|
259
|
+
<PageSection>
|
|
260
|
+
<Gallery hasGutter>
|
|
261
|
+
{Array.from({ length: 10 }, (_value: any, index: React.Key) => (
|
|
262
|
+
<GalleryItem key={index}>
|
|
263
|
+
<Card>
|
|
264
|
+
<CardBody>This is a card</CardBody>
|
|
265
|
+
</Card>
|
|
266
|
+
</GalleryItem>
|
|
267
|
+
))}
|
|
268
|
+
</Gallery>
|
|
269
|
+
</PageSection>
|
|
270
|
+
</Page>
|
|
271
|
+
</React.Fragment>
|
|
272
|
+
);
|
|
273
|
+
};
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
Card,
|
|
4
|
+
CardBody,
|
|
5
|
+
Gallery,
|
|
6
|
+
GalleryItem,
|
|
7
|
+
Nav,
|
|
8
|
+
NavItem,
|
|
9
|
+
NavList,
|
|
10
|
+
Page,
|
|
11
|
+
PageSection,
|
|
12
|
+
PageSectionTypes,
|
|
13
|
+
PageSectionVariants,
|
|
14
|
+
PageSidebar,
|
|
15
|
+
PageSidebarBody,
|
|
16
|
+
SkipToContent,
|
|
17
|
+
TextContent,
|
|
18
|
+
Text
|
|
19
|
+
} from '@patternfly/react-core';
|
|
20
|
+
import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/DashboardWrapper';
|
|
21
|
+
import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
|
|
22
|
+
|
|
23
|
+
export const NavWithSubnav: React.FunctionComponent = () => {
|
|
24
|
+
const [activeItem, setActiveItem] = React.useState<string | number>(0);
|
|
25
|
+
const [activeSubNavItem, setActiveSubNavItem] = React.useState<string | number>(7);
|
|
26
|
+
|
|
27
|
+
const onNavSelect = (
|
|
28
|
+
_event: React.FormEvent<HTMLInputElement>,
|
|
29
|
+
selectedItem: {
|
|
30
|
+
groupId: number | string;
|
|
31
|
+
itemId: number | string;
|
|
32
|
+
to: string;
|
|
33
|
+
}
|
|
34
|
+
) => setActiveItem(selectedItem.itemId);
|
|
35
|
+
|
|
36
|
+
const onSubNavSelect = (
|
|
37
|
+
_event: React.FormEvent<HTMLInputElement>,
|
|
38
|
+
selectedItem: {
|
|
39
|
+
groupId: number | string;
|
|
40
|
+
itemId: number | string;
|
|
41
|
+
to: string;
|
|
42
|
+
}
|
|
43
|
+
) => setActiveSubNavItem(selectedItem.itemId);
|
|
44
|
+
|
|
45
|
+
const PageNav = (
|
|
46
|
+
<Nav onSelect={onNavSelect} aria-label="Nav">
|
|
47
|
+
<NavList>
|
|
48
|
+
{/* Preventing default click behavior on each NavItem for demo purposes only */}
|
|
49
|
+
<NavItem preventDefault itemId={0} isActive={activeItem === 0} to="#">
|
|
50
|
+
System Panel
|
|
51
|
+
</NavItem>
|
|
52
|
+
<NavItem preventDefault itemId={1} isActive={activeItem === 1} to="#">
|
|
53
|
+
Policy
|
|
54
|
+
</NavItem>
|
|
55
|
+
<NavItem preventDefault itemId={2} isActive={activeItem === 2} to="#">
|
|
56
|
+
Authentication
|
|
57
|
+
</NavItem>
|
|
58
|
+
<NavItem preventDefault itemId={3} isActive={activeItem === 3} to="#">
|
|
59
|
+
Network Services
|
|
60
|
+
</NavItem>
|
|
61
|
+
<NavItem preventDefault itemId={4} isActive={activeItem === 4} to="#">
|
|
62
|
+
Server
|
|
63
|
+
</NavItem>
|
|
64
|
+
</NavList>
|
|
65
|
+
</Nav>
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
const Sidebar = (
|
|
69
|
+
<PageSidebar>
|
|
70
|
+
<PageSidebarBody>{PageNav}</PageSidebarBody>
|
|
71
|
+
</PageSidebar>
|
|
72
|
+
);
|
|
73
|
+
const pageId = 'main-content-page-layout-default-nav';
|
|
74
|
+
const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
|
|
75
|
+
|
|
76
|
+
const SubNav = (
|
|
77
|
+
<Nav onSelect={onSubNavSelect} aria-label="Subnav" variant="horizontal-subnav">
|
|
78
|
+
<NavList>
|
|
79
|
+
<NavItem preventDefault itemId={7} isActive={activeSubNavItem === 7} to="#">
|
|
80
|
+
Horizontal subnav item 1
|
|
81
|
+
</NavItem>
|
|
82
|
+
<NavItem preventDefault itemId={8} isActive={activeSubNavItem === 8} to="#">
|
|
83
|
+
Horizontal subnav item 2
|
|
84
|
+
</NavItem>
|
|
85
|
+
<NavItem preventDefault itemId={9} isActive={activeSubNavItem === 9} to="#">
|
|
86
|
+
Horizontal subnav item 3
|
|
87
|
+
</NavItem>
|
|
88
|
+
<NavItem preventDefault itemId={10} isActive={activeSubNavItem === 10} to="#">
|
|
89
|
+
Horizontal subnav item 4
|
|
90
|
+
</NavItem>
|
|
91
|
+
<NavItem preventDefault itemId={11} isActive={activeSubNavItem === 11} to="#">
|
|
92
|
+
Horizontal subnav item 5
|
|
93
|
+
</NavItem>
|
|
94
|
+
<NavItem preventDefault itemId={12} isActive={activeSubNavItem === 12} to="#">
|
|
95
|
+
Horizontal subnav item 6
|
|
96
|
+
</NavItem>
|
|
97
|
+
<NavItem preventDefault itemId={13} isActive={activeSubNavItem === 13} to="#">
|
|
98
|
+
Horizontal subnav item 7
|
|
99
|
+
</NavItem>
|
|
100
|
+
</NavList>
|
|
101
|
+
</Nav>
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
return (
|
|
105
|
+
<React.Fragment>
|
|
106
|
+
<Page
|
|
107
|
+
header={<DashboardHeader />}
|
|
108
|
+
sidebar={Sidebar}
|
|
109
|
+
isManagedSidebar
|
|
110
|
+
skipToContent={PageSkipToContent}
|
|
111
|
+
mainContainerId={pageId}
|
|
112
|
+
>
|
|
113
|
+
<PageSection type={PageSectionTypes.subNav} isWidthLimited>
|
|
114
|
+
{SubNav}
|
|
115
|
+
</PageSection>
|
|
116
|
+
<PageSection type={PageSectionTypes.breadcrumb} isWidthLimited>
|
|
117
|
+
{DashboardBreadcrumb}
|
|
118
|
+
</PageSection>
|
|
119
|
+
<PageSection variant={PageSectionVariants.light}>
|
|
120
|
+
<TextContent>
|
|
121
|
+
<Text component="h1">Main title</Text>
|
|
122
|
+
<Text component="p">
|
|
123
|
+
Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
|
|
124
|
+
of it’s relative line height of 1.5.
|
|
125
|
+
</Text>
|
|
126
|
+
</TextContent>
|
|
127
|
+
</PageSection>
|
|
128
|
+
<PageSection>
|
|
129
|
+
<Gallery hasGutter>
|
|
130
|
+
{Array.from({ length: 10 }, (_value: any, index: React.Key) => (
|
|
131
|
+
<GalleryItem key={index}>
|
|
132
|
+
<Card>
|
|
133
|
+
<CardBody>This is a card</CardBody>
|
|
134
|
+
</Card>
|
|
135
|
+
</GalleryItem>
|
|
136
|
+
))}
|
|
137
|
+
</Gallery>
|
|
138
|
+
</PageSection>
|
|
139
|
+
</Page>
|
|
140
|
+
</React.Fragment>
|
|
141
|
+
);
|
|
142
|
+
};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
Card,
|
|
4
|
+
CardBody,
|
|
5
|
+
Gallery,
|
|
6
|
+
GalleryItem,
|
|
7
|
+
Nav,
|
|
8
|
+
NavItem,
|
|
9
|
+
NavList,
|
|
10
|
+
Page,
|
|
11
|
+
PageSection,
|
|
12
|
+
PageSectionVariants,
|
|
13
|
+
PageSidebar,
|
|
14
|
+
PageSidebarBody,
|
|
15
|
+
SkipToContent,
|
|
16
|
+
TextContent,
|
|
17
|
+
Text
|
|
18
|
+
} from '@patternfly/react-core';
|
|
19
|
+
import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
|
|
20
|
+
|
|
21
|
+
export const NavLight: React.FunctionComponent = () => {
|
|
22
|
+
const [activeItem, setActiveItem] = React.useState<string | number>(0);
|
|
23
|
+
|
|
24
|
+
const onNavSelect = (
|
|
25
|
+
_event: React.FormEvent<HTMLInputElement>,
|
|
26
|
+
selectedItem: {
|
|
27
|
+
groupId: number | string;
|
|
28
|
+
itemId: number | string;
|
|
29
|
+
to: string;
|
|
30
|
+
}
|
|
31
|
+
) => setActiveItem(selectedItem.itemId);
|
|
32
|
+
|
|
33
|
+
const PageNav = (
|
|
34
|
+
<Nav onSelect={onNavSelect} aria-label="Nav" theme="light">
|
|
35
|
+
<NavList>
|
|
36
|
+
{/* Preventing default click behavior on each NavItem for demo purposes only */}
|
|
37
|
+
<NavItem preventDefault itemId={0} isActive={activeItem === 0} to="#">
|
|
38
|
+
System Panel
|
|
39
|
+
</NavItem>
|
|
40
|
+
<NavItem preventDefault itemId={1} isActive={activeItem === 1} to="#">
|
|
41
|
+
Policy
|
|
42
|
+
</NavItem>
|
|
43
|
+
<NavItem preventDefault itemId={2} isActive={activeItem === 2} to="#">
|
|
44
|
+
Authentication
|
|
45
|
+
</NavItem>
|
|
46
|
+
<NavItem preventDefault itemId={3} isActive={activeItem === 3} to="#">
|
|
47
|
+
Network Services
|
|
48
|
+
</NavItem>
|
|
49
|
+
<NavItem preventDefault itemId={4} isActive={activeItem === 4} to="#">
|
|
50
|
+
Server
|
|
51
|
+
</NavItem>
|
|
52
|
+
</NavList>
|
|
53
|
+
</Nav>
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
const Sidebar = (
|
|
57
|
+
<PageSidebar theme="light">
|
|
58
|
+
<PageSidebarBody>{PageNav}</PageSidebarBody>
|
|
59
|
+
</PageSidebar>
|
|
60
|
+
);
|
|
61
|
+
const pageId = 'main-content-page-layout-simple-nav';
|
|
62
|
+
const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to Content</SkipToContent>;
|
|
63
|
+
|
|
64
|
+
return (
|
|
65
|
+
<React.Fragment>
|
|
66
|
+
<Page
|
|
67
|
+
header={<DashboardHeader />}
|
|
68
|
+
sidebar={Sidebar}
|
|
69
|
+
isManagedSidebar
|
|
70
|
+
skipToContent={PageSkipToContent}
|
|
71
|
+
mainContainerId={pageId}
|
|
72
|
+
>
|
|
73
|
+
<PageSection variant={PageSectionVariants.light}>
|
|
74
|
+
<TextContent>
|
|
75
|
+
<Text component="h1">Main title</Text>
|
|
76
|
+
<Text component="p">
|
|
77
|
+
Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
|
|
78
|
+
of its relative line height of 1.5.
|
|
79
|
+
</Text>
|
|
80
|
+
</TextContent>
|
|
81
|
+
</PageSection>
|
|
82
|
+
<PageSection>
|
|
83
|
+
<Gallery hasGutter>
|
|
84
|
+
{Array.from({ length: 10 }, (_value: any, index: React.Key) => (
|
|
85
|
+
<GalleryItem key={index}>
|
|
86
|
+
<Card>
|
|
87
|
+
<CardBody>This is a card</CardBody>
|
|
88
|
+
</Card>
|
|
89
|
+
</GalleryItem>
|
|
90
|
+
))}
|
|
91
|
+
</Gallery>
|
|
92
|
+
</PageSection>
|
|
93
|
+
</Page>
|
|
94
|
+
</React.Fragment>
|
|
95
|
+
);
|
|
96
|
+
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
Card,
|
|
4
|
+
CardBody,
|
|
5
|
+
Gallery,
|
|
6
|
+
GalleryItem,
|
|
7
|
+
Nav,
|
|
8
|
+
NavItem,
|
|
9
|
+
NavList,
|
|
10
|
+
Page,
|
|
11
|
+
PageSection,
|
|
12
|
+
PageSectionVariants,
|
|
13
|
+
SkipToContent,
|
|
14
|
+
TextContent,
|
|
15
|
+
Text
|
|
16
|
+
} from '@patternfly/react-core';
|
|
17
|
+
import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/DashboardWrapper';
|
|
18
|
+
import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
|
|
19
|
+
|
|
20
|
+
export const NavTertiary: React.FunctionComponent = () => {
|
|
21
|
+
const [activeItem, setActiveItem] = React.useState<string | number>(0);
|
|
22
|
+
|
|
23
|
+
const onNavSelect = (
|
|
24
|
+
_event: React.FormEvent<HTMLInputElement>,
|
|
25
|
+
selectedItem: {
|
|
26
|
+
groupId: number | string;
|
|
27
|
+
itemId: number | string;
|
|
28
|
+
to: string;
|
|
29
|
+
}
|
|
30
|
+
) => setActiveItem(selectedItem.itemId);
|
|
31
|
+
|
|
32
|
+
const PageNav = (
|
|
33
|
+
<Nav variant="tertiary" onSelect={onNavSelect} aria-label="Nav">
|
|
34
|
+
<NavList>
|
|
35
|
+
{/* Preventing default click behavior on each NavItem for demo purposes only */}
|
|
36
|
+
<NavItem preventDefault itemId={0} isActive={activeItem === 0} to="#">
|
|
37
|
+
System Panel
|
|
38
|
+
</NavItem>
|
|
39
|
+
<NavItem preventDefault itemId={1} isActive={activeItem === 1} to="#">
|
|
40
|
+
Policy
|
|
41
|
+
</NavItem>
|
|
42
|
+
<NavItem preventDefault itemId={2} isActive={activeItem === 2} to="#">
|
|
43
|
+
Authentication
|
|
44
|
+
</NavItem>
|
|
45
|
+
<NavItem preventDefault itemId={3} isActive={activeItem === 3} to="#">
|
|
46
|
+
Network Services
|
|
47
|
+
</NavItem>
|
|
48
|
+
<NavItem preventDefault itemId={4} isActive={activeItem === 4} to="#">
|
|
49
|
+
Server
|
|
50
|
+
</NavItem>
|
|
51
|
+
</NavList>
|
|
52
|
+
</Nav>
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
const pageId = 'main-content-page-layout-tertiary-nav';
|
|
56
|
+
const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<React.Fragment>
|
|
60
|
+
<Page
|
|
61
|
+
header={<DashboardHeader />}
|
|
62
|
+
breadcrumb={DashboardBreadcrumb}
|
|
63
|
+
tertiaryNav={PageNav}
|
|
64
|
+
isManagedSidebar
|
|
65
|
+
isTertiaryNavWidthLimited
|
|
66
|
+
skipToContent={PageSkipToContent}
|
|
67
|
+
mainContainerId={pageId}
|
|
68
|
+
>
|
|
69
|
+
<PageSection variant={PageSectionVariants.light}>
|
|
70
|
+
<TextContent>
|
|
71
|
+
<Text component="h1">Main title</Text>
|
|
72
|
+
<Text component="p">
|
|
73
|
+
Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
|
|
74
|
+
of its relative line height of 1.5.
|
|
75
|
+
</Text>
|
|
76
|
+
</TextContent>
|
|
77
|
+
</PageSection>
|
|
78
|
+
<PageSection>
|
|
79
|
+
<Gallery hasGutter>
|
|
80
|
+
{Array.from({ length: 10 }, (_value: any, index: React.Key) => (
|
|
81
|
+
<GalleryItem key={index}>
|
|
82
|
+
<Card>
|
|
83
|
+
<CardBody>This is a card</CardBody>
|
|
84
|
+
</Card>
|
|
85
|
+
</GalleryItem>
|
|
86
|
+
))}
|
|
87
|
+
</Gallery>
|
|
88
|
+
</PageSection>
|
|
89
|
+
</Page>
|
|
90
|
+
</React.Fragment>
|
|
91
|
+
);
|
|
92
|
+
};
|
|
@@ -458,7 +458,9 @@ export const Popper: React.FunctionComponent<PopperProps> = ({
|
|
|
458
458
|
* TODO: Investigate into 3rd party libraries for a less limited/specific solution
|
|
459
459
|
*/
|
|
460
460
|
React.useEffect(() => {
|
|
461
|
-
|
|
461
|
+
// currentPopperContent = {tooltip children} || {dropdown children}
|
|
462
|
+
const currentPopperContent =
|
|
463
|
+
popper?.props?.children[1]?.props?.children || popper?.props?.children?.props?.children;
|
|
462
464
|
setPopperContent(currentPopperContent);
|
|
463
465
|
|
|
464
466
|
if (currentPopperContent && popperContent && currentPopperContent !== popperContent) {
|