UNPKG

react-color

Version:

A Collection of Color Pickers from Sketch, Photoshop, Chrome & more

128 lines (120 loc) 3.51 kB
import React from 'react'; import PropTypes from 'prop-types'; import reactCSS from 'reactcss'; import merge from 'lodash-es/merge'; import * as color from '../../helpers/color'; import { ColorWrap, EditableInput, Checkboard } from '../common'; import BlockSwatches from './BlockSwatches'; export var Block = function Block(_ref) { var onChange = _ref.onChange, onSwatchHover = _ref.onSwatchHover, hex = _ref.hex, colors = _ref.colors, width = _ref.width, triangle = _ref.triangle, _ref$styles = _ref.styles, passedStyles = _ref$styles === undefined ? {} : _ref$styles, _ref$className = _ref.className, className = _ref$className === undefined ? '' : _ref$className; var transparent = hex === 'transparent'; var handleChange = function handleChange(hexCode, e) { color.isValidHex(hexCode) && onChange({ hex: hexCode, source: 'hex' }, e); }; var styles = reactCSS(merge({ 'default': { card: { width: width, background: '#fff', boxShadow: '0 1px rgba(0,0,0,.1)', borderRadius: '6px', position: 'relative' }, head: { height: '110px', background: hex, borderRadius: '6px 6px 0 0', display: 'flex', alignItems: 'center', justifyContent: 'center', position: 'relative' }, body: { padding: '10px' }, label: { fontSize: '18px', color: color.getContrastingColor(hex), position: 'relative' }, triangle: { width: '0px', height: '0px', borderStyle: 'solid', borderWidth: '0 10px 10px 10px', borderColor: 'transparent transparent ' + hex + ' transparent', position: 'absolute', top: '-10px', left: '50%', marginLeft: '-10px' }, input: { width: '100%', fontSize: '12px', color: '#666', border: '0px', outline: 'none', height: '22px', boxShadow: 'inset 0 0 0 1px #ddd', borderRadius: '4px', padding: '0 7px', boxSizing: 'border-box' } }, 'hide-triangle': { triangle: { display: 'none' } } }, passedStyles), { 'hide-triangle': triangle === 'hide' }); return React.createElement( 'div', { style: styles.card, className: 'block-picker ' + className }, React.createElement('div', { style: styles.triangle }), React.createElement( 'div', { style: styles.head }, transparent && React.createElement(Checkboard, { borderRadius: '6px 6px 0 0' }), React.createElement( 'div', { style: styles.label }, hex ) ), React.createElement( 'div', { style: styles.body }, React.createElement(BlockSwatches, { colors: colors, onClick: handleChange, onSwatchHover: onSwatchHover }), React.createElement(EditableInput, { style: { input: styles.input }, value: hex, onChange: handleChange }) ) ); }; Block.propTypes = { width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), colors: PropTypes.arrayOf(PropTypes.string), triangle: PropTypes.oneOf(['top', 'hide']), styles: PropTypes.object }; Block.defaultProps = { width: 170, colors: ['#D9E3F0', '#F47373', '#697689', '#37D67A', '#2CCCE4', '#555555', '#dce775', '#ff8a65', '#ba68c8'], triangle: 'top', styles: {} }; export default ColorWrap(Block);