/*!
 * devextreme-vue
 * Version: 19.2.6
 * Build date: Thu Jan 30 2020
 *
 * Copyright (c) 2012 - 2020 Developer Express Inc. ALL RIGHTS RESERVED
 *
 * This software may be modified and distributed under the terms
 * of the MIT license. See the LICENSE file in the root of the project for details.
 *
 * https://github.com/DevExpress/devextreme-vue
 */

import { Vue } from "vue/types/vue";
declare type UpdateFunc = (name: string, value: any) => void;
declare type EmitOptionChangedFunc = (name: string, value: any) => void;
interface ExpectedChild {
    isCollectionItem: boolean;
    optionName: string;
}
interface IOptionChangedArgs {
    fullName: string;
    value: any;
    previousValue: any;
    component: any;
}
declare class Configuration {
    private readonly _name;
    private readonly _isCollectionItem;
    private readonly _collectionItemIndex;
    private readonly _initialValues;
    private readonly _expectedChildren;
    private readonly _updateFunc;
    private readonly _ownerConfig;
    private _nestedConfigurations;
    private _prevNestedConfigOptions;
    private _emitOptionChanged;
    private _componentsCountChanged;
    private _options;
    constructor(updateFunc: UpdateFunc, name: string | null, initialValues: Record<string, any>, expectedChildren?: Record<string, ExpectedChild>, isCollectionItem?: boolean, collectionItemIndex?: number, ownerConfig?: Pick<Configuration, "fullPath"> | undefined);
    readonly name: string | null;
    readonly fullName: string | null;
    hasOptionsToUpdate: boolean;
    readonly fullPath: string | null;
    readonly options: string[];
    readonly initialValues: Record<string, any>;
    readonly expectedChildren: Record<string, ExpectedChild>;
    readonly nested: Configuration[];
    readonly prevNestedOptions: any;
    readonly collectionItemIndex: number | undefined;
    readonly isCollectionItem: boolean;
    readonly updateFunc: UpdateFunc;
    init(options: string[]): void;
    emitOptionChanged: EmitOptionChangedFunc;
    setPrevNestedOptions(value: any): void;
    onOptionChanged(args: IOptionChangedArgs): void;
    cleanNested(): void;
    createNested(name: string, initialValues: Record<string, any>, isCollectionItem?: boolean, expectedChildren?: Record<string, ExpectedChild>): Configuration;
    updateValue(nestedName: string, value: any): void;
    getNestedOptionValues(): Record<string, any> | undefined;
    getOptionsToWatch(): string[];
    private _onOptionChanged;
    private _getNestedConfig;
    private _tryEmitOptionChanged;
}
declare function bindOptionWatchers(config: Configuration, vueInstance: Pick<Vue, "$watch">, innerChanges: Record<string, any>): void;
declare function setEmitOptionChangedFunc(config: Configuration, vueInstance: Pick<Vue, "$emit" | "$props">, innerChanges: Record<string, any>): void;
export default Configuration;
export { bindOptionWatchers, setEmitOptionChangedFunc, UpdateFunc, ExpectedChild, IOptionChangedArgs };
