@patternfly/react-core 6.0.0-alpha.8 → 6.0.0-alpha.9

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 (175) 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/Chip/package.json +1 -1
  21. package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
  22. package/dist/dynamic/components/CodeBlock/package.json +1 -1
  23. package/dist/dynamic/components/DataList/package.json +1 -1
  24. package/dist/dynamic/components/DatePicker/package.json +1 -1
  25. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  26. package/dist/dynamic/components/Divider/package.json +1 -1
  27. package/dist/dynamic/components/DragDrop/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/Hint/package.json +1 -1
  38. package/dist/dynamic/components/Icon/package.json +1 -1
  39. package/dist/dynamic/components/InputGroup/package.json +1 -1
  40. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  41. package/dist/dynamic/components/Label/package.json +1 -1
  42. package/dist/dynamic/components/List/package.json +1 -1
  43. package/dist/dynamic/components/LoginPage/package.json +1 -1
  44. package/dist/dynamic/components/Masthead/package.json +1 -1
  45. package/dist/dynamic/components/Menu/package.json +1 -1
  46. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  47. package/dist/dynamic/components/Modal/package.json +1 -1
  48. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  49. package/dist/dynamic/components/Nav/package.json +1 -1
  50. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  51. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  52. package/dist/dynamic/components/NumberInput/package.json +1 -1
  53. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  54. package/dist/dynamic/components/Page/package.json +1 -1
  55. package/dist/dynamic/components/Pagination/package.json +1 -1
  56. package/dist/dynamic/components/Panel/package.json +1 -1
  57. package/dist/dynamic/components/Popover/package.json +1 -1
  58. package/dist/dynamic/components/Progress/package.json +1 -1
  59. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  60. package/dist/dynamic/components/Radio/package.json +1 -1
  61. package/dist/dynamic/components/SearchInput/package.json +1 -1
  62. package/dist/dynamic/components/Select/package.json +1 -1
  63. package/dist/dynamic/components/Sidebar/package.json +1 -1
  64. package/dist/dynamic/components/SimpleList/package.json +1 -1
  65. package/dist/dynamic/components/Skeleton/package.json +1 -1
  66. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  67. package/dist/dynamic/components/Slider/package.json +1 -1
  68. package/dist/dynamic/components/Spinner/package.json +1 -1
  69. package/dist/dynamic/components/Switch/package.json +1 -1
  70. package/dist/dynamic/components/Tabs/package.json +1 -1
  71. package/dist/dynamic/components/Text/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/Tile/package.json +1 -1
  76. package/dist/dynamic/components/TimePicker/package.json +1 -1
  77. package/dist/dynamic/components/Timestamp/package.json +1 -1
  78. package/dist/dynamic/components/Title/package.json +1 -1
  79. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  80. package/dist/dynamic/components/Toolbar/package.json +1 -1
  81. package/dist/dynamic/components/Tooltip/package.json +1 -1
  82. package/dist/dynamic/components/TreeView/package.json +1 -1
  83. package/dist/dynamic/components/Truncate/package.json +1 -1
  84. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  85. package/dist/dynamic/components/Wizard/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/ApplicationLauncher/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/ContextSelector/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Dropdown/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/OptionsMenu/package.json +1 -1
  90. package/dist/dynamic/deprecated/components/PageHeader/package.json +1 -1
  91. package/dist/dynamic/deprecated/components/Select/package.json +1 -1
  92. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  93. package/dist/dynamic/deprecated/components/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/constants/package.json +1 -1
  100. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  101. package/dist/dynamic/helpers/favorites/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/useUnmountEffect/package.json +1 -1
  110. package/dist/dynamic/helpers/util/package.json +1 -1
  111. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  112. package/dist/dynamic/layouts/Flex/package.json +1 -1
  113. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  114. package/dist/dynamic/layouts/Grid/package.json +1 -1
  115. package/dist/dynamic/layouts/Level/package.json +1 -1
  116. package/dist/dynamic/layouts/Split/package.json +1 -1
  117. package/dist/dynamic/layouts/Stack/package.json +1 -1
  118. package/dist/dynamic/next/components/package.json +1 -1
  119. package/dist/esm/components/Accordion/AccordionContent.d.ts +0 -2
  120. package/dist/esm/components/Accordion/AccordionContent.d.ts.map +1 -1
  121. package/dist/esm/components/Accordion/AccordionContent.js +6 -5
  122. package/dist/esm/components/Accordion/AccordionContent.js.map +1 -1
  123. package/dist/esm/components/Accordion/AccordionContext.d.ts +4 -0
  124. package/dist/esm/components/Accordion/AccordionContext.d.ts.map +1 -1
  125. package/dist/esm/components/Accordion/AccordionContext.js +1 -0
  126. package/dist/esm/components/Accordion/AccordionContext.js.map +1 -1
  127. package/dist/esm/components/Accordion/AccordionItem.d.ts +5 -1
  128. package/dist/esm/components/Accordion/AccordionItem.d.ts.map +1 -1
  129. package/dist/esm/components/Accordion/AccordionItem.js +7 -1
  130. package/dist/esm/components/Accordion/AccordionItem.js.map +1 -1
  131. package/dist/esm/components/Accordion/AccordionToggle.d.ts +0 -2
  132. package/dist/esm/components/Accordion/AccordionToggle.d.ts.map +1 -1
  133. package/dist/esm/components/Accordion/AccordionToggle.js +4 -3
  134. package/dist/esm/components/Accordion/AccordionToggle.js.map +1 -1
  135. package/dist/js/components/Accordion/AccordionContent.d.ts +0 -2
  136. package/dist/js/components/Accordion/AccordionContent.d.ts.map +1 -1
  137. package/dist/js/components/Accordion/AccordionContent.js +5 -4
  138. package/dist/js/components/Accordion/AccordionContent.js.map +1 -1
  139. package/dist/js/components/Accordion/AccordionContext.d.ts +4 -0
  140. package/dist/js/components/Accordion/AccordionContext.d.ts.map +1 -1
  141. package/dist/js/components/Accordion/AccordionContext.js +2 -1
  142. package/dist/js/components/Accordion/AccordionContext.js.map +1 -1
  143. package/dist/js/components/Accordion/AccordionItem.d.ts +5 -1
  144. package/dist/js/components/Accordion/AccordionItem.d.ts.map +1 -1
  145. package/dist/js/components/Accordion/AccordionItem.js +7 -1
  146. package/dist/js/components/Accordion/AccordionItem.js.map +1 -1
  147. package/dist/js/components/Accordion/AccordionToggle.d.ts +0 -2
  148. package/dist/js/components/Accordion/AccordionToggle.d.ts.map +1 -1
  149. package/dist/js/components/Accordion/AccordionToggle.js +3 -2
  150. package/dist/js/components/Accordion/AccordionToggle.js.map +1 -1
  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 +2 -2
  156. package/src/components/Accordion/AccordionContent.tsx +6 -13
  157. package/src/components/Accordion/AccordionContext.ts +5 -0
  158. package/src/components/Accordion/AccordionItem.tsx +20 -3
  159. package/src/components/Accordion/AccordionToggle.tsx +29 -27
  160. package/src/components/Accordion/__tests__/AccordionContent.test.tsx +60 -32
  161. package/src/components/Accordion/__tests__/AccordionItem.test.tsx +19 -1
  162. package/src/components/Accordion/__tests__/AccordionToggle.test.tsx +12 -10
  163. package/src/components/Accordion/__tests__/__snapshots__/AccordionContent.test.tsx.snap +1 -1
  164. package/src/components/Accordion/__tests__/__snapshots__/AccordionItem.test.tsx.snap +5 -1
  165. package/src/components/Accordion/examples/AccordionBordered.tsx +10 -15
  166. package/src/components/Accordion/examples/AccordionDefinitionList.tsx +10 -15
  167. package/src/components/Accordion/examples/AccordionFixedWithMultipleExpandBehavior.tsx +15 -40
  168. package/src/components/Accordion/examples/AccordionSingleExpandBehavior.tsx +10 -15
  169. package/src/demos/examples/Card/CardWithAccordion.tsx +6 -9
  170. package/src/components/Accordion/__tests__/Generated/AccordionContent.test.tsx +0 -23
  171. package/src/components/Accordion/__tests__/Generated/AccordionItem.test.tsx +0 -13
  172. package/src/components/Accordion/__tests__/Generated/AccordionToggle.test.tsx +0 -21
  173. package/src/components/Accordion/__tests__/Generated/__snapshots__/AccordionContent.test.tsx.snap +0 -7
  174. package/src/components/Accordion/__tests__/Generated/__snapshots__/AccordionItem.test.tsx.snap +0 -7
  175. package/src/components/Accordion/__tests__/Generated/__snapshots__/AccordionToggle.test.tsx.snap +0 -7
