nexxtway/react-rainbow

View on GitHub
src/components/PhoneInput/styled/inputContainer.js

Summary

Maintainability
A
1 hr
Test Coverage
import styled from 'styled-components';
import {
    BORDER_RADIUS_2,
    BORDER_RADIUS_SQUARE,
    BORDER_RADIUS_SEMI_SQUARE,
    BORDER_RADIUS_SEMI_ROUNDED,
} from '../../../styles/borderRadius';

import {
    FONT_SIZE_TEXT_LARGE,
    FONT_SIZE_HEADING_MEDIUM,
    FONT_SIZE_TEXT_MEDIUM,
} from '../../../styles/fontSizes';
import attachThemeAttrs from '../../../styles/helpers/attachThemeAttrs';

const StyledInputContainer = attachThemeAttrs(styled.div)`
    position: relative;
    font: inherit;
    background-color: ${props => props.palette.background.main};
    border: 1px solid ${props => props.palette.border.main};
    border-radius: ${BORDER_RADIUS_2};
    width: 100%;
    transition: all 0.1s linear, padding 0s, border 0s;
    padding: 1px 1rem 1px 1px;
    line-height: 2.5rem;
    height: 2.5rem;
    color: ${props => props.palette.text.main};
    font-size: ${FONT_SIZE_TEXT_LARGE};
    box-sizing: border-box;
    margin: 0;
    display: flex;

    ${props =>
        props.size === 'large' &&
        `
            padding: 1px 1.2rem 1px 1px;
            line-height: 3.275rem;
            font-size: ${FONT_SIZE_HEADING_MEDIUM};
            height: 3.4rem;
        `};

    ${props =>
        props.size === 'small' &&
        `
            padding:1px 0.8rem 1px 1px;
            line-height: 1.775rem;
            font-size: ${FONT_SIZE_TEXT_MEDIUM};
            height: 1.9rem;
        `};


    ${props =>
        props.isFocus &&
        `
        outline: 0;
        padding: 0 0.9375rem 0 0;
        border: 2px solid ${props.palette.brand.main};
        background-color: ${props.palette.background.main};
        box-shadow: ${props.shadows.brand};
        ${props.size === 'large' &&
            `
                padding: 0 1.125rem 0 0;
            `};
    
        ${props.size === 'small' &&
            `
                padding: 0 0.75rem 0 0;
            `};
    `};

    ${props =>
        props.error &&
        `
        padding: 0 0.9375rem 0 0;
        background-color: ${props.palette.background.main};
        border: 2px solid ${props.palette.error.main};
        background-clip: padding-box;

        ${props.size === 'large' &&
            `
                padding: 0 1.125rem 0 0;
            `};
    
        ${props.size === 'small' &&
            `
                padding: 0 0.75rem 0 0;
            `};

        ${props.isFocus &&
            `
            background-color: ${props.palette.background.main};
            border: 2px solid ${props.palette.error.main};
            box-shadow: ${props.shadows.error};
            outline: 0;
        `}

    `}

    ${props =>
        props.readOnly &&
        `
        padding: 0 1rem 0 0;
        background-color: transparent;
        border: 2px transparent solid;
        box-sizing: border-box;
        box-shadow: inherit;
    `};


    &[disabled] {
        padding: 1px 0.9375rem 1px 1px;
        background-color: ${props => props.palette.background.disabled};
        border: 1px solid ${props => props.palette.border.disabled};
        color: ${props => props.palette.text.disabled};
        cursor: not-allowed;
        user-select: none;
        ${props => !props.icon && 'padding-right: 0.9375rem;'}

        &:focus,
        &:active {
            box-shadow: none;
            background-color: ${props => props.palette.background.disabled};
            border: 1px solid ${props => props.palette.border.disabled};
        }
    }

    ${props =>
        props.borderRadius === 'square' &&
        `
            border-radius: ${BORDER_RADIUS_SQUARE};
        `};

    ${props =>
        props.borderRadius === 'semi-square' &&
        `
            border-radius: ${BORDER_RADIUS_SEMI_SQUARE};
        `};

    ${props =>
        props.borderRadius === 'semi-rounded' &&
        `
            border-radius: ${BORDER_RADIUS_SEMI_ROUNDED};
        `};
`;

export default StyledInputContainer;