import { FormFieldPresence } from '@sanity/base/presence';
import { ArraySchemaType, Marker, ObjectSchemaType, Path, SchemaType } from '@sanity/types';
import { ToastParams } from '@sanity/ui';
import React from 'react';
import { Subscription } from 'rxjs';
import { PatchEvent } from '../../../PatchEvent';
import { FileLike, Uploader } from '../../../sanity/uploads/types';
import ArrayFunctions from '../common/ArrayFunctions';
import { ArrayItem } from './item';
import type { ArrayMember, InsertEvent, ReferenceItemComponentType } from './types';
declare type Toast = {
    push: (params: ToastParams) => void;
};
export declare function createProtoValue(type: SchemaType): ArrayMember;
export interface Props {
    type: ArraySchemaType;
    value: ArrayMember[];
    compareValue: ArrayMember[];
    markers: Marker[];
    level: number;
    onChange: (event: PatchEvent) => void;
    onFocus: (path: Path) => void;
    onBlur: () => void;
    focusPath: Path;
    readOnly: boolean;
    ReferenceItemComponent: ReferenceItemComponentType;
    filterField: () => any;
    ArrayFunctionsImpl: typeof ArrayFunctions;
    ArrayItemImpl: typeof ArrayItem;
    resolveUploader?: (type: SchemaType, file: FileLike) => Uploader | null;
    resolveInitialValue?: (type: ObjectSchemaType, value: any) => Promise<any>;
    presence: FormFieldPresence[];
}
interface State {
    isResolvingInitialValue: boolean;
}
export declare class ArrayInput extends React.Component<Props> {
    static defaultProps: {
        focusPath: any[];
    };
    _focusArea: HTMLElement | null;
    toast: Toast | null;
    uploadSubscriptions: Record<string, Subscription>;
    state: State;
    insert: (item: ArrayMember, position: 'before' | 'after', path: Path) => void;
    handlePrepend: (value: ArrayMember) => void;
    handleAppend: (value: ArrayMember) => void;
    handleInsert: (event: InsertEvent) => void;
    handleRemoveItem: (item: ArrayMember) => void;
    handleFocus: (event: any) => void;
    openItem: (key: string) => void;
    removeItem(item: ArrayMember): void;
    handleItemChange: (event: PatchEvent, item: ArrayMember) => void;
    handleSortEnd: (event: {
        newIndex: number;
        oldIndex: number;
    }) => void;
    getMemberTypeOfItem(item: ArrayMember): SchemaType;
    focus(): void;
    setFocusArea: (el: HTMLElement | null) => void;
    handleFixMissingKeys: () => void;
    setToast: (toast: any | null) => void;
    handleRemoveNonObjectValues: () => void;
    handleUpload: ({ file, type, uploader }: {
        file: File;
        type: SchemaType;
        uploader: Uploader;
    }) => void;
    handleFocusItem: (item: ArrayMember) => void;
    render(): React.JSX.Element;
}
export {};
//# sourceMappingURL=ArrayInput.d.ts.map