import { Signal, TemplateRef } from '@angular/core';
import { Nullable } from '@fundamental-ngx/cdk/utils';
import { Subject } from 'rxjs';
import { BaseTreeItem } from './models/base-tree-item.class';
import { SelectionPlacement, SelectionType } from './models/selection-type';
import { TreeItem, TreeItemGeneric } from './models/tree-item';
import { TreeItemDefContext } from './models/tree-item-def-context';
import * as i0 from "@angular/core";
export interface SelectionModeModel {
    mode: SelectionType;
    placement: SelectionPlacement;
}
export declare class TreeService {
    /** Tree item template ref. */
    treeItemTemplateRef: Nullable<TemplateRef<TreeItemDefContext>>;
    /** Currently focused tree item. */
    focusedTreeItem: Nullable<BaseTreeItem>;
    /** Current expanded level. */
    get expandedLevel(): Signal<number | undefined>;
    /** Tree selection mode. */
    get selectionMode(): Signal<SelectionModeModel>;
    /** Whether to show navigation indicator. */
    get navigationIndicator(): Signal<boolean>;
    /**
     * @hidden
     */
    readonly detectChanges: Subject<void>;
    /** @hidden */
    private readonly _expandableItems;
    /** @hidden */
    private readonly _selectionMode$;
    /** @hidden */
    private readonly _expandedLevel;
    /** @hidden */
    private readonly _navigationIndicator$;
    /** Sets whether the navigation indicator should be visible. */
    setNavigationIndicator(value: boolean): void;
    /** @hidden */
    normalizeTreeItems<T extends TreeItem = TreeItem>(items: Nullable<T[]>, parentId?: string | null, level?: number): TreeItem<TreeItemGeneric<T>>[];
    /**
     * Adds expandable item to the object of expandable items.
     * @param id
     * @param level
     */
    addExpandableItem(id: string, level: number, expanded: boolean): void;
    /**
     * Removes expandable item from the object of expandable items.
     * @param id
     * @param level
     */
    removeExpandableItem(id: string, level: number): void;
    /**
     * Sets selection mode and it's placement.
     * @param mode Selection mode.
     * @param placement Selection control placement.
     */
    setSelectionMode(mode: SelectionType, placement: SelectionPlacement): void;
    /** @hidden */
    private _emitNewExpandedLevel;
    static ɵfac: i0.ɵɵFactoryDeclaration<TreeService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TreeService>;
}
