import { TemplateRef } from '@angular/core';
import { BehaviorSubject, Observable, Subject } from 'rxjs';
import { OverlayTrigger } from '../tooltip/index';
import { HierarchyBarNodeChildren } from './interfaces/hierarchy-bar-node-children.interface';
import { HierarchyBarIconContext } from './interfaces/hierarchy-bar-node-icon-context.interface';
import { HierarchyBarNode } from './interfaces/hierarchy-bar-node.interface';
import * as i0 from "@angular/core";
export declare class HierarchyBarService {
    /** Define the list of selected nodes */
    nodes$: BehaviorSubject<HierarchyBarNode[]>;
    /** Define a custom loading indicator */
    loadingIndicator: TemplateRef<void>;
    /** Define a custom overflow template */
    overflowTemplate: TemplateRef<void>;
    /** Define the events that show the popover when interacting with the arrows */
    popoverShowTriggers: OverlayTrigger[];
    /** Define the events that hide the popover when interacting with the arrows */
    popoverHideTriggers: OverlayTrigger[];
    /** Emit the selected node when it changes */
    selection$: Subject<HierarchyBarNode>;
    /** Define the aria label for the show siblings popover button */
    showSiblingsAriaLabel: string;
    /** Allow a custom icon template to be specified */
    icon: TemplateRef<HierarchyBarIconContext>;
    /** Store the root node */
    private _root;
    /** Store nodes as a flattened list */
    private _nodes;
    /**
     * Store the root node of the hierarchy tree
     */
    setRootNode(root: HierarchyBarNode): void;
    /**
     * Select a node. This causes all nodes to be
     * deselected and the path to the selected node
     * to be selected
     */
    selectNode(node: HierarchyBarNode): void;
    /**
     * Handles getting children with support for both arrays and observables
     */
    getChildren(node: HierarchyBarNode): Observable<HierarchyBarNodeChildren>;
    /**
     * Utility function to get the sibling nodes, taking into account that
     * a node may be a root node and may not have a parent.
     */
    getSiblings(node: HierarchyBarNode): Observable<HierarchyBarNodeChildren>;
    /**
     * Traverses all the parents to ensure they are selected
     */
    private select;
    /**
     * Deselects all nodes
     */
    private deselectAll;
    /**
     * Gets all the nodes in the tree as a flat array.
     * It also stores the parent node in a parent property
     * on the node for easy traversal in both directions
     */
    private getNodeList;
    /**
     * Gets all selected nodes from the parent node.
     */
    private getSelectedChildren;
    static ɵfac: i0.ɵɵFactoryDeclaration<HierarchyBarService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<HierarchyBarService>;
}
