UNPKG

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
'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;