@patternfly/react-core 6.6.1-prerelease.7 → 6.6.1-prerelease.8

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 (158) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/components/package.json +1 -1
  3. package/deprecated/package.json +1 -1
  4. package/dist/dynamic/components/AboutModal/package.json +1 -1
  5. package/dist/dynamic/components/Accordion/package.json +1 -1
  6. package/dist/dynamic/components/ActionList/package.json +1 -1
  7. package/dist/dynamic/components/Alert/package.json +1 -1
  8. package/dist/dynamic/components/Avatar/package.json +1 -1
  9. package/dist/dynamic/components/BackToTop/package.json +1 -1
  10. package/dist/dynamic/components/Backdrop/package.json +1 -1
  11. package/dist/dynamic/components/BackgroundImage/package.json +1 -1
  12. package/dist/dynamic/components/Badge/package.json +1 -1
  13. package/dist/dynamic/components/Banner/package.json +1 -1
  14. package/dist/dynamic/components/Brand/package.json +1 -1
  15. package/dist/dynamic/components/Breadcrumb/package.json +1 -1
  16. package/dist/dynamic/components/Button/package.json +1 -1
  17. package/dist/dynamic/components/CalendarMonth/package.json +1 -1
  18. package/dist/dynamic/components/Card/package.json +1 -1
  19. package/dist/dynamic/components/Checkbox/package.json +1 -1
  20. package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
  21. package/dist/dynamic/components/CodeBlock/package.json +1 -1
  22. package/dist/dynamic/components/Compass/package.json +1 -1
  23. package/dist/dynamic/components/Content/package.json +1 -1
  24. package/dist/dynamic/components/DataList/package.json +1 -1
  25. package/dist/dynamic/components/DatePicker/package.json +1 -1
  26. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  27. package/dist/dynamic/components/Divider/package.json +1 -1
  28. package/dist/dynamic/components/Drawer/package.json +1 -1
  29. package/dist/dynamic/components/Dropdown/package.json +1 -1
  30. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  31. package/dist/dynamic/components/EmptyState/package.json +1 -1
  32. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  33. package/dist/dynamic/components/FileUpload/package.json +1 -1
  34. package/dist/dynamic/components/Form/package.json +1 -1
  35. package/dist/dynamic/components/FormSelect/package.json +1 -1
  36. package/dist/dynamic/components/HelperText/package.json +1 -1
  37. package/dist/dynamic/components/Hero/package.json +1 -1
  38. package/dist/dynamic/components/Hint/package.json +1 -1
  39. package/dist/dynamic/components/Icon/package.json +1 -1
  40. package/dist/dynamic/components/InputGroup/package.json +1 -1
  41. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  42. package/dist/dynamic/components/Label/package.json +1 -1
  43. package/dist/dynamic/components/List/package.json +1 -1
  44. package/dist/dynamic/components/LoginPage/package.json +1 -1
  45. package/dist/dynamic/components/Masthead/package.json +1 -1
  46. package/dist/dynamic/components/Menu/package.json +1 -1
  47. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  48. package/dist/dynamic/components/Modal/package.json +1 -1
  49. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  50. package/dist/dynamic/components/Nav/package.json +1 -1
  51. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  52. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  53. package/dist/dynamic/components/NumberInput/package.json +1 -1
  54. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  55. package/dist/dynamic/components/Page/package.json +1 -1
  56. package/dist/dynamic/components/Pagination/package.json +1 -1
  57. package/dist/dynamic/components/Panel/package.json +1 -1
  58. package/dist/dynamic/components/Popover/package.json +1 -1
  59. package/dist/dynamic/components/Progress/package.json +1 -1
  60. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  61. package/dist/dynamic/components/Radio/package.json +1 -1
  62. package/dist/dynamic/components/SearchInput/package.json +1 -1
  63. package/dist/dynamic/components/Select/package.json +1 -1
  64. package/dist/dynamic/components/Sidebar/package.json +1 -1
  65. package/dist/dynamic/components/SimpleList/package.json +1 -1
  66. package/dist/dynamic/components/Skeleton/package.json +1 -1
  67. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  68. package/dist/dynamic/components/Slider/package.json +1 -1
  69. package/dist/dynamic/components/Spinner/package.json +1 -1
  70. package/dist/dynamic/components/Switch/package.json +1 -1
  71. package/dist/dynamic/components/Tabs/package.json +1 -1
  72. package/dist/dynamic/components/TextArea/package.json +1 -1
  73. package/dist/dynamic/components/TextInput/package.json +1 -1
  74. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  75. package/dist/dynamic/components/TimePicker/package.json +1 -1
  76. package/dist/dynamic/components/Timestamp/package.json +1 -1
  77. package/dist/dynamic/components/Title/package.json +1 -1
  78. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  79. package/dist/dynamic/components/Toolbar/package.json +1 -1
  80. package/dist/dynamic/components/Tooltip/package.json +1 -1
  81. package/dist/dynamic/components/TreeView/package.json +1 -1
  82. package/dist/dynamic/components/Truncate/package.json +1 -1
  83. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  84. package/dist/dynamic/components/Wizard/package.json +1 -1
  85. package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/Tile/package.json +1 -1
  90. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  91. package/dist/dynamic/deprecated/components/package.json +1 -1
  92. package/dist/dynamic/helpers/AnimationsProvider/AnimationsProvider/package.json +1 -1
  93. package/dist/dynamic/helpers/AnimationsProvider/package.json +1 -1
  94. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  95. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  96. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  97. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  98. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  99. package/dist/dynamic/helpers/SSRSafeIds/SSRSafeIds/package.json +1 -1
  100. package/dist/dynamic/helpers/constants/package.json +1 -1
  101. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  102. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  103. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  104. package/dist/dynamic/helpers/inert/package.json +1 -1
  105. package/dist/dynamic/helpers/package.json +1 -1
  106. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  107. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  108. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  109. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  110. package/dist/dynamic/helpers/useSSRSafeId/package.json +1 -1
  111. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  112. package/dist/dynamic/helpers/util/package.json +1 -1
  113. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  114. package/dist/dynamic/layouts/Flex/package.json +1 -1
  115. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  116. package/dist/dynamic/layouts/Grid/package.json +1 -1
  117. package/dist/dynamic/layouts/Level/package.json +1 -1
  118. package/dist/dynamic/layouts/Split/package.json +1 -1
  119. package/dist/dynamic/layouts/Stack/package.json +1 -1
  120. package/dist/dynamic/styles/package.json +1 -1
  121. package/dist/dynamic-modules.json +2 -0
  122. package/dist/esm/components/Page/Page.d.ts +4 -0
  123. package/dist/esm/components/Page/Page.d.ts.map +1 -1
  124. package/dist/esm/components/Page/Page.js +4 -3
  125. package/dist/esm/components/Page/Page.js.map +1 -1
  126. package/dist/esm/components/Page/PageFooter.d.ts +11 -0
  127. package/dist/esm/components/Page/PageFooter.d.ts.map +1 -0
  128. package/dist/esm/components/Page/PageFooter.js +11 -0
  129. package/dist/esm/components/Page/PageFooter.js.map +1 -0
  130. package/dist/esm/components/Page/index.d.ts +1 -0
  131. package/dist/esm/components/Page/index.d.ts.map +1 -1
  132. package/dist/esm/components/Page/index.js +1 -0
  133. package/dist/esm/components/Page/index.js.map +1 -1
  134. package/dist/js/components/Page/Page.d.ts +4 -0
  135. package/dist/js/components/Page/Page.d.ts.map +1 -1
  136. package/dist/js/components/Page/Page.js +4 -3
  137. package/dist/js/components/Page/Page.js.map +1 -1
  138. package/dist/js/components/Page/PageFooter.d.ts +11 -0
  139. package/dist/js/components/Page/PageFooter.d.ts.map +1 -0
  140. package/dist/js/components/Page/PageFooter.js +15 -0
  141. package/dist/js/components/Page/PageFooter.js.map +1 -0
  142. package/dist/js/components/Page/index.d.ts +1 -0
  143. package/dist/js/components/Page/index.d.ts.map +1 -1
  144. package/dist/js/components/Page/index.js +1 -0
  145. package/dist/js/components/Page/index.js.map +1 -1
  146. package/dist/umd/assets/{output-BGwwN1RO.css → output-DfsTC8Iz.css} +22858 -22812
  147. package/dist/umd/react-core.min.js +1 -1
  148. package/helpers/package.json +1 -1
  149. package/layouts/package.json +1 -1
  150. package/next/package.json +1 -1
  151. package/package.json +6 -6
  152. package/src/components/Page/Page.tsx +10 -1
  153. package/src/components/Page/PageFooter.tsx +28 -0
  154. package/src/components/Page/__tests__/Page.test.tsx +46 -0
  155. package/src/components/Page/__tests__/PageFooter.test.tsx +38 -0
  156. package/src/components/Page/examples/Page.md +6 -2
  157. package/src/components/Page/examples/{PageHeaderContent.tsx → PageHeaderAndFooterContent.tsx} +4 -3
  158. package/src/components/Page/index.ts +1 -0
