@evg-b/evg-ui
Version:
EVG-UI library inspired by Material Design.
188 lines (169 loc) • 5.58 kB
JavaScript
import _defineProperty from '@babel/runtime/helpers/defineProperty';
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import '@babel/runtime/helpers/slicedToArray';
import withStyles from '../styles/withStyles.js';
import '@babel/runtime/helpers/construct';
import '@babel/runtime/helpers/classCallCheck';
import '@babel/runtime/helpers/createClass';
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var styles = {
base: {
display: 'block',
height: '1.2em',
backgroundColor: 'rgba(0,0,0,.15)'
},
text: {
transform: 'scale(1, 0.60)',
width: '100%',
borderRadius: '6px',
height: '1em'
},
h1: {
height: '2em'
},
h2: {
height: '1.5em'
},
h3: {
height: '1.17em'
},
h4: {
height: '1em'
},
h5: {
height: '.83em'
},
h6: {
height: '.67em'
},
avatar: {
borderRadius: '50%'
},
wave: {
position: 'relative',
overflow: 'hidden',
'&::after': {
content: '""',
position: 'absolute',
background: "linear-gradient(90deg, rgba(0, 0, 0, 0),rgba(255, 255, 255, 0.15), rgba(0, 0, 0, 0))",
bottom: 0,
left: 0,
right: 0,
top: 0,
transform: 'translateX(-100%)',
animation: '$wave 1200ms linear 200ms infinite'
}
},
'@keyframes wave': {
'0%': {
transform: 'translateX(-100%)'
},
'80%': {
transform: 'translateX(100%)'
},
'100%': {
transform: 'translateX(100%)'
}
}
};
/**
* Скелет интерфейса дает понять пользователю что контент еще загружается.
* При этом знакомя пользователя к предварительному расположению элементов на странице.
*/
var Skeleton = /*#__PURE__*/React.forwardRef(function Skeleton(props, ref) {
var classes = props.classes,
className = props.className;
props.children;
var _props$component = props.component,
Component = _props$component === void 0 ? 'span' : _props$component,
type = props.type,
width = props.width,
height = props.height,
size = props.size,
animation = props.animation,
borderRadius = props.borderRadius,
otherProps = _objectWithoutProperties(props, ["classes", "className", "children", "component", "type", "width", "height", "size", "animation", "borderRadius"]);
var sizeStyle = {
width: width,
height: height,
borderRadius: borderRadius
};
if (size != 0) {
sizeStyle.width = size;
sizeStyle.height = size;
}
if (type.includes('avatar')) {
delete sizeStyle.borderRadius;
}
if (type.includes('text')) {
delete sizeStyle.height;
delete sizeStyle.borderRadius;
}
var classesList = type.split(',').map(function (val) {
return classes[val];
});
return /*#__PURE__*/React.createElement(Component, {
red: ref,
className: classNames.apply(void 0, [classes.base].concat(_toConsumableArray(classesList), [_defineProperty({}, classes.wave, animation), className])),
style: _objectSpread(_objectSpread({}, sizeStyle), otherProps)
});
});
Skeleton.propTypes = {
/**
* Объект содержит jss стили компонента.
*/
classes: PropTypes.object,
/**
* Чтобы указать CSS классы, используйте этот атрибут.
*/
className: PropTypes.string,
/**
* Это свойство не реализуется.
*/
children: PropTypes.any,
/**
* Корневой узел. Это HTML элемент или компонент.
*/
component: PropTypes.elementType,
/**
* Тип avatar,text,h1-h6. Можно несколько пример: 'text,h2'
*/
type: PropTypes.string,
/**
* Ширина компонента.
*/
width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
/**
* Высота компонента.
*/
height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
/**
* Размер компонента.
*/
size: PropTypes.number,
/**
* Если true, анимация будет включена.
*/
animation: PropTypes.bool,
/**
* Style css border-radius
*/
borderRadius: PropTypes.number
};
Skeleton.defaultProps = {
component: 'span',
type: '',
width: 80,
height: 80,
size: 0,
borderRadius: 0,
animation: true
};
Skeleton.displayName = 'SkeletonEVG';
var Skeleton$1 = withStyles(styles)(Skeleton);
export default Skeleton$1;