import { InputSpec, LazyBuild } from './inputSpec';
import { ListValueSpecText, Pattern, RandomString, UniqueBy, ValueSpecList } from '../inputSpecTypes';
import { z } from 'zod';
/**
 * Builder class for defining list-type form fields.
 *
 * A list presents an interface to add, remove, and reorder items. Items can be
 * either text strings ({@link List.text}) or structured objects ({@link List.obj}).
 *
 * Used with {@link Value.list} to include a list field in an {@link InputSpec}.
 */
export declare class List<Type extends StaticValidatedAs, StaticValidatedAs = Type, OuterType = unknown> {
    build: LazyBuild<{
        spec: ValueSpecList;
        validator: z.ZodType<Type>;
    }, OuterType>;
    readonly validator: z.ZodType<StaticValidatedAs>;
    private constructor();
    readonly _TYPE: Type;
    /**
     * Creates a list of text input items.
     *
     * @param a - List-level options (name, description, min/max length, defaults)
     * @param aSpec - Item-level options (patterns, input mode, masking, generation)
     */
    static text(a: {
        name: string;
        description?: string | null;
        warning?: string | null;
        default?: string[];
        minLength?: number | null;
        maxLength?: number | null;
    }, aSpec: {
        /**
         * @description Mask (aka camouflage) text input with dots: ● ● ●
         * @default false
         */
        masked?: boolean;
        placeholder?: string | null;
        minLength?: number | null;
        maxLength?: number | null;
        /**
         * @description A list of regular expressions to which the text must conform to pass validation. A human readable description is provided in case the validation fails.
         * @default []
         * @example
         * ```
          [
            {
              regex: "[a-z]",
              description: "May only contain lower case letters from the English alphabet."
            }
          ]
         * ```
         */
        patterns?: Pattern[];
        /**
         * @description Informs the browser how to behave and which keyboard to display on mobile
         * @default "text"
         */
        inputmode?: ListValueSpecText['inputmode'];
        /**
         * @description Displays a button that will generate a random string according to the provided charset and len attributes.
         */
        generate?: null | RandomString;
    }): List<string[], string[], unknown>;
    /** Like {@link List.text} but options are resolved lazily at runtime via a builder function. */
    static dynamicText<OuterType = unknown>(getA: LazyBuild<{
        name: string;
        description?: string | null;
        warning?: string | null;
        default?: string[];
        minLength?: number | null;
        maxLength?: number | null;
        disabled?: false | string;
        generate?: null | RandomString;
        spec: {
            masked?: boolean;
            placeholder?: string | null;
            minLength?: number | null;
            maxLength?: number | null;
            patterns?: Pattern[];
            inputmode?: ListValueSpecText['inputmode'];
        };
    }, OuterType>): List<string[], string[], OuterType>;
    /**
     * Creates a list of structured object items, each defined by a nested {@link InputSpec}.
     *
     * @param a - List-level options (name, description, min/max length)
     * @param aSpec - Item-level options (the nested spec, display expression, uniqueness constraint)
     */
    static obj<Type extends StaticValidatedAs, StaticValidatedAs extends Record<string, any>>(a: {
        name: string;
        description?: string | null;
        warning?: string | null;
        default?: [];
        minLength?: number | null;
        maxLength?: number | null;
    }, aSpec: {
        spec: InputSpec<Type, StaticValidatedAs>;
        displayAs?: null | string;
        uniqueBy?: null | UniqueBy;
    }): List<Type[], StaticValidatedAs[], unknown>;
}
