UNPKG

@junte/ui

Version:

Quality Angular UI components kit

144 lines 15.4 kB
import { __decorate, __metadata } 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'; const DEFAULT_ICONSET = 'default'; let AnimatedIconComponent = class AnimatedIconComponent { constructor(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); } set iconset(iconset) { this.iconset$.next(iconset); } get iconset() { return this.iconset$.getValue(); } set icon(icon) { this.icon$.next(icon); } get icon() { return this.icon$.getValue(); } set color(color) { this._color = color; if (!!this.svg) { this.render(); } } get color() { return this._color; } get hasColor() { return !!this.color; } ngOnInit() { combineLatest([this.iconset$, this.icon$]) .pipe(filter(([iconset, icon]) => !!iconset && !!icon), distinctUntilChanged()) .subscribe(() => this.load()); } render() { 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); } } const el = this.hostRef.nativeElement; this.renderer.setProperty(el, 'innerHTML', this.svg.outerHTML); } load() { const path = `${this.config.assets}/icons/animated/${this.iconset}/${this.icon}.svg?hash=${this.config.hash}`; let icon = this.cache.get(path); if (icon === undefined) { this.http.get(path, { responseType: 'text' }) .pipe(map(resp => new DOMParser().parseFromString(resp, 'application/xml'))) .subscribe(file => { icon = file.documentElement; const encapsulate = (el) => { el.setAttribute('child-of', this.host); for (let 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 = () => [ { 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); export { AnimatedIconComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0ZWQtaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AanVudGUvdWkvIiwic291cmNlcyI6WyJsaWIvZWxlbWVudHMvaWNvbi9hbmltYXRlZC9hbmltYXRlZC1pY29uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuQyxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUM7QUFNbEMsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBcUI7SUFxRGhDLFlBQW9CLElBQWdCLEVBQ2hCLFFBQW1CLEVBQ25CLEtBQTJCLEVBQzNCLE9BQW1CLEVBQ25CLE1BQXFCO1FBSnJCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixVQUFLLEdBQUwsS0FBSyxDQUFzQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQWU7UUF2RE4sU0FBSSxHQUFHLHdCQUF3QixDQUFDO1FBSTNELGFBQVEsR0FB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QUEwQztBQVFuRTtJQURDLEtBQUssRUFBRTs7O29EQUdQO0FBUUQ7SUFGQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7SUFDN0IsS0FBSyxFQUFFOzs7aURBR1A7QUFXRDtJQUxDLFdBQVcsQ0FBQztRQUNYLFdBQVcsRUFBRSxnQkFBZ0I7UUFDN0IsSUFBSSxFQUFFLFlBQVk7S0FDbkIsQ0FBQztJQUNELEtBQUssRUFBRTs7O2tEQU1QO0FBT0Q7SUFEQyxXQUFXLENBQUMscUJBQXFCLENBQUM7OztxREFHbEM7QUFJRDtJQUZDLEtBQUssRUFBRTtJQUNQLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQzs7bURBQ2Y7QUFuREoscUJBQXFCO0lBSmpDLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxtQkFBbUI7UUFDN0IsMFdBQWdEO0tBQ2pELENBQUM7cUNBc0QwQixVQUFVO1FBQ04sU0FBUztRQUNaLG9CQUFvQjtRQUNsQixVQUFVO1FBQ1gsYUFBYTtHQXpEOUIscUJBQXFCLENBNkdqQztTQTdHWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEp1bnRlVUlDb25maWcgfSBmcm9tICcuLi8uLi8uLi9jb25maWcnO1xuaW1wb3J0IHsgUHJvcGVydHlBcGkgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2RlY29yYXRvcnMvYXBpJztcbmltcG9ydCB7IEluTWVtb3J5Q2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9pbi1tZW1vcnktY2FjaGUuc2VydmljZSc7XG5pbXBvcnQgeyBJY29uVGFnIH0gZnJvbSAnLi4vZW51bXMnO1xuXG5jb25zdCBERUZBVUxUX0lDT05TRVQgPSAnZGVmYXVsdCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2pudC1hbmltYXRlZC1pY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FuaW1hdGVkLWljb24uZW5jYXBzdWxhdGVkLmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFuaW1hdGVkSWNvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmhvc3QnKSByZWFkb25seSBob3N0ID0gJ2pudC1hbmltYXRlZC1pY29uLWhvc3QnO1xuXG4gIHByaXZhdGUgc3ZnOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfY29sb3I6IHN0cmluZztcbiAgcHJpdmF0ZSBpY29uc2V0JDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oREVGQVVMVF9JQ09OU0VUKTtcbiAgcHJpdmF0ZSBpY29uJDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4obnVsbCk7XG5cbiAgQElucHV0KClcbiAgc2V0IGljb25zZXQoaWNvbnNldDogc3RyaW5nKSB7XG4gICAgdGhpcy5pY29uc2V0JC5uZXh0KGljb25zZXQpO1xuICB9XG5cbiAgZ2V0IGljb25zZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWNvbnNldCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWljb24nKVxuICBASW5wdXQoKVxuICBzZXQgaWNvbihpY29uOiBzdHJpbmcpIHtcbiAgICB0aGlzLmljb24kLm5leHQoaWNvbik7XG4gIH1cblxuICBnZXQgaWNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pY29uJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgQFByb3BlcnR5QXBpKHtcbiAgICBkZXNjcmlwdGlvbjogJ0NvbG9yIGZvciBpY29uJyxcbiAgICB0eXBlOiAnW3VpLmNvbG9yXSdcbiAgfSlcbiAgQElucHV0KClcbiAgc2V0IGNvbG9yKGNvbG9yOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb2xvciA9IGNvbG9yO1xuICAgIGlmICghIXRoaXMuc3ZnKSB7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjb2xvcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sb3I7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1oYXMtY29sb3InKVxuICBnZXQgaGFzQ29sb3IoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5jb2xvcjtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXRhZ3MnKVxuICB0YWdzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjYWNoZTogSW5NZW1vcnlDYWNoZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgaG9zdFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjb25maWc6IEp1bnRlVUlDb25maWcpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuaWNvbnNldCQsIHRoaXMuaWNvbiRdKVxuICAgICAgLnBpcGUoZmlsdGVyKChbaWNvbnNldCwgaWNvbl0pID0+ICEhaWNvbnNldCAmJiAhIWljb24pLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvYWQoKSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKCEhdGhpcy5jb2xvcikge1xuICAgICAgaWYgKHRoaXMudGFncy5pbmNsdWRlcyhJY29uVGFnLnN0cm9rZWQpKSB7XG4gICAgICAgIHRoaXMuc3ZnLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgdGhpcy5jb2xvcik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50YWdzLmluY2x1ZGVzKEljb25UYWcuZmlsbGVkKSkge1xuICAgICAgICB0aGlzLnN2Zy5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCB0aGlzLmNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZWwgPSB0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KGVsLCAnaW5uZXJIVE1MJywgdGhpcy5zdmcub3V0ZXJIVE1MKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZCgpIHtcbiAgICBjb25zdCBwYXRoID0gYCR7dGhpcy5jb25maWcuYXNzZXRzfS9pY29ucy9hbmltYXRlZC8ke3RoaXMuaWNvbnNldH0vJHt0aGlzLmljb259LnN2Zz9oYXNoPSR7dGhpcy5jb25maWcuaGFzaH1gO1xuXG4gICAgbGV0IGljb24gPSB0aGlzLmNhY2hlLmdldDxIVE1MRWxlbWVudD4ocGF0aCk7XG4gICAgaWYgKGljb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5odHRwLmdldChwYXRoLCB7cmVzcG9uc2VUeXBlOiAndGV4dCd9KVxuICAgICAgICAucGlwZShtYXAocmVzcCA9PiBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlc3AsICdhcHBsaWNhdGlvbi94bWwnKSkpXG4gICAgICAgIC5zdWJzY3JpYmUoZmlsZSA9PiB7XG4gICAgICAgICAgaWNvbiA9IGZpbGUuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAgIGNvbnN0IGVuY2Fwc3VsYXRlID0gKGVsOiBFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NoaWxkLW9mJywgdGhpcy5ob3N0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWwuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgZW5jYXBzdWxhdGUoZWwuY2hpbGRyZW5baV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBlbmNhcHN1bGF0ZShpY29uKTtcbiAgICAgICAgICBpY29uLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScpO1xuICAgICAgICAgIGljb24uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScpO1xuICAgICAgICAgIHRoaXMuc3ZnID0gaWNvbjtcbiAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgICAgICAgdGhpcy5jYWNoZS5zZXQocGF0aCwgaWNvbik7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN2ZyA9IGljb247XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=