import * as i0 from '@angular/core';
import { OnChanges, OnInit, TemplateRef, EventEmitter, SimpleChanges, PipeTransform, ElementRef, AfterViewInit, ModuleWithProviders } from '@angular/core';
import * as i8 from '@angular/forms';
import * as i9 from '@angular/common';

interface TreeviewSelection {
    checkedItems: TreeviewItem[];
    uncheckedItems: TreeviewItem[];
}
interface TreeItem {
    text: string;
    value: any;
    disabled?: boolean;
    checked?: boolean;
    collapsed?: boolean;
    children?: TreeItem[];
}
declare class TreeviewItem {
    private internalDisabled;
    private internalChecked;
    private internalCollapsed;
    private internalChildren;
    text: string;
    value: any;
    constructor(item: TreeItem, autoCorrectChecked?: boolean);
    get checked(): boolean;
    set checked(value: boolean);
    get indeterminate(): boolean;
    setCheckedRecursive(value: boolean): void;
    get disabled(): boolean;
    set disabled(value: boolean);
    get collapsed(): boolean;
    set collapsed(value: boolean);
    setCollapsedRecursive(value: boolean): void;
    get children(): TreeviewItem[];
    set children(value: TreeviewItem[]);
    getSelection(): TreeviewSelection;
    correctChecked(): void;
    private getCorrectChecked;
}

declare abstract class TreeviewI18n {
    abstract getText(selection: TreeviewSelection): string;
    abstract getAllCheckboxText(): string;
    abstract getFilterPlaceholder(): string;
    abstract getFilterNoItemsFoundText(): string;
    abstract getTooltipCollapseExpandText(isCollapse: boolean): string;
    static ɵfac: i0.ɵɵFactoryDeclaration<TreeviewI18n, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TreeviewI18n>;
}
declare class DefaultTreeviewI18n extends TreeviewI18n {
    getText(selection: TreeviewSelection): string;
    getAllCheckboxText(): string;
    getFilterPlaceholder(): string;
    getFilterNoItemsFoundText(): string;
    getTooltipCollapseExpandText(isCollapse: boolean): string;
    static ɵfac: i0.ɵɵFactoryDeclaration<DefaultTreeviewI18n, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<DefaultTreeviewI18n>;
}

declare class TreeviewConfig {
    hasAllCheckBox: boolean;
    hasFilter: boolean;
    hasCollapseExpand: boolean;
    decoupleChildFromParent: boolean;
    maxHeight: number;
    get hasDivider(): boolean;
    static create(fields?: {
        hasAllCheckBox?: boolean;
        hasFilter?: boolean;
        hasCollapseExpand?: boolean;
        decoupleChildFromParent?: boolean;
        maxHeight?: number;
    }): TreeviewConfig;
    static ɵfac: i0.ɵɵFactoryDeclaration<TreeviewConfig, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TreeviewConfig>;
}

interface TreeviewHeaderTemplateContext {
    config: TreeviewConfig;
    item: TreeviewItem;
    onCollapseExpand: () => void;
    onCheckedChange: (checked: boolean) => void;
    onFilterTextChange: (text: string) => void;
}

interface TreeviewItemTemplateContext {
    item: TreeviewItem;
    onCollapseExpand: () => void;
    onCheckedChange: () => void;
}