@@ -1 +1 @@
1
- {"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"6.6.1-prerelease.6","private":true}
1
+ {"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"6.6.1-prerelease.7","private":true}
@@ -1 +1 @@
1
- {"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"6.6.1-prerelease.6","private":true}
1
+ {"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"6.6.1-prerelease.7","private":true}
package/next/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"6.6.1-prerelease.6","private":true}
1
+ {"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"6.6.1-prerelease.7","private":true}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/react-core",
3
- "version": "6.6.1-prerelease.7",
3
+ "version": "6.6.1-prerelease.8",
4
4
  "description": "This library provides a set of common React components for use with the PatternFly reference implementation.",
5
5
  "main": "dist/js/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -46,15 +46,15 @@
46
46
  "subpaths": "node ../../scripts/exportSubpaths.mjs --config subpaths.config.json"
47
47
  },
48
48
  "dependencies": {
49
- "@patternfly/react-icons": "^6.6.1-prerelease.2",
50
- "@patternfly/react-styles": "^6.6.1-prerelease.1",
51
- "@patternfly/react-tokens": "^6.6.1-prerelease.1",
49
+ "@patternfly/react-icons": "^6.6.1-prerelease.3",
50
+ "@patternfly/react-styles": "^6.6.1-prerelease.2",
51
+ "@patternfly/react-tokens": "^6.6.1-prerelease.2",
52
52
  "focus-trap": "7.6.6",
53
53
  "react-dropzone": "^14.3.5",
54
54
  "tslib": "^2.8.1"
55
55
  },
56
56
  "devDependencies": {
57
- "@patternfly/patternfly": "6.6.0-prerelease.39",
57
+ "@patternfly/patternfly": "6.6.0-prerelease.40",
58
58
  "case-anything": "^3.1.2",
59
59
  "css": "^3.0.0",
60
60
  "fs-extra": "^11.3.3"
@@ -63,5 +63,5 @@
63
63
  "react": "^17 || ^18 || ^19",
64
64
  "react-dom": "^17 || ^18 || ^19"
65
65
  },
66
- "gitHead": "a2d7f2396e73fb6f9e599dcfcaba23c6fb0d042d"
66
+ "gitHead": "008744f97e0d226d41c0bec0b78ec938943392e3"
67
67
  }
@@ -118,6 +118,10 @@ export interface PageProps extends React.HTMLProps<HTMLDivElement> {
118
118
  breadcrumbProps?: PageBreadcrumbProps;
119
119
  /** Enables children to fill the available vertical space. Child page sections or groups that should fill should be passed the isFilled property. */
120
120
  isContentFilled?: boolean;
121
+ /** Flag indicating the page should render without the content area background and overflow scroll. */
122
+ isPlain?: boolean;
123
+ /** Content rendered inside the page footer */
124
+ footer?: React.ReactNode;
121
125
  }
122
126
 
123
127
  export interface PageState {
@@ -141,7 +145,8 @@ class Page extends Component<PageProps, PageState> {
141
145
  mainComponent: 'main',
142
146
  getBreakpoint,
143
147
  getVerticalBreakpoint,
144
- mainRef: undefined
148
+ mainRef: undefined,
149
+ isPlain: false
145
150
  };
146
151
  mainRef = this.props?.mainRef ? this.props.mainRef : createRef<HTMLDivElement>();
147
152
  pageRef = createRef<HTMLDivElement>();
@@ -284,6 +289,8 @@ class Page extends Component<PageProps, PageState> {
284
289
  isContentFilled,
285
290
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
286
291
  mainRef,
292
+ isPlain,
293
+ footer,
287
294
  ...rest
288
295
  } = this.props;
289
296
  const { mobileView, mobileIsSidebarOpen, desktopIsSidebarOpen, width, height } = this.state;
@@ -367,6 +374,7 @@ class Page extends Component<PageProps, PageState> {
367
374
  width !== null && `pf-m-breakpoint-${getBreakpoint(width)}`,
368
375
  height !== null && `pf-m-height-breakpoint-${getVerticalBreakpoint(height)}`,
369
376
  sidebar === null && styles.modifiers.noSidebar,
377
+ isPlain && styles.modifiers.plain,
370
378
  className
371
379
  )}
372
380
  >
@@ -397,6 +405,7 @@ class Page extends Component<PageProps, PageState> {
397
405
  </div>
398
406
  )}
399
407
  {!notificationDrawer && main}
408
+ {footer && footer}
400
409
  </div>
401
410
  </PageContextProvider>
402
411
  );
