@patternfly/react-core 4.228.0 → 4.230.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.
Files changed (102) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/esm/components/DescriptionList/DescriptionList.d.ts +4 -0
  3. package/dist/esm/components/DescriptionList/DescriptionList.d.ts.map +1 -1
  4. package/dist/esm/components/DescriptionList/DescriptionList.js +5 -2
  5. package/dist/esm/components/DescriptionList/DescriptionList.js.map +1 -1
  6. package/dist/esm/components/DescriptionList/DescriptionListGroup.js.map +1 -1
  7. package/dist/esm/components/Menu/MenuItem.d.ts.map +1 -1
  8. package/dist/esm/components/Menu/MenuItem.js +5 -3
  9. package/dist/esm/components/Menu/MenuItem.js.map +1 -1
  10. package/dist/esm/components/Nav/NavItem.d.ts.map +1 -1
  11. package/dist/esm/components/Nav/NavItem.js +5 -1
  12. package/dist/esm/components/Nav/NavItem.js.map +1 -1
  13. package/dist/esm/components/Page/Page.d.ts +13 -0
  14. package/dist/esm/components/Page/Page.d.ts.map +1 -1
  15. package/dist/esm/components/Page/Page.js +18 -19
  16. package/dist/esm/components/Page/Page.js.map +1 -1
  17. package/dist/esm/components/Page/PageBreadcrumb.d.ts +11 -2
  18. package/dist/esm/components/Page/PageBreadcrumb.d.ts.map +1 -1
  19. package/dist/esm/components/Page/PageBreadcrumb.js +5 -2
  20. package/dist/esm/components/Page/PageBreadcrumb.js.map +1 -1
  21. package/dist/esm/components/Page/PageGroup.d.ts +11 -2
  22. package/dist/esm/components/Page/PageGroup.d.ts.map +1 -1
  23. package/dist/esm/components/Page/PageGroup.js +5 -2
  24. package/dist/esm/components/Page/PageGroup.js.map +1 -1
  25. package/dist/esm/components/Page/PageNavigation.d.ts +11 -2
  26. package/dist/esm/components/Page/PageNavigation.d.ts.map +1 -1
  27. package/dist/esm/components/Page/PageNavigation.js +5 -2
  28. package/dist/esm/components/Page/PageNavigation.js.map +1 -1
  29. package/dist/esm/components/Page/PageSection.d.ts +10 -1
  30. package/dist/esm/components/Page/PageSection.d.ts.map +1 -1
  31. package/dist/esm/components/Page/PageSection.js +4 -2
  32. package/dist/esm/components/Page/PageSection.js.map +1 -1
  33. package/dist/esm/helpers/constants.d.ts +14 -0
  34. package/dist/esm/helpers/constants.d.ts.map +1 -1
  35. package/dist/esm/helpers/constants.js +24 -0
  36. package/dist/esm/helpers/constants.js.map +1 -1
  37. package/dist/esm/helpers/util.d.ts +8 -1
  38. package/dist/esm/helpers/util.d.ts.map +1 -1
  39. package/dist/esm/helpers/util.js +36 -9
  40. package/dist/esm/helpers/util.js.map +1 -1
  41. package/dist/js/components/DescriptionList/DescriptionList.d.ts +4 -0
  42. package/dist/js/components/DescriptionList/DescriptionList.d.ts.map +1 -1
  43. package/dist/js/components/DescriptionList/DescriptionList.js +5 -2
  44. package/dist/js/components/DescriptionList/DescriptionList.js.map +1 -1
  45. package/dist/js/components/DescriptionList/DescriptionListGroup.js.map +1 -1
  46. package/dist/js/components/Menu/MenuItem.d.ts.map +1 -1
  47. package/dist/js/components/Menu/MenuItem.js +5 -3
  48. package/dist/js/components/Menu/MenuItem.js.map +1 -1
  49. package/dist/js/components/Nav/NavItem.d.ts.map +1 -1
  50. package/dist/js/components/Nav/NavItem.js +5 -1
  51. package/dist/js/components/Nav/NavItem.js.map +1 -1
  52. package/dist/js/components/Page/Page.d.ts +13 -0
  53. package/dist/js/components/Page/Page.d.ts.map +1 -1
  54. package/dist/js/components/Page/Page.js +17 -18
  55. package/dist/js/components/Page/Page.js.map +1 -1
  56. package/dist/js/components/Page/PageBreadcrumb.d.ts +11 -2
  57. package/dist/js/components/Page/PageBreadcrumb.d.ts.map +1 -1
  58. package/dist/js/components/Page/PageBreadcrumb.js +5 -2
  59. package/dist/js/components/Page/PageBreadcrumb.js.map +1 -1
  60. package/dist/js/components/Page/PageGroup.d.ts +11 -2
  61. package/dist/js/components/Page/PageGroup.d.ts.map +1 -1
  62. package/dist/js/components/Page/PageGroup.js +5 -2
  63. package/dist/js/components/Page/PageGroup.js.map +1 -1
  64. package/dist/js/components/Page/PageNavigation.d.ts +11 -2
  65. package/dist/js/components/Page/PageNavigation.d.ts.map +1 -1
  66. package/dist/js/components/Page/PageNavigation.js +5 -2
  67. package/dist/js/components/Page/PageNavigation.js.map +1 -1
  68. package/dist/js/components/Page/PageSection.d.ts +10 -1
  69. package/dist/js/components/Page/PageSection.d.ts.map +1 -1
  70. package/dist/js/components/Page/PageSection.js +4 -2
  71. package/dist/js/components/Page/PageSection.js.map +1 -1
  72. package/dist/js/helpers/constants.d.ts +14 -0
  73. package/dist/js/helpers/constants.d.ts.map +1 -1
  74. package/dist/js/helpers/constants.js +26 -1
  75. package/dist/js/helpers/constants.js.map +1 -1
  76. package/dist/js/helpers/util.d.ts +8 -1
  77. package/dist/js/helpers/util.d.ts.map +1 -1
  78. package/dist/js/helpers/util.js +37 -9
  79. package/dist/js/helpers/util.js.map +1 -1
  80. package/dist/umd/react-core.js +170 -71
  81. package/dist/umd/react-core.min.js +6 -5
  82. package/package.json +5 -5
  83. package/src/components/DescriptionList/DescriptionList.tsx +14 -0
  84. package/src/components/DescriptionList/DescriptionListGroup.tsx +1 -0
  85. package/src/components/DescriptionList/examples/DescriptionList.md +31 -1
  86. package/src/components/DescriptionList/examples/DescriptionListDisplaySizeAndCard.tsx +63 -0
  87. package/src/components/DescriptionList/examples/DescriptionListDisplaySizeAndCardHorizontalTermWidth.tsx +34 -0
  88. package/src/components/DescriptionList/examples/DescriptionListDisplaySizeAndCardThreeColumn.tsx +34 -0
  89. package/src/components/DescriptionList/examples/DescriptionListWithCard.tsx +62 -0
  90. package/src/components/DescriptionList/examples/DescriptionListWithDisplaySize.tsx +63 -0
  91. package/src/components/Menu/MenuItem.tsx +7 -5
  92. package/src/components/Nav/NavItem.tsx +6 -0
  93. package/src/components/Page/Page.tsx +58 -21
  94. package/src/components/Page/PageBreadcrumb.tsx +37 -20
  95. package/src/components/Page/PageGroup.tsx +35 -19
  96. package/src/components/Page/PageNavigation.tsx +37 -20
  97. package/src/components/Page/PageSection.tsx +41 -25
  98. package/src/components/Page/__tests__/Page.test.tsx +126 -2
  99. package/src/components/Page/__tests__/__snapshots__/Page.test.tsx.snap +683 -14
  100. package/src/demos/Page/Page.md +356 -3
  101. package/src/helpers/constants.ts +28 -0
  102. package/src/helpers/util.ts +44 -9
@@ -357,7 +357,7 @@ class PageLayoutGrouped extends React.Component {
357
357
  </PageSection>
358
358
  }
359
359
  groupProps={{
360
- sticky: 'top'
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
- sticky: 'top'
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 sticky="top">
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
+ ```
@@ -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
+ };
@@ -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(([breakpoint, mod]) => `${stylePrefix}${mod}${breakpoint !== 'default' ? `-on-${breakpoint}` : ''}`)
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 >= 1450) {
371
+ if (width >= globalWidthBreakpoints['2xl']) {
337
372
  return '2xl';
338
373
  }
339
- if (width >= 1200) {
374
+ if (width >= globalWidthBreakpoints.xl) {
340
375
  return 'xl';
341
376
  }
342
- if (width >= 992) {
377
+ if (width >= globalWidthBreakpoints.lg) {
343
378
  return 'lg';
344
379
  }
345
- if (width >= 768) {
380
+ if (width >= globalWidthBreakpoints.md) {
346
381
  return 'md';
347
382
  }
348
- if (width >= 576) {
383
+ if (width >= globalWidthBreakpoints.sm) {
349
384
  return 'sm';
350
385
  }
351
386
  return 'default';