declare abstract class TreeviewEventParser {
    abstract getSelectedChange(component: TreeviewComponent): any[];
    static ɵfac: i0.ɵɵFactoryDeclaration<TreeviewEventParser, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TreeviewEventParser>;
}
declare class DefaultTreeviewEventParser extends TreeviewEventParser {
    getSelectedChange(component: TreeviewComponent): any[];
    static ɵfac: i0.ɵɵFactoryDeclaration<DefaultTreeviewEventParser, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<DefaultTreeviewEventParser>;
}
interface DownlineTreeviewItem {
    item: TreeviewItem;
    parent: DownlineTreeviewItem;
}
declare class DownlineTreeviewEventParser extends TreeviewEventParser {
    getSelectedChange(component: TreeviewComponent): any[];
    private getLinks;
    static ɵfac: i0.ɵɵFactoryDeclaration<DownlineTreeviewEventParser, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<DownlineTreeviewEventParser>;
}
declare class OrderDownlineTreeviewEventParser extends TreeviewEventParser {
    private currentDownlines;
    private parser;
    getSelectedChange(component: TreeviewComponent): any[];
    static ɵfac: i0.ɵɵFactoryDeclaration<OrderDownlineTreeviewEventParser, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<OrderDownlineTreeviewEventParser>;
}

