import { DeepObject, Field, FieldComponent, FieldConfig, SelectiveEditor, SortableFieldComponent, TemplateResult, Types } from '@blinkk/selective-edit';
import { MediaFieldComponent, MediaFieldConfig } from './media';
import { LiveEditorGlobalConfig } from '../editor';
export interface MediaListFieldConfig extends FieldConfig {
    /**
     * Label for adding more list items.
     */
    addLabel?: string;
    /**
     * Label for when the list is empty.
     */
    emptyLabel?: string;
    /**
     * Field definition for the media field.
     */
    fieldConfig?: MediaFieldConfig;
}
export interface MediaListFieldComponent extends FieldComponent {
    /**
     * Can the list add more items?
     */
    allowAdd?: boolean;
    /**
     * Can the list remove items?
     */
    allowRemove?: boolean;
    /**
     * Handle expanding an item.
     *
     * @param item List item
     */
    expandItem(item: MediaListItemComponent): void;
    /**
     * Event handler for deleting items.
     *
     * @param evt Click event from delete action.
     * @param index Item index being deleted.
     */
    handleDeleteItem(evt: Event, index: number): void;
    /**
     * Number of items in the list.
     */
    length: number;
}
export interface MediaListItemComponent {
    listField: MediaListFieldComponent & SortableFieldComponent;
    mediaField: MediaFieldComponent;
    isExpanded: boolean;
    template: (editor: SelectiveEditor, data: DeepObject, index: number) => TemplateResult;
    uid: string;
}
export interface MediaListItemConstructor {
    new (listField: MediaListFieldComponent & SortableFieldComponent, mediaField: MediaFieldComponent): MediaListItemComponent;
}
declare const MediaListField_base: (new (...args: any[]) => {
    _droppableUi?: import("@blinkk/selective-edit").DroppableUiComponent | undefined;
    droppableUi: import("@blinkk/selective-edit").DroppableUiComponent;
}) & (new (...args: any[]) => {
    _sortableUi?: import("@blinkk/selective-edit/dist/src/mixins/sortable").SortableUiComponent | undefined;
    sortableUi: import("@blinkk/selective-edit/dist/src/mixins/sortable").SortableUiComponent;
}) & typeof Field;
export declare class MediaListField extends MediaListField_base implements MediaListFieldComponent {
    config: MediaListFieldConfig;
    globalConfig: LiveEditorGlobalConfig;
    protected items: Array<MediaListItemComponent> | null;
    protected MediaListItemCls: MediaListItemConstructor;
    protected MediaListItemDefaultConfig: MediaFieldConfig;
    usingAutoFields: boolean;
    constructor(types: Types, config: MediaListFieldConfig, globalConfig: LiveEditorGlobalConfig, fieldType?: string);
    get allowAdd(): boolean;
    get allowRemove(): boolean;
    protected ensureItems(editor: SelectiveEditor): Array<MediaListItemComponent>;
    expandItem(item: MediaListItemComponent): void;
    handleAddItem(evt: Event, editor: SelectiveEditor, data: DeepObject): void;
    handleDeleteItem(evt: Event, index: number): void;
    handleFiles(files: Array<File>): void;
    handleSort(startIndex: number, endIndex: number): void;
    get isClean(): boolean;
    get isValid(): boolean;
    /**
     * Length of the list.
     */
    get length(): number;
    templateAdd(editor: SelectiveEditor, data: DeepObject): TemplateResult;
    templateEmpty(editor: SelectiveEditor, data: DeepObject): TemplateResult;
    templateInput(editor: SelectiveEditor, data: DeepObject): TemplateResult;
    get value(): any;
}
export declare class RemoteMediaListField extends MediaListField {
    constructor(types: Types, config: MediaListFieldConfig, globalConfig: LiveEditorGlobalConfig, fieldType?: string);
}
export {};
