import { getClassNames } from '@websolutespa/bom-core'; import { forwardRef, useState } from 'react'; import styled from 'styled-components'; import { UIComponentWithRef, UIStyledComponentProps } from '../../components/types'; import { getCssResponsive } from '../../components/utils'; import { getVariant, useVariants } from '../../variants'; import { ITextareaVariants, textareaVariants } from './textarea.variants'; type Props = { variant?: keyof typeof textareaVariants | (string & {}); variants?: ITextareaVariants; }; export type TextAreaProps = UIStyledComponentProps; export type TextAreaComponent = UIComponentWithRef; const StyledTextArea = styled.div` ${props => getVariant(props.variant, props.variants)} ${props => getCssResponsive(props)} `; export const TextArea: TextAreaComponent = forwardRef(({ as = 'textarea', children, className, onFocus, onBlur, variant = 'default', variants, ...props }, ref) => { const [focus, setFocus] = useState(false); const onFocus_ = (event: React.FocusEvent) => { onFocus && onFocus(event); setFocus(true); }; const onBlur_ = (event: React.FocusEvent) => { onBlur && onBlur(event); setFocus(false); }; const classNames = getClassNames('textarea', { focus, disabled: props.disabled, readonly: props.readOnly, hidden: props.hidden, }, className, variant); const globalVariants = useVariants('textarea', textareaVariants); variants = variants || globalVariants; return ( {children} ); }); TextArea.displayName = 'TextArea';