# PasswordInput

## 2026-07-28 — New atom: bare password input with show/hide toggle

**Prompted by:** Hellen Tran (PO) — frontend Account cluster (Sprint A atoms)

### What changed
- New atom `PasswordInput` (`packages/shadcn/src/components/ui/password-input.tsx`).
- Base Input styling (square corners, `--primary` focus ring, `text-body-medium`) plus a
  right-aligned eye toggle (lucide `EyeIcon`/`EyeOffIcon`) that switches the input `type` between
  `password` and `text`.
- Unopinionated: no label, no built-in validation, no strength popover — controlled/uncontrolled
  like a native input. Toggle is `tabIndex={-1}` + `aria-pressed`; supports `disabled`/`aria-invalid`.

### Why
- The existing `PasswordField` (in `signup-form-primitives.tsx`) is a higher-level **molecule** that
  bundles Field + Label + a fixed "min 8 / meets requirements" validation + optional strength
  popover — too opinionated for the current/confirm fields of a Change Password form, which need a
  reveal toggle but their own validation. This atom fills that gap without duplicating the reveal
  logic per screen. Named `PasswordInput` to avoid colliding with the existing `PasswordField`.

### Affected tokens / files
- `packages/shadcn/src/components/ui/password-input.tsx` (new)
- `packages/shadcn/src/components/index.tsx`, `tsup.config.ts`, `package.json` (registration)
- `apps/docs/stories/shadcn/atoms/password-input.stories.tsx` (new story)
