@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
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { MenuToggleCheckbox, MenuToggle } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const MenuToggleSplitButtonCheckboxSecondary: React.FunctionComponent = () => (
|
|
5
|
+
<React.Fragment>
|
|
6
|
+
<MenuToggle
|
|
7
|
+
isDisabled
|
|
8
|
+
variant="secondary"
|
|
9
|
+
splitButtonOptions={{
|
|
10
|
+
items: [
|
|
11
|
+
<MenuToggleCheckbox
|
|
12
|
+
id="split-button-checkbox-secondary-disabled-example"
|
|
13
|
+
key="split-checkbox-secondary-disabled"
|
|
14
|
+
aria-label="Select all"
|
|
15
|
+
isDisabled
|
|
16
|
+
>
|
|
17
|
+
10 selected
|
|
18
|
+
</MenuToggleCheckbox>
|
|
19
|
+
]
|
|
20
|
+
}}
|
|
21
|
+
aria-label="Secondary menu toggle with checkbox split button"
|
|
22
|
+
/>{' '}
|
|
23
|
+
<MenuToggle
|
|
24
|
+
variant="secondary"
|
|
25
|
+
splitButtonOptions={{
|
|
26
|
+
items: [
|
|
27
|
+
<MenuToggleCheckbox
|
|
28
|
+
id="split-button-checkbox-secondary-example"
|
|
29
|
+
key="split-checkbox-secondary"
|
|
30
|
+
aria-label="Select all"
|
|
31
|
+
>
|
|
32
|
+
10 selected
|
|
33
|
+
</MenuToggleCheckbox>
|
|
34
|
+
]
|
|
35
|
+
}}
|
|
36
|
+
aria-label="Secondary menu toggle with checkbox split button"
|
|
37
|
+
/>{' '}
|
|
38
|
+
<MenuToggle
|
|
39
|
+
isExpanded
|
|
40
|
+
variant="secondary"
|
|
41
|
+
splitButtonOptions={{
|
|
42
|
+
items: [
|
|
43
|
+
<MenuToggleCheckbox
|
|
44
|
+
id="split-button-checkbox-secondary-expanded-example"
|
|
45
|
+
key="split-checkbox-secondary-expanded"
|
|
46
|
+
aria-label="Select all"
|
|
47
|
+
>
|
|
48
|
+
10 selected
|
|
49
|
+
</MenuToggleCheckbox>
|
|
50
|
+
]
|
|
51
|
+
}}
|
|
52
|
+
aria-label="Secondary menu toggle with checkbox split button"
|
|
53
|
+
/>
|
|
54
|
+
</React.Fragment>
|
|
55
|
+
);
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { MenuToggleCheckbox, MenuToggle } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const MenuToggleSplitButtonCheckboxWithText: React.FunctionComponent = () => (
|
|
5
|
+
<React.Fragment>
|
|
6
|
+
<MenuToggle
|
|
7
|
+
isDisabled
|
|
8
|
+
splitButtonOptions={{
|
|
9
|
+
items: [
|
|
10
|
+
<MenuToggleCheckbox
|
|
11
|
+
id="split-button-checkbox-with-text-disabled-example"
|
|
12
|
+
key="split-checkbox-with-text-disabled"
|
|
13
|
+
aria-label="Select all"
|
|
14
|
+
isDisabled
|
|
15
|
+
>
|
|
16
|
+
10 selected
|
|
17
|
+
</MenuToggleCheckbox>
|
|
18
|
+
]
|
|
19
|
+
}}
|
|
20
|
+
aria-label="Menu toggle with checkbox split button and text"
|
|
21
|
+
/>{' '}
|
|
22
|
+
<MenuToggle
|
|
23
|
+
splitButtonOptions={{
|
|
24
|
+
items: [
|
|
25
|
+
<MenuToggleCheckbox
|
|
26
|
+
id="split-button-checkbox-with-text-example"
|
|
27
|
+
key="split-checkbox-with-text"
|
|
28
|
+
aria-label="Select all"
|
|
29
|
+
>
|
|
30
|
+
10 selected
|
|
31
|
+
</MenuToggleCheckbox>
|
|
32
|
+
]
|
|
33
|
+
}}
|
|
34
|
+
aria-label="Menu toggle with checkbox split button and text"
|
|
35
|
+
/>{' '}
|
|
36
|
+
<MenuToggle
|
|
37
|
+
isExpanded
|
|
38
|
+
splitButtonOptions={{
|
|
39
|
+
items: [
|
|
40
|
+
<MenuToggleCheckbox
|
|
41
|
+
id="split-button-checkbox-with-text-expanded-example"
|
|
42
|
+
key="split-checkbox-with-text-expanded"
|
|
43
|
+
aria-label="Select all"
|
|
44
|
+
>
|
|
45
|
+
10 selected
|
|
46
|
+
</MenuToggleCheckbox>
|
|
47
|
+
]
|
|
48
|
+
}}
|
|
49
|
+
aria-label="Menu toggle with checkbox split button and text"
|
|
50
|
+
/>
|
|
51
|
+
</React.Fragment>
|
|
52
|
+
);
|
|
@@ -4,9 +4,10 @@ import { css } from '@patternfly/react-styles';
|
|
|
4
4
|
import globalBreakpointXl from '@patternfly/react-tokens/dist/esm/global_breakpoint_xl';
|
|
5
5
|
import { debounce, canUseDOM } from '../../helpers/util';
|
|
6
6
|
import { Drawer, DrawerContent, DrawerContentBody, DrawerPanelContent } from '../Drawer';
|
|
7
|
-
import {
|
|
7
|
+
import { PageBreadcrumbProps } from './PageBreadcrumb';
|
|
8
|
+
import { PageGroupProps } from './PageGroup';
|
|
8
9
|
import { getResizeObserver } from '../../helpers/resizeObserver';
|
|
9
|
-
import { getBreakpoint } from '../../helpers/util';
|
|
10
|
+
import { formatBreakpointMods, getBreakpoint, getVerticalBreakpoint } from '../../helpers/util';
|
|
10
11
|
|
|
11
12
|
export enum PageLayouts {
|
|
12
13
|
vertical = 'vertical',
|
|
@@ -18,14 +19,19 @@ export interface PageContextProps {
|
|
|
18
19
|
onNavToggle: () => void;
|
|
19
20
|
isNavOpen: boolean;
|
|
20
21
|
width: number;
|
|
22
|
+
height: number;
|
|
21
23
|
getBreakpoint: (width: number | null) => 'default' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
24
|
+
getVerticalBreakpoint: (height: number | null) => 'default' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
22
25
|
}
|
|
26
|
+
|
|
23
27
|
export const pageContextDefaults: PageContextProps = {
|
|
24
28
|
isManagedSidebar: false,
|
|
25
29
|
isNavOpen: false,
|
|
26
30
|
onNavToggle: () => null,
|
|
27
31
|
width: null,
|
|
28
|
-
|
|
32
|
+
height: null,
|
|
33
|
+
getBreakpoint,
|
|
34
|
+
getVerticalBreakpoint
|
|
29
35
|
};
|
|
30
36
|
export const PageContext = React.createContext<PageContextProps>(pageContextDefaults);
|
|
31
37
|
|
|
@@ -80,6 +86,13 @@ export interface PageProps extends React.HTMLProps<HTMLDivElement> {
|
|
|
80
86
|
* https://github.com/patternfly/patternfly-react/blob/main/packages/react-core/src/helpers/util.ts
|
|
81
87
|
*/
|
|
82
88
|
getBreakpoint?: (width: number | null) => 'default' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
89
|
+
/**
|
|
90
|
+
* The page resize observer uses the breakpoints returned from this function when adding the pf-m-breakpoint-[default|sm|md|lg|xl|2xl] class
|
|
91
|
+
* You can override the default getVerticalBreakpoint function to return breakpoints at different sizes than the default
|
|
92
|
+
* You can view the default getVerticalBreakpoint function here:
|
|
93
|
+
* https://github.com/patternfly/patternfly-react/blob/main/packages/react-core/src/helpers/util.ts
|
|
94
|
+
*/
|
|
95
|
+
getVerticalBreakpoint?: (height: number | null) => 'default' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
83
96
|
/** Breadcrumb component for the page */
|
|
84
97
|
breadcrumb?: React.ReactNode;
|
|
85
98
|
/** Tertiary nav component for the page */
|
|
@@ -94,6 +107,8 @@ export interface PageProps extends React.HTMLProps<HTMLDivElement> {
|
|
|
94
107
|
additionalGroupedContent?: React.ReactNode;
|
|
95
108
|
/** Additional props of the group */
|
|
96
109
|
groupProps?: PageGroupProps;
|
|
110
|
+
/** Additional props of the breadcrumb */
|
|
111
|
+
breadcrumbProps?: PageBreadcrumbProps;
|
|
97
112
|
}
|
|
98
113
|
|
|
99
114
|
export interface PageState {
|
|
@@ -101,6 +116,7 @@ export interface PageState {
|
|
|
101
116
|
mobileIsNavOpen: boolean;
|
|
102
117
|
mobileView: boolean;
|
|
103
118
|
width: number;
|
|
119
|
+
height: number;
|
|
104
120
|
}
|
|
105
121
|
|
|
106
122
|
export class Page extends React.Component<PageProps, PageState> {
|
|
@@ -113,7 +129,8 @@ export class Page extends React.Component<PageProps, PageState> {
|
|
|
113
129
|
mainTabIndex: -1,
|
|
114
130
|
isNotificationDrawerExpanded: false,
|
|
115
131
|
onNotificationDrawerExpand: () => null,
|
|
116
|
-
getBreakpoint
|
|
132
|
+
getBreakpoint,
|
|
133
|
+
getVerticalBreakpoint
|
|
117
134
|
};
|
|
118
135
|
mainRef = React.createRef<HTMLDivElement>();
|
|
119
136
|
pageRef = React.createRef<HTMLDivElement>();
|
|
@@ -128,7 +145,8 @@ export class Page extends React.Component<PageProps, PageState> {
|
|
|
128
145
|
desktopIsNavOpen: managedSidebarOpen,
|
|
129
146
|
mobileIsNavOpen: false,
|
|
130
147
|
mobileView: false,
|
|
131
|
-
width: null
|
|
148
|
+
width: null,
|
|
149
|
+
height: null
|
|
132
150
|
};
|
|
133
151
|
}
|
|
134
152
|
|
|
@@ -179,7 +197,8 @@ export class Page extends React.Component<PageProps, PageState> {
|
|
|
179
197
|
if (mobileView !== this.state.mobileView) {
|
|
180
198
|
this.setState({ mobileView });
|
|
181
199
|
}
|
|
182
|
-
this.pageRef.current &&
|
|
200
|
+
this.pageRef.current &&
|
|
201
|
+
this.setState({ width: this.pageRef.current.clientWidth, height: this.pageRef.current.clientHeight });
|
|
183
202
|
};
|
|
184
203
|
|
|
185
204
|
handleResize = debounce(this.resize, 250);
|
|
@@ -223,6 +242,7 @@ export class Page extends React.Component<PageProps, PageState> {
|
|
|
223
242
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
224
243
|
onPageResize,
|
|
225
244
|
getBreakpoint,
|
|
245
|
+
getVerticalBreakpoint,
|
|
226
246
|
mainAriaLabel,
|
|
227
247
|
mainTabIndex,
|
|
228
248
|
tertiaryNav,
|
|
@@ -230,16 +250,19 @@ export class Page extends React.Component<PageProps, PageState> {
|
|
|
230
250
|
isBreadcrumbGrouped,
|
|
231
251
|
additionalGroupedContent,
|
|
232
252
|
groupProps,
|
|
253
|
+
breadcrumbProps,
|
|
233
254
|
...rest
|
|
234
255
|
} = this.props;
|
|
235
|
-
const { mobileView, mobileIsNavOpen, desktopIsNavOpen, width } = this.state;
|
|
256
|
+
const { mobileView, mobileIsNavOpen, desktopIsNavOpen, width, height } = this.state;
|
|
236
257
|
|
|
237
258
|
const context = {
|
|
238
259
|
isManagedSidebar,
|
|
239
260
|
onNavToggle: mobileView ? this.onNavToggleMobile : this.onNavToggleDesktop,
|
|
240
261
|
isNavOpen: mobileView ? mobileIsNavOpen : desktopIsNavOpen,
|
|
241
262
|
width,
|
|
242
|
-
|
|
263
|
+
height,
|
|
264
|
+
getBreakpoint,
|
|
265
|
+
getVerticalBreakpoint
|
|
243
266
|
};
|
|
244
267
|
|
|
245
268
|
let nav = null;
|
|
@@ -253,25 +276,38 @@ export class Page extends React.Component<PageProps, PageState> {
|
|
|
253
276
|
nav = <div className={css(styles.pageMainNav)}>{tertiaryNav}</div>;
|
|
254
277
|
}
|
|
255
278
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
279
|
+
const crumb = breadcrumb ? (
|
|
280
|
+
<section
|
|
281
|
+
className={css(
|
|
282
|
+
styles.pageMainBreadcrumb,
|
|
283
|
+
isBreadcrumbWidthLimited && styles.modifiers.limitWidth,
|
|
284
|
+
formatBreakpointMods(
|
|
285
|
+
breadcrumbProps?.stickyOnBreakpoint,
|
|
286
|
+
styles,
|
|
287
|
+
'sticky-',
|
|
288
|
+
getVerticalBreakpoint(height),
|
|
289
|
+
true
|
|
290
|
+
)
|
|
291
|
+
)}
|
|
292
|
+
>
|
|
293
|
+
{isBreadcrumbWidthLimited ? <div className={css(styles.pageMainBody)}>{breadcrumb}</div> : breadcrumb}
|
|
294
|
+
</section>
|
|
295
|
+
) : null;
|
|
266
296
|
|
|
267
297
|
const isGrouped = isTertiaryNavGrouped || isBreadcrumbGrouped || additionalGroupedContent;
|
|
268
298
|
|
|
269
299
|
const group = isGrouped ? (
|
|
270
|
-
<
|
|
300
|
+
<div
|
|
301
|
+
className={css(
|
|
302
|
+
styles.pageMainGroup,
|
|
303
|
+
formatBreakpointMods(groupProps?.stickyOnBreakpoint, styles, 'sticky-', getVerticalBreakpoint(height), true)
|
|
304
|
+
)}
|
|
305
|
+
{...groupProps}
|
|
306
|
+
>
|
|
271
307
|
{isTertiaryNavGrouped && nav}
|
|
272
308
|
{isBreadcrumbGrouped && crumb}
|
|
273
309
|
{additionalGroupedContent}
|
|
274
|
-
</
|
|
310
|
+
</div>
|
|
275
311
|
) : null;
|
|
276
312
|
|
|
277
313
|
const main = (
|
|
@@ -299,8 +335,9 @@ export class Page extends React.Component<PageProps, PageState> {
|
|
|
299
335
|
{...rest}
|
|
300
336
|
className={css(
|
|
301
337
|
styles.page,
|
|
302
|
-
width !== null && 'pf-m-resize-observer',
|
|
338
|
+
width !== null && height !== null && 'pf-m-resize-observer',
|
|
303
339
|
width !== null && `pf-m-breakpoint-${getBreakpoint(width)}`,
|
|
340
|
+
height !== null && `pf-m-height-breakpoint-${getVerticalBreakpoint(height)}`,
|
|
304
341
|
className
|
|
305
342
|
)}
|
|
306
343
|
>
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { css } from '@patternfly/react-styles';
|
|
3
3
|
import styles from '@patternfly/react-styles/css/components/Page/page';
|
|
4
|
+
import { formatBreakpointMods } from '../../helpers/util';
|
|
5
|
+
import { PageContext } from '../Page/Page';
|
|
4
6
|
|
|
5
7
|
export interface PageBreadcrumbProps extends React.HTMLProps<HTMLElement> {
|
|
6
8
|
/** Additional classes to apply to the PageBreadcrumb */
|
|
@@ -9,8 +11,17 @@ export interface PageBreadcrumbProps extends React.HTMLProps<HTMLElement> {
|
|
|
9
11
|
children?: React.ReactNode;
|
|
10
12
|
/** Limits the width of the breadcrumb */
|
|
11
13
|
isWidthLimited?: boolean;
|
|
12
|
-
/** Modifier indicating if the PageBreadcrumb is sticky to the top or bottom */
|
|
14
|
+
/** @deprecated Use the stickyOnBreakpoint prop instead - Modifier indicating if the PageBreadcrumb is sticky to the top or bottom */
|
|
13
15
|
sticky?: 'top' | 'bottom';
|
|
16
|
+
/** Modifier indicating if the PageBreadcrumb is sticky to the top or bottom at various breakpoints */
|
|
17
|
+
stickyOnBreakpoint?: {
|
|
18
|
+
default?: 'top' | 'bottom';
|
|
19
|
+
sm?: 'top' | 'bottom';
|
|
20
|
+
md?: 'top' | 'bottom';
|
|
21
|
+
lg?: 'top' | 'bottom';
|
|
22
|
+
xl?: 'top' | 'bottom';
|
|
23
|
+
'2xl'?: 'top' | 'bottom';
|
|
24
|
+
};
|
|
14
25
|
/** Flag indicating if PageBreadcrumb should have a shadow at the top */
|
|
15
26
|
hasShadowTop?: boolean;
|
|
16
27
|
/** Flag indicating if PageBreadcrumb should have a shadow at the bottom */
|
|
@@ -24,27 +35,33 @@ export const PageBreadcrumb = ({
|
|
|
24
35
|
children,
|
|
25
36
|
isWidthLimited,
|
|
26
37
|
sticky,
|
|
38
|
+
stickyOnBreakpoint,
|
|
27
39
|
hasShadowTop = false,
|
|
28
40
|
hasShadowBottom = false,
|
|
29
41
|
hasOverflowScroll = false,
|
|
30
42
|
...props
|
|
31
|
-
}: PageBreadcrumbProps) =>
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
43
|
+
}: PageBreadcrumbProps) => {
|
|
44
|
+
const { height, getVerticalBreakpoint } = React.useContext(PageContext);
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<section
|
|
48
|
+
className={css(
|
|
49
|
+
styles.pageMainBreadcrumb,
|
|
50
|
+
formatBreakpointMods(stickyOnBreakpoint, styles, 'sticky-', getVerticalBreakpoint(height), true),
|
|
51
|
+
isWidthLimited && styles.modifiers.limitWidth,
|
|
52
|
+
sticky === 'top' && styles.modifiers.stickyTop,
|
|
53
|
+
sticky === 'bottom' && styles.modifiers.stickyBottom,
|
|
54
|
+
hasShadowTop && styles.modifiers.shadowTop,
|
|
55
|
+
hasShadowBottom && styles.modifiers.shadowBottom,
|
|
56
|
+
hasOverflowScroll && styles.modifiers.overflowScroll,
|
|
57
|
+
className
|
|
58
|
+
)}
|
|
59
|
+
{...(hasOverflowScroll && { tabIndex: 0 })}
|
|
60
|
+
{...props}
|
|
61
|
+
>
|
|
62
|
+
{isWidthLimited && <div className={css(styles.pageMainBody)}>{children}</div>}
|
|
63
|
+
{!isWidthLimited && children}
|
|
64
|
+
</section>
|
|
65
|
+
);
|
|
66
|
+
};
|
|
50
67
|
PageBreadcrumb.displayName = 'PageBreadcrumb';
|
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { css } from '@patternfly/react-styles';
|
|
3
3
|
import styles from '@patternfly/react-styles/css/components/Page/page';
|
|
4
|
-
|
|
4
|
+
import { formatBreakpointMods } from '../../helpers/util';
|
|
5
|
+
import { PageContext } from '../Page/Page';
|
|
5
6
|
export interface PageGroupProps extends React.HTMLProps<HTMLDivElement> {
|
|
6
7
|
/** Additional classes to apply to the PageGroup */
|
|
7
8
|
className?: string;
|
|
8
9
|
/** Content rendered inside of the PageGroup */
|
|
9
10
|
children?: React.ReactNode;
|
|
10
|
-
/** Modifier indicating if
|
|
11
|
+
/** @deprecated Use the stickyOnBreakpoint prop instead - Modifier indicating if the PageBreadcrumb is sticky to the top or bottom */
|
|
11
12
|
sticky?: 'top' | 'bottom';
|
|
13
|
+
/** Modifier indicating if the PageBreadcrumb is sticky to the top or bottom at various breakpoints */
|
|
14
|
+
stickyOnBreakpoint?: {
|
|
15
|
+
default?: 'top' | 'bottom';
|
|
16
|
+
sm?: 'top' | 'bottom';
|
|
17
|
+
md?: 'top' | 'bottom';
|
|
18
|
+
lg?: 'top' | 'bottom';
|
|
19
|
+
xl?: 'top' | 'bottom';
|
|
20
|
+
'2xl'?: 'top' | 'bottom';
|
|
21
|
+
};
|
|
12
22
|
/** Modifier indicating if PageGroup should have a shadow at the top */
|
|
13
23
|
hasShadowTop?: boolean;
|
|
14
24
|
/** Modifier indicating if PageGroup should have a shadow at the bottom */
|
|
@@ -21,25 +31,31 @@ export const PageGroup = ({
|
|
|
21
31
|
className = '',
|
|
22
32
|
children,
|
|
23
33
|
sticky,
|
|
34
|
+
stickyOnBreakpoint,
|
|
24
35
|
hasShadowTop = false,
|
|
25
36
|
hasShadowBottom = false,
|
|
26
37
|
hasOverflowScroll = false,
|
|
27
38
|
...props
|
|
28
|
-
}: PageGroupProps) =>
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
)
|
|
39
|
+
}: PageGroupProps) => {
|
|
40
|
+
const { height, getVerticalBreakpoint } = React.useContext(PageContext);
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<div
|
|
44
|
+
{...props}
|
|
45
|
+
className={css(
|
|
46
|
+
styles.pageMainGroup,
|
|
47
|
+
formatBreakpointMods(stickyOnBreakpoint, styles, 'sticky-', getVerticalBreakpoint(height), true),
|
|
48
|
+
sticky === 'top' && styles.modifiers.stickyTop,
|
|
49
|
+
sticky === 'bottom' && styles.modifiers.stickyBottom,
|
|
50
|
+
hasShadowTop && styles.modifiers.shadowTop,
|
|
51
|
+
hasShadowBottom && styles.modifiers.shadowBottom,
|
|
52
|
+
hasOverflowScroll && styles.modifiers.overflowScroll,
|
|
53
|
+
className
|
|
54
|
+
)}
|
|
55
|
+
{...(hasOverflowScroll && { tabIndex: 0 })}
|
|
56
|
+
>
|
|
57
|
+
{children}
|
|
58
|
+
</div>
|
|
59
|
+
);
|
|
60
|
+
};
|
|
45
61
|
PageGroup.displayName = 'PageGroup';
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { css } from '@patternfly/react-styles';
|
|
3
3
|
import styles from '@patternfly/react-styles/css/components/Page/page';
|
|
4
|
+
import { formatBreakpointMods } from '../../helpers/util';
|
|
5
|
+
import { PageContext } from '../Page/Page';
|
|
4
6
|
|
|
5
7
|
export interface PageNavigationProps extends React.HTMLProps<HTMLDivElement> {
|
|
6
8
|
/** Additional classes to apply to the PageNavigation */
|
|
@@ -9,8 +11,17 @@ export interface PageNavigationProps extends React.HTMLProps<HTMLDivElement> {
|
|
|
9
11
|
children?: React.ReactNode;
|
|
10
12
|
/** Limits the width of the PageNavigation */
|
|
11
13
|
isWidthLimited?: boolean;
|
|
12
|
-
/** Modifier indicating if the
|
|
14
|
+
/** @deprecated Use the stickyOnBreakpoint prop instead - Modifier indicating if the PageBreadcrumb is sticky to the top or bottom */
|
|
13
15
|
sticky?: 'top' | 'bottom';
|
|
16
|
+
/** Modifier indicating if the PageBreadcrumb is sticky to the top or bottom at various breakpoints */
|
|
17
|
+
stickyOnBreakpoint?: {
|
|
18
|
+
default?: 'top' | 'bottom';
|
|
19
|
+
sm?: 'top' | 'bottom';
|
|
20
|
+
md?: 'top' | 'bottom';
|
|
21
|
+
lg?: 'top' | 'bottom';
|
|
22
|
+
xl?: 'top' | 'bottom';
|
|
23
|
+
'2xl'?: 'top' | 'bottom';
|
|
24
|
+
};
|
|
14
25
|
/** Flag indicating if PageNavigation should have a shadow at the top */
|
|
15
26
|
hasShadowTop?: boolean;
|
|
16
27
|
/** Flag indicating if PageNavigation should have a shadow at the bottom */
|
|
@@ -24,27 +35,33 @@ export const PageNavigation = ({
|
|
|
24
35
|
children,
|
|
25
36
|
isWidthLimited,
|
|
26
37
|
sticky,
|
|
38
|
+
stickyOnBreakpoint,
|
|
27
39
|
hasShadowTop = false,
|
|
28
40
|
hasShadowBottom = false,
|
|
29
41
|
hasOverflowScroll = false,
|
|
30
42
|
...props
|
|
31
|
-
}: PageNavigationProps) =>
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
43
|
+
}: PageNavigationProps) => {
|
|
44
|
+
const { height, getVerticalBreakpoint } = React.useContext(PageContext);
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<div
|
|
48
|
+
className={css(
|
|
49
|
+
styles.pageMainNav,
|
|
50
|
+
formatBreakpointMods(stickyOnBreakpoint, styles, 'sticky-', getVerticalBreakpoint(height), true),
|
|
51
|
+
isWidthLimited && styles.modifiers.limitWidth,
|
|
52
|
+
sticky === 'top' && styles.modifiers.stickyTop,
|
|
53
|
+
sticky === 'bottom' && styles.modifiers.stickyBottom,
|
|
54
|
+
hasShadowTop && styles.modifiers.shadowTop,
|
|
55
|
+
hasShadowBottom && styles.modifiers.shadowBottom,
|
|
56
|
+
hasOverflowScroll && styles.modifiers.overflowScroll,
|
|
57
|
+
className
|
|
58
|
+
)}
|
|
59
|
+
{...(hasOverflowScroll && { tabIndex: 0 })}
|
|
60
|
+
{...props}
|
|
61
|
+
>
|
|
62
|
+
{isWidthLimited && <div className={css(styles.pageMainBody)}>{children}</div>}
|
|
63
|
+
{!isWidthLimited && children}
|
|
64
|
+
</div>
|
|
65
|
+
);
|
|
66
|
+
};
|
|
50
67
|
PageNavigation.displayName = 'PageNavigation';
|
|
@@ -2,6 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import styles from '@patternfly/react-styles/css/components/Page/page';
|
|
3
3
|
import { css } from '@patternfly/react-styles';
|
|
4
4
|
import { formatBreakpointMods } from '../../helpers/util';
|
|
5
|
+
import { PageContext } from '../Page/Page';
|
|
5
6
|
|
|
6
7
|
export enum PageSectionVariants {
|
|
7
8
|
default = 'default',
|
|
@@ -43,8 +44,17 @@ export interface PageSectionProps extends React.HTMLProps<HTMLDivElement> {
|
|
|
43
44
|
xl?: 'padding' | 'noPadding';
|
|
44
45
|
'2xl'?: 'padding' | 'noPadding';
|
|
45
46
|
};
|
|
46
|
-
/** Modifier indicating if
|
|
47
|
+
/** @deprecated Use the stickyOnBreakpoint prop instead - Modifier indicating if the PageBreadcrumb is sticky to the top or bottom */
|
|
47
48
|
sticky?: 'top' | 'bottom';
|
|
49
|
+
/** Modifier indicating if the PageBreadcrumb is sticky to the top or bottom at various breakpoints */
|
|
50
|
+
stickyOnBreakpoint?: {
|
|
51
|
+
default?: 'top' | 'bottom';
|
|
52
|
+
sm?: 'top' | 'bottom';
|
|
53
|
+
md?: 'top' | 'bottom';
|
|
54
|
+
lg?: 'top' | 'bottom';
|
|
55
|
+
xl?: 'top' | 'bottom';
|
|
56
|
+
'2xl'?: 'top' | 'bottom';
|
|
57
|
+
};
|
|
48
58
|
/** Modifier indicating if PageSection should have a shadow at the top */
|
|
49
59
|
hasShadowTop?: boolean;
|
|
50
60
|
/** Modifier indicating if PageSection should have a shadow at the bottom */
|
|
@@ -79,32 +89,38 @@ export const PageSection: React.FunctionComponent<PageSectionProps> = ({
|
|
|
79
89
|
isWidthLimited = false,
|
|
80
90
|
isCenterAligned = false,
|
|
81
91
|
sticky,
|
|
92
|
+
stickyOnBreakpoint,
|
|
82
93
|
hasShadowTop = false,
|
|
83
94
|
hasShadowBottom = false,
|
|
84
95
|
hasOverflowScroll = false,
|
|
85
96
|
...props
|
|
86
|
-
}: PageSectionProps) =>
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
97
|
+
}: PageSectionProps) => {
|
|
98
|
+
const { height, getVerticalBreakpoint } = React.useContext(PageContext);
|
|
99
|
+
|
|
100
|
+
return (
|
|
101
|
+
<section
|
|
102
|
+
{...props}
|
|
103
|
+
className={css(
|
|
104
|
+
variantType[type],
|
|
105
|
+
formatBreakpointMods(padding, styles),
|
|
106
|
+
formatBreakpointMods(stickyOnBreakpoint, styles, 'sticky-', getVerticalBreakpoint(height), true),
|
|
107
|
+
variantStyle[variant],
|
|
108
|
+
isFilled === false && styles.modifiers.noFill,
|
|
109
|
+
isFilled === true && styles.modifiers.fill,
|
|
110
|
+
isWidthLimited && styles.modifiers.limitWidth,
|
|
111
|
+
isWidthLimited && isCenterAligned && type !== PageSectionTypes.subNav && styles.modifiers.alignCenter,
|
|
112
|
+
sticky === 'top' && styles.modifiers.stickyTop,
|
|
113
|
+
sticky === 'bottom' && styles.modifiers.stickyBottom,
|
|
114
|
+
hasShadowTop && styles.modifiers.shadowTop,
|
|
115
|
+
hasShadowBottom && styles.modifiers.shadowBottom,
|
|
116
|
+
hasOverflowScroll && styles.modifiers.overflowScroll,
|
|
117
|
+
className
|
|
118
|
+
)}
|
|
119
|
+
{...(hasOverflowScroll && { tabIndex: 0 })}
|
|
120
|
+
>
|
|
121
|
+
{isWidthLimited && <div className={css(styles.pageMainBody)}>{children}</div>}
|
|
122
|
+
{!isWidthLimited && children}
|
|
123
|
+
</section>
|
|
124
|
+
);
|
|
125
|
+
};
|
|
110
126
|
PageSection.displayName = 'PageSection';
|