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: () => ,
};