@vtex/styleguide
Version:
> VTEX Styleguide React components ([Docs](https://vtex.github.io/styleguide))
234 lines (190 loc) • 7.63 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _Deny = require('../icon/Deny');
var _Deny2 = _interopRequireDefault(_Deny);
var _Check = require('../icon/Check');
var _Check2 = _interopRequireDefault(_Check);
var _config = require('vtex-tachyons/config.json');
var _config2 = _interopRequireDefault(_config);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var Toggle = function (_Component) {
_inherits(Toggle, _Component);
function Toggle() {
_classCallCheck(this, Toggle);
return _possibleConstructorReturn(this, (Toggle.__proto__ || Object.getPrototypeOf(Toggle)).apply(this, arguments));
}
_createClass(Toggle, [{
key: 'render',
value: function render() {
var _props = this.props,
semantic = _props.semantic,
disabled = _props.disabled,
id = _props.id,
checked = _props.checked,
label = _props.label,
size = _props.size,
helpText = _props.helpText;
var labelClass = 'near-black ';
var classes = 'flex items-center relative br4 ';
var circleClasses = 'absolute br-100 ';
var iconDenyClasses = 'absolute flex justify-center ';
var iconCheckClasses = 'absolute flex justify-center ';
var circleStyle = {
boxShadow: disabled ? 'none' : '0 0 10px rgba(0,0,0,0.2)',
transform: 'scale(0.8)',
transition: 'all .1s ease-out'
};
var iconStyle = {
transition: 'left .1s ease-out, opacity .1s ease-in-out'
// Background
};if (semantic) {
if (!disabled && !checked) {
classes += 'bg-red ';
iconDenyClasses += 'o-100 ';
iconCheckClasses += 'o-0 ';
}
if (!disabled && checked) {
classes += 'bg-green ';
iconDenyClasses += 'o-0 ';
iconCheckClasses += 'o-100 ';
}
} else if (disabled) {
classes += 'bg-light-gray ';
labelClass += 'gray ';
} else {
if (!checked) {
classes += 'bg-gray ';
}
if (checked) {
classes += 'bg-blue ';
}
}
// Circle
if (disabled) {
circleClasses += 'bg-silver ';
} else {
circleClasses += 'bg-white ';
}
var style = {
transition: 'background 100ms ease-out'
};
var checkedOffset = void 0;
switch (size) {
case 'small':
style = Object.assign({}, style, {
height: '1.25rem',
width: '2.25rem',
minWidth: '2.25rem'
});
circleStyle = Object.assign({}, circleStyle, {
height: '1.25rem',
width: '1.25rem',
minWidth: '1.25rem'
});
iconStyle = Object.assign({}, iconStyle, {
transform: 'scale(0.7)',
width: '1.25rem'
});
labelClass += 'ml3 ';
checkedOffset = '1rem';
break;
default:
classes += 'h2 ';
circleClasses += 'h2 w2 ';
iconDenyClasses += 'w2 ';
iconCheckClasses += 'w2 ';
labelClass += 'ml5 ';
style = Object.assign({}, style, {
minWidth: '3.5rem'
});
circleStyle = Object.assign({}, circleStyle, {
minWidth: '2rem'
});
checkedOffset = '1.5rem';
}
var checkedStyle = {
left: checked ? checkedOffset : 0
};
circleStyle = Object.assign({}, circleStyle, checkedStyle);
iconStyle = Object.assign({}, iconStyle, checkedStyle);
return _react2.default.createElement(
'label',
{ htmlFor: id || undefined },
_react2.default.createElement(
'div',
{ className: 'flex flex-row items-center ' + (!disabled && 'pointer') },
_react2.default.createElement(
'div',
{ className: 'vtex-toggle ' + classes, style: style },
_react2.default.createElement('div', { className: circleClasses, style: circleStyle }),
semantic && _react2.default.createElement(
'div',
{ className: iconDenyClasses, style: iconStyle },
_react2.default.createElement(_Deny2.default, {
size: size === 'regular' ? 14 : 12,
color: _config2.default.colors.red
})
),
semantic && _react2.default.createElement(
'div',
{ className: iconCheckClasses, style: iconStyle },
_react2.default.createElement(_Check2.default, {
size: size === 'regular' ? 15 : 13,
color: _config2.default.colors.green
})
)
),
_react2.default.createElement('input', {
id: id || undefined,
type: 'checkbox',
className: 'dn',
disabled: disabled,
checked: checked,
onClick: this.props.onClick,
onChange: this.props.onChange
}),
label && _react2.default.createElement(
'span',
{ className: labelClass },
label
)
),
helpText && _react2.default.createElement(
'div',
{ className: 'mid-gray f6 mt3 lh-title' },
helpText
)
);
}
}]);
return Toggle;
}(_react.Component);
Toggle.defaultProps = {
checked: false,
disabled: false,
semantic: false,
label: '',
size: 'regular'
};
Toggle.propTypes = {
checked: _propTypes2.default.bool,
semantic: _propTypes2.default.bool,
disabled: _propTypes2.default.bool,
id: _propTypes2.default.string,
label: _propTypes2.default.string,
onChange: _propTypes2.default.func,
onClick: _propTypes2.default.func,
size: _propTypes2.default.oneOf(['small', 'regular']),
helpText: _propTypes2.default.node
};
exports.default = Toggle;