import { ElementRef, OnDestroy, OnInit } from '@angular/core';
import { DsfrSelectOption } from '@edugouvfr/ngx-dsfr';
import { DsfrMultivaluedFormatControl, Format, FormatControl, ToolbarControl } from './editor-toolbar.model';
import * as i0 from "@angular/core";
/**
 * Les quatre modalités de présentation supportées par la toolbar pour afficher les contrôles de format.
 */
type ControlViewType = 'btn' | 'group' | 'radio' | 'select';
export declare class EduEditorToolbarComponent implements OnInit, OnDestroy {
    /**
     * L'identifiant du tag hôte pour le composant éditeur.
     */
    editorId: string;
    /**
     * Active la lecure seule.
     */
    /**
     * Options de la toolbar.
     */
    toolbarOptions: ToolbarControl[];
    /** @internal */
    controlsParent: ElementRef;
    /**
     * Modèle de présentation spécifique pour les select (header+size).
     * RPA: je passe par un modèle de présentation spécifique et je n'utilise pas directement un binding sur
     * currentSelectionFormats car j'ai besoin de reflêter l'état de sélection utilisateur sinon voici ce qui ce passe :
     * l'utilisateur sélectionne une portion de texte et sélectionnz un niveau de titre H2, puis il place le curseur dans
     * un paragraphe quelconque, le select reste sur H2 car la propriété interne 'value' n'est pas mise à jour lors de
     * la sélection utilisateur (binding non bi-directionnel). C'est pourquoi il est nécessaire de passer par un modèle
     * de présentation dédié à la gestion des select.
     */
    protected selectModel: any;
    /**
     * Permet de gérer l'affichage d'un outline custom lorsque la toolbar prend le focus.
     */
    protected toolbarFocused: boolean;
    /**
     * Pointeur sur le dernier élément de contrôle actif, permet de restaurer le focus directement sur celui-ci au
     * SHIFT+TAB.
     */
    protected lastActiveControlElement?: HTMLElement;
    /**
     * Modèle de présentation interne exposant les formats de la sélection courante.
     */
    private _currentSelectionFormats;
    private _unlistenFn;
    private _sub;
    private readonly ngZone;
    private readonly renderer2;
    private readonly elementRef;
    private readonly i18n;
    private readonly editorService;
    constructor();
    ngOnInit(): void;
    ngOnDestroy(): void;
    /**
     * Handler sur l'input file associé à une inserion d'image.
     */
    protected onImageInputFileChange(event: Event): void;
    /**
     * Permet de conditionner la structure HTML selon le type contrôle.
     */
    protected getButtonType(control: FormatControl | FormatControl[]): ControlViewType;
    /**
     * Retourne l'icône correspondant au format passé en paramètre.
     *
     * @param format le format à considérer
     * @param value la vaaleur à prendre en compte le cas échéant
     * @returns la classe css correspondant à l'icône
     */
    protected getIcon(format: Format, value?: undefined): string | undefined;
    /**
     * Retourne la clé du libellé internationalisé.
     * @param control  le contôle de formatage
     */
    protected getI18nKey(format: Format, value?: string | boolean | undefined): string;
    /**
     * Détermine si l'option de format doit être activée ou pas.
     *
     * @param format le nom de contrôle de format
     * @param value la valeur de l'option considérée
     * @returns vrai si le couple format/value fait partie des formats de la sélection courante, faux sinon
     */
    protected isValueActive(format: Format, value: string): boolean;
    /**
     * Retourne la liste des optiosn à affichier au sein du contrôle multivalué (select).
     *
     * @param control le contrôle multivalué à considéré
     */
    protected getSelectOptions(control: DsfrMultivaluedFormatControl): DsfrSelectOption[];
    /**
     * Permet d'indiquer si le contrôle de ce format doit être activé au niveau de la barre d'outils.
     *
     * @param format le format à considérer vis-à-vis des formats de la sélection courante
     * @returns vrai si ce format doit être actif, faux sinon
     */
    protected isFormatActive(format: Format): boolean;
    /**
     * Permet de réagir aux actions utilisateur sur la toolbar.
     */
    protected onToolbarControlPerform(event: Event, format: FormatControl, value?: string): void;
    /**
     * Permet d'écouter la capture d'une couleur par l'utilisateur.
     */
    protected onColorPickerChange(event: Event, action: string): void;
    /**
     * Permet d'écouter les changement sur le format "list".
     *
     * @param action
     * @param event
     */
    protected onListSelect(action: string, event: Event): void;
    /**
     * Permet de forcer la prise de focus sur le premier élément focusable de la barre d'outil lorsque le conteneur de
     * la toolbar reçoit le focus.
     */
    protected onToolbarFocus(): void;
    /**
     * Permet de gérer la sortie de focus
     */
    protected onToolbarBlur(event: any): void;
    /**
     * Permey de se mettre à l'écoute des actions utilisateur sur la barre d'outils.
     */
    protected onToolbarKeydown(event: KeyboardEvent): void;
    private performAction;
    /**
     * Détecte le clic en dehors du composant pour retirer le marqueur de focus custom sur la toolbar.
     */
    private clickOutside;
    private _buildSelectOption;
    private _getOptionLabel;
    private findNextSiblingControl;
    private findPrevSiblingControl;
    /**
     * Recherche l'élément de contrôle focusable adjaçant à l'élément de contrôle actif.
     *
     * @param siblingProperty La propriété permettant de récupérer le voisin suivant ou précédent (selon)
     * @param failoverFunction La fonction permettant de récupérer un élément focusable lorsqu'il n'y plus de suivant
     * @returns Une élément HTML sur lequel il sera possible de prendre le focus
     */
    private findSiblingControl;
    private getFirstToolbarControl;
    private getLastToolbarControl;
    /**
     * Search focusable control (depth first traversal).
     */
    private getFocusableControl;
    /**
     * Répercute les formats actifs de la sélection courante vers la toolbar.
     */
    private _updateToolbar;
    /**
     * Retourne la valeur à sélectionner dans le cas de contôle multivalué (select).
     *
     * @internal
     */
    private _getSelectedOption;
    /**
     * Supprime toutes les mises en forme sur la sélection courante.
     */
    private _removeSelectionFormats;
    /**
     * Applique le format défini par l'utilisateur via la toolbar sur la sélection courante de l'éditeur.
     */
    private _applyFormat;
    /**
     * Permet de capturer une couleur depuis un color-picker natif.
     *
     * @param selector le sélecteur permettant de requêter l'élément de contrôle complémentaire
     */
    private _displayPromptElement;
    /**
     * Positionne l'image Base64 dans l'editeur.
     */
    private _uploadImage;
    static ɵfac: i0.ɵɵFactoryDeclaration<EduEditorToolbarComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<EduEditorToolbarComponent, "edu-editor-toolbar", never, { "editorId": { "alias": "editorId"; "required": false; }; "toolbarOptions": { "alias": "toolbarOptions"; "required": false; }; }, {}, never, never, true, never>;
}
export {};
