import * as React from "react"; import { FieldContainer, type FieldMetaProps } from "./shared"; import { Input as BaseInput } from "@/components/ui/input"; import { Textarea as BaseTextarea } from "@/components/ui/textarea"; import { cn } from "@/lib/utils"; type ClassNameMap = { base?: string; description?: string; errorMessage?: string; input?: string; inputWrapper?: string; label?: string; }; export interface InputProps extends Omit, "size">, FieldMetaProps { classNames?: ClassNameMap; endContent?: React.ReactNode; isDisabled?: boolean; size?: "sm" | "md" | "lg"; startContent?: React.ReactNode; variant?: "flat" | "bordered" | "faded" | "underlined"; } export interface TextareaProps extends Omit, "size">, FieldMetaProps { classNames?: ClassNameMap; isDisabled?: boolean; maxRows?: number; minRows?: number; size?: "sm" | "md" | "lg"; variant?: "flat" | "bordered" | "faded" | "underlined"; } function inputSizeClass(size: "sm" | "md" | "lg" | undefined) { if (size === "sm") { return "h-8 text-xs"; } if (size === "lg") { return "h-10 text-base"; } return "h-9 text-sm"; } export function Input({ className, classNames, description, endContent, errorMessage, id, isDisabled, isInvalid, isRequired, label, size, startContent, variant, ...props }: InputProps) { const generatedId = React.useId(); const resolvedId = id ?? generatedId; return (
{startContent ? (
{startContent}
) : null} {endContent ? (
{endContent}
) : null}
); } export function Textarea({ className, classNames, description, errorMessage, id, isDisabled, isInvalid, isRequired, label, maxRows, minRows, size, variant, ...props }: TextareaProps) { const generatedId = React.useId(); const resolvedId = id ?? generatedId; const rows = props.rows ?? minRows ?? 3; return ( ); }