UNPKG

@mui/material

Version:

Quickly build beautiful React apps. MUI is a simple and customizable component library to build faster, beautiful, and more accessible React applications. Follow your own design system, or start with Material Design.

141 lines (129 loc) 3.97 kB
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; import _extends from "@babel/runtime/helpers/esm/extends"; const _excluded = ["children", "className", "icon", "optional"]; import * as React from 'react'; import PropTypes from 'prop-types'; import clsx from 'clsx'; import { unstable_composeClasses as composeClasses } from '@mui/base'; import styled from '../styles/styled'; import useThemeProps from '../styles/useThemeProps'; import ButtonBase from '../ButtonBase'; import StepLabel from '../StepLabel'; import isMuiElement from '../utils/isMuiElement'; import StepperContext from '../Stepper/StepperContext'; import StepContext from '../Step/StepContext'; import stepButtonClasses, { getStepButtonUtilityClass } from './stepButtonClasses'; import { jsx as _jsx } from "react/jsx-runtime"; const useUtilityClasses = ownerState => { const { classes, orientation } = ownerState; const slots = { root: ['root', orientation], touchRipple: ['touchRipple'] }; return composeClasses(slots, getStepButtonUtilityClass, classes); }; const StepButtonRoot = styled(ButtonBase, { name: 'MuiStepButton', slot: 'Root', overridesResolver: (props, styles) => { const { ownerState } = props; return [{ [`& .${stepButtonClasses.touchRipple}`]: styles.touchRipple }, styles.root, styles[ownerState.orientation]]; } })(({ ownerState }) => _extends({ width: '100%', padding: '24px 16px', margin: '-24px -16px', boxSizing: 'content-box' }, ownerState.orientation === 'vertical' && { justifyContent: 'flex-start', padding: '8px', margin: '-8px' }, { [`& .${stepButtonClasses.touchRipple}`]: { color: 'rgba(0, 0, 0, 0.3)' } })); const StepButton = /*#__PURE__*/React.forwardRef(function StepButton(inProps, ref) { const props = useThemeProps({ props: inProps, name: 'MuiStepButton' }); const { children, className, icon, optional } = props, other = _objectWithoutPropertiesLoose(props, _excluded); const { disabled } = React.useContext(StepContext); const { orientation } = React.useContext(StepperContext); const ownerState = _extends({}, props, { orientation }); const classes = useUtilityClasses(ownerState); const childProps = { icon, optional }; const child = isMuiElement(children, ['StepLabel']) ? /*#__PURE__*/React.cloneElement(children, childProps) : /*#__PURE__*/_jsx(StepLabel, _extends({}, childProps, { children: children })); return /*#__PURE__*/_jsx(StepButtonRoot, _extends({ focusRipple: true, disabled: disabled, TouchRippleProps: { className: classes.touchRipple }, className: clsx(classes.root, className), ref: ref, ownerState: ownerState }, other, { children: child })); }); process.env.NODE_ENV !== "production" ? StepButton.propTypes /* remove-proptypes */ = { // ----------------------------- Warning -------------------------------- // | These PropTypes are generated from the TypeScript type definitions | // | To update them edit the d.ts file and run "yarn proptypes" | // ---------------------------------------------------------------------- /** * Can be a `StepLabel` or a node to place inside `StepLabel` as children. */ children: PropTypes.node, /** * Override or extend the styles applied to the component. */ classes: PropTypes.object, /** * @ignore */ className: PropTypes.string, /** * The icon displayed by the step label. */ icon: PropTypes.node, /** * The optional node to display. */ optional: PropTypes.node, /** * The system prop that allows defining system overrides as well as additional CSS styles. */ sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]) } : void 0; export default StepButton;