--- /** * PasswordInput Pattern * Composition example: Input with show/hide password toggle. * Demonstrates building interactive patterns from UI primitives. */ import type { HTMLAttributes } from 'astro/types'; import { cn } from '@/lib/cn'; import { generateId } from '@/lib/utils'; import { inputVariants, inputSizeConfig } from '@/components/ui/form/Input/input.variants'; import Icon from '@/components/ui/primitives/Icon/Icon.astro'; interface Props extends HTMLAttributes<'input'> { label?: string; error?: string; hint?: string; size?: 'sm' | 'md' | 'lg'; placeholder?: string; class?: string; id?: string; autocomplete?: string; } const { label, error, hint, size = 'md', placeholder = 'Enter password', autocomplete = 'current-password', class: className, id, ...rest } = Astro.props; const inputId = id || generateId('password'); const config = inputSizeConfig[size]; const inputStyles = cn( inputVariants({ size }), error && 'border-destructive focus-visible:ring-destructive', config.baseLeftPadding, config.trailingPadding ); ---
{label && ( )}
{error && (

{error}

)} {hint && !error && (

{hint}

)}