import React from 'react'; import type { ZoraBaseProps } from '../../../../types/base'; import type { FormErrors, FormFieldConfig, FormValues } from '../../../../types/form'; import { FormActions, FormError, useFormController } from '../../../form/public'; import { View } from '../../../layout/public'; import { AuthFormField } from './AuthFormField'; interface AuthFormProps { fields: readonly FormFieldConfig[]; values: FormValues; onChange: (values: FormValues) => void; onSubmit?: (values: FormValues) => void | Promise; errors?: FormErrors; error?: React.ReactNode; loading?: boolean; disabled?: boolean; submitLabel?: React.ReactNode; actions?: React.ReactNode; testID?: string; interactionPolicy?: ZoraBaseProps['interactionPolicy']; } /*** Keeps config-driven field orchestration private to the auth patterns that own it. */ export function AuthForm({ fields, values, onChange, onSubmit, errors, error, loading = false, disabled = false, submitLabel = 'Submit', actions, testID, interactionPolicy, }: AuthFormProps) { const controller = useFormController({ fields, values, errors, onChange, onSubmit }); return ( {fields.map((field) => ( ))} { if (interactionPolicy !== 'passive') void controller.handleSubmit(); }} submitLabel={submitLabel} > {actions} ); }