UNPKG

@junte/ui

Version:

Quality Angular UI components kit

166 lines 16.8 kB
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