@patternfly/react-core 6.5.0-prerelease.49 → 6.5.0-prerelease.50

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 (168) 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/package.json +1 -1
  105. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  106. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  107. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  108. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  109. package/dist/dynamic/helpers/useSSRSafeId/package.json +1 -1
  110. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  111. package/dist/dynamic/helpers/util/package.json +1 -1
  112. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  113. package/dist/dynamic/layouts/Flex/package.json +1 -1
  114. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  115. package/dist/dynamic/layouts/Grid/package.json +1 -1
  116. package/dist/dynamic/layouts/Level/package.json +1 -1
  117. package/dist/dynamic/layouts/Split/package.json +1 -1
  118. package/dist/dynamic/layouts/Stack/package.json +1 -1
  119. package/dist/dynamic/styles/package.json +1 -1
  120. package/dist/esm/components/Page/Page.d.ts.map +1 -1
  121. package/dist/esm/components/Page/Page.js +1 -1
  122. package/dist/esm/components/Page/Page.js.map +1 -1
  123. package/dist/esm/components/Page/PageGroup.d.ts +5 -1
  124. package/dist/esm/components/Page/PageGroup.d.ts.map +1 -1
  125. package/dist/esm/components/Page/PageGroup.js +2 -2
  126. package/dist/esm/components/Page/PageGroup.js.map +1 -1
  127. package/dist/esm/components/Page/PageSection.d.ts +4 -0
  128. package/dist/esm/components/Page/PageSection.d.ts.map +1 -1
  129. package/dist/esm/components/Page/PageSection.js +2 -2
  130. package/dist/esm/components/Page/PageSection.js.map +1 -1
  131. package/dist/esm/components/Page/PageSidebar.d.ts.map +1 -1
  132. package/dist/esm/components/Page/PageSidebar.js +1 -1
  133. package/dist/esm/components/Page/PageSidebar.js.map +1 -1
  134. package/dist/js/components/Page/Page.d.ts.map +1 -1
  135. package/dist/js/components/Page/Page.js +1 -1
  136. package/dist/js/components/Page/Page.js.map +1 -1
  137. package/dist/js/components/Page/PageGroup.d.ts +5 -1
  138. package/dist/js/components/Page/PageGroup.d.ts.map +1 -1
  139. package/dist/js/components/Page/PageGroup.js +2 -2
  140. package/dist/js/components/Page/PageGroup.js.map +1 -1
  141. package/dist/js/components/Page/PageSection.d.ts +4 -0
  142. package/dist/js/components/Page/PageSection.d.ts.map +1 -1
  143. package/dist/js/components/Page/PageSection.js +2 -2
  144. package/dist/js/components/Page/PageSection.js.map +1 -1
  145. package/dist/js/components/Page/PageSidebar.d.ts.map +1 -1
  146. package/dist/js/components/Page/PageSidebar.js +1 -1
  147. package/dist/js/components/Page/PageSidebar.js.map +1 -1
  148. package/dist/styles/base-no-reset.css +6 -0
  149. package/dist/styles/base.css +6 -0
  150. package/dist/umd/assets/{output-BDpVgdr7.css → output-iMhx1BC1.css} +19683 -19616
  151. package/dist/umd/react-core.min.js +1 -1
  152. package/helpers/package.json +1 -1
  153. package/layouts/package.json +1 -1
  154. package/next/package.json +1 -1
  155. package/package.json +6 -6
  156. package/src/components/Page/Page.tsx +7 -1
  157. package/src/components/Page/PageGroup.tsx +8 -0
  158. package/src/components/Page/PageSection.tsx +8 -0
  159. package/src/components/Page/PageSidebar.tsx +3 -1
  160. package/src/components/Page/__tests__/Generated/__snapshots__/PageSidebar.test.tsx.snap +6 -2
  161. package/src/components/Page/__tests__/Page.test.tsx +7 -0
  162. package/src/components/Page/__tests__/PageGroup.test.tsx +98 -88
  163. package/src/components/Page/__tests__/PageSection.test.tsx +20 -0
  164. package/src/components/Page/__tests__/PageSidebar.test.tsx +9 -0
  165. package/src/components/Page/__tests__/__snapshots__/Page.test.tsx.snap +62 -14
  166. package/src/components/Page/__tests__/__snapshots__/PageGroup.test.tsx.snap +6 -6
  167. package/src/components/Page/examples/Page.md +9 -1
  168. package/src/components/Page/examples/PagePlainSections.tsx +93 -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.5.0-prerelease.48","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.5.0-prerelease.49","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.5.0-prerelease.48","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.5.0-prerelease.49","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.5.0-prerelease.48","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.5.0-prerelease.49","private":true}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/react-core",
