Presentational, fully-controlled sign-up form for creating OpenFrame SSO credentials (email, first/last name, password, confirm password) with deferred field-level validation. ## Key Components ### `OpenFrameSsoSignUpForm` The sole export — a stateless React component that delegates all state management to the parent. Key behaviours: - **Deferred errors** — field validation messages are surfaced via `useDeferredError`, showing only on blur or after a typing pause to avoid premature error states. - **Enter-key submission** — any field's `keydown` event triggers `onSubmit` when the form is not disabled or loading. - **Read-only email** — the `emailReadOnly` prop locks the email field (e.g. when email was verified in a prior step). - **Loading / disabled states** — `loading` shows a spinner on the submit button; `disabled` or `loading` disables all fields simultaneously. ### `OpenFrameSsoSignUpFormProps` Full TypeScript interface exposing controlled field values, change handlers, submission callbacks, per-field error strings, and display-copy overrides (`title`, `subtitle`, `emailLabel`, `submitLabel`, `forgotPasswordLabel`). ## Usage Example ```typescript import { OpenFrameSsoSignUpForm } from './openframe-sso-signup-form' function SignUpPage() { const [email, setEmail] = useState('') const [firstName, setFirstName] = useState('') const [lastName, setLastName] = useState('') const [password, setPassword] = useState('') const [confirmPassword, setConfirmPassword] = useState('') return ( console.log('submit')} onForgotPassword={() => console.log('forgot password')} errors={{ email: 'Invalid email', confirmPassword: 'Passwords do not match' }} emailReadOnly loading={false} /> ) } ``` **Source:** [`openframe-sso-signup-form.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/openframe-sso-signup-form.tsx)