import type { Meta, StoryObj } from '@storybook/nextjs-vite'
import { useState } from 'react'
import { OpenFrameSsoLoginForm, OpenFrameSsoSignUpForm, SsoAuthShell } from '../../components/features/auth'
const meta = {
title: 'Auth/OpenFrame SSO',
parameters: {
layout: 'fullscreen',
docs: {
description: {
component:
'OpenFrame SSO (IdP) screens from the auth redesign. Centered single-column SsoAuthShell (logo top, card centered, Powered by Flamingo bottom). Login and Sign Up forms, both presentational + controlled with a password show/hide toggle.',
},
},
},
tags: ['autodocs'],
} satisfies Meta
export default meta
type Story = StoryObj
function SsoLoginPage({ initialEmail = '', initialPassword = '' }: { initialEmail?: string; initialPassword?: string }) {
const [email, setEmail] = useState(initialEmail)
const [password, setPassword] = useState(initialPassword)
const isValid = !!email.trim() && password.length > 0
return (
{}}
onForgotPassword={() => {}}
submitDisabled={!isValid}
/>
)
}
function SsoSignUpPage({ filled = false }: { filled?: boolean }) {
const [email, setEmail] = useState(filled ? 'ada@example.com' : '')
const [firstName, setFirstName] = useState(filled ? 'Ada' : '')
const [lastName, setLastName] = useState(filled ? 'Lovelace' : '')
const [password, setPassword] = useState(filled ? 'SuperSecretPassphrase2024!' : '')
const [confirmPassword, setConfirmPassword] = useState(filled ? 'SuperSecretPassphrase2024!' : '')
const isValid =
!!email.trim() &&
!!firstName.trim() &&
!!lastName.trim() &&
password.length >= 8 &&
password === confirmPassword
return (
{}}
onForgotPassword={() => {}}
submitDisabled={!isValid}
/>
)
}
/** Login — empty email + password, submit disabled. */
export const LoginEmpty: Story = {
render: () => ,
}
/** Login — filled, submit enabled. */
export const LoginFilled: Story = {
render: () => ,
}
/** Sign Up — empty fields, submit disabled. */
export const SignUpEmpty: Story = {
render: () => ,
}
/** Sign Up — filled and terms accepted, submit enabled. */
export const SignUpFilled: Story = {
render: () => ,
}