Yaltopia-FIFA/components/ui/password-input.tsx
Kirubel-Kibru-Yaltopia 89440985f1
Some checks failed
Deploy to Cloudflare Workers / deploy (push) Has been cancelled
x
2026-05-24 21:46:10 +03:00

44 lines
1.2 KiB
TypeScript

"use client";
import * as React from "react";
import { Eye, EyeOff } from "lucide-react";
import { cn } from "@/lib/utils";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
const PasswordInput = React.forwardRef<
HTMLInputElement,
Omit<React.ComponentProps<typeof Input>, "type">
>(({ className, ...props }, ref) => {
const [visible, setVisible] = React.useState(false);
return (
<div className="relative">
<Input
type={visible ? "text" : "password"}
className={cn("pr-10", className)}
ref={ref}
{...props}
/>
<Button
type="button"
variant="ghost"
size="icon"
className="absolute right-0 top-0 h-9 w-9 text-muted-foreground hover:text-foreground"
onClick={() => setVisible((v) => !v)}
tabIndex={-1}
aria-label={visible ? "Hide password" : "Show password"}
>
{visible ? (
<EyeOff className="h-4 w-4" aria-hidden />
) : (
<Eye className="h-4 w-4" aria-hidden />
)}
</Button>
</div>
);
});
PasswordInput.displayName = "PasswordInput";
export { PasswordInput };