@ux-aspects/ux-aspects
Version:
Open source user interface framework for building modern, responsive, mobile big data applications
108 lines • 16.1 kB
JavaScript
import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
import { ChangeDetectionStrategy, Component, ElementRef, Input, Renderer2, inject } from '@angular/core';
import { Subject } from 'rxjs';
import { filter, takeUntil } from 'rxjs/operators';
import { IconService } from './icon.service';
import * as i0 from "@angular/core";
export class IconComponent {
constructor() {
this._elementRef = inject(ElementRef);
this._renderer = inject(Renderer2);
this._iconService = inject(IconService);
/** Store the boolean value of flip vertical */
this._flipVertical = false;
/** Store the boolean value of flip horizontal */
this._flipHorizontal = false;
/** Automatically unsubscribe from observables */
this._onDestroy = new Subject();
}
/** The number of degrees to rotate the icon */
set rotate(rotation) {
this._rotate = coerceNumberProperty(rotation);
}
get rotate() {
return this._rotate;
}
/** Define if the icon should be horizontally flipped */
set flipHorizontal(flipHorizontal) {
this._flipHorizontal = coerceBooleanProperty(flipHorizontal);
}
get flipHorizontal() {
return this._flipHorizontal;
}
/** Define if the icon should be horizontally flipped */
set flipVertical(flipVertical) {
this._flipVertical = coerceBooleanProperty(flipVertical);
}
get flipVertical() {
return this._flipVertical;
}
/** When inputs change ensure we have the best icon definition */
ngOnChanges(changes) {
// if the name or size changes then update the icon
if (changes.name && changes.name.currentValue !== changes.name.previousValue ||
changes.size && changes.size.currentValue !== changes.size.previousValue) {
this.updateIcon();
}
}
/** Watch for changes to the iconset */
ngAfterViewInit() {
// watch for changes to the iconset to check if we need to update.
this._iconService.iconsChanged$.pipe(filter(event => this._icon && event.name === this._icon.name), takeUntil(this._onDestroy)).subscribe(() => this.updateIcon());
}
/** Cleanup on component destroy */
ngOnDestroy() {
this._onDestroy.next();
this._onDestroy.complete();
}
/** get the icon definition based on the name and size specified */
updateIcon() {
// remove the current icon set and icon classes of the old icon.
// note we are using the renderer and not HostBindings as a HostBinding
// on the `class` property will override any user added classes which is
// not desirable.
if (this._icon) {
this._renderer.removeClass(this._elementRef.nativeElement, this._icon.iconset);
this._renderer.removeClass(this._elementRef.nativeElement, this._icon.icon);
}
// update the stored icon definition with the best match based on name and size
this._icon = this._iconService.getIcon(this.name, this.size);
// add the new icon classes, again using the renderer to avoid overriding user classes
if (this._icon) {
this._renderer.addClass(this._elementRef.nativeElement, this._icon.iconset);
this._renderer.addClass(this._elementRef.nativeElement, this._icon.icon);
}
else if (this.name) {
console.warn(`The icon ${this.name} could not be found. Ensure you are using the correct iconset.`);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: IconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: IconComponent, selector: "ux-icon", inputs: { name: "name", size: "size", rotate: "rotate", flipHorizontal: "flipHorizontal", flipVertical: "flipVertical" }, host: { properties: { "style.font-size": "size", "class.ux-flip-horizontal": "flipHorizontal", "class.ux-flip-vertical": "flipVertical", "class.ux-rotate-90": "rotate == 90", "class.ux-rotate-180": "rotate == 180", "class.ux-rotate-270": "rotate == 270" } }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: IconComponent, decorators: [{
type: Component,
args: [{
selector: 'ux-icon',
template: '',
changeDetection: ChangeDetectionStrategy.OnPush,
host: {
'[style.font-size]': 'size',
'[class.ux-flip-horizontal]': 'flipHorizontal',
'[class.ux-flip-vertical]': 'flipVertical',
'[class.ux-rotate-90]': 'rotate == 90',
'[class.ux-rotate-180]': 'rotate == 180',
'[class.ux-rotate-270]': 'rotate == 270',
}
}]
}], propDecorators: { name: [{
type: Input
}], size: [{
type: Input
}], rotate: [{
type: Input
}], flipHorizontal: [{
type: Input
}], flipVertical: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9pY29uL2ljb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BGLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQXdCLFNBQVMsRUFBaUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdKLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBZ0I3QyxNQUFNLE9BQU8sYUFBYTtJQWIxQjtRQWNxQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVqQyxjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTlCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBeUNwRCwrQ0FBK0M7UUFDdkMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFFdkMsaURBQWlEO1FBQ3pDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRXpDLGlEQUFpRDtRQUNoQyxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztLQWtEckQ7SUExRkcsK0NBQStDO0lBQy9DLElBQWEsTUFBTSxDQUFDLFFBQStCO1FBQy9DLElBQUksQ0FBQyxPQUFPLEdBQUcsb0JBQW9CLENBQUMsUUFBUSxDQUFpQixDQUFDO0lBQ2xFLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELHdEQUF3RDtJ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TCxDQUFDOytHQXRHUSxhQUFhO21HQUFiLGFBQWEsaWNBWFosRUFBRTs7NEZBV0gsYUFBYTtrQkFiekIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsU0FBUztvQkFDbkIsUUFBUSxFQUFFLEVBQUU7b0JBQ1osZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLElBQUksRUFBRTt3QkFDRixtQkFBbUIsRUFBRSxNQUFNO3dCQUMzQiw0QkFBNEIsRUFBRSxnQkFBZ0I7d0JBQzlDLDBCQUEwQixFQUFFLGNBQWM7d0JBQzFDLHNCQUFzQixFQUFFLGNBQWM7d0JBQ3RDLHVCQUF1QixFQUFFLGVBQWU7d0JBQ3hDLHVCQUF1QixFQUFFLGVBQWU7cUJBQzNDO2lCQUNKOzhCQVNZLElBQUk7c0JBQVosS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR08sTUFBTTtzQkFBbEIsS0FBSztnQkFTTyxjQUFjO3NCQUExQixLQUFLO2dCQVNPLFlBQVk7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWNvblNlcnZpY2UgfSBmcm9tICcuL2ljb24uc2VydmljZSc7XG5pbXBvcnQgeyBJY29uRGVmaW5pdGlvbiB9IGZyb20gJy4vaWNvbnNldHMvaWNvbnNldC5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3V4LWljb24nLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgICdbc3R5bGUuZm9udC1zaXplXSc6ICdzaXplJyxcbiAgICAgICAgJ1tjbGFzcy51eC1mbGlwLWhvcml6b250YWxdJzogJ2ZsaXBIb3Jpem9udGFsJyxcbiAgICAgICAgJ1tjbGFzcy51eC1mbGlwLXZlcnRpY2FsXSc6ICdmbGlwVmVydGljYWwnLFxuICAgICAgICAnW2NsYXNzLnV4LXJvdGF0ZS05MF0nOiAncm90YXRlID09IDkwJyxcbiAgICAgICAgJ1tjbGFzcy51eC1yb3RhdGUtMTgwXSc6ICdyb3RhdGUgPT0gMTgwJyxcbiAgICAgICAgJ1tjbGFzcy51eC1yb3RhdGUtMjcwXSc6ICdyb3RhdGUgPT0gMjcwJyxcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEljb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pY29uU2VydmljZSA9IGluamVjdChJY29uU2VydmljZSk7XG5cbiAgICAvKiogRGVmaW5lIHRoZSBpY29uIHRvIGRpc3BsYXkgKi9cbiAgICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XG5cbiAgICAvKiogRGVmaW5lIGEgY3VzdG9tIHNpemUgZm9yIHRoZSBpY29uICovXG4gICAgQElucHV0KCkgc2l6ZTogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBudW1iZXIgb2YgZGVncmVlcyB0byByb3RhdGUgdGhlIGljb24gKi9cbiAgICBASW5wdXQoKSBzZXQgcm90YXRlKHJvdGF0aW9uOiBJY29uUm90YXRpb24gfCBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fcm90YXRlID0gY29lcmNlTnVtYmVyUHJvcGVydHkocm90YXRpb24pIGFzIEljb25Sb3RhdGlvbjtcbiAgICB9XG5cbiAgICBnZXQgcm90YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm90YXRlO1xuICAgIH1cblxuICAgIC8qKiBEZWZpbmUgaWYgdGhlIGljb24gc2hvdWxkIGJlIGhvcml6b250YWxseSBmbGlwcGVkICovXG4gICAgQElucHV0KCkgc2V0IGZsaXBIb3Jpem9udGFsKGZsaXBIb3Jpem9udGFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2ZsaXBIb3Jpem9udGFsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGZsaXBIb3Jpem9udGFsKTtcbiAgICB9XG5cbiAgICBnZXQgZmxpcEhvcml6b250YWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mbGlwSG9yaXpvbnRhbDtcbiAgICB9XG5cbiAgICAvKiogRGVmaW5lIGlmIHRoZSBpY29uIHNob3VsZCBiZSBob3Jpem9udGFsbHkgZmxpcHBlZCAqL1xuICAgIEBJbnB1dCgpIHNldCBmbGlwVmVydGljYWwoZmxpcFZlcnRpY2FsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2ZsaXBWZXJ0aWNhbCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShmbGlwVmVydGljYWwpO1xuICAgIH1cblxuICAgIGdldCBmbGlwVmVydGljYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mbGlwVmVydGljYWw7XG4gICAgfVxuXG4gICAgLyoqIFN0b3JlIHRoZSBtYXRjaGluZyBpY29uIGRlZmluaXRpb24gKi9cbiAgICBfaWNvbjogSWNvbkRlZmluaXRpb247XG5cbiAgICAvKiogU3RvcmUgdGhlIG51bWVyaWMgdmFsdWUgb2Ygcm90YXRpb24gKi9cbiAgICBwcml2YXRlIF9yb3RhdGU6IEljb25Sb3RhdGlvbjtcblxuICAgIC8qKiBTdG9yZSB0aGUgYm9vbGVhbiB2YWx1ZSBvZiBmbGlwIHZlcnRpY2FsICovXG4gICAgcHJpdmF0ZSBfZmxpcFZlcnRpY2FsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogU3RvcmUgdGhlIGJvb2xlYW4gdmFsdWUgb2YgZmxpcCBob3Jpem9udGFsICovXG4gICAgcHJpdmF0ZSBfZmxpcEhvcml6b250YWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBBdXRvbWF0aWNhbGx5IHVuc3Vic2NyaWJlIGZyb20gb2JzZXJ2YWJsZXMgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIFdoZW4gaW5wdXRzIGNoYW5nZSBlbnN1cmUgd2UgaGF2ZSB0aGUgYmVzdCBpY29uIGRlZmluaXRpb24gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cbiAgICAgICAgLy8gaWYgdGhlIG5hbWUgb3Igc2l6ZSBjaGFuZ2VzIHRoZW4gdXBkYXRlIHRoZSBpY29uXG4gICAgICAgIGlmIChjaGFuZ2VzLm5hbWUgJiYgY2hhbmdlcy5uYW1lLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5uYW1lLnByZXZpb3VzVmFsdWUgfHxcbiAgICAgICAgICAgIGNoYW5nZXMuc2l6ZSAmJiBjaGFuZ2VzLnNpemUuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLnNpemUucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJY29uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogV2F0Y2ggZm9yIGNoYW5nZXMgdG8gdGhlIGljb25zZXQgKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIHdhdGNoIGZvciBjaGFuZ2VzIHRvIHRoZSBpY29uc2V0IHRvIGNoZWNrIGlmIHdlIG5lZWQgdG8gdXBkYXRlLlxuICAgICAgICB0aGlzLl9pY29uU2VydmljZS5pY29uc0NoYW5nZWQkLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gdGhpcy5faWNvbiAmJiBldmVudC5uYW1lID09PSB0aGlzLl9pY29uLm5hbWUpLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSlcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVJY29uKCkpO1xuICAgIH1cblxuICAgIC8qKiBDbGVhbnVwIG9uIGNvbXBvbmVudCBkZXN0cm95ICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveS5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBnZXQgdGhlIGljb24gZGVmaW5pdGlvbiBiYXNlZCBvbiB0aGUgbmFtZSBhbmQgc2l6ZSBzcGVjaWZpZWQgKi9cbiAgICB1cGRhdGVJY29uKCk6IHZvaWQge1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgY3VycmVudCBpY29uIHNldCBhbmQgaWNvbiBjbGFzc2VzIG9mIHRoZSBvbGQgaWNvbi5cbiAgICAgICAgLy8gbm90ZSB3ZSBhcmUgdXNpbmcgdGhlIHJlbmRlcmVyIGFuZCBub3QgSG9zdEJpbmRpbmdzIGFzIGEgSG9zdEJpbmRpbmdcbiAgICAgICAgLy8gb24gdGhlIGBjbGFzc2AgcHJvcGVydHkgd2lsbCBvdmVycmlkZSBhbnkgdXNlciBhZGRlZCBjbGFzc2VzIHdoaWNoIGlzXG4gICAgICAgIC8vIG5vdCBkZXNpcmFibGUuXG4gICAgICAgIGlmICh0aGlzLl9pY29uKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX2ljb24uaWNvbnNldCk7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuX2ljb24uaWNvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgdGhlIHN0b3JlZCBpY29uIGRlZmluaXRpb24gd2l0aCB0aGUgYmVzdCBtYXRjaCBiYXNlZCBvbiBuYW1lIGFuZCBzaXplXG4gICAgICAgIHRoaXMuX2ljb24gPSB0aGlzLl9pY29uU2VydmljZS5nZXRJY29uKHRoaXMubmFtZSwgdGhpcy5zaXplKTtcblxuICAgICAgICAvLyBhZGQgdGhlIG5ldyBpY29uIGNsYXNzZXMsIGFnYWluIHVzaW5nIHRoZSByZW5kZXJlciB0byBhdm9pZCBvdmVycmlkaW5nIHVzZXIgY2xhc3Nlc1xuICAgICAgICBpZiAodGhpcy5faWNvbikge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLl9pY29uLmljb25zZXQpO1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLl9pY29uLmljb24pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubmFtZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBUaGUgaWNvbiAke3RoaXMubmFtZX0gY291bGQgbm90IGJlIGZvdW5kLiBFbnN1cmUgeW91IGFyZSB1c2luZyB0aGUgY29ycmVjdCBpY29uc2V0LmApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBJY29uUm90YXRpb24gPSA5MCB8IDE4MCB8IDI3MDtcbiJdfQ==