A fully-controlled, presentational React form component used on Sign Up and Accept Invitation screens to collect account details (name + password), with optional SSO provider shortcuts. ## Key Components | Export | Type | Description | |---|---|---| | `CompleteAccountForm` | React component | Main form component — renders SSO buttons, name/password fields, and action buttons | | `CompleteAccountFormProps` | Interface | Full prop contract for the form, including field values, change handlers, labels, and error state | **Internal behaviours:** - **Deferred error display** — `useDeferredError` delays validation messages until blur or after a typing pause, preventing premature error flashes - **Enter-key submission** — `handleKeyDown` triggers `onSubmit` on Enter across all fields when not disabled/loading - **SSO section** — rendered conditionally; shows `SsoProviderButtons` + a divider only when `ssoProviders` is non-empty - **Optional back action** — `onBack` renders a transparent "Back" button; omitting it inserts a spacer to keep the submit button right-aligned per design ## Usage Example ```typescript import { CompleteAccountForm } from './complete-account-form' function SignUpPage() { const [fields, setFields] = useState({ firstName: '', lastName: '', password: '', confirmPassword: '' }) return ( setFields(f => ({ ...f, firstName: v }))} onLastNameChange={(v) => setFields(f => ({ ...f, lastName: v }))} onPasswordChange={(v) => setFields(f => ({ ...f, password: v }))} onConfirmPasswordChange={(v) => setFields(f => ({ ...f, confirmPassword: v }))} onSubmit={handleSubmit} onBack={() => router.push('/org')} ssoProviders={['google', 'microsoft']} onSsoClick={(provider) => handleSso(provider)} errors={{ password: 'Must be at least 8 characters' }} loading={isSubmitting} /> ) } ``` > **Source:** [`flamingo-stack/openframe-oss-lib`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/complete-account-form.tsx)