UNPKG

@versionone/ui

Version:

Open-source and community supported collection of common UI components built with React. As an open-sourced and community supported project, VersionOne UI is not formally supported by VersionOne.

164 lines (146 loc) 5.04 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reduxUi = require('redux-ui'); var _reduxUi2 = _interopRequireDefault(_reduxUi); var _Sizes = require('./../Button/Sizes'); var _Radium = require('./../utilities/Radium'); var _Radium2 = _interopRequireDefault(_Radium); var _Transparent = require('./../utilities/Transparent'); var _Transparent2 = _interopRequireDefault(_Transparent); var _Transitions = require('../utilities/Transitions'); var _component = require('./../utilities/component'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var getStyles = function getStyles(props, theme) { var border = '1px solid ' + _Transparent2.default; var hasBorderProp = Boolean(props.border); if (props.disable && hasBorderProp) { border = '1px solid ' + theme.disabledPrimaryColor; } else if (hasBorderProp) { border = props.border; } return { root: { backgroundColor: Boolean(props.disable) || !props.hovered && !props.ui.hovered ? props.backgroundColor : props.hoverBackgroundColor, border: border, borderRadius: props.circle ? '50%' : '0px', cursor: props.disable ? 'not-allowed' : 'pointer', display: 'inline-block', lineHeight: 0.6, transition: props.transition } }; }; var IconButton = function IconButton(props, context) { var color = props.color, disable = props.disable, hoverColor = props.hoverColor, hovered = props.hovered, ui = props.ui, onClick = props.onClick, size = props.size, updateUI = props.updateUI; var _context$theme = context.theme, baseIconSize = _context$theme.baseIconSize, disabledPrimaryColor = _context$theme.disabledPrimaryColor, smallGutter = _context$theme.smallGutter; var iconSize = baseIconSize * size; var iconColor = disable ? disabledPrimaryColor : color; var iconHoverColor = disable ? disabledPrimaryColor : hoverColor; var handleClick = (0, _component.createConditionalEventHandler)(!disable)(onClick); var handleMouseEnter = (0, _component.createEventHandlerIgnoringEventData)(updateUI, 'hovered', true); var handleMouseLeave = (0, _component.createEventHandlerIgnoringEventData)(updateUI, 'hovered', false); var styles = getStyles(props, context.theme); return _react2.default.createElement( 'div', { style: styles.root, onClick: handleClick, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave }, _react2.default.createElement(props.icon, { color: iconColor, hoverColor: iconHoverColor, hovered: hovered || ui.hovered, padding: smallGutter, size: iconSize }) ); }; process.env.NODE_ENV !== "production" ? IconButton.propTypes = { /** * Background color of button */ backgroundColor: _react.PropTypes.string, /** * Border of icon button */ border: _react.PropTypes.string, /** * Will render a circular button when true */ circle: _react.PropTypes.bool, /** * Color of the SvgIcon within button */ color: _react.PropTypes.string, /** * Disables the button from responding to event handlers */ disable: _react.PropTypes.bool, /** * Background color when hovered */ hoverBackgroundColor: _react.PropTypes.string, /** * Hover color of SvgIcon */ hoverColor: _react.PropTypes.string, /** * Indicates the IconButton is in a hovered state when true */ hovered: _react.PropTypes.bool, /** * Icon to render within button */ icon: _react.PropTypes.func.isRequired, /** * Click event handler; fired once a button is clicked */ onClick: _react.PropTypes.func, /** * Numeric value used as a multiplier to the button's size; 0.75, 1, and 1.5 as examples */ size: _react.PropTypes.number, transition: _react.PropTypes.string, /** * Managed UI state props; can be overridden */ ui: _react.PropTypes.object, /** * Callback fired when a ui prop related action is dispatched */ updateUI: _react.PropTypes.func } : void 0; IconButton.defaultProps = { backgroundColor: _Transparent2.default, circle: false, disable: false, onClick: function onClick() {}, size: _Sizes.normal, transition: (0, _Transitions.create)('0.25s', 'all', '0ms', 'linear'), updateUI: function updateUI() {} }; IconButton.contextTypes = { theme: _react.PropTypes.object.isRequired }; IconButton.displayName = 'IconButton'; exports.default = (0, _Radium2.default)((0, _reduxUi2.default)({ state: { hovered: false } })(IconButton));