UNPKG

@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
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==