import { getFieldValue, useField, useFormData, type FieldName } from "@conform-to/react/future"; import { Field, type FieldProps } from "../field/Field"; import { Input } from "./Input"; import { Button } from "../../button"; import { useState } from "react"; import { getPasswordStrength, gradientVariantFromScore } from "../../../lib/pass-checker"; import clsx from "clsx"; interface Props extends Omit { name: FieldName; showScore?: boolean; } export function PasswordField({ name, showScore = false, id: forcedId, ...rest }: Props) { const field = useField(name); const id = forcedId ?? field.id; const [showPassword, setShowPassword] = useState(false); const value = useFormData(field.formId, (formData) => getFieldValue(formData, field.name, { type: "string" }), ); const passwordScore = getPasswordStrength(value); return ( setShowPassword((s) => !s)} > } defaultValue={field.defaultValue} name={field.name} type={showPassword ? "text" : "password"} > {showScore && (
)}
); }