@evg-b/evg-ui
Version:
EVG-UI library inspired by Material Design.
156 lines (142 loc) • 4.61 kB
JavaScript
import _extends from '@babel/runtime/helpers/extends';
import _defineProperty from '@babel/runtime/helpers/defineProperty';
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/toConsumableArray';
import '@babel/runtime/helpers/classCallCheck';
import '@babel/runtime/helpers/createClass';
var styles = {
base: {
position: 'relative',
display: 'inline-flex'
},
badge: {
zIndex: 99,
position: 'absolute',
top: '0',
right: '0',
display: 'flex',
flexDirection: 'row',
alignItems: 'center',
alignContent: 'center',
justifyContent: 'center',
borderRadius: '10px',
boxSizing: 'border-box',
height: '20px',
minWidth: '20px',
padding: '0 6px',
fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif',
fontSize: '0.75rem',
fontWeight: 500,
lineHeight: 1,
pointerEvents: 'none',
backgroundColor: function backgroundColor(props) {
return props.Color.Base();
},
color: function color(props) {
return props.Color.Contrast();
},
transform: 'scale(1) translate(50%, -50%)',
transformOrigin: '100% 0%',
transition: 'transform 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms'
},
ripe: {
position: 'initial',
transform: 'scale(1)',
transformOrigin: 'initial'
},
badgeNull: {
transform: function transform(props) {
return props.ripe ? 'scale(0)' : 'scale(0) translate(50%, -50%)';
}
},
dot: {
height: '10px',
minWidth: '10px',
padding: 0
},
circle: {
top: '14%',
right: '14%'
}
};
/**
* Это маленький значок обычно используется в паре с другими компонентами.
* Используется для привлечения внимание к этим компонентам.
*/
var Badge = /*#__PURE__*/React.forwardRef(function Badge(props, ref) {
var _classNames;
var classes = props.classes,
className = props.className,
children = props.children;
props.color;
var count = props.count,
max = props.max,
dot = props.dot,
circle = props.circle,
ripe = props.ripe,
otherProps = _objectWithoutProperties(props, ["classes", "className", "children", "color", "count", "max", "dot", "circle", "ripe"]);
var CountBadge = count > max ? "".concat(max, "+") : count;
var BadgeRipe = /*#__PURE__*/React.createElement("span", {
className: classNames(classes.badge, (_classNames = {}, _defineProperty(_classNames, classes.ripe, ripe), _defineProperty(_classNames, classes.badgeNull, count == 0), _defineProperty(_classNames, classes.dot, dot), _defineProperty(_classNames, classes.circle, circle), _classNames))
}, dot ? null : CountBadge);
var Badge = /*#__PURE__*/React.createElement("div", _extends({
ref: ref,
className: classNames(classes.base, className)
}, otherProps), children, BadgeRipe);
return ripe ? BadgeRipe : Badge;
});
Badge.propTypes = {
/**
* Это контент между открывающим и закрывающим тегом компонента.
*/
children: PropTypes.node,
/**
* Объект содержит jss стили компонента.
*/
classes: PropTypes.object,
/**
* Чтобы указать CSS классы, используйте этот атрибут.
*/
className: PropTypes.string,
/**
* Название цвета в разных форматах.
*/
color: PropTypes.string,
/**
* Номер для отображения на значке.
*/
count: PropTypes.number,
/**
* Максимальный предел точного отображения.
*/
max: PropTypes.number,
/**
* Минималистичный вид.
*/
dot: PropTypes.bool,
/**
* Смещение, чтобы корректно смотрелось если родитель круглой формы.
*/
circle: PropTypes.bool,
/**
* true - badge становиться самостоятельным элементом.
*/
ripe: PropTypes.bool
};
Badge.defaultProps = {
color: 'fail',
count: 0,
max: 99,
dot: false,
circle: false,
ripe: false
};
Badge.displayName = 'BadgeEVG';
var Badge$1 = withStyles(styles)(Badge);
export default Badge$1;