declare class TreeviewComponent implements OnChanges, OnInit {
    i18n: TreeviewI18n;
    private defaultConfig;
    private eventParser;
    headerTemplate: TemplateRef<TreeviewHeaderTemplateContext>;
    itemTemplate: TemplateRef<TreeviewItemTemplateContext>;
    items: TreeviewItem[];
    config: TreeviewConfig;
    selectedChange: EventEmitter<any[]>;
    filterChange: EventEmitter<string>;
    headerTemplateContext: TreeviewHeaderTemplateContext;
    allItem: TreeviewItem;
    filterText: string;
    filterItems: TreeviewItem[];
    selection: TreeviewSelection;
    constructor(i18n: TreeviewI18n, defaultConfig: TreeviewConfig, eventParser: TreeviewEventParser);
    get hasFilterItems(): boolean;
    get maxHeight(): string;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    onAllCollapseExpand(): void;
    onFilterTextChange(text: string): void;
    onAllCheckedChange(): void;
    onItemCheckedChange(item: TreeviewItem, checked: boolean): void;
    raiseSelectedChange(): void;
    private createHeaderTemplateContext;
    private generateSelection;
    private updateFilterItems;
    private filterItem;
    private updateCheckedOfAll;
    private updateCollapsedOfAll;
    static ɵfac: i0.ɵɵFactoryDeclaration<TreeviewComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<TreeviewComponent, "ngx-treeview", never, { "headerTemplate": { "alias": "headerTemplate"; "required": false; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; }; "items": { "alias": "items"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, { "selectedChange": "selectedChange"; "filterChange": "filterChange"; }, never, never, false, never>;
}

declare class TreeviewItemComponent {
    private defaultConfig;
    config: TreeviewConfig;
    template: TemplateRef<TreeviewItemTemplateContext>;
    item: TreeviewItem;
    checkedChange: EventEmitter<boolean>;
    constructor(defaultConfig: TreeviewConfig);
    onCollapseExpand: () => void;
    onCheckedChange: () => void;
    onChildCheckedChange(child: TreeviewItem, checked: boolean): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<TreeviewItemComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<TreeviewItemComponent, "ngx-treeview-item", never, { "config": { "alias": "config"; "required": false; }; "template": { "alias": "template"; "required": false; }; "item": { "alias": "item"; "required": false; }; }, { "checkedChange": "checkedChange"; }, never, never, false, never>;
}

declare class TreeviewPipe implements PipeTransform {
    transform(objects: any[], textField: string): TreeviewItem[];
    static ɵfac: i0.ɵɵFactoryDeclaration<TreeviewPipe, never>;
    static ɵpipe: i0.ɵɵPipeDeclaration<TreeviewPipe, "ngxTreeview", false>;
}

declare class DropdownDirective {
    toggleElement: any;
    internalOpen: boolean;
    openChange: EventEmitter<boolean>;
    get isOpen(): boolean;
    onKeyupEsc(): void;
    onDocumentClick(event: MouseEvent): void;
    open(): void;
    close(): void;
    toggle(): void;
    private isEventFromToggle;
    static ɵfac: i0.ɵɵFactoryDeclaration<DropdownDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownDirective, "[ngxDropdown]", ["ngxDropdown"], { "internalOpen": { "alias": "open"; "required": false; }; }, { "openChange": "openChange"; }, never, never, false, never>;
}

declare class DropdownMenuDirective {
    dropdown: DropdownDirective;
    constructor(dropdown: DropdownDirective);
    static ɵfac: i0.ɵɵFactoryDeclaration<DropdownMenuDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownMenuDirective, "[ngxDropdownMenu]", never, {}, {}, never, never, false, never>;
}

declare class DropdownToggleDirective {
    dropdown: DropdownDirective;
    constructor(dropdown: DropdownDirective, elementRef: ElementRef);
    static ɵfac: i0.ɵɵFactoryDeclaration<DropdownToggleDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<DropdownToggleDirective, "[ngxDropdownToggle]", never, {}, {}, never, never, false, never>;
}

declare class DropdownTreeviewComponent implements AfterViewInit {
    i18n: TreeviewI18n;
    private defaultConfig;
    buttonClass: string;
    headerTemplate: TemplateRef<TreeviewHeaderTemplateContext>;
    itemTemplate: TemplateRef<TreeviewItemTemplateContext>;
    items: TreeviewItem[];
    config: TreeviewConfig;
    selectedChange: EventEmitter<any[]>;
    filterChange: EventEmitter<string>;
    treeviewComponent: i0.Signal<TreeviewComponent>;
    private selectionVersion;
    buttonLabel: i0.Signal<string>;
    constructor(i18n: TreeviewI18n, defaultConfig: TreeviewConfig);
    ngAfterViewInit(): void;
    onSelectedChange(values: any[]): void;
    onFilterChange(text: string): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<DropdownTreeviewComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<DropdownTreeviewComponent, "ngx-dropdown-treeview", never, { "buttonClass": { "alias": "buttonClass"; "required": false; }; "headerTemplate": { "alias": "headerTemplate"; "required": false; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; }; "items": { "alias": "items"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, { "selectedChange": "selectedChange"; "filterChange": "filterChange"; }, never, never, false, never>;
}

declare class TreeviewModule {
    static forRoot(): ModuleWithProviders<TreeviewModule>;
    static ɵfac: i0.ɵɵFactoryDeclaration<TreeviewModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<TreeviewModule, [typeof TreeviewComponent, typeof TreeviewItemComponent, typeof TreeviewPipe, typeof DropdownDirective, typeof DropdownMenuDirective, typeof DropdownToggleDirective, typeof DropdownTreeviewComponent], [typeof i8.FormsModule, typeof i9.CommonModule], [typeof TreeviewComponent, typeof TreeviewPipe, typeof DropdownTreeviewComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<TreeviewModule>;
}

declare const TreeviewHelper: {
    findItem: typeof findItem;
    findItemInList: typeof findItemInList;
    findParent: typeof findParent;
    removeItem: typeof removeItem;
    concatSelection: typeof concatSelection;
};
declare function findItem(root: TreeviewItem, value: any): TreeviewItem;
declare function findItemInList(list: TreeviewItem[], value: any): TreeviewItem;
declare function findParent(root: TreeviewItem, item: TreeviewItem): TreeviewItem;
declare function removeItem(root: TreeviewItem, item: TreeviewItem): boolean;
declare function concatSelection(items: TreeviewItem[], checked: TreeviewItem[], unchecked: TreeviewItem[]): {
    [k: string]: TreeviewItem[];
};

export { DefaultTreeviewEventParser, DefaultTreeviewI18n, DownlineTreeviewEventParser, DropdownDirective, DropdownToggleDirective, DropdownTreeviewComponent, OrderDownlineTreeviewEventParser, TreeviewComponent, TreeviewConfig, TreeviewEventParser, TreeviewHelper, TreeviewI18n, TreeviewItem, TreeviewModule, TreeviewPipe };
export type { DownlineTreeviewItem, TreeItem, TreeviewItemTemplateContext, TreeviewSelection };
