@evg-b/evg-ui
Version:
EVG-UI library inspired by Material Design.
120 lines (107 loc) • 3.39 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';
import IconButton from '../IconButton/IconButton.js';
var styles = {
base: {
position: 'relative'
},
input: {
opacity: 0,
cursor: 'inherit',
position: 'absolute',
top: 0,
left: 0,
margin: 0,
padding: 0
},
checked: {}
};
/**
* Базовый компонент который реализует общую логику checked в Checkbox, Radio, Switch.
*/
var SwitchBase = /*#__PURE__*/React.forwardRef(function SwitchBase(props, ref) {
var classes = props.classes,
className = props.className;
props.children;
var color = props.color;
props.size;
var type = props.type,
Icon = props.icon,
IconChecked = props.iconChecked,
rippleOff = props.rippleOff,
otherProps = _objectWithoutProperties(props, ["classes", "className", "children", "color", "size", "type", "icon", "iconChecked", "rippleOff"]);
var iconChecked = IconChecked && /*#__PURE__*/React.cloneElement(IconChecked, {
className: classNames(IconChecked.props.className, classes.iconChecked)
});
return /*#__PURE__*/React.createElement(IconButton, {
tabIndex: null,
component: "label",
className: classNames(classes.base, className),
color: color,
disabled: otherProps.disabled,
rippleCenter: true,
rippleOff: rippleOff
}, /*#__PURE__*/React.createElement("input", _extends({
className: classNames(classes.input, classes.checked),
tabIndex: 0,
ref: ref,
type: type,
readOnly: true
}, otherProps)), iconChecked, Icon);
});
SwitchBase.propTypes = {
/**
* Объект содержит jss стили компонента.
*/
classes: PropTypes.object,
/**
* Чтобы указать CSS классы, используйте этот атрибут.
*/
className: PropTypes.string,
/**
* Это свойство не реализуется.
*/
children: PropTypes.any,
/**
* Название цвета в разных форматах. Подробнее <a>link</a>
*/
color: PropTypes.string,
/**
* Размер компонента.
*/
size: PropTypes.oneOf(['small', 'medium', 'large', 'extra']),
/**
* Тип input.
*/
type: PropTypes.oneOf(['checkbox', 'radio']),
/**
* Иконка которая отображается всегда.
*/
icon: PropTypes.node,
/**
* Иконка которая отображается при Checked=true.
*/
iconChecked: PropTypes.node,
/**
* Если true, Ripple эффект отключен.
*/
rippleOff: PropTypes.bool
};
SwitchBase.defaultProps = {
color: 'default',
size: 'medium',
rippleOff: false
};
SwitchBase.displayName = 'SwitchBaseEVG';
var SwitchBase$1 = withStyles(styles)(SwitchBase);
export default SwitchBase$1;