@patternfly/react-core 6.0.0-alpha.7 → 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.
- package/CHANGELOG.md +10 -0
- package/components/package.json +1 -1
- package/deprecated/package.json +1 -1
- package/dist/dynamic/components/AboutModal/package.json +1 -1
- package/dist/dynamic/components/Accordion/package.json +1 -1
- package/dist/dynamic/components/ActionList/package.json +1 -1
- package/dist/dynamic/components/Alert/package.json +1 -1
- package/dist/dynamic/components/Avatar/package.json +1 -1
- package/dist/dynamic/components/BackToTop/package.json +1 -1
- package/dist/dynamic/components/Backdrop/package.json +1 -1
- package/dist/dynamic/components/BackgroundImage/package.json +1 -1
- package/dist/dynamic/components/Badge/package.json +1 -1
- package/dist/dynamic/components/Banner/package.json +1 -1
- package/dist/dynamic/components/Brand/package.json +1 -1
- package/dist/dynamic/components/Breadcrumb/package.json +1 -1
- package/dist/dynamic/components/Button/package.json +1 -1
- package/dist/dynamic/components/CalendarMonth/package.json +1 -1
- package/dist/dynamic/components/Card/package.json +1 -1
- package/dist/dynamic/components/Checkbox/package.json +1 -1
- package/dist/dynamic/components/Chip/package.json +1 -1
- package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
- package/dist/dynamic/components/CodeBlock/package.json +1 -1
- package/dist/dynamic/components/DataList/package.json +1 -1
- package/dist/dynamic/components/DatePicker/package.json +1 -1
- package/dist/dynamic/components/DescriptionList/package.json +1 -1
- package/dist/dynamic/components/Divider/package.json +1 -1
- package/dist/dynamic/components/DragDrop/package.json +1 -1
- package/dist/dynamic/components/Drawer/package.json +1 -1
- package/dist/dynamic/components/Dropdown/package.json +1 -1
- package/dist/dynamic/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/components/EmptyState/package.json +1 -1
- package/dist/dynamic/components/ExpandableSection/package.json +1 -1
- package/dist/dynamic/components/FileUpload/package.json +1 -1
- package/dist/dynamic/components/Form/package.json +1 -1
- package/dist/dynamic/components/FormSelect/package.json +1 -1
- package/dist/dynamic/components/HelperText/package.json +1 -1
- package/dist/dynamic/components/Hint/package.json +1 -1
- package/dist/dynamic/components/Icon/package.json +1 -1
- package/dist/dynamic/components/InputGroup/package.json +1 -1
- package/dist/dynamic/components/JumpLinks/package.json +1 -1
- package/dist/dynamic/components/Label/package.json +1 -1
- package/dist/dynamic/components/List/package.json +1 -1
- package/dist/dynamic/components/LoginPage/package.json +1 -1
- package/dist/dynamic/components/Masthead/package.json +1 -1
- package/dist/dynamic/components/Menu/package.json +1 -1
- package/dist/dynamic/components/MenuToggle/package.json +1 -1
- package/dist/dynamic/components/Modal/package.json +1 -1
- package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
- package/dist/dynamic/components/Nav/package.json +1 -1
- package/dist/dynamic/components/NotificationBadge/package.json +1 -1
- package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
- package/dist/dynamic/components/NumberInput/package.json +1 -1
- package/dist/dynamic/components/OverflowMenu/package.json +1 -1
- package/dist/dynamic/components/Page/package.json +1 -1
- package/dist/dynamic/components/Pagination/package.json +1 -1
- package/dist/dynamic/components/Panel/package.json +1 -1
- package/dist/dynamic/components/Popover/package.json +1 -1
- package/dist/dynamic/components/Progress/package.json +1 -1
- package/dist/dynamic/components/ProgressStepper/package.json +1 -1
- package/dist/dynamic/components/Radio/package.json +1 -1
- package/dist/dynamic/components/SearchInput/package.json +1 -1
- package/dist/dynamic/components/Select/package.json +1 -1
- package/dist/dynamic/components/Sidebar/package.json +1 -1
- package/dist/dynamic/components/SimpleList/package.json +1 -1
- package/dist/dynamic/components/Skeleton/package.json +1 -1
- package/dist/dynamic/components/SkipToContent/package.json +1 -1
- package/dist/dynamic/components/Slider/package.json +1 -1
- package/dist/dynamic/components/Spinner/package.json +1 -1
- package/dist/dynamic/components/Switch/package.json +1 -1
- package/dist/dynamic/components/Tabs/package.json +1 -1
- package/dist/dynamic/components/Text/package.json +1 -1
- package/dist/dynamic/components/TextArea/package.json +1 -1
- package/dist/dynamic/components/TextInput/package.json +1 -1
- package/dist/dynamic/components/TextInputGroup/package.json +1 -1
- package/dist/dynamic/components/Tile/package.json +1 -1
- package/dist/dynamic/components/TimePicker/package.json +1 -1
- package/dist/dynamic/components/Timestamp/package.json +1 -1
- package/dist/dynamic/components/Title/package.json +1 -1
- package/dist/dynamic/components/ToggleGroup/package.json +1 -1
- package/dist/dynamic/components/Toolbar/package.json +1 -1
- package/dist/dynamic/components/Tooltip/package.json +1 -1
- package/dist/dynamic/components/TreeView/package.json +1 -1
- package/dist/dynamic/components/Truncate/package.json +1 -1
- package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
- package/dist/dynamic/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/ApplicationLauncher/package.json +1 -1
- package/dist/dynamic/deprecated/components/ContextSelector/package.json +1 -1
- package/dist/dynamic/deprecated/components/Dropdown/package.json +1 -1
- package/dist/dynamic/deprecated/components/OptionsMenu/package.json +1 -1
- package/dist/dynamic/deprecated/components/PageHeader/package.json +1 -1
- package/dist/dynamic/deprecated/components/Select/package.json +1 -1
- package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/package.json +1 -1
- package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
- package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
- package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
- package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
- package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
- package/dist/dynamic/helpers/constants/package.json +1 -1
- package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
- package/dist/dynamic/helpers/favorites/package.json +1 -1
- package/dist/dynamic/helpers/fileUtils/package.json +1 -1
- package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
- package/dist/dynamic/helpers/package.json +1 -1
- package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
- package/dist/dynamic/helpers/typeUtils/package.json +1 -1
- package/dist/dynamic/helpers/useInterval/package.json +1 -1
- package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
- package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
- package/dist/dynamic/helpers/util/package.json +1 -1
- package/dist/dynamic/layouts/Bullseye/package.json +1 -1
- package/dist/dynamic/layouts/Flex/package.json +1 -1
- package/dist/dynamic/layouts/Gallery/package.json +1 -1
- package/dist/dynamic/layouts/Grid/package.json +1 -1
- package/dist/dynamic/layouts/Level/package.json +1 -1
- package/dist/dynamic/layouts/Split/package.json +1 -1
- package/dist/dynamic/layouts/Stack/package.json +1 -1
- package/dist/dynamic/next/components/package.json +1 -1
- package/dist/esm/components/Accordion/AccordionContent.d.ts +0 -2
- package/dist/esm/components/Accordion/AccordionContent.d.ts.map +1 -1
- package/dist/esm/components/Accordion/AccordionContent.js +6 -5
- package/dist/esm/components/Accordion/AccordionContent.js.map +1 -1
- package/dist/esm/components/Accordion/AccordionContext.d.ts +4 -0
- package/dist/esm/components/Accordion/AccordionContext.d.ts.map +1 -1
- package/dist/esm/components/Accordion/AccordionContext.js +1 -0
- package/dist/esm/components/Accordion/AccordionContext.js.map +1 -1
- package/dist/esm/components/Accordion/AccordionItem.d.ts +5 -1
- package/dist/esm/components/Accordion/AccordionItem.d.ts.map +1 -1
- package/dist/esm/components/Accordion/AccordionItem.js +7 -1
- package/dist/esm/components/Accordion/AccordionItem.js.map +1 -1
- package/dist/esm/components/Accordion/AccordionToggle.d.ts +0 -2
- package/dist/esm/components/Accordion/AccordionToggle.d.ts.map +1 -1
- package/dist/esm/components/Accordion/AccordionToggle.js +4 -3
- package/dist/esm/components/Accordion/AccordionToggle.js.map +1 -1
- package/dist/esm/components/Button/Button.d.ts.map +1 -1
- package/dist/esm/components/Button/Button.js +8 -2
- package/dist/esm/components/Button/Button.js.map +1 -1
- package/dist/esm/components/Tabs/TabContent.d.ts.map +1 -1
- package/dist/esm/components/Tabs/TabContent.js +9 -7
- package/dist/esm/components/Tabs/TabContent.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.d.ts +1 -1
- package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/js/components/Accordion/AccordionContent.d.ts +0 -2
- package/dist/js/components/Accordion/AccordionContent.d.ts.map +1 -1
- package/dist/js/components/Accordion/AccordionContent.js +5 -4
- package/dist/js/components/Accordion/AccordionContent.js.map +1 -1
- package/dist/js/components/Accordion/AccordionContext.d.ts +4 -0
- package/dist/js/components/Accordion/AccordionContext.d.ts.map +1 -1
- package/dist/js/components/Accordion/AccordionContext.js +2 -1
- package/dist/js/components/Accordion/AccordionContext.js.map +1 -1
- package/dist/js/components/Accordion/AccordionItem.d.ts +5 -1
- package/dist/js/components/Accordion/AccordionItem.d.ts.map +1 -1
- package/dist/js/components/Accordion/AccordionItem.js +7 -1
- package/dist/js/components/Accordion/AccordionItem.js.map +1 -1
- package/dist/js/components/Accordion/AccordionToggle.d.ts +0 -2
- package/dist/js/components/Accordion/AccordionToggle.d.ts.map +1 -1
- package/dist/js/components/Accordion/AccordionToggle.js +3 -2
- package/dist/js/components/Accordion/AccordionToggle.js.map +1 -1
- package/dist/js/components/Button/Button.d.ts.map +1 -1
- package/dist/js/components/Button/Button.js +8 -2
- package/dist/js/components/Button/Button.js.map +1 -1
- package/dist/js/components/Tabs/TabContent.d.ts.map +1 -1
- package/dist/js/components/Tabs/TabContent.js +9 -7
- package/dist/js/components/Tabs/TabContent.js.map +1 -1
- package/dist/js/components/Tabs/Tabs.d.ts +1 -1
- package/dist/js/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/styles/assets/images/pf-background.svg +22 -0
- package/dist/umd/react-core.min.js +1 -1
- package/helpers/package.json +1 -1
- package/layouts/package.json +1 -1
- package/next/package.json +1 -1
- package/package.json +6 -6
- package/src/components/Accordion/AccordionContent.tsx +6 -13
- package/src/components/Accordion/AccordionContext.ts +5 -0
- package/src/components/Accordion/AccordionItem.tsx +20 -3
- package/src/components/Accordion/AccordionToggle.tsx +29 -27
- package/src/components/Accordion/__tests__/AccordionContent.test.tsx +60 -32
- package/src/components/Accordion/__tests__/AccordionItem.test.tsx +19 -1
- package/src/components/Accordion/__tests__/AccordionToggle.test.tsx +12 -10
- package/src/components/Accordion/__tests__/__snapshots__/AccordionContent.test.tsx.snap +1 -1
- package/src/components/Accordion/__tests__/__snapshots__/AccordionItem.test.tsx.snap +5 -1
- package/src/components/Accordion/examples/AccordionBordered.tsx +10 -15
- package/src/components/Accordion/examples/AccordionDefinitionList.tsx +10 -15
- package/src/components/Accordion/examples/AccordionFixedWithMultipleExpandBehavior.tsx +15 -40
- package/src/components/Accordion/examples/AccordionSingleExpandBehavior.tsx +10 -15
- package/src/components/Button/Button.tsx +4 -1
- package/src/components/Button/__tests__/Button.test.tsx +2 -1
- package/src/components/Button/__tests__/__snapshots__/Button.test.tsx.snap +1 -1
- package/src/components/Masthead/__tests__/__snapshots__/Masthead.test.tsx.snap +6 -6
- package/src/components/Tabs/TabContent.tsx +7 -6
- package/src/components/Tabs/Tabs.tsx +1 -1
- package/src/components/Tabs/__tests__/Generated/__snapshots__/TabContent.test.tsx.snap +1 -1
- package/src/components/Tabs/__tests__/__snapshots__/Tabs.test.tsx.snap +44 -44
- package/src/components/Tabs/examples/TabsBoxLight.tsx +2 -1
- package/src/demos/examples/Card/CardWithAccordion.tsx +6 -9
- package/src/components/Accordion/__tests__/Generated/AccordionContent.test.tsx +0 -23
- package/src/components/Accordion/__tests__/Generated/AccordionItem.test.tsx +0 -13
- package/src/components/Accordion/__tests__/Generated/AccordionToggle.test.tsx +0 -21
- package/src/components/Accordion/__tests__/Generated/__snapshots__/AccordionContent.test.tsx.snap +0 -7
- package/src/components/Accordion/__tests__/Generated/__snapshots__/AccordionItem.test.tsx.snap +0 -7
- package/src/components/Accordion/__tests__/Generated/__snapshots__/AccordionToggle.test.tsx.snap +0 -7
package/helpers/package.json
CHANGED
|
@@ -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.
|
|
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}
|
package/layouts/package.json
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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",
|
|
@@ -46,15 +46,15 @@
|
|
|
46
46
|
"subpaths": "node ../../scripts/exportSubpaths.js --config subpaths.config.json"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@patternfly/react-icons": "^6.0.0-alpha.
|
|
50
|
-
"@patternfly/react-styles": "^6.0.0-alpha.
|
|
51
|
-
"@patternfly/react-tokens": "^6.0.0-alpha.
|
|
49
|
+
"@patternfly/react-icons": "^6.0.0-alpha.6",
|
|
50
|
+
"@patternfly/react-styles": "^6.0.0-alpha.6",
|
|
51
|
+
"@patternfly/react-tokens": "^6.0.0-alpha.6",
|
|
52
52
|
"focus-trap": "7.5.2",
|
|
53
53
|
"react-dropzone": "^14.2.3",
|
|
54
54
|
"tslib": "^2.5.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
|
-
"@patternfly/patternfly": "6.0.0-alpha.
|
|
57
|
+
"@patternfly/patternfly": "6.0.0-alpha.49",
|
|
58
58
|
"@rollup/plugin-commonjs": "^25.0.0",
|
|
59
59
|
"@rollup/plugin-node-resolve": "^15.0.2",
|
|
60
60
|
"@rollup/plugin-replace": "^5.0.2",
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
"react": "^17 || ^18",
|
|
73
73
|
"react-dom": "^17 || ^18"
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
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 &&
|
|
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,
|
|
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
|
-
|
|
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
|
|
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> = ({
|
|
9
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
|
165
|
+
test('Renders the container as hidden when isExpanded from context is false', () => {
|
|
142
166
|
render(
|
|
143
167
|
<AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
|
|
144
|
-
<
|
|
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')).
|
|
174
|
+
expect(screen.getByRole('heading', { hidden: true })).toHaveAttribute('hidden');
|
|
149
175
|
});
|
|
150
176
|
|
|
151
|
-
test('Renders
|
|
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
|
-
<
|
|
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')).
|
|
186
|
+
expect(screen.getByRole('heading', { level: 3 })).not.toHaveAttribute('hidden');
|
|
159
187
|
});
|
|
160
188
|
|
|
161
|
-
test('Renders
|
|
189
|
+
test('Renders without pf-m-fixed by default', () => {
|
|
162
190
|
render(
|
|
163
191
|
<AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
|
|
164
|
-
<
|
|
192
|
+
<AccordionItemContext.Provider value={{ isExpanded: true }}>
|
|
193
|
+
<AccordionContent>Test</AccordionContent>
|
|
194
|
+
</AccordionItemContext.Provider>
|
|
165
195
|
</AccordionContext.Provider>
|
|
166
196
|
);
|
|
167
197
|
|
|
168
|
-
|
|
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
|
|
201
|
+
test('Renders with pf-m-fixed when isFixed is true', () => {
|
|
175
202
|
render(
|
|
176
203
|
<AccordionContext.Provider value={{ ContentContainer: 'h3' }}>
|
|
177
|
-
<
|
|
204
|
+
<AccordionItemContext.Provider value={{ isExpanded: true }}>
|
|
205
|
+
<AccordionContent isFixed>Test</AccordionContent>
|
|
206
|
+
</AccordionItemContext.Provider>
|
|
178
207
|
</AccordionContext.Provider>
|
|
179
208
|
);
|
|
180
209
|
|
|
181
|
-
|
|
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
|
-
<
|
|
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
|
|
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
|
-
<
|
|
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
|
|
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
|
-
<
|
|
147
|
-
Test
|
|
148
|
-
</
|
|
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
|
-
<
|
|
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();
|