Types
Complete TypeScript type reference for better-form.
WizardConfig
interface WizardConfig {
id: string;
title?: string;
steps: WizardStep[];
autoSave?: boolean;
storageKey?: string;
}WizardStep
interface WizardStep {
id: string;
title: string;
description?: string;
fieldGroups: FieldGroup[];
conditions?: StepConditions;
onEnter?: (formData: Record<string, unknown>) => void;
onLeave?: (formData: Record<string, unknown>) => void;
}FieldGroup
interface FieldGroup {
id: string;
title?: string;
description?: string;
fields: WizardField[];
layout?: 'vertical' | 'horizontal' | 'grid';
columns?: number;
}WizardField
interface WizardField {
// Identity
id: string;
name: string;
label: string;
type: FieldType;
// Display
placeholder?: string;
description?: string;
width?: FieldWidth;
className?: string;
// State
required?: boolean;
requiredMessage?: string;
disabled?: boolean;
defaultValue?: unknown;
// Validation
validation?: ValidationRule;
customValidation?: (value: unknown, formData: Record<string, unknown>) => string | undefined | Promise<string | undefined>;
// Conditions
conditions?: FieldConditions;
// Select/Radio/Checkbox options
options?: SelectOption[];
layout?: 'horizontal' | 'vertical' | 'grid';
columns?: number;
// Number specific
min?: number;
max?: number;
step?: number;
// Text specific
minLength?: number;
maxLength?: number;
textTransform?: TextTransform;
// File specific
accept?: string;
maxSize?: number;
multiple?: boolean;
}FieldType
type FieldType =
| 'text'
| 'textarea'
| 'number'
| 'select'
| 'radio'
| 'checkbox'
| 'single-checkbox'
| 'boolean'
| 'date'
| 'file'
| 'hidden';ValidationRule
interface ValidationRule {
// String
minLength?: number;
minLengthMessage?: string;
maxLength?: number;
maxLengthMessage?: string;
pattern?: string;
patternMessage?: string;
// Number
min?: number;
minMessage?: string;
max?: number;
maxMessage?: string;
}FieldConditions
interface FieldConditions {
visible?: ConditionGroup;
required?: ConditionGroup;
disabled?: ConditionGroup;
}
interface ConditionGroup {
operator: 'AND' | 'OR';
conditions: (Condition | ConditionGroup)[];
}
interface Condition {
field: string;
operator: ConditionOperator;
value: unknown;
}
type ConditionOperator =
| 'equals'
| 'notEquals'
| 'contains'
| 'notContains'
| 'greaterThan'
| 'lessThan'
| 'isEmpty'
| 'isNotEmpty';FieldComponentProps
interface FieldComponentProps {
field: WizardField;
value: unknown;
onChange: (value: unknown) => void;
error?: string;
disabled?: boolean;
className?: string;
}BetterFormPlugin
interface BetterFormPlugin {
name: string;
version: string;
fieldComponents: Record<string, ComponentType<FieldComponentProps>>;
fieldTypes?: string[];
init?: () => void | Promise<void>;
destroy?: () => void | Promise<void>;
}