@toptal/picasso-accordion 2.0.11 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-package/src/Accordion/Accordion.d.ts +3 -0
- package/dist-package/src/Accordion/Accordion.d.ts.map +1 -1
- package/dist-package/src/Accordion/Accordion.js +14 -4
- package/dist-package/src/Accordion/Accordion.js.map +1 -1
- package/dist-package/src/Accordion/styles.d.ts +1 -1
- package/dist-package/src/Accordion/styles.d.ts.map +1 -1
- package/dist-package/src/Accordion/styles.js +6 -0
- package/dist-package/src/Accordion/styles.js.map +1 -1
- package/package.json +2 -2
- package/src/Accordion/Accordion.tsx +26 -10
- package/src/Accordion/__snapshots__/test.tsx.snap +84 -0
- package/src/Accordion/story/ExpandIconPlacement.example.tsx +26 -0
- package/src/Accordion/story/index.jsx +9 -0
- package/src/Accordion/styles.ts +6 -0
- package/src/Accordion/test.tsx +6 -0
|
@@ -2,6 +2,7 @@ import type { ReactNode, ChangeEvent, HTMLAttributes, ReactElement } from 'react
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import type { StandardProps, TransitionProps } from '@toptal/picasso-shared';
|
|
4
4
|
export declare type Borders = 'all' | 'middle' | 'none';
|
|
5
|
+
export declare type ExpandIconPlacement = 'left' | 'right';
|
|
5
6
|
export interface Props extends StandardProps, Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
6
7
|
/** Always visible part of accordion */
|
|
7
8
|
children?: ReactNode;
|
|
@@ -15,6 +16,8 @@ export interface Props extends StandardProps, Omit<HTMLAttributes<HTMLDivElement
|
|
|
15
16
|
disabled?: boolean;
|
|
16
17
|
/** Customize icon indicating expanded status */
|
|
17
18
|
expandIcon?: ReactElement;
|
|
19
|
+
/** Customize icon placement */
|
|
20
|
+
expandIconPlacement?: ExpandIconPlacement;
|
|
18
21
|
/** Defines where the horizontal borders show */
|
|
19
22
|
borders?: Borders;
|
|
20
23
|
/** Callback invoked when `Accordion` item is toggled */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/Accordion/Accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,YAAY,EACb,MAAM,OAAO,CAAA;AACd,OAAO,KAA+B,MAAM,OAAO,CAAA;AAKnD,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAQ5E,oBAAY,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"Accordion.d.ts","sourceRoot":"","sources":["../../../src/Accordion/Accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,cAAc,EACd,YAAY,EACb,MAAM,OAAO,CAAA;AACd,OAAO,KAA+B,MAAM,OAAO,CAAA;AAKnD,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAQ5E,oBAAY,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;AAC/C,oBAAY,mBAAmB,GAAG,MAAM,GAAG,OAAO,CAAA;AAYlD,MAAM,WAAW,KACf,SAAQ,aAAa,EACnB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IAClD,uCAAuC;IACvC,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,yCAAyC;IACzC,OAAO,EAAE,SAAS,CAAA;IAClB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,6CAA6C;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gDAAgD;IAChD,UAAU,CAAC,EAAE,YAAY,CAAA;IACzB,+BAA+B;IAC/B,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;IACzC,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9D,kKAAkK;IAClK,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,OAAO,CAAC,EAAE;QACR,qBAAqB,CAAC,EAAE,MAAM,CAAA;QAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAC1B,CAAA;CACF;AAWD,eAAO,MAAM,SAAS,2EA0GpB,CAAA;AAYF,eAAe,SAAS,CAAA"}
|
|
@@ -27,7 +27,7 @@ const decorateWithExpandIconClasses = (expandIcon, classes) => React.cloneElemen
|
|
|
27
27
|
});
|
|
28
28
|
/* eslint-disable complexity */
|
|
29
29
|
export const Accordion = forwardRef(function Accordion(props, ref) {
|
|
30
|
-
const { children, content, expanded, defaultExpanded, expandIcon, borders, disabled, className, style, onChange, testIds, transitionProps } = props, rest = __rest(props, ["children", "content", "expanded", "defaultExpanded", "expandIcon", "borders", "disabled", "className", "style", "onChange", "testIds", "transitionProps"]);
|
|
30
|
+
const { children, content, expanded, defaultExpanded, expandIcon, expandIconPlacement = 'right', borders, disabled, className, style, onChange, testIds, transitionProps } = props, rest = __rest(props, ["children", "content", "expanded", "defaultExpanded", "expandIcon", "expandIconPlacement", "borders", "disabled", "className", "style", "onChange", "testIds", "transitionProps"]);
|
|
31
31
|
const classes = useStyles(props);
|
|
32
32
|
const borderClasses = {
|
|
33
33
|
all: classes.bordersAll,
|
|
@@ -48,16 +48,26 @@ export const Accordion = forwardRef(function Accordion(props, ref) {
|
|
|
48
48
|
[classes.expandIconExpanded]: summaryExpanded,
|
|
49
49
|
});
|
|
50
50
|
const appliedBorders = children || expanded ? borders : 'none';
|
|
51
|
+
const renderExpandIcon = (expandIconPosition) => {
|
|
52
|
+
if (expandIcon) {
|
|
53
|
+
return decorateWithExpandIconClasses(expandIcon, expandIconClass);
|
|
54
|
+
}
|
|
55
|
+
return (React.createElement("div", { className: cx({
|
|
56
|
+
[classes.expandIconAlignTop]: true,
|
|
57
|
+
[classes.expandIconLeft]: expandIconPosition === 'left',
|
|
58
|
+
}) },
|
|
59
|
+
React.createElement(ButtonAction, { icon: React.createElement(ArrowDownMinor16, { className: expandIconClass }) })));
|
|
60
|
+
};
|
|
51
61
|
return (React.createElement(MUIAccordion, Object.assign({}, rest, { ref: ref, classes: {
|
|
52
62
|
root: cx(classes.root, borderClasses[appliedBorders]),
|
|
53
63
|
}, className: className, style: style, elevation: 0, expanded: summaryExpanded, disabled: disabled, onChange: onChange, TransitionProps: transitionProps }),
|
|
54
64
|
children ? (React.createElement(AccordionSummary, { classes: {
|
|
55
65
|
root: classes.summary,
|
|
56
|
-
content: classes.content
|
|
66
|
+
content: `${classes.content} ${expandIconPlacement === 'left' ? classes.contentRight : ''}`,
|
|
57
67
|
}, expandIcon: null, onClick: handleSummaryClick, "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.accordionSummary },
|
|
68
|
+
expandIconPlacement === 'left' && renderExpandIcon('left'),
|
|
58
69
|
children,
|
|
59
|
-
|
|
60
|
-
React.createElement(ButtonAction, { icon: React.createElement(ArrowDownMinor16, { className: expandIconClass }) }))))) : (React.createElement(EmptyAccordionSummary, { "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.emptyAccordionSummary })),
|
|
70
|
+
expandIconPlacement === 'right' && renderExpandIcon('right'))) : (React.createElement(EmptyAccordionSummary, { "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.emptyAccordionSummary })),
|
|
61
71
|
React.createElement(AccordionDetails, { classes: {
|
|
62
72
|
root: classes.details,
|
|
63
73
|
} }, content)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../../../src/Accordion/Accordion.tsx"],"names":[],"mappings":";;;;;;;;;;;AAMA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACnD,OAAO,EAAE,MAAM,YAAY,CAAA;AAC3B,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,MAAM,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"Accordion.js","sourceRoot":"","sources":["../../../src/Accordion/Accordion.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Theme } from '@material-ui/core/styles';
|
|
2
|
-
declare const _default: ({ palette, typography }: Theme) => import("@material-ui/styles").StyleRules<{}, "root" | "content" | "expandIcon" | "details" | "summary" | "bordersAll" | "bordersMiddle" | "bordersNone" | "summaryFontWeightInherit" | "expandIconExpanded" | "expandIconAlignTop" | "summaryWrapper" | "detailsWrapper">;
|
|
2
|
+
declare const _default: ({ palette, typography }: Theme) => import("@material-ui/styles").StyleRules<{}, "root" | "content" | "expandIcon" | "details" | "summary" | "bordersAll" | "bordersMiddle" | "bordersNone" | "summaryFontWeightInherit" | "expandIconExpanded" | "expandIconAlignTop" | "expandIconLeft" | "summaryWrapper" | "detailsWrapper" | "contentRight">;
|
|
3
3
|
export default _default;
|
|
4
4
|
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/Accordion/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;kDAoBZ,KAAK;AAA9C,
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/Accordion/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;kDAoBZ,KAAK;AAA9C,wBA0FC"}
|
|
@@ -68,6 +68,9 @@ export default ({ palette, typography }) => {
|
|
|
68
68
|
height: '1.5em',
|
|
69
69
|
alignSelf: 'flex-start',
|
|
70
70
|
},
|
|
71
|
+
expandIconLeft: {
|
|
72
|
+
marginRight: '0.5em',
|
|
73
|
+
},
|
|
71
74
|
summary: {
|
|
72
75
|
color: palette.common.black,
|
|
73
76
|
},
|
|
@@ -91,6 +94,9 @@ export default ({ palette, typography }) => {
|
|
|
91
94
|
justifyContent: 'space-between',
|
|
92
95
|
lineHeight: '1.5em',
|
|
93
96
|
},
|
|
97
|
+
contentRight: {
|
|
98
|
+
justifyContent: 'normal',
|
|
99
|
+
},
|
|
94
100
|
});
|
|
95
101
|
};
|
|
96
102
|
//# sourceMappingURL=styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/Accordion/styles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D,eAAe,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9B,YAAY,EAAE;QACZ,IAAI,EAAE;YACJ,YAAY,EAAE;gBACZ,MAAM,EAAE,CAAC;gBACT,UAAU,EAAE;oBACV,OAAO,EAAE,CAAC;iBACX;aACF;YACD,YAAY,EAAE;gBACZ,eAAe,EAAE,OAAO;aACzB;SACF;KACF;CACF,CAAC,CAAC,CAAA;AAEH,eAAe,CAAC,EAAE,OAAO,EAAE,UAAU,EAAS,EAAE,EAAE;IAChD,MAAM,eAAe,GAAG;QACtB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC;QACV,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;QACpC,QAAQ,EAAE,UAAU;KACrB,CAAA;IAED,OAAO,YAAY,CAAC;QAClB,IAAI,EAAE;YACJ,UAAU,EAAE,aAAa;YACzB,QAAQ,EAAE,MAAM;SACjB;QACD,UAAU,EAAE;YACV,mBAAmB,oBACd,eAAe,CACnB;YACD,sBAAsB,EAAE;gBACtB,OAAO,EAAE,OAAO;aACjB;YACD,kBAAkB,EAAE;gBAClB,OAAO,EAAE,MAAM;aAChB;SACF;QACD,aAAa,EAAE;YACb,UAAU,EAAE;gBACV,OAAO,EAAE,MAAM;aAChB;YACD,uBAAuB,kCAClB,eAAe,KAClB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,iBAAiB,GAC7B;SACF;QACD,WAAW,EAAE;YACX,mBAAmB,EAAE;gBACnB,OAAO,EAAE,MAAM;aAChB;SACF;QACD,wBAAwB,EAAE;YACxB,UAAU,EAAE,SAAS;SACtB;QACD,UAAU,EAAE;YACV,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;YACxB,UAAU,EAAE,kDAAkD;SAC/D;QACD,kBAAkB,EAAE;YAClB,SAAS,EAAE,gBAAgB;SAC5B;QACD,kBAAkB,EAAE;YAClB,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,YAAY;SACxB;QACD,OAAO,EAAE;YACP,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;SAC5B;QACD,OAAO,EAAE;YACP,OAAO,EAAE,CAAC;SACX;QACD,cAAc,EAAE;YACd,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;SAC5B;QACD,cAAc,EAAE;YACd,UAAU,EAAE,OAAO;YACnB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;YAC1B,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,OAAO;YAC1C,YAAY,EAAE,QAAQ;SACvB;QACD,OAAO,EAAE;YACP,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,eAAe;YAC/B,UAAU,EAAE,OAAO;SACpB;KACF,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/Accordion/styles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D,eAAe,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9B,YAAY,EAAE;QACZ,IAAI,EAAE;YACJ,YAAY,EAAE;gBACZ,MAAM,EAAE,CAAC;gBACT,UAAU,EAAE;oBACV,OAAO,EAAE,CAAC;iBACX;aACF;YACD,YAAY,EAAE;gBACZ,eAAe,EAAE,OAAO;aACzB;SACF;KACF;CACF,CAAC,CAAC,CAAA;AAEH,eAAe,CAAC,EAAE,OAAO,EAAE,UAAU,EAAS,EAAE,EAAE;IAChD,MAAM,eAAe,GAAG;QACtB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC;QACV,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;QACpC,QAAQ,EAAE,UAAU;KACrB,CAAA;IAED,OAAO,YAAY,CAAC;QAClB,IAAI,EAAE;YACJ,UAAU,EAAE,aAAa;YACzB,QAAQ,EAAE,MAAM;SACjB;QACD,UAAU,EAAE;YACV,mBAAmB,oBACd,eAAe,CACnB;YACD,sBAAsB,EAAE;gBACtB,OAAO,EAAE,OAAO;aACjB;YACD,kBAAkB,EAAE;gBAClB,OAAO,EAAE,MAAM;aAChB;SACF;QACD,aAAa,EAAE;YACb,UAAU,EAAE;gBACV,OAAO,EAAE,MAAM;aAChB;YACD,uBAAuB,kCAClB,eAAe,KAClB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,iBAAiB,GAC7B;SACF;QACD,WAAW,EAAE;YACX,mBAAmB,EAAE;gBACnB,OAAO,EAAE,MAAM;aAChB;SACF;QACD,wBAAwB,EAAE;YACxB,UAAU,EAAE,SAAS;SACtB;QACD,UAAU,EAAE;YACV,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;YACxB,UAAU,EAAE,kDAAkD;SAC/D;QACD,kBAAkB,EAAE;YAClB,SAAS,EAAE,gBAAgB;SAC5B;QACD,kBAAkB,EAAE;YAClB,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,YAAY;SACxB;QACD,cAAc,EAAE;YACd,WAAW,EAAE,OAAO;SACrB;QACD,OAAO,EAAE;YACP,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;SAC5B;QACD,OAAO,EAAE;YACP,OAAO,EAAE,CAAC;SACX;QACD,cAAc,EAAE;YACd,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;SAC5B;QACD,cAAc,EAAE;YACd,UAAU,EAAE,OAAO;YACnB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;YAC1B,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,OAAO;YAC1C,YAAY,EAAE,QAAQ;SACvB;QACD,OAAO,EAAE;YACP,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,KAAK;YACpB,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,eAAe;YAC/B,UAAU,EAAE,OAAO;SACpB;QACD,YAAY,EAAE;YACZ,cAAc,EAAE,QAAQ;SACzB;KACF,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toptal/picasso-accordion",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Toptal UI components library - Accordion",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
},
|
|
23
23
|
"homepage": "https://github.com/toptal/picasso/tree/master/packages/picasso#readme",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@toptal/picasso-button": "4.0.
|
|
25
|
+
"@toptal/picasso-button": "4.0.1",
|
|
26
26
|
"@toptal/picasso-icons": "1.6.0",
|
|
27
27
|
"@toptal/picasso-utils": "1.0.3",
|
|
28
28
|
"classnames": "^2.5.1"
|
|
@@ -18,6 +18,7 @@ import { AccordionDetails } from '../AccordionDetails'
|
|
|
18
18
|
import styles from './styles'
|
|
19
19
|
|
|
20
20
|
export type Borders = 'all' | 'middle' | 'none'
|
|
21
|
+
export type ExpandIconPlacement = 'left' | 'right'
|
|
21
22
|
|
|
22
23
|
const useStyles = makeStyles<Theme>(styles, {
|
|
23
24
|
name: 'PicassoAccordion',
|
|
@@ -44,6 +45,8 @@ export interface Props
|
|
|
44
45
|
disabled?: boolean
|
|
45
46
|
/** Customize icon indicating expanded status */
|
|
46
47
|
expandIcon?: ReactElement
|
|
48
|
+
/** Customize icon placement */
|
|
49
|
+
expandIconPlacement?: ExpandIconPlacement
|
|
47
50
|
/** Defines where the horizontal borders show */
|
|
48
51
|
borders?: Borders
|
|
49
52
|
/** Callback invoked when `Accordion` item is toggled */
|
|
@@ -75,6 +78,7 @@ export const Accordion = forwardRef<HTMLElement, Props>(function Accordion(
|
|
|
75
78
|
expanded,
|
|
76
79
|
defaultExpanded,
|
|
77
80
|
expandIcon,
|
|
81
|
+
expandIconPlacement = 'right',
|
|
78
82
|
borders,
|
|
79
83
|
disabled,
|
|
80
84
|
className,
|
|
@@ -110,6 +114,23 @@ export const Accordion = forwardRef<HTMLElement, Props>(function Accordion(
|
|
|
110
114
|
|
|
111
115
|
const appliedBorders = children || expanded ? (borders as Borders) : 'none'
|
|
112
116
|
|
|
117
|
+
const renderExpandIcon = (expandIconPosition: 'left' | 'right') => {
|
|
118
|
+
if (expandIcon) {
|
|
119
|
+
return decorateWithExpandIconClasses(expandIcon, expandIconClass)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return (
|
|
123
|
+
<div
|
|
124
|
+
className={cx({
|
|
125
|
+
[classes.expandIconAlignTop]: true,
|
|
126
|
+
[classes.expandIconLeft]: expandIconPosition === 'left',
|
|
127
|
+
})}
|
|
128
|
+
>
|
|
129
|
+
<ButtonAction icon={<ArrowDownMinor16 className={expandIconClass} />} />
|
|
130
|
+
</div>
|
|
131
|
+
)
|
|
132
|
+
}
|
|
133
|
+
|
|
113
134
|
return (
|
|
114
135
|
<MUIAccordion
|
|
115
136
|
{...rest}
|
|
@@ -129,22 +150,17 @@ export const Accordion = forwardRef<HTMLElement, Props>(function Accordion(
|
|
|
129
150
|
<AccordionSummary
|
|
130
151
|
classes={{
|
|
131
152
|
root: classes.summary,
|
|
132
|
-
content: classes.content
|
|
153
|
+
content: `${classes.content} ${
|
|
154
|
+
expandIconPlacement === 'left' ? classes.contentRight : ''
|
|
155
|
+
}`,
|
|
133
156
|
}}
|
|
134
157
|
expandIcon={null}
|
|
135
158
|
onClick={handleSummaryClick}
|
|
136
159
|
data-testid={testIds?.accordionSummary}
|
|
137
160
|
>
|
|
161
|
+
{expandIconPlacement === 'left' && renderExpandIcon('left')}
|
|
138
162
|
{children}
|
|
139
|
-
{
|
|
140
|
-
decorateWithExpandIconClasses(expandIcon, expandIconClass)
|
|
141
|
-
) : (
|
|
142
|
-
<div className={classes.expandIconAlignTop}>
|
|
143
|
-
<ButtonAction
|
|
144
|
-
icon={<ArrowDownMinor16 className={expandIconClass} />}
|
|
145
|
-
/>
|
|
146
|
-
</div>
|
|
147
|
-
)}
|
|
163
|
+
{expandIconPlacement === 'right' && renderExpandIcon('right')}
|
|
148
164
|
</AccordionSummary>
|
|
149
165
|
) : (
|
|
150
166
|
<EmptyAccordionSummary data-testid={testIds?.emptyAccordionSummary} />
|
|
@@ -229,3 +229,87 @@ exports[`Accordion renders disabled 1`] = `
|
|
|
229
229
|
</div>
|
|
230
230
|
</div>
|
|
231
231
|
`;
|
|
232
|
+
|
|
233
|
+
exports[`Accordion renders expand icon on the left if the \`expandIconPlacement\` prop is provided 1`] = `
|
|
234
|
+
<div>
|
|
235
|
+
<div
|
|
236
|
+
class="Picasso-root"
|
|
237
|
+
>
|
|
238
|
+
<div
|
|
239
|
+
class="MuiPaper-root MuiAccordion-root PicassoAccordion-root PicassoAccordion-bordersAll MuiAccordion-rounded MuiPaper-elevation0 MuiPaper-rounded"
|
|
240
|
+
>
|
|
241
|
+
<div
|
|
242
|
+
aria-disabled="false"
|
|
243
|
+
aria-expanded="false"
|
|
244
|
+
class="MuiButtonBase-root MuiAccordionSummary-root WithStyles(ForwardRef(AccordionSummary))-root PicassoAccordion-summary"
|
|
245
|
+
role="button"
|
|
246
|
+
tabindex="0"
|
|
247
|
+
>
|
|
248
|
+
<div
|
|
249
|
+
class="MuiAccordionSummary-content WithStyles(ForwardRef(AccordionSummary))-content PicassoAccordion-content PicassoAccordion-contentRight"
|
|
250
|
+
>
|
|
251
|
+
<div
|
|
252
|
+
class="PicassoAccordion-expandIconAlignTop PicassoAccordion-expandIconLeft"
|
|
253
|
+
>
|
|
254
|
+
<button
|
|
255
|
+
aria-disabled="false"
|
|
256
|
+
class="base-Button text-lg inline-flex items-center justify-center select-none appearance-none m-0 relative normal-case align-middle transition-colors duration-350 ease-out shrink-0 outline-none [&+&]:ml-4 cursor-pointer border-none px-0 bg-transparent h-[1.5em] hover:text-blue hover:underline active:text-blue active:underline focus-visible:shadow-[0_0_0_3px_rgba(32,78,207,0.48)] focus-visible:rounded-sm"
|
|
257
|
+
data-component-type="button"
|
|
258
|
+
role="button"
|
|
259
|
+
tabindex="0"
|
|
260
|
+
type="button"
|
|
261
|
+
>
|
|
262
|
+
<span
|
|
263
|
+
class="items-center inline-flex font-semibold text-blue text-md"
|
|
264
|
+
>
|
|
265
|
+
<svg
|
|
266
|
+
class="PicassoSvgArrowDownMinor16-root text-[1.2em] flex-1 w-4 h-4 text-graphite PicassoAccordion-expandIcon"
|
|
267
|
+
style="min-width: 16px; min-height: 16px;"
|
|
268
|
+
viewBox="0 0 16 16"
|
|
269
|
+
>
|
|
270
|
+
<path
|
|
271
|
+
d="m11.997 5.29.707.707-4 4-.707.707-.707-.707-4-4 .707-.707 4 4 4-4Z"
|
|
272
|
+
/>
|
|
273
|
+
</svg>
|
|
274
|
+
</span>
|
|
275
|
+
</button>
|
|
276
|
+
</div>
|
|
277
|
+
<div
|
|
278
|
+
class="PicassoAccordion-summaryWrapper"
|
|
279
|
+
data-testid="accordion-summary"
|
|
280
|
+
>
|
|
281
|
+
What is a dog?
|
|
282
|
+
</div>
|
|
283
|
+
</div>
|
|
284
|
+
</div>
|
|
285
|
+
<div
|
|
286
|
+
class="MuiCollapse-root MuiCollapse-hidden"
|
|
287
|
+
style="min-height: 0px;"
|
|
288
|
+
>
|
|
289
|
+
<div
|
|
290
|
+
class="MuiCollapse-wrapper"
|
|
291
|
+
>
|
|
292
|
+
<div
|
|
293
|
+
class="MuiCollapse-wrapperInner"
|
|
294
|
+
>
|
|
295
|
+
<div
|
|
296
|
+
role="region"
|
|
297
|
+
>
|
|
298
|
+
<div
|
|
299
|
+
class="flex p-0"
|
|
300
|
+
>
|
|
301
|
+
<div
|
|
302
|
+
class="PicassoAccordion-detailsWrapper"
|
|
303
|
+
data-testid="accordion-details"
|
|
304
|
+
>
|
|
305
|
+
A dog is a type of domesticated animal. Known for its loyalty and faithfulness, it can be found as a welcome guest in many households across the world.
|
|
306
|
+
</div>
|
|
307
|
+
</div>
|
|
308
|
+
</div>
|
|
309
|
+
</div>
|
|
310
|
+
</div>
|
|
311
|
+
</div>
|
|
312
|
+
</div>
|
|
313
|
+
</div>
|
|
314
|
+
</div>
|
|
315
|
+
`;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Accordion, Grid } from '@toptal/picasso'
|
|
3
|
+
|
|
4
|
+
const Example = () => (
|
|
5
|
+
<Grid>
|
|
6
|
+
<Grid.Item sm={6}>
|
|
7
|
+
<Accordion
|
|
8
|
+
expandIconPlacement='left'
|
|
9
|
+
defaultExpanded
|
|
10
|
+
content={<DetailsDogDefinitionPanel />}
|
|
11
|
+
>
|
|
12
|
+
<Accordion.Summary>What is a dog?</Accordion.Summary>
|
|
13
|
+
</Accordion>
|
|
14
|
+
</Grid.Item>
|
|
15
|
+
</Grid>
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
const DetailsDogDefinitionPanel = () => (
|
|
19
|
+
<Accordion.Details>
|
|
20
|
+
A dog is a type of domesticated animal. Known for its loyalty and
|
|
21
|
+
faithfulness, it can be found as a welcome guest in many households across
|
|
22
|
+
the world.
|
|
23
|
+
</Accordion.Details>
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
export default Example
|
|
@@ -53,6 +53,15 @@ page
|
|
|
53
53
|
},
|
|
54
54
|
'base/Accordion'
|
|
55
55
|
)
|
|
56
|
+
.addExample(
|
|
57
|
+
'Accordion/story/ExpandIconPlacement.example.tsx',
|
|
58
|
+
{
|
|
59
|
+
title: 'Expand Icon Placement',
|
|
60
|
+
description:
|
|
61
|
+
'Accordion expand icon is placed to the right until the `expandIconPlacement` prop is set to `left`.',
|
|
62
|
+
},
|
|
63
|
+
'base/Accordion'
|
|
64
|
+
)
|
|
56
65
|
.addExample(
|
|
57
66
|
'Accordion/story/BorderedGroups.example.tsx',
|
|
58
67
|
{
|
package/src/Accordion/styles.ts
CHANGED
|
@@ -78,6 +78,9 @@ export default ({ palette, typography }: Theme) => {
|
|
|
78
78
|
height: '1.5em',
|
|
79
79
|
alignSelf: 'flex-start',
|
|
80
80
|
},
|
|
81
|
+
expandIconLeft: {
|
|
82
|
+
marginRight: '0.5em',
|
|
83
|
+
},
|
|
81
84
|
summary: {
|
|
82
85
|
color: palette.common.black,
|
|
83
86
|
},
|
|
@@ -101,5 +104,8 @@ export default ({ palette, typography }: Theme) => {
|
|
|
101
104
|
justifyContent: 'space-between',
|
|
102
105
|
lineHeight: '1.5em',
|
|
103
106
|
},
|
|
107
|
+
contentRight: {
|
|
108
|
+
justifyContent: 'normal',
|
|
109
|
+
},
|
|
104
110
|
})
|
|
105
111
|
}
|
package/src/Accordion/test.tsx
CHANGED
|
@@ -77,6 +77,12 @@ describe('Accordion', () => {
|
|
|
77
77
|
expect(handleChange).toHaveBeenCalledTimes(3)
|
|
78
78
|
})
|
|
79
79
|
|
|
80
|
+
it('renders expand icon on the left if the `expandIconPlacement` prop is provided', () => {
|
|
81
|
+
const { container } = renderAccordion({ expandIconPlacement: 'left' })
|
|
82
|
+
|
|
83
|
+
expect(container).toMatchSnapshot()
|
|
84
|
+
})
|
|
85
|
+
|
|
80
86
|
it('renders disabled', async () => {
|
|
81
87
|
const { container } = renderAccordion({ disabled: true })
|
|
82
88
|
|