import { InputHTMLAttributes, FC } from "react"; import styled, { css, useTheme } from "styled-components"; import Box, { IBoxProps } from "./Box"; export interface CommonProps { boxProps?: IBoxProps; fieldBorder?: string; large?: boolean; white?: boolean; dark?: boolean; light?: boolean; border?: boolean; fullHeight?: boolean; rounded?: boolean; invalidValue?: boolean; styledWidth?: string; styledHeight?: string; styledMinHeight?: string; styledMaxHeight?: string; } type InputProps = InputHTMLAttributes & CommonProps; type TextAreaProps = InputHTMLAttributes & CommonProps & { lineHeight?: string; }; const commonStyles = css` -moz-appearance: none; -webkit-appearance: none; display: block; box-sizing: border-box; height: ${(p) => p.theme.inputHeight}; width: 100%; border: none; border-radius: ${(p) => p.theme.radiusSmall}; ${(props) => props.border && ` border-style: solid; border-width: 1px; border-color: ${props.fieldBorder}; `} margin-top: 0; margin-bottom: 0; padding: 0px; padding-left: 10px; padding-right: 10px; color: ${(p) => p.theme.textDark}; background: ${(p) => p.theme.overlayInvert}; ${(props) => props.light && ` color: ${props.theme.textBlack}; background: ${props.theme.overlayInvert}; ${ props.border && `border-color: transparent; &:focus { border-color: transparent; }` } `} ${(props) => props.dark && ` color: ${props.theme.textLight}; background: ${props.theme.overlay}; ${ props.border && `border-color: ${props.fieldBorder}; ` }; `} ${(props) => props.white && ` color: ${props.theme.textDark}; background: #FFFFFF; `} ${(props) => props.fullHeight && `height: 100%;`} ${(props) => props.styledWidth && `width: ${props.styledWidth};`} ${(props) => props.styledHeight && `height: ${props.styledHeight};`} ${(props) => props.styledMinHeight && `min-height: ${props.styledMinHeight};`} ${(props) => props.styledMaxHeight && `max-height: ${props.styledMaxHeight};`} ${(props) => props.large && `height: ${props.theme.inputHeightLarge};`} ${(props) => props.rounded && `border-radius: 30px;`} ${(props) => props.disabled && `opacity: 0.3;`} ${(props) => props.invalidValue && ` border-color: #d60000; background-color: #fdf2f2; `} `; export const StyledTextArea = styled.textarea` ${commonStyles} line-height: ${(props) => props.lineHeight}; padding-top: 5px; padding-bottom: 5px; cursor: auto; -webkit-overflow-scrolling: touch; min-width: 100%; max-width: 100%; &::-webkit-scrollbar { width: 10px; /* for vertical scrollbars */ height: 8px; /* for horizontal scrollbars */ } &::-webkit-scrollbar-track { background: ${(props) => props.theme.scrollbarTrackColor}; border-radius: ${(props) => props.theme.radiusLarge}; } &::-webkit-scrollbar-thumb { background: ${(props) => props.theme.scrollbarColor}; border-radius: ${(props) => props.theme.radiusLarge}; } `; export const StyledInput = styled.input` ${commonStyles} `; const Input: FC = (props: InputProps) => { const { boxProps, ...rest }: InputProps = props; useTheme(); return ( ); }; export default Input;