@@ -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.0.0-alpha.7","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.0.0-alpha.8","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.0.0-alpha.7","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.0.0-alpha.8","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.0.0-alpha.7","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.0.0-alpha.8","private":true}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/react-core",
3
- "version": "6.0.0-alpha.8",
3
+ "version": "6.0.0-alpha.9",
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",
@@ -72,5 +72,5 @@
72
72
  "react": "^17 || ^18",
73
73
  "react-dom": "^17 || ^18"
74
74
  },
75
- "gitHead": "5aae45c06fbd78c00fc09de587cb833b9a7d077d"
75
+ "gitHead": "59c15d424bc97363eee2fc8437ea3d39d00dda66"
76
76
  }
@@ -1,7 +1,7 @@
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/Accordion/accordion';
4
- import { AccordionContext } from './AccordionContext';
4
+ import { AccordionContext, AccordionItemContext } from './AccordionContext';
5
5
  import { AccordionExpandableContentBody } from './AccordionExpandableContentBody';
6
6
 
7
7
  export interface AccordionContentProps extends React.HTMLProps<HTMLDivElement> {
@@ -11,8 +11,6 @@ export interface AccordionContentProps extends React.HTMLProps<HTMLDivElement> {
11
11
  className?: string;
12
12
  /** Identify the AccordionContent item */
13
13
  id?: string;
14
- /** Flag to show if the expanded content of the Accordion item is visible */
15
- isHidden?: boolean;
16
14
  /** Flag to indicate Accordion content is fixed */
17
15
  isFixed?: boolean;
18
16
  /** Adds accessible text to the Accordion content */
@@ -29,7 +27,6 @@ export const AccordionContent: React.FunctionComponent<AccordionContentProps> =
29
27
  className = '',
30
28
  children = null,
31
29
  id = '',
32
- isHidden = false,
33
30
  isFixed = false,
34
31
  isCustomContent = false,
35
32
  'aria-label': ariaLabel = '',
@@ -39,16 +36,17 @@ export const AccordionContent: React.FunctionComponent<AccordionContentProps> =
39
36
  }: AccordionContentProps) => {
40
37
  const [hasScrollbar, setHasScrollbar] = React.useState(false);
41
38
  const containerRef = React.useRef(null);
39
+ const { isExpanded } = React.useContext(AccordionItemContext);
42
40
 
43
41
  React.useEffect(() => {
44
- if (containerRef?.current && isFixed && !isHidden) {
42
+ if (containerRef?.current && isFixed && isExpanded) {
45
43
  const { offsetHeight, scrollHeight } = containerRef.current;
46
44
 
47
45
  setHasScrollbar(offsetHeight < scrollHeight);
48
46
  } else if (!isFixed) {
49
47
  setHasScrollbar(false);
50
48
  }
51
- }, [containerRef, isFixed, isHidden]);
49
+ }, [containerRef, isFixed, isExpanded]);
52
50
 
