sc-react-ions
Version:
An open source set of React components that implement Ambassador's Design and UX patterns.
177 lines (156 loc) • 4.36 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _reactLoader = require('react-loader');
var _reactLoader2 = _interopRequireDefault(_reactLoader);
var _style = require('./style.scss');
var _style2 = _interopRequireDefault(_style);
var _OptClass = require('../internal/OptClass');
var _OptClass2 = _interopRequireDefault(_OptClass);
var _colors = require('../internal/colors');
var _colors2 = _interopRequireDefault(_colors);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Button = function Button(props) {
var collapseClass = props.collapse ? 'collapse' : null;
var loaderClasses = props.loading ? 'loading' : null;
var btnClasses = (0, _OptClass2.default)(_style2.default, [_style2.default.btn, props.size, loaderClasses, collapseClass], props.optClass, props.className);
var styles = (0, _OptClass.mapOptClass)(props.optClass, {
secondary: {
color: _colors2.default.primary4
},
warning: {
color: _colors2.default.white
},
inverted: {
color: _colors2.default.primary1
},
danger: {
color: _colors2.default.white
},
'danger-alt': {
color: _colors2.default.danger
},
success: {
color: _colors2.default.white
},
flat: {
color: _colors2.default.neutral4
},
info: {
color: _colors2.default.white
},
plain: {
color: _colors2.default.primary4
},
'plain-light': {
color: '#7b96b5'
},
default: {
color: _colors2.default.white
}
});
var spinnerOptions = {
lines: 10,
length: 4,
width: 3,
radius: 5,
color: props.loaderColor || styles.color
};
return _react2.default.createElement(
'button',
{
type: props.type,
style: props.style,
className: btnClasses,
disabled: props.disabled || props.loading,
'aria-disabled': props.disabled || props.loading,
onClick: props.onClick,
onMouseEnter: props.onMouseEnter,
onMouseLeave: props.onMouseLeave,
onMouseDown: props.onMouseDown,
onMouseOut: props.onMouseOut,
onMouseOver: props.onMouseOver,
onMouseUp: props.onMouseUp },
props.loading && _react2.default.createElement(_reactLoader2.default, { loaded: false, options: spinnerOptions }),
_react2.default.createElement(
'em',
null,
props.children
)
);
};
Button.defaultProps = {
type: 'button'
};
Button.propTypes = {
/**
* The size of button.
*/
size: _propTypes2.default.string,
/**
* Whether the button is disabled.
*/
disabled: _propTypes2.default.bool,
/**
* Whether the loading spinner is displayed.
*/
loading: _propTypes2.default.bool,
/**
* Whether to display only an icon on small screens
*/
collapse: _propTypes2.default.bool,
/**
* Optional CSS class(es) to be used for local styles (string or array of strings)
*/
optClass: _propTypes2.default.oneOfType([_propTypes2.default.array, _propTypes2.default.string]),
/**
* A function to be called onClick
*/
onClick: _propTypes2.default.func,
/**
* A function to be called onMouseEnter
*/
onMouseEnter: _propTypes2.default.func,
/**
* A function to be called onMouseLeave
*/
onMouseLeave: _propTypes2.default.func,
/**
* A function to be called onMouseDown
*/
onMouseDown: _propTypes2.default.func,
/**
* A function to be called onMouseOut
*/
onMouseOut: _propTypes2.default.func,
/**
* A function to be called onMouseOver
*/
onMouseOver: _propTypes2.default.func,
/**
* A function to be called onMouseUp
*/
onMouseUp: _propTypes2.default.func,
/**
* The type of button.
*/
type: _propTypes2.default.string,
/**
* A string to allow for inline styles
*/
style: _propTypes2.default.string,
/**
* A class name to be used for local styles or integrations (required to support styled-components)
**/
className: _propTypes2.default.string,
/**
* A valid css color to set the color of the loader (if applicable).
**/
loaderColor: _propTypes2.default.string
};
exports.default = Button;