@@ -0,0 +1,28 @@
1
+ import styles from '@patternfly/react-styles/css/components/Page/page';
2
+ import { css } from '@patternfly/react-styles';
3
+
4
+ export interface PageFooterProps extends React.HTMLProps<HTMLElement> {
5
+ /** Content rendered inside the footer */
6
+ children?: React.ReactNode;
7
+ /** Additional classes added to the footer */
8
+ className?: string;
9
+ /** Sets the base component to render. Defaults to footer */
10
+ component?: keyof React.JSX.IntrinsicElements;
11
+ }
12
+
13
+ export const PageFooter: React.FunctionComponent<PageFooterProps> = ({
14
+ className,
15
+ children,
16
+ component = 'footer',
17
+ ...props
18
+ }: PageFooterProps) => {
19
+ const Component = component as any;
20
+
21
+ return (
22
+ <Component {...props} className={css(styles.pageFooter, className)}>
23
+ {children}
24
+ </Component>
25
+ );
26
+ };
27
+
28
+ PageFooter.displayName = 'PageFooter';
@@ -13,6 +13,7 @@ import { PageHeader } from '../PageHeader';
13
13
  import { Masthead } from '../../Masthead';
14
14
 
15
15
  import styles from '@patternfly/react-styles/css/components/Page/page';