53
51
  return (
54
52
  <AccordionContext.Consumer>
@@ -58,13 +56,8 @@ export const AccordionContent: React.FunctionComponent<AccordionContentProps> =
58
56
  <Container
59
57
  ref={containerRef}
60
58
  id={id}
61
- className={css(
62
- styles.accordionExpandableContent,
63
- isFixed && styles.modifiers.fixed,
64
- !isHidden && styles.modifiers.expanded,
65
- className
66
- )}
67
- hidden={isHidden}
59
+ className={css(styles.accordionExpandableContent, isFixed && styles.modifiers.fixed, className)}
60
+ hidden={!isExpanded}
68
61
  {...(ariaLabel && { 'aria-label': ariaLabel })}
69
62
  {...(ariaLabelledby && { 'aria-labelledby': ariaLabelledby })}
70
63
  {...(hasScrollbar && { tabIndex: 0 })}
@@ -5,4 +5,9 @@ interface AccordionContextProps {
5
5
  ToggleContainer: React.ElementType;
6
6
  }
7
7
 
8
+ interface AccordionItemContextProps {
9
+ isExpanded?: boolean;
10
+ }
11
+
8
12
  export const AccordionContext = React.createContext<Partial<AccordionContextProps>>({});
13
+ export const AccordionItemContext = React.createContext({} as AccordionItemContextProps);
@@ -1,11 +1,28 @@
1
1
  import * as React from 'react';
2
+ import { css } from '@patternfly/react-styles';
3
+ import styles from '@patternfly/react-styles/css/components/Accordion/accordion';
4
+ import { AccordionItemContext } from './AccordionContext';
2
5
 
3
6
  export interface AccordionItemProps {
4
- /** Content rendered inside the Accordion item */
7
+ /** Content rendered inside the accordion item. */
5
8
  children?: React.ReactNode;
9
+ /** Additional classes added to the accordion item. */
10
+ className?: string;
11
+ /** Flag to indicate whether the accordion item is expanded. */
12
+ isExpanded?: boolean;
6
13
  }
7
14
 
8
- export const AccordionItem: React.FunctionComponent<AccordionItemProps> = ({ children = null }: AccordionItemProps) => (
9
- <React.Fragment>{children}</React.Fragment>
15
+ export const AccordionItem: React.FunctionComponent<AccordionItemProps> = ({
16
+ children = null,
17
+ className,
18
+ isExpanded: isExpandedProp = false
19
+ }: AccordionItemProps) => (
20
+ <AccordionItemContext.Provider
21
+ value={{
22
+ isExpanded: isExpandedProp
23
+ }}
24
+ >
25
+ <div className={css(styles.accordionItem, isExpandedProp && styles.modifiers.expanded, className)}>{children}</div>
26
+ </AccordionItemContext.Provider>
10
27
  );
11
28
  AccordionItem.displayName = 'AccordionItem';
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { css } from '@patternfly/react-styles';
3
3
  import styles from '@patternfly/react-styles/css/components/Accordion/accordion';
4
4
  import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-icon';
5
- import { AccordionContext } from './AccordionContext';
5
+ import { AccordionContext, AccordionItemContext } from './AccordionContext';
6
6
 
7
7
  export interface AccordionToggleProps
8
8
  extends React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement> {
@@ -10,8 +10,6 @@ export interface AccordionToggleProps
10
10
  children?: React.ReactNode;
11
11
  /** Additional classes added to the Accordion Toggle */
12
12
  className?: string;
13
- /** Flag to show if the expanded content of the Accordion item is visible */
14
- isExpanded?: boolean;
15
13
  /** Identify the Accordion toggle number */
16
14
  id: string;
17
15
  /** Container to override the default for toggle */
@@ -21,31 +19,35 @@ export interface AccordionToggleProps
21
19
  export const AccordionToggle: React.FunctionComponent<AccordionToggleProps> = ({
22
20
  className = '',
23
21
  id,
24
- isExpanded = false,
25
22
  children = null,
26
23
  component,
27
24
  ...props
28
- }: AccordionToggleProps) => (
29
- <AccordionContext.Consumer>
30
- {({ ToggleContainer }) => {
31
- const Container = component || ToggleContainer;
32
- return (
33
- <Container>
34
- <button
35
- id={id}
36
- className={css(styles.accordionToggle, isExpanded && styles.modifiers.expanded, className)}
37
- aria-expanded={isExpanded}
38
- type="button"
39
- {...props}
40
- >
41
- <span className={css(styles.accordionToggleText)}>{children}</span>
42
- <span className={css(styles.accordionToggleIcon)}>
43
- <AngleRightIcon />
44
- </span>
45
- </button>
46
- </Container>
47
- );
48
- }}
49
- </AccordionContext.Consumer>
50
- );
25
+ }: AccordionToggleProps) => {
26
+ const { isExpanded } = React.useContext(AccordionItemContext);
27
+
28
+ return (
29
+ <AccordionContext.Consumer>
30
+ {({ ToggleContainer }) => {
31
+ const Container = component || ToggleContainer;
32
+
33
+ return (
34
+ <Container>
35
+ <button
36
+ id={id}
37
+ className={css(styles.accordionToggle, className)}
38
+ aria-expanded={isExpanded}
39
+ type="button"
40
+ {...props}
41
+ >
42
+ <span className={css(styles.accordionToggleText)}>{children}</span>
43
+ <span className={css(styles.accordionToggleIcon)}>
44
+ <AngleRightIcon />
45
+ </span>
46
+ </button>
47
+ </Container>
48
+ );
49
+ }}
50
+ </AccordionContext.Consumer>
51
+ );
52
+ };
51
53
  AccordionToggle.displayName = 'AccordionToggle';
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import { render, screen } from '@testing-library/react';
4
4
 
5
5
  import { AccordionContent } from '../AccordionContent';
6
- import { AccordionContext } from '../AccordionContext';
6
+ import { AccordionContext, AccordionItemContext } from '../AccordionContext';
7
7
  import styles from '@patternfly/react-styles/css/components/Accordion/accordion';
8
8
 
9
9
  jest.mock('../AccordionExpandableContentBody', () => ({
@@ -13,7 +13,9 @@ jest.mock('../AccordionExpandableContentBody', () => ({
13
13
  test('Renders without children', () => {
14
14
  render(
15
15
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
16
- <AccordionContent data-testid="accordion-content" />
16
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
17
+ <AccordionContent data-testid="accordion-content" />
18
+ </AccordionItemContext.Provider>
17
19
  </AccordionContext.Provider>
18
20
  );
19
21
 
@@ -23,7 +25,9 @@ test('Renders without children', () => {
23
25
  test('Renders children', () => {
24
26
  render(
25
27
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
26
- <AccordionContent>Test</AccordionContent>
28
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
29
+ <AccordionContent>Test</AccordionContent>
30
+ </AccordionItemContext.Provider>
27
31
  </AccordionContext.Provider>
28
32
  );
29
33
 
@@ -33,7 +37,9 @@ test('Renders children', () => {
33
37
  test('Renders with children wrapped in AccordionExpandableContentBody by default', () => {
34
38
  render(
35
39
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
36
- <AccordionContent>Test</AccordionContent>
40
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
41
+ <AccordionContent>Test</AccordionContent>
42
+ </AccordionItemContext.Provider>
37
43
  </AccordionContext.Provider>
38
44
  );
39
45
 
@@ -43,7 +49,9 @@ test('Renders with children wrapped in AccordionExpandableContentBody by default
43
49
  test('Does not render children wrapped in AccordionExpandableContentBody when isCustomContent=true', () => {
44
50
  render(
45
51
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
46
- <AccordionContent isCustomContent>Test</AccordionContent>
52
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
53
+ <AccordionContent isCustomContent>Test</AccordionContent>
54
+ </AccordionItemContext.Provider>
47
55
  </AccordionContext.Provider>
48
56
  );
49
57
 
@@ -53,7 +61,9 @@ test('Does not render children wrapped in AccordionExpandableContentBody when is
53
61
  test('Renders with the passed aria label', () => {
54
62
  render(
55
63
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
56
- <AccordionContent aria-label="Accordion content">Test</AccordionContent>
64
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
65
+ <AccordionContent aria-label="Accordion content">Test</AccordionContent>
66
+ </AccordionItemContext.Provider>
57
67
  </AccordionContext.Provider>
58
68
  );
59
69
 
@@ -65,7 +75,9 @@ test('Renders with the passed aria-labelledby', () => {
65
75
  <>
66
76
  <div id="accordion-label1">Accordion content</div>
67
77
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
68
- <AccordionContent aria-labelledby="accordion-label1">Test</AccordionContent>
78
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
79
+ <AccordionContent aria-labelledby="accordion-label1">Test</AccordionContent>
80
+ </AccordionItemContext.Provider>
69
81
  </AccordionContext.Provider>
70
82
  </>
71
83
  );
@@ -77,7 +89,9 @@ test('Renders with inherited element props spread to the component', () => {
77
89
  render(
78
90
  <>
79
91
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
80
- <AccordionContent aria-labelledby="labelling-id">Test</AccordionContent>
92
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
93
+ <AccordionContent aria-labelledby="labelling-id">Test</AccordionContent>
94
+ </AccordionItemContext.Provider>
81
95
  <p id="labelling-id">Label</p>
82
96
  </AccordionContext.Provider>
83
97
  </>
@@ -89,7 +103,9 @@ test('Renders with inherited element props spread to the component', () => {
89
103
  test(`Renders with class name ${styles.accordionExpandableContent}`, () => {
90
104
  render(
91
105
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
92
- <AccordionContent>Test</AccordionContent>
106
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
107
+ <AccordionContent>Test</AccordionContent>
108
+ </AccordionItemContext.Provider>
93
109
  </AccordionContext.Provider>
94
110
  );
95
111
 
@@ -99,7 +115,9 @@ test(`Renders with class name ${styles.accordionExpandableContent}`, () => {
99
115
  test('Renders with custom class names provided via prop', () => {
100
116
  render(
101
117
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
102
- <AccordionContent className="test-class">Test</AccordionContent>
118
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
119
+ <AccordionContent className="test-class">Test</AccordionContent>
120
+ </AccordionItemContext.Provider>
103
121
  </AccordionContext.Provider>
104
122
  );
105
123
 
@@ -109,7 +127,9 @@ test('Renders with custom class names provided via prop', () => {
109
127
  test('Renders with the id prop passed to the container', () => {
110
128
  render(
111
129
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
112
- <AccordionContent id="test-id">Test</AccordionContent>
130
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
131
+ <AccordionContent id="test-id">Test</AccordionContent>
132
+ </AccordionItemContext.Provider>
113
133
  </AccordionContext.Provider>
114
134
  );
115
135
 
@@ -119,7 +139,9 @@ test('Renders with the id prop passed to the container', () => {
119
139
  test('Renders the container as the element provided in ContentContainer from a context by default', () => {
120
140
  render(
121
141
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
122
- <AccordionContent>Test</AccordionContent>
142
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
143
+ <AccordionContent>Test</AccordionContent>
144
+ </AccordionItemContext.Provider>
123
145
  </AccordionContext.Provider>
124
146
  );
125
147
 
@@ -130,7 +152,9 @@ test('Renders the container as the element provided in ContentContainer from a c
130
152
  test('Renders as the element provided via the component prop when one is provided', () => {
131
153
  render(
132
154
  <AccordionContext.Provider value={{ ContentContainer: 'button' }}>
133
- <AccordionContent component="h1">Test</AccordionContent>
155
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
156
+ <AccordionContent component="h1">Test</AccordionContent>
157
+ </AccordionItemContext.Provider>
134
158
  </AccordionContext.Provider>
135
159
  );
136
160
 
@@ -138,56 +162,60 @@ test('Renders as the element provided via the component prop when one is provide
138
162
  expect(screen.getByRole('heading', { level: 1 })).toBeVisible();
139
163
  });
140
164
 
141
- test('Renders without pf-m-fixed by default', () => {
165
+ test('Renders the container as hidden when isExpanded from context is false', () => {
142
166
  render(
143
167
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
144
- <AccordionContent>Test</AccordionContent>
168
+ <AccordionItemContext.Provider value={{ isExpanded: false }}>
169
+ <AccordionContent>Test</AccordionContent>
170
+ </AccordionItemContext.Provider>
145
171
  </AccordionContext.Provider>
146
172
  );
147
173
 
148
- expect(screen.getByRole('heading')).not.toHaveClass('pf-m-fixed');
174
+ expect(screen.getByRole('heading', { hidden: true })).toHaveAttribute('hidden');
149
175
  });
150
176
 
151
- test('Renders with pf-m-fixed when isFixed is true', () => {
177
+ test('Renders the container as not hidden when isExpanded from context is true', () => {
152
178
  render(
153
179
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
154
- <AccordionContent isFixed>Test</AccordionContent>
180
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
181
+ <AccordionContent>Test</AccordionContent>
182
+ </AccordionItemContext.Provider>
155
183
  </AccordionContext.Provider>
156
184
  );
157
185
 
158
- expect(screen.getByRole('heading')).toHaveClass('pf-m-fixed');
186
+ expect(screen.getByRole('heading', { level: 3 })).not.toHaveAttribute('hidden');
159
187
  });
160
188
 
161
- test('Renders unhidden and with pf-m-expanded by default', () => {
189
+ test('Renders without pf-m-fixed by default', () => {
162
190
  render(
163
191
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
164
- <AccordionContent>Test</AccordionContent>
192
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
193
+ <AccordionContent>Test</AccordionContent>
194
+ </AccordionItemContext.Provider>
165
195
  </AccordionContext.Provider>
166
196
  );
167
197
 
168
- const contentContainer = screen.getByRole('heading');
169
-
170
- expect(contentContainer).not.toHaveAttribute('hidden');
171
- expect(contentContainer).toHaveClass('pf-m-expanded');
198
+ expect(screen.getByRole('heading')).not.toHaveClass('pf-m-fixed');
172
199
  });
173
200
 
174
- test('Renders aria-hidden and without pf-m-expanded when isHidden is true', () => {
201
+ test('Renders with pf-m-fixed when isFixed is true', () => {
175
202
  render(
176
203
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
177
- <AccordionContent isHidden>Test</AccordionContent>
204
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
205
+ <AccordionContent isFixed>Test</AccordionContent>
206
+ </AccordionItemContext.Provider>
178
207
  </AccordionContext.Provider>
179
208
  );
180
209
 
181
- const contentContainer = screen.getByRole('heading', { hidden: true });
182
-
183
- expect(contentContainer).toHaveAttribute('hidden');
184
- expect(contentContainer).not.toHaveClass('pf-m-expanded');
210
+ expect(screen.getByRole('heading')).toHaveClass('pf-m-fixed');
185
211
  });
186
212
 
187
213
  test('Matches the snapshot', () => {
188
214
  const { asFragment } = render(
189
215
  <AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
190
- <AccordionContent aria-label="this is a simple accordion">Test</AccordionContent>
216
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
217
+ <AccordionContent aria-label="this is a simple accordion">Test</AccordionContent>
218
+ </AccordionItemContext.Provider>
191
219
  </AccordionContext.Provider>
192
220
  );
193
221
  expect(asFragment()).toMatchSnapshot();
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
 
3
3
  import { render, screen } from '@testing-library/react';
4
-
5
4
  import { AccordionItem } from '../AccordionItem';
5
+ import styles from '@patternfly/react-styles/css/components/Accordion/accordion';
6
6
 
7
7
  test('Renders children', () => {
8
8
  render(<AccordionItem>Test</AccordionItem>);
@@ -10,6 +10,24 @@ test('Renders children', () => {
10
10
  expect(screen.getByText('Test')).toBeVisible();
11
11
  });
12
12
 
13
+ test(`Renders with class ${styles.accordionItem} by default`, () => {
14
+ render(<AccordionItem>Test</AccordionItem>);
15
+
16
+ expect(screen.getByText('Test')).toHaveClass(styles.accordionItem, { exact: true });
17
+ });
18
+
19
+ test(`Renders with class ${styles.modifiers.expanded} when isExpanded is true`, () => {
20
+ render(<AccordionItem isExpanded>Test</AccordionItem>);
21
+
22
+ expect(screen.getByText('Test')).toHaveClass(styles.modifiers.expanded);
23
+ });
24
+
25
+ test(`Renders with additional classes when className is passed`, () => {
26
+ render(<AccordionItem className="custom-class">Test</AccordionItem>);
27
+
28
+ expect(screen.getByText('Test')).toHaveClass('custom-class');
29
+ });
30
+
13
31
  test('Matches the snapshot', () => {
14
32
  const { asFragment } = render(<AccordionItem>Test</AccordionItem>);
15
33
  expect(asFragment()).toMatchSnapshot();
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import { render, screen } from '@testing-library/react';
4
4
 
5
5
  import { AccordionToggle } from '../AccordionToggle';
6
- import { AccordionContext } from '../AccordionContext';
6
+ import { AccordionContext, AccordionItemContext } from '../AccordionContext';
7
7
  import styles from '@patternfly/react-styles/css/components/Accordion/accordion';
8
8
 
9
9
  jest.mock('@patternfly/react-icons/dist/esm/icons/angle-right-icon', () => () => 'Icon mock');
@@ -127,38 +127,40 @@ test('Renders the container as the element provided via the component prop when
127
127
  expect(screen.getByRole('heading', { level: 1 })).toBeVisible();
128
128
  });
129
129
 
130
- test('Renders the toggle without pf-m-expanded and aria-expanded=false by default', () => {
130
+ test('Renders the toggle with aria-expanded=false when isExpanded from context is false', () => {
131
131
  render(
132
132
  <AccordionContext.Provider value={{ ToggleContainer: 'h3' }}>
133
- <AccordionToggle id="accordion-toggle">Test</AccordionToggle>
133
+ <AccordionItemContext.Provider value={{ isExpanded: false }}>
134
+ <AccordionToggle id="accordion-toggle">Test</AccordionToggle>
135
+ </AccordionItemContext.Provider>
134
136
  </AccordionContext.Provider>
135
137
  );
136
138
 
137
139
  const toggle = screen.getByRole('button');
138
140
 
139
- expect(toggle).not.toHaveClass('pf-m-expanded');
140
141
  expect(toggle).toHaveAttribute('aria-expanded', 'false');
141
142
  });
142
143
 
143
- test('Renders the toggle with pf-m-expanded and aria-expanded=true when isExpanded=true', () => {
144
+ test('Renders the toggle with aria-expanded=true when isExpanded from context is true', () => {
144
145
  render(
145
146
  <AccordionContext.Provider value={{ ToggleContainer: 'h3' }}>
146
- <AccordionToggle id="accordion-toggle" isExpanded>
147
- Test
148
- </AccordionToggle>
147
+ <AccordionItemContext.Provider value={{ isExpanded: true }}>
148
+ <AccordionToggle id="accordion-toggle">Test</AccordionToggle>
149
+ </AccordionItemContext.Provider>
149
150
  </AccordionContext.Provider>
150
151
  );
151
152
 
152
153
  const toggle = screen.getByRole('button');
153
154
 
154
- expect(toggle).toHaveClass('pf-m-expanded');
155
155
  expect(toggle).toHaveAttribute('aria-expanded', 'true');
156
156
  });
157
157
 
158
158
  test('Matches the snapshot', () => {
159
159
  const { asFragment } = render(
160
160
  <AccordionContext.Provider value={{ ToggleContainer: 'h3' }}>
161
- <AccordionToggle id="accordion-toggle">Test</AccordionToggle>
161
+ <AccordionItemContext.Provider value={{ isExpanded: false }}>
162
+ <AccordionToggle id="accordion-toggle">Test</AccordionToggle>
163
+ </AccordionItemContext.Provider>
162
164
  </AccordionContext.Provider>
163
165
  );
164
166
  expect(asFragment()).toMatchSnapshot();
@@ -4,7 +4,7 @@ exports[`Matches the snapshot 1`] = `
4
4
  <DocumentFragment>
5
5
  <h3
6
6
  aria-label="this is a simple accordion"
7
- class="pf-v5-c-accordion__expandable-content pf-m-expanded"
7
+ class="pf-v5-c-accordion__expandable-content"
8
8
  id=""
9
9
  >
10
10
  <div
@@ -2,6 +2,10 @@
2
2
 
3
3
  exports[`Matches the snapshot 1`] = `
4
4
  <DocumentFragment>
5
- Test
5
+ <div
6
+ class="pf-v5-c-accordion__item"
7
+ >
8
+ Test
9
+ </div>
6
10
  </DocumentFragment>
7
11
  `;
@@ -26,17 +26,16 @@ export const AccordionBordered: React.FunctionComponent = () => {
26
26
  return (
27
27
  <>
28
28
  <Accordion isBordered displaySize={displaySize}>
29
- <AccordionItem>
29
+ <AccordionItem isExpanded={expanded === 'bordered-toggle1'}>
30
30
  <AccordionToggle
31
31
  onClick={() => {
32
32
  onToggle('bordered-toggle1');
33
33
  }}
34
- isExpanded={expanded === 'bordered-toggle1'}
35
34
  id="bordered-toggle1"
36
35
  >
37
36
  Item one
38
37
  </AccordionToggle>
39
- <AccordionContent id="bordered-expand1" isHidden={expanded !== 'bordered-toggle1'}>
38
+ <AccordionContent id="bordered-expand1">
40
39
  <p>
41
40
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
42
41
  dolore magna aliqua.
@@ -44,17 +43,16 @@ export const AccordionBordered: React.FunctionComponent = () => {
44
43
  </AccordionContent>
45
44
  </AccordionItem>
46
45
 
47
- <AccordionItem>
46
+ <AccordionItem isExpanded={expanded === 'bordered-toggle2'}>
48
47
  <AccordionToggle
49
48
  onClick={() => {
50
49
  onToggle('bordered-toggle2');
51
50
  }}
52
- isExpanded={expanded === 'bordered-toggle2'}
53
51
  id="bordered-toggle2"
54
52
  >
55
53
  Item two
56
54
  </AccordionToggle>
57
- <AccordionContent id="bordered-expand2" isHidden={expanded !== 'bordered-toggle2'}>
55
+ <AccordionContent id="bordered-expand2">
58
56
  <p>
59
57
  Vivamus et tortor sed arcu congue vehicula eget et diam. Praesent nec dictum lorem. Aliquam id diam
60
58
  ultrices, faucibus erat id, maximus nunc.
@@ -62,32 +60,30 @@ export const AccordionBordered: React.FunctionComponent = () => {
62
60
  </AccordionContent>
63
61
  </AccordionItem>
64
62
 
65
- <AccordionItem>
63
+ <AccordionItem isExpanded={expanded === 'bordered-toggle3'}>
66
64
  <AccordionToggle
67
65
  onClick={() => {
68
66
  onToggle('bordered-toggle3');
69
67
  }}
70
- isExpanded={expanded === 'bordered-toggle3'}
71
68
  id="bordered-toggle3"
72
69
  >
73
70
  Item three
74
71
  </AccordionToggle>
75
- <AccordionContent id="bordered-expand3" isHidden={expanded !== 'bordered-toggle3'}>
72
+ <AccordionContent id="bordered-expand3">
76
73
  <p>Morbi vitae urna quis nunc convallis hendrerit. Aliquam congue orci quis ultricies tempus.</p>
77
74
  </AccordionContent>
78
75
  </AccordionItem>
79
76
 
80
- <AccordionItem>
77
+ <AccordionItem isExpanded={expanded === 'bordered-toggle4'}>
81
78
  <AccordionToggle
82
79
  onClick={() => {
83
80
  onToggle('bordered-toggle4');
84
81
  }}
85
- isExpanded={expanded === 'bordered-toggle4'}
86
82
  id="bordered-toggle4"
87
83
  >
88
84
  Item four
89
85
  </AccordionToggle>
90
- <AccordionContent id="bordered-expand4" isHidden={expanded !== 'bordered-toggle4'} isCustomContent>
86
+ <AccordionContent id="bordered-expand4" isCustomContent>
91
87
  <AccordionExpandableContentBody>
92
88
  Donec vel posuere orci. Phasellus quis tortor a ex hendrerit efficitur. Aliquam lacinia ligula pharetra,
93
89
  sagittis ex ut, pellentesque diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices
@@ -104,17 +100,16 @@ export const AccordionBordered: React.FunctionComponent = () => {
104
100
  </AccordionExpandableContentBody>
105
101
  </AccordionContent>
106
102
  </AccordionItem>
107
- <AccordionItem>
103
+ <AccordionItem isExpanded={expanded === 'bordered-toggle5'}>
108
104
  <AccordionToggle
109
105
  onClick={() => {
110
106
  onToggle('bordered-toggle5');
111
107
  }}
112
- isExpanded={expanded === 'bordered-toggle5'}
113
108
  id="bordered-toggle5"
114
109
  >
115
110
  Item five
116
111
  </AccordionToggle>
117
- <AccordionContent id="bordered-expand5" isHidden={expanded !== 'bordered-toggle5'}>
112
+ <AccordionContent id="bordered-expand5">
118
113
  <p>Vivamus finibus dictum ex id ultrices. Mauris dictum neque a iaculis blandit.</p>
119
114
  </AccordionContent>
120
115
  </AccordionItem>