UNPKG

@material-ui/lab

Version:

Material-UI Lab - Incubator for Material-UI React components.

197 lines (169 loc) 5.79 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.styles = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var React = _interopRequireWildcard(require("react")); var _clsx = _interopRequireDefault(require("clsx")); var _propTypes = _interopRequireDefault(require("prop-types")); var _styles = require("@material-ui/core/styles"); var styles = function styles(theme) { return { /* Styles applied to the root element. */ root: { display: 'block', // Create a "on paper" color with sufficient contrast retaining the color backgroundColor: (0, _styles.alpha)(theme.palette.text.primary, theme.palette.type === 'light' ? 0.11 : 0.13), height: '1.2em' }, /* Styles applied to the root element if `variant="text"`. */ text: { marginTop: 0, marginBottom: 0, height: 'auto', transformOrigin: '0 60%', transform: 'scale(1, 0.60)', borderRadius: theme.shape.borderRadius, '&:empty:before': { content: '"\\00a0"' } }, /* Styles applied to the root element if `variant="rect"`. */ rect: {}, /* Styles applied to the root element if `variant="circle"`. */ circle: { borderRadius: '50%' }, /* Styles applied to the root element if `animation="pulse"`. */ pulse: { animation: '$pulse 1.5s ease-in-out 0.5s infinite' }, '@keyframes pulse': { '0%': { opacity: 1 }, '50%': { opacity: 0.4 }, '100%': { opacity: 1 } }, /* Styles applied to the root element if `animation="wave"`. */ wave: { position: 'relative', overflow: 'hidden', '&::after': { animation: '$wave 1.6s linear 0.5s infinite', background: "linear-gradient(90deg, transparent, ".concat(theme.palette.action.hover, ", transparent)"), content: '""', position: 'absolute', transform: 'translateX(-100%)', // Avoid flash during server-side hydration bottom: 0, left: 0, right: 0, top: 0 } }, '@keyframes wave': { '0%': { transform: 'translateX(-100%)' }, '60%': { // +0.5s of delay between each loop transform: 'translateX(100%)' }, '100%': { transform: 'translateX(100%)' } }, /* Styles applied when the component is passed children. */ withChildren: { '& > *': { visibility: 'hidden' } }, /* Styles applied when the component is passed children and no width. */ fitContent: { maxWidth: 'fit-content' }, /* Styles applied when the component is passed children and no height. */ heightAuto: { height: 'auto' } }; }; exports.styles = styles; var Skeleton = /*#__PURE__*/React.forwardRef(function Skeleton(props, ref) { var _props$animation = props.animation, animation = _props$animation === void 0 ? 'pulse' : _props$animation, classes = props.classes, className = props.className, _props$component = props.component, Component = _props$component === void 0 ? 'span' : _props$component, height = props.height, _props$variant = props.variant, variant = _props$variant === void 0 ? 'text' : _props$variant, width = props.width, other = (0, _objectWithoutProperties2.default)(props, ["animation", "classes", "className", "component", "height", "variant", "width"]); var hasChildren = Boolean(other.children); return /*#__PURE__*/React.createElement(Component, (0, _extends2.default)({ ref: ref, className: (0, _clsx.default)(classes.root, classes[variant], className, hasChildren && [classes.withChildren, !width && classes.fitContent, !height && classes.heightAuto], animation !== false && classes[animation]) }, other, { style: (0, _extends2.default)({ width: width, height: height }, other.style) })); }); process.env.NODE_ENV !== "production" ? Skeleton.propTypes = { /** * The animation. * If `false` the animation effect is disabled. */ animation: _propTypes.default.oneOf(['pulse', 'wave', false]), /** * Optional children to infer width and height from. */ children: _propTypes.default.node, /** * Override or extend the styles applied to the component. * See [CSS API](#css) below for more details. */ classes: _propTypes.default.object.isRequired, /** * @ignore */ className: _propTypes.default.string, /** * The component used for the root node. * Either a string to use a HTML element or a component. */ component: _propTypes.default /* @typescript-to-proptypes-ignore */ .elementType, /** * Height of the skeleton. * Useful when you don't want to adapt the skeleton to a text element but for instance a card. */ height: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]), /** * The type of content that will be rendered. */ variant: _propTypes.default.oneOf(['text', 'rect', 'circle']), /** * Width of the skeleton. * Useful when the skeleton is inside an inline element with no width of its own. */ width: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]) } : void 0; var _default = (0, _styles.withStyles)(styles, { name: 'MuiSkeleton' })(Skeleton); exports.default = _default;