import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { DsfrNode } from './tree.model';
/**
 * Interface utilisée par TreeFocusManager
 */
export interface TreeFocusable {
    /** Retourne la structure arborescente du composant. */
    get nodes(): DsfrNode[];
    /** Ouvre tous les nœuds de l'arborescence. */
    expandAll(): void;
    /** Ferme tous les nœuds de l'arborescence. */
    collapseAll(): void;
    /** Effectue l'action par défaut (sélection / déselection) sur le nœud courant. */
    doNodeDefaultAction(node: DsfrNode, event: Event): void;
    /** Recherche la liste des nœuds visibles, ce sont les éléments qui posséderont le tabindex */
    findVisibleNodesElt(): HTMLElement[];
    /** Retourne l'élément avec focus ou undefined. */
    findFocusElement(): HTMLElement | undefined;
}
/**
 * TreeFocusManager a pour objectif de :
 * - Gérer le focus dans un arbre lié aux événements clavier de navigation,
 * - Gérer l'ouverture la fermeture des nœuds
 */
export declare class TreeFocusManager {
    currentElt: HTMLElement | undefined;
    /** Composant géré par le manager. */
    private treeFocusable;
    private firstNodeElt;
    constructor(treeFocusable: TreeFocusable);
    /**
     * Initialise le tabindex du 1er élément sur lequel placer un focus
     */
    initTabindex(): void;
    /** Ouvre tous les nœuds de l'arborescence. */
    expandAll(nodes: DsfrNode[]): void;
    /** Ferme tous les nœuds de l'arborescence. */
    collapseAll(nodes: DsfrNode[]): void;
    /**
     * Répond à un événement clavier.
     * @param currentNode nœud courant (qui possède le focus)
     * @event event événement clavier
     */
    doKeyEvent(currentNode: DsfrNode, event: KeyboardEvent, isParentSelectable: boolean): void;
    /** Bascule l'état ouvert / fermé du nœud. */
    doToggleExpand(node: DsfrNode): void;
    /**
     * Gestion du scroll dans la liste lors de la navigation clavier avec virtualScroll activé
     * @param viewport composant de virtualScroll CDK
     */
    scrollForVirtualScroll(viewport: CdkVirtualScrollViewport): void;
    /** Place le focus sur le 1er élément visible. */
    private doFocusFirst;
    /** Place le focus sur le dernier élément visible. */
    private doFocusLast;
    /** Place le focus sur l'élément suivant l'élément courant. */
    private doFocusNext;
    /** Place le focus sur l'élément précédant le nœud courant. */
    private doFocusPrevious;
    /** Ferme le nœud. */
    private doCollapseNode;
    /** Ouvre le nœud. */
    private doExpandNode;
    /**
     * Ouvre / ferme récursivement tous les nœuds nodes et leurs descendants
     * @param nodes Liste de nœuds à ouvrir
     * @param expand true : ouverture des nœuds, false : fermeture
     */
    private setNodesExpanded;
    /** Set focus on element and add aria-activedescendant attribute to parent */
    private setAriaActiveDescendant;
}
