import { BaseElement } from '../shared/base';
import { ValidationConfig } from '../shared/validation';
/**
 * Variants of the `file` element type. Each value here maps 1:1 to a
 * Vue file under `src/elements/file/` via the engine's registry.
 */
export type FileStyle = "upload" | "dropzone" | "asset-picker";
export interface FileElement extends BaseElement<`file.${FileStyle}`> {
    name: string;
    label?: string;
    /**
     * MIME-type / extension hint string. Mirrors the HTML `accept` attribute
     * and the v2 schema (e.g. "image/jpg, image/jpeg, image/png, application/pdf").
     */
    accept?: string;
    /** Parsed list form — engine accepts either `accept` or `acceptedFileTypes`. */
    acceptedFileTypes?: ReadonlyArray<string>;
    /** Allow selecting more than one file. */
    multiple?: boolean;
    /** Maximum size in bytes for any single uploaded file. */
    maxFileSize?: number;
    /** For `asset-picker`: filter the asset library to a specific category. */
    assetType?: string;
    /** Validation rules (Laravel-style strings). */
    validation?: ValidationConfig;
}
export declare const FileElementDefaults: {
    readonly type: "file.upload";
    readonly label: "File Upload";
    readonly disabled: false;
    readonly columns: 12;
    readonly columnsSm: 12;
    readonly columnsMd: 12;
    readonly columnsLg: 12;
    readonly columnsXl: 12;
};
export declare const FileElementMetadata: {
    readonly icon: "photo-film-music";
    readonly displayLabel: "File Upload";
    readonly elementCategory: "file";
    readonly description: "Upload files or invoke the asset picker to select an asset from the library.";
};
export declare const FileElementEditConfig: {
    readonly label: {
        readonly type: "input.text";
        readonly defaultValue: "";
        readonly label: "Label";
        readonly columnsMd: 6;
        readonly columns: 12;
        readonly section: "configuration";
    };
    readonly defaultValue: {
        readonly type: "input.text";
        readonly label: "Default Value";
        readonly columnsMd: 6;
        readonly columns: 12;
        readonly section: "configuration";
    };
    readonly name: {
        readonly type: "picker.data-model";
        readonly defaultValue: "";
        readonly label: "Name";
        readonly columns: 12;
        readonly section: "advanced";
    };
    readonly style: {
        readonly type: "option-select.select";
        readonly defaultValue: "upload";
        readonly label: "Input Style";
        readonly columns: 6;
        readonly selectOptions: readonly [{
            readonly label: "Upload";
            readonly value: "upload";
        }, {
            readonly label: "Dropzone";
            readonly value: "dropzone";
        }, {
            readonly label: "Asset Picker";
            readonly value: "asset-picker";
        }];
        readonly section: "layout";
    };
    readonly accept: {
        readonly type: "input.text";
        readonly label: "Accept File Types (comma separated: 'image/jpg, image/jpeg, image/png, image/*, application/pdf')";
        readonly columns: 12;
        readonly section: "configuration";
    };
    readonly multiple: {
        readonly type: "boolean.switch";
        readonly label: "Allow multiple files";
        readonly columns: 6;
        readonly section: "configuration";
    };
    readonly maxFileSize: {
        readonly type: "input.text";
        readonly contentType: "integer";
        readonly label: "Max File Size (bytes)";
        readonly columns: 6;
        readonly section: "configuration";
    };
    readonly assetType: {
        readonly type: "input.text";
        readonly label: "Asset Type";
        readonly columns: 12;
        readonly section: "configuration";
        readonly conditionParams: [{
            readonly name: "style";
            readonly logic: "==";
            readonly value: "asset-picker";
        }];
    };
    readonly required: {
        readonly type: "boolean.switch";
        readonly label: "Make item required";
        readonly columns: 12;
        readonly section: "configuration";
    };
    readonly readonly: {
        readonly type: "boolean.switch";
        readonly label: "Make item read-only";
        readonly columns: 12;
        readonly section: "configuration";
    };
};
export declare const FileStyleMetadataMap: Partial<Record<FileStyle, {
    displayLabel: string;
    description: string;
}>>;
//# sourceMappingURL=FileElement.d.ts.map