/** Data type of the additional field. */
export type AdditionalFieldType = "string" | "number" | "boolean" | "date";
/** Runtime value held by an `AdditionalField` (matches `AdditionalFieldType`). */
export type AdditionalFieldValue = string | number | boolean | Date;
/** Value stored for an additional field while it is owned by a form. */
export type AdditionalFieldFormValue = AdditionalFieldValue | null;
/** Default delay for custom additional-field validation after a value changes. */
export declare const DEFAULT_ADDITIONAL_FIELD_VALIDATION_DEBOUNCE_MS = 300;
/** Runtime additional-field values keyed by their configured model names. */
export type AdditionalFieldFormValues = Record<string, AdditionalFieldFormValue>;
/** UI rendering choice. Default is inferred from `AdditionalField.type`. */
export type AdditionalFieldInputType = "input" | "textarea" | "number" | "slider" | "switch" | "checkbox" | "select" | "combobox" | "date" | "datetime" | "hidden";
/**
 * Augmentation target for widening `AdditionalField` slot types
 * (`label`, `renderProps`, `renderResult`) in UI packages.
 *
 * @example
 * declare module "@better-auth-ui/core" {
 *   interface AdditionalFieldRegister { label: ReactNode }
 * }
 */
export interface AdditionalFieldRegister {
}
/** Resolved label type. Defaults to `string`. */
export type AdditionalFieldLabel = AdditionalFieldRegister extends {
    label: infer L;
} ? L : string;
/** Resolved argument type for `AdditionalField.render`. */
export type AdditionalFieldRenderProps = AdditionalFieldRegister extends {
    renderProps: infer P;
} ? P : {
    name: string;
    field: AdditionalField;
    value: AdditionalFieldFormValue;
    onBlur: () => void;
    onChange: (value: AdditionalFieldFormValue) => void;
    isInvalid?: boolean;
    errors?: unknown[];
    isPending?: boolean;
};
/** Resolved return type for `AdditionalField.render`. */
export type AdditionalFieldRenderResult = AdditionalFieldRegister extends {
    renderResult: infer R;
} ? R : unknown;
/** Option for a `select` input. */
export interface AdditionalFieldOption {
    label: AdditionalFieldLabel;
    value: string;
}
/** Configuration for a single additional user field. */
export interface AdditionalField {
    /** Field name. Used as the user object key and form input `name`. */
    name: string;
    /** Data type of the field. */
    type: AdditionalFieldType;
    /** Visible label rendered next to the input. */
    label: AdditionalFieldLabel;
    /** Override the default UI rendering. @default inferred from `type` */
    inputType?: AdditionalFieldInputType;
    /** Placeholder text. */
    placeholder?: string;
    /** Content rendered as a prefix addon inside the input group. */
    prefix?: AdditionalFieldLabel;
    /** Content rendered as a suffix addon inside the input group. */
    suffix?: AdditionalFieldLabel;
    /**
     * `Intl.NumberFormat` options for number fields. Use `maximumFractionDigits`
     * (and optionally `minimumFractionDigits`) to allow decimals, or `style: "currency"`
     * / `style: "percent"` for richer formatting.
     */
    formatOptions?: Intl.NumberFormatOptions;
    /** Minimum value. Applies to `number` and `slider` input types. */
    min?: number;
    /** Maximum value. Applies to `number` and `slider` input types. */
    max?: number;
    /** Step value. Applies to `number` and `slider` input types. */
    step?: number;
    /** @default false */
    required?: boolean;
    /**
     * Default value used to seed the input on the sign-up form. On the user
     * profile, the value is always re-seeded from the persisted session.
     */
    defaultValue?: AdditionalFieldValue | null;
    /**
     * Render the field but exclude it from submission payloads.
     * @default false
     */
    readOnly?: boolean;
    /**
     * Show a copy-to-clipboard button as a suffix. Input variant only.
     * @default false
     */
    copyable?: boolean;
    /** Options for the select input type. */
    options?: AdditionalFieldOption[];
    /**
     * Custom client-side validation. Throw an `Error` (the `message` is shown
     * to the user) when invalid; return / resolve normally when valid.
     *
     * Receives the current typed form value.
     */
    validate?: (value: AdditionalFieldValue | null | undefined) => void | Promise<void>;
    /**
     * Delay custom validation after a value changes. Set to `0` to validate
     * immediately.
     * @default 300
     */
    validateDebounceMs?: number;
    /**
     * Render on the sign-up form. Pass `"above"` to render between the `email`
     * and `password` fields; otherwise the field renders below the password
     * block. `true` is an alias for `"below"`.
     * @default false
     */
    signUp?: boolean | "above" | "below";
    /** Render on the user profile. @default true */
    profile?: boolean;
    /**
     * Custom renderer. Replaces the host UI package's built-in input. Use the
     * form bindings supplied by the host package to read and update its value.
     */
    render?: (props: AdditionalFieldRenderProps) => AdditionalFieldRenderResult;
}
/** Ordered list of `AdditionalField` configurations. */
export type AdditionalFields = AdditionalField[];
/** Resolve the initial form value for a configured additional field. */
export declare function getAdditionalFieldDefaultValue(field: AdditionalField): AdditionalFieldFormValue;
/** Build collision-safe form defaults for a runtime list of fields. */
export declare function getAdditionalFieldDefaultValues(fields: readonly AdditionalField[]): AdditionalFieldFormValues;
/** Keep only writable configured values when building an API payload. */
export declare function getAdditionalFieldSubmitValues(fields: readonly AdditionalField[], values: AdditionalFieldFormValues): AdditionalFieldFormValues;
/** Validate required semantics without relying on native constraint state. */
export declare function validateAdditionalFieldRequired(field: AdditionalField, value: AdditionalFieldFormValue, requiredMessage: string): string | undefined;
/** Run a configured custom validator and normalize thrown values as errors. */
export declare function validateAdditionalFieldValue(field: AdditionalField, value: AdditionalFieldFormValue): Promise<string | undefined>;
/**
 * Convert a raw form value into the JS value Better Auth expects.
 * Returns `null` for blank input (explicit clear), `undefined` when omitted
 * or unparseable. Booleans always return `true`/`false`.
 */
export declare function parseAdditionalFieldValue(field: AdditionalField, raw: string | null | undefined): AdditionalFieldValue | null | undefined;
/** Parse and validate a model's configured fields from submitted form data. */
export declare function parseAdditionalFieldValues(fields: AdditionalFields, formData: FormData): Promise<Record<string, AdditionalFieldValue | null>>;
/** Seed field defaults from a Better Auth model returned by a query. */
export declare function fieldsWithModelValues(fields: AdditionalFields, model: Record<string, unknown>): AdditionalFields;
/** Format a persisted additional-field value for compact read-only display. */
export declare function formatAdditionalFieldValue(value: unknown, languageTag?: string): string | undefined;
/** Resolve the effective `inputType`, defaulting based on `field.type`. */
export declare function resolveInputType(field: AdditionalField): AdditionalFieldInputType;
