@edugouvfr/ngx-dsfr-ext
Version:
NgxDsfrExt est une extension au package @edugouvfr/ngx-dsfr (portage Angular des éléments DSFR)
108 lines • 14.9 kB
JavaScript
import { CommonModule } from '@angular/common';
import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, inject, Input, Output, Renderer2, ViewEncapsulation, } from '@angular/core';
import { DsfrButtonComponent, DsfrLinkComponent } from '@edugouvfr/ngx-dsfr';
import * as i0 from "@angular/core";
/**
* Composant affichage d'un menuitem ou d'un menuitemcheckbox du composant dropdown-menu
*/
export class DsfrDropdownMenuItemComponent {
constructor() {
this.selectItem = new EventEmitter(); // Événement pour l'utilisateur
this._checked = false; // si type = checkbox
this.elementRef = inject(ElementRef);
this.renderer = inject(Renderer2);
}
get checked() {
return this._checked;
}
set checked(value) {
this._checked = value;
if (this._anchorElement && this.type === 'checkbox') {
this._anchorElement.setAttribute('aria-checked', '' + this._checked);
}
}
/**
* Positionner les classes CSS si dsfr-button ou dsfr-link
*/
ngAfterContentInit() {
if (this.button) {
this.button.customClass = this.button.customClass
? this.button.customClass + ' dsfrx-menu-item'
: 'dsfrx-menu-item';
this.button.variant = 'tertiary';
}
if (this.link) {
this.link.customClass = this.link.customClass
? this.link.customClass + ' fr-sidemenu__link'
: 'fr-sidemenu__link';
}
}
/**
* Positionnement des éléments dans le DOM pour l'accessibilité
* - ajout d'un élément wrapper li
* - récupération de l'élément _anchorElement comme élément focusable (dsfr-link, dsfr-button ou li)
* - ajout de l'attribut [role] menuitem sur l'élément focusable si type est undefined
* - ajout de [aria-checked] et [role] menuitemcheckbox sur sur l'élément focusable si le type est checkbox
*/
ngAfterViewInit() {
// surround element with li
const elem = this.elementRef.nativeElement;
const li = document.createElement('li');
li.setAttribute('role', 'presentation');
elem.replaceWith(li); // Ne remplace pas l'élément en lui même mais modifie la Node parent de l'élément
li.appendChild(elem);
this._unlistenFn = this.renderer.listen(li, 'click', (event) => {
this.selectItem.emit(event);
});
// get anchor element
if (this.link) {
this._anchorElement = this.elementRef.nativeElement.querySelector('a');
}
else if (this.button) {
this._anchorElement = this.elementRef.nativeElement.querySelector('button');
}
else {
li.className = 'interactive';
this._anchorElement = li;
}
// add role
if (this.type) {
this._anchorElement.setAttribute('role', this.type === 'checkbox' ? 'menuitemcheckbox' : 'menuitemradio');
this._anchorElement.setAttribute('aria-checked', '' + this._checked);
}
else {
this._anchorElement.setAttribute('role', 'menuitem');
}
this._anchorElement.setAttribute('tabindex', '-1');
}
ngOnDestroy() {
if (this._unlistenFn)
this._unlistenFn();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrDropdownMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DsfrDropdownMenuItemComponent, isStandalone: true, selector: "dsfrx-dropdownmenu-item, dsfr-ext-dropdownmenu-item", inputs: { type: "type", checked: "checked" }, outputs: { selectItem: "selectItem" }, queries: [{ propertyName: "button", first: true, predicate: DsfrButtonComponent, descendants: true }, { propertyName: "link", first: true, predicate: DsfrLinkComponent, descendants: true }], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DsfrDropdownMenuItemComponent, decorators: [{
type: Component,
args: [{
selector: 'dsfrx-dropdownmenu-item, dsfr-ext-dropdownmenu-item',
standalone: true,
imports: [CommonModule],
template: `<ng-content></ng-content>`,
changeDetection: ChangeDetectionStrategy.OnPush,
encapsulation: ViewEncapsulation.None,
}]
}], propDecorators: { type: [{
type: Input
}], selectItem: [{
type: Output
}], button: [{
type: ContentChild,
args: [DsfrButtonComponent, { static: false }]
}], link: [{
type: ContentChild,
args: [DsfrLinkComponent, { static: false }]
}], checked: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd25tZW51LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItZXh0L3NyYy9saWIvZHJvcGRvd25tZW51L2NvbXBvbmVudC9kcm9wZG93bm1lbnUtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBRTdFOztHQUVHO0FBU0gsTUFBTSxPQUFPLDZCQUE2QjtJQVIxQztRQVVZLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDLENBQUMsK0JBQStCO1FBTWpGLGFBQVEsR0FBWSxLQUFLLENBQUMsQ0FBQyxxQkFBcUI7UUFFL0IsZUFBVSxHQUFlLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QyxhQUFRLEdBQWMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBNEUxRDtJQXpFQyxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQ0ksT0FBTyxDQUFDLEtBQWM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxJ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QyxDQUFDOytHQXRGVSw2QkFBNkI7bUdBQTdCLDZCQUE2Qix3T0FJMUIsbUJBQW1CLHVFQUNuQixpQkFBaUIsZ0RBVHJCLDJCQUEyQiwyREFEM0IsWUFBWTs7NEZBS1gsNkJBQTZCO2tCQVJ6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxREFBcUQ7b0JBQy9ELFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7OEJBRVUsSUFBSTtzQkFBWixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBRStDLE1BQU07c0JBQTNELFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNBLElBQUk7c0JBQXZELFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQWM5QyxPQUFPO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERzZnJCdXR0b25Db21wb25lbnQsIERzZnJMaW5rQ29tcG9uZW50IH0gZnJvbSAnQGVkdWdvdXZmci9uZ3gtZHNmcic7XG5cbi8qKlxuICogQ29tcG9zYW50IGFmZmljaGFnZSBkJ3VuIG1lbnVpdGVtIG91IGQndW4gbWVudWl0ZW1jaGVja2JveCBkdSBjb21wb3NhbnQgZHJvcGRvd24tbWVudVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkc2ZyeC1kcm9wZG93bm1lbnUtaXRlbSwgZHNmci1leHQtZHJvcGRvd25tZW51LWl0ZW0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGA8bmctY29udGVudD48L25nLWNvbnRlbnQ+YCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIERzZnJEcm9wZG93bk1lbnVJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdHlwZTogdW5kZWZpbmVkIHwgJ2NoZWNrYm94JyB8ICdyYWRpbyc7XG4gIEBPdXRwdXQoKSBzZWxlY3RJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTsgLy8gw4l2w6luZW1lbnQgcG91ciBsJ3V0aWxpc2F0ZXVyXG5cbiAgQENvbnRlbnRDaGlsZChEc2ZyQnV0dG9uQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSkgYnV0dG9uOiBEc2ZyQnV0dG9uQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xuICBAQ29udGVudENoaWxkKERzZnJMaW5rQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSkgbGluazogRHNmckxpbmtDb21wb25lbnQgfCB1bmRlZmluZWQ7XG5cbiAgX2FuY2hvckVsZW1lbnQ6IEhUTUxFbGVtZW50OyAvLyDDqWzDqW1lbnQgZm9jdXNhYmxlIChyb2xlID0gbWVudWl0ZW0gLyBtZW51aXRlbWNoZWNrYm94KVxuICBfY2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBzaSB0eXBlID0gY2hlY2tib3hcblxuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMiA9IGluamVjdChSZW5kZXJlcjIpO1xuICBwcml2YXRlIF91bmxpc3RlbkZuOiBGdW5jdGlvbjtcblxuICBnZXQgY2hlY2tlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tlZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBjaGVja2VkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2hlY2tlZCA9IHZhbHVlO1xuICAgIGlmICh0aGlzLl9hbmNob3JFbGVtZW50ICYmIHRoaXMudHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgdGhpcy5fYW5jaG9yRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtY2hlY2tlZCcsICcnICsgdGhpcy5fY2hlY2tlZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9ubmVyIGxlcyBjbGFzc2VzIENTUyBzaSBkc2ZyLWJ1dHRvbiBvdSBkc2ZyLWxpbmtcbiAgICovXG4gIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYnV0dG9uKSB7XG4gICAgICB0aGlzLmJ1dHRvbi5jdXN0b21DbGFzcyA9IHRoaXMuYnV0dG9uLmN1c3RvbUNsYXNzXG4gICAgICAgID8gdGhpcy5idXR0b24uY3VzdG9tQ2xhc3MgKyAnIGRzZnJ4LW1lbnUtaXRlbSdcbiAgICAgICAgOiAnZHNmcngtbWVudS1pdGVtJztcbiAgICAgIHRoaXMuYnV0dG9uLnZhcmlhbnQgPSAndGVydGlhcnknO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxpbmspIHtcbiAgICAgIHRoaXMubGluay5jdXN0b21DbGFzcyA9IHRoaXMubGluay5jdXN0b21DbGFzc1xuICAgICAgICA/IHRoaXMubGluay5jdXN0b21DbGFzcyArICcgZnItc2lkZW1lbnVfX2xpbmsnXG4gICAgICAgIDogJ2ZyLXNpZGVtZW51X19saW5rJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9zaXRpb25uZW1lbnQgZGVzIMOpbMOpbWVudHMgZGFucyBsZSBET00gcG91ciBsJ2FjY2Vzc2liaWxpdMOpXG4gICAqIC0gYWpvdXQgZCd1biDDqWzDqW1lbnQgd3JhcHBlciBsaVxuICAgKiAtIHLDqWN1cMOpcmF0aW9uIGRlIGwnw6lsw6ltZW50IF9hbmNob3JFbGVtZW50IGNvbW1lIMOpbMOpbWVudCBmb2N1c2FibGUgKGRzZnItbGluaywgZHNmci1idXR0b24gb3UgbGkpXG4gICAqIC0gYWpvdXQgZGUgbCdhdHRyaWJ1dCBbcm9sZV0gbWVudWl0ZW0gc3VyIGwnw6lsw6ltZW50IGZvY3VzYWJsZSBzaSB0eXBlIGVzdCB1bmRlZmluZWRcbiAgICogLSBham91dCBkZSBbYXJpYS1jaGVja2VkXSBldCBbcm9sZV0gbWVudWl0ZW1jaGVja2JveCBzdXIgc3VyIGwnw6lsw6ltZW50IGZvY3VzYWJsZSBzaSBsZSB0eXBlIGVzdCBjaGVja2JveFxuICAgKi9cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBzdXJyb3VuZCBlbGVtZW50IHdpdGggbGlcbiAgICBjb25zdCBlbGVtID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1xuICAgIGxpLnNldEF0dHJpYnV0ZSgncm9sZScsICdwcmVzZW50YXRpb24nKTtcbiAgICBlbGVtLnJlcGxhY2VXaXRoKGxpKTsgLy8gTmUgcmVtcGxhY2UgcGFzIGwnw6lsw6ltZW50IGVuIGx1aSBtw6ptZSBtYWlzIG1vZGlmaWUgbGEgTm9kZSBwYXJlbnQgZGUgbCfDqWzDqW1lbnRcbiAgICBsaS5hcHBlbmRDaGlsZChlbGVtKTtcblxuICAgIHRoaXMuX3VubGlzdGVuRm4gPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihsaSwgJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdEl0ZW0uZW1pdChldmVudCk7XG4gICAgfSk7XG5cbiAgICAvLyBnZXQgYW5jaG9yIGVsZW1lbnRcbiAgICBpZiAodGhpcy5saW5rKSB7XG4gICAgICB0aGlzLl9hbmNob3JFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignYScpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5idXR0b24pIHtcbiAgICAgIHRoaXMuX2FuY2hvckVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdidXR0b24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGkuY2xhc3NOYW1lID0gJ2ludGVyYWN0aXZlJztcbiAgICAgIHRoaXMuX2FuY2hvckVsZW1lbnQgPSBsaTtcbiAgICB9XG5cbiAgICAvLyBhZGQgcm9sZVxuICAgIGlmICh0aGlzLnR5cGUpIHtcbiAgICAgIHRoaXMuX2FuY2hvckVsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgdGhpcy50eXBlID09PSAnY2hlY2tib3gnID8gJ21lbnVpdGVtY2hlY2tib3gnIDogJ21lbnVpdGVtcmFkaW8nKTtcbiAgICAgIHRoaXMuX2FuY2hvckVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnLCAnJyArIHRoaXMuX2NoZWNrZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9hbmNob3JFbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdtZW51aXRlbScpO1xuICAgIH1cblxuICAgIHRoaXMuX2FuY2hvckVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3VubGlzdGVuRm4pIHRoaXMuX3VubGlzdGVuRm4oKTtcbiAgfVxufVxuIl19