@edugouvfr/ngx-dsfr
Version:
NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).
123 lines • 16.3 kB
JavaScript
import { Component, ContentChildren, Input, ViewEncapsulation, } from '@angular/core';
import { DomUtils, DsfrPositionConst, DsfrSizeConst } from '../../shared';
import { DsfrButtonComponent } from '../button';
import { DsfrAlignConst, DsfrInlineConst } from './buttons-group.model';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class DsfrButtonsGroupComponent {
constructor(_elementRef) {
this._elementRef = _elementRef;
/**
* Permet de basculer la disposition des boutons en mode horizontal.
* En mode vertical, mode par défaut, les boutons prennent 100% de la largeur du conteneur.
*/
this.inline = DsfrInlineConst.NEVER;
/**
* Permet de mettre automatiquement tous les boutons d’un groupe à la même largeur.
* Cela permet une uniformité des boutons en mode horizontal.
* (en mode vertical, les boutons prennent 100% de la largeur du conteneur)
* Cette option peut être combinée avec la propriété d'alignement.
*/
this.equisized = false;
/** Taille des boutons du groupe. */
this.size = DsfrSizeConst.MD;
}
get iconPosition() {
return this._iconPosition;
}
/**
* Positionnement (gauche ou droite) au niveau du groupe des icônes dans les boutons qui
* contiennent à la fois une icône et un label.
*/
set iconPosition(value) {
this._iconPosition = value;
this.updateButtonsIconPosition();
}
/**
* Cette méthode calcule les styles du composant en évitant les magic strings.
* @internal
*/
getClasses() {
let classes = [];
// Inline class
switch (this.inline) {
case 'always':
classes.push('fr-btns-group--inline');
break;
case 'LG':
classes.push('fr-btns-group--inline-lg');
break;
case 'MD':
classes.push('fr-btns-group--inline-md');
break;
case 'SM':
classes.push('fr-btns-group--inline-sm');
break;
default:
break;
}
// Alignment class
switch (this.alignment) {
case DsfrAlignConst.CENTER:
classes.push('fr-btns-group--center');
break;
case DsfrAlignConst.BETWEEN:
classes.push('fr-btns-group--between');
break;
case DsfrAlignConst.RIGHT:
classes.push('fr-btns-group--right');
break;
case DsfrAlignConst.REVERSE:
classes.push('fr-btns-group--inline-reverse', 'fr-btns-group--right');
break;
default:
break;
}
// Size class
if (this.size === DsfrSizeConst.SM) {
classes.push('fr-btns-group--sm');
}
else if (this.size === DsfrSizeConst.LG) {
classes.push('fr-btns-group--lg');
}
// Equisized class
if (this.equisized) {
classes.push('fr-btns-group--equisized');
}
// IconPosition class
if (this._iconPosition) {
classes.push(this._iconPosition === DsfrPositionConst.LEFT ? 'fr-btns-group--icon-left' : 'fr-btns-group--icon-right');
}
return classes;
}
ngAfterViewInit() {
// Position des icônes de boutons
this.updateButtonsIconPosition();
// Ajout de <li> autour des boutons
DomUtils.surroundChildWithli(this._elementRef, 'dsfr-button');
}
/** On force la position des icônes des boutons. */
updateButtonsIconPosition() {
this.buttons?.forEach((button) => (button.iconPosition = this._iconPosition));
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrButtonsGroupComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DsfrButtonsGroupComponent, selector: "dsfr-buttons-group", inputs: { inline: "inline", alignment: "alignment", equisized: "equisized", size: "size", iconPosition: "iconPosition" }, queries: [{ propertyName: "buttons", predicate: DsfrButtonComponent }], ngImport: i0, template: "<ul class=\"fr-btns-group\" [ngClass]=\"getClasses()\">\n <ng-content></ng-content>\n</ul>\n", styles: ["@charset \"UTF-8\";.fr-btns-group--sm:not([class^=fr-btns-group--icon-]):not([class*=\" fr-btns-group--icon-\"]) .fr-btn[class*=\" fa-icon\"]{max-width:2rem;max-height:2rem}.fr-btns-group li{margin:0 .5rem 1rem}.fr-btns-group li .fr-btn{margin:0}.fr-btns-group--inline li{margin-left:.5rem;margin-right:.5rem}.fr-btns-group--inline li .fr-btn{margin:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DsfrButtonsGroupComponent, decorators: [{
type: Component,
args: [{ selector: 'dsfr-buttons-group', encapsulation: ViewEncapsulation.None, template: "<ul class=\"fr-btns-group\" [ngClass]=\"getClasses()\">\n <ng-content></ng-content>\n</ul>\n", styles: ["@charset \"UTF-8\";.fr-btns-group--sm:not([class^=fr-btns-group--icon-]):not([class*=\" fr-btns-group--icon-\"]) .fr-btn[class*=\" fa-icon\"]{max-width:2rem;max-height:2rem}.fr-btns-group li{margin:0 .5rem 1rem}.fr-btns-group li .fr-btn{margin:0}.fr-btns-group--inline li{margin-left:.5rem;margin-right:.5rem}.fr-btns-group--inline li .fr-btn{margin:0}\n"] }]
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { buttons: [{
type: ContentChildren,
args: [DsfrButtonComponent]
}], inline: [{
type: Input
}], alignment: [{
type: Input
}], equisized: [{
type: Input
}], size: [{
type: Input
}], iconPosition: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9ucy1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9idXR0b25zLWdyb3VwL2J1dHRvbnMtZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWRzZnItY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvYnV0dG9ucy1ncm91cC9idXR0b25zLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUVmLEtBQUssRUFFTCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBZ0IsaUJBQWlCLEVBQVksYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRCxPQUFPLEVBQWEsY0FBYyxFQUFjLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7QUFRL0YsTUFBTSxPQUFPLHlCQUF5QjtJQW1DcEMsWUFBb0IsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUEvQjNDOzs7V0FHRztRQUNNLFdBQU0sR0FBZSxlQUFlLENBQUMsS0FBSyxDQUFDO1FBY3BEOzs7OztXQUtHO1FBQ00sY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUzQixvQ0FBb0M7UUFDM0IsU0FBSSxHQUFhLGFBQWEsQ0FBQyxFQUFFLENBQUM7SUFJRyxDQUFDO0lBRS9DLElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBYSxZQUFZLENBQUMsS0FBbUI7UUFDM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENB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O3NCQUFkLEtBQUs7Z0JBWUcsU0FBUztzQkFBakIsS0FBSztnQkFRRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFjTyxZQUFZO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVV0aWxzLCBEc2ZyUG9zaXRpb24sIERzZnJQb3NpdGlvbkNvbnN0LCBEc2ZyU2l6ZSwgRHNmclNpemVDb25zdCB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBEc2ZyQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uJztcbmltcG9ydCB7IERzZnJBbGlnbiwgRHNmckFsaWduQ29uc3QsIERzZnJJbmxpbmUsIERzZnJJbmxpbmVDb25zdCB9IGZyb20gJy4vYnV0dG9ucy1ncm91cC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RzZnItYnV0dG9ucy1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b25zLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYnV0dG9ucy1ncm91cC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBEc2ZyQnV0dG9uc0dyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihEc2ZyQnV0dG9uQ29tcG9uZW50KSBidXR0b25zITogUXVlcnlMaXN0PERzZnJCdXR0b25Db21wb25lbnQ+O1xuXG4gIC8qKlxuICAgKiBQZXJtZXQgZGUgYmFzY3VsZXIgbGEgZGlzcG9zaXRpb24gZGVzIGJvdXRvbnMgZW4gbW9kZSBob3Jpem9udGFsLlxuICAgKiBFbiBtb2RlIHZlcnRpY2FsLCBtb2RlIHBhciBkw6lmYXV0LCBsZXMgYm91dG9ucyBwcmVubmVudCAxMDAlIGRlIGxhIGxhcmdldXIgZHUgY29udGVuZXVyLlxuICAgKi9cbiAgQElucHV0KCkgaW5saW5lOiBEc2ZySW5saW5lID0gRHNmcklubGluZUNvbnN0Lk5FVkVSO1xuXG4gIC8qKlxuICAgKiBQbGFjZW1lbnQgZGVzIGJvdXRvbnMgZW4gbW9kZSBgaW5saW5lYCA6XG4gICAqIC0gYGRlZmF1bHRgIDogYWxpZ25lIGxlcyBib3V0b25zIHN1ciBsYSBnYXVjaGUuXG4gICAqIC0gYHJpZ2h0YCA6IGFsaWduZSBsZXMgYm91dG9ucyBzdXIgbGEgZHJvaXRlXG4gICAqIC0gYGJldHdlZW5gIDogbGVzIGJvdXRvbnMgb250IGxlcyBtw6ptZXMgZXNwYWNlbWVudHMgZW50ZSBldXguXG4gICAqIC0gYGNlbnRlcmAgOiBhbGlnbmUgbGVzIGJvdXRvbnMgYXUgY2VudHJlIGR1IGNvbnRlbmV1ci5cbiAgICogLSBgcmV2ZXJzZWAgOiBsZXMgYm91dG9ucyBzZSBsaXNlbnQgZGUgZHJvaXRlIMOgIGdhdWNoZSAoaW1wbGlxdWUgbsOpY2Vzc2FpcmVtZW50IHVuIHBsYWNlbWVudCDDoCBkcm9pdGUpLlxuICAgKlxuICAgKiDwn5OMIG4nYSBhdWN1biBlZmZldCBlbiBtb2RlIHZlcnRpY2FsLlxuICAgKi9cbiAgQElucHV0KCkgYWxpZ25tZW50OiBEc2ZyQWxpZ247XG5cbiAgLyoqXG4gICAqIFBlcm1ldCBkZSBtZXR0cmUgYXV0b21hdGlxdWVtZW50IHRvdXMgbGVzIGJvdXRvbnMgZOKAmXVuIGdyb3VwZSBhzIAgbGEgbWXMgm1lIGxhcmdldXIuXG4gICAqIENlbGEgcGVybWV0IHVuZSB1bmlmb3JtaXTDqSBkZXMgYm91dG9ucyBlbiBtb2RlIGhvcml6b250YWwuXG4gICAqIChlbiBtb2RlIHZlcnRpY2FsLCBsZXMgYm91dG9ucyBwcmVubmVudCAxMDAlIGRlIGxhIGxhcmdldXIgZHUgY29udGVuZXVyKVxuICAgKiBDZXR0ZSBvcHRpb24gcGV1dCDDqnRyZSBjb21iaW7DqWUgYXZlYyBsYSBwcm9wcmnDqXTDqSBkJ2FsaWduZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSBlcXVpc2l6ZWQgPSBmYWxzZTtcblxuICAvKiogVGFpbGxlIGRlcyBib3V0b25zIGR1IGdyb3VwZS4gKi9cbiAgQElucHV0KCkgc2l6ZTogRHNmclNpemUgPSBEc2ZyU2l6ZUNvbnN0Lk1EO1xuXG4gIHByaXZhdGUgX2ljb25Qb3NpdGlvbjogRHNmclBvc2l0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgZ2V0IGljb25Qb3NpdGlvbigpOiBEc2ZyUG9zaXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9pY29uUG9zaXRpb247XG4gIH1cblxuICAvKipcbiAgICogUG9zaXRpb25uZW1lbnQgKGdhdWNoZSBvdSBkcm9pdGUpIGF1IG5pdmVhdSBkdSBncm91cGUgZGVzIGljw7RuZXMgZGFucyBsZXMgYm91dG9ucyBxdWlcbiAgICogY29udGllbm5lbnQgw6AgbGEgZm9pcyB1bmUgaWPDtG5lIGV0IHVuIGxhYmVsLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGljb25Qb3NpdGlvbih2YWx1ZTogRHNmclBvc2l0aW9uKSB7XG4gICAgdGhpcy5faWNvblBvc2l0aW9uID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVCdXR0b25zSWNvblBvc2l0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2V0dGUgbcOpdGhvZGUgY2FsY3VsZSBsZXMgc3R5bGVzIGR1IGNvbXBvc2FudCBlbiDDqXZpdGFudCBsZXMgbWFnaWMgc3RyaW5ncy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRDbGFzc2VzKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIElubGluZSBjbGFzc1xuICAgIHN3aXRjaCAodGhpcy5pbmxpbmUpIHtcbiAgICAgIGNhc2UgJ2Fsd2F5cyc6XG4gICAgICAgIGNsYXNzZXMucHVzaCgnZnItYnRucy1ncm91cC0taW5saW5lJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnTEcnOlxuICAgICAgICBjbGFzc2VzLnB1c2goJ2ZyLWJ0bnMtZ3JvdXAtLWlubGluZS1sZycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ01EJzpcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdmci1idG5zLWdyb3VwLS1pbmxpbmUtbWQnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdTTSc6XG4gICAgICAgIGNsYXNzZXMucHVzaCgnZnItYnRucy1ncm91cC0taW5saW5lLXNtJyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBBbGlnbm1lbnQgY2xhc3NcbiAgICBzd2l0Y2ggKHRoaXMuYWxpZ25tZW50KSB7XG4gICAgICBjYXNlIERzZnJBbGlnbkNvbnN0LkNFTlRFUjpcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdmci1idG5zLWdyb3VwLS1jZW50ZXInKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERzZnJBbGlnbkNvbnN0LkJFVFdFRU46XG4gICAgICAgIGNsYXNzZXMucHVzaCgnZnItYnRucy1ncm91cC0tYmV0d2VlbicpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRHNmckFsaWduQ29uc3QuUklHSFQ6XG4gICAgICAgIGNsYXNzZXMucHVzaCgnZnItYnRucy1ncm91cC0tcmlnaHQnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERzZnJBbGlnbkNvbnN0LlJFVkVSU0U6XG4gICAgICAgIGNsYXNzZXMucHVzaCgnZnItYnRucy1ncm91cC0taW5saW5lLXJldmVyc2UnLCAnZnItYnRucy1ncm91cC0tcmlnaHQnKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFNpemUgY2xhc3NcbiAgICBpZiAodGhpcy5zaXplID09PSBEc2ZyU2l6ZUNvbnN0LlNNKSB7XG4gICAgICBjbGFzc2VzLnB1c2goJ2ZyLWJ0bnMtZ3JvdXAtLXNtJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNpemUgPT09IERzZnJTaXplQ29uc3QuTEcpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZnItYnRucy1ncm91cC0tbGcnKTtcbiAgICB9XG5cbiAgICAvLyBFcXVpc2l6ZWQgY2xhc3NcbiAgICBpZiAodGhpcy5lcXVpc2l6ZWQpIHtcbiAgICAgIGNsYXNzZXMucHVzaCgnZnItYnRucy1ncm91cC0tZXF1aXNpemVkJyk7XG4gICAgfVxuXG4gICAgLy8gSWNvblBvc2l0aW9uIGNsYXNzXG4gICAgaWYgKHRoaXMuX2ljb25Qb3NpdGlvbikge1xuICAgICAgY2xhc3Nlcy5wdXNoKFxuICAgICAgICB0aGlzLl9pY29uUG9zaXRpb24gPT09IERzZnJQb3NpdGlvbkNvbnN0LkxFRlQgPyAnZnItYnRucy1ncm91cC0taWNvbi1sZWZ0JyA6ICdmci1idG5zLWdyb3VwLS1pY29uLXJpZ2h0JyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gUG9zaXRpb24gZGVzIGljw7RuZXMgZGUgYm91dG9uc1xuICAgIHRoaXMudXBkYXRlQnV0dG9uc0ljb25Qb3NpdGlvbigpO1xuXG4gICAgLy8gQWpvdXQgZGUgPGxpPiBhdXRvdXIgZGVzIGJvdXRvbnNcbiAgICBEb21VdGlscy5zdXJyb3VuZENoaWxkV2l0aGxpKHRoaXMuX2VsZW1lbnRSZWYsICdkc2ZyLWJ1dHRvbicpO1xuICB9XG5cbiAgLyoqIE9uIGZvcmNlIGxhIHBvc2l0aW9uIGRlcyBpY8O0bmVzIGRlcyBib3V0b25zLiAqL1xuICBwcml2YXRlIHVwZGF0ZUJ1dHRvbnNJY29uUG9zaXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5idXR0b25zPy5mb3JFYWNoKChidXR0b24pID0+IChidXR0b24uaWNvblBvc2l0aW9uID0gdGhpcy5faWNvblBvc2l0aW9uKSk7XG4gIH1cbn1cbiIsIjx1bCBjbGFzcz1cImZyLWJ0bnMtZ3JvdXBcIiBbbmdDbGFzc109XCJnZXRDbGFzc2VzKClcIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC91bD5cbiJdfQ==