Storybook stories for the `LoginForm` authentication component, demonstrating three states — empty, filled, and SSO — rendered inside a full-page `AuthShell` with tab navigation. ## Key Components | Export | Type | Description | |--------|------|-------------| | `Empty` | `Story` | Login form with no email input; submit button disabled | | `Filled` | `Story` | Login form with a valid email; Continue button enabled | | `SSO` | `Story` | Login form with SSO provider buttons replacing the submit action | | `LoginPage` | Helper component | Wraps `LoginForm` in `AuthShell` with `TabSelector` (Sign Up / Login tabs), managing local email and tab state | ## Usage Example ```typescript // Render the Filled story manually in a test or custom harness import { Filled } from './Login.stories' // All three stories accept no args; state is managed internally // Configure SSO providers directly via LoginPage internals const SSO_PROVIDERS: AuthSsoProvider[] = ['openframe', 'google', 'microsoft'] // Passed as ssoProviders prop — replaces submit button with provider buttons ``` ## Notes - Stories are `fullscreen` layout — use the Storybook **viewport toolbar** to verify responsive breakpoints (desktop two-column, tablet/mobile stacked). - `LoginPage` is a controlled wrapper: `email` and `tab` state live locally via `useState`; `onSubmit` and `onForgotPassword` are no-ops. - The Sign Up tab renders a placeholder directing users to the `Auth/Create Organization` story group. - Source: [`Login.stories.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/Login.stories.tsx)