@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.
Files changed (165) 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/Chip/package.json +1 -1
  21. package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
  22. package/dist/dynamic/components/CodeBlock/package.json +1 -1
  23. package/dist/dynamic/components/DataList/package.json +1 -1
  24. package/dist/dynamic/components/DatePicker/package.json +1 -1
  25. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  26. package/dist/dynamic/components/Divider/package.json +1 -1
  27. package/dist/dynamic/components/DragDrop/package.json +1 -1
  28. package/dist/dynamic/components/Drawer/package.json +1 -1
  29. package/dist/dynamic/components/Dropdown/package.json +1 -1
  30. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  31. package/dist/dynamic/components/EmptyState/package.json +1 -1
  32. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  33. package/dist/dynamic/components/FileUpload/package.json +1 -1
  34. package/dist/dynamic/components/Form/package.json +1 -1
  35. package/dist/dynamic/components/FormSelect/package.json +1 -1
  36. package/dist/dynamic/components/HelperText/package.json +1 -1
  37. package/dist/dynamic/components/Hint/package.json +1 -1
  38. package/dist/dynamic/components/Icon/package.json +1 -1
  39. package/dist/dynamic/components/InputGroup/package.json +1 -1
  40. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  41. package/dist/dynamic/components/Label/package.json +1 -1
  42. package/dist/dynamic/components/List/package.json +1 -1
  43. package/dist/dynamic/components/LoginPage/package.json +1 -1
  44. package/dist/dynamic/components/Masthead/package.json +1 -1
  45. package/dist/dynamic/components/Menu/package.json +1 -1
  46. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  47. package/dist/dynamic/components/Modal/package.json +1 -1
  48. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  49. package/dist/dynamic/components/Nav/package.json +1 -1
  50. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  51. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  52. package/dist/dynamic/components/NumberInput/package.json +1 -1
  53. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  54. package/dist/dynamic/components/Page/package.json +1 -1
  55. package/dist/dynamic/components/Pagination/package.json +1 -1
  56. package/dist/dynamic/components/Panel/package.json +1 -1
  57. package/dist/dynamic/components/Popover/package.json +1 -1
  58. package/dist/dynamic/components/Progress/package.json +1 -1
  59. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  60. package/dist/dynamic/components/Radio/package.json +1 -1
  61. package/dist/dynamic/components/SearchInput/package.json +1 -1
  62. package/dist/dynamic/components/Select/package.json +1 -1
  63. package/dist/dynamic/components/Sidebar/package.json +1 -1
  64. package/dist/dynamic/components/SimpleList/package.json +1 -1
  65. package/dist/dynamic/components/Skeleton/package.json +1 -1
  66. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  67. package/dist/dynamic/components/Slider/package.json +1 -1
  68. package/dist/dynamic/components/Spinner/package.json +1 -1
  69. package/dist/dynamic/components/Switch/package.json +1 -1
  70. package/dist/dynamic/components/Tabs/package.json +1 -1
  71. package/dist/dynamic/components/Text/package.json +1 -1
  72. package/dist/dynamic/components/TextArea/package.json +1 -1
  73. package/dist/dynamic/components/TextInput/package.json +1 -1
  74. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  75. package/dist/dynamic/components/Tile/package.json +1 -1
  76. package/dist/dynamic/components/TimePicker/package.json +1 -1
  77. package/dist/dynamic/components/Timestamp/package.json +1 -1
  78. package/dist/dynamic/components/Title/package.json +1 -1
  79. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  80. package/dist/dynamic/components/Toolbar/package.json +1 -1
  81. package/dist/dynamic/components/Tooltip/package.json +1 -1
  82. package/dist/dynamic/components/TreeView/package.json +1 -1
  83. package/dist/dynamic/components/Truncate/package.json +1 -1
  84. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  85. package/dist/dynamic/components/Wizard/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/ApplicationLauncher/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/ContextSelector/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Dropdown/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/OptionsMenu/package.json +1 -1
  90. package/dist/dynamic/deprecated/components/PageHeader/package.json +1 -1
  91. package/dist/dynamic/deprecated/components/Select/package.json +1 -1
  92. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  93. package/dist/dynamic/deprecated/components/package.json +1 -1
  94. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  95. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  96. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  97. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  98. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  99. package/dist/dynamic/helpers/constants/package.json +1 -1
  100. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  101. package/dist/dynamic/helpers/favorites/package.json +1 -1
  102. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  103. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  104. package/dist/dynamic/helpers/package.json +1 -1
  105. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  106. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  107. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  108. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  109. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  110. package/dist/dynamic/helpers/util/package.json +1 -1
  111. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  112. package/dist/dynamic/layouts/Flex/package.json +1 -1
  113. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  114. package/dist/dynamic/layouts/Grid/package.json +1 -1
  115. package/dist/dynamic/layouts/Level/package.json +1 -1
  116. package/dist/dynamic/layouts/Split/package.json +1 -1
  117. package/dist/dynamic/layouts/Stack/package.json +1 -1
  118. package/dist/dynamic/next/components/package.json +1 -1
  119. package/dist/esm/components/CalendarMonth/CalendarMonth.d.ts.map +1 -1
  120. package/dist/esm/components/CalendarMonth/CalendarMonth.js +15 -39
  121. package/dist/esm/components/CalendarMonth/CalendarMonth.js.map +1 -1
  122. package/dist/esm/components/InputGroup/InputGroup.d.ts.map +1 -1
  123. package/dist/esm/components/InputGroup/InputGroup.js +1 -51
  124. package/dist/esm/components/InputGroup/InputGroup.js.map +1 -1
  125. package/dist/esm/helpers/Popper/Popper.d.ts.map +1 -1
  126. package/dist/esm/helpers/Popper/Popper.js +3 -2
  127. package/dist/esm/helpers/Popper/Popper.js.map +1 -1
  128. package/dist/esm/helpers/datetimeUtils.d.ts +1 -1
  129. package/dist/esm/helpers/datetimeUtils.d.ts.map +1 -1
  130. package/dist/esm/helpers/datetimeUtils.js.map +1 -1
  131. package/dist/js/components/CalendarMonth/CalendarMonth.d.ts.map +1 -1
  132. package/dist/js/components/CalendarMonth/CalendarMonth.js +15 -39
  133. package/dist/js/components/CalendarMonth/CalendarMonth.js.map +1 -1
  134. package/dist/js/components/InputGroup/InputGroup.d.ts.map +1 -1
  135. package/dist/js/components/InputGroup/InputGroup.js +1 -51
  136. package/dist/js/components/InputGroup/InputGroup.js.map +1 -1
  137. package/dist/js/helpers/Popper/Popper.d.ts.map +1 -1
  138. package/dist/js/helpers/Popper/Popper.js +3 -2
  139. package/dist/js/helpers/Popper/Popper.js.map +1 -1
  140. package/dist/js/helpers/datetimeUtils.d.ts +1 -1
  141. package/dist/js/helpers/datetimeUtils.d.ts.map +1 -1
  142. package/dist/js/helpers/datetimeUtils.js.map +1 -1
  143. package/dist/umd/react-core.min.js +1 -1
  144. package/helpers/package.json +1 -1
  145. package/layouts/package.json +1 -1
  146. package/next/package.json +1 -1
  147. package/package.json +2 -2
  148. package/src/components/CalendarMonth/CalendarMonth.tsx +18 -43
  149. package/src/components/InputGroup/InputGroup.tsx +1 -53
  150. package/src/components/InputGroup/__tests__/InputGroup.test.tsx +7 -44
  151. package/src/components/NumberInput/__tests__/NumberInput.test.tsx +0 -1
  152. package/src/demos/Nav.md +10 -1673
  153. package/src/demos/examples/Nav/NavDefault.tsx +98 -0
  154. package/src/demos/examples/Nav/NavDrilldown.tsx +2 -0
  155. package/src/demos/examples/Nav/NavExpandable.tsx +124 -0
  156. package/src/demos/examples/Nav/NavFlyout.tsx +278 -0
  157. package/src/demos/examples/Nav/NavGrouped.tsx +99 -0
  158. package/src/demos/examples/Nav/NavHorizontal.tsx +237 -0
  159. package/src/demos/examples/Nav/NavHorizontalWithSubnav.tsx +297 -0
  160. package/src/demos/examples/Nav/NavManual.tsx +273 -0
  161. package/src/demos/examples/Nav/NavWithSubnav.tsx +142 -0
  162. package/src/demos/examples/Nav/deprecated/NavLight.tsx +96 -0
  163. package/src/demos/examples/Nav/deprecated/NavTertiary.tsx +92 -0
  164. package/src/helpers/Popper/Popper.tsx +3 -1
  165. 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
- const currentPopperContent = popper?.props?.children[1]?.props?.children;
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) {
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * @param {Date} date - A date to check the validity of
3
3
  */
4
- export const isValidDate = (date: Date) => Boolean(date && !isNaN(date as any));
4
+ export const isValidDate = (date?: Date) => Boolean(date && !isNaN(date as any));