@evg-b/evg-ui
Version:
EVG-UI library inspired by Material Design.
104 lines (93 loc) • 3.11 kB
JavaScript
import _extends from '@babel/runtime/helpers/extends';
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/defineProperty';
import '@babel/runtime/helpers/classCallCheck';
import '@babel/runtime/helpers/createClass';
var svgSizeNumberAndTemplate = function svgSizeNumberAndTemplate(size) {
if (typeof size === 'number') {
return "".concat(size, "px");
} else {
return MapSize[size] ? MapSize[size] : MapSize['medium'];
}
};
var MapSize = {
'small': '18px',
'medium': '24px',
'large': '36px',
'extra': '48px'
};
var styles = {
base: {
display: 'inline-flex',
boxSizing: 'content-box',
justifyContent: 'center',
userSelect: 'none',
width: '1em',
height: '1em',
fill: 'currentColor',
color: function color(props) {
return props.color === 'default' ? 'currentColor' : props.Color.Base();
},
fontSize: function fontSize(props) {
return svgSizeNumberAndTemplate(props.size);
}
}
};
/**
* Компонент обертка над path svg который реализует функционал color и size.
*/
var SvgIcon = /*#__PURE__*/React.forwardRef(function SvgIcon(props, ref) {
var classes = props.classes,
className = props.className,
children = props.children;
props.color;
props.size;
var viewBox = props.viewBox,
otherProps = _objectWithoutProperties(props, ["classes", "className", "children", "color", "size", "viewBox"]);
return /*#__PURE__*/React.createElement("svg", _extends({
ref: ref,
className: classNames(classes.base, className),
viewBox: "0 0 ".concat(viewBox, " ").concat(viewBox)
}, otherProps), children);
});
SvgIcon.propTypes = {
/**
* Это контент между открывающим и закрывающим тегом компонента.
*/
children: PropTypes.node,
/**
* Объект содержит jss стили компонента.
*/
classes: PropTypes.object,
/**
* Чтобы указать CSS классы, используйте этот атрибут.
*/
className: PropTypes.string,
/**
* Размер компонента. Так же принимает положительное число.
*/
size: PropTypes.oneOfType([PropTypes.oneOf(['small', 'medium', 'large', 'extra']), PropTypes.number]),
/**
* Название цвета в разных форматах.
*/
color: PropTypes.string,
/**
* Размер viewBox. Применяется к width и height.
*/
viewBox: PropTypes.number
};
SvgIcon.defaultProps = {
color: 'default',
size: 'medium',
viewBox: 24
};
SvgIcon.displayName = 'SvgIconEVG';
var SvgIcon$1 = withStyles(styles)(SvgIcon);
export default SvgIcon$1;