3
- "version": "6.5.0-prerelease.49",
3
+ "version": "6.5.0-prerelease.50",
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.5.0-prerelease.20",
50
- "@patternfly/react-styles": "^6.5.0-prerelease.15",
51
- "@patternfly/react-tokens": "^6.5.0-prerelease.14",
49
+ "@patternfly/react-icons": "^6.5.0-prerelease.21",
50
+ "@patternfly/react-styles": "^6.5.0-prerelease.16",
51
+ "@patternfly/react-tokens": "^6.5.0-prerelease.15",
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.5.0-prerelease.62",
57
+ "@patternfly/patternfly": "6.5.0-prerelease.65",
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": "a7a847c33ba834994e3a1db186ee071e7fbdd7ad"
66
+ "gitHead": "911223aa1a6b9309d90d31245bc29f3e1a9c675c"
67
67
  }
@@ -348,7 +348,13 @@ class Page extends Component<PageProps, PageState> {
348
348
  )}
349
349
  >
350
350
  {skipToContent}
351
- {variant === 'docked' ? <div className={css(styles.pageDock)}>{masthead}</div> : masthead}
351
+ {variant === 'docked' ? (
352
+ <div className={css(styles.pageDock)}>
353
+ <div className={css(styles.pageDockMain)}>{masthead}</div>
354
+ </div>
355
+ ) : (
356
+ masthead
357
+ )}
352
358
  {sidebar}
