import React, { useState } from 'react'; export interface PasswordInputProps extends Omit< React.InputHTMLAttributes, 'type' | 'className' > { /** * Texto de la etiqueta asociada al input (opcional). */ label?: string; /** * Clases CSS personalizables para distintos elementos. */ className?: { /** Clases para el contenedor del componente */ container?: string; /** Clases para la etiqueta */ label?: string; /** Clases para el campo input */ input?: string; /** Clases para el botón de toggle */ button?: string; }; } /** * Componente especializado para inputs de contraseña con botón de mostrar/ocultar. */ export default function PasswordInput(props: PasswordInputProps) { const { label, name, id, className, ...rest } = props; const [visible, setVisible] = useState(false); // Determina el tipo de input según el estado de visibilidad const inputType = visible ? 'text' : 'password'; const inputId = id || name || (label ? `password-${label.replace(/\s+/g, '-')}` : undefined); const toggleVisibility = () => setVisible((v) => !v); return (
{label && inputId && ( )}
); }