import React, { useState } from "react"; import { E_PASSWORD_STRENGTH } from "@plane/constants"; import { cn, getPasswordStrength } from "@plane/utils"; import { PasswordStrengthIndicator } from "../form-fields/password/indicator"; import { AuthInput } from "./auth-input"; export interface AuthPasswordInputProps extends Omit, "autoComplete"> { label?: string; error?: string; showPasswordStrength?: boolean; showPasswordToggle?: boolean; containerClassName?: string; errorClassName?: string; autoComplete?: "on" | "off"; onPasswordChange?: (password: string) => void; onPasswordStrengthChange?: (strength: E_PASSWORD_STRENGTH) => void; } export const AuthPasswordInput: React.FC = ({ label = "Password", error, showPasswordStrength = true, showPasswordToggle = true, containerClassName = "", errorClassName = "", className = "", value = "", onChange, onPasswordChange, onPasswordStrengthChange, ...props }) => { const [isFocused, setIsFocused] = useState(false); const handleChange = (e: React.ChangeEvent) => { const newPassword = e.target.value; onChange?.(e); onPasswordChange?.(newPassword); }; const handleFocus = () => { setIsFocused(true); }; const handleBlur = () => { setIsFocused(false); }; const passwordStrength = getPasswordStrength(value as string); // Notify parent of strength change React.useEffect(() => { onPasswordStrengthChange?.(passwordStrength); }, [passwordStrength, onPasswordStrengthChange]); return (
{showPasswordStrength && value && isFocused && ( )}
); };