UNPKG

@codementor/ui-kit

Version:
271 lines (218 loc) • 9.69 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.SUPPORTED_SIZES = exports.SUPPORTED_TYPES = exports.SIZE_MAP = exports.OUTLITE_THEME_MAP = exports.TYPE_THEME_MAP = undefined; var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _style = require('styled-jsx/style'); var _style2 = _interopRequireDefault(_style); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _tinycolor = require('tinycolor2'); var _tinycolor2 = _interopRequireDefault(_tinycolor); var _colors = require('./theme/colors'); var _CircularProgress = require('./CircularProgress'); var _CircularProgress2 = _interopRequireDefault(_CircularProgress); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var TYPE_THEME_MAP = exports.TYPE_THEME_MAP = { default: { background: _colors.grey, color: '#333' }, primary: { background: _colors.blue, color: '#fff' }, secondary: { background: _colors.teal, color: '#fff' }, red: { background: _colors.red, color: '#fff' }, twitter: { background: '#00aced', color: '#fff' }, google: { background: '#e65d4b', color: '#fff' }, linkedin: { background: '#0275b6', color: '#fff' }, github: { background: '#555555', color: '#fff' }, cmx: { background: _colors.azure, color: '#fff' } }; var OUTLITE_THEME_MAP = exports.OUTLITE_THEME_MAP = { default: { color: '#333', background: '#fff', borderColor: '#e6e6e6' } }; var SIZE_MAP = exports.SIZE_MAP = { default: { fontSize: '14px', loadingSize: '16px', padding: '8px 14px' }, small: { fontSize: '12px', loadingSize: '14px', padding: '4px 8px' }, large: { fontSize: '16px', loadingSize: '20px', padding: '16px 32px' } }; var SUPPORTED_TYPES = exports.SUPPORTED_TYPES = (0, _keys2.default)(TYPE_THEME_MAP); var SUPPORTED_SIZES = exports.SUPPORTED_SIZES = (0, _keys2.default)(SIZE_MAP); var Button = function (_PureComponent) { (0, _inherits3.default)(Button, _PureComponent); function Button() { var _ref; var _temp, _this, _ret; (0, _classCallCheck3.default)(this, Button); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, (_ref = Button.__proto__ || (0, _getPrototypeOf2.default)(Button)).call.apply(_ref, [this].concat(args))), _this), _this._onInnerContainerClick = function (e) { if (_this.props.disabled) { e.stopPropagation(); } }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); } (0, _createClass3.default)(Button, [{ key: 'render', value: function render() { var _props = this.props, isLoading = _props.isLoading, children = _props.children, outline = _props.outline, type = _props.type, size = _props.size, round = _props.round, textWidth = _props.textWidth, fullWidth = _props.fullWidth, buttonProps = _props.buttonProps, props = (0, _objectWithoutProperties3.default)(_props, ['isLoading', 'children', 'outline', 'type', 'size', 'round', 'textWidth', 'fullWidth', 'buttonProps']); var theme = this._getTheme({ type: type, outline: outline }); var hoverTheme = this._hoverTheme({ outline: outline, theme: theme }); var _SIZE_MAP$size = SIZE_MAP[size], fontSize = _SIZE_MAP$size.fontSize, padding = _SIZE_MAP$size.padding, loadingSize = _SIZE_MAP$size.loadingSize; var borderColor = theme.borderColor || theme.background; return _react2.default.createElement( 'button', (0, _extends3.default)({}, props, buttonProps, { className: _style2.default.dynamic([['483570690', [textWidth || 'auto', theme.color, round ? '0px' : '70px', fullWidth ? '100%' : 'auto', theme.background, borderColor, round ? '50%' : '3px', props.disabled ? 'default' : 'pointer', fontSize, padding, props.disabled ? 0.4 : 1, hoverTheme.background, hoverTheme.borderColor, hoverTheme.color]]]) + ' ' + (buttonProps.className != null && buttonProps.className || props.className != null && props.className || '') }), _react2.default.createElement( 'div', { onClick: this._onInnerContainerClick, className: _style2.default.dynamic([['483570690', [textWidth || 'auto', theme.color, round ? '0px' : '70px', fullWidth ? '100%' : 'auto', theme.background, borderColor, round ? '50%' : '3px', props.disabled ? 'default' : 'pointer', fontSize, padding, props.disabled ? 0.4 : 1, hoverTheme.background, hoverTheme.borderColor, hoverTheme.color]]]) + ' ' + 'btn-inner-container' }, isLoading && _react2.default.createElement(_CircularProgress2.default, { color: theme.color, size: loadingSize }), children ), _react2.default.createElement(_style2.default, { styleId: '483570690', css: '.btn-inner-container.__jsx-style-dynamic-selector{width:' + (textWidth || 'auto') + ';text-align:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}button.__jsx-style-dynamic-selector{color:' + theme.color + ';min-width:' + (round ? '0px' : '70px') + ';width:' + (fullWidth ? '100%' : 'auto') + ';background:' + theme.background + ';border:1px solid ' + borderColor + ';border-radius:' + (round ? '50%' : '3px') + ';outline:none;font-weight:600;cursor:' + (props.disabled ? 'default' : 'pointer') + ';font-size:' + fontSize + ';text-transform:uppercase;padding:' + padding + ';opacity:' + (props.disabled ? 0.4 : 1) + ';font-family:Open Sans,sans-serif;}button.__jsx-style-dynamic-selector:hover{background:' + hoverTheme.background + ';border-color:' + hoverTheme.borderColor + ';color:' + hoverTheme.color + ';}', dynamic: [textWidth || 'auto', theme.color, round ? '0px' : '70px', fullWidth ? '100%' : 'auto', theme.background, borderColor, round ? '50%' : '3px', props.disabled ? 'default' : 'pointer', fontSize, padding, props.disabled ? 0.4 : 1, hoverTheme.background, hoverTheme.borderColor, hoverTheme.color] }) ); } }, { key: '_hoverTheme', value: function _hoverTheme(_ref2) { var theme = _ref2.theme, outline = _ref2.outline; return outline ? { background: theme.background, color: this._darken(theme.color), borderColor: this._darken(theme.borderColor) } : { color: theme.color, background: this._darken(theme.background), borderColor: this._darken(theme.background) }; } }, { key: '_darken', value: function _darken(color) { return (0, _tinycolor2.default)(color).darken(3).toString(); } }, { key: '_getTheme', value: function _getTheme(_ref3) { var type = _ref3.type, outline = _ref3.outline; var defaultType = SUPPORTED_TYPES[0]; var validType = SUPPORTED_TYPES.includes(type) ? type : defaultType; var baseTheme = TYPE_THEME_MAP[validType]; return outline ? this._outlineTheme(baseTheme) : baseTheme; } }, { key: '_outlineTheme', value: function _outlineTheme(theme) { var type = this.props.type; var lineColor = theme.background; var outlineTheme = OUTLITE_THEME_MAP[type]; var fallback = (0, _extends3.default)({}, theme, { color: lineColor, borderColor: lineColor, background: '#fff' }); return outlineTheme ? (0, _extends3.default)({}, theme, outlineTheme) : fallback; } }]); return Button; }(_react.PureComponent); Button.propTypes = { children: _propTypes2.default.node, type: _propTypes2.default.oneOf(SUPPORTED_TYPES), outline: _propTypes2.default.bool.isRequired, isLoading: _propTypes2.default.bool.isRequired, round: _propTypes2.default.bool, fullWidth: _propTypes2.default.bool, textWidth: _propTypes2.default.string, buttonProps: _propTypes2.default.object }; Button.defaultProps = { outline: false, isLoading: false, size: SUPPORTED_SIZES[0], type: SUPPORTED_TYPES[0], buttonProps: {} }; exports.default = Button;