@edugouvfr/ngx-dsfr-ext
Version:
NgxDsfrExt est une extension au package @edugouvfr/ngx-dsfr (portage Angular des éléments DSFR)
94 lines (93 loc) • 5.36 kB
TypeScript
import { ElementRef, EventEmitter, OnInit, TemplateRef } from '@angular/core';
import { DsfrButton, DsfrLink, DsfrSize } from '@edugouvfr/ngx-dsfr';
import { DsfrDropdownMenuItemComponent } from './component/dropdownmenu-item.component';
import * as i0 from "@angular/core";
export interface DsfrMenuButton extends Omit<DsfrButton, 'size' | 'variant' | 'iconPosition' | 'loader' | 'invertedOutlineContrast'> {
/** Action appelée lors du 'click' sur le bouton. */
callback?: () => void;
}
/** Définition des interfaces internes pour créer le view model de DsfrDropdownMenuItem */
interface MenuButtonViewModel extends DsfrMenuButton {
menuType: 'button' | 'link' | 'group';
}
interface MenuLinkViewModel extends DsfrMenuButton {
menuType: 'button' | 'link' | 'group';
}
interface MenuGroupViewModel {
menuType: 'button' | 'link' | 'group';
items: MenuButtonViewModel[] | MenuLinkViewModel[];
}
/** Alias pour le type d'entrée de menu */
export type DsfrDropdownMenuItem = (DsfrMenuButton | DsfrLink | (DsfrMenuButton | DsfrLink)[])[];
export declare class DsfrDropdownMenuComponent implements OnInit {
/** Libellé du bouton du menu déroulant */
labelMenu: string;
/** Attribut aria-label du bouton du menu déroulant */
ariaLabelMenu: string | undefined;
/** Identifiant du bouton du menu déroulant (généré si non renseigné) */
menuId: string;
/** Icône optionnelle du menu déroulant */
iconMenu: string;
/** Taille du menu déroulant (SM, MD ou LG). MD par défaut. */
size: DsfrSize;
/** Désactiver le menu */
disabled: boolean;
/** Fermer le menu après un clic sur bouton ou lien. */
closeOnAction: boolean;
/** Evènement sélection d'un bouton */
buttonSelect: EventEmitter<DsfrButton>;
/** Evènement sélection d'un lien */
linkSelect: EventEmitter<DsfrLink>;
/** Cacher les séparateurs de groupe (dans le cas d'utilisation de menus) */
hideGroupSeparator: boolean;
/** Attacher l'élément de liste déroulante au 'body' ou a un container (réf. vers un élément #div ou nom de la classe du parent) */
appendTo: 'body' | HTMLElement | string | undefined;
/**
* Indique la valeur de la propriété css z-index de la modale du composant.
*/
zIndex: number | undefined;
/** Contenu personnalisé du menu */
contentTemplate: TemplateRef<any>;
/**@internal */
btnMenuRef: import("@angular/core").Signal<ElementRef<any> | undefined>;
/**@internal */
dropdownWidth: import("@angular/core").Signal<any>;
protected menusView: (MenuButtonViewModel | MenuLinkViewModel | MenuGroupViewModel)[];
protected isOpen: import("@angular/core").WritableSignal<boolean>;
protected itemsC: import("@angular/core").Signal<readonly DsfrDropdownMenuItemComponent[]>;
protected itemsV: import("@angular/core").Signal<readonly DsfrDropdownMenuItemComponent[]>;
/** Element auquel la liste est attachée programmatiquement si appendTo défini */
protected containerToAttach: HTMLElement | undefined;
private focusedElement;
private indexFocusedElement;
constructor();
/** Items de menu, liens, boutons ou groupe de liens ou boutons */
set menus(value: DsfrDropdownMenuItem);
ngOnInit(): void;
protected onDropdownAttached(): void;
protected toggleMenu(): void;
protected onButtonClick(button: DsfrMenuButton): void;
protected onClickOutside(): void;
protected onLinkSelect(link: DsfrLink): void;
/**
* Gestion des interactions clavier sur la liste
* - positionnement du focus sur les éléments précédents/suivants à la navigation flèches
* - fermeture de la liste sur les touches définies, et repositonnement du focus sur le bouton d'ouverture
* @param event keyboard event
*/
protected doKeyEvent(event: KeyboardEvent): void;
private closeMenuAndFocusButton;
/** Focus sur le premier élément de la liste à l'ouverture de celle-ci */
private setInitialFocusOnList;
/**
* Si entrée est pressé / ou espace et que l'élément de liste est de type 'checkbox' ou 'radio'
* Envoi de l'evenement selectItem
*/
private emitKeyEventElement;
private focusToElement;
/** Gestion des tabindex pour le focus sur le nouvel élément de la liste */
private setFocusElement;
static ɵfac: i0.ɵɵFactoryDeclaration<DsfrDropdownMenuComponent, never>;
static ɵcmp: i0.ɵɵComponentDeclaration<DsfrDropdownMenuComponent, "dsfr-ext-dropdownmenu, dsfrx-dropdownmenu", never, { "labelMenu": { "alias": "labelMenu"; "required": false; }; "ariaLabelMenu": { "alias": "ariaLabelMenu"; "required": false; }; "menuId": { "alias": "menuId"; "required": false; }; "iconMenu": { "alias": "iconMenu"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "closeOnAction": { "alias": "closeOnAction"; "required": false; }; "hideGroupSeparator": { "alias": "hideGroupSeparator"; "required": false; }; "appendTo": { "alias": "appendTo"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "menus": { "alias": "menus"; "required": false; }; }, { "buttonSelect": "buttonSelect"; "linkSelect": "linkSelect"; }, ["itemsC", "contentTemplate"], never, true, never>;
}
export {};