@junte/ui
Version:
Quality Angular UI components kit
166 lines • 16.8 kB
JavaScript
import { __decorate, __metadata, __read } from "tslib";
import { HttpClient } from '@angular/common/http';
import { Component, ElementRef, HostBinding, Input, OnInit, Renderer2 } from '@angular/core';
import { BehaviorSubject, combineLatest } from 'rxjs';
import { distinctUntilChanged, filter, map } from 'rxjs/operators';
import { JunteUIConfig } from '../../../config';
import { PropertyApi } from '../../../core/decorators/api';
import { InMemoryCacheService } from '../../../core/services/in-memory-cache.service';
import { IconTag } from '../enums';
var DEFAULT_ICONSET = 'default';
var AnimatedIconComponent = /** @class */ (function () {
function AnimatedIconComponent(http, renderer, cache, hostRef, config) {
this.http = http;
this.renderer = renderer;
this.cache = cache;
this.hostRef = hostRef;
this.config = config;
this.host = 'jnt-animated-icon-host';
this.iconset$ = new BehaviorSubject(DEFAULT_ICONSET);
this.icon$ = new BehaviorSubject(null);
}
Object.defineProperty(AnimatedIconComponent.prototype, "iconset", {
get: function () {
return this.iconset$.getValue();
},
set: function (iconset) {
this.iconset$.next(iconset);
},
enumerable: true,
configurable: true
});
Object.defineProperty(AnimatedIconComponent.prototype, "icon", {
get: function () {
return this.icon$.getValue();
},
set: function (icon) {
this.icon$.next(icon);
},
enumerable: true,
configurable: true
});
Object.defineProperty(AnimatedIconComponent.prototype, "color", {
get: function () {
return this._color;
},
set: function (color) {
this._color = color;
if (!!this.svg) {
this.render();
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(AnimatedIconComponent.prototype, "hasColor", {
get: function () {
return !!this.color;
},
enumerable: true,
configurable: true
});
AnimatedIconComponent.prototype.ngOnInit = function () {
var _this = this;
combineLatest([this.iconset$, this.icon$])
.pipe(filter(function (_a) {
var _b = __read(_a, 2), iconset = _b[0], icon = _b[1];
return !!iconset && !!icon;
}), distinctUntilChanged())
.subscribe(function () { return _this.load(); });
};
AnimatedIconComponent.prototype.render = function () {
if (!!this.color) {
if (this.tags.includes(IconTag.stroked)) {
this.svg.setAttribute('stroke', this.color);
}
if (this.tags.includes(IconTag.filled)) {
this.svg.setAttribute('fill', this.color);
}
}
var el = this.hostRef.nativeElement;
this.renderer.setProperty(el, 'innerHTML', this.svg.outerHTML);
};
AnimatedIconComponent.prototype.load = function () {
var _this = this;
var path = this.config.assets + "/icons/animated/" + this.iconset + "/" + this.icon + ".svg?hash=" + this.config.hash;
var icon = this.cache.get(path);
if (icon === undefined) {
this.http.get(path, { responseType: 'text' })
.pipe(map(function (resp) { return new DOMParser().parseFromString(resp, 'application/xml'); }))
.subscribe(function (file) {
icon = file.documentElement;
var encapsulate = function (el) {
el.setAttribute('child-of', _this.host);
for (var i = 0; i < el.children.length; i++) {
encapsulate(el.children[i]);
}
};
encapsulate(icon);
icon.setAttribute('width', '100%');
icon.setAttribute('height', '100%');
_this.svg = icon;
_this.render();
_this.cache.set(path, icon);
});
}
else {
this.svg = icon;
this.render();
}
};
AnimatedIconComponent.ctorParameters = function () { return [
{ type: HttpClient },
{ type: Renderer2 },
{ type: InMemoryCacheService },
{ type: ElementRef },
{ type: JunteUIConfig }
]; };
__decorate([
HostBinding('attr.host'),
__metadata("design:type", Object)
], AnimatedIconComponent.prototype, "host", void 0);
__decorate([
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], AnimatedIconComponent.prototype, "iconset", null);
__decorate([
HostBinding('attr.data-icon'),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], AnimatedIconComponent.prototype, "icon", null);
__decorate([
PropertyApi({
description: 'Color for icon',
type: '[ui.color]'
}),
Input(),
__metadata("design:type", String),
__metadata("design:paramtypes", [String])
], AnimatedIconComponent.prototype, "color", null);
__decorate([
HostBinding('attr.data-has-color'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], AnimatedIconComponent.prototype, "hasColor", null);
__decorate([
Input(),
HostBinding('attr.data-tags'),
__metadata("design:type", Array)
], AnimatedIconComponent.prototype, "tags", void 0);
AnimatedIconComponent = __decorate([
Component({
selector: 'jnt-animated-icon',
template: "<svg child-of=\"jnt-animated-icon-host\" viewBox=\"0 0 32 32\" data-mock>\n <path child-of=\"jnt-animated-icon-host\" d=\"M25.313 4c1.438 0 2.688 1.25 2.688 2.688v18.625c0 1.438-1.25 2.688-2.688 2.688h-18.625c-1.438 0-2.688-1.25-2.688-2.688v-18.625c0-1.438 1.25-2.688 2.688-2.688h18.625zM25.313 6.688h-18.625v18.625h18.625v-18.625z\"></path>\n</svg>"
}),
__metadata("design:paramtypes", [HttpClient,
Renderer2,
InMemoryCacheService,
ElementRef,
JunteUIConfig])
], AnimatedIconComponent);
return AnimatedIconComponent;
}());
export { AnimatedIconComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0ZWQtaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AanVudGUvdWkvIiwic291cmNlcyI6WyJsaWIvZWxlbWVudHMvaWNvbi9hbmltYXRlZC9hbmltYXRlZC1pY29uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuQyxJQUFNLGVBQWUsR0FBRyxTQUFTLENBQUM7QUFNbEM7SUFxREUsK0JBQW9CLElBQWdCLEVBQ2hCLFFBQW1CLEVBQ25CLEtBQTJCLEVBQzNCLE9BQW1CLEVBQ25CLE1BQXFCO1FBSnJCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixVQUFLLEdBQUwsS0FBSyxDQUFzQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQWU7UUF2RE4sU0FBSSxHQUFHLHdCQUF3QixDQUFDO1FBSTNELGFBQVEsR0FBNEIsSUFBSSxlQUFlLENBQVMsZUFBZSxDQUFDLENB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QUNYLGFBQWE7O0lBdkRmO1FBQXpCLFdBQVcsQ0FBQyxXQUFXLENBQUM7O3VEQUEwQztJQVFuRTtRQURDLEtBQUssRUFBRTs7O3dEQUdQO0lBUUQ7UUFGQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7UUFDN0IsS0FBSyxFQUFFOzs7cURBR1A7SUFXRDtRQUxDLFdBQVcsQ0FBQztZQUNYLFdBQVcsRUFBRSxnQkFBZ0I7WUFDN0IsSUFBSSxFQUFFLFlBQVk7U0FDbkIsQ0FBQztRQUNELEtBQUssRUFBRTs7O3NEQU1QO0lBT0Q7UUFEQyxXQUFXLENBQUMscUJBQXFCLENBQUM7Ozt5REFHbEM7SUFJRDtRQUZDLEtBQUssRUFBRTtRQUNQLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQzs7dURBQ2Y7SUFuREoscUJBQXFCO1FBSmpDLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxtQkFBbUI7WUFDN0IsMFdBQWdEO1NBQ2pELENBQUM7eUNBc0QwQixVQUFVO1lBQ04sU0FBUztZQUNaLG9CQUFvQjtZQUNsQixVQUFVO1lBQ1gsYUFBYTtPQXpEOUIscUJBQXFCLENBNkdqQztJQUFELDRCQUFDO0NBQUEsQUE3R0QsSUE2R0M7U0E3R1kscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBKdW50ZVVJQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vY29uZmlnJztcbmltcG9ydCB7IFByb3BlcnR5QXBpIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9kZWNvcmF0b3JzL2FwaSc7XG5pbXBvcnQgeyBJbk1lbW9yeUNhY2hlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvaW4tbWVtb3J5LWNhY2hlLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWNvblRhZyB9IGZyb20gJy4uL2VudW1zJztcblxuY29uc3QgREVGQVVMVF9JQ09OU0VUID0gJ2RlZmF1bHQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdqbnQtYW5pbWF0ZWQtaWNvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbmltYXRlZC1pY29uLmVuY2Fwc3VsYXRlZC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBbmltYXRlZEljb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5ob3N0JykgcmVhZG9ubHkgaG9zdCA9ICdqbnQtYW5pbWF0ZWQtaWNvbi1ob3N0JztcblxuICBwcml2YXRlIHN2ZzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX2NvbG9yOiBzdHJpbmc7XG4gIHByaXZhdGUgaWNvbnNldCQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KERFRkFVTFRfSUNPTlNFVCk7XG4gIHByaXZhdGUgaWNvbiQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KG51bGwpO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBpY29uc2V0KGljb25zZXQ6IHN0cmluZykge1xuICAgIHRoaXMuaWNvbnNldCQubmV4dChpY29uc2V0KTtcbiAgfVxuXG4gIGdldCBpY29uc2V0KCkge1xuICAgIHJldHVybiB0aGlzLmljb25zZXQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1pY29uJylcbiAgQElucHV0KClcbiAgc2V0IGljb24oaWNvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5pY29uJC5uZXh0KGljb24pO1xuICB9XG5cbiAgZ2V0IGljb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaWNvbiQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdDb2xvciBmb3IgaWNvbicsXG4gICAgdHlwZTogJ1t1aS5jb2xvcl0nXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBjb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29sb3IgPSBjb2xvcjtcbiAgICBpZiAoISF0aGlzLnN2Zykge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbG9yO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtaGFzLWNvbG9yJylcbiAgZ2V0IGhhc0NvbG9yKCkge1xuICAgIHJldHVybiAhIXRoaXMuY29sb3I7XG4gIH1cblxuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS10YWdzJylcbiAgdGFnczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgICAgICAgIHByaXZhdGUgY2FjaGU6IEluTWVtb3J5Q2FjaGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGhvc3RSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgY29uZmlnOiBKdW50ZVVJQ29uZmlnKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmljb25zZXQkLCB0aGlzLmljb24kXSlcbiAgICAgIC5waXBlKGZpbHRlcigoW2ljb25zZXQsIGljb25dKSA9PiAhIWljb25zZXQgJiYgISFpY29uKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5sb2FkKCkpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICghIXRoaXMuY29sb3IpIHtcbiAgICAgIGlmICh0aGlzLnRhZ3MuaW5jbHVkZXMoSWNvblRhZy5zdHJva2VkKSkge1xuICAgICAgICB0aGlzLnN2Zy5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIHRoaXMuY29sb3IpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGFncy5pbmNsdWRlcyhJY29uVGFnLmZpbGxlZCkpIHtcbiAgICAgICAgdGhpcy5zdmcuc2V0QXR0cmlidXRlKCdmaWxsJywgdGhpcy5jb2xvcik7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGVsID0gdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShlbCwgJ2lubmVySFRNTCcsIHRoaXMuc3ZnLm91dGVySFRNTCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWQoKSB7XG4gICAgY29uc3QgcGF0aCA9IGAke3RoaXMuY29uZmlnLmFzc2V0c30vaWNvbnMvYW5pbWF0ZWQvJHt0aGlzLmljb25zZXR9LyR7dGhpcy5pY29ufS5zdmc/aGFzaD0ke3RoaXMuY29uZmlnLmhhc2h9YDtcblxuICAgIGxldCBpY29uID0gdGhpcy5jYWNoZS5nZXQ8SFRNTEVsZW1lbnQ+KHBhdGgpO1xuICAgIGlmIChpY29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaHR0cC5nZXQocGF0aCwge3Jlc3BvbnNlVHlwZTogJ3RleHQnfSlcbiAgICAgICAgLnBpcGUobWFwKHJlc3AgPT4gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhyZXNwLCAnYXBwbGljYXRpb24veG1sJykpKVxuICAgICAgICAuc3Vic2NyaWJlKGZpbGUgPT4ge1xuICAgICAgICAgIGljb24gPSBmaWxlLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgICBjb25zdCBlbmNhcHN1bGF0ZSA9IChlbDogRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdjaGlsZC1vZicsIHRoaXMuaG9zdCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGVuY2Fwc3VsYXRlKGVsLmNoaWxkcmVuW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgZW5jYXBzdWxhdGUoaWNvbik7XG4gICAgICAgICAgaWNvbi5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzEwMCUnKTtcbiAgICAgICAgICBpY29uLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEwMCUnKTtcbiAgICAgICAgICB0aGlzLnN2ZyA9IGljb247XG4gICAgICAgICAgdGhpcy5yZW5kZXIoKTtcblxuICAgICAgICAgIHRoaXMuY2FjaGUuc2V0KHBhdGgsIGljb24pO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdmcgPSBpY29uO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxufVxuIl19