import styled, { css } from 'styled-components'; import { bgColor, border, height, lineHeight, color, transition } from './helper'; import theme from 'styles/theme'; import { IButton } from './types'; export const Btn = styled.button` font-size: 14px; cursor: pointer; padding: 0 ${p => (p.hasChildren ? 16 : 10)}px; box-sizing: border-box; text-align: center; outline: none; border-radius: 2px; background-position: center; background-color: ${p => bgColor(p)}; height: ${p => height(p)}; line-height: ${p => lineHeight(p)}; border: ${p => border(p)}; color: ${p => color(p)}; transition: ${p => transition(p)}; ${p => p.appearance === 'round' && css``}; &:hover { background: ${p => bgColor(p, 'Hover')} radial-gradient(circle, transparent 1%, ${p => bgColor(p, 'Hover')} 1%) center/15000%; border: ${p => border(p, 'Hover')}; color: ${p => color(p, 'Hover')}; && svg.btn-icon-invert path { fill: ${p => color(p, 'Hover')}; } } &:active { background-color: ${p => bgColor(p, 'Active')}; border: ${p => border(p, 'Active')}; color: ${p => color(p, 'Active')}; && svg.btn-icon-invert path { fill: ${p => color(p, 'Active')}; } background-image: none; background-size: ${p => (p.ripple ? '100%' : 'none')}; transition: background 0s; } &:disabled { cursor: not-allowed; background-image: none; background-color: ${p => bgColor(p, 'Disabled')}; border: ${p => border(p, 'Disabled')}; color: ${p => color(p, 'Disabled')}; && svg.btn-icon-invert path { fill: ${p => color(p, 'Disabled')}; } } svg { display: inline-block; vertical-align: middle; } svg.fix-v-align { transform: translateY(-1px); } svg + span, span + svg { margin-left: 8px; } &&& svg.btn-icon-white path { fill: white; } &&& svg.btn-icon-invert path { fill: ${p => color(p)}; } `; Btn.defaultProps = { theme };