Socket
Socket
Sign inDemoInstall

angular-svg-icon

Package Overview
Dependencies
Maintainers
1
Versions
37
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

angular-svg-icon - npm Package Compare versions

Comparing version 6.0.0 to 6.0.1

esm2015/index.js

618

bundles/angular-svg-icon.umd.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common/http'), require('rxjs'), require('rxjs/operators'), require('@angular/common')) :
typeof define === 'function' && define.amd ? define('angular-svg-icon', ['exports', '@angular/core', '@angular/common/http', 'rxjs', 'rxjs/operators', '@angular/common'], factory) :
(factory((global['angular-svg-icon'] = {}),global.ng.core,global.ng.common.http,global.rxjs,global.Rx.Observable.prototype,global.ng.common));
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common/http'), require('rxjs'), require('rxjs/operators'), require('@angular/common')) :
typeof define === 'function' && define.amd ? define('angular-svg-icon', ['exports', '@angular/core', '@angular/common/http', 'rxjs', 'rxjs/operators', '@angular/common'], factory) :
(factory((global['angular-svg-icon'] = {}),global.ng.core,global.ng.common.http,global.rxjs,global.rxjs.operators,global.ng.common));
}(this, (function (exports,core,http,rxjs,operators,common) { 'use strict';
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
/* global Reflect, Promise */
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var SvgIconRegistryService = (function () {
function SvgIconRegistryService(http$$1) {
this.http = http$$1;
this.iconsByUrl = new Map();
this.iconsLoadingByUrl = new Map();
}
/** Add a SVG to the registry by passing a name and the SVG. */
/**
* Add a SVG to the registry by passing a name and the SVG.
* @param {?} name
* @param {?} data
* @return {?}
*/
SvgIconRegistryService.prototype.addSvg = /**
* Add a SVG to the registry by passing a name and the SVG.
* @param {?} name
* @param {?} data
* @return {?}
*/
function (name, data) {
if (!this.iconsByUrl.has(name)) {
/** @type {?} */
var div = document.createElement('DIV');
div.innerHTML = data;
/** @type {?} */
var svg = (div.querySelector('svg'));
this.iconsByUrl.set(name, svg);
}
};
/** Load a SVG to the registry from a URL. */
/**
* Load a SVG to the registry from a URL.
* @param {?} url
* @return {?}
*/
SvgIconRegistryService.prototype.loadSvg = /**
* Load a SVG to the registry from a URL.
* @param {?} url
* @return {?}
*/
function (url) {
var _this = this;
if (this.iconsByUrl.has(url)) {
return rxjs.of(this.iconsByUrl.get(url));
}
else if (this.iconsLoadingByUrl.has(url)) {
return this.iconsLoadingByUrl.get(url);
}
else {
/** @type {?} */
var o = (this.http.get(url, { responseType: 'text' }).pipe(operators.map(function (svg) {
/** @type {?} */
var div = document.createElement('DIV');
div.innerHTML = svg;
return /** @type {?} */ (div.querySelector('svg'));
}), operators.tap(function (svg) { return _this.iconsByUrl.set(url, svg); }), operators.catchError(function (err) {
console.error(err);
return rxjs.throwError(err);
}), operators.finalize(function () { return _this.iconsLoadingByUrl.delete(url); }), operators.share()));
this.iconsLoadingByUrl.set(url, o);
return o;
}
};
/** Remove a SVG from the registry by URL (or name). */
/**
* Remove a SVG from the registry by URL (or name).
* @param {?} url
* @return {?}
*/
SvgIconRegistryService.prototype.unloadSvg = /**
* Remove a SVG from the registry by URL (or name).
* @param {?} url
* @return {?}
*/
function (url) {
if (this.iconsByUrl.has(url)) {
this.iconsByUrl.delete(url);
}
};
SvgIconRegistryService.decorators = [
{ type: core.Injectable }
];
/** @nocollapse */
SvgIconRegistryService.ctorParameters = function () {
return [
{ type: http.HttpClient }
];
};
return SvgIconRegistryService;
}());
/**
* @param {?} parentRegistry
* @param {?} http
* @return {?}
*/
function SVG_ICON_REGISTRY_PROVIDER_FACTORY(parentRegistry, http$$1) {
return parentRegistry || new SvgIconRegistryService(http$$1);
}
/** @type {?} */
var SVG_ICON_REGISTRY_PROVIDER = {
provide: SvgIconRegistryService,
deps: [[new core.Optional(), new core.SkipSelf(), SvgIconRegistryService], http.HttpClient],
useFactory: SVG_ICON_REGISTRY_PROVIDER_FACTORY
};
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
function __read(o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
function __read(o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m)
return o;
var i = m.call(o), r, ar = [], e;
try {
if (r && !r.done && (m = i["return"])) m.call(i);
while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
ar.push(r.value);
}
finally { if (e) throw e.error; }
}
return ar;
}
var SvgIconRegistryService = /** @class */ (function () {
function SvgIconRegistryService(http$$1) {
this.http = http$$1;
this.iconsByUrl = new Map();
this.iconsLoadingByUrl = new Map();
}
SvgIconRegistryService.prototype.addSvg = function (name, data) {
if (!this.iconsByUrl.has(name)) {
var div = document.createElement('DIV');
div.innerHTML = data;
var svg = (div.querySelector('svg'));
this.iconsByUrl.set(name, svg);
catch (error) {
e = { error: error };
}
};
SvgIconRegistryService.prototype.loadSvg = function (url) {
var _this = this;
if (this.iconsByUrl.has(url)) {
return rxjs.of(this.iconsByUrl.get(url));
}
else if (this.iconsLoadingByUrl.has(url)) {
return this.iconsLoadingByUrl.get(url);
}
else {
var o = (this.http.get(url, { responseType: 'text' }).pipe(operators.map(function (svg) {
var div = document.createElement('DIV');
div.innerHTML = svg;
return (div.querySelector('svg'));
}), operators.tap(function (svg) { return _this.iconsByUrl.set(url, svg); }), operators.catchError(function (err) {
console.error(err);
return rxjs.throwError(err);
}), operators.finalize(function () { return _this.iconsLoadingByUrl.delete(url); }), operators.share()));
this.iconsLoadingByUrl.set(url, o);
return o;
}
};
SvgIconRegistryService.prototype.unloadSvg = function (url) {
if (this.iconsByUrl.has(url)) {
this.iconsByUrl.delete(url);
}
};
return SvgIconRegistryService;
}());
SvgIconRegistryService.decorators = [
{ type: core.Injectable },
];
SvgIconRegistryService.ctorParameters = function () { return [
{ type: http.HttpClient, },
]; };
function SVG_ICON_REGISTRY_PROVIDER_FACTORY(parentRegistry, http$$1) {
return parentRegistry || new SvgIconRegistryService(http$$1);
}
var SVG_ICON_REGISTRY_PROVIDER = {
provide: SvgIconRegistryService,
deps: [[new core.Optional(), new core.SkipSelf(), SvgIconRegistryService], http.HttpClient],
useFactory: SVG_ICON_REGISTRY_PROVIDER_FACTORY
};
var SvgIconComponent = /** @class */ (function () {
function SvgIconComponent(element, differs, renderer, iconReg) {
this.element = element;
this.differs = differs;
this.renderer = renderer;
this.iconReg = iconReg;
this.stretch = false;
}
Object.defineProperty(SvgIconComponent.prototype, "svgStyle", {
set: function (v) {
this._svgStyle = v;
if (!this.differ && v) {
this.differ = this.differs.find(v).create();
finally {
try {
if (r && !r.done && (m = i["return"]))
m.call(i);
}
},
enumerable: true,
configurable: true
});
SvgIconComponent.prototype.ngOnInit = function () {
this.init();
};
SvgIconComponent.prototype.ngOnDestroy = function () {
this.destroy();
};
SvgIconComponent.prototype.ngOnChanges = function (changeRecord) {
if (changeRecord['src']) {
if (this.svg) {
this.destroy();
finally {
if (e)
throw e.error;
}
this.init();
}
if (changeRecord['stretch']) {
this.stylize();
return ar;
}
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var SvgIconComponent = (function () {
function SvgIconComponent(element, differs, renderer, iconReg) {
this.element = element;
this.differs = differs;
this.renderer = renderer;
this.iconReg = iconReg;
this.stretch = false;
}
};
SvgIconComponent.prototype.ngDoCheck = function () {
if (this.svg && this.differ) {
var changes = this.differ.diff(this._svgStyle);
if (changes) {
this.applyChanges(changes);
}
}
};
SvgIconComponent.prototype.init = function () {
var _this = this;
this.icnSub = this.iconReg.loadSvg(this.src).subscribe(function (svg) {
_this.setSvg(svg);
_this.resetDiffer();
Object.defineProperty(SvgIconComponent.prototype, "svgStyle", {
// Adapted from ngStyle
set: /**
* @param {?} v
* @return {?}
*/ function (v) {
this._svgStyle = v;
if (!this.differ && v) {
this.differ = this.differs.find(v).create();
}
},
enumerable: true,
configurable: true
});
};
SvgIconComponent.prototype.destroy = function () {
this.svg = undefined;
this.differ = undefined;
if (this.icnSub) {
this.icnSub.unsubscribe();
/**
* @return {?}
*/
SvgIconComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.init();
};
/**
* @return {?}
*/
SvgIconComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.destroy();
};
/**
* @param {?} changeRecord
* @return {?}
*/
SvgIconComponent.prototype.ngOnChanges = /**
* @param {?} changeRecord
* @return {?}
*/
function (changeRecord) {
if (changeRecord['src']) {
if (this.svg) {
this.destroy();
}
this.init();
}
if (changeRecord['stretch']) {
this.stylize();
}
};
/**
* @return {?}
*/
SvgIconComponent.prototype.ngDoCheck = /**
* @return {?}
*/
function () {
if (this.svg && this.differ) {
/** @type {?} */
var changes = this.differ.diff(this._svgStyle);
if (changes) {
this.applyChanges(changes);
}
}
};
/**
* @return {?}
*/
SvgIconComponent.prototype.init = /**
* @return {?}
*/
function () {
var _this = this;
this.icnSub = this.iconReg.loadSvg(this.src).subscribe(function (svg) {
_this.setSvg(svg);
_this.resetDiffer();
});
};
/**
* @return {?}
*/
SvgIconComponent.prototype.destroy = /**
* @return {?}
*/
function () {
this.svg = undefined;
this.differ = undefined;
if (this.icnSub) {
this.icnSub.unsubscribe();
}
};
/**
* @return {?}
*/
SvgIconComponent.prototype.resetDiffer = /**
* @return {?}
*/
function () {
if (this._svgStyle && !this.differ) {
this.differ = this.differs.find(this._svgStyle).create();
}
};
/**
* @param {?} svg
* @return {?}
*/
SvgIconComponent.prototype.setSvg = /**
* @param {?} svg
* @return {?}
*/
function (svg) {
if (svg) {
this.svg = svg;
/** @type {?} */
var icon = (svg.cloneNode(true));
/** @type {?} */
var elem = this.element.nativeElement;
elem.innerHTML = '';
this.renderer.appendChild(elem, icon);
this.stylize();
}
};
/**
* @return {?}
*/
SvgIconComponent.prototype.stylize = /**
* @return {?}
*/
function () {
if (this.svg) {
/** @type {?} */
var svg = this.element.nativeElement.firstChild;
if (this.stretch === true) {
this.renderer.setAttribute(svg, 'preserveAspectRatio', 'none');
}
else if (this.stretch === false) {
this.renderer.removeAttribute(svg, 'preserveAspectRatio');
}
}
};
/**
* @param {?} changes
* @return {?}
*/
SvgIconComponent.prototype.applyChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
var _this = this;
changes.forEachRemovedItem(function (record) { return _this.setStyle(record.key, null); });
changes.forEachAddedItem(function (record) { return _this.setStyle(record.key, record.currentValue); });
changes.forEachChangedItem(function (record) { return _this.setStyle(record.key, record.currentValue); });
};
/**
* @param {?} nameAndUnit
* @param {?} value
* @return {?}
*/
SvgIconComponent.prototype.setStyle = /**
* @param {?} nameAndUnit
* @param {?} value
* @return {?}
*/
function (nameAndUnit, value) {
var _a = __read(nameAndUnit.split('.'), 2), name = _a[0], unit = _a[1];
value = value !== null && unit ? "" + value + unit : value;
/** @type {?} */
var svg = this.element.nativeElement.firstChild;
if (value !== null) {
this.renderer.setStyle(svg, name, /** @type {?} */ (value));
}
else {
this.renderer.removeStyle(svg, name);
}
};
SvgIconComponent.decorators = [
{ type: core.Component, args: [{
selector: 'svg-icon',
template: '<ng-content></ng-content>',
styles: [":host { display: inline-block; }"]
}] }
];
/** @nocollapse */
SvgIconComponent.ctorParameters = function () {
return [
{ type: core.ElementRef },
{ type: core.KeyValueDiffers },
{ type: core.Renderer2 },
{ type: SvgIconRegistryService }
];
};
SvgIconComponent.propDecorators = {
src: [{ type: core.Input }],
stretch: [{ type: core.Input }],
svgStyle: [{ type: core.Input }]
};
return SvgIconComponent;
}());
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
var AngularSvgIconModule = (function () {
function AngularSvgIconModule() {
}
};
SvgIconComponent.prototype.resetDiffer = function () {
if (this._svgStyle && !this.differ) {
this.differ = this.differs.find(this._svgStyle).create();
}
};
SvgIconComponent.prototype.setSvg = function (svg) {
if (svg) {
this.svg = svg;
var icon = (svg.cloneNode(true));
var elem = this.element.nativeElement;
elem.innerHTML = '';
this.renderer.appendChild(elem, icon);
this.stylize();
}
};
SvgIconComponent.prototype.stylize = function () {
if (this.svg) {
var svg = this.element.nativeElement.firstChild;
if (this.stretch === true) {
this.renderer.setAttribute(svg, 'preserveAspectRatio', 'none');
}
else if (this.stretch === false) {
this.renderer.removeAttribute(svg, 'preserveAspectRatio');
}
}
};
SvgIconComponent.prototype.applyChanges = function (changes) {
var _this = this;
changes.forEachRemovedItem(function (record) { return _this.setStyle(record.key, null); });
changes.forEachAddedItem(function (record) { return _this.setStyle(record.key, record.currentValue); });
changes.forEachChangedItem(function (record) { return _this.setStyle(record.key, record.currentValue); });
};
SvgIconComponent.prototype.setStyle = function (nameAndUnit, value) {
var _a = __read(nameAndUnit.split('.'), 2), name = _a[0], unit = _a[1];
value = value !== null && unit ? "" + value + unit : value;
var svg = this.element.nativeElement.firstChild;
if (value !== null) {
this.renderer.setStyle(svg, name, (value));
}
else {
this.renderer.removeStyle(svg, name);
}
};
return SvgIconComponent;
}());
SvgIconComponent.decorators = [
{ type: core.Component, args: [{
selector: 'svg-icon',
styles: [":host { display: inline-block; }"],
template: '<ng-content></ng-content>'
},] },
];
SvgIconComponent.ctorParameters = function () { return [
{ type: core.ElementRef, },
{ type: core.KeyValueDiffers, },
{ type: core.Renderer2, },
{ type: SvgIconRegistryService, },
]; };
SvgIconComponent.propDecorators = {
"src": [{ type: core.Input },],
"stretch": [{ type: core.Input },],
"svgStyle": [{ type: core.Input },],
};
var AngularSvgIconModule = /** @class */ (function () {
function AngularSvgIconModule() {
}
return AngularSvgIconModule;
}());
AngularSvgIconModule.decorators = [
{ type: core.NgModule, args: [{
imports: [
common.CommonModule,
],
declarations: [SvgIconComponent],
providers: [SVG_ICON_REGISTRY_PROVIDER],
exports: [SvgIconComponent]
},] },
];
AngularSvgIconModule.decorators = [
{ type: core.NgModule, args: [{
imports: [
common.CommonModule,
],
declarations: [SvgIconComponent],
providers: [SVG_ICON_REGISTRY_PROVIDER],
exports: [SvgIconComponent]
},] }
];
return AngularSvgIconModule;
}());
exports.AngularSvgIconModule = AngularSvgIconModule;
exports.SvgIconRegistryService = SvgIconRegistryService;
exports.SVG_ICON_REGISTRY_PROVIDER_FACTORY = SVG_ICON_REGISTRY_PROVIDER_FACTORY;
exports.SVG_ICON_REGISTRY_PROVIDER = SVG_ICON_REGISTRY_PROVIDER;
exports.SvgIconComponent = SvgIconComponent;
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
Object.defineProperty(exports, '__esModule', { value: true });
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
exports.AngularSvgIconModule = AngularSvgIconModule;
exports.SvgIconRegistryService = SvgIconRegistryService;
exports.SVG_ICON_REGISTRY_PROVIDER_FACTORY = SVG_ICON_REGISTRY_PROVIDER_FACTORY;
exports.SVG_ICON_REGISTRY_PROVIDER = SVG_ICON_REGISTRY_PROVIDER;
exports.SvgIconComponent = SvgIconComponent;
Object.defineProperty(exports, '__esModule', { value: true });
})));
//# sourceMappingURL=angular-svg-icon.umd.js.map
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1zdmctaWNvbi51bWQuanMubWFwIiwic291cmNlcyI6WyJuZzovL2FuZ3VsYXItc3ZnLWljb24vc3JjL3N2Zy1pY29uLXJlZ2lzdHJ5LnNlcnZpY2UudHMiLCJub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwibmc6Ly9hbmd1bGFyLXN2Zy1pY29uL3NyYy9zdmctaWNvbi5jb21wb25lbnQudHMiLCJuZzovL2FuZ3VsYXItc3ZnLWljb24vc3JjL2FuZ3VsYXItc3ZnLWljb24ubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgYXMgb2JzZXJ2YWJsZU9mLCB0aHJvd0Vycm9yIGFzIG9ic2VydmFibGVUaHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHRhcCwgY2F0Y2hFcnJvciwgZmluYWxpemUsIHNoYXJlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU3ZnSWNvblJlZ2lzdHJ5U2VydmljZSB7XG5cblx0cHJpdmF0ZSBpY29uc0J5VXJsID0gbmV3IE1hcDxzdHJpbmcsIFNWR0VsZW1lbnQ+KCk7XG5cdHByaXZhdGUgaWNvbnNMb2FkaW5nQnlVcmwgPSBuZXcgTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxTVkdFbGVtZW50Pj4oKTtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6SHR0cENsaWVudCkge1xuXHR9XG5cblx0LyoqIEFkZCBhIFNWRyB0byB0aGUgcmVnaXN0cnkgYnkgcGFzc2luZyBhIG5hbWUgYW5kIHRoZSBTVkcuICovXG5cdGFkZFN2ZyhuYW1lOnN0cmluZywgZGF0YTpzdHJpbmcpIHtcblx0XHRpZiAoIXRoaXMuaWNvbnNCeVVybC5oYXMobmFtZSkpIHtcblx0XHRcdGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuXHRcdFx0ZGl2LmlubmVySFRNTCA9IGRhdGE7XG5cdFx0XHRjb25zdCBzdmcgPSA8U1ZHRWxlbWVudD5kaXYucXVlcnlTZWxlY3Rvcignc3ZnJyk7XG5cdFx0XHR0aGlzLmljb25zQnlVcmwuc2V0KG5hbWUsIHN2Zyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqIExvYWQgYSBTVkcgdG8gdGhlIHJlZ2lzdHJ5IGZyb20gYSBVUkwuICovXG5cdGxvYWRTdmcodXJsOnN0cmluZykgOiBPYnNlcnZhYmxlPFNWR0VsZW1lbnQ+IHtcblxuXHRcdGlmICh0aGlzLmljb25zQnlVcmwuaGFzKHVybCkpIHtcblx0XHRcdHJldHVybiBvYnNlcnZhYmxlT2YodGhpcy5pY29uc0J5VXJsLmdldCh1cmwpKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuaWNvbnNMb2FkaW5nQnlVcmwuaGFzKHVybCkpIHtcblx0XHRcdHJldHVybiB0aGlzLmljb25zTG9hZGluZ0J5VXJsLmdldCh1cmwpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvID0gPE9ic2VydmFibGU8U1ZHRWxlbWVudD4+IHRoaXMuaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnBpcGUoXG5cdFx0XHRcdG1hcChzdmcgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuXHRcdFx0XHRcdGRpdi5pbm5lckhUTUwgPSBzdmc7XG5cdFx0XHRcdFx0cmV0dXJuIDxTVkdFbGVtZW50PmRpdi5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcblx0XHRcdFx0fSksXG5cdFx0XHRcdHRhcCAoc3ZnID0+IHRoaXMuaWNvbnNCeVVybC5zZXQodXJsLCBzdmcpICksXG5cdFx0XHRcdGNhdGNoRXJyb3IoZXJyID0+IHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycik7XG5cdFx0XHRcdFx0cmV0dXJuIG9ic2VydmFibGVUaHJvd0Vycm9yKGVycik7XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRmaW5hbGl6ZSgoKSA9PiB0aGlzLmljb25zTG9hZGluZ0J5VXJsLmRlbGV0ZSh1cmwpICksXG5cdFx0XHRcdHNoYXJlKClcblx0XHRcdCk7XG5cblx0XHRcdHRoaXMuaWNvbnNMb2FkaW5nQnlVcmwuc2V0KHVybCwgbyk7XG5cdFx0XHRyZXR1cm4gbztcblx0XHR9XG5cdH1cblxuXHQvKiogUmVtb3ZlIGEgU1ZHIGZyb20gdGhlIHJlZ2lzdHJ5IGJ5IFVSTCAob3IgbmFtZSkuICovXG5cdHVubG9hZFN2Zyh1cmw6c3RyaW5nKSB7XG5cdFx0aWYgKHRoaXMuaWNvbnNCeVVybC5oYXModXJsKSkge1xuXHRcdFx0dGhpcy5pY29uc0J5VXJsLmRlbGV0ZSh1cmwpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU1ZHX0lDT05fUkVHSVNUUllfUFJPVklERVJfRkFDVE9SWShwYXJlbnRSZWdpc3RyeTpTdmdJY29uUmVnaXN0cnlTZXJ2aWNlLCBodHRwOkh0dHBDbGllbnQpIHtcblx0cmV0dXJuIHBhcmVudFJlZ2lzdHJ5IHx8IG5ldyBTdmdJY29uUmVnaXN0cnlTZXJ2aWNlKGh0dHApO1xufVxuXG5leHBvcnQgY29uc3QgU1ZHX0lDT05fUkVHSVNUUllfUFJPVklERVIgPSB7XG5cdHByb3ZpZGU6IFN2Z0ljb25SZWdpc3RyeVNlcnZpY2UsXG5cdGRlcHM6IFsgW25ldyBPcHRpb25hbCgpLCBuZXcgU2tpcFNlbGYoKSwgU3ZnSWNvblJlZ2lzdHJ5U2VydmljZV0sIEh0dHBDbGllbnQgXSxcblx0dXNlRmFjdG9yeTogU1ZHX0lDT05fUkVHSVNUUllfUFJPVklERVJfRkFDVE9SWVxufTtcbiIsIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlXHJcbnRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlXHJcbkxpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcblxyXG5USElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZXHJcbktJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRURcclxuV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSxcclxuTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC5cclxuXHJcblNlZSB0aGUgQXBhY2hlIFZlcnNpb24gMi4wIExpY2Vuc2UgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xyXG5hbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMClcclxuICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZShyZXN1bHQudmFsdWUpOyB9KS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmICghZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcclxuICAgIHJlc3VsdC5kZWZhdWx0ID0gbW9kO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBEb0NoZWNrLCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsXG5cdEtleVZhbHVlQ2hhbmdlUmVjb3JkLCBLZXlWYWx1ZUNoYW5nZXMsIEtleVZhbHVlRGlmZmVyLCBLZXlWYWx1ZURpZmZlcnMsXG5cdE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTdmdJY29uUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi9zdmctaWNvbi1yZWdpc3RyeS5zZXJ2aWNlJztcblxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdzdmctaWNvbicsXG5cdHN0eWxlczogWyBgOmhvc3QgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IH1gIF0sXG5cdHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50Pidcbn0pXG5cbmV4cG9ydCBjbGFzcyBTdmdJY29uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgRG9DaGVjayB7XG5cdEBJbnB1dCgpIHNyYzpzdHJpbmc7XG5cdEBJbnB1dCgpIHN0cmV0Y2ggPSBmYWxzZTtcblxuXHQvLyBBZGFwdGVkIGZyb20gbmdTdHlsZVxuXHRASW5wdXQoKVxuXHRzZXQgc3ZnU3R5bGUodjoge1trZXk6c3RyaW5nXTogc3RyaW5nIH0pIHtcblx0XHR0aGlzLl9zdmdTdHlsZSA9IHY7XG5cdFx0aWYgKCF0aGlzLmRpZmZlciAmJiB2KSB7XG5cdFx0XHR0aGlzLmRpZmZlciA9IHRoaXMuZGlmZmVycy5maW5kKHYpLmNyZWF0ZSgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgc3ZnOlNWR0VsZW1lbnQ7XG5cdHByaXZhdGUgaWNuU3ViOlN1YnNjcmlwdGlvbjtcblx0cHJpdmF0ZSBkaWZmZXI6S2V5VmFsdWVEaWZmZXI8c3RyaW5nLCBzdHJpbmd8bnVtYmVyPjtcblx0cHJpdmF0ZSBfc3ZnU3R5bGU6IHtba2V5OnN0cmluZ106c3RyaW5nfTtcblxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6RWxlbWVudFJlZixcblx0XHRwcml2YXRlIGRpZmZlcnM6S2V5VmFsdWVEaWZmZXJzLFxuXHRcdHByaXZhdGUgcmVuZGVyZXI6UmVuZGVyZXIyLFxuXHRcdHByaXZhdGUgaWNvblJlZzpTdmdJY29uUmVnaXN0cnlTZXJ2aWNlKSB7XG5cdH1cblxuXHRuZ09uSW5pdCgpIHtcblx0XHR0aGlzLmluaXQoKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdHRoaXMuZGVzdHJveSgpO1xuXHR9XG5cblx0bmdPbkNoYW5nZXMoY2hhbmdlUmVjb3JkOiB7W2tleTpzdHJpbmddOlNpbXBsZUNoYW5nZX0pIHtcblx0XHRpZiAoY2hhbmdlUmVjb3JkWydzcmMnXSkge1xuXHRcdFx0aWYgKHRoaXMuc3ZnKSB7XG5cdFx0XHRcdHRoaXMuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5pbml0KCk7XG5cdFx0fVxuXHRcdGlmIChjaGFuZ2VSZWNvcmRbJ3N0cmV0Y2gnXSkge1xuXHRcdFx0dGhpcy5zdHlsaXplKCk7XG5cdFx0fVxuXHR9XG5cblx0bmdEb0NoZWNrKCkge1xuXHRcdGlmICh0aGlzLnN2ZyAmJiB0aGlzLmRpZmZlcikge1xuXHRcdFx0Y29uc3QgY2hhbmdlcyA9IHRoaXMuZGlmZmVyLmRpZmYodGhpcy5fc3ZnU3R5bGUpO1xuXHRcdFx0aWYgKGNoYW5nZXMpIHtcblx0XHRcdFx0dGhpcy5hcHBseUNoYW5nZXMoY2hhbmdlcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpbml0KCkge1xuXHRcdHRoaXMuaWNuU3ViID0gdGhpcy5pY29uUmVnLmxvYWRTdmcodGhpcy5zcmMpLnN1YnNjcmliZShzdmcgPT4ge1xuXHRcdFx0dGhpcy5zZXRTdmcoc3ZnKTtcblx0XHRcdHRoaXMucmVzZXREaWZmZXIoKTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgZGVzdHJveSgpIHtcblx0XHR0aGlzLnN2ZyA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmRpZmZlciA9IHVuZGVmaW5lZDtcblx0XHRpZiAodGhpcy5pY25TdWIpIHtcblx0XHRcdHRoaXMuaWNuU3ViLnVuc3Vic2NyaWJlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSByZXNldERpZmZlcigpIHtcblx0XHRpZiAodGhpcy5fc3ZnU3R5bGUgJiYgIXRoaXMuZGlmZmVyKSB7XG5cdFx0XHR0aGlzLmRpZmZlciA9IHRoaXMuZGlmZmVycy5maW5kKHRoaXMuX3N2Z1N0eWxlKS5jcmVhdGUoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHNldFN2Zyhzdmc6U1ZHRWxlbWVudCkge1xuXHRcdGlmIChzdmcpIHtcblx0XHRcdHRoaXMuc3ZnID0gc3ZnO1xuXHRcdFx0Y29uc3QgaWNvbiA9IDxTVkdFbGVtZW50PnN2Zy5jbG9uZU5vZGUodHJ1ZSk7XG5cdFx0XHRjb25zdCBlbGVtID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRcdGVsZW0uaW5uZXJIVE1MID0gJyc7XG5cdFx0XHR0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGVsZW0sIGljb24pO1xuXG5cdFx0XHR0aGlzLnN0eWxpemUoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHN0eWxpemUoKSB7XG5cdFx0aWYgKHRoaXMuc3ZnKSB7XG5cdFx0XHRjb25zdCBzdmcgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRpZiAodGhpcy5zdHJldGNoID09PSB0cnVlKSB7XG5cdFx0XHRcdHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHN2ZywgJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScpO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnN0cmV0Y2ggPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHN2ZywgJ3ByZXNlcnZlQXNwZWN0UmF0aW8nKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFwcGx5Q2hhbmdlcyhjaGFuZ2VzOiBLZXlWYWx1ZUNoYW5nZXM8c3RyaW5nLCBzdHJpbmd8bnVtYmVyPikge1xuXHRcdGNoYW5nZXMuZm9yRWFjaFJlbW92ZWRJdGVtKChyZWNvcmQ6S2V5VmFsdWVDaGFuZ2VSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVtYmVyPikgPT4gdGhpcy5zZXRTdHlsZShyZWNvcmQua2V5LCBudWxsKSk7XG5cdFx0Y2hhbmdlcy5mb3JFYWNoQWRkZWRJdGVtKChyZWNvcmQ6S2V5VmFsdWVDaGFuZ2VSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVtYmVyPikgPT4gdGhpcy5zZXRTdHlsZShyZWNvcmQua2V5LCByZWNvcmQuY3VycmVudFZhbHVlKSk7XG5cdFx0Y2hhbmdlcy5mb3JFYWNoQ2hhbmdlZEl0ZW0oKHJlY29yZDpLZXlWYWx1ZUNoYW5nZVJlY29yZDxzdHJpbmcsIHN0cmluZ3xudW1iZXI+KSA9PiB0aGlzLnNldFN0eWxlKHJlY29yZC5rZXksIHJlY29yZC5jdXJyZW50VmFsdWUpKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0U3R5bGUobmFtZUFuZFVuaXQ6IHN0cmluZywgdmFsdWU6IHN0cmluZ3xudW1iZXJ8bnVsbHx1bmRlZmluZWQpIHtcblx0XHRjb25zdCBbbmFtZSwgdW5pdF0gPSBuYW1lQW5kVW5pdC5zcGxpdCgnLicpO1xuXHRcdHZhbHVlID0gdmFsdWUgIT09IG51bGwgJiYgdW5pdCA/IGAke3ZhbHVlfSR7dW5pdH1gIDogdmFsdWU7XG5cdFx0Y29uc3Qgc3ZnID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5yZW5kZXJlci5zZXRTdHlsZShzdmcsIG5hbWUsIHZhbHVlIGFzIHN0cmluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoc3ZnLCBuYW1lKTtcblx0XHR9XG5cdH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5cbmltcG9ydCB7IFNWR19JQ09OX1JFR0lTVFJZX1BST1ZJREVSIH0gZnJvbSAnLi9zdmctaWNvbi1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFN2Z0ljb25Db21wb25lbnQgfSBmcm9tICcuL3N2Zy1pY29uLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG5cdGltcG9ydHM6XHQgIFtcblx0XHRDb21tb25Nb2R1bGUsXG5cdF0sXG5cdGRlY2xhcmF0aW9uczogWyBTdmdJY29uQ29tcG9uZW50IF0sXG5cdHByb3ZpZGVyczogICAgWyBTVkdfSUNPTl9SRUdJU1RSWV9QUk9WSURFUiBdLFxuXHRleHBvcnRzOiAgICAgIFsgU3ZnSWNvbkNvbXBvbmVudCBdXG59KVxuXG5leHBvcnQgY2xhc3MgQW5ndWxhclN2Z0ljb25Nb2R1bGUge31cbiJdLCJuYW1lcyI6WyJodHRwIiwib2JzZXJ2YWJsZU9mIiwibWFwIiwidGFwIiwiY2F0Y2hFcnJvciIsIm9ic2VydmFibGVUaHJvd0Vycm9yIiwiZmluYWxpemUiLCJzaGFyZSIsIkluamVjdGFibGUiLCJIdHRwQ2xpZW50IiwiT3B0aW9uYWwiLCJTa2lwU2VsZiIsIkNvbXBvbmVudCIsIkVsZW1lbnRSZWYiLCJLZXlWYWx1ZURpZmZlcnMiLCJSZW5kZXJlcjIiLCJJbnB1dCIsIk5nTW9kdWxlIiwiQ29tbW9uTW9kdWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7UUFZQyxnQ0FBb0JBLE9BQWU7WUFBZixTQUFJLEdBQUpBLE9BQUksQ0FBVzs4QkFIZCxJQUFJLEdBQUcsRUFBc0I7cUNBQ3RCLElBQUksR0FBRyxFQUFrQztTQUdwRTs7Ozs7Ozs7UUFHRCx1Q0FBTTs7Ozs7O1lBQU4sVUFBTyxJQUFXLEVBQUUsSUFBVztnQkFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFOztvQkFDL0IsSUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDMUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7O29CQUNyQixJQUFNLEdBQUcsSUFBZSxHQUFHLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFDO29CQUNqRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQy9CO2FBQ0Q7Ozs7Ozs7UUFHRCx3Q0FBTzs7Ozs7WUFBUCxVQUFRLEdBQVU7Z0JBQWxCLGlCQXlCQztnQkF2QkEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDN0IsT0FBT0MsT0FBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENB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

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/common/http"),require("rxjs"),require("rxjs/operators"),require("@angular/common")):"function"==typeof define&&define.amd?define("angular-svg-icon",["exports","@angular/core","@angular/common/http","rxjs","rxjs/operators","@angular/common"],t):t(e["angular-svg-icon"]={},e.ng.core,e.ng.common.http,e.rxjs,e.Rx.Observable.prototype,e.ng.common)}(this,function(e,t,r,n,i,o){"use strict";var s=function(){function e(e){this.http=e,this.iconsByUrl=new Map,this.iconsLoadingByUrl=new Map}return e.prototype.addSvg=function(e,t){if(!this.iconsByUrl.has(e)){var r=document.createElement("DIV");r.innerHTML=t;var n=r.querySelector("svg");this.iconsByUrl.set(e,n)}},e.prototype.loadSvg=function(t){var r=this;if(this.iconsByUrl.has(t))return n.of(this.iconsByUrl.get(t));if(this.iconsLoadingByUrl.has(t))return this.iconsLoadingByUrl.get(t);var e=this.http.get(t,{responseType:"text"}).pipe(i.map(function(e){var t=document.createElement("DIV");return t.innerHTML=e,t.querySelector("svg")}),i.tap(function(e){return r.iconsByUrl.set(t,e)}),i.catchError(function(e){return console.error(e),n.throwError(e)}),i.finalize(function(){return r.iconsLoadingByUrl["delete"](t)}),i.share());return this.iconsLoadingByUrl.set(t,e),e},e.prototype.unloadSvg=function(e){this.iconsByUrl.has(e)&&this.iconsByUrl["delete"](e)},e}();function c(e,t){return e||new s(t)}s.decorators=[{type:t.Injectable}],s.ctorParameters=function(){return[{type:r.HttpClient}]};var a={provide:s,deps:[[new t.Optional,new t.SkipSelf,s],r.HttpClient],useFactory:c},u=function(){function e(e,t,r,n){this.element=e,this.differs=t,this.renderer=r,this.iconReg=n,this.stretch=!1}return Object.defineProperty(e.prototype,"svgStyle",{set:function(e){this._svgStyle=e,!this.differ&&e&&(this.differ=this.differs.find(e).create())},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this.init()},e.prototype.ngOnDestroy=function(){this.destroy()},e.prototype.ngOnChanges=function(e){e.src&&(this.svg&&this.destroy(),this.init()),e.stretch&&this.stylize()},e.prototype.ngDoCheck=function(){if(this.svg&&this.differ){var e=this.differ.diff(this._svgStyle);e&&this.applyChanges(e)}},e.prototype.init=function(){var t=this;this.icnSub=this.iconReg.loadSvg(this.src).subscribe(function(e){t.setSvg(e),t.resetDiffer()})},e.prototype.destroy=function(){this.svg=undefined,this.differ=undefined,this.icnSub&&this.icnSub.unsubscribe()},e.prototype.resetDiffer=function(){this._svgStyle&&!this.differ&&(this.differ=this.differs.find(this._svgStyle).create())},e.prototype.setSvg=function(e){if(e){var t=(this.svg=e).cloneNode(!0),r=this.element.nativeElement;r.innerHTML="",this.renderer.appendChild(r,t),this.stylize()}},e.prototype.stylize=function(){if(this.svg){var e=this.element.nativeElement.firstChild;!0===this.stretch?this.renderer.setAttribute(e,"preserveAspectRatio","none"):!1===this.stretch&&this.renderer.removeAttribute(e,"preserveAspectRatio")}},e.prototype.applyChanges=function(e){var t=this;e.forEachRemovedItem(function(e){return t.setStyle(e.key,null)}),e.forEachAddedItem(function(e){return t.setStyle(e.key,e.currentValue)}),e.forEachChangedItem(function(e){return t.setStyle(e.key,e.currentValue)})},e.prototype.setStyle=function(e,t){var r=function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,o=r.call(e),s=[];try{for(;(void 0===t||0<t--)&&!(n=o.next()).done;)s.push(n.value)}catch(c){i={error:c}}finally{try{n&&!n.done&&(r=o["return"])&&r.call(o)}finally{if(i)throw i.error}}return s}(e.split("."),2),n=r[0],i=r[1];t=null!==t&&i?""+t+i:t;var o=this.element.nativeElement.firstChild;null!==t?this.renderer.setStyle(o,n,t):this.renderer.removeStyle(o,n)},e}();u.decorators=[{type:t.Component,args:[{selector:"svg-icon",styles:[":host { display: inline-block; }"],template:"<ng-content></ng-content>"}]}],u.ctorParameters=function(){return[{type:t.ElementRef},{type:t.KeyValueDiffers},{type:t.Renderer2},{type:s}]},u.propDecorators={src:[{type:t.Input}],stretch:[{type:t.Input}],svgStyle:[{type:t.Input}]};var l=function(){};l.decorators=[{type:t.NgModule,args:[{imports:[o.CommonModule],declarations:[u],providers:[a],exports:[u]}]}],e.AngularSvgIconModule=l,e.SvgIconRegistryService=s,e.SVG_ICON_REGISTRY_PROVIDER_FACTORY=c,e.SVG_ICON_REGISTRY_PROVIDER=a,e.SvgIconComponent=u,Object.defineProperty(e,"__esModule",{value:!0})});
//# sourceMappingURL=angular-svg-icon.umd.min.js.map
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("@angular/common/http"),require("rxjs"),require("rxjs/operators"),require("@angular/common")):"function"==typeof define&&define.amd?define("angular-svg-icon",["exports","@angular/core","@angular/common/http","rxjs","rxjs/operators","@angular/common"],t):t(e["angular-svg-icon"]={},e.ng.core,e.ng.common.http,e.rxjs,e.rxjs.operators,e.ng.common)}(this,function(e,t,r,n,i,o){"use strict";var s=function(){function e(e){this.http=e,this.iconsByUrl=new Map,this.iconsLoadingByUrl=new Map}return e.prototype.addSvg=function(e,t){if(!this.iconsByUrl.has(e)){var r=document.createElement("DIV");r.innerHTML=t;var n=r.querySelector("svg");this.iconsByUrl.set(e,n)}},e.prototype.loadSvg=function(t){var r=this;if(this.iconsByUrl.has(t))return n.of(this.iconsByUrl.get(t));if(this.iconsLoadingByUrl.has(t))return this.iconsLoadingByUrl.get(t);var e=this.http.get(t,{responseType:"text"}).pipe(i.map(function(e){var t=document.createElement("DIV");return t.innerHTML=e,t.querySelector("svg")}),i.tap(function(e){return r.iconsByUrl.set(t,e)}),i.catchError(function(e){return console.error(e),n.throwError(e)}),i.finalize(function(){return r.iconsLoadingByUrl["delete"](t)}),i.share());return this.iconsLoadingByUrl.set(t,e),e},e.prototype.unloadSvg=function(e){this.iconsByUrl.has(e)&&this.iconsByUrl["delete"](e)},e.decorators=[{type:t.Injectable}],e.ctorParameters=function(){return[{type:r.HttpClient}]},e}();function c(e,t){return e||new s(t)}var u={provide:s,deps:[[new t.Optional,new t.SkipSelf,s],r.HttpClient],useFactory:c};var a=function(){function e(e,t,r,n){this.element=e,this.differs=t,this.renderer=r,this.iconReg=n,this.stretch=!1}return Object.defineProperty(e.prototype,"svgStyle",{set:function(e){this._svgStyle=e,!this.differ&&e&&(this.differ=this.differs.find(e).create())},enumerable:!0,configurable:!0}),e.prototype.ngOnInit=function(){this.init()},e.prototype.ngOnDestroy=function(){this.destroy()},e.prototype.ngOnChanges=function(e){e.src&&(this.svg&&this.destroy(),this.init()),e.stretch&&this.stylize()},e.prototype.ngDoCheck=function(){if(this.svg&&this.differ){var e=this.differ.diff(this._svgStyle);e&&this.applyChanges(e)}},e.prototype.init=function(){var t=this;this.icnSub=this.iconReg.loadSvg(this.src).subscribe(function(e){t.setSvg(e),t.resetDiffer()})},e.prototype.destroy=function(){this.svg=undefined,this.differ=undefined,this.icnSub&&this.icnSub.unsubscribe()},e.prototype.resetDiffer=function(){this._svgStyle&&!this.differ&&(this.differ=this.differs.find(this._svgStyle).create())},e.prototype.setSvg=function(e){if(e){var t=(this.svg=e).cloneNode(!0),r=this.element.nativeElement;r.innerHTML="",this.renderer.appendChild(r,t),this.stylize()}},e.prototype.stylize=function(){if(this.svg){var e=this.element.nativeElement.firstChild;!0===this.stretch?this.renderer.setAttribute(e,"preserveAspectRatio","none"):!1===this.stretch&&this.renderer.removeAttribute(e,"preserveAspectRatio")}},e.prototype.applyChanges=function(e){var t=this;e.forEachRemovedItem(function(e){return t.setStyle(e.key,null)}),e.forEachAddedItem(function(e){return t.setStyle(e.key,e.currentValue)}),e.forEachChangedItem(function(e){return t.setStyle(e.key,e.currentValue)})},e.prototype.setStyle=function(e,t){var r=function u(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,o=r.call(e),s=[];try{for(;(void 0===t||0<t--)&&!(n=o.next()).done;)s.push(n.value)}catch(c){i={error:c}}finally{try{n&&!n.done&&(r=o["return"])&&r.call(o)}finally{if(i)throw i.error}}return s}(e.split("."),2),n=r[0],i=r[1];t=null!==t&&i?""+t+i:t;var o=this.element.nativeElement.firstChild;null!==t?this.renderer.setStyle(o,n,t):this.renderer.removeStyle(o,n)},e.decorators=[{type:t.Component,args:[{selector:"svg-icon",template:"<ng-content></ng-content>",styles:[":host { display: inline-block; }"]}]}],e.ctorParameters=function(){return[{type:t.ElementRef},{type:t.KeyValueDiffers},{type:t.Renderer2},{type:s}]},e.propDecorators={src:[{type:t.Input}],stretch:[{type:t.Input}],svgStyle:[{type:t.Input}]},e}(),l=function(){function e(){}return e.decorators=[{type:t.NgModule,args:[{imports:[o.CommonModule],declarations:[a],providers:[u],exports:[a]}]}],e}();e.AngularSvgIconModule=l,e.SvgIconRegistryService=s,e.SVG_ICON_REGISTRY_PROVIDER_FACTORY=c,e.SVG_ICON_REGISTRY_PROVIDER=u,e.SvgIconComponent=a,Object.defineProperty(e,"__esModule",{value:!0})});
//# sourceMappingURL=angular-svg-icon.umd.min.js.map

