Spaces:
Runtime error
Runtime error
| import clsx from "clsx"; | |
| import type { ChangeEvent, KeyboardEvent, ReactNode, RefObject } from "react"; | |
| import Label from "./Label"; | |
| import type { toolTipProperties } from "../types"; | |
| type InputElement = HTMLInputElement | HTMLTextAreaElement; | |
| interface InputProps { | |
| small?: boolean; // Will lower padding and font size. Currently only works for the default input | |
| left?: ReactNode; | |
| value: string | number | undefined; | |
| onChange: (e: ChangeEvent<InputElement>) => void; | |
| placeholder?: string; | |
| disabled?: boolean; | |
| type?: string; | |
| subType?: string; | |
| attributes?: { [key: string]: string | number | string[] }; // attributes specific to input type | |
| toolTipProperties?: toolTipProperties; | |
| inputRef?: RefObject<InputElement>; | |
| onKeyDown?: (e: KeyboardEvent<InputElement>) => void; | |
| } | |
| const Input = (props: InputProps) => { | |
| const isTypeTextArea = () => { | |
| return props.type === "textarea"; | |
| }; | |
| return ( | |
| <div className="items-left z-5 flex h-fit w-full flex-col rounded-xl text-lg text-slate-12 md:flex-row md:items-center"> | |
| {props.left && ( | |
| <Label left={props.left} type={props.type} toolTipProperties={props.toolTipProperties} /> | |
| )} | |
| {isTypeTextArea() ? ( | |
| <textarea | |
| className={clsx( | |
| "delay-50 h-15 w-full resize-none rounded-xl border-2 border-slate-7 bg-slate-1 p-2 text-sm tracking-wider text-slate-12 outline-none transition-all selection:bg-sky-300 placeholder:text-slate-8 hover:border-sky-200 focus:border-sky-400 sm:h-20 md:text-lg", | |
| props.disabled && "cursor-not-allowed", | |
| props.left && "md:rounded-l-none", | |
| props.small && "text-sm sm:py-[0]" | |
| )} | |
| ref={props.inputRef as RefObject<HTMLTextAreaElement>} | |
| placeholder={props.placeholder} | |
| value={props.value} | |
| onChange={props.onChange} | |
| disabled={props.disabled} | |
| onKeyDown={props.onKeyDown} | |
| {...props.attributes} | |
| /> | |
| ) : ( | |
| <input | |
| className={clsx( | |
| "w-full rounded-xl border-2 border-slate-7 bg-slate-1 p-2 py-1 text-sm tracking-wider text-slate-12 outline-none transition-all duration-200 selection:bg-sky-300 placeholder:text-slate-8 hover:border-sky-200 focus:border-sky-400 sm:py-3 md:text-lg", | |
| props.disabled && "cursor-not-allowed", | |
| props.left && "md:rounded-l-none", | |
| props.small && "text-sm sm:py-[0]" | |
| )} | |
| ref={props.inputRef as RefObject<HTMLInputElement>} | |
| placeholder={props.placeholder} | |
| type={props.type} | |
| value={props.value} | |
| onChange={props.onChange} | |
| disabled={props.disabled} | |
| onKeyDown={props.onKeyDown} | |
| {...props.attributes} | |
| /> | |
| )} | |
| </div> | |
| ); | |
| }; | |
| export default Input; | |