import { FunctionalComponent, ComponentChild } from 'preact'; import { HtmlInputTypes } from '@/enums'; interface Props { type?: HtmlInputTypes; className?: string; disabled?: boolean; left?: ComponentChild[]; right?: ComponentChild[]; text?: string; placeholder?: string; onChange?: (text: string) => void; autocomplete?: boolean; } /** * Input that can be decorated on the left and right side */ export const DecoratedInput: FunctionalComponent = ({ type = 'text', className = '', disabled = false, left, right, text, placeholder = '', onChange, autocomplete = false, }) => { const baseClasses = 'rounded py-1.5 px-3 text-input my-1 h-8 flex flex-row items-center bg-contrast'; const stateClasses = disabled ? 'no-border' : 'border-solid border-1 border-main'; const classes = `${baseClasses} ${stateClasses} ${className}`; const inputBaseClasses = 'w-full no-border color-text focus:shadow-none bg-contrast'; const inputStateClasses = disabled ? 'overflow-ellipsis' : ''; return (
{left?.map((leftChild) => ( <> {leftChild}
))}
onChange && onChange((e.target as HTMLInputElement).value) } data-lpignore={type !== 'password' ? true : false} autocomplete={autocomplete ? 'on' : 'off'} />
{right?.map((rightChild) => ( <>
{rightChild} ))}
); };