UNPKG

11 kBJavaScriptView Raw
1"use strict";
2'use client';
3
4var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6Object.defineProperty(exports, "__esModule", {
7 value: true
8});
9exports.default = void 0;
10var React = _interopRequireWildcard(require("react"));
11var _reactIs = require("react-is");
12var _propTypes = _interopRequireDefault(require("prop-types"));
13var _clsx = _interopRequireDefault(require("clsx"));
14var _chainPropTypes = _interopRequireDefault(require("@mui/utils/chainPropTypes"));
15var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
16var _zeroStyled = require("../zero-styled");
17var _memoTheme = _interopRequireDefault(require("../utils/memoTheme"));
18var _DefaultPropsProvider = require("../DefaultPropsProvider");
19var _Collapse = _interopRequireDefault(require("../Collapse"));
20var _Paper = _interopRequireDefault(require("../Paper"));
21var _AccordionContext = _interopRequireDefault(require("./AccordionContext"));
22var _useControlled = _interopRequireDefault(require("../utils/useControlled"));
23var _useSlot = _interopRequireDefault(require("../utils/useSlot"));
24var _accordionClasses = _interopRequireWildcard(require("./accordionClasses"));
25var _jsxRuntime = require("react/jsx-runtime");
26const useUtilityClasses = ownerState => {
27 const {
28 classes,
29 square,
30 expanded,
31 disabled,
32 disableGutters
33 } = ownerState;
34 const slots = {
35 root: ['root', !square && 'rounded', expanded && 'expanded', disabled && 'disabled', !disableGutters && 'gutters'],
36 heading: ['heading'],
37 region: ['region']
38 };
39 return (0, _composeClasses.default)(slots, _accordionClasses.getAccordionUtilityClass, classes);
40};
41const AccordionRoot = (0, _zeroStyled.styled)(_Paper.default, {
42 name: 'MuiAccordion',
43 slot: 'Root',
44 overridesResolver: (props, styles) => {
45 const {
46 ownerState
47 } = props;
48 return [{
49 [`& .${_accordionClasses.default.region}`]: styles.region
50 }, styles.root, !ownerState.square && styles.rounded, !ownerState.disableGutters && styles.gutters];
51 }
52})((0, _memoTheme.default)(({
53 theme
54}) => {
55 const transition = {
56 duration: theme.transitions.duration.shortest
57 };
58 return {
59 position: 'relative',
60 transition: theme.transitions.create(['margin'], transition),
61 overflowAnchor: 'none',
62 // Keep the same scrolling position
63 '&::before': {
64 position: 'absolute',
65 left: 0,
66 top: -1,
67 right: 0,
68 height: 1,
69 content: '""',
70 opacity: 1,
71 backgroundColor: (theme.vars || theme).palette.divider,
72 transition: theme.transitions.create(['opacity', 'background-color'], transition)
73 },
74 '&:first-of-type': {
75 '&::before': {
76 display: 'none'
77 }
78 },
79 [`&.${_accordionClasses.default.expanded}`]: {
80 '&::before': {
81 opacity: 0
82 },
83 '&:first-of-type': {
84 marginTop: 0
85 },
86 '&:last-of-type': {
87 marginBottom: 0
88 },
89 '& + &': {
90 '&::before': {
91 display: 'none'
92 }
93 }
94 },
95 [`&.${_accordionClasses.default.disabled}`]: {
96 backgroundColor: (theme.vars || theme).palette.action.disabledBackground
97 }
98 };
99}), (0, _memoTheme.default)(({
100 theme
101}) => ({
102 variants: [{
103 props: props => !props.square,
104 style: {
105 borderRadius: 0,
106 '&:first-of-type': {
107 borderTopLeftRadius: (theme.vars || theme).shape.borderRadius,
108 borderTopRightRadius: (theme.vars || theme).shape.borderRadius
109 },
110 '&:last-of-type': {
111 borderBottomLeftRadius: (theme.vars || theme).shape.borderRadius,
112 borderBottomRightRadius: (theme.vars || theme).shape.borderRadius,
113 // Fix a rendering issue on Edge
114 '@supports (-ms-ime-align: auto)': {
115 borderBottomLeftRadius: 0,
116 borderBottomRightRadius: 0
117 }
118 }
119 }
120 }, {
121 props: props => !props.disableGutters,
122 style: {
123 [`&.${_accordionClasses.default.expanded}`]: {
124 margin: '16px 0'
125 }
126 }
127 }]
128})));
129const AccordionHeading = (0, _zeroStyled.styled)('h3', {
130 name: 'MuiAccordion',
131 slot: 'Heading',
132 overridesResolver: (props, styles) => styles.heading
133})({
134 all: 'unset'
135});
136const Accordion = /*#__PURE__*/React.forwardRef(function Accordion(inProps, ref) {
137 const props = (0, _DefaultPropsProvider.useDefaultProps)({
138 props: inProps,
139 name: 'MuiAccordion'
140 });
141 const {
142 children: childrenProp,
143 className,
144 defaultExpanded = false,
145 disabled = false,
146 disableGutters = false,
147 expanded: expandedProp,
148 onChange,
149 square = false,
150 slots = {},
151 slotProps = {},
152 TransitionComponent: TransitionComponentProp,
153 TransitionProps: TransitionPropsProp,
154 ...other
155 } = props;
156 const [expanded, setExpandedState] = (0, _useControlled.default)({
157 controlled: expandedProp,
158 default: defaultExpanded,
159 name: 'Accordion',
160 state: 'expanded'
161 });
162 const handleChange = React.useCallback(event => {
163 setExpandedState(!expanded);
164 if (onChange) {
165 onChange(event, !expanded);
166 }
167 }, [expanded, onChange, setExpandedState]);
168 const [summary, ...children] = React.Children.toArray(childrenProp);
169 const contextValue = React.useMemo(() => ({
170 expanded,
171 disabled,
172 disableGutters,
173 toggle: handleChange
174 }), [expanded, disabled, disableGutters, handleChange]);
175 const ownerState = {
176 ...props,
177 square,
178 disabled,
179 disableGutters,
180 expanded
181 };
182 const classes = useUtilityClasses(ownerState);
183 const backwardCompatibleSlots = {
184 transition: TransitionComponentProp,
185 ...slots
186 };
187 const backwardCompatibleSlotProps = {
188 transition: TransitionPropsProp,
189 ...slotProps
190 };
191 const externalForwardedProps = {
192 slots: backwardCompatibleSlots,
193 slotProps: backwardCompatibleSlotProps
194 };
195 const [AccordionHeadingSlot, accordionProps] = (0, _useSlot.default)('heading', {
196 elementType: AccordionHeading,
197 externalForwardedProps,
198 className: classes.heading,
199 ownerState
200 });
201 const [TransitionSlot, transitionProps] = (0, _useSlot.default)('transition', {
202 elementType: _Collapse.default,
203 externalForwardedProps,
204 ownerState
205 });
206 return /*#__PURE__*/(0, _jsxRuntime.jsxs)(AccordionRoot, {
207 className: (0, _clsx.default)(classes.root, className),
208 ref: ref,
209 ownerState: ownerState,
210 square: square,
211 ...other,
212 children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(AccordionHeadingSlot, {
213 ...accordionProps,
214 children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_AccordionContext.default.Provider, {
215 value: contextValue,
216 children: summary
217 })
218 }), /*#__PURE__*/(0, _jsxRuntime.jsx)(TransitionSlot, {
219 in: expanded,
220 timeout: "auto",
221 ...transitionProps,
222 children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
223 "aria-labelledby": summary.props.id,
224 id: summary.props['aria-controls'],
225 role: "region",
226 className: classes.region,
227 children: children
228 })
229 })]
230 });
231});
232process.env.NODE_ENV !== "production" ? Accordion.propTypes /* remove-proptypes */ = {
233 // ┌────────────────────────────── Warning ──────────────────────────────┐
234 // │ These PropTypes are generated from the TypeScript type definitions. │
235 // │ To update them, edit the d.ts file and run `pnpm proptypes`. │
236 // └─────────────────────────────────────────────────────────────────────┘
237 /**
238 * The content of the component.
239 */
240 children: (0, _chainPropTypes.default)(_propTypes.default.node.isRequired, props => {
241 const summary = React.Children.toArray(props.children)[0];
242 if ((0, _reactIs.isFragment)(summary)) {
243 return new Error("MUI: The Accordion doesn't accept a Fragment as a child. " + 'Consider providing an array instead.');
244 }
245 if (! /*#__PURE__*/React.isValidElement(summary)) {
246 return new Error('MUI: Expected the first child of Accordion to be a valid element.');
247 }
248 return null;
249 }),
250 /**
251 * Override or extend the styles applied to the component.
252 */
253 classes: _propTypes.default.object,
254 /**
255 * @ignore
256 */
257 className: _propTypes.default.string,
258 /**
259 * If `true`, expands the accordion by default.
260 * @default false
261 */
262 defaultExpanded: _propTypes.default.bool,
263 /**
264 * If `true`, the component is disabled.
265 * @default false
266 */
267 disabled: _propTypes.default.bool,
268 /**
269 * If `true`, it removes the margin between two expanded accordion items and the increase of height.
270 * @default false
271 */
272 disableGutters: _propTypes.default.bool,
273 /**
274 * If `true`, expands the accordion, otherwise collapse it.
275 * Setting this prop enables control over the accordion.
276 */
277 expanded: _propTypes.default.bool,
278 /**
279 * Callback fired when the expand/collapse state is changed.
280 *
281 * @param {React.SyntheticEvent} event The event source of the callback. **Warning**: This is a generic event not a change event.
282 * @param {boolean} expanded The `expanded` state of the accordion.
283 */
284 onChange: _propTypes.default.func,
285 /**
286 * The props used for each slot inside.
287 * @default {}
288 */
289 slotProps: _propTypes.default.shape({
290 heading: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
291 transition: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object])
292 }),
293 /**
294 * The components used for each slot inside.
295 * @default {}
296 */
297 slots: _propTypes.default.shape({
298 heading: _propTypes.default.elementType,
299 transition: _propTypes.default.elementType
300 }),
301 /**
302 * If `true`, rounded corners are disabled.
303 * @default false
304 */
305 square: _propTypes.default.bool,
306 /**
307 * The system prop that allows defining system overrides as well as additional CSS styles.
308 */
309 sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
310 /**
311 * The component used for the transition.
312 * [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.
313 */
314 TransitionComponent: _propTypes.default.elementType,
315 /**
316 * Props applied to the transition element.
317 * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
318 */
319 TransitionProps: _propTypes.default.object
320} : void 0;
321var _default = exports.default = Accordion;
\No newline at end of file