UNPKG

6.08 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.default = exports.styles = void 0;
9
10var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
12var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
14var _react = _interopRequireDefault(require("react"));
15
16var _propTypes = _interopRequireDefault(require("prop-types"));
17
18var _clsx = _interopRequireDefault(require("clsx"));
19
20var _ButtonBase = _interopRequireDefault(require("../ButtonBase"));
21
22var _IconButton = _interopRequireDefault(require("../IconButton"));
23
24var _withStyles = _interopRequireDefault(require("../styles/withStyles"));
25
26var _ExpansionPanelContext = _interopRequireDefault(require("../ExpansionPanel/ExpansionPanelContext"));
27
28/* eslint-disable jsx-a11y/aria-role */
29var styles = function styles(theme) {
30 var transition = {
31 duration: theme.transitions.duration.shortest
32 };
33 return {
34 /* Styles applied to the root element. */
35 root: {
36 display: 'flex',
37 minHeight: 8 * 6,
38 transition: theme.transitions.create(['min-height', 'background-color'], transition),
39 padding: '0 24px 0 24px',
40 '&:hover:not($disabled)': {
41 cursor: 'pointer'
42 },
43 '&$expanded': {
44 minHeight: 64
45 },
46 '&$focused': {
47 backgroundColor: theme.palette.grey[300]
48 },
49 '&$disabled': {
50 opacity: 0.38
51 }
52 },
53
54 /* Pseudo-class applied to the root element, children wrapper element and `IconButton` component if `expanded={true}`. */
55 expanded: {},
56
57 /* Pseudo-class applied to the root element if `focused={true}`. */
58 focused: {},
59
60 /* Pseudo-class applied to the root element if `disabled={true}`. */
61 disabled: {},
62
63 /* Styles applied to the children wrapper element. */
64 content: {
65 display: 'flex',
66 flexGrow: 1,
67 transition: theme.transitions.create(['margin'], transition),
68 margin: '12px 0',
69 '&$expanded': {
70 margin: '20px 0'
71 }
72 },
73
74 /* Styles applied to the `IconButton` component when `expandIcon` is supplied. */
75 expandIcon: {
76 transform: 'rotate(0deg)',
77 transition: theme.transitions.create('transform', transition),
78 '&:hover': {
79 // Disable the hover effect for the IconButton,
80 // because a hover effect should apply to the entire Expand button and
81 // not only to the IconButton.
82 backgroundColor: 'transparent'
83 },
84 '&$expanded': {
85 transform: 'rotate(180deg)'
86 }
87 }
88 };
89};
90
91exports.styles = styles;
92
93var ExpansionPanelSummary = _react.default.forwardRef(function ExpansionPanelSummary(props, ref) {
94 var children = props.children,
95 classes = props.classes,
96 className = props.className,
97 expandIcon = props.expandIcon,
98 IconButtonProps = props.IconButtonProps,
99 onBlur = props.onBlur,
100 onClick = props.onClick,
101 onFocusVisible = props.onFocusVisible,
102 other = (0, _objectWithoutProperties2.default)(props, ["children", "classes", "className", "expandIcon", "IconButtonProps", "onBlur", "onClick", "onFocusVisible"]);
103
104 var _React$useState = _react.default.useState(false),
105 focusedState = _React$useState[0],
106 setFocusedState = _React$useState[1];
107
108 var handleFocusVisible = function handleFocusVisible(event) {
109 setFocusedState(true);
110
111 if (onFocusVisible) {
112 onFocusVisible(event);
113 }
114 };
115
116 var handleBlur = function handleBlur(event) {
117 setFocusedState(false);
118
119 if (onBlur) {
120 onBlur(event);
121 }
122 };
123
124 var _React$useContext = _react.default.useContext(_ExpansionPanelContext.default),
125 _React$useContext$dis = _React$useContext.disabled,
126 disabled = _React$useContext$dis === void 0 ? false : _React$useContext$dis,
127 expanded = _React$useContext.expanded,
128 toggle = _React$useContext.toggle;
129
130 var handleChange = function handleChange(event) {
131 if (toggle) {
132 toggle(event);
133 }
134
135 if (onClick) {
136 onClick(event);
137 }
138 };
139
140 return _react.default.createElement(_ButtonBase.default, (0, _extends2.default)({
141 focusRipple: false,
142 disableRipple: true,
143 disabled: disabled,
144 component: "div",
145 "aria-expanded": expanded,
146 className: (0, _clsx.default)(classes.root, className, disabled && classes.disabled, expanded && classes.expanded, focusedState && classes.focused),
147 onFocusVisible: handleFocusVisible,
148 onBlur: handleBlur,
149 onClick: handleChange,
150 ref: ref
151 }, other), _react.default.createElement("div", {
152 className: (0, _clsx.default)(classes.content, expanded && classes.expanded)
153 }, children), expandIcon && _react.default.createElement(_IconButton.default, (0, _extends2.default)({
154 className: (0, _clsx.default)(classes.expandIcon, expanded && classes.expanded),
155 edge: "end",
156 component: "div",
157 tabIndex: null,
158 role: null,
159 "aria-hidden": true
160 }, IconButtonProps), expandIcon));
161});
162
163process.env.NODE_ENV !== "production" ? ExpansionPanelSummary.propTypes = {
164 /**
165 * The content of the expansion panel summary.
166 */
167 children: _propTypes.default.node,
168
169 /**
170 * Override or extend the styles applied to the component.
171 * See [CSS API](#css) below for more details.
172 */
173 classes: _propTypes.default.object.isRequired,
174
175 /**
176 * @ignore
177 */
178 className: _propTypes.default.string,
179
180 /**
181 * The icon to display as the expand indicator.
182 */
183 expandIcon: _propTypes.default.node,
184
185 /**
186 * Props applied to the `IconButton` element wrapping the expand icon.
187 */
188 IconButtonProps: _propTypes.default.object,
189
190 /**
191 * @ignore
192 */
193 onBlur: _propTypes.default.func,
194
195 /**
196 * @ignore
197 */
198 onClick: _propTypes.default.func,
199
200 /**
201 * @ignore
202 */
203 onFocusVisible: _propTypes.default.func
204} : void 0;
205
206var _default = (0, _withStyles.default)(styles, {
207 name: 'MuiExpansionPanelSummary'
208})(ExpansionPanelSummary);
209
210exports.default = _default;
\No newline at end of file