'use client' import type * as React from 'react' import { cn } from '../../../utils/cn' import { useDeferredError } from '../../../hooks/ui/use-deferred-error' import { Button } from '../../ui/button' import { Input } from '../../ui/input' import { PasswordInput } from '../../ui/password-input' export interface OpenFrameSsoSignUpFormProps { /** Controlled field values */ email: string firstName: string lastName: string password: string confirmPassword: string onEmailChange: (value: string) => void onFirstNameChange: (value: string) => void onLastNameChange: (value: string) => void onPasswordChange: (value: string) => void onConfirmPasswordChange: (value: string) => void /** Primary submit ("Continue") */ onSubmit: () => void onForgotPassword: () => void /** Locks the email field, e.g. when it was verified on a previous step. */ emailReadOnly?: boolean submitDisabled?: boolean loading?: boolean disabled?: boolean errors?: { email?: string firstName?: string lastName?: string password?: string confirmPassword?: string } title?: string subtitle?: string emailLabel?: string submitLabel?: string forgotPasswordLabel?: string className?: string } /** * OpenFrame SSO sign-up form. Presentational + controlled — create OpenFrame SSO * credentials (email, name, password). */ export function OpenFrameSsoSignUpForm({ email, firstName, lastName, password, confirmPassword, onEmailChange, onFirstNameChange, onLastNameChange, onPasswordChange, onConfirmPasswordChange, onSubmit, onForgotPassword, emailReadOnly = false, submitDisabled = false, loading = false, disabled = false, errors, title = 'OpenFrame Single Sign-On', subtitle = 'Enter your email and password to access your organization.', emailLabel = 'Email', submitLabel = 'Continue', forgotPasswordLabel = 'Forgot Password?', className, }: OpenFrameSsoSignUpFormProps) { const fieldsDisabled = disabled || loading // Validation messages are deferred while the user is typing (shown on blur or after a pause). const emailErr = useDeferredError(errors?.email, email) const firstNameErr = useDeferredError(errors?.firstName, firstName) const lastNameErr = useDeferredError(errors?.lastName, lastName) const passwordErr = useDeferredError(errors?.password, password) const confirmErr = useDeferredError(errors?.confirmPassword, confirmPassword) const handleKeyDown = (event: React.KeyboardEvent) => { if (event.key === 'Enter' && !fieldsDisabled && !submitDisabled) { onSubmit() } } return (
{/* Header */}

{title}

{subtitle}

onEmailChange(event.target.value)} onKeyDown={handleKeyDown} /> {/* Name + password fields — single column on every breakpoint */} onFirstNameChange(event.target.value)} onKeyDown={handleKeyDown} /> onLastNameChange(event.target.value)} onKeyDown={handleKeyDown} /> onPasswordChange(event.target.value)} onKeyDown={handleKeyDown} /> onConfirmPasswordChange(event.target.value)} onKeyDown={handleKeyDown} /> {/* Forgot password + Continue */}
) }