registry/default/variants/v-input-18.tsx
"use client";
import { EyeIcon, EyeOffIcon } from "lucide-react";
import { useState } from "react";
import { Field, FieldLabel } from "@/registry/default/ui/field";
import { Input } from "@/registry/default/ui/input";
export function Pattern() {
const [isVisible, setIsVisible] = useState<boolean>(false);
const toggleVisibility = () => setIsVisible((prevState) => !prevState);
return (
<Field className="w-full max-w-xs">
<div className="flex items-center justify-between">
<FieldLabel htmlFor="password-link">Password</FieldLabel>
<a
className="font-medium text-primary text-xs hover:underline"
href="#"
>
Forgot password?
</a>
</div>
<div className="relative">
<Input
className="pe-9"
id="password-link"
type={isVisible ? "text" : "password"}
/>
<button
aria-label={isVisible ? "Hide password" : "Show password"}
aria-pressed={isVisible}
className="absolute inset-e-0 inset-y-0 flex h-full w-9 items-center justify-center rounded-e-md text-muted-foreground/80 outline-none transition-[color,box-shadow] hover:text-foreground focus:z-10 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50"
onClick={toggleVisibility}
type="button"
>
{isVisible ? (
<EyeOffIcon aria-hidden="true" />
) : (
<EyeIcon aria-hidden="true" />
)}
</button>
</div>
</Field>
);
}






















