fannypack
Version:
An accessible, composable, and friendly React UI Kit
87 lines (72 loc) • 1.6 kB
JavaScript
// @flow
import styled, { css } from 'reakit/styled';
import { tint } from 'polished';
import { palette, theme } from 'styled-tools';
import Input from 'reakit/Input';
const sizeProperties = {
small: css`
font-size: 0.8rem;
& {
${theme('Input.sizes.small')};
}
`,
medium: css`
font-size: 1.25rem;
& {
${theme('Input.sizes.medium')};
}
`,
large: css`
font-size: 1.5rem;
& {
${theme('Input.sizes.large')};
}
`
};
const stateProperties = css`
border-color: ${props => tint(0.3, palette(props.state)(props))}
box-shadow: ${props => tint(0.3, palette(props.state)(props))} 0px 0px 0px 1px ;
`;
export default styled(Input)`
border: 1px solid #bdbdbd;
box-shadow: inset 0px 1px 2px #e5e5e5;
border-radius: 0.2em;
padding: 0.4em 0.6em;
&[disabled] {
background-color: ${palette('whiteDarker')};
box-shadow: unset;
color: ${palette('grayLight')}
& {
${theme('Input.disabled')}
}
}
&:focus {
outline: unset;
z-index: 2;
border-color: ${props => tint(0.3, palette('primary')(props))}
box-shadow: ${props => tint(0.3, palette('primary')(props))} 0px 0px 0px 1px !important;
& {
${theme('Input.focus')}
}
}
&::placeholder {
opacity: 0.6;
& {
${theme('Input.placeholder')}
}
}
& {
${props =>
props.isFullWidth &&
css`
width: 100%;
`}
}
& {
${props => props.size && sizeProperties[props.size]}
}
& {
${props => props.state && stateProperties}
}
${theme('Input.base')};
`;