import { Agile, Observer, StateIngestConfigInterface } from '@agile-ts/core';
import { Item, ItemKey } from '../item';
import { StatusInterface, StatusType } from '../status';
import { DeepFieldPaths, DeepFieldPathValues, CreateEditorConfig, EditorConfigInterface, EditorKey, FieldData, FieldPaths, RecomputeValidatedStateMethodConfigInterface, SubmitConfigInterface, UpdateInitialValueConfigInterface } from './types';
export declare class Multieditor<TFieldData extends FieldData = FieldData> {
    agileInstance: () => Agile;
    config: EditorConfigInterface;
    _key?: EditorKey;
    isModified: boolean;
    isValid: boolean;
    submitted: boolean;
    fixedProperties: ItemKey[];
    editableProperties: ItemKey[];
    onSubmit: (preparedData: {
        [key: string]: any;
    }, config?: Object) => Promise<any>;
    data: {
        [key: string]: Item;
    };
    /**
     * Simple Form Handler.
     *
     * @public
     * @param agileInstance - Instance of Agile the Multieditor belongs to.
     * @param config - Configuration object
     */
    constructor(config: CreateEditorConfig<TFieldData>, agileInstance: Agile);
    /**
     * Updates the key/name identifier of the Multieditor.
     *
     * @public
     * @param value - New key/name identifier.
     */
    set key(value: EditorKey | undefined);
    /**
     * Returns the key/name identifier of the Multieditor.
     *
     * @public
     */
    get key(): EditorKey | undefined;
    /**
     * Returns an array of dependencies the Multieditor depends on.
     *
     * These returned dependencies can be bound to a UI-Component
     * the Mutlieditor is used in, to make the Form reactive.
     *
     * @public
     */
    get deps(): Array<Observer>;
    /**
     * Returns an array of dependencies the Item
     * with the specified key/name identifier depends on.
     *
     * @public
     * @param itemKey - Key/Name identifier of the Item.
     */
    itemDeps(itemKey: FieldPaths<TFieldData>): Array<Observer>;
    /**
     * Assigns a new value to the Item with the specified key/name identifier.
     *
     * @public
     * @param itemKey - Key/Name identifier of the Item.
     * @param value - New Item value
     * @param config - Configuration object
     */
    setValue<TItemName extends DeepFieldPaths<TFieldData> = DeepFieldPaths<TFieldData>>(itemKey: TItemName, value: DeepFieldPathValues<TFieldData, TItemName>, config?: StateIngestConfigInterface): this;
    /**
     * Assigns a new initial value to the Item with the specified key/name identifier.
     *
     * @public
     * @param itemKey - Key/Name identifier of the Item.
     * @param value - New Item initial value
     * @param config - Configuration object
     */
    setInitialValue<TItemName extends DeepFieldPaths<TFieldData> = DeepFieldPaths<TFieldData>>(itemKey: TItemName, value: DeepFieldPathValues<TFieldData, TItemName>, config?: UpdateInitialValueConfigInterface): this;
    /**
     * Submits the Multieditor.
     *
     * @public
     * @param config - Configuration object
     */
    submit(config?: SubmitConfigInterface): Promise<any | false>;
    /**
     * Resets the Multieditor and all its Items.
     *
     * @public
     */
    reset(): this;
    /**
     * Assigns the specified new Status to the Item with the specified key/name identifier.
     *
     * However, if tracking of the particular Status is active,
     * the value is only tracked (not applied).
     * If the tracking has been finished the last tracked Status value should be applied to the Status.
     *
     * @public
     * @param itemKey - Key/Name identifier of the Item.
     * @param type - Status type
     * @param message - Status message
     */
    setStatus(itemKey: FieldPaths<TFieldData>, type: StatusType, message: string): this;
    /**
     * Resets the Status of the Item with the specified key/name identifier.
     *
     * @public
     * @param itemKey - Key/Name identifier of the Item.
     */
    resetStatus(itemKey: FieldPaths<TFieldData>): this;
    /**
     * Retrieves the Status of the Item with the specified key/name identifier.
     *
     * If the to retrieve Status doesn't exist, `null` is returned.
     *
     * @public
     * @param itemKey - Key/Name identifier of the Item.
     */
    getStatus(itemKey: FieldPaths<TFieldData>): StatusInterface | null;
    /**
     * Retrieves a single Item with the specified key/name identifier from the Multieditor.
     *
     * If the to retrieve Item doesn't exist, `null` is returned.
     *
     * @public
     * @param itemKey - Key/Name identifier of the Item.
     */
    getItem<TItemName extends FieldPaths<TFieldData> = FieldPaths<TFieldData>>(itemKey: TItemName): Item<DeepFieldPathValues<TFieldData, TItemName>> | null;
    /**
     * Retrieves the initial value of a single Item
     * with the specified key/name identifier from the Multieditor.
     *
     * If the to retrieve Item containing the initial value doesn't exist, `undefined` is returned.
     *
     * @public
     * @param itemKey - Key/Name identifier of the Item.
     */
    getItemValue<TItemName extends FieldPaths<TFieldData> = FieldPaths<TFieldData>>(itemKey: TItemName): DeepFieldPathValues<TFieldData, TItemName> | undefined;
    /**
     * Retrieves the value of a single Item
     * with the specified key/name identifier from the Multieditor.
     *
     * If the to retrieve Item containing the initial value doesn't exist, `undefined` is returned.
     *
     * @public
     * @param itemKey - Key/Name identifier of the Item.
     */
    getItemInitialValue<TItemName extends FieldPaths<TFieldData> = FieldPaths<TFieldData>>(itemKey: TItemName): DeepFieldPathValues<TFieldData, TItemName> | undefined;
    /**
     * Returns a boolean indicating whether at least one Item
     * of the Items with the specified key/name identifiers is modified.
     *
     * @public
     * @param itemKeys - Key/Name identifiers of the Items.
     */
    areModified(itemKeys: ItemKey[]): boolean;
    /**
     * Recomputes the modified state of the Multieditor
     * based on its Items modified status.
     *
     * @public
     */
    recomputeModifiedState(): this;
    /**
     * Recomputes the validated state of the Multieditor
     * based on its Items validation status.
     *
     * @public
     */
    recomputeValidatedState(config?: RecomputeValidatedStateMethodConfigInterface): boolean;
    /**
     * Revalidates the Multieditor.
     *
     * @public
     */
    validate(): boolean;
    /**
     * Returns a boolean indication whether the Status of the specified Item
     * can be updated during a value change of the Item.
     *
     * @internal
     * @param item - Item
     */
    canAssignStatusToItemOnChange(item: Item): boolean;
    /**
     * Returns a boolean indication whether the Status of the specified Item
     * can be updated during the submission of the Multieditor.
     *
     * @internal
     * @param item - Item
     */
    canAssignStatusToItemOnSubmit(item: Item): boolean;
    /**
     * Returns a boolean indication whether the Status of the specified Item
     * can be updated during the blur of the Item.
     *
     * @internal
     * @param item - Item
     */
    canAssignStatusToItemOnBlur(item: Item): boolean;
}
