/*!
 * devextreme-angular
 * Version: 22.1.14
 * Build date: Mon Apr 29 2024
 *
 * Copyright (c) 2012 - 2024 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-angular
 */
import { QueryList, ElementRef, Renderer2, EventEmitter } from '@angular/core';
import * as i0 from "@angular/core";
export interface INestedOptionContainer {
    instance: any;
    isLinked: boolean;
    removedNestedComponents: string[];
    optionChangedHandlers: EventEmitter<any>;
    recreatedNestedComponents: any[];
    resetOptions: (collectionName?: string) => void;
    isRecreated: (name: string) => boolean;
}
export interface IOptionPathGetter {
    (): string;
}
export declare abstract class BaseNestedOption implements INestedOptionContainer, ICollectionNestedOptionContainer {
    protected _host: INestedOptionContainer;
    protected _hostOptionPath: IOptionPathGetter;
    private _collectionContainerImpl;
    protected _initialOptions: {};
    protected abstract get _optionPath(): string;
    protected abstract _fullOptionPath(): string;
    constructor();
    protected _optionChangedHandler(e: any): void;
    protected _createEventEmitters(events: any): void;
    protected _getOption(name: string): any;
    protected _setOption(name: string, value: any): void;
    protected _addRemovedOption(name: string): void;
    protected _deleteRemovedOptions(name: string): void;
    protected _addRecreatedComponent(): void;
    protected _getOptionPath(): string;
    setHost(host: INestedOptionContainer, optionPath: IOptionPathGetter): void;
    setChildren<T extends ICollectionNestedOption>(propertyName: string, items: QueryList<T>): any;
    _filterItems(items: QueryList<BaseNestedOption>): BaseNestedOption[];
    get instance(): any;
    get resetOptions(): (collectionName?: string) => void;
    get isRecreated(): (name: string) => boolean;
    get removedNestedComponents(): string[];
    set removedNestedComponents(value: string[]);
    get recreatedNestedComponents(): any[];
    set recreatedNestedComponents(value: any[]);
    get isLinked(): boolean;
    get optionChangedHandlers(): EventEmitter<any>;
    static ɵfac: i0.ɵɵFactoryDeclaration<BaseNestedOption, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<BaseNestedOption, "ng-component", never, {}, {}, never, never>;
}
export interface ICollectionNestedOptionContainer {
    setChildren<T extends ICollectionNestedOption>(propertyName: string, items: QueryList<T>): any;
}
export declare class CollectionNestedOptionContainerImpl implements ICollectionNestedOptionContainer {
    private _setOption;
    private _filterItems?;
    private _activatedQueries;
    constructor(_setOption: Function, _filterItems?: Function);
    setChildren<T extends ICollectionNestedOption>(propertyName: string, items: QueryList<T>): void;
}
export declare abstract class NestedOption extends BaseNestedOption {
    setHost(host: INestedOptionContainer, optionPath: IOptionPathGetter): void;
    protected _fullOptionPath(): string;
    static ɵfac: i0.ɵɵFactoryDeclaration<NestedOption, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<NestedOption, "ng-component", never, {}, {}, never, never>;
}
export interface ICollectionNestedOption {
    _index: number;
    _value: Object;
}
export declare abstract class CollectionNestedOption extends BaseNestedOption implements ICollectionNestedOption {
    _index: number;
    protected _fullOptionPath(): string;
    get _value(): {};
    get isLinked(): boolean;
    static ɵfac: i0.ɵɵFactoryDeclaration<CollectionNestedOption, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<CollectionNestedOption, "ng-component", never, {}, {}, never, never>;
}
export interface IOptionWithTemplate extends BaseNestedOption {
    template: any;
}
export declare function extractTemplate(option: IOptionWithTemplate, element: ElementRef, renderer: Renderer2, document: any): void;
export declare class NestedOptionHost {
    private _host;
    private _optionPath;
    getHost(): INestedOptionContainer;
    setHost(host: INestedOptionContainer, optionPath?: IOptionPathGetter): void;
    setNestedOption(nestedOption: BaseNestedOption): void;
}
