Files
got-gaming/components/ui/Input.tsx

47 lines
1.2 KiB
TypeScript

"use client";
import { InputHTMLAttributes, forwardRef } from "react";
interface InputProps extends InputHTMLAttributes<HTMLInputElement> {
label?: string;
error?: string;
}
const Input = forwardRef<HTMLInputElement, InputProps>(
({ label, error, className = "", ...props }, ref) => {
return (
<div>
{label && (
<label
htmlFor={props.id}
className="block text-sm font-semibold text-gray-300 mb-2 uppercase tracking-wider"
>
{label}
</label>
)}
<input
ref={ref}
className={`w-full px-4 py-3 border rounded focus:outline-none transition ${className}`}
style={{
backgroundColor: "var(--input)",
borderColor: "var(--border)",
color: "var(--foreground)",
}}
onFocus={(e) => {
e.currentTarget.style.borderColor = "var(--accent-color)";
}}
onBlur={(e) => {
e.target.style.borderColor = "var(--border)";
}}
{...props}
/>
{error && <p className="text-red-400 text-xs mt-1">{error}</p>}
</div>
);
}
);
Input.displayName = "Input";
export default Input;