mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-11-04 19:28:46 +01:00
Password managers (1Password etc.) failed to recognize the login form because the identifier field used autocomplete="email" instead of "username". Fix both real auth forms and close accessibility gaps. - Auth.tsx + InviteLanding.tsx: identifier input autocomplete "email" -> "username" (keeps type="email", the recommended pattern). - Add required + aria-required to email/password (and name on sign-up). - Wrap auth errors in role="alert" aria-live="polite" with an id, and reference it from inputs via aria-describedby; toggle aria-invalid when an error is shown. - InviteLanding: add namespaced stable ids (invite-email/password/name) + htmlFor to match Auth.tsx and ensure programmatic labels. - Real <form method/action> and the password field lifetime are unchanged, preserving "save password?" heuristics. - Add ui vitest coverage (Auth.test.tsx + InviteLanding.test.tsx) asserting autocomplete/id/required and the alert error region. InviteUxLab.tsx left untouched: it is a static, read-only design sandbox (readOnly inputs, no form action/submit) not surfaced to password managers, so the functional fix does not apply there. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@paperclipai/ui
Published static assets for the Paperclip board UI.
What gets published
The npm package contains the production build under dist/. It does not ship the UI source tree or workspace-only dependencies.
Storybook
Storybook config, stories, and fixtures live under ui/storybook/.
pnpm --filter @paperclipai/ui storybook
pnpm --filter @paperclipai/ui build-storybook
Typical use
Install the package, then serve or copy the built files from node_modules/@paperclipai/ui/dist.