@patternfly/react-core 6.0.0-alpha.77 → 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.
- package/CHANGELOG.md +6 -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/ClipboardCopy/package.json +1 -1
- package/dist/dynamic/components/CodeBlock/package.json +1 -1
- package/dist/dynamic/components/Content/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/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/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/Chip/package.json +1 -1
- package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
- package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/deprecated/components/Modal/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/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/styles/package.json +1 -1
- package/dist/esm/components/JumpLinks/JumpLinks.d.ts.map +1 -1
- package/dist/esm/components/JumpLinks/JumpLinks.js +2 -7
- package/dist/esm/components/JumpLinks/JumpLinks.js.map +1 -1
- package/dist/esm/components/Page/PageSidebarBody.d.ts +2 -0
- package/dist/esm/components/Page/PageSidebarBody.d.ts.map +1 -1
- package/dist/esm/components/Page/PageSidebarBody.js +2 -2
- package/dist/esm/components/Page/PageSidebarBody.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/esm/components/Tabs/Tabs.js +2 -4
- package/dist/esm/components/Tabs/Tabs.js.map +1 -1
- package/dist/js/components/JumpLinks/JumpLinks.d.ts.map +1 -1
- package/dist/js/components/JumpLinks/JumpLinks.js +2 -7
- package/dist/js/components/JumpLinks/JumpLinks.js.map +1 -1
- package/dist/js/components/Page/PageSidebarBody.d.ts +2 -0
- package/dist/js/components/Page/PageSidebarBody.d.ts.map +1 -1
- package/dist/js/components/Page/PageSidebarBody.js +2 -2
- package/dist/js/components/Page/PageSidebarBody.js.map +1 -1
- package/dist/js/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/js/components/Tabs/Tabs.js +2 -4
- package/dist/js/components/Tabs/Tabs.js.map +1 -1
- package/dist/styles/assets/images/img_avatar-dark.svg +22 -16
- package/dist/styles/assets/images/img_avatar-light.svg +25 -18
- package/dist/styles/assets/pficon/pf-v6-pficon.woff2 +0 -0
- package/dist/styles/assets/pficon/pficon.scss +36 -0
- package/dist/styles/base-no-reset.css +936 -905
- package/dist/styles/base.css +936 -905
- package/dist/umd/assets/{output-BHzG532B.css → output-Dt8Et40Q.css} +1545 -2331
- package/dist/umd/react-core.min.js +3 -3
- package/helpers/package.json +1 -1
- package/layouts/package.json +1 -1
- package/next/package.json +1 -1
- package/package.json +6 -6
- package/src/components/JumpLinks/JumpLinks.tsx +6 -4
- package/src/components/JumpLinks/__tests__/__snapshots__/JumpLinks.test.tsx.snap +6 -6
- package/src/components/Page/PageSidebarBody.tsx +4 -0
- package/src/components/Page/examples/PageMultipleSidebarBody.tsx +6 -3
- package/src/components/Tabs/Tabs.tsx +6 -8
- package/src/components/Tabs/__tests__/__snapshots__/Tabs.test.tsx.snap +5 -3
- package/src/demos/Page.md +6 -0
- package/src/demos/examples/Page/PageContextSelector.tsx +319 -0
package/helpers/package.json
CHANGED
package/layouts/package.json
CHANGED
package/next/package.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/react-core",
|
|
3
|
-
"version": "6.0.0-alpha.
|
|
3
|
+
"version": "6.0.0-alpha.78",
|
|
4
4
|
"description": "This library provides a set of common React components for use with the PatternFly reference implementation.",
|
|
5
5
|
"main": "dist/js/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -47,15 +47,15 @@
|
|
|
47
47
|
"clean:exports": "node scripts/cleanDistExports.js"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@patternfly/react-icons": "^6.0.0-alpha.
|
|
51
|
-
"@patternfly/react-styles": "^6.0.0-alpha.
|
|
52
|
-
"@patternfly/react-tokens": "^6.0.0-alpha.
|
|
50
|
+
"@patternfly/react-icons": "^6.0.0-alpha.29",
|
|
51
|
+
"@patternfly/react-styles": "^6.0.0-alpha.28",
|
|
52
|
+
"@patternfly/react-tokens": "^6.0.0-alpha.28",
|
|
53
53
|
"focus-trap": "7.5.4",
|
|
54
54
|
"react-dropzone": "^14.2.3",
|
|
55
55
|
"tslib": "^2.6.2"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@patternfly/patternfly": "6.0.0-alpha.
|
|
58
|
+
"@patternfly/patternfly": "6.0.0-alpha.180",
|
|
59
59
|
"case-anything": "^2.1.13",
|
|
60
60
|
"css": "^3.0.0",
|
|
61
61
|
"fs-extra": "^11.2.0"
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"react": "^17 || ^18",
|
|
65
65
|
"react-dom": "^17 || ^18"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "4eb47e70a3ba0ce15d70b03b8cf9602f7a7215f3"
|
|
68
68
|
}
|
|
@@ -249,11 +249,13 @@ export const JumpLinks: React.FunctionComponent<JumpLinksProps> = ({
|
|
|
249
249
|
onClick={() => setIsExpanded(!isExpanded)}
|
|
250
250
|
aria-label={toggleAriaLabel}
|
|
251
251
|
aria-expanded={isExpanded}
|
|
252
|
+
icon={
|
|
253
|
+
<span className={styles.jumpLinksToggleIcon}>
|
|
254
|
+
<AngleRightIcon />
|
|
255
|
+
</span>
|
|
256
|
+
}
|
|
252
257
|
>
|
|
253
|
-
|
|
254
|
-
<AngleRightIcon />
|
|
255
|
-
</span>
|
|
256
|
-
{label && <span className={css(styles.jumpLinksToggleText)}> {label} </span>}
|
|
258
|
+
{label && label}
|
|
257
259
|
</Button>
|
|
258
260
|
</div>
|
|
259
261
|
)}
|
|
@@ -26,7 +26,7 @@ exports[`expandable vertical with subsection 1`] = `
|
|
|
26
26
|
type="button"
|
|
27
27
|
>
|
|
28
28
|
<span
|
|
29
|
-
class="pf-v6-c-
|
|
29
|
+
class="pf-v6-c-button__icon pf-m-start"
|
|
30
30
|
>
|
|
31
31
|
<span
|
|
32
32
|
class="pf-v6-c-jump-links__toggle-icon"
|
|
@@ -45,11 +45,11 @@ exports[`expandable vertical with subsection 1`] = `
|
|
|
45
45
|
/>
|
|
46
46
|
</svg>
|
|
47
47
|
</span>
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
48
|
+
</span>
|
|
49
|
+
<span
|
|
50
|
+
class="pf-v6-c-button__text"
|
|
51
|
+
>
|
|
52
|
+
Jump to section
|
|
53
53
|
</span>
|
|
54
54
|
</button>
|
|
55
55
|
</div>
|
|
@@ -11,6 +11,8 @@ export interface PageSidebarBodyProps extends React.HTMLProps<HTMLDivElement> {
|
|
|
11
11
|
usePageInsets?: boolean;
|
|
12
12
|
/** Flag indicating that the page sidebar body should fill the available vertical space. */
|
|
13
13
|
isFilled?: boolean;
|
|
14
|
+
/** Flag indicating that the page sidebar body is for a context selector/perspective switcher */
|
|
15
|
+
isContextSelector?: boolean;
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
export const PageSidebarBody: React.FunctionComponent<PageSidebarBodyProps> = ({
|
|
@@ -18,6 +20,7 @@ export const PageSidebarBody: React.FunctionComponent<PageSidebarBodyProps> = ({
|
|
|
18
20
|
className,
|
|
19
21
|
usePageInsets,
|
|
20
22
|
isFilled,
|
|
23
|
+
isContextSelector,
|
|
21
24
|
...props
|
|
22
25
|
}: PageSidebarBodyProps) => (
|
|
23
26
|
<div
|
|
@@ -26,6 +29,7 @@ export const PageSidebarBody: React.FunctionComponent<PageSidebarBodyProps> = ({
|
|
|
26
29
|
usePageInsets && styles.modifiers.pageInsets,
|
|
27
30
|
isFilled === false && styles.modifiers.noFill,
|
|
28
31
|
isFilled === true && styles.modifiers.fill,
|
|
32
|
+
isContextSelector === true && styles.modifiers.contextSelector,
|
|
29
33
|
className
|
|
30
34
|
)}
|
|
31
35
|
{...props}
|
|
@@ -55,10 +55,13 @@ export const PageMultipleSidebarBody: React.FunctionComponent = () => {
|
|
|
55
55
|
|
|
56
56
|
const sidebar = (
|
|
57
57
|
<PageSidebar isSidebarOpen={isSidebarOpen} id="multiple-sidebar-body-sidebar">
|
|
58
|
-
<PageSidebarBody
|
|
59
|
-
|
|
58
|
+
<PageSidebarBody isContextSelector>
|
|
59
|
+
First sidebar body (for a context selector/perspective switcher)
|
|
60
|
+
</PageSidebarBody>
|
|
61
|
+
<PageSidebarBody usePageInsets>Second sidebar body (with insets)</PageSidebarBody>
|
|
62
|
+
<PageSidebarBody isFilled={true}>Third sidebar body (with fill)</PageSidebarBody>
|
|
60
63
|
<PageSidebarBody isFilled={false} usePageInsets>
|
|
61
|
-
|
|
64
|
+
Fourth sidebar body (with insets and no fill)
|
|
62
65
|
</PageSidebarBody>
|
|
63
66
|
</PageSidebar>
|
|
64
67
|
);
|
|
@@ -521,15 +521,13 @@ class Tabs extends React.Component<TabsProps, TabsState> {
|
|
|
521
521
|
aria-expanded={isExpandedLocal}
|
|
522
522
|
id={`${randomId}-button`}
|
|
523
523
|
aria-labelledby={`${randomId}-text ${randomId}-button`}
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
</span>
|
|
528
|
-
{toggleText && (
|
|
529
|
-
<span className={css(styles.tabsToggleText)} id={`${randomId}-text`}>
|
|
530
|
-
{toggleText}
|
|
524
|
+
icon={
|
|
525
|
+
<span className={css(styles.tabsToggleIcon)}>
|
|
526
|
+
<AngleRightIcon />
|
|
531
527
|
</span>
|
|
532
|
-
|
|
528
|
+
}
|
|
529
|
+
>
|
|
530
|
+
{toggleText && <span id={`${randomId}-text`}>{toggleText}</span>}
|
|
533
531
|
</Button>
|
|
534
532
|
</div>
|
|
535
533
|
</div>
|
|
@@ -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-
|
|
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
|
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
|
+
};
|