/**
 * Form field types and utilities for dynamic form generation
 */
type FormFieldType = "text" | "email" | "search" | "password" | "tel" | "textarea" | "select" | "radio" | "checkbox" | "checkbox-group" | "number" | "url" | "date" | "date-picker" | "date-range" | "time" | "file" | "rich-text" | "multi-select";
interface SelectOption {
    value: string;
    label: string;
    disabled?: boolean;
    description?: string;
}
interface FormFieldConfig {
    /**
     * Unique field name (used as the key in form values)
     */
    name: string;
    /**
     * Field type
     */
    type: FormFieldType;
    /**
     * Display label for the field
     */
    label: string;
    /**
     * Placeholder text
     */
    placeholder?: string;
    /**
     * Whether the field is required
     * @default false
     */
    required?: boolean;
    /**
     * Column span in grid layout (1-12)
     * @default 12 (full width)
     */
    columnSpan?: number;
    /**
     * Options for select/radio/checkbox-group fields
     */
    options?: SelectOption[];
    /**
     * Number of rows for textarea
     * @default 4
     */
    rows?: number;
    /**
     * Custom validation function
     * Return undefined for valid, or an error message string for invalid
     */
    validator?: (value: any, allValues: Record<string, any>) => string | undefined;
    /**
     * Additional CSS classes for the field wrapper
     */
    className?: string;
    /**
     * Whether the field is disabled
     * @default false
     */
    disabled?: boolean;
    /**
     * Accepted file types for file inputs (MIME types or extensions)
     * @example ".pdf,.doc,.docx"
     * @example "image/*,application/pdf"
     */
    accept?: string;
    /**
     * Maximum file size in bytes for file inputs
     * @default 5MB (5 * 1024 * 1024)
     */
    maxSize?: number;
    /**
     * Maximum number of files for file inputs
     * @default 1
     */
    maxFiles?: number;
    /**
     * Allow multiple file selection
     * @default false
     */
    multiple?: boolean;
    /**
     * Description text for rich-text editor
     */
    description?: string;
    /**
     * Layout for radio/checkbox groups
     * @default "stacked"
     */
    layout?: "grid" | "stacked";
}
/**
 * Generate initial values object from form field configs
 */
declare function generateInitialValues(fields: FormFieldConfig[]): Record<string, any>;
/**
 * Generate validation schema from form field configs
 */
declare function generateValidationSchema(fields: FormFieldConfig[]): Record<string, (value: any, allValues: Record<string, any>) => string | undefined>;
/**
 * Get grid column span class for Tailwind.
 *
 * Uses a static lookup so every class string is a complete literal that
 * Tailwind's scanner can find. The field is full-width (col-span-12) on
 * mobile/small screens and respects the requested span from the `md`
 * breakpoint (768px) up. This avoids cramped multi-column layouts in
 * narrow form slots (e.g. contact blocks with side-by-side info panels).
 */
declare function getColumnSpanClass(span?: number): string;

export { type FormFieldConfig as F, type SelectOption as S, generateValidationSchema as a, getColumnSpanClass as b, type FormFieldType as c, generateInitialValues as g };