@@ -1,289 +0,10 @@

import { Injectable, Optional, SkipSelf, Component, ElementRef, Input, KeyValueDiffers, Renderer2, NgModule } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { of, throwError } from 'rxjs';
import { map, tap, catchError, finalize, share } from 'rxjs/operators';
import { CommonModule } from '@angular/common';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
class SvgIconRegistryService {
/**
* @param {?} http
*/
constructor(http) {
this.http = http;
this.iconsByUrl = new Map();
this.iconsLoadingByUrl = new Map();
}
/**
* Add a SVG to the registry by passing a name and the SVG.
* @param {?} name
* @param {?} data
* @return {?}
*/
addSvg(name, data) {
if (!this.iconsByUrl.has(name)) {
const /** @type {?} */ div = document.createElement('DIV');
div.innerHTML = data;
const /** @type {?} */ svg = /** @type {?} */ (div.querySelector('svg'));
this.iconsByUrl.set(name, svg);
}
}
/**
* Load a SVG to the registry from a URL.
* @param {?} url
* @return {?}
*/
loadSvg(url) {
if (this.iconsByUrl.has(url)) {
return of(this.iconsByUrl.get(url));
}
else if (this.iconsLoadingByUrl.has(url)) {
return this.iconsLoadingByUrl.get(url);
}
else {
const /** @type {?} */ o = /** @type {?} */ (this.http.get(url, { responseType: 'text' }).pipe(map(svg => {
const /** @type {?} */ div = document.createElement('DIV');
div.innerHTML = svg;
return /** @type {?} */ (div.querySelector('svg'));
}), tap(svg => this.iconsByUrl.set(url, svg)), catchError(err => {
console.error(err);
return throwError(err);
}), finalize(() => this.iconsLoadingByUrl.delete(url)), share()));
this.iconsLoadingByUrl.set(url, o);
return o;
}
}
/**
* Remove a SVG from the registry by URL (or name).
* @param {?} url
* @return {?}
*/
unloadSvg(url) {
if (this.iconsByUrl.has(url)) {
this.iconsByUrl.delete(url);
}
}
}
SvgIconRegistryService.decorators = [
{ type: Injectable },
];
/** @nocollapse */
SvgIconRegistryService.ctorParameters = () => [
{ type: HttpClient, },
];
/**
* @param {?} parentRegistry
* @param {?} http
* @return {?}
*/
function SVG_ICON_REGISTRY_PROVIDER_FACTORY(parentRegistry, http) {
return parentRegistry || new SvgIconRegistryService(http);
}
const SVG_ICON_REGISTRY_PROVIDER = {
provide: SvgIconRegistryService,
deps: [[new Optional(), new SkipSelf(), SvgIconRegistryService], HttpClient],
useFactory: SVG_ICON_REGISTRY_PROVIDER_FACTORY
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
class SvgIconComponent {
/**
* @param {?} element
* @param {?} differs
* @param {?} renderer
* @param {?} iconReg
*/
constructor(element, differs, renderer, iconReg) {
this.element = element;
this.differs = differs;
this.renderer = renderer;
this.iconReg = iconReg;
this.stretch = false;
}
/**
* @param {?} v
* @return {?}
*/
set svgStyle(v) {
this._svgStyle = v;
if (!this.differ && v) {
this.differ = this.differs.find(v).create();
}
}
/**
* @return {?}
*/
ngOnInit() {
this.init();
}
/**
* @return {?}
*/
ngOnDestroy() {
this.destroy();
}
/**
* @param {?} changeRecord
* @return {?}
*/
ngOnChanges(changeRecord) {
if (changeRecord['src']) {
if (this.svg) {
this.destroy();
}
this.init();
}
if (changeRecord['stretch']) {
this.stylize();
}
}
/**
* @return {?}
*/
ngDoCheck() {
if (this.svg && this.differ) {
const /** @type {?} */ changes = this.differ.diff(this._svgStyle);
if (changes) {
this.applyChanges(changes);
}
}
}
/**
* @return {?}
*/
init() {
this.icnSub = this.iconReg.loadSvg(this.src).subscribe(svg => {
this.setSvg(svg);
this.resetDiffer();
});
}
/**
* @return {?}
*/
destroy() {
this.svg = undefined;
this.differ = undefined;
if (this.icnSub) {
this.icnSub.unsubscribe();
}
}
/**
* @return {?}
*/
resetDiffer() {
if (this._svgStyle && !this.differ) {
this.differ = this.differs.find(this._svgStyle).create();
}
}
/**
* @param {?} svg
* @return {?}
*/
setSvg(svg) {
if (svg) {
this.svg = svg;
const /** @type {?} */ icon = /** @type {?} */ (svg.cloneNode(true));
const /** @type {?} */ elem = this.element.nativeElement;
elem.innerHTML = '';
this.renderer.appendChild(elem, icon);
this.stylize();
}
}
/**
* @return {?}
*/
stylize() {
if (this.svg) {
const /** @type {?} */ svg = this.element.nativeElement.firstChild;
if (this.stretch === true) {
this.renderer.setAttribute(svg, 'preserveAspectRatio', 'none');
}
else if (this.stretch === false) {
this.renderer.removeAttribute(svg, 'preserveAspectRatio');
}
}
}
/**
* @param {?} changes
* @return {?}
*/
applyChanges(changes) {
changes.forEachRemovedItem((record) => this.setStyle(record.key, null));
changes.forEachAddedItem((record) => this.setStyle(record.key, record.currentValue));
changes.forEachChangedItem((record) => this.setStyle(record.key, record.currentValue));
}
/**
* @param {?} nameAndUnit
* @param {?} value
* @return {?}
*/
setStyle(nameAndUnit, value) {
const [name, unit] = nameAndUnit.split('.');
value = value !== null && unit ? `${value}${unit}` : value;
const /** @type {?} */ svg = this.element.nativeElement.firstChild;
if (value !== null) {
this.renderer.setStyle(svg, name, /** @type {?} */ (value));
}
else {
this.renderer.removeStyle(svg, name);
}
}
}
SvgIconComponent.decorators = [
{ type: Component, args: [{
selector: 'svg-icon',
styles: [`:host { display: inline-block; }`],
template: '<ng-content></ng-content>'
},] },
];
/** @nocollapse */
SvgIconComponent.ctorParameters = () => [
{ type: ElementRef, },
{ type: KeyValueDiffers, },
{ type: Renderer2, },
{ type: SvgIconRegistryService, },
];
SvgIconComponent.propDecorators = {
"src": [{ type: Input },],
"stretch": [{ type: Input },],
"svgStyle": [{ type: Input },],
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
class AngularSvgIconModule {
}
AngularSvgIconModule.decorators = [
{ type: NgModule, args: [{
imports: [
CommonModule,
],
declarations: [SvgIconComponent],
providers: [SVG_ICON_REGISTRY_PROVIDER],
exports: [SvgIconComponent]
},] },
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
/**
* Generated bundle index. Do not edit.
*/
export { AngularSvgIconModule, SvgIconRegistryService, SVG_ICON_REGISTRY_PROVIDER_FACTORY, SVG_ICON_REGISTRY_PROVIDER, SvgIconComponent } from './index';
export { AngularSvgIconModule, SvgIconRegistryService, SVG_ICON_REGISTRY_PROVIDER_FACTORY, SVG_ICON_REGISTRY_PROVIDER, SvgIconComponent };
//# sourceMappingURL=angular-svg-icon.js.map
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1zdmctaWNvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItc3ZnLWljb24vIiwic291cmNlcyI6WyJhbmd1bGFyLXN2Zy1pY29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQSwrSUFBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19

@@ -1,201 +0,10 @@

import { __read } from 'tslib';
import { Injectable, Optional, SkipSelf, Component, ElementRef, Input, KeyValueDiffers, Renderer2, NgModule } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { of, throwError } from 'rxjs';
import { map, tap, catchError, finalize, share } from 'rxjs/operators';
import { CommonModule } from '@angular/common';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
/**
* Generated bundle index. Do not edit.
*/
export { AngularSvgIconModule, SvgIconRegistryService, SVG_ICON_REGISTRY_PROVIDER_FACTORY, SVG_ICON_REGISTRY_PROVIDER, SvgIconComponent } from './index';
var SvgIconRegistryService = /** @class */ (function () {
function SvgIconRegistryService(http) {
this.http = http;
this.iconsByUrl = new Map();
this.iconsLoadingByUrl = new Map();
}
SvgIconRegistryService.prototype.addSvg = function (name, data) {
if (!this.iconsByUrl.has(name)) {
var div = document.createElement('DIV');
div.innerHTML = data;
var svg = (div.querySelector('svg'));
this.iconsByUrl.set(name, svg);
}
};
SvgIconRegistryService.prototype.loadSvg = function (url) {
var _this = this;
if (this.iconsByUrl.has(url)) {
return of(this.iconsByUrl.get(url));
}
else if (this.iconsLoadingByUrl.has(url)) {
return this.iconsLoadingByUrl.get(url);
}
else {
var o = (this.http.get(url, { responseType: 'text' }).pipe(map(function (svg) {
var div = document.createElement('DIV');
div.innerHTML = svg;
return (div.querySelector('svg'));
}), tap(function (svg) { return _this.iconsByUrl.set(url, svg); }), catchError(function (err) {
console.error(err);
return throwError(err);
}), finalize(function () { return _this.iconsLoadingByUrl.delete(url); }), share()));
this.iconsLoadingByUrl.set(url, o);
return o;
}
};
SvgIconRegistryService.prototype.unloadSvg = function (url) {
if (this.iconsByUrl.has(url)) {
this.iconsByUrl.delete(url);
}
};
return SvgIconRegistryService;
}());
SvgIconRegistryService.decorators = [
{ type: Injectable },
];
SvgIconRegistryService.ctorParameters = function () { return [
{ type: HttpClient, },
]; };
function SVG_ICON_REGISTRY_PROVIDER_FACTORY(parentRegistry, http) {
return parentRegistry || new SvgIconRegistryService(http);
}
var SVG_ICON_REGISTRY_PROVIDER = {
provide: SvgIconRegistryService,
deps: [[new Optional(), new SkipSelf(), SvgIconRegistryService], HttpClient],
useFactory: SVG_ICON_REGISTRY_PROVIDER_FACTORY
};
var SvgIconComponent = /** @class */ (function () {
function SvgIconComponent(element, differs, renderer, iconReg) {
this.element = element;
this.differs = differs;
this.renderer = renderer;
this.iconReg = iconReg;
this.stretch = false;
}
Object.defineProperty(SvgIconComponent.prototype, "svgStyle", {
set: function (v) {
this._svgStyle = v;
if (!this.differ && v) {
this.differ = this.differs.find(v).create();
}
},
enumerable: true,
configurable: true
});
SvgIconComponent.prototype.ngOnInit = function () {
this.init();
};
SvgIconComponent.prototype.ngOnDestroy = function () {
this.destroy();
};
SvgIconComponent.prototype.ngOnChanges = function (changeRecord) {
if (changeRecord['src']) {
if (this.svg) {
this.destroy();
}
this.init();
}
if (changeRecord['stretch']) {
this.stylize();
}
};
SvgIconComponent.prototype.ngDoCheck = function () {
if (this.svg && this.differ) {
var changes = this.differ.diff(this._svgStyle);
if (changes) {
this.applyChanges(changes);
}
}
};
SvgIconComponent.prototype.init = function () {
var _this = this;
this.icnSub = this.iconReg.loadSvg(this.src).subscribe(function (svg) {
_this.setSvg(svg);
_this.resetDiffer();
});
};
SvgIconComponent.prototype.destroy = function () {
this.svg = undefined;
this.differ = undefined;
if (this.icnSub) {
this.icnSub.unsubscribe();
}
};
SvgIconComponent.prototype.resetDiffer = function () {
if (this._svgStyle && !this.differ) {
this.differ = this.differs.find(this._svgStyle).create();
}
};
SvgIconComponent.prototype.setSvg = function (svg) {
if (svg) {
this.svg = svg;
var icon = (svg.cloneNode(true));
var elem = this.element.nativeElement;
elem.innerHTML = '';
this.renderer.appendChild(elem, icon);
this.stylize();
}
};
SvgIconComponent.prototype.stylize = function () {
if (this.svg) {
var svg = this.element.nativeElement.firstChild;
if (this.stretch === true) {
this.renderer.setAttribute(svg, 'preserveAspectRatio', 'none');
}
else if (this.stretch === false) {
this.renderer.removeAttribute(svg, 'preserveAspectRatio');
}
}
};
SvgIconComponent.prototype.applyChanges = function (changes) {
var _this = this;
changes.forEachRemovedItem(function (record) { return _this.setStyle(record.key, null); });
changes.forEachAddedItem(function (record) { return _this.setStyle(record.key, record.currentValue); });
changes.forEachChangedItem(function (record) { return _this.setStyle(record.key, record.currentValue); });
};
SvgIconComponent.prototype.setStyle = function (nameAndUnit, value) {
var _a = __read(nameAndUnit.split('.'), 2), name = _a[0], unit = _a[1];
value = value !== null && unit ? "" + value + unit : value;
var svg = this.element.nativeElement.firstChild;
if (value !== null) {
this.renderer.setStyle(svg, name, (value));
}
else {
this.renderer.removeStyle(svg, name);
}
};
return SvgIconComponent;
}());
SvgIconComponent.decorators = [
{ type: Component, args: [{
selector: 'svg-icon',
styles: [":host { display: inline-block; }"],
template: '<ng-content></ng-content>'
},] },
];
SvgIconComponent.ctorParameters = function () { return [
{ type: ElementRef, },
{ type: KeyValueDiffers, },
{ type: Renderer2, },
{ type: SvgIconRegistryService, },
]; };
SvgIconComponent.propDecorators = {
"src": [{ type: Input },],
"stretch": [{ type: Input },],
"svgStyle": [{ type: Input },],
};
var AngularSvgIconModule = /** @class */ (function () {
function AngularSvgIconModule() {
}
return AngularSvgIconModule;
}());
AngularSvgIconModule.decorators = [
{ type: NgModule, args: [{
imports: [
CommonModule,
],
declarations: [SvgIconComponent],
providers: [SVG_ICON_REGISTRY_PROVIDER],
exports: [SvgIconComponent]
},] },
];
export { AngularSvgIconModule, SvgIconRegistryService, SVG_ICON_REGISTRY_PROVIDER_FACTORY, SVG_ICON_REGISTRY_PROVIDER, SvgIconComponent };
//# sourceMappingURL=angular-svg-icon.js.map
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1zdmctaWNvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItc3ZnLWljb24vIiwic291cmNlcyI6WyJhbmd1bGFyLXN2Zy1pY29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQSwrSUFBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
{
"$schema": "../../node_modules/ng-packagr/package.schema.json",
"name": "angular-svg-icon",
"description": "Angular 6 component for inlining SVGs allowing them to be easily styled with CSS.",
"version": "6.0.0",
"description": "Angular 6+ component for inlining SVGs allowing them to be easily styled with CSS.",
"version": "6.0.1",
"repository": {

@@ -18,11 +18,16 @@ "type": "git",

"peerDependencies": {
"@angular/core": "^6.0.0",
"@angular/common": "^6.0.0",
"rxjs": "^6.0.0"
"@angular/core": ">=6.0.0",
"@angular/common": ">=6.0.0",
"rxjs": ">=6.0.0"
},
"main": "bundles/angular-svg-icon.umd.js",
"module": "esm5/angular-svg-icon.js",
"es2015": "esm2015/angular-svg-icon.js",
"module": "fesm5/angular-svg-icon.js",
"es2015": "fesm2015/angular-svg-icon.js",
"esm5": "esm5/angular-svg-icon.js",
"esm2015": "esm2015/angular-svg-icon.js",
"fesm5": "fesm5/angular-svg-icon.js",
"fesm2015": "fesm2015/angular-svg-icon.js",
"typings": "angular-svg-icon.d.ts",
"metadata": "angular-svg-icon.metadata.json",
"sideEffects": false,
"dependencies": {

@@ -29,0 +34,0 @@ "tslib": "^1.9.0"

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc