design-angular-kit
Version:
Un toolkit Angular conforme alle linee guida di design per i servizi web della PA
136 lines • 15.4 kB
JavaScript
import { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, Output } from '@angular/core';
import { NgClass } from '@angular/common';
import { TranslateModule } from '@ngx-translate/core';
import { IT_ASSET_BASE_PATH } from '../../../interfaces/design-angular-kit-config';
import * as i0 from "@angular/core";
import * as i1 from "@ngx-translate/core";
export class ItChipComponent {
/**
* Indica la label
*/
set label(value) {
this._label = value;
}
get label() {
return this._label;
}
/**
* Indica se mostrate il pulante di chisura
*/
set showCloseButton(value) {
this._showCloseButton = value;
}
get showCloseButton() {
return this._showCloseButton;
}
/**
* Indica il size
*/
set size(value) {
this._size = value;
}
get size() {
return this._size;
}
/**
* Indica il colore della chip
*/
set color(value) {
this._color = value;
}
get color() {
return this._color;
}
/**
* Indica se la chip è disabilitata
*/
set disabled(value) {
this._disabled = value;
}
get disabled() {
return this._disabled;
}
/**
* Indica il nome dell'icona, se valorizzata viene mostrata
*/
set icon(value) {
this._icon = value;
}
get icon() {
return this._icon;
}
/**
* Indica l'url dell'avatar, se valorizzata viene mostrata
*/
set avatar(value) {
this._avatar = value;
}
get avatar() {
return this._avatar;
}
/**
* Indica il valore da aggiungere al parametro alt, di default ''
*/
set altAvatar(value) {
this._altAvatar = value;
}
get altAvatar() {
return this._altAvatar;
}
/**
* Return the icon href
*/
get iconHref() {
return `${this.assetBasePath}/dist/svg/sprites.svg#it-${this._icon}`;
}
/**
* Return the close icon href
*/
get iconCloseHref() {
return `${this.assetBasePath}/dist/svg/sprites.svg#it-${this.iconClose}`;
}
constructor() {
this._label = '';
this._showCloseButton = false;
this._size = '';
this._color = undefined;
this._disabled = false;
this._icon = undefined;
this._avatar = undefined;
this._altAvatar = '';
/**
* Evento emesso al click sul bottone di chiusura
*/
this.closeEvent = new EventEmitter();
this.iconClose = 'close';
this.assetBasePath = inject(IT_ASSET_BASE_PATH);
}
clickToClose() {
this.closeEvent.emit();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItChipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: ItChipComponent, isStandalone: true, selector: "it-chip", inputs: { label: "label", showCloseButton: "showCloseButton", size: "size", color: "color", disabled: "disabled", icon: "icon", avatar: "avatar", altAvatar: "altAvatar" }, outputs: { closeEvent: "closeEvent" }, ngImport: i0, template: "<div\n class=\"chip\"\n [ngClass]=\"[\n !showCloseButton ? 'chip-simple' : 'alert',\n size === 'lg' ? 'chip-lg' : '',\n color ? 'chip-' + color : '',\n disabled ? 'chip-disabled' : '',\n ]\">\n @if (icon) {\n <svg class=\"icon icon-xs\">\n <use [attr.href]=\"iconHref\" [attr.xlink:href]=\"iconHref\"></use>\n </svg>\n }\n @if (avatar) {\n <div class=\"avatar size-xs\"><img [src]=\"avatar\" [alt]=\"altAvatar\" /></div>\n }\n <span class=\"chip-label\">{{ label }}</span>\n @if (showCloseButton) {\n <button (click)=\"clickToClose()\" [disabled]=\"disabled\">\n <svg class=\"icon\">\n <use [attr.href]=\"iconCloseHref\" [attr.xlink:href]=\"iconCloseHref\"></use>\n </svg>\n <span class=\"visually-hidden\">{{ 'it.core.remove' | translate }} {{ label }}</span>\n </button>\n }\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: ItChipComponent, decorators: [{
type: Component,
args: [{ standalone: true, selector: 'it-chip', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgClass, TranslateModule], template: "<div\n class=\"chip\"\n [ngClass]=\"[\n !showCloseButton ? 'chip-simple' : 'alert',\n size === 'lg' ? 'chip-lg' : '',\n color ? 'chip-' + color : '',\n disabled ? 'chip-disabled' : '',\n ]\">\n @if (icon) {\n <svg class=\"icon icon-xs\">\n <use [attr.href]=\"iconHref\" [attr.xlink:href]=\"iconHref\"></use>\n </svg>\n }\n @if (avatar) {\n <div class=\"avatar size-xs\"><img [src]=\"avatar\" [alt]=\"altAvatar\" /></div>\n }\n <span class=\"chip-label\">{{ label }}</span>\n @if (showCloseButton) {\n <button (click)=\"clickToClose()\" [disabled]=\"disabled\">\n <svg class=\"icon\">\n <use [attr.href]=\"iconCloseHref\" [attr.xlink:href]=\"iconCloseHref\"></use>\n </svg>\n <span class=\"visually-hidden\">{{ 'it.core.remove' | translate }} {{ label }}</span>\n </button>\n }\n</div>\n" }]
}], ctorParameters: () => [], propDecorators: { label: [{
type: Input
}], showCloseButton: [{
type: Input
}], size: [{
type: Input
}], color: [{
type: Input
}], disabled: [{
type: Input
}], icon: [{
type: Input
}], avatar: [{
type: Input
}], altAvatar: [{
type: Input
}], closeEvent: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2NvcmUvY2hpcC9jaGlwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9jaGlwL2NoaXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHeEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQzs7O0FBU25GLE1BQU0sT0FBTyxlQUFlO0lBQzFCOztPQUVHO0lBQ0gsSUFBYSxLQUFLLENBQUMsS0FBYTtRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFJRDs7T0FFRztJQUNILElBQWEsZUFBZSxDQUFDLEtBQWM7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFJRDs7T0FFRztJQUNILElBQWEsSUFBSSxDQUFDLEtBQWdCO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENB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bmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEljb25OYW1lIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9pY29uJztcbmltcG9ydCB7IENoaXBDb2xvciB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvY29yZSc7XG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSVRfQVNTRVRfQkFTRV9QQVRIIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9kZXNpZ24tYW5ndWxhci1raXQtY29uZmlnJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaXQtY2hpcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGlwLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtOZ0NsYXNzLCBUcmFuc2xhdGVNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBJdENoaXBDb21wb25lbnQge1xuICAvKipcbiAgICogSW5kaWNhIGxhIGxhYmVsXG4gICAqL1xuICBASW5wdXQoKSBzZXQgbGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2xhYmVsID0gdmFsdWU7XG4gIH1cblxuICBnZXQgbGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbGFiZWw7XG4gIH1cblxuICBwcml2YXRlIF9sYWJlbCA9ICcnO1xuXG4gIC8qKlxuICAgKiBJbmRpY2Egc2UgbW9zdHJhdGUgaWwgcHVsYW50ZSBkaSBjaGlzdXJhXG4gICAqL1xuICBASW5wdXQoKSBzZXQgc2hvd0Nsb3NlQnV0dG9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0Nsb3NlQnV0dG9uID0gdmFsdWU7XG4gIH1cblxuICBnZXQgc2hvd0Nsb3NlQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaG93Q2xvc2VCdXR0b247XG4gIH1cblxuICBwcml2YXRlIF9zaG93Q2xvc2VCdXR0b24gPSBmYWxzZTtcblxuICAvKipcbiAgICogSW5kaWNhIGlsIHNpemVcbiAgICovXG4gIEBJbnB1dCgpIHNldCBzaXplKHZhbHVlOiAnJyB8ICdsZycpIHtcbiAgICB0aGlzLl9zaXplID0gdmFsdWU7XG4gIH1cblxuICBnZXQgc2l6ZSgpOiAnJyB8ICdsZycge1xuICAgIHJldHVybiB0aGlzLl9zaXplO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2l6ZTogJycgfCAnbGcnID0gJyc7XG5cbiAgLyoqXG4gICAqIEluZGljYSBpbCBjb2xvcmUgZGVsbGEgY2hpcFxuICAgKi9cbiAgQElucHV0KCkgc2V0IGNvbG9yKHZhbHVlOiBDaGlwQ29sb3IgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jb2xvciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGNvbG9yKCk6IENoaXBDb2xvciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbG9yO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29sb3I6IENoaXBDb2xvciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5kaWNhIHNlIGxhIGNoaXAgw6ggZGlzYWJpbGl0YXRhXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYSBpbCBub21lIGRlbGwnaWNvbmEsIHNlIHZhbG9yaXp6YXRhIHZpZW5lIG1vc3RyYXRhXG4gICAqL1xuICBASW5wdXQoKSBzZXQgaWNvbih2YWx1ZTogSWNvbk5hbWUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9pY29uID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaWNvbigpOiBJY29uTmFtZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ljb247XG4gIH1cblxuICBwcml2YXRlIF9pY29uOiBJY29uTmFtZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSW5kaWNhIGwndXJsIGRlbGwnYXZhdGFyLCBzZSB2YWxvcml6emF0YSB2aWVuZSBtb3N0cmF0YVxuICAgKi9cbiAgQElucHV0KCkgc2V0IGF2YXRhcih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYXZhdGFyID0gdmFsdWU7XG4gIH1cblxuICBnZXQgYXZhdGFyKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2F2YXRhcjtcbiAgfVxuXG4gIHByaXZhdGUgX2F2YXRhcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBJbmRpY2EgaWwgdmFsb3JlIGRhIGFnZ2l1bmdlcmUgYWwgcGFyYW1ldHJvIGFsdCwgZGkgZGVmYXVsdCAnJ1xuICAgKi9cbiAgQElucHV0KCkgc2V0IGFsdEF2YXRhcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fYWx0QXZhdGFyID0gdmFsdWU7XG4gIH1cblxuICBnZXQgYWx0QXZhdGFyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2FsdEF2YXRhcjtcbiAgfVxuXG4gIHByaXZhdGUgX2FsdEF2YXRhcjogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIEV2ZW50byBlbWVzc28gYWwgY2xpY2sgc3VsIGJvdHRvbmUgZGkgY2hpdXN1cmFcbiAgICovXG4gIEBPdXRwdXQoKSBjbG9zZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGljb24gaHJlZlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBpY29uSHJlZigpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmFzc2V0QmFzZVBhdGh9L2Rpc3Qvc3ZnL3Nwcml0ZXMuc3ZnI2l0LSR7dGhpcy5faWNvbn1gO1xuICB9XG5cbiAgcHJpdmF0ZSBpY29uQ2xvc2U6IEljb25OYW1lID0gJ2Nsb3NlJztcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBjbG9zZSBpY29uIGhyZWZcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgaWNvbkNsb3NlSHJlZigpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmFzc2V0QmFzZVBhdGh9L2Rpc3Qvc3ZnL3Nwcml0ZXMuc3ZnI2l0LSR7dGhpcy5pY29uQ2xvc2V9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYm9vdHN0cmFwLWl0YWxpYSBhc3NldCBmb2xkZXIgcGF0aFxuICAgKiBAZGVmYXVsdCAuL2Jvb3RzdHJhcC1pdGFsaWFcbiAgICovXG4gIHByb3RlY3RlZCBhc3NldEJhc2VQYXRoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5hc3NldEJhc2VQYXRoID0gaW5qZWN0KElUX0FTU0VUX0JBU0VfUEFUSCk7XG4gIH1cblxuICBjbGlja1RvQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUV2ZW50LmVtaXQoKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImNoaXBcIlxuICBbbmdDbGFzc109XCJbXG4gICAgIXNob3dDbG9zZUJ1dHRvbiA/ICdjaGlwLXNpbXBsZScgOiAnYWxlcnQnLFxuICAgIHNpemUgPT09ICdsZycgPyAnY2hpcC1sZycgOiAnJyxcbiAgICBjb2xvciA/ICdjaGlwLScgKyBjb2xvciA6ICcnLFxuICAgIGRpc2FibGVkID8gJ2NoaXAtZGlzYWJsZWQnIDogJycsXG4gIF1cIj5cbiAgQGlmIChpY29uKSB7XG4gICAgPHN2ZyBjbGFzcz1cImljb24gaWNvbi14c1wiPlxuICAgICAgPHVzZSBbYXR0ci5ocmVmXT1cImljb25IcmVmXCIgW2F0dHIueGxpbms6aHJlZl09XCJpY29uSHJlZlwiPjwvdXNlPlxuICAgIDwvc3ZnPlxuICB9XG4gIEBpZiAoYXZhdGFyKSB7XG4gICAgPGRpdiBjbGFzcz1cImF2YXRhciBzaXplLXhzXCI+PGltZyBbc3JjXT1cImF2YXRhclwiIFthbHRdPVwiYWx0QXZhdGFyXCIgLz48L2Rpdj5cbiAgfVxuICA8c3BhbiBjbGFzcz1cImNoaXAtbGFiZWxcIj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgQGlmIChzaG93Q2xvc2VCdXR0b24pIHtcbiAgICA8YnV0dG9uIChjbGljayk9XCJjbGlja1RvQ2xvc2UoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgICAgPHN2ZyBjbGFzcz1cImljb25cIj5cbiAgICAgICAgPHVzZSBbYXR0ci5ocmVmXT1cImljb25DbG9zZUhyZWZcIiBbYXR0ci54bGluazpocmVmXT1cImljb25DbG9zZUhyZWZcIj48L3VzZT5cbiAgICAgIDwvc3ZnPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eyAnaXQuY29yZS5yZW1vdmUnIHwgdHJhbnNsYXRlIH19IHt7IGxhYmVsIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICB9XG48L2Rpdj5cbiJdfQ==