UNPKG

@junte/ui

Version:

Quality Angular UI components kit

198 lines 19.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 } from 'rxjs/operators'; import { JunteUIConfig } from '../../../config'; import { PropertyApi } from '../../../core/decorators/api'; import { Stroke } from '../../../core/enums/stroke'; import { InMemoryCacheService } from '../../../core/services/in-memory-cache.service'; import { IconTag } from '../enums'; var DEFAULT_ICONSET = 'default'; var SvgIconComponent = /** @class */ (function () { function SvgIconComponent(config, http, cache, hostRef, renderer) { this.config = config; this.http = http; this.cache = cache; this.hostRef = hostRef; this.renderer = renderer; this.host = 'jnt-svg-icon-host'; this.icon$ = new BehaviorSubject(null); this.iconset$ = new BehaviorSubject(DEFAULT_ICONSET); this._stroke = Stroke.normal; } Object.defineProperty(SvgIconComponent.prototype, "iconset", { get: function () { return this.iconset$.getValue(); }, set: function (iconset) { this.iconset$.next(iconset); }, enumerable: true, configurable: true }); Object.defineProperty(SvgIconComponent.prototype, "icon", { get: function () { return this.icon$.getValue(); }, set: function (icon) { this.icon$.next(icon); }, enumerable: true, configurable: true }); Object.defineProperty(SvgIconComponent.prototype, "stroke", { get: function () { return this._stroke; }, set: function (stroke) { this._stroke = stroke || Stroke.normal; }, enumerable: true, configurable: true }); Object.defineProperty(SvgIconComponent.prototype, "color", { get: function () { return this._color; }, set: function (color) { this._color = color; if (!!this.svg) { this.render(); } }, enumerable: true, configurable: true }); Object.defineProperty(SvgIconComponent.prototype, "hasColor", { get: function () { return !!this.color; }, enumerable: true, configurable: true }); SvgIconComponent.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(); }); }; SvgIconComponent.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); }; SvgIconComponent.prototype.load = function () { var _this = this; var path = this.config.assets + "/icons/svg/" + this.iconset + ".xml?hash=" + this.config.hash; var key = path + "|" + this.icon; var icon = this.cache.get(key); if (icon === undefined) { var iconset$_1 = this.cache.get(path); if (iconset$_1 === undefined) { iconset$_1 = new BehaviorSubject(null); this.cache.set(path, iconset$_1); this.http.get(path, { responseType: 'text' }).subscribe(function (response) { return iconset$_1.next(new DOMParser().parseFromString(response, 'application/xml')); }); } iconset$_1.pipe(filter(function (iconset) { return !!iconset; })) .subscribe(function (iconset) { icon = iconset.querySelector("[id=" + _this.icon + "]"); if (!icon) { throw new Error("icon [" + _this.icon + "] not found"); } 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(key, icon); }); } else { this.svg = icon; this.render(); } }; SvgIconComponent.ctorParameters = function () { return [ { type: JunteUIConfig }, { type: HttpClient }, { type: InMemoryCacheService }, { type: ElementRef }, { type: Renderer2 } ]; }; __decorate([ HostBinding('attr.host'), __metadata("design:type", Object) ], SvgIconComponent.prototype, "host", void 0); __decorate([ Input(), __metadata("design:type", String), __metadata("design:paramtypes", [String]) ], SvgIconComponent.prototype, "iconset", null); __decorate([ HostBinding('attr.data-icon'), Input(), __metadata("design:type", String), __metadata("design:paramtypes", [String]) ], SvgIconComponent.prototype, "icon", null); __decorate([ HostBinding('attr.data-stroke'), __metadata("design:type", String) ], SvgIconComponent.prototype, "_stroke", void 0); __decorate([ Input(), HostBinding('attr.data-tags'), __metadata("design:type", Array) ], SvgIconComponent.prototype, "tags", void 0); __decorate([ Input(), __metadata("design:type", String), __metadata("design:paramtypes", [String]) ], SvgIconComponent.prototype, "stroke", null); __decorate([ PropertyApi({ description: 'Color for icon', type: '[ui.color]' }), Input(), __metadata("design:type", String), __metadata("design:paramtypes", [String]) ], SvgIconComponent.prototype, "color", null); __decorate([ HostBinding('attr.data-has-color'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], SvgIconComponent.prototype, "hasColor", null); SvgIconComponent = __decorate([ Component({ selector: 'jnt-svg-icon', template: "<svg child-of=\"jnt-svg-icon-host\" child-of=\"jnt-svg-icon-host\" width=\"100%\" height=\"100%\" viewBox=\"0 0 32 32\">\n <path child-of=\"jnt-svg-icon-host\" child-of=\"jnt-svg-icon-host\"\n 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", [JunteUIConfig, HttpClient, InMemoryCacheService, ElementRef, Renderer2]) ], SvgIconComponent); return SvgIconComponent; }()); export { SvgIconComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnLWljb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGp1bnRlL3VpLyIsInNvdXJjZXMiOlsibGliL2VsZW1lbnRzL2ljb24vc3ZnL3N2Zy1pY29uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuQyxJQUFNLGVBQWUsR0FBRyxTQUFTLENBQUM7QUFNbEM7SUFpRUUsMEJBQW9CLE1BQXFCLEVBQ3JCLElBQWdCLEVBQ2hCLEtBQTJCLEVBQzNCLE9BQW1CLEVBQ25CLFFBQW1CO1FBSm5CLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixVQUFLLEdBQUwsS0FBSyxDQUFzQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGFBQVEsR0FBUixRQUFRLENBQVc7UUFuRUosU0FBSSxHQUFHLG1CQUFtQixDQUFDO1FBSXRELFVBQUssR0FBRyxJQUFJLGVBQWUs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QWdCLENBQUM7O2tEQUNmO0lBR2Y7UUFEQyxLQUFLLEVBQUU7OztrREFHUDtJQVdEO1FBTEMsV0FBVyxDQUFDO1lBQ1gsV0FBVyxFQUFFLGdCQUFnQjtZQUM3QixJQUFJLEVBQUUsWUFBWTtTQUNuQixDQUFDO1FBQ0QsS0FBSyxFQUFFOzs7aURBTVA7SUFPRDtRQURDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQzs7O29EQUdsQztJQS9EVSxnQkFBZ0I7UUFKNUIsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLGNBQWM7WUFDeEIsNGJBQTJDO1NBQzVDLENBQUM7eUNBa0U0QixhQUFhO1lBQ2YsVUFBVTtZQUNULG9CQUFvQjtZQUNsQixVQUFVO1lBQ1QsU0FBUztPQXJFNUIsZ0JBQWdCLENBc0k1QjtJQUFELHVCQUFDO0NBQUEsQUF0SUQsSUFzSUM7U0F0SVksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSnVudGVVSUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBQcm9wZXJ0eUFwaSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZGVjb3JhdG9ycy9hcGknO1xuaW1wb3J0IHsgU3Ryb2tlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtcy9zdHJva2UnO1xuaW1wb3J0IHsgSW5NZW1vcnlDYWNoZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2luLW1lbW9yeS1jYWNoZS5zZXJ2aWNlJztcbmltcG9ydCB7IEljb25UYWcgfSBmcm9tICcuLi9lbnVtcyc7XG5cbmNvbnN0IERFRkFVTFRfSUNPTlNFVCA9ICdkZWZhdWx0JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnam50LXN2Zy1pY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N2Zy1pY29uLmVuY2Fwc3VsYXRlZC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTdmdJY29uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuaG9zdCcpIHJlYWRvbmx5IGhvc3QgPSAnam50LXN2Zy1pY29uLWhvc3QnO1xuXG4gIHByaXZhdGUgc3ZnOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfY29sb3I6IHN0cmluZztcbiAgcHJpdmF0ZSBpY29uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihudWxsKTtcbiAgcHJpdmF0ZSBpY29uc2V0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihERUZBVUxUX0lDT05TRVQpO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBpY29uc2V0KGljb25zZXQ6IHN0cmluZykge1xuICAgIHRoaXMuaWNvbnNldCQubmV4dChpY29uc2V0KTtcbiAgfVxuXG4gIGdldCBpY29uc2V0KCkge1xuICAgIHJldHVybiB0aGlzLmljb25zZXQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1pY29uJylcbiAgQElucHV0KClcbiAgc2V0IGljb24oaWNvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5pY29uJC5uZXh0KGljb24pO1xuICB9XG5cbiAgZ2V0IGljb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaWNvbiQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXN0cm9rZScpXG4gIF9zdHJva2U6IFN0cm9rZSA9IFN0cm9rZS5ub3JtYWw7XG5cbiAgQElucHV0KClcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdGFncycpXG4gIHRhZ3M6IHN0cmluZ1tdO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBzdHJva2Uoc3Ryb2tlOiBTdHJva2UpIHtcbiAgICB0aGlzLl9zdHJva2UgPSBzdHJva2UgfHwgU3Ryb2tlLm5vcm1hbDtcbiAgfVxuXG4gIGdldCBzdHJva2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0cm9rZTtcbiAgfVxuXG4gIEBQcm9wZXJ0eUFwaSh7XG4gICAgZGVzY3JpcHRpb246ICdDb2xvciBmb3IgaWNvbicsXG4gICAgdHlwZTogJ1t1aS5jb2xvcl0nXG4gIH0pXG4gIEBJbnB1dCgpXG4gIHNldCBjb2xvcihjb2xvcjogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29sb3IgPSBjb2xvcjtcbiAgICBpZiAoISF0aGlzLnN2Zykge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbG9yO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtaGFzLWNvbG9yJylcbiAgZ2V0IGhhc0NvbG9yKCkge1xuICAgIHJldHVybiAhIXRoaXMuY29sb3I7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogSnVudGVVSUNvbmZpZyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICBwcml2YXRlIGNhY2hlOiBJbk1lbW9yeUNhY2hlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBob3N0UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuaWNvbnNldCQsIHRoaXMuaWNvbiRdKVxuICAgICAgLnBpcGUoZmlsdGVyKChbaWNvbnNldCwgaWNvbl0pID0+ICEhaWNvbnNldCAmJiAhIWljb24pLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvYWQoKSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKCEhdGhpcy5jb2xvcikge1xuICAgICAgaWYgKHRoaXMudGFncy5pbmNsdWRlcyhJY29uVGFnLnN0cm9rZWQpKSB7XG4gICAgICAgIHRoaXMuc3ZnLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgdGhpcy5jb2xvcik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50YWdzLmluY2x1ZGVzKEljb25UYWcuZmlsbGVkKSkge1xuICAgICAgICB0aGlzLnN2Zy5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCB0aGlzLmNvbG9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZWwgPSB0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KGVsLCAnaW5uZXJIVE1MJywgdGhpcy5zdmcub3V0ZXJIVE1MKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZCgpIHtcbiAgICBjb25zdCBwYXRoID0gYCR7dGhpcy5jb25maWcuYXNzZXRzfS9pY29ucy9zdmcvJHt0aGlzLmljb25zZXR9LnhtbD9oYXNoPSR7dGhpcy5jb25maWcuaGFzaH1gO1xuICAgIGNvbnN0IGtleSA9IGAke3BhdGh9fCR7dGhpcy5pY29ufWA7XG5cbiAgICBsZXQgaWNvbiA9IHRoaXMuY2FjaGUuZ2V0PEhUTUxFbGVtZW50PihrZXkpO1xuICAgIGlmIChpY29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBpY29uc2V0JCA9IHRoaXMuY2FjaGUuZ2V0PEJlaGF2aW9yU3ViamVjdDxEb2N1bWVudD4+KHBhdGgpO1xuICAgICAgaWYgKGljb25zZXQkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWNvbnNldCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERvY3VtZW50PihudWxsKTtcbiAgICAgICAgdGhpcy5jYWNoZS5zZXQocGF0aCwgaWNvbnNldCQpO1xuXG4gICAgICAgIHRoaXMuaHR0cC5nZXQocGF0aCwge3Jlc3BvbnNlVHlwZTogJ3RleHQnfSkuc3Vic2NyaWJlKHJlc3BvbnNlID0+XG4gICAgICAgICAgaWNvbnNldCQubmV4dChuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHJlc3BvbnNlLCAnYXBwbGljYXRpb24veG1sJykpKTtcbiAgICAgIH1cbiAgICAgIGljb25zZXQkLnBpcGUoZmlsdGVyKGljb25zZXQgPT4gISFpY29uc2V0KSlcbiAgICAgICAgLnN1YnNjcmliZShpY29uc2V0ID0+IHtcbiAgICAgICAgICBpY29uID0gaWNvbnNldC5xdWVyeVNlbGVjdG9yKGBbaWQ9JHt0aGlzLmljb259XWApO1xuICAgICAgICAgIGlmICghaWNvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpY29uIFske3RoaXMuaWNvbn1dIG5vdCBmb3VuZGApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVuY2Fwc3VsYXRlID0gKGVsOiBFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NoaWxkLW9mJywgdGhpcy5ob3N0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWwuY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgZW5jYXBzdWxhdGUoZWwuY2hpbGRyZW5baV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBlbmNhcHN1bGF0ZShpY29uKTtcbiAgICAgICAgICBpY29uLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTAwJScpO1xuICAgICAgICAgIGljb24uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScpO1xuICAgICAgICAgIHRoaXMuc3ZnID0gaWNvbjtcbiAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCBpY29uKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3ZnID0gaWNvbjtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==