@patternfly/react-core 5.2.0-prerelease.9 → 6.0.0-alpha.2
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 +129 -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/Chip/Chip.d.ts.map +1 -1
- package/dist/esm/components/Chip/Chip.js +2 -2
- package/dist/esm/components/Chip/Chip.js.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopy.d.ts +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.d.ts.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.js +2 -2
- package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.js.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopyToggle.js +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopyToggle.js.map +1 -1
- package/dist/esm/components/Drawer/DrawerPanelContent.js +4 -4
- package/dist/esm/components/Drawer/DrawerPanelContent.js.map +1 -1
- package/dist/esm/components/Dropdown/Dropdown.d.ts +2 -0
- package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/components/ExpandableSection/ExpandableSection.js +1 -1
- package/dist/esm/components/ExpandableSection/ExpandableSection.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/components/Masthead/Masthead.d.ts +0 -2
- package/dist/esm/components/Masthead/Masthead.d.ts.map +1 -1
- package/dist/esm/components/Masthead/Masthead.js +3 -3
- package/dist/esm/components/Masthead/Masthead.js.map +1 -1
- package/dist/esm/components/Menu/Menu.d.ts.map +1 -1
- package/dist/esm/components/Menu/Menu.js +2 -1
- package/dist/esm/components/Menu/Menu.js.map +1 -1
- package/dist/esm/components/Menu/MenuContainer.d.ts +2 -0
- package/dist/esm/components/Menu/MenuContainer.d.ts.map +1 -1
- package/dist/esm/components/Menu/MenuContainer.js.map +1 -1
- package/dist/esm/components/Nav/NavExpandable.d.ts +3 -3
- package/dist/esm/components/Nav/NavExpandable.d.ts.map +1 -1
- package/dist/esm/components/Nav/NavExpandable.js +2 -2
- package/dist/esm/components/Nav/NavExpandable.js.map +1 -1
- package/dist/esm/components/Nav/NavItem.d.ts +2 -0
- package/dist/esm/components/Nav/NavItem.d.ts.map +1 -1
- package/dist/esm/components/Nav/NavItem.js +2 -2
- package/dist/esm/components/Nav/NavItem.js.map +1 -1
- package/dist/esm/components/Nav/NavList.js +3 -3
- package/dist/esm/components/Nav/NavList.js.map +1 -1
- package/dist/esm/components/NotificationBadge/NotificationBadge.js +1 -1
- package/dist/esm/components/NotificationBadge/NotificationBadge.js.map +1 -1
- package/dist/esm/components/Page/PageSection.d.ts +2 -5
- package/dist/esm/components/Page/PageSection.d.ts.map +1 -1
- package/dist/esm/components/Page/PageSection.js +1 -7
- package/dist/esm/components/Page/PageSection.js.map +1 -1
- package/dist/esm/components/Page/PageSidebar.d.ts +0 -2
- package/dist/esm/components/Page/PageSidebar.d.ts.map +1 -1
- package/dist/esm/components/Page/PageSidebar.js +2 -2
- package/dist/esm/components/Page/PageSidebar.js.map +1 -1
- package/dist/esm/components/SearchInput/SearchInput.d.ts +2 -0
- package/dist/esm/components/SearchInput/SearchInput.d.ts.map +1 -1
- package/dist/esm/components/SearchInput/SearchInput.js +2 -2
- package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
- package/dist/esm/components/Select/Select.d.ts +2 -0
- package/dist/esm/components/Select/Select.d.ts.map +1 -1
- package/dist/esm/components/Select/Select.js.map +1 -1
- package/dist/esm/components/Slider/Slider.d.ts.map +1 -1
- package/dist/esm/components/Slider/Slider.js +2 -1
- package/dist/esm/components/Slider/Slider.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.js +3 -3
- package/dist/esm/components/Tabs/Tabs.js.map +1 -1
- package/dist/esm/demos/DashboardWrapper.js +1 -1
- package/dist/esm/demos/DashboardWrapper.js.map +1 -1
- package/dist/esm/deprecated/components/PageHeader/PageHeaderToolsItem.d.ts +0 -2
- package/dist/esm/deprecated/components/PageHeader/PageHeaderToolsItem.d.ts.map +1 -1
- package/dist/esm/deprecated/components/PageHeader/PageHeaderToolsItem.js +2 -2
- package/dist/esm/deprecated/components/PageHeader/PageHeaderToolsItem.js.map +1 -1
- package/dist/esm/helpers/Popper/Popper.d.ts +2 -1
- package/dist/esm/helpers/Popper/Popper.d.ts.map +1 -1
- package/dist/esm/helpers/Popper/Popper.js +7 -16
- 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/esm/helpers/util.d.ts +9 -0
- package/dist/esm/helpers/util.d.ts.map +1 -1
- package/dist/esm/helpers/util.js +18 -0
- package/dist/esm/helpers/util.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/Chip/Chip.d.ts.map +1 -1
- package/dist/js/components/Chip/Chip.js +2 -2
- package/dist/js/components/Chip/Chip.js.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopy.d.ts +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopyButton.d.ts.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopyButton.js +2 -2
- package/dist/js/components/ClipboardCopy/ClipboardCopyButton.js.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopyToggle.js +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopyToggle.js.map +1 -1
- package/dist/js/components/Drawer/DrawerPanelContent.js +3 -3
- package/dist/js/components/Drawer/DrawerPanelContent.js.map +1 -1
- package/dist/js/components/Dropdown/Dropdown.d.ts +2 -0
- package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/js/components/ExpandableSection/ExpandableSection.js +1 -1
- package/dist/js/components/ExpandableSection/ExpandableSection.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/components/Masthead/Masthead.d.ts +0 -2
- package/dist/js/components/Masthead/Masthead.d.ts.map +1 -1
- package/dist/js/components/Masthead/Masthead.js +3 -3
- package/dist/js/components/Masthead/Masthead.js.map +1 -1
- package/dist/js/components/Menu/Menu.d.ts.map +1 -1
- package/dist/js/components/Menu/Menu.js +2 -1
- package/dist/js/components/Menu/Menu.js.map +1 -1
- package/dist/js/components/Menu/MenuContainer.d.ts +2 -0
- package/dist/js/components/Menu/MenuContainer.d.ts.map +1 -1
- package/dist/js/components/Menu/MenuContainer.js.map +1 -1
- package/dist/js/components/Nav/NavExpandable.d.ts +3 -3
- package/dist/js/components/Nav/NavExpandable.d.ts.map +1 -1
- package/dist/js/components/Nav/NavExpandable.js +2 -2
- package/dist/js/components/Nav/NavExpandable.js.map +1 -1
- package/dist/js/components/Nav/NavItem.d.ts +2 -0
- package/dist/js/components/Nav/NavItem.d.ts.map +1 -1
- package/dist/js/components/Nav/NavItem.js +2 -2
- package/dist/js/components/Nav/NavItem.js.map +1 -1
- package/dist/js/components/Nav/NavList.js +2 -2
- package/dist/js/components/Nav/NavList.js.map +1 -1
- package/dist/js/components/NotificationBadge/NotificationBadge.js +1 -1
- package/dist/js/components/NotificationBadge/NotificationBadge.js.map +1 -1
- package/dist/js/components/Page/PageSection.d.ts +2 -5
- package/dist/js/components/Page/PageSection.d.ts.map +1 -1
- package/dist/js/components/Page/PageSection.js +1 -7
- package/dist/js/components/Page/PageSection.js.map +1 -1
- package/dist/js/components/Page/PageSidebar.d.ts +0 -2
- package/dist/js/components/Page/PageSidebar.d.ts.map +1 -1
- package/dist/js/components/Page/PageSidebar.js +2 -2
- package/dist/js/components/Page/PageSidebar.js.map +1 -1
- package/dist/js/components/SearchInput/SearchInput.d.ts +2 -0
- package/dist/js/components/SearchInput/SearchInput.d.ts.map +1 -1
- package/dist/js/components/SearchInput/SearchInput.js +2 -2
- package/dist/js/components/SearchInput/SearchInput.js.map +1 -1
- package/dist/js/components/Select/Select.d.ts +2 -0
- package/dist/js/components/Select/Select.d.ts.map +1 -1
- package/dist/js/components/Select/Select.js.map +1 -1
- package/dist/js/components/Slider/Slider.d.ts.map +1 -1
- package/dist/js/components/Slider/Slider.js +2 -1
- package/dist/js/components/Slider/Slider.js.map +1 -1
- package/dist/js/components/Tabs/Tabs.js +2 -2
- package/dist/js/components/Tabs/Tabs.js.map +1 -1
- package/dist/js/demos/DashboardWrapper.js +1 -1
- package/dist/js/demos/DashboardWrapper.js.map +1 -1
- package/dist/js/deprecated/components/PageHeader/PageHeaderToolsItem.d.ts +0 -2
- package/dist/js/deprecated/components/PageHeader/PageHeaderToolsItem.d.ts.map +1 -1
- package/dist/js/deprecated/components/PageHeader/PageHeaderToolsItem.js +2 -2
- package/dist/js/deprecated/components/PageHeader/PageHeaderToolsItem.js.map +1 -1
- package/dist/js/helpers/Popper/Popper.d.ts +2 -1
- package/dist/js/helpers/Popper/Popper.d.ts.map +1 -1
- package/dist/js/helpers/Popper/Popper.js +9 -19
- 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/js/helpers/util.d.ts +9 -0
- package/dist/js/helpers/util.d.ts.map +1 -1
- package/dist/js/helpers/util.js +20 -1
- package/dist/js/helpers/util.js.map +1 -1
- package/dist/styles/assets/images/logo__pf--reverse-on-md.svg +1 -1
- package/dist/styles/assets/images/pf-c-brand__logo-on-sm.svg +1 -1
- package/dist/styles/base-no-reset.css +849 -0
- package/dist/styles/base.css +861 -13
- 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 +8 -7
- package/src/components/CalendarMonth/CalendarMonth.tsx +18 -43
- package/src/components/Checkbox/__tests__/Checkbox.test.tsx +223 -69
- package/src/components/Checkbox/__tests__/__snapshots__/Checkbox.test.tsx.snap +3 -198
- package/src/components/Chip/Chip.tsx +2 -1
- package/src/components/Chip/__tests__/Chip.test.tsx +249 -32
- package/src/components/Chip/__tests__/ChipGroup.test.tsx +288 -61
- package/src/components/Chip/__tests__/__snapshots__/Chip.test.tsx.snap +9 -209
- package/src/components/Chip/__tests__/__snapshots__/ChipGroup.test.tsx.snap +2 -313
- package/src/components/ClipboardCopy/ClipboardCopy.tsx +1 -1
- package/src/components/ClipboardCopy/ClipboardCopyButton.tsx +2 -0
- package/src/components/ClipboardCopy/ClipboardCopyToggle.tsx +1 -1
- package/src/components/ClipboardCopy/__tests__/ClipboardCopy.test.tsx +344 -0
- package/src/components/ClipboardCopy/__tests__/ClipboardCopyAction.test.tsx +37 -0
- package/src/components/ClipboardCopy/__tests__/ClipboardCopyButton.test.tsx +136 -19
- package/src/components/ClipboardCopy/__tests__/ClipboardCopyExpanded.test.tsx +71 -14
- package/src/components/ClipboardCopy/__tests__/ClipboardCopyToggle.test.tsx +78 -34
- package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopy.test.tsx.snap +57 -0
- package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyAction.test.tsx.snap +11 -0
- package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyButton.test.tsx.snap +50 -24
- package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyExpanded.test.tsx.snap +3 -23
- package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyToggle.test.tsx.snap +5 -6
- package/src/components/Drawer/DrawerPanelContent.tsx +4 -4
- package/src/components/Dropdown/Dropdown.tsx +2 -0
- package/src/components/ExpandableSection/ExpandableSection.tsx +1 -1
- package/src/components/InputGroup/InputGroup.tsx +1 -53
- package/src/components/InputGroup/__tests__/InputGroup.test.tsx +7 -44
- package/src/components/Masthead/Masthead.tsx +0 -5
- package/src/components/Masthead/examples/Masthead.md +0 -44
- package/src/components/Menu/Menu.tsx +2 -1
- package/src/components/Menu/MenuContainer.tsx +2 -0
- package/src/components/Nav/NavExpandable.tsx +5 -5
- package/src/components/Nav/NavItem.tsx +4 -1
- package/src/components/Nav/NavList.tsx +3 -3
- package/src/components/Nav/examples/Nav.md +8 -0
- package/src/components/Nav/examples/NavExpandableThirdLevel.tsx +1 -1
- package/src/components/Nav/examples/NavLinkText.tsx +109 -0
- package/src/components/Nav/examples/nav.css +1 -0
- package/src/components/NotificationBadge/NotificationBadge.tsx +1 -1
- package/src/components/NumberInput/__tests__/NumberInput.test.tsx +0 -1
- package/src/components/Page/PageSection.tsx +3 -9
- package/src/components/Page/PageSidebar.tsx +0 -4
- package/src/components/Page/__tests__/Generated/PageSidebar.test.tsx +1 -1
- package/src/components/Page/__tests__/Page.test.tsx +1 -40
- package/src/components/Page/__tests__/__snapshots__/Page.test.tsx.snap +0 -195
- package/src/components/Page/examples/PageGroupSection.tsx +3 -4
- package/src/components/Page/examples/PageHorizontalNav.tsx +3 -4
- package/src/components/Page/examples/PageMainSectionPadding.tsx +2 -7
- package/src/components/Page/examples/PageMultipleSidebarBody.tsx +3 -4
- package/src/components/Page/examples/PageTertiaryNav.tsx +3 -4
- package/src/components/Page/examples/PageUncontrolledNav.tsx +3 -4
- package/src/components/Page/examples/PageVerticalNav.tsx +3 -4
- package/src/components/SearchInput/SearchInput.tsx +5 -1
- package/src/components/SearchInput/__tests__/SearchInput.test.tsx +8 -0
- package/src/components/Select/Select.tsx +2 -0
- package/src/components/Slider/Slider.tsx +2 -1
- package/src/components/Tabs/Tabs.tsx +3 -3
- package/src/demos/Banner.md +2 -4
- package/src/demos/CardView/examples/CardView.tsx +2 -8
- package/src/demos/DashboardWrapper.tsx +1 -1
- package/src/demos/JumpLinks.md +1 -1
- package/src/demos/Nav.md +10 -1673
- package/src/demos/NotificationDrawer/examples/NotificationDrawerBasic.tsx +2 -3
- package/src/demos/NotificationDrawer/examples/NotificationDrawerGrouped.tsx +2 -3
- package/src/demos/PrimaryDetail.md +4 -7
- package/src/demos/Tabs.md +6 -8
- package/src/demos/Wizard/WizardDemo.md +6 -761
- package/src/demos/examples/AlertGroup/AlertGroupToastWithNotificationDrawer.tsx +4 -5
- package/src/demos/examples/BackToTop/BackToTopNameDemo.tsx +1 -2
- package/src/demos/examples/DashboardWrapper.js +127 -0
- package/src/demos/examples/JumpLinks/JumpLinksWithDrawer.js +3 -4
- package/src/demos/examples/Masthead/MastheadWithUtilitiesAndUserDropdownMenu.tsx +1 -2
- package/src/demos/examples/Nav/NavDefault.tsx +97 -0
- package/src/demos/examples/Nav/NavDrilldown.tsx +2 -0
- package/src/demos/examples/Nav/NavExpandable.tsx +123 -0
- package/src/demos/examples/Nav/NavFlyout.tsx +277 -0
- package/src/demos/examples/Nav/NavGrouped.tsx +98 -0
- package/src/demos/examples/Nav/NavHorizontal.tsx +236 -0
- package/src/demos/examples/Nav/NavHorizontalWithSubnav.tsx +296 -0
- package/src/demos/examples/Nav/NavManual.tsx +272 -0
- package/src/demos/examples/Nav/NavWithSubnav.tsx +141 -0
- package/src/demos/examples/Nav/deprecated/NavLight.tsx +95 -0
- package/src/demos/examples/Nav/deprecated/NavTertiary.tsx +91 -0
- package/src/demos/examples/Page/PageStickySectionBreadcrumb.tsx +1 -2
- package/src/demos/examples/Page/PageStickySectionGroup.tsx +1 -2
- package/src/demos/examples/Page/PageStickySectionGroupAlternate.tsx +1 -2
- package/src/demos/examples/PrimaryDetail/PrimaryDetailContentPadding.tsx +1 -2
- package/src/demos/examples/PrimaryDetail/PrimaryDetailFullPage.tsx +2 -3
- package/src/demos/examples/PrimaryDetail/PrimaryDetailInlineModifier.tsx +2 -3
- package/src/demos/examples/Tabs/ModalTabs.tsx +1 -2
- package/src/demos/examples/Tabs/NestedUnindentedTabs.tsx +2 -2
- package/src/demos/examples/Tabs/TabsAndTable.tsx +2 -3
- package/src/demos/examples/Toolbar/ConsoleLogViewerToolbar.tsx +1 -2
- package/src/demos/examples/Wizard/InModal.tsx +75 -0
- package/src/demos/examples/Wizard/InModalWithDrawer.tsx +115 -0
- package/src/demos/examples/Wizard/InModalWithDrawerInformationalStep.tsx +122 -0
- package/src/demos/examples/Wizard/InPage.tsx +35 -0
- package/src/demos/examples/Wizard/InPageWithDrawer.tsx +195 -0
- package/src/demos/examples/Wizard/InPageWithDrawerInformationalStep.tsx +200 -0
- package/src/deprecated/components/PageHeader/PageHeaderToolsItem.tsx +0 -4
- package/src/deprecated/components/PageHeader/examples/PageVerticalNavUsingPageHeaderComponent.tsx +4 -4
- package/src/deprecated/components/PageHeader/tests/PageHeaderToolsItem.test.tsx +1 -3
- package/src/deprecated/components/PageHeader/tests/__snapshots__/PageHeaderToolsItem.test.tsx.snap +1 -1
- package/src/helpers/Popper/Popper.tsx +10 -19
- package/src/helpers/__mocks__/util.ts +2 -0
- package/src/helpers/datetimeUtils.ts +1 -1
- package/src/helpers/util.ts +22 -0
- package/dist/styles/assets/images/pf-c-brand__logo-on-lg-white.svg +0 -32
- package/dist/styles/assets/images/pf-c-brand__logo-on-md-white.svg +0 -42
- package/dist/styles/assets/images/pf-c-brand__logo-on-sm-white.svg +0 -17
- package/dist/styles/assets/images/pf-c-brand__logo-on-xl-white.svg +0 -39
- package/dist/styles/assets/images/pf_logo_white.hbs +0 -35
- package/dist/styles/assets/images/pf_logo_white.svg +0 -38
- package/src/components/ClipboardCopy/__tests__/Generated/ClipboardCopy.test.tsx +0 -40
- package/src/components/ClipboardCopy/__tests__/Generated/__snapshots__/ClipboardCopy.test.tsx.snap +0 -55
package/src/demos/Nav.md
CHANGED
|
@@ -16,1718 +16,55 @@ import pfLogo from '@patternfly/react-core/src/demos/assets/pf-logo.svg';
|
|
|
16
16
|
|
|
17
17
|
### Default nav
|
|
18
18
|
|
|
19
|
-
```js isFullscreen
|
|
20
|
-
import React from 'react';
|
|
21
|
-
import {
|
|
22
|
-
Card,
|
|
23
|
-
CardBody,
|
|
24
|
-
Gallery,
|
|
25
|
-
GalleryItem,
|
|
26
|
-
Nav,
|
|
27
|
-
NavItem,
|
|
28
|
-
NavList,
|
|
29
|
-
Page,
|
|
30
|
-
PageSection,
|
|
31
|
-
PageSectionVariants,
|
|
32
|
-
PageSidebar,
|
|
33
|
-
PageSidebarBody,
|
|
34
|
-
SkipToContent,
|
|
35
|
-
TextContent,
|
|
36
|
-
Text
|
|
37
|
-
} from '@patternfly/react-core';
|
|
38
|
-
import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/DashboardWrapper';
|
|
39
|
-
import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
|
|
40
|
-
|
|
41
|
-
class PageLayoutDefaultNav extends React.Component {
|
|
42
|
-
constructor(props) {
|
|
43
|
-
super(props);
|
|
44
|
-
this.state = {
|
|
45
|
-
activeItem: 0
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
this.onNavSelect = (_event, result) => {
|
|
49
|
-
this.setState({
|
|
50
|
-
activeItem: result.itemId
|
|
51
|
-
});
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
render() {
|
|
56
|
-
const { activeItem } = this.state;
|
|
57
|
-
|
|
58
|
-
const PageNav = (
|
|
59
|
-
<Nav onSelect={this.onNavSelect} aria-label="Nav">
|
|
60
|
-
<NavList>
|
|
61
|
-
<NavItem itemId={0} isActive={activeItem === 0} to="#">
|
|
62
|
-
System Panel
|
|
63
|
-
</NavItem>
|
|
64
|
-
<NavItem itemId={1} isActive={activeItem === 1} to="#">
|
|
65
|
-
Policy
|
|
66
|
-
</NavItem>
|
|
67
|
-
<NavItem itemId={2} isActive={activeItem === 2} to="#">
|
|
68
|
-
Authentication
|
|
69
|
-
</NavItem>
|
|
70
|
-
<NavItem itemId={3} isActive={activeItem === 3} to="#">
|
|
71
|
-
Network Services
|
|
72
|
-
</NavItem>
|
|
73
|
-
<NavItem itemId={4} isActive={activeItem === 4} to="#">
|
|
74
|
-
Server
|
|
75
|
-
</NavItem>
|
|
76
|
-
</NavList>
|
|
77
|
-
</Nav>
|
|
78
|
-
);
|
|
79
|
-
|
|
80
|
-
const Sidebar = (
|
|
81
|
-
<PageSidebar>
|
|
82
|
-
<PageSidebarBody>{PageNav}</PageSidebarBody>
|
|
83
|
-
</PageSidebar>
|
|
84
|
-
);
|
|
85
|
-
const pageId = 'main-content-page-layout-default-nav';
|
|
86
|
-
const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
|
|
87
|
-
|
|
88
|
-
return (
|
|
89
|
-
<React.Fragment>
|
|
90
|
-
<Page
|
|
91
|
-
header={<DashboardHeader />}
|
|
92
|
-
sidebar={Sidebar}
|
|
93
|
-
isManagedSidebar
|
|
94
|
-
skipToContent={PageSkipToContent}
|
|
95
|
-
breadcrumb={DashboardBreadcrumb}
|
|
96
|
-
mainContainerId={pageId}
|
|
97
|
-
>
|
|
98
|
-
<PageSection variant={PageSectionVariants.light}>
|
|
99
|
-
<TextContent>
|
|
100
|
-
<Text component="h1">Main title</Text>
|
|
101
|
-
<Text component="p">
|
|
102
|
-
Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
|
|
103
|
-
of its relative line height of 1.5.
|
|
104
|
-
</Text>
|
|
105
|
-
</TextContent>
|
|
106
|
-
</PageSection>
|
|
107
|
-
<PageSection>
|
|
108
|
-
<Gallery hasGutter>
|
|
109
|
-
{Array.apply(0, Array(10)).map((x, i) => (
|
|
110
|
-
<GalleryItem key={i}>
|
|
111
|
-
<Card>
|
|
112
|
-
<CardBody>This is a card</CardBody>
|
|
113
|
-
</Card>
|
|
114
|
-
</GalleryItem>
|
|
115
|
-
))}
|
|
116
|
-
</Gallery>
|
|
117
|
-
</PageSection>
|
|
118
|
-
</Page>
|
|
119
|
-
</React.Fragment>
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
19
|
+
```js file='./examples/Nav/NavDefault.tsx' isFullscreen
|
|
123
20
|
```
|
|
124
21
|
|
|
125
22
|
### Grouped nav
|
|
126
23
|
|
|
127
|
-
```js isFullscreen
|
|
128
|
-
import React from 'react';
|
|
129
|
-
import {
|
|
130
|
-
Nav,
|
|
131
|
-
NavGroup,
|
|
132
|
-
NavItem,
|
|
133
|
-
Page,
|
|
134
|
-
PageSection,
|
|
135
|
-
PageSectionVariants,
|
|
136
|
-
PageSidebar,
|
|
137
|
-
PageSidebarBody,
|
|
138
|
-
SkipToContent,
|
|
139
|
-
TextContent,
|
|
140
|
-
Text
|
|
141
|
-
} from '@patternfly/react-core';
|
|
142
|
-
import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
|
|
143
|
-
|
|
144
|
-
class PageLayoutGroupsNav extends React.Component {
|
|
145
|
-
constructor(props) {
|
|
146
|
-
super(props);
|
|
147
|
-
this.state = {
|
|
148
|
-
activeItem: 'grp-1_itm-1'
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
this.onNavSelect = (_event, result) => {
|
|
152
|
-
this.setState({
|
|
153
|
-
activeItem: result.itemId
|
|
154
|
-
});
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
render() {
|
|
159
|
-
const { activeItem } = this.state;
|
|
160
|
-
|
|
161
|
-
const PageNav = (
|
|
162
|
-
<Nav onSelect={this.onNavSelect} aria-label="Nav">
|
|
163
|
-
<NavGroup title="System Panel">
|
|
164
|
-
<NavItem itemId="grp-1_itm-1" isActive={activeItem === 'grp-1_itm-1'} to="#">
|
|
165
|
-
Overview
|
|
166
|
-
</NavItem>
|
|
167
|
-
<NavItem itemId="grp-1_itm-2" isActive={activeItem === 'grp-1_itm-2'} to="#">
|
|
168
|
-
Resource Usage
|
|
169
|
-
</NavItem>
|
|
170
|
-
<NavItem itemId="grp-1_itm-3" isActive={activeItem === 'grp-1_itm-3'} to="#">
|
|
171
|
-
Hypervisors
|
|
172
|
-
</NavItem>
|
|
173
|
-
<NavItem itemId="grp-1_itm-4" isActive={activeItem === 'grp-1_itm-4'} to="#">
|
|
174
|
-
Instances
|
|
175
|
-
</NavItem>
|
|
176
|
-
<NavItem itemId="grp-1_itm-5" isActive={activeItem === 'grp-1_itm-5'} to="#">
|
|
177
|
-
Volumes
|
|
178
|
-
</NavItem>
|
|
179
|
-
<NavItem itemId="grp-1_itm-6" isActive={activeItem === 'grp-1_itm-6'} to="#">
|
|
180
|
-
Network
|
|
181
|
-
</NavItem>
|
|
182
|
-
</NavGroup>
|
|
183
|
-
<NavGroup title="Policy">
|
|
184
|
-
<NavItem itemId="grp-2_itm-1" isActive={activeItem === 'grp-2_itm-1'} to="#">
|
|
185
|
-
Hosts
|
|
186
|
-
</NavItem>
|
|
187
|
-
<NavItem itemId="grp-2_itm-2" isActive={activeItem === 'grp-2_itm-2'} to="#">
|
|
188
|
-
Virtual Machines
|
|
189
|
-
</NavItem>
|
|
190
|
-
<NavItem itemId="grp-2_itm-3" isActive={activeItem === 'grp-2_itm-3'} to="#">
|
|
191
|
-
Storage
|
|
192
|
-
</NavItem>
|
|
193
|
-
</NavGroup>
|
|
194
|
-
</Nav>
|
|
195
|
-
);
|
|
196
|
-
|
|
197
|
-
const Sidebar = (
|
|
198
|
-
<PageSidebar>
|
|
199
|
-
<PageSidebarBody>{PageNav}</PageSidebarBody>
|
|
200
|
-
</PageSidebar>
|
|
201
|
-
);
|
|
202
|
-
const pageId = 'main-content-page-layout-group-nav';
|
|
203
|
-
const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to Content</SkipToContent>;
|
|
204
|
-
|
|
205
|
-
return (
|
|
206
|
-
<React.Fragment>
|
|
207
|
-
<Page
|
|
208
|
-
header={<DashboardHeader />}
|
|
209
|
-
sidebar={Sidebar}
|
|
210
|
-
isManagedSidebar
|
|
211
|
-
skipToContent={PageSkipToContent}
|
|
212
|
-
mainContainerId={pageId}
|
|
213
|
-
>
|
|
214
|
-
<PageSection variant={PageSectionVariants.light}>
|
|
215
|
-
<TextContent>
|
|
216
|
-
<Text component="h1">Main title</Text>
|
|
217
|
-
<Text component="p">
|
|
218
|
-
Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
|
|
219
|
-
of its relative line height of 1.5.
|
|
220
|
-
</Text>
|
|
221
|
-
</TextContent>
|
|
222
|
-
</PageSection>
|
|
223
|
-
<PageSection variant={PageSectionVariants.light}>Light</PageSection>
|
|
224
|
-
<PageSection variant={PageSectionVariants.dark}>Dark</PageSection>
|
|
225
|
-
<PageSection variant={PageSectionVariants.darker}>Darker</PageSection>
|
|
226
|
-
<PageSection>Content</PageSection>
|
|
227
|
-
</Page>
|
|
228
|
-
</React.Fragment>
|
|
229
|
-
);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
24
|
+
```js file='./examples/Nav/NavGrouped.tsx' isFullscreen
|
|
232
25
|
```
|
|
233
26
|
|
|
234
27
|
### Expandable nav
|
|
235
28
|
|
|
236
|
-
```js isFullscreen
|
|
237
|
-
import React from 'react';
|
|
238
|
-
import {
|
|
239
|
-
Card,
|
|
240
|
-
CardBody,
|
|
241
|
-
Gallery,
|
|
242
|
-
GalleryItem,
|
|
243
|
-
Nav,
|
|
244
|
-
NavExpandable,
|
|
245
|
-
NavItem,
|
|
246
|
-
NavList,
|
|
247
|
-
Page,
|
|
248
|
-
PageSection,
|
|
249
|
-
PageSectionVariants,
|
|
250
|
-
PageSidebar,
|
|
251
|
-
PageSidebarBody,
|
|
252
|
-
SkipToContent,
|
|
253
|
-
TextContent,
|
|
254
|
-
Text
|
|
255
|
-
} from '@patternfly/react-core';
|
|
256
|
-
import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/DashboardWrapper';
|
|
257
|
-
import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
|
|
258
|
-
|
|
259
|
-
class PageLayoutExpandableNav extends React.Component {
|
|
260
|
-
constructor(props) {
|
|
261
|
-
super(props);
|
|
262
|
-
this.state = {
|
|
263
|
-
activeGroup: 'grp-1',
|
|
264
|
-
activeItem: 'grp-1_itm-1'
|
|
265
|
-
};
|
|
266
|
-
|
|
267
|
-
this.onNavSelect = (_event, result) => {
|
|
268
|
-
this.setState({
|
|
269
|
-
activeItem: result.itemId,
|
|
270
|
-
activeGroup: result.groupId
|
|
271
|
-
});
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
render() {
|
|
276
|
-
const { activeItem, activeGroup } = this.state;
|
|
277
|
-
|
|
278
|
-
const PageNav = (
|
|
279
|
-
<Nav onSelect={this.onNavSelect} aria-label="Nav">
|
|
280
|
-
<NavList>
|
|
281
|
-
<NavExpandable title="System Panel" groupId="grp-1" isActive={activeGroup === 'grp-1'} isExpanded>
|
|
282
|
-
<NavItem groupId="grp-1" itemId="grp-1_itm-1" isActive={activeItem === 'grp-1_itm-1'} to="#">
|
|
283
|
-
Overview
|
|
284
|
-
</NavItem>
|
|
285
|
-
<NavItem groupId="grp-1" itemId="grp-1_itm-2" isActive={activeItem === 'grp-1_itm-2'} to="#">
|
|
286
|
-
Resource usage
|
|
287
|
-
</NavItem>
|
|
288
|
-
<NavItem groupId="grp-1" itemId="grp-1_itm-3" isActive={activeItem === 'grp-1_itm-3'} to="#">
|
|
289
|
-
Hypervisors
|
|
290
|
-
</NavItem>
|
|
291
|
-
<NavItem groupId="grp-1" itemId="grp-1_itm-4" isActive={activeItem === 'grp-1_itm-4'} to="#">
|
|
292
|
-
Instances
|
|
293
|
-
</NavItem>
|
|
294
|
-
<NavItem groupId="grp-1" itemId="grp-1_itm-5" isActive={activeItem === 'grp-1_itm-5'} to="#">
|
|
295
|
-
Volumes
|
|
296
|
-
</NavItem>
|
|
297
|
-
<NavItem groupId="grp-1" itemId="grp-1_itm-6" isActive={activeItem === 'grp-1_itm-6'} to="#">
|
|
298
|
-
Network
|
|
299
|
-
</NavItem>
|
|
300
|
-
</NavExpandable>
|
|
301
|
-
<NavExpandable title="Policy" groupId="grp-2" isActive={activeGroup === 'grp-2'} to="#">
|
|
302
|
-
<NavItem groupId="grp-2" itemId="grp-2_itm-1" isActive={activeItem === 'grp-2_itm-1'} to="#">
|
|
303
|
-
Subnav link 1
|
|
304
|
-
</NavItem>
|
|
305
|
-
<NavItem groupId="grp-2" itemId="grp-2_itm-2" isActive={activeItem === 'grp-2_itm-2'} to="#">
|
|
306
|
-
Subnav link 2
|
|
307
|
-
</NavItem>
|
|
308
|
-
</NavExpandable>
|
|
309
|
-
<NavExpandable title="Authentication" groupId="grp-3" isActive={activeGroup === 'grp-3'}>
|
|
310
|
-
<NavItem groupId="grp-3" itemId="grp-3_itm-1" isActive={activeItem === 'grp-3_itm-1'} to="#">
|
|
311
|
-
Subnav link 1
|
|
312
|
-
</NavItem>
|
|
313
|
-
<NavItem groupId="grp-3" itemId="grp-3_itm-2" isActive={activeItem === 'grp-3_itm-2'} to="#">
|
|
314
|
-
Subnav link 2
|
|
315
|
-
</NavItem>
|
|
316
|
-
</NavExpandable>
|
|
317
|
-
</NavList>
|
|
318
|
-
</Nav>
|
|
319
|
-
);
|
|
320
|
-
|
|
321
|
-
const Sidebar = (
|
|
322
|
-
<PageSidebar>
|
|
323
|
-
<PageSidebarBody>{PageNav}</PageSidebarBody>
|
|
324
|
-
</PageSidebar>
|
|
325
|
-
);
|
|
326
|
-
const pageId = 'main-content-page-layout-expandable-nav';
|
|
327
|
-
const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
|
|
328
|
-
|
|
329
|
-
return (
|
|
330
|
-
<React.Fragment>
|
|
331
|
-
<Page
|
|
332
|
-
header={<DashboardHeader />}
|
|
333
|
-
sidebar={Sidebar}
|
|
334
|
-
isManagedSidebar
|
|
335
|
-
skipToContent={PageSkipToContent}
|
|
336
|
-
breadcrumb={DashboardBreadcrumb}
|
|
337
|
-
mainContainerId={pageId}
|
|
338
|
-
>
|
|
339
|
-
<PageSection variant={PageSectionVariants.light}>
|
|
340
|
-
<TextContent>
|
|
341
|
-
<Text component="h1">Main title</Text>
|
|
342
|
-
<Text component="p">
|
|
343
|
-
Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
|
|
344
|
-
of its relative line height of 1.5.
|
|
345
|
-
</Text>
|
|
346
|
-
</TextContent>
|
|
347
|
-
</PageSection>
|
|
348
|
-
<PageSection>
|
|
349
|
-
<Gallery hasGutter>
|
|
350
|
-
{Array.apply(0, Array(10)).map((x, i) => (
|
|
351
|
-
<GalleryItem key={i}>
|
|
352
|
-
<Card>
|
|
353
|
-
<CardBody>This is a card</CardBody>
|
|
354
|
-
</Card>
|
|
355
|
-
</GalleryItem>
|
|
356
|
-
))}
|
|
357
|
-
</Gallery>
|
|
358
|
-
</PageSection>
|
|
359
|
-
</Page>
|
|
360
|
-
</React.Fragment>
|
|
361
|
-
);
|
|
362
|
-
}
|
|
363
|
-
}
|
|
29
|
+
```js file='./examples/Nav/NavExpandable.tsx' isFullscreen
|
|
364
30
|
```
|
|
365
31
|
|
|
366
32
|
### Horizontal nav
|
|
367
33
|
|
|
368
|
-
```js isFullscreen
|
|
369
|
-
import React from 'react';
|
|
370
|
-
import {
|
|
371
|
-
Avatar,
|
|
372
|
-
Brand,
|
|
373
|
-
Button,
|
|
374
|
-
ButtonVariant,
|
|
375
|
-
Card,
|
|
376
|
-
CardBody,
|
|
377
|
-
Dropdown,
|
|
378
|
-
DropdownItem,
|
|
379
|
-
DropdownList,
|
|
380
|
-
Gallery,
|
|
381
|
-
GalleryItem,
|
|
382
|
-
Masthead,
|
|
383
|
-
MastheadMain,
|
|
384
|
-
MastheadBrand,
|
|
385
|
-
MastheadContent,
|
|
386
|
-
MenuToggle,
|
|
387
|
-
Nav,
|
|
388
|
-
NavItem,
|
|
389
|
-
NavList,
|
|
390
|
-
Page,
|
|
391
|
-
PageSection,
|
|
392
|
-
PageSectionVariants,
|
|
393
|
-
SkipToContent,
|
|
394
|
-
TextContent,
|
|
395
|
-
Text,
|
|
396
|
-
Toolbar,
|
|
397
|
-
ToolbarContent,
|
|
398
|
-
ToolbarGroup,
|
|
399
|
-
ToolbarItem
|
|
400
|
-
} from '@patternfly/react-core';
|
|
401
|
-
import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
|
|
402
|
-
import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
|
|
403
|
-
import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
|
|
404
|
-
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
|
|
405
|
-
import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
|
|
406
|
-
import imgAvatar from '@patternfly/react-core/src/components/assets/avatarImg.svg';
|
|
407
|
-
import pfLogo from '@patternfly/react-core/src/demos/assets/pf-logo.svg';
|
|
408
|
-
import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/DashboardWrapper';
|
|
409
|
-
|
|
410
|
-
class PageLayoutHorizontalNav extends React.Component {
|
|
411
|
-
constructor(props) {
|
|
412
|
-
super(props);
|
|
413
|
-
this.state = {
|
|
414
|
-
isDropdownOpen: false,
|
|
415
|
-
isKebabDropdownOpen: false,
|
|
416
|
-
isFullKebabDropdownOpen: false,
|
|
417
|
-
activeItem: 0
|
|
418
|
-
};
|
|
419
|
-
|
|
420
|
-
this.onDropdownToggle = () => {
|
|
421
|
-
this.setState((prevState) => ({
|
|
422
|
-
isDropdownOpen: !prevState.isDropdownOpen
|
|
423
|
-
}));
|
|
424
|
-
};
|
|
425
|
-
|
|
426
|
-
this.onDropdownSelect = () => {
|
|
427
|
-
this.setState({
|
|
428
|
-
isDropdownOpen: false
|
|
429
|
-
});
|
|
430
|
-
};
|
|
431
|
-
|
|
432
|
-
this.onKebabDropdownToggle = () => {
|
|
433
|
-
this.setState((prevState) => ({
|
|
434
|
-
isKebabDropdownOpen: !prevState.isKebabDropdownOpen
|
|
435
|
-
}));
|
|
436
|
-
};
|
|
437
|
-
|
|
438
|
-
this.onKebabDropdownSelect = () => {
|
|
439
|
-
this.setState({
|
|
440
|
-
isKebabDropdownOpen: false
|
|
441
|
-
});
|
|
442
|
-
};
|
|
443
|
-
|
|
444
|
-
this.onFullKebabToggle = () => {
|
|
445
|
-
this.setState((prevState) => ({
|
|
446
|
-
isFullKebabDropdownOpen: !prevState.isFullKebabDropdownOpen
|
|
447
|
-
}));
|
|
448
|
-
};
|
|
449
|
-
|
|
450
|
-
this.onNavSelect = (_event, result) => {
|
|
451
|
-
this.setState({
|
|
452
|
-
activeItem: result.itemId
|
|
453
|
-
});
|
|
454
|
-
};
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
render() {
|
|
458
|
-
const { isDropdownOpen, isKebabDropdownOpen, isFullKebabDropdownOpen, activeItem } = this.state;
|
|
459
|
-
|
|
460
|
-
const PageNav = (
|
|
461
|
-
<Nav onSelect={this.onNavSelect} aria-label="Nav" variant="horizontal">
|
|
462
|
-
<NavList>
|
|
463
|
-
<NavItem itemId={0} isActive={activeItem === 0} to="#">
|
|
464
|
-
System Panel
|
|
465
|
-
</NavItem>
|
|
466
|
-
<NavItem itemId={1} isActive={activeItem === 1} to="#">
|
|
467
|
-
Policy
|
|
468
|
-
</NavItem>
|
|
469
|
-
<NavItem itemId={2} isActive={activeItem === 2} to="#">
|
|
470
|
-
Authentication
|
|
471
|
-
</NavItem>
|
|
472
|
-
<NavItem itemId={3} isActive={activeItem === 3} to="#">
|
|
473
|
-
Network Services
|
|
474
|
-
</NavItem>
|
|
475
|
-
<NavItem itemId={4} isActive={activeItem === 4} to="#">
|
|
476
|
-
Server
|
|
477
|
-
</NavItem>
|
|
478
|
-
</NavList>
|
|
479
|
-
</Nav>
|
|
480
|
-
);
|
|
481
|
-
const kebabDropdownItems = (
|
|
482
|
-
<>
|
|
483
|
-
<DropdownItem>
|
|
484
|
-
<CogIcon /> Settings
|
|
485
|
-
</DropdownItem>
|
|
486
|
-
<DropdownItem>
|
|
487
|
-
<HelpIcon /> Help
|
|
488
|
-
</DropdownItem>
|
|
489
|
-
</>
|
|
490
|
-
);
|
|
491
|
-
const userDropdownItems = (
|
|
492
|
-
<>
|
|
493
|
-
<DropdownItem key="group 2 profile">My profile</DropdownItem>
|
|
494
|
-
<DropdownItem key="group 2 user">User management</DropdownItem>
|
|
495
|
-
<DropdownItem key="group 2 logout">Logout</DropdownItem>
|
|
496
|
-
</>
|
|
497
|
-
);
|
|
498
|
-
|
|
499
|
-
const headerToolbar = (
|
|
500
|
-
<Toolbar id="toolbar" isFullHeight isStatic>
|
|
501
|
-
<ToolbarContent>
|
|
502
|
-
<ToolbarItem isOverflowContainer>{PageNav}</ToolbarItem>
|
|
503
|
-
<ToolbarGroup
|
|
504
|
-
variant="icon-button-group"
|
|
505
|
-
align={{ default: 'alignRight' }}
|
|
506
|
-
spacer={{ default: 'spacerNone', md: 'spacerMd' }}
|
|
507
|
-
>
|
|
508
|
-
<ToolbarItem>
|
|
509
|
-
<Button aria-label="Notifications" variant={ButtonVariant.plain} icon={<BellIcon />} onClick={() => {}} />
|
|
510
|
-
</ToolbarItem>
|
|
511
|
-
<ToolbarGroup variant="icon-button-group" visibility={{ default: 'hidden', lg: 'visible' }}>
|
|
512
|
-
<ToolbarItem>
|
|
513
|
-
<Button aria-label="Settings" variant={ButtonVariant.plain} icon={<CogIcon />} />
|
|
514
|
-
</ToolbarItem>
|
|
515
|
-
<ToolbarItem>
|
|
516
|
-
<Button aria-label="Help" variant={ButtonVariant.plain} icon={<QuestionCircleIcon />} />
|
|
517
|
-
</ToolbarItem>
|
|
518
|
-
</ToolbarGroup>
|
|
519
|
-
<ToolbarItem visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}>
|
|
520
|
-
<Dropdown
|
|
521
|
-
isOpen={isKebabDropdownOpen}
|
|
522
|
-
onSelect={this.onKebabDropdownSelect}
|
|
523
|
-
onOpenChange={(isOpen) => this.setState({ isKebabDropdownOpen: isOpen })}
|
|
524
|
-
popperProps={{ position: 'right' }}
|
|
525
|
-
toggle={(toggleRef) => (
|
|
526
|
-
<MenuToggle
|
|
527
|
-
ref={toggleRef}
|
|
528
|
-
isExpanded={isKebabDropdownOpen}
|
|
529
|
-
onClick={this.onKebabDropdownToggle}
|
|
530
|
-
variant="plain"
|
|
531
|
-
aria-label="Settings and help"
|
|
532
|
-
>
|
|
533
|
-
<EllipsisVIcon aria-hidden="true" />
|
|
534
|
-
</MenuToggle>
|
|
535
|
-
)}
|
|
536
|
-
>
|
|
537
|
-
<DropdownList>{kebabDropdownItems}</DropdownList>
|
|
538
|
-
</Dropdown>
|
|
539
|
-
</ToolbarItem>
|
|
540
|
-
<ToolbarItem visibility={{ md: 'hidden' }}>
|
|
541
|
-
<Dropdown
|
|
542
|
-
isOpen={isFullKebabDropdownOpen}
|
|
543
|
-
onSelect={this.onFullKebabSelect}
|
|
544
|
-
onOpenChange={(isOpen) => this.setState({ isFullKebabDropdownOpen: isOpen })}
|
|
545
|
-
popperProps={{ position: 'right' }}
|
|
546
|
-
toggle={(toggleRef) => (
|
|
547
|
-
<MenuToggle
|
|
548
|
-
ref={toggleRef}
|
|
549
|
-
isExpanded={isFullKebabDropdownOpen}
|
|
550
|
-
onClick={this.onFullKebabToggle}
|
|
551
|
-
variant="plain"
|
|
552
|
-
aria-label="Toolbar menu"
|
|
553
|
-
>
|
|
554
|
-
<EllipsisVIcon aria-hidden="true" />
|
|
555
|
-
</MenuToggle>
|
|
556
|
-
)}
|
|
557
|
-
>
|
|
558
|
-
<DropdownGroup key="group 2" aria-label="User actions">
|
|
559
|
-
<DropdownList>{userDropdownItems}</DropdownList>
|
|
560
|
-
</DropdownGroup>
|
|
561
|
-
<Divider />
|
|
562
|
-
<DropdownList>{kebabDropdownItems}</DropdownList>
|
|
563
|
-
</Dropdown>
|
|
564
|
-
</ToolbarItem>
|
|
565
|
-
</ToolbarGroup>
|
|
566
|
-
<ToolbarItem visibility={{ default: 'hidden', md: 'visible' }}>
|
|
567
|
-
<Dropdown
|
|
568
|
-
isOpen={isDropdownOpen}
|
|
569
|
-
onSelect={this.onDropdownSelect}
|
|
570
|
-
onOpenChange={(isOpen) => this.setState({ isDropdownOpen: isOpen })}
|
|
571
|
-
popperProps={{ position: 'right' }}
|
|
572
|
-
toggle={(toggleRef) => (
|
|
573
|
-
<MenuToggle
|
|
574
|
-
ref={toggleRef}
|
|
575
|
-
isExpanded={isDropdownOpen}
|
|
576
|
-
onClick={this.onDropdownToggle}
|
|
577
|
-
icon={<Avatar src={imgAvatar} alt="" />}
|
|
578
|
-
isFullHeight
|
|
579
|
-
>
|
|
580
|
-
Ned Username
|
|
581
|
-
</MenuToggle>
|
|
582
|
-
)}
|
|
583
|
-
>
|
|
584
|
-
<DropdownList>{userDropdownItems}</DropdownList>
|
|
585
|
-
</Dropdown>
|
|
586
|
-
</ToolbarItem>
|
|
587
|
-
</ToolbarContent>
|
|
588
|
-
</Toolbar>
|
|
589
|
-
);
|
|
590
|
-
const Header = (
|
|
591
|
-
<Masthead>
|
|
592
|
-
<MastheadMain>
|
|
593
|
-
<MastheadBrand>
|
|
594
|
-
<Brand src={pfLogo} alt="PatternFly" heights={{ default: '36px' }} />
|
|
595
|
-
</MastheadBrand>
|
|
596
|
-
</MastheadMain>
|
|
597
|
-
<MastheadContent>{headerToolbar}</MastheadContent>
|
|
598
|
-
</Masthead>
|
|
599
|
-
);
|
|
600
|
-
|
|
601
|
-
const pageId = 'main-content-page-layout-horizontal-nav';
|
|
602
|
-
const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
|
|
603
|
-
|
|
604
|
-
return (
|
|
605
|
-
<React.Fragment>
|
|
606
|
-
<Page
|
|
607
|
-
header={Header}
|
|
608
|
-
skipToContent={PageSkipToContent}
|
|
609
|
-
breadcrumb={DashboardBreadcrumb}
|
|
610
|
-
mainContainerId={pageId}
|
|
611
|
-
>
|
|
612
|
-
<PageSection variant={PageSectionVariants.light}>
|
|
613
|
-
<TextContent>
|
|
614
|
-
<Text component="h1">Main title</Text>
|
|
615
|
-
<Text component="p">
|
|
616
|
-
Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
|
|
617
|
-
of its relative line height of 1.5.
|
|
618
|
-
</Text>
|
|
619
|
-
</TextContent>
|
|
620
|
-
</PageSection>
|
|
621
|
-
<PageSection>
|
|
622
|
-
<Gallery hasGutter>
|
|
623
|
-
{Array.apply(0, Array(10)).map((x, i) => (
|
|
624
|
-
<GalleryItem key={i}>
|
|
625
|
-
<Card>
|
|
626
|
-
<CardBody>This is a card</CardBody>
|
|
627
|
-
</Card>
|
|
628
|
-
</GalleryItem>
|
|
629
|
-
))}
|
|
630
|
-
</Gallery>
|
|
631
|
-
</PageSection>
|
|
632
|
-
</Page>
|
|
633
|
-
</React.Fragment>
|
|
634
|
-
);
|
|
635
|
-
}
|
|
636
|
-
}
|
|
34
|
+
```js file='./examples/Nav/NavHorizontal.tsx' isFullscreen
|
|
637
35
|
```
|
|
638
36
|
|
|
639
37
|
### Horizontal subnav
|
|
640
38
|
|
|
641
|
-
```js isFullscreen
|
|
642
|
-
import React from 'react';
|
|
643
|
-
import {
|
|
644
|
-
Card,
|
|
645
|
-
CardBody,
|
|
646
|
-
Gallery,
|
|
647
|
-
GalleryItem,
|
|
648
|
-
Nav,
|
|
649
|
-
NavItem,
|
|
650
|
-
NavList,
|
|
651
|
-
Page,
|
|
652
|
-
PageSection,
|
|
653
|
-
PageSectionVariants,
|
|
654
|
-
PageSidebar,
|
|
655
|
-
PageSidebarBody,
|
|
656
|
-
SkipToContent,
|
|
657
|
-
TextContent,
|
|
658
|
-
Text
|
|
659
|
-
} from '@patternfly/react-core';
|
|
660
|
-
import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/DashboardWrapper';
|
|
661
|
-
import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
|
|
662
|
-
|
|
663
|
-
class VerticalNavWithSubnav extends React.Component {
|
|
664
|
-
constructor(props) {
|
|
665
|
-
super(props);
|
|
666
|
-
this.state = {
|
|
667
|
-
activeItem: 0,
|
|
668
|
-
activeSubNavItem: 7
|
|
669
|
-
};
|
|
670
|
-
|
|
671
|
-
this.onNavSelect = (_event, result) => {
|
|
672
|
-
this.setState({
|
|
673
|
-
activeItem: result.itemId
|
|
674
|
-
});
|
|
675
|
-
};
|
|
676
|
-
|
|
677
|
-
this.onSubNavSelect = (_event, result) => {
|
|
678
|
-
this.setState({
|
|
679
|
-
activeSubNavItem: result.itemId
|
|
680
|
-
});
|
|
681
|
-
};
|
|
682
|
-
}
|
|
683
|
-
|
|
684
|
-
render() {
|
|
685
|
-
const { activeItem, activeSubNavItem } = this.state;
|
|
686
|
-
|
|
687
|
-
const PageNav = (
|
|
688
|
-
<Nav onSelect={this.onNavSelect} aria-label="Nav">
|
|
689
|
-
<NavList>
|
|
690
|
-
<NavItem itemId={0} isActive={activeItem === 0} to="#">
|
|
691
|
-
System Panel
|
|
692
|
-
</NavItem>
|
|
693
|
-
<NavItem itemId={1} isActive={activeItem === 1} to="#">
|
|
694
|
-
Policy
|
|
695
|
-
</NavItem>
|
|
696
|
-
<NavItem itemId={2} isActive={activeItem === 2} to="#">
|
|
697
|
-
Authentication
|
|
698
|
-
</NavItem>
|
|
699
|
-
<NavItem itemId={3} isActive={activeItem === 3} to="#">
|
|
700
|
-
Network Services
|
|
701
|
-
</NavItem>
|
|
702
|
-
<NavItem itemId={4} isActive={activeItem === 4} to="#">
|
|
703
|
-
Server
|
|
704
|
-
</NavItem>
|
|
705
|
-
</NavList>
|
|
706
|
-
</Nav>
|
|
707
|
-
);
|
|
708
|
-
|
|
709
|
-
const Sidebar = (
|
|
710
|
-
<PageSidebar>
|
|
711
|
-
<PageSidebarBody>{PageNav}</PageSidebarBody>
|
|
712
|
-
</PageSidebar>
|
|
713
|
-
);
|
|
714
|
-
const pageId = 'main-content-page-layout-default-nav';
|
|
715
|
-
const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
|
|
716
|
-
|
|
717
|
-
const SubNav = (
|
|
718
|
-
<Nav onSelect={this.onSubNavSelect} aria-label="Nav" variant="horizontal-subnav">
|
|
719
|
-
<NavList>
|
|
720
|
-
<NavItem itemId={7} isActive={activeSubNavItem === 7} to="#">
|
|
721
|
-
Horizontal subnav item 1
|
|
722
|
-
</NavItem>
|
|
723
|
-
<NavItem itemId={8} isActive={activeSubNavItem === 8} to="#">
|
|
724
|
-
Horizontal subnav item 2
|
|
725
|
-
</NavItem>
|
|
726
|
-
<NavItem itemId={9} isActive={activeSubNavItem === 9} to="#">
|
|
727
|
-
Horizontal subnav item 3
|
|
728
|
-
</NavItem>
|
|
729
|
-
<NavItem itemId={10} isActive={activeSubNavItem === 10} to="#">
|
|
730
|
-
Horizontal subnav item 4
|
|
731
|
-
</NavItem>
|
|
732
|
-
<NavItem itemId={11} isActive={activeSubNavItem === 11} to="#">
|
|
733
|
-
Horizontal subnav item 5
|
|
734
|
-
</NavItem>
|
|
735
|
-
<NavItem itemId={12} isActive={activeSubNavItem === 12} to="#">
|
|
736
|
-
Horizontal subnav item 6
|
|
737
|
-
</NavItem>
|
|
738
|
-
<NavItem itemId={13} isActive={activeSubNavItem === 13} to="#">
|
|
739
|
-
Horizontal subnav item 7
|
|
740
|
-
</NavItem>
|
|
741
|
-
</NavList>
|
|
742
|
-
</Nav>
|
|
743
|
-
);
|
|
744
|
-
|
|
745
|
-
return (
|
|
746
|
-
<React.Fragment>
|
|
747
|
-
<Page
|
|
748
|
-
header={<DashboardHeader />}
|
|
749
|
-
sidebar={Sidebar}
|
|
750
|
-
isManagedSidebar
|
|
751
|
-
skipToContent={PageSkipToContent}
|
|
752
|
-
mainContainerId={pageId}
|
|
753
|
-
>
|
|
754
|
-
<PageSection type={PageSectionTypes.subNav} isWidthLimited>
|
|
755
|
-
{SubNav}
|
|
756
|
-
</PageSection>
|
|
757
|
-
<PageSection type={PageSectionTypes.breadcrumb} isWidthLimited>
|
|
758
|
-
{DashboardBreadcrumb}
|
|
759
|
-
</PageSection>
|
|
760
|
-
<PageSection variant={PageSectionVariants.light}>
|
|
761
|
-
<TextContent>
|
|
762
|
-
<Text component="h1">Main title</Text>
|
|
763
|
-
<Text component="p">
|
|
764
|
-
Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
|
|
765
|
-
of it’s relative line height of 1.5.
|
|
766
|
-
</Text>
|
|
767
|
-
</TextContent>
|
|
768
|
-
</PageSection>
|
|
769
|
-
<PageSection>
|
|
770
|
-
<Gallery hasGutter>
|
|
771
|
-
{Array.apply(0, Array(10)).map((x, i) => (
|
|
772
|
-
<GalleryItem key={i}>
|
|
773
|
-
<Card>
|
|
774
|
-
<CardBody>This is a card</CardBody>
|
|
775
|
-
</Card>
|
|
776
|
-
</GalleryItem>
|
|
777
|
-
))}
|
|
778
|
-
</Gallery>
|
|
779
|
-
</PageSection>
|
|
780
|
-
</Page>
|
|
781
|
-
</React.Fragment>
|
|
782
|
-
);
|
|
783
|
-
}
|
|
784
|
-
}
|
|
39
|
+
```js file='./examples/Nav/NavWithSubnav.tsx' isFullscreen
|
|
785
40
|
```
|
|
786
41
|
|
|
787
42
|
### Horizontal nav with horizontal subnav
|
|
788
43
|
|
|
789
|
-
```js isFullscreen
|
|
790
|
-
import React from 'react';
|
|
791
|
-
import {
|
|
792
|
-
Avatar,
|
|
793
|
-
Brand,
|
|
794
|
-
Button,
|
|
795
|
-
ButtonVariant,
|
|
796
|
-
Card,
|
|
797
|
-
CardBody,
|
|
798
|
-
Dropdown,
|
|
799
|
-
DropdownItem,
|
|
800
|
-
DropdownList,
|
|
801
|
-
Gallery,
|
|
802
|
-
GalleryItem,
|
|
803
|
-
MenuToggle,
|
|
804
|
-
Masthead,
|
|
805
|
-
MastheadMain,
|
|
806
|
-
MastheadBrand,
|
|
807
|
-
MastheadContent,
|
|
808
|
-
Nav,
|
|
809
|
-
NavItem,
|
|
810
|
-
NavList,
|
|
811
|
-
Page,
|
|
812
|
-
PageSection,
|
|
813
|
-
PageSectionVariants,
|
|
814
|
-
PageSectionTypes,
|
|
815
|
-
SkipToContent,
|
|
816
|
-
TextContent,
|
|
817
|
-
Text,
|
|
818
|
-
Toolbar,
|
|
819
|
-
ToolbarContent,
|
|
820
|
-
ToolbarGroup,
|
|
821
|
-
ToolbarItem
|
|
822
|
-
} from '@patternfly/react-core';
|
|
823
|
-
import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
|
|
824
|
-
import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
|
|
825
|
-
import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
|
|
826
|
-
import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
|
|
827
|
-
import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
|
|
828
|
-
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
|
|
829
|
-
import imgAvatar from '@patternfly/react-core/src/components/assets/avatarImg.svg';
|
|
830
|
-
import pfLogo from '@patternfly/react-core/src/demos/assets/pf-logo.svg';
|
|
831
|
-
import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/DashboardWrapper';
|
|
832
|
-
|
|
833
|
-
class HorizontalNavWithSubnav extends React.Component {
|
|
834
|
-
constructor(props) {
|
|
835
|
-
super(props);
|
|
836
|
-
this.state = {
|
|
837
|
-
isDropdownOpen: false,
|
|
838
|
-
isKebabDropdownOpen: false,
|
|
839
|
-
isFullKebabDropdownOpen: false,
|
|
840
|
-
activeItem: 0,
|
|
841
|
-
activeSubNavItem: 7
|
|
842
|
-
};
|
|
843
|
-
|
|
844
|
-
this.onDropdownToggle = () => {
|
|
845
|
-
this.setState((prevState) => ({
|
|
846
|
-
isDropdownOpen: !prevState.isDropdownOpen
|
|
847
|
-
}));
|
|
848
|
-
};
|
|
849
|
-
|
|
850
|
-
this.onDropdownSelect = () => {
|
|
851
|
-
this.setState({
|
|
852
|
-
isDropdownOpen: false
|
|
853
|
-
});
|
|
854
|
-
};
|
|
855
|
-
|
|
856
|
-
this.onKebabDropdownToggle = () => {
|
|
857
|
-
this.setState((prevState) => ({
|
|
858
|
-
isKebabDropdownOpen: !prevState.isKebabDropdownOpen
|
|
859
|
-
}));
|
|
860
|
-
};
|
|
861
|
-
|
|
862
|
-
this.onKebabDropdownSelect = () => {
|
|
863
|
-
this.setState({
|
|
864
|
-
isKebabDropdownOpen: false
|
|
865
|
-
});
|
|
866
|
-
};
|
|
867
|
-
|
|
868
|
-
this.onFullKebabToggle = () => {
|
|
869
|
-
this.setState((prevState) => ({
|
|
870
|
-
isFullKebabDropdownOpen: !prevState.isFullKebabDropdownOpen
|
|
871
|
-
}));
|
|
872
|
-
};
|
|
873
|
-
|
|
874
|
-
this.onNavSelect = (_event, result) => {
|
|
875
|
-
this.setState({
|
|
876
|
-
activeItem: result.itemId
|
|
877
|
-
});
|
|
878
|
-
};
|
|
879
|
-
|
|
880
|
-
this.onSubNavSelect = (_event, result) => {
|
|
881
|
-
this.setState({
|
|
882
|
-
activeSubNavItem: result.itemId
|
|
883
|
-
});
|
|
884
|
-
};
|
|
885
|
-
}
|
|
886
|
-
|
|
887
|
-
render() {
|
|
888
|
-
const { isDropdownOpen, isKebabDropdownOpen, isFullKebabDropdownOpen, activeItem, activeSubNavItem } = this.state;
|
|
889
|
-
|
|
890
|
-
const PageNav = (
|
|
891
|
-
<Nav onSelect={this.onNavSelect} aria-label="Nav" variant="horizontal">
|
|
892
|
-
<NavList>
|
|
893
|
-
<NavItem itemId={0} isActive={activeItem === 0} to="#">
|
|
894
|
-
System Panel
|
|
895
|
-
</NavItem>
|
|
896
|
-
<NavItem itemId={1} isActive={activeItem === 1} to="#">
|
|
897
|
-
Policy
|
|
898
|
-
</NavItem>
|
|
899
|
-
<NavItem itemId={2} isActive={activeItem === 2} to="#">
|
|
900
|
-
Authentication
|
|
901
|
-
</NavItem>
|
|
902
|
-
<NavItem itemId={3} isActive={activeItem === 3} to="#">
|
|
903
|
-
Network Services
|
|
904
|
-
</NavItem>
|
|
905
|
-
<NavItem itemId={4} isActive={activeItem === 4} to="#">
|
|
906
|
-
Server
|
|
907
|
-
</NavItem>
|
|
908
|
-
<NavItem itemId={5} isActive={activeItem === 5} to="#">
|
|
909
|
-
Other horizontal nav item 1
|
|
910
|
-
</NavItem>
|
|
911
|
-
<NavItem itemId={6} isActive={activeItem === 6} to="#">
|
|
912
|
-
Other horizontal nav item 2
|
|
913
|
-
</NavItem>
|
|
914
|
-
</NavList>
|
|
915
|
-
</Nav>
|
|
916
|
-
);
|
|
917
|
-
const kebabDropdownItems = (
|
|
918
|
-
<>
|
|
919
|
-
<DropdownItem>
|
|
920
|
-
<CogIcon /> Settings
|
|
921
|
-
</DropdownItem>
|
|
922
|
-
<DropdownItem>
|
|
923
|
-
<HelpIcon /> Help
|
|
924
|
-
</DropdownItem>
|
|
925
|
-
</>
|
|
926
|
-
);
|
|
927
|
-
const userDropdownItems = (
|
|
928
|
-
<>
|
|
929
|
-
<DropdownItem key="group 2 profile">My profile</DropdownItem>
|
|
930
|
-
<DropdownItem key="group 2 user">User management</DropdownItem>
|
|
931
|
-
<DropdownItem key="group 2 logout">Logout</DropdownItem>
|
|
932
|
-
</>
|
|
933
|
-
);
|
|
934
|
-
|
|
935
|
-
const SubNav = (
|
|
936
|
-
<Nav onSelect={this.onSubNavSelect} aria-label="Nav" variant="horizontal-subnav">
|
|
937
|
-
<NavList>
|
|
938
|
-
<NavItem itemId={7} isActive={activeSubNavItem === 7} to="#">
|
|
939
|
-
Horizontal subnav item 1
|
|
940
|
-
</NavItem>
|
|
941
|
-
<NavItem itemId={8} isActive={activeSubNavItem === 8} to="#">
|
|
942
|
-
Horizontal subnav item 2
|
|
943
|
-
</NavItem>
|
|
944
|
-
<NavItem itemId={9} isActive={activeSubNavItem === 9} to="#">
|
|
945
|
-
Horizontal subnav item 3
|
|
946
|
-
</NavItem>
|
|
947
|
-
<NavItem itemId={10} isActive={activeSubNavItem === 10} to="#">
|
|
948
|
-
Horizontal subnav item 4
|
|
949
|
-
</NavItem>
|
|
950
|
-
<NavItem itemId={11} isActive={activeSubNavItem === 11} to="#">
|
|
951
|
-
Horizontal subnav item 5
|
|
952
|
-
</NavItem>
|
|
953
|
-
<NavItem itemId={12} isActive={activeSubNavItem === 12} to="#">
|
|
954
|
-
Horizontal subnav item 6
|
|
955
|
-
</NavItem>
|
|
956
|
-
<NavItem itemId={13} isActive={activeSubNavItem === 13} to="#">
|
|
957
|
-
Horizontal subnav item 7
|
|
958
|
-
</NavItem>
|
|
959
|
-
</NavList>
|
|
960
|
-
</Nav>
|
|
961
|
-
);
|
|
962
|
-
|
|
963
|
-
const headerToolbar = (
|
|
964
|
-
<Toolbar id="toolbar" isFullHeight isStatic>
|
|
965
|
-
<ToolbarContent>
|
|
966
|
-
<ToolbarItem isOverflowContainer>{PageNav}</ToolbarItem>
|
|
967
|
-
<ToolbarGroup
|
|
968
|
-
variant="icon-button-group"
|
|
969
|
-
align={{ default: 'alignRight' }}
|
|
970
|
-
spacer={{ default: 'spacerNone', md: 'spacerMd' }}
|
|
971
|
-
>
|
|
972
|
-
<ToolbarItem>
|
|
973
|
-
<Button aria-label="Notifications" variant={ButtonVariant.plain} icon={<BellIcon />} onClick={() => {}} />
|
|
974
|
-
</ToolbarItem>
|
|
975
|
-
<ToolbarGroup variant="icon-button-group" visibility={{ default: 'hidden', lg: 'visible' }}>
|
|
976
|
-
<ToolbarItem>
|
|
977
|
-
<Button aria-label="Settings" variant={ButtonVariant.plain} icon={<CogIcon />} />
|
|
978
|
-
</ToolbarItem>
|
|
979
|
-
<ToolbarItem>
|
|
980
|
-
<Button aria-label="Help" variant={ButtonVariant.plain} icon={<QuestionCircleIcon />} />
|
|
981
|
-
</ToolbarItem>
|
|
982
|
-
</ToolbarGroup>
|
|
983
|
-
<ToolbarItem visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}>
|
|
984
|
-
<Dropdown
|
|
985
|
-
isOpen={isKebabDropdownOpen}
|
|
986
|
-
onSelect={this.onKebabDropdownSelect}
|
|
987
|
-
onOpenChange={(isOpen) => this.setState({ isKebabDropdownOpen: isOpen })}
|
|
988
|
-
popperProps={{ position: 'right' }}
|
|
989
|
-
toggle={(toggleRef) => (
|
|
990
|
-
<MenuToggle
|
|
991
|
-
ref={toggleRef}
|
|
992
|
-
isExpanded={isKebabDropdownOpen}
|
|
993
|
-
onClick={this.onKebabDropdownToggle}
|
|
994
|
-
variant="plain"
|
|
995
|
-
aria-label="Settings and help"
|
|
996
|
-
>
|
|
997
|
-
<EllipsisVIcon aria-hidden="true" />
|
|
998
|
-
</MenuToggle>
|
|
999
|
-
)}
|
|
1000
|
-
>
|
|
1001
|
-
<DropdownList>{kebabDropdownItems}</DropdownList>
|
|
1002
|
-
</Dropdown>
|
|
1003
|
-
</ToolbarItem>
|
|
1004
|
-
<ToolbarItem visibility={{ md: 'hidden' }}>
|
|
1005
|
-
<Dropdown
|
|
1006
|
-
isOpen={isFullKebabDropdownOpen}
|
|
1007
|
-
onSelect={this.onFullKebabSelect}
|
|
1008
|
-
onOpenChange={(isOpen) => this.setState({ isFullKebabDropdownOpen: isOpen })}
|
|
1009
|
-
popperProps={{ position: 'right' }}
|
|
1010
|
-
toggle={(toggleRef) => (
|
|
1011
|
-
<MenuToggle
|
|
1012
|
-
ref={toggleRef}
|
|
1013
|
-
isExpanded={isFullKebabDropdownOpen}
|
|
1014
|
-
onClick={this.onFullKebabToggle}
|
|
1015
|
-
variant="plain"
|
|
1016
|
-
aria-label="Toolbar menu"
|
|
1017
|
-
>
|
|
1018
|
-
<EllipsisVIcon aria-hidden="true" />
|
|
1019
|
-
</MenuToggle>
|
|
1020
|
-
)}
|
|
1021
|
-
>
|
|
1022
|
-
<DropdownGroup key="group 2" aria-label="User actions">
|
|
1023
|
-
<DropdownList>{userDropdownItems}</DropdownList>
|
|
1024
|
-
</DropdownGroup>
|
|
1025
|
-
<Divider />
|
|
1026
|
-
<DropdownList>{kebabDropdownItems}</DropdownList>
|
|
1027
|
-
</Dropdown>
|
|
1028
|
-
</ToolbarItem>
|
|
1029
|
-
</ToolbarGroup>
|
|
1030
|
-
<ToolbarItem visibility={{ default: 'hidden', md: 'visible' }}>
|
|
1031
|
-
<Dropdown
|
|
1032
|
-
isOpen={isDropdownOpen}
|
|
1033
|
-
onSelect={this.onDropdownSelect}
|
|
1034
|
-
onOpenChange={(isOpen) => this.setState({ isDropdownOpen: isOpen })}
|
|
1035
|
-
popperProps={{ position: 'right' }}
|
|
1036
|
-
toggle={(toggleRef) => (
|
|
1037
|
-
<MenuToggle
|
|
1038
|
-
ref={toggleRef}
|
|
1039
|
-
isExpanded={isDropdownOpen}
|
|
1040
|
-
onClick={this.onDropdownToggle}
|
|
1041
|
-
icon={<Avatar src={imgAvatar} alt="" />}
|
|
1042
|
-
isFullHeight
|
|
1043
|
-
>
|
|
1044
|
-
Ned Username
|
|
1045
|
-
</MenuToggle>
|
|
1046
|
-
)}
|
|
1047
|
-
>
|
|
1048
|
-
<DropdownList>{userDropdownItems}</DropdownList>
|
|
1049
|
-
</Dropdown>
|
|
1050
|
-
</ToolbarItem>
|
|
1051
|
-
</ToolbarContent>
|
|
1052
|
-
</Toolbar>
|
|
1053
|
-
);
|
|
1054
|
-
const Header = (
|
|
1055
|
-
<Masthead>
|
|
1056
|
-
<MastheadToggle>
|
|
1057
|
-
<PageToggleButton variant="plain" aria-label="Global navigation">
|
|
1058
|
-
<BarsIcon />
|
|
1059
|
-
</PageToggleButton>
|
|
1060
|
-
</MastheadToggle>
|
|
1061
|
-
<MastheadMain>
|
|
1062
|
-
<MastheadBrand>
|
|
1063
|
-
<Brand src={pfLogo} alt="PatternFly" heights={{ default: '36px' }} />
|
|
1064
|
-
</MastheadBrand>
|
|
1065
|
-
</MastheadMain>
|
|
1066
|
-
<MastheadContent>{headerToolbar}</MastheadContent>
|
|
1067
|
-
</Masthead>
|
|
1068
|
-
);
|
|
1069
|
-
|
|
1070
|
-
const pageId = 'main-content-page-layout-horizontal-nav';
|
|
1071
|
-
const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
|
|
1072
|
-
|
|
1073
|
-
return (
|
|
1074
|
-
<React.Fragment>
|
|
1075
|
-
<Page header={Header} skipToContent={PageSkipToContent} mainContainerId={pageId}>
|
|
1076
|
-
<PageSection type={PageSectionTypes.subNav} isWidthLimited>
|
|
1077
|
-
{SubNav}
|
|
1078
|
-
</PageSection>
|
|
1079
|
-
<PageSection type={PageSectionTypes.breadcrumb} isWidthLimited>
|
|
1080
|
-
{DashboardBreadcrumb}
|
|
1081
|
-
</PageSection>
|
|
1082
|
-
<PageSection variant={PageSectionVariants.light}>
|
|
1083
|
-
<TextContent>
|
|
1084
|
-
<Text component="h1">Main title</Text>
|
|
1085
|
-
<Text component="p">
|
|
1086
|
-
Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
|
|
1087
|
-
of it’s relative line height of 1.5.
|
|
1088
|
-
</Text>
|
|
1089
|
-
</TextContent>
|
|
1090
|
-
</PageSection>
|
|
1091
|
-
<PageSection>
|
|
1092
|
-
<Gallery hasGutter>
|
|
1093
|
-
{Array.apply(0, Array(10)).map((x, i) => (
|
|
1094
|
-
<GalleryItem key={i}>
|
|
1095
|
-
<Card>
|
|
1096
|
-
<CardBody>This is a card</CardBody>
|
|
1097
|
-
</Card>
|
|
1098
|
-
</GalleryItem>
|
|
1099
|
-
))}
|
|
1100
|
-
</Gallery>
|
|
1101
|
-
</PageSection>
|
|
1102
|
-
</Page>
|
|
1103
|
-
</React.Fragment>
|
|
1104
|
-
);
|
|
1105
|
-
}
|
|
1106
|
-
}
|
|
44
|
+
```js file='./examples/Nav/NavHorizontalWithSubnav.tsx' isFullscreen
|
|
1107
45
|
```
|
|
1108
46
|
|
|
1109
47
|
### Tertiary nav (deprecated)
|
|
1110
48
|
|
|
1111
|
-
```js isFullscreen
|
|
1112
|
-
import React from 'react';
|
|
1113
|
-
import {
|
|
1114
|
-
Card,
|
|
1115
|
-
CardBody,
|
|
1116
|
-
Gallery,
|
|
1117
|
-
GalleryItem,
|
|
1118
|
-
Nav,
|
|
1119
|
-
NavItem,
|
|
1120
|
-
NavList,
|
|
1121
|
-
Page,
|
|
1122
|
-
PageSection,
|
|
1123
|
-
PageSectionVariants,
|
|
1124
|
-
SkipToContent,
|
|
1125
|
-
TextContent,
|
|
1126
|
-
Text
|
|
1127
|
-
} from '@patternfly/react-core';
|
|
1128
|
-
import { DashboardBreadcrumb } from '@patternfly/react-core/src/demos/DashboardWrapper';
|
|
1129
|
-
import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
|
|
1130
|
-
|
|
1131
|
-
class PageLayoutTertiaryNav extends React.Component {
|
|
1132
|
-
constructor(props) {
|
|
1133
|
-
super(props);
|
|
1134
|
-
this.state = {
|
|
1135
|
-
activeItem: 0
|
|
1136
|
-
};
|
|
1137
|
-
|
|
1138
|
-
this.onNavSelect = (_event, result) => {
|
|
1139
|
-
this.setState({
|
|
1140
|
-
activeItem: result.itemId
|
|
1141
|
-
});
|
|
1142
|
-
};
|
|
1143
|
-
}
|
|
1144
|
-
|
|
1145
|
-
render() {
|
|
1146
|
-
const { activeItem } = this.state;
|
|
1147
|
-
|
|
1148
|
-
const PageNav = (
|
|
1149
|
-
<Nav variant="tertiary" onSelect={this.onNavSelect} aria-label="Nav">
|
|
1150
|
-
<NavList>
|
|
1151
|
-
<NavItem itemId={0} isActive={activeItem === 0} to="#">
|
|
1152
|
-
System Panel
|
|
1153
|
-
</NavItem>
|
|
1154
|
-
<NavItem itemId={1} isActive={activeItem === 1} to="#">
|
|
1155
|
-
Policy
|
|
1156
|
-
</NavItem>
|
|
1157
|
-
<NavItem itemId={2} isActive={activeItem === 2} to="#">
|
|
1158
|
-
Authentication
|
|
1159
|
-
</NavItem>
|
|
1160
|
-
<NavItem itemId={3} isActive={activeItem === 3} to="#">
|
|
1161
|
-
Network Services
|
|
1162
|
-
</NavItem>
|
|
1163
|
-
<NavItem itemId={4} isActive={activeItem === 4} to="#">
|
|
1164
|
-
Server
|
|
1165
|
-
</NavItem>
|
|
1166
|
-
</NavList>
|
|
1167
|
-
</Nav>
|
|
1168
|
-
);
|
|
1169
|
-
|
|
1170
|
-
const pageId = 'main-content-page-layout-tertiary-nav';
|
|
1171
|
-
const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
|
|
1172
|
-
|
|
1173
|
-
return (
|
|
1174
|
-
<React.Fragment>
|
|
1175
|
-
<Page
|
|
1176
|
-
header={<DashboardHeader />}
|
|
1177
|
-
breadcrumb={DashboardBreadcrumb}
|
|
1178
|
-
tertiaryNav={PageNav}
|
|
1179
|
-
isManagedSidebar
|
|
1180
|
-
isTertiaryNavWidthLimited
|
|
1181
|
-
skipToContent={PageSkipToContent}
|
|
1182
|
-
mainContainerId={pageId}
|
|
1183
|
-
>
|
|
1184
|
-
<PageSection variant={PageSectionVariants.light}>
|
|
1185
|
-
<TextContent>
|
|
1186
|
-
<Text component="h1">Main title</Text>
|
|
1187
|
-
<Text component="p">
|
|
1188
|
-
Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
|
|
1189
|
-
of its relative line height of 1.5.
|
|
1190
|
-
</Text>
|
|
1191
|
-
</TextContent>
|
|
1192
|
-
</PageSection>
|
|
1193
|
-
<PageSection>
|
|
1194
|
-
<Gallery hasGutter>
|
|
1195
|
-
{Array.apply(0, Array(10)).map((x, i) => (
|
|
1196
|
-
<GalleryItem key={i}>
|
|
1197
|
-
<Card>
|
|
1198
|
-
<CardBody>This is a card</CardBody>
|
|
1199
|
-
</Card>
|
|
1200
|
-
</GalleryItem>
|
|
1201
|
-
))}
|
|
1202
|
-
</Gallery>
|
|
1203
|
-
</PageSection>
|
|
1204
|
-
</Page>
|
|
1205
|
-
</React.Fragment>
|
|
1206
|
-
);
|
|
1207
|
-
}
|
|
1208
|
-
}
|
|
49
|
+
```js file='./examples/Nav/deprecated/NavTertiary.tsx' isFullscreen
|
|
1209
50
|
```
|
|
1210
51
|
|
|
1211
52
|
### Light nav (deprecated)
|
|
1212
53
|
|
|
1213
|
-
```js isFullscreen
|
|
1214
|
-
import React from 'react';
|
|
1215
|
-
import {
|
|
1216
|
-
Card,
|
|
1217
|
-
CardBody,
|
|
1218
|
-
Gallery,
|
|
1219
|
-
GalleryItem,
|
|
1220
|
-
Nav,
|
|
1221
|
-
NavItem,
|
|
1222
|
-
NavList,
|
|
1223
|
-
Page,
|
|
1224
|
-
PageSection,
|
|
1225
|
-
PageSectionVariants,
|
|
1226
|
-
PageSidebar,
|
|
1227
|
-
PageSidebarBody,
|
|
1228
|
-
SkipToContent,
|
|
1229
|
-
TextContent,
|
|
1230
|
-
Text
|
|
1231
|
-
} from '@patternfly/react-core';
|
|
1232
|
-
import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
|
|
1233
|
-
|
|
1234
|
-
class PageLayoutLightNav extends React.Component {
|
|
1235
|
-
constructor(props) {
|
|
1236
|
-
super(props);
|
|
1237
|
-
this.state = {
|
|
1238
|
-
activeItem: 0
|
|
1239
|
-
};
|
|
1240
|
-
|
|
1241
|
-
this.onNavSelect = (_event, result) => {
|
|
1242
|
-
this.setState({
|
|
1243
|
-
activeItem: result.itemId
|
|
1244
|
-
});
|
|
1245
|
-
};
|
|
1246
|
-
}
|
|
1247
|
-
|
|
1248
|
-
render() {
|
|
1249
|
-
const { activeItem } = this.state;
|
|
1250
|
-
|
|
1251
|
-
const PageNav = (
|
|
1252
|
-
<Nav onSelect={this.onNavSelect} aria-label="Nav" theme="light">
|
|
1253
|
-
<NavList>
|
|
1254
|
-
<NavItem itemId={0} isActive={activeItem === 0} to="#">
|
|
1255
|
-
System Panel
|
|
1256
|
-
</NavItem>
|
|
1257
|
-
<NavItem itemId={1} isActive={activeItem === 1} to="#">
|
|
1258
|
-
Policy
|
|
1259
|
-
</NavItem>
|
|
1260
|
-
<NavItem itemId={2} isActive={activeItem === 2} to="#">
|
|
1261
|
-
Authentication
|
|
1262
|
-
</NavItem>
|
|
1263
|
-
<NavItem itemId={3} isActive={activeItem === 3} to="#">
|
|
1264
|
-
Network Services
|
|
1265
|
-
</NavItem>
|
|
1266
|
-
<NavItem itemId={4} isActive={activeItem === 4} to="#">
|
|
1267
|
-
Server
|
|
1268
|
-
</NavItem>
|
|
1269
|
-
</NavList>
|
|
1270
|
-
</Nav>
|
|
1271
|
-
);
|
|
1272
|
-
|
|
1273
|
-
const Sidebar = (
|
|
1274
|
-
<PageSidebar theme="light">
|
|
1275
|
-
<PageSidebarBody>{PageNav}</PageSidebarBody>
|
|
1276
|
-
</PageSidebar>
|
|
1277
|
-
);
|
|
1278
|
-
const pageId = 'main-content-page-layout-simple-nav';
|
|
1279
|
-
const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to Content</SkipToContent>;
|
|
1280
|
-
|
|
1281
|
-
return (
|
|
1282
|
-
<React.Fragment>
|
|
1283
|
-
<Page
|
|
1284
|
-
header={<DashboardHeader />}
|
|
1285
|
-
sidebar={Sidebar}
|
|
1286
|
-
isManagedSidebar
|
|
1287
|
-
skipToContent={PageSkipToContent}
|
|
1288
|
-
mainContainerId={pageId}
|
|
1289
|
-
>
|
|
1290
|
-
<PageSection variant={PageSectionVariants.light}>
|
|
1291
|
-
<TextContent>
|
|
1292
|
-
<Text component="h1">Main title</Text>
|
|
1293
|
-
<Text component="p">
|
|
1294
|
-
Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
|
|
1295
|
-
of its relative line height of 1.5.
|
|
1296
|
-
</Text>
|
|
1297
|
-
</TextContent>
|
|
1298
|
-
</PageSection>
|
|
1299
|
-
<PageSection>
|
|
1300
|
-
<Gallery hasGutter>
|
|
1301
|
-
{Array.apply(0, Array(10)).map((x, i) => (
|
|
1302
|
-
<GalleryItem key={i}>
|
|
1303
|
-
<Card>
|
|
1304
|
-
<CardBody>This is a card</CardBody>
|
|
1305
|
-
</Card>
|
|
1306
|
-
</GalleryItem>
|
|
1307
|
-
))}
|
|
1308
|
-
</Gallery>
|
|
1309
|
-
</PageSection>
|
|
1310
|
-
</Page>
|
|
1311
|
-
</React.Fragment>
|
|
1312
|
-
);
|
|
1313
|
-
}
|
|
1314
|
-
}
|
|
54
|
+
```js file='./examples/Nav/deprecated/NavLight.tsx' isFullscreen
|
|
1315
55
|
```
|
|
1316
56
|
|
|
1317
57
|
### Manual nav
|
|
1318
58
|
|
|
1319
|
-
```js isFullscreen
|
|
1320
|
-
import React from 'react';
|
|
1321
|
-
import {
|
|
1322
|
-
Avatar,
|
|
1323
|
-
Brand,
|
|
1324
|
-
Button,
|
|
1325
|
-
ButtonVariant,
|
|
1326
|
-
Card,
|
|
1327
|
-
CardBody,
|
|
1328
|
-
Dropdown,
|
|
1329
|
-
DropdownItem,
|
|
1330
|
-
DropdownList,
|
|
1331
|
-
Gallery,
|
|
1332
|
-
GalleryItem,
|
|
1333
|
-
Masthead,
|
|
1334
|
-
MastheadMain,
|
|
1335
|
-
MastheadBrand,
|
|
1336
|
-
MastheadContent,
|
|
1337
|
-
MenuToggle,
|
|
1338
|
-
Nav,
|
|
1339
|
-
NavItem,
|
|
1340
|
-
NavList,
|
|
1341
|
-
Page,
|
|
1342
|
-
PageSection,
|
|
1343
|
-
PageSectionVariants,
|
|
1344
|
-
PageSidebar,
|
|
1345
|
-
PageSidebarBody,
|
|
1346
|
-
SkipToContent,
|
|
1347
|
-
TextContent,
|
|
1348
|
-
Text,
|
|
1349
|
-
Toolbar,
|
|
1350
|
-
ToolbarContent,
|
|
1351
|
-
ToolbarGroup,
|
|
1352
|
-
ToolbarItem
|
|
1353
|
-
} from '@patternfly/react-core';
|
|
1354
|
-
import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
|
|
1355
|
-
import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
|
|
1356
|
-
import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
|
|
1357
|
-
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
|
|
1358
|
-
import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
|
|
1359
|
-
import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
|
|
1360
|
-
import imgAvatar from '@patternfly/react-core/src/components/assets/avatarImg.svg';
|
|
1361
|
-
import pfLogo from '@patternfly/react-core/src/demos/assets/pf-logo.svg';
|
|
1362
|
-
|
|
1363
|
-
class PageLayoutManualNav extends React.Component {
|
|
1364
|
-
constructor(props) {
|
|
1365
|
-
super(props);
|
|
1366
|
-
this.state = {
|
|
1367
|
-
isDropdownOpen: false,
|
|
1368
|
-
isKebabDropdownOpen: false,
|
|
1369
|
-
isFullKebabDropdownOpen: false,
|
|
1370
|
-
activeItem: 0,
|
|
1371
|
-
isMobileView: false,
|
|
1372
|
-
isNavOpenDesktop: true,
|
|
1373
|
-
isNavOpenMobile: false
|
|
1374
|
-
};
|
|
1375
|
-
|
|
1376
|
-
this.onDropdownToggle = () => {
|
|
1377
|
-
this.setState((prevState) => ({
|
|
1378
|
-
isDropdownOpen: !prevState.isDropdownOpen
|
|
1379
|
-
}));
|
|
1380
|
-
};
|
|
1381
|
-
|
|
1382
|
-
this.onDropdownSelect = () => {
|
|
1383
|
-
this.setState({
|
|
1384
|
-
isDropdownOpen: false
|
|
1385
|
-
});
|
|
1386
|
-
};
|
|
1387
|
-
|
|
1388
|
-
this.onKebabDropdownToggle = () => {
|
|
1389
|
-
this.setState((prevState) => ({
|
|
1390
|
-
isKebabDropdownOpen: !prevState.isKebabDropdownOpen
|
|
1391
|
-
}));
|
|
1392
|
-
};
|
|
1393
|
-
|
|
1394
|
-
this.onKebabDropdownSelect = () => {
|
|
1395
|
-
this.setState({
|
|
1396
|
-
isKebabDropdownOpen: false
|
|
1397
|
-
});
|
|
1398
|
-
};
|
|
1399
|
-
|
|
1400
|
-
this.onFullKebabToggle = () => {
|
|
1401
|
-
this.setState((prevState) => ({
|
|
1402
|
-
isFullKebabDropdownOpen: !prevState.isFullKebabDropdownOpen
|
|
1403
|
-
}));
|
|
1404
|
-
};
|
|
1405
|
-
|
|
1406
|
-
this.onNavSelect = (_event, result) => {
|
|
1407
|
-
this.setState({
|
|
1408
|
-
activeItem: result.itemId
|
|
1409
|
-
});
|
|
1410
|
-
};
|
|
1411
|
-
|
|
1412
|
-
this.onNavToggleDesktop = () => {
|
|
1413
|
-
this.setState({
|
|
1414
|
-
isNavOpenDesktop: !this.state.isNavOpenDesktop
|
|
1415
|
-
});
|
|
1416
|
-
};
|
|
1417
|
-
|
|
1418
|
-
this.onNavToggleMobile = () => {
|
|
1419
|
-
this.setState({
|
|
1420
|
-
isNavOpenMobile: !this.state.isNavOpenMobile
|
|
1421
|
-
});
|
|
1422
|
-
};
|
|
1423
|
-
|
|
1424
|
-
this.onPageResize = (_event, { mobileView, windowSize }) => {
|
|
1425
|
-
this.setState({
|
|
1426
|
-
isMobileView: mobileView
|
|
1427
|
-
});
|
|
1428
|
-
};
|
|
1429
|
-
}
|
|
1430
|
-
|
|
1431
|
-
render() {
|
|
1432
|
-
const {
|
|
1433
|
-
isDropdownOpen,
|
|
1434
|
-
isKebabDropdownOpen,
|
|
1435
|
-
isFullKebabDropdownOpen,
|
|
1436
|
-
activeItem,
|
|
1437
|
-
isNavOpenDesktop,
|
|
1438
|
-
isNavOpenMobile,
|
|
1439
|
-
isMobileView
|
|
1440
|
-
} = this.state;
|
|
1441
|
-
|
|
1442
|
-
const PageNav = (
|
|
1443
|
-
<Nav onSelect={this.onNavSelect} aria-label="Nav">
|
|
1444
|
-
<NavList>
|
|
1445
|
-
<NavItem itemId={0} isActive={activeItem === 0} to="#">
|
|
1446
|
-
System Panel
|
|
1447
|
-
</NavItem>
|
|
1448
|
-
<NavItem itemId={1} isActive={activeItem === 1} to="#">
|
|
1449
|
-
Policy
|
|
1450
|
-
</NavItem>
|
|
1451
|
-
<NavItem itemId={2} isActive={activeItem === 2} to="#">
|
|
1452
|
-
Authentication
|
|
1453
|
-
</NavItem>
|
|
1454
|
-
<NavItem itemId={3} isActive={activeItem === 3} to="#">
|
|
1455
|
-
Network Services
|
|
1456
|
-
</NavItem>
|
|
1457
|
-
<NavItem itemId={4} isActive={activeItem === 4} to="#">
|
|
1458
|
-
Server
|
|
1459
|
-
</NavItem>
|
|
1460
|
-
</NavList>
|
|
1461
|
-
</Nav>
|
|
1462
|
-
);
|
|
1463
|
-
const kebabDropdownItems = (
|
|
1464
|
-
<>
|
|
1465
|
-
<DropdownItem>
|
|
1466
|
-
<CogIcon /> Settings
|
|
1467
|
-
</DropdownItem>
|
|
1468
|
-
<DropdownItem>
|
|
1469
|
-
<HelpIcon /> Help
|
|
1470
|
-
</DropdownItem>
|
|
1471
|
-
</>
|
|
1472
|
-
);
|
|
1473
|
-
const userDropdownItems = (
|
|
1474
|
-
<>
|
|
1475
|
-
<DropdownItem key="group 2 profile">My profile</DropdownItem>
|
|
1476
|
-
<DropdownItem key="group 2 user">User management</DropdownItem>
|
|
1477
|
-
<DropdownItem key="group 2 logout">Logout</DropdownItem>
|
|
1478
|
-
</>
|
|
1479
|
-
);
|
|
1480
|
-
|
|
1481
|
-
const headerToolbar = (
|
|
1482
|
-
<Toolbar id="toolbar" isFullHeight isStatic>
|
|
1483
|
-
<ToolbarContent>
|
|
1484
|
-
<ToolbarGroup
|
|
1485
|
-
variant="icon-button-group"
|
|
1486
|
-
align={{ default: 'alignRight' }}
|
|
1487
|
-
spacer={{ default: 'spacerNone', md: 'spacerMd' }}
|
|
1488
|
-
>
|
|
1489
|
-
<ToolbarItem>
|
|
1490
|
-
<Button aria-label="Notifications" variant={ButtonVariant.plain} icon={<BellIcon />} onClick={() => {}} />
|
|
1491
|
-
</ToolbarItem>
|
|
1492
|
-
<ToolbarGroup variant="icon-button-group" visibility={{ default: 'hidden', lg: 'visible' }}>
|
|
1493
|
-
<ToolbarItem>
|
|
1494
|
-
<Button aria-label="Settings" variant={ButtonVariant.plain} icon={<CogIcon />} />
|
|
1495
|
-
</ToolbarItem>
|
|
1496
|
-
<ToolbarItem>
|
|
1497
|
-
<Button aria-label="Help" variant={ButtonVariant.plain} icon={<QuestionCircleIcon />} />
|
|
1498
|
-
</ToolbarItem>
|
|
1499
|
-
</ToolbarGroup>
|
|
1500
|
-
<ToolbarItem visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}>
|
|
1501
|
-
<Dropdown
|
|
1502
|
-
isOpen={isKebabDropdownOpen}
|
|
1503
|
-
onSelect={this.onKebabDropdownSelect}
|
|
1504
|
-
onOpenChange={(isOpen) => this.setState({ isKebabDropdownOpen: isOpen })}
|
|
1505
|
-
popperProps={{ position: 'right' }}
|
|
1506
|
-
toggle={(toggleRef) => (
|
|
1507
|
-
<MenuToggle
|
|
1508
|
-
ref={toggleRef}
|
|
1509
|
-
isExpanded={isKebabDropdownOpen}
|
|
1510
|
-
onClick={this.onKebabDropdownToggle}
|
|
1511
|
-
variant="plain"
|
|
1512
|
-
aria-label="Settings and help"
|
|
1513
|
-
>
|
|
1514
|
-
<EllipsisVIcon aria-hidden="true" />
|
|
1515
|
-
</MenuToggle>
|
|
1516
|
-
)}
|
|
1517
|
-
>
|
|
1518
|
-
<DropdownList>{kebabDropdownItems}</DropdownList>
|
|
1519
|
-
</Dropdown>
|
|
1520
|
-
</ToolbarItem>
|
|
1521
|
-
<ToolbarItem visibility={{ md: 'hidden' }}>
|
|
1522
|
-
<Dropdown
|
|
1523
|
-
isOpen={isFullKebabDropdownOpen}
|
|
1524
|
-
onSelect={this.onFullKebabSelect}
|
|
1525
|
-
onOpenChange={(isOpen) => this.setState({ isFullKebabDropdownOpen: isOpen })}
|
|
1526
|
-
popperProps={{ position: 'right' }}
|
|
1527
|
-
toggle={(toggleRef) => (
|
|
1528
|
-
<MenuToggle
|
|
1529
|
-
ref={toggleRef}
|
|
1530
|
-
isExpanded={isFullKebabDropdownOpen}
|
|
1531
|
-
onClick={this.onFullKebabToggle}
|
|
1532
|
-
variant="plain"
|
|
1533
|
-
aria-label="Toolbar menu"
|
|
1534
|
-
>
|
|
1535
|
-
<EllipsisVIcon aria-hidden="true" />
|
|
1536
|
-
</MenuToggle>
|
|
1537
|
-
)}
|
|
1538
|
-
>
|
|
1539
|
-
<DropdownGroup key="group 2" aria-label="User actions">
|
|
1540
|
-
<DropdownList>{userDropdownItems}</DropdownList>
|
|
1541
|
-
</DropdownGroup>
|
|
1542
|
-
<Divider />
|
|
1543
|
-
<DropdownList>{kebabDropdownItems}</DropdownList>
|
|
1544
|
-
</Dropdown>
|
|
1545
|
-
</ToolbarItem>
|
|
1546
|
-
</ToolbarGroup>
|
|
1547
|
-
<ToolbarItem visibility={{ default: 'hidden', md: 'visible' }}>
|
|
1548
|
-
<Dropdown
|
|
1549
|
-
isOpen={isDropdownOpen}
|
|
1550
|
-
onSelect={this.onDropdownSelect}
|
|
1551
|
-
onOpenChange={(isOpen) => this.setState({ isDropdownOpen: isOpen })}
|
|
1552
|
-
popperProps={{ position: 'right' }}
|
|
1553
|
-
toggle={(toggleRef) => (
|
|
1554
|
-
<MenuToggle
|
|
1555
|
-
ref={toggleRef}
|
|
1556
|
-
isExpanded={isDropdownOpen}
|
|
1557
|
-
onClick={this.onDropdownToggle}
|
|
1558
|
-
icon={<Avatar src={imgAvatar} alt="" />}
|
|
1559
|
-
isFullHeight
|
|
1560
|
-
>
|
|
1561
|
-
Ned Username
|
|
1562
|
-
</MenuToggle>
|
|
1563
|
-
)}
|
|
1564
|
-
>
|
|
1565
|
-
<DropdownList>{userDropdownItems}</DropdownList>
|
|
1566
|
-
</Dropdown>
|
|
1567
|
-
</ToolbarItem>
|
|
1568
|
-
</ToolbarContent>
|
|
1569
|
-
</Toolbar>
|
|
1570
|
-
);
|
|
1571
|
-
const Header = (
|
|
1572
|
-
<Masthead>
|
|
1573
|
-
<MastheadToggle>
|
|
1574
|
-
<PageToggleButton variant="plain" aria-label="Global navigation">
|
|
1575
|
-
<BarsIcon />
|
|
1576
|
-
</PageToggleButton>
|
|
1577
|
-
</MastheadToggle>
|
|
1578
|
-
<MastheadMain>
|
|
1579
|
-
<MastheadBrand>
|
|
1580
|
-
<Brand src={pfLogo} alt="PatternFly" heights={{ default: '36px' }} />
|
|
1581
|
-
</MastheadBrand>
|
|
1582
|
-
</MastheadMain>
|
|
1583
|
-
<MastheadContent>{headerToolbar}</MastheadContent>
|
|
1584
|
-
</Masthead>
|
|
1585
|
-
);
|
|
1586
|
-
|
|
1587
|
-
const Sidebar = (
|
|
1588
|
-
<PageSidebar isSidebarOpen={isMobileView ? isNavOpenMobile : isNavOpenDesktop}>
|
|
1589
|
-
<PageSidebarBody>{PageNav}</PageSidebarBody>
|
|
1590
|
-
</PageSidebar>
|
|
1591
|
-
);
|
|
1592
|
-
const pageId = 'main-content-page-layout-manual-nav';
|
|
1593
|
-
const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to Content</SkipToContent>;
|
|
1594
|
-
|
|
1595
|
-
return (
|
|
1596
|
-
<React.Fragment>
|
|
1597
|
-
<Page
|
|
1598
|
-
header={Header}
|
|
1599
|
-
sidebar={Sidebar}
|
|
1600
|
-
onPageResize={this.onPageResize}
|
|
1601
|
-
skipToContent={PageSkipToContent}
|
|
1602
|
-
mainContainerId={pageId}
|
|
1603
|
-
>
|
|
1604
|
-
<PageSection variant={PageSectionVariants.light}>
|
|
1605
|
-
<TextContent>
|
|
1606
|
-
<Text component="h1">Main title</Text>
|
|
1607
|
-
<Text component="p">
|
|
1608
|
-
Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
|
|
1609
|
-
of its relative line height of 1.5.
|
|
1610
|
-
</Text>
|
|
1611
|
-
</TextContent>
|
|
1612
|
-
</PageSection>
|
|
1613
|
-
<PageSection>
|
|
1614
|
-
<Gallery hasGutter>
|
|
1615
|
-
{Array.apply(0, Array(10)).map((x, i) => (
|
|
1616
|
-
<GalleryItem key={i}>
|
|
1617
|
-
<Card>
|
|
1618
|
-
<CardBody>This is a card</CardBody>
|
|
1619
|
-
</Card>
|
|
1620
|
-
</GalleryItem>
|
|
1621
|
-
))}
|
|
1622
|
-
</Gallery>
|
|
1623
|
-
</PageSection>
|
|
1624
|
-
</Page>
|
|
1625
|
-
</React.Fragment>
|
|
1626
|
-
);
|
|
1627
|
-
}
|
|
1628
|
-
}
|
|
59
|
+
```js file='./examples/Nav/NavManual.tsx' isFullscreen
|
|
1629
60
|
```
|
|
1630
61
|
|
|
1631
62
|
### Flyout nav
|
|
1632
63
|
|
|
1633
|
-
```js isFullscreen
|
|
1634
|
-
import React from 'react';
|
|
1635
|
-
import {
|
|
1636
|
-
Page,
|
|
1637
|
-
Nav,
|
|
1638
|
-
NavList,
|
|
1639
|
-
NavItem,
|
|
1640
|
-
PageSidebar,
|
|
1641
|
-
PageSidebarBody,
|
|
1642
|
-
PageSection,
|
|
1643
|
-
PageSectionVariants,
|
|
1644
|
-
Menu,
|
|
1645
|
-
MenuContent,
|
|
1646
|
-
MenuList,
|
|
1647
|
-
MenuItem
|
|
1648
|
-
} from '@patternfly/react-core';
|
|
1649
|
-
import { DashboardHeader } from '@patternfly/react-core/src/demos/DashboardHeader';
|
|
1650
|
-
|
|
1651
|
-
class VerticalPage extends React.Component {
|
|
1652
|
-
constructor(props) {
|
|
1653
|
-
super(props);
|
|
1654
|
-
this.state = {
|
|
1655
|
-
isNavOpen: true,
|
|
1656
|
-
activeItem: 0
|
|
1657
|
-
};
|
|
1658
|
-
this.onNavSelect = (_event, result) => {
|
|
1659
|
-
this.setState({
|
|
1660
|
-
activeItem: result.itemId
|
|
1661
|
-
});
|
|
1662
|
-
};
|
|
1663
|
-
this.onMenuSelect = (event, itemId) => {
|
|
1664
|
-
this.setState({
|
|
1665
|
-
activeItem: itemId
|
|
1666
|
-
});
|
|
1667
|
-
};
|
|
1668
|
-
}
|
|
1669
|
-
|
|
1670
|
-
render() {
|
|
1671
|
-
const numFlyouts = 5;
|
|
1672
|
-
const FlyoutMenu = ({ depth, children }) => (
|
|
1673
|
-
<Menu key={depth} containsFlyout isNavFlyout id={`menu-${depth}`} onSelect={this.onMenuSelect}>
|
|
1674
|
-
<MenuContent>
|
|
1675
|
-
<MenuList>
|
|
1676
|
-
<MenuItem flyoutMenu={children} itemId={`next-menu-${depth}`}>
|
|
1677
|
-
Additional settings
|
|
1678
|
-
</MenuItem>
|
|
1679
|
-
{[...Array(numFlyouts - depth).keys()].map((j) => (
|
|
1680
|
-
<MenuItem key={`${depth}-${j}`} itemId={`${depth}-${j}`} to={`#menu-link-${depth}-${j}`}>
|
|
1681
|
-
Settings menu {depth} item {j}
|
|
1682
|
-
</MenuItem>
|
|
1683
|
-
))}
|
|
1684
|
-
<MenuItem flyoutMenu={children} itemId={`next-menu-2-${depth}`}>
|
|
1685
|
-
Additional settings
|
|
1686
|
-
</MenuItem>
|
|
1687
|
-
</MenuList>
|
|
1688
|
-
</MenuContent>
|
|
1689
|
-
</Menu>
|
|
1690
|
-
);
|
|
1691
|
-
let curFlyout = <FlyoutMenu depth={1} />;
|
|
1692
|
-
for (let i = 2; i < numFlyouts - 1; i++) {
|
|
1693
|
-
curFlyout = <FlyoutMenu depth={i}>{curFlyout}</FlyoutMenu>;
|
|
1694
|
-
}
|
|
1695
|
-
|
|
1696
|
-
const { activeItem } = this.state;
|
|
1697
|
-
|
|
1698
|
-
const Sidebar = (
|
|
1699
|
-
<PageSidebar style={{ overflow: 'visible' }}>
|
|
1700
|
-
<PageSidebarBody>
|
|
1701
|
-
<Nav onSelect={this.onNavSelect}>
|
|
1702
|
-
<NavList>
|
|
1703
|
-
<NavItem preventDefault id="flyout-link1" to="#flyout-link1" itemId={0} isActive={activeItem === 0}>
|
|
1704
|
-
System Panel
|
|
1705
|
-
</NavItem>
|
|
1706
|
-
<NavItem preventDefault flyout={curFlyout} id="flyout-link2" itemId={1} isActive={activeItem === 1}>
|
|
1707
|
-
Settings
|
|
1708
|
-
</NavItem>
|
|
1709
|
-
<NavItem preventDefault id="flyout-link3" to="#flyout-link3" itemId={2} isActive={activeItem === 2}>
|
|
1710
|
-
Authentication
|
|
1711
|
-
</NavItem>
|
|
1712
|
-
</NavList>
|
|
1713
|
-
</Nav>
|
|
1714
|
-
</PageSidebarBody>
|
|
1715
|
-
</PageSidebar>
|
|
1716
|
-
);
|
|
1717
|
-
|
|
1718
|
-
return (
|
|
1719
|
-
<Page header={<DashboardHeader />} sidebar={Sidebar} isManagedSidebar>
|
|
1720
|
-
<PageSection variant={PageSectionVariants.darker}>Section with darker background</PageSection>
|
|
1721
|
-
<PageSection variant={PageSectionVariants.dark}>Section with dark background</PageSection>
|
|
1722
|
-
<PageSection variant={PageSectionVariants.light}>Section with light background</PageSection>
|
|
1723
|
-
</Page>
|
|
1724
|
-
);
|
|
1725
|
-
}
|
|
1726
|
-
}
|
|
64
|
+
```js file='./examples/Nav/NavFlyout.tsx' isFullscreen
|
|
1727
65
|
```
|
|
1728
66
|
|
|
1729
67
|
### Drilldown nav
|
|
1730
68
|
|
|
1731
69
|
```js isBeta isFullscreen file="./examples/Nav/NavDrilldown.tsx"
|
|
1732
|
-
|
|
1733
70
|
```
|