UNPKG

materialuiupgraded

Version:

Material-UI's workspace package

96 lines (88 loc) 2.56 kB
import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import CheckCircle from '../internal/svg-icons/CheckCircle'; import Warning from '../internal/svg-icons/Warning'; import withStyles from '../styles/withStyles'; import SvgIcon from '../SvgIcon'; export const styles = theme => ({ /* Styles applied to the root element. */ root: { display: 'block', color: theme.palette.text.disabled, '&$active': { color: theme.palette.primary.main, }, '&$completed': { color: theme.palette.primary.main, }, '&$error': { color: theme.palette.error.main, }, }, /* Styles applied to the SVG text element. */ text: { fill: theme.palette.primary.contrastText, fontSize: theme.typography.caption.fontSize, fontFamily: theme.typography.fontFamily, }, /* Styles applied to the root element if `active={true}`. */ active: {}, /* Styles applied to the root element if `completed={true}`. */ completed: {}, /* Styles applied to the root element if `error={true}`. */ error: {}, }); function StepIcon(props) { const { completed, icon, active, error, classes } = props; if (typeof icon === 'number' || typeof icon === 'string') { if (error) { return <Warning className={classNames(classes.root, classes.error)} />; } if (completed) { return <CheckCircle className={classNames(classes.root, classes.completed)} />; } return ( <SvgIcon className={classNames(classes.root, { [classes.active]: active, })} > <circle cx="12" cy="12" r="12" /> <text className={classes.text} x="12" y="16" textAnchor="middle"> {icon} </text> </SvgIcon> ); } return icon; } StepIcon.propTypes = { /** * Whether this step is active. */ active: PropTypes.bool, /** * Override or extend the styles applied to the component. * See [CSS API](#css-api) below for more details. */ classes: PropTypes.object.isRequired, /** * Mark the step as completed. Is passed to child components. */ completed: PropTypes.bool, /** * Mark the step as failed. */ error: PropTypes.bool, /** * The icon displayed by the step label. */ icon: PropTypes.node.isRequired, }; StepIcon.defaultProps = { active: false, completed: false, error: false, }; export default withStyles(styles, { name: 'MuiStepIcon' })(StepIcon);