@patternfly/react-core 4.229.0 → 4.231.0
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 +30 -0
- package/dist/esm/components/ContextSelector/ContextSelector.d.ts +4 -2
- package/dist/esm/components/ContextSelector/ContextSelector.d.ts.map +1 -1
- package/dist/esm/components/ContextSelector/ContextSelector.js.map +1 -1
- package/dist/esm/components/ContextSelector/ContextSelectorToggle.d.ts +4 -2
- package/dist/esm/components/ContextSelector/ContextSelectorToggle.d.ts.map +1 -1
- package/dist/esm/components/ContextSelector/ContextSelectorToggle.js.map +1 -1
- package/dist/esm/components/MenuToggle/MenuToggle.d.ts +8 -0
- package/dist/esm/components/MenuToggle/MenuToggle.d.ts.map +1 -1
- package/dist/esm/components/MenuToggle/MenuToggle.js +12 -7
- package/dist/esm/components/MenuToggle/MenuToggle.js.map +1 -1
- package/dist/esm/components/MenuToggle/MenuToggleAction.d.ts +19 -0
- package/dist/esm/components/MenuToggle/MenuToggleAction.d.ts.map +1 -0
- package/dist/esm/components/MenuToggle/MenuToggleAction.js +17 -0
- package/dist/esm/components/MenuToggle/MenuToggleAction.js.map +1 -0
- package/dist/esm/components/MenuToggle/MenuToggleCheckbox.d.ts +36 -0
- package/dist/esm/components/MenuToggle/MenuToggleCheckbox.d.ts.map +1 -0
- package/dist/esm/components/MenuToggle/MenuToggleCheckbox.js +43 -0
- package/dist/esm/components/MenuToggle/MenuToggleCheckbox.js.map +1 -0
- package/dist/esm/components/MenuToggle/index.d.ts +2 -0
- package/dist/esm/components/MenuToggle/index.d.ts.map +1 -1
- package/dist/esm/components/MenuToggle/index.js +2 -0
- package/dist/esm/components/MenuToggle/index.js.map +1 -1
- package/dist/esm/components/Page/Page.d.ts +13 -0
- package/dist/esm/components/Page/Page.d.ts.map +1 -1
- package/dist/esm/components/Page/Page.js +18 -19
- package/dist/esm/components/Page/Page.js.map +1 -1
- package/dist/esm/components/Page/PageBreadcrumb.d.ts +11 -2
- package/dist/esm/components/Page/PageBreadcrumb.d.ts.map +1 -1
- package/dist/esm/components/Page/PageBreadcrumb.js +5 -2
- package/dist/esm/components/Page/PageBreadcrumb.js.map +1 -1
- package/dist/esm/components/Page/PageGroup.d.ts +11 -2
- package/dist/esm/components/Page/PageGroup.d.ts.map +1 -1
- package/dist/esm/components/Page/PageGroup.js +5 -2
- package/dist/esm/components/Page/PageGroup.js.map +1 -1
- package/dist/esm/components/Page/PageNavigation.d.ts +11 -2
- package/dist/esm/components/Page/PageNavigation.d.ts.map +1 -1
- package/dist/esm/components/Page/PageNavigation.js +5 -2
- package/dist/esm/components/Page/PageNavigation.js.map +1 -1
- package/dist/esm/components/Page/PageSection.d.ts +10 -1
- package/dist/esm/components/Page/PageSection.d.ts.map +1 -1
- package/dist/esm/components/Page/PageSection.js +4 -2
- package/dist/esm/components/Page/PageSection.js.map +1 -1
- package/dist/esm/helpers/constants.d.ts +14 -0
- package/dist/esm/helpers/constants.d.ts.map +1 -1
- package/dist/esm/helpers/constants.js +24 -0
- package/dist/esm/helpers/constants.js.map +1 -1
- package/dist/esm/helpers/util.d.ts +8 -1
- package/dist/esm/helpers/util.d.ts.map +1 -1
- package/dist/esm/helpers/util.js +36 -9
- package/dist/esm/helpers/util.js.map +1 -1
- package/dist/js/components/ContextSelector/ContextSelector.d.ts +4 -2
- package/dist/js/components/ContextSelector/ContextSelector.d.ts.map +1 -1
- package/dist/js/components/ContextSelector/ContextSelector.js.map +1 -1
- package/dist/js/components/ContextSelector/ContextSelectorToggle.d.ts +4 -2
- package/dist/js/components/ContextSelector/ContextSelectorToggle.d.ts.map +1 -1
- package/dist/js/components/ContextSelector/ContextSelectorToggle.js.map +1 -1
- package/dist/js/components/MenuToggle/MenuToggle.d.ts +8 -0
- package/dist/js/components/MenuToggle/MenuToggle.d.ts.map +1 -1
- package/dist/js/components/MenuToggle/MenuToggle.js +12 -7
- package/dist/js/components/MenuToggle/MenuToggle.js.map +1 -1
- package/dist/js/components/MenuToggle/MenuToggleAction.d.ts +19 -0
- package/dist/js/components/MenuToggle/MenuToggleAction.d.ts.map +1 -0
- package/dist/js/components/MenuToggle/MenuToggleAction.js +21 -0
- package/dist/js/components/MenuToggle/MenuToggleAction.js.map +1 -0
- package/dist/js/components/MenuToggle/MenuToggleCheckbox.d.ts +36 -0
- package/dist/js/components/MenuToggle/MenuToggleCheckbox.d.ts.map +1 -0
- package/dist/js/components/MenuToggle/MenuToggleCheckbox.js +47 -0
- package/dist/js/components/MenuToggle/MenuToggleCheckbox.js.map +1 -0
- package/dist/js/components/MenuToggle/index.d.ts +2 -0
- package/dist/js/components/MenuToggle/index.d.ts.map +1 -1
- package/dist/js/components/MenuToggle/index.js +2 -0
- package/dist/js/components/MenuToggle/index.js.map +1 -1
- package/dist/js/components/Page/Page.d.ts +13 -0
- package/dist/js/components/Page/Page.d.ts.map +1 -1
- package/dist/js/components/Page/Page.js +17 -18
- package/dist/js/components/Page/Page.js.map +1 -1
- package/dist/js/components/Page/PageBreadcrumb.d.ts +11 -2
- package/dist/js/components/Page/PageBreadcrumb.d.ts.map +1 -1
- package/dist/js/components/Page/PageBreadcrumb.js +5 -2
- package/dist/js/components/Page/PageBreadcrumb.js.map +1 -1
- package/dist/js/components/Page/PageGroup.d.ts +11 -2
- package/dist/js/components/Page/PageGroup.d.ts.map +1 -1
- package/dist/js/components/Page/PageGroup.js +5 -2
- package/dist/js/components/Page/PageGroup.js.map +1 -1
- package/dist/js/components/Page/PageNavigation.d.ts +11 -2
- package/dist/js/components/Page/PageNavigation.d.ts.map +1 -1
- package/dist/js/components/Page/PageNavigation.js +5 -2
- package/dist/js/components/Page/PageNavigation.js.map +1 -1
- package/dist/js/components/Page/PageSection.d.ts +10 -1
- package/dist/js/components/Page/PageSection.d.ts.map +1 -1
- package/dist/js/components/Page/PageSection.js +4 -2
- package/dist/js/components/Page/PageSection.js.map +1 -1
- package/dist/js/helpers/constants.d.ts +14 -0
- package/dist/js/helpers/constants.d.ts.map +1 -1
- package/dist/js/helpers/constants.js +26 -1
- package/dist/js/helpers/constants.js.map +1 -1
- package/dist/js/helpers/util.d.ts +8 -1
- package/dist/js/helpers/util.d.ts.map +1 -1
- package/dist/js/helpers/util.js +37 -9
- package/dist/js/helpers/util.js.map +1 -1
- package/dist/umd/react-core.css +60 -10
- package/dist/umd/react-core.js +220 -72
- package/dist/umd/react-core.min.css +124 -74
- package/dist/umd/react-core.min.js +6 -5
- package/package.json +6 -6
- package/src/components/ContextSelector/ContextSelector.tsx +4 -2
- package/src/components/ContextSelector/ContextSelectorToggle.tsx +4 -2
- package/src/components/MenuToggle/MenuToggle.tsx +53 -27
- package/src/components/MenuToggle/MenuToggleAction.tsx +42 -0
- package/src/components/MenuToggle/MenuToggleCheckbox.tsx +104 -0
- package/src/components/MenuToggle/__tests__/__snapshots__/MenuToggle.test.tsx.snap +1 -1
- package/src/components/MenuToggle/examples/MenuToggle.md +35 -2
- package/src/components/MenuToggle/examples/MenuToggleSplitButtonAction.tsx +51 -0
- package/src/components/MenuToggle/examples/MenuToggleSplitButtonActionPrimary.tsx +58 -0
- package/src/components/MenuToggle/examples/MenuToggleSplitButtonActionSecondary.tsx +58 -0
- package/src/components/MenuToggle/examples/MenuToggleSplitButtonCheckbox.tsx +40 -0
- package/src/components/MenuToggle/examples/MenuToggleSplitButtonCheckboxPrimary.tsx +55 -0
- package/src/components/MenuToggle/examples/MenuToggleSplitButtonCheckboxSecondary.tsx +55 -0
- package/src/components/MenuToggle/examples/MenuToggleSplitButtonCheckboxWithText.tsx +52 -0
- package/src/components/MenuToggle/index.ts +2 -0
- package/src/components/Page/Page.tsx +58 -21
- package/src/components/Page/PageBreadcrumb.tsx +37 -20
- package/src/components/Page/PageGroup.tsx +35 -19
- package/src/components/Page/PageNavigation.tsx +37 -20
- package/src/components/Page/PageSection.tsx +41 -25
- package/src/components/Page/__tests__/Page.test.tsx +126 -2
- package/src/components/Page/__tests__/__snapshots__/Page.test.tsx.snap +683 -14
- package/src/demos/Page/Page.md +356 -3
- package/src/helpers/constants.ts +28 -0
- package/src/helpers/util.ts +44 -9
package/src/demos/Page/Page.md
CHANGED
|
@@ -357,7 +357,7 @@ class PageLayoutGrouped extends React.Component {
|
|
|
357
357
|
</PageSection>
|
|
358
358
|
}
|
|
359
359
|
groupProps={{
|
|
360
|
-
|
|
360
|
+
stickyOnBreakpoint: { default: 'top' },
|
|
361
361
|
}}
|
|
362
362
|
>
|
|
363
363
|
<PageSection>
|
|
@@ -599,7 +599,9 @@ class PageLayoutGrouped extends React.Component {
|
|
|
599
599
|
</PageSection>
|
|
600
600
|
}
|
|
601
601
|
groupProps={{
|
|
602
|
-
|
|
602
|
+
stickyOnBreakpoint: {
|
|
603
|
+
default: 'top'
|
|
604
|
+
}
|
|
603
605
|
}}
|
|
604
606
|
>
|
|
605
607
|
<PageSection>
|
|
@@ -788,7 +790,7 @@ class PageLayoutGroupedAlt extends React.Component {
|
|
|
788
790
|
return (
|
|
789
791
|
<React.Fragment>
|
|
790
792
|
<Page header={Header} isManagedSidebar skipToContent={PageSkipToContent} mainContainerId={pageId}>
|
|
791
|
-
<PageGroup
|
|
793
|
+
<PageGroup stickyOnBreakpoint={{ default: 'top' }}>
|
|
792
794
|
<PageNavigation isWidthLimited>
|
|
793
795
|
<Nav variant="tertiary" onSelect={this.onNavSelect} aria-label="Nav">
|
|
794
796
|
<NavList>
|
|
@@ -847,3 +849,354 @@ class PageLayoutGroupedAlt extends React.Component {
|
|
|
847
849
|
}
|
|
848
850
|
}
|
|
849
851
|
```
|
|
852
|
+
|
|
853
|
+
### Sticky section breadcrumb (with breakpoints)
|
|
854
|
+
|
|
855
|
+
```js isFullscreen
|
|
856
|
+
import React from 'react';
|
|
857
|
+
import {
|
|
858
|
+
Avatar,
|
|
859
|
+
Brand,
|
|
860
|
+
Breadcrumb,
|
|
861
|
+
BreadcrumbItem,
|
|
862
|
+
Button,
|
|
863
|
+
ButtonVariant,
|
|
864
|
+
Card,
|
|
865
|
+
CardBody,
|
|
866
|
+
Checkbox,
|
|
867
|
+
Divider,
|
|
868
|
+
Dropdown,
|
|
869
|
+
DropdownGroup,
|
|
870
|
+
DropdownToggle,
|
|
871
|
+
DropdownItem,
|
|
872
|
+
DropdownSeparator,
|
|
873
|
+
Gallery,
|
|
874
|
+
GalleryItem,
|
|
875
|
+
KebabToggle,
|
|
876
|
+
Masthead,
|
|
877
|
+
MastheadBrand,
|
|
878
|
+
MastheadContent,
|
|
879
|
+
MastheadMain,
|
|
880
|
+
MastheadToggle,
|
|
881
|
+
Nav,
|
|
882
|
+
NavItem,
|
|
883
|
+
NavList,
|
|
884
|
+
Page,
|
|
885
|
+
PageSection,
|
|
886
|
+
PageSectionVariants,
|
|
887
|
+
PageSidebar,
|
|
888
|
+
PageToggleButton,
|
|
889
|
+
SkipToContent,
|
|
890
|
+
TextContent,
|
|
891
|
+
Text,
|
|
892
|
+
Toolbar,
|
|
893
|
+
ToolbarContent,
|
|
894
|
+
ToolbarGroup,
|
|
895
|
+
ToolbarItem,
|
|
896
|
+
Drawer,
|
|
897
|
+
DrawerPanelContent,
|
|
898
|
+
DrawerContent,
|
|
899
|
+
DrawerContentBody,
|
|
900
|
+
DrawerHead,
|
|
901
|
+
DrawerActions,
|
|
902
|
+
DrawerCloseButton,
|
|
903
|
+
} from '@patternfly/react-core';
|
|
904
|
+
import { css } from '@patternfly/react-styles';
|
|
905
|
+
import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
|
|
906
|
+
import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
|
|
907
|
+
import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
|
|
908
|
+
import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
|
|
909
|
+
import AttentionBellIcon from '@patternfly/react-icons/dist/esm/icons/attention-bell-icon';
|
|
910
|
+
import LightbulbIcon from '@patternfly/react-icons/dist/esm/icons/lightbulb-icon';
|
|
911
|
+
import BarsIcon from '@patternfly/react-icons/dist/js/icons/bars-icon';
|
|
912
|
+
import imgBrand from './imgBrand.svg';
|
|
913
|
+
import imgAvatar from './imgAvatar.svg';
|
|
914
|
+
|
|
915
|
+
class PageLayoutGrouped extends React.Component {
|
|
916
|
+
constructor(props) {
|
|
917
|
+
super(props);
|
|
918
|
+
this.state = {
|
|
919
|
+
isDropdownOpen: false,
|
|
920
|
+
isKebabDropdownOpen: false,
|
|
921
|
+
isFullKebabDropdownOpen: false,
|
|
922
|
+
activeItem: 0,
|
|
923
|
+
isDrawerExpanded: false
|
|
924
|
+
};
|
|
925
|
+
this.onDropdownToggle = isDropdownOpen => {
|
|
926
|
+
this.setState({
|
|
927
|
+
isDropdownOpen
|
|
928
|
+
});
|
|
929
|
+
};
|
|
930
|
+
|
|
931
|
+
this.onDropdownSelect = event => {
|
|
932
|
+
this.setState({
|
|
933
|
+
isDropdownOpen: !this.state.isDropdownOpen
|
|
934
|
+
});
|
|
935
|
+
};
|
|
936
|
+
|
|
937
|
+
this.onKebabDropdownToggle = isKebabDropdownOpen => {
|
|
938
|
+
this.setState({
|
|
939
|
+
isKebabDropdownOpen
|
|
940
|
+
});
|
|
941
|
+
};
|
|
942
|
+
|
|
943
|
+
this.onKebabDropdownSelect = event => {
|
|
944
|
+
this.setState({
|
|
945
|
+
isKebabDropdownOpen: !this.state.isKebabDropdownOpen
|
|
946
|
+
});
|
|
947
|
+
};
|
|
948
|
+
|
|
949
|
+
this.onNavSelect = result => {
|
|
950
|
+
this.setState({
|
|
951
|
+
activeItem: result.itemId
|
|
952
|
+
});
|
|
953
|
+
};
|
|
954
|
+
|
|
955
|
+
this.onFullKebabToggle = isFullKebabDropdownOpen => {
|
|
956
|
+
this.setState({
|
|
957
|
+
isFullKebabDropdownOpen
|
|
958
|
+
});
|
|
959
|
+
};
|
|
960
|
+
|
|
961
|
+
this.onFullKebabSelect = () => {
|
|
962
|
+
this.setState({
|
|
963
|
+
isFullKebabDropdownOpen: !this.state.isFullKebabDropdownOpen
|
|
964
|
+
});
|
|
965
|
+
};
|
|
966
|
+
|
|
967
|
+
this.onDrawerToggle = () => {
|
|
968
|
+
const isDrawerExpanded = !this.state.isDrawerExpanded;
|
|
969
|
+
this.setState({
|
|
970
|
+
isDrawerExpanded
|
|
971
|
+
});
|
|
972
|
+
};
|
|
973
|
+
|
|
974
|
+
this.onDrawerClose = () => {
|
|
975
|
+
this.setState({
|
|
976
|
+
isDrawerExpanded: false
|
|
977
|
+
});
|
|
978
|
+
};
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
render() {
|
|
982
|
+
const { isDropdownOpen, isKebabDropdownOpen, activeItem, isFullKebabDropdownOpen, isDrawerExpanded } = this.state;
|
|
983
|
+
|
|
984
|
+
const PageNav = (
|
|
985
|
+
<Nav onSelect={this.onNavSelect} aria-label="Nav">
|
|
986
|
+
<NavList>
|
|
987
|
+
<NavItem href="#" itemId={0} isActive={activeItem === 0}>
|
|
988
|
+
System panel
|
|
989
|
+
</NavItem>
|
|
990
|
+
<NavItem href="#" itemId={1} isActive={activeItem === 1}>
|
|
991
|
+
Policy
|
|
992
|
+
</NavItem>
|
|
993
|
+
<NavItem href="#" itemId={2} isActive={activeItem === 2}>
|
|
994
|
+
Authentication
|
|
995
|
+
</NavItem>
|
|
996
|
+
<NavItem href="#" itemId={3} isActive={activeItem === 3}>
|
|
997
|
+
Network services
|
|
998
|
+
</NavItem>
|
|
999
|
+
<NavItem href="#" itemId={4} isActive={activeItem === 4}>
|
|
1000
|
+
Server
|
|
1001
|
+
</NavItem>
|
|
1002
|
+
</NavList>
|
|
1003
|
+
</Nav>
|
|
1004
|
+
);
|
|
1005
|
+
|
|
1006
|
+
const kebabDropdownItems = [
|
|
1007
|
+
<DropdownItem>
|
|
1008
|
+
<CogIcon /> Settings
|
|
1009
|
+
</DropdownItem>,
|
|
1010
|
+
<DropdownItem>
|
|
1011
|
+
<HelpIcon /> Help
|
|
1012
|
+
</DropdownItem>
|
|
1013
|
+
];
|
|
1014
|
+
|
|
1015
|
+
const userDropdownItems = [
|
|
1016
|
+
<DropdownGroup key="group 2">
|
|
1017
|
+
<DropdownItem key="group 2 profile">My profile</DropdownItem>
|
|
1018
|
+
<DropdownItem key="group 2 user" component="button">
|
|
1019
|
+
User management
|
|
1020
|
+
</DropdownItem>
|
|
1021
|
+
<DropdownItem key="group 2 logout">Logout</DropdownItem>
|
|
1022
|
+
</DropdownGroup>
|
|
1023
|
+
];
|
|
1024
|
+
|
|
1025
|
+
const fullKebabItems = [
|
|
1026
|
+
<DropdownGroup key="group 2">
|
|
1027
|
+
<DropdownItem key="group 2 profile">My profile</DropdownItem>
|
|
1028
|
+
<DropdownItem key="group 2 user" component="button">
|
|
1029
|
+
User management
|
|
1030
|
+
</DropdownItem>
|
|
1031
|
+
<DropdownItem key="group 2 logout">Logout</DropdownItem>
|
|
1032
|
+
</DropdownGroup>,
|
|
1033
|
+
<Divider key="divider" />,
|
|
1034
|
+
<DropdownItem key="kebab-1">
|
|
1035
|
+
<CogIcon /> Settings
|
|
1036
|
+
</DropdownItem>,
|
|
1037
|
+
<DropdownItem key="kebab-2">
|
|
1038
|
+
<HelpIcon /> Help
|
|
1039
|
+
</DropdownItem>
|
|
1040
|
+
];
|
|
1041
|
+
|
|
1042
|
+
const headerToolbar = (
|
|
1043
|
+
<Toolbar id="toolbar" isFullHeight isStatic>
|
|
1044
|
+
<ToolbarContent>
|
|
1045
|
+
<ToolbarGroup
|
|
1046
|
+
variant="icon-button-group"
|
|
1047
|
+
alignment={{ default: 'alignRight' }}
|
|
1048
|
+
spacer={{ default: 'spacerNone', md: 'spacerMd' }}
|
|
1049
|
+
>
|
|
1050
|
+
<ToolbarItem>
|
|
1051
|
+
<Button aria-label="Toggle drawer" variant={ButtonVariant.plain} onClick={this.onDrawerToggle}>
|
|
1052
|
+
<LightbulbIcon color={isDrawerExpanded ? 'yellow' : 'currentColor'} />
|
|
1053
|
+
</Button>
|
|
1054
|
+
</ToolbarItem>
|
|
1055
|
+
<ToolbarItem>
|
|
1056
|
+
<Button aria-label="Notifications" variant={ButtonVariant.plain}>
|
|
1057
|
+
<AttentionBellIcon />
|
|
1058
|
+
</Button>
|
|
1059
|
+
</ToolbarItem>
|
|
1060
|
+
<ToolbarGroup variant="icon-button-group" visibility={{ default: 'hidden', lg: 'visible' }}>
|
|
1061
|
+
<ToolbarItem>
|
|
1062
|
+
<Button aria-label="Settings actions" variant={ButtonVariant.plain}>
|
|
1063
|
+
<CogIcon />
|
|
1064
|
+
</Button>
|
|
1065
|
+
</ToolbarItem>
|
|
1066
|
+
<ToolbarItem>
|
|
1067
|
+
<Button aria-label="Help actions" variant={ButtonVariant.plain}>
|
|
1068
|
+
<QuestionCircleIcon />
|
|
1069
|
+
</Button>
|
|
1070
|
+
</ToolbarItem>
|
|
1071
|
+
</ToolbarGroup>
|
|
1072
|
+
<ToolbarItem visibility={{ default: 'hidden', md: 'visible', lg: 'hidden' }}>
|
|
1073
|
+
<Dropdown
|
|
1074
|
+
isPlain
|
|
1075
|
+
position="right"
|
|
1076
|
+
onSelect={this.onKebabDropdownSelect}
|
|
1077
|
+
toggle={<KebabToggle onToggle={this.onKebabDropdownToggle} />}
|
|
1078
|
+
isOpen={isKebabDropdownOpen}
|
|
1079
|
+
dropdownItems={kebabDropdownItems}
|
|
1080
|
+
/>
|
|
1081
|
+
</ToolbarItem>
|
|
1082
|
+
<ToolbarItem visibility={{ default: 'visible', md: 'hidden', lg: 'hidden', xl: 'hidden', '2xl': 'hidden' }}>
|
|
1083
|
+
<Dropdown
|
|
1084
|
+
isPlain
|
|
1085
|
+
position="right"
|
|
1086
|
+
onSelect={this.onFullKebabSelect}
|
|
1087
|
+
toggle={<KebabToggle onToggle={this.onFullKebabToggle} />}
|
|
1088
|
+
isOpen={isFullKebabDropdownOpen}
|
|
1089
|
+
dropdownItems={fullKebabItems}
|
|
1090
|
+
/>
|
|
1091
|
+
</ToolbarItem>
|
|
1092
|
+
</ToolbarGroup>
|
|
1093
|
+
<ToolbarItem visibility={{ default: 'hidden', md: 'visible' }}>
|
|
1094
|
+
<Dropdown
|
|
1095
|
+
position="right"
|
|
1096
|
+
onSelect={this.onDropdownSelect}
|
|
1097
|
+
isOpen={isDropdownOpen}
|
|
1098
|
+
toggle={
|
|
1099
|
+
<DropdownToggle icon={<Avatar src={imgAvatar} alt="Avatar" />} onToggle={this.onDropdownToggle}>
|
|
1100
|
+
John Smith
|
|
1101
|
+
</DropdownToggle>
|
|
1102
|
+
}
|
|
1103
|
+
dropdownItems={userDropdownItems}
|
|
1104
|
+
/>
|
|
1105
|
+
</ToolbarItem>
|
|
1106
|
+
</ToolbarContent>
|
|
1107
|
+
</Toolbar>
|
|
1108
|
+
);
|
|
1109
|
+
|
|
1110
|
+
const Header = (
|
|
1111
|
+
<Masthead>
|
|
1112
|
+
<MastheadToggle>
|
|
1113
|
+
<PageToggleButton variant="plain" aria-label="Global navigation">
|
|
1114
|
+
<BarsIcon />
|
|
1115
|
+
</PageToggleButton>
|
|
1116
|
+
</MastheadToggle>
|
|
1117
|
+
<MastheadMain>
|
|
1118
|
+
<MastheadBrand>
|
|
1119
|
+
<Brand src={imgBrand} alt="Patternfly Logo" />
|
|
1120
|
+
</MastheadBrand>
|
|
1121
|
+
</MastheadMain>
|
|
1122
|
+
<MastheadContent>{headerToolbar}</MastheadContent>
|
|
1123
|
+
</Masthead>
|
|
1124
|
+
);
|
|
1125
|
+
|
|
1126
|
+
const pageId = 'main-content-page-layout-tertiary-nav';
|
|
1127
|
+
const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
|
|
1128
|
+
|
|
1129
|
+
const PageBreadcrumb = (
|
|
1130
|
+
<Breadcrumb>
|
|
1131
|
+
<BreadcrumbItem>Section home</BreadcrumbItem>
|
|
1132
|
+
<BreadcrumbItem to="#">Section title</BreadcrumbItem>
|
|
1133
|
+
<BreadcrumbItem to="#">Section title</BreadcrumbItem>
|
|
1134
|
+
<BreadcrumbItem to="#" isActive>
|
|
1135
|
+
Section landing
|
|
1136
|
+
</BreadcrumbItem>
|
|
1137
|
+
</Breadcrumb>
|
|
1138
|
+
);
|
|
1139
|
+
|
|
1140
|
+
const panelContent = (
|
|
1141
|
+
<DrawerPanelContent isResizable>
|
|
1142
|
+
<DrawerHead>
|
|
1143
|
+
<span tabIndex={isDrawerExpanded ? 0 : -1}>
|
|
1144
|
+
drawer-panel
|
|
1145
|
+
</span>
|
|
1146
|
+
<DrawerActions>
|
|
1147
|
+
<DrawerCloseButton onClick={this.onDrawerClose} />
|
|
1148
|
+
</DrawerActions>
|
|
1149
|
+
</DrawerHead>
|
|
1150
|
+
</DrawerPanelContent>
|
|
1151
|
+
);
|
|
1152
|
+
|
|
1153
|
+
const Sidebar = <PageSidebar nav={PageNav} />;
|
|
1154
|
+
|
|
1155
|
+
return (
|
|
1156
|
+
<Drawer isExpanded={isDrawerExpanded} isInline onExpand={this.onExpand}>
|
|
1157
|
+
<DrawerContent panelContent={panelContent}>
|
|
1158
|
+
<DrawerContentBody>
|
|
1159
|
+
<Page
|
|
1160
|
+
header={Header}
|
|
1161
|
+
breadcrumb={PageBreadcrumb}
|
|
1162
|
+
sidebar={Sidebar}
|
|
1163
|
+
isManagedSidebar
|
|
1164
|
+
isTertiaryNavWidthLimited
|
|
1165
|
+
isBreadcrumbWidthLimited
|
|
1166
|
+
skipToContent={PageSkipToContent}
|
|
1167
|
+
mainContainerId={pageId}
|
|
1168
|
+
isTertiaryNavGrouped
|
|
1169
|
+
breadcrumbProps={{
|
|
1170
|
+
stickyOnBreakpoint: {
|
|
1171
|
+
md: 'top'
|
|
1172
|
+
}
|
|
1173
|
+
}}
|
|
1174
|
+
>
|
|
1175
|
+
<PageSection variant={PageSectionVariants.light}>
|
|
1176
|
+
<TextContent>
|
|
1177
|
+
<Text component="h1">Main title</Text>
|
|
1178
|
+
<Text component="p">
|
|
1179
|
+
Body text should be Overpass Regular at 16px. It should have leading of 24px because <br />
|
|
1180
|
+
of its relative line height of 1.5.
|
|
1181
|
+
</Text>
|
|
1182
|
+
</TextContent>
|
|
1183
|
+
</PageSection>
|
|
1184
|
+
<PageSection isWidthLimited>
|
|
1185
|
+
<Gallery hasGutter>
|
|
1186
|
+
{Array.apply(0, Array(50)).map((x, i) => (
|
|
1187
|
+
<GalleryItem key={i}>
|
|
1188
|
+
<Card>
|
|
1189
|
+
<CardBody>This is a card</CardBody>
|
|
1190
|
+
</Card>
|
|
1191
|
+
</GalleryItem>
|
|
1192
|
+
))}
|
|
1193
|
+
</Gallery>
|
|
1194
|
+
</PageSection>
|
|
1195
|
+
</Page>
|
|
1196
|
+
</DrawerContentBody>
|
|
1197
|
+
</DrawerContent>
|
|
1198
|
+
</Drawer>
|
|
1199
|
+
);
|
|
1200
|
+
}
|
|
1201
|
+
}
|
|
1202
|
+
```
|
package/src/helpers/constants.ts
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
import globalBreakpointSm from '@patternfly/react-tokens/dist/esm/global_breakpoint_sm';
|
|
2
|
+
import globalBreakpointMd from '@patternfly/react-tokens/dist/esm/global_breakpoint_md';
|
|
3
|
+
import globalBreakpointLg from '@patternfly/react-tokens/dist/esm/global_breakpoint_lg';
|
|
4
|
+
import globalBreakpointXl from '@patternfly/react-tokens/dist/esm/global_breakpoint_xl';
|
|
5
|
+
import globalBreakpoint2xl from '@patternfly/react-tokens/dist/esm/global_breakpoint_2xl';
|
|
6
|
+
|
|
7
|
+
import globalHeightBreakpointSm from '@patternfly/react-tokens/dist/esm/global_height_breakpoint_sm';
|
|
8
|
+
import globalHeightBreakpointMd from '@patternfly/react-tokens/dist/esm/global_height_breakpoint_md';
|
|
9
|
+
import globalHeightBreakpointLg from '@patternfly/react-tokens/dist/esm/global_height_breakpoint_lg';
|
|
10
|
+
import globalHeightBreakpointXl from '@patternfly/react-tokens/dist/esm/global_height_breakpoint_xl';
|
|
11
|
+
import globalHeightBreakpoint2xl from '@patternfly/react-tokens/dist/esm/global_height_breakpoint_2xl';
|
|
12
|
+
|
|
1
13
|
export const KEY_CODES = { ARROW_UP: 38, ARROW_DOWN: 40, ESCAPE_KEY: 27, TAB: 9, ENTER: 13, SPACE: 32 };
|
|
2
14
|
|
|
3
15
|
export const SIDE = { RIGHT: 'right', LEFT: 'left', BOTH: 'both', NONE: 'none' };
|
|
@@ -21,3 +33,19 @@ export const KeyTypes = {
|
|
|
21
33
|
ArrowLeft: 'ArrowLeft',
|
|
22
34
|
ArrowRight: 'ArrowRight'
|
|
23
35
|
};
|
|
36
|
+
|
|
37
|
+
export const globalWidthBreakpoints = {
|
|
38
|
+
sm: parseInt(globalBreakpointSm.value),
|
|
39
|
+
md: parseInt(globalBreakpointMd.value),
|
|
40
|
+
lg: parseInt(globalBreakpointLg.value),
|
|
41
|
+
xl: parseInt(globalBreakpointXl.value),
|
|
42
|
+
'2xl': parseInt(globalBreakpoint2xl.value)
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export const globalHeightBreakpoints = {
|
|
46
|
+
sm: parseInt(globalHeightBreakpointSm.value),
|
|
47
|
+
md: parseInt(globalHeightBreakpointMd.value),
|
|
48
|
+
lg: parseInt(globalHeightBreakpointLg.value),
|
|
49
|
+
xl: parseInt(globalHeightBreakpointXl.value),
|
|
50
|
+
'2xl': parseInt(globalHeightBreakpoint2xl.value)
|
|
51
|
+
};
|
package/src/helpers/util.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as ReactDOM from 'react-dom';
|
|
2
|
-
import { SIDE } from './constants';
|
|
2
|
+
import { globalWidthBreakpoints, globalHeightBreakpoints, SIDE } from './constants';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* @param {string} input - String to capitalize first letter
|
|
@@ -295,12 +295,13 @@ export const formatBreakpointMods = (
|
|
|
295
295
|
mods: Mods,
|
|
296
296
|
styles: any,
|
|
297
297
|
stylePrefix: string = '',
|
|
298
|
-
breakpoint?: 'default' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'
|
|
298
|
+
breakpoint?: 'default' | 'sm' | 'md' | 'lg' | 'xl' | '2xl',
|
|
299
|
+
vertical?: boolean
|
|
299
300
|
) => {
|
|
300
301
|
if (!mods) {
|
|
301
302
|
return '';
|
|
302
303
|
}
|
|
303
|
-
if (breakpoint) {
|
|
304
|
+
if (breakpoint && !vertical) {
|
|
304
305
|
if (breakpoint in mods) {
|
|
305
306
|
return styles.modifiers[toCamel(`${stylePrefix}${mods[breakpoint as keyof Mods]}`)];
|
|
306
307
|
}
|
|
@@ -314,8 +315,14 @@ export const formatBreakpointMods = (
|
|
|
314
315
|
}
|
|
315
316
|
return '';
|
|
316
317
|
}
|
|
318
|
+
|
|
317
319
|
return Object.entries(mods || {})
|
|
318
|
-
.map(
|
|
320
|
+
.map(
|
|
321
|
+
([breakpoint, mod]) =>
|
|
322
|
+
`${stylePrefix}${mod}${breakpoint !== 'default' ? `-on-${breakpoint}` : ''}${
|
|
323
|
+
vertical && breakpoint !== 'default' ? '-height' : ''
|
|
324
|
+
}`
|
|
325
|
+
)
|
|
319
326
|
.map(toCamel)
|
|
320
327
|
.map(mod => mod.replace(/-?(\dxl)/gi, (_res, group) => `_${group}`))
|
|
321
328
|
.map(modifierKey => styles.modifiers[modifierKey])
|
|
@@ -323,6 +330,34 @@ export const formatBreakpointMods = (
|
|
|
323
330
|
.join(' ');
|
|
324
331
|
};
|
|
325
332
|
|
|
333
|
+
/**
|
|
334
|
+
* Return the breakpoint for the given height
|
|
335
|
+
*
|
|
336
|
+
* @param {number | null} height The height to check
|
|
337
|
+
* @returns {'default' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'} The breakpoint
|
|
338
|
+
*/
|
|
339
|
+
export const getVerticalBreakpoint = (height: number): 'default' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' => {
|
|
340
|
+
if (height === null) {
|
|
341
|
+
return null;
|
|
342
|
+
}
|
|
343
|
+
if (height >= globalHeightBreakpoints['2xl']) {
|
|
344
|
+
return '2xl';
|
|
345
|
+
}
|
|
346
|
+
if (height >= globalHeightBreakpoints.xl) {
|
|
347
|
+
return 'xl';
|
|
348
|
+
}
|
|
349
|
+
if (height >= globalHeightBreakpoints.lg) {
|
|
350
|
+
return 'lg';
|
|
351
|
+
}
|
|
352
|
+
if (height >= globalHeightBreakpoints.md) {
|
|
353
|
+
return 'md';
|
|
354
|
+
}
|
|
355
|
+
if (height >= globalHeightBreakpoints.sm) {
|
|
356
|
+
return 'sm';
|
|
357
|
+
}
|
|
358
|
+
return 'default';
|
|
359
|
+
};
|
|
360
|
+
|
|
326
361
|
/**
|
|
327
362
|
* Return the breakpoint for the given width
|
|
328
363
|
*
|
|
@@ -333,19 +368,19 @@ export const getBreakpoint = (width: number): 'default' | 'sm' | 'md' | 'lg' | '
|
|
|
333
368
|
if (width === null) {
|
|
334
369
|
return null;
|
|
335
370
|
}
|
|
336
|
-
if (width >=
|
|
371
|
+
if (width >= globalWidthBreakpoints['2xl']) {
|
|
337
372
|
return '2xl';
|
|
338
373
|
}
|
|
339
|
-
if (width >=
|
|
374
|
+
if (width >= globalWidthBreakpoints.xl) {
|
|
340
375
|
return 'xl';
|
|
341
376
|
}
|
|
342
|
-
if (width >=
|
|
377
|
+
if (width >= globalWidthBreakpoints.lg) {
|
|
343
378
|
return 'lg';
|
|
344
379
|
}
|
|
345
|
-
if (width >=
|
|
380
|
+
if (width >= globalWidthBreakpoints.md) {
|
|
346
381
|
return 'md';
|
|
347
382
|
}
|
|
348
|
-
if (width >=
|
|
383
|
+
if (width >= globalWidthBreakpoints.sm) {
|
|
349
384
|
return 'sm';
|
|
350
385
|
}
|
|
351
386
|
return 'default';
|