16
+ import { PageFooter } from '../PageFooter';
16
17
 
17
18
  const props = {
18
19
  'aria-label': 'Page layout',
@@ -520,4 +521,49 @@ describe('Page docked variant', () => {
520
521
  expect(header).toHaveClass(styles.pageHeader);
521
522
  expect(header.parentElement).toHaveClass(styles.page);
522
523
  });
524
+
525
+ test('Renders PageFooter when passed to the footer prop', () => {
526
+ render(
527
+ <Page {...props} footer={<PageFooter>Custom footer</PageFooter>}>
528
+ <PageSection>Custom content</PageSection>
529
+ </Page>
530
+ );
531
+
532
+ const footer = screen.getByRole('contentinfo');
533
+ expect(footer).toHaveClass(styles.pageFooter);
534
+ expect(footer.parentElement).toHaveClass(styles.page);
535
+ });
536
+
537
+ test(`Renders with ${styles.modifiers.plain} when isPlain is true`, () => {
538
+ render(
539
+ <Page {...props} isPlain data-testid="page">
540
+ <PageSection>Custom content</PageSection>
541
+ </Page>
542
+ );
543
+
544
+ const page = screen.getByTestId('page');
545
+ expect(page).toHaveClass(styles.modifiers.plain);
546
+ });
547
+
548
+ test(`Does not render with ${styles.modifiers.plain} when isPlain is false`, () => {
549
+ render(
550
+ <Page {...props} isPlain={false} data-testid="page">
551
+ <PageSection>Custom content</PageSection>
552
+ </Page>
553
+ );
554
+
555
+ const page = screen.getByTestId('page');
556
+ expect(page).not.toHaveClass(styles.modifiers.plain);
557
+ });
558
+
559
+ test(`Does not render with ${styles.modifiers.plain} when isPlain is not passed`, () => {
560
+ render(
561
+ <Page {...props} data-testid="page">
562
+ <PageSection>Custom content</PageSection>
563
+ </Page>
564
+ );
565
+
566
+ const page = screen.getByTestId('page');
567
+ expect(page).not.toHaveClass(styles.modifiers.plain);
568
+ });
523
569
  });