353
359
  {notificationDrawer && (
354
360
  <div className={css(styles.pageDrawer)}>
@@ -27,6 +27,10 @@ export interface PageGroupProps extends React.HTMLProps<HTMLDivElement> {
27
27
  hasOverflowScroll?: boolean;
28
28
  /** Adds an accessible name to the page group when the hasOverflowScroll prop is set to true. */
29
29
  'aria-label'?: string;
30
+ /** Adds plain styling to the page group. */
31
+ isPlain?: boolean;
32
+ /** @beta Prevents the page group from automatically applying plain styling when glass theme is enabled. */
33
+ isNoPlainOnGlass?: boolean;
30
34
  }
31
35
 
32
36
  export const PageGroup = ({
@@ -38,6 +42,8 @@ export const PageGroup = ({
38
42
  hasShadowBottom = false,
39
43
  hasOverflowScroll = false,
40
44
  'aria-label': ariaLabel,
45
+ isPlain = false,
46
+ isNoPlainOnGlass = false,
41
47
  ...props
42
48
  }: PageGroupProps) => {
43
49
  const { height, getVerticalBreakpoint } = useContext(PageContext);
@@ -60,6 +66,8 @@ export const PageGroup = ({
60
66
  hasShadowTop && styles.modifiers.shadowTop,
61
67
  hasShadowBottom && styles.modifiers.shadowBottom,
62
68
  hasOverflowScroll && styles.modifiers.overflowScroll,
69
+ isPlain && styles.modifiers.plain,
70
+ isNoPlainOnGlass && styles.modifiers.noPlainOnGlass,
63
71
  className
64
72
  )}
65
73
  {...(hasOverflowScroll && { tabIndex: 0, role: 'region', 'aria-label': ariaLabel })}
@@ -67,6 +67,10 @@ export interface PageSectionProps extends React.HTMLProps<HTMLDivElement> {
67
67
  'aria-label'?: string;
68
68
  /** Sets the base component to render. Defaults to section */
69
69
  component?: keyof React.JSX.IntrinsicElements;
70
+ /** Adds plain styling to the page section. */
71
+ isPlain?: boolean;
72
+ /** @beta Prevents the page section from automatically applying plain styling when glass theme is enabled. */
73
+ isNoPlainOnGlass?: boolean;
70
74
  }
71
75
 
72
76
  const variantType = {
@@ -98,6 +102,8 @@ export const PageSection: React.FunctionComponent<PageSectionProps> = ({
98
102
  'aria-label': ariaLabel,
99
103
  component = 'section',
100
104
  hasBodyWrapper = true,
105
+ isPlain = false,
106
+ isNoPlainOnGlass = false,
101
107
  ...props
102
108
  }: PageSectionProps) => {
103
109
  const { height, getVerticalBreakpoint } = useContext(PageContext);
@@ -126,6 +132,8 @@ export const PageSection: React.FunctionComponent<PageSectionProps> = ({
126
132
  hasShadowTop && styles.modifiers.shadowTop,
127
133
  hasShadowBottom && styles.modifiers.shadowBottom,
128
134
  hasOverflowScroll && styles.modifiers.overflowScroll,
135
+ isPlain && styles.modifiers.plain,
136
+ isNoPlainOnGlass && styles.modifiers.noPlainOnGlass,
129
137
  className
130
138
  )}
131
139
  {...(hasOverflowScroll && { tabIndex: 0 })}
@@ -50,7 +50,9 @@ export const PageSidebar: React.FunctionComponent<PageSidebarProps> = ({
50
50
  aria-hidden={!sidebarOpen}
51
51
  {...props}
52
52
  >
53
- <PageSidebarContext.Provider value={{ isSidebarOpen: sidebarOpen }}>{children}</PageSidebarContext.Provider>
53
+ <PageSidebarContext.Provider value={{ isSidebarOpen: sidebarOpen }}>
54
+ <div className={css(styles.pageSidebarMain)}>{children}</div>
55
+ </PageSidebarContext.Provider>
54
56
  </div>
55
57
  );
56
58
  }}
@@ -7,8 +7,12 @@ exports[`PageSidebar should match snapshot (auto-generated) 1`] = `
7
7
  class="pf-v6-c-page__sidebar ''"
8
8
  id="page-sidebar"
9
9
  >
10
- <div>
11
- ReactNode
10
+ <div
11
+ class="pf-v6-c-page__sidebar-main"
12
+ >
13
+ <div>
14
+ ReactNode
15
+ </div>
12
16
  </div>
13
17
  </div>
14
18
  </DocumentFragment>
@@ -406,4 +406,11 @@ describe('Page', () => {
406
406
  render(<Page data-testid="page"></Page>);
407
407
  expect(screen.getByTestId('page')).not.toHaveClass(styles.modifiers.dock);
408
408
  });
409
+
410
+ test(`Renders with ${styles.pageDockMain} wrapper when variant is docked`, () => {
411
+ render(<Page variant="docked" masthead={<>Masthead</>} data-testid="page"></Page>);
412
+
413
+ const pageDockMain = screen.getByText('Masthead').closest(`.${styles.pageDockMain}`);
414
+ expect(pageDockMain).toBeInTheDocument();
415
+ });
409
416
  });
@@ -2,92 +2,102 @@ import { render, screen } from '@testing-library/react';
2
2
  import { PageGroup } from '../PageGroup';
3
3
  import styles from '@patternfly/react-styles/css/components/Page/page';
4
4
 
5
- describe('page group', () => {
6
- test('Verify basic render', () => {
7
- const { asFragment } = render(<PageGroup>test</PageGroup>);
8
- expect(asFragment()).toMatchSnapshot();
9
- });
10
- test('Verify top sticky', () => {
11
- const { asFragment } = render(<PageGroup stickyOnBreakpoint={{ default: 'top' }}>test</PageGroup>);
12
- expect(asFragment()).toMatchSnapshot();
13
- });
14
- test('Verify bottom sticky', () => {
15
- const { asFragment } = render(<PageGroup stickyOnBreakpoint={{ default: 'bottom' }}>test</PageGroup>);
16
- expect(asFragment()).toMatchSnapshot();
17
- });
18
- test('Verify top shadow', () => {
19
- const { asFragment } = render(<PageGroup hasShadowTop>test</PageGroup>);
20
- expect(asFragment()).toMatchSnapshot();
21
- });
22
- test('Verify bottom shadow', () => {
23
- const { asFragment } = render(<PageGroup hasShadowBottom>test</PageGroup>);
24
- expect(asFragment()).toMatchSnapshot();
25
- });
26
- test('Verify overflow scroll', () => {
27
- const { asFragment } = render(<PageGroup hasOverflowScroll>test</PageGroup>);
28
- expect(asFragment()).toMatchSnapshot();
29
- });
30
-
31
- test('Renders without an aria-label by default', () => {
32
- render(<PageGroup>test</PageGroup>);
33
-
34
- expect(screen.getByText('test')).not.toHaveAccessibleName('Test label');
35
- });
36
-
37
- test('Renders with the passed aria-label applied', () => {
38
- render(
39
- <PageGroup aria-label="Test label" hasOverflowScroll>
40
- test
41
- </PageGroup>
42
- );
43
-
44
- expect(screen.getByText('test')).toHaveAccessibleName('Test label');
45
- });
46
-
47
- test('Does not log a warning in the console by default', () => {
48
- const consoleWarning = jest.spyOn(console, 'warn').mockImplementation();
49
-
50
- render(<PageGroup>test</PageGroup>);
51
-
52
- expect(consoleWarning).not.toHaveBeenCalled();
53
- });
54
-
55
- test('Does not log a warning in the console when an aria-label is included with hasOverflowScroll', () => {
56
- const consoleWarning = jest.spyOn(console, 'warn').mockImplementation();
57
-
58
- render(
59
- <PageGroup hasOverflowScroll aria-label="Test label">
60
- test
61
- </PageGroup>
62
- );
63
-
64
- expect(consoleWarning).not.toHaveBeenCalled();
65
- });
66
-
67
- test('Logs a warning in the console when an aria-label is not included with hasOverflowScroll', () => {
68
- const consoleWarning = jest.spyOn(console, 'warn').mockImplementation();
69
-
70
- render(<PageGroup hasOverflowScroll>test</PageGroup>);
71
-
72
- expect(consoleWarning).toHaveBeenCalled();
73
- });
74
-
75
- test(`Does not render with ${styles.modifiers.fill} or ${styles.modifiers.noFill} if isFilled is not passed`, () => {
76
- render(<PageGroup>test</PageGroup>);
77
-
78
- expect(screen.getByText('test')).not.toHaveClass(styles.modifiers.fill);
79
- expect(screen.getByText('test')).not.toHaveClass(styles.modifiers.noFill);
80
- });
81
-
82
- test(`Renders with ${styles.modifiers.fill} if isFilled={true} is passed`, () => {
83
- render(<PageGroup isFilled={true}>test</PageGroup>);
84
-
85
- expect(screen.getByText('test')).toHaveClass(styles.modifiers.fill);
86
- });
87
-
88
- test(`Renders with ${styles.modifiers.noFill} if isFilled={false} is passed`, () => {
89
- render(<PageGroup isFilled={false}>test</PageGroup>);
90
-
91
- expect(screen.getByText('test')).toHaveClass(styles.modifiers.noFill);
92
- });
5
+ test('Verify basic render', () => {
6
+ const { asFragment } = render(<PageGroup>test</PageGroup>);
7
+ expect(asFragment()).toMatchSnapshot();
8
+ });
9
+ test('Verify top sticky', () => {
10
+ const { asFragment } = render(<PageGroup stickyOnBreakpoint={{ default: 'top' }}>test</PageGroup>);
11
+ expect(asFragment()).toMatchSnapshot();
12
+ });
13
+ test('Verify bottom sticky', () => {
14
+ const { asFragment } = render(<PageGroup stickyOnBreakpoint={{ default: 'bottom' }}>test</PageGroup>);
15
+ expect(asFragment()).toMatchSnapshot();
16
+ });
17
+ test('Verify top shadow', () => {
18
+ const { asFragment } = render(<PageGroup hasShadowTop>test</PageGroup>);
19
+ expect(asFragment()).toMatchSnapshot();
20
+ });
21
+ test('Verify bottom shadow', () => {
22
+ const { asFragment } = render(<PageGroup hasShadowBottom>test</PageGroup>);
23
+ expect(asFragment()).toMatchSnapshot();
24
+ });
25
+ test('Verify overflow scroll', () => {
26
+ const { asFragment } = render(<PageGroup hasOverflowScroll>test</PageGroup>);
27
+ expect(asFragment()).toMatchSnapshot();
28
+ });
29
+
30
+ test('Renders without an aria-label by default', () => {
31
+ render(<PageGroup>test</PageGroup>);
32
+
33
+ expect(screen.getByText('test')).not.toHaveAccessibleName('Test label');
34
+ });
35
+
36
+ test('Renders with the passed aria-label applied', () => {
37
+ render(
38
+ <PageGroup aria-label="Test label" hasOverflowScroll>
39
+ test
40
+ </PageGroup>
41
+ );
42
+
43
+ expect(screen.getByText('test')).toHaveAccessibleName('Test label');
44
+ });
45
+
46
+ test('Does not log a warning in the console by default', () => {
47
+ const consoleWarning = jest.spyOn(console, 'warn').mockImplementation();
48
+
49
+ render(<PageGroup>test</PageGroup>);
50
+
51
+ expect(consoleWarning).not.toHaveBeenCalled();
52
+ });
53
+
54
+ test('Does not log a warning in the console when an aria-label is included with hasOverflowScroll', () => {
55
+ const consoleWarning = jest.spyOn(console, 'warn').mockImplementation();
56
+
57
+ render(
58
+ <PageGroup hasOverflowScroll aria-label="Test label">
59
+ test
60
+ </PageGroup>
61
+ );
62
+
63
+ expect(consoleWarning).not.toHaveBeenCalled();
64
+ });
65
+
66
+ test('Logs a warning in the console when an aria-label is not included with hasOverflowScroll', () => {
67
+ const consoleWarning = jest.spyOn(console, 'warn').mockImplementation();
68
+
69
+ render(<PageGroup hasOverflowScroll>test</PageGroup>);
70
+
71
+ expect(consoleWarning).toHaveBeenCalled();
72
+ });
73
+
74
+ test(`Does not render with ${styles.modifiers.fill} or ${styles.modifiers.noFill} if isFilled is not passed`, () => {
75
+ render(<PageGroup>test</PageGroup>);
76
+
77
+ expect(screen.getByText('test')).not.toHaveClass(styles.modifiers.fill);
78
+ expect(screen.getByText('test')).not.toHaveClass(styles.modifiers.noFill);
79
+ });
80
+
81
+ test(`Renders with ${styles.modifiers.fill} if isFilled={true} is passed`, () => {
82
+ render(<PageGroup isFilled={true}>test</PageGroup>);
83
+
84
+ expect(screen.getByText('test')).toHaveClass(styles.modifiers.fill);
85
+ });
86
+
87
+ test(`Renders with ${styles.modifiers.noFill} if isFilled={false} is passed`, () => {
88
+ render(<PageGroup isFilled={false}>test</PageGroup>);
89
+
90
+ expect(screen.getByText('test')).toHaveClass(styles.modifiers.noFill);
91
+ });
92
+
93
+ test(`Renders with ${styles.modifiers.plain} class when isPlain is true`, () => {
94
+ render(<PageGroup isPlain>test</PageGroup>);
95
+
96
+ expect(screen.getByText('test')).toHaveClass(styles.modifiers.plain);
97
+ });
98
+
99
+ test(`Renders with ${styles.modifiers.noPlainOnGlass} class when isNoPlainOnGlass is true`, () => {
100
+ render(<PageGroup isNoPlainOnGlass>test</PageGroup>);
101
+
102
+ expect(screen.getByText('test')).toHaveClass(styles.modifiers.noPlainOnGlass);
93
103
  });
@@ -179,3 +179,23 @@ test(`Renders with ${styles.modifiers.noFill} if isFilled={false} is passed`, ()
179
179
 
180
180
  expect(screen.getByRole('main')).toHaveClass(styles.modifiers.noFill);
181
181
  });
182
+
183
+ test(`Renders with ${styles.modifiers.plain} class when isPlain is true`, () => {
184
+ render(
185
+ <PageSection hasBodyWrapper={false} isPlain>
186
+ test
187
+ </PageSection>
188
+ );
189
+
190
+ expect(screen.getByText('test')).toHaveClass(styles.modifiers.plain);
191
+ });
192
+
193
+ test(`Renders with ${styles.modifiers.noPlainOnGlass} class when isNoPlainOnGlass is true`, () => {
194
+ render(
195
+ <PageSection hasBodyWrapper={false} isNoPlainOnGlass>
196
+ test
197
+ </PageSection>
198
+ );
199
+
200
+ expect(screen.getByText('test')).toHaveClass(styles.modifiers.noPlainOnGlass);
201
+ });
@@ -0,0 +1,9 @@
1
+ import { render, screen } from '@testing-library/react';
2
+ import { PageSidebar } from '../PageSidebar';
3
+ import styles from '@patternfly/react-styles/css/components/Page/page';
4
+
5
+ test(`Renders with ${styles.pageSidebarMain} wrapper`, () => {
6
+ render(<PageSidebar data-testid="sidebar">Test</PageSidebar>);
7
+
8
+ expect(screen.getByText('Test')).toHaveClass(styles.pageSidebarMain);
9
+ });
@@ -16,9 +16,13 @@ exports[`Page Check dark page against snapshot 1`] = `
16
16
  id="page-sidebar"
17
17
  >
18
18
  <div
19
- class="pf-v6-c-page__sidebar-body"
19
+ class="pf-v6-c-page__sidebar-main"
20
20
  >
21
- Navigation
21
+ <div
22
+ class="pf-v6-c-page__sidebar-body"
23
+ >
24
+ Navigation
25
+ </div>
22
26
  </div>
23
27
  </div>
24
28
  <div
@@ -57,7 +61,11 @@ exports[`Page Check page horizontal layout example against snapshot 1`] = `
57
61
  aria-hidden="false"
58
62
  class="pf-v6-c-page__sidebar"
59
63
  id="page-sidebar"
60
- />
64
+ >
65
+ <div
66
+ class="pf-v6-c-page__sidebar-main"
67
+ />
68
+ </div>
61
69
  <div
62
70
  class="pf-v6-c-page__main-container"
63
71
  >
@@ -94,7 +102,11 @@ exports[`Page Check page to verify breadcrumb is created - PageBreadcrumb syntax
94
102
  aria-hidden="false"
95
103
  class="pf-v6-c-page__sidebar"
96
104
  id="page-sidebar"
97
- />
105
+ >
106
+ <div
107
+ class="pf-v6-c-page__sidebar-main"
108
+ />
109
+ </div>
98
110
  <div
99
111
  class="pf-v6-c-page__main-container"
100
112
  >
@@ -239,7 +251,11 @@ exports[`Page Check page to verify breadcrumb is created 1`] = `
239
251
  aria-hidden="false"
240
252
  class="pf-v6-c-page__sidebar"
241
253
  id="page-sidebar"
242
- />
254
+ >
255
+ <div
256
+ class="pf-v6-c-page__sidebar-main"
257
+ />
258
+ </div>
243
259
  <div
244
260
  class="pf-v6-c-page__main-container"
245
261
  >
@@ -388,7 +404,11 @@ exports[`Page Check page to verify grouped nav and breadcrumb - new components s
388
404
  aria-hidden="false"
389
405
  class="pf-v6-c-page__sidebar"
390
406
  id="page-sidebar"
391
- />
407
+ >
408
+ <div
409
+ class="pf-v6-c-page__sidebar-main"
410
+ />
411
+ </div>
392
412
  <div
393
413
  class="pf-v6-c-page__main-container"
394
414
  >
@@ -631,7 +651,11 @@ exports[`Page Check page to verify grouped nav and breadcrumb - old / props synt
631
651
  aria-hidden="false"
632
652
  class="pf-v6-c-page__sidebar"
633
653
  id="page-sidebar"
634
- />
654
+ >
655
+ <div
656
+ class="pf-v6-c-page__sidebar-main"
657
+ />
658
+ </div>
635
659
  <div
636
660
  class="pf-v6-c-page__main-container"
637
661
  >
@@ -915,7 +939,11 @@ exports[`Page Check page to verify skip to content points to main content region
915
939
  aria-hidden="false"
916
940
  class="pf-v6-c-page__sidebar"
917
941
  id="page-sidebar"
918
- />
942
+ >
943
+ <div
944
+ class="pf-v6-c-page__sidebar-main"
945
+ />
946
+ </div>
919
947
  <div
920
948
  class="pf-v6-c-page__main-container"
921
949
  >
@@ -1067,9 +1095,13 @@ exports[`Page Check page vertical layout example against snapshot 1`] = `
1067
1095
  id="page-sidebar"
1068
1096
  >
1069
1097
  <div
1070
- class="pf-v6-c-page__sidebar-body"
1098
+ class="pf-v6-c-page__sidebar-main"
1071
1099
  >
1072
- Navigation
1100
+ <div
1101
+ class="pf-v6-c-page__sidebar-body"
1102
+ >
1103
+ Navigation
1104
+ </div>
1073
1105
  </div>
1074
1106
  </div>
1075
1107
  <div
@@ -1108,7 +1140,11 @@ exports[`Page Sticky bottom breadcrumb on all height breakpoints - PageBreadcrum
1108
1140
  aria-hidden="false"
1109
1141
  class="pf-v6-c-page__sidebar"
1110
1142
  id="page-sidebar"
1111
- />
1143
+ >
1144
+ <div
1145
+ class="pf-v6-c-page__sidebar-main"
1146
+ />
1147
+ </div>
1112
1148
  <div
1113
1149
  class="pf-v6-c-page__main-container"
1114
1150
  >
@@ -1253,7 +1289,11 @@ exports[`Page Verify sticky bottom breadcrumb on all height breakpoints 1`] = `
1253
1289
  aria-hidden="false"
1254
1290
  class="pf-v6-c-page__sidebar"
1255
1291
  id="page-sidebar"
1256
- />
1292
+ >
1293
+ <div
1294
+ class="pf-v6-c-page__sidebar-main"
1295
+ />
1296
+ </div>
1257
1297
  <div
1258
1298
  class="pf-v6-c-page__main-container"
1259
1299
  >
@@ -1402,7 +1442,11 @@ exports[`Page Verify sticky top breadcrumb on all height breakpoints - PageBread
1402
1442
  aria-hidden="false"
1403
1443
  class="pf-v6-c-page__sidebar"
1404
1444
  id="page-sidebar"
1405
- />
1445
+ >
1446
+ <div
1447
+ class="pf-v6-c-page__sidebar-main"
1448
+ />
1449
+ </div>
1406
1450
  <div
1407
1451
  class="pf-v6-c-page__main-container"
1408
1452
  >
@@ -1547,7 +1591,11 @@ exports[`Page Verify sticky top breadcrumb on all height breakpoints 1`] = `
1547
1591
  aria-hidden="false"
1548
1592
  class="pf-v6-c-page__sidebar"
1549
1593
  id="page-sidebar"
1550
- />
1594
+ >
1595
+ <div
1596
+ class="pf-v6-c-page__sidebar-main"
1597
+ />
1598
+ </div>
1551
1599
  <div
1552
1600
  class="pf-v6-c-page__main-container"
1553
1601
  >
@@ -1,6 +1,6 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`page group Verify basic render 1`] = `
3
+ exports[`Verify basic render 1`] = `
4
4
  <DocumentFragment>
5
5
  <div
6
6
  class="pf-v6-c-page__main-group"
@@ -10,7 +10,7 @@ exports[`page group Verify basic render 1`] = `
10
10
  </DocumentFragment>
11
11
  `;
12
12
 
13
- exports[`page group Verify bottom shadow 1`] = `
13
+ exports[`Verify bottom shadow 1`] = `
14
14
  <DocumentFragment>
15
15
  <div
16
16
  class="pf-v6-c-page__main-group pf-m-shadow-bottom"
@@ -20,7 +20,7 @@ exports[`page group Verify bottom shadow 1`] = `
20
20
  </DocumentFragment>
21
21
  `;
22
22
 
23
- exports[`page group Verify bottom sticky 1`] = `
23
+ exports[`Verify bottom sticky 1`] = `
24
24
  <DocumentFragment>
25
25
  <div
26
26
  class="pf-v6-c-page__main-group pf-m-sticky-bottom"
@@ -30,7 +30,7 @@ exports[`page group Verify bottom sticky 1`] = `
30
30
  </DocumentFragment>
31
31
  `;
32
32
 
33
- exports[`page group Verify overflow scroll 1`] = `
33
+ exports[`Verify overflow scroll 1`] = `
34
34
  <DocumentFragment>
35
35
  <div
36
36
  class="pf-v6-c-page__main-group pf-m-overflow-scroll"
@@ -42,7 +42,7 @@ exports[`page group Verify overflow scroll 1`] = `
42
42
  </DocumentFragment>
43
43
  `;
44
44
 
45
- exports[`page group Verify top shadow 1`] = `
45
+ exports[`Verify top shadow 1`] = `
46
46
  <DocumentFragment>
47
47
  <div
48
48
  class="pf-v6-c-page__main-group pf-m-shadow-top"
@@ -52,7 +52,7 @@ exports[`page group Verify top shadow 1`] = `
52
52
  </DocumentFragment>
53
53
  `;
54
54
 
55
- exports[`page group Verify top sticky 1`] = `
55
+ exports[`Verify top sticky 1`] = `
56
56
  <DocumentFragment>
57
57
  <div
58
58
  class="pf-v6-c-page__main-group pf-m-sticky-top"
@@ -20,7 +20,7 @@ A page will typically contain the following components:
20
20
 
21
21
  The `<MastheadMain>` component includes the smaller area that typically contains the `<MastheadToggle>` and a `<MastheadLogo>`. `<MastheadContent>` represents the main portion of the masthead, and will typically contain a `<Toolbar>` or other menu-like components, like a `<Dropdown>`.
22
22
 
23
- - Mastheads contain a `<MastheadMain>` component, which includes the `<MastheadToggle>`, a `<MastheadLogo>`, and the page's toolbar (via `<MastheadContent>`.) The `<MastheadToggle>` component contains a `<PageToggleButton>`, and the `<MastheadLogo>` component contains a `<MastheadBrand>`.
23
+ - Mastheads contain a `<MastheadMain>` component, which includes the `<MastheadToggle>`, a `<MastheadLogo>`, and the page's toolbar (via `<MastheadContent>`.) The `<MastheadToggle>` component contains a `<PageToggleButton>`, and the `<MastheadLogo>` component contains a `<MastheadBrand>`.
24
24
  - 1 or more `<PageSidebarBody>` components inside `<PageSidebar>` for vertical navigation or other sidebar content
25
25
  - 1 or more `<PageSection>` components
26
26
 
@@ -123,3 +123,11 @@ The content in this example is placed in a card to better illustrate how the sec
123
123
  ```ts file="./PageCenteredSection.tsx"
124
124
 
125
125
  ```
126
+
127
+ ### Plain sections and groups
128
+
129
+ To remove the default background color from a page section or group, use the `isPlain` property on `<PageSection>` or `<PageGroup>` components.
130
+
131
+ ```ts file="./PagePlainSections.tsx"
132
+
133
+ ```