UNPKG

@mui/material

Version:

Material UI is an open-source React component library that implements Google's Material Design. It's comprehensive and can be used in production out of the box.

217 lines (213 loc) 7.2 kB
"use strict"; 'use client'; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var React = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactTransitionGroup = require("react-transition-group"); var _elementAcceptingRef = _interopRequireDefault(require("@mui/utils/elementAcceptingRef")); var _getReactElementRef = _interopRequireDefault(require("@mui/utils/getReactElementRef")); var _zeroStyled = require("../zero-styled"); var _utils = require("../transitions/utils"); var _useForkRef = _interopRequireDefault(require("../utils/useForkRef")); var _jsxRuntime = require("react/jsx-runtime"); const styles = { entering: { transform: 'none' }, entered: { transform: 'none' } }; /** * The Zoom transition can be used for the floating variant of the * [Button](/material-ui/react-button/#floating-action-buttons) component. * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally. */ const Zoom = /*#__PURE__*/React.forwardRef(function Zoom(props, ref) { const theme = (0, _zeroStyled.useTheme)(); const defaultTimeout = { enter: theme.transitions.duration.enteringScreen, exit: theme.transitions.duration.leavingScreen }; const { addEndListener, appear = true, children, easing, in: inProp, onEnter, onEntered, onEntering, onExit, onExited, onExiting, style, timeout = defaultTimeout, // eslint-disable-next-line react/prop-types TransitionComponent = _reactTransitionGroup.Transition, ...other } = props; const nodeRef = React.useRef(null); const handleRef = (0, _useForkRef.default)(nodeRef, (0, _getReactElementRef.default)(children), ref); const normalizedTransitionCallback = callback => maybeIsAppearing => { if (callback) { const node = nodeRef.current; // onEnterXxx and onExitXxx callbacks have a different arguments.length value. if (maybeIsAppearing === undefined) { callback(node); } else { callback(node, maybeIsAppearing); } } }; const handleEntering = normalizedTransitionCallback(onEntering); const handleEnter = normalizedTransitionCallback((node, isAppearing) => { (0, _utils.reflow)(node); // So the animation always start from the start. const transitionProps = (0, _utils.getTransitionProps)({ style, timeout, easing }, { mode: 'enter' }); node.style.webkitTransition = theme.transitions.create('transform', transitionProps); node.style.transition = theme.transitions.create('transform', transitionProps); if (onEnter) { onEnter(node, isAppearing); } }); const handleEntered = normalizedTransitionCallback(onEntered); const handleExiting = normalizedTransitionCallback(onExiting); const handleExit = normalizedTransitionCallback(node => { const transitionProps = (0, _utils.getTransitionProps)({ style, timeout, easing }, { mode: 'exit' }); node.style.webkitTransition = theme.transitions.create('transform', transitionProps); node.style.transition = theme.transitions.create('transform', transitionProps); if (onExit) { onExit(node); } }); const handleExited = normalizedTransitionCallback(onExited); const handleAddEndListener = next => { if (addEndListener) { // Old call signature before `react-transition-group` implemented `nodeRef` addEndListener(nodeRef.current, next); } }; return /*#__PURE__*/(0, _jsxRuntime.jsx)(TransitionComponent, { appear: appear, in: inProp, nodeRef: nodeRef, onEnter: handleEnter, onEntered: handleEntered, onEntering: handleEntering, onExit: handleExit, onExited: handleExited, onExiting: handleExiting, addEndListener: handleAddEndListener, timeout: timeout, ...other, children: (state, { ownerState, ...restChildProps }) => { return /*#__PURE__*/React.cloneElement(children, { style: { transform: 'scale(0)', visibility: state === 'exited' && !inProp ? 'hidden' : undefined, ...styles[state], ...style, ...children.props.style }, ref: handleRef, ...restChildProps }); } }); }); process.env.NODE_ENV !== "production" ? Zoom.propTypes /* remove-proptypes */ = { // ┌────────────────────────────── Warning ──────────────────────────────┐ // │ These PropTypes are generated from the TypeScript type definitions. │ // │ To update them, edit the d.ts file and run `pnpm proptypes`. │ // └─────────────────────────────────────────────────────────────────────┘ /** * Add a custom transition end trigger. Called with the transitioning DOM * node and a done callback. Allows for more fine grained transition end * logic. Note: Timeouts are still used as a fallback if provided. */ addEndListener: _propTypes.default.func, /** * Perform the enter transition when it first mounts if `in` is also `true`. * Set this to `false` to disable this behavior. * @default true */ appear: _propTypes.default.bool, /** * A single child content element. */ children: _elementAcceptingRef.default.isRequired, /** * The transition timing function. * You may specify a single easing or a object containing enter and exit values. */ easing: _propTypes.default.oneOfType([_propTypes.default.shape({ enter: _propTypes.default.string, exit: _propTypes.default.string }), _propTypes.default.string]), /** * If `true`, the component will transition in. */ in: _propTypes.default.bool, /** * @ignore */ onEnter: _propTypes.default.func, /** * @ignore */ onEntered: _propTypes.default.func, /** * @ignore */ onEntering: _propTypes.default.func, /** * @ignore */ onExit: _propTypes.default.func, /** * @ignore */ onExited: _propTypes.default.func, /** * @ignore */ onExiting: _propTypes.default.func, /** * @ignore */ style: _propTypes.default.object, /** * The duration for the transition, in milliseconds. * You may specify a single timeout for all transitions, or individually with an object. * @default { * enter: theme.transitions.duration.enteringScreen, * exit: theme.transitions.duration.leavingScreen, * } */ timeout: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.shape({ appear: _propTypes.default.number, enter: _propTypes.default.number, exit: _propTypes.default.number })]) } : void 0; var _default = exports.default = Zoom;