@@ -0,0 +1,38 @@
1
+ import { render, screen } from '@testing-library/react';
2
+ import styles from '@patternfly/react-styles/css/components/Page/page';
3
+ import { PageFooter } from '../PageFooter';
4
+
5
+ test('Renders children', () => {
6
+ render(<PageFooter>Footer content</PageFooter>);
7
+ expect(screen.getByRole('contentinfo')).toBeVisible();
8
+ });
9
+
10
+ test('Renders without children', () => {
11
+ render(<PageFooter data-testid="footer" />);
12
+ expect(screen.getByTestId('footer')).toBeVisible();
13
+ });
14
+
15
+ test(`Renders with class ${styles.pageFooter} by default`, () => {
16
+ render(<PageFooter>Footer content</PageFooter>);
17
+ expect(screen.getByRole('contentinfo')).toHaveClass(styles.pageFooter, { exact: true });
18
+ });
19
+
20
+ test('Renders as a footer by default', () => {
21
+ render(<PageFooter>Footer content</PageFooter>);
22
+ expect(screen.getByRole('contentinfo').tagName).toBe('FOOTER');
23
+ });
24
+
25
+ test('Renders as a custom component when component is passed', () => {
26
+ render(<PageFooter component="div">Footer content</PageFooter>);
27
+ expect(screen.getByText('Footer content').tagName).toBe('DIV');
28
+ });
29
+
30
+ test('Renders with custom classes when className is passed', () => {
31
+ render(<PageFooter className="custom-class">Footer content</PageFooter>);
32
+ expect(screen.getByRole('contentinfo')).toHaveClass('custom-class');
33
+ });
34
+
35
+ test('Renders with spread props', () => {
36
+ render(<PageFooter id="custom-id">Footer content</PageFooter>);
37
+ expect(screen.getByRole('contentinfo')).toHaveAttribute('id', 'custom-id');
38
+ });
@@ -33,11 +33,15 @@ The `<MastheadMain>` component includes the smaller area that typically contains
33
33
  - 1 or more `<PageSidebarBody>` components inside `<PageSidebar>` for vertical navigation or other sidebar content
34
34
  - 1 or more `<PageSection>` components
35
35
 
36
- ### Page header
36
+ ### Page header and footer
37
37
 
38
38
  To use a page header instead of passing a [masthead](/components/masthead) directly, pass a `<PageHeader>` to the `masthead` property. `<PageHeader>` should only be used to wrap custom header content.
39
39
 
40
- ```ts file="./PageHeaderContent.tsx"
40
+ `<PageFooter>` can be passed to the `footer` property, and should be used to wrap custom footer content.
41
+
42
+ When using a custom `<PageHeader>` and `<PageFooter>`, the `isPlain` flag should be passed to `<Page>`. This will remove styling on the main container, the height constraints on the page wrapper (so it can grow beyond the viewport), and remove the scroll management from the content section so the window will be what scrolls.
43
+
44
+ ```ts file="./PageHeaderAndFooterContent.tsx"
41
45
 
42
46
  ```
43
47
 
@@ -1,10 +1,11 @@
1
- import { Page, PageHeader, PageSection } from '@patternfly/react-core';
1
+ import { Page, PageHeader, PageFooter, PageSection } from '@patternfly/react-core';
2
2
 
3
- export const PageHeaderContent: React.FunctionComponent = () => {
3
+ export const PageHeaderAndFooterContent: React.FunctionComponent = () => {
4
4
  const pageHeader = <PageHeader>Page header</PageHeader>;
5
+ const pageFooter = <PageFooter>Page footer</PageFooter>;
5
6
 
6
7
  return (
7
- <Page masthead={pageHeader}>
8
+ <Page isPlain masthead={pageHeader} footer={pageFooter}>
8
9
  <PageSection aria-labelledby="header-example-section-1">
9
10
  <h2 id="header-example-section-1">Page header example section 1</h2>
10
11
  </PageSection>
@@ -1,6 +1,7 @@
1
1
  export * from './Page';
2
2
  export * from './PageBody';
3
3
  export * from './PageBreadcrumb';
4
+ export * from './PageFooter';
4
5
  export * from './PageGroup';
5
6
  export * from './PageHeader';
6
7
  export * from './PageSidebar';