This commit is contained in:
Vula Builder
2026-08-03 11:42:12 +00:00
parent fb3969259e
commit afc2e0d974
+40
View File
@@ -0,0 +1,40 @@
import * as React from 'react'
import { cn } from '@/lib/utils'
export interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
label?: string
error?: string
}
const Input = React.forwardRef<HTMLInputElement, InputProps>(
({ className, label, error, id, ...props }, ref) => {
const inputId = id || label?.toLowerCase().replace(/\s+/g, '-')
return (
<div className="flex flex-col gap-1 w-full">
{label && (
<label htmlFor={inputId} className="text-sm font-medium text-foreground">
{label}
</label>
)}
<input
id={inputId}
ref={ref}
className={cn(
'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background',
'placeholder:text-muted-foreground',
'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
'disabled:cursor-not-allowed disabled:opacity-50',
error && 'border-destructive focus-visible:ring-destructive',
className
)}
{...props}
/>
{error && <p className="text-xs text-destructive">{error}</p>}
</div>
)
}
)
Input.displayName = 'Input'
export { Input }
export default Input