MeetUp/src/components/custom-ui/labeled-input.tsx
Dominik Stahl f3a7de357e
Some checks failed
container-scan / Container Scan (pull_request) Failing after 35s
docker-build / docker (pull_request) Failing after 2m12s
tests / Tests (pull_request) Failing after 1m55s
feat(blocked_slots): add blocked slots
2025-06-30 20:13:56 +02:00

53 lines
1.3 KiB
TypeScript

import { Input, Textarea } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
export default function LabeledInput({
type,
label,
placeholder,
value,
name,
variantSize = 'default',
autocomplete,
error,
...rest
}: {
label: string;
placeholder?: string;
value?: string;
name?: string;
variantSize?: 'default' | 'big' | 'textarea';
autocomplete?: string;
error?: string;
} & React.InputHTMLAttributes<HTMLInputElement>) {
return (
<div className='grid grid-cols-1 gap-1'>
<Label htmlFor={name}>{label}</Label>
{variantSize === 'textarea' ? (
<Textarea
placeholder={placeholder}
defaultValue={value}
id={name}
name={name}
rows={3}
/>
) : (
<Input
type={type}
placeholder={placeholder}
defaultValue={value}
id={name}
name={name}
className={
variantSize === 'big'
? 'h-12 file:h-10 text-lg gplaceholder:text-lg sm:text-2xl sm:placeholder:text-2xl'
: ''
}
autoComplete={autocomplete}
{...rest}
/>
)}
{error && <p className='text-red-500 text-sm mt-1'>{error}</p>}
</div>
);
}