import { type FileUploadFieldComponent } from '@defra/forms-model';
import joi, { type ArraySchema } from 'joi';
import { FormComponent } from '~/src/server/plugins/engine/components/FormComponent.js';
import { type ErrorMessageTemplateList, type FileState, type FileUpload, type FileUploadMetadata, type FormPayload, type FormState, type FormStateValue, type FormSubmissionError, type FormSubmissionState, type SummaryList, type UploadState, type UploadStatusFileResponse, type UploadStatusResponse } from '~/src/server/plugins/engine/types.js';
import { type FormQuery } from '~/src/server/routes/types.js';
export declare const uploadIdSchema: joi.StringSchema<string>;
export declare const fileSchema: joi.ObjectSchema<FileUpload>;
export declare const tempFileSchema: joi.ObjectSchema<FileUpload>;
export declare const formFileSchema: joi.ObjectSchema<FileUpload>;
export declare const metadataSchema: joi.ObjectSchema<FileUploadMetadata>;
export declare const tempStatusSchema: joi.ObjectSchema<UploadStatusFileResponse>;
export declare const formStatusSchema: joi.ObjectSchema<UploadStatusResponse>;
export declare const itemSchema: joi.ObjectSchema<FileState>;
export declare const tempItemSchema: joi.ObjectSchema<FileState>;
export declare const formItemSchema: joi.ObjectSchema<FileState>;
export declare class FileUploadField extends FormComponent {
    options: FileUploadFieldComponent['options'];
    schema: FileUploadFieldComponent['schema'];
    formSchema: ArraySchema<FileState>;
    stateSchema: ArraySchema<FileState>;
    constructor(def: FileUploadFieldComponent, props: ConstructorParameters<typeof FormComponent>[1]);
    getFormValueFromState(state: FormSubmissionState): UploadState | undefined;
    getFormValue(value?: FormStateValue | FormState): UploadState | undefined;
    getDisplayStringFromFormValue(files: FileState[] | undefined): string;
    getDisplayStringFromState(state: FormSubmissionState): string;
    getContextValueFromFormValue(files: UploadState | undefined): string[] | null;
    getContextValueFromState(state: FormSubmissionState): string[] | null;
    getViewModel(payload: FormPayload, errors?: FormSubmissionError[], query?: FormQuery): {
        value: string;
        name: string;
        upload: {
            count: number;
            summaryList: SummaryList;
        };
        label: {
            text: string;
        };
        id: string;
        type?: string;
        hint?: {
            id?: string;
            text: string;
        };
        prefix?: import("./types.js").ComponentText;
        suffix?: import("./types.js").ComponentText;
        classes?: string;
        condition?: string;
        errors?: FormSubmissionError[];
        errorMessage?: {
            text: string;
        };
        summaryHtml?: string;
        html?: string;
        attributes: {
            autocomplete?: string;
            maxlength?: number;
            multiple?: string;
            accept?: string;
            inputmode?: string;
        };
        content?: import("./types.js").Content | import("./types.js").Content[] | string;
        maxlength?: number;
        maxwords?: number;
        rows?: number;
        items?: import("./types.js").ListItem[] | import("./types.js").DateInputItem[];
        fieldset?: {
            attributes?: string | Record<string, string>;
            legend?: import("./types.js").Label;
        };
        formGroup?: {
            classes?: string;
            attributes?: string | Record<string, string>;
        };
        components?: import("./types.js").ComponentViewModel[];
    };
    isValue(value?: FormStateValue | FormState): value is UploadState;
    /**
     * For error preview page that shows all possible errors on a component
     */
    getAllPossibleErrors(): ErrorMessageTemplateList;
    /**
     * Static version of getAllPossibleErrors that doesn't require a component instance.
     */
    static getAllPossibleErrors(): ErrorMessageTemplateList;
}
