# Ship @suaveplan/react-auth-whitelabel — white-label auth React components **Package**: `@suaveplan/react-auth-whitelabel` **Status**: PROPOSED **Type**: new-package ## Why Genesis needs a tenant-aware, white-label authentication surface that lets a single build serve many tenants with their own logo, palette, font, and copy. Upstream (`/mnt/s/web/suaveplan/packages/react/react-auth-whitelabel`) ships three forms (`LoginForm`, `RegisterForm`, `PasswordResetForm`), two contexts (`AuthProvider`, `BrandingProvider`), and six hooks; it powers every tenant-branded sign-in flow in the upstream stack but was never enterprise-graded. We re-author it on top of the new `@suaveplan/react-ui` runtime theme mutator so branding writes flow through the canonical token-layer stack instead of poking `document.documentElement.style` from package code. ## What changes - ADDED: `LoginForm` — controlled email/password form with optional OAuth provider list, remember-me, forgot-password, and register-link affordances. - ADDED: `RegisterForm` — controlled register form with optional name field, terms checkbox, OAuth provider list, password confirmation, configurable min length. Split into `register-form-fields.tsx` + `register-form-terms.tsx` sub-components to honour the 300-LOC budget. - ADDED: `PasswordResetForm` — dual-mode (`request` | `confirm`) reset form with success state. Split into `password-reset-request.tsx` + `password-reset-confirm.tsx` + `password-reset-success.tsx` sub-components to honour the 300-LOC budget. - ADDED: `AuthProvider` — context provider that wires `login` / `loginWithProvider` / `register` / `logout` / `requestPasswordReset` / `resetPassword` to a backend reachable at `config.authUrl`. Accepts an injectable `fetch: FetchLike` and an injectable `navigate(url)` seam. - ADDED: `BrandingProvider` — context provider that fetches per-tenant branding (or accepts static branding) and dispatches CSS custom properties through `useThemeMutator().setExtensionTokens(...)`. Wraps `document.title